Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Jul 2007 04:19:11 -0400
From:      "Brian Chu" <chub@freebsd.org>
To:        freebsd-fs@freebsd.org, "Kostik Belousov" <kostikbel@gmail.com>
Subject:   msdosfs header unification patch
Message-ID:  <47a4f3080707130119xbee4477y3e96d27763f793aa@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
------=_Part_31586_12249243.1184314751446
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi fs,

The included diff is the work I've done on header consolidation in
msdosfs.  The three areas I concentrated on where:

- sys/fs/msdosfs/
- sys/geom/label/g_label_msdosfs.*
- sbin/fsck_msdosfs/

I decided to preserve the headers in sys/fs/msdosfs since the bulk of
the code lives there and is most widely understood (don't want to be
pulling the rug from under other developers here).

There were several places where a meta-structure describing
FAT12/FAT16/FAT32 bootsectors and bpb's were kept intact because they
were more compact than the actual on disk bs/bpb's.

Please feel free to comment!

Thanks,
Brian

------=_Part_31586_12249243.1184314751446
Content-Type: application/octet-stream; name=patch-chub-msdosfs-unifiedheaders
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f42e4psv
Content-Disposition: attachment; filename="patch-chub-msdosfs-unifiedheaders"

LS0tIC8vZGVwb3QvcHJvamVjdHMvc29jMjAwNy9jaHViLW1zZG9zZnMyL3NiaW4vZnNja19tc2Rv
c2ZzL2Jvb3QuYwkyMDA3LzA2LzI5IDAwOjQyOjQyCisrKyAvL2RlcG90L3Byb2plY3RzL3NvYzIw
MDcvY2h1Yi1tc2Rvc2ZzMi9zYmluL2ZzY2tfbXNkb3Nmcy9ib290LmMJMjAwNy8wNy8wOCAwODoy
ODo1MApAQCAtMzAsOCArMzAsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8c3lz
L2NkZWZzLmg+CiAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpZm5kZWYgbGludAogX19SQ1NJ
RCgiJE5ldEJTRDogYm9vdC5jLHYgMS45IDIwMDMvMDcvMjQgMTk6MjU6NDYgd3MgRXhwICQiKTsK
IHN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPQpAQCAtNDQsMTMxICs0NCwxNjQgQEAKICNpbmNs
dWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCisjaW5jbHVkZSA8ZnMvbXNkb3Nm
cy9ib290c2VjdC5oPgorI2luY2x1ZGUgPGZzL21zZG9zZnMvYnBiLmg+CiAjaW5jbHVkZSAiZXh0
LmgiCiAjaW5jbHVkZSAiZnN1dGlsLmgiCiAKIGludAotcmVhZGJvb3QoZG9zZnMsIGJvb3QpCi0J
aW50IGRvc2ZzOwotCXN0cnVjdCBib290YmxvY2sgKmJvb3Q7CityZWFkYm9vdChpbnQgZG9zZnMs
IHN0cnVjdCBib290YmxvY2sgKmJvb3QpCiB7Ci0JdV9jaGFyIGJsb2NrW0RPU0JPT1RCTE9DS1NJ
WkVdOwotCXVfY2hhciBmc2luZm9bMiAqIERPU0JPT1RCTE9DS1NJWkVdOwotCXVfY2hhciBiYWNr
dXBbRE9TQk9PVEJMT0NLU0laRV07CisgIHVuaW9uIGJvb3RzZWN0b3IgYnVmZmVyOworICB1bmlv
biBib290c2VjdG9yIGJhY2t1cDsKKyAgc3RydWN0IGJ5dGVfYnBiNTAgKnBmYXQ1MDsKKyAgc3Ry
dWN0IGJ5dGVfYnBiNzEwICpwZmF0NzEwOworICBzdHJ1Y3QgYnl0ZV9FeHRib290ICpwZmF0ZXh0
OworICBzdHJ1Y3QgZnNpbmZvIGZzc3RydWN0OwogCWludCByZXQgPSBGU09LOwogCQotCWlmIChy
ZWFkKGRvc2ZzLCBibG9jaywgc2l6ZW9mIGJsb2NrKSA8IHNpemVvZiBibG9jaykgeworCWlmIChy
ZWFkKGRvc2ZzLCAmYnVmZmVyLCBzaXplb2YodW5pb24gYm9vdHNlY3RvcikpCisgICAgICA8IHNp
emVvZih1bmlvbiBib290c2VjdG9yKSkgewogCQlwZXJyb3IoImNvdWxkIG5vdCByZWFkIGJvb3Qg
YmxvY2siKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQogCi0JaWYgKGJsb2NrWzUxMF0gIT0gMHg1
NSB8fCBibG9ja1s1MTFdICE9IDB4YWEpIHsKLQkJcGZhdGFsKCJJbnZhbGlkIHNpZ25hdHVyZSBp
biBib290IGJsb2NrOiAlMDJ4JTAyeCIsIGJsb2NrWzUxMV0sIGJsb2NrWzUxMF0pOworCWlmIChi
dWZmZXIuYnM1MC5ic0Jvb3RTZWN0U2lnMCAhPSBCT09UU0lHMCB8fAorICAgICAgYnVmZmVyLmJz
NTAuYnNCb290U2VjdFNpZzEgIT0gQk9PVFNJRzEpIHsKKwkJcGZhdGFsKCJJbnZhbGlkIHNpZ25h
dHVyZSBpbiBib290IGJsb2NrOiAlMDJ4JTAyeCIsCisgICAgICAgICAgIGJ1ZmZlci5iczUwLmJz
Qm9vdFNlY3RTaWcxLAorICAgICAgICAgICBidWZmZXIuYnM1MC5ic0Jvb3RTZWN0U2lnMCk7CiAJ
CXJldHVybiBGU0ZBVEFMOwogCX0KKyAgCisgIC8qIHNldCB0aGUgYnBiIHN0cnVjdHMgdG8gdGhl
IGJvb3Qgc2VjdG9yJ3MgYnBiICovCisgIHBmYXQ1MCA9IChzdHJ1Y3QgYnl0ZV9icGI1MCAqKSZi
dWZmZXIuYnM1MC5ic0JQQjsKKyAgcGZhdDcxMCA9IChzdHJ1Y3QgYnl0ZV9icGI3MTAgKikmYnVm
ZmVyLmJzNzEwLmJzQlBCOwogCi0JbWVtc2V0KGJvb3QsIDAsIHNpemVvZiAqYm9vdCk7CisJbWVt
c2V0KGJvb3QsIDAsIHNpemVvZihzdHJ1Y3QgYm9vdGJsb2NrKSk7CiAJYm9vdC0+VmFsaWRGYXQg
PSAtMTsKIAotCS8qIGRlY29kZSBiaW9zIHBhcmFtZXRlciBibG9jayAqLwotCWJvb3QtPkJ5dGVz
UGVyU2VjID0gYmxvY2tbMTFdICsgKGJsb2NrWzEyXSA8PCA4KTsKLQlib290LT5TZWNQZXJDbHVz
dCA9IGJsb2NrWzEzXTsKLQlib290LT5SZXNTZWN0b3JzID0gYmxvY2tbMTRdICsgKGJsb2NrWzE1
XSA8PCA4KTsKLQlib290LT5GQVRzID0gYmxvY2tbMTZdOwotCWJvb3QtPlJvb3REaXJFbnRzID0g
YmxvY2tbMTddICsgKGJsb2NrWzE4XSA8PCA4KTsKLQlib290LT5TZWN0b3JzID0gYmxvY2tbMTld
ICsgKGJsb2NrWzIwXSA8PCA4KTsKLQlib290LT5NZWRpYSA9IGJsb2NrWzIxXTsKLQlib290LT5G
QVRzbWFsbCA9IGJsb2NrWzIyXSArIChibG9ja1syM10gPDwgOCk7Ci0JYm9vdC0+U2VjUGVyVHJh
Y2sgPSBibG9ja1syNF0gKyAoYmxvY2tbMjVdIDw8IDgpOwotCWJvb3QtPkhlYWRzID0gYmxvY2tb
MjZdICsgKGJsb2NrWzI3XSA8PCA4KTsKLQlib290LT5IaWRkZW5TZWNzID0gYmxvY2tbMjhdICsg
KGJsb2NrWzI5XSA8PCA4KSArIChibG9ja1szMF0gPDwgMTYpICsgKGJsb2NrWzMxXSA8PCAyNCk7
Ci0JYm9vdC0+SHVnZVNlY3RvcnMgPSBibG9ja1szMl0gKyAoYmxvY2tbMzNdIDw8IDgpICsgKGJs
b2NrWzM0XSA8PCAxNikgKyAoYmxvY2tbMzVdIDw8IDI0KTsKKwkvKiBkZWNvZGUgYmlvcyBwYXJh
bWV0ZXIgYmxvY2sgYW5kIHN0b3JlIGluIGEgY29tcGFjdGVkCisgICAqIGFyY2hpdGVjdHVyZSBp
bmRlcGVuZGVudCBkYXRhIHN0cnVjdHVyZSBmb3IgZnV0dXJlIHVzZQorICAgKi8KKwlib290LT5C
eXRlc1BlclNlYyA9IGdldHVzaG9ydChwZmF0NTAtPmJwYkJ5dGVzUGVyU2VjKTsKKwlib290LT5T
ZWNQZXJDbHVzdCA9IHBmYXQ1MC0+YnBiU2VjUGVyQ2x1c3Q7CisJYm9vdC0+UmVzU2VjdG9ycyA9
IGdldHVzaG9ydChwZmF0NTAtPmJwYlJlc1NlY3RvcnMpOworCWJvb3QtPkZBVHMgPSBwZmF0NTAt
PmJwYkZBVHM7CisJYm9vdC0+Um9vdERpckVudHMgPSBnZXR1c2hvcnQocGZhdDUwLT5icGJSb290
RGlyRW50cyk7CisJYm9vdC0+U2VjdG9ycyA9IGdldHVzaG9ydChwZmF0NTAtPmJwYlNlY3RvcnMp
OworCWJvb3QtPk1lZGlhID0gcGZhdDUwLT5icGJNZWRpYTsKKwlib290LT5TZWNQZXJUcmFjayA9
IGdldHVzaG9ydChwZmF0NTAtPmJwYlNlY1BlclRyYWNrKTsKKwlib290LT5IZWFkcyA9IGdldHVz
aG9ydChwZmF0NTAtPmJwYkhlYWRzKTsKKwlib290LT5IaWRkZW5TZWNzID0gZ2V0dWxvbmcocGZh
dDUwLT5icGJIaWRkZW5TZWNzKTsKKwlib290LT5IdWdlU2VjdG9ycyA9IGdldHVsb25nKHBmYXQ1
MC0+YnBiSHVnZVNlY3RvcnMpOwogCi0JYm9vdC0+RkFUc2VjcyA9IGJvb3QtPkZBVHNtYWxsOwor
ICAvKiBmaXJzdCBkZWZhdWx0aW5nIHRvIEZBVDEyL0ZBVDE2IGZvciBudW1iZXIgb2YgRkFUIHNl
Y3RvcnMgKi8KKwlib290LT5GQVRzZWNzID0gZ2V0dXNob3J0KHBmYXQ1MC0+YnBiRkFUc2Vjcyk7
CiAKLQlpZiAoIWJvb3QtPlJvb3REaXJFbnRzKQorCWlmIChib290LT5Sb290RGlyRW50cyA9PSAw
KSB7CisgICAgLyogRkFUMzIgcGFyc2luZyAqLwogCQlib290LT5mbGFncyB8PSBGQVQzMjsKLQlp
ZiAoYm9vdC0+ZmxhZ3MgJiBGQVQzMikgewotCQlib290LT5GQVRzZWNzID0gYmxvY2tbMzZdICsg
KGJsb2NrWzM3XSA8PCA4KQotCQkJCSsgKGJsb2NrWzM4XSA8PCAxNikgKyAoYmxvY2tbMzldIDw8
IDI0KTsKLQkJaWYgKGJsb2NrWzQwXSAmIDB4ODApCi0JCQlib290LT5WYWxpZEZhdCA9IGJsb2Nr
WzQwXSAmIDB4MGY7CisJCWJvb3QtPkZBVHNlY3MgPSBnZXR1bG9uZyhwZmF0NzEwLT5icGJCaWdG
QVRzZWNzKTsKKwkJaWYgKHBmYXQ3MTAtPmJwYkV4dEZsYWdzWzBdICYgMHg4MCkgeworCQkJYm9v
dC0+VmFsaWRGYXQgPSBwZmF0NzEwLT5icGJFeHRGbGFnc1swXSAmIDB4MGY7CisgICAgfQogCiAJ
CS8qIGNoZWNrIHZlcnNpb24gbnVtYmVyOiAqLwotCQlpZiAoYmxvY2tbNDJdIHx8IGJsb2NrWzQz
XSkgewotCQkJLyogQ29ycmVjdD8JCQkJWFhYICovCisgICAgaWYgKHBmYXQ3MTAtPmJwYkZTVmVy
c1swXSAhPSAwIHx8CisgICAgICAgIHBmYXQ3MTAtPmJwYkZTVmVyc1sxXSAhPSAwKSB7CiAJCQlw
ZmF0YWwoIlVua25vd24gZmlsZSBzeXN0ZW0gdmVyc2lvbjogJXguJXgiLAotCQkJICAgICAgIGJs
b2NrWzQzXSwgYmxvY2tbNDJdKTsKKwkJCSAgICAgICBwZmF0NzEwLT5icGJGU1ZlcnNbMV0sCisg
ICAgICAgICAgICAgcGZhdDcxMC0+YnBiRlNWZXJzWzBdKTsKIAkJCXJldHVybiBGU0ZBVEFMOwog
CQl9Ci0JCWJvb3QtPlJvb3RDbCA9IGJsb2NrWzQ0XSArIChibG9ja1s0NV0gPDwgOCkKLQkJCSAg
ICAgICArIChibG9ja1s0Nl0gPDwgMTYpICsgKGJsb2NrWzQ3XSA8PCAyNCk7Ci0JCWJvb3QtPkZT
SW5mbyA9IGJsb2NrWzQ4XSArIChibG9ja1s0OV0gPDwgOCk7Ci0JCWJvb3QtPkJhY2t1cCA9IGJs
b2NrWzUwXSArIChibG9ja1s1MV0gPDwgOCk7CisKKwkJYm9vdC0+Um9vdENsID0gZ2V0dWxvbmco
cGZhdDcxMC0+YnBiUm9vdENsdXN0KTsKKwkJYm9vdC0+RlNJbmZvID0gZ2V0dXNob3J0KHBmYXQ3
MTAtPmJwYkZTSW5mbyk7CisJCWJvb3QtPkJhY2t1cCA9IGdldHVzaG9ydChwZmF0NzEwLT5icGJC
YWNrdXApOwogCiAJCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQ
ZXJTZWMsIFNFRUtfU0VUKQotCQkgICAgIT0gYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJT
ZWMKLQkJICAgIHx8IHJlYWQoZG9zZnMsIGZzaW5mbywgc2l6ZW9mIGZzaW5mbykKLQkJICAgICE9
IHNpemVvZiBmc2luZm8pIHsKKwkJICAgICE9IGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVy
U2VjKSB7CisgICAgICBwZXJyb3IoImNvdWxkIG5vdCBzZWVrIHRvIGZzaW5mbyBibG9jayB0byBy
ZWFkIik7CisgICAgICByZXR1cm4gRlNGQVRBTDsKKyAgICB9CisKKyAgICBpZiAocmVhZChkb3Nm
cywgJmZzc3RydWN0LCBzaXplb2Yoc3RydWN0IGZzaW5mbykpCisgICAgICAgICE9IHNpemVvZihz
dHJ1Y3QgZnNpbmZvKSkgewogCQkJcGVycm9yKCJjb3VsZCBub3QgcmVhZCBmc2luZm8gYmxvY2si
KTsKIAkJCXJldHVybiBGU0ZBVEFMOwogCQl9Ci0JCWlmIChtZW1jbXAoZnNpbmZvLCAiUlJhQSIs
IDQpCi0JCSAgICB8fCBtZW1jbXAoZnNpbmZvICsgMHgxZTQsICJyckFhIiwgNCkKLQkJICAgIHx8
IGZzaW5mb1sweDFmY10KLQkJICAgIHx8IGZzaW5mb1sweDFmZF0KLQkJICAgIHx8IGZzaW5mb1sw
eDFmZV0gIT0gMHg1NQotCQkgICAgfHwgZnNpbmZvWzB4MWZmXSAhPSAweGFhCi0JCSAgICB8fCBm
c2luZm9bMHgzZmNdCi0JCSAgICB8fCBmc2luZm9bMHgzZmRdCi0JCSAgICB8fCBmc2luZm9bMHgz
ZmVdICE9IDB4NTUKLQkJICAgIHx8IGZzaW5mb1sweDNmZl0gIT0gMHhhYSkgeworCisJCWlmICht
ZW1jbXAoZnNzdHJ1Y3QuZnNpc2lnMSwgIlJSYUEiLCA0KSB8fAorCQkgICAgbWVtY21wKGZzc3Ry
dWN0LmZzaXNpZzIsICJyckFhIiwgNCkgfHwKKyAgICAgICAgbWVtY21wKGZzc3RydWN0LmZzaXNp
ZzMsICJcMFwwXDEyNVwyNTIiLCA0KSB8fAorICAgICAgICBtZW1jbXAoZnNzdHJ1Y3QuZnNpc2ln
NCwgIlwwXDBcMTI1XDI1MiIsIDQpKSB7CiAJCQlwd2FybigiSW52YWxpZCBzaWduYXR1cmUgaW4g
ZnNpbmZvIGJsb2NrIik7CisKIAkJCWlmIChhc2soMCwgImZpeCIpKSB7Ci0JCQkJbWVtY3B5KGZz
aW5mbywgIlJSYUEiLCA0KTsKLQkJCQltZW1jcHkoZnNpbmZvICsgMHgxZTQsICJyckFhIiwgNCk7
Ci0JCQkJZnNpbmZvWzB4MWZjXSA9IGZzaW5mb1sweDFmZF0gPSAwOwotCQkJCWZzaW5mb1sweDFm
ZV0gPSAweDU1OwotCQkJCWZzaW5mb1sweDFmZl0gPSAweGFhOwotCQkJCWZzaW5mb1sweDNmY10g
PSBmc2luZm9bMHgzZmRdID0gMDsKLQkJCQlmc2luZm9bMHgzZmVdID0gMHg1NTsKLQkJCQlmc2lu
Zm9bMHgzZmZdID0gMHhhYTsKKyAgICAgICAgbWVtY3B5KGZzc3RydWN0LmZzaXNpZzEsICJSUmFB
IiwgNCk7CisgICAgICAgIG1lbWNweShmc3N0cnVjdC5mc2lzaWcyLCAicnJBYSIsIDQpOworICAg
ICAgICBtZW1jcHkoZnNzdHJ1Y3QuZnNpc2lnMywgIlwwXDBcMTI1XDI1MiIsIDQpOworICAgICAg
ICBtZW1jcHkoZnNzdHJ1Y3QuZnNpc2lnNCwgIlwwXDBcMTI1XDI1MiIsIDQpOworCiAJCQkJaWYg
KGxzZWVrKGRvc2ZzLCBib290LT5GU0luZm8gKiBib290LT5CeXRlc1BlclNlYywgU0VFS19TRVQp
Ci0JCQkJICAgICE9IGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjCi0JCQkJICAgIHx8
IHdyaXRlKGRvc2ZzLCBmc2luZm8sIHNpemVvZiBmc2luZm8pCi0JCQkJICAgICE9IHNpemVvZiBm
c2luZm8pIHsKLQkJCQkJcGVycm9yKCJVbmFibGUgdG8gd3JpdGUgRlNJbmZvIik7CisJCQkJICAg
ICE9IGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjKSB7CisJCQkJCXBlcnJvcigiY291
bGQgbm90IHNlZWsgdG8gZnNpbmZvIGJsb2NrIHRvIGZpeC93cml0ZSIpOworCQkJCQlyZXR1cm4g
RlNGQVRBTDsKKwkJCQl9CisKKyAgICAgICAgaWYgKHdyaXRlKGRvc2ZzLCAmZnNzdHJ1Y3QsIHNp
emVvZihzdHJ1Y3QgZnNpbmZvKSkKKwkJCQkgICAgIT0gc2l6ZW9mKHN0cnVjdCBmc2luZm8pKSB7
CisJCQkJCXBlcnJvcigiY291bGQgbm90IHdyaXRlIGZpeGVkIGZzaW5mbyIpOwogCQkJCQlyZXR1
cm4gRlNGQVRBTDsKIAkJCQl9CisKIAkJCQlyZXQgPSBGU0JPT1RNT0Q7Ci0JCQl9IGVsc2UKKwkJ
CX0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiB3ZSBkaWRuJ3QgZml4IHRoZSBjb3JydXB0ZWQg
RlNJbmZvIGJsb2NrICovCiAJCQkJYm9vdC0+RlNJbmZvID0gMDsKKyAgICAgIH0KIAkJfQotCQlp
ZiAoYm9vdC0+RlNJbmZvKSB7Ci0JCQlib290LT5GU0ZyZWUgPSBmc2luZm9bMHgxZThdICsgKGZz
aW5mb1sweDFlOV0gPDwgOCkKLQkJCQkgICAgICAgKyAoZnNpbmZvWzB4MWVhXSA8PCAxNikKLQkJ
CQkgICAgICAgKyAoZnNpbmZvWzB4MWViXSA8PCAyNCk7Ci0JCQlib290LT5GU05leHQgPSBmc2lu
Zm9bMHgxZWNdICsgKGZzaW5mb1sweDFlZF0gPDwgOCkKLQkJCQkgICAgICAgKyAoZnNpbmZvWzB4
MWVlXSA8PCAxNikKLQkJCQkgICAgICAgKyAoZnNpbmZvWzB4MWVmXSA8PCAyNCk7CisKKwkJaWYg
KGJvb3QtPkZTSW5mbyAhPSAwKSB7CisJCQlib290LT5GU0ZyZWUgPSBnZXR1bG9uZyhmc3N0cnVj
dC5mc2luZnJlZSk7CisJCQlib290LT5GU05leHQgPSBnZXR1bG9uZyhmc3N0cnVjdC5mc2lueHRm
cmVlKTsKIAkJfQogCiAJCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+QmFja3VwICogYm9vdC0+Qnl0
ZXNQZXJTZWMsIFNFRUtfU0VUKQotCQkgICAgIT0gYm9vdC0+QmFja3VwICogYm9vdC0+Qnl0ZXNQ
ZXJTZWMKLQkJICAgIHx8IHJlYWQoZG9zZnMsIGJhY2t1cCwgc2l6ZW9mIGJhY2t1cCkgIT0gc2l6
ZW9mICBiYWNrdXApIHsKKwkJICAgICE9IGJvb3QtPkJhY2t1cCAqIGJvb3QtPkJ5dGVzUGVyU2Vj
KSB7CisJCQlwZXJyb3IoImNvdWxkIG5vdCBzZWVrIHRvIHJlYWQgYmFja3VwIGJvb3RibG9jayIp
OworCQkJcmV0dXJuIEZTRkFUQUw7CisJCX0KKworICAgIGlmIChyZWFkKGRvc2ZzLCAmYmFja3Vw
LCBzaXplb2YodW5pb24gYm9vdHNlY3RvcikpCisgICAgICAgICE9IHNpemVvZih1bmlvbiBib290
c2VjdG9yKSkgewogCQkJcGVycm9yKCJjb3VsZCBub3QgcmVhZCBiYWNrdXAgYm9vdGJsb2NrIik7
CiAJCQlyZXR1cm4gRlNGQVRBTDsKIAkJfQotCQliYWNrdXBbNjVdID0gYmxvY2tbNjVdOwkJCQkv
KiBYWFggKi8KLQkJaWYgKG1lbWNtcChibG9jayArIDExLCBiYWNrdXAgKyAxMSwgNzkpKSB7Ci0J
CQkvKiBDb3JyZWN0PwkJCQkJWFhYICovCisKKyAgICAvLyBuZXZlciB3cml0dGVuIGJhY2sgdG8g
ZGlzaworICAgIC8vYmFja3VwLmJzNzEwLmJzRXh0LmV4UmVzZXJ2ZWQxID0gYnVmZmVyLmJzNzEw
LmJzRXh0LmV4UmVzZXJ2ZWQxOworCisJCWlmIChtZW1jbXAoYnVmZmVyLmJzNzEwLmJzQlBCLAor
ICAgICAgICAgICAgICAgYmFja3VwLmJzNzEwLmJzQlBCLAorICAgICAgICAgICAgICAgc2l6ZW9m
KHN0cnVjdCBicGI3MTApKSB8fAorICAgICAgICBtZW1jbXAoYnVmZmVyLmJzNzEwLmJzRXh0LAor
ICAgICAgICAgICAgICAgYmFja3VwLmJzNzEwLmJzRXh0LAorICAgICAgICAgICAgICAgc2l6ZW9m
KHN0cnVjdCBleHRib290KSkpIHsKKwogCQkJcGZhdGFsKCJiYWNrdXAgZG9lc24ndCBjb21wYXJl
IHRvIHByaW1hcnkgYm9vdGJsb2NrIik7CiAJCQlpZiAoYWx3YXlzbm8pCiAJCQkJcGZhdGFsKCJc
biIpOwogCQkJZWxzZQogCQkJCXJldHVybiBGU0ZBVEFMOwogCQl9Ci0JCS8qIENoZWNrIGJhY2t1
cCBGU0luZm8/CQkJCQlYWFggKi8KKworICAgIC8qIFVubmVjZXNzYXJ5IHRvIGNoZWNrIHRoZSBi
YWNrdXAgRlNJbmZvIGJlY2F1c2UgdGhlcmUgaXNuJ3QKKyAgICAgKiBhbiBwaHlzaWNhbCBiYWNr
dXAgY29weSBvZiB0aGUgRlNJbmZvIGJsb2NrLiAgVGhlcmUncyBvbmx5IGEKKyAgICAgKiBiYWNr
dXAgb2YgdGhlIEZTSW5mbyBibG9jayBudW1iZXIsIHdoaWNoIHdhcyBjaGVja2VkIChic0JQQikg
YWJvdmUuCisgICAgICovCiAJfQogCiAJYm9vdC0+Q2x1c3Rlck9mZnNldCA9IChib290LT5Sb290
RGlyRW50cyAqIDMyICsgYm9vdC0+Qnl0ZXNQZXJTZWMgLSAxKQpAQCAtMTkwLDEzICsyMjMsMTQg
QEAKIAkJYm9vdC0+TnVtU2VjdG9ycyA9IGJvb3QtPlNlY3RvcnM7CiAJfSBlbHNlCiAJCWJvb3Qt
Pk51bVNlY3RvcnMgPSBib290LT5IdWdlU2VjdG9yczsKLQlib290LT5OdW1DbHVzdGVycyA9IChi
b290LT5OdW1TZWN0b3JzIC0gYm9vdC0+Q2x1c3Rlck9mZnNldCkgLyBib290LT5TZWNQZXJDbHVz
dDsKKwlib290LT5OdW1DbHVzdGVycyA9IChib290LT5OdW1TZWN0b3JzIC0gYm9vdC0+Q2x1c3Rl
ck9mZnNldCkKKyAgICAvIGJvb3QtPlNlY1BlckNsdXN0OwogCi0JaWYgKGJvb3QtPmZsYWdzJkZB
VDMyKQorCWlmIChib290LT5mbGFncyAmIEZBVDMyKQogCQlib290LT5DbHVzdE1hc2sgPSBDTFVT
VDMyX01BU0s7Ci0JZWxzZSBpZiAoYm9vdC0+TnVtQ2x1c3RlcnMgPCAoQ0xVU1RfUlNSVkQmQ0xV
U1QxMl9NQVNLKSkKKwllbHNlIGlmIChib290LT5OdW1DbHVzdGVycyA8IChDTFVTVF9SU1JWRCAm
IENMVVNUMTJfTUFTSykpCiAJCWJvb3QtPkNsdXN0TWFzayA9IENMVVNUMTJfTUFTSzsKLQllbHNl
IGlmIChib290LT5OdW1DbHVzdGVycyA8IChDTFVTVF9SU1JWRCZDTFVTVDE2X01BU0spKQorCWVs
c2UgaWYgKGJvb3QtPk51bUNsdXN0ZXJzIDwgKENMVVNUX1JTUlZEICYgQ0xVU1QxNl9NQVNLKSkK
IAkJYm9vdC0+Q2x1c3RNYXNrID0gQ0xVU1QxNl9NQVNLOwogCWVsc2UgewogCQlwZmF0YWwoIkZp
bGVzeXN0ZW0gdG9vIGJpZyAoJXUgY2x1c3RlcnMpIGZvciBub24tRkFUMzIgcGFydGl0aW9uIiwK
QEAgLTIzMCwzMyArMjY0LDM4IEBACiB9CiAKIGludAotd3JpdGVmc2luZm8oZG9zZnMsIGJvb3Qp
Ci0JaW50IGRvc2ZzOwotCXN0cnVjdCBib290YmxvY2sgKmJvb3Q7Cit3cml0ZWZzaW5mbyhpbnQg
ZG9zZnMsIHN0cnVjdCBib290YmxvY2sgKmJvb3QpCiB7CisgIHN0cnVjdCBmc2luZm8gZnNzdHJ1
Y3Q7CiAJdV9jaGFyIGZzaW5mb1syICogRE9TQk9PVEJMT0NLU0laRV07CiAKLQlpZiAobHNlZWso
ZG9zZnMsIGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjLCBTRUVLX1NFVCkKLQkgICAg
IT0gYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMKLQkgICAgfHwgcmVhZChkb3Nmcywg
ZnNpbmZvLCBzaXplb2YgZnNpbmZvKSAhPSBzaXplb2YgZnNpbmZvKSB7Ci0JCXBlcnJvcigiY291
bGQgbm90IHJlYWQgZnNpbmZvIGJsb2NrIik7CisgIGlmIChsc2Vlayhkb3NmcywgYm9vdC0+RlNJ
bmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQorICAgICAgIT0gYm9vdC0+RlNJbmZv
ICogYm9vdC0+Qnl0ZXNQZXJTZWMpIHsKKyAgICBwZXJyb3IoImNvdWxkIG5vdCBzZWVrIHRvIGZz
aW5mbyBibG9jayB0byByZWFkIik7CisgICAgcmV0dXJuIEZTRkFUQUw7CisgIH0KKworICBpZiAo
cmVhZChkb3NmcywgJmZzc3RydWN0LCBzaXplb2Yoc3RydWN0IGZzaW5mbykpCisgICAgICAhPSBz
aXplb2Yoc3RydWN0IGZzaW5mbykpIHsKKyAgICBwZXJyb3IoImNvdWxkIG5vdCByZWFkIGZzaW5m
byBibG9jayIpOworICAgIHJldHVybiBGU0ZBVEFMOworICB9CisKKyAgcHV0dWxvbmcoJmZzc3Ry
dWN0LmZzaW5mcmVlLCBib290LT5GU0ZyZWUpOworICBwdXR1bG9uZygmZnNzdHJ1Y3QuZnNpbnh0
ZnJlZSwgYm9vdC0+RlNOZXh0KTsKKworICBpZiAobHNlZWsoZG9zZnMsIGJvb3QtPkZTSW5mbyAq
IGJvb3QtPkJ5dGVzUGVyU2VjLCBTRUVLX1NFVCkKKyAgICAgICE9IGJvb3QtPkZTSW5mbyAqIGJv
b3QtPkJ5dGVzUGVyU2VjKSB7CisgICAgcGVycm9yKCJjb3VsZCBub3Qgc2VlayB0byBmc2luZm8g
YmxvY2sgdG8gd3JpdGUgbmV3IGJsb2NrIik7CisgICAgcmV0dXJuIEZTRkFUQUw7CisgIH0KKwor
CWlmICh3cml0ZShkb3NmcywgJmZzc3RydWN0LCBzaXplb2Yoc3RydWN0IGZzaW5mbykpCisJICAg
ICE9IHNpemVvZihzdHJ1Y3QgZnNpbmZvKSkgeworICAgIHBlcnJvcigiY291bGQgbm90IHdyaXRl
IGZpeGVkIGZzaW5mbyIpOwogCQlyZXR1cm4gRlNGQVRBTDsKIAl9Ci0JZnNpbmZvWzB4MWU4XSA9
ICh1X2NoYXIpYm9vdC0+RlNGcmVlOwotCWZzaW5mb1sweDFlOV0gPSAodV9jaGFyKShib290LT5G
U0ZyZWUgPj4gOCk7Ci0JZnNpbmZvWzB4MWVhXSA9ICh1X2NoYXIpKGJvb3QtPkZTRnJlZSA+PiAx
Nik7Ci0JZnNpbmZvWzB4MWViXSA9ICh1X2NoYXIpKGJvb3QtPkZTRnJlZSA+PiAyNCk7Ci0JZnNp
bmZvWzB4MWVjXSA9ICh1X2NoYXIpYm9vdC0+RlNOZXh0OwotCWZzaW5mb1sweDFlZF0gPSAodV9j
aGFyKShib290LT5GU05leHQgPj4gOCk7Ci0JZnNpbmZvWzB4MWVlXSA9ICh1X2NoYXIpKGJvb3Qt
PkZTTmV4dCA+PiAxNik7Ci0JZnNpbmZvWzB4MWVmXSA9ICh1X2NoYXIpKGJvb3QtPkZTTmV4dCA+
PiAyNCk7Ci0JaWYgKGxzZWVrKGRvc2ZzLCBib290LT5GU0luZm8gKiBib290LT5CeXRlc1BlclNl
YywgU0VFS19TRVQpCi0JICAgICE9IGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjCi0J
ICAgIHx8IHdyaXRlKGRvc2ZzLCBmc2luZm8sIHNpemVvZiBmc2luZm8pCi0JICAgICE9IHNpemVv
ZiBmc2luZm8pIHsKLQkJcGVycm9yKCJVbmFibGUgdG8gd3JpdGUgRlNJbmZvIik7Ci0JCXJldHVy
biBGU0ZBVEFMOwotCX0KKwogCS8qCiAJICogVGVjaG5pY2FsbHksIHdlIHNob3VsZCByZXR1cm4g
RlNCT09UTU9EIGhlcmUuCiAJICoKQEAgLTI2NCw3ICszMDMsNyBAQAogCSAqIHN1cHBvcnQgZm9y
IEZBVDMyKSBkb2Vzbid0IG1haW50YWluIHRoZSBGU0lORk8gYmxvY2sKIAkgKiBjb3JyZWN0bHks
IGl0IGhhcyB0byBiZSBmaXhlZCBwcmV0dHkgb2Z0ZW4uCiAJICoKLQkgKiBUaGVyZWZvciwgd2Ug
aGFuZGxlIHRoZSBGU0lORk8gYmxvY2sgb25seSBpbmZvcm1hbGx5LAorCSAqIFRoZXJlZm9yZSwg
d2UgaGFuZGxlIHRoZSBGU0lORk8gYmxvY2sgb25seSBpbmZvcm1hbGx5LAogCSAqIGZpeGluZyBp
dCBpZiBuZWNlc3NhcnksIGJ1dCBvdGhlcndpc2UgaWdub3JpbmcgdGhlCiAJICogZmFjdCB0aGF0
IGl0IHdhcyBpbmNvcnJlY3QuCiAJICovCi0tLSAvL2RlcG90L3Byb2plY3RzL3NvYzIwMDcvY2h1
Yi1tc2Rvc2ZzMi9zYmluL2ZzY2tfbXNkb3Nmcy9kb3Nmcy5oCTIwMDcvMDYvMjkgMDA6NDI6NDIK
KysrIC8vZGVwb3QvcHJvamVjdHMvc29jMjAwNy9jaHViLW1zZG9zZnMyL3NiaW4vZnNja19tc2Rv
c2ZzL2Rvc2ZzLmgJMjAwNy8wNy8wOCAwODowNTo1NQpAQCAtNTIsNyArNTIsNiBAQAogCXVfaW50
CUZBVHM7CQkJLyogbnVtYmVyIG9mIEZBVHMgKi8KIAl1X2ludAlSb290RGlyRW50czsJCS8qIG51
bWJlciBvZiByb290IGRpcmVjdG9yeSBlbnRyaWVzICovCiAJdV9pbnQJTWVkaWE7CQkJLyogbWVk
aWEgZGVzY3JpcHRvciAqLwotCXVfaW50CUZBVHNtYWxsOwkJLyogbnVtYmVyIG9mIHNlY3RvcnMg
cGVyIEZBVCAqLwogCXVfaW50CVNlY1BlclRyYWNrOwkJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8K
IAl1X2ludAlIZWFkczsJCQkvKiBudW1iZXIgb2YgaGVhZHMgKi8KIAl1X2ludDMyX3QgU2VjdG9y
czsJCS8qIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzICovCi0tLSAvL2RlcG90L3Byb2plY3RzL3Nv
YzIwMDcvY2h1Yi1tc2Rvc2ZzMi9zeXMvZnMvbXNkb3Nmcy9ib290c2VjdC5oCTIwMDcvMDYvMjkg
MDA6NDI6NDIKKysrIC8vZGVwb3QvcHJvamVjdHMvc29jMjAwNy9jaHViLW1zZG9zZnMyL3N5cy9m
cy9tc2Rvc2ZzL2Jvb3RzZWN0LmgJMjAwNy8wNy8wOCAwODowMTowOQpAQCAtMSw2ICsxLDkgQEAK
IC8qICRGcmVlQlNEOiBzcmMvc3lzL2ZzL21zZG9zZnMvYm9vdHNlY3QuaCx2IDEuMTMgMjAwNS8w
OS8yOSAxNDowOTo0NiBwZWFkYXIgRXhwICQgKi8KIC8qCSROZXRCU0Q6IGJvb3RzZWN0LmgsdiAx
LjkgMTk5Ny8xMS8xNyAxNTozNjoxNyB3cyBFeHAgJAkqLwogCisjaWZuZGVmIF9GU19NU0RPU0ZT
X0JPT1RTRUNUX0gKKyNkZWZpbmUgX0ZTX01TRE9TRlNfQk9PVFNFQ1RfSAorCiAvKi0KICAqIFdy
aXR0ZW4gYnkgUGF1bCBQb3BlbGthIChwYXVscEB1dHMuYW1kYWhsLmNvbSkKICAqCkBAIC0xNyw2
ICsyMCw4IEBACiAgKiBPY3RvYmVyIDE5OTIKICAqLwogCisjaW5jbHVkZSA8ZnMvbXNkb3Nmcy9i
cGIuaD4KKwogLyoKICAqIEZvcm1hdCBvZiBhIGJvb3Qgc2VjdG9yLiAgVGhpcyBpcyB0aGUgZmly
c3Qgc2VjdG9yIG9uIGEgRE9TIGZsb3BweSBkaXNrCiAgKiBvciB0aGUgZmlzdCBzZWN0b3Igb2Yg
YSBwYXJ0aXRpb24gb24gYSBoYXJkIGRpc2suICBCdXQsIGl0IGlzIG5vdCB0aGUKQEAgLTI1LDcg
KzMwLDggQEAKIHN0cnVjdCBib290c2VjdG9yMzMgewogCXVfaW50OF90CWJzSnVtcFszXTsJCS8q
IGp1bXAgaW5zdCBFOXh4eHggb3IgRUJ4eDkwICovCiAJaW50OF90CQlic09lbU5hbWVbOF07CQkv
KiBPRU0gbmFtZSBhbmQgdmVyc2lvbiAqLwotCWludDhfdAkJYnNCUEJbMTldOwkJLyogQklPUyBw
YXJhbWV0ZXIgYmxvY2sgKi8KKyAgLy8JaW50OF90CQlic0JQQlsxOV07CQkvKiBCSU9TIHBhcmFt
ZXRlciBibG9jayAqLworICBzdHJ1Y3QgYnBiMzMgYnNCUEI7CQkvKiBCSU9TIHBhcmFtZXRlciBi
bG9jayAqLwogCWludDhfdAkJYnNEcml2ZU51bWJlcjsJCS8qIGRyaXZlIG51bWJlciAoMHg4MCkg
Ki8KIAlpbnQ4X3QJCWJzQm9vdENvZGVbNDc5XTsJLyogcGFkIHNvIHN0cnVjdCBpcyA1MTJiICov
CiAJdV9pbnQ4X3QJYnNCb290U2VjdFNpZzA7CkBAIC0zNCwxMCArNDAsMjAgQEAKICNkZWZpbmUJ
Qk9PVFNJRzEJMHhhYQogfTsKIAorI2RlZmluZQlFWEJPT1RTSUcJMHgyOQogc3RydWN0IGV4dGJv
b3QgewogCWludDhfdAkJZXhEcml2ZU51bWJlcjsJCS8qIGRyaXZlIG51bWJlciAoMHg4MCkgKi8K
IAlpbnQ4X3QJCWV4UmVzZXJ2ZWQxOwkJLyogcmVzZXJ2ZWQgKi8KIAlpbnQ4X3QJCWV4Qm9vdFNp
Z25hdHVyZTsJLyogZXh0LiBib290IHNpZ25hdHVyZSAoMHgyOSkgKi8KKwl1X2ludDMyX3QJZXhW
b2x1bWVJRDsJCS8qIHZvbHVtZSBJRCBudW1iZXIgKi8KKwlpbnQ4X3QJCWV4Vm9sdW1lTGFiZWxb
MTFdOwkvKiB2b2x1bWUgbGFiZWwgKi8KKwlpbnQ4X3QJCWV4RmlsZVN5c1R5cGVbOF07CS8qIGZz
IHR5cGUgKEZBVDEyIG9yIEZBVDE2KSAqLworfTsKKworc3RydWN0IGJ5dGVfZXh0Ym9vdCB7CisJ
aW50OF90CQlleERyaXZlTnVtYmVyOwkJLyogZHJpdmUgbnVtYmVyICgweDgwKSAqLworCWludDhf
dAkJZXhSZXNlcnZlZDE7CQkvKiByZXNlcnZlZCAqLworCWludDhfdAkJZXhCb290U2lnbmF0dXJl
OwkvKiBleHQuIGJvb3Qgc2lnbmF0dXJlICgweDI5KSAqLwogI2RlZmluZQlFWEJPT1RTSUcJMHgy
OQogCWludDhfdAkJZXhWb2x1bWVJRFs0XTsJCS8qIHZvbHVtZSBJRCBudW1iZXIgKi8KIAlpbnQ4
X3QJCWV4Vm9sdW1lTGFiZWxbMTFdOwkvKiB2b2x1bWUgbGFiZWwgKi8KQEAgLTQ3LDggKzYzLDgg
QEAKIHN0cnVjdCBib290c2VjdG9yNTAgewogCXVfaW50OF90CWJzSnVtcFszXTsJCS8qIGp1bXAg
aW5zdCBFOXh4eHggb3IgRUJ4eDkwICovCiAJaW50OF90CQlic09lbU5hbWVbOF07CQkvKiBPRU0g
bmFtZSBhbmQgdmVyc2lvbiAqLwotCWludDhfdAkJYnNCUEJbMjVdOwkJLyogQklPUyBwYXJhbWV0
ZXIgYmxvY2sgKi8KLQlpbnQ4X3QJCWJzRXh0WzI2XTsJCS8qIEJvb3RzZWN0b3IgRXh0ZW5zaW9u
ICovCisgIHN0cnVjdCBicGI1MCBic0JQQjsgICAgICAgLyogQklPUyBwYXJhbWV0ZXIgYmxvY2sg
Ki8KKyAgc3RydWN0IGV4dGJvb3QgYnNFeHQ7ICAgICAvKiBCb290c2VjdG9yIEV4dGVuc2lvbiAq
LwogCWludDhfdAkJYnNCb290Q29kZVs0NDhdOwkvKiBwYWQgc28gc3RydWN0dXJlIGlzIDUxMmIg
Ki8KIAl1X2ludDhfdAlic0Jvb3RTZWN0U2lnMDsKIAl1X2ludDhfdAlic0Jvb3RTZWN0U2lnMTsK
QEAgLTU5LDggKzc1LDggQEAKIHN0cnVjdCBib290c2VjdG9yNzEwIHsKIAl1X2ludDhfdAlic0p1
bXBbM107CQkvKiBqdW1wIGluc3QgRTl4eHh4IG9yIEVCeHg5MCAqLwogCWludDhfdAkJYnNPRU1O
YW1lWzhdOwkJLyogT0VNIG5hbWUgYW5kIHZlcnNpb24gKi8KLQlpbnQ4X3QJCWJzQlBCWzUzXTsJ
CS8qIEJJT1MgcGFyYW1ldGVyIGJsb2NrICovCi0JaW50OF90CQlic0V4dFsyNl07CQkvKiBCb290
c2VjdG9yIEV4dGVuc2lvbiAqLworICBzdHJ1Y3QgYnBiNzEwIGJzQlBCOwkJICAvKiBCSU9TIHBh
cmFtZXRlciBibG9jayAqLworICBzdHJ1Y3QgZXh0Ym9vdCBic0V4dDsgICAgIC8qIEJvb3RzZWN0
b3IgRXh0ZW5zaW9uICovCiAJaW50OF90CQlic0Jvb3RDb2RlWzQyMF07CS8qIHBhZCBzbyBzdHJ1
Y3R1cmUgaXMgNTEyYiAqLwogCXVfaW50OF90CWJzQm9vdFNlY3RTaWcwOwogCXVfaW50OF90CWJz
Qm9vdFNlY3RTaWcxOwpAQCAtNzQsMjAgKzkwLDUgQEAKIAlzdHJ1Y3QgYm9vdHNlY3RvcjcxMCBi
czcxMDsKIH07CiAKLSNpZiAwCi0vKgotICogU2hvcnRoYW5kIGZvciBmaWVsZHMgaW4gdGhlIGJw
Yi4KLSAqLwotI2RlZmluZQlic0J5dGVzUGVyU2VjCWJzQlBCLmJwYkJ5dGVzUGVyU2VjCi0jZGVm
aW5lCWJzU2VjdFBlckNsdXN0CWJzQlBCLmJwYlNlY3RQZXJDbHVzdAotI2RlZmluZQlic1Jlc1Nl
Y3RvcnMJYnNCUEIuYnBiUmVzU2VjdG9ycwotI2RlZmluZQlic0ZBVFMJCWJzQlBCLmJwYkZBVFMK
LSNkZWZpbmUJYnNSb290RGlyRW50cwlic0JQQi5icGJSb290RGlyRW50cwotI2RlZmluZQlic1Nl
Y3RvcnMJYnNCUEIuYnBiU2VjdG9ycwotI2RlZmluZQlic01lZGlhCQlic0JQQi5icGJNZWRpYQot
I2RlZmluZQlic0ZBVHNlY3MJYnNCUEIuYnBiRkFUc2VjcwotI2RlZmluZQlic1NlY3RQZXJUcmFj
awlic0JQQi5icGJTZWN0UGVyVHJhY2sKLSNkZWZpbmUJYnNIZWFkcwkJYnNCUEIuYnBiSGVhZHMK
LSNkZWZpbmUJYnNIaWRkZW5TZWNzCWJzQlBCLmJwYkhpZGRlblNlY3MKLSNkZWZpbmUJYnNIdWdl
U2VjdG9ycwlic0JQQi5icGJIdWdlU2VjdG9ycwogI2VuZGlmCisvLyBfRlNfTVNET1NGU19CT09U
U0VDVF9ICi0tLSAvL2RlcG90L3Byb2plY3RzL3NvYzIwMDcvY2h1Yi1tc2Rvc2ZzMi9zeXMvZnMv
bXNkb3Nmcy9icGIuaAkyMDA3LzA2LzI5IDAwOjQyOjQyCisrKyAvL2RlcG90L3Byb2plY3RzL3Nv
YzIwMDcvY2h1Yi1tc2Rvc2ZzMi9zeXMvZnMvbXNkb3Nmcy9icGIuaAkyMDA3LzA3LzA4IDA4OjAx
OjA5CkBAIC0xLDYgKzEsOSBAQAogLyogJEZyZWVCU0Q6IHNyYy9zeXMvZnMvbXNkb3Nmcy9icGIu
aCx2IDEuMTUgMjAwNy8wMS8wNSAwNToyODo1NyByb2RyaWdjIEV4cCAkICovCiAvKgkkTmV0QlNE
OiBicGIuaCx2IDEuNyAxOTk3LzExLzE3IDE1OjM2OjI0IHdzIEV4cCAkCSovCiAKKyNpZm5kZWYg
X0ZTX01TRE9TRlNfQlBCX0gKKyNkZWZpbmUgX0ZTX01TRE9TRlNfQlBCX0gKKwogLyotCiAgKiBX
cml0dGVuIGJ5IFBhdWwgUG9wZWxrYSAocGF1bHBAdXRzLmFtZGFobC5jb20pCiAgKgpAQCAtNzgs
NyArODEsNyBAQAogCXVfaW50MzJfdAlicGJSb290Q2x1c3Q7CS8qIHN0YXJ0IGNsdXN0ZXIgZm9y
IHJvb3QgZGlyZWN0b3J5ICovCiAJdV9pbnQxNl90CWJwYkZTSW5mbzsJLyogZmlsZXN5c3RlbSBp
bmZvIHN0cnVjdHVyZSBzZWN0b3IgKi8KIAl1X2ludDE2X3QJYnBiQmFja3VwOwkvKiBiYWNrdXAg
Ym9vdCBzZWN0b3IgKi8KLQkvKiBUaGVyZSBpcyBhIDEyIGJ5dGUgZmlsbGVyIGhlcmUsIGJ1dCB3
ZSBpZ25vcmUgaXQgKi8KKwl1X2ludDhfdCAgYnBiUmVzZXJ2ZWRbMTJdOyAvKiAxMiBieXRlIGZp
bGxlciBoZXJlICovCiB9OwogCiAvKgpAQCAtMTUzLDcgKzE1Niw3IEBACiAJdV9pbnQ4X3QgYnBi
Um9vdENsdXN0WzRdOwkvKiBzdGFydCBjbHVzdGVyIGZvciByb290IGRpcmVjdG9yeSAqLwogCXVf
aW50OF90IGJwYkZTSW5mb1syXTsJCS8qIGZpbGVzeXN0ZW0gaW5mbyBzdHJ1Y3R1cmUgc2VjdG9y
ICovCiAJdV9pbnQ4X3QgYnBiQmFja3VwWzJdOwkJLyogYmFja3VwIGJvb3Qgc2VjdG9yICovCi0J
LyogVGhlcmUgaXMgYSAxMiBieXRlIGZpbGxlciBoZXJlLCBidXQgd2UgaWdub3JlIGl0ICovCisJ
dV9pbnQ4X3QgYnBiUmVzZXJ2ZWRbMTJdOyAvKiAxMiBieXRlIGZpbGxlciBoZXJlICovCiB9Owog
CiAvKgpAQCAtMTcwLDMgKzE3Myw2IEBACiAJdV9pbnQ4X3QgZnNpZmlsbDNbNTA4XTsKIAl1X2lu
dDhfdCBmc2lzaWc0WzRdOwogfTsKKworI2VuZGlmCisvLyBfRlNfTVNET1NGU19CUEJfSAotLS0g
Ly9kZXBvdC9wcm9qZWN0cy9zb2MyMDA3L2NodWItbXNkb3NmczIvc3lzL2ZzL21zZG9zZnMvZGly
ZW50cnkuaAkyMDA3LzA2LzI5IDAwOjQyOjQyCisrKyAvL2RlcG90L3Byb2plY3RzL3NvYzIwMDcv
Y2h1Yi1tc2Rvc2ZzMi9zeXMvZnMvbXNkb3Nmcy9kaXJlbnRyeS5oCTIwMDcvMDcvMDQgMDY6NTI6
MzEKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUJV0lOX0NOVAkJMHgzZgogCXVfaW50OF90CXdl
UGFydDFbMTBdOwogCXVfaW50OF90CXdlQXR0cmlidXRlczsKLSNkZWZpbmUJQVRUUl9XSU45NQkw
eDBmCisjZGVmaW5lCUFUVFJfV0lOOTUJMHgwZiAgLyogTG9uZyBkaXJlY3RvcnkgZW50cnlpZXMg
Ki8KIAl1X2ludDhfdAl3ZVJlc2VydmVkMTsKIAl1X2ludDhfdAl3ZUNoa3N1bTsKIAl1X2ludDhf
dAl3ZVBhcnQyWzEyXTsKLS0tIC8vZGVwb3QvcHJvamVjdHMvc29jMjAwNy9jaHViLW1zZG9zZnMy
L3N5cy9mcy9tc2Rvc2ZzL21zZG9zZnNfdmZzb3BzLmMJMjAwNy8wNi8yOSAwMDo0Mjo0MgorKysg
Ly9kZXBvdC9wcm9qZWN0cy9zb2MyMDA3L2NodWItbXNkb3NmczIvc3lzL2ZzL21zZG9zZnMvbXNk
b3Nmc192ZnNvcHMuYwkyMDA3LzA3LzA4IDA4OjAxOjA5CkBAIC00MzAsOSArNDMwLDkgQEAKIAkJ
Z290byBlcnJvcl9leGl0OwogCWJwLT5iX2ZsYWdzIHw9IEJfQUdFOwogCWJzcCA9ICh1bmlvbiBi
b290c2VjdG9yICopYnAtPmJfZGF0YTsKLQliMzMgPSAoc3RydWN0IGJ5dGVfYnBiMzMgKilic3At
PmJzMzMuYnNCUEI7Ci0JYjUwID0gKHN0cnVjdCBieXRlX2JwYjUwICopYnNwLT5iczUwLmJzQlBC
OwotCWI3MTAgPSAoc3RydWN0IGJ5dGVfYnBiNzEwICopYnNwLT5iczcxMC5ic0JQQjsKKwliMzMg
PSAoc3RydWN0IGJ5dGVfYnBiMzMgKikmYnNwLT5iczMzLmJzQlBCOworCWI1MCA9IChzdHJ1Y3Qg
Ynl0ZV9icGI1MCAqKSZic3AtPmJzNTAuYnNCUEI7CisJYjcxMCA9IChzdHJ1Y3QgYnl0ZV9icGI3
MTAgKikmYnNwLT5iczcxMC5ic0JQQjsKIAogI2lmbmRlZiBNU0RPU0ZTX05PQ0hFQ0tTSUcKIAlp
ZiAoYnNwLT5iczUwLmJzQm9vdFNlY3RTaWcwICE9IEJPT1RTSUcwCkBAIC00ODcsNyArNDg3LDYg
QEAKIAogCS8qIFhYWCAtIFdlIHNob3VsZCBwcm9iYWJseSBjaGVjayBtb3JlIHZhbHVlcyBoZXJl
ICovCiAJaWYgKCFwbXAtPnBtX0J5dGVzUGVyU2VjIHx8ICFTZWNQZXJDbHVzdAotCQl8fCAhcG1w
LT5wbV9IZWFkcwogI2lmZGVmIFBDOTgKICAgICAJCXx8ICFwbXAtPnBtX1NlY1BlclRyYWNrIHx8
IHBtcC0+cG1fU2VjUGVyVHJhY2sgPiAyNTUpIHsKICNlbHNlCi0tLSAvL2RlcG90L3Byb2plY3Rz
L3NvYzIwMDcvY2h1Yi1tc2Rvc2ZzMi9zeXMvZ2VvbS9sYWJlbC9nX2xhYmVsX21zZG9zZnMuYwky
MDA3LzA2LzI5IDAwOjQyOjQyCisrKyAvL2RlcG90L3Byb2plY3RzL3NvYzIwMDcvY2h1Yi1tc2Rv
c2ZzMi9zeXMvZ2VvbS9sYWJlbC9nX2xhYmVsX21zZG9zZnMuYwkyMDA3LzA3LzA5IDE4OjU4OjU4
CkBAIC0xLDYgKzEsNyBAQAogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgUGF3ZWwgSmFrdWIg
RGF3aWRlayA8cGpkQEZyZWVCU0Qub3JnPgogICogQ29weXJpZ2h0IChjKSAyMDA2IFRvYmlhcyBS
ZWlmZW5iZXJnZXIKKyAqIENvcHlyaWdodCAoYykgMjAwNyBCcmlhbiBDaHUgPGNodWJARnJlZUJT
RC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzMs
MjAgKzM0LDI3IEBACiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9tYWxs
b2MuaD4KIAorI2luY2x1ZGUgPGZzL21zZG9zZnMvYm9vdHNlY3QuaD4KKyNpbmNsdWRlIDxmcy9t
c2Rvc2ZzL2JwYi5oPgorI2luY2x1ZGUgPGZzL21zZG9zZnMvZGlyZW50cnkuaD4KKwogI2luY2x1
ZGUgPGdlb20vZ2VvbS5oPgogI2luY2x1ZGUgPGdlb20vbGFiZWwvZ19sYWJlbC5oPgotI2luY2x1
ZGUgPGdlb20vbGFiZWwvZ19sYWJlbF9tc2Rvc2ZzLmg+CiAKICNkZWZpbmUgR19MQUJFTF9NU0RP
U0ZTX0RJUgkibXNkb3NmcyIKICNkZWZpbmUgTEFCRUxfTk9fTkFNRQkJIk5PIE5BTUUgICAgIgog
CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKIHN0YXRpYyB2b2lkCiBnX2xhYmVsX21zZG9zZnNf
dGFzdGUoc3RydWN0IGdfY29uc3VtZXIgKmNwLCBjaGFyICpsYWJlbCwgc2l6ZV90IHNpemUpCiB7
CiAJc3RydWN0IGdfcHJvdmlkZXIgKnBwOwotCUZBVF9CU0JQQiAqcGZhdF9ic2JwYjsKLQlGQVQz
Ml9CU0JQQiAqcGZhdDMyX2JzYnBiOwotCUZBVF9ERVMgKnBmYXRfZW50cnk7CisgIHVuaW9uIGJv
b3RzZWN0b3IgKmJzcDsKKyAgc3RydWN0IGJ5dGVfYnBiNTAgKnBmYXRfYnBiNTA7CisgIHN0cnVj
dCBieXRlX2JwYjcxMCAqcGZhdF9icGI3MTA7CisgIHN0cnVjdCBleHRib290ICpwZmF0X2V4dGJv
b3Q7CisgIHN0cnVjdCBkaXJlbnRyeSogcGZhdF9lbnRyeTsKIAl1aW50OF90ICpzZWN0b3IwLCAq
c2VjdG9yOwogCXVpbnQzMl90IGk7CiAKQEAgLTc0LDEwICs4MiwxNyBAQAogCWlmIChzZWN0b3Iw
ID09IE5VTEwpCiAJCXJldHVybjsKIAorICAvKiBTZXQgdGhlIGJvb3RzZWN0b3IvYm9vdCBwYXJh
bWV0ZXIgYmxvY2sgdG8gYSBzdHJ1Y3QuICovCisgIGJzcCA9ICh1bmlvbiBib290c2VjdG9yICop
c2VjdG9yMDsKKyAgcGZhdF9icGI1MCA9IChzdHJ1Y3QgYnl0ZV9icGI1MCAqKSAmYnNwLT5iczUw
LmJzQlBCOworICBwZmF0X2JwYjcxMCA9IChzdHJ1Y3QgYnl0ZV9icGI3MTAgKikgJmJzcC0+YnM3
MTAuYnNCUEI7CisKIAkvKiBDaGVjayBmb3IgdGhlIEZBVCBib290IHNlY3RvciBzaWduYXR1cmUu
ICovCi0JaWYgKHNlY3RvcjBbNTEwXSAhPSAweDU1IHx8IHNlY3RvcjBbNTExXSAhPSAweGFhKSB7
Ci0JCUdfTEFCRUxfREVCVUcoMSwgIk1TRE9TRlM6ICVzOiBubyBGQVQgc2lnbmF0dXJlIGZvdW5k
LiIsCi0JCSAgICBwcC0+bmFtZSk7CisJaWYgKGJzcC0+YnM1MC5ic0Jvb3RTZWN0U2lnMCAhPSBC
T09UU0lHMCB8fAorICAgICAgYnNwLT5iczUwLmJzQm9vdFNlY3RTaWcxICE9IEJPT1RTSUcxKSB7
CisJCUdfTEFCRUxfREVCVUcoMSwKKyAgICAgICAgIk1TRE9TRlM6ICVzOiBubyBGQVQgc2lnbmF0
dXJlIGZvdW5kLiIsCisgICAgICAgIHBwLT5uYW1lKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAg
LTg1LDQyICsxMDAsNTYgQEAKIAkvKgogCSAqIFRlc3QgaWYgdGhpcyBpcyByZWFsbHkgYSBGQVQg
dm9sdW1lIGFuZCBkZXRlcm1pbmUgdGhlIEZBVCB0eXBlLgogCSAqLworCWlmIChnZXR1c2hvcnQo
cGZhdF9icGI1MC0+YnBiRkFUc2VjcykgIT0gMCkgeworICAgIC8qIFRoZSBleHRlbmRlZCBib290
IHJlY29yZCBpcyBvbmUgcGxhY2UgZm9yIEZBVDEyL0ZBVDE2CisgICAgICogYW5kIGFub3RoZXIg
Zm9yIEZBVDMyLgorICAgICAqLwogCi0JcGZhdF9ic2JwYiA9IChGQVRfQlNCUEIgKilzZWN0b3Iw
OwotCXBmYXQzMl9ic2JwYiA9IChGQVQzMl9CU0JQQiAqKXNlY3RvcjA7CisgICAgcGZhdF9leHRi
b290ID0gKHN0cnVjdCBleHRib290ICopICZic3AtPmJzNTAuYnNFeHQ7CiAKLQlpZiAoVUlOVDE2
QllURVMocGZhdF9ic2JwYi0+QlBCX0ZBVFN6MTYpICE9IDApIHsKIAkJLyoKLQkJICogSWYgdGhl
IEJQQl9GQVRTejE2IGZpZWxkIGlzIG5vdCB6ZXJvIGFuZCB0aGUgc3RyaW5nICJGQVQiIGlzCi0J
CSAqIGF0IHRoZSByaWdodCBwbGFjZSwgdGhpcyBzaG91bGQgYmUgYSBGQVQxMiBvciBGQVQxNiB2
b2x1bWUuCisJCSAqIElmIHRoZSBCUEJfRkFUU3oxNi9icGJGQVRzZWNzIGZpZWxkIGlzIG5vdCB6
ZXJvIGFuZAorICAgICAqIHRoZSBzdHJpbmcgIkZBVCIgaXMgYXQgdGhlIHJpZ2h0IHBsYWNlLCB0
aGlzIHNob3VsZAorICAgICAqIGJlIGEgRkFUMTIgb3IgRkFUMTYgdm9sdW1lLgogCQkgKi8KLQkJ
aWYgKHN0cm5jbXAocGZhdF9ic2JwYi0+QlNfRmlsU3lzVHlwZSwgIkZBVCIsIDMpICE9IDApIHsK
KworCQlpZiAoc3RybmNtcChwZmF0X2V4dGJvb3QtPmV4RmlsZVN5c1R5cGUsICJGQVQiLCAzKSAh
PSAwKSB7CiAJCQlHX0xBQkVMX0RFQlVHKDEsCiAJCQkgICAgIk1TRE9TRlM6ICVzOiBGQVQxMi8x
NiB2b2x1bWUgbm90IHZhbGlkLiIsCiAJCQkgICAgcHAtPm5hbWUpOwogCQkJZ290byBlcnJvcjsK
IAkJfQotCQlHX0xBQkVMX0RFQlVHKDEsICJNU0RPU0ZTOiAlczogRkFUMTIvRkFUMTYgdm9sdW1l
IGRldGVjdGVkLiIsCi0JCSAgICBwcC0+bmFtZSk7CisJCUdfTEFCRUxfREVCVUcoMSwKKyAgICAg
ICAgIk1TRE9TRlM6ICVzOiBGQVQxMi9GQVQxNiB2b2x1bWUgZGV0ZWN0ZWQuIiwKKyAgICAgICAg
cHAtPm5hbWUpOwogCiAJCS8qIEEgdm9sdW1lIHdpdGggbm8gbmFtZSBzaG91bGQgaGF2ZSAiTk8g
TkFNRSAgICAiIGFzIGxhYmVsLiAqLwotCQlpZiAoc3RybmNtcChwZmF0X2JzYnBiLT5CU19Wb2xM
YWIsIExBQkVMX05PX05BTUUsCi0JCSAgICBzaXplb2YocGZhdF9ic2JwYi0+QlNfVm9sTGFiKSkg
PT0gMCkgeworCQlpZiAoc3RybmNtcChwZmF0X2V4dGJvb3QtPmV4Vm9sdW1lTGFiZWwsIExBQkVM
X05PX05BTUUsCisJCSAgICBzaXplb2YocGZhdF9leHRib290LT5leFZvbHVtZUxhYmVsKSkgPT0g
MCkgewogCQkJR19MQUJFTF9ERUJVRygxLAogCQkJICAgICJNU0RPU0ZTOiAlczogRkFUMTIvMTYg
dm9sdW1lIGhhcyBubyBuYW1lLiIsCiAJCQkgICAgcHAtPm5hbWUpOwogCQkJZ290byBlcnJvcjsK
IAkJfQotCQlzdHJsY3B5KGxhYmVsLCBwZmF0X2JzYnBiLT5CU19Wb2xMYWIsCi0JCSAgICBNSU4o
c2l6ZSwgc2l6ZW9mKHBmYXRfYnNicGItPkJTX1ZvbExhYikgKyAxKSk7Ci0JfSBlbHNlIGlmIChV
SU5UMzJCWVRFUyhwZmF0MzJfYnNicGItPkJQQl9GQVRTejMyKSAhPSAwKSB7CisJCXN0cmxjcHko
bGFiZWwsIHBmYXRfZXh0Ym9vdC0+ZXhWb2x1bWVMYWJlbCwKKwkJICAgIE1JTihzaXplLCBzaXpl
b2YocGZhdF9leHRib290LT5leFZvbHVtZUxhYmVsKSArIDEpKTsKKwl9CisgIGVsc2UgaWYgKGdl
dHVsb25nKHBmYXRfYnBiNzEwLT5icGJCaWdGQVRzZWNzKSAhPSAwKSB7CiAJCXVpbnQzMl90IGZh
dF9GaXJzdERhdGFTZWN0b3IsIGZhdF9CeXRlc1BlclNlY3Rvciwgb2Zmc2V0OwogCisgICAgLyog
VGhlIGV4dGVuZGVkIGJvb3QgcmVjb3JkIGlzIG9uZSBwbGFjZSBmb3IgRkFUMTIvRkFUMTYKKyAg
ICAgKiBhbmQgYW5vdGhlciBmb3IgRkFUMzIuCisgICAgICovCisKKyAgICBwZmF0X2V4dGJvb3Qg
PSAoc3RydWN0IGV4dGJvb3QgKikgJmJzcC0+YnM3MTAuYnNFeHQ7CisKIAkJLyoKLQkJICogSWYg
dGhlIEJQQl9GQVRTejMyIGZpZWxkIGlzIG5vdCB6ZXJvIGFuZCB0aGUgc3RyaW5nICJGQVQiIGlz
Ci0JCSAqIGF0IHRoZSByaWdodCBwbGFjZSwgdGhpcyBzaG91bGQgYmUgYSBGQVQzMiB2b2x1bWUu
CisJCSAqIElmIHRoZSBCUEJfRkFUU3ozMi9icGJCaWdGQVRzZWNzIGZpZWxkIGlzIG5vdCB6ZXJv
CisgICAgICogYW5kIHRoZSBzdHJpbmcgIkZBVCIgaXMgYXQgdGhlIHJpZ2h0IHBsYWNlLCB0aGlz
CisgICAgICogc2hvdWxkIGJlIGEgRkFUMzIgdm9sdW1lLgogCQkgKi8KLQkJaWYgKHN0cm5jbXAo
cGZhdDMyX2JzYnBiLT5CU19GaWxTeXNUeXBlLCAiRkFUIiwgMykgIT0gMCkgeworCisJCWlmIChz
dHJuY21wKHBmYXRfZXh0Ym9vdC0+ZXhGaWxlU3lzVHlwZSwgIkZBVCIsIDMpICE9IDApIHsKIAkJ
CUdfTEFCRUxfREVCVUcoMSwgIk1TRE9TRlM6ICVzOiBGQVQzMiB2b2x1bWUgbm90IHZhbGlkLiIs
CiAJCQkgICAgcHAtPm5hbWUpOwogCQkJZ290byBlcnJvcjsKQEAgLTEzMSwxMCArMTYwLDEwIEBA
CiAJCS8qCiAJCSAqIElmIHRoZSB2b2x1bWUgbGFiZWwgaXMgbm90ICJOTyBOQU1FICAgICIgd2Un
cmUgZG9uZS4KIAkJICovCi0JCWlmIChzdHJuY21wKHBmYXQzMl9ic2JwYi0+QlNfVm9sTGFiLCBM
QUJFTF9OT19OQU1FLAotCQkgICAgc2l6ZW9mKHBmYXQzMl9ic2JwYi0+QlNfVm9sTGFiKSkgIT0g
MCkgewotCQkJc3RybGNweShsYWJlbCwgcGZhdDMyX2JzYnBiLT5CU19Wb2xMYWIsCi0JCQkgICAg
TUlOKHNpemUsIHNpemVvZihwZmF0MzJfYnNicGItPkJTX1ZvbExhYikgKyAxKSk7CisJCWlmIChz
dHJuY21wKHBmYXRfZXh0Ym9vdC0+ZXhWb2x1bWVMYWJlbCwgTEFCRUxfTk9fTkFNRSwKKwkJICAg
IHNpemVvZihwZmF0X2V4dGJvb3QtPmV4Vm9sdW1lTGFiZWwpKSA9PSAwKSB7CisJCQlzdHJsY3B5
KGxhYmVsLCBwZmF0X2V4dGJvb3QtPmV4Vm9sdW1lTGFiZWwsCisJCQkgICAgTUlOKHNpemUsIHNp
emVvZihwZmF0X2V4dGJvb3QtPmV4Vm9sdW1lTGFiZWwpICsgMSkpOwogCQkJZ290byBlbmRvZmNo
ZWNrczsKIAkJfQogCkBAIC0xNDQsMTAgKzE3MywxMCBAQAogCQkgKiB0aGUgcm9vdCBkaXJlY3Rv
cnkuCiAJCSAqLwogCQlmYXRfRmlyc3REYXRhU2VjdG9yID0KLQkJICAgIFVJTlQxNkJZVEVTKHBm
YXQzMl9ic2JwYi0+QlBCX1JzdmRTZWNDbnQpICsKLQkJICAgIChwZmF0MzJfYnNicGItPkJQQl9O
dW1GQVRzICoKLQkJICAgICBVSU5UMzJCWVRFUyhwZmF0MzJfYnNicGItPkJQQl9GQVRTejMyKSk7
Ci0JCWZhdF9CeXRlc1BlclNlY3RvciA9IFVJTlQxNkJZVEVTKHBmYXQzMl9ic2JwYi0+QlBCX0J5
dHNQZXJTZWMpOworCQkgICAgZ2V0dXNob3J0KHBmYXRfYnBiNzEwLT5icGJSZXNTZWN0b3JzKSAr
CisJCSAgICAocGZhdF9icGI3MTAtPmJwYkZBVHMgKgorCQkgICAgIGdldHVsb25nKHBmYXRfYnBi
NzEwLT5icGJCaWdGQVRzZWNzKSk7CisJCWZhdF9CeXRlc1BlclNlY3RvciA9IGdldHVzaG9ydChw
ZmF0X2JwYjcxMC0+YnBiQnl0ZXNQZXJTZWMpOwogCiAJCUdfTEFCRUxfREVCVUcoMiwKIAkJICAg
ICJNU0RPU0ZTOiBGQVRfRmlyc3REYXRhU2VjdG9yPTB4JXgsIEZBVF9CeXRlc1BlclNlY3Rvcj0l
ZCIsCkBAIC0xNjAsMTAgKzE4OSwxMCBAQAogCQkJaWYgKHNlY3RvciA9PSBOVUxMKQogCQkJCWdv
dG8gZXJyb3I7CiAKLQkJCXBmYXRfZW50cnkgPSAoRkFUX0RFUyAqKXNlY3RvcjsKKwkJCXBmYXRf
ZW50cnkgPSAoc3RydWN0IGRpcmVudHJ5ICopc2VjdG9yOwogCQkJZG8gewogCQkJCS8qIE5vIG1v
cmUgZW50cmllcyBhdmFpbGFibGUuICovCi0JCQkJaWYgKHBmYXRfZW50cnktPkRJUl9OYW1lWzBd
ID09IDApIHsKKwkJCQlpZiAocGZhdF9lbnRyeS0+ZGVOYW1lWzBdID09IDApIHsKIAkJCQkJR19M
QUJFTF9ERUJVRygxLCAiTVNET1NGUzogJXM6ICIKIAkJCQkJICAgICJGQVQzMiB2b2x1bWUgaGFz
IG5vIG5hbWUuIiwKIAkJCQkJICAgIHBwLT5uYW1lKTsKQEAgLTE3MSwxMCArMjAwLDkgQEAKIAkJ
CQl9CiAKIAkJCQkvKiBTa2lwIGVtcHR5IG9yIGxvbmcgbmFtZSBlbnRyaWVzLiAqLwotCQkJCWlm
IChwZmF0X2VudHJ5LT5ESVJfTmFtZVswXSA9PSAweGU1IHx8Ci0JCQkJICAgIChwZmF0X2VudHJ5
LT5ESVJfQXR0ciAmCi0JCQkJICAgICBGQVRfREVTX0FUVFJfTE9OR19OQU1FKSA9PQotCQkJCSAg
ICBGQVRfREVTX0FUVFJfTE9OR19OQU1FKSB7CisJCQkJaWYgKHBmYXRfZW50cnktPmRlTmFtZVsw
XSA9PSAweGU1IHx8CisJCQkJICAgIChwZmF0X2VudHJ5LT5kZUF0dHJpYnV0ZXMgJgorCQkJCSAg
ICAgQVRUUl9XSU45NSkgPT0gQVRUUl9XSU45NSkgewogCQkJCQljb250aW51ZTsKIAkJCQl9CiAK
QEAgLTE4MiwxMSArMjEwLDExIEBACiAJCQkJICogVGhlIG5hbWUgb2YgdGhlIGVudHJ5IGlzIHRo
ZSB2b2x1bWUgbGFiZWwgaWYKIAkJCQkgKiBBVFRSX1ZPTFVNRV9JRCBpcyBzZXQuCiAJCQkJICov
Ci0JCQkJaWYgKHBmYXRfZW50cnktPkRJUl9BdHRyICYKLQkJCQkgICAgRkFUX0RFU19BVFRSX1ZP
TFVNRV9JRCkgewotCQkJCQlzdHJsY3B5KGxhYmVsLCBwZmF0X2VudHJ5LT5ESVJfTmFtZSwKKwkJ
CQlpZiAocGZhdF9lbnRyeS0+ZGVBdHRyaWJ1dGVzICYKKwkJCQkgICAgQVRUUl9ESVJFQ1RPUlkp
IHsKKwkJCQkJc3RybGNweShsYWJlbCwgcGZhdF9lbnRyeS0+ZGVOYW1lLAogCQkJCQkgICAgTUlO
KHNpemUsCi0JCQkJCSAgICBzaXplb2YocGZhdF9ic2JwYi0+QlNfVm9sTGFiKSArIDEpKTsKKwkJ
CQkJICAgIHNpemVvZihwZmF0X2V4dGJvb3QtPmV4Vm9sdW1lTGFiZWwpICsgMSkpOwogCQkJCQln
b3RvIGVuZG9mY2hlY2tzOwogCQkJCX0KIAkJCX0gd2hpbGUoKHVpbnQ4X3QgKikoKytwZmF0X2Vu
dHJ5KSA8Cg==
------=_Part_31586_12249243.1184314751446--



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