[PATCH 2/5] builtin: Reduce use of redundant strlen

Eric Blake via M4-patches <[email protected]> Wed, 2 Apr 2025 17:28:37 -0500
Newsgroups gmane.comp.gnu.m4.patches
Message-ID <[email protected]>
V2hlbiBkZWFsaW5nIHdpdGggdG9rZW5zLCB3ZSBvZnRlbiBrbm93IHRoZSBsZW5ndGggb2YgdGhl
IHRva2VuIGZyb20KdGhlIHRpbWUgaXQgd2FzIHBhcnNlZCBvciBjcmVhdGVkIGJ5IGV4cGFuc2lv
bjsgc2F2ZSB0aGlzIGluZm9ybWF0aW9uCmFsb25nc2lkZSB0aGUgdG9rZW4gaW5zdGVhZCBvZiBj
YWxsaW5nIHN0cmxlbigpIGV2ZXJ5d2hlcmUgdG8gcmUtbGVhcm4KaXQsIGZvciBhIHNsaWdodCBv
cHRpbWl6YXRpb24uICBUaGUgcGxhY2VtZW50IG9mIHRoZSBuZXcgbWVtYmVyIGluCnN0cnVjdCB0
b2tlbl9kYXRhIGlzIGludGVudGlvbmFsIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBzaXplIG9mIHRo
ZQpzdHJ1Y3Qgb24gNjQtYml0IG1hY2hpbmVzLCBldmVuIGlmIHRoZSBzaXplIG9ubHkgbWF0dGVy
cyBmb3IgdGV4dAp0b2tlbnMuICBUaGUgY29kZSBhbHJlYWR5IGhhcyBhIG51bWJlciBvZiBwbGFj
ZXMgdGhhdCBhc3N1bWUgYSBtYXhpbXVtCnRva2VuIGxlbmd0aCBib3VuZGVkIGJ5IGludDsgc2Ny
dWJiaW5nIHRoYXQgdG8gYWxsb3cgYSBmdWxsIHNpemVfdAp3b3VsZCBiZSBhIGxhcmdlciBwYXRj
aC4KCiogc3JjL200LmggKHRva2VuX2RhdGEpOiBBZGQgc2l6ZSBtZW1iZXIuCihUT0tFTl9EQVRB
X0xFTiwgU1lNQk9MX1RFWFRfTEVOKTogTmV3IG1hY3Jvcy4KKiBzcmMvaW5wdXQuYyAobmV4dF90
b2tlbik6IFJlbWVtYmVyIHNpemUuCiogc3JjL21hY3JvLmMgKGV4cGFuZF9hcmd1bWVudCwgY29s
bGVjdF9hcmd1bWVudHMpOiBMaWtld2lzZS4KKiBzcmMvYnVpbHRpbi5jIChBUkdMRU4pOiBOZXcg
bWFjcm8uCihkZWZpbmVfdXNlcl9tYWNybyk6IFNldCBsZW5ndGgsIGFuZCB3YXJuIHVzZXIgb24g
b3ZlcnNpemUgY29udGVudC4KKG00X2V2YWwpOiBVc2UgY29tcGlsZS10aW1lIGJvdW5kIGZvciBy
YWRpeC4KKGR1bXBfYXJncywgbTRfaWZkZWYsIG00X2lmZWxzZSwgbTRfYnVpbHRpbiwgbTRfaW5k
aXIsIG00X2RlZm4pCihtNF9tYWtldGVtcCwgbTRfbWtzdGVtcCwgbTRfbTR3cmFwLCBtNF9sZW4s
IG00X3N1YnN0ciwgbTRfdHJhbnNsaXQpCihtNF9yZWdleHAsIG00X3BhdHN1YnN0LCBleHBhbmRf
dXNlcl9tYWNybyk6IFV0aWxpemUga25vd24gc2l6ZS4KLS0tCiBzcmMvYnVpbHRpbi5jIHwgODQg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMv
aW5wdXQuYyAgIHwgIDEgKwogc3JjL200LmggICAgICB8ICA3ICsrKysrCiBzcmMvbWFjcm8uYyAg
IHwgIDUgKysrCiA0IGZpbGVzIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9idWlsdGluLmMgYi9zcmMvYnVpbHRpbi5jCmluZGV4IDM0
NDdkYzMzLi42OWViMmE4YyAxMDA2NDQKLS0tIGEvc3JjL2J1aWx0aW4uYworKysgYi9zcmMvYnVp
bHRpbi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAid2FpdC1wcm9jZXNzLmgiCgogI2Rl
ZmluZSBBUkcoaSkgKGFyZ2MgPiAoaSkgPyBUT0tFTl9EQVRBX1RFWFQgKGFyZ3ZbaV0pIDogIiIp
CisjZGVmaW5lIEFSR0xFTihpKSAoYXJnYyA+IChpKSA/IFRPS0VOX0RBVEFfTEVOIChhcmd2W2ld
KSA6IDApCgogLyogSW5pdGlhbGl6YXRpb24gb2YgYnVpbHRpbiBhbmQgcHJlZGVmaW5lZCBtYWNy
b3MuICBUaGUgdGFibGUKICAgICJidWlsdGluX3RhYiIgaXMgYm90aCB1c2VkIGZvciBpbml0aWFs
aXphdGlvbiwgYW5kIGJ5IHRoZSAiYnVpbHRpbiIKQEAgLTI5MCw2ICsyOTEsMTUgQEAgZGVmaW5l
X3VzZXJfbWFjcm8gKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnRleHQsIHN5bWJvbF9s
b29rdXAgbW9kZSkKIHsKICAgc3ltYm9sICpzOwogICBjaGFyICpkZWZuID0geHN0cmR1cCAodGV4
dCA/IHRleHQgOiAiIik7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRlZm4pOworCisgIGlmIChs
ZW4gPiBJTlRfTUFYKQorICAgIHsKKyAgICAgIE00RVJST1IgKCh3YXJuaW5nX3N0YXR1cywgMCwK
KyAgICAgICAgICAgICAgICBfKCJtYWNybyBgJXMnIGRlZmluaXRpb24gdG9vIGxvbmc7IHRydW5j
YXRpbmcgdG8gSU5UX01BWCBieXRlcyIpLAorICAgICAgICAgICAgICAgICAgbmFtZSkpOworICAg
ICAgbGVuID0gSU5UX01BWDsKKyAgICB9CgogICBzID0gbG9va3VwX3N5bWJvbCAobmFtZSwgbW9k
ZSk7CiAgIGlmIChTWU1CT0xfVFlQRSAocykgPT0gVE9LRU5fVEVYVCkKQEAgLTI5NywxMiArMzA3
LDEyIEBAIGRlZmluZV91c2VyX21hY3JvIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0
ZXh0LCBzeW1ib2xfbG9va3VwIG1vZGUpCgogICBTWU1CT0xfVFlQRSAocykgPSBUT0tFTl9URVhU
OwogICBTWU1CT0xfVEVYVCAocykgPSBkZWZuOworICBTWU1CT0xfVEVYVF9MRU4gKHMpID0gbGVu
OwoKICAgLyogSW1wbGVtZW50IC0td2Fybi1tYWNyby1zZXF1ZW5jZS4gICovCiAgIGlmIChtYWNy
b19zZXF1ZW5jZV9pbnVzZSAmJiB0ZXh0KQogICAgIHsKICAgICAgIHJlZ29mZl90IG9mZnNldCA9
IDA7Ci0gICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkZWZuKTsKCiAgICAgICB3aGlsZSAoKG9m
ZnNldCA9IHJlX3NlYXJjaCAoJm1hY3JvX3NlcXVlbmNlX2J1ZiwgZGVmbiwgbGVuLCBvZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC0gb2Zmc2V0LCAmbWFjcm9f
c2VxdWVuY2VfcmVncykpID49IDApCkBAIC0zNDUsOSArMzU1LDcgQEAgYnVpbHRpbl9pbml0ICh2
b2lkKQogICAgICAgewogICAgICAgICBpZiAocHJlZml4X2FsbF9idWlsdGlucykKICAgICAgICAg
ICB7Ci0gICAgICAgICAgICBzdHJpbmcgPSAoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKGJwLT5u
YW1lKSArIDQpOwotICAgICAgICAgICAgc3RyY3B5IChzdHJpbmcsICJtNF8iKTsKLSAgICAgICAg
ICAgIHN0cmNhdCAoc3RyaW5nLCBicC0+bmFtZSk7CisgICAgICAgICAgICBzdHJpbmcgPSB4YXNw
cmludGYgKCJtNF8lcyIsIGJwLT5uYW1lKTsKICAgICAgICAgICAgIGRlZmluZV9idWlsdGluIChz
dHJpbmcsIGJwLCBTWU1CT0xfSU5TRVJUKTsKICAgICAgICAgICAgIGZyZWUgKHN0cmluZyk7CiAg
ICAgICAgICAgfQpAQCAtNTE0LDcgKzUyMiw3IEBAIGR1bXBfYXJncyAoc3RydWN0IG9ic3RhY2sg
Km9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2LAogICAgICAgaWYgKHF1b3RlZCkKICAg
ICAgICAgb2JzdGFja19ncm93IChvYnMsIGxxdW90ZS5zdHJpbmcsIGxxdW90ZS5sZW5ndGgpOwog
ICAgICAgb2JzdGFja19ncm93IChvYnMsIFRPS0VOX0RBVEFfVEVYVCAoYXJndltpXSksCi0gICAg
ICAgICAgICAgICAgICAgIHN0cmxlbiAoVE9LRU5fREFUQV9URVhUIChhcmd2W2ldKSkpOworICAg
ICAgICAgICAgICAgICAgICBUT0tFTl9EQVRBX0xFTiAoYXJndltpXSkpOwogICAgICAgaWYgKHF1
b3RlZCkKICAgICAgICAgb2JzdGFja19ncm93IChvYnMsIHJxdW90ZS5zdHJpbmcsIHJxdW90ZS5s
ZW5ndGgpOwogICAgIH0KQEAgLTYyMywyNyArNjMxLDI1IEBAIHN0YXRpYyB2b2lkCiBtNF9pZmRl
ZiAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2KQogewog
ICBzeW1ib2wgKnM7Ci0gIGNvbnN0IGNoYXIgKnJlc3VsdDsKKyAgaW50IHJlc3VsdCA9IDA7Cgog
ICBpZiAoYmFkX2FyZ2MgKGFyZ3ZbMF0sIGFyZ2MsIDMsIDQpKQogICAgIHJldHVybjsKICAgcyA9
IGxvb2t1cF9zeW1ib2wgKEFSRyAoMSksIFNZTUJPTF9MT09LVVApOwoKICAgaWYgKHMgIT0gTlVM
TCAmJiBTWU1CT0xfVFlQRSAocykgIT0gVE9LRU5fVk9JRCkKLSAgICByZXN1bHQgPSBBUkcgKDIp
OworICAgIHJlc3VsdCA9IDI7CiAgIGVsc2UgaWYgKGFyZ2MgPj0gNCkKLSAgICByZXN1bHQgPSBB
UkcgKDMpOwotICBlbHNlCi0gICAgcmVzdWx0ID0gTlVMTDsKKyAgICByZXN1bHQgPSAzOwoKLSAg
aWYgKHJlc3VsdCAhPSBOVUxMKQotICAgIG9ic3RhY2tfZ3JvdyAob2JzLCByZXN1bHQsIHN0cmxl
biAocmVzdWx0KSk7CisgIGlmIChyZXN1bHQpCisgICAgb2JzdGFja19ncm93IChvYnMsIEFSRyAo
cmVzdWx0KSwgQVJHTEVOIChyZXN1bHQpKTsKIH0KCiBzdGF0aWMgdm9pZAogbTRfaWZlbHNlIChz
dHJ1Y3Qgb2JzdGFjayAqb2JzLCBpbnQgYXJnYywgdG9rZW5fZGF0YSAqKmFyZ3YpCiB7Ci0gIGNv
bnN0IGNoYXIgKnJlc3VsdDsKKyAgaW50IHJlc3VsdDsKICAgdG9rZW5fZGF0YSAqbWUgPSBhcmd2
WzBdOwoKICAgaWYgKGFyZ2MgPT0gMikKQEAgLTY1OCwxMSArNjY0LDExIEBAIG00X2lmZWxzZSAo
c3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2KQogICBhcmd2
Kys7CiAgIGFyZ2MtLTsKCi0gIHJlc3VsdCA9IE5VTEw7Ci0gIHdoaWxlIChyZXN1bHQgPT0gTlVM
TCkKKyAgcmVzdWx0ID0gMDsKKyAgd2hpbGUgKCFyZXN1bHQpCgogICAgIGlmIChTVFJFUSAoQVJH
ICgwKSwgQVJHICgxKSkpCi0gICAgICByZXN1bHQgPSBBUkcgKDIpOworICAgICAgcmVzdWx0ID0g
MjsKCiAgICAgZWxzZQogICAgICAgc3dpdGNoIChhcmdjKQpAQCAtNjcyLDcgKzY3OCw3IEBAIG00
X2lmZWxzZSAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2
KQoKICAgICAgICAgY2FzZSA0OgogICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgcmVzdWx0ID0g
QVJHICgzKTsKKyAgICAgICAgICByZXN1bHQgPSAzOwogICAgICAgICAgIGJyZWFrOwoKICAgICAg
ICAgZGVmYXVsdDoKQEAgLTY4MCw3ICs2ODYsNyBAQCBtNF9pZmVsc2UgKHN0cnVjdCBvYnN0YWNr
ICpvYnMsIGludCBhcmdjLCB0b2tlbl9kYXRhICoqYXJndikKICAgICAgICAgICBhcmd2ICs9IDM7
CiAgICAgICAgIH0KCi0gIG9ic3RhY2tfZ3JvdyAob2JzLCByZXN1bHQsIHN0cmxlbiAocmVzdWx0
KSk7CisgIG9ic3RhY2tfZ3JvdyAob2JzLCBBUkcgKHJlc3VsdCksIEFSR0xFTiAocmVzdWx0KSk7
CiB9CiAMCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCkBAIC04MzIsNiArODM4LDcgQEAgbTRfYnVpbHRpbiAoc3Ry
dWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2KQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICBUT0tFTl9EQVRBX1RZUEUgKGFyZ3ZbaV0pID0gVE9LRU5fVEVY
VDsKICAgICAgICAgICAgICAgVE9LRU5fREFUQV9URVhUIChhcmd2W2ldKSA9IChjaGFyICopICIi
OworICAgICAgICAgICAgICBUT0tFTl9EQVRBX0xFTiAoYXJndltpXSkgPSAwOwogICAgICAgICAg
ICAgfQogICAgICAgYnAtPmZ1bmMgKG9icywgYXJnYyAtIDEsIGFyZ3YgKyAxKTsKICAgICB9CkBA
IC04NzMsNiArODgwLDcgQEAgbTRfaW5kaXIgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdj
LCB0b2tlbl9kYXRhICoqYXJndikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgVE9LRU5f
REFUQV9UWVBFIChhcmd2W2ldKSA9IFRPS0VOX1RFWFQ7CiAgICAgICAgICAgICAgIFRPS0VOX0RB
VEFfVEVYVCAoYXJndltpXSkgPSAoY2hhciAqKSAiIjsKKyAgICAgICAgICAgICAgVE9LRU5fREFU
QV9MRU4gKGFyZ3ZbaV0pID0gMDsKICAgICAgICAgICAgIH0KICAgICAgIGNhbGxfbWFjcm8gKHMs
IGFyZ2MgLSAxLCBhcmd2ICsgMSwgb2JzKTsKICAgICB9CkBAIC05MDYsNyArOTE0LDcgQEAgbTRf
ZGVmbiAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2KQog
ICAgICAgICB7CiAgICAgICAgIGNhc2UgVE9LRU5fVEVYVDoKICAgICAgICAgICBvYnN0YWNrX2dy
b3cgKG9icywgbHF1b3RlLnN0cmluZywgbHF1b3RlLmxlbmd0aCk7Ci0gICAgICAgICAgb2JzdGFj
a19ncm93IChvYnMsIFNZTUJPTF9URVhUIChzKSwgc3RybGVuIChTWU1CT0xfVEVYVCAocykpKTsK
KyAgICAgICAgICBvYnN0YWNrX2dyb3cgKG9icywgU1lNQk9MX1RFWFQgKHMpLCBTWU1CT0xfVEVY
VF9MRU4gKHMpKTsKICAgICAgICAgICBvYnN0YWNrX2dyb3cgKG9icywgcnF1b3RlLnN0cmluZywg
cnF1b3RlLmxlbmd0aCk7CiAgICAgICAgICAgYnJlYWs7CgpAQCAtMTA5OSw3ICsxMTA3LDcgQEAg
bTRfZXZhbCAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2
KQogICBpZiAoKkFSRyAoMikgJiYgIW51bWVyaWNfYXJnIChhcmd2WzBdLCBBUkcgKDIpLCAmcmFk
aXgpKQogICAgIHJldHVybjsKCi0gIGlmIChyYWRpeCA8IDEgfHwgcmFkaXggPiAoaW50KSBzdHJs
ZW4gKGRpZ2l0cykpCisgIGlmIChyYWRpeCA8IDEgfHwgcmFkaXggPiAzNikKICAgICB7CiAgICAg
ICBNNEVSUk9SICgod2FybmluZ19zdGF0dXMsIDAsCiAgICAgICAgICAgICAgICAgXygicmFkaXgg
JWQgaW4gYnVpbHRpbiBgJXMnIG91dCBvZiByYW5nZSIpLApAQCAtMTQ2NCw3ICsxNDcyLDcgQEAg
bTRfbWFrZXRlbXAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdjLCB0b2tlbl9kYXRhICoq
YXJndikKICAgICAgICAgICAgbWFrZXRlbXAoWFhYWFhYWFgpIC0+IGBYMDBubm5ubicsIHdoZXJl
IG5ubm5uIGlzIDE2LWJpdCBwaWQKICAgICAgICovCiAgICAgICBjb25zdCBjaGFyICpzdHIgPSBB
UkcgKDEpOwotICAgICAgaW50IGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgICAgIGludCBsZW4gPSBB
UkdMRU4gKDEpOwogICAgICAgaW50IGk7CiAgICAgICBpbnQgbGVuMjsKICAgICAgIGNvbnN0IGNo
YXIgKmU7CkBAIC0xNDg2LDcgKzE0OTQsNyBAQCBtNF9tYWtldGVtcCAoc3RydWN0IG9ic3RhY2sg
Km9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2KQogICAgICAgICB9CiAgICAgfQogICBl
bHNlCi0gICAgbWtzdGVtcF9oZWxwZXIgKG9icywgQVJHICgwKSwgQVJHICgxKSwgc3RybGVuIChB
UkcgKDEpKSk7CisgICAgbWtzdGVtcF9oZWxwZXIgKG9icywgQVJHICgwKSwgQVJHICgxKSwgQVJH
TEVOICgxKSk7CiB9Cgogc3RhdGljIHZvaWQKQEAgLTE0OTQsNyArMTUwMiw3IEBAIG00X21rc3Rl
bXAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdjLCB0b2tlbl9kYXRhICoqYXJndikKIHsK
ICAgaWYgKGJhZF9hcmdjIChhcmd2WzBdLCBhcmdjLCAyLCAyKSkKICAgICByZXR1cm47Ci0gIG1r
c3RlbXBfaGVscGVyIChvYnMsIEFSRyAoMCksIEFSRyAoMSksIHN0cmxlbiAoQVJHICgxKSkpOwor
ICBta3N0ZW1wX2hlbHBlciAob2JzLCBBUkcgKDApLCBBUkcgKDEpLCBBUkdMRU4gKDEpKTsKIH0K
CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCkBAIC0xNTg5LDcg
KzE1OTcsNyBAQCBtNF9tNHdyYXAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBhcmdjLCB0b2tl
bl9kYXRhICoqYXJndikKICAgaWYgKGJhZF9hcmdjIChhcmd2WzBdLCBhcmdjLCAyLCAtMSkpCiAg
ICAgcmV0dXJuOwogICBpZiAobm9fZ251X2V4dGVuc2lvbnMpCi0gICAgb2JzdGFja19ncm93IChv
YnMsIEFSRyAoMSksIHN0cmxlbiAoQVJHICgxKSkpOworICAgIG9ic3RhY2tfZ3JvdyAob2JzLCBB
UkcgKDEpLCBBUkdMRU4gKDEpKTsKICAgZWxzZQogICAgIGR1bXBfYXJncyAob2JzLCBhcmdjLCBh
cmd2LCAnICcsIGZhbHNlKTsKICAgb2JzdGFja18xZ3JvdyAob2JzLCAnXDAnKTsKQEAgLTE3NDMs
NyArMTc1MSw3IEBAIG00X2xlbiAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRva2Vu
X2RhdGEgKiphcmd2KQogewogICBpZiAoYmFkX2FyZ2MgKGFyZ3ZbMF0sIGFyZ2MsIDIsIDIpKQog
ICAgIHJldHVybjsKLSAgc2hpcG91dF9pbnQgKG9icywgc3RybGVuIChBUkcgKDEpKSk7CisgIHNo
aXBvdXRfaW50IChvYnMsIEFSR0xFTiAoMSkpOwogfQoKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTE3OTEs
MTEgKzE3OTksMTEgQEAgbTRfc3Vic3RyIChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBpbnQgYXJnYywg
dG9rZW5fZGF0YSAqKmFyZ3YpCiAgICAgewogICAgICAgLyogYnVpbHRpbihgc3Vic3RyJykgaXMg
YmxhbmssIGJ1dCBzdWJzdHIoYGFiYycpIGlzIGFiYy4gICovCiAgICAgICBpZiAoYXJnYyA9PSAy
KQotICAgICAgICBvYnN0YWNrX2dyb3cgKG9icywgQVJHICgxKSwgc3RybGVuIChBUkcgKDEpKSk7
CisgICAgICAgIG9ic3RhY2tfZ3JvdyAob2JzLCBBUkcgKDEpLCBBUkdMRU4gKDEpKTsKICAgICAg
IHJldHVybjsKICAgICB9CgotICBsZW5ndGggPSBhdmFpbCA9IHN0cmxlbiAoQVJHICgxKSk7Cisg
IGxlbmd0aCA9IGF2YWlsID0gQVJHTEVOICgxKTsKICAgaWYgKCFudW1lcmljX2FyZyAoYXJndlsw
XSwgQVJHICgyKSwgJnN0YXJ0KSkKICAgICByZXR1cm47CgpAQCAtMTg2OCw2ICsxODc2LDcgQEAg
c3RhdGljIHZvaWQKIG00X3RyYW5zbGl0IChzdHJ1Y3Qgb2JzdGFjayAqb2JzLCBpbnQgYXJnYywg
dG9rZW5fZGF0YSAqKmFyZ3YpCiB7CiAgIGNvbnN0IGNoYXIgKmRhdGEgPSBBUkcgKDEpOworICBp
bnQgZGF0YWxlbiA9IEFSR0xFTiAoMSk7CiAgIGNvbnN0IGNoYXIgKmZyb20gPSBBUkcgKDIpOwog
ICBjb25zdCBjaGFyICp0bzsKICAgY2hhciBtYXBbVUNIQVJfTUFYICsgMV07CkBAIC0xODc4LDcg
KzE4ODcsNyBAQCBtNF90cmFuc2xpdCAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRv
a2VuX2RhdGEgKiphcmd2KQogICAgIHsKICAgICAgIC8qIGJ1aWx0aW4oYHRyYW5zbGl0JykgaXMg
YmxhbmssIGJ1dCB0cmFuc2xpdChgYWJjJykgaXMgYWJjLiAgKi8KICAgICAgIGlmICgyIDw9IGFy
Z2MpCi0gICAgICAgIG9ic3RhY2tfZ3JvdyAob2JzLCBkYXRhLCBzdHJsZW4gKGRhdGEpKTsKKyAg
ICAgICAgb2JzdGFja19ncm93IChvYnMsIGRhdGEsIGRhdGFsZW4pOwogICAgICAgcmV0dXJuOwog
ICAgIH0KCkBAIC0xODk1LDcgKzE5MDQsNyBAQCBtNF90cmFuc2xpdCAoc3RydWN0IG9ic3RhY2sg
Km9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2KQogICBpZiAoIWZyb21bMV0gfHwgIWZy
b21bMl0pCiAgICAgewogICAgICAgY29uc3QgY2hhciAqcDsKLSAgICAgIHNpemVfdCBsZW4gPSBz
dHJsZW4gKGRhdGEpOworICAgICAgc2l6ZV90IGxlbiA9IGRhdGFsZW47CiAgICAgICB3aGlsZSAo
KHAgPSAoY2hhciAqKSBtZW1jaHIyIChkYXRhLCBmcm9tWzBdLCBmcm9tWzFdLCBsZW4pKSkKICAg
ICAgICAgewogICAgICAgICAgIG9ic3RhY2tfZ3JvdyAob2JzLCBkYXRhLCBwIC0gZGF0YSk7CkBA
IC0yMDc5LDcgKzIwODgsNyBAQCBtNF9yZWdleHAgKHN0cnVjdCBvYnN0YWNrICpvYnMsIGludCBh
cmdjLCB0b2tlbl9kYXRhICoqYXJndikKICAgcmVnZXhwID0gVE9LRU5fREFUQV9URVhUIChhcmd2
WzJdKTsKCiAgIGluaXRfcGF0dGVybl9idWZmZXIgKCZidWYsICZyZWdzKTsKLSAgbXNnID0gcmVf
Y29tcGlsZV9wYXR0ZXJuIChyZWdleHAsIHN0cmxlbiAocmVnZXhwKSwgJmJ1Zik7CisgIG1zZyA9
IHJlX2NvbXBpbGVfcGF0dGVybiAocmVnZXhwLCBBUkdMRU4gKDIpLCAmYnVmKTsKCiAgIGlmICht
c2cgIT0gTlVMTCkKICAgICB7CkBAIC0yMDg5LDcgKzIwOTgsNyBAQCBtNF9yZWdleHAgKHN0cnVj
dCBvYnN0YWNrICpvYnMsIGludCBhcmdjLCB0b2tlbl9kYXRhICoqYXJndikKICAgICAgIHJldHVy
bjsKICAgICB9CgotICBsZW5ndGggPSBzdHJsZW4gKHZpY3RpbSk7CisgIGxlbmd0aCA9IEFSR0xF
TiAoMSk7CiAgIC8qIEF2b2lkIG92ZXJoZWFkIG9mIGFsbG9jYXRpbmcgcmVncyBpZiB3ZSB3b24n
dCB1c2UgaXQuICAqLwogICBzdGFydHBvcyA9IHJlX3NlYXJjaCAoJmJ1ZiwgdmljdGltLCBsZW5n
dGgsIDAsIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2MgPT0gMyA/IE5VTEwg
OiAmcmVncyk7CkBAIC0yMTMyLDE0ICsyMTQxLDE0IEBAIG00X3BhdHN1YnN0IChzdHJ1Y3Qgb2Jz
dGFjayAqb2JzLCBpbnQgYXJnYywgdG9rZW5fZGF0YSAqKmFyZ3YpCiAgICAgewogICAgICAgLyog
YnVpbHRpbihgcGF0c3Vic3QnKSBpcyBibGFuaywgYnV0IHBhdHN1YnN0KGBhYmMnKSBpcyBhYmMu
ICAqLwogICAgICAgaWYgKGFyZ2MgPT0gMikKLSAgICAgICAgb2JzdGFja19ncm93IChvYnMsIEFS
RyAoMSksIHN0cmxlbiAoQVJHICgxKSkpOworICAgICAgICBvYnN0YWNrX2dyb3cgKG9icywgQVJH
ICgxKSwgQVJHTEVOICgxKSk7CiAgICAgICByZXR1cm47CiAgICAgfQoKICAgcmVnZXhwID0gVE9L
RU5fREFUQV9URVhUIChhcmd2WzJdKTsKCiAgIGluaXRfcGF0dGVybl9idWZmZXIgKCZidWYsICZy
ZWdzKTsKLSAgbXNnID0gcmVfY29tcGlsZV9wYXR0ZXJuIChyZWdleHAsIHN0cmxlbiAocmVnZXhw
KSwgJmJ1Zik7CisgIG1zZyA9IHJlX2NvbXBpbGVfcGF0dGVybiAocmVnZXhwLCBBUkdMRU4gKDIp
LCAmYnVmKTsKCiAgIGlmIChtc2cgIT0gTlVMTCkKICAgICB7CkBAIC0yMTUwLDcgKzIxNTksNyBA
QCBtNF9wYXRzdWJzdCAoc3RydWN0IG9ic3RhY2sgKm9icywgaW50IGFyZ2MsIHRva2VuX2RhdGEg
Kiphcmd2KQogICAgIH0KCiAgIHZpY3RpbSA9IFRPS0VOX0RBVEFfVEVYVCAoYXJndlsxXSk7Ci0g
IGxlbmd0aCA9IHN0cmxlbiAodmljdGltKTsKKyAgbGVuZ3RoID0gQVJHTEVOICgxKTsKCiAgIG9m
ZnNldCA9IDA7CiAgIHdoaWxlIChvZmZzZXQgPD0gbGVuZ3RoKQpAQCAtMjIzMCwxMyArMjIzOSwx
NCBAQCBleHBhbmRfdXNlcl9tYWNybyAoc3RydWN0IG9ic3RhY2sgKm9icywgc3ltYm9sICpzeW0s
CiAgICAgICAgICAgICAgICAgICAgaW50IGFyZ2MsIHRva2VuX2RhdGEgKiphcmd2KQogewogICBj
b25zdCBjaGFyICp0ZXh0ID0gU1lNQk9MX1RFWFQgKHN5bSk7CisgIGNvbnN0IGNoYXIgKmVuZCA9
IHRleHQgKyBTWU1CT0xfVEVYVF9MRU4gKHN5bSk7CiAgIGludCBpOwogICB3aGlsZSAoMSkKICAg
ICB7CiAgICAgICBjb25zdCBjaGFyICpkb2xsYXIgPSBzdHJjaHIgKHRleHQsICckJyk7CiAgICAg
ICBpZiAoIWRvbGxhcikKICAgICAgICAgewotICAgICAgICAgIG9ic3RhY2tfZ3JvdyAob2JzLCB0
ZXh0LCBzdHJsZW4gKHRleHQpKTsKKyAgICAgICAgICBvYnN0YWNrX2dyb3cgKG9icywgdGV4dCwg
ZW5kIC0gdGV4dCk7CiAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICBvYnN0YWNr
X2dyb3cgKG9icywgdGV4dCwgZG9sbGFyIC0gdGV4dCk7CkBAIC0yMjU0LDkgKzIyNjQsNyBAQCBl
eHBhbmRfdXNlcl9tYWNybyAoc3RydWN0IG9ic3RhY2sgKm9icywgc3ltYm9sICpzeW0sCiAgICAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGNfaXNkaWdpdCAoKnRleHQpOyB0ZXh0KyspCiAgICAgICAg
ICAgICAgICAgaSA9IGkqMTAgKyAoKnRleHQgLSAnMCcpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgIGlmIChpIDwgYXJnYykKLSAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAob2JzLCBUT0tFTl9E
QVRBX1RFWFQgKGFyZ3ZbaV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKFRP
S0VOX0RBVEFfVEVYVCAoYXJndltpXSkpKTsKKyAgICAgICAgICBvYnN0YWNrX2dyb3cgKG9icywg
QVJHIChpKSwgQVJHTEVOIChpKSk7CiAgICAgICAgICAgYnJlYWs7CgogICAgICAgICBjYXNlICcj
JzogLyogbnVtYmVyIG9mIGFyZ3VtZW50cyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lucHV0LmMgYi9z
cmMvaW5wdXQuYwppbmRleCBmOGQ1YzBiYS4uMTY5NWFkMTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbnB1
dC5jCisrKyBiL3NyYy9pbnB1dC5jCkBAIC0xMDIwLDYgKzEwMjAsNyBAQCBuZXh0X3Rva2VuICh0
b2tlbl9kYXRhICp0ZCwgaW50ICpsaW5lKQogICBvYnN0YWNrXzFncm93ICgmdG9rZW5fc3RhY2ss
ICdcMCcpOwoKICAgVE9LRU5fREFUQV9UWVBFICh0ZCkgPSBUT0tFTl9URVhUOworICBUT0tFTl9E
QVRBX0xFTiAodGQpID0gb2JzdGFja19vYmplY3Rfc2l6ZSAoJnRva2VuX3N0YWNrKSAtIDE7CiAg
IFRPS0VOX0RBVEFfVEVYVCAodGQpID0gKGNoYXIgKikgb2JzdGFja19maW5pc2ggKCZ0b2tlbl9z
dGFjayk7CiAjaWZkZWYgRU5BQkxFX0NIQU5HRVdPUkQKICAgaWYgKG9yaWdfdGV4dCA9PSBOVUxM
KQpkaWZmIC0tZ2l0IGEvc3JjL200LmggYi9zcmMvbTQuaAppbmRleCA4NThjYjBkZS4uYjg0ZjQy
NjIgMTAwNjQ0Ci0tLSBhL3NyYy9tNC5oCisrKyBiL3NyYy9tNC5oCkBAIC0yNzIsNiArMjcyLDEx
IEBAIGVudW0gdG9rZW5fZGF0YV90eXBlCiBzdHJ1Y3QgdG9rZW5fZGF0YQogewogICBlbnVtIHRv
a2VuX2RhdGFfdHlwZSB0eXBlOworICAvKiBTZXZlcmFsIHBsYWNlcyBpbiB0aGUgY29kZSBvbmx5
IHdvcmsgd2l0aCB0b2tlbnMgbm8gbGFyZ2VyIHRoYW4KKyAgICAgMkcuICBBbHRob3VnaCBsZW4g
b25seSBtYXR0ZXJzIGZvciBhIHRleHQgdG9rZW4sIHB1dHRpbmcgaXQgaGVyZQorICAgICBpbnN0
ZWFkIG9mIGluIHRoZSB1bmlvbiBhbGxvd3Mgc3RydWN0IHRva2VuX2RhdGEgdG8gYmUKKyAgICAg
c21hbGxlci4gICovCisgIGludCBsZW47CiAgIHVuaW9uCiAgICAgewogICAgICAgc3RydWN0CkBA
IC0yODgsNiArMjkzLDcgQEAgc3RydWN0IHRva2VuX2RhdGEKIH07CgogI2RlZmluZSBUT0tFTl9E
QVRBX1RZUEUoVGQpICAgICAgICAgICAgICgoVGQpLT50eXBlKQorI2RlZmluZSBUT0tFTl9EQVRB
X0xFTihUZCkgICAgICAgICAgICAgICgoVGQpLT5sZW4pCiAjZGVmaW5lIFRPS0VOX0RBVEFfVEVY
VChUZCkgICAgICAgICAgICAgKChUZCktPnUudV90LnRleHQpCiAjaWZkZWYgRU5BQkxFX0NIQU5H
RVdPUkQKICMgZGVmaW5lIFRPS0VOX0RBVEFfT1JJR19URVhUKFRkKSAgICAgICAoKFRkKS0+dS51
X3Qub3JpZ2luYWxfdGV4dCkKQEAgLTM4MSw2ICszODcsNyBAQCBzdHJ1Y3Qgc3ltYm9sCiAjZGVm
aW5lIFNZTUJPTF9OQU1FKFMpICAgICAgICAgICgoUyktPm5hbWUpCiAjZGVmaW5lIFNZTUJPTF9U
WVBFKFMpICAgICAgICAgIChUT0tFTl9EQVRBX1RZUEUgKCYoUyktPmRhdGEpKQogI2RlZmluZSBT
WU1CT0xfVEVYVChTKSAgICAgICAgICAoVE9LRU5fREFUQV9URVhUICgmKFMpLT5kYXRhKSkKKyNk
ZWZpbmUgU1lNQk9MX1RFWFRfTEVOKFMpICAgICAgKFRPS0VOX0RBVEFfTEVOICgmKFMpLT5kYXRh
KSkKICNkZWZpbmUgU1lNQk9MX0ZVTkMoUykgICAgICAgICAgKFRPS0VOX0RBVEFfRlVOQyAoJihT
KS0+ZGF0YSkpCgogdHlwZWRlZiBlbnVtIHN5bWJvbF9sb29rdXAgc3ltYm9sX2xvb2t1cDsKZGlm
ZiAtLWdpdCBhL3NyYy9tYWNyby5jIGIvc3JjL21hY3JvLmMKaW5kZXggMGUwMmI0M2MuLjc2ZTQ2
OWUyIDEwMDY0NAotLS0gYS9zcmMvbWFjcm8uYworKysgYi9zcmMvbWFjcm8uYwpAQCAtMTQ1LDYg
KzE0NSw3IEBAIGV4cGFuZF9hcmd1bWVudCAoc3RydWN0IG9ic3RhY2sgKm9icywgdG9rZW5fZGF0
YSAqYXJncCkKICAgaW50IHBhcmVuX2xldmVsOwogICBjb25zdCBjaGFyICpmaWxlID0gY3VycmVu
dF9maWxlOwogICBpbnQgbGluZSA9IGN1cnJlbnRfbGluZTsKKyAgc2l6ZV90IGxlbjsKCiAgIFRP
S0VOX0RBVEFfVFlQRSAoYXJncCkgPSBUT0tFTl9WT0lEOwoKQEAgLTE2OCwxMiArMTY5LDE0IEBA
IGV4cGFuZF9hcmd1bWVudCAoc3RydWN0IG9ic3RhY2sgKm9icywgdG9rZW5fZGF0YSAqYXJncCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgLyogVGhlIGFyZ3VtZW50IE1VU1QgYmUgZmlu
aXNoZWQsIHdoZXRoZXIgd2Ugd2FudCBpdCBvciBub3QuICAqLwogICAgICAgICAgICAgICBvYnN0
YWNrXzFncm93IChvYnMsICdcMCcpOworICAgICAgICAgICAgICBsZW4gPSBvYnN0YWNrX29iamVj
dF9zaXplIChvYnMpIC0gMTsKICAgICAgICAgICAgICAgdGV4dCA9IChjaGFyICopIG9ic3RhY2tf
ZmluaXNoIChvYnMpOwoKICAgICAgICAgICAgICAgaWYgKFRPS0VOX0RBVEFfVFlQRSAoYXJncCkg
PT0gVE9LRU5fVk9JRCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBUT0tF
Tl9EQVRBX1RZUEUgKGFyZ3ApID0gVE9LRU5fVEVYVDsKICAgICAgICAgICAgICAgICAgIFRPS0VO
X0RBVEFfVEVYVCAoYXJncCkgPSB0ZXh0OworICAgICAgICAgICAgICAgICAgVE9LRU5fREFUQV9M
RU4gKGFyZ3ApID0gbGVuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgcmV0dXJu
IHQgPT0gVE9LRU5fQ09NTUE7CiAgICAgICAgICAgICB9CkBAIC0yMzUsNiArMjM4LDcgQEAgY29s
bGVjdF9hcmd1bWVudHMgKHN5bWJvbCAqc3ltLCBzdHJ1Y3Qgb2JzdGFjayAqYXJncHRyLAoKICAg
VE9LRU5fREFUQV9UWVBFICgmdGQpID0gVE9LRU5fVEVYVDsKICAgVE9LRU5fREFUQV9URVhUICgm
dGQpID0gU1lNQk9MX05BTUUgKHN5bSk7CisgIFRPS0VOX0RBVEFfTEVOICgmdGQpID0gc3RybGVu
IChTWU1CT0xfTkFNRSAoc3ltKSk7CiAgIHRkcCA9ICh0b2tlbl9kYXRhICopIG9ic3RhY2tfY29w
eSAoYXJndW1lbnRzLCAmdGQsIHNpemVvZiB0ZCk7CiAgIG9ic3RhY2tfcHRyX2dyb3cgKGFyZ3B0
ciwgdGRwKTsKCkBAIC0yNDksNiArMjUzLDcgQEAgY29sbGVjdF9hcmd1bWVudHMgKHN5bWJvbCAq
c3ltLCBzdHJ1Y3Qgb2JzdGFjayAqYXJncHRyLAogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICBUT0tFTl9EQVRBX1RZUEUgKCZ0ZCkgPSBUT0tFTl9URVhUOwogICAgICAgICAgICAgICBUT0tF
Tl9EQVRBX1RFWFQgKCZ0ZCkgPSAoY2hhciAqKSAiIjsKKyAgICAgICAgICAgICAgVE9LRU5fREFU
QV9MRU4gKCZ0ZCkgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgIHRkcCA9ICh0b2tlbl9k
YXRhICopIG9ic3RhY2tfY29weSAoYXJndW1lbnRzLCAmdGQsIHNpemVvZiB0ZCk7CiAgICAgICAg
ICAgb2JzdGFja19wdHJfZ3JvdyAoYXJncHRyLCB0ZHApOwotLSAKMi40OC4xCgoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTTQtcGF0Y2hlcyBtYWlsaW5n
IGxpc3QKTTQtcGF0Y2hlc0BnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL200LXBhdGNoZXMK