From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E6E51304A3 for ; Tue, 18 Jun 2024 08:14:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718698496; cv=none; b=ppFWZWPdws99+m/nwdL6BjxJ4wUBZuwAdOaq/TjwII0xpkykg1lBbyuMxShuu5VWOv9lczqcKmiRCb12PFcJLy7Q23PHPLvIjkEZDnQWgCr/9tN5f0fo2pzvFewzSmeL6R+1LHsjzPLxqNTiYK53ytXb/hpGSsv2XZBphC+3vs8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718698496; c=relaxed/simple; bh=x2XaVAC8IE56GAxplFORJQRkpcE/+9zf73VCWoglwI0=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=myBlHBcPn+wTMqP+LmDlGaxUOXeNXjrdnv3pzYsFSUnATAiEL02GYfKy5aSLWS43nC+TsnR3fy/LaiXah1dGs7hm0Y1ACf0MR2+dvn6MCbUvv5UxgHpuBpM9+iH835PKxxA3JlYwj8MqGLwgh8wEkVVbPGg4XjDOICs+jVGTFZw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=LzB1eh0l; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="LzB1eh0l" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718698492; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x2XaVAC8IE56GAxplFORJQRkpcE/+9zf73VCWoglwI0=; b=LzB1eh0lUV6C6iZJpIfxevd140/Zwx6+xFPzTY3WoZWuq8xDOAcr/fmd/h5NXdyq24hihR RmK51EeRSgDswwMkX5/gNqmrL7kRLF43EN6nwBsI+OHi+L+h44c+Kg2BZLxQRfVTxMGx/d FD1mY0vzB3cdFOdHvyymqcKGFeDtjh4= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-321-hnBmYMjaPZCA2f-zLthexg-1; Tue, 18 Jun 2024 04:14:50 -0400 X-MC-Unique: hnBmYMjaPZCA2f-zLthexg-1 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4218118d1efso7980855e9.2 for ; Tue, 18 Jun 2024 01:14:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718698489; x=1719303289; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=x2XaVAC8IE56GAxplFORJQRkpcE/+9zf73VCWoglwI0=; b=vj/vocWSKhH0qhTafzKfZpgdlbDF1PABNSXwACpQc/a0MwPVvB3+gyEbHDWrt5IuXT CvDk+YAAndoVfq2nt+CXTjqATqPpW2nx9cEa4G6WxUI8kH+PjMnT0gnTTYZYI8zEEjdg rNFUu0A7+CfHSKsrRcvYR1+jhJapiNL/vPLqliY3eKojRuq4fm28xW44PnsqE3jy51w5 76uVwL90u7a+OtyL/JzFBnXP+dBQPA4whFNDOb5oAvuMe+C5grjDc4Rb5srglMHw3LDt ch9CtoVIri0KokHaurPZlP8j41dGrbjqBezqLRyXlxF7cocFauZctnu4Z8MssobPfEKW 1h2w== X-Forwarded-Encrypted: i=1; AJvYcCW+vV+J2LloOYl3ccQ0V5ljDArdsXZAhNd2MTGSHEFzbcI5tQ6OqO90GS4djXCSa0bGfNCuYTnqPWRj8mUHUXmyhuPXXiMlFhk4 X-Gm-Message-State: AOJu0YxHIkUm+oAn9IfdSMV7q9pJIRBn0/INlFFboiKc9yc4CIfJQVOi nWfbzmsyTXiRcgR19VgwU2T91OlbHGuPHc8N1yikkLecW9nqzSQylbDdw6tnXybdKscPR1cF6AJ nNv7HCCDmqB1OhT4X57vwN0cSvKHZvGINytH3fKgXhFcmSwlf3DsLNtZ79w== X-Received: by 2002:a5d:64e7:0:b0:35f:2584:770e with SMTP id ffacd0b85a97d-3607a6d1b12mr8314728f8f.0.1718698489122; Tue, 18 Jun 2024 01:14:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF7aClN0eIrJM4/TD9eRK6X2sQJnMXOFh3MYNbs1cbW+RIK+J38t6+0A5nEpibfcscRk/XglA== X-Received: by 2002:a5d:64e7:0:b0:35f:2584:770e with SMTP id ffacd0b85a97d-3607a6d1b12mr8314712f8f.0.1718698488575; Tue, 18 Jun 2024 01:14:48 -0700 (PDT) Received: from pstanner-thinkpadt14sgen1.remote.csb (nat-pool-muc-t.redhat.com. [149.14.88.26]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36075104a48sm13563672f8f.100.2024.06.18.01.14.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Jun 2024 01:14:48 -0700 (PDT) Message-ID: <36f3d8d4f88f57ab28976899d27809696355392b.camel@redhat.com> Subject: Re: [PATCH v2 2/7] dmaengine: ae4dma: Add AMD ae4dma controller driver From: Philipp Stanner To: Basavaraj Natikar , vkoul@kernel.org, dmaengine@vger.kernel.org Cc: Raju.Rangoju@amd.com, Frank.li@nxp.com Date: Tue, 18 Jun 2024 10:14:47 +0200 In-Reply-To: <20240617100359.2550541-3-Basavaraj.Natikar@amd.com> References: <20240617100359.2550541-1-Basavaraj.Natikar@amd.com> <20240617100359.2550541-3-Basavaraj.Natikar@amd.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) Precedence: bulk X-Mailing-List: dmaengine@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 T24gTW9uLCAyMDI0LTA2LTE3IGF0IDE1OjMzICswNTMwLCBCYXNhdmFyYWogTmF0aWthciB3cm90 ZToKPiBBZGQgc3VwcG9ydCBmb3IgQU1EIEFFNERNQSBjb250cm9sbGVyLiBJdCBwZXJmb3JtcyBo aWdoLWJhbmR3aWR0aAo+IG1lbW9yeSB0byBtZW1vcnkgYW5kIElPIGNvcHkgb3BlcmF0aW9uLiBE ZXZpY2UgY29tbWFuZHMgYXJlIG1hbmFnZWQKPiB2aWEgYSBjaXJjdWxhciBxdWV1ZSBvZiAnZGVz Y3JpcHRvcnMnLCBlYWNoIG9mIHdoaWNoIHNwZWNpZmllcyBzb3VyY2UKPiBhbmQgZGVzdGluYXRp b24gYWRkcmVzc2VzIGZvciBjb3B5aW5nIGEgc2luZ2xlIGJ1ZmZlciBvZiBkYXRhLgo+IAo+IFJl dmlld2VkLWJ5OiBSYWp1IFJhbmdvanUgPFJhanUuUmFuZ29qdUBhbWQuY29tPgo+IFNpZ25lZC1v ZmYtYnk6IEJhc2F2YXJhaiBOYXRpa2FyIDxCYXNhdmFyYWouTmF0aWthckBhbWQuY29tPgo+IC0t LQo+IMKgTUFJTlRBSU5FUlPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqAgNiArCj4gwqBkcml2ZXJzL2RtYS9hbWQvS2NvbmZpZ8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiDCoGRyaXZlcnMvZG1hL2FtZC9NYWtlZmlsZcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBkcml2ZXJzL2RtYS9hbWQvYWU0ZG1hL0tj b25maWfCoMKgwqDCoMKgIHzCoCAxMyArKwo+IMKgZHJpdmVycy9kbWEvYW1kL2FlNGRtYS9NYWtl ZmlsZcKgwqDCoMKgIHzCoCAxMCArKwo+IMKgZHJpdmVycy9kbWEvYW1kL2FlNGRtYS9hZTRkbWEt ZGV2LmMgfCAyMDYKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gwqBkcml2ZXJzL2Rt YS9hbWQvYWU0ZG1hL2FlNGRtYS1wY2kuYyB8IDE5MCArKysrKysrKysrKysrKysrKysrKysrKysr Cj4gwqBkcml2ZXJzL2RtYS9hbWQvYWU0ZG1hL2FlNGRtYS5owqDCoMKgwqAgfMKgIDc3ICsrKysr KysrKysrCj4gwqBkcml2ZXJzL2RtYS9hbWQvY29tbW9uL2FtZF9kbWEuaMKgwqDCoCB8wqAgMjYg KysrKwo+IMKgOSBmaWxlcyBjaGFuZ2VkLCA1MzAgaW5zZXJ0aW9ucygrKQo+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL2FtZC9hZTRkbWEvS2NvbmZpZwo+IMKgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZG1hL2FtZC9hZTRkbWEvTWFrZWZpbGUKPiDCoGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2RtYS9hbWQvYWU0ZG1hL2FlNGRtYS1kZXYuYwo+IMKgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZG1hL2FtZC9hZTRkbWEvYWU0ZG1hLXBjaS5jCj4gwqBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9kbWEvYW1kL2FlNGRtYS9hZTRkbWEuaAo+IMKgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZG1hL2FtZC9jb21tb24vYW1kX2RtYS5oCj4gCj4gZGlmZiAtLWdpdCBh L01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPiBpbmRleCBjNTAwYzA1Njc3NzkuLjBkMjIyZDFj YTgzZiAxMDA2NDQKPiAtLS0gYS9NQUlOVEFJTkVSUwo+ICsrKyBiL01BSU5UQUlORVJTCj4gQEAg LTk0Nyw2ICs5NDcsMTIgQEAgTDrCoGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCj4gwqBTOsKg wqDCoMKgwqBTdXBwb3J0ZWQKPiDCoEY6wqDCoMKgwqDCoGRyaXZlcnMvcmFzL2FtZC9hdGwvKgo+ IMKgCj4gK0FNRCBBRTRETUEgRFJJVkVSCj4gK006wqDCoMKgwqDCoEJhc2F2YXJhaiBOYXRpa2Fy IDxCYXNhdmFyYWouTmF0aWthckBhbWQuY29tPgo+ICtMOsKgwqDCoMKgwqBkbWFlbmdpbmVAdmdl ci5rZXJuZWwub3JnCj4gK1M6wqDCoMKgwqDCoE1haW50YWluZWQKPiArRjrCoMKgwqDCoMKgZHJp dmVycy9kbWEvYW1kL2FlNGRtYS8KPiArCj4gwqBBTUQgQVhJIFcxIERSSVZFUgo+IMKgTTrCoMKg wqDCoMKgS3JpcyBDaGFwbGluIDxrcmlzLmNoYXBsaW5AYW1kLmNvbT4KPiDCoFI6wqDCoMKgwqDC oFRob21hcyBEZWxldiA8dGhvbWFzLmRlbGV2QGFtZC5jb20+Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZG1hL2FtZC9LY29uZmlnIGIvZHJpdmVycy9kbWEvYW1kL0tjb25maWcKPiBpbmRleCA4MjQ2 YjQ2M2JjZjcuLjhjMjVhM2VkNmI5NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2RtYS9hbWQvS2Nv bmZpZwo+ICsrKyBiL2RyaXZlcnMvZG1hL2FtZC9LY29uZmlnCj4gQEAgLTMsMyArMyw0IEBACj4g wqAjIEFNRCBETUEgRHJpdmVycwo+IMKgCj4gwqBzb3VyY2UgImRyaXZlcnMvZG1hL2FtZC9wdGRt YS9LY29uZmlnIgo+ICtzb3VyY2UgImRyaXZlcnMvZG1hL2FtZC9hZTRkbWEvS2NvbmZpZyIKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYW1kL01ha2VmaWxlIGIvZHJpdmVycy9kbWEvYW1kL01h a2VmaWxlCj4gaW5kZXggZGQ3MjU3YmE3ZTA2Li44MDQ5YjA2YTlmZjUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9kbWEvYW1kL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9kbWEvYW1kL01ha2VmaWxl Cj4gQEAgLTQsMyArNCw0IEBACj4gwqAjCj4gwqAKPiDCoG9iai0kKENPTkZJR19BTURfUFRETUEp ICs9IHB0ZG1hLwo+ICtvYmotJChDT05GSUdfQU1EX0FFNERNQSkgKz0gYWU0ZG1hLwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2RtYS9hbWQvYWU0ZG1hL0tjb25maWcKPiBiL2RyaXZlcnMvZG1hL2Ft ZC9hZTRkbWEvS2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MDAwLi5jZjhkYjRkYWM5OGQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9kbWEvYW1k L2FlNGRtYS9LY29uZmlnCj4gQEAgLTAsMCArMSwxMyBAQAo+ICsjIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCj4gK2NvbmZpZyBBTURfQUU0RE1BCj4gK8KgwqDCoMKgwqDCoMKgdHJp c3RhdGXCoCAiQU1EIEFFNERNQSBFbmdpbmUiCj4gK8KgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBY ODZfNjQgJiYgUENJCj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IERNQV9FTkdJTkUKPiArwqDCoMKg wqDCoMKgwqBzZWxlY3QgRE1BX1ZJUlRVQUxfQ0hBTk5FTFMKPiArwqDCoMKgwqDCoMKgwqBoZWxw Cj4gK8KgwqDCoMKgwqDCoMKgwqAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBTUQgQUU0RE1BIGNv bnRyb2xsZXIuIFRoaXMKPiBjb250cm9sbGVyCj4gK8KgwqDCoMKgwqDCoMKgwqAgcHJvdmlkZXMg RE1BIGNhcGFiaWxpdGllcyB0byBwZXJmb3JtIGhpZ2ggYmFuZHdpZHRoIG1lbW9yeQo+IHRvCj4g K8KgwqDCoMKgwqDCoMKgwqAgbWVtb3J5IGFuZCBJTyBjb3B5IG9wZXJhdGlvbnMuIEl0IHBlcmZv cm1zIERNQSB0cmFuc2Zlcgo+IHRocm91Z2gKPiArwqDCoMKgwqDCoMKgwqDCoCBxdWV1ZS1iYXNl ZCBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuIFRoaXMgRE1BIGNvbnRyb2xsZXIgaXMKPiBpbnRlbmRl ZAo+ICvCoMKgwqDCoMKgwqDCoMKgIHRvIGJlIHVzZWQgd2l0aCBBTUQgTm9uLVRyYW5zcGFyZW50 IEJyaWRnZSBkZXZpY2VzIGFuZCBub3QKPiBmb3IKPiArwqDCoMKgwqDCoMKgwqDCoCBnZW5lcmFs IHB1cnBvc2UgcGVyaXBoZXJhbCBETUEuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2FtZC9h ZTRkbWEvTWFrZWZpbGUKPiBiL2RyaXZlcnMvZG1hL2FtZC9hZTRkbWEvTWFrZWZpbGUKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZTkxOGY4NWE4MGVjCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZG1hL2FtZC9hZTRkbWEvTWFrZWZpbGUKPiBAQCAt MCwwICsxLDEwIEBACj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArIwo+ ICsjIEFNRCBBRTRETUEgZHJpdmVyCj4gKyMKPiArCj4gK29iai0kKENPTkZJR19BTURfQUU0RE1B KSArPSBhZTRkbWEubwo+ICsKPiArYWU0ZG1hLW9ianMgOj0gYWU0ZG1hLWRldi5vCj4gKwo+ICth ZTRkbWEtJChDT05GSUdfUENJKSArPSBhZTRkbWEtcGNpLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEvYW1kL2FlNGRtYS9hZTRkbWEtZGV2LmMKPiBiL2RyaXZlcnMvZG1hL2FtZC9hZTRkbWEv YWU0ZG1hLWRldi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAu Ljk1OGJkYWI4ZGI1OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2RtYS9hbWQvYWU0 ZG1hL2FlNGRtYS1kZXYuYwo+IEBAIC0wLDAgKzEsMjA2IEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIEFNRCBBRTRETUEgZHJpdmVyCj4gKyAqCj4g KyAqIENvcHlyaWdodCAoYykgMjAyNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgo+ICsg KiBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKgo+ICsgKiBBdXRob3I6IEJhc2F2YXJhaiBOYXRp a2FyIDxCYXNhdmFyYWouTmF0aWthckBhbWQuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJh ZTRkbWEuaCIKPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2h3X3EgPSAxOwo+ICttb2R1 bGVfcGFyYW0obWF4X2h3X3EsIHVpbnQsIDA0NDQpOwo+ICtNT0RVTEVfUEFSTV9ERVNDKG1heF9o d19xLCAibWF4IGh3IHF1ZXVlcyBzdXBwb3J0ZWQgYnkgZW5naW5lIChhbnkKPiBub24temVybyB2 YWx1ZSwgZGVmYXVsdDogMSkiKTsKPiArCj4gK3N0YXRpYyBjaGFyICphZTRfZXJyb3JfY29kZXNb XSA9IHsKPiArwqDCoMKgwqDCoMKgwqAiIiwKPiArwqDCoMKgwqDCoMKgwqAiRVJSIDAxOiBJTlZB TElEIEhFQURFUiBEVzAiLAo+ICvCoMKgwqDCoMKgwqDCoCJFUlIgMDI6IElOVkFMSUQgU1RBVFVT IiwKPiArwqDCoMKgwqDCoMKgwqAiRVJSIDAzOiBJTlZBTElEIExFTkdUSCAtIDQgQllURSBBTElH Tk1FTlQiLAo+ICvCoMKgwqDCoMKgwqDCoCJFUlIgMDQ6IElOVkFMSUQgU1JDIEFERFIgLSA0IEJZ VEUgQUxJR05NRU5UIiwKPiArwqDCoMKgwqDCoMKgwqAiRVJSIDA1OiBJTlZBTElEIERTVCBBRERS IC0gNCBCWVRFIEFMSUdOTUVOVCIsCj4gK8KgwqDCoMKgwqDCoMKgIkVSUiAwNjogSU5WQUxJRCBB TElHTk1FTlQiLAo+ICvCoMKgwqDCoMKgwqDCoCJFUlIgMDc6IElOVkFMSUQgREVTQ1JJUFRPUiIs Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBhZTRfbG9nX2Vycm9yKHN0cnVjdCBwdF9kZXZpY2Ug KmQsIGludCBlKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGUgPD0gNykKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8oZC0+ZGV2LCAiQUU0RE1BIGVycm9yOiAlcyAo MHgleClcbiIsCj4gYWU0X2Vycm9yX2NvZGVzW2VdLCBlKTsKPiArwqDCoMKgwqDCoMKgwqBlbHNl IGlmIChlID4gNyAmJiBlIDw9IDE1KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk ZXZfaW5mbyhkLT5kZXYsICJBRTRETUEgZXJyb3I6ICVzICgweCV4KVxuIiwKPiAiSU5WQUxJRCBE RVNDUklQVE9SIiwgZSk7Cj4gK8KgwqDCoMKgwqDCoMKgZWxzZSBpZiAoZSA+IDE1ICYmIGUgPD0g MzEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9pbmZvKGQtPmRldiwgIkFF NERNQSBlcnJvcjogJXMgKDB4JXgpXG4iLAo+ICJJTlZBTElEIERFU0NSSVBUT1IiLCBlKTsKPiAr wqDCoMKgwqDCoMKgwqBlbHNlIGlmIChlID4gMzEgJiYgZSA8PSA2MykKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8oZC0+ZGV2LCAiQUU0RE1BIGVycm9yOiAlcyAoMHgl eClcbiIsCj4gIklOVkFMSUQgREVTQ1JJUFRPUiIsIGUpOwo+ICvCoMKgwqDCoMKgwqDCoGVsc2Ug aWYgKGUgPiA2MyAmJiBlIDw9IDEyNykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2luZm8oZC0+ZGV2LCAiQUU0RE1BIGVycm9yOiAlcyAoMHgleClcbiIsICJQVEUKPiBFUlJP UiIsIGUpOwo+ICvCoMKgwqDCoMKgwqDCoGVsc2UgaWYgKGUgPiAxMjcgJiYgZSA8PSAyNTUpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9pbmZvKGQtPmRldiwgIkFFNERNQSBl cnJvcjogJXMgKDB4JXgpXG4iLCAiUFRFCj4gRVJST1IiLCBlKTsKPiArwqDCoMKgwqDCoMKgwqBl bHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9pbmZvKGQtPmRldiwgIlVu a25vd24gQUU0RE1BIGVycm9yIik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFlNF9jaGVja19z dGF0dXNfZXJyb3Ioc3RydWN0IGFlNF9jbWRfcXVldWUgKmFlNGNtZF9xLAo+IGludCBpZHgpCj4g K3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcHRfY21kX3F1ZXVlICpjbWRfcSA9ICZhZTRjbWRf cS0+Y21kX3E7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFlNGRtYV9kZXNjIGRlc2M7Cj4gK8Kg wqDCoMKgwqDCoMKgdTggc3RhdHVzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBtZW1jcHkoJmRlc2Ms ICZjbWRfcS0+cWJhc2VbaWR4XSwgc2l6ZW9mKHN0cnVjdAo+IGFlNGRtYV9kZXNjKSk7Cj4gK8Kg wqDCoMKgwqDCoMKgLyogU3luY2hyb25pemUgb3JkZXJpbmcgKi8KPiArwqDCoMKgwqDCoMKgwqBk bWFfcm1iKCk7Cj4gK8KgwqDCoMKgwqDCoMKgc3RhdHVzID0gZGVzYy5kdzEuc3RhdHVzOwo+ICvC oMKgwqDCoMKgwqDCoGlmIChzdGF0dXMgJiYgc3RhdHVzICE9IEFFNF9ERVNDX0NPTVBMRVRFRCkg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbWRfcS0+Y21kX2Vycm9yID0gZGVz Yy5kdzEuZXJyX2NvZGU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjbWRf cS0+Y21kX2Vycm9yKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYWU0X2xvZ19lcnJvcihjbWRfcS0+cHQsIGNtZF9xLT5jbWRfZXJyb3IpOwo+ICvCoMKg wqDCoMKgwqDCoH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWU0X3BlbmRpbmdfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWU0X2Nt ZF9xdWV1ZSAqYWU0Y21kX3EgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0Cj4gYWU0X2NtZF9x dWV1ZSwgcF93b3JrLndvcmspOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwdF9jbWRfcXVldWUg KmNtZF9xID0gJmFlNGNtZF9xLT5jbWRfcTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcHRfY21k ICpjbWQ7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIGNyaWR4LCBkcmlkeDsKPiArCj4gK8KgwqDCoMKg wqDCoMKgd2hpbGUgKHRydWUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd2Fp dF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFlNGNtZF9xLT5xX3csCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAoKGF0b21pYzY0X3JlYWQoJmFlNGNtZF9xLQo+ID5kb25lX2NudCkpIDwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhdG9taWM2NF9yZWFkKCZhZTRjbWRfcS0KPiA+aW50cl9jbnQp KSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhdG9taWM2NF9pbmMoJmFl NGNtZF9xLT5kb25lX2NudCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBt dXRleF9sb2NrKCZhZTRjbWRfcS0+Y21kX2xvY2spOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY3JpZHggPSByZWFkbChjbWRfcS0+cmVnX2NvbnRyb2wgKyAweDBDKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpZHggPSBhdG9taWNfcmVhZCgmYWU0Y21k X3EtPmRyaWR4KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdoaWxlICgo ZHJpZHggIT0gY3JpZHgpICYmICFsaXN0X2VtcHR5KCZhZTRjbWRfcS0KPiA+Y21kKSkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY21kID0gbGlzdF9m aXJzdF9lbnRyeSgmYWU0Y21kX3EtPmNtZCwgc3RydWN0Cj4gcHRfY21kLCBlbnRyeSk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2RlbCgmY21k LT5lbnRyeSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYWU0X2NoZWNrX3N0YXR1c19lcnJvcihhZTRjbWRfcSwgZHJpZHgpOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY21kLT5wdF9jbWRfY2FsbGJh Y2soY21kLT5kYXRhLCBjbWQtPnJldCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYXRvbWljNjRfZGVjKCZhZTRjbWRfcS0+cV9jbWRfY291bnQp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpZHgg PSAoZHJpZHggKyAxKSAlIENNRF9RX0xFTjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGF0b21pY19zZXQoJmFlNGNtZF9xLT5kcmlkeCwgZHJpZHgpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogU3luY2hy b25pemUgb3JkZXJpbmcgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRtYV9tYigpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNvbXBsZXRlX2FsbCgmYWU0Y21kX3EtPmNtcCk7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG11dGV4X3VubG9jaygmYWU0Y21kX3EtPmNtZF9sb2NrKTsKPiArwqDCoMKgwqDCoMKgwqB9 Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBhZTRfY29yZV9pcnFfaGFuZGxlcihpbnQg aXJxLCB2b2lkICpkYXRhKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFlNF9jbWRfcXVl dWUgKmFlNGNtZF9xID0gZGF0YTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcHRfY21kX3F1ZXVl ICpjbWRfcTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcHRfZGV2aWNlICpwdDsKPiArwqDCoMKg wqDCoMKgwqB1MzIgc3RhdHVzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBjbWRfcSA9ICZhZTRjbWRf cS0+Y21kX3E7Cj4gK8KgwqDCoMKgwqDCoMKgcHQgPSBjbWRfcS0+cHQ7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHB0LT50b3RhbF9pbnRlcnJ1cHRzKys7Cj4gK8KgwqDCoMKgwqDCoMKgYXRvbWljNjRf aW5jKCZhZTRjbWRfcS0+aW50cl9jbnQpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB3YWtlX3VwKCZh ZTRjbWRfcS0+cV93KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgc3RhdHVzID0gcmVhZGwoY21kX3Et PnJlZ19jb250cm9sICsgMHgxNCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cyAmIEJJVCgw KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgJj0gR0VOTUFTSygz MSwgMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRlbChzdGF0dXMsIGNt ZF9xLT5yZWdfY29udHJvbCArIDB4MTQpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICt2b2lkIGFlNF9kZXN0cm95 X3dvcmsoc3RydWN0IGFlNF9kZXZpY2UgKmFlNCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBhZTRfY21kX3F1ZXVlICphZTRjbWRfcTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGFlNC0+Y21kX3FfY291bnQ7IGkrKykgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZTRjbWRfcSA9ICZhZTQtPmFlNGNtZF9x W2ldOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFhZTRjbWRfcS0+ cHdzKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJl YWs7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYW5jZWxfZGVsYXllZF93 b3JrX3N5bmMoJmFlNGNtZF9xLT5wX3dvcmspOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXN0cm95X3dvcmtxdWV1ZShhZTRjbWRfcS0+cHdzKTsKPiArwqDCoMKgwqDCoMKgwqB9 Cj4gK30KPiArCj4gK2ludCBhZTRfY29yZV9pbml0KHN0cnVjdCBhZTRfZGV2aWNlICphZTQpCj4g K3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcHRfZGV2aWNlICpwdCA9ICZhZTQtPnB0Owo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBhZTRfY21kX3F1ZXVlICphZTRjbWRfcTsKPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwdC0+ZGV2Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBwdF9jbWRfcXVldWUgKmNtZF9xOwo+ICvCoMKgwqDCoMKgwqDCoGludCBpLCByZXQgPSAwOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwobWF4X2h3X3EsIHB0LT5pb19yZWdzKTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IG1heF9od19xOyBpKyspIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWU0Y21kX3EgPSAmYWU0LT5hZTRjbWRfcVtpXTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWU0Y21kX3EtPmlkID0gYWU0LT5jbWRfcV9j b3VudDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWU0LT5jbWRfcV9jb3VudCsr Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY21kX3EgPSAmYWU0Y21kX3Et PmNtZF9xOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbWRfcS0+cHQgPSBwdDsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFByZXNldCBzb21lIHJlZ2lz dGVyIHZhbHVlcyAoUSBzaXplIGlzIDMyYnl0ZQo+ICgweDIwKSkgKi8KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY21kX3EtPnJlZ19jb250cm9sID0gcHQtPmlvX3JlZ3MgKyAoKGkg KyAxKSAqIDB4MjApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0g ZGV2bV9yZXF1ZXN0X2lycShkZXYsIGFlNC0+YWU0X2lycVtpXSwKPiBhZTRfY29yZV9pcnFfaGFu ZGxlciwgMCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X25hbWUocHQtPmRldiksIGFlNGNtZF9x KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbWRfcS0+cXNpemUgPSBRX1NJWkUoc2l6ZW9m KHN0cnVjdCBhZTRkbWFfZGVzYykpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY21kX3EtPnFiYXNlID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIGNtZF9xLT5xc2l6ZSwK PiAmY21kX3EtPnFiYXNlX2RtYSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm ICghY21kX3EtPnFiYXNlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKg wqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgYWU0LT5jbWRfcV9jb3VudDsgaSsrKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFlNGNtZF9xID0gJmFlNC0+YWU0Y21kX3FbaV07Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbWRfcSA9ICZhZTRjbWRfcS0+Y21k X3E7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBQcmVzZXQgc29tZSBy ZWdpc3RlciB2YWx1ZXMgKFEgc2l6ZSBpcyAzMmJ5dGUKPiAoMHgyMCkpICovCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNtZF9xLT5yZWdfY29udHJvbCA9IHB0LT5pb19yZWdzICsg KChpICsgMSkgKiAweDIwKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q IFVwZGF0ZSB0aGUgZGV2aWNlIHJlZ2lzdGVycyB3aXRoIHF1ZXVlCj4gaW5mb3JtYXRpb24uICov Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRlbChDTURfUV9MRU4sIGNtZF9x LT5yZWdfY29udHJvbCArIDB4MDgpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY21kX3EtPnFkbWFfdGFpbCA9IGNtZF9xLT5xYmFzZV9kbWE7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHdyaXRlbChsb3dlcl8zMl9iaXRzKGNtZF9xLT5xZG1hX3RhaWwpLCBj bWRfcS0KPiA+cmVnX2NvbnRyb2wgKyAweDE4KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgd3JpdGVsKHVwcGVyXzMyX2JpdHMoY21kX3EtPnFkbWFfdGFpbCksIGNtZF9xLQo+ID5y ZWdfY29udHJvbCArIDB4MUMpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg SU5JVF9MSVNUX0hFQUQoJmFlNGNtZF9xLT5jbWQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpbml0X3dhaXRxdWV1ZV9oZWFkKCZhZTRjbWRfcS0+cV93KTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFlNGNtZF9xLT5wd3MgPSBhbGxvY19vcmRlcmVkX3dv cmtxdWV1ZSgiYWU0ZG1hXyVkIiwKPiBXUV9NRU1fUkVDTEFJTSwgYWU0Y21kX3EtPmlkKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFhZTRjbWRfcS0+cHdzKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZTRfZGVzdHJveV93 b3JrKGFlNCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBJTklUX0RFTEFZRURfV09SSygmYWU0Y21kX3Et PnBfd29yaywKPiBhZTRfcGVuZGluZ193b3JrKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcXVldWVfZGVsYXllZF93b3JrKGFlNGNtZF9xLT5wd3MsICZhZTRjbWRfcS0+cF93b3Jr LMKgCj4gdXNlY3NfdG9famlmZmllcygxMDApKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGluaXRfY29tcGxldGlvbigmYWU0Y21kX3EtPmNtcCk7Cj4gK8KgwqDCoMKgwqDC oMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZG1hL2FtZC9hZTRkbWEvYWU0ZG1hLXBjaS5jCj4gYi9kcml2ZXJzL2RtYS9hbWQv YWU0ZG1hL2FlNGRtYS1wY2kuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAwMDAwLi5kZGViZjA2MDljNGQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9kbWEv YW1kL2FlNGRtYS9hZTRkbWEtcGNpLmMKPiBAQCAtMCwwICsxLDE5MCBAQAo+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBBTUQgQUU0RE1BIGRyaXZlcgo+ ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjQsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KPiArICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KPiArICoKPiArICogQXV0aG9yOiBCYXNhdmFy YWogTmF0aWthciA8QmFzYXZhcmFqLk5hdGlrYXJAYW1kLmNvbT4KPiArICovCj4gKwo+ICsjaW5j bHVkZSAiYWU0ZG1hLmgiCj4gKwo+ICtzdGF0aWMgaW50IGFlNF9nZXRfbXNpX2lycShzdHJ1Y3Qg YWU0X2RldmljZSAqYWU0KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHB0X2RldmljZSAq cHQgPSAmYWU0LT5wdDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwdC0+ ZGV2Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwY2lfZGV2ICpwZGV2Owo+ICvCoMKgwqDCoMKg wqDCoGludCByZXQsIGk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHBkZXYgPSB0b19wY2lfZGV2KGRl dik7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcGNpX2VuYWJsZV9tc2kocGRldik7Cj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IE1BWF9BRTRfSFdfUVVF VUVTOyBpKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFlNC0+YWU0X2lycVtp XSA9IHBkZXYtPmlycTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgYWU0X2dldF9tc2l4X2lycXMoc3RydWN0IGFlNF9kZXZpY2UgKmFlNCkKPiAr ewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZTRfbXNpeCAqYWU0X21zaXggPSBhZTQtPmFlNF9t c2l4Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwdF9kZXZpY2UgKnB0ID0gJmFlNC0+cHQ7Cj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gcHQtPmRldjsKPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgcGNpX2RldiAqcGRldjsKPiArwqDCoMKgwqDCoMKgwqBpbnQgdiwgaSwgcmV0 Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBwZGV2ID0gdG9fcGNpX2RldihkZXYpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBmb3IgKHYgPSAwOyB2IDwgQVJSQVlfU0laRShhZTRfbXNpeC0+bXNpeF9lbnRy eSk7IHYrKykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWU0X21zaXgtPm1zaXhf ZW50cnlbdl0uZW50cnkgPSB2Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBwY2lfZW5hYmxl X21zaXhfcmFuZ2UocGRldiwgYWU0X21zaXgtPm1zaXhfZW50cnksIDEsCj4gdik7Cj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGFlNF9tc2l4LT5tc2l4X2NvdW50ID0gcmV0 Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgTUFYX0FFNF9IV19RVUVVRVM7 IGkrKykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWU0LT5hZTRfaXJxW2ldID0g YWU0X21zaXgtPm1zaXhfZW50cnlbaV0udmVjdG9yOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZTRfZ2V0X2lycXMoc3RydWN0IGFlNF9kZXZp Y2UgKmFlNCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwdF9kZXZpY2UgKnB0ID0gJmFl NC0+cHQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gcHQtPmRldjsKPiAr wqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhZTRfZ2V0 X21zaXhfaXJxcyhhZTQpOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghcmV0KQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogQ291 bGRuJ3QgZ2V0IE1TSS1YIHZlY3RvcnMsIHRyeSBNU0kgKi8KPiArwqDCoMKgwqDCoMKgwqBkZXZf ZXJyKGRldiwgImNvdWxkIG5vdCBlbmFibGUgTVNJLVggKCVkKSwgdHJ5aW5nIE1TSVxuIiwKPiBy ZXQpOwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFlNF9nZXRfbXNpX2lycShhZTQpOwo+ICvCoMKg wqDCoMKgwqDCoGlmICghcmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogQ291bGRuJ3QgZ2V0IE1TSSBpbnRlcnJ1cHQg Ki8KPiArwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBlbmFibGUgTVNJICgl ZClcbiIsIHJldCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGFlNF9mcmVlX2lycXMoc3RydWN0IGFlNF9kZXZpY2UgKmFlNCkKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZTRfbXNpeCAqYWU0X21zaXg7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHBjaV9kZXYgKnBkZXY7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHB0X2Rldmlj ZSAqcHQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2Owo+ICvCoMKgwqDCoMKg wqDCoGludCBpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoYWU0KSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHB0ID0gJmFlNC0+cHQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldiA9IHB0LT5kZXY7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHBkZXYgPSB0b19wY2lfZGV2KGRldik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBhZTRfbXNpeCA9IGFlNC0+YWU0X21zaXg7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChhZTRfbXNpeCAmJiBhZTRfbXNpeC0+bXNpeF9jb3VudCkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBjaV9kaXNhYmxlX21zaXgocGRl dik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UgaWYgKHBkZXYtPmlycSkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBjaV9kaXNh YmxlX21zaShwZGV2KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAo aSA9IDA7IGkgPCBNQVhfQUU0X0hXX1FVRVVFUzsgaSsrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWU0LT5hZTRfaXJxW2ldID0gMDsKPiArwqDCoMKg wqDCoMKgwqB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFlNF9kZWluaXQoc3RydWN0IGFlNF9k ZXZpY2UgKmFlNCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoGFlNF9mcmVlX2lycXMoYWU0KTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBhZTRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBj b25zdCBzdHJ1Y3QKPiBwY2lfZGV2aWNlX2lkICppZCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFl NF9kZXZpY2UgKmFlNDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcHRfZGV2aWNlICpwdDsKPiAr wqDCoMKgwqDCoMKgwqBpbnQgYmFyX21hc2s7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldCA9IDA7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGFlNCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYWU0 KSwgR0ZQX0tFUk5FTCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFhZTQpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBh ZTQtPmFlNF9tc2l4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBhZTRfbXNpeCks Cj4gR0ZQX0tFUk5FTCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFhZTQtPmFlNF9tc2l4KQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgcmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOwo+ICvCoMKgwqDCoMKgwqDC oGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gYWU0X2Vycm9y Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBiYXJfbWFzayA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJ T1JFU09VUkNFX01FTSk7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcGNpbV9pb21hcF9yZWdpb25z KHBkZXYsIGJhcl9tYXNrLCAiYWU0ZG1hIik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBhZTRfZXJyb3I7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoHB0ID0gJmFlNC0+cHQ7Cj4gK8KgwqDCoMKgwqDCoMKgcHQtPmRldiA9IGRldjsK PiArCj4gK8KgwqDCoMKgwqDCoMKgcHQtPmlvX3JlZ3MgPSBwY2ltX2lvbWFwX3RhYmxlKHBkZXYp WzBdOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghcHQtPmlvX3JlZ3MpIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZ290byBhZTRfZXJyb3I7Cj4gK8KgwqDCoMKgwqDCoMKgfQoKUGxlYXNlIG5vdGUg dGhhdCB3ZSBhcmUgYWJvdXQgdG8gZGVwcmVjYXRlIHBjaW1faW9tYXBfcmVnaW9ucygpIGFuZApw Y2ltX2lvbWFwX3RhYmxlKCkuCgpUaGUgZGV0YWlscyBhcmUgaW4gdGhpcyBzZXJpZXMgWzFdLiBD b2RlIGlzIGN1cnJlbnRseSBpbiB0aGlzIGJyYW5jaApbMl0uCgpUaGF0IHNob3VsZCBnbyBtYWlu bGluZSBpbiB2Ni4xMSwgaG9wZWZ1bGx5LiBTbyB5b3UgbWlnaHQgd2FudCB0bwpjb25zaWRlciB3 YWl0aW5nIGEgYml0IHdpdGggeW91ciBzZXJpZXMgc28geW91IHdvbid0IGVuZCB1cCB3aXRoIGEK ZGVwcmVjYXRlZCBBUEkgaW4geW91ciBuZXcgY29kZT8KClRoZSBuZXcgd2F5IG9mIGNvZGluZyBp dCB3b3VsZCB0aGVuIGFsc28gYmUgYSBiaXQgc2ltcGxlcjoKCnB0LT5pb19yZWdzID0gcGNpbV9p b21hcF9yZWdpb24ocGRldiwgMCwgImFlNGRtYSIpOwppZiAoSVNfRVJSKHB0LT5pb19yZWdzKSkg ewoKV2UnZCBqdXN0IGhhdmUgdG8gbWFrZSBwY2ltX2lvbWFwX3JlZ2lvbigpIHB1YmxpYyBmb3Ig eW91LCBzaW5jZSB5b3UnZApiZSB0aGUgZmlyc3QgZXh0ZXJuYWwgdXNlci4KCkNoZWVycywKUC4K CgpbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIwMjQwNjEzMTE1MDMyLjI5MDk4LTEt cHN0YW5uZXJAcmVkaGF0LmNvbS8KWzJdIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9s aW51eC9rZXJuZWwvZ2l0L3BjaS9wY2kuZ2l0L2xvZy8/aD1kZXZyZXMKCj4gKwo+ICvCoMKgwqDC oMKgwqDCoHJldCA9IGFlNF9nZXRfaXJxcyhhZTQpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gYWU0X2Vycm9yOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBwY2lfc2V0X21hc3RlcihwZGV2KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSyg0OCkpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBkZXZfc2V0X2RydmRhdGEoZGV2LCBhZTQpOwo+ICsKPiArwqDCoMKgwqDC oMKgwqByZXQgPSBhZTRfY29yZV9pbml0KGFlNCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBhZTRfZXJyb3I7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICsKPiArYWU0X2Vycm9yOgo+ICvCoMKgwqDCoMKgwqDC oGFlNF9kZWluaXQoYWU0KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgYWU0X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4g K3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWU0X2RldmljZSAqYWU0ID0gZGV2X2dldF9kcnZk YXRhKCZwZGV2LT5kZXYpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBhZTRfZGVzdHJveV93b3JrKGFl NCk7Cj4gK8KgwqDCoMKgwqDCoMKgYWU0X2RlaW5pdChhZTQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWU0X3BjaV90YWJsZVtdID0gewo+ICvCoMKgwqDC oMKgwqDCoHsgUENJX1ZERVZJQ0UoQU1ELCAweDE0QzgpLCB9LAo+ICvCoMKgwqDCoMKgwqDCoHsg UENJX1ZERVZJQ0UoQU1ELCAweDE0REMpLCB9LAo+ICvCoMKgwqDCoMKgwqDCoHsgUENJX1ZERVZJ Q0UoQU1ELCAweDE0OUIpLCB9LAo+ICvCoMKgwqDCoMKgwqDCoC8qIExhc3QgZW50cnkgbXVzdCBi ZSB6ZXJvICovCj4gK8KgwqDCoMKgwqDCoMKgeyAwLCB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0Vf VEFCTEUocGNpLCBhZTRfcGNpX3RhYmxlKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZl ciBhZTRfcGNpX2RyaXZlciA9IHsKPiArwqDCoMKgwqDCoMKgwqAubmFtZSA9ICJhZTRkbWEiLAo+ ICvCoMKgwqDCoMKgwqDCoC5pZF90YWJsZSA9IGFlNF9wY2lfdGFibGUsCj4gK8KgwqDCoMKgwqDC oMKgLnByb2JlID0gYWU0X3BjaV9wcm9iZSwKPiArwqDCoMKgwqDCoMKgwqAucmVtb3ZlID0gYWU0 X3BjaV9yZW1vdmUsCj4gK307Cj4gKwo+ICttb2R1bGVfcGNpX2RyaXZlcihhZTRfcGNpX2RyaXZl cik7Cj4gKwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigi QU1EIEFFNERNQSBkcml2ZXIiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYW1kL2FlNGRt YS9hZTRkbWEuaAo+IGIvZHJpdmVycy9kbWEvYW1kL2FlNGRtYS9hZTRkbWEuaAo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yNGIxMjUzYWQ1NzAKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9kbWEvYW1kL2FlNGRtYS9hZTRkbWEuaAo+IEBAIC0wLDAg KzEsNzcgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiArLyoK PiArICogQU1EIEFFNERNQSBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDI0LCBB ZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCj4g KyAqCj4gKyAqIEF1dGhvcjogQmFzYXZhcmFqIE5hdGlrYXIgPEJhc2F2YXJhai5OYXRpa2FyQGFt ZC5jb20+Cj4gKyAqLwo+ICsjaWZuZGVmIF9fQUU0RE1BX0hfXwo+ICsjZGVmaW5lIF9fQUU0RE1B X0hfXwo+ICsKPiArI2luY2x1ZGUgIi4uL2NvbW1vbi9hbWRfZG1hLmgiCj4gKwo+ICsjZGVmaW5l IE1BWF9BRTRfSFdfUVVFVUVTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDE2Cj4gKwo+ICsj ZGVmaW5lIEFFNF9ERVNDX0NPTVBMRVRFRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgzCj4g Kwo+ICtzdHJ1Y3QgYWU0X21zaXggewo+ICvCoMKgwqDCoMKgwqDCoGludCBtc2l4X2NvdW50Owo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cnlbTUFYX0FFNF9IV19R VUVVRVNdOwo+ICt9Owo+ICsKPiArc3RydWN0IGFlNF9jbWRfcXVldWUgewo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBhZTRfZGV2aWNlICphZTQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHB0X2Nt ZF9xdWV1ZSBjbWRfcTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIGNtZDsKPiAr wqDCoMKgwqDCoMKgwqAvKiBwcm90ZWN0IGNvbW1hbmQgb3BlcmF0aW9ucyAqLwo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBtdXRleCBjbWRfbG9jazsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGVs YXllZF93b3JrIHBfd29yazsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVj dCAqcHdzOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjb21wbGV0aW9uIGNtcDsKPiArwqDCoMKg wqDCoMKgwqB3YWl0X3F1ZXVlX2hlYWRfdCBxX3c7Cj4gK8KgwqDCoMKgwqDCoMKgYXRvbWljNjRf dCBpbnRyX2NudDsKPiArwqDCoMKgwqDCoMKgwqBhdG9taWM2NF90IGRvbmVfY250Owo+ICvCoMKg wqDCoMKgwqDCoGF0b21pYzY0X3QgcV9jbWRfY291bnQ7Cj4gK8KgwqDCoMKgwqDCoMKgYXRvbWlj X3QgZHJpZHg7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGlkOwo+ICt9Owo+ICsKPiAr dW5pb24gZHdvdSB7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIGR3MDsKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZHdvcmQwIHsKPiArwqDCoMKgwqDCoMKgwqB1OMKgwqDCoMKgwqDCoGJ5dGUwOwo+ICvC oMKgwqDCoMKgwqDCoHU4wqDCoMKgwqDCoMKgYnl0ZTE7Cj4gK8KgwqDCoMKgwqDCoMKgdTE2wqDC oMKgwqDCoHRpbWVzdGFtcDsKPiArwqDCoMKgwqDCoMKgwqB9IGR3czsKPiArfTsKPiArCj4gK3N0 cnVjdCBkd29yZDEgewo+ICvCoMKgwqDCoMKgwqDCoHU4wqDCoMKgwqDCoMKgc3RhdHVzOwo+ICvC oMKgwqDCoMKgwqDCoHU4wqDCoMKgwqDCoMKgZXJyX2NvZGU7Cj4gK8KgwqDCoMKgwqDCoMKgdTE2 wqDCoMKgwqDCoGRlc2NfaWQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgYWU0ZG1hX2Rlc2Mgewo+ICvC oMKgwqDCoMKgwqDCoHVuaW9uIGR3b3UgZHdvdXY7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGR3 b3JkMSBkdzE7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIGxlbmd0aDsKPiArwqDCoMKgwqDCoMKgwqB1 MzIgcnN2ZDsKPiArwqDCoMKgwqDCoMKgwqB1MzIgc3JjX2hpOwo+ICvCoMKgwqDCoMKgwqDCoHUz MiBzcmNfbG87Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIGRzdF9oaTsKPiArwqDCoMKgwqDCoMKgwqB1 MzIgZHN0X2xvOwo+ICt9Owo+ICsKPiArc3RydWN0IGFlNF9kZXZpY2Ugewo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBwdF9kZXZpY2UgcHQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFlNF9tc2l4 ICphZTRfbXNpeDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWU0X2NtZF9xdWV1ZSBhZTRjbWRf cVtNQVhfQUU0X0hXX1FVRVVFU107Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGFlNF9p cnFbTUFYX0FFNF9IV19RVUVVRVNdOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBjbWRf cV9jb3VudDsKPiArfTsKPiArCj4gK2ludCBhZTRfY29yZV9pbml0KHN0cnVjdCBhZTRfZGV2aWNl ICphZTQpOwo+ICt2b2lkIGFlNF9kZXN0cm95X3dvcmsoc3RydWN0IGFlNF9kZXZpY2UgKmFlNCk7 Cj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hbWQvY29tbW9uL2FtZF9kbWEu aAo+IGIvZHJpdmVycy9kbWEvYW1kL2NvbW1vbi9hbWRfZG1hLmgKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjlmMzk2Y2Q0MzcxCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZG1hL2FtZC9jb21tb24vYW1kX2RtYS5oCj4gQEAgLTAsMCArMSwyNiBA QAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBB TUQgRE1BIERyaXZlciBjb21tb24KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDI0LCBBZHZh bmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCj4gKyAq Cj4gKyAqIEF1dGhvcjogQmFzYXZhcmFqIE5hdGlrYXIgPEJhc2F2YXJhai5OYXRpa2FyQGFtZC5j b20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBBTURfRE1BX0gKPiArI2RlZmluZSBBTURfRE1BX0gK PiArCj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYWVu Z2luZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgo+ICsjaW5jbHVkZSA8bGludXgv bGlzdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Bj aS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KPiArI2luY2x1ZGUgPGxpbnV4L3dh aXQuaD4KPiArCj4gKyNpbmNsdWRlICIuLi9wdGRtYS9wdGRtYS5oIgo+ICsjaW5jbHVkZSAiLi4v Li4vdmlydC1kbWEuaCIKPiArCj4gKyNlbmRpZgoK