Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Nov 2008 08:25:14 -0800
From:      "Ahrenholz, Jeffrey M" <jeffrey.m.ahrenholz@boeing.com>
To:        <freebsd-virtualization@freebsd.org>
Subject:   multicast routing patch revised
Message-ID:  <0DF156EE7414494187B087A3C279BDB40AF14C23@XCH-NW-6V1.nw.nos.boeing.com>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.


------_=_NextPart_001_01C9402C.548A7819
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi,
Attached is an updated patch for multicast routing. This is against the
vimage_7-20081015.tgz that Marko has posted on http://imunes.tel.fer.hr/

This fixes a number of issues with the previous patch that I posted -
initialization problems, adds IPv6 multicast routing support, fixes
timer functions with the bandwidth monitoring code. This has been tested
with PIM and IPv4 and IPv6 multicast routing. Now it uses its own
VNET_MOD_MROUTE state allowing for proper initialization.

The file porting_to_vimage.txt has been very helpful! I still have one
problem however which is not covered by the text -- when you
reboot/shutdown the machine, the ip_mroute_modevent() w/MOD_UNLOAD is
called without curvnet being valid. How do you find the proper vnet in
this situation?

-Jeff

------_=_NextPart_001_01C9402C.548A7819
Content-Type: application/octet-stream;
	name="vimage_7-20081015-mroute.diff"
Content-Transfer-Encoding: base64
Content-Description: vimage_7-20081015-mroute.diff
Content-Disposition: attachment;
	filename="vimage_7-20081015-mroute.diff"

ZGlmZiAtdXIgc3lzLjIwMDgxMDE1L25ldGluZXQvaXBfbXJvdXRlLmMgc3lzL25ldGluZXQvaXBf
bXJvdXRlLmMKLS0tIHN5cy4yMDA4MTAxNS9uZXRpbmV0L2lwX21yb3V0ZS5jCTIwMDgtMDgtMTYg
MTY6Mjk6MTkuMDAwMDAwMDAwIC0wNzAwCisrKyBzeXMvbmV0aW5ldC9pcF9tcm91dGUuYwkyMDA4
LTExLTA1IDE2OjMwOjA0LjAwMDAwMDAwMCAtMDgwMApAQCAtOTksNiArOTksNyBAQAogI2luY2x1
ZGUgPG5ldGluZXQvcGltX3Zhci5oPgogI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CiAjaWZkZWYg
SU5FVDYKKyNpbmNsdWRlIDxuZXRpbmV0Ni92aW5ldDYuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2lw
Ni5oPgogI2luY2x1ZGUgPG5ldGluZXQ2L2luNl92YXIuaD4KICNpbmNsdWRlIDxuZXRpbmV0Ni9p
cDZfbXJvdXRlLmg+CkBAIC0xMTIsMjEgKzExMywzMCBAQAogICogQ29udHJvbCBkZWJ1Z2dpbmcg
Y29kZSBmb3IgcnN2cCBhbmQgbXVsdGljYXN0IHJvdXRpbmcgY29kZS4KICAqIENhbiBvbmx5IHNl
dCB0aGVtIHdpdGggdGhlIGRlYnVnZ2VyLgogICovCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHVf
aW50ICAgIHJzdnBkZWJ1ZzsJCS8qIG5vbi16ZXJvIGVuYWJsZXMgZGVidWdnaW5nCSovCiAKIHN0
YXRpYyB1X2ludAltcnRkZWJ1ZzsJCS8qIGFueSBzZXQgb2YgdGhlIGZsYWdzIGJlbG93CSovCisj
ZW5kaWYgLyogIVZJTUFHRSAqLwogI2RlZmluZQkJREVCVUdfTUZDCTB4MDIKICNkZWZpbmUJCURF
QlVHX0ZPUldBUkQJMHgwNAogI2RlZmluZQkJREVCVUdfRVhQSVJFCTB4MDgKICNkZWZpbmUJCURF
QlVHX1hNSVQJMHgxMAogI2RlZmluZQkJREVCVUdfUElNCTB4MjAKIAorI2lmbmRlZiBWSU1BR0UK
ICNkZWZpbmUJCVZJRklfSU5WQUxJRAkoKHZpZmlfdCkgLTEpCisjZW5kaWYgLyogIVZJTUFHRSAq
LwogCiAjZGVmaW5lIE1fSEFTQ0wobSkJKChtKS0+bV9mbGFncyAmIE1fRVhUKQogCiBzdGF0aWMg
TUFMTE9DX0RFRklORShNX01SVEFCTEUsICJtcm91dGV0YmwiLCAibXVsdGljYXN0IHJvdXRpbmcg
dGFibGVzIik7CiAKK3N0YXRpYyBpbnQgdm5ldF9tcm91dGVfaWF0dGFjaChjb25zdCB2b2lkICop
Oworc3RhdGljIGludCB2bmV0X21yb3V0ZV9pZGV0YWNoKGNvbnN0IHZvaWQgKik7CisKK1ZORVRf
TU9EX0RFQ0xBUkUoTVJPVVRFLCBtcm91dGUsIHZuZXRfbXJvdXRlX2lhdHRhY2gsIHZuZXRfbXJv
dXRlX2lkZXRhY2gsIElORVQsIE5VTEwpCisKIC8qCiAgKiBMb2NraW5nLiAgV2UgdXNlIHR3byBs
b2Nrczogb25lIGZvciB0aGUgdmlydHVhbCBpbnRlcmZhY2UgdGFibGUgYW5kCiAgKiBvbmUgZm9y
IHRoZSBmb3J3YXJkaW5nIHRhYmxlLiAgVGhlc2UgbG9ja3MgbWF5IGJlIG5lc3RlZCBpbiB3aGlj
aCBjYXNlCkBAIC0xNDAsNDggKzE1MCw1OSBAQAogICoKICAqLwogCisjaWZuZGVmIFZJTUFHRQog
c3RhdGljIHN0cnVjdCBtcnRzdGF0CW1ydHN0YXQ7Ci1TWVNDVExfU1RSVUNUKF9uZXRfaW5ldF9p
cCwgT0lEX0FVVE8sIG1ydHN0YXQsIENUTEZMQUdfUlcsCi0gICAgJm1ydHN0YXQsIG1ydHN0YXQs
CisjZW5kaWYgLyogIVZJTUFHRSAqLworU1lTQ1RMX1ZfU1RSVUNUKFZfTkVULCB2bmV0X21yb3V0
ZSwgX25ldF9pbmV0X2lwLCBPSURfQVVUTywgbXJ0c3RhdCwKKyAgICBDVExGTEFHX1JXLCBtcnRz
dGF0LCBtcnRzdGF0LAogICAgICJNdWx0aWNhc3QgUm91dGluZyBTdGF0aXN0aWNzIChzdHJ1Y3Qg
bXJ0c3RhdCwgbmV0aW5ldC9pcF9tcm91dGUuaCkiKTsKLQorI2lmbmRlZiBWSU1BR0UKIHN0YXRp
YyBzdHJ1Y3QgbWZjCSptZmN0YWJsZVtNRkNUQkxTSVpdOwotU1lTQ1RMX09QQVFVRShfbmV0X2lu
ZXRfaXAsIE9JRF9BVVRPLCBtZmN0YWJsZSwgQ1RMRkxBR19SRCwKLSAgICAmbWZjdGFibGUsIHNp
emVvZihtZmN0YWJsZSksICJTLCptZmNbTUZDVEJMU0laXSIsCitTWVNDVExfVl9PSUQoVl9ORVQs
IHZuZXRfbXJvdXRlLCBfbmV0X2luZXRfaXAsIENUTFRZUEVfT1BBUVVFfE9JRF9BVVRPLAorICAg
IG1mY3RhYmxlLCBDVExGTEFHX1JELCBtZmN0YWJsZSwgc2l6ZW9mKG1mY3RhYmxlKSwgc3lzY3Rs
X2hhbmRsZV9vcGFxdWUsCisgICAgIlMsKm1mY1tNRkNUQkxTSVpdIiwKICAgICAiTXVsdGljYXN0
IEZvcndhcmRpbmcgVGFibGUgKHN0cnVjdCAqbWZjW01GQ1RCTFNJWl0sIG5ldGluZXQvaXBfbXJv
dXRlLmgpIik7CiAKIHN0YXRpYyBzdHJ1Y3QgbXR4IG1yb3V0ZXJfbXR4OwotI2RlZmluZQlNUk9V
VEVSX0xPQ0soKQkJbXR4X2xvY2soJm1yb3V0ZXJfbXR4KQotI2RlZmluZQlNUk9VVEVSX1VOTE9D
SygpCW10eF91bmxvY2soJm1yb3V0ZXJfbXR4KQotI2RlZmluZQlNUk9VVEVSX0xPQ0tfQVNTRVJU
KCkJbXR4X2Fzc2VydCgmbXJvdXRlcl9tdHgsIE1BX09XTkVEKQorI2VuZGlmIC8qICFWSU1BR0Ug
Ki8KKyNkZWZpbmUJTVJPVVRFUl9MT0NLKCkJCW10eF9sb2NrKCZWX21yb3V0ZXJfbXR4KQorI2Rl
ZmluZQlNUk9VVEVSX1VOTE9DSygpCW10eF91bmxvY2soJlZfbXJvdXRlcl9tdHgpCisjZGVmaW5l
CU1ST1VURVJfTE9DS19BU1NFUlQoKQltdHhfYXNzZXJ0KCZWX21yb3V0ZXJfbXR4LCBNQV9PV05F
RCkKICNkZWZpbmUJTVJPVVRFUl9MT0NLX0lOSVQoKQlcCi0JbXR4X2luaXQoJm1yb3V0ZXJfbXR4
LCAiSVB2NCBtdWx0aWNhc3QgZm9yd2FyZGluZyIsIE5VTEwsIE1UWF9ERUYpCi0jZGVmaW5lCU1S
T1VURVJfTE9DS19ERVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJm1yb3V0ZXJfbXR4KQorCW10eF9pbml0
KCZWX21yb3V0ZXJfbXR4LCAiSVB2NCBtdWx0aWNhc3QgZm9yd2FyZGluZyIsIE5VTEwsIE1UWF9E
RUYpCisjZGVmaW5lCU1ST1VURVJfTE9DS19ERVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJlZfbXJvdXRl
cl9tdHgpCiAKKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgc3RydWN0IG10eCBtZmNfbXR4OwotI2Rl
ZmluZQlNRkNfTE9DSygpCW10eF9sb2NrKCZtZmNfbXR4KQotI2RlZmluZQlNRkNfVU5MT0NLKCkJ
bXR4X3VubG9jaygmbWZjX210eCkKLSNkZWZpbmUJTUZDX0xPQ0tfQVNTRVJUKCkJbXR4X2Fzc2Vy
dCgmbWZjX210eCwgTUFfT1dORUQpCi0jZGVmaW5lCU1GQ19MT0NLX0lOSVQoKQltdHhfaW5pdCgm
bWZjX210eCwgIm1yb3V0ZSBtZmMgdGFibGUiLCBOVUxMLCBNVFhfREVGKQotI2RlZmluZQlNRkNf
TE9DS19ERVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJm1mY19tdHgpCisjZW5kaWYgLyogIVZJTUFHRSAq
LworI2RlZmluZQlNRkNfTE9DSygpCW10eF9sb2NrKCZWX21mY19tdHgpCisjZGVmaW5lCU1GQ19V
TkxPQ0soKQltdHhfdW5sb2NrKCZWX21mY19tdHgpCisjZGVmaW5lCU1GQ19MT0NLX0FTU0VSVCgp
CW10eF9hc3NlcnQoJlZfbWZjX210eCwgTUFfT1dORUQpCisjZGVmaW5lCU1GQ19MT0NLX0lOSVQo
KQltdHhfaW5pdCgmVl9tZmNfbXR4LCAibXJvdXRlIG1mYyB0YWJsZSIsIE5VTEwsIE1UWF9ERUYp
CisjZGVmaW5lCU1GQ19MT0NLX0RFU1RST1koKQltdHhfZGVzdHJveSgmVl9tZmNfbXR4KQogCisj
aWZuZGVmIFZJTUFHRQogc3RhdGljIHN0cnVjdCB2aWYJdmlmdGFibGVbTUFYVklGU107Ci1TWVND
VExfT1BBUVVFKF9uZXRfaW5ldF9pcCwgT0lEX0FVVE8sIHZpZnRhYmxlLCBDVExGTEFHX1JELAot
ICAgICZ2aWZ0YWJsZSwgc2l6ZW9mKHZpZnRhYmxlKSwgIlMsdmlmW01BWFZJRlNdIiwKK1NZU0NU
TF9WX09JRChWX05FVCwgdm5ldF9tcm91dGUsIF9uZXRfaW5ldF9pcCwgQ1RMVFlQRV9PUEFRVUV8
T0lEX0FVVE8sIHZpZnRhYmxlLAorICAgIENUTEZMQUdfUkQsIHZpZnRhYmxlLCBzaXplb2Yodmlm
dGFibGUpLCBzeXNjdGxfaGFuZGxlX29wYXF1ZSwgCisgICAgIlMsdmlmW01BWFZJRlNdIiwKICAg
ICAiTXVsdGljYXN0IFZpcnR1YWwgSW50ZXJmYWNlcyAoc3RydWN0IHZpZltNQVhWSUZTXSwgbmV0
aW5ldC9pcF9tcm91dGUuaCkiKTsKIAogc3RhdGljIHN0cnVjdCBtdHggdmlmX210eDsKLSNkZWZp
bmUJVklGX0xPQ0soKQltdHhfbG9jaygmdmlmX210eCkKLSNkZWZpbmUJVklGX1VOTE9DSygpCW10
eF91bmxvY2soJnZpZl9tdHgpCi0jZGVmaW5lCVZJRl9MT0NLX0FTU0VSVCgpCW10eF9hc3NlcnQo
JnZpZl9tdHgsIE1BX09XTkVEKQotI2RlZmluZQlWSUZfTE9DS19JTklUKCkJbXR4X2luaXQoJnZp
Zl9tdHgsICJtcm91dGUgdmlmIHRhYmxlIiwgTlVMTCwgTVRYX0RFRikKLSNkZWZpbmUJVklGX0xP
Q0tfREVTVFJPWSgpCW10eF9kZXN0cm95KCZ2aWZfbXR4KQorI2VuZGlmIC8qICFWSU1BR0UgKi8K
KyNkZWZpbmUJVklGX0xPQ0soKQltdHhfbG9jaygmVl92aWZfbXR4KQorI2RlZmluZQlWSUZfVU5M
T0NLKCkJbXR4X3VubG9jaygmVl92aWZfbXR4KQorI2RlZmluZQlWSUZfTE9DS19BU1NFUlQoKQlt
dHhfYXNzZXJ0KCZWX3ZpZl9tdHgsIE1BX09XTkVEKQorI2RlZmluZQlWSUZfTE9DS19JTklUKCkJ
bXR4X2luaXQoJlZfdmlmX210eCwgIm1yb3V0ZSB2aWYgdGFibGUiLCBOVUxMLCBNVFhfREVGKQor
I2RlZmluZQlWSUZfTE9DS19ERVNUUk9ZKCkJbXR4X2Rlc3Ryb3koJlZfdmlmX210eCkKIAorI2lm
bmRlZiBWSU1BR0UKIHN0YXRpYyB1X2NoYXIJCW5leHBpcmVbTUZDVEJMU0laXTsKIAogc3RhdGlj
IGV2ZW50aGFuZGxlcl90YWcgaWZfZGV0YWNoX2V2ZW50X3RhZyA9IE5VTEw7CiAKIHN0YXRpYyBz
dHJ1Y3QgY2FsbG91dCBleHBpcmVfdXBjYWxsc19jaDsKKyNlbmRpZiAvKiAhVklNQUdFICovCiAK
ICNkZWZpbmUJCUVYUElSRV9USU1FT1VUCShoeiAvIDQpCS8qIDR4IC8gc2Vjb25kCQkqLwogI2Rl
ZmluZQkJVVBDQUxMX0VYUElSRQk2CQkvKiBudW1iZXIgb2YgdGltZW91dHMJKi8KQEAgLTE5Niwy
NSArMjE3LDMxIEBACiAgKiBQZW5kaW5nIHRpbWVvdXRzIGFyZSBzdG9yZWQgaW4gYSBoYXNoIHRh
YmxlLCB0aGUga2V5IGJlaW5nIHRoZQogICogZXhwaXJhdGlvbiB0aW1lLiBQZXJpb2RpY2FsbHks
IHRoZSBlbnRyaWVzIGFyZSBhbmFseXNlZCBhbmQgcHJvY2Vzc2VkLgogICovCisjaWZuZGVmIFZJ
TUFHRQogI2RlZmluZSBCV19NRVRFUl9CVUNLRVRTCTEwMjQKIHN0YXRpYyBzdHJ1Y3QgYndfbWV0
ZXIgKmJ3X21ldGVyX3RpbWVyc1tCV19NRVRFUl9CVUNLRVRTXTsKLXN0YXRpYyBzdHJ1Y3QgY2Fs
bG91dCBid19tZXRlcl9jaDsKK3N0YXRpYyBzdHJ1Y3QgY2FsbG91dCBWX2J3X21ldGVyX2NoOwor
I2VuZGlmIC8qICFWSU1BR0UgKi8KICNkZWZpbmUgQldfTUVURVJfUEVSSU9EIChoeikJCS8qIHBl
cmlvZGljYWwgaGFuZGxpbmcgb2YgYncgbWV0ZXJzICovCiAKIC8qCiAgKiBQZW5kaW5nIHVwY2Fs
bHMgYXJlIHN0b3JlZCBpbiBhIHZlY3RvciB3aGljaCBpcyBmbHVzaGVkIHdoZW4KICAqIGZ1bGws
IG9yIHBlcmlvZGljYWxseQogICovCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHN0cnVjdCBid191
cGNhbGwJYndfdXBjYWxsc1tCV19VUENBTExTX01BWF07CiBzdGF0aWMgdV9pbnQJYndfdXBjYWxs
c19uOyAvKiAjIG9mIHBlbmRpbmcgdXBjYWxscyAqLwogc3RhdGljIHN0cnVjdCBjYWxsb3V0IGJ3
X3VwY2FsbHNfY2g7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogI2RlZmluZSBCV19VUENBTExTX1BF
UklPRCAoaHopCQkvKiBwZXJpb2RpY2FsIGZsdXNoIG9mIGJ3IHVwY2FsbHMgKi8KIAorI2lmbmRl
ZiBWSU1BR0UKIHN0YXRpYyBzdHJ1Y3QgcGltc3RhdCBwaW1zdGF0OworI2VuZGlmIC8qICFWSU1B
R0UgKi8KIAogU1lTQ1RMX05PREUoX25ldF9pbmV0LCBJUFBST1RPX1BJTSwgcGltLCBDVExGTEFH
X1JXLCAwLCAiUElNIik7Ci1TWVNDVExfU1RSVUNUKF9uZXRfaW5ldF9waW0sIFBJTUNUTF9TVEFU
Uywgc3RhdHMsIENUTEZMQUdfUkQsCi0gICAgJnBpbXN0YXQsIHBpbXN0YXQsCitTWVNDVExfVl9T
VFJVQ1QoVl9ORVQsIHZuZXRfbXJvdXRlLCBfbmV0X2luZXRfcGltLCBQSU1DVExfU1RBVFMsIHN0
YXRzLAorICAgIENUTEZMQUdfUkQsIHBpbXN0YXQsIHBpbXN0YXQsCiAgICAgIlBJTSBTdGF0aXN0
aWNzIChzdHJ1Y3QgcGltc3RhdCwgbmV0aW5ldC9waW1fdmFyLmgpIik7CiAKIHN0YXRpYyB1X2xv
bmcJcGltX3NxdWVsY2hfd2hvbGVwa3QgPSAwOwpAQCAtMjIyLDYgKzI0OSw3IEBACiAgICAgJnBp
bV9zcXVlbGNoX3dob2xlcGt0LCAwLAogICAgICJEaXNhYmxlIElHTVBfV0hPTEVQS1Qgbm90aWZp
Y2F0aW9ucyBpZiByZW5kZXp2b3VzIHBvaW50IGlzIHVuc3BlY2lmaWVkIik7CiAKKwogZXh0ZXJu
ICBzdHJ1Y3QgZG9tYWluIGluZXRkb21haW47CiBzdHJ1Y3QgcHJvdG9zdyBpbl9waW1fcHJvdG9z
dyA9IHsKIAkucHJfdHlwZSA9CQlTT0NLX1JBVywKQEAgLTI5MSwxMyArMzE5LDE3IEBACiAgICAg
MAkJCQkvKiBmbGFncyAqLwogfTsKIAorI2lmbmRlZiBWSU1BR0UKIHN0YXRpYyBzdHJ1Y3QgaWZu
ZXQgbXVsdGljYXN0X3JlZ2lzdGVyX2lmOwogc3RhdGljIHZpZmlfdCByZWdfdmlmX251bSA9IFZJ
RklfSU5WQUxJRDsKKyNlbmRpZiAvKiAhVklNQUdFICovCiAKIC8qCiAgKiBQcml2YXRlIHZhcmlh
Ymxlcy4KICAqLworI2lmbmRlZiBWSU1BR0UKIHN0YXRpYyB2aWZpX3QJICAgbnVtdmlmczsKKyNl
bmRpZiAvKiAhVklNQUdFICovCiAKIHN0YXRpYyB1X2xvbmcJWF9pcF9tY2FzdF9zcmMoaW50IHZp
ZmkpOwogc3RhdGljIGludAlYX2lwX21mb3J3YXJkKHN0cnVjdCBpcCAqaXAsIHN0cnVjdCBpZm5l
dCAqaWZwLApAQCAtMzM3LDcgKzM2OSw3IEBACiBzdGF0aWMgdm9pZCBid191cGNhbGxzX3NlbmQo
dm9pZCk7CiBzdGF0aWMgdm9pZCBzY2hlZHVsZV9id19tZXRlcihzdHJ1Y3QgYndfbWV0ZXIgKngs
IHN0cnVjdCB0aW1ldmFsICpub3dwKTsKIHN0YXRpYyB2b2lkIHVuc2NoZWR1bGVfYndfbWV0ZXIo
c3RydWN0IGJ3X21ldGVyICp4KTsKLXN0YXRpYyB2b2lkIGJ3X21ldGVyX3Byb2Nlc3Modm9pZCk7
CitzdGF0aWMgdm9pZCBid19tZXRlcl9wcm9jZXNzKHN0cnVjdCB2bmV0ICp2bmV0KTsKIHN0YXRp
YyB2b2lkIGV4cGlyZV9id191cGNhbGxzX3NlbmQodm9pZCAqKTsKIHN0YXRpYyB2b2lkIGV4cGly
ZV9id19tZXRlcl9wcm9jZXNzKHZvaWQgKik7CiAKQEAgLTM1Miw3ICszODQsOSBAQAogLyoKICAq
IHdoZXRoZXIgb3Igbm90IHNwZWNpYWwgUElNIGFzc2VydCBwcm9jZXNzaW5nIGlzIGVuYWJsZWQu
CiAgKi8KKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgaW50IHBpbV9hc3NlcnQ7CisjZW5kaWYgLyog
IVZJTUFHRSAqLwogLyoKICAqIFJhdGUgbGltaXQgZm9yIGFzc2VydCBub3RpZmljYXRpb24gbWVz
c2FnZXMsIGluIHVzZWMKICAqLwpAQCAtMzY3LDcgKzQwMSw5IEBACiAJCQkJCSBNUlRfTUZDX0ZM
QUdTX0JPUkRFUl9WSUYgfAogCQkJCQkgTVJUX01GQ19SUCB8CiAJCQkJCSBNUlRfTUZDX0JXX1VQ
Q0FMTCk7CisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHVpbnQzMl90IG1ydF9hcGlfY29uZmlnID0g
MDsKKyNlbmRpZiAvKiAhVklNQUdFICovCiAKIC8qCiAgKiBIYXNoIGZ1bmN0aW9uIGZvciBhIHNv
dXJjZSwgZ3JvdXAgZW50cnkKQEAgLTM4MywxMSArNDE5LDEyIEBACiBzdGF0aWMgc3RydWN0IG1m
YyAqCiBtZmNfZmluZChpbl9hZGRyX3QgbywgaW5fYWRkcl90IGcpCiB7CisgICAgSU5JVF9WTkVU
X01ST1VURShjdXJ2bmV0KTsKICAgICBzdHJ1Y3QgbWZjICpydDsKIAogICAgIE1GQ19MT0NLX0FT
U0VSVCgpOwogCi0gICAgZm9yIChydCA9IG1mY3RhYmxlW01GQ0hBU0gobyxnKV07IHJ0OyBydCA9
IHJ0LT5tZmNfbmV4dCkKKyAgICBmb3IgKHJ0ID0gVl9tZmN0YWJsZVtNRkNIQVNIKG8sZyldOyBy
dDsgcnQgPSBydC0+bWZjX25leHQpCiAJaWYgKChydC0+bWZjX29yaWdpbi5zX2FkZHIgPT0gbykg
JiYKIAkJKHJ0LT5tZmNfbWNhc3RncnAuc19hZGRyID09IGcpICYmIChydC0+bWZjX3N0YWxsID09
IE5VTEwpKQogCSAgICBicmVhazsKQEAgLTQyNCw3ICs0NjEsOCBAQAogc3RhdGljIGludAogWF9p
cF9tcm91dGVyX3NldChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpCiB7
Ci0gICAgSU5JVF9WTkVUX0lORVQoY3Vydm5ldCk7CisgICAgSU5JVF9WTkVUX0lORVQoc28tPnNv
X3ZuZXQpOworICAgIElOSVRfVk5FVF9NUk9VVEUoc28tPnNvX3ZuZXQpOwogICAgIGludAllcnJv
ciwgb3B0dmFsOwogICAgIHZpZmlfdAl2aWZpOwogICAgIHN0cnVjdAl2aWZjdGwgdmlmYzsKQEAg
LTQ2OCw3ICs1MDYsNyBAQAogCSAqIHNlbGVjdCBkYXRhIHNpemUgZGVwZW5kaW5nIG9uIEFQSSB2
ZXJzaW9uLgogCSAqLwogCWlmIChzb3B0LT5zb3B0X25hbWUgPT0gTVJUX0FERF9NRkMgJiYKLQkJ
bXJ0X2FwaV9jb25maWcgJiBNUlRfQVBJX0ZMQUdTX0FMTCkgeworCQlWX21ydF9hcGlfY29uZmln
ICYgTVJUX0FQSV9GTEFHU19BTEwpIHsKIAkgICAgZXJyb3IgPSBzb29wdGNvcHlpbihzb3B0LCAm
bWZjLCBzaXplb2Yoc3RydWN0IG1mY2N0bDIpLAogCQkJCXNpemVvZihzdHJ1Y3QgbWZjY3RsMikp
OwogCX0gZWxzZSB7CkBAIC01MjUsNiArNTYzLDcgQEAKIHN0YXRpYyBpbnQKIFhfaXBfbXJvdXRl
cl9nZXQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nrb3B0ICpzb3B0KQogeworICAgIElO
SVRfVk5FVF9NUk9VVEUoc28tPnNvX3ZuZXQpOwogICAgIGludCBlcnJvcjsKICAgICBzdGF0aWMg
aW50IHZlcnNpb24gPSAweDAzMDU7IC8qICEhISB3aHkgaXMgdGhpcyBoZXJlPyBYWFggKi8KIApA
QCAtNTM0LDcgKzU3Myw3IEBACiAJYnJlYWs7CiAKICAgICBjYXNlIE1SVF9BU1NFUlQ6Ci0JZXJy
b3IgPSBzb29wdGNvcHlvdXQoc29wdCwgJnBpbV9hc3NlcnQsIHNpemVvZiBwaW1fYXNzZXJ0KTsK
KwllcnJvciA9IHNvb3B0Y29weW91dChzb3B0LCAmVl9waW1fYXNzZXJ0LCBzaXplb2YgVl9waW1f
YXNzZXJ0KTsKIAlicmVhazsKIAogICAgIGNhc2UgTVJUX0FQSV9TVVBQT1JUOgpAQCAtNTQyLDcg
KzU4MSw3IEBACiAJYnJlYWs7CiAKICAgICBjYXNlIE1SVF9BUElfQ09ORklHOgotCWVycm9yID0g
c29vcHRjb3B5b3V0KHNvcHQsICZtcnRfYXBpX2NvbmZpZywgc2l6ZW9mIG1ydF9hcGlfY29uZmln
KTsKKwllcnJvciA9IHNvb3B0Y29weW91dChzb3B0LCAmVl9tcnRfYXBpX2NvbmZpZywgc2l6ZW9m
IFZfbXJ0X2FwaV9jb25maWcpOwogCWJyZWFrOwogCiAgICAgZGVmYXVsdDoKQEAgLTU5MCw2ICs2
MjksNyBAQAogc3RhdGljIGludAogZ2V0X3NnX2NudChzdHJ1Y3Qgc2lvY19zZ19yZXEgKnJlcSkK
IHsKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOwogICAgIHN0cnVjdCBtZmMgKnJ0Owog
CiAgICAgTUZDX0xPQ0soKTsKQEAgLTYxMiwxOCArNjUyLDE5IEBACiBzdGF0aWMgaW50CiBnZXRf
dmlmX2NudChzdHJ1Y3Qgc2lvY192aWZfcmVxICpyZXEpCiB7CisgICAgSU5JVF9WTkVUX01ST1VU
RShjdXJ2bmV0KTsKICAgICB2aWZpX3QgdmlmaSA9IHJlcS0+dmlmaTsKIAogICAgIFZJRl9MT0NL
KCk7Ci0gICAgaWYgKHZpZmkgPj0gbnVtdmlmcykgeworICAgIGlmICh2aWZpID49IFZfbnVtdmlm
cykgewogCVZJRl9VTkxPQ0soKTsKIAlyZXR1cm4gRUlOVkFMOwogICAgIH0KIAotICAgIHJlcS0+
aWNvdW50ID0gdmlmdGFibGVbdmlmaV0udl9wa3RfaW47Ci0gICAgcmVxLT5vY291bnQgPSB2aWZ0
YWJsZVt2aWZpXS52X3BrdF9vdXQ7Ci0gICAgcmVxLT5pYnl0ZXMgPSB2aWZ0YWJsZVt2aWZpXS52
X2J5dGVzX2luOwotICAgIHJlcS0+b2J5dGVzID0gdmlmdGFibGVbdmlmaV0udl9ieXRlc19vdXQ7
CisgICAgcmVxLT5pY291bnQgPSBWX3ZpZnRhYmxlW3ZpZmldLnZfcGt0X2luOworICAgIHJlcS0+
b2NvdW50ID0gVl92aWZ0YWJsZVt2aWZpXS52X3BrdF9vdXQ7CisgICAgcmVxLT5pYnl0ZXMgPSBW
X3ZpZnRhYmxlW3ZpZmldLnZfYnl0ZXNfaW47CisgICAgcmVxLT5vYnl0ZXMgPSBWX3ZpZnRhYmxl
W3ZpZmldLnZfYnl0ZXNfb3V0OwogICAgIFZJRl9VTkxPQ0soKTsKIAogICAgIHJldHVybiAwOwpA
QCAtNjMyLDI0ICs2NzMsMzAgQEAKIHN0YXRpYyB2b2lkCiBpcF9tcm91dGVyX3Jlc2V0KHZvaWQp
CiB7Ci0gICAgYnplcm8oKGNhZGRyX3QpbWZjdGFibGUsIHNpemVvZihtZmN0YWJsZSkpOwotICAg
IGJ6ZXJvKChjYWRkcl90KW5leHBpcmUsIHNpemVvZihuZXhwaXJlKSk7Ci0KLSAgICBwaW1fYXNz
ZXJ0ID0gMDsKLSAgICBtcnRfYXBpX2NvbmZpZyA9IDA7Ci0KLSAgICBjYWxsb3V0X2luaXQoJmV4
cGlyZV91cGNhbGxzX2NoLCBDQUxMT1VUX01QU0FGRSk7Ci0KLSAgICBid191cGNhbGxzX24gPSAw
OwotICAgIGJ6ZXJvKChjYWRkcl90KWJ3X21ldGVyX3RpbWVycywgc2l6ZW9mKGJ3X21ldGVyX3Rp
bWVycykpOwotICAgIGNhbGxvdXRfaW5pdCgmYndfdXBjYWxsc19jaCwgQ0FMTE9VVF9NUFNBRkUp
OwotICAgIGNhbGxvdXRfaW5pdCgmYndfbWV0ZXJfY2gsIENBTExPVVRfTVBTQUZFKTsKKyAgICBJ
TklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOworICAgIGJ6ZXJvKChjYWRkcl90KVZfbWZjdGFibGUs
IHNpemVvZihWX21mY3RhYmxlKSk7CisgICAgYnplcm8oKGNhZGRyX3QpVl9uZXhwaXJlLCBzaXpl
b2YoVl9uZXhwaXJlKSk7CisgICAgaWYgKFZfcmVnX3ZpZl9udW0gIT0gVklGSV9JTlZBTElEKQor
CUlGX0FERFJfTE9DS19ERVNUUk9ZKCZWX211bHRpY2FzdF9yZWdpc3Rlcl9pZik7CisgICAgYnpl
cm8oJlZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmLCBzaXplb2YoVl9tdWx0aWNhc3RfcmVnaXN0ZXJf
aWYpKTsKKworICAgIFZfcmVnX3ZpZl9udW0gPSBWSUZJX0lOVkFMSUQ7CisgICAgVl9waW1fYXNz
ZXJ0ID0gMDsKKyAgICBWX21ydF9hcGlfY29uZmlnID0gMDsKKyAgICAKKyAgICBjYWxsb3V0X2lu
aXQoJlZfZXhwaXJlX3VwY2FsbHNfY2gsIENBTExPVVRfTVBTQUZFKTsKKworICAgIFZfYndfdXBj
YWxsc19uID0gMDsKKyAgICBiemVybygoY2FkZHJfdClWX2J3X21ldGVyX3RpbWVycywgc2l6ZW9m
KFZfYndfbWV0ZXJfdGltZXJzKSk7CisgICAgY2FsbG91dF9pbml0KCZWX2J3X3VwY2FsbHNfY2gs
IENBTExPVVRfTVBTQUZFKTsKKyAgICBjYWxsb3V0X2luaXQoJlZfYndfbWV0ZXJfY2gsIENBTExP
VVRfTVBTQUZFKTsKIH0KIAogc3RhdGljIHZvaWQKIGlmX2RldGFjaGVkX2V2ZW50KHZvaWQgKmFy
ZyBfX3VudXNlZCwgc3RydWN0IGlmbmV0ICppZnApCiB7CiAgICAgSU5JVF9WTkVUX0lORVQoY3Vy
dm5ldCk7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsKICAgICB2aWZpX3QgdmlmaTsK
ICAgICBpbnQgaTsKICAgICBzdHJ1Y3QgbWZjICptZmM7CkBAIC02NzYsMTIgKzcyMywxMiBAQAog
ICAgICAqLwogICAgIFZJRl9MT0NLKCk7CiAgICAgTUZDX0xPQ0soKTsKLSAgICBmb3IgKHZpZmkg
PSAwOyB2aWZpIDwgbnVtdmlmczsgdmlmaSsrKSB7Ci0JaWYgKHZpZnRhYmxlW3ZpZmldLnZfaWZw
ICE9IGlmcCkKKyAgICBmb3IgKHZpZmkgPSAwOyB2aWZpIDwgVl9udW12aWZzOyB2aWZpKyspIHsK
KwlpZiAoVl92aWZ0YWJsZVt2aWZpXS52X2lmcCAhPSBpZnApCiAJCWNvbnRpbnVlOwogCWZvciAo
aSA9IDA7IGkgPCBNRkNUQkxTSVo7IGkrKykgewotCSAgICBwcG1mYyA9ICZtZmN0YWJsZVtpXTsK
LQkgICAgZm9yIChtZmMgPSBtZmN0YWJsZVtpXTsgbWZjICE9IE5VTEw7ICkgeworCSAgICBwcG1m
YyA9ICZWX21mY3RhYmxlW2ldOworCSAgICBmb3IgKG1mYyA9IFZfbWZjdGFibGVbaV07IG1mYyAh
PSBOVUxMOyApIHsKIAkJbm1mYyA9IG1mYy0+bWZjX25leHQ7CiAJCWlmIChtZmMtPm1mY19wYXJl
bnQgPT0gdmlmaSkgewogCQkgICAgZm9yIChwcSA9IG1mYy0+bWZjX3N0YWxsOyBwcSAhPSBOVUxM
OyApIHsKQEAgLTcxMyw5ICs3NjAsMTAgQEAKIHN0YXRpYyBpbnQKIGlwX21yb3V0ZXJfaW5pdChz
dHJ1Y3Qgc29ja2V0ICpzbywgaW50IHZlcnNpb24pCiB7Ci0gICAgSU5JVF9WTkVUX0lORVQoY3Vy
dm5ldCk7CisgICAgSU5JVF9WTkVUX0lORVQoc28tPnNvX3ZuZXQpOworICAgIElOSVRfVk5FVF9N
Uk9VVEUoc28tPnNvX3ZuZXQpOwogCi0gICAgaWYgKG1ydGRlYnVnKQorICAgIGlmIChWX21ydGRl
YnVnKQogCWxvZyhMT0dfREVCVUcsICJpcF9tcm91dGVyX2luaXQ6IHNvX3R5cGUgPSAlZCwgcHJf
cHJvdG9jb2wgPSAlZFxuIiwKIAkgICAgc28tPnNvX3R5cGUsIHNvLT5zb19wcm90by0+cHJfcHJv
dG9jb2wpOwogCkBAIC03MzIsMjQgKzc4MCwyNSBAQAogCXJldHVybiBFQUREUklOVVNFOwogICAg
IH0KIAotICAgIGlmX2RldGFjaF9ldmVudF90YWcgPSBFVkVOVEhBTkRMRVJfUkVHSVNURVIoaWZu
ZXRfZGVwYXJ0dXJlX2V2ZW50LCAKKyAgICBWX2lmX2RldGFjaF9ldmVudF90YWcgPSBFVkVOVEhB
TkRMRVJfUkVHSVNURVIoaWZuZXRfZGVwYXJ0dXJlX2V2ZW50LCAKICAgICAgICAgaWZfZGV0YWNo
ZWRfZXZlbnQsIE5VTEwsIEVWRU5USEFORExFUl9QUklfQU5ZKTsKLSAgICBpZiAoaWZfZGV0YWNo
X2V2ZW50X3RhZyA9PSBOVUxMKSB7CisgICAgaWYgKFZfaWZfZGV0YWNoX2V2ZW50X3RhZyA9PSBO
VUxMKSB7CiAJTVJPVVRFUl9VTkxPQ0soKTsKIAlyZXR1cm4gKEVOT01FTSk7CiAgICAgfQogCi0g
ICAgY2FsbG91dF9yZXNldCgmZXhwaXJlX3VwY2FsbHNfY2gsIEVYUElSRV9USU1FT1VULCBleHBp
cmVfdXBjYWxscywgTlVMTCk7Ci0KLSAgICBjYWxsb3V0X3Jlc2V0KCZid191cGNhbGxzX2NoLCBC
V19VUENBTExTX1BFUklPRCwKLQlleHBpcmVfYndfdXBjYWxsc19zZW5kLCBOVUxMKTsKLSAgICBj
YWxsb3V0X3Jlc2V0KCZid19tZXRlcl9jaCwgQldfTUVURVJfUEVSSU9ELCBleHBpcmVfYndfbWV0
ZXJfcHJvY2VzcywgTlVMTCk7CisgICAgY2FsbG91dF9yZXNldCgmVl9leHBpcmVfdXBjYWxsc19j
aCwgRVhQSVJFX1RJTUVPVVQsCisJCWV4cGlyZV91cGNhbGxzLCAodm9pZCAqKXNvLT5zb192bmV0
KTsKKyAgICBjYWxsb3V0X3Jlc2V0KCZWX2J3X3VwY2FsbHNfY2gsIEJXX1VQQ0FMTFNfUEVSSU9E
LAorCQlleHBpcmVfYndfdXBjYWxsc19zZW5kLCAodm9pZCAqKXNvLT5zb192bmV0KTsKKyAgICBj
YWxsb3V0X3Jlc2V0KCZWX2J3X21ldGVyX2NoLCBCV19NRVRFUl9QRVJJT0QsCisJCWV4cGlyZV9i
d19tZXRlcl9wcm9jZXNzLCAodm9pZCAqKXNvLT5zb192bmV0KTsKIAogICAgIFZfaXBfbXJvdXRl
ciA9IHNvOwogCiAgICAgTVJPVVRFUl9VTkxPQ0soKTsKIAotICAgIGlmIChtcnRkZWJ1ZykKKyAg
ICBpZiAoVl9tcnRkZWJ1ZykKIAlsb2coTE9HX0RFQlVHLCAiaXBfbXJvdXRlcl9pbml0XG4iKTsK
IAogICAgIHJldHVybiAwOwpAQCAtNzYyLDYgKzgxMSw3IEBACiBYX2lwX21yb3V0ZXJfZG9uZSh2
b2lkKQogewogICAgIElOSVRfVk5FVF9JTkVUKGN1cnZuZXQpOworICAgIElOSVRfVk5FVF9NUk9V
VEUoY3Vydm5ldCk7CiAgICAgdmlmaV90IHZpZmk7CiAgICAgaW50IGk7CiAgICAgc3RydWN0IGlm
bmV0ICppZnA7CkBAIC03ODAsNDEgKzgzMCw0MSBAQAogICAgICAqIERldGFjaC9kaXNhYmxlIGhv
b2tzIHRvIHRoZSByZXNldCBvZiB0aGUgc3lzdGVtLgogICAgICAqLwogICAgIFZfaXBfbXJvdXRl
ciA9IE5VTEw7Ci0gICAgbXJ0X2FwaV9jb25maWcgPSAwOworICAgIFZfbXJ0X2FwaV9jb25maWcg
PSAwOwogCiAgICAgVklGX0xPQ0soKTsKICAgICAvKgogICAgICAqIEZvciBlYWNoIHBoeWludCBp
biB1c2UsIGRpc2FibGUgcHJvbWlzY3VvdXMgcmVjZXB0aW9uIG9mIGFsbCBJUAogICAgICAqIG11
bHRpY2FzdHMuCiAgICAgICovCi0gICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IG51bXZpZnM7IHZp
ZmkrKykgewotCWlmICh2aWZ0YWJsZVt2aWZpXS52X2xjbF9hZGRyLnNfYWRkciAhPSAwICYmCi0J
CSEodmlmdGFibGVbdmlmaV0udl9mbGFncyAmIChWSUZGX1RVTk5FTCB8IFZJRkZfUkVHSVNURVIp
KSkgeworICAgIGZvciAodmlmaSA9IDA7IHZpZmkgPCBWX251bXZpZnM7IHZpZmkrKykgeworCWlm
IChWX3ZpZnRhYmxlW3ZpZmldLnZfbGNsX2FkZHIuc19hZGRyICE9IDAgJiYKKwkJIShWX3ZpZnRh
YmxlW3ZpZmldLnZfZmxhZ3MgJiAoVklGRl9UVU5ORUwgfCBWSUZGX1JFR0lTVEVSKSkpIHsKIAkg
ICAgc3RydWN0IHNvY2thZGRyX2luICpzbyA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmKGlmci5p
ZnJfYWRkcik7CiAKIAkgICAgc28tPnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKIAkgICAgc28tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCSAgICBzby0+c2luX2FkZHIuc19h
ZGRyID0gSU5BRERSX0FOWTsKLQkgICAgaWZwID0gdmlmdGFibGVbdmlmaV0udl9pZnA7CisJICAg
IGlmcCA9IFZfdmlmdGFibGVbdmlmaV0udl9pZnA7CiAJICAgIGlmX2FsbG11bHRpKGlmcCwgMCk7
CiAJfQogICAgIH0KLSAgICBiemVybygoY2FkZHJfdCl2aWZ0YWJsZSwgc2l6ZW9mKHZpZnRhYmxl
KSk7Ci0gICAgbnVtdmlmcyA9IDA7Ci0gICAgcGltX2Fzc2VydCA9IDA7CisgICAgYnplcm8oKGNh
ZGRyX3QpVl92aWZ0YWJsZSwgc2l6ZW9mKFZfdmlmdGFibGUpKTsKKyAgICBWX251bXZpZnMgPSAw
OworICAgIFZfcGltX2Fzc2VydCA9IDA7CiAgICAgVklGX1VOTE9DSygpOwotICAgIEVWRU5USEFO
RExFUl9ERVJFR0lTVEVSKGlmbmV0X2RlcGFydHVyZV9ldmVudCwgaWZfZGV0YWNoX2V2ZW50X3Rh
Zyk7CisgICAgRVZFTlRIQU5ETEVSX0RFUkVHSVNURVIoaWZuZXRfZGVwYXJ0dXJlX2V2ZW50LCBW
X2lmX2RldGFjaF9ldmVudF90YWcpOwogCiAgICAgLyoKICAgICAgKiBGcmVlIGFsbCBtdWx0aWNh
c3QgZm9yd2FyZGluZyBjYWNoZSBlbnRyaWVzLgogICAgICAqLwotICAgIGNhbGxvdXRfc3RvcCgm
ZXhwaXJlX3VwY2FsbHNfY2gpOwotICAgIGNhbGxvdXRfc3RvcCgmYndfdXBjYWxsc19jaCk7Ci0g
ICAgY2FsbG91dF9zdG9wKCZid19tZXRlcl9jaCk7CisgICAgY2FsbG91dF9zdG9wKCZWX2V4cGly
ZV91cGNhbGxzX2NoKTsKKyAgICBjYWxsb3V0X3N0b3AoJlZfYndfdXBjYWxsc19jaCk7CisgICAg
Y2FsbG91dF9zdG9wKCZWX2J3X21ldGVyX2NoKTsKIAogICAgIE1GQ19MT0NLKCk7CiAgICAgZm9y
IChpID0gMDsgaSA8IE1GQ1RCTFNJWjsgaSsrKSB7Ci0JZm9yIChydCA9IG1mY3RhYmxlW2ldOyBy
dCAhPSBOVUxMOyApIHsKKwlmb3IgKHJ0ID0gVl9tZmN0YWJsZVtpXTsgcnQgIT0gTlVMTDsgKSB7
CiAJICAgIHN0cnVjdCBtZmMgKm5yID0gcnQtPm1mY19uZXh0OwogCiAJICAgIGZvciAocnRlID0g
cnQtPm1mY19zdGFsbDsgcnRlICE9IE5VTEw7ICkgewpAQCAtODI5LDE3ICs4NzksMTkgQEAKIAkg
ICAgcnQgPSBucjsKIAl9CiAgICAgfQotICAgIGJ6ZXJvKChjYWRkcl90KW1mY3RhYmxlLCBzaXpl
b2YobWZjdGFibGUpKTsKLSAgICBiemVybygoY2FkZHJfdCluZXhwaXJlLCBzaXplb2YobmV4cGly
ZSkpOwotICAgIGJ3X3VwY2FsbHNfbiA9IDA7Ci0gICAgYnplcm8oYndfbWV0ZXJfdGltZXJzLCBz
aXplb2YoYndfbWV0ZXJfdGltZXJzKSk7CisgICAgYnplcm8oKGNhZGRyX3QpVl9tZmN0YWJsZSwg
c2l6ZW9mKFZfbWZjdGFibGUpKTsKKyAgICBiemVybygoY2FkZHJfdClWX25leHBpcmUsIHNpemVv
ZihWX25leHBpcmUpKTsKKyAgICBWX2J3X3VwY2FsbHNfbiA9IDA7CisgICAgYnplcm8oVl9id19t
ZXRlcl90aW1lcnMsIHNpemVvZihWX2J3X21ldGVyX3RpbWVycykpOwogICAgIE1GQ19VTkxPQ0so
KTsKIAotICAgIHJlZ192aWZfbnVtID0gVklGSV9JTlZBTElEOworICAgIGlmIChWX3JlZ192aWZf
bnVtICE9IFZJRklfSU5WQUxJRCkKKwlJRl9BRERSX0xPQ0tfREVTVFJPWSgmVl9tdWx0aWNhc3Rf
cmVnaXN0ZXJfaWYpOworICAgIFZfcmVnX3ZpZl9udW0gPSBWSUZJX0lOVkFMSUQ7CiAKICAgICBN
Uk9VVEVSX1VOTE9DSygpOwogCi0gICAgaWYgKG1ydGRlYnVnKQorICAgIGlmIChWX21ydGRlYnVn
KQogCWxvZyhMT0dfREVCVUcsICJpcF9tcm91dGVyX2RvbmVcbiIpOwogCiAgICAgcmV0dXJuIDA7
CkBAIC04NTEsMTAgKzkwMywxMSBAQAogc3RhdGljIGludAogc2V0X2Fzc2VydChpbnQgaSkKIHsK
KyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOwogICAgIGlmICgoaSAhPSAxKSAmJiAoaSAh
PSAwKSkKIAlyZXR1cm4gRUlOVkFMOwogCi0gICAgcGltX2Fzc2VydCA9IGk7CisgICAgVl9waW1f
YXNzZXJ0ID0gaTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtODY1LDYgKzkxOCw3IEBACiBpbnQK
IHNldF9hcGlfY29uZmlnKHVpbnQzMl90ICphcGl2YWwpCiB7CisgICAgSU5JVF9WTkVUX01ST1VU
RShjdXJ2bmV0KTsKICAgICBpbnQgaTsKIAogICAgIC8qCkBAIC04NzQsMjMgKzkyOCwyMyBAQAog
ICAgICAqICAtIHBpbV9hc3NlcnQgaXMgbm90IGVuYWJsZWQKICAgICAgKiAgLSB0aGUgTUZDIHRh
YmxlIGlzIGVtcHR5CiAgICAgICovCi0gICAgaWYgKG51bXZpZnMgPiAwKSB7CisgICAgaWYgKFZf
bnVtdmlmcyA+IDApIHsKIAkqYXBpdmFsID0gMDsKIAlyZXR1cm4gRVBFUk07CiAgICAgfQotICAg
IGlmIChwaW1fYXNzZXJ0KSB7CisgICAgaWYgKFZfcGltX2Fzc2VydCkgewogCSphcGl2YWwgPSAw
OwogCXJldHVybiBFUEVSTTsKICAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IE1GQ1RCTFNJWjsg
aSsrKSB7Ci0JaWYgKG1mY3RhYmxlW2ldICE9IE5VTEwpIHsKKwlpZiAoVl9tZmN0YWJsZVtpXSAh
PSBOVUxMKSB7CiAJICAgICphcGl2YWwgPSAwOwogCSAgICByZXR1cm4gRVBFUk07CiAJfQogICAg
IH0KIAotICAgIG1ydF9hcGlfY29uZmlnID0gKmFwaXZhbCAmIG1ydF9hcGlfc3VwcG9ydDsKLSAg
ICAqYXBpdmFsID0gbXJ0X2FwaV9jb25maWc7CisgICAgVl9tcnRfYXBpX2NvbmZpZyA9ICphcGl2
YWwgJiBtcnRfYXBpX3N1cHBvcnQ7CisgICAgKmFwaXZhbCA9IFZfbXJ0X2FwaV9jb25maWc7CiAK
ICAgICByZXR1cm4gMDsKIH0KQEAgLTkwMSw3ICs5NTUsOCBAQAogc3RhdGljIGludAogYWRkX3Zp
ZihzdHJ1Y3QgdmlmY3RsICp2aWZjcCkKIHsKLSAgICBzdHJ1Y3QgdmlmICp2aWZwID0gdmlmdGFi
bGUgKyB2aWZjcC0+dmlmY192aWZpOworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7Cisg
ICAgc3RydWN0IHZpZiAqdmlmcCA9IFZfdmlmdGFibGUgKyB2aWZjcC0+dmlmY192aWZpOwogICAg
IHN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7c2l6ZW9mIHNpbiwgQUZfSU5FVH07CiAgICAgc3Ry
dWN0IGlmYWRkciAqaWZhOwogICAgIHN0cnVjdCBpZm5ldCAqaWZwOwpAQCAtOTUwLDE0ICsxMDA1
LDE5IEBACiAJVklGX1VOTE9DSygpOwogCXJldHVybiBFT1BOT1RTVVBQOwogICAgIH0gZWxzZSBp
ZiAodmlmY3AtPnZpZmNfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKSB7Ci0JaWZwID0gJm11bHRpY2Fz
dF9yZWdpc3Rlcl9pZjsKLQlpZiAobXJ0ZGVidWcpCisJaWZwID0gJlZfbXVsdGljYXN0X3JlZ2lz
dGVyX2lmOworCWlmIChWX21ydGRlYnVnKQogCSAgICBsb2coTE9HX0RFQlVHLCAiQWRkaW5nIGEg
cmVnaXN0ZXIgdmlmLCBpZnA6ICVwXG4iLAotCQkgICAgKHZvaWQgKikmbXVsdGljYXN0X3JlZ2lz
dGVyX2lmKTsKLQlpZiAocmVnX3ZpZl9udW0gPT0gVklGSV9JTlZBTElEKSB7Ci0JICAgIGlmX2lu
aXRuYW1lKCZtdWx0aWNhc3RfcmVnaXN0ZXJfaWYsICJyZWdpc3Rlcl92aWYiLCAwKTsKLQkgICAg
bXVsdGljYXN0X3JlZ2lzdGVyX2lmLmlmX2ZsYWdzID0gSUZGX0xPT1BCQUNLOwotCSAgICByZWdf
dmlmX251bSA9IHZpZmNwLT52aWZjX3ZpZmk7CisJCSAgICAodm9pZCAqKSZWX211bHRpY2FzdF9y
ZWdpc3Rlcl9pZik7CisJaWYgKFZfcmVnX3ZpZl9udW0gPT0gVklGSV9JTlZBTElEKSB7CisJICAg
IGlmX2luaXRuYW1lKCZWX211bHRpY2FzdF9yZWdpc3Rlcl9pZiwgInJlZ2lzdGVyX3ZpZiIsIDAp
OworCSAgICBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZi5pZl9mbGFncyA9IElGRl9MT09QQkFDSzsK
KwkgICAgVl9yZWdfdmlmX251bSA9IHZpZmNwLT52aWZjX3ZpZmk7CisJICAgIElGX0FERFJfTE9D
S19JTklUKCZWX211bHRpY2FzdF9yZWdpc3Rlcl9pZik7CisjaWZkZWYgVklNQUdFCisJICAgIFZf
bXVsdGljYXN0X3JlZ2lzdGVyX2lmLmlmX3ZuZXQgPSBjdXJ2bmV0OworCSAgICBWX211bHRpY2Fz
dF9yZWdpc3Rlcl9pZi5pZl9ob21lX3ZuZXQgPSBjdXJ2bmV0OworI2VuZGlmIC8qIFZJTUFHRSAq
LwogCX0KICAgICB9IGVsc2UgewkJLyogTWFrZSBzdXJlIHRoZSBpbnRlcmZhY2Ugc3VwcG9ydHMg
bXVsdGljYXN0ICovCiAJaWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX01VTFRJQ0FTVCkgPT0gMCkg
ewpAQCAtOTg4LDExICsxMDQ4LDExIEBACiAgICAgYnplcm8oJnZpZnAtPnZfcm91dGUsIHNpemVv
Zih2aWZwLT52X3JvdXRlKSk7CiAKICAgICAvKiBBZGp1c3QgbnVtdmlmcyB1cCBpZiB0aGUgdmlm
aSBpcyBoaWdoZXIgdGhhbiBudW12aWZzICovCi0gICAgaWYgKG51bXZpZnMgPD0gdmlmY3AtPnZp
ZmNfdmlmaSkgbnVtdmlmcyA9IHZpZmNwLT52aWZjX3ZpZmkgKyAxOworICAgIGlmIChWX251bXZp
ZnMgPD0gdmlmY3AtPnZpZmNfdmlmaSkgVl9udW12aWZzID0gdmlmY3AtPnZpZmNfdmlmaSArIDE7
CiAKICAgICBWSUZfVU5MT0NLKCk7CiAKLSAgICBpZiAobXJ0ZGVidWcpCisgICAgaWYgKFZfbXJ0
ZGVidWcpCiAJbG9nKExPR19ERUJVRywgImFkZF92aWYgIyVkLCBsY2xhZGRyICVseCwgJXMgJWx4
LCB0aHJlc2ggJXhcbiIsCiAJICAgIHZpZmNwLT52aWZjX3ZpZmksCiAJICAgICh1X2xvbmcpbnRv
aGwodmlmY3AtPnZpZmNfbGNsX2FkZHIuc19hZGRyKSwKQEAgLTEwMDksMTQgKzEwNjksMTUgQEAK
IHN0YXRpYyBpbnQKIGRlbF92aWZfbG9ja2VkKHZpZmlfdCB2aWZpKQogeworICAgIElOSVRfVk5F
VF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3RydWN0IHZpZiAqdmlmcDsKIAogICAgIFZJRl9MT0NL
X0FTU0VSVCgpOwogCi0gICAgaWYgKHZpZmkgPj0gbnVtdmlmcykgeworICAgIGlmICh2aWZpID49
IFZfbnVtdmlmcykgewogCXJldHVybiBFSU5WQUw7CiAgICAgfQotICAgIHZpZnAgPSAmdmlmdGFi
bGVbdmlmaV07CisgICAgdmlmcCA9ICZWX3ZpZnRhYmxlW3ZpZmldOwogICAgIGlmICh2aWZwLT52
X2xjbF9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CiAJcmV0dXJuIEVBRERSTk9UQVZBSUw7
CiAgICAgfQpAQCAtMTAyNCwxOSArMTA4NSwyMiBAQAogICAgIGlmICghKHZpZnAtPnZfZmxhZ3Mg
JiAoVklGRl9UVU5ORUwgfCBWSUZGX1JFR0lTVEVSKSkpCiAJaWZfYWxsbXVsdGkodmlmcC0+dl9p
ZnAsIDApOwogCi0gICAgaWYgKHZpZnAtPnZfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKQotCXJlZ192
aWZfbnVtID0gVklGSV9JTlZBTElEOworICAgIGlmICh2aWZwLT52X2ZsYWdzICYgVklGRl9SRUdJ
U1RFUikgeworCWlmIChWX3JlZ192aWZfbnVtICE9IFZJRklfSU5WQUxJRCkKKwkgICAgSUZfQURE
Ul9MT0NLX0RFU1RST1koJlZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmKTsKKwlWX3JlZ192aWZfbnVt
ID0gVklGSV9JTlZBTElEOworICAgIH0KIAogICAgIGJ6ZXJvKChjYWRkcl90KXZpZnAsIHNpemVv
ZiAoKnZpZnApKTsKIAotICAgIGlmIChtcnRkZWJ1ZykKLQlsb2coTE9HX0RFQlVHLCAiZGVsX3Zp
ZiAlZCwgbnVtdmlmcyAlZFxuIiwgdmlmaSwgbnVtdmlmcyk7CisgICAgaWYgKFZfbXJ0ZGVidWcp
CisJbG9nKExPR19ERUJVRywgImRlbF92aWYgJWQsIG51bXZpZnMgJWRcbiIsIHZpZmksIFZfbnVt
dmlmcyk7CiAKICAgICAvKiBBZGp1c3QgbnVtdmlmcyBkb3duICovCi0gICAgZm9yICh2aWZpID0g
bnVtdmlmczsgdmlmaSA+IDA7IHZpZmktLSkKLQlpZiAodmlmdGFibGVbdmlmaS0xXS52X2xjbF9h
ZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKQorICAgIGZvciAodmlmaSA9IFZfbnVtdmlmczsgdmlm
aSA+IDA7IHZpZmktLSkKKwlpZiAoVl92aWZ0YWJsZVt2aWZpLTFdLnZfbGNsX2FkZHIuc19hZGRy
ICE9IElOQUREUl9BTlkpCiAJICAgIGJyZWFrOwotICAgIG51bXZpZnMgPSB2aWZpOworICAgIFZf
bnVtdmlmcyA9IHZpZmk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTEwNDQsNiArMTEwOCw3IEBA
CiBzdGF0aWMgaW50CiBkZWxfdmlmKHZpZmlfdCB2aWZpKQogeworICAgIElOSVRfVk5FVF9NUk9V
VEUoY3Vydm5ldCk7CiAgICAgaW50IGNjOwogCiAgICAgVklGX0xPQ0soKTsKQEAgLTEwNTksMTYg
KzExMjQsMTcgQEAKIHN0YXRpYyB2b2lkCiB1cGRhdGVfbWZjX3BhcmFtcyhzdHJ1Y3QgbWZjICpy
dCwgc3RydWN0IG1mY2N0bDIgKm1mY2NwKQogeworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5l
dCk7CiAgICAgaW50IGk7CiAKICAgICBydC0+bWZjX3BhcmVudCA9IG1mY2NwLT5tZmNjX3BhcmVu
dDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtdmlmczsgaSsrKSB7CisgICAgZm9yIChpID0gMDsg
aSA8IFZfbnVtdmlmczsgaSsrKSB7CiAJcnQtPm1mY190dGxzW2ldID0gbWZjY3AtPm1mY2NfdHRs
c1tpXTsKLQlydC0+bWZjX2ZsYWdzW2ldID0gbWZjY3AtPm1mY2NfZmxhZ3NbaV0gJiBtcnRfYXBp
X2NvbmZpZyAmCisJcnQtPm1mY19mbGFnc1tpXSA9IG1mY2NwLT5tZmNjX2ZsYWdzW2ldICYgVl9t
cnRfYXBpX2NvbmZpZyAmCiAJICAgIE1SVF9NRkNfRkxBR1NfQUxMOwogICAgIH0KICAgICAvKiBz
ZXQgdGhlIFJQIGFkZHJlc3MgKi8KLSAgICBpZiAobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX1JQ
KQorICAgIGlmIChWX21ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkKIAlydC0+bWZjX3JwID0g
bWZjY3AtPm1mY2NfcnA7CiAgICAgZWxzZQogCXJ0LT5tZmNfcnAuc19hZGRyID0gSU5BRERSX0FO
WTsKQEAgLTEwOTksNiArMTE2NSw3IEBACiBzdGF0aWMgaW50CiBhZGRfbWZjKHN0cnVjdCBtZmNj
dGwyICptZmNjcCkKIHsKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOwogICAgIHN0cnVj
dCBtZmMgKnJ0OwogICAgIHVfbG9uZyBoYXNoOwogICAgIHN0cnVjdCBydGRldHEgKnJ0ZTsKQEAg
LTExMTEsNyArMTE3OCw3IEBACiAKICAgICAvKiBJZiBhbiBlbnRyeSBhbHJlYWR5IGV4aXN0cywg
anVzdCB1cGRhdGUgdGhlIGZpZWxkcyAqLwogICAgIGlmIChydCkgewotCWlmIChtcnRkZWJ1ZyAm
IERFQlVHX01GQykKKwlpZiAoVl9tcnRkZWJ1ZyAmIERFQlVHX01GQykKIAkgICAgbG9nKExPR19E
RUJVRywiYWRkX21mYyB1cGRhdGUgbyAlbHggZyAlbHggcCAleFxuIiwKIAkJKHVfbG9uZyludG9o
bChtZmNjcC0+bWZjY19vcmlnaW4uc19hZGRyKSwKIAkJKHVfbG9uZyludG9obChtZmNjcC0+bWZj
Y19tY2FzdGdycC5zX2FkZHIpLApAQCAtMTEyNyw3ICsxMTk0LDcgQEAKICAgICAgKiBGaW5kIHRo
ZSBlbnRyeSBmb3Igd2hpY2ggdGhlIHVwY2FsbCB3YXMgbWFkZSBhbmQgdXBkYXRlCiAgICAgICov
CiAgICAgaGFzaCA9IE1GQ0hBU0gobWZjY3AtPm1mY2Nfb3JpZ2luLnNfYWRkciwgbWZjY3AtPm1m
Y2NfbWNhc3RncnAuc19hZGRyKTsKLSAgICBmb3IgKHJ0ID0gbWZjdGFibGVbaGFzaF0sIG5zdGwg
PSAwOyBydDsgcnQgPSBydC0+bWZjX25leHQpIHsKKyAgICBmb3IgKHJ0ID0gVl9tZmN0YWJsZVto
YXNoXSwgbnN0bCA9IDA7IHJ0OyBydCA9IHJ0LT5tZmNfbmV4dCkgewogCiAJaWYgKChydC0+bWZj
X29yaWdpbi5zX2FkZHIgPT0gbWZjY3AtPm1mY2Nfb3JpZ2luLnNfYWRkcikgJiYKIAkJKHJ0LT5t
ZmNfbWNhc3RncnAuc19hZGRyID09IG1mY2NwLT5tZmNjX21jYXN0Z3JwLnNfYWRkcikgJiYKQEAg
LTExNDAsNyArMTIwNyw3IEBACiAJCSAgICAodV9sb25nKW50b2hsKG1mY2NwLT5tZmNjX21jYXN0
Z3JwLnNfYWRkciksCiAJCSAgICBtZmNjcC0+bWZjY19wYXJlbnQsICh2b2lkICopcnQtPm1mY19z
dGFsbCk7CiAKLQkgICAgaWYgKG1ydGRlYnVnICYgREVCVUdfTUZDKQorCSAgICBpZiAoVl9tcnRk
ZWJ1ZyAmIERFQlVHX01GQykKIAkJbG9nKExPR19ERUJVRywiYWRkX21mYyBvICVseCBnICVseCBw
ICV4IGRiZyAlcFxuIiwKIAkJICAgICh1X2xvbmcpbnRvaGwobWZjY3AtPm1mY2Nfb3JpZ2luLnNf
YWRkciksCiAJCSAgICAodV9sb25nKW50b2hsKG1mY2NwLT5tZmNjX21jYXN0Z3JwLnNfYWRkciks
CkBAIC0xMTQ5LDcgKzEyMTYsNyBAQAogCSAgICBpbml0X21mY19wYXJhbXMocnQsIG1mY2NwKTsK
IAogCSAgICBydC0+bWZjX2V4cGlyZSA9IDA7CS8qIERvbid0IGNsZWFuIHRoaXMgZ3V5IHVwICov
Ci0JICAgIG5leHBpcmVbaGFzaF0tLTsKKwkgICAgVl9uZXhwaXJlW2hhc2hdLS07CiAKIAkgICAg
LyogZnJlZSBwYWNrZXRzIFFlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZW50cnkgKi8KIAkgICAgZm9y
IChydGUgPSBydC0+bWZjX3N0YWxsOyBydGUgIT0gTlVMTDsgKSB7CkBAIC0xMTY4LDE4ICsxMjM1
LDE4IEBACiAgICAgICogSXQgaXMgcG9zc2libGUgdGhhdCBhbiBlbnRyeSBpcyBiZWluZyBpbnNl
cnRlZCB3aXRob3V0IGFuIHVwY2FsbAogICAgICAqLwogICAgIGlmIChuc3RsID09IDApIHsKLQlp
ZiAobXJ0ZGVidWcgJiBERUJVR19NRkMpCisJaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19NRkMpCiAJ
ICAgIGxvZyhMT0dfREVCVUcsImFkZF9tZmMgbm8gdXBjYWxsIGggJWx1IG8gJWx4IGcgJWx4IHAg
JXhcbiIsCiAJCWhhc2gsICh1X2xvbmcpbnRvaGwobWZjY3AtPm1mY2Nfb3JpZ2luLnNfYWRkciks
CiAJCSh1X2xvbmcpbnRvaGwobWZjY3AtPm1mY2NfbWNhc3RncnAuc19hZGRyKSwKIAkJbWZjY3At
Pm1mY2NfcGFyZW50KTsKIAotCWZvciAocnQgPSBtZmN0YWJsZVtoYXNoXTsgcnQgIT0gTlVMTDsg
cnQgPSBydC0+bWZjX25leHQpIHsKKwlmb3IgKHJ0ID0gVl9tZmN0YWJsZVtoYXNoXTsgcnQgIT0g
TlVMTDsgcnQgPSBydC0+bWZjX25leHQpIHsKIAkgICAgaWYgKChydC0+bWZjX29yaWdpbi5zX2Fk
ZHIgPT0gbWZjY3AtPm1mY2Nfb3JpZ2luLnNfYWRkcikgJiYKIAkJICAgIChydC0+bWZjX21jYXN0
Z3JwLnNfYWRkciA9PSBtZmNjcC0+bWZjY19tY2FzdGdycC5zX2FkZHIpKSB7CiAJCWluaXRfbWZj
X3BhcmFtcyhydCwgbWZjY3ApOwogCQlpZiAocnQtPm1mY19leHBpcmUpCi0JCSAgICBuZXhwaXJl
W2hhc2hdLS07CisJCSAgICBWX25leHBpcmVbaGFzaF0tLTsKIAkJcnQtPm1mY19leHBpcmUgPSAw
OwogCQlicmVhazsgLyogWFhYICovCiAJICAgIH0KQEAgLTExOTgsOCArMTI2NSw4IEBACiAKIAkg
ICAgcnQtPm1mY19id19tZXRlciA9IE5VTEw7CiAJICAgIC8qIGluc2VydCBuZXcgZW50cnkgYXQg
aGVhZCBvZiBoYXNoIGNoYWluICovCi0JICAgIHJ0LT5tZmNfbmV4dCA9IG1mY3RhYmxlW2hhc2hd
OwotCSAgICBtZmN0YWJsZVtoYXNoXSA9IHJ0OworCSAgICBydC0+bWZjX25leHQgPSBWX21mY3Rh
YmxlW2hhc2hdOworCSAgICBWX21mY3RhYmxlW2hhc2hdID0gcnQ7CiAJfQogICAgIH0KICAgICBN
RkNfVU5MT0NLKCk7CkBAIC0xMjEzLDYgKzEyODAsNyBAQAogc3RhdGljIGludAogZGVsX21mYyhz
dHJ1Y3QgbWZjY3RsMiAqbWZjY3ApCiB7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsK
ICAgICBzdHJ1Y3QgaW5fYWRkcglvcmlnaW47CiAgICAgc3RydWN0IGluX2FkZHIJbWNhc3RncnA7
CiAgICAgc3RydWN0IG1mYwkJKnJ0OwpAQCAtMTIyMywxNCArMTI5MSwxNCBAQAogICAgIG9yaWdp
biA9IG1mY2NwLT5tZmNjX29yaWdpbjsKICAgICBtY2FzdGdycCA9IG1mY2NwLT5tZmNjX21jYXN0
Z3JwOwogCi0gICAgaWYgKG1ydGRlYnVnICYgREVCVUdfTUZDKQorICAgIGlmIChWX21ydGRlYnVn
ICYgREVCVUdfTUZDKQogCWxvZyhMT0dfREVCVUcsImRlbF9tZmMgb3JpZyAlbHggbWNhc3RncnAg
JWx4XG4iLAogCSAgICAodV9sb25nKW50b2hsKG9yaWdpbi5zX2FkZHIpLCAodV9sb25nKW50b2hs
KG1jYXN0Z3JwLnNfYWRkcikpOwogCiAgICAgTUZDX0xPQ0soKTsKIAogICAgIGhhc2ggPSBNRkNI
QVNIKG9yaWdpbi5zX2FkZHIsIG1jYXN0Z3JwLnNfYWRkcik7Ci0gICAgZm9yIChucHRyID0gJm1m
Y3RhYmxlW2hhc2hdOyAocnQgPSAqbnB0cikgIT0gTlVMTDsgbnB0ciA9ICZydC0+bWZjX25leHQp
CisgICAgZm9yIChucHRyID0gJlZfbWZjdGFibGVbaGFzaF07IChydCA9ICpucHRyKSAhPSBOVUxM
OyBucHRyID0gJnJ0LT5tZmNfbmV4dCkKIAlpZiAob3JpZ2luLnNfYWRkciA9PSBydC0+bWZjX29y
aWdpbi5zX2FkZHIgJiYKIAkJbWNhc3RncnAuc19hZGRyID09IHJ0LT5tZmNfbWNhc3RncnAuc19h
ZGRyICYmCiAJCXJ0LT5tZmNfc3RhbGwgPT0gTlVMTCkKQEAgLTEyOTQsMTEgKzEzNjIsMTIgQEAK
ICAgICBzdHJ1Y3QgaXBfbW9wdGlvbnMgKmltbykKIHsKICAgICBJTklUX1ZORVRfSU5FVChjdXJ2
bmV0KTsKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOwogICAgIHN0cnVjdCBtZmMgKnJ0
OwogICAgIGludCBlcnJvcjsKICAgICB2aWZpX3QgdmlmaTsKIAotICAgIGlmIChtcnRkZWJ1ZyAm
IERFQlVHX0ZPUldBUkQpCisgICAgaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19GT1JXQVJEKQogCWxv
ZyhMT0dfREVCVUcsICJpcF9tZm9yd2FyZDogc3JjICVseCwgZHN0ICVseCwgaWZwICVwXG4iLAog
CSAgICAodV9sb25nKW50b2hsKGlwLT5pcF9zcmMuc19hZGRyKSwgKHVfbG9uZyludG9obChpcC0+
aXBfZHN0LnNfYWRkciksCiAJICAgICh2b2lkICopaWZwKTsKQEAgLTEzMjYsMTEgKzEzOTUsMTEg
QEAKIAogICAgIFZJRl9MT0NLKCk7CiAgICAgTUZDX0xPQ0soKTsKLSAgICBpZiAoaW1vICYmICgo
dmlmaSA9IGltby0+aW1vX211bHRpY2FzdF92aWYpIDwgbnVtdmlmcykpIHsKKyAgICBpZiAoaW1v
ICYmICgodmlmaSA9IGltby0+aW1vX211bHRpY2FzdF92aWYpIDwgVl9udW12aWZzKSkgewogCWlm
IChpcC0+aXBfdHRsIDwgTUFYVFRMKQogCSAgICBpcC0+aXBfdHRsKys7CS8qIGNvbXBlbnNhdGUg
Zm9yIC0xIGluICpfc2VuZCByb3V0aW5lcyAqLwotCWlmIChyc3ZwZGVidWcgJiYgaXAtPmlwX3Ag
PT0gSVBQUk9UT19SU1ZQKSB7Ci0JICAgIHN0cnVjdCB2aWYgKnZpZnAgPSB2aWZ0YWJsZSArIHZp
Zmk7CisJaWYgKFZfcnN2cGRlYnVnICYmIGlwLT5pcF9wID09IElQUFJPVE9fUlNWUCkgeworCSAg
ICBzdHJ1Y3QgdmlmICp2aWZwID0gVl92aWZ0YWJsZSArIHZpZmk7CiAKIAkgICAgcHJpbnRmKCJT
ZW5kaW5nIElQUFJPVE9fUlNWUCBmcm9tICVseCB0byAlbHggb24gdmlmICVkICglcyVzKVxuIiwK
IAkJKGxvbmcpbnRvaGwoaXAtPmlwX3NyYy5zX2FkZHIpLCAobG9uZyludG9obChpcC0+aXBfZHN0
LnNfYWRkciksCkBAIC0xMzQzLDcgKzE0MTIsNyBAQAogCVZJRl9VTkxPQ0soKTsKIAlyZXR1cm4g
ZXJyb3I7CiAgICAgfQotICAgIGlmIChyc3ZwZGVidWcgJiYgaXAtPmlwX3AgPT0gSVBQUk9UT19S
U1ZQKSB7CisgICAgaWYgKFZfcnN2cGRlYnVnICYmIGlwLT5pcF9wID09IElQUFJPVE9fUlNWUCkg
ewogCXByaW50ZigiV2FybmluZzogSVBQUk9UT19SU1ZQIGZyb20gJWx4IHRvICVseCB3aXRob3V0
IHZpZiBvcHRpb25cbiIsCiAJICAgIChsb25nKW50b2hsKGlwLT5pcF9zcmMuc19hZGRyKSwgKGxv
bmcpbnRvaGwoaXAtPmlwX2RzdC5zX2FkZHIpKTsKIAlpZiAoIWltbykKQEAgLTEzNjMsNyArMTQz
Miw3IEBACiAgICAgLyoKICAgICAgKiBEZXRlcm1pbmUgZm9yd2FyZGluZyB2aWZzIGZyb20gdGhl
IGZvcndhcmRpbmcgY2FjaGUgdGFibGUKICAgICAgKi8KLSAgICArK21ydHN0YXQubXJ0c19tZmNf
bG9va3VwczsKKyAgICArK1ZfbXJ0c3RhdC5tcnRzX21mY19sb29rdXBzOwogICAgIHJ0ID0gbWZj
X2ZpbmQoaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5pcF9kc3Quc19hZGRyKTsKIAogICAgIC8qIEVu
dHJ5IGV4aXN0cywgc28gZm9yd2FyZCBpZiBuZWNlc3NhcnkgKi8KQEAgLTEzODMsMTAgKzE0NTIs
MTAgQEAKIAl1X2xvbmcgaGFzaDsKIAlpbnQgaGxlbiA9IGlwLT5pcF9obCA8PCAyOwogCi0JKytt
cnRzdGF0Lm1ydHNfbWZjX21pc3NlczsKKwkrK1ZfbXJ0c3RhdC5tcnRzX21mY19taXNzZXM7CiAK
LQltcnRzdGF0Lm1ydHNfbm9fcm91dGUrKzsKLQlpZiAobXJ0ZGVidWcgJiAoREVCVUdfRk9SV0FS
RCB8IERFQlVHX01GQykpCisJVl9tcnRzdGF0Lm1ydHNfbm9fcm91dGUrKzsKKwlpZiAoVl9tcnRk
ZWJ1ZyAmIChERUJVR19GT1JXQVJEIHwgREVCVUdfTUZDKSkKIAkgICAgbG9nKExPR19ERUJVRywg
ImlwX21mb3J3YXJkOiBubyBydGUgcyAlbHggZyAlbHhcbiIsCiAJCSh1X2xvbmcpbnRvaGwoaXAt
PmlwX3NyYy5zX2FkZHIpLAogCQkodV9sb25nKW50b2hsKGlwLT5pcF9kc3Quc19hZGRyKSk7CkBA
IC0xNDE0LDcgKzE0ODMsNyBAQAogCiAJLyogaXMgdGhlcmUgYW4gdXBjYWxsIHdhaXRpbmcgZm9y
IHRoaXMgZmxvdyA/ICovCiAJaGFzaCA9IE1GQ0hBU0goaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5p
cF9kc3Quc19hZGRyKTsKLQlmb3IgKHJ0ID0gbWZjdGFibGVbaGFzaF07IHJ0OyBydCA9IHJ0LT5t
ZmNfbmV4dCkgeworCWZvciAocnQgPSBWX21mY3RhYmxlW2hhc2hdOyBydDsgcnQgPSBydC0+bWZj
X25leHQpIHsKIAkgICAgaWYgKChpcC0+aXBfc3JjLnNfYWRkciA9PSBydC0+bWZjX29yaWdpbi5z
X2FkZHIpICYmCiAJCSAgICAoaXAtPmlwX2RzdC5zX2FkZHIgPT0gcnQtPm1mY19tY2FzdGdycC5z
X2FkZHIpICYmCiAJCSAgICAocnQtPm1mY19zdGFsbCAhPSBOVUxMKSkKQEAgLTE0MzEsOSArMTUw
MCw5IEBACiAJICAgICAqIExvY2F0ZSB0aGUgdmlmaSBmb3IgdGhlIGluY29taW5nIGludGVyZmFj
ZSBmb3IgdGhpcyBwYWNrZXQuCiAJICAgICAqIElmIG5vbmUgZm91bmQsIGRyb3AgcGFja2V0Lgog
CSAgICAgKi8KLQkgICAgZm9yICh2aWZpPTA7IHZpZmkgPCBudW12aWZzICYmIHZpZnRhYmxlW3Zp
ZmldLnZfaWZwICE9IGlmcDsgdmlmaSsrKQorCSAgICBmb3IgKHZpZmk9MDsgdmlmaSA8IFZfbnVt
dmlmcyAmJiBWX3ZpZnRhYmxlW3ZpZmldLnZfaWZwICE9IGlmcDsgdmlmaSsrKQogCQk7Ci0JICAg
IGlmICh2aWZpID49IG51bXZpZnMpCS8qIHZpZiBub3QgZm91bmQsIGRyb3AgcGFja2V0ICovCisJ
ICAgIGlmICh2aWZpID49IFZfbnVtdmlmcykJLyogdmlmIG5vdCBmb3VuZCwgZHJvcCBwYWNrZXQg
Ki8KIAkJZ290byBub25fZmF0YWw7CiAKIAkgICAgLyogbm8gdXBjYWxsLCBzbyBtYWtlIGEgbmV3
IGVudHJ5ICovCkBAIC0xNDU1LDEyICsxNTI0LDEyIEBACiAJICAgIGltLT5pbV9tYnogPSAwOwog
CSAgICBpbS0+aW1fdmlmID0gdmlmaTsKIAotCSAgICBtcnRzdGF0Lm1ydHNfdXBjYWxscysrOwor
CSAgICBWX21ydHN0YXQubXJ0c191cGNhbGxzKys7CiAKIAkgICAga19pZ21wc3JjLnNpbl9hZGRy
ID0gaXAtPmlwX3NyYzsKIAkgICAgaWYgKHNvY2tldF9zZW5kKFZfaXBfbXJvdXRlciwgbW0sICZr
X2lnbXBzcmMpIDwgMCkgewogCQlsb2coTE9HX1dBUk5JTkcsICJpcF9tZm9yd2FyZDogaXBfbXJv
dXRlciBzb2NrZXQgcXVldWUgZnVsbFxuIik7Ci0JCSsrbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVs
bDsKKwkJKytWX21ydHN0YXQubXJ0c191cHFfc29ja2Z1bGw7CiBmYWlsMToKIAkJZnJlZShydCwg
TV9NUlRBQkxFKTsKIGZhaWw6CkBAIC0xNDc1LDggKzE1NDQsOCBAQAogCSAgICBydC0+bWZjX29y
aWdpbi5zX2FkZHIgICAgID0gaXAtPmlwX3NyYy5zX2FkZHI7CiAJICAgIHJ0LT5tZmNfbWNhc3Rn
cnAuc19hZGRyICAgPSBpcC0+aXBfZHN0LnNfYWRkcjsKIAkgICAgcnQtPm1mY19leHBpcmUJICAg
ICAgPSBVUENBTExfRVhQSVJFOwotCSAgICBuZXhwaXJlW2hhc2hdKys7Ci0JICAgIGZvciAoaSA9
IDA7IGkgPCBudW12aWZzOyBpKyspIHsKKwkgICAgVl9uZXhwaXJlW2hhc2hdKys7CisJICAgIGZv
ciAoaSA9IDA7IGkgPCBWX251bXZpZnM7IGkrKykgewogCQlydC0+bWZjX3R0bHNbaV0gPSAwOwog
CQlydC0+bWZjX2ZsYWdzW2ldID0gMDsKIAkgICAgfQpAQCAtMTQ4Nyw4ICsxNTU2LDggQEAKIAkg
ICAgcnQtPm1mY19id19tZXRlciA9IE5VTEw7CiAKIAkgICAgLyogbGluayBpbnRvIHRhYmxlICov
Ci0JICAgIHJ0LT5tZmNfbmV4dCAgID0gbWZjdGFibGVbaGFzaF07Ci0JICAgIG1mY3RhYmxlW2hh
c2hdID0gcnQ7CisJICAgIHJ0LT5tZmNfbmV4dCAgID0gVl9tZmN0YWJsZVtoYXNoXTsKKwkgICAg
Vl9tZmN0YWJsZVtoYXNoXSA9IHJ0OwogCSAgICBydC0+bWZjX3N0YWxsID0gcnRlOwogCiAJfSBl
bHNlIHsKQEAgLTE1MDUsNyArMTU3NCw3IEBACiAJCW5wa3RzKys7CiAKIAkgICAgaWYgKG5wa3Rz
ID4gTUFYX1VQUSkgewotCQltcnRzdGF0Lm1ydHNfdXBxX292Zmx3Kys7CisJCVZfbXJ0c3RhdC5t
cnRzX3VwcV9vdmZsdysrOwogbm9uX2ZhdGFsOgogCQlmcmVlKHJ0ZSwgTV9NUlRBQkxFKTsKIAkJ
bV9mcmVlbShtYjApOwpAQCAtMTUzNSwxNSArMTYwNCwxNiBAQAogc3RhdGljIHZvaWQKIGV4cGly
ZV91cGNhbGxzKHZvaWQgKnVudXNlZCkKIHsKKyAgICBJTklUX1ZORVRfTVJPVVRFKCAoKHN0cnVj
dCB2bmV0ICopdW51c2VkKSApOwogICAgIHN0cnVjdCBydGRldHEgKnJ0ZTsKICAgICBzdHJ1Y3Qg
bWZjICptZmMsICoqbnB0cjsKICAgICBpbnQgaTsKIAogICAgIE1GQ19MT0NLKCk7CiAgICAgZm9y
IChpID0gMDsgaSA8IE1GQ1RCTFNJWjsgaSsrKSB7Ci0JaWYgKG5leHBpcmVbaV0gPT0gMCkKKwlp
ZiAoVl9uZXhwaXJlW2ldID09IDApCiAJICAgIGNvbnRpbnVlOwotCW5wdHIgPSAmbWZjdGFibGVb
aV07CisJbnB0ciA9ICZWX21mY3RhYmxlW2ldOwogCWZvciAobWZjID0gKm5wdHI7IG1mYyAhPSBO
VUxMOyBtZmMgPSAqbnB0cikgewogCSAgICAvKgogCSAgICAgKiBTa2lwIHJlYWwgY2FjaGUgZW50
cmllcwpAQCAtMTU1Miw3ICsxNjIyLDcgQEAKIAkgICAgICovCiAJICAgIGlmIChtZmMtPm1mY19z
dGFsbCAhPSBOVUxMICYmIG1mYy0+bWZjX2V4cGlyZSAhPSAwICYmCiAJCSAgICAtLW1mYy0+bWZj
X2V4cGlyZSA9PSAwKSB7Ci0JCWlmIChtcnRkZWJ1ZyAmIERFQlVHX0VYUElSRSkKKwkJaWYgKFZf
bXJ0ZGVidWcgJiBERUJVR19FWFBJUkUpCiAJCSAgICBsb2coTE9HX0RFQlVHLCAiZXhwaXJlX3Vw
Y2FsbHM6IGV4cGlyaW5nICglbHggJWx4KVxuIiwKIAkJCSh1X2xvbmcpbnRvaGwobWZjLT5tZmNf
b3JpZ2luLnNfYWRkciksCiAJCQkodV9sb25nKW50b2hsKG1mYy0+bWZjX21jYXN0Z3JwLnNfYWRk
cikpOwpAQCAtMTU2Nyw4ICsxNjM3LDggQEAKIAkJICAgIGZyZWUocnRlLCBNX01SVEFCTEUpOwog
CQkgICAgcnRlID0gbjsKIAkJfQotCQkrK21ydHN0YXQubXJ0c19jYWNoZV9jbGVhbnVwczsKLQkJ
bmV4cGlyZVtpXS0tOworCQkrK1ZfbXJ0c3RhdC5tcnRzX2NhY2hlX2NsZWFudXBzOworCQlWX25l
eHBpcmVbaV0tLTsKIAogCQkvKgogCQkgKiBmcmVlIHRoZSBid19tZXRlciBlbnRyaWVzCkBAIC0x
NTg3LDkgKzE2NTcsOCBAQAogCSAgICB9CiAJfQogICAgIH0KKyAgICBjYWxsb3V0X3Jlc2V0KCZW
X2V4cGlyZV91cGNhbGxzX2NoLCBFWFBJUkVfVElNRU9VVCwgZXhwaXJlX3VwY2FsbHMsIHVudXNl
ZCk7CiAgICAgTUZDX1VOTE9DSygpOwotCi0gICAgY2FsbG91dF9yZXNldCgmZXhwaXJlX3VwY2Fs
bHNfY2gsIEVYUElSRV9USU1FT1VULCBleHBpcmVfdXBjYWxscywgTlVMTCk7CiB9CiAKIC8qCkBA
IC0xNTk5LDYgKzE2NjgsNyBAQAogaXBfbWRxKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgaWZuZXQg
KmlmcCwgc3RydWN0IG1mYyAqcnQsIHZpZmlfdCB4bXRfdmlmKQogewogICAgIElOSVRfVk5FVF9J
TkVUKGN1cnZuZXQpOworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3RydWN0
IGlwICAqaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKICAgICB2aWZpX3QgdmlmaTsKICAgICBp
bnQgcGxlbiA9IGlwLT5pcF9sZW47CkBAIC0xNjEwLDExICsxNjgwLDExIEBACiAgICAgICoKICAg
ICAgKiAoc2luY2UgdmlmaV90IGlzIHVfc2hvcnQsIC0xIGJlY29tZXMgTUFYVVNIT1JULCB3aGlj
aCA+IG51bXZpZnMuKQogICAgICAqLwotICAgIGlmICh4bXRfdmlmIDwgbnVtdmlmcykgewotCWlm
ICh2aWZ0YWJsZVt4bXRfdmlmXS52X2ZsYWdzICYgVklGRl9SRUdJU1RFUikKLQkJcGltX3JlZ2lz
dGVyX3NlbmQoaXAsIHZpZnRhYmxlICsgeG10X3ZpZiwgbSwgcnQpOworICAgIGlmICh4bXRfdmlm
IDwgVl9udW12aWZzKSB7CisJaWYgKFZfdmlmdGFibGVbeG10X3ZpZl0udl9mbGFncyAmIFZJRkZf
UkVHSVNURVIpCisJCXBpbV9yZWdpc3Rlcl9zZW5kKGlwLCBWX3ZpZnRhYmxlICsgeG10X3ZpZiwg
bSwgcnQpOwogCWVsc2UKLQkJcGh5aW50X3NlbmQoaXAsIHZpZnRhYmxlICsgeG10X3ZpZiwgbSk7
CisJCXBoeWludF9zZW5kKGlwLCBWX3ZpZnRhYmxlICsgeG10X3ZpZiwgbSk7CiAJcmV0dXJuIDE7
CiAgICAgfQogCkBAIC0xNjIyLDEyICsxNjkyLDEyIEBACiAgICAgICogRG9uJ3QgZm9yd2FyZCBp
ZiBpdCBkaWRuJ3QgYXJyaXZlIGZyb20gdGhlIHBhcmVudCB2aWYgZm9yIGl0cyBvcmlnaW4uCiAg
ICAgICovCiAgICAgdmlmaSA9IHJ0LT5tZmNfcGFyZW50OwotICAgIGlmICgodmlmaSA+PSBudW12
aWZzKSB8fCAodmlmdGFibGVbdmlmaV0udl9pZnAgIT0gaWZwKSkgeworICAgIGlmICgodmlmaSA+
PSBWX251bXZpZnMpIHx8IChWX3ZpZnRhYmxlW3ZpZmldLnZfaWZwICE9IGlmcCkpIHsKIAkvKiBj
YW1lIGluIHRoZSB3cm9uZyBpbnRlcmZhY2UgKi8KLQlpZiAobXJ0ZGVidWcgJiBERUJVR19GT1JX
QVJEKQorCWlmIChWX21ydGRlYnVnICYgREVCVUdfRk9SV0FSRCkKIAkgICAgbG9nKExPR19ERUJV
RywgIndyb25nIGlmOiBpZnAgJXAgdmlmaSAlZCB2aWZpZnAgJXBcbiIsCi0JCSh2b2lkICopaWZw
LCB2aWZpLCAodm9pZCAqKXZpZnRhYmxlW3ZpZmldLnZfaWZwKTsKLQkrK21ydHN0YXQubXJ0c193
cm9uZ19pZjsKKwkJKHZvaWQgKilpZnAsIHZpZmksICh2b2lkICopVl92aWZ0YWJsZVt2aWZpXS52
X2lmcCk7CisJKytWX21ydHN0YXQubXJ0c193cm9uZ19pZjsKIAkrK3J0LT5tZmNfd3JvbmdfaWY7
CiAJLyoKIAkgKiBJZiB3ZSBhcmUgZG9pbmcgUElNIGFzc2VydCBwcm9jZXNzaW5nLCBzZW5kIGEg
bWVzc2FnZQpAQCAtMTYzNywxNyArMTcwNywxOCBAQAogCSAqIGNhbiBjb21wbGV0ZSB0aGUgU1BU
IHN3aXRjaCwgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZQogCSAqIG9mIHRoZSBpaWYgKGJyb2FkY2Fz
dCBtZWRpYSwgR1JFIHR1bm5lbCwgZXRjKS4KIAkgKi8KLQlpZiAocGltX2Fzc2VydCAmJiAodmlm
aSA8IG51bXZpZnMpICYmIHZpZnRhYmxlW3ZpZmldLnZfaWZwKSB7CisJaWYgKFZfcGltX2Fzc2Vy
dCAmJiAodmlmaSA8IFZfbnVtdmlmcykgJiYgVl92aWZ0YWJsZVt2aWZpXS52X2lmcCkgewogCSAg
ICBzdHJ1Y3QgdGltZXZhbCBub3c7CiAJICAgIHVfbG9uZyBkZWx0YTsKIAotCSAgICBpZiAoaWZw
ID09ICZtdWx0aWNhc3RfcmVnaXN0ZXJfaWYpCi0JCXBpbXN0YXQucGltc19yY3ZfcmVnaXN0ZXJz
X3dyb25naWlmKys7CisJICAgIGlmIChpZnAgPT0gJlZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmKQor
CQlWX3BpbXN0YXQucGltc19yY3ZfcmVnaXN0ZXJzX3dyb25naWlmKys7CiAKIAkgICAgLyogR2V0
IHZpZmkgZm9yIHRoZSBpbmNvbWluZyBwYWNrZXQgKi8KLQkgICAgZm9yICh2aWZpPTA7IHZpZmkg
PCBudW12aWZzICYmIHZpZnRhYmxlW3ZpZmldLnZfaWZwICE9IGlmcDsgdmlmaSsrKQorCSAgICBm
b3IgKHZpZmk9MDsgdmlmaSA8IFZfbnVtdmlmcyAmJiBWX3ZpZnRhYmxlW3ZpZmldLnZfaWZwICE9
IGlmcDsKKwkJdmlmaSsrKQogCQk7Ci0JICAgIGlmICh2aWZpID49IG51bXZpZnMpCisJICAgIGlm
ICh2aWZpID49IFZfbnVtdmlmcykKIAkJcmV0dXJuIDA7CS8qIFRoZSBpaWYgaXMgbm90IGZvdW5k
OiBpZ25vcmUgdGhlIHBhY2tldC4gKi8KIAogCSAgICBpZiAocnQtPm1mY19mbGFnc1t2aWZpXSAm
IE1SVF9NRkNfRkxBR1NfRElTQUJMRV9XUk9OR1ZJRikKQEAgLTE2NzUsMTMgKzE3NDYsMTMgQEAK
IAkJaW0tPmltX21iegkJPSAwOwogCQlpbS0+aW1fdmlmCQk9IHZpZmk7CiAKLQkJbXJ0c3RhdC5t
cnRzX3VwY2FsbHMrKzsKKwkJVl9tcnRzdGF0Lm1ydHNfdXBjYWxscysrOwogCiAJCWtfaWdtcHNy
Yy5zaW5fYWRkciA9IGltLT5pbV9zcmM7CiAJCWlmIChzb2NrZXRfc2VuZChWX2lwX21yb3V0ZXIs
IG1tLCAma19pZ21wc3JjKSA8IDApIHsKIAkJICAgIGxvZyhMT0dfV0FSTklORywKIAkJCSJpcF9t
Zm9yd2FyZDogaXBfbXJvdXRlciBzb2NrZXQgcXVldWUgZnVsbFxuIik7Ci0JCSAgICArK21ydHN0
YXQubXJ0c191cHFfc29ja2Z1bGw7CisJCSAgICArK1ZfbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVs
bDsKIAkJICAgIHJldHVybiBFTk9CVUZTOwogCQl9CiAJICAgIH0KQEAgLTE2OTAsMTIgKzE3NjEs
MTIgQEAKICAgICB9CiAKICAgICAvKiBJZiBJIHNvdXJjZWQgdGhpcyBwYWNrZXQsIGl0IGNvdW50
cyBhcyBvdXRwdXQsIGVsc2UgaXQgd2FzIGlucHV0LiAqLwotICAgIGlmIChpcC0+aXBfc3JjLnNf
YWRkciA9PSB2aWZ0YWJsZVt2aWZpXS52X2xjbF9hZGRyLnNfYWRkcikgewotCXZpZnRhYmxlW3Zp
ZmldLnZfcGt0X291dCsrOwotCXZpZnRhYmxlW3ZpZmldLnZfYnl0ZXNfb3V0ICs9IHBsZW47Cisg
ICAgaWYgKGlwLT5pcF9zcmMuc19hZGRyID09IFZfdmlmdGFibGVbdmlmaV0udl9sY2xfYWRkci5z
X2FkZHIpIHsKKwlWX3ZpZnRhYmxlW3ZpZmldLnZfcGt0X291dCsrOworCVZfdmlmdGFibGVbdmlm
aV0udl9ieXRlc19vdXQgKz0gcGxlbjsKICAgICB9IGVsc2UgewotCXZpZnRhYmxlW3ZpZmldLnZf
cGt0X2luKys7Ci0JdmlmdGFibGVbdmlmaV0udl9ieXRlc19pbiArPSBwbGVuOworCVZfdmlmdGFi
bGVbdmlmaV0udl9wa3RfaW4rKzsKKwlWX3ZpZnRhYmxlW3ZpZmldLnZfYnl0ZXNfaW4gKz0gcGxl
bjsKICAgICB9CiAgICAgcnQtPm1mY19wa3RfY250Kys7CiAgICAgcnQtPm1mY19ieXRlX2NudCAr
PSBwbGVuOwpAQCAtMTcwNiwxNCArMTc3NywxNCBAQAogICAgICAqCQktIHRoZSB0dGwgZXhjZWVk
cyB0aGUgdmlmJ3MgdGhyZXNob2xkCiAgICAgICoJCS0gdGhlcmUgYXJlIGdyb3VwIG1lbWJlcnMg
ZG93bnN0cmVhbSBvbiBpbnRlcmZhY2UKICAgICAgKi8KLSAgICBmb3IgKHZpZmkgPSAwOyB2aWZp
IDwgbnVtdmlmczsgdmlmaSsrKQorICAgIGZvciAodmlmaSA9IDA7IHZpZmkgPCBWX251bXZpZnM7
IHZpZmkrKykKIAlpZiAoKHJ0LT5tZmNfdHRsc1t2aWZpXSA+IDApICYmIChpcC0+aXBfdHRsID4g
cnQtPm1mY190dGxzW3ZpZmldKSkgewotCSAgICB2aWZ0YWJsZVt2aWZpXS52X3BrdF9vdXQrKzsK
LQkgICAgdmlmdGFibGVbdmlmaV0udl9ieXRlc19vdXQgKz0gcGxlbjsKLQkgICAgaWYgKHZpZnRh
YmxlW3ZpZmldLnZfZmxhZ3MgJiBWSUZGX1JFR0lTVEVSKQotCQlwaW1fcmVnaXN0ZXJfc2VuZChp
cCwgdmlmdGFibGUgKyB2aWZpLCBtLCBydCk7CisJICAgIFZfdmlmdGFibGVbdmlmaV0udl9wa3Rf
b3V0Kys7CisJICAgIFZfdmlmdGFibGVbdmlmaV0udl9ieXRlc19vdXQgKz0gcGxlbjsKKwkgICAg
aWYgKFZfdmlmdGFibGVbdmlmaV0udl9mbGFncyAmIFZJRkZfUkVHSVNURVIpCisJCXBpbV9yZWdp
c3Rlcl9zZW5kKGlwLCBWX3ZpZnRhYmxlICsgdmlmaSwgbSwgcnQpOwogCSAgICBlbHNlCi0JCXBo
eWludF9zZW5kKGlwLCB2aWZ0YWJsZSArIHZpZmksIG0pOworCQlwaHlpbnRfc2VuZChpcCwgVl92
aWZ0YWJsZSArIHZpZmksIG0pOwogCX0KIAogICAgIC8qCkBAIC0xNzM4LDggKzE4MDksOSBAQAog
c3RhdGljIGludAogWF9sZWdhbF92aWZfbnVtKGludCB2aWYpCiB7CisgICAgSU5JVF9WTkVUX01S
T1VURShjdXJ2bmV0KTsKICAgICAvKiBYWFggdW5sb2NrZWQsIG1hdHRlcj8gKi8KLSAgICByZXR1
cm4gKHZpZiA+PSAwICYmIHZpZiA8IG51bXZpZnMpOworICAgIHJldHVybiAodmlmID49IDAgJiYg
dmlmIDwgVl9udW12aWZzKTsKIH0KIAogLyoKQEAgLTE3NDgsOSArMTgyMCwxMCBAQAogc3RhdGlj
IHVfbG9uZwogWF9pcF9tY2FzdF9zcmMoaW50IHZpZmkpCiB7CisgICAgSU5JVF9WTkVUX01ST1VU
RShjdXJ2bmV0KTsKICAgICAvKiBYWFggdW5sb2NrZWQsIG1hdHRlcj8gKi8KLSAgICBpZiAodmlm
aSA+PSAwICYmIHZpZmkgPCBudW12aWZzKQotCXJldHVybiB2aWZ0YWJsZVt2aWZpXS52X2xjbF9h
ZGRyLnNfYWRkcjsKKyAgICBpZiAodmlmaSA+PSAwICYmIHZpZmkgPCBWX251bXZpZnMpCisJcmV0
dXJuIFZfdmlmdGFibGVbdmlmaV0udl9sY2xfYWRkci5zX2FkZHI7CiAgICAgZWxzZQogCXJldHVy
biBJTkFERFJfQU5ZOwogfQpAQCAtMTc4MCw2ICsxODUzLDcgQEAKIHN0YXRpYyB2b2lkCiBzZW5k
X3BhY2tldChzdHJ1Y3QgdmlmICp2aWZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKKwlJTklUX1ZORVRf
TVJPVVRFKGN1cnZuZXQpOwogCXN0cnVjdCBpcF9tb3B0aW9ucyBpbW87CiAJc3RydWN0IGluX211
bHRpICppbW1bMl07CiAJaW50IGVycm9yOwpAQCAtMTgwMSwxNiArMTg3NSwxNyBAQAogCSAqIHRo
ZSBsb29wYmFjayBpbnRlcmZhY2UsIHRodXMgcHJldmVudGluZyBsb29waW5nLgogCSAqLwogCWVy
cm9yID0gaXBfb3V0cHV0KG0sIE5VTEwsICZ2aWZwLT52X3JvdXRlLCBJUF9GT1JXQVJESU5HLCAm
aW1vLCBOVUxMKTsKLQlpZiAobXJ0ZGVidWcgJiBERUJVR19YTUlUKSB7CisJaWYgKFZfbXJ0ZGVi
dWcgJiBERUJVR19YTUlUKSB7CiAJICAgIGxvZyhMT0dfREVCVUcsICJwaHlpbnRfc2VuZCBvbiB2
aWYgJXRkIGVyciAlZFxuIiwKLQkJdmlmcCAtIHZpZnRhYmxlLCBlcnJvcik7CisJCXZpZnAgLSBW
X3ZpZnRhYmxlLCBlcnJvcik7CiAJfQogfQogCiBzdGF0aWMgaW50CiBYX2lwX3JzdnBfdmlmKHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29wdCkKIHsKLSAgICBJTklUX1ZORVRf
SU5FVChjdXJ2bmV0KTsKKyAgICBJTklUX1ZORVRfSU5FVChzby0+c29fdm5ldCk7CisgICAgSU5J
VF9WTkVUX01ST1VURShzby0+c29fdm5ldCk7CiAgICAgaW50IGVycm9yLCB2aWZpOwogCiAgICAg
aWYgKHNvLT5zb190eXBlICE9IFNPQ0tfUkFXIHx8IHNvLT5zb19wcm90by0+cHJfcHJvdG9jb2wg
IT0gSVBQUk9UT19SU1ZQKQpAQCAtMTgyMiwzOSArMTg5NywzOSBAQAogCiAgICAgVklGX0xPQ0so
KTsKIAotICAgIGlmICh2aWZpIDwgMCB8fCB2aWZpID49IG51bXZpZnMpIHsJLyogRXJyb3IgaWYg
dmlmIGlzIGludmFsaWQgKi8KKyAgICBpZiAodmlmaSA8IDAgfHwgdmlmaSA+PSBWX251bXZpZnMp
IHsJLyogRXJyb3IgaWYgdmlmIGlzIGludmFsaWQgKi8KIAlWSUZfVU5MT0NLKCk7CiAJcmV0dXJu
IEVBRERSTk9UQVZBSUw7CiAgICAgfQogCiAgICAgaWYgKHNvcHQtPnNvcHRfbmFtZSA9PSBJUF9S
U1ZQX1ZJRl9PTikgewogCS8qIENoZWNrIGlmIHNvY2tldCBpcyBhdmFpbGFibGUuICovCi0JaWYg
KHZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgIT0gTlVMTCkgeworCWlmIChWX3ZpZnRhYmxlW3ZpZmld
LnZfcnN2cGQgIT0gTlVMTCkgewogCSAgICBWSUZfVU5MT0NLKCk7CiAJICAgIHJldHVybiBFQURE
UklOVVNFOwogCX0KIAotCXZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPSBzbzsKKwlWX3ZpZnRhYmxl
W3ZpZmldLnZfcnN2cGQgPSBzbzsKIAkvKiBUaGlzIG1heSBzZWVtIHNpbGx5LCBidXQgd2UgbmVl
ZCB0byBiZSBzdXJlIHdlIGRvbid0IG92ZXItaW5jcmVtZW50CiAJICogdGhlIFJTVlAgY291bnRl
ciwgaW4gY2FzZSBzb21ldGhpbmcgc2xpcHMgdXAuCiAJICovCi0JaWYgKCF2aWZ0YWJsZVt2aWZp
XS52X3JzdnBfb24pIHsKLQkgICAgdmlmdGFibGVbdmlmaV0udl9yc3ZwX29uID0gMTsKKwlpZiAo
IVZfdmlmdGFibGVbdmlmaV0udl9yc3ZwX29uKSB7CisJICAgIFZfdmlmdGFibGVbdmlmaV0udl9y
c3ZwX29uID0gMTsKIAkgICAgVl9yc3ZwX29uKys7CiAJfQogICAgIH0gZWxzZSB7IC8qIG11c3Qg
YmUgVklGX09GRiAqLwogCS8qCiAJICogWFhYIGFzIGFuIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kg
Y2hlY2ssIG9uZSBjb3VsZCBtYWtlIHN1cmUKLQkgKiB0aGF0IHZpZnRhYmxlW3ZpZmldLnZfcnN2
cGQgPT0gc28sIG90aGVyd2lzZSBwYXNzaW5nIHNvIGFzCisJICogdGhhdCBWX3ZpZnRhYmxlW3Zp
ZmldLnZfcnN2cGQgPT0gc28sIG90aGVyd2lzZSBwYXNzaW5nIHNvIGFzCiAJICogZmlyc3QgcGFy
YW1ldGVyIGlzIHByZXR0eSB1c2VsZXNzLgogCSAqLwotCXZpZnRhYmxlW3ZpZmldLnZfcnN2cGQg
PSBOVUxMOworCVZfdmlmdGFibGVbdmlmaV0udl9yc3ZwZCA9IE5VTEw7CiAJLyoKIAkgKiBUaGlz
IG1heSBzZWVtIHNpbGx5LCBidXQgd2UgbmVlZCB0byBiZSBzdXJlIHdlIGRvbid0IG92ZXItZGVj
cmVtZW50CiAJICogdGhlIFJTVlAgY291bnRlciwgaW4gY2FzZSBzb21ldGhpbmcgc2xpcHMgdXAu
CiAJICovCi0JaWYgKHZpZnRhYmxlW3ZpZmldLnZfcnN2cF9vbikgewotCSAgICB2aWZ0YWJsZVt2
aWZpXS52X3JzdnBfb24gPSAwOworCWlmIChWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cF9vbikgewor
CSAgICBWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cF9vbiA9IDA7CiAJICAgIFZfcnN2cF9vbi0tOwog
CX0KICAgICB9CkBAIC0xODY1LDcgKzE5NDAsOCBAQAogc3RhdGljIHZvaWQKIFhfaXBfcnN2cF9m
b3JjZV9kb25lKHN0cnVjdCBzb2NrZXQgKnNvKQogewotICAgIElOSVRfVk5FVF9JTkVUKGN1cnZu
ZXQpOworICAgIElOSVRfVk5FVF9JTkVUKHNvLT5zb192bmV0KTsKKyAgICBJTklUX1ZORVRfTVJP
VVRFKHNvLT5zb192bmV0KTsKICAgICBpbnQgdmlmaTsKIAogICAgIC8qIERvbid0IGJvdGhlciBp
ZiBpdCBpcyBub3QgdGhlIHJpZ2h0IHR5cGUgb2Ygc29ja2V0LiAqLwpAQCAtMTg3NywxNCArMTk1
MywxNCBAQAogICAgIC8qIFRoZSBzb2NrZXQgbWF5IGJlIGF0dGFjaGVkIHRvIG1vcmUgdGhhbiBv
bmUgdmlmLi4udGhpcwogICAgICAqIGlzIHBlcmZlY3RseSBsZWdhbC4KICAgICAgKi8KLSAgICBm
b3IgKHZpZmkgPSAwOyB2aWZpIDwgbnVtdmlmczsgdmlmaSsrKSB7Ci0JaWYgKHZpZnRhYmxlW3Zp
ZmldLnZfcnN2cGQgPT0gc28pIHsKLQkgICAgdmlmdGFibGVbdmlmaV0udl9yc3ZwZCA9IE5VTEw7
CisgICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IFZfbnVtdmlmczsgdmlmaSsrKSB7CisJaWYgKFZf
dmlmdGFibGVbdmlmaV0udl9yc3ZwZCA9PSBzbykgeworCSAgICBWX3ZpZnRhYmxlW3ZpZmldLnZf
cnN2cGQgPSBOVUxMOwogCSAgICAvKiBUaGlzIG1heSBzZWVtIHNpbGx5LCBidXQgd2UgbmVlZCB0
byBiZSBzdXJlIHdlIGRvbid0CiAJICAgICAqIG92ZXItZGVjcmVtZW50IHRoZSBSU1ZQIGNvdW50
ZXIsIGluIGNhc2Ugc29tZXRoaW5nIHNsaXBzIHVwLgogCSAgICAgKi8KLQkgICAgaWYgKHZpZnRh
YmxlW3ZpZmldLnZfcnN2cF9vbikgewotCQl2aWZ0YWJsZVt2aWZpXS52X3JzdnBfb24gPSAwOwor
CSAgICBpZiAoVl92aWZ0YWJsZVt2aWZpXS52X3JzdnBfb24pIHsKKwkJVl92aWZ0YWJsZVt2aWZp
XS52X3JzdnBfb24gPSAwOwogCQlWX3JzdnBfb24tLTsKIAkgICAgfQogCX0KQEAgLTE4OTcsMTIg
KzE5NzMsMTMgQEAKIFhfcnN2cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZikKIHsKICAg
ICBJTklUX1ZORVRfSU5FVChjdXJ2bmV0KTsKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQp
OwogICAgIGludCB2aWZpOwogICAgIHN0cnVjdCBpcCAqaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAq
KTsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcnN2cF9zcmMgPSB7IHNpemVvZiByc3ZwX3NyYywg
QUZfSU5FVCB9OwogICAgIHN0cnVjdCBpZm5ldCAqaWZwOwogCi0gICAgaWYgKHJzdnBkZWJ1ZykK
KyAgICBpZiAoVl9yc3ZwZGVidWcpCiAJcHJpbnRmKCJyc3ZwX2lucHV0OiByc3ZwX29uICVkXG4i
LCBWX3JzdnBfb24pOwogCiAgICAgLyogQ2FuIHN0aWxsIGdldCBwYWNrZXRzIHdpdGggcnN2cF9v
biA9IDAgaWYgdGhlcmUgaXMgYSBsb2NhbCBtZW1iZXIKQEAgLTE5MTQsNyArMTk5MSw3IEBACiAJ
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyc3ZwZGVidWcpCisgICAgaWYgKFZfcnN2cGRlYnVn
KQogCXByaW50ZigicnN2cF9pbnB1dDogY2hlY2sgdmlmc1xuIik7CiAKICNpZmRlZiBESUFHTk9T
VElDCkBAIC0xOTI1LDE0ICsyMDAyLDE0IEBACiAKICAgICBWSUZfTE9DSygpOwogICAgIC8qIEZp
bmQgd2hpY2ggdmlmIHRoZSBwYWNrZXQgYXJyaXZlZCBvbi4gKi8KLSAgICBmb3IgKHZpZmkgPSAw
OyB2aWZpIDwgbnVtdmlmczsgdmlmaSsrKQotCWlmICh2aWZ0YWJsZVt2aWZpXS52X2lmcCA9PSBp
ZnApCisgICAgZm9yICh2aWZpID0gMDsgdmlmaSA8IFZfbnVtdmlmczsgdmlmaSsrKQorCWlmIChW
X3ZpZnRhYmxlW3ZpZmldLnZfaWZwID09IGlmcCkKIAkgICAgYnJlYWs7CiAKLSAgICBpZiAodmlm
aSA9PSBudW12aWZzIHx8IHZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPT0gTlVMTCkgeworICAgIGlm
ICh2aWZpID09IFZfbnVtdmlmcyB8fCBWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPT0gTlVMTCkg
ewogCS8qCiAJICogRHJvcCB0aGUgbG9jayBoZXJlIHRvIGF2b2lkIGhvbGRpbmcgaXQgYWNyb3Nz
IHJpcF9pbnB1dC4KLQkgKiBUaGlzIGNvdWxkIG1ha2UgcnN2cGRlYnVnIHByaW50ZnMgd3Jvbmcu
ICBJZiB5b3UgY2FyZSwKKwkgKiBUaGlzIGNvdWxkIG1ha2UgVl9yc3ZwZGVidWcgcHJpbnRmcyB3
cm9uZy4gIElmIHlvdSBjYXJlLAogCSAqIHJlY29yZCB0aGUgc3RhdGUgb2Ygc3R1ZmYgYmVmb3Jl
IGRyb3BwaW5nIHRoZSBsb2NrLgogCSAqLwogCVZJRl9VTkxPQ0soKTsKQEAgLTE5NDIsMTMgKzIw
MTksMTMgQEAKIAkgKiBpcyBubyBzcGVjaWZpYyBzb2NrZXQgZm9yIHRoaXMgdmlmLgogCSAqLwog
CWlmIChWX2lwX3JzdnBkICE9IE5VTEwpIHsKLQkgICAgaWYgKHJzdnBkZWJ1ZykKKwkgICAgaWYg
KFZfcnN2cGRlYnVnKQogCQlwcmludGYoInJzdnBfaW5wdXQ6IFNlbmRpbmcgcGFja2V0IHVwIG9s
ZC1zdHlsZSBzb2NrZXRcbiIpOwogCSAgICByaXBfaW5wdXQobSwgb2ZmKTsgIC8qIHh4eCAqLwog
CX0gZWxzZSB7Ci0JICAgIGlmIChyc3ZwZGVidWcgJiYgdmlmaSA9PSBudW12aWZzKQorCSAgICBp
ZiAoVl9yc3ZwZGVidWcgJiYgdmlmaSA9PSBWX251bXZpZnMpCiAJCXByaW50ZigicnN2cF9pbnB1
dDogQ2FuJ3QgZmluZCB2aWYgZm9yIHBhY2tldC5cbiIpOwotCSAgICBlbHNlIGlmIChyc3ZwZGVi
dWcgJiYgdmlmdGFibGVbdmlmaV0udl9yc3ZwZCA9PSBOVUxMKQorCSAgICBlbHNlIGlmIChWX3Jz
dnBkZWJ1ZyAmJiBWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQgPT0gTlVMTCkKIAkJcHJpbnRmKCJy
c3ZwX2lucHV0OiBObyBzb2NrZXQgZGVmaW5lZCBmb3IgdmlmICVkXG4iLHZpZmkpOwogCSAgICBt
X2ZyZWVtKG0pOwogCX0KQEAgLTE5NTYsMTUgKzIwMzMsMTUgQEAKICAgICB9CiAgICAgcnN2cF9z
cmMuc2luX2FkZHIgPSBpcC0+aXBfc3JjOwogCi0gICAgaWYgKHJzdnBkZWJ1ZyAmJiBtKQorICAg
IGlmIChWX3JzdnBkZWJ1ZyAmJiBtKQogCXByaW50ZigicnN2cF9pbnB1dDogbS0+bV9sZW4gPSAl
ZCwgc2JzcGFjZSgpID0gJWxkXG4iLAotCSAgICAgICBtLT5tX2xlbixzYnNwYWNlKCYodmlmdGFi
bGVbdmlmaV0udl9yc3ZwZC0+c29fcmN2KSkpOworCSAgICAgICBtLT5tX2xlbixzYnNwYWNlKCYo
Vl92aWZ0YWJsZVt2aWZpXS52X3JzdnBkLT5zb19yY3YpKSk7CiAKLSAgICBpZiAoc29ja2V0X3Nl
bmQodmlmdGFibGVbdmlmaV0udl9yc3ZwZCwgbSwgJnJzdnBfc3JjKSA8IDApIHsKLQlpZiAocnN2
cGRlYnVnKQorICAgIGlmIChzb2NrZXRfc2VuZChWX3ZpZnRhYmxlW3ZpZmldLnZfcnN2cGQsIG0s
ICZyc3ZwX3NyYykgPCAwKSB7CisJaWYgKFZfcnN2cGRlYnVnKQogCSAgICBwcmludGYoInJzdnBf
aW5wdXQ6IEZhaWxlZCB0byBhcHBlbmQgdG8gc29ja2V0XG4iKTsKICAgICB9IGVsc2UgewotCWlm
IChyc3ZwZGVidWcpCisJaWYgKFZfcnN2cGRlYnVnKQogCSAgICBwcmludGYoInJzdnBfaW5wdXQ6
IHNlbmQgcGFja2V0IHVwXG4iKTsKICAgICB9CiAgICAgVklGX1VOTE9DSygpOwpAQCAtMjAwNCw2
ICsyMDgxLDcgQEAKIHN0YXRpYyBpbnQKIGFkZF9id191cGNhbGwoc3RydWN0IGJ3X3VwY2FsbCAq
cmVxKQogeworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3RydWN0IG1mYyAq
bWZjOwogICAgIHN0cnVjdCB0aW1ldmFsIGRlbHRhID0geyBCV19VUENBTExfVEhSRVNIT0xEX0lO
VEVSVkFMX01JTl9TRUMsCiAJCUJXX1VQQ0FMTF9USFJFU0hPTERfSU5URVJWQUxfTUlOX1VTRUMg
fTsKQEAgLTIwMTEsNyArMjA4OSw3IEBACiAgICAgc3RydWN0IGJ3X21ldGVyICp4OwogICAgIHVp
bnQzMl90IGZsYWdzOwogCi0gICAgaWYgKCEobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX0JXX1VQ
Q0FMTCkpCisgICAgaWYgKCEoVl9tcnRfYXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKSkK
IAlyZXR1cm4gRU9QTk9UU1VQUDsKIAogICAgIC8qIFRlc3QgaWYgdGhlIGZsYWdzIGFyZSB2YWxp
ZCAqLwpAQCAtMjA5NiwxMCArMjE3NCwxMSBAQAogc3RhdGljIGludAogZGVsX2J3X3VwY2FsbChz
dHJ1Y3QgYndfdXBjYWxsICpyZXEpCiB7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsK
ICAgICBzdHJ1Y3QgbWZjICptZmM7CiAgICAgc3RydWN0IGJ3X21ldGVyICp4OwogCi0gICAgaWYg
KCEobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX0JXX1VQQ0FMTCkpCisgICAgaWYgKCEoVl9tcnRf
YXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKSkKIAlyZXR1cm4gRU9QTk9UU1VQUDsKIAog
ICAgIE1GQ19MT0NLKCk7CkBAIC0yMjUyLDYgKzIzMzEsNyBAQAogc3RhdGljIHZvaWQKIGJ3X21l
dGVyX3ByZXBhcmVfdXBjYWxsKHN0cnVjdCBid19tZXRlciAqeCwgc3RydWN0IHRpbWV2YWwgKm5v
d3ApCiB7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsKICAgICBzdHJ1Y3QgdGltZXZh
bCBkZWx0YTsKICAgICBzdHJ1Y3QgYndfdXBjYWxsICp1OwogCkBAIC0yMjY2LDEzICsyMzQ2LDEz
IEBACiAgICAgLyoKICAgICAgKiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgcGVuZGluZyB1cGNhbGxz
LCBkZWxpdmVyIHRoZW0gbm93CiAgICAgICovCi0gICAgaWYgKGJ3X3VwY2FsbHNfbiA+PSBCV19V
UENBTExTX01BWCkKKyAgICBpZiAoVl9id191cGNhbGxzX24gPj0gQldfVVBDQUxMU19NQVgpCiAJ
YndfdXBjYWxsc19zZW5kKCk7CiAKICAgICAvKgogICAgICAqIFNldCB0aGUgYndfdXBjYWxsIGVu
dHJ5CiAgICAgICovCi0gICAgdSA9ICZid191cGNhbGxzW2J3X3VwY2FsbHNfbisrXTsKKyAgICB1
ID0gJlZfYndfdXBjYWxsc1tWX2J3X3VwY2FsbHNfbisrXTsKICAgICB1LT5idV9zcmMgPSB4LT5i
bV9tZmMtPm1mY19vcmlnaW47CiAgICAgdS0+YnVfZHN0ID0geC0+Ym1fbWZjLT5tZmNfbWNhc3Rn
cnA7CiAgICAgdS0+YnVfdGhyZXNob2xkLmJfdGltZSA9IHgtPmJtX3RocmVzaG9sZC5iX3RpbWU7
CkBAIC0yMjk5LDggKzIzNzksOSBAQAogYndfdXBjYWxsc19zZW5kKHZvaWQpCiB7CiAgICAgSU5J
VF9WTkVUX0lORVQoY3Vydm5ldCk7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsKICAg
ICBzdHJ1Y3QgbWJ1ZiAqbTsKLSAgICBpbnQgbGVuID0gYndfdXBjYWxsc19uICogc2l6ZW9mKGJ3
X3VwY2FsbHNbMF0pOworICAgIGludCBsZW4gPSBWX2J3X3VwY2FsbHNfbiAqIHNpemVvZihWX2J3
X3VwY2FsbHNbMF0pOwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBrX2lnbXBzcmMgPSB7IHNpemVv
ZiBrX2lnbXBzcmMsIEFGX0lORVQgfTsKICAgICBzdGF0aWMgc3RydWN0IGlnbXBtc2cgaWdtcG1z
ZyA9IHsgMCwJCS8qIHVudXNlZDEgKi8KIAkJCQkgICAgICAwLAkJLyogdW51c2VkMiAqLwpAQCAt
MjMxMywxMCArMjM5NCwxMCBAQAogCiAgICAgTUZDX0xPQ0tfQVNTRVJUKCk7CiAKLSAgICBpZiAo
YndfdXBjYWxsc19uID09IDApCisgICAgaWYgKFZfYndfdXBjYWxsc19uID09IDApCiAJcmV0dXJu
OwkJCS8qIE5vIHBlbmRpbmcgdXBjYWxscyAqLwogCi0gICAgYndfdXBjYWxsc19uID0gMDsKKyAg
ICBWX2J3X3VwY2FsbHNfbiA9IDA7CiAKICAgICAvKgogICAgICAqIEFsbG9jYXRlIGEgbmV3IG1i
dWYsIGluaXRpYWxpemUgaXQgd2l0aCB0aGUgaGVhZGVyIGFuZApAQCAtMjMzMCwxNiArMjQxMSwx
NiBAQAogCiAgICAgbS0+bV9sZW4gPSBtLT5tX3BrdGhkci5sZW4gPSAwOwogICAgIG1fY29weWJh
Y2sobSwgMCwgc2l6ZW9mKHN0cnVjdCBpZ21wbXNnKSwgKGNhZGRyX3QpJmlnbXBtc2cpOwotICAg
IG1fY29weWJhY2sobSwgc2l6ZW9mKHN0cnVjdCBpZ21wbXNnKSwgbGVuLCAoY2FkZHJfdCkmYndf
dXBjYWxsc1swXSk7CisgICAgbV9jb3B5YmFjayhtLCBzaXplb2Yoc3RydWN0IGlnbXBtc2cpLCBs
ZW4sIChjYWRkcl90KSZWX2J3X3VwY2FsbHNbMF0pOwogCiAgICAgLyoKICAgICAgKiBTZW5kIHRo
ZSB1cGNhbGxzCiAgICAgICogWFhYIGRvIHdlIG5lZWQgdG8gc2V0IHRoZSBhZGRyZXNzIGluIGtf
aWdtcHNyYyA/CiAgICAgICovCi0gICAgbXJ0c3RhdC5tcnRzX3VwY2FsbHMrKzsKKyAgICBWX21y
dHN0YXQubXJ0c191cGNhbGxzKys7CiAgICAgaWYgKHNvY2tldF9zZW5kKFZfaXBfbXJvdXRlciwg
bSwgJmtfaWdtcHNyYykgPCAwKSB7CiAJbG9nKExPR19XQVJOSU5HLCAiYndfdXBjYWxsc19zZW5k
OiBpcF9tcm91dGVyIHNvY2tldCBxdWV1ZSBmdWxsXG4iKTsKLQkrK21ydHN0YXQubXJ0c191cHFf
c29ja2Z1bGw7CisJKytWX21ydHN0YXQubXJ0c191cHFfc29ja2Z1bGw7CiAgICAgfQogfQogCkBA
IC0yMzY0LDYgKzI0NDUsNyBAQAogc3RhdGljIHZvaWQKIHNjaGVkdWxlX2J3X21ldGVyKHN0cnVj
dCBid19tZXRlciAqeCwgc3RydWN0IHRpbWV2YWwgKm5vd3ApCiB7CisgICAgSU5JVF9WTkVUX01S
T1VURShjdXJ2bmV0KTsKICAgICBpbnQgdGltZV9oYXNoOwogCiAgICAgTUZDX0xPQ0tfQVNTRVJU
KCk7CkBAIC0yMzgzLDggKzI0NjUsOCBAQAogICAgICAqIENvbXB1dGUgdGhlIHRpbWVvdXQgaGFz
aCB2YWx1ZSBhbmQgaW5zZXJ0IHRoZSBlbnRyeQogICAgICAqLwogICAgIEJXX01FVEVSX1RJTUVI
QVNIKHgsIHRpbWVfaGFzaCk7Ci0gICAgeC0+Ym1fdGltZV9uZXh0ID0gYndfbWV0ZXJfdGltZXJz
W3RpbWVfaGFzaF07Ci0gICAgYndfbWV0ZXJfdGltZXJzW3RpbWVfaGFzaF0gPSB4OworICAgIHgt
PmJtX3RpbWVfbmV4dCA9IFZfYndfbWV0ZXJfdGltZXJzW3RpbWVfaGFzaF07CisgICAgVl9id19t
ZXRlcl90aW1lcnNbdGltZV9oYXNoXSA9IHg7CiAgICAgeC0+Ym1fdGltZV9oYXNoID0gdGltZV9o
YXNoOwogfQogCkBAIC0yMzk1LDYgKzI0NzcsNyBAQAogc3RhdGljIHZvaWQKIHVuc2NoZWR1bGVf
YndfbWV0ZXIoc3RydWN0IGJ3X21ldGVyICp4KQogeworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vy
dm5ldCk7CiAgICAgaW50IHRpbWVfaGFzaDsKICAgICBzdHJ1Y3QgYndfbWV0ZXIgKnByZXYsICp0
bXA7CiAKQEAgLTI0MTAsNyArMjQ5Myw3IEBACiAgICAgaWYgKHRpbWVfaGFzaCA+PSBCV19NRVRF
Ul9CVUNLRVRTKQogCXJldHVybjsJCS8qIEVudHJ5IHdhcyBub3Qgc2NoZWR1bGVkICovCiAKLSAg
ICBmb3IgKHByZXYgPSBOVUxMLCB0bXAgPSBid19tZXRlcl90aW1lcnNbdGltZV9oYXNoXTsKKyAg
ICBmb3IgKHByZXYgPSBOVUxMLCB0bXAgPSBWX2J3X21ldGVyX3RpbWVyc1t0aW1lX2hhc2hdOwog
CSAgICAgdG1wICE9IE5VTEw7IHByZXYgPSB0bXAsIHRtcCA9IHRtcC0+Ym1fdGltZV9uZXh0KQog
CWlmICh0bXAgPT0geCkKIAkgICAgYnJlYWs7CkBAIC0yNDIxLDcgKzI1MDQsNyBAQAogICAgIGlm
IChwcmV2ICE9IE5VTEwpCiAJcHJldi0+Ym1fdGltZV9uZXh0ID0geC0+Ym1fdGltZV9uZXh0Owog
ICAgIGVsc2UKLQlid19tZXRlcl90aW1lcnNbdGltZV9oYXNoXSA9IHgtPmJtX3RpbWVfbmV4dDsK
KwlWX2J3X21ldGVyX3RpbWVyc1t0aW1lX2hhc2hdID0geC0+Ym1fdGltZV9uZXh0OwogCiAgICAg
eC0+Ym1fdGltZV9uZXh0ID0gTlVMTDsKICAgICB4LT5ibV90aW1lX2hhc2ggPSBCV19NRVRFUl9C
VUNLRVRTOwpAQCAtMjQzOCw4ICsyNTIxLDkgQEAKICAqIGxvb2tpbmcgYXQuCiAgKi8KIHN0YXRp
YyB2b2lkCi1id19tZXRlcl9wcm9jZXNzKCkKK2J3X21ldGVyX3Byb2Nlc3Moc3RydWN0IHZuZXQg
KnZuZXQpCiB7CisgICAgSU5JVF9WTkVUX01ST1VURSh2bmV0KTsKICAgICBzdGF0aWMgdWludDMy
X3QgbGFzdF90dl9zZWM7CS8qIGxhc3QgdGltZSB3ZSBwcm9jZXNzZWQgdGhpcyAqLwogCiAgICAg
dWludDMyX3QgbG9vcHM7CkBAIC0yNDU2LDYgKzI1NDAsNyBAQAogCWxvb3BzID0gQldfTUVURVJf
QlVDS0VUUzsKIAogICAgIE1GQ19MT0NLKCk7CisgICAgQ1VSVk5FVF9TRVQodm5ldCk7CiAgICAg
LyoKICAgICAgKiBQcm9jZXNzIGFsbCBiaW5zIG9mIGJ3X21ldGVyIGVudHJpZXMgZnJvbSB0aGUg
b25lIGFmdGVyIHRoZSBsYXN0CiAgICAgICogcHJvY2Vzc2VkIHRvIHRoZSBjdXJyZW50IG9uZS4g
T24gZW50cnksIGkgcG9pbnRzIHRvIHRoZSBsYXN0IGJ1Y2tldApAQCAtMjQ2OCw4ICsyNTUzLDgg
QEAKIAkgICAgaSA9IDA7CiAKIAkvKiBEaXNjb25uZWN0IHRoZSBsaXN0IG9mIGJ3X21ldGVyIGVu
dHJpZXMgZnJvbSB0aGUgYmluICovCi0JdG1wX2xpc3QgPSBid19tZXRlcl90aW1lcnNbaV07Ci0J
YndfbWV0ZXJfdGltZXJzW2ldID0gTlVMTDsKKwl0bXBfbGlzdCA9IFZfYndfbWV0ZXJfdGltZXJz
W2ldOworCVZfYndfbWV0ZXJfdGltZXJzW2ldID0gTlVMTDsKIAogCS8qIFByb2Nlc3MgdGhlIGxp
c3Qgb2YgYndfbWV0ZXIgZW50cmllcyAqLwogCXdoaWxlICh0bXBfbGlzdCAhPSBOVUxMKSB7CkBA
IC0yNDkyLDggKzI1NzcsOCBAQAogCQkgICAgaWYgKCsrdGltZV9oYXNoID49IEJXX01FVEVSX0JV
Q0tFVFMpCiAJCQl0aW1lX2hhc2ggPSAwOwogCQl9Ci0JCXgtPmJtX3RpbWVfbmV4dCA9IGJ3X21l
dGVyX3RpbWVyc1t0aW1lX2hhc2hdOwotCQlid19tZXRlcl90aW1lcnNbdGltZV9oYXNoXSA9IHg7
CisJCXgtPmJtX3RpbWVfbmV4dCA9IFZfYndfbWV0ZXJfdGltZXJzW3RpbWVfaGFzaF07CisJCVZf
YndfbWV0ZXJfdGltZXJzW3RpbWVfaGFzaF0gPSB4OwogCQl4LT5ibV90aW1lX2hhc2ggPSB0aW1l
X2hhc2g7CiAKIAkJY29udGludWU7CkBAIC0yNTIwLDYgKzI2MDUsNyBAQAogICAgIC8qIFNlbmQg
YWxsIHVwY2FsbHMgdGhhdCBhcmUgcGVuZGluZyBkZWxpdmVyeSAqLwogICAgIGJ3X3VwY2FsbHNf
c2VuZCgpOwogCisgICAgQ1VSVk5FVF9SRVNUT1JFKCk7CiAgICAgTUZDX1VOTE9DSygpOwogfQog
CkBAIC0yNTI5LDEyICsyNjE1LDE0IEBACiBzdGF0aWMgdm9pZAogZXhwaXJlX2J3X3VwY2FsbHNf
c2VuZCh2b2lkICp1bnVzZWQpCiB7CisgICAgSU5JVF9WTkVUX01ST1VURSggKHN0cnVjdCB2bmV0
ICopdW51c2VkICk7CiAgICAgTUZDX0xPQ0soKTsKKyAgICBDVVJWTkVUX1NFVCggKHN0cnVjdCB2
bmV0Kil1bnVzZWQgKTsKICAgICBid191cGNhbGxzX3NlbmQoKTsKKyAgICBjYWxsb3V0X3Jlc2V0
KCZWX2J3X3VwY2FsbHNfY2gsIEJXX1VQQ0FMTFNfUEVSSU9ELAorCWV4cGlyZV9id191cGNhbGxz
X3NlbmQsIHVudXNlZCk7CisgICAgQ1VSVk5FVF9SRVNUT1JFKCk7CiAgICAgTUZDX1VOTE9DSygp
OwotCi0gICAgY2FsbG91dF9yZXNldCgmYndfdXBjYWxsc19jaCwgQldfVVBDQUxMU19QRVJJT0Qs
Ci0JZXhwaXJlX2J3X3VwY2FsbHNfc2VuZCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0yNTQ0LDEwICsy
NjMyLDEyIEBACiBzdGF0aWMgdm9pZAogZXhwaXJlX2J3X21ldGVyX3Byb2Nlc3Modm9pZCAqdW51
c2VkKQogewotICAgIGlmIChtcnRfYXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKQotCWJ3
X21ldGVyX3Byb2Nlc3MoKTsKKyAgICBJTklUX1ZORVRfTVJPVVRFKCAoc3RydWN0IHZuZXQgKil1
bnVzZWQgKTsKKyAgICBpZiAoVl9tcnRfYXBpX2NvbmZpZyAmIE1SVF9NRkNfQldfVVBDQUxMKQor
CWJ3X21ldGVyX3Byb2Nlc3MoIChzdHJ1Y3Qgdm5ldCAqKXVudXNlZCApOwogCi0gICAgY2FsbG91
dF9yZXNldCgmYndfbWV0ZXJfY2gsIEJXX01FVEVSX1BFUklPRCwgZXhwaXJlX2J3X21ldGVyX3By
b2Nlc3MsIE5VTEwpOworICAgIGNhbGxvdXRfcmVzZXQoJlZfYndfbWV0ZXJfY2gsIEJXX01FVEVS
X1BFUklPRCwKKwlleHBpcmVfYndfbWV0ZXJfcHJvY2VzcywgdW51c2VkKTsKIH0KIAogLyoKQEAg
LTI1NjIsMTYgKzI2NTIsMTcgQEAKIHBpbV9yZWdpc3Rlcl9zZW5kKHN0cnVjdCBpcCAqaXAsIHN0
cnVjdCB2aWYgKnZpZnAsIHN0cnVjdCBtYnVmICptLAogICAgIHN0cnVjdCBtZmMgKnJ0KQogewor
ICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3RydWN0IG1idWYgKm1iX2NvcHks
ICptbTsKIAotICAgIGlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKyAgICBpZiAoVl9tcnRkZWJ1
ZyAmIERFQlVHX1BJTSkKIAlsb2coTE9HX0RFQlVHLCAicGltX3JlZ2lzdGVyX3NlbmQ6ICIpOwog
CiAgICAgLyoKICAgICAgKiBEbyBub3Qgc2VuZCBJR01QX1dIT0xFUEtUIG5vdGlmaWNhdGlvbnMg
dG8gdXNlcmxhbmQsIGlmIHRoZQogICAgICAqIHJlbmRlenZvdXMgcG9pbnQgd2FzIHVuc3BlY2lm
aWVkLCBhbmQgd2Ugd2VyZSB0b2xkIG5vdCB0by4KICAgICAgKi8KLSAgICBpZiAocGltX3NxdWVs
Y2hfd2hvbGVwa3QgIT0gMCAmJiAobXJ0X2FwaV9jb25maWcgJiBNUlRfTUZDX1JQKSAmJgorICAg
IGlmIChwaW1fc3F1ZWxjaF93aG9sZXBrdCAhPSAwICYmIChWX21ydF9hcGlfY29uZmlnICYgTVJU
X01GQ19SUCkgJiYKIAkocnQtPm1mY19ycC5zX2FkZHIgPT0gSU5BRERSX0FOWSkpCiAJcmV0dXJu
IDA7CiAKQEAgLTI1ODksNyArMjY4MCw3IEBACiAJbW0gPSBtX3B1bGx1cChtbSwgc2l6ZW9mKHN0
cnVjdCBpcCkpOwogCWlmIChtbSAhPSBOVUxMKSB7CiAJICAgIGlwID0gbXRvZChtbSwgc3RydWN0
IGlwICopOwotCSAgICBpZiAoKG1ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkgJiYKKwkgICAg
aWYgKChWX21ydF9hcGlfY29uZmlnICYgTVJUX01GQ19SUCkgJiYKIAkJKHJ0LT5tZmNfcnAuc19h
ZGRyICE9IElOQUREUl9BTlkpKSB7CiAJCXBpbV9yZWdpc3Rlcl9zZW5kX3JwKGlwLCB2aWZwLCBt
bSwgcnQpOwogCSAgICB9IGVsc2UgewpAQCAtMjY2MCw2ICsyNzUxLDcgQEAKICAgICBzdHJ1Y3Qg
bWJ1ZiAqbWJfY29weSwgc3RydWN0IG1mYyAqcnQpCiB7CiAgICAgSU5JVF9WTkVUX0lORVQoY3Vy
dm5ldCk7CisgICAgSU5JVF9WTkVUX01ST1VURShjdXJ2bmV0KTsKICAgICBzdHJ1Y3QgbWJ1ZiAq
bWJfZmlyc3Q7CiAgICAgaW50IGxlbiA9IG50b2hzKGlwLT5pcF9sZW4pOwogICAgIHN0cnVjdCBp
Z21wbXNnICppbTsKQEAgLTI2ODQsMjUgKzI3NzYsMjUgQEAKICAgICBpbSA9IG10b2QobWJfZmly
c3QsIHN0cnVjdCBpZ21wbXNnICopOwogICAgIGltLT5pbV9tc2d0eXBlCT0gSUdNUE1TR19XSE9M
RVBLVDsKICAgICBpbS0+aW1fbWJ6CQk9IDA7Ci0gICAgaW0tPmltX3ZpZgkJPSB2aWZwIC0gdmlm
dGFibGU7CisgICAgaW0tPmltX3ZpZgkJPSB2aWZwIC0gVl92aWZ0YWJsZTsKICAgICBpbS0+aW1f
c3JjCQk9IGlwLT5pcF9zcmM7CiAgICAgaW0tPmltX2RzdAkJPSBpcC0+aXBfZHN0OwogCiAgICAg
a19pZ21wc3JjLnNpbl9hZGRyCT0gaXAtPmlwX3NyYzsKIAotICAgIG1ydHN0YXQubXJ0c191cGNh
bGxzKys7CisgICAgVl9tcnRzdGF0Lm1ydHNfdXBjYWxscysrOwogCiAgICAgaWYgKHNvY2tldF9z
ZW5kKFZfaXBfbXJvdXRlciwgbWJfZmlyc3QsICZrX2lnbXBzcmMpIDwgMCkgewotCWlmIChtcnRk
ZWJ1ZyAmIERFQlVHX1BJTSkKKwlpZiAoVl9tcnRkZWJ1ZyAmIERFQlVHX1BJTSkKIAkgICAgbG9n
KExPR19XQVJOSU5HLAogCQkibWNhc3Q6IHBpbV9yZWdpc3Rlcl9zZW5kX3VwY2FsbDogaXBfbXJv
dXRlciBzb2NrZXQgcXVldWUgZnVsbCIpOwotCSsrbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVsbDsK
KwkrK1ZfbXJ0c3RhdC5tcnRzX3VwcV9zb2NrZnVsbDsKIAlyZXR1cm4gRU5PQlVGUzsKICAgICB9
CiAKICAgICAvKiBLZWVwIHN0YXRpc3RpY3MgKi8KLSAgICBwaW1zdGF0LnBpbXNfc25kX3JlZ2lz
dGVyc19tc2dzKys7Ci0gICAgcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfYnl0ZXMgKz0gbGVu
OworICAgIFZfcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfbXNncysrOworICAgIFZfcGltc3Rh
dC5waW1zX3NuZF9yZWdpc3RlcnNfYnl0ZXMgKz0gbGVuOwogCiAgICAgcmV0dXJuIDA7CiB9CkBA
IC0yNzE1LDYgKzI4MDcsNyBAQAogICAgIHN0cnVjdCBtZmMgKnJ0KQogewogICAgIElOSVRfVk5F
VF9JTkVUKGN1cnZuZXQpOworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3Ry
dWN0IG1idWYgKm1iX2ZpcnN0OwogICAgIHN0cnVjdCBpcCAqaXBfb3V0ZXI7CiAgICAgc3RydWN0
IHBpbV9lbmNhcF9waW1oZHIgKnBpbWhkcjsKQEAgLTI3MjMsNyArMjgxNiw3IEBACiAKICAgICBW
SUZfTE9DS19BU1NFUlQoKTsKIAotICAgIGlmICgodmlmaSA+PSBudW12aWZzKSB8fCAodmlmdGFi
bGVbdmlmaV0udl9sY2xfYWRkci5zX2FkZHIgPT0gMCkpIHsKKyAgICBpZiAoKHZpZmkgPj0gVl9u
dW12aWZzKSB8fCAoVl92aWZ0YWJsZVt2aWZpXS52X2xjbF9hZGRyLnNfYWRkciA9PSAwKSkgewog
CW1fZnJlZW0obWJfY29weSk7CiAJcmV0dXJuIEVBRERSTk9UQVZBSUw7CQkvKiBUaGUgaWlmIHZp
ZiBpcyBpbnZhbGlkICovCiAgICAgfQpAQCAtMjc0OSw3ICsyODQyLDcgQEAKICAgICAqaXBfb3V0
ZXIgPSBwaW1fZW5jYXBfaXBoZHI7CiAgICAgaXBfb3V0ZXItPmlwX2lkID0gaXBfbmV3aWQoKTsK
ICAgICBpcF9vdXRlci0+aXBfbGVuID0gbGVuICsgc2l6ZW9mKHBpbV9lbmNhcF9pcGhkcikgKyBz
aXplb2YocGltX2VuY2FwX3BpbWhkcik7Ci0gICAgaXBfb3V0ZXItPmlwX3NyYyA9IHZpZnRhYmxl
W3ZpZmldLnZfbGNsX2FkZHI7CisgICAgaXBfb3V0ZXItPmlwX3NyYyA9IFZfdmlmdGFibGVbdmlm
aV0udl9sY2xfYWRkcjsKICAgICBpcF9vdXRlci0+aXBfZHN0ID0gcnQtPm1mY19ycDsKICAgICAv
KgogICAgICAqIENvcHkgdGhlIGlubmVyIGhlYWRlciBUT1MgdG8gdGhlIG91dGVyIGhlYWRlciwg
YW5kIHRha2UgY2FyZSBvZiB0aGUKQEAgLTI3NjIsNyArMjg1NSw3IEBACiAJCQkJCSArIHNpemVv
ZihwaW1fZW5jYXBfaXBoZHIpKTsKICAgICAqcGltaGRyID0gcGltX2VuY2FwX3BpbWhkcjsKICAg
ICAvKiBJZiB0aGUgaWlmIGNyb3NzZXMgYSBib3JkZXIsIHNldCB0aGUgQm9yZGVyLWJpdCAqLwot
ICAgIGlmIChydC0+bWZjX2ZsYWdzW3ZpZmldICYgTVJUX01GQ19GTEFHU19CT1JERVJfVklGICYg
bXJ0X2FwaV9jb25maWcpCisgICAgaWYgKHJ0LT5tZmNfZmxhZ3NbdmlmaV0gJiBNUlRfTUZDX0ZM
QUdTX0JPUkRFUl9WSUYgJiBWX21ydF9hcGlfY29uZmlnKQogCXBpbWhkci0+ZmxhZ3MgfD0gaHRv
bmwoUElNX0JPUkRFUl9SRUdJU1RFUik7CiAKICAgICBtYl9maXJzdC0+bV9kYXRhICs9IHNpemVv
ZihwaW1fZW5jYXBfaXBoZHIpOwpAQCAtMjc3Miw4ICsyODY1LDggQEAKICAgICBzZW5kX3BhY2tl
dCh2aWZwLCBtYl9maXJzdCk7CiAKICAgICAvKiBLZWVwIHN0YXRpc3RpY3MgKi8KLSAgICBwaW1z
dGF0LnBpbXNfc25kX3JlZ2lzdGVyc19tc2dzKys7Ci0gICAgcGltc3RhdC5waW1zX3NuZF9yZWdp
c3RlcnNfYnl0ZXMgKz0gbGVuOworICAgIFZfcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfbXNn
cysrOworICAgIFZfcGltc3RhdC5waW1zX3NuZF9yZWdpc3RlcnNfYnl0ZXMgKz0gbGVuOwogCiAg
ICAgcmV0dXJuIDA7CiB9CkBAIC0yODA3LDYgKzI5MDAsNyBAQAogdm9pZAogcGltX2lucHV0KHN0
cnVjdCBtYnVmICptLCBpbnQgb2ZmKQogeworICAgIElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7
CiAgICAgc3RydWN0IGlwICppcCA9IG10b2QobSwgc3RydWN0IGlwICopOwogICAgIHN0cnVjdCBw
aW0gKnBpbTsKICAgICBpbnQgbWlubGVuOwpAQCAtMjgxNSwxNCArMjkwOSwxNCBAQAogICAgIGlu
dCBpcGhsZW4gPSBvZmY7CiAKICAgICAvKiBLZWVwIHN0YXRpc3RpY3MgKi8KLSAgICBwaW1zdGF0
LnBpbXNfcmN2X3RvdGFsX21zZ3MrKzsKLSAgICBwaW1zdGF0LnBpbXNfcmN2X3RvdGFsX2J5dGVz
ICs9IGRhdGFsZW47CisgICAgVl9waW1zdGF0LnBpbXNfcmN2X3RvdGFsX21zZ3MrKzsKKyAgICBW
X3BpbXN0YXQucGltc19yY3ZfdG90YWxfYnl0ZXMgKz0gZGF0YWxlbjsKIAogICAgIC8qCiAgICAg
ICogVmFsaWRhdGUgbGVuZ3RocwogICAgICAqLwogICAgIGlmIChkYXRhbGVuIDwgUElNX01JTkxF
TikgewotCXBpbXN0YXQucGltc19yY3ZfdG9vc2hvcnQrKzsKKwlWX3BpbXN0YXQucGltc19yY3Zf
dG9vc2hvcnQrKzsKIAlsb2coTE9HX0VSUiwgInBpbV9pbnB1dDogcGFja2V0IHNpemUgdG9vIHNt
YWxsICVkIGZyb20gJWx4XG4iLAogCSAgICBkYXRhbGVuLCAodV9sb25nKWlwLT5pcF9zcmMuc19h
ZGRyKTsKIAltX2ZyZWVtKG0pOwpAQCAtMjg2Niw4ICsyOTYwLDggQEAKICAgICBpZiAoUElNX1ZU
X1QocGltLT5waW1fdnQpID09IFBJTV9SRUdJU1RFUiAmJiBpbl9ja3N1bShtLCBQSU1fTUlOTEVO
KSA9PSAwKSB7CiAJLyogZG8gbm90aGluZywgY2hlY2tzdW0gb2theSAqLwogICAgIH0gZWxzZSBp
ZiAoaW5fY2tzdW0obSwgZGF0YWxlbikpIHsKLQlwaW1zdGF0LnBpbXNfcmN2X2JhZHN1bSsrOwot
CWlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKwlWX3BpbXN0YXQucGltc19yY3ZfYmFkc3VtKys7
CisJaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19QSU0pCiAJICAgIGxvZyhMT0dfREVCVUcsICJwaW1f
aW5wdXQ6IGludmFsaWQgY2hlY2tzdW0iKTsKIAltX2ZyZWVtKG0pOwogCXJldHVybjsKQEAgLTI4
NzUsNyArMjk2OSw3IEBACiAKICAgICAvKiBQSU0gdmVyc2lvbiBjaGVjayAqLwogICAgIGlmIChQ
SU1fVlRfVihwaW0tPnBpbV92dCkgPCBQSU1fVkVSU0lPTikgewotCXBpbXN0YXQucGltc19yY3Zf
YmFkdmVyc2lvbisrOworCVZfcGltc3RhdC5waW1zX3Jjdl9iYWR2ZXJzaW9uKys7CiAJbG9nKExP
R19FUlIsICJwaW1faW5wdXQ6IGluY29ycmVjdCB2ZXJzaW9uICVkLCBleHBlY3RpbmcgJWRcbiIs
CiAJICAgIFBJTV9WVF9WKHBpbS0+cGltX3Z0KSwgUElNX1ZFUlNJT04pOwogCW1fZnJlZW0obSk7
CkBAIC0yODk5LDI0ICsyOTkzLDI0IEBACiAJc3RydWN0IGlmbmV0ICp2aWZwOwogCiAJVklGX0xP
Q0soKTsKLQlpZiAoKHJlZ192aWZfbnVtID49IG51bXZpZnMpIHx8IChyZWdfdmlmX251bSA9PSBW
SUZJX0lOVkFMSUQpKSB7CisJaWYgKChWX3JlZ192aWZfbnVtID49IFZfbnVtdmlmcykgfHwgKFZf
cmVnX3ZpZl9udW0gPT0gVklGSV9JTlZBTElEKSkgewogCSAgICBWSUZfVU5MT0NLKCk7Ci0JICAg
IGlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKwkgICAgaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19Q
SU0pCiAJCWxvZyhMT0dfREVCVUcsCi0JCSAgICAicGltX2lucHV0OiByZWdpc3RlciB2aWYgbm90
IHNldDogJWRcbiIsIHJlZ192aWZfbnVtKTsKKwkJICAgICJwaW1faW5wdXQ6IHJlZ2lzdGVyIHZp
ZiBub3Qgc2V0OiAlZFxuIiwgVl9yZWdfdmlmX251bSk7CiAJICAgIG1fZnJlZW0obSk7CiAJICAg
IHJldHVybjsKIAl9CiAJLyogWFhYIG5lZWQgcmVmY250PyAqLwotCXZpZnAgPSB2aWZ0YWJsZVty
ZWdfdmlmX251bV0udl9pZnA7CisJdmlmcCA9IFZfdmlmdGFibGVbVl9yZWdfdmlmX251bV0udl9p
ZnA7CiAJVklGX1VOTE9DSygpOwogCiAJLyoKIAkgKiBWYWxpZGF0ZSBsZW5ndGgKIAkgKi8KIAlp
ZiAoZGF0YWxlbiA8IFBJTV9SRUdfTUlOTEVOKSB7Ci0JICAgIHBpbXN0YXQucGltc19yY3ZfdG9v
c2hvcnQrKzsKLQkgICAgcGltc3RhdC5waW1zX3Jjdl9iYWRyZWdpc3RlcnMrKzsKKwkgICAgVl9w
aW1zdGF0LnBpbXNfcmN2X3Rvb3Nob3J0Kys7CisJICAgIFZfcGltc3RhdC5waW1zX3Jjdl9iYWRy
ZWdpc3RlcnMrKzsKIAkgICAgbG9nKExPR19FUlIsCiAJCSJwaW1faW5wdXQ6IHJlZ2lzdGVyIHBh
Y2tldCBzaXplIHRvbyBzbWFsbCAlZCBmcm9tICVseFxuIiwKIAkJZGF0YWxlbiwgKHVfbG9uZylp
cC0+aXBfc3JjLnNfYWRkcik7CkBAIC0yOTI3LDcgKzMwMjEsNyBAQAogCXJlZ2hkciA9ICh1X2lu
dDMyX3QgKikocGltICsgMSk7CiAJZW5jYXBfaXAgPSAoc3RydWN0IGlwICopKHJlZ2hkciArIDEp
OwogCi0JaWYgKG1ydGRlYnVnICYgREVCVUdfUElNKSB7CisJaWYgKFZfbXJ0ZGVidWcgJiBERUJV
R19QSU0pIHsKIAkgICAgbG9nKExPR19ERUJVRywKIAkJInBpbV9pbnB1dFtyZWdpc3Rlcl0sIGVu
Y2FwX2lwOiAlbHggLT4gJWx4LCBlbmNhcF9pcCBsZW4gJWRcbiIsCiAJCSh1X2xvbmcpbnRvaGwo
ZW5jYXBfaXAtPmlwX3NyYy5zX2FkZHIpLApAQCAtMjkzNyw4ICszMDMxLDggQEAKIAogCS8qIHZl
cmlmeSB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGlubmVyIHBhY2tldCAqLwogCWlmIChlbmNh
cF9pcC0+aXBfdiAhPSBJUFZFUlNJT04pIHsKLQkgICAgcGltc3RhdC5waW1zX3Jjdl9iYWRyZWdp
c3RlcnMrKzsKLQkgICAgaWYgKG1ydGRlYnVnICYgREVCVUdfUElNKSB7CisJICAgIFZfcGltc3Rh
dC5waW1zX3Jjdl9iYWRyZWdpc3RlcnMrKzsKKwkgICAgaWYgKFZfbXJ0ZGVidWcgJiBERUJVR19Q
SU0pIHsKIAkJbG9nKExPR19ERUJVRywgInBpbV9pbnB1dDogaW52YWxpZCBJUCB2ZXJzaW9uICgl
ZCkgIgogCQkgICAgIm9mIHRoZSBpbm5lciBwYWNrZXRcbiIsIGVuY2FwX2lwLT5pcF92KTsKIAkg
ICAgfQpAQCAtMjk0OCw4ICszMDQyLDggQEAKIAogCS8qIHZlcmlmeSB0aGUgaW5uZXIgcGFja2V0
IGlzIGRlc3RpbmVkIHRvIGEgbWNhc3QgZ3JvdXAgKi8KIAlpZiAoIUlOX01VTFRJQ0FTVChudG9o
bChlbmNhcF9pcC0+aXBfZHN0LnNfYWRkcikpKSB7Ci0JICAgIHBpbXN0YXQucGltc19yY3ZfYmFk
cmVnaXN0ZXJzKys7Ci0JICAgIGlmIChtcnRkZWJ1ZyAmIERFQlVHX1BJTSkKKwkgICAgVl9waW1z
dGF0LnBpbXNfcmN2X2JhZHJlZ2lzdGVycysrOworCSAgICBpZiAoVl9tcnRkZWJ1ZyAmIERFQlVH
X1BJTSkKIAkJbG9nKExPR19ERUJVRywKIAkJICAgICJwaW1faW5wdXQ6IGlubmVyIHBhY2tldCBv
ZiByZWdpc3RlciBpcyBub3QgIgogCQkgICAgIm11bHRpY2FzdCAlbHhcbiIsCkBAIC0zMDAwLDIx
ICszMDk0LDIxIEBACiAKIAkvKiBLZWVwIHN0YXRpc3RpY3MgKi8KIAkvKiBYWFg6IHJlZ2lzdGVy
c19ieXRlcyBpbmNsdWRlIG9ubHkgdGhlIGVuY2FwLiBtY2FzdCBwa3QgKi8KLQlwaW1zdGF0LnBp
bXNfcmN2X3JlZ2lzdGVyc19tc2dzKys7Ci0JcGltc3RhdC5waW1zX3Jjdl9yZWdpc3RlcnNfYnl0
ZXMgKz0gbnRvaHMoZW5jYXBfaXAtPmlwX2xlbik7CisJVl9waW1zdGF0LnBpbXNfcmN2X3JlZ2lz
dGVyc19tc2dzKys7CisJVl9waW1zdGF0LnBpbXNfcmN2X3JlZ2lzdGVyc19ieXRlcyArPSBudG9o
cyhlbmNhcF9pcC0+aXBfbGVuKTsKIAogCS8qCiAJICogZm9yd2FyZCB0aGUgaW5uZXIgaXAgcGFj
a2V0OyBwb2ludCBtX2RhdGEgYXQgdGhlIGlubmVyIGlwLgogCSAqLwogCW1fYWRqKG0sIGlwaGxl
biArIFBJTV9NSU5MRU4pOwogCi0JaWYgKG1ydGRlYnVnICYgREVCVUdfUElNKSB7CisJaWYgKFZf
bXJ0ZGVidWcgJiBERUJVR19QSU0pIHsKIAkgICAgbG9nKExPR19ERUJVRywKIAkJInBpbV9pbnB1
dDogZm9yd2FyZGluZyBkZWNhcHN1bGF0ZWQgcmVnaXN0ZXI6ICIKIAkJInNyYyAlbHgsIGRzdCAl
bHgsIHZpZiAlZFxuIiwKIAkJKHVfbG9uZyludG9obChlbmNhcF9pcC0+aXBfc3JjLnNfYWRkciks
CiAJCSh1X2xvbmcpbnRvaGwoZW5jYXBfaXAtPmlwX2RzdC5zX2FkZHIpLAotCQlyZWdfdmlmX251
bSk7CisJCVZfcmVnX3ZpZl9udW0pOwogCX0KIAkvKiBOQjogdmlmcCB3YXMgY29sbGVjdGVkIGFi
b3ZlOyBjYW4gaXQgY2hhbmdlIG9uIHVzPyAqLwogCWlmX3NpbWxvb3AodmlmcCwgbSwgZHN0LnNp
bl9mYW1pbHksIDApOwpAQCAtMzAzNyw2ICszMTMxLDQxIEBACiAgICAgcmV0dXJuOwogfQogCisj
aWZkZWYgVklNQUdFCisvKiBpbml0aWFsaXphdGlvbiBmb3IgbXVsdGljYXN0IHJvdXRpbmcgc3Rh
dGUgKi8KK3N0YXRpYyBpbnQKK3ZuZXRfbXJvdXRlX2lhdHRhY2godW51c2VkKQorICAgIGNvbnN0
IHZvaWQgKnVudXNlZDsKK3sKKyAgICBJTklUX1ZORVRfTVJPVVRFKGN1cnZuZXQpOworCisgICAg
Vl9yZWdfdmlmX251bSA9IFZJRklfSU5WQUxJRDsKKyAgICBNUk9VVEVSX0xPQ0tfSU5JVCgpOwor
ICAgIE1GQ19MT0NLX0lOSVQoKTsKKyAgICBWSUZfTE9DS19JTklUKCk7CisgICAgaXBfbXJvdXRl
cl9yZXNldCgpOworICAgIHJldHVybiAwOworfQorCisvKiBkZS1pbml0aWFsaXphdGlvbiBmb3Ig
bXVsdGljYXN0IHJvdXRpbmcgc3RhdGUgKi8KK3N0YXRpYyBpbnQKK3ZuZXRfbXJvdXRlX2lkZXRh
Y2godW51c2VkKQorICAgIGNvbnN0IHZvaWQgKnVudXNlZDsKK3sKKyAgICBJTklUX1ZORVRfTVJP
VVRFKGN1cnZuZXQpOworCisgICAgWF9pcF9tcm91dGVyX2RvbmUoKTsKKyNpZmRlZiBJTkVUNgor
ICAgIFhfaXA2X21yb3V0ZXJfZG9uZSgpOworI2VuZGlmCisKKyAgICBWSUZfTE9DS19ERVNUUk9Z
KCk7CisgICAgTUZDX0xPQ0tfREVTVFJPWSgpOworICAgIE1ST1VURVJfTE9DS19ERVNUUk9ZKCk7
CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogVklNQUdFICovCisKIC8qCiAgKiBYWFg6IFRo
aXMgaXMgY29tbW9uIGNvZGUgZm9yIGRlYWxpbmcgd2l0aCBpbml0aWFsaXphdGlvbiBmb3IgYm90
aAogICogdGhlIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcgcGF0aHMuIEl0IGNv
dWxkIGRvIHdpdGggY2xlYW51cC4KQEAgLTMwNDUsMTIgKzMxNzQsMTUgQEAKIGlwX21yb3V0ZV9t
b2RldmVudChtb2R1bGVfdCBtb2QsIGludCB0eXBlLCB2b2lkICp1bnVzZWQpCiB7CiAgICAgSU5J
VF9WTkVUX0lORVQoY3Vydm5ldCk7CisgICAgSU5JVF9WTkVUX0lORVQ2KGN1cnZuZXQpOworICAg
IElOSVRfVk5FVF9NUk9VVEUoY3Vydm5ldCk7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2Fz
ZSBNT0RfTE9BRDoKLQlNUk9VVEVSX0xPQ0tfSU5JVCgpOwotCU1GQ19MT0NLX0lOSVQoKTsKLQlW
SUZfTE9DS19JTklUKCk7Ci0JaXBfbXJvdXRlcl9yZXNldCgpOworI2lmZGVmIFZJTUFHRQorCXZu
ZXRfbW9kX3JlZ2lzdGVyKCZ2bmV0X21yb3V0ZV9tb2RpbmZvKTsKKyNlbHNlCisJdm5ldF9tcm91
dGVfaWF0dGFjaChOVUxMKTsKKyNlbmRpZgogCVRVTkFCTEVfVUxPTkdfRkVUQ0goIm5ldC5pbmV0
LnBpbS5zcXVlbGNoX3dob2xlcGt0IiwKIAkgICAgJnBpbV9zcXVlbGNoX3dob2xlcGt0KTsKIApA
QCAtMzExMywxNyArMzI0NSwyMSBAQAogCSAqLwogCWlmIChWX2lwX21yb3V0ZXIKICNpZmRlZiBJ
TkVUNgotCSAgICB8fCBpcDZfbXJvdXRlcgorCSAgICB8fCBWX2lwNl9tcm91dGVyCiAjZW5kaWYK
IAkpCiAJICAgIHJldHVybiBFSU5WQUw7CiAKKyNpZmRlZiBWSU1BR0UKKwl2bmV0X21vZF9kZXJl
Z2lzdGVyKCZ2bmV0X21yb3V0ZV9tb2RpbmZvKTsKKyNlbHNlCisJdm5ldF9tcm91dGVfaWRldGFj
aChOVUxMKQorI2VuZGlmCiAjaWZkZWYgSU5FVDYKIAlpZiAocGltNl9lbmNhcF9jb29raWUpIHsK
IAkgICAgZW5jYXBfZGV0YWNoKHBpbTZfZW5jYXBfY29va2llKTsKIAkgICAgcGltNl9lbmNhcF9j
b29raWUgPSBOVUxMOwogCX0KLQlYX2lwNl9tcm91dGVyX2RvbmUoKTsKIAlpcDZfbWZvcndhcmQg
PSBOVUxMOwogCWlwNl9tcm91dGVyX2RvbmUgPSBOVUxMOwogCWlwNl9tcm91dGVyX2dldCA9IE5V
TEw7CkBAIC0zMTM1LDcgKzMyNzEsNiBAQAogCSAgICBlbmNhcF9kZXRhY2gocGltX2VuY2FwX2Nv
b2tpZSk7CiAJICAgIHBpbV9lbmNhcF9jb29raWUgPSBOVUxMOwogCX0KLQlYX2lwX21yb3V0ZXJf
ZG9uZSgpOwogCWlwX21jYXN0X3NyYyA9IE5VTEw7CiAJaXBfbWZvcndhcmQgPSBOVUxMOwogCWlw
X21yb3V0ZXJfZG9uZSA9IE5VTEw7CkBAIC0zMTQ4LDEwICszMjgzLDYgQEAKIAlsZWdhbF92aWZf
bnVtID0gTlVMTDsKIAltcnRfaW9jdGwgPSBOVUxMOwogCXJzdnBfaW5wdXRfcCA9IE5VTEw7Ci0K
LQlWSUZfTE9DS19ERVNUUk9ZKCk7Ci0JTUZDX0xPQ0tfREVTVFJPWSgpOwotCU1ST1VURVJfTE9D
S19ERVNUUk9ZKCk7CiAJYnJlYWs7CiAKICAgICBkZWZhdWx0OgpkaWZmIC11ciBzeXMuMjAwODEw
MTUvbmV0aW5ldC9pcF9tcm91dGUuaCBzeXMvbmV0aW5ldC9pcF9tcm91dGUuaAotLS0gc3lzLjIw
MDgxMDE1L25ldGluZXQvaXBfbXJvdXRlLmgJMjAwOC0wOC0xNiAxNjoyOToxOS4wMDAwMDAwMDAg
LTA3MDAKKysrIHN5cy9uZXRpbmV0L2lwX21yb3V0ZS5oCTIwMDgtMTEtMDUgMTM6MjE6MDguMDAw
MDAwMDAwIC0wODAwCkBAIC01Miw2ICs1MiwxMCBAQAogICogYmFuZHdpZHRoIG1ldGVyaW5nIGFu
ZCBzaWduYWxpbmcuCiAgKi8KIAorI2lmZGVmIFZJTUFHRQorI2luY2x1ZGUgPG5ldGluZXQvcGlt
X3Zhci5oPgkvKiBzdHJ1Y3QgcGltc3RhdCAqLworI2VuZGlmCisKIAogLyoKICAqIE11bHRpY2Fz
dCBSb3V0aW5nIHNldC9nZXRzb2Nrb3B0IGNvbW1hbmRzLgpAQCAtODAsNiArODQsOSBAQAogdHlw
ZWRlZiB1X2xvbmcgdmlmYml0bWFwX3Q7CiB0eXBlZGVmIHVfc2hvcnQgdmlmaV90OwkJLyogdHlw
ZSBvZiBhIHZpZiBpbmRleCAqLwogI2RlZmluZSBBTExfVklGUyAodmlmaV90KS0xCisjaWZkZWYg
VklNQUdFCisjZGVmaW5lCQlWSUZJX0lOVkFMSUQJKCh2aWZpX3QpIC0xKQorI2VuZGlmIC8qIFZJ
TUFHRSAqLwogCiAjZGVmaW5lCVZJRk1fU0VUKG4sIG0pCQkoKG0pIHw9ICgxIDw8IChuKSkpCiAj
ZGVmaW5lCVZJRk1fQ0xSKG4sIG0pCQkoKG0pICY9IH4oMSA8PCAobikpKQpAQCAtMjA1LDYgKzIx
MiwxMCBAQAogI2RlZmluZSBCV19VUENBTExfVEhSRVNIT0xEX0lOVEVSVkFMX01JTl9TRUMJMwog
I2RlZmluZSBCV19VUENBTExfVEhSRVNIT0xEX0lOVEVSVkFMX01JTl9VU0VDCTAKIAorI2lmZGVm
IFZJTUFHRQorI2RlZmluZSBCV19NRVRFUl9CVUNLRVRTCTEwMjQKKyNlbmRpZiAvKiBWSU1BR0Ug
Ki8KKwogLyoKICAqIFRoZSBrZXJuZWwncyBtdWx0aWNhc3Qgcm91dGluZyBzdGF0aXN0aWNzLgog
ICovCkBAIC0zNjEsNiArMzcyLDYyIEBACiBleHRlcm4gaW50CSgqaXBfbXJvdXRlcl9kb25lKSh2
b2lkKTsKIGV4dGVybiBpbnQJKCptcnRfaW9jdGwpKGludCwgY2FkZHJfdCwgaW50KTsKIAorI2lm
ZGVmIFZJTUFHRQorc3RydWN0IHZuZXRfbXJvdXRlIHsKKwkvKiBmcm9tIGlwX21yb3V0ZS5jICov
CisJdV9pbnQJX3JzdnBkZWJ1ZzsKKwl1X2ludAlfbXJ0ZGVidWc7CisJc3RydWN0IAltcnRzdGF0
IF9tcnRzdGF0OworCXN0cnVjdAltZmMgKl9tZmN0YWJsZVtNRkNUQkxTSVpdOworCXN0cnVjdAlt
dHggX21yb3V0ZXJfbXR4OworCXN0cnVjdAltdHggX21mY19tdHg7CisJc3RydWN0CXZpZiBfdmlm
dGFibGVbTUFYVklGU107CisJc3RydWN0CW10eCBfdmlmX210eDsKKwl1X2NoYXIJX25leHBpcmVb
TUZDVEJMU0laXTsKKwlldmVudGhhbmRsZXJfdGFnIF9pZl9kZXRhY2hfZXZlbnRfdGFnOworCXN0
cnVjdCAgY2FsbG91dCBfZXhwaXJlX3VwY2FsbHNfY2g7CisJc3RydWN0CWJ3X21ldGVyICpfYndf
bWV0ZXJfdGltZXJzW0JXX01FVEVSX0JVQ0tFVFNdOworCXN0cnVjdCAgY2FsbG91dCBfYndfbWV0
ZXJfY2g7CisJc3RydWN0CWJ3X3VwY2FsbCBfYndfdXBjYWxsc1tCV19VUENBTExTX01BWF07CisJ
dV9pbnQJX2J3X3VwY2FsbHNfbjsKKwlzdHJ1Y3QgIGNhbGxvdXQgX2J3X3VwY2FsbHNfY2g7CisJ
c3RydWN0CXBpbXN0YXQgX3BpbXN0YXQ7CisJc3RydWN0CWlmbmV0IF9tdWx0aWNhc3RfcmVnaXN0
ZXJfaWY7CisJdmlmaV90CV9yZWdfdmlmX251bTsKKwl2aWZpX3QJX251bXZpZnM7CisJaW50CV9w
aW1fYXNzZXJ0OworCXVpbnQzMl90IF9tcnRfYXBpX2NvbmZpZzsKK307CisjZW5kaWYgLyogVklN
QUdFICovCisKKyNkZWZpbmUgSU5JVF9WTkVUX01ST1VURSh2bmV0KSBcCisJSU5JVF9GUk9NX1ZO
RVQodm5ldCwgVk5FVF9NT0RfTVJPVVRFLCBzdHJ1Y3Qgdm5ldF9tcm91dGUsIHZuZXRfbXJvdXRl
KQorCisjZGVmaW5lIFZORVRfTVJPVVRFKHN5bSkgIFZTWU0odm5ldF9tcm91dGUsIHN5bSkKKwor
I2RlZmluZSBWX3JzdnBkZWJ1ZwkJVk5FVF9NUk9VVEUocnN2cGRlYnVnKQorI2RlZmluZSBWX21y
dGRlYnVnCQlWTkVUX01ST1VURShtcnRkZWJ1ZykKKyNkZWZpbmUgVl9tcnRzdGF0CQlWTkVUX01S
T1VURShtcnRzdGF0KQorI2RlZmluZSBWX21mY3RhYmxlCQlWTkVUX01ST1VURShtZmN0YWJsZSkK
KyNkZWZpbmUgVl9tcm91dGVyX210eAkJVk5FVF9NUk9VVEUobXJvdXRlcl9tdHgpCisjZGVmaW5l
IFZfbWZjX210eAkJVk5FVF9NUk9VVEUobWZjX210eCkKKyNkZWZpbmUgVl92aWZ0YWJsZQkJVk5F
VF9NUk9VVEUodmlmdGFibGUpCisjZGVmaW5lIFZfdmlmX210eAkJVk5FVF9NUk9VVEUodmlmX210
eCkKKyNkZWZpbmUgVl9uZXhwaXJlCQlWTkVUX01ST1VURShuZXhwaXJlKQorI2RlZmluZSBWX2lm
X2RldGFjaF9ldmVudF90YWcJVk5FVF9NUk9VVEUoaWZfZGV0YWNoX2V2ZW50X3RhZykKKyNkZWZp
bmUgVl9leHBpcmVfdXBjYWxsc19jaAlWTkVUX01ST1VURShleHBpcmVfdXBjYWxsc19jaCkKKyNk
ZWZpbmUgVl9id19tZXRlcl90aW1lcnMJVk5FVF9NUk9VVEUoYndfbWV0ZXJfdGltZXJzKQorI2Rl
ZmluZSBWX2J3X21ldGVyX2NoCQlWTkVUX01ST1VURShid19tZXRlcl9jaCkKKyNkZWZpbmUgVl9i
d191cGNhbGxzCQlWTkVUX01ST1VURShid191cGNhbGxzKQorI2RlZmluZSBWX2J3X3VwY2FsbHNf
bgkJVk5FVF9NUk9VVEUoYndfdXBjYWxsc19uKQorI2RlZmluZSBWX2J3X3VwY2FsbHNfY2gJCVZO
RVRfTVJPVVRFKGJ3X3VwY2FsbHNfY2gpCisjZGVmaW5lIFZfcGltc3RhdAkJVk5FVF9NUk9VVEUo
cGltc3RhdCkKKyNkZWZpbmUgVl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWYJVk5FVF9NUk9VVEUobXVs
dGljYXN0X3JlZ2lzdGVyX2lmKQorI2RlZmluZSBWX3JlZ192aWZfbnVtCQlWTkVUX01ST1VURShy
ZWdfdmlmX251bSkKKyNkZWZpbmUgVl9udW12aWZzCQlWTkVUX01ST1VURShudW12aWZzKQorI2Rl
ZmluZSBWX3BpbV9hc3NlcnQJCVZORVRfTVJPVVRFKHBpbV9hc3NlcnQpCisjZGVmaW5lIFZfbXJ0
X2FwaV9jb25maWcJVk5FVF9NUk9VVEUobXJ0X2FwaV9jb25maWcpCisKICNlbmRpZiAvKiBfS0VS
TkVMICovCiAKICNlbmRpZiAvKiBfTkVUSU5FVF9JUF9NUk9VVEVfSF8gKi8KZGlmZiAtdXIgc3lz
LjIwMDgxMDE1L25ldGluZXQvcGltX3Zhci5oIHN5cy9uZXRpbmV0L3BpbV92YXIuaAotLS0gc3lz
LjIwMDgxMDE1L25ldGluZXQvcGltX3Zhci5oCTIwMDctMTEtMTkgMDY6NDk6MTEuMDAwMDAwMDAw
IC0wODAwCisrKyBzeXMvbmV0aW5ldC9waW1fdmFyLmgJMjAwOC0xMC0yOCAyMDowMToyMi4wMDAw
MDAwMDAgLTA3MDAKQEAgLTczLDcgKzczLDkgQEAKICNpZmRlZiBfS0VSTkVMCiAKIHZvaWQgcGlt
X2lucHV0KHN0cnVjdCBtYnVmICosIGludCk7CisjaWZkZWYgU1lTQ1RMX0RFQ0wKIFNZU0NUTF9E
RUNMKF9uZXRfaW5ldF9waW0pOwogI2VuZGlmCisjZW5kaWYKIAogI2VuZGlmIC8qIF9ORVRJTkVU
X1BJTV9WQVJfSF8gKi8KZGlmZiAtdXIgc3lzLjIwMDgxMDE1L25ldGluZXQvdmluZXQuaCBzeXMv
bmV0aW5ldC92aW5ldC5oCi0tLSBzeXMuMjAwODEwMTUvbmV0aW5ldC92aW5ldC5oCTIwMDctMTEt
MTkgMDk6MDk6MzguMDAwMDAwMDAwIC0wODAwCisrKyBzeXMvbmV0aW5ldC92aW5ldC5oCTIwMDgt
MTEtMDMgMTY6MDQ6MzYuMDAwMDAwMDAwIC0wODAwCkBAIC01Myw2ICs1Myw5IEBACiAjaW5jbHVk
ZSA8bmV0aW5ldC90Y3Bfc3luY2FjaGUuaD4KICNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgogI2lu
Y2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfbXJvdXRlLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9waW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3BpbV92YXIuaD4K
IAogc3RydWN0IHZuZXRfaW5ldCB7CiAJc3RydWN0CWluX2lmYWRkcmhhc2hoZWFkICpfaW5faWZh
ZGRyaGFzaHRibDsKZGlmZiAtdXIgc3lzLjIwMDgxMDE1L25ldGluZXQ2L2lwNl9pbnB1dC5jIHN5
cy9uZXRpbmV0Ni9pcDZfaW5wdXQuYwotLS0gc3lzLjIwMDgxMDE1L25ldGluZXQ2L2lwNl9pbnB1
dC5jCTIwMDgtMTAtMTUgMDg6MjU6MjguMDAwMDAwMDAwIC0wNzAwCisrKyBzeXMvbmV0aW5ldDYv
aXA2X2lucHV0LmMJMjAwOC0xMC0yOCAyMDowMToyMi4wMDAwMDAwMDAgLTA3MDAKQEAgLTE5Miw2
ICsxOTIsMjAgQEAKIAluZDZfaW5pdCgpOwogCWZyYWc2X2luaXQoKTsKIAorCVZfaXA2X21yb3V0
ZXJfdmVyID0gMDsKKwlWX2lwNl9tcm91dGVyID0gTlVMTDsKKwliemVybygmVl9tcnQ2c3RhdCwg
c2l6ZW9mKFZfbXJ0NnN0YXQpKTsKKwliemVybygoY2FkZHJfdClWX21mNmN0YWJsZSwgc2l6ZW9m
KFZfbWY2Y3RhYmxlKSk7CisJYnplcm8oKGNhZGRyX3QpVl9uNmV4cGlyZSwgc2l6ZW9mKFZfbjZl
eHBpcmUpKTsKKwliemVybygoY2FkZHJfdClWX21pZjZ0YWJsZSwgc2l6ZW9mKFZfbWlmNnRhYmxl
KSk7CisJVl9tcnQ2ZGVidWcgPSAwOworCVZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IE5VTEw7
CisJVl9udW1taWZzID0gMDsKKwlWX3JlZ19taWZfbnVtID0gKG1pZmlfdCktMTsKKwliemVybygm
Vl9waW02c3RhdCwgc2l6ZW9mKFZfcGltNnN0YXQpKTsKKwlWX3BpbTYgPSAwOworCWJ6ZXJvKChj
YWRkcl90KVZfdXBjYWxsX2RhdGEsIHNpemVvZihWX3VwY2FsbF9kYXRhKSk7CisKICNpZmRlZiBW
SU1BR0UKIAkvKiBTa2lwIGdsb2JhbCBpbml0aWFsaXphdGlvbiBzdHVmZiBmb3Igbm9uLWRlZmF1
bHQgaW5zdGFuY2VzLiAqLwogCWlmICghSVNfREVGQVVMVF9WTkVUKGN1cnZuZXQpKQpAQCAtNTA3
LDcgKzUyMSw3IEBACiAJCUlONl9MT09LVVBfTVVMVEkoaXA2LT5pcDZfZHN0LCBtLT5tX3BrdGhk
ci5yY3ZpZiwgaW42bSk7CiAJCWlmIChpbjZtKQogCQkJb3VycyA9IDE7Ci0JCWVsc2UgaWYgKCFp
cDZfbXJvdXRlcikgeworCQllbHNlIGlmICghVl9pcDZfbXJvdXRlcikgewogCQkJVl9pcDZzdGF0
LmlwNnNfbm90bWVtYmVyKys7CiAJCQlWX2lwNnN0YXQuaXA2c19jYW50Zm9yd2FyZCsrOwogCQkJ
aW42X2lmc3RhdF9pbmMobS0+bV9wa3RoZHIucmN2aWYsIGlmczZfaW5fZGlzY2FyZCk7CkBAIC03
NjgsNyArNzgyLDcgQEAKIAkJICogaXA2X21mb3J3YXJkKCkgcmV0dXJucyBhIG5vbi16ZXJvIHZh
bHVlLCB0aGUgcGFja2V0CiAJCSAqIG11c3QgYmUgZGlzY2FyZGVkLCBlbHNlIGl0IG1heSBiZSBh
Y2NlcHRlZCBiZWxvdy4KIAkJICovCi0JCWlmIChpcDZfbXJvdXRlciAmJiBpcDZfbWZvcndhcmQg
JiYKKwkJaWYgKFZfaXA2X21yb3V0ZXIgJiYgaXA2X21mb3J3YXJkICYmCiAJCSAgICBpcDZfbWZv
cndhcmQoaXA2LCBtLT5tX3BrdGhkci5yY3ZpZiwgbSkpIHsKIAkJCVZfaXA2c3RhdC5pcDZzX2Nh
bnRmb3J3YXJkKys7CiAJCQltX2ZyZWVtKG0pOwpkaWZmIC11ciBzeXMuMjAwODEwMTUvbmV0aW5l
dDYvaXA2X21yb3V0ZS5jIHN5cy9uZXRpbmV0Ni9pcDZfbXJvdXRlLmMKLS0tIHN5cy4yMDA4MTAx
NS9uZXRpbmV0Ni9pcDZfbXJvdXRlLmMJMjAwOC0xMC0xNSAwODoyNToyOC4wMDAwMDAwMDAgLTA3
MDAKKysrIHN5cy9uZXRpbmV0Ni9pcDZfbXJvdXRlLmMJMjAwOC0xMS0wNSAxNDozNDoxMC4wMDAw
MDAwMDAgLTA4MDAKQEAgLTE2MCwxNCArMTYwLDE3IEBACiBTWVNDVExfREVDTChfbmV0X2luZXQ2
X2lwNik7CiBTWVNDVExfTk9ERShfbmV0X2luZXQ2LCBJUFBST1RPX1BJTSwgcGltLCBDVExGTEFH
X1JXLCAwLCAiUElNIik7CiAKKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgc3RydWN0IG1ydDZzdGF0
IG1ydDZzdGF0OwotU1lTQ1RMX1NUUlVDVChfbmV0X2luZXQ2X2lwNiwgT0lEX0FVVE8sIG1ydDZz
dGF0LCBDVExGTEFHX1JXLAotICAgICZtcnQ2c3RhdCwgbXJ0NnN0YXQsCisjZW5kaWYgLyogIVZJ
TUFHRSAqLworU1lTQ1RMX1ZfU1RSVUNUKFZfTkVULCB2bmV0X2luZXQ2LCBfbmV0X2luZXQ2X2lw
NiwgT0lEX0FVVE8sIG1ydDZzdGF0LAorICAgIENUTEZMQUdfUlcsIG1ydDZzdGF0LCBtcnQ2c3Rh
dCwKICAgICAiTXVsdGljYXN0IFJvdXRpbmcgU3RhdGlzdGljcyAoc3RydWN0IG1ydDZzdGF0LCBu
ZXRpbmV0Ni9pcDZfbXJvdXRlLmgpIik7CiAKICNkZWZpbmUgTk9fUlRFX0ZPVU5ECTB4MQogI2Rl
ZmluZSBSVEVfRk9VTkQJMHgyCiAKKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgc3RydWN0IG1mNmMg
Km1mNmN0YWJsZVtNRjZDVEJMU0laXTsKIFNZU0NUTF9PUEFRVUUoX25ldF9pbmV0Nl9pcDYsIE9J
RF9BVVRPLCBtZjZjdGFibGUsIENUTEZMQUdfUkQsCiAgICAgJm1mNmN0YWJsZSwgc2l6ZW9mKG1m
NmN0YWJsZSksICJTLCptZjZjdGFibGVbTUY2Q1RCTFNJWl0iLApAQCAtMTgwLDYgKzE4Myw3IEBA
CiBTWVNDVExfT1BBUVVFKF9uZXRfaW5ldDZfaXA2LCBPSURfQVVUTywgbWlmNnRhYmxlLCBDVExG
TEFHX1JELAogICAgICZtaWY2dGFibGUsIHNpemVvZihtaWY2dGFibGUpLCAiUyx2aWZbTUFYTUlG
U10iLAogICAgICJNdWx0aWNhc3QgSW50ZXJmYWNlcyAoc3RydWN0IG1pZltNQVhNSUZTXSwgbmV0
aW5ldDYvaXA2X21yb3V0ZS5oKSIpOworI2VuZGlmIC8qICFWSU1BR0UgKi8KIAogI2lmZGVmIE1S
VDZERUJVRwogI2lmbmRlZiBWSU1BR0UKQEAgLTE5OSw3ICsyMDMsOSBAQAogCiAjaWZkZWYgSU5F
VAogI2lmZGVmIE1ST1VUSU5HCisjaWZuZGVmIFZJTUFHRQogZXh0ZXJuIHN0cnVjdCBzb2NrZXQg
KmlwX21yb3V0ZXI7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogI2VuZGlmCiAjZW5kaWYKIApAQCAt
MjE0LDE5ICsyMjAsMjMgQEAKICAqIG9ubHkgZXhpc3QgYXMgYSBwbGFjZWhvbGRlciBmb3IgbXVs
dGljYXN0IHNvdXJjZQogICogdmVyaWZpY2F0aW9uLgogICovCisjaWZuZGVmIFZJTUFHRQogc3Rh
dGljIHN0cnVjdCBpZm5ldCAqbXVsdGljYXN0X3JlZ2lzdGVyX2lmNjsKKyNlbmRpZiAvKiAhVklN
QUdFICovCiAKICNkZWZpbmUgRU5DQVBfSE9QUyA2NAogCiAvKgogICogUHJpdmF0ZSB2YXJpYWJs
ZXMuCiAgKi8KKyNpZm5kZWYgVklNQUdFCiBzdGF0aWMgbWlmaV90IG51bW1pZnMgPSAwOwogc3Rh
dGljIG1pZmlfdCByZWdfbWlmX251bSA9IChtaWZpX3QpLTE7CiAKIHN0YXRpYyBzdHJ1Y3QgcGlt
NnN0YXQgcGltNnN0YXQ7Ci1TWVNDVExfU1RSVUNUKF9uZXRfaW5ldDZfcGltLCBQSU02Q1RMX1NU
QVRTLCBzdGF0cywgQ1RMRkxBR19SRCwKLSAgICAmcGltNnN0YXQsIHBpbTZzdGF0LAorI2VuZGlm
IC8qICFWSU1BR0UgKi8KK1NZU0NUTF9WX1NUUlVDVChWX05FVCwgdm5ldF9pbmV0NiwgX25ldF9p
bmV0Nl9waW0sIFBJTTZDVExfU1RBVFMsIHN0YXRzLAorICAgIENUTEZMQUdfUkQsIHBpbTZzdGF0
LCBwaW02c3RhdCwKICAgICAiUElNIFN0YXRpc3RpY3MgKHN0cnVjdCBwaW02c3RhdCwgbmV0aW5l
dDYvcGltX3Zhci5oKSIpOwogCiAjaWZuZGVmIFZJTUFHRQpAQCAtMjQ1LDkgKzI1NSw5IEBACiAg
KiBGaW5kIGEgcm91dGUgZm9yIGEgZ2l2ZW4gb3JpZ2luIElQdjYgYWRkcmVzcyBhbmQgTXVsdGlj
YXN0IGdyb3VwIGFkZHJlc3MuCiAgKi8KICNkZWZpbmUgTUY2Q0ZJTkQobywgZywgcnQpIGRvIHsg
XAotCXN0cnVjdCBtZjZjICpfcnQgPSBtZjZjdGFibGVbTUY2Q0hBU0gobyxnKV07IFwKKwlzdHJ1
Y3QgbWY2YyAqX3J0ID0gVl9tZjZjdGFibGVbTUY2Q0hBU0gobyxnKV07IFwKIAlydCA9IE5VTEw7
IFwKLQltcnQ2c3RhdC5tcnQ2c19tZmNfbG9va3VwcysrOyBcCisJVl9tcnQ2c3RhdC5tcnQ2c19t
ZmNfbG9va3VwcysrOyBcCiAJd2hpbGUgKF9ydCkgeyBcCiAJCWlmIChJTjZfQVJFX0FERFJfRVFV
QUwoJl9ydC0+bWY2Y19vcmlnaW4uc2luNl9hZGRyLCAmKG8pKSAmJiBcCiAJCSAgICBJTjZfQVJF
X0FERFJfRVFVQUwoJl9ydC0+bWY2Y19tY2FzdGdycC5zaW42X2FkZHIsICYoZykpICYmIFwKQEAg
LTI1OCw3ICsyNjgsNyBAQAogCQlfcnQgPSBfcnQtPm1mNmNfbmV4dDsgXAogCX0gXAogCWlmIChy
dCA9PSBOVUxMKSB7IFwKLQkJbXJ0NnN0YXQubXJ0NnNfbWZjX21pc3NlcysrOyBcCisJCVZfbXJ0
NnN0YXQubXJ0NnNfbWZjX21pc3NlcysrOyBcCiAJfSBcCiB9IHdoaWxlICgvKkNPTlNUQ09ORCov
IDApCiAKQEAgLTI5MSw3ICszMDEsOSBAQAogCiAjaWZkZWYgVVBDQUxMX1RJTUlORwogI2RlZmlu
ZSBVUENBTExfTUFYCTUwCisjaWZuZGVmIFZJTUFHRQogc3RhdGljIHVfbG9uZyB1cGNhbGxfZGF0
YVtVUENBTExfTUFYICsgMV07CisjZW5kaWYgLyogIVZJTUFHRSAqLwogc3RhdGljIHZvaWQgY29s
bGF0ZSgpOwogI2VuZGlmIC8qIFVQQ0FMTF9USU1JTkcgKi8KIApAQCAtMzAzLDcgKzMxNSw5IEBA
CiBzdGF0aWMgaW50IGFkZF9tNmZjKHN0cnVjdCBtZjZjY3RsICopOwogc3RhdGljIGludCBkZWxf
bTZmYyhzdHJ1Y3QgbWY2Y2N0bCAqKTsKIAotc3RhdGljIHN0cnVjdCBjYWxsb3V0IGV4cGlyZV91
cGNhbGxzX2NoOworI2lmbmRlZiBWSU1BR0UKK3N0YXRpYyBzdHJ1Y3QgY2FsbG91dCBleHBpcmVf
dXBjYWxsc19jaDY7CisjZW5kaWYgLyogIVZJTUFHRSAqLwogCiBpbnQgWF9pcDZfbWZvcndhcmQo
c3RydWN0IGlwNl9oZHIgKmlwNiwgc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptKTsK
IGludCBYX2lwNl9tcm91dGVyX2RvbmUodm9pZCk7CkBAIC0zMTEsMTkgKzMyNSwyMSBAQAogaW50
IFhfaXA2X21yb3V0ZXJfZ2V0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29w
dCk7CiBpbnQgWF9tcnQ2X2lvY3RsKGludCBjbWQsIGNhZGRyX3QgZGF0YSk7CiAKKwogLyoKICAq
IEhhbmRsZSBNUlQgc2V0c29ja29wdCBjb21tYW5kcyB0byBtb2RpZnkgdGhlIG11bHRpY2FzdCBy
b3V0aW5nIHRhYmxlcy4KICAqLwogaW50CiBYX2lwNl9tcm91dGVyX3NldChzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpCiB7CisJSU5JVF9WTkVUX0lORVQ2KHNvLT5zb192
bmV0KTsKIAlpbnQgZXJyb3IgPSAwOwogCWludCBvcHR2YWw7CiAJc3RydWN0IG1pZjZjdGwgbWlm
YzsKIAlzdHJ1Y3QgbWY2Y2N0bCBtZmNjOwogCW1pZmlfdCBtaWZpOwogCi0JaWYgKHNvICE9IGlw
Nl9tcm91dGVyICYmIHNvcHQtPnNvcHRfbmFtZSAhPSBNUlQ2X0lOSVQpCisJaWYgKHNvICE9IFZf
aXA2X21yb3V0ZXIgJiYgc29wdC0+c29wdF9uYW1lICE9IE1SVDZfSU5JVCkKIAkJcmV0dXJuIChF
QUNDRVMpOwogCiAJc3dpdGNoIChzb3B0LT5zb3B0X25hbWUpIHsKQEAgLTM4NSwxMCArNDAxLDEw
IEBACiBpbnQKIFhfaXA2X21yb3V0ZXJfZ2V0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a29wdCAqc29wdCkKIHsKLQlJTklUX1ZORVRfSU5FVDYoY3Vydm5ldCk7CisJSU5JVF9WTkVUX0lO
RVQ2KHNvLT5zb192bmV0KTsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKHNvICE9IGlwNl9tcm91
dGVyKQorCWlmIChzbyAhPSBWX2lwNl9tcm91dGVyKQogCQlyZXR1cm4gKEVBQ0NFUyk7CiAKIAlz
d2l0Y2ggKHNvcHQtPnNvcHRfbmFtZSkgewpAQCAtNDIxLDYgKzQzNyw3IEBACiBzdGF0aWMgaW50
CiBnZXRfc2dfY250KHN0cnVjdCBzaW9jX3NnX3JlcTYgKnJlcSkKIHsKKwlJTklUX1ZORVRfSU5F
VDYoY3Vydm5ldCk7CiAJc3RydWN0IG1mNmMgKnJ0OwogCWludCBzOwogCkBAIC00NDYsMTUgKzQ2
MywxNiBAQAogc3RhdGljIGludAogZ2V0X21pZjZfY250KHN0cnVjdCBzaW9jX21pZl9yZXE2ICpy
ZXEpCiB7CisJSU5JVF9WTkVUX0lORVQ2KGN1cnZuZXQpOwogCW1pZmlfdCBtaWZpID0gcmVxLT5t
aWZpOwogCi0JaWYgKG1pZmkgPj0gbnVtbWlmcykKKwlpZiAobWlmaSA+PSBWX251bW1pZnMpCiAJ
CXJldHVybiAoRUlOVkFMKTsKIAotCXJlcS0+aWNvdW50ID0gbWlmNnRhYmxlW21pZmldLm02X3Br
dF9pbjsKLQlyZXEtPm9jb3VudCA9IG1pZjZ0YWJsZVttaWZpXS5tNl9wa3Rfb3V0OwotCXJlcS0+
aWJ5dGVzID0gbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX2luOwotCXJlcS0+b2J5dGVzID0gbWlm
NnRhYmxlW21pZmldLm02X2J5dGVzX291dDsKKwlyZXEtPmljb3VudCA9IFZfbWlmNnRhYmxlW21p
ZmldLm02X3BrdF9pbjsKKwlyZXEtPm9jb3VudCA9IFZfbWlmNnRhYmxlW21pZmldLm02X3BrdF9v
dXQ7CisJcmVxLT5pYnl0ZXMgPSBWX21pZjZ0YWJsZVttaWZpXS5tNl9ieXRlc19pbjsKKwlyZXEt
Pm9ieXRlcyA9IFZfbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX291dDsKIAogCXJldHVybiAoMCk7
CiB9CkBAIC00NzcsOSArNDk1LDExIEBACiBzdGF0aWMgaW50CiBpcDZfbXJvdXRlcl9pbml0KHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgdiwgaW50IGNtZCkKIHsKLQlJTklUX1ZORVRfSU5FVDYoY3Vy
dm5ldCk7CisJSU5JVF9WTkVUX0lORVQ2KHNvLT5zb192bmV0KTsKIAogCVZfaXA2X21yb3V0ZXJf
dmVyID0gMDsKKwlWX251bW1pZnMgPSAwOworCVZfcmVnX21pZl9udW0gPSAobWlmaV90KS0xOwog
CiAjaWZkZWYgTVJUNkRFQlVHCiAJVl9tcnQ2ZGVidWcgPSAwOwpAQCAtNDk3LDIwICs1MTcsMjAg
QEAKIAlpZiAodiAhPSAxKQogCQlyZXR1cm4gKEVOT1BST1RPT1BUKTsKIAotCWlmIChpcDZfbXJv
dXRlciAhPSBOVUxMKQorCWlmIChWX2lwNl9tcm91dGVyICE9IE5VTEwpCiAJCXJldHVybiAoRUFE
RFJJTlVTRSk7CiAKLQlpcDZfbXJvdXRlciA9IHNvOworCVZfaXA2X21yb3V0ZXIgPSBzbzsKIAlW
X2lwNl9tcm91dGVyX3ZlciA9IGNtZDsKIAotCWJ6ZXJvKChjYWRkcl90KW1mNmN0YWJsZSwgc2l6
ZW9mKG1mNmN0YWJsZSkpOwotCWJ6ZXJvKChjYWRkcl90KW42ZXhwaXJlLCBzaXplb2YobjZleHBp
cmUpKTsKKwliemVybygoY2FkZHJfdClWX21mNmN0YWJsZSwgc2l6ZW9mKFZfbWY2Y3RhYmxlKSk7
CisJYnplcm8oKGNhZGRyX3QpVl9uNmV4cGlyZSwgc2l6ZW9mKFZfbjZleHBpcmUpKTsKIAogCVZf
cGltNiA9IDA7LyogdXNlZCBmb3Igc3R1YmJpbmcgb3V0L2luIHBpbSBzdHVmZiAqLwogCi0JY2Fs
bG91dF9pbml0KCZleHBpcmVfdXBjYWxsc19jaCwgMCk7Ci0JY2FsbG91dF9yZXNldCgmZXhwaXJl
X3VwY2FsbHNfY2gsIEVYUElSRV9USU1FT1VULAotCSAgICBleHBpcmVfdXBjYWxscywgTlVMTCk7
CisJY2FsbG91dF9pbml0KCZWX2V4cGlyZV91cGNhbGxzX2NoNiwgMCk7CisJY2FsbG91dF9yZXNl
dCgmVl9leHBpcmVfdXBjYWxsc19jaDYsIEVYUElSRV9USU1FT1VULAorCQlleHBpcmVfdXBjYWxs
cywgKHZvaWQgKilzby0+c29fdm5ldCk7CiAKICNpZmRlZiBNUlQ2REVCVUcKIAlpZiAoVl9tcnQ2
ZGVidWcpCkBAIC01NDcsMjkgKzU2NywyOSBAQAogCSAqIFhYWDogdGhlcmUgbWF5IGJlIGFuIGlu
dGVyZmFjZSBpbiB3aGljaCB0aGUgSVB2NCBtdWx0aWNhc3QKIAkgKiBkYWVtb24gaXMgbm90IGlu
dGVyZXN0ZWQuLi4KIAkgKi8KLQlpZiAoIWlwX21yb3V0ZXIpCisJaWYgKCFWX2lwX21yb3V0ZXIp
CiAjZW5kaWYKICNlbmRpZgogCXsKLQkJZm9yIChtaWZpID0gMDsgbWlmaSA8IG51bW1pZnM7IG1p
ZmkrKykgewotCQkJaWYgKG1pZjZ0YWJsZVttaWZpXS5tNl9pZnAgJiYKLQkJCSAgICAhKG1pZjZ0
YWJsZVttaWZpXS5tNl9mbGFncyAmIE1JRkZfUkVHSVNURVIpKSB7Ci0JCQkJaWZfYWxsbXVsdGko
bWlmNnRhYmxlW21pZmldLm02X2lmcCwgMCk7CisJCWZvciAobWlmaSA9IDA7IG1pZmkgPCBWX251
bW1pZnM7IG1pZmkrKykgeworCQkJaWYgKFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCAmJgorCQkJ
ICAgICEoVl9taWY2dGFibGVbbWlmaV0ubTZfZmxhZ3MgJiBNSUZGX1JFR0lTVEVSKSkgeworCQkJ
CWlmX2FsbG11bHRpKFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCwgMCk7CiAJCQl9CiAJCX0KIAl9
Ci0JYnplcm8oKGNhZGRyX3QpbWlmNnRhYmxlLCBzaXplb2YobWlmNnRhYmxlKSk7Ci0JbnVtbWlm
cyA9IDA7CisJYnplcm8oKGNhZGRyX3QpVl9taWY2dGFibGUsIHNpemVvZihWX21pZjZ0YWJsZSkp
OworCVZfbnVtbWlmcyA9IDA7CiAKIAlWX3BpbTYgPSAwOyAvKiB1c2VkIHRvIHN0dWIgb3V0L2lu
IHBpbSBzcGVjaWZpYyBjb2RlICovCiAKLQljYWxsb3V0X3N0b3AoJmV4cGlyZV91cGNhbGxzX2No
KTsKKwljYWxsb3V0X3N0b3AoJlZfZXhwaXJlX3VwY2FsbHNfY2g2KTsKIAogCS8qCiAJICogRnJl
ZSBhbGwgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcy4KIAkgKi8KIAlmb3IgKGkg
PSAwOyBpIDwgTUY2Q1RCTFNJWjsgaSsrKSB7Ci0JCXJ0ID0gbWY2Y3RhYmxlW2ldOworCQlydCA9
IFZfbWY2Y3RhYmxlW2ldOwogCQl3aGlsZSAocnQpIHsKIAkJCXN0cnVjdCBtZjZjICpmcnQ7CiAK
QEAgLTU4NiwxOSArNjA2LDE5IEBACiAJCX0KIAl9CiAKLQliemVybygoY2FkZHJfdCltZjZjdGFi
bGUsIHNpemVvZihtZjZjdGFibGUpKTsKKwliemVybygoY2FkZHJfdClWX21mNmN0YWJsZSwgc2l6
ZW9mKFZfbWY2Y3RhYmxlKSk7CiAKIAkvKgogCSAqIFJlc2V0IHJlZ2lzdGVyIGludGVyZmFjZQog
CSAqLwotCWlmIChyZWdfbWlmX251bSAhPSAobWlmaV90KS0xICYmIG11bHRpY2FzdF9yZWdpc3Rl
cl9pZjYgIT0gTlVMTCkgewotCQlpZl9kZXRhY2gobXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7Ci0J
CWlmX2ZyZWUobXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7Ci0JCXJlZ19taWZfbnVtID0gKG1pZmlf
dCktMTsKLQkJbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IE5VTEw7CisJaWYgKFZfcmVnX21pZl9u
dW0gIT0gKG1pZmlfdCktMSAmJiBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZjYgIT0gTlVMTCkgewor
CQlpZl9kZXRhY2goVl9tdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KTsKKwkJaWZfZnJlZShWX211bHRp
Y2FzdF9yZWdpc3Rlcl9pZjYpOworCQlWX3JlZ19taWZfbnVtID0gKG1pZmlfdCktMTsKKwkJVl9t
dWx0aWNhc3RfcmVnaXN0ZXJfaWY2ID0gTlVMTDsKIAl9CiAKLQlpcDZfbXJvdXRlciA9IE5VTEw7
CisJVl9pcDZfbXJvdXRlciA9IE5VTEw7CiAJVl9pcDZfbXJvdXRlcl92ZXIgPSAwOwogCiAJc3Bs
eChzKTsKQEAgLTYyMCwxMyArNjQwLDE0IEBACiBhZGRfbTZpZihzdHJ1Y3QgbWlmNmN0bCAqbWlm
Y3ApCiB7CiAJSU5JVF9WTkVUX05FVChjdXJ2bmV0KTsKKwlJTklUX1ZORVRfSU5FVDYoY3Vydm5l
dCk7CiAJc3RydWN0IG1pZjYgKm1pZnA7CiAJc3RydWN0IGlmbmV0ICppZnA7CiAJaW50IGVycm9y
LCBzOwogCiAJaWYgKG1pZmNwLT5taWY2Y19taWZpID49IE1BWE1JRlMpCiAJCXJldHVybiAoRUlO
VkFMKTsKLQltaWZwID0gbWlmNnRhYmxlICsgbWlmY3AtPm1pZjZjX21pZmk7CisJbWlmcCA9IFZf
bWlmNnRhYmxlICsgbWlmY3AtPm1pZjZjX21pZmk7CiAJaWYgKG1pZnAtPm02X2lmcCkKIAkJcmV0
dXJuIChFQUREUklOVVNFKTsgLyogWFhYOiBpcyBpdCBhcHByb3ByaWF0ZT8gKi8KIAlpZiAobWlm
Y3AtPm1pZjZjX3BpZmkgPT0gMCB8fCBtaWZjcC0+bWlmNmNfcGlmaSA+IFZfaWZfaW5kZXgpCkBA
IC02MzQsMTQgKzY1NSwxNCBAQAogCWlmcCA9IGlmbmV0X2J5aW5kZXgobWlmY3AtPm1pZjZjX3Bp
ZmkpOwogCiAJaWYgKG1pZmNwLT5taWY2Y19mbGFncyAmIE1JRkZfUkVHSVNURVIpIHsKLQkJaWYg
KHJlZ19taWZfbnVtID09IChtaWZpX3QpLTEpIHsKKwkJaWYgKFZfcmVnX21pZl9udW0gPT0gKG1p
ZmlfdCktMSkgewogCQkJaWZwID0gaWZfYWxsb2MoSUZUX09USEVSKTsKIAogCQkJaWZfaW5pdG5h
bWUoaWZwLCAicmVnaXN0ZXJfbWlmIiwgMCk7CiAJCQlpZnAtPmlmX2ZsYWdzIHw9IElGRl9MT09Q
QkFDSzsKIAkJCWlmX2F0dGFjaChpZnApOwotCQkJbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IGlm
cDsKLQkJCXJlZ19taWZfbnVtID0gbWlmY3AtPm1pZjZjX21pZmk7CisJCQlWX211bHRpY2FzdF9y
ZWdpc3Rlcl9pZjYgPSBpZnA7CisJCQlWX3JlZ19taWZfbnVtID0gbWlmY3AtPm1pZjZjX21pZmk7
CiAJCQkvKgogCQkJICogaXQgaXMgaW1wb3NzaWJsZSB0byBndWVzcyB0aGUgaWZpbmRleCBvZiB0
aGUKIAkJCSAqIHJlZ2lzdGVyIGludGVyZmFjZS4gIFNvIG1pZjZjX3BpZmkgaXMgYXV0b21hdGlj
YWxseQpAQCAtNjQ5LDcgKzY3MCw3IEBACiAJCQkgKi8KIAkJCW1pZmNwLT5taWY2Y19waWZpID0g
aWZwLT5pZl9pbmRleDsKIAkJfSBlbHNlIHsKLQkJCWlmcCA9IG11bHRpY2FzdF9yZWdpc3Rlcl9p
ZjY7CisJCQlpZnAgPSBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZjY7CiAJCX0KIAogCX0gLyogaWYg
UkVHSVNURVIgKi8KQEAgLTY3Niw5ICs2OTcsOSBAQAogCW1pZnAtPm02X2J5dGVzX291dCA9IDA7
CiAJc3BseChzKTsKIAotCS8qIEFkanVzdCBudW1taWZzIHVwIGlmIHRoZSBtaWZpIGlzIGhpZ2hl
ciB0aGFuIG51bW1pZnMgKi8KLQlpZiAobnVtbWlmcyA8PSBtaWZjcC0+bWlmNmNfbWlmaSkKLQkJ
bnVtbWlmcyA9IG1pZmNwLT5taWY2Y19taWZpICsgMTsKKwkvKiBBZGp1c3QgVl9udW1taWZzIHVw
IGlmIHRoZSBtaWZpIGlzIGhpZ2hlciB0aGFuIFZfbnVtbWlmcyAqLworCWlmIChWX251bW1pZnMg
PD0gbWlmY3AtPm1pZjZjX21pZmkpCisJCVZfbnVtbWlmcyA9IG1pZmNwLT5taWY2Y19taWZpICsg
MTsKIAogI2lmZGVmIE1SVDZERUJVRwogCWlmIChWX21ydDZkZWJ1ZykKQEAgLTY5NywxMiArNzE4
LDEzIEBACiBzdGF0aWMgaW50CiBkZWxfbTZpZihtaWZpX3QgKm1pZmlwKQogewotCXN0cnVjdCBt
aWY2ICptaWZwID0gbWlmNnRhYmxlICsgKm1pZmlwOworCUlOSVRfVk5FVF9JTkVUNihjdXJ2bmV0
KTsKKwlzdHJ1Y3QgbWlmNiAqbWlmcCA9IFZfbWlmNnRhYmxlICsgKm1pZmlwOwogCW1pZmlfdCBt
aWZpOwogCXN0cnVjdCBpZm5ldCAqaWZwOwogCWludCBzOwogCi0JaWYgKCptaWZpcCA+PSBudW1t
aWZzKQorCWlmICgqbWlmaXAgPj0gVl9udW1taWZzKQogCQlyZXR1cm4gKEVJTlZBTCk7CiAJaWYg
KG1pZnAtPm02X2lmcCA9PSBOVUxMKQogCQlyZXR1cm4gKEVJTlZBTCk7CkBAIC03MTgsMjggKzc0
MCwyOCBAQAogCiAJCWlmX2FsbG11bHRpKGlmcCwgMCk7CiAJfSBlbHNlIHsKLQkJaWYgKHJlZ19t
aWZfbnVtICE9IChtaWZpX3QpLTEgJiYKLQkJICAgIG11bHRpY2FzdF9yZWdpc3Rlcl9pZjYgIT0g
TlVMTCkgewotCQkJaWZfZGV0YWNoKG11bHRpY2FzdF9yZWdpc3Rlcl9pZjYpOwotCQkJaWZfZnJl
ZShtdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KTsKLQkJCXJlZ19taWZfbnVtID0gKG1pZmlfdCktMTsK
LQkJCW11bHRpY2FzdF9yZWdpc3Rlcl9pZjYgPSBOVUxMOworCQlpZiAoVl9yZWdfbWlmX251bSAh
PSAobWlmaV90KS0xICYmCisJCSAgICBWX211bHRpY2FzdF9yZWdpc3Rlcl9pZjYgIT0gTlVMTCkg
eworCQkJaWZfZGV0YWNoKFZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7CisJCQlpZl9mcmVlKFZf
bXVsdGljYXN0X3JlZ2lzdGVyX2lmNik7CisJCQlWX3JlZ19taWZfbnVtID0gKG1pZmlfdCktMTsK
KwkJCVZfbXVsdGljYXN0X3JlZ2lzdGVyX2lmNiA9IE5VTEw7CiAJCX0KIAl9CiAKIAliemVybygo
Y2FkZHJfdCltaWZwLCBzaXplb2YoKm1pZnApKTsKIAotCS8qIEFkanVzdCBudW1taWZzIGRvd24g
Ki8KLQlmb3IgKG1pZmkgPSBudW1taWZzOyBtaWZpID4gMDsgbWlmaS0tKQotCQlpZiAobWlmNnRh
YmxlW21pZmkgLSAxXS5tNl9pZnApCisJLyogQWRqdXN0IFZfbnVtbWlmcyBkb3duICovCisJZm9y
IChtaWZpID0gVl9udW1taWZzOyBtaWZpID4gMDsgbWlmaS0tKQorCQlpZiAoVl9taWY2dGFibGVb
bWlmaSAtIDFdLm02X2lmcCkKIAkJCWJyZWFrOwotCW51bW1pZnMgPSBtaWZpOworCVZfbnVtbWlm
cyA9IG1pZmk7CiAKIAlzcGx4KHMpOwogCiAjaWZkZWYgTVJUNkRFQlVHCiAJaWYgKFZfbXJ0NmRl
YnVnKQotCQlsb2coTE9HX0RFQlVHLCAiZGVsX202aWYgJWQsIG51bW1pZnMgJWRcbiIsICptaWZp
cCwgbnVtbWlmcyk7CisJCWxvZyhMT0dfREVCVUcsICJkZWxfbTZpZiAlZCwgbnVtbWlmcyAlZFxu
IiwgKm1pZmlwLCBWX251bW1pZnMpOwogI2VuZGlmCiAKIAlyZXR1cm4gKDApOwpAQCAtNzg3LDcg
KzgwOSw3IEBACiAJcyA9IHNwbG5ldCgpOwogCWhhc2ggPSBNRjZDSEFTSChtZmNjcC0+bWY2Y2Nf
b3JpZ2luLnNpbjZfYWRkciwKIAkJCW1mY2NwLT5tZjZjY19tY2FzdGdycC5zaW42X2FkZHIpOwot
CWZvciAocnQgPSBtZjZjdGFibGVbaGFzaF0sIG5zdGwgPSAwOyBydDsgcnQgPSBydC0+bWY2Y19u
ZXh0KSB7CisJZm9yIChydCA9IFZfbWY2Y3RhYmxlW2hhc2hdLCBuc3RsID0gMDsgcnQ7IHJ0ID0g
cnQtPm1mNmNfbmV4dCkgewogCQlpZiAoSU42X0FSRV9BRERSX0VRVUFMKCZydC0+bWY2Y19vcmln
aW4uc2luNl9hZGRyLAogCQkJCSAgICAgICAmbWZjY3AtPm1mNmNjX29yaWdpbi5zaW42X2FkZHIp
ICYmCiAJCSAgICBJTjZfQVJFX0FERFJfRVFVQUwoJnJ0LT5tZjZjX21jYXN0Z3JwLnNpbjZfYWRk
ciwKQEAgLTgyNSw3ICs4NDcsNyBAQAogCQkJcnQtPm1mNmNfd3JvbmdfaWYgICA9IDA7CiAKIAkJ
CXJ0LT5tZjZjX2V4cGlyZSA9IDA7CS8qIERvbid0IGNsZWFuIHRoaXMgZ3V5IHVwICovCi0JCQlu
NmV4cGlyZVtoYXNoXS0tOworCQkJVl9uNmV4cGlyZVtoYXNoXS0tOwogCiAJCQkvKiBmcmVlIHBh
Y2tldHMgUWVkIGF0IHRoZSBlbmQgb2YgdGhpcyBlbnRyeSAqLwogCQkJZm9yIChydGUgPSBydC0+
bWY2Y19zdGFsbDsgcnRlICE9IE5VTEw7ICkgewpAQCAtODU2LDcgKzg3OCw3IEBACiAJCQltZmNj
cC0+bWY2Y2NfcGFyZW50KTsKICNlbmRpZgogCi0JCWZvciAocnQgPSBtZjZjdGFibGVbaGFzaF07
IHJ0OyBydCA9IHJ0LT5tZjZjX25leHQpIHsKKwkJZm9yIChydCA9IFZfbWY2Y3RhYmxlW2hhc2hd
OyBydDsgcnQgPSBydC0+bWY2Y19uZXh0KSB7CiAKIAkJCWlmIChJTjZfQVJFX0FERFJfRVFVQUwo
JnJ0LT5tZjZjX29yaWdpbi5zaW42X2FkZHIsCiAJCQkJCSAgICAgICAmbWZjY3AtPm1mNmNjX29y
aWdpbi5zaW42X2FkZHIpJiYKQEAgLTg3Myw3ICs4OTUsNyBAQAogCQkJCXJ0LT5tZjZjX3dyb25n
X2lmICAgPSAwOwogCiAJCQkJaWYgKHJ0LT5tZjZjX2V4cGlyZSkKLQkJCQkJbjZleHBpcmVbaGFz
aF0tLTsKKwkJCQkJVl9uNmV4cGlyZVtoYXNoXS0tOwogCQkJCXJ0LT5tZjZjX2V4cGlyZQkgICA9
IDA7CiAJCQl9CiAJCX0KQEAgLTg5OSw4ICs5MjEsOCBAQAogCQkJcnQtPm1mNmNfc3RhbGwgPSBO
VUxMOwogCiAJCQkvKiBsaW5rIGludG8gdGFibGUgKi8KLQkJCXJ0LT5tZjZjX25leHQgID0gbWY2
Y3RhYmxlW2hhc2hdOwotCQkJbWY2Y3RhYmxlW2hhc2hdID0gcnQ7CisJCQlydC0+bWY2Y19uZXh0
ICA9IFZfbWY2Y3RhYmxlW2hhc2hdOworCQkJVl9tZjZjdGFibGVbaGFzaF0gPSBydDsKIAkJfQog
CX0KIAlzcGx4KHMpOwpAQCAtOTE0LDYgKzkzNiw3IEBACiBzdGF0aWMgdm9pZAogY29sbGF0ZShz
dHJ1Y3QgdGltZXZhbCAqdCkKIHsKKwlJTklUX1ZORVRfSU5FVDYoY3Vydm5ldCk7CiAJdV9sb25n
IGQ7CiAJc3RydWN0IHRpbWV2YWwgdHA7CiAJdV9sb25nIGRlbHRhOwpAQCAtOTI4LDcgKzk1MSw3
IEBACiAJCWlmIChkID4gVVBDQUxMX01BWCkKIAkJCWQgPSBVUENBTExfTUFYOwogCi0JCSsrdXBj
YWxsX2RhdGFbZF07CisJCSsrVl91cGNhbGxfZGF0YVtkXTsKIAl9CiB9CiAjZW5kaWYgLyogVVBD
QUxMX1RJTUlORyAqLwpAQCAtOTYyLDcgKzk4NSw3IEBACiAKIAlzID0gc3BsbmV0KCk7CiAKLQlu
cHRyID0gJm1mNmN0YWJsZVtoYXNoXTsKKwlucHRyID0gJlZfbWY2Y3RhYmxlW2hhc2hdOwogCXdo
aWxlICgocnQgPSAqbnB0cikgIT0gTlVMTCkgewogCQlpZiAoSU42X0FSRV9BRERSX0VRVUFMKCZv
cmlnaW4uc2luNl9hZGRyLAogCQkJCSAgICAgICAmcnQtPm1mNmNfb3JpZ2luLnNpbjZfYWRkcikg
JiYKQEAgLTEwOTcsNyArMTEyMCw3IEBACiAJCUdFVF9USU1FKHRwKTsKICNlbmRpZiAvKiBVUENB
TExfVElNSU5HICovCiAKLQkJbXJ0NnN0YXQubXJ0NnNfbm9fcm91dGUrKzsKKwkJVl9tcnQ2c3Rh
dC5tcnQ2c19ub19yb3V0ZSsrOwogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2ZGVidWcg
JiAoREVCVUdfRk9SV0FSRCB8IERFQlVHX01GQykpCiAJCQlsb2coTE9HX0RFQlVHLCAiaXA2X21m
b3J3YXJkOiBubyBydGUgcyAlcyBnICVzXG4iLApAQCAtMTEzMSw3ICsxMTU0LDcgQEAKIAogCQkv
KiBpcyB0aGVyZSBhbiB1cGNhbGwgd2FpdGluZyBmb3IgdGhpcyBwYWNrZXQ/ICovCiAJCWhhc2gg
PSBNRjZDSEFTSChpcDYtPmlwNl9zcmMsIGlwNi0+aXA2X2RzdCk7Ci0JCWZvciAocnQgPSBtZjZj
dGFibGVbaGFzaF07IHJ0OyBydCA9IHJ0LT5tZjZjX25leHQpIHsKKwkJZm9yIChydCA9IFZfbWY2
Y3RhYmxlW2hhc2hdOyBydDsgcnQgPSBydC0+bWY2Y19uZXh0KSB7CiAJCQlpZiAoSU42X0FSRV9B
RERSX0VRVUFMKCZpcDYtPmlwNl9zcmMsCiAJCQkJCSAgICAgICAmcnQtPm1mNmNfb3JpZ2luLnNp
bjZfYWRkcikgJiYKIAkJCSAgICBJTjZfQVJFX0FERFJfRVFVQUwoJmlwNi0+aXA2X2RzdCwKQEAg
LTEyMDUsOCArMTIyOCw4IEBACiAJCQkJICAgICJnZXR0aW5nIHRoZSBpaWYgaW5mbyBpbiB0aGUg
a2VybmVsXG4iKTsKICNlbmRpZgogCi0JCQlmb3IgKG1pZnAgPSBtaWY2dGFibGUsIG1pZmkgPSAw
OwotCQkJICAgICBtaWZpIDwgbnVtbWlmcyAmJiBtaWZwLT5tNl9pZnAgIT0gaWZwOworCQkJZm9y
IChtaWZwID0gVl9taWY2dGFibGUsIG1pZmkgPSAwOworCQkJICAgICBtaWZpIDwgVl9udW1taWZz
ICYmIG1pZnAtPm02X2lmcCAhPSBpZnA7CiAJCQkgICAgIG1pZnArKywgbWlmaSsrKQogCQkJCTsK
IApAQCAtMTIyMSwxMCArMTI0NCwxMCBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoc29j
a2V0X3NlbmQoaXA2X21yb3V0ZXIsIG1tLCAmc2luNikgPCAwKSB7CisJCQlpZiAoc29ja2V0X3Nl
bmQoVl9pcDZfbXJvdXRlciwgbW0sICZzaW42KSA8IDApIHsKIAkJCQlsb2coTE9HX1dBUk5JTkcs
ICJpcDZfbWZvcndhcmQ6IGlwNl9tcm91dGVyICIKIAkJCQkgICAgInNvY2tldCBxdWV1ZSBmdWxs
XG4iKTsKLQkJCQltcnQ2c3RhdC5tcnQ2c191cHFfc29ja2Z1bGwrKzsKKwkJCQlWX21ydDZzdGF0
Lm1ydDZzX3VwcV9zb2NrZnVsbCsrOwogCQkJCWZyZWUocnRlLCBNX01SVEFCTEU2KTsKIAkJCQlt
X2ZyZWVtKG1iMCk7CiAJCQkJZnJlZShydCwgTV9NUlRBQkxFNik7CkBAIC0xMjMyLDcgKzEyNTUs
NyBAQAogCQkJCXJldHVybiAoRU5PQlVGUyk7CiAJCQl9CiAKLQkJCW1ydDZzdGF0Lm1ydDZzX3Vw
Y2FsbHMrKzsKKwkJCVZfbXJ0NnN0YXQubXJ0NnNfdXBjYWxscysrOwogCiAJCQkvKiBpbnNlcnQg
bmV3IGVudHJ5IGF0IGhlYWQgb2YgaGFzaCBjaGFpbiAqLwogCQkJYnplcm8ocnQsIHNpemVvZigq
cnQpKTsKQEAgLTEyNDMsMTIgKzEyNjYsMTIgQEAKIAkJCXJ0LT5tZjZjX21jYXN0Z3JwLnNpbjZf
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwogCQkJcnQtPm1mNmNfbWNhc3RncnAu
c2luNl9hZGRyID0gaXA2LT5pcDZfZHN0OwogCQkJcnQtPm1mNmNfZXhwaXJlID0gVVBDQUxMX0VY
UElSRTsKLQkJCW42ZXhwaXJlW2hhc2hdKys7CisJCQlWX242ZXhwaXJlW2hhc2hdKys7CiAJCQly
dC0+bWY2Y19wYXJlbnQgPSBNRjZDX0lOQ09NUExFVEVfUEFSRU5UOwogCiAJCQkvKiBsaW5rIGlu
dG8gdGFibGUgKi8KLQkJCXJ0LT5tZjZjX25leHQgID0gbWY2Y3RhYmxlW2hhc2hdOwotCQkJbWY2
Y3RhYmxlW2hhc2hdID0gcnQ7CisJCQlydC0+bWY2Y19uZXh0ICA9IFZfbWY2Y3RhYmxlW2hhc2hd
OworCQkJVl9tZjZjdGFibGVbaGFzaF0gPSBydDsKIAkJCS8qIEFkZCB0aGlzIGVudHJ5IHRvIHRo
ZSBlbmQgb2YgdGhlIHF1ZXVlICovCiAJCQlydC0+bWY2Y19zdGFsbCA9IHJ0ZTsKIAkJfSBlbHNl
IHsKQEAgLTEyNTgsNyArMTI4MSw3IEBACiAKIAkJCWZvciAocCA9ICZydC0+bWY2Y19zdGFsbDsg
KnAgIT0gTlVMTDsgcCA9ICYoKnApLT5uZXh0KQogCQkJCWlmICgrK25wa3RzID4gTUFYX1VQUTYp
IHsKLQkJCQkJbXJ0NnN0YXQubXJ0NnNfdXBxX292Zmx3Kys7CisJCQkJCVZfbXJ0NnN0YXQubXJ0
NnNfdXBxX292Zmx3Kys7CiAJCQkJCWZyZWUocnRlLCBNX01SVEFCTEU2KTsKIAkJCQkJbV9mcmVl
bShtYjApOwogCQkJCQlzcGx4KHMpOwpAQCAtMTI4OSw3ICsxMzEyLDcgQEAKIHN0YXRpYyB2b2lk
CiBleHBpcmVfdXBjYWxscyh2b2lkICp1bnVzZWQpCiB7Ci0JSU5JVF9WTkVUX0lORVQ2KGN1cnZu
ZXQpOworCUlOSVRfVk5FVF9JTkVUNiggKHN0cnVjdCB2bmV0Kil1bnVzZWQgKTsKIAlzdHJ1Y3Qg
cnRkZXRxICpydGU7CiAJc3RydWN0IG1mNmMgKm1mYywgKipucHRyOwogCWludCBpOwpAQCAtMTI5
Nyw5ICsxMzIwLDkgQEAKIAogCXMgPSBzcGxuZXQoKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUY2Q1RC
TFNJWjsgaSsrKSB7Ci0JCWlmIChuNmV4cGlyZVtpXSA9PSAwKQorCQlpZiAoVl9uNmV4cGlyZVtp
XSA9PSAwKQogCQkJY29udGludWU7Ci0JCW5wdHIgPSAmbWY2Y3RhYmxlW2ldOworCQlucHRyID0g
JlZfbWY2Y3RhYmxlW2ldOwogCQl3aGlsZSAoKG1mYyA9ICpucHRyKSAhPSBOVUxMKSB7CiAJCQly
dGUgPSBtZmMtPm1mNmNfc3RhbGw7CiAJCQkvKgpAQCAtMTMyOSw4ICsxMzUyLDggQEAKIAkJCQkJ
ZnJlZShydGUsIE1fTVJUQUJMRTYpOwogCQkJCQlydGUgPSBuOwogCQkJCX0gd2hpbGUgKHJ0ZSAh
PSBOVUxMKTsKLQkJCQltcnQ2c3RhdC5tcnQ2c19jYWNoZV9jbGVhbnVwcysrOwotCQkJCW42ZXhw
aXJlW2ldLS07CisJCQkJVl9tcnQ2c3RhdC5tcnQ2c19jYWNoZV9jbGVhbnVwcysrOworCQkJCVZf
bjZleHBpcmVbaV0tLTsKIAogCQkJCSpucHRyID0gbWZjLT5tZjZjX25leHQ7CiAJCQkJZnJlZSht
ZmMsIE1fTVJUQUJMRTYpOwpAQCAtMTMzOSw5ICsxMzYyLDkgQEAKIAkJCX0KIAkJfQogCX0KKwlj
YWxsb3V0X3Jlc2V0KCZWX2V4cGlyZV91cGNhbGxzX2NoNiwgRVhQSVJFX1RJTUVPVVQsCisJICAg
IGV4cGlyZV91cGNhbGxzLCB1bnVzZWQpOwogCXNwbHgocyk7Ci0JY2FsbG91dF9yZXNldCgmZXhw
aXJlX3VwY2FsbHNfY2gsIEVYUElSRV9USU1FT1VULAotCSAgICBleHBpcmVfdXBjYWxscywgTlVM
TCk7CiB9CiAKIC8qCkBAIC0xMzc3LDE2ICsxNDAwLDE2IEBACiAJICogZm9yIGl0cyBvcmlnaW4u
CiAJICovCiAJbWlmaSA9IHJ0LT5tZjZjX3BhcmVudDsKLQlpZiAoKG1pZmkgPj0gbnVtbWlmcykg
fHwgKG1pZjZ0YWJsZVttaWZpXS5tNl9pZnAgIT0gaWZwKSkgeworCWlmICgobWlmaSA+PSBWX251
bW1pZnMpIHx8IChWX21pZjZ0YWJsZVttaWZpXS5tNl9pZnAgIT0gaWZwKSkgewogCQkvKiBjYW1l
IGluIHRoZSB3cm9uZyBpbnRlcmZhY2UgKi8KICNpZmRlZiBNUlQ2REVCVUcKIAkJaWYgKFZfbXJ0
NmRlYnVnICYgREVCVUdfRk9SV0FSRCkKIAkJCWxvZyhMT0dfREVCVUcsCiAJCQkgICAgIndyb25n
IGlmOiBpZmlkICVkIG1pZmkgJWQgbWlmaWZpZCAleFxuIiwKIAkJCSAgICBpZnAtPmlmX2luZGV4
LCBtaWZpLAotCQkJICAgIG1pZjZ0YWJsZVttaWZpXS5tNl9pZnAtPmlmX2luZGV4KTsKKwkJCSAg
ICBWX21pZjZ0YWJsZVttaWZpXS5tNl9pZnAtPmlmX2luZGV4KTsKICNlbmRpZgotCQltcnQ2c3Rh
dC5tcnQ2c193cm9uZ19pZisrOworCQlWX21ydDZzdGF0Lm1ydDZzX3dyb25nX2lmKys7CiAJCXJ0
LT5tZjZjX3dyb25nX2lmKys7CiAJCS8qCiAJCSAqIElmIHdlIGFyZSBkb2luZyBQSU0gcHJvY2Vz
c2luZywgYW5kIHdlIGFyZSBmb3J3YXJkaW5nCkBAIC0xMzk0LDcgKzE0MTcsNyBAQAogCQkgKiBy
b3V0aW5nIGRhZW1vbi4KIAkJICovCiAJCS8qIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYSB2
YWxpZCBtaWYgKi8KLQkJaWYgKG1pZmkgPCBudW1taWZzICYmIG1pZjZ0YWJsZVttaWZpXS5tNl9p
ZnApCisJCWlmIChtaWZpIDwgVl9udW1taWZzICYmIFZfbWlmNnRhYmxlW21pZmldLm02X2lmcCkK
IAkJCWlmIChWX3BpbTYgJiYgKG0tPm1fZmxhZ3MgJiBNX0xPT1ApID09IDApIHsKIAkJCQkvKgog
CQkJCSAqIENoZWNrIHRoZSBNX0xPT1AgZmxhZyB0byBhdm9pZCBhbgpAQCAtMTQ0MCw4ICsxNDYz
LDggQEAKIAkJCQkJcmV0dXJuIChFSU5WQUwpOwogCQkJCX0KIAotCQkJCWZvciAobWlmcCA9IG1p
ZjZ0YWJsZSwgaWlmID0gMDsKLQkJCQkgICAgIGlpZiA8IG51bW1pZnMgJiYgbWlmcCAmJgorCQkJ
CWZvciAobWlmcCA9IFZfbWlmNnRhYmxlLCBpaWYgPSAwOworCQkJCSAgICAgaWlmIDwgVl9udW1t
aWZzICYmIG1pZnAgJiYKIAkJCQkJICAgICBtaWZwLT5tNl9pZnAgIT0gaWZwOwogCQkJCSAgICAg
bWlmcCsrLCBpaWYrKykKIAkJCQkJOwpAQCAtMTQ1OSwxNCArMTQ4MiwxNCBAQAogCQkJCQlicmVh
azsKIAkJCQl9CiAKLQkJCQltcnQ2c3RhdC5tcnQ2c191cGNhbGxzKys7CisJCQkJVl9tcnQ2c3Rh
dC5tcnQ2c191cGNhbGxzKys7CiAKLQkJCQlpZiAoc29ja2V0X3NlbmQoaXA2X21yb3V0ZXIsIG1t
LCAmc2luNikgPCAwKSB7CisJCQkJaWYgKHNvY2tldF9zZW5kKFZfaXA2X21yb3V0ZXIsIG1tLCAm
c2luNikgPCAwKSB7CiAjaWZkZWYgTVJUNkRFQlVHCiAJCQkJCWlmIChWX21ydDZkZWJ1ZykKIAkJ
CQkJCWxvZyhMT0dfV0FSTklORywgIm1kcSwgaXA2X21yb3V0ZXIgc29ja2V0IHF1ZXVlIGZ1bGxc
biIpOwogI2VuZGlmCi0JCQkJCSsrbXJ0NnN0YXQubXJ0NnNfdXBxX3NvY2tmdWxsOworCQkJCQkr
K1ZfbXJ0NnN0YXQubXJ0NnNfdXBxX3NvY2tmdWxsOwogCQkJCQlyZXR1cm4gKEVOT0JVRlMpOwog
CQkJCX0JLyogaWYgc29ja2V0IFEgZnVsbCAqLwogCQkJfQkJLyogaWYgUElNICovCkBAIC0xNDc2
LDExICsxNDk5LDExIEBACiAJLyogSWYgSSBzb3VyY2VkIHRoaXMgcGFja2V0LCBpdCBjb3VudHMg
YXMgb3V0cHV0LCBlbHNlIGl0IHdhcyBpbnB1dC4gKi8KIAlpZiAobS0+bV9wa3RoZHIucmN2aWYg
PT0gTlVMTCkgewogCQkvKiBYWFg6IGlzIHJjdmlmIHJlYWxseSBOVUxMIHdoZW4gb3V0cHV0Pz8g
Ki8KLQkJbWlmNnRhYmxlW21pZmldLm02X3BrdF9vdXQrKzsKLQkJbWlmNnRhYmxlW21pZmldLm02
X2J5dGVzX291dCArPSBwbGVuOworCQlWX21pZjZ0YWJsZVttaWZpXS5tNl9wa3Rfb3V0Kys7CisJ
CVZfbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX291dCArPSBwbGVuOwogCX0gZWxzZSB7Ci0JCW1p
ZjZ0YWJsZVttaWZpXS5tNl9wa3RfaW4rKzsKLQkJbWlmNnRhYmxlW21pZmldLm02X2J5dGVzX2lu
ICs9IHBsZW47CisJCVZfbWlmNnRhYmxlW21pZmldLm02X3BrdF9pbisrOworCQlWX21pZjZ0YWJs
ZVttaWZpXS5tNl9ieXRlc19pbiArPSBwbGVuOwogCX0KIAlydC0+bWY2Y19wa3RfY250Kys7CiAJ
cnQtPm1mNmNfYnl0ZV9jbnQgKz0gcGxlbjsKQEAgLTE0OTYsNyArMTUxOSw3IEBACiAJCVZfaXA2
c3RhdC5pcDZzX2JhZHNjb3BlKys7CiAJCXJldHVybiAoZXJyb3IpOwogCX0KLQlmb3IgKG1pZnAg
PSBtaWY2dGFibGUsIG1pZmkgPSAwOyBtaWZpIDwgbnVtbWlmczsgbWlmcCsrLCBtaWZpKyspIHsK
Kwlmb3IgKG1pZnAgPSBWX21pZjZ0YWJsZSwgbWlmaSA9IDA7IG1pZmkgPCBWX251bW1pZnM7IG1p
ZnArKywgbWlmaSsrKSB7CiAJCWlmIChJRl9JU1NFVChtaWZpLCAmcnQtPm1mNmNfaWZzZXQpKSB7
CiAJCQkvKgogCQkJICogY2hlY2sgaWYgdGhlIG91dGdvaW5nIHBhY2tldCBpcyBnb2luZyB0byBi
cmVhawpAQCAtMTUwNCwxMiArMTUyNywxMiBAQAogCQkJICogWFhYIEZvciBwYWNrZXRzIHRocm91
Z2ggUElNIHJlZ2lzdGVyIHR1bm5lbAogCQkJICogaW50ZXJmYWNlLCB3ZSBiZWxpZXZlIGEgcm91
dGluZyBkYWVtb24uCiAJCQkgKi8KLQkJCWlmICghKG1pZjZ0YWJsZVtydC0+bWY2Y19wYXJlbnRd
Lm02X2ZsYWdzICYKKwkJCWlmICghKFZfbWlmNnRhYmxlW3J0LT5tZjZjX3BhcmVudF0ubTZfZmxh
Z3MgJgogCQkJICAgICAgTUlGRl9SRUdJU1RFUikgJiYKLQkJCSAgICAhKG1pZjZ0YWJsZVttaWZp
XS5tNl9mbGFncyAmIE1JRkZfUkVHSVNURVIpKSB7Ci0JCQkJaWYgKGluNl9zZXRzY29wZSgmc3Jj
MCwgbWlmNnRhYmxlW21pZmldLm02X2lmcCwKKwkJCSAgICAhKFZfbWlmNnRhYmxlW21pZmldLm02
X2ZsYWdzICYgTUlGRl9SRUdJU1RFUikpIHsKKwkJCQlpZiAoaW42X3NldHNjb3BlKCZzcmMwLCBW
X21pZjZ0YWJsZVttaWZpXS5tNl9pZnAsCiAJCQkJICAgICZvc3pvbmUpIHx8Ci0JCQkJICAgIGlu
Nl9zZXRzY29wZSgmZHN0MCwgbWlmNnRhYmxlW21pZmldLm02X2lmcCwKKwkJCQkgICAgaW42X3Nl
dHNjb3BlKCZkc3QwLCBWX21pZjZ0YWJsZVttaWZpXS5tNl9pZnAsCiAJCQkJICAgICZvZHpvbmUp
IHx8CiAJCQkJICAgIGlzem9uZSAhPSBvc3pvbmUgfHwKIAkJCQkgICAgaWR6b25lICE9IG9kem9u
ZSkgewpAQCAtMTU3NSw3ICsxNTk4LDcgQEAKICNpZmRlZiBNUlQ2REVCVUcKIAkJaWYgKFZfbXJ0
NmRlYnVnICYgREVCVUdfWE1JVCkKIAkJCWxvZyhMT0dfREVCVUcsICJwaHlpbnRfc2VuZCBvbiBt
aWYgJWQgZXJyICVkXG4iLAotCQkJICAgIG1pZnAgLSBtaWY2dGFibGUsIGVycm9yKTsKKwkJCSAg
ICBtaWZwIC0gVl9taWY2dGFibGUsIGVycm9yKTsKICNlbmRpZgogCQlzcGx4KHMpOwogCQlyZXR1
cm47CkBAIC0xNjExLDcgKzE2MzQsNyBAQAogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2
ZGVidWcgJiBERUJVR19YTUlUKQogCQkJbG9nKExPR19ERUJVRywgInBoeWludF9zZW5kIG9uIG1p
ZiAlZCBlcnIgJWRcbiIsCi0JCQkgICAgbWlmcCAtIG1pZjZ0YWJsZSwgZXJyb3IpOworCQkJICAg
IG1pZnAgLSBWX21pZjZ0YWJsZSwgZXJyb3IpOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJLyoKQEAg
LTE2NTksNyArMTY4Miw3IEBACiAJCSAgICBpcDZfc3ByaW50ZihpcDZidWZkLCAmaXA2LT5pcDZf
ZHN0KSk7CiAJfQogI2VuZGlmCi0JKytwaW02c3RhdC5waW02c19zbmRfcmVnaXN0ZXJzOworCSsr
Vl9waW02c3RhdC5waW02c19zbmRfcmVnaXN0ZXJzOwogCiAJLyogTWFrZSBhIGNvcHkgb2YgdGhl
IHBhY2tldCB0byBzZW5kIHRvIHRoZSB1c2VyIGxldmVsIHByb2Nlc3MgKi8KIAlNR0VUSERSKG1t
LCBNX0RPTlRXQUlULCBNVF9IRUFERVIpOwpAQCAtMTY5MSwxOCArMTcxNCwxOCBAQAogCWltNi0+
aW02X21zZ3R5cGUgICAgICA9IE1SVDZNU0dfV0hPTEVQS1Q7CiAJaW02LT5pbTZfbWJ6ICAgICAg
ICAgID0gMDsKIAotCWltNi0+aW02X21pZiA9IG1pZiAtIG1pZjZ0YWJsZTsKKwlpbTYtPmltNl9t
aWYgPSBtaWYgLSBWX21pZjZ0YWJsZTsKIAogCS8qIGlpZiBpbmZvIGlzIG5vdCBnaXZlbiBmb3Ig
cmVnLiBlbmNhcC5uICovCi0JbXJ0NnN0YXQubXJ0NnNfdXBjYWxscysrOworCVZfbXJ0NnN0YXQu
bXJ0NnNfdXBjYWxscysrOwogCi0JaWYgKHNvY2tldF9zZW5kKGlwNl9tcm91dGVyLCBtbSwgJnNp
bjYpIDwgMCkgeworCWlmIChzb2NrZXRfc2VuZChWX2lwNl9tcm91dGVyLCBtbSwgJnNpbjYpIDwg
MCkgewogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2ZGVidWcpCiAJCQlsb2coTE9HX1dB
Uk5JTkcsCiAJCQkgICAgInJlZ2lzdGVyX3NlbmQ6IGlwNl9tcm91dGVyIHNvY2tldCBxdWV1ZSBm
dWxsXG4iKTsKICNlbmRpZgotCQkrK21ydDZzdGF0Lm1ydDZzX3VwcV9zb2NrZnVsbDsKKwkJKytW
X21ydDZzdGF0Lm1ydDZzX3VwcV9zb2NrZnVsbDsKIAkJcmV0dXJuIChFTk9CVUZTKTsKIAl9CiAJ
cmV0dXJuICgwKTsKQEAgLTE3MjYsNyArMTc0OSw3IEBACiAJaW50IG1pbmxlbjsKIAlpbnQgb2Zm
ID0gKm9mZnA7CiAKLQkrK3BpbTZzdGF0LnBpbTZzX3Jjdl90b3RhbDsKKwkrK1ZfcGltNnN0YXQu
cGltNnNfcmN2X3RvdGFsOwogCiAJaXA2ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKIAlw
aW1sZW4gPSBtLT5tX3BrdGhkci5sZW4gLSAqb2ZmcDsKQEAgLTE3MzUsNyArMTc1OCw3IEBACiAJ
ICogVmFsaWRhdGUgbGVuZ3RocwogCSAqLwogCWlmIChwaW1sZW4gPCBQSU1fTUlOTEVOKSB7Ci0J
CSsrcGltNnN0YXQucGltNnNfcmN2X3Rvb3Nob3J0OworCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2
X3Rvb3Nob3J0OwogI2lmZGVmIE1SVDZERUJVRwogCQlpZiAoVl9tcnQ2ZGVidWcgJiBERUJVR19Q
SU0pCiAJCQlsb2coTE9HX0RFQlVHLCJwaW02X2lucHV0OiBQSU0gcGFja2V0IHRvbyBzaG9ydFxu
Iik7CkBAIC0xNzY4LDcgKzE3OTEsNyBAQAogI2Vsc2UKIAlJUDZfRVhUSERSX0dFVChwaW0sIHN0
cnVjdCBwaW0gKiwgbSwgb2ZmLCBtaW5sZW4pOwogCWlmIChwaW0gPT0gTlVMTCkgewotCQlwaW02
c3RhdC5waW02c19yY3ZfdG9vc2hvcnQrKzsKKwkJVl9waW02c3RhdC5waW02c19yY3ZfdG9vc2hv
cnQrKzsKIAkJcmV0dXJuIChJUFBST1RPX0RPTkUpOwogCX0KICNlbmRpZgpAQCAtMTc4OCw3ICsx
ODExLDcgQEAKIAkJCWNrc3VtbGVuID0gcGltbGVuOwogCiAJCWlmIChpbjZfY2tzdW0obSwgSVBQ
Uk9UT19QSU0sIG9mZiwgY2tzdW1sZW4pKSB7Ci0JCQkrK3BpbTZzdGF0LnBpbTZzX3Jjdl9iYWRz
dW07CisJCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X2JhZHN1bTsKICNpZmRlZiBNUlQ2REVCVUcK
IAkJCWlmIChWX21ydDZkZWJ1ZyAmIERFQlVHX1BJTSkKIAkJCQlsb2coTE9HX0RFQlVHLApAQCAt
MTgwMiw3ICsxODI1LDcgQEAKIAogCS8qIFBJTSB2ZXJzaW9uIGNoZWNrICovCiAJaWYgKHBpbS0+
cGltX3ZlciAhPSBQSU1fVkVSU0lPTikgewotCQkrK3BpbTZzdGF0LnBpbTZzX3Jjdl9iYWR2ZXJz
aW9uOworCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X2JhZHZlcnNpb247CiAjaWZkZWYgTVJUNkRF
QlVHCiAJCWxvZyhMT0dfRVJSLAogCQkgICAgInBpbTZfaW5wdXQ6IGluY29ycmVjdCB2ZXJzaW9u
ICVkLCBleHBlY3RpbmcgJWRcbiIsCkBAIC0xODI4LDE0ICsxODUxLDE0IEBACiAJCWNoYXIgaXA2
YnVmc1tJTkVUNl9BRERSU1RSTEVOXSwgaXA2YnVmZFtJTkVUNl9BRERSU1RSTEVOXTsKICNlbmRp
ZgogCi0JCSsrcGltNnN0YXQucGltNnNfcmN2X3JlZ2lzdGVyczsKKwkJKytWX3BpbTZzdGF0LnBp
bTZzX3Jjdl9yZWdpc3RlcnM7CiAKLQkJaWYgKChyZWdfbWlmX251bSA+PSBudW1taWZzKSB8fCAo
cmVnX21pZl9udW0gPT0gKG1pZmlfdCkgLTEpKSB7CisJCWlmICgoVl9yZWdfbWlmX251bSA+PSBW
X251bW1pZnMpIHx8IChWX3JlZ19taWZfbnVtID09IChtaWZpX3QpIC0xKSkgewogI2lmZGVmIE1S
VDZERUJVRwogCQkJaWYgKFZfbXJ0NmRlYnVnICYgREVCVUdfUElNKQogCQkJCWxvZyhMT0dfREVC
VUcsCiAJCQkJICAgICJwaW02X2lucHV0OiByZWdpc3RlciBtaWYgbm90IHNldDogJWRcbiIsCi0J
CQkJICAgIHJlZ19taWZfbnVtKTsKKwkJCQkgICAgVl9yZWdfbWlmX251bSk7CiAjZW5kaWYKIAkJ
CW1fZnJlZW0obSk7CiAJCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CkBAIC0xODUwLDggKzE4NzMs
OCBAQAogCQkgKiBWYWxpZGF0ZSBsZW5ndGgKIAkJICovCiAJCWlmIChwaW1sZW4gPCBQSU02X1JF
R19NSU5MRU4pIHsKLQkJCSsrcGltNnN0YXQucGltNnNfcmN2X3Rvb3Nob3J0OwotCQkJKytwaW02
c3RhdC5waW02c19yY3ZfYmFkcmVnaXN0ZXJzOworCQkJKytWX3BpbTZzdGF0LnBpbTZzX3Jjdl90
b29zaG9ydDsKKwkJCSsrVl9waW02c3RhdC5waW02c19yY3ZfYmFkcmVnaXN0ZXJzOwogI2lmZGVm
IE1SVDZERUJVRwogCQkJbG9nKExPR19FUlIsCiAJCQkgICAgInBpbTZfaW5wdXQ6IHJlZ2lzdGVy
IHBhY2tldCBzaXplIHRvbyAiCkBAIC0xODc1LDcgKzE4OTgsNyBAQAogCiAJCS8qIHZlcmlmeSB0
aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGlubmVyIHBhY2tldCAqLwogCQlpZiAoKGVpcDYtPmlw
Nl92ZmMgJiBJUFY2X1ZFUlNJT05fTUFTSykgIT0gSVBWNl9WRVJTSU9OKSB7Ci0JCQkrK3BpbTZz
dGF0LnBpbTZzX3Jjdl9iYWRyZWdpc3RlcnM7CisJCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X2Jh
ZHJlZ2lzdGVyczsKICNpZmRlZiBNUlQ2REVCVUcKIAkJCWxvZyhMT0dfREVCVUcsICJwaW02X2lu
cHV0OiBpbnZhbGlkIElQIHZlcnNpb24gKCVkKSAiCiAJCQkgICAgIm9mIHRoZSBpbm5lciBwYWNr
ZXRcbiIsCkBAIC0xODg3LDcgKzE5MTAsNyBAQAogCiAJCS8qIHZlcmlmeSB0aGUgaW5uZXIgcGFj
a2V0IGlzIGRlc3RpbmVkIHRvIGEgbWNhc3QgZ3JvdXAgKi8KIAkJaWYgKCFJTjZfSVNfQUREUl9N
VUxUSUNBU1QoJmVpcDYtPmlwNl9kc3QpKSB7Ci0JCQkrK3BpbTZzdGF0LnBpbTZzX3Jjdl9iYWRy
ZWdpc3RlcnM7CisJCQkrK1ZfcGltNnN0YXQucGltNnNfcmN2X2JhZHJlZ2lzdGVyczsKICNpZmRl
ZiBNUlQ2REVCVUcKIAkJCWlmIChWX21ydDZkZWJ1ZyAmIERFQlVHX1BJTSkKIAkJCQlsb2coTE9H
X0RFQlVHLApAQCAtMTkyNCwxMSArMTk0NywxMSBAQAogCQkJICAgICJzcmMgJXMsIGRzdCAlcywg
bWlmICVkXG4iLAogCQkJICAgIGlwNl9zcHJpbnRmKGlwNmJ1ZnMsICZlaXA2LT5pcDZfc3JjKSwK
IAkJCSAgICBpcDZfc3ByaW50ZihpcDZidWZkLCAmZWlwNi0+aXA2X2RzdCksCi0JCQkgICAgcmVn
X21pZl9udW0pOworCQkJICAgIFZfcmVnX21pZl9udW0pOwogCQl9CiAjZW5kaWYKIAotCQlyYyA9
IGlmX3NpbWxvb3AobWlmNnRhYmxlW3JlZ19taWZfbnVtXS5tNl9pZnAsIG0sCisJCXJjID0gaWZf
c2ltbG9vcChWX21pZjZ0YWJsZVtWX3JlZ19taWZfbnVtXS5tNl9pZnAsIG0sCiAJCQkJZHN0LnNp
bjZfZmFtaWx5LCAwKTsKIAogCQkvKiBwcmVwYXJlIHRoZSByZWdpc3RlciBoZWFkIHRvIHNlbmQg
dG8gdGhlIG1yb3V0aW5nIGRhZW1vbiAqLwpkaWZmIC11ciBzeXMuMjAwODEwMTUvbmV0aW5ldDYv
aXA2X21yb3V0ZS5oIHN5cy9uZXRpbmV0Ni9pcDZfbXJvdXRlLmgKLS0tIHN5cy4yMDA4MTAxNS9u
ZXRpbmV0Ni9pcDZfbXJvdXRlLmgJMjAwOC0xMC0xNSAwODoyNToyOC4wMDAwMDAwMDAgLTA3MDAK
KysrIHN5cy9uZXRpbmV0Ni9pcDZfbXJvdXRlLmgJMjAwOC0xMS0wNSAxMzoyMTo1Ni4wMDAwMDAw
MDAgLTA4MDAKQEAgLTI2Niw2ICsyNjYsNyBAQAogZXh0ZXJuIGludAkoKmlwNl9tcm91dGVyX2dl
dCkoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nrb3B0ICpzb3B0KTsKIGV4dGVybiBpbnQJ
KCppcDZfbXJvdXRlcl9kb25lKSh2b2lkKTsKIGV4dGVybiBpbnQJKCptcnQ2X2lvY3RsKShpbnQs
IGNhZGRyX3QpOworCiAjZW5kaWYgLyogX0tFUk5FTCAqLwogCiAjZW5kaWYgLyogIV9ORVRJTkVU
Nl9JUDZfTVJPVVRFX0hfICovCmRpZmYgLXVyIHN5cy4yMDA4MTAxNS9uZXRpbmV0Ni9pcDZfb3V0
cHV0LmMgc3lzL25ldGluZXQ2L2lwNl9vdXRwdXQuYwotLS0gc3lzLjIwMDgxMDE1L25ldGluZXQ2
L2lwNl9vdXRwdXQuYwkyMDA4LTEwLTE1IDA4OjI1OjI4LjAwMDAwMDAwMCAtMDcwMAorKysgc3lz
L25ldGluZXQ2L2lwNl9vdXRwdXQuYwkyMDA4LTEwLTI4IDIwOjAxOjIyLjAwMDAwMDAwMCAtMDcw
MApAQCAtNzQ0LDcgKzc0NCw3IEBACiAJCQkgKiBhYm92ZSwgd2lsbCBiZSBmb3J3YXJkZWQgYnkg
dGhlIGlwNl9pbnB1dCgpIHJvdXRpbmUsCiAJCQkgKiBpZiBuZWNlc3NhcnkuCiAJCQkgKi8KLQkJ
CWlmIChpcDZfbXJvdXRlciAmJiAoZmxhZ3MgJiBJUFY2X0ZPUldBUkRJTkcpID09IDApIHsKKwkJ
CWlmIChWX2lwNl9tcm91dGVyICYmIChmbGFncyAmIElQVjZfRk9SV0FSRElORykgPT0gMCkgewog
CQkJCS8qCiAJCQkJICogWFhYOiBpcDZfbWZvcndhcmQgZXhwZWN0cyB0aGF0IHJjdmlmIGlzIE5V
TEwKIAkJCQkgKiB3aGVuIGl0IGlzIGNhbGxlZCBmcm9tIHRoZSBvcmlnaW5hdGluZyBwYXRoLgpk
aWZmIC11ciBzeXMuMjAwODEwMTUvbmV0aW5ldDYvaXA2X3Zhci5oIHN5cy9uZXRpbmV0Ni9pcDZf
dmFyLmgKLS0tIHN5cy4yMDA4MTAxNS9uZXRpbmV0Ni9pcDZfdmFyLmgJMjAwOC0xMC0xNSAwODoy
NToyOC4wMDAwMDAwMDAgLTA3MDAKKysrIHN5cy9uZXRpbmV0Ni9pcDZfdmFyLmgJMjAwOC0xMC0y
OCAyMDowMToyMi4wMDAwMDAwMDAgLTA3MDAKQEAgLTI5Miw4ICsyOTIsOCBAQAogZXh0ZXJuIGlu
dAlpcDZfdjZvbmx5OwogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3Qgc29ja2V0ICppcDZfbXJvdXRl
cjsJLyogbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uICovCiAjaWZuZGVmIFZJTUFHRQorZXh0ZXJu
IHN0cnVjdCBzb2NrZXQgKmlwNl9tcm91dGVyOwkvKiBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24g
Ki8KIGV4dGVybiBpbnQJaXA2X3NlbmRyZWRpcmVjdHM7CS8qIHNlbmQgSVAgcmVkaXJlY3RzIHdo
ZW4gZm9yd2FyZGluZz8gKi8KIGV4dGVybiBpbnQJaXA2X21heGZyYWdwYWNrZXRzOyAvKiBNYXhp
bXVtIHBhY2tldHMgaW4gcmVhc3NlbWJseSBxdWV1ZSAqLwogZXh0ZXJuIGludAlpcDZfbWF4ZnJh
Z3M7CS8qIE1heGltdW0gZnJhZ21lbnRzIGluIHJlYXNzZW1ibHkgcXVldWUgKi8KZGlmZiAtdXIg
c3lzLjIwMDgxMDE1L25ldGluZXQ2L21sZDYuYyBzeXMvbmV0aW5ldDYvbWxkNi5jCi0tLSBzeXMu
MjAwODEwMTUvbmV0aW5ldDYvbWxkNi5jCTIwMDgtMTAtMTUgMDg6MjU6MjguMDAwMDAwMDAwIC0w
NzAwCisrKyBzeXMvbmV0aW5ldDYvbWxkNi5jCTIwMDgtMTAtMjggMjA6MDE6MjIuMDAwMDAwMDAw
IC0wNzAwCkBAIC01MTgsNyArNTE4LDcgQEAKIAkgKiBSZXF1ZXN0IGxvb3BiYWNrIG9mIHRoZSBy
ZXBvcnQgaWYgd2UgYXJlIGFjdGluZyBhcyBhIG11bHRpY2FzdAogCSAqIHJvdXRlciwgc28gdGhh
dCB0aGUgcHJvY2Vzcy1sZXZlbCByb3V0aW5nIGRhZW1vbiBjYW4gaGVhciBpdC4KIAkgKi8KLQlp
bTZvLmltNm9fbXVsdGljYXN0X2xvb3AgPSAoaXA2X21yb3V0ZXIgIT0gTlVMTCk7CisJaW02by5p
bTZvX211bHRpY2FzdF9sb29wID0gKFZfaXA2X21yb3V0ZXIgIT0gTlVMTCk7CiAKIAkvKiBpbmNy
ZW1lbnQgb3V0cHV0IHN0YXRpY3RpY3MgKi8KIAlWX2ljbXA2c3RhdC5pY3A2c19vdXRoaXN0W3R5
cGVdKys7CmRpZmYgLXVyIHN5cy4yMDA4MTAxNS9uZXRpbmV0Ni9yYXdfaXA2LmMgc3lzL25ldGlu
ZXQ2L3Jhd19pcDYuYwotLS0gc3lzLjIwMDgxMDE1L25ldGluZXQ2L3Jhd19pcDYuYwkyMDA4LTEw
LTE1IDA4OjI1OjI4LjAwMDAwMDAwMCAtMDcwMAorKysgc3lzL25ldGluZXQ2L3Jhd19pcDYuYwky
MDA4LTEwLTI4IDIwOjAxOjIyLjAwMDAwMDAwMCAtMDcwMApAQCAtMTI5LDcgKzEyOSw5IEBACiAv
KgogICogSG9va3MgZm9yIG11bHRpY2FzdCBmb3J3YXJkaW5nLgogICovCisjaWZuZGVmIFZJTUFH
RQogc3RydWN0IHNvY2tldCAqaXA2X21yb3V0ZXIgPSBOVUxMOworI2VuZGlmCiBpbnQgKCppcDZf
bXJvdXRlcl9zZXQpKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2tvcHQgKik7CiBpbnQgKCpp
cDZfbXJvdXRlcl9nZXQpKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2tvcHQgKik7CiBpbnQg
KCppcDZfbXJvdXRlcl9kb25lKSh2b2lkKTsKQEAgLTU5OSwxMiArNjAxLDEzIEBACiByaXA2X2Rl
dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKIHsKIAlJTklUX1ZORVRfSU5FVChzby0+c29fdm5ldCk7
CisJSU5JVF9WTkVUX0lORVQ2KHNvLT5zb192bmV0KTsKIAlzdHJ1Y3QgaW5wY2IgKmlucDsKIAog
CWlucCA9IHNvdG9pbnBjYihzbyk7CiAJS0FTU0VSVChpbnAgIT0gTlVMTCwgKCJyaXA2X2RldGFj
aDogaW5wID09IE5VTEwiKSk7CiAKLQlpZiAoc28gPT0gaXA2X21yb3V0ZXIgJiYgaXA2X21yb3V0
ZXJfZG9uZSkKKwlpZiAoc28gPT0gVl9pcDZfbXJvdXRlciAmJiBpcDZfbXJvdXRlcl9kb25lKQog
CQlpcDZfbXJvdXRlcl9kb25lKCk7CiAJLyogeHh4OiBSU1ZQICovCiAJSU5QX0lORk9fV0xPQ0so
JlZfcmlwY2JpbmZvKTsKZGlmZiAtdXIgc3lzLjIwMDgxMDE1L25ldGluZXQ2L3ZpbmV0Ni5oIHN5
cy9uZXRpbmV0Ni92aW5ldDYuaAotLS0gc3lzLjIwMDgxMDE1L25ldGluZXQ2L3ZpbmV0Ni5oCTIw
MDgtMTAtMTUgMDg6MjU6MjguMDAwMDAwMDAwIC0wNzAwCisrKyBzeXMvbmV0aW5ldDYvdmluZXQ2
LmgJMjAwOC0xMC0yOSAxMjo1ODo1Mi4wMDAwMDAwMDAgLTA3MDAKQEAgLTQzLDYgKzQzLDggQEAK
ICNpbmNsdWRlIDxuZXRpbmV0Ni9zY29wZTZfdmFyLmg+CiAjaW5jbHVkZSA8bmV0aW5ldDYvaW42
X2lmYXR0YWNoLmg+CiAjaW5jbHVkZSA8bmV0aW5ldDYvbmQ2Lmg+CisjaW5jbHVkZSA8bmV0aW5l
dDYvaXA2X21yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldGluZXQ2L3BpbTZfdmFyLmg+IC8qIHN0cnVj
dCBwaW02c3RhdCAqLwogCiAjZGVmaW5lIElOSVRfVk5FVF9JTkVUNih2bmV0KSBcCiAJSU5JVF9G
Uk9NX1ZORVQodm5ldCwgVk5FVF9NT0RfSU5FVDYsIFwKQEAgLTk1LDYgKzk3LDcgQEAKIAkvL2lu
dAkJCQlfaWNtcDZfbm9kZWluZm87CiAKIAlpbnQgCQkJCV9pcDZfZm9yd2FyZGluZzsKKwlzdHJ1
Y3Qgc29ja2V0ICoJCQlfaXA2X21yb3V0ZXI7CiAJaW50CQkJCV9pcDZfc2VuZHJlZGlyZWN0czsK
IAlpbnQJCQkJX2lwNl9kZWZobGltOwogCWludAkJCQlfaXA2X2RlZm1jYXN0aGxpbTsKQEAgLTE0
OSwxNCArMTUyLDI1IEBACiAJdV9pbnQzMl90CQkJX2lwNl90ZW1wX3ByZWZlcnJlZF9saWZldGlt
ZTsKIAl1X2ludDMyX3QJCQlfaXA2X3RlbXBfdmFsaWRfbGlmZXRpbWU7CiAKLQlpbnQJCQkJX2lw
Nl9tcm91dGVyX3ZlcjsKLQlpbnQJCQkJX3BpbTY7Ci0JdV9pbnQJCQkJX21ydDZkZWJ1ZzsKLQog
CWludAkJCQlfaXA2X3RlbXBfcmVnZW5fYWR2YW5jZTsKIAlpbnQJCQkJX2lwNl91c2VfZGVmem9u
ZTsKIAogCXN0cnVjdCBpcDZfcGt0b3B0cwkJX2lwNl9vcHRzOworCisJLyogZnJvbSBpcDZfbXJv
dXRlLmMgKi8KKwlpbnQJCQkJX2lwNl9tcm91dGVyX3ZlcjsgLyogPSAwOyAqLworCXN0cnVjdCBt
cnQ2c3RhdAkJCV9tcnQ2c3RhdDsKKwlzdHJ1Y3QgbWY2YyAqCQkJX21mNmN0YWJsZVtNRjZDVEJM
U0laXTsKKwl1X2NoYXIJCQkJX242ZXhwaXJlW01GNkNUQkxTSVpdOworCXN0cnVjdCBtaWY2IAkJ
CV9taWY2dGFibGVbTUFYTUlGU107CisJdV9pbnQJCQkJX21ydDZkZWJ1ZzsKKwlzdHJ1Y3QgaWZu
ZXQgKgkJCV9tdWx0aWNhc3RfcmVnaXN0ZXJfaWY2OworCW1pZmlfdCAJCQkJX251bW1pZnM7IC8q
ID0gMDsgKi8KKwltaWZpX3QgCQkJCV9yZWdfbWlmX251bTsgLyogPSAobWlmaV90KS0xOyAqLwor
CXN0cnVjdCBwaW02c3RhdAkJCV9waW02c3RhdDsKKwlpbnQgCQkJCV9waW02OworCXVfbG9uZwkJ
CQlfdXBjYWxsX2RhdGFbNTFdOworCXN0cnVjdCBjYWxsb3V0CQkJX2V4cGlyZV91cGNhbGxzX2No
NjsKIH07CiAjZW5kaWYKIApAQCAtMjA2LDYgKzIyMCw3IEBACiAvLyNkZWZpbmUgVl9pY21wNl9u
b2RlaW5mbwkJVk5FVF9JTkVUNihpY21wNl9ub2RlaW5mbykKIAogI2RlZmluZSBWX2lwNl9mb3J3
YXJkaW5nCQlWTkVUX0lORVQ2KGlwNl9mb3J3YXJkaW5nKQorI2RlZmluZSBWX2lwNl9tcm91dGVy
CQkJVk5FVF9JTkVUNihpcDZfbXJvdXRlcikKICNkZWZpbmUgVl9pcDZfc2VuZHJlZGlyZWN0cwkJ
Vk5FVF9JTkVUNihpcDZfc2VuZHJlZGlyZWN0cykKICNkZWZpbmUgVl9pcDZfZGVmaGxpbQkJCVZO
RVRfSU5FVDYoaXA2X2RlZmhsaW0pCiAjZGVmaW5lIFZfaXA2X2RlZm1jYXN0aGxpbQkJVk5FVF9J
TkVUNihpcDZfZGVmbWNhc3RobGltKQpAQCAtMjYwLDEzICsyNzUsMjQgQEAKICNkZWZpbmUgVl9p
cDZfdGVtcF9wcmVmZXJyZWRfbGlmZXRpbWUJVk5FVF9JTkVUNihpcDZfdGVtcF9wcmVmZXJyZWRf
bGlmZXRpbWUpCiAjZGVmaW5lIFZfaXA2X3RlbXBfdmFsaWRfbGlmZXRpbWUJVk5FVF9JTkVUNihp
cDZfdGVtcF92YWxpZF9saWZldGltZSkKIAotI2RlZmluZSBWX2lwNl9tcm91dGVyX3ZlcgkJVk5F
VF9JTkVUNihpcDZfbXJvdXRlcl92ZXIpCi0jZGVmaW5lIFZfcGltNgkJCQlWTkVUX0lORVQ2KHBp
bTYpCi0jZGVmaW5lIFZfbXJ0NmRlYnVnCQkJVk5FVF9JTkVUNihtcnQ2ZGVidWcpCiAjZGVmaW5l
IFZfaXA2X3RlbXBfcmVnZW5fYWR2YW5jZQlWTkVUX0lORVQ2KGlwNl90ZW1wX3JlZ2VuX2FkdmFu
Y2UpCiAKICNkZWZpbmUgVl9pcDZfdXNlX2RlZnpvbmUJCVZORVRfSU5FVDYoaXA2X3VzZV9kZWZ6
b25lKQogCiAjZGVmaW5lIFZfaXA2X29wdHMJCQlWTkVUX0lORVQ2KGlwNl9vcHRzKQogCisjZGVm
aW5lIFZfaXA2X21yb3V0ZXJfdmVyCQlWTkVUX0lORVQ2KGlwNl9tcm91dGVyX3ZlcikKKyNkZWZp
bmUgVl9tcnQ2c3RhdAkJCVZORVRfSU5FVDYobXJ0NnN0YXQpCisjZGVmaW5lIFZfbWY2Y3RhYmxl
CQkJVk5FVF9JTkVUNihtZjZjdGFibGUpCisjZGVmaW5lIFZfbjZleHBpcmUJCQlWTkVUX0lORVQ2
KG42ZXhwaXJlKQorI2RlZmluZSBWX21pZjZ0YWJsZQkJCVZORVRfSU5FVDYobWlmNnRhYmxlKQor
I2RlZmluZSBWX21ydDZkZWJ1ZwkJCVZORVRfSU5FVDYobXJ0NmRlYnVnKQorI2RlZmluZSBWX211
bHRpY2FzdF9yZWdpc3Rlcl9pZjYJVk5FVF9JTkVUNihtdWx0aWNhc3RfcmVnaXN0ZXJfaWY2KQor
I2RlZmluZSBWX251bW1pZnMJCQlWTkVUX0lORVQ2KG51bW1pZnMpCisjZGVmaW5lIFZfcmVnX21p
Zl9udW0JCQlWTkVUX0lORVQ2KHJlZ19taWZfbnVtKQorI2RlZmluZSBWX3BpbTZzdGF0CQkJVk5F
VF9JTkVUNihwaW02c3RhdCkKKyNkZWZpbmUgVl9waW02CQkJCVZORVRfSU5FVDYocGltNikKKyNk
ZWZpbmUgVl91cGNhbGxfZGF0YQkJCVZORVRfSU5FVDYodXBjYWxsX2RhdGEpCisjZGVmaW5lIFZf
ZXhwaXJlX3VwY2FsbHNfY2g2CQlWTkVUX0lORVQ2KGV4cGlyZV91cGNhbGxzX2NoNikKKwogI2Vu
ZGlmIC8qICFfTkVUSU5FVDZfVklORVQ2X0hfICovCmRpZmYgLXVyIHN5cy4yMDA4MTAxNS9uZXRp
cHNlYy9rZXlzb2NrLmMgc3lzL25ldGlwc2VjL2tleXNvY2suYwotLS0gc3lzLjIwMDgxMDE1L25l
dGlwc2VjL2tleXNvY2suYwkyMDA4LTEwLTE1IDA4OjI1OjI5LjAwMDAwMDAwMCAtMDcwMAorKysg
c3lzL25ldGlwc2VjL2tleXNvY2suYwkyMDA4LTEwLTI5IDA3OjU3OjE4LjAwMDAwMDAwMCAtMDcw
MApAQCAtNDI5LDggKzQyOSw4IEBACiAJa3AtPmtwX3Byb21pc2MgPSBrcC0+a3BfcmVnaXN0ZXJl
ZCA9IDA7CiAKIAlpZiAoa3AtPmtwX3Jhdy5yY2JfcHJvdG8uc3BfcHJvdG9jb2wgPT0gUEZfS0VZ
KSAvKiBYWFg6IEFGX0tFWSAqLwotCQlrZXlfY2Iua2V5X2NvdW50Kys7Ci0Ja2V5X2NiLmFueV9j
b3VudCsrOworCQlWX2tleV9jYi5rZXlfY291bnQrKzsKKwlWX2tleV9jYi5hbnlfY291bnQrKzsK
IAlzb2lzY29ubmVjdGVkKHNvKTsKIAlzby0+c29fb3B0aW9ucyB8PSBTT19VU0VMT09QQkFDSzsK
IApkaWZmIC11ciBzeXMuMjAwODEwMTUvc3lzL3ZpbWFnZS5oIHN5cy9zeXMvdmltYWdlLmgKLS0t
IHN5cy4yMDA4MTAxNS9zeXMvdmltYWdlLmgJMjAwOC0xMC0xNSAwODoyNTozMC4wMDAwMDAwMDAg
LTA3MDAKKysrIHN5cy9zeXMvdmltYWdlLmgJMjAwOC0xMS0wNCAxMzo1NjoxOC4wMDAwMDAwMDAg
LTA4MDAKQEAgLTc3LDYgKzc3LDcgQEAKICNkZWZpbmUgVk5FVF9NT0RfSVBYCQkgOQogI2RlZmlu
ZSBWTkVUX01PRF9BVEFMSwkJMTAKICNkZWZpbmUgVk5FVF9NT0RfRElWRVJUCQkxMQorI2RlZmlu
ZSBWTkVUX01PRF9NUk9VVEUJCTEyCiAvKiBzdGF0ZWxlc3MgbW9kdWxlcyAqLwogI2RlZmluZSBW
TkVUX01PRF9OR19XT1JNSE9MRQkxOQogI2RlZmluZSBWTkVUX01PRF9OR19FVEhFUgkyMApAQCAt
MTAzLDYgKzEwNCw3IEBACiAjZGVmaW5lIFZfTU9EX3ZuZXRfcGYJCVZORVRfTU9EX1BGCiAjZGVm
aW5lIFZfTU9EX3ZuZXRfZ2lmCQlWTkVUX01PRF9HSUYKICNkZWZpbmUgVl9NT0Rfdm5ldF9pcHNl
YwlWTkVUX01PRF9JUFNFQworI2RlZmluZSBWX01PRF92bmV0X21yb3V0ZQlWTkVUX01PRF9NUk9V
VEUKIAogI2RlZmluZSBWX01PRF92cHJvY2cJCTAKICNkZWZpbmUgVl9NT0RfdmNwdQkJMAo=

------_=_NextPart_001_01C9402C.548A7819--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0DF156EE7414494187B087A3C279BDB40AF14C23>