Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Mar 2014 11:34:25 -0300
From:      Luiz Otavio O Souza <lists.br@gmail.com>
To:        Warner Losh <imp@bsdimp.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: [RFC] lm75 kernel driver and bsnmp module
Message-ID:  <CAB=2f8zo2gpHmUHsW9EnuZ9QK9k1jwgipg4FQCMSHt53hvnihw@mail.gmail.com>
In-Reply-To: <4B0E494C-A289-435C-89AA-29DEB1A4EAD9@gmail.com>
References:  <CAB=2f8wqTqQekBPRGdG%2BBqTn-yt1BX-3DW6K5HBt2jptc4g4-g@mail.gmail.com> <4B0E494C-A289-435C-89AA-29DEB1A4EAD9@gmail.com>

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

On 18 March 2014 11:26, Warner Losh wrote:
>
> On Mar 17, 2014, at 8:11 AM, Luiz Otavio O Souza wrote:
>
>> <lm75.diff>
>
> +#ifdef FDT
> +static struct ofw_compat_data compat_data[] = {
> +       { "freebsd,lm75",       HWTYPE_LM75 },
> +       { "freebsd,lm75a",      HWTYPE_LM75A },
> +       { NULL,                 HWTYPE_NONE },
> +};
> +#endif
>
> Is there a FDT standard here? It seems like they would fall under the
> "national,lm75" bindings that are defined in the "standard" FDT spec. You
> can find it listed in the 'device-tree/Bindings/i2c/trivial-devices.txt' file in
> Linux, or in a similar location in the device-tree vendor tree in FreeBSD.

Thanks for pointing it, i wasn't aware of this 'standard' spec.

>
> It isn't clear that both devices can't be handled with the same driver, since
> the extra bits are supposed to be clear and so the extra if's here:
>
> +       if (sc->sc_hwtype == HWTYPE_LM75A) {
> +               if (buf & LM75_0125C)
> +                       t += 125;
> +               if (buf & LM75_0250C)
> +                       t += 250;
> +       }
> +       if (buf & LM75_0500C)
> +               t += 500;
>
> which just leaves device type reporting. The only reason I mention is is that
> Linux doesn't seem to differentiate the two at the FDT level.

Yes it is not done at the FDT level, i'm not familiar with linux here,
but looks like you can specify the device type at lm-sensors layer.

With this they support all the lm75 clones and similar ICs in the same
driver, but only for the original lm75s they have a auto-detect
feature which differentiate the two versions of lm75.

I'll try to follow linux here, using the standard 'national,lm75' and
auto-detect the chip type as it seems to be quite straightforward.

>
> +       sc->sc_hwtype = ofw_bus_search_compatible(dev, compat_data)->ocd_data;
>
> I don't think that the NULL binding is guaranteed to work that way, so
> I'd suggest dropping the NULL line above and testing explicitly for NULL
> here instead.

ofw_bus_search_compatible() will loop over the compat_data entries
until it find the NULL entry and then return.  Dropping the NULL line
would make it loop indefinitely.

>
> Finally, is pausing for hz on read/write errors the right thing to do? Seems like a very
> long time...

Yes, that was wrong and as i never seen any fail at that point i
removed all the retry code. I2C transfers seems to be quite reliable
on the systems i've been working.

New patch attached. I've changed the compat string to the standard
'national,lm75', removed the retry code and add and auto-detect
routine to identify the LM75 model. It seems to work fine (i have a
test-bed with two lm75 and one lm75a on the same i2c bus).

Thank you for your comments.

Luiz

--001a11c266c465a18604f5977b8d
Content-Type: text/plain; charset=US-ASCII; name="lm75.diff"
Content-Disposition: attachment; filename="lm75.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hta4u6px0

