Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Sep 2013 12:08:37 +0800
From:      Chenchong Qin <qinchenchong@gmail.com>
To:        Adrian Chadd <adrian@freebsd.org>
Cc:        "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>
Subject:   Re: Chenchong's work on net80211_ratectl
Message-ID:  <CAFnsE3fnApV_=FNggEuhy1B=idXLxgymqqmJ=9XXrjspLoe%2BWA@mail.gmail.com>
In-Reply-To: <CAJ-Vmonbj9KE_oM6xXPnKksA1u=9FH41e4_bQE1cgwebydZgtA@mail.gmail.com>
References:  <CAFnsE3dYdPf5yGTFH683Q1Zh0mc-g%2B_YtCTraNNt28z2vBoSKw@mail.gmail.com> <CAJ-Vmom4sY7jcNwWmJkrDwfWjsok2fk8UEwTi5A=egj1JyerLw@mail.gmail.com> <CAFnsE3cyg=msBfQqqKUMmLABSL=j24VoMBwbBjxQ6b7Dyy7Mqg@mail.gmail.com> <CAJ-Vmo=k8NddAYyAJCkx4eOaA_8XsSxg6uKrdddx%2BgmeT%2BX9KA@mail.gmail.com> <CAFnsE3eaOyRcO3LXSi3L=jbzpyMv5Nt_jRGKt_mmA0WV-EV5vA@mail.gmail.com> <CAJ-VmokdxLhK5x6kO=jJzk-dv61EDK-ZgmndOimoyWWf76HiZA@mail.gmail.com> <CAJ-VmonMjR5iVTMVN9532d%2BPqOXWNUoZvxPtQir5h=yGxU-XdQ@mail.gmail.com> <CAFnsE3d9nG-X2b=z1srKfTtpxC3w5L%2B6Hg3TbOnAQrJN%2Bt19GA@mail.gmail.com> <CAJ-VmokF6hPtg9FoEdeJXLLaZRNhzd=nr_o6nHE%2BjYiQKTg3zQ@mail.gmail.com> <CAFnsE3eMwX-GiRzJt8jk4r9mxwSAQkcrDwk%2BnWVG7q6dabeA3A@mail.gmail.com> <CAJ-Vmo=mzvS0UBC7fGx2t501%2Bfioi4DJcw8qobOpbYOUiraqGg@mail.gmail.com> <CAFnsE3df=1WEuLZh5355v_K2eBgcuBbpoza74Y-5vvNupBz22A@mail.gmail.com> <CAJ-VmokyXwkKLdsJw74bux7G5EJSRvFhugTcLR9BgXfw4ysYRg@mail.gmail.com> <CAJ-VmokU=ZXysjZfAJ-REZL7kwg-_Z-LeAKca7AefONW_O1E5A@mail.gmail.com> <CAFnsE3cS_2Ad1geQQ0UB4doEgqVfhNBMi6j4fCRpFgQqcu2kJw@mail.gmail.com> <CAFnsE3eMrwpo=hcFb9XfpLL53Ppso%2B%2BXTBfpieP8FGejAKW1_w@mail.gmail.com> <CAJ-Vmo=s=0u7VO00vgzxmR7bE4aTtMrshZ3j5F312dya284V1g@mail.gmail.com> <CAFnsE3c%2BOg_2hVXO3zU7gmY4xFQjnxbv=ehJm=pbbpLJcgwJrQ@mail.gmail.com> <CAJ-Vmo=D3BNhhSn9D3x6hBry=fDecOd7BwttQ5Yw2iUKGDBN3w@mail.gmail.com> <CAFnsE3dw5bOyVRqMb9K3ME%2BHoDL61-e_XNJjjt_nRTaY=4dnhw@mail.gmail.com> <CAJ-Vmo=0tkTKQnOjrmYKqWqC%2B_nnFLqimdp06STETxLsFgxKxQ@mail.gmail.com> <CAFnsE3dm27483GVp4PRiwk=sxagT7NXQz4fmyOpth2zpCM2MwQ@mail.gmail.com> <CAFnsE3fvpjCXEC1gN46VXfPdeXG5RSVzNiJkZJiQ6xSYQFb89g@mail.gmail.com> <CAFnsE3e1r6Ah5SSrqnrxoqXMRm3yCaUxCjSD90epWQJEZU-pzw@mail.gmail.com> <CAJ-Vmok3dAHiwbeyEU6B4oWm=n36ME2yyGE69twjdEygr8iZSw@mail.gmail.com> <CAFnsE3dxXr05%2Bv7F2hF7Qauoz-qqDzxkXiZrhUAtaxf0ObNhDg@mail.gmail.com> <CAJ-Vmo=Se2JziV8D2PYNgxmZro-3JRpp3ZsRkTTWvUQ0YigRPw@mail.gmail.com> <CAFnsE3cFFHxOwLY2OFxhCUAM-Bg2zZvjrC8LMx17N-dfND74KQ@mail.gmail.com> <CAJ-Vmonbj9KE_oM6xXPnKksA1u=9FH41e4_bQE1cgwebydZgtA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--089e013a132afd7f2f04e6643d3a
Content-Type: text/plain; charset=ISO-8859-1

Hi!

Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make other
drivers work, the __init__ and __findrate__ parts also need to be adapted.
When initialize the ratectl state, a cap flag must be properly set and feed
to ieee80211_ratectl_init().  __findrate__ part should be repalced with our
ieee80211_ratectl_rates().

I've added  ieee80211_ratectl_rc_info_get() to be used to get the
ieee80211_rc_info. If found the tag, use it; if not, add a new one and use
it. Then we don't
need to free it explicitly (the tag is freed when associated mbuf is freed)
and this interface is unified to both __findrate__ and __complete__.

Thanks!

Chenchong


On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd <adrian@freebsd.org> wrote:

> Ah, cool! I see you've only just made the other drivers compile; what's
> required to make them work? i guess a call
> to ieee80211_ratectl_rc_info_set() ?
>
> Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper that
> does the "lookup tag; if one exists use it else use a temporary one" code
> that you put in if_ath.c, if_ath_tx.c.
>
> Other than that, this is looking very good! thankyou!
>
>
> -adrian
>
>
>
> On 13 September 2013 20:52, Chenchong Qin <qinchenchong@gmail.com> wrote:
>
>> Hi,
>>
>> Here is latest update. Per-device ratectl statistics is implemented in
>> ath and attached when ath is attaching.
>>
>> Thanks!
>>
>> Chenchong
>>
>>
>> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd <adrian@freebsd.org> wrote:
>>
>>> Sweet, thanks!
>>>
>>>
>>>
>>> -adrian
>>>
>>>
>>>
>>> On 13 September 2013 09:11, Chenchong Qin <qinchenchong@gmail.com>wrote:
>>>
>>>> Hi!
>>>>
>>>> Here is some updates.
>>>>
>>>> Another member is added to ieee80211_rc_info to record value of the
>>>> maximum aggregate size. Then, in aggregation scenario, ratectl algo can
>>>> inform aggregation selection code of proper maximum aggregate size.
>>>>
>>>> Per-vap ratectl statistics is exported through sysctl. When
>>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's
>>>> convenient to implement the per-device api -- just traverse the vap list
>>>> and call per-vap api for each vap. But, we know that ratectl of net80211
>>>> provides service to vap-granularity object, not to device directly. So, is
>>>> it more suitable to implement the per-device api in device driver (i.e.
>>>> attach per-device api when attaching the device)?
>>>>
>>>> Code will be posted later.
>>>>
>>>> Thanks!
>>>>
>>>> Chenchong
>>>>
>>>>
>>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd <adrian@freebsd.org>wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> For now, yes, you have to assume that you won't always get a response
>>>>> for a rate lookup. The buffer may be sent with NOACK set, it may be deleted
>>>>> during a channel change or scan, etc.
>>>>>
>>>>> And yes - the rate control lookup stuff for aggregate frames is a bit
>>>>> messy. It would be nice for the rate control code to return the rate _and_
>>>>> the maximum aggregate size, in case the aggregation selection wants to cap
>>>>> how long frames are at the given choice.
>>>>>
>>>>>
>>>>>
>>>>> -adrian
>>>>>
>>>>>
>>>>>
>>>>> On 11 September 2013 10:29, Chenchong Qin <qinchenchong@gmail.com>wrote:
>>>>>
>>>>>> Hi!
>>>>>>
>>>>>> I've added some aggregation support here!
>>>>>>
>>>>>> At first I intend to pass subframe informations(nframes, per-subframe
>>>>>> length etc.)
>>>>>> to the ratectl api. But it seems to be a paradox that rate lookup
>>>>>> must be performed
>>>>>> before the ampdu is formed (aggregation limit based on the rate
>>>>>> control decision
>>>>>> is need) and subframe informations can be obtain only after the ampdu
>>>>>> is formed.
>>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to let it
>>>>>> distinguish
>>>>>> aggregation and non-aggregation scenarios. If rate lookup is called
>>>>>> in an aggregation
>>>>>> scenario, this flag is set. Then, ratectl algo knows that it's now
>>>>>> finding rates for an
>>>>>> ampdu and the framelen which records len of the first frame can be
>>>>>> ignored. When
>>>>>> it comes to complete period, tx status that shows number of subframes
>>>>>> been sent
>>>>>> and number of subframes been successfully received is passed to the
>>>>>> ratectl api.
>>>>>>
>>>>>> I also get a question here - whether one tx that doesn't perform rate
>>>>>> lookup will call
>>>>>> the complete procedure?
>>>>>>
>>>>>> Thanks!
>>>>>>
>>>>>> Chenchong
>>>>>>
>>>>>>
>>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin <
>>>>>> qinchenchong@gmail.com> wrote:
>>>>>>
>>>>>>> Hi!
>>>>>>>
>>>>>>> I've added the common ratectl state as an mbuf tag!
>>>>>>>
>>>>>>> After days of frustration (compile errors, boot failed, kernel
>>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use
>>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the
>>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time.
>>>>>>> Just add some debug msgs to it. Please reference my gsoc svn repo<https://svnweb.freebsd.org/socsvn/soc2013/ccqin/head/>;
>>>>>>> .
>>>>>>>
>>>>>>> It's worth mentioning that sometimes the kernel will "freezing" (it
>>>>>>> looks like all things stop working, screen is freezing, keyboard and mouse
>>>>>>> are not responding) after wireless stuff start working for a while. At
>>>>>>> first, I consider it caused by my modification to ath. But this strange
>>>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some
>>>>>>> useful messages just before it happens. By the way, I use a AR9227 device.
>>>>>>>
>>>>>>> And, I found that, for aggregation scenario, ath gathers tx
>>>>>>> information and update the ratectl states. So, what we can do to net80211
>>>>>>> to let it support aggregation?
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>> Chenchong
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin <
>>>>>>> qinchenchong@gmail.com> wrote:
>>>>>>>
>>>>>>>> OK!
>>>>>>>>
>>>>>>>> Thanks! :-)
>>>>>>>>
>>>>>>>> Chenchong
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd <adrian@freebsd.org>wrote:
>>>>>>>>
>>>>>>>>> Hi!
>>>>>>>>>
>>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in
>>>>>>>>> net80211 and how mbuf tags are added.
>>>>>>>>>
>>>>>>>>> I've long thought about adding a net80211 mbuf tag to represent
>>>>>>>>> -all- of the tx related state - TX callback, rate control, rate completion,
>>>>>>>>> aggregation state, retry count, etc. That way all the drivers can use it.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> -adrian
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

--089e013a132afd7f2f04e6643d3a
Content-Type: application/octet-stream; 
	name="20130915-net80211-ratectl-ath.diff"
Content-Disposition: attachment; 
	filename="20130915-net80211-ratectl-ath.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hllqt0vv0

