[PATCH] new 2-dir masq patch, and passive FTP mode, with TCP options

Rolf Braun (masq@ns1.helixsystems.com)
Sun, 5 Sep 1999 00:41:10 -0400 (EDT)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--215503375-1513663793-936506470=:2592
Content-Type: TEXT/PLAIN; charset=US-ASCII

The following patch is a new version of the 2-dir masq patch I submitted
to the kernel list about two months ago. It works very differently this
time:
packets coming in on 2-dir connections are marked with an skb flag, which
is interpreted in the forward chain to force masquerading of that packet,
with a second entry created for the other masq direction, also with the
2-dir flag set. Everything is defined out so that it can be a kernel
compile option.

The other patch is to ip_masq_app (the app support) and allows modules to
key into the system by source port rather than dest port, so it works for
servers behind a firewall being accessed from outside. This is also
controlled by a #define. The FTP module has code to support masqing of
passive FTP.

While I was at it, I fixed a serious problem in the FTP module wherein it
assumes the TCP data begins after the TCP header with no options in
between. The following is a Bad Thing:

data = (char *)&th[1];

this is the Right Thing:

data = (char *)th;
data += th->doff*4;

...assuming that proper bounds checking is also being performed which it
is here. This fix is not #defined; it is included regardless of the
options set. The problem affected the passive FTP specifically, but it is
a bug no matter which way it is sliced.

There's one bug in this patch - the tcp/udp checksum code in masq is
conditioned out if the 2-dir option is enabled, because it wasn't working
the second time through. This is a bug somewhere, but I need someone to
explain to me exactly what it's doing and what all the checksum-related
fields in the skb are... thanks.

Oh yes: this _has_ been tested under pretty heavy load. :-)

Any chance of seeing this in 2.2.1[34]?
(btw: my employer waives all rights to this code. it's yours.)

--215503375-1513663793-936506470=:2592
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mbfw.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9909050041100.2592@ns1.helixsystems.com>
Content-Description:
Content-Disposition: attachment; filename="mbfw.c"

LyoNCiAqDQogKgltYmZ3IC0gRlcgTWFyayBGb3J3YXJkaW5nIFRhYmxlIEVk
aXRpbmcNCiAqDQogKiAJJElkOiBtZncuYyx2IDAuMSAxOTk4LzA3LzI5IDE3
OjUwOjMxIGpqbyBFeHAgampvICQNCiAqDQogKglBdXRob3I6IEp1YW4gSm9z
ZSBDaWFybGFudGUgPGpqY2lhcmxhQHJhaXoudW5jdS5lZHUuYXI+DQogKgkg
ICAgICAgIFN0cm9uZ2x5IGJhc2VkIG9uIFN0ZXZlIENsYXJrJ3MgcG9ydGZ3
Lg0KICoNCiAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogKglpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQ0KICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiAq
CShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogKg0KICoJ
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsDQogKglidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICoJ
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQ0KICoJR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKglZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQ0KICoJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqCUZvdW5kYXRpb24sIEluYy4s
IDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLg0KICoN
CiAqIEZpeGVzOg0KICogICAgICBSb2xmIEJyYXVuOiAgICAgICAgICAgICBh
ZGRlZCBtYmZ3LCBiYXNlZCBvbiBtZncNCiAqCUp1YW4gSi4gQ2lhcmxhbnRl
OglhbGxvdyBudWwgcnBvcnQgPT4gdXNlIHBhY2tldCdzIHBvcnQNCiAqLw0K
DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxlcnJuby5oPg0KI2lu
Y2x1ZGUgPGxpbWl0cy5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1
ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUg
PGdldG9wdC5oPg0KDQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+DQojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQojaW5jbHVk
ZSA8bmV0L2lmLmg+DQojaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQojaW5jbHVk
ZSA8bGludXgvaXBfbWFzcS5oPg0KDQojaW5jbHVkZSAiaXBtYXNxYWRtLmgi
DQojaW5jbHVkZSAiaXBtYXNxY3RsLmgiDQoNCiNkZWZpbmUgSVBfTUFSS0ZX
X0RFRl9QUkVGIDEwDQoNCmludCBkb19zZXRzb2Nrb3B0KGludCBjbWQsIHN0
cnVjdCBpcF9tYXNxX2N0bCAqbSwgaW50IG1sZW4pOw0Kdm9pZCBleGl0X2Vy
cm9yKGludCBzdGF0dXMsIGNoYXIgKm1zZyk7DQp2b2lkIGV4aXRfZGlzcGxh
eV9oZWxwKHZvaWQpOw0KaW50IGxpc3RfZm9yd2FyZGluZyhpbnQpOw0KDQpz
dGF0aWMgY29uc3QgY2hhciAqbW9kbmFtZTsNCg0KaW50IG1hc3Ftb2RfbWFp
bihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQ0Kew0KCWludCBjOw0K
CWludCBjb21tYW5kID0gSVBfTUFTUV9DTURfTk9ORTsNCglzdHJ1Y3QgaXBf
bWFzcV9jdGwgbWN0bDsNCiNkZWZpbmUgbWJmdyBtY3RsLnUubWJmd191c2Vy
DQoJc3RydWN0IHNvY2thZGRyX2luIHJlZGlyX3NpbiwgbG1fc2luOw0KCWlu
dCB0bXA7DQoJaW50IG5vbmFtZXMgPSAwOw0KDQoJbWVtc2V0ICgmcmVkaXJf
c2luLCAwLCBzaXplb2YgKHJlZGlyX3NpbikpOw0KCW1lbXNldCAoJmxtX3Np
biwgMCwgc2l6ZW9mIChsbV9zaW4pKTsNCgltYmZ3LmZ3bWFyayA9IDA7DQoJ
bWJmdy5yYWRkciA9IDA7DQoJbWJmdy5ycG9ydCA9IDA7DQoJbWJmdy5mbGFn
cyA9IDA7DQoJbWJmdy5sbWFkZHIgPSAwOw0KCW1iZncucHJlZiAgPSBJUF9N
QVJLRldfREVGX1BSRUY7DQoNCgltb2RuYW1lID0gYXJndlswXTsNCg0KCXdo
aWxlICgoYyA9IGdldG9wdChhcmdjLCAoY2hhcioqKSBhcmd2LCAiQUVERlNM
bm06cjpwOmw6aCIpKSAhPSAtMSkNCgkJc3dpdGNoIChjKSB7DQoJCWNhc2Ug
J0EnOg0KCQkJaWYgKGNvbW1hbmQgIT0gSVBfTUFTUV9DTURfTk9ORSkNCgkJ
CQlleGl0X2Vycm9yKDIsICJtdWx0aXBsZSBjb21tYW5kcyBzcGVjaWZpZWQi
KTsNCgkJCWNvbW1hbmQgPSBJUF9NQVNRX0NNRF9BREQ7DQoJCQlicmVhazsN
CgkJY2FzZSAnRSc6DQoJCQlpZiAoY29tbWFuZCAhPSBJUF9NQVNRX0NNRF9O
T05FKQ0KCQkJCWV4aXRfZXJyb3IoMiwgIm11bHRpcGxlIGNvbW1hbmRzIHNw
ZWNpZmllZCIpOw0KCQkJY29tbWFuZCA9IElQX01BU1FfQ01EX1NFVDsNCgkJ
CWJyZWFrOw0KCQljYXNlICdEJzoNCgkJCWlmIChjb21tYW5kICE9IElQX01B
U1FfQ01EX05PTkUpDQoJCQkJZXhpdF9lcnJvcigyLCAibXVsdGlwbGUgY29t
bWFuZHMgc3BlY2lmaWVkIik7DQoJCQljb21tYW5kID0gSVBfTUFTUV9DTURf
REVMOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ0YnOg0KCQkJaWYgKGNvbW1hbmQg
IT0gSVBfTUFTUV9DTURfTk9ORSkNCgkJCQlleGl0X2Vycm9yKDIsICJtdWx0
aXBsZSBjb21tYW5kcyBzcGVjaWZpZWQiKTsNCgkJCWNvbW1hbmQgPSBJUF9N
QVNRX0NNRF9GTFVTSDsNCgkJCWJyZWFrOw0KCQljYXNlICdTJzoNCgkJCWlm
IChjb21tYW5kICE9IElQX01BU1FfQ01EX05PTkUpDQoJCQkJZXhpdF9lcnJv
cigyLCAibXVsdGlwbGUgY29tbWFuZHMgc3BlY2lmaWVkIik7DQoJCQljb21t
YW5kID0gSVBfTUFTUV9DTURfU0VUOw0KCQkJbWJmdy5mbGFncyB8PSBJUF9N
QVNRX01GV19TQ0hFRDsNCgkJCWJyZWFrOw0KICAgICAgICAgICAgICAgIGNh
c2UgJ0wnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQg
IT0gSVBfTUFTUV9DTURfTk9ORSkNCgkJCQlleGl0X2Vycm9yKDIsICJtdWx0
aXBsZSBjb21tYW5kcyBzcGVjaWZpZWQiKTsNCgkJCWNvbW1hbmQgPSBJUF9N
QVNRX0NNRF9MSVNUOw0KCQkJYnJlYWs7DQoNCgkJY2FzZSAnbic6DQoJCQlu
b25hbWVzKys7DQoJCQlicmVhazsNCg0KCQljYXNlICdtJzoNCgkJCW1iZncu
ZndtYXJrID0gYXRvaShvcHRhcmcpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3In
Og0KCQkJaWYgKHJlZGlyX3Npbi5zaW5fYWRkci5zX2FkZHJ8fHJlZGlyX3Np
bi5zaW5fcG9ydCkNCgkJCQlleGl0X2Vycm9yKDIsICJtdWx0aXBsZSBkZXN0
aW5hdGlvbnMgc3BlY2lmaWVkIik7DQoJCQl0bXAgPSBvcHRpbmQtMTsNCgkJ
CXRtcCA9IHBhcnNlX2FkZHJlc3Nwb3J0KGFyZ3YrdG1wLCBhcmdjLXRtcCwg
JnJlZGlyX3Npbiwgbm9uYW1lcyk7DQoNCgkJCWlmICh0bXAgPCAxKQ0KCQkJ
CWV4aXRfZXJyb3IoMiwgImlsbGVnYWwgZGVzdGluYXRpb24gc3BlY2lmaWVk
Iik7DQoJCQlvcHRpbmQgKz0gdG1wIC0xOw0KCQkJYnJlYWs7DQoJCWNhc2Ug
J2wnOg0KCQkJaWYgKGxtX3Npbi5zaW5fYWRkci5zX2FkZHIpDQoJCQkJZXhp
dF9lcnJvcigyLCAibXVsdGlwbGUgbG9jYWwgbWFzcSBhZGRyZXNzZXMgc3Bl
Y2lmaWVkIik7DQoJCQl0bXAgPSBvcHRpbmQtMTsNCgkJCXRtcCA9IHBhcnNl
X2FkZHJlc3Nwb3J0KGFyZ3YrdG1wLCBhcmdjLXRtcCwgJmxtX3Npbiwgbm9u
YW1lcyk7DQoJCQlpZiAodG1wIDwgMSkNCgkJCQlleGl0X2Vycm9yKDIsICJp
bGxlZ2FsIGxvY2FsIG1hc3EgYWRkcmVzcyIpOw0KCQkJb3B0aW5kICs9IHRt
cC0xOw0KCQkJYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncCc6DQog
ICAgICAgICAgICAgICAgICAgICAgICBtYmZ3LnByZWYgPSBhdG9pKG9wdGFy
Zyk7DQoNCgkJCS8qDQoJCQkgKglwcmVmID09IDAgbWFya3MgdGhlIGVudHJ5
IGFzIHVuLXNjaGVkdWxhYmxlDQoJCQkgKi8NCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtYmZ3LnByZWYgPCAwKQ0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleGl0X2Vycm9yKDIsICJpbGxlZ2FsIHByZWZlcmVu
Y2UgdmFsdWUgc3BlY2lmaWVkIik7DQogICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsNCgkJY2FzZSAnaCc6DQoJCWNhc2UgJz8nOg0KCQlkZWZhdWx0
Og0KCQkJZXhpdF9kaXNwbGF5X2hlbHAoKTsNCgkJfQ0KDQogICAgICAgIGlm
IChvcHRpbmQgPCBhcmdjKSB7DQoJCXByaW50Zigib3B0aW5kPSVkICglcykg
YXJnYz0lZFxuIiwgb3B0aW5kLCBhcmd2W29wdGluZC0xXSwgYXJnYyk7DQog
ICAgICAgICAgICAgICAgZXhpdF9lcnJvcigyLCAidW5rbm93biBhcmd1bWVu
dHMgZm91bmQgb24gY29tbWFuZGxpbmUiKTsNCgl9DQoNCgltYmZ3LnJwb3J0
ID0gcmVkaXJfc2luLnNpbl9wb3J0Ow0KCW1iZncucmFkZHIgPSByZWRpcl9z
aW4uc2luX2FkZHIuc19hZGRyOw0KCW1iZncubG1hZGRyID0gbG1fc2luLnNp
bl9hZGRyLnNfYWRkcjsNCglpZiAoY29tbWFuZCA9PSBJUF9NQVNRX0NNRF9O
T05FKQ0KCQlleGl0X2Rpc3BsYXlfaGVscCgpOw0KDQoJZWxzZSBpZiAoY29t
bWFuZCA9PSBJUF9NQVNRX0NNRF9BREQgJiYgKG1iZncuZndtYXJrID09IDAg
KSkNCiNpZiAwDQoJCSB8fCBtYmZ3LnJwb3J0ID09IDAgfHwgbWJmdy5yYWRk
ciA9PSAwIHx8IG1iZncubG1hZGRyID09IDApKQ0KI2VuZGlmDQoJCWV4aXRf
ZXJyb3IoMiwgImluc3VmZmljaWVudCBvcHRpb25zIHNwZWNpZmllZCIpOw0K
DQoJZWxzZSBpZiAoY29tbWFuZCA9PSBJUF9NQVNRX0NNRF9ERUwgJiYNCgkJ
KG1iZncuZndtYXJrID09IDApKQ0KCQlleGl0X2Vycm9yKDIsICJpbnN1ZmZp
Y2llbnQgb3B0aW9ucyBzcGVjaWZpZWQiKTsNCg0KI2lmIDANCgllbHNlIGlm
IChjb21tYW5kID09IElQX01BU1FfQ01EX0RFTCAmJg0KCQkgKG1iZncucnBv
cnQgIT0gMCB8fCBtYmZ3LnJhZGRyICE9IDApKQ0KCQlleGl0X2Vycm9yKDIs
ICJpbmNvbXBhdGlibGUgb3B0aW9ucyBzcGVjaWZpZWQiKTsNCiNlbmRpZiAg
ICAgICAgDQoNCgllbHNlIGlmICgoY29tbWFuZCA9PSBJUF9NQVNRX0NNRF9G
TFVTSCB8fCBjb21tYW5kID09IElQX01BU1FfQ01EX0xJU1QpICYmDQoJCSAo
bWJmdy5md21hcmsgIT0gMCB8fCBtYmZ3LnJwb3J0ICE9IDAgfHwgbWJmdy5y
YWRkciAhPSAwKSkNCgkJZXhpdF9lcnJvcigyLCAiaW5jb21wYXRpYmxlIG9w
dGlvbnMgc3BlY2lmaWVkIik7DQoNCiAgICAgICAgaWYgKGNvbW1hbmQgPT0g
SVBfTUFTUV9DTURfTElTVCkgew0KDQoJCS8qCUp1c3QgInBlZWsiIGZvciBr
ZXJuZWwgbW9kdWxlICAqLw0KCQlkb19zZXRzb2Nrb3B0KElQX01BU1FfQ01E
X05PTkUsICZtY3RsLCBzaXplb2YobWN0bCkpOw0KCQlyZXR1cm4gbGlzdF9m
b3J3YXJkaW5nKG5vbmFtZXMpOw0KCX0NCiAgICAgICAgICAgICAgICANCgly
ZXR1cm4oZG9fc2V0c29ja29wdChjb21tYW5kLCAmbWN0bCwgc2l6ZW9mKG1j
dGwpKSk7DQp9DQoNCmludCBkb19zZXRzb2Nrb3B0KGludCBjbWQsIHN0cnVj
dCBpcF9tYXNxX2N0bCAqbSwgaW50IG1sZW4pDQp7DQoJaW50IHNvY2tmZDsN
CglpbnQgcmV0Ow0KDQoJaWYgKChzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVCwg
U09DS19SQVcsIElQUFJPVE9fUkFXKSkgPCAwKSB7DQoJCXBlcnJvcigibWJm
dzogc29ja2V0IGNyZWF0aW9uIGZhaWxlZCIpOw0KCQlleGl0KDEpOw0KCX0N
CgkNCgkvKiBUaGlzIGlzIGEgbWFzcS1tb2QgdGFyZ2V0IG9wICovDQoJbS0+
bV90YXJnZXQgPSBJUF9NQVNRX1RBUkdFVF9NT0Q7DQoJDQoJLyogVGhpcyBp
cyB0aGUgdGFyZ2V0IG1vZHVsZSBuYW1lICovDQoJc3RybmNweShtLT5tX3Ru
YW1lLCBtb2RuYW1lLCBzaXplb2YobS0+bV90bmFtZSkpOw0KDQoJLyogVGhp
cyBpcyB0aGUgY29tbWFuZCAqLw0KCW0tPm1fY21kID0gY21kOw0KDQoJLyog
SGVyZSB3ZSBnbyAuLi4gKi8NCglyZXQgPSBzZXRzb2Nrb3B0KHNvY2tmZCwg
SVBQUk9UT19JUCwgSVBfRldfTUFTUV9DVEwgLCAodm9pZCAqKSBtLCBtbGVu
KTsNCglpZiAocmV0KQ0KCQlwZXJyb3IoIm1iZnc6IHNldHNvY2tvcHQgZmFp
bGVkIik7DQoNCglyZXR1cm4gcmV0Ow0KfQ0KDQoNCnZvaWQgZXhpdF9lcnJv
cihpbnQgc3RhdHVzLCBjaGFyICptc2cpDQp7DQoJZnByaW50ZihzdGRlcnIs
ICIlczogJXNcbiIsIG1vZG5hbWUsIG1zZyk7DQoJZXhpdChzdGF0dXMpOw0K
fQ0KDQppbnQgbGlzdF9mb3J3YXJkaW5nKGludCBubSkNCnsNCiAgIGNoYXIg
YnVmZmVyWzI1Nl07DQogICBpbnQgbG51bSA9IDA7DQogICBjaGFyIHJhX25h
bWVbODBdLCByYTJfbmFtZVs4MF07DQogICBjaGFyIHJzX25hbWVbMTZdOw0K
ICAgdW5zaWduZWQgaW50IGZ3bWFyazsNCiAgIHVuc2lnbmVkIGludCBocmFk
ZHI9MCwgaHJwb3J0PTAsIGxhZGRyPTA7DQogICBpbnQgcHJlZl9jbnQsIHBy
ZWY7DQogICBGSUxFICpoYW5kbGUgPSBOVUxMOw0KICAgY29uc3QgY2hhciAq
cHJvY19uYW1lc1tdID0gew0KCSAgICIvcHJvYy9uZXQvaXBfbWFzcS9tYmZ3
IiwNCgkgICBOVUxMDQogICB9Ow0KICAgY29uc3QgY2hhciAqKnByb2NfbmFt
ZSA9IHByb2NfbmFtZXM7DQoNCiAgIGZvciAoOypwcm9jX25hbWU7cHJvY19u
YW1lKyspIHsNCgloYW5kbGUgPSBmb3BlbigqcHJvY19uYW1lLCAiciIpOw0K
CWlmIChoYW5kbGUpIA0KCQlicmVhazsNCglmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkIG5vdCBvcGVuIFwiJXNcIlxuIiwgKnByb2NfbmFtZSk7DQogICB9DQoN
CiAgIGlmICghaGFuZGxlKSB7DQoJICAgZnByaW50ZihzdGRlcnIsICJDaGVj
ayBpZiB5b3UgaGF2ZSBlbmFibGVkIGZ3bWFyay1mb3J3YXJkaW5nXG4iKTsN
CgkgICByZXR1cm4gMTsNCiAgIH0NCg0KICAgLyoNCiAgICAqCUxpbmUgZm9y
bWF0Og0KICAgICoJRldNYXJrID4gUkFkZHIgICAgUlBvcnQgUHJDbnQgIFBy
ZWYgICAgICAgICAgICAgICANCiAgICAqCTEwMjAgICA+IEMwQTgwMjBCICAg
IDU2ICAgIDEwICAgIDEwICAgICAgICAgICAgICAgDQogICAgKg0KICAgICov
DQoNCiAgIHdoaWxlICghZmVvZihoYW5kbGUpKQ0KICAgICAgIGlmIChmZ2V0
cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBoYW5kbGUpKSB7DQoJICAgaWYg
KGxudW0pIHsNCgkJcHJlZl9jbnQgPSBwcmVmID0gLTE7DQoJCXNzY2FuZihi
dWZmZXIsICIleCA+ICV4ICVkICV4ICVkICVkIiwgDQoJCQkmZndtYXJrLCAN
CgkJCSZocmFkZHIsICZocnBvcnQsICZsYWRkciwNCgkJCSZwcmVmX2NudCwg
JnByZWYpOw0KDQoJCXByaW50ZigiJS04ZCAlLTIwcyAlOHMgJS0yMHMgJTVk
ICU1ZFxuIiwgDQoJCQlmd21hcmssIA0KCQkJYWRkcl90b19uYW1lKG50b2hs
KGhyYWRkciksIHJhX25hbWUsIHNpemVvZihyYV9uYW1lKSwgbm0pLA0KCQkJ
c2Vydl90b19uYW1lKG50b2hzKGhycG9ydCksIHJzX25hbWUsIHNpemVvZihy
c19uYW1lKSwgbm0pLA0KCQkJYWRkcl90b19uYW1lKG50b2hsKGxhZGRyKSwg
cmEyX25hbWUsIHNpemVvZihyYTJfbmFtZSksIG5tKSwNCgkJCXByZWZfY250
LCANCgkJCXByZWYpOw0KCSAgIH0gZWxzZSB7DQoJCXByaW50ZigiJS04cyAl
LTIwcyAlOHMgJS0yMHMgJTVzICU1c1xuIiwgDQoJCSAgIAkiZndtYXJrIiwN
CgkJCSJyZWRpcmFkZHIiLA0KCQkJInJwb3J0IiwgImxhZGRyIiwNCgkJCSJw
Y250IiwgInByZWYiKTsNCgkgICB9DQoJICAgbG51bSsrOw0KICAgICAgIH0N
CiAgIGZjbG9zZShoYW5kbGUpOw0KICAgcmV0dXJuIDA7DQoNCn0NCg0Kdm9p
ZCBleGl0X2Rpc3BsYXlfaGVscCh2b2lkKQ0Kew0KCXByaW50ZigNCiJVc2Fn
ZTogJXMgLUEgLW0gRldNQVJLIC1yIFJBRERSIFJQT1JUIC1sIExIT1NUIFst
cCBQUkVGXSBhZGQgZW50cnlcbiINCiIgICAgICAgJXMgLUQgLW0gRldNQVJL
IFstciBSQUREUiBSUE9SVF0gICAgICAgICBkZWxldGUgZW50cnlcbiINCiIg
ICAgICAgJXMgLUUgLW0gRldNQVJLIFstciBSQUREUiBSUE9SVF0gICAgICAg
ICBlZGl0IGVudHJ5XG4iDQoiICAgICAgICVzIC1TIC1tIEZXTUFSSyAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yY2Ugc2NoZWR1bGluZ1xuIg0KIiAg
ICAgICAlcyAtRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsZWFyIHRhYmxlXG4iDQoiICAgICAgICVzIC1MICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdCB0YWJsZVxuIg0KIiAgICAgICAl
cyA8YXJncz4gLW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIG5h
bWVzXG5cbiINCiJGV01BUksgaXMgdGhlIGZ3bWFyayBiZWluZyByZWRpcmVj
dGVkLlxuIg0KIlJBRERSIGlzIHRoZSByZW1vdGUgYWRkcmVzcy5cbiINCiJS
UE9SVCBpcyB0aGUgcG9ydCBiZWluZyByZWRpcmVjdGVkIHRvLlxuIg0KIlBS
RUYgIGlzIHRoZSBwcmVmZXJlbmNlIGxldmVsIChsb2FkIGJhbGFuY2luZywg
ZGVmYXVsdD0lZClcbiINCiJMSE9TVCBpcyB0aGUgbG9jYWwgaG9zdCBmcm9t
IHdoaWNoIHRoZSByZWRpcmVjdGVkIGNvbm5lY3Rpb24gd2lsbCBhcHBlYXIg
dG8gYmUgY29taW5nICh1c2UgdGhlIGNvcnJlY3QgZ2F0ZXdheSBwbGVhc2Uh
KSIsDQogICAgICAgICAgICAgICBtb2RuYW1lLCBtb2RuYW1lLCBtb2RuYW1l
LCBtb2RuYW1lLCBtb2RuYW1lLCBtb2RuYW1lLCBtb2RuYW1lLA0KICAgICAg
ICAgICAgICAgSVBfTUFSS0ZXX0RFRl9QUkVGKTsNCg0KCWV4aXQoMCk7DQp9
DQo=
--215503375-1513663793-936506470=:2592
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ip_masq_mbfw.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9909050041101.2592@ns1.helixsystems.com>
Content-Description:
Content-Disposition: attachment; filename="ip_masq_mbfw.c"

LyogYmlkaXJlY3Rpb25hbC1tYXNxdWVyYWRpbmcgbWFyayBmb3J3YXJkaW5n
IChtYmZ3KQ0KICAgUkFCIDIuMi41IDE0MDY5OSAqLw0KDQovKiBUaGlzIG1v
ZHVsZSBpcyBpbnRlbmRlZCBmb3IgbG9jYWwgY29ubmVjdGlvbnMgKGZyb20g
YSBzaW5nbGUgaW50ZXJmYWNlIHRvIGl0c2VsZikNCiAgIG9ubHkhIEl0IGhh
cyB0aGUgdW53YW50ZWQgYnV0IHVuYXZvaWRhYmxlIHNpZGUgZWZmZWN0IG9m
IG9ic2N1cmluZyB0aGUgcmVhbCBJUCBpbiBzZXJ2ZXINCiAgIGxvZ3MuIFRo
ZXJlZm9yZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZmlyZXdhbGwg
cnVsZXMgYmUgc2V0IHVwIHRvIGxvZyBhbGwgaW5jb21pbmcNCiAgIGNvbm5l
Y3Rpb25zIGludG8gdGhpcyBtb2R1bGUgKG1ha2Ugc3VyZSB0byB1c2UgLXkg
LWwgaW5zdGVhZCBvZiBqdXN0IC1sIHRvIGF2b2lkDQogICBvdmVyc2l6ZWQg
bG9nIGZpbGVzIDotKSBhbmQgdGhhdCBmaXJld2FsbCBydWxlcyBiZSBzcGxp
dCBzbyB0aGF0IG91dHNpZGUgY29ubmVjdGlvbnMNCiAgIHVzZSB0aGUgb3Ro
ZXIgbWZ3IG1vZHVsZSAqLw0KDQovKg0KICoJCUlQX01BU1FfTUFSS0ZXIG1h
c3F1ZXJhZGluZyBtb2R1bGUNCiAqDQogKglEb2VzIChyZXZlcnNlLW1hc3Ep
IGZvcndhcmRpbmcgYmFzZWQgb24gc2tiLT5md21hcmsgdmFsdWUNCiAqDQog
KgkkSWQ6IGlwX21hc3FfbWZ3LmMsdiAxLjMgMTk5OS8wMS8yNiAwNTozMzo0
NyBkYXZlbSBFeHAgJA0KICoNCiAqIEF1dGhvcjoJSnVhbiBKb3NlIENpYXJs
YW50ZSAgIDxqamNpYXJsYUByYWl6LnVuY3UuZWR1LmFyPg0KICoJCSAgYmFz
ZWQgb24gU3RldmVuIENsYXJrZSdzIHBvcnRmdw0KICoNCiAqIEZpeGVzOgkN
CiAqICAgICAgUm9sZiBCcmF1bjogICAgICAgICAgICAgY3JlYXRlZCBtYmZ3
IG1vZHVsZXMgZnJvbSBtZncgbW9kdWxlDQogKgkJCQlibGF0YW50IHBsdWc6
IHRoaXMgaGFjayB3YXMgc3VwcG9ydGVkDQogKiAJCQkJYnkgSGVsaXggQ29t
cHV0ZXIgU3lzdGVtcw0KICoJCQkJPGh0dHA6Ly93d3cuaGVsaXhzeXN0ZW1z
LmNvbT4NCiAqCUp1YW5KbyBDaWFybGFudGU6CWFkZGVkIHUtc3BhY2Ugc2No
ZWQgc3VwcG9ydA0KICoJSnVhbkpvIENpYXJsYW50ZToJaWYgcnBvcnQ9PTAs
IHVzZSBwYWNrZXQgZGVzdCBwb3J0ICpncmluKg0KICoJSnVhbkpvIENpYXJs
YW50ZToJZml4ZWQgdGNwIHN5biYmIWFjayBjcmVhdGlvbg0KICoNCiAqDQog
Ki8NCiNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4NCiNpbmNsdWRlIDxsaW51
eC9tb2R1bGUuaD4NCiNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KI2luY2x1
ZGUgPGxpbnV4L2tlcm5lbC5oPg0KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+
DQojaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KI2luY2x1ZGUgPG5ldC9pcC5o
Pg0KI2luY2x1ZGUgPGxpbnV4L2lwX2Z3Lmg+DQojaW5jbHVkZSA8bGludXgv
aXBfbWFzcS5oPg0KI2luY2x1ZGUgPG5ldC9pcF9tYXNxLmg+DQojaW5jbHVk
ZSA8bmV0L2lwX21hc3FfbW9kLmg+DQojaW5jbHVkZSA8bGludXgvcHJvY19m
cy5oPg0KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCiNpbmNsdWRlIDxhc20v
c29mdGlycS5oPg0KI2luY2x1ZGUgPGFzbS9zcGlubG9jay5oPg0KI2luY2x1
ZGUgPGFzbS9hdG9taWMuaD4NCg0Kc3RhdGljIHN0cnVjdCBpcF9tYXNxX21v
ZCAqbW1vZF9zZWxmID0gTlVMTDsNCiNpZmRlZiBDT05GSUdfSVBfTUFTUV9E
RUJVRw0Kc3RhdGljIGludCBkZWJ1Zz0wOw0KTU9EVUxFX1BBUk0oZGVidWcs
ICJpIik7DQojZW5kaWYNCg0KLyoNCiAqICBMaXN0cyBzdHJ1Y3R1cmU6DQog
KglUaGVyZSBpcyBhICJtYWluIiBsaW5rZWQgbGlzdCB3aXRoIGVudHJpZXMg
aGFzaGVkDQogKglieSBmd21hcmsgdmFsdWUgKHN0cnVjdCBpcF9tYXNxX21m
dywgdGhlICJtLWVudHJpZXMiKS4NCiAqDQogKglFYWNoIG9mIHRoaXMgbS1l
bnRyeSBob2xkcyBhIGRvdWJsZSBsaW5rZWQgbGlzdA0KICoJb2YgImZvcndh
cmQtdG8iIGhvc3RzIChzdHJ1Y3QgaXBfbWFzcV9tZndfaG9zdCwgdGhlICJt
Lmhvc3QiKSwNCiAqCXRoZSByb3VuZC1yb2JpbiBzY2hlZHVsaW5nIHRha2Vz
IHBsYWNlIGJ5IHJvdGF0aW5nIG0uaG9zdCBlbnRyaWVzDQogKgkiaW5zaWRl
IiBpdHMgbS1lbnRyeS4NCiAqLw0KDQovKg0KICoJRWFjaCBmb3J3YXJkZWQg
aG9zdCAoYWRkcjpwb3J0KSBpcyBzdG9yZWQgaGVyZQ0KICovDQpzdHJ1Y3Qg
aXBfbWFzcV9tYmZ3X2hvc3Qgew0KCXN0cnVjdCAJbGlzdF9oZWFkIGxpc3Q7
DQoJX191MzIgCWFkZHI7DQoJX191MTYJcG9ydDsNCglfX3UxNglwYWQwOw0K
CV9fdTMyCWxtYWRkcjsgLyogbG9jYWwgbWFzcXVlcmFkaW5nIGFkZHJlc3Mg
Ki8NCglfX3UzMiAJZndtYXJrOw0KCWludCAJcHJlZjsNCglhdG9taWNfdAlw
cmVmX2NudDsNCn07DQoNCiNkZWZpbmUgSVBfTUFTUV9NQkZXX0hTSVpFCTE2
DQovKg0KICoJVGhpcyBlbnRyaWVzIGFyZSBpbmRleGVkIGJ5IGZ3bWFyaywg
DQogKgl0aGV5IGhvbGQgYSBsaXN0IG9mIGZvcndhcmRlZCBhZGRyOnBvcnQN
CiAqLwkNCg0Kc3RydWN0IGlwX21hc3FfbWJmdyB7DQoJc3RydWN0IGlwX21h
c3FfbWJmdyAqbmV4dDsJLyogbGlua2VkIGxpc3QgKi8NCglfX3UzMiBmd21h
cms7CQkJLyoga2V5OiBmaXJld2FsbCBtYXJrICovDQoJc3RydWN0IGxpc3Rf
aGVhZCBob3N0czsJCS8qIGxpc3Qgb2YgZm9yd2FyZC10byBob3N0cyAqLw0K
CWF0b21pY190IG5ob3N0czsJCS8qIG51bWJlciBvZiAiIiAqLw0KI2lmZGVm
IF9fU01QX18NCglyd2xvY2tfdCBsb2NrOw0KI2VuZGlmDQp9Ow0KDQoNCnN0
YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIG1iZndfc2VtYSA9IE1VVEVYOw0KI2lm
ZGVmIF9fU01QX18NCnN0YXRpYyByd2xvY2tfdCBtYmZ3X2xvY2sgPSBSV19M
T0NLX1VOTE9DS0VEOw0KI2VuZGlmDQoNCnN0YXRpYyBzdHJ1Y3QgaXBfbWFz
cV9tYmZ3ICppcF9tYXNxX21iZndfdGFibGVbSVBfTUFTUV9NQkZXX0hTSVpF
XTsNCg0Kc3RhdGljIF9faW5saW5lX18gaW50IG1iZndfaGFzaF92YWwoaW50
IGZ3bWFyaykNCnsNCglyZXR1cm4gZndtYXJrICYgMHgwZjsNCn0NCg0KLyoN
CiAqCUdldCBtLWVudHJ5IGJ5ICJmd21hcmsiDQogKglDYWxsZXIgbXVzdCBs
b2NrIHRhYmxlcy4NCiAqLw0KDQpzdGF0aWMgc3RydWN0IGlwX21hc3FfbWJm
dyAqX19tYmZ3X2dldChpbnQgZndtYXJrKQ0Kew0KCXN0cnVjdCBpcF9tYXNx
X21iZncqIG1iZnc7DQoJaW50IGhhc2ggPSBtYmZ3X2hhc2hfdmFsKGZ3bWFy
ayk7DQoNCglmb3IgKG1iZnc9aXBfbWFzcV9tYmZ3X3RhYmxlW2hhc2hdO21i
Znc7bWJmdz1tYmZ3LT5uZXh0KSB7DQoJCWlmIChtYmZ3LT5md21hcms9PWZ3
bWFyaykgew0KCQkJZ290byBvdXQ7DQoJCX0NCgl9DQpvdXQ6DQoJcmV0dXJu
IG1iZnc7DQp9DQoNCi8qDQogKglMaW5rcyBtLWVudHJ5Lg0KICoJQ2FsbGVy
IHNob3VsZCBoYXZlIGNoZWNrZWQgaWYgYWxyZWFkeSBwcmVzZW50IGZvciBz
YW1lIGZ3bWFyaw0KICoNCiAqCUNhbGxlciBtdXN0IGxvY2sgdGFibGVzLg0K
ICovDQpzdGF0aWMgaW50IF9fbWJmd19hZGQoc3RydWN0IGlwX21hc3FfbWJm
dyAqbWJmdykNCnsNCglpbnQgZndtYXJrID0gbWJmdy0+ZndtYXJrOw0KCWlu
dCBoYXNoID0gbWJmd19oYXNoX3ZhbChmd21hcmspOw0KDQoJbWJmdy0+bmV4
dCA9IGlwX21hc3FfbWJmd190YWJsZVtoYXNoXTsNCglpcF9tYXNxX21iZndf
dGFibGVbaGFzaF0gPSBtYmZ3Ow0KCWlwX21hc3FfbW9kX2luY19uZW50KG1t
b2Rfc2VsZik7DQoNCglyZXR1cm4gMDsNCn0NCg0KLyoNCiAqCUNyZWF0ZXMg
YSBtLWVudHJ5IChkb2Vzbid0IGxpbmsgaXQpDQogKi8NCg0Kc3RhdGljIHN0
cnVjdCBpcF9tYXNxX21iZncgKiBtYmZ3X25ldyhpbnQgZndtYXJrKQ0Kew0K
CXN0cnVjdCBpcF9tYXNxX21iZncgKm1iZnc7DQoNCgltYmZ3ID0ga21hbGxv
YyhzaXplb2YoKm1iZncpLCBHRlBfS0VSTkVMKTsNCglpZiAobWJmdyA9PSBO
VUxMKSANCgkJZ290byBvdXQ7DQoNCglNT0RfSU5DX1VTRV9DT1VOVDsNCglt
ZW1zZXQobWJmdywgMCwgc2l6ZW9mKCptYmZ3KSk7DQoJbWJmdy0+ZndtYXJr
ID0gZndtYXJrOw0KI2lmZGVmIF9fU01QX18NCgltYmZ3LT5sb2NrID0gKHJ3
bG9ja190KSBSV19MT0NLX1VOTE9DS0VEOw0KI2VuZGlmDQoNCglJTklUX0xJ
U1RfSEVBRCgmbWJmdy0+aG9zdHMpOw0Kb3V0Og0KCXJldHVybiBtYmZ3Ow0K
fQ0KDQpzdGF0aWMgdm9pZCBtYmZ3X2hvc3RfdG9fdXNlcihzdHJ1Y3QgaXBf
bWFzcV9tYmZ3X2hvc3QgKmgsIHN0cnVjdCBpcF9tYmZ3X3VzZXIgKm11KQ0K
ew0KCW11LT5sbWFkZHIgPSBoLT5sbWFkZHI7DQoJbXUtPnJhZGRyID0gaC0+
YWRkcjsNCgltdS0+cnBvcnQgPSBoLT5wb3J0Ow0KCW11LT5md21hcmsgPSBo
LT5md21hcms7DQoJbXUtPnByZWYgPSBoLT5wcmVmOw0KfQ0KDQovKg0KICoJ
Q3JlYXRlcyBhIG0uaG9zdCAoZG9lc24ndCBsaW5rIGl0IGluIGEgbS1lbnRy
eSkNCiAqLw0Kc3RhdGljIHN0cnVjdCBpcF9tYXNxX21iZndfaG9zdCAqIG1i
ZndfaG9zdF9uZXcoc3RydWN0IGlwX21iZndfdXNlciAqbXUpDQp7DQoJc3Ry
dWN0IGlwX21hc3FfbWJmd19ob3N0ICogbWJmd19ob3N0Ow0KCW1iZndfaG9z
dCA9IGttYWxsb2Moc2l6ZW9mICgqbWJmd19ob3N0KSwgR0ZQX0tFUk5FTCk7
DQoJaWYgKCFtYmZ3X2hvc3QpDQoJCXJldHVybiBOVUxMOw0KDQoJTU9EX0lO
Q19VU0VfQ09VTlQ7DQoJbWVtc2V0KG1iZndfaG9zdCwgMCwgc2l6ZW9mKCpt
YmZ3X2hvc3QpKTsNCgltYmZ3X2hvc3QtPmFkZHIgPSBtdS0+cmFkZHI7DQoJ
bWJmd19ob3N0LT5wb3J0ID0gbXUtPnJwb3J0Ow0KCW1iZndfaG9zdC0+Zndt
YXJrID0gbXUtPmZ3bWFyazsNCgltYmZ3X2hvc3QtPnByZWYgPSBtdS0+cHJl
ZjsNCgltYmZ3X2hvc3QtPmxtYWRkciA9IG11LT5sbWFkZHI7DQoJYXRvbWlj
X3NldCgmbWJmd19ob3N0LT5wcmVmX2NudCwgbXUtPnByZWYpOw0KDQoJcmV0
dXJuIG1iZndfaG9zdDsNCn0NCg0KLyoNCiAqCUNyZWF0ZSBBTkQgbGluayBt
Lmhvc3QgdG8gbS1lbnRyeS4NCiAqCUl0IGxvY2tzIG0ubG9jay4NCiAqLw0K
c3RhdGljIGludCBtYmZ3X2FkZGhvc3Qoc3RydWN0IGlwX21hc3FfbWJmdyAq
bWJmdywgc3RydWN0IGlwX21iZndfdXNlciAqbXUsIGludCBhdHRhaWwpDQp7
DQoJc3RydWN0IGlwX21hc3FfbWJmd19ob3N0ICptYmZ3X2hvc3Q7DQoNCglt
YmZ3X2hvc3QgPSBtYmZ3X2hvc3RfbmV3KG11KTsNCglpZiAoIW1iZndfaG9z
dCkgDQoJCXJldHVybiAtRU5PTUVNOw0KDQoJd3JpdGVfbG9ja19iaCgmbWJm
dy0+bG9jayk7DQoJbGlzdF9hZGQoJm1iZndfaG9zdC0+bGlzdCwgYXR0YWls
PyBtYmZ3LT5ob3N0cy5wcmV2IDogJm1iZnctPmhvc3RzKTsNCglhdG9taWNf
aW5jKCZtYmZ3LT5uaG9zdHMpOw0KCXdyaXRlX3VubG9ja19iaCgmbWJmdy0+
bG9jayk7DQoNCglyZXR1cm4gMDsNCn0NCg0KLyoNCiAqCVVubGluayBBTkQg
ZGVzdHJveSBtLmhvc3QocykgZnJvbSBtLWVudHJ5Lg0KICoJV2lsZGNhcmQg
KG51bCBob3N0IG9yIGFkZHIpIG9rLg0KICoJSXQgdXNlcyBtLmxvY2suDQog
Ki8NCnN0YXRpYyBpbnQgbWJmd19kZWxob3N0KHN0cnVjdCBpcF9tYXNxX21i
ZncgKm1iZncsIHN0cnVjdCBpcF9tYmZ3X3VzZXIgKm11KQ0Kew0KDQoJc3Ry
dWN0IGxpc3RfaGVhZCAqbCwqZTsNCglzdHJ1Y3QgaXBfbWFzcV9tYmZ3X2hv
c3QgKmg7DQoJaW50IG5fZGVsID0gMDsNCglsID0gJm1iZnctPmhvc3RzOw0K
DQoJd3JpdGVfbG9ja19iaCgmbWJmdy0+bG9jayk7DQoJZm9yIChlPWwtPm5l
eHQ7IGUhPWw7IGU9ZS0+bmV4dCkNCgl7DQoJCWggPSBsaXN0X2VudHJ5KGUs
IHN0cnVjdCBpcF9tYXNxX21iZndfaG9zdCwgbGlzdCk7DQoJCWlmICgoIW11
LT5yYWRkciB8fCBoLT5hZGRyID09IG11LT5yYWRkcikgJiYgDQoJCQkoIW11
LT5ycG9ydCB8fCBoLT5wb3J0ID09IG11LT5ycG9ydCkpIHsNCgkJCS8qIEhJ
VCAqLw0KCQkJYXRvbWljX2RlYygmbWJmdy0+bmhvc3RzKTsNCgkJCWxpc3Rf
ZGVsKCZoLT5saXN0KTsNCgkJCWtmcmVlX3MoaCwgc2l6ZW9mKCpoKSk7DQoJ
CQlNT0RfREVDX1VTRV9DT1VOVDsNCgkJCW5fZGVsKys7DQoJCX0NCgkJCQkN
Cgl9DQoJd3JpdGVfdW5sb2NrX2JoKCZtYmZ3LT5sb2NrKTsNCglyZXR1cm4g
bl9kZWw/IDAgOiAtRVNSQ0g7DQp9DQoNCi8qDQogKglDaGFuZ2VzIG0uaG9z
dCBwYXJhbWV0ZXJzDQogKglXaWxkY2FyZHMgb2sNCiAqDQogKglDYWxsZXIg
bXVzdCBsb2NrIHRhYmxlcy4NCiAqLw0Kc3RhdGljIGludCBfX21iZndfZWRp
dGhvc3Qoc3RydWN0IGlwX21hc3FfbWJmdyAqbWJmdywgc3RydWN0IGlwX21i
ZndfdXNlciAqbXUpDQp7DQoNCglzdHJ1Y3QgbGlzdF9oZWFkICpsLCplOw0K
CXN0cnVjdCBpcF9tYXNxX21iZndfaG9zdCAqaDsNCglpbnQgbl9lZGl0ID0g
MDsNCglsID0gJm1iZnctPmhvc3RzOw0KDQoJZm9yIChlPWwtPm5leHQ7IGUh
PWw7IGU9ZS0+bmV4dCkNCgl7DQoJCWggPSBsaXN0X2VudHJ5KGUsIHN0cnVj
dCBpcF9tYXNxX21iZndfaG9zdCwgbGlzdCk7DQoJCWlmICgoIW11LT5yYWRk
ciB8fCBoLT5hZGRyID09IG11LT5yYWRkcikgJiYgDQoJCQkoIW11LT5ycG9y
dCB8fCBoLT5wb3J0ID09IG11LT5ycG9ydCkpIHsNCgkJCS8qIEhJVCAqLw0K
CQkJaC0+cHJlZiA9IG11LT5wcmVmOw0KCQkJYXRvbWljX3NldCgmaC0+cHJl
Zl9jbnQsIG11LT5wcmVmKTsNCgkJCW5fZWRpdCsrOw0KCQl9DQoJCQkJDQoJ
fQ0KCXJldHVybiBuX2VkaXQ/IDAgOiAtRVNSQ0g7DQp9DQoNCi8qDQogKglE
ZXN0cm95cyBtLWVudHJ5Lg0KICoJQ2FsbGVyIG11c3QgaGF2ZSBjaGVja2Vk
IHRoYXQgaXQgZG9lc24ndCBob2xkIGFueSBtLmhvc3QocykNCiAqLw0Kc3Rh
dGljIHZvaWQgbWJmd19kZXN0cm95KHN0cnVjdCBpcF9tYXNxX21iZncgKm1i
ZncpDQp7DQoJa2ZyZWVfcyhtYmZ3LCBzaXplb2YoKm1iZncpKTsNCglNT0Rf
REVDX1VTRV9DT1VOVDsNCn0NCg0KLyogDQogKglVbmxpbmsgbS1lbnRyeS4N
CiAqDQogKglDYWxsZXIgbXVzdCBsb2NrIHRhYmxlcy4NCiAqLw0Kc3RhdGlj
IGludCBfX21iZndfZGVsKHN0cnVjdCBpcF9tYXNxX21iZncgKm1iZncpDQp7
DQoJc3RydWN0IGlwX21hc3FfbWJmdyAqKm1iZndfcDsNCglpbnQgcmV0ID0g
LUVJTlZBTDsNCg0KDQoJZm9yKG1iZndfcD0maXBfbWFzcV9tYmZ3X3RhYmxl
W21iZndfaGFzaF92YWwobWJmdy0+ZndtYXJrKV07IA0KCQkJKm1iZndfcDsg
DQoJCQltYmZ3X3AgPSAmKCgqbWJmd19wKS0+bmV4dCkpIA0KCXsNCgkJaWYg
KG1iZnc9PSgqbWJmd19wKSkgew0KCQkJKm1iZndfcCA9IG1iZnctPm5leHQ7
DQoJCQlpcF9tYXNxX21vZF9kZWNfbmVudChtbW9kX3NlbGYpOw0KCQkJcmV0
ID0gMDsNCgkJCWdvdG8gb3V0Ow0KCQl9DQoJfQ0Kb3V0Og0KCXJldHVybiBy
ZXQ7DQp9DQoNCi8qDQogKglDcnVkZSBtLmhvc3Qgc2NoZWR1bGVyDQogKglU
aGlzIGludGVyZmFjZSBjb3VsZCBiZSBleHBvcnRlZCB0byBhbGxvdyBwbGF5
aW5nIHdpdGggDQogKglvdGhlciBzY2hlZCBwb2xpY2llcy4NCiAqDQogKglD
YWxsZXIgbXVzdCBsb2NrIG0tZW50cnkuDQogKi8NCnN0YXRpYyBzdHJ1Y3Qg
aXBfbWFzcV9tYmZ3X2hvc3QgKiBfX21iZndfc2NoZWQoc3RydWN0IGlwX21h
c3FfbWJmdyAqbWJmdywgaW50IGZvcmNlKQ0Kew0KCXN0cnVjdCBpcF9tYXNx
X21iZndfaG9zdCAqaCA9IE5VTEw7DQoNCglpZiAoYXRvbWljX3JlYWQoJm1i
ZnctPm5ob3N0cykgPT0gMCkNCgkJZ290byBvdXQ7DQoNCgkvKg0KCSAqCUhl
cmUgcmVzaWRlcyBhY3R1YWwgc2NoZWQgcG9saWN5OiANCgkgKglXaGVuIHBy
ZWZfY250IHRvdWNoZXMgMCwgZW50cnkgZ2V0cyBzaGlmdGVkIHRvIHRhaWwg
YW5kDQoJICoJaXRzIHByZWZfY250IHJlbG9hZGVkIGZyb20gaC0+cHJlZiAo
YWN0dWFsIHZhbHVlDQoJICoJcGFzc2VkIGZyb20gdS1zcGFjZSkuDQoJICoN
CgkgKglFeGNlcHRpb24gaXMgcHJlZj09MDogYXZvaWQgc2NoZWR1bGluZy4N
CgkgKi8NCg0KCWggPSBsaXN0X2VudHJ5KG1iZnctPmhvc3RzLm5leHQsIHN0
cnVjdCBpcF9tYXNxX21iZndfaG9zdCwgbGlzdCk7DQoNCglpZiAoYXRvbWlj
X3JlYWQoJm1iZnctPm5ob3N0cykgPD0gMSkNCgkJZ290byBvdXQ7DQoNCglp
ZiAoKGgtPnByZWYgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmaC0+cHJlZl9j
bnQpKSB8fCBmb3JjZSkgew0KCQlhdG9taWNfc2V0KCZoLT5wcmVmX2NudCwg
aC0+cHJlZik7DQoJCWxpc3RfZGVsKCZoLT5saXN0KTsNCgkJbGlzdF9hZGQo
JmgtPmxpc3QsIG1iZnctPmhvc3RzLnByZXYpOw0KCX0NCm91dDoNCglyZXR1
cm4gaDsNCn0NCg0KLyoNCiAqCU1haW4gbG9va3VwIHJvdXRpbmUuDQogKglI
SVRzIGZ3bWFyayBhbmQgc2NoZWR1bGVzIG0uaG9zdCBlbnRyaWVzIGlmIHJl
cXVpcmVkDQogKi8NCnN0YXRpYyBzdHJ1Y3QgaXBfbWFzcV9tYmZ3X2hvc3Qg
KiBtYmZ3X2xvb2t1cChpbnQgZndtYXJrKQ0Kew0KCXN0cnVjdCBpcF9tYXNx
X21iZncgKm1iZnc7DQoJc3RydWN0IGlwX21hc3FfbWJmd19ob3N0ICpoID0g
TlVMTDsNCg0KCXJlYWRfbG9jaygmbWJmd19sb2NrKTsNCgltYmZ3ID0gX19t
YmZ3X2dldChmd21hcmspOw0KDQoJaWYgKG1iZncpIHsNCgkJd3JpdGVfbG9j
aygmbWJmdy0+bG9jayk7DQoJCWggPSBfX21iZndfc2NoZWQobWJmdywgMCk7
DQoJCXdyaXRlX3VubG9jaygmbWJmdy0+bG9jayk7DQoJfQ0KDQoJcmVhZF91
bmxvY2soJm1iZndfbG9jayk7DQoJcmV0dXJuIGg7DQp9DQoNCiNpZmRlZiBD
T05GSUdfUFJPQ19GUw0Kc3RhdGljIGludCBtYmZ3X3Byb2NpbmZvKGNoYXIg
KmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsDQoJCQkgICAg
ICBpbnQgbGVuZ3RoLCBpbnQgZHVtbXkpDQp7DQoJc3RydWN0IGlwX21hc3Ff
bWJmdyAqbWJmdzsNCglzdHJ1Y3QgaXBfbWFzcV9tYmZ3X2hvc3QgKmg7DQoJ
c3RydWN0IGxpc3RfaGVhZCAqbCwqZTsNCglvZmZfdCBwb3M9MCwgYmVnaW47
DQoJY2hhciB0ZW1wWzEyOV07DQogICAgICAgIGludCBpZHggPSAwOw0KCWlu
dCBsZW49MDsNCg0KCU1PRF9JTkNfVVNFX0NPVU5UOw0KDQoJSVBfTUFTUV9E
RUJVRygxLWRlYnVnLCAiRW50ZXJlZCBtYmZ3X2luZm9cbiIpOw0KDQoJaWYg
KG9mZnNldCA8IDY0KQ0KCXsNCiAgICAgICAgICAgICAgICBzcHJpbnRmKHRl
bXAsICJGd01hcmsgPiBSQWRkciAgICBSUG9ydCBQckNudCAgUHJlZiIpOw0K
CQlsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiUtNjNzXG4iLCB0ZW1wKTsNCgl9
DQoJcG9zID0gNjQ7DQoNCiAgICAgICAgZm9yKGlkeCA9IDA7IGlkeCA8IElQ
X01BU1FfTUJGV19IU0laRTsgaWR4KyspDQoJew0KCQlyZWFkX2xvY2soJm1i
ZndfbG9jayk7DQoJCWZvcihtYmZ3ID0gaXBfbWFzcV9tYmZ3X3RhYmxlW2lk
eF07IG1iZncgOyBtYmZ3ID0gbWJmdy0+bmV4dCkNCgkJew0KCQkJcmVhZF9s
b2NrX2JoKCZtYmZ3LT5sb2NrKTsNCgkJCWw9Jm1iZnctPmhvc3RzOw0KDQoJ
CQlmb3IoZT1sLT5uZXh0O2whPWU7ZT1lLT5uZXh0KSB7DQoJCQkJaCA9IGxp
c3RfZW50cnkoZSwgc3RydWN0IGlwX21hc3FfbWJmd19ob3N0LCBsaXN0KTsN
CgkJCQlwb3MgKz0gNjQ7DQoJCQkJaWYgKHBvcyA8PSBvZmZzZXQpIHsNCgkJ
CQkJbGVuID0gMDsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJCQkJc3By
aW50Zih0ZW1wLCIweCV4ID4gJTA4bFggJTV1ICUwOGxYICU1ZCAlNWQiLA0K
CQkJCQkJaC0+ZndtYXJrLA0KCQkJCQkJbnRvaGwoaC0+YWRkciksIG50b2hz
KGgtPnBvcnQpLA0KCQkJCQkJbnRvaGwoaC0+bG1hZGRyKSwgYXRvbWljX3Jl
YWQoJmgtPnByZWZfY250KSwgaC0+cHJlZik7DQoJCQkJbGVuICs9IHNwcmlu
dGYoYnVmZmVyK2xlbiwgIiUtNjNzXG4iLCB0ZW1wKTsNCg0KCQkJCWlmKGxl
biA+PSBsZW5ndGgpIHsNCgkJCQkJcmVhZF91bmxvY2tfYmgoJm1iZnctPmxv
Y2spOw0KCQkJCQlyZWFkX3VubG9jaygmbWJmd19sb2NrKTsNCgkJCQkJZ290
byBkb25lOw0KCQkJCX0NCgkJCX0NCgkJCXJlYWRfdW5sb2NrX2JoKCZtYmZ3
LT5sb2NrKTsNCgkJfQ0KCQlyZWFkX3VubG9jaygmbWJmd19sb2NrKTsNCgl9
DQoNCmRvbmU6DQoNCglpZiAobGVuKSB7DQoJCWJlZ2luID0gbGVuIC0gKHBv
cyAtIG9mZnNldCk7DQoJCSpzdGFydCA9IGJ1ZmZlciArIGJlZ2luOw0KCQls
ZW4gLT0gYmVnaW47DQoJfQ0KCWlmKGxlbj5sZW5ndGgpDQoJCWxlbiA9IGxl
bmd0aDsNCglNT0RfREVDX1VTRV9DT1VOVDsNCglyZXR1cm4gbGVuOw0KfQ0K
c3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSBtYmZ3X3Byb2NfZW50cnkg
PSB7DQovKiAJCTAsIDAsIE5VTEwiLCAqLw0KCQkwLCA0LCAibWJmdyIsDQoJ
CVNfSUZSRUcgfCBTX0lSVUdPLCAxLCAwLCAwLA0KCQkwLCAmcHJvY19uZXRf
aW5vZGVfb3BlcmF0aW9ucywNCgkJbWJmd19wcm9jaW5mbw0KfTsNCg0KI2Rl
ZmluZSBwcm9jX2VudCAmbWJmd19wcm9jX2VudHJ5DQojZWxzZSAvKiAhQ09O
RklHX1BST0NfRlMgKi8NCg0KI2RlZmluZSBwcm9jX2VudCBOVUxMDQojZW5k
aWYNCg0KDQpzdGF0aWMgdm9pZCBtYmZ3X2ZsdXNoKHZvaWQpDQp7DQoJc3Ry
dWN0IGlwX21hc3FfbWJmdyAqbWJmdywgKmxvY2FsX3RhYmxlW0lQX01BU1Ff
TUJGV19IU0laRV07DQoJc3RydWN0IGlwX21hc3FfbWJmd19ob3N0ICpoOw0K
CXN0cnVjdCBpcF9tYXNxX21iZncgKm1iZndfbmV4dDsNCglpbnQgaWR4Ow0K
CXN0cnVjdCBsaXN0X2hlYWQgKmwsKmU7DQoNCgl3cml0ZV9sb2NrX2JoKCZt
YmZ3X2xvY2spOw0KCW1lbWNweShsb2NhbF90YWJsZSwgaXBfbWFzcV9tYmZ3
X3RhYmxlLCBzaXplb2YgaXBfbWFzcV9tYmZ3X3RhYmxlKTsNCgltZW1zZXQo
aXBfbWFzcV9tYmZ3X3RhYmxlLCAwLCBzaXplb2YgaXBfbWFzcV9tYmZ3X3Rh
YmxlKTsNCgl3cml0ZV91bmxvY2tfYmgoJm1iZndfbG9jayk7DQoNCgkvKg0K
CSAqCUZvciBldmVyeSBoYXNoIHRhYmxlIHJvdyAuLi4NCgkgKi8NCglmb3Io
aWR4PTA7aWR4PElQX01BU1FfTUJGV19IU0laRTtpZHgrKykgew0KDQoJCS8q
DQoJCSAqCUZvciBldmVyeSBtLWVudHJ5IGluIHJvdyAuLi4NCgkJICovDQoJ
CWZvcihtYmZ3PWxvY2FsX3RhYmxlW2lkeF07bWJmdzttYmZ3PW1iZndfbmV4
dCkgew0KCQkJLyoNCgkJCSAqCUZvciBldmVyeSBtLmhvc3QgaW4gbS1lbnRy
eSAuLi4NCgkJCSAqLw0KCQkJbD0mbWJmdy0+aG9zdHM7DQoJCQl3aGlsZSgo
ZT1sLT5uZXh0KSAhPSBsKSB7DQoJCQkJaCA9IGxpc3RfZW50cnkoZSwgc3Ry
dWN0IGlwX21hc3FfbWJmd19ob3N0LCBsaXN0KTsNCgkJCQlhdG9taWNfZGVj
KCZtYmZ3LT5uaG9zdHMpOw0KCQkJCWxpc3RfZGVsKCZoLT5saXN0KTsNCgkJ
CQlrZnJlZV9zKGgsIHNpemVvZigqaCkpOw0KCQkJCU1PRF9ERUNfVVNFX0NP
VU5UOw0KCQkJfQ0KDQoJCQlpZiAoYXRvbWljX3JlYWQoJm1iZnctPm5ob3N0
cykpIHsNCgkJCQlJUF9NQVNRX0VSUigibWJmd19mbHVzaCgpOiBhZnRlciBm
bHVzaGluZyByb3cgbmhvc3RzPSVkXG4iLA0KCQkJCQkJYXRvbWljX3JlYWQo
Jm1iZnctPm5ob3N0cykpOw0KCQkJfQ0KCQkJbWJmd19uZXh0ID0gbWJmdy0+
bmV4dDsNCgkJCWtmcmVlX3MobWJmdywgc2l6ZW9mKCptYmZ3KSk7CQ0KCQkJ
TU9EX0RFQ19VU0VfQ09VTlQ7DQoJCQlpcF9tYXNxX21vZF9kZWNfbmVudCht
bW9kX3NlbGYpOw0KCQl9DQoJfQ0KfQ0KDQovKg0KICoJVXNlciBzcGFjZSBj
b250cm9sIGVudHJ5IHBvaW50DQogKi8NCnN0YXRpYyBpbnQgbWJmd19jdGwo
aW50IG9wdG5hbWUsIHN0cnVjdCBpcF9tYXNxX2N0bCAqbWN0bCwgaW50IG9w
dGxlbikNCnsNCiAgICAgICAgc3RydWN0IGlwX21iZndfdXNlciAqbXUgPSAg
Jm1jdGwtPnUubWJmd191c2VyOw0KCXN0cnVjdCBpcF9tYXNxX21iZncgKm1i
Znc7DQoJaW50IHJldCA9IEVJTlZBTDsNCglpbnQgYXJnbGVuID0gb3B0bGVu
IC0gSVBfTUFTUV9DVExfQlNJWkU7DQoJaW50IGNtZDsNCg0KDQoJSVBfTUFT
UV9ERUJVRygxLWRlYnVnLCAiaXBfbWFzcV91c2VyX2N0bChsZW49JWQvJWR8
JWQvJWQpXG4iLA0KCQlhcmdsZW4sDQoJCXNpemVvZiAoKm11KSwNCgkJb3B0
bGVuLA0KCQlzaXplb2YgKCptY3RsKSk7DQoNCgkvKg0KCSAqCWNoZWNrcyAu
Li4NCgkgKi8NCglpZiAoYXJnbGVuICE9IHNpemVvZigqbXUpICYmIG9wdGxl
biAhPSBzaXplb2YoKm1jdGwpKSANCgkJcmV0dXJuIC1FSU5WQUw7DQogDQoJ
LyogDQoJICoJRG9uJ3QgdHJ1c3QgdGhlIGx1c2VycyAtIHBsZW50eSBvZiBl
cnJvciBjaGVja2luZyEgDQoJICovDQoJY21kID0gbWN0bC0+bV9jbWQ7DQoJ
SVBfTUFTUV9ERUJVRygxLWRlYnVnLCAiaXBfbWFzcV9tYmZ3X2N0bChjbWQ9
JWQsIGZ3bWFyaz0lZClcbiIsDQoJCQljbWQsIG11LT5md21hcmspOw0KDQoN
Cglzd2l0Y2goY21kKSB7DQoJCWNhc2UgSVBfTUFTUV9DTURfTk9ORToNCgkJ
CXJldHVybiAwOw0KCQljYXNlIElQX01BU1FfQ01EX0ZMVVNIOg0KCQkJYnJl
YWs7DQoJCWNhc2UgSVBfTUFTUV9DTURfQUREOg0KCQljYXNlIElQX01BU1Ff
Q01EX0lOU0VSVDoNCgkJY2FzZSBJUF9NQVNRX0NNRF9TRVQ6DQoJCQlpZiAo
bXUtPmZ3bWFyayA9PSAwKSB7DQoJCQkJSVBfTUFTUV9ERUJVRygxLWRlYnVn
LCAiaW52YWxpZCBmd21hcms9PTBcbiIpOw0KCQkJCXJldHVybiAtRUlOVkFM
Ow0KCQkJfQ0KCQkJaWYgKG11LT5wcmVmIDwgMCkgew0KCQkJCUlQX01BU1Ff
REVCVUcoMS1kZWJ1ZywgImludmFsaWQgcHJlZj09JWRcbiIsDQoJCQkJCW11
LT5wcmVmKTsNCgkJCQlyZXR1cm4gLUVJTlZBTDsNCgkJCX0NCgkJCWJyZWFr
Ow0KCX0NCg0KDQoJcmV0ID0gLUVJTlZBTDsNCg0KCXN3aXRjaChjbWQpIHsN
CgljYXNlIElQX01BU1FfQ01EX0FERDoNCgljYXNlIElQX01BU1FfQ01EX0lO
U0VSVDoNCgkJaWYgKCFtdS0+cmFkZHIgfHwgIW11LT5sbWFkZHIpIHsNCgkJ
CUlQX01BU1FfREVCVUcoMC1kZWJ1ZywgImlwX21hc3FfbWJmd19jdGwoQURE
KTogaW52YWxpZCByZWRpcmVjdCAweCV4OiVkXG4iLA0KCQkJCQltdS0+cmFk
ZHIsIG11LT5ycG9ydCk7DQoJCQlnb3RvIG91dDsNCgkJfQ0KDQoJCS8qDQoJ
CSAqCUNhbm5vdCBqdXN0IHVzZSBtYmZ3X2xvY2sgYmVjYXVzZSBiZWxvdw0K
CQkgKglhcmUgYWxsb2NhdGlvbnMgdGhhdCBjYW4gc2xlZXA7IHNvDQoJCSAq
CXRvIGFzc3VyZSAibmV3IGVudHJ5IiBhdG9taWMgY3JlYXRpb24NCgkJICoJ
SSB1c2UgYSBzZW1hcGhvcmUuDQoJCSAqDQoJCSAqLw0KCQlkb3duKCZtYmZ3
X3NlbWEpOw0KDQoJCXJlYWRfbG9jaygmbWJmd19sb2NrKTsNCgkJbWJmdyA9
IF9fbWJmd19nZXQobXUtPmZ3bWFyayk7DQoJCXJlYWRfdW5sb2NrKCZtYmZ3
X2xvY2spOw0KCQkNCgkJLyoNCgkJICoJSWYgZmlyc3QgaG9zdCwgY3JlYXRl
IG0tZW50cnkNCgkJICovDQoJCWlmIChtYmZ3ID09IE5VTEwpIHsNCgkJCW1i
ZncgPSBtYmZ3X25ldyhtdS0+ZndtYXJrKTsNCgkJCWlmIChtYmZ3ID09IE5V
TEwpIA0KCQkJCXJldCA9IC1FTk9NRU07DQoJCX0gDQoNCgkJaWYgKG1iZncp
IHsNCgkJCS8qDQoJCQkgKglQdXQgbS5ob3N0IGluIG0tZW50cnkuDQoJCQkg
Ki8NCgkJCXJldCA9IG1iZndfYWRkaG9zdChtYmZ3LCBtdSwgY21kID09IElQ
X01BU1FfQ01EX0FERCk7DQoNCgkJCS8qDQoJCQkgKglJZiBmaXJzdCBob3N0
LCBsaW5rIG0tZW50cnkgdG8gaGFzaCB0YWJsZS4NCgkJCSAqCUFscmVhZHkg
cHJvdGVjdGVkIGJ5IGdsb2JhbCBsb2NrLg0KCQkJICovDQoJCQlpZiAocmV0
ID09IDAgJiYgYXRvbWljX3JlYWQoJm1iZnctPm5ob3N0cykgPT0gMSkgIHsN
CgkJCQl3cml0ZV9sb2NrX2JoKCZtYmZ3X2xvY2spOw0KCQkJCV9fbWJmd19h
ZGQobWJmdyk7DQoJCQkJd3JpdGVfdW5sb2NrX2JoKCZtYmZ3X2xvY2spOw0K
CQkJfSANCgkJCWlmIChhdG9taWNfcmVhZCgmbWJmdy0+bmhvc3RzKSA9PSAw
KSB7DQoJCQkJbWJmd19kZXN0cm95KG1iZncpOw0KCQkJfQ0KCQl9DQoNCgkJ
dXAoJm1iZndfc2VtYSk7DQoNCgkJYnJlYWs7DQoNCgljYXNlIElQX01BU1Ff
Q01EX0RFTDoNCgkJZG93bigmbWJmd19zZW1hKTsNCg0KCQlyZWFkX2xvY2so
Jm1iZndfbG9jayk7DQoJCW1iZncgPSBfX21iZndfZ2V0KG11LT5md21hcmsp
Ow0KCQlyZWFkX3VubG9jaygmbWJmd19sb2NrKTsNCg0KCQlpZiAobWJmdykg
ew0KCQkJcmV0ID0gbWJmd19kZWxob3N0KG1iZncsIG11KTsNCg0KCQkJLyoN
CgkJCSAqCUxhc3QgbGVhc2Ugd2lsbCBmcmVlDQoJCQkgKglYWFggY2hlY2sg
bG9naWMgWFhYDQoJCQkgKi8NCgkJCWlmIChhdG9taWNfcmVhZCgmbWJmdy0+
bmhvc3RzKSA9PSAwKSB7DQoJCQkJd3JpdGVfbG9ja19iaCgmbWJmd19sb2Nr
KTsNCgkJCQlfX21iZndfZGVsKG1iZncpOw0KCQkJCXdyaXRlX3VubG9ja19i
aCgmbWJmd19sb2NrKTsNCgkJCQltYmZ3X2Rlc3Ryb3kobWJmdyk7DQoJCQl9
DQoJCX0gZWxzZSANCgkJCXJldCA9IC1FU1JDSDsNCg0KCQl1cCgmbWJmd19z
ZW1hKTsNCgkJYnJlYWs7DQoJY2FzZSBJUF9NQVNRX0NNRF9GTFVTSDoNCg0K
CQlkb3duKCZtYmZ3X3NlbWEpOw0KCQltYmZ3X2ZsdXNoKCk7DQoJCXVwKCZt
YmZ3X3NlbWEpOw0KCQlyZXQgPSAwOw0KCQlicmVhazsNCgljYXNlIElQX01B
U1FfQ01EX1NFVDoNCgkJLyoNCgkJICoJTm8gbmVlZCB0byBzZW1hcGhvcml6
ZSBoZXJlLCBtYWluIGxpc3QgaXMgbm90IA0KCQkgKgltb2RpZmllZC4NCgkJ
ICovDQoJCXJlYWRfbG9jaygmbWJmd19sb2NrKTsNCgkJDQoJCW1iZncgPSBf
X21iZndfZ2V0KG11LT5md21hcmspOw0KCQlpZiAobWJmdykgew0KCQkJd3Jp
dGVfbG9ja19iaCgmbWJmdy0+bG9jayk7DQoJCQkNCgkJCWlmIChtdS0+Zmxh
Z3MgJiBJUF9NQVNRX01GV19TQ0hFRCkgew0KCQkJCXN0cnVjdCBpcF9tYXNx
X21iZndfaG9zdCAqaDsNCgkJCQlpZiAoKGg9X19tYmZ3X3NjaGVkKG1iZncs
IDEpKSkgew0KCQkJCQltYmZ3X2hvc3RfdG9fdXNlcihoLCBtdSk7DQoJCQkJ
CXJldCA9IDA7DQoJCQkJfSANCgkJCX0gZWxzZSB7DQoJCQkJcmV0ID0gX19t
YmZ3X2VkaXRob3N0KG1iZncsIG11KTsNCgkJCX0NCgkJCQkNCgkJCXdyaXRl
X3VubG9ja19iaCgmbWJmdy0+bG9jayk7DQoJCX0NCg0KCQlyZWFkX3VubG9j
aygmbWJmd19sb2NrKTsNCgkJYnJlYWs7DQoJfQ0Kb3V0Og0KCQ0KCXJldHVy
biByZXQ7DQp9DQoNCi8qDQogKglNb2R1bGUgc3R1YnMgY2FsbGVkIGZyb20g
aXBfbWFzcSBjb3JlIG1vZHVsZQ0KICovDQogDQovKg0KICoJSW5wdXQgcnVs
ZSBzdHViLCBjYWxsZWQgdmVyeSBlYXJseSBmb3IgZWFjaCBpbmNvbWluZyBw
YWNrZXQsIA0KICoJdG8gc2VlIGlmIHRoaXMgbW9kdWxlIGhhcyAiaW50ZXJl
c3QiIGluIHBhY2tldC4NCiAqLw0Kc3RhdGljIGludCBtYmZ3X2luX3J1bGUo
Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwaGRy
ICppcGgpDQp7DQoJaW50IHZhbDsNCglyZWFkX2xvY2soJm1iZndfbG9jayk7
DQoJdmFsID0gKCBfX21iZndfZ2V0KHNrYi0+ZndtYXJrKSAhPSAwKTsNCgly
ZWFkX3VubG9jaygmbWJmd19sb2NrKTsNCglyZXR1cm4gdmFsOw0KfQ0KDQov
Kg0KICoJSW5wdXQtY3JlYXRlIHN0dWIsIGNhbGxlZCB0byBhbGxvdyAiY3Vz
dG9tIiBtYXNxIGNyZWF0aW9uDQogKi8NCnN0YXRpYyBzdHJ1Y3QgaXBfbWFz
cSAqIG1iZndfaW5fY3JlYXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2Is
IGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCBfX3UzMiBtYWRkcikNCnsNCgl1
bmlvbiBpcF9tYXNxX3RwaGRyIHRwaDsNCglzdHJ1Y3QgaXBfbWFzcSAqbXMg
PSBOVUxMOw0KCXN0cnVjdCBpcF9tYXNxX21iZndfaG9zdCAqaCA9IE5VTEw7
DQoNCgl0cGgucmF3ID0gKGNoYXIqKSBpcGggKyBpcGgtPmlobCAqIDQ7DQoN
Cglzd2l0Y2ggKGlwaC0+cHJvdG9jb2wpIHsNCgkJY2FzZSBJUFBST1RPX1RD
UDoNCgkJCS8qIAkNCgkJCSAqCU9ubHkgb3BlbiBUQ1AgdHVubmVsIGlmIFNZ
TishQUNLIHBhY2tldA0KCQkJICovDQoJCQlpZiAoIXRwaC50aC0+c3luICYm
IHRwaC50aC0+YWNrKQ0KCQkJCXJldHVybiBOVUxMOw0KCQljYXNlIElQUFJP
VE9fVURQOg0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQlyZXR1cm4gTlVM
TDsNCgl9DQoNCgkvKiANCgkgKglJZiBubyBlbnRyeSBleGlzdHMgaW4gdGhl
IG1hc3F1ZXJhZGluZyB0YWJsZQ0KIAkgKiAJYW5kIHRoZSBwb3J0IGlzIGlu
dm9sdmVkDQoJICogIAlpbiBwb3J0IGZvcndhcmRpbmcsIGNyZWF0ZSBhIG5l
dyBtYXNxIGVudHJ5IA0KCSAqLw0KDQoJaWYgKChoPW1iZndfbG9va3VwKHNr
Yi0+ZndtYXJrKSkpIHsNCgkJbXMgPSBpcF9tYXNxX25ldzIoaXBoLT5wcm90
b2NvbCwNCgkJCQlpcGgtPmRhZGRyLCB0cGgucG9ydHBbMV0sCQ0KCQkJCS8q
IGlmIG5vIHJlZGlyLXBvcnQsIHVzZSBwYWNrZXQgZGVzdCBwb3J0ICovDQoJ
CQkJaC0+YWRkciwgaC0+cG9ydD8gaC0+cG9ydCA6IHRwaC5wb3J0cFsxXSwN
CgkJCQlpcGgtPnNhZGRyLCB0cGgucG9ydHBbMF0sDQoJCQkJSVBfTUFTUV9G
X0JJRElSLCBoLT5sbWFkZHIpOw0KDQoJCWlmIChtcyAhPSBOVUxMKQ0KCQkJ
aXBfbWFzcV9saXN0ZW4obXMpOw0KCX0NCglyZXR1cm4gbXM7DQp9DQoNCg0K
I2RlZmluZSBtYmZ3X2luX3VwZGF0ZQlOVUxMDQojZGVmaW5lIG1iZndfb3V0
X3J1bGUJTlVMTA0KI2RlZmluZSBtYmZ3X291dF9jcmVhdGUJTlVMTA0KI2Rl
ZmluZSBtYmZ3X291dF91cGRhdGUJTlVMTA0KDQpzdGF0aWMgc3RydWN0IGlw
X21hc3FfbW9kIG1iZndfbW9kID0gew0KCU5VTEwsCQkJLyogbmV4dCAqLw0K
CU5VTEwsCQkJLyogbmV4dF9yZWcgKi8NCgkibWJmdyIsCQkvKiBuYW1lICov
DQoJQVRPTUlDX0lOSVQoMCksCQkvKiBuZW50ICovDQoJQVRPTUlDX0lOSVQo
MCksCQkvKiByZWZjbnQgKi8NCglwcm9jX2VudCwNCgltYmZ3X2N0bCwNCglO
VUxMLAkJCS8qIG1hc3FfbW9kX2luaXQgKi8NCglOVUxMLAkJCS8qIG1hc3Ff
bW9kX2RvbmUgKi8NCgltYmZ3X2luX3J1bGUsDQoJbWJmd19pbl91cGRhdGUs
DQoJbWJmd19pbl9jcmVhdGUsDQoJbWJmd19vdXRfcnVsZSwNCgltYmZ3X291
dF91cGRhdGUsDQoJbWJmd19vdXRfY3JlYXRlLA0KfTsNCg0KDQpfX2luaXRm
dW5jKGludCBpcF9tYmZ3X2luaXQodm9pZCkpDQp7DQoJcmV0dXJuIHJlZ2lz
dGVyX2lwX21hc3FfbW9kICgobW1vZF9zZWxmPSZtYmZ3X21vZCkpOw0KfQ0K
DQppbnQgaXBfbWJmd19kb25lKHZvaWQpDQp7DQoJcmV0dXJuIHVucmVnaXN0
ZXJfaXBfbWFzcV9tb2QoJm1iZndfbW9kKTsNCn0NCg0KI2lmZGVmIE1PRFVM
RQ0KRVhQT1JUX05PX1NZTUJPTFM7DQoNCmludCBpbml0X21vZHVsZSh2b2lk
KQ0Kew0KCWlmIChpcF9tYmZ3X2luaXQoKSAhPSAwKQ0KCQlyZXR1cm4gLUVJ
TzsNCglyZXR1cm4gMDsNCn0NCg0Kdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lk
KQ0Kew0KCWlmIChpcF9tYmZ3X2RvbmUoKSAhPSAwKQ0KCQlwcmludGsoS0VS
Tl9JTkZPICJjYW4ndCByZW1vdmUgbW9kdWxlIik7DQp9DQoNCiNlbmRpZiAv
KiBNT0RVTEUgKi8NCg==
--215503375-1513663793-936506470=:2592
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=mydiff
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9909050041102.2592@ns1.helixsystems.com>
Content-Description:
Content-Disposition: attachment; filename=mydiff

ZGlmZiAtYXVyIGxpbnV4LTIuMi4xMC9pbmNsdWRlL25ldC9pcC5oIGxpbnV4
LTIuMi4xMG5ldy9pbmNsdWRlL25ldC9pcC5oDQotLS0gbGludXgtMi4yLjEw
L2luY2x1ZGUvbmV0L2lwLmgJVHVlIE1heSAxMSAxMzozNjo0NCAxOTk5DQor
KysgbGludXgtMi4yLjEwbmV3L2luY2x1ZGUvbmV0L2lwLmgJRnJpIFNlcCAg
MyAyMzo1NDowMyAxOTk5DQpAQCAtNDcsNiArNDcsNyBAQA0KICNkZWZpbmUg
SVBTS0JfTUFTUVVFUkFERUQJMQ0KICNkZWZpbmUgSVBTS0JfVFJBTlNMQVRF
RAkyDQogI2RlZmluZSBJUFNLQl9GT1JXQVJERUQJCTQNCisjZGVmaW5lIElQ
U0tCX01BU1FfQklESVIJOA0KIH07DQogDQogc3RydWN0IGlwY21fY29va2ll
DQpkaWZmIC1hdXIgbGludXgtMi4yLjEwL2luY2x1ZGUvbmV0L2lwX21hc3Eu
aCBsaW51eC0yLjIuMTBuZXcvaW5jbHVkZS9uZXQvaXBfbWFzcS5oDQotLS0g
bGludXgtMi4yLjEwL2luY2x1ZGUvbmV0L2lwX21hc3EuaAlTdW4gSnVsIDI1
IDE0OjU4OjA5IDE5OTkNCisrKyBsaW51eC0yLjIuMTBuZXcvaW5jbHVkZS9u
ZXQvaXBfbWFzcS5oCUZyaSBTZXAgIDMgMjM6NTQ6MDMgMTk5OQ0KQEAgLTU4
LDYgKzU4LDcgQEANCiANCiAjZGVmaW5lIElQX01BU1FfRl9NUE9SVAkJICAg
ICAgMHgxMDAwIAkvKiBvd24gbXBvcnQgc3BlY2lmaWVkICovDQogI2RlZmlu
ZSBJUF9NQVNRX0ZfVVNFUgkJICAgICAgMHgyMDAwCS8qIGZyb20gdXNwYWNl
ICovDQorI2RlZmluZSBJUF9NQVNRX0ZfQklESVIJCSAgICAgIDB4NDAwMAkv
KiAyLWRpciBtYXNxICovDQogI2RlZmluZSBJUF9NQVNRX0ZfU0lNUExFX0hB
U0gJICAgICAgMHg4MDAwCS8qIHByZXZlbnQgcytkIGFuZCBtK2QgaGFzaGlu
ZyAqLw0KIA0KIC8qDQpAQCAtMTI3LDcgKzEyOCw3IEBADQogLyoNCiAgKglm
dW5jdGlvbnMgY2FsbGVkIGZyb20gaXAgbGF5ZXINCiAgKi8NCi1leHRlcm4g
aW50IGlwX2Z3X21hc3F1ZXJhZGUoc3RydWN0IHNrX2J1ZmYgKiosIF9fdTMy
IG1hZGRyKTsNCitleHRlcm4gaW50IGlwX2Z3X21hc3F1ZXJhZGUoc3RydWN0
IHNrX2J1ZmYgKiosIF9fdTMyIG1hZGRyLCBpbnQgYmlkaXIpOw0KIGV4dGVy
biBpbnQgaXBfZndfbWFzcV9pY21wKHN0cnVjdCBza19idWZmICoqLCBfX3Uz
MiBtYWRkcik7DQogZXh0ZXJuIGludCBpcF9md191bm1hc3FfaWNtcChzdHJ1
Y3Qgc2tfYnVmZiAqKTsNCiBleHRlcm4gaW50IGlwX2Z3X2RlbWFzcXVlcmFk
ZShzdHJ1Y3Qgc2tfYnVmZiAqKik7DQpAQCAtMTc2LDYgKzE3Nyw4IEBADQog
ICAgICAgICAgICAgICAgIChzdHJ1Y3QgaXBfbWFzcV9hcHAgKiwgc3RydWN0
IGlwX21hc3EgKiwgc3RydWN0IHNrX2J1ZmYgKiosIF9fdTMyKTsNCiB9Ow0K
IA0KKyNkZWZpbmUgSVBfTUFTUV9BUFBfRl9SRVZFUlNFIDB4MDEwMDAwMDAg
LyogUkFCIC0gbWF0Y2ggc3BvcnQsIG5vdCBkcG9ydCAqLw0KKw0KIC8qDQog
ICoJaXBfbWFzcV9hcHAgaW5pdGlhbGl6ZXINCiAgKi8NCkBAIC0xODUsMTIg
KzE4OCwxMyBAQA0KICAqIAlpcF9tYXNxX2FwcCBvYmplY3QgcmVnaXN0cmF0
aW9uIGZ1bmN0aW9ucyAocG9ydDogaG9zdCBieXRlIG9yZGVyKQ0KICAqLw0K
IGV4dGVybiBpbnQgcmVnaXN0ZXJfaXBfbWFzcV9hcHAoc3RydWN0IGlwX21h
c3FfYXBwICptYXBwLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgX191MTYgcG9y
dCk7DQorZXh0ZXJuIGludCByZWdpc3Rlcl9pcF9tYXNxX2FwcF9mbGFncyhz
dHJ1Y3QgaXBfbWFzcV9hcHAgKm1hcHAsIHVuc2lnbmVkIHNob3J0IHByb3Rv
LCBfX3UxNiBwb3J0LCBfX3UzMiBmbGFncyk7DQogZXh0ZXJuIGludCB1bnJl
Z2lzdGVyX2lwX21hc3FfYXBwKHN0cnVjdCBpcF9tYXNxX2FwcCAqbWFwcCk7
DQogDQogLyoNCiAgKglnZXQgaXBfbWFzcV9hcHAgb2JqIGJ5IHByb3RvLHBv
cnQobmV0X2J5dGVfb3JkZXIpDQogICovDQotZXh0ZXJuIHN0cnVjdCBpcF9t
YXNxX2FwcCAqIGlwX21hc3FfYXBwX2dldCh1bnNpZ25lZCBzaG9ydCBwcm90
bywgX191MTYgcG9ydCk7DQorZXh0ZXJuIHN0cnVjdCBpcF9tYXNxX2FwcCAq
IGlwX21hc3FfYXBwX2dldCh1bnNpZ25lZCBzaG9ydCBwcm90bywgX191MTYg
cG9ydCwgX191MTYgc3BvcnQpOw0KIA0KIC8qDQogICoJaXBfbWFzcSBUTyBp
cF9tYXNxX2FwcCAodW4pYmluZGluZyBmdW5jdGlvbnMuDQpkaWZmIC1hdXIg
bGludXgtMi4yLjEwL25ldC9pcHY0L0NvbmZpZy5pbiBsaW51eC0yLjIuMTBu
ZXcvbmV0L2lwdjQvQ29uZmlnLmluDQotLS0gbGludXgtMi4yLjEwL25ldC9p
cHY0L0NvbmZpZy5pbglTdW4gTWFyIDIxIDEwOjIyOjAwIDE5OTkNCisrKyBs
aW51eC0yLjIuMTBuZXcvbmV0L2lwdjQvQ29uZmlnLmluCVNhdCBTZXAgIDQg
MTM6MzA6MjAgMTk5OQ0KQEAgLTQ3LDEwICs0NywxNSBAQA0KICAgICAgIGNv
bW1lbnQgJ1Byb3RvY29sLXNwZWNpZmljIG1hc3F1ZXJhZGluZyBzdXBwb3J0
IHdpbGwgYmUgYnVpbHQgYXMgbW9kdWxlcy4nDQogICAgICAgaWYgWyAiJENP
TkZJR19FWFBFUklNRU5UQUwiID0gInkiIF07IHRoZW4NCiAgICAgICAgIGJv
b2wgJ0lQOiBtYXNxdWVyYWRpbmcgc3BlY2lhbCBtb2R1bGVzIHN1cHBvcnQn
IENPTkZJR19JUF9NQVNRVUVSQURFX01PRCANCisgICAgICAgIGJvb2wgJ0lQ
OiBiaWRpcmVjdGlvbmFsIG1hc3F1ZXJhZGluZyBzdXBwb3J0IChFWFBFUklN
RU5UQUwpJyBDT05GSUdfSVBfTUFTUV9CSURJUg0KKwlib29sICdJUDogc2Vy
dmVyIHBvcnQga2V5ZWQgcHJvdG9jb2wtc3BlY2lmaWMgc3VwcG9ydCAoZm9y
IHNlcnZlcnMsIGxpa2UgRlRQKScgQ09ORklHX0lQX01BU1FfQVBQX1NQT1JU
DQogICAgICAgICBpZiBbICIkQ09ORklHX0lQX01BU1FVRVJBREVfTU9EIiA9
ICJ5IiBdOyB0aGVuDQogICAgICAgICAgIHRyaXN0YXRlICdJUDogaXBhdXRv
ZncgbWFzcSBzdXBwb3J0IChFWFBFUklNRU5UQUwpJyBDT05GSUdfSVBfTUFT
UVVFUkFERV9JUEFVVE9GVw0KICAgICAgICAgICB0cmlzdGF0ZSAnSVA6IGlw
cG9ydGZ3IG1hc3Egc3VwcG9ydCAoRVhQRVJJTUVOVEFMKScgQ09ORklHX0lQ
X01BU1FVRVJBREVfSVBQT1JURlcNCiAgICAgICAgICAgdHJpc3RhdGUgJ0lQ
OiBpcCBmd21hcmsgbWFzcS1mb3J3YXJkaW5nIHN1cHBvcnQgKEVYUEVSSU1F
TlRBTCknIENPTkZJR19JUF9NQVNRVUVSQURFX01GVw0KKwkgIGlmIFsgIiRD
T05GSUdfSVBfTUFTUV9CSURJUiIgPSAieSIgXTsgdGhlbg0KKwkJICB0cmlz
dGF0ZSAnSVA6IGlwIGZ3bWFyayBiaWRpcmVjdGlvbmFsIG1hc3EtZm9yd2Fy
ZGluZyBzdXBwb3J0IChWRVJZIEVYUEVSSU1FTlRBTCknIENPTkZJR19JUF9N
QVNRVUVSQURFX01CRlcNCisJICBmaQ0KIAlmaQ0KICAgICAgIGZpDQogICAg
IGZpDQpkaWZmIC1hdXIgbGludXgtMi4yLjEwL25ldC9pcHY0L01ha2VmaWxl
IGxpbnV4LTIuMi4xMG5ldy9uZXQvaXB2NC9NYWtlZmlsZQ0KLS0tIGxpbnV4
LTIuMi4xMC9uZXQvaXB2NC9NYWtlZmlsZQlNb24gSmFuICA0IDE4OjMxOjM1
IDE5OTkNCisrKyBsaW51eC0yLjIuMTBuZXcvbmV0L2lwdjQvTWFrZWZpbGUJ
RnJpIFNlcCAgMyAyMzo1NDowMyAxOTk5DQpAQCAtODksNiArODksMTQgQEAN
CiAgICAgZW5kaWYNCiAgIGVuZGlmDQogDQorICBpZmVxICgkKENPTkZJR19J
UF9NQVNRVUVSQURFX01CRlcpLHkpDQorICBJUFY0X09CSlMgKz0gaXBfbWFz
cV9tYmZ3Lm8NCisgIGVsc2UNCisgICAgaWZlcSAoJChDT05GSUdfSVBfTUFT
UVVFUkFERV9NQkZXKSxtKQ0KKyAgICBNX09CSlMgKz0gaXBfbWFzcV9tYmZ3
Lm8NCisgICAgZW5kaWYNCisgIGVuZGlmDQorDQogZW5kaWYNCiANCiBNX09C
SlMgKz0gaXBfbWFzcV91c2VyLm8NCmRpZmYgLWF1ciBsaW51eC0yLjIuMTAv
bmV0L2lwdjQvaXBfZm9yd2FyZC5jIGxpbnV4LTIuMi4xMG5ldy9uZXQvaXB2
NC9pcF9mb3J3YXJkLmMNCi0tLSBsaW51eC0yLjIuMTAvbmV0L2lwdjQvaXBf
Zm9yd2FyZC5jCVN1biBNYXIgMjEgMTA6MjI6MDAgMTk5OQ0KKysrIGxpbnV4
LTIuMi4xMG5ldy9uZXQvaXB2NC9pcF9mb3J3YXJkLmMJU2F0IFNlcCAgNCAy
Mzo1NDozOSAxOTk5DQpAQCAtMTksNiArMTksNyBAQA0KICAqCQlKb3MgVm9z
CQk6CUNhbGwgZm9yd2FyZCBmaXJld2FsbCBhZnRlciByb3V0aW5nDQogICoJ
CQkJCShhbHdheXMgdXNlIG91dHB1dCBkZXZpY2UpLg0KICAqCQlNaWtlIE1j
TGFnYW4JOglSb3V0aW5nIGJ5IHNvdXJjZQ0KKyAqCQlSb2xmIEJyYXVuCToJ
Mi1kaXIgbWFzcSBzdXBwb3J0DQogICovDQogDQogI2luY2x1ZGUgPGxpbnV4
L2NvbmZpZy5oPg0KQEAgLTIxMyw2ICsyMTQsMTcgQEANCiAJfQ0KIA0KIHNr
aXBfY2FsbF9md19maXJld2FsbDoNCisjaWZkZWYgQ09ORklHX0lQX01BU1Ff
QklESVINCisNCisvKiBiaWRpcmVjdGlvbmFsIG1hc3EgLSBpZiBpdCdzIHNl
dCwgd2UgcHJldGVuZCBpdCB3YXNuJ3QgZGVtYXNxJ2VkDQorICAgc28gd2Ug
bWFzcSBpdCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLCBidXQgd2l0aCBhIGNh
dGNoOiB0aGUgb3RoZXINCisgICBjb25uZWN0aW9uIGlzIGFsc28gbWFya2Vk
IGJpZGlyZWN0aW9uYWwhICovDQorCWlmIChJUENCKHNrYiktPmZsYWdzJklQ
U0tCX01BU1FfQklESVIpIHsNCisJCUlQQ0Ioc2tiKS0+ZmxhZ3MgJj0gfklQ
U0tCX01BU1FVRVJBREVEOw0KKwkJZndfcmVzID0gRldfTUFTUVVFUkFERTsN
CisJfQ0KKw0KKyNlbmRpZiAvKiBDT05GSUdfSVBfTUFTUV9CSURJUiAqLw0K
IAkvKg0KIAkgKiBJZiB0aGlzIGZyYWdtZW50IG5lZWRzIG1hc3F1ZXJhZGlu
ZywgbWFrZSBpdCBzby4uLg0KIAkgKiAoRG9uJ3QgbWFzcXVlcmFkZSBkZS1t
YXNxdWVyYWRlZCBmcmFnbWVudHMpDQpAQCAtMjI4LDcgKzI0MCwxMSBAQA0K
ICNlbmRpZg0KIAkJCW1hZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXYyLCBy
dC0+cnRfZ2F0ZXdheSwgUlRfU0NPUEVfVU5JVkVSU0UpOw0KIA0KLQkJCWlm
IChpcF9md19tYXNxdWVyYWRlKCZza2IsIG1hZGRyKSA8IDApIHsNCisjaWZu
ZGVmIENPTkZJR19JUF9NQVNRX0JJRElSDQorCQkJaWYgKGlwX2Z3X21hc3F1
ZXJhZGUoJnNrYiwgbWFkZHIsIDApIDwgMCkgew0KKyNlbHNlIC8qIENPTkZJ
R19JUF9NQVNRX0JJRElSICovDQorCQkJaWYgKGlwX2Z3X21hc3F1ZXJhZGUo
JnNrYiwgbWFkZHIsIChJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfTUFTUV9C
SURJUik/MTowKSA8IDApIHsNCisjZW5kaWYgLyogQ09ORklHX0lQX01BU1Ff
QklESVIgKi8NCiAJCQkJa2ZyZWVfc2tiKHNrYik7DQogCQkJCXJldHVybiAt
MTsNCiAJCQl9IGVsc2Ugew0KZGlmZiAtYXVyIGxpbnV4LTIuMi4xMC9uZXQv
aXB2NC9pcF9pbnB1dC5jIGxpbnV4LTIuMi4xMG5ldy9uZXQvaXB2NC9pcF9p
bnB1dC5jDQotLS0gbGludXgtMi4yLjEwL25ldC9pcHY0L2lwX2lucHV0LmMJ
VGh1IEFwciAyMiAyMTo0NToxOSAxOTk5DQorKysgbGludXgtMi4yLjEwbmV3
L25ldC9pcHY0L2lwX2lucHV0LmMJU2F0IFNlcCAgNCAxMzoxNDozOCAxOTk5
DQpAQCAtOTcsNiArOTcsNyBAQA0KICAqCQlBbGFuIENveAk6CU11bHRpY2Fz
dCByb3V0aW5nIGhvb2tzDQogICoJCUpvcyBWb3MJCToJRG8gYWNjb3VudGlu
ZyAqYmVmb3JlKiBjYWxsX2luX2ZpcmV3YWxsDQogICoJV2lsbHkgS29ueW5l
bmJlcmcJOglUcmFuc3BhcmVudCBwcm94eWluZyBzdXBwb3J0DQorICoJUm9s
ZiBCcmF1bgkJOgkyLWRpciBtYXNxIHN1cHBvcnQNCiAgKg0KICAqICANCiAg
Kg0KQEAgLTI3NCw2ICsyNzUsOSBAQA0KIAkJaWYgKHJldCkgew0KIAkJCWlw
aD1za2ItPm5oLmlwaDsNCiAJCQlJUENCKHNrYiktPmZsYWdzIHw9IElQU0tC
X01BU1FVRVJBREVEOw0KKyNpZmRlZiBDT05GSUdfSVBfTUFTUV9CSURJUg0K
KwkJCWlmIChyZXQgPT0gMikgSVBDQihza2IpLT5mbGFncyB8PSBJUFNLQl9N
QVNRX0JJRElSOw0KKyNlbmRpZiAvKiBDT05GSUdfSVBfTUFTUV9CSURJUiAq
Lw0KIAkJCWRzdF9yZWxlYXNlKHNrYi0+ZHN0KTsNCiAJCQlza2ItPmRzdCA9
IE5VTEw7DQogCQkJaWYgKGlwX3JvdXRlX2lucHV0KHNrYiwgaXBoLT5kYWRk
ciwgaXBoLT5zYWRkciwgaXBoLT50b3MsIHNrYi0+ZGV2KSkgew0KZGlmZiAt
YXVyIGxpbnV4LTIuMi4xMC9uZXQvaXB2NC9pcF9tYXNxLmMgbGludXgtMi4y
LjEwbmV3L25ldC9pcHY0L2lwX21hc3EuYw0KLS0tIGxpbnV4LTIuMi4xMC9u
ZXQvaXB2NC9pcF9tYXNxLmMJU3VuIEp1bCAyNSAxNDo1ODowOSAxOTk5DQor
KysgbGludXgtMi4yLjEwbmV3L25ldC9pcHY0L2lwX21hc3EuYwlTYXQgU2Vw
ICA0IDEzOjEyOjIxIDE5OTkNCkBAIC00Nyw2ICs0Nyw3IEBADQogICoJS2Fp
IEJhbmtldHQJCToJZG8gbm90IHRvc3Mgb3RoZXIgSVAgcHJvdG9zIGluIHBy
b3RvX2RvZmYoKQ0KICAqCURhbiBLZWdlbAkJOglwb2ludGVkIGNvcnJlY3Qg
TkFUIGJlaGF2aW9yIGZvciBVRFAgc3RyZWFtcw0KICAqCUp1bGlhbiBBbmFz
dGFzb3YJOgl1c2UgZGFkZHIgYW5kIGRwb3J0IGFzIGhhc2gga2V5cw0KKyAq
CVJvbGYgQnJhdW4JCToJc3VwcG9ydCBmb3IgMi1kaXIgbWFzcXVlcmFkaW5n
DQogICoJDQogICovDQogDQpAQCAtMTEwNSw3ICsxMTA2LDcgQEANCiAJcmV0
dXJuIHJldDsNCiB9DQogDQotaW50IGlwX2Z3X21hc3F1ZXJhZGUoc3RydWN0
IHNrX2J1ZmYgKipza2JfcCwgX191MzIgbWFkZHIpDQoraW50IGlwX2Z3X21h
c3F1ZXJhZGUoc3RydWN0IHNrX2J1ZmYgKipza2JfcCwgX191MzIgbWFkZHIs
IGludCBiaWRpcikNCiB7DQogCXN0cnVjdCBza19idWZmICAqc2tiID0gKnNr
Yl9wOw0KIAlzdHJ1Y3QgaXBoZHIJKmlwaCA9IHNrYi0+bmguaXBoOw0KQEAg
LTExNzAsOSArMTE3MSwyMCBAQA0KIAkJCQlza2ItPmNzdW0gPSBjc3VtX3Bh
cnRpYWwoaC5yYXcgLCBkb2ZmLCBjc3VtKTsNCiAJCQl9DQogCQkJY2FzZSBD
SEVDS1NVTV9IVzoNCisjaWZuZGVmIENPTkZJR19JUF9NQVNRX0JJRElSDQog
CQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRh
ZGRyLCANCisjZWxzZSAvKiBDT05GSUdfSVBfTUFTUV9CSURJUiAqLw0KKwkJ
CQlpZiAoMCkgew0KKy8qIEkgZG9uJ3Qga25vdyB3aGF0J3Mgd3Jvbmcgd2l0
aCB0aGlzIGNvZGUsIGJ1dCBpdCdzIGNsZWFybHkgc2NyZXdlZCB1cCAqLw0K
Ky8qCQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgt
PmRhZGRyLCANCisjZW5kaWYgLyogQ09ORklHX0lQX01BU1FfQklESVIgKi8N
CiAJCQkJCQlzaXplLCBpcGgtPnByb3RvY29sLCBza2ItPmNzdW0pKQ0KKyNp
Zm5kZWYgQ09ORklHX0lQX01BU1FfQklESVINCiAJCQkJew0KKyNlbHNlIC8q
IENPTkZJR19JUF9NQVNRX0JJRElSICovDQorCQkJCXsgKi8NCisJCQkJCUlQ
X01BU1FfREVCVUcoMCwgIlJlc3VsdCAlZCBmYWlsZWQgZnJvbSBzdG9yZWQg
Y2hlY2tzdW0gJWQsIGNvbXB1dGVkIGNoZWNrc3VtICVkIiwgY3N1bSwgc2ti
LT5jc3VtLCBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRh
ZGRyLCBzaXplLCBpcGgtPnByb3RvY29sLCAwKSk7DQorI2VuZGlmIC8qIENP
TkZJR19JUF9NQVNRX0JJRElSICovDQogCQkJCQlJUF9NQVNRX0RFQlVHKDAs
ICJPdXRnb2luZyBmYWlsZWQgJXMgY2hlY2tzdW0gZnJvbSAlZC4lZC4lZC4l
ZCAoc2l6ZT0lZCkhXG4iLA0KIAkJCQkJICAgICAgIG1hc3FfcHJvdG9fbmFt
ZShpcGgtPnByb3RvY29sKSwNCiAJCQkJCSAgICAgICBOSVBRVUFEKGlwaC0+
c2FkZHIpLA0KQEAgLTEyNjAsNyArMTI3MiwxMSBAQA0KIAkJCQkJbWFkZHIs
IDAsDQogCQkJCQlpcGgtPnNhZGRyLCBoLnBvcnRwWzBdLA0KIAkJCQkJaXBo
LT5kYWRkciwgaC5wb3J0cFsxXSwNCisjaWZuZGVmIENPTkZJR19JUF9NQVNR
X0JJRElSDQogCQkJCQkwKTsNCisjZWxzZSAvKiBDT05GSUdfSVBfTUFTUV9C
SURJUiAqLw0KKwkJCQkJYmlkaXIgPyBJUF9NQVNRX0ZfQklESVIgOiAwKTsN
CisjZW5kaWYgLyogQ09ORklHX0lQX01BU1FfQklESVIgKi8NCiAgICAgICAg
ICAgICAgICAgaWYgKG1zID09IE5VTEwpDQogCQkJcmV0dXJuIC0xOw0KICAJ
fQ0KQEAgLTE5NDQsNiArMTk2MCw5IEBADQogCWludCBkb2ZmID0gMDsNCiAJ
aW50IGNzdW0gPSAwOw0KIAlpbnQgY3N1bV9vayA9IDA7DQorI2lmZGVmIENP
TkZJR19JUF9NQVNRX0JJRElSDQorCWludCBiaWRpciA9IDA7DQorI2VuZGlm
IC8qIENPTkZJR19JUF9NQVNRX0JJRElSICovDQogCV9fdTMyIG1hZGRyOw0K
IA0KIAkvKg0KQEAgLTIwMTcsOSArMjAzNiwxOSBAQA0KIAkJCQlza2ItPmNz
dW0gPSBjc3VtX3BhcnRpYWwoaC5yYXcgLCBkb2ZmLCBjc3VtKTsNCiANCiAJ
CQljYXNlIENIRUNLU1VNX0hXOg0KKyNpZm5kZWYgQ09ORklHX0lQX01BU1Ff
QklESVINCiAJCQkJaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIs
IGlwaC0+ZGFkZHIsIA0KKyNlbHNlIC8qIENPTkZJR19JUF9NQVNRX0JJRElS
ICovDQorCQkJCWlmICgwKSB7DQorLyogSSBkb24ndCBrbm93IHdoYXQncyB3
cm9uZyB3aXRoIHRoaXMgY29kZSwgYnV0IGl0J3MgY2xlYXJseSBzY3Jld2Vk
IHVwICovDQorLyoJCQkJaWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2Fk
ZHIsIGlwaC0+ZGFkZHIsIA0KKyNlbmRpZiAvKiBDT05GSUdfSVBfTUFTUV9C
SURJUiAqLw0KIAkJCQkJCXNpemUsIGlwaC0+cHJvdG9jb2wsIHNrYi0+Y3N1
bSkpDQorI2lmbmRlZiBDT05GSUdfSVBfTUFTUV9CSURJUg0KIAkJCQl7DQor
I2Vsc2UgLyogQ09ORklHX0lQX01BU1FfQklESVIgKi8NCisJCQkJeyAqLw0K
KyNlbmRpZiAvKiBDT05GSUdfSVBfTUFTUV9CSURJUiAqLw0KIAkJCQkJSVBf
TUFTUV9ERUJVRygwLCAiSW5jb21pbmcgZmFpbGVkICVzIGNoZWNrc3VtIGZy
b20gJWQuJWQuJWQuJWQgKHNpemU9JWQpIVxuIiwNCiAJCQkJCSAgICAgICBt
YXNxX3Byb3RvX25hbWUoaXBoLT5wcm90b2NvbCksDQogCQkJCQkgICAgICAg
TklQUVVBRChpcGgtPnNhZGRyKSwNCkBAIC0yMTgwLDkgKzIyMDksMTYgQEAN
CiAgICAgICAgICAgICAgICAgSVBfTUFTUV9ERUJVRygyLCAiSS1yb3V0ZWQg
dG8gJTA4bFg6JTA0WFxuIixudG9obChpcGgtPmRhZGRyKSxudG9ocyhoLnBv
cnRwWzFdKSk7DQogDQogCQltYXNxX3NldF9zdGF0ZSAobXMsIDAsIGlwaCwg
aC5wb3J0cCk7DQorI2lmZGVmIENPTkZJR19JUF9NQVNRX0JJRElSDQorCQlp
ZiAobXMtPmZsYWdzICYgSVBfTUFTUV9GX0JJRElSKSBiaWRpciA9IDE7DQor
I2VuZGlmIC8qIENPTkZJR19JUF9NQVNRX0JJRElSICovDQogCQlpcF9tYXNx
X3B1dChtcyk7DQogDQorI2lmbmRlZiBDT05GSUdfSVBfTUFTUV9CSURJUg0K
ICAgICAgICAgICAgICAgICByZXR1cm4gMTsNCisjZWxzZSAvKiBDT05GSUdf
SVBfTUFTUV9CSURJUiAqLw0KKyAgICAgICAgICAgICAgICByZXR1cm4gKGJp
ZGlyID8gMiA6IDEpOw0KKyNlbmRpZiAvKiBDT05GSUdfSVBfTUFTUV9CSURJ
UiAqLw0KICAJfQ0KIA0KICAJLyogc29ycnksIGFsbCB0aGlzIHRyb3VibGUg
Zm9yIGEgbm8taGl0IDopICovDQpAQCAtMjIwMiw2ICsyMjM4LDEwIEBADQog
CQkJCU5JUFFVQUQobXMtPmRhZGRyKSxudG9ocyhtcy0+ZHBvcnQpLA0KIAkJ
CQlOSVBRVUFEKGN0bF9tcy0+ZGFkZHIpLG50b2hzKGN0bF9tcy0+ZHBvcnQp
KTsNCiAJbXMtPmNvbnRyb2wgPSBjdGxfbXM7DQorI2lmZGVmIENPTkZJR19J
UF9NQVNRX0JJRElSDQorLyogd2hlZSBoZWUgLSBhdXRvbWF0ZSAyLWRpciBz
dXBwb3J0IGZvciBtb2R1bGVzISAqLw0KKwltcy0+ZmxhZ3MgfD0gY3RsX21z
LT5mbGFncyAmIElQX01BU1FfRl9CSURJUjsNCisjZW5kaWYgLyogQ09ORklH
X0lQX01BU1FfQklESVIgKi8NCiAJYXRvbWljX2luYygmY3RsX21zLT5uX2Nv
bnRyb2wpOw0KIH0NCiANCkBAIC0yNTQwLDYgKzI1ODAsOSBAQA0KICNlbmRp
Zg0KICNpZmRlZiBDT05GSUdfSVBfTUFTUVVFUkFERV9NRlcNCiAJaXBfbWZ3
X2luaXQoKTsNCisjZW5kaWYNCisjaWZkZWYgQ09ORklHX0lQX01BU1FVRVJB
REVfTUJGVw0KKwlpcF9tYmZ3X2luaXQoKTsNCiAjZW5kaWYNCiAgICAgICAg
IGlwX21hc3FfYXBwX2luaXQoKTsNCiANCmRpZmYgLWF1ciBsaW51eC0yLjIu
MTAvbmV0L2lwdjQvaXBfbWFzcV9hcHAuYyBsaW51eC0yLjIuMTBuZXcvbmV0
L2lwdjQvaXBfbWFzcV9hcHAuYw0KLS0tIGxpbnV4LTIuMi4xMC9uZXQvaXB2
NC9pcF9tYXNxX2FwcC5jCVN1biBPY3QgIDQgMTM6MjE6NDUgMTk5OA0KKysr
IGxpbnV4LTIuMi4xMG5ldy9uZXQvaXB2NC9pcF9tYXNxX2FwcC5jCVNhdCBT
ZXAgIDQgMTM6MTg6NDEgMTk5OQ0KQEAgLTQxLDEzICs0MSwyMiBAQA0KIA0K
ICNkZWZpbmUgSVBfTUFTUV9BUFBfVEFCX1NJWkUgIDE2IC8qIG11c3QgYmUg
cG93ZXIgb2YgMiAqLw0KIA0KKy8qIEhhc2ggZG9lc24ndCBuZWVkIHRocmVl
IHBhcmFtcywgYmVjYXVzZSB0d28gcGVyIGhhc2ggY2hhaW4gaXNuJ3QgcmVh
bGx5DQorICAgYSBiaWcgZGVhbCBhdCBhbGwuLi4gKi8NCiAjZGVmaW5lIElQ
X01BU1FfQVBQX0hBU0gocHJvdG8sIHBvcnQpICgocG9ydF5wcm90bykgJiAo
SVBfTUFTUV9BUFBfVEFCX1NJWkUtMSkpDQorI2lmbmRlZiBDT05GSUdfSVBf
TUFTUV9BUFBfU1BPUlQNCiAjZGVmaW5lIElQX01BU1FfQVBQX1RZUEUocHJv
dG8sIHBvcnQpICggcHJvdG88PDE2IHwgcG9ydCApDQorI2Vsc2UgLyogQ09O
RklHX0lQX01BU1FfQVBQX1NQT1JUICovDQorI2RlZmluZSBJUF9NQVNRX0FQ
UF9UWVBFKHByb3RvLCBwb3J0LCBmbGFncykgKCBwcm90bzw8MTYgfCBwb3J0
IHwgZmxhZ3MpDQorI2VuZGlmIC8qIENPTkZJR19JUF9NQVNRX0FQUF9TUE9S
VCAqLw0KICNkZWZpbmUgSVBfTUFTUV9BUFBfUE9SVCh0eXBlKSAgICAgICAg
KCB0eXBlICYgMHhmZmZmICkNCiAjZGVmaW5lIElQX01BU1FfQVBQX1BST1RP
KHR5cGUpICAgICAgICggKHR5cGU+PjE2KSAmIDB4MDBmZiApDQotDQorI2lm
ZGVmIENPTkZJR19JUF9NQVNRX0FQUF9TUE9SVA0KKyNkZWZpbmUgSVBfTUFT
UV9BUFBfRkxBR1ModHlwZSkgICAgICAgKCAodHlwZT4+MjQpICYgMHgwMGZm
ICkNCisjZW5kaWYgLyogQ09ORklHX0lQX01BU1FfQVBQX1NQT1JUICovDQog
DQogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9pcF9tYXNxX2FwcCk7DQorRVhQ
T1JUX1NZTUJPTChyZWdpc3Rlcl9pcF9tYXNxX2FwcF9mbGFncyk7DQogRVhQ
T1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2lwX21hc3FfYXBwKTsNCiBFWFBPUlRf
U1lNQk9MKGlwX21hc3Ffc2tiX3JlcGxhY2UpOw0KIA0KQEAgLTU3LDEyICs2
NiwxNyBAQA0KIA0KIHN0cnVjdCBpcF9tYXNxX2FwcCAqaXBfbWFzcV9hcHBf
YmFzZVtJUF9NQVNRX0FQUF9UQUJfU0laRV07DQogDQorLyogV2h5IHR3byBm
dW5jdGlvbnMgYW5kIG5vdCBhbiBleHRyYSBwYXJtPyBXZSBkb24ndCB3YW50
IHRvIGJyZWFrIGV4aXN0aW5nIG1vZHVsZXMhICovDQoraW50IHJlZ2lzdGVy
X2lwX21hc3FfYXBwKHN0cnVjdCBpcF9tYXNxX2FwcCAqbWFwcCwgdW5zaWdu
ZWQgc2hvcnQgcHJvdG8sIF9fdTE2IHBvcnQpIHsNCisJcmV0dXJuIHJlZ2lz
dGVyX2lwX21hc3FfYXBwX2ZsYWdzKG1hcHAsIHByb3RvLCBwb3J0LCAwKTsN
Cit9DQorDQogLyoNCiAgKiAJaXBfbWFzcV9hcHAgcmVnaXN0cmF0aW9uIHJv
dXRpbmUNCiAgKglwb3J0OiBob3N0IGJ5dGUgb3JkZXIuDQogICovDQogDQot
aW50IHJlZ2lzdGVyX2lwX21hc3FfYXBwKHN0cnVjdCBpcF9tYXNxX2FwcCAq
bWFwcCwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fdTE2IHBvcnQpDQoraW50
IHJlZ2lzdGVyX2lwX21hc3FfYXBwX2ZsYWdzKHN0cnVjdCBpcF9tYXNxX2Fw
cCAqbWFwcCwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fdTE2IHBvcnQsIF9f
dTMyIG1mbGFncykNCiB7DQogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdz
Ow0KICAgICAgICAgdW5zaWduZWQgaGFzaDsNCkBAIC03MCw3ICs4NCwxMSBA
QA0KICAgICAgICAgICAgICAgICBJUF9NQVNRX0VSUigicmVnaXN0ZXJfaXBf
bWFzcV9hcHAoKTogTlVMTCBhcmdcbiIpOw0KICAgICAgICAgICAgICAgICBy
ZXR1cm4gLUVJTlZBTDsNCiAgICAgICAgIH0NCisjaWZuZGVmIENPTkZJR19J
UF9NQVNRX0FQUF9TUE9SVA0KICAgICAgICAgbWFwcC0+dHlwZSA9IElQX01B
U1FfQVBQX1RZUEUocHJvdG8sIHBvcnQpOw0KKyNlbHNlIC8qIENPTkZJR19J
UF9NQVNRX0FQUF9TUE9SVCAqLw0KKyAgICAgICAgbWFwcC0+dHlwZSA9IElQ
X01BU1FfQVBQX1RZUEUocHJvdG8sIHBvcnQsIG1mbGFncyk7DQorI2VuZGlm
IC8qIENPTkZJR19JUF9NQVNRX0FQUF9TUE9SVCAqLw0KICAgICAgICAgbWFw
cC0+bl9hdHRhY2ggPSAwOw0KICAgICAgICAgaGFzaCA9IElQX01BU1FfQVBQ
X0hBU0gocHJvdG8sIHBvcnQpOw0KIA0KQEAgLTEyNSwxNSArMTQzLDI3IEBA
DQogICoJZ2V0IGlwX21hc3FfYXBwIG9iamVjdCBieSBpdHMgcHJvdG8gYW5k
IHBvcnQgKG5ldCBieXRlIG9yZGVyKS4NCiAgKi8NCiANCi1zdHJ1Y3QgaXBf
bWFzcV9hcHAgKiBpcF9tYXNxX2FwcF9nZXQodW5zaWduZWQgc2hvcnQgcHJv
dG8sIF9fdTE2IHBvcnQpDQorc3RydWN0IGlwX21hc3FfYXBwICogaXBfbWFz
cV9hcHBfZ2V0KHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3UxNiBwb3J0LCBf
X3UxNiBzcG9ydCkNCiB7DQogICAgICAgICBzdHJ1Y3QgaXBfbWFzcV9hcHAg
Km1hcHA7DQogICAgICAgICB1bnNpZ25lZCBoYXNoOw0KICAgICAgICAgdW5z
aWduZWQgdHlwZTsNCiANCisjaWZuZGVmIENPTkZJR19JUF9NQVNRX0FQUF9T
UE9SVA0KICAgICAgICAgcG9ydCA9IG50b2hzKHBvcnQpOw0KICAgICAgICAg
dHlwZSA9IElQX01BU1FfQVBQX1RZUEUocHJvdG8scG9ydCk7DQogICAgICAg
ICBoYXNoID0gSVBfTUFTUV9BUFBfSEFTSChwcm90byxwb3J0KTsNCisjZWxz
ZSAvKiBDT05GSUdfSVBfTUFTUV9BUFBfU1BPUlQgKi8NCisgICAgICAgIHBv
cnQgPSBudG9ocyhwb3J0KTsNCisgICAgICAgIHR5cGUgPSBJUF9NQVNRX0FQ
UF9UWVBFKHByb3RvLHBvcnQsMCk7DQorICAgICAgICBoYXNoID0gSVBfTUFT
UV9BUFBfSEFTSChwcm90byxwb3J0KTsNCisgICAgICAgIGZvcihtYXBwID0g
aXBfbWFzcV9hcHBfYmFzZVtoYXNoXTsgbWFwcCA7IG1hcHAgPSBtYXBwLT5u
ZXh0KSB7DQorICAgICAgICAgICAgICAgIGlmICh0eXBlID09IG1hcHAtPnR5
cGUpIHJldHVybiBtYXBwOw0KKyAgICAgICAgfQ0KKyAgICAgICAgc3BvcnQg
PSBudG9ocyhzcG9ydCk7DQorICAgICAgICB0eXBlID0gSVBfTUFTUV9BUFBf
VFlQRShwcm90byxzcG9ydCxJUF9NQVNRX0FQUF9GX1JFVkVSU0UpOw0KKyAg
ICAgICAgaGFzaCA9IElQX01BU1FfQVBQX0hBU0gocHJvdG8sc3BvcnQpOw0K
KyNlbmRpZiAvKiBDT05GSUdfSVBfTUFTUV9BUFBfU1BPUlQgKi8NCiAgICAg
ICAgIGZvcihtYXBwID0gaXBfbWFzcV9hcHBfYmFzZVtoYXNoXTsgbWFwcCA7
IG1hcHAgPSBtYXBwLT5uZXh0KSB7DQogICAgICAgICAgICAgICAgIGlmICh0
eXBlID09IG1hcHAtPnR5cGUpIHJldHVybiBtYXBwOw0KICAgICAgICAgfQ0K
QEAgLTE4MCw3ICsyMTAsNyBAQA0KIAlpZiAobXMtPnByb3RvY29sICE9IElQ
UFJPVE9fVENQICYmIG1zLT5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkNCiAJ
CXJldHVybiBOVUxMOw0KIA0KLSAgICAgICAgbWFwcCA9IGlwX21hc3FfYXBw
X2dldChtcy0+cHJvdG9jb2wsIG1zLT5kcG9ydCk7DQorICAgICAgICBtYXBw
ID0gaXBfbWFzcV9hcHBfZ2V0KG1zLT5wcm90b2NvbCwgbXMtPmRwb3J0LCBt
cy0+c3BvcnQpOw0KIA0KICNpZiAwMDAwDQogLyogI2lmZGVmIENPTkZJR19J
UF9NQVNRVUVSQURFX0lQQVVUT0ZXICovDQpkaWZmIC1hdXIgbGludXgtMi4y
LjEwL25ldC9pcHY0L2lwX21hc3FfZnRwLmMgbGludXgtMi4yLjEwbmV3L25l
dC9pcHY0L2lwX21hc3FfZnRwLmMNCi0tLSBsaW51eC0yLjIuMTAvbmV0L2lw
djQvaXBfbWFzcV9mdHAuYwlNb24gT2N0ICA1IDE1OjI4OjA5IDE5OTgNCisr
KyBsaW51eC0yLjIuMTBuZXcvbmV0L2lwdjQvaXBfbWFzcV9mdHAuYwlTYXQg
U2VwICA0IDEzOjIzOjQ5IDE5OTkNCkBAIC0xNiw2ICsxNiw3IEBADQogICog
CUp1YW4gSm9zZSBDaWFybGFudGUJOglMaXRsIGJpdHMgZm9yIDIuMQ0KICAq
CUp1YW4gSm9zZSBDaWFybGFudGUJOgl1c2UgaXBfbWFzcV9saXN0ZW4oKSAN
CiAgKglKdWFuIEpvc2UgQ2lhcmxhbnRlCTogCXVzZSBwcml2YXRlIGFwcF9k
YXRhIGZvciBvd24gZmxhZyhzKQ0KKyAqCVJvbGYgQnJhdW4JCToJcGFzc2l2
ZSBGVFAgc3VwcG9ydCwgVENQIG9wdGlvbnMgZml4ZXMNCiAgKg0KICAqDQog
ICoNCkBAIC01OSw2ICs2MCw5IEBADQogICovDQogc3RhdGljIGludCBwb3J0
c1tNQVhfTUFTUV9BUFBfUE9SVFNdID0gezIxfTsgLyogSSByZWx5IG9uIHRo
ZSB0cmFpbGluZyBpdGVtcyBiZWluZyBzZXQgdG8gemVybyAqLw0KIHN0cnVj
dCBpcF9tYXNxX2FwcCAqbWFzcV9pbmNhcm5hdGlvbnNbTUFYX01BU1FfQVBQ
X1BPUlRTXTsNCisjaWZkZWYgQ09ORklHX0lQX01BU1FfQVBQX1NQT1JUDQor
c3RydWN0IGlwX21hc3FfYXBwICptYXNxX2luY2FybmF0aW9uc19yZXZlcnNl
W01BWF9NQVNRX0FQUF9QT1JUU107DQorI2VuZGlmIC8qIENPTkZJR19JUF9N
QVNRX0FQUF9TUE9SVCAqLw0KIA0KIC8qDQogICoJRGVidWcgbGV2ZWwNCkBA
IC03MywxMiArNzcsMzggQEANCiAvKglEdW1teSB2YXJpYWJsZSAqLw0KIHN0
YXRpYyBpbnQgbWFzcV9mdHBfcGFzdjsNCiANCisjaWZkZWYgQ09ORklHX0lQ
X01BU1FfQVBQX1NQT1JUDQorDQorc3RydWN0IGZ0cF9wcml2X2RhdGEgew0K
KwlpbnQgc3RhdGU7DQorCWludCBwb3M7DQorfTsNCisNCisjZW5kaWYgLyog
Q09ORklHX0lQX01BU1FfQVBQX1NQT1JUICovDQogc3RhdGljIGludA0KIG1h
c3FfZnRwX2luaXRfMSAoc3RydWN0IGlwX21hc3FfYXBwICptYXBwLCBzdHJ1
Y3QgaXBfbWFzcSAqbXMpDQogew0KKwlNT0RfSU5DX1VTRV9DT1VOVDsNCisJ
cmV0dXJuIDA7DQorfQ0KKw0KKyNpZmRlZiBDT05GSUdfSVBfTUFTUV9BUFBf
U1BPUlQNCitzdGF0aWMgaW50DQorbWFzcV9mdHBfaW5pdF8xX3JldmVyc2Ug
KHN0cnVjdCBpcF9tYXNxX2FwcCAqbWFwcCwgc3RydWN0IGlwX21hc3EgKm1z
KQ0KK3sNCiAgICAgICAgIE1PRF9JTkNfVVNFX0NPVU5UOw0KKwlpZiAoKG1z
LT5hcHBfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmdHBfcHJpdl9k
YXRhKSwNCisJCQkJICAgIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSANCisJCXBy
aW50ayhLRVJOX0lORk8gIkZUUDogTm8gbWVtb3J5IGZvciBhcHBsaWNhdGlv
biBkYXRhXG4iKTsNCisJZWxzZSANCisJew0KKwkJc3RydWN0IGZ0cF9wcml2
X2RhdGEgKnByaXYgPSANCisJCQkoc3RydWN0IGZ0cF9wcml2X2RhdGEgKilt
cy0+YXBwX2RhdGE7DQorCQlwcml2LT5zdGF0ZSA9IDA7DQorCX0NCiAgICAg
ICAgIHJldHVybiAwOw0KIH0NCisjZW5kaWYgLyogQ09ORklHX0lQX01BU1Ff
QVBQX1NQT1JUICovDQogDQogc3RhdGljIGludA0KIG1hc3FfZnRwX2RvbmVf
MSAoc3RydWN0IGlwX21hc3FfYXBwICptYXBwLCBzdHJ1Y3QgaXBfbWFzcSAq
bXMpDQpAQCAtODcsNiArMTE3LDE3IEBADQogICAgICAgICByZXR1cm4gMDsN
CiB9DQogDQorI2lmZGVmIENPTkZJR19JUF9NQVNRX0FQUF9TUE9SVA0KK3N0
YXRpYyBpbnQNCittYXNxX2Z0cF9kb25lXzFfcmV2ZXJzZSAoc3RydWN0IGlw
X21hc3FfYXBwICptYXBwLCBzdHJ1Y3QgaXBfbWFzcSAqbXMpDQorew0KKyAg
ICAgICAgTU9EX0RFQ19VU0VfQ09VTlQ7DQorCWlmIChtcy0+YXBwX2RhdGEp
DQorCQlrZnJlZV9zKG1zLT5hcHBfZGF0YSwgc2l6ZW9mKHN0cnVjdCBmdHBf
cHJpdl9kYXRhKSk7DQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQorI2Vu
ZGlmIC8qIENPTkZJR19JUF9NQVNRX0FQUF9TUE9SVCAqLw0KIGludA0KIG1h
c3FfZnRwX291dCAoc3RydWN0IGlwX21hc3FfYXBwICptYXBwLCBzdHJ1Y3Qg
aXBfbWFzcSAqbXMsIHN0cnVjdCBza19idWZmICoqc2tiX3AsIF9fdTMyIG1h
ZGRyKQ0KIHsNCkBAIC0xMDUsNyArMTQ2LDkgQEANCiAgICAgICAgIHNrYiA9
ICpza2JfcDsNCiAJaXBoID0gc2tiLT5uaC5pcGg7DQogICAgICAgICB0aCA9
IChzdHJ1Y3QgdGNwaGRyICopJigoKGNoYXIgKilpcGgpW2lwaC0+aWhsKjRd
KTsNCi0gICAgICAgIGRhdGEgPSAoY2hhciAqKSZ0aFsxXTsNCisvKiAgICAg
ICAgZGF0YSA9IChjaGFyICopJnRoWzFdOyAqLw0KKwlkYXRhID0gKGNoYXIg
Kil0aDsNCisJZGF0YSArPSB0aC0+ZG9mZio0OyAvKiBSQUI6IFRDUCBvcHRp
b25zIGZpeCAqLw0KIA0KICAgICAgICAgZGF0YV9saW1pdCA9IHNrYi0+aC5y
YXcgKyBza2ItPmxlbiAtIDE4Ow0KICAgICAgICAgaWYgKHNrYi0+bGVuID49
IDYgJiYgKG1lbWNtcChkYXRhLCAiUEFTVlxyXG4iLCA2KSA9PSAwIHx8IG1l
bWNtcChkYXRhLCAicGFzdlxyXG4iLCA2KSA9PSAwKSkNCkBAIC0yNDQsNyAr
Mjg3LDkgQEANCiAJc2tiID0gKnNrYl9wOw0KIAlpcGggPSBza2ItPm5oLmlw
aDsNCiAJdGggPSAoc3RydWN0IHRjcGhkciAqKSYoKChjaGFyICopaXBoKVtp
cGgtPmlobCo0XSk7DQotCWRhdGEgPSAoY2hhciAqKSZ0aFsxXTsNCisvKglk
YXRhID0gKGNoYXIgKikmdGhbMV07ICovDQorCWRhdGEgPSAoY2hhciAqKXRo
Ow0KKwlkYXRhICs9IHRoLT5kb2ZmKjQ7IC8vIFJBQiAtIHRjcCBvcHRpb25z
IGZpeA0KIAlkYXRhX2xpbWl0ID0gc2tiLT5oLnJhdyArIHNrYi0+bGVuOw0K
IA0KIAl3aGlsZSAoZGF0YSA8IGRhdGFfbGltaXQgJiYgKmRhdGEgIT0gJyAn
KQ0KQEAgLTMxMCw2ICszNTUsMTcxIEBADQogCXJldHVybiAwOwkvKiBubyBk
aWZmIHJlcXVpcmVkIGZvciBpbmNvbWluZyBwYWNrZXRzLCB0aGFuayBnb29k
bmVzcyAqLw0KIH0NCiANCisjaWZkZWYgQ09ORklHX0lQX01BU1FfQVBQX1NQ
T1JUDQorLyogUkFCIC0gZm9yIHNlcnZlcnMsIHdlIGRvIHRoZSByZXZlcnNl
ICovDQorDQoraW50DQorbWFzcV9mdHBfb3V0X3JldmVyc2UgKHN0cnVjdCBp
cF9tYXNxX2FwcCAqbWFwcCwgc3RydWN0IGlwX21hc3EgKm1zLCBzdHJ1Y3Qg
c2tfYnVmZiAqKnNrYl9wLCBfX3UzMiBtYWRkcikNCit7DQorCXN0cnVjdCBz
a19idWZmICpza2I7DQorCXN0cnVjdCBpcGhkciAqaXBoOw0KKwlzdHJ1Y3Qg
dGNwaGRyICp0aDsNCisJY2hhciAqZGF0YSwgKmRhdGFfbGltaXQsICpwOw0K
Kwl1bnNpZ25lZCBjaGFyIHAxLHAyLHAzLHA0LHA1LHA2Ow0KKwlfX3UzMiBm
cm9tOw0KKwlfX3UxNiBwb3J0Ow0KKwlzdHJ1Y3QgaXBfbWFzcSAqbl9tczsN
CisJY2hhciBidWZbMjRdOw0KKwl1bnNpZ25lZCBidWZfbGVuOw0KKwlpbnQg
ZGlmZjsNCisJc3RydWN0IGZ0cF9wcml2X2RhdGEgKnByaXYgPSAoc3RydWN0
IGZ0cF9wcml2X2RhdGEgKiltcy0+YXBwX2RhdGE7DQorDQorCWlmICghbXMt
PmFwcF9kYXRhIHx8ICEoKHN0cnVjdCBmdHBfcHJpdl9kYXRhICopbXMtPmFw
cF9kYXRhKS0+c3RhdGUpDQorCQlyZXR1cm4gMDsJLyogcXVpY2sgZXhpdCBp
ZiBubyBvdXRzdGFuZGluZyBQQVNWICovDQorDQorCXNrYiA9ICpza2JfcDsN
CisJaXBoID0gc2tiLT5uaC5pcGg7DQorCXRoID0gKHN0cnVjdCB0Y3BoZHIg
KikmKCgoY2hhciAqKWlwaClbaXBoLT5paGwqNF0pOw0KKwlkYXRhID0gKGNo
YXIgKil0aDsNCisJZGF0YSArPSB0aC0+ZG9mZio0Ow0KKwlkYXRhX2xpbWl0
ID0gc2tiLT5oLnJhdyArIHNrYi0+bGVuOw0KKwlwcml2ID0gKHN0cnVjdCBm
dHBfcHJpdl9kYXRhICopbXMtPmFwcF9kYXRhOw0KKw0KKy8vIGhvcGVmdWxs
eSB0aGlzIG1pbmkgc3RhdGUgbWFjaGluZSB3aWxsIGJlIGEgYml0IG1vcmUg
cm9idXN0DQorCXdoaWxlIChkYXRhIDwgZGF0YV9saW1pdCAmJiBwcml2LT5z
dGF0ZSAhPSA0KSB7DQorCQlzd2l0Y2ggKHByaXYtPnN0YXRlKSB7DQorCQkJ
Y2FzZSAxOg0KKwkJCWlmICgqZGF0YSA9PSAnICcpIHByaXYtPnN0YXRlID0g
MjsNCisJCQllbHNlIGRhdGErKzsNCisJCQlicmVhazsNCisJCQljYXNlIDI6
DQorCQkJaWYgKCpkYXRhICE9ICcgJykgew0KKwkJCQlwcml2LT5zdGF0ZSA9
IDM7DQorCQkJCXByaXYtPnBvcyA9IDA7DQorCQkJfQ0KKwkJCWVsc2UgZGF0
YSsrOw0KKwkJCWJyZWFrOw0KKwkJCWNhc2UgMzoNCisJCQlpZiAocHJpdi0+
cG9zIDwgMjIpIHsNCisJCQkJcHJpdi0+cG9zKys7DQorCQkJCWRhdGErKzsN
CisJCQl9DQorCQkJZWxzZSBwcml2LT5zdGF0ZSA9IDQ7DQorCQkJYnJlYWs7
DQorCQkJZGVmYXVsdDoNCisJCQlkYXRhKys7DQorCQkJYnJlYWs7DQorCQl9
DQorCX0NCisJaWYgKGRhdGEgPj0gZGF0YV9saW1pdCkgcmV0dXJuIDA7DQor
CXByaXYtPnN0YXRlID0gMDsNCisJaWYgKGRhdGEgPj0gZGF0YV9saW1pdCB8
fCAqZGF0YSAhPSAnKCcpDQorCQlyZXR1cm4gMDsNCisJcCA9IGRhdGErMTsN
CisJcDEgPSBzaW1wbGVfc3RydG91bChkYXRhKzEsICZkYXRhLCAxMCk7DQor
CWlmIChkYXRhID49IGRhdGFfbGltaXQgfHwgKmRhdGEgIT0gJywnKQ0KKwkJ
cmV0dXJuIDA7DQorCXAyID0gc2ltcGxlX3N0cnRvdWwoZGF0YSsxLCAmZGF0
YSwgMTApOw0KKwlpZiAoZGF0YSA+PSBkYXRhX2xpbWl0IHx8ICpkYXRhICE9
ICcsJykNCisJCXJldHVybiAwOw0KKwlwMyA9IHNpbXBsZV9zdHJ0b3VsKGRh
dGErMSwgJmRhdGEsIDEwKTsNCisJaWYgKGRhdGEgPj0gZGF0YV9saW1pdCB8
fCAqZGF0YSAhPSAnLCcpDQorCQlyZXR1cm4gMDsNCisJcDQgPSBzaW1wbGVf
c3RydG91bChkYXRhKzEsICZkYXRhLCAxMCk7DQorCWlmIChkYXRhID49IGRh
dGFfbGltaXQgfHwgKmRhdGEgIT0gJywnKQ0KKwkJcmV0dXJuIDA7DQorCXA1
ID0gc2ltcGxlX3N0cnRvdWwoZGF0YSsxLCAmZGF0YSwgMTApOw0KKwlpZiAo
ZGF0YSA+PSBkYXRhX2xpbWl0IHx8ICpkYXRhICE9ICcsJykNCisJCXJldHVy
biAwOw0KKwlwNiA9IHNpbXBsZV9zdHJ0b3VsKGRhdGErMSwgJmRhdGEsIDEw
KTsNCisJaWYgKGRhdGEgPj0gZGF0YV9saW1pdCB8fCAqZGF0YSAhPSAnKScp
DQorCQlyZXR1cm4gMDsNCisNCisJZnJvbSA9IChwMTw8MjQpIHwgKHAyPDwx
NikgfCAocDM8PDgpIHwgcDQ7DQorCXBvcnQgPSAocDU8PDgpIHwgcDY7DQor
DQorCS8qDQorCSAqIE5vdyB1cGRhdGUgb3IgY3JlYXRlIGFuIG1hc3F1ZXJh
ZGUgZW50cnkgZm9yIGl0DQorCSAqLw0KKwlJUF9NQVNRX0RFQlVHKDEtZGVi
dWcsICJzZXJ2ZXItc2lkZSBQQVNWIHJlc3BvbnNlICVsWDolWCAlWDolWCBk
ZXRlY3RlZFxuIiwgbnRvaGwobXMtPnNhZGRyKSwgMCwgZnJvbSwgcG9ydCk7
DQorDQorLyogeWVhaCwgd2UgYWx3YXlzIHVzZSBvdXRfZ2V0IGJlY2F1c2Ug
aXQgaGFzIHRoZSBfcmVhbF8gYWRkcmVzc2VzICovDQorCW5fbXMgPSBpcF9t
YXNxX291dF9nZXQoaXBoLT5wcm90b2NvbCwNCisJCQkJIGh0b25sKGZyb20p
LCBodG9ucyhwb3J0KSwNCisJCQkJIG1zLT5kYWRkciwgMCk7DQorCWlmICgh
bl9tcykgew0KKwkJbl9tcyA9IGlwX21hc3FfbmV3KElQUFJPVE9fVENQLA0K
KwkJCQkJbWFkZHIsIDAsDQorCQkJCQlodG9ubChmcm9tKSwgaHRvbnMocG9y
dCksDQorCQkJCQltcy0+ZGFkZHIsIDAsDQorCQkJCQlJUF9NQVNRX0ZfTk9f
RFBPUlQpOw0KKw0KKwkJaWYgKG5fbXM9PU5VTEwpDQorCQkJcmV0dXJuIDA7
DQorCQlpcF9tYXNxX2NvbnRyb2xfYWRkKG5fbXMsIG1zKTsNCisJfQ0KKwkv
Kg0KKwkgKiBSZXBsYWNlIHRoZSBvbGQgUE9SVCB3aXRoIHRoZSBuZXcgb25l
DQorCSAqLw0KKwlmcm9tID0gbnRvaGwobl9tcy0+bWFkZHIpOw0KKwlwb3J0
ID0gbnRvaHMobl9tcy0+bXBvcnQpOw0KKwlzcHJpbnRmKGJ1ZiwiJWQsJWQs
JWQsJWQsJWQsJWQiLA0KKwkJZnJvbT4+MjQmMjU1LGZyb20+PjE2JjI1NSxm
cm9tPj44JjI1NSxmcm9tJjI1NSwNCisJCXBvcnQ+PjgmMjU1LHBvcnQmMjU1
KTsNCisJYnVmX2xlbiA9IHN0cmxlbihidWYpOw0KKw0KKwlJUF9NQVNRX0RF
QlVHKDEtZGVidWcsICJuZXcgUEFTViAlWDolWFxuIixmcm9tLHBvcnQpOw0K
Kw0KKwkvKg0KKwkgKiBDYWxjdWxhdGUgcmVxdWlyZWQgZGVsdGEtb2Zmc2V0
IHRvIGtlZXAgVENQIGhhcHB5DQorCSAqLw0KKwkNCisJZGlmZiA9IGJ1Zl9s
ZW4gLSAoZGF0YS1wKTsNCisJDQorCS8qDQorCSAqCU5vIHNoaWZ0Lg0KKwkg
Ki8NCisJDQorCWlmIChkaWZmPT0wKSB7DQorCQkvKg0KKwkJICogc2ltcGxl
IGNhc2UsIGp1c3QgcmVwbGFjZSB0aGUgb2xkIFBPUlQgY21kDQorCQkgKi8N
CisJCW1lbWNweShwLGJ1ZixidWZfbGVuKTsNCisJfSBlbHNlIHsNCisNCisJ
CSpza2JfcCA9IGlwX21hc3Ffc2tiX3JlcGxhY2Uoc2tiLCBHRlBfQVRPTUlD
LCBwLCBkYXRhLXAsIGJ1ZiwgYnVmX2xlbik7DQorCX0NCisJLyoNCisJICog
CU1vdmUgdHVubmVsIHRvIGxpc3RlbiBzdGF0ZQ0KKwkgKi8NCisJaXBfbWFz
cV9saXN0ZW4obl9tcyk7DQorCWlwX21hc3FfcHV0KG5fbXMpOw0KKw0KKwly
ZXR1cm4gZGlmZjsNCit9DQorDQoraW50DQorbWFzcV9mdHBfaW5fcmV2ZXJz
ZSAoc3RydWN0IGlwX21hc3FfYXBwICptYXBwLCBzdHJ1Y3QgaXBfbWFzcSAq
bXMsIHN0cnVjdCBza19idWZmICoqc2tiX3AsIF9fdTMyIG1hZGRyKQ0KK3sN
CisgICAgICAgIHN0cnVjdCBza19idWZmICpza2I7DQorCXN0cnVjdCBpcGhk
ciAqaXBoOw0KKwlzdHJ1Y3QgdGNwaGRyICp0aDsNCisJY2hhciAqZGF0YSwg
KmRhdGFfbGltaXQ7DQorDQorICAgICAgICBza2IgPSAqc2tiX3A7DQorCWlw
aCA9IHNrYi0+bmguaXBoOw0KKyAgICAgICAgdGggPSAoc3RydWN0IHRjcGhk
ciAqKSYoKChjaGFyICopaXBoKVtpcGgtPmlobCo0XSk7DQorICAgICAgICBk
YXRhID0gKGNoYXIgKil0aDsNCisJZGF0YSArPSAodGgtPmRvZmYqNCk7DQor
DQorICAgICAgICBkYXRhX2xpbWl0ID0gc2tiLT5oLnJhdyArIHNrYi0+bGVu
Ow0KKyAgICAgICAgaWYgKHNrYi0+bGVuID49IDYgJiYgKG1lbWNtcChkYXRh
LCAiUEFTVlxyXG4iLCA2KSA9PSAwIHx8IG1lbWNtcChkYXRhLCAicGFzdlxy
XG4iLCA2KSA9PSAwKSkgew0KKwkJKChzdHJ1Y3QgZnRwX3ByaXZfZGF0YSAq
KW1zLT5hcHBfZGF0YSktPnN0YXRlID0gMTsNCisJfQ0KKwlyZXR1cm4gMDsN
Cit9DQorDQorI2VuZGlmIC8qIENPTkZJR19JUF9NQVNRX0FQUF9TUE9SVCAq
Lw0KIHN0cnVjdCBpcF9tYXNxX2FwcCBpcF9tYXNxX2Z0cCA9IHsNCiAgICAg
ICAgIE5VTEwsCQkJLyogbmV4dCAqLw0KIAkiZnRwIiwJCQkvKiBuYW1lICov
DQpAQCAtMzIxLDYgKzUzMSwxOSBAQA0KICAgICAgICAgbWFzcV9mdHBfaW4s
ICAgICAgICAgICAgLyogcGt0X2luICovDQogfTsNCiANCisjaWZkZWYgQ09O
RklHX0lQX01BU1FfQVBQX1NQT1JUDQorc3RydWN0IGlwX21hc3FfYXBwIGlw
X21hc3FfZnRwX3JldmVyc2UgPSB7DQorICAgICAgICBOVUxMLAkJCS8qIG5l
eHQgKi8NCisJImZ0cCIsCQkJLyogbmFtZSAqLw0KKyAgICAgICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgLyogdHlwZSAqLw0KKyAgICAgICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgLyogbl9hdHRhY2ggKi8NCisgICAgICAgIG1h
c3FfZnRwX2luaXRfMV9yZXZlcnNlLCAgICAgICAgLyogaXBfbWFzcV9pbml0
XzEgKi8NCisgICAgICAgIG1hc3FfZnRwX2RvbmVfMV9yZXZlcnNlLCAgICAg
ICAgLyogaXBfbWFzcV9kb25lXzEgKi8NCisgICAgICAgIG1hc3FfZnRwX291
dF9yZXZlcnNlLCAgICAgICAgICAgLyogcGt0X291dCAqLw0KKyAgICAgICAg
bWFzcV9mdHBfaW5fcmV2ZXJzZSwgICAgICAgICAgICAvKiBwa3RfaW4gKi8N
Cit9Ow0KKw0KKyNlbmRpZiAvKiBDT05GSUdfSVBfTUFTUV9BUFBfU1BPUlQg
Ki8NCiAvKg0KICAqIAlpcF9tYXNxX2Z0cCBpbml0aWFsaXphdGlvbg0KICAq
Lw0KQEAgLTM0MCw2ICs1NjMsMTcgQEANCiAJCQkJCQkgICAgICBwb3J0c1tp
XSkpKSB7DQogCQkJCXJldHVybiBqOw0KIAkJCX0NCisjaWZkZWYgQ09ORklH
X0lQX01BU1FfQVBQX1NQT1JUDQorCQkJaWYgKChtYXNxX2luY2FybmF0aW9u
c19yZXZlcnNlW2ldID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwX21hc3Ff
YXBwKSwNCisJCQkJCQkJICAgIEdGUF9LRVJORUwpKSA9PSBOVUxMKQ0KKwkJ
CQlyZXR1cm4gLUVOT01FTTsNCisJCQltZW1jcHkobWFzcV9pbmNhcm5hdGlv
bnNfcmV2ZXJzZVtpXSwgJmlwX21hc3FfZnRwX3JldmVyc2UsIHNpemVvZihz
dHJ1Y3QgaXBfbWFzcV9hcHApKTsNCisJCQlpZiAoKGogPSByZWdpc3Rlcl9p
cF9tYXNxX2FwcF9mbGFncyhtYXNxX2luY2FybmF0aW9uc19yZXZlcnNlW2ld
LCANCisJCQkJCQkgICAgICBJUFBST1RPX1RDUCwgDQorCQkJCQkJICAgICAg
cG9ydHNbaV0sIElQX01BU1FfQVBQX0ZfUkVWRVJTRSkpKSB7DQorCQkJCXJl
dHVybiBqOw0KKwkJCX0NCisjZW5kaWYgLyogQ09ORklHX0lQX01BU1FfQVBQ
X1NQT1JUICovDQogCQkJSVBfTUFTUV9ERUJVRygxLWRlYnVnLCAiRnRwOiBs
b2FkZWQgc3VwcG9ydCBvbiBwb3J0WyVkXSA9ICVkXG4iLA0KIAkJCSAgICAg
ICBpLCBwb3J0c1tpXSk7DQogCQl9IGVsc2Ugew0KQEAgLTM3MCw2ICs2MDQs
MTggQEANCiAJCQkJICAgICAgIGksIHBvcnRzW2ldKTsNCiAJCQl9DQogCQl9
DQorI2lmZGVmIENPTkZJR19JUF9NQVNRX0FQUF9TUE9SVA0KKwkJaWYgKG1h
c3FfaW5jYXJuYXRpb25zX3JldmVyc2VbaV0pIHsNCisJCQlpZiAoKGogPSB1
bnJlZ2lzdGVyX2lwX21hc3FfYXBwKG1hc3FfaW5jYXJuYXRpb25zX3JldmVy
c2VbaV0pKSkgew0KKwkJCQlrID0gajsNCisJCQl9IGVsc2Ugew0KKwkJCQlr
ZnJlZShtYXNxX2luY2FybmF0aW9uc19yZXZlcnNlW2ldKTsNCisJCQkJbWFz
cV9pbmNhcm5hdGlvbnNfcmV2ZXJzZVtpXSA9IE5VTEw7DQorCQkJCUlQX01B
U1FfREVCVUcoMS1kZWJ1ZywgIkZ0cDogdW5sb2FkZWQgc3VwcG9ydCBvbiBw
b3J0WyVkXSA9ICVkXG4iLA0KKwkJCQkgICAgICAgaSwgcG9ydHNbaV0pOw0K
KwkJCX0NCisJCX0NCisjZW5kaWYgLyogQ09ORklHX0lQX01BU1FfQVBQX1NQ
T1JUICovDQogCX0NCiAJcmV0dXJuIGs7DQogfQ0K
--215503375-1513663793-936506470=:2592--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/