SW5kZXg6IHN5cy9jb25mL2ZpbGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9jb25mL2ZpbGVzCShyZXZp
c2lvbiAyNjM3NDApCisrKyBzeXMvY29uZi9maWxlcwkod29ya2luZyBjb3B5KQpAQCAtMTQ0NSw2
ICsxNDQ1LDcgQEAKIGRldi9paWNidXMvaWljc21iLmMJCW9wdGlvbmFsIGlpY3NtYgkJCQlcCiAJ
ZGVwZW5kZW5jeQkiaWljYnVzX2lmLmgiCiBkZXYvaWljYnVzL2lpY29jLmMJCW9wdGlvbmFsIGlp
Y29jCitkZXYvaWljYnVzL2xtNzUuYwkJb3B0aW9uYWwgbG03NQogZGV2L2lpY2J1cy9wY2Y4NTYz
LmMJCW9wdGlvbmFsIHBjZjg1NjMKIGRldi9paWNidXMvczM1MzkwYS5jCQlvcHRpb25hbCBzMzUz
OTBhCiBkZXYvaWlyL2lpci5jCQkJb3B0aW9uYWwgaWlyCi0tLSAvZGV2L251bGwJMjAxNC0wMy0y
NyAxMDo0Nzo1OC4wMDAwMDAwMDAgLTAzMDAKKysrIHN5cy9kZXYvaWljYnVzL2xtNzUuYwkyMDE0
LTAzLTI3IDEwOjUzOjA4LjIzMTE4NzA5MCAtMDMwMApAQCAtMCwwICsxLDU4MiBAQAorLyotCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTAgQW5kcmVhcyBUb2JsZXIuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTMtMjAxNCBMdWl6IE90YXZpbyBPIFNvdXphIDxsb29zQGZyZWVic2Qub3JnPgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisg
KiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMv
Y2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm9wdF9wbGF0Zm9y
bS5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2lu
Y2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8
c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvc3lz
dG0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisKKyNpbmNsdWRlIDxkZXYvaWljYnVz
L2lpY2J1cy5oPgorI2luY2x1ZGUgPGRldi9paWNidXMvaWljb25mLmg+CisKKyNpZmRlZiBGRFQK
KyNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVz
Lmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KKyNlbmRpZgorCisvKiBMTTc1
IHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUJTE03NV9URU1QCTB4MAorI2RlZmluZQlMTTc1X0NPTkYJ
MHgxCisjZGVmaW5lCUxNNzVfQ09ORl9GU0hJRlQJMworI2RlZmluZQlMTTc1X0NPTkZfRkFVTFQJ
CTB4MTgKKyNkZWZpbmUJTE03NV9DT05GX1BPTAkJMHgwNAorI2RlZmluZQlMTTc1X0NPTkZfTU9E
RQkJMHgwMgorI2RlZmluZQlMTTc1X0NPTkZfU0hVVEQJCTB4MDEKKyNkZWZpbmUJTE03NV9DT05G
X01BU0sJCTB4MWYKKyNkZWZpbmUJTE03NV9USFlTVAkweDIKKyNkZWZpbmUJTE03NV9UT1MJMHgz
CisjZGVmaW5lCUxNNzVfSUQJCTB4NworCisvKiBMTTc1IGNvbnN0YW50cy4gKi8KKyNkZWZpbmUJ
TE03NV9URVNUX1BBVFRFUk4JMHhhCisjZGVmaW5lCUxNNzVfTUlOX1RFTVAJCS01NQorI2RlZmlu
ZQlMTTc1X01BWF9URU1QCQkxMjUKKyNkZWZpbmUJTE03NV8wNTAwQwkJMHg4MAorI2RlZmluZQlM
TTc1XzAyNTBDCQkweDQwCisjZGVmaW5lCUxNNzVfMDEyNUMJCTB4MjAKKyNkZWZpbmUJTE03NV9N
U0IJCTB4ODAwMAorI2RlZmluZQlMTTc1X05FR19CSVQJCUxNNzVfTVNCCisjZGVmaW5lCVRaX1pF
Uk9DCQkyNzMyCisKKy8qIExNNzUgc3VwcG9ydGVkIG1vZGVscy4gKi8KKyNkZWZpbmUJSFdUWVBF
X0xNNzUJCTEKKyNkZWZpbmUJSFdUWVBFX0xNNzVBCQkyCisKKy8qIFJlZ3VsYXIgYnVzIGF0dGFj
aG1lbnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50ICBsbTc1X3Byb2JlKGRldmljZV90KTsKK3N0
YXRpYyBpbnQgIGxtNzVfYXR0YWNoKGRldmljZV90KTsKKworc3RydWN0IGxtNzVfc29mdGMgewor
CWRldmljZV90CQlzY19kZXY7CisJc3RydWN0IGludHJfY29uZmlnX2hvb2sgZW51bV9ob29rOwor
CWludDMyX3QJCQlzY19od3R5cGU7CisJdWludDMyX3QJCXNjX2FkZHI7CisJdWludDMyX3QJCXNj
X2NvbmY7Cit9OworCitzdGF0aWMgaW50IGxtNzVfZmF1bHRzWzRdID0geyAxLCAyLCA0LCA2IH07
CisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zICovCitzdGF0aWMgaW50ICBsbTc1X2NvbmZfcmVhZChz
dHJ1Y3QgbG03NV9zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgIGxtNzVfY29uZl93cml0ZShzdHJ1Y3Qg
bG03NV9zb2Z0YyAqKTsKK3N0YXRpYyBpbnQgIGxtNzVfdGVtcF9yZWFkKHN0cnVjdCBsbTc1X3Nv
ZnRjICosIHVpbnQ4X3QsIGludCAqKTsKK3N0YXRpYyBpbnQgIGxtNzVfdGVtcF93cml0ZShzdHJ1
Y3QgbG03NV9zb2Z0YyAqLCB1aW50OF90LCBpbnQpOworc3RhdGljIHZvaWQgbG03NV9zdGFydCh2
b2lkICopOworc3RhdGljIGludCAgbG03NV9yZWFkKGRldmljZV90LCB1aW50MzJfdCwgdWludDhf
dCwgdWludDhfdCAqLCBzaXplX3QpOworc3RhdGljIGludCAgbG03NV93cml0ZShkZXZpY2VfdCwg
dWludDMyX3QsIHVpbnQ4X3QgKiwgc2l6ZV90KTsKK3N0YXRpYyBpbnQgIGxtNzVfc3RyX21vZGUo
Y2hhciAqKTsKK3N0YXRpYyBpbnQgIGxtNzVfc3RyX3BvbChjaGFyICopOworc3RhdGljIGludCAg
bG03NV90ZW1wX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBpbnQgIGxtNzVf
ZmF1bHRzX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBpbnQgIGxtNzVfbW9k
ZV9zeXNjdGwoU1lTQ1RMX0hBTkRMRVJfQVJHUyk7CitzdGF0aWMgaW50ICBsbTc1X3BvbF9zeXNj
dGwoU1lTQ1RMX0hBTkRMRVJfQVJHUyk7CitzdGF0aWMgaW50ICBsbTc1X3NodXRkb3duX3N5c2N0
bChTWVNDVExfSEFORExFUl9BUkdTKTsKKworc3RhdGljIGRldmljZV9tZXRob2RfdCAgbG03NV9t
ZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2Vf
cHJvYmUsCQlsbTc1X3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJbG03NV9hdHRh
Y2gpLAorCisJREVWTUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90IGxtNzVfZHJpdmVy
ID0geworCSJsbTc1IiwKKwlsbTc1X21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBsbTc1X3NvZnRj
KQorfTsKKworc3RhdGljIGRldmNsYXNzX3QgbG03NV9kZXZjbGFzczsKKworRFJJVkVSX01PRFVM
RShsbTc1LCBpaWNidXMsIGxtNzVfZHJpdmVyLCBsbTc1X2RldmNsYXNzLCAwLCAwKTsKKworc3Rh
dGljIGludAorbG03NV9yZWFkKGRldmljZV90IGRldiwgdWludDMyX3QgYWRkciwgdWludDhfdCBy
ZWcsIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGlpY19tc2cgbXNnWzJd
ID0geworCSAgICB7IGFkZHIsIElJQ19NX1dSIHwgSUlDX01fTk9TVE9QLCAxLCAmcmVnIH0sCisJ
ICAgIHsgYWRkciwgSUlDX01fUkQsIGxlbiwgZGF0YSB9LAorCX07CisKKwlpZiAoaWljYnVzX3Ry
YW5zZmVyKGRldiwgbXNnLCAyKSAhPSAwKQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoMCk7
Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfd3JpdGUoZGV2aWNlX3QgZGV2LCB1aW50MzJfdCBhZGRy
LCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaWNfbXNnIG1zZ1sxXSA9
IHsKKwkgICAgeyBhZGRyLCBJSUNfTV9XUiwgbGVuLCBkYXRhIH0sCisJfTsKKworCWlmIChpaWNi
dXNfdHJhbnNmZXIoZGV2LCBtc2csIDEpICE9IDApCisJCXJldHVybiAoLTEpOworCisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIGludAorbG03NV9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJc3Ry
dWN0IGxtNzVfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2Mt
PnNjX2h3dHlwZSA9IEhXVFlQRV9MTTc1OworI2lmZGVmIEZEVAorCWlmICghb2Z3X2J1c19pc19j
b21wYXRpYmxlKGRldiwgIm5hdGlvbmFsLGxtNzUiKSkKKwkJcmV0dXJuIChFTlhJTyk7CisjZW5k
aWYKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiTE03NSB0ZW1wZXJhdHVyZSBzZW5zb3IiKTsKKwor
CXJldHVybiAoQlVTX1BST0JFX0dFTkVSSUMpOworfQorCitzdGF0aWMgaW50CitsbTc1X2F0dGFj
aChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJc2MgPSBkZXZp
Y2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPnNjX2RldiA9IGRldjsKKwlzYy0+c2NfYWRkciA9IGlp
Y2J1c19nZXRfYWRkcihkZXYpOworCisJc2MtPmVudW1faG9vay5pY2hfZnVuYyA9IGxtNzVfc3Rh
cnQ7CisJc2MtPmVudW1faG9vay5pY2hfYXJnID0gZGV2OworCisJLyoKKwkgKiBXZSBoYXZlIHRv
IHdhaXQgdW50aWwgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4gIFVzdWFsbHkgSTJDIHJlYWQKKwkg
KiBhbmQgd3JpdGUgb25seSB3b3JrcyB3aGVuIHRoZSBpbnRlcnJ1cHRzIGFyZSBhdmFpbGFibGUu
CisJICovCisJaWYgKGNvbmZpZ19pbnRyaG9va19lc3RhYmxpc2goJnNjLT5lbnVtX2hvb2spICE9
IDApCisJCXJldHVybiAoRU5PTUVNKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQK
K2xtNzVfdHlwZV9kZXRlY3Qoc3RydWN0IGxtNzVfc29mdGMgKnNjKQoreworCWludCBpLCBsbTc1
YTsKKyAgICAgICAgdWludDhfdCBidWY4WzJdLCBjb25mOworCisJLyogU2F2ZSB0aGUgY29udGVu
dHMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICovCisJaWYgKGxtNzVfcmVhZChzYy0+
c2NfZGV2LCBzYy0+c2NfYWRkciwgTE03NV9DT05GLCBidWY4LCAxKSA8IDApCisJCXJldHVybiAo
LTEpOworCWNvbmYgPSBidWY4WzBdOworCisJLyoKKwkgKiBKdXN0IHdyaXRlIHNvbWUgcGF0dGVy
biB3ZSBjYW4gdmVyaWZ5IGxhdGVyIGF0IGNvbmZpZ3VyYXRpb24KKwkgKiByZWdpc3Rlci4KKwkg
Ki8KKwlidWY4WzBdID0gTE03NV9DT05GOworCWJ1ZjhbMV0gPSBMTTc1X1RFU1RfUEFUVEVSTjsK
KwlpZiAobG03NV93cml0ZShzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgYnVmOCwgMikgPCAwKQor
CQlyZXR1cm4gKC0xKTsKKworCS8qCisJICogUmVhZCB0aGUgY29uZmlndXJhdGlvbiByZWdpc3Rl
ciBhZ2FpbiBhbmQgY2hlY2sgZm9yIG91ciB0ZXN0CisJICogcGF0dGVybi4KKwkgKi8KKwlpZiAo
bG03NV9yZWFkKHNjLT5zY19kZXYsIHNjLT5zY19hZGRyLCBMTTc1X0NPTkYsIGJ1ZjgsIDEpIDwg
MCkKKwkJcmV0dXJuICgtMSk7CisJaWYgKGJ1ZjhbMF0gIT0gTE03NV9URVNUX1BBVFRFUk4pCisJ
CXJldHVybiAoLTEpOworCisJLyoKKwkgKiBSZWFkIGZyb20gbm9uZXhpc3RlbnQgcmVnaXN0ZXJz
ICgweDQgfiAweDYpLgorCSAqIExNNzVBIGFsd2F5cyByZXR1cm4gMHhmZiBmb3Igbm9uZXhpc3Rl
bnQgcmVnaXN0ZXJzLgorCSAqIExNNzUgd2lsbCByZXR1cm4gdGhlIGxhc3QgcmVhZCB2YWx1ZSAt
IG91ciB0ZXN0IHBhdHRlcm4gd3JpdHRlbiB0bworCSAqIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIu
CisJICovCisJbG03NWEgPSAwOworCWZvciAoaSA9IDQ7IGkgPD0gNjsgaSsrKSB7CisJCWlmIChs
bTc1X3JlYWQoc2MtPnNjX2Rldiwgc2MtPnNjX2FkZHIsIGksIGJ1ZjgsIDEpIDwgMCkKKwkJCXJl
dHVybiAoLTEpOworCQlpZiAoYnVmOFswXSAhPSBMTTc1X1RFU1RfUEFUVEVSTiAmJiBidWY4WzBd
ICE9IDB4ZmYpCisJCQlyZXR1cm4gKC0xKTsKKwkJaWYgKGJ1ZjhbMF0gPT0gMHhmZikKKwkJCWxt
NzVhKys7CisJfQorCWlmIChsbTc1YSA9PSAzKQorCQlzYy0+c2NfaHd0eXBlID0gSFdUWVBFX0xN
NzVBOworCisJLyogUmVzdG9yZSB0aGUgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gKi8KKwlidWY4
WzBdID0gTE03NV9DT05GOworCWJ1ZjhbMV0gPSBjb25mOworCWlmIChsbTc1X3dyaXRlKHNjLT5z
Y19kZXYsIHNjLT5zY19hZGRyLCBidWY4LCAyKSA8IDApCisJCXJldHVybiAoLTEpOworCisJcmV0
dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK2xtNzVfc3RhcnQodm9pZCAqeGRldikKK3sKKwlk
ZXZpY2VfdCBkZXY7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCXN0cnVjdCBzeXNjdGxfY3R4
X2xpc3QgKmN0eDsKKwlzdHJ1Y3Qgc3lzY3RsX29pZCAqdHJlZV9ub2RlOworCXN0cnVjdCBzeXNj
dGxfb2lkX2xpc3QgKnRyZWU7CisKKwlkZXYgPSAoZGV2aWNlX3QpeGRldjsKKwlzYyA9IGRldmlj
ZV9nZXRfc29mdGMoZGV2KTsKKwljdHggPSBkZXZpY2VfZ2V0X3N5c2N0bF9jdHgoZGV2KTsKKwl0
cmVlX25vZGUgPSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisJdHJlZSA9IFNZU0NUTF9D
SElMRFJFTih0cmVlX25vZGUpOworCisJY29uZmlnX2ludHJob29rX2Rpc2VzdGFibGlzaCgmc2Mt
PmVudW1faG9vayk7CisKKwkvKgorCSAqIERldGVjdCB0aGUga2luZCBvZiBjaGlwIHdlIGFyZSBh
dHRhY2hpbmcgdG8uCisJICogVGhpcyBtYXkgbm90IHdvcmsgZm9yIExNNzUgY2xvbmVzLgorCSAq
LworCWlmIChsbTc1X3R5cGVfZGV0ZWN0KHNjKSAhPSAwKSB7CisJCWRldmljZV9wcmludGYoZGV2
LCAiY2Fubm90IHJlYWQgZnJvbSBzZW5zb3IuXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoc2Mt
PnNjX2h3dHlwZSA9PSBIV1RZUEVfTE03NUEpCisJCWRldmljZV9wcmludGYoZGV2LAorCQkgICAg
IkxNNzVBIHR5cGUgc2Vuc29yIGRldGVjdGVkICgxMWJpdHMgcmVzb2x1dGlvbikuXG4iKTsKKwor
CS8qIFJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICovCisJaWYgKGxtNzVfY29uZl9y
ZWFkKHNjKSAhPSAwKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiY2Fubm90IHJlYWQgdGhlIGNv
bmZpZ3VyYXRpb24gcmVnaXN0ZXIuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRlbXBlcmF0
dXJlLiAqLworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAidGVtcGVyYXR1
cmUiLAorCSAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUkQgfCBDVExGTEFHX01QU0FGRSwgZGV2
LCBMTTc1X1RFTVAsCisJICAgIGxtNzVfdGVtcF9zeXNjdGwsICJJSyIsICJDdXJyZW50IHRlbXBl
cmF0dXJlIik7CisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgdHJlZSwgT0lEX0FVVE8sICJ0aHlzdCIs
CisJICAgIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVyB8IENUTEZMQUdfTVBTQUZFLCBkZXYsIExN
NzVfVEhZU1QsCisJICAgIGxtNzVfdGVtcF9zeXNjdGwsICJJSyIsICJIeXN0ZXJlc2lzIHRlbXBl
cmF0dXJlIik7CisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgdHJlZSwgT0lEX0FVVE8sICJ0b3MiLAor
CSAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcgfCBDVExGTEFHX01QU0FGRSwgZGV2LCBMTTc1
X1RPUywKKwkgICAgbG03NV90ZW1wX3N5c2N0bCwgIklLIiwgIk92ZXJ0ZW1wZXJhdHVyZSIpOwor
CisJLyogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiAqLworCVNZU0NUTF9BRERfUFJPQyhjdHgs
IHRyZWUsIE9JRF9BVVRPLCAiZmF1bHRzIiwKKwkgICAgQ1RMRkxBR19SVyB8IENUTFRZUEVfVUlO
VCwgZGV2LCAwLAorCSAgICBsbTc1X2ZhdWx0c19zeXNjdGwsICJJVSIsICJMTTc1IGZhdWx0IHF1
ZXVlIik7CisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgdHJlZSwgT0lEX0FVVE8sICJtb2RlIiwKKwkg
ICAgQ1RMRkxBR19SVyB8IENUTFRZUEVfU1RSSU5HLCBkZXYsIDAsCisJICAgIGxtNzVfbW9kZV9z
eXNjdGwsICJBIiwgIkxNNzUgbW9kZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9J
RF9BVVRPLCAicG9sYXJpdHkiLAorCSAgICBDVExGTEFHX1JXIHwgQ1RMVFlQRV9TVFJJTkcsIGRl
diwgMCwKKwkgICAgbG03NV9wb2xfc3lzY3RsLCAiQSIsICJMTTc1IE9TIHBvbGFyaXR5Iik7CisJ
U1lTQ1RMX0FERF9QUk9DKGN0eCwgdHJlZSwgT0lEX0FVVE8sICJzaHV0ZG93biIsCisJICAgIENU
TEZMQUdfUlcgfCBDVExUWVBFX1VJTlQsIGRldiwgMCwKKwkgICAgbG03NV9zaHV0ZG93bl9zeXNj
dGwsICJJVSIsICJMTTc1IHNodXRkb3duIik7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfY29uZl9y
ZWFkKHN0cnVjdCBsbTc1X3NvZnRjICpzYykKK3sKKwl1aW50OF90IGJ1Zjg7CisKKwlpZiAobG03
NV9yZWFkKHNjLT5zY19kZXYsIHNjLT5zY19hZGRyLCBMTTc1X0NPTkYsICZidWY4LCAxKSA8IDAp
CisJCXJldHVybiAoLTEpOworCisJc2MtPnNjX2NvbmYgPSAodWludDMyX3QpYnVmODsKKworCXJl
dHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfY29uZl93cml0ZShzdHJ1Y3QgbG03NV9z
b2Z0YyAqc2MpCit7CisJdWludDhfdCBidWY4WzJdOworCisJYnVmOFswXSA9IExNNzVfQ09ORjsK
KwlidWY4WzFdID0gKHVpbnQ4X3Qpc2MtPnNjX2NvbmYgJiBMTTc1X0NPTkZfTUFTSzsKKworCWlm
IChsbTc1X3dyaXRlKHNjLT5zY19kZXYsIHNjLT5zY19hZGRyLCBidWY4LCAyKSA8IDApCisJCXJl
dHVybiAoLTEpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorbG03NV90ZW1wX3Jl
YWQoc3RydWN0IGxtNzVfc29mdGMgKnNjLCB1aW50OF90IHJlZywgaW50ICp0ZW1wKQoreworCXVp
bnQ4X3QgYnVmOFsyXTsKKwl1aW50MTZfdCBidWY7CisJaW50IHQ7CisKKwlpZiAobG03NV9yZWFk
KHNjLT5zY19kZXYsIHNjLT5zY19hZGRyLCByZWcsIGJ1ZjgsIDIpIDwgMCkKKwkJcmV0dXJuICgt
MSk7CisKKwlidWYgPSAoYnVmOFswXSA8PCA4KSB8IChidWY4WzFdICYgMHhmZik7CisKKwkvKgor
CSAqIExNNzUgaGFzIGEgOSBiaXQgQURDIHdpdGggcmVzb2x1dGlvbiBvZiAwLjUgQyBwZXIgYml0
LgorCSAqIExNNzVBIGhhcyBhbiAxMSBiaXQgQURDIHdpdGggcmVzb2x1dGlvbiBvZiAwLjEyNSBD
IHBlciBiaXQuCisJICogVGVtcGVyYXR1cmUgaXMgc3RvcmVkIHdpdGggdHdvJ3MgY29tcGxlbWVu
dC4KKwkgKi8KKwlpZiAoYnVmICYgTE03NV9ORUdfQklUKQorCQlidWYgPSB+YnVmICsgMTsKKwkq
dGVtcCA9ICgoaW50MTZfdClidWYgPj4gOCkgKiAxMDsKKwl0ID0gMDsKKwlpZiAoc2MtPnNjX2h3
dHlwZSA9PSBIV1RZUEVfTE03NUEpIHsKKwkJaWYgKGJ1ZiAmIExNNzVfMDEyNUMpCisJCQl0ICs9
IDEyNTsKKwkJaWYgKGJ1ZiAmIExNNzVfMDI1MEMpCisJCQl0ICs9IDI1MDsKKwl9CisJaWYgKGJ1
ZiAmIExNNzVfMDUwMEMpCisJCXQgKz0gNTAwOworCXQgLz0gMTAwOworCSp0ZW1wICs9IHQ7CisJ
aWYgKGJ1ZiAmIExNNzVfTkVHX0JJVCkKKwkJKnRlbXAgPSAtKCp0ZW1wKTsKKwkqdGVtcCArPSBU
Wl9aRVJPQzsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfdGVtcF93cml0
ZShzdHJ1Y3QgbG03NV9zb2Z0YyAqc2MsIHVpbnQ4X3QgcmVnLCBpbnQgdGVtcCkKK3sKKwl1aW50
OF90IGJ1ZjhbM107CisJdWludDE2X3QgYnVmOworCisJaWYgKHRlbXAgPiBMTTc1X01BWF9URU1Q
KQorCQl0ZW1wID0gTE03NV9NQVhfVEVNUDsKKwlpZiAodGVtcCA8IExNNzVfTUlOX1RFTVApCisJ
CXRlbXAgPSBMTTc1X01JTl9URU1QOworCisJYnVmID0gKHVpbnQxNl90KXRlbXA7CisJYnVmIDw8
PSA4OworCisJYnVmOFswXSA9IHJlZzsKKwlidWY4WzFdID0gYnVmID4+IDg7CisJYnVmOFsyXSA9
IGJ1ZiAmIDB4ZmY7CisKKwlpZiAobG03NV93cml0ZShzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwg
YnVmOCwgMykgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp
YyBpbnQKK2xtNzVfc3RyX21vZGUoY2hhciAqYnVmKQoreworCWludCBsZW4sIHJ0cm47CisKKwly
dHJuID0gLTE7CisJbGVuID0gc3RybGVuKGJ1Zik7CisJaWYgKGxlbiA+IDIgJiYgc3RybmNhc2Vj
bXAoImludGVycnVwdCIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMTsKKwllbHNlIGlmIChs
ZW4gPiAyICYmIHN0cm5jYXNlY21wKCJjb21wYXJhdG9yIiwgYnVmLCBsZW4pID09IDApCisJCXJ0
cm4gPSAwOworCisJcmV0dXJuIChydHJuKTsKK30KKworc3RhdGljIGludAorbG03NV9zdHJfcG9s
KGNoYXIgKmJ1ZikKK3sKKwlpbnQgbGVuLCBydHJuOworCisJcnRybiA9IC0xOworCWxlbiA9IHN0
cmxlbihidWYpOworCWlmIChsZW4gPiAxICYmIHN0cm5jYXNlY21wKCJoaWdoIiwgYnVmLCBsZW4p
ID09IDApCisJCXJ0cm4gPSAxOworCWVsc2UgaWYgKGxlbiA+IDEgJiYgc3RybmNhc2VjbXAoImxv
dyIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMDsKKwllbHNlIGlmIChsZW4gPiA4ICYmIHN0
cm5jYXNlY21wKCJhY3RpdmUtaGlnaCIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMTsKKwll
bHNlIGlmIChsZW4gPiA4ICYmIHN0cm5jYXNlY21wKCJhY3RpdmUtbG93IiwgYnVmLCBsZW4pID09
IDApCisJCXJ0cm4gPSAwOworCisJcmV0dXJuIChydHJuKTsKK30KKworc3RhdGljIGludAorbG03
NV90ZW1wX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWRldmljZV90IGRldjsKKwlp
bnQgZXJyb3IsIHRlbXA7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCXVpbnQ4X3QgcmVnOwor
CisJZGV2ID0gKGRldmljZV90KWFyZzE7CisJcmVnID0gKHVpbnQ4X3QpYXJnMjsKKwlzYyA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsKKworCWlmIChsbTc1X3RlbXBfcmVhZChzYywgcmVnLCAmdGVt
cCkgIT0gMCkKKwkJcmV0dXJuIChFSU8pOworCisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChv
aWRwLCAmdGVtcCwgMCwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0ciA9PSBO
VUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChsbTc1X3RlbXBfd3JpdGUoc2MsIHJlZywg
dGVtcCkgIT0gMCkKKwkJcmV0dXJuIChFSU8pOworCisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0
YXRpYyBpbnQKK2xtNzVfZmF1bHRzX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWRl
dmljZV90IGRldjsKKwlpbnQgZXJyb3IsIGZhdWx0cywgaSwgbmV3ZiwgdG1wOworCXN0cnVjdCBs
bTc1X3NvZnRjICpzYzsKKworCWRldiA9IChkZXZpY2VfdClhcmcxOworCXNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhkZXYpOworCXRtcCA9IChzYy0+c2NfY29uZiAmIExNNzVfQ09ORl9GQVVMVCkgPj4g
TE03NV9DT05GX0ZTSElGVDsKKwlpZiAodG1wID4gbml0ZW1zKGxtNzVfZmF1bHRzKSkKKwkJdG1w
ID0gbml0ZW1zKGxtNzVfZmF1bHRzKTsKKwlmYXVsdHMgPSBsbTc1X2ZhdWx0c1t0bXBdOworCisJ
ZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmZmF1bHRzLCAwLCByZXEpOworCWlmIChl
cnJvciAhPSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVybiAoZXJyb3IpOworCisJ
aWYgKGZhdWx0cyAhPSBsbTc1X2ZhdWx0c1t0bXBdKSB7CisJCW5ld2YgPSAwOworCQlmb3IgKGkg
PSAwOyBpIDwgbml0ZW1zKGxtNzVfZmF1bHRzKTsgaSsrKQorCQkJaWYgKGZhdWx0cyA+PSBsbTc1
X2ZhdWx0c1tpXSkKKwkJCQluZXdmID0gaTsKKwkJc2MtPnNjX2NvbmYgJj0gfkxNNzVfQ09ORl9G
QVVMVDsKKwkJc2MtPnNjX2NvbmYgfD0gbmV3ZiA8PCBMTTc1X0NPTkZfRlNISUZUOworCQlpZiAo
bG03NV9jb25mX3dyaXRlKHNjKSAhPSAwKQorCQkJcmV0dXJuIChFSU8pOworCX0KKworCXJldHVy
biAoZXJyb3IpOworfQorCitzdGF0aWMgaW50CitsbTc1X21vZGVfc3lzY3RsKFNZU0NUTF9IQU5E
TEVSX0FSR1MpCit7CisJY2hhciBidWZbMTZdOworCWRldmljZV90IGRldjsKKwlpbnQgZXJyb3Is
IG1vZGUsIG5ld207CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJZGV2ID0gKGRldmljZV90
KWFyZzE7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJaWYgKHNjLT5zY19jb25mICYg
TE03NV9DT05GX01PREUpIHsKKwkJbW9kZSA9IDE7CisJCXN0cmxjcHkoYnVmLCAiaW50ZXJydXB0
Iiwgc2l6ZW9mKGJ1ZikpOworCX0gZWxzZSB7CisJCW1vZGUgPSAwOworCQlzdHJsY3B5KGJ1Ziwg
ImNvbXBhcmF0b3IiLCBzaXplb2YoYnVmKSk7CisJfQorCisJZXJyb3IgPSBzeXNjdGxfaGFuZGxl
X3N0cmluZyhvaWRwLCBidWYsIHNpemVvZihidWYpLCByZXEpOworCWlmIChlcnJvciAhPSAwIHx8
IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVybiAoZXJyb3IpOworCisJbmV3bSA9IGxtNzVf
c3RyX21vZGUoYnVmKTsKKwlpZiAobmV3bSAhPSAtMSAmJiBtb2RlICE9IG5ld20pIHsKKwkJc2Mt
PnNjX2NvbmYgJj0gfkxNNzVfQ09ORl9NT0RFOworCQlpZiAobmV3bSA9PSAxKQorCQkJc2MtPnNj
X2NvbmYgfD0gTE03NV9DT05GX01PREU7CisJCWlmIChsbTc1X2NvbmZfd3JpdGUoc2MpICE9IDAp
CisJCQlyZXR1cm4gKEVJTyk7CisJfQorCisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBp
bnQKK2xtNzVfcG9sX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWNoYXIgYnVmWzE2
XTsKKwlkZXZpY2VfdCBkZXY7CisJaW50IGVycm9yLCBuZXdwLCBwb2w7CisJc3RydWN0IGxtNzVf
c29mdGMgKnNjOworCisJZGV2ID0gKGRldmljZV90KWFyZzE7CisJc2MgPSBkZXZpY2VfZ2V0X3Nv
ZnRjKGRldik7CisJaWYgKHNjLT5zY19jb25mICYgTE03NV9DT05GX1BPTCkgeworCQlwb2wgPSAx
OworCQlzdHJsY3B5KGJ1ZiwgImFjdGl2ZS1oaWdoIiwgc2l6ZW9mKGJ1ZikpOworCX0gZWxzZSB7
CisJCXBvbCA9IDA7CisJCXN0cmxjcHkoYnVmLCAiYWN0aXZlLWxvdyIsIHNpemVvZihidWYpKTsK
Kwl9CisKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfc3RyaW5nKG9pZHAsIGJ1Ziwgc2l6ZW9mKGJ1
ZiksIHJlcSk7CisJaWYgKGVycm9yICE9IDAgfHwgcmVxLT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0
dXJuIChlcnJvcik7CisKKwluZXdwID0gbG03NV9zdHJfcG9sKGJ1Zik7CisJaWYgKG5ld3AgIT0g
LTEgJiYgcG9sICE9IG5ld3ApIHsKKwkJc2MtPnNjX2NvbmYgJj0gfkxNNzVfQ09ORl9QT0w7CisJ
CWlmIChuZXdwID09IDEpCisJCQlzYy0+c2NfY29uZiB8PSBMTTc1X0NPTkZfUE9MOworCQlpZiAo
bG03NV9jb25mX3dyaXRlKHNjKSAhPSAwKQorCQkJcmV0dXJuIChFSU8pOworCX0KKworCXJldHVy
biAoZXJyb3IpOworfQorCitzdGF0aWMgaW50CitsbTc1X3NodXRkb3duX3N5c2N0bChTWVNDVExf
SEFORExFUl9BUkdTKQoreworCWRldmljZV90IGRldjsKKwlpbnQgZXJyb3IsIHNodXRkb3duLCB0
bXA7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJZGV2ID0gKGRldmljZV90KWFyZzE7CisJ
c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdG1wID0gc2h1dGRvd24gPSAoc2MtPnNjX2Nv
bmYgJiBMTTc1X0NPTkZfU0hVVEQpID8gMSA6IDA7CisKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVf
aW50KG9pZHAsICZzaHV0ZG93biwgMCwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5l
d3B0ciA9PSBOVUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChzaHV0ZG93biAhPSB0bXAp
IHsKKwkJc2MtPnNjX2NvbmYgJj0gfkxNNzVfQ09ORl9TSFVURDsKKwkJaWYgKHNodXRkb3duKQor
CQkJc2MtPnNjX2NvbmYgfD0gTE03NV9DT05GX1NIVVREOworCQlpZiAobG03NV9jb25mX3dyaXRl
KHNjKSAhPSAwKQorCQkJcmV0dXJuIChFSU8pOworCX0KKworCXJldHVybiAoZXJyb3IpOworfQpJ
bmRleDogc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hhcmUvbWFuL21h
bjQvTWFrZWZpbGUJKHJldmlzaW9uIDI2Mzc0MCkKKysrIHNoYXJlL21hbi9tYW40L01ha2VmaWxl
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDcgQEAKIAlsZ2UuNCBcCiAJJHtfbGluZGV2
LjR9IFwKIAkke19saW51eC40fSBcCisJbG03NS40IFwKIAlsbWMuNCBcCiAJbG8uNCBcCiAJbHAu
NCBcCi0tLSAvZGV2L251bGwJMjAxNC0wMy0yNyAxMToxMTowMC4wMDAwMDAwMDAgLTAzMDAKKysr
IHNoYXJlL21hbi9tYW40L2xtNzUuNAkyMDE0LTAzLTI3IDExOjEwOjEzLjU2MjExNzYxMSAtMDMw
MApAQCAtMCwwICsxLDE4OSBAQAorLlwiCisuXCIgQ29weXJpZ2h0IChjKSAyMDE0IEx1aXogT3Rh
dmlvIE8gU291emEgPGxvb3NAZnJlZWJzZC5vcmc+CisuXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky5cIgorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6CisuXCIgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisu
XCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKy5cIgorLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisuXCIgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUworLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorLlwiIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VAorLlwiIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy5cIiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy5cIiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisuXCIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisuXCIgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy5cIgorLlwiICRGcmVlQlNEJAor
LlwiCisuRGQgTWFyY2ggMjcsIDIwMTQKKy5EdCBMTTc1IDQKKy5PcworLlNoIE5BTUUKKy5ObSBs
bTc1CisuTmQgbG03NSBpMmMgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3IgZHJpdmVyCisuU2gg
U1lOT1BTSVMKKy5DZCAiZGV2aWNlIGlpYyIKKy5DZCAiZGV2aWNlIGlpY2J1cyIKKy5DZCAiZGV2
aWNlIGxtNzUiCisuU2ggREVTQ1JJUFRJT04KK1RoZQorLk5tCitkcml2ZXIgcHJvdmlkZXMgYWNj
ZXNzIHRvIHNlbnNvciBkYXRhIGFuZCBjb25maWd1cmF0aW9uIG92ZXIgdGhlCisuWHIgaWljYnVz
IDQgLgorLlBwCitJdCBwcm92aWRlcyBhbiBlYXN5IGFuZCBzaW1wbGUgd2F5IHRvIGNoZWNrIHRo
ZSBmdW5jdGlvbmFsaXR5IG9mIGFuIGkyYyBidXMKK2FzIGl0IHByb3ZpZGVzIHJlYWQgYW5kIHdy
aXRlIGFjY2VzcyB0byB0aGUKKy5ObQorY29uZmlndXJhdGlvbiByZWdpc3Rlci4KKy5QcAorVGhl
IGFjY2VzcyB0bworLk5tCitkYXRhIGlzIG1hZGUgdmlhIHRoZQorLlhyIHN5c2N0bCA4CitpbnRl
cmZhY2U6CisuQmQgLWxpdGVyYWwKK2Rldi5sbTc1LjAuJWRlc2M6IExNNzUgdGVtcGVyYXR1cmUg
c2Vuc29yCitkZXYubG03NS4wLiVkcml2ZXI6IGxtNzUKK2Rldi5sbTc1LjAuJWxvY2F0aW9uOiBh
ZGRyPTB4NDkKK2Rldi5sbTc1LjAuJXBucGluZm86IG5hbWU9bG03NTAgY29tcGF0PW5hdGlvbmFs
LGxtNzUKK2Rldi5sbTc1LjAuJXBhcmVudDogaWljYnVzMworZGV2LmxtNzUuMC50ZW1wZXJhdHVy
ZTogMjcuMUMKK2Rldi5sbTc1LjAudGh5c3Q6IDc1LjBDCitkZXYubG03NS4wLnRvczogODAuMEMK
K2Rldi5sbTc1LjAuZmF1bHRzOiAxCitkZXYubG03NS4wLm1vZGU6IGNvbXBhcmF0b3IKK2Rldi5s
bTc1LjAucG9sYXJpdHk6IGFjdGl2ZS1sb3cKK2Rldi5sbTc1LjAuc2h1dGRvd246IDAKKy5FZAor
LkJsIC10YWcgLXdpZHRoICIuVmEgZGV2LmxtNzUuJWQudGVtcGVyYXR1cmUiCisuSXQgVmEgZGV2
LmxtNzUuJWQudGVtcGVyYXR1cmUKK0lzIHRoZSByZWFkLW9ubHkgdmFsdWUgb2YgdGhlIGN1cnJl
bnQgdGVtcGVyYXR1cmUgcmVhZCBieSB0aGUgc2Vuc29yLgorLkl0IFZhIGRldi5sbTc1LiVkLnRo
eXN0CitTZXRzIHRoZSBoeXN0ZXJlc2lzIHRlbXBlcmF0dXJlLgorT25jZSB0aGUgdGVtcGVyYXR1
cmUgZ2V0IG92ZXIgdGhlIG92ZXJ0ZW1wZXJhdHVyZSBzaHV0ZG93biB2YWx1ZSAodG9zKQoraXQg
bmVlZCB0byBkcm9wIGJlbGxvdyB0aGUgaHlzdGVyZXNpcyB0ZW1wZXJhdHVyZSB0byBkaXNhYmxl
IHRoZSBvdXRwdXQKKyhpbnRlcnJ1cHQpIHBpbiBhZ2Fpbi4KKy5JdCBWYSBkZXYubG03NS4lZC50
b3MKK1NldHMgdGhlIG92ZXJ0ZW1wZXJhdHVyZSBzaHV0ZG93biB2YWx1ZS4KK09uY2UgdGhlIHRl
bXBlcmF0dXJlIGdldCBvdmVyIHRoaXMgdmFsdWUgdGhlIG91dHB1dCBwaW4gd2lsbCBiZSBlbmFi
bGVkLgorVGhlIHdheSB0aGUgb3V0cHV0IChpbnRlcnJ1cHQpIHBpbiB3b3JrcywgZGVwZW5kcyBv
biB0aGUgbW9kZSBjb25maWd1cmF0aW9uLgorLkl0IFZhIGRldi5sbTc1LiVkLmZhdWx0cworSXMg
dGhlIG51bWJlciBvZiBmYXVsdHMgdGhhdCBtdXN0IG9jY3VyIGNvbnNlY3V0aXZlbHkgdG8gYWN0
aXZhdGUgdGhlCitpbnRlcnJ1cHQgKG91dHB1dCkgcGluLgorSXQgY2FuIGJlIHNldCB0byAxLCAy
LCA0LCBhbmQgNi4KKy5JdCBWYSBkZXYubG03NS4lZC5tb2RlCitTZXQgdGhlIG9wZXJhdGlvbiBt
b2RlIGZvciB0aGUgc2Vuc29yIGludGVycnVwdCBwaW4uCitJdCBjYW4gYmUgc2V0IHRvICdjb21w
YXJhdG9yJyAoZGVmYXVsdCkgb3IgJ2ludGVycnVwdCcuCisuSXQgVmEgZGV2LmxtNzUuJWQucG9s
YXJpdHkKK1NldCB0aGUgcG9sYXJpdHkgb2YgdGhlIHNlbnNvciBpbnRlcnJ1cHQgcGluLgorSXQg
Y2FuIGJlIHNldCB0byAnYWN0aXZlLWxvdycgKGRlZmF1bHQpIG9yICdhY3RpdmUtaGlnaCcuCitQ
bGVhc2Ugbm90ZSB0aGF0IHRoZSBvdXRwdXQgcGluIGlzIGFuIG9wZW4tZHJhaW4gb3V0cHV0IGFu
ZCBpdCBuZWVkcyBhCitwcm9wZXIgcHVsbC11cCByZXNpc3RvciB0byB3b3JrLgorLkl0IFZhIGRl
di5sbTc1LiVkLnNodXRkb3duCitXaGVuIHNldCB0byAnMScgaXQgc2h1dGRvd24gdGhlIHNlbnNv
ci4KK1RoZSB0ZW1wZXJhdHVyZSBjb252ZXJ0aW9uIHN0b3BzIGJ1dCB0aGUgc2Vuc29yIHJlbWFp
bnMgd2l0aCBpdHMgaTJjIGJ1cworYWN0aXZlLCBpLmUuLCBpdCBjYW4gYmUgd29rZW4gdXAgYnkg
c2V0dGluZyB0aGlzIG9wdGlvbiB0byAnMCcgYWdhaW4uCisuRWwKKy5QcAorUGxlYXNlIGNoZWNr
IHRoZQorLk5tCitkYXRhc2hlZXQgZm9yIG1vcmUgZGV0YWlscy4KKy5QcAorV2hlbiB1c2VkIHRv
Z2V0aGVyIHdpdGgKKy5YciBzbm1wX2xtNzUgMworaXQgYWxsb3dzIHRoZSBtb25pdG9yaW5nIG9m
CisuTm0KK3RlbXBlcmF0dXJlIGRhdGEgb3ZlciBTTk1QLgorLlBwCitUaGUKKy5ObQorZHJpdmVy
IHN1cHBvcnRzIGJvdGggdGhlIGxvdyBhbmQgdGhlIGhpZ2ggcmVzb2x1dGlvbiBtb2RlbHMuCisu
UHAKK1RoZSBsb3cgcmVzb2x1dGlvbiBtb2RlbCAobG03NSkgcHJvdmlkZXMgYSA5IGJpdCBvdXRw
dXQgd2l0aCB0aGUgTFNCCityZXByZXNlbnRpbmcgMC41Qy4KKy5QcAorVGhlIGhpZ2ggcmVzb2x1
dGlvbiBtb2RlbCAobG03NWEpIHByb3ZpZGVzIGFuIDExIGJpdCBvdXRwdXQgd2l0aCB0aGUgTFNC
CityZXByZXNlbnRpbmcgMC4xMjVDLgorLlBwCitUaGUgZHJpdmVyIHRyaWVzIHRvIGF1dG8tZGV0
ZWN0IHRoZQorLk5tCittb2RlbCwgYnV0IHRoZSBkZXRlY3Rpb24gb2Ygc29tZQorLk5tCitjbG9u
ZXMgbWF5IG5vdCB3b3JrIHJlbGlhYmx5LgorLlBwCitPbiBhCisuWHIgZGV2aWNlLmhpbnRzIDUK
K2Jhc2VkIHN5c3RlbSwgbGlrZQorLkxpIE1JUFMgLAordGhlc2UgdmFsdWVzIGFyZSBjb25maWd1
cmFibGUgZm9yIHRoZQorLk5tIDoKKy5CbCAtdGFnIC13aWR0aCAiLlZhIGhpbnQubG03NS4lZC5h
ZGRyIgorLkl0IFZhIGhpbnQubG03NS4lZC5hdAorSXMgdGhlCisuWHIgaWljYnVzIDQKK3lvdSBh
cmUgYXR0YWNoaW5nIHRvLgorLkl0IFZhIGhpbnQubG03NS4lZC5hZGRyCitJcyB0aGUKKy5ObQor
aTJjIGFkZHJlc3Mgb24gdGhlCisuWHIgaWljYnVzIDQgLgorLkVsCisuUHAKK09uIGEKKy5YciBG
RFQgNAorYmFzZWQgc3lzdGVtLCBsaWtlCisuTGkgQVJNICwKK3RoZSBEVFMgcGFydCBmb3IgYQor
Lk5tCitkZXZpY2UgdXN1YWxseSBsb29rcyBsaWtlOgorLkJkIC1saXRlcmFsCitpMmMgeworCisJ
Li4uCisKKwlsbTc1MCB7CisJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCWkyYy1h
ZGRyZXNzID0gPDB4NDk+OworCX07Cit9OworLkVkCisuUHAKK1doZXJlOgorLkJsIC10YWcgLXdp
ZHRoICIuVmEgaTJjLWFkZHJlc3MiCisuSXQgVmEgY29tcGF0aWJsZQorU2hvdWxkIGFsd2F5cyBi
ZSBzZXQgdG8gIm5hdGlvbmFsLGxtNzUiLgorLkl0IFZhIGkyYy1hZGRyZXNzCitUaGUKKy5WYSBp
MmMtYWRkcmVzcworcHJvcGVydHkgaW5kaWNhdGVzIHdoaWNoIGkyYyBhZGRyZXNzIHRoZQorLk5t
CitpcyB3aXJlZCBhdC4KKy5ObQordGVtcGVyYXR1cmUgc2Vuc29ycyBjYW4gYmUgd2lyZWQgdG8g
OCBkaWZmZXJlbnQgYWRkcmVzcywgYWxsb3dpbmcgdXAgdG8gOAorc2Vuc29ycyBvbiB0aGUgc2Ft
ZQorLlhyIGlpY2J1cyA0IC4KKy5FbAorLlNoIFNFRSBBTFNPCisuWHIgc25tcF9sbTc1IDMgLAor
LlhyIGZkdCA0ICwKKy5YciBpaWMgNCAsCisuWHIgaWljYnVzIDQgLAorLlhyIHN5c2N0bCA4Cisu
U2ggSElTVE9SWQorVGhlCisuTm0KK2RyaXZlciBmaXJzdCBhcHBlYXJlZCBpbgorLkZ4IDExLjAg
LgorLlNoIEFVVEhPUlMKKy5BbiAtbm9zcGxpdAorVGhlIGRyaXZlciBhbmQgdGhpcyBtYW51YWwg
cGFnZSB3YXMgd3JpdHRlbiBieQorLkFuIEx1aXogT3RhdmlvIE8gU291emEgQXEgbG9vc0BGcmVl
QlNELm9yZwo=
--001a11c266c465a18604f5977b8d
Content-Type: text/plain; charset=US-ASCII; name="snmp_lm75.diff"
Content-Disposition: attachment; filename="snmp_lm75.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hta4unmd1

