Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Apr 2006 13:39:52 -0700
From:      "David Kirchner" <dpk@dpk.net>
To:        arch@freebsd.org
Subject:   Add some more information in the ktrace(1)/kdump(1) output
Message-ID:  <35c231bf0604191339m598d9b7n6681421403d5d4e1@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
------=_Part_14898_9999084.1145479192476
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Please Cc: me on replies as I am not a member of this list.

I'm working with Alexander Leidinger <netchild@freebsd.org> on the
ktrace project mentioned on the ideas page. I've attached a patch,
made against 6.1-RC (and should work against -CURRENT). The patch
modifies kdump output to use strings instead of numbers for every(I
believe) relevant syscall.

For example, the output before:

 32229 telnet   CALL  mmap(0,0x8000,0x3,0x1002,0xffffffff,0,0,0)
 32229 telnet   CALL  open(0x2807bc28,0,0x1b6)
 32229 telnet   CALL  socket(0x2,0x2,0)

is now:

 32229 telnet   CALL=20
mmap(0,0x8000,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,0xffffffff,0,0,0)
 32229 telnet   CALL  open(0x2807bc28,O_RDONLY,<unused>0x1b6)
 32229 telnet   CALL  socket(PF_INET,SOCK_DGRAM,0)

I'd appreciate any feedback you may have. This is just one half of the
project; the other half will involve updating the kernel to include
more data in the dump output. I'm thinking, specifically, adding
KTR_STAT for stat() results and KTR_SOCKADDR for connect(), bind()
arguments, and accept() results.

------=_Part_14898_9999084.1145479192476
Content-Type: text/x-patch; name="kdump.20060419.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="kdump.20060419.patch"
X-Attachment-Id: f_em84qbwt

ZGlmZiAtdXJOIGtkdW1wLm9yaWcvTWFrZWZpbGUga2R1bXAvTWFrZWZpbGUKLS0tIGtkdW1wLm9y
aWcvTWFrZWZpbGUJVHVlIEp1bCAyMyAwMjoxNTo0NSAyMDAyCisrKyBrZHVtcC9NYWtlZmlsZQlU
dWUgQXByIDE4IDE0OjE1OjI5IDIwMDYKQEAgLTQsMTIgKzQsMTUgQEAKIC5QQVRIOiAkey5DVVJE
SVJ9Ly4uL2t0cmFjZQogCiBQUk9HPQkJa2R1bXAKLVNSQ1M9CQlrZHVtcC5jIGlvY3RsLmMgc3Vi
ci5jCi1DRkxBR1MrPQktSSR7LkNVUkRJUn0vLi4va3RyYWNlIC1JJHsuQ1VSRElSfS8uLi8uLgor
U1JDUz0JCWtkdW1wLmMgaW9jdGwuYyBrZHVtcF9zdWJyLmMgc3Vici5jCitDRkxBR1MrPQktSSR7
LkNVUkRJUn0vLi4va3RyYWNlIC1JJHsuQ1VSRElSfSAtSSR7LkNVUkRJUn0vLi4vLi4KIAotQ0xF
QU5GSUxFUz0JaW9jdGwuYworQ0xFQU5GSUxFUz0JaW9jdGwuYyBrZHVtcF9zdWJyLmMKIAogaW9j
dGwuYzogbWtpb2N0bHMKIAlzaCAkey5DVVJESVJ9L21raW9jdGxzICR7REVTVERJUn0vdXNyL2lu
Y2x1ZGUgPiAkey5UQVJHRVR9CisKK2tkdW1wX3N1YnIuYzogbWtzdWJyCisJc2ggJHsuQ1VSRElS
fS9ta3N1YnIgJHtERVNURElSfS91c3IvaW5jbHVkZSA+ICR7LlRBUkdFVH0KIAogLmluY2x1ZGUg
PGJzZC5wcm9nLm1rPgpkaWZmIC11ck4ga2R1bXAub3JpZy9rZHVtcC5jIGtkdW1wL2tkdW1wLmMK
LS0tIGtkdW1wLm9yaWcva2R1bXAuYwlNb24gRmViIDEzIDE5OjI4OjMxIDIwMDYKKysrIGtkdW1w
L2tkdW1wLmMJVHVlIEFwciAxOCAxNDowNjoyNiAyMDA2CkBAIC02Niw2ICs2Niw3IEBACiAjaW5j
bHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8dmlzLmg+CiAjaW5jbHVkZSAia3RyYWNlLmgiCisj
aW5jbHVkZSAia2R1bXBfc3Vici5oIgogCiBpbnQgZnJlYWRfdGFpbCh2b2lkICosIGludCwgaW50
KTsKIHZvaWQgZHVtcGhlYWRlcihzdHJ1Y3Qga3RyX2hlYWRlciAqKTsKQEAgLTMyMCwxNCArMzIx
LDIwIEBACiAJaWYgKG5hcmcpIHsKIAkJY2hhciBjID0gJygnOwogCQlpZiAoZmFuY3kpIHsKKwor
I2RlZmluZSBwcmludF9udW1iZXIoaSxuLGMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgXAor
CWlmIChkZWNpbWFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSh2b2lk
KXByaW50ZigiJWMlbGQiLCBjLCAobG9uZykqaSk7ICAgXAorCWVsc2UgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSh2b2lkKXByaW50ZigiJWMlI2x4IiwgYywg
KGxvbmcpKmkpOyAgXAorCWkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisJbi0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KwljID0gJywnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hp
bGUgKDApOworCiAJCQlpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfaW9jdGwpIHsKIAkJCQljb25z
dCBjaGFyICpjcDsKLQkJCQlpZiAoZGVjaW1hbCkKLQkJCQkJKHZvaWQpcHJpbnRmKCIoJWxkIiwg
KGxvbmcpKmlwKTsKLQkJCQllbHNlCi0JCQkJCSh2b2lkKXByaW50ZigiKCUjbHgiLCAobG9uZykq
aXApOwotCQkJCWlwKys7Ci0JCQkJbmFyZy0tOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMp
OwogCQkJCWlmICgoY3AgPSBpb2N0bG5hbWUoKmlwKSkgIT0gTlVMTCkKIAkJCQkJKHZvaWQpcHJp
bnRmKCIsJXMiLCBjcCk7CiAJCQkJZWxzZSB7CkBAIC0zNzIsMTYgKzM3OSwzODQgQEAKIAkJCQlj
ID0gJywnOwogCQkJCWlwKys7CiAJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9j
b2RlID09IFNZU19hY2Nlc3MgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09IFNZU19lYWNjZXNz
KSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcp
OworCQkJCWFjY2Vzc21vZGVuYW1lICgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07
CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX29wZW4pIHsKKwkJCQlpbnQJZmxh
Z3M7CisJCQkJaW50CW1vZGU7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJZmxh
Z3MgPSAqaXA7CisJCQkJbW9kZSA9ICorK2lwOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJ
CQlmbGFnc2FuZG1vZGVuYW1lIChmbGFncywgbW9kZSwgZGVjaW1hbCk7CisJCQkJaXArKzsKKwkJ
CQluYXJnLT0yOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU193YWl0NCkgewor
CQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMp
OworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQl3YWl0NG9wdG5hbWUgKChpbnQpKmlwKTsK
KwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBT
WVNfY2htb2QgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09IFNZU19mY2htb2QgfHwKKwkJCQkg
ICBrdHItPmt0cl9jb2RlID09IFNZU19sY2htb2QpIHsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFy
ZyxjKTsKKwkJCQkodm9pZClwdXRjaGFyKCcsJyk7CisJCQkJbW9kZW5hbWUgKChpbnQpKmlwKTsK
KwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBT
WVNfbWtub2QpIHsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQkodm9pZClwdXRj
aGFyKCcsJyk7CisJCQkJbW9kZW5hbWUgKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmct
LTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfZ2V0ZnNzdGF0KSB7CisJCQkJ
cHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJ
CQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCWdldGZzc3RhdGZsYWdzbmFtZSAoKGludCkqaXAp
OworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09
IFNZU19tb3VudCkgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251
bWJlcihpcCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltb3VudGZsYWdz
bmFtZSAoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChr
dHItPmt0cl9jb2RlID09IFNZU191bm1vdW50KSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcs
Yyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCW1vdW50ZmxhZ3NuYW1lICgoaW50KSpp
cCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUg
PT0gU1lTX3JlY3Ztc2cgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09IFNZU19zZW5kbXNnKSB7
CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcs
Yyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCXNlbmRyZWN2ZmxhZ3NuYW1lICgoaW50
KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2Nv
ZGUgPT0gU1lTX3JlY3Zmcm9tIHx8CisJCQkJICAga3RyLT5rdHJfY29kZSA9PSBTWVNfc2VuZHRv
KSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5h
cmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hhcign
LCcpOworCQkJCXNlbmRyZWN2ZmxhZ3NuYW1lICgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQlu
YXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX2NoZmxhZ3MgfHwKKwkJ
CQkgICBrdHItPmt0cl9jb2RlID09IFNZU19mY2hmbGFncyB8fAorCQkJCSAgIGt0ci0+a3RyX2Nv
ZGUgPT0gU1lTX2xjaGZsYWdzKSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJ
KHZvaWQpcHV0Y2hhcignLCcpOworCQkJCW1vZGVuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOwor
CQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfa2lsbCkgewor
CQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJ
CQlzaWduYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBp
ZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfcmVib290KSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcp
OworCQkJCXJlYm9vdG9wdG5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOwor
CQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU191bWFzaykgeworCQkJCSh2b2lkKXB1
dGNoYXIoJygnKTsKKwkJCQltb2RlbmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJn
LS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX21zeW5jKSB7CisJCQkJcHJp
bnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJ
KHZvaWQpcHV0Y2hhcignLCcpOworCQkJCW1zeW5jZmxhZ3NuYW1lKChpbnQpKmlwKTsKKwkJCQlp
cCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfbW1h
cCkgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxu
YXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltbWFwcHJvdG5hbWUgKChpbnQp
KmlwKTsKKwkJCQkodm9pZClwdXRjaGFyKCcsJyk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJ
CQkJbW1hcGZsYWdzbmFtZSAoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJ
fSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19tcHJvdGVjdCkgeworCQkJCXByaW50X251
bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCSh2b2lk
KXB1dGNoYXIoJywnKTsKKwkJCQltbWFwcHJvdG5hbWUgKChpbnQpKmlwKTsKKwkJCQlpcCsrOwor
CQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfbWFkdmlzZSkg
eworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJn
LGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltYWR2aXNlYmVoYXZuYW1lKChpbnQp
KmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29k
ZSA9PSBTWVNfc2V0cHJpb3JpdHkpIHsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJ
CQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQkodm9pZClwdXRjaGFyKCcsJyk7CisJCQkJ
cHJpb25hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlm
IChrdHItPmt0cl9jb2RlID09IFNZU19mY250bCkgeworCQkJCWludCBjbWQ7CisJCQkJaW50IGFy
ZzsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQljbWQgPSAqaXA7CisJCQkJYXJn
ID0gKisraXA7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCWZjbnRsY21kbmFtZShjbWQs
IGFyZywgZGVjaW1hbCk7CisJCQkJaXArKzsKKwkJCQluYXJnLT0yOworCQkJfSBlbHNlIGlmIChr
dHItPmt0cl9jb2RlID09IFNZU19zb2NrZXQpIHsKKwkJCQkodm9pZClwdXRjaGFyKCcoJyk7CisJ
CQkJc29ja2RvbWFpbm5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJ
CSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlzb2NrdHlwZW5hbWUoKGludCkqaXApOworCQkJCWlw
Kys7CisJCQkJbmFyZy0tOworCQkJCWMgPSAnLCc7CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2Nv
ZGUgPT0gU1lTX3NldHNvY2tvcHQgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09IFNZU19nZXRz
b2Nrb3B0KSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hh
cignLCcpOworCQkJCXNvY2tvcHRsZXZlbG5hbWUoKGludCkqaXAsIGRlY2ltYWwpOworCQkJCWlw
Kys7CisJCQkJbmFyZy0tOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlzb2Nrb3B0bmFt
ZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+
a3RyX2NvZGUgPT0gU1lTX2xzZWVrKSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJ
CQkJLyogSGlkZGVuICdwYWQnIGFyZ3VtZW50LCBub3QgaW4gbHNlZWsoMikgKi8KKwkJCQlwcmlu
dF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQko
dm9pZClwdXRjaGFyKCcsJyk7CisJCQkJd2hlbmNlbmFtZSAoKGludCkqaXApOworCQkJCWlwKys7
CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19mbG9jaykg
eworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsK
KwkJCQlmbG9ja25hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBl
bHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19ta2ZpZm8gfHwKKwkJCQkgICBrdHItPmt0cl9j
b2RlID09IFNZU19ta2RpcikgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCSh2
b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltb2RlbmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJ
CQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3NodXRkb3duKSB7
CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOwor
CQkJCXNodXRkb3duaG93bmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJ
CQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3NvY2tldHBhaXIpIHsKKwkJCQkodm9p
ZClwdXRjaGFyKCcoJyk7CisJCQkJc29ja2RvbWFpbm5hbWUoKGludCkqaXApOworCQkJCWlwKys7
CisJCQkJbmFyZy0tOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlzb2NrdHlwZW5hbWUo
KGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJCWMgPSAnLCc7CisJCQl9IGVs
c2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX2dldHJsaW1pdCB8fAorCQkJCSAgIGt0ci0+a3Ry
X2NvZGUgPT0gU1lTX3NldHJsaW1pdCkgeworCQkJCSh2b2lkKXB1dGNoYXIoJygnKTsKKwkJCQly
bGltaXRuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCQljID0gJywn
OworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19xdW90YWN0bCkgeworCQkJCXBy
aW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXF1b3RhY3RsbmFtZSgoaW50KSppcCk7CisJCQkJ
aXArKzsKKwkJCQluYXJnLS07CisJCQkJYyA9ICcsJzsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJf
Y29kZSA9PSBTWVNfbmZzc3ZjKSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcpOworCQkJCW5mc3N2
Y25hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJCWMgPSAnLCc7CisJ
CQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3J0cHJpbykgeworCQkJCSh2b2lkKXB1
dGNoYXIoJygnKTsKKwkJCQlydHByaW9uYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5h
cmctLTsKKwkJCQljID0gJywnOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19f
X3NlbWN0bCkgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJl
cihpcCxuYXJnLGMpOworCQkJCXNlbWN0bG5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJ
bmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19zZW1nZXQpIHsKKwkJ
CQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsK
KwkJCQlzZW1nZXRuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0g
ZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfbXNnY3RsKSB7CisJCQkJcHJpbnRfbnVtYmVy
KGlwLG5hcmcsYyk7CisJCQkJc2htY3RsbmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQlu
YXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3NobWF0KSB7CisJCQkJ
cHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJ
CQkJc2htYXRuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxz
ZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfc2htY3RsKSB7CisJCQkJcHJpbnRfbnVtYmVyKGlw
LG5hcmcsYyk7CisJCQkJc2htY3RsbmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJn
LS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX21pbmhlcml0KSB7CisJCQkJ
cHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJ
CQkJbWluaGVyaXRuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0g
ZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfcmZvcmspIHsKKwkJCQkodm9pZClwdXRjaGFy
KCcoJyk7CisJCQkJcmZvcmtuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsK
KwkJCQljID0gJywnOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19saW9fbGlz
dGlvKSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcpOworCQkJCWxpb19saXN0aW9uYW1lKChpbnQp
KmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCQljID0gJywnOworCQkJfSBlbHNlIGlm
IChrdHItPmt0cl9jb2RlID09IFNZU19tbG9ja2FsbCkgeworCQkJCSh2b2lkKXB1dGNoYXIoJygn
KTsKKwkJCQltbG9ja2FsbG5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOwor
CQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19zY2hlZF9zZXRzY2hlZHVsZXIpIHsK
KwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQlzY2hlZHBvbGljeW5hbWUoKGludCkq
aXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2Rl
ID09IFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IHx8CisJCQkJICAga3RyLT5rdHJfY29kZSA9
PSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikgeworCQkJCSh2b2lkKXB1dGNoYXIoJygnKTsK
KwkJCQlzY2hlZHBvbGljeW5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOwor
CQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19zZW5kZmlsZSkgeworCQkJCXByaW50
X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXBy
aW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJ
CXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOwor
CQkJCXNlbmRmaWxlZmxhZ3NuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsK
KwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfa2xkc3ltKSB7CisJCQkJcHJpbnRf
bnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJa2xkc3ltY21kbmFtZSgoaW50KSppcCk7CisJCQkJaXAr
KzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3NpZ3By
b2NtYXNrKSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcpOworCQkJCXNpZ3Byb2NtYXNraG93bmFt
ZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQkJYyA9ICcsJzsKKwkJCX0g
ZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfX19hY2xfZ2V0X2ZpbGUgfHwKKwkJCQkgICBr
dHItPmt0cl9jb2RlID09IFNZU19fX2FjbF9zZXRfZmlsZSB8fAorCQkJCSAgIGt0ci0+a3RyX2Nv
ZGUgPT0gU1lTX19fYWNsX2dldF9mZCB8fAorCQkJCSAgIGt0ci0+a3RyX2NvZGUgPT0gU1lTX19f
YWNsX3NldF9mZCB8fAorCQkJCSAgIGt0ci0+a3RyX2NvZGUgPT0gU1lTX19fYWNsX2RlbGV0ZV9m
aWxlIHx8CisJCQkJICAga3RyLT5rdHJfY29kZSA9PSBTWVNfX19hY2xfZGVsZXRlX2ZkIHx8CisJ
CQkJICAga3RyLT5rdHJfY29kZSA9PSBTWVNfX19hY2xfYWNsY2hlY2tfZmlsZSB8fAorCQkJCSAg
IGt0ci0+a3RyX2NvZGUgPT0gU1lTX19fYWNsX2FjbGNoZWNrX2ZkIHx8CisJCQkJICAga3RyLT5r
dHJfY29kZSA9PSBTWVNfX19hY2xfZ2V0X2xpbmsgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09
IFNZU19fX2FjbF9zZXRfbGluayB8fAorCQkJCSAgIGt0ci0+a3RyX2NvZGUgPT0gU1lTX19fYWNs
X2RlbGV0ZV9saW5rIHx8CisJCQkJICAga3RyLT5rdHJfY29kZSA9PSBTWVNfX19hY2xfYWNsY2hl
Y2tfbGluaykgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCWFjbHR5cGVuYW1l
KChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5r
dHJfY29kZSA9PSBTWVNfc2lnYWN0aW9uKSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcpOworCQkJ
CXNpZ25hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJCWMgPSAnLCc7
CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX2V4dGF0dHJjdGwpIHsKKwkJCQlw
cmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQlleHRhdHRyY3RsbmFtZSgoaW50KSppcCk7CisJ
CQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lT
X25tb3VudCkgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJl
cihpcCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltb3VudGZsYWdzbmFt
ZSAoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHIt
Pmt0cl9jb2RlID09IFNZU19rc2VfdGhyX2ludGVycnVwdCkgeworCQkJCXByaW50X251bWJlcihp
cCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlrc2V0aHJjbWRuYW1lICgo
aW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3Ry
X2NvZGUgPT0gU1lTX3Rocl9jcmVhdGUpIHsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsK
KwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQkodm9pZClwdXRjaGFyKCcsJyk7CisJ
CQkJdGhyY3JlYXRlZmxhZ3NuYW1lICgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07
CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3Rocl9raWxsKSB7CisJCQkJcHJp
bnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCXNpZ25h
bWUgKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3Ry
LT5rdHJfY29kZSA9PSBTWVNfa2xkdW5sb2FkZikgeworCQkJCXByaW50X251bWJlcihpcCxuYXJn
LGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlrbGR1bmxvYWRmZmxhZ3NuYW1lICgo
aW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CiAJCQl9CiAJCX0KIAkJd2hpbGUgKG5h
cmcpIHsKLQkJCWlmIChkZWNpbWFsKQotCQkJCSh2b2lkKXByaW50ZigiJWMlbGQiLCBjLCAobG9u
ZykqaXApOwotCQkJZWxzZQotCQkJCSh2b2lkKXByaW50ZigiJWMlI2x4IiwgYywgKGxvbmcpKmlw
KTsKLQkJCWMgPSAnLCc7Ci0JCQlpcCsrOwotCQkJbmFyZy0tOworCQkJcHJpbnRfbnVtYmVyKGlw
LG5hcmcsYyk7CiAJCX0KIAkJKHZvaWQpcHV0Y2hhcignKScpOwogCX0KZGlmZiAtdXJOIGtkdW1w
Lm9yaWcva2R1bXBfc3Vici5oIGtkdW1wL2tkdW1wX3N1YnIuaAotLS0ga2R1bXAub3JpZy9rZHVt
cF9zdWJyLmgJV2VkIERlYyAzMSAxNjowMDowMCAxOTY5CisrKyBrZHVtcC9rZHVtcF9zdWJyLmgJ
VHVlIEFwciAxOCAxNDowMjoxNSAyMDA2CkBAIC0wLDAgKzEsNDYgQEAKKy8qICRGcmVlQlNEJCAq
LworCit2b2lkIHNpZ25hbWUgKGludCk7Cit2b2lkIHNlbWN0bG5hbWUgKGludCk7Cit2b2lkIHNo
bWN0bG5hbWUgKGludCk7Cit2b2lkIHNlbWdldG5hbWUgKGludCk7Cit2b2lkIGZjbnRsY21kbmFt
ZSAoaW50LCBpbnQsIGludCk7Cit2b2lkIHJ0cHJpb25hbWUgKGludCk7Cit2b2lkIG1vZGVuYW1l
IChpbnQpOwordm9pZCBmbGFnc25hbWUgKGludCk7Cit2b2lkIGZsYWdzYW5kbW9kZW5hbWUgKGlu
dCwgaW50LCBpbnQpOwordm9pZCBhY2Nlc3Ntb2RlbmFtZSAoaW50KTsKK3ZvaWQgbW1hcHByb3Ru
YW1lIChpbnQpOwordm9pZCBtbWFwZmxhZ3NuYW1lIChpbnQpOwordm9pZCB3YWl0NG9wdG5hbWUg
KGludCk7Cit2b2lkIHNlbmRyZWN2ZmxhZ3NuYW1lIChpbnQpOwordm9pZCBnZXRmc3N0YXRmbGFn
c25hbWUgKGludCk7Cit2b2lkIG1vdW50ZmxhZ3NuYW1lIChpbnQpOwordm9pZCByZWJvb3RvcHRu
YW1lIChpbnQpOwordm9pZCBmbG9ja25hbWUgKGludCk7Cit2b2lkIHNvY2tvcHRuYW1lIChpbnQp
Owordm9pZCBzb2Nrb3B0bGV2ZWxuYW1lIChpbnQsIGludCk7Cit2b2lkIHNvY2tkb21haW5uYW1l
IChpbnQpOwordm9pZCBzb2NrdHlwZW5hbWUgKGludCk7Cit2b2lkIHRocmNyZWF0ZWZsYWdzbmFt
ZSAoaW50KTsKK3ZvaWQgbWxvY2thbGxuYW1lIChpbnQpOwordm9pZCBzaG1hdG5hbWUgKGludCk7
Cit2b2lkIHJmb3JrbmFtZSAoaW50KTsKK3ZvaWQgbmZzc3ZjbmFtZSAoaW50KTsKK3ZvaWQgd2hl
bmNlbmFtZSAoaW50KTsKK3ZvaWQgcmxpbWl0bmFtZSAoaW50KTsKK3ZvaWQgc2h1dGRvd25ob3du
YW1lIChpbnQpOwordm9pZCBwcmlvbmFtZSAoaW50KTsKK3ZvaWQgbWFkdmlzZWJlaGF2bmFtZSAo
aW50KTsKK3ZvaWQgbXN5bmNmbGFnc25hbWUgKGludCk7Cit2b2lkIHNjaGVkcG9saWN5bmFtZSAo
aW50KTsKK3ZvaWQga2xkdW5sb2FkZmZsYWdzbmFtZSAoaW50KTsKK3ZvaWQga3NldGhyY21kbmFt
ZSAoaW50KTsKK3ZvaWQgZXh0YXR0cmN0bG5hbWUgKGludCk7Cit2b2lkIGtsZHN5bWNtZG5hbWUg
KGludCk7Cit2b2lkIHNlbmRmaWxlZmxhZ3NuYW1lIChpbnQpOwordm9pZCBhY2x0eXBlbmFtZSAo
aW50KTsKK3ZvaWQgc2lncHJvY21hc2tob3duYW1lIChpbnQpOwordm9pZCBsaW9fbGlzdGlvbmFt
ZSAoaW50KTsKK3ZvaWQgbWluaGVyaXRuYW1lIChpbnQpOwordm9pZCBxdW90YWN0bG5hbWUgKGlu
dCk7CmRpZmYgLXVyTiBrZHVtcC5vcmlnL21rc3ViciBrZHVtcC9ta3N1YnIKLS0tIGtkdW1wLm9y
aWcvbWtzdWJyCVdlZCBEZWMgMzEgMTY6MDA6MDAgMTk2OQorKysga2R1bXAvbWtzdWJyCVR1ZSBB
cHIgMTggMTQ6MTM6NTEgMjAwNgpAQCAtMCwwICsxLDQwNyBAQAorc2V0IC1lCisKKyMgR2VuZXJh
dGVzIGtkdW1wX3N1YnIuYworIyBta2lvY3RscyBpcyBhIHNwZWNpYWwtcHVycG9zZSBzY3JpcHQs
IGFuZCB3b3JrcyBmaW5lIGFzIGl0IGlzCisjIG5vdywgc28gaXQgcmVtYWlucyBpbmRlcGVuZGVu
dC4gVGhlIGlkZWEgYmVoaW5kIGhvdyBpdCBnZW5lcmF0ZXMKKyMgaXRzIGxpc3Qgd2FzIGhlYXZp
bHkgYm9ycm93ZWQgaGVyZS4KKyMKKyMgU29tZSBmdW5jdGlvbnMgaGVyZSBhcmUgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQuIFRoaXMgY2FuIG1lYW4KKyMgdGhlIHVzZXIgd2lsbCBzZWUgdW51c3Vh
bCBrZHVtcCBvdXRwdXQgb3IgZXJyb3JzIHdoaWxlIGJ1aWxkaW5nCisjIGlmIHRoZSB1bmRlcmx5
aW5nIC5oIGZpbGVzIGFyZSBjaGFuZ2VkIHNpZ25pZmljYW50bHkuCisjCisjIEtleToKKyMgQVVU
TzogQ29tcGxldGVseSBhdXRvLWdlbmVyYXRlZCB3aXRoIGVpdGhlciB0aGUgIm9yIiBvciB0aGUg
InN3aXRjaCIKKyMgbWV0aG9kLgorIyBBVVRPIC0gU3BlY2lhbDogR2VuZXJhdGVkIGF1dG9tYXRp
Y2FsbHksIGJ1dCB3aXRoIHNvbWUgZXh0cmEgY29tbWFuZHMKKyMgdGhhdCB0aGUgYXV0b18qX3R5
cGUoKSBmdW5jdGlvbnMgYXJlIGluYXBwcm9wcmlhdGUgZm9yLgorIyBNQU5VQUw6IE1hbnVhbGx5
IGVudGVyZWQgYW5kIG11c3QgdGhlcmVmb3JlIGJlIG1hbnVhbGx5IHVwZGF0ZWQuCisKKyMgJEZy
ZWVCU0QkCisKK0xDX0FMTD1DOyBleHBvcnQgTENfQUxMCisKK2lmIFsgLXogIiQxIiBdCit0aGVu
CisJZWNobyAidXNhZ2U6IHNoICQwIGluY2x1ZGUtZGlyIgorCWV4aXQgMQorZmkKK2luY2x1ZGVf
ZGlyPSQxCisKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYSBDIGZ1bmN0aW9uIHRoYXQg
d2lsbCBwcmludCBvdXQgdGhlCisjIG51bWVyaWMgaW5wdXQgYXMgYSBwaXBlLWRlbGltaXRlZCBz
dHJpbmcgb2YgdGhlIGFwcHJvcHJpYXRlCisjICNkZWZpbmUga2V5cy4gZXg6CisjIFNfSVJVU1J8
U19JV1VTUnxTX0lSR1JQfFNfSVJPVEgKKyMgVGhlIFhPUiBpcyBuZWNlc3NhcnkgdG8gcHJldmVu
dCBpbmNsdWRpbmcgdGhlICIwIi12YWx1ZSBpbiBldmVyeQorIyBsaW5lLgorIworYXV0b19vcl90
eXBlICgpIHsKKwlsb2NhbCBuYW1lIGdyZXAgZmlsZQorCW5hbWU9JDEKKwlncmVwPSQyCisJZmls
ZT0kMworCisJY2F0IDw8X0VPRl8KKy8qIEFVVE8gKi8KK3ZvaWQKKyRuYW1lIChpbnQgYXJnKQor
eworCWludAlvciA9IDA7CitfRU9GXworCWVncmVwICJeI1tbOnNwYWNlOl1dKmRlZmluZVtbOnNw
YWNlOl1dKyIke2dyZXB9IltbOnNwYWNlOl1dKiIgXAorCQkkaW5jbHVkZV9kaXIvJGZpbGUgfCBc
CisJYXdrICd7IGZvciAoaSA9IDE7IGkgPD0gTkY7IGkrKykgXAorCQlpZiAoJGkgfiAvZGVmaW5l
LykgXAorCQkJYnJlYWs7IFwKKwkJKytpOyBcCisJCXByaW50ZiAiXHRpZighKChhcmc+MCleKCgl
cyk+MCkpKVxuXHRcdGlmX3ByaW50X29yKGFyZywgJXMsIG9yKTtcbiIsICRpLCAkaSB9JworY2F0
IDw8X0VPRl8KKwlpZiAob3IgPT0gMCkKKwkJKHZvaWQpcHJpbnRmKCI8aW52YWxpZD4lbGQiLCAo
bG9uZylhcmcpOworfQorCitfRU9GXworfQorCisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVz
IGEgQyBmdW5jdGlvbiB1c2VkIHdoZW4gdGhlIGFyZ3VtZW50CisjIG1hcHMgdG8gYSBzaW5nbGUs
IHNwZWNpZmljICNkZWZpbml0aW9uCisjCithdXRvX3N3aXRjaF90eXBlICgpIHsKKwlsb2NhbCBu
YW1lIGdyZXAgZmlsZQorCW5hbWU9JDEKKwlncmVwPSQyCisJZmlsZT0kMworCisJY2F0IDw8X0VP
Rl8KKy8qIEFVVE8gKi8KK3ZvaWQKKyRuYW1lIChpbnQgYXJnKQoreworCXN3aXRjaCAoYXJnKSB7
CitfRU9GXworCWVncmVwICJeI1tbOnNwYWNlOl1dKmRlZmluZVtbOnNwYWNlOl1dKyIke2dyZXB9
IltbOnNwYWNlOl1dKiIgXAorCQkkaW5jbHVkZV9kaXIvJGZpbGUgfCBcCisJYXdrICd7IGZvciAo
aSA9IDE7IGkgPD0gTkY7IGkrKykgXAorCQlpZiAoJGkgfiAvZGVmaW5lLykgXAorCQkJYnJlYWs7
IFwKKwkJKytpOyBcCisJCXByaW50ZiAiXHRjYXNlICVzOlxuXHRcdCh2b2lkKXByaW50ZihcIiVz
XCIpO1xuXHRcdGJyZWFrO1xuIiwgJGksICRpIH0nCitjYXQgPDxfRU9GXworCWRlZmF1bHQ6IC8q
IFNob3VsZCBub3QgcmVhY2ggKi8KKwkJKHZvaWQpcHJpbnRmKCI8aW52YWxpZD0lbGQ+IiwgKGxv
bmcpYXJnKTsKKwl9Cit9CisKK19FT0ZfCit9CisKKyMgQyBzdGFydAorCitjYXQgPDxfRU9GXwor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4K
KyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2RlZmluZSBfS0VSTkVMCisjaW5jbHVkZSA8c3lzL3Nv
Y2tldC5oPgorI3VuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRl
IDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMv
cmVib290Lmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvbGlua2VyLmg+Cisj
ZGVmaW5lIF9LRVJORUwKKyNpbmNsdWRlIDxzeXMvdGhyLmg+CisjdW5kZWYgX0tFUk5FTAorI2lu
Y2x1ZGUgPHN5cy9rc2UuaD4KKyNpbmNsdWRlIDxzeXMvZXh0YXR0ci5oPgorI2luY2x1ZGUgPHN5
cy9hY2wuaD4KKyNpbmNsdWRlIDxhaW8uaD4KKyNpbmNsdWRlIDxzeXMvc2VtLmg+CisjaW5jbHVk
ZSA8c3lzL2lwYy5oPgorI2luY2x1ZGUgPHN5cy9ydHByaW8uaD4KKyNpbmNsdWRlIDxzeXMvc2ht
Lmg+CisjaW5jbHVkZSA8bmZzc2VydmVyL25mcy5oPgorI2luY2x1ZGUgPHVmcy91ZnMvcXVvdGEu
aD4KKworI2luY2x1ZGUgImtkdW1wX3N1YnIuaCIKKworLyoKKyAqIFRoZXNlIGFyZSBzaW1wbGUg
c3VwcG9ydCBtYWNyb3MuIHByaW50X29yIHV0aWxpemVzIGEgdmFyaWFibGUKKyAqIGRlZmluZWQg
aW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24gdG8gdHJhY2sgd2hldGhlciBvciBub3QgaXQgc2hvdWxk
CisgKiBwcmludCBhIGxvZ2ljYWwtT1IgY2hhcmFjdGVyICgnfCcpIGJlZm9yZSBhIHN0cmluZy4g
aWZfcHJpbnRfb3IKKyAqIHNpbXBseSBoYW5kbGVzIHRoZSBuZWNlc3NhcnkgImlmIiBzdGF0ZW1l
bnQgdXNlZCBpbiBtYW55IGxpbmVzCisgKiBvZiB0aGlzIGZpbGUuCisgKi8KKyNkZWZpbmUgcHJp
bnRfb3Ioc3RyLG9yZmxhZykgZG8geyAgICAgICAgICAgICAgICAgIFxcCisJaWYgKG9yZmxhZykg
cHV0Y2hhcignfCcpOyBlbHNlIG9yZmxhZyA9IDE7IFxcCisJcHJpbnRmIChzdHIpOyB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxcCisJd2hpbGUgKDApCisjZGVmaW5lIGlmX3ByaW50X29y
KGksZmxhZyxvcmZsYWcpIGRvIHsgICAgICAgICAgICBcXAorCWlmICgoaSAmIGZsYWcpID09IGZs
YWcpICAgICAgICAgICAgICAgICAgICBcXAorCXByaW50X29yKCNmbGFnLG9yZmxhZyk7IH0gICAg
ICAgICAgICAgICAgICBcXAorCXdoaWxlICgwKQorCisvKiBNQU5VQUwgKi8KK2V4dGVybiBjaGFy
ICpzaWduYW1lc1tdOyAvKiBmcm9tIGtkdW1wLmMgKi8KK3ZvaWQKK3NpZ25hbWUgKGludCBzaWcp
Cit7CisJKHZvaWQpcHJpbnRmKCJTSUclcyIsc2lnbmFtZXNbc2lnXSk7Cit9CisKKy8qIE1BTlVB
TCAqLwordm9pZAorc2VtY3RsbmFtZSAoaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNh
c2UgR0VUTkNOVDoKKwkJKHZvaWQpcHJpbnRmKCJHRVROQ05UIik7CisJCWJyZWFrOworCWNhc2Ug
R0VUUElEOgorCQkodm9pZClwcmludGYoIkdFVFBJRCIpOworCQlicmVhazsKKwljYXNlIEdFVFZB
TDoKKwkJKHZvaWQpcHJpbnRmKCJHRVRWQUwiKTsKKwkJYnJlYWs7CisJY2FzZSBHRVRBTEw6CisJ
CSh2b2lkKXByaW50ZigiR0VUQUxMIik7CisJCWJyZWFrOworCWNhc2UgR0VUWkNOVDoKKwkJKHZv
aWQpcHJpbnRmKCJHRVRaQ05UIik7CisJCWJyZWFrOworCWNhc2UgU0VUVkFMOgorCQkodm9pZClw
cmludGYoIlNFVFZBTCIpOworCQlicmVhazsKKwljYXNlIFNFVEFMTDoKKwkJKHZvaWQpcHJpbnRm
KCJTRVRBTEwiKTsKKwkJYnJlYWs7CisJY2FzZSBJUENfUk1JRDoKKwkJKHZvaWQpcHJpbnRmKCJJ
UENfUk1JRCIpOworCQlicmVhazsKKwljYXNlIElQQ19TRVQ6CisJCSh2b2lkKXByaW50ZigiSVBD
X1NFVCIpOworCQlicmVhazsKKwljYXNlIElQQ19TVEFUOgorCQkodm9pZClwcmludGYoIklQQ19T
VEFUIik7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIFNob3VsZCBub3QgcmVhY2ggKi8KKwkJKHZv
aWQpcHJpbnRmKCI8aW52YWxpZD0lbGQ+IiwgKGxvbmcpY21kKTsKKwl9Cit9CisKKy8qIE1BTlVB
TCAqLwordm9pZAorc2htY3RsbmFtZSAoaW50IGNtZCkgeworCXN3aXRjaCAoY21kKSB7CisJY2Fz
ZSBJUENfUk1JRDoKKwkJKHZvaWQpcHJpbnRmKCJJUENfUk1JRCIpOworCQlicmVhazsKKwljYXNl
IElQQ19TRVQ6CisJCSh2b2lkKXByaW50ZigiSVBDX1NFVCIpOworCQlicmVhazsKKwljYXNlIElQ
Q19TVEFUOgorCQkodm9pZClwcmludGYoIklQQ19TVEFUIik7CisJCWJyZWFrOworCWRlZmF1bHQ6
IC8qIFNob3VsZCBub3QgcmVhY2ggKi8KKwkJKHZvaWQpcHJpbnRmKCI8aW52YWxpZD0lbGQ+Iiwg
KGxvbmcpY21kKTsKKwl9Cit9CisKKy8qIE1BTlVBTCAqLwordm9pZAorc2VtZ2V0bmFtZSAoaW50
IGZsYWcpIHsKKwlpbnQJb3IgPSAwOworCWlmX3ByaW50X29yKGZsYWcsIFNFTV9SLCBvcik7CisJ
aWZfcHJpbnRfb3IoZmxhZywgU0VNX0EsIG9yKTsKKwlpZl9wcmludF9vcihmbGFnLCAoU0VNX1I+
PjMpLCBvcik7CisJaWZfcHJpbnRfb3IoZmxhZywgKFNFTV9BPj4zKSwgb3IpOworCWlmX3ByaW50
X29yKGZsYWcsIChTRU1fUj4+NiksIG9yKTsKKwlpZl9wcmludF9vcihmbGFnLCAoU0VNX0E+PjYp
LCBvcik7Cit9CisKKy8qCisgKiBNQU5VQUwKKyAqCisgKiBPbmx5IHVzZWQgYnkgU1lTX29wZW4u
IFVubGVzcyBPX0NSRUFUIGlzIHNldCBpbiBmbGFncywgdGhlCisgKiBtb2RlIGFyZ3VtZW50IGlz
IHVudXNlZCAoYW5kIG9mdGVuIGJvZ3VzIGFuZCBtaXNsZWFkaW5nKS4KKyAqLwordm9pZAorZmxh
Z3NhbmRtb2RlbmFtZSAoaW50IGZsYWdzLCBpbnQgbW9kZSwgaW50IGRlY2ltYWwpIHsKKwlmbGFn
c25hbWUgKGZsYWdzKTsKKwkodm9pZClwdXRjaGFyKCcsJyk7CisJaWYgKChmbGFncyAmIE9fQ1JF
QVQpID09IE9fQ1JFQVQpIHsKKwkJbW9kZW5hbWUgKG1vZGUpOworCX0gZWxzZSB7CisJCWlmIChk
ZWNpbWFsKSB7CisJCQkodm9pZClwcmludGYoIjx1bnVzZWQ+JWxkIiwgKGxvbmcpbW9kZSk7CisJ
CX0gZWxzZSB7CisJCQkodm9pZClwcmludGYoIjx1bnVzZWQ+JSNseCIsIChsb25nKW1vZGUpOwor
CQl9CisJfQorfQorCisvKgorICogTUFOVUFMCisgKgorICogW2d8c11ldHNvY2tvcHQncyBsZXZl
bCBhcmd1bWVudCBjYW4gZWl0aGVyIGJlIFNPTF9TT0NLRVQgb3IgYSB2YWx1ZQorICogcmVmZXJy
aW5nIHRvIGEgbGluZSBpbiAvZXRjL3Byb3RvY29scyAuIEl0IG1pZ2h0IGJlIGFwcHJvcHJpYXRl
CisgKiB0byB1c2UgZ2V0cHJvdG9lbnQoMykgaGVyZS4KKyAqLwordm9pZAorc29ja29wdGxldmVs
bmFtZSAoaW50IGxldmVsLCBpbnQgZGVjaW1hbCkKK3sKKwlpZiAobGV2ZWwgPT0gU09MX1NPQ0tF
VCkgeworCQkodm9pZClwcmludGYoIlNPTF9TT0NLRVQiKTsKKwl9IGVsc2UgeworCQlpZiAoZGVj
aW1hbCkgeworCQkJKHZvaWQpcHJpbnRmKCIlbGQiLCAobG9uZylsZXZlbCk7CisJCX0gZWxzZSB7
CisJCQkodm9pZClwcmludGYoIiUjbHgiLCAobG9uZylsZXZlbCk7CisJCX0KKwl9Cit9CisKK19F
T0ZfCisKK2F1dG9fb3JfdHlwZSAibW9kZW5hbWUiICJTX1tBLVpdK1tbOnNwYWNlOl1dK1swLTZd
ezd9IiAic3lzL3N0YXQuaCIKK2F1dG9fb3JfdHlwZSAiZmxhZ3NuYW1lIiAiT19bQS1aXStbWzpz
cGFjZTpdXSsweFswLTlBLUZhLWZdKyIgInN5cy9mY250bC5oIgorYXV0b19vcl90eXBlICJhY2Nl
c3Ntb2RlbmFtZSIgIltBLVpdX09LW1s6c3BhY2U6XV0rMD94P1swLTlBLUZhLWZdKyIgInN5cy91
bmlzdGQuaCIKK2F1dG9fb3JfdHlwZSAibW1hcHByb3RuYW1lIiAiUFJPVF9bQS1aXStbWzpzcGFj
ZTpdXSsweFswLTlBLUZhLWZdKyIgInN5cy9tbWFuLmgiCithdXRvX29yX3R5cGUgIm1tYXBmbGFn
c25hbWUiICJNQVBfW0EtWl0rW1s6c3BhY2U6XV0rMHhbMC05QS1GYS1mXSsiICJzeXMvbW1hbi5o
IgorYXV0b19vcl90eXBlICJ3YWl0NG9wdG5hbWUiICJXW0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0r
IiAic3lzL3dhaXQuaCIKK2F1dG9fb3JfdHlwZSAiZ2V0ZnNzdGF0ZmxhZ3NuYW1lIiAiTU5UX1tB
LVpdK1tbOnNwYWNlOl1dK1sxLTldWzAtOV0qIiAic3lzL21vdW50LmgiCithdXRvX29yX3R5cGUg
Im1vdW50ZmxhZ3NuYW1lIiAiTU5UX1tBLVpdK1tbOnNwYWNlOl1dKzB4WzAtOV0rIiAic3lzL21v
dW50LmgiCithdXRvX29yX3R5cGUgInJlYm9vdG9wdG5hbWUiICJSQl9bQS1aXStbWzpzcGFjZTpd
XSsweFswLTldKyIgInN5cy9yZWJvb3QuaCIKK2F1dG9fb3JfdHlwZSAiZmxvY2tuYW1lIiAiTE9D
S19bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInN5cy9mY250bC5oIgorYXV0b19vcl90eXBl
ICJzb2Nrb3B0bmFtZSIgIlNPX1tBLVpdK1tbOnNwYWNlOl1dKzB4WzAtOV0rIiAic3lzL3NvY2tl
dC5oIgorYXV0b19vcl90eXBlICJzb2NrZG9tYWlubmFtZSIgIlBGX1tBLVpdK1tbOnNwYWNlOl1d
KyIgInN5cy9zb2NrZXQuaCIKK2F1dG9fb3JfdHlwZSAic29ja3R5cGVuYW1lIiAiU09DS19bQS1a
XStbWzpzcGFjZTpdXStbMS05XStbMC05XSoiICJzeXMvc29ja2V0LmgiCithdXRvX29yX3R5cGUg
InRocmNyZWF0ZWZsYWdzbmFtZSIgIlRIUl9bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInN5
cy90aHIuaCIKK2F1dG9fb3JfdHlwZSAibWxvY2thbGxuYW1lIiAiTUNMX1tBLVpdK1tbOnNwYWNl
Ol1dKzB4WzAtOV0rIiAic3lzL21tYW4uaCIKK2F1dG9fb3JfdHlwZSAic2htYXRuYW1lIiAiU0hN
X1tBLVpdK1tbOnNwYWNlOl1dK1swLTldezZ9KyIgInN5cy9zaG0uaCIKK2F1dG9fb3JfdHlwZSAi
cmZvcmtuYW1lIiAiUkZbQS1aXStbWzpzcGFjZTpdXStcKFswLTldKzw8WzAtOV0rXCkiICJzeXMv
dW5pc3RkLmgiCithdXRvX29yX3R5cGUgIm5mc3N2Y25hbWUiICJORlNTVkNfW0EtWl0rW1s6c3Bh
Y2U6XV0rMHhbMC05XSsiICJuZnNzZXJ2ZXIvbmZzLmgiCisKK2F1dG9fc3dpdGNoX3R5cGUgIndo
ZW5jZW5hbWUiICJTRUVLX1tBLVpdK1tbOnNwYWNlOl1dK1swLTldKyIgInN5cy91bmlzdGQuaCIK
K2F1dG9fc3dpdGNoX3R5cGUgInJsaW1pdG5hbWUiICJSTElNSVRfW0EtWl0rW1s6c3BhY2U6XV0r
WzAtOV0rIiAic3lzL3Jlc291cmNlLmgiCithdXRvX3N3aXRjaF90eXBlICJzaHV0ZG93bmhvd25h
bWUiICJTSFVUX1tBLVpdK1tbOnNwYWNlOl1dKzB4WzAtOV0rIiAic3lzL3NvY2tldC5oIgorYXV0
b19zd2l0Y2hfdHlwZSAicHJpb25hbWUiICJQUklPX1tBLVpdK1tbOnNwYWNlOl1dK1swLTldIiAi
c3lzL3Jlc291cmNlLmgiCithdXRvX3N3aXRjaF90eXBlICJtYWR2aXNlYmVoYXZuYW1lIiAiXz9N
QURWX1tBLVpdK1tbOnNwYWNlOl1dK1swLTldKyIgInN5cy9tbWFuLmgiCithdXRvX3N3aXRjaF90
eXBlICJtc3luY2ZsYWdzbmFtZSIgIk1TX1tBLVpdK1tbOnNwYWNlOl1dKzB4WzAtOV0rIiAic3lz
L21tYW4uaCIKK2F1dG9fc3dpdGNoX3R5cGUgInNjaGVkcG9saWN5bmFtZSIgIlNDSEVEX1tBLVpd
K1tbOnNwYWNlOl1dK1swLTldKyIgInNjaGVkLmgiCithdXRvX3N3aXRjaF90eXBlICJrbGR1bmxv
YWRmZmxhZ3NuYW1lIiAiTElOS0VSX1VOTE9BRF9bQS1aXStbWzpzcGFjZTpdXStbMC05XSsiICJz
eXMvbGlua2VyLmgiCithdXRvX3N3aXRjaF90eXBlICJrc2V0aHJjbWRuYW1lIiAiS1NFX0lOVFJf
W0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0rIiAic3lzL2tzZS5oIgorYXV0b19zd2l0Y2hfdHlwZSAi
ZXh0YXR0cmN0bG5hbWUiICJFWFRBVFRSX05BTUVTUEFDRV9bQS1aXStbWzpzcGFjZTpdXSsweFsw
LTldKyIgInN5cy9leHRhdHRyLmgiCithdXRvX3N3aXRjaF90eXBlICJrbGRzeW1jbWRuYW1lIiAi
S0xEU1lNX1tBLVpdK1tbOnNwYWNlOl1dK1swLTldKyIgInN5cy9saW5rZXIuaCIKK2F1dG9fc3dp
dGNoX3R5cGUgInNlbmRmaWxlZmxhZ3NuYW1lIiAiU0ZfW0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0r
IiAic3lzL3NvY2tldC5oIgorYXV0b19zd2l0Y2hfdHlwZSAiYWNsdHlwZW5hbWUiICJBQ0xfVFlQ
RV9bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInN5cy9hY2wuaCIKK2F1dG9fc3dpdGNoX3R5
cGUgInNpZ3Byb2NtYXNraG93bmFtZSIgIlNJR19bQS1aXStbWzpzcGFjZTpdXStbMC05XSsiICJz
eXMvc2lnbmFsLmgiCithdXRvX3N3aXRjaF90eXBlICJsaW9fbGlzdGlvbmFtZSIgIkxJT18oTk8p
P1dBSVRbWzpzcGFjZTpdXStbMC05XSsiICJhaW8uaCIKK2F1dG9fc3dpdGNoX3R5cGUgIm1pbmhl
cml0bmFtZSIgIklOSEVSSVRfW0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0rIiAic3lzL21tYW4uaCIK
K2F1dG9fc3dpdGNoX3R5cGUgInF1b3RhY3RsbmFtZSIgIlFfW0EtWl0rW1s6c3BhY2U6XV0rMHhb
MC05XSsiICJ1ZnMvdWZzL3F1b3RhLmgiCisKK2NhdCA8PF9FT0ZfCisvKgorICogQVVUTyAtIFNw
ZWNpYWwKKyAqIEZfIGlzIHVzZWQgdG8gc3BlY2lmeSBmY250bCBjb21tYW5kcyBhcyB3ZWxsIGFz
IGFyZ3VtZW50cy4gQm90aCBzZXRzIGFyZQorICogZ3JvdXBlZCBpbiBmY250bC5oLCBhbmQgdGhp
cyBhd2sgc2NyaXB0IGdyYWJzIHRoZSBmaXJzdCBncm91cC4KKyAqLwordm9pZAorZmNudGxjbWRu
YW1lIChpbnQgY21kLCBpbnQgYXJnLCBpbnQgZGVjaW1hbCkKK3sKKwlzd2l0Y2ggKGNtZCkgewor
X0VPRl8KK2VncmVwICJeI1tbOnNwYWNlOl1dKmRlZmluZVtbOnNwYWNlOl1dK0ZfW0EtWl0rW1s6
c3BhY2U6XV0rWzAtOV0rW1s6c3BhY2U6XV0qIiBcCisJJGluY2x1ZGVfZGlyL3N5cy9mY250bC5o
IHwgXAorCWF3ayAnQkVHSU4geyBvPTAgfSB7IGZvciAoaSA9IDE7IGkgPD0gTkY7IGkrKykgXAor
CQlpZiAoJGkgfiAvZGVmaW5lLykgXAorCQkJYnJlYWs7IFwKKwkJKytpOyBcCisJCWlmIChvIDw9
ICQoaSsxKSkgXAorCQkJcHJpbnRmICJcdGNhc2UgJXM6XG5cdFx0KHZvaWQpcHJpbnRmKFwiJXNc
Iik7XG5cdFx0YnJlYWs7XG4iLCAkaSwgJGk7IFwKKwkJZWxzZSBcCisJCQlleGl0OyBcCisJCW8g
PSAkKGkrMSkgfScKK2NhdCA8PF9FT0ZfCisJZGVmYXVsdDogLyogU2hvdWxkIG5vdCByZWFjaCAq
LworCQkodm9pZClwcmludGYoIjxpbnZhbGlkPSVsZD4iLCAobG9uZyljbWQpOworCX0KKwkodm9p
ZClwdXRjaGFyKCcsJyk7CisJaWYgKGNtZCA9PSBGX0dFVEZEIHx8IGNtZCA9PSBGX1NFVEZEKSB7
CisJCWlmIChhcmcgPT0gRkRfQ0xPRVhFQykKKwkJCSh2b2lkKXByaW50ZigiRkRfQ0xPRVhFQyIp
OworCQllbHNlIGlmIChhcmcgPT0gMCkKKwkJCSh2b2lkKXByaW50ZigiMCIpOworCQllbHNlIHsK
KwkJCWlmIChkZWNpbWFsKQorCQkJCSh2b2lkKXByaW50ZigiPGludmFsaWQ+JWxkIiwgKGxvbmcp
YXJnKTsKKwkJCWVsc2UKKwkJCQkodm9pZClwcmludGYoIjxpbnZhbGlkPiUjbHgiLCAobG9uZylh
cmcpOworCQl9CisJfSBlbHNlIGlmIChjbWQgPT0gRl9TRVRGTCkgeworCQlmbGFnc25hbWUoYXJn
KTsKKwl9IGVsc2UgeworCQlpZiAoZGVjaW1hbCkKKwkJCSh2b2lkKXByaW50ZigiJWxkIiwgKGxv
bmcpYXJnKTsKKwkJZWxzZQorCQkJKHZvaWQpcHJpbnRmKCIlI2x4IiwgKGxvbmcpYXJnKTsKKwl9
Cit9CisKKy8qCisgKiBBVVRPIC0gU3BlY2lhbAorICoKKyAqIFRoZSBvbmx5IHJlYXNvbiB0aGlz
IGlzIG5vdCBmdWxseSBhdXRvbWF0ZWQgaXMgZHVlIHRvIHRoZQorICogZ3JlcCAtdiBSVFBfUFJJ
TyBzdGF0ZW1lbnQuIEEgYmV0dGVyIGVncmVwIGxpbmUgc2hvdWxkCisgKiBtYWtlIHRoaXMgY2Fw
YWJsZSBvZiBiZWluZyBhIGF1dG9fc3dpdGNoX3R5cGUoKSBmdW5jdGlvbi4KKyAqLwordm9pZAor
cnRwcmlvbmFtZSAoaW50IGZ1bmMpCit7CisJc3dpdGNoIChmdW5jKSB7CitfRU9GXworZWdyZXAg
Il4jW1s6c3BhY2U6XV0qZGVmaW5lW1s6c3BhY2U6XV0rUlRQX1tBLVpdK1tbOnNwYWNlOl1dKzB4
WzAtOV0rW1s6c3BhY2U6XV0qIiBcCisJJGluY2x1ZGVfZGlyL3N5cy9ydHByaW8uaCB8IGdyZXAg
LXYgUlRQX1BSSU8gfCBcCisJYXdrICd7IGZvciAoaSA9IDE7IGkgPD0gTkY7IGkrKykgXAorCQlp
ZiAoJGkgfiAvZGVmaW5lLykgXAorCQkJYnJlYWs7IFwKKwkJKytpOyBcCisJCXByaW50ZiAiXHRj
YXNlICVzOlxuXHRcdCh2b2lkKXByaW50ZihcIiVzXCIpO1xuXHRcdGJyZWFrO1xuIiwgJGksICRp
IH0nCitjYXQgPDxfRU9GXworCWRlZmF1bHQ6IC8qIFNob3VsZCBub3QgcmVhY2ggKi8KKwkJKHZv
aWQpcHJpbnRmKCI8aW52YWxpZD0lbGQ+IiwgKGxvbmcpZnVuYyk7CisJfQorfQorCisvKgorICog
QVVUTyAtIFNwZWNpYWwKKyAqCisgKiBUaGUgc2VuZCBhbmQgcmVjdiBmdW5jdGlvbnMgaGF2ZSBh
IGZsYWdzIGFyZ3VtZW50IHdoaWNoIGNhbiBiZQorICogc2V0IHRvIDAuIFRoZXJlIGlzIG5vIGNv
cnJlc3BvbmRpbmcgI2RlZmluZS4gVGhlIGF1dG9fIGZ1bmN0aW9ucworICogZGV0ZWN0IHRoaXMg
YXMgImludmFsaWQiLCB3aGljaCBpcyBpbmNvcnJlY3QgaGVyZS4KKyAqLwordm9pZAorc2VuZHJl
Y3ZmbGFnc25hbWUgKGludCBmbGFncykKK3sKKwlpbnQJb3IgPSAwOworCQorCWlmIChmbGFncyA9
PSAwKSB7CisJCSh2b2lkKXByaW50ZigiMCIpOworCQlyZXR1cm47CisJfQorX0VPRl8KK2VncmVw
ICJeI1tbOnNwYWNlOl1dKmRlZmluZVtbOnNwYWNlOl1dK01TR19bQS1aXStbWzpzcGFjZTpdXSsw
eFswLTldK1tbOnNwYWNlOl1dKiIgJGluY2x1ZGVfZGlyL3N5cy9zb2NrZXQuaCB8IFwKKwlhd2sg
J3sgZm9yIChpID0gMTsgaSA8PSBORjsgaSsrKSBcCisJCWlmICgkaSB+IC9kZWZpbmUvKSBcCisJ
CQlicmVhazsgXAorCQkrK2k7IFwKKwkJcHJpbnRmICJcdGlmKCEoKGZsYWdzPjApXigoJXMpPjAp
KSlcblx0XHRpZl9wcmludF9vcihmbGFncywgJXMsIG9yKTtcbiIsICRpLCAkaSB9JworY2F0IDw8
X0VPRl8KK30KKworX0VPRl8K
------=_Part_14898_9999084.1145479192476--



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