From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from [222.73.24.84] (helo=song.cn.fujitsu.com) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UcsdP-0001z7-1b for kexec@lists.infradead.org; Thu, 16 May 2013 07:29:59 +0000 Message-ID: <51948872.5090402@cn.fujitsu.com> Date: Thu, 16 May 2013 15:19:14 +0800 From: Zhang Yanfei MIME-Version: 1.0 Subject: Re: [PATCH v6 6/8] vmcore: allocate ELF note segment in the 2nd kernel vmalloc memory References: <20130515090507.28109.28956.stgit@localhost6.localdomain6> <20130515090614.28109.26492.stgit@localhost6.localdomain6> In-Reply-To: <20130515090614.28109.26492.stgit@localhost6.localdomain6> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kexec" Errors-To: kexec-bounces+dwmw2=twosheds.infradead.org@lists.infradead.org To: HATAYAMA Daisuke Cc: riel@redhat.com, hughd@google.com, jingbai.ma@hp.com, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, lisa.mitchell@hp.com, linux-mm@kvack.org, kumagai-atsushi@mxc.nes.nec.co.jp, ebiederm@xmission.com, kosaki.motohiro@jp.fujitsu.com, akpm@linux-foundation.org, walken@google.com, cpw@sgi.com, vgoyal@redhat.com 5LqOIDIwMTPlubQwNeaciDE15pelIDE3OjA2LCBIQVRBWUFNQSBEYWlzdWtlIOWGmemBkzoKPiBU aGUgcmVhc29ucyB3aHkgd2UgZG9uJ3QgYWxsb2NhdGUgRUxGIG5vdGUgc2VnbWVudCBpbiB0aGUg MXN0IGtlcm5lbAo+IChvbGQgbWVtb3J5KSBvbiBwYWdlIGJvdW5kYXJ5IGlzIHRvIGtlZXAgYmFj a3dhcmQgY29tcGF0aWJpbGl0eSBmb3IKPiBvbGQga2VybmVscywgYW5kIHRoYXQgaWYgZG9pbmcg c28sIHdlIHdhc3RlIG5vdCBhIGxpdHRsZSBtZW1vcnkgZHVlIHRvCj4gcm91bmQtdXAgb3BlcmF0 aW9uIHRvIGZpdCB0aGUgbWVtb3J5IHRvIHBhZ2UgYm91bmRhcnkgc2luY2UgbW9zdCBvZgo+IHRo ZSBidWZmZXJzIGFyZSBpbiBwZXItY3B1IGFyZWEuCj4gCj4gRUxGIG5vdGVzIGFyZSBwZXItY3B1 LCBzbyB0b3RhbCBzaXplIG9mIEVMRiBub3RlIHNlZ21lbnRzIGRlcGVuZHMgb24KPiBudW1iZXIg b2YgQ1BVcy4gVGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyBvbiB4ODZfNjQgaXMg NTE5MiwKPiBhbmQgdGhlcmUncyBhbHJlYWR5IHN5c3RlbSB3aXRoIDQxOTIgQ1BVcyBpbiBTR0ks IHdoZXJlIHRvdGFsIHNpemUKPiBhbW91bnRzIHRvIDFNQi4gVGhpcyBjYW4gYmUgbGFyZ2VyIGlu IHRoZSBuZWFyIGZ1dHVyZSBvciBwb3NzaWJseSBldmVuCj4gbm93IG9uIGFub3RoZXIgYXJjaGl0 ZWN0dXJlIHRoYXQgaGFzIGxhcmdlciBzaXplIG9mIG5vdGUgcGVyIGEgc2luZ2xlCj4gY3B1LiBU aHVzLCB0byBhdm9pZCB0aGUgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgbGFyZ2Ug YmxvY2sKPiBmYWlscywgd2UgYWxsb2NhdGUgdm1jb3JlIG9iamVjdHMgb24gdm1hbGxvYyBtZW1v cnkuCj4gCj4gVGhpcyBwYXRjaCBhZGRzIGVsZm5vdGVzX2J1ZiBhbmQgZWxmbm90ZXNfc3ogdmFy aWFibGVzIHRvIGtlZXAgcG9pbnRlcgo+IHRvIHRoZSBFTEYgbm90ZSBzZWdtZW50IGJ1ZmZlciBh bmQgaXRzIHNpemUuIFRoZXJlJ3Mgbm8gbG9uZ2VyIHRoZQo+IHZtY29yZSBvYmplY3QgdGhhdCBj b3JyZXNwb25kcyB0byB0aGUgRUxGIG5vdGUgc2VnbWVudCBpbgo+IHZtY29yZV9saXN0LiBBY2Nv cmRpbmdseSwgcmVhZF92bWNvcmUoKSBoYXMgbmV3IGNhc2UgZm9yIEVMRiBub3RlCj4gc2VnbWVu dCBhbmQgc2V0X3ZtY29yZV9saXN0X29mZnNldHNfZWxmezY0LDMyfSgpIGFuZCBvdGhlciBoZWxw ZXIKPiBmdW5jdGlvbnMgc3RhcnRzIGNhbGN1bGF0aW5nIG9mZnNldCBmcm9tIHN1bSBvZiBzaXpl IG9mIEVMRiBoZWFkZXJzCj4gYW5kIHNpemUgb2YgRUxGIG5vdGUgc2VnbWVudC4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBIQVRBWUFNQSBEYWlzdWtlIDxkLmhhdGF5YW1hQGpwLmZ1aml0c3UuY29tPgo+ IC0tLQoKQWNrZWQtYnk6IFpoYW5nIFlhbmZlaSA8emhhbmd5YW5mZWlAY24uZnVqaXRzdS5jb20+ Cgo+IAo+ICBmcy9wcm9jL3ZtY29yZS5jIHwgIDI3MyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlcyBjaGFuZ2VkLCAyMDkgaW5z ZXJ0aW9ucygrKSwgNjQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvdm1j b3JlLmMgYi9mcy9wcm9jL3ZtY29yZS5jCj4gaW5kZXggNmNmN2ZiZC4uNGUxMjFmZGEgMTAwNjQ0 Cj4gLS0tIGEvZnMvcHJvYy92bWNvcmUuYwo+ICsrKyBiL2ZzL3Byb2Mvdm1jb3JlLmMKPiBAQCAt MzQsNiArMzQsOSBAQCBzdGF0aWMgY2hhciAqZWxmY29yZWJ1ZjsKPiAgc3RhdGljIHNpemVfdCBl bGZjb3JlYnVmX3N6Owo+ICBzdGF0aWMgc2l6ZV90IGVsZmNvcmVidWZfc3pfb3JpZzsKPiAgCj4g K3N0YXRpYyBjaGFyICplbGZub3Rlc19idWY7Cj4gK3N0YXRpYyBzaXplX3QgZWxmbm90ZXNfc3o7 Cj4gKwo+ICAvKiBUb3RhbCBzaXplIG9mIHZtY29yZSBmaWxlLiAqLwo+ICBzdGF0aWMgdTY0IHZt Y29yZV9zaXplOwo+ICAKPiBAQCAtMTU0LDYgKzE1NywyNiBAQCBzdGF0aWMgc3NpemVfdCByZWFk X3ZtY29yZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKPiAgCQkJcmV0 dXJuIGFjYzsKPiAgCX0KPiAgCj4gKwkvKiBSZWFkIEVsZiBub3RlIHNlZ21lbnQgKi8KPiArCWlm ICgqZnBvcyA8IGVsZmNvcmVidWZfc3ogKyBlbGZub3Rlc19zeikgewo+ICsJCXZvaWQgKmthZGRy Owo+ICsKPiArCQl0c3ogPSBlbGZjb3JlYnVmX3N6ICsgZWxmbm90ZXNfc3ogLSAqZnBvczsKPiAr CQlpZiAoYnVmbGVuIDwgdHN6KQo+ICsJCQl0c3ogPSBidWZsZW47Cj4gKwkJa2FkZHIgPSBlbGZu b3Rlc19idWYgKyAqZnBvcyAtIGVsZmNvcmVidWZfc3o7Cj4gKwkJaWYgKGNvcHlfdG9fdXNlcihi dWZmZXIsIGthZGRyLCB0c3opKQo+ICsJCQlyZXR1cm4gLUVGQVVMVDsKPiArCQlidWZsZW4gLT0g dHN6Owo+ICsJCSpmcG9zICs9IHRzejsKPiArCQlidWZmZXIgKz0gdHN6Owo+ICsJCWFjYyArPSB0 c3o7Cj4gKwo+ICsJCS8qIGxlYXZlIG5vdyBpZiBmaWxsZWQgYnVmZmVyIGFscmVhZHkgKi8KPiAr CQlpZiAoYnVmbGVuID09IDApCj4gKwkJCXJldHVybiBhY2M7Cj4gKwl9Cj4gKwo+ICAJbGlzdF9m b3JfZWFjaF9lbnRyeShtLCAmdm1jb3JlX2xpc3QsIGxpc3QpIHsKPiAgCQlpZiAoKmZwb3MgPCBt LT5vZmZzZXQgKyBtLT5zaXplKSB7Cj4gIAkJCXRzeiA9IG0tPm9mZnNldCArIG0tPnNpemUgLSAq ZnBvczsKPiBAQCAtMjIxLDIzICsyNDQsMzMgQEAgc3RhdGljIHU2NCBfX2luaXQgZ2V0X3ZtY29y ZV9zaXplX2VsZjMyKGNoYXIgKmVsZnB0ciwgc2l6ZV90IGVsZnN6KQo+ICAJcmV0dXJuIHNpemU7 Cj4gIH0KPiAgCj4gLS8qIE1lcmdlcyBhbGwgdGhlIFBUX05PVEUgaGVhZGVycyBpbnRvIG9uZS4g Ki8KPiAtc3RhdGljIGludCBfX2luaXQgbWVyZ2Vfbm90ZV9oZWFkZXJzX2VsZjY0KGNoYXIgKmVs ZnB0ciwgc2l6ZV90ICplbGZzeiwKPiAtCQkJCQkJc3RydWN0IGxpc3RfaGVhZCAqdmNfbGlzdCkK PiArLyoqCj4gKyAqIHByb2Nlc3Nfbm90ZV9oZWFkZXJzX2VsZjY0IC0gUGVyZm9ybSBhIHZhcmll dHkgb2YgcHJvY2Vzc2luZyBvbiBFTEYKPiArICogbm90ZSBzZWdtZW50cyBhY2NvcmRpbmcgdG8g dGhlIGNvbWJpbmF0aW9uIG9mIGZ1bmN0aW9uIGFyZ3VtZW50cy4KPiArICoKPiArICogQGVoZHJf cHRyICAtIEVMRiBoZWFkZXIgYnVmZmVyCj4gKyAqIEBucl9ub3RlcyAgLSB0aGUgbnVtYmVyIG9m IHByb2dyYW0gaGVhZGVyIGVudHJpZXMgb2YgUFRfTk9URSB0eXBlCj4gKyAqIEBub3Rlc19zeiAg LSB0b3RhbCBzaXplIG9mIEVMRiBub3RlIHNlZ21lbnQKPiArICogQG5vdGVzX2J1ZiAtIGJ1ZmZl ciBpbnRvIHdoaWNoIEVMRiBub3RlIHNlZ21lbnQgaXMgY29waWVkCj4gKyAqCj4gKyAqIEFzc3Vt ZSBAZWhkcl9wdHIgaXMgYWx3YXlzIG5vdCBOVUxMLiBJZiBAbnJfbm90ZXMgaXMgbm90IE5VTEws IHRoZW4KPiArICogdGhlIG51bWJlciBvZiBwcm9ncmFtIGhlYWRlciBlbnRyaWVzIG9mIFBUX05P VEUgdHlwZSBpcyBhc3NpZ25lZCB0bwo+ICsgKiBAbnJfbm90ZXMuIElmIEBub3Rlc19zeiBpcyBu b3QgTlVMTCwgdGhlbiB0b3RhbCBzaXplIG9mIEVMRiBub3RlCj4gKyAqIHNlZ21lbnQsIGhlYWRl ciBwYXJ0IHBsdXMgZGF0YSBwYXJ0LCBpcyBhc3NpZ25lZCB0byBAbm90ZXNfc3ouIElmCj4gKyAq IEBub3Rlc19idWYgaXMgbm90IE5VTEwsIHRoZW4gRUxGIG5vdGUgc2VnbWVudCBpcyBjb3BpZWQg aW50bwo+ICsgKiBAbm90ZXNfYnVmLgo+ICsgKi8KPiArc3RhdGljIGludCBfX2luaXQgcHJvY2Vz c19ub3RlX2hlYWRlcnNfZWxmNjQoY29uc3QgRWxmNjRfRWhkciAqZWhkcl9wdHIsCj4gKwkJCQkJ ICAgICBpbnQgKm5yX25vdGVzLCB1NjQgKm5vdGVzX3N6LAo+ICsJCQkJCSAgICAgY2hhciAqbm90 ZXNfYnVmKQo+ICB7Cj4gIAlpbnQgaSwgbnJfcHRub3RlPTAsIHJjPTA7Cj4gLQljaGFyICp0bXA7 Cj4gLQlFbGY2NF9FaGRyICplaGRyX3B0cjsKPiAtCUVsZjY0X1BoZHIgcGhkciwgKnBoZHJfcHRy Owo+ICsJRWxmNjRfUGhkciAqcGhkcl9wdHIgPSAoRWxmNjRfUGhkciopKGVoZHJfcHRyICsgMSk7 Cj4gIAlFbGY2NF9OaGRyICpuaGRyX3B0cjsKPiAtCXU2NCBwaGRyX3N6ID0gMCwgbm90ZV9vZmY7 Cj4gKwl1NjQgcGhkcl9zeiA9IDA7Cj4gIAo+IC0JZWhkcl9wdHIgPSAoRWxmNjRfRWhkciAqKWVs ZnB0cjsKPiAtCXBoZHJfcHRyID0gKEVsZjY0X1BoZHIqKShlbGZwdHIgKyBzaXplb2YoRWxmNjRf RWhkcikpOwo+ICAJZm9yIChpID0gMDsgaSA8IGVoZHJfcHRyLT5lX3BobnVtOyBpKyssIHBoZHJf cHRyKyspIHsKPiAtCQlpbnQgajsKPiAgCQl2b2lkICpub3Rlc19zZWN0aW9uOwo+IC0JCXN0cnVj dCB2bWNvcmUgKm5ldzsKPiAgCQl1NjQgb2Zmc2V0LCBtYXhfc3osIHN6LCByZWFsX3N6ID0gMDsK PiAgCQlpZiAocGhkcl9wdHItPnBfdHlwZSAhPSBQVF9OT1RFKQo+ICAJCQljb250aW51ZTsKPiBA QCAtMjUzLDcgKzI4Niw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1lcmdlX25vdGVfaGVhZGVyc19l bGY2NChjaGFyICplbGZwdHIsIHNpemVfdCAqZWxmc3osCj4gIAkJCXJldHVybiByYzsKPiAgCQl9 Cj4gIAkJbmhkcl9wdHIgPSBub3Rlc19zZWN0aW9uOwo+IC0JCWZvciAoaiA9IDA7IGogPCBtYXhf c3o7IGogKz0gc3opIHsKPiArCQl3aGlsZSAocmVhbF9zeiA8IG1heF9zeikgewo+ICAJCQlpZiAo bmhkcl9wdHItPm5fbmFtZXN6ID09IDApCj4gIAkJCQlicmVhazsKPiAgCQkJc3ogPSBzaXplb2Yo RWxmNjRfTmhkcikgKwo+IEBAIC0yNjIsMjAgKzI5NSw2OCBAQCBzdGF0aWMgaW50IF9faW5pdCBt ZXJnZV9ub3RlX2hlYWRlcnNfZWxmNjQoY2hhciAqZWxmcHRyLCBzaXplX3QgKmVsZnN6LAo+ICAJ CQlyZWFsX3N6ICs9IHN6Owo+ICAJCQluaGRyX3B0ciA9IChFbGY2NF9OaGRyKikoKGNoYXIqKW5o ZHJfcHRyICsgc3opOwo+ICAJCX0KPiAtCj4gLQkJLyogQWRkIHRoaXMgY29udGlndW91cyBjaHVu ayBvZiBub3RlcyBzZWN0aW9uIHRvIHZtY29yZSBsaXN0LiovCj4gLQkJbmV3ID0gZ2V0X25ld19l bGVtZW50KCk7Cj4gLQkJaWYgKCFuZXcpIHsKPiAtCQkJa2ZyZWUobm90ZXNfc2VjdGlvbik7Cj4g LQkJCXJldHVybiAtRU5PTUVNOwo+ICsJCWlmIChub3Rlc19idWYpIHsKPiArCQkJb2Zmc2V0ID0g cGhkcl9wdHItPnBfb2Zmc2V0Owo+ICsJCQlyYyA9IHJlYWRfZnJvbV9vbGRtZW0obm90ZXNfYnVm ICsgcGhkcl9zeiwgcmVhbF9zeiwKPiArCQkJCQkgICAgICAmb2Zmc2V0LCAwKTsKPiArCQkJaWYg KHJjIDwgMCkgewo+ICsJCQkJa2ZyZWUobm90ZXNfc2VjdGlvbik7Cj4gKwkJCQlyZXR1cm4gcmM7 Cj4gKwkJCX0KPiAgCQl9Cj4gLQkJbmV3LT5wYWRkciA9IHBoZHJfcHRyLT5wX29mZnNldDsKPiAt CQluZXctPnNpemUgPSByZWFsX3N6Owo+IC0JCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgdmNf bGlzdCk7Cj4gIAkJcGhkcl9zeiArPSByZWFsX3N6Owo+ICAJCWtmcmVlKG5vdGVzX3NlY3Rpb24p Owo+ICAJfQo+ICAKPiArCWlmIChucl9ub3RlcykKPiArCQkqbnJfbm90ZXMgPSBucl9wdG5vdGU7 Cj4gKwlpZiAobm90ZXNfc3opCj4gKwkJKm5vdGVzX3N6ID0gcGhkcl9zejsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2luaXQgZ2V0X25vdGVfbnVtYmVyX2FuZF9z aXplX2VsZjY0KGNvbnN0IEVsZjY0X0VoZHIgKmVoZHJfcHRyLAo+ICsJCQkJCQkgaW50ICpucl9w dG5vdGUsIHU2NCAqcGhkcl9zeikKPiArewo+ICsJcmV0dXJuIHByb2Nlc3Nfbm90ZV9oZWFkZXJz X2VsZjY0KGVoZHJfcHRyLCBucl9wdG5vdGUsIHBoZHJfc3osIE5VTEwpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IF9faW5pdCBjb3B5X25vdGVzX2VsZjY0KGNvbnN0IEVsZjY0X0VoZHIgKmVoZHJf cHRyLCBjaGFyICpub3Rlc19idWYpCj4gK3sKPiArCXJldHVybiBwcm9jZXNzX25vdGVfaGVhZGVy c19lbGY2NChlaGRyX3B0ciwgTlVMTCwgTlVMTCwgbm90ZXNfYnVmKTsKPiArfQo+ICsKPiArLyog TWVyZ2VzIGFsbCB0aGUgUFRfTk9URSBoZWFkZXJzIGludG8gb25lLiAqLwo+ICtzdGF0aWMgaW50 IF9faW5pdCBtZXJnZV9ub3RlX2hlYWRlcnNfZWxmNjQoY2hhciAqZWxmcHRyLCBzaXplX3QgKmVs ZnN6LAo+ICsJCQkJCSAgIGNoYXIgKipub3Rlc19idWYsIHNpemVfdCAqbm90ZXNfc3opCj4gK3sK PiArCWludCBpLCBucl9wdG5vdGU9MCwgcmM9MDsKPiArCWNoYXIgKnRtcDsKPiArCUVsZjY0X0Vo ZHIgKmVoZHJfcHRyOwo+ICsJRWxmNjRfUGhkciBwaGRyOwo+ICsJdTY0IHBoZHJfc3ogPSAwLCBu b3RlX29mZjsKPiArCXN0cnVjdCB2bV9zdHJ1Y3QgKnZtOwo+ICsKPiArCWVoZHJfcHRyID0gKEVs ZjY0X0VoZHIgKillbGZwdHI7Cj4gKwo+ICsJcmMgPSBnZXRfbm90ZV9udW1iZXJfYW5kX3NpemVf ZWxmNjQoZWhkcl9wdHIsICZucl9wdG5vdGUsICZwaGRyX3N6KTsKPiArCWlmIChyYyA8IDApCj4g KwkJcmV0dXJuIHJjOwo+ICsKPiArCSpub3Rlc19zeiA9IHJvdW5kdXAocGhkcl9zeiwgUEFHRV9T SVpFKTsKPiArCSpub3Rlc19idWYgPSB2emFsbG9jKCpub3Rlc19zeik7Cj4gKwlpZiAoISpub3Rl c19idWYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJdm0gPSBmaW5kX3ZtX2FyZWEoKm5v dGVzX2J1Zik7Cj4gKwlCVUdfT04oIXZtKTsKPiArCXZtLT5mbGFncyB8PSBWTV9VU0VSTUFQOwo+ ICsKPiArCXJjID0gY29weV9ub3Rlc19lbGY2NChlaGRyX3B0ciwgKm5vdGVzX2J1Zik7Cj4gKwlp ZiAocmMgPCAwKQo+ICsJCXJldHVybiByYzsKPiArCj4gIAkvKiBQcmVwYXJlIG1lcmdlZCBQVF9O T1RFIHByb2dyYW0gaGVhZGVyLiAqLwo+ICAJcGhkci5wX3R5cGUgICAgPSBQVF9OT1RFOwo+ICAJ cGhkci5wX2ZsYWdzICAgPSAwOwo+IEBAIC0zMDQsMjMgKzM4NSwzMyBAQCBzdGF0aWMgaW50IF9f aW5pdCBtZXJnZV9ub3RlX2hlYWRlcnNfZWxmNjQoY2hhciAqZWxmcHRyLCBzaXplX3QgKmVsZnN6 LAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLS8qIE1lcmdlcyBhbGwgdGhlIFBUX05PVEUgaGVh ZGVycyBpbnRvIG9uZS4gKi8KPiAtc3RhdGljIGludCBfX2luaXQgbWVyZ2Vfbm90ZV9oZWFkZXJz X2VsZjMyKGNoYXIgKmVsZnB0ciwgc2l6ZV90ICplbGZzeiwKPiAtCQkJCQkJc3RydWN0IGxpc3Rf aGVhZCAqdmNfbGlzdCkKPiArLyoqCj4gKyAqIHByb2Nlc3Nfbm90ZV9oZWFkZXJzX2VsZjMyIC0g UGVyZm9ybSBhIHZhcmlldHkgb2YgcHJvY2Vzc2luZyBvbiBFTEYKPiArICogbm90ZSBzZWdtZW50 cyBhY2NvcmRpbmcgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIGZ1bmN0aW9uIGFyZ3VtZW50cy4KPiAr ICoKPiArICogQGVoZHJfcHRyICAtIEVMRiBoZWFkZXIgYnVmZmVyCj4gKyAqIEBucl9ub3RlcyAg LSB0aGUgbnVtYmVyIG9mIHByb2dyYW0gaGVhZGVyIGVudHJpZXMgb2YgUFRfTk9URSB0eXBlCj4g KyAqIEBub3Rlc19zeiAgLSB0b3RhbCBzaXplIG9mIEVMRiBub3RlIHNlZ21lbnQKPiArICogQG5v dGVzX2J1ZiAtIGJ1ZmZlciBpbnRvIHdoaWNoIEVMRiBub3RlIHNlZ21lbnQgaXMgY29waWVkCj4g KyAqCj4gKyAqIEFzc3VtZSBAZWhkcl9wdHIgaXMgYWx3YXlzIG5vdCBOVUxMLiBJZiBAbnJfbm90 ZXMgaXMgbm90IE5VTEwsIHRoZW4KPiArICogdGhlIG51bWJlciBvZiBwcm9ncmFtIGhlYWRlciBl bnRyaWVzIG9mIFBUX05PVEUgdHlwZSBpcyBhc3NpZ25lZCB0bwo+ICsgKiBAbnJfbm90ZXMuIElm IEBub3Rlc19zeiBpcyBub3QgTlVMTCwgdGhlbiB0b3RhbCBzaXplIG9mIEVMRiBub3RlCj4gKyAq IHNlZ21lbnQsIGhlYWRlciBwYXJ0IHBsdXMgZGF0YSBwYXJ0LCBpcyBhc3NpZ25lZCB0byBAbm90 ZXNfc3ouIElmCj4gKyAqIEBub3Rlc19idWYgaXMgbm90IE5VTEwsIHRoZW4gRUxGIG5vdGUgc2Vn bWVudCBpcyBjb3BpZWQgaW50bwo+ICsgKiBAbm90ZXNfYnVmLgo+ICsgKi8KPiArc3RhdGljIGlu dCBfX2luaXQgcHJvY2Vzc19ub3RlX2hlYWRlcnNfZWxmMzIoY29uc3QgRWxmMzJfRWhkciAqZWhk cl9wdHIsCj4gKwkJCQkJICAgICBpbnQgKm5yX25vdGVzLCB1NjQgKm5vdGVzX3N6LAo+ICsJCQkJ CSAgICAgY2hhciAqbm90ZXNfYnVmKQo+ICB7Cj4gIAlpbnQgaSwgbnJfcHRub3RlPTAsIHJjPTA7 Cj4gLQljaGFyICp0bXA7Cj4gLQlFbGYzMl9FaGRyICplaGRyX3B0cjsKPiAtCUVsZjMyX1BoZHIg cGhkciwgKnBoZHJfcHRyOwo+ICsJRWxmMzJfUGhkciAqcGhkcl9wdHIgPSAoRWxmMzJfUGhkciop KGVoZHJfcHRyICsgMSk7Cj4gIAlFbGYzMl9OaGRyICpuaGRyX3B0cjsKPiAtCXU2NCBwaGRyX3N6 ID0gMCwgbm90ZV9vZmY7Cj4gKwl1NjQgcGhkcl9zeiA9IDA7Cj4gIAo+IC0JZWhkcl9wdHIgPSAo RWxmMzJfRWhkciAqKWVsZnB0cjsKPiAtCXBoZHJfcHRyID0gKEVsZjMyX1BoZHIqKShlbGZwdHIg KyBzaXplb2YoRWxmMzJfRWhkcikpOwo+ICAJZm9yIChpID0gMDsgaSA8IGVoZHJfcHRyLT5lX3Bo bnVtOyBpKyssIHBoZHJfcHRyKyspIHsKPiAtCQlpbnQgajsKPiAgCQl2b2lkICpub3Rlc19zZWN0 aW9uOwo+IC0JCXN0cnVjdCB2bWNvcmUgKm5ldzsKPiAgCQl1NjQgb2Zmc2V0LCBtYXhfc3osIHN6 LCByZWFsX3N6ID0gMDsKPiAgCQlpZiAocGhkcl9wdHItPnBfdHlwZSAhPSBQVF9OT1RFKQo+ICAJ CQljb250aW51ZTsKPiBAQCAtMzM2LDcgKzQyNyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1lcmdl X25vdGVfaGVhZGVyc19lbGYzMihjaGFyICplbGZwdHIsIHNpemVfdCAqZWxmc3osCj4gIAkJCXJl dHVybiByYzsKPiAgCQl9Cj4gIAkJbmhkcl9wdHIgPSBub3Rlc19zZWN0aW9uOwo+IC0JCWZvciAo aiA9IDA7IGogPCBtYXhfc3o7IGogKz0gc3opIHsKPiArCQl3aGlsZSAocmVhbF9zeiA8IG1heF9z eikgewo+ICAJCQlpZiAobmhkcl9wdHItPm5fbmFtZXN6ID09IDApCj4gIAkJCQlicmVhazsKPiAg CQkJc3ogPSBzaXplb2YoRWxmMzJfTmhkcikgKwo+IEBAIC0zNDUsMjAgKzQzNiw2OCBAQCBzdGF0 aWMgaW50IF9faW5pdCBtZXJnZV9ub3RlX2hlYWRlcnNfZWxmMzIoY2hhciAqZWxmcHRyLCBzaXpl X3QgKmVsZnN6LAo+ICAJCQlyZWFsX3N6ICs9IHN6Owo+ICAJCQluaGRyX3B0ciA9IChFbGYzMl9O aGRyKikoKGNoYXIqKW5oZHJfcHRyICsgc3opOwo+ICAJCX0KPiAtCj4gLQkJLyogQWRkIHRoaXMg Y29udGlndW91cyBjaHVuayBvZiBub3RlcyBzZWN0aW9uIHRvIHZtY29yZSBsaXN0LiovCj4gLQkJ bmV3ID0gZ2V0X25ld19lbGVtZW50KCk7Cj4gLQkJaWYgKCFuZXcpIHsKPiAtCQkJa2ZyZWUobm90 ZXNfc2VjdGlvbik7Cj4gLQkJCXJldHVybiAtRU5PTUVNOwo+ICsJCWlmIChub3Rlc19idWYpIHsK PiArCQkJb2Zmc2V0ID0gcGhkcl9wdHItPnBfb2Zmc2V0Owo+ICsJCQlyYyA9IHJlYWRfZnJvbV9v bGRtZW0obm90ZXNfYnVmICsgcGhkcl9zeiwgcmVhbF9zeiwKPiArCQkJCQkgICAgICAmb2Zmc2V0 LCAwKTsKPiArCQkJaWYgKHJjIDwgMCkgewo+ICsJCQkJa2ZyZWUobm90ZXNfc2VjdGlvbik7Cj4g KwkJCQlyZXR1cm4gcmM7Cj4gKwkJCX0KPiAgCQl9Cj4gLQkJbmV3LT5wYWRkciA9IHBoZHJfcHRy LT5wX29mZnNldDsKPiAtCQluZXctPnNpemUgPSByZWFsX3N6Owo+IC0JCWxpc3RfYWRkX3RhaWwo Jm5ldy0+bGlzdCwgdmNfbGlzdCk7Cj4gIAkJcGhkcl9zeiArPSByZWFsX3N6Owo+ICAJCWtmcmVl KG5vdGVzX3NlY3Rpb24pOwo+ICAJfQo+ICAKPiArCWlmIChucl9ub3RlcykKPiArCQkqbnJfbm90 ZXMgPSBucl9wdG5vdGU7Cj4gKwlpZiAobm90ZXNfc3opCj4gKwkJKm5vdGVzX3N6ID0gcGhkcl9z ejsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2luaXQgZ2V0X25v dGVfbnVtYmVyX2FuZF9zaXplX2VsZjMyKGNvbnN0IEVsZjMyX0VoZHIgKmVoZHJfcHRyLAo+ICsJ CQkJCQkgaW50ICpucl9wdG5vdGUsIHU2NCAqcGhkcl9zeikKPiArewo+ICsJcmV0dXJuIHByb2Nl c3Nfbm90ZV9oZWFkZXJzX2VsZjMyKGVoZHJfcHRyLCBucl9wdG5vdGUsIHBoZHJfc3osIE5VTEwp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCBjb3B5X25vdGVzX2VsZjMyKGNvbnN0IEVs ZjMyX0VoZHIgKmVoZHJfcHRyLCBjaGFyICpub3Rlc19idWYpCj4gK3sKPiArCXJldHVybiBwcm9j ZXNzX25vdGVfaGVhZGVyc19lbGYzMihlaGRyX3B0ciwgTlVMTCwgTlVMTCwgbm90ZXNfYnVmKTsK PiArfQo+ICsKPiArLyogTWVyZ2VzIGFsbCB0aGUgUFRfTk9URSBoZWFkZXJzIGludG8gb25lLiAq Lwo+ICtzdGF0aWMgaW50IF9faW5pdCBtZXJnZV9ub3RlX2hlYWRlcnNfZWxmMzIoY2hhciAqZWxm cHRyLCBzaXplX3QgKmVsZnN6LAo+ICsJCQkJCSAgIGNoYXIgKipub3Rlc19idWYsIHNpemVfdCAq bm90ZXNfc3opCj4gK3sKPiArCWludCBpLCBucl9wdG5vdGU9MCwgcmM9MDsKPiArCWNoYXIgKnRt cDsKPiArCUVsZjMyX0VoZHIgKmVoZHJfcHRyOwo+ICsJRWxmMzJfUGhkciBwaGRyOwo+ICsJdTY0 IHBoZHJfc3ogPSAwLCBub3RlX29mZjsKPiArCXN0cnVjdCB2bV9zdHJ1Y3QgKnZtOwo+ICsKPiAr CWVoZHJfcHRyID0gKEVsZjMyX0VoZHIgKillbGZwdHI7Cj4gKwo+ICsJcmMgPSBnZXRfbm90ZV9u dW1iZXJfYW5kX3NpemVfZWxmMzIoZWhkcl9wdHIsICZucl9wdG5vdGUsICZwaGRyX3N6KTsKPiAr CWlmIChyYyA8IDApCj4gKwkJcmV0dXJuIHJjOwo+ICsKPiArCSpub3Rlc19zeiA9IHJvdW5kdXAo cGhkcl9zeiwgUEFHRV9TSVpFKTsKPiArCSpub3Rlc19idWYgPSB2emFsbG9jKCpub3Rlc19zeik7 Cj4gKwlpZiAoISpub3Rlc19idWYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJdm0gPSBm aW5kX3ZtX2FyZWEoKm5vdGVzX2J1Zik7Cj4gKwlCVUdfT04oIXZtKTsKPiArCXZtLT5mbGFncyB8 PSBWTV9VU0VSTUFQOwo+ICsKPiArCXJjID0gY29weV9ub3Rlc19lbGYzMihlaGRyX3B0ciwgKm5v dGVzX2J1Zik7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCXJldHVybiByYzsKPiArCj4gIAkvKiBQcmVw YXJlIG1lcmdlZCBQVF9OT1RFIHByb2dyYW0gaGVhZGVyLiAqLwo+ICAJcGhkci5wX3R5cGUgICAg PSBQVF9OT1RFOwo+ICAJcGhkci5wX2ZsYWdzICAgPSAwOwo+IEBAIC0zOTEsNiArNTMwLDcgQEAg c3RhdGljIGludCBfX2luaXQgbWVyZ2Vfbm90ZV9oZWFkZXJzX2VsZjMyKGNoYXIgKmVsZnB0ciwg c2l6ZV90ICplbGZzeiwKPiAgICogdGhlIG5ldyBvZmZzZXQgZmllbGRzIG9mIGV4cG9ydGVkIHBy b2dyYW0gaGVhZGVycy4gKi8KPiAgc3RhdGljIGludCBfX2luaXQgcHJvY2Vzc19wdGxvYWRfcHJv Z3JhbV9oZWFkZXJzX2VsZjY0KGNoYXIgKmVsZnB0ciwKPiAgCQkJCQkJc2l6ZV90IGVsZnN6LAo+ ICsJCQkJCQlzaXplX3QgZWxmbm90ZXNfc3osCj4gIAkJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnZj X2xpc3QpCj4gIHsKPiAgCWludCBpOwo+IEBAIC00MDIsOCArNTQyLDggQEAgc3RhdGljIGludCBf X2luaXQgcHJvY2Vzc19wdGxvYWRfcHJvZ3JhbV9oZWFkZXJzX2VsZjY0KGNoYXIgKmVsZnB0ciwK PiAgCWVoZHJfcHRyID0gKEVsZjY0X0VoZHIgKillbGZwdHI7Cj4gIAlwaGRyX3B0ciA9IChFbGY2 NF9QaGRyKikoZWxmcHRyICsgc2l6ZW9mKEVsZjY0X0VoZHIpKTsgLyogUFRfTk9URSBoZHIgKi8K PiAgCj4gLQkvKiBGaXJzdCBwcm9ncmFtIGhlYWRlciBpcyBQVF9OT1RFIGhlYWRlci4gKi8KPiAt CXZtY29yZV9vZmYgPSBlbGZzeiArIHJvdW5kdXAocGhkcl9wdHItPnBfbWVtc3osIFBBR0VfU0la RSk7Cj4gKwkvKiBTa2lwIEVsZiBoZWFkZXIsIHByb2dyYW0gaGVhZGVycyBhbmQgRWxmIG5vdGUg c2VnbWVudC4gKi8KPiArCXZtY29yZV9vZmYgPSBlbGZzeiArIGVsZm5vdGVzX3N6Owo+ICAKPiAg CWZvciAoaSA9IDA7IGkgPCBlaGRyX3B0ci0+ZV9waG51bTsgaSsrLCBwaGRyX3B0cisrKSB7Cj4g IAkJdTY0IHBhZGRyLCBzdGFydCwgZW5kLCBzaXplOwo+IEBAIC00MzMsNiArNTczLDcgQEAgc3Rh dGljIGludCBfX2luaXQgcHJvY2Vzc19wdGxvYWRfcHJvZ3JhbV9oZWFkZXJzX2VsZjY0KGNoYXIg KmVsZnB0ciwKPiAgCj4gIHN0YXRpYyBpbnQgX19pbml0IHByb2Nlc3NfcHRsb2FkX3Byb2dyYW1f aGVhZGVyc19lbGYzMihjaGFyICplbGZwdHIsCj4gIAkJCQkJCXNpemVfdCBlbGZzeiwKPiArCQkJ CQkJc2l6ZV90IGVsZm5vdGVzX3N6LAo+ICAJCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICp2Y19saXN0 KQo+ICB7Cj4gIAlpbnQgaTsKPiBAQCAtNDQ0LDggKzU4NSw4IEBAIHN0YXRpYyBpbnQgX19pbml0 IHByb2Nlc3NfcHRsb2FkX3Byb2dyYW1faGVhZGVyc19lbGYzMihjaGFyICplbGZwdHIsCj4gIAll aGRyX3B0ciA9IChFbGYzMl9FaGRyICopZWxmcHRyOwo+ICAJcGhkcl9wdHIgPSAoRWxmMzJfUGhk ciopKGVsZnB0ciArIHNpemVvZihFbGYzMl9FaGRyKSk7IC8qIFBUX05PVEUgaGRyICovCj4gIAo+ IC0JLyogRmlyc3QgcHJvZ3JhbSBoZWFkZXIgaXMgUFRfTk9URSBoZWFkZXIuICovCj4gLQl2bWNv cmVfb2ZmID0gZWxmc3ogKyByb3VuZHVwKHBoZHJfcHRyLT5wX21lbXN6LCBQQUdFX1NJWkUpOwo+ ICsJLyogU2tpcCBFbGYgaGVhZGVyLCBwcm9ncmFtIGhlYWRlcnMgYW5kIEVsZiBub3RlIHNlZ21l bnQuICovCj4gKwl2bWNvcmVfb2ZmID0gZWxmc3ogKyBlbGZub3Rlc19zejsKPiAgCj4gIAlmb3Ig KGkgPSAwOyBpIDwgZWhkcl9wdHItPmVfcGhudW07IGkrKywgcGhkcl9wdHIrKykgewo+ICAJCXU2 NCBwYWRkciwgc3RhcnQsIGVuZCwgc2l6ZTsKPiBAQCAtNDc0LDE3ICs2MTUsMTUgQEAgc3RhdGlj IGludCBfX2luaXQgcHJvY2Vzc19wdGxvYWRfcHJvZ3JhbV9oZWFkZXJzX2VsZjMyKGNoYXIgKmVs ZnB0ciwKPiAgfQo+ICAKPiAgLyogU2V0cyBvZmZzZXQgZmllbGRzIG9mIHZtY29yZSBlbGVtZW50 cy4gKi8KPiAtc3RhdGljIHZvaWQgX19pbml0IHNldF92bWNvcmVfbGlzdF9vZmZzZXRzX2VsZjY0 KGNoYXIgKmVsZnB0ciwgc2l6ZV90IGVsZnN6LAo+ICtzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3Zt Y29yZV9saXN0X29mZnNldHNfZWxmNjQoc2l6ZV90IGVsZnN6LAo+ICsJCQkJCQlzaXplX3QgZWxm bm90ZXNfc3osCj4gIAkJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnZjX2xpc3QpCj4gIHsKPiAgCWxv ZmZfdCB2bWNvcmVfb2ZmOwo+IC0JRWxmNjRfRWhkciAqZWhkcl9wdHI7Cj4gIAlzdHJ1Y3Qgdm1j b3JlICptOwo+ICAKPiAtCWVoZHJfcHRyID0gKEVsZjY0X0VoZHIgKillbGZwdHI7Cj4gLQo+IC0J LyogU2tpcCBFbGYgaGVhZGVyIGFuZCBwcm9ncmFtIGhlYWRlcnMuICovCj4gLQl2bWNvcmVfb2Zm ID0gZWxmc3o7Cj4gKwkvKiBTa2lwIEVsZiBoZWFkZXIsIHByb2dyYW0gaGVhZGVycyBhbmQgRWxm IG5vdGUgc2VnbWVudC4gKi8KPiArCXZtY29yZV9vZmYgPSBlbGZzeiArIGVsZm5vdGVzX3N6Owo+ ICAKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnkobSwgdmNfbGlzdCwgbGlzdCkgewo+ICAJCW0tPm9m ZnNldCA9IHZtY29yZV9vZmY7Cj4gQEAgLTQ5MywxNyArNjMyLDE1IEBAIHN0YXRpYyB2b2lkIF9f aW5pdCBzZXRfdm1jb3JlX2xpc3Rfb2Zmc2V0c19lbGY2NChjaGFyICplbGZwdHIsIHNpemVfdCBl bGZzeiwKPiAgfQo+ICAKPiAgLyogU2V0cyBvZmZzZXQgZmllbGRzIG9mIHZtY29yZSBlbGVtZW50 cy4gKi8KPiAtc3RhdGljIHZvaWQgX19pbml0IHNldF92bWNvcmVfbGlzdF9vZmZzZXRzX2VsZjMy KGNoYXIgKmVsZnB0ciwgc2l6ZV90IGVsZnN6LAo+ICtzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3Zt Y29yZV9saXN0X29mZnNldHNfZWxmMzIoc2l6ZV90IGVsZnN6LAo+ICsJCQkJCQlzaXplX3QgZWxm bm90ZXNfc3osCj4gIAkJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnZjX2xpc3QpCj4gIHsKPiAgCWxv ZmZfdCB2bWNvcmVfb2ZmOwo+IC0JRWxmMzJfRWhkciAqZWhkcl9wdHI7Cj4gIAlzdHJ1Y3Qgdm1j b3JlICptOwo+ICAKPiAtCWVoZHJfcHRyID0gKEVsZjMyX0VoZHIgKillbGZwdHI7Cj4gLQo+IC0J LyogU2tpcCBFbGYgaGVhZGVyIGFuZCBwcm9ncmFtIGhlYWRlcnMuICovCj4gLQl2bWNvcmVfb2Zm ID0gZWxmc3o7Cj4gKwkvKiBTa2lwIEVsZiBoZWFkZXIsIHByb2dyYW0gaGVhZGVycyBhbmQgRWxm IG5vdGUgc2VnbWVudC4gKi8KPiArCXZtY29yZV9vZmYgPSBlbGZzeiArIGVsZm5vdGVzX3N6Owo+ ICAKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnkobSwgdmNfbGlzdCwgbGlzdCkgewo+ICAJCW0tPm9m ZnNldCA9IHZtY29yZV9vZmY7Cj4gQEAgLTU1NCwyMCArNjkxLDIzIEBAIHN0YXRpYyBpbnQgX19p bml0IHBhcnNlX2NyYXNoX2VsZjY0X2hlYWRlcnModm9pZCkKPiAgCX0KPiAgCj4gIAkvKiBNZXJn ZSBhbGwgUFRfTk9URSBoZWFkZXJzIGludG8gb25lLiAqLwo+IC0JcmMgPSBtZXJnZV9ub3RlX2hl YWRlcnNfZWxmNjQoZWxmY29yZWJ1ZiwgJmVsZmNvcmVidWZfc3osICZ2bWNvcmVfbGlzdCk7Cj4g KwlyYyA9IG1lcmdlX25vdGVfaGVhZGVyc19lbGY2NChlbGZjb3JlYnVmLCAmZWxmY29yZWJ1Zl9z eiwKPiArCQkJCSAgICAgICZlbGZub3Rlc19idWYsICZlbGZub3Rlc19zeik7Cj4gIAlpZiAocmMp IHsKPiAgCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWVsZmNvcmVidWYsCj4gIAkJCSAgIGdl dF9vcmRlcihlbGZjb3JlYnVmX3N6X29yaWcpKTsKPiAgCQlyZXR1cm4gcmM7Cj4gIAl9Cj4gIAly YyA9IHByb2Nlc3NfcHRsb2FkX3Byb2dyYW1faGVhZGVyc19lbGY2NChlbGZjb3JlYnVmLCBlbGZj b3JlYnVmX3N6LAo+IC0JCQkJCQkJJnZtY29yZV9saXN0KTsKPiArCQkJCQkJICBlbGZub3Rlc19z eiwKPiArCQkJCQkJICAmdm1jb3JlX2xpc3QpOwo+ICAJaWYgKHJjKSB7Cj4gIAkJZnJlZV9wYWdl cygodW5zaWduZWQgbG9uZyllbGZjb3JlYnVmLAo+ICAJCQkgICBnZXRfb3JkZXIoZWxmY29yZWJ1 Zl9zel9vcmlnKSk7Cj4gIAkJcmV0dXJuIHJjOwo+ICAJfQo+IC0Jc2V0X3ZtY29yZV9saXN0X29m ZnNldHNfZWxmNjQoZWxmY29yZWJ1ZiwgZWxmY29yZWJ1Zl9zeiwgJnZtY29yZV9saXN0KTsKPiAr CXNldF92bWNvcmVfbGlzdF9vZmZzZXRzX2VsZjY0KGVsZmNvcmVidWZfc3osIGVsZm5vdGVzX3N6 LAo+ICsJCQkJICAgICAgJnZtY29yZV9saXN0KTsKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IEBA IC02MTQsMjAgKzc1NCwyMyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9jcmFzaF9lbGYzMl9o ZWFkZXJzKHZvaWQpCj4gIAl9Cj4gIAo+ICAJLyogTWVyZ2UgYWxsIFBUX05PVEUgaGVhZGVycyBp bnRvIG9uZS4gKi8KPiAtCXJjID0gbWVyZ2Vfbm90ZV9oZWFkZXJzX2VsZjMyKGVsZmNvcmVidWYs ICZlbGZjb3JlYnVmX3N6LCAmdm1jb3JlX2xpc3QpOwo+ICsJcmMgPSBtZXJnZV9ub3RlX2hlYWRl cnNfZWxmMzIoZWxmY29yZWJ1ZiwgJmVsZmNvcmVidWZfc3osCj4gKwkJCQkgICAgICAmZWxmbm90 ZXNfYnVmLCAmZWxmbm90ZXNfc3opOwo+ICAJaWYgKHJjKSB7Cj4gIAkJZnJlZV9wYWdlcygodW5z aWduZWQgbG9uZyllbGZjb3JlYnVmLAo+ICAJCQkgICBnZXRfb3JkZXIoZWxmY29yZWJ1Zl9zel9v cmlnKSk7Cj4gIAkJcmV0dXJuIHJjOwo+ICAJfQo+ICAJcmMgPSBwcm9jZXNzX3B0bG9hZF9wcm9n cmFtX2hlYWRlcnNfZWxmMzIoZWxmY29yZWJ1ZiwgZWxmY29yZWJ1Zl9zeiwKPiAtCQkJCQkJCQkm dm1jb3JlX2xpc3QpOwo+ICsJCQkJCQkgIGVsZm5vdGVzX3N6LAo+ICsJCQkJCQkgICZ2bWNvcmVf bGlzdCk7Cj4gIAlpZiAocmMpIHsKPiAgCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWVsZmNv cmVidWYsCj4gIAkJCSAgIGdldF9vcmRlcihlbGZjb3JlYnVmX3N6X29yaWcpKTsKPiAgCQlyZXR1 cm4gcmM7Cj4gIAl9Cj4gLQlzZXRfdm1jb3JlX2xpc3Rfb2Zmc2V0c19lbGYzMihlbGZjb3JlYnVm LCBlbGZjb3JlYnVmX3N6LCAmdm1jb3JlX2xpc3QpOwo+ICsJc2V0X3ZtY29yZV9saXN0X29mZnNl dHNfZWxmMzIoZWxmY29yZWJ1Zl9zeiwgZWxmbm90ZXNfc3osCj4gKwkJCQkgICAgICAmdm1jb3Jl X2xpc3QpOwo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gQEAgLTcwNiw2ICs4NDksOCBAQCB2b2lk IHZtY29yZV9jbGVhbnVwKHZvaWQpCj4gIAkJbGlzdF9kZWwoJm0tPmxpc3QpOwo+ICAJCWtmcmVl KG0pOwo+ICAJfQo+ICsJdmZyZWUoZWxmbm90ZXNfYnVmKTsKPiArCWVsZm5vdGVzX2J1ZiA9IE5V TEw7Cj4gIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWVsZmNvcmVidWYsCj4gIAkJICAgZ2V0 X29yZGVyKGVsZmNvcmVidWZfc3pfb3JpZykpOwo+ICAJZWxmY29yZWJ1ZiA9IE5VTEw7Cj4gCj4g CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka2V4ZWMg bWFpbGluZyBsaXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo=