From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 807C4E706F8 for ; Thu, 21 Sep 2023 09:10:03 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4415E10E595; Thu, 21 Sep 2023 09:10:03 +0000 (UTC) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 46F7510E595 for ; Thu, 21 Sep 2023 09:10:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1695287400; x=1726823400; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=vlmlkVIZFxIjKRLU2DPWzuEf88YLtmJBBNUgkFthQFA=; b=bjAqNvjb/wuyWq0YFZnYIGRXL8IAdG8cZmoG/1x/Jc0mkUrUrQd5N0M/ TZBDSry1CTILrp+hRf1KZoplvjuNxYWg4HaQNysgLHUWyKPjNP45GkMm5 THMgiQjtAs/o3+PAlyN4kHyrWP/mrjDPsm0PwqQH/IwNwIcy32brPVjcc pq/VHmA9Nwm+Lsh+2g0XJ2VjELEGHe3CT9y3povQJMzJdrP1GeD+Lvr3Y CqbtS06CQv1A2LYQzB44nCuTEYsb+1Jyd9sKwNvvIJqkS2giqwo5kkxFF 9zbipe7QypCl+pVoLrWkkaIYfRP+aWWHANsDRCEGQ935OCRN9qH4c+rYf A==; X-IronPort-AV: E=McAfee;i="6600,9927,10839"; a="446936367" X-IronPort-AV: E=Sophos;i="6.03,165,1694761200"; d="scan'208";a="446936367" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2023 02:09:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10839"; a="776337625" X-IronPort-AV: E=Sophos;i="6.03,165,1694761200"; d="scan'208";a="776337625" Received: from kinstrum-mobl.ger.corp.intel.com (HELO [10.249.254.152]) ([10.249.254.152]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2023 02:09:56 -0700 Message-ID: <1e0b98c7b9de9a52aa0a7874a361b83b0b4fc406.camel@linux.intel.com> From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Matthew Brost , intel-xe@lists.freedesktop.org Date: Thu, 21 Sep 2023 11:09:53 +0200 In-Reply-To: <20230914204053.2220281-4-matthew.brost@intel.com> References: <20230914204053.2220281-1-matthew.brost@intel.com> <20230914204053.2220281-4-matthew.brost@intel.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 Subject: Re: [Intel-xe] [PATCH 3/6] drm/xe: Remove async worker and rework sync binds X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Matthew Brost Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" T24gVGh1LCAyMDIzLTA5LTE0IGF0IDEzOjQwIC0wNzAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ IEFzeW5jIHdvcmtlciBpcyBnb25lLiBBbGwgam9icyBhbmQgbWVtb3J5IGFsbG9jYXRpb25zIGRv bmUgaW4gSU9DVEwKPiB0bwo+IGFsaWduIHdpdGggZG1hIGZlbmNpbmcgcnVsZXMuCj4gCj4gQXN5 bmMgdnMuIHN5bmMgbm93IG1lYW5zIHdoZW4gZG8gYmluZCBvcGVyYXRpb25zIGNvbXBsZXRlIHJl bGF0aXZlIHRvCj4gdGhlIElPQ1RMLiBBc3luYyBjb21wbGV0ZXMgd2hlbiBvdXQtc3luY3Mgc2ln bmFsIHdoaWxlIHN5bmMgY29tcGxldGVzCj4gd2hlbiB0aGUgSU9DVEwgcmV0dXJucy4gSW4tc3lu Y3MgYW5kIG91dC1zeW5jcyBhcmUgb25seSBhbGxvd2VkIGluCj4gYXN5bmMKPiBtb2RlLgo+IAo+ IElmIG1lbW9yeSBhbGxvY2F0aW9ucyBmYWlsIGluIHRoZSBqb2IgY3JlYXRpb24gc3RlcCB0aGUg Vk0gaXMga2lsbGVkLgo+IFRoaXMgaXMgdGVtcG9yYXJ5LCBldmVudHVhbGx5IGEgcHJvcGVyIHVu d2luZCB3aWxsIGJlIGRvbmUgYW5kIFZNCj4gd2lsbAo+IGJlIHVzYWJsZS4KPiAKPiBTaWduZWQt b2ZmLWJ5OiBNYXR0aGV3IEJyb3N0IDxtYXR0dGhldy5icm9zdEBpbnRlbC5jb20+CgpSZXZpZXdl ZC1ieTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29t PgoKCj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlYy5jwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHzCoCA0MyAtLQo+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWUu Y8KgwqDCoMKgwqDCoCB8wqDCoCA3ICstCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlY19x dWV1ZV90eXBlcy5oIHzCoMKgIDIgKwo+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5bmMuY8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTQgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94 ZV9zeW5jLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArLQo+IMKgZHJpdmVycy9n cHUvZHJtL3hlL3hlX3ZtLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgNTM2ICsrKysr LS0tLS0tLS0tLS0tLS0tLQo+IC0tCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uaMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiAtCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUv eGVfdm1fdHlwZXMuaMKgwqDCoMKgwqDCoMKgwqAgfMKgIDMxICstCj4gwqBpbmNsdWRlL3VhcGkv ZHJtL3hlX2RybS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAzMyArLQo+IMKg OSBmaWxlcyBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9ucygrKSwgNTQzIGRlbGV0aW9ucygtKQo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlYy5jCj4gYi9kcml2ZXJzL2dw dS9kcm0veGUveGVfZXhlYy5jCj4gaW5kZXggN2QwMzgxZDQxYjMyLi4yOGU4NGEwYmJlYjAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWMuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS94ZS94ZV9leGVjLmMKPiBAQCAtMTk2LDI3ICsxOTYsNiBAQCBpbnQgeGVfZXhlY19p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkCj4gKmRhdGEsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKg wqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgLyoKPiAtwqDCoMKgwqDCoMKgwqAgKiBXZSBj YW4ndCBpbnN0YWxsIGEgam9iIGludG8gdGhlIFZNIGRtYS1yZXN2IHNoYXJlZCBzbG90Cj4gYmVm b3JlIGFuCj4gLcKgwqDCoMKgwqDCoMKgICogYXN5bmMgVk0gYmluZCBwYXNzZWQgaW4gYXMgYSBm ZW5jZSB3aXRob3V0IHRoZSByaXNrIG9mCj4gZGVhZGxvY2tpbmcgYXMKPiAtwqDCoMKgwqDCoMKg wqAgKiB0aGUgYmluZCBjYW4gdHJpZ2dlciBhbiBldmljdGlvbiB3aGljaCBpbiB0dXJuIGRlcGVu ZHMgb24KPiBhbnl0aGluZyBpbgo+IC3CoMKgwqDCoMKgwqDCoCAqIHRoZSBWTSBkbWEtcmVzdiBz aGFyZWQgc2xvdHMuIE5vdCBhbiBpZGVhbCBzb2x1dGlvbiwgYnV0Cj4gd2Ugd2FpdCBmb3IKPiAt wqDCoMKgwqDCoMKgwqAgKiBhbGwgZGVwZW5kZW50IGFzeW5jIFZNIGJpbmRzIHRvIHN0YXJ0IChp bnN0YWxsIGNvcnJlY3QKPiBmZW5jZXMgaW50bwo+IC3CoMKgwqDCoMKgwqDCoCAqIGRtYS1yZXN2 IHNsb3RzKSBiZWZvcmUgbW92aW5nIGZvcndhcmQuCj4gLcKgwqDCoMKgwqDCoMKgICovCj4gLcKg wqDCoMKgwqDCoMKgaWYgKCF4ZV92bV9ub19kbWFfZmVuY2VzKHZtKSAmJgo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoCB2bS0+ZmxhZ3MgJiBYRV9WTV9GTEFHX0FTWU5DX0JJTkRfT1BTKSB7Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBhcmdzLT5udW1fc3lu Y3M7IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBzeW5jc1tpXS5mZW5jZTsKPiAtCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZmVuY2UpIHsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBlcnIgPQo+IHhlX3ZtX2FzeW5jX2ZlbmNlX3dhaXRfc3RhcnQoZmVuY2UpOwo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChlcnIpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX3N5bmNzOwo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gLcKgwqDCoMKgwqDCoMKgfQo+IC0KPiDCoHJldHJ5Ogo+ IMKgwqDCoMKgwqDCoMKgwqBpZiAoIXhlX3ZtX25vX2RtYV9mZW5jZXModm0pICYmCj4geGVfdm1f dXNlcnB0cl9jaGVja19yZXBpbih2bSkpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGVyciA9IGRvd25fd3JpdGVfa2lsbGFibGUoJnZtLT5sb2NrKTsKPiBAQCAtMjI5LDI4ICsy MDgsNiBAQCBpbnQgeGVfZXhlY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkCj4g KmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX3N5bmNzOwo+IMKgCj4g LcKgwqDCoMKgwqDCoMKgLyogV2UgZG9uJ3QgYWxsb3cgZXhlY3Mgd2hpbGUgdGhlIFZNIGlzIGlu IGVycm9yIHN0YXRlICovCj4gLcKgwqDCoMKgwqDCoMKgaWYgKHZtLT5hc3luY19vcHMuZXJyb3Ip IHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gdm0tPmFzeW5jX29wcy5l cnJvcjsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJfdW5sb2NrX2xp c3Q7Cj4gLcKgwqDCoMKgwqDCoMKgfQo+IC0KPiAtwqDCoMKgwqDCoMKgwqAvKgo+IC3CoMKgwqDC oMKgwqDCoCAqIEV4dHJlbWUgY29ybmVyIHdoZXJlIHdlIGV4aXQgYSBWTSBlcnJvciBzdGF0ZSB3 aXRoIGEKPiBtdW5tYXAgc3R5bGUgVk0KPiAtwqDCoMKgwqDCoMKgwqAgKiB1bmJpbmQgaW5mbGln aHQgd2hpY2ggcmVxdWlyZXMgYSByZWJpbmQuIEluIHRoaXMgY2FzZSB0aGUKPiByZWJpbmQKPiAt wqDCoMKgwqDCoMKgwqAgKiBuZWVkcyB0byBpbnN0YWxsIHNvbWUgZmVuY2VzIGludG8gdGhlIGRt YS1yZXN2IHNsb3RzLiBUaGUKPiB3b3JrZXIgdG8KPiAtwqDCoMKgwqDCoMKgwqAgKiBkbyB0aGlz IHF1ZXVlZCwgbGV0IHRoYXQgd29ya2VyIG1ha2UgcHJvZ3Jlc3MgYnkgZHJvcHBpbmcKPiB2bS0+ bG9jaywKPiAtwqDCoMKgwqDCoMKgwqAgKiBmbHVzaGluZyB0aGUgd29ya2VyIGFuZCByZXRyeWlu ZyB0aGUgZXhlYy4KPiAtwqDCoMKgwqDCoMKgwqAgKi8KPiAtwqDCoMKgwqDCoMKgwqBpZiAodm0t PmFzeW5jX29wcy5tdW5tYXBfcmViaW5kX2luZmxpZ2h0KSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICh3cml0ZV9sb2NrZWQpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1cF93cml0ZSgmdm0tPmxvY2spOwo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1cF9yZWFkKCZ2bS0+bG9jayk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGZsdXNoX3dvcmsoJnZtLT5hc3luY19vcHMud29yayk7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcmV0cnk7Cj4gLcKgwqDCoMKgwqDCoMKgfQo+IC0K PiDCoMKgwqDCoMKgwqDCoMKgaWYgKHdyaXRlX2xvY2tlZCkgewo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZXJyID0geGVfdm1fdXNlcnB0cl9waW4odm0pOwo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZG93bmdyYWRlX3dyaXRlKCZ2bS0+bG9jayk7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVlLmMKPiBiL2RyaXZlcnMvZ3B1 L2RybS94ZS94ZV9leGVjX3F1ZXVlLmMKPiBpbmRleCA2NzI1MTU3ZDhjMWQuLmU5NTBjOWVmOWQ0 MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlY19xdWV1ZS5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWUuYwo+IEBAIC02NjEsNyArNjYxLDEw IEBAIGludCB4ZV9leGVjX3F1ZXVlX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZQo+ICpk ZXYsIHZvaWQgKmRhdGEsCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9EQkcoeGUsIGVj aVswXS5ndF9pZCA+PSB4ZS0+aW5mby5ndF9jb3VudCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmIChlY2lb MF0uZW5naW5lX2NsYXNzID09IERSTV9YRV9FTkdJTkVfQ0xBU1NfVk1fQklORCkgewo+ICvCoMKg wqDCoMKgwqDCoGlmIChlY2lbMF0uZW5naW5lX2NsYXNzID49IERSTV9YRV9FTkdJTkVfQ0xBU1Nf Vk1fQklORF9BU1lOQykKPiB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wg c3luYyA9IGVjaVswXS5lbmdpbmVfY2xhc3MgPT0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9YRV9FTkdJTkVfQ0xBU1NfVk1fQklORF9TWU5DOwo+ ICvCoMKgwqDCoMKgwqDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yX2Vh Y2hfZ3QoZ3QsIHhlLCBpZCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9leGVjX3F1ZXVlICpuZXc7Cj4gwqAKPiBAQCAtNjg3LDYg KzY5MCw4IEBAIGludCB4ZV9leGVjX3F1ZXVlX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZQo+ICpkZXYsIHZvaWQgKmRhdGEsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhcmdzLT53aWR0aCwgaHdlLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAKPiBFWEVDX1FVRVVFX0ZMQUdfUEVSU0lTVEVOVCB8Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFWEVDX1FVRVVFX0ZMQUdfVk0K PiB8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzeW5jID8g MCA6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiBFWEVD X1FVRVVFX0ZMQUdfVk1fQVNZTkMpIHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIChpZCA/Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgCj4gRVhFQ19RVUVVRV9GTEFHX0JJTkRfRU5HSU5FX0NISUxEIDoKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCkpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlY19xdWV1ZV90eXBlcy5oCj4gYi9kcml2ZXJzL2dw dS9kcm0veGUveGVfZXhlY19xdWV1ZV90eXBlcy5oCj4gaW5kZXggMzQ3ZDI4NDQyNzAxLi5iODI4 ZDhhNjBhZGYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWVf dHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVlX3R5cGVzLmgK PiBAQCAtNjYsNiArNjYsOCBAQCBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSB7Cj4gwqAjZGVmaW5lIEVY RUNfUVVFVUVfRkxBR19WTcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oEJJVCg1KQo+IMKgLyogY2hpbGQgb2YgVk0gcXVldWUgZm9yIG11bHRpLXRpbGUgVk0gam9icyAq Lwo+IMKgI2RlZmluZSBFWEVDX1FVRVVFX0ZMQUdfQklORF9FTkdJTkVfQ0hJTETCoMKgwqDCoMKg wqBCSVQoNikKPiArLyogVk0gam9icyBmb3IgdGhpcyBxdWV1ZSBhcmUgYXN5bmNocm9ub3VzICov Cj4gKyNkZWZpbmUgRVhFQ19RVUVVRV9GTEFHX1ZNX0FTWU5DwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgQklUKDcpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gwqDCoMKgwqDCoMKg wqDCoCAqIEBmbGFnczogZmxhZ3MgZm9yIHRoaXMgZXhlYyBxdWV1ZSwgc2hvdWxkIHN0YXRpY2Fs bHkgc2V0dXAKPiBhc2lkZSBmcm9tIGJhbgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v eGUveGVfc3luYy5jCj4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3luYy5jCj4gaW5kZXggOWZj ZDc4MDJiYTMwLi43M2VmMjU5YWEzODcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hl L3hlX3N5bmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeW5jLmMKPiBAQCAtMTgs NyArMTgsNiBAQAo+IMKgI2luY2x1ZGUgInhlX3NjaGVkX2pvYl90eXBlcy5oIgo+IMKgCj4gwqAj ZGVmaW5lIFNZTkNfRkxBR1NfVFlQRV9NQVNLIDB4Mwo+IC0jZGVmaW5lIFNZTkNfRkxBR1NfRkVO Q0VfSU5TVEFMTEVEwqDCoMKgwqDCoDB4MTAwMDAKPiDCoAo+IMKgc3RydWN0IHVzZXJfZmVuY2Ug ewo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZGV2aWNlICp4ZTsKPiBAQCAtMjIzLDEyICsy MjIsMTEgQEAgaW50IHhlX3N5bmNfZW50cnlfYWRkX2RlcHMoc3RydWN0IHhlX3N5bmNfZW50cnkK PiAqc3luYywgc3RydWN0IHhlX3NjaGVkX2pvYiAqam9iKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiDCoH0KPiDCoAo+IC1ib29sIHhlX3N5bmNfZW50cnlfc2lnbmFsKHN0cnVjdCB4ZV9z eW5jX2VudHJ5ICpzeW5jLCBzdHJ1Y3QKPiB4ZV9zY2hlZF9qb2IgKmpvYiwKPiArdm9pZCB4ZV9z eW5jX2VudHJ5X3NpZ25hbChzdHJ1Y3QgeGVfc3luY19lbnRyeSAqc3luYywgc3RydWN0Cj4geGVf c2NoZWRfam9iICpqb2IsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCj4gwqB7Cj4gLcKgwqDCoMKgwqDC oMKgaWYgKCEoc3luYy0+ZmxhZ3MgJiBEUk1fWEVfU1lOQ19TSUdOQUwpIHx8Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgIHN5bmMtPmZsYWdzICYgU1lOQ19GTEFHU19GRU5DRV9JTlNUQUxMRUQpCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiArwqDCoMKgwqDC oMKgwqBpZiAoIShzeW5jLT5mbGFncyAmIERSTV9YRV9TWU5DX1NJR05BTCkpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAo c3luYy0+Y2hhaW5fZmVuY2UpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRy bV9zeW5jb2JqX2FkZF9wb2ludChzeW5jLT5zeW5jb2JqLCBzeW5jLQo+ID5jaGFpbl9mZW5jZSwK PiBAQCAtMjYwLDEyICsyNTgsNiBAQCBib29sIHhlX3N5bmNfZW50cnlfc2lnbmFsKHN0cnVjdCB4 ZV9zeW5jX2VudHJ5Cj4gKnN5bmMsIHN0cnVjdCB4ZV9zY2hlZF9qb2IgKmpvYiwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpvYi0+dXNlcl9mZW5jZS5hZGRyID0gc3luYy0+YWRk cjsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpvYi0+dXNlcl9mZW5jZS52YWx1 ZSA9IHN5bmMtPnRpbWVsaW5lX3ZhbHVlOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IC3CoMKg wqDCoMKgwqDCoC8qIFRPRE86IGV4dGVybmFsIEJPPyAqLwo+IC0KPiAtwqDCoMKgwqDCoMKgwqBz eW5jLT5mbGFncyB8PSBTWU5DX0ZMQUdTX0ZFTkNFX0lOU1RBTExFRDsKPiAtCj4gLcKgwqDCoMKg wqDCoMKgcmV0dXJuIHRydWU7Cj4gwqB9Cj4gwqAKPiDCoHZvaWQgeGVfc3luY19lbnRyeV9jbGVh bnVwKHN0cnVjdCB4ZV9zeW5jX2VudHJ5ICpzeW5jKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0veGUveGVfc3luYy5oCj4gYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfc3luYy5oCj4gaW5k ZXggNGNiY2Y3YTE5OTExLi4zMDk1OGRkYzRjZGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3hlL3hlX3N5bmMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeW5jLmgKPiBA QCAtMTksNyArMTksNyBAQCBpbnQgeGVfc3luY19lbnRyeV9wYXJzZShzdHJ1Y3QgeGVfZGV2aWNl ICp4ZSwKPiBzdHJ1Y3QgeGVfZmlsZSAqeGVmLAo+IMKgaW50IHhlX3N5bmNfZW50cnlfd2FpdChz dHJ1Y3QgeGVfc3luY19lbnRyeSAqc3luYyk7Cj4gwqBpbnQgeGVfc3luY19lbnRyeV9hZGRfZGVw cyhzdHJ1Y3QgeGVfc3luY19lbnRyeSAqc3luYywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZV9zY2hlZF9qb2IgKmpvYik7Cj4g LWJvb2wgeGVfc3luY19lbnRyeV9zaWduYWwoc3RydWN0IHhlX3N5bmNfZW50cnkgKnN5bmMsCj4g K3ZvaWQgeGVfc3luY19lbnRyeV9zaWduYWwoc3RydWN0IHhlX3N5bmNfZW50cnkgKnN5bmMsCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IHhlX3NjaGVkX2pvYiAqam9iLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKPiDCoHZvaWQgeGVfc3lu Y19lbnRyeV9jbGVhbnVwKHN0cnVjdCB4ZV9zeW5jX2VudHJ5ICpzeW5jKTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0u Ywo+IGluZGV4IGVhMWYwODk1NDliMS4uZjlkYzliZjZiMzZiIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS94ZS94ZV92bS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMK PiBAQCAtNTY1LDcgKzU2NSw3IEBAIHN0YXRpYyB2b2lkIHByZWVtcHRfcmViaW5kX3dvcmtfZnVu YyhzdHJ1Y3QKPiB3b3JrX3N0cnVjdCAqdykKPiDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50 IGZlbmNlX2NvdW50ID0gMDsKPiDCoMKgwqDCoMKgwqDCoMKgTElTVF9IRUFEKHByZWVtcHRfZmVu Y2VzKTsKPiDCoMKgwqDCoMKgwqDCoMKga3RpbWVfdCBlbmQgPSAwOwo+IC3CoMKgwqDCoMKgwqDC oGludCBlcnI7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGVyciA9IDA7Cj4gwqDCoMKgwqDCoMKgwqDC oGxvbmcgd2FpdDsKPiDCoMKgwqDCoMKgwqDCoMKgaW50IF9fbWF5YmVfdW51c2VkIHRyaWVzID0g MDsKPiDCoAo+IEBAIC01ODEsMjIgKzU4MSw2IEBAIHN0YXRpYyB2b2lkIHByZWVtcHRfcmViaW5k X3dvcmtfZnVuYyhzdHJ1Y3QKPiB3b3JrX3N0cnVjdCAqdykKPiDCoMKgwqDCoMKgwqDCoMKgfQo+ IMKgCj4gwqByZXRyeToKPiAtwqDCoMKgwqDCoMKgwqBpZiAodm0tPmFzeW5jX29wcy5lcnJvcikK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXRfdW5sb2NrX291dGVyOwo+ IC0KPiAtwqDCoMKgwqDCoMKgwqAvKgo+IC3CoMKgwqDCoMKgwqDCoCAqIEV4dHJlbWUgY29ybmVy IHdoZXJlIHdlIGV4aXQgYSBWTSBlcnJvciBzdGF0ZSB3aXRoIGEKPiBtdW5tYXAgc3R5bGUgVk0K PiAtwqDCoMKgwqDCoMKgwqAgKiB1bmJpbmQgaW5mbGlnaHQgd2hpY2ggcmVxdWlyZXMgYSByZWJp bmQuIEluIHRoaXMgY2FzZSB0aGUKPiByZWJpbmQKPiAtwqDCoMKgwqDCoMKgwqAgKiBuZWVkcyB0 byBpbnN0YWxsIHNvbWUgZmVuY2VzIGludG8gdGhlIGRtYS1yZXN2IHNsb3RzLiBUaGUKPiB3b3Jr ZXIgdG8KPiAtwqDCoMKgwqDCoMKgwqAgKiBkbyB0aGlzIHF1ZXVlZCwgbGV0IHRoYXQgd29ya2Vy IG1ha2UgcHJvZ3Jlc3MgYnkgZHJvcHBpbmcKPiB2bS0+bG9jawo+IC3CoMKgwqDCoMKgwqDCoCAq IGFuZCB0cnlpbmcgdGhpcyBhZ2Fpbi4KPiAtwqDCoMKgwqDCoMKgwqAgKi8KPiAtwqDCoMKgwqDC oMKgwqBpZiAodm0tPmFzeW5jX29wcy5tdW5tYXBfcmViaW5kX2luZmxpZ2h0KSB7Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVwX3dyaXRlKCZ2bS0+bG9jayk7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsdXNoX3dvcmsoJnZtLT5hc3luY19vcHMud29yayk7Cj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcmV0cnk7Cj4gLcKgwqDCoMKgwqDC oMKgfQo+IC0KPiDCoMKgwqDCoMKgwqDCoMKgaWYgKHhlX3ZtX3VzZXJwdHJfY2hlY2tfcmVwaW4o dm0pKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSB4ZV92bV91c2Vy cHRyX3Bpbih2bSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+ IEBAIC0xMTkwLDcgKzExNzQsNiBAQCBzdGF0aWMgc3RydWN0IGRybV9ncHV2YV9mbl9vcHMgZ3B1 dmFfb3BzID0gewo+IMKgwqDCoMKgwqDCoMKgwqAub3BfYWxsb2MgPSB4ZV92bV9vcF9hbGxvYywK PiDCoH07Cj4gwqAKPiAtc3RhdGljIHZvaWQgeGVfdm1hX29wX3dvcmtfZnVuYyhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKncpOwo+IMKgc3RhdGljIHZvaWQgdm1fZGVzdHJveV93b3JrX2Z1bmMoc3RydWN0 IHdvcmtfc3RydWN0ICp3KTsKPiDCoAo+IMKgc3RydWN0IHhlX3ZtICp4ZV92bV9jcmVhdGUoc3Ry dWN0IHhlX2RldmljZSAqeGUsIHUzMiBmbGFncykKPiBAQCAtMTIyNCwxMCArMTIwNyw2IEBAIHN0 cnVjdCB4ZV92bSAqeGVfdm1fY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UKPiAqeGUsIHUzMiBmbGFn cykKPiDCoMKgwqDCoMKgwqDCoMKgSU5JVF9MSVNUX0hFQUQoJnZtLT5ub3RpZmllci5yZWJpbmRf bGlzdCk7Cj4gwqDCoMKgwqDCoMKgwqDCoHNwaW5fbG9ja19pbml0KCZ2bS0+bm90aWZpZXIubGlz dF9sb2NrKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoElOSVRfTElTVF9IRUFEKCZ2bS0+YXN5bmNf b3BzLnBlbmRpbmcpOwo+IC3CoMKgwqDCoMKgwqDCoElOSVRfV09SSygmdm0tPmFzeW5jX29wcy53 b3JrLCB4ZV92bWFfb3Bfd29ya19mdW5jKTsKPiAtwqDCoMKgwqDCoMKgwqBzcGluX2xvY2tfaW5p dCgmdm0tPmFzeW5jX29wcy5sb2NrKTsKPiAtCj4gwqDCoMKgwqDCoMKgwqDCoElOSVRfV09SSygm dm0tPmRlc3Ryb3lfd29yaywgdm1fZGVzdHJveV93b3JrX2Z1bmMpOwo+IMKgCj4gwqDCoMKgwqDC oMKgwqDCoElOSVRfTElTVF9IRUFEKCZ2bS0+cHJlZW1wdC5leGVjX3F1ZXVlcyk7Cj4gQEAgLTEy ODEsMTEgKzEyNjAsNiBAQCBzdHJ1Y3QgeGVfdm0gKnhlX3ZtX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2 aWNlCj4gKnhlLCB1MzIgZmxhZ3MpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2 bS0+YmF0Y2hfaW52YWxpZGF0ZV90bGIgPSBmYWxzZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKg Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKGZsYWdzICYgWEVfVk1fRkxBR19BU1lOQ19CSU5EX09QUykg ewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bS0+YXN5bmNfb3BzLmZlbmNlLmNv bnRleHQgPQo+IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOwo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB2bS0+ZmxhZ3MgfD0gWEVfVk1fRkxBR19BU1lOQ19CSU5EX09QUzsKPiAt wqDCoMKgwqDCoMKgwqB9Cj4gLQo+IMKgwqDCoMKgwqDCoMKgwqAvKiBGaWxsIHB0X3Jvb3QgYWZ0 ZXIgYWxsb2NhdGluZyBzY3JhdGNoIHRhYmxlcyAqLwo+IMKgwqDCoMKgwqDCoMKgwqBmb3JfZWFj aF90aWxlKHRpbGUsIHhlLCBpZCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCF2bS0+cHRfcm9vdFtpZF0pCj4gQEAgLTEzMDEsNiArMTI3NSw5IEBAIHN0cnVjdCB4ZV92 bSAqeGVfdm1fY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UKPiAqeGUsIHUzMiBmbGFncykKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZ3Qg Kmd0ID0gdGlsZS0+cHJpbWFyeV9ndDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfdm0gKm1pZ3JhdGVfdm07Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2V4ZWNfcXVldWUg KnE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIg Y3JlYXRlX2ZsYWdzID0gRVhFQ19RVUVVRV9GTEFHX1ZNIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoKGZsYWdzICYgWEVf Vk1fRkxBR19BU1lOQ19ERUZBVUxUKSA/Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRVhFQ19RVUVVRV9GTEFHX1ZNX0FTWU5D IDogMCk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoIXZtLT5wdF9yb290W2lkXSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gQEAgLTEzMDgs NyArMTI4NSw3IEBAIHN0cnVjdCB4ZV92bSAqeGVfdm1fY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UK PiAqeGUsIHUzMiBmbGFncykKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBtaWdyYXRlX3ZtID0geGVfbWlncmF0ZV9nZXRfdm0odGlsZS0KPiA+bWlncmF0 ZSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcSA9 IHhlX2V4ZWNfcXVldWVfY3JlYXRlX2NsYXNzKHhlLCBndCwKPiBtaWdyYXRlX3ZtLAo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IFhFX0VOR0lO RV9DTEFTU19DT1BZLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgCj4gRVhFQ19RVUVVRV9GTEFHX1ZNKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjcmVhdGVfZmxhZ3MpOwo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtX3B1dChtaWdyYXRlX3Zt KTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo SVNfRVJSKHEpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtX2Nsb3NlX2FuZF9wdXQodm0pOwo+IEBAIC0xMzYz LDEyICsxMzQwLDYgQEAgc3RydWN0IHhlX3ZtICp4ZV92bV9jcmVhdGUoc3RydWN0IHhlX2Rldmlj ZQo+ICp4ZSwgdTMyIGZsYWdzKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUihlcnIp Owo+IMKgfQo+IMKgCj4gLXN0YXRpYyB2b2lkIGZsdXNoX2FzeW5jX29wcyhzdHJ1Y3QgeGVfdm0g KnZtKQo+IC17Cj4gLcKgwqDCoMKgwqDCoMKgcXVldWVfd29yayhzeXN0ZW1fdW5ib3VuZF93cSwg JnZtLT5hc3luY19vcHMud29yayk7Cj4gLcKgwqDCoMKgwqDCoMKgZmx1c2hfd29yaygmdm0tPmFz eW5jX29wcy53b3JrKTsKPiAtfQo+IC0KPiDCoHN0YXRpYyB2b2lkIHhlX3ZtX2Nsb3NlKHN0cnVj dCB4ZV92bSAqdm0pCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoGRvd25fd3JpdGUoJnZtLT5sb2Nr KTsKPiBAQCAtMTM4OCw3ICsxMzU5LDYgQEAgdm9pZCB4ZV92bV9jbG9zZV9hbmRfcHV0KHN0cnVj dCB4ZV92bSAqdm0pCj4gwqDCoMKgwqDCoMKgwqDCoHhlX2Fzc2VydCh4ZSwgIXZtLT5wcmVlbXB0 Lm51bV9leGVjX3F1ZXVlcyk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgeGVfdm1fY2xvc2Uodm0p Owo+IC3CoMKgwqDCoMKgwqDCoGZsdXNoX2FzeW5jX29wcyh2bSk7Cj4gwqDCoMKgwqDCoMKgwqDC oGlmICh4ZV92bV9pbl9jb21wdXRlX21vZGUodm0pKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZmx1c2hfd29yaygmdm0tPnByZWVtcHQucmViaW5kX3dvcmspOwo+IMKgCj4gQEAg LTE2MDgsMTAgKzE1NzgsOCBAQCB4ZV92bV91bmJpbmRfdm1hKHN0cnVjdCB4ZV92bWEgKnZtYSwg c3RydWN0Cj4geGVfZXhlY19xdWV1ZSAqcSwKPiDCoAo+IMKgZXJyX2ZlbmNlczoKPiDCoMKgwqDC oMKgwqDCoMKgaWYgKGZlbmNlcykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3 aGlsZSAoY3VyX2ZlbmNlKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKiBGSVhNRTogUmV3aW5kIHRoZSBwcmV2aW91cyBiaW5kcz8gKi8KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd2hpbGUgKGN1cl9mZW5jZSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfZmVuY2VfcHV0KGZlbmNl c1stLWN1cl9mZW5jZV0pOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZShmZW5jZXMpOwo+IMKgwqDCoMKgwqDC oMKgwqB9Cj4gwqAKPiBAQCAtMTY4NSwxMDAgKzE2NTMsMjQgQEAgeGVfdm1fYmluZF92bWEoc3Ry dWN0IHhlX3ZtYSAqdm1hLCBzdHJ1Y3QKPiB4ZV9leGVjX3F1ZXVlICpxLAo+IMKgCj4gwqBlcnJf ZmVuY2VzOgo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoZmVuY2VzKSB7Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHdoaWxlIChjdXJfZmVuY2UpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZJWE1FOiBSZXdpbmQgdGhlIHByZXZpb3Vz IGJpbmRzPyAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3aGlsZSAoY3VyX2Zl bmNlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRt YV9mZW5jZV9wdXQoZmVuY2VzWy0tY3VyX2ZlbmNlXSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKGZlbmNl cyk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJS X1BUUihlcnIpOwo+IMKgfQo+IMKgCj4gLXN0cnVjdCBhc3luY19vcF9mZW5jZSB7Cj4gLcKgwqDC oMKgwqDCoMKgc3RydWN0IGRtYV9mZW5jZSBmZW5jZTsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZG1hX2ZlbmNlICp3YWl0X2ZlbmNlOwo+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkbWFfZmVuY2Vf Y2IgY2I7Cj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3ZtICp2bTsKPiAtwqDCoMKgwqDCoMKg wqB3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKPiAtwqDCoMKgwqDCoMKgwqBib29sIHN0YXJ0ZWQ7Cj4g LX07Cj4gLQo+IC1zdGF0aWMgY29uc3QgY2hhciAqYXN5bmNfb3BfZmVuY2VfZ2V0X2RyaXZlcl9u YW1lKHN0cnVjdCBkbWFfZmVuY2UKPiAqZG1hX2ZlbmNlKQo+IC17Cj4gLcKgwqDCoMKgwqDCoMKg cmV0dXJuICJ4ZSI7Cj4gLX0KPiAtCj4gLXN0YXRpYyBjb25zdCBjaGFyICoKPiAtYXN5bmNfb3Bf ZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZG1hX2ZlbmNlKQo+IC17 Cj4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuICJhc3luY19vcF9mZW5jZSI7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyBhc3luY19vcF9mZW5jZV9vcHMgPSB7Cj4g LcKgwqDCoMKgwqDCoMKgLmdldF9kcml2ZXJfbmFtZSA9IGFzeW5jX29wX2ZlbmNlX2dldF9kcml2 ZXJfbmFtZSwKPiAtwqDCoMKgwqDCoMKgwqAuZ2V0X3RpbWVsaW5lX25hbWUgPSBhc3luY19vcF9m ZW5jZV9nZXRfdGltZWxpbmVfbmFtZSwKPiAtfTsKPiAtCj4gLXN0YXRpYyB2b2lkIGFzeW5jX29w X2ZlbmNlX2NiKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLCBzdHJ1Y3QKPiBkbWFfZmVuY2VfY2Ig KmNiKQo+IC17Cj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGFzeW5jX29wX2ZlbmNlICphZmVuY2Ug PQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250YWluZXJfb2YoY2IsIHN0cnVj dCBhc3luY19vcF9mZW5jZSwgY2IpOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqBhZmVuY2UtPmZlbmNl LmVycm9yID0gYWZlbmNlLT53YWl0X2ZlbmNlLT5lcnJvcjsKPiAtwqDCoMKgwqDCoMKgwqBkbWFf ZmVuY2Vfc2lnbmFsKCZhZmVuY2UtPmZlbmNlKTsKPiAtwqDCoMKgwqDCoMKgwqB4ZV92bV9wdXQo YWZlbmNlLT52bSk7Cj4gLcKgwqDCoMKgwqDCoMKgZG1hX2ZlbmNlX3B1dChhZmVuY2UtPndhaXRf ZmVuY2UpOwo+IC3CoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV9wdXQoJmFmZW5jZS0+ZmVuY2UpOwo+ IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBhZGRfYXN5bmNfb3BfZmVuY2VfY2Ioc3RydWN0IHhlX3Zt ICp2bSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgYXN5bmNfb3BfZmVuY2UgKmFmZW5jZSkKPiArc3RhdGljIGJvb2wgeGVfdm1fc3luY19tb2Rl KHN0cnVjdCB4ZV92bSAqdm0sIHN0cnVjdCB4ZV9leGVjX3F1ZXVlCj4gKnEpCj4gwqB7Cj4gLcKg wqDCoMKgwqDCoMKgaW50IHJldDsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCF4ZV92bV9ub19k bWFfZmVuY2VzKHZtKSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZmVuY2Ut PnN0YXJ0ZWQgPSB0cnVlOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbXBfd21i KCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdha2VfdXBfYWxsKCZhZmVuY2Ut PndxKTsKPiAtwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoGFmZW5jZS0+d2Fp dF9mZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+IC3CoMKgwqDCoMKgwqDCoGFmZW5jZS0+ dm0gPSB4ZV92bV9nZXQodm0pOwo+IC3CoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV9nZXQoJmFmZW5j ZS0+ZmVuY2UpOwo+IC3CoMKgwqDCoMKgwqDCoHJldCA9IGRtYV9mZW5jZV9hZGRfY2FsbGJhY2so ZmVuY2UsICZhZmVuY2UtPmNiLAo+IGFzeW5jX29wX2ZlbmNlX2NiKTsKPiAtwqDCoMKgwqDCoMKg wqBpZiAocmV0ID09IC1FTk9FTlQpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg YWZlbmNlLT5mZW5jZS5lcnJvciA9IGFmZW5jZS0+d2FpdF9mZW5jZS0+ZXJyb3I7Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV9zaWduYWwoJmFmZW5jZS0+ZmVuY2Up Owo+IC3CoMKgwqDCoMKgwqDCoH0KPiAtwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtX3B1dCh2bSk7Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV9wdXQoYWZlbmNlLT53YWl0X2ZlbmNlKTsKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX2ZlbmNlX3B1dCgmYWZlbmNlLT5mZW5jZSk7 Cj4gLcKgwqDCoMKgwqDCoMKgfQo+IC3CoMKgwqDCoMKgwqDCoFhFX1dBUk5fT04ocmV0ICYmIHJl dCAhPSAtRU5PRU5UKTsKPiAtfQo+IC0KPiAtaW50IHhlX3ZtX2FzeW5jX2ZlbmNlX3dhaXRfc3Rh cnQoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCj4gLXsKPiAtwqDCoMKgwqDCoMKgwqBpZiAoZmVu Y2UtPm9wcyA9PSAmYXN5bmNfb3BfZmVuY2Vfb3BzKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN0cnVjdCBhc3luY19vcF9mZW5jZSAqYWZlbmNlID0KPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRhaW5lcl9vZihmZW5jZSwgc3Ry dWN0IGFzeW5jX29wX2ZlbmNlLAo+IGZlbmNlKTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHhlX2Fzc2VydChhZmVuY2UtPnZtLT54ZSwKPiAheGVfdm1fbm9fZG1hX2ZlbmNl cyhhZmVuY2UtPnZtKSk7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbXBf cm1iKCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB3YWl0X2V2ZW50 X2ludGVycnVwdGlibGUoYWZlbmNlLT53cSwgYWZlbmNlLQo+ID5zdGFydGVkKTsKPiAtwqDCoMKg wqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICvCoMKgwqDCoMKgwqDC oHJldHVybiBxID8gIShxLT5mbGFncyAmIEVYRUNfUVVFVUVfRkxBR19WTV9BU1lOQykgOgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAhKHZtLT5mbGFncyAmIFhFX1ZNX0ZMQUdfQVNZ TkNfREVGQVVMVCk7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbnQgX194ZV92bV9iaW5kKHN0cnVj dCB4ZV92bSAqdm0sIHN0cnVjdCB4ZV92bWEgKnZtYSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcSwgc3RydWN0 IHhlX3N5bmNfZW50cnkKPiAqc3luY3MsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1MzIgbnVtX3N5bmNzLCBzdHJ1Y3QgYXN5bmNfb3BfZmVuY2UgKmFm ZW5jZSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJv b2wgaW1tZWRpYXRlLCBib29sIGZpcnN0X29wLCBib29sIGxhc3Rfb3ApCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgbnVtX3N5bmNzLCBib29sIGlt bWVkaWF0ZSwgYm9vbCBmaXJzdF9vcCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGJvb2wgbGFzdF9vcCkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gwqAKPiBAQCAtMTgwMCwxNyArMTY5MiwxOCBAQCBzdGF0 aWMgaW50IF9feGVfdm1fYmluZChzdHJ1Y3QgeGVfdm0gKnZtLAo+IHN0cnVjdCB4ZV92bWEgKnZt YSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgeGVfc3luY19lbnRyeV9zaWduYWwoJnN5bmNzW2ldLCBOVUxMLAo+IGZlbmNl KTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKg fQo+IC3CoMKgwqDCoMKgwqDCoGlmIChhZmVuY2UpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGFkZF9hc3luY19vcF9mZW5jZV9jYih2bSwgZmVuY2UsIGFmZW5jZSk7Cj4gwqAKPiAr wqDCoMKgwqDCoMKgwqBpZiAobGFzdF9vcCAmJiB4ZV92bV9zeW5jX21vZGUodm0sIHEpKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfZmVuY2Vfd2FpdChmZW5jZSwgdHJ1ZSk7 Cj4gwqDCoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsKPiDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbnQgeGVfdm1fYmluZChzdHJ1 Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfdm1hICp2bWEsIHN0cnVjdAo+IHhlX2V4ZWNfcXVldWUg KnEsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4 ZV9ibyAqYm8sIHN0cnVjdCB4ZV9zeW5jX2VudHJ5ICpzeW5jcywKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgbnVtX3N5bmNzLCBzdHJ1Y3QgYXN5bmNfb3Bf ZmVuY2UgKmFmZW5jZSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBib29sIGltbWVkaWF0ZSwgYm9vbCBmaXJzdF9vcCwgYm9vbCBsYXN0X29wKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBudW1fc3luY3MsIGJvb2wgaW1t ZWRpYXRlLCBib29sIGZpcnN0X29wLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJvb2wgbGFzdF9vcCkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgaW50IGVycjsK PiDCoAo+IEBAIC0xODIzLDE0ICsxNzE2LDEzIEBAIHN0YXRpYyBpbnQgeGVfdm1fYmluZChzdHJ1 Y3QgeGVfdm0gKnZtLAo+IHN0cnVjdCB4ZV92bWEgKnZtYSwgc3RydWN0IHhlX2V4ZWNfcXVldWUK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g ZXJyOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gX194 ZV92bV9iaW5kKHZtLCB2bWEsIHEsIHN5bmNzLCBudW1fc3luY3MsIGFmZW5jZSwKPiBpbW1lZGlh dGUsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZmlyc3Rfb3AsIGxhc3Rfb3ApOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBfX3hlX3ZtX2Jp bmQodm0sIHZtYSwgcSwgc3luY3MsIG51bV9zeW5jcywgaW1tZWRpYXRlLAo+IGZpcnN0X29wLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxh c3Rfb3ApOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgaW50IHhlX3ZtX3VuYmluZChzdHJ1Y3QgeGVf dm0gKnZtLCBzdHJ1Y3QgeGVfdm1hICp2bWEsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2V4ZWNfcXVldWUgKnEsIHN0cnVjdCB4ZV9z eW5jX2VudHJ5Cj4gKnN5bmNzLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdTMyIG51bV9zeW5jcywgc3RydWN0IGFzeW5jX29wX2ZlbmNlICphZmVuY2Us Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIGZp cnN0X29wLCBib29sIGxhc3Rfb3ApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB1MzIgbnVtX3N5bmNzLCBib29sIGZpcnN0X29wLCBib29sIGxhc3Rfb3Ap Cj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+IMKgCj4g QEAgLTE4NDAsMTAgKzE3MzIsMTAgQEAgc3RhdGljIGludCB4ZV92bV91bmJpbmQoc3RydWN0IHhl X3ZtICp2bSwKPiBzdHJ1Y3QgeGVfdm1hICp2bWEsCj4gwqDCoMKgwqDCoMKgwqDCoGZlbmNlID0g eGVfdm1fdW5iaW5kX3ZtYSh2bWEsIHEsIHN5bmNzLCBudW1fc3luY3MsIGZpcnN0X29wLAo+IGxh c3Rfb3ApOwo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGZlbmNlKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGZlbmNlKTsKPiAtwqDCoMKgwqDC oMKgwqBpZiAoYWZlbmNlKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZGRfYXN5 bmNfb3BfZmVuY2VfY2Iodm0sIGZlbmNlLCBhZmVuY2UpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oHhlX3ZtYV9kZXN0cm95KHZtYSwgZmVuY2UpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChsYXN0X29w ICYmIHhlX3ZtX3N5bmNfbW9kZSh2bSwgcSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRtYV9mZW5jZV93YWl0KGZlbmNlLCB0cnVlKTsKPiDCoMKgwqDCoMKgwqDCoMKgZG1hX2Zl bmNlX3B1dChmZW5jZSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gQEAgLTE4 NTEsNyArMTc0Myw3IEBAIHN0YXRpYyBpbnQgeGVfdm1fdW5iaW5kKHN0cnVjdCB4ZV92bSAqdm0s Cj4gc3RydWN0IHhlX3ZtYSAqdm1hLAo+IMKgCj4gwqAjZGVmaW5lIEFMTF9EUk1fWEVfVk1fQ1JF QVRFX0ZMQUdTIChEUk1fWEVfVk1fQ1JFQVRFX1NDUkFUQ0hfUEFHRSB8Cj4gXAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRFJNX1hFX1ZNX0NSRUFURV9DT01QVVRFX01PREUgfCBcCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERS TV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMgfAo+IFwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX1hF X1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxUIHwKPiBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fWEVfVk1f Q1JFQVRFX0ZBVUxUX01PREUpCj4gwqAKPiDCoGludCB4ZV92bV9jcmVhdGVfaW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiBAQCAtMTg5NywxMiArMTc4OSwxNSBAQCBp bnQgeGVfdm1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlCj4gKmRldiwgdm9pZCAqZGF0 YSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVf ZGV2aWNlX2luX2ZhdWx0X21vZGUoeGUpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAtRUlOVkFMOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgaWYgKFhFX0lPQ1RMX0RC Ryh4ZSwgYXJncy0+ZXh0ZW5zaW9ucykpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAtRUlOVkFMOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGFyZ3MtPmZsYWdzICYg RFJNX1hFX1ZNX0NSRUFURV9TQ1JBVENIX1BBR0UpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBmbGFncyB8PSBYRV9WTV9GTEFHX1NDUkFUQ0hfUEFHRTsKPiDCoMKgwqDCoMKgwqDC oMKgaWYgKGFyZ3MtPmZsYWdzICYgRFJNX1hFX1ZNX0NSRUFURV9DT01QVVRFX01PREUpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFncyB8PSBYRV9WTV9GTEFHX0NPTVBVVEVf TU9ERTsKPiAtwqDCoMKgwqDCoMKgwqBpZiAoYXJncy0+ZmxhZ3MgJiBEUk1fWEVfVk1fQ1JFQVRF X0FTWU5DX0JJTkRfT1BTKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFncyB8 PSBYRV9WTV9GTEFHX0FTWU5DX0JJTkRfT1BTOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChhcmdzLT5m bGFncyAmIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVMVCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZmxhZ3MgfD0gWEVfVk1fRkxBR19BU1lOQ19ERUZBVUxUOwo+IMKgwqDC oMKgwqDCoMKgwqBpZiAoYXJncy0+ZmxhZ3MgJiBEUk1fWEVfVk1fQ1JFQVRFX0ZBVUxUX01PREUp Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFncyB8PSBYRV9WTV9GTEFHX0ZB VUxUX01PREU7Cj4gwqAKPiBAQCAtMTk3OSw4ICsxODc0LDcgQEAgc3RhdGljIGNvbnN0IHUzMiBy ZWdpb25fdG9fbWVtX3R5cGVbXSA9IHsKPiDCoHN0YXRpYyBpbnQgeGVfdm1fcHJlZmV0Y2goc3Ry dWN0IHhlX3ZtICp2bSwgc3RydWN0IHhlX3ZtYSAqdm1hLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZV9leGVjX3F1ZXVlICpxLCB1 MzIgcmVnaW9uLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCB4ZV9zeW5jX2VudHJ5ICpzeW5jcywgdTMyIG51bV9zeW5jcywKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhc3lu Y19vcF9mZW5jZSAqYWZlbmNlLCBib29sCj4gZmlyc3Rfb3AsCj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIGxhc3Rfb3ApCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIGZpcnN0X29wLCBi b29sIGxhc3Rfb3ApCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoGludCBlcnI7Cj4gwqAKPiBAQCAt MTk5NCw3ICsxODg4LDcgQEAgc3RhdGljIGludCB4ZV92bV9wcmVmZXRjaChzdHJ1Y3QgeGVfdm0g KnZtLAo+IHN0cnVjdCB4ZV92bWEgKnZtYSwKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAodm1h LT50aWxlX21hc2sgIT0gKHZtYS0+dGlsZV9wcmVzZW50ICYgfnZtYS0KPiA+dXNtLnRpbGVfaW52 YWxpZGF0ZWQpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4geGVf dm1fYmluZCh2bSwgdm1hLCBxLCB4ZV92bWFfYm8odm1hKSwgc3luY3MsCj4gbnVtX3N5bmNzLAo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGFmZW5jZSwgdHJ1ZSwgZmlyc3Rfb3AsIGxhc3Rfb3ApOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRy dWUsIGZpcnN0X29wLCBsYXN0X29wKTsKPiDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBpOwo+IMKgCj4gQEAgLTIwMDQsOCArMTg5 OCw3IEBAIHN0YXRpYyBpbnQgeGVfdm1fcHJlZmV0Y2goc3RydWN0IHhlX3ZtICp2bSwKPiBzdHJ1 Y3QgeGVfdm1hICp2bWEsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3N5bmNfZW50cnlfc2lnbmFsKCZzeW5jc1tpXSwg TlVMTCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ IGRtYV9mZW5jZV9nZXRfc3R1YigpKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFmZW5jZSkKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV9zaWduYWwo JmFmZW5jZS0+ZmVuY2UpOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiAwOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqB9Cj4gQEAgLTIwMjEsNTEgKzE5MTQsNiBA QCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnhlX3ZtX3R0bV9ibyhzdHJ1Y3QKPiB4ZV92bSAq dm0pCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiAmdm0tPnB0X3Jvb3RbaWR4XS0+Ym8tPnR0bTsK PiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCB2bV9zZXRfYXN5bmNfZXJyb3Ioc3RydWN0IHhlX3Zt ICp2bSwgaW50IGVycikKPiAtewo+IC3CoMKgwqDCoMKgwqDCoGxvY2tkZXBfYXNzZXJ0X2hlbGQo JnZtLT5sb2NrKTsKPiAtwqDCoMKgwqDCoMKgwqB2bS0+YXN5bmNfb3BzLmVycm9yID0gZXJyOwo+ IC19Cj4gLQo+IC1zdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxfbG9va3VwX3ZtYShzdHJ1Y3QgeGVf dm0gKnZtLCBzdHJ1Y3QgeGVfYm8KPiAqYm8sCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBhZGRyLCB1NjQg cmFuZ2UsIHUzMiBvcCkKPiAtewo+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9kZXZpY2UgKnhl ID0gdm0tPnhlOwo+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV92bWEgKnZtYTsKPiAtwqDCoMKg wqDCoMKgwqBib29sIGFzeW5jID0gISEob3AgJiBYRV9WTV9CSU5EX0ZMQUdfQVNZTkMpOwo+IC0K PiAtwqDCoMKgwqDCoMKgwqBsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+bG9jayk7Cj4gLQo+IC3C oMKgwqDCoMKgwqDCoHN3aXRjaCAoVk1fQklORF9PUChvcCkpIHsKPiAtwqDCoMKgwqDCoMKgwqBj YXNlIFhFX1ZNX0JJTkRfT1BfTUFQOgo+IC3CoMKgwqDCoMKgwqDCoGNhc2UgWEVfVk1fQklORF9P UF9NQVBfVVNFUlBUUjoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1hID0geGVf dm1fZmluZF9vdmVybGFwcGluZ192bWEodm0sIGFkZHIsIHJhbmdlKTsKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKFhFX0lPQ1RMX0RCRyh4ZSwgdm1hICYmICFhc3luYykpCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVC VVNZOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiAtwqDCoMKgwqDC oMKgwqBjYXNlIFhFX1ZNX0JJTkRfT1BfVU5NQVA6Cj4gLcKgwqDCoMKgwqDCoMKgY2FzZSBYRV9W TV9CSU5EX09QX1BSRUZFVENIOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bWEg PSB4ZV92bV9maW5kX292ZXJsYXBwaW5nX3ZtYSh2bSwgYWRkciwgcmFuZ2UpOwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhlLCAhdm1hKSkKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIE5vdCBhbiBhY3R1 YWwgZXJyb3IsIElPQ1RMIGNsZWFucyB1cAo+IHJldHVybnMgYW5kIDAgKi8KPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREFUQTsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKFhFX0lPQ1RMX0RCRyh4ZSwgKHhlX3Zt YV9zdGFydCh2bWEpICE9IGFkZHIgfHwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhlX3ZtYV9lbmQodm1h KSAhPSBhZGRyICsKPiByYW5nZSkgJiYgIWFzeW5jKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiAtwqDCoMKgwqDCoMKgwqBjYXNlIFhFX1ZNX0JJTkRf T1BfVU5NQVBfQUxMOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9D VExfREJHKHhlLCBsaXN0X2VtcHR5KCZiby0KPiA+dHRtLmJhc2UuZ3B1dmEubGlzdCkpKQo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogTm90IGFuIGFj dHVhbCBlcnJvciwgSU9DVEwgY2xlYW5zIHVwCj4gcmV0dXJucyBhbmQgMCAqLwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9EQVRBOwo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiAtwqDCoMKgwqDCoMKgwqBk ZWZhdWx0Ogo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fd2FybigmeGUtPmRy bSwgIk5PVCBQT1NTSUJMRSIpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVJTlZBTDsKPiAtwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoHJldHVy biAwOwo+IC19Cj4gLQo+IMKgc3RhdGljIHZvaWQgcHJlcF92bWFfZGVzdHJveShzdHJ1Y3QgeGVf dm0gKnZtLCBzdHJ1Y3QgeGVfdm1hICp2bWEsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBwb3N0X2NvbW1pdCkKPiDCoHsKPiBA QCAtMjM1MywzNyArMjIwMSwxNSBAQCBzdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxfb3BzX3BhcnNl KHN0cnVjdAo+IHhlX3ZtICp2bSwgc3RydWN0IHhlX2V4ZWNfcXVldWUgKnEsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYm9vbCBhc3luYykKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3ZtYV9vcCAq bGFzdF9vcCA9IE5VTEw7Cj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGFzeW5jX29wX2ZlbmNlICpm ZW5jZSA9IE5VTEw7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3AgKl9fb3A7 Cj4gwqDCoMKgwqDCoMKgwqDCoGludCBlcnIgPSAwOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGxv Y2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJnZtLT5sb2NrKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDC oGlmIChsYXN0ICYmIG51bV9zeW5jcyAmJiBhc3luYykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB1NjQgc2Vxbm87Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBmZW5jZSA9IGttYWxsb2Moc2l6ZW9mKCpmZW5jZSksIEdGUF9LRVJORUwpOwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWZlbmNlKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFubyA9IHEgPyArK3EtPmJpbmQuZmVuY2Vfc2Vxbm8g OiArK3ZtLQo+ID5hc3luY19vcHMuZmVuY2Uuc2Vxbm87Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRtYV9mZW5jZV9pbml0KCZmZW5jZS0+ZmVuY2UsICZhc3luY19vcF9mZW5jZV9v cHMsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJnZtLT5hc3luY19vcHMubG9jaywgcSA/IHEtCj4gPmJpbmQuZmVuY2VfY3R4IDoK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB2bS0+YXN5bmNfb3BzLmZlbmNlLmNvbnRleHQsIHNlcW5vKTsKPiAtCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgheGVfdm1fbm9fZG1hX2ZlbmNlcyh2bSkpIHsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZlbmNlLT52bSA9 IHZtOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmVu Y2UtPnN0YXJ0ZWQgPSBmYWxzZTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGluaXRfd2FpdHF1ZXVlX2hlYWQoJmZlbmNlLT53cSk7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiAtwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IMKgwqDCoMKg wqDCoMKgwqBkcm1fZ3B1dmFfZm9yX2VhY2hfb3AoX19vcCwgb3BzKSB7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfdm1hX29wICpvcCA9IGdwdXZhX29wX3RvX3Zt YV9vcChfX29wKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgZmlyc3Qg PSBsaXN0X2VtcHR5KG9wc19saXN0KTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB4ZV9hc3NlcnQodm0tPnhlLCBmaXJzdCB8fCBhc3luYyk7Cj4gLQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgSU5JVF9MSVNUX0hFQUQoJm9wLT5saW5rKTsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3RhaWwoJm9wLT5saW5rLCBvcHNfbGlz dCk7Cj4gwqAKPiBAQCAtMjQwMywxMCArMjIyOSw4IEBAIHN0YXRpYyBpbnQgdm1fYmluZF9pb2N0 bF9vcHNfcGFyc2Uoc3RydWN0Cj4geGVfdm0gKnZtLCBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcSwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2bWEgPSBu ZXdfdm1hKHZtLCAmb3AtPmJhc2UubWFwLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wLT50aWxlX21h c2ssIG9wLQo+ID5tYXAucmVhZF9vbmx5LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wLT5tYXAuaXNf bnVsbCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoSVNfRVJSKHZtYSkpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSBQVFJfRVJSKHZtYSk7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290 byBmcmVlX2ZlbmNlOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKElTX0VSUih2bWEpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKHZtYSk7Cj4gwqAKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcC0+bWFwLnZtYSA9 IHZtYTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi cmVhazsKPiBAQCAtMjQzMSwxMCArMjI1NSw4IEBAIHN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9v cHNfcGFyc2Uoc3RydWN0Cj4geGVfdm0gKnZtLCBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcSwKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdm1hID0gbmV3X3ZtYSh2bSwgb3AtCj4gPmJhc2UucmVtYXAucHJldiwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPnRpbGVfbWFzaywKPiByZWFkX29ubHksCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlzX251bGwpOwo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJ U19FUlIodm1hKSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSBQVFJfRVJSKHZtYSk7 Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZnJlZV9mZW5jZTsKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKElTX0VSUih2bWEpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VS Uih2bWEpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wLT5yZW1hcC5wcmV2ID0gdm1hOwo+IMKgCj4gQEAgLTI0 NjcsMTAgKzIyODksOCBAQCBzdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxfb3BzX3BhcnNlKHN0cnVj dAo+IHhlX3ZtICp2bSwgc3RydWN0IHhlX2V4ZWNfcXVldWUgKnEsCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtYSA9IG5l d192bWEodm0sIG9wLQo+ID5iYXNlLnJlbWFwLm5leHQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG9wLT50aWxlX21hc2ssCj4gcmVhZF9vbmx5LAo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpc19udWxsKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKHZtYSkpIHsK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gUFRSX0VSUih2bWEpOwo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBnb3RvIGZyZWVfZmVuY2U7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIo dm1hKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIodm1hKTsKPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBvcC0+cmVtYXAubmV4dCA9IHZtYTsKPiDCoAo+IEBAIC0yNTAyLDI3ICsyMzIyLDIz IEBAIHN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9vcHNfcGFyc2Uoc3RydWN0Cj4geGVfdm0gKnZt LCBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcSwKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZXJyID0geGVfdm1hX29wX2NvbW1pdCh2bSwgb3ApOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZnJlZV9mZW5jZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBlcnI7Cj4gwqDCoMKgwqDCoMKgwqDC oH0KPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiBGSVhNRTogVW5oYW5kbGVkIGNvcm5lciBjYXNl ICovCj4gwqDCoMKgwqDCoMKgwqDCoFhFX1dBUk5fT04oIWxhc3Rfb3AgJiYgbGFzdCAmJiAhbGlz dF9lbXB0eShvcHNfbGlzdCkpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghbGFzdF9vcCkK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVlX2ZlbmNlOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArCj4gwqDCoMKgwqDCoMKgwqDC oGxhc3Rfb3AtPm9wcyA9IG9wczsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGxhc3QpIHsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxhc3Rfb3AtPmZsYWdzIHw9IFhFX1ZNQV9PUF9M QVNUOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGFzdF9vcC0+bnVtX3N5bmNz ID0gbnVtX3N5bmNzOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGFzdF9vcC0+ c3luY3MgPSBzeW5jczsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGFzdF9vcC0+ ZmVuY2UgPSBmZW5jZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oHJldHVybiAwOwo+IC0KPiAtZnJlZV9mZW5jZToKPiAtwqDCoMKgwqDCoMKgwqBrZnJlZShmZW5j ZSk7Cj4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsKPiDCoH0KPiDCoAo+IMKgc3RhdGljIGlu dCBvcF9leGVjdXRlKHN0cnVjdCBkcm1fZXhlYyAqZXhlYywgc3RydWN0IHhlX3ZtICp2bSwKPiBA QCAtMjU0Miw3ICsyMzU4LDcgQEAgc3RhdGljIGludCBvcF9leGVjdXRlKHN0cnVjdCBkcm1fZXhl YyAqZXhlYywKPiBzdHJ1Y3QgeGVfdm0gKnZtLAo+IMKgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKG9w LT5iYXNlLm9wKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQVVZBX09QX01BUDoKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHhlX3ZtX2JpbmQodm0sIHZtYSwg b3AtPnEsIHhlX3ZtYV9ibyh2bWEpLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+c3luY3MsIG9wLT5udW1fc3luY3Ms IG9wLT5mZW5jZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPnN5bmNzLCBvcC0+bnVtX3N5bmNzLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg b3AtPm1hcC5pbW1lZGlhdGUgfHwKPiAheGVfdm1faW5fZmF1bHRfbW9kZSh2bSksCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBvcC0+ZmxhZ3MgJiBYRV9WTUFfT1BfRklSU1QsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+ZmxhZ3MgJiBYRV9W TUFfT1BfTEFTVCk7Cj4gQEAgLTI1NTMsMTYgKzIzNjksMTMgQEAgc3RhdGljIGludCBvcF9leGVj dXRlKHN0cnVjdCBkcm1fZXhlYyAqZXhlYywKPiBzdHJ1Y3QgeGVfdm0gKnZtLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCBuZXh0ID0gISFvcC0+cmVtYXAubmV4dDsKPiDC oAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvcC0+cmVtYXAudW5tYXBf ZG9uZSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKHByZXYgfHwgbmV4dCkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtLT5hc3luY19vcHMubXVubWFwX3JlYmluZF9p bmZsaWdodAo+ID0gdHJ1ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChwcmV2IHx8IG5leHQpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtYS0+Z3B1dmEuZmxhZ3MgfD0K PiBYRV9WTUFfRklSU1RfUkVCSU5EOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGVyciA9IHhlX3ZtX3VuYmluZCh2bSwgdm1hLCBvcC0+cSwgb3AtPnN5bmNzLAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+bnVtX3N5bmNzLAo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICFwcmV2ICYmICFuZXh0ID8gb3AtPmZlbmNlCj4gOiBOVUxMLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+ZmxhZ3MgJgo+IFhFX1ZNQV9PUF9GSVJTVCwK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+ZmxhZ3MgJiBYRV9WTUFfT1BfTEFTVAo+ ICYmICFwcmV2ICYmCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIW5leHQpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wLT5mbGFncyAmIFhFX1ZNQV9PUF9MQVNUCj4gJiYKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhcHJldiAmJiAhbmV4dCk7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJl YWs7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3At PnJlbWFwLnVubWFwX2RvbmUgPSB0cnVlOwo+IEBAIC0yNTcyLDggKzIzODUsNyBAQCBzdGF0aWMg aW50IG9wX2V4ZWN1dGUoc3RydWN0IGRybV9leGVjICpleGVjLAo+IHN0cnVjdCB4ZV92bSAqdm0s Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AtPnJl bWFwLnByZXYtPmdwdXZhLmZsYWdzIHw9Cj4gWEVfVk1BX0xBU1RfUkVCSU5EOwo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHhlX3ZtX2JpbmQo dm0sIG9wLT5yZW1hcC5wcmV2LCBvcC0+cSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZV92 bWFfYm8ob3AtPnJlbWFwLnByZXYpLAo+IG9wLT5zeW5jcywKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG9wLT5udW1fc3luY3MsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhbmV4dCA/IG9wLT5m ZW5jZSA6IE5VTEwsCj4gdHJ1ZSwgZmFsc2UsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+ bnVtX3N5bmNzLCB0cnVlLCBmYWxzZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+Zmxh Z3MgJiBYRV9WTUFfT1BfTEFTVAo+ICYmICFuZXh0KTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcC0+cmVtYXAucHJldi0+Z3B1dmEuZmxhZ3MgJj0K PiB+WEVfVk1BX0xBU1RfUkVCSU5EOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChlcnIpCj4gQEAgLTI1ODYsMjYgKzIzOTgsMjQgQEAgc3RhdGlj IGludCBvcF9leGVjdXRlKHN0cnVjdCBkcm1fZXhlYyAqZXhlYywKPiBzdHJ1Y3QgeGVfdm0gKnZt LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9 IHhlX3ZtX2JpbmQodm0sIG9wLT5yZW1hcC5uZXh0LCBvcC0+cSwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB4ZV92bWFfYm8ob3AtPnJlbWFwLm5leHQpLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG9wLT5zeW5jcywgb3AtPm51bV9zeW5jcywKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9w LT5mZW5jZSwgdHJ1ZSwgZmFsc2UsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0cnVlLCBmYWxz ZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcC0+ZmxhZ3MgJiBYRV9WTUFfT1BfTEFTVCk7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AtPnJl bWFwLm5leHQtPmdwdXZhLmZsYWdzICY9Cj4gflhFX1ZNQV9MQVNUX1JFQklORDsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBicmVhazsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBvcC0+cmVtYXAubmV4dCA9IE5VTEw7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB9Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtLT5hc3luY19vcHMubXVubWFw X3JlYmluZF9pbmZsaWdodCA9IGZhbHNlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBicmVhazsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqBjYXNl IERSTV9HUFVWQV9PUF9VTk1BUDoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVy ciA9IHhlX3ZtX3VuYmluZCh2bSwgdm1hLCBvcC0+cSwgb3AtPnN5bmNzLAo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg b3AtPm51bV9zeW5jcywgb3AtPmZlbmNlLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPmZsYWdzICYgWEVfVk1B X09QX0ZJUlNULAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPm51bV9zeW5jcywgb3AtPmZsYWdzICYKPiBYRV9W TUFfT1BfRklSU1QsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPmZsYWdzICYgWEVfVk1BX09QX0xBU1QpOwo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gwqDCoMKgwqDCoMKgwqDC oGNhc2UgRFJNX0dQVVZBX09QX1BSRUZFVENIOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZXJyID0geGVfdm1fcHJlZmV0Y2godm0sIHZtYSwgb3AtPnEsIG9wLQo+ID5wcmVmZXRj aC5yZWdpb24sCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPnN5bmNzLCBvcC0+bnVtX3N5bmNzLCBvcC0K PiA+ZmVuY2UsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPnN5bmNzLCBvcC0+bnVtX3N5bmNzLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBvcC0+ZmxhZ3MgJiBYRV9WTUFfT1BfRklSU1QsCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG9wLT5mbGFncyAmIFhFX1ZNQV9PUF9MQVNUKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGJyZWFrOwo+IEBAIC0yNzA0LDE0ICsyNTE0LDkgQEAgc3RhdGljIHZvaWQgeGVf dm1hX29wX2NsZWFudXAoc3RydWN0IHhlX3ZtCj4gKnZtLCBzdHJ1Y3QgeGVfdm1hX29wICpvcCkK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKG9wLT5zeW5jcyk7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAob3AtPnEpCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9wdXQob3AtPnEp Owo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAob3AtPmZlbmNlKQo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX2ZlbmNlX3B1dCgm b3AtPmZlbmNlLT5mZW5jZSk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiAtwqDCoMKgwqDCoMKgwqBp ZiAoIWxpc3RfZW1wdHkoJm9wLT5saW5rKSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzcGluX2xvY2tfaXJxKCZ2bS0+YXN5bmNfb3BzLmxvY2spOwo+ICvCoMKgwqDCoMKgwqDC oGlmICghbGlzdF9lbXB0eSgmb3AtPmxpbmspKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbGlzdF9kZWwoJm9wLT5saW5rKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3Bpbl91bmxvY2tfaXJxKCZ2bS0+YXN5bmNfb3BzLmxvY2spOwo+IC3CoMKgwqDCoMKgwqDC oH0KPiDCoMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5vcHMpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkcm1fZ3B1dmFfb3BzX2ZyZWUoJnZtLT5tZ3IsIG9wLT5vcHMpOwo+IMKgwqDC oMKgwqDCoMKgwqBpZiAobGFzdCkKPiBAQCAtMjc3MywxMzAgKzI1NzgsNiBAQCBzdGF0aWMgdm9p ZCB4ZV92bWFfb3BfdW53aW5kKHN0cnVjdCB4ZV92bQo+ICp2bSwgc3RydWN0IHhlX3ZtYV9vcCAq b3AsCj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoH0KPiDCoAo+IC1zdGF0aWMgc3RydWN0IHhlX3Zt YV9vcCAqbmV4dF92bWFfb3Aoc3RydWN0IHhlX3ZtICp2bSkKPiAtewo+IC3CoMKgwqDCoMKgwqDC oHJldHVybiBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJnZtLT5hc3luY19vcHMucGVuZGluZywK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3ZtYV9vcCwgbGluayk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkIHhlX3ZtYV9vcF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3 KQo+IC17Cj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3ZtICp2bSA9IGNvbnRhaW5lcl9vZih3 LCBzdHJ1Y3QgeGVfdm0sCj4gYXN5bmNfb3BzLndvcmspOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqBm b3IgKDs7KSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV92bWFf b3AgKm9wOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZXJyOwo+IC0KPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHZtLT5hc3luY19vcHMuZXJyb3IgJiYg IXhlX3ZtX2lzX2Nsb3NlZCh2bSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBicmVhazsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHNwaW5fbG9ja19pcnEoJnZtLT5hc3luY19vcHMubG9jayk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG9wID0gbmV4dF92bWFfb3Aodm0pOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzcGluX3VubG9ja19pcnEoJnZtLT5hc3luY19vcHMubG9jayk7Cj4gLQo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIW9wKQo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gLQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIXhlX3ZtX2lzX2Nsb3NlZCh2bSkpIHsKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRvd25fd3JpdGUoJnZtLT5sb2Nr KTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9 IHhlX3ZtYV9vcF9leGVjdXRlKHZtLCBvcCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX3dhcm4oJnZtLT54ZS0+ ZHJtLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkFzeW5jIFZNIG9wKCVkKSBmYWlsZWQgd2l0 aAo+ICVkIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wLT5iYXNlLm9wLCBlcnIpOwo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHZtX3NldF9hc3luY19lcnJvcih2bSwgZXJyKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1cF93cml0ZSgmdm0tPmxv Y2spOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoH0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHVwX3dyaXRlKCZ2bS0+bG9jayk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0gZWxzZSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgeGVfdm1hICp2bWE7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChvcC0+YmFzZS5vcCkgewo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBEUk1fR1BVVkFfT1Bf UkVNQVA6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdm1hID0gZ3B1dmFfdG9fdm1hKG9wLQo+ID5iYXNlLnJlbWFwLnVubWFw LT52YSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdHJhY2VfeGVfdm1hX2ZsdXNoKHZtYSk7Cj4gLQo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRvd25f d3JpdGUoJnZtLT5sb2NrKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV92bWFfZGVzdHJveV91bmxvY2tlZCh2bWEpOwo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHVwX3dyaXRlKCZ2bS0+bG9jayk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIERSTV9HUFVWQV9PUF9VTk1B UDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB2bWEgPSBncHV2YV90b192bWEob3AtCj4gPmJhc2UudW5tYXAudmEpOwo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHRyYWNlX3hlX3ZtYV9mbHVzaCh2bWEpOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkb3duX3dyaXRlKCZ2bS0+ bG9jayk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgeGVfdm1hX2Rlc3Ryb3lfdW5sb2NrZWQodm1hKTsKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1cF93 cml0ZSgmdm0tPmxvY2spOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBOb3RoaW5nIHRvIGRv ICovCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKG9wLT5mZW5jZSAmJgo+ICF0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19TSUdO QUxFRF9CSVQsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZv cC0+ZmVuY2UtCj4gPmZlbmNlLmZsYWdzKSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgheGVfdm1fbm9fZG1hX2Zl bmNlcyh2bSkpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AtPmZlbmNlLT5zdGFydGVkID0g dHJ1ZTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd2FrZV91cF9hbGwoJm9wLT5mZW5jZS0+d3Ep Owo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfZmVuY2Vfc2lnbmFsKCZvcC0+ZmVuY2UtPmZlbmNlKTsK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IC0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgeGVfdm1hX29wX2NsZWFudXAodm0sIG9wKTsKPiAtwqDCoMKgwqDCoMKgwqB9Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9vcHNfZXhlY3V0ZShzdHJ1Y3QgeGVf dm0gKnZtLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgKm9wc19saXN0LCBib29s Cj4gYXN5bmMpCj4gLXsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfdm1hX29wICpvcCwgKmxh c3Rfb3AsICpuZXh0Owo+IC3CoMKgwqDCoMKgwqDCoGludCBlcnI7Cj4gLQo+IC3CoMKgwqDCoMKg wqDCoGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJnZtLT5sb2NrKTsKPiAtCj4gLcKgwqDCoMKg wqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeShvcCwgb3BzX2xpc3QsIGxpbmspCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxhc3Rfb3AgPSBvcDsKPiAtCj4gLcKgwqDCoMKgwqDCoMKg aWYgKCFhc3luYykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSB4ZV92 bWFfb3BfZXhlY3V0ZSh2bSwgbGFzdF9vcCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChlcnIpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBnb3RvIHVud2luZDsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfdm1h X29wX2NsZWFudXAodm0sIGxhc3Rfb3ApOwo+IC3CoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBib29sIGluc3RhbGxlZCA9IGZhbHNlOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGxhc3Rfb3AtPm51bV9zeW5jczsgaSsrKQo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5zdGFsbGVk IHw9IHhlX3N5bmNfZW50cnlfc2lnbmFsKCZsYXN0X29wLQo+ID5zeW5jc1tpXSwKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMLAo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICZsYXN0X29wLQo+ID5mZW5jZS0+ZmVuY2UpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoIWluc3RhbGxlZCAmJiBsYXN0X29wLT5mZW5jZSkKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV9zaWduYWwoJmxhc3Rfb3At PmZlbmNlLT5mZW5jZSk7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcGlu X2xvY2tfaXJxKCZ2bS0+YXN5bmNfb3BzLmxvY2spOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBsaXN0X3NwbGljZV90YWlsKG9wc19saXN0LCAmdm0tPmFzeW5jX29wcy5wZW5kaW5n KTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Bpbl91bmxvY2tfaXJxKCZ2bS0+ YXN5bmNfb3BzLmxvY2spOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KCF2bS0+YXN5bmNfb3BzLmVycm9yKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcXVldWVfd29yayhzeXN0ZW1fdW5ib3VuZF93cSwgJnZtLQo+ID5hc3lu Y19vcHMud29yayk7Cj4gLcKgwqDCoMKgwqDCoMKgfQo+IC0KPiAtwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiAtCj4gLXVud2luZDoKPiAtwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5 X3JldmVyc2Uob3AsIG9wc19saXN0LCBsaW5rKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB4ZV92bWFfb3BfdW53aW5kKHZtLCBvcCwgb3AtPmZsYWdzICYKPiBYRV9WTUFfT1BfQ09N TUlUVEVELAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBvcC0+ZmxhZ3MgJgo+IFhFX1ZNQV9PUF9QUkVWX0NPTU1JVFRFRCwK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgb3AtPmZsYWdzICYKPiBYRV9WTUFfT1BfTkVYVF9DT01NSVRURUQpOwo+IC3CoMKg wqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvcCwgbmV4dCwgb3BzX2xpc3QsIGxp bmspCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtYV9vcF9jbGVhbnVwKHZt LCBvcCk7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBlcnI7Cj4gLX0KPiAtCj4gwqBzdGF0 aWMgdm9pZCB2bV9iaW5kX2lvY3RsX29wc191bndpbmQoc3RydWN0IHhlX3ZtICp2bSwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGRybV9ncHV2YV9vcHMgKipvcHMsCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGludCBudW1fb3BzX2xpc3QpCj4gQEAgLTI5MjMsNiArMjYwNCwzMSBAQCBzdGF0aWMgdm9pZCB2 bV9iaW5kX2lvY3RsX29wc191bndpbmQoc3RydWN0Cj4geGVfdm0gKnZtLAo+IMKgwqDCoMKgwqDC oMKgwqB9Cj4gwqB9Cj4gwqAKPiArc3RhdGljIGludCB2bV9iaW5kX2lvY3RsX29wc19leGVjdXRl KHN0cnVjdCB4ZV92bSAqdm0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCAqb3Bz X2xpc3QpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfdm1hX29wICpvcCwgKm5leHQ7 Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGVycjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbG9ja2RlcF9h c3NlcnRfaGVsZF93cml0ZSgmdm0tPmxvY2spOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUob3AsIG5leHQsIG9wc19saXN0LCBsaW5rKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHhlX3ZtYV9vcF9leGVjdXRlKHZtLCBvcCk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChlcnIpIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV93YXJuKCZ2bS0+eGUtPmRybSwg IlZNIG9wKCVkKSBmYWlsZWQgd2l0aAo+ICVkIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPmJhc2Uub3AsIGVycik7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogRklYTUU6IEtp bGxpbmcgVk0gcmF0aGVyIHRoYW4gcHJvcGVyIGVycm9yCj4gaGFuZGxpbmcKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfdm1fa2lsbCh2bSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT1NQQzsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB4ZV92bWFfb3BfY2xlYW51cCh2bSwgb3ApOwo+ICvCoMKgwqDCoMKgwqDCoH0K PiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4gwqAjaWZkZWYgVEVTVF9W TV9BU1lOQ19PUFNfRVJST1IKPiDCoCNkZWZpbmUgU1VQUE9SVEVEX0ZMQUdTwqDCoMKgwqDCoMKg wqDCoFwKPiDCoMKgwqDCoMKgwqDCoMKgKEZPUkNFX0FTWU5DX09QX0VSUk9SIHwgWEVfVk1fQklO RF9GTEFHX0FTWU5DIHwgXAo+IEBAIC0yOTMxLDcgKzI2MzcsOCBAQCBzdGF0aWMgdm9pZCB2bV9i aW5kX2lvY3RsX29wc191bndpbmQoc3RydWN0Cj4geGVfdm0gKnZtLAo+IMKgI2Vsc2UKPiDCoCNk ZWZpbmUgU1VQUE9SVEVEX0ZMQUdTwqDCoMKgwqDCoMKgwqDCoFwKPiDCoMKgwqDCoMKgwqDCoMKg KFhFX1ZNX0JJTkRfRkxBR19BU1lOQyB8IFhFX1ZNX0JJTkRfRkxBR19SRUFET05MWSB8IFwKPiAt wqDCoMKgwqDCoMKgwqAgWEVfVk1fQklORF9GTEFHX0lNTUVESUFURSB8IFhFX1ZNX0JJTkRfRkxB R19OVUxMIHwgMHhmZmZmKQo+ICvCoMKgwqDCoMKgwqDCoCBYRV9WTV9CSU5EX0ZMQUdfSU1NRURJ QVRFIHwgWEVfVk1fQklORF9GTEFHX05VTEwgfCBcCj4gK8KgwqDCoMKgwqDCoMKgIDB4ZmZmZikK PiDCoCNlbmRpZgo+IMKgI2RlZmluZSBYRV82NEtfUEFHRV9NQVNLIDB4ZmZmZnVsbAo+IMKgCj4g QEAgLTI5ODEsMjIgKzI2ODgsMTIgQEAgc3RhdGljIGludCB2bV9iaW5kX2lvY3RsX2NoZWNrX2Fy Z3Moc3RydWN0Cj4geGVfZGV2aWNlICp4ZSwKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKGkgPT0gMCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCphc3luYyA9ICEhKG9wICYgWEVfVk1fQklORF9GTEFHX0FTWU5DKTsK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChYRV9JT0NUTF9EQkco eGUsICEqYXN5bmMpIHx8Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFhFX0lPQ1RMX0RCRyh4ZSwgIShvcCAmCj4gWEVfVk1fQklORF9GTEFHX0FT WU5DKSkgfHwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgWEVfSU9DVExfREJHKHhlLCBWTV9CSU5EX09QKG9wKSA9PQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBYRV9WTV9CSU5EX09QX1JFU1RBUlQpKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRUlOVkFMOwo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVlX2JpbmRfb3BzOwo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhlLCAhKmFzeW5jICYmCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZNX0JJ TkRfT1Aob3ApID09Cj4gWEVfVk1fQklORF9PUF9VTk1BUF9BTEwpKSB7Cj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRUlOVkFMOwo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVlX2JpbmRf b3BzOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhlLCAhKmFzeW5jICYmCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFZNX0JJTkRfT1Aob3ApID09Cj4gWEVfVk1fQklORF9PUF9QUkVGRVRDSCkpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9E QkcoeGUsICEqYXN5bmMgJiYgYXJncy0KPiA+bnVtX3N5bmNzKSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1F SU5WQUw7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byBmcmVlX2JpbmRfb3BzOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9IGVsc2UgaWYgKFhFX0lPQ1RMX0RCRyh4ZSwgKmFzeW5jICE9Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCEhKG9wICYKPiBYRV9WTV9CSU5EX0ZMQUdfQVNZTkMpKSkgewo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1FSU5WQUw7Cj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVl X2JpbmRfb3BzOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IEBAIC0zMDM0 LDggKzI3MzEsNyBAQCBzdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxfY2hlY2tfYXJncyhzdHJ1Y3QK PiB4ZV9kZXZpY2UgKnhlLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKFhF X0lPQ1RMX0RCRyh4ZSwgb2JqX29mZnNldCAmIH5QQUdFX01BU0spIHx8Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVfSU9DVExfREJHKHhlLCBhZGRyICYgflBBR0Vf TUFTSykgfHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRV9JT0NU TF9EQkcoeGUsIHJhbmdlICYgflBBR0VfTUFTSykgfHwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFhFX0lPQ1RMX0RCRyh4ZSwgIXJhbmdlICYmIFZNX0JJTkRfT1Aob3Ap ICE9Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFhFX1ZNX0JJTkRfT1BfUkVTVEFSVCAmJgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVfSU9DVExfREJHKHhlLCAhcmFuZ2UgJiYKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFZNX0JJTkRfT1Aob3ApICE9Cj4gWEVfVk1fQklORF9PUF9VTk1BUF9BTEwpKSB7Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gLUVJTlZBTDsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZy ZWVfYmluZF9vcHM7Cj4gQEAgLTMwODMsNiArMjc3OSwxMiBAQCBpbnQgeGVfdm1fYmluZF9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl cnIgPSAtRUlOVkFMOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGdvdG8gcHV0X2V4ZWNfcXVldWU7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExf REJHKHhlLCBhc3luYyAhPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhIShxLT5mbGFncyAmCj4gRVhFQ19RVUVVRV9GTEFH X1ZNX0FTWU5DKSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGVyciA9IC1FSU5WQUw7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBnb3RvIHB1dF9leGVjX3F1ZXVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqB2 bSA9IHhlX3ZtX2xvb2t1cCh4ZWYsIGFyZ3MtPnZtX2lkKTsKPiBAQCAtMzA5MSw2ICsyNzkzLDE0 IEBAIGludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZ290byBwdXRfZXhlY19xdWV1ZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKCFhcmdzLT5leGVjX3F1ZXVlX2lkKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9EQkcoeGUsIGFzeW5jICE9Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICEh KHZtLT5mbGFncyAmCj4gWEVfVk1fRkxBR19BU1lOQ19ERUZBVUxUKSkpIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1FSU5WQUw7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHB1dF92bTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiAr Cj4gwqDCoMKgwqDCoMKgwqDCoGVyciA9IGRvd25fd3JpdGVfa2lsbGFibGUoJnZtLT5sb2NrKTsK PiDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gcHV0X3ZtOwo+IEBAIC0zMTAwLDM0ICsyODEwLDYgQEAgaW50IHhlX3ZtX2JpbmRf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHJlbGVhc2Vf dm1fbG9jazsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKFZN X0JJTkRfT1AoYmluZF9vcHNbMF0ub3ApID09IFhFX1ZNX0JJTkRfT1BfUkVTVEFSVCkgewo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhlLCAhKHZtLT5m bGFncyAmCj4gWEVfVk1fRkxBR19BU1lOQ19CSU5EX09QUykpKQo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gLUVPUE5PVFNVUFA7Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9EQkcoeGUsICFlcnIgJiYgYXJn cy0+bnVtX3N5bmNzKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGVyciA9IEVJTlZBTDsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KFhFX0lPQ1RMX0RCRyh4ZSwgIWVyciAmJiAhdm0tPmFzeW5jX29wcy5lcnJvcikpCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRVBST1RPOwo+ IC0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFlcnIpIHsKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3hlX3ZtX3Jlc3Rh cnQodm0pOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dm1fc2V0X2FzeW5jX2Vycm9yKHZtLCAwKTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxdWV1ZV93b3JrKHN5c3RlbV91bmJvdW5kX3dxLCAmdm0t Cj4gPmFzeW5jX29wcy53b3JrKTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAvKiBSZWJpbmRzIG1heSBoYXZlIGJlZW4gYmxvY2tlZCwgZ2l2ZSB3 b3JrZXIKPiBhIGtpY2sgKi8KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmICh4ZV92bV9pbl9jb21wdXRlX21vZGUodm0pKQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX3ZtX3F1 ZXVlX3JlYmluZF93b3JrZXIodm0pOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9 Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHJlbGVhc2Vfdm1fbG9j azsKPiAtwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9E QkcoeGUsICF2bS0+YXN5bmNfb3BzLmVycm9yICYmCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN5bmMgIT0gISEodm0tPmZsYWdzICYKPiBYRV9WTV9G TEFHX0FTWU5DX0JJTkRfT1BTKSkpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZXJyID0gLUVPUE5PVFNVUFA7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8g cmVsZWFzZV92bV9sb2NrOwo+IC3CoMKgwqDCoMKgwqDCoH0KPiAtCj4gwqDCoMKgwqDCoMKgwqDC oGZvciAoaSA9IDA7IGkgPCBhcmdzLT5udW1fYmluZHM7ICsraSkgewo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdTY0IHJhbmdlID0gYmluZF9vcHNbaV0ucmFuZ2U7Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgYWRkciA9IGJpbmRfb3BzW2ldLmFkZHI7Cj4g QEAgLTMyMTMsMTcgKzI4OTUsNiBAQCBpbnQgeGVfdm1fYmluZF9pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAo+IHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZyZWVfc3luY3M7 Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoC8qIERvIHNvbWUgZXJy b3IgY2hlY2tpbmcgZmlyc3QgdG8gbWFrZSB0aGUgdW53aW5kIGVhc2llciAqLwo+IC3CoMKgwqDC oMKgwqDCoGZvciAoaSA9IDA7IGkgPCBhcmdzLT5udW1fYmluZHM7ICsraSkgewo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgcmFuZ2UgPSBiaW5kX29wc1tpXS5yYW5nZTsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTY0IGFkZHIgPSBiaW5kX29wc1tpXS5hZGRy Owo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgb3AgPSBiaW5kX29wc1tpXS5v cDsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHZtX2JpbmRfaW9j dGxfbG9va3VwX3ZtYSh2bSwgYm9zW2ldLCBhZGRyLAo+IHJhbmdlLCBvcCk7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChlcnIpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZyZWVfc3luY3M7Cj4gLcKgwqDCoMKgwqDCoMKg fQo+IC0KPiDCoMKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGFyZ3MtPm51bV9iaW5kczsg KytpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgcmFuZ2UgPSBiaW5k X29wc1tpXS5yYW5nZTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCBhZGRy ID0gYmluZF9vcHNbaV0uYWRkcjsKPiBAQCAtMzI1NSwxMCArMjkyNiwxOSBAQCBpbnQgeGVfdm1f YmluZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IHZvaWQgKmRhdGEsIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gdW53 aW5kX29wczsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZXJyID0g dm1fYmluZF9pb2N0bF9vcHNfZXhlY3V0ZSh2bSwgJm9wc19saXN0LCBhc3luYyk7Cj4gK8KgwqDC oMKgwqDCoMKgeGVfdm1fZ2V0KHZtKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9nZXQocSk7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGVyciA9IHZtX2JpbmRfaW9jdGxfb3BzX2V4ZWN1dGUodm0sICZvcHNfbGlzdCk7 Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqB1cF93cml0ZSgmdm0tPmxvY2spOwo+IMKgCj4gLcKgwqDC oMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGFyZ3MtPm51bV9iaW5kczsgKytpKQo+ICvCoMKgwqDC oMKgwqDCoGlmIChxKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9leGVjX3F1 ZXVlX3B1dChxKTsKPiArwqDCoMKgwqDCoMKgwqB4ZV92bV9wdXQodm0pOwo+ICsKPiArwqDCoMKg wqDCoMKgwqBmb3IgKGkgPSAwOyBib3MgJiYgaSA8IGFyZ3MtPm51bV9iaW5kczsgKytpKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfYm9fcHV0KGJvc1tpXSk7Cj4gwqAKPiDC oMKgwqDCoMKgwqDCoMKga2ZyZWUoYm9zKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3hlL3hlX3ZtLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uaAo+IGluZGV4IGY5NjZlZDM5 YjcxMS4uMzg0ZWM2ZWE4MzE4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV92 bS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmgKPiBAQCAtMTc5LDggKzE3OSw2 IEBAIHN0cnVjdCBkbWFfZmVuY2UgKnhlX3ZtX3JlYmluZChzdHJ1Y3QgeGVfdm0gKnZtLAo+IGJv b2wgcmViaW5kX3dvcmtlcik7Cj4gwqAKPiDCoGludCB4ZV92bV9pbnZhbGlkYXRlX3ZtYShzdHJ1 Y3QgeGVfdm1hICp2bWEpOwo+IMKgCj4gLWludCB4ZV92bV9hc3luY19mZW5jZV93YWl0X3N0YXJ0 KHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKPiAtCj4gwqBleHRlcm4gc3RydWN0IHR0bV9kZXZp Y2VfZnVuY3MgeGVfdHRtX2Z1bmNzOwo+IMKgCj4gwqBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KnhlX3ZtX3R0bV9ibyhzdHJ1Y3QgeGVfdm0gKnZtKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3hlL3hlX3ZtX3R5cGVzLmgKPiBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV92bV90eXBl cy5oCj4gaW5kZXggM2RjM2RhMTM4NmNiLi45MTdiN2ExNmMzYTcgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3hlL3hlX3ZtX3R5cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUv eGVfdm1fdHlwZXMuaAo+IEBAIC0xNyw3ICsxNyw2IEBACj4gwqAjaW5jbHVkZSAieGVfcHRfdHlw ZXMuaCIKPiDCoCNpbmNsdWRlICJ4ZV9yYW5nZV9mZW5jZS5oIgo+IMKgCj4gLXN0cnVjdCBhc3lu Y19vcF9mZW5jZTsKPiDCoHN0cnVjdCB4ZV9ibzsKPiDCoHN0cnVjdCB4ZV9zeW5jX2VudHJ5Owo+ IMKgc3RydWN0IHhlX3ZtOwo+IEBAIC0xNjMsNyArMTYyLDcgQEAgc3RydWN0IHhlX3ZtIHsKPiDC oMKgwqDCoMKgwqDCoMKgICovCj4gwqAjZGVmaW5lIFhFX1ZNX0ZMQUdfNjRLwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgwKQo+IMKgI2RlZmluZSBYRV9WTV9GTEFHX0NPTVBV VEVfTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpCj4gLSNkZWZpbmUg WEVfVk1fRkxBR19BU1lOQ19CSU5EX09QU8KgwqDCoMKgwqDCoEJJVCgyKQo+ICsjZGVmaW5lIFhF X1ZNX0ZMQUdfQVNZTkNfREVGQVVMVMKgwqDCoMKgwqDCoMKgQklUKDIpCj4gwqAjZGVmaW5lIFhF X1ZNX0ZMQUdfTUlHUkFUSU9OwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzKQo+IMKgI2RlZmlu ZSBYRV9WTV9GTEFHX1NDUkFUQ0hfUEFHRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDQpCj4gwqAjZGVmaW5lIFhFX1ZNX0ZMQUdfRkFVTFRfTU9ERcKgwqDCoMKgwqDCoMKgwqDC oMKgQklUKDUpCj4gQEAgLTIxNCwzMCArMjEzLDYgQEAgc3RydWN0IHhlX3ZtIHsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiDCoMKgwqDC oMKgwqDCoMKgfSBleHRvYmo7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAvKiogQGFzeW5jX29wczog YXN5bmMgVk0gb3BlcmF0aW9ucyAoYmluZCAvIHVuYmluZHMpICovCj4gLcKgwqDCoMKgwqDCoMKg c3RydWN0IHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoqIEBsaXN0OiBsaXN0 IG9mIHBlbmRpbmcgYXN5bmMgVk0gb3BzICovCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZzsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLyoqIEB3b3JrOiB3b3JrZXIgdG8gZXhlY3V0ZSBhc3luYyBWTSBvcHMgKi8KPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKiBAbG9jazogcHJvdGVjdHMgbGlzdCBvZiBw ZW5kaW5nIGFzeW5jIFZNIG9wcyBhbmQKPiBmZW5jZXMgKi8KPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc3BpbmxvY2tfdCBsb2NrOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAvKiogQGZlbmNlOiBmZW5jZSBzdGF0ZSAqLwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3Qgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLyoqIEBjb250ZXh0OiBjb250ZXh0IG9mIGFzeW5jIGZlbmNlICovCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgY29udGV4dDsKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKiBAc2Vxbm86 IHNlcW5vIG9mIGFzeW5jIGZlbmNlICovCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1MzIgc2Vxbm87Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0gZmVuY2U7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKiBAZXJyb3I6 IGVycm9yIHN0YXRlIGZvciBhc3luYyBWTSBvcHMgKi8KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaW50IGVycm9yOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKioK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQG11bm1hcF9yZWJpbmRfaW5mbGln aHQ6IGFuIG11bm1hcCBzdHlsZSBWTSBiaW5kCj4gaXMgaW4gdGhlCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIG1pZGRsZSBvZiBhIHNldCBvZiBvcHMgd2hpY2ggcmVxdWlyZXMg YSByZWJpbmQgYXQKPiB0aGUgZW5kLgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Ki8KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCBtdW5tYXBfcmViaW5kX2lu ZmxpZ2h0Owo+IC3CoMKgwqDCoMKgwqDCoH0gYXN5bmNfb3BzOwo+IC0KPiDCoMKgwqDCoMKgwqDC oMKgLyoqIEB1c2VycHRyOiB1c2VyIHBvaW50ZXIgc3RhdGUgKi8KPiDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKgo+IEBAIC0zOTcs MTAgKzM3Miw2IEBAIHN0cnVjdCB4ZV92bWFfb3Agewo+IMKgwqDCoMKgwqDCoMKgwqB1MzIgbnVt X3N5bmNzOwo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQGxpbms6IGFzeW5jIG9wZXJhdGlvbiBsaW5r ICovCj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiAtwqDCoMKgwqDC oMKgwqAvKioKPiAtwqDCoMKgwqDCoMKgwqAgKiBAZmVuY2U6IGFzeW5jIG9wZXJhdGlvbiBmZW5j ZSwgc2lnbmFsZWQgb24gbGFzdCBvcGVyYXRpb24KPiBjb21wbGV0ZQo+IC3CoMKgwqDCoMKgwqDC oCAqLwo+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBhc3luY19vcF9mZW5jZSAqZmVuY2U7Cj4gwqDC oMKgwqDCoMKgwqDCoC8qKiBAdGlsZV9tYXNrOiBndCBtYXNrIGZvciB0aGlzIG9wZXJhdGlvbiAq Lwo+IMKgwqDCoMKgwqDCoMKgwqB1OCB0aWxlX21hc2s7Cj4gwqDCoMKgwqDCoMKgwqDCoC8qKiBA ZmxhZ3M6IG9wZXJhdGlvbiBmbGFncyAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJt L3hlX2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS94ZV9kcm0uaAo+IGluZGV4IGQwMjU5ODY1NzE3 YS4uYmFhMTA0ZDUwMmNlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0veGVfZHJtLmgK PiArKysgYi9pbmNsdWRlL3VhcGkvZHJtL3hlX2RybS5oCj4gQEAgLTQ4Niw3ICs0ODYsNyBAQCBz dHJ1Y3QgZHJtX3hlX3ZtX2NyZWF0ZSB7Cj4gwqAKPiDCoCNkZWZpbmUgRFJNX1hFX1ZNX0NSRUFU RV9TQ1JBVENIX1BBR0XCoMKgKDB4MSA8PCAwKQo+IMKgI2RlZmluZSBEUk1fWEVfVk1fQ1JFQVRF X0NPTVBVVEVfTU9ERcKgwqAoMHgxIDw8IDEpCj4gLSNkZWZpbmUgRFJNX1hFX1ZNX0NSRUFURV9B U1lOQ19CSU5EX09QU8KgwqDCoMKgwqDCoMKgwqAoMHgxIDw8IDIpCj4gKyNkZWZpbmUgRFJNX1hF X1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxUwqAoMHgxIDw8IDIpCj4gwqAjZGVmaW5lIERSTV9YRV9W TV9DUkVBVEVfRkFVTFRfTU9ERcKgwqDCoMKgKDB4MSA8PCAzKQo+IMKgwqDCoMKgwqDCoMKgwqAv KiogQGZsYWdzOiBGbGFncyAqLwo+IMKgwqDCoMKgwqDCoMKgwqBfX3UzMiBmbGFnczsKPiBAQCAt NTQ2LDMyICs1NDYsMTAgQEAgc3RydWN0IGRybV94ZV92bV9iaW5kX29wIHsKPiDCoCNkZWZpbmUg WEVfVk1fQklORF9PUF9NQVDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwCj4gwqAjZGVm aW5lIFhFX1ZNX0JJTkRfT1BfVU5NQVDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDEKPiDCoCNk ZWZpbmUgWEVfVk1fQklORF9PUF9NQVBfVVNFUlBUUsKgwqDCoMKgwqDCoDB4Mgo+IC0jZGVmaW5l IFhFX1ZNX0JJTkRfT1BfUkVTVEFSVMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgzCj4gLSNkZWZpbmUg WEVfVk1fQklORF9PUF9VTk1BUF9BTEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 NAo+IC0jZGVmaW5lIFhFX1ZNX0JJTkRfT1BfUFJFRkVUQ0jCoMKgwqDCoMKgwqDCoMKgwqAweDUK PiArI2RlZmluZSBYRV9WTV9CSU5EX09QX1VOTUFQX0FMTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgMHgzCj4gKyNkZWZpbmUgWEVfVk1fQklORF9PUF9QUkVGRVRDSMKgwqDCoMKgwqDC oMKgwqDCoDB4NAo+IMKgCj4gwqAjZGVmaW5lIFhFX1ZNX0JJTkRfRkxBR19SRUFET05MWcKgwqDC oMKgwqDCoMKgKDB4MSA8PCAxNikKPiAtwqDCoMKgwqDCoMKgwqAvKgo+IC3CoMKgwqDCoMKgwqDC oCAqIEEgYmluZCBvcHMgY29tcGxldGlvbnMgYXJlIGFsd2F5cyBhc3luYywgaGVuY2UgdGhlIHN1 cHBvcnQKPiBmb3Igb3V0Cj4gLcKgwqDCoMKgwqDCoMKgICogc3luYy4gVGhpcyBmbGFnIGluZGlj YXRlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgbWVtb3J5IGZvcgo+IG5ldyBwYWdlCj4gLcKgwqDC oMKgwqDCoMKgICogdGFibGVzIGFuZCB0aGUgam9iIHRvIHByb2dyYW0gdGhlIHBhZ2VzIHRhYmxl cyBpcwo+IGFzeW5jaHJvbm91cwo+IC3CoMKgwqDCoMKgwqDCoCAqIHJlbGF0aXZlIHRvIHRoZSBJ T0NUTC4gVGhhdCBwYXJ0IG9mIGEgYmluZCBvcGVyYXRpb24gY2FuCj4gZmFpbCB1bmRlcgo+IC3C oMKgwqDCoMKgwqDCoCAqIG1lbW9yeSBwcmVzc3VyZSwgdGhlIGpvYiBpbiBwcmFjdGljZSBjYW4n dCBmYWlsIHVubGVzcyB0aGUKPiBzeXN0ZW0gaXMKPiAtwqDCoMKgwqDCoMKgwqAgKiB0b3RhbGx5 IHNob3QuCj4gLcKgwqDCoMKgwqDCoMKgICoKPiAtwqDCoMKgwqDCoMKgwqAgKiBJZiB0aGlzIGZs YWcgaXMgY2xlYXIgYW5kIHRoZSBJT0NUTCBkb2Vzbid0IHJldHVybiBhbgo+IGVycm9yLCBpbgo+ IC3CoMKgwqDCoMKgwqDCoCAqIHByYWN0aWNlIHRoZSBiaW5kIG9wIGlzIGdvb2QgYW5kIHdpbGwg Y29tcGxldGUuCj4gLcKgwqDCoMKgwqDCoMKgICoKPiAtwqDCoMKgwqDCoMKgwqAgKiBJZiB0aGlz IGZsYWcgaXMgc2V0IGFuZCBkb2Vzbid0IHJldHVybiBhbiBlcnJvciwgdGhlIGJpbmQKPiBvcCBj YW4KPiAtwqDCoMKgwqDCoMKgwqAgKiBzdGlsbCBmYWlsIGFuZCByZWNvdmVyeSBpcyBuZWVkZWQu IEl0IHNob3VsZCBmcmVlIG1lbW9yeQo+IC3CoMKgwqDCoMKgwqDCoCAqIHZpYSBub24tYXN5bmMg dW5iaW5kcywgYW5kIHRoZW4gcmVzdGFydCBhbGwgcXVldWVkIGFzeW5jCj4gYmluZHMgb3Agdmlh Cj4gLcKgwqDCoMKgwqDCoMKgICogWEVfVk1fQklORF9PUF9SRVNUQVJULiBPciBhbHRlcm5hdGl2 ZWx5IHRoZSB1c2VyIHNob3VsZAo+IGRlc3Ryb3kgdGhlCj4gLcKgwqDCoMKgwqDCoMKgICogVk0u Cj4gLcKgwqDCoMKgwqDCoMKgICoKPiAtwqDCoMKgwqDCoMKgwqAgKiBUaGlzIGZsYWcgaXMgb25s eSBhbGxvd2VkIHdoZW4KPiBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0JJTkRfT1BTIGlzCj4gLcKg wqDCoMKgwqDCoMKgICogY29uZmlndXJlZCBpbiB0aGUgVk0gYW5kIG11c3QgYmUgc2V0IGlmIHRo ZSBWTSBpcwo+IGNvbmZpZ3VyZWQgd2l0aAo+IC3CoMKgwqDCoMKgwqDCoCAqIERSTV9YRV9WTV9D UkVBVEVfQVNZTkNfQklORF9PUFMgYW5kIG5vdCBpbiBhbiBlcnJvciBzdGF0ZS4KPiAtwqDCoMKg wqDCoMKgwqAgKi8KPiDCoCNkZWZpbmUgWEVfVk1fQklORF9GTEFHX0FTWU5DwqDCoMKgwqDCoMKg wqDCoMKgwqAoMHgxIDw8IDE3KQo+IMKgwqDCoMKgwqDCoMKgwqAvKgo+IMKgwqDCoMKgwqDCoMKg wqAgKiBWYWxpZCBvbiBhIGZhdWx0aW5nIFZNIG9ubHksIGRvIHRoZSBNQVAgb3BlcmF0aW9uCj4g aW1tZWRpYXRlbHkgcmF0aGVyCj4gQEAgLTcwMCwxMCArNjc4LDExIEBAIHN0cnVjdCBkcm1feGVf ZW5naW5lX2NsYXNzX2luc3RhbmNlIHsKPiDCoCNkZWZpbmUgRFJNX1hFX0VOR0lORV9DTEFTU19W SURFT19FTkhBTkNFwqDCoMKgwqDCoMKgMwo+IMKgI2RlZmluZSBEUk1fWEVfRU5HSU5FX0NMQVNT X0NPTVBVVEXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA0Cj4gwqDCoMKgwqDCoMKgwqDCoC8qCj4g LcKgwqDCoMKgwqDCoMKgICogS2VybmVsIG9ubHkgY2xhc3MgKG5vdCBhY3R1YWwgaGFyZHdhcmUg ZW5naW5lIGNsYXNzKS4gVXNlZAo+IGZvcgo+ICvCoMKgwqDCoMKgwqDCoCAqIEtlcm5lbCBvbmx5 IGNsYXNzZXMgKG5vdCBhY3R1YWwgaGFyZHdhcmUgZW5naW5lIGNsYXNzKS4KPiBVc2VkIGZvcgo+ IMKgwqDCoMKgwqDCoMKgwqAgKiBjcmVhdGluZyBvcmRlcmVkIHF1ZXVlcyBvZiBWTSBiaW5kIG9w ZXJhdGlvbnMuCj4gwqDCoMKgwqDCoMKgwqDCoCAqLwo+IC0jZGVmaW5lIERSTV9YRV9FTkdJTkVf Q0xBU1NfVk1fQklORMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDUKPiArI2RlZmluZSBEUk1fWEVf RU5HSU5FX0NMQVNTX1ZNX0JJTkRfQVNZTkPCoMKgwqDCoMKgwqA1Cj4gKyNkZWZpbmUgRFJNX1hF X0VOR0lORV9DTEFTU19WTV9CSU5EX1NZTkPCoMKgwqDCoMKgwqDCoDYKPiDCoMKgwqDCoMKgwqDC oMKgX191MTYgZW5naW5lX2NsYXNzOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoF9fdTE2IGVuZ2lu ZV9pbnN0YW5jZTsKCg==