[Lcdproc] LCD2USB backlight / contrast patch
Markus Dolze
bsdfan@nurfuerspam.de
Sun Oct 14 23:00:02 2007
--========GMX32153119240277577419
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Hi there,
I thought it would be nice to change settings for contrast and backlight through the server's option menu. And then I found the options are already there, but the driver didn't export the necessary functions. So here they are. The attached patch does:
* Add get/set functions for contrast and backlight.
* Modify the config file options handling.
* Add the OffBrigthness setting.
* Make the backlight switchable.
* Try to identify the device's firmware.
* Added some doxygen comments.
Most of the contrast / backlight stuff was copied from the CFontz driver. But I am not sure about some implementation details:
1. I put the variables for contrast, brightness and offbrightness into the HD44780 driver's private data structure. Does it belong there or better into the LCD2USB driver as (static) variables? Currently no other HD44780 driver uses them.
2. I named the new functions without HD44780 because they are assigned to functions not specific to the HD44780 drivers.
3. What does the MODULE_EXPORT do (I didn't use it)? Does it has any effect at all or is it just there to signal a developer that this is not a private function?
Regards,
Markus
--========GMX32153119240277577419
Content-Type: application/octet-stream; name="lcd2usb-backlight.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="lcd2usb-backlight.diff"
LS0tIC4vTENEZC5jb25mLm9yaWcJTW9uIE9jdCAxNSAwMDozNjowOSAyMDA3CisrKyAuL0xDRGQu
Y29uZglNb24gT2N0IDE1IDAwOjM2OjEyIDIwMDcKQEAgLTQ0Myw2ICs0NDMsNyBAQAogCiAjIFNl
dCBicmlnaHRuZXNzIG9mIHRoZSBiYWNrbGlnaHQgKGxjZDJ1c2Igb25seSkgW2RlZmF1bHQ6IDA7
IGxlZ2FsIDAgLSAxMDAwXQogI0JyaWdodG5lc3M9MTAwMAorI09mZkJyaWdodG5lc3M9MAogCiAj
IElmIHlvdSBoYXZlIGEgc3dpdGNoYWJsZSBiYWNrbGlnaHQuCiBCYWNrbGlnaHQ9bm8KLS0tIC4v
ZG9jcy9sY2Rwcm9jLXVzZXIvZHJpdmVycy9oZDQ0NzgwLmRvY2Jvb2sub3JpZwlNb24gT2N0IDE1
IDAwOjI0OjU5IDIwMDcKKysrIC4vZG9jcy9sY2Rwcm9jLXVzZXIvZHJpdmVycy9oZDQ0NzgwLmRv
Y2Jvb2sJTW9uIE9jdCAxNSAwMDoyNjo0OSAyMDA3CkBAIC0xODY3LDkgKzE4NjcsMTAgQEAKIAog
PHBhcmE+CiBCZXNpZGVzIHRoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIDxj
b2RlPmhkNDQ3ODA8L2NvZGU+IGRpc3BsYXlzLCB0aGUKLTxjb2RlPmxjZDJ1c2I8L2NvZGU+IGNv
bm5lY3Rpb24gdHlwZSBzdXBwb3J0cyB0d28gYWRkaXRpb25hbCBvcHRpb25zOgotPGNvbW1hbmQ+
Q29udHJhc3Q9PC9jb21tYW5kPiB0byBzZXQgdGhlIGRpc3BsYXkncyBjb250cmFzdCBhbmQgCi08
Y29tbWFuZD5CcmlnaHRuZXNzPTwvY29tbWFuZD4gdG8gc2V0IHRoZSBkaXNwbGF5J3MgYnJpZ2h0
bmVzcy4KKzxjb2RlPmxjZDJ1c2I8L2NvZGU+IGNvbm5lY3Rpb24gdHlwZSBzdXBwb3J0cyB0aHJl
ZSBhZGRpdGlvbmFsIG9wdGlvbnM6Cis8Y29tbWFuZD5Db250cmFzdD08L2NvbW1hbmQ+IHRvIHNl
dCB0aGUgZGlzcGxheSdzIGNvbnRyYXN0LAorPGNvbW1hbmQ+QnJpZ2h0bmVzcz08L2NvbW1hbmQ+
IHRvIHNldCB0aGUgZGlzcGxheSdzIGJyaWdodG5lc3Mgd2hlbiBpcyBiYWNrbGlnaHQgaXMgc3dp
dGNoZWQgb24gYW5kCis8Y29tbWFuZD5PZmZCcmlnaHRuZXNzPTwvY29tbWFuZD4gdG8gc2V0IHRo
ZSBkaXNwbGF5J3MgYnJpZ2h0bmVzcyB3aGVuIGlzIGJhY2tsaWdodCBpcyBzd2l0Y2hlZCBvZmYu
CiBCb3RoIG9wdGlvbnMgZXhwZWN0IGEgbnVtYmVyIGluIHRoZSByYW5nZSBmcm9tIDxsaXRlcmFs
PjA8L2xpdGVyYWw+IHRvIDxsaXRlcmFsPjEwMDA8L2xpdGVyYWw+LgogPC9wYXJhPgogCkBAIC0x
ODg2LDcgKzE4ODcsOSBAQAogQ29ubmVjdGlvblR5cGU9bGNkMnVzYgogQ29udHJhc3Q9ODUwCiBC
cmlnaHRuZXNzPTgwMAorT2ZmQnJpZ2h0bmVzcz0wCiBLZXlwYWQ9eWVzCitCYWNrbGlnaHQ9eWVz
CiBTaXplPTIweDIKIEtleURpcmVjdF8xPUVudGVyCiBLZXlEaXJlY3RfMj1Eb3duCi0tLSAuL3Nl
cnZlci9kcml2ZXJzL2hkNDQ3ODAtbGNkMnVzYi5jLm9yaWcJU2F0IE9jdCAxMyAwOTozNDozOSAy
MDA3CisrKyAuL3NlcnZlci9kcml2ZXJzL2hkNDQ3ODAtbGNkMnVzYi5jCU1vbiBPY3QgMTUgMDA6
MzI6MjQgMjAwNwpAQCAtMjgsMjYgKzI4LDI4IEBACiBzdGF0aWMgdXNiX2Rldl9oYW5kbGUgKmxj
ZDJ1c2I7CiAKIAotLy8gaW5pdGlhbGl6ZSB0aGUgZHJpdmVyCisvKioKKyAqIEluaXRpYWxpemUg
dGhlIGRyaXZlci4KKyAqIFxwYXJhbSBkcnZ0aGlzICBQb2ludGVyIHRvIGRyaXZlciBzdHJ1Y3R1
cmUuCisgKiBccmV0dmFsIDAgICBTdWNjZXNzLgorICogXHJldHZhbCAtMSAgRXJyb3IuCisgKi8K
IGludAogaGRfaW5pdF9sY2QydXNiKERyaXZlciAqZHJ2dGhpcykKIHsKICAgUHJpdmF0ZURhdGEg
KnAgPSAoUHJpdmF0ZURhdGEqKSBkcnZ0aGlzLT5wcml2YXRlX2RhdGE7CiAKICAgc3RydWN0IHVz
Yl9idXMgKmJ1czsKLSAgLy9jaGFyIGRldmljZV9tYW51ZmFjdHVyZXJbTENEX01BWF9XSURUSCsx
XSA9ICIiOwotICBpbnQgY29udHJhc3QgPSAtMTsJLyogaWxsZWdhbCBjb250cmFzdCB2YWx1ZSAo
dG8gZGV0ZWN0IGVycm9ycykgKi8KLSAgaW50IGJyaWdodG5lc3MgPSAtMTsJLyogaWxsZWdhbCBi
cmlnaHRuZXNzIHZhbHVlICh0byBkZXRlY3QgZXJyb3JzKSAqLworICBpbnQgdG1wOwogCiAgIHAt
PmhkNDQ3ODBfZnVuY3Rpb25zLT5zZW5kZGF0YSA9IGxjZDJ1c2JfSEQ0NDc4MF9zZW5kZGF0YTsK
ICAgcC0+aGQ0NDc4MF9mdW5jdGlvbnMtPmJhY2tsaWdodCA9IGxjZDJ1c2JfSEQ0NDc4MF9iYWNr
bGlnaHQ7CiAgIHAtPmhkNDQ3ODBfZnVuY3Rpb25zLT5zY2Fua2V5cGFkID0gbGNkMnVzYl9IRDQ0
NzgwX3NjYW5rZXlwYWQ7CiAgIHAtPmhkNDQ3ODBfZnVuY3Rpb25zLT5jbG9zZSA9IGxjZDJ1c2Jf
SEQ0NDc4MF9jbG9zZTsKLQotICAvKiBSZWFkIGNvbmZpZyBmaWxlJ3MgY29udGVudHM6IGNvbnRy
YXN0ICovCi0KLSAgY29udHJhc3QgPSBkcnZ0aGlzLT5jb25maWdfZ2V0X2ludChkcnZ0aGlzLT5u
YW1lLCAiQ29udHJhc3QiLCAwLCBERUZBVUxUX0NPTlRSQVNUKTsKLSAgYnJpZ2h0bmVzcyA9IGRy
dnRoaXMtPmNvbmZpZ19nZXRfaW50KGRydnRoaXMtPm5hbWUsICJCcmlnaHRuZXNzIiwgMCwgREVG
QVVMVF9CUklHSFRORVNTKTsKKyAgZHJ2dGhpcy0+Z2V0X2NvbnRyYXN0ID0gbGNkMnVzYl9nZXRf
Y29udHJhc3Q7CisgIGRydnRoaXMtPnNldF9jb250cmFzdCA9IGxjZDJ1c2Jfc2V0X2NvbnRyYXN0
OworICBkcnZ0aGlzLT5nZXRfYnJpZ2h0bmVzcyA9IGxjZDJ1c2JfZ2V0X2JyaWdodG5lc3M7Cisg
IGRydnRoaXMtPnNldF9icmlnaHRuZXNzID0gbGNkMnVzYl9zZXRfYnJpZ2h0bmVzczsKIAogICAv
KiB0cnkgdG8gZmluZCBVU0IgZGV2aWNlICovCiAjaWYgMApAQCAtNzIsMjIgKzc0LDEzIEBACiAg
ICAgICAgIGxjZDJ1c2IgPSB1c2Jfb3BlbihkZXYpOwogICAgICAgICBpZiAobGNkMnVzYiA9PSBO
VUxMKSB7CiAgICAgICAgICAgcmVwb3J0KFJQVF9XQVJOSU5HLCAiaGRfaW5pdF9sY2QydXNiOiB1
bmFibGUgdG8gb3BlbiBkZXZpY2UiKTsKLSAgICAgICAgICAvLyByZXR1cm4gLTE7ICAgICAgICAg
ICAgICAgIC8qIGl0J3MgYmV0dGVyIHRvIGNvbnRpbnVlICovCiAgICAgICAgIH0KICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgLyogZ2V0IGRldmljZSBpbmZvcm1hdGlvbiAmIGNoZWNrIGZvciBz
ZXJpYWwgbnVtYmVyICovCi0gICAgICAgICAgLy9pZiAodXNiX2dldF9zdHJpbmdfc2ltcGxlKGxj
ZDJ1c2IsIGRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAotICAgICAgICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYW51ZmFjdHVyZXIsIExDRF9NQVhfV0lEVEgpIDw9IDApCi0g
ICAgICAgICAgLy8gICptYW51ZmFjdHVyZXIgPSAnXDAnOwotICAgICAgICAgIC8vbWFudWZhY3R1
cmVyW3NpemVvZihtYW51ZmFjdHVyZXIpLTFdID0gJ1wwJzsKLQotICAgICAgICAgIC8vaWYgKHVz
Yl9nZXRfc3RyaW5nX3NpbXBsZShsY2QydXNiLCBkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsCi0g
ICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsIExDRF9NQVhfV0lE
VEgpIDw9IDApCi0gICAgICAgICAgLy8gICpwcm9kdWN0ID0gJ1wwJzsKLSAgICAgICAgICAvL3By
b2R1Y3Rbc2l6ZW9mKHByb2R1Y3QpLTFdID0gJ1wwJzsKLQotICAgICAgICAgIC8vdXNiX2Nsb3Nl
KGxjZDJ1c2IpOwotICAgICAgICAgIC8vbGNkMnVzYiA9IE5VTEw7CisgICAgICAgICAgLyogcmVh
ZCBmaXJtd2FyZSB2ZXJzaW9uICovCisJICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKKyAgICAg
ICAgICBpZiAodXNiX2NvbnRyb2xfbXNnKGxjZDJ1c2IsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9S
RUNJUF9ERVZJQ0UgfCBVU0JfRU5EUE9JTlRfSU4sIAorCSAgICBMQ0QyVVNCX0dFVF9GV1ZFUiwg
MCwgMCwgKGNoYXIgKilidWZmZXIsIHNpemVvZihidWZmZXIpLCAxMDAwKSA9PSAyKQorCSAgICAg
IHJlcG9ydChSUFRfSU5GTywgImhkX2luaXRfbGNkMnVzYjogZGV2aWNlIHdpdGggZmlybXdhcmUg
dmVyc2lvbiAlZC4lMDJkIGZvdW5kIiwgYnVmZmVyWzBdLCBidWZmZXJbMV0pOwogICAgICAgICB9
CiAgICAgICB9CiAgICAgfQpAQCAtOTUsNyArODgsNiBAQAogCiAgIGlmIChsY2QydXNiICE9IE5V
TEwpIHsKICAgICBkZWJ1ZyhSUFRfREVCVUcsICJoZF9pbml0X2xjZDJ1c2I6IG9wZW5pbmcgZGV2
aWNlIHN1Y2NlZWRlZCIpOwotCiAgIH0KICAgZWxzZSB7CiAgICAgcmVwb3J0KFJQVF9FUlIsICJo
ZF9pbml0X2xjZDJ1c2I6IG5vIChtYXRjaGluZykgTENEMlVTQiBkZXZpY2UgZm91bmQiKTsKQEAg
LTEwNSw0NyArOTcsMTU2IEBACiAgIGNvbW1vbl9pbml0KHAsIElGXzRCSVQpOwogCiAgIC8qIHNl
dCBjb250cmFzdCAqLwotICBpZiAoKDAgPD0gY29udHJhc3QpICYmIChjb250cmFzdCA8PSAxMDAw
KSkgewotICAgIGludCByZXMgPSB1c2JfY29udHJvbF9tc2cobGNkMnVzYiwgVVNCX1RZUEVfVkVO
RE9SLCBMQ0QyVVNCX1NFVF9DT05UUkFTVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb250cmFzdCAqIDI1NSkgLyAxMDAwLCAwLCBOVUxMLCAwLCAxMDAwKTsKLSAgICBpZiAocmVz
IDwgMCkKLSAgICAgIHJlcG9ydChSUFRfV0FSTklORywgImhkX2luaXRfbGNkMnVzYjogc2V0dGlu
ZyBjb250cmFzdCBmYWlsZWQiKTsKLSAgfSBlbHNlIHsKLSAgICByZXBvcnQoUlBUX0lORk8sICJo
ZF9pbml0X2xjZDJ1c2I6IFVzaW5nIGRlZmF1bHQgY29udHJhc3QgdmFsdWUiKTsKKyAgdG1wID0g
ZHJ2dGhpcy0+Y29uZmlnX2dldF9pbnQoZHJ2dGhpcy0+bmFtZSwgIkNvbnRyYXN0IiwgMCwgTENE
MlVTQl9ERUZBVUxUX0NPTlRSQVNUKTsKKyAgaWYgKCh0bXAgPCAwKSB8fCAodG1wID4gMTAwMCkp
IHsKKyAgICByZXBvcnQoUlBUX1dBUk5JTkcsICIlczogQ29udHJhc3QgbXVzdCBiZSBiZXR3ZWVu
IDAgYW5kIDEwMDA7IHVzaW5nIGRlZmF1bHQgJWQiLAorCQkJICBkcnZ0aGlzLT5uYW1lLCBMQ0Qy
VVNCX0RFRkFVTFRfQ09OVFJBU1QpOworICAgIHRtcCA9IExDRDJVU0JfREVGQVVMVF9DT05UUkFT
VDsKICAgfQorICBsY2QydXNiX3NldF9jb250cmFzdChkcnZ0aGlzLCB0bXApOwogCiAgIC8qIHNl
dCBicmlnaHRuZXNzICovCi0gIGlmICgoMCA8PSBicmlnaHRuZXNzKSAmJiAoYnJpZ2h0bmVzcyA8
PSAxMDAwKSkgewotICAgIGludCByZXMgPSB1c2JfY29udHJvbF9tc2cobGNkMnVzYiwgVVNCX1RZ
UEVfVkVORE9SLCBMQ0QyVVNCX1NFVF9CUklHSFRORVNTLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGJyaWdodG5lc3MgKiAyNTUpIC8gMTAwMCwgMCwgTlVMTCwgMCwgMTAwMCk7Ci0g
ICAgaWYgKHJlcyA8IDApCi0gICAgICByZXBvcnQoUlBUX1dBUk5JTkcsICJoZF9pbml0X2xjZDJ1
c2I6IHNldHRpbmcgYnJpZ2h0bmVzcyBmYWlsZWQiKTsKLSAgfSBlbHNlIHsKLSAgICByZXBvcnQo
UlBUX0lORk8sICJoZF9pbml0X2xjZDJ1c2I6IFVzaW5nIGRlZmF1bHQgYnJpZ2h0bmVzcyB2YWx1
ZSIpOworICB0bXAgPSBkcnZ0aGlzLT5jb25maWdfZ2V0X2ludChkcnZ0aGlzLT5uYW1lLCAiQnJp
Z2h0bmVzcyIsIDAsIExDRDJVU0JfREVGQVVMVF9CUklHSFRORVNTKTsKKyAgaWYgKCh0bXAgPCAw
KSB8fCAodG1wID4gMTAwMCkpIHsKKyAgICByZXBvcnQoUlBUX1dBUk5JTkcsICIlczogQnJpZ2h0
bmVzcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwMDsgdXNpbmcgZGVmYXVsdCAlZCIsCisJCQkg
IGRydnRoaXMtPm5hbWUsIExDRDJVU0JfREVGQVVMVF9CUklHSFRORVNTKTsKKyAgICB0bXAgPSBM
Q0QyVVNCX0RFRkFVTFRfQlJJR0hUTkVTUzsKICAgfQorICBwLT5icmlnaHRuZXNzID0gdG1wOwor
CisgIC8qIHNldCBiYWNrbGlnaHQtb2ZmICJicmlnaHRuZXNzIiAqLworICB0bXAgPSBkcnZ0aGlz
LT5jb25maWdfZ2V0X2ludChkcnZ0aGlzLT5uYW1lLCAiT2ZmQnJpZ2h0bmVzcyIsIDAsIExDRDJV
U0JfREVGQVVMVF9PRkZCUklHSFRORVNTKTsKKyAgaWYgKCh0bXAgPCAwKSB8fCAodG1wID4gMTAw
MCkpIHsKKyAgICByZXBvcnQoUlBUX1dBUk5JTkcsICIlczogT2ZmQnJpZ2h0bmVzcyBtdXN0IGJl
IGJldHdlZW4gMCBhbmQgMTAwMDsgdXNpbmcgZGVmYXVsdCAlZCIsCisJCQkgIGRydnRoaXMtPm5h
bWUsIExDRDJVU0JfREVGQVVMVF9PRkZCUklHSFRORVNTKTsKKyAgICB0bXAgPSBMQ0QyVVNCX0RF
RkFVTFRfT0ZGQlJJR0hUTkVTUzsKKyAgfQorICBwLT5vZmZicmlnaHRuZXNzID0gdG1wOwogCiAg
IHJldHVybiAwOwogfQogCiAKLS8vIGxjZDJ1c2JfSEQ0NDc4MF9zZW5kZGF0YQorLyoqCisgKiBT
ZW5kIGRhdGEgb3IgY29tbWFuZHMgdG8gdGhlIGRpc3BsYXkuCisgKiBccGFyYW0gcCAgICAgICAg
ICBQb2ludGVyIHRvIGRyaXZlcidzIGRhdGEgc3RydWN0dXJlLgorICogXHBhcmFtIGRpc3BsYXlJ
RCAgSUQgb2YgdGhlIGRpc3BsYXkgKG9yIDAgZm9yIGFsbCkgdG8gc2VuZCBkYXRhIHRvLgorICog
XHBhcmFtIGZsYWdzICAgICAgRGVmaW5lcyB3aGV0aGVyIHRvIGVuZCBhIGNvbW1hbmQgb3IgZGF0
YS4KKyAqIFxwYXJhbSBjaCAgICAgICAgIFRoZSB2YWx1ZSB0byBzZW5kLgorICovCiB2b2lkCiBs
Y2QydXNiX0hENDQ3ODBfc2VuZGRhdGEoUHJpdmF0ZURhdGEgKnAsIHVuc2lnbmVkIGNoYXIgZGlz
cGxheUlELCB1bnNpZ25lZCBjaGFyIGZsYWdzLCB1bnNpZ25lZCBjaGFyIGNoKQogewotaW50IHR5
cGUgPSAoZmxhZ3MgPT0gUlNfREFUQSkgPyBMQ0QyVVNCX0RBVEEgOiBMQ0QyVVNCX0NNRDsKLWlu
dCBpZCA9IChkaXNwbGF5SUQgPT0gMCkgPyBMQ0QyVVNCX0NUUkxfQk9USAorICBpbnQgdHlwZSA9
IChmbGFncyA9PSBSU19EQVRBKSA/IExDRDJVU0JfREFUQSA6IExDRDJVU0JfQ01EOworICBpbnQg
aWQgPSAoZGlzcGxheUlEID09IDApID8gTENEMlVTQl9DVFJMX0JPVEgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAoKGRpc3BsYXlJRCA9PSAxKSA/IExDRDJVU0JfQ1RSTF8wIDogTENEMlVT
Ql9DVFJMXzEpOwogCi0gICAgdXNiX2NvbnRyb2xfbXNnKGxjZDJ1c2IsIFVTQl9UWVBFX1ZFTkRP
UiwgKHR5cGUgfCBpZCksIGNoLCAwLCBOVUxMLCAwLCAxMDAwKTsKKyAgdXNiX2NvbnRyb2xfbXNn
KGxjZDJ1c2IsIFVTQl9UWVBFX1ZFTkRPUiwgKHR5cGUgfCBpZCksIGNoLCAwLCBOVUxMLCAwLCAx
MDAwKTsKIH0KIAogCisvKioKKyAqIFR1cm4gdGhlIExDRCBiYWNrbGlnaHQgb24gb3Igb2ZmLgor
ICogXHBhcmFtIHAgICAgICBQb2ludGVyIHRvIGRyaXZlcidzIGRhdGEgc3RydWN0dXJlLgorICog
XHBhcmFtIHN0YXRlICBOZXcgYmFja2xpZ2h0IHN0YXR1cy4KKyAqLwogdm9pZAogbGNkMnVzYl9I
RDQ0NzgwX2JhY2tsaWdodChQcml2YXRlRGF0YSAqcCwgdW5zaWduZWQgY2hhciBzdGF0ZSkKIHsK
KyAgLy8gR2V0IGJhY2tsaWdodCBicmlnaHRuZXNzLgorICBpbnQgcHJvbWlsbGUgPSAoc3RhdGUg
PT0gQkFDS0xJR0hUX09OKSA/IHAtPmJyaWdodG5lc3MgOiBwLT5vZmZicmlnaHRuZXNzOworCisg
IC8vIEFuZCBzZXQgaXQgKGNvbnZlcnRlZCBmcm9tIFswLDEwMDBdIC0+IFswLDI1NV0pLgorICB1
c2JfY29udHJvbF9tc2cobGNkMnVzYiwgVVNCX1RZUEVfVkVORE9SLCBMQ0QyVVNCX1NFVF9CUklH
SFRORVNTLAorICAgICAgICAgICAgICAgICAgIChwcm9taWxsZSAqIDI1NSkgLyAxMDAwLCAwLCBO
VUxMLCAwLCAxMDAwKTsKK30KKworCisvKioKKyAqIEdldCBjdXJyZW50IExDRCBjb250cmFzdC4K
KyAqIFRoaXMgaXMgb25seSB0aGUgbG9jYWxseSBzdG9yZWQgY29udHJhc3QsIHRoZSBjb250cmFz
dCB2YWx1ZQorICogY2Fubm90IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBMQ0QuCisgKiBccGFyYW0g
ZHJ2dGhpcyAgUG9pbnRlciB0byBkcml2ZXIgc3RydWN0dXJlLgorICogXHJldHVybiAgU3RvcmVk
IGNvbnRyYXN0IGluIHByb21pbGxlLgorICovCitpbnQgCitsY2QydXNiX2dldF9jb250cmFzdChE
cml2ZXIgKmRydnRoaXMpCit7CisgIFByaXZhdGVEYXRhICpwID0gZHJ2dGhpcy0+cHJpdmF0ZV9k
YXRhOworCisgIHJldHVybiBwLT5jb250cmFzdDsKK30KKworCisvKioKKyAqIENoYW5nZSBMQ0Qg
Y29udHJhc3QuCisgKiBccGFyYW0gZHJ2dGhpcyAgUG9pbnRlciB0byBkcml2ZXIgc3RydWN0dXJl
LgorICogXHBhcmFtIHByb21pbGxlIE5ldyBjb250cmFzdCB2YWx1ZSBpbiBwcm9taWxsZS4KKyAq
Lwordm9pZAorbGNkMnVzYl9zZXRfY29udHJhc3QoRHJpdmVyICpkcnZ0aGlzLCBpbnQgcHJvbWls
bGUpCit7CisgIFByaXZhdGVEYXRhICpwID0gZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOworCisgIC8v
IENoZWNrIGlmIHZhbHVlIHdpdGhpbiByYW5nZQorICBpZiAoKHByb21pbGxlIDwgMCkgfHwgKHBy
b21pbGxlID4gMTAwMCkpCisgICAgcmV0dXJuOworCisgIC8vIEFuZCBzZXQgaXQgKGNvbnZlcnRl
ZCBmcm9tIFswLDEwMDBdIC0+IFswLDI1NV0pLgorICAvLyBJZiBzdWNjZXNzZnVsLCB1cGRhdGUg
dGhlIGxvY2FsIHZhbHVlLgorICBpZiAodXNiX2NvbnRyb2xfbXNnKGxjZDJ1c2IsIFVTQl9UWVBF
X1ZFTkRPUiwgTENEMlVTQl9TRVRfQ09OVFJBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAocHJvbWlsbGUgKiAyNTUpIC8gMTAwMCwgMCwgTlVMTCwgMCwgMTAwMCkgPCAwKQorICAg
IHJlcG9ydChSUFRfV0FSTklORywgImhkX2luaXRfbGNkMnVzYjogc2V0dGluZyBjb250cmFzdCBm
YWlsZWQiKTsKKyAgZWxzZQorICAgIHAtPmNvbnRyYXN0ID0gcHJvbWlsbGU7CiB9CiAKIAorLyoq
CisgKiBSZXRyaWV2ZSBicmlnaHRuZXNzLgorICogXHBhcmFtIGRydnRoaXMgIFBvaW50ZXIgdG8g
ZHJpdmVyIHN0cnVjdHVyZS4KKyAqIFxwYXJhbSBzdGF0ZSAgICBCcmlnaHRuZXNzIHN0YXRlIChv
bi9vZmYpIGZvciB3aGljaCB3ZSB3YW50IHRoZSB2YWx1ZS4KKyAqIFxyZXR1cm4gU3RvcmVkIGJy
aWdodG5lc3MgaW4gcHJvbWlsbGUuCisgKi8KK2ludAorbGNkMnVzYl9nZXRfYnJpZ2h0bmVzcyhE
cml2ZXIgKmRydnRoaXMsIGludCBzdGF0ZSkKK3sKKyAgUHJpdmF0ZURhdGEgKnAgPSBkcnZ0aGlz
LT5wcml2YXRlX2RhdGE7CisKKyAgcmV0dXJuIChzdGF0ZSA9PSBCQUNLTElHSFRfT04pID8gcC0+
YnJpZ2h0bmVzcyA6IHAtPm9mZmJyaWdodG5lc3M7Cit9CisKKworLyoqCisgKiBTZXQgb24vb2Zm
IGJyaWdodG5lc3MuCisgKiBUaGUgdmFsdWUgaXMgbm90IGFjdHVhbGx5IHRyYW5zbWl0dGVkIHRv
IHRoZSBkaXNwbGF5LiBsY2QydXNiX2hkNDQ3ODBfYmFja2xpZ2h0CisgKiBoYXMgdG8gYmUgY2Fs
bGVkIHRvIGRvIHRoaXMuCisgKiBccGFyYW0gZHJ2dGhpcyAgUG9pbnRlciB0byBkcml2ZXIgc3Ry
dWN0dXJlLgorICogXHBhcmFtIHN0YXRlICAgIEJyaWdodG5lc3Mgc3RhdGUgKG9uL29mZikgZm9y
IHdoaWNoIHdlIHdhbnQgdG8gc3RvcmUgdGhlIHZhbHVlLgorICogXHBhcmFtIHByb21pbGxlIE5l
dyBicmlnaHRuZXNzIGluIHByb21pbGxlLgorICovCit2b2lkCitsY2QydXNiX3NldF9icmlnaHRu
ZXNzKERyaXZlciAqZHJ2dGhpcywgaW50IHN0YXRlLCBpbnQgcHJvbWlsbGUpCit7CisgIFByaXZh
dGVEYXRhICpwID0gZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOworCisgIC8vIENoZWNrIGlmIHZhbHVl
IHdpdGhpbiByYW5nZQorICBpZiAocHJvbWlsbGUgPCAwIHx8IHByb21pbGxlID4gMTAwMCkKKyAg
ICByZXR1cm47CisKKyAgLyogc3RvcmUgdGhlIHNvZnR3YXJlIHZhbHVlICovCisgIGlmIChzdGF0
ZSA9PSBCQUNLTElHSFRfT04pCisgICAgcC0+YnJpZ2h0bmVzcyA9IHByb21pbGxlOworICBlbHNl
CisgICAgcC0+b2ZmYnJpZ2h0bmVzcyA9IHByb21pbGxlOworfQorCisKKy8qKgorICogUmVhZCBr
ZXlwcmVzcy4KKyAqIFxwYXJhbSBwIFBvaW50ZXIgdG8gZHJpdmVyJ3MgZGF0YSBzdHJ1Y3R1cmUu
CisgKiBccmV0dXJuIEJpdG1hcCBvZiB0aGUgcHJlc3NlZCBrZXlzLgorICovCiB1bnNpZ25lZCBj
aGFyCiBsY2QydXNiX0hENDQ3ODBfc2NhbmtleXBhZChQcml2YXRlRGF0YSAqcCkKIHsKQEAgLTE2
NCw2ICsyNjUsMTEgQEAKICAgcmV0dXJuICdcMCc7CiB9CiAKKworLyoqCisgKiBDbG9zZSB0aGUg
ZHJpdmVyIChkbyBuZWNlc3NhcnkgY2xlYW4tdXApLgorICogXHBhcmFtIHAgUG9pbnRlciB0byBk
cml2ZXIncyBkYXRhIHN0cnVjdHVyZS4KKyAqLwogdm9pZAogbGNkMnVzYl9IRDQ0NzgwX2Nsb3Nl
KFByaXZhdGVEYXRhICpwKQogewotLS0gLi9zZXJ2ZXIvZHJpdmVycy9oZDQ0NzgwLWxjZDJ1c2Iu
aC5vcmlnCVNhdCBPY3QgMTMgMDk6MzQ6NDUgMjAwNworKysgLi9zZXJ2ZXIvZHJpdmVycy9oZDQ0
NzgwLWxjZDJ1c2IuaAlNb24gT2N0IDE1IDAwOjEzOjU4IDIwMDcKQEAgLTMxLDkgKzMxLDkgQEAK
ICNkZWZpbmUgTENEMlVTQl9HRVRfQ1RSTAkoTENEMlVTQl9HRVQgfCAoMjw8MykpCiAjZGVmaW5l
IExDRDJVU0JfR0VUX1JFU0VSVkVEMQkoTENEMlVTQl9HRVQgfCAoMzw8MykpCiAKLSNkZWZpbmUg
REVGQVVMVF9DT05UUkFTVAkzMDAKLSNkZWZpbmUgREVGQVVMVF9CUklHSFRORVNTCTYwMAotI2Rl
ZmluZSBERUZBVUxUX09GRkJSSUdIVE5FU1MJMzAwCisjZGVmaW5lIExDRDJVU0JfREVGQVVMVF9D
T05UUkFTVAk4MDAKKyNkZWZpbmUgTENEMlVTQl9ERUZBVUxUX0JSSUdIVE5FU1MJODAwCisjZGVm
aW5lIExDRDJVU0JfREVGQVVMVF9PRkZCUklHSFRORVNTCTMwMAogCiAvLyBpbml0aWFsaXNlIHRo
aXMgcGFydGljdWxhciBkcml2ZXIKIGludCBoZF9pbml0X2xjZDJ1c2IoRHJpdmVyICpkcnZ0aGlz
KTsKQEAgLTQyLDUgKzQyLDEwIEBACiB2b2lkIGxjZDJ1c2JfSEQ0NDc4MF9iYWNrbGlnaHQoUHJp
dmF0ZURhdGEgKnAsIHVuc2lnbmVkIGNoYXIgc3RhdGUpOwogdW5zaWduZWQgY2hhciBsY2QydXNi
X0hENDQ3ODBfc2NhbmtleXBhZChQcml2YXRlRGF0YSAqcCk7CiB2b2lkIGxjZDJ1c2JfSEQ0NDc4
MF9jbG9zZShQcml2YXRlRGF0YSAqcCk7CitpbnQgbGNkMnVzYl9nZXRfY29udHJhc3QoRHJpdmVy
ICpkcnZ0aGlzKTsKK3ZvaWQgbGNkMnVzYl9zZXRfY29udHJhc3QoRHJpdmVyICpkcnZ0aGlzLCBp
bnQgcHJvbWlsbGUpOworaW50IGxjZDJ1c2JfZ2V0X2JyaWdodG5lc3MoRHJpdmVyICpkcnZ0aGlz
LCBpbnQgc3RhdGUpOwordm9pZCBsY2QydXNiX3NldF9icmlnaHRuZXNzKERyaXZlciAqZHJ2dGhp
cywgaW50IHN0YXRlLCBpbnQgcHJvbWlsbGUpOworCiAKICNlbmRpZgotLS0gLi9zZXJ2ZXIvZHJp
dmVycy9oZDQ0NzgwLWxjZDJ1c2IuaC5vcmlnCVNhdCBPY3QgMTMgMDk6MzQ6NDUgMjAwNworKysg
Li9zZXJ2ZXIvZHJpdmVycy9oZDQ0NzgwLWxjZDJ1c2IuaAlNb24gT2N0IDE1IDAwOjEzOjU4IDIw
MDcKQEAgLTMxLDkgKzMxLDkgQEAKICNkZWZpbmUgTENEMlVTQl9HRVRfQ1RSTAkoTENEMlVTQl9H
RVQgfCAoMjw8MykpCiAjZGVmaW5lIExDRDJVU0JfR0VUX1JFU0VSVkVEMQkoTENEMlVTQl9HRVQg
fCAoMzw8MykpCiAKLSNkZWZpbmUgREVGQVVMVF9DT05UUkFTVAkzMDAKLSNkZWZpbmUgREVGQVVM
VF9CUklHSFRORVNTCTYwMAotI2RlZmluZSBERUZBVUxUX09GRkJSSUdIVE5FU1MJMzAwCisjZGVm
aW5lIExDRDJVU0JfREVGQVVMVF9DT05UUkFTVAk4MDAKKyNkZWZpbmUgTENEMlVTQl9ERUZBVUxU
X0JSSUdIVE5FU1MJODAwCisjZGVmaW5lIExDRDJVU0JfREVGQVVMVF9PRkZCUklHSFRORVNTCTMw
MAogCiAvLyBpbml0aWFsaXNlIHRoaXMgcGFydGljdWxhciBkcml2ZXIKIGludCBoZF9pbml0X2xj
ZDJ1c2IoRHJpdmVyICpkcnZ0aGlzKTsKQEAgLTQyLDUgKzQyLDEwIEBACiB2b2lkIGxjZDJ1c2Jf
SEQ0NDc4MF9iYWNrbGlnaHQoUHJpdmF0ZURhdGEgKnAsIHVuc2lnbmVkIGNoYXIgc3RhdGUpOwog
dW5zaWduZWQgY2hhciBsY2QydXNiX0hENDQ3ODBfc2NhbmtleXBhZChQcml2YXRlRGF0YSAqcCk7
CiB2b2lkIGxjZDJ1c2JfSEQ0NDc4MF9jbG9zZShQcml2YXRlRGF0YSAqcCk7CitpbnQgbGNkMnVz
Yl9nZXRfY29udHJhc3QoRHJpdmVyICpkcnZ0aGlzKTsKK3ZvaWQgbGNkMnVzYl9zZXRfY29udHJh
c3QoRHJpdmVyICpkcnZ0aGlzLCBpbnQgcHJvbWlsbGUpOworaW50IGxjZDJ1c2JfZ2V0X2JyaWdo
dG5lc3MoRHJpdmVyICpkcnZ0aGlzLCBpbnQgc3RhdGUpOwordm9pZCBsY2QydXNiX3NldF9icmln
aHRuZXNzKERyaXZlciAqZHJ2dGhpcywgaW50IHN0YXRlLCBpbnQgcHJvbWlsbGUpOworCiAKICNl
bmRpZgotLS0gLi9zZXJ2ZXIvZHJpdmVycy9oZDQ0NzgwLWxvdy5oLm9yaWcJTW9uIE9jdCAxNSAw
MDoyMToyMiAyMDA3CisrKyAuL3NlcnZlci9kcml2ZXJzL2hkNDQ3ODAtbG93LmgJTW9uIE9jdCAx
NSAwMDoyMjozOCAyMDA3CkBAIC0xMjYsNiArMTI2LDEwIEBACiAJaW50IGtlZXBhbGl2ZWRpc3Bs
YXk7ICAgLy8gV2hlbiA+MCByZWZyZXNoIHVwcGVyIGxlZnQgY2hhciBldmVyeSA8a2VlcGFsaXZl
ZGlzcGxheT4gc2Vjb25kcyB0byBrZWVwIGRpc3BsYXkgYWxpdmUKIAogCWludCBvdXRwdXRfc3Rh
dGU7CS8vIHdoYXQgd2FzIG1vc3QgcmVjZW50bHkgb3V0cHV0IHRvIHRoZSBvdXRwdXQgcG9ydAor
CQorCWludCBjb250cmFzdDsJCS8vIENvbnRyYXN0IHNldHRpbmcgKHJhbmdlIDAgLSAxMDAwKQor
CWludCBicmlnaHRuZXNzOwkJLy8gQnJpZ2h0bmVzcyB3aGVuIGJhY2tsaWdodCBpcyAib24iIChy
YW5nZSAwIC0gMTAwMCkKKwlpbnQgb2ZmYnJpZ2h0bmVzczsJLy8gQnJpZ2h0bmVzcyB3aGVuIGJh
Y2tsaWdodCBpcyAib2ZmIiAocmFuZ2UgMCAtIDEwMDApCiB9IFByaXZhdGVEYXRhOwogCiAvLyBT
dHJ1Y3R1cmVzIGhvbGRpbmcgcG9pbnRlcnMgdG8gSEQ0NDc4MCBzcGVjaWZpYyBmdW5jdGlvbnMK
--========GMX32153119240277577419--