From mboxrd@z Thu Jan 1 00:00:00 1970 From: Felipe Contreras Subject: Re: [RFC PATCH v2 14/16] Smart push over HTTP: client side Date: Tue, 13 Oct 2009 14:02:46 +0300 Message-ID: <94a0d4530910130402j597f156dr9ed7eb38a0077252@mail.gmail.com> References: <1255400715-10508-1-git-send-email-spearce@spearce.org> <1255400715-10508-15-git-send-email-spearce@spearce.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Cc: git@vger.kernel.org, Daniel Barkalow To: "Shawn O. Pearce" X-From: git-owner@vger.kernel.org Tue Oct 13 13:09:30 2009 Return-path: Envelope-to: gcvg-git-2@lo.gmane.org Received: from vger.kernel.org ([209.132.176.167]) by lo.gmane.org with esmtp (Exim 4.50) id 1MxfFx-0002WF-AW for gcvg-git-2@lo.gmane.org; Tue, 13 Oct 2009 13:09:30 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750868AbZJMLEi (ORCPT ); Tue, 13 Oct 2009 07:04:38 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750772AbZJMLEi (ORCPT ); Tue, 13 Oct 2009 07:04:38 -0400 Received: from fg-out-1718.google.com ([72.14.220.156]:27166 "EHLO fg-out-1718.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750732AbZJMLEf (ORCPT ); Tue, 13 Oct 2009 07:04:35 -0400 Received: by fg-out-1718.google.com with SMTP id d23so745486fga.1 for ; Tue, 13 Oct 2009 04:02:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=DCsqiLiXGb+110/55O/6rkmyTFBZu0pso2S583blzdU=; b=guQ8htS7DWzVuLAGEdnRveYc25joeW6zPdF62FlONvKIBtMKQrInFVp2pQ9WW3fc91 eitKljZ6vXktoxoPA8TNA2+Di3dGZqA7JOiROYrnQ+ZCfeWBcfOo9V+myx2YNa8TTfxl drmqgZYvmKQWVxQxvpP1OGHlfbIE/VZBUX9bo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=r7SrBdVgsGLWW7sq7jlw2Z6j1f0kRN8J6Pipyvl2Q/vrvZwf/AfpoLVHQgjz4ASNrV /bYuk5LL04d7q3pLrDqI/wUowaiwHdo26JWbTmX3Z9F0wZuBP19x1peTFOeeVKmrfeOo VHr1ifKe80zGfzj/ydb1qvdeAH2L35s2MpHJo= Received: by 10.86.170.4 with SMTP id s4mr6305379fge.9.1255431766913; Tue, 13 Oct 2009 04:02:46 -0700 (PDT) In-Reply-To: <1255400715-10508-15-git-send-email-spearce@spearce.org> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: T24gVHVlLCBPY3QgMTMsIDIwMDkgYXQgNToyNSBBTSwgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNl QHNwZWFyY2Uub3JnPiB3cm90ZToKPiBUaGUgZ2l0LXJlbW90ZS1jdXJsIGJhY2tlbmQgZGV0ZWN0 cyBpZiB0aGUgcmVtb3RlIHNlcnZlciBzdXBwb3J0cwo+IHRoZSBnaXQtcmVjZWl2ZS1wYWNrIHNl cnZpY2UsIGFuZCBpZiBzbywgcnVucyBnaXQtc2VuZC1wYWNrIGluIGEKPiBwaXBlIHRvIGR1bXAg dGhlIGNvbW1hbmQgYW5kIHBhY2sgZGF0YSBhcyBhIHNpbmdsZSBQT1NUIHJlcXVlc3QuCj4KPiBU aGUgYWR2ZXJ0aXNlbWVudHMgZnJvbSB0aGUgc2VydmVyIHRoYXQgd2VyZSBvYnRhaW5lZCBkdXJp bmcgdGhlCj4gZGlzY292ZXJ5IGFyZSBwYXNzZWQgaW50byBnaXQtc2VuZC1wYWNrIGJlZm9yZSB0 aGUgUE9TVCByZXF1ZXN0Cj4gc3RhcnRzLiDCoFRoaXMgcGVybWl0cyBnaXQtc2VuZC1wYWNrIHRv IG9wZXJhdGUgbGFyZ2VseSB1bm1vZGlmaWVkLgo+Cj4gRm9yIHNtYWxsZXIgcGFja3MgKHRob3Nl IHVuZGVyIDEgTWlCKSBhIHRyYW5kaXRpb25hbCBQT1NUIHdpdGggYQoKVHJhZGl0aW9uYWw/Cgo+ IENvbnRlbnQtTGVuZ3RoIGlzIHVzZWQsIHBlcm1pdHRpbmcgaW50ZXJhY3Rpb24gd2l0aCBhbnkg SFRUUC8xLjAKPiBjb21wbGlhbnQgc2VydmVyLiDCoFRoZSAxIE1pQiBsaW1pdCBpcyBhcmJpdHJh cnksIGJ1dCBpcyBzdWZmaWNlbnQKPiB0byBmaXQgbW9zdCBkZWx0YXMgY3JlYXRlZCBieSBodW1h biBhdXRob3JzIGFnYWluc3QgdGV4dCBzb3VyY2VzCj4gd2l0aCB0aGUgb2NjYXNpb25hbCBzbWFs bCBiaW5hcnkgZmlsZSAoZS5nLiBmZXcgS2lCIGljb24gaW1hZ2UpLgo+Cj4gRm9yIGxhcmdlciBw YWNrcyB3aGljaCBjYW5ub3QgYmUgc3Bvb2xlZCBlbnRpcmVseSBpbnRvIHRoZQo+IGhlbHBlcidz IG1lbW9yeSBzcGFjZSwgdGhlIFBPU1QgcmVxdWVzdCByZXF1aXJlcyBIVFRQLzEuMSBhbmQKPiBU cmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZC4gwqBUaGlzIHBlcm1pdHMgdGhlIGNsaWVudCB0byB1 cGxvYWQgYW4KPiB1bmtub3duIGFtb3VudCBvZiBkYXRhIGluIG9uZSBIVFRQIHRyYW5zYWN0aW9u IHdpdGhvdXQgbmVlZGluZyB0bwo+IHByZWdlbmVyYXRlIHRoZSBlbnRpcmUgcGFjayBmaWxlIGxv Y2FsbHkuCj4KPiBTaWduZWQtb2ZmLWJ5OiBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJj ZS5vcmc+Cj4gQ0M6IERhbmllbCBCYXJrYWxvdyA8YmFya2Fsb3dAaWFiZXJ2b24ub3JnPgo+IC0t LQo+IMKgRG9jdW1lbnRhdGlvbi9jb25maWcudHh0IHwgwqAgwqA4ICsrCj4gwqBidWlsdGluLXNl bmQtcGFjay5jIMKgIMKgIMKgfCDCoDExNiArKysrKysrKysrKysrKysrKysrKy0KPiDCoHJlbW90 ZS1jdXJsLmMgwqAgwqAgwqAgwqAgwqAgwqB8IMKgMjU4ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0KPiDCoHNlbmQtcGFjay5oIMKgIMKgIMKgIMKgIMKgIMKg IMKgfCDCoCDCoDMgKy0KPiDCoHNpZGViYW5kLmMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfCDCoCAx MSArKy0KPiDCoHRyYW5zcG9ydC5jIMKgIMKgIMKgIMKgIMKgIMKgIMKgfCDCoCDCoDEgKwo+IMKg NiBmaWxlcyBjaGFuZ2VkLCAzODQgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCj4KPiBk aWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25m aWcudHh0Cj4gaW5kZXggY2QxNzgxNC4uNzEzMGQwNyAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0 aW9uL2NvbmZpZy50eHQKPiArKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKPiBAQCAtMTA4 OSw2ICsxMDg5LDE0IEBAIGh0dHAubWF4UmVxdWVzdHM6Ogo+IMKgIMKgIMKgIMKgSG93IG1hbnkg SFRUUCByZXF1ZXN0cyB0byBsYXVuY2ggaW4gcGFyYWxsZWwuIENhbiBiZSBvdmVycmlkZGVuCj4g wqAgwqAgwqAgwqBieSB0aGUgJ0dJVF9IVFRQX01BWF9SRVFVRVNUUycgZW52aXJvbm1lbnQgdmFy aWFibGUuIERlZmF1bHQgaXMgNS4KPgo+ICtodHRwLnBvc3RCdWZmZXI6Ogo+ICsgwqAgwqAgwqAg TWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgdXNlZCBieSBzbWFydCBIVFRQCj4g KyDCoCDCoCDCoCB0cmFuc3BvcnRzIHdoZW4gUE9TVGluZyBkYXRhIHRvIHRoZSByZW1vdGUgc3lz dGVtLgo+ICsgwqAgwqAgwqAgRm9yIHJlcXVlc3RzIGxhcmdlciB0aGFuIHRoaXMgYnVmZmVyIHNp emUsIEhUVFAvMS4xIGFuZAo+ICsgwqAgwqAgwqAgVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQg aXMgdXNlZCB0byBhdm9pZCBjcmVhdGluZyBhCj4gKyDCoCDCoCDCoCBtYXNzaXZlIHBhY2sgZmls ZSBsb2NhbGx5LiDCoERlZmF1bHQgaXMgMSBNaUIsIHdoaWNoIGlzCj4gKyDCoCDCoCDCoCBzdWZm aWNpZW50IGZvciBtb3N0IHJlcXVlc3RzLgo+ICsKPiDCoGh0dHAubG93U3BlZWRMaW1pdCwgaHR0 cC5sb3dTcGVlZFRpbWU6Ogo+IMKgIMKgIMKgIMKgSWYgdGhlIEhUVFAgdHJhbnNmZXIgc3BlZWQg aXMgbGVzcyB0aGFuICdodHRwLmxvd1NwZWVkTGltaXQnCj4gwqAgwqAgwqAgwqBmb3IgbG9uZ2Vy IHRoYW4gJ2h0dHAubG93U3BlZWRUaW1lJyBzZWNvbmRzLCB0aGUgdHJhbnNmZXIgaXMgYWJvcnRl ZC4KPiBkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zZW5kLXBhY2suYyBiL2J1aWx0aW4tc2VuZC1wYWNr LmMKPiBpbmRleCAzN2U1MjhlLi42NTRjM2Q0IDEwMDY0NAo+IC0tLSBhL2J1aWx0aW4tc2VuZC1w YWNrLmMKPiArKysgYi9idWlsdGluLXNlbmQtcGFjay5jCj4gQEAgLTIsOSArMiwxMSBAQAo+IMKg I2luY2x1ZGUgImNvbW1pdC5oIgo+IMKgI2luY2x1ZGUgInJlZnMuaCIKPiDCoCNpbmNsdWRlICJw a3QtbGluZS5oIgo+ICsjaW5jbHVkZSAic2lkZWJhbmQuaCIKPiDCoCNpbmNsdWRlICJydW4tY29t bWFuZC5oIgo+IMKgI2luY2x1ZGUgInJlbW90ZS5oIgo+IMKgI2luY2x1ZGUgInNlbmQtcGFjay5o Igo+ICsjaW5jbHVkZSAicXVvdGUuaCIKPgo+IMKgc3RhdGljIGNvbnN0IGNoYXIgc2VuZF9wYWNr X3VzYWdlW10gPQo+IMKgImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1y dW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS12ZXJi b3NlXSBbLS10aGluXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPHJlZj4uLi5dXG4iCj4gQEAgLTU5 LDcgKzYxLDcgQEAgc3RhdGljIGludCBwYWNrX29iamVjdHMoaW50IGZkLCBzdHJ1Y3QgcmVmICpy ZWZzLCBzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzICpleHQKPiDCoCDCoCDCoCDCoG1lbXNldCgm cG8sIDAsIHNpemVvZihwbykpOwo+IMKgIMKgIMKgIMKgcG8uYXJndiA9IGFyZ3Y7Cj4gwqAgwqAg wqAgwqBwby5pbiA9IC0xOwo+IC0gwqAgwqAgwqAgcG8ub3V0ID0gZmQ7Cj4gKyDCoCDCoCDCoCBw by5vdXQgPSBhcmdzLT5vbmVfc2hvdF9ycGMgPyAtMSA6IGZkOwo+IMKgIMKgIMKgIMKgcG8uZ2l0 X2NtZCA9IDE7Cj4gwqAgwqAgwqAgwqBpZiAoc3RhcnRfY29tbWFuZCgmcG8pKQo+IMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgZGllX2Vycm5vKCJnaXQgcGFjay1vYmplY3RzIGZhaWxlZCIpOwo+IEBA IC04Myw2ICs4NSwyMCBAQCBzdGF0aWMgaW50IHBhY2tfb2JqZWN0cyhpbnQgZmQsIHN0cnVjdCBy ZWYgKnJlZnMsIHN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgKmV4dAo+IMKgIMKgIMKgIMKgfQo+ Cj4gwqAgwqAgwqAgwqBjbG9zZShwby5pbik7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKGFyZ3MtPm9u ZV9zaG90X3JwYykgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2hhciAqYnVmID0geG1hbGxv YyhMQVJHRV9QQUNLRVRfTUFYKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdoaWxlICgxKSB7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzc2l6ZV90IG4gPSB4cmVhZChw by5vdXQsIGJ1ZiwgTEFSR0VfUEFDS0VUX01BWCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAobiA8PSAwKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBzZW5kX3NpZGViYW5kKGZkLCAtMSwgYnVmLCBuLCBMQVJHRV9QQUNLRVRfTUFYKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGZyZWUoYnVmKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsb3NlKHBvLm91dCk7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBwby5vdXQgPSAtMTsKPiArIMKgIMKgIMKgIH0KPiArCj4gwqAgwqAgwqAgwqBpZiAo ZmluaXNoX2NvbW1hbmQoJnBvKSkKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiBlcnJv cigicGFjay1vYmplY3RzIGRpZWQgd2l0aCBzdHJhbmdlIGVycm9yIik7Cj4gwqAgwqAgwqAgwqBy ZXR1cm4gMDsKPiBAQCAtMzAzLDYgKzMxOSw1OSBAQCBzdGF0aWMgaW50IHJlZnNfcHVzaGVkKHN0 cnVjdCByZWYgKnJlZikKPiDCoCDCoCDCoCDCoHJldHVybiAwOwo+IMKgfQo+Cj4gK3N0YXRpYyB2 b2lkIHByaW50X2hlbHBlcl9zdGF0dXMoc3RydWN0IHJlZiAqcmVmKQo+ICt7Cj4gKyDCoCDCoCDC oCBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwo+ICsKPiArIMKgIMKgIMKgIGZvciAo OyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY29uc3Qg Y2hhciAqbXNnID0gTlVMTDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNvbnN0IGNoYXIgKnJl czsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzd2l0Y2gocmVmLT5zdGF0dXMpIHsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNhc2UgUkVGX1NUQVRVU19OT05FOgo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVzID0gImVycm9yIjsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIG1zZyA9ICJubyBtYXRjaCI7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNl IFJFRl9TVEFUVVNfT0s6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXMg PSAib2siOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4gKwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVzID0gIm9rIjsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1zZyA9ICJ1cCB0byBkYXRlIjsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCByZXMgPSAiZXJyb3IiOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgbXNnID0gIm5vbi1mYXN0IGZvcndhcmQiOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg Y2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURToKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGNhc2UgUkVGX1NUQVRVU19SRU1PVEVfUkVKRUNUOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcmVzID0gImVycm9yIjsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGJyZWFrOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNhc2UgUkVGX1NUQVRV U19FWFBFQ1RJTkdfUkVQT1JUOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVmYXVsdDoKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNvbnRpbnVlOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cmJ1Zl9yZXNldCgm YnVmKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cmJ1Zl9hZGRmKCZidWYsICIlcyAlcyIs IHJlcywgcmVmLT5uYW1lKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChyZWYtPnJlbW90 ZV9zdGF0dXMpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBtc2cgPSByZWYt PnJlbW90ZV9zdGF0dXM7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAobXNnKSB7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzdHJidWZfYWRkY2goJmJ1ZiwgJyAnKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHF1b3RlX3R3b19jX3N0eWxlKCZi dWYsICIiLCBtc2csIDApOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOwo+ICsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHNhZmVfd3JpdGUoMSwgYnVmLmJ1ZiwgYnVmLmxlbik7Cj4gKyDCoCDCoCDCoCB9 Cj4gKyDCoCDCoCDCoCBzdHJidWZfcmVsZWFzZSgmYnVmKTsKPiArfQo+ICsKPiDCoGludCBzZW5k X3BhY2soc3RydWN0IHNlbmRfcGFja19hcmdzICphcmdzLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKg aW50IGZkW10sIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uLAo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCj4gQEAgLTMxMCw2ICszNzksNyBAQCBpbnQgc2Vu ZF9wYWNrKHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKPiDCoHsKPiDCoCDCoCDCoCDCoGlu dCBpbiA9IGZkWzBdOwo+IMKgIMKgIMKgIMKgaW50IG91dCA9IGZkWzFdOwo+ICsgwqAgwqAgwqAg c3RydWN0IHN0cmJ1ZiByZXFfYnVmID0gU1RSQlVGX0lOSVQ7Cj4gwqAgwqAgwqAgwqBzdHJ1Y3Qg cmVmICpyZWY7Cj4gwqAgwqAgwqAgwqBpbnQgbmV3X3JlZnM7Cj4gwqAgwqAgwqAgwqBpbnQgYXNr X2Zvcl9zdGF0dXNfcmVwb3J0ID0gMDsKPiBAQCAtMzkxLDE0ICs0NjEsMTQgQEAgaW50IHNlbmRf cGFjayhzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBjaGFyICpuZXdfaGV4ID0gc2hhMV90b19oZXgocmVmLT5uZXdfc2hhMSk7 Cj4KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChhc2tfZm9yX3N0YXR1 c19yZXBvcnQpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHBhY2tldF93cml0ZShvdXQsICIlcyAlcyAlcyVjJXMiLAo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1Ziwg IiVzICVzICVzJWMlcyIsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBvbGRfaGV4LCBuZXdfaGV4LCByZWYtPm5hbWUsIDAsCj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAi cmVwb3J0LXN0YXR1cyIpOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgYXNrX2Zvcl9zdGF0dXNfcmVwb3J0ID0gMDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGV4cGVjdF9zdGF0dXNfcmVwb3J0ID0gMTsKPiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KPiDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGVsc2UKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHBhY2tldF93cml0ZShvdXQsICIlcyAlcyAlcyIsCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwYWNrZXRfYnVmX3dyaXRlKCZyZXFf YnVmLCAiJXMgJXMgJXMiLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgb2xkX2hleCwgbmV3X2hleCwgcmVmLT5uYW1lKTsKPiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoH0KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJlZi0+c3RhdHVz ID0gZXhwZWN0X3N0YXR1c19yZXBvcnQgPwo+IEBAIC00MDYsNyArNDc2LDE3IEBAIGludCBzZW5k X3BhY2soc3RydWN0IHNlbmRfcGFja19hcmdzICphcmdzLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgUkVGX1NUQVRVU19PSzsKPiDCoCDCoCDCoCDCoH0KPgo+IC0gwqAgwqAg wqAgcGFja2V0X2ZsdXNoKG91dCk7Cj4gKyDCoCDCoCDCoCBpZiAoYXJncy0+b25lX3Nob3RfcnBj KSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWFyZ3MtPmRyeV9ydW4pIHsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBhY2tldF9idWZfZmx1c2goJnJlcV9idWYp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2VuZF9zaWRlYmFuZChvdXQs IC0xLCByZXFfYnVmLmJ1ZiwgcmVxX2J1Zi5sZW4sIExBUkdFX1BBQ0tFVF9NQVgpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgfSBlbHNlIHsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHNhZmVfd3JpdGUob3V0LCByZXFfYnVmLmJ1ZiwgcmVxX2J1Zi5sZW4pOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcGFja2V0X2ZsdXNoKG91dCk7Cj4gKyDCoCDCoCDCoCB9Cj4g KyDCoCDCoCDCoCBzdHJidWZfcmVsZWFzZSgmcmVxX2J1Zik7Cj4gKwo+IMKgIMKgIMKgIMKgaWYg KG5ld19yZWZzICYmICFhcmdzLT5kcnlfcnVuKSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBp ZiAocGFja19vYmplY3RzKG91dCwgcmVtb3RlX3JlZnMsIGV4dHJhX2hhdmUsIGFyZ3MpIDwgMCkg ewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZm9yIChyZWYgPSByZW1vdGVf cmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCj4gQEAgLTQxNCwxMSArNDk0LDE1IEBAIGludCBz ZW5kX3BhY2soc3RydWN0IHNlbmRfcGFja19hcmdzICphcmdzLAo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIC0xOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+ IMKgIMKgIMKgIMKgfQo+ICsgwqAgwqAgwqAgaWYgKGFyZ3MtPm9uZV9zaG90X3JwYyAmJiAhYXJn cy0+ZHJ5X3J1bikKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBhY2tldF9mbHVzaChvdXQpOwo+ Cj4gwqAgwqAgwqAgwqBpZiAoZXhwZWN0X3N0YXR1c19yZXBvcnQpCj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqByZXQgPSByZWNlaXZlX3N0YXR1cyhpbiwgcmVtb3RlX3JlZnMpOwo+IMKgIMKgIMKg IMKgZWxzZQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gMDsKPiArIMKgIMKgIMKgIGlm IChhcmdzLT5vbmVfc2hvdF9ycGMpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwYWNrZXRfZmx1 c2gob3V0KTsKPgo+IMKgIMKgIMKgIMKgaWYgKHJldCA8IDApCj4gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqByZXR1cm4gcmV0Owo+IEBAIC00NzgsNiArNTYyLDcgQEAgaW50IGNtZF9zZW5kX3BhY2so aW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCj4gwqAgwqAg wqAgwqBzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzIGV4dHJhX2hhdmU7Cj4gwqAgwqAgwqAgwqBz dHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgKmxvY2FsX3JlZnM7Cj4gwqAgwqAgwqAgwqBpbnQgcmV0 Owo+ICsgwqAgwqAgwqAgaW50IGhlbHBlcl9zdGF0dXMgPSAwOwo+IMKgIMKgIMKgIMKgaW50IHNl bmRfYWxsID0gMDsKPiDCoCDCoCDCoCDCoGNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrID0gImdpdC1y ZWNlaXZlLXBhY2siOwo+IMKgIMKgIMKgIMKgaW50IGZsYWdzOwo+IEBAIC01MjMsNiArNjA4LDE0 IEBAIGludCBjbWRfc2VuZF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3Qg Y2hhciAqcHJlZml4KQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgYXJncy51c2VfdGhpbl9wYWNrID0gMTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbnRpbnVlOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFz dHJjbXAoYXJnLCAiLS1vbmUtc2hvdC1ycGMiKSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYXJncy5vbmVfc2hvdF9ycGMgPSAxOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY29udGludWU7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAoIXN0cmNtcChhcmcsICItLWhlbHBlci1zdGF0dXMiKSkgewo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaGVscGVyX3N0YXR1cyA9 IDE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjb250 aW51ZTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVzYWdlKHNlbmRfcGFja191c2FnZSk7Cj4gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqB9Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAoIWRlc3QpIHsK PiBAQCAtNTUxLDcgKzY0NCwxNCBAQCBpbnQgY21kX3NlbmRfcGFjayhpbnQgYXJnYywgY29uc3Qg Y2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oH0KPiDCoCDCoCDCoCDCoH0KPgo+IC0gwqAgwqAgwqAgY29ubiA9IGdpdF9jb25uZWN0KGZkLCBk ZXN0LCByZWNlaXZlcGFjaywgYXJncy52ZXJib3NlID8gQ09OTkVDVF9WRVJCT1NFIDogMCk7Cj4g KyDCoCDCoCDCoCBpZiAoYXJncy5vbmVfc2hvdF9ycGMpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGNvbm4gPSBOVUxMOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZmRbMF0gPSAwOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgZmRbMV0gPSAxOwo+ICsgwqAgwqAgwqAgfSBlbHNlIHsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNvbm4gPSBnaXRfY29ubmVjdChmZCwgZGVzdCwgcmVjZWl2 ZXBhY2ssCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhcmdzLnZlcmJvc2Ug PyBDT05ORUNUX1ZFUkJPU0UgOiAwKTsKPiArIMKgIMKgIMKgIH0KPgo+IMKgIMKgIMKgIMKgbWVt c2V0KCZleHRyYV9oYXZlLCAwLCBzaXplb2YoZXh0cmFfaGF2ZSkpOwo+Cj4gQEAgLTU3NSwxMiAr Njc1LDE2IEBAIGludCBjbWRfc2VuZF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwg Y29uc3QgY2hhciAqcHJlZml4KQo+Cj4gwqAgwqAgwqAgwqByZXQgPSBzZW5kX3BhY2soJmFyZ3Ms IGZkLCBjb25uLCByZW1vdGVfcmVmcywgJmV4dHJhX2hhdmUpOwo+Cj4gKyDCoCDCoCDCoCBpZiAo aGVscGVyX3N0YXR1cykKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByaW50X2hlbHBlcl9zdGF0 dXMocmVtb3RlX3JlZnMpOwo+ICsKPiDCoCDCoCDCoCDCoGNsb3NlKGZkWzFdKTsKPiDCoCDCoCDC oCDCoGNsb3NlKGZkWzBdKTsKPgo+IMKgIMKgIMKgIMKgcmV0IHw9IGZpbmlzaF9jb25uZWN0KGNv bm4pOwo+Cj4gLSDCoCDCoCDCoCBwcmludF9wdXNoX3N0YXR1cyhkZXN0LCByZW1vdGVfcmVmcyk7 Cj4gKyDCoCDCoCDCoCBpZiAoIWhlbHBlcl9zdGF0dXMpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBwcmludF9wdXNoX3N0YXR1cyhkZXN0LCByZW1vdGVfcmVmcyk7Cj4KPiDCoCDCoCDCoCDCoGlm ICghYXJncy5kcnlfcnVuICYmIHJlbW90ZSkgewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3Ry dWN0IHJlZiAqcmVmOwo+IGRpZmYgLS1naXQgYS9yZW1vdGUtY3VybC5jIGIvcmVtb3RlLWN1cmwu Ywo+IGluZGV4IDQyZmQwNmMuLjUyOWRmNDIgMTAwNjQ0Cj4gLS0tIGEvcmVtb3RlLWN1cmwuYwo+ ICsrKyBiL3JlbW90ZS1jdXJsLmMKPiBAQCAtNSwxNyArNSwzMyBAQAo+IMKgI2luY2x1ZGUgIndh bGtlci5oIgo+IMKgI2luY2x1ZGUgImh0dHAuaCIKPiDCoCNpbmNsdWRlICJwa3QtbGluZS5oIgo+ ICsjaW5jbHVkZSAic2lkZWJhbmQuaCIKPiDCoCNpbmNsdWRlICJydW4tY29tbWFuZC5oIgo+Cj4K PiArc3RhdGljIHNpemVfdCBwb3N0X2J1ZmZlcl9zaXplID0gMTYgKiBMQVJHRV9QQUNLRVRfTUFY Owo+IMKgc3RhdGljIHN0cnVjdCByZW1vdGUgKnJlbW90ZTsKPiDCoHN0YXRpYyBjb25zdCBjaGFy ICp1cmw7Cj4gwqBzdGF0aWMgc3RydWN0IHdhbGtlciAqd2Fsa2VyOwo+Cj4gK3N0YXRpYyBpbnQg aHR0cF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNi KQo+ICt7Cj4gKyDCoCDCoCDCoCBpZiAoIXN0cmNtcCgiaHR0cC5wb3N0YnVmZmVyIiwgdmFyKSkg ewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcG9zdF9idWZmZXJfc2l6ZSA9IGdpdF9jb25maWdf aW50KHZhciwgdmFsdWUpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHBvc3RfYnVmZmVy X3NpemUgPCBMQVJHRV9QQUNLRVRfTUFYKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcG9zdF9idWZmZXJfc2l6ZSA9IExBUkdFX1BBQ0tFVF9NQVg7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCByZXR1cm4gMDsKPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCByZXR1 cm4gMDsKPiArfQo+ICsKPiDCoHN0YXRpYyB2b2lkIGluaXRfd2Fsa2VyKHZvaWQpCj4gwqB7Cj4g LSDCoCDCoCDCoCBpZiAoIXdhbGtlcikKPiArIMKgIMKgIMKgIGlmICghd2Fsa2VyKSB7Cj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqB3YWxrZXIgPSBnZXRfaHR0cF93YWxrZXIodXJsLCByZW1vdGUp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ2l0X2NvbmZpZyhodHRwX29wdGlvbnMsIE5VTEwp Owo+ICsgwqAgwqAgwqAgfQo+IMKgfQo+Cj4gwqBzdHJ1Y3QgZGlzY292ZXJ5IHsKPiBAQCAtMjAw LDYgKzIxNiwxOTMgQEAgc3RhdGljIHZvaWQgb3V0cHV0X3JlZnMoc3RydWN0IHJlZiAqcmVmcykK PiDCoCDCoCDCoCDCoGZyZWVfcmVmcyhyZWZzKTsKPiDCoH0KPgo+ICtzdHJ1Y3QgcnBjX3N0YXRl IHsKPiArIMKgIMKgIMKgIGNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZTsKPiArIMKgIMKgIMKgIGNo YXIgKnNlcnZpY2VfdXJsOwo+ICsgwqAgwqAgwqAgY2hhciAqaGRyX2NvbnRlbnRfdHlwZTsKPiAr IMKgIMKgIMKgIGNoYXIgKmhkcl9hY2NlcHQ7Cj4gKyDCoCDCoCDCoCBjaGFyICpidWY7Cj4gKyDC oCDCoCDCoCBzaXplX3QgYWxsb2M7Cj4gKyDCoCDCoCDCoCBzaXplX3QgbGVuOwo+ICsgwqAgwqAg wqAgc2l6ZV90IHBvczsKPiArIMKgIMKgIMKgIGludCBpbjsKPiArIMKgIMKgIMKgIGludCBvdXQ7 Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCB2ZXJib3NlIDogMTsKPiArfTsKPiArCj4gK3N0YXRpYyBz aXplX3QgcnBjX291dCh2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLAo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQo+ICt7Cj4gKyDCoCDCoCDCoCBz aXplX3QgbWF4ID0gZWx0c2l6ZSAqIG5tZW1iOwo+ICsgwqAgwqAgwqAgc3RydWN0IHJwY19zdGF0 ZSAqc3RhdGUgPSBidWZmZXJfOwo+ICsgwqAgwqAgwqAgc2l6ZV90IGF2YWlsID0gc3RhdGUtPmxl biAtIHN0YXRlLT5wb3M7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCFhdmFpbCkgewo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgYXZhaWwgPSBwYWNrZXRfcmVhZF9saW5lKHN0YXRlLT5vdXQsIHN0YXRl LT5idWYsIHN0YXRlLT5hbGxvYyk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWF2YWls KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCBzdGF0ZS0+cG9zID0gMDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHN0YXRlLT5sZW4gPSBhdmFpbDsKPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCBpZiAo bWF4IDwgYXZhaWwpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYXZhaWwgPSBtYXg7Cj4gKyDC oCDCoCDCoCBtZW1jcHkocHRyLCBzdGF0ZS0+YnVmICsgc3RhdGUtPnBvcywgYXZhaWwpOwo+ICsg wqAgwqAgwqAgc3RhdGUtPnBvcyArPSBhdmFpbDsKPiArIMKgIMKgIMKgIHJldHVybiBhdmFpbDsK PiArfQo+ICsKPiArc3RhdGljIHNpemVfdCBycGNfaW4oY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg ZWx0c2l6ZSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNpemVfdCBubWVtYiwgdm9pZCAqYnVm ZmVyXykKPiArewo+ICsgwqAgwqAgwqAgc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7Cj4g KyDCoCDCoCDCoCBzdHJ1Y3QgcnBjX3N0YXRlICpzdGF0ZSA9IGJ1ZmZlcl87Cj4gKyDCoCDCoCDC oCB3cml0ZV9vcl9kaWUoc3RhdGUtPmluLCBwdHIsIHNpemUpOwo+ICsgwqAgwqAgwqAgcmV0dXJu IHNpemU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcG9zdF9ycGMoc3RydWN0IHJwY19zdGF0ZSAq c3RhdGUpCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90 Owo+ICsgwqAgwqAgwqAgc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwo+ICsgwqAgwqAgwqAg c3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMgPSBOVUxMOwo+ICsgwqAgwqAgwqAgaW50IGVyciA9 IDAsIGxhcmdlX3JlcXVlc3QgPSAwOwo+ICsKPiArIMKgIMKgIMKgIC8qIFRyeSB0byBsb2FkIHRo ZSBlbnRpcmUgcmVxdWVzdCwgaWYgd2UgY2FuIGZpdCBpdCBpbnRvIHRoZQo+ICsgwqAgwqAgwqAg wqAqIGFsbG9jYXRlZCBidWZmZXIgc3BhY2Ugd2UgY2FuIHVzZSBIVFRQLzEuMCBhbmQgYXZvaWQg dGhlCj4gKyDCoCDCoCDCoCDCoCogY2h1bmtlZCBlbmNvZGluZyBtZXNzLgo+ICsgwqAgwqAgwqAg wqAqLwo+ICsgwqAgwqAgwqAgd2hpbGUgKDEpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNp emVfdCBsZWZ0ID0gc3RhdGUtPmFsbG9jIC0gc3RhdGUtPmxlbjsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGNoYXIgKmJ1ZiA9IHN0YXRlLT5idWYgKyBzdGF0ZS0+bGVuOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgaW50IG47Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGxlZnQg PCBMQVJHRV9QQUNLRVRfTUFYKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBsYXJnZV9yZXF1ZXN0ID0gMTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGJyZWFrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIG4gPSBwYWNrZXRfcmVhZF9saW5lKHN0YXRlLT5vdXQsIGJ1ZiwgbGVmdCk7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIW4pCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0YXRlLT5sZW4gKz0gbjsK PiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCBzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7 Cj4gKyDCoCDCoCDCoCBzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Cj4gKwo+ICsgwqAgwqAgwqAg Y3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1QsIDEpOwo+ICsgwqAgwqAg wqAgY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7Cj4gKyDC oCDCoCDCoCBjdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBzdGF0ZS0+ c2VydmljZV91cmwpOwo+ICsKPiArIMKgIMKgIMKgIGhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVu ZChoZWFkZXJzLCBzdGF0ZS0+aGRyX2NvbnRlbnRfdHlwZSk7Cj4gKyDCoCDCoCDCoCBoZWFkZXJz ID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgc3RhdGUtPmhkcl9hY2NlcHQpOwo+ICsKPiAr IMKgIMKgIMKgIGlmIChsYXJnZV9yZXF1ZXN0KSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAv KiBUaGUgcmVxdWVzdCBib2R5IGlzIGxhcmdlIGFuZCB0aGUgc2l6ZSBjYW5ub3QgYmUgcHJlZGlj dGVkLgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqIFdlIG11c3QgdXNlIGNodW5rZWQgZW5j b2RpbmcgdG8gc2VuZCBpdC4KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKi8KPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiRXhw ZWN0OiAxMDAtY29udGludWUiKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGhlYWRlcnMgPSBj dXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VS TE9QVF9SRUFERlVOQ1RJT04sIHJwY19vdXQpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY3Vy bF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lORklMRSwgc3RhdGUpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaWYgKHN0YXRlLT52ZXJib3NlKSB7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBmcHJpbnRmKHN0ZGVyciwgIlBPU1QgJXMgKGNodW5rZWQpXG4i LCBzdGF0ZS0+c2VydmljZV9uYW1lKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGZmbHVzaChzdGRlcnIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsKPiArIMKg IMKgIMKgIH0gZWxzZSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBXZSBrbm93IHRoZSBj b21wbGV0ZSByZXF1ZXN0IHNpemUgaW4gYWR2YW5jZSwgdXNlIHRoZQo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAqIG1vcmUgbm9ybWFsIENvbnRlbnQtTGVuZ3RoIGFwcHJvYWNoLgo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAqLwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY3VybF9lYXN5 X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIHN0YXRlLT5idWYpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BU X1BPU1RGSUVMRFNJWkUsIHN0YXRlLT5sZW4pOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYg KHN0YXRlLT52ZXJib3NlKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBm cHJpbnRmKHN0ZGVyciwgIlBPU1QgJXMgKCVsdSBieXRlcylcbiIsCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzdGF0ZS0+c2VydmljZV9uYW1lLCAodW5z aWduZWQgbG9uZylzdGF0ZS0+bGVuKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGZmbHVzaChzdGRlcnIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAg wqAgfQo+ICsKPiArIMKgIMKgIMKgIGN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9Q VF9IVFRQSEVBREVSLCBoZWFkZXJzKTsKPiArIMKgIMKgIMKgIGN1cmxfZWFzeV9zZXRvcHQoc2xv dC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBycGNfaW4pOwo+ICsgwqAgwqAgwqAgY3Vy bF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHN0YXRlKTsKPiArCj4gKyDC oCDCoCDCoCBpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHJ1bl9hY3RpdmVfc2xvdChzbG90KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlm IChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBlcnIgfD0gZXJyb3IoIlJQQyBmYWlsZWQ7IHJlc3VsdD0lZCwgSFRU UCBjb2RlID0gJWxkIiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHJlc3VsdHMuY3VybF9yZXN1bHQsIHJlc3VsdHMuaHR0cF9jb2RlKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIGN1cmxfc2xpc3Rf ZnJlZV9hbGwoaGVhZGVycyk7Cj4gKyDCoCDCoCDCoCByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IG9uZV9zaG90X3JwY19zZXJ2aWNlKGNvbnN0IGNoYXIgKnNlcnZpY2UsCj4gKyDC oCDCoCDCoCBpbnQgdmVyYm9zZSwKPiArIMKgIMKgIMKgIGNvbnN0IGNoYXIgKipjbGllbnRfYXJn diwKPiArIMKgIMKgIMKgIHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzLAo+ICsgwqAgwqAgwqAgc3Ry dWN0IHN0cmJ1ZiAqcmVzdWx0KQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgY2hpbGRfcHJvY2Vz cyBjbGllbnQ7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgcnBjX3N0YXRlIHN0YXRlOwo+ICsgwqAgwqAg wqAgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKPiArIMKgIMKgIMKgIGludCBlcnIg PSAwOwo+ICsKPiArIMKgIMKgIMKgIGluaXRfd2Fsa2VyKCk7Cj4gKyDCoCDCoCDCoCBtZW1zZXQo JmNsaWVudCwgMCwgc2l6ZW9mKGNsaWVudCkpOwo+ICsgwqAgwqAgwqAgY2xpZW50LmluID0gLTE7 Cj4gKyDCoCDCoCDCoCBjbGllbnQub3V0ID0gLTE7Cj4gKyDCoCDCoCDCoCBjbGllbnQuZ2l0X2Nt ZCA9IDE7Cj4gKyDCoCDCoCDCoCBjbGllbnQuYXJndiA9IGNsaWVudF9hcmd2Owo+ICsgwqAgwqAg wqAgaWYgKHN0YXJ0X2NvbW1hbmQoJmNsaWVudCkpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBk aWUoIiVzIGZhaWxlZCB0byBleGVjdXRlIiwgY2xpZW50X2FyZ3ZbMF0pOwo+ICsgwqAgwqAgwqAg aWYgKGhlYWRzKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVfb3JfZGllKGNsaWVudC5p biwgaGVhZHMtPmJ1ZiwgaGVhZHMtPmxlbik7Cj4gKwo+ICsgwqAgwqAgwqAgbWVtc2V0KCZzdGF0 ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7Cj4gKyDCoCDCoCDCoCBzdGF0ZS5hbGxvYyA9IHBvc3RfYnVm ZmVyX3NpemU7Cj4gKyDCoCDCoCDCoCBzdGF0ZS5idWYgPSB4bWFsbG9jKHN0YXRlLmFsbG9jKTsK PiArIMKgIMKgIMKgIHN0YXRlLmluID0gY2xpZW50LmluOwo+ICsgwqAgwqAgwqAgc3RhdGUub3V0 ID0gY2xpZW50Lm91dDsKPiArIMKgIMKgIMKgIHN0YXRlLnNlcnZpY2VfbmFtZSA9IHNlcnZpY2U7 Cj4gKyDCoCDCoCDCoCBzdGF0ZS52ZXJib3NlID0gISF2ZXJib3NlOwo+ICsKPiArIMKgIMKgIMKg IHN0cmJ1Zl9hZGRmKCZidWYsICIlcy8lcyIsIHVybCwgc2VydmljZSk7Cj4gKyDCoCDCoCDCoCBz dGF0ZS5zZXJ2aWNlX3VybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cj4gKwo+ICsgwqAg wqAgwqAgc3RyYnVmX2FkZGYoJmJ1ZiwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC0lcy1y ZXF1ZXN0Iiwgc2VydmljZSk7Cj4gKyDCoCDCoCDCoCBzdGF0ZS5oZHJfY29udGVudF90eXBlID0g c3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKPiArCj4gKyDCoCDCoCDCoCBzdHJidWZfYWRkZigm YnVmLCAiQWNjZXB0OiBhcHBsaWNhdGlvbi94LSVzLXJlc3BvbnNlIiwgc2VydmljZSk7Cj4gKyDC oCDCoCDCoCBzdGF0ZS5oZHJfYWNjZXB0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKPiAr Cj4gKyDCoCDCoCDCoCB3aGlsZSAoIWVycikgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50 IG4gPSBwYWNrZXRfcmVhZF9saW5lKHN0YXRlLm91dCwgc3RhdGUuYnVmLCBzdGF0ZS5hbGxvYyk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIW4pCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0YXRlLnBvcyA9 IDA7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzdGF0ZS5sZW4gPSBuOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgZXJyIHw9IHBvc3RfcnBjKCZzdGF0ZSk7Cj4gKyDCoCDCoCDCoCB9Cj4gKyDC oCDCoCDCoCBpZiAocmVzdWx0KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3RyYnVmX3JlYWQo cmVzdWx0LCBjbGllbnQub3V0LCAwKTsKPiArCj4gKyDCoCDCoCDCoCBjbG9zZShjbGllbnQuaW4p Owo+ICsgwqAgwqAgwqAgY2xvc2UoY2xpZW50Lm91dCk7Cj4gKyDCoCDCoCDCoCBjbGllbnQuaW4g PSAtMTsKPiArIMKgIMKgIMKgIGNsaWVudC5vdXQgPSAtMTsKPiArCj4gKyDCoCDCoCDCoCBlcnIg fD0gZmluaXNoX2NvbW1hbmQoJmNsaWVudCk7Cj4gKyDCoCDCoCDCoCBmcmVlKHN0YXRlLnNlcnZp Y2VfdXJsKTsKPiArIMKgIMKgIMKgIGZyZWUoc3RhdGUuaGRyX2NvbnRlbnRfdHlwZSk7Cj4gKyDC oCDCoCDCoCBmcmVlKHN0YXRlLmhkcl9hY2NlcHQpOwo+ICsgwqAgwqAgwqAgZnJlZShzdGF0ZS5i dWYpOwo+ICsgwqAgwqAgwqAgc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cj4gKyDCoCDCoCDCoCByZXR1 cm4gZXJyOwo+ICt9Cj4gKwo+IMKgc3RydWN0IGZldGNoX2FyZ3Mgewo+IMKgIMKgIMKgIMKgdW5z aWduZWQgdmVyYm9zZSA6IDE7Cj4gwqB9Owo+IEBAIC0yODksNyArNDkyLDggQEAgc3RhdGljIHZv aWQgcGFyc2VfZmV0Y2goc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgbXVsdGlwbGUpCj4KPiDCoHN0 cnVjdCBwdXNoX2FyZ3Mgewo+IMKgIMKgIMKgIMKgdW5zaWduZWQgZHJ5X3J1biA6IDEsCj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCB2ZXJib3NlIDogMTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHZlcmJvc2UgOiAxLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGhpbiA6IDE7Cj4gwqB9Owo+ Cj4gwqBzdGF0aWMgaW50IHB1c2hfZGF2KHN0cnVjdCBwdXNoX2FyZ3MgKmFyZ3MsIGludCBucl9z cGVjLCBjaGFyICoqc3BlY3MpCj4gQEAgLTMxNCw2ICs1MTgsNTEgQEAgc3RhdGljIGludCBwdXNo X2RhdihzdHJ1Y3QgcHVzaF9hcmdzICphcmdzLCBpbnQgbnJfc3BlYywgY2hhciAqKnNwZWNzKQo+ IMKgIMKgIMKgIMKgcmV0dXJuIDA7Cj4gwqB9Cj4KPiArc3RhdGljIGludCBwdXNoX2dpdChzdHJ1 Y3QgZGlzY292ZXJ5ICpoZWFkcywKPiArIMKgIMKgIMKgIHN0cnVjdCBwdXNoX2FyZ3MgKmFyZ3Ms IGludCBucl9zcGVjLCBjaGFyICoqc3BlY3MpCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCBzdHJi dWYgcmVzID0gU1RSQlVGX0lOSVQ7Cj4gKyDCoCDCoCDCoCBjb25zdCBjaGFyICoqYXJndjsKPiAr IMKgIMKgIMKgIGludCBhcmdjID0gMCwgaSwgZXJyOwo+ICsKPiArIMKgIMKgIMKgIGFyZ3YgPSB4 bWFsbG9jKCgxMCArIG5yX3NwZWMpICogc2l6ZW9mKGNoYXIqKSk7Cj4gKyDCoCDCoCDCoCBhcmd2 W2FyZ2MrK10gPSAic2VuZC1wYWNrIjsKPiArIMKgIMKgIMKgIGFyZ3ZbYXJnYysrXSA9ICItLW9u ZS1zaG90LXJwYyI7Cj4gKyDCoCDCoCDCoCBhcmd2W2FyZ2MrK10gPSAiLS1oZWxwZXItc3RhdHVz IjsKPiArIMKgIMKgIMKgIGlmIChhcmdzLT50aGluKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg YXJndlthcmdjKytdID0gIi0tdGhpbiI7Cj4gKyDCoCDCoCDCoCBpZiAoYXJncy0+ZHJ5X3J1bikK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFyZ3ZbYXJnYysrXSA9ICItLWRyeS1ydW4iOwo+ICsg wqAgwqAgwqAgaWYgKGFyZ3MtPnZlcmJvc2UpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhcmd2 W2FyZ2MrK10gPSAiLS12ZXJib3NlIjsKPiArIMKgIMKgIMKgIGFyZ3ZbYXJnYysrXSA9IHVybDsK PiArIMKgIMKgIMKgIGZvciAoaSA9IDA7IGkgPCBucl9zcGVjOyBpKyspCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCBhcmd2W2FyZ2MrK10gPSBzcGVjc1tpXTsKPiArIMKgIMKgIMKgIGFyZ3ZbYXJn YysrXSA9IE5VTEw7Cj4gKwo+ICsgwqAgwqAgwqAgZXJyID0gb25lX3Nob3RfcnBjX3NlcnZpY2Uo ImdpdC1yZWNlaXZlLXBhY2siLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYXJncy0+dmVyYm9z ZSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFyZ3YsIGhlYWRzLCAmcmVzKTsKPiArIMKgIMKg IMKgIGlmIChyZXMubGVuKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2FmZV93cml0ZSgxLCBy ZXMuYnVmLCByZXMubGVuKTsKPiArIMKgIMKgIMKgIHN0cmJ1Zl9yZWxlYXNlKCZyZXMpOwo+ICsg wqAgwqAgwqAgZnJlZShhcmd2KTsKPiArIMKgIMKgIMKgIHJldHVybiBlcnI7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgcHVzaChzdHJ1Y3QgcHVzaF9hcmdzICphcmdzLCBpbnQgbnJfc3BlYywgY2hh ciAqKnNwZWNzKQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgZGlzY292ZXJ5ICpoZWFkcyA9IGRp c2NvdmVyX3JlZnMoImdpdC1yZWNlaXZlLXBhY2siKTsKPiArIMKgIMKgIMKgIGludCByZXQ7Cj4g Kwo+ICsgwqAgwqAgwqAgaWYgKGhlYWRzLT5wcm90b19naXQpCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCByZXQgPSBwdXNoX2dpdChoZWFkcywgYXJncywgbnJfc3BlYywgc3BlY3MpOwo+ICsgwqAg wqAgwqAgZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0ID0gcHVzaF9kYXYoYXJncywg bnJfc3BlYywgc3BlY3MpOwo+ICsgwqAgwqAgwqAgZnJlZV9kaXNjb3ZlcnkoaGVhZHMpOwo+ICsg wqAgwqAgwqAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiDCoHN0YXRpYyB2b2lkIHBhcnNlX3B1c2go c3RydWN0IHN0cmJ1ZiAqYnVmKQo+IMKgewo+IMKgIMKgIMKgIMKgY2hhciAqKnNwZWNzID0gTlVM TDsKPiBAQCAtMzMwLDYgKzU3OSw4IEBAIHN0YXRpYyB2b2lkIHBhcnNlX3B1c2goc3RydWN0IHN0 cmJ1ZiAqYnVmKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYXJncy5kcnlf cnVuID0gMTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVsc2UgaWYgKCFzdHJjbXAoYnVmLT5i dWYsICJvcHRpb24gdmVyYm9zZSIpKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgYXJncy52ZXJib3NlID0gMTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVsc2UgaWYgKCFz dHJjbXAoYnVmLT5idWYsICJvcHRpb24gdGhpbiIpKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgYXJncy50aGluID0gMTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVsc2UK PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRpZSgiaHR0cCB0cmFuc3BvcnQg ZG9lcyBub3Qgc3VwcG9ydCAlcyIsIGJ1Zi0+YnVmKTsKPgo+IEBAIC0zNDAsNyArNTkxLDcgQEAg c3RhdGljIHZvaWQgcGFyc2VfcHVzaChzdHJ1Y3Qgc3RyYnVmICpidWYpCj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiDCoCDCoCDCoCDCoH0gd2hpbGUgKDEpOwo+ Cj4gLSDCoCDCoCDCoCBpZiAocHVzaF9kYXYoJmFyZ3MsIG5yX3NwZWMsIHNwZWNzKSkKPiArIMKg IMKgIMKgIGlmIChwdXNoKCZhcmdzLCBucl9zcGVjLCBzcGVjcykpCj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBleGl0KDEyOCk7IC8qIGVycm9yIGFscmVhZHkgcmVwb3J0ZWQgKi8KPiDCoCDCoCDC oCDCoGZvciAoaSA9IDA7IGkgPCBucl9zcGVjOyBpKyspCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBmcmVlKHNwZWNzW2ldKTsKPiBAQCAtMzk1LDYgKzY0Niw3IEBAIGludCBtYWluKGludCBhcmdj LCBjb25zdCBjaGFyICoqYXJndikKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oHByaW50ZigiZmV0Y2gtbXVsdGlwbGVcbiIpOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgcHJpbnRmKCJwdXNoXG4iKTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHByaW50Zigib3B0aW9uIGRyeS1ydW5cbiIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcHJpbnRmKCJvcHRpb24gdGhpblxuIik7Cj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBwcmludGYoIm9wdGlvbiB2ZXJib3NlXG4iKTsKPiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHByaW50ZigiXG4iKTsKPiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGZmbHVzaChzdGRvdXQpOwo+IGRpZmYgLS1naXQgYS9zZW5k LXBhY2suaCBiL3NlbmQtcGFjay5oCj4gaW5kZXggOGIzY2YwMi4uYTdmNGFiZiAxMDA2NDQKPiAt LS0gYS9zZW5kLXBhY2suaAo+ICsrKyBiL3NlbmQtcGFjay5oCj4gQEAgLTgsNyArOCw4IEBAIHN0 cnVjdCBzZW5kX3BhY2tfYXJncyB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmb3JjZV91cGRh dGU6MSwKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVzZV90aGluX3BhY2s6MSwKPiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoHVzZV9vZnNfZGVsdGE6MSwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGRyeV9ydW46MTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRyeV9ydW46MSwKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIG9uZV9zaG90X3JwYzoxOwo+IMKgfTsKPgo+IMKgaW50IHNlbmRfcGFj ayhzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCj4gZGlmZiAtLWdpdCBhL3NpZGViYW5kLmMg Yi9zaWRlYmFuZC5jCj4gaW5kZXggODk5YjFmZi4uZDVmZmExYyAxMDA2NDQKPiAtLS0gYS9zaWRl YmFuZC5jCj4gKysrIGIvc2lkZWJhbmQuYwo+IEBAIC0xMzUsOSArMTM1LDE0IEBAIHNzaXplX3Qg c2VuZF9zaWRlYmFuZChpbnQgZmQsIGludCBiYW5kLCBjb25zdCBjaGFyICpkYXRhLCBzc2l6ZV90 IHN6LCBpbnQgcGFja2V0Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBuID0gc3o7Cj4gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBpZiAocGFja2V0X21heCAtIDUgPCBuKQo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgbiA9IHBhY2tldF9tYXggLSA1Owo+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgc3ByaW50ZihoZHIsICIlMDR4IiwgbiArIDUpOwo+IC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgaGRyWzRdID0gYmFuZDsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNhZmVfd3JpdGUo ZmQsIGhkciwgNSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoMCA8PSBiYW5kKSB7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzcHJpbnRmKGhkciwgIiUwNHgiLCBu ICsgNSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBoZHJbNF0gPSBiYW5k Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2FmZV93cml0ZShmZCwgaGRy LCA1KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0gZWxzZSB7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBzcHJpbnRmKGhkciwgIiUwNHgiLCBuICsgNCk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzYWZlX3dyaXRlKGZkLCBoZHIsIDQpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2FmZV93cml0 ZShmZCwgcCwgbik7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwICs9IG47Cj4gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBzeiAtPSBuOwo+IGRpZmYgLS1naXQgYS90cmFuc3BvcnQuYyBiL3RyYW5z cG9ydC5jCj4gaW5kZXggNmQ5NjUyZC4uMmZmMTY1MCAxMDA2NDQKPiAtLS0gYS90cmFuc3BvcnQu Ywo+ICsrKyBiL3RyYW5zcG9ydC5jCj4gQEAgLTczMSw2ICs3MzEsNyBAQCBzdGF0aWMgaW50IGdp dF90cmFuc3BvcnRfcHVzaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYg KnJlbW90ZV9yZQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIE5VTEwpOwo+IMKgIMKgIMKgIMKgfQo+Cj4gKyDCoCDCoCDCoCBtZW1zZXQoJmFyZ3MsIDAs IHNpemVvZihhcmdzKSk7Cj4gwqAgwqAgwqAgwqBhcmdzLnNlbmRfbWlycm9yID0gISEoZmxhZ3Mg JiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpOwo+IMKgIMKgIMKgIMKgYXJncy5mb3JjZV91cGRhdGUg PSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKPiDCoCDCoCDCoCDCoGFyZ3MudXNl X3RoaW5fcGFjayA9IGRhdGEtPnRoaW47Cj4gLS0KPiAxLjYuNS41Mi5nMGZmMmUKPgo+IC0tCj4g VG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJl IGdpdCIgaW4KPiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVs Lm9yZwo+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgwqBodHRwOi8vdmdlci5rZXJuZWwub3JnL21h am9yZG9tby1pbmZvLmh0bWwKPgoKCgotLSAKRmVsaXBlIENvbnRyZXJhcwo=