Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Jan 2009 11:44:23 -0800
From:      Matthew Fleming <matthew.fleming@isilon.com>
To:        Sam Leffler <sam@freebsd.org>
Cc:        freebsd-hackers <freebsd-hackers@freebsd.org>
Subject:   Re: Dynamic ddb commands
Message-ID:  <1233344663.13748.120.camel@amaretto>
In-Reply-To: <49834710.9070908@freebsd.org>
References:  <1233337318.13748.101.camel@amaretto> <49834710.9070908@freebsd.org>

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

--=-fq7uZMe0OJhocqSP8KeS
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

> If I recall it was painful to find entries in the help listing w/o sorting.

So it's a human reading problem, where ddb spat out the command names in
order that they were in the in-memory struct, and if I wanted to look
over the listing I had to visually scan every one since they weren't in
order?

> Feel free to propose an alternative implementation; noone's wed to 
> what's in the tree.

Here's a patch for 6.x.  The display order for the commands is an
interesting issue; it would also make sense to group commands (perhaps
alphabetically) by the module that defined them, so that when I added a
module all my ddb commands stayed together.  The patch I have here will
leave commands grouped by module, so it would be relatively trivial to
have linker_file_register_ddb add a new kind of dummy command that
specifies the module name for the following set of commands.

N.B. It appears from the FAQ that attachments are acceptable so I'm
sending the patch as an attachment.  Apologies if this is incorrect.

Thanks,
matthew


--=-fq7uZMe0OJhocqSP8KeS
Content-Disposition: attachment; filename="ddb.diff"
Content-Transfer-Encoding: base64
Content-Type: text/x-patch; name="ddb.diff"; charset="UTF-8"

SW5kZXg6IGtlcm4va2Vybl9saW5rZXIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGtlcm4va2Vybl9saW5r
ZXIuYwkocmV2aXNpb24gMTA4NjU5KQ0KKysrIGtlcm4va2Vybl9saW5rZXIuYwkod29ya2luZyBj
b3B5KQ0KQEAgLTQwLDQzICs0MCw1MyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMva2Vy
bi9rZXJuX2xpDQogI2luY2x1ZGUgPHN5cy9wcm9jLmg+DQogI2luY2x1ZGUgPHN5cy9sb2NrLmg+
DQogI2luY2x1ZGUgPHN5cy9tdXRleC5oPg0KICNpbmNsdWRlIDxzeXMvc3guaD4NCiAjaW5jbHVk
ZSA8c3lzL21hYy5oPg0KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+DQogI2luY2x1ZGUgPHN5cy9s
aW5rZXIuaD4NCiAjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+DQogI2luY2x1ZGUgPHN5cy9saWJrZXJu
Lmg+DQogI2luY2x1ZGUgPHN5cy9uYW1laS5oPg0KICNpbmNsdWRlIDxzeXMvdm5vZGUuaD4NCiAj
aW5jbHVkZSA8c3lzL3N5c2N0bC5oPg0KICNpZmRlZiBLREINCiAjaW5jbHVkZSA8c3lzL2tkYi5o
Pg0KICNlbmRpZg0KKyNpZmRlZiBEREINCisjaW5jbHVkZSA8ZGRiL2RkYi5oPg0KKyNlbmRpZiAv
KiBEREIgKi8NCiANCiAjaW5jbHVkZSA8dm0vdW1hLmg+DQogI2luY2x1ZGUgImxpbmtlcl9pZi5o
Ig0KIA0KICNpZmRlZiBLTERfREVCVUcNCiBpbnQga2xkX2RlYnVnID0gMDsNCiAjZW5kaWYNCiAN
CiAvKg0KICAqIHN0YXRpYyBjaGFyICpsaW5rZXJfc2VhcmNoX3BhdGgoY29uc3QgY2hhciAqbmFt
ZSwgc3RydWN0IG1vZF9kZXBlbmQNCiAgKiAqdmVyaW5mbyk7DQogICovDQogc3RhdGljIGNvbnN0
IGNoYXIgCSpsaW5rZXJfYmFzZW5hbWUoY29uc3QgY2hhciAqcGF0aCk7DQorI2lmZGVmIEREQg0K
K3N0YXRpYyB2b2lkIGxpbmtlcl9maWxlX3JlZ2lzdGVyX2RkYihsaW5rZXJfZmlsZV90IGZpbGUp
Ow0KK3N0YXRpYyB2b2lkIGxpbmtlcl9maWxlX3VucmVnaXN0ZXJfZGRiKGxpbmtlcl9maWxlX3Qg
ZmlsZSk7DQorI2Vsc2UgLyogIS4uLiBEREIgKi8NCisjZGVmaW5lIGxpbmtlcl9maWxlX3JlZ2lz
dGVyX2RkYihmaWxlKQkJZG8geyB9IHdoaWxlICgwKQ0KKyNkZWZpbmUgbGlua2VyX2ZpbGVfdW5y
ZWdpc3Rlcl9kZGIoZmlsZSkJZG8geyB9IHdoaWxlICgwKQ0KKyNlbmRpZiAvKiBEREIgKi8NCiAN
CiAvKiBNZXRhZGF0YSBmcm9tIHRoZSBzdGF0aWMga2VybmVsICovDQogU0VUX0RFQ0xBUkUobW9k
bWV0YWRhdGFfc2V0LCBzdHJ1Y3QgbW9kX21ldGFkYXRhKTsNCiANCiBNQUxMT0NfREVGSU5FKE1f
TElOS0VSLCAibGlua2VyIiwgImtlcm5lbCBsaW5rZXIiKTsNCiANCiBsaW5rZXJfZmlsZV90IGxp
bmtlcl9rZXJuZWxfZmlsZTsNCiANCiBzdGF0aWMgc3RydWN0IG10eCBrbGRfbXR4OwkvKiBrZXJu
ZWwgbGlua2VyIG11dGV4ICovDQogDQogc3RhdGljIGxpbmtlcl9jbGFzc19saXN0X3QgY2xhc3Nl
czsNCiBsaW5rZXJfZmlsZV9saXN0X3QgbGlua2VyX2ZpbGVzOw0KIHN0YXRpYyBpbnQgbmV4dF9m
aWxlX2lkID0gMTsNCiBzdGF0aWMgaW50IGxpbmtlcl9ub19tb3JlX2NsYXNzZXMgPSAwOw0KIA0K
QEAgLTM2MSwzMCArMzcxLDM2IEBAIGxpbmtlcl9sb2FkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5h
bWUsIGwNCiAJCUtMRF9EUEYoRklMRSwgKCJsaW5rZXJfbG9hZF9maWxlOiB0cnlpbmcgdG8gbG9h
ZCAlc1xuIiwNCiAJCSAgICBmaWxlbmFtZSkpOw0KIAkJZXJyb3IgPSBMSU5LRVJfTE9BRF9GSUxF
KGxjLCBmaWxlbmFtZSwgJmxmKTsNCiAJCS8qDQogCQkgKiBJZiB3ZSBnb3Qgc29tZXRoaW5nIG90
aGVyIHRoYW4gRU5PRU5ULCB0aGVuIGl0IGV4aXN0cyBidXQNCiAJCSAqIHdlIGNhbm5vdCBsb2Fk
IGl0IGZvciBzb21lIG90aGVyIHJlYXNvbi4NCiAJCSAqLw0KIAkJaWYgKGVycm9yICE9IEVOT0VO
VCkNCiAJCQlmb3VuZGZpbGUgPSAxOw0KIAkJaWYgKGxmKSB7DQogCQkJZXJyb3IgPSBsaW5rZXJf
ZmlsZV9yZWdpc3Rlcl9tb2R1bGVzKGxmKTsNCiAJCQlpZiAoZXJyb3IgPT0gRUVYSVNUKSB7DQog
CQkJCWxpbmtlcl9maWxlX3VubG9hZChsZiwgTElOS0VSX1VOTE9BRF9GT1JDRSk7DQogCQkJCWdv
dG8gb3V0Ow0KIAkJCX0NCisJCQkvKg0KKwkJCSAqIFJlZ2lzdGVyIGRkYiBjb21tYW5kcyBiZWZv
cmUgYW55dGhpbmcsIHNvDQorCQkJICogdGhleSdyZSBhdmFpbGFibGUgaW4gY2FzZSBzeXNpbml0
IGJ1Zw0KKwkJCSAqIGNhdXNlcyBhIGNyYXNoLg0KKwkJCSAqLw0KKwkJCWxpbmtlcl9maWxlX3Jl
Z2lzdGVyX2RkYihsZik7DQogCQkJbGlua2VyX2ZpbGVfcmVnaXN0ZXJfc3lzY3RscyhsZik7DQog
CQkJbGlua2VyX2ZpbGVfc3lzaW5pdChsZik7DQogCQkJbGYtPmZsYWdzIHw9IExJTktFUl9GSUxF
X0xJTktFRDsNCiAJCQkqcmVzdWx0ID0gbGY7DQogCQkJZXJyb3IgPSAwOw0KIAkJCWdvdG8gb3V0
Ow0KIAkJfQ0KIAl9DQogCS8qDQogCSAqIExlc3MgdGhhbiBpZGVhbCwgYnV0IHRlbGxzIHRoZSB1
c2VyIHdoZXRoZXIgaXQgZmFpbGVkIHRvIGxvYWQgb3INCiAJICogdGhlIG1vZHVsZSB3YXMgbm90
IGZvdW5kLg0KIAkgKi8NCiAJaWYgKGZvdW5kZmlsZSkgew0KIAkJLyoNCiAJCSAqIEZvcm1hdCBu
b3QgcmVjb2duaXplZCBvciBvdGhlcndpc2UgdW5sb2FkYWJsZS4NCkBAIC01NDAsMzAgKzU1Niwz
MSBAQCBsaW5rZXJfZmlsZV91bmxvYWQobGlua2VyX2ZpbGVfdCBmaWxlLCBpDQogCWZvciAobWwg
PSBUQUlMUV9GSVJTVCgmZm91bmRfbW9kdWxlcyk7IG1sOyBtbCA9IG5leHRtbCkgew0KIAkJbmV4
dG1sID0gVEFJTFFfTkVYVChtbCwgbGluayk7DQogCQlpZiAobWwtPmNvbnRhaW5lciA9PSBmaWxl
KSB7DQogCQkJVEFJTFFfUkVNT1ZFKCZmb3VuZF9tb2R1bGVzLCBtbCwgbGluayk7DQogCQkJZnJl
ZShtbCwgTV9MSU5LRVIpOw0KIAkJfQ0KIAl9DQogDQogCS8qIA0KIAkgKiBEb24ndCB0cnkgdG8g
cnVuIFNZU1VOSU5JVHMgaWYgd2UgYXJlIHVubG9hZGVkIGR1ZSB0byBhIA0KIAkgKiBsaW5rIGVy
cm9yLg0KIAkgKi8NCiAJaWYgKGZpbGUtPmZsYWdzICYgTElOS0VSX0ZJTEVfTElOS0VEKSB7DQog
CQlsaW5rZXJfZmlsZV9zeXN1bmluaXQoZmlsZSk7DQogCQlsaW5rZXJfZmlsZV91bnJlZ2lzdGVy
X3N5c2N0bHMoZmlsZSk7DQorCQlsaW5rZXJfZmlsZV91bnJlZ2lzdGVyX2RkYihmaWxlKTsNCiAJ
fQ0KIAltdHhfbG9jaygma2xkX210eCk7DQogCVRBSUxRX1JFTU9WRSgmbGlua2VyX2ZpbGVzLCBm
aWxlLCBsaW5rKTsNCiAJbXR4X3VubG9jaygma2xkX210eCk7DQogDQogCWlmIChmaWxlLT5kZXBz
KSB7DQogCQlmb3IgKGkgPSAwOyBpIDwgZmlsZS0+bmRlcHM7IGkrKykNCiAJCQlsaW5rZXJfZmls
ZV91bmxvYWQoZmlsZS0+ZGVwc1tpXSwgZmxhZ3MpOw0KIAkJZnJlZShmaWxlLT5kZXBzLCBNX0xJ
TktFUik7DQogCQlmaWxlLT5kZXBzID0gTlVMTDsNCiAJfQ0KIAlmb3IgKGNwID0gU1RBSUxRX0ZJ
UlNUKCZmaWxlLT5jb21tb24pOyBjcDsNCiAJICAgIGNwID0gU1RBSUxRX0ZJUlNUKCZmaWxlLT5j
b21tb24pKSB7DQogCQlTVEFJTFFfUkVNT1ZFKCZmaWxlLT5jb21tb24sIGNwLCBjb21tb25fc3lt
Ym9sLCBsaW5rKTsNCiAJCWZyZWUoY3AsIE1fTElOS0VSKTsNCkBAIC03NDIsMzEgKzc1OSw3NCBA
QCBsaW5rZXJfZGRiX3NlYXJjaF9zeW1ib2woY2FkZHJfdCB2YWx1ZSwgDQogCQlyZXR1cm4gKEVO
T0VOVCk7DQogCX0NCiB9DQogDQogaW50DQogbGlua2VyX2RkYl9zeW1ib2xfdmFsdWVzKGNfbGlu
a2VyX3N5bV90IHN5bSwgbGlua2VyX3N5bXZhbF90ICpzeW12YWwpDQogew0KIAlsaW5rZXJfZmls
ZV90IGxmOw0KIA0KIAlUQUlMUV9GT1JFQUNIKGxmLCAmbGlua2VyX2ZpbGVzLCBsaW5rKSB7DQog
CQlpZiAoTElOS0VSX1NZTUJPTF9WQUxVRVMobGYsIHN5bSwgc3ltdmFsKSA9PSAwKQ0KIAkJCXJl
dHVybiAoMCk7DQogCX0NCiAJcmV0dXJuIChFTk9FTlQpOw0KIH0NCi0jZW5kaWYNCisNCisvKg0K
KyAqIEFkZCBhbmQgcmVtb3ZlIGRiX2NtZCBhbmQgZGJfc2hvd19jbWQgdGhhdCBhcmUgZGVmaW5l
ZCBpbiBhIG1vZHVsZS4NCisgKi8NCitzdGF0aWMgdm9pZA0KK2xpbmtlcl9maWxlX3JlZ2lzdGVy
X2RkYihsaW5rZXJfZmlsZV90IGZpbGUpDQorew0KKwlzdHJ1Y3QgY29tbWFuZCAqKmNfc3RhcnQs
ICoqY19zdG9wOw0KKwljaGFyICpzZXQ7DQorDQorCXNldCA9ICJkYl9jbWRfc2V0IjsNCisJaWYg
KGxpbmtlcl9maWxlX2xvb2t1cF9zZXQoZmlsZSwgc2V0LCAmY19zdGFydCwgJmNfc3RvcCwgTlVM
TCkgPT0gMCkgew0KKwkJaWYgKGRiX2NtZF9hZGQoY19zdGFydCwgY19zdG9wLCBmYWxzZSkgIT0g
MCkgew0KKwkJCXByaW50ZigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSB0byBhZGQgdG8gJXM7
ICINCisJCQkgICAgIm1vZHVsZSAlcydzIGRiIGNvbW1hbmRzIGFyZSBub3QgbWVyZ2VkXG4iLA0K
KwkJCSAgICBzZXQsIGZpbGUtPmZpbGVuYW1lKTsNCisJCX0NCisJfQ0KKw0KKwlzZXQgPSAiZGJf
c2hvd19jbWRfc2V0IjsNCisJaWYgKGxpbmtlcl9maWxlX2xvb2t1cF9zZXQoZmlsZSwgc2V0LCAm
Y19zdGFydCwgJmNfc3RvcCwgTlVMTCkgPT0gMCkgew0KKwkJaWYgKGRiX2NtZF9hZGQoY19zdGFy
dCwgY19zdG9wLCB0cnVlKSAhPSAwKSB7DQorCQkJcHJpbnRmKCJDb3VsZCBub3QgYWxsb2NhdGUg
bWVtb3J5IHRvIGFkZCB0byAlczsgIg0KKwkJCSAgICAibW9kdWxlICVzJ3MgZGIgY29tbWFuZHMg
YXJlIG5vdCBtZXJnZWRcbiIsDQorCQkJICAgIHNldCwgZmlsZS0+ZmlsZW5hbWUpOw0KKwkJfQ0K
Kwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbGlua2VyX2ZpbGVfdW5yZWdpc3Rlcl9kZGIobGlu
a2VyX2ZpbGVfdCBmaWxlKQ0KK3sNCisJc3RydWN0IGNvbW1hbmQgKipjX3N0YXJ0LCAqKmNfc3Rv
cDsNCisNCisJaWYgKGxpbmtlcl9maWxlX2xvb2t1cF9zZXQoZmlsZSwgImRiX2NtZF9zZXQiLCAm
Y19zdGFydCwNCisJICAgICZjX3N0b3AsIE5VTEwpID09IDApDQorCQlkYl9jbWRfcmVtKGNfc3Rh
cnQsIGNfc3RvcCwgZmFsc2UpOw0KKw0KKwlpZiAobGlua2VyX2ZpbGVfbG9va3VwX3NldChmaWxl
LCAiZGJfc2hvd19jbWRfc2V0IiwgJmNfc3RhcnQsDQorCSAgICAmY19zdG9wLCBOVUxMKSA9PSAw
KQ0KKwkJZGJfY21kX3JlbShjX3N0YXJ0LCBjX3N0b3AsIHRydWUpOw0KK30NCisNCisjZW5kaWYg
LyogRERCICovDQogDQogLyoNCiAgKiBTeXNjYWxscy4NCiAgKi8NCiAvKg0KICAqIE1QU0FGRQ0K
ICAqLw0KIGludA0KIGtsZGxvYWQoc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBrbGRsb2FkX2Fy
Z3MgKnVhcCkNCiB7DQogCWNoYXIgKmtsZG5hbWUsICptb2RuYW1lOw0KIAljaGFyICpwYXRobmFt
ZSA9IE5VTEw7DQogCWxpbmtlcl9maWxlX3QgbGY7DQogCWludCBlcnJvciA9IDA7DQogCXNpemVf
dCBzaXplOw0KQEAgLTE1NTIsMzAgKzE2MTIsMzEgQEAgcmVzdGFydDoNCiAJCQl9DQogCQl9DQog
CQkvKg0KIAkJICogTm93IGRvIHJlbG9jYXRpb24gZXRjIHVzaW5nIHRoZSBzeW1ib2wgc2VhcmNo
IHBhdGhzDQogCQkgKiBlc3RhYmxpc2hlZCBieSB0aGUgZGVwZW5kZW5jaWVzDQogCQkgKi8NCiAJ
CWVycm9yID0gTElOS0VSX0xJTktfUFJFTE9BRF9GSU5JU0gobGYpOw0KIAkJaWYgKGVycm9yKSB7
DQogCQkJcHJpbnRmKCJLTEQgZmlsZSAlcyAtIGNvdWxkIG5vdCBmaW5hbGl6ZSBsb2FkaW5nXG4i
LA0KIAkJCSAgICBsZi0+ZmlsZW5hbWUpOw0KIAkJCVRBSUxRX1JFTU9WRSgmZGVwZW5kZWRfZmls
ZXMsIGxmLCBsb2FkZWQpOw0KIAkJCWxpbmtlcl9maWxlX3VubG9hZChsZiwgTElOS0VSX1VOTE9B
RF9GT1JDRSk7DQogCQkJY29udGludWU7DQogCQl9DQogCQlsaW5rZXJfZmlsZV9yZWdpc3Rlcl9t
b2R1bGVzKGxmKTsNCisJCWxpbmtlcl9maWxlX3JlZ2lzdGVyX2RkYihsZik7DQogCQlpZiAobGlu
a2VyX2ZpbGVfbG9va3VwX3NldChsZiwgInN5c2luaXRfc2V0IiwgJnNpX3N0YXJ0LA0KIAkJICAg
ICZzaV9zdG9wLCBOVUxMKSA9PSAwKQ0KIAkJCXN5c2luaXRfYWRkKHNpX3N0YXJ0LCBzaV9zdG9w
KTsNCiAJCWxpbmtlcl9maWxlX3JlZ2lzdGVyX3N5c2N0bHMobGYpOw0KIAkJbGYtPmZsYWdzIHw9
IExJTktFUl9GSUxFX0xJTktFRDsNCiAJfQ0KIAkvKiB3b29ob28hIHdlIG1hZGUgaXQhICovDQog
fQ0KIA0KIFNZU0lOSVQocHJlbG9hZCwgU0lfU1VCX0tMRCwgU0lfT1JERVJfTUlERExFLCBsaW5r
ZXJfcHJlbG9hZCwgMCkNCiANCiAvKg0KICAqIFNlYXJjaCBmb3IgYSBub3QtbG9hZGVkIG1vZHVs
ZSBieSBuYW1lLg0KICAqIA0KICAqIE1vZHVsZXMgbWF5IGJlIGZvdW5kIGluIHRoZSBmb2xsb3dp
bmcgbG9jYXRpb25zOg0KSW5kZXg6IGRkYi9kZGIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGRkYi9kZGIu
aAkocmV2aXNpb24gMTA4NjU5KQ0KKysrIGRkYi9kZGIuaAkod29ya2luZyBjb3B5KQ0KQEAgLTc3
LDYwICs3Nyw2MyBAQCBmdW5jX25hbWUoYWRkciwgaGF2ZV9hZGRyLCBjb3VudCwgbW9kaWYpDQog
CWRiX2V4cHJfdCBjb3VudDsJCQkJCVwNCiAJY2hhciAqbW9kaWY7DQogDQogZXh0ZXJuIGRiX2V4
cHJfdCBkYl9tYXhvZmY7DQogZXh0ZXJuIGludCBkYl9pbmRlbnQ7DQogZXh0ZXJuIGludCBkYl9p
bnN0X2NvdW50Ow0KIGV4dGVybiBpbnQgZGJfbG9hZF9jb3VudDsNCiBleHRlcm4gaW50IGRiX3N0
b3JlX2NvdW50Ow0KIGV4dGVybiBkYl9leHByX3QgZGJfcmFkaXg7DQogZXh0ZXJuIGRiX2V4cHJf
dCBkYl9tYXhfd2lkdGg7DQogZXh0ZXJuIGRiX2V4cHJfdCBkYl90YWJfc3RvcF93aWR0aDsNCiBl
eHRlcm4gZGJfZXhwcl90IGRiX2xpbmVzX3Blcl9wYWdlOw0KIA0KIHN0cnVjdCB0aHJlYWQ7DQog
c3RydWN0IHZtX21hcDsNCitzdHJ1Y3QgY29tbWFuZDsNCiANCiB2b2lkCQlkYl9jaGVja19pbnRl
cnJ1cHQodm9pZCk7DQogdm9pZAkJZGJfY2xlYXJfd2F0Y2hwb2ludHModm9pZCk7DQogZGJfYWRk
cl90CWRiX2Rpc2FzbShkYl9hZGRyX3QgbG9jLCBib29sZWFuX3QgYWx0Zm10KTsNCiAJCQkJLyog
aW5zdHJ1Y3Rpb24gZGlzYXNzZW1ibGVyICovDQogdm9pZAkJZGJfZXJyb3IoY29uc3QgY2hhciAq
cyk7DQogaW50CQlkYl9leHByZXNzaW9uKGRiX2V4cHJfdCAqdmFsdWVwKTsNCiBpbnQJCWRiX2dl
dF92YXJpYWJsZShkYl9leHByX3QgKnZhbHVlcCk7DQogdm9pZAkJZGJfaXByaW50Zihjb25zdCBj
aGFyICosLi4uKSBfX2twcmludGZsaWtlKDEsIDIpOw0KIHN0cnVjdCB2bV9tYXAJKmRiX21hcF9h
ZGRyKHZtX29mZnNldF90KTsNCiBib29sZWFuX3QJZGJfbWFwX2N1cnJlbnQoc3RydWN0IHZtX21h
cCAqKTsNCiBib29sZWFuX3QJZGJfbWFwX2VxdWFsKHN0cnVjdCB2bV9tYXAgKiwgc3RydWN0IHZt
X21hcCAqKTsNCiB2b2lkCQlkYl9wcmludF9sb2NfYW5kX2luc3QoZGJfYWRkcl90IGxvYyk7DQog
dm9pZAkJZGJfcHJpbnRfdGhyZWFkKHZvaWQpOw0KIHZvaWQJCWRiX3ByaW50Zihjb25zdCBjaGFy
ICpmbXQsIC4uLikgX19rcHJpbnRmbGlrZSgxLCAyKTsNCiBpbnQJCWRiX3JlYWRfYnl0ZXModm1f
b2Zmc2V0X3QgYWRkciwgc2l6ZV90IHNpemUsIGNoYXIgKmRhdGEpOw0KIAkJCQkvKiBtYWNoaW5l
LWRlcGVuZGVudCAqLw0KIGludAkJZGJfcmVhZGxpbmUoY2hhciAqbHN0YXJ0LCBpbnQgbHNpemUp
Ow0KIHZvaWQJCWRiX3Jlc3RhcnRfYXRfcGMoYm9vbGVhbl90IHdhdGNocHQpOw0KIGludAkJZGJf
c2V0X3ZhcmlhYmxlKGRiX2V4cHJfdCB2YWx1ZSk7DQogdm9pZAkJZGJfc2V0X3dhdGNocG9pbnRz
KHZvaWQpOw0KIHZvaWQJCWRiX3NldHVwX3BhZ2luZyhkYl9wYWdlX2NhbGxvdXRmY25fdCAqY2Fs
bG91dCwgdm9pZCAqYXJnLA0KIAkJCQlpbnQgbWF4bGluZXMpOw0KIHZvaWQJCWRiX3NraXBfdG9f
ZW9sKHZvaWQpOw0KIGJvb2xlYW5fdAlkYl9zdG9wX2F0X3BjKGJvb2xlYW5fdCAqaXNfYnJlYWtw
b2ludCk7DQogI2RlZmluZQkJZGJfc3RyY3B5CXN0cmNweQ0KIHZvaWQJCWRiX3RyYWNlX3NlbGYo
dm9pZCk7DQogaW50CQlkYl90cmFjZV90aHJlYWQoc3RydWN0IHRocmVhZCAqLCBpbnQpOw0KIGlu
dAkJZGJfdmFsdWVfb2ZfbmFtZShjb25zdCBjaGFyICpuYW1lLCBkYl9leHByX3QgKnZhbHVlcCk7
DQogaW50CQlkYl93cml0ZV9ieXRlcyh2bV9vZmZzZXRfdCBhZGRyLCBzaXplX3Qgc2l6ZSwgY2hh
ciAqZGF0YSk7DQoraW50CQlkYl9jbWRfYWRkKHN0cnVjdCBjb21tYW5kICoqLCBzdHJ1Y3QgY29t
bWFuZCAqKiwgYm9vbGVhbl90KTsNCit2b2lkCQlkYl9jbWRfcmVtKHN0cnVjdCBjb21tYW5kICoq
LCBzdHJ1Y3QgY29tbWFuZCAqKiwgYm9vbGVhbl90KTsNCiANCiBkYl9jbWRmY25fdAlkYl9icmVh
a3BvaW50X2NtZDsNCiBkYl9jbWRmY25fdAlkYl9jb250aW51ZV9jbWQ7DQogZGJfY21kZmNuX3QJ
ZGJfZGVsZXRlX2NtZDsNCiBkYl9jbWRmY25fdAlkYl9kZWxldGVod2F0Y2hfY21kOw0KIGRiX2Nt
ZGZjbl90CWRiX2RlbGV0ZXdhdGNoX2NtZDsNCiBkYl9jbWRmY25fdAlkYl9leGFtaW5lX2NtZDsN
CiBkYl9jbWRmY25fdAlkYl9od2F0Y2hwb2ludF9jbWQ7DQogZGJfY21kZmNuX3QJZGJfbGlzdGJy
ZWFrX2NtZDsNCiBkYl9jbWRmY25fdAlkYl9wcmludF9jbWQ7DQogZGJfY21kZmNuX3QJZGJfcHM7
DQogZGJfY21kZmNuX3QJZGJfc2VhcmNoX2NtZDsNCiBkYl9jbWRmY25fdAlkYl9zZXRfY21kOw0K
IGRiX2NtZGZjbl90CWRiX3NldF90aHJlYWQ7DQogZGJfY21kZmNuX3QJZGJfc2hvd19yZWdzOw0K
SW5kZXg6IGRkYi9kYl9jb21tYW5kLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBkZGIvZGJfY29tbWFuZC5j
CShyZXZpc2lvbiAxMDg2NTkpDQorKysgZGRiL2RiX2NvbW1hbmQuYwkod29ya2luZyBjb3B5KQ0K
QEAgLTMzLDUxICszMyw2MCBAQA0KIA0KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4NCiBfX0ZCU0RJ
RCgiJEZyZWVCU0Q6IHNyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYyx2IDEuNjAuMi4yIDIwMDUvMTAv
MjUgMjA6MTA6NTYgamhiIEV4cCAkIik7DQogDQogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KICNp
bmNsdWRlIDxzeXMvbGlua2VyX3NldC5oPg0KICNpbmNsdWRlIDxzeXMvbG9jay5oPg0KICNpbmNs
dWRlIDxzeXMva2RiLmg+DQogI2luY2x1ZGUgPHN5cy9tdXRleC5oPg0KICNpbmNsdWRlIDxzeXMv
cHJvYy5oPg0KICNpbmNsdWRlIDxzeXMvcmVib290Lmg+DQogI2luY2x1ZGUgPHN5cy9zaWduYWx2
YXIuaD4NCiAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+DQogI2luY2x1ZGUgPHN5cy9jb25zLmg+DQog
I2luY2x1ZGUgPHN5cy93YXRjaGRvZy5oPg0KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+DQogDQog
I2luY2x1ZGUgPGRkYi9kZGIuaD4NCiAjaW5jbHVkZSA8ZGRiL2RiX2NvbW1hbmQuaD4NCiAjaW5j
bHVkZSA8ZGRiL2RiX2xleC5oPg0KICNpbmNsdWRlIDxkZGIvZGJfb3V0cHV0Lmg+DQogDQogI2lu
Y2x1ZGUgPG1hY2hpbmUvY3B1Lmg+DQogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+DQogDQog
LyoNCiAgKiBFeHBvcnRlZCBnbG9iYWwgdmFyaWFibGVzDQogICovDQogYm9vbGVhbl90CWRiX2Nt
ZF9sb29wX2RvbmU7DQogZGJfYWRkcl90CWRiX2RvdDsNCiBkYl9hZGRyX3QJZGJfbGFzdF9hZGRy
Ow0KIGRiX2FkZHJfdAlkYl9wcmV2Ow0KIGRiX2FkZHJfdAlkYl9uZXh0Ow0KIA0KIFNFVF9ERUNM
QVJFKGRiX2NtZF9zZXQsIHN0cnVjdCBjb21tYW5kKTsNCiBTRVRfREVDTEFSRShkYl9zaG93X2Nt
ZF9zZXQsIHN0cnVjdCBjb21tYW5kKTsNCiANCisNCitzdHJ1Y3QgY29tbWFuZCAqKmRiX2NtZF9z
dGFydCA9IFNFVF9CRUdJTihkYl9jbWRfc2V0KTsNCitzdHJ1Y3QgY29tbWFuZCAqKmRiX2NtZF9l
bmQgPSBTRVRfTElNSVQoZGJfY21kX3NldCk7DQorc3RydWN0IGNvbW1hbmQgKipkYl9zaG93X2Nt
ZF9zdGFydCA9IFNFVF9CRUdJTihkYl9zaG93X2NtZF9zZXQpOw0KK3N0cnVjdCBjb21tYW5kICoq
ZGJfc2hvd19jbWRfZW5kID0gU0VUX0xJTUlUKGRiX3Nob3dfY21kX3NldCk7DQoraW50IGRiX2Nt
ZF9pc19tYWxsb2NkID0gMDsNCitpbnQgZGJfc2hvd19jbWRfaXNfbWFsbG9jZCA9IDA7DQorDQog
c3RhdGljIGRiX2NtZGZjbl90CWRiX2ZuY2FsbDsNCiBzdGF0aWMgZGJfY21kZmNuX3QJZGJfZ2Ri
Ow0KIHN0YXRpYyBkYl9jbWRmY25fdAlkYl9raWxsOw0KIHN0YXRpYyBkYl9jbWRmY25fdAlkYl9y
ZXNldDsNCiBzdGF0aWMgZGJfY21kZmNuX3QJZGJfc3RhY2tfdHJhY2U7DQogc3RhdGljIGRiX2Nt
ZGZjbl90CWRiX3N0YWNrX3RyYWNlX2FsbDsNCiBzdGF0aWMgZGJfY21kZmNuX3QJZGJfd2F0Y2hk
b2c7DQogDQogLyogWFhYIHRoaXMgaXMgYWN0dWFsbHkgZm9yd2FyZC1zdGF0aWMuICovDQogZXh0
ZXJuIHN0cnVjdCBjb21tYW5kCWRiX3Nob3dfY21kc1tdOw0KIA0KIC8qDQogICogaWYgJ2VkJyBz
dHlsZTogJ2RvdCcgaXMgc2V0IGF0IHN0YXJ0IG9mIGxhc3QgaXRlbSBwcmludGVkLA0KICAqIGFu
ZCAnKycgcG9pbnRzIHRvIG5leHQgbGluZS4NCiAgKiBPdGhlcndpc2U6ICdkb3QnIHBvaW50cyB0
byBuZXh0IGl0ZW0sICcuLicgcG9pbnRzIHRvIGxhc3QuDQpAQCAtMTU0LDMwICsxNjMsMzMgQEAg
ZGJfY21kX3NlYXJjaChuYW1lLCB0YWJsZSwgYXV4X3RhYmxlcCwgYQ0KIAkJICAgICAgIHRoaXMg
bGV0cyB1cyBtYXRjaCBzaW5nbGUgbGV0dGVycyAqLw0KIAkJfQ0KIAkJZWxzZSB7DQogCQkgICAg
KmNtZHAgPSBjbWQ7DQogCQkgICAgcmVzdWx0ID0gQ01EX0ZPVU5EOw0KIAkJfQ0KIAkgICAgfQ0K
IAl9DQogCWlmIChhdXhfdGFibGVwICE9IDApDQogCSAgICAvKiBYWFggcmVwZWF0IHRvbyBtdWNo
IGNvZGUuICovDQogCSAgICBmb3IgKGF1eF9jbWRwID0gYXV4X3RhYmxlcDsgYXV4X2NtZHAgPCBh
dXhfdGFibGVwX2VuZDsgYXV4X2NtZHArKykgew0KIAkJcmVnaXN0ZXIgY2hhciAqbHA7DQogCQly
ZWdpc3RlciBjaGFyICpycDsNCiAJCXJlZ2lzdGVyIGludCAgYzsNCiANCisJCWlmICgqYXV4X2Nt
ZHAgPT0gTlVMTCkNCisJCSAgICBjb250aW51ZTsNCisNCiAJCWxwID0gbmFtZTsNCiAJCXJwID0g
KCphdXhfY21kcCktPm5hbWU7DQogCQl3aGlsZSAoKGMgPSAqbHApID09ICpycCkgew0KIAkJICAg
IGlmIChjID09IDApIHsNCiAJCQkvKiBjb21wbGV0ZSBtYXRjaCAqLw0KIAkJCSpjbWRwID0gKmF1
eF9jbWRwOw0KIAkJCXJldHVybiAoQ01EX1VOSVFVRSk7DQogCQkgICAgfQ0KIAkJICAgIGxwKys7
DQogCQkgICAgcnArKzsNCiAJCX0NCiAJCWlmIChjID09IDApIHsNCiAJCSAgICAvKiBlbmQgb2Yg
bmFtZSwgbm90IGVuZCBvZiBjb21tYW5kIC0NCiAJCSAgICAgICBwYXJ0aWFsIG1hdGNoICovDQog
CQkgICAgaWYgKHJlc3VsdCA9PSBDTURfRk9VTkQpIHsNCkBAIC0yMDQsMzAgKzIxNiwzMiBAQCBz
dGF0aWMgdm9pZA0KIGRiX2NtZF9saXN0KHRhYmxlLCBhdXhfdGFibGVwLCBhdXhfdGFibGVwX2Vu
ZCkNCiAJc3RydWN0IGNvbW1hbmQgKnRhYmxlOw0KIAlzdHJ1Y3QgY29tbWFuZCAqKmF1eF90YWJs
ZXA7DQogCXN0cnVjdCBjb21tYW5kICoqYXV4X3RhYmxlcF9lbmQ7DQogew0KIAlyZWdpc3RlciBz
dHJ1Y3QgY29tbWFuZCAqY21kOw0KIAlyZWdpc3RlciBzdHJ1Y3QgY29tbWFuZCAqKmF1eF9jbWRw
Ow0KIA0KIAlmb3IgKGNtZCA9IHRhYmxlOyBjbWQtPm5hbWUgIT0gMDsgY21kKyspIHsNCiAJICAg
IGRiX3ByaW50ZigiJS0xMnMiLCBjbWQtPm5hbWUpOw0KIAkgICAgZGJfZW5kX2xpbmUoKTsNCiAJ
fQ0KIAlpZiAoYXV4X3RhYmxlcCA9PSAwKQ0KIAkgICAgcmV0dXJuOw0KIAlmb3IgKGF1eF9jbWRw
ID0gYXV4X3RhYmxlcDsgYXV4X2NtZHAgPCBhdXhfdGFibGVwX2VuZDsgYXV4X2NtZHArKykgew0K
KwkgICAgaWYgKCphdXhfY21kcCA9PSBOVUxMKQ0KKwkJY29udGludWU7DQogCSAgICBkYl9wcmlu
dGYoIiUtMTJzIiwgKCphdXhfY21kcCktPm5hbWUpOw0KIAkgICAgZGJfZW5kX2xpbmUoKTsNCiAJ
fQ0KIH0NCiANCiBzdGF0aWMgdm9pZA0KIGRiX2NvbW1hbmQobGFzdF9jbWRwLCBjbWRfdGFibGUs
IGF1eF9jbWRfdGFibGVwLCBhdXhfY21kX3RhYmxlcF9lbmQpDQogCXN0cnVjdCBjb21tYW5kCSoq
bGFzdF9jbWRwOwkvKiBJTl9PVVQgKi8NCiAJc3RydWN0IGNvbW1hbmQJKmNtZF90YWJsZTsNCiAJ
c3RydWN0IGNvbW1hbmQJKiphdXhfY21kX3RhYmxlcDsNCiAJc3RydWN0IGNvbW1hbmQJKiphdXhf
Y21kX3RhYmxlcF9lbmQ7DQogew0KIAlzdHJ1Y3QgY29tbWFuZAkqY21kOw0KIAlpbnQJCXQ7DQog
CWNoYXIJCW1vZGlmW1RPS19TVFJJTkdfU0laRV07DQpAQCAtMjcxLDMyICsyODUsMzIgQEAgZGJf
Y29tbWFuZChsYXN0X2NtZHAsIGNtZF90YWJsZSwgYXV4X2NtZA0KIAkJICAgIGNhc2UgQ01EX0FN
QklHVU9VUzoNCiAJCQlkYl9wcmludGYoIkFtYmlndW91c1xuIik7DQogCQkJZGJfZmx1c2hfbGV4
KCk7DQogCQkJcmV0dXJuOw0KIAkJICAgIGNhc2UgQ01EX0hFTFA6DQogCQkJZGJfY21kX2xpc3Qo
Y21kX3RhYmxlLCBhdXhfY21kX3RhYmxlcCwgYXV4X2NtZF90YWJsZXBfZW5kKTsNCiAJCQlkYl9m
bHVzaF9sZXgoKTsNCiAJCQlyZXR1cm47DQogCQkgICAgZGVmYXVsdDoNCiAJCQlicmVhazsNCiAJ
CX0NCiAJCWlmICgoY21kX3RhYmxlID0gY21kLT5tb3JlKSAhPSAwKSB7DQogCQkgICAgLyogWFhY
IHVzdWFsbHkgbm8gbW9yZSBhdXgncy4gKi8NCiAJCSAgICBhdXhfY21kX3RhYmxlcCA9IDA7DQog
CQkgICAgaWYgKGNtZF90YWJsZSA9PSBkYl9zaG93X2NtZHMpIHsNCi0JCQlhdXhfY21kX3RhYmxl
cCA9IFNFVF9CRUdJTihkYl9zaG93X2NtZF9zZXQpOw0KLQkJCWF1eF9jbWRfdGFibGVwX2VuZCA9
IFNFVF9MSU1JVChkYl9zaG93X2NtZF9zZXQpOw0KKwkJCWF1eF9jbWRfdGFibGVwID0gZGJfc2hv
d19jbWRfc3RhcnQ7DQorCQkJYXV4X2NtZF90YWJsZXBfZW5kID0gZGJfc2hvd19jbWRfZW5kOw0K
IAkJICAgIH0NCiANCiAJCSAgICB0ID0gZGJfcmVhZF90b2tlbigpOw0KIAkJICAgIGlmICh0ICE9
IHRJREVOVCkgew0KIAkJCWRiX2NtZF9saXN0KGNtZF90YWJsZSwgYXV4X2NtZF90YWJsZXAsIGF1
eF9jbWRfdGFibGVwX2VuZCk7DQogCQkJZGJfZmx1c2hfbGV4KCk7DQogCQkJcmV0dXJuOw0KIAkJ
ICAgIH0NCiAJCX0NCiAJICAgIH0NCiANCiAJICAgIGlmICgoY21kLT5mbGFnICYgQ1NfT1dOKSA9
PSAwKSB7DQogCQkvKg0KIAkJICogU3RhbmRhcmQgc3ludGF4Og0KIAkJICogY29tbWFuZCBbL21v
ZGlmaWVyXSBbYWRkcl0gWyxjb3VudF0NCkBAIC0zNjAsMzAgKzM3NCwxMzggQEAgZGJfY29tbWFu
ZChsYXN0X2NtZHAsIGNtZF90YWJsZSwgYXV4X2NtZA0KIAkJfQ0KIAkJZWxzZSB7DQogCQkgICAg
ZGJfZG90ID0gZGJfbmV4dDsNCiAJCX0NCiAJICAgIH0NCiAJICAgIGVsc2Ugew0KIAkJLyoNCiAJ
CSAqIElmIGNvbW1hbmQgZG9lcyBub3QgY2hhbmdlIGRvdCwNCiAJCSAqIHNldCAnbmV4dCcgbG9j
YXRpb24gdG8gYmUgdGhlIHNhbWUuDQogCQkgKi8NCiAJCWRiX25leHQgPSBkYl9kb3Q7DQogCSAg
ICB9DQogCX0NCiB9DQogDQorDQoraW50DQorZGJfY21kX2FkZChzdHJ1Y3QgY29tbWFuZCAqKnNl
dCwgc3RydWN0IGNvbW1hbmQgKipzZXRfZW5kLCBib29sZWFuX3QgaXNfc2hvdykNCit7DQorCXN0
cnVjdCBjb21tYW5kICoqbmV3c2V0LCAqKm5ld3NldF9lbmQ7DQorCXN0cnVjdCBjb21tYW5kICoq
Km9sZHNldCwgKioqb2xkc2V0X2VuZDsNCisJc3RydWN0IGNvbW1hbmQgKipjcHAsICoqeHBwOw0K
KwlpbnQgKmlzX21hbGxvY2Q7DQorCXNpemVfdCBvbGRfY291bnQsIG5ld19jb3VudCwgaG9sZXM7
DQorDQorCWlmIChpc19zaG93KSB7DQorCQlvbGRzZXQgPSAmZGJfc2hvd19jbWRfc3RhcnQ7DQor
CQlvbGRzZXRfZW5kID0gJmRiX3Nob3dfY21kX2VuZDsNCisJCWlzX21hbGxvY2QgPSAmZGJfc2hv
d19jbWRfaXNfbWFsbG9jZDsNCisJfSBlbHNlIHsNCisJCW9sZHNldCA9ICZkYl9jbWRfc3RhcnQ7
DQorCQlvbGRzZXRfZW5kID0gJmRiX2NtZF9lbmQ7DQorCQlpc19tYWxsb2NkID0gJmRiX2NtZF9p
c19tYWxsb2NkOw0KKwl9DQorDQorCW5ld19jb3VudCA9IHNldF9lbmQgLSBzZXQ7DQorCW9sZF9j
b3VudCA9ICpvbGRzZXRfZW5kIC0gKm9sZHNldDsNCisJaG9sZXMgPSAwOw0KKw0KKwlmb3IgKGNw
cCA9ICpvbGRzZXQ7IGNwcCA8ICpvbGRzZXRfZW5kOyBjcHArKykgew0KKwkJaWYgKCpjcHAgPT0g
TlVMTCkNCisJCQlob2xlcysrOw0KKwl9DQorDQorCWlmIChuZXdfY291bnQgPiBob2xlcykgew0K
KwkJc2l6ZV90IGNvdW50Ow0KKw0KKwkJY291bnQgPSBvbGRfY291bnQgLSBob2xlcyArIG5ld19j
b3VudDsNCisJCW5ld3NldCA9IG1hbGxvYyhjb3VudCAqIHNpemVvZigqY3BwKSwgTV9URU1QLCBN
X05PV0FJVCk7DQorCQlpZiAobmV3c2V0ID09IE5VTEwpDQorCQkJcmV0dXJuIEVOT01FTTsNCisJ
CW5ld3NldF9lbmQgPSBuZXdzZXQgKyBjb3VudDsNCisJfSBlbHNlIHsNCisJCW5ld3NldCA9ICpv
bGRzZXQ7DQorCQluZXdzZXRfZW5kID0gKm9sZHNldF9lbmQ7DQorCX0NCisNCisJeHBwID0gbmV3
c2V0Ow0KKwlmb3IgKGNwcCA9ICpvbGRzZXQ7IGNwcCA8ICpvbGRzZXRfZW5kOyBjcHArKykgew0K
KwkJaWYgKCpjcHAgIT0gTlVMTCkNCisJCQkqeHBwKysgPSAqY3BwOw0KKwl9DQorCWZvciAoY3Bw
ID0gc2V0OyBjcHAgPCBzZXRfZW5kOyBjcHArKykNCisJCSp4cHArKyA9ICpjcHA7DQorCXdoaWxl
ICh4cHAgPCBuZXdzZXRfZW5kKQ0KKwkgICAgICAgKnhwcCsrID0gTlVMTDsNCisNCisJY3BwID0g
Km9sZHNldDsNCisNCisJLyoNCisJICogVXNpbmcgdGhlIGRlYnVnZ2VyIG92ZXIgdGhlc2UgdHdv
IGFzc2lnbm1lbnRzIHdvdWxkIGJlIGENCisJICogYmFkIGlkZWEuDQorCSAqLw0KKwkqb2xkc2V0
ID0gbmV3c2V0Ow0KKwkqb2xkc2V0X2VuZCA9IG5ld3NldF9lbmQ7DQorDQorCWlmIChuZXdfY291
bnQgPiBob2xlcykgew0KKwkJaWYgKCppc19tYWxsb2NkKQ0KKwkJCWZyZWUoY3BwLCBNX1RFTVAp
Ow0KKwkJKmlzX21hbGxvY2QgPSAxOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lk
DQorZGJfY21kX3JlbShzdHJ1Y3QgY29tbWFuZCAqKnNldCwgc3RydWN0IGNvbW1hbmQgKipzZXRf
ZW5kLCBib29sZWFuX3QgaXNfc2hvdykNCit7DQorCXN0cnVjdCBjb21tYW5kICoqb2xkc2V0LCAq
Km9sZHNldF9lbmQ7DQorCXN0cnVjdCBjb21tYW5kICoqY3BwLCAqKnhwcDsNCisJc2l6ZV90IG5l
d19jb3VudCwgaG9sZXM7DQorDQorCW5ld19jb3VudCA9IHNldF9lbmQgLSBzZXQ7DQorCWlmIChp
c19zaG93KSB7DQorCQlvbGRzZXQgPSBkYl9zaG93X2NtZF9zdGFydDsNCisJCW9sZHNldF9lbmQg
PSBkYl9zaG93X2NtZF9lbmQ7DQorCX0gZWxzZSB7DQorCQlvbGRzZXQgPSBkYl9jbWRfc3RhcnQ7
DQorCQlvbGRzZXRfZW5kID0gZGJfY21kX2VuZDsNCisJfQ0KKw0KKwl4cHAgPSBvbGRzZXQ7DQor
CWhvbGVzID0gMDsNCisJZm9yIChjcHAgPSBzZXQ7IGNwcCA8IHNldF9lbmQ7IGNwcCsrKSB7DQor
CQkvKg0KKwkJICogRmluZCAqY3BwLiAgSXRlbXMgd2VyZSBjb3BpZWQgaW50byB0aGUgZ2xvYmFs
IHNldA0KKwkJICogaW4gb3JkZXIsIHNvIHRoZXkgc2hvdWxkIGJlIGZvdW5kIGluIG9yZGVyLg0K
KwkJICovDQorCQlmb3IgKDsgeHBwIDwgb2xkc2V0X2VuZDsgeHBwKyspIHsNCisJCQlpZiAoKnhw
cCA9PSAqY3BwKSB7DQorCQkJCSp4cHAgPSBOVUxMOw0KKwkJCQlob2xlcysrOw0KKwkJCQlicmVh
azsNCisJCQl9DQorCQl9DQorCX0NCisNCisJaWYgKGhvbGVzICE9IG5ld19jb3VudCkNCisJCXBy
aW50ZigiJXMgZm91bmQgJXpkICVzY21kJ3M7IHRoZXJlIHNob3VsZCBiZSAlemQuXG4iLA0KKwkJ
ICAgIF9fZnVuY19fLCBob2xlcywgaXNfc2hvdyA/ICJzaG93XyIgOiAiIiwgbmV3X2NvdW50KTsN
Cit9DQorDQorDQogLyoNCiAgKiAnc2hvdycgY29tbWFuZHMNCiAgKi8NCiANCiBzdGF0aWMgc3Ry
dWN0IGNvbW1hbmQgZGJfc2hvd19hbGxfY21kc1tdID0gew0KIAl7ICJwcm9jcyIsCWRiX3BzLAkJ
CTAsCTAgfSwNCiAJeyAoY2hhciAqKTAgfQ0KIH07DQogDQogc3RhdGljIHN0cnVjdCBjb21tYW5k
IGRiX3Nob3dfY21kc1tdID0gew0KIAl7ICJhbGwiLAkwLAkJCTAsCWRiX3Nob3dfYWxsX2NtZHMg
fSwNCiAJeyAicmVnaXN0ZXJzIiwJZGJfc2hvd19yZWdzLAkJMCwJMCB9LA0KIAl7ICJicmVha3Mi
LAlkYl9saXN0YnJlYWtfY21kLCAJMCwJMCB9LA0KIAl7ICJ0aHJlYWRzIiwJZGJfc2hvd190aHJl
YWRzLAkwLAkwIH0sDQogCXsgKGNoYXIgKikwLCB9DQpAQCAtNDQ0LDMxICs1NjYsMzEgQEAgZGJf
Y29tbWFuZF9sb29wKCkNCiAJLyoNCiAJICogSW5pdGlhbGl6ZSAncHJldicgYW5kICduZXh0JyB0
byBkb3QuDQogCSAqLw0KIAlkYl9wcmV2ID0gZGJfZG90Ow0KIAlkYl9uZXh0ID0gZGJfZG90Ow0K
IA0KIAlkYl9jbWRfbG9vcF9kb25lID0gMDsNCiAJd2hpbGUgKCFkYl9jbWRfbG9vcF9kb25lKSB7
DQogCSAgICBpZiAoZGJfcHJpbnRfcG9zaXRpb24oKSAhPSAwKQ0KIAkJZGJfcHJpbnRmKCJcbiIp
Ow0KIA0KIAkgICAgZGJfcHJpbnRmKCJkYj4gIik7DQogCSAgICAodm9pZCkgZGJfcmVhZF9saW5l
KCk7DQogDQogCSAgICBkYl9jb21tYW5kKCZkYl9sYXN0X2NvbW1hbmQsIGRiX2NvbW1hbmRfdGFi
bGUsDQotCQkgICAgICAgU0VUX0JFR0lOKGRiX2NtZF9zZXQpLCBTRVRfTElNSVQoZGJfY21kX3Nl
dCkpOw0KKwkJICAgICAgIGRiX2NtZF9zdGFydCwgZGJfY21kX2VuZCk7DQogCX0NCiB9DQogDQog
dm9pZA0KIGRiX2Vycm9yKHMpDQogCWNvbnN0IGNoYXIgKnM7DQogew0KIAlpZiAocykNCiAJICAg
IGRiX3ByaW50ZigiJXMiLCBzKTsNCiAJZGJfZmx1c2hfbGV4KCk7DQogCWtkYl9yZWVudGVyKCk7
DQogfQ0KIA0KIA0KIC8qDQo=


--=-fq7uZMe0OJhocqSP8KeS--



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