[Lcdproc] Update to lcdproc-iface
Markus Dolze
bsdfan@nurfuerspam.de
Sun May 7 14:01:01 2006
This is a MIME encapsulated multipart message -
please use a MIME-compliant e-mail program to open it.
Dies ist eine mehrteilige Nachricht im MIME-Format -
bitte verwenden Sie zum Lesen ein MIME-konformes Mailprogramm.
--========GMXBoundary324321147010418
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Hello,
here is an update to the network stats code. Changes:
Introduce a generic value conversion functions in util.c. sprintf_memory has
been rewritten to use it.
Remove code for running iface.c as a standalone client.
Replace fprintf() and perror() calls in iface.c with report().
Rewrite the value formatting code to use new value conversion from util.c.
The next step will be to move the machine dependend part of the network
statistics gathering part into corresponding machine_* files. We already
have Linux and FreeBSD.
I am wondering what will be the best way to do that without break building
on other systems before we have someone to port the code to that platform.
Add a dummy implementation returning an error?
Add some "autodetection" to configure?
Regards
Markus
--========GMXBoundary324321147010418
Content-Type: text/plain; name="patch-iface-update.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="patch-iface-update.txt"
ZGlmZiAtdSBsY2Rwcm9jLUNWUy1jdXJyZW50LTIwMDYwNTA2L2NsaWVudHMvbGNkcHJvYy9pZmFj
ZS5jIGxjZHByb2MubmV3L2NsaWVudHMvbGNkcHJvYy9pZmFjZS5jCi0tLSBjbGllbnRzL2xjZHBy
b2MvaWZhY2UuYy5vcmlnCUZyaSBNYXkgIDUgMDk6MDA6NDIgMjAwNgorKysgY2xpZW50cy9sY2Rw
cm9jL2lmYWNlLmMJU3VuIE1heSAgNyAxNToyMTowMSAyMDA2CkBAIC0zMCwyOSArMzAsMTcgQEAK
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAKLSNpbmNsdWRlICJpZmFj
ZS5oIgotI2lmZGVmIE5FVExDRENMSUVOVAotI2luY2x1ZGUgInNvY2tldHMuaCIKLSNlbHNlCiAj
aW5jbHVkZSAic2hhcmVkL3NvY2tldHMuaCIKICNpbmNsdWRlICJzaGFyZWQvZGVidWcuaCIKICNp
bmNsdWRlICJzaGFyZWQvcmVwb3J0LmgiCiAjaW5jbHVkZSAic2hhcmVkL2NvbmZpZ2ZpbGUuaCIK
ICNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImlmYWNlLmgi
CisKICNkZWZpbmUgVU5TRVRfSU5UIC0xCSAKICNkZWZpbmUgVU5TRVRfU1RSICJcMDEiCi0jZW5k
aWYgLy9ORVRMQ0RDTElFTlQKLQotCi0jaWZkZWYgTkVUTENEQ0xJRU5UCi0vKiBPcHRpb24gZmxh
Z3MgYW5kIGdsb2JhbCB2YXJpYWJsZXMgKi8KIAotY2hhciAqcHJvZ3JhbV9uYW1lOyAgLyogdGhl
IG5hbWUgdGhlIHByb2dyYW0gd2FzIHJ1biB3aXRoICovCi1pbnQgcG9ydCA9IDEzNjY2OyAgLyog
ZGVmYXVsdCBwb3J0ICovCi1jaGFyIHNlcnZlclsyNTZdID0gImxvY2FsaG9zdCI7ICAvKiBkZWZh
dWx0IHNlcnZlciAqLwotaW50IGRhZW1vbl9tb2RlID0gMDsgIC8qIGJ5IGRlZmF1bHQsIG5vIGRh
ZW1vbiBtb2RlICovCi1pbnQgc29jayA9IDA7ICAvKiBzb2NrZXQgaGFuZGxlciAqLwotI2VuZGlm
IC8vTkVUTENEQ0xJRU5UCiAKIGludCBpZmFjZV9jb3VudCA9IDA7ICAvKiBudW1iZXIgb2YgaW50
ZXJmYWNlcyAqLwogCkBAIC03NSwyNTUgKzYzLDYgQEAKIH07CiAKIAotI2lmZGVmIE5FVExDRENM
SUVOVAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKLSAqIE1BSU4gUFJPR1JBTSBGVU5DVElPTgotICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKLSAqLwotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsK
LQotCUlmYWNlSW5mbyBpZmFjZVtNQVhfSU5URVJGQUNFU107ICAvKiBpbnRlcmZhY2UgaW5mbyAq
LwotCi0JaW50IGxlbjsgIC8qIGJ5dGVzIHJlYWQgZnJvbSBzZXJ2ZXIgKi8KLQotCWNoYXIgcmVh
ZGJ1ZmZbTUFYTVNHXTsgIC8qIHJlYWQgYnVmZmVyIGZyb20gc2VydmVyICovCi0KLQl1bnNpZ25l
ZCBpbnQgc2xlZXBfdGltZSA9IDE7ICAvKiBpbnRlcnZhbCBiZXR3ZWVuIHVwZGF0ZXMgKDEgc2Vj
b25kKSAqLwotCi0JaW50IHBpZDsgLyogY2hpbGQgcHJvY2VzcyBpZGVudGlmaWNhdG9yIGZvciBk
YWVtb24gbW9kZSAqLwotCi0JaW50IGlmYWNlX25tYnI7IC8qIGxvb3AgdmFyaWFibGUgZm9yIHRo
ZSBpbnRlcmZhY2UgKi8KLQotCS8qIENhcHR1cmUgc2lnbmFscyB0byBleGl0IHByb2dyYW0gY2xl
YW5seSAqLwotCXNpZ25hbChTSUdJTlQsIGV4aXRfcHJvZ3JhbSk7CS8qIEN0cmwtQyAqLwotCXNp
Z25hbChTSUdURVJNLCBleGl0X3Byb2dyYW0pOwkvKiBraWxsICovCi0Jc2lnbmFsKFNJR0hVUCwg
ZXhpdF9wcm9ncmFtKTsJLyoga2lsbCAtSFVQICovCi0Jc2lnbmFsKFNJR0tJTEwsIGV4aXRfcHJv
Z3JhbSk7CS8qIGtpbGwgLUtJTEwgKi8KLQotCS8qIGdldCBwcm9ncmFtIG5hbWUgZnJvbSBjb21t
YW5kIGxpbmUgKi8KLQlwcm9ncmFtX25hbWUgPSBhcmd2WzBdOwotCi0JLyogcGFyc2UgY29tbWFu
ZCBsaW5lIHBhcmFtZXRlcnMgKi8KLQlkZWNvZGVfc3dpdGNoZXMgKGFyZ2MsIGFyZ3YpOwotCi0J
LyogY2hlY2sgaWYgYW55IGludGVyZmFjZSBuYW1lIGhhcyBiZWVuIGludHJvZHVjZWQgKi8KLQot
CWlmIChpZmFjZV9jb3VudCA9PSAwKSB7Ci0JCS8qIG5vIG9uZSBoYXMgYmVlbiBpbnRyb2R1Y2Vk
LCBzbyBleGl0IHRoZSBwcm9ncmFtIHNob3dpbmcgaGVscCAqLwotCQlwcmludGYoIk5vIGludGVy
ZmFjZSBzZWxlY3RlZCwgcGxlYXNlLCB1c2UgLS1pbnRlcmZhY2Ugb3B0aW9uXG4iKTsKLQkJdXNh
Z2UgKDEpOwotCX0KLQotCS8qIGNoZWNrIGlmIHdlIGdvIHRvIGRhZW1vbiBtb2RlICovCi0JaWYg
KGRhZW1vbl9tb2RlKSB7Ci0JCXNpZ25hbChTSUdUVE9VLCBTSUdfSUdOKTsKLQkJc2lnbmFsKFNJ
R1RUSU4sIFNJR19JR04pOwotCQlzaWduYWwoU0lHVFNUUCwgU0lHX0lHTik7Ci0KLQkJLyogY3Jl
YXRlIGNoaWxkIHByb2Nlc3MgKi8KLQkJcGlkID0gZm9yaygpOwotCQkvKiBjcmVhdGUgbmV3IHNl
c3Npb24gKi8KLQkJc2V0c2lkKCk7Ci0JCXNpZ25hbChTSUdIVVAsIFNJR19JR04pOwotCi0gICAg
CQlpZiAocGlkICE9IDApIHsgLyogd2UgYXJlIHRoZSBwYXJlbnQgcHJvY2VzcyBhbmQgZXhpdCAq
LwotICAgICAgICAJCWV4aXQoMCk7Ci0gICAgCQl9Ci0gICAgCQkvKiBmcm9tIGhlcmUsIHdlIGFy
ZSB0aGUgY2hpbGQgcHJvY2VzcyAqLwotCX0KLQotCS8qIFRyeSB0byBjb25uZWN0IHRvIHNlcnZl
ciAqLwotCXNvY2sgPSBzb2NrX2Nvbm5lY3Qoc2VydmVyLCBwb3J0KTsKLQotCWlmIChzb2NrIDw9
IDApIHsgIC8qIHRoZXJlIHdhcyBzb21lIGVycm9yIGFuZCBleGl0ICovCi0JCWZwcmludGYoc3Rk
ZXJyLCAiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvICVzOiVkXG4iLCBzZXJ2ZXIsIHBvcnQp
OwotCQlleGl0KDApOwotCX0KLQotCS8qIFNheSAiaGVsbG8iIHRvIHNlcnZlciAqLwotCXNvY2tf
c2VuZF9zdHJpbmcoc29jaywgImhlbGxvXG4iKTsKLQotCS8qIFdhaXQgdGhlIHNlcnZlciB0byBi
ZSBwcmVwYXJlZCAqLwotCXVzbGVlcCg1MDAwMDApOwotCi0JLyogUmVhZCBzZXJ2ZXIgcmVzcG9u
c2UgKi8KLQlsZW4gPSBzb2NrX3JlY3Yoc29jaywgcmVhZGJ1ZmYsIE1BWE1TRyk7Ci0KLQkvKiBO
b3cgd2UgYXJlIHJlYWR5IHRvIHNlbmQgY29tbWFuZHMgdG8gc2VydmVyICovCi0KLQkvKiBzZXQg
aW5pdGlhbCBzcGVlZCBzY3JlZW4gd2l0aCB3aWRnZXRzICovCi0JaW5pdGlhbGl6ZV9zcGVlZF9z
Y3JlZW4oKTsKLQotCS8qIHNldCBpbml0aWFsIHRyYW5zZmVyIHNjcmVlbiBpZiBuZWVkZWQgKi8K
LQlpZiAodHJhbnNmZXJfc2NyZWVuKSB7Ci0JCWluaXRpYWxpemVfdHJhbnNmZXJfc2NyZWVuKCk7
Ci0JfQotCi0JLyogaW5pdGlhbGl6ZSBhbGwgaW50ZXJmYWNlIHN0cnVjdHMgKi8KLQlmb3IgKGlm
YWNlX25tYnIgPSAwOyBpZmFjZV9ubWJyIDwgaWZhY2VfY291bnQ7IGlmYWNlX25tYnIrKykgewot
CQlpZmFjZVtpZmFjZV9ubWJyXS5sYXN0X29ubGluZSA9IDA7Ci0JCWlmYWNlW2lmYWNlX25tYnJd
LnN0YXR1cyA9IGRvd247Ci0JfQotCi0KLQkvKiBtYWluIGxvb3AgKi8KLQl3aGlsZSAoMSkgewot
CQkvKiByZWFkIHNlcnZlciByZXNwb25zZXMgKi8KLQkJbGVuID0gc29ja19yZWN2KHNvY2ssIHJl
YWRidWZmLCBNQVhNU0cpOwotCSAgCi0JCS8qIGZvciBlYWNoIGludGVyZmFjZSBkbyAqLwotCQlm
b3IgKGlmYWNlX25tYnIgPSAwOyBpZmFjZV9ubWJyIDwgaWZhY2VfY291bnQ7IGlmYWNlX25tYnIr
KykgewotCQkJLypyZWFkIGlmYWNlX3BhcmFtZXRlciBzdGF0cyAqLwotCQkJaWYgKCFnZXRfaWZh
Y2Vfc3RhdHMoJmlmYWNlW2lmYWNlX25tYnJdKSkgewotCQkJCS8qIHRoZXJlIHdhcyBhbiBlcnJv
ciwgc28gd2UgZXhpdCB0aGUgbG9vcCAqLwotCQkgICAgCQlicmVhazsKLQkJICAgIAl9Ci0KLQkJ
CS8qIGFjdHVhbGl6ZSBzcGVlZCB2YWx1ZXMgaW4gZGlzcGxheSAqLwotCQkJYWN0dWFsaXplX3Nw
ZWVkX3NjcmVlbigmaWZhY2VbaWZhY2Vfbm1icl0sIHNsZWVwX3RpbWUsIGlmYWNlX25tYnIpOwot
CSAgICAKLQkJCS8qIGlmIG5lZWRlZCwgYWN0dWFsaXplIHRyYW5zZmVyIHZhbHVlcyBpbiBkaXNw
bGF5ICovCi0JCQlpZiAodHJhbnNmZXJfc2NyZWVuKQotCQkJCWFjdHVhbGl6ZV90cmFuc2Zlcl9z
Y3JlZW4oJmlmYWNlW2lmYWNlX25tYnJdLCBpZmFjZV9ubWJyKTsKLQkgIAotCQkJLyogQWN0dWFs
IHZhbHVlcyBhcmUgdGhlIG9sZCBvbmVzIGluIHRoZSBuZXh0IGxvb3AgKi8KLQkJCWlmYWNlW2lm
YWNlX25tYnJdLnJjX2J5dGVfb2xkID0gaWZhY2VbaWZhY2Vfbm1icl0ucmNfYnl0ZTsKLQkJCWlm
YWNlW2lmYWNlX25tYnJdLnRyX2J5dGVfb2xkID0gaWZhY2VbaWZhY2Vfbm1icl0udHJfYnl0ZTsK
LQkJCWlmYWNlW2lmYWNlX25tYnJdLnJjX3BrdF9vbGQgPSBpZmFjZVtpZmFjZV9ubWJyXS5yY19w
a3Q7Ci0JCQlpZmFjZVtpZmFjZV9ubWJyXS50cl9wa3Rfb2xkID0gaWZhY2VbaWZhY2Vfbm1icl0u
dHJfcGt0OwotCQl9Ci0KLQkJLyogV2FpdCBzb21lIHRpbWUgdG8gZG8gdGhlIG1haW4gbG9vcCBh
Z2FpbiAqLwotCQlzbGVlcChzbGVlcF90aW1lKTsKLQl9Ci0KLQkvKiBCZWZvcmUgZXhpdCB0aGUg
cHJvZ3JhbSwgY2xvc2UgdGhlIHNvY2tldCAqLwotCXNvY2tfY2xvc2Uoc29jayk7Ci0KLQlleGl0
ICgwKTsKLQotfSAvKiBtYWluKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEVORCBNQUlO
IFBST0dSQU0gRlVOQ1RJT04KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKgotICogU2V0IGFsbCB0aGUgb3B0aW9uIGZsYWdzIGFjY29yZGluZyB0byB0aGUgc3dpdGNo
ZXMgc3BlY2lmaWVkLgotICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgbm9uLW9wdGlv
biBhcmd1bWVudC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotc3RhdGljIGludAotZGVjb2Rl
X3N3aXRjaGVzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGM7Ci0KLQl3aGlsZSAo
KGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImk6YTpzOnA6dTp0ZGhWIiwgXAotCQkJCQkJ
CQlsb25nX29wdGlvbnMsIChpbnQgKikgMCkpICE9IEVPRikgewotICAgIAotICAgIAlzd2l0Y2gg
KGMpIHsKLQkJCWNhc2UgJ2knOgotCQkJCS8qIENoZWNrIG51bWJlciBvZiBpbnRlcmZhY2VzIGlu
dHJvZHVjZWQgKi8KLQkJCQlpZiAoaWZhY2VfY291bnQgPj0gTUFYX0lOVEVSRkFDRVMpIHsKLQkJ
CQkJZnByaW50ZihzdGRlcnIsICJUb28gbWFueSBpbnRlcmZhY2VzIGludHJvZHVjZWQuICIgCi0J
CQkJCQkJIk9ubHkgJWQgYXJlIHN1cHBvcnRlZC5cbiIsIE1BWF9JTlRFUkZBQ0VTKTsKLQkJCQkJ
ZXhpdCgwKTsKLQkJCQl9Ci0JCQkJaWZhY2VbaWZhY2VfY291bnRdLm5hbWUgPSBzdHJkdXAob3B0
YXJnKTsKLQkJCQkvLyBtYWtlIGFsaWFzIHBvaW50IHRvIHRoZSBzYW1lIHN0cmluZyBhcyB0aGUg
aW50ZXJmYWNlIG5hbWUKLQkJCQlpZmFjZVtpZmFjZV9jb3VudF0uYWxpYXMgPSBpZmFjZVtpZmFj
ZV9jb3VudF0ubmFtZTsKLQkJCQlpZmFjZV9jb3VudCsrOwotCQkJCWJyZWFrOwotCQkJY2FzZSAn
YSc6Ci0JCQkJaWZhY2VbaWZhY2VfY291bnQtMV0uYWxpYXMgPSBzdHJkdXAob3B0YXJnKTsKLQkJ
CQlicmVhazsKLQkJCWNhc2UgJ3MnOgotCQkJCXN0cm5jcHkoc2VydmVyLCBvcHRhcmcsIHNpemVv
ZihzZXJ2ZXIpKTsKLQkJCQlzZXJ2ZXJbc2l6ZW9mKHNlcnZlciktMV0gPSAnXDAnOwotCQkJCWJy
ZWFrOwotCQkJY2FzZSAncCc6Ci0JCQkJcG9ydCA9IGF0b2kob3B0YXJnKTsKLQkJCQlicmVhazsK
LQkJCWNhc2UgJ3UnOgotCQkJCS8qIGNoZWNrIGZvciB2YWxpZCB2YWx1ZXMgKi8KLQkJCQlpZiAo
c3Ryc3RyKG9wdGFyZywgImJ5dGUiKSkKLQkJCQkJc3RybmNweSh1bml0X2xhYmVsLCAiQiIsIHNp
emVvZih1bml0X2xhYmVsKSk7Ci0JCQkJZWxzZSBpZiAoc3Ryc3RyKG9wdGFyZywgImJpdCIpKQot
CQkJCQlzdHJuY3B5KHVuaXRfbGFiZWwsICJiIiwgc2l6ZW9mKHVuaXRfbGFiZWwpKTsKLQkJCQll
bHNlIGlmIChzdHJzdHIob3B0YXJnLCAicGFja2V0IikpCi0JCQkJCXN0cm5jcHkodW5pdF9sYWJl
bCwgInBrdCIsIHNpemVvZih1bml0X2xhYmVsKSk7Ci0JCQkJZWxzZSB7Ci0JCQkJCWZwcmludGYo
c3RkZXJyLCAibmV0bGNkY2xpZW50OiBhcmd1bWVudCAnJXMnIGZvciAtdSBwYXJhbWV0ZXIgaXMg
bm90IHZhbGlkXG4iLCBvcHRhcmcpOwotCQkJCQl1c2FnZSgwKTsKLQkJCQl9Ci0JCQkJdW5pdF9s
YWJlbFtzaXplb2YodW5pdF9sYWJlbCktMV0gPSAnXDAnOwotCQkJCWJyZWFrOwotCQkJY2FzZSAn
dCc6Ci0JCQkJdHJhbnNmZXJfc2NyZWVuID0gMTsgIC8qIHNob3cgdHJhbnNmZXIgc2NyZWVuICov
Ci0JCQkJYnJlYWs7ICAKLQkJCWNhc2UgJ2QnOgotCQkJCWRhZW1vbl9tb2RlID0gMTsgIC8qIGdv
IHRvIGRhZW1vbiBtb2RlICovCi0JCQkJYnJlYWs7Ci0JCQljYXNlICdWJzogIC8qIHNob3cgdmVy
c2lvbiAqLwotCQkJCWZwcmludGYoc3Rkb3V0LCAibmV0bGNkY2xpZW50IHYlc1xuIiwgVkVSU0lP
Tik7Ci0JCQkJZXhpdCgwKTsKLQkJCWNhc2UgJ2gnOiAvKiBzaG93IGhlbHAgKi8KLQkJCQl1c2Fn
ZSgwKTsKLQkJCQlleGl0KDApOwotCQl9Ci0JfQotCi0JcmV0dXJuIG9wdGluZDsKLQkKLX0gLyog
ZGVjb2RlX3N3aXRjaGVzKCkgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKLSAqIFNob3cgcHJv
Z3JhbSBoZWxwIGFuZCBleGl0LgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0gKi8KLQotc3RhdGljIHZv
aWQKLXVzYWdlIChpbnQgc3RhdHVzKQotewotCXByaW50ZiAoIlxuIgotIm5ldGxjZGNsaWVudCB2
JXMgZm9yIExDRHByb2MsIGJ5IEx1aXMgTGxvcmVudGVcbiIsIFZFUlNJT04pOwotCXByaW50ZiAo
IlxuIgotIlVzYWdlOiAlcyAtaSA8aW50ZXJmYWNlPiBbLWEgYWxpYXNdIFsgLXRkaFYgXSBbIC1z
IHNlcnZlciBdIFsgLXAgcG9ydCBdIFstdSB1bml0XVxuIiwgcHJvZ3JhbV9uYW1lKTsKLQlwcmlu
dGYgKCJcbiIKLSJPcHRpb25zIGluIFtdJ3MgYXJlIG9wdGlvbmFsLlxuIgotIiAgLWkgLCAtLWlu
dGVyZmFjZT1JTlRFUkZBQ0UgICAgICAgICBzaG93IElOVEVSRkFDRSBzdGF0aXN0aWNzXG4iCi0i
ICAtYSAsIC0tYWxpYXM9QUxJQVMgICAgICAgICAgICAgICAgIGFsaWFzIG5hbWUgZm9yIHRoZSBp
bnRlcmZhY2UgKC1hIGhhcyB0byBcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb2xsb3cgLWkpXG4iCi0iICAtcywgLS1zZXJ2ZXI9U0VSVkVSICAgICAgICAgICAg
ICAgIGNvbm5lY3QgdG8gU0VSVkVSIChkZWZhdWx0IGlzIGxvY2FsaG9zdClcbiIKLSIgIC1wLCAt
LXBvcnQ9TlVNQkVSICAgICAgICAgICAgICAgICAgY29ubmVjdCB0byBzcGVjaWZpZWQgcG9ydCBu
dW1iZXIgKGRlZmF1bHRcbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpcyAxMzY2NilcbiIKLSIgIC11LCAtLXVuaXQ9VFlQRSAgICAgICAgICAgICAgICAgICAgc3Bl
ZWQgbWVhc3VyZSB1bml0LiBBdmFpbGFibGUgdW5pdHMgYXJlOlxuIgotIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgKGRlZmF1bHQpXG4iCi0iICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0XG4iCi0iICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2V0XG4iCi0iICAtdCwgLS10cmFuc2ZlciAgICAgICAgICAg
ICAgICAgICAgIGFkZCBzY3JlZW4gd2l0aCB0cmFuc2ZlcnJlZCB0cmFmZmljXG4iCi0iICAtZCwg
LS1kYWVtb24gICAgICAgICAgICAgICAgICAgICAgIHJ1biBpbiB0aGUgYmFja2dyb3VuZFxuIgot
IiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBh
bmQgZXhpdFxuIgotIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQg
dmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIgotKTsKLQlwcmludGYoIlxuIgotIkV4YW1w
bGU6XG4iCi0iICAlcyAtcyBteS5zZXJ2ZXIub3JnIC1wIDIzMDAgLXUgYml0IC1pIGV0aDAgLWEg
TEFOXG4iLCBwcm9ncmFtX25hbWUpOwotCQkKLQlleGl0IChzdGF0dXMpOwotCi19IC8qIHVzYWdl
KCkgKi8KLQotCi0jZWxzZQotCi0KIC8qIHJlYWRzIGFuZCBwYXJzZXMgY29uZmlndXJhdGlvbiBm
aWxlICovCiBzdGF0aWMgaW50CiBpZmFjZV9wcm9jZXNzX2NvbmZpZ2ZpbGUoKQpAQCAtNDQ0LDcg
KzE4Myw2IEBACiAJcmV0dXJuIDA7CiB9CSAgLy8gRW5kIGlmYWNlX3NjcmVlbigpCiAKLSNlbmRp
ZiAvL05FVExDRENMSUVOVAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVhZCBpbnRlcmZhY2Ug
c3RhdGlzdGljcyBmcm9tIHN5c3RlbSBhbmQgIHN0b3JlIGluIHRoZSBzdHJ1Y3QgCkBAIC01MTAs
NyArMjQ4LDcgQEAKIAogCX0KIAllbHNlIHsgIC8qIGVycm9yIHdoZW4gb3BlbmluZyB0aGUgZmls
ZSAqLwotCQlmcHJpbnRmKHN0ZGVyciwiRXJyb3I6IENvdWxkIG5vdCBvcGVuICVzXG4iLCBERVZG
SUxFKTsKKwkJcmVwb3J0KFJQVF9DUklULCAiRXJyb3I6IENvdWxkIG5vdCBvcGVuICVzXG4iLCBE
RVZGSUxFKTsKIAkJcmV0dXJuIDA7IC8qIHNvbWV0aGluZyB3ZW50IHdyb25nICovCiAJfQogI2Vu
ZGlmCkBAIC01NDIsNyArMjgwLDcgQEAKIAkJCW5hbWVbNF0gPSByb3dzOyAvKiBzZXQgdGhlIGlu
dGVyZmFjZSBpbmRleCAqLwogCQkJLyogcmV0cml2ZSB0aGUgaWZtaWJkYXRhIGZvciB0aGUgY3Vy
cmVudCBpbmRleCAqLwogCQkJaWYgKHN5c2N0bChuYW1lLCA2LCAmaWZtZCwgJmxlbiwgTlVMTCwg
MCkgPT0gLTEpIHsKLQkJCQlwZXJyb3IoInN5c2N0bF9yZWFkIik7CisJCQkJcmVwb3J0KFJQVF9F
UlIsICJSZWFkaW5nIGlmbWliZGF0YSBmYWlsZWQiKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCS8q
IGNoZWNrIGlmIGl0cyBpbnRlcmZhY2UgbmFtZSBtYXRjaGVzICovCkBAIC01NjgsMTAgKzMwNiwx
MCBAQAogCQkJfQogCQl9CiAJCS8qIGlmIHdlIGFyZSBoZXJlIHRoZXJlIGlzIG5vIGludGVyZmFj
ZSB3aXRoIHRoZSBnaXZlbiBuYW1lICovCi0JCWZwcmludGYoc3RkZXJyLCAiVGhlcmUgaXMgbm8g
aW50ZXJmYWNlIG5hbWVkICVzXG4iLCBpbnRlcmZhY2UtPm5hbWUpOworCQlyZXBvcnQoUlBUX0NS
SVQsICJUaGVyZSBpcyBubyBpbnRlcmZhY2UgbmFtZWQgJXMiLCBpbnRlcmZhY2UtPm5hbWUpOwog
CQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlwZXJyb3IoImdldF9pZmFjZV9zdGF0cyIpOworCQly
ZXBvcnQoUlBUX0NSSVQsICJSZWFkaW5nIGludGVyZmFjZSBjb3VudCB2aWEgc3lzY3RsIGZhaWxl
ZCIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTY0OSw3MiArMzg3LDIyIEBACiB2b2lkIAogZm9y
bWF0X3ZhbHVlIChjaGFyICpidWZmLCBkb3VibGUgdmFsdWUsIGNoYXIgKnVuaXQpCiB7Ci0JZmxv
YXQgZm9ybWF0ZWRfdmFsdWU7Ci0KLQkvKiBpZiB0aGUgbWVhc3VyZSB1bml0IGlzIGluICdiJyAo
Yml0cyksIHRoZSB2YWx1ZSBwYXNzZWQgbXVzdAotCSAqIGJlIGNvbnZlcnRlZCB0byBiaXRzIChm
cm9tIGJ5dGVzKQotCSAqLwotCWlmIChzdHJzdHIodW5pdCwgImIiKSkgeworCS8qIENvbnZlcnQg
Ynl0ZXMgdG8gYml0cywgaWYgbmVjZXNzYXJ5ICovCisJaWYgKHN0cnN0cih1bml0LCAiYiIpKQog
CQl2YWx1ZSAqPSA4OwotCX0KIAotCS8qIGJ5dGVzLCBiaXRzIG9yIHBhY2tldHMgKi8KLQlpZiAo
dmFsdWUgPCAxMDI0KSB7Ci0JCXNwcmludGYoYnVmZiwgIiU4bGQgJXMiLChsb25nKXZhbHVlLCB1
bml0KTsKLQkJcmV0dXJuOwotCX0KLQkKLQkvKiBLaWxvYnl0ZXMsIEtpbG9iaXRzIG9mIEtpbG9w
YWNrZXRzICovCi0JaWYgKHZhbHVlIDwgMTAwMDAwMC4wZikgewotCQlpZiAoc3Ryc3RyKHVuaXQs
ICJCIikpIHsgLyogMSBLQiA9IDEwMjQgKi8KLQkJCWZvcm1hdGVkX3ZhbHVlID0gKGZsb2F0KSB2
YWx1ZSAvIDEwMjQuMGY7Ci0JCX0KLQkJZWxzZSB7IC8qIDEgSyA9IDEwMDAgKi8KLQkJCWZvcm1h
dGVkX3ZhbHVlID0gKGZsb2F0KSB2YWx1ZSAvIDEwMDAuMGY7Ci0JCX0KKwkvKiBJZiB1bml0cyBh
cmUgYnl0ZXMsIHRoZW4gZGl2aWRlIGJ5IDJeMTAsIG90aGVyd2lzZSBieSAxMF4zICovCisJY2hh
ciAqbWFnID0gY29udmVydF9kb3VibGUoJnZhbHVlLCAoc3Ryc3RyKHVuaXQsICJCIikpID8gMTAy
NCA6IDEwMDAsIDEuMGYpOwogCi0JCXNwcmludGYoYnVmZiwgIiU4LjNmIEslcyIsIGZvcm1hdGVk
X3ZhbHVlLCB1bml0KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIE1lZ2FieXRlcywgTWVnYWJpdHMg
b3IgTWVnYXBhY2tldHMgKi8KLQlpZiAodmFsdWUgPCAxMDAwMDAwMDAwLjBmKSB7Ci0JCWlmIChz
dHJzdHIodW5pdCwgIkIiKSkgeyAvKiAxIE1CID0gMTAyNCBLQiAqLwotCQkJZm9ybWF0ZWRfdmFs
dWUgPSAoZmxvYXQpIHZhbHVlIC8gMTA0ODU3Ni4wZjsgLyogMTAyNCBeIDIgKi8KLQkJfQotCQll
bHNlIHsgLyogMSBNID0gMTAwMCBLICovCi0JCQlmb3JtYXRlZF92YWx1ZSA9IChmbG9hdCkgdmFs
dWUgLyAxMDAwMDAwLjBmOyAvKiAxMDAwIF4gMiAqLwotCQl9Ci0JCQkKLQkJc3ByaW50ZihidWZm
LCAiJTguM2YgTSVzIiwgZm9ybWF0ZWRfdmFsdWUsIHVuaXQpOwotCQlyZXR1cm47Ci0JfQotCi0J
LyogR2lnYWJ5dGVzLCBHaWdhYml0cyBvciBHaWdhcGFja2V0cyAqLwotCWlmICh2YWx1ZSA8IDEw
MDAwMDAwMDAwMDAuMGYpIHsKLQkJaWYgKHN0cnN0cih1bml0LCAiQiIpKSB7IC8qIDEgR0IgPSAx
MDI0IE1CICovCi0JCQlmb3JtYXRlZF92YWx1ZSA9IChmbG9hdCkgdmFsdWUgLyAxMDczNzQxODI0
LjBmOyAvKiAxMDI0IF4gMyAqLwotCQl9Ci0JCWVsc2UgeyAvKiAxIEcgPSAxMDAwIE0gKi8KLQkJ
CWZvcm1hdGVkX3ZhbHVlID0gKGZsb2F0KSB2YWx1ZSAvIDEwMDAwMDAwMDAuMGY7IC8qIDEwMDAg
XiAzICovCi0JCX0KLQkJCQotCQlzcHJpbnRmKGJ1ZmYsICIlOC4zZiBHJXMiLCBmb3JtYXRlZF92
YWx1ZSwgdW5pdCk7Ci0JCXJldHVybjsKLQl9CisJLyogRm9ybWF0dGluZyBydWxlczoKKwkgKiAt
IGlmIG9yaWdpbmFsIHZhbHVlIHdhcyA8IDEwMDAsIG91dHB1dCBkZWNpbWFsIHZhbHVlIG9ubHkK
KwkgKiAtIG90aGVyd2lzZSBmb3JtYXQgd2l0aCAzIHByZWNpc2lvbgorCSAqLworCWlmIChtYWdb
MF0gPT0gMCkKKwkJc3ByaW50ZihidWZmLCAiJThsZCAlcyIsIChsb25nKSB2YWx1ZSwgdW5pdCk7
CisJZWxzZQorCQlzcHJpbnRmKGJ1ZmYsICIlNy4zZiAlcyVzIiwgdmFsdWUsIG1hZywgdW5pdCk7
CiAKLQkvKiBUZXJhYnl0ZXMsIFRlcmFiaXRzIG9yIFRlcmFwYWNrZXRzICovCi0JaWYgKHZhbHVl
ID49IDEwMDAwMDAwMDAwMDAuMGYpIHsKLQkJaWYgKHN0cnN0cih1bml0LCAiQiIpKSB7IC8qIDEg
VEIgPSAxMDI0IEdCICovCi0JCQlmb3JtYXRlZF92YWx1ZSA9IChmbG9hdCkgdmFsdWUgLyAxMDk5
NTExNjI3Nzc2LjBmOyAvKiAxMDI0IF4gNCAqLwotCQl9Ci0JCWVsc2UgeyAvKiAxIFQgPSAxMDAw
IEcgKi8KLQkJCWZvcm1hdGVkX3ZhbHVlID0gKGZsb2F0KSB2YWx1ZSAvIDEwMDAwMDAwMDAwMDAu
MGY7IC8qIDEwMDAgXiA0ICovCi0JCX0KLQkJCQotCQlzcHJpbnRmKGJ1ZmYsICIlOC4zZiBUJXMi
LCBmb3JtYXRlZF92YWx1ZSwgdW5pdCk7Ci0JCXJldHVybjsKLQl9CiB9IC8qIGZvcm1hdF92YWx1
ZSgpICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03MjYsOTcgKzQxNCwyMyBAQAogdm9pZCAK
IGZvcm1hdF92YWx1ZV9tdWx0aV9pbnRlcmZhY2UgKGNoYXIgKmJ1ZmYsIGRvdWJsZSB2YWx1ZSwg
Y2hhciAqdW5pdCkKIHsKLQljaGFyIG15YnVmZlsyMF07ICAvKiB0ZW1wIGJ1ZmZlciAqLwotCWZs
b2F0IGZvcm1hdGVkX3ZhbHVlOwotCi0JLyogaWYgdGhlIG1lYXN1cmUgdW5pdCBpcyBpbiAnYicg
KGJpdHMpLCB0aGUgdmFsdWUgcGFzc2VkIG11c3QKLQkgKiBiZSBjb252ZXJ0ZWQgdG8gYml0cyAo
ZnJvbSBieXRlcykKLQkgKi8KLQlpZiAoc3Ryc3RyKHVuaXQsICJiIikpIHsKKwlpZiAoc3Ryc3Ry
KHVuaXQsICJiIikpCiAJCXZhbHVlICo9IDg7Ci0JfQogCi0JLyogYnl0ZXMsIGJpdHMgb3IgcGFj
a2V0cyAqLwotCWlmICh2YWx1ZSA8IDEwMDApIHsKLQkJc3ByaW50ZihidWZmLCAiJTNsZCAiLCAo
bG9uZyl2YWx1ZSk7Ci0JCXJldHVybjsKLQl9Ci0JCi0JLyogS2lsb2J5dGVzLCBLaWxvYml0cyBv
ZiBLaWxvcGFja2V0cyAqLwotCWlmICh2YWx1ZSA8IDEwMDAwMDApIHsKLQkJaWYgKHN0cnN0cih1
bml0LCAiQiIpKSB7IC8qIDEgS0IgPSAxMDI0ICovCi0JCQlmb3JtYXRlZF92YWx1ZSA9IChmbG9h
dCkgdmFsdWUgLyAxMDI0LjBmOwotCQl9Ci0JCWVsc2UgeyAvKiAxIEsgPSAxMDAwICovCi0JCQlm
b3JtYXRlZF92YWx1ZSA9IChmbG9hdCkgdmFsdWUgLyAxMDAwLjBmOwotCQl9Ci0KLQkJc3ByaW50
ZihteWJ1ZmYsICIlMy4xZiIsIGZvcm1hdGVkX3ZhbHVlKTsKLQkJaWYgKG15YnVmZlsyXSAhPSAn
LicpIHsKLQkJCXNwcmludGYoYnVmZiwgIiUuM3NLIiwgbXlidWZmKTsKLQkJfQotCQllbHNlIHsK
LQkJCXNwcmludGYoYnVmZiwgIiAlLjJzSyIsIG15YnVmZik7Ci0JCX0KLQkJcmV0dXJuOwotCX0K
KwljaGFyICptYWcgPSBjb252ZXJ0X2RvdWJsZSgmdmFsdWUsIChzdHJzdHIodW5pdCwgIkIiKSkg
PyAxMDI0IDogMTAwMCwgMS4wZik7CiAKLQkvKiBNZWdhYnl0ZXMsIE1lZ2FiaXRzIG9yIE1lZ2Fw
YWNrZXRzICovCi0JaWYgKHZhbHVlIDwgMTAwMDAwMDAwMC4wZikgewotCQlpZiAoc3Ryc3RyKHVu
aXQsICJCIikpIHsgLyogMSBNQiA9IDEwMjQgS0IgKi8KLQkJCWZvcm1hdGVkX3ZhbHVlID0gKGZs
b2F0KSB2YWx1ZSAvIDEwNDg1NzYuMGY7IC8qIDEwMjQgXiAyICovCi0JCX0KLQkJZWxzZSB7IC8q
IDEgTSA9IDEwMDAgSyAqLwotCQkJZm9ybWF0ZWRfdmFsdWUgPSAoZmxvYXQpIHZhbHVlIC8gMTAw
MDAwMC4wZjsgLyogMTAwMCBeIDIgKi8KLQkJfQotCQkJCi0JCXNwcmludGYobXlidWZmLCAiJTMu
MWYiLCBmb3JtYXRlZF92YWx1ZSk7Ci0JCWlmIChteWJ1ZmZbMl0gIT0gJy4nKSB7Ci0JCQlzcHJp
bnRmKGJ1ZmYsICIlLjNzTSIsIG15YnVmZik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzcHJpbnRmKGJ1
ZmYsICIgJS4yc00iLCBteWJ1ZmYpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBHaWdhYnl0
ZXMsIEdpZ2FiaXRzIG9yIEdpZ2FwYWNrZXRzICovCi0JaWYgKHZhbHVlIDwgMTAwMDAwMDAwMDAw
MC4wZikgewotCQlpZiAoc3Ryc3RyKHVuaXQsICJCIikpIHsgLyogMSBHQiA9IDEwMjQgTUIgKi8K
LQkJCWZvcm1hdGVkX3ZhbHVlID0gKGZsb2F0KSB2YWx1ZSAvIDEwNzM3NDE4MjQuMGY7IC8qIDEw
MjQgXiAzICovCi0JCX0KLQkJZWxzZSB7IC8qIDEgRyA9IDEwMDAgTSAqLwotCQkJZm9ybWF0ZWRf
dmFsdWUgPSAoZmxvYXQpIHZhbHVlIC8gMTAwMDAwMDAwMC4wZjsgLyogMTAwMCBeIDMgKi8KLQkJ
fQotCQkJCi0JCXNwcmludGYobXlidWZmLCAiJTMuMWYiLCBmb3JtYXRlZF92YWx1ZSk7Ci0JCWlm
IChteWJ1ZmZbMl0gIT0gJy4nKSB7Ci0JCQlzcHJpbnRmKGJ1ZmYsICIlLjNzRyIsIG15YnVmZik7
Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzcHJpbnRmKGJ1ZmYsICIgJS4yc0ciLCBteWJ1ZmYpOwotCQl9
Ci0JCXJldHVybjsKLQl9CisJLyogRm9ybWF0dGluZyBydWxlczoKKwkgKiAtIGlmIG9yaWdpbmFs
IHZhbHVlIHdhcyA8IDEwMDAsIG91dHB1dCBkZWNpbWFsIHZhbHVlIG9ubHkKKwkgKiAtIHdpdGgg
MSBwcmVjaXNpb24gaWYgPDEwCisJICogLSBkZWNpbWFsIHZhbHVlIHdpdGggbWFnbml0dWRlIG90
aGVyd2lzZQorCSAqLworCWlmIChtYWdbMF0gPT0gMCkKKwkJc3ByaW50ZihidWZmLCAiJTRsZCIs
IChsb25nKSB2YWx1ZSk7CisJZWxzZSBpZiAodmFsdWUgPCAxMCkKKwkJc3ByaW50ZihidWZmLCAi
JTMuMWYlcyIsIHZhbHVlLCBtYWcpOworCWVsc2UKKwkJc3ByaW50ZihidWZmLCAiJTMuZiVzIiwg
dmFsdWUsIG1hZyk7CiAKLQkvKiBUZXJhYnl0ZXMsIFRlcmFiaXRzIG9yIFRlcmFwYWNrZXRzICov
Ci0JaWYgKHZhbHVlID49IDEwMDAwMDAwMDAwMDAuMGYpIHsKLQkJaWYgKHN0cnN0cih1bml0LCAi
QiIpKSB7IC8qIDEgVEIgPSAxMDI0IEdCICovCi0JCQlmb3JtYXRlZF92YWx1ZSA9IChmbG9hdCkg
dmFsdWUgLyAxMDk5NTExNjI3Nzc2LjBmOyAvKiAxMDI0IF4gNCAqLwotCQl9Ci0JCWVsc2UgeyAv
KiAxIFQgPSAxMDAwIEcgKi8KLQkJCWZvcm1hdGVkX3ZhbHVlID0gKGZsb2F0KSB2YWx1ZSAvIDEw
MDAwMDAwMDAwMDAuMGY7IC8qIDEwMDAgXiA0ICovCi0JCX0KLQkJCQotCQlzcHJpbnRmKG15YnVm
ZiwgIiUzLjFmIiwgZm9ybWF0ZWRfdmFsdWUpOwotCQlpZiAobXlidWZmWzJdICE9ICcuJykgewot
CQkJc3ByaW50ZihidWZmLCAiJS4zc1QiLCBteWJ1ZmYpOwotCQl9Ci0JCWVsc2UgewotCQkJc3By
aW50ZihidWZmLCAiICUuMnNUIiwgbXlidWZmKTsKLQkJfQotCQlyZXR1cm47Ci0JfQogfSAvKiBm
b3JtYXRfdmFsdWVfbXVsdGlfaW50ZXJmYWNlKCkgKi8KIAogLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAg
LTEwMzIsMjMgKzY0NiwzIEBACiAJCX0KIAl9CiB9IC8qIGFjdHVhbGl6ZV90cmFuc2Zlcl9zY3Jl
ZW4oKSAqLwotCi0jaWZkZWYgTkVUTENEQ0xJRU5UCi0vKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRXhp
dCB0aGUgcHJvZ3JhbSBpbiBhIGNsZWFuIHdheQotICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotdm9p
ZAotZXhpdF9wcm9ncmFtIChpbnQgdmFsKQotewotCS8qIGNoZWNrIGlmIHNvY2tldCBpcyBvcGVu
IGFuZCBjbG9zZSBpdCAqLwotCWlmIChzb2NrICE9IDApIHsKLQkJc29ja19jbG9zZShzb2NrKTsK
LQl9Ci0JCi0JZnByaW50ZihzdGRlcnIsICJcbkV4aXRpbmcgbmV0bGNkY2xpZW50Li4uLlxuIik7
Ci0KLQlleGl0KDApOwotCQotfSAvKiBleGl0X3Byb2dyYW0oKSAqLwotI2VuZGlmIC8vTkVUTENE
Q0xJRU5UCmRpZmYgLXUgbGNkcHJvYy1DVlMtY3VycmVudC0yMDA2MDUwNi9jbGllbnRzL2xjZHBy
b2MvdXRpbC5jIGxjZHByb2MubmV3L2NsaWVudHMvbGNkcHJvYy91dGlsLmMKLS0tIGNsaWVudHMv
bGNkcHJvYy91dGlsLmMub3JpZwlGcmkgQXByIDI4IDA5OjAwOjMyIDIwMDYKKysrIGNsaWVudHMv
bGNkcHJvYy91dGlsLmMJU3VuIE1heSAgNyAxNToxODowMyAyMDA2CkBAIC0zNSwyNSArMzUsMTYg
QEAKIHNwcmludGZfbWVtb3J5KGNoYXIgKmRzdCwgZG91YmxlIHZhbHVlLCBkb3VibGUgcm91bmRs
aW1pdCkKIHsKIAlpZiAoZHN0ICE9IE5VTEwpIHsKLQkJc3RhdGljIGNoYXIgKnVuaXRzW10gPSB7
ICIiLCAiayIsICJNIiwgIkciLCAiVCIsICJQIiwgIkUiLCAiWiIsICJZIiwgTlVMTCB9OwotCQlp
bnQgb2ZmcyA9IDA7CiAJCWNoYXIgKmZvcm1hdCA9ICIlLjFmJXMiOwogCi0JCWlmICgocm91bmRs
aW1pdCA8PSAwLjApIHx8IChyb3VuZGxpbWl0ID4gMS4wKSkKLQkJCXJvdW5kbGltaXQgPSAwLjU7
CisJCWNoYXIgKnVuaXQgPSBjb252ZXJ0X2RvdWJsZSgmdmFsdWUsIDEwMjQsIHJvdW5kbGltaXQp
OwogCi0JCXdoaWxlICh1bml0c1tvZmZzXSAhPSBOVUxMKSB7Ci0JCQlpZiAodmFsdWUgPD0gMTAy
NCAqIHJvdW5kbGltaXQpCi0JCQkJYnJlYWs7Ci0JCQlvZmZzKys7Ci0JCQl2YWx1ZSAvPSAxMDI0
OwotCQl9CiAJCWlmICh2YWx1ZSA8IDEwMCkKIAkJCWZvcm1hdCA9ICIlLjJmJXMiOwogCQlpZiAo
dmFsdWUgPCAxMCkKIAkJCWZvcm1hdCA9ICIlLjNmJXMiOwogCi0JCXNwcmludGYoZHN0LCBmb3Jt
YXQsIHZhbHVlLCB1bml0c1tvZmZzXSk7CisJCXNwcmludGYoZHN0LCBmb3JtYXQsIHZhbHVlLCB1
bml0KTsKIAl9CQogCXJldHVybiBkc3Q7CQogfQpAQCAtNzAsNiArNjEsMzMgQEAKIAkJCXNwcmlu
dGYoZHN0LCAiJS4xZiUlIiwgKHBlcmNlbnQgPj0gMCkgPyBwZXJjZW50IDogMCk7CiAJfQkKIAly
ZXR1cm4gZHN0OworfQorCisvKiogY29udmVydHMgYSB2YWx1ZSB3aXRoIHVuaXQgdmFsdWUKKyAq
IGRvZXMgbm90IGRvIGZvcm1hdHRpbmcKKyAqIGJhc2UgOiBzaG91bGQgYmUgMTAwMCBmb3IgZGVj
aW1hbCBhbmQgMTAyNCBmb3IgYmluYXJ5IHVuaXRzCisgKiByb3VuZGxpbWl0IDogc2V0IDwgMS4w
IGlmIHByZWNpc2lvbiBvZiBvcmlnaW5hbCBpbnB1dCB2YWx1ZSBpcyBub3Qgc3VmZmljaWVudAor
ICovCitjaGFyICoKK2NvbnZlcnRfZG91YmxlKGRvdWJsZSAqdmFsdWUsIGludCBiYXNlLCBkb3Vi
bGUgcm91bmRsaW1pdCkKK3sKKwlzdGF0aWMgY2hhciAqdW5pdHNbXSA9IHsgIiIsICJrIiwgIk0i
LCAiRyIsICJUIiwgIlAiLCAiRSIsICJaIiwgIlkiLCBOVUxMIH07CisJaW50IG9mZiA9IDA7CisK
KwlpZiAoKHJvdW5kbGltaXQgPD0gMC4wKSB8fCAocm91bmRsaW1pdCA+IDEuMCkpCisJCXJvdW5k
bGltaXQgPSAwLjU7CisKKwkvKiBHZXQgdmFsdWUncyBvcmRlciBvZiBtYWduaXR1ZGUgKi8KKwl3
aGlsZSAodW5pdHNbb2ZmXSAhPSBOVUxMKSB7CisJCS8qIE5vdGU6IHRoZSBjaGVjayBmb3IgMTAw
MCBpcyB0byBpZGVuZml0eSB0aGUgbnVtYmVyIG9mCisJCSAqIGNoYXJhY3RlcnMgaW4gdGhlIG91
dHB1dCBuZWVkZWQsIG5vdCB0byBkZWNpZGUgaWYgdG8gc2NhbGUgdmFsdWUuCisJCSAqLworCQlp
ZiAoKnZhbHVlIDwgMTAwMCAqIHJvdW5kbGltaXQpCisJCQlicmVhazsKKwkJb2ZmKys7CisJCSp2
YWx1ZSAvPSBiYXNlOworCX0KKwlyZXR1cm4gdW5pdHNbb2ZmXTsJCiB9CiAKIC8qIEVPRiAqLwpk
aWZmIC11IGxjZHByb2MtQ1ZTLWN1cnJlbnQtMjAwNjA1MDYvY2xpZW50cy9sY2Rwcm9jL3V0aWwu
aCBsY2Rwcm9jLm5ldy9jbGllbnRzL2xjZHByb2MvdXRpbC5oCi0tLSBjbGllbnRzL2xjZHByb2Mv
dXRpbC5oLm9yaWcJU3VuIE1heSAyMiAxNzoyODowNSAyMDA1CisrKyBjbGllbnRzL2xjZHByb2Mv
dXRpbC5oCVN1biBNYXkgIDcgMTU6MTk6MDYgMjAwNgpAQCAtNDAsNiArNDAsOSBAQAogLyoqIHBy
aW50IGEgcGVyY2VudGFnZSB2YWx1ZSB0byBhIGdpdmVuIHN0cmluZyAqLwogY2hhciAqc3ByaW50
Zl9wZXJjZW50KGNoYXIgKmRzdCwgZG91YmxlIHBlcmNlbnQpOwogCisvKiogY29udmVydHMgdmFs
dWUgaW50byBwb3dlci1vZi14IHJlcHJlc2VudGF0aW9uICovCitjaGFyICpjb252ZXJ0X2RvdWJs
ZShkb3VibGUgKnZhbHVlLCBpbnQgYmFzZSwgZG91YmxlIHJvdW5kbGltaXQpOworCiAjZW5kaWYg
LyogTENEUFJPQ19VVElMX0ggKi8KIAogLyogRU9GICovCi0tLSBjbGllbnRzL2xjZHByb2MvaWZh
Y2UuaC5vcmlnCVN1biBNYXkgIDcgMTU6NTc6MzggMjAwNgorKysgY2xpZW50cy9sY2Rwcm9jL2lm
YWNlLmgJU3VuIE1heSAgNyAxNTo1ODozNyAyMDA2CkBAIC02MSwxMiArNjEsNiBAQAogLyogRnVu
Y3Rpb25zIHByb3RvdGlwZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIHNo
b3cgdXNhZ2Ugb3B0aW9ucyAqLwotc3RhdGljIHZvaWQgdXNhZ2UgKGludCBzdGF0dXMpOwotCi0v
KiBwYXJzZSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyAqLwotc3RhdGljIGludCBkZWNvZGVfc3dp
dGNoZXMgKGludCBhcmdjLCBjaGFyICoqYXJndik7Ci0KIC8qIHJlYWQgaW50ZXJmYWNlIHN0YXRz
IGZyb20gL3Byb2MvbmV0L2RldiAqLwogaW50IGdldF9pZmFjZV9zdGF0cyAoSWZhY2VJbmZvICpp
bnRlcmZhY2UpOwogCkBAIC05MSwxMCArODUsNSBAQAogCiAvKiBhY3R1YWxpemUgd2lkZ2V0cyB2
YWx1ZXMgaW4gdHJhbnNmZXIgc2NyZWVuICovCiB2b2lkIGFjdHVhbGl6ZV90cmFuc2Zlcl9zY3Jl
ZW4gKElmYWNlSW5mbyAqaWZhY2UsIGludCBpbmRleCk7Ci0KLSNpZmRlZiBORVRMQ0RDTElFTlQK
LS8qIGV4aXQgdGhlIHByb2dyYW0gY2xlYW5seSAqLwotdm9pZCBleGl0X3Byb2dyYW0gKGludCB2
YWwpOwotI2VuZGlmIC8vTkVUTENEQ0xJRU5UCiAKICNlbmRpZgo=
--========GMXBoundary324321147010418--