SW5kZXg6IGV0Yy9zbm1wZC5jb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZXRjL3NubXBkLmNvbmZpZwko
cmV2aXNpb24gMjYyODYwKQorKysgZXRjL3NubXBkLmNvbmZpZwkod29ya2luZyBjb3B5KQpAQCAt
Mjk2LDYgKzI5NiwxMiBAQAogI2JlZ2Vtb3RTbm1wZE1vZHVsZVBhdGguImJyaWRnZSIgPSAiL3Vz
ci9saWIvc25tcF9icmlkZ2Uuc28iCiAKICMKKyMgTE03NSBTZW5zb3IgbW9kdWxlCisjICBUaGlz
IHJlcXVpcmVzIHRoZSBtaWJJSSBtb2R1bGUuCisjCisjYmVnZW1vdFNubXBkTW9kdWxlUGF0aC4i
bG03NSIgPSAiL3Vzci9saWIvc25tcF9sbTc1LnNvIgorCisjCiAjIFdpcmVsZXNzIG1vZHVsZQog
IyAgVGhpcyByZXF1aXJlcyB0aGUgbWliSUkgbW9kdWxlLgogIwpJbmRleDogdXNyLnNiaW4vYnNu
bXBkL21vZHVsZXMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4vYnNubXBkL21vZHVs
ZXMvTWFrZWZpbGUJKHJldmlzaW9uIDI2Mjg2MCkKKysrIHVzci5zYmluL2Jzbm1wZC9tb2R1bGVz
L01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBACiAJc25tcF9icmlkZ2Ug
XAogCXNubXBfaGFzdCBcCiAJc25tcF9ob3N0cmVzIFwKKwlzbm1wX2xtNzUgXAogCXNubXBfbWli
SUkgXAogCXNubXBfdGFyZ2V0IFwKIAlzbm1wX3VzbSBcCkluZGV4OiB1c3Iuc2Jpbi9ic25tcGQv
bW9kdWxlcy9zbm1wX2xtNzUvQkVHRU1PVC1MTTc1LU1JQi50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNy
LnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L0JFR0VNT1QtTE03NS1NSUIudHh0CShyZXZp
c2lvbiAwKQorKysgdXNyLnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L0JFR0VNT1QtTE03
NS1NSUIudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYwIEBACistLQorLS0gQ29weXJp
Z2h0IChjKSAyMDE0IEx1aXogT3RhdmlvIE8gU291emEgPGxvb3NARnJlZUJTRC5vcmc+CistLSBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLS0KKy0tIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLS0gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCistLSBh
cmUgbWV0OgorLS0gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy0tICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy0tIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CistLSAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCistLSAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLS0KKy0tIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECistLSBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKy0tIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCistLSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKy0t
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCistLSBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworLS0gT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCist
LSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorLS0gTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorLS0gT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorLS0gU1VDSCBEQU1BR0UuCistLQorLS0gJEZyZWVCU0QkCistLQorCitCRUdFTU9ULUxNNzUt
TUlCIERFRklOSVRJT05TIDo6PSBCRUdJTgorCitJTVBPUlRTCisgICAgTU9EVUxFLUlERU5USVRZ
LCBPQkpFQ1QtVFlQRSwgTk9USUZJQ0FUSU9OLVRZUEUsCisgICAgQ291bnRlcjY0LCBJbnRlZ2Vy
MzIKKwlGUk9NIFNOTVB2Mi1TTUkKKyAgICBURVhUVUFMLUNPTlZFTlRJT04sIFJvd1N0YXR1cwor
CUZST00gU05NUHYyLVRDCisgICAgYmVnZW1vdAorCUZST00gQkVHRU1PVC1NSUI7CisKK2JlZ2Vt
b3RMb29zIE1PRFVMRS1JREVOVElUWQorICAgIExBU1QtVVBEQVRFRCAiMjAxNDAyMjQwMDAwWiIK
KyAgICBPUkdBTklaQVRJT04gIkZyZWVCU0QiCisgICAgQ09OVEFDVC1JTkZPCisJICAgICIJCUx1
aXogT3RhdmlvIE8gU291emEKKworCSAgICAgUG9zdGFsOglOL0EKKworCSAgICAgRmF4OglOL0EK
KworCSAgICAgRS1NYWlsOglsb29zQEZyZWVCU0Qub3JnIgorICAgIERFU0NSSVBUSU9OCisJICAg
ICJUaGUgQmVnZW1vdCBNSUIgZm9yIHJlYWRpbmcgbG03NSBzZW5zb3JzIGRhdGEuIgorICAgIFJF
VklTSU9OICAgICAiMjAxNDAyMjQwMDAwWiIKKyAgICBERVNDUklQVElPTgorCSAgICAiSW5pdGlh
bCByZXZpc2lvbi4iCisgICAgOjo9IHsgYmVnZW1vdCA0MDAgfQorCitiZWdlbW90TG03NU9iamVj
dHMJT0JKRUNUIElERU5USUZJRVIgOjo9IHsgYmVnZW1vdExtNzUgMSB9CisKKy0tIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0t
IENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitsbTc1U2Vuc29yCU9CSkVDVCBJ
REVOVElGSUVSIDo6PSB7IGJlZ2Vtb3RsbTc1T2JqZWN0cyAxIH0KKworbG03NVNlbnNvcnMJT0JK
RUNULVRZUEUKKyAgICBTWU5UQVgJSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkK
KyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OCisJIk51bWJlciBvZiBMTTc1IHNl
bnNvcnMgaW4gdGhlIHN5c3RlbS4iCisgICAgOjo9IHsgbG03NVNlbnNvcnMgMSB9CisKKy0tIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
LS0KKy0tIFRlbXBTZW5zb3IgVGFibGUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KK2xtNzVTZW5zb3JUYWJsZSBPQkpFQ1Qt
VFlQRQorICAgIFNZTlRBWAlTRVFVRU5DRSBPRiBMbTc1U2Vuc29yRW50cnkKKyAgICBNQVgtQUND
RVNTCW5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTgor
CSJBIHRhYmxlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRlbXBlcmF0dXJlIHNl
bnNvcnMuIgorICAgIDo6PSB7IGJlZ2Vtb3RMbTc1T2JqZWN0cyAyIH0KKworbG9vc1RlbXBTZW5z
b3JFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlMbTc1U2Vuc29yRW50cnkKKyAgICBNQVgt
QUNDRVNTCW5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElP
TgorCSJUYWJsZSBlbnRyeSB0aGF0IGRlc2NyaWJlcyBvbmUgdGVtcGVyYXR1cmUgc2Vuc29yLiIK
KyAgICBJTkRFWAl7IGxtNzVTZW5zb3JJbmRleCB9CisgICAgOjo9IHsgbG03NVNlbnNvclRhYmxl
IDEgfQorCitMbTc1U2Vuc29yRW50cnkgOjo9IFNFUVVFTkNFIHsKKyAgICBsbTc1U2Vuc29ySW5k
ZXgJCQlJbnRlZ2VyMzIsCisgICAgbG03NVNlbnNvclN5c2N0bEluZGV4CQlJbnRlZ2VyMzIsCisg
ICAgbG03NVNlbnNvckRlc2MJCQlPQ1RFVCBTVFJJTkcsCisgICAgbG03NVNlbnNvckxvY2F0aW9u
CQkJT0NURVQgU1RSSU5HLAorICAgIGxtNzVTZW5zb3JQbnBJbmZvCQkJT0NURVQgU1RSSU5HLAor
ICAgIGxtNzVTZW5zb3JQYXJlbnQJCQlPQ1RFVCBTVFJJTkcsCisgICAgbG03NVNlbnNvclRlbXBl
cmF0dXJlCQlJbnRlZ2VyMzIKK30KKworbG03NVNlbnNvckluZGV4IE9CSkVDVC1UWVBFCisgICAg
U1lOVEFYCUludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1
cnJlbnQKKyAgICBERVNDUklQVElPTgorCSJMTTc1IFNlbnNvciBpbmRleC4iCisgICAgOjo9IHsg
bG03NVNlbnNvckVudHJ5IDEgfQorCitsbTc1U2Vuc29yU3lzY3RsSW5kZXggT0JKRUNULVRZUEUK
KyAgICBTWU5UQVgJSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFU
VVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OCisJIkxNNzUgU2Vuc29yIHN5c2N0bCBpbmRleC4i
CisgICAgOjo9IHsgbG03NVNlbnNvckVudHJ5IDIgfQorCitsbTc1U2Vuc29yRGVzYyBPQkpFQ1Qt
VFlQRQorICAgIFNZTlRBWAlPQ1RFVCBTVFJJTkcKKyAgICBNQVgtQUNDRVNTCXJlYWQtb25seQor
ICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04KKwkiTE03NSBTZW5zb3IgZGVzY3Jp
cHRpb24uIgorICAgIDo6PSB7IGxtNzVTZW5zb3JFbnRyeSAzIH0KKworbG03NVNlbnNvckxvY2F0
aW9uIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYCU9DVEVUIFNUUklORworICAgIE1BWC1BQ0NFU1MJ
cmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTgorCSJMTTc1IFNl
bnNvciBsb2NhdGlvbi4iCisgICAgOjo9IHsgbG03NVNlbnNvckVudHJ5IDQgfQorCitsbTc1U2Vu
c29yUG5wSW5mbyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlPQ1RFVCBTVFJJTkcKKyAgICBNQVgt
QUNDRVNTCXJlYWQtb25seQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04KKwki
TE03NSBTZW5zb3IgcG5wIGluZm9ybWF0aW9uLiIKKyAgICA6Oj0geyBsbTc1U2Vuc29yRW50cnkg
NSB9CisKK2xtNzVTZW5zb3JQYXJlbnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVgJT0NURVQgU1RS
SU5HCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERF
U0NSSVBUSU9OCisJIkxNNzUgU2Vuc29yIHBhcmVudCBidXMuIgorICAgIDo6PSB7IGxtNzVTZW5z
b3JFbnRyeSA2IH0KKworbG03NVNlbnNvclRlbXBlcmF0dXJlIE9CSkVDVC1UWVBFCisgICAgU1lO
VEFYCUludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJl
bnQKKyAgICBERVNDUklQVElPTgorCSJMTTc1IFNlbnNvciB0ZW1wZXJhdHVyZS4iCisgICAgOjo9
IHsgbG03NVNlbnNvckVudHJ5IDcgfQorCitFTkQKClByb3BlcnR5IGNoYW5nZXMgb246IHVzci5z
YmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9CRUdFTU9ULUxNNzUtTUlCLnR4dApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMK
K3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtl
eXdvcmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogdXNyLnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L01ha2VmaWxl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHVzci5zYmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9NYWtlZmls
ZQkocmV2aXNpb24gMCkKKysrIHVzci5zYmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9NYWtl
ZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACisjICRGcmVlQlNEJAorCisuaW5j
bHVkZSA8YnNkLm93bi5taz4KKworTU9EPSAgICBsbTc1CitTUkNTPSAgIHNubXBfbG03NS5jCitY
U1lNPSAgIGJlZ2Vtb3RMbTc1CitNQU49ICAgIHNubXBfbG03NS4zCisKK0JNSUJTPSAgQkVHRU1P
VC1MTTc1LU1JQi50eHQKK0RFRlM9ICAgJHtNT0R9X3RyZWUuZGVmCisKKy5pbmNsdWRlIDxic2Qu
c25tcG1vZC5taz4KClByb3BlcnR5IGNoYW5nZXMgb246IHVzci5zYmluL2Jzbm1wZC9tb2R1bGVz
L3NubXBfbG03NS9NYWtlZmlsZQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0w
LDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBz
dm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdvcmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9
JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogdXNyLnNiaW4vYnNubXBk
L21vZHVsZXMvc25tcF9sbTc1L2xtNzVfdHJlZS5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4v
YnNubXBkL21vZHVsZXMvc25tcF9sbTc1L2xtNzVfdHJlZS5kZWYJKHJldmlzaW9uIDApCisrKyB1
c3Iuc2Jpbi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvbG03NV90cmVlLmRlZgkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU2IEBACisjLQorIyBDb3B5cmlnaHQgKGMpIDIwMTQgTHVpeiBPdGF2
aW8gTyBTb3V6YSA8bG9vc0BGcmVlQlNELm9yZz4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisj
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
IyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
IyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworIyAkRnJlZUJTRCQKKyMKKworKDEg
aW50ZXJuZXQKKyAgKDQgcHJpdmF0ZQorICAgICgxIGVudGVycHJpc2VzCisgICAgICAoMTIzMjUg
Zm9rdXMKKyAgICAgICAgKDEgYmVnZW1vdAorICAgICAgICAgICg0MDAgYmVnZW1vdExtNzUKKyAg
ICAgICAgICAgICgxIGJlZ2Vtb3RMbTc1T2JqZWN0cworICAgICAgICAgICAgICAoMSBsbTc1U2Vu
c29ycworICAgICAgICAgICAgICAgICgxIGxtNzVTZW5zb3JzIElOVEVHRVIzMiBvcF9sbTc1U2Vu
c29ycyBHRVQpCisgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgKDIgbG03NVNlbnNvclRh
YmxlCisgICAgICAgICAgICAgICAgKDEgbG03NVNlbnNvckVudHJ5IDogT0NURVRTVFJJTkcgb3Bf
bG03NVNlbnNvclRhYmxlCisgICAgICAgICAgICAgICAgICAoMSBsbTc1U2Vuc29ySW5kZXggSU5U
RUdFUjMyIEdFVCkKKyAgICAgICAgICAgICAgICAgICgyIGxtNzVTZW5zb3JTeXNjdGxJbmRleCBJ
TlRFR0VSMzIgR0VUKQorICAgICAgICAgICAgICAgICAgKDMgbG03NVNlbnNvckRlc2MgT0NURVRT
VFJJTkcgR0VUKQorICAgICAgICAgICAgICAgICAgKDQgbG03NVNlbnNvckxvY2F0aW9uIE9DVEVU
U1RSSU5HIEdFVCkKKyAgICAgICAgICAgICAgICAgICg1IGxtNzVTZW5zb3JQbnBJbmZvIE9DVEVU
U1RSSU5HIEdFVCkKKyAgICAgICAgICAgICAgICAgICg2IGxtNzVTZW5zb3JQYXJlbnQgT0NURVRT
VFJJTkcgR0VUKQorICAgICAgICAgICAgICAgICAgKDcgbG03NVNlbnNvclRlbXBlcmF0dXJlIElO
VEVHRVIzMiBHRVQpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICApCisgICAgICAg
ICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApCisgICAgKQorICApCispCklu
ZGV4OiB1c3Iuc2Jpbi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvc25tcF9sbTc1LjMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gdXNyLnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L3NubXBfbG03NS4zCShy
ZXZpc2lvbiAwKQorKysgdXNyLnNiaW4vYnNubXBkL21vZHVsZXMvc25tcF9sbTc1L3NubXBfbG03
NS4zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy5cIi0KKy5cIiBDb3B5cmlnaHQg
KGMpIDIwMTQgTHVpeiBPdGF2aW8gTyBTb3V6YSA8bG9vc0BGcmVlQlNELm9yZz4KKy5cIiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIg
YXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwi
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiCisuXCIgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKy5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKy5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorLlwiIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisuXCIgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKy5cIiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorLlwiIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
Ky5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisuXCIgU1VDSCBEQU1BR0UuCisuXCIKKy5cIiAkRnJlZUJTRCQK
Ky5cIgorLkRkIEZlYnJ1YXJ5IDI0LCAyMDE0CisuRHQgU05NUF9MTTc1IDMKKy5PcworLlNoIE5B
TUUKKy5ObSBzbm1wX2xtNzUKKy5OZCAiTE03NSBTZW5zb3IgbW9kdWxlIGZvciIKKy5YciBic25t
cGQgMQorLlNoIExJQlJBUlkKKy5QcSBiZWdlbW90U25tcGRNb2R1bGVQYXRoLiJsbTc1IiA9ICIv
dXNyL2xpYi9zbm1wX2xtNzUuc28iCisuU2ggREVTQ1JJUFRJT04KK1RoZQorLk5tIHNubXBfbG03
NQorbW9kdWxlIGltcGxlbWVudHMgYSBwcml2YXRlIEJFR0VNT1QtTE03NS1NSUIsIHdoaWNoIGFs
bG93cworcmVhZGluZyB0aGUgdGVtcGVyYXR1cmUgb2YgdGhlIExNNzUgc2Vuc29ycyBvbiB0aGUg
c3lzdGVtLgorLlBwCitUaGUgbW9kdWxlIHJlYWRzIHRoZSBzZW5zb3IocykgdGVtcGVyYXR1cmUg
dXNpbmcgdGhlCisuWHIgc3lzY3RsIDgKK0FQSS4KKy5TaCBGSUxFUworLkJsIC10YWcgLXdpZHRo
ICJYWFhYWFhYWFgiCisuSXQgUGEgL3Vzci9zaGFyZS9zbm1wL2RlZnMvbG03NV90cmVlLmRlZgor
VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBNSUIgdHJlZSBpbXBsZW1lbnRlZCBieQorLk5tIC4KKy5J
dCBQYSAvdXNyL3NoYXJlL3NubXAvbWlicy9CRUdFTU9ULUxNNzUtTUlCLnR4dAorVGhlIHByaXZh
dGUgQkVHRU1PVC1MTTc1LU1JQiB0aGF0IGlzIGltcGxlbWVudGVkIGJ5IHRoaXMgbW9kdWxlLgor
LkVsCisuU2ggU0VFIEFMU08KKy5YciBic25tcGQgMSAsCisuWHIgZ2Vuc25tcHRyZWUgMSAsCisu
WHIgc25tcG1vZCAzICwKKy5YciBsbTc1IDQKKy5TaCBBVVRIT1JTCisuQW4gTHVpeiBPdGF2aW8g
TyBTb3V6YSBBcSBsb29zQEZyZWVCU0Qub3JnCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiB1c3Iuc2Jp
bi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvc25tcF9sbTc1LjMKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWlu
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjprZXl3b3JkcwojIyAt
MCwwICsxICMjCitGcmVlQlNEPSVIClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IHVzci5zYmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9zbm1wX2xtNzUuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSB1c3Iuc2Jpbi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvc25tcF9sbTc1LmMJKHJl
dmlzaW9uIDApCisrKyB1c3Iuc2Jpbi9ic25tcGQvbW9kdWxlcy9zbm1wX2xtNzUvc25tcF9sbTc1
LmMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzYgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDE0IEx1aXogT3RhdmlvIE8gU291emEgPGxvb3NARnJlZUJTRC5vcmc+CisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRG
cmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVl
Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorCisjaW5jbHVkZSA8YnNubXAvc25tcG1vZC5o
PgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKworI2luY2x1ZGUgImxtNzVfb2lkLmgiCisj
aW5jbHVkZSAibG03NV90cmVlLmgiCisKKyNpZm5kZWYJTE03NUJVRgorI2RlZmluZQlMTTc1QlVG
CQk2NAorI2VuZGlmCisjZGVmaW5lCVRaX1pFUk9DCTI3MzIKKyNkZWZpbmUgVVBEQVRFX0lOVEVS
VkFMCTUwMAkvKiB1cGRhdGUgaW50ZXJ2YWwgaW4gdGlja3MgKi8KKworc3RhdGljIHN0cnVjdCBs
bW9kdWxlICptb2R1bGU7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXNuX29pZCBvaWRfbG03NSA9
IE9JRFhfYmVnZW1vdExtNzU7CisKKy8qIHRoZSBPYmplY3QgUmVzb3VyY2UgcmVnaXN0cmF0aW9u
IGluZGV4ICovCitzdGF0aWMgdV9pbnQgbG03NV9pbmRleCA9IDA7CisKKy8qIE51bWJlciBvZiBh
dmFpbGFibGUgc2Vuc29ycyBpbiB0aGUgc3lzdGVtLiAqLworc3RhdGljIGludCBsbTc1X3NlbnNv
cnM7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgc2luZ2xlIHNlbnNvci4KKyAq
Lworc3RydWN0IGxtNzVfc25tcF9zZW5zb3IgeworCVRBSUxRX0VOVFJZKGxtNzVfc25tcF9zZW5z
b3IpIGxpbms7CisJaW50MzJfdAkJaW5kZXg7CisJaW50MzJfdAkJc3lzY3RsaWR4OworCWludDMy
X3QJCXRlbXA7CisJY2hhcgkJZGVzY1tMTTc1QlVGXTsKKwljaGFyCQlsb2NhdGlvbltMTTc1QlVG
XTsKKwljaGFyCQlwYXJlbnRbTE03NUJVRl07CisJY2hhcgkJcG5waW5mb1tMTTc1QlVGXTsKK307
CisKK3N0YXRpYyBUQUlMUV9IRUFEKCwgbG03NV9zbm1wX3NlbnNvcikgc2Vuc29ycyA9CisgICAg
VEFJTFFfSEVBRF9JTklUSUFMSVpFUihzZW5zb3JzKTsKKworLyogVGlja3Mgb2YgdGhlIGxhc3Qg
c2Vuc29ycyByZWFkaW5nLiAqLworc3RhdGljIHVpbnQ2NF90IGxhc3Rfc2Vuc29yc191cGRhdGU7
CisKK3N0YXRpYyB2b2lkIGZyZWVfc2Vuc29ycyh2b2lkKTsKK3N0YXRpYyBpbnQgbG03NV9maW5p
KHZvaWQpOworc3RhdGljIGludCBsbTc1X2luaXQoc3RydWN0IGxtb2R1bGUgKm1vZCwgaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSk7CitzdGF0aWMgdm9pZCBsbTc1X3N0YXJ0KHZvaWQpOworc3RhdGlj
IGludCB1cGRhdGVfc2Vuc29ycyh2b2lkKTsKKworY29uc3Qgc3RydWN0IHNubXBfbW9kdWxlIGNv
bmZpZyA9IHsKKyAgICAuY29tbWVudCAgID0KKwkiVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUg
QkVHRU1PVCBNSUIgZm9yIHJlYWRpbmcgTE03NSBzZW5zb3JzIGRhdGEuIiwKKyAgICAuaW5pdCAg
ICAgID0gbG03NV9pbml0LAorICAgIC5zdGFydCAgICAgPSBsbTc1X3N0YXJ0LAorICAgIC5maW5p
ICAgICAgPSBsbTc1X2ZpbmksCisgICAgLnRyZWUgICAgICA9IGxtNzVfY3RyZWUsCisgICAgLnRy
ZWVfc2l6ZSA9IGxtNzVfQ1RSRUVfU0laRSwKK307CisKK3N0YXRpYyBpbnQKK2xtNzVfaW5pdChz
dHJ1Y3QgbG1vZHVsZSAqbW9kLCBpbnQgYXJnYyBfX3VudXNlZCwgY2hhciAqYXJndltdIF9fdW51
c2VkKQoreworCisJbW9kdWxlID0gbW9kOworCisJbG03NV9zZW5zb3JzID0gMDsKKwlvcGVubG9n
KCJzbm1wX2xtNzUiLCBMT0dfTkRFTEFZIHwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CisKKwlyZXR1
cm4oMCk7Cit9CisKK3N0YXRpYyB2b2lkCitsbTc1X3N0YXJ0KHZvaWQpCit7CisKKwlsbTc1X2lu
ZGV4ID0gb3JfcmVnaXN0ZXIoJm9pZF9sbTc1LAorCSAgICAiVGhlIE1JQiBtb2R1bGUgZm9yIHJl
YWRpbmcgbG03NSBzZW5zb3JzIGRhdGEuIiwgbW9kdWxlKTsKK30KKworc3RhdGljIGludAorbG03
NV9maW5pKHZvaWQpCit7CisKKwlvcl91bnJlZ2lzdGVyKGxtNzVfaW5kZXgpOworCWZyZWVfc2Vu
c29ycygpOworCWNsb3NlbG9nKCk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAor
ZnJlZV9zZW5zb3JzKHZvaWQpCit7CisJc3RydWN0IGxtNzVfc25tcF9zZW5zb3IgKnNlbnNvcjsK
KworCXdoaWxlICgoc2Vuc29yID0gVEFJTFFfRklSU1QoJnNlbnNvcnMpKSAhPSBOVUxMKSB7CisJ
CVRBSUxRX1JFTU9WRSgmc2Vuc29ycywgc2Vuc29yLCBsaW5rKTsKKwkJZnJlZShzZW5zb3IpOwor
CX0KK30KKworc3RhdGljIGludAorc3lzY3RsbmFtZShpbnQgKm9pZCwgaW50IG5sZW4sIGNoYXIg
Km5hbWUsIHNpemVfdCBsZW4pCit7CisJaW50IG1pYlsxMl07CisKKwlpZiAobmxlbiA+IChpbnQp
c2l6ZW9mKG1pYikgKyAyKQorCQlyZXR1cm4gKC0xKTsKKworCW1pYlswXSA9IDA7CisJbWliWzFd
ID0gMTsKKwltZW1jcHkobWliICsgMiwgb2lkLCBubGVuICogc2l6ZW9mKGludCkpOworCisJaWYg
KHN5c2N0bChtaWIsIG5sZW4gKyAyLCBuYW1lLCAmbGVuLCAwLCAwKSA9PSAtMSkKKwkJcmV0dXJu
ICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzeXNjdGxnZXRuZXh0KGlu
dCAqb2lkLCBpbnQgbmxlbiwgaW50ICpuZXh0LCBzaXplX3QgKm5leHRsZW4pCit7CisJaW50IG1p
YlsxMl07CisKKwlpZiAobmxlbiAgPiAoaW50KXNpemVvZihtaWIpICsgMikKKwkJcmV0dXJuICgt
MSk7CisKKwltaWJbMF0gPSAwOworCW1pYlsxXSA9IDI7CisJbWVtY3B5KG1pYiArIDIsIG9pZCwg
bmxlbiAqIHNpemVvZihpbnQpKTsKKworCWlmIChzeXNjdGwobWliLCBubGVuICsgMiwgbmV4dCwg
bmV4dGxlbiwgMCwgMCkgPT0gLTEpCisJCXJldHVybiAoLTEpOworCisJcmV0dXJuICgwKTsKK30K
Kworc3RhdGljIGludAordXBkYXRlX3NlbnNvcl9zeXNjdGwoY2hhciAqb2J1Ziwgc2l6ZV90ICpv
YnVmbGVuLCBpbnQgaWR4LCBjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgYnVmW0xNNzVCVUZd
OworCWludCBtaWJbNV07CisJc2l6ZV90IGxlbjsKKworCS8qIEZpbGwgb3V0IHRoZSBtaWIgaW5m
b3JtYXRpb24uICovCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICJkZXYubG03NS4l
ZC4lcyIsIGlkeCwgbmFtZSk7CisJbGVuID0gNDsKKwlpZiAoc3lzY3RsbmFtZXRvbWliKGJ1Ziwg
bWliLCAmbGVuKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBSZWFkIHRoZSBzeXNjdGwg
ZGF0YS4gKi8KKwlpZiAoc3lzY3RsKG1pYiwgbGVuLCBvYnVmLCBvYnVmbGVuLCBOVUxMLCAwKSA9
PSAtMSkKKwkJcmV0dXJuICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAor
dXBkYXRlX3NlbnNvcihzdHJ1Y3QgbG03NV9zbm1wX3NlbnNvciAqc2Vuc29yLCBpbnQgaWR4KQor
eworCXNpemVfdCBsZW47CisKKwlsZW4gPSBzaXplb2Yoc2Vuc29yLT5kZXNjKTsKKwl1cGRhdGVf
c2Vuc29yX3N5c2N0bChzZW5zb3ItPmRlc2MsICZsZW4sIGlkeCwgIiVkZXNjIik7CisKKwlsZW4g
PSBzaXplb2Yoc2Vuc29yLT5sb2NhdGlvbik7CisJdXBkYXRlX3NlbnNvcl9zeXNjdGwoc2Vuc29y
LT5sb2NhdGlvbiwgJmxlbiwgaWR4LCAiJWxvY2F0aW9uIik7CisKKwlsZW4gPSBzaXplb2Yoc2Vu
c29yLT5wbnBpbmZvKTsKKwl1cGRhdGVfc2Vuc29yX3N5c2N0bChzZW5zb3ItPnBucGluZm8sICZs
ZW4sIGlkeCwgIiVwbnBpbmZvIik7CisKKwlsZW4gPSBzaXplb2Yoc2Vuc29yLT5wYXJlbnQpOwor
CXVwZGF0ZV9zZW5zb3Jfc3lzY3RsKHNlbnNvci0+cGFyZW50LCAmbGVuLCBpZHgsICIlcGFyZW50
Iik7Cit9CisKK3N0YXRpYyBpbnQKK2FkZF9zZW5zb3IoY2hhciAqYnVmLCBzaXplX3QgbmxlbikK
K3sKKwlpbnQgaWR4LCBtaWJbNV0sIHRlbXA7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgbG03NV9z
bm1wX3NlbnNvciAqc2Vuc29yOworCisJaWYgKHNzY2FuZihidWYsICJkZXYubG03NS4lZC50ZW1w
ZXJhdHVyZSIsICZpZHgpICE9IDEpCisJCXJldHVybiAoLTEpOworCisJLyogRmlsbCBvdXQgdGhl
IG1pYiBpbmZvcm1hdGlvbi4gKi8KKwlpZiAoc3lzY3RsbmFtZXRvbWliKGJ1ZiwgbWliLCAmbmxl
bikgPT0gLTEpCisJCXJldHVybiAoLTEpOworCisJLyogUmVhZCB0aGUgc2Vuc29yIHRlbXBlcmF0
dXJlLiAqLworCWxlbiA9IHNpemVvZih0ZW1wKTsKKwlpZiAoc3lzY3RsKG1pYiwgbmxlbiwgJnRl
bXAsICZsZW4sIE5VTEwsIDApID09IC0xKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIEFkZCB0aGUg
c2Vuc29yIGRhdGEgdG8gdGhlIHRhYmxlLiAqLworCXNlbnNvciA9IGNhbGxvYygxLCBzaXplb2Yo
KnNlbnNvcikpOworCWlmIChzZW5zb3IgPT0gTlVMTCkgeworCQlzeXNsb2coTE9HX0VSUiwgIlVu
YWJsZSB0byBhbGxvY2F0ZSAlenUgYnl0ZXMgZm9yIHJlc291cmNlIiwKKwkJICAgIHNpemVvZigq
c2Vuc29yKSk7CisJCXJldHVybiAoLTEpOworCX0KKwlzZW5zb3ItPmluZGV4ID0gKytsbTc1X3Nl
bnNvcnM7CisJc2Vuc29yLT5zeXNjdGxpZHggPSBpZHg7CisJc2Vuc29yLT50ZW1wID0gKHRlbXAg
LSBUWl9aRVJPQykgLyAxMDsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmc2Vuc29ycywgc2Vuc29yLCBs
aW5rKTsKKworCXVwZGF0ZV9zZW5zb3Ioc2Vuc29yLCBpZHgpOworCisJcmV0dXJuICgwKTsKK30K
Kworc3RhdGljIGludAordXBkYXRlX3NlbnNvcnModm9pZCkKK3sKKwljaGFyIGJ1ZltMTTc1QlVG
XTsKKwlpbnQgaSwgcm9vdFs1XSwgKm5leHQsICpvaWQ7CisJc2l6ZV90IGxlbiwgbmV4dGxlbiwg
cm9vdGxlbjsKKwlzdGF0aWMgdWludDY0X3Qgbm93OworCisJbm93ID0gZ2V0X3RpY2tzKCk7CisJ
aWYgKG5vdyAtIGxhc3Rfc2Vuc29yc191cGRhdGUgPCBVUERBVEVfSU5URVJWQUwpCisJCXJldHVy
biAoMCk7CisKKwlsYXN0X3NlbnNvcnNfdXBkYXRlID0gbm93OworCisJLyogUmVzZXQgdGhlIHNl
bnNvciBkYXRhLiAqLworCWZyZWVfc2Vuc29ycygpOworCWxtNzVfc2Vuc29ycyA9IDA7CisKKwkv
KiBTdGFydCBmcm9tIHRoZSBsbTc1IGRlZmF1bHQgcm9vdCBub2RlLiAqLworCXJvb3RsZW4gPSAy
OworCWlmIChzeXNjdGxuYW1ldG9taWIoImRldi5sbTc1Iiwgcm9vdCwgJnJvb3RsZW4pID09IC0x
KQorCQlyZXR1cm4gKDApOworCisJb2lkID0gKGludCAqKW1hbGxvYyhzaXplb2YoaW50KSAqIHJv
b3RsZW4pOworCWlmIChvaWQgPT0gTlVMTCkgeworCQlwZXJyb3IoIm1hbGxvYyIpOworCQlyZXR1
cm4gKC0xKTsKKwl9CisJbWVtY3B5KG9pZCwgcm9vdCwgcm9vdGxlbiAqIHNpemVvZihpbnQpKTsK
KwlsZW4gPSByb290bGVuOworCisJLyogVHJhdmVyc2UgdGhlIHN5c2N0bCgzKSBpbnRlcmZhY2Ug
YW5kIGZpbmQgdGhlIGFjdGl2ZSBzZW5zb3JzLiAqLworCWZvciAoOzspIHsKKworCQkvKiBGaW5k
IHRoZSBzaXplIG9mIHRoZSBuZXh0IG1pYi4gKi8KKwkJbmV4dGxlbiA9IDA7CisJCWlmIChzeXNj
dGxnZXRuZXh0KG9pZCwgbGVuLCBOVUxMLCAmbmV4dGxlbikgPT0gLTEpIHsKKwkJCWZyZWUob2lk
KTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJLyogQWxvY2F0ZSBhbmQgcmVhZCB0aGUgbmV4dCBt
aWIuICovCisJCW5leHQgPSAoaW50ICopbWFsbG9jKG5leHRsZW4pOworCQlpZiAobmV4dCA9PSBO
VUxMKSB7CisJCQlzeXNsb2coTE9HX0VSUiwKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlICV6
dSBieXRlcyBmb3IgcmVzb3VyY2UiLAorCQkJICAgIG5leHRsZW4pOworCQkJZnJlZShvaWQpOwor
CQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKHN5c2N0bGdldG5leHQob2lkLCBsZW4sIG5leHQs
ICZuZXh0bGVuKSA9PSAtMSkgeworCQkJZnJlZShvaWQpOworCQkJZnJlZShuZXh0KTsKKwkJCXJl
dHVybiAoMCk7CisJCX0KKwkJZnJlZShvaWQpOworCQkvKiBDaGVjayBpZiB3ZSBjYXJlIGFib3V0
IHRoZSBuZXh0IG1pYi4gKi8KKwkJZm9yIChpID0gMDsgaSA8IChpbnQpcm9vdGxlbjsgaSsrKQor
CQkJaWYgKG5leHRbaV0gIT0gcm9vdFtpXSkgeworCQkJCWZyZWUobmV4dCk7CisJCQkJcmV0dXJu
ICgwKTsKKwkJCX0KKwkJb2lkID0gKGludCAqKW1hbGxvYyhuZXh0bGVuKTsKKwkJaWYgKG9pZCA9
PSBOVUxMKSB7CisJCQlzeXNsb2coTE9HX0VSUiwKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRl
ICV6dSBieXRlcyBmb3IgcmVzb3VyY2UiLAorCQkJICAgIG5leHRsZW4pOworCQkJZnJlZShuZXh0
KTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCW1lbWNweShvaWQsIG5leHQsIG5leHRsZW4pOwor
CQlmcmVlKG5leHQpOworCQlsZW4gPSBuZXh0bGVuIC8gc2l6ZW9mKGludCk7CisKKwkJLyogRmlu
ZCB0aGUgbWliIG5hbWUuICovCisJCWlmIChzeXNjdGxuYW1lKG9pZCwgbGVuLCBidWYsIHNpemVv
ZihidWYpKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0cnN0cihidWYsICJ0ZW1wZXJh
dHVyZSIpKQorCQkJaWYgKGFkZF9zZW5zb3IoYnVmLCBsZW4pICE9IDApIHsKKwkJCQlmcmVlKG9p
ZCk7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJfQorCisJcmV0dXJuICgwKTsKK30KKworaW50
CitvcF9sbTc1U2Vuc29ycyhzdHJ1Y3Qgc25tcF9jb250ZXh0ICpjb250ZXh0IF9fdW51c2VkLCBz
dHJ1Y3Qgc25tcF92YWx1ZSAqdmFsdWUsCisgICAgdV9pbnQgc3ViLCB1X2ludCBpaWR4IF9fdW51
c2VkLCBlbnVtIHNubXBfb3Agb3ApCit7CisJYXNuX3N1YmlkX3Qgd2hpY2g7CisKKwlpZiAodXBk
YXRlX3NlbnNvcnMoKSA9PSAtMSkKKwkJcmV0dXJuIChTTk1QX0VSUl9SRVNfVU5BVkFJTCk7CisK
Kwl3aGljaCA9IHZhbHVlLT52YXIuc3Vic1tzdWIgLSAxXTsKKworCXN3aXRjaCAob3ApIHsKKwlj
YXNlIFNOTVBfT1BfR0VUOgorCQlzd2l0Y2ggKHdoaWNoKSB7CisJCWNhc2UgTEVBRl9sbTc1U2Vu
c29yczoKKwkJCXZhbHVlLT52LmludGVnZXIgPSBsbTc1X3NlbnNvcnM7CisJCQlicmVhazsKKwkJ
ZGVmYXVsdDoKKwkJCXJldHVybiAoU05NUF9FUlJfUkVTX1VOQVZBSUwpOworCQl9CisJCWJyZWFr
OworCWNhc2UgU05NUF9PUF9TRVQ6CisJCXJldHVybiAoU05NUF9FUlJfTk9UX1dSSVRFQUJMRSk7
CisJY2FzZSBTTk1QX09QX0dFVE5FWFQ6CisJY2FzZSBTTk1QX09QX1JPTExCQUNLOgorCWNhc2Ug
U05NUF9PUF9DT01NSVQ6CisJCXJldHVybiAoU05NUF9FUlJfTk9FUlJPUik7CisJZGVmYXVsdDoK
KwkJcmV0dXJuIChTTk1QX0VSUl9SRVNfVU5BVkFJTCk7CisJfQorCisJcmV0dXJuIChTTk1QX0VS
Ul9OT0VSUk9SKTsKK30KKworaW50CitvcF9sbTc1U2Vuc29yVGFibGUoc3RydWN0IHNubXBfY29u
dGV4dCAqY29udGV4dCBfX3VudXNlZCwKKyAgICBzdHJ1Y3Qgc25tcF92YWx1ZSAqdmFsdWUsIHVf
aW50IHN1YiwgdV9pbnQgaWlkeCBfX3VudXNlZCwgZW51bSBzbm1wX29wIG9wKQoreworCXN0cnVj
dCBsbTc1X3NubXBfc2Vuc29yICpzZW5zb3I7CisJYXNuX3N1YmlkX3Qgd2hpY2g7CisJaW50IHJl
dDsKKworCWlmICh1cGRhdGVfc2Vuc29ycygpID09IC0xKQorCQlyZXR1cm4gKFNOTVBfRVJSX1JF
U19VTkFWQUlMKTsKKworCXdoaWNoID0gdmFsdWUtPnZhci5zdWJzW3N1YiAtIDFdOworCisJc3dp
dGNoIChvcCkgeworCWNhc2UgU05NUF9PUF9HRVRORVhUOgorCQlzZW5zb3IgPSBORVhUX09CSkVD
VF9JTlQoJnNlbnNvcnMsICZ2YWx1ZS0+dmFyLCBzdWIpOworCQlpZiAoc2Vuc29yID09IE5VTEwp
CisJCQlyZXR1cm4gKFNOTVBfRVJSX05PU1VDSE5BTUUpOworCQl2YWx1ZS0+dmFyLmxlbiA9IHN1
YiArIDE7CisJCXZhbHVlLT52YXIuc3Vic1tzdWJdID0gc2Vuc29yLT5pbmRleDsKKwkJYnJlYWs7
CisJY2FzZSBTTk1QX09QX0dFVDoKKwkJaWYgKHZhbHVlLT52YXIubGVuIC0gc3ViICE9IDEpCisJ
CQlyZXR1cm4gKFNOTVBfRVJSX05PU1VDSE5BTUUpOworCQlzZW5zb3IgPSBGSU5EX09CSkVDVF9J
TlQoJnNlbnNvcnMsICZ2YWx1ZS0+dmFyLCBzdWIpOworCQlpZiAoc2Vuc29yID09IE5VTEwpCisJ
CQlyZXR1cm4gKFNOTVBfRVJSX05PU1VDSE5BTUUpOworCQlicmVhazsKKwljYXNlIFNOTVBfT1Bf
U0VUOgorCQlyZXR1cm4gKFNOTVBfRVJSX05PVF9XUklURUFCTEUpOworCWNhc2UgU05NUF9PUF9S
T0xMQkFDSzoKKwljYXNlIFNOTVBfT1BfQ09NTUlUOgorCQlyZXR1cm4gKFNOTVBfRVJSX05PRVJS
T1IpOworCWRlZmF1bHQ6CisJCXJldHVybiAoU05NUF9FUlJfUkVTX1VOQVZBSUwpOworCX0KKwor
CXJldCA9IFNOTVBfRVJSX05PRVJST1I7CisKKwlzd2l0Y2ggKHdoaWNoKSB7CisJY2FzZSBMRUFG
X2xtNzVTZW5zb3JJbmRleDoKKwkJdmFsdWUtPnYuaW50ZWdlciA9IHNlbnNvci0+aW5kZXg7CisJ
CWJyZWFrOworCWNhc2UgTEVBRl9sbTc1U2Vuc29yU3lzY3RsSW5kZXg6CisJCXZhbHVlLT52Lmlu
dGVnZXIgPSBzZW5zb3ItPnN5c2N0bGlkeDsKKwkJYnJlYWs7CisJY2FzZSBMRUFGX2xtNzVTZW5z
b3JEZXNjOgorCQlyZXQgPSBzdHJpbmdfZ2V0KHZhbHVlLCBzZW5zb3ItPmRlc2MsIC0xKTsKKwkJ
YnJlYWs7CisJY2FzZSBMRUFGX2xtNzVTZW5zb3JMb2NhdGlvbjoKKwkJcmV0ID0gc3RyaW5nX2dl
dCh2YWx1ZSwgc2Vuc29yLT5sb2NhdGlvbiwgLTEpOworCQlicmVhazsKKwljYXNlIExFQUZfbG03
NVNlbnNvclBucEluZm86CisJCXJldCA9IHN0cmluZ19nZXQodmFsdWUsIHNlbnNvci0+cG5waW5m
bywgLTEpOworCQlicmVhazsKKwljYXNlIExFQUZfbG03NVNlbnNvclBhcmVudDoKKwkJcmV0ID0g
c3RyaW5nX2dldCh2YWx1ZSwgc2Vuc29yLT5wYXJlbnQsIC0xKTsKKwkJYnJlYWs7CisJY2FzZSBM
RUFGX2xtNzVTZW5zb3JUZW1wZXJhdHVyZToKKwkJdmFsdWUtPnYuaW50ZWdlciA9IHNlbnNvci0+
dGVtcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gU05NUF9FUlJfUkVTX1VOQVZBSUw7
CisJCWJyZWFrOworCX0KKworCXJldHVybiAocmV0KTsKK30KClByb3BlcnR5IGNoYW5nZXMgb246
IHVzci5zYmluL2Jzbm1wZC9tb2R1bGVzL3NubXBfbG03NS9zbm1wX2xtNzUuYwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3Rl
eHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdv
cmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQo=
--001a11c266c465a18604f5977b8d--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB=2f8zo2gpHmUHsW9EnuZ9QK9k1jwgipg4FQCMSHt53hvnihw>