SW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9hbXJyLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEv
aWVlZTgwMjExX2FtcnIuYwkocmV2aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjEx
X2FtcnIuYwkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQAogCiAjaW5jbHVkZSA8bmV0
ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9odC5o
PgorI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CiAjaW5jbHVkZSA8bmV0
ODAyMTEvaWVlZTgwMjExX2FtcnIuaD4KLSNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0
ZWN0bC5oPgogCiAjZGVmaW5lIGlzX3N1Y2Nlc3MoYW1uKQlcCiAJKChhbW4pLT5hbW5fcmV0cnlj
bnQgPCAoYW1uKS0+YW1uX3R4Y250IC8gMTApCkBAIC01OCwxOCArNTgsMTkgQEAKIAkoKGFtbikt
PmFtbl90eGNudCA+IDEwKQogCiBzdGF0aWMgdm9pZAlhbXJyX3NldGludGVydmFsKGNvbnN0IHN0
cnVjdCBpZWVlODAyMTF2YXAgKiwgaW50KTsKLXN0YXRpYyB2b2lkCWFtcnJfaW5pdChzdHJ1Y3Qg
aWVlZTgwMjExdmFwICopOworc3RhdGljIHZvaWQJYW1ycl9pbml0KHN0cnVjdCBpZWVlODAyMTF2
YXAgKiwgdWludDMyX3QpOwogc3RhdGljIHZvaWQJYW1ycl9kZWluaXQoc3RydWN0IGllZWU4MDIx
MXZhcCAqKTsKIHN0YXRpYyB2b2lkCWFtcnJfbm9kZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfbm9k
ZSAqKTsKIHN0YXRpYyB2b2lkCWFtcnJfbm9kZV9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9ub2Rl
ICopOwogc3RhdGljIGludAlhbXJyX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2FtcnIgKiwKICAg
ICAJCQlzdHJ1Y3QgaWVlZTgwMjExX2FtcnJfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUg
Kik7CiBzdGF0aWMgaW50CWFtcnJfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgdm9pZCAq
LCB1aW50MzJfdCk7CitzdGF0aWMgdm9pZAlhbXJyX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbm9k
ZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKik7CiBzdGF0aWMgdm9pZAlhbXJyX3R4X2Nv
bXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwKLSAgICAJCQljb25zdCBzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKiwgaW50LCAKLQkJCXZvaWQgKiwgdm9pZCAqKTsKLXN0YXRpYyB2b2lk
CWFtcnJfdHhfdXBkYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwKKyAgICAJCQlj
b25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICop
Oworc3RhdGljIHZvaWQJYW1ycl90eF91cGRhdGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAq
LAogCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIHZvaWQgKiwgdm9pZCAqLCB2b2lk
ICopOworc3RhdGljIHZvaWQJYW1ycl9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICop
Owogc3RhdGljIHZvaWQJYW1ycl9zeXNjdGxhdHRhY2goc3RydWN0IGllZWU4MDIxMXZhcCAqLAog
CQkJc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqLCBzdHJ1Y3Qgc3lzY3RsX29pZCAqKTsKIApAQCAt
ODUsOSArODYsMTEgQEAKIAkuaXJfbm9kZV9pbml0CT0gYW1ycl9ub2RlX2luaXQsCiAJLmlyX25v
ZGVfZGVpbml0CT0gYW1ycl9ub2RlX2RlaW5pdCwKIAkuaXJfcmF0ZQk9IGFtcnJfcmF0ZSwKKwku
aXJfcmF0ZXMJPSBhbXJyX3JhdGVzLAogCS5pcl90eF9jb21wbGV0ZQk9IGFtcnJfdHhfY29tcGxl
dGUsCiAJLmlyX3R4X3VwZGF0ZQk9IGFtcnJfdHhfdXBkYXRlLAogCS5pcl9zZXRpbnRlcnZhbAk9
IGFtcnJfc2V0aW50ZXJ2YWwsCisJLmlyX3N0YXRzCT0gYW1ycl9zdGF0cywKIH07CiBJRUVFODAy
MTFfUkFURUNUTF9NT0RVTEUoYW1yciwgMSk7CiBJRUVFODAyMTFfUkFURUNUTF9BTEcoYW1yciwg
SUVFRTgwMjExX1JBVEVDVExfQU1SUiwgYW1ycik7CkBAIC0xMDUsNyArMTA4LDcgQEAKIH0KIAog
c3RhdGljIHZvaWQKLWFtcnJfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCithbXJyX2lu
aXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCB1aW50MzJfdCBjYXBhYmlsaXRpZXMpCiB7CiAJ
c3RydWN0IGllZWU4MDIxMV9hbXJyICphbXJyOwogCkBAIC0xMTcsNiArMTIwLDEwIEBACiAJCWlm
X3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHJhdGVjdGwgc3RydWN0dXJlXG4i
KTsKIAkJcmV0dXJuOwogCX0KKworCXN0cnVjdCBpZWVlODAyMTFfcmNfc3RhdCAqIGlycyA9IElF
RUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmlyc19jYXBhYmlsaXRpZXMgPSBjYXBh
YmlsaXRpZXM7CisKIAlhbXJyLT5hbXJyX21pbl9zdWNjZXNzX3RocmVzaG9sZCA9IElFRUU4MDIx
MV9BTVJSX01JTl9TVUNDRVNTX1RIUkVTSE9MRDsKIAlhbXJyLT5hbXJyX21heF9zdWNjZXNzX3Ro
cmVzaG9sZCA9IElFRUU4MDIxMV9BTVJSX01BWF9TVUNDRVNTX1RIUkVTSE9MRDsKIAlhbXJyX3Nl
dGludGVydmFsKHZhcCwgNTAwIC8qIG1zICovKTsKQEAgLTEyOSwxNyArMTM2LDYgQEAKIAlmcmVl
KHZhcC0+aXZfcnMsIE1fODAyMTFfUkFURUNUTCk7CiB9CiAKLXN0YXRpYyBpbnQKLWFtcnJfbm9k
ZV9pc18xMW4oc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKLXsKLQotCWlmIChuaS0+bmlfY2hh
biA9PSBOVUxMKQotCQlyZXR1cm4gKDApOwotCWlmIChuaS0+bmlfY2hhbiA9PSBJRUVFODAyMTFf
Q0hBTl9BTllDKQotCQlyZXR1cm4gKDApOwotCXJldHVybiAoSUVFRTgwMjExX0lTX0NIQU5fSFQo
bmktPm5pX2NoYW4pKTsKLX0KLQogc3RhdGljIHZvaWQKIGFtcnJfbm9kZV9pbml0KHN0cnVjdCBp
ZWVlODAyMTFfbm9kZSAqbmkpCiB7CkBAIC0xNTksMjkgKzE1NSwyMCBAQAogCQl9CiAJfSBlbHNl
CiAJCWFtbiA9IG5pLT5uaV9yY3RsczsKKwogCWFtbi0+YW1uX2FtcnIgPSBhbXJyOwogCWFtbi0+
YW1uX3N1Y2Nlc3MgPSAwOwogCWFtbi0+YW1uX3JlY292ZXJ5ID0gMDsKIAlhbW4tPmFtbl90eGNu
dCA9IGFtbi0+YW1uX3JldHJ5Y250ID0gMDsKIAlhbW4tPmFtbl9zdWNjZXNzX3RocmVzaG9sZCA9
IGFtcnItPmFtcnJfbWluX3N1Y2Nlc3NfdGhyZXNob2xkOwogCi0JLyogMTFuIG9yIG5vdD8gUGlj
ayB0aGUgcmlnaHQgcmF0ZXNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkv
KiBYWFggZXcgKi8KLQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19S
QVRFQ1RMLCBuaSwKLQkJICAgICIlczogMTFuIG5vZGUiLCBfX2Z1bmNfXyk7Ci0JCXJzID0gKHN0
cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqKSAmbmktPm5pX2h0cmF0ZXM7Ci0JfSBlbHNlIHsKLQkJ
SUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKLQkJ
ICAgICIlczogbm9uLTExbiBub2RlIiwgX19mdW5jX18pOwotCQlycyA9ICZuaS0+bmlfcmF0ZXM7
Ci0JfQorCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwogCiAJLyogSW5p
dGlhbCByYXRlIC0gbG93ZXN0ICovCiAJcmF0ZSA9IHJzLT5yc19yYXRlc1swXTsKIAogCS8qIFhY
WCBjbGVhciB0aGUgYmFzaWMgcmF0ZSBmbGFnIGlmIGl0J3Mgbm90IDExbiAqLwotCWlmICghIGFt
cnJfbm9kZV9pc18xMW4obmkpKQorCWlmICghIGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4o
bmkpKQogCQlyYXRlICY9IElFRUU4MDIxMV9SQVRFX1ZBTDsKIAogCS8qIHBpY2sgaW5pdGlhbCBy
YXRlIGZyb20gdGhlIHJhdGVzZXQgLSBIVCBvciBvdGhlcndpc2UgKi8KQEAgLTE4OSw3ICsxNzYs
NyBAQAogCSAgICBhbW4tPmFtbl9yaXgtLSkgewogCQkvKiBsZWdhY3kgLSBhbnl0aGluZyA8IDM2
bWJpdCwgc3RvcCBzZWFyY2hpbmcgKi8KIAkJLyogMTFuIC0gc3RvcCBhdCBNQ1M0IC8gTUNTMTIg
LyBNQ1MyOCAqLwotCQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkgJiYKKwkJaWYgKGllZWU4MDIx
MV9yYXRlY3RsX25vZGVfaXMxMW4obmkpICYmCiAJCSAgICAocnMtPnJzX3JhdGVzW2Ftbi0+YW1u
X3JpeF0gJiAweDcpIDwgNCkKIAkJCWJyZWFrOwogCQllbHNlIGlmICgocnMtPnJzX3JhdGVzW2Ft
bi0+YW1uX3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwpIDw9IDcyKQpAQCAtMTk4LDcgKzE4NSw3
IEBACiAJfQogCiAJLyogaWYgdGhlIHJhdGUgaXMgYW4gMTFuIHJhdGUsIGVuc3VyZSB0aGUgTUNT
IGJpdCBpcyBzZXQgKi8KLQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkpCisJaWYgKGllZWU4MDIx
MV9yYXRlY3RsX25vZGVfaXMxMW4obmkpKQogCQlyYXRlIHw9IElFRUU4MDIxMV9SQVRFX01DUzsK
IAogCS8qIEFzc2lnbiBpbml0aWFsIHJhdGUgZnJvbSB0aGUgcmF0ZXNldCAqLwpAQCAtMjA2LDkg
KzE5Myw4IEBACiAJYW1uLT5hbW5fdGlja3MgPSB0aWNrczsKIAogCUlFRUU4MDIxMV9OT1RFKG5p
LT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCi0JICAgICJBTVJSOiBucmF0ZXM9
JWQsIGluaXRpYWwgcmF0ZSAlZCIsCi0JICAgIHJzLT5yc19ucmF0ZXMsCi0JICAgIHJhdGUpOwor
CSAgICAiJXM6IEFNUlI6IG5yYXRlcz0lZCwgaW5pdGlhbCByYXRlICVkIiwKKwkJX19mdW5jX18s
IHJzLT5yc19ucmF0ZXMsIHJhdGUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjI2LDE3ICsyMTIs
MTIgQEAKIAogCUtBU1NFUlQoaXNfZW5vdWdoKGFtbiksICgidHhjbnQgJWQiLCBhbW4tPmFtbl90
eGNudCkpOwogCi0JLyogMTFuIG9yIG5vdD8gUGljayB0aGUgcmlnaHQgcmF0ZXNldCAqLwotCWlm
IChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkvKiBYWFggZXcgKi8KLQkJcnMgPSAoc3RydWN0
IGllZWU4MDIxMV9yYXRlc2V0ICopICZuaS0+bmlfaHRyYXRlczsKLQl9IGVsc2UgewotCQlycyA9
ICZuaS0+bmlfcmF0ZXM7Ci0JfQorCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQo
bmkpOwogCisKIAlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVD
VEwsIG5pLAotCSAgICAiQU1SUjogY3VycmVudCByYXRlICVkLCB0eGNudD0lZCwgcmV0cnljbnQ9
JWQiLAotCSAgICBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKKwkgICAg
IiVzOiBBTVJSOiBjdXJyZW50IHJhdGUgJWQsIHR4Y250PSVkLCByZXRyeWNudD0lZCIsCisJICAg
IF9fZnVuY19fLCBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKIAkgICAg
YW1uLT5hbW5fdHhjbnQsCiAJICAgIGFtbi0+YW1uX3JldHJ5Y250KTsKIApAQCAtMjU2LDggKzIz
Nyw4IEBACiAJCQlhbW4tPmFtbl9zdWNjZXNzID0gMDsKIAkJCXJpeCsrOwogCQkJSUVFRTgwMjEx
X05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKLQkJCSAgICAiQU1S
UiBpbmNyZWFzaW5nIHJhdGUgJWQgKHR4Y250PSVkIHJldHJ5Y250PSVkKSIsCi0JCQkgICAgcnMt
PnJzX3JhdGVzW3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwsCisJCQkgICAgIiVzOiBBTVJSIGlu
Y3JlYXNpbmcgcmF0ZSAlZCAodHhjbnQ9JWQgcmV0cnljbnQ9JWQpIiwKKwkJCSAgICBfX2Z1bmNf
XywgcnMtPnJzX3JhdGVzW3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwsCiAJCQkgICAgYW1uLT5h
bW5fdHhjbnQsIGFtbi0+YW1uX3JldHJ5Y250KTsKIAkJfSBlbHNlIHsKIAkJCWFtbi0+YW1uX3Jl
Y292ZXJ5ID0gMDsKQEAgLTI3Nyw4ICsyNTgsOCBAQAogCQkJfQogCQkJcml4LS07CiAJCQlJRUVF
ODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAotCQkJICAg
ICJBTVJSIGRlY3JlYXNpbmcgcmF0ZSAlZCAodHhjbnQ9JWQgcmV0cnljbnQ9JWQpIiwKLQkJCSAg
ICBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKKwkJCSAgICAiJXM6IEFN
UlIgZGVjcmVhc2luZyByYXRlICVkICh0eGNudD0lZCByZXRyeWNudD0lZCkiLAorCQkJICAgIF9f
ZnVuY19fLCBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKIAkJCSAgICBh
bW4tPmFtbl90eGNudCwgYW1uLT5hbW5fcmV0cnljbnQpOwogCQl9CiAJCWFtbi0+YW1uX3JlY292
ZXJ5ID0gMDsKQEAgLTMwNCwxMyArMjg1LDcgQEAKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jh
dGVzZXQgKnJzID0gTlVMTDsKIAlpbnQgcml4OwogCi0JLyogMTFuIG9yIG5vdD8gUGljayB0aGUg
cmlnaHQgcmF0ZXNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkvKiBYWFgg
ZXcgKi8KLQkJcnMgPSAoc3RydWN0IGllZWU4MDIxMV9yYXRlc2V0ICopICZuaS0+bmlfaHRyYXRl
czsKLQl9IGVsc2UgewotCQlycyA9ICZuaS0+bmlfcmF0ZXM7Ci0JfQorCXJzID0gaWVlZTgwMjEx
X3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwogCiAJaWYgKGlzX2Vub3VnaChhbW4pICYmICh0aWNr
cyAtIGFtbi0+YW1uX3RpY2tzKSA+IGFtcnItPmFtcnJfaW50ZXJ2YWwpIHsKIAkJcml4ID0gYW1y
cl91cGRhdGUoYW1yciwgYW1uLCBuaSk7CkBAIC0zMTgsNyArMjkzLDcgQEAKIAkJCS8qIHVwZGF0
ZSBwdWJsaWMgcmF0ZSAqLwogCQkJbmktPm5pX3R4cmF0ZSA9IHJzLT5yc19yYXRlc1tyaXhdOwog
CQkJLyogWFhYIHN0cmlwIGJhc2ljIHJhdGUgZmxhZyBmcm9tIHR4cmF0ZSwgaWYgbm9uLTExbiAq
LwotCQkJaWYgKGFtcnJfbm9kZV9pc18xMW4obmkpKQorCQkJaWYgKGllZWU4MDIxMV9yYXRlY3Rs
X25vZGVfaXMxMW4obmkpKQogCQkJCW5pLT5uaV90eHJhdGUgfD0gSUVFRTgwMjExX1JBVEVfTUNT
OwogCQkJZWxzZQogCQkJCW5pLT5uaV90eHJhdGUgJj0gSUVFRTgwMjExX1JBVEVfVkFMOwpAQCAt
MzMwLDYgKzMwNSw3NiBAQAogCXJldHVybiByaXg7CiB9CiAKK3N0YXRpYyB2b2lkCithbXJyX3Jh
dGVzKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAq
cmNfaW5mbykKK3sKKyNkZWZpbmUJUkFURShfaXgpCShycy0+cnNfcmF0ZXNbKF9peCldICYgSUVF
RTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoX2l4KQkocnMtPnJzX3JhdGVzWyhfaXgpXSB8
IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMgPSBy
Y19pbmZvLT5pcmlfcmM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlc2V0ICpycyA9IE5V
TEw7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IE5VTEw7CisJaW50
IHJpeCwgY29kZTsKKworCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwor
CXJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUobmktPm5pX2ljLT5pY19jdXJjaGFuKTsKKwlJ
RUVFODAyMTFfRFBSSU5URihuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIAorCSAg
ICAiJXM6IGNoYW5uZWwgZmxhZ3M6IDB4JTA4eFxuIiwgX19mdW5jX18sIAorCQluaS0+bmlfaWMt
PmljX2N1cmNoYW4tPmljX2ZsYWdzKTsgCisJCisJcml4ID0gYW1ycl9yYXRlKG5pLCBOVUxMLCAw
KTsKKworCXJjWzBdLmZsYWdzID0gcmNbMV0uZmxhZ3MgPSByY1syXS5mbGFncyA9IHJjWzNdLmZs
YWdzID0gMDsKKworCWlmIChycy0+cnNfbnJhdGVzID4gMCkgeworCQljb2RlID0gaWVlZTgwMjEx
X3JhdGVjdGxfbm9kZV9pczExbihuaSk/IE1DUyhyaXgpIDogUkFURShyaXgpOworCQlyY1swXS5y
aXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCisJCWlmIChJRUVFODAyMTFfUkFURUNU
TF9IQVNDQVBfTVJSKG5pLT5uaV92YXApKSB7CisJCQlyY1swXS50cmllcyA9IDE7CisJCQlyY1sx
XS50cmllcyA9IDE7CisJCQlyY1syXS50cmllcyA9IDE7CisJCQlyY1szXS50cmllcyA9IDE7CisJ
CQlpZiAoLS1yaXggPj0gMCkgeworCQkJCWNvZGUgPSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lz
MTFuKG5pKT8gTUNTKHJpeCkgOiBSQVRFKHJpeCk7CisJCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVD
b2RlVG9JbmRleFtjb2RlXTsKKwkJCX0gZWxzZSB7CisJCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVD
b2RlVG9JbmRleFswXTsKKwkJCX0KKwkJCWlmICgtLXJpeCA+PSAwKSB7CisJCQkJY29kZSA9IGll
ZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpPyBNQ1Mocml4KSA6IFJBVEUocml4KTsKKwkJ
CQlyY1syXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCQkJfSBlbHNlIHsKKwkJ
CQlyY1syXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzBdOworCQkJfQorCQkJaWYgKHJpeCA+
PSAwKSB7CisJCQkJLyogTkI6IG9ubHkgZG8gdGhpcyBpZiB3ZSBkaWRuJ3QgYWxyZWFkeSBkbyBp
dCBhYm92ZSAqLworCQkJCWNvZGUgPSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lzMTFuKG5pKT8g
TUNTKDApIDogUkFURSgwKTsKKwkJCQlyY1szXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2Nv
ZGVdOworCQkJfSBlbHNlIHsKKwkJCQlyY1szXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzBd
OworCQkJfQorCQl9IGVsc2UgeworCQkJcmNbMF0udHJpZXMgPSBJRUVFODAyMTFfUkFURUNUTF9U
WE1BWFRSWTsKKworCQkJcmNbMV0udHJpZXMgPSAwOworCQkJcmNbMl0udHJpZXMgPSAwOworCQkJ
cmNbM10udHJpZXMgPSAwOworCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFswXTsK
KwkJCXJjWzJdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbMF07CisJCQlyY1szXS5yaXggPSBy
dC0+cmF0ZUNvZGVUb0luZGV4WzBdOworCQl9CisJfQorCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92
YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJICAgICIlczogQU1SUiByYXRlIHNldHMo
cml4LCB0cmllcykuIHJjWzBdOiglZCwgJWQpLCByY1sxXTooJWQsICVkKSwgIiAKKwkJInJjWzJd
OiglZCwgJWQpLCByY1szXTooJWQsICVkKSIsIF9fZnVuY19fLCAKKwkJcmNbMF0ucml4LCByY1sw
XS50cmllcywKKwkJcmNbMV0ucml4LCByY1sxXS50cmllcywgCisJCXJjWzJdLnJpeCwgcmNbMl0u
dHJpZXMsIAorCQlyY1szXS5yaXgsIHJjWzNdLnRyaWVzKTsKKyN1bmRlZiBSQVRFCisjdW5kZWYg
TUNTCit9CisKIC8qCiAgKiBVcGRhdGUgc3RhdGlzdGljcyB3aXRoIHR4IGNvbXBsZXRlIHN0YXR1
cy4gIE9rIGlzIG5vbi16ZXJvCiAgKiBpZiB0aGUgcGFja2V0IGlzIGtub3duIHRvIGJlIEFDSydk
LiAgUmV0cmllcyBoYXMgdGhlIG51bWJlcgpAQCAtMzM3LDE2ICszODIsMjIgQEAKICAqLwogc3Rh
dGljIHZvaWQKIGFtcnJfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw
LAotICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBvaywKLSAgICB2b2lk
ICphcmcxLCB2b2lkICphcmcyIF9fdW51c2VkKQorICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFf
bm9kZSAqbmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykKIHsKIAlzdHJ1Y3Qg
aWVlZTgwMjExX2FtcnJfbm9kZSAqYW1uID0gbmktPm5pX3JjdGxzOwotCWludCByZXRyaWVzID0g
KihpbnQgKilhcmcxOwogCi0JYW1uLT5hbW5fdHhjbnQrKzsKLQlpZiAob2spCi0JCWFtbi0+YW1u
X3N1Y2Nlc3MrKzsKLQlhbW4tPmFtbl9yZXRyeWNudCArPSByZXRyaWVzOworCS8qIHVwZGF0ZSBw
ZXIgdmFwIHN0YXRpc3RpY3MgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF91cGRhdGVfc3RhdCh2YXAs
IHJjX2luZm8pOworCisJYW1uLT5hbW5fdHhjbnQgKz0gcmNfaW5mby0+aXJpX3R4Y250OworCWFt
bi0+YW1uX3N1Y2Nlc3MgKz0gKHJjX2luZm8tPmlyaV90eGNudCAtIHJjX2luZm8tPmlyaV9mYWls
Y250KTsKKwlhbW4tPmFtbl9yZXRyeWNudCArPSByY19pbmZvLT5pcmlfcmV0cnljbnQ7CisKKwlJ
RUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJICAgICIlczog
QU1SUiB0eCBjb21wbGV0ZS4gdHhjbnQ9JWQoJWQpIHN1Y2Nlc3M9JWQoJWQpIHJldHJ5Y250PSVk
KCVkKVxuIiwKKwkgICAgX19mdW5jX18sIGFtbi0+YW1uX3R4Y250LCByY19pbmZvLT5pcmlfdHhj
bnQsCisJCWFtbi0+YW1uX3N1Y2Nlc3MsIChyY19pbmZvLT5pcmlfdHhjbnQgLSByY19pbmZvLT5p
cmlfZmFpbGNudCksCisJCWFtbi0+YW1uX3JldHJ5Y250LCByY19pbmZvLT5pcmlfcmV0cnljbnQp
OwogfQogCiAvKgpAQCAtMzY0LDggKzQxNSwyMSBAQAogCWFtbi0+YW1uX3R4Y250ID0gdHhjbnQ7
CiAJYW1uLT5hbW5fc3VjY2VzcyA9IHN1Y2Nlc3M7CiAJYW1uLT5hbW5fcmV0cnljbnQgPSByZXRy
eWNudDsKKwlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJ
ICAgICIlczogQU1SUiB0eCB1cGRhdGUuIHR4Y250PSVkIHN1Y2Nlc3M9JWQgcmV0cnljbnQ9JWRc
biIsCisJICAgIF9fZnVuY19fLCB0eGNudCwgc3VjY2VzcywgcmV0cnljbnQpOwogfQogCitzdGF0
aWMgdm9pZAorYW1ycl9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCit7CisJ
c3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJzID0gSUVFRTgwMjExX1JBVEVDVExfU1RBVCh2
YXApOworCXByaW50ZigidHggY291bnQ6ICVkIChvayBjb3VudDogJWQsIGZhaWwgY291bnQ6ICVk
KVxuIgorCQkJInJldHJ5IGNvdW50OiAlZCAoc2hvcnQgcmV0cnk6ICVkLCBsb25nIHJldHJ5OiAl
ZClcbiIsCisJCQlpcnMtPmlyc190eGNudCwgaXJzLT5pcnNfdHhjbnQgLSBpcnMtPmlyc19mYWls
Y250LCBpcnMtPmlyc19mYWlsY250LAorCQkJaXJzLT5pcnNfcmV0cnljbnQsIGlycy0+aXJzX3No
b3J0cmV0cnksIGlycy0+aXJzX2xvbmdyZXRyeSk7Cit9CisKIHN0YXRpYyBpbnQKIGFtcnJfc3lz
Y3RsX2ludGVydmFsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCiB7CkluZGV4OiBuZXQ4MDIxMS9pZWVl
ODAyMTFfcmF0ZWN0bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3Rs
LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmMJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKi0KICAqIENvcHlyaWdodCAoYykgMjAxMCBS
dWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVu
Y2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC00OSw2ICs1MCw0MCBAQAogCiBNQUxMT0NfREVGSU5FKE1fODAy
MTFfUkFURUNUTCwgIjgwMjExcmF0ZWN0bCIsICI4MDIuMTEgcmF0ZSBjb250cm9sIik7CiAKK2Vu
dW0geworCU1DU19IVDIwLAorCU1DU19IVDIwX1NHSSwKKwlNQ1NfSFQ0MCwKKwlNQ1NfSFQ0MF9T
R0ksCit9OworCitpbnQgbWF4XzRtc19mcmFtZWxlbls0XVszMl0gPSB7CisJW01DU19IVDIwXSA9
IHsKKwkJMzIxMiwgIDY0MzIsICA5NjQ4LCAgMTI4NjQsICAxOTMwMCwgIDI1NzM2LCAgMjg5NTIs
ICAzMjE3MiwKKwkJNjQyNCwgIDEyODUyLCAxOTI4MCwgMjU3MDgsICAzODU2OCwgIDUxNDI0LCAg
NTc4NTIsICA2NDI4MCwKKwkJOTYyOCwgIDE5MjYwLCAyODg5NiwgMzg1MjgsICA1Nzc5MiwgIDY1
NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMTI4MjgsIDI1NjU2LCAzODQ4OCwgNTEzMjAsICA2NTUz
MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQyMF9TR0ldID0geworCQkz
NTcyLCAgNzE0NCwgIDEwNzIwLCAgMTQyOTYsICAyMTQ0NCwgIDI4NTk2LCAgMzIxNzIsICAzNTc0
NCwKKwkJNzE0MCwgIDE0Mjg0LCAyMTQyOCwgIDI4NTY4LCAgNDI4NTYsICA1NzE0NCwgIDY0Mjg4
LCAgNjU1MzIsCisJCTEwNzAwLCAyMTQwOCwgMzIxMTIsICA0MjgxNiwgIDY0MjI4LCAgNjU1MzIs
ICA2NTUzMiwgIDY1NTMyLAorCQkxNDI1NiwgMjg1MTYsIDQyNzgwLCAgNTcwNDAsICA2NTUzMiwg
IDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQ0MF0gPSB7CisJCTY2ODAsICAx
MzM2MCwgIDIwMDQ0LCAgMjY3MjQsICA0MDA5MiwgIDUzNDU2LCAgNjAxNDAsICA2NTUzMiwKKwkJ
MTMzNDgsIDI2NzAwLCAgNDAwNTIsICA1MzQwMCwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1
NTMyLAorCQkyMDAwNCwgNDAwMDgsICA2MDAxNiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1
NTMyLCAgNjU1MzIsCisJCTI2NjQ0LCA1MzI5MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1
NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQ0MF9TR0ldID0geworCQk3NDIwLCAg
MTQ4NDQsICAyMjI3MiwgIDI5Njk2LCAgNDQ1NDQsICA1OTM5NiwgIDY1NTMyLCAgNjU1MzIsCisJ
CTE0ODMyLCAyOTY2OCwgIDQ0NTA0LCAgNTkzNDAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2
NTUzMiwKKwkJMjIyMzIsIDQ0NDY0LCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2
NTUzMiwgIDY1NTMyLAorCQkyOTYxNiwgNTkyMzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2
NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJfQorfTsKKwogdm9pZAogaWVlZTgwMjExX3JhdGVjdGxf
cmVnaXN0ZXIoaW50IHR5cGUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCAqcmF0ZWN0
bCkKIHsKQEAgLTY1LDEyICsxMDAsMzYgQEAKIAlyYXRlY3Rsc1t0eXBlXSA9IE5VTEw7CiB9CiAK
K3N0YXRpYyBpbnQKK3JhdGVjdGxfc3lzY3RsX3N0YXRzKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7
CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gYXJnMTsKKwlpbnQgZXJyb3IsIHY7CisKKwl2
ID0gMDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ2LCAwLCByZXEpOworCWlm
IChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKworCWllZWU4MDIxMV9y
YXRlY3RsX3N0YXRzKHZhcCk7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQKLWllZWU4MDIxMV9yYXRl
Y3RsX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQoraWVlZTgwMjExX3JhdGVjdGxfaW5p
dChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxpdGllcykKIHsKIAlp
ZiAodmFwLT5pdl9yYXRlID09IHJhdGVjdGxzW0lFRUU4MDIxMV9SQVRFQ1RMX05PTkVdKQogCQlp
ZWVlODAyMTFfcmF0ZWN0bF9zZXQodmFwLCBJRUVFODAyMTFfUkFURUNUTF9BTVJSKTsKLQl2YXAt
Pml2X3JhdGUtPmlyX2luaXQodmFwKTsKKwl2YXAtPml2X3JhdGUtPmlyX2luaXQodmFwLCBjYXBh
YmlsaXRpZXMpOworCisJU1lTQ1RMX0FERF9QUk9DKHZhcC0+aXZfc3lzY3RsLCBTWVNDVExfQ0hJ
TERSRU4odmFwLT5pdl9vaWQpLCAKKwkJCU9JRF9BVVRPLCAicmF0ZWN0bF9zdGF0cyIsIENUTFRZ
UEVfSU5UIHwgQ1RMRkxBR19SVywgCisJCQl2YXAsIDAsIHJhdGVjdGxfc3lzY3RsX3N0YXRzLCAi
SSIsIAorCQkJInBlci12YXAgbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0aWNzIik7CisKKwlJRUVF
ODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkgICAgIiVzOiByYXRl
Y3RsIGluaXRpYWxpemVkLiBjYXBzPTB4JTA4eFxuIiwKKwkgICAgX19mdW5jX18sIGNhcGFiaWxp
dGllcyk7CiB9CiAKIHZvaWQKQEAgLTkwLDMgKzE0OSwxMTAgQEAKIAl9CiAJdmFwLT5pdl9yYXRl
ID0gcmF0ZWN0bHNbdHlwZV07CiB9CisKK3ZvaWQKK2llZWU4MDIxMV9yYXRlY3RsX2NvbXBsZXRl
X3JjZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKKwkJc3RydWN0IGllZWU4MDIxMV9y
Y19pbmZvICpyY19pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92
YXA7CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgKnJjID0gcmNfaW5mby0+aXJpX3JjOwor
CWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqIHJ0ID0gTlVMTDsKKwl1aW50OF90
IHJhdGU7CisJaW50IGk7CisKKwlydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKG5pLT5uaV9p
Yy0+aWNfY3VyY2hhbik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCByYXRlIGNvbnRyb2wgY29kZSBk
b2Vzbid0IG1lc3MgaXQgdXAuCisJICogSWYgZW5hYmxlIHJ0cy9jdHMgYW5kIGlzIHByZS04MDIu
MTFuLCBibGFuayB0cmllcyAxLCAyLCAzIAorCSAqLworCisJaWYgKCEgSUVFRTgwMjExX1JBVEVD
VExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwl7CisJCWZvciAoaSA9IDE7IGkgPCBJRUVFODAyMTFf
UkFURUNUTF9OVU07IGkrKykKKwkJeworCQkJaWYgKHJjWzBdLmZsYWdzICYgSUVFRTgwMjExX1JB
VEVDVExfRkxBR19SVFNDVFMpCisJCQkJcmNbaV0udHJpZXMgPSAwOworCQkJcmNbaV0uZmxhZ3Mg
Jj0gfklFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfUlRTQ1RTOyAKKwkJfQorCX0KKworCWZvciAoaSA9
IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykgeworCQkKKwkJaWYgKHJjW2ldLnRy
aWVzID09IDApCisJCQljb250aW51ZTsKKworCQlyYXRlID0gcnQtPmluZm9bcmNbaV0ucml4XS5k
b3QxMVJhdGU7CisKKwkJLyogT25seSBlbmFibGUgZHVhbC1zdHJlYW0sIHNob3J0Z2ksIDIwNDAg
aWYgSFQgaXMgc2V0ICovCisKKwkJaWYgKElTX0hUX1JBVEUocmF0ZSkpIHsKKwkJCXJjW2ldLmZs
YWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfSFQ7CisKKwkJCWlmIChpZWVlODAyMTFfcmF0
ZWN0bF9oYXNjYXBfY3c0MChuaSkpCisJCQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVD
VExfRkxBR19DVzQwOworCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3Nob3J0Z2ko
bmkpKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU0dJOworCQkJ
LyoKKwkJCSAqIElmIHdlIGhhdmUgU1RCQyBUWCBlbmFibGVkIGFuZCB0aGUgcmVjZWl2ZXIKKwkJ
CSAqIGNhbiByZWNlaXZlIChhdCBsZWFzdCkgMSBzdHJlYW0gU1RCQywgQU5EIGl0J3MKKwkJCSAq
IE1DUyAwLTcsIEFORCB3ZSBoYXZlIGF0IGxlYXN0IHR3byBjaGFpbnMgZW5hYmxlZCwKKwkJCSAq
IGVuYWJsZSBTVEJDLgorCQkJICovCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0
YmMobmkpICYmCisJCQkJKHJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpIDwgOCAmJgorCQkJCUhU
X1JDXzJfU1RSRUFNUyhyYXRlKSA9PSAxKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9S
QVRFQ1RMX0ZMQUdfU1RCQzsKKwkJCQorCQkJLyoKKwkJCSAqIER1YWwgLyBUcmlwbGUgc3RyZWFt
IHJhdGU/CisJCQkgKi8KKwkJCWlmIChIVF9SQ18yX1NUUkVBTVMocmF0ZSkgPT0gMikKKwkJCQly
Y1tpXS5mbGFncyB8PSBJRUVFODAyMTFfUkFURUNUTF9GTEFHX0RTOworCQkJZWxzZSBpZiAoSFRf
UkNfMl9TVFJFQU1TKHJhdGUpID09IDMpCisJCQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JB
VEVDVExfRkxBR19UUzsKKworCQkJLyoKKwkJCSAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSA0bXMg
ZnJhbWUgbGVuZ3RoIGJhc2VkCisJCQkgKiBvbiB0aGUgTUNTIHJhdGUsIFNHSSBhbmQgY2hhbm5l
bCB3aWR0aCBmbGFncy4KKwkJCSAqLworCQkJaWYgKEhUX1JDXzJfTUNTKHJhdGUpIDwgMzIpIHsK
KwkJCQlpbnQgajsKKwkJCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9GTEFH
X0NXNDApIHsKKwkJCQkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19T
R0kpCisJCQkJCQlqID0gTUNTX0hUNDBfU0dJOworCQkJCQllbHNlCisJCQkJCQlqID0gTUNTX0hU
NDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVD
VExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNTX0hUMjBfU0dJOworCQkJCQllbHNlCisJCQkJCQlq
ID0gTUNTX0hUMjA7CisJCQkJfQorCQkJCXJjW2ldLm1heDRtc2ZyYW1lbGVuID0KKwkJCQkgICAg
bWF4XzRtc19mcmFtZWxlbltqXVtIVF9SQ18yX01DUyhyYXRlKV07CisJCQl9CisJCX0gZWxzZSB7
CisJCQlyY1tpXS5tYXg0bXNmcmFtZWxlbiA9IDA7CisKKwkJCS8qCisJCQkgKiBPbmx5IGVuYWJs
ZSBzaG9ydCBwcmVhbWJsZSBmb3IgbGVnYWN5IHJhdGVzCisJCQkgKi8KKwkJCWlmIChyY19pbmZv
LT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9JTkZPX1NQKQorCQkJCXJjW2ldLmZsYWdz
IHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1A7CisJCX0KKworCQkvKgorCQkgKiBDYWxjdWxh
dGUgdGhlIG1heGltdW0gVFggcG93ZXIgY2FwIGZvciB0aGUgY3VycmVudAorCQkgKiBub2RlLiAK
KwkJICogUmF0ZSBjb250cm9sIGFsZ28gY2FuJ3QgY29udHJvbCBUWCBwb3dlciBieSBub3cuCisJ
CSAqLworCQlyY1tpXS50eF9wb3dlcl9jYXAgPSBpZWVlODAyMTFfZ2V0X25vZGVfdHhwb3dlcihu
aSk7CisJCQorCX0KKwlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JB
VEVDVEwsIG5pLAorCSAgICAiJXM6IGZsYWdzOiByY1swXToweCUwOHgsIHJjWzFdOjB4JTA4eCwg
IgorCQkicmNbMl06MHglMDh4LCByY1szXToweCUwOHhcbiIsIF9fZnVuY19fLCAKKwkJcmNbMF0u
ZmxhZ3MsIHJjWzFdLmZsYWdzLCByY1syXS5mbGFncywgcmNbM10uZmxhZ3MpOworfQorCkluZGV4
OiBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2ll
ZWU4MDIxMV9yYXRlY3RsLmgJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjExL2llZWU4MDIx
MV9yYXRlY3RsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKi0KICAqIENvcHly
aWdodCAoYykgMjAxMCBSdWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdo
dCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCw2ICsyNSw4IEBACiAgKgogICog
JEZyZWVCU0QkCiAgKi8KKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RMX0hfCisj
ZGVmaW5lIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9IXwogCiBlbnVtIGllZWU4MDIxMV9y
YXRlYWxncyB7CiAJSUVFRTgwMjExX1JBVEVDVExfQU1SUgkJPSAwLApAQCAtMzcsMjggKzQwLDEx
NSBAQAogI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTCTEKICNkZWZpbmUJSUVF
RTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRQkwCiAKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExf
VFJVRQkJMQorI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GQUxTRQkJMAorCisjZGVmaW5lCUlF
RUU4MDIxMV9SQVRFQ1RMX05VTQkJNAorI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9UWE1BWFRS
WQkxMQorCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfRFMJCTB4MDEJLyogZHVhbC1z
dHJlYW0gcmF0ZSAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFHX0NXNDAJCTB4MDIJ
LyogdXNlIEhUNDAgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkxBR19TR0kJCTB4MDQJ
LyogdXNlIHNob3J0LUdJICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfSFQJCTB4
MDgJLyogdXNlIEhUICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfUlRTQ1RTCTB4
MTAJLyogZW5hYmxlIFJUUy9DVFMgcHJvdGVjdGlvbiAqLworI2RlZmluZQlJRUVFODAyMTFfUkFU
RUNUTF9GTEFHX1NUQkMJCTB4MjAJLyogZW5hYmxlIFNUQkMgKi8KKyNkZWZpbmUJSUVFRTgwMjEx
X1JBVEVDVExfRkxBR19UUwkJMHg0MAkvKiB0cmlwbGUtc3RyZWFtIHJhdGUgKi8KKyNkZWZpbmUJ
SUVFRTgwMjExX1JBVEVDVExfRkxBR19TUAkJMHg4MAkvKiBzaG9ydCBwcmVhbWJsZSAqLworCisv
KiBIYXJkd2FyZSBDQVBzIG9mZmVyZWQgdG8gcmF0ZSBjb250cm9sIGFsZ28gKi8KKyNkZWZpbmUJ
SUVFRTgwMjExX1JBVEVDVExfQ0FQX01SUgkJCTB4MDEJLyogc3VwcG9ydCBNUlIgKi8KKyNkZWZp
bmUJSUVFRTgwMjExX1JBVEVDVExfQ0FQX01SUlBST1QJCTB4MDIJLyogc3VwcG9ydCBNUlIgKyBw
cm90ZWN0ICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NVUxUWENIQUlOCTB4MDQJ
LyogaGFzIG1vcmUgdGhhbiAxIHR4Y2hhaW4gKi8KKworI2RlZmluZSBJU19WQVBfSFQodmFwKQko
KHZhcCktPml2X2h0Y2FwcyAmIElFRUU4MDIxMV9IVENfSFQpCisjZGVmaW5lIElTX0hUX1JBVEUo
X3JhdGUpICAgKChfcmF0ZSkgJiAweDgwKQorI2RlZmluZSBIVF9SQ18yX01DUyhfcmMpICAgICgo
X3JjKSAmIDB4N2YpCisjZGVmaW5lIEhUX1JDXzJfU1RSRUFNUyhfcmMpICAgICgoKChfcmMpICYg
MHg3OCkgPj4gMykgKyAxKQorCitleHRlcm4gaW50IG1heF80bXNfZnJhbWVsZW5bNF1bMzJdOwor
CitzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyB7CisJdWludDhfdCByaXg7CQkvKiByYXRldGFi
bGUgaW5kZXgsIG5vdCByYXRlIGNvZGUgKi8KKwl1aW50OF90IHJhdGVjb2RlOwkvKiBoYXJkd2Fy
ZSByYXRlIGNvZGUgKi8KKwl1aW50OF90IHRyaWVzOworCXVpbnQ4X3QgdHhfcG93ZXJfY2FwOwor
CXVpbnQxNl90IGZsYWdzOworCXVpbnQxNl90IG1heDRtc2ZyYW1lbGVuOworfTsKKworc3RydWN0
IGllZWU4MDIxMV9yY19pbmZvIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyBpcmlfcmNb
SUVFRTgwMjExX1JBVEVDVExfTlVNXTsKKwl1aW50MzJfdCBpcmlfZnJhbWVsZW47CisJdWludDE2
X3QgaXJpX2ZsYWdzOwkJCS8qIFNlZSBiZWxvdyAqLworCXVpbnQxNl90IGlyaV9tYXhhZ2dyc2l6
ZTsJLyogTWF4aW11bSBhZ2dyZWdhdGUgc2l6ZSAqLworCisJLyogVFggaW5mbyAqLworCXVpbnQ4
X3QgaXJpX3R4Y250OwkJCS8qIFRYIGNvdW50ICovCisJdWludDhfdCBpcmlfZmFpbGNudDsJCS8q
IFRYIHJldHJ5LWZhaWwgY291bnQgKi8KKwl1aW50OF90IGlyaV9va2NudDsJCQkvKiBUWCBvayB3
aXRoIG9yIHdpdGhvdXQgcmV0cnkgKi8KKwl1aW50OF90IGlyaV9yZXRyeWNudDsJCS8qIFRYIHJl
dHJ5IGNvdW50ICovCisJdWludDhfdCBpcmlfc2hvcnRyZXRyeTsKKwl1aW50OF90IGlyaV9sb25n
cmV0cnk7CisJdWludDhfdCBpcmlfZmluYWx0c2k7CisJdWludDhfdCBpcmlfdHhyYXRlOwkJCS8q
IEhXIHR4IHJhdGUgKi8KK307CisKKy8qIGllZWU4MDIxMV9yY19pbmZvIGZsYWdzICovCisjZGVm
aW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0lORk9fU1AJCTB4MDEJLyogc2hvcnQgcHJlYW1ibGUgKi8K
KyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSCQkweDAyCS8qIGFnZ3JlZ2F0aW9u
IHNjZW5hcmlvICovCisKKyNkZWZpbmUgTkVUODAyMTFfVEFHX1JBVEVDVEwgICAxICAgLyogbmV0
ODAyMTEgcmF0ZWN0bCBzdGF0ZSAqLworCisvKgorICogbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0
aWNzLiAKKyAqIHBlciB2YXAgcmF0ZWN0bCBzZWV0aW5nIG11c3Qgc3RhcnQgd2l0aCB0aGlzIGNv
bW1vbiBzdGF0ZS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9yY19zdGF0IHsKKwl1aW50MzJfdCBp
cnNfY2FwYWJpbGl0aWVzOwkJLyogaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG9mZmVyZWQgdG8gcmMg
Ki8KKworCS8qIHJhdGVjdGwgc3RhdGlzdGljcyAqLworCXVpbnQzMl90IGlyc190eGNudDsKKwl1
aW50MzJfdCBpcnNfZmFpbGNudDsKKwl1aW50MzJfdCBpcnNfcmV0cnljbnQ7CisJdWludDMyX3Qg
aXJzX3Nob3J0cmV0cnk7CisJdWludDMyX3QgaXJzX2xvbmdyZXRyeTsKK307CisKKyNkZWZpbmUg
SUVFRTgwMjExX1JBVEVDVExfU1RBVChfdmFwKSBcCisJKChzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0
YXQgKikoKF92YXApLT5pdl9ycykpCisKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQ
X01SUihfdmFwKSBcCisJKElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3ZhcCktPmlyc19jYXBhYmls
aXRpZXMgJiBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSKQorI2RlZmluZQlJRUVFODAyMTFfUkFU
RUNUTF9IQVNDQVBfTVJSUFJPVChfdmFwKSBcCisJKElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3Zh
cCktPmlyc19jYXBhYmlsaXRpZXMgJiBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSUFJPVCkKKyNk
ZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01VTFRYQ0hBSU4oX3ZhcCkgXAorCShJRUVF
ODAyMTFfUkFURUNUTF9TVEFUKF92YXApLT5pcnNfY2FwYWJpbGl0aWVzICYgSUVFRTgwMjExX1JB
VEVDVExfQ0FQX01VTFRYQ0hBSU4pCisKIHN0cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCB7CiAJY29u
c3QgY2hhciAqaXJfbmFtZTsKIAlpbnQJKCppcl9hdHRhY2gpKGNvbnN0IHN0cnVjdCBpZWVlODAy
MTF2YXAgKik7CiAJdm9pZAkoKmlyX2RldGFjaCkoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAq
KTsKLQl2b2lkCSgqaXJfaW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKKwl2b2lkCSgqaXJf
aW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiAJdm9pZAkoKmlyX2RlaW5p
dCkoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIAl2b2lkCSgqaXJfbm9kZV9pbml0KShzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKik7CiAJdm9pZAkoKmlyX25vZGVfZGVpbml0KShzdHJ1Y3QgaWVlZTgw
MjExX25vZGUgKik7CiAJaW50CSgqaXJfcmF0ZSkoc3RydWN0IGllZWU4MDIxMV9ub2RlICosIHZv
aWQgKiwgdWludDMyX3QpOworCXZvaWQJKCppcl9yYXRlcykoc3RydWN0IGllZWU4MDIxMV9ub2Rl
ICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIAl2b2lkCSgqaXJfdHhfY29tcGxldGUp
KGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwKLQkgICAgCQkJICBjb25zdCBzdHJ1Y3QgaWVl
ZTgwMjExX25vZGUgKiwgaW50LAotCSAgICAJCQkgIHZvaWQgKiwgdm9pZCAqKTsKKwkgICAgCQkJ
ICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZv
ICopOwogCXZvaWQJKCppcl90eF91cGRhdGUpKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwK
IAkgICAgCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosCiAJICAgIAkJCXZvaWQgKiwg
dm9pZCAqLCB2b2lkICopOwogCXZvaWQJKCppcl9zZXRpbnRlcnZhbCkoY29uc3Qgc3RydWN0IGll
ZWU4MDIxMXZhcCAqLCBpbnQpOworCXZvaWQJKCppcl9zdGF0cykoY29uc3Qgc3RydWN0IGllZWU4
MDIxMXZhcCAqKTsKIH07CiAKIHZvaWQJaWVlZTgwMjExX3JhdGVjdGxfcmVnaXN0ZXIoaW50LCBj
b25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVjdGwgKik7CiB2b2lkCWllZWU4MDIxMV9yYXRlY3Rs
X3VucmVnaXN0ZXIoaW50KTsKLXZvaWQJaWVlZTgwMjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVl
ZTgwMjExdmFwICopOwordm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHN0cnVjdCBpZWVlODAy
MTF2YXAgKiwgdWludDMyX3QpOwogdm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9zZXQoc3RydWN0IGll
ZWU4MDIxMXZhcCAqLCBpbnQpOwordm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9jb21wbGV0ZV9yY2Zs
YWdzKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCAKKwkJCQkJCXN0cnVjdCBpZWVlODAyMTFfcmNf
aW5mbyopOwogCiBNQUxMT0NfREVDTEFSRShNXzgwMjExX1JBVEVDVEwpOwogCkBAIC03NCw2ICsx
NjQsOCBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CiAK
IAl2YXAtPml2X3JhdGUtPmlyX25vZGVfaW5pdChuaSk7CisJSUVFRTgwMjExX0RQUklOVEYodmFw
LCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkiJXM6IG5ldDgwMjExIHJhdGVjdGwgbm9kZSBp
bml0ZWQuXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5saW5lCkBAIC04Miw2
ICsxNzQsOCBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7
CiAKIAl2YXAtPml2X3JhdGUtPmlyX25vZGVfZGVpbml0KG5pKTsKKwlJRUVFODAyMTFfRFBSSU5U
Rih2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJCSIlczogbmV0ODAyMTEgcmF0ZWN0bCBu
b2RlIGRlaW5pdGVkLlxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgaW50IF9faW5saW5lCkBA
IC05MywxMCArMTg3LDI2IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5saW5lCitpZWVlODAyMTFf
cmF0ZWN0bF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjEx
X3JjX2luZm8gKnJjX2luZm8pCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0g
bmktPm5pX3ZhcDsKKworCWlmIChyY19pbmZvLT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNU
TF9JTkZPX0FHR1IpIAorCQlyY19pbmZvLT5pcmlfZnJhbWVsZW4gPSAwOworCisJSUVFRTgwMjEx
X0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkiJXM6IGZpbmQgcmF0ZSBz
ZXRzIGZvciAlc2FnZ3JlZ2F0aW9uIHNjZW5hcmlvLlxuIiwgX19mdW5jX18sIAorCQkJKHJjX2lu
Zm8tPmlyaV9mbGFncyAmIElFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdHUik/ICIiIDogIm5vbi0i
KTsKKworCXZhcC0+aXZfcmF0ZS0+aXJfcmF0ZXMobmksIHJjX2luZm8pOworCWllZWU4MDIxMV9y
YXRlY3RsX2NvbXBsZXRlX3JjZmxhZ3MobmksIHJjX2luZm8pOworfQorCitzdGF0aWMgdm9pZCBf
X2lubGluZQogaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4
MDIxMXZhcCAqdmFwLAotICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBz
dGF0dXMsIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpCisgICAgY29uc3Qgc3RydWN0IGllZWU4MDIx
MV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQogewotCXZhcC0+
aXZfcmF0ZS0+aXJfdHhfY29tcGxldGUodmFwLCBuaSwgc3RhdHVzLCBhcmcxLCBhcmcyKTsKKwl2
YXAtPml2X3JhdGUtPmlyX3R4X2NvbXBsZXRlKHZhcCwgbmksIHJjX2luZm8pOwogfQogCiBzdGF0
aWMgdm9pZCBfX2lubGluZQpAQCAtMTE1LDMgKzIyNSwxMzUgQEAKIAkJcmV0dXJuOwogCXZhcC0+
aXZfcmF0ZS0+aXJfc2V0aW50ZXJ2YWwodmFwLCBtc2Vjcyk7CiB9CisKK3N0YXRpYyB2b2lkIF9f
aW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFw
ICp2YXApCit7CisJcHJpbnRmKCJcblslc106IG5ldDgwMjExIHJhdGVjdGwgc3RhdGlzdGljcyAo
JXMpXG4iLCAKKwkJCXZhcC0+aXZfaWZwLT5pZl94bmFtZSwgdmFwLT5pdl9yYXRlLT5pcl9uYW1l
KTsKKwlpZiAodmFwLT5pdl9yYXRlLT5pcl9zdGF0cyA9PSBOVUxMKQorCQlyZXR1cm47CisJdmFw
LT5pdl9yYXRlLT5pcl9zdGF0cyh2YXApOworfQorCitzdGF0aWMgaW50IF9faW5saW5lCitpZWVl
ODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p
KQoreworCXJldHVybiBuaS0+bmlfY2h3ID09IDQwOworfQorCitzdGF0aWMgaW50IF9faW5saW5l
CitpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfc2hvcnRnaShjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx
X25vZGUgKm5pKQoreworCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOworCisJ
aWYgKG5pLT5uaV9jaHcgPT0gNDAgJiYKKwkJaWMtPmljX2h0Y2FwcyAmIElFRUU4MDIxMV9IVENB
UF9TSE9SVEdJNDAgJiYKKwkJbmktPm5pX2h0Y2FwICYgSUVFRTgwMjExX0hUQ0FQX1NIT1JUR0k0
MCkKKwkJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX1RSVUU7CisKKwlpZiAobmktPm5pX2NodyA9
PSAyMCAmJgorCQlpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hUQ0FQX1NIT1JUR0kyMCAmJgor
CQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfU0hPUlRHSTIwKQorCQlyZXR1cm4gSUVF
RTgwMjExX1JBVEVDVExfVFJVRTsKKworCXJldHVybiBJRUVFODAyMTFfUkFURUNUTF9GQUxTRTsK
K30KKworc3RhdGljIGludCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0YmMo
Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExY29t
ICppYyA9IG5pLT5uaV9pYzsKKworCWlmIChpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hUQ0FQ
X1RYU1RCQyAmJgorCQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfUlhTVEJDXzFTVFJF
QU0gJiYKKwkJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01VTFRYQ0hBSU4obmktPm5pX3ZhcCkp
CisJCXJldHVybiBJRUVFODAyMTFfUkFURUNUTF9UUlVFOworCQorCXJldHVybiBJRUVFODAyMTFf
UkFURUNUTF9GQUxTRTsKK30KKworc3RhdGljIGludCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVj
dGxfbm9kZV9pczExbihjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCWlmIChu
aS0+bmlfY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCWlmIChuaS0+bmlfY2hhbiA9PSBJ
RUVFODAyMTFfQ0hBTl9BTllDKQorCQlyZXR1cm4gKDApOworCXJldHVybiAoSUVFRTgwMjExX0lT
X0NIQU5fSFQobmktPm5pX2NoYW4pKTsKK30KKworX19pbmxpbmUgc3RhdGljIGNvbnN0IHN0cnVj
dCBpZWVlODAyMTFfcmF0ZXNldCAqCitpZWVlODAyMTFfcmF0ZWN0bF9nZXRfcmF0ZXNldChjb25z
dCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFf
cmF0ZXNldCAqcnMgPSBOVUxMOworCS8qIDExbiBvciBub3Q/IFBpY2sgdGhlIHJpZ2h0IHJhdGVz
ZXQgKi8KKwlpZiAoaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSkpIHsKKwkJSUVFRTgw
MjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkiJXM6
IDExbiBub2RlIiwgX19mdW5jX18pOworCQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQg
KikgJm5pLT5uaV9odHJhdGVzOworCX0gZWxzZSB7CisJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92
YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkgICAgIiVzOiBub24tMTFuIG5vZGUi
LCBfX2Z1bmNfXyk7CisJCXJzID0gJm5pLT5uaV9yYXRlczsKKwl9CisJcmV0dXJuIHJzOworfQor
CitzdGF0aWMgdm9pZCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfdXBkYXRlX3N0YXQoY29u
c3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAorCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jj
X2luZm8gKnJjX2luZm8pCit7CisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJzID0gSUVF
RTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX3R4Y250ICs9IHJjX2luZm8tPmly
aV90eGNudDsKKwlpcnMtPmlyc19mYWlsY250ICs9IHJjX2luZm8tPmlyaV9mYWlsY250OworCWly
cy0+aXJzX3JldHJ5Y250ICs9IHJjX2luZm8tPmlyaV9yZXRyeWNudDsKKwlpcnMtPmlyc19zaG9y
dHJldHJ5ICs9IHJjX2luZm8tPmlyaV9zaG9ydHJldHJ5OworCWlycy0+aXJzX2xvbmdyZXRyeSAr
PSByY19pbmZvLT5pcmlfbG9uZ3JldHJ5OworfQorCitzdGF0aWMgdm9pZCBfX2lubGluZQoraWVl
ZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19p
bmZvLAorCQl1aW50OF90IHR4Y250LCB1aW50OF90IGZhaWxjbnQsIHVpbnQzMl90IGZyYW1lbGVu
LAorCQl1aW50OF90IHNob3J0cmV0cnksIHVpbnQ4X3QgbG9uZ3JldHJ5LAorCQl1aW50OF90IGZp
bmFsdHNpLCB1aW50OF90IHR4cmF0ZSkKK3sKKwlyY19pbmZvLT5pcmlfdHhjbnQgPSB0eGNudDsK
KwlyY19pbmZvLT5pcmlfZmFpbGNudCA9IGZhaWxjbnQ7CisJcmNfaW5mby0+aXJpX29rY250ID0g
dHhjbnQgLSBmYWlsY250OworCXJjX2luZm8tPmlyaV9mcmFtZWxlbiA9IGZyYW1lbGVuOworCXJj
X2luZm8tPmlyaV9zaG9ydHJldHJ5ID0gc2hvcnRyZXRyeTsKKwlyY19pbmZvLT5pcmlfbG9uZ3Jl
dHJ5ID0gbG9uZ3JldHJ5OworCXJjX2luZm8tPmlyaV9yZXRyeWNudCA9IHNob3J0cmV0cnkgKyBs
b25ncmV0cnk7CisJcmNfaW5mby0+aXJpX2ZpbmFsdHNpID0gZmluYWx0c2k7CisJcmNfaW5mby0+
aXJpX3R4cmF0ZSA9IHR4cmF0ZTsKK30KKworX19pbmxpbmUgc3RhdGljIHN0cnVjdCBpZWVlODAy
MTFfcmNfaW5mbyAqCitpZWVlODAyMTFfcmF0ZWN0bF9yY19pbmZvX2dldChzdHJ1Y3QgaWVlZTgw
MjExX25vZGUgKm5pLAorCQlzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgbV90YWcgKm10YWc7
CisKKyAgICBtdGFnID0gbV90YWdfbG9jYXRlKG0sIE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5F
VDgwMjExX1RBR19SQVRFQ1RMLCBOVUxMKTsKKworCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAs
IElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkiJXM6ICVzcmF0ZWN0bCBtYnVmIHRhZyBm
b3VuZC5cbiIsIF9fZnVuY19fLCAKKwkJCShOVUxMID09IG10YWc/ICJubyAiOiIiKSk7CithZ2Fp
bjoKKwlpZiAoTlVMTCA9PSBtdGFnKSB7CisJCW10YWcgPSBtX3RhZ19hbGxvYyhNVEFHX0FCSV9O
RVQ4MDIxMSwgTkVUODAyMTFfVEFHX1JBVEVDVEwsCisJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAy
MTFfcmNfaW5mbyksIE1fTk9XQUlUKTsKKwkJaWYgKE5VTEwgPT0gbXRhZykgeworCQkJSUVFRTgw
MjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkJIiVz
OiBjYW4ndCBhbGxvYyBtYnVmIHRhZyBmb3IgcmF0ZWN0bC5cbiIsIF9fZnVuY19fKTsKKwkJCWdv
dG8gYWdhaW47CisJCX0KKwkJYnplcm8obXRhZyArIDEsIG10YWctPm1fdGFnX2xlbik7CisJCW1f
dGFnX3ByZXBlbmQobSwgbXRhZyk7CisJfQorCXJldHVybiAoc3RydWN0IGllZWU4MDIxMV9yY19p
bmZvKikobXRhZyArIDEpOworfQorCisjZW5kaWYKSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9m
cmVlYnNkLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuYwkocmV2
aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuYwkod29ya2luZyBj
b3B5KQpAQCAtMjYyLDcgKzI2Miw5IEBACiAJCSJkcml2ZXJfY2FwcyIsIENUTEZMQUdfUlcsICZ2
YXAtPml2X2NhcHMsIDAsCiAJCSJkcml2ZXIgY2FwYWJpbGl0aWVzIik7CiAjaWZkZWYgSUVFRTgw
MjExX0RFQlVHCisJaWVlZTgwMjExX2RlYnVnIHw9IChJRUVFODAyMTFfTVNHX1JBVEVDVEx8SUVF
RTgwMjExX01TR19OT0RFfElFRUU4MDIxMV9NU0dfU0NBTik7CiAJdmFwLT5pdl9kZWJ1ZyA9IGll
ZWU4MDIxMV9kZWJ1ZzsKKwlpZl9wcmludGYoaWZwLCAiJXM6IGl2X2RlYnVnPTB4JTA4eFxuIiwg
X19mdW5jX18sIHZhcC0+aXZfZGVidWcpOwogCVNZU0NUTF9BRERfVUlOVChjdHgsIFNZU0NUTF9D
SElMRFJFTihvaWQpLCBPSURfQVVUTywKIAkJImRlYnVnIiwgQ1RMRkxBR19SVywgJnZhcC0+aXZf
ZGVidWcsIDAsCiAJCSJjb250cm9sIGRlYnVnZ2luZyBwcmludGZzIik7CkluZGV4OiBuZXQ4MDIx
MS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgw
MjExX3JhdGVjdGxfbm9uZS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBuZXQ4MDIxMS9pZWVlODAy
MTFfcmF0ZWN0bF9ub25lLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCwyNiBAQAogCiAj
aW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2ll
ZWU4MDIxMV9yYXRlY3RsLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxf
bm9uZS5oPgogCiBzdGF0aWMgdm9pZAotbm9uZV9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZh
cCkKK25vbmVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxp
dGllcykKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5vbmU7CisKKwlLQVNTRVJUKHZhcC0+
aXZfcnMgPT0gTlVMTCwgKCIlcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMiLCBfX2Z1bmNfXykpOwor
CisJbm9uZSA9IHZhcC0+aXZfcnMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbm9u
ZSksCisJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwlpZiAobm9uZSA9
PSBOVUxMKSB7CisJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHJhdGVj
dGwgc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN0cnVjdCBpZWVlODAyMTFfcmNf
c3RhdCAqIGlycyA9IElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmlyc19jYXBh
YmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7CisKKwkvKiAuLi4gKi8KIH0KIAogc3RhdGljIHZvaWQK
QEAgLTU5LDYgKzc1LDI1IEBACiBzdGF0aWMgdm9pZAogbm9uZV9ub2RlX2luaXQoc3RydWN0IGll
ZWU4MDIxMV9ub2RlICpuaSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlf
dmFwOworCXN0cnVjdCBpZWVlODAyMTFfbm9uZSAqbm9uZSA9IHZhcC0+aXZfcnM7CisJc3RydWN0
IGllZWU4MDIxMV9ub25lX25vZGUgKm5vbjsKKworCWlmIChuaS0+bmlfcmN0bHMgPT0gTlVMTCkg
eworCQluaS0+bmlfcmN0bHMgPSBub24gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFf
bm9uZV9ub2RlKSwKKwkJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJ
aWYgKG5vbiA9PSBOVUxMKSB7CisJCQlpZl9wcmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBh
bGxvYyBwZXItbm9kZSByYXRlY3RsICIKKwkJCSAgICAic3RydWN0dXJlXG4iKTsKKwkJCXJldHVy
bjsKKwkJfQorCX0gZWxzZQorCQlub24gPSBuaS0+bmlfcmN0bHM7CisKKwlub24tPm5vbl9ub25l
ID0gbm9uZTsKKworCS8qIC4uLiAqLworCQogCW5pLT5uaV90eHJhdGUgPSBuaS0+bmlfcmF0ZXMu
cnNfcmF0ZXNbMF0gJiBJRUVFODAyMTFfUkFURV9WQUw7CiB9CiAKQEAgLTc4LDggKzExMyw3IEBA
CiAKIHN0YXRpYyB2b2lkCiBub25lX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2
YXAgKnZhcCwKLSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgb2ssCi0g
ICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiBfX3VudXNlZCkKKyAgICBjb25zdCBzdHJ1Y3QgaWVl
ZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCiB7CiB9
CiAKSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5l
dDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBuZXQ4MDIx
MS9pZWVlODAyMTFfcnNzYWRhcHQuYwkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQAog
CQkJCSAgICBwYXJtIyNfZGVub20pCiAKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X3NldGludGVydmFs
KGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwgaW50KTsKLXN0YXRpYyB2b2lkCXJzc2FkYXB0
X2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKK3N0YXRpYyB2b2lkCXJzc2FkYXB0X2luaXQo
c3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiBzdGF0aWMgdm9pZAlyc3NhZGFwdF9k
ZWluaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X3VwZGF0
ZXN0YXRzKHN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHRfbm9kZSAqKTsKIHN0YXRpYyB2b2lkCXJz
c2FkYXB0X25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7CkBAIC04NCw4ICs4NCw3
IEBACiBzdGF0aWMgdm9pZAlyc3NhZGFwdF9yYWlzZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfcnNz
YWRhcHRfbm9kZSAqLAogCQkJaW50LCBpbnQpOwogc3RhdGljIHZvaWQJcnNzYWRhcHRfdHhfY29t
cGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLAotICAgIAkJCWNvbnN0IHN0cnVjdCBp
ZWVlODAyMTFfbm9kZSAqLCBpbnQsCi0JCQl2b2lkICosIHZvaWQgKik7CisgICAgCQkJY29uc3Qg
c3RydWN0IGllZWU4MDIxMV9ub2RlICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIHN0
YXRpYyB2b2lkCXJzc2FkYXB0X3N5c2N0bGF0dGFjaChzdHJ1Y3QgaWVlZTgwMjExdmFwICosCiAJ
CQlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICosIHN0cnVjdCBzeXNjdGxfb2lkICopOwogCkBAIC0x
MjEsNyArMTIwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXJzc2FkYXB0X2luaXQoc3RydWN0IGll
ZWU4MDIxMXZhcCAqdmFwKQorcnNzYWRhcHRfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAs
IHVpbnQzMl90IGNhcGFiaWxpdGllcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3Jzc2FkYXB0ICpy
czsKIApAQCAtMTM0LDYgKzEzMywxMCBAQAogCQlpZl9wcmludGYodmFwLT5pdl9pZnAsICJjb3Vs
ZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7CiAJCXJldHVybjsKIAl9CisKKwlzdHJ1
Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVFODAyMTFfUkFURUNUTF9TVEFUKHZhcCk7
CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzOworCiAJcnMtPnZhcCA9IHZh
cDsKIAlyc3NhZGFwdF9zZXRpbnRlcnZhbCh2YXAsIDUwMCAvKiBtc2VjcyAqLyk7CiAJcnNzYWRh
cHRfc3lzY3RsYXR0YWNoKHZhcCwgdmFwLT5pdl9zeXNjdGwsIHZhcC0+aXZfb2lkKTsKQEAgLTMw
NywxMCArMzEwLDExIEBACiAKIHN0YXRpYyB2b2lkCiByc3NhZGFwdF90eF9jb21wbGV0ZShjb25z
dCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCi0gICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9u
b2RlICpuaSwgaW50IHN1Y2Nlc3MsIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpCisgICAgY29uc3Qg
c3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19p
bmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHRfbm9kZSAqcmEgPSBuaS0+bmlfcmN0
bHM7Ci0JaW50IHBrdGxlbiA9ICooaW50ICopYXJnMSwgcnNzaSA9ICooaW50ICopYXJnMjsKKwkv
KmludCBwa3RsZW4gPSAqKGludCAqKWFyZzEsIHJzc2kgPSAqKGludCAqKWFyZzI7Ki8KKwlpbnQg
cGt0bGVuID0gMCwgcnNzaSA9IDAsIHN1Y2Nlc3MgPSAwOyAvKiBqdXN0IG1ha2UgaXQgY29tcGls
ZWQuIHFjYyAqLwogCiAJaWYgKHN1Y2Nlc3MpIHsKIAkJcmEtPnJhX25vaysrOwpJbmRleDogbmV0
ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4
MDIxMV9yY19zYW1wbGUuYwkocmV2aXNpb24gMCkKKysrIG5ldDgwMjExL2llZWU4MDIxMV9yY19z
YW1wbGUuYwkocmV2aXNpb24gMjU2ODI1KQpAQCAtMCwwICsxLDExNDEgQEAKKy8qICRGcmVlQlNE
OiBoZWFkL3N5cy9kZXYvYXRoL2F0aF9yYXRlL3NhbXBsZS9zYW1wbGUuYyAyNDg1NzMgMjAxMy0w
Mi0yNyAwNDozMzowNlogYWRyaWFuICQqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBK
b2huIEJpY2tldAorICogQ29weXJpZ2h0IChjKSAyMDEzIENoZW5jaG9uZyBRaW4gPGNjcWluQEZy
ZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQ
UkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSAib3B0X3dsYW4uaCIKKworI2lu
Y2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxz
eXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNj
dGwuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPgor
CisjaWZkZWYgSU5FVAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L2lmX2V0aGVyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV92YXIu
aD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfaHQuaD4KKyNpbmNsdWRlIDxuZXQ4MDIx
MS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yY19z
YW1wbGUuaD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQu
aD4KKworc3RhdGljIHZvaWQJc2FtcGxlX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50
MzJfdCk7CitzdGF0aWMgdm9pZAlzYW1wbGVfZGVpbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKik7
CitzdGF0aWMgdm9pZAlzYW1wbGVfbm9kZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsK
K3N0YXRpYyB2b2lkCXNhbXBsZV9ub2RlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7
CitzdGF0aWMgaW50CXNhbXBsZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCB2b2lkICos
IHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkCXNhbXBsZV90eF9jb21wbGV0ZShjb25zdCBzdHJ1Y3Qg
aWVlZTgwMjExdmFwICosCisgICAgCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIGlu
dCwgCisJCQl2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZAlzYW1wbGVfdHhfdXBkYXRlKGNv
bnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwKKwkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFf
bm9kZSAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkCXNhbXBsZV9zZXRp
bnRlcnZhbChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICosIGludCk7CisKKy8qIG51bWJlciBv
ZiByZWZlcmVuY2VzIGZyb20gbmV0ODAyMTEgbGF5ZXIgKi8KK3N0YXRpYwlpbnQgbnJlZnMgPSAw
OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlY3RsIHNhbXBsZSA9IHsKKwku
aXJfbmFtZQk9ICJzYW1wbGUiLAorCS5pcl9hdHRhY2gJPSBOVUxMLAorCS5pcl9kZXRhY2gJPSBO
VUxMLAorCS5pcl9pbml0CT0gc2FtcGxlX2luaXQsCisJLmlyX2RlaW5pdAk9IHNhbXBsZV9kZWlu
aXQsCisJLmlyX25vZGVfaW5pdAk9IHNhbXBsZV9ub2RlX2luaXQsCisJLmlyX25vZGVfZGVpbml0
CT0gc2FtcGxlX25vZGVfZGVpbml0LAorCS5pcl9yYXRlCT0gc2FtcGxlX3JhdGUsCisJLmlyX3Jh
dGVzCT0gc2FtcGxlX3JhdGVzLAorCS5pcl90eF9jb21wbGV0ZQk9IHNhbXBsZV90eF9jb21wbGV0
ZSwKKwkuaXJfdHhfdXBkYXRlCT0gc2FtcGxlX3R4X3VwZGF0ZSwKKwkuaXJfc2V0aW50ZXJ2YWwJ
PSBzYW1wbGVfc2V0aW50ZXJ2YWwsCit9OworSUVFRTgwMjExX1JBVEVDVExfTU9EVUxFKHNhbXBs
ZSwgMSk7CitJRUVFODAyMTFfUkFURUNUTF9BTEcoc2FtcGxlLCBJRUVFODAyMTFfUkFURUNUTF9T
QU1QTEUsIHNhbXBsZSk7CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfaW5pdChzdHJ1Y3QgaWVlZTgw
MjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxpdGllcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjEx
X3NhbXBsZSAqc2FtcGxlOworCisJS0FTU0VSVCh2YXAtPml2X3JzID09IE5VTEwsICgiJXMgY2Fs
bGVkIG11bHRpcGxlIHRpbWVzIiwgX19mdW5jX18pKTsKKworCXNhbXBsZSA9IHZhcC0+aXZfcnMg
PSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc2FtcGxlKSwKKwkgICAgTV84MDIxMV9S
QVRFQ1RMLCBNX05PV0FJVHxNX1pFUk8pOworCWlmIChzYW1wbGUgPT0gTlVMTCkgeworCQlpZl9w
cmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7
CisJCXJldHVybjsKKwl9CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVF
ODAyMTFfUkFURUNUTF9TVEFUKHZhcCk7CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJp
bGl0aWVzOworCisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX3JhdGUgPSA3NTsJCS8qIGV3bWEg
cGVyY2VudGFnZSAoWzAuLjk5XSkgKi8KKwlzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfbWlucGFj
a2V0cyA9IDEwMCAvICgxMDAgLSBzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfcmF0ZSk7CisJc2Ft
cGxlLT5zYW1wbGVfcmF0ZSA9IDEwOwkJCS8qICV0aW1lIHRvIHRyeSBkaWZmIHR4IHJhdGVzICov
CisJc2FtcGxlLT5zYW1wbGVfbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMgPSAzOwkvKiB0aHJlc2hv
bGQgZm9yIHJhdGUgc2FtcGxpbmcqLworCXNhbXBsZS0+c2FtcGxlX3N0YWxlX2ZhaWx1cmVfdGlt
ZW91dCA9IDEwICogaHo7CS8qIDEwIHNlY29uZHMgKi8KKwlzYW1wbGUtPnNhbXBsZV9taW5fc3dp
dGNoID0gaHo7CQkJLyogMSBzZWNvbmQgKi8KKwlzYW1wbGVfc2V0aW50ZXJ2YWwodmFwLCA1MDAg
LyogbXMgKi8pOyAJLyogYWN0dWFsbHkgZG8gbm90aGluZyAqLworCXNhbXBsZV9zeXNjdGxhdHRh
Y2godmFwLCB2YXAtPml2X3N5c2N0bCwgdmFwLT5pdl9vaWQpOworfQorCitzdGF0aWMgdm9pZAor
c2FtcGxlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCit7CisJZnJlZSh2YXAtPml2
X3JzLCBNXzgwMjExX1JBVEVDVEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1
bGUgKm1ycl9zY2hlZHVsZXNbSUVFRTgwMjExX01PREVfTUFYKzJdID0geworCU5VTEwsCQkvKiBJ
RUVFODAyMTFfTU9ERV9BVVRPICovCisJc2VyaWVzXzExYSwJLyogSUVFRTgwMjExX01PREVfMTFB
ICovCisJc2VyaWVzXzExZywJLyogSUVFRTgwMjExX01PREVfMTFCICovCisJc2VyaWVzXzExZywJ
LyogSUVFRTgwMjExX01PREVfMTFHICovCisJTlVMTCwJCS8qIElFRUU4MDIxMV9NT0RFX0ZIICov
CisJc2VyaWVzXzExYSwJLyogSUVFRTgwMjExX01PREVfVFVSQk9fQSAqLworCXNlcmllc18xMWcs
CS8qIElFRUU4MDIxMV9NT0RFX1RVUkJPX0cgKi8KKwlzZXJpZXNfMTFhLAkvKiBJRUVFODAyMTFf
TU9ERV9TVFVSQk9fQSAqLworCXNlcmllc18xMW5hLAkvKiBJRUVFODAyMTFfTU9ERV8xMU5BICov
CisJc2VyaWVzXzExbmcsCS8qIElFRUU4MDIxMV9NT0RFXzExTkcgKi8KKwlzZXJpZXNfaGFsZiwJ
LyogSUVFRTgwMjExX01PREVfSEFMRiAqLworCXNlcmllc19xdWFydGVyLAkvKiBJRUVFODAyMTFf
TU9ERV9RVUFSVEVSICovCit9OworCitzdGF0aWMgdm9pZAorc2FtcGxlX25vZGVfaW5pdChzdHJ1
Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworI2RlZmluZQlSQVRFKF9peCkJKG5pLT5uaV9yYXRl
cy5yc19yYXRlc1soX2l4KV0gJiBJRUVFODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCURPVDExUkFU
RShfaXgpCShydC0+aW5mb1soX2l4KV0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQor
I2RlZmluZQlNQ1MoX2l4KQkobmktPm5pX2h0cmF0ZXMucnNfcmF0ZXNbX2l4XSB8IElFRUU4MDIx
MV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOworCXN0
cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3JzOworCXN0cnVjdCBpZWVl
ODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9y
YXRlX3RhYmxlICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1
cmNoYW4pOworCWVudW0gaWVlZTgwMjExX3BoeW1vZGUgY3VybW9kZSA9IGllZWU4MDIxMV9jaGFu
Mm1vZGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJaW50IHgsIHksIHJpeDsKKworCWlmIChu
aS0+bmlfcmN0bHMgPT0gTlVMTCkgeworCQluaS0+bmlfcmN0bHMgPSBzYW4gPSBtYWxsb2Moc2l6
ZW9mKHN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUpLAorCQkgICAgTV84MDIxMV9SQVRFQ1RM
LCBNX05PV0FJVHxNX1pFUk8pOworCQlpZiAoc2FuID09IE5VTEwpIHsKKwkJCWlmX3ByaW50Zih2
YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHBlci1ub2RlIHJhdGVjdGwgIgorCQkJICAgICJz
dHJ1Y3R1cmVcbiIpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlCisJCXNhbiA9IG5pLT5uaV9y
Y3RsczsKKwkKKwlzYW4tPnNhbl9zYW1wbGUgPSBzYW1wbGU7CisKKwlLQVNTRVJUKHJ0ICE9IE5V
TEwsICgibm8gcmF0ZSB0YWJsZSwgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCXNhbi0+c2NoZWQg
PSBtcnJfc2NoZWR1bGVzW2N1cm1vZGVdOworCUtBU1NFUlQoc2FuLT5zY2hlZCAhPSBOVUxMLCAo
Im5vIG1yciBzY2hlZHVsZSBmb3IgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCXNhbi0+c3RhdGlj
X3JpeCA9IC0xOworCXNhbXBsZV91cGRhdGVfc3RhdGljX3JpeChuaSk7CisKKwkvKgorCSAqIENv
bnN0cnVjdCBhIGJpdG1hc2sgb2YgdXNhYmxlIHJhdGVzLiAgVGhpcyBoYXMgYWxsCisJICogbmVn
b3RpYXRlZCByYXRlcyBtaW51cyB0aG9zZSBtYXJrZWQgYnkgdGhlIGhhbCBhcworCSAqIHRvIGJl
IGlnbm9yZWQgZm9yIGRvaW5nIHJhdGUgY29udHJvbC4KKwkgKi8KKwlzYW4tPnJhdGVtYXNrID0g
MDsKKworCS8qIE1DUyByYXRlcyAqLworCWlmIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E
RV9IVCkgeworCQlmb3IgKHggPSAwOyB4IDwgbmktPm5pX2h0cmF0ZXMucnNfbnJhdGVzOyB4Kysp
IHsKKwkJCXJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbTUNTKHgpXTsKKwkJCWlmIChyaXggPT0g
MHhmZikKKwkJCQljb250aW51ZTsKKwkJCS8qIHNraXAgcmF0ZXMgbWFya2VkIGJyb2tlbiBieSBo
YWwgKi8KKwkJCWlmICghcnQtPmluZm9bcml4XS52YWxpZCkKKwkJCQljb250aW51ZTsKKwkJCUtB
U1NFUlQocml4IDwgU0FNUExFX01BWFJBVEVTLAorCQkJICAgICgibWNzICV1IGhhcyByaXggJWQi
LCBNQ1MoeCksIHJpeCkpOworCQkJc2FuLT5yYXRlbWFzayB8PSAodWludDY0X3QpIDE8PHJpeDsK
KwkJfQorCX0KKworCS8qIExlZ2FjeSByYXRlcyAqLworCWZvciAoeCA9IDA7IHggPCBuaS0+bmlf
cmF0ZXMucnNfbnJhdGVzOyB4KyspIHsKKwkJcml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFtSQVRF
KHgpXTsKKwkJaWYgKHJpeCA9PSAweGZmKQorCQkJY29udGludWU7CisJCS8qIHNraXAgcmF0ZXMg
bWFya2VkIGJyb2tlbiBieSBoYWwgKi8KKwkJaWYgKCFydC0+aW5mb1tyaXhdLnZhbGlkKQorCQkJ
Y29udGludWU7CisJCUtBU1NFUlQocml4IDwgU0FNUExFX01BWFJBVEVTLAorCQkgICAgKCJyYXRl
ICV1IGhhcyByaXggJWQiLCBSQVRFKHgpLCByaXgpKTsKKwkJc2FuLT5yYXRlbWFzayB8PSAodWlu
dDY0X3QpIDE8PHJpeDsKKwl9CisKKwlmb3IgKHkgPSAwOyB5IDwgTlVNX1BBQ0tFVF9TSVpFX0JJ
TlM7IHkrKykgeworCQlpbnQgc2l6ZSA9IGJpbl90b19zaXplKHkpOworCQl1aW50NjRfdCBtYXNr
OworCisJCXNhbi0+cGFja2V0c19zZW50W3ldID0gMDsKKwkJc2FuLT5jdXJyZW50X3NhbXBsZV9y
aXhbeV0gPSAtMTsKKwkJc2FuLT5sYXN0X3NhbXBsZV9yaXhbeV0gPSAwOworCQkvKiBYWFggc3Rh
cnQgd2l0aCBmaXJzdCB2YWxpZCByYXRlICovCisJCXNhbi0+Y3VycmVudF9yaXhbeV0gPSBmZnMo
c2FuLT5yYXRlbWFzayktMTsKKwkJCisJCS8qCisJCSAqIEluaXRpYWxpemUgdGhlIHN0YXRpc3Rp
Y3MgYnVja2V0czsgdGhlc2UgYXJlCisJCSAqIGluZGV4ZWQgYnkgdGhlIHJhdGUgY29kZSBpbmRl
eC4KKwkJICovCisJCWZvciAocml4ID0gMCwgbWFzayA9IHNhbi0+cmF0ZW1hc2s7IG1hc2sgIT0g
MDsgcml4KyssIG1hc2sgPj49IDEpIHsKKwkJCWlmICgobWFzayAmIDEpID09IDApCQkvKiBub3Qg
YSB2YWxpZCByYXRlICovCisJCQkJY29udGludWU7CisJCQlzYW4tPnN0YXRzW3ldW3JpeF0uc3Vj
Y2Vzc2l2ZV9mYWlsdXJlcyA9IDA7CisJCQlzYW4tPnN0YXRzW3ldW3JpeF0udHJpZXMgPSAwOwor
CQkJc2FuLT5zdGF0c1t5XVtyaXhdLnRvdGFsX3BhY2tldHMgPSAwOworCQkJc2FuLT5zdGF0c1t5
XVtyaXhdLnBhY2tldHNfYWNrZWQgPSAwOworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmxhc3RfdHgg
PSAwOworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmV3bWFfcGN0ID0gMDsKKwkJCQorCQkJc2FuLT5z
dGF0c1t5XVtyaXhdLnBlcmZlY3RfdHhfdGltZSA9CisJCQkgICAgY2FsY191c2Vjc191bmljYXN0
X3BhY2tldCh2YXAsIHNpemUsIHJpeCwgMCwgMCwKKwkJCSAgICAobmktPm5pX2NodyA9PSA0MCkp
OworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmF2ZXJhZ2VfdHhfdGltZSA9CisJCQkgICAgc2FuLT5z
dGF0c1t5XVtyaXhdLnBlcmZlY3RfdHhfdGltZTsKKwkJfQorCX0KKworCS8qIHNldCB0aGUgdmlz
aWJsZSBiaXQtcmF0ZSAqLworCWlmIChzYW4tPnN0YXRpY19yaXggIT0gLTEpCisJCW5pLT5uaV90
eHJhdGUgPSBET1QxMVJBVEUoc2FuLT5zdGF0aWNfcml4KTsKKwllbHNlCisJCW5pLT5uaV90eHJh
dGUgPSBSQVRFKDApOworI3VuZGVmIFJBVEUKKyN1bmRlZiBET1QxMVJBVEUKKyN1bmRlZiBNQ1MK
K30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9ub2RlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25v
ZGUgKm5pKQoreworCWZyZWUobmktPm5pX3JjdGxzLCBNXzgwMjExX1JBVEVDVEwpOworfQorCitz
dGF0aWMgaW50Citkb3QxMXJhdGUoY29uc3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LCBpbnQg
cml4KQoreworCWlmIChyaXggPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJ0LT5pbmZvW3Jp
eF0ucGh5ID09IElFRUU4MDIxMV9UX0hUID8KKwkgICAgcnQtPmluZm9bcml4XS5kb3QxMVJhdGUg
OiAocnQtPmluZm9bcml4XS5kb3QxMVJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpIC8gMjsKK30K
Kworc3RhdGljIGNvbnN0IGNoYXIgKgorZG90MTFyYXRlX2xhYmVsKGNvbnN0IGllZWU4MDIxMV9y
YXRlX3RhYmxlICpydCwgaW50IHJpeCkKK3sKKwlpZiAocml4IDwgMCkKKwkJcmV0dXJuICIiOwor
CXJldHVybiBydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCA/ICJNQ1MiIDogIk1i
ICI7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHJpeCB3aXRoIHRoZSBsb3dlc3QgYXZlcmFnZV90
eF90aW1lLAorICogb3IgLTEgaWYgYWxsIHRoZSBhdmVyYWdlX3R4X3RpbWVzIGFyZSAwLgorICov
CitzdGF0aWMgX19pbmxpbmUgaW50CitwaWNrX2Jlc3RfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgw
MjExX25vZGUgKm5pLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LAorICAg
IGludCBzaXplX2JpbiwgaW50IHJlcXVpcmVfYWNrZWRfYmVmb3JlKQoreworCXN0cnVjdCBpZWVl
ODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKyAgICBpbnQgYmVzdF9yYXRl
X3JpeCwgYmVzdF9yYXRlX3R0LCBiZXN0X3JhdGVfcGN0OworCXVpbnQ2NF90IG1hc2s7CisJaW50
IHJpeCwgdHQsIHBjdDsKKworICAgIGJlc3RfcmF0ZV9yaXggPSAwOworICAgIGJlc3RfcmF0ZV90
dCA9IDA7CisJYmVzdF9yYXRlX3BjdCA9IDA7CisKKwlmb3IgKG1hc2sgPSBzYW4tPnJhdGVtYXNr
LCByaXggPSAwOyBtYXNrICE9IDA7IG1hc2sgPj49IDEsIHJpeCsrKSB7CisJCWlmICgobWFzayAm
IDEpID09IDApCQkvKiBub3QgYSBzdXBwb3J0ZWQgcmF0ZSAqLworCQkJY29udGludWU7CisKKwkJ
LyogRG9uJ3QgcGljayBhIG5vbi1IVCByYXRlIGZvciBhIEhUIG5vZGUgKi8KKwkJaWYgKChuaS0+
bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgJiYKKwkJICAgIChydC0+aW5mb1tyaXhdLnBo
eSAhPSBJRUVFODAyMTFfVF9IVCkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdHQgPSBzYW4t
PnN0YXRzW3NpemVfYmluXVtyaXhdLmF2ZXJhZ2VfdHhfdGltZTsKKwkJaWYgKHR0IDw9IDAgfHwK
KwkJICAgIChyZXF1aXJlX2Fja2VkX2JlZm9yZSAmJgorCQkgICAgICFzYW4tPnN0YXRzW3NpemVf
YmluXVtyaXhdLnBhY2tldHNfYWNrZWQpKQorCQkJY29udGludWU7CisKKwkJLyogQ2FsY3VsYXRl
IHBlcmNlbnRhZ2UgaWYgcG9zc2libGUgKi8KKwkJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Jp
eF0udG90YWxfcGFja2V0cyA+IDApIHsKKwkJCXBjdCA9IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Jp
eF0uZXdtYV9wY3Q7CisJCX0gZWxzZSB7CisJCQkvKiBYWFggZm9yIG5vdywgYXNzdW1lIDk1JSBv
ayAqLworCQkJcGN0ID0gOTU7CisJCX0KKworCQkvKiBkb24ndCB1c2UgYSBiaXQtcmF0ZSB0aGF0
IGhhcyBiZWVuIGZhaWxpbmcgKi8KKwkJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeF0uc3Vj
Y2Vzc2l2ZV9mYWlsdXJlcyA+IDMpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGb3IgSFQs
IERvbid0IHVzZSBhIGJpdCByYXRlIHRoYXQgaXMgbXVjaCBtb3JlCisJCSAqIGxvc3N5IHRoYW4g
dGhlIGJlc3QuCisJCSAqCisJCSAqIFhYWCB0aGlzIGlzbid0IG9wdGltYWw7IGl0J3MganVzdCBk
ZXNpZ25lZCB0bworCQkgKiBlbGltaW5hdGUgcmF0ZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgb2J2
aW91c2x5CisJCSAqIHdvcnNlLgorCQkgKi8KKwkJaWYgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIx
MV9OT0RFX0hUKSB7CisJCQlpZiAoYmVzdF9yYXRlX3BjdCA+IChwY3QgKyA1MCkpCisJCQkJY29u
dGludWU7CisJCX0KKworCQkvKgorCQkgKiBGb3Igbm9uLU1DUyByYXRlcywgdXNlIHRoZSBjdXJy
ZW50IGF2ZXJhZ2UgdHh0aW1lIGZvcgorCQkgKiBjb21wYXJpc29uLgorCQkgKi8KKwkJaWYgKCEg
KG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkgeworCQkJaWYgKGJlc3RfcmF0ZV90
dCA9PSAwIHx8IHR0IDw9IGJlc3RfcmF0ZV90dCkgeworCQkJCWJlc3RfcmF0ZV90dCA9IHR0Owor
CQkJCWJlc3RfcmF0ZV9yaXggPSByaXg7CisJCQkJYmVzdF9yYXRlX3BjdCA9IHBjdDsKKwkJCX0K
KwkJfQorCisJCS8qCisJCSAqIFNpbmNlIDIgc3RyZWFtIHJhdGVzIGhhdmUgc2xpZ2h0bHkgaGln
aGVyIFRYIHRpbWVzLAorCQkgKiBhbGxvdyBhIGxpdHRsZSBiaXQgb2YgbGVld2F5LiBUaGlzIHNo
b3VsZCBsYXRlcgorCQkgKiBiZSBhYnN0cmFjdGVkIG91dCBhbmQgcHJvcGVybHkgaGFuZGxlZC4K
KwkJICovCisJCWlmIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgeworCQkJaWYg
KGJlc3RfcmF0ZV90dCA9PSAwIHx8ICh0dCAqIDggPD0gYmVzdF9yYXRlX3R0ICogMTApKSB7CisJ
CQkJYmVzdF9yYXRlX3R0ID0gdHQ7CisJCQkJYmVzdF9yYXRlX3JpeCA9IHJpeDsKKwkJCQliZXN0
X3JhdGVfcGN0ID0gcGN0OworCQkJfQorCQl9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChi
ZXN0X3JhdGVfdHQgPyBiZXN0X3JhdGVfcml4IDogLTEpOworfQorCisvKgorICogUGljayBhIGdv
b2QgInJhbmRvbSIgYml0LXJhdGUgdG8gc2FtcGxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb25l
LgorICovCitzdGF0aWMgX19pbmxpbmUgaW50CitwaWNrX3NhbXBsZV9yYXRlKGNvbnN0IHN0cnVj
dCBpZWVlODAyMTFfbm9kZSAqbmksIGNvbnN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCwgCisJ
aW50IHNpemVfYmluKQoreworI2RlZmluZQlET1QxMVJBVEUoaXgpCShydC0+aW5mb1tpeF0uZG90
MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoaXgpCQkocnQtPmluZm9b
aXhdLmRvdDExUmF0ZSB8IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExX3Nh
bXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUg
KnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsKKwlpbnQgY3VycmVudF9yaXgsIHJpeDsKKwl1bnNp
Z25lZCBjdXJyZW50X3R0OworCXVpbnQ2NF90IG1hc2s7CisJCisJY3VycmVudF9yaXggPSBzYW4t
PmN1cnJlbnRfcml4W3NpemVfYmluXTsKKwlpZiAoY3VycmVudF9yaXggPCAwKSB7CisJCS8qIG5v
IHN1Y2Nlc3NlcyB5ZXQsIHNlbmQgYXQgdGhlIGxvd2VzdCBiaXQtcmF0ZSAqLworCQkvKiBYWFgg
c2hvdWxkIHJldHVybiBNQ1MwIGlmIEhUICovCisJCXJldHVybiAwOworCX0KKworCWN1cnJlbnRf
dHQgPSBzYW4tPnN0YXRzW3NpemVfYmluXVtjdXJyZW50X3JpeF0uYXZlcmFnZV90eF90aW1lOwor
CisJcml4ID0gc2FuLT5sYXN0X3NhbXBsZV9yaXhbc2l6ZV9iaW5dKzE7CS8qIG5leHQgc2FtcGxl
IHJhdGUgKi8KKwltYXNrID0gc2FuLT5yYXRlbWFzayAmfiAoKHVpbnQ2NF90KSAxPDxjdXJyZW50
X3JpeCk7LyogZG9uJ3Qgc2FtcGxlIGN1cnJlbnQgcmF0ZSAqLworCXdoaWxlIChtYXNrICE9IDAp
IHsKKwkJaWYgKChtYXNrICYgKCh1aW50NjRfdCkgMTw8cml4KSkgPT0gMCkgewkvKiBub3QgYSBz
dXBwb3J0ZWQgcmF0ZSAqLworCW5leHRyYXRlOgorCQkJaWYgKCsrcml4ID49IHJ0LT5yYXRlQ291
bnQpCisJCQkJcml4ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVGhlIGZv
bGxvd2luZyBjb2RlIHN0b3BzIHRyeWluZyB0byBzYW1wbGUKKwkJICogbm9uLU1DUyByYXRlcyB3
aGVuIHNwZWFraW5nIHRvIGFuIE1DUyBub2RlLgorCQkgKiBIb3dldmVyLCBhdCBsZWFzdCBmb3Ig
Q0NLIHJhdGVzIGluIDIuNEdIeiBtb2RlLAorCQkgKiB0aGUgbm9uLU1DUyByYXRlcyBNQVkgYWN0
dWFsbHkgcHJvdmlkZSBiZXR0ZXIKKwkJICogUEVSIGF0IHRoZSB2ZXJ5IGZhciBlZGdlIG9mIHJl
Y2VwdGlvbi4KKwkJICoKKwkJICogSG93ZXZlciEgVW50aWwgYXRoX3JhdGVfZm9ybV9hZ2dyKCkg
Z3Jvd3MKKwkJICogc29tZSBsb2dpYyB0byBub3QgZm9ybSBhZ2dyZWdhdGVzIGlmIHRoZQorCQkg
KiBzZWxlY3RlZCByYXRlIGlzIG5vbi1NQ1MsIHRoaXMgd29uJ3Qgd29yay4KKwkJICoKKwkJICog
U28gZG9uJ3QgZGlzYWJsZSB0aGlzIGNvZGUgdW50aWwgeW91J3ZlIHRhdWdodAorCQkgKiBhdGhf
cmF0ZV9mb3JtX2FnZ3IoKSB0byBkcm9wIG91dCBpZiBhbnkgb2YKKwkJICogdGhlIHNlbGVjdGVk
IHJhdGVzIGFyZSBub24tTUNTLgorCQkgKi8KKyNpZiAxCisJCS8qIGlmIHRoZSBub2RlIGlzIEhU
IGFuZCB0aGUgcmF0ZSBpc24ndCBIVCwgZG9uJ3QgYm90aGVyIHNhbXBsZSAqLworCQlpZiAoKG5p
LT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSAmJgorCQkgICAgKHJ0LT5pbmZvW3JpeF0u
cGh5ICE9IElFRUU4MDIxMV9UX0hUKSkgeworCQkJbWFzayAmPSB+KCh1aW50NjRfdCkgMTw8cml4
KTsKKwkJCWdvdG8gbmV4dHJhdGU7CisJCX0KKyNlbmRpZgorCisJCS8qIHRoaXMgYml0LXJhdGUg
aXMgYWx3YXlzIHdvcnNlIHRoYW4gdGhlIGN1cnJlbnQgb25lICovCisJCWlmIChzYW4tPnN0YXRz
W3NpemVfYmluXVtyaXhdLnBlcmZlY3RfdHhfdGltZSA+IGN1cnJlbnRfdHQpIHsKKwkJCW1hc2sg
Jj0gfigodWludDY0X3QpIDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOworCQl9CisKKwkJLyog
cmFyZWx5IHNhbXBsZSBiaXQtcmF0ZXMgdGhhdCBmYWlsIGEgbG90ICovCisJCWlmIChzYW4tPnN0
YXRzW3NpemVfYmluXVtyaXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPiBzYW1wbGUtPnNhbXBsZV9t
YXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcyAmJgorCQkgICAgdGlja3MgLSBzYW4tPnN0YXRzW3NpemVf
YmluXVtyaXhdLmxhc3RfdHggPCBzYW1wbGUtPnNhbXBsZV9zdGFsZV9mYWlsdXJlX3RpbWVvdXQp
IHsKKwkJCW1hc2sgJj0gfigodWludDY0X3QpIDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOwor
CQl9CisKKwkJLyoKKwkJICogRm9yIEhULCBvbmx5IHNhbXBsZSBhIGZldyByYXRlcyBvbiBlaXRo
ZXIgc2lkZSBvZiB0aGUKKwkJICogY3VycmVudCByaXg7IHRoZXJlJ3MgcXVpdGUgbGlrZWx5IGEg
bG90IG9mIHRoZW0uCisJCSAqLworCQlpZiAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVf
SFQpIHsKKwkJCWlmIChyaXggPCAoY3VycmVudF9yaXggLSAzKSB8fAorCQkJICAgIHJpeCA+IChj
dXJyZW50X3JpeCArIDMpKSB7CisJCQkJbWFzayAmPSB+KCh1aW50NjRfdCkgMTw8cml4KTsKKwkJ
CQlnb3RvIG5leHRyYXRlOworCQkJfQorCQl9CisKKwkJLyogRG9uJ3Qgc2FtcGxlIG1vcmUgdGhh
biAyIHJhdGVzIGhpZ2hlciBmb3IgcmF0ZXMgPiAxMU0gZm9yIG5vbi1IVCByYXRlcyAqLworCQlp
ZiAoISAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpKSB7CisJCQlpZiAoRE9UMTFS
QVRFKHJpeCkgPiAyKjExICYmIHJpeCA+IGN1cnJlbnRfcml4ICsgMikgeworCQkJCW1hc2sgJj0g
figodWludDY0X3QpIDE8PHJpeCk7CisJCQkJZ290byBuZXh0cmF0ZTsKKwkJCX0KKwkJfQorCisJ
CXNhbi0+bGFzdF9zYW1wbGVfcml4W3NpemVfYmluXSA9IHJpeDsKKwkJcmV0dXJuIHJpeDsKKwl9
CisJcmV0dXJuIGN1cnJlbnRfcml4OworI3VuZGVmIERPVDExUkFURQorI3VuZGVmIE1DUworfQor
CitzdGF0aWMgaW50CitzYW1wbGVfZ2V0X3N0YXRpY19yaXgoY29uc3Qgc3RydWN0IGllZWU4MDIx
MV9ub2RlICpuaSkKK3sKKyNkZWZpbmUJUkFURShfaXgpCShuaS0+bmlfcmF0ZXMucnNfcmF0ZXNb
KF9peCldICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoX2l4KQkobmktPm5pX2h0
cmF0ZXMucnNfcmF0ZXNbX2l4XSB8IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgw
MjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90
YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJjaGFu
KTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4cGFyYW0gKnRwID0gbmktPm5pX3R4cGFybXM7
CisJaW50IHNyYXRlOworCisJLyogQ2hlY2sgTUNTIHJhdGVzICovCisJZm9yIChzcmF0ZSA9IG5p
LT5uaV9odHJhdGVzLnJzX25yYXRlcyAtIDE7IHNyYXRlID49IDA7IHNyYXRlLS0pIHsKKwkJaWYg
KE1DUyhzcmF0ZSkgPT0gdHAtPnVjYXN0cmF0ZSkKKwkJCXJldHVybiBydC0+cmF0ZUNvZGVUb0lu
ZGV4W3RwLT51Y2FzdHJhdGVdOworCX0KKworCS8qIENoZWNrIGxlZ2FjeSByYXRlcyAqLworCWZv
ciAoc3JhdGUgPSBuaS0+bmlfcmF0ZXMucnNfbnJhdGVzIC0gMTsgc3JhdGUgPj0gMDsgc3JhdGUt
LSkgeworCQlpZiAoUkFURShzcmF0ZSkgPT0gdHAtPnVjYXN0cmF0ZSkKKwkJCXJldHVybiBydC0+
cmF0ZUNvZGVUb0luZGV4W3RwLT51Y2FzdHJhdGVdOworCX0KKwlyZXR1cm4gLTE7CisjdW5kZWYJ
UkFURQorI3VuZGVmCU1DUworfQorCitzdGF0aWMgdm9pZAorc2FtcGxlX3VwZGF0ZV9zdGF0aWNf
cml4KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1w
bGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhw
YXJhbSAqdHAgPSBuaS0+bmlfdHhwYXJtczsKKworCWlmICh0cCAhPSBOVUxMICYmIHRwLT51Y2Fz
dHJhdGUgIT0gSUVFRTgwMjExX0ZJWEVEX1JBVEVfTk9ORSkgeworCQkvKgorCQkgKiBBIGZpeGVk
IHJhdGUgaXMgdG8gYmUgdXNlZDsgdWNhc3RyYXRlIGlzIHRoZSBJRUVFIGNvZGUKKwkJICogZm9y
IHRoaXMgcmF0ZSAoc2FucyBiYXNpYyBiaXQpLiAgQ2hlY2sgdGhpcyBhZ2FpbnN0IHRoZQorCQkg
KiBuZWdvdGlhdGVkIHJhdGUgc2V0IGZvciB0aGUgbm9kZS4gIE5vdGUgdGhlIGZpeGVkIHJhdGUK
KwkJICogbWF5IG5vdCBiZSBhdmFpbGFibGUgZm9yIHZhcmlvdXMgcmVhc29ucyBzbyB3ZSBvbmx5
CisJCSAqIHNldHVwIHRoZSBzdGF0aWMgcmF0ZSBpbmRleCBpZiB0aGUgbG9va3VwIGlzIHN1Y2Nl
c3NmdWwuCisJCSAqLworCQlzYW4tPnN0YXRpY19yaXggPSBzYW1wbGVfZ2V0X3N0YXRpY19yaXgo
bmkpOworCX0gZWxzZSB7CisJCXNhbi0+c3RhdGljX3JpeCA9IC0xOworCX0KK30KKworLyoKKyAq
IFBpY2sgYSBub24tSFQgcmF0ZSB0byBiZWdpbiB1c2luZy4KKyAqLworc3RhdGljIGludAorc2Ft
cGxlX3BpY2tfc2VlZF9yYXRlX2xlZ2FjeShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p
LCBpbnQgZnJhbWVMZW4pCit7CisjZGVmaW5lCURPVDExUkFURShpeCkJKHJ0LT5pbmZvW2l4XS5k
b3QxMVJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw
ID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+
bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4
MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCQorCWNvbnN0IGlu
dCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lTGVuKTsKKwlpbnQgcml4ID0gLTE7CisKKwkv
KiBubyBwYWNrZXQgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHkgeWV0ICovCisJZm9yIChyaXgg
PSBydC0+cmF0ZUNvdW50LTE7IHJpeCA+IDA7IHJpeC0tKSB7CisJCWlmICgoc2FuLT5yYXRlbWFz
ayAmICgodWludDY0X3QpIDE8PHJpeCkpID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBTa2lw
IEhUIHJhdGVzICovCisJCWlmIChydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCkK
KwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFBpY2sgdGhlIGhpZ2hlc3QgcmF0ZSA8PSAzNiBN
YnBzCisJCSAqIHRoYXQgaGFzbid0IGZhaWxlZC4KKwkJICovCisJCWlmIChET1QxMVJBVEUocml4
KSA8PSA3MiAmJgorCQkgICAgc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2Zh
aWx1cmVzID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByaXg7CisjdW5kZWYg
RE9UMTFSQVRFCit9CisKKy8qCisgKiBQaWNrIGEgSFQgcmF0ZSB0byBiZWdpbiB1c2luZy4KKyAq
CisgKiBEb24ndCB1c2UgYW55IG5vbi1IVCByYXRlczsgb25seSBjb25zaWRlciBIVCByYXRlcy4K
KyAqLworc3RhdGljIGludAorc2FtcGxlX3BpY2tfc2VlZF9yYXRlX2h0KGNvbnN0IHN0cnVjdCBp
ZWVlODAyMTFfbm9kZSAqbmksIGludCBmcmFtZUxlbikKK3sKKyNkZWZpbmUJTUNTKGl4KQkJKHJ0
LT5pbmZvW2l4XS5kb3QxMVJhdGUgfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0IGllZWU4
MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2Rl
ICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxl
ICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOwor
CQorCWNvbnN0IGludCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lTGVuKTsKKwlpbnQgcml4
ID0gLTEsIGh0X3JpeCA9IC0xOworCisJLyogbm8gcGFja2V0IGhhcyBiZWVuIHNlbnQgc3VjY2Vz
c2Z1bGx5IHlldCAqLworCWZvciAocml4ID0gcnQtPnJhdGVDb3VudC0xOyByaXggPiAwOyByaXgt
LSkgeworCQkvKiBTa2lwIHJhdGVzIHdlIGNhbid0IHVzZSAqLworCQlpZiAoKHNhbi0+cmF0ZW1h
c2sgJiAoKHVpbnQ2NF90KSAxPDxyaXgpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogS2Vl
cCBhIGNvcHkgb2YgdGhlIGxhc3Qgc2VlbiBIVCByYXRlIGluZGV4ICovCisJCWlmIChydC0+aW5m
b1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCkKKwkJCWh0X3JpeCA9IHJpeDsKKworCQkvKiBT
a2lwIG5vbi1IVCByYXRlcyAqLworCQlpZiAocnQtPmluZm9bcml4XS5waHkgIT0gSUVFRTgwMjEx
X1RfSFQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBQaWNrIGEgbWVkaXVtLXNwZWVkIHJh
dGUgcmVnYXJkbGVzcyBvZiBzdHJlYW0gY291bnQKKwkJICogd2hpY2ggaGFzIG5vdCBzZWVuIGFu
eSBmYWlsdXJlcy4gSGlnaGVyIHJhdGVzIG1heSBmYWlsOworCQkgKiB3ZSdsbCB0cnkgdGhlbSBs
YXRlci4KKwkJICovCisJCWlmICgoKE1DUyhyaXgpICYgMHg3KSA8PSA0KSAmJgorCQkgICAgc2Fu
LT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2ZhaWx1cmVzID09IDApIHsKKwkJCWJy
ZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBhbGwgdGhlIE1DUyByYXRlcyBoYXZlIHN1Y2Nl
c3NpdmUgZmFpbHVyZXMsIHJpeCBzaG91bGQgYmUKKwkgKiA+IDA7IG90aGVyd2lzZSB1c2UgdGhl
IGxvd2VzdCBNQ1Mgcml4IChob3BlZnVsbHkgTUNTIDAuKQorCSAqLworCXJldHVybiBNQVgocml4
LCBodF9yaXgpOworI3VuZGVmIE1DUworfQorCitzdGF0aWMgaW50CitzYW1wbGVfcmF0ZShzdHJ1
Y3QgaWVlZTgwMjExX25vZGUgKm5pLCB2b2lkICphcmcgX191bnVzZWQsIHVpbnQzMl90IGlhcmcg
X191bnVzZWQpCit7CisjZGVmaW5lCURPVDExUkFURShpeCkJKHJ0LT5pbmZvW2l4XS5kb3QxMVJh
dGUgJiBJRUVFODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCU1DUyhpeCkJCShydC0+aW5mb1tpeF0u
ZG90MTFSYXRlIHwgSUVFRTgwMjExX1JBVEVfTUNTKQorI2RlZmluZQlSQVRFKGl4KQkoRE9UMTFS
QVRFKGl4KSAvIDIpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwlz
dHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJc3RydWN0
IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsKKwljb25zdCBzdHJ1
Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFw
LT5pdl9pYy0+aWNfY3VyY2hhbik7CisJCisJaW50IHJpeCwgbXJyLCBiZXN0X3JpeCwgY2hhbmdl
X3JhdGVzOworCXVuc2lnbmVkIGF2ZXJhZ2VfdHhfdGltZTsKKwkKKwlzaXplX3QgZnJhbWVMZW4g
PSAoc2l6ZV90KWlhcmc7CisJY29uc3QgaW50IHNpemVfYmluID0gc2l6ZV90b19iaW4oZnJhbWVM
ZW4pOworCisJc2FtcGxlX3VwZGF0ZV9zdGF0aWNfcml4KG5pKTsKKworCWlmIChzYW4tPnN0YXRp
Y19yaXggIT0gLTEpIHsKKwkJcml4ID0gc2FuLT5zdGF0aWNfcml4OworCQlnb3RvIGRvbmU7CisJ
fQorCisJaWYgKElFRUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9NUlIodmFwKSkKKwkJbXJyID0gMTsK
KwlpZiAoISBJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJSUFJPVCh2YXApKQorCQltcnIgPSAw
OworCisJYmVzdF9yaXggPSBwaWNrX2Jlc3RfcmF0ZShuaSwgcnQsIHNpemVfYmluLCAhbXJyKTsK
KwlpZiAoYmVzdF9yaXggPj0gMCkgeworCQlhdmVyYWdlX3R4X3RpbWUgPSBzYW4tPnN0YXRzW3Np
emVfYmluXVtiZXN0X3JpeF0uYXZlcmFnZV90eF90aW1lOworCX0gZWxzZSB7CisJCWF2ZXJhZ2Vf
dHhfdGltZSA9IDA7CisJfQorCisJLyoKKwkgKiBMaW1pdCB0aGUgdGltZSBtZWFzdXJpbmcgdGhl
IHBlcmZvcm1hbmNlIG9mIG90aGVyIHR4CisJICogcmF0ZXMgdG8gc2FtcGxlX3JhdGUlIG9mIHRo
ZSB0b3RhbCB0cmFuc21pc3Npb24gdGltZS4KKwkgKi8KKwlpZiAoc2FuLT5zYW1wbGVfdHRbc2l6
ZV9iaW5dIDwgYXZlcmFnZV90eF90aW1lICogKHNhbi0+cGFja2V0c19zaW5jZV9zYW1wbGVbc2l6
ZV9iaW5dICoKKwkJc2FtcGxlLT5zYW1wbGVfcmF0ZS8xMDApKSB7CisJCXJpeCA9IHBpY2tfc2Ft
cGxlX3JhdGUobmksIHJ0LCBzaXplX2Jpbik7CisJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgw
MjExX01TR19SQVRFQ1RMLAorCQkgICAgICZuaSwgImF0dCAlZCBzYW1wbGVfdHQgJWQgc2l6ZSAl
dSBzYW1wbGUgcmF0ZSAlZCAlcyBjdXJyZW50IHJhdGUgJWQgJXMiLAorCQkgICAgIGF2ZXJhZ2Vf
dHhfdGltZSwKKwkJICAgICBzYW4tPnNhbXBsZV90dFtzaXplX2Jpbl0sCisJCSAgICAgYmluX3Rv
X3NpemUoc2l6ZV9iaW4pLAorCQkgICAgIGRvdDExcmF0ZShydCwgcml4KSwKKwkJICAgICBkb3Qx
MXJhdGVfbGFiZWwocnQsIHJpeCksCisJCSAgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmN1cnJlbnRf
cml4W3NpemVfYmluXSksCisJCSAgICAgZG90MTFyYXRlX2xhYmVsKHJ0LCBzYW4tPmN1cnJlbnRf
cml4W3NpemVfYmluXSkpOworCQlpZiAocml4ICE9IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5d
KSB7CisJCQlzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSByaXg7CisJCX0gZWxz
ZSB7CisJCQlzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSAtMTsKKwkJfQorCQlz
YW4tPnBhY2tldHNfc2luY2Vfc2FtcGxlW3NpemVfYmluXSA9IDA7CisJfSBlbHNlIHsKKwkJY2hh
bmdlX3JhdGVzID0gMDsKKwkJaWYgKCFzYW4tPnBhY2tldHNfc2VudFtzaXplX2Jpbl0gfHwgYmVz
dF9yaXggPT0gLTEpIHsKKwkJCS8qIG5vIHBhY2tldCBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxs
eSB5ZXQgKi8KKwkJCWNoYW5nZV9yYXRlcyA9IDE7CisJCQlpZiAobmktPm5pX2ZsYWdzICYgSUVF
RTgwMjExX05PREVfSFQpCisJCQkJYmVzdF9yaXggPSBzYW1wbGVfcGlja19zZWVkX3JhdGVfaHQo
bmksIGZyYW1lTGVuKTsKKwkJCWVsc2UKKwkJCQliZXN0X3JpeCA9IHNhbXBsZV9waWNrX3NlZWRf
cmF0ZV9sZWdhY3kobmksIGZyYW1lTGVuKTsKKwkJfSBlbHNlIGlmIChzYW4tPnBhY2tldHNfc2Vu
dFtzaXplX2Jpbl0gPCAyMCkgeworCQkJLyogbGV0IHRoZSBiaXQtcmF0ZSBzd2l0Y2ggcXVpY2ts
eSBkdXJpbmcgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCQlJRUVFODAyMTFfTk9URSh2YXAs
CisJCQkgICAgSUVFRTgwMjExX01TR19SQVRFQ1RMLCAmbmksCisJCQkgICAgIiVzOiBzd2l0Y2hp
bmcgcXVpY2tseS4uIiwgX19mdW5jX18pOworCQkJY2hhbmdlX3JhdGVzID0gMTsKKwkJfSBlbHNl
IGlmICh0aWNrcyAtIHNhbXBsZS0+c2FtcGxlX21pbl9zd2l0Y2ggPiBzYW4tPnRpY2tzX3NpbmNl
X3N3aXRjaFtzaXplX2Jpbl0pIHsKKwkJCS8qIG1pbl9zd2l0Y2ggc2Vjb25kcyBoYXZlIGdvbmUg
YnkgKi8KKwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwKKwkJCSAgICBJRUVFODAyMTFfTVNHX1JBVEVD
VEwsICZuaSwKKwkJCSAgICAiJXM6IG1pbl9zd2l0Y2ggJWQgPiB0aWNrc19zaW5jZV9zd2l0Y2gg
JWQuLiIsCisJCQkgICAgX19mdW5jX18sIHRpY2tzIC0gc2FtcGxlLT5zYW1wbGVfbWluX3N3aXRj
aCwgc2FuLT50aWNrc19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dKTsKKwkJCWNoYW5nZV9yYXRlcyA9
IDE7CisJCX0gZWxzZSBpZiAoKCEgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkg
JiYKKwkJICAgICgyKmF2ZXJhZ2VfdHhfdGltZSA8IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Nhbi0+
Y3VycmVudF9yaXhbc2l6ZV9iaW5dXS5hdmVyYWdlX3R4X3RpbWUpKSB7CisJCQkvKiB0aGUgY3Vy
cmVudCBiaXQtcmF0ZSBpcyB0d2ljZSBhcyBzbG93IGFzIHRoZSBiZXN0IG9uZSAqLworCQkJSUVF
RTgwMjExX05PVEUodmFwLAorCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgJm5pLAorCQkJ
ICAgICIlczogMnggYXR0ICg9ICVkKSA8IGN1cl9yaXggYXR0ICVkIiwKKwkJCSAgICBfX2Z1bmNf
XywKKwkJCSAgICAyICogYXZlcmFnZV90eF90aW1lLCBzYW4tPnN0YXRzW3NpemVfYmluXVtzYW4t
PmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1lKTsKKwkJCWNoYW5nZV9yYXRl
cyA9IDE7CisJCX0gZWxzZSBpZiAoKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkg
eworCQkJaW50IGN1cl9yaXggPSBzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXTsKKwkJCWludCBj
dXJfYXR0ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bY3VyX3JpeF0uYXZlcmFnZV90eF90aW1lOwor
CQkJLyoKKwkJCSAqIElmIHRoZSBub2RlIGlzIEhULCB1cGdyYWRlIGl0IGlmIHRoZSBNQ1MgcmF0
ZSBpcworCQkJICogaGlnaGVyIGFuZCB0aGUgYXZlcmFnZSB0eCB0aW1lIGlzIHdpdGhpbiAyMCUg
b2YKKwkJCSAqIHRoZSBjdXJyZW50IHJhdGUuIEl0IGNhbiBmYWlsIGEgbGl0dGxlLgorCQkJICoK
KwkJCSAqIFRoaXMgaXMgbGlrZWx5IG5vdCBvcHRpbWFsIQorCQkJICovCisjaWYgMAorCQkJcHJp
bnRmKCJjdXIgcml4L2F0dCAleC8lZCwgYmVzdCByaXgvYXR0ICV4LyVkXG4iLAorCQkJICAgIE1D
UyhjdXJfcml4KSwgY3VyX2F0dCwgTUNTKGJlc3Rfcml4KSwgYXZlcmFnZV90eF90aW1lKTsKKyNl
bmRpZgorCQkJaWYgKChNQ1MoYmVzdF9yaXgpID4gTUNTKGN1cl9yaXgpKSAmJgorCQkJICAgIChh
dmVyYWdlX3R4X3RpbWUgKiA4KSA8PSAoY3VyX2F0dCAqIDEwKSkgeworCQkJCUlFRUU4MDIxMV9O
T1RFKHZhcCwKKwkJCQkgICAgSUVFRTgwMjExX01TR19SQVRFQ1RMLCAmbmksCisJCQkJICAgICIl
czogSFQ6IGJlc3Rfcml4IDB4JWQgPiBjdXJfcml4IDB4JXgsIGF2ZXJhZ2VfdHhfdGltZSAlZCwg
Y3VyX2F0dCAlZCIsCisJCQkJICAgIF9fZnVuY19fLAorCQkJCSAgICBNQ1MoYmVzdF9yaXgpLCBN
Q1MoY3VyX3JpeCksIGF2ZXJhZ2VfdHhfdGltZSwgY3VyX2F0dCk7CisJCQkJY2hhbmdlX3JhdGVz
ID0gMTsKKwkJCX0KKwkJfQorCisJCXNhbi0+cGFja2V0c19zaW5jZV9zYW1wbGVbc2l6ZV9iaW5d
Kys7CisJCQorCQlpZiAoY2hhbmdlX3JhdGVzKSB7CisJCQlpZiAoYmVzdF9yaXggIT0gc2FuLT5j
dXJyZW50X3JpeFtzaXplX2Jpbl0pIHsKKwkJCQlJRUVFODAyMTFfTk9URSh2YXAsCisJCQkJICAg
IElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJCQkgICAgJm5pLAorIiVzOiBzaXplICVkIHN3aXRj
aCByYXRlICVkICglZC8lZCkgLT4gJWQgKCVkLyVkKSBhZnRlciAlZCBwYWNrZXRzIG1yciAlZCIs
CisJCQkJICAgIF9fZnVuY19fLAorCQkJCSAgICBiaW5fdG9fc2l6ZShzaXplX2JpbiksCisJCQkJ
ICAgIFJBVEUoc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl0pLAorCQkJCSAgICBzYW4tPnN0YXRz
W3NpemVfYmluXVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1lLAor
CQkJCSAgICBzYW4tPnN0YXRzW3NpemVfYmluXVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0u
cGVyZmVjdF90eF90aW1lLAorCQkJCSAgICBSQVRFKGJlc3Rfcml4KSwKKwkJCQkgICAgc2FuLT5z
dGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLmF2ZXJhZ2VfdHhfdGltZSwKKwkJCQkgICAgc2FuLT5z
dGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLnBlcmZlY3RfdHhfdGltZSwKKwkJCQkgICAgc2FuLT5w
YWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0sCisJCQkJICAgIG1ycik7CisJCQl9CisJCQlz
YW4tPnBhY2tldHNfc2luY2Vfc3dpdGNoW3NpemVfYmluXSA9IDA7CisJCQlzYW4tPmN1cnJlbnRf
cml4W3NpemVfYmluXSA9IGJlc3Rfcml4OworCQkJc2FuLT50aWNrc19zaW5jZV9zd2l0Y2hbc2l6
ZV9iaW5dID0gdGlja3M7CisJCQkvKiAKKwkJCSAqIFNldCB0aGUgdmlzaWJsZSB0eHJhdGUgZm9y
IHRoaXMgbm9kZS4KKwkJCSAqLworCQkJbmktPm5pX3R4cmF0ZSA9IGRvdDExcmF0ZShydCwgYmVz
dF9yaXgpOworCQl9CisJCXJpeCA9IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dOworCQlzYW4t
PnBhY2tldHNfc2luY2Vfc3dpdGNoW3NpemVfYmluXSsrOworCX0KKwkvLyAqdHJ5MCA9IG1yciA/
IHNhbi0+c2NoZWRbcml4XS50MCA6IEFUSF9UWE1BWFRSWTsKK2RvbmU6CisKKwkvKgorCSAqIFRo
aXMgYnVnIHRvdGFsbHkgc3Vja3MgYW5kIHNob3VsZCBiZSBmaXhlZC4KKwkgKgorCSAqIEZvciBu
b3cgdGhvdWdoLCBsZXQncyBub3QgcGFuaWMsIHNvIHdlIGNhbiBzdGFydCB0byBmaWd1cmUKKwkg
KiBvdXQgaG93IHRvIGJldHRlciByZXByb2R1Y2UgaXQuCisJICovCisJaWYgKHJpeCA8IDAgfHwg
cml4ID49IHJ0LT5yYXRlQ291bnQpIHsKKwkJcHJpbnRmKCIlczogRVJST1I6IHJpeCAlZCBvdXQg
b2YgYm91bmRzIChyYXRlQ291bnQ9JWQpXG4iLAorCQkgICAgX19mdW5jX18sCisJCSAgICByaXgs
CisJCSAgICBydC0+cmF0ZUNvdW50KTsKKwkJICAgIHJpeCA9IDA7CS8qIFhYWCBqdXN0IGRlZmF1
bHQgZm9yIG5vdyAqLworCX0KKwlLQVNTRVJUKHJpeCA+PSAwICYmIHJpeCA8IHJ0LT5yYXRlQ291
bnQsICgicml4IGlzICVkIiwgcml4KSk7CisKKwkvLyAqcml4MCA9IHJpeDsKKwkvLyAqdHhyYXRl
ID0gcnQtPmluZm9bcml4XS5yYXRlQ29kZQorCS8vIAl8IChzaG9ydFByZWFtYmxlID8gcnQtPmlu
Zm9bcml4XS5zaG9ydFByZWFtYmxlIDogMCk7CisJc2FuLT5wYWNrZXRzX3NlbnRbc2l6ZV9iaW5d
Kys7CisKKwlyZXR1cm4gcml4OworI3VuZGVmIERPVDExUkFURQorI3VuZGVmIE1DUworI3VuZGVm
IFJBVEUKK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX25v
ZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCit7CisJc3RydWN0IGll
ZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCXVpbnQ4X3Qgcml4MCA9
IHNhbXBsZV9yYXRlKG5pLCBOVUxMLCAwKTsKKwljb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSAqc2No
ZWQgPSAmc2FuLT5zY2hlZFtyaXgwXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMg
PSByY19pbmZvLT5pcmlfcmM7CisKKwlLQVNTRVJUKHJpeDAgPT0gc2NoZWQtPnIwLCAoInJpeDAg
KCV4KSAhPSBzY2hlZC0+cjAgKCV4KSFcbiIsCisJICAgIHJpeDAsIHNjaGVkLT5yMCkpOworCS8q
IFhYWCAqLworCXJjWzBdLmZsYWdzID0gcmNbMV0uZmxhZ3MgPSByY1syXS5mbGFncyA9IHJjWzNd
LmZsYWdzID0gMDsKKworCXJjWzBdLnJpeCA9IHNjaGVkLT5yMDsKKwlyY1sxXS5yaXggPSBzY2hl
ZC0+cjE7CisJcmNbMl0ucml4ID0gc2NoZWQtPnIyOworCXJjWzNdLnJpeCA9IHNjaGVkLT5yMzsK
KworCXJjWzBdLnRyaWVzID0gc2NoZWQtPnQwOworCXJjWzFdLnRyaWVzID0gc2NoZWQtPnQxOwor
CXJjWzJdLnRyaWVzID0gc2NoZWQtPnQyOworCXJjWzNdLnRyaWVzID0gc2NoZWQtPnQzOworfQor
CitzdGF0aWMgdm9pZAordXBkYXRlX3N0YXRzKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZh
cCwKKyAgICAJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAorCQkgIGludCBmcmFt
ZV9zaXplLAorCQkgIGludCByaXgwLCBpbnQgdHJpZXMwLAorCQkgIGludCByaXgxLCBpbnQgdHJp
ZXMxLAorCQkgIGludCByaXgyLCBpbnQgdHJpZXMyLAorCQkgIGludCByaXgzLCBpbnQgdHJpZXMz
LAorCQkgIGludCBzaG9ydF90cmllcywgaW50IHRyaWVzLAorCQkgIGludCBuZnJhbWVzLCBpbnQg
bmJhZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0
bHM7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsK
KworCWNvbnN0IGludCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lX3NpemUpOworCWNvbnN0
IGludCBzaXplID0gYmluX3RvX3NpemUoc2l6ZV9iaW4pOworCisJaW50IGlzX2h0NDAgPSBpZWVl
ODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MCh2YXAsIG5pKTsKKwlpbnQgdHQsIHRyaWVzX3NvX2Zh
cjsKKwlpbnQgcGN0OworCisJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCByaXgwKSkKKwkJcmV0
dXJuOworCXR0ID0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAsIHNpemUsIHJpeDAsIHNo
b3J0X3RyaWVzLAorCQlNSU4odHJpZXMwLCB0cmllcykgLSAxLCBpc19odDQwKTsKKwl0cmllc19z
b19mYXIgPSB0cmllczA7CisKKwlpZiAodHJpZXMxICYmIHRyaWVzX3NvX2ZhciA8IHRyaWVzKSB7
CisJCWlmICghSVNfUkFURV9ERUZJTkVEKHNhbiwgcml4MSkpCisJCQlyZXR1cm47CisJCXR0ICs9
IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCByaXgxLCBzaG9ydF90cmllcywK
KwkJCU1JTih0cmllczEgKyB0cmllc19zb19mYXIsIHRyaWVzKSAtIHRyaWVzX3NvX2ZhciAtIDEs
IGlzX2h0NDApOworCQl0cmllc19zb19mYXIgKz0gdHJpZXMxOworCX0KKworCWlmICh0cmllczIg
JiYgdHJpZXNfc29fZmFyIDwgdHJpZXMpIHsKKwkJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCBy
aXgyKSkKKwkJCXJldHVybjsKKwkJdHQgKz0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAs
IHNpemUsIHJpeDIsIHNob3J0X3RyaWVzLAorCQkJTUlOKHRyaWVzMiArIHRyaWVzX3NvX2Zhciwg
dHJpZXMpIC0gdHJpZXNfc29fZmFyIC0gMSwgaXNfaHQ0MCk7CisJCXRyaWVzX3NvX2ZhciArPSB0
cmllczI7CisJfQorCisJaWYgKHRyaWVzMyAmJiB0cmllc19zb19mYXIgPCB0cmllcykgeworCQlp
ZiAoIUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeDMpKQorCQkJcmV0dXJuOworCQl0dCArPSBjYWxj
X3VzZWNzX3VuaWNhc3RfcGFja2V0KHZhcCwgc2l6ZSwgcml4Mywgc2hvcnRfdHJpZXMsCisJCQlN
SU4odHJpZXMzICsgdHJpZXNfc29fZmFyLCB0cmllcykgLSB0cmllc19zb19mYXIgLSAxLCBpc19o
dDQwKTsKKwl9CisKKwlpZiAoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0udG90YWxfcGFja2V0
cyA8IHNhbXBsZS0+c2FucGxlX3Ntb290aGluZ19taW5wYWNrZXRzKSB7CisJCS8qIGp1c3QgYXZl
cmFnZSB0aGUgZmlyc3QgZmV3IHBhY2tldHMgKi8KKwkJaW50IGF2Z190eCA9IHNhbi0+c3RhdHNb
c2l6ZV9iaW5dW3JpeDBdLmF2ZXJhZ2VfdHhfdGltZTsKKwkJaW50IHBhY2tldHMgPSBzYW4tPnN0
YXRzW3NpemVfYmluXVtyaXgwXS50b3RhbF9wYWNrZXRzOworCQlzYW4tPnN0YXRzW3NpemVfYmlu
XVtyaXgwXS5hdmVyYWdlX3R4X3RpbWUgPSAodHQrKGF2Z190eCpwYWNrZXRzKSkvKHBhY2tldHMr
bmZyYW1lcyk7CisJfSBlbHNlIHsKKwkJLyogdXNlIGEgZXdtYSAqLworCQlzYW4tPnN0YXRzW3Np
emVfYmluXVtyaXgwXS5hdmVyYWdlX3R4X3RpbWUgPSAKKwkJCSgoc2FuLT5zdGF0c1tzaXplX2Jp
bl1bcml4MF0uYXZlcmFnZV90eF90aW1lICogc2FtcGxlLT5zYW5wbGVfc21vb3RoaW5nX3JhdGUp
ICsgCisJCQkgKHR0ICogKDEwMCAtIHNhbXBsZS0+c2FucGxlX3Ntb290aGluZ19yYXRlKSkpIC8g
MTAwOworCX0KKwkKKwkvKgorCSAqIFhYWCBEb24ndCBtYXJrIHRoZSBoaWdoZXIgYml0IHJhdGVz
IGFzIGFsc28gaGF2aW5nIGZhaWxlZDsgYXMgdGhpcworCSAqIHVuZm9ydHVuYXRlbHkgc3RvcHMg
dGhvc2UgcmF0ZXMgZnJvbSBiZWluZyB0YXN0ZWQgd2hlbiB0cnlpbmcgdG8KKwkgKiBUWC4gVGhp
cyBoYXBwZW5zIHdpdGggMTFuIGFnZ3JlZ2F0aW9uLgorCSAqLworCWlmIChuZnJhbWVzID09IG5i
YWQpIHsKKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyAr
PSBuYmFkOworCisJfSBlbHNlIHsKKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ucGFja2V0
c19hY2tlZCArPSAobmZyYW1lcyAtIG5iYWQpOworCQlzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgw
XS5zdWNjZXNzaXZlX2ZhaWx1cmVzID0gMDsKKwl9CisJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4
MF0udHJpZXMgKz0gdHJpZXM7CisJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ubGFzdF90eCA9
IHRpY2tzOworCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tldHMgKz0gbmZy
YW1lczsKKworCS8qIHVwZGF0ZSBFV01BIGZvciB0aGlzIHJpeCAqLworCisJLyogQ2FsY3VsYXRl
IHBlcmNlbnRhZ2UgYmFzZWQgb24gY3VycmVudCByYXRlICovCisJaWYgKG5mcmFtZXMgPT0gMCkK
KwkJbmZyYW1lcyA9IG5iYWQgPSAxOworCXBjdCA9ICgobmZyYW1lcyAtIG5iYWQpICogMTAwMCkg
LyBuZnJhbWVzOworCisJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tl
dHMgPAorCSAgICBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfbWlucGFja2V0cykgeworCQkvKiBq
dXN0IGF2ZXJhZ2UgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCWludCBhX3BjdCA9IChzYW4t
PnN0YXRzW3NpemVfYmluXVtyaXgwXS5wYWNrZXRzX2Fja2VkICogMTAwMCkgLworCQkgICAgKHNh
bi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tldHMpOworCQlzYW4tPnN0YXRzW3Np
emVfYmluXVtyaXgwXS5ld21hX3BjdCA9IGFfcGN0OworCX0gZWxzZSB7CisJCS8qIHVzZSBhIGV3
bWEgKi8KKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgPQorCQkJKChzYW4t
PnN0YXRzW3NpemVfYmluXVtyaXgwXS5ld21hX3BjdCAqIHNhbXBsZS0+c2FucGxlX3Ntb290aGlu
Z19yYXRlKSArCisJCQkgKHBjdCAqICgxMDAgLSBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfcmF0
ZSkpKSAvIDEwMDsKKwl9CisKKwlpZiAocml4MCA9PSBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtz
aXplX2Jpbl0pIHsKKwkJc2FuLT5zYW1wbGVfdHRbc2l6ZV9iaW5dID0gdHQ7CisJCXNhbi0+Y3Vy
cmVudF9zYW1wbGVfcml4W3NpemVfYmluXSA9IC0xOworCX0KK30KKworc3RhdGljIHZvaWQKK3Nh
bXBsZV90eF9jb21wbGV0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisgICAgY29u
c3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgaW50IG9rLAorICAgIHZvaWQgKmFyZzEsIHZv
aWQgKmFyZzIpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5p
X3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqcnQgPSBpZWVlODAy
MTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJjaGFuKTsKKworCS8qIFhYWCBuZWVk
IHRvIGNoYW5nZSBhcmcyIHRvIHBvaW50ZXIgb2YgaWVlZTgwMjExX3JjX2luZm8gKi8KKwlzdHJ1
Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZv
KilhcmcyOworCisJaW50IGZpbmFsX3JpeCwgc2hvcnRfdHJpZXMsIGxvbmdfdHJpZXM7CisJaW50
IG5mcmFtZXMsIG5iYWQ7CisJaW50IGZyYW1lX3NpemUsIG1ycjsKKworCS8qIHVwZGF0ZSBwZXIg
dmFwIHN0YXRpc3RpY3MgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF91cGRhdGVfc3RhdCh2YXAsIHJj
X2luZm8pOworCisJZmluYWxfcml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFtyY19pbmZvLT5pcmlf
dHhyYXRlXTsKKwlzaG9ydF90cmllcyA9IHJjX2luZm8tPmlyaV9zaG9ydHJldHJ5OworCS8qIFhY
WCB3aHkgcGx1cyAxIGhlcmU/ICovCisJbG9uZ190cmllcyA9IHJjX2luZm8tPmlyaV9sb25ncmV0
cnkgKyAxOworCisJbmZyYW1lcyA9IHJjX2luZm8tPmlyaV90eGNudDsKKwluYmFkID0gcmNfaW5m
by0+aXJpX2ZhaWxjbnQ7CisKKwlmcmFtZV9zaXplID0gcmNfaW5mby0+aXJpX2ZyYW1lbGVuOwor
CW1yciA9IDA7CisKKwlpZiAobmZyYW1lcyA9PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAo
ZnJhbWVfc2l6ZSA9PSAwKQkJICAgIC8qIE5COiBzaG91bGQgbm90IGhhcHBlbiAqLworCQlmcmFt
ZV9zaXplID0gMTUwMDsKKworCWlmIChzYW4tPnJhdGVtYXNrID09IDApIHsKKwkJcmV0dXJuOwor
CX0KKwkKKwlpZiAoSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUih2YXApKQorCQltcnIgPSAx
OworCS8qIFhYWCBjaGVjayBIVCBwcm90bW9kZSB0b28gKi8KKwlpZiAobXJyICYmICFJRUVFODAy
MTFfUkFURUNUTF9IQVNDQVBfTVJSUFJPVCh2YXApKQorCQltcnIgPSAwOworCQorCWlmICghbXJy
IHx8IHJjX2luZm8tPmlyaV9maW5hbHRzaSA9PSAwKSB7CisJCWlmICghSVNfUkFURV9ERUZJTkVE
KHNhbiwgZmluYWxfcml4KSkgeworCQkJcmV0dXJuOworCQl9CisJCS8qCisJCSAqIE9ubHkgb25l
IHJhdGUgd2FzIHVzZWQ7IG9wdGltaXplIHdvcmsuCisJCSAqLworCQl1cGRhdGVfc3RhdHModmFw
LCBuaSwgZnJhbWVfc2l6ZSwgCisJCQkgICAgIGZpbmFsX3JpeCwgbG9uZ190cmllcywKKwkJCSAg
ICAgMCwgMCwKKwkJCSAgICAgMCwgMCwKKwkJCSAgICAgMCwgMCwKKwkJCSAgICAgc2hvcnRfdHJp
ZXMsIGxvbmdfdHJpZXMsCisJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCisJfSBlbHNlIHsKKwkJ
aW50IGZpbmFsVFNJZHggPSByY19pbmZvLT5pcmlfZmluYWx0c2k7CisJCWludCBpOworCisJCS8q
CisJCSAqIE5COiBzZXJpZXMgPiAwIGFyZSBub3QgcGVuYWxpemVkIGZvciBmYWlsdXJlCisJCSAq
IGJhc2VkIG9uIHRoZSB0cnkgY291bnRzIHVuZGVyIHRoZSBhc3N1bXB0aW9uCisJCSAqIHRoYXQg
bG9zc2VzIGFyZSBvZnRlbiBidXJzdHkgYW5kIHNpbmNlIHdlCisJCSAqIHNhbXBsZSBoaWdoZXIg
cmF0ZXMgMSB0cnkgYXQgYSB0aW1lIGRvaW5nIHNvCisJCSAqIG1heSB1bmZhaXJseSBwZW5hbGl6
ZSB0aGVtLgorCQkgKi8KKwkJaWYgKHJjWzBdLnRyaWVzKSB7CisJCQl1cGRhdGVfc3RhdHModmFw
LCBuaSwgZnJhbWVfc2l6ZSwKKwkJCQkgICAgIHJjWzBdLnJpeCwgcmNbMF0udHJpZXMsCisJCQkJ
ICAgICByY1sxXS5yaXgsIHJjWzFdLnRyaWVzLAorCQkJCSAgICAgcmNbMl0ucml4LCByY1syXS50
cmllcywKKwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICBzaG9ydF90
cmllcywgbG9uZ190cmllcywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCQkJbG9uZ190cmll
cyAtPSByY1swXS50cmllczsKKwkJfQorCQkKKwkJaWYgKHJjWzFdLnRyaWVzICYmIGZpbmFsVFNJ
ZHggPiAwKSB7CisJCQl1cGRhdGVfc3RhdHModmFwLCBuaSwgZnJhbWVfc2l6ZSwKKwkJCQkgICAg
IHJjWzFdLnJpeCwgcmNbMV0udHJpZXMsCisJCQkJICAgICByY1syXS5yaXgsIHJjWzJdLnRyaWVz
LAorCQkJCSAgICAgcmNbM10ucml4LCByY1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJ
ICAgICBzaG9ydF90cmllcywgbG9uZ190cmllcywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOwor
CQkJbG9uZ190cmllcyAtPSByY1sxXS50cmllczsKKwkJfQorCisJCWlmIChyY1syXS50cmllcyAm
JiBmaW5hbFRTSWR4ID4gMSkgeworCQkJdXBkYXRlX3N0YXRzKHZhcCwgbmksIGZyYW1lX3NpemUs
CisJCQkJICAgICByY1syXS5yaXgsIHJjWzJdLnRyaWVzLAorCQkJCSAgICAgcmNbM10ucml4LCBy
Y1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICAwLCAwLAorCQkJCSAgICAgc2hv
cnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAgICBuZnJhbWVzLCBuYmFkKTsKKwkJCWxvbmdf
dHJpZXMgLT0gcmNbMl0udHJpZXM7CisJCX0KKworCQlpZiAocmNbM10udHJpZXMgJiYgZmluYWxU
U0lkeCA+IDIpIHsKKwkJCXVwZGF0ZV9zdGF0cyh2YXAsIG5pLCBmcmFtZV9zaXplLAorCQkJCSAg
ICAgcmNbM10ucml4LCByY1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICAwLCAw
LAorCQkJCSAgICAgMCwgMCwKKwkJCQkgICAgIHNob3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJ
CSAgICAgbmZyYW1lcywgbmJhZCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVf
dHhfdXBkYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgY29uc3Qgc3RydWN0IGll
ZWU4MDIxMV9ub2RlICpuaSwKKyAgICB2b2lkICphcmcxLCB2b2lkICphcmcyLCB2b2lkICphcmcz
KQoreworCS8qIG5vdGhpbmcgaGVyZS4gKi8KK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9zZXRp
bnRlcnZhbChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIGludCBtc2VjcykKK3sKKwlz
dHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2FtcGxlID0gdmFwLT5pdl9yczsKKwlpbnQgdDsKKwor
CWlmIChtc2VjcyA8IDEwMCkKKwkJbXNlY3MgPSAxMDA7CisJdCA9IG1zZWNzX3RvX3RpY2tzKG1z
ZWNzKTsKKwkvKiBpZWVlODAyMTFfc2FtcGxlIGRvZXNuJ3QgaGF2ZSB0aGUgc2FtcGxlX2ludGVy
dmFsIGZpZWxkIGJ5IG5vdyAqLworCS8vIHNhbXBsZS0+c2FtcGxlX2ludGVydmFsID0gKHQgPCAx
KSA/IDEgOiB0OworfQorCitzdGF0aWMgdm9pZAorc2FtcGxlX3N0YXRzKHZvaWQgKmFyZywgc3Ry
dWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBu
aS0+bmlfdmFwOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9y
Y3RsczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjEx
X2dldF9yYXRldGFibGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJdWludDY0X3QgbWFzazsK
KwlpbnQgcml4LCB5OworCisJcHJpbnRmKCJcblslc10gcmVmY250ICVkIHN0YXRpY19yaXggKCVk
ICVzKSByYXRlbWFzayAweCVqeFxuIiwKKwkgICAgZXRoZXJfc3ByaW50ZihuaS0+bmlfbWFjYWRk
ciksIGllZWU4MDIxMV9ub2RlX3JlZmNudChuaSksCisJICAgIGRvdDExcmF0ZShydCwgc2FuLT5z
dGF0aWNfcml4KSwKKwkgICAgZG90MTFyYXRlX2xhYmVsKHJ0LCBzYW4tPnN0YXRpY19yaXgpLAor
CSAgICAodWludG1heF90KXNhbi0+cmF0ZW1hc2spOworCWZvciAoeSA9IDA7IHkgPCBOVU1fUEFD
S0VUX1NJWkVfQklOUzsgeSsrKSB7CisJCXByaW50ZigiWyU0dV0gY3VyIHJpeCAlZCAoJWQgJXMp
IHNpbmNlIHN3aXRjaDogcGFja2V0cyAlZCB0aWNrcyAldVxuIiwKKwkJICAgIGJpbl90b19zaXpl
KHkpLCBzYW4tPmN1cnJlbnRfcml4W3ldLAorCQkgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmN1cnJl
bnRfcml4W3ldKSwKKwkJICAgIGRvdDExcmF0ZV9sYWJlbChydCwgc2FuLT5jdXJyZW50X3JpeFt5
XSksCisJCSAgICBzYW4tPnBhY2tldHNfc2luY2Vfc3dpdGNoW3ldLCBzYW4tPnRpY2tzX3NpbmNl
X3N3aXRjaFt5XSk7CisJCXByaW50ZigiWyU0dV0gbGFzdCBzYW1wbGUgKCVkICVzKSBjdXIgc2Ft
cGxlICglZCAlcykgcGFja2V0cyBzZW50ICVkXG4iLAorCQkgICAgYmluX3RvX3NpemUoeSksCisJ
CSAgICBkb3QxMXJhdGUocnQsIHNhbi0+bGFzdF9zYW1wbGVfcml4W3ldKSwKKwkJICAgIGRvdDEx
cmF0ZV9sYWJlbChydCwgc2FuLT5sYXN0X3NhbXBsZV9yaXhbeV0pLAorCQkgICAgZG90MTFyYXRl
KHJ0LCBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFt5XSksCisJCSAgICBkb3QxMXJhdGVfbGFiZWwo
cnQsIHNhbi0+Y3VycmVudF9zYW1wbGVfcml4W3ldKSwKKwkJICAgIHNhbi0+cGFja2V0c19zZW50
W3ldKTsKKwkJcHJpbnRmKCJbJTR1XSBwYWNrZXRzIHNpbmNlIHNhbXBsZSAlZCBzYW1wbGUgdHQg
JXVcbiIsCisJCSAgICBiaW5fdG9fc2l6ZSh5KSwgc2FuLT5wYWNrZXRzX3NpbmNlX3NhbXBsZVt5
XSwKKwkJICAgIHNhbi0+c2FtcGxlX3R0W3ldKTsKKwl9CisJZm9yIChtYXNrID0gc2FuLT5yYXRl
bWFzaywgcml4ID0gMDsgbWFzayAhPSAwOyBtYXNrID4+PSAxLCByaXgrKykgeworCQlpZiAoKG1h
c2sgJiAxKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQlmb3IgKHkgPSAwOyB5IDwgTlVNX1BBQ0tF
VF9TSVpFX0JJTlM7IHkrKykgeworCQkJaWYgKHNhbi0+c3RhdHNbeV1bcml4XS50b3RhbF9wYWNr
ZXRzID09IDApCisJCQkJY29udGludWU7CisJCQlwcmludGYoIlslMnUgJXM6JTR1XSAlOGp1OiUt
OGp1ICglM2QlJSkgKEVXTUEgJTNkLiUxZCUlKSBUICU4anUgRiAlNGQgYXZnICU1dSBsYXN0ICV1
XG4iLAorCQkJICAgIGRvdDExcmF0ZShydCwgcml4KSwgZG90MTFyYXRlX2xhYmVsKHJ0LCByaXgp
LAorCQkJICAgIGJpbl90b19zaXplKHkpLAorCQkJICAgICh1aW50bWF4X3QpIHNhbi0+c3RhdHNb
eV1bcml4XS50b3RhbF9wYWNrZXRzLAorCQkJICAgICh1aW50bWF4X3QpIHNhbi0+c3RhdHNbeV1b
cml4XS5wYWNrZXRzX2Fja2VkLAorCQkJICAgIChpbnQpICgoc2FuLT5zdGF0c1t5XVtyaXhdLnBh
Y2tldHNfYWNrZWQgKiAxMDBVTEwpIC8KKwkJCSAgICAgc2FuLT5zdGF0c1t5XVtyaXhdLnRvdGFs
X3BhY2tldHMpLAorCQkJICAgIHNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCAvIDEwLAorCQkJ
ICAgIHNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCAlIDEwLAorCQkJICAgICh1aW50bWF4X3Qp
IHNhbi0+c3RhdHNbeV1bcml4XS50cmllcywKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uc3Vj
Y2Vzc2l2ZV9mYWlsdXJlcywKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uYXZlcmFnZV90eF90
aW1lLAorCQkJICAgIHRpY2tzIC0gc2FuLT5zdGF0c1t5XVtyaXhdLmxhc3RfdHgpOworCQl9CisJ
fQorfQorCitzdGF0aWMgaW50CitzYW1wbGVfc3lzY3RsX3N0YXRzKFNZU0NUTF9IQU5ETEVSX0FS
R1MpCit7CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gYXJnMTsKKwlzdHJ1Y3QgaWVlZTgw
MjExY29tICppYyA9IHZhcC0+aXZfaWZwLT5pZl9sMmNvbTsKKwlpbnQgZXJyb3IsIHY7CisKKwl2
ID0gMDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ2LCAwLCByZXEpOworCWlm
IChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZWVlODAyMTFfaXRl
cmF0ZV9ub2RlcygmaWMtPmljX3N0YSwgc2FtcGxlX3N0YXRzLCBOVUxMKTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludAorc2FtcGxlX3N5c2N0bF9zbW9vdGhpbmdfcmF0ZShTWVNDVExfSEFO
RExFUl9BUkdTKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGFyZzE7CisJc3RydWN0
IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHZhcC0+aXZfcnM7CisJaW50IHJhdGUsIGVycm9y
OworCisJcmF0ZSA9IHNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19yYXRlOworCWVycm9yID0gc3lz
Y3RsX2hhbmRsZV9pbnQob2lkcCwgJnJhdGUsIDAsIHJlcSk7CisJaWYgKGVycm9yIHx8ICFyZXEt
Pm5ld3B0cikKKwkJcmV0dXJuIGVycm9yOworCWlmICghKDAgPD0gcmF0ZSAmJiByYXRlIDwgMTAw
KSkKKwkJcmV0dXJuIEVJTlZBTDsKKwlzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfcmF0ZSA9IHJh
dGU7CisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX21pbnBhY2tldHMgPSAxMDAgLyAoMTAwIC0g
cmF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhbXBsZV9zeXNjdGxfc2FtcGxl
X3JhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAg
PSBhcmcxOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3JzOwor
CWludCByYXRlLCBlcnJvcjsKKworCXJhdGUgPSBzYW1wbGUtPnNhbXBsZV9yYXRlOworCWVycm9y
ID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJnJhdGUsIDAsIHJlcSk7CisJaWYgKGVycm9yIHx8
ICFyZXEtPm5ld3B0cikKKwkJcmV0dXJuIGVycm9yOworCWlmICghKDIgPD0gcmF0ZSAmJiByYXRl
IDw9IDEwMCkpCisJCXJldHVybiBFSU5WQUw7CisJc2FtcGxlLT5zYW1wbGVfcmF0ZSA9IHJhdGU7
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfc3lzY3RsYXR0YWNoKHN0cnVj
dCBpZWVlODAyMTF2YXAgKnZhcCwKKyAgICBzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICpjdHgsIHN0
cnVjdCBzeXNjdGxfb2lkICp0cmVlKQoreworCVNZU0NUTF9BRERfUFJPQyhjdHgsIFNZU0NUTF9D
SElMRFJFTih0cmVlKSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfc21vb3RoaW5nX3JhdGUiLCBD
VExUWVBFX0lOVCB8IENUTEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9zbW9v
dGhpbmdfcmF0ZSwgIkkiLAorCSAgICAic2FtcGxlOiBzbW9vdGhpbmcgcmF0ZSBmb3IgYXZnIHR4
IHRpbWUgKCUlKSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIFNZU0NUTF9DSElMRFJFTih0cmVl
KSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfcmF0ZSIsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19S
VywgdmFwLCAwLAorCSAgICBzYW1wbGVfc3lzY3RsX3NhbXBsZV9yYXRlLCAiSSIsCisJICAgICJz
YW1wbGU6IHBlcmNlbnQgYWlyIHRpbWUgZGV2b3RlZCB0byBzYW1wbGluZyBuZXcgcmF0ZXMgKCUl
KSIpOworCS8qIFhYWCBtYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcywgc3RhbGVfZmFpbHVyZV90aW1l
b3V0LCBtaW5fc3dpdGNoICovCisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgU1lTQ1RMX0NISUxEUkVO
KHRyZWUpLCBPSURfQVVUTywKKwkgICAgInNhbXBsZV9zdGF0cyIsIENUTFRZUEVfSU5UIHwgQ1RM
RkxBR19SVywgdmFwLCAwLAorCSAgICBzYW1wbGVfc3lzY3RsX3N0YXRzLCAiSSIsICJzYW1wbGU6
IHByaW50IHN0YXRpc3RpY3MiKTsKK30KSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yY19zYW1w
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmgJKHJldmlz
aW9uIDApCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmgJKHJldmlzaW9uIDI1Njgy
NSkKQEAgLTAsMCArMSwyODcgQEAKKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvYXRoL2F0aF9y
YXRlL3NhbXBsZS9zYW1wbGUuaCAyNDAzODIgMjAxMi0wOC0xNSAwNzoxMDoxMFogYWRyaWFuICQq
LworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBKb2huIEJpY2tldAorICogQ29weXJpZ2h0
IChjKSAyMDEzIENoZW5jaG9uZyBRaW4gPGNjcWluQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5p
bXVtIGEgZGlzY2xhaW1lcgorICogICAgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNj
bGFpbWVyIGJlbG93ICgiRGlzY2xhaW1lciIpIGFuZCBhbnkKKyAqICAgIHJlZGlzdHJpYnV0aW9u
IG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbiBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5CisgKiAg
ICBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIgYmluYXJ5IHJlZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBj
b3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFT
IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTklORlJJ
TkdFTUVOVCwgTUVSQ0hBTlRJQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBM
QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIx
MV9SQVRFQ1RMX1NBTVBMRV9IXworI2RlZmluZSBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExf
U0FNUExFX0hfCisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorCisv
KgorICogZm9yIG5vdywgd2UgdHJhY2sgcGVyZm9ybWFuY2UgZm9yIHRocmVlIGRpZmZlcmVudCBw
YWNrZXQKKyAqIHNpemUgYnVja2V0cworICovCisjZGVmaW5lIE5VTV9QQUNLRVRfU0laRV9CSU5T
IDIKKyNkZWZpbmUJU0FNUExFX01BWFJBVEVTCTY0CQkvKiBOQjogY29ycmVzcG9uZHMgdG8gaGFs
IGluZm9bMzJdICovCisKKy8qCisgKiBSYXRlIGNvbnRyb2wgc2V0dGluZ3MuCisgKi8KK3N0cnVj
dCBpZWVlODAyMTFfc2FtcGxlIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgc2FtcGxlX3N0
YXQ7CisJaW50CXNhbXBsZV9zbW9vdGhpbmdfcmF0ZTsJCQkvKiBld21hIHBlcmNlbnRhZ2UgWzAu
Ljk5XSAqLworCWludAlzYW1wbGVfc21vb3RoaW5nX21pbnBhY2tldHM7CisJaW50CXNhbXBsZV9y
YXRlOwkJCS8qICV0aW1lIHRvIHRyeSBkaWZmZXJlbnQgdHggcmF0ZXMgKi8KKwlpbnQJc2FtcGxl
X21heF9zdWNjZXNzaXZlX2ZhaWx1cmVzOworCWludAlzYW1wbGVfc3RhbGVfZmFpbHVyZV90aW1l
b3V0OwkvKiBob3cgbG9uZyB0byBob25vciBtYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcyAqLworCWlu
dAlzYW1wbGVfbWluX3N3aXRjaDsJCS8qIG1pbiB0aW1lIGJldHdlZW4gcmF0ZSBjaGFuZ2VzICov
CisJaW50CXNhbXBsZV9taW5fZ29vZF9wY3Q7CS8qIG1pbiBnb29kIHBlcmNlbnRhZ2UgZm9yIGEg
cmF0ZSB0byBiZSBjb25zaWRlcmVkICovCit9OworCitzdHJ1Y3QgcmF0ZV9zdGF0cyB7CQorCXVu
c2lnbmVkIGF2ZXJhZ2VfdHhfdGltZTsKKwlpbnQgc3VjY2Vzc2l2ZV9mYWlsdXJlczsKKwl1aW50
NjRfdCB0cmllczsKKwl1aW50NjRfdCB0b3RhbF9wYWNrZXRzOwkvKiBwa3RzIHRvdGFsIHNpbmNl
IGFzc29jICovCisJdWludDY0X3QgcGFja2V0c19hY2tlZDsJLyogcGt0cyBhY2tlZCBzaW5jZSBh
c3NvYyAqLworCWludCBld21hX3BjdDsJLyogRVdNQSBwZXJjZW50YWdlICovCisJdW5zaWduZWQg
cGVyZmVjdF90eF90aW1lOyAvKiB0cmFuc21pdCB0aW1lIGZvciAwIHJldHJpZXMgKi8KKwlpbnQg
bGFzdF90eDsKK307CisKK3N0cnVjdCB0eHNjaGVkdWxlIHsKKwl1aW50OF90CXQwLCByMDsJCS8q
IHNlcmllcyAwOiB0cmllcywgcmF0ZSBjb2RlICovCisJdWludDhfdAl0MSwgcjE7CQkvKiBzZXJp
ZXMgMTogdHJpZXMsIHJhdGUgY29kZSAqLworCXVpbnQ4X3QJdDIsIHIyOwkJLyogc2VyaWVzIDI6
IHRyaWVzLCByYXRlIGNvZGUgKi8KKwl1aW50OF90CXQzLCByMzsJCS8qIHNlcmllcyAzOiB0cmll
cywgcmF0ZSBjb2RlICovCit9OworCisvKgorICogUmF0ZSBjb250cm9sIHN0YXRlIGZvciBhIGdp
dmVuIG5vZGUuCisgKi8KKy8qIFhYWCBjaGFuZ2UgbmFtaW5nIGNvbnZlcnNpb24/ICovCitzdHJ1
Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2Fu
X3NhbXBsZTsvKiBiYWNrcG9pbnRlciAqLworCWludCBzdGF0aWNfcml4OwkJCS8qIHJhdGUgaW5k
ZXggb2YgZml4ZWQgdHggcmF0ZSAqLworCXVpbnQ2NF90IHJhdGVtYXNrOwkJLyogYml0IG1hc2sg
b2YgdmFsaWQgcmF0ZSBpbmRpY2VzICovCisJY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgKnNjaGVk
OwkvKiB0eCBzY2hlZHVsZSB0YWJsZSAqLworCisJc3RydWN0IHJhdGVfc3RhdHMgc3RhdHNbTlVN
X1BBQ0tFVF9TSVpFX0JJTlNdW1NBTVBMRV9NQVhSQVRFU107CisJaW50IGxhc3Rfc2FtcGxlX3Jp
eFtOVU1fUEFDS0VUX1NJWkVfQklOU107CisKKwlpbnQgY3VycmVudF9zYW1wbGVfcml4W05VTV9Q
QUNLRVRfU0laRV9CSU5TXTsgICAgICAgCisJaW50IHBhY2tldHNfc2VudFtOVU1fUEFDS0VUX1NJ
WkVfQklOU107CisKKwlpbnQgY3VycmVudF9yaXhbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCWlu
dCBwYWNrZXRzX3NpbmNlX3N3aXRjaFtOVU1fUEFDS0VUX1NJWkVfQklOU107CisJdW5zaWduZWQg
dGlja3Nfc2luY2Vfc3dpdGNoW05VTV9QQUNLRVRfU0laRV9CSU5TXTsKKworCWludCBwYWNrZXRz
X3NpbmNlX3NhbXBsZVtOVU1fUEFDS0VUX1NJWkVfQklOU107CisJdW5zaWduZWQgc2FtcGxlX3R0
W05VTV9QQUNLRVRfU0laRV9CSU5TXTsKK307CisKKyNkZWZpbmUJSVNfUkFURV9ERUZJTkVEKHNh
biwgcml4KQkoKChzYW4pLT5yYXRlbWFzayAmICgxPDwocml4KSkpICE9IDApCisKKyNpZm5kZWYg
TUlOCisjZGVmaW5lCU1JTihhLGIpCSgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZW5kaWYKKyNp
Zm5kZWYgTUFYCisjZGVmaW5lCU1BWChhLGIpCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZW5k
aWYKKworc3RhdGljIGNvbnN0IGludCBwYWNrZXRfc2l6ZV9iaW5zW05VTV9QQUNLRVRfU0laRV9C
SU5TXSAgPSB7IDI1MCwgMTYwMCB9OworCitzdGF0aWMgaW5saW5lIGludAorYmluX3RvX3NpemUo
aW50IGluZGV4KQoreworCXJldHVybiBwYWNrZXRfc2l6ZV9iaW5zW2luZGV4XTsKK30KKworc3Rh
dGljIGlubGluZSBpbnQKK3NpemVfdG9fYmluKGludCBzaXplKSAKK3sKKyNpZiBOVU1fUEFDS0VU
X1NJWkVfQklOUyA+IDEKKwlpZiAoc2l6ZSA8PSBwYWNrZXRfc2l6ZV9iaW5zWzBdKQorCQlyZXR1
cm4gMDsKKyNlbmRpZgorI2lmIE5VTV9QQUNLRVRfU0laRV9CSU5TID4gMgorCWlmIChzaXplIDw9
IHBhY2tldF9zaXplX2JpbnNbMV0pCisJCXJldHVybiAxOworI2VuZGlmCisjaWYgTlVNX1BBQ0tF
VF9TSVpFX0JJTlMgPiAzCisJaWYgKHNpemUgPD0gcGFja2V0X3NpemVfYmluc1syXSkKKwkJcmV0
dXJuIDI7CisjZW5kaWYKKyNpZiBOVU1fUEFDS0VUX1NJWkVfQklOUyA+IDQKKyNlcnJvciAiYWRk
IHN1cHBvcnQgZm9yIG1vcmUgcGFja2V0IHNpemVzIgorI2VuZGlmCisJcmV0dXJuIE5VTV9QQUNL
RVRfU0laRV9CSU5TLTE7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBzYW1wbGVfcGt0X3R4dGltZShj
b25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LAorCXVpbnQzMl90IGZyYW1lTGVu
LCB1aW50MTZfdCByYXRlaXgsIGludCBpc2h0NDAsIGludCBpc1Nob3J0UHJlYW1ibGUpCit7CisJ
dWludDhfdCByYzsKKyAgICBpbnQgbnVtU3RyZWFtczsKKworICAgIHJjID0gcnQtPmluZm9bcmF0
ZWl4XS5yYXRlQ29kZTsKKworICAgIC8qIExlZ2FjeSByYXRlPyBSZXR1cm4gdGhlIG9sZCB3YXkg
Ki8KKyAgICBpZiAoISBJU19IVF9SQVRFKHJjKSkKKyAgICAJcmV0dXJuIGllZWU4MDIxMV9jb21w
dXRlX2R1cmF0aW9uKHJ0LCBmcmFtZUxlbiwgcmF0ZWl4LCBpc1Nob3J0UHJlYW1ibGUpOworCisg
ICAgLyogMTFuIGZyYW1lIC0gZXh0cmFjdCBvdXQgdGhlIG51bWJlciBvZiBzcGF0aWFsIHN0cmVh
bXMgKi8KKyAgICBudW1TdHJlYW1zID0gSFRfUkNfMl9TVFJFQU1TKHJjKTsKKyAgICBLQVNTRVJU
KG51bVN0cmVhbXMgPiAwICYmIG51bVN0cmVhbXMgPD0gNCwKKyAgICAgICAgKCJudW1iZXIgb2Yg
c3BhdGlhbCBzdHJlYW1zIG5lZWRzIHRvIGJlIDEuLjM6IE1DUyByYXRlIDB4JXghIiwKKyAgICAg
ICAgcmF0ZWl4KSk7CisKKyAgICByZXR1cm4gaWVlZTgwMjExX2NvbXB1dGVfZHVyYXRpb25faHQo
ZnJhbWVMZW4sIHJjLCBudW1TdHJlYW1zLCBpc2h0NDAsIGlzU2hvcnRQcmVhbWJsZSk7Cit9CisK
KyNkZWZpbmUgV0lGSV9DV19NSU4gMzEKKyNkZWZpbmUgV0lGSV9DV19NQVggMTAyMworCisvKgor
ICogQ2FsY3VsYXRlIHRoZSB0cmFuc21pdCBkdXJhdGlvbiBvZiBhIGZyYW1lLgorICovCitzdGF0
aWMgdW5zaWduZWQgY2FsY191c2Vjc191bmljYXN0X3BhY2tldChjb25zdCBzdHJ1Y3QgaWVlZTgw
MjExdmFwICp2YXAsCisJCQkJaW50IGxlbmd0aCwKKwkJCQlpbnQgcml4LCBpbnQgc2hvcnRfcmV0
cmllcywKKwkJCQlpbnQgbG9uZ19yZXRyaWVzLCBpbnQgaXNfaHQ0MCkKK3sKKwljb25zdCBzdHJ1
Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFw
LT5pdl9pYy0+aWNfY3VyY2hhbik7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2
X2ljOworCWludCBjdXJtb2RlID0gaWVlZTgwMjExX2NoYW4ybW9kZSh2YXAtPml2X2ljLT5pY19j
dXJjaGFuKTsKKwkKKwl1bnNpZ25lZCB0X3Nsb3QsIHRfZGlmcywgdF9zaWZzOyAKKwlpbnQgcnRz
LCBjdHM7CisJaW50IHR0LCB4LCBjdywgY2l4OworCisJaW50IHR0ID0gMDsKKwlpbnQgeCA9IDA7
CisJaW50IGN3ID0gV0lGSV9DV19NSU47CisKKwlLQVNTRVJUKHJ0ICE9IE5VTEwsICgibm8gcmF0
ZSB0YWJsZSwgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCWlmIChyaXggPj0gcnQtPnJhdGVDb3Vu
dCkgeworCQlwcmludGYoImJvZ3VzIHJpeCAlZCwgbWF4ICV1LCBtb2RlICV1XG4iLAorCQkgICAg
ICAgcml4LCBydC0+cmF0ZUNvdW50LCBjdXJtb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCWNpeCA9
IHJ0LT5pbmZvW3JpeF0uY29udHJvbFJhdGU7CisJLyogCisJICogWFhYIGdldHRpbmcgbWFjL3Bo
eSBsZXZlbCB0aW1pbmdzIHNob3VsZCBiZSBmaXhlZCBmb3IgdHVyYm8KKwkgKiByYXRlcywgYW5k
IHRoZXJlIGlzIHByb2JhYmx5IGEgd2F5IHRvIGdldCB0aGlzIGZyb20gdGhlCisJICogaGFsLi4u
CisJICovCisJc3dpdGNoIChydC0+aW5mb1tyaXhdLnBoeSkgeworCWNhc2UgSUVFRTgwMjExX1Rf
T0ZETToKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gMTY7CisJCXRfZGlmcyA9IDI4OworCQkv
KiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIElFRUU4MDIxMV9UX1RVUkJPOgorCQl0X3Nsb3QgPSA5
OworCQl0X3NpZnMgPSA4OworCQl0X2RpZnMgPSAyODsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAy
MTFfVF9IVDoKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gODsKKwkJdF9kaWZzID0gMjg7CisJ
CWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1RfRFM6CisJCS8qIGZhbGwgdGhyb3VnaCB0byBkZWZh
dWx0ICovCisJZGVmYXVsdDoKKwkJLyogcGcgMjA1IGllZWUuODAyLjExLnBkZiAqLworCQl0X3Ns
b3QgPSAyMDsKKwkJdF9kaWZzID0gNTA7CisJCXRfc2lmcyA9IDEwOworCX0KKworCXJ0cyA9IGN0
cyA9IDA7CisKKwlpZiAoKGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1VTRVBST1QpICYmCisJ
ICAgIHJ0LT5pbmZvW3JpeF0ucGh5ID09IElFRUU4MDIxMV9UX09GRE0pIHsKKwkJaWYgKGljLT5p
Y19wcm90bW9kZSA9PSBJRUVFODAyMTFfUFJPVF9SVFNDVFMpCisJCQlydHMgPSAxOworCQllbHNl
IGlmIChpYy0+aWNfcHJvdG1vZGUgPT0gSUVFRTgwMjExX1BST1RfQ1RTT05MWSkKKwkJCWN0cyA9
IDE7CisKKwkJaW50IHByb3RyaXg7CisgICAgCWlmIChjdXJtb2RlID09IElFRUU4MDIxMV9NT0RF
XzExRykKKyAgICAJICAgIHByb3RyaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzIqMl07CisgICAg
CWVsc2UgCisgICAgCSAgICBwcm90cml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFsyKjFdOworICAg
IAlpZiAoMHhmZiA9PSBwcm90cml4KQorICAgIAkJcHJvdHJpeCA9IDA7CisKKwkJY2l4ID0gcnQt
PmluZm9bcHJvdHJpeF0uY29udHJvbFJhdGU7CisJfQorCisJaWYgKDAgLypsZW5ndGggPiBpYy0+
aWNfcnRzdGhyZXNob2xkICovKSB7CisJCXJ0cyA9IDE7CisJfQorCisJaWYgKHJ0cyB8fCBjdHMp
IHsKKwkJaW50IGN0c3JhdGU7CisJCWludCBjdHNkdXJhdGlvbiA9IDA7CisKKwkJLyogTkI6IHRo
aXMgaXMgaW50ZW50aW9uYWxseSBub3QgYSBydW50aW1lIGNoZWNrICovCisJCUtBU1NFUlQoY2l4
IDwgcnQtPnJhdGVDb3VudCwKKwkJICAgICgiYm9ndXMgY2l4ICVkLCBtYXggJXUsIG1vZGUgJXVc
biIsIGNpeCwgcnQtPnJhdGVDb3VudCwKKwkJICAgICBjdXJtb2RlKSk7CisKKwkJY3RzcmF0ZSA9
IHJ0LT5pbmZvW2NpeF0ucmF0ZUNvZGUgfCBydC0+aW5mb1tjaXhdLnNob3J0UHJlYW1ibGU7CisJ
CWlmIChydHMpCQkvKiBTSUZTICsgQ1RTICovCisJCQljdHNkdXJhdGlvbiArPSBydC0+aW5mb1tj
aXhdLnNwQWNrRHVyYXRpb247CisKKwkJLyogWFhYIGFzc3VtZXMgc2hvcnQgcHJlYW1ibGUgKi8K
KwkJY3RzZHVyYXRpb24gKz0gc2FtcGxlX3BrdF90eHRpbWUocnQsIGxlbmd0aCwgcml4LCBpc19o
dDQwLCAwKTsKKworCQlpZiAoY3RzKQkvKiBTSUZTICsgQUNLICovCisJCQljdHNkdXJhdGlvbiAr
PSBydC0+aW5mb1tjaXhdLnNwQWNrRHVyYXRpb247CisKKwkJdHQgKz0gKHNob3J0X3JldHJpZXMg
KyAxKSAqIGN0c2R1cmF0aW9uOworCX0KKwl0dCArPSB0X2RpZnM7CisKKwkvKiBYWFggYXNzdW1l
cyBzaG9ydCBwcmVhbWJsZSAqLworCXR0ICs9IChsb25nX3JldHJpZXMrMSkqc2FtcGxlX3BrdF90
eHRpbWUocnQsIGxlbmd0aCwgcml4LCBpc19odDQwLCAwKTsKKworCXR0ICs9IChsb25nX3JldHJp
ZXMrMSkqKHRfc2lmcyArIHJ0LT5pbmZvW3JpeF0uc3BBY2tEdXJhdGlvbik7CisKKwlmb3IgKHgg
PSAwOyB4IDw9IHNob3J0X3JldHJpZXMgKyBsb25nX3JldHJpZXM7IHgrKykgeworCQljdyA9IE1J
TihXSUZJX0NXX01BWCwgKGN3ICsgMSkgKiAyKTsKKwkJdHQgKz0gKHRfc2xvdCAqIGN3LzIpOwor
CX0KKwlyZXR1cm4gdHQ7Cit9CisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVD
VExfU0FNUExFX0hfICovCkluZGV4OiBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxfbm9uZS5oCShyZXZpc2lv
biAwKQorKysgbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxfbm9uZS5oCShyZXZpc2lvbiAyNTY4
MjUpCkBAIC0wLDAgKzEsMzggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEzIENoZW5jaG9u
ZyBRaW4gPGNjcWluQEZyZWVCU0Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5
LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9z
ZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBh
cHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT
IElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVH
QVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YK
KyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VM
VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAq
IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04s
IEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG
T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4
MDIxMV9SQVRFQ1RMX05PTkVfSF8KKyNkZWZpbmUgX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RM
X05PTkVfSF8KKworI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CisKKy8q
CisgKiBSYXRlIGNvbnRyb2wgc2V0dGluZ3MuCisgKi8KKworc3RydWN0IGllZWU4MDIxMV9ub25l
IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgbm9uZV9zdGF0OworCS8qIG90aGVyIHN0dWZm
cyAqLworfTsKKworLyoKKyAqIFJhdGUgY29udHJvbCBzdGF0ZSBmb3IgYSBnaXZlbiBub2RlLgor
ICovCitzdHJ1Y3QgaWVlZTgwMjExX25vbmVfbm9kZSB7CisJc3RydWN0IGllZWU4MDIxMV9ub25l
ICpub25fbm9uZTsKK307CisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExf
Tk9ORV9IXyAqLwpJbmRleDogbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZV90eHNjaGVkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZV90eHNjaGVkLmgJKHJl
dmlzaW9uIDApCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQuaAkocmV2
aXNpb24gMjU2ODI1KQpAQCAtMCwwICsxLDI0MSBAQAorLyogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rl
di9hdGgvYXRoX3JhdGUvc2FtcGxlL3R4X3NjaGVkdWxlcy5oIDI0MDM4NCAyMDEyLTA4LTE1IDA3
OjUwOjQyWiBhZHJpYW4gJCovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1IEpvaG4gQmlj
a2V0CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgQ2hlbmNob25nIFFpbiA8Y2NxaW5ARnJlZUJTRC5v
cmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQg
bW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzaW1pbGFyIHRvIHRoZSAi
Tk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cgKCJEaXNjbGFpbWVyIikgYW5kIGFueQorICog
ICAgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uIGluY2x1ZGluZyBhIHN1
YnN0YW50aWFsbHkKKyAqICAgIHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVy
dGhlciBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0
aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9m
IGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3
YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTk9OSU5GUklOR0VNRU5ULCBNRVJDSEFOVElCSUxJVFkKKyAqIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisjaWZuZGVm
CV9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9TQU1QTEVfVFhTQ0hFRFVMRVNfSF8KKyNkZWZp
bmUJX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9UWFNDSEVEVUxFU19IXworCisj
aW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNkZWZpbmUgQShfcikgXAorICAgICgoKF9yKSA9PSA2
KSAgID8gMCA6ICgoKF9yKSA9PSA5KSAgID8gMSA6ICgoKF9yKSA9PSAxMikgID8gMiA6IFwKKyAg
ICAoKChfcikgPT0gMTgpICA/IDMgOiAoKChfcikgPT0gMjQpICA/IDQgOiAoKChfcikgPT0gMzYp
ICA/IDUgOiBcCisgICAgKCgoX3IpID09IDQ4KSAgPyA2IDogKCgoX3IpID09IDU0KSAgPyA3IDog
MCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgc2VyaWVzXzExYVtdID0g
eworCXsgMyxBKCA2KSwgMyxBKCAgNiksIDAsQSggIDYpLCAwLEEoIDYpIH0sCS8qICAgNk1iL3Mg
Ki8KKwl7IDQsQSggOSksIDMsQSggIDYpLCA0LEEoICA2KSwgMCxBKCA2KSB9LAkvKiAgIDlNYi9z
ICovCisJeyA0LEEoMTIpLCAzLEEoICA2KSwgNCxBKCAgNiksIDAsQSggNikgfSwJLyogIDEyTWIv
cyAqLworCXsgNCxBKDE4KSwgMyxBKCAxMiksIDQsQSggIDYpLCAyLEEoIDYpIH0sCS8qICAxOE1i
L3MgKi8KKwl7IDQsQSgyNCksIDMsQSggMTgpLCA0LEEoIDEyKSwgMixBKCA2KSB9LAkvKiAgMjRN
Yi9zICovCisJeyA0LEEoMzYpLCAzLEEoIDI0KSwgNCxBKCAxOCksIDIsQSggNikgfSwJLyogIDM2
TWIvcyAqLworCXsgNCxBKDQ4KSwgMyxBKCAzNiksIDQsQSggMjQpLCAyLEEoMTIpIH0sCS8qICA0
OE1iL3MgKi8KKwl7IDQsQSg1NCksIDMsQSggNDgpLCA0LEEoIDM2KSwgMixBKDI0KSB9CS8qICA1
NE1iL3MgKi8KK307CisKKyNkZWZpbmUgTkExKF9yKSBcCisJKCgoX3IpID09IDYuNSkgID8gOCA6
ICgoKF9yKSA9PSAxMykgID8gIDkgOiAoKChfcikgPT0gMTkuNSk/IDEwIDogXAorCSgoKF9yKSA9
PSAyNikgID8gMTEgOiAoKChfcikgPT0gMzkpICA/IDEyIDogKCgoX3IpID09IDUyKSAgPyAxMyA6
IFwKKwkoKChfcikgPT0gNTguNSk/IDE0IDogKCgoX3IpID09IDY1KSAgPyAxNSA6IDApKSkpKSkp
KQorI2RlZmluZSBOQTIoX3IpIFwKKwkoKChfcikgPT0gMTMpID8gMTYgOiAoKChfcikgPT0gMjYp
ID8gMTcgOiAoKChfcikgPT0gMzkpID8gMTggOiBcCisJKCgoX3IpID09IDUyKSA/IDE5IDogKCgo
X3IpID09IDc4KSA/IDIwIDogKCgoX3IpID09IDEwNCk/IDIxIDogXAorCSgoKF9yKSA9PSAxMTcp
PyAyMiA6ICgoKF9yKSA9PSAxMzApPyAyMyA6IDApKSkpKSkpKQorI2RlZmluZSBOQTMoX3IpIFwK
KwkoKChfcikgPT0gMTkuNSkgID8gMjQgOiAoKChfcikgPT0gMzkpID8gMjUgOiAoKChfcikgPT0g
NTguNSkgID8gMjYgOiBcCisJKCgoX3IpID09IDc4KSAgPyAyNyA6ICgoKF9yKSA9PSAxMTcpID8g
MjggOiAoKChfcikgPT0gMTU2KSA/IDI5IDogXAorCSgoKF9yKSA9PSAxNzUuNSkgPyAzMCA6ICgo
KF9yKSA9PSAxOTUpPyAzMSA6IDApKSkpKSkpKQorc3RhdGljIGNvbnN0IHN0cnVjdCB0eHNjaGVk
dWxlIHNlcmllc18xMW5hW10gPSB7CisJeyAzLEEoIDYpLCAzLEEoICA2KSwgMCxBKCAgNiksIDAs
QSggNikgfSwgICAgICAgLyogICA2TWIvcyAqLworCXsgNCxBKCA5KSwgMyxBKCAgNiksIDQsQSgg
IDYpLCAwLEEoIDYpIH0sICAgICAgIC8qICAgOU1iL3MgKi8KKwl7IDQsQSgxMiksIDMsQSggIDYp
LCA0LEEoICA2KSwgMCxBKCA2KSB9LCAgICAgICAvKiAgMTJNYi9zICovCisJeyA0LEEoMTgpLCAz
LEEoIDEyKSwgNCxBKCAgNiksIDIsQSggNikgfSwgICAgICAgLyogIDE4TWIvcyAqLworCXsgNCxB
KDI0KSwgMyxBKCAxOCksIDQsQSggMTIpLCAyLEEoIDYpIH0sICAgICAgIC8qICAyNE1iL3MgKi8K
Kwl7IDQsQSgzNiksIDMsQSggMjQpLCA0LEEoIDE4KSwgMixBKCA2KSB9LCAgICAgICAvKiAgMzZN
Yi9zICovCisJeyA0LEEoNDgpLCAzLEEoIDM2KSwgNCxBKCAyNCksIDIsQSgxMikgfSwgICAgICAg
LyogIDQ4TWIvcyAqLworCXsgNCxBKDU0KSwgMyxBKCA0OCksIDQsQSggMzYpLCAyLEEoMjQpIH0s
ICAgICAgIC8qICA1NE1iL3MgKi8KKworCS8qIDEgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkEx
KCA2LjUpLCAzLE5BMSggNi41KSwgMCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwgIC8qIDYuNU1i
L3MgKi8KKwl7IDQsTkExKCAgMTMpLCAzLE5BMSggNi41KSwgNCxOQTEoIDYuNSksIDAsTkExKDYu
NSkgfSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkExKDE5LjUpLCAzLE5BMSggNi41KSwgNCxOQTEo
IDYuNSksIDAsTkExKDYuNSkgfSwgIC8qMTkuNU1iL3MgKi8KKwl7IDQsTkExKCAgMjYpLCAzLE5B
MSgxOS41KSwgNCxOQTEoIDYuNSksIDIsTkExKDYuNSkgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQs
TkExKCAgMzkpLCAzLE5BMSggIDI2KSwgNCxOQTEoMTkuNSksIDIsTkExKDYuNSkgfSwgIC8qICAz
OU1iL3MgKi8KKwl7IDQsTkExKCAgNTIpLCAzLE5BMSggIDM5KSwgNCxOQTEoICAyNiksIDIsTkEx
KDYuNSkgfSwgIC8qICA1Mk1iL3MgKi8KKwl7IDQsTkExKDU4LjUpLCAzLE5BMSggIDUyKSwgNCxO
QTEoICAzOSksIDIsTkExKCAxMykgfSwgIC8qNTguNU1iL3MgKi8KKwl7IDQsTkExKCAgNjUpLCAz
LE5BMSg1OC41KSwgNCxOQTEoICA1MiksIDIsTkExKCAxMykgfSwgIC8qICA2NU1iL3MgKi8KKwor
CS8qIDIgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkEyKCAgMTMpLCAzLE5BMiggIDEzKSwgMCxO
QTIoICAxMyksIDAsTkEyKCAxMykgfSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkEyKCAgMjYpLCAz
LE5BMiggIDEzKSwgNCxOQTIoICAxMyksIDAsTkEyKCAxMykgfSwgIC8qICAyNk1iL3MgKi8KKwl7
IDQsTkEyKCAgMzkpLCAzLE5BMiggIDI2KSwgNCxOQTIoICAxMyksIDIsTkEyKCAxMykgfSwgIC8q
ICAzOU1iL3MgKi8KKwl7IDQsTkEyKCAgNTIpLCAzLE5BMiggIDM5KSwgNCxOQTIoICAyNiksIDIs
TkEyKCAxMykgfSwgIC8qICA1Mk1iL3MgKi8KKwl7IDQsTkEyKCAgNzgpLCAzLE5BMiggIDUyKSwg
NCxOQTIoICAzOSksIDIsTkEyKCAxMykgfSwgIC8qICA3OE1iL3MgKi8KKwl7IDQsTkEyKCAxMDQp
LCAzLE5BMiggIDc4KSwgNCxOQTIoICA1MiksIDIsTkEyKCAxMykgfSwgIC8qIDEwNE1iL3MgKi8K
Kwl7IDQsTkEyKCAxMTcpLCAzLE5BMiggMTA0KSwgNCxOQTIoICA3OCksIDIsTkEyKCAyNikgfSwg
IC8qIDExN01iL3MgKi8KKwl7IDQsTkEyKCAxMzApLCAzLE5BMiggMTE3KSwgNCxOQTIoIDEwNCks
IDIsTkEyKCAyNikgfSwgICAvKiAxMzBNYi9zICovCisKKwkvKiAzIHN0cmVhbSByYXRlcyAqLwor
CisJeyAzLE5BMygxOS41KSwgMyxOQTMoMTkuNSksIDAsTkEzKDE5LjUpLCAwLE5BMygxOS41KSB9
LCAgLyogIDE5TWIvcyAqLworCXsgMyxOQTMoICAzOSksIDMsTkEzKDE5LjUpLCAwLE5BMygxOS41
KSwgMCxOQTMoMTkuNSkgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDMsTkEzKDU4LjUpLCAzLE5BMygg
IDM5KSwgMCxOQTMoMTkuNSksIDAsTkEzKDE5LjUpIH0sICAvKiAgNThNYi9zICovCisJeyAzLE5B
MyggIDc4KSwgMyxOQTMoNTguNSksIDAsTkEzKCAgMzkpLCAwLE5BMygxOS41KSB9LCAgLyogIDc4
TWIvcyAqLworCXsgMyxOQTMoIDExNyksIDMsTkEzKCAgNzgpLCAwLE5BMyg1OC41KSwgMCxOQTMo
MTkuNSkgfSwgIC8qIDExN01iL3MgKi8KKwl7IDMsTkEzKCAxNTYpLCAzLE5BMyggMTE3KSwgMCxO
QTMoICA3OCksIDAsTkEzKDE5LjUpIH0sICAvKiAgMTU2TWIvcyAqLworCXsgMyxOQTMoMTc1LjUp
LCAzLE5BMyggMTU2KSwgMCxOQTMoIDExNyksIDAsTkEzKCAgMzkpIH0sICAvKiAgMTc1TWIvcyAq
LworCXsgMyxOQTMoIDE5NSksIDMsTkEzKCAxOTUpLCAwLE5BMyggMTU2KSwgMCxOQTMoNTguNSkg
fSwgIC8qIDE5NU1iL3MgKi8KK307CisjdW5kZWYgQQorI3VuZGVmIE5BMworI3VuZGVmIE5BMgor
I3VuZGVmIE5BMQorCisjZGVmaW5lIEcoX3IpIFwKKyAgICAoKChfcikgPT0gMSkgICA/IDAgOiAo
KChfcikgPT0gMikgICA/IDEgOiAoKChfcikgPT0gNS41KSA/IDIgOiBcCisgICAgKCgoX3IpID09
IDExKSAgPyAzIDogKCgoX3IpID09IDYpICAgPyA0IDogKCgoX3IpID09IDkpICAgPyA1IDogXAor
ICAgICgoKF9yKSA9PSAxMikgID8gNiA6ICgoKF9yKSA9PSAxOCkgID8gNyA6ICgoKF9yKSA9PSAy
NCkgID8gOCA6IFwKKyAgICAoKChfcikgPT0gMzYpICA/IDkgOiAoKChfcikgPT0gNDgpICA/IDEw
IDogKCgoX3IpID09IDU0KSAgPyAxMSA6IDApKSkpKSkpKSkpKSkKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFnW10gPSB7CisJeyAzLEcoIDEpLCAzLEcoICAxKSwgMCxH
KCAgMSksIDAsRyggMSkgfSwJLyogICAxTWIvcyAqLworCXsgNCxHKCAyKSwgMyxHKCAgMSksIDQs
RyggIDEpLCAwLEcoIDEpIH0sCS8qICAgMk1iL3MgKi8KKwl7IDQsRyg1LjUpLDMsRyggIDIpLCA0
LEcoICAxKSwgMixHKCAxKSB9LAkvKiA1LjVNYi9zICovCisJeyA0LEcoMTEpLCAzLEcoNS41KSwg
NCxHKCAgMiksIDIsRyggMSkgfSwJLyogIDExTWIvcyAqLworCXsgNCxHKCA2KSwgMyxHKDUuNSks
IDQsRyggIDIpLCAyLEcoIDEpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsRyggOSksIDMsRyggIDYp
LCA0LEcoNS41KSwgMixHKCAxKSB9LAkvKiAgIDlNYi9zICovCisJeyA0LEcoMTIpLCAzLEcoIDEx
KSwgNCxHKDUuNSksIDIsRyggMSkgfSwJLyogIDEyTWIvcyAqLworCXsgNCxHKDE4KSwgMyxHKCAx
MiksIDQsRyggMTEpLCAyLEcoIDEpIH0sCS8qICAxOE1iL3MgKi8KKwl7IDQsRygyNCksIDMsRygg
MTgpLCA0LEcoIDEyKSwgMixHKCAxKSB9LAkvKiAgMjRNYi9zICovCisJeyA0LEcoMzYpLCAzLEco
IDI0KSwgNCxHKCAxOCksIDIsRyggMSkgfSwJLyogIDM2TWIvcyAqLworCXsgNCxHKDQ4KSwgMyxH
KCAzNiksIDQsRyggMjQpLCAyLEcoIDEpIH0sCS8qICA0OE1iL3MgKi8KKwl7IDQsRyg1NCksIDMs
RyggNDgpLCA0LEcoIDM2KSwgMixHKCAxKSB9CS8qICA1NE1iL3MgKi8KK307CisKKyNkZWZpbmUg
TkcxKF9yKSBcCisJKCgoX3IpID09IDYuNSkgPyAxMiA6ICgoKF9yKSA9PSAxMykgPyAxMyA6ICgo
KF9yKSA9PSAxOS41KT8gMTQgOiBcCisJKCgoX3IpID09IDI2KSAgPyAxNSA6ICgoKF9yKSA9PSAz
OSkgPyAxNiA6ICgoKF9yKSA9PSA1MikgID8gMTcgOiBcCisJKCgoX3IpID09IDU4LjUpPyAxOCA6
ICgoKF9yKSA9PSA2NSkgPyAxOSA6IDApKSkpKSkpKQorI2RlZmluZSBORzIoX3IpIFwKKwkoKChf
cikgPT0gMTMpICA/IDIwIDogKCgoX3IpID09IDI2KSA/IDIxIDogKCgoX3IpID09IDM5KSAgPyAy
MiA6IFwKKwkoKChfcikgPT0gNTIpICA/IDIzIDogKCgoX3IpID09IDc4KSA/IDI0IDogKCgoX3Ip
ID09IDEwNCkgPyAyNSA6IFwKKwkoKChfcikgPT0gMTE3KSA/IDI2IDogKCgoX3IpID09IDEzMCk/
IDI3IDogMCkpKSkpKSkpCisjZGVmaW5lIE5HMyhfcikgXAorCSgoKF9yKSA9PSAxOS41KSAgPyAy
OCA6ICgoKF9yKSA9PSAzOSkgPyAyOSA6ICgoKF9yKSA9PSA1OC41KSAgPyAzMCA6IFwKKwkoKChf
cikgPT0gNzgpICA/IDMxIDogKCgoX3IpID09IDExNykgPyAzMiA6ICgoKF9yKSA9PSAxNTYpID8g
MzMgOiBcCisJKCgoX3IpID09IDE3NS41KSA/IDM0IDogKCgoX3IpID09IDE5NSk/IDM1IDogMCkp
KSkpKSkpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFuZ1tdID0g
eworCXsgMyxHKCAxKSwgMyxHKCAgMSksIDAsRyggIDEpLCAwLEcoIDEpIH0sICAgICAgIC8qICAg
MU1iL3MgKi8KKwl7IDQsRyggMiksIDMsRyggIDEpLCA0LEcoICAxKSwgMCxHKCAxKSB9LCAgICAg
ICAvKiAgIDJNYi9zICovCisJeyA0LEcoNS41KSwzLEcoICAyKSwgNCxHKCAgMSksIDIsRyggMSkg
fSwgICAgICAgLyogNS41TWIvcyAqLworCXsgNCxHKDExKSwgMyxHKDUuNSksIDQsRyggIDIpLCAy
LEcoIDEpIH0sICAgICAgIC8qICAxMU1iL3MgKi8KKwl7IDQsRyggNiksIDMsRyg1LjUpLCA0LEco
ICAyKSwgMixHKCAxKSB9LCAgICAgICAvKiAgIDZNYi9zICovCisJeyA0LEcoIDkpLCAzLEcoICA2
KSwgNCxHKDUuNSksIDIsRyggMSkgfSwgICAgICAgLyogICA5TWIvcyAqLworCXsgNCxHKDEyKSwg
MyxHKCAxMSksIDQsRyg1LjUpLCAyLEcoIDEpIH0sICAgICAgIC8qICAxMk1iL3MgKi8KKwl7IDQs
RygxOCksIDMsRyggMTIpLCA0LEcoIDExKSwgMixHKCAxKSB9LCAgICAgICAvKiAgMThNYi9zICov
CisJeyA0LEcoMjQpLCAzLEcoIDE4KSwgNCxHKCAxMiksIDIsRyggMSkgfSwgICAgICAgLyogIDI0
TWIvcyAqLworCXsgNCxHKDM2KSwgMyxHKCAyNCksIDQsRyggMTgpLCAyLEcoIDEpIH0sICAgICAg
IC8qICAzNk1iL3MgKi8KKwl7IDQsRyg0OCksIDMsRyggMzYpLCA0LEcoIDI0KSwgMixHKCAxKSB9
LCAgICAgICAvKiAgNDhNYi9zICovCisJeyA0LEcoNTQpLCAzLEcoIDQ4KSwgNCxHKCAzNiksIDIs
RyggMSkgfSwgICAgICAgLyogIDU0TWIvcyAqLworCisJLyogMSBzdHJlYW0gcmF0ZXMgKi8KKwor
CXsgMyxORzEoIDYuNSksIDMsTkcxKCA2LjUpLCAwLE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAg
LyogNi41TWIvcyAqLworCXsgNCxORzEoICAxMyksIDMsTkcxKCA2LjUpLCA0LE5HMSggNi41KSwg
MCxORzEoNi41KSB9LCAgLyogIDEzTWIvcyAqLworCXsgNCxORzEoMTkuNSksIDMsTkcxKCA2LjUp
LCA0LE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAgLyoxOS41TWIvcyAqLworCXsgNCxORzEoICAy
NiksIDMsTkcxKDE5LjUpLCA0LE5HMSggNi41KSwgMixORzEoNi41KSB9LCAgLyogIDI2TWIvcyAq
LworCXsgNCxORzEoICAzOSksIDMsTkcxKCAgMjYpLCA0LE5HMSgxOS41KSwgMixORzEoNi41KSB9
LCAgLyogIDM5TWIvcyAqLworCXsgNCxORzEoICA1MiksIDMsTkcxKCAgMzkpLCA0LE5HMSggIDI2
KSwgMixORzEoNi41KSB9LCAgLyogIDUyTWIvcyAqLworCXsgNCxORzEoNTguNSksIDMsTkcxKCAg
NTIpLCA0LE5HMSggIDM5KSwgMixORzEoIDEzKSB9LCAgLyo1OC41TWIvcyAqLworCXsgNCxORzEo
ICA2NSksIDMsTkcxKDU4LjUpLCA0LE5HMSggIDUyKSwgMixORzEoIDEzKSB9LCAgLyogIDY1TWIv
cyAqLworCisJLyogMiBzdHJlYW0gcmF0ZXMgKi8KKworCXsgMyxORzIoICAxMyksIDMsTkcyKCAg
MTMpLCAwLE5HMiggIDEzKSwgMCxORzIoIDEzKSB9LCAgLyogIDEzTWIvcyAqLworCXsgNCxORzIo
ICAyNiksIDMsTkcyKCAgMTMpLCA0LE5HMiggIDEzKSwgMCxORzIoIDEzKSB9LCAgLyogIDI2TWIv
cyAqLworCXsgNCxORzIoICAzOSksIDMsTkcyKCAgMjYpLCA0LE5HMiggIDEzKSwgMixORzIoIDEz
KSB9LCAgLyogIDM5TWIvcyAqLworCXsgNCxORzIoICA1MiksIDMsTkcyKCAgMzkpLCA0LE5HMigg
IDI2KSwgMixORzIoIDEzKSB9LCAgLyogIDUyTWIvcyAqLworCXsgNCxORzIoICA3OCksIDMsTkcy
KCAgNTIpLCA0LE5HMiggIDM5KSwgMixORzIoIDEzKSB9LCAgLyogIDc4TWIvcyAqLworCXsgNCxO
RzIoIDEwNCksIDMsTkcyKCAgNzgpLCA0LE5HMiggIDUyKSwgMixORzIoIDEzKSB9LCAgLyogMTA0
TWIvcyAqLworCXsgNCxORzIoIDExNyksIDMsTkcyKCAxMDQpLCA0LE5HMiggIDc4KSwgMixORzIo
IDI2KSB9LCAgLyogMTE3TWIvcyAqLworCXsgNCxORzIoIDEzMCksIDMsTkcyKCAxMTcpLCA0LE5H
MiggMTA0KSwgMixORzIoIDI2KSB9LCAgLyogMTMwTWIvcyAqLworCisJLyogMyBzdHJlYW0gcmF0
ZXMgKi8KKworCXsgMyxORzMoMTkuNSksIDMsTkczKDE5LjUpLCAwLE5HMygxOS41KSwgMCxORzMo
MTkuNSkgfSwgIC8qICAxOU1iL3MgKi8KKwl7IDMsTkczKCAgMzkpLCAzLE5HMygxOS41KSwgMCxO
RzMoMTkuNSksIDAsTkczKDE5LjUpIH0sICAvKiAgMzlNYi9zICovCisJeyAzLE5HMyg1OC41KSwg
MyxORzMoICAzOSksIDAsTkczKDE5LjUpLCAwLE5HMygxOS41KSB9LCAgLyogIDU4TWIvcyAqLwor
CXsgMyxORzMoICA3OCksIDMsTkczKDU4LjUpLCAwLE5HMyggIDM5KSwgMCxORzMoMTkuNSkgfSwg
IC8qICA3OE1iL3MgKi8KKwl7IDMsTkczKCAxMTcpLCAzLE5HMyggIDc4KSwgMCxORzMoNTguNSks
IDAsTkczKDE5LjUpIH0sICAvKiAxMTdNYi9zICovCisJeyAzLE5HMyggMTU2KSwgMyxORzMoIDEx
NyksIDAsTkczKCAgNzgpLCAwLE5HMygxOS41KSB9LCAgLyogIDE1Nk1iL3MgKi8KKwl7IDMsTkcz
KDE3NS41KSwgMyxORzMoIDE1NiksIDAsTkczKCAxMTcpLCAwLE5HMyggIDM5KSB9LCAgLyogIDE3
NU1iL3MgKi8KKwl7IDMsTkczKCAxOTUpLCAzLE5HMyggMTk1KSwgMCxORzMoIDE1NiksIDAsTkcz
KDU4LjUpIH0sICAvKiAxOTVNYi9zICovCisKK307CisjdW5kZWYgRworI3VuZGVmIE5HMworI3Vu
ZGVmIE5HMgorI3VuZGVmIE5HMQorCisjZGVmaW5lIEgoX3IpIFwKKyAgICAoKChfcikgPT0gMykg
ICA/IDAgOiAoKChfcikgPT0gNC41KSA/IDEgOiAoKChfcikgPT0gNikgID8gMiA6IFwKKyAgICAo
KChfcikgPT0gOSkgICA/IDMgOiAoKChfcikgPT0gMTIpICA/IDQgOiAoKChfcikgPT0gMTgpID8g
NSA6IFwKKyAgICAoKChfcikgPT0gMjQpICA/IDYgOiAoKChfcikgPT0gMjcpICA/IDcgOiAwKSkp
KSkpKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfaGFsZltdID0gewor
CXsgMyxIKCAzKSwgMyxIKCAgMyksIDAsSCggIDMpLCAwLEgoIDMpIH0sCS8qICAgM01iL3MgKi8K
Kwl7IDQsSCg0LjUpLDMsSCggIDMpLCA0LEgoICAzKSwgMCxIKCAzKSB9LAkvKiA0LjVNYi9zICov
CisJeyA0LEgoIDYpLCAzLEgoICAzKSwgNCxIKCAgMyksIDAsSCggMykgfSwJLyogICA2TWIvcyAq
LworCXsgNCxIKCA5KSwgMyxIKCAgNiksIDQsSCggIDMpLCAyLEgoIDMpIH0sCS8qICAgOU1iL3Mg
Ki8KKwl7IDQsSCgxMiksIDMsSCggIDkpLCA0LEgoICA2KSwgMixIKCAzKSB9LAkvKiAgMTJNYi9z
ICovCisJeyA0LEgoMTgpLCAzLEgoIDEyKSwgNCxIKCAgOSksIDIsSCggMykgfSwJLyogIDE4TWIv
cyAqLworCXsgNCxIKDI0KSwgMyxIKCAxOCksIDQsSCggMTIpLCAyLEgoIDYpIH0sCS8qICAyNE1i
L3MgKi8KKwl7IDQsSCgyNyksIDMsSCggMjQpLCA0LEgoIDE4KSwgMixIKDEyKSB9CS8qICAyN01i
L3MgKi8KK307CisjdW5kZWYgSAorCisjaWZkZWYgUQorI3VuZGVmIFEKKyNlbmRpZgorI2RlZmlu
ZSBRKF9yKSBcCisgICAgKCgoX3IpID09IDEuNSkgPyAwIDogKCgoX3IpID09Mi4yNSkgPyAxIDog
KCgoX3IpID09IDMpICA/IDIgOiBcCisgICAgKCgoX3IpID09IDQuNSkgPyAzIDogKCgoX3IpID09
ICA2KSAgPyA0IDogKCgoX3IpID09IDkpICA/IDUgOiBcCisgICAgKCgoX3IpID09IDEyKSAgPyA2
IDogKCgoX3IpID09IDEzLjUpPyA3IDogMCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4
c2NoZWR1bGUgc2VyaWVzX3F1YXJ0ZXJbXSA9IHsKKwl7IDMsUSggMS41KSwzLFEoMS41KSwgMCxR
KDEuNSksIDAsUSgxLjUpIH0sCS8qIDEuNU1iL3MgKi8KKwl7IDQsUSgyLjI1KSwzLFEoMS41KSwg
NCxRKDEuNSksIDAsUSgxLjUpIH0sCS8qMi4yNU1iL3MgKi8KKwl7IDQsUSggICAzKSwzLFEoMS41
KSwgNCxRKDEuNSksIDAsUSgxLjUpIH0sCS8qICAgM01iL3MgKi8KKwl7IDQsUSggNC41KSwzLFEo
ICAzKSwgNCxRKDEuNSksIDIsUSgxLjUpIH0sCS8qIDQuNU1iL3MgKi8KKwl7IDQsUSggICA2KSwz
LFEoNC41KSwgNCxRKCAgMyksIDIsUSgxLjUpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsUSggICA5
KSwzLFEoICA2KSwgNCxRKDQuNSksIDIsUSgxLjUpIH0sCS8qICAgOU1iL3MgKi8KKwl7IDQsUSgg
IDEyKSwzLFEoICA5KSwgNCxRKCAgNiksIDIsUSggIDMpIH0sCS8qICAxMk1iL3MgKi8KKwl7IDQs
USgxMy41KSwzLFEoIDEyKSwgNCxRKCAgOSksIDIsUSggIDYpIH0JLyoxMy41TWIvcyAqLworfTsK
KyN1bmRlZiBRCisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExfU0FNUExF
X1RYU0NIRURVTEVTX0hfICovCkluZGV4OiBuZXQ4MDIxMS9pZWVlODAyMTFfcnNzYWRhcHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfcnNzYWRhcHQuaAkocmV2aXNpb24gMjU0
ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX3Jzc2FkYXB0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDggQEAKICNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIxMV9SU1NBREFQVF9IXwog
I2RlZmluZSBfTkVUODAyMTFfSUVFRTgwMjExX1JTU0FEQVBUX0hfCiAKKyNpbmNsdWRlIDxuZXQ4
MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorCiAvKiBEYXRhLXJhdGUgYWRhcHRhdGlvbiBsb29z
ZWx5IGJhc2VkIG9uICJMaW5rIEFkYXB0YXRpb24gU3RyYXRlZ3kKICAqIGZvciBJRUVFIDgwMi4x
MSBXTEFOIHZpYSBSZWNlaXZlZCBTaWduYWwgU3RyZW5ndGggTWVhc3VyZW1lbnQiCiAgKiBieSBK
YXZpZXIgZGVsIFByYWRvIFBhdm9uIGFuZCBTdW5naHl1biBDaG9pLgpAQCAtNDMsNiArNDUsNyBA
QAogI2RlZmluZQlJRUVFODAyMTFfUlNTQURBUFRfQktUUE9XRVIJMwkvKiAyKipfQktUUE9XRVIg
Ki8KIAogc3RydWN0IGllZWU4MDIxMV9yc3NhZGFwdCB7CisJc3RydWN0IGllZWU4MDIxMV9yY19z
dGF0IHJzc2FkYXB0X3N0YXQ7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwOwogCWlu
dAlpbnRlcnZhbDsJCQkvKiB1cGRhdGUgaW50ZXJ2YWwgKHRpY2tzKSAqLwogfTsKSW5kZXg6IG5l
dDgwMjExL2llZWU4MDIxMV9hbXJyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjEx
X2FtcnIuaAkocmV2aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX2FtcnIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBfTkVUODAyMTFfSUVFRTgw
MjExX0FNUlJfSF8KICNkZWZpbmUgX05FVDgwMjExX0lFRUU4MDIxMV9BTVJSX0hfCiAKKyNpbmNs
dWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogLyotCiAgKiBOYWl2ZSBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgQWRhcHRpdmUgTXVsdGkgUmF0ZSBSZXRyeSBhbGdvcml0aG06CiAgKgpA
QCAtMzUsNiArMzYsNyBAQAogc3RydWN0IGllZWU4MDIxMXZhcDsKIAogc3RydWN0IGllZWU4MDIx
MV9hbXJyIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgYW1ycl9zdGF0OwogCXVfaW50CWFt
cnJfbWluX3N1Y2Nlc3NfdGhyZXNob2xkOwogCXVfaW50CWFtcnJfbWF4X3N1Y2Nlc3NfdGhyZXNo
b2xkOwogCWludAlhbXJyX2ludGVydmFsOwkJLyogdXBkYXRlIGludGVydmFsICh0aWNrcykgKi8K
SW5kZXg6IGRldi9pd24vaWZfaXduLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2l3bi9pZl9pd24uYwko
cmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2l3bi9pZl9pd24uYwkod29ya2luZyBjb3B5KQpAQCAt
ODc2LDcgKzg3Niw4IEBACiAJaXZwLT5pdl9uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3c3RhdGU7CiAJ
dmFwLT5pdl9uZXdzdGF0ZSA9IGl3bl9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9yYXRlY3RsX2lu
aXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAyMTFfcmF0ZWN0
bF9pbml0KHZhcCwgMCk7CiAJLyogQ29tcGxldGUgc2V0dXAuICovCiAJaWVlZTgwMjExX3ZhcF9h
dHRhY2godmFwLCBpd25fbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKIAlp
Yy0+aWNfb3Btb2RlID0gb3Btb2RlOwpAQCAtMjQ5OSw3ICsyNTAwLDggQEAKIAl1aW50NjRfdCBi
aXRtYXA7CiAJdWludDE2X3Qgc3NuOwogCXVpbnQ4X3QgdGlkOwotCWludCBhY2tmYWlsY250ID0g
MCwgaSwgbGFzdGlkeCwgcWlkLCAqcmVzLCBzaGlmdDsKKwkvKiBpbnQgZmFpbGNudCA9IDA7ICov
CisJaW50IGksIGxhc3RpZHgsIHFpZCwgKnJlcywgc2hpZnQ7CiAKIAlidXNfZG1hbWFwX3N5bmMo
c2MtPnJ4cS5kYXRhX2RtYXQsIGRhdGEtPm1hcCwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwogCkBA
IC0yNTYzLDEyICsyNTY1LDE4IEBACiAJZm9yIChpID0gMDsgYml0bWFwOyBpKyspIHsKIAkJaWYg
KChiaXRtYXAgJiAxKSA9PSAwKSB7CiAJCQlpZnAtPmlmX29lcnJvcnMrKzsKKyNpZiAwCiAJCQlp
ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwKIAkJCSAgICBJRUVF
ODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLCAmYWNrZmFpbGNudCwgTlVMTCk7CisjZW5kaWYKKwkJ
aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksIE5VTEwpOyAvKiBq
dXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwkKIAkJfSBlbHNlIHsKIAkJCWlmcC0+aWZfb3Bh
Y2tldHMrKzsKKyNpZiAwCiAJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlf
dmFwLCBuaSwKIAkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLCAmYWNrZmFpbGNu
dCwgTlVMTCk7CisjZW5kaWYKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5u
aV92YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KIAkJfQog
CQliaXRtYXAgPj49IDE7CiAJfQpAQCAtMjgwNywxMiArMjgxNSwxOCBAQAogCSAqLwogCWlmIChz
dGF0dXMgJiBJV05fVFhfRkFJTCkgewogCQlpZnAtPmlmX29lcnJvcnMrKzsKKyNpZiAwCiAJCWll
ZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCSAgICBJRUVFODAyMTFfUkFU
RUNUTF9UWF9GQUlMVVJFLCAmYWNrZmFpbGNudCwgTlVMTCk7CisjZW5kaWYKKwkJaWVlZTgwMjEx
X3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21w
aWxlZC4gcWNjICovCiAJfSBlbHNlIHsKIAkJaWZwLT5pZl9vcGFja2V0cysrOworI2lmIDAKIAkJ
aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJICAgIElFRUU4MDIxMV9S
QVRFQ1RMX1RYX1NVQ0NFU1MsICZhY2tmYWlsY250LCBOVUxMKTsKKyNlbmRpZgorCQlpZWVlODAy
MTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNv
bXBpbGVkLiBxY2MgKi8KIAl9CiAJbV9mcmVlbShtKTsKIAlpZWVlODAyMTFfZnJlZV9ub2RlKG5p
KTsKSW5kZXg6IGRldi9id2kvaWZfYndpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2J3aS9pZl9id2ku
YwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2J3aS9pZl9id2kuYwkod29ya2luZyBjb3B5KQpA
QCAtNjE3LDcgKzYxNyw4IEBACiAjaWYgMAogCXZhcC0+aXZfdXBkYXRlX2JlYWNvbiA9IGJ3aV9i
ZWFjb25fdXBkYXRlOwogI2VuZGlmCi0JaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8q
IFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAw
KTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBi
d2lfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKQEAgLTMzNzcsOSArMzM3
OCwxMiBAQAogCQkJICogd2VsbCBzbyB0byBhdm9pZCBvdmVyLWFnZ3Jlc3NpdmUgZG93bnNoaWZ0
aW5nIHdlCiAJCQkgKiB0cmVhdCBhbnkgbnVtYmVyIG9mIHJldHJpZXMgYXMgIjEiLgogCQkJICov
CisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCSAg
ICAoZGF0YV90eGNudCA+IDEpID8gSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUyA6CiAJCQkg
ICAgICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsICZhY2tlZCwgTlVMTCk7CisjZW5k
aWYKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBq
dXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCQl9CiAKIAkJLyoKSW5kZXg6IGRldi9id24v
aWZfYnduLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2J3bi9pZl9id24uYwkocmV2aXNpb24gMjU0ODI2
KQorKysgZGV2L2J3bi9pZl9id24uYwkod29ya2luZyBjb3B5KQpAQCAtMjk3MCw3ICsyOTcwLDgg
QEAKIAkvKiBvdmVycmlkZSBtYXggYWlkIHNvIHN0YSdzIGNhbm5vdCBhc3NvYyB3aGVuIHdlJ3Jl
IG91dCBvZiBzdGEgaWQncyAqLwogCXZhcC0+aXZfbWF4X2FpZCA9IEJXTl9TVEFJRF9NQVg7CiAK
LQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2Fw
ICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCiAJLyogY29tcGxldGUgc2V0
dXAgKi8KIAlpZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2Us
CkBAIC04OTkxLDggKzg5OTIsOSBAQAogCXN0cnVjdCBid25fc3RhdHMgKnN0YXRzID0gJm1hYy0+
bWFjX3N0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmk7CiAJc3RydWN0IGllZWU4MDIx
MXZhcCAqdmFwOwotCWludCByZXRyeWNudCA9IDAsIHNsb3Q7Ci0KKwkvKmludCByZXRyeWNudCA9
IDAsIHNsb3Q7Ki8KKwlpbnQgc2xvdDsKKwkKIAlCV05fQVNTRVJUX0xPQ0tFRChtYWMtPm1hY19z
Yyk7CiAKIAlpZiAoc3RhdHVzLT5pbSkKQEAgLTkwMjAsMTEgKzkwMjIsMTQgQEAKIAkJCQlpZiAo
bWV0YS0+bXRfaXNsYXN0KSB7CiAJCQkJCW5pID0gbWV0YS0+bXRfbmk7CiAJCQkJCXZhcCA9IG5p
LT5uaV92YXA7CisjaWYgMAogCQkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAs
IG5pLAogCQkJCQkgICAgc3RhdHVzLT5hY2sgPwogCQkJCQkgICAgICBJRUVFODAyMTFfUkFURUNU
TF9UWF9TVUNDRVNTIDoKIAkJCQkJICAgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwK
IAkJCQkJICAgICZyZXRyeWNudCwgMCk7CisjZW5kaWYKKwkJCQkJaWVlZTgwMjExX3JhdGVjdGxf
dHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNj
ICovCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlzbG90ID0gYnduX2RtYV9uZXh0c2xvdChkciwg
c2xvdCk7CkBAIC05MDQxLDExICs5MDQ2LDE0IEBACiAJCQl9CiAJCQluaSA9IHRwLT50cF9uaTsK
IAkJCXZhcCA9IG5pLT5uaV92YXA7CisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t
cGxldGUodmFwLCBuaSwKIAkJCSAgICBzdGF0dXMtPmFjayA/CiAJCQkgICAgICBJRUVFODAyMTFf
UkFURUNUTF9UWF9TVUNDRVNTIDoKIAkJCSAgICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxV
UkUsCiAJCQkgICAgJnJldHJ5Y250LCAwKTsKKyNlbmRpZgorCQkJaWVlZTgwMjExX3JhdGVjdGxf
dHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNj
ICovCiAJCX0KIAkJYnduX3Bpb19oYW5kbGVfdHhlb2YobWFjLCBzdGF0dXMpOwogCX0KSW5kZXg6
IGRldi91c2Ivd2xhbi9pZl96eWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdXNiL3dsYW4vaWZfenlk
LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi91c2Ivd2xhbi9pZl96eWQuYwkod29ya2luZyBj
b3B5KQpAQCAtNDk2LDcgKzQ5Niw4IEBACiAJenZwLT5uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3c3Rh
dGU7CiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHp5ZF9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9yYXRl
Y3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAyMTFf
cmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJaWVlZTgwMjExX3JhdGVjdGxfc2V0aW50ZXJ2YWwodmFw
LCAxMDAwIC8qIDEgc2VjICovKTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCkBAIC02NjQsMTIg
KzY2NSwxNSBAQAogCQkJICovCiAJCQluaSA9IGllZWU4MDIxMV9maW5kX3R4bm9kZSh2YXAsIHJl
dHJ5LT5tYWNhZGRyKTsKIAkJCWlmIChuaSAhPSBOVUxMKSB7Ci0JCQkJaW50IHJldHJ5Y250ID0K
LQkJCQkgICAgKGludCkobGUxNnRvaChyZXRyeS0+Y291bnQpICYgMHhmZik7CisJCQkJLyppbnQg
cmV0cnljbnQgPQorCQkJCSAgICAoaW50KShsZTE2dG9oKHJldHJ5LT5jb3VudCkgJiAweGZmKTsq
LwogCQkJCQorI2lmIDAKIAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5p
LAogCQkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLAogCQkJCSAgICAmcmV0cnlj
bnQsIE5VTEwpOworI2VuZGlmCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFw
LCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCiAJCQkJaWVlZTgw
MjExX2ZyZWVfbm9kZShuaSk7CiAJCQl9CiAJCQlpZiAobGUxNnRvaChyZXRyeS0+Y291bnQpICYg
MHgxMDApCkluZGV4OiBkZXYvdXNiL3dsYW4vaWZfcnVtLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Vz
Yi93bGFuL2lmX3J1bS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvdXNiL3dsYW4vaWZfcnVt
LmMJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw3ICs2MTMsOCBAQAogCiAJdXNiX2NhbGxvdXRfaW5p
dF9tdHgoJnJ2cC0+cmF0ZWN0bF9jaCwgJnNjLT5zY19tdHgsIDApOwogCVRBU0tfSU5JVCgmcnZw
LT5yYXRlY3RsX3Rhc2ssIDAsIHJ1bV9yYXRlY3RsX3Rhc2ssIHJ2cCk7Ci0JaWVlZTgwMjExX3Jh
dGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIx
MV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRlcnZhbCh2
YXAsIDEwMDAgLyogMSBzZWMgKi8pOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjEx
X3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFf
c3RhdHVzKTsKSW5kZXg6IGRldi91c2Ivd2xhbi9pZl91cmFsLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2
L3VzYi93bGFuL2lmX3VyYWwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3VzYi93bGFuL2lm
X3VyYWwuYwkod29ya2luZyBjb3B5KQpAQCAtNTk4LDcgKzU5OCw4IEBACiAKIAl1c2JfY2FsbG91
dF9pbml0X210eCgmdXZwLT5yYXRlY3RsX2NoLCAmc2MtPnNjX210eCwgMCk7CiAJVEFTS19JTklU
KCZ1dnAtPnJhdGVjdGxfdGFzaywgMCwgdXJhbF9yYXRlY3RsX3Rhc2ssIHV2cCk7Ci0JaWVlZTgw
MjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWll
ZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRl
cnZhbCh2YXAsIDEwMDAgLyogMSBzZWMgKi8pOwogCiAJLyogY29tcGxldGUgc2V0dXAgKi8KSW5k
ZXg6IGRldi91c2Ivd2xhbi9pZl9ydW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdXNiL3dsYW4vaWZf
cnVuLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi91c2Ivd2xhbi9pZl9ydW4uYwkod29ya2lu
ZyBjb3B5KQpAQCAtODIwLDcgKzgyMCw4IEBACiAJcnZwLT5uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3
c3RhdGU7CiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHJ1bl9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9y
YXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAy
MTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJaWVlZTgwMjExX3JhdGVjdGxfc2V0aW50ZXJ2YWwo
dmFwLCAxMDAwIC8qIDEgc2VjICovKTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCkluZGV4OiBk
ZXYvd3BpL2lmX3dwaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi93cGkvaWZfd3BpLmMJKHJldmlzaW9u
IDI1NDgyNikKKysrIGRldi93cGkvaWZfd3BpLmMJKHdvcmtpbmcgY29weSkKQEAgLTc4Miw3ICs3
ODIsOCBAQAogCXd2cC0+bmV3c3RhdGUgPSB2YXAtPml2X25ld3N0YXRlOwogCXZhcC0+aXZfbmV3
c3RhdGUgPSB3cGlfbmV3c3RhdGU7CiAKLQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJ
LyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAs
IDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBp
ZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKIAlpYy0+aWNf
b3Btb2RlID0gb3Btb2RlOwpAQCAtMTU5Niw4ICsxNTk3LDExIEBACiAJCURQUklOVEZOKFdQSV9E
RUJVR19UWCwgKCIlZCByZXRyaWVzXG4iLCBzdGF0LT5udHJpZXMpKTsKIAkJcmV0cnljbnQgPSAx
OwogCX0KKyNpZiAwCiAJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgSUVF
RTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywKIAkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRp
ZgorCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0
IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCiAJLyogWFhYIG9lcnJvcnMgc2hvdWxkIG9ubHkg
Y291bnQgZXJyb3JzICFtYXh0cmllcyAqLwogCWlmICgobGUzMnRvaChzdGF0LT5zdGF0dXMpICYg
MHhmZikgIT0gMSkKSW5kZXg6IGRldi9yYWwvcnQyNTYwLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Jh
bC9ydDI1NjAuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3JhbC9ydDI1NjAuYwkod29ya2lu
ZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw4IEBACiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHJ0MjU2MF9u
ZXdzdGF0ZTsKIAl2YXAtPml2X3VwZGF0ZV9iZWFjb24gPSBydDI1NjBfYmVhY29uX3VwZGF0ZTsK
IAotCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBj
YXAgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJLyogY29tcGxldGUgc2V0
dXAgKi8KIAlpZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2Us
IGllZWU4MDIxMV9tZWRpYV9zdGF0dXMpOwogCWlmIChUQUlMUV9GSVJTVCgmaWMtPmljX3ZhcHMp
ID09IHZhcCkKQEAgLTk1NSw5ICs5NTYsMTMgQEAKIAogCQkJRFBSSU5URk4oc2MsIDEwLCAiJXNc
biIsICJkYXRhIGZyYW1lIHNlbnQgc3VjY2Vzc2Z1bGx5Iik7CiAJCQlpZiAoZGF0YS0+cml4ICE9
IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t
cGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisj
aWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCQkJICAg
IElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MsCiAJCQkJICAgICZyZXRyeWNudCwgTlVMTCk7
CisjZW5kaWYKKwogCQkJaWZwLT5pZl9vcGFja2V0cysrOwogCQkJYnJlYWs7CiAKQEAgLTk2Nyw5
ICs5NzIsMTIgQEAKIAkJCURQUklOVEZOKHNjLCA5LCAiZGF0YSBmcmFtZSBzZW50IGFmdGVyICV1
IHJldHJpZXNcbiIsCiAJCQkgICAgcmV0cnljbnQpOwogCQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVF
ODAyMTFfRklYRURfUkFURV9OT05FKQorCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl
KHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAK
IAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVF
ODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLAogCQkJCSAgICAmcmV0cnljbnQsIE5VTEwpOworI2Vu
ZGlmCiAJCQlpZnAtPmlmX29wYWNrZXRzKys7CiAJCQlicmVhazsKIApAQCAtOTc5LDkgKzk4Nywx
MiBAQAogCQkJRFBSSU5URk4oc2MsIDksICJkYXRhIGZyYW1lIGZhaWxlZCBhZnRlciAlZCByZXRy
aWVzXG4iLAogCQkJICAgIHJldHJ5Y250KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjEx
X0ZJWEVEX1JBVEVfTk9ORSkKKwkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAs
IG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJ
aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjEx
X1JBVEVDVExfVFhfRkFJTFVSRSwKIAkJCQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgog
CQkJaWZwLT5pZl9vZXJyb3JzKys7CiAJCQlicmVhazsKIApJbmRleDogZGV2L3JhbC9ydDI2NjEu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBkZXYvcmFsL3J0MjY2MS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBk
ZXYvcmFsL3J0MjY2MS5jCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNyArNDIzLDggQEAKIAl2YXAt
Pml2X3VwZGF0ZV9iZWFjb24gPSBydDI2NjFfYmVhY29uX3VwZGF0ZTsKICNlbmRpZgogCi0JaWVl
ZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLwor
CWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwog
CWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVlZTgw
MjExX21lZGlhX3N0YXR1cyk7CiAJaWYgKFRBSUxRX0ZJUlNUKCZpYy0+aWNfdmFwcykgPT0gdmFw
KQpAQCAtOTA1LDkgKzkwNiwxMiBAQAogCQkJRFBSSU5URk4oc2MsIDEwLCAiZGF0YSBmcmFtZSBz
ZW50IHN1Y2Nlc3NmdWxseSBhZnRlciAiCiAJCQkgICAgIiVkIHJldHJpZXNcbiIsIHJldHJ5Y250
KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjExX0ZJWEVEX1JBVEVfTk9ORSkKKwkJCQlp
ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtl
IGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t
cGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywKIAkJ
CQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5pZl9vcGFja2V0cysrOwog
CQkJYnJlYWs7CiAKQEAgLTkxNyw5ICs5MjEsMTIgQEAKIAkJCURQUklOVEZOKHNjLCA5LCAiJXNc
biIsCiAJCQkgICAgInNlbmRpbmcgZGF0YSBmcmFtZSBmYWlsZWQgKHRvbyBtdWNoIHJldHJpZXMp
Iik7CiAJCQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJ
aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFr
ZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2Nv
bXBsZXRlKHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsCiAJ
CQkJICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlmcC0+aWZfb2Vycm9ycysrOwog
CQkJYnJlYWs7CiAKSW5kZXg6IGRldi9yYWwvcnQyODYwLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Jh
bC9ydDI4NjAuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3JhbC9ydDI4NjAuYwkod29ya2lu
ZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw4IEBACiAJLyogSFcgc3VwcG9ydHMgdXAgdG8gMjU1IFNU
QXMgKDAtMjU0KSBpbiBIb3N0QVAgYW5kIElCU1MgbW9kZXMgKi8KIAl2YXAtPml2X21heF9haWQg
PSBtaW4oSUVFRTgwMjExX0FJRF9NQVgsIFJUMjg2MF9XQ0lEX01BWCk7CiAKLQlpZWVlODAyMTFf
cmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgw
MjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgw
MjExX3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVk
aWFfc3RhdHVzKTsKIAlpZiAoVEFJTFFfRklSU1QoJmljLT5pY192YXBzKSA9PSB2YXApCkBAIC0x
MTIxLDExICsxMTIyLDE3IEBACiAJCQkJcmV0cnljbnQgPSAxOwogCQkJZWxzZQogCQkJCXJldHJ5
Y250ID0gMDsKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5p
LCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQlpZWVl
ODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwKIAkJCSAgICBJRUVFODAy
MTFfUkFURUNUTF9UWF9TVUNDRVNTLCAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCiAJCX0gZWxz
ZSB7CisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgTlVM
TCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJaWVlZTgwMjEx
X3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksCiAJCQkgICAgSUVFRTgwMjExX1JB
VEVDVExfVFhfRkFJTFVSRSwgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5pZl9v
ZXJyb3JzKys7CiAJCX0KIAl9CkluZGV4OiBkZXYvYXRoL2lmX2F0aF9zeXNjdGwuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkZXYvYXRoL2lmX2F0aF9zeXNjdGwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2
L2F0aC9pZl9hdGhfc3lzY3RsLmMJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAKIAog
I2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9p
ZWVlODAyMTFfcmVnZG9tYWluLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVj
dGwuaD4KICNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIx
MS9pZWVlODAyMTFfc3VwZXJnLmg+CiAjZW5kaWYKQEAgLTYwMiw2ICs2MDMsMjggQEAKIH0KICNl
bmRpZiAvKiBBVEhfREVCVUdfQUxRICovCiAKK3N0YXRpYyBpbnQKK2F0aF9zeXNjdGxfcmF0ZWN0
bF9zdGF0cyhTWVNDVExfSEFORExFUl9BUkdTKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0g
YXJnMTsKKwlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHNjLT5zY19pZnAtPmlmX2wyY29tOyAK
KwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXA7CisJaW50IGVycm9yLCB2OworCisJdiA9IDA7CisJ
ZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmdiwgMCwgcmVxKTsKKwlpZiAoZXJyb3Ig
fHwgIXJlcS0+bmV3cHRyKQorCQlyZXR1cm4gZXJyb3I7CisKKwlwcmludGYoIlxuWyVzXTogcGVy
LWRldmljZSBuZXQ4MDIxMSByYXRlY3RsIHN0YXRpc3RpY3NcbiIsIAorCQkJaWMtPmljX2lmcC0+
aWZfeG5hbWUpOworCVRBSUxRX0ZPUkVBQ0godmFwLCAmaWMtPmljX3ZhcHMsIGl2X25leHQpIHsK
KwkJaWVlZTgwMjExX3JhdGVjdGxfc3RhdHModmFwKTsKKwl9CisJCQorCXJldHVybiAwOworfQor
CiB2b2lkCiBhdGhfc3lzY3RsYXR0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewpAQCAtNzky
LDYgKzgxNSwxMCBAQAogI2lmZGVmCUFUSF9ERUJVR19BTFEKIAlhdGhfc3lzY3RsX2FscV9hdHRh
Y2goc2MpOwogI2VuZGlmCisJCisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgU1lTQ1RMX0NISUxEUkVO
KHRyZWUpLCBPSURfQVVUTywKKwkJInJhdGVjdGxfc3RhdHMiLCBDVExUWVBFX0lOVCB8IENUTEZM
QUdfUlcsIHNjLCAwLAorCQlhdGhfc3lzY3RsX3JhdGVjdGxfc3RhdHMsICJJIiwgInBlci1kZXZp
Y2UgbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0aWNzIik7CiB9CiAKIHN0YXRpYyBpbnQKSW5kZXg6
IGRldi9hdGgvaWZfYXRoX3R4X2h0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2F0aC9pZl9hdGhfdHhf
aHQuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2F0aC9pZl9hdGhfdHhfaHQuYwkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQAogCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjEx
X3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yZWdkb21haW4uaD4KKworI2lu
Y2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CiAjaWZkZWYgSUVFRTgwMjExX1NV
UFBPUlRfU1VQRVJHCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3N1cGVyZy5oPgogI2Vu
ZGlmCkBAIC0yMjEsMTMgKzIyMyw0NyBAQAogdm9pZAogYXRoX3R4X3JhdGVfZmlsbF9yY2ZsYWdz
KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7Ci0Jc3RydWN0IGll
ZWU4MDIxMV9ub2RlICpuaSA9IGJmLT5iZl9ub2RlOwotCXN0cnVjdCBpZWVlODAyMTFjb20gKmlj
ID0gbmktPm5pX2ljOworCS8vIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9k
ZTsKKwkvLyBzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKIAljb25zdCBIQUxf
UkFURV9UQUJMRSAqcnQgPSBzYy0+c2NfY3VycmF0ZXM7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMg
KnJjID0gYmYtPmJmX3N0YXRlLmJmc19yYzsKKwlzdHJ1Y3QgYXRoX3JjX3NlcmllcyAqYXRoX3Jj
ID0gYmYtPmJmX3N0YXRlLmJmc19yYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2lu
Zm8gPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfcmNfc2VyaWVzICpyYyA9IE5VTEw7CisJc3Ry
dWN0IG1fdGFnICptdGFnOwogCXVpbnQ4X3QgcmF0ZTsKIAlpbnQgaTsKIAorCW10YWcgPSBtX3Rh
Z19sb2NhdGUoYmYtPmJmX20sIE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5FVDgwMjExX1RBR19S
QVRFQ1RMLCBOVUxMKTsKKwlpZiAoTlVMTCA9PSBtdGFnKQorCQlyZXR1cm47CisKKwlyY19pbmZv
ID0gKHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyopKG10YWcgKyAxKTsKKwlyYyA9IHJjX2luZm8t
PmlyaV9yYzsKKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykg
eworCQlpZiAocmNbaV0udHJpZXMgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXJhdGUgPSBydC0+
aW5mb1tyY1tpXS5yaXhdLnJhdGVDb2RlOworCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAyMTFf
UkFURUNUTF9GTEFHX1NQKQorCQkJcmF0ZSB8PSBydC0+aW5mb1tyY1tpXS5yaXhdLnNob3J0UHJl
YW1ibGU7CisKKwkJcmNbaV0ucmF0ZWNvZGUgPSByYXRlOworCisJCWF0aF9yY1tpXS5yaXggPSBy
Y1tpXS5yaXg7CisJCWF0aF9yY1tpXS50cmllcyA9IHJjW2ldLnRyaWVzOworCQlhdGhfcmNbaV0u
ZmxhZ3MgPSByY1tpXS5mbGFnczsKKwkJYXRoX3JjW2ldLnJhdGVjb2RlID0gcmNbaV0ucmF0ZWNv
ZGU7CisJCWF0aF9yY1tpXS50eF9wb3dlcl9jYXAgPSByY1tpXS50eF9wb3dlcl9jYXA7CisJCWF0
aF9yY1tpXS5tYXg0bXNmcmFtZWxlbiA9IHJjW2ldLm1heDRtc2ZyYW1lbGVuOworCQkKKwkJRFBS
SU5URihzYywgQVRIX0RFQlVHX1NXX1RYX0FHR1IsCisJCSAgICAiJXM6IGk9JWQsIHJhdGU9MHgl
eCwgZmxhZ3M9MHgleCwgbWF4NG1zPSVkXG4iLAorCQkgICAgX19mdW5jX18sIGksIHJhdGUsIHJj
W2ldLmZsYWdzLCByY1tpXS5tYXg0bXNmcmFtZWxlbik7CisJfQorCisjaWYgMAogCWZvciAoaSA9
IDA7IGkgPCBBVEhfUkNfTlVNOyBpKyspIHsKIAkJcmNbaV0uZmxhZ3MgPSAwOwogCQlpZiAocmNb
aV0udHJpZXMgPT0gMCkKQEAgLTMyNSw2ICszNjEsNyBAQAogCQkgICAgIiVzOiBpPSVkLCByYXRl
PTB4JXgsIGZsYWdzPTB4JXgsIG1heDRtcz0lZFxuIiwKIAkJICAgIF9fZnVuY19fLCBpLCByYXRl
LCByY1tpXS5mbGFncywgcmNbaV0ubWF4NG1zZnJhbWVsZW4pOwogCX0KKyNlbmRpZgogfQogCiAv
KgpJbmRleDogZGV2L2F0aC9pZl9hdGhfdHguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvYXRoL2lmX2F0
aF90eC5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvYXRoL2lmX2F0aF90eC5jCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw2ICs3Miw4IEBACiAKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFf
dmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2RvbWFpbi5oPgorCisjaW5j
bHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KICNpZmRlZiBJRUVFODAyMTFfU1VQ
UE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmg+CiAjZW5k
aWYKQEAgLTEzODcsNiArMTM4OSw5IEBACiBzdGF0aWMgdm9pZAogYXRoX3R4X2RvX3JhdGVsb29r
dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKKwlzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7CisJc3RydWN0IGllZWU4MDIxMV9yY19p
bmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMgPSBO
VUxMOwogCXVpbnQ4X3QgcmF0ZSwgcml4OwogCWludCB0cnkwOwogCkBAIC0xMzk1LDcgKzE0MDAs
NyBAQAogCiAJLyogR2V0IHJpZCBvZiBhbnkgcHJldmlvdXMgc3RhdGUgKi8KIAliemVybyhiZi0+
YmZfc3RhdGUuYmZzX3JjLCBzaXplb2YoYmYtPmJmX3N0YXRlLmJmc19yYykpOwotCisjaWYgMAog
CUFUSF9OT0RFX0xPQ0soQVRIX05PREUoYmYtPmJmX25vZGUpKTsKIAlhdGhfcmF0ZV9maW5kcmF0
ZShzYywgQVRIX05PREUoYmYtPmJmX25vZGUpLCBiZi0+YmZfc3RhdGUuYmZzX3NocHJlYW0sCiAJ
ICAgIGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLCAmcml4LCAmdHJ5MCwgJnJhdGUpOwpAQCAtMTQw
OSw3ICsxNDE0LDI1IEBACiAJCWF0aF9yYXRlX2dldHh0eHJhdGVzKHNjLCBBVEhfTk9ERShiZi0+
YmZfbm9kZSksIHJpeCwKIAkJICAgIGJmLT5iZl9zdGF0ZS5iZnNfcmMpOwogCUFUSF9OT0RFX1VO
TE9DSyhBVEhfTk9ERShiZi0+YmZfbm9kZSkpOworI2VuZGlmCiAKKwkvKiBuZXQ4MDIxMSByYXRl
Y3RsICovCisJcmNfaW5mbyA9IGllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fZ2V0KG5pLCBiZi0+
YmZfbSk7CisJcmMgPSByY19pbmZvLT5pcmlfcmM7CisJCisJcmNfaW5mby0+aXJpX2ZsYWdzID0g
MDsKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19zaHByZWFtKQorCQlyY19pbmZvLT5pcmlfZmxhZ3Mg
fD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19TUDsKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19hZ2dy
KQorCQlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOwor
CXJjX2luZm8tPmlyaV9mcmFtZWxlbiA9IGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuOworCisJaWVl
ZTgwMjExX3JhdGVjdGxfcmF0ZXMobmksIHJjX2luZm8pOworCisJcml4ID0gcmNbMF0ucml4Owor
CXRyeTAgPSByY1swXS50cmllczsKKwlyYXRlID0gbmktPm5pX3R4cmF0ZTsKKwogCXNjLT5zY190
eHJpeCA9IHJpeDsJLyogZm9yIExFRCBibGlua2luZyAqLwogCXNjLT5zY19sYXN0ZGF0YXJpeCA9
IHJpeDsJLyogZm9yIGZhc3QgZnJhbWVzICovCiAJYmYtPmJmX3N0YXRlLmJmc190cnkwID0gdHJ5
MDsKQEAgLTE1MzAsNyArMTU1Myw4IEBACiAJICogZnJhbWVzIHRoYXQgbXVzdCBnbyBvdXQgLSBl
ZyBtYW5hZ2VtZW50L3JhdyBmcmFtZXMuCiAJICovCiAJYmYtPmJmX3N0YXRlLmJmc190eGZsYWdz
IHw9IEhBTF9UWERFU0NfQ0xSRE1BU0s7Ci0KKwkKKwliZi0+YmZfc3RhdGUuYmZzX2FnZ3IgPSAw
OwogCS8qIFNldHVwIHRoZSBkZXNjcmlwdG9yIGJlZm9yZSBoYW5kb2ZmICovCiAJYXRoX3R4X2Rv
X3JhdGVsb29rdXAoc2MsIGJmKTsKIAlhdGhfdHhfY2FsY19kdXJhdGlvbihzYywgYmYpOwpAQCAt
NDA1OCw2ICs0MDgyLDcgQEAKIAlpbnQgdGlkID0gYmYtPmJmX3N0YXRlLmJmc190aWQ7CiAJc3Ry
dWN0IGF0aF90aWQgKmF0aWQgPSAmYW4tPmFuX3RpZFt0aWRdOwogCXN0cnVjdCBhdGhfdHhfc3Rh
dHVzICp0cyA9ICZiZi0+YmZfc3RhdHVzLmRzX3R4c3RhdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Jj
X2luZm8gKnJjX2luZm8gPSBOVUxMOwogCiAJLyogVGhlIFRJRCBzdGF0ZSBpcyBwcm90ZWN0ZWQg
YmVoaW5kIHRoZSBUWFEgbG9jayAqLwogCUFUSF9UWF9MT0NLKHNjKTsKQEAgLTQxMDgsOSArNDEz
MywyMyBAQAogCSAqIGR1cmluZyBhIGh3IHF1ZXVlIGRyYWluIGFuZCB0aGUgZnJhbWUgd2FudGVk
IGFuIEFDSy4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwICYmICgoYmYtPmJmX3N0YXRlLmJmc190eGZs
YWdzICYgSEFMX1RYREVTQ19OT0FDSykgPT0gMCkpCisJeworI2lmIDAKIAkJYXRoX3R4X3VwZGF0
ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNfcmMsCiAJCSAgICB0cywgYmYtPmJm
X3N0YXRlLmJmc19wa3RsZW4sCiAJCSAgICAxLCAodHMtPnRzX3N0YXR1cyA9PSAwKSA/IDAgOiAx
KTsKKyNlbmRpZgorCQorCQkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJCXJjX2luZm8gPSBpZWVl
ODAyMTFfcmF0ZWN0bF9yY19pbmZvX2dldChuaSwgYmYtPmJmX20pOworCQlpZWVlODAyMTFfcmF0
ZWN0bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCTEsICh0cy0+dHNfc3RhdHVzID09IDAgPyAw
IDogMSksIAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAorCQkJCXRzLT50c19zaG9ydHJl
dHJ5LCB0cy0+dHNfbG9uZ3JldHJ5LAorCQkJCXRzLT50c19maW5hbHRzaSwgdHMtPnRzX3JhdGUp
OworCQlyY19pbmZvLT5pcmlfZmxhZ3MgJj0gfklFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdHUjsJ
CisJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZv
KTsKKwl9CiAKIAlhdGhfdHhfZGVmYXVsdF9jb21wKHNjLCBiZiwgZmFpbCk7CiB9CkBAIC00NDc1
LDYgKzQ1MTQsOCBAQAogCWludCBkcm9wcyA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV90eF9hbXBk
dSAqdGFwOwogCWF0aF9idWZoZWFkIGJmX2NxOworCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzID0g
YmZfZmlyc3QtPmJmX3N0YXR1cy5kc190eHN0YXQ7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZv
ICpyY19pbmZvID0gTlVMTDsKIAogCVRBSUxRX0lOSVQoJmJmX3EpOwogCVRBSUxRX0lOSVQoJmJm
X2NxKTsKQEAgLTQ0ODUsMTAgKzQ1MjYsMjMgQEAKIAkgKiBYWFggdXNlIHRoZSBsZW5ndGggaW4g
dGhlIGZpcnN0IGZyYW1lIGluIHRoZSBzZXJpZXM7CiAJICogWFhYIGp1c3Qgc28gdGhpbmdzIGFy
ZSBjb25zaXN0ZW50IGZvciBub3cuCiAJICovCisjaWYgMAogCWF0aF90eF91cGRhdGVfcmF0ZWN0
cmwoc2MsIG5pLCBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX3JjLAogCSAgICAmYmZfZmlyc3QtPmJm
X3N0YXR1cy5kc190eHN0YXQsCiAJICAgIGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAog
CSAgICBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsIGJmX2ZpcnN0LT5iZl9zdGF0ZS5i
ZnNfbmZyYW1lcyk7CisjZW5kaWYKKwkKKwkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJcmNfaW5m
byA9IGllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fZ2V0KG5pLCBiZl9maXJzdC0+YmZfbSk7CisJ
aWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCWJmX2ZpcnN0LT5iZl9z
dGF0ZS5iZnNfbmZyYW1lcywgCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsCisJ
CQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCXRzLnRzX3Nob3J0cmV0cnksIHRz
LnRzX2xvbmdyZXRyeSwKKwkJCXRzLnRzX2ZpbmFsdHNpLCB0cy50c19yYXRlKTsKKwlyY19pbmZv
LT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCWllZWU4MDIxMV9y
YXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsKIAogCUFUSF9UWF9M
T0NLKHNjKTsKIAl0YXAgPSBhdGhfdHhfZ2V0X3R4X3RpZChhbiwgdGlkLT50aWQpOwpAQCAtNDYy
Niw5ICs0NjgwLDEyIEBACiAJaW50IG5mcmFtZXMgPSAwLCBuYmFkID0gMCwgbmY7CiAJaW50IHBr
dGxlbjsKIAkvKiBYWFggdGhlcmUncyB0b28gbXVjaCBvbiB0aGUgc3RhY2s/ICovCisjaWYgMAog
CXN0cnVjdCBhdGhfcmNfc2VyaWVzIHJjW0FUSF9SQ19OVU1dOworI2VuZGlmCiAJaW50IHR4c2Vx
OwotCisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3Qg
bWJ1ZiAqbTsKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfU1dfVFhfQUdHUiwgIiVzOiBjYWxsZWQ7
IGh3cV9kZXB0aD0lZFxuIiwKIAkgICAgX19mdW5jX18sIGF0aWQtPmh3cV9kZXB0aCk7CiAKQEAg
LTQ3NDgsNyArNDgwNSw3IEBACiAJaXNhZ2dyID0gYmZfZmlyc3QtPmJmX3N0YXRlLmJmc19hZ2dy
OwogCWJhWzBdID0gdHMudHNfYmFfbG93OwogCWJhWzFdID0gdHMudHNfYmFfaGlnaDsKLQorI2lm
IDAKIAkvKgogCSAqIENvcHkgdGhlIFRYIGNvbXBsZXRpb24gc3RhdHVzIGFuZCB0aGUgcmF0ZSBj
b250cm9sCiAJICogc2VyaWVzIGZyb20gdGhlIGZpcnN0IGRlc2NyaXB0b3IsIGFzIGl0IG1heSBi
ZSBmcmVlZApAQCAtNDc1Niw2ICs0ODEzLDExIEBACiAJICogaW50byB0aGluZ3MuCiAJICovCiAJ
bWVtY3B5KHJjLCBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX3JjLCBzaXplb2YocmMpKTsKKyNlbmRp
ZgorCS8qIAorCSAqIEdldCB0aGUgbWJ1ZiBoZXJlLCBhcyBiZl9maXJzdCB3aWxsIGJlIHNldCB0
byBOVUxMIGxhdGVyLiAKKwkgKi8KKwltID0gYmZfZmlyc3QtPmJmX207IAogCiAJRFBSSU5URihz
YywgQVRIX0RFQlVHX1NXX1RYX0FHR1IsCiAJICAgICIlczogdHhhX3N0YXJ0PSVkLCB0eF9vaz0l
ZCwgc3RhdHVzPSUuOHgsIGZsYWdzPSUuOHgsICIKQEAgLTQ4NzMsOCArNDkzNSwyMCBAQAogCSAq
IGNvbnRyb2wgY29kZS4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwKQorCXsKKyNpZiAwCQogCQlhdGhf
dHhfdXBkYXRlX3JhdGVjdHJsKHNjLCBuaSwgcmMsICZ0cywgcGt0bGVuLCBuZnJhbWVzLAogCQkg
ICAgbmJhZCk7CisjZW5kaWYKKwkJLyogbmV0ODAyMTEgcmF0ZWN0bCAqLworCQlyY19pbmZvID0g
aWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIG0pOworCQlpZWVlODAyMTFfcmF0ZWN0
bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCQluZnJhbWVzLCBuYmFkLCBwa3RsZW4sCisJCQkJ
CXRzLnRzX3Nob3J0cmV0cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCQkJdHMudHNfZmluYWx0c2ks
IHRzLnRzX3JhdGUpOworCQlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExf
SU5GT19BR0dSOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBu
aSwgcmNfaW5mbyk7CisJfQogCiAJLyoKIAkgKiBzZW5kIGJhciBpZiB3ZSBkcm9wcGVkIGFueSBm
cmFtZXMKQEAgLTQ5NDgsNiArNTAyMiw3IEBACiAJc3RydWN0IGF0aF90aWQgKmF0aWQgPSAmYW4t
PmFuX3RpZFt0aWRdOwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzOwogCWludCBkcm9wcyA9IDA7
CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKIAogCS8qCiAJICog
VGFrZSBhIGNvcHkgb2YgdGhpczsgZmlsdGVyaW5nL2Nsb25pbmcgdGhlIGZyYW1lIG1heSBmcmVl
IHRoZQpAQCAtNDk2MiwxMSArNTAzNywyMiBAQAogCSAqIERvIGl0IG91dHNpZGUgb2YgdGhlIFRY
USBsb2NrLgogCSAqLwogCWlmIChmYWlsID09IDAgJiYgKChiZi0+YmZfc3RhdGUuYmZzX3R4Zmxh
Z3MgJiBIQUxfVFhERVNDX05PQUNLKSA9PSAwKSkKKwl7CisjaWYgMAkKIAkJYXRoX3R4X3VwZGF0
ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNfcmMsCiAJCSAgICAmYmYtPmJmX3N0
YXR1cy5kc190eHN0YXQsCiAJCSAgICBiZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKIAkJICAgIDEs
ICh0cy50c19zdGF0dXMgPT0gMCkgPyAwIDogMSk7Ci0KKyNlbmRpZgorCQlyY19pbmZvID0gaWVl
ZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIGJmLT5iZl9tKTsKKwkJaWVlZTgwMjExX3Jh
dGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkxLCAodHMudHNfc3RhdHVzID09IDAgPyAw
IDogMSksIAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAorCQkJCXRzLnRzX3Nob3J0cmV0
cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCQl0cy50c19maW5hbHRzaSwgdHMudHNfcmF0ZSk7CisJ
CXJjX2luZm8tPmlyaV9mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCQlp
ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgcmNfaW5mbyk7CisJ
fQogCS8qCiAJICogVGhpcyBpcyBjYWxsZWQgZWFybHkgc28gYXRpZC0+aHdxX2RlcHRoIGNhbiBi
ZSB0cmFja2VkLgogCSAqIFRoaXMgdW5mb3J0dW5hdGVseSBtZWFucyB0aGF0IGl0J3MgcmVsZWFz
ZWQgYW5kIHJlZ3JhYmJlZApAQCAtNTE4Myw2ICs1MjY5LDE1IEBACiAJCX0KIAogCQkvKgorCQkg
KiBJZiBub24tYWdncmVnYXRlIHNjZW5hcmlvIGFwcGVhcnMsIHRoaXMgd2lsbCBiZSAKKwkJICog
dHVybmVkIG9mZi4KKwkJICoKKwkJICogVGhpcyBmbGFnIGlzIHVzZWQgYnkgYXRoX3R4X2RvX3Jh
dGVsb29rdXAoKSB0byAKKwkJICogZGlzdGluZ3Vpc2ggYWdnci9ub24tYWdnciBzY2VuYXJpby4g
IAorCQkgKi8KKwkJYmYtPmJmX3N0YXRlLmJmc19hZ2dyID0gMTsKKworCQkvKgogCQkgKiBJZiB0
aGUgcGFja2V0IGRvZXNuJ3QgZmFsbCB3aXRoaW4gdGhlIEJBVyAoZWcgYSBOVUxMCiAJCSAqIGRh
dGEgZnJhbWUpLCBzY2hlZHVsZSBpdCBkaXJlY3RseTsgY29udGludWUuCiAJCSAqLwpAQCAtNTQy
NSw2ICs1NTIwLDcgQEAKIAkJLyogVXBkYXRlIENMUkRNQVNLIGp1c3QgYmVmb3JlIHRoaXMgZnJh
bWUgaXMgcXVldWVkICovCiAJCWF0aF90eF91cGRhdGVfY2xyZG1hc2soc2MsIHRpZCwgYmYpOwog
CisJCWJmLT5iZl9zdGF0ZS5iZnNfYWdnciA9IDA7IAogCQkvKiBQcm9ncmFtIGRlc2NyaXB0b3Jz
ICsgcmF0ZSBjb250cm9sICovCiAJCWF0aF90eF9kb19yYXRlbG9va3VwKHNjLCBiZik7CiAJCWF0
aF90eF9jYWxjX2R1cmF0aW9uKHNjLCBiZik7CkluZGV4OiBkZXYvYXRoL2lmX2F0aC5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGRldi9hdGgvaWZfYXRoLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi9hdGgv
aWZfYXRoLmMJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAKIAogI2luY2x1ZGUgPG5l
dDgwMjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVn
ZG9tYWluLmg+CisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2lm
ZGVmIElFRUU4MDIxMV9TVVBQT1JUX1NVUEVSRwogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIx
MV9zdXBlcmcuaD4KICNlbmRpZgpAQCAtMzIyLDYgKzMyNCw3IEBACiAJc2MtPnNjX2FoID0gYWg7
CiAJc2MtPnNjX2ludmFsaWQgPSAwOwkvKiByZWFkeSB0byBnbywgZW5hYmxlIGludGVycnVwdCBo
YW5kbGluZyAqLwogI2lmZGVmCUFUSF9ERUJVRworCWF0aF9kZWJ1ZyB8PSBBVEhfREVCVUdfTk9E
RTsgCiAJc2MtPnNjX2RlYnVnID0gYXRoX2RlYnVnOwogI2VuZGlmCiAKQEAgLTEzODAsNiArMTM4
MywxNiBAQAogCX0KIAlBVEhfVU5MT0NLKHNjKTsKIAorCXVpbnQzMl90IGNhcHMgPSAwOworCWlm
IChzYy0+c2NfbXJyZXRyeSkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSOwor
CWlmIChzYy0+c2NfbXJycHJvdCkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJS
UFJPVDsKKwlpZiAoc2MtPnNjX3R4Y2hhaW5tYXNrID4gMSkKKwkJY2FwcyB8PSBJRUVFODAyMTFf
UkFURUNUTF9DQVBfTVVMVFhDSEFJTjsKKworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCBj
YXBzKTsKKwkKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZh
cCwgYXRoX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJcmV0dXJuIHZh
cDsKQEAgLTE0MTQsNiArMTQyNyw3IEBACiAJCWF0aF9zdG9wcmVjdihzYywgMSk7CQkvKiBzdG9w
IHJlY3Ygc2lkZSAqLwogCX0KIAorCWllZWU4MDIxMV9yYXRlY3RsX2RlaW5pdCh2YXApOwogCWll
ZWU4MDIxMV92YXBfZGV0YWNoKHZhcCk7CiAKIAkvKgpAQCAtNDA0Miw2ICs0MDU2LDcgQEAKIHsK
IAlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7CiAJc3RydWN0IGF0aF9u
b2RlICphbiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVM
TDsKIAogCUFUSF9UWF9VTkxPQ0tfQVNTRVJUKHNjKTsKIAlBVEhfVFhRX1VOTE9DS19BU1NFUlQo
dHhxKTsKQEAgLTQwNjgsMTAgKzQwODMsMjEgQEAKIAkJCSAqIFhYWCBhc3N1bWUgdGhpcyBpc24n
dCBhbiBhZ2dyZWdhdGUKIAkJCSAqIGZyYW1lLgogCQkJICovCisjaWYgMAogCQkJYXRoX3R4X3Vw
ZGF0ZV9yYXRlY3RybChzYywgbmksCiAJCQkgICAgIGJmLT5iZl9zdGF0ZS5iZnNfcmMsIHRzLAog
CQkJICAgIGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLCAxLAogCQkJICAgICh0cy0+dHNfc3RhdHVz
ID09IDAgPyAwIDogMSkpOworI2VuZGlmCisJCQkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJCQly
Y19pbmZvID0gaWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIGJmLT5iZl9tKTsKKwkJ
CWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8sCisJCQkJCTEsICh0cy0+dHNf
c3RhdHVzID09IDAgPyAwIDogMSksIAorCQkJCQliZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJ
CQkJdHMtPnRzX3Nob3J0cmV0cnksIHRzLT50c19sb25ncmV0cnksCisJCQkJCXRzLT50c19maW5h
bHRzaSwgdHMtPnRzX3JhdGUpOworCQkJcmNfaW5mby0+aXJpX2ZsYWdzICY9IH5JRUVFODAyMTFf
UkFURUNUTF9JTkZPX0FHR1I7CQorCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmkt
Pm5pX3ZhcCwgbmksIHJjX2luZm8pOwogCQl9CiAJCWF0aF90eF9kZWZhdWx0X2NvbXAoc2MsIGJm
LCAwKTsKIAl9IGVsc2UKQEAgLTU1NzQsOSArNTYwMCwxNSBAQAogCiAJYW4tPmFuX21jYXN0cml4
ID0gYXRoX3R4X2ZpbmRyaXgoc2MsIHRwLT5tY2FzdHJhdGUpOwogCWFuLT5hbl9tZ210cml4ID0g
YXRoX3R4X2ZpbmRyaXgoc2MsIHRwLT5tZ210cmF0ZSk7Ci0KKyNpZiAwCiAJYXRoX3JhdGVfbmV3
YXNzb2Moc2MsIGFuLCBpc25ldyk7CisjZW5kaWYKIAorCURQUklOVEYoc2MsIEFUSF9ERUJVR19O
T0RFLCAiJXM6IG5ld2Fzc29jIGlzIG5ldzogJWRcbiIsCisJCQlfX2Z1bmNfXywgaXNuZXcpOwor
CWlmIChpc25ldykKKwkJaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pbml0KG5pKTsKKwogCWlmIChp
c25ldyAmJgogCSAgICAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1BSSVZBQ1kpID09IDAg
JiYgc2MtPnNjX2hhc2NscmtleSAmJgogCSAgICBuaS0+bmlfdWNhc3RrZXkud2tfa2V5aXggPT0g
SUVFRTgwMjExX0tFWUlYX05PTkUpCg==
--089e013a132afd7f2f04e6643d3a--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFnsE3fnApV_=FNggEuhy1B=idXLxgymqqmJ=9XXrjspLoe%2BWA>