Re: Piping/Printing message looks odd TODO

Glenn Spell <[email protected]> Fri, 1 Apr 2016 16:14:23 -0400
Newsgroups gmane.network.tin.user
Organization the aerie
Message-ID <[email protected]>
T24gMjYgTWFyIDIwMTYgYXJvdW5kICA2OjA1QU0gKC0wNDAwKSBVcnMgVXJzIEphbsOfZW4gd3Jv
dGU6Cj4gT24gRnJpLCBNYXIgMjUsIDIwMTYgYXQgMDE6NTU6MDNQTSAtMDQwMCwgR2xlbm4gU3Bl
bGwgd3JvdGU6Cj4gPiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhpcyBhbmQgdGVsbCBtZSB3aGF0
IHknYWxsIHRoaW5rOgo+IAo+IE90aGVyd2lzZSBpdCBsb29rcyBvayB0byBtZSAoYnV0IEkgZGlk
bid0IHRlc3QgaXQgYW55d2hlcmUgZXhjZXB0Cj4gaTY4Ni1wYy1saW51eC1nbnUgJiBuY3Vyc2Vz
dyAoNi4wLjIwMTYwMzE5KSkuCgpUaGFua3MgZm9yIGFwcGx5aW5nIHRoZSBwYXRjaCBmb3IgdGhl
IDIuMy4zIHJlbGVhc2UuCgpJdCB3YXMgc3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLiAgSSd2ZSBm
aW5pc2hlZCBpdCBub3csIGFuZCBJJ20Kc2F0aXNmaWVkIHdpdGggaXQuICBJJ3ZlIHRlc3RlZCBp
dCBvbiBOZXRCU0Qgd2l0aCBuY3Vyc2VzdyBhbmQKd2l0aCB0ZXJtY2FwLiAgQnV0IEknZCBzdGls
bCBhcHByZWNpYXRlIHlvdXIgY29tbWVudHMuCgpJIGNvbXBsZXRlZCBzZXR0aW5nIHRoZSBjbWRf
bGluZSB2YXIgdG8gRkFMU0UgZm9yIGFsbCBzdGRvdXQKbWVzc2FnZXMuICBJIHJldmVydGVkIHNv
bWUgY29kZSBmcm9tIHRoZSBwcmV2aW91cyBwYXRjaCB0aGF0CndvdWxkbid0IHdvcmsgd2VsbCBp
biBzb21lIGVkZ2UgY2FzZXMuICBJJ3ZlIHJlLWVuYWJsZWQgdGhlCnByb2dyZXNzIG1ldGVyIGZv
ciBmZWVkaW5nIGFydGljbGVzLCBjYWxsaW5nIHNob3dfcHJvZ3Jlc3MoKQpkaXJlY3RseSBhbmQg
cmV3b3JraW5nIHRoZSBwcm9ncmVzc19tZXNnIHZhciBpbiBmZWVkLmMuICBJCmFkZGVkIGNvbW1h
bmQgdG8gdGhlIG5ldyBwaXBlZCB0byBtZXNzYWdlLiAgSSd2ZSBwcmV2ZW50ZWQgdGhlCnByb2dy
ZXNzIG1ldGVyIGZyb20gcnVubmluZyBiYWNrd2FyZHMuICBJIGZpbmlzaGVkIHJld29ya2luZwp0
aGUgc2NyZWVuIHJlZHJhd3MgaW4gZmVlZC5jLgoKSWYgdGhpcyBpcyBzYXRpc2ZhY3RvcnkgcGxl
YXNlIGFwcGx5IHRoaXMgcGF0Y2ggdG8gMi4zLjMuCgpQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhp
czoKCgpJbmRleDogc3JjL2ZlZWQuYwotLS0gdGluLTIuMy4zLm9yaWcvc3JjL2ZlZWQuYwkyMDE2
LTAzLTI2IDA5OjQ0OjA4LjAwMDAwMDAwMCArMDAwMAorKysgdGluLTIuMy4zL3NyYy9mZWVkLmMJ
MjAxNi0wNC0wMSAxNzozNzoxOS4wMDAwMDAwMDAgKzAwMDAKQEAgLTQwMCw3ICs0MDAsNyBAQCBw
cmludF9zYXZlX3N1bW1hcnkoCiAJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIF8odHh0X3Nh
dmVkX3RvX3JhbmdlKSwKIAkJCXdoYXQsIGZpcnN0LCBsYXN0KTsKIAotCXdhaXRfbWVzc2FnZSgo
dGlucmMuYmVnaW5uZXJfbGV2ZWwpID8gMiA6IDEsIGJ1Zik7CisJd2FpdF9tZXNzYWdlKCh0aW5y
Yy5iZWdpbm5lcl9sZXZlbCkgPyA0IDogMiwgYnVmKTsKIAogCXJldHVybjsKIH0KQEAgLTQ1NCwx
NyArNDU0LDE5IEBAIGZlZWRfYXJ0aWNsZSgKIAkJCXByb2dyZXNzX21lc2cgPSBmbXRfc3RyaW5n
KCIlcyAoJWQvJWQpIiwgXyh0eHRfc2F2aW5nKSwgY291bnRlci0+dG90YWwsIGNvdW50ZXItPm1h
eCk7CiAJCQlicmVhazsKIAl9CisJaWYgKHByb2dyZXNzX21lc2cgIT0gTlVMTCkgeworCQlzaG93
X3Byb2dyZXNzKHByb2dyZXNzX21lc2csIGNvdW50ZXItPnRvdGFsLCBjb3VudGVyLT5tYXgpOwor
CQlmcmVlKHByb2dyZXNzX21lc2cpOworCQlwcm9ncmVzc19tZXNnID0gTlVMTDsKKwl9CiAKIAlp
ZiAodXNlX2N1cnJlbnQpCiAJCW9wZW5hcnRwdHIgPSAmcGdhcnQ7CQkJLyogVXNlIGFydCBhbHJl
YWR5IG9wZW4gaW4gcGFnZXIgKi8KIAllbHNlIHsKLQkJaWYgKGFydF9vcGVuKEZBTFNFLCAmYXJ0
c1thcnRdLCBncm91cCwgb3BlbmFydHB0ciwgVFJVRSwgcHJvZ3Jlc3NfbWVzZykgPCAwKSB7CisJ
CWlmIChhcnRfb3BlbihGQUxTRSwgJmFydHNbYXJ0XSwgZ3JvdXAsIG9wZW5hcnRwdHIsIEZBTFNF
LCBOVUxMKSA8IDApCiAJCQkvKiBVc2VyIGFib3J0IG9yIGFuIGVycm9yICovCi0JCQlGcmVlSWZO
ZWVkZWQocHJvZ3Jlc3NfbWVzZyk7CiAJCQlyZXR1cm4gRkFMU0U7Ci0JCX0KIAl9Ci0JRnJlZUlm
TmVlZGVkKHByb2dyZXNzX21lc2cpOwogCiAJc3dpdGNoIChmdW5jdGlvbikgewogCQljYXNlIEZF
RURfTUFJTDoKQEAgLTY2Niw3ICs2NjgsNiBAQCBmZWVkX2FydGljbGVzKAogCQkvKiBTZXR1cCBw
cmludGluZyAtIGdldCBwcmludCBjb21tYW5kIGxpbmUgKi8KIAkJY2FzZSBGRUVEX1BSSU5UOgog
CQkJc25wcmludGYob3V0cGF0aCwgc2l6ZW9mKG91dHBhdGgpLCAiJXMgJXMiLCB0aW5yYy5wcmlu
dGVyLCBSRURJUkVDVF9PVVRQVVQpOwotCQkJcmVkcmF3X3NjcmVlbiA9IFRSVUU7CiAJCQlicmVh
azsKICNlbmRpZiAvKiAhRElTQUJMRV9QUklOVElORyAqLwogCkBAIC04NDQsNiArODQ1LDcgQEAg
ZmVlZF9hcnRpY2xlcygKIAkJCQl9CiAJCQl9CiAJCQl1bnRhZ19hbGxfYXJ0aWNsZXMoKTsJLyog
VE9ETzogdGhpcyB3aWxsIHVudGFnIGV2ZW4gb24gcGFydGlhbCBmYWlsdXJlICovCisJCQlyZWRy
YXdfc2NyZWVuID0gVFJVRTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRkVFRF9IT1Q6CQkvKiBob3Qg
KGF1dG8tc2VsZWN0ZWQpIGFydGljbGVzICovCkBAIC05MjcsNyArOTI5LDcgQEAgZ290X2VwaXBl
X3doaWxlX3BpcGluZzoKIAkJCVJhdyhUUlVFKTsKIAkJCUluaXRXaW4oKTsKICMJZW5kaWYgLyog
VVNFX0NVUlNFUyAqLwotCQkJY3Vycm1lbnUtPnJlZHJhdygpOworCQkJcHJvbXB0X2NvbnRpbnVl
KCk7CiAjCWlmbmRlZiBVU0VfQ1VSU0VTCiAJCQlSYXcoVFJVRSk7CiAJCQlJbml0V2luKCk7CkBA
IC05NDIsNyArOTQ0LDEwIEBAIGdvdF9lcGlwZV93aGlsZV9waXBpbmc6CiAJCQkJYnJlYWs7CiAJ
CQl9CiAKLQkJCWN1cnJtZW51LT5yZWRyYXcoKTsKKwkJCWlmIChyZWRyYXdfc2NyZWVuKSB7CisJ
CQkJY3Vycm1lbnUtPnJlZHJhdygpOworCQkJCXJlZHJhd19zY3JlZW4gPSBGQUxTRTsKKwkJCX0K
IAkJCXByaW50X3NhdmVfc3VtbWFyeShmZWVkX3R5cGUsIGNvdW50ZXIudG90YWwpOwogCQkJaWYg
KHBwcm9jX2Z1bmMgIT0gUE9TVFBST0NFU1NfTk8pIHsKIAkJCQl0X2Jvb2wgZGVsZXRlX3Bvc3Rf
cHJvYyA9IEZBTFNFOwpAQCAtOTg3LDggKzk5MiwxMCBAQCBnb3RfZXBpcGVfd2hpbGVfcGlwaW5n
OgogCQkJCWNsZWFyX21lc3NhZ2UoKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChyZWRyYXdfc2Ny
ZWVuKQorCQlpZiAocmVkcmF3X3NjcmVlbikgewogCQkJY3Vycm1lbnUtPnJlZHJhdygpOworCQkJ
cmVkcmF3X3NjcmVlbiA9IEZBTFNFOworCQl9CiAJfQogCiAJLyoKQEAgLTEwMjUsNyArMTAzMiw3
IEBAIGdvdF9lcGlwZV93aGlsZV9waXBpbmc6CiAKICNpZm5kZWYgRE9OVF9IQVZFX1BJUElORwog
CQljYXNlIEZFRURfUElQRTogCi0JCQlpbmZvX21lc3NhZ2UoXyh0eHRfYXJ0aWNsZXNfcGlwZWQp
LCBjb3VudGVyLnN1Y2Nlc3MsIFBMVVJBTChjb3VudGVyLnN1Y2Nlc3MsIHR4dF9hcnRpY2xlKSk7
CisJCQlpbmZvX21lc3NhZ2UoXyh0eHRfYXJ0aWNsZXNfcGlwZWQpLCBjb3VudGVyLnN1Y2Nlc3Ms
IFBMVVJBTChjb3VudGVyLnN1Y2Nlc3MsIHR4dF9hcnRpY2xlKSwgdGlucmMuZGVmYXVsdF9waXBl
X2NvbW1hbmQpOwogCQkJYnJlYWs7CiAjZW5kaWYgLyogIURPTlRfSEFWRV9QSVBJTkcgKi8KIApJ
bmRleDogc3JjL2xhbmcuYwotLS0gdGluLTIuMy4zLm9yaWcvc3JjL2xhbmcuYwkyMDE2LTAzLTI2
IDA5OjQ0OjA4LjAwMDAwMDAwMCArMDAwMAorKysgdGluLTIuMy4zL3NyYy9sYW5nLmMJMjAxNi0w
NC0wMSAxNzozNzoyMC4wMDAwMDAwMDAgKzAwMDAKQEAgLTExNDUsNyArMTE0NSw3IEBAIFRpbiB3
aWxsIHRyeSB0byB1c2UgWEhEUiBYUkVGIGluc3RlYWQgKHMKICNlbmRpZiAvKiAhRElTQUJMRV9Q
UklOVElORyAqLwogCiAjaWZuZGVmIERPTlRfSEFWRV9QSVBJTkcKLQljb25zdGV4dCB0eHRfYXJ0
aWNsZXNfcGlwZWRbXSA9IE5fKCIlZCAlcyBwaXBlZCIpOworCWNvbnN0ZXh0IHR4dF9hcnRpY2xl
c19waXBlZFtdID0gTl8oIiVkICVzIHBpcGVkIHRvIFwiJXNcIiIpOwogCWNvbnN0ZXh0IHR4dF9o
ZWxwX2dsb2JhbF9waXBlW10gPSBOXygicGlwZSBhcnRpY2xlL3RocmVhZC9ob3QvcGF0dGVybi90
YWdnZWQgYXJ0aWNsZXMgaW50byBjb21tYW5kIik7CiAJY29uc3RleHQgdHh0X25vX2NvbW1hbmRb
XSA9IE5fKCJObyBjb21tYW5kIik7CiAJY29uc3RleHQgdHh0X3BpcGVbXSA9IE5fKCJQaXBlIik7
CkluZGV4OiBzcmMvc2NyZWVuLmMKLS0tIHRpbi0yLjMuMy5vcmlnL3NyYy9zY3JlZW4uYwkyMDE2
LTAzLTI2IDA5OjU2OjMzLjAwMDAwMDAwMCArMDAwMAorKysgdGluLTIuMy4zL3NyYy9zY3JlZW4u
YwkyMDE2LTA0LTAxIDE3OjM3OjIwLjAwMDAwMDAwMCArMDAwMApAQCAtOTcsOCArOTcsMTEgQEAg
aW5mb19tZXNzYWdlKAogCS4uLikKIHsKIAljaGFyICpidWY7CisJdF9ib29sIHNhdmVfY21kX2xp
bmUgPSBjbWRfbGluZTsKIAl2YV9saXN0IGFwOwogCisJY21kX2xpbmUgPSBGQUxTRTsKKwogCXZh
X3N0YXJ0KGFwLCBmbXQpOwogCiAJY2xlYXJfbWVzc2FnZSgpOwpAQCAtMTE2LDYgKzExOSw4IEBA
IGluZm9fbWVzc2FnZSgKIAlzdG93X2N1cnNvcigpOwogCiAJdmFfZW5kKGFwKTsKKworCWNtZF9s
aW5lID0gc2F2ZV9jbWRfbGluZTsKIH0KIAogCkBAIC0xMjksOCArMTM0LDExIEBAIHdhaXRfbWVz
c2FnZSgKIAkuLi4pCiB7CiAJY2hhciAqYnVmOworCXRfYm9vbCBzYXZlX2NtZF9saW5lID0gY21k
X2xpbmU7CiAJdmFfbGlzdCBhcDsKIAorCWNtZF9saW5lID0gRkFMU0U7CisKIAl2YV9zdGFydChh
cCwgZm10KTsKIAogCWNsZWFyX21lc3NhZ2UoKTsKQEAgLTE1MSw2ICsxNTksOCBAQCB3YWl0X21l
c3NhZ2UoCiAJKHZvaWQpIHNsZWVwKHNkZWxheSk7CiAvKgljbGVhcl9tZXNzYWdlKCk7IHdvdWxk
IGJlIG5pY2UsIGJ1dCB0aW4gZG9lc24ndCBleHBlY3QgdGhpcyB5ZXQgKi8KIAl2YV9lbmQoYXAp
OworCisJY21kX2xpbmUgPSBzYXZlX2NtZF9saW5lOwogfQogCiAKQEAgLTQ2NSwxMSArNDc1LDEx
IEBAIHNob3dfcHJvZ3Jlc3MoCiAJc3RhdGljIGludCBsYXN0X3JhdGlvOwogCXN0YXRpYyB0X2Fy
dG51bSBsYXN0X3RvdGFsOwogCXN0YXRpYyB0aW1lX3QgbGFzdF91cGRhdGU7Ci0JdF9ib29sIGZl
ZWRpbmcgPSBGQUxTRTsKIAl0X2Jvb2wgc2F2ZV9jbWRfbGluZSA9IGNtZF9saW5lOwogI2lmIGRl
ZmluZWQoSEFWRV9DTE9DS19HRVRUSU1FKSB8fCBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKQog
CXN0YXRpYyB0X2FydG51bSBsYXN0X2NvdW50OwogCXN0YXRpYyBpbnQgYXZlcmFnZTsKKwlzdGF0
aWMgaW50IGxhc3RfYXZlcmFnZTsKIAlzdGF0aWMgaW50IHNhbXBsZXM7CiAJc3RhdGljIGludCBz
dW07CiAJY2hhciAqZGlzcGxheV9mb3JtYXQ7CkBAIC00ODUsMTA0ICs0OTUsODggQEAgc2hvd19w
cm9ncmVzcygKIAogCWNtZF9saW5lID0gRkFMU0U7CiAKLQkvKgotCSAqIHJhdGlvIGFuZCB0aW1l
IHJlbWFpbmluZyBhcmUgdW5zdGFibGUgd2hlbiBmZWVkaW5nOwotCSAqIGlmIGZlZWRpbmcgYXJ0
aWNsZXMsIGRvbid0IHByaW50IHJhdGlvIG9yIHRpbWUgcmVtYWluaW5nCi0JICovCi0JaWYgKAot
I2lmbmRlZiBET05UX0hBVkVfUElQSU5HCi0JKCFzdHJuY21wKHR4dCwgXyh0eHRfcGlwaW5nKSwg
c3RybGVuKF8odHh0X3BpcGluZykpKSkgfHwKLSNlbmRpZiAvKiBET05UX0hBVkVfUElQSU5HICov
Ci0jaWZuZGVmIERJU0FCTEVfUFJJTlRJTkcKLQkoIXN0cm5jbXAodHh0LCBfKHR4dF9wcmludGlu
ZyksIHN0cmxlbihfKHR4dF9wcmludGluZykpKSkgfHwgCi0jZW5kaWYgLyogRElTQUJMRV9QUklO
VElORyAqLwotCSghc3RybmNtcCh0eHQsIF8odHh0X3NhdmluZyksIHN0cmxlbihfKHR4dF9zYXZp
bmcpKSkpKQotCQlmZWVkaW5nID0gVFJVRTsKLQotCWlmICghZmVlZGluZykgewotCQkvKiBJZiB0
aGlzIGlzIGEgbmV3IHByb2dyZXNzIG1ldGVyLCBzdGFydCByZWNhbGN1bGF0aW5nICovCi0JCWlm
ICgobGFzdF90eHQgIT0gdHh0KSB8fCAobGFzdF90b3RhbCAhPSB0b3RhbCkpIHsKLQkJCWxhc3Rf
cmF0aW8gPSAtMTsKLQkJCWxhc3RfZGlzcGxheVswXSA9ICdcMCc7Ci0JCQlsYXN0X3VwZGF0ZSA9
IHRpbWUoTlVMTCkgLSAyOwotCQl9CisJLyogSWYgdGhpcyBpcyBhIG5ldyBwcm9ncmVzcyBtZXRl
ciwgc3RhcnQgcmVjYWxjdWxhdGluZyAqLworCWlmICgobGFzdF90eHQgIT0gdHh0KSB8fCAobGFz
dF90b3RhbCAhPSB0b3RhbCkpIHsKKwkJbGFzdF9yYXRpbyA9IC0xOworCQlsYXN0X2Rpc3BsYXlb
MF0gPSAnXDAnOworCQlsYXN0X3VwZGF0ZSA9IHRpbWUoTlVMTCkgLSAyOworCX0KIAotCQljdXJy
X3RpbWUgPSB0aW1lKE5VTEwpOwotCQlyYXRpbyA9IChpbnQpICgoY291bnQgKiAxMDApIC8gdG90
YWwpOwotCQlpZiAoKHJhdGlvID09IGxhc3RfcmF0aW8pICYmIChjdXJyX3RpbWUgLSBsYXN0X3Vw
ZGF0ZSA8IDIpKQotCQkJLyoKLQkJCSAqIHJldHVybiBpZiByYXRpbyBkaWQgbm90IGNoYW5nZSBh
bmQgbGVzcyB0aGFuIDEtMiBzZWNvbmRzIHNpbmNlIGxhc3QKLQkJCSAqIHVwZGF0ZSB0byByZWR1
Y2Ugb3V0cHV0Ci0JCQkgKi8KLQkJCXJldHVybjsKKwljdXJyX3RpbWUgPSB0aW1lKE5VTEwpOwor
CXJhdGlvID0gKGludCkgKChjb3VudCAqIDEwMCkgLyB0b3RhbCk7CisJaWYgKChyYXRpbyA9PSBs
YXN0X3JhdGlvKSAmJiAoY3Vycl90aW1lIC0gbGFzdF91cGRhdGUgPCAyKSkKKwkJLyoKKwkJICog
cmV0dXJuIGlmIHJhdGlvIGRpZCBub3QgY2hhbmdlIGFuZCBsZXNzIHRoYW4gMS0yIHNlY29uZHMg
c2luY2UgbGFzdAorCQkgKiB1cGRhdGUgdG8gcmVkdWNlIG91dHB1dAorCQkgKi8KKwkJcmV0dXJu
OwogCi0JCWxhc3RfdXBkYXRlID0gY3Vycl90aW1lOworCWxhc3RfdXBkYXRlID0gY3Vycl90aW1l
OwogCiAjaWYgZGVmaW5lZChIQVZFX0NMT0NLX0dFVFRJTUUpIHx8IGRlZmluZWQoSEFWRV9HRVRU
SU1FT0ZEQVkpCi0JCWRpc3BsYXlfZm9ybWF0ID0gbXlfbWFsbG9jKHN0cmxlbihESVNQTEFZX0ZN
VCkgKyBzdHJsZW4oXyh0eHRfcmVtYWluaW5nKSkgKyAxKTsKLQkJc3RyY3B5KGRpc3BsYXlfZm9y
bWF0LCBESVNQTEFZX0ZNVCk7CisJZGlzcGxheV9mb3JtYXQgPSBteV9tYWxsb2Moc3RybGVuKERJ
U1BMQVlfRk1UKSArIHN0cmxlbihfKHR4dF9yZW1haW5pbmcpKSArIDEpOworCXN0cmNweShkaXNw
bGF5X2Zvcm1hdCwgRElTUExBWV9GTVQpOwogCi0JCWlmIChsYXN0X3JhdGlvID09IC0xKSB7Ci0J
CQkvKiBEb24ndCBwcmludCBhICJ0aW1lIHJlbWFpbmluZyIgdGhpcyB0aW1lICovCi0JCQlzbnBy
aW50ZihkaXNwbGF5LCBzaXplb2YoZGlzcGxheSksIGRpc3BsYXlfZm9ybWF0LCB0eHQsIHJhdGlv
KTsKKwlpZiAobGFzdF9yYXRpbyA9PSAtMSkgeworCQkvKiBEb24ndCBwcmludCBhICJ0aW1lIHJl
bWFpbmluZyIgdGhpcyB0aW1lICovCisJCXNucHJpbnRmKGRpc3BsYXksIHNpemVvZihkaXNwbGF5
KSwgZGlzcGxheV9mb3JtYXQsIHR4dCwgcmF0aW8pOwogCi0JCQkvKiBSZXNldCB0aGUgdmFyaWFi
bGVzICovCi0JCQlzdW0gPSBhdmVyYWdlID0gc2FtcGxlcyA9IDA7CisJCS8qIFJlc2V0IHRoZSB2
YXJpYWJsZXMgKi8KKwkJc3VtID0gYXZlcmFnZSA9IHNhbXBsZXMgPSAwOworCX0gZWxzZSB7CisJ
CS8qIEdldCB0aGUgY3VycmVudCB0aW1lICovCisJCXRpbl9nZXR0aW1lKCZ0aGlzX3RpbWUpOwor
CQl0aW1lX2RpZmYgPSAodGhpc190aW1lLnR2X3NlYyAtIGxhc3RfdGltZS50dl9zZWMpICogMTAw
MDAwMDsKKwkJdGltZV9kaWZmICs9ICgodGhpc190aW1lLnR2X25zZWMgLSBsYXN0X3RpbWUudHZf
bnNlYykgLyAxMDAwKTsKKwkJY291bnRfZGlmZiA9IChjb3VudCAtIGxhc3RfY291bnQpOworCisJ
CWlmICghY291bnRfZGlmZikgLyogYXZvaWQgZGl2IGJ5IHplcm8gKi8KKwkJCWNvdW50X2RpZmYr
KzsKKworCQkvKgorCQkgKiBDYWxjdWxhdGUgYSBydW5uaW5nIGF2ZXJhZ2UgYmFzZWQgb24gdGhl
IGxhc3QgMjAgc2FtcGxlcy4gRm9yIHRoZQorCQkgKiBmaXJzdCAxOSBzYW1wbGVzIGp1c3QgYWRk
IGFsbCBhbmQgZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2Ygc2FtcGxlcy4KKwkJICogRnJvbSB0aGUg
MjB0aCBzYW1wbGUgb24gdXNlIG9ubHkgdGhlIGxhc3QgMjAgc2FtcGxlcyB0byBjYWxjdWxhdGUK
KwkJICogdGhlIHJ1bm5pbmcgYXZlcmF2ZS4gVG8gbWFrZSB0aGluZ3MgZWFzaWVyIHdlIGRvbid0
IHdhbnQgdG8gc3RvcmUKKwkJICogYW5kIGtlZXAgdHJhY2sgb2YgYWxsIG9mIHRoZW0sIHNvIHdl
IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBzYW1wbGUKKwkJICogd2FzIGNsb3NlIHRvIHRoZSBjdXJy
ZW50IGF2ZXJhZ2UgYW5kIHN1YnRyYWN0IGl0IGZyb20gc3VtLiBUaGVuLAorCQkgKiB0aGUgbmV3
IHNhbXBsZSBpcyBhZGRlZCB0byB0aGUgc3VtIGFuZCB0aGUgc3VtIGlzIGRpdmlkZWQgYnkgMjAg
dG8KKwkJICogZ2V0IHRoZSBuZXcgYXZlcmFnZS4KKwkJICovCisJCWlmIChzYW1wbGVzID09IDIw
KSB7CisJCQlzdW0gLT0gYXZlcmFnZTsKKwkJCXN1bSArPSAodGltZV9kaWZmIC8gY291bnRfZGlm
Zik7CisJCQlhdmVyYWdlID0gc3VtIC8gMjA7CiAJCX0gZWxzZSB7Ci0JCQkvKiBHZXQgdGhlIGN1
cnJlbnQgdGltZSAqLwotCQkJdGluX2dldHRpbWUoJnRoaXNfdGltZSk7Ci0JCQl0aW1lX2RpZmYg
PSAodGhpc190aW1lLnR2X3NlYyAtIGxhc3RfdGltZS50dl9zZWMpICogMTAwMDAwMDsKLQkJCXRp
bWVfZGlmZiArPSAoKHRoaXNfdGltZS50dl9uc2VjIC0gbGFzdF90aW1lLnR2X25zZWMpIC8gMTAw
MCk7Ci0JCQljb3VudF9kaWZmID0gKGNvdW50IC0gbGFzdF9jb3VudCk7Ci0KLQkJCWlmICghY291
bnRfZGlmZikgLyogYXZvaWQgZGl2IGJ5IHplcm8gKi8KLQkJCQljb3VudF9kaWZmKys7Ci0KLQkJ
CS8qCi0JCQkgKiBDYWxjdWxhdGUgYSBydW5uaW5nIGF2ZXJhZ2UgYmFzZWQgb24gdGhlIGxhc3Qg
MjAgc2FtcGxlcy4gRm9yIHRoZQotCQkJICogZmlyc3QgMTkgc2FtcGxlcyBqdXN0IGFkZCBhbGwg
YW5kIGRpdmlkZSBieSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMuCi0JCQkgKiBGcm9tIHRoZSAyMHRo
IHNhbXBsZSBvbiB1c2Ugb25seSB0aGUgbGFzdCAyMCBzYW1wbGVzIHRvIGNhbGN1bGF0ZQotCQkJ
ICogdGhlIHJ1bm5pbmcgYXZlcmF2ZS4gVG8gbWFrZSB0aGluZ3MgZWFzaWVyIHdlIGRvbid0IHdh
bnQgdG8gc3RvcmUKLQkJCSAqIGFuZCBrZWVwIHRyYWNrIG9mIGFsbCBvZiB0aGVtLCBzbyB3ZSBh
c3N1bWUgdGhhdCB0aGUgZmlyc3Qgc2FtcGxlCi0JCQkgKiB3YXMgY2xvc2UgdG8gdGhlIGN1cnJl
bnQgYXZlcmFnZSBhbmQgc3VidHJhY3QgaXQgZnJvbSBzdW0uIFRoZW4sCi0JCQkgKiB0aGUgbmV3
IHNhbXBsZSBpcyBhZGRlZCB0byB0aGUgc3VtIGFuZCB0aGUgc3VtIGlzIGRpdmlkZWQgYnkgMjAg
dG8KLQkJCSAqIGdldCB0aGUgbmV3IGF2ZXJhZ2UuCi0JCQkgKi8KLQkJCWlmIChzYW1wbGVzID09
IDIwKSB7Ci0JCQkJc3VtIC09IGF2ZXJhZ2U7Ci0JCQkJc3VtICs9ICh0aW1lX2RpZmYgLyBjb3Vu
dF9kaWZmKTsKLQkJCQlhdmVyYWdlID0gc3VtIC8gMjA7Ci0JCQl9IGVsc2UgewotCQkJCXN1bSAr
PSAodGltZV9kaWZmIC8gY291bnRfZGlmZik7Ci0JCQkJYXZlcmFnZSA9IHN1bSAvICsrc2FtcGxl
czsKLQkJCX0KKwkJCXN1bSArPSAodGltZV9kaWZmIC8gY291bnRfZGlmZik7CisJCQlhdmVyYWdl
ID0gc3VtIC8gKytzYW1wbGVzOworCQl9CiAKLQkJCWlmIChhdmVyYWdlID49IDEwMDAwMDApCi0J
CQkJc2Vjc19sZWZ0ID0gKHRvdGFsIC0gY291bnQpICogKGF2ZXJhZ2UgLyAxMDAwMDAwKTsKLQkJ
CWVsc2UKLQkJCQlzZWNzX2xlZnQgPSAoKHRvdGFsIC0gY291bnQpICogYXZlcmFnZSkgLyAxMDAw
MDAwOworCQkvKiBEb24ndCBhbGxvdyBwcm9ncmVzcyBtZXRlciB0byBydW4gYmFja3dhcmRzICov
CisJCWlmIChhdmVyYWdlIDwgbGFzdF9hdmVyYWdlKQorCQkJYXZlcmFnZSA9IGxhc3RfYXZlcmFn
ZTsKKwkJZWxzZSBpZiAoYXZlcmFnZSA+IGxhc3RfYXZlcmFnZSkKKwkJCWxhc3RfYXZlcmFnZSA9
IGF2ZXJhZ2U7CiAKLQkJCWlmIChzZWNzX2xlZnQgPCAwKQotCQkJCXNlY3NfbGVmdCA9IDA7CisJ
CWlmIChhdmVyYWdlID49IDEwMDAwMDApCisJCQlzZWNzX2xlZnQgPSAodG90YWwgLSBjb3VudCkg
KiAoYXZlcmFnZSAvIDEwMDAwMDApOworCQllbHNlCisJCQlzZWNzX2xlZnQgPSAoKHRvdGFsIC0g
Y291bnQpICogYXZlcmFnZSkgLyAxMDAwMDAwOwogCi0JCQlzdHJjYXQoZGlzcGxheV9mb3JtYXQs
IF8odHh0X3JlbWFpbmluZykpOwotCQkJc25wcmludGYoZGlzcGxheSwgc2l6ZW9mKGRpc3BsYXkp
LCBkaXNwbGF5X2Zvcm1hdCwgdHh0LCByYXRpbywgc2Vjc19sZWZ0IC8gNjAsIHNlY3NfbGVmdCAl
IDYwKTsKLQkJfQotCQlmcmVlKGRpc3BsYXlfZm9ybWF0KTsKKwkJaWYgKHNlY3NfbGVmdCA8IDAp
CisJCQlzZWNzX2xlZnQgPSAwOworCisJCXN0cmNhdChkaXNwbGF5X2Zvcm1hdCwgXyh0eHRfcmVt
YWluaW5nKSk7CisJCXNucHJpbnRmKGRpc3BsYXksIHNpemVvZihkaXNwbGF5KSwgZGlzcGxheV9m
b3JtYXQsIHR4dCwgcmF0aW8sIHNlY3NfbGVmdCAvIDYwLCBzZWNzX2xlZnQgJSA2MCk7CisJfQor
CWZyZWUoZGlzcGxheV9mb3JtYXQpOwogCi0JCWxhc3RfY291bnQgPSBjb3VudDsKLQkJdGluX2dl
dHRpbWUoJmxhc3RfdGltZSk7CisJbGFzdF9jb3VudCA9IGNvdW50OworCXRpbl9nZXR0aW1lKCZs
YXN0X3RpbWUpOwogI2Vsc2UKLQkJc25wcmludGYoZGlzcGxheSwgc2l6ZW9mKGRpc3BsYXkpLCAi
JXMgJTNkJSUiLCB0eHQsIHJhdGlvKTsKKwlzbnByaW50ZihkaXNwbGF5LCBzaXplb2YoZGlzcGxh
eSksICIlcyAlM2QlJSIsIHR4dCwgcmF0aW8pOwogI2VuZGlmIC8qIEhBVkVfQ0xPQ0tfR0VUVElN
RSB8fCBIQVZFX0dFVFRJTUVPRkRBWSAqLwogCi0JCWxhc3RfdHh0ID0gdHh0OwotCQlsYXN0X3Rv
dGFsID0gdG90YWw7Ci0JCWxhc3RfcmF0aW8gPSByYXRpbzsKLQotCX0gZWxzZQotCQlzbnByaW50
ZihkaXNwbGF5LCBzaXplb2YoZGlzcGxheSksICIlcyIsIHR4dCk7Ci0KIAkvKiBPbmx5IGRpc3Bs
YXkgdGV4dCBpZiBpdCBjaGFuZ2VkIGZyb20gbGFzdCB0aW1lICovCiAJaWYgKHN0cmNtcChkaXNw
bGF5LCBsYXN0X2Rpc3BsYXkpKSB7CiAJCWNoYXIgKnRtcDsKQEAgLTYxMCw1ICs2MDQsOSBAQCBz
aG93X3Byb2dyZXNzKAogCQlTVFJDUFkobGFzdF9kaXNwbGF5LCBkaXNwbGF5KTsKIAl9CiAKKwls
YXN0X3R4dCA9IHR4dDsKKwlsYXN0X3RvdGFsID0gdG90YWw7CisJbGFzdF9yYXRpbyA9IHJhdGlv
OworCiAJY21kX2xpbmUgPSBzYXZlX2NtZF9saW5lOwogfQoKClRoYW5rcywKR2xlbm4KCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp0aW4tdXNlcnMgbWFp
bGluZyBsaXN0CnRpbi11c2Vyc0B0aW4ub3JnCmh0dHA6Ly9saXN0cy50aW4ub3JnL2NnaS1iaW4v
bWFpbG1hbi9saXN0aW5mby90aW4tdXNlcnMK