[PATCH] Lower timeout in TIME-WAIT state on conntracks

Mikkel Refsgaard Bech mrb@cs.auc.dk
Tue, 9 Apr 2002 15:09:15 +0200 (MEST)


  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.

---559023410-758783491-1018357295=:17595
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.GSO.4.44.0204091501531.17595@bird6.e.cs.auc.dk>

Hi,

This patch provides a new target called LOWTW, which gives the ability to
change the timeout in the TIME-WAIT state on connections in the conntrack
table. It always accept packets.

This is useful when you have a _lot_ of short-lived connections through
your firewall (eg. web traffic), because each conntrack have a timeout of
2 minutes (default, hard-coded) the conntrack table could be filled with
entries in the TIME-WAIT state.

The patch is simple, it just sets the timeout (specified with the
"--lowtw-set n", where n is the timeout in seconds) on the conntrack when
the conntrack enters the TIME-WAIT state.

E.g. to avoid the conntrack table to filled with entries from web traffic
from your LAN do: iptables -A FORWARD -p tcp -source 192.168.0.0/24
--dport 80 -j LOWTW --lowtw-set 10

The patch was tested against 2.4.18.

Any comments, bug-reports or questions are welcome.

Regards
Mikkel, Torben and Carsten
{mrb|mariachi|stiborg}@cs.auc.dk

---559023410-758783491-1018357295=:17595
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=nf-patch
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.44.0204091501350.17595@bird6.e.cs.auc.dk>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME=nf-patch

ZGlmZiAtTnJ1IGlwdGFibGVzLTEuMi42YS9leHRlbnNpb25zL01ha2VmaWxl
IGlwdGFibGVzLWxvd3R3L2V4dGVuc2lvbnMvTWFrZWZpbGUNCi0tLSBpcHRh
Ymxlcy0xLjIuNmEvZXh0ZW5zaW9ucy9NYWtlZmlsZQlUaHUgTWFyIDE0IDEz
OjEzOjQ4IDIwMDINCisrKyBpcHRhYmxlcy1sb3d0dy9leHRlbnNpb25zL01h
a2VmaWxlCUZyaSBNYXIgMjIgMTI6MDA6NDYgMjAwMg0KQEAgLTEsNiArMSw2
IEBADQogIyEgL3Vzci9iaW4vbWFrZQ0KIA0KLVBGX0VYVF9TTElCOj1haCBk
c2NwIGVzcCBpY21wIGxlbmd0aCBsaW1pdCBtYWMgbWFyayBtdWx0aXBvcnQg
b3duZXIgc3RhbmRhcmQgc3RhdGUgdGNwIHRjcG1zcyB0b3MgdHRsIHVkcCB1
bmNsZWFuIEROQVQgRFNDUCBFQ04gTE9HIE1BUksgTUFTUVVFUkFERSBNSVJS
T1IgUkVESVJFQ1QgUkVKRUNUIFNBTUUgU05BVCBUQ1BNU1MgVE9TIFVMT0cN
CitQRl9FWFRfU0xJQjo9YWggZHNjcCBlc3AgaWNtcCBsZW5ndGggbGltaXQg
bWFjIG1hcmsgbXVsdGlwb3J0IG93bmVyIHN0YW5kYXJkIHN0YXRlIHRjcCB0
Y3Btc3MgdG9zIHR0bCB1ZHAgdW5jbGVhbiBETkFUIERTQ1AgRUNOIExPRyBN
QVJLIE1BU1FVRVJBREUgTUlSUk9SIFJFRElSRUNUIFJFSkVDVCBTQU1FIFNO
QVQgVENQTVNTIFRPUyBVTE9HIExPV1RXDQogUEY2X0VYVF9TTElCOj1pY21w
djYgbGVuZ3RoIGxpbWl0IG1hYyBtYXJrIG11bHRpcG9ydCBvd25lciBzdGFu
ZGFyZCB0Y3AgdWRwIExPRyBNQVJLDQogDQogIyBUaGUgZm9sbG93aW5nIG1h
eSBub3QgYmUgcHJlc2VudCwgYnV0IGNvbXBpbGUgdGhlbSBhbnl3YXkuDQpk
aWZmIC1OcnUgaXB0YWJsZXMtMS4yLjZhL2V4dGVuc2lvbnMvbGliaXB0X0xP
V1RXLmMgaXB0YWJsZXMtbG93dHcvZXh0ZW5zaW9ucy9saWJpcHRfTE9XVFcu
Yw0KLS0tIGlwdGFibGVzLTEuMi42YS9leHRlbnNpb25zL2xpYmlwdF9MT1dU
Vy5jCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MA0KKysrIGlwdGFibGVzLWxv
d3R3L2V4dGVuc2lvbnMvbGliaXB0X0xPV1RXLmMJTW9uIEFwciAgOCAxNjow
ODozMyAyMDAyDQpAQCAtMCwwICsxLDEwNiBAQA0KKy8qIFNoYXJlZCBsaWJy
YXJ5IGFkZC1vbiB0byBpcHRhYmxlcyBmb3IgdGhlIExPV1RXIHRhcmdldCAq
Lw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4N
CisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPGdldG9wdC5oPg0K
KyNpbmNsdWRlIDxpcHRhYmxlcy5oPg0KKw0KKyNpbmNsdWRlIDxsaW51eC9u
ZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4NCisjaW5jbHVkZSA8bGludXgv
bmV0ZmlsdGVyX2lwdjQvaXB0X0xPV1RXLmg+DQorDQorLyogdXNlZCBmb3Ig
Yml0bWFzayAqLw0KKyNkZWZpbmUgSVBUX0xPV1RXX1VTRUQJMQ0KKw0KK3N0
YXRpYyB2b2lkIGluaXQoc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQsIHVu
c2lnbmVkIGludCAqbmZjYWNoZSkgDQorew0KK30NCisNCitzdGF0aWMgdm9p
ZCBoZWxwKHZvaWQpIA0KK3sNCisJcHJpbnRmKA0KKyJMT1dUVyB0YXJnZXQg
diVzIG9wdGlvblxuIg0KKyIgIC0tbG93dHctc2V0IHZhbHVlCQlTZXQgVElN
RS1XQUlUIHRpbWVvdXQgdmFsdWUgdG8gPHZhbHVlPlxuIg0KKywgTkVURklM
VEVSX1ZFUlNJT04pOw0KK30NCisNCitzdGF0aWMgaW50IHBhcnNlKGludCBj
LCBjaGFyICoqYXJndiwgaW50IGludmVydCwgdW5zaWduZWQgaW50ICpmbGFn
cywNCisJCWNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmVudHJ5LA0KKwkJc3Ry
dWN0IGlwdF9lbnRyeV90YXJnZXQgKip0YXJnZXQpDQorew0KKwlzdHJ1Y3Qg
aXB0X0xPV1RXX2luZm8gKmluZm8gPSAoc3RydWN0IGlwdF9MT1dUV19pbmZv
ICopICgqdGFyZ2V0KS0+ZGF0YTsNCisJdW5zaWduZWQgaW50IHR3dGltZW91
dDsNCisNCisJaWYgKCpmbGFncyAmIElQVF9MT1dUV19VU0VEKSB7DQorCQll
eGl0X2Vycm9yKFBBUkFNRVRFUl9QUk9CTEVNLCANCisJCQkJIkNhbid0IHNw
ZWNpZnkgTE9XVFcgb3B0aW9uIHR3aWNlIik7DQorCX0NCisNCisJaWYgKCFv
cHRhcmcpIA0KKwkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxFTSwgDQor
CQkJCSJMT1dUVzogWW91IG11c3Qgc3BlY2lmeSBhIHZhbHVlIik7DQorDQor
CWlmIChjaGVja19pbnZlcnNlKG9wdGFyZywgJmludmVydCwgTlVMTCwgMCkp
DQorCQlleGl0X2Vycm9yKFBBUkFNRVRFUl9QUk9CTEVNLA0KKwkJCQkiTE9X
VFc6IHVuZXhwZWN0ZWQgYCEnIik7DQorDQorCWlmIChzdHJpbmdfdG9fbnVt
YmVyKG9wdGFyZywgMCwgMjU1LCAmdHd0aW1lb3V0KSA9PSAtMSkgew0KKwkg
IGV4aXRfZXJyb3IoUEFSQU1FVEVSX1BST0JMRU0sICJCYWQgVE9TIHZhbHVl
IGAlcyciLCBvcHRhcmcpOw0KKwl9DQorDQorCWluZm8tPnR3dGltZW91dCA9
IGF0b2kob3B0YXJnKTsNCisJKmZsYWdzIHw9IElQVF9MT1dUV19VU0VEOw0K
Kw0KKwlyZXR1cm4gMTsNCit9DQorDQorc3RhdGljIHZvaWQgZmluYWxfY2hl
Y2sodW5zaWduZWQgaW50IGZsYWdzKQ0KK3sNCisJaWYgKCEoZmxhZ3MgJiBJ
UFRfTE9XVFdfVVNFRCkpDQorCQlleGl0X2Vycm9yKFBBUkFNRVRFUl9QUk9C
TEVNLA0KKwkJCQkiTE9XVFc6IFlvdSBtdXN0IHNwZWNpZnkgYW4gYWN0aW9u
Iik7DQorfQ0KKw0KKy8qIFNhdmVzIHRoZSB1bmlvbiBpcHRfdGFyZ2luZm8g
aW4gcGFyc2FibGUgZm9ybSB0byBzdGRvdXQuICovDQorc3RhdGljIHZvaWQN
CitzYXZlKGNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwLCBjb25zdCBzdHJ1Y3Qg
aXB0X2VudHJ5X3RhcmdldCAqdGFyZ2V0KQ0KK3sNCisJY29uc3Qgc3RydWN0
IGlwdF9MT1dUV19pbmZvICppbmZvID0NCisJCShjb25zdCBzdHJ1Y3QgaXB0
X0xPV1RXX2luZm8gKil0YXJnZXQtPmRhdGE7DQorDQorCXByaW50ZigiLS1s
b3d0dy1zZXQgJXUgIiwgaW5mby0+dHd0aW1lb3V0KTsNCit9DQorDQorDQor
LyogUHJpbnRzIG91dCB0aGUgdGFyZ2luZm8uICovDQorc3RhdGljIHZvaWQg
cHJpbnQoY29uc3Qgc3RydWN0IGlwdF9pcCAqaXAsDQorCQljb25zdCBzdHJ1
Y3QgaXB0X2VudHJ5X3RhcmdldCAqdGFyZ2V0LCBpbnQgbnVtZXJpYykNCit7
DQorCWNvbnN0IHN0cnVjdCBpcHRfTE9XVFdfaW5mbyAqaW5mbyA9DQorCQko
c3RydWN0IGlwdF9MT1dUV19pbmZvICopIHRhcmdldC0+ZGF0YTsNCisJcHJp
bnRmKCJ0aW1lb3V0ICV1IHNlY3MgIiwgaW5mby0+dHd0aW1lb3V0KTsNCit9
DQorDQorc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0c1tdID0gew0KKwl7ICJs
b3d0dy1zZXQiLCAxLCAwLCAnMScgfSwNCisJeyAwIH0NCit9Ow0KKw0KK3N0
YXRpYw0KK3N0cnVjdCBpcHRhYmxlc190YXJnZXQgTE9XVFcgPSB7IE5VTEws
IA0KKwkiTE9XVFciLA0KKwlORVRGSUxURVJfVkVSU0lPTiwNCisJSVBUX0FM
SUdOKHNpemVvZihzdHJ1Y3QgaXB0X0xPV1RXX2luZm8pKSwNCisJSVBUX0FM
SUdOKHNpemVvZihzdHJ1Y3QgaXB0X0xPV1RXX2luZm8pKSwNCisJJmhlbHAs
DQorCSZpbml0LA0KKwkmcGFyc2UsDQorCSZmaW5hbF9jaGVjaywNCisJJnBy
aW50LA0KKwkmc2F2ZSwNCisJb3B0cyANCit9Ow0KKw0KK3ZvaWQgX2luaXQo
dm9pZCkNCit7DQorCXJlZ2lzdGVyX3RhcmdldCgmTE9XVFcpOw0KK30NCg==
---559023410-758783491-1018357295=:17595
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=kernel-patch
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.44.0204091501351.17595@bird6.e.cs.auc.dk>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME=kernel-patch

ZGlmZiAtTnJ1IGxpbnV4LTIuNC4xOC9pbmNsdWRlL2xpbnV4L25ldGZpbHRl
cl9pcHY0L2lwdF9MT1dUVy5oIGxpbnV4LWxvd3R3L2luY2x1ZGUvbGludXgv
bmV0ZmlsdGVyX2lwdjQvaXB0X0xPV1RXLmgNCi0tLSBsaW51eC0yLjQuMTgv
aW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTE9XVFcuaAlUaHUg
SmFuICAxIDAxOjAwOjAwIDE5NzANCisrKyBsaW51eC1sb3d0dy9pbmNsdWRl
L2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT1dUVy5oCUZyaSBNYXIgMjIg
MTE6NTg6NTMgMjAwMg0KQEAgLTAsMCArMSw1IEBADQorLyogaG9sZCB0aGUg
dGltZW91dCwgdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBib3RoIGJ5IA0KKyAq
IGtlcm5lbCBhbmQgdXNlciBzcGFjZSB0byBjb21tdW5pY2F0ZSAqLw0KK3N0
cnVjdCBpcHRfTE9XVFdfaW5mbyB7DQorICB1X2ludDhfdCB0d3RpbWVvdXQ7
DQorfTsNCmRpZmYgLU5ydSBsaW51eC0yLjQuMTgvbmV0L2lwdjQvbmV0Zmls
dGVyL0NvbmZpZy5pbiBsaW51eC1sb3d0dy9uZXQvaXB2NC9uZXRmaWx0ZXIv
Q29uZmlnLmluDQotLS0gbGludXgtMi40LjE4L25ldC9pcHY0L25ldGZpbHRl
ci9Db25maWcuaW4JTW9uIEZlYiAyNSAyMDozODoxNCAyMDAyDQorKysgbGlu
dXgtbG93dHcvbmV0L2lwdjQvbmV0ZmlsdGVyL0NvbmZpZy5pbglNb24gQXBy
ICA4IDE2OjIxOjE2IDIwMDINCkBAIC03Myw2ICs3Myw3IEBADQogICBpZiBb
ICIkQ09ORklHX0lQX05GX01BTkdMRSIgIT0gIm4iIF07IHRoZW4NCiAgICAg
ZGVwX3RyaXN0YXRlICcgICAgVE9TIHRhcmdldCBzdXBwb3J0JyBDT05GSUdf
SVBfTkZfVEFSR0VUX1RPUyAkQ09ORklHX0lQX05GX01BTkdMRQ0KICAgICBk
ZXBfdHJpc3RhdGUgJyAgICBNQVJLIHRhcmdldCBzdXBwb3J0JyBDT05GSUdf
SVBfTkZfVEFSR0VUX01BUksgJENPTkZJR19JUF9ORl9NQU5HTEUNCisgICAg
ZGVwX3RyaXN0YXRlICcgICAgTE9XVFcgdGFyZ2V0IHN1cHBvcnQnIENPTkZJ
R19JUF9ORl9UQVJHRVRfTE9XVFcgJENPTkZJR19JUF9ORl9JUFRBQkxFUw0K
ICAgZmkNCiAgIGRlcF90cmlzdGF0ZSAnICBMT0cgdGFyZ2V0IHN1cHBvcnQn
IENPTkZJR19JUF9ORl9UQVJHRVRfTE9HICRDT05GSUdfSVBfTkZfSVBUQUJM
RVMNCiAgIGlmIFsgIiRDT05GSUdfTkVUTElOSyIgIT0gIm4iIF07IHRoZW4N
CmRpZmYgLU5ydSBsaW51eC0yLjQuMTgvbmV0L2lwdjQvbmV0ZmlsdGVyL01h
a2VmaWxlIGxpbnV4LWxvd3R3L25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmls
ZQ0KLS0tIGxpbnV4LTIuNC4xOC9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZp
bGUJTW9uIEZlYiAyNSAyMDozODoxNCAyMDAyDQorKysgbGludXgtbG93dHcv
bmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCU1vbiBBcHIgIDggMTY6MjY6
MDggMjAwMg0KQEAgLTc2LDYgKzc2LDcgQEANCiBvYmotJChDT05GSUdfSVBf
TkZfVEFSR0VUX0xPRykgKz0gaXB0X0xPRy5vDQogb2JqLSQoQ09ORklHX0lQ
X05GX1RBUkdFVF9VTE9HKSArPSBpcHRfVUxPRy5vDQogb2JqLSQoQ09ORklH
X0lQX05GX1RBUkdFVF9UQ1BNU1MpICs9IGlwdF9UQ1BNU1Mubw0KK29iai0k
KENPTkZJR19JUF9ORl9UQVJHRVRfTE9XVFcpICs9IGlwdF9MT1dUVy5vDQog
DQogIyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSANCiBvYmotJChDT05GSUdf
SVBfTkZfQ09NUEFUX0lQQ0hBSU5TKSArPSBpcGNoYWlucy5vDQpkaWZmIC1O
cnUgbGludXgtMi40LjE4L25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9XVFcu
YyBsaW51eC1sb3d0dy9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPV1RXLmMN
Ci0tLSBsaW51eC0yLjQuMTgvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT1dU
Vy5jCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MA0KKysrIGxpbnV4LWxvd3R3
L25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9XVFcuYwlNb24gQXByICA4IDE0
OjQ2OjMxIDIwMDINCkBAIC0wLDAgKzEsNzEgQEANCisvKiBMT1dUVy4gTG93
IFRJTUUtV0FJVCB0aW1lb3V0IG9uIGNvbm50cmFja3MuICovDQorI2luY2x1
ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lwLmg+DQor
I2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L21v
ZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4NCisjaW5j
bHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lm
Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4NCisjaW5jbHVk
ZSA8bmV0L3Byb3RvY29sLmg+DQorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5o
Pg0KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPg0KKyNpbmNs
dWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTE9XVFcuaD4NCisjaW5j
bHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3J1bGUuaD4NCisN
CisjaWYgMA0KKyNkZWZpbmUgREVCVUdQIHByaW50aw0KKyNlbHNlDQorI2Rl
ZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQ0KKyNlbmRpZg0KKw0KK3N0
YXRpYyBpbnQNCitsb3d0d19jaGVjayhjb25zdCBjaGFyICp0YWJsZW5hbWUs
DQorCSAgICAgICBjb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplLA0KKwkgICAg
ICAgdm9pZCAqdGFyZ2luZm8sDQorCSAgICAgICB1bnNpZ25lZCBpbnQgdGFy
Z2luZm9zaXplLA0KKwkgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykN
Cit7DQorCXJldHVybiAxOw0KK30NCisNCitzdGF0aWMgdW5zaWduZWQgaW50
DQorbG93dHdfdGFyZ2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwNCisJCXVu
c2lnbmVkIGludCBob29rbnVtLA0KKwkJY29uc3Qgc3RydWN0IG5ldF9kZXZp
Y2UgKmluLA0KKwkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwNCisJ
CWNvbnN0IHZvaWQgKnRhcmdpbmZvLA0KKwkJdm9pZCAqdXNlcmluZm8pDQor
eyANCisgICAgICAgIC8qIHRoaXMgaG9sZHMgdGhlIHRpbWVvdXQgc3BlY2lm
aWVkIG9uIHRoZSBjbWQtbGluZSAqLw0KKwljb25zdCBzdHJ1Y3QgaXB0X0xP
V1RXX2luZm8gKmluZm8gPSB0YXJnaW5mbzsNCisJc3RydWN0IGlwX2Nvbm50
cmFjayAqY3Q7DQorCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOw0K
KwkvKiBmaW5kIHRoZSByZWxhdmFudCBjb25udHJhY2sgKi8NCisJY3QgPSBp
cF9jb25udHJhY2tfZ2V0KCpwc2tiLCAmY3RpbmZvKTsNCisJLyogaWYgaXQg
aXMgaW4gdGhlIFRXIHN0YXRlICovDQorCWlmIChjdC0+cHJvdG8udGNwLnN0
YXRlID09IFRDUF9DT05OVFJBQ0tfVElNRV9XQUlUKSB7IA0KKwkgIC8qIHRo
ZW4gc2V0IHRoZSB0aW1lb3V0ICovDQorCSAgaXBfY3RfcmVmcmVzaChjdCwg
aW5mby0+dHd0aW1lb3V0ICogSFopOw0KKwkgIC8qIHByaW50aygiVFcgdGlt
ZW91dCAlaSBzZWNzXG4iLCBpbmZvLT50d3RpbWVvdXQpOyAqLw0KKwl9IA0K
KwlyZXR1cm4gSVBUX0NPTlRJTlVFOw0KK30NCisNCitzdGF0aWMgc3RydWN0
IGlwdF90YXJnZXQgbG93dHdfcmVnDQorPSB7IHsgTlVMTCwgTlVMTCB9LCAi
TE9XVFciLCBsb3d0d190YXJnZXQsIGxvd3R3X2NoZWNrLCBOVUxMLA0KKyAg
ICBUSElTX01PRFVMRSB9Ow0KKw0KK3N0YXRpYyBpbnQgX19pbml0IGluaXQo
dm9pZCkNCit7DQorCXJldHVybiBpcHRfcmVnaXN0ZXJfdGFyZ2V0KCZsb3d0
d19yZWcpOw0KK30NCisNCitzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lk
KQ0KK3sNCisJaXB0X3VucmVnaXN0ZXJfdGFyZ2V0KCZsb3d0d19yZWcpOw0K
K30NCisNCittb2R1bGVfaW5pdChpbml0KTsNCittb2R1bGVfZXhpdChmaW5p
KTsNCitNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo=
---559023410-758783491-1018357295=:17595--