Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Apr 2005 15:31:50 +0100 (BST)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        performance@FreeBSD.org
Subject:   Memory allocation performance/statistics patches
Message-ID:  <20050417134448.L85588@fledge.watson.org>

next in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-136826264-1113748310=:85588
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed


Attached please find three patches:

(1) uma.diff, which modifies the UMA slab allocator to use critical
     sections instead of mutexes to protect per-CPU caches.

(2) malloc.diff, which modifies the malloc memory allocator to use
     critical sections and per-CPU data instead of mutexes to store
     per-malloc-type statistics, coalescing for the purposes of the sysctl
     used to generate vmstat -m output.

(3) mbuf.diff, which modifies the mbuf allocator to use per-CPU data and
     critical sections for statistics, instead of synchronization-free
     statistics which could result in substantial inconsistency on SMP
     systems.

These changes are facilitated by John Baldwin's recent re-introduction of 
critical section optimizations that permit critical sections to be 
implemented "in software", rather than using the hardware interrupt 
disable mechanism, which is quite expensive on modern processors 
(especially Xeon P4 CPUs).  While not identical, this is similar to the 
softspl behavior in 4.x, and Linux's preemption disable mechanisms (and 
various other post-Vax systems :-)).

The reason this is interesting is that it allows synchronization of 
per-CPU data to be performed at a much lower cost than previously, and 
consistently across UP and SMP systems.  Prior to these changes, the use 
of critical sections and per-CPU data as an alternative to mutexes would 
lead to an improvement on SMP, but not on UP.  So, that said, here's what 
I'd like us to look at:

- Patches (1) and (2) are intended to improve performance by reducing the
   overhead of maintaining cache consistency and statistics for UMA and
   malloc(9), and may universally impact performance (in a small way) due
   to the breadth of their use through the kernel.

- Patch (3) is intended to restore consistency to statistics in the
   presence of SMP and preemption, at the possible cost of some
   performance.

I'd like to confirm that for the first two patches, for interesting 
workloads, performance generally improves, and that stability doesn't 
degrade.  For the third partch, I'd like to quantify the cost of the 
changes for interesting workloads, and likewise confirm no loss of 
stability.

Because these will have a relatively small impact, a fair amount of 
caution is required in testing.  We may be talking about a percent or two, 
maybe four, difference in benchmark performance, and many benchmarks have 
a higher variance than that.

A couple of observations for those interested:

- The INVARIANTS panic with UMA seen in some earlier patch versions is
   believed to be corrected.

- Right now, because I use arrays of foo[MAXCPUS], I'm concerned that
   different CPUs will be writing to the same cache line as they're
   adjacent in memory.  Moving to per-CPU chunks of memory to hold this
   stuff is desirable, but I think first we need to identify a model by
   which to do that cleanly.  I'm not currently enamored of the 'struct
   pcpu' model, since it makes us very sensitive to ABI changes, as well as
   not offering a model by which modules can register new per-cpu data
   cleanly.  I'm also inconsistent about how I dereference into the arrays,
   and intend to move to using 'curcpu' throughout.

- Because mutexes are no longer used in UMA, and not for the others
   either, stats read across different CPUs that are coalesced may be
   slightly inconsistent.  I'm not all that concerned about it, but it's
   worth thinking on.

- Malloc stats for realloc() are still broken if you apply this patch.

- High watermarks are no longer maintained for malloc since they require a
   global notion of "high" that is tracked continuously (i.e., at each
   change), and there's no longer a global view except when the observer
   kicks in (sysctl).  You can imagine various models to restore some
   notion of a high watermark, but I'm not currently sure which is the
   best.  The high watermark notion is desirable though.

So this is a request for:

(1) Stability testing of these patches.  Put them on a machine, make them
     hurt.  If things go South, try applying the patches one by one until
     it's clear which is the source.

(2) Performance testing of these patches.  Subject to the challenges in
     testing them.  If you are interested, please test each patch
     separately to evaluate its impact on your system.  Then apply all
     together and see how it evens out.  You may find that the mbuf
     allocator patch outweighs the benefits of the other two patches, if
     so, that is interesting and something to work on!

I've done some micro-benchmarking using tools like netblast, 
syscall_timing, etc, but I'm interested particularly in the impact on 
macrobenchmarks.

Thanks!

Robert N M Watson
--0-136826264-1113748310=:85588
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=uma.diff
Content-Transfer-Encoding: BASE64
Content-ID: <20050417153150.I85588@fledge.watson.org>
Content-Description: 
Content-Disposition: attachment; filename=uma.diff

LS0tIC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3N5cy92bS91bWFfY29y
ZS5jCTIwMDUvMDIvMjQgMDY6MzA6MzYNCisrKyAvL2RlcG90L3VzZXIvcndh
dHNvbi9wZXJjcHUvc3lzL3ZtL3VtYV9jb3JlLmMJMjAwNS8wNC8wNiAxMDoz
MzowMg0KQEAgLTEsNCArMSw1IEBADQogLyotDQorICogQ29weXJpZ2h0IChj
KSAyMDA0LTIwMDUgUm9iZXJ0IE4uIE0uIFdhdHNvbg0KICAqIENvcHlyaWdo
dCAoYykgMjAwNCwgMjAwNSwNCiAgKiAgICAgQm9za28gTWlsZWtpYyA8Ym1p
bGVraWNARnJlZUJTRC5vcmc+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAg
KiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsDQpAQCAt
MTE5LDkgKzEyMCw2IEBADQogLyogVGhpcyBtdXRleCBwcm90ZWN0cyB0aGUg
a2VnIGxpc3QgKi8NCiBzdGF0aWMgc3RydWN0IG10eCB1bWFfbXR4Ow0KIA0K
LS8qIFRoZXNlIGFyZSB0aGUgcGNwdSBjYWNoZSBsb2NrcyAqLw0KLXN0YXRp
YyBzdHJ1Y3QgbXR4IHVtYV9wY3B1X210eFtNQVhDUFVdOw0KLQ0KIC8qIExp
bmtlZCBsaXN0IG9mIGJvb3QgdGltZSBwYWdlcyAqLw0KIHN0YXRpYyBMSVNU
X0hFQUQoLHVtYV9zbGFiKSB1bWFfYm9vdF9wYWdlcyA9DQogICAgIExJU1Rf
SEVBRF9JTklUSUFMSVpFUigmdW1hX2Jvb3RfcGFnZXMpOw0KQEAgLTM4NCw0
OCArMzgyLDE5IEBADQogem9uZV90aW1lb3V0KHVtYV96b25lX3Qgem9uZSkN
CiB7DQogCXVtYV9rZWdfdCBrZWc7DQotCXVtYV9jYWNoZV90IGNhY2hlOw0K
IAl1X2ludDY0X3QgYWxsb2M7DQotCWludCBjcHU7DQogDQogCWtlZyA9IHpv
bmUtPnV6X2tlZzsNCiAJYWxsb2MgPSAwOw0KIA0KIAkvKg0KLQkgKiBBZ2dy
ZWdhdGUgcGVyIGNwdSBjYWNoZSBzdGF0aXN0aWNzIGJhY2sgdG8gdGhlIHpv
bmUuDQotCSAqDQotCSAqIFhYWCBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRo
ZSBzeXNjdGwgaGFuZGxlci4NCi0JICoNCi0JICogSSBtYXkgcmV3cml0ZSB0
aGlzIHRvIHNldCBhIGZsYWcgaW4gdGhlIHBlciBjcHUgY2FjaGUgaW5zdGVh
ZCBvZg0KLQkgKiBsb2NraW5nLiAgSWYgdGhlIGZsYWcgaXMgbm90IGNsZWFy
ZWQgb24gdGhlIG5leHQgcm91bmQgSSB3aWxsIGhhdmUNCi0JICogdG8gbG9j
ayBhbmQgZG8gaXQgaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIHN0YXRpc3Rp
Y3MgZG9uJ3QgZ2V0IHRvbw0KLQkgKiBmYXIgb3V0IG9mIHN5bmMuDQotCSAq
Lw0KLQlpZiAoIShrZWctPnVrX2ZsYWdzICYgVU1BX1pGTEFHX0lOVEVSTkFM
KSkgew0KLQkJZm9yIChjcHUgPSAwOyBjcHUgPD0gbXBfbWF4aWQ7IGNwdSsr
KSB7DQotCQkJaWYgKENQVV9BQlNFTlQoY3B1KSkNCi0JCQkJY29udGludWU7
DQotCQkJQ1BVX0xPQ0soY3B1KTsNCi0JCQljYWNoZSA9ICZ6b25lLT51el9j
cHVbY3B1XTsNCi0JCQkvKiBBZGQgdGhlbSB1cCwgYW5kIHJlc2V0ICovDQot
CQkJYWxsb2MgKz0gY2FjaGUtPnVjX2FsbG9jczsNCi0JCQljYWNoZS0+dWNf
YWxsb2NzID0gMDsNCi0JCQlDUFVfVU5MT0NLKGNwdSk7DQotCQl9DQotCX0N
Ci0NCi0JLyogTm93IHB1c2ggdGhlc2Ugc3RhdHMgYmFjayBpbnRvIHRoZSB6
b25lLi4gKi8NCi0JWk9ORV9MT0NLKHpvbmUpOw0KLQl6b25lLT51el9hbGxv
Y3MgKz0gYWxsb2M7DQotDQotCS8qDQogCSAqIEV4cGFuZCB0aGUgem9uZSBo
YXNoIHRhYmxlLg0KIAkgKg0KIAkgKiBUaGlzIGlzIGRvbmUgaWYgdGhlIG51
bWJlciBvZiBzbGFicyBpcyBsYXJnZXIgdGhhbiB0aGUgaGFzaCBzaXplLg0K
IAkgKiBXaGF0IEknbSB0cnlpbmcgdG8gZG8gaGVyZSBpcyBjb21wbGV0ZWx5
IHJlZHVjZSBjb2xsaXNpb25zLiAgVGhpcw0KIAkgKiBtYXkgYmUgYSBsaXR0
bGUgYWdncmVzc2l2ZS4gIFNob3VsZCBJIGFsbG93IGZvciB0d28gY29sbGlz
aW9ucyBtYXg/DQogCSAqLw0KLQ0KKwlaT05FX0xPQ0soem9uZSk7DQogCWlm
IChrZWctPnVrX2ZsYWdzICYgVU1BX1pPTkVfSEFTSCAmJg0KIAkgICAga2Vn
LT51a19wYWdlcyAvIGtlZy0+dWtfcHBlcmEgPj0ga2VnLT51a19oYXNoLnVo
X2hhc2hzaXplKSB7DQogCQlzdHJ1Y3QgdW1hX2hhc2ggbmV3aGFzaDsNCkBA
IC02MTMsNiArNTgyLDEwIEBADQogLyoNCiAgKiBEcmFpbnMgdGhlIHBlciBj
cHUgY2FjaGVzIGZvciBhIHpvbmUuDQogICoNCisgKiBOT1RFOiBUaGlzIG1h
eSBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgem9uZSBpcyBiZWluZyB0dXJu
IGRvd24sIGFuZCBub3QNCisgKiBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4g
IFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRoYXQgd2UgZG8gbm90IGhh
dmUNCisgKiB0byBtaWdyYXRlIENQVXMgdG8gZHJhaW4gdGhlIHBlci1DUFUg
Y2FjaGVzLg0KKyAqDQogICogQXJndW1lbnRzOg0KICAqCXpvbmUgICAgIFRo
ZSB6b25lIHRvIGRyYWluLCBtdXN0IGJlIHVubG9ja2VkLg0KICAqDQpAQCAt
NjI2LDEyICs1OTksMjAgQEANCiAJaW50IGNwdTsNCiANCiAJLyoNCi0JICog
V2UgaGF2ZSB0byBsb2NrIGVhY2ggY3B1IGNhY2hlIGJlZm9yZSBsb2NraW5n
IHRoZSB6b25lDQorCSAqIFhYWDogSXQgaXMgc2FmZSB0byBub3QgbG9jayB0
aGUgcGVyLUNQVSBjYWNoZXMsIGJlY2F1c2Ugd2UncmUNCisJICogdGVhcmlu
ZyBkb3duIHRoZSB6b25lIGFueXdheS4gIEkuZS4sIHRoZXJlIHdpbGwgYmUg
bm8gZnVydGhlciB1c2UNCisJICogb2YgdGhlIGNhY2hlcyBhdCB0aGlzIHBv
aW50Lg0KKwkgKg0KKwkgKiBYWFg6IEl0IHdvdWxkIGdvb2QgdG8gYmUgYWJs
ZSB0byBhc3NlcnQgdGhhdCB0aGUgem9uZSBpcyBiZWluZw0KKwkgKiB0b3Ju
IGRvd24gdG8gcHJldmVudCBpbXByb3BlciB1c2Ugb2YgY2FjaGVfZHJhaW4o
KS4NCisJICoNCisJICogWFhYOiBXZSBsb2NrIHRoZSB6b25lIGJlZm9yZSBw
YXNzaW5nIGludG8gYnVja2V0X2NhY2hlX2RyYWluKCkgYXMNCisJICogaXQg
aXMgdXNlZCBlbHNld2hlcmUuICBTaG91bGQgdGhlIHRlYXItZG93biBwYXRo
IGJlIG1hZGUgc3BlY2lhbA0KKwkgKiB0aGVyZSBpbiBzb21lIGZvcm0/DQog
CSAqLw0KIAlmb3IgKGNwdSA9IDA7IGNwdSA8PSBtcF9tYXhpZDsgY3B1Kysp
IHsNCiAJCWlmIChDUFVfQUJTRU5UKGNwdSkpDQogCQkJY29udGludWU7DQot
CQlDUFVfTE9DSyhjcHUpOw0KIAkJY2FjaGUgPSAmem9uZS0+dXpfY3B1W2Nw
dV07DQogCQlidWNrZXRfZHJhaW4oem9uZSwgY2FjaGUtPnVjX2FsbG9jYnVj
a2V0KTsNCiAJCWJ1Y2tldF9kcmFpbih6b25lLCBjYWNoZS0+dWNfZnJlZWJ1
Y2tldCk7DQpAQCAtNjQ0LDExICs2MjUsNiBAQA0KIAlaT05FX0xPQ0soem9u
ZSk7DQogCWJ1Y2tldF9jYWNoZV9kcmFpbih6b25lKTsNCiAJWk9ORV9VTkxP
Q0soem9uZSk7DQotCWZvciAoY3B1ID0gMDsgY3B1IDw9IG1wX21heGlkOyBj
cHUrKykgew0KLQkJaWYgKENQVV9BQlNFTlQoY3B1KSkNCi0JCQljb250aW51
ZTsNCi0JCUNQVV9VTkxPQ0soY3B1KTsNCi0JfQ0KIH0NCiANCiAvKg0KQEAg
LTgyOCw3ICs4MDQsOCBAQA0KIAkgICAgJmZsYWdzLCB3YWl0KTsNCiAJaWYg
KG1lbSA9PSBOVUxMKSB7DQogCQlpZiAoa2VnLT51a19mbGFncyAmIFVNQV9a
T05FX09GRlBBR0UpDQotCQkJdW1hX3pmcmVlX2ludGVybmFsKGtlZy0+dWtf
c2xhYnpvbmUsIHNsYWIsIE5VTEwsIDApOw0KKwkJCXVtYV96ZnJlZV9pbnRl
cm5hbChrZWctPnVrX3NsYWJ6b25lLCBzbGFiLCBOVUxMLA0KKwkJCSAgICBT
S0lQX05PTkUpOw0KIAkJWk9ORV9MT0NLKHpvbmUpOw0KIAkJcmV0dXJuIChO
VUxMKTsNCiAJfQ0KQEAgLTE2NDMsMTAgKzE2MjAsNiBAQA0KICNpZmRlZiBV
TUFfREVCVUcNCiAJcHJpbnRmKCJJbml0aWFsaXppbmcgcGNwdSBjYWNoZSBs
b2Nrcy5cbiIpOw0KICNlbmRpZg0KLQkvKiBJbml0aWFsaXplIHRoZSBwY3B1
IGNhY2hlIGxvY2sgc2V0IG9uY2UgYW5kIGZvciBhbGwgKi8NCi0JZm9yIChp
ID0gMDsgaSA8PSBtcF9tYXhpZDsgaSsrKQ0KLQkJQ1BVX0xPQ0tfSU5JVChp
KTsNCi0NCiAjaWZkZWYgVU1BX0RFQlVHDQogCXByaW50ZigiQ3JlYXRpbmcg
c2xhYiBhbmQgaGFzaCB6b25lcy5cbiIpOw0KICNlbmRpZg0KQEAgLTE3OTMs
NiArMTc2Niw5IEBADQogCXVtYV9jYWNoZV90IGNhY2hlOw0KIAl1bWFfYnVj
a2V0X3QgYnVja2V0Ow0KIAlpbnQgY3B1Ow0KKyNpZmRlZiBJTlZBUklBTlRT
DQorCWludCBjb3VudDsNCisjZW5kaWYNCiAJaW50IGJhZG5lc3M7DQogDQog
CS8qIFRoaXMgaXMgdGhlIGZhc3QgcGF0aCBhbGxvY2F0aW9uICovDQpAQCAt
MTgyNywxMiArMTgwMywzMyBAQA0KIAkJfQ0KIAl9DQogDQorCS8qDQorCSAq
IElmIHBvc3NpYmxlLCBhbGxvY2F0ZSBmcm9tIHRoZSBwZXItQ1BVIGNhY2hl
LiAgVGhlcmUgYXJlIHR3bw0KKwkgKiByZXF1aXJlbWVudHMgZm9yIHNhZmUg
YWNjZXNzIHRvIHRoZSBwZXItQ1BVIGNhY2hlOiAoMSkgdGhlIHRocmVhZA0K
KwkgKiBhY2Nlc3NpbmcgdGhlIGNhY2hlIG11c3Qgbm90IGJlIHByZWVtcHRl
ZCBvciB5aWVsZCBkdXJpbmcgYWNjZXNzLA0KKwkgKiBhbmQgKDIpIHRoZSB0
aHJlYWQgbXVzdCBub3QgbWlncmF0ZSBDUFVzIHdpdGhvdXQgc3dpdGNoaW5n
IHdoaWNoDQorCSAqIGNhY2hlIGl0IGFjY2Vzc2VzLiAgV2UgcmVseSBvbiBh
IGNyaXRpY2FsIHNlY3Rpb24gdG8gcHJldmVudA0KKwkgKiBwcmVlbXB0aW9u
IGFuZCBtaWdyYXRpb24uICBXZSByZWxlYXNlIHRoZSBjcml0aWNhbCBzZWN0
aW9uIGluDQorCSAqIG9yZGVyIHRvIGFjcXVpcmUgdGhlIHpvbmUgbXV0ZXgg
aWYgd2UgYXJlIHVuYWJsZSB0byBhbGxvY2F0ZSBmcm9tDQorCSAqIHRoZSBj
dXJyZW50IGNhY2hlOyB3aGVuIHdlIHJlLWFjcXVpcmUgdGhlIGNyaXRpY2Fs
IHNlY3Rpb24sIHdlDQorCSAqIG11c3QgZGV0ZWN0IGFuZCBoYW5kbGUgbWln
cmF0aW9uIGlmIGl0IGhhcyBvY2N1cnJlZC4NCisJICovDQorI2lmZGVmIElO
VkFSSUFOVFMNCisJY291bnQgPSAwOw0KKyNlbmRpZg0KIHphbGxvY19yZXN0
YXJ0Og0KKwljcml0aWNhbF9lbnRlcigpOw0KIAljcHUgPSBQQ1BVX0dFVChj
cHVpZCk7DQotCUNQVV9MT0NLKGNwdSk7DQogCWNhY2hlID0gJnpvbmUtPnV6
X2NwdVtjcHVdOw0KIA0KIHphbGxvY19zdGFydDoNCisjaWZkZWYgSU5WQVJJ
QU5UUw0KKwljb3VudCsrOw0KKwlLQVNTRVJUKGNvdW50IDwgMTAsICgidW1h
X3phbGxvY19hcmc6IGNvdW50ID09IDEwIikpOw0KKyNlbmRpZg0KKyNpZiAw
DQorCWNyaXRpY2FsX2Fzc2VydCgpOw0KKyNlbmRpZg0KIAlidWNrZXQgPSBj
YWNoZS0+dWNfYWxsb2NidWNrZXQ7DQogDQogCWlmIChidWNrZXQpIHsNCkBA
IC0xODQ1LDEyICsxODQyLDEyIEBADQogCQkJS0FTU0VSVChpdGVtICE9IE5V
TEwsDQogCQkJICAgICgidW1hX3phbGxvYzogQnVja2V0IHBvaW50ZXIgbWFu
Z2xlZC4iKSk7DQogCQkJY2FjaGUtPnVjX2FsbG9jcysrOw0KKwkJCWNyaXRp
Y2FsX2V4aXQoKTsNCiAjaWZkZWYgSU5WQVJJQU5UUw0KIAkJCVpPTkVfTE9D
Syh6b25lKTsNCiAJCQl1bWFfZGJnX2FsbG9jKHpvbmUsIE5VTEwsIGl0ZW0p
Ow0KIAkJCVpPTkVfVU5MT0NLKHpvbmUpOw0KICNlbmRpZg0KLQkJCUNQVV9V
TkxPQ0soY3B1KTsNCiAJCQlpZiAoem9uZS0+dXpfY3RvciAhPSBOVUxMKSB7
DQogCQkJCWlmICh6b25lLT51el9jdG9yKGl0ZW0sIHpvbmUtPnV6X2tlZy0+
dWtfc2l6ZSwNCiAJCQkJICAgIHVkYXRhLCBmbGFncykgIT0gMCkgew0KQEAg
LTE4ODAsNyArMTg3NywzMyBAQA0KIAkJCX0NCiAJCX0NCiAJfQ0KKwkvKg0K
KwkgKiBBdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBpdGVtIGZyb20gdGhlIHBl
ci1DUFUgY2FjaGUgaGFzIGZhaWxlZCwgc28NCisJICogd2UgbXVzdCBnbyBi
YWNrIHRvIHRoZSB6b25lLiAgVGhpcyByZXF1aXJlcyB0aGUgem9uZSBsb2Nr
LCBzbyB3ZQ0KKwkgKiBtdXN0IGRyb3AgdGhlIGNyaXRpY2FsIHNlY3Rpb24s
IHRoZW4gcmUtYWNxdWlyZSBpdCB3aGVuIHdlIGdvIGJhY2sNCisJICogdG8g
dGhlIGNhY2hlLiAgU2luY2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgcmVs
ZWFzZWQsIHdlIG1heSBiZQ0KKwkgKiBwcmVlbXB0ZWQgb3IgbWlncmF0ZS4g
IEFzIHN1Y2gsIG1ha2Ugc3VyZSBub3QgdG8gbWFpbnRhaW4gYW55DQorCSAq
IHRocmVhZC1sb2NhbCBzdGF0ZSBzcGVjaWZpYyB0byB0aGUgY2FjaGUgZnJv
bSBwcmlvciB0byByZWxlYXNpbmcNCisJICogdGhlIGNyaXRpY2FsIHNlY3Rp
b24uDQorCSAqLw0KKwljcml0aWNhbF9leGl0KCk7DQogCVpPTkVfTE9DSyh6
b25lKTsNCisJY3JpdGljYWxfZW50ZXIoKTsNCisJY3B1ID0gUENQVV9HRVQo
Y3B1aWQpOw0KKwljYWNoZSA9ICZ6b25lLT51el9jcHVbY3B1XTsNCisJYnVj
a2V0ID0gY2FjaGUtPnVjX2FsbG9jYnVja2V0Ow0KKwlpZiAoYnVja2V0ICE9
IE5VTEwpIHsNCisJCWlmIChidWNrZXQgIT0gTlVMTCAmJiBidWNrZXQtPnVi
X2NudCA+IDApIHsNCisJCQlaT05FX1VOTE9DSyh6b25lKTsNCisJCQlnb3Rv
IHphbGxvY19zdGFydDsNCisJCX0NCisJCWJ1Y2tldCA9IGNhY2hlLT51Y19m
cmVlYnVja2V0Ow0KKwkJaWYgKGJ1Y2tldCAhPSBOVUxMICYmIGJ1Y2tldC0+
dWJfY250ID4gMCkgew0KKwkJCVpPTkVfVU5MT0NLKHpvbmUpOw0KKwkJCWdv
dG8gemFsbG9jX3N0YXJ0Ow0KKwkJfQ0KKwl9DQorDQogCS8qIFNpbmNlIHdl
IGhhdmUgbG9ja2VkIHRoZSB6b25lIHdlIG1heSBhcyB3ZWxsIHNlbmQgYmFj
ayBvdXIgc3RhdHMgKi8NCiAJem9uZS0+dXpfYWxsb2NzICs9IGNhY2hlLT51
Y19hbGxvY3M7DQogCWNhY2hlLT51Y19hbGxvY3MgPSAwOw0KQEAgLTE5MDQs
OCArMTkyNyw4IEBADQogCQlaT05FX1VOTE9DSyh6b25lKTsNCiAJCWdvdG8g
emFsbG9jX3N0YXJ0Ow0KIAl9DQotCS8qIFdlIGFyZSBubyBsb25nZXIgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgY3B1ISEhICovDQotCUNQVV9VTkxPQ0soY3B1
KTsNCisJLyogV2UgYXJlIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggdGhp
cyBDUFUuICovDQorCWNyaXRpY2FsX2V4aXQoKTsNCiANCiAJLyogQnVtcCB1
cCBvdXIgdXpfY291bnQgc28gd2UgZ2V0IGhlcmUgbGVzcyAqLw0KIAlpZiAo
em9uZS0+dXpfY291bnQgPCBCVUNLRVRfTUFYKQ0KQEAgLTIyMjgsMTAgKzIy
NTEsMTAgQEANCiAJdW1hX2J1Y2tldF90IGJ1Y2tldDsNCiAJaW50IGJmbGFn
czsNCiAJaW50IGNwdTsNCi0JZW51bSB6ZnJlZXNraXAgc2tpcDsNCisjaWZk
ZWYgSU5WQVJJQU5UUw0KKwlpbnQgY291bnQ7DQorI2VuZGlmDQogDQotCS8q
IFRoaXMgaXMgdGhlIGZhc3QgcGF0aCBmcmVlICovDQotCXNraXAgPSBTS0lQ
X05PTkU7DQogCWtlZyA9IHpvbmUtPnV6X2tlZzsNCiANCiAjaWZkZWYgVU1B
X0RFQlVHX0FMTE9DXzENCkBAIC0yMjQwLDI1ICsyMjYzLDUwIEBADQogCUNU
UjIoS1RSX1VNQSwgInVtYV96ZnJlZV9hcmcgdGhyZWFkICV4IHpvbmUgJXMi
LCBjdXJ0aHJlYWQsDQogCSAgICB6b25lLT51el9uYW1lKTsNCiANCisJaWYg
KHpvbmUtPnV6X2R0b3IpDQorCQl6b25lLT51el9kdG9yKGl0ZW0sIGtlZy0+
dWtfc2l6ZSwgdWRhdGEpOw0KKyNpZmRlZiBJTlZBUklBTlRTDQorCVpPTkVf
TE9DSyh6b25lKTsNCisJaWYgKGtlZy0+dWtfZmxhZ3MgJiBVTUFfWk9ORV9N
QUxMT0MpDQorCQl1bWFfZGJnX2ZyZWUoem9uZSwgdWRhdGEsIGl0ZW0pOw0K
KwllbHNlDQorCQl1bWFfZGJnX2ZyZWUoem9uZSwgTlVMTCwgaXRlbSk7DQor
CVpPTkVfVU5MT0NLKHpvbmUpOw0KKyNlbmRpZg0KIAkvKg0KIAkgKiBUaGUg
cmFjZSBoZXJlIGlzIGFjY2VwdGFibGUuICBJZiB3ZSBtaXNzIGl0IHdlJ2xs
IGp1c3QgaGF2ZSB0byB3YWl0DQogCSAqIGEgbGl0dGxlIGxvbmdlciBmb3Ig
dGhlIGxpbWl0cyB0byBiZSByZXNldC4NCiAJICovDQotDQogCWlmIChrZWct
PnVrX2ZsYWdzICYgVU1BX1pGTEFHX0ZVTEwpDQogCQlnb3RvIHpmcmVlX2lu
dGVybmFsOw0KIA0KLQlpZiAoem9uZS0+dXpfZHRvcikgew0KLQkJem9uZS0+
dXpfZHRvcihpdGVtLCBrZWctPnVrX3NpemUsIHVkYXRhKTsNCi0JCXNraXAg
PSBTS0lQX0RUT1I7DQotCX0NCi0NCisjaWZkZWYgSU5WQVJJQU5UUw0KKwlj
b3VudCA9IDA7DQorI2VuZGlmDQorCS8qDQorCSAqIElmIHBvc3NpYmxlLCBm
cmVlIHRvIHRoZSBwZXItQ1BVIGNhY2hlLiAgVGhlcmUgYXJlIHR3bw0KKwkg
KiByZXF1aXJlbWVudHMgZm9yIHNhZmUgYWNjZXNzIHRvIHRoZSBwZXItQ1BV
IGNhY2hlOiAoMSkgdGhlIHRocmVhZA0KKwkgKiBhY2Nlc3NpbmcgdGhlIGNh
Y2hlIG11c3Qgbm90IGJlIHByZWVtcHRlZCBvciB5aWVsZCBkdXJpbmcgYWNj
ZXNzLA0KKwkgKiBhbmQgKDIpIHRoZSB0aHJlYWQgbXVzdCBub3QgbWlncmF0
ZSBDUFVzIHdpdGhvdXQgc3dpdGNoaW5nIHdoaWNoDQorCSAqIGNhY2hlIGl0
IGFjY2Vzc2VzLiAgV2UgcmVseSBvbiBhIGNyaXRpY2FsIHNlY3Rpb24gdG8g
cHJldmVudA0KKwkgKiBwcmVlbXB0aW9uIGFuZCBtaWdyYXRpb24uICBXZSBy
ZWxlYXNlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGluDQorCSAqIG9yZGVyIHRv
IGFjcXVpcmUgdGhlIHpvbmUgbXV0ZXggaWYgd2UgYXJlIHVuYWJsZSB0byBm
cmVlIHRvIHRoZQ0KKwkgKiBjdXJyZW50IGNhY2hlOyB3aGVuIHdlIHJlLWFj
cXVpcmUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sIHdlIG11c3QNCisJICogZGV0
ZWN0IGFuZCBoYW5kbGUgbWlncmF0aW9uIGlmIGl0IGhhcyBvY2N1cnJlZC4N
CisJICovDQogemZyZWVfcmVzdGFydDoNCisJY3JpdGljYWxfZW50ZXIoKTsN
CiAJY3B1ID0gUENQVV9HRVQoY3B1aWQpOw0KLQlDUFVfTE9DSyhjcHUpOw0K
IAljYWNoZSA9ICZ6b25lLT51el9jcHVbY3B1XTsNCiANCiB6ZnJlZV9zdGFy
dDoNCisjaWZkZWYgSU5WQVJJQU5UUw0KKwljb3VudCsrOw0KKwlLQVNTRVJU
KGNvdW50IDwgMTAsICgidW1hX3pmcmVlX2FyZzogY291bnQgPT0gMTAiKSk7
DQorI2VuZGlmDQorI2lmIDANCisJY3JpdGljYWxfYXNzZXJ0KCk7DQorI2Vu
ZGlmDQogCWJ1Y2tldCA9IGNhY2hlLT51Y19mcmVlYnVja2V0Ow0KIA0KIAlp
ZiAoYnVja2V0KSB7DQpAQCAtMjI3MiwxNSArMjMyMCw3IEBADQogCQkJICAg
ICgidW1hX3pmcmVlOiBGcmVlaW5nIHRvIG5vbiBmcmVlIGJ1Y2tldCBpbmRl
eC4iKSk7DQogCQkJYnVja2V0LT51Yl9idWNrZXRbYnVja2V0LT51Yl9jbnRd
ID0gaXRlbTsNCiAJCQlidWNrZXQtPnViX2NudCsrOw0KLSNpZmRlZiBJTlZB
UklBTlRTDQotCQkJWk9ORV9MT0NLKHpvbmUpOw0KLQkJCWlmIChrZWctPnVr
X2ZsYWdzICYgVU1BX1pPTkVfTUFMTE9DKQ0KLQkJCQl1bWFfZGJnX2ZyZWUo
em9uZSwgdWRhdGEsIGl0ZW0pOw0KLQkJCWVsc2UNCi0JCQkJdW1hX2RiZ19m
cmVlKHpvbmUsIE5VTEwsIGl0ZW0pOw0KLQkJCVpPTkVfVU5MT0NLKHpvbmUp
Ow0KLSNlbmRpZg0KLQkJCUNQVV9VTkxPQ0soY3B1KTsNCisJCQljcml0aWNh
bF9leGl0KCk7DQogCQkJcmV0dXJuOw0KIAkJfSBlbHNlIGlmIChjYWNoZS0+
dWNfYWxsb2NidWNrZXQpIHsNCiAjaWZkZWYgVU1BX0RFQlVHX0FMTE9DDQpA
QCAtMjMwNCw5ICsyMzQ0LDMyIEBADQogCSAqDQogCSAqIDEpIFRoZSBidWNr
ZXRzIGFyZSBOVUxMDQogCSAqIDIpIFRoZSBhbGxvYyBhbmQgZnJlZSBidWNr
ZXRzIGFyZSBib3RoIHNvbWV3aGF0IGZ1bGwuDQorCSAqDQorCSAqIFdlIG11
c3QgZ28gYmFjayB0aGUgem9uZSwgd2hpY2ggcmVxdWlyZXMgYWNxdWlyaW5n
IHRoZSB6b25lIGxvY2ssDQorCSAqIHdoaWNoIGluIHR1cm4gbWVhbnMgd2Ug
bXVzdCByZWxlYXNlIGFuZCByZS1hY3F1aXJlIHRoZSBjcml0aWNhbA0KKwkg
KiBzZWN0aW9uLiAgU2luY2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgcmVs
ZWFzZWQsIHdlIG1heSBiZQ0KKwkgKiBwcmVlbXB0ZWQgb3IgbWlncmF0ZS4g
IEFzIHN1Y2gsIG1ha2Ugc3VyZSBub3QgdG8gbWFpbnRhaW4gYW55DQorCSAq
IHRocmVhZC1sb2NhbCBzdGF0ZSBzcGVjaWZpYyB0byB0aGUgY2FjaGUgZnJv
bSBwcmlvciB0byByZWxlYXNpbmcNCisJICogdGhlIGNyaXRpY2FsIHNlY3Rp
b24uDQogCSAqLw0KLQ0KKwljcml0aWNhbF9leGl0KCk7DQogCVpPTkVfTE9D
Syh6b25lKTsNCisJY3JpdGljYWxfZW50ZXIoKTsNCisJY3B1ID0gUENQVV9H
RVQoY3B1aWQpOw0KKwljYWNoZSA9ICZ6b25lLT51el9jcHVbY3B1XTsNCisJ
aWYgKGNhY2hlLT51Y19mcmVlYnVja2V0ICE9IE5VTEwpIHsNCisJCWlmIChj
YWNoZS0+dWNfZnJlZWJ1Y2tldC0+dWJfY250IDwNCisJCSAgICBjYWNoZS0+
dWNfZnJlZWJ1Y2tldC0+dWJfZW50cmllcykgew0KKwkJCVpPTkVfVU5MT0NL
KHpvbmUpOw0KKwkJCWdvdG8gemZyZWVfc3RhcnQ7DQorCQl9DQorCQlpZiAo
Y2FjaGUtPnVjX2FsbG9jYnVja2V0ICE9IE5VTEwgJiYNCisJCSAgICAoY2Fj
aGUtPnVjX2FsbG9jYnVja2V0LT51Yl9jbnQgPA0KKwkJICAgIGNhY2hlLT51
Y19mcmVlYnVja2V0LT51Yl9jbnQpKSB7DQorCQkJWk9ORV9VTkxPQ0soem9u
ZSk7DQorCQkJZ290byB6ZnJlZV9zdGFydDsNCisJCX0NCisJfQ0KIA0KIAli
dWNrZXQgPSBjYWNoZS0+dWNfZnJlZWJ1Y2tldDsNCiAJY2FjaGUtPnVjX2Zy
ZWVidWNrZXQgPSBOVUxMOw0KQEAgLTIzMjgsOCArMjM5MSw4IEBADQogCQlj
YWNoZS0+dWNfZnJlZWJ1Y2tldCA9IGJ1Y2tldDsNCiAJCWdvdG8gemZyZWVf
c3RhcnQ7DQogCX0NCi0JLyogV2UncmUgZG9uZSB3aXRoIHRoaXMgQ1BVIG5v
dyAqLw0KLQlDUFVfVU5MT0NLKGNwdSk7DQorCS8qIFdlIGFyZSBubyBsb25n
ZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQ1BVLiAqLw0KKwljcml0aWNhbF9l
eGl0KCk7DQogDQogCS8qIEFuZCB0aGUgem9uZS4uICovDQogCVpPTkVfVU5M
T0NLKHpvbmUpOw0KQEAgLTIzNTMsMjcgKzI0MTYsOSBAQA0KIAkvKg0KIAkg
KiBJZiBub3RoaW5nIGVsc2UgY2F1Z2h0IHRoaXMsIHdlJ2xsIGp1c3QgZG8g
YW4gaW50ZXJuYWwgZnJlZS4NCiAJICovDQotDQogemZyZWVfaW50ZXJuYWw6
DQorCXVtYV96ZnJlZV9pbnRlcm5hbCh6b25lLCBpdGVtLCB1ZGF0YSwgU0tJ
UF9EVE9SKTsNCiANCi0jaWZkZWYgSU5WQVJJQU5UUw0KLQkvKg0KLQkgKiBJ
ZiB3ZSBuZWVkIHRvIHNraXAgdGhlIGR0b3IgYW5kIHRoZSB1bWFfZGJnX2Zy
ZWUgaW4NCi0JICogdW1hX3pmcmVlX2ludGVybmFsIGJlY2F1c2Ugd2UndmUg
YWxyZWFkeSBjYWxsZWQgdGhlIGR0b3INCi0JICogYWJvdmUsIGJ1dCB3ZSBl
bmRlZCB1cCBoZXJlLCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlDQotCSAq
IHRoYXQgd2UgdGFrZSBjYXJlIG9mIHRoZSB1bWFfZGJnX2ZyZWUgaW1tZWRp
YXRlbHkuDQotCSAqLw0KLQlpZiAoc2tpcCkgew0KLQkJWk9ORV9MT0NLKHpv
bmUpOw0KLQkJaWYgKGtlZy0+dWtfZmxhZ3MgJiBVTUFfWk9ORV9NQUxMT0Mp
DQotCQkJdW1hX2RiZ19mcmVlKHpvbmUsIHVkYXRhLCBpdGVtKTsNCi0JCWVs
c2UNCi0JCQl1bWFfZGJnX2ZyZWUoem9uZSwgTlVMTCwgaXRlbSk7DQotCQla
T05FX1VOTE9DSyh6b25lKTsNCi0JfQ0KLSNlbmRpZg0KLQl1bWFfemZyZWVf
aW50ZXJuYWwoem9uZSwgaXRlbSwgdWRhdGEsIHNraXApOw0KLQ0KIAlyZXR1
cm47DQogfQ0KIA0KQEAgLTI2NTUsNyArMjcwMCw3IEBADQogCQlzbGFiLT51
c19mbGFncyA9IGZsYWdzIHwgVU1BX1NMQUJfTUFMTE9DOw0KIAkJc2xhYi0+
dXNfc2l6ZSA9IHNpemU7DQogCX0gZWxzZSB7DQotCQl1bWFfemZyZWVfaW50
ZXJuYWwoc2xhYnpvbmUsIHNsYWIsIE5VTEwsIDApOw0KKwkJdW1hX3pmcmVl
X2ludGVybmFsKHNsYWJ6b25lLCBzbGFiLCBOVUxMLCBTS0lQX05PTkUpOw0K
IAl9DQogDQogCXJldHVybiAobWVtKTsNCkBAIC0yNjY2LDcgKzI3MTEsNyBA
QA0KIHsNCiAJdnNldG9iaigodm1fb2Zmc2V0X3Qpc2xhYi0+dXNfZGF0YSwg
a21lbV9vYmplY3QpOw0KIAlwYWdlX2ZyZWUoc2xhYi0+dXNfZGF0YSwgc2xh
Yi0+dXNfc2l6ZSwgc2xhYi0+dXNfZmxhZ3MpOw0KLQl1bWFfemZyZWVfaW50
ZXJuYWwoc2xhYnpvbmUsIHNsYWIsIE5VTEwsIDApOw0KKwl1bWFfemZyZWVf
aW50ZXJuYWwoc2xhYnpvbmUsIHNsYWIsIE5VTEwsIFNLSVBfTk9ORSk7DQog
fQ0KIA0KIHZvaWQNCkBAIC0yNzQzLDYgKzI3ODgsNyBAQA0KIAlpbnQgY2Fj
aGVmcmVlOw0KIAl1bWFfYnVja2V0X3QgYnVja2V0Ow0KIAl1bWFfY2FjaGVf
dCBjYWNoZTsNCisJdV9pbnQ2NF90IGFsbG9jOw0KIA0KIAljbnQgPSAwOw0K
IAltdHhfbG9jaygmdW1hX210eCk7DQpAQCAtMjc2NiwxNSArMjgxMiw5IEBA
DQogCSAgTElTVF9GT1JFQUNIKHosICZ6ay0+dWtfem9uZXMsIHV6X2xpbmsp
IHsNCiAJCWlmIChjbnQgPT0gMCkJLyogbGlzdCBtYXkgaGF2ZSBjaGFuZ2Vk
IHNpemUgKi8NCiAJCQlicmVhazsNCi0JCWlmICghKHprLT51a19mbGFncyAm
IFVNQV9aRkxBR19JTlRFUk5BTCkpIHsNCi0JCQlmb3IgKGNwdSA9IDA7IGNw
dSA8PSBtcF9tYXhpZDsgY3B1KyspIHsNCi0JCQkJaWYgKENQVV9BQlNFTlQo
Y3B1KSkNCi0JCQkJCWNvbnRpbnVlOw0KLQkJCQlDUFVfTE9DSyhjcHUpOw0K
LQkJCX0NCi0JCX0NCiAJCVpPTkVfTE9DSyh6KTsNCiAJCWNhY2hlZnJlZSA9
IDA7DQorCQlhbGxvYyA9IDA7DQogCQlpZiAoISh6ay0+dWtfZmxhZ3MgJiBV
TUFfWkZMQUdfSU5URVJOQUwpKSB7DQogCQkJZm9yIChjcHUgPSAwOyBjcHUg
PD0gbXBfbWF4aWQ7IGNwdSsrKSB7DQogCQkJCWlmIChDUFVfQUJTRU5UKGNw
dSkpDQpAQCAtMjc4NCw5ICsyODI0LDEyIEBADQogCQkJCQljYWNoZWZyZWUg
Kz0gY2FjaGUtPnVjX2FsbG9jYnVja2V0LT51Yl9jbnQ7DQogCQkJCWlmIChj
YWNoZS0+dWNfZnJlZWJ1Y2tldCAhPSBOVUxMKQ0KIAkJCQkJY2FjaGVmcmVl
ICs9IGNhY2hlLT51Y19mcmVlYnVja2V0LT51Yl9jbnQ7DQotCQkJCUNQVV9V
TkxPQ0soY3B1KTsNCisJCQkJYWxsb2MgKz0gY2FjaGUtPnVjX2FsbG9jczsN
CisJCQkJY2FjaGUtPnVjX2FsbG9jcyA9IDA7DQogCQkJfQ0KIAkJfQ0KKwkJ
YWxsb2MgKz0gei0+dXpfYWxsb2NzOw0KKw0KIAkJTElTVF9GT1JFQUNIKGJ1
Y2tldCwgJnotPnV6X2Z1bGxfYnVja2V0LCB1Yl9saW5rKSB7DQogCQkJY2Fj
aGVmcmVlICs9IGJ1Y2tldC0+dWJfY250Ow0KIAkJfQ0KQEAgLTI3OTcsNyAr
Mjg0MCw3IEBADQogCQkgICAgemstPnVrX21heHBhZ2VzICogemstPnVrX2lw
ZXJzLA0KIAkJICAgICh6ay0+dWtfaXBlcnMgKiAoemstPnVrX3BhZ2VzIC8g
emstPnVrX3BwZXJhKSkgLSB0b3RhbGZyZWUsDQogCQkgICAgdG90YWxmcmVl
LA0KLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpei0+dXpfYWxsb2NzKTsN
CisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWFsbG9jKTsNCiAJCVpPTkVf
VU5MT0NLKHopOw0KIAkJZm9yIChwID0gb2Zmc2V0ICsgMTI7IHAgPiBvZmZz
ZXQgJiYgKnAgPT0gJyAnOyAtLXApDQogCQkJLyogbm90aGluZyAqLyA7DQot
LS0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvc3lzL3ZtL3VtYV9pbnQu
aAkyMDA1LzAyLzE2IDIxOjUwOjI5DQorKysgLy9kZXBvdC91c2VyL3J3YXRz
b24vcGVyY3B1L3N5cy92bS91bWFfaW50LmgJMjAwNS8wMy8xNSAxOTo1Nzoy
NA0KQEAgLTM0MiwxNiArMzQyLDYgQEANCiAjZGVmaW5lCVpPTkVfTE9DSyh6
KQltdHhfbG9jaygoeiktPnV6X2xvY2spDQogI2RlZmluZSBaT05FX1VOTE9D
Syh6KQltdHhfdW5sb2NrKCh6KS0+dXpfbG9jaykNCiANCi0jZGVmaW5lCUNQ
VV9MT0NLX0lOSVQoY3B1KQkJCQkJXA0KLQltdHhfaW5pdCgmdW1hX3BjcHVf
bXR4WyhjcHUpXSwgIlVNQSBwY3B1IiwgIlVNQSBwY3B1IiwJXA0KLQkgICAg
TVRYX0RFRiB8IE1UWF9EVVBPSykNCi0NCi0jZGVmaW5lIENQVV9MT0NLKGNw
dSkJCQkJCQlcDQotCW10eF9sb2NrKCZ1bWFfcGNwdV9tdHhbKGNwdSldKQ0K
LQ0KLSNkZWZpbmUgQ1BVX1VOTE9DSyhjcHUpCQkJCQkJXA0KLQltdHhfdW5s
b2NrKCZ1bWFfcGNwdV9tdHhbKGNwdSldKQ0KLQ0KIC8qDQogICogRmluZCBh
IHNsYWIgd2l0aGluIGEgaGFzaCB0YWJsZS4gIFRoaXMgaXMgdXNlZCBmb3Ig
T0ZGUEFHRSB6b25lcyB0byBsb29rdXANCiAgKiB0aGUgc2xhYiBzdHJ1Y3R1
cmUuDQo=

--0-136826264-1113748310=:85588
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=mbuf.diff
Content-Transfer-Encoding: BASE64
Content-ID: <20050417153150.H85588@fledge.watson.org>
Content-Description: 
Content-Disposition: attachment; filename=mbuf.diff

LS0tIC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3N5cy9rZXJuL2tlcm5f
bWJ1Zi5jCTIwMDUvMDIvMTYgMjE6NTA6MjkNCisrKyAvL2RlcG90L3VzZXIv
cndhdHNvbi9wZXJjcHUvc3lzL2tlcm4va2Vybl9tYnVmLmMJMjAwNS8wNC8x
NSAxMToxMToyNg0KQEAgLTEsNiArMSw3IEBADQogLyotDQotICogQ29weXJp
Z2h0IChjKSAyMDA0LCAyMDA1LA0KLSAqIAlCb3NrbyBNaWxla2ljIDxibWls
ZWtpY0BGcmVlQlNELm9yZz4uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAq
IENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBCb3NrbyBNaWxla2ljIDxibWls
ZWtpY0BGcmVlQlNELm9yZz4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUm9i
ZXJ0IE4uIE0uIFdhdHNvbg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQog
ICoNCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMNCkBAIC0zMSw2ICszMiw5IEBADQogI2luY2x1ZGUgIm9w
dF9tYWMuaCINCiAjaW5jbHVkZSAib3B0X3BhcmFtLmgiDQogDQorLyogTmVl
ZCBtYnN0YXRfcGVyY3B1IGRlZmluaXRpb24gZnJvbSBtYnVmLmguICovDQor
I2RlZmluZQlXQU5UX01CU1RBVF9QRVJDUFUNCisNCiAjaW5jbHVkZSA8c3lz
L3BhcmFtLmg+DQogI2luY2x1ZGUgPHN5cy9tYWMuaD4NCiAjaW5jbHVkZSA8
c3lzL21hbGxvYy5oPg0KQEAgLTM5LDYgKzQzLDcgQEANCiAjaW5jbHVkZSA8
c3lzL2RvbWFpbi5oPg0KICNpbmNsdWRlIDxzeXMvZXZlbnRoYW5kbGVyLmg+
DQogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4NCisjaW5jbHVkZSA8c3lzL3By
b2MuaD4NCiAjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4NCiAjaW5jbHVkZSA8
c3lzL3NtcC5oPg0KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQpAQCAtNzks
NyArODQsMTggQEANCiAgKi8NCiANCiBpbnQgbm1iY2x1c3RlcnM7DQorDQor
LyoNCisgKiBtYnN0YXQgaXMgdGhlIG1idWYgc3RhdGlzdGljcyBzdHJ1Y3R1
cmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuDQorICoNCisgKiBtYnN0YXRfcGVy
Y3B1IGlzIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3Mgc3RydWN0dXJlIGluIHdo
aWNoIG1hbnkgb2YgdGhlDQorICogbWJzdGF0IG1lYXN1cmVtZW50cyBhcmUg
Z2F0aGVyZWQgYmVmb3JlIGJlaW5nIGNvbWJpbmVkIGZvciBleHBvc3VyZSB0
bw0KKyAqIHVzZXJzcGFjZS4gIG1ic3RhdF9wZXJjcHUgaXMgcmVhZCBsb2Nr
bGVzcywgc28gc3ViamVjdCB0byBzbWFsbA0KKyAqIGNvbnNpc3RlbmN5IHJh
Y2VzLiAgSXQgaXMgbW9kaWZpZWQgaG9sZGluZyBhIGNyaXRpY2FsIHNlY3Rp
b24gdG8gYXZvaWQNCisgKiByZWFkLW1vZGlmeS13cml0ZSByYWNlcyBpbiB0
aGUgcHJlc2VuY2Ugb2YgcHJlZW1wdGlvbi4NCisgKi8NCiBzdHJ1Y3QgbWJz
dGF0IG1ic3RhdDsNCitzdHJ1Y3QgbWJzdGF0X3BlcmNwdSBtYnN0YXRfcGVy
Y3B1W01BWENQVV07DQogDQogc3RhdGljIHZvaWQNCiB0dW5hYmxlX21iaW5p
dCh2b2lkICpkdW1teSkNCkBAIC05MSwxMSArMTA3LDEzIEBADQogfQ0KIFNZ
U0lOSVQodHVuYWJsZV9tYmluaXQsIFNJX1NVQl9UVU5BQkxFUywgU0lfT1JE
RVJfQU5ZLCB0dW5hYmxlX21iaW5pdCwgTlVMTCk7DQogDQorc3RhdGljIGlu
dCBzeXNjdGxfa2Vybl9pcGNfbWJzdGF0KFNZU0NUTF9IQU5ETEVSX0FSR1Mp
Ow0KKw0KIFNZU0NUTF9ERUNMKF9rZXJuX2lwYyk7DQogU1lTQ1RMX0lOVChf
a2Vybl9pcGMsIE9JRF9BVVRPLCBubWJjbHVzdGVycywgQ1RMRkxBR19SVywg
Jm5tYmNsdXN0ZXJzLCAwLA0KICAgICAiTWF4aW11bSBudW1iZXIgb2YgbWJ1
ZiBjbHVzdGVycyBhbGxvd2VkIik7DQotU1lTQ1RMX1NUUlVDVChfa2Vybl9p
cGMsIE9JRF9BVVRPLCBtYnN0YXQsIENUTEZMQUdfUkQsICZtYnN0YXQsIG1i
c3RhdCwNCi0gICAgIk1idWYgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhbmQgc3Rh
dGlzdGljcyIpOw0KK1NZU0NUTF9QUk9DKF9rZXJuX2lwYywgT0lEX0FVVE8s
IG1ic3RhdCwgQ1RMRkxBR19SRCwgTlVMTCwgMCwNCisgICAgc3lzY3RsX2tl
cm5faXBjX21ic3RhdCwgIiIsICJNYnVmIGdlbmVyYWwgaW5mb3JtYXRpb24g
YW5kIHN0YXRpc3RpY3MiKTsNCiANCiAvKg0KICAqIFpvbmVzIGZyb20gd2hp
Y2ggd2UgYWxsb2NhdGUuDQpAQCAtMTcwLDggKzE4OCw2OSBAQA0KIAltYnN0
YXQubV9tY2ZhaWwgPSBtYnN0YXQubV9tcGZhaWwgPSAwOw0KIAltYnN0YXQu
c2ZfaW9jbnQgPSAwOw0KIAltYnN0YXQuc2ZfYWxsb2N3YWl0ID0gbWJzdGF0
LnNmX2FsbG9jZmFpbCA9IDA7DQorDQorCS8qIG1ic3RhdF9wZXJjcHUgaXMg
emVybydkIGJ5IEJTUy4gKi8NCiB9DQogDQorc3RhdGljIGludA0KK3N5c2N0
bF9rZXJuX2lwY19tYnN0YXQoU1lTQ1RMX0hBTkRMRVJfQVJHUykNCit7DQor
CXN0cnVjdCBtYnN0YXRfcGVyY3B1ICptYnAsIG1icF9sb2NhbDsNCisJdV9j
aGFyIGNwdTsNCisNCisJYnplcm8oJm1icF9sb2NhbCwgc2l6ZW9mKG1icF9s
b2NhbCkpOw0KKwlmb3IgKGNwdSA9IDA7IGNwdSA8IE1BWENQVTsgY3B1Kysp
IHsNCisJCW1icCA9ICZtYnN0YXRfcGVyY3B1W2NwdV07DQorCQltYnBfbG9j
YWwubWJwX21idWZfYWxsb2NzICs9IG1icC0+bWJwX21idWZfYWxsb2NzOw0K
KwkJbWJwX2xvY2FsLm1icF9tYnVmX2ZyZWVzICs9IG1icC0+bWJwX21idWZf
ZnJlZXM7DQorCQltYnBfbG9jYWwubWJwX21idWZfZmFpbHMgKz0gbWJwLT5t
YnBfbWJ1Zl9mYWlsczsNCisJCW1icF9sb2NhbC5tYnBfbWJ1Zl9kcmFpbnMg
Kz0gbWJwLT5tYnBfbWJ1Zl9kcmFpbnM7DQorCQltYnBfbG9jYWwubWJwX2Ns
dXN0X2FsbG9jcyArPSBtYnAtPm1icF9jbHVzdF9hbGxvY3M7DQorCQltYnBf
bG9jYWwubWJwX2NsdXN0X2ZyZWVzICs9IG1icC0+bWJwX2NsdXN0X2ZyZWVz
Ow0KKw0KKwkJbWJwX2xvY2FsLm1icF9jb3B5X2ZhaWxzICs9IG1icC0+bWJw
X2NvcHlfZmFpbHM7DQorCQltYnBfbG9jYWwubWJwX3B1bGx1cF9mYWlscyAr
PSBtYnAtPm1icF9wdWxsdXBfZmFpbHM7DQorDQorCQltYnBfbG9jYWwuc2Zw
X2lvY250ICs9IG1icC0+c2ZwX2lvY250Ow0KKwkJbWJwX2xvY2FsLnNmcF9h
bGxvY19mYWlscyArPSBtYnAtPnNmcF9hbGxvY19mYWlsczsNCisJCW1icF9s
b2NhbC5zZnBfYWxsb2Nfd2FpdHMgKz0gbWJwLT5zZnBfYWxsb2Nfd2FpdHM7
DQorCX0NCisNCisJLyoNCisJICogSWYsIGR1ZSB0byByYWNlcywgdGhlIG51
bWJlciBvZiBmcmVlcyBmb3IgbWJ1ZnMgb3IgY2x1c3RlcnMgaXMNCisJICog
Z3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgYWxsb2NzLCBhZGp1c3QgYWxs
b2Mgc3RhdHMgdG8gMC4gIFRoaXMNCisJICogaXNuJ3QgcXVpdGUgYWNjdXJh
dGUsIGJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHdlIGNvbnNpZGVyIHRoZQ0K
KwkgKiBwZXJmb3JtYW5jZSB3aW4gb2YgcmFjZXMgd29ydGggdGhlIG9jY2Fz
aW9uYWwgaW5hY2N1cmFjeS4NCisJICovDQorCWlmIChtYnBfbG9jYWwubWJw
X21idWZfYWxsb2NzID4gbWJwX2xvY2FsLm1icF9tYnVmX2ZyZWVzKQ0KKwkJ
bWJzdGF0Lm1fbWJ1ZnMgPSBtYnBfbG9jYWwubWJwX21idWZfYWxsb2NzIC0N
CisJCSAgICBtYnBfbG9jYWwubWJwX21idWZfZnJlZXM7DQorCWVsc2UNCisJ
CW1ic3RhdC5tX21idWZzID0gMDsNCisNCisJaWYgKG1icF9sb2NhbC5tYnBf
Y2x1c3RfYWxsb2NzID4gbWJwX2xvY2FsLm1icF9jbHVzdF9mcmVlcykNCisJ
CW1ic3RhdC5tX21jbHVzdHMgPSBtYnBfbG9jYWwubWJwX2NsdXN0X2FsbG9j
cyAtDQorCQkgICAgbWJwX2xvY2FsLm1icF9jbHVzdF9mcmVlczsNCisJZWxz
ZQ0KKwkJbWJzdGF0Lm1fbWNsdXN0cyA9IDA7DQorDQorCW1ic3RhdC5tX2Ry
YWluID0gbWJwX2xvY2FsLm1icF9tYnVmX2RyYWluczsNCisJbWJzdGF0Lm1f
bWNmYWlsID0gbWJwX2xvY2FsLm1icF9jb3B5X2ZhaWxzOw0KKwltYnN0YXQu
bV9tcGZhaWwgPSBtYnBfbG9jYWwubWJwX3B1bGx1cF9mYWlsczsNCisNCisJ
bWJzdGF0LnNmX2lvY250ID0gbWJwX2xvY2FsLnNmcF9pb2NudDsNCisJbWJz
dGF0LnNmX2FsbG9jZmFpbCA9IG1icF9sb2NhbC5zZnBfYWxsb2NfZmFpbHM7
DQorCS8qDQorCSAqIHNmX2FsbG9jd2FpdCBpcyBwcm90ZWN0ZWQgYnkgcGVy
LWFyY2hpdGVjdHVyZSBtdXRleCBzZl9idWZfbG9jaywNCisJICogd2hpY2gg
aXMgaGVsZCB3aGVuZXZlciBzZl9hbGxvY3dhaXQgaXMgdXBkYXRlZCwgc28g
ZG9uJ3QgdXNlIHRoZQ0KKwkgKiBwZXItY3B1IHZlcnNpb24gaGVyZQ0KKwkg
Kg0KKwkgKiBtYnN0YXQuc2ZfYWxsb2N3YWl0ID0gbWJwX2xvY2FsLnNmcF9h
bGxvY193YWl0czsNCisJICovDQorDQorCXJldHVybiAoU1lTQ1RMX09VVChy
ZXEsICZtYnN0YXQsIHNpemVvZihtYnN0YXQpKSk7DQorfQ0KKw0KIC8qDQog
ICogQ29uc3RydWN0b3IgZm9yIE1idWYgbWFzdGVyIHpvbmUuDQogICoNCkBA
IC0yMTIsNyArMjkxLDEwIEBADQogI2VuZGlmDQogCX0gZWxzZQ0KIAkJbS0+
bV9kYXRhID0gbS0+bV9kYXQ7DQotCW1ic3RhdC5tX21idWZzICs9IDE7CS8q
IFhYWCAqLw0KKw0KKwljcml0aWNhbF9lbnRlcigpOw0KKwltYnN0YXRfcGVy
Y3B1W2N1cmNwdV0ubWJwX21idWZfYWxsb2NzKys7DQorCWNyaXRpY2FsX2V4
aXQoKTsNCiAJcmV0dXJuICgwKTsNCiB9DQogDQpAQCAtMjI3LDcgKzMwOSw5
IEBADQogCW0gPSAoc3RydWN0IG1idWYgKiltZW07DQogCWlmICgobS0+bV9m
bGFncyAmIE1fUEtUSERSKSAhPSAwKQ0KIAkJbV90YWdfZGVsZXRlX2NoYWlu
KG0sIE5VTEwpOw0KLQltYnN0YXQubV9tYnVmcyAtPSAxOwkvKiBYWFggKi8N
CisJY3JpdGljYWxfZW50ZXIoKTsNCisJbWJzdGF0X3BlcmNwdVtjdXJjcHVd
Lm1icF9tYnVmX2ZyZWVzKys7DQorCWNyaXRpY2FsX2V4aXQoKTsNCiB9DQog
DQogLyogWFhYIE9ubHkgYmVjYXVzZSBvZiBzdGF0cyAqLw0KQEAgLTIzNSwx
MiArMzE5LDE2IEBADQogbWJfZHRvcl9wYWNrKHZvaWQgKm1lbSwgaW50IHNp
emUsIHZvaWQgKmFyZykNCiB7DQogCXN0cnVjdCBtYnVmICptOw0KKwl1X2No
YXIgY3B1Ow0KIA0KIAltID0gKHN0cnVjdCBtYnVmICopbWVtOw0KIAlpZiAo
KG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikgIT0gMCkNCiAJCW1fdGFnX2RlbGV0
ZV9jaGFpbihtLCBOVUxMKTsNCi0JbWJzdGF0Lm1fbWJ1ZnMgLT0gMTsJLyog
WFhYICovDQotCW1ic3RhdC5tX21jbHVzdHMgLT0gMTsJLyogWFhYICovDQor
CWNyaXRpY2FsX2VudGVyKCk7DQorCWNwdSA9IGN1cmNwdTsNCisJbWJzdGF0
X3BlcmNwdVtjcHVdLm1icF9tYnVmX2ZyZWVzKys7DQorCW1ic3RhdF9wZXJj
cHVbY3B1XS5tYnBfY2x1c3RfZnJlZXMrKzsNCisJY3JpdGljYWxfZXhpdCgp
Ow0KIH0NCiANCiAvKg0KQEAgLTI2Myw3ICszNTEsOSBAQA0KIAltLT5tX2V4
dC5leHRfc2l6ZSA9IE1DTEJZVEVTOw0KIAltLT5tX2V4dC5leHRfdHlwZSA9
IEVYVF9DTFVTVEVSOw0KIAltLT5tX2V4dC5yZWZfY250ID0gTlVMTDsJLyog
TGF6eSBjb3VudGVyIGFzc2lnbi4gKi8NCi0JbWJzdGF0Lm1fbWNsdXN0cyAr
PSAxOwkvKiBYWFggKi8NCisJY3JpdGljYWxfZW50ZXIoKTsNCisJbWJzdGF0
X3BlcmNwdVtjdXJjcHVdLm1icF9jbHVzdF9hbGxvY3MrKzsNCisJY3JpdGlj
YWxfZXhpdCgpOw0KIAlyZXR1cm4gKDApOw0KIH0NCiANCkBAIC0yNzEsNyAr
MzYxLDEwIEBADQogc3RhdGljIHZvaWQNCiBtYl9kdG9yX2NsdXN0KHZvaWQg
Km1lbSwgaW50IHNpemUsIHZvaWQgKmFyZykNCiB7DQotCW1ic3RhdC5tX21j
bHVzdHMgLT0gMTsJLyogWFhYICovDQorDQorCWNyaXRpY2FsX2VudGVyKCk7
DQorCW1ic3RhdF9wZXJjcHVbY3VyY3B1XS5tYnBfY2x1c3RfZnJlZXMrKzsN
CisJY3JpdGljYWxfZXhpdCgpOw0KIH0NCiANCiAvKg0KQEAgLTI4OCw3ICsz
ODEsOSBAQA0KIAl1bWFfemFsbG9jX2FyZyh6b25lX2NsdXN0LCBtLCBob3cp
Ow0KIAlpZiAobS0+bV9leHQuZXh0X2J1ZiA9PSBOVUxMKQ0KIAkJcmV0dXJu
IChFTk9NRU0pOw0KLQltYnN0YXQubV9tY2x1c3RzIC09IDE7CS8qIFhYWCAq
Lw0KKwljcml0aWNhbF9lbnRlcigpOw0KKwltYnN0YXRfcGVyY3B1W2N1cmNw
dV0ubWJwX2NsdXN0X2ZyZWVzKys7DQorCWNyaXRpY2FsX2V4aXQoKTsNCiAJ
cmV0dXJuICgwKTsNCiB9DQogDQpAQCAtMzA0LDcgKzM5OSw5IEBADQogCW0g
PSAoc3RydWN0IG1idWYgKiltZW07DQogCXVtYV96ZnJlZV9hcmcoem9uZV9j
bHVzdCwgbS0+bV9leHQuZXh0X2J1ZiwgTlVMTCk7DQogCW0tPm1fZXh0LmV4
dF9idWYgPSBOVUxMOw0KLQltYnN0YXQubV9tY2x1c3RzICs9IDE7CS8qIFhY
WCAqLw0KKwljcml0aWNhbF9lbnRlcigpOw0KKwltYnN0YXRfcGVyY3B1W2N1
cmNwdV0ubWJwX2NsdXN0X2FsbG9jcysrOw0KKwljcml0aWNhbF9leGl0KCk7
DQogfQ0KIA0KIC8qDQpAQCAtMzIwLDYgKzQxNyw3IEBADQogI2VuZGlmDQog
CWludCBmbGFnczsNCiAJc2hvcnQgdHlwZTsNCisJdV9jaGFyIGNwdTsNCiAN
CiAJbSA9IChzdHJ1Y3QgbWJ1ZiAqKW1lbTsNCiAJYXJncyA9IChzdHJ1Y3Qg
bWJfYXJncyAqKWFyZzsNCkBAIC0zNDgsOCArNDQ2LDExIEBADQogCQkJcmV0
dXJuIChlcnJvcik7DQogI2VuZGlmDQogCX0NCi0JbWJzdGF0Lm1fbWJ1ZnMg
Kz0gMTsJLyogWFhYICovDQotCW1ic3RhdC5tX21jbHVzdHMgKz0gMTsJLyog
WFhYICovDQorCWNyaXRpY2FsX2VudGVyKCk7DQorCWNwdSA9IGN1cmNwdTsN
CisJbWJzdGF0X3BlcmNwdVtjcHVdLm1icF9tYnVmX2FsbG9jcysrOw0KKwlt
YnN0YXRfcGVyY3B1W2NwdV0ubWJwX2NsdXN0X2FsbG9jcysrOw0KKwljcml0
aWNhbF9leGl0KCk7DQogCXJldHVybiAoMCk7DQogfQ0KIA0KQEAgLTM2OSw3
ICs0NzAsOSBAQA0KIAlXSVRORVNTX1dBUk4oV0FSTl9HSUFOVE9LIHwgV0FS
Tl9TTEVFUE9LIHwgV0FSTl9QQU5JQywgTlVMTCwNCiAJICAgICJtYl9yZWNs
YWltKCkiKTsNCiANCi0JbWJzdGF0Lm1fZHJhaW4rKzsNCisJY3JpdGljYWxf
ZW50ZXIoKTsNCisJbWJzdGF0X3BlcmNwdVtjdXJjcHVdLm1icF9tYnVmX2Ry
YWlucysrOw0KKwljcml0aWNhbF9leGl0KCk7DQogCWZvciAoZHAgPSBkb21h
aW5zOyBkcCAhPSBOVUxMOyBkcCA9IGRwLT5kb21fbmV4dCkNCiAJCWZvciAo
cHIgPSBkcC0+ZG9tX3Byb3Rvc3c7IHByIDwgZHAtPmRvbV9wcm90b3N3TlBS
T1RPU1c7IHByKyspDQogCQkJaWYgKHByLT5wcl9kcmFpbiAhPSBOVUxMKQ0K
LS0tIC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3N5cy9rZXJuL3VpcGNf
bWJ1Zi5jCTIwMDUvMDMvMTcgMTk6MzU6MTkNCisrKyAvL2RlcG90L3VzZXIv
cndhdHNvbi9wZXJjcHUvc3lzL2tlcm4vdWlwY19tYnVmLmMJMjAwNS8wNC8x
NSAxMDo1NTo0NA0KQEAgLTM2LDYgKzM2LDkgQEANCiAjaW5jbHVkZSAib3B0
X3BhcmFtLmgiDQogI2luY2x1ZGUgIm9wdF9tYnVmX3N0cmVzc190ZXN0Lmgi
DQogDQorLyogTmVlZCBtYnN0YXRfcGVyY3B1IGRlZmluaXRpb24gZnJvbSBt
YnVmLmguICovDQorI2RlZmluZQlXQU5UX01CU1RBVF9QRVJDUFUNCisNCiAj
aW5jbHVkZSA8c3lzL3BhcmFtLmg+DQogI2luY2x1ZGUgPHN5cy9zeXN0bS5o
Pg0KICNpbmNsdWRlIDxzeXMva2VybmVsLmg+DQpAQCAtNDQsOCArNDcsMTAg
QEANCiAjaW5jbHVkZSA8c3lzL21hYy5oPg0KICNpbmNsdWRlIDxzeXMvbWFs
bG9jLmg+DQogI2luY2x1ZGUgPHN5cy9tYnVmLmg+DQorI2luY2x1ZGUgPHN5
cy9wY3B1Lmg+DQogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4NCiAjaW5jbHVk
ZSA8c3lzL2RvbWFpbi5oPg0KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPg0KICNp
bmNsdWRlIDxzeXMvcHJvdG9zdy5oPg0KICNpbmNsdWRlIDxzeXMvdWlvLmg+
DQogDQpAQCAtNDI4LDEzICs0MzMsMTggQEANCiAJCW0gPSBtLT5tX25leHQ7
DQogCQlucCA9ICZuLT5tX25leHQ7DQogCX0NCi0JaWYgKHRvcCA9PSBOVUxM
KQ0KLQkJbWJzdGF0Lm1fbWNmYWlsKys7CS8qIFhYWDogTm8gY29uc2lzdGVu
Y3kuICovDQorCWlmICh0b3AgPT0gTlVMTCkgew0KKwkJY3JpdGljYWxfZW50
ZXIoKTsNCisJCW1ic3RhdF9wZXJjcHVbY3VyY3B1XS5tYnBfY29weV9mYWls
cysrOw0KKwkJY3JpdGljYWxfZXhpdCgpOw0KKwl9DQogDQogCXJldHVybiAo
dG9wKTsNCiBub3NwYWNlOg0KIAltX2ZyZWVtKHRvcCk7DQotCW1ic3RhdC5t
X21jZmFpbCsrOwkvKiBYWFg6IE5vIGNvbnNpc3RlbmN5LiAqLw0KKwljcml0
aWNhbF9lbnRlcigpOw0KKwltYnN0YXRfcGVyY3B1W2N1cmNwdV0ubWJwX2Nv
cHlfZmFpbHMrKzsNCisJY3JpdGljYWxfZXhpdCgpOw0KIAlyZXR1cm4gKE5V
TEwpOw0KIH0NCiANCkBAIC00OTcsNyArNTA3LDkgQEANCiAJcmV0dXJuIHRv
cDsNCiBub3NwYWNlOg0KIAltX2ZyZWVtKHRvcCk7DQotCW1ic3RhdC5tX21j
ZmFpbCsrOwkvKiBYWFg6IE5vIGNvbnNpc3RlbmN5LiAqLyANCisJY3JpdGlj
YWxfZW50ZXIoKTsNCisJbWJzdGF0X3BlcmNwdVtjdXJjcHVdLm1icF9jb3B5
X2ZhaWxzKys7DQorCWNyaXRpY2FsX2V4aXQoKTsNCiAJcmV0dXJuIChOVUxM
KTsNCiB9DQogDQpAQCAtNjAwLDcgKzYxMiw5IEBADQogDQogbm9zcGFjZToN
CiAJbV9mcmVlbSh0b3ApOw0KLQltYnN0YXQubV9tY2ZhaWwrKzsJLyogWFhY
OiBObyBjb25zaXN0ZW5jeS4gKi8NCisJY3JpdGljYWxfZW50ZXIoKTsNCisJ
bWJzdGF0X3BlcmNwdVtjdXJjcHVdLm1icF9jb3B5X2ZhaWxzKys7DQorCWNy
aXRpY2FsX2V4aXQoKTsNCiAJcmV0dXJuIChOVUxMKTsNCiB9DQogDQpAQCAt
NzYyLDcgKzc3Niw5IEBADQogCXJldHVybiAobSk7DQogYmFkOg0KIAltX2Zy
ZWVtKG4pOw0KLQltYnN0YXQubV9tcGZhaWwrKzsJLyogWFhYOiBObyBjb25z
aXN0ZW5jeS4gKi8NCisJY3JpdGljYWxfZW50ZXIoKTsNCisJbWJzdGF0X3Bl
cmNwdVtjdXJjcHVdLm1icF9wdWxsdXBfZmFpbHMrKzsNCisJY3JpdGljYWxf
ZXhpdCgpOw0KIAlyZXR1cm4gKE5VTEwpOw0KIH0NCiANCi0tLSAvL2RlcG90
L3ZlbmRvci9mcmVlYnNkL3NyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMJ
MjAwNS8wMy8zMSAwNDozNToxNg0KKysrIC8vZGVwb3QvdXNlci9yd2F0c29u
L3BlcmNwdS9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMJMjAwNS8wNC8xNSAx
MDo1NTo0NA0KQEAgLTM5LDYgKzM5LDkgQEANCiAjaW5jbHVkZSAib3B0X2t0
cmFjZS5oIg0KICNpbmNsdWRlICJvcHRfbWFjLmgiDQogDQorLyogTmVlZCBt
YnN0YXRfcGVyY3B1IGRlZmluaXRpb24gZnJvbSBtYnVmLmguICovDQorI2Rl
ZmluZSBXQU5UX01CU1RBVF9QRVJDUFUNCisNCiAjaW5jbHVkZSA8c3lzL3Bh
cmFtLmg+DQogI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KICNpbmNsdWRlIDxz
eXMva2VybmVsLmg+DQpAQCAtMTkyNiw3ICsxOTI5LDkgQEANCiAJCQl2bV9w
YWdlX2lvX2ZpbmlzaChwZyk7DQogCQkJaWYgKCFlcnJvcikNCiAJCQkJVk1f
T0JKRUNUX1VOTE9DSyhvYmopOw0KLQkJCW1ic3RhdC5zZl9pb2NudCsrOw0K
KwkJCWNyaXRpY2FsX2VudGVyKCk7DQorCQkJbWJzdGF0X3BlcmNwdVtjdXJj
cHVdLnNmcF9pb2NudCsrOw0KKwkJCWNyaXRpY2FsX2V4aXQoKTsNCiAJCX0N
CiAJDQogCQlpZiAoZXJyb3IpIHsNCkBAIC0xOTU0LDcgKzE5NTksOSBAQA0K
IAkJICogYnV0IHRoaXMgd2FpdCBjYW4gYmUgaW50ZXJydXB0ZWQuDQogCQkg
Ki8NCiAJCWlmICgoc2YgPSBzZl9idWZfYWxsb2MocGcsIFNGQl9DQVRDSCkp
ID09IE5VTEwpIHsNCi0JCQltYnN0YXQuc2ZfYWxsb2NmYWlsKys7DQorCQkJ
Y3JpdGljYWxfZW50ZXIoKTsNCisJCQltYnN0YXRfcGVyY3B1W2N1cmNwdV0u
c2ZwX2FsbG9jX2ZhaWxzKys7DQorCQkJY3JpdGljYWxfZXhpdCgpOw0KIAkJ
CXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsNCiAJCQl2bV9wYWdlX3Vud2lyZShw
ZywgMCk7DQogCQkJaWYgKHBnLT53aXJlX2NvdW50ID09IDAgJiYgcGctPm9i
amVjdCA9PSBOVUxMKQ0KLS0tIC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3Jj
L3N5cy9zeXMvbWJ1Zi5oCTIwMDUvMDMvMTcgMTk6MzU6MTkNCisrKyAvL2Rl
cG90L3VzZXIvcndhdHNvbi9wZXJjcHUvc3lzL3N5cy9tYnVmLmgJMjAwNS8w
NC8xNSAxMDo1NTo0NA0KQEAgLTI0Myw2ICsyNDMsMjkgQEANCiAjZGVmaW5l
CU1UX05UWVBFUwkxNgkvKiBudW1iZXIgb2YgbWJ1ZiB0eXBlcyBmb3IgbWJ0
eXBlc1tdICovDQogDQogLyoNCisgKiBQZXItQ1BVIG1idWYgYWxsb2NhdG9y
IHN0YXRpc3RpY3MsIHdoaWNoIGFyZSBjb2xsYXRlZCB0byBjb25zdHJ1Y3Qg
dGhlDQorICogZ2xvYmFsIHN0YXRpc3RpY3MuICBUaGV5IGFyZSByZWFkIGxv
Y2tsZXNzLCBidXQgd3JpdHRlbiB0byB3aGlsZSBpbiBhDQorICogY3JpdGlj
YWwgc2VjdGlvbiB0byBwcmV2ZW50IHJlYWQtbW9kaWZ5LXdyaXRlIHJhY2Vz
Lg0KKyAqDQorICogWFhYUlc6IEFzIHdpdGggY29tbWVudHMgYmVsb3csIG1h
eWJlIHNlbmRmaWxlIHN0YXRzIHNob3VsZCBiZSBlbHNlc2V3aGVyZS4NCisg
Ki8NCitzdHJ1Y3QgbWJzdGF0X3BlcmNwdSB7DQorCXVfbG9uZwltYnBfbWJ1
Zl9hbGxvY3M7CS8qIG1idWZzIGFsbG9jJ2Qgb24gQ1BVLiAqLw0KKwl1X2xv
bmcJbWJwX21idWZfZnJlZXM7CQkvKiBtYnVmcyBmcmVlZCBvbiBDUFUuICov
DQorCXVfbG9uZwltYnBfbWJ1Zl9mYWlsczsJCS8qIG1idWYgYWxsb2MgZmFp
bHVyZXMgb24gQ1BVLiAqLw0KKwl1X2xvbmcJbWJwX21idWZfZHJhaW5zOwkv
KiBtYnVmIGRyYWlucyBvbiBDUFUgLiovDQorCXVfbG9uZwltYnBfY2x1c3Rf
YWxsb2NzOwkvKiBjbHVzdGVycyBhbGxvYydkIG9uIENQVS4gKi8NCisJdV9s
b25nCW1icF9jbHVzdF9mcmVlczsJLyogY2x1c3RlcnMgZnJlZWQgb24gQ1BV
LiAqLw0KKw0KKwl1X2xvbmcJbWJwX2NvcHlfZmFpbHM7CQkvKiBtYnVmIGNv
cHkgZmFpbHVyZXMgb24gQ1BVLiAqLw0KKwl1X2xvbmcJbWJwX3B1bGx1cF9m
YWlsczsJLyogbWJ1ZiBwdWxsdXAgZmFpbHVyZXMgb24gQ1BVLiAqLw0KKw0K
Kwl1X2xvbmcJc2ZwX2lvY250OwkJLyogc2VuZGZpbGUgSS9PJ3Mgb24gQ1BV
LiAqLw0KKwl1X2xvbmcJc2ZwX2FsbG9jX2ZhaWxzOwkvKiBzZW5kZmlsZSBh
bGxvYyBmYWlsdXJlcyBvbiBDUFUuICovDQorCXVfbG9uZwlzZnBfYWxsb2Nf
d2FpdHM7CS8qIHNlbmRmaWxlIGFsbG9jIHdhaXRzIG9uIENQVS4gKi8NCit9
Ow0KKw0KKy8qDQogICogR2VuZXJhbCBtYnVmIGFsbG9jYXRvciBzdGF0aXN0
aWNzIHN0cnVjdHVyZS4NCiAgKi8NCiBzdHJ1Y3QgbWJzdGF0IHsNCkBAIC01
NTAsNiArNTczLDE1IEBADQogZXh0ZXJuCXN0cnVjdCBtYnN0YXQgbWJzdGF0
OwkJLyogR2VuZXJhbCBtYnVmIHN0YXRzL2luZm9zICovDQogZXh0ZXJuCWlu
dCBubWJjbHVzdGVyczsJCS8qIE1heGltdW0gbnVtYmVyIG9mIGNsdXN0ZXJz
ICovDQogDQorLyoNCisgKiBBdm9pZCBleHBvc2luZyBQRVJDUFUgZGVmaW5p
dGlvbiBvdXRzaWRlIG9mIGEgdmVyeSBsaW1pdGVkIHNldCBvZiBmaWxlcywN
CisgKiBzbyB0aGF0IHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgUEVSQ1BV
IGRvZXNuJ3QgYmVjb21lIHBhcnQgb2YgdGhlDQorICogZXhwb3NlZCBrZXJu
ZWwgQUJJLg0KKyAqLw0KKyNpZmRlZiBXQU5UX01CU1RBVF9QRVJDUFUNCitl
eHRlcm4Jc3RydWN0IG1ic3RhdF9wZXJjcHUgbWJzdGF0X3BlcmNwdVtNQVhD
UFVdOw0KKyNlbmRpZg0KKw0KIHN0cnVjdCB1aW87DQogDQogdm9pZAkJIG1f
YWRqKHN0cnVjdCBtYnVmICosIGludCk7DQotLS0gLy9kZXBvdC92ZW5kb3Iv
ZnJlZWJzZC9zcmMvc3lzL3N5cy9wY3B1LmgJMjAwNS8wMS8wNyAwMjozMjox
Ng0KKysrIC8vZGVwb3QvdXNlci9yd2F0c29uL3BlcmNwdS9zeXMvc3lzL3Bj
cHUuaAkyMDA1LzA0LzE1IDEwOjU1OjQ0DQpAQCAtODEsNiArODEsNyBAQA0K
IGV4dGVybiBzdHJ1Y3QgY3B1aGVhZCBjcHVoZWFkOw0KIA0KICNkZWZpbmUJ
Q1VSUFJPQwkJKGN1cnRocmVhZC0+dGRfcHJvYykNCisjZGVmaW5lCWN1cmNw
dQkJKGN1cnRocmVhZC0+dGRfb25jcHUpDQogI2RlZmluZQljdXJrc2UJCShj
dXJ0aHJlYWQtPnRkX2tzZSkNCiAjZGVmaW5lCWN1cmtzZWdycAkoY3VydGhy
ZWFkLT50ZF9rc2VncnApDQogI2RlZmluZQljdXJwcm9jCQkoY3VydGhyZWFk
LT50ZF9wcm9jKQ0K

--0-136826264-1113748310=:85588
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=malloc.diff
Content-Transfer-Encoding: BASE64
Content-ID: <20050417153150.W85588@fledge.watson.org>
Content-Description: 
Content-Disposition: attachment; filename=malloc.diff

LS0tIC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3N5cy9rZXJuL2tlcm5f
bWFsbG9jLmMJMjAwNS8wNC8xMiAyMzo1NTozOA0KKysrIC8vZGVwb3QvdXNl
ci9yd2F0c29uL3BlcmNwdS9zeXMva2Vybi9rZXJuX21hbGxvYy5jCTIwMDUv
MDQvMTQgMjI6Mzg6MTYNCkBAIC0xLDQgKzEsNSBAQA0KIC8qLQ0KKyAqIENv
cHlyaWdodCAoYykgMjAwNSBSb2JlcnQgTi4gTS4gV2F0c29uDQogICogQ29w
eXJpZ2h0IChjKSAxOTg3LCAxOTkxLCAxOTkzDQogICoJVGhlIFJlZ2VudHMg
b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuDQogICoNCkBAIC00NCw2ICs0NSw3IEBADQogI2luY2x1ZGUg
PHN5cy9tdXRleC5oPg0KICNpbmNsdWRlIDxzeXMvdm1tZXRlci5oPg0KICNp
bmNsdWRlIDxzeXMvcHJvYy5oPg0KKyNpbmNsdWRlIDxzeXMvc2J1Zi5oPg0K
ICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQogI2luY2x1ZGUgPHN5cy90aW1l
Lmg+DQogDQpAQCAtMTMzLDYgKzEzNSwzMyBAQA0KIAl7MCwgTlVMTH0sDQog
fTsNCiANCisvKg0KKyAqIFR3byBtYWxsb2MgdHlwZSBzdHJ1Y3R1cmVzIGFy
ZSBwcmVzZW50OiBtYWxsb2NfdHlwZSwgd2hpY2ggaXMgdXNlZCBieSBhDQor
ICogdHlwZSBvd25lciB0byBkZWNsYXJlIHRoZSB0eXBlLCBhbmQgbWFsbG9j
X3R5cGVfaW50ZXJuYWwsIHdoaWNoIGhvbGRzDQorICogbWFsbG9jLW93bmVk
IHN0YXRpc3RpY3MgYW5kIG90aGVyIEFCSS1zZW5zaXRpdmUgZmllbGRzLCBz
dWNoIGFzIHRoZSBzZXQgb2YNCisgKiBtYWxsb2Mgc3RhdGlzdGljcyBpbmRl
eGVkIGJ5IHRoZSBjb21waWxlLXRpbWUgTUFYQ1BVIGNvbnN0YW50Lg0KKyAq
DQorICogVGhlIG1hbGxvY190eXBlIGtzX25leHQgZmllbGQgaXMgcHJvdGVj
dGVkIGJ5IG1hbGxvY19tdHguICBPdGhlciBmaWVsZHMgaW4NCisgKiBtYWxs
b2NfdHlwZSBhcmUgc3RhdGljIGFmdGVyIGluaXRpYWxpemF0aW9uIHNvIHVu
c3luY2hyb25pemVkLg0KKyAqDQorICogU3RhdGlzdGljcyBpbiBtYWxsb2Nf
dHlwZV9zdGF0cyBhcmUgd3JpdHRlbiBvbmx5IHdoZW4gaG9sZGluZyBhIGNy
aXRpY2FsDQorICogc2VjdGlvbiwgYnV0IHJlYWQgbG9jay1mcmVlIHJlc3Vs
dGluZyBpbiBwb3NzaWJsZSAobWlub3IpIHJhY2VzLCB3aGljaCB0aGUNCisg
KiBtb25pdG9yaW5nIGFwcCBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQuDQor
ICovDQorc3RydWN0IG1hbGxvY190eXBlX3N0YXRzIHsNCisJdV9sb25nCQlt
dHNfbWVtYWxsb2NlZDsJLyogQnl0ZXMgYWxsb2NhdGVkIG9uIENQVS4gKi8N
CisJdV9sb25nCQltdHNfbWVtZnJlZWQ7CS8qIEJ5dGVzIGZyZWVkIG9uIENQ
VS4gKi8NCisJdV9sb25nCQltdHNfbnVtYWxsb2NzOwkvKiBOdW1iZXIgb2Yg
YWxsb2NhdGVzIG9uIENQVS4gKi8NCisJdV9sb25nCQltdHNfbnVtZnJlZXM7
CS8qIE51bWJlciBvZiBmcmVlcyBvbiBDUFUuICovDQorCXVfbG9uZwkJbXRz
X3NpemU7CS8qIEJpdG1hc2sgb2Ygc2l6ZXMgYWxsb2NhdGVkIG9uIENQVS4g
Ki8NCit9Ow0KKw0KK3N0cnVjdCBtYWxsb2NfdHlwZV9pbnRlcm5hbCB7DQor
CXN0cnVjdCBtYWxsb2NfdHlwZV9zdGF0cwkgbXRpX3N0YXRzW01BWENQVV07
DQorfTsNCisNCit1bWFfem9uZV90IG10X3pvbmU7DQorDQogI2lmZGVmIERF
QlVHX01FTUdVQVJEDQogdV9pbnQgdm1fbWVtZ3VhcmRfZGl2aXNvcjsNCiBT
WVNDVExfVUlOVChfdm0sIE9JRF9BVVRPLCBtZW1ndWFyZF9kaXZpc29yLCBD
VExGTEFHX1JELCAmdm1fbWVtZ3VhcmRfZGl2aXNvciwNCkBAIC0xOTcsNDEg
KzIyNiw0OCBAQA0KICAqIEFkZCB0aGlzIHRvIHRoZSBpbmZvcm1hdGlvbmFs
IG1hbGxvY190eXBlIGJ1Y2tldC4NCiAgKi8NCiBzdGF0aWMgdm9pZA0KLW1h
bGxvY190eXBlX3pvbmVfYWxsb2NhdGVkKHN0cnVjdCBtYWxsb2NfdHlwZSAq
a3NwLCB1bnNpZ25lZCBsb25nIHNpemUsDQorbWFsbG9jX3R5cGVfem9uZV9h
bGxvY2F0ZWQoc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCB1bnNpZ25lZCBs
b25nIHNpemUsDQogICAgIGludCB6aW5keCkNCiB7DQotCW10eF9sb2NrKCZr
c3AtPmtzX210eCk7DQotCWtzcC0+a3NfY2FsbHMrKzsNCisJc3RydWN0IG1h
bGxvY190eXBlX2ludGVybmFsICptdGk7DQorCXN0cnVjdCBtYWxsb2NfdHlw
ZV9zdGF0cyAqbXRzOw0KKwl1X2NoYXIgY3B1Ow0KKw0KKwljcml0aWNhbF9l
bnRlcigpOw0KKwljcHUgPSBjdXJ0aHJlYWQtPnRkX29uY3B1Ow0KKwltdGkg
PSAoc3RydWN0IG1hbGxvY190eXBlX2ludGVybmFsICopKHR5cGUtPmtzX2hh
bmRsZSk7DQorCW10cyA9ICZtdGktPm10aV9zdGF0c1tjcHVdOw0KKwltdHMt
Pm10c19tZW1hbGxvY2VkICs9IHNpemU7DQorCW10cy0+bXRzX251bWFsbG9j
cysrOw0KIAlpZiAoemluZHggIT0gLTEpDQotCQlrc3AtPmtzX3NpemUgfD0g
MSA8PCB6aW5keDsNCi0JaWYgKHNpemUgIT0gMCkgew0KLQkJa3NwLT5rc19t
ZW11c2UgKz0gc2l6ZTsNCi0JCWtzcC0+a3NfaW51c2UrKzsNCi0JCWlmIChr
c3AtPmtzX21lbXVzZSA+IGtzcC0+a3NfbWF4dXNlZCkNCi0JCQlrc3AtPmtz
X21heHVzZWQgPSBrc3AtPmtzX21lbXVzZTsNCi0JfQ0KLQltdHhfdW5sb2Nr
KCZrc3AtPmtzX210eCk7DQorCQltdHMtPm10c19zaXplIHw9IDEgPDwgemlu
ZHg7DQorCWNyaXRpY2FsX2V4aXQoKTsNCiB9DQogDQogdm9pZA0KLW1hbGxv
Y190eXBlX2FsbG9jYXRlZChzdHJ1Y3QgbWFsbG9jX3R5cGUgKmtzcCwgdW5z
aWduZWQgbG9uZyBzaXplKQ0KK21hbGxvY190eXBlX2FsbG9jYXRlZChzdHJ1
Y3QgbWFsbG9jX3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSkNCiB7
DQotCW1hbGxvY190eXBlX3pvbmVfYWxsb2NhdGVkKGtzcCwgc2l6ZSwgLTEp
Ow0KKw0KKwltYWxsb2NfdHlwZV96b25lX2FsbG9jYXRlZCh0eXBlLCBzaXpl
LCAtMSk7DQogfQ0KIA0KIC8qDQogICogUmVtb3ZlIHRoaXMgYWxsb2NhdGlv
biBmcm9tIHRoZSBpbmZvcm1hdGlvbmFsIG1hbGxvY190eXBlIGJ1Y2tldC4N
CiAgKi8NCiB2b2lkDQotbWFsbG9jX3R5cGVfZnJlZWQoc3RydWN0IG1hbGxv
Y190eXBlICprc3AsIHVuc2lnbmVkIGxvbmcgc2l6ZSkNCittYWxsb2NfdHlw
ZV9mcmVlZChzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxv
bmcgc2l6ZSkNCiB7DQotCW10eF9sb2NrKCZrc3AtPmtzX210eCk7DQotCUtB
U1NFUlQoc2l6ZSA8PSBrc3AtPmtzX21lbXVzZSwNCi0JCSgibWFsbG9jKDkp
L2ZyZWUoOSkgY29uZnVzaW9uLlxuJXMiLA0KLQkJICJQcm9iYWJseSBmcmVl
aW5nIHdpdGggd3JvbmcgdHlwZSwgYnV0IG1heWJlIG5vdCBoZXJlLiIpKTsN
Ci0Ja3NwLT5rc19tZW11c2UgLT0gc2l6ZTsNCi0Ja3NwLT5rc19pbnVzZS0t
Ow0KLQltdHhfdW5sb2NrKCZrc3AtPmtzX210eCk7DQorCXN0cnVjdCBtYWxs
b2NfdHlwZV9pbnRlcm5hbCAqbXRpOw0KKwlzdHJ1Y3QgbWFsbG9jX3R5cGVf
c3RhdHMgKm10czsNCisJdV9jaGFyIGNwdTsNCisNCisJY3JpdGljYWxfZW50
ZXIoKTsNCisJY3B1ID0gY3VydGhyZWFkLT50ZF9vbmNwdTsNCisJbXRpID0g
KHN0cnVjdCBtYWxsb2NfdHlwZV9pbnRlcm5hbCAqKXR5cGUtPmtzX2hhbmRs
ZTsNCisJbXRzID0gJm10aS0+bXRpX3N0YXRzW2NwdV07DQorCW10cy0+bXRz
X21lbWZyZWVkICs9IHNpemU7DQorCW10cy0+bXRzX251bWZyZWVzKys7DQor
CWNyaXRpY2FsX2V4aXQoKTsNCiB9DQogDQogLyoNCkBAIC0zNTEsOSArMzg3
LDYgQEANCiAJfQ0KICNlbmRpZg0KIA0KLQlLQVNTRVJUKHR5cGUtPmtzX21l
bXVzZSA+IDAsDQotCQkoIm1hbGxvYyg5KS9mcmVlKDkpIGNvbmZ1c2lvbi5c
biVzIiwNCi0JCSAiUHJvYmFibHkgZnJlZWluZyB3aXRoIHdyb25nIHR5cGUs
IGJ1dCBtYXliZSBub3QgaGVyZS4iKSk7DQogCXNpemUgPSAwOw0KIA0KIAlz
bGFiID0gdnRvc2xhYigodm1fb2Zmc2V0X3QpYWRkciAmICh+VU1BX1NMQUJf
TUFTSykpOw0KQEAgLTQwNSw2ICs0MzgsMTEgQEANCiAJaWYgKGFkZHIgPT0g
TlVMTCkNCiAJCXJldHVybiAobWFsbG9jKHNpemUsIHR5cGUsIGZsYWdzKSk7
DQogDQorCS8qDQorCSAqIFhYWDogU2hvdWxkIHJlcG9ydCBmcmVlIG9mIG9s
ZCBtZW1vcnkgYW5kIGFsbG9jIG9mIG5ldyBtZW1vcnkgdG8NCisJICogcGVy
LUNQVSBzdGF0cy4NCisJICovDQorDQogI2lmZGVmIERFQlVHX01FTUdVQVJE
DQogLyogWFhYOiBDSEFOR0VNRSEgKi8NCiBpZiAodHlwZSA9PSBNX1NVQlBS
T0MpIHsNCkBAIC01NDMsNiArNTgxLDEzIEBADQogDQogCXVtYV9zdGFydHVw
MigpOw0KIA0KKwltdF96b25lID0gdW1hX3pjcmVhdGUoIm10X3pvbmUiLCBz
aXplb2Yoc3RydWN0IG1hbGxvY190eXBlX2ludGVybmFsKSwNCisjaWZkZWYg
SU5WQVJJQU5UUw0KKwkJICAgIG10cmFzaF9jdG9yLCBtdHJhc2hfZHRvciwg
bXRyYXNoX2luaXQsIG10cmFzaF9maW5pLA0KKyNlbHNlDQorCQkgICAgTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCwNCisjZW5kaWYNCisJICAgIFVNQV9BTElH
Tl9QVFIsIFVNQV9aT05FX01BTExPQyk7DQogCWZvciAoaSA9IDAsIGluZHgg
PSAwOyBrbWVtem9uZXNbaW5keF0ua3pfc2l6ZSAhPSAwOyBpbmR4KyspIHsN
CiAJCWludCBzaXplID0ga21lbXpvbmVzW2luZHhdLmt6X3NpemU7DQogCQlj
aGFyICpuYW1lID0ga21lbXpvbmVzW2luZHhdLmt6X25hbWU7DQpAQCAtNTYy
LDEyNyArNjA3LDE0MiBAQA0KIH0NCiANCiB2b2lkDQotbWFsbG9jX2luaXQo
dm9pZCAqZGF0YSkNCittYWxsb2NfaW5pdCh2b2lkICp0eXBlKQ0KIHsNCi0J
c3RydWN0IG1hbGxvY190eXBlICp0eXBlID0gKHN0cnVjdCBtYWxsb2NfdHlw
ZSAqKWRhdGE7DQorCXN0cnVjdCBtYWxsb2NfdHlwZV9pbnRlcm5hbCAqbXRp
Ow0KKwlzdHJ1Y3QgbWFsbG9jX3R5cGUgKm10Ow0KIA0KLQltdHhfbG9jaygm
bWFsbG9jX210eCk7DQotCWlmICh0eXBlLT5rc19tYWdpYyAhPSBNX01BR0lD
KQ0KLQkJcGFuaWMoIm1hbGxvYyB0eXBlIGxhY2tzIG1hZ2ljIik7DQorCUtB
U1NFUlQoY250LnZfcGFnZV9jb3VudCAhPSAwLCAoIm1hbGxvY19yZWdpc3Rl
ciBiZWZvcmUgdm1faW5pdCIpKTsNCiANCi0JaWYgKGNudC52X3BhZ2VfY291
bnQgPT0gMCkNCi0JCXBhbmljKCJtYWxsb2NfaW5pdCBub3QgYWxsb3dlZCBi
ZWZvcmUgdm0gaW5pdCIpOw0KKwltdCA9IHR5cGU7DQorCW10aSA9IHVtYV96
YWxsb2MobXRfem9uZSwgTV9XQUlUT0sgfCBNX1pFUk8pOw0KKwltdC0+a3Nf
aGFuZGxlID0gbXRpOw0KIA0KLQlpZiAodHlwZS0+a3NfbmV4dCAhPSBOVUxM
KQ0KLQkJcmV0dXJuOw0KLQ0KLQl0eXBlLT5rc19uZXh0ID0ga21lbXN0YXRp
c3RpY3M7CQ0KKwltdHhfbG9jaygmbWFsbG9jX210eCk7DQorCW10LT5rc19u
ZXh0ID0ga21lbXN0YXRpc3RpY3M7DQogCWttZW1zdGF0aXN0aWNzID0gdHlw
ZTsNCi0JbXR4X2luaXQoJnR5cGUtPmtzX210eCwgdHlwZS0+a3Nfc2hvcnRk
ZXNjLCAiTWFsbG9jIFN0YXRzIiwgTVRYX0RFRik7DQogCW10eF91bmxvY2so
Jm1hbGxvY19tdHgpOw0KIH0NCiANCiB2b2lkDQotbWFsbG9jX3VuaW5pdCh2
b2lkICpkYXRhKQ0KK21hbGxvY191bmluaXQodm9pZCAqdHlwZSkNCiB7DQot
CXN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSA9IChzdHJ1Y3QgbWFsbG9jX3R5
cGUgKilkYXRhOw0KLQlzdHJ1Y3QgbWFsbG9jX3R5cGUgKnQ7DQorCXN0cnVj
dCBtYWxsb2NfdHlwZV9pbnRlcm5hbCAqbXRpOw0KKwlzdHJ1Y3QgbWFsbG9j
X3R5cGUgKm10LCAqdGVtcDsNCiANCisJbXQgPSB0eXBlOw0KKwlLQVNTRVJU
KG10LT5rc19oYW5kbGUgIT0gTlVMTCwgKCJtYWxsb2NfZGVyZWdpc3Rlcjog
Y29va2llIE5VTEwiKSk7DQogCW10eF9sb2NrKCZtYWxsb2NfbXR4KTsNCi0J
bXR4X2xvY2soJnR5cGUtPmtzX210eCk7DQotCWlmICh0eXBlLT5rc19tYWdp
YyAhPSBNX01BR0lDKQ0KLQkJcGFuaWMoIm1hbGxvYyB0eXBlIGxhY2tzIG1h
Z2ljIik7DQotDQotCWlmIChjbnQudl9wYWdlX2NvdW50ID09IDApDQotCQlw
YW5pYygibWFsbG9jX3VuaW5pdCBub3QgYWxsb3dlZCBiZWZvcmUgdm0gaW5p
dCIpOw0KLQ0KLQlpZiAodHlwZSA9PSBrbWVtc3RhdGlzdGljcykNCi0JCWtt
ZW1zdGF0aXN0aWNzID0gdHlwZS0+a3NfbmV4dDsNCi0JZWxzZSB7DQotCQlm
b3IgKHQgPSBrbWVtc3RhdGlzdGljczsgdC0+a3NfbmV4dCAhPSBOVUxMOyB0
ID0gdC0+a3NfbmV4dCkgew0KLQkJCWlmICh0LT5rc19uZXh0ID09IHR5cGUp
IHsNCi0JCQkJdC0+a3NfbmV4dCA9IHR5cGUtPmtzX25leHQ7DQotCQkJCWJy
ZWFrOw0KLQkJCX0NCisJbXRpID0gbXQtPmtzX2hhbmRsZTsNCisJbXQtPmtz
X2hhbmRsZSA9IE5VTEw7DQorCWlmIChtdCAhPSBrbWVtc3RhdGlzdGljcykg
ew0KKwkJZm9yICh0ZW1wID0ga21lbXN0YXRpc3RpY3M7IHRlbXAgIT0gTlVM
TDsNCisJCSAgICB0ZW1wID0gdGVtcC0+a3NfbmV4dCkgew0KKwkJCWlmICh0
ZW1wLT5rc19uZXh0ID09IG10KQ0KKwkJCQl0ZW1wLT5rc19uZXh0ID0gbXQt
PmtzX25leHQ7DQogCQl9DQotCX0NCi0JdHlwZS0+a3NfbmV4dCA9IE5VTEw7
DQotCW10eF9kZXN0cm95KCZ0eXBlLT5rc19tdHgpOw0KKwl9IGVsc2UNCisJ
CWttZW1zdGF0aXN0aWNzID0gbXQtPmtzX25leHQ7DQogCW10eF91bmxvY2so
Jm1hbGxvY19tdHgpOw0KKwl1bWFfemZyZWUobXRfem9uZSwgdHlwZSk7DQog
fQ0KIA0KIHN0YXRpYyBpbnQNCiBzeXNjdGxfa2Vybl9tYWxsb2MoU1lTQ1RM
X0hBTkRMRVJfQVJHUykNCiB7DQorCXN0cnVjdCBtYWxsb2NfdHlwZV9zdGF0
cyAqbXRzLCBtdHNfbG9jYWw7DQorCXN0cnVjdCBtYWxsb2NfdHlwZV9pbnRl
cm5hbCAqbXRpOw0KKwlsb25nIHRlbXBfYWxsb2NzLCB0ZW1wX2J5dGVzOw0K
IAlzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGU7DQogCWludCBsaW5lc2l6ZSA9
IDEyODsNCi0JaW50IGN1cmxpbmU7DQorCXN0cnVjdCBzYnVmIHNidWY7DQog
CWludCBidWZzaXplOw0KIAlpbnQgZmlyc3Q7DQogCWludCBlcnJvcjsNCiAJ
Y2hhciAqYnVmOw0KLQljaGFyICpwOw0KIAlpbnQgY250Ow0KLQlpbnQgbGVu
Ow0KIAlpbnQgaTsNCiANCiAJY250ID0gMDsNCiANCisJLyogR3Vlc3MgYXQg
aG93IG11Y2ggcm9vbSBpcyBuZWVkZWQuICovDQogCW10eF9sb2NrKCZtYWxs
b2NfbXR4KTsNCiAJZm9yICh0eXBlID0ga21lbXN0YXRpc3RpY3M7IHR5cGUg
IT0gTlVMTDsgdHlwZSA9IHR5cGUtPmtzX25leHQpDQogCQljbnQrKzsNCisJ
bXR4X3VubG9jaygmbWFsbG9jX210eCk7DQogDQotCW10eF91bmxvY2soJm1h
bGxvY19tdHgpOw0KIAlidWZzaXplID0gbGluZXNpemUgKiAoY250ICsgMSk7
DQotCXAgPSBidWYgPSAoY2hhciAqKW1hbGxvYyhidWZzaXplLCBNX1RFTVAs
IE1fV0FJVE9LfE1fWkVSTyk7DQorCWJ1ZiA9IChjaGFyICopbWFsbG9jKGJ1
ZnNpemUsIE1fVEVNUCwgTV9XQUlUT0t8TV9aRVJPKTsNCisJc2J1Zl9uZXco
JnNidWYsIGJ1ZiwgYnVmc2l6ZSwgU0JVRl9GSVhFRExFTik7DQorDQogCW10
eF9sb2NrKCZtYWxsb2NfbXR4KTsNCiANCi0JbGVuID0gc25wcmludGYocCwg
bGluZXNpemUsDQorDQorCXNidWZfcHJpbnRmKCZzYnVmLA0KIAkgICAgIlxu
ICAgICAgICBUeXBlICBJblVzZSBNZW1Vc2UgSGlnaFVzZSBSZXF1ZXN0cyAg
U2l6ZShzKVxuIik7DQotCXAgKz0gbGVuOw0KLQ0KIAlmb3IgKHR5cGUgPSBr
bWVtc3RhdGlzdGljczsgY250ICE9IDAgJiYgdHlwZSAhPSBOVUxMOw0KIAkg
ICAgdHlwZSA9IHR5cGUtPmtzX25leHQsIGNudC0tKSB7DQotCQlpZiAodHlw
ZS0+a3NfY2FsbHMgPT0gMCkNCisJCW10aSA9IHR5cGUtPmtzX2hhbmRsZTsN
CisJCWJ6ZXJvKCZtdHNfbG9jYWwsIHNpemVvZihtdHNfbG9jYWwpKTsNCisJ
CWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkrKykgew0KKwkJCW10cyA9ICZt
dGktPm10aV9zdGF0c1tpXTsNCisJCQltdHNfbG9jYWwubXRzX21lbWFsbG9j
ZWQgKz0gbXRzLT5tdHNfbWVtYWxsb2NlZDsNCisJCQltdHNfbG9jYWwubXRz
X21lbWZyZWVkICs9IG10cy0+bXRzX21lbWZyZWVkOw0KKwkJCW10c19sb2Nh
bC5tdHNfbnVtYWxsb2NzICs9IG10cy0+bXRzX251bWFsbG9jczsNCisJCQlt
dHNfbG9jYWwubXRzX251bWZyZWVzICs9IG10cy0+bXRzX251bWZyZWVzOw0K
KwkJCW10c19sb2NhbC5tdHNfc2l6ZSB8PSBtdHMtPm10c19zaXplOw0KKwkJ
fQ0KKwkJaWYgKG10c19sb2NhbC5tdHNfbnVtYWxsb2NzID09IDApDQogCQkJ
Y29udGludWU7DQogDQotCQljdXJsaW5lID0gbGluZXNpemUgLSAyOwkvKiBM
ZWF2ZSByb29tIGZvciB0aGUgXG4gKi8NCi0JCWxlbiA9IHNucHJpbnRmKHAs
IGN1cmxpbmUsICIlMTNzJTZsdSU2bHVLJTdsdUslOWxsdSIsDQotCQkJdHlw
ZS0+a3Nfc2hvcnRkZXNjLA0KLQkJCXR5cGUtPmtzX2ludXNlLA0KLQkJCSh0
eXBlLT5rc19tZW11c2UgKyAxMDIzKSAvIDEwMjQsDQotCQkJKHR5cGUtPmtz
X21heHVzZWQgKyAxMDIzKSAvIDEwMjQsDQotCQkJKGxvbmcgbG9uZyB1bnNp
Z25lZCl0eXBlLT5rc19jYWxscyk7DQotCQljdXJsaW5lIC09IGxlbjsNCi0J
CXAgKz0gbGVuOw0KKwkJLyoNCisJCSAqIER1ZSB0byByYWNlcyBpbiBwZXIt
Q1BVIHN0YXRpc3RpY3MgZ2F0aGVyLCBpdCdzIHBvc3NpYmxlIHRvDQorCQkg
KiBnZXQgYSBzbGlnaHRseSBuZWdhdGl2ZSBudW1iZXIgaGVyZS4gIElmIHdl
IGRvLCBhcHByb3hpbWF0ZQ0KKwkJICogd2l0aCAwLg0KKwkJICovDQorCQlp
ZiAobXRzX2xvY2FsLm10c19udW1hbGxvY3MgPiBtdHNfbG9jYWwubXRzX251
bWZyZWVzKQ0KKwkJCXRlbXBfYWxsb2NzID0gbXRzX2xvY2FsLm10c19udW1h
bGxvY3MgLQ0KKwkJCSAgICBtdHNfbG9jYWwubXRzX251bWZyZWVzOw0KKwkJ
ZWxzZQ0KKwkJCXRlbXBfYWxsb2NzID0gMDsNCisNCisJCS8qDQorCQkgKiBE
aXR0byBmb3IgYnl0ZXMgYWxsb2NhdGVkLg0KKwkJICovDQorCQlpZiAobXRz
X2xvY2FsLm10c19tZW1hbGxvY2VkID4gbXRzX2xvY2FsLm10c19tZW1mcmVl
ZCkNCisJCQl0ZW1wX2J5dGVzID0gbXRzX2xvY2FsLm10c19tZW1hbGxvY2Vk
IC0NCisJCQkgICAgbXRzX2xvY2FsLm10c19tZW1mcmVlZDsNCisJCWVsc2UN
CisJCQl0ZW1wX2J5dGVzID0gMDsNCisNCisJCXNidWZfcHJpbnRmKCZzYnVm
LCAiJTEzcyU2bHUlNmx1SyU3bHVLJTlsdSIsDQorCQkgICAgdHlwZS0+a3Nf
c2hvcnRkZXNjLA0KKwkJICAgIHRlbXBfYWxsb2NzLA0KKwkJICAgICh0ZW1w
X2J5dGVzICsgMTAyMykgLyAxMDI0LA0KKwkJICAgIDBMLAkJCS8qIFhYWDog
Tm90IGF2YWlsYWJsZSBjdXJyZW50bHkuICovDQorCQkgICAgbXRzX2xvY2Fs
Lm10c19udW1hbGxvY3MpOw0KIA0KIAkJZmlyc3QgPSAxOw0KIAkJZm9yIChp
ID0gMDsgaSA8IHNpemVvZihrbWVtem9uZXMpIC8gc2l6ZW9mKGttZW16b25l
c1swXSkgLSAxOw0KIAkJICAgIGkrKykgew0KLQkJCWlmICh0eXBlLT5rc19z
aXplICYgKDEgPDwgaSkpIHsNCisJCQlpZiAobXRzX2xvY2FsLm10c19zaXpl
ICYgKDEgPDwgaSkpIHsNCiAJCQkJaWYgKGZpcnN0KQ0KLQkJCQkJbGVuID0g
c25wcmludGYocCwgY3VybGluZSwgIiAgIik7DQorCQkJCQlzYnVmX3ByaW50
Zigmc2J1ZiwgIiAgIik7DQogCQkJCWVsc2UNCi0JCQkJCWxlbiA9IHNucHJp
bnRmKHAsIGN1cmxpbmUsICIsIik7DQotCQkJCWN1cmxpbmUgLT0gbGVuOw0K
LQkJCQlwICs9IGxlbjsNCi0NCi0JCQkJbGVuID0gc25wcmludGYocCwgY3Vy
bGluZSwNCi0JCQkJICAgICIlcyIsIGttZW16b25lc1tpXS5rel9uYW1lKTsN
Ci0JCQkJY3VybGluZSAtPSBsZW47DQotCQkJCXAgKz0gbGVuOw0KLQ0KKwkJ
CQkJc2J1Zl9wcmludGYoJnNidWYsICIsIik7DQorCQkJCXNidWZfcHJpbnRm
KCZzYnVmLCAiJXMiLA0KKwkJCQkgICAga21lbXpvbmVzW2ldLmt6X25hbWUp
Ow0KIAkJCQlmaXJzdCA9IDA7DQogCQkJfQ0KIAkJfQ0KLQ0KLQkJbGVuID0g
c25wcmludGYocCwgMiwgIlxuIik7DQotCQlwICs9IGxlbjsNCisJCXNidWZf
cHJpbnRmKCZzYnVmLCAiXG4iKTsNCiAJfQ0KKwlzYnVmX2ZpbmlzaCgmc2J1
Zik7DQorCW10eF91bmxvY2soJm1hbGxvY19tdHgpOw0KIA0KLQltdHhfdW5s
b2NrKCZtYWxsb2NfbXR4KTsNCi0JZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwg
YnVmLCBwIC0gYnVmKTsNCisJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgc2J1
Zl9kYXRhKCZzYnVmKSwgc2J1Zl9sZW4oJnNidWYpKTsNCiANCisJc2J1Zl9k
ZWxldGUoJnNidWYpOw0KIAlmcmVlKGJ1ZiwgTV9URU1QKTsNCiAJcmV0dXJu
IChlcnJvcik7DQogfQ0KQEAgLTY5Niw2ICs3NTYsNyBAQA0KIHN5c2N0bF9r
ZXJuX21wcm9mKFNZU0NUTF9IQU5ETEVSX0FSR1MpDQogew0KIAlpbnQgbGlu
ZXNpemUgPSA2NDsNCisJc3RydWN0IHNidWYgc2J1ZjsNCiAJdWludDY0X3Qg
Y291bnQ7DQogCXVpbnQ2NF90IHdhc3RlOw0KIAl1aW50NjRfdCBtZW07DQpA
QCAtNzA0LDcgKzc2NSw2IEBADQogCWNoYXIgKmJ1ZjsNCiAJaW50IHJzaXpl
Ow0KIAlpbnQgc2l6ZTsNCi0JY2hhciAqcDsNCiAJaW50IGxlbjsNCiAJaW50
IGk7DQogDQpAQCAtNzE0LDM0ICs3NzQsMzAgQEANCiAJd2FzdGUgPSAwOw0K
IAltZW0gPSAwOw0KIA0KLQlwID0gYnVmID0gKGNoYXIgKiltYWxsb2MoYnVm
c2l6ZSwgTV9URU1QLCBNX1dBSVRPS3xNX1pFUk8pOw0KLQlsZW4gPSBzbnBy
aW50ZihwLCBidWZzaXplLA0KKwlidWYgPSAoY2hhciAqKW1hbGxvYyhidWZz
aXplLCBNX1RFTVAsIE1fV0FJVE9LfE1fWkVSTyk7DQorCXNidWZfbmV3KCZz
YnVmLCBidWYsIGJ1ZnNpemUsIFNCVUZfRklYRURMRU4pOw0KKwlzYnVmX3By
aW50Zigmc2J1ZiwgDQogCSAgICAiXG4gIFNpemUgICAgICAgICAgICAgICAg
ICAgIFJlcXVlc3RzICBSZWFsIFNpemVcbiIpOw0KLQlidWZzaXplIC09IGxl
bjsNCi0JcCArPSBsZW47DQotDQogCWZvciAoaSA9IDA7IGkgPCBLTUVNX1pT
SVpFOyBpKyspIHsNCiAJCXNpemUgPSBpIDw8IEtNRU1fWlNISUZUOw0KIAkJ
cnNpemUgPSBrbWVtem9uZXNba21lbXNpemVbaV1dLmt6X3NpemU7DQogCQlj
b3VudCA9IChsb25nIGxvbmcgdW5zaWduZWQpa3JlcXVlc3RzW2ldOw0KIA0K
LQkJbGVuID0gc25wcmludGYocCwgYnVmc2l6ZSwgIiU2ZCUyOGxsdSUxMWRc
biIsDQotCQkgICAgc2l6ZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyljb3VudCwg
cnNpemUpOw0KLQkJYnVmc2l6ZSAtPSBsZW47DQotCQlwICs9IGxlbjsNCisJ
CXNidWZfcHJpbnRmKCZzYnVmLCAiJTZkJTI4bGx1JTExZFxuIiwgc2l6ZSwN
CisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWNvdW50LCByc2l6ZSk7DQog
DQogCQlpZiAoKHJzaXplICogY291bnQpID4gKHNpemUgKiBjb3VudCkpDQog
CQkJd2FzdGUgKz0gKHJzaXplICogY291bnQpIC0gKHNpemUgKiBjb3VudCk7
DQogCQltZW0gKz0gKHJzaXplICogY291bnQpOw0KIAl9DQotDQotCWxlbiA9
IHNucHJpbnRmKHAsIGJ1ZnNpemUsDQorCXNidWZfcHJpbnRmKCZzYnVmLA0K
IAkgICAgIlxuVG90YWwgbWVtb3J5IHVzZWQ6XHQlMzBsbHVcblRvdGFsIE1l
bW9yeSB3YXN0ZWQ6XHQlMzBsbHVcbiIsDQogCSAgICAodW5zaWduZWQgbG9u
ZyBsb25nKW1lbSwgKHVuc2lnbmVkIGxvbmcgbG9uZyl3YXN0ZSk7DQotCXAg
Kz0gbGVuOw0KKwlzYnVmX2ZpbmlzaCgmc2J1Zik7DQogDQotCWVycm9yID0g
U1lTQ1RMX09VVChyZXEsIGJ1ZiwgcCAtIGJ1Zik7DQorCWVycm9yID0gU1lT
Q1RMX09VVChyZXEsIHNidWZfZGF0YSgmc2J1ZiksIHNidWZfbGVuKCZzYnVm
KSk7DQogDQorCXNidWZfZGVsZXRlKCZzYnVmKTsNCiAJZnJlZShidWYsIE1f
VEVNUCk7DQogCXJldHVybiAoZXJyb3IpOw0KIH0NCi0tLSAvL2RlcG90L3Zl
bmRvci9mcmVlYnNkL3NyYy9zeXMvc3lzL21hbGxvYy5oCTIwMDUvMDEvMDcg
MDI6MzI6MTYNCisrKyAvL2RlcG90L3VzZXIvcndhdHNvbi9wZXJjcHUvc3lz
L3N5cy9tYWxsb2MuaAkyMDA1LzA0LzE0IDEyOjU0OjAwDQpAQCAtNTAsMjUg
KzUwLDUxIEBADQogDQogI2RlZmluZQlNX01BR0lDCQk4Nzc5ODM5NzcJLyog
dGltZSB3aGVuIGZpcnN0IGRlZmluZWQgOi0pICovDQogDQorLyoNCisgKiBB
QkktY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHRoZSBvbGQgJ3N0cnVjdCBtYWxs
b2NfdHlwZScsIG9ubHkgYWxsIHN0YXRzIGFyZQ0KKyAqIG5vdyBtYWxsb2Mt
bWFuYWdlZCBpbiBtYWxsb2Mtb3duZWQgbWVtb3J5IHJhdGhlciB0aGFuIGlu
IGNhbGxlciBtZW1vcnksIHNvDQorICogYXMgdG8gYXZvaWQgQUJJIGlzc3Vl
cy4gIFRoZSBrc19uZXh0IHBvaW50ZXIgaXMgcmV1c2VkIGFzIGEgcG9pbnRl
ciB0byB0aGUNCisgKiBpbnRlcm5hbCBkYXRhIGhhbmRsZS4NCisgKg0KKyAq
IFhYWFJXOiBXaHkgaXMgdGhpcyBub3QgaWZkZWYgX0tFUk5FTD8NCisgKg0K
KyAqIFhYWFJXOiBVc2Ugb2Yga3Nfc2hvcnRkZXNjIGhhcyBsZWFrZWQgb3V0
IG9mIGtlcm5fbWFsbG9jLmMuDQorICovDQogc3RydWN0IG1hbGxvY190eXBl
IHsNCi0Jc3RydWN0IG1hbGxvY190eXBlICprc19uZXh0OwkvKiBuZXh0IGlu
IGxpc3QgKi8NCi0JdV9sb25nIAlrc19tZW11c2U7CS8qIHRvdGFsIG1lbW9y
eSBoZWxkIGluIGJ5dGVzICovDQotCXVfbG9uZwlrc19zaXplOwkvKiBzaXpl
cyBvZiB0aGlzIHRoaW5nIHRoYXQgYXJlIGFsbG9jYXRlZCAqLw0KLQl1X2xv
bmcJa3NfaW51c2U7CS8qICMgb2YgcGFja2V0cyBvZiB0aGlzIHR5cGUgY3Vy
cmVudGx5IGluIHVzZSAqLw0KLQl1aW50NjRfdCBrc19jYWxsczsJLyogdG90
YWwgcGFja2V0cyBvZiB0aGlzIHR5cGUgZXZlciBhbGxvY2F0ZWQgKi8NCi0J
dV9sb25nCWtzX21heHVzZWQ7CS8qIG1heGltdW0gbnVtYmVyIGV2ZXIgdXNl
ZCAqLw0KLQl1X2xvbmcJa3NfbWFnaWM7CS8qIGlmIGl0J3Mgbm90IG1hZ2lj
LCBkb24ndCB0b3VjaCBpdCAqLw0KLQljb25zdCBjaGFyICprc19zaG9ydGRl
c2M7CS8qIHNob3J0IGRlc2NyaXB0aW9uICovDQotCXN0cnVjdCBtdHgga3Nf
bXR4OwkvKiBsb2NrIGZvciBzdGF0cyAqLw0KKwlzdHJ1Y3QgbWFsbG9jX3R5
cGUJKmtzX25leHQ7CS8qIE5leHQgaW4gZ2xvYmFsIGNoYWluLiAqLw0KKwl1
X2xvbmcJCQkgX2tzX3NpemU7CS8qIE5vIGxvbmdlciB1c2VkLiAqLw0KKwl1
X2xvbmcJCQkgX2tzX2ludXNlOwkvKiBObyBsb25nZXIgdXNlZC4gKi8NCisJ
dWludDY0X3QJCSBfa3NfY2FsbHM7CS8qIE5vIGxvbmdlciB1c2VkLiAqLw0K
Kwl1X2xvbmcJCQkgX2tzX21heHVzZWQ7CS8qIE5vIGxvbmdlciB1c2VkLiAq
Lw0KKwl1X2xvbmcJCQkga3NfbWFnaWM7CS8qIERldGVjdCBwcm9ncmFtbWVy
IGVycm9yLiAqLw0KKwljb25zdCBjaGFyCQkqa3Nfc2hvcnRkZXNjOwkvKiBQ
cmludGFibGUgdHlwZSBuYW1lLiAqLw0KKw0KKwkvKg0KKwkgKiBzdHJ1Y3Qg
bWFsbG9jX3R5cGUgd2FzIHRlcm1pbmF0ZWQgd2l0aCBhIHN0cnVjdCBtdHgs
IHdoaWNoIGlzIG5vDQorCSAqIGxvbmdlciByZXF1aXJlZC4gIEZvciBBQkkg
cmVhc29ucywgY29udGludWUgdG8gZmxlc2ggb3V0IHRoZSBmdWxsDQorCSAq
IHNpemUgb2YgdGhlIG9sZCBzdHJ1Y3R1cmUsIGJ1dCByZXVzZSB0aGUgX2xv
X2NsYXNzIGZpZWxkIGZvciBvdXINCisJICogaW50ZXJuYWwgZGF0YSBoYW5k
bGUuDQorCSAqLw0KKwl2b2lkCQkJKmtzX2hhbmRsZTsJLyogUHJpdi4gZGF0
YSwgd2FzIGxvX2NsYXNzLiAqLw0KKwljb25zdCBjaGFyCQkqX2xvX25hbWU7
DQorCWNvbnN0IGNoYXIJCSpfbG9fdHlwZTsNCisJdV9pbnQJCQkgX2xvX2Zs
YWdzOw0KKwl2b2lkCQkJKl9sb19saXN0X25leHQ7DQorCXN0cnVjdCB3aXRu
ZXNzCQkqX2xvX3dpdG5lc3M7DQorCXVpbnRwdHJfdAkJIF9tdHhfbG9jazsN
CisJdV9pbnQJCQkgX210eF9yZWN1cnNlOw0KIH07DQogDQogI2lmZGVmIF9L
RVJORUwNCi0jZGVmaW5lCU1BTExPQ19ERUZJTkUodHlwZSwgc2hvcnRkZXNj
LCBsb25nZGVzYykgXA0KLQlzdHJ1Y3QgbWFsbG9jX3R5cGUgdHlwZVsxXSA9
IHsgXA0KLQkJeyBOVUxMLCAwLCAwLCAwLCAwLCAwLCBNX01BR0lDLCBzaG9y
dGRlc2MsIHt9IH0gXA0KLQl9OyBcDQotCVNZU0lOSVQodHlwZSMjX2luaXQs
IFNJX1NVQl9LTUVNLCBTSV9PUkRFUl9TRUNPTkQsIG1hbGxvY19pbml0LCB0
eXBlKTsgXA0KLQlTWVNVTklOSVQodHlwZSMjX3VuaW5pdCwgU0lfU1VCX0tN
RU0sIFNJX09SREVSX0FOWSwgbWFsbG9jX3VuaW5pdCwgdHlwZSkNCisjZGVm
aW5lCU1BTExPQ19ERUZJTkUodHlwZSwgc2hvcnRkZXNjLCBsb25nZGVzYykJ
CQlcDQorCXN0cnVjdCBtYWxsb2NfdHlwZSB0eXBlWzFdID0gewkJCQkJXA0K
KwkJeyBOVUxMLCAwLCAwLCAwLCAwLCBNX01BR0lDLCBzaG9ydGRlc2MsIE5V
TEwsIE5VTEwsCVwNCisJCSAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwLCAw
IH0JCQkJXA0KKwl9OwkJCQkJCQkJXA0KKwlTWVNJTklUKHR5cGUjI19pbml0
LCBTSV9TVUJfS01FTSwgU0lfT1JERVJfU0VDT05ELCBtYWxsb2NfaW5pdCwJ
XA0KKwkgICAgdHlwZSk7CQkJCQkJCVwNCisJU1lTVU5JTklUKHR5cGUjI191
bmluaXQsIFNJX1NVQl9LTUVNLCBTSV9PUkRFUl9BTlksCQlcDQorCSAgICBt
YWxsb2NfdW5pbml0LCB0eXBlKTsNCiANCiAjZGVmaW5lCU1BTExPQ19ERUNM
QVJFKHR5cGUpIFwNCiAJZXh0ZXJuIHN0cnVjdCBtYWxsb2NfdHlwZSB0eXBl
WzFdDQpAQCAtMTEyLDYgKzEzOCw3IEBADQogCSAgICBpbnQgZmxhZ3MpOw0K
IHZvaWQJKnJlYWxsb2NmKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6
ZSwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLA0KIAkgICAgaW50IGZsYWdz
KTsNCisNCiAjZW5kaWYgLyogX0tFUk5FTCAqLw0KIA0KICNlbmRpZiAvKiAh
X1NZU19NQUxMT0NfSF8gKi8NCg==

--0-136826264-1113748310=:85588--



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