Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Feb 2016 22:52:24 +0000
From:      "glebius (Gleb Smirnoff)" <phabric-noreply@FreeBSD.org>
To:        transport@freebsd.org
Subject:   [Differential] [Request, 1, 067 lines] D5180: Gather all mbuf(9) allocation APIs in one place
Message-ID:  <differential-rev-PHID-DREV-bxjtcdv4xb7nazwld5tw-req@FreeBSD.org>

next in thread | raw e-mail | index | archive | help

--b1_75bea7beb39ccff30d15b27f6a127c4f
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

glebius created this revision.
glebius added a reviewer: gnn.
Herald added a subscriber: imp.
Herald added a reviewer: transport.

REVISION SUMMARY
  Before upcoming changes to mbuf(9) gather all allocation APIs
  into kern_mbuf.c, and declare them in sys/mbuf.h
  
  The uipc_mbuf.c now will have only mbuf manipulation routines.
  sys/mbuf.h has only declaration and doesn't diclose internal
  allocator structures.

TEST PLAN
  Since inlining level has reduced, benchmarking is required.

REPOSITORY
  rS FreeBSD src repository

BRANCH
  /head

REVISION DETAIL
  https://reviews.freebsd.org/D5180

AFFECTED FILES
  sys/dev/cxgb/cxgb_adapter.h
  sys/dev/cxgb/cxgb_sge.c
  sys/dev/cxgbe/t4_netmap.c
  sys/dev/cxgbe/t4_sge.c
  sys/dev/netmap/netmap_generic.c
  sys/kern/kern_mbuf.c
  sys/kern/uipc_mbuf.c
  sys/netinet/tcp_pcap.c
  sys/sys/mbuf.h

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: glebius, transport, gnn
Cc: imp

--b1_75bea7beb39ccff30d15b27f6a127c4f
Content-Type: text/x-patch; charset=utf-8; name="D5180.12984.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D5180.12984.patch"

ZGlmZiAtLWdpdCBhL3N5cy9zeXMvbWJ1Zi5oIGIvc3lzL3N5cy9tYnVmLmgKLS0tIGEvc3lzL3N5
cy9tYnVmLmgKKysrIGIvc3lzL3N5cy9tYnVmLmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRl
IDxzeXMvcXVldWUuaD4KICNpZmRlZiBfS0VSTkVMCiAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Ci0j
aW5jbHVkZSA8dm0vdW1hLmg+CiAjaWZkZWYgV0lUTkVTUwogI2luY2x1ZGUgPHN5cy9sb2NrLmg+
CiAjZW5kaWYKQEAgLTgxLDE1ICs4MCw2IEBACiAgKi8KICNkZWZpbmUJbXRvZChtLCB0KQkoKHQp
KChtKS0+bV9kYXRhKSkKICNkZWZpbmUJbXRvZG8obSwgbykJKCh2b2lkICopKCgobSktPm1fZGF0
YSkgKyAobykpKQotCi0vKgotICogQXJndW1lbnQgc3RydWN0dXJlIHBhc3NlZCB0byBVTUEgcm91
dGluZXMgZHVyaW5nIG1idWYgYW5kIHBhY2tldAotICogYWxsb2NhdGlvbnMuCi0gKi8KLXN0cnVj
dCBtYl9hcmdzIHsKLQlpbnQJZmxhZ3M7CS8qIEZsYWdzIGZvciBtYnVmIGJlaW5nIGFsbG9jYXRl
ZCAqLwotCXNob3J0CXR5cGU7CS8qIFR5cGUgb2YgbWJ1ZiBiZWluZyBhbGxvY2F0ZWQgKi8KLX07
CiAjZW5kaWYgLyogX0tFUk5FTCAqLwogCiAvKgpAQCAtNTEzLDIzICs1MDMsNiBAQAogI2RlZmlu
ZQlNQlVGX0NIRUNLU0xFRVAoaG93KQogI2VuZGlmCiAKLS8qCi0gKiBOZXR3b3JrIGJ1ZmZlciBh
bGxvY2F0aW9uIEFQSQotICoKLSAqIFRoZSByZXN0IG9mIGl0IGlzIGRlZmluZWQgaW4ga2Vybi9r
ZXJuX21idWYuYwotICovCi1leHRlcm4gdW1hX3pvbmVfdAl6b25lX21idWY7Ci1leHRlcm4gdW1h
X3pvbmVfdAl6b25lX2NsdXN0OwotZXh0ZXJuIHVtYV96b25lX3QJem9uZV9wYWNrOwotZXh0ZXJu
IHVtYV96b25lX3QJem9uZV9qdW1ib3A7Ci1leHRlcm4gdW1hX3pvbmVfdAl6b25lX2p1bWJvOTsK
LWV4dGVybiB1bWFfem9uZV90CXpvbmVfanVtYm8xNjsKLWV4dGVybiB1bWFfem9uZV90CXpvbmVf
ZXh0X3JlZmNudDsKLQotdm9pZAkJIG1iX2R1cGNsKHN0cnVjdCBtYnVmICosIGNvbnN0IHN0cnVj
dCBtYnVmICopOwotdm9pZAkJIG1iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICopOwotaW50CQkgbV9w
a3RoZHJfaW5pdChzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotCiBzdGF0aWMgX19pbmxpbmUgaW50CiBt
X2dldHR5cGUoaW50IHNpemUpCiB7CkBAIC01ODMsMTg4ICs1NTYsNiBAQAogCW0tPm1fZXh0LmV4
dF9mbGFncyA9IDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZSB1bWFfem9uZV90Ci1tX2dldHpvbmUo
aW50IHNpemUpCi17Ci0JdW1hX3pvbmVfdCB6b25lOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2Fz
ZSBNQ0xCWVRFUzoKLQkJem9uZSA9IHpvbmVfY2x1c3Q7Ci0JCWJyZWFrOwotI2lmIE1KVU1QQUdF
U0laRSAhPSBNQ0xCWVRFUwotCWNhc2UgTUpVTVBBR0VTSVpFOgotCQl6b25lID0gem9uZV9qdW1i
b3A7Ci0JCWJyZWFrOwotI2VuZGlmCi0JY2FzZSBNSlVNOUJZVEVTOgotCQl6b25lID0gem9uZV9q
dW1ibzk7Ci0JCWJyZWFrOwotCWNhc2UgTUpVTTE2QllURVM6Ci0JCXpvbmUgPSB6b25lX2p1bWJv
MTY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXBhbmljKCIlczogaW52YWxpZCBjbHVzdGVyIHNp
emUgJWQiLCBfX2Z1bmNfXywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuICh6b25lKTsKLX0KLQotLyoK
LSAqIEluaXRpYWxpemUgYW4gbWJ1ZiB3aXRoIGxpbmVhciBzdG9yYWdlLgotICoKLSAqIElubGlu
ZSBiZWNhdXNlIHRoZSBjb25zdW1lciB0ZXh0IG92ZXJoZWFkIHdpbGwgYmUgcm91Z2hseSB0aGUg
c2FtZSB0bwotICogaW5pdGlhbGl6ZSBvciBjYWxsIGEgZnVuY3Rpb24gd2l0aCB0aGlzIG1hbnkg
cGFyYW1ldGVycyBhbmQgTV9QS1RIRFIKLSAqIHNob3VsZCBnbyBhd2F5IHdpdGggY29uc3RhbnQg
cHJvcGFnYXRpb24gZm9yICFNR0VUSERSLgotICovCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1tX2lu
aXQoc3RydWN0IG1idWYgKm0sIHVtYV96b25lX3Qgem9uZSBfX3VudXNlZCwgaW50IHNpemUgX191
bnVzZWQsIGludCBob3csCi0gICAgc2hvcnQgdHlwZSwgaW50IGZsYWdzKQotewotCWludCBlcnJv
cjsKLQotCW0tPm1fbmV4dCA9IE5VTEw7Ci0JbS0+bV9uZXh0cGt0ID0gTlVMTDsKLQltLT5tX2Rh
dGEgPSBtLT5tX2RhdDsKLQltLT5tX2xlbiA9IDA7Ci0JbS0+bV9mbGFncyA9IGZsYWdzOwotCW0t
Pm1fdHlwZSA9IHR5cGU7Ci0JaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsKLQkJaWYgKChlcnJvciA9
IG1fcGt0aGRyX2luaXQobSwgaG93KSkgIT0gMCkKLQkJCXJldHVybiAoZXJyb3IpOwotCX0KLQot
CXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBzdHJ1Y3QgbWJ1ZiAqCi1tX2dldChp
bnQgaG93LCBzaG9ydCB0eXBlKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0KLQlhcmdzLmZs
YWdzID0gMDsKLQlhcmdzLnR5cGUgPSB0eXBlOwotCXJldHVybiAodW1hX3phbGxvY19hcmcoem9u
ZV9tYnVmLCAmYXJncywgaG93KSk7Ci19Ci0KLS8qCi0gKiBYWFggVGhpcyBzaG91bGQgYmUgZGVw
cmVjYXRlZCwgdmVyeSBsaXR0bGUgdXNlLgotICovCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1i
dWYgKgotbV9nZXRjbHIoaW50IGhvdywgc2hvcnQgdHlwZSkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsK
LQlzdHJ1Y3QgbWJfYXJncyBhcmdzOwotCi0JYXJncy5mbGFncyA9IDA7Ci0JYXJncy50eXBlID0g
dHlwZTsKLQltID0gdW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAmYXJncywgaG93KTsKLQlpZiAo
bSAhPSBOVUxMKQotCQliemVybyhtLT5tX2RhdGEsIE1MRU4pOwotCXJldHVybiAobSk7Ci19Ci0K
LXN0YXRpYyBfX2lubGluZSBzdHJ1Y3QgbWJ1ZiAqCi1tX2dldGhkcihpbnQgaG93LCBzaG9ydCB0
eXBlKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0KLQlhcmdzLmZsYWdzID0gTV9QS1RIRFI7
Ci0JYXJncy50eXBlID0gdHlwZTsKLQlyZXR1cm4gKHVtYV96YWxsb2NfYXJnKHpvbmVfbWJ1Ziwg
JmFyZ3MsIGhvdykpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1idWYgKgotbV9nZXRj
bChpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IG1iX2FyZ3MgYXJn
czsKLQotCWFyZ3MuZmxhZ3MgPSBmbGFnczsKLQlhcmdzLnR5cGUgPSB0eXBlOwotCXJldHVybiAo
dW1hX3phbGxvY19hcmcoem9uZV9wYWNrLCAmYXJncywgaG93KSk7Ci19Ci0KLXN0YXRpYyBfX2lu
bGluZSBpbnQKLW1fY2xnZXQoc3RydWN0IG1idWYgKm0sIGludCBob3cpCi17Ci0KLQlLQVNTRVJU
KChtLT5tX2ZsYWdzICYgTV9FWFQpID09IDAsICgiJXM6IG1idWYgJXAgaGFzIE1fRVhUIiwKLQkg
ICAgX19mdW5jX18sIG0pKTsKLQltLT5tX2V4dC5leHRfYnVmID0gKGNoYXIgKilOVUxMOwotCXVt
YV96YWxsb2NfYXJnKHpvbmVfY2x1c3QsIG0sIGhvdyk7Ci0JLyoKLQkgKiBPbiBhIGNsdXN0ZXIg
YWxsb2NhdGlvbiBmYWlsdXJlLCBkcmFpbiB0aGUgcGFja2V0IHpvbmUgYW5kIHJldHJ5LAotCSAq
IHdlIG1pZ2h0IGJlIGFibGUgdG8gbG9vc2VuIGEgZmV3IGNsdXN0ZXJzIHVwIG9uIHRoZSBkcmFp
bi4KLQkgKi8KLQlpZiAoKGhvdyAmIE1fTk9XQUlUKSAmJiAobS0+bV9leHQuZXh0X2J1ZiA9PSBO
VUxMKSkgewotCQl6b25lX2RyYWluKHpvbmVfcGFjayk7Ci0JCXVtYV96YWxsb2NfYXJnKHpvbmVf
Y2x1c3QsIG0sIGhvdyk7Ci0JfQotCXJldHVybiAobS0+bV9mbGFncyAmIE1fRVhUKTsKLX0KLQot
LyoKLSAqIG1fY2xqZ2V0KCkgaXMgZGlmZmVyZW50IGZyb20gbV9jbGdldCgpIGFzIGl0IGNhbiBh
bGxvY2F0ZSBjbHVzdGVycyB3aXRob3V0Ci0gKiBhdHRhY2hpbmcgdGhlbSB0byBhbiBtYnVmLiAg
SW4gdGhhdCBjYXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHBvaW50ZXIKLSAqIHRvIHRoZSBj
bHVzdGVyIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gIElmIGFuIG1idWYgd2FzIHNwZWNpZmllZCwg
aXQgZ2V0cwotICogdGhlIGNsdXN0ZXIgYXR0YWNoZWQgdG8gaXQgYW5kIHRoZSByZXR1cm4gdmFs
dWUgY2FuIGJlIHNhZmVseSBpZ25vcmVkLgotICogRm9yIHNpemUgaXQgdGFrZXMgTUNMQllURVMs
IE1KVU1QQUdFU0laRSwgTUpVTTlCWVRFUywgTUpVTTE2QllURVMuCi0gKi8KLXN0YXRpYyBfX2lu
bGluZSB2b2lkICoKLW1fY2xqZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93LCBpbnQgc2l6ZSkK
LXsKLQl1bWFfem9uZV90IHpvbmU7Ci0KLQlpZiAobSAhPSBOVUxMKSB7Ci0JCUtBU1NFUlQoKG0t
Pm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCwgKCIlczogbWJ1ZiAlcCBoYXMgTV9FWFQiLAotCQkgICAg
X19mdW5jX18sIG0pKTsKLQkJbS0+bV9leHQuZXh0X2J1ZiA9IE5VTEw7Ci0JfQotCi0Jem9uZSA9
IG1fZ2V0em9uZShzaXplKTsKLQlyZXR1cm4gKHVtYV96YWxsb2NfYXJnKHpvbmUsIG0sIGhvdykp
OwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotbV9jbGpzZXQoc3RydWN0IG1idWYgKm0sIHZv
aWQgKmNsLCBpbnQgdHlwZSkKLXsKLQl1bWFfem9uZV90IHpvbmU7Ci0JaW50IHNpemU7Ci0KLQlz
d2l0Y2ggKHR5cGUpIHsKLQljYXNlIEVYVF9DTFVTVEVSOgotCQlzaXplID0gTUNMQllURVM7Ci0J
CXpvbmUgPSB6b25lX2NsdXN0OwotCQlicmVhazsKLSNpZiBNSlVNUEFHRVNJWkUgIT0gTUNMQllU
RVMKLQljYXNlIEVYVF9KVU1CT1A6Ci0JCXNpemUgPSBNSlVNUEFHRVNJWkU7Ci0JCXpvbmUgPSB6
b25lX2p1bWJvcDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIEVYVF9KVU1CTzk6Ci0JCXNpemUg
PSBNSlVNOUJZVEVTOwotCQl6b25lID0gem9uZV9qdW1ibzk7Ci0JCWJyZWFrOwotCWNhc2UgRVhU
X0pVTUJPMTY6Ci0JCXNpemUgPSBNSlVNMTZCWVRFUzsKLQkJem9uZSA9IHpvbmVfanVtYm8xNjsK
LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcGFuaWMoIiVzOiB1bmtub3duIGNsdXN0ZXIgdHlwZSAl
ZCIsIF9fZnVuY19fLCB0eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JbS0+bV9kYXRhID0gbS0+bV9l
eHQuZXh0X2J1ZiA9IGNsOwotCW0tPm1fZXh0LmV4dF9mcmVlID0gbS0+bV9leHQuZXh0X2FyZzEg
PSBtLT5tX2V4dC5leHRfYXJnMiA9IE5VTEw7Ci0JbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOwot
CW0tPm1fZXh0LmV4dF90eXBlID0gdHlwZTsKLQltLT5tX2V4dC5leHRfZmxhZ3MgPSAwOwotCW0t
Pm1fZXh0LmV4dF9jbnQgPSB1bWFfZmluZF9yZWZjbnQoem9uZSwgY2wpOwotCW0tPm1fZmxhZ3Mg
fD0gTV9FWFQ7Ci0KLX0KLQogc3RhdGljIF9faW5saW5lIHZvaWQKIG1fY2h0eXBlKHN0cnVjdCBt
YnVmICptLCBzaG9ydCBuZXdfdHlwZSkKIHsKQEAgLTk0NCwxNSArNzM1LDE1IEBACiAKIHN0cnVj
dCB1aW87CiAKK3ZvaWQJCSBtYl9kdXBjbChzdHJ1Y3QgbWJ1ZiAqLCBjb25zdCBzdHJ1Y3QgbWJ1
ZiAqKTsKIHZvaWQJCSBtX2FkaihzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwogaW50CQkgbV9hcHBseShz
dHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKIAkJICAgIGludCAoKikodm9pZCAqLCB2b2lkICosIHVf
aW50KSwgdm9pZCAqKTsKIGludAkJIG1fYXBwZW5kKHN0cnVjdCBtYnVmICosIGludCwgY19jYWRk
cl90KTsKIHZvaWQJCSBtX2NhdChzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKIHZvaWQJ
CSBtX2NhdHBrdChzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKLWludAkJIG1fZXh0YWRk
KHN0cnVjdCBtYnVmICosIGNhZGRyX3QsIHVfaW50LAotCQkgICAgdm9pZCAoKikoc3RydWN0IG1i
dWYgKiwgdm9pZCAqLCB2b2lkICopLCB2b2lkICosIHZvaWQgKiwKLQkJICAgIGludCwgaW50LCBp
bnQpOworaW50CQkgbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdyk7Cit2b2lkIAkJKm1f
Y2xqZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93LCBpbnQgc2l6ZSk7CiBzdHJ1Y3QgbWJ1Zgkq
bV9jb2xsYXBzZShzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCk7CiB2b2lkCQkgbV9jb3B5YmFjayhz
dHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgY19jYWRkcl90KTsKIHZvaWQJCSBtX2NvcHlkYXRhKGNv
bnN0IHN0cnVjdCBtYnVmICosIGludCwgaW50LCBjYWRkcl90KTsKQEAgLTk2NywxMyArNzU4LDIx
IEBACiAJCSAgICB2b2lkICgqKShjaGFyICosIGNhZGRyX3QsIHVfaW50KSk7CiBzdHJ1Y3QgbWJ1
ZgkqbV9kdXAoY29uc3Qgc3RydWN0IG1idWYgKiwgaW50KTsKIGludAkJIG1fZHVwX3BrdGhkcihz
dHJ1Y3QgbWJ1ZiAqLCBjb25zdCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOworaW50CQkgbV9leHRhZGQo
c3RydWN0IG1idWYgKiwgY2FkZHJfdCwgdV9pbnQsCisJCSAgICB2b2lkICgqKShzdHJ1Y3QgbWJ1
ZiAqLCB2b2lkICosIHZvaWQgKiksIHZvaWQgKiwgdm9pZCAqLAorCQkgICAgaW50LCBpbnQsIGlu
dCk7CiB1X2ludAkJIG1fZml4aGRyKHN0cnVjdCBtYnVmICopOwogc3RydWN0IG1idWYJKm1fZnJh
Z21lbnQoc3RydWN0IG1idWYgKiwgaW50LCBpbnQpOworc3RydWN0IG1idWYJKm1fZnJlZShzdHJ1
Y3QgbWJ1ZiAqKTsKIHZvaWQJCSBtX2ZyZWVtKHN0cnVjdCBtYnVmICopOwogc3RydWN0IG1idWYJ
Km1fZ2V0MihpbnQsIGludCwgc2hvcnQsIGludCk7CiBzdHJ1Y3QgbWJ1ZgkqbV9nZXRqY2woaW50
LCBzaG9ydCwgaW50LCBpbnQpOwogc3RydWN0IG1idWYJKm1fZ2V0bTIoc3RydWN0IG1idWYgKiwg
aW50LCBpbnQsIHNob3J0LCBpbnQpOwogc3RydWN0IG1idWYJKm1fZ2V0cHRyKHN0cnVjdCBtYnVm
ICosIGludCwgaW50ICopOworc3RydWN0IG1idWYgCSptX2dldChpbnQgaG93LCBzaG9ydCB0eXBl
KTsKK3N0cnVjdCBtYnVmIAkqbV9nZXRjbChpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3Mp
Oworc3RydWN0IG1idWYgCSptX2dldGhkcihpbnQgaG93LCBzaG9ydCB0eXBlKTsKK2ludAkJIG1f
aW5pdChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdywgc2hvcnQgdHlwZSwgaW50IGZsYWdzKTsKIHVf
aW50CQkgbV9sZW5ndGgoc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiopOwogaW50CQkgbV9t
YnVmdG91aW8oc3RydWN0IHVpbyAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwogdm9pZAkJIG1fbW92
ZV9wa3RoZHIoc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKik7CkBAIC0xMTY3LDIwICs5NjYs
NiBAQAogCSAgICBtX3RhZ19sb2NhdGUobSwgTVRBR19BQklfQ09NUEFULCB0eXBlLCBzdGFydCkp
OwogfQogCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IG1idWYgKgotbV9mcmVlKHN0cnVjdCBtYnVm
ICptKQotewotCXN0cnVjdCBtYnVmICpuID0gbS0+bV9uZXh0OwotCi0JaWYgKChtLT5tX2ZsYWdz
ICYgKE1fUEtUSERSfE1fTk9GUkVFKSkgPT0gKE1fUEtUSERSfE1fTk9GUkVFKSkKLQkJbV90YWdf
ZGVsZXRlX2NoYWluKG0sIE5VTEwpOwotCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCi0JCW1iX2Zy
ZWVfZXh0KG0pOwotCWVsc2UgaWYgKChtLT5tX2ZsYWdzICYgTV9OT0ZSRUUpID09IDApCi0JCXVt
YV96ZnJlZSh6b25lX21idWYsIG0pOwotCXJldHVybiAobik7Ci19Ci0KIHN0YXRpYyBfX2lubGlu
ZSBpbnQKIHJ0X21fZ2V0ZmliKHN0cnVjdCBtYnVmICptKQogewpkaWZmIC0tZ2l0IGEvc3lzL25l
dGluZXQvdGNwX3BjYXAuYyBiL3N5cy9uZXRpbmV0L3RjcF9wY2FwLmMKLS0tIGEvc3lzL25ldGlu
ZXQvdGNwX3BjYXAuYworKysgYi9zeXMvbmV0aW5ldC90Y3BfcGNhcC5jCkBAIC0zNDEsNyArMzQx
LDEwIEBACiAKIAkJCW4gPSBtaGVhZDsKIAkJCXRjcF9wY2FwX21fZnJlZW0obi0+bV9uZXh0KTsK
LQkJCW1faW5pdChuLCBOVUxMLCAwLCBNX05PV0FJVCwgTVRfREFUQSwgMCk7CisJCQltLT5tX25l
eHQgPSBOVUxMOworCQkJbS0+bV9uZXh0cGt0ID0gTlVMTDsKKwkJCW0tPm1fbGVuID0gMDsKKwkJ
CW0tPm1fZmxhZ3MgPSAwOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9zeXMva2Vybi91aXBjX21i
dWYuYyBiL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCi0tLSBhL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCisr
KyBiL3N5cy9rZXJuL3VpcGNfbWJ1Zi5jCkBAIC00OCw2ICs0OCw4IEBACiAjaW5jbHVkZSA8c3lz
L3Byb3Rvc3cuaD4KICNpbmNsdWRlIDxzeXMvdWlvLmg+CiAKKyNpbmNsdWRlIDxzZWN1cml0eS9t
YWMvbWFjX2ZyYW1ld29yay5oPgorCiBpbnQJbWF4X2xpbmtoZHI7CiBpbnQJbWF4X3Byb3RvaGRy
OwogaW50CW1heF9oZHI7CkBAIC0xMzIsMjY2ICsxMzQsMzIgQEAKICNlbmRpZgogCiAvKgotICog
bV9nZXQyKCkgYWxsb2NhdGVzIG1pbmltdW0gbWJ1ZiB0aGF0IHdvdWxkIGZpdCAic2l6ZSIgYXJn
dW1lbnQuCi0gKi8KLXN0cnVjdCBtYnVmICoKLW1fZ2V0MihpbnQgc2l6ZSwgaW50IGhvdywgc2hv
cnQgdHlwZSwgaW50IGZsYWdzKQotewotCXN0cnVjdCBtYl9hcmdzIGFyZ3M7Ci0Jc3RydWN0IG1i
dWYgKm0sICpuOwotCi0JYXJncy5mbGFncyA9IGZsYWdzOwotCWFyZ3MudHlwZSA9IHR5cGU7Ci0K
LQlpZiAoc2l6ZSA8PSBNSExFTiB8fCAoc2l6ZSA8PSBNTEVOICYmIChmbGFncyAmIE1fUEtUSERS
KSA9PSAwKSkKLQkJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cp
KTsKLQlpZiAoc2l6ZSA8PSBNQ0xCWVRFUykKLQkJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25l
X3BhY2ssICZhcmdzLCBob3cpKTsKLQotCWlmIChzaXplID4gTUpVTVBBR0VTSVpFKQotCQlyZXR1
cm4gKE5VTEwpOwotCi0JbSA9IHVtYV96YWxsb2NfYXJnKHpvbmVfbWJ1ZiwgJmFyZ3MsIGhvdyk7
Ci0JaWYgKG0gPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCW4gPSB1bWFfemFsbG9jX2Fy
Zyh6b25lX2p1bWJvcCwgbSwgaG93KTsKLQlpZiAobiA9PSBOVUxMKSB7Ci0JCXVtYV96ZnJlZSh6
b25lX21idWYsIG0pOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCXJldHVybiAobSk7Ci19Ci0K
LS8qCi0gKiBtX2dldGpjbCgpIHJldHVybnMgYW4gbWJ1ZiB3aXRoIGEgY2x1c3RlciBvZiB0aGUg
c3BlY2lmaWVkIHNpemUgYXR0YWNoZWQuCi0gKiBGb3Igc2l6ZSBpdCB0YWtlcyBNQ0xCWVRFUywg
TUpVTVBBR0VTSVpFLCBNSlVNOUJZVEVTLCBNSlVNMTZCWVRFUy4KLSAqLwotc3RydWN0IG1idWYg
KgotbV9nZXRqY2woaW50IGhvdywgc2hvcnQgdHlwZSwgaW50IGZsYWdzLCBpbnQgc2l6ZSkKLXsK
LQlzdHJ1Y3QgbWJfYXJncyBhcmdzOwotCXN0cnVjdCBtYnVmICptLCAqbjsKLQl1bWFfem9uZV90
IHpvbmU7Ci0KLQlpZiAoc2l6ZSA9PSBNQ0xCWVRFUykKLQkJcmV0dXJuIG1fZ2V0Y2woaG93LCB0
eXBlLCBmbGFncyk7Ci0KLQlhcmdzLmZsYWdzID0gZmxhZ3M7Ci0JYXJncy50eXBlID0gdHlwZTsK
LQotCW0gPSB1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cpOwotCWlmIChtID09
IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0KLQl6b25lID0gbV9nZXR6b25lKHNpemUpOwotCW4g
PSB1bWFfemFsbG9jX2FyZyh6b25lLCBtLCBob3cpOwotCWlmIChuID09IE5VTEwpIHsKLQkJdW1h
X3pmcmVlKHpvbmVfbWJ1ZiwgbSk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXJldHVybiAobSk7
Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhIGdpdmVuIGxlbmd0aCB3b3J0aCBvZiBtYnVmcyBhbmQv
b3IgY2x1c3RlcnMgKHdoYXRldmVyIGZpdHMKLSAqIGJlc3QpIGFuZCByZXR1cm4gYSBwb2ludGVy
IHRvIHRoZSB0b3Agb2YgdGhlIGFsbG9jYXRlZCBjaGFpbi4gIElmIGFuCi0gKiBleGlzdGluZyBt
YnVmIGNoYWluIGlzIHByb3ZpZGVkLCB0aGVuIHdlIHdpbGwgYXBwZW5kIHRoZSBuZXcgY2hhaW4K
LSAqIHRvIHRoZSBleGlzdGluZyBvbmUgYnV0IHN0aWxsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBu
ZXdseSBhbGxvY2F0ZWQKLSAqIGNoYWluLgotICovCi1zdHJ1Y3QgbWJ1ZiAqCi1tX2dldG0yKHN0
cnVjdCBtYnVmICptLCBpbnQgbGVuLCBpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCi17
Ci0Jc3RydWN0IG1idWYgKm1iLCAqbm0gPSBOVUxMLCAqbXRhaWwgPSBOVUxMOwotCi0JS0FTU0VS
VChsZW4gPj0gMCwgKCIlczogbGVuIGlzIDwgMCIsIF9fZnVuY19fKSk7Ci0KLQkvKiBWYWxpZGF0
ZSBmbGFncy4gKi8KLQlmbGFncyAmPSAoTV9QS1RIRFIgfCBNX0VPUik7Ci0KLQkvKiBQYWNrZXQg
aGVhZGVyIG1idWYgbXVzdCBiZSBmaXJzdCBpbiBjaGFpbi4gKi8KLQlpZiAoKGZsYWdzICYgTV9Q
S1RIRFIpICYmIG0gIT0gTlVMTCkKLQkJZmxhZ3MgJj0gfk1fUEtUSERSOwotCi0JLyogTG9vcCBh
bmQgYXBwZW5kIG1heGltdW0gc2l6ZWQgbWJ1ZnMgdG8gdGhlIGNoYWluIHRhaWwuICovCi0Jd2hp
bGUgKGxlbiA+IDApIHsKLQkJaWYgKGxlbiA+IE1DTEJZVEVTKQotCQkJbWIgPSBtX2dldGpjbCho
b3csIHR5cGUsIChmbGFncyAmIE1fUEtUSERSKSwKLQkJCSAgICBNSlVNUEFHRVNJWkUpOwotCQll
bHNlIGlmIChsZW4gPj0gTUlOQ0xTSVpFKQotCQkJbWIgPSBtX2dldGNsKGhvdywgdHlwZSwgKGZs
YWdzICYgTV9QS1RIRFIpKTsKLQkJZWxzZSBpZiAoZmxhZ3MgJiBNX1BLVEhEUikKLQkJCW1iID0g
bV9nZXRoZHIoaG93LCB0eXBlKTsKLQkJZWxzZQotCQkJbWIgPSBtX2dldChob3csIHR5cGUpOwot
Ci0JCS8qIEZhaWwgdGhlIHdob2xlIG9wZXJhdGlvbiBpZiBvbmUgbWJ1ZiBjYW4ndCBiZSBhbGxv
Y2F0ZWQuICovCi0JCWlmIChtYiA9PSBOVUxMKSB7Ci0JCQlpZiAobm0gIT0gTlVMTCkKLQkJCQlt
X2ZyZWVtKG5tKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQotCQkvKiBCb29rIGtlZXBpbmcu
ICovCi0JCWxlbiAtPSBNX1NJWkUobWIpOwotCQlpZiAobXRhaWwgIT0gTlVMTCkKLQkJCW10YWls
LT5tX25leHQgPSBtYjsKLQkJZWxzZQotCQkJbm0gPSBtYjsKLQkJbXRhaWwgPSBtYjsKLQkJZmxh
Z3MgJj0gfk1fUEtUSERSOwkvKiBPbmx5IHZhbGlkIG9uIHRoZSBmaXJzdCBtYnVmLiAqLwotCX0K
LQlpZiAoZmxhZ3MgJiBNX0VPUikKLQkJbXRhaWwtPm1fZmxhZ3MgfD0gTV9FT1I7ICAvKiBPbmx5
IHZhbGlkIG9uIHRoZSBsYXN0IG1idWYuICovCi0KLQkvKiBJZiBtYnVmIHdhcyBzdXBwbGllZCwg
YXBwZW5kIG5ldyBjaGFpbiB0byB0aGUgZW5kIG9mIGl0LiAqLwotCWlmIChtICE9IE5VTEwpIHsK
LQkJZm9yIChtdGFpbCA9IG07IG10YWlsLT5tX25leHQgIT0gTlVMTDsgbXRhaWwgPSBtdGFpbC0+
bV9uZXh0KQotCQkJOwotCQltdGFpbC0+bV9uZXh0ID0gbm07Ci0JCW10YWlsLT5tX2ZsYWdzICY9
IH5NX0VPUjsKLQl9IGVsc2UKLQkJbSA9IG5tOwotCi0JcmV0dXJuIChtKTsKLX0KLQotLyoKLSAq
IEZyZWUgYW4gZW50aXJlIGNoYWluIG9mIG1idWZzIGFuZCBhc3NvY2lhdGVkIGV4dGVybmFsIGJ1
ZmZlcnMsIGlmCi0gKiBhcHBsaWNhYmxlLgotICovCi12b2lkCi1tX2ZyZWVtKHN0cnVjdCBtYnVm
ICptYikKLXsKLQotCXdoaWxlIChtYiAhPSBOVUxMKQotCQltYiA9IG1fZnJlZShtYik7Ci19Ci0K
LS8qLQotICogQ29uZmlndXJlIGEgcHJvdmlkZWQgbWJ1ZiB0byByZWZlciB0byB0aGUgcHJvdmlk
ZWQgZXh0ZXJuYWwgc3RvcmFnZQotICogYnVmZmVyIGFuZCBzZXR1cCBhIHJlZmVyZW5jZSBjb3Vu
dCBmb3Igc2FpZCBidWZmZXIuICBJZiB0aGUgc2V0dGluZwotICogdXAgb2YgdGhlIHJlZmVyZW5j
ZSBjb3VudCBmYWlscywgdGhlIE1fRVhUIGJpdCB3aWxsIG5vdCBiZSBzZXQuICBJZgotICogc3Vj
Y2Vzc2Z1bGwsIHRoZSBNX0VYVCBiaXQgaXMgc2V0IGluIHRoZSBtYnVmJ3MgZmxhZ3MuCi0gKgot
ICogQXJndW1lbnRzOgotICogICAgbWIgICAgIFRoZSBleGlzdGluZyBtYnVmIHRvIHdoaWNoIHRv
IGF0dGFjaCB0aGUgcHJvdmlkZWQgYnVmZmVyLgotICogICAgYnVmICAgIFRoZSBhZGRyZXNzIG9m
IHRoZSBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KLSAqICAgIHNpemUgICBUaGUg
c2l6ZSBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyLgotICogICAgZnJlZWYgIEEgcG9pbnRlciB0byBh
IHJvdXRpbmUgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUKLSAqICAgICAgICAg
ICBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KLSAqICAgIGFyZ3MgICBBIHBvaW50
ZXIgdG8gYW4gYXJndW1lbnQgc3RydWN0dXJlIChvZiBhbnkgdHlwZSkgdG8gYmUgcGFzc2VkCi0g
KiAgICAgICAgICAgdG8gdGhlIHByb3ZpZGVkIGZyZWVmIHJvdXRpbmUgKG1heSBiZSBOVUxMKS4K
LSAqICAgIGZsYWdzICBBbnkgb3RoZXIgZmxhZ3MgdG8gYmUgcGFzc2VkIHRvIHRoZSBwcm92aWRl
ZCBtYnVmLgotICogICAgdHlwZSAgIFRoZSB0eXBlIHRoYXQgdGhlIGV4dGVybmFsIHN0b3JhZ2Ug
YnVmZmVyIHNob3VsZCBiZQotICogICAgICAgICAgIGxhYmVsZWQgd2l0aC4KLSAqCi0gKiBSZXR1
cm5zOgotICogICAgTm90aGluZy4KKyAqIEluaXRpYWxpemUgYW4gbWJ1ZiB3aXRoIGxpbmVhciBz
dG9yYWdlLgogICovCiBpbnQKLW1fZXh0YWRkKHN0cnVjdCBtYnVmICptYiwgY2FkZHJfdCBidWYs
IHVfaW50IHNpemUsCi0gICAgdm9pZCAoKmZyZWVmKShzdHJ1Y3QgbWJ1ZiAqLCB2b2lkICosIHZv
aWQgKiksIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIsCi0gICAgaW50IGZsYWdzLCBpbnQgdHlwZSwg
aW50IHdhaXQpCi17Ci0JS0FTU0VSVCh0eXBlICE9IEVYVF9DTFVTVEVSLCAoIiVzOiBFWFRfQ0xV
U1RFUiBub3QgYWxsb3dlZCIsIF9fZnVuY19fKSk7Ci0KLQlpZiAodHlwZSAhPSBFWFRfRVhUUkVG
KQotCQltYi0+bV9leHQuZXh0X2NudCA9IHVtYV96YWxsb2Moem9uZV9leHRfcmVmY250LCB3YWl0
KTsKLQotCWlmIChtYi0+bV9leHQuZXh0X2NudCA9PSBOVUxMKQotCQlyZXR1cm4gKEVOT01FTSk7
Ci0KLQkqKG1iLT5tX2V4dC5leHRfY250KSA9IDE7Ci0JbWItPm1fZmxhZ3MgfD0gKE1fRVhUIHwg
ZmxhZ3MpOwotCW1iLT5tX2V4dC5leHRfYnVmID0gYnVmOwotCW1iLT5tX2RhdGEgPSBtYi0+bV9l
eHQuZXh0X2J1ZjsKLQltYi0+bV9leHQuZXh0X3NpemUgPSBzaXplOwotCW1iLT5tX2V4dC5leHRf
ZnJlZSA9IGZyZWVmOwotCW1iLT5tX2V4dC5leHRfYXJnMSA9IGFyZzE7Ci0JbWItPm1fZXh0LmV4
dF9hcmcyID0gYXJnMjsKLQltYi0+bV9leHQuZXh0X3R5cGUgPSB0eXBlOwotCW1iLT5tX2V4dC5l
eHRfZmxhZ3MgPSAwOwotCi0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIE5vbi1kaXJlY3RseS1l
eHBvcnRlZCBmdW5jdGlvbiB0byBjbGVhbiB1cCBhZnRlciBtYnVmcyB3aXRoIE1fRVhUCi0gKiBz
dG9yYWdlIGF0dGFjaGVkIHRvIHRoZW0gaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBoaXRzIDEuCi0g
Ki8KLXZvaWQKLW1iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICptKQorbV9pbml0KHN0cnVjdCBtYnVm
ICptLCBpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MpCiB7Ci0JaW50IGZyZWVtYnVmOwot
Ci0JS0FTU0VSVChtLT5tX2ZsYWdzICYgTV9FWFQsICgiJXM6IE1fRVhUIG5vdCBzZXQgb24gJXAi
LCBfX2Z1bmNfXywgbSkpOwogCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgaGVhZGVyIGlzIGVtYmVk
ZGVkIGluIHRoZSBjbHVzdGVyLgotCSAqLwotCWZyZWVtYnVmID0gKG0tPm1fZmxhZ3MgJiBNX05P
RlJFRSkgPyAwIDogMTsKLQotCXN3aXRjaCAobS0+bV9leHQuZXh0X3R5cGUpIHsKLQljYXNlIEVY
VF9TRkJVRjoKLQkJc2ZfZXh0X2ZyZWUobS0+bV9leHQuZXh0X2FyZzEsIG0tPm1fZXh0LmV4dF9h
cmcyKTsKLQkJYnJlYWs7Ci0JY2FzZSBFWFRfU0ZCVUZfTk9DQUNIRToKLQkJc2ZfZXh0X2ZyZWVf
bm9jYWNoZShtLT5tX2V4dC5leHRfYXJnMSwgbS0+bV9leHQuZXh0X2FyZzIpOwotCQlicmVhazsK
LQlkZWZhdWx0OgotCQlLQVNTRVJUKG0tPm1fZXh0LmV4dF9jbnQgIT0gTlVMTCwKLQkJICAgICgi
JXM6IG5vIHJlZmNvdW50aW5nIHBvaW50ZXIgb24gJXAiLCBfX2Z1bmNfXywgbSkpOwotCQkvKiAK
LQkJICogRnJlZSBhdHRhY2hlZCBzdG9yYWdlIGlmIHRoaXMgbWJ1ZiBpcyB0aGUgb25seQotCQkg
KiByZWZlcmVuY2UgdG8gaXQuCi0JCSAqLwotCQlpZiAoKihtLT5tX2V4dC5leHRfY250KSAhPSAx
KSB7Ci0JCQlpZiAoYXRvbWljX2ZldGNoYWRkX2ludChtLT5tX2V4dC5leHRfY250LCAtMSkgIT0g
MSkKLQkJCQlicmVhazsKLQkJfQorCW0tPm1fbmV4dCA9IE5VTEw7CisJbS0+bV9uZXh0cGt0ID0g
TlVMTDsKKwltLT5tX2RhdGEgPSBtLT5tX2RhdDsKKwltLT5tX2xlbiA9IDA7CisJbS0+bV9mbGFn
cyA9IGZsYWdzOworCW0tPm1fdHlwZSA9IHR5cGU7CisJaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsK
KwkJaW50IGVycm9yOwogCi0JCXN3aXRjaCAobS0+bV9leHQuZXh0X3R5cGUpIHsKLQkJY2FzZSBF
WFRfUEFDS0VUOgkvKiBUaGUgcGFja2V0IHpvbmUgaXMgc3BlY2lhbC4gKi8KLQkJCWlmICgqKG0t
Pm1fZXh0LmV4dF9jbnQpID09IDApCi0JCQkJKihtLT5tX2V4dC5leHRfY250KSA9IDE7Ci0JCQl1
bWFfemZyZWUoem9uZV9wYWNrLCBtKTsKLQkJCXJldHVybjsJCS8qIEpvYiBkb25lLiAqLwotCQlj
YXNlIEVYVF9DTFVTVEVSOgotCQkJdW1hX3pmcmVlKHpvbmVfY2x1c3QsIG0tPm1fZXh0LmV4dF9i
dWYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVhUX0pVTUJPUDoKLQkJCXVtYV96ZnJlZSh6b25lX2p1
bWJvcCwgbS0+bV9leHQuZXh0X2J1Zik7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRfSlVNQk85Ogot
CQkJdW1hX3pmcmVlKHpvbmVfanVtYm85LCBtLT5tX2V4dC5leHRfYnVmKTsKLQkJCWJyZWFrOwot
CQljYXNlIEVYVF9KVU1CTzE2OgotCQkJdW1hX3pmcmVlKHpvbmVfanVtYm8xNiwgbS0+bV9leHQu
ZXh0X2J1Zik7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRfTkVUX0RSVjoKLQkJY2FzZSBFWFRfTU9E
X1RZUEU6Ci0JCWNhc2UgRVhUX0RJU1BPU0FCTEU6Ci0JCQkqKG0tPm1fZXh0LmV4dF9jbnQpID0g
MDsKLQkJCXVtYV96ZnJlZSh6b25lX2V4dF9yZWZjbnQsIF9fREVWT0xBVElMRSh1X2ludCAqLAot
CQkJCW0tPm1fZXh0LmV4dF9jbnQpKTsKLQkJCS8qIEZBTExUSFJPVUdIICovCi0JCWNhc2UgRVhU
X0VYVFJFRjoKLQkJCUtBU1NFUlQobS0+bV9leHQuZXh0X2ZyZWUgIT0gTlVMTCwKLQkJCQkoIiVz
OiBleHRfZnJlZSBub3Qgc2V0IiwgX19mdW5jX18pKTsKLQkJCSgqKG0tPm1fZXh0LmV4dF9mcmVl
KSkobSwgbS0+bV9leHQuZXh0X2FyZzEsCi0JCQkgICAgbS0+bV9leHQuZXh0X2FyZzIpOwotCQkJ
YnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlLQVNTRVJUKG0tPm1fZXh0LmV4dF90eXBlID09IDAsCi0J
CQkJKCIlczogdW5rbm93biBleHRfdHlwZSIsIF9fZnVuY19fKSk7Ci0JCX0KKwkJbS0+bV9kYXRh
ID0gbS0+bV9wa3RkYXQ7CisJCWJ6ZXJvKCZtLT5tX3BrdGhkciwgc2l6ZW9mKG0tPm1fcGt0aGRy
KSk7CisjaWZkZWYgTUFDCisJCS8qIElmIHRoZSBsYWJlbCBpbml0IGZhaWxzLCBmYWlsIHRoZSBh
bGxvYyAqLworCQllcnJvciA9IG1hY19tYnVmX2luaXQobSwgaG93KTsKKwkJaWYgKGVycm9yKQor
CQkJcmV0dXJuIChlcnJvcik7CisjZW5kaWYKIAl9CiAKLQlpZiAoZnJlZW1idWYpCi0JCXVtYV96
ZnJlZSh6b25lX21idWYsIG0pOworCXJldHVybiAoMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9z
eXMva2Vybi9rZXJuX21idWYuYyBiL3N5cy9rZXJuL2tlcm5fbWJ1Zi5jCi0tLSBhL3N5cy9rZXJu
L2tlcm5fbWJ1Zi5jCisrKyBiL3N5cy9rZXJuL2tlcm5fbWJ1Zi5jCkBAIC00NCw4ICs0NCw2IEBA
CiAjaW5jbHVkZSA8c3lzL3NtcC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KIAotI2luY2x1
ZGUgPHNlY3VyaXR5L21hYy9tYWNfZnJhbWV3b3JrLmg+Ci0KICNpbmNsdWRlIDx2bS92bS5oPgog
I2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgogI2luY2x1ZGUgPHZtL3ZtX2tlcm4uaD4KQEAgLTk5
LDYgKzk3LDE3IEBACiAgKgogICovCiAKKy8qCisgKiBab25lcyBmcm9tIHdoaWNoIHdlIGFsbG9j
YXRlLgorICovCitzdGF0aWMgdW1hX3pvbmVfdAl6b25lX21idWY7CitzdGF0aWMgdW1hX3pvbmVf
dAl6b25lX2NsdXN0Oworc3RhdGljIHVtYV96b25lX3QJem9uZV9wYWNrOworc3RhdGljIHVtYV96
b25lX3QJem9uZV9qdW1ib3A7CitzdGF0aWMgdW1hX3pvbmVfdAl6b25lX2p1bWJvOTsKK3N0YXRp
YyB1bWFfem9uZV90CXpvbmVfanVtYm8xNjsKK3N0YXRpYyB1bWFfem9uZV90CXpvbmVfZXh0X3Jl
ZmNudDsKKwogaW50IG5tYnVmczsJCQkvKiBsaW1pdHMgbnVtYmVyIG9mIG1idWZzICovCiBpbnQg
bm1iY2x1c3RlcnM7CQkvKiBsaW1pdHMgbnVtYmVyIG9mIG1idWYgY2x1c3RlcnMgKi8KIGludCBu
bWJqdW1ib3A7CQkJLyogbGltaXRzIG51bWJlciBvZiBwYWdlIHNpemUganVtYm8gY2x1c3RlcnMg
Ki8KQEAgLTExMSw2ICsxMjAsMTUgQEAKICAgICAiTWF4aW11bSByZWFsIG1lbW9yeSBhbGxvY2F0
YWJsZSB0byB2YXJpb3VzIG1idWYgdHlwZXMiKTsKIAogLyoKKyAqIEFyZ3VtZW50IHN0cnVjdHVy
ZSBwYXNzZWQgdG8gVU1BIHJvdXRpbmVzIGR1cmluZyBtYnVmIGFuZCBwYWNrZXQKKyAqIGFsbG9j
YXRpb25zLgorICovCitzdHJ1Y3QgbWJfYXJncyB7CisJaW50CWZsYWdzOwkvKiBGbGFncyBmb3Ig
bWJ1ZiBiZWluZyBhbGxvY2F0ZWQgKi8KKwlzaG9ydAl0eXBlOwkvKiBUeXBlIG9mIG1idWYgYmVp
bmcgYWxsb2NhdGVkICovCit9OworCisvKgogICogdHVuYWJsZV9tYmluaXQoKSBoYXMgdG8gYmUg
cnVuIGJlZm9yZSBhbnkgbWJ1ZiBhbGxvY2F0aW9ucyBhcmUgZG9uZS4KICAqLwogc3RhdGljIHZv
aWQKQEAgLTI2MywzNCArMjgxLDI1IEBACiAgICAgIk1heGltdW0gbnVtYmVyIG9mIG1idWZzIGFs
bG93ZWQiKTsKIAogLyoKLSAqIFpvbmVzIGZyb20gd2hpY2ggd2UgYWxsb2NhdGUuCi0gKi8KLXVt
YV96b25lX3QJem9uZV9tYnVmOwotdW1hX3pvbmVfdAl6b25lX2NsdXN0OwotdW1hX3pvbmVfdAl6
b25lX3BhY2s7Ci11bWFfem9uZV90CXpvbmVfanVtYm9wOwotdW1hX3pvbmVfdAl6b25lX2p1bWJv
OTsKLXVtYV96b25lX3QJem9uZV9qdW1ibzE2OwotdW1hX3pvbmVfdAl6b25lX2V4dF9yZWZjbnQ7
Ci0KLS8qCiAgKiBDYWxsb3V0IHRvIGFzc2lzdCB1cyBpbiBmcmVlaW5nIG1idWZzLgogICovCiBz
dGF0aWMgc3RydWN0IGNhbGxvdXQJbWJfcmVjbGFpbV9jYWxsb3V0Owogc3RhdGljIHN0cnVjdCBt
dHgJbWJfcmVjbGFpbV9jYWxsb3V0X210eDsKIAogLyoKICAqIExvY2FsIHByb3RvdHlwZXMuCisg
KiBYWFg6IHR3byBhcmUgZXhwb3J0ZWQgZm9yIHNha2Ugb2YgY3hnYmUoNCkKICAqLwordW1hX3pv
bmVfdAltX2dldHpvbmUoaW50KTsKK3ZvaWQJCW1fY2xqc2V0KHN0cnVjdCBtYnVmICosIHZvaWQg
KiwgaW50KTsKIHN0YXRpYyBpbnQJbWJfY3Rvcl9tYnVmKHZvaWQgKiwgaW50LCB2b2lkICosIGlu
dCk7CiBzdGF0aWMgaW50CW1iX2N0b3JfY2x1c3Qodm9pZCAqLCBpbnQsIHZvaWQgKiwgaW50KTsK
IHN0YXRpYyBpbnQJbWJfY3Rvcl9wYWNrKHZvaWQgKiwgaW50LCB2b2lkICosIGludCk7CiBzdGF0
aWMgdm9pZAltYl9kdG9yX21idWYodm9pZCAqLCBpbnQsIHZvaWQgKik7CiBzdGF0aWMgdm9pZAlt
Yl9kdG9yX2NsdXN0KHZvaWQgKiwgaW50LCB2b2lkICopOwogc3RhdGljIHZvaWQJbWJfZHRvcl9w
YWNrKHZvaWQgKiwgaW50LCB2b2lkICopOwogc3RhdGljIGludAltYl96aW5pdF9wYWNrKHZvaWQg
KiwgaW50LCBpbnQpOwogc3RhdGljIHZvaWQJbWJfemZpbmlfcGFjayh2b2lkICosIGludCk7Ci0K
IHN0YXRpYyB2b2lkCW1iX3JlY2xhaW0odm9pZCAqKTsKIHN0YXRpYyB2b2lkICAgICptYnVmX2p1
bWJvX2FsbG9jKHVtYV96b25lX3QsIHZtX3NpemVfdCwgdWludDhfdCAqLCBpbnQpOwogc3RhdGlj
IHZvaWQJbWJfbWF4YWN0aW9uKHVtYV96b25lX3QpOwpAQCAtNDQ5LDcgKzQ1OCw3IEBACiAJbSA9
IChzdHJ1Y3QgbWJ1ZiAqKW1lbTsKIAlmbGFncyA9IGFyZ3MtPmZsYWdzOwogCi0JZXJyb3IgPSBt
X2luaXQobSwgTlVMTCwgc2l6ZSwgaG93LCB0eXBlLCBmbGFncyk7CisJZXJyb3IgPSBtX2luaXQo
bSwgaG93LCB0eXBlLCBmbGFncyk7CiAKIAlyZXR1cm4gKGVycm9yKTsKIH0KQEAgLTY0OSwzMyAr
NjU4LDE1IEBACiAJdHJhc2hfY3RvcihtLT5tX2V4dC5leHRfYnVmLCBNQ0xCWVRFUywgYXJnLCBo
b3cpOwogI2VuZGlmCiAKLQllcnJvciA9IG1faW5pdChtLCBOVUxMLCBzaXplLCBob3csIHR5cGUs
IGZsYWdzKTsKKwllcnJvciA9IG1faW5pdChtLCBob3csIHR5cGUsIGZsYWdzKTsKIAogCS8qIG1f
ZXh0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuICovCiAJbS0+bV9kYXRhID0gbS0+bV9leHQuZXh0
X2J1ZjsKICAJbS0+bV9mbGFncyA9IChmbGFncyB8IE1fRVhUKTsKIAogCXJldHVybiAoZXJyb3Ip
OwogfQogCi1pbnQKLW1fcGt0aGRyX2luaXQoc3RydWN0IG1idWYgKm0sIGludCBob3cpCi17Ci0j
aWZkZWYgTUFDCi0JaW50IGVycm9yOwotI2VuZGlmCi0JbS0+bV9kYXRhID0gbS0+bV9wa3RkYXQ7
Ci0JYnplcm8oJm0tPm1fcGt0aGRyLCBzaXplb2YobS0+bV9wa3RoZHIpKTsKLSNpZmRlZiBNQUMK
LQkvKiBJZiB0aGUgbGFiZWwgaW5pdCBmYWlscywgZmFpbCB0aGUgYWxsb2MgKi8KLQllcnJvciA9
IG1hY19tYnVmX2luaXQobSwgaG93KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAoZXJyb3IpOwot
I2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQotCiAvKgogICogVGhpcyBpcyB0aGUgcHJvdG9jb2wg
ZHJhaW4gcm91dGluZS4KICAqCkBAIC03NTUsMyArNzQ2LDQzNyBAQAogCiAJbXR4X3VubG9jaygm
bWJfcmVjbGFpbV9jYWxsb3V0X210eCk7CiB9CisKKy8qCisgKiBTZWxlY3Qgem9uZSBieSBzaXpl
LgorICovCit1bWFfem9uZV90CittX2dldHpvbmUoaW50IHNpemUpCit7CisJdW1hX3pvbmVfdCB6
b25lOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSBNQ0xCWVRFUzoKKwkJem9uZSA9IHpvbmVf
Y2x1c3Q7CisJCWJyZWFrOworI2lmIE1KVU1QQUdFU0laRSAhPSBNQ0xCWVRFUworCWNhc2UgTUpV
TVBBR0VTSVpFOgorCQl6b25lID0gem9uZV9qdW1ib3A7CisJCWJyZWFrOworI2VuZGlmCisJY2Fz
ZSBNSlVNOUJZVEVTOgorCQl6b25lID0gem9uZV9qdW1ibzk7CisJCWJyZWFrOworCWNhc2UgTUpV
TTE2QllURVM6CisJCXpvbmUgPSB6b25lX2p1bWJvMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CXBhbmljKCIlczogaW52YWxpZCBjbHVzdGVyIHNpemUgJWQiLCBfX2Z1bmNfXywgc2l6ZSk7CisJ
fQorCisJcmV0dXJuICh6b25lKTsKK30KKworLyoKKyAqIENsZWFuIHVwIGFmdGVyIG1idWZzIHdp
dGggTV9FWFQgc3RvcmFnZSBhdHRhY2hlZCB0byB0aGVtIGlmIHRoZQorICogcmVmZXJlbmNlIGNv
dW50IGhpdHMgMS4KKyAqLworc3RhdGljIHZvaWQKK21iX2ZyZWVfZXh0KHN0cnVjdCBtYnVmICpt
KQoreworCWludCBmcmVlbWJ1ZjsKKworCUtBU1NFUlQobS0+bV9mbGFncyAmIE1fRVhULCAoIiVz
OiBNX0VYVCBub3Qgc2V0IG9uICVwIiwgX19mdW5jX18sIG0pKTsKKworCS8qCisJICogQ2hlY2sg
aWYgdGhlIGhlYWRlciBpcyBlbWJlZGRlZCBpbiB0aGUgY2x1c3Rlci4KKwkgKi8KKwlmcmVlbWJ1
ZiA9IChtLT5tX2ZsYWdzICYgTV9OT0ZSRUUpID8gMCA6IDE7CisKKwlzd2l0Y2ggKG0tPm1fZXh0
LmV4dF90eXBlKSB7CisJY2FzZSBFWFRfU0ZCVUY6CisJCXNmX2V4dF9mcmVlKG0tPm1fZXh0LmV4
dF9hcmcxLCBtLT5tX2V4dC5leHRfYXJnMik7CisJCWJyZWFrOworCWNhc2UgRVhUX1NGQlVGX05P
Q0FDSEU6CisJCXNmX2V4dF9mcmVlX25vY2FjaGUobS0+bV9leHQuZXh0X2FyZzEsIG0tPm1fZXh0
LmV4dF9hcmcyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJS0FTU0VSVChtLT5tX2V4dC5leHRf
Y250ICE9IE5VTEwsCisJCSAgICAoIiVzOiBubyByZWZjb3VudGluZyBwb2ludGVyIG9uICVwIiwg
X19mdW5jX18sIG0pKTsKKwkJLyogCisJCSAqIEZyZWUgYXR0YWNoZWQgc3RvcmFnZSBpZiB0aGlz
IG1idWYgaXMgdGhlIG9ubHkKKwkJICogcmVmZXJlbmNlIHRvIGl0LgorCQkgKi8KKwkJaWYgKCoo
bS0+bV9leHQuZXh0X2NudCkgIT0gMSkgeworCQkJaWYgKGF0b21pY19mZXRjaGFkZF9pbnQobS0+
bV9leHQuZXh0X2NudCwgLTEpICE9IDEpCisJCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKG0t
Pm1fZXh0LmV4dF90eXBlKSB7CisJCWNhc2UgRVhUX1BBQ0tFVDoJLyogVGhlIHBhY2tldCB6b25l
IGlzIHNwZWNpYWwuICovCisJCQlpZiAoKihtLT5tX2V4dC5leHRfY250KSA9PSAwKQorCQkJCSoo
bS0+bV9leHQuZXh0X2NudCkgPSAxOworCQkJdW1hX3pmcmVlKHpvbmVfcGFjaywgbSk7CisJCQly
ZXR1cm47CQkvKiBKb2IgZG9uZS4gKi8KKwkJY2FzZSBFWFRfQ0xVU1RFUjoKKwkJCXVtYV96ZnJl
ZSh6b25lX2NsdXN0LCBtLT5tX2V4dC5leHRfYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIEVYVF9K
VU1CT1A6CisJCQl1bWFfemZyZWUoem9uZV9qdW1ib3AsIG0tPm1fZXh0LmV4dF9idWYpOworCQkJ
YnJlYWs7CisJCWNhc2UgRVhUX0pVTUJPOToKKwkJCXVtYV96ZnJlZSh6b25lX2p1bWJvOSwgbS0+
bV9leHQuZXh0X2J1Zik7CisJCQlicmVhazsKKwkJY2FzZSBFWFRfSlVNQk8xNjoKKwkJCXVtYV96
ZnJlZSh6b25lX2p1bWJvMTYsIG0tPm1fZXh0LmV4dF9idWYpOworCQkJYnJlYWs7CisJCWNhc2Ug
RVhUX05FVF9EUlY6CisJCWNhc2UgRVhUX01PRF9UWVBFOgorCQljYXNlIEVYVF9ESVNQT1NBQkxF
OgorCQkJKihtLT5tX2V4dC5leHRfY250KSA9IDA7CisJCQl1bWFfemZyZWUoem9uZV9leHRfcmVm
Y250LCBfX0RFVk9MQVRJTEUodV9pbnQgKiwKKwkJCQltLT5tX2V4dC5leHRfY250KSk7CisJCQkv
KiBGQUxMVEhST1VHSCAqLworCQljYXNlIEVYVF9FWFRSRUY6CisJCQlLQVNTRVJUKG0tPm1fZXh0
LmV4dF9mcmVlICE9IE5VTEwsCisJCQkJKCIlczogZXh0X2ZyZWUgbm90IHNldCIsIF9fZnVuY19f
KSk7CisJCQkoKihtLT5tX2V4dC5leHRfZnJlZSkpKG0sIG0tPm1fZXh0LmV4dF9hcmcxLAorCQkJ
ICAgIG0tPm1fZXh0LmV4dF9hcmcyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJS0FTU0VS
VChtLT5tX2V4dC5leHRfdHlwZSA9PSAwLAorCQkJCSgiJXM6IHVua25vd24gZXh0X3R5cGUiLCBf
X2Z1bmNfXykpOworCQl9CisJfQorCisJaWYgKGZyZWVtYnVmKQorCQl1bWFfemZyZWUoem9uZV9t
YnVmLCBtKTsKK30KKworLyoKKyAqIE9mZmljaWFsIG1idWYoOSkgYWxsb2NhdGlvbiBLUEkgZm9y
IHN0YWNrIGFuZCBkcml2ZXJzOgorICoKKyAqIG1fZ2V0KCkJLSBhIHNpbmdsZSBtYnVmIHdpdGhv
dXQgYW55IGF0dGFjaG1lbnRzLgorICogbV9nZXRoZHIoKQktIGEgc2luZ2xlIG1idWYgaW5pdGlh
bGl6ZWQgYXMgTV9QS1RIRFIuCisgKiBtX2dldGNsKCkJLSBhbiBtYnVmICsgMmsgY2x1c3Rlci4K
KyAqIG1fY2xnZXQoKQktIGF0dGFjaCBjbHVzdGVyIHRvIGFscmVhZHkgYWxsb2NhdGVkIG1idWYu
CisgKiBtX2NsamdldCgpCS0gYXR0YWNoIGp1bWJvIGNsdXN0ZXIgdG8gYWxyZWFkeSBhbGxvY2F0
ZWQgbWJ1Zi4KKyAqIG1fZ2V0MigpCS0gYWxsb2NhdGUgbWluaW11bSBtYnVmIHRoYXQgd291bGQg
Zml0IHNpemUgYXJndW1lbnQuCisgKiBtX2dldG0yKCkJLSBhbGxvY2F0ZSBhIGNoYWluIG9mIG1i
dWZzL2NsdXN0ZXJzLgorICogbV9leHRhZGQoKQktIGF0dGFjaCBleHRlcm5hbCBjbHVzdGVyIHRv
IG1idWYuCisgKgorICogbV9mcmVlKCkJLSBmcmVlIHNpbmdsZSBtYnVmIHdpdGggaXRzIHRhZ3Mg
YW5kIGV4dCwgcmV0dXJucyBuZXh0IG1idWYuCisgKiBtX2ZyZWVtKCkJLSBmcmVlIGNoYWluIG9m
IG1idWZzLgorICovCisKK3N0cnVjdCBtYnVmICoKK21fZ2V0KGludCBob3csIHNob3J0IHR5cGUp
Cit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKworCWFyZ3MuZmxhZ3MgPSAwOworCWFyZ3MudHlw
ZSA9IHR5cGU7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBob3cp
KTsKK30KKworc3RydWN0IG1idWYgKgorbV9nZXRoZHIoaW50IGhvdywgc2hvcnQgdHlwZSkKK3sK
KwlzdHJ1Y3QgbWJfYXJncyBhcmdzOworCisJYXJncy5mbGFncyA9IE1fUEtUSERSOworCWFyZ3Mu
dHlwZSA9IHR5cGU7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZhcmdzLCBo
b3cpKTsKK30KKworc3RydWN0IG1idWYgKgorbV9nZXRjbChpbnQgaG93LCBzaG9ydCB0eXBlLCBp
bnQgZmxhZ3MpCit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKworCWFyZ3MuZmxhZ3MgPSBmbGFn
czsKKwlhcmdzLnR5cGUgPSB0eXBlOworCXJldHVybiAodW1hX3phbGxvY19hcmcoem9uZV9wYWNr
LCAmYXJncywgaG93KSk7Cit9CisKK2ludAorbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhv
dykKK3sKKworCUtBU1NFUlQoKG0tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCwgKCIlczogbWJ1ZiAl
cCBoYXMgTV9FWFQiLAorCSAgICBfX2Z1bmNfXywgbSkpOworCW0tPm1fZXh0LmV4dF9idWYgPSAo
Y2hhciAqKU5VTEw7CisJdW1hX3phbGxvY19hcmcoem9uZV9jbHVzdCwgbSwgaG93KTsKKwkvKgor
CSAqIE9uIGEgY2x1c3RlciBhbGxvY2F0aW9uIGZhaWx1cmUsIGRyYWluIHRoZSBwYWNrZXQgem9u
ZSBhbmQgcmV0cnksCisJICogd2UgbWlnaHQgYmUgYWJsZSB0byBsb29zZW4gYSBmZXcgY2x1c3Rl
cnMgdXAgb24gdGhlIGRyYWluLgorCSAqLworCWlmICgoaG93ICYgTV9OT1dBSVQpICYmIChtLT5t
X2V4dC5leHRfYnVmID09IE5VTEwpKSB7CisJCXpvbmVfZHJhaW4oem9uZV9wYWNrKTsKKwkJdW1h
X3phbGxvY19hcmcoem9uZV9jbHVzdCwgbSwgaG93KTsKKwl9CisJcmV0dXJuIChtLT5tX2ZsYWdz
ICYgTV9FWFQpOworfQorCisvKgorICogbV9jbGpnZXQoKSBpcyBkaWZmZXJlbnQgZnJvbSBtX2Ns
Z2V0KCkgYXMgaXQgY2FuIGFsbG9jYXRlIGNsdXN0ZXJzIHdpdGhvdXQKKyAqIGF0dGFjaGluZyB0
aGVtIHRvIGFuIG1idWYuICBJbiB0aGF0IGNhc2UgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcG9p
bnRlcgorICogdG8gdGhlIGNsdXN0ZXIgb2YgdGhlIHJlcXVlc3RlZCBzaXplLiAgSWYgYW4gbWJ1
ZiB3YXMgc3BlY2lmaWVkLCBpdCBnZXRzCisgKiB0aGUgY2x1c3RlciBhdHRhY2hlZCB0byBpdCBh
bmQgdGhlIHJldHVybiB2YWx1ZSBjYW4gYmUgc2FmZWx5IGlnbm9yZWQuCisgKiBGb3Igc2l6ZSBp
dCB0YWtlcyBNQ0xCWVRFUywgTUpVTVBBR0VTSVpFLCBNSlVNOUJZVEVTLCBNSlVNMTZCWVRFUy4K
KyAqLwordm9pZCAqCittX2NsamdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdywgaW50IHNpemUp
Cit7CisJdW1hX3pvbmVfdCB6b25lOworCisJaWYgKG0gIT0gTlVMTCkgeworCQlLQVNTRVJUKCht
LT5tX2ZsYWdzICYgTV9FWFQpID09IDAsICgiJXM6IG1idWYgJXAgaGFzIE1fRVhUIiwKKwkJICAg
IF9fZnVuY19fLCBtKSk7CisJCW0tPm1fZXh0LmV4dF9idWYgPSBOVUxMOworCX0KKworCXpvbmUg
PSBtX2dldHpvbmUoc2l6ZSk7CisJcmV0dXJuICh1bWFfemFsbG9jX2FyZyh6b25lLCBtLCBob3cp
KTsKK30KKwordm9pZAorbV9jbGpzZXQoc3RydWN0IG1idWYgKm0sIHZvaWQgKmNsLCBpbnQgdHlw
ZSkKK3sKKwl1bWFfem9uZV90IHpvbmU7CisJaW50IHNpemU7CisKKwlzd2l0Y2ggKHR5cGUpIHsK
KwljYXNlIEVYVF9DTFVTVEVSOgorCQlzaXplID0gTUNMQllURVM7CisJCXpvbmUgPSB6b25lX2Ns
dXN0OworCQlicmVhazsKKyNpZiBNSlVNUEFHRVNJWkUgIT0gTUNMQllURVMKKwljYXNlIEVYVF9K
VU1CT1A6CisJCXNpemUgPSBNSlVNUEFHRVNJWkU7CisJCXpvbmUgPSB6b25lX2p1bWJvcDsKKwkJ
YnJlYWs7CisjZW5kaWYKKwljYXNlIEVYVF9KVU1CTzk6CisJCXNpemUgPSBNSlVNOUJZVEVTOwor
CQl6b25lID0gem9uZV9qdW1ibzk7CisJCWJyZWFrOworCWNhc2UgRVhUX0pVTUJPMTY6CisJCXNp
emUgPSBNSlVNMTZCWVRFUzsKKwkJem9uZSA9IHpvbmVfanVtYm8xNjsKKwkJYnJlYWs7CisJZGVm
YXVsdDoKKwkJcGFuaWMoIiVzOiB1bmtub3duIGNsdXN0ZXIgdHlwZSAlZCIsIF9fZnVuY19fLCB0
eXBlKTsKKwkJYnJlYWs7CisJfQorCisJbS0+bV9kYXRhID0gbS0+bV9leHQuZXh0X2J1ZiA9IGNs
OworCW0tPm1fZXh0LmV4dF9mcmVlID0gbS0+bV9leHQuZXh0X2FyZzEgPSBtLT5tX2V4dC5leHRf
YXJnMiA9IE5VTEw7CisJbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOworCW0tPm1fZXh0LmV4dF90
eXBlID0gdHlwZTsKKwltLT5tX2V4dC5leHRfZmxhZ3MgPSAwOworCW0tPm1fZXh0LmV4dF9jbnQg
PSB1bWFfZmluZF9yZWZjbnQoem9uZSwgY2wpOworCW0tPm1fZmxhZ3MgfD0gTV9FWFQ7CisKK30K
KworLyoKKyAqIG1fZ2V0MigpIGFsbG9jYXRlcyBtaW5pbXVtIG1idWYgdGhhdCB3b3VsZCBmaXQg
InNpemUiIGFyZ3VtZW50LgorICovCitzdHJ1Y3QgbWJ1ZiAqCittX2dldDIoaW50IHNpemUsIGlu
dCBob3csIHNob3J0IHR5cGUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbWJfYXJncyBhcmdzOwor
CXN0cnVjdCBtYnVmICptLCAqbjsKKworCWFyZ3MuZmxhZ3MgPSBmbGFnczsKKwlhcmdzLnR5cGUg
PSB0eXBlOworCisJaWYgKHNpemUgPD0gTUhMRU4gfHwgKHNpemUgPD0gTUxFTiAmJiAoZmxhZ3Mg
JiBNX1BLVEhEUikgPT0gMCkpCisJCXJldHVybiAodW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAm
YXJncywgaG93KSk7CisJaWYgKHNpemUgPD0gTUNMQllURVMpCisJCXJldHVybiAodW1hX3phbGxv
Y19hcmcoem9uZV9wYWNrLCAmYXJncywgaG93KSk7CisKKwlpZiAoc2l6ZSA+IE1KVU1QQUdFU0la
RSkKKwkJcmV0dXJuIChOVUxMKTsKKworCW0gPSB1bWFfemFsbG9jX2FyZyh6b25lX21idWYsICZh
cmdzLCBob3cpOworCWlmIChtID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwluID0gdW1h
X3phbGxvY19hcmcoem9uZV9qdW1ib3AsIG0sIGhvdyk7CisJaWYgKG4gPT0gTlVMTCkgeworCQl1
bWFfemZyZWUoem9uZV9tYnVmLCBtKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlyZXR1cm4g
KG0pOworfQorCisvKgorICogbV9nZXRqY2woKSByZXR1cm5zIGFuIG1idWYgd2l0aCBhIGNsdXN0
ZXIgb2YgdGhlIHNwZWNpZmllZCBzaXplIGF0dGFjaGVkLgorICogRm9yIHNpemUgaXQgdGFrZXMg
TUNMQllURVMsIE1KVU1QQUdFU0laRSwgTUpVTTlCWVRFUywgTUpVTTE2QllURVMuCisgKi8KK3N0
cnVjdCBtYnVmICoKK21fZ2V0amNsKGludCBob3csIHNob3J0IHR5cGUsIGludCBmbGFncywgaW50
IHNpemUpCit7CisJc3RydWN0IG1iX2FyZ3MgYXJnczsKKwlzdHJ1Y3QgbWJ1ZiAqbSwgKm47CisJ
dW1hX3pvbmVfdCB6b25lOworCisJaWYgKHNpemUgPT0gTUNMQllURVMpCisJCXJldHVybiBtX2dl
dGNsKGhvdywgdHlwZSwgZmxhZ3MpOworCisJYXJncy5mbGFncyA9IGZsYWdzOworCWFyZ3MudHlw
ZSA9IHR5cGU7CisKKwltID0gdW1hX3phbGxvY19hcmcoem9uZV9tYnVmLCAmYXJncywgaG93KTsK
KwlpZiAobSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJem9uZSA9IG1fZ2V0em9uZShz
aXplKTsKKwluID0gdW1hX3phbGxvY19hcmcoem9uZSwgbSwgaG93KTsKKwlpZiAobiA9PSBOVUxM
KSB7CisJCXVtYV96ZnJlZSh6b25lX21idWYsIG0pOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwly
ZXR1cm4gKG0pOworfQorCisvKgorICogQWxsb2NhdGUgYSBnaXZlbiBsZW5ndGggd29ydGggb2Yg
bWJ1ZnMgYW5kL29yIGNsdXN0ZXJzICh3aGF0ZXZlciBmaXRzCisgKiBiZXN0KSBhbmQgcmV0dXJu
IGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBhbGxvY2F0ZWQgY2hhaW4uICBJZiBhbgorICog
ZXhpc3RpbmcgbWJ1ZiBjaGFpbiBpcyBwcm92aWRlZCwgdGhlbiB3ZSB3aWxsIGFwcGVuZCB0aGUg
bmV3IGNoYWluCisgKiB0byB0aGUgZXhpc3Rpbmcgb25lIGJ1dCBzdGlsbCByZXR1cm4gdGhlIHRv
cCBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkCisgKiBjaGFpbi4KKyAqLworc3RydWN0IG1idWYgKgor
bV9nZXRtMihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IGhvdywgc2hvcnQgdHlwZSwgaW50
IGZsYWdzKQoreworCXN0cnVjdCBtYnVmICptYiwgKm5tID0gTlVMTCwgKm10YWlsID0gTlVMTDsK
KworCUtBU1NFUlQobGVuID49IDAsICgiJXM6IGxlbiBpcyA8IDAiLCBfX2Z1bmNfXykpOworCisJ
LyogVmFsaWRhdGUgZmxhZ3MuICovCisJZmxhZ3MgJj0gKE1fUEtUSERSIHwgTV9FT1IpOworCisJ
LyogUGFja2V0IGhlYWRlciBtYnVmIG11c3QgYmUgZmlyc3QgaW4gY2hhaW4uICovCisJaWYgKChm
bGFncyAmIE1fUEtUSERSKSAmJiBtICE9IE5VTEwpCisJCWZsYWdzICY9IH5NX1BLVEhEUjsKKwor
CS8qIExvb3AgYW5kIGFwcGVuZCBtYXhpbXVtIHNpemVkIG1idWZzIHRvIHRoZSBjaGFpbiB0YWls
LiAqLworCXdoaWxlIChsZW4gPiAwKSB7CisJCWlmIChsZW4gPiBNQ0xCWVRFUykKKwkJCW1iID0g
bV9nZXRqY2woaG93LCB0eXBlLCAoZmxhZ3MgJiBNX1BLVEhEUiksCisJCQkgICAgTUpVTVBBR0VT
SVpFKTsKKwkJZWxzZSBpZiAobGVuID49IE1JTkNMU0laRSkKKwkJCW1iID0gbV9nZXRjbChob3cs
IHR5cGUsIChmbGFncyAmIE1fUEtUSERSKSk7CisJCWVsc2UgaWYgKGZsYWdzICYgTV9QS1RIRFIp
CisJCQltYiA9IG1fZ2V0aGRyKGhvdywgdHlwZSk7CisJCWVsc2UKKwkJCW1iID0gbV9nZXQoaG93
LCB0eXBlKTsKKworCQkvKiBGYWlsIHRoZSB3aG9sZSBvcGVyYXRpb24gaWYgb25lIG1idWYgY2Fu
J3QgYmUgYWxsb2NhdGVkLiAqLworCQlpZiAobWIgPT0gTlVMTCkgeworCQkJaWYgKG5tICE9IE5V
TEwpCisJCQkJbV9mcmVlbShubSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwkJLyogQm9v
ayBrZWVwaW5nLiAqLworCQlsZW4gLT0gTV9TSVpFKG1iKTsKKwkJaWYgKG10YWlsICE9IE5VTEwp
CisJCQltdGFpbC0+bV9uZXh0ID0gbWI7CisJCWVsc2UKKwkJCW5tID0gbWI7CisJCW10YWlsID0g
bWI7CisJCWZsYWdzICY9IH5NX1BLVEhEUjsJLyogT25seSB2YWxpZCBvbiB0aGUgZmlyc3QgbWJ1
Zi4gKi8KKwl9CisJaWYgKGZsYWdzICYgTV9FT1IpCisJCW10YWlsLT5tX2ZsYWdzIHw9IE1fRU9S
OyAgLyogT25seSB2YWxpZCBvbiB0aGUgbGFzdCBtYnVmLiAqLworCisJLyogSWYgbWJ1ZiB3YXMg
c3VwcGxpZWQsIGFwcGVuZCBuZXcgY2hhaW4gdG8gdGhlIGVuZCBvZiBpdC4gKi8KKwlpZiAobSAh
PSBOVUxMKSB7CisJCWZvciAobXRhaWwgPSBtOyBtdGFpbC0+bV9uZXh0ICE9IE5VTEw7IG10YWls
ID0gbXRhaWwtPm1fbmV4dCkKKwkJCTsKKwkJbXRhaWwtPm1fbmV4dCA9IG5tOworCQltdGFpbC0+
bV9mbGFncyAmPSB+TV9FT1I7CisJfSBlbHNlCisJCW0gPSBubTsKKworCXJldHVybiAobSk7Cit9
CisKKy8qLQorICogQ29uZmlndXJlIGEgcHJvdmlkZWQgbWJ1ZiB0byByZWZlciB0byB0aGUgcHJv
dmlkZWQgZXh0ZXJuYWwgc3RvcmFnZQorICogYnVmZmVyIGFuZCBzZXR1cCBhIHJlZmVyZW5jZSBj
b3VudCBmb3Igc2FpZCBidWZmZXIuICBJZiB0aGUgc2V0dGluZworICogdXAgb2YgdGhlIHJlZmVy
ZW5jZSBjb3VudCBmYWlscywgdGhlIE1fRVhUIGJpdCB3aWxsIG5vdCBiZSBzZXQuICBJZgorICog
c3VjY2Vzc2Z1bGwsIHRoZSBNX0VYVCBiaXQgaXMgc2V0IGluIHRoZSBtYnVmJ3MgZmxhZ3MuCisg
KgorICogQXJndW1lbnRzOgorICogICAgbWIgICAgIFRoZSBleGlzdGluZyBtYnVmIHRvIHdoaWNo
IHRvIGF0dGFjaCB0aGUgcHJvdmlkZWQgYnVmZmVyLgorICogICAgYnVmICAgIFRoZSBhZGRyZXNz
IG9mIHRoZSBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KKyAqICAgIHNpemUgICBU
aGUgc2l6ZSBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyLgorICogICAgZnJlZWYgIEEgcG9pbnRlciB0
byBhIHJvdXRpbmUgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUKKyAqICAgICAg
ICAgICBwcm92aWRlZCBleHRlcm5hbCBzdG9yYWdlIGJ1ZmZlci4KKyAqICAgIGFyZ3MgICBBIHBv
aW50ZXIgdG8gYW4gYXJndW1lbnQgc3RydWN0dXJlIChvZiBhbnkgdHlwZSkgdG8gYmUgcGFzc2Vk
CisgKiAgICAgICAgICAgdG8gdGhlIHByb3ZpZGVkIGZyZWVmIHJvdXRpbmUgKG1heSBiZSBOVUxM
KS4KKyAqICAgIGZsYWdzICBBbnkgb3RoZXIgZmxhZ3MgdG8gYmUgcGFzc2VkIHRvIHRoZSBwcm92
aWRlZCBtYnVmLgorICogICAgdHlwZSAgIFRoZSB0eXBlIHRoYXQgdGhlIGV4dGVybmFsIHN0b3Jh
Z2UgYnVmZmVyIHNob3VsZCBiZQorICogICAgICAgICAgIGxhYmVsZWQgd2l0aC4KKyAqCisgKiBS
ZXR1cm5zOgorICogICAgTm90aGluZy4KKyAqLworaW50CittX2V4dGFkZChzdHJ1Y3QgbWJ1ZiAq
bWIsIGNhZGRyX3QgYnVmLCB1X2ludCBzaXplLAorICAgIHZvaWQgKCpmcmVlZikoc3RydWN0IG1i
dWYgKiwgdm9pZCAqLCB2b2lkICopLCB2b2lkICphcmcxLCB2b2lkICphcmcyLAorICAgIGludCBm
bGFncywgaW50IHR5cGUsIGludCB3YWl0KQoreworCUtBU1NFUlQodHlwZSAhPSBFWFRfQ0xVU1RF
UiwgKCIlczogRVhUX0NMVVNURVIgbm90IGFsbG93ZWQiLCBfX2Z1bmNfXykpOworCisJaWYgKHR5
cGUgIT0gRVhUX0VYVFJFRikKKwkJbWItPm1fZXh0LmV4dF9jbnQgPSB1bWFfemFsbG9jKHpvbmVf
ZXh0X3JlZmNudCwgd2FpdCk7CisKKwlpZiAobWItPm1fZXh0LmV4dF9jbnQgPT0gTlVMTCkKKwkJ
cmV0dXJuIChFTk9NRU0pOworCisJKihtYi0+bV9leHQuZXh0X2NudCkgPSAxOworCW1iLT5tX2Zs
YWdzIHw9IChNX0VYVCB8IGZsYWdzKTsKKwltYi0+bV9leHQuZXh0X2J1ZiA9IGJ1ZjsKKwltYi0+
bV9kYXRhID0gbWItPm1fZXh0LmV4dF9idWY7CisJbWItPm1fZXh0LmV4dF9zaXplID0gc2l6ZTsK
KwltYi0+bV9leHQuZXh0X2ZyZWUgPSBmcmVlZjsKKwltYi0+bV9leHQuZXh0X2FyZzEgPSBhcmcx
OworCW1iLT5tX2V4dC5leHRfYXJnMiA9IGFyZzI7CisJbWItPm1fZXh0LmV4dF90eXBlID0gdHlw
ZTsKKwltYi0+bV9leHQuZXh0X2ZsYWdzID0gMDsKKworCXJldHVybiAoMCk7Cit9CisKK3N0cnVj
dCBtYnVmICoKK21fZnJlZShzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbiA9IG0t
Pm1fbmV4dDsKKworCWlmICgobS0+bV9mbGFncyAmIChNX1BLVEhEUnxNX05PRlJFRSkpID09IChN
X1BLVEhEUnxNX05PRlJFRSkpCisJCW1fdGFnX2RlbGV0ZV9jaGFpbihtLCBOVUxMKTsKKwlpZiAo
bS0+bV9mbGFncyAmIE1fRVhUKQorCQltYl9mcmVlX2V4dChtKTsKKwllbHNlIGlmICgobS0+bV9m
bGFncyAmIE1fTk9GUkVFKSA9PSAwKQorCQl1bWFfemZyZWUoem9uZV9tYnVmLCBtKTsKKwlyZXR1
cm4gKG4pOworfQorCisvKgorICogRnJlZSBhbiBlbnRpcmUgY2hhaW4gb2YgbWJ1ZnMgYW5kIGFz
c29jaWF0ZWQgZXh0ZXJuYWwgYnVmZmVycywgaWYKKyAqIGFwcGxpY2FibGUuCisgKi8KK3ZvaWQK
K21fZnJlZW0oc3RydWN0IG1idWYgKm1iKQoreworCisJd2hpbGUgKG1iICE9IE5VTEwpCisJCW1i
ID0gbV9mcmVlKG1iKTsKK30KZGlmZiAtLWdpdCBhL3N5cy9kZXYvbmV0bWFwL25ldG1hcF9nZW5l
cmljLmMgYi9zeXMvZGV2L25ldG1hcC9uZXRtYXBfZ2VuZXJpYy5jCi0tLSBhL3N5cy9kZXYvbmV0
bWFwL25ldG1hcF9nZW5lcmljLmMKKysrIGIvc3lzL2Rldi9uZXRtYXAvbmV0bWFwX2dlbmVyaWMu
YwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJbS0+bV9leHQuZXh0X2ZyZWUgPSBOVUxMOwogCWlmIChH
RVRfTUJVRl9SRUZDTlQobSkgPT0gMCkKIAkJU0VUX01CVUZfUkVGQ05UKG0sIDEpOwotCXVtYV96
ZnJlZSh6b25lX3BhY2ssIG0pOworCW1fZnJlZShtKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1
Y3QgbWJ1ZiAqCmRpZmYgLS1naXQgYS9zeXMvZGV2L2N4Z2JlL3Q0X3NnZS5jIGIvc3lzL2Rldi9j
eGdiZS90NF9zZ2UuYwotLS0gYS9zeXMvZGV2L2N4Z2JlL3Q0X3NnZS5jCisrKyBiL3N5cy9kZXYv
Y3hnYmUvdDRfc2dlLmMKQEAgLTcwLDYgKzcwLDEyIEBACiAjaW5jbHVkZSAiY29tbW9uL3Q0X21z
Zy5oIgogI2luY2x1ZGUgInQ0X21wX3JpbmcuaCIKIAorLyoKKyAqIEludGVybmFsIG1idWYoOSkg
a25vd2xlZGdlLgorICovCit1bWFfem9uZV90ICAgICAgbV9nZXR6b25lKGludCk7Cit2b2lkCQlt
X2NsanNldChzdHJ1Y3QgbWJ1ZiAqbSwgdm9pZCAqY2wsIGludCB0eXBlKTsKKwogI2lmZGVmIFQ0
X1BLVF9USU1FU1RBTVAKICNkZWZpbmUgUlhfQ09QWV9USFJFU0hPTEQgKE1JTkNMU0laRSAtIDgp
CiAjZWxzZQpAQCAtMTU3MCw3ICsxNTc2LDcgQEAKIAkJTVBBU1MoY2xtICE9IE5VTEwpOwogCQlt
ID0gKHN0cnVjdCBtYnVmICopKHNkLT5jbCArIHNkLT5ubWJ1ZiAqIE1TSVpFKTsKIAkJLyogTm8g
Ynplcm8gcmVxdWlyZWQgKi8KLQkJaWYgKG1faW5pdChtLCBOVUxMLCAwLCBNX05PV0FJVCwgTVRf
REFUQSwKKwkJaWYgKG1faW5pdChtLCBNX05PV0FJVCwgTVRfREFUQSwKIAkJICAgIGZyX29mZnNl
dCA9PSAwID8gTV9QS1RIRFIgfCBNX05PRlJFRSA6IE1fTk9GUkVFKSkKIAkJCXJldHVybiAoTlVM
TCk7CiAJCWZsLT5tYnVmX2lubGluZWQrKzsKZGlmZiAtLWdpdCBhL3N5cy9kZXYvY3hnYmUvdDRf
bmV0bWFwLmMgYi9zeXMvZGV2L2N4Z2JlL3Q0X25ldG1hcC5jCi0tLSBhL3N5cy9kZXYvY3hnYmUv
dDRfbmV0bWFwLmMKKysrIGIvc3lzL2Rldi9jeGdiZS90NF9uZXRtYXAuYwpAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgPHN5cy9idXMuaD4KICNpbmNsdWRlIDxzeXMvZXZlbnRoYW5kbGVyLmg+
CiAjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVk
ZSA8c3lzL21idWYuaD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c3lzL3Nl
bGluZm8uaD4KZGlmZiAtLWdpdCBhL3N5cy9kZXYvY3hnYi9jeGdiX3NnZS5jIGIvc3lzL2Rldi9j
eGdiL2N4Z2Jfc2dlLmMKLS0tIGEvc3lzL2Rldi9jeGdiL2N4Z2Jfc2dlLmMKKysrIGIvc3lzL2Rl
di9jeGdiL2N4Z2Jfc2dlLmMKQEAgLTc3LDYgKzc3LDEyIEBACiAjaW5jbHVkZSA8Y3hnYl9pbmNs
dWRlLmg+CiAjaW5jbHVkZSA8c3lzL212ZWMuaD4KIAorLyoKKyAqIEludGVybmFsIG1idWYoOSkg
a25vd2xlZGdlLgorICovCit1bWFfem9uZV90CW1fZ2V0em9uZShpbnQpOwordm9pZAkJbV9jbGpz
ZXQoc3RydWN0IG1idWYgKm0sIHZvaWQgKmNsLCBpbnQgdHlwZSk7CisKIGludAl0eHFfZmlsbHMg
PSAwOwogaW50CW11bHRpcV90eF9lbmFibGUgPSAxOwogCkBAIC03MTMsNyArNzE5LDcgQEAKIAkJ
ICogV2UgYWxsb2NhdGUgYW4gdW5pbml0aWFsaXplZCBtYnVmICsgY2x1c3RlciwgbWJ1ZiBpcwog
CQkgKiBpbml0aWFsaXplZCBhZnRlciByeC4KIAkJICovCi0JCWlmIChxLT56b25lID09IHpvbmVf
cGFjaykgeworCQlpZiAocS0+dHlwZSA9PSBFWFRfQ0xVU1RFUikgewogCQkJaWYgKChtID0gbV9n
ZXRjbChNX05PV0FJVCwgTVRfTk9JTklULCBNX1BLVEhEUikpID09IE5VTEwpCiAJCQkJYnJlYWs7
CiAJCQljbCA9IG0tPm1fZXh0LmV4dF9idWY7CQkJCkBAIC03MzgsNyArNzQ0LDcgQEAKIAkJICAg
IGNsLCBxLT5idWZfc2l6ZSwgcmVmaWxsX2ZsX2NiLCAmY2JfYXJnLCAwKTsKIAkJCiAJCWlmIChl
cnIgIT0gMCB8fCBjYl9hcmcuZXJyb3IpIHsKLQkJCWlmIChxLT56b25lICE9IHpvbmVfcGFjaykK
KwkJCWlmIChxLT50eXBlICE9IEVYVF9DTFVTVEVSKQogCQkJCXVtYV96ZnJlZShxLT56b25lLCBj
bCk7CiAJCQltX2ZyZWUobSk7CiAJCQlnb3RvIGRvbmU7CkBAIC03OTQsMTQgKzgwMCwxMiBAQAog
CQlpZiAoZC0+ZmxhZ3MgJiBSWF9TV19ERVNDX0lOVVNFKSB7CiAJCQlidXNfZG1hbWFwX3VubG9h
ZChxLT5lbnRyeV90YWcsIGQtPm1hcCk7CiAJCQlidXNfZG1hbWFwX2Rlc3Ryb3kocS0+ZW50cnlf
dGFnLCBkLT5tYXApOwotCQkJaWYgKHEtPnpvbmUgPT0gem9uZV9wYWNrKSB7Ci0JCQkJbV9pbml0
KGQtPm0sIHpvbmVfcGFjaywgTUNMQllURVMsCi0JCQkJICAgIE1fTk9XQUlULCBNVF9EQVRBLCBN
X0VYVCk7Ci0JCQkJdW1hX3pmcmVlKHpvbmVfcGFjaywgZC0+bSk7CisJCQlpZiAocS0+dHlwZSA9
PSBFWFRfQ0xVU1RFUikgeworCQkJCW1faW5pdChkLT5tLCBNX05PV0FJVCwgTVRfREFUQSwgTV9F
WFQpOworCQkJCXVtYV96ZnJlZShxLT56b25lLCBkLT5tKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbV9p
bml0KGQtPm0sIHpvbmVfbWJ1ZiwgTUxFTiwKLQkJCQkgICAgTV9OT1dBSVQsIE1UX0RBVEEsIDAp
OwotCQkJCXVtYV96ZnJlZSh6b25lX21idWYsIGQtPm0pOworCQkJCW1faW5pdChkLT5tLCBNX05P
V0FJVCwgTVRfREFUQSwgMCk7CisJCQkJbV9mcmVlKGQtPm0pOwogCQkJCXVtYV96ZnJlZShxLT56
b25lLCBkLT5yeHNkX2NsKTsKIAkJCX0JCQkKIAkJfQpAQCAtMjUxMCwyNCArMjUxNCwxMiBAQAog
CSAgICBmbGl0c190b19kZXNjKHNnbF9sZW4oVFhfTUFYX1NFR1MgKyAxKSArIDMpOwogCiAJcS0+
ZmxbMF0uYnVmX3NpemUgPSBNQ0xCWVRFUzsKLQlxLT5mbFswXS56b25lID0gem9uZV9wYWNrOwot
CXEtPmZsWzBdLnR5cGUgPSBFWFRfUEFDS0VUOworCXEtPmZsWzBdLnpvbmUgPSBtX2dldHpvbmUo
cS0+ZmxbMF0uYnVmX3NpemUpOworCXEtPmZsWzBdLnR5cGUgPSBtX2dldHR5cGUocS0+ZmxbMF0u
YnVmX3NpemUpOwogCi0JaWYgKHAtPmp1bWJvX2J1Zl9zaXplID09ICBNSlVNMTZCWVRFUykgewot
CQlxLT5mbFsxXS56b25lID0gem9uZV9qdW1ibzE2OwotCQlxLT5mbFsxXS50eXBlID0gRVhUX0pV
TUJPMTY7Ci0JfSBlbHNlIGlmIChwLT5qdW1ib19idWZfc2l6ZSA9PSAgTUpVTTlCWVRFUykgewot
CQlxLT5mbFsxXS56b25lID0gem9uZV9qdW1ibzk7Ci0JCXEtPmZsWzFdLnR5cGUgPSBFWFRfSlVN
Qk85OwkJCi0JfSBlbHNlIGlmIChwLT5qdW1ib19idWZfc2l6ZSA9PSAgTUpVTVBBR0VTSVpFKSB7
Ci0JCXEtPmZsWzFdLnpvbmUgPSB6b25lX2p1bWJvcDsKLQkJcS0+ZmxbMV0udHlwZSA9IEVYVF9K
VU1CT1A7Ci0JfSBlbHNlIHsKLQkJS0FTU0VSVCgwLCAoImNhbid0IGRlYWwgd2l0aCBqdW1ib19i
dWZfc2l6ZSAlZC4iLCBwLT5qdW1ib19idWZfc2l6ZSkpOwotCQlyZXQgPSBFRE9PRlVTOwotCQln
b3RvIGVycjsKLQl9CiAJcS0+ZmxbMV0uYnVmX3NpemUgPSBwLT5qdW1ib19idWZfc2l6ZTsKKwlx
LT5mbFsxXS56b25lID0gbV9nZXR6b25lKHEtPmZsWzFdLmJ1Zl9zaXplKTsKKwlxLT5mbFsxXS50
eXBlID0gbV9nZXR0eXBlKHEtPmZsWzFdLmJ1Zl9zaXplKTsKIAogCS8qIEFsbG9jYXRlIGFuZCBz
ZXR1cCB0aGUgbHJvX2N0cmwgc3RydWN0dXJlICovCiAJcS0+bHJvLmVuYWJsZWQgPSAhIShwaS0+
aWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9MUk8pOwpAQCAtMjcyNSw4ICsyNzE3LDggQEAKIAkJ
aWYgKChzb3Blb3AgPT0gUlNQUV9TT1BfRU9QKSB8fAogCQkgICAgKHNvcGVvcCA9PSBSU1BRX1NP
UCkpCiAJCQlmbGFncyB8PSBNX1BLVEhEUjsKLQkJbV9pbml0KG0sIGZsLT56b25lLCBmbC0+YnVm
X3NpemUsIE1fTk9XQUlULCBNVF9EQVRBLCBmbGFncyk7Ci0JCWlmIChmbC0+em9uZSA9PSB6b25l
X3BhY2spIHsKKwkJbV9pbml0KG0sIE1fTk9XQUlULCBNVF9EQVRBLCBmbGFncyk7CisJCWlmIChm
bC0+dHlwZSA9PSBFWFRfQ0xVU1RFUikgewogCQkJLyoKIAkJCSAqIHJlc3RvcmUgY2xvYmJlcmVk
IGRhdGEgcG9pbnRlcgogCQkJICovCmRpZmYgLS1naXQgYS9zeXMvZGV2L2N4Z2IvY3hnYl9hZGFw
dGVyLmggYi9zeXMvZGV2L2N4Z2IvY3hnYl9hZGFwdGVyLmgKLS0tIGEvc3lzL2Rldi9jeGdiL2N4
Z2JfYWRhcHRlci5oCisrKyBiL3N5cy9kZXYvY3hnYi9jeGdiX2FkYXB0ZXIuaApAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CiAjaW5jbHVkZSA8c3lzL2J1Zl9yaW5n
Lmg+CiAjaW5jbHVkZSA8c3lzL3Rhc2txdWV1ZS5oPgorI2luY2x1ZGUgPHZtL3VtYS5oPgogCiAj
aW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+CiAjaW5jbHVkZSA8bmV0L2lmLmg+Cgo=


--b1_75bea7beb39ccff30d15b27f6a127c4f--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?differential-rev-PHID-DREV-bxjtcdv4xb7nazwld5tw-req>