From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kUpwd-0002Uk-QO for kexec@lists.infradead.org; Tue, 20 Oct 2020 11:36:48 +0000 Received: by mail-wm1-f72.google.com with SMTP id r7so299151wmr.5 for ; Tue, 20 Oct 2020 04:36:45 -0700 (PDT) Subject: Re: [MAKDUMPFILE PATCH] Add option to estimate the size of vmcore dump files References: <20201012070905.5837-1-jthierry@redhat.com> From: Julien Thierry Message-ID: <617405cb-717f-62ee-e463-a41dc9560cbb@redhat.com> Date: Tue, 20 Oct 2020 12:36:41 +0100 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: =?UTF-8?B?SEFHSU8gS0FaVUhJVE8o6JCp5bC+IOS4gOS7gSk=?= , Bhupesh Sharma , Kazuhito Hagio Cc: kexec mailing list CkhpIEthenVoaXRvLAoKT24gMTAvMTYvMjAgNzo0NSBBTSwgSEFHSU8gS0FaVUhJVE8o6JCp5bC+ IOS4gOS7gSkgd3JvdGU6Cj4gSGkgSnVsaWVuLAo+IAo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tCj4+IEhlbGxvIEp1bGllbiwKPj4KPj4gT24gVHVlLCBPY3QgMTMsIDIwMjAgYXQgMzoyMyBQ TSBKdWxpZW4gVGhpZXJyeSA8anRoaWVycnlAcmVkaGF0LmNvbT4gd3JvdGU6Cj4+Pgo+Pj4gSGkg Qmh1cGVzaCwKPj4+Cj4+PiBPbiAxMC8xMy8yMCAxMDoyNyBBTSwgQmh1cGVzaCBTaGFybWEgd3Jv dGU6Cj4+Pj4gSGVsbG8gSnVsaWVuLAo+Pj4+Cj4+Pj4gVGhhbmtzIGZvciB0aGUgcGF0Y2guIFNv bWUgbml0cGlja3MgaW5saW5lOgo+Pj4+Cj4+Pj4gT24gTW9uLCBPY3QgMTIsIDIwMjAgYXQgMTI6 MzkgUE0gSnVsaWVuIFRoaWVycnkgPGp0aGllcnJ5QHJlZGhhdC5jb20+IHdyb3RlOgo+Pj4+Pgo+ Pj4+PiBBIHVzZXIgbWlnaHQgd2FudCB0byBrbm93IGhvdyBtdWNoIHNwYWNlIGEgdm1jb3JlIGZp bGUgd2lsbCB0YWtlIG9uCj4+Pj4+IHRoZSBzeXN0ZW0gYW5kIGhvdyBtdWNoIHNwYWNlIG9uIHRo ZWlyIGRpc2sgc2hvdWxkIGJlIGF2YWlsYWJsZSB0bwo+Pj4+PiBzYXZlIGl0IGR1cmluZyBhIGNy YXNoLgo+Pj4+Pgo+Pj4+PiBUaGUgb3B0aW9uIC0tdm1jb3JlLXNpemUgZG9lcyBub3QgY3JlYXRl IHRoZSB2bWNvcmUgZmlsZSBidXQgcHJvdmlkZXMKPj4+Pj4gYW4gZXN0aW1hdGlvbiBvZiB0aGUg c2l6ZSBvZiB0aGUgZmluYWwgdm1jb3JlIGZpbGUgY3JlYXRlZCB3aXRoIHRoZQo+Pj4+PiBzYW1l IG1ha2UgZHVtcGZpbGUgb3B0aW9ucy4KPiAKPiBJbnRlcmVzdGluZy4gIERvIHlvdSBoYXZlIGFu eSBhY3R1YWwgdXNlIGNhc2U/ICBlLmcuIHVzZWQgYnkga2R1bXBjdGw/Cj4gb3IgdXNlIGl0IGlu IGtkdW1wIGluaXRyYW1mcz8KPiAKClllcywgdGhlIGlkZWEgd291bGQgYmUgdG8gdXNlIHRoaXMg aW4gbWtkdW1wcmQgdG8gaGF2ZSBhIG1vcmUgYWNjdXJhdGUgCmVzdGltYXRlIG9mIHRoZSBkdW1w IHNpemUgKGN1cnJlbnRseSBpdCBjYW5ub3QgdGFrZSBjb21wcmVzc2lvbiBpbnRvIAphY2NvdW50 IGFuZCB3YXJucyBhYm91dCBwb3RlbnRpYWwgbGFjayBvZiBzcGFjZSwgY29uc2lkZXJpbmcgdGhl IHN5c3RlbSAKbWVtb3J5IHNpemUgYXMgYSB3aG9sZSkuCgo+Pj4+Pgo+Pj4+PiBTaWduZWQtb2Zm LWJ5OiBKdWxpZW4gVGhpZXJyeSA8anRoaWVycnlAcmVkaGF0LmNvbT4KPj4+Pj4gQ2M6IEthenVo aXRvIEhhZ2lvIDxrLWhhZ2lvLWFiQG5lYy5jb20+Cj4+Pj4+IC0tLQo+Pj4+PiAgICBtYWtlZHVt cGZpbGUuYyB8IDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tCj4+Pj4+ICAgIG1ha2VkdW1wZmlsZS5oIHwgMTIgKysrKysrKwo+Pj4+PiAgICBwcmlu dF9pbmZvLmMgICB8ICA0ICsrKwo+Pj4+PiAgICAzIGZpbGVzIGNoYW5nZWQsIDExMSBpbnNlcnRp b25zKCspLCAzIGRlbGV0aW9ucygtKQo+Pj4+Cj4+Pj4gUGxlYXNlIHVwZGF0ZSAnbWFrZWR1bXBm aWxlLjgnIGFzIHdlbGwgaW4gdjIsIHNvIHRoYXQgdGhlIG1hbiBwYWdlIGNhbgo+Pj4+IGRvY3Vt ZW50IHRoZSBuZXdseSBhZGRlZCBvcHRpb24gYW5kIGhvdyB0byB1c2UgaXQgdG8gZGV0ZXJtaW5l IHRoZQo+Pj4+IHZtY29yZS1zaXplLgo+Pj4+Cj4+Pgo+Pj4gQWggeWVzLCBJJ2xsIGRvIHRoYXQu Cj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvbWFrZWR1bXBmaWxlLmMgYi9tYWtlZHVtcGZpbGUuYwo+ Pj4+PiBpbmRleCA0YzQyNTFlLi4wYTJiZmJhIDEwMDY0NAo+Pj4+PiAtLS0gYS9tYWtlZHVtcGZp bGUuYwo+Pj4+PiArKysgYi9tYWtlZHVtcGZpbGUuYwo+Pj4+PiBAQCAtMjYsNiArMjYsNyBAQAo+ Pj4+PiAgICAjaW5jbHVkZSA8bGltaXRzLmg+Cj4+Pj4+ICAgICNpbmNsdWRlIDxhc3NlcnQuaD4K Pj4+Pj4gICAgI2luY2x1ZGUgPHpsaWIuaD4KPj4+Pj4gKyNpbmNsdWRlIDxsaWJnZW4uaD4KPj4+ Pgo+Pj4+IEkga25vdyB3ZSBkb24ndCBmb2xsb3cgYWxwaGFiZXRpY2FsIG9yZGVyIGZvciBpbmNs dWRlIGZpbGVzIGluCj4+Pj4gbWFrZWR1bXBmaWxlIGNvZGUsIGJ1dCBpdCB3b3VsZCBiZSBnb29k IHRvIHBsYWNlIHRoZSBuZXcgLSBvbmVzCj4+Pj4gYWNjb3JkaW5nbHkuIFNvIDxsaWJnZW4uaD4g Y2FuIGdvIHdpdGggPGxpbWl0cy5oPiBoZXJlLgo+Pj4+Cj4+Pgo+Pj4gTm90ZWQuCj4+Pgo+Pj4+ PiAgICBzdHJ1Y3Qgc3ltYm9sX3RhYmxlICAgIHN5bWJvbF90YWJsZTsKPj4+Pj4gICAgc3RydWN0 IHNpemVfdGFibGUgICAgICBzaXplX3RhYmxlOwo+Pj4+PiBAQCAtMTM2Niw3ICsxMzY3LDI1IEBA IG9wZW5fZHVtcF9maWxlKHZvaWQpCj4+Pj4+ICAgICAgICAgICBpZiAoIWluZm8tPmZsYWdfZm9y Y2UpCj4+Pj4+ICAgICAgICAgICAgICAgICAgIG9wZW5fZmxhZ3MgfD0gT19FWENMOwo+Pj4+Pgo+ Pj4+PiAtICAgICAgIGlmIChpbmZvLT5mbGFnX2ZsYXR0ZW4pIHsKPj4+Pj4gKyAgICAgICBpZiAo aW5mby0+ZmxhZ192bWNvcmVfc2l6ZSkgewo+Pj4+PiArICAgICAgICAgICAgICAgY2hhciAqbmFt ZWNweTsKPj4+Pj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7Cj4+Pj4+ICsg ICAgICAgICAgICAgICBpbnQgcmVzOwo+Pj4+PiArCj4+Pj4+ICsgICAgICAgICAgICAgICBuYW1l Y3B5ID0gc3RyZHVwKGluZm8tPm5hbWVfZHVtcGZpbGUgPwo+Pj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbmZvLT5uYW1lX2R1bXBmaWxlIDogIi4iKTsKPj4+Pj4gKwo+Pj4+ PiArICAgICAgICAgICAgICAgcmVzID0gc3RhdChkaXJuYW1lKG5hbWVjcHkpLCAmc3RhdGJ1Zik7 Cj4+Pj4+ICsgICAgICAgICAgICAgICBmcmVlKG5hbWVjcHkpOwo+Pj4+PiArICAgICAgICAgICAg ICAgaWYgKHJlcyAhPSAwKQo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFM U0U7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgICAgICAgICAgIGZkID0gLTE7Cj4+Pj4+ICsgICAgICAg ICAgICAgICBpbmZvLT5kdW1wc2l6ZV9pbmZvLmJsa3NpemUgPSBzdGF0YnVmLnN0X2Jsa3NpemU7 Cj4+Pj4+ICsgICAgICAgICAgICAgICBpbmZvLT5kdW1wc2l6ZV9pbmZvLmJsb2NrX2J1ZmZfc2l6 ZSA9IEJBU0VfTlVNX0JMT0NLUzsKPj4+Pj4gKyAgICAgICAgICAgICAgIGluZm8tPmR1bXBzaXpl X2luZm8uYmxvY2tfaW5mbyA9IGNhbGxvYyhCQVNFX05VTV9CTE9DS1MsIDEpOwo+Pj4+PiArICAg ICAgICAgICAgICAgaW5mby0+ZHVtcHNpemVfaW5mby5ub25faG9sZV9ibG9ja3MgPSAwOwo+Pj4+ PiArICAgICAgIH0gZWxzZSBpZiAoaW5mby0+ZmxhZ19mbGF0dGVuKSB7Cj4+Pj4+ICAgICAgICAg ICAgICAgICAgIGZkID0gU1RET1VUX0ZJTEVOTzsKPj4+Pj4gICAgICAgICAgICAgICAgICAgaW5m by0+bmFtZV9kdW1wZmlsZSA9IGZpbGVuYW1lX3N0ZG91dDsKPj4+Pj4gICAgICAgICAgIH0gZWxz ZSBpZiAoKGZkID0gb3BlbihpbmZvLT5uYW1lX2R1bXBmaWxlLCBvcGVuX2ZsYWdzLAo+Pj4+PiBA QCAtMTM4NCw2ICsxNDAzLDkgQEAgY2hlY2tfZHVtcF9maWxlKGNvbnN0IGNoYXIgKnBhdGgpCj4+ Pj4+ICAgIHsKPj4+Pj4gICAgICAgICAgIGNoYXIgKmVycl9zdHI7Cj4+Pj4+Cj4+Pj4+ICsgICAg ICAgaWYgKGluZm8tPmZsYWdfdm1jb3JlX3NpemUpCj4+Pj4+ICsgICAgICAgICAgICAgICByZXR1 cm4gVFJVRTsKPj4+Pj4gKwo+Pj4+PiAgICAgICAgICAgaWYgKGFjY2VzcyhwYXRoLCBGX09LKSAh PSAwKQo+Pj4+PiAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsgLyogRmlsZSBkb2VzIG5v dCBleGlzdCAqLwo+Pj4+PiAgICAgICAgICAgaWYgKGluZm8tPmZsYWdfZm9yY2UpIHsKPj4+Pj4g QEAgLTQ2MjIsNiArNDY0NCw0NyBAQCB3cml0ZV9hbmRfY2hlY2tfc3BhY2UoaW50IGZkLCB2b2lk ICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY2hhciAqZmlsZV9uYW1lKQo+Pj4+PiAgICAgICAgICAg cmV0dXJuIFRSVUU7Cj4+Pj4+ICAgIH0KPj4+Pj4KPj4+Pj4gK3N0YXRpYyBpbnQKPj4+Pj4gK3dy aXRlX2J1ZmZlcl91cGRhdGVfc2l6ZV9pbmZvKG9mZl90IG9mZnNldCwgdm9pZCAqYnVmLCBzaXpl X3QgYnVmX3NpemUpCj4+Pj4+ICt7Cj4+Pj4+ICsgICAgICAgc3RydWN0IGR1bXBzaXplX2luZm8g KmR1bXBzaXplX2luZm8gPSAmaW5mby0+ZHVtcHNpemVfaW5mbzsKPj4+Pj4gKyAgICAgICBpbnQg YmxrX2VuZF9pZHggPSAob2Zmc2V0ICsgYnVmX3NpemUgLSAxKSAvIGR1bXBzaXplX2luZm8tPmJs a3NpemU7Cj4+Pj4+ICsgICAgICAgaW50IGk7Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgICAvKiBOZWVk IHRvIGdyb3cgdGhlIGR1bXBzaXplIGJsb2NrIGJ1ZmZlcj8gKi8KPj4+Pj4gKyAgICAgICBpZiAo YmxrX2VuZF9pZHggPj0gZHVtcHNpemVfaW5mby0+YmxvY2tfYnVmZl9zaXplKSB7Cj4+Pj4+ICsg ICAgICAgICAgICAgICBpbnQgYWxsb2Nfc2l6ZSA9IE1BWChibGtfZW5kX2lkeCAtIGR1bXBzaXpl X2luZm8tPmJsb2NrX2J1ZmZfc2l6ZSwgQkFTRV9OVU1fQkxPQ0tTKTsKPj4+Pj4gKwo+Pj4+PiAr ICAgICAgICAgICAgICAgZHVtcHNpemVfaW5mby0+YmxvY2tfaW5mbyA9IHJlYWxsb2MoZHVtcHNp emVfaW5mby0+YmxvY2tfaW5mbywKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGR1bXBzaXplX2luZm8tPmJsb2NrX2J1ZmZfc2l6ZSArIGFs bG9jX3NpemUpOwo+Pj4+PiArICAgICAgICAgICAgICAgaWYgKCFkdW1wc2l6ZV9pbmZvLT5ibG9j a19pbmZvKSB7Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgIEVSUk1TRygiTm90IGVub3Vn aCBtZW1vcnlcbiIpOwo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7 Cj4+Pj4+ICsgICAgICAgICAgICAgICB9Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgICAgICAgICAgIG1l bXNldChkdW1wc2l6ZV9pbmZvLT5ibG9ja19pbmZvICsgZHVtcHNpemVfaW5mby0+YmxvY2tfYnVm Zl9zaXplLAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgIDAsIGFsbG9jX3NpemUpOwo+Pj4+ PiArICAgICAgICAgICAgICAgZHVtcHNpemVfaW5mby0+YmxvY2tfYnVmZl9zaXplICs9IGFsbG9j X3NpemU7Cj4+Pj4+ICsgICAgICAgfQo+Pj4+PiArCj4+Pj4+ICsgICAgICAgZm9yIChpID0gMDsg aSA8IGJ1Zl9zaXplOyArK2kpIHsKPj4+Pj4gKyAgICAgICAgICAgICAgIGludCBibGtfaWR4ID0g KG9mZnNldCArIGkpIC8gZHVtcHNpemVfaW5mby0+Ymxrc2l6ZTsKPj4+Pj4gKwo+Pj4+PiArICAg ICAgICAgICAgICAgaWYgKGR1bXBzaXplX2luZm8tPmJsb2NrX2luZm9bYmxrX2lkeF0pIHsKPj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaSArPSBkdW1wc2l6ZV9pbmZvLT5ibGtzaXplOwo+ Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICBpID0gaSAtIChpICUgZHVtcHNpemVfaW5mby0+ Ymxrc2l6ZSkgLSAxOwo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4+ Pj4gKyAgICAgICAgICAgICAgIH0KPj4+Pj4gKwo+Pj4+PiArICAgICAgICAgICAgICAgaWYgKCgo Y2hhciAqKSBidWYpW2ldICE9IDApIHsKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgZHVt cHNpemVfaW5mby0+bm9uX2hvbGVfYmxvY2tzKys7Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIGR1bXBzaXplX2luZm8tPmJsb2NrX2luZm9bYmxrX2lkeF0gPSAxOwo+Pj4+PiArICAgICAg ICAgICAgICAgfQo+Pj4+PiArICAgICAgIH0KPj4+Pj4gKwo+Pj4+PiArICAgICAgIHJldHVybiBU UlVFOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICAgIGludAo+Pj4+PiAgICB3cml0ZV9idWZmZXIo aW50IGZkLCBvZmZfdCBvZmZzZXQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBjaGFyICpm aWxlX25hbWUpCj4+Pj4+ICAgIHsKPj4+Pj4gQEAgLTQ2NDMsNiArNDcwNiw4IEBAIHdyaXRlX2J1 ZmZlcihpbnQgZmQsIG9mZl90IG9mZnNldCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNo YXIgKmZpbGVfbmFtZSkKPj4+Pj4gICAgICAgICAgICAgICAgICAgfQo+Pj4+PiAgICAgICAgICAg ICAgICAgICBpZiAoIXdyaXRlX2FuZF9jaGVja19zcGFjZShmZCwgJmZkaCwgc2l6ZW9mKGZkaCks IGZpbGVfbmFtZSkpCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNF Owo+Pj4+PiArICAgICAgIH0gZWxzZSBpZiAoaW5mby0+ZmxhZ192bWNvcmVfc2l6ZSAmJiBmZCA9 PSBpbmZvLT5mZF9kdW1wZmlsZSkgewo+Pj4+PiArICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRl X2J1ZmZlcl91cGRhdGVfc2l6ZV9pbmZvKG9mZnNldCwgYnVmLCBidWZfc2l6ZSk7Cj4gCj4gV2h5 IGRvIHdlIG5lZWQgdGhpcyBmdW5jdGlvbj8gIG1ha2VkdW1wZmlsZSBhY3R1YWxseSB3cml0ZXMg emVyby1maWxsZWQKPiBwYWdlcyB0byB0aGUgZHVtcGZpbGUgd2l0aCAtZCAwLCBhbmQgZG9lc24n dCB3cml0ZSB0aGVtIHdpdGggLWQgMS4KPiBTbyBpc24ndCAid3JpdGVfYnl0ZXMgKz0gYnVmX3Np emUiIGVub3VnaD8gIEZvciBleGFtcGxlLCB3aXRoIC1kIDMwLAo+IAoKVGhlIHJlYXNvbiBJIHdl bnQgd2l0aCB0aGlzIG1ldGhvZCB3YXMgdG8gbWFrZSBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVy IApvZiBibG9ja3MgYWN0dWFsbHkgYWxsb2NhdGVkIG9uIHRoZSBkaXNrIChzaW5jZSBkZXBlbmRp bmcgb24gaG93IHRoZSAKZGF0YSB3cml0dGVuIGlzIHNjYXR0ZXJlZCBpbiB0aGUgZmlsZSwgdGhl cmUgbWlnaHQgYmUgYSBzaWduaWZpY2FudCAKZGlmZmVyZW5jZSBiZXR3ZWVuIGJ5dGVzIHdyaXR0 ZW4gdnMgYWN0dWFsIHNpemUgYWxsb2NhdGVkIG9uIGRpc2spLiBCdXQgCkkgcmVhbGl6ZSB0aGF0 IHRoZXJlIGlzIHNvbWUgbWlzdW5kZXJzdGFuZGluZyBmcm9tIG15IGVuZCBzaW5jZSB3cml0dGVu IAowIGRvIG1ha2UgYmxvY2sgYWxsb2NhdGlvbiBhcyBvcHBvc2VkIHRvIG5vdCB3cml0aW5nIGF0 IHNvbWUgb2Zmc2V0IAooc2tpcHBpbmcgdGhlIHdpdGggbHNlZWsoKSApLCBJIHdvdWxkIG5lZWQg dG8gZml4IHRoYXQuCgpUbyBoaWdobGlnaHQgdGhlIGJlaGF2aW91ciBJJ20gdGFsa2luZyBhYm91 dDoKJCBkZCBpZj0vZGV2L3plcm8gb2Y9Li90ZXN0ZmlsZSBicz00MDk2IGNvdW50PTEgc2Vlaz0x CjErMCByZWNvcmRzIGluCjErMCByZWNvcmRzIG91dAo0MDk2IGJ5dGVzICg0LjEga0IsIDQuMCBL aUIpIGNvcGllZCwgMC4wMDAzMDI3MTkgcywgMTMuNSBNQi9zCiQgZHUgLWggdGVzdGZpbGUKNC4w Swl0ZXN0ZmlsZQoKJCBkZCBpZj0vZGV2L3plcm8gb2Y9Li90ZXN0ZmlsZSBicz00MDk2IGNvdW50 PTIKMiswIHJlY29yZHMgaW4KMiswIHJlY29yZHMgb3V0CjgxOTIgYnl0ZXMgKDguMiBrQiwgOC4w IEtpQikgY29waWVkLCAwLjAwMDM3MzAwMiBzLCAyMi4wIE1CL3MKJCBkdSAtaCB0ZXN0ZmlsZQo4 LjBLCXRlc3RmaWxlCgoKU28sIGRvIHlvdSB0aGluayBpdCdzIG5vdCB3b3J0aCBib3RoZXJpbmcg ZXN0aW1hdGluZyB0aGUgbnVtYmVyIG9mIApibG9ja3MgYWxsb2NhdGVkIGFuIHRoYXQgSSBzaG91 bGQgb25seSBjb25zaWRlciB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4/Cgo+ICMgbWFrZWR1 bXBmaWxlIC0tdm1jb3JlLXNpemUgLWQzMCB2bWNvcmUKPiAKPiBFc3RpbWF0ZWQgc2l6ZSB0byBz YXZlIHZtY29yZSBpczogMTQ3NTk1MjY0IEJ5dGVzCj4gd3JpdGVfYnl0ZXM6IDE3Mjc4MjczNiBC eXRlcyAgLy8gY2FsY3VsYXRlZCBieSAid3JpdGVfYnl0ZXMgKz0gYnVmX3NpemUiCj4gCj4gbWFr ZWR1bXBmaWxlIENvbXBsZXRlZC4KPiAjIG1ha2VkdW1wZmlsZSAtZDMwIHZtY29yZSBkdW1wLmQz MAo+IENvcHlpbmcgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBb MTAwLjAgJV0gLyAgICAgICAgICAgZXRhOiAwcwo+IAo+IFRoZSBkdW1wZmlsZSBpcyBzYXZlZCB0 byBkdW1wLmQzMC4KPiAKPiBtYWtlZHVtcGZpbGUgQ29tcGxldGVkLgo+ICMgbHMgLWxzIGR1bXAu ZDMwCj4gMTY4NzQwIC1ydy0tLS0tLS0gMSByb290IHJvb3QgMTcyNzg3ODY0IE9jdCAxNiAxNTox NCBkdW1wLmQzMAo+IAo+IAo+Pj4+PiAgICAgICAgICAgfSBlbHNlIHsKPj4+Pj4gICAgICAgICAg ICAgICAgICAgaWYgKGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfU0VUKSA9PSBmYWlsZWQpIHsKPj4+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJNU0coIkNhbid0IHNlZWsgdGhlIGR1bXAg ZmlsZSglcykuICVzXG4iLAo+Pj4+PiBAQCAtOTAxOCw2ICs5MDgzLDEyIEBAIGNsb3NlX2R1bXBf ZmlsZSh2b2lkKQo+Pj4+PiAgICAgICAgICAgaWYgKGluZm8tPmZsYWdfZmxhdHRlbikKPj4+Pj4g ICAgICAgICAgICAgICAgICAgcmV0dXJuOwo+Pj4+Pgo+Pj4+PiArICAgICAgIGlmIChpbmZvLT5m bGFnX3ZtY29yZV9zaXplICYmIGluZm8tPmZkX2R1bXBmaWxlID09IC0xKSB7Cj4+Pj4+ICsgICAg ICAgICAgICAgICBmcmVlKGluZm8tPmR1bXBzaXplX2luZm8uYmxvY2tfaW5mbyk7Cj4+Pj4+ICsg ICAgICAgICAgICAgICBpbmZvLT5kdW1wc2l6ZV9pbmZvLmJsb2NrX2luZm8gPSBOVUxMOwo+Pj4+ PiArICAgICAgICAgICAgICAgcmV0dXJuOwo+Pj4+PiArICAgICAgIH0KPj4+Pj4gKwo+Pj4+PiAg ICAgICAgICAgaWYgKGNsb3NlKGluZm8tPmZkX2R1bXBmaWxlKSA8IDApCj4+Pj4+ICAgICAgICAg ICAgICAgICAgIEVSUk1TRygiQ2FuJ3QgY2xvc2UgdGhlIGR1bXAgZmlsZSglcykuICVzXG4iLAo+ Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+bmFtZV9kdW1wZmlsZSwgc3RyZXJyb3Io ZXJybm8pKTsKPj4+Pj4gQEAgLTEwOTYzLDYgKzExMDM0LDEyIEBAIGNoZWNrX3BhcmFtX2Zvcl9j cmVhdGluZ19kdW1wZmlsZShpbnQgYXJnYywgY2hhciAqYXJndltdKQo+Pj4+PiAgICAgICAgICAg aWYgKGluZm8tPmZsYWdfZmxhdHRlbiAmJiBpbmZvLT5mbGFnX3NwbGl0KQo+Pj4+PiAgICAgICAg ICAgICAgICAgICByZXR1cm4gRkFMU0U7Cj4+Pj4+Cj4+Pj4+ICsgICAgICAgaWYgKGluZm8tPmZs YWdfZmxhdHRlbiAmJiBpbmZvLT5mbGFnX3ZtY29yZV9zaXplKQo+Pj4+PiArICAgICAgICAgICAg ICAgcmV0dXJuIEZBTFNFOwo+Pj4+PiArCj4+Pj4+ICsgICAgICAgaWYgKGluZm8tPmZsYWdfbWVt X3VzYWdlICYmIGluZm8tPmZsYWdfdm1jb3JlX3NpemUpCj4+Pj4+ICsgICAgICAgICAgICAgICBy ZXR1cm4gRkFMU0U7Cj4+Pj4+ICsKPj4+Pj4gICAgICAgICAgIGlmIChpbmZvLT5uYW1lX2ZpbHRl cmNvbmZpZyAmJiAhaW5mby0+bmFtZV92bWxpbnV4KQo+Pj4+PiAgICAgICAgICAgICAgICAgICBy ZXR1cm4gRkFMU0U7Cj4+Pj4+Cj4+Pj4+IEBAIC0xMTA0Myw3ICsxMTEyMCw4IEBAIGNoZWNrX3Bh cmFtX2Zvcl9jcmVhdGluZ19kdW1wZmlsZShpbnQgYXJnYywgY2hhciAqYXJndltdKQo+Pj4+PiAg ICAgICAgICAgICAgICAgICAgKi8KPj4+Pj4gICAgICAgICAgICAgICAgICAgaW5mby0+bmFtZV9t ZW1vcnkgICA9IGFyZ3Zbb3B0aW5kXTsKPj4+Pj4KPj4+Pj4gLSAgICAgICB9IGVsc2UgaWYgKChh cmdjID09IG9wdGluZCArIDEpICYmIGluZm8tPmZsYWdfbWVtX3VzYWdlKSB7Cj4+Pj4+ICsgICAg ICAgfSBlbHNlIGlmICgoYXJnYyA9PSBvcHRpbmQgKyAxKSAmJiAoaW5mby0+ZmxhZ19tZW1fdXNh Z2UgfHwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bmZvLT5mbGFnX3ZtY29yZV9zaXplKSkgewo+Pj4+PiAgICAgICAgICAgICAgICAgICAvKgo+Pj4+ PiAgICAgICAgICAgICAgICAgICAqIFBhcmFtZXRlciBmb3Igc2hvd2luZyB0aGUgcGFnZSBudW1i ZXIgb2YgbWVtb3J5Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICogaW4gZGlmZmVyZW50IHVzZSBm cm9tLgo+Pj4+PiBAQCAtMTE0MjMsNiArMTE1MDEsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBs b25nb3B0c1tdID0gewo+Pj4+PiAgICAgICAgICAgeyJ3b3JrLWRpciIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCBPUFRfV09SS0lOR19ESVJ9LAo+Pj4+PiAgICAgICAgICAgeyJudW0tdGhyZWFk cyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfTlVNX1RIUkVBRFN9LAo+Pj4+PiAgICAg ICAgICAgeyJjaGVjay1wYXJhbXMiLCBub19hcmd1bWVudCwgTlVMTCwgT1BUX0NIRUNLX1BBUkFN U30sCj4+Pj4+ICsgICAgICAgeyJ2bWNvcmUtc2l6ZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRf Vk1DT1JFX1NJWkV9LAo+Pj4+PiAgICAgICAgICAgezAsIDAsIDAsIDB9Cj4+Pj4+ICAgIH07Cj4+ Pj4+Cj4+Pj4+IEBAIC0xMTU4OSw2ICsxMTY2OCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5mbGFnX2NoZWNrX3Bh cmFtcyA9IFRSVUU7Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9sZXZl bCA9IERFRkFVTFRfTVNHX0xFVkVMOwo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwo+Pj4+PiArICAgICAgICAgICAgICAgY2FzZSBPUFRfVk1DT1JFX1NJWkU6Cj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmZsYWdfdm1jb3JlX3NpemUgPSBUUlVFOwo+Pj4+ PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+Pj4gICAgICAgICAgICAgICAgICAg Y2FzZSAnPyc6Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgTVNHKCJDb21tYW5kbGlu ZSBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cbiIpOwo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1TRygiVHJ5IGBtYWtlZHVtcGZpbGUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5c biIpOwo+Pj4+PiBAQCAtMTE1OTgsNiArMTE2ODAsMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQo+Pj4+PiAgICAgICAgICAgaWYgKGZsYWdfZGVidWcpCj4+Pj4+ICAgICAgICAgICAg ICAgICAgIG1lc3NhZ2VfbGV2ZWwgfD0gTUxfUFJJTlRfREVCVUdfTVNHOwo+Pj4+Pgo+Pj4+PiAr ICAgICAgIGlmIChpbmZvLT5mbGFnX3ZtY29yZV9zaXplKQo+Pj4+PiArICAgICAgICAgICAgICAg LyogU3VwcHJlc3MgcHJvZ3Jlc3MgaW5kaWNhdG9yIGFzIGR1bXBmaWxlIHdvbid0IGdldCB3cml0 dGVuICovCj4+Pj4+ICsgICAgICAgICAgICAgICBtZXNzYWdlX2xldmVsICY9IH5NTF9QUklOVF9Q Uk9HUkVTUzsKPj4+Pj4gKwo+Pj4+PiAgICAgICAgICAgaWYgKGluZm8tPmZsYWdfY2hlY2tfcGFy YW1zKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAvKiBzdXBwcmVzcyBkZWJ1Z2dpbmcgbWVzc2Fn ZXMgKi8KPj4+Pj4gICAgICAgICAgICAgICAgICAgbWVzc2FnZV9sZXZlbCA9IERFRkFVTFRfTVNH X0xFVkVMOwo+Pj4+PiBAQCAtMTE3NTEsNyArMTE4MzcsMTEgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+Pj4+ Pgo+Pj4+PiAgICAgICAgICAgICAgICAgICBNU0coIlxuIik7Cj4+Pj4+IC0gICAgICAgICAgICAg ICBpZiAoaW5mby0+ZmxhZ19zcGxpdCkgewo+Pj4+PiArCj4+Pj4+ICsgICAgICAgICAgICAgICBp ZiAoaW5mby0+ZmxhZ192bWNvcmVfc2l6ZSkgewo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAg ICBNU0coIkVzdGltYXRlZCBzaXplIHRvIHNhdmUgdm1jb3JlIGlzOiAlbGxkIEJ5dGVzXG4iLAo+ Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylpbmZvLT5kdW1wc2l6 ZV9pbmZvLm5vbl9ob2xlX2Jsb2NrcyAqCj4+IGluZm8tPmR1bXBzaXplX2luZm8uYmxrc2l6ZSk7 Cj4+Pj4+ICsgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8tPmZsYWdfc3BsaXQpIHsKPj4+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICBNU0coIlRoZSBkdW1wZmlsZXMgYXJlIHNhdmVk IHRvICIpOwo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBp bmZvLT5udW1fZHVtcGZpbGU7IGkrKykgewo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGkgIT0gKGluZm8tPm51bV9kdW1wZmlsZSAtIDEpKQo+Pj4+PiBAQCAtMTE4 MDgsNiArMTE4OTgsOCBAQCBvdXQ6Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJl ZShpbmZvLT5wYWdlX2J1Zik7Cj4+Pj4+ICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLT5wYXJh bGxlbF9pbmZvICE9IE5VTEwpCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShp bmZvLT5wYXJhbGxlbF9pbmZvKTsKPj4+Pj4gKyAgICAgICAgICAgICAgIGlmIChpbmZvLT5kdW1w c2l6ZV9pbmZvLmJsb2NrX2luZm8gIT0gTlVMTCkKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgZnJlZShpbmZvLT5kdW1wc2l6ZV9pbmZvLmJsb2NrX2luZm8pOwo+Pj4+PiAgICAgICAgICAg ICAgICAgICBmcmVlKGluZm8pOwo+Pj4+Pgo+Pj4+PiAgICAgICAgICAgICAgICAgICBpZiAoc3Bs aXRibG9jaykgewo+Pj4+PiBkaWZmIC0tZ2l0IGEvbWFrZWR1bXBmaWxlLmggYi9tYWtlZHVtcGZp bGUuaAo+Pj4+PiBpbmRleCAwM2ZiNGNlLi5mZDc4ZDVmIDEwMDY0NAo+Pj4+PiAtLS0gYS9tYWtl ZHVtcGZpbGUuaAo+Pj4+PiArKysgYi9tYWtlZHVtcGZpbGUuaAo+Pj4+PiBAQCAtMTI3Nyw2ICsx Mjc3LDE1IEBAIHN0cnVjdCBwYXJhbGxlbF9pbmZvIHsKPj4+Pj4gICAgI2VuZGlmCj4+Pj4+ICAg IH07Cj4+Pj4+Cj4+Pj4+ICsjZGVmaW5lIEJBU0VfTlVNX0JMT0NLUyAgICAgICAgNTAKPj4+Pj4g Kwo+Pj4+PiArc3RydWN0IGR1bXBzaXplX2luZm8gewo+Pj4+PiArICAgICAgIGludCBibGtzaXpl Owo+Pj4+PiArICAgICAgIGludCBibG9ja19idWZmX3NpemU7Cj4+Pj4+ICsgICAgICAgdW5zaWdu ZWQgY2hhciAqYmxvY2tfaW5mbzsKPj4+Pj4gKyAgICAgICBpbnQgbm9uX2hvbGVfYmxvY2tzOwo+ Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiAgICBzdHJ1Y3QgcHBjNjRfdm1lbW1hcCB7Cj4+Pj4+ICAg ICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBwaHlzOwo+Pj4+PiAgICAgICAgICAgdW5z aWduZWQgbG9uZyAgICAgICAgICAgdmlydDsKPj4+Pj4gQEAgLTEzMjEsNiArMTMzMCw3IEBAIHN0 cnVjdCBEdW1wSW5mbyB7Cj4+Pj4+ICAgICAgICAgICBpbnQgICAgICAgICAgICAgZmxhZ192bWVt bWFwOyAgICAgICAgLyoga2VybmVsIHN1cHBvcnRzIHZtZW1tYXAgYWRkcmVzcyBzcGFjZSAqLwo+ Pj4+PiAgICAgICAgICAgaW50ICAgICAgICAgICAgIGZsYWdfZXhjbHVkZXZtOyAgICAgIC8qIC1l IC0gZXhjbHVkaW5nIHVudXNlZCB2bWVtbWFwIHBhZ2VzICovCj4+Pj4+ICAgICAgICAgICBpbnQg ICAgICAgICAgICAgZmxhZ191c2VfY291bnQ7ICAgICAgLyogX3JlZmNvdW50IGlzIG5hbWVkIF9j b3VudCBpbiBzdHJ1Y3QgcGFnZSAqLwo+Pj4+PiArICAgICAgIGludCAgICAgICAgICAgICBmbGFn X3ZtY29yZV9zaXplOyAgICAvKiBlc3RpbWF0ZSB0aGUgc2l6ZSBvZiB0aGUgdm1jb3JlIGZpbGUg aW5zdGVhZCBvZgo+PiBjcmVhdGluZyBpdCAqLwo+Pj4+PiAgICAgICAgICAgdW5zaWduZWQgbG9u ZyAgIHZhZGRyX2Zvcl92dG9wOyAgICAgIC8qIHZpcnR1YWwgYWRkcmVzcyBmb3IgZGVidWdnaW5n ICovCj4+Pj4+ICAgICAgICAgICBsb25nICAgICAgICAgICAgcGFnZV9zaXplOyAgICAgICAgICAg Lyogc2l6ZSBvZiBwYWdlICovCj4+Pj4+ICAgICAgICAgICBsb25nICAgICAgICAgICAgcGFnZV9z aGlmdDsKPj4+Pj4gQEAgLTE0MjUsNiArMTQzNSw3IEBAIHN0cnVjdCBEdW1wSW5mbyB7Cj4+Pj4+ ICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fZHVtcGZpbGU7Cj4+Pj4+ICAg ICAgICAgICBzdHJ1Y3Qgc3BsaXR0aW5nX2luZm8gICAqc3BsaXR0aW5nX2luZm87Cj4+Pj4+ICAg ICAgICAgICBzdHJ1Y3QgcGFyYWxsZWxfaW5mbyAgICAqcGFyYWxsZWxfaW5mbzsKPj4+Pj4gKyAg ICAgICBzdHJ1Y3QgZHVtcHNpemVfaW5mbyAgICBkdW1wc2l6ZV9pbmZvOwo+Pj4+Pgo+Pj4+PiAg ICAgICAgICAgLyoKPj4+Pj4gICAgICAgICAgICAqIGJpdG1hcCBpbmZvOgo+Pj4+PiBAQCAtMjM2 NCw2ICsyMzc1LDcgQEAgc3RydWN0IGVsZl9wcnN0YXR1cyB7Cj4+Pj4+ICAgICNkZWZpbmUgT1BU X05VTV9USFJFQURTICAgICAgICAgT1BUX1NUQVJUKzE2Cj4+Pj4+ICAgICNkZWZpbmUgT1BUX1BB UlRJQUxfRE1FU0cgICAgICAgT1BUX1NUQVJUKzE3Cj4+Pj4+ICAgICNkZWZpbmUgT1BUX0NIRUNL X1BBUkFNUyAgICAgICAgT1BUX1NUQVJUKzE4Cj4+Pj4+ICsjZGVmaW5lIE9QVF9WTUNPUkVfU0la RSAgICAgICAgIE9QVF9TVEFSVCsxOQo+Pj4+Pgo+Pj4+PiAgICAvKgo+Pj4+PiAgICAgKiBGdW5j dGlvbiBQcm90b3R5cGUuCj4+Pj4+IGRpZmYgLS1naXQgYS9wcmludF9pbmZvLmMgYi9wcmludF9p bmZvLmMKPj4+Pj4gaW5kZXggZTBjMzhiNC4uNmY1YTE2NSAxMDA2NDQKPj4+Pj4gLS0tIGEvcHJp bnRfaW5mby5jCj4+Pj4+ICsrKyBiL3ByaW50X2luZm8uYwo+Pj4+PiBAQCAtMzA4LDYgKzMwOCwx MCBAQCBwcmludF91c2FnZSh2b2lkKQo+Pj4+PiAgICAgICAgICAgTVNHKCIgICAgICB0aGUgY3Jh c2hrZXJuZWwgcmFuZ2UsIHRoZW4gY2FsY3VsYXRlcyB0aGUgcGFnZSBudW1iZXIgb2YgZGlmZmVy ZW50IGtpbmQgcGVyXG4iKTsKPj4+Pj4gICAgICAgICAgIE1TRygiICAgICAgdm1jb3JlaW5mby4g U28gY3VycmVudGx5IC9wcm9jL2tjb3JlIG5lZWQgYmUgc3BlY2lmaWVkIGV4cGxpY2l0bHkuXG4i KTsKPj4+Pj4gICAgICAgICAgIE1TRygiXG4iKTsKPj4+Pj4gKyAgICAgICBNU0coIiAgWy0tdm1j b3JlLXNpemVdOlxuIik7Cj4+Pj4+ICsgICAgICAgTVNHKCIgICAgICBUaGlzIG9wdGlvbiBwcm92 aWRlcyBhbiBlc3RpbWF0aW9uIG9mIHRoZSBzaXplIG5lZWRlZCB0byBzYXZlIFZNQ09SRSBvbiBk aXNrLlxuIik7Cj4+Pj4+ICsgICAgICAgTVNHKCIgICAgICBUaGlzIG9wdGlvbiBvcHRpb24gY2Fu bm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCAtRi5cbiIpOwo+Pj4+Cj4+Pj4gQWxzbyBu b3QgaW4gY29tYmluYXRpb24gd2l0aCAtLW1lbS11c2FnZSAoYXMgcGVyIHRoZSBjb2RlIGNoYW5n ZXMgYWJvdmUpPwo+Pj4+IEFuZCBtYXkgYmUgdGhlIG9wdGlvbnMgJy0tbWVtLXVzYWdlIC8gLUYn IGFsc28gbmVlZCBhbiB1cGRhdGUgdG8KPj4+PiBtZW50aW9uIHRoZXkgY2FuJ3QgYmUgdXNlZCB3 aXRoIC0tdm1jb3JlLXNpemUgb3B0aW9uLgo+Pj4+Cj4+Pgo+Pj4gR29vZCBwb2ludCwgSSdsbCB1 cGRhdGUgdGhvc2UuCj4+Pgo+Pj4+PiArICAgICAgIE1TRygiXG4iKTsKPj4+Pj4gICAgICAgICAg IE1TRygiICBbLURdOlxuIik7Cj4+Pj4+ICAgICAgICAgICBNU0coIiAgICAgIFByaW50IGRlYnVn Z2luZyBtZXNzYWdlLlxuIik7Cj4+Pj4+ICAgICAgICAgICBNU0coIlxuIik7Cj4+Pj4+IC0tCj4+ Pj4KPj4+PiBJIGxpa2UgdGhlIGlkZWEsIGJ1dCBzb21ldGltZXMgd2UgdXNlIG1ha2VkdW1wZmls ZSB0byBnZW5lcmF0ZSBhCj4+Pj4gZHVtcGZpbGUgaW4gdGhlIHByaW1hcnkga2VybmVsIGFzIHdl bGwuIEZvciBleGFtcGxlOgo+Pj4+Cj4+Pj4gJCBtYWtlZHVtcGZpbGUgLWQgMzEgLXggdm1saW51 eCAvcHJvYy9rY29yZSBkdW1wZmlsZQo+Pj4+Cj4+Pj4gSW4gc3VjaCB1c2UtY2FzZXMgaXQgaXMg dXNlZnVsIHRvIHVzZSAtLXZtY29yZS1zaXplIGFuZCBzdGlsbCBnZW5lcmF0ZQo+Pj4+IHRoZSBk dW1wZmlsZSAocmlnaHQgbm93IHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub3QgdG8gZ2VuZXJh dGUgYQo+Pj4+IGR1bXBmaWxlIHdoZW4gLS12bWNvcmUtc2l6ZSBpcyBzcGVjaWZpZWQpLiBNYXli ZSB3ZSBuZWVkIHRvIHRoaW5rIG1vcmUKPj4+PiBvbiBzdXBwb3J0aW5nIHRoaXMgdXNlLWNhc2Ug YXMgd2VsbC4KPj4+Pgo+Pj4KPj4+IFRoZSB0aGluZyBpcywgaWYgeW91IGFyZSBnZW5lcmF0aW5n IHRoZSBkdW1wZmlsZSwgeW91IGNhbiBqdXN0IGNoZWNrIHRoZQo+Pj4gc2l6ZSBvZiB0aGUgZmls ZSBjcmVhdGVkIHdpdGggImR1IC1iIiBvciBzb21lIG90aGVyIGNvbW1hbmQuCj4+Cj4+IEkgYWdy ZWUsIGJ1dCBJIGp1c3Qgd2FzIGxvb2tpbmcgdG8gcmVwbGFjZSB0aGUgdHdvICAnbWFrZWR1bXBm aWxlICsKPj4gZHUnIHN0ZXBzIHdpdGggYSBzaW5nbGUgJ21ha2VkdW1wZmlsZSAtLXZtY29yZS1z aXplJyBzdGVwLgo+Pgo+Pj4gT3ZlcmFsbCBJIGRvbid0IG1pbmQgc3VwcG9ydGluZyB5b3VyIGNh c2UgYXMgd2VsbC4gTWF5YmUgdGhhdCBjYW4gZGVwZW5kCj4+PiBvbiB3aGV0aGVyIGEgdm1jb3Jl L2R1bXBmaWxlIGZpbGVuYW1lIGlzIHByb3ZpZGVkOgo+Pj4KPj4+ICQgbWFrZWR1bXBmaWxlIC1k IDMxIC14IHZtbGludXggL3Byb2Mva2NvcmUgICAgIyBvbmx5IGVzdGltYXRlcyB0aGUgc2l6ZQo+ Pj4KPj4+ICQgbWFrZWR1bXBmaWxlIC1kIDMxIC14IHZtbGludXggL3Byb2Mva2NvcmUgZHVtcGZp bGUgICMgd3JpdGVzIHRoZQo+Pj4gZHVtcGZpbGUgYW5kIGdpdmVzIHRoZSBmaW5hbCBzaXplCj4+ Pgo+Pj4gQW55IHRob3VnaHQsIG9waW5pb25zLCBzdWdnZXN0aW9ucz8KPj4KPj4gTGV0J3Mgd2Fp dCBmb3IgS2F6dSdzIG9waW5pb24gb24gdGhlIHNhbWUsIGJ1dCBJIGFtIG9rIHdpdGggdXNpbmcg YQo+PiB0d28tc3RlcCAnbWFrZWR1bXBmaWxlICsgZHUnIGFwcHJvYWNoIGZvciBub3cgKGFuZCBs YXRlciBleHBhbmQKPj4gLS12bWNvcmUtc2l6ZSBhcyB3ZSBlbmNvdW50ZXIgbW9yZSB1c2UtY2Fz ZXMpLgo+Pgo+PiBAS2F6dWhpdG8gSGFnaW8gOiBXaGF0J3MgeW91ciBvcGluaW9uIG9uIHRoZSBh Ym92ZT8KPiAKPiBJIHdvdWxkIHByZWZlciBvbmx5IGVzdGltYXRpbmcgd2l0aCB0aGUgb3B0aW9u Lgo+IAo+IEFuZCBpZiB0aGUgd3JpdGVfYnl0ZXMgbWV0aG9kIGFib3ZlIGlzIHVzYWJsZSwgaXQg Y2FuIGJlIHNob3duIGFsc28KPiBpbiByZXBvcnQgbWVzc2FnZXMgd2hlbiB3cm90ZSB0aGUgZHVt cGZpbGUuCj4gCgpMZXQgbWUga25vdyB5b3VyIHByZWZlcnJlZCBhcHByb2FjaCBjb25zaWRlcmlu ZyBteSBjb21tZW50IGFib3ZlIGFuZCAKSSdsbCBzZW5kIG91dCBhIHYyLgoKVGhhbmtzLAoKLS0g Ckp1bGllbiBUaGllcnJ5CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18Ka2V4ZWMgbWFpbGluZyBsaXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo=