Received: by 2002:a05:7412:b795:b0:e2:908c:2ebd with SMTP id iv21csp377439rdb; Thu, 2 Nov 2023 06:27:51 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEqXwRwoBGZgJ39oLQwKjYB/MCVvdNY/2IFFgfRjXTv7WMasK8Jqy82ZFQ7Tl4IEVWGE3Ww X-Received: by 2002:a05:6a00:1593:b0:6be:2901:2cd with SMTP id u19-20020a056a00159300b006be290102cdmr18729060pfk.10.1698931671469; Thu, 02 Nov 2023 06:27:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698931671; cv=none; d=google.com; s=arc-20160816; b=tbP6Y2gcJB8pg0URA7i7plxvMFVZ+arA2BXzTD09f5MYOT0aD15ydEmKMiOzVLJhcI Cem5aUjAFh0GxamJbJN0IXQeOS2riJfEbxsBN3Qivt1dnUxR0DbmqFMPwooq9WLR/G0H lkMprEP4gvVJY/Tmfd7mDMlEYRc8MttTfRiAZnDyrRHhnJ0b+1qjSIqeNS3fE7hkkaWX EC0rOr+W/DdaqxD65wG7EaNC+5XFM6kNSgdr82+dULV8CMOLqfQWeRGArF/8hRPLL/cS PvO1pbJ5c0MeAgSFAjbasRf2MVIE9ZaJevIUvCQOduwbUFtqV2KSPxo0hoMVnwo2xQnu enhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:organization:references:in-reply-to:date :cc:to:from:subject:message-id:dkim-signature; bh=K7g3S/g3DQlm01e9U308RFdNrudb29WIdaqkjKdfRs4=; fh=htvIroZrbKeU2x4AOko0NW3x9xa19Yggb7QfVOG/ARs=; b=YO0aiU+QUXM3iKQs0bYElSXdBImClo+wm2aJDqii7IQ15Ji9YS58DLEFSdzxHkklDM 6z335L9eH21RC6hAYO1VQ4z02Aul3hnEgUvGGgpCJnTelJ9ows/bXEn2btfBNVc/D72Y FL29DJI46DwmCxY/0AkOBhTVklRHYfbr6LHaIhe6GS18tHwGlBeDftZa1x+jkFW7dd/8 Op5CU13ohxY6RXTNvIeSElIBTO3cPC6Y6POGX9CcWNIQ4G6QTBQ79y9WWK3Hc4J2AGue gDHQhR6JkYN/tbi83WfNLbpjFGEIDIuOWb+Ul3OKr8cPVYVcRYcvMoqQL8q6sCZGdOBW qFhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=CGp23XPv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id r73-20020a632b4c000000b005b928c7b284si1853195pgr.587.2023.11.02.06.27.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Nov 2023 06:27:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=CGp23XPv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 7F61D80266B2; Thu, 2 Nov 2023 06:27:14 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376467AbjKBNZZ (ORCPT + 99 others); Thu, 2 Nov 2023 09:25:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234984AbjKBNZX (ORCPT ); Thu, 2 Nov 2023 09:25:23 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F70E18E for ; Thu, 2 Nov 2023 06:25:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698931516; x=1730467516; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=K7g3S/g3DQlm01e9U308RFdNrudb29WIdaqkjKdfRs4=; b=CGp23XPv06Z7ImqKTu1jl/XY8JhdcHVYJJcDqjzMPqOf2oyk8CKC9iB3 P690G7ZKNx2ulThz1kL/CUiiHDPfg2gJnJT+2UAoML2DmxLpVUL5sT1F+ PERtC2fdXBRoBXxBszo+H9Z2vsWHsR7wBSPfai04f1mthNz+ezA7dPPZA osWi/1zcGk0JIxsWv/tf7gAhaRZPdtj77BlA/b5iFwiiIIW8lpmJQbNPC DCW8/POjSuUzZbzQIySuebtxese6AcKt0evSWbP0oYoFMjAjLbvHH/kqf LocbtW20r0zthFfn0P+lklP6mTEej90g7kms+RPRwDdl27G97PljDIjoA g==; X-IronPort-AV: E=McAfee;i="6600,9927,10881"; a="391574073" X-IronPort-AV: E=Sophos;i="6.03,271,1694761200"; d="scan'208";a="391574073" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Nov 2023 06:25:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10881"; a="884888618" X-IronPort-AV: E=Sophos;i="6.03,271,1694761200"; d="scan'208";a="884888618" Received: from binsumax-mobl.gar.corp.intel.com (HELO [10.249.254.171]) ([10.249.254.171]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Nov 2023 06:25:11 -0700 Message-ID: Subject: Re: [PATCH drm-misc-next v8 10/12] drm/gpuvm: add an abstraction for a VM / BO combination From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Danilo Krummrich , airlied@gmail.com, daniel@ffwll.ch, matthew.brost@intel.com, sarah.walker@imgtec.com, donald.robson@imgtec.com, boris.brezillon@collabora.com, christian.koenig@amd.com, faith@gfxstrand.net Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org Date: Thu, 02 Nov 2023 14:25:09 +0100 In-Reply-To: <20231101233113.8059-11-dakr@redhat.com> References: <20231101233113.8059-1-dakr@redhat.com> <20231101233113.8059-11-dakr@redhat.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 X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Thu, 02 Nov 2023 06:27:14 -0700 (PDT) T24gVGh1LCAyMDIzLTExLTAyIGF0IDAwOjMxICswMTAwLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3Rl Ogo+IEFkZCBhbiBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuIHRoZSBkcm1fZ3B1dmEgbWFwcGlu Z3Mgb2YgYQo+IHBhcnRpY3VsYXIKPiBkcm1fZ2VtX29iamVjdCBhbmQgdGhpcyBHRU0gb2JqZWN0 IGl0c2VsZi4gVGhlIGFic3RyYWN0aW9uIHJlcHJlc2VudHMKPiBhCj4gY29tYmluYXRpb24gb2Yg YSBkcm1fZ2VtX29iamVjdCBhbmQgZHJtX2dwdXZtLiBUaGUgZHJtX2dlbV9vYmplY3QKPiBob2xk cwo+IGEgbGlzdCBvZiBkcm1fZ3B1dm1fYm8gc3RydWN0dXJlcyAodGhlIHN0cnVjdHVyZSByZXBy ZXNlbnRpbmcgdGhpcwo+IGFic3RyYWN0aW9uKSwgd2hpbGUgZWFjaCBkcm1fZ3B1dm1fYm8gY29u dGFpbnMgbGlzdCBvZiBtYXBwaW5ncyBvZgo+IHRoaXMKPiBHRU0gb2JqZWN0Lgo+IAo+IFRoaXMg aGFzIG11bHRpcGxlIGFkdmFudGFnZXM6Cj4gCj4gMSkgV2UgY2FuIHVzZSB0aGUgZHJtX2dwdXZt X2JvIHN0cnVjdHVyZSB0byBhdHRhY2ggaXQgdG8gdmFyaW91cwo+IGxpc3RzCj4gwqDCoCBvZiB0 aGUgZHJtX2dwdXZtLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdHJhY2tpbmcgZXh0ZXJuYWwgYW5kIGV2 aWN0ZWQKPiDCoMKgIG9iamVjdHMgcGVyIFZNLCB3aGljaCBpcyBpbnRyb2R1Y2VkIGluIHN1YnNl cXVlbnQgcGF0Y2hlcy4KPiAKPiAyKSBGaW5kaW5nIG1hcHBpbmdzIG9mIGEgY2VydGFpbiBkcm1f Z2VtX29iamVjdCBtYXBwZWQgaW4gYSBjZXJ0YWluCj4gwqDCoCBkcm1fZ3B1dm0gYmVjb21lcyBt dWNoIGNoZWFwZXIuCj4gCj4gMykgRHJpdmVycyBjYW4gZGVyaXZlIGFuZCBleHRlbmQgdGhlIHN0 cnVjdHVyZSB0byBlYXNpbHkgcmVwcmVzZW50Cj4gwqDCoCBkcml2ZXIgc3BlY2lmaWMgc3RhdGVz IG9mIGEgQk8gZm9yIGEgY2VydGFpbiBHUFVWTS4KPiAKPiBUaGUgaWRlYSBvZiB0aGlzIGFic3Ry YWN0aW9uIHdhcyB0YWtlbiBmcm9tIGFtZGdwdSwgaGVuY2UgdGhlIGNyZWRpdAo+IGZvcgo+IHRo aXMgaWRlYSBnb2VzIHRvIHRoZSBkZXZlbG9wZXJzIG9mIGFtZGdwdS4KPiAKPiBDYzogQ2hyaXN0 aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+IFJldmlld2VkLWJ5OiBCb3Jp cyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBjb2xsYWJvcmEuY29tPgo+IFNpZ25lZC1vZmYt Ynk6IERhbmlsbyBLcnVtbXJpY2ggPGRha3JAcmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IFRob21h cyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KCj4gLS0tCj4g wqBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXZtLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMzM2 ICsrKysrKysrKysrKysrKysrKysrKy0tCj4gLS0KPiDCoGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1 L25vdXZlYXVfdXZtbS5jIHzCoCA2MyArKystLQo+IMKgaW5jbHVkZS9kcm0vZHJtX2dlbS5owqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMzIgKy0tCj4gwqBpbmNsdWRlL2Ry bS9kcm1fZ3B1dm0uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDE4NSArKysrKysr KysrKysrLQo+IMKgNCBmaWxlcyBjaGFuZ2VkLCA1MzAgaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRp b25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYwo+IGIv ZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jCj4gaW5kZXggNmE4OGVhZmM1MjI5Li4yYzhmZGVm YjE5ZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jCj4gQEAgLTcwLDYgKzcwLDE4IEBACj4gwqAgKiAm ZHJtX2dlbV9vYmplY3QsIHN1Y2ggYXMgdGhlICZkcm1fZ2VtX29iamVjdCBjb250YWluaW5nIHRo ZSByb290Cj4gcGFnZSB0YWJsZSwKPiDCoCAqIGJ1dCBpdCBjYW4gYWxzbyBiZSBhICdkdW1teScg b2JqZWN0LCB3aGljaCBjYW4gYmUgYWxsb2NhdGVkIHdpdGgKPiDCoCAqIGRybV9ncHV2bV9yZXN2 X29iamVjdF9hbGxvYygpLgo+ICsgKgo+ICsgKiBJbiBvcmRlciB0byBjb25uZWN0IGEgc3RydWN0 IGRybV9ncHV2YSBpdHMgYmFja2luZwo+ICZkcm1fZ2VtX29iamVjdCBlYWNoCj4gKyAqICZkcm1f Z2VtX29iamVjdCBtYWludGFpbnMgYSBsaXN0IG9mICZkcm1fZ3B1dm1fYm8gc3RydWN0dXJlcywg YW5kCj4gZWFjaAo+ICsgKiAmZHJtX2dwdXZtX2JvIGNvbnRhaW5zIGEgbGlzdCBvZiAmZHJtX2dw dXZhIHN0cnVjdHVyZXMuCj4gKyAqCj4gKyAqIEEgJmRybV9ncHV2bV9ibyBpcyBhbiBhYnN0cmFj dGlvbiB0aGF0IHJlcHJlc2VudHMgYSBjb21iaW5hdGlvbgo+IG9mIGEKPiArICogJmRybV9ncHV2 bSBhbmQgYSAmZHJtX2dlbV9vYmplY3QuIEV2ZXJ5IHN1Y2ggY29tYmluYXRpb24gc2hvdWxkCj4g YmUgdW5pcXVlLgo+ICsgKiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIEFQSSB0aHJvdWdoIGRybV9n cHV2bV9ib19vYnRhaW4oKSBhbmQKPiArICogZHJtX2dwdXZtX2JvX29idGFpbl9wcmVhbGxvYygp IHdoaWNoIGZpcnN0IGxvb2sgaW50byB0aGUKPiBjb3JyZXNwb25kaW5nCj4gKyAqICZkcm1fZ2Vt X29iamVjdCBsaXN0IG9mICZkcm1fZ3B1dm1fYm9zIGZvciBhbiBleGlzdGluZyBpbnN0YW5jZQo+ IG9mIHRoaXMKPiArICogcGFydGljdWxhciBjb21iaW5hdGlvbi4gSWYgbm90IGV4aXN0ZW50IGEg bmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQKPiBhbmQgbGlua2VkCj4gKyAqIHRvIHRoZSAmZHJtX2dl bV9vYmplY3QuCj4gwqAgKi8KPiDCoAo+IMKgLyoqCj4gQEAgLTM5NSwyMSArNDA3LDI4IEBACj4g wqAvKioKPiDCoCAqIERPQzogTG9ja2luZwo+IMKgICoKPiAtICogR2VuZXJhbGx5LCB0aGUgR1BV IFZBIG1hbmFnZXIgZG9lcyBub3QgdGFrZSBjYXJlIG9mIGxvY2tpbmcKPiBpdHNlbGYsIGl0IGlz Cj4gLSAqIHRoZSBkcml2ZXJzIHJlc3BvbnNpYmlsaXR5IHRvIHRha2UgY2FyZSBhYm91dCBsb2Nr aW5nLiBEcml2ZXJzCj4gbWlnaHQgd2FudCB0bwo+IC0gKiBwcm90ZWN0IHRoZSBmb2xsb3dpbmcg b3BlcmF0aW9uczogaW5zZXJ0aW5nLCByZW1vdmluZyBhbmQKPiBpdGVyYXRpbmcKPiAtICogJmRy bV9ncHV2YSBvYmplY3RzIGFzIHdlbGwgYXMgZ2VuZXJhdGluZyBhbGwga2luZHMgb2Ygb3BlcmF0 aW9ucywKPiBzdWNoIGFzCj4gLSAqIHNwbGl0IC8gbWVyZ2Ugb3IgcHJlZmV0Y2guCj4gLSAqCj4g LSAqIFRoZSBHUFUgVkEgbWFuYWdlciBhbHNvIGRvZXMgbm90IHRha2UgY2FyZSBvZiB0aGUgbG9j a2luZyBvZiB0aGUKPiBiYWNraW5nCj4gLSAqICZkcm1fZ2VtX29iamVjdCBidWZmZXJzIEdQVSBW QSBsaXN0cyBieSBpdHNlbGY7IGRyaXZlcnMgYXJlCj4gcmVzcG9uc2libGUgdG8KPiAtICogZW5m b3JjZSBtdXR1YWwgZXhjbHVzaW9uIHVzaW5nIGVpdGhlciB0aGUgR0VNcyBkbWFfcmVzdiBsb2Nr IG9yCj4gYWx0ZXJuYXRpdmVseQo+IC0gKiBhIGRyaXZlciBzcGVjaWZpYyBleHRlcm5hbCBsb2Nr LiBGb3IgdGhlIGxhdHRlciBzZWUgYWxzbwo+IC0gKiBkcm1fZ2VtX2dwdXZhX3NldF9sb2NrKCku Cj4gLSAqCj4gLSAqIEhvd2V2ZXIsIHRoZSBHUFUgVkEgbWFuYWdlciBjb250YWlucyBsb2NrZGVw IGNoZWNrcyB0byBlbnN1cmUKPiBjYWxsZXJzIG9mIGl0cwo+IC0gKiBBUEkgaG9sZCB0aGUgY29y cmVzcG9uZGluZyBsb2NrIHdoZW5ldmVyIHRoZSAmZHJtX2dlbV9vYmplY3RzIEdQVQo+IFZBIGxp c3QgaXMKPiAtICogYWNjZXNzZWQgYnkgZnVuY3Rpb25zIHN1Y2ggYXMgZHJtX2dwdXZhX2xpbmso KSBvcgo+IGRybV9ncHV2YV91bmxpbmsoKS4KPiArICogSW4gdGVybXMgb2YgbWFuYWdpbmcgJmRy bV9ncHV2YSBlbnRyaWVzIERSTSBHUFVWTSBkb2VzIG5vdCB0YWtlCj4gY2FyZSBvZgo+ICsgKiBs b2NraW5nIGl0c2VsZiwgaXQgaXMgdGhlIGRyaXZlcnMgcmVzcG9uc2liaWxpdHkgdG8gdGFrZSBj YXJlCj4gYWJvdXQgbG9ja2luZy4KPiArICogRHJpdmVycyBtaWdodCB3YW50IHRvIHByb3RlY3Qg dGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOgo+IGluc2VydGluZywgcmVtb3ZpbmcKPiArICogYW5k IGl0ZXJhdGluZyAmZHJtX2dwdXZhIG9iamVjdHMgYXMgd2VsbCBhcyBnZW5lcmF0aW5nIGFsbCBr aW5kcwo+IG9mCj4gKyAqIG9wZXJhdGlvbnMsIHN1Y2ggYXMgc3BsaXQgLyBtZXJnZSBvciBwcmVm ZXRjaC4KPiArICoKPiArICogRFJNIEdQVVZNIGFsc28gZG9lcyBub3QgdGFrZSBjYXJlIG9mIHRo ZSBsb2NraW5nIG9mIHRoZSBiYWNraW5nCj4gKyAqICZkcm1fZ2VtX29iamVjdCBidWZmZXJzIEdQ VSBWQSBsaXN0cyBhbmQgJmRybV9ncHV2bV9ibwo+IGFic3RyYWN0aW9ucyBieQo+ICsgKiBpdHNl bGY7IGRyaXZlcnMgYXJlIHJlc3BvbnNpYmxlIHRvIGVuZm9yY2UgbXV0dWFsIGV4Y2x1c2lvbiB1 c2luZwo+IGVpdGhlciB0aGUKPiArICogR0VNcyBkbWFfcmVzdiBsb2NrIG9yIGFsdGVybmF0aXZl bHkgYSBkcml2ZXIgc3BlY2lmaWMgZXh0ZXJuYWwKPiBsb2NrLiBGb3IgdGhlCj4gKyAqIGxhdHRl ciBzZWUgYWxzbyBkcm1fZ2VtX2dwdXZhX3NldF9sb2NrKCkuCj4gKyAqCj4gKyAqIEhvd2V2ZXIs IERSTSBHUFVWTSBjb250YWlucyBsb2NrZGVwIGNoZWNrcyB0byBlbnN1cmUgY2FsbGVycyBvZgo+ IGl0cyBBUEkgaG9sZAo+ICsgKiB0aGUgY29ycmVzcG9uZGluZyBsb2NrIHdoZW5ldmVyIHRoZSAm ZHJtX2dlbV9vYmplY3RzIEdQVSBWQSBsaXN0Cj4gaXMgYWNjZXNzZWQKPiArICogYnkgZnVuY3Rp b25zIHN1Y2ggYXMgZHJtX2dwdXZhX2xpbmsoKSBvciBkcm1fZ3B1dmFfdW5saW5rKCksIGJ1dAo+ IGFsc28KPiArICogZHJtX2dwdXZtX2JvX29idGFpbigpIGFuZCBkcm1fZ3B1dm1fYm9fcHV0KCku Cj4gKyAqCj4gKyAqIFRoZSBsYXR0ZXIgaXMgcmVxdWlyZWQgc2luY2Ugb24gY3JlYXRpb24gYW5k IGRlc3RydWN0aW9uIG9mIGEKPiAmZHJtX2dwdXZtX2JvCj4gKyAqIHRoZSAmZHJtX2dwdXZtX2Jv IGlzIGF0dGFjaGVkIC8gcmVtb3ZlZCBmcm9tIHRoZSAmZHJtX2dlbV9vYmplY3RzCj4gZ3B1dmEg bGlzdC4KPiArICogU3Vic2VxdWVudCBjYWxscyB0byBkcm1fZ3B1dm1fYm9fb2J0YWluKCkgZm9y IHRoZSBzYW1lICZkcm1fZ3B1dm0KPiBhbmQKPiArICogJmRybV9nZW1fb2JqZWN0IG11c3QgYmUg YWJsZSB0byBvYnNlcnZlIHByZXZpb3VzIGNyZWF0aW9ucyBhbmQKPiBkZXN0cnVjdGlvbnMKPiAr ICogb2YgJmRybV9ncHV2bV9ib3MgaW4gb3JkZXIgdG8ga2VlcCBpbnN0YW5jZXMgdW5pcXVlLgo+ IMKgICovCj4gwqAKPiDCoC8qKgo+IEBAIC00MzksNiArNDU4LDcgQEAKPiDCoCAqwqDCoMKgwqDC oHsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAq b3BzOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3Ag Km9wCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2 bV9ibzsKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX2xvY2tf dmFfc3BhY2UoKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcHMgPSBkcm1fZ3B1 dm1fc21fbWFwX29wc19jcmVhdGUoZ3B1dm0sIGFkZHIsIHJhbmdlLAo+IEBAIC00NDYsNiArNDY2 LDEwIEBACj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihvcHMpKQo+ IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRS X0VSUihvcHMpOwo+IMKgICoKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtX2JvID0g ZHJtX2dwdXZtX2JvX29idGFpbihncHV2bSwgb2JqKTsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChJU19FUlIodm1fYm8pKQo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKHZtX2JvKTsKPiArICoKPiDCoCAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfZm9yX2VhY2hfb3Aob3AsIG9wcykgewo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dw dXZhICp2YTsKPiDCoCAqCj4gQEAgLTQ1OCw3ICs0ODIsNyBAQAo+IMKgICoKPiDCoCAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRyaXZl cl92bV9tYXAoKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9tYXAoZ3B1dm0sIHZhLCAmb3AtPm1hcCk7Cj4g LSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2YV9saW5rKHZhKTsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsodmEsIHZtX2JvKTsK PiDCoCAqCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBicmVhazsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY2FzZSBEUk1fR1BVVkFfT1BfUkVNQVA6IHsKPiBAQCAtNDg1LDExICs1MDks MTEgQEAKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRyaXZlcl92bV9yZW1hcCgpOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3JlbWFwKHBy ZXYsIG5leHQsICZvcC0KPiA+cmVtYXApOwo+IMKgICoKPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayh2 YSk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAocHJldikKPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5r KHByZXYpOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsocHJldiwgdmEtCj4g PnZtX2JvKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChuZXh0KQo+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZh X2xpbmsobmV4dCk7Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhuZXh0LCB2 YS0KPiA+dm1fYm8pOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5rKHZhKTsKPiDCoCAqCj4gwqAgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi cmVhazsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ IEBAIC01MDUsNiArNTI5LDcgQEAKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfQo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX3B1dCh2bV9i byk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX3VubG9ja192YV9zcGFj ZSgpOwo+IMKgICoKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiBA QCAtNTE0LDYgKzUzOSw3IEBACj4gwqAgKgo+IMKgICrCoMKgwqDCoMKgc3RydWN0IGRyaXZlcl9j b250ZXh0IHsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZt ICpncHV2bTsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1f Ym8gKnZtX2JvOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1 dmEgKm5ld192YTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dw dXZhICpwcmV2X3ZhOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f Z3B1dmEgKm5leHRfdmE7Cj4gQEAgLTUzNCw2ICs1NjAsNyBAQAo+IMKgICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmosIHU2NAo+IG9mZnNldCkKPiDCoCAqwqDCoMKgwqDCoHsKPiDCoCAq wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgY3R4Owo+ICsg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4g wqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcHMgKm9wczsK PiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wICpvcDsK PiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgcmV0ID0gMDsKPiBAQCAtNTQzLDE2 ICs1NzAsMjMgQEAKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgubmV3X3ZhID0g a3phbGxvYyhzaXplb2YoKmN0eC5uZXdfdmEpLAo+IEdGUF9LRVJORUwpOwo+IMKgICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGN0eC5wcmV2X3ZhID0ga3phbGxvYyhzaXplb2YoKmN0eC5wcmV2 X3ZhKSwKPiBHRlBfS0VSTkVMKTsKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgu bmV4dF92YSA9IGt6YWxsb2Moc2l6ZW9mKCpjdHgubmV4dF92YSksCj4gR0ZQX0tFUk5FTCk7Cj4g LSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWN0eC5uZXdfdmEgfHwgIWN0eC5wcmV2 X3ZhIHx8ICFjdHgubmV4dF92YSkgewo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3R4 LnZtX2JvID0gZHJtX2dwdXZtX2JvX2NyZWF0ZShncHV2bSwgb2JqKTsKPiArICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmICghY3R4Lm5ld192YSB8fCAhY3R4LnByZXZfdmEgfHwgIWN0eC5u ZXh0X3ZhIHx8Cj4gIXZtX2JvKSB7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldCA9IC1FTk9NRU07Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0KPiDCoCAqCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvLyBUeXBpY2FsbHkg cHJvdGVjdGVkIHdpdGggYSBkcml2ZXIgc3BlY2lmaWMgR0VNCj4gZ3B1dmEgbG9jawo+ICsgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLy8gdXNlZCBpbiB0aGUgZmVuY2Ugc2lnbmFsaW5nIHBh dGggZm9yCj4gZHJtX2dwdXZhX2xpbmsoKSBhbmQKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC8vIGRybV9ncHV2YV91bmxpbmsoKSwgaGVuY2UgcHJlLWFsbG9jYXRlLgo+ICsgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY3R4LnZtX2JvID0gZHJtX2dwdXZtX2JvX29idGFpbl9wcmVh bGxvYyhjdHgudm1fYm8pOwo+ICsgKgo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRy aXZlcl9sb2NrX3ZhX3NwYWNlKCk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gZHJtX2dwdXZtX3NtX21hcChncHV2bSwgJmN0eCwgYWRkciwgcmFuZ2UsIG9iaiwKPiBvZmZz ZXQpOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRyaXZlcl91bmxvY2tfdmFfc3Bh Y2UoKTsKPiDCoCAqCj4gwqAgKsKgwqDCoMKgwqBvdXQ6Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KGN0eC52bV9ibyk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKga2ZyZWUoY3R4Lm5ld192YSk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKga2ZyZWUoY3R4LnByZXZfdmEpOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGtmcmVlKGN0eC5uZXh0X3ZhKTsKPiBAQCAtNTY1LDcgKzU5OSw3IEBACj4gwqAgKgo+IMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9tYXAoY3R4LT52bSwgY3R4LT5uZXdf dmEsICZvcC0+bWFwKTsKPiDCoCAqCj4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1f Z3B1dmFfbGluayhjdHgtPm5ld192YSk7Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk cm1fZ3B1dmFfbGluayhjdHgtPm5ld192YSwgY3R4LT52bV9ibyk7Cj4gwqAgKgo+IMKgICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8vIHByZXZlbnQgdGhlIG5ldyBHUFVWQSBmcm9tIGJlaW5n IGZyZWVkIGluCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLy8gZHJpdmVyX21hcHBp bmdfY3JlYXRlKCkKPiBAQCAtNTc3LDIyICs2MTEsMjMgQEAKPiDCoCAqwqDCoMKgwqDCoGludCBk cml2ZXJfZ3B1dmFfcmVtYXAoc3RydWN0IGRybV9ncHV2YV9vcCAqb3AsIHZvaWQgKl9fY3R4KQo+ IMKgICrCoMKgwqDCoMKgewo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBk cml2ZXJfY29udGV4dCAqY3R4ID0gX19jdHg7Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2dwdXZhICp2YSA9IG9wLT5yZW1hcC51bm1hcC0+dmE7Cj4gwqAgKgo+IMKg ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9yZW1hcChjdHgtPnByZXZfdmEs IGN0eC0+bmV4dF92YSwgJm9wLQo+ID5yZW1hcCk7Cj4gwqAgKgo+IC0gKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayhvcC0+cmVtYXAudW5tYXAtPnZhKTsKPiAtICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKG9wLT5yZW1hcC51bm1hcC0+dmEpOwo+IC0g Kgo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVtYXAucHJldikgewo+ IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9s aW5rKGN0eC0+cHJldl92YSk7Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoY3R4LT5wcmV2X3ZhLCB2YS0+dm1fYm8pOwo+IMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgtPnByZXZfdmEgPSBO VUxMOwo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoCAqCj4gwqAgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5yZW1hcC5uZXh0KSB7Cj4gLSAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoY3R4LT5uZXh0 X3ZhKTsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1f Z3B1dmFfbGluayhjdHgtPm5leHRfdmEsIHZhLT52bV9ibyk7Cj4gwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0eC0+bmV4dF92YSA9IE5VTEw7Cj4gwqAgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgICoKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRybV9ncHV2YV91bmxpbmsodmEpOwo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKga2ZyZWUodmEpOwo+ICsgKgo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAwOwo+IMKgICrCoMKgwqDCoMKgfQo+IMKgICoKPiBAQCAtODEzLDYgKzg0OCwxOTUgQEAgZHJt X2dwdXZtX3B1dChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSkKPiDCoH0KPiDCoEVYUE9SVF9TWU1C T0xfR1BMKGRybV9ncHV2bV9wdXQpOwo+IMKgCj4gKy8qKgo+ICsgKiBkcm1fZ3B1dm1fYm9fY3Jl YXRlKCkgLSBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2Ygc3RydWN0Cj4gZHJtX2dwdXZtX2JvCj4g KyAqIEBncHV2bTogVGhlICZkcm1fZ3B1dm0gdGhlIEBvYmogaXMgbWFwcGVkIGluLgo+ICsgKiBA b2JqOiBUaGUgJmRybV9nZW1fb2JqZWN0IGJlaW5nIG1hcHBlZCBpbiB0aGUgQGdwdXZtLgo+ICsg Kgo+ICsgKiBJZiBwcm92aWRlZCBieSB0aGUgZHJpdmVyLCB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhl ICZkcm1fZ3B1dm1fb3BzCj4gKyAqIHZtX2JvX2FsbG9jKCkgY2FsbGJhY2sgdG8gYWxsb2NhdGUu Cj4gKyAqCj4gKyAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgJmRybV9ncHV2bV9ibyBvbiBz dWNjZXNzLCBOVUxMIG9uCj4gZmFpbHVyZQo+ICsgKi8KPiArc3RydWN0IGRybV9ncHV2bV9ibyAq Cj4gK2RybV9ncHV2bV9ib19jcmVhdGUoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aikKPiArewo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZ3B1dm1fb3BzICpvcHMg PSBncHV2bS0+b3BzOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2Jv Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAob3BzICYmIG9wcy0+dm1fYm9fYWxsb2MpCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZtX2JvID0gb3BzLT52bV9ib19hbGxvYygpOwo+ ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm1f Ym8gPSBremFsbG9jKHNpemVvZigqdm1fYm8pLCBHRlBfS0VSTkVMKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgaWYgKHVubGlrZWx5KCF2bV9ibykpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBOVUxMOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2bV9iby0+dm0gPSBkcm1fZ3B1 dm1fZ2V0KGdwdXZtKTsKPiArwqDCoMKgwqDCoMKgwqB2bV9iby0+b2JqID0gb2JqOwo+ICvCoMKg wqDCoMKgwqDCoGRybV9nZW1fb2JqZWN0X2dldChvYmopOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBr cmVmX2luaXQoJnZtX2JvLT5rcmVmKTsKPiArwqDCoMKgwqDCoMKgwqBJTklUX0xJU1RfSEVBRCgm dm1fYm8tPmxpc3QuZ3B1dmEpOwo+ICvCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9IRUFEKCZ2bV9i by0+bGlzdC5lbnRyeS5nZW0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1fYm87Cj4g K30KPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2JvX2NyZWF0ZSk7Cj4gKwo+ICtzdGF0 aWMgdm9pZAo+ICtkcm1fZ3B1dm1fYm9fZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvID0gY29udGFpbmVyX29m KGtyZWYsIHN0cnVjdAo+IGRybV9ncHV2bV9ibywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGtyZWYpOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0g KmdwdXZtID0gdm1fYm8tPnZtOwo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZ3B1 dm1fb3BzICpvcHMgPSBncHV2bS0+b3BzOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqID0gdm1fYm8tPm9iajsKPiArwqDCoMKgwqDCoMKgwqBib29sIGxvY2sgPSAh ZHJtX2dwdXZtX3Jlc3ZfcHJvdGVjdGVkKGdwdXZtKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFsb2NrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fcmVzdl9h c3NlcnRfaGVsZChncHV2bSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fZ3B1dmFfYXNz ZXJ0X2xvY2tfaGVsZChvYmopOwo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZGVsKCZ2bV9iby0+bGlz dC5lbnRyeS5nZW0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAob3BzICYmIG9wcy0+dm1fYm9f ZnJlZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3BzLT52bV9ib19mcmVlKHZt X2JvKTsKPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGtmcmVlKHZtX2JvKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX3B1dChncHV2 bSk7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBkcm1fZ3B1dm1fYm9fcHV0KCkgLSBkcm9wIGEgc3RydWN0IGRybV9ncHV2bV9i byByZWZlcmVuY2UKPiArICogQHZtX2JvOiB0aGUgJmRybV9ncHV2bV9ibyB0byByZWxlYXNlIHRo ZSByZWZlcmVuY2Ugb2YKPiArICoKPiArICogVGhpcyByZWxlYXNlcyBhIHJlZmVyZW5jZSB0byBA dm1fYm8uCj4gKyAqCj4gKyAqIElmIHRoZSByZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gemVybywg dGhlICZncHV2bV9ibyBpcyBkZXN0cm95ZWQsCj4gd2hpY2gKPiArICogaW5jbHVkZXMgcmVtb3Zp bmcgaXQgZnJvbSB0aGUgR0VNcyBncHV2YSBsaXN0LiBIZW5jZSwgaWYgYSBjYWxsCj4gdG8gdGhp cwo+ICsgKiBmdW5jdGlvbiBjYW4gcG90ZW50aWFsbHkgbGV0IHRoZSByZWZlcmVuY2UgY291bnQg dG8gemVybyB0aGUKPiBjYWxsZXIgbXVzdAo+ICsgKiBob2xkIHRoZSBkbWEtcmVzdiBvciBkcml2 ZXIgc3BlY2lmaWMgR0VNIGdwdXZhIGxvY2suCj4gKyAqLwo+ICt2b2lkCj4gK2RybV9ncHV2bV9i b19wdXQoc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBp ZiAodm1fYm8pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtyZWZfcHV0KCZ2bV9i by0+a3JlZiwgZHJtX2dwdXZtX2JvX2Rlc3Ryb3kpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BM KGRybV9ncHV2bV9ib19wdXQpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZ3B1dm1fYm8gKgo+ ICtfX2RybV9ncHV2bV9ib19maW5kKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmop Cj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiArCj4g K8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKG9iaik7Cj4gK8Kg wqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ibyh2bV9ibywgb2JqKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodm1fYm8tPnZtID09IGdwdXZtKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHZtX2JvOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRy bV9ncHV2bV9ib19maW5kKCkgLSBmaW5kIHRoZSAmZHJtX2dwdXZtX2JvIGZvciB0aGUgZ2l2ZW4K PiArICogJmRybV9ncHV2bSBhbmQgJmRybV9nZW1fb2JqZWN0Cj4gKyAqIEBncHV2bTogVGhlICZk cm1fZ3B1dm0gdGhlIEBvYmogaXMgbWFwcGVkIGluLgo+ICsgKiBAb2JqOiBUaGUgJmRybV9nZW1f b2JqZWN0IGJlaW5nIG1hcHBlZCBpbiB0aGUgQGdwdXZtLgo+ICsgKgo+ICsgKiBGaW5kIHRoZSAm ZHJtX2dwdXZtX2JvIHJlcHJlc2VudGluZyB0aGUgY29tYmluYXRpb24gb2YgdGhlIGdpdmVuCj4g KyAqICZkcm1fZ3B1dm0gYW5kICZkcm1fZ2VtX29iamVjdC4gSWYgZm91bmQsIGluY3JlYXNlcyB0 aGUgcmVmZXJlbmNlCj4gKyAqIGNvdW50IG9mIHRoZSAmZHJtX2dwdXZtX2JvIGFjY29yZGluZ2x5 Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlICZkcm1fZ3B1dm1fYm8gb24g c3VjY2VzcywgTlVMTCBvbgo+IGZhaWx1cmUKPiArICovCj4gK3N0cnVjdCBkcm1fZ3B1dm1fYm8g Kgo+ICtkcm1fZ3B1dm1fYm9fZmluZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g K3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibyA9IF9fZHJtX2dw dXZtX2JvX2ZpbmQoZ3B1dm0sIG9iaik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB2bV9i byA/IGRybV9ncHV2bV9ib19nZXQodm1fYm8pIDogTlVMTDsKPiArfQo+ICtFWFBPUlRfU1lNQk9M X0dQTChkcm1fZ3B1dm1fYm9fZmluZCk7Cj4gKwo+ICsvKioKPiArICogZHJtX2dwdXZtX2JvX29i dGFpbigpIC0gb2J0YWlucyBhbmQgaW5zdGFuY2Ugb2YgdGhlICZkcm1fZ3B1dm1fYm8KPiBmb3Ig dGhlCj4gKyAqIGdpdmVuICZkcm1fZ3B1dm0gYW5kICZkcm1fZ2VtX29iamVjdAo+ICsgKiBAZ3B1 dm06IFRoZSAmZHJtX2dwdXZtIHRoZSBAb2JqIGlzIG1hcHBlZCBpbi4KPiArICogQG9iajogVGhl ICZkcm1fZ2VtX29iamVjdCBiZWluZyBtYXBwZWQgaW4gdGhlIEBncHV2bS4KPiArICoKPiArICog RmluZCB0aGUgJmRybV9ncHV2bV9ibyByZXByZXNlbnRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIHRo ZSBnaXZlbgo+ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmplY3QuIElmIGZvdW5kLCBp bmNyZWFzZXMgdGhlIHJlZmVyZW5jZQo+ICsgKiBjb3VudCBvZiB0aGUgJmRybV9ncHV2bV9ibyBh Y2NvcmRpbmdseS4gSWYgbm90IGZvdW5kLCBhbGxvY2F0ZXMgYQo+IG5ldwo+ICsgKiAmZHJtX2dw dXZtX2JvLgo+ICsgKgo+ICsgKiBBIG5ldyAmZHJtX2dwdXZtX2JvIGlzIGFkZGVkIHRvIHRoZSBH RU1zIGdwdXZhIGxpc3QuCj4gKyAqCj4gKyAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgJmRy bV9ncHV2bV9ibyBvbiBzdWNjZXNzLCBhbiBFUlJfUFRSIG9uCj4gZmFpbHVyZQo+ICsgKi8KPiAr c3RydWN0IGRybV9ncHV2bV9ibyAqCj4gK2RybV9ncHV2bV9ib19vYnRhaW4oc3RydWN0IGRybV9n cHV2bSAqZ3B1dm0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f Z3B1dm1fYm8gKnZtX2JvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2bV9ibyA9IGRybV9ncHV2bV9i b19maW5kKGdwdXZtLCBvYmopOwo+ICvCoMKgwqDCoMKgwqDCoGlmICh2bV9ibykKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHZtX2JvOwo+ICsKPiArwqDCoMKgwqDCoMKg wqB2bV9ibyA9IGRybV9ncHV2bV9ib19jcmVhdGUoZ3B1dm0sIG9iaik7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKCF2bV9ibykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fZ3B1dmFfYXNzZXJ0 X2xvY2tfaGVsZChvYmopOwo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3RhaWwoJnZtX2JvLT5s aXN0LmVudHJ5LmdlbSwgJm9iai0+Z3B1dmEubGlzdCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiB2bV9ibzsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fb2J0YWlu KTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKCkgLSBvYnRh aW5zIGFuZCBpbnN0YW5jZSBvZiB0aGUKPiAmZHJtX2dwdXZtX2JvCj4gKyAqIGZvciB0aGUgZ2l2 ZW4gJmRybV9ncHV2bSBhbmQgJmRybV9nZW1fb2JqZWN0Cj4gKyAqIEBfX3ZtX2JvOiBBIHByZS1h bGxvY2F0ZWQgc3RydWN0IGRybV9ncHV2bV9iby4KPiArICoKPiArICogRmluZCB0aGUgJmRybV9n cHV2bV9ibyByZXByZXNlbnRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBnaXZlbgo+ICsgKiAm ZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmplY3QuIElmIGZvdW5kLCBpbmNyZWFzZXMgdGhlIHJl ZmVyZW5jZQo+ICsgKiBjb3VudCBvZiB0aGUgZm91bmQgJmRybV9ncHV2bV9ibyBhY2NvcmRpbmds eSwgd2hpbGUgdGhlIEBfX3ZtX2JvCj4gcmVmZXJlbmNlCj4gKyAqIGNvdW50IGlzIGRlY3JlYXNl ZC4gSWYgbm90IGZvdW5kIEBfX3ZtX2JvIGlzIHJldHVybmVkIHdpdGhvdXQKPiBmdXJ0aGVyCj4g KyAqIGluY3JlYXNlIG9mIHRoZSByZWZlcmVuY2UgY291bnQuCj4gKyAqCj4gKyAqIEEgbmV3ICZk cm1fZ3B1dm1fYm8gaXMgYWRkZWQgdG8gdGhlIEdFTXMgZ3B1dmEgbGlzdC4KPiArICoKPiArICog UmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBmb3VuZCAmZHJtX2dwdXZtX2JvIG9yIEBfX3ZtX2Jv IGlmIG5vCj4gZXhpc3RpbmcKPiArICogJmRybV9ncHV2bV9ibyB3YXMgZm91bmQKPiArICovCj4g K3N0cnVjdCBkcm1fZ3B1dm1fYm8gKgo+ICtkcm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKHN0 cnVjdCBkcm1fZ3B1dm1fYm8gKl9fdm1fYm8pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2dwdXZtICpncHV2bSA9IF9fdm1fYm8tPnZtOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqID0gX192bV9iby0+b2JqOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2bV9ibyA9IGRybV9n cHV2bV9ib19maW5kKGdwdXZtLCBvYmopOwo+ICvCoMKgwqDCoMKgwqDCoGlmICh2bV9ibykgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KF9fdm1fYm8p Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1fYm87Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2Nr X2hlbGQob2JqKTsKPiArwqDCoMKgwqDCoMKgwqBsaXN0X2FkZF90YWlsKCZfX3ZtX2JvLT5saXN0 LmVudHJ5LmdlbSwgJm9iai0+Z3B1dmEubGlzdCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVy biBfX3ZtX2JvOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2bV9ib19vYnRhaW5f cHJlYWxsb2MpOwo+ICsKPiDCoHN0YXRpYyBpbnQKPiDCoF9fZHJtX2dwdXZhX2luc2VydChzdHJ1 Y3QgZHJtX2dwdXZtICpncHV2bSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9ncHV2YSAqdmEpCj4gQEAgLTkwNCwyNCArMTEyOCwzMyBAQCBFWFBPUlRf U1lNQk9MX0dQTChkcm1fZ3B1dmFfcmVtb3ZlKTsKPiDCoC8qKgo+IMKgICogZHJtX2dwdXZhX2xp bmsoKSAtIGxpbmsgYSAmZHJtX2dwdXZhCj4gwqAgKiBAdmE6IHRoZSAmZHJtX2dwdXZhIHRvIGxp bmsKPiArICogQHZtX2JvOiB0aGUgJmRybV9ncHV2bV9ibyB0byBhZGQgdGhlICZkcm1fZ3B1dmEg dG8KPiDCoCAqCj4gLSAqIFRoaXMgYWRkcyB0aGUgZ2l2ZW4gJnZhIHRvIHRoZSBHUFUgVkEgbGlz dCBvZiB0aGUgJmRybV9nZW1fb2JqZWN0Cj4gaXQgaXMKPiAtICogYXNzb2NpYXRlZCB3aXRoLgo+ ICsgKiBUaGlzIGFkZHMgdGhlIGdpdmVuICZ2YSB0byB0aGUgR1BVIFZBIGxpc3Qgb2YgdGhlICZk cm1fZ3B1dm1fYm8KPiBhbmQgdGhlCj4gKyAqICZkcm1fZ3B1dm1fYm8gdG8gdGhlICZkcm1fZ2Vt X29iamVjdCBpdCBpcyBhc3NvY2lhdGVkIHdpdGguCj4gKyAqCj4gKyAqIEZvciBldmVyeSAmZHJt X2dwdXZhIGVudHJ5IGFkZGVkIHRvIHRoZSAmZHJtX2dwdXZtX2JvIGFuCj4gYWRkaXRpb25hbAo+ ICsgKiByZWZlcmVuY2Ugb2YgdGhlIGxhdHRlciBpcyB0YWtlbi4KPiDCoCAqCj4gwqAgKiBUaGlz IGZ1bmN0aW9uIGV4cGVjdHMgdGhlIGNhbGxlciB0byBwcm90ZWN0IHRoZSBHRU0ncyBHUFVWQSBs aXN0Cj4gYWdhaW5zdAo+IC0gKiBjb25jdXJyZW50IGFjY2VzcyB1c2luZyB0aGUgR0VNcyBkbWFf cmVzdiBsb2NrLgo+ICsgKiBjb25jdXJyZW50IGFjY2VzcyB1c2luZyBlaXRoZXIgdGhlIEdFTXMg ZG1hX3Jlc3YgbG9jayBvciBhIGRyaXZlcgo+IHNwZWNpZmljCj4gKyAqIGxvY2sgc2V0IHRocm91 Z2ggZHJtX2dlbV9ncHV2YV9zZXRfbG9jaygpLgo+IMKgICovCj4gwqB2b2lkCj4gLWRybV9ncHV2 YV9saW5rKHN0cnVjdCBkcm1fZ3B1dmEgKnZhKQo+ICtkcm1fZ3B1dmFfbGluayhzdHJ1Y3QgZHJt X2dwdXZhICp2YSwgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8pCj4gwqB7Cj4gwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdmEtPmdlbS5vYmo7Cj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0gPSB2YS0+dm07Cj4gwqAKPiDCoMKgwqDC oMKgwqDCoMKgaWYgKHVubGlrZWx5KCFvYmopKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRf bG9ja19oZWxkKG9iaik7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX1dBUk5fT04oZ3B1dm0tPmRybSwg b2JqICE9IHZtX2JvLT5vYmopOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgbGlzdF9hZGRfdGFpbCgm dmEtPmdlbS5lbnRyeSwgJm9iai0+Z3B1dmEubGlzdCk7Cj4gK8KgwqDCoMKgwqDCoMKgdmEtPnZt X2JvID0gZHJtX2dwdXZtX2JvX2dldCh2bV9ibyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9n ZW1fZ3B1dmFfYXNzZXJ0X2xvY2tfaGVsZChvYmopOwo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRk X3RhaWwoJnZhLT5nZW0uZW50cnksICZ2bV9iby0+bGlzdC5ncHV2YSk7Cj4gwqB9Cj4gwqBFWFBP UlRfU1lNQk9MX0dQTChkcm1fZ3B1dmFfbGluayk7Cj4gwqAKPiBAQCAtOTMyLDIwICsxMTY1LDMx IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2YV9saW5rKTsKPiDCoCAqIFRoaXMgcmVtb3Zl cyB0aGUgZ2l2ZW4gJnZhIGZyb20gdGhlIEdQVSBWQSBsaXN0IG9mIHRoZQo+ICZkcm1fZ2VtX29i amVjdCBpdCBpcwo+IMKgICogYXNzb2NpYXRlZCB3aXRoLgo+IMKgICoKPiArICogVGhpcyByZW1v dmVzIHRoZSBnaXZlbiAmdmEgZnJvbSB0aGUgR1BVIFZBIGxpc3Qgb2YgdGhlCj4gJmRybV9ncHV2 bV9ibyBhbmQKPiArICogdGhlICZkcm1fZ3B1dm1fYm8gZnJvbSB0aGUgJmRybV9nZW1fb2JqZWN0 IGl0IGlzIGFzc29jaWF0ZWQgd2l0aAo+IGluIGNhc2UKPiArICogdGhpcyBjYWxsIHVubGlua3Mg dGhlIGxhc3QgJmRybV9ncHV2YSBmcm9tIHRoZSAmZHJtX2dwdXZtX2JvLgo+ICsgKgo+ICsgKiBG b3IgZXZlcnkgJmRybV9ncHV2YSBlbnRyeSByZW1vdmVkIGZyb20gdGhlICZkcm1fZ3B1dm1fYm8g YQo+IHJlZmVyZW5jZSBvZgo+ICsgKiB0aGUgbGF0dGVyIGlzIGRyb3BwZWQuCj4gKyAqCj4gwqAg KiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIGNhbGxlciB0byBwcm90ZWN0IHRoZSBHRU0ncyBH UFVWQSBsaXN0Cj4gYWdhaW5zdAo+IC0gKiBjb25jdXJyZW50IGFjY2VzcyB1c2luZyB0aGUgR0VN cyBkbWFfcmVzdiBsb2NrLgo+ICsgKiBjb25jdXJyZW50IGFjY2VzcyB1c2luZyBlaXRoZXIgdGhl IEdFTXMgZG1hX3Jlc3YgbG9jayBvciBhIGRyaXZlcgo+IHNwZWNpZmljCj4gKyAqIGxvY2sgc2V0 IHRocm91Z2ggZHJtX2dlbV9ncHV2YV9zZXRfbG9jaygpLgo+IMKgICovCj4gwqB2b2lkCj4gwqBk cm1fZ3B1dmFfdW5saW5rKHN0cnVjdCBkcm1fZ3B1dmEgKnZhKQo+IMKgewo+IMKgwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZhLT5nZW0ub2JqOwo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvID0gdmEtPnZtX2JvOwo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoGlmICh1bmxpa2VseSghb2JqKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybjsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fz c2VydF9sb2NrX2hlbGQob2JqKTsKPiAtCj4gwqDCoMKgwqDCoMKgwqDCoGxpc3RfZGVsX2luaXQo JnZhLT5nZW0uZW50cnkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2YS0+dm1fYm8gPSBOVUxMOwo+ ICvCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9ib19wdXQodm1fYm8pOwo+IMKgfQo+IMKgRVhQT1JU X1NZTUJPTF9HUEwoZHJtX2dwdXZhX3VubGluayk7Cj4gwqAKPiBAQCAtMTA5MCwxMCArMTMzNCwx MCBAQCBkcm1fZ3B1dmFfcmVtYXAoc3RydWN0IGRybV9ncHV2YSAqcHJldiwKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKm5leHQsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wX3JlbWFwICpvcCkKPiDC oHsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhICpjdXJyID0gb3AtPnVubWFwLT52 YTsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSA9IGN1cnItPnZtOwo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnZhID0gb3AtPnVubWFwLT52YTsKPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSA9IHZhLT52bTsKPiDCoAo+IC3C oMKgwqDCoMKgwqDCoGRybV9ncHV2YV9yZW1vdmUoY3Vycik7Cj4gK8KgwqDCoMKgwqDCoMKgZHJt X2dwdXZhX3JlbW92ZSh2YSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5wcmV2KSB7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfaW5pdF9mcm9tX29w KHByZXYsIG9wLT5wcmV2KTsKPiBAQCAtMTczNSw5ICsxOTc5LDggQEAgZHJtX2dwdXZtX3ByZWZl dGNoX29wc19jcmVhdGUoc3RydWN0IGRybV9ncHV2bQo+ICpncHV2bSwKPiDCoEVYUE9SVF9TWU1C T0xfR1BMKGRybV9ncHV2bV9wcmVmZXRjaF9vcHNfY3JlYXRlKTsKPiDCoAo+IMKgLyoqCj4gLSAq IGRybV9ncHV2bV9nZW1fdW5tYXBfb3BzX2NyZWF0ZSgpIC0gY3JlYXRlcyB0aGUgJmRybV9ncHV2 YV9vcHMgdG8KPiB1bm1hcCBhIEdFTQo+IC0gKiBAZ3B1dm06IHRoZSAmZHJtX2dwdXZtIHJlcHJl c2VudGluZyB0aGUgR1BVIFZBIHNwYWNlCj4gLSAqIEBvYmo6IHRoZSAmZHJtX2dlbV9vYmplY3Qg dG8gdW5tYXAKPiArICogZHJtX2dwdXZtX2JvX3VubWFwX29wc19jcmVhdGUoKSAtIGNyZWF0ZXMg dGhlICZkcm1fZ3B1dmFfb3BzIHRvCj4gdW5tYXAgYSBHRU0KPiArICogQHZtX2JvOiB0aGUgJmRy bV9ncHV2bV9ibyBhYnN0cmFjdGlvbgo+IMKgICoKPiDCoCAqIFRoaXMgZnVuY3Rpb24gY3JlYXRl cyBhIGxpc3Qgb2Ygb3BlcmF0aW9ucyB0byBwZXJmb3JtIHVubWFwcGluZwo+IGZvciBldmVyeQo+ IMKgICogR1BVVkEgYXR0YWNoZWQgdG8gYSBHRU0uCj4gQEAgLTE3NTQsMTUgKzE5OTcsMTQgQEAK PiBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fcHJlZmV0Y2hfb3BzX2NyZWF0ZSk7Cj4gwqAg KiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlICZkcm1fZ3B1dmFfb3BzIG9uIHN1Y2Nlc3MsIGFu IEVSUl9QVFIKPiBvbiBmYWlsdXJlCj4gwqAgKi8KPiDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BzICoK PiAtZHJtX2dwdXZtX2dlbV91bm1hcF9vcHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZt LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICtkcm1fZ3B1dm1fYm9fdW5tYXBf b3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibykKPiDCoHsKPiDCoMKgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcHMgKm9wczsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0 IGRybV9ncHV2YV9vcCAqb3A7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnZh Owo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZHJtX2dl bV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKG9iaik7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9n cHV2YV9hc3NlcnRfbG9ja19oZWxkKHZtX2JvLT5vYmopOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oG9wcyA9IGt6YWxsb2Moc2l6ZW9mKCpvcHMpLCBHRlBfS0VSTkVMKTsKPiDCoMKgwqDCoMKgwqDC oMKgaWYgKCFvcHMpCj4gQEAgLTE3NzAsOCArMjAxMiw4IEBAIGRybV9ncHV2bV9nZW1fdW5tYXBf b3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtCj4gKmdwdXZtLAo+IMKgCj4gwqDCoMKgwqDCoMKg wqDCoElOSVRfTElTVF9IRUFEKCZvcHMtPmxpc3QpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZHJt X2dlbV9mb3JfZWFjaF9ncHV2YSh2YSwgb2JqKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG9wID0gZ3B1dmFfb3BfYWxsb2MoZ3B1dm0pOwo+ICvCoMKgwqDCoMKgwqDCoGRybV9n cHV2bV9ib19mb3JfZWFjaF92YSh2YSwgdm1fYm8pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgb3AgPSBncHV2YV9vcF9hbGxvYyh2bV9iby0+dm0pOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvcCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IC1FTk9NRU07Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJfZnJlZV9vcHM7Cj4gQEAgLTE3 ODUsMTAgKzIwMjcsMTAgQEAgZHJtX2dwdXZtX2dlbV91bm1hcF9vcHNfY3JlYXRlKHN0cnVjdAo+ IGRybV9ncHV2bSAqZ3B1dm0sCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBvcHM7Cj4gwqAKPiDC oGVycl9mcmVlX29wczoKPiAtwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfb3BzX2ZyZWUoZ3B1dm0s IG9wcyk7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX29wc19mcmVlKHZtX2JvLT52bSwgb3Bz KTsKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiDCoH0KPiAtRVhQT1JU X1NZTUJPTF9HUEwoZHJtX2dwdXZtX2dlbV91bm1hcF9vcHNfY3JlYXRlKTsKPiArRVhQT1JUX1NZ TUJPTF9HUEwoZHJtX2dwdXZtX2JvX3VubWFwX29wc19jcmVhdGUpOwo+IMKgCj4gwqAvKioKPiDC oCAqIGRybV9ncHV2YV9vcHNfZnJlZSgpIC0gZnJlZSB0aGUgZ2l2ZW4gJmRybV9ncHV2YV9vcHMK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMKPiBi L2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXZtbS5jCj4gaW5kZXggY2IyZjA2NTY1 YzQ2Li5lZGE3YmI4NjI0ZjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUv bm91dmVhdV91dm1tLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2 bW0uYwo+IEBAIC02Miw2ICs2Miw4IEBAIHN0cnVjdCBiaW5kX2pvYl9vcCB7Cj4gwqDCoMKgwqDC oMKgwqDCoGVudW0gdm1fYmluZF9vcCBvcDsKPiDCoMKgwqDCoMKgwqDCoMKgdTMyIGZsYWdzOwo+ IMKgCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gKwo+IMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dTY0IGFkZHI7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgcmFuZ2U7Cj4g QEAgLTExMDEsMjIgKzExMDMsMjggQEAgYmluZF92YWxpZGF0ZV9yZWdpb24oc3RydWN0IG5vdXZl YXVfam9iICpqb2IpCj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkCj4gLWJpbmRfbGlua19ncHV2 YXMoc3RydWN0IGRybV9ncHV2YV9vcHMgKm9wcywgc3RydWN0Cj4gbm91dmVhdV91dm1hX3ByZWFs bG9jICpuZXcpCj4gK2JpbmRfbGlua19ncHV2YXMoc3RydWN0IGJpbmRfam9iX29wICpib3ApCj4g wqB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5vdXZlYXVfdXZtYV9wcmVhbGxvYyAqbmV3ID0g JmJvcC0+bmV3Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvID0g Ym9wLT52bV9ibzsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3BzID0g Ym9wLT5vcHM7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3AgKm9wOwo+IMKg Cj4gwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9mb3JfZWFjaF9vcChvcCwgb3BzKSB7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKG9wLT5vcCkgewo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBEUk1fR1BVVkFfT1BfTUFQOgo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoJm5l dy0+bWFwLT52YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkcm1fZ3B1dmFfbGluaygmbmV3LT5tYXAtPnZhLCB2bV9ibyk7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQVVZBX09QX1JFTUFQOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIERSTV9HUFVWQV9PUF9SRU1BUDogewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAq dmEgPSBvcC0+cmVtYXAudW5tYXAtPnZhOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAob3AtPnJlbWFwLnByZXYpCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dw dXZhX2xpbmsoJm5ldy0+cHJldi0+dmEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKCZuZXctPnBy ZXYtPnZhLCB2YS0KPiA+dm1fYm8pOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVtYXAubmV4dCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGlu aygmbmV3LT5uZXh0LT52YSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5rKG9wLT5yZW1hcC51bm1hcC0+dmEpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRybV9ncHV2YV9saW5rKCZuZXctPm5leHQtPnZhLCB2YS0KPiA+dm1fYm8pOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayh2 YSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJl YWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQVVZBX09QX1VOTUFQOgo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV91bmxpbmsob3AtPnVu bWFwLnZhKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBicmVhazsKPiBAQCAtMTEzOCwxMCArMTE0NiwxNyBAQCBub3V2ZWF1X3V2bW1fYmluZF9qb2Jf c3VibWl0KHN0cnVjdAo+IG5vdXZlYXVfam9iICpqb2IpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg bGlzdF9mb3JfZWFjaF9vcChvcCwgJmJpbmRfam9iLT5vcHMpIHsKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+b3AgPT0gT1BfTUFQKSB7Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcC0+Z2VtLm9iaiA9IGRybV9nZW1fb2Jq ZWN0X2xvb2t1cChqb2ItCj4gPmZpbGVfcHJpdiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtCj4gPmdlbS5oYW5kbGUpOwo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvcC0+ Z2VtLm9iaikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb3AtPmdlbS5vYmogPQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9n ZW1fb2JqZWN0X2xvb2t1cChqb2ItPmZpbGVfcHJpdiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtCj4gPmdlbS5oYW5kbGUpOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvYmopCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAtRU5PRU5UOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRtYV9yZXN2X2xvY2sob2JqLT5yZXN2LCBOVUxMKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9wLT52bV9ibyA9IGRybV9ncHV2 bV9ib19vYnRhaW4oJnV2bW0tPmJhc2UsCj4gb2JqKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9yZXN2X3VubG9jayhvYmotPnJlc3YpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihv cC0+dm1fYm8pKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKG9wLT52bV9ibyk7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldCA9IGJpbmRfdmFsaWRhdGVfb3Aoam9iLCBvcCk7Cj4gQEAgLTEzNTIsNyArMTM2 Nyw3IEBAIG5vdXZlYXVfdXZtbV9iaW5kX2pvYl9zdWJtaXQoc3RydWN0IG5vdXZlYXVfam9iCj4g KmpvYikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgT1BfVU5NQVBfU1BB UlNFOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBPUF9NQVA6Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE9QX1VOTUFQOgo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYmluZF9saW5rX2dwdXZhcyhvcC0+ b3BzLCAmb3AtPm5ldyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBiaW5kX2xpbmtfZ3B1dmFzKG9wKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRlZmF1bHQ6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYnJlYWs7Cj4gQEAgLTE0OTksNiArMTUxNCwxMiBAQCBub3V2ZWF1X3V2bW1fYmlu ZF9qb2JfZnJlZV93b3JrX2ZuKHN0cnVjdAo+IHdvcmtfc3RydWN0ICp3b3JrKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFJU19FUlJfT1JfTlVMTChvcC0+b3BzKSkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFf b3BzX2ZyZWUoJnV2bW0tPmJhc2UsIG9wLT5vcHMpOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICghSVNfRVJSX09SX05VTEwob3AtPnZtX2JvKSkgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jlc3ZfbG9jayhvYmot PnJlc3YsIE5VTEwpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZHJtX2dwdXZtX2JvX3B1dChvcC0+dm1fYm8pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jlc3ZfdW5sb2NrKG9iai0+cmVzdik7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAob2JqKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRybV9nZW1fb2JqZWN0X3B1dChvYmopOwo+IMKgwqDCoMKgwqDCoMKg wqB9Cj4gQEAgLTE3NTIsMTUgKzE3NzMsMTggQEAgdm9pZAo+IMKgbm91dmVhdV91dm1tX2JvX21h cF9hbGwoc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIHN0cnVjdCBub3V2ZWF1X21lbQo+ICptZW0p Cj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJm52 Ym8tPmJvLmJhc2U7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87 Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnZhOwo+IMKgCj4gwqDCoMKgwqDC oMKgwqDCoGRtYV9yZXN2X2Fzc2VydF9oZWxkKG9iai0+cmVzdik7Cj4gwqAKPiAtwqDCoMKgwqDC oMKgwqBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZhKHZhLCBvYmopIHsKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IG5vdXZlYXVfdXZtYSAqdXZtYSA9IHV2bWFfZnJvbV92YSh2 YSk7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ibyh2bV9ibywgb2Jq KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9ib19mb3JfZWFj aF92YSh2YSwgdm1fYm8pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN0cnVjdCBub3V2ZWF1X3V2bWEgKnV2bWEgPSB1dm1hX2Zyb21fdmEodmEpOwo+ IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vdXZlYXVfdXZtYV9tYXAodXZt YSwgbWVtKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2ludmFs aWRhdGUodmEsIGZhbHNlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG5vdXZlYXVfdXZtYV9tYXAodXZtYSwgbWVtKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9pbnZhbGlkYXRlKHZhLCBm YWxzZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDC oMKgfQo+IMKgfQo+IMKgCj4gQEAgLTE3NjgsMTUgKzE3OTIsMTggQEAgdm9pZAo+IMKgbm91dmVh dV91dm1tX2JvX3VubWFwX2FsbChzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibykKPiDCoHsKPiDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmbnZiby0+Ym8uYmFzZTsK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiDCoMKgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmE7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jl c3ZfYXNzZXJ0X2hlbGQob2JqLT5yZXN2KTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGRybV9nZW1f Zm9yX2VhY2hfZ3B1dmEodmEsIG9iaikgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3Qgbm91dmVhdV91dm1hICp1dm1hID0gdXZtYV9mcm9tX3ZhKHZhKTsKPiArwqDCoMKg wqDCoMKgwqBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvKHZtX2JvLCBvYmopIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX2Zvcl9lYWNoX3ZhKHZhLCB2bV9i bykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IG5vdXZlYXVfdXZtYSAqdXZtYSA9IHV2bWFfZnJvbV92YSh2YSk7Cj4gwqAKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm91dmVhdV91dm1hX3VubWFwKHV2bWEpOwo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfaW52YWxpZGF0ZSh2YSwgdHJ1ZSk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBub3V2ZWF1 X3V2bWFfdW5tYXAodXZtYSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkcm1fZ3B1dmFfaW52YWxpZGF0ZSh2YSwgdHJ1ZSk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgfQo+IMKgCj4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW0uaCBiL2luY2x1ZGUvZHJtL2RybV9nZW0uaAo+ IGluZGV4IDE2MzY0NDg3ZmRlOS4uMzY5NTA1NDQ3YWNkIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUv ZHJtL2RybV9nZW0uaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW0uaAo+IEBAIC01ODAsNyAr NTgwLDcgQEAgaW50IGRybV9nZW1fZXZpY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ IMKgICogZHJtX2dlbV9ncHV2YV9pbml0KCkgLSBpbml0aWFsaXplIHRoZSBncHV2YSBsaXN0IG9m IGEgR0VNIG9iamVjdAo+IMKgICogQG9iajogdGhlICZkcm1fZ2VtX29iamVjdAo+IMKgICoKPiAt ICogVGhpcyBpbml0aWFsaXplcyB0aGUgJmRybV9nZW1fb2JqZWN0J3MgJmRybV9ncHV2YSBsaXN0 Lgo+ICsgKiBUaGlzIGluaXRpYWxpemVzIHRoZSAmZHJtX2dlbV9vYmplY3QncyAmZHJtX2dwdXZt X2JvIGxpc3QuCj4gwqAgKgo+IMKgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVj ZXNzYXJ5IGZvciBkcml2ZXJzIGludGVuZGluZyB0bwo+IHN1cHBvcnQgdGhlCj4gwqAgKiAmZHJt X2RyaXZlcl9mZWF0dXJlIERSSVZFUl9HRU1fR1BVVkEuCj4gQEAgLTU5MywyOCArNTkzLDI4IEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZ2VtX2dwdXZhX2luaXQoc3RydWN0Cj4gZHJtX2dlbV9v YmplY3QgKm9iaikKPiDCoH0KPiDCoAo+IMKgLyoqCj4gLSAqIGRybV9nZW1fZm9yX2VhY2hfZ3B1 dmEoKSAtIGl0ZXJuYXRvciB0byB3YWxrIG92ZXIgYSBsaXN0IG9mCj4gZ3B1dmFzCj4gLSAqIEBl bnRyeV9fOiAmZHJtX2dwdXZhIHN0cnVjdHVyZSB0byBhc3NpZ24gdG8gaW4gZWFjaCBpdGVyYXRp b24KPiBzdGVwCj4gLSAqIEBvYmpfXzogdGhlICZkcm1fZ2VtX29iamVjdCB0aGUgJmRybV9ncHV2 YXMgdG8gd2FsayBhcmUKPiBhc3NvY2lhdGVkIHdpdGgKPiArICogZHJtX2dlbV9mb3JfZWFjaF9n cHV2bV9ibygpIC0gaXRlcmF0b3IgdG8gd2FsayBvdmVyIGEgbGlzdCBvZgo+ICZkcm1fZ3B1dm1f Ym8KPiArICogQGVudHJ5X186ICZkcm1fZ3B1dm1fYm8gc3RydWN0dXJlIHRvIGFzc2lnbiB0byBp biBlYWNoIGl0ZXJhdGlvbgo+IHN0ZXAKPiArICogQG9ial9fOiB0aGUgJmRybV9nZW1fb2JqZWN0 IHRoZSAmZHJtX2dwdXZtX2JvIHRvIHdhbGsgYXJlCj4gYXNzb2NpYXRlZCB3aXRoCj4gwqAgKgo+ IC0gKiBUaGlzIGl0ZXJhdG9yIHdhbGtzIG92ZXIgYWxsICZkcm1fZ3B1dmEgc3RydWN0dXJlcyBh c3NvY2lhdGVkCj4gd2l0aCB0aGUKPiAtICogJmRybV9ncHV2YV9tYW5hZ2VyLgo+ICsgKiBUaGlz IGl0ZXJhdG9yIHdhbGtzIG92ZXIgYWxsICZkcm1fZ3B1dm1fYm8gc3RydWN0dXJlcyBhc3NvY2lh dGVkCj4gd2l0aCB0aGUKPiArICogJmRybV9nZW1fb2JqZWN0Lgo+IMKgICovCj4gLSNkZWZpbmUg ZHJtX2dlbV9mb3JfZWFjaF9ncHV2YShlbnRyeV9fLCBvYmpfXykgXAo+IC3CoMKgwqDCoMKgwqDC oGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnlfXywgJihvYmpfXyktPmdwdXZhLmxpc3QsIGdlbS5l bnRyeSkKPiArI2RlZmluZSBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvKGVudHJ5X18sIG9ial9f KSBcCj4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeV9fLCAmKG9ial9f KS0+Z3B1dmEubGlzdCwKPiBsaXN0LmVudHJ5LmdlbSkKPiDCoAo+IMKgLyoqCj4gLSAqIGRybV9n ZW1fZm9yX2VhY2hfZ3B1dmFfc2FmZSgpIC0gaXRlcm5hdG9yIHRvIHNhZmVseSB3YWxrIG92ZXIg YQo+IGxpc3Qgb2YKPiAtICogZ3B1dmFzCj4gLSAqIEBlbnRyeV9fOiAmZHJtX2dwdXZhIHN0cnVj dHVyZSB0byBhc3NpZ24gdG8gaW4gZWFjaCBpdGVyYXRpb24KPiBzdGVwCj4gLSAqIEBuZXh0X186 ICZuZXh0ICZkcm1fZ3B1dmEgdG8gc3RvcmUgdGhlIG5leHQgc3RlcAo+IC0gKiBAb2JqX186IHRo ZSAmZHJtX2dlbV9vYmplY3QgdGhlICZkcm1fZ3B1dmFzIHRvIHdhbGsgYXJlCj4gYXNzb2NpYXRl ZCB3aXRoCj4gKyAqIGRybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm9fc2FmZSgpIC0gaXRlcmF0b3Ig dG8gc2FmZWx5IHdhbGsgb3ZlciBhCj4gbGlzdCBvZgo+ICsgKiAmZHJtX2dwdXZtX2JvCj4gKyAq IEBlbnRyeV9fOiAmZHJtX2dwdXZtX2Jvc3RydWN0dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNoIGl0 ZXJhdGlvbgo+IHN0ZXAKPiArICogQG5leHRfXzogJm5leHQgJmRybV9ncHV2bV9ibyB0byBzdG9y ZSB0aGUgbmV4dCBzdGVwCj4gKyAqIEBvYmpfXzogdGhlICZkcm1fZ2VtX29iamVjdCB0aGUgJmRy bV9ncHV2bV9ibyB0byB3YWxrIGFyZQo+IGFzc29jaWF0ZWQgd2l0aAo+IMKgICoKPiAtICogVGhp cyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAmZHJtX2dwdXZhIHN0cnVjdHVyZXMgYXNzb2NpYXRl ZAo+IHdpdGggdGhlCj4gKyAqIFRoaXMgaXRlcmF0b3Igd2Fsa3Mgb3ZlciBhbGwgJmRybV9ncHV2 bV9ibyBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQKPiB3aXRoIHRoZQo+IMKgICogJmRybV9nZW1fb2Jq ZWN0LiBJdCBpcyBpbXBsZW1lbnRlZCB3aXRoCj4gbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCks IGhlbmNlCj4gwqAgKiBpdCBpcyBzYXZlIGFnYWluc3QgcmVtb3ZhbCBvZiBlbGVtZW50cy4KPiDC oCAqLwo+IC0jZGVmaW5lIGRybV9nZW1fZm9yX2VhY2hfZ3B1dmFfc2FmZShlbnRyeV9fLCBuZXh0 X18sIG9ial9fKSBcCj4gLcKgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVu dHJ5X18sIG5leHRfXywgJihvYmpfXyktCj4gPmdwdXZhLmxpc3QsIGdlbS5lbnRyeSkKPiArI2Rl ZmluZSBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvX3NhZmUoZW50cnlfXywgbmV4dF9fLCBvYmpf XykgXAo+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeV9fLCBu ZXh0X18sICYob2JqX18pLQo+ID5ncHV2YS5saXN0LCBsaXN0LmVudHJ5LmdlbSkKPiDCoAo+IMKg I2VuZGlmIC8qIF9fRFJNX0dFTV9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJt X2dwdXZtLmggYi9pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaAo+IGluZGV4IDRlNmUxZmQzNDg1YS4u YjEyZmIyMmIwZTIyIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9ncHV2bS5oCj4gKysr IGIvaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmgKPiBAQCAtMjUsNiArMjUsNyBAQAo+IMKgICogT1RI RVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+IMKgICovCj4gwqAKPiArI2luY2x1ZGUgPGxp bnV4L2RtYS1yZXN2Lmg+Cj4gwqAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+IMKgI2luY2x1ZGUg PGxpbnV4L3JidHJlZS5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gQEAgLTMzLDYg KzM0LDcgQEAKPiDCoCNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+IMKgCj4gwqBzdHJ1Y3QgZHJt X2dwdXZtOwo+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvOwo+IMKgc3RydWN0IGRybV9ncHV2bV9vcHM7 Cj4gwqAKPiDCoC8qKgo+IEBAIC03Myw2ICs3NSwxMiBAQCBzdHJ1Y3QgZHJtX2dwdXZhIHsKPiDC oMKgwqDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm0gKnZt Owo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQHZtX2JvOiB0 aGUgJmRybV9ncHV2bV9ibyBhYnN0cmFjdGlvbiBmb3IgdGhlIG1hcHBlZAo+ICvCoMKgwqDCoMKg wqDCoCAqICZkcm1fZ2VtX29iamVjdAo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgLyoq Cj4gwqDCoMKgwqDCoMKgwqDCoCAqIEBmbGFnczogdGhlICZkcm1fZ3B1dmFfZmxhZ3MgZm9yIHRo aXMgbWFwcGluZwo+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiBAQCAtMTA4LDcgKzExNiw3IEBAIHN0 cnVjdCBkcm1fZ3B1dmEgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC8qKgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBAZW50cnk6IHRoZSAm bGlzdF9oZWFkIHRvIGF0dGFjaCB0aGlzIG9iamVjdCB0byBhCj4gJmRybV9nZW1fb2JqZWN0Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBlbnRyeTogdGhlICZsaXN0X2hlYWQg dG8gYXR0YWNoIHRoaXMgb2JqZWN0IHRvIGEKPiAmZHJtX2dwdXZtX2JvCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0gZ2VtOwo+IEBAIC0x NDEsNyArMTQ5LDcgQEAgc3RydWN0IGRybV9ncHV2YSB7Cj4gwqBpbnQgZHJtX2dwdXZhX2luc2Vy dChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwgc3RydWN0IGRybV9ncHV2YSAqdmEpOwo+IMKgdm9p ZCBkcm1fZ3B1dmFfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1dmEgKnZhKTsKPiDCoAo+IC12b2lkIGRy bV9ncHV2YV9saW5rKHN0cnVjdCBkcm1fZ3B1dmEgKnZhKTsKPiArdm9pZCBkcm1fZ3B1dmFfbGlu ayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSwgc3RydWN0IGRybV9ncHV2bV9ibwo+ICp2bV9ibyk7Cj4g wqB2b2lkIGRybV9ncHV2YV91bmxpbmsoc3RydWN0IGRybV9ncHV2YSAqdmEpOwo+IMKgCj4gwqBz dHJ1Y3QgZHJtX2dwdXZhICpkcm1fZ3B1dmFfZmluZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwK PiBAQCAtMTg4LDEwICsxOTYsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGRybV9ncHV2YV9pbnZh bGlkYXRlZChzdHJ1Y3QKPiBkcm1fZ3B1dmEgKnZhKQo+IMKgICogZW51bSBkcm1fZ3B1dm1fZmxh Z3MgLSBmbGFncyBmb3Igc3RydWN0IGRybV9ncHV2bQo+IMKgICovCj4gwqBlbnVtIGRybV9ncHV2 bV9mbGFncyB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQERSTV9H UFVWTV9SRVNWX1BST1RFQ1RFRDogR1BVVk0gaXMgcHJvdGVjdGVkIGV4dGVybmFsbHkKPiBieSB0 aGUKPiArwqDCoMKgwqDCoMKgwqAgKiBHUFVWTSdzICZkbWFfcmVzdiBsb2NrCj4gK8KgwqDCoMKg wqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0dQVVZNX1JFU1ZfUFJPVEVDVEVEID0gQklU KDApLAo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gwqDCoMKgwqDCoMKgwqDCoCAqIEBEUk1f R1BVVk1fVVNFUkJJVFM6IHVzZXIgZGVmaW5lZCBiaXRzCj4gwqDCoMKgwqDCoMKgwqDCoCAqLwo+ IC3CoMKgwqDCoMKgwqDCoERSTV9HUFVWTV9VU0VSQklUUyA9IEJJVCgwKSwKPiArwqDCoMKgwqDC oMKgwqBEUk1fR1BVVk1fVVNFUkJJVFMgPSBCSVQoMSksCj4gwqB9Owo+IMKgCj4gwqAvKioKPiBA QCAtMzAyLDYgKzMxNiwxOSBAQCBib29sIGRybV9ncHV2bV9pbnRlcnZhbF9lbXB0eShzdHJ1Y3Qg ZHJtX2dwdXZtCj4gKmdwdXZtLCB1NjQgYWRkciwgdTY0IHJhbmdlKTsKPiDCoHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqCj4gwqBkcm1fZ3B1dm1fcmVzdl9vYmplY3RfYWxsb2Moc3RydWN0IGRybV9k ZXZpY2UgKmRybSk7Cj4gwqAKPiArLyoqCj4gKyAqIGRybV9ncHV2bV9yZXN2X3Byb3RlY3RlZCgp IC0gaW5kaWNhdGVzIHdoZXRoZXIKPiAmRFJNX0dQVVZNX1JFU1ZfUFJPVEVDVEVEIGlzCj4gKyAq IHNldAo+ICsgKiBAZ3B1dm06IHRoZSAmZHJtX2dwdXZtCj4gKyAqCj4gKyAqIFJldHVybnM6IHRy dWUgaWYgJkRSTV9HUFVWTV9SRVNWX1BST1RFQ1RFRCBpcyBzZXQsIGZhbHNlCj4gb3RoZXJ3aXNl Lgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBib29sCj4gK2RybV9ncHV2bV9yZXN2X3Byb3RlY3Rl ZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBn cHV2bS0+ZmxhZ3MgJiBEUk1fR1BVVk1fUkVTVl9QUk9URUNURUQ7Cj4gK30KPiArCj4gwqAvKioK PiDCoCAqIGRybV9ncHV2bV9yZXN2KCkgLSByZXR1cm5zIHRoZSAmZHJtX2dwdXZtJ3MgJmRtYV9y ZXN2Cj4gwqAgKiBAZ3B1dm1fXzogdGhlICZkcm1fZ3B1dm0KPiBAQCAtMzIwLDYgKzM0NywxMiBA QCBkcm1fZ3B1dm1fcmVzdl9vYmplY3RfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UKPiAqZHJtKTsK PiDCoCAqLwo+IMKgI2RlZmluZSBkcm1fZ3B1dm1fcmVzdl9vYmooZ3B1dm1fXykgKChncHV2bV9f KS0+cl9vYmopCj4gwqAKPiArI2RlZmluZSBkcm1fZ3B1dm1fcmVzdl9oZWxkKGdwdXZtX18pIFwK PiArwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9oZWxkKGRybV9ncHV2bV9yZXN2KGdwdXZtX18pKQo+ ICsKPiArI2RlZmluZSBkcm1fZ3B1dm1fcmVzdl9hc3NlcnRfaGVsZChncHV2bV9fKSBcCj4gK8Kg wqDCoMKgwqDCoMKgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZHJtX2dwdXZtX3Jlc3YoZ3B1dm1fXykp Cj4gKwo+IMKgI2RlZmluZSBkcm1fZ3B1dm1fcmVzdl9oZWxkKGdwdXZtX18pIFwKPiDCoMKgwqDC oMKgwqDCoMKgZG1hX3Jlc3ZfaGVsZChkcm1fZ3B1dm1fcmVzdihncHV2bV9fKSkKPiDCoAo+IEBA IC00MDQsNiArNDM3LDEyNSBAQCBfX2RybV9ncHV2YV9uZXh0KHN0cnVjdCBkcm1fZ3B1dmEgKnZh KQo+IMKgI2RlZmluZSBkcm1fZ3B1dm1fZm9yX2VhY2hfdmFfc2FmZSh2YV9fLCBuZXh0X18sIGdw dXZtX18pIFwKPiDCoMKgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZhX18s IG5leHRfXywgJihncHV2bV9fKS0+cmIubGlzdCwKPiByYi5lbnRyeSkKPiDCoAo+ICsvKioKPiAr ICogc3RydWN0IGRybV9ncHV2bV9ibyAtIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSAmZHJtX2dw dXZtIGFuZAo+ICsgKiAmZHJtX2dlbV9vYmplY3QgY29tYmluYXRpb24KPiArICoKPiArICogVGhp cyBzdHJ1Y3R1cmUgaXMgYW4gYWJzdHJhY3Rpb24gcmVwcmVzZW50aW5nIGEgJmRybV9ncHV2bSBh bmQKPiArICogJmRybV9nZW1fb2JqZWN0IGNvbWJpbmF0aW9uLiBJdCBzZXJ2ZXMgYXMgYW4gaW5k aXJlY3Rpb24gdG8KPiBhY2NlbGVyYXRlCj4gKyAqIGl0ZXJhdGluZyBhbGwgJmRybV9ncHV2YXMg d2l0aGluIGEgJmRybV9ncHV2bSBiYWNrZWQgYnkgdGhlIHNhbWUKPiArICogJmRybV9nZW1fb2Jq ZWN0Lgo+ICsgKgo+ICsgKiBGdXJ0aGVybW9yZSBpdCBpcyB1c2VkIGNhY2hlIGV2aWN0ZWQgR0VN IG9iamVjdHMgZm9yIGEgY2VydGFpbgo+IEdQVS1WTSB0bwo+ICsgKiBhY2NlbGVyYXRlIHZhbGlk YXRpb24uCj4gKyAqCj4gKyAqIFR5cGljYWxseSwgZHJpdmVycyB3YW50IHRvIGNyZWF0ZSBhbiBp bnN0YW5jZSBvZiBhIHN0cnVjdAo+IGRybV9ncHV2bV9ibyBvbmNlCj4gKyAqIGEgR0VNIG9iamVj dCBpcyBtYXBwZWQgZmlyc3QgaW4gYSBHUFUtVk0gYW5kIHJlbGVhc2UgdGhlIGluc3RhbmNlCj4g b25jZSB0aGUKPiArICogbGFzdCBtYXBwaW5nIG9mIHRoZSBHRU0gb2JqZWN0IGluIHRoaXMgR1BV LVZNIGlzIHVubWFwcGVkLgo+ICsgKi8KPiArc3RydWN0IGRybV9ncHV2bV9ibyB7Cj4gK8KgwqDC oMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQHZtOiBUaGUgJmRybV9ncHV2bSB0aGUg QG9iaiBpcyBtYXBwZWQgaW4uIFRoaXMgaXMgYQo+IHJlZmVyZW5jZQo+ICvCoMKgwqDCoMKgwqDC oCAqIGNvdW50ZWQgcG9pbnRlci4KPiArwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2dwdXZtICp2bTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDC oMKgwqDCoMKgICogQG9iajogVGhlICZkcm1fZ2VtX29iamVjdCBiZWluZyBtYXBwZWQgaW4gQHZt LiBUaGlzIGlzIGEKPiByZWZlcmVuY2UKPiArwqDCoMKgwqDCoMKgwqAgKiBjb3VudGVkIHBvaW50 ZXIuCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmo7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAq IEBrcmVmOiBUaGUgcmVmZXJlbmNlIGNvdW50IGZvciB0aGlzICZkcm1fZ3B1dm1fYm8uCj4gK8Kg wqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGtyZWYga3JlZjsKPiArCj4g K8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQGxpc3Q6IFN0cnVjdHVyZSBj b250YWluaW5nIGFsbCAmbGlzdF9oZWFkcy4KPiArwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3Qgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKioKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGdwdXZhOiBUaGUgbGlzdCBvZiBsaW5r ZWQgJmRybV9ncHV2YXMuCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEl0IGlzIHNhZmUgdG8gYWNjZXNzIGVudHJp ZXMgZnJvbSB0aGlzIGxpc3QgYXMKPiBsb25nIGFzIHRoZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKiBHRU0ncyBncHV2YSBsb2NrIGlzIGhlbGQuIFNlZSBhbHNvIHN0cnVjdAo+ IGRybV9nZW1fb2JqZWN0Lgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGxpc3RfaGVhZCBncHV2YTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBAZW50cnk6IFN0cnVjdHVyZSBjb250YWluaW5nIGFsbCAmbGlzdF9o ZWFkcwo+IHNlcnZpbmcgYXMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZW50 cnkuCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBAZ2VtOiBMaXN0IGVudHJ5IHRvIGF0dGFjaCB0byB0aGUKPiAmZHJt X2dlbV9vYmplY3RzCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBncHV2YSBsaXN0Lgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIGdlbTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfSBlbnRyeTsKPiArwqDCoMKgwqDCoMKgwqB9IGxpc3Q7Cj4gK307Cj4gKwo+ICtzdHJ1 Y3QgZHJtX2dwdXZtX2JvICoKPiArZHJtX2dwdXZtX2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZt ICpncHV2bSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKPiArCj4gK3N0cnVjdCBkcm1fZ3B1dm1fYm8gKgo+ICtkcm1f Z3B1dm1fYm9fb2J0YWluKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICtz dHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiArZHJtX2dwdXZtX2JvX29idGFpbl9wcmVhbGxvYyhzdHJ1 Y3QgZHJtX2dwdXZtX2JvICp2bV9ibyk7Cj4gKwo+ICsvKioKPiArICogZHJtX2dwdXZtX2JvX2dl dCgpIC0gYWNxdWlyZSBhIHN0cnVjdCBkcm1fZ3B1dm1fYm8gcmVmZXJlbmNlCj4gKyAqIEB2bV9i bzogdGhlICZkcm1fZ3B1dm1fYm8gdG8gYWNxdWlyZSB0aGUgcmVmZXJlbmNlIG9mCj4gKyAqCj4g KyAqIFRoaXMgZnVuY3Rpb24gYWNxdWlyZXMgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gQHZt X2JvLiBJdCBpcwo+IGlsbGVnYWwgdG8KPiArICogY2FsbCB0aGlzIHdpdGhvdXQgYWxyZWFkeSBo b2xkaW5nIGEgcmVmZXJlbmNlLiBObyBsb2NrcyByZXF1aXJlZC4KPiArICovCj4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IGRybV9ncHV2bV9ibyAqCj4gK2RybV9ncHV2bV9ib19nZXQoc3RydWN0IGRy bV9ncHV2bV9ibyAqdm1fYm8pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBrcmVmX2dldCgmdm1fYm8t PmtyZWYpOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB2bV9ibzsKPiArfQo+ICsKPiArdm9pZCBk cm1fZ3B1dm1fYm9fcHV0KHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvKTsKPiArCj4gK3N0cnVj dCBkcm1fZ3B1dm1fYm8gKgo+ICtkcm1fZ3B1dm1fYm9fZmluZChzdHJ1Y3QgZHJtX2dwdXZtICpn cHV2bSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopOwo+ICsKPiArLyoqCj4gKyAqIGRybV9ncHV2bV9ib19mb3JfZWFjaF92YSgp IC0gaXRlcmF0b3IgdG8gd2FsayBvdmVyIGEgbGlzdCBvZgo+ICZkcm1fZ3B1dmEKPiArICogQHZh X186ICZkcm1fZ3B1dmEgc3RydWN0dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNoIGl0ZXJhdGlvbiBz dGVwCj4gKyAqIEB2bV9ib19fOiB0aGUgJmRybV9ncHV2bV9ibyB0aGUgJmRybV9ncHV2YSB0byB3 YWxrIGFyZSBhc3NvY2lhdGVkCj4gd2l0aAo+ICsgKgo+ICsgKiBUaGlzIGl0ZXJhdG9yIHdhbGtz IG92ZXIgYWxsICZkcm1fZ3B1dmEgc3RydWN0dXJlcyBhc3NvY2lhdGVkCj4gd2l0aCB0aGUKPiAr ICogJmRybV9ncHV2bV9iby4KPiArICoKPiArICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIEdF TSdzIGdwdXZhIGxvY2suCj4gKyAqLwo+ICsjZGVmaW5lIGRybV9ncHV2bV9ib19mb3JfZWFjaF92 YSh2YV9fLCB2bV9ib19fKSBcCj4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeSh2 YV9fLCAmKHZtX2JvKS0+bGlzdC5ncHV2YSwgZ2VtLmVudHJ5KQo+ICsKPiArLyoqCj4gKyAqIGRy bV9ncHV2bV9ib19mb3JfZWFjaF92YV9zYWZlKCkgLSBpdGVyYXRvciB0byBzYWZlbHkgd2FsayBv dmVyIGEKPiBsaXN0IG9mCj4gKyAqICZkcm1fZ3B1dmEKPiArICogQHZhX186ICZkcm1fZ3B1dmEg c3RydWN0dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNoIGl0ZXJhdGlvbiBzdGVwCj4gKyAqIEBuZXh0 X186ICZuZXh0ICZkcm1fZ3B1dmEgdG8gc3RvcmUgdGhlIG5leHQgc3RlcAo+ICsgKiBAdm1fYm9f XzogdGhlICZkcm1fZ3B1dm1fYm8gdGhlICZkcm1fZ3B1dmEgdG8gd2FsayBhcmUgYXNzb2NpYXRl ZAo+IHdpdGgKPiArICoKPiArICogVGhpcyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAmZHJtX2dw dXZhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZAo+IHdpdGggdGhlCj4gKyAqICZkcm1fZ3B1dm1fYm8u IEl0IGlzIGltcGxlbWVudGVkIHdpdGggbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCksCj4gaGVu Y2UKPiArICogaXQgaXMgc2F2ZSBhZ2FpbnN0IHJlbW92YWwgb2YgZWxlbWVudHMuCj4gKyAqCj4g KyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBHRU0ncyBncHV2YSBsb2NrLgo+ICsgKi8KPiAr I2RlZmluZSBkcm1fZ3B1dm1fYm9fZm9yX2VhY2hfdmFfc2FmZSh2YV9fLCBuZXh0X18sIHZtX2Jv X18pIFwKPiArwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmFfXywgbmV4 dF9fLCAmKHZtX2JvKS0+bGlzdC5ncHV2YSwKPiBnZW0uZW50cnkpCj4gKwo+IMKgLyoqCj4gwqAg KiBlbnVtIGRybV9ncHV2YV9vcF90eXBlIC0gR1BVIFZBIG9wZXJhdGlvbiB0eXBlCj4gwqAgKgo+ IEBAIC02NzMsOCArODI1LDcgQEAgZHJtX2dwdXZtX3ByZWZldGNoX29wc19jcmVhdGUoc3RydWN0 IGRybV9ncHV2bQo+ICpncHV2bSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBhZGRyLCB1NjQgcmFuZ2UpOwo+IMKg Cj4gwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqCj4gLWRybV9ncHV2bV9nZW1fdW5tYXBfb3BzX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7Cj4gK2RybV9ncHV2bV9ib191bm1hcF9vcHNfY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm1f Ym8gKnZtX2JvKTsKPiDCoAo+IMKgdm9pZCBkcm1fZ3B1dmFfb3BzX2ZyZWUoc3RydWN0IGRybV9n cHV2bSAqZ3B1dm0sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcHMgKm9wcyk7Cj4gQEAgLTcyNiw2ICs4NzcsMzAgQEAg c3RydWN0IGRybV9ncHV2bV9vcHMgewo+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiDCoMKgwqDCoMKg wqDCoMKgdm9pZCAoKm9wX2ZyZWUpKHN0cnVjdCBkcm1fZ3B1dmFfb3AgKm9wKTsKPiDCoAo+ICvC oMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEB2bV9ib19hbGxvYzogY2FsbGVk IHdoZW4gdGhlICZkcm1fZ3B1dm0gYWxsb2NhdGVzCj4gK8KgwqDCoMKgwqDCoMKgICogYSBzdHJ1 Y3QgZHJtX2dwdXZtX2JvCj4gK8KgwqDCoMKgwqDCoMKgICoKPiArwqDCoMKgwqDCoMKgwqAgKiBT b21lIGRyaXZlcnMgbWF5IHdhbnQgdG8gZW1iZWQgc3RydWN0IGRybV9ncHV2bV9ibyBpbnRvCj4g ZHJpdmVyCj4gK8KgwqDCoMKgwqDCoMKgICogc3BlY2lmaWMgc3RydWN0dXJlcy4gQnkgaW1wbGVt ZW50aW5nIHRoaXMgY2FsbGJhY2sgZHJpdmVycwo+IGNhbgo+ICvCoMKgwqDCoMKgwqDCoCAqIGFs bG9jYXRlIG1lbW9yeSBhY2NvcmRpbmdseS4KPiArwqDCoMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDC oMKgwqDCoCAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuCj4gK8KgwqDCoMKgwqDCoMKgICov Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9ibyAqKCp2bV9ib19hbGxvYykodm9p ZCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEB2bV9ib19m cmVlOiBjYWxsZWQgd2hlbiB0aGUgJmRybV9ncHV2bSBmcmVlcyBhCj4gK8KgwqDCoMKgwqDCoMKg ICogc3RydWN0IGRybV9ncHV2bV9ibwo+ICvCoMKgwqDCoMKgwqDCoCAqCj4gK8KgwqDCoMKgwqDC oMKgICogU29tZSBkcml2ZXJzIG1heSB3YW50IHRvIGVtYmVkIHN0cnVjdCBkcm1fZ3B1dm1fYm8g aW50bwo+IGRyaXZlcgo+ICvCoMKgwqDCoMKgwqDCoCAqIHNwZWNpZmljIHN0cnVjdHVyZXMuIEJ5 IGltcGxlbWVudGluZyB0aGlzIGNhbGxiYWNrIGRyaXZlcnMKPiBjYW4KPiArwqDCoMKgwqDCoMKg wqAgKiBmcmVlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgYWNjb3JkaW5nbHkuCj4g K8KgwqDCoMKgwqDCoMKgICoKPiArwqDCoMKgwqDCoMKgwqAgKiBUaGlzIGNhbGxiYWNrIGlzIG9w dGlvbmFsLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoHZvaWQgKCp2bV9i b19mcmVlKShzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibyk7Cj4gKwo+IMKgwqDCoMKgwqDCoMKg wqAvKioKPiDCoMKgwqDCoMKgwqDCoMKgICogQHNtX3N0ZXBfbWFwOiBjYWxsZWQgZnJvbSAmZHJt X2dwdXZtX3NtX21hcCB0byBmaW5hbGx5Cj4gaW5zZXJ0IHRoZQo+IMKgwqDCoMKgwqDCoMKgwqAg KiBtYXBwaW5nIG9uY2UgYWxsIHByZXZpb3VzIHN0ZXBzIHdlcmUgY29tcGxldGVkCgo=