One-way Gigabit Ethernet TCP performance with Jumbo frames

Steffen Persvold (sp@scali.com)
Thu, 2 Jan 2003 14:06:41 +0100 (CET)


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.

---1463794943-2128730964-1041512801=:18738
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi all,

Lately I've been testing out two Gigabit Ethernet adapters on Pentium 4
Xeon platforms; onboard Intel 82544GC (e1000 driver) and onboard Broadcom
BCM5701 (tg3 driver), and I'm experiencing some wierd behaviour on
one-way tests (ping-ping). The machines I'm testing is connected back to
back (i.e no switch) and are fairly fast systems (Dual Xeon 2.4 GHz, 1GB
memory) configured to use Jumbo frames (9000 bytes).

With ping-pong traffic (the attached program run with -bo, or NetPipe
default) the bandwidth performance is close to wire speed (123 MByte/sec)
and the ping-pong/2 latency is ~30us with both GbE devices.

But, when running a one-way test (where one machine only sends, and the
other only receives, i.e ping-ping) there is a serious dip in the
performance curve at ~768 bytes and the bandwidth levels out at approx
60 MByte/sec (about half of peak) regadless of application and GbE device.

However, if the benchmark applications are started at 2048 bytes (and not
0 which is default), or the MTU is set to standard 1500 bytes, there is no
such "dip" in the performance curve.

Is there a new "silly window" syndrome going on here ? Both applications
use TCP_NODELAY.

I'll appreciate any feedback, and I'm happy to assist in the debugging
process testing out patches etc.

PS

Attached you'll find a yet another "bandwidth" program which measures TCP
performance i three ways; ping-ping (one-way), ping-pong, and exchange
(two way). Should compile fine with gcc -O2, and you must start a server
process (-Ts) on one machine and a client process (-Tc -s <server>) on the
other machine.

DS

Best regards,
--
Steffen Persvold | Scali AS
mailto:sp@scali.com | http://www.scali.com
Tel: (+47) 2262 8950 | Olaf Helsets vei 6
Fax: (+47) 2262 8951 | N0621 Oslo, NORWAY

---1463794943-2128730964-1041512801=:18738
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="bandwidth.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0301021406411.18738@sp-laptop.isdn.scali.no>
Content-Description:
Content-Disposition: attachment; filename="bandwidth.c"

I2RlZmluZSBNT0RVTEUgICAgIkJBTkRXSURUSCINCiNkZWZpbmUgTU9EVUxF
X0lEICJAKCMpJElkOiBiYW5kd2lkdGguYyx2IDEuNyAyMDAyLzEyLzI2IDEz
OjUxOjQ0IHNwIEV4cCAkIg0KDQovKiBDb3B5cmlnaHQgTm90aWNlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0NCi8vDQovLyBiYW5kd2lkdGguYzogcG9pbnQtdG8tcG9pbnQg
cGVyZm9ybWFuY2UgYmVuY2htYXJrDQovLw0KLy8gQ29weXJpZ2h0IChDKSAy
MDAxICBTY2FsaSBBUyAgIA0KLy8NCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5DQovLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KLy8gdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3INCi8vIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uDQovLw0KLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQovLyBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZg0KLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KLy8gR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCi8vDQovLyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQ0KLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi8vIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC
b3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCi8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQ0KKi8NCg0KLyogTW9kdWxlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tDQovLyANCi8vICRSQ1NmaWxlOiBiYW5kd2lkdGguYyx2
ICQNCi8vIA0KLy8gQ1JFQVRFRA0KLy8gICBBdXRob3I6IGhvYiAoSGFrb24g
T3JkaW5nIEJ1Z2dlKQ0KLy8gICBEYXRlOiAgIDIwMDEvMDIvMjggMTY6Mjg6
NDENCi8vIA0KLy8gTEFTVCBDSEFOR0VEDQovLyAgICRBdXRob3I6IHNwICQN
Ci8vICAgJERhdGU6IDIwMDIvMTIvMjYgMTM6NTE6NDQgJA0KLy8gDQovLyBE
RVNDUklQVElPTg0KLy8gICBUaGlzIHByb2dyYW0gc2VydmVzIHRoZSBwdXJw
b3NlIG9mIGFzc2Vzc2luZyBwb2ludC10by1wb2ludCBwZXJmb3JtYW5jZQ0K
LyAgICBvZiBhbiBEQVQgaW1wbGVtZW50YXRpb24uDQovLyAgIA0KLy8gV0FS
TklORw0KLy8gICBTY2FsaSBjb25zaWRlcnMgdGhpcyBwcm9ncmFtIG5vdCB0
byBiZSB0aGUgKmJlc3QqIHByb2dyYW0gZm9yIG1lYXN1cmluZw0KLy8gICBw
ZXJmb3JtYW5jZSwgYnV0IGl0IGlzIGluY2x1ZGVkIGZvciBpdHMgc2ltcGxp
Y2l0eS4gU2NhbGkgY29uc2lkZXJzDQovLyAgIGNvbGxlY3RpdmUgb3BlcmF0
aW9ucyB0byBiZSBtb3JlIHZhbHVhYmxlIGluIGFzc2VzaW5nIGEgY2x1c3Rl
cnMnDQovLyAgIHBlcmZvcm1hbmNlLCBoZW5jZSwgdXNlIFBhbGxhcyBQTUIg
b3IgbXBwdGVzdCBpbnN0ZWFkLg0KLy8gICANCi8vICAgDQovLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLyogRGVwZW5kZW5jaWVzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1
ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUg
PHVuaXN0ZC5oPg0KI2luY2x1ZGUgPHNpZ25hbC5oPg0KI2luY2x1ZGUgPGFz
c2VydC5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaW5jbHVkZSA8bmV0ZGIu
aD4NCiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQojaW5jbHVkZSA8bmV0aW5l
dC90Y3AuaD4NCiNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCiNpbmNsdWRlIDxz
eXMvdGltZS5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRl
IDxzeXMvdGltZS5oPg0KDQovKiBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8NCg0KI2RlZmluZSBQT1JUIDEyMzANCg0KI2RlZmluZSBET19QSU5H
X1BJTkcgMQ0KI2RlZmluZSBET19QSU5HX1BPTkcgMg0KI2RlZmluZSBET19F
WENIQU5HRSAgNA0KDQojaWZuZGVmIE1JTg0KI2RlZmluZSBNSU4oYSxiKSAo
KGEpIDwgKGIpID8gKGEpIDogKGIpKQ0KI2VuZGlmDQoNCi8qIFR5cGVkZWZz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQp0eXBlZGVmIHZvaWQgKCpiZW5j
aF9yb3V0X3QpKGludCwgY2hhciAqLCBjaGFyICosIGludCk7DQp0eXBlZGVm
IHN0cnVjdCB7DQogICAgICBiZW5jaF9yb3V0X3QgYmVuY2g7DQogICAgICBj
aGFyICptbmVtOw0KICAgICAgaW50IHNjYWxlOw0KICAgICAgaW50IG1hc2s7
DQp9IGJlbmNoX2Rlc2NfdDsNCg0KLyogR2xvYmFscyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovDQoNCnN0YXRpYyBpbnQgbWU9LTE7DQpzdGF0aWMgaW50IHRv
dWNoX3R4X2luaXRpYWxseT0xOw0Kc3RhdGljIGludCB0b3VjaF90eF9hbHdh
eXM9MDsNCnN0YXRpYyBpbnQgdG91Y2hfcng9MDsNCnN0YXRpYyBpbnQgYWxp
Z249MDsNCnN0YXRpYyBpbnQgYmVuY2hfbWFzaz0wOw0Kc3RhdGljIGludCBt
c2dfbWluPTEsIG1zZ19tYXg9MTYqMTAyNCoxMDI0Ow0Kc3RhdGljIGRvdWJs
ZSB0Z29hbD0wLjEsIHRyZXM7DQpzdGF0aWMgaW50IGJ1ZnN6ID0gMjYyMTQ0
Ow0Kc3RhdGljIGludCBzb2NrZmQgPSAtMTsNCnN0YXRpYyBjb25zdCBpbnQg
bWluX2l0ZXI9MjsNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovDQoNCnN0YXRpYyB2b2lkDQpid19leGl0KGludCBleGl0X2NvZGUpDQp7
DQogICBpZiAoc29ja2ZkID49IDApDQogICAgICBjbG9zZShzb2NrZmQpOw0K
ICAgZXhpdChleGl0X2NvZGUpOw0KfQ0KDQovKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8NCg0Kc3RhdGljIHZvaWQNCmJ3X3NlbmQodm9pZCAq
YnVmLCBpbnQgbGVuKQ0Kew0KICAgaW50IHN0czsNCiAgIHN0cyA9IHNlbmQo
c29ja2ZkLCBidWYsIGxlbiwgTVNHX05PU0lHTkFMKTsNCiAgIGlmIChzdHMg
IT0gbGVuKQ0KICAgICAgYndfZXhpdCgxKTsNCn0NCg0Kc3RhdGljIHZvaWQN
CmJ3X3JlY3Yodm9pZCAqYnVmLCBpbnQgbGVuKQ0Kew0KICAgaW50IHN0czsN
CiAgIHN0cyA9IHJlY3Yoc29ja2ZkLCBidWYsIGxlbiwgTVNHX1dBSVRBTEwp
Ow0KICAgaWYgKHN0cyAhPSBsZW4pDQogICAgICBid19leGl0KDEpOw0KfQ0K
DQpzdGF0aWMgdm9pZA0KYndfc2VuZHJlY3Yodm9pZCAqYnVmMSwgdm9pZCAq
YnVmMiwgaW50IGxlbikNCnsNCiAgIGNoYXIgKl9idWYxID0gKGNoYXIgKili
dWYxOw0KICAgY2hhciAqX2J1ZjIgPSAoY2hhciAqKWJ1ZjI7DQoNCiAgIHdo
aWxlIChsZW4gPiAwKSB7DQogICAgICBpbnQgbCA9IE1JTihidWZzei8yLCBs
ZW4pOw0KICAgICAgYndfc2VuZChidWYxLCBsKTsNCiAgICAgIGJ3X3JlY3Yo
YnVmMiwgbCk7DQogICAgICBsZW4gLT0gbDsNCiAgICAgIF9idWYxICs9IGw7
DQogICAgICBfYnVmMiArPSBsOw0KICAgfQ0KfQ0KDQovKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0Kc3RhdGljIGRvdWJsZQ0KYndfd3Rp
bWUodm9pZCkNCnsNCiAgIHN0cnVjdCB0aW1ldmFsIHRwOw0KDQogICBnZXR0
aW1lb2ZkYXkoJnRwLCBOVUxMKTsNCg0KICAgcmV0dXJuICgoZG91YmxlKSB0
cC50dl9zZWMgKyAoZG91YmxlKSB0cC50dl91c2VjICogMWUtNik7DQp9DQoN
Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpzdGF0aWMg
dm9pZA0KcGluZ19waW5nKGludCBpdGVyLCBjaGFyICpidWYsIGNoYXIgKnNw
YXJlLCBpbnQgbGVuKSB7DQogICBpbnQgaTsNCg0KICAgZm9yIChpPTA7IGkg
PCBpdGVyOyBpKyspIHsNCiAgICAgIGlmIChtZSA9PSAwKSB7DQogICAgICAg
ICBpZiAodG91Y2hfdHhfYWx3YXlzKSBtZW1zZXQoYnVmLCAwLCBsZW4pOw0K
CSBid19zZW5kKGJ1ZiwgbGVuKTsNCiAgICAgIH0gZWxzZSB7DQoJIGJ3X3Jl
Y3YoYnVmLCBsZW4pOw0KCSBpZiAodG91Y2hfcngpIG1lbWNtcChidWYsIGJ1
ZiwgbGVuKTsNCiAgICAgIH0NCiAgIH0NCn0NCg0Kc3RhdGljIHZvaWQNCnBp
bmdfcG9uZyhpbnQgaXRlciwgY2hhciAqYnVmLCBjaGFyICpzcGFyZSwgaW50
IGxlbikgew0KICAgaW50IGk7DQoNCiAgIGZvciAoaT0wOyBpIDwgaXRlcjsg
aSsrKSB7DQogICAgICBpZiAobWUgPT0gMCkgew0KICAgICAgICAgaWYgKHRv
dWNoX3R4X2Fsd2F5cykgbWVtc2V0KGJ1ZiwgMCwgbGVuKTsNCgkgYndfc2Vu
ZChidWYsIGxlbik7DQoJIGJ3X3JlY3YoYnVmLCBsZW4pOw0KCSBpZiAodG91
Y2hfcngpIG1lbWNtcChidWYsIGJ1ZiwgbGVuKTsNCiAgICAgIH0gZWxzZSB7
DQoJIGJ3X3JlY3YoYnVmLCBsZW4pOw0KCSBpZiAodG91Y2hfcngpIG1lbWNt
cChidWYsIGJ1ZiwgbGVuKTsNCiAgICAgICAgIGlmICh0b3VjaF90eF9hbHdh
eXMpIG1lbXNldChidWYsIDAsIGxlbik7DQoJIGJ3X3NlbmQoYnVmLCBsZW4p
Ow0KICAgICAgfQ0KICAgfQ0KfQ0KDQpzdGF0aWMgdm9pZA0KZXhjaGFuZ2Uo
aW50IGl0ZXIsIGNoYXIgKmJ1ZjEsIGNoYXIgKmJ1ZjIsIGludCBsZW4pIHsN
CiAgIGludCBpOw0KDQogICBmb3IgKGk9MDsgaSA8IGl0ZXI7IGkrKykgew0K
ICAgICAgaWYgKHRvdWNoX3R4X2Fsd2F5cykgbWVtc2V0KGJ1ZjEsIDAsIGxl
bik7DQogICAgICBid19zZW5kcmVjdihidWYxLCBidWYyLCBsZW4pOw0KICAg
ICAgaWYgKHRvdWNoX3J4KSBtZW1jbXAoYnVmMiwgYnVmMiwgbGVuKTsNCiAg
IH0NCn0NCg0Kc3RhdGljIGJlbmNoX2Rlc2NfdCBiZW5jaFtdID0geyANCiAg
IHsgcGluZ19waW5nLCAicGluZy1waW5nIiwgICAgICAgICAgICAgIDEsIERP
X1BJTkdfUElORyB9LA0KICAgeyBwaW5nX3BvbmcsICJwaW5nLXBvbmciLCAg
ICAgICAgICAgICAgMiwgRE9fUElOR19QT05HIH0sDQogICB7IGV4Y2hhbmdl
LCAgImV4Y2hhbmdlIiwgICAgICAgICAgICAgICAyLCBET19FWENIQU5HRSAg
fSwNCiAgIHsgTlVMTCwgICAgICAibm9uZSIsICAgICAgMCB9LA0KfTsNCg0K
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCnN0YXRpYyB2
b2lkDQpwcmludF9oZWFkZXIoY2hhciAqc3RyKSB7DQogICBpbnQgaTsNCiAg
IA0KICAgaWYgKG1lID09IDApIHsNCiAgICAgIHByaW50ZigiQmVuY2htYXJr
ICVzXG4iLCBzdHIpOw0KICAgICAgZm9yIChpPTA7IGkgPCBzdHJsZW4oc3Ry
KStzdHJsZW4oIkJlbmNobWFyayAiKTsgKytpKSBwcmludGYoIj0iKTsNCiAg
ICAgIHByaW50ZigiXG4iKTsNCg0KICAgICAgcHJpbnRmKCIlMTRzICUxNHMg
JTE0cyAlMTRzICUxNHNcbiIsDQoJICAgICAibGVuZ2h0IiwgIml0ZXJhdGlv
bnMiLCAiZWxhcHNlZCB0aW1lIiwgInRyYW5zZmVyIHJhdGUiLCAibGF0ZW5j
eSIpOw0KICAgICAgcHJpbnRmKCIlMTRzICUxNHMgJTE0cyAlMTRzICUxNHNc
biIsDQoJICAgICAiKGJ5dGVzKSIsICIoY291bnQpIiwgIihzZWNvbmRzKSIs
ICIoTWJ5dGVzL3MpIiwgIih1c2VjKSIpOw0KICAgICAgcHJpbnRmKCItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7DQogICB9DQp9DQoNCnN0
YXRpYyB2b2lkDQptZWFzdXJlKGJlbmNoX3JvdXRfdCByb3V0LCBpbnQgc2Nh
bGUsIGludCBzeikgew0KICAgaW50IGksIGl0ZXIgPSAwOw0KICAgc3RhdGlj
IGludCBwcmV2X2l0ZXIgPSAwOw0KICAgc3RhdGljIGJlbmNoX3JvdXRfdCBw
cmV2X3JvdXQgPSBOVUxMOw0KICAgY2hhciAgICAgICAgICAgICAgICpwMSA9
IChjaGFyICopKGFsaWduID8gdmFsbG9jIDogbWFsbG9jKShzeiksDQoJCSAg
ICAgICpwMiA9IChjaGFyICopKGFsaWduID8gdmFsbG9jIDogbWFsbG9jKShz
eik7DQogICBkb3VibGUgICAgICAgICAgICAgIHQsIHRtaW4sIHM7DQogICAN
CiAgIGlmICh0b3VjaF90eF9pbml0aWFsbHkpIG1lbXNldChwMSwgMCwgc3op
Ow0KDQogICAvKg0KICAgICogT25seSBzcGVuZCB0aW1lIGNhbGN1bGF0aW5n
IGEgbmV3IGl0ZXJhdGlvbiBjb3VudCBpZg0KICAgICogICAgMSkgd2UgaGF2
ZSBhIG5ldyB0ZXN0IGZ1bmN0aW9uDQogICAgKiAgICAgICBvcg0KICAgICog
ICAgMikgd2UgYXJlIG5vdCBkb3duIHRvIG1pbl9pdGVyIG51bWJlciBvZiBp
dGVyYXRpb25zIHlldA0KICAgICovDQoNCiAgIGlmIChwcmV2X3JvdXQgIT0g
cm91dCB8fCBwcmV2X2l0ZXIgPiBtaW5faXRlcikgew0KICAgICAgLyogRmly
c3QsIHF1aWNrIGV2YWx1YXRpb24gdG8gZmluZCB0aGUgY29ycmVjdCBubyBv
ZiBpdGVyYXRpb25zICovDQogICAgICBmb3IgKGl0ZXI9MTsgMTsgaXRlcis9
IGl0ZXIpIHsNCgkgdG1pbiA9IDk5OTkuOw0KCSBmb3IgKGk9MDsgaSA8IDM7
ICsraSkgeyAvKiBtaW5pbXVtIG9mIDMgdGltZXMgc2VlbXMgZ29vZCAqLw0K
CSAgICByb3V0KDEsIHAxLCBwMiwgc3opOw0KCSAgICB0ID0gYndfd3RpbWUo
KTsNCgkgICAgcm91dChpdGVyLCBwMSwgcDIsIHN6KTsNCgkgICAgdCA9IGJ3
X3d0aW1lKCkgLSB0Ow0KDQoJICAgIGJ3X3NlbmRyZWN2KCZ0LCAmcywgc2l6
ZW9mKGRvdWJsZSkpOw0KCSAgICB0ID0gKHQgKyBzKSAvIDI7DQoJICAgIHRt
aW4gPSAgKHQgPCB0bWluKSA/IHQgOiB0bWluOw0KCSB9DQoJIA0KCSBpZiAo
dG1pbiA+IDEwLjAqdHJlcykgYnJlYWs7DQogICAgICB9DQogICAgICAvKiBj
b21wdXRlIGVzdGltYXRlZCBubyBpdGVyYXRpb25zIHRvIHJlYWNoIHRnb2Fs
ICovDQogICAgICBpdGVyID0gaXRlciAqICh0Z29hbCAvIHRtaW4pOw0KICAg
fQ0KICAgaWYgKGl0ZXIgPCBtaW5faXRlcikgaXRlciA9IG1pbl9pdGVyOyAv
KiBhdCBsZWFzdCBtaW5faXRlciBpdGVyYXRpb25zICovDQoNCiAgIC8qIG1l
YXN1cmUgd2l0aCBvbmUgZHJ5IHJ1biBmaXJzdCB0byBnZXQgdGhpbmdzIHNl
dHRsZWQgaW4gY2FjaGUgKi8NCiAgIHJvdXQoMSwgcDEsIHAyLCBzeik7DQog
ICB0ID0gYndfd3RpbWUoKTsNCiAgIHJvdXQoaXRlciwgcDEsIHAyLCBzeik7
DQogICB0ID0gYndfd3RpbWUoKSAtIHQ7DQogICANCiAgIGJ3X3NlbmRyZWN2
KCZ0LCAmcywgc2l6ZW9mKGRvdWJsZSkpOw0KICAgdCA9ICh0ICsgcykgLyAy
Ow0KDQogICBpZiAodCA8PSAwLjApIHQgPSB0cmVzOyAgLyogYXZvaWQgY3Jh
c2ggLi4uICovDQoNCiAgIGlmIChtZSA9PSAwKSB7DQogICAgICBwcmludGYo
IiUxNGQgJTE0ZCAlMTQuM2YgJTE0LjFmICUxNC4xZlxuIiwNCgkgICAgIHN6
LCBpdGVyLCB0LA0KCSAgICAgc3oqKGRvdWJsZSlpdGVyKihkb3VibGUpc2Nh
bGUqMWUtNi90LA0KCSAgICAgdCoxZTYvKGRvdWJsZSlpdGVyLyhkb3VibGUp
c2NhbGUpOw0KICAgfQ0KICAgDQogICBmcmVlKHAyKTsNCiAgIGZyZWUocDEp
Ow0KICAgcHJldl9pdGVyID0gaXRlcjsNCiAgIHByZXZfcm91dCA9IHJvdXQ7
DQp9DQoNCnN0YXRpYyB2b2lkDQpkb191c2FnZSh2b2lkKQ0Kew0KICAgcHJp
bnRmKCJVc2FnZTogc29ja19iYW5kd2lkdGggLVQgPHN8Yz4gWy1zIHNlcnZl
cl0gWy1iIGl8b3x4XSBbLWhdIFstbSBtaW5dIFstTSBtYXhdIFstdCB0Z29h
bF0gWy1WXSBbLXogbWFza11cbiIpOw0KfQ0KDQpzdGF0aWMgdm9pZA0KZG9f
aGVscCh2b2lkKQ0Kew0KICAgZG9fdXNhZ2UoKTsNCiAgIHByaW50ZigNCiAg
ICAgICIgICAgIC1UIDxjfHM+ICAgICA6IFJ1biBhcyBDbGllbnQgb3IgU2Vy
dmVyLlxuIg0KICAgICAgIiAgICAgLWggICAgICAgICAgIDogUHJpbnRzIHRo
aXMgbWVzc2FnZS5cbiINCiAgICAgICIgICAgIFxuIg0KICAgICAgIiAgICAg
VGhlc2UgcGFyYW1ldGVycyBhcmUgb25seSB2YWxpZCBvbiB0aGUgY2xpZW50
IDpcbiINCiAgICAgICIgICAgIFxuIg0KICAgICAgIiAgICAgLXMgPHNlcnZl
cj4gIDogU2VydmVyIHRvIGNvbm5lY3QgdG8uIERlZmF1bHQgbG9jYWxob3N0
LlxuIg0KICAgICAgIiAgICAgLWEgICAgICAgICAgIDogRm9yY2UgcGFnZS1h
bGlnbmVkIGJ1ZmZlciBhbGxvY2F0aW9uLiBEZWZhdWx0IG9mZi5cbiINCiAg
ICAgICIgICAgIC1iIDxpfG98eD4gICA6IEJlbmNobWFyayB0byBydW4sIHBJ
bmctcEluZywgcGluZy1wT25nLCBvciBlWGNoYW5nZS5cbiINCiAgICAgICIg
ICAgICAgICAgICAgICAgICAgIERlZmF1bHQgYWxsLlxuIg0KICAgICAgIiAg
ICAgLW0gPGludD4gICAgIDogTWluaW11bSBtZXNzYWdlIGxlbmd0aC4gRGVm
YXVsdCAwLlxuIg0KICAgICAgIiAgICAgLU0gPGludD4gICAgIDogTWF4aW11
bSBtZXNzYWdlIGxlbmd0aC4gRGVmYXVsdCAxNk0uXG4iDQogICAgICAiICAg
ICAtdCA8ZmxvYXQ+ICAgOiBTcGVjaWZpZXMgdGhlIGdvYWwgZm9yIHRoZSBl
bGFwc2VkIHRpbWUgdXNlZCBwZXIgdGVzdC5cbiINCiAgICAgICIgICAgICAg
ICAgICAgICAgICAgIERlZmF1bHQgJS4xZlxuIg0KICAgICAgIiAgICAgLVYg
ICAgICAgICAgIDogUHJpbnRzIHZlcnNpb24uXG4iDQogICAgICAiICAgICAt
eiA8bWFzaz4gICAgOiBCdWZmZXIgaW5pdGlhbGl6YXRpb24vdG91Y2guIERl
ZmF1bHQgMS5cbiINCiAgICAgICIgICAgICAgICBtYXNrJjEgICA6IEluaXRp
YWwgaW5pdGlhbGl6YXRpb24gb2Ygc2VuZCBidWZmZXIuXG4iDQogICAgICAi
ICAgICAgICAgbWFzayYyICAgOiBJbml0aWFsaXphdGlvbiBvZiBzZW5kIGJ1
ZmZlciBiZWZvcmUgZXZlcnkgc2VuZC5cbiINCiAgICAgICIgICAgICAgICBt
YXNrJjQgICA6IFJlYWQgcmVjZWl2ZSBidWZmZXIgYWZ0ZXIgbWVzc2FnZSBo
YXMgYmVlbiByZWNlaXZlZC5cbiIsDQogICAgICB0Z29hbCk7DQp9DQoNCi8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpzdGF0aWMgaW50
DQpid19pbml0KGludCBhcmdjLCBjaGFyICoqYXJndikNCnsNCiAgIGV4dGVy
biBjaGFyICpvcHRhcmc7DQogICBpbnQgb25lID0gMTsNCiAgIGludCBjOw0K
ICAgY2hhciAqc2VydmVyX25hbWUgPSAibG9jYWxob3N0IjsNCg0KICAgd2hp
bGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJUOnM6aGFiOm06TTp0OlZ6
OiIpKSAhPSBFT0YpIHsNCiAgICAgIHN3aXRjaCAoYykgew0KCSBjYXNlICdU
JzoNCgkgICAgc3dpdGNoICgqb3B0YXJnKSB7DQoJICAgICAgIGNhc2UgJ2Mn
Og0KCQkgIG1lID0gMDsNCgkJICBicmVhazsNCgkgICAgICAgY2FzZSAncyc6
DQoJCSAgbWUgPSAxOw0KCQkgIGJyZWFrOw0KCSAgICAgICBkZWZhdWx0Og0K
CQkgIGRvX3VzYWdlKCk7DQoJCSAgYndfZXhpdCgzKTsNCgkgICAgfQ0KCSAg
ICBicmVhazsNCgkgICAgDQoJIGNhc2UgJ3MnOg0KCSAgICBpZiAobWUgIT0g
MCkgew0KCSAgICAgICBkb191c2FnZSgpOw0KCSAgICAgICBid19leGl0KDMp
Ow0KCSAgICB9DQoJICAgIHNlcnZlcl9uYW1lID0gb3B0YXJnOw0KCSAgICBi
cmVhazsNCg0KCSBjYXNlICdoJzoNCgkgICAgZG9faGVscCgpOw0KCSAgICBi
d19leGl0KDApOw0KCSAgICBicmVhazsNCg0KCSBjYXNlICdhJzoNCgkgICAg
aWYgKG1lICE9IDApIHsNCgkgICAgICAgZG9fdXNhZ2UoKTsNCgkgICAgICAg
YndfZXhpdCgzKTsNCgkgICAgfQ0KCSAgICBhbGlnbiA9IDE7DQoJICAgIGJy
ZWFrOw0KCSAgICANCgkgY2FzZSAnYic6DQoJICAgIGlmIChtZSAhPSAwKSB7
DQoJICAgICAgIGRvX3VzYWdlKCk7DQoJICAgICAgIGJ3X2V4aXQoMyk7DQoJ
ICAgIH0NCgkgICAgc3dpdGNoICgqb3B0YXJnKSB7DQoJICAgICAgIGNhc2Ug
J2knOg0KCQkgIGJlbmNoX21hc2t8PSBET19QSU5HX1BJTkc7DQoJCSAgYnJl
YWs7DQoJCSAgDQoJICAgICAgIGNhc2UgJ28nOg0KCQkgIGJlbmNoX21hc2t8
PSBET19QSU5HX1BPTkc7DQoJCSAgYnJlYWs7DQoJCSAgDQoJICAgICAgIGNh
c2UgJ3gnOg0KCQkgIGJlbmNoX21hc2t8PSBET19FWENIQU5HRTsNCgkJICBi
cmVhazsNCgkJICANCgkgICAgICAgY2FzZSAnPyc6DQoJCSAgZG9fdXNhZ2Uo
KTsNCgkJICBid19leGl0KDMpOw0KCQkgIGJyZWFrOw0KCSAgICB9DQoJICAg
IGJyZWFrOw0KDQoJIGNhc2UgJ20nOg0KCSAgICBpZiAobWUgIT0gMCkgew0K
CSAgICAgICBkb191c2FnZSgpOw0KCSAgICAgICBid19leGl0KDMpOw0KCSAg
ICB9DQoJICAgIG1zZ19taW4gPSBhdG9pKG9wdGFyZyk7DQoJICAgIGJyZWFr
Ow0KCSAgICANCgkgY2FzZSAnTSc6DQoJICAgIGlmIChtZSAhPSAwKSB7DQoJ
ICAgICAgIGRvX3VzYWdlKCk7DQoJICAgICAgIGJ3X2V4aXQoMyk7DQoJICAg
IH0NCgkgICAgbXNnX21heCA9IGF0b2kob3B0YXJnKTsNCgkgICAgYnJlYWs7
DQoJICAgIA0KCSBjYXNlICd0JzoNCgkgICAgaWYgKG1lICE9IDApIHsNCgkg
ICAgICAgZG9fdXNhZ2UoKTsNCgkgICAgICAgYndfZXhpdCgzKTsNCgkgICAg
fQ0KCSAgICB0Z29hbCA9IGF0b2Yob3B0YXJnKTsNCgkgICAgYnJlYWs7DQoN
CgkgY2FzZSAnVic6DQoJICAgIGlmIChtZSAhPSAwKSB7DQoJICAgICAgIGRv
X3VzYWdlKCk7DQoJICAgICAgIGJ3X2V4aXQoMyk7DQoJICAgIH0NCgkgICAg
cHJpbnRmKCIlc1xuIiwgTU9EVUxFX0lEKTsNCgkgICAgYnJlYWs7DQoNCgkg
Y2FzZSAneic6DQoJICAgIGlmIChtZSAhPSAwKSB7DQoJICAgICAgIGRvX3Vz
YWdlKCk7DQoJICAgICAgIGJ3X2V4aXQoMyk7DQoJICAgIH0NCgkgICAgdG91
Y2hfdHhfaW5pdGlhbGx5ID0gYXRvaShvcHRhcmcpICYgMTsNCgkgICAgdG91
Y2hfdHhfYWx3YXlzICAgID0gYXRvaShvcHRhcmcpICYgMjsNCgkgICAgdG91
Y2hfcnggICAgICAgICAgID0gYXRvaShvcHRhcmcpICYgNDsNCgkgICAgYnJl
YWs7DQoNCgkgZGVmYXVsdDoNCgkgICAgZG9fdXNhZ2UoKTsNCgkgICAgYndf
ZXhpdCgyKTsNCiAgICAgIH0NCiAgIH0NCg0KICAgaWYgKG1lIDwgMCkgew0K
ICAgICAgZG9fdXNhZ2UoKTsNCiAgICAgIGJ3X2V4aXQoMik7DQogICB9DQoN
CiAgIGlmIChtc2dfbWluIDwgMSkNCiAgICAgIG1zZ19taW4gPSAxOw0KDQog
ICBzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOw0K
ICAgaWYgKHNvY2tmZCA8IDApDQogICAgICBid19leGl0KDIpOw0KICAgICAg
DQogICBpZiAobWUgPT0gMCkgew0KICAgICAgc3RydWN0IGhvc3RlbnQgKmhl
bnQ7DQogICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOw0KICAgDQogICAg
ICBoZW50ID0gZ2V0aG9zdGJ5bmFtZShzZXJ2ZXJfbmFtZSk7DQogICAgICBp
ZiAoaGVudCA9PSBOVUxMKSB7DQoJIHByaW50ZigiZ2V0aG9zdGJ5bmFtZSBl
cnJvcjogJXMiLCBoc3RyZXJyb3IoaF9lcnJubykpOw0KCSBid19leGl0KGhf
ZXJybm8pOw0KICAgICAgfQ0KICAgICAgbWVtY3B5KCZzaW4uc2luX2FkZHIs
IGhlbnQtPmhfYWRkcl9saXN0WzBdLCBoZW50LT5oX2xlbmd0aCk7DQogICAg
ICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogICAgICBzaW4uc2luX3Bv
cnQgPSBodG9ucyhQT1JUKTsNCg0KICAgICAgaWYgKGNvbm5lY3Qoc29ja2Zk
LCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpIDwgMCkgew0KCSBwcmludGYoImNvbm5lY3QgZmFpbGVkLCBl
cnJubyA9ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsNCgkgYndfZXhpdChlcnJu
byk7DQogICAgICB9DQogICB9IGVsc2Ugew0KICAgICAgaW50IG5ld2ZkOw0K
ICAgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjsNCiAgICAgIHN0cnVjdCBz
b2NrYWRkcl9pbiBwZWVyYWRkcjsNCiAgICAgIGludCBwZWVyYWRkcl9sZW4g
PSBzaXplb2YocGVlcmFkZHIpOw0KICAgICAgDQogICAgICBpZiAoc2V0c29j
a29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZSwg
c2l6ZW9mKG9uZSkpIDwgMCkNCgkgcHJpbnRmKCJzZXRzb2Nrb3B0IFNPX1JF
VVNFQUREUiBmYWlsZXMhLCBlcnJubyA9ICVzXG4iLCBzdHJlcnJvcihlcnJu
bykpOw0KDQogICAgICBzaW4uc2luX3BvcnQgICAgICAgID0gaHRvbnMoUE9S
VCk7DQogICAgICBzaW4uc2luX2ZhbWlseSAgICAgID0gQUZfSU5FVDsNCiAg
ICAgIHNpbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOw0KDQogICAg
ICBpZiAoYmluZChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNpbiwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgew0KCSBwcmludGYo
ImJpbmQgZmFpbGVkLCBlcnJubyA9ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsN
CgkgYndfZXhpdChlcnJubyk7DQogICAgICB9DQoNCiAgICAgIGlmIChsaXN0
ZW4oc29ja2ZkLCA1KSA8IDApIHsNCgkgcHJpbnRmKCJsaXN0ZW4gZmFpbGVk
LCBlcnJubyA9ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsNCgkgYndfZXhpdChl
cnJubyk7DQogICAgICB9DQoNCiAgICAgIGlmICgobmV3ZmQgPSBhY2NlcHQo
c29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopICZwZWVyYWRkciwgJnBlZXJh
ZGRyX2xlbikpIDwgMCkgew0KCSBwcmludGYoImxpc3RlbiBmYWlsZWQsIGVy
cm5vID0gJXMiLCBzdHJlcnJvcihlcnJubykpOw0KCSBid19leGl0KGVycm5v
KTsNCiAgICAgIH0NCg0KICAgICAgY2xvc2Uoc29ja2ZkKTsNCg0KICAgICAg
c29ja2ZkID0gbmV3ZmQ7DQogICB9DQoNCiAgIHsNCiAgICAgIGNoYXIgKmVu
dnN0cmluZyA9IE5VTEw7DQoNCiAgICAgIGVudnN0cmluZyA9IGdldGVudigi
QlVGU1oiKTsNCiAgICAgIGlmIChlbnZzdHJpbmcpDQogICAgICAgICBidWZz
eiA9IHN0cnRvbChlbnZzdHJpbmcsIE5VTEwsIDApOw0KDQogICAgICBpZiAo
YnVmc3ogPiAwKSB7DQogICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrZmQs
IFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgJmJ1ZnN6LCBzaXplb2YoYnVmc3op
KSA8IDApDQoJICAgIHByaW50Zigic2V0c29ja29wdCBTT19TTkRCVUYgZmFp
bGVkISBlcnJubyA9ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOw0KDQogICAg
ICAgICBpZiAoc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX1JD
VkJVRiwgJmJ1ZnN6LCBzaXplb2YoYnVmc3opKSA8IDApDQoJICAgIHByaW50
Zigic2V0c29ja29wdCBTT19SQ1ZCVUYgZmFpbGVkISBlcnJubyA9ICVzIiwg
c3RyZXJyb3IoZXJybm8pKTsNCiAgICAgIH0NCg0KICAgICAgZW52c3RyaW5n
ID0gZ2V0ZW52KCJOT0RFTEFZIik7DQogICAgICBpZiAoZW52c3RyaW5nKQ0K
ICAgICAgICAgb25lID0gc3RydG9sKGVudnN0cmluZywgTlVMTCwgMCkgJiAx
Ow0KICAgICAgDQogICAgICBpZiAoc2V0c29ja29wdChzb2NrZmQsIFNPTF9U
Q1AsIFRDUF9OT0RFTEFZLCAmb25lLCBzaXplb2Yob25lKSkgPCAwKQ0KCSBw
cmludGYoInNldHNvY2tvcHQgVENQX05PREVMQVkgZmFpbGVkISBlcnJubyA9
ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsNCiAgIH0NCg0KICAgcmV0dXJuIDA7
DQp9DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCmludCBtYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikNCnsNCiAgIGludCBqLCBpbmMsIHN6Ow0K
ICAgZG91YmxlIHQxLCB0MiwgYmVzdF90cmVzOw0KICAgDQogICBpZiAoYndf
aW5pdChhcmdjLCBhcmd2KSAhPSAwKQ0KICAgICAgYndfZXhpdCgzKTsNCiAN
CiAgIC8qIGZpbmQgY2xvY2sgcmVzb2x1dGlvbiAqLw0KICAgZm9yIChqPTAs
IGJlc3RfdHJlcz0xZTY7IGo8MTA7ICsraikgew0KICAgICAgZm9yICh0MT1i
d193dGltZSgpOyAodDI9Yndfd3RpbWUoKSkgPT0gdDE7KTsNCiAgICAgIHQy
ID0gdDIgLSB0MTsNCiAgICAgIA0KICAgICAgYndfc2VuZHJlY3YoJnQyLCAm
dHJlcywgc2l6ZW9mKGRvdWJsZSkpOw0KICAgICAgdHJlcyA9ICh0cmVzICsg
dDIpIC8gMjsNCiAgICAgIGlmICh0cmVzIDwgYmVzdF90cmVzKSBiZXN0X3Ry
ZXM9dHJlczsNCiAgIH0NCiAgIHRyZXMgPSBiZXN0X3RyZXM7DQoNCiAgIGlm
IChtZSA9PSAwKSB7DQogICAgICBpbnQgaW50YVsxNl07DQogICAgICBpbnRh
WzBdID0gdG91Y2hfdHhfaW5pdGlhbGx5Ow0KICAgICAgaW50YVsxXSA9IHRv
dWNoX3R4X2Fsd2F5czsNCiAgICAgIGludGFbMl0gPSB0b3VjaF9yeDsNCiAg
ICAgIGludGFbM10gPSBhbGlnbjsNCiAgICAgIGludGFbNF0gPSBiZW5jaF9t
YXNrOw0KICAgICAgaW50YVs1XSA9IG1zZ19taW47DQogICAgICBpbnRhWzZd
ID0gbXNnX21heDsNCiAgICAgIGJ3X3NlbmQoaW50YSwgNyAqIHNpemVvZihp
bnQpKTsNCiAgICAgIGJ3X3NlbmQoJnRnb2FsLCBzaXplb2YoZG91YmxlKSk7
DQogICB9IGVsc2Ugew0KICAgICAgaW50IGludGFbMTZdOw0KICAgICAgYndf
cmVjdihpbnRhLCA3ICogc2l6ZW9mKGludCkpOw0KICAgICAgYndfcmVjdigm
dGdvYWwsIHNpemVvZihkb3VibGUpKTsNCiAgICAgIHRvdWNoX3R4X2luaXRp
YWxseSA9IGludGFbMF07DQogICAgICB0b3VjaF90eF9hbHdheXMgPSBpbnRh
WzFdOw0KICAgICAgdG91Y2hfcnggPSBpbnRhWzJdOw0KICAgICAgYWxpZ24g
PSBpbnRhWzNdOw0KICAgICAgYmVuY2hfbWFzayA9IGludGFbNF07DQogICAg
ICBtc2dfbWluID0gaW50YVs1XTsNCiAgICAgIG1zZ19tYXggPSBpbnRhWzZd
Ow0KICAgfQ0KICANCiAgIC8qIGlmIG5vIGJlbmNobWFya3MgaGF2ZSBiZWVu
IHNwZWNpZmllZCwgd2UgZGVmYXVsdCB0byBhbGwgKi8NCiAgIGlmICghYmVu
Y2hfbWFzaykgYmVuY2hfbWFzayA9IERPX1BJTkdfUElOR3xET19QSU5HX1BP
Tkd8RE9fRVhDSEFOR0U7DQoNCiAgIGlmIChtZSA9PSAwKQ0KICAgICAgcHJp
bnRmKCJSZXNvbHV0aW9uICh1c2VjKTogJWZcbiIsIHRyZXMqMWU2KTsNCiAg
IA0KICAgZm9yIChqPTA7IGJlbmNoW2pdLmJlbmNoOyArK2opIHsNCg0KICAg
ICAgaWYgKCEoYmVuY2hfbWFzayAmIGJlbmNoW2pdLm1hc2spKSBjb250aW51
ZTsNCgkgIA0KICAgICAgcHJpbnRfaGVhZGVyKGJlbmNoW2pdLm1uZW0pOw0K
ICAgICAgaW5jID0gbXNnX21pbiA+PiAyOw0KICAgICAgZm9yIChzej1tc2df
bWluOyBzeiA8PSBtc2dfbWF4OyBzeis9aW5jKSB7DQoJIGlmIChzeiA8IDQp
IHsNCgkgICAgaW5jID0gMTsNCgkgfSBlbHNlIHsNCgkgICAgaWYgKCEoc3og
JiBpbmMpKSBpbmMrPWluYzsgLyogR290IHRoaXM/ICovDQoJIH0NCg0KCSBt
ZWFzdXJlKGJlbmNoW2pdLmJlbmNoLCBiZW5jaFtqXS5zY2FsZSwgc3opOw0K
ICAgICAgfQ0KICAgICAgaWYgKG1lID09IDApIHByaW50ZigiXG5cbiIpOw0K
ICAgfQ0KDQogICBid19leGl0KDApOw0KDQogICByZXR1cm4gMDsNCn0NCg==
---1463794943-2128730964-1041512801=:18738--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/