From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AA1B4C433F5 for ; Thu, 30 Dec 2021 09:35:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=DFyAOgZwdY58YlPbwsMfkROldQ7zncbAL2Lq8QIEwKA=; b=tkiusoBw1bRHya Tny3KEKuAIffeRXgTTwOxMAkLXDHY7qwzlJB9dWIEPac0Tp81o+yAzB08clEZZjWXfk8cTQloZBvv vMNDu1ksuB37VQjjWDOLdF3vgLfWfpoNdT+JiVa+h+ZwyN6RingEYckVoJ1RU3RzCz+YhBcdWihdN LWbJOvH8gsEJWNCwvBN0eozkfRj0I8s1EuAK58e3fL/cYvBTHU2X25I0U6MemMcCUQhyw5kUoRyLm arJ3+5H6dyUdm9t44XuhuG9eNKJVjoz0/RV0a1N/vxzOIqNlrv+wTRiYqbhvVsbFIbmtqXnHDuFL8 es2Mn6gCB/pNPx3N0ooA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n2rqi-0048Mn-FT; Thu, 30 Dec 2021 09:35:52 +0000 Received: from mail-sh.amlogic.com ([58.32.228.43]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n2rqV-0048L7-6i; Thu, 30 Dec 2021 09:35:41 +0000 Received: from [10.18.29.173] (10.18.29.173) by mail-sh.amlogic.com (10.18.11.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 30 Dec 2021 17:35:34 +0800 Message-ID: <290bd079-5627-60b0-a177-ad5608ce1211@amlogic.com> Date: Thu, 30 Dec 2021 17:35:33 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH V2 4/6] tty: serial: meson: The UART baud rate calculation is described using the common clock code. Also added S4 chip uart Compatible. Content-Language: en-US To: Vyacheslav , , , , CC: Greg Kroah-Hartman , Jiri Slaby , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl References: <20211229135350.9659-1-yu.tu@amlogic.com> <20211229135350.9659-5-yu.tu@amlogic.com> From: Yu Tu In-Reply-To: X-Originating-IP: [10.18.29.173] X-ClientProxiedBy: mail-sh.amlogic.com (10.18.11.5) To mail-sh.amlogic.com (10.18.11.5) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211230_013539_310284_9FA4D69D X-CRM114-Status: GOOD ( 16.29 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org SGkgVnlhY2hlc2xhdiwKCVRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHlvdXIgcmVwbHkuCgpPbiAy MDIxLzEyLzMwIDM6MDcsIFZ5YWNoZXNsYXYgd3JvdGU6Cj4gWyBFWFRFUk5BTCBFTUFJTCBdCj4g Cj4gCj4gCj4gMjkuMTIuMjAyMSAxNjo1MywgWXUgVHUg0L/QuNGI0LXRgjoKPj4gVXNpbmcgdGhl IGNvbW1vbiBDbG9jayBjb2RlIHRvIGRlc2NyaWJlIHRoZSBVQVJUIGJhdWQgcmF0ZSBjbG9jayBt YWtlcwo+PiBpdCBlYXNpZXIgZm9yIHRoZSBVQVJUIGRyaXZlciB0byBiZSBjb21wYXRpYmxlIHdp dGggdGhlIGJhdWQgcmF0ZQo+PiByZXF1aXJlbWVudHMgb2YgdGhlIFVBUlQgSVAgb24gZGlmZmVy ZW50IG1lc29uIGNoaXBzCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFl1IFR1IDx5dS50dUBhbWxvZ2lj LmNvbT4KPj4gLS0tCj4+IMKgIGRyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnwqDCoMKgwqDCoCB8 wqDCoCAxICsKPj4gwqAgZHJpdmVycy90dHkvc2VyaWFsL21lc29uX3VhcnQuYyB8IDMwMyArKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+PiDCoCAyIGZpbGVzIGNoYW5nZWQsIDI0OSBp bnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv dHR5L3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKPj4gaW5kZXgg NzgwOTA4ZDQzNTU3Li4zMmUyMzgxNzMwMzYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdHR5L3Nl cmlhbC9LY29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCj4+IEBAIC0x OTgsNiArMTk4LDcgQEAgY29uZmlnIFNFUklBTF9LR0RCX05NSQo+PiDCoCBjb25maWcgU0VSSUFM X01FU09OCj4+IMKgwqDCoMKgwqAgdHJpc3RhdGUgIk1lc29uIHNlcmlhbCBwb3J0IHN1cHBvcnQi Cj4+IMKgwqDCoMKgwqAgZGVwZW5kcyBvbiBBUkNIX01FU09OCj4+ICvCoMKgwqAgZGVwZW5kcyBv biBDT01NT05fQ0xLCj4+IMKgwqDCoMKgwqAgc2VsZWN0IFNFUklBTF9DT1JFCj4+IMKgwqDCoMKg wqAgaGVscAo+PiDCoMKgwqDCoMKgwqDCoCBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhl IG9uLWNoaXAgVUFSVHMgb2YgdGhlIEFtbG9naWMKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5 L3NlcmlhbC9tZXNvbl91YXJ0LmMgCj4+IGIvZHJpdmVycy90dHkvc2VyaWFsL21lc29uX3VhcnQu Ywo+PiBpbmRleCA5OWVmZTYyYTE1MDcuLjliMDdlMzUzNDk2OSAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy90dHkvc2VyaWFsL21lc29uX3VhcnQuYwo+PiArKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwv bWVzb25fdWFydC5jCj4+IEBAIC02LDYgKzYsNyBAQAo+PiDCoMKgICovCj4+IMKgICNpbmNsdWRl IDxsaW51eC9jbGsuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KPj4gwqAg I2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ Cj4+IMKgICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4+IEBAIC02NSw5ICs2Niw3IEBACj4+IMKg ICNkZWZpbmUgQU1MX1VBUlRfUkVDVl9JUlEoYynCoMKgwqDCoMKgwqDCoCAoKGMpICYgMHhmZikK Pj4gwqAgLyogQU1MX1VBUlRfUkVHNSBiaXRzICovCj4+IC0jZGVmaW5lIEFNTF9VQVJUX0JBVURf TUFTS8KgwqDCoMKgwqDCoMKgIDB4N2ZmZmZmCj4+IMKgICNkZWZpbmUgQU1MX1VBUlRfQkFVRF9V U0XCoMKgwqDCoMKgwqDCoCBCSVQoMjMpCj4+IC0jZGVmaW5lIEFNTF9VQVJUX0JBVURfWFRBTMKg wqDCoMKgwqDCoMKgIEJJVCgyNCkKPj4gwqAgI2RlZmluZSBBTUxfVUFSVF9QT1JUX05VTcKgwqDC oMKgwqDCoMKgIDEyCj4+IMKgICNkZWZpbmUgQU1MX1VBUlRfUE9SVF9PRkZTRVTCoMKgwqDCoMKg wqDCoCA2Cj4+IEBAIC03Niw2ICs3NSwyMSBAQAo+PiDCoCAjZGVmaW5lIEFNTF9VQVJUX1BPTExf VVNFQ8KgwqDCoMKgwqDCoMKgIDUKPj4gwqAgI2RlZmluZSBBTUxfVUFSVF9USU1FT1VUX1VTRUPC oMKgwqDCoMKgwqDCoCAxMDAwMAo+PiArc3RydWN0IG1lc29uX3VhcnRfZGF0YSB7Cj4+ICvCoMKg wqAgc3RydWN0IHVhcnRfcG9ydMKgwqDCoCBwb3J0Owo+PiArwqDCoMKgIHN0cnVjdCBjbGvCoMKg wqDCoMKgwqDCoCAqcGNsazsKPj4gK8KgwqDCoCBzdHJ1Y3QgY2xrwqDCoMKgwqDCoMKgwqAgKmJh dWRfY2xrOwo+PiArwqDCoMKgIHN0cnVjdCBjbGtfZGl2aWRlcsKgwqDCoCBiYXVkX2RpdjsKPj4g K8KgwqDCoCBzdHJ1Y3QgY2xrX211eMKgwqDCoMKgwqDCoMKgIHVzZV94dGFsX211eDsKPj4gK8Kg wqDCoCBzdHJ1Y3QgY2xrX211eMKgwqDCoMKgwqDCoMKgIHh0YWxfY2xrX3NlbF9tdXg7Cj4+ICvC oMKgwqAgc3RydWN0IGNsa19tdXjCoMKgwqDCoMKgwqDCoCB4dGFsMl9jbGtfc2VsX211eDsKPj4g K8KgwqDCoCBzdHJ1Y3QgY2xrX2ZpeGVkX2ZhY3RvcsKgwqDCoCB4dGFsX2RpdjI7Cj4+ICvCoMKg wqAgc3RydWN0IGNsa19maXhlZF9mYWN0b3LCoMKgwqAgeHRhbF9kaXYzOwo+PiArwqDCoMKgIHN0 cnVjdCBjbGtfZml4ZWRfZmFjdG9ywqDCoMKgIGNsazgxX2RpdjQ7Cj4+ICvCoMKgwqAgYm9vbMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbm9fY2xrODFfaW5wdXQ7Cj4+ICvCoMKgwqAgYm9vbMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaGFzX3h0YWxfY2xrX3NlbDsKPj4gK307Cj4+ICsKPj4gwqAgc3Rh dGljIHN0cnVjdCB1YXJ0X2RyaXZlciBtZXNvbl91YXJ0X2RyaXZlcjsKPj4gwqAgc3RhdGljIHN0 cnVjdCB1YXJ0X3BvcnQgKm1lc29uX3BvcnRzW0FNTF9VQVJUX1BPUlRfTlVNXTsKPj4gQEAgLTI3 MCwxNCArMjg0LDExIEBAIHN0YXRpYyB2b2lkIG1lc29uX3VhcnRfcmVzZXQoc3RydWN0IHVhcnRf cG9ydCAKPj4gKnBvcnQpCj4+IMKgIHN0YXRpYyBpbnQgbWVzb25fdWFydF9zdGFydHVwKHN0cnVj dCB1YXJ0X3BvcnQgKnBvcnQpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCB1MzIgdmFsOwo+PiAtwqDC oMKgIGludCByZXQgPSAwOwo+PiArwqDCoMKgIGludCByZXQ7Cj4+IC3CoMKgwqAgdmFsID0gcmVh ZGwocG9ydC0+bWVtYmFzZSArIEFNTF9VQVJUX0NPTlRST0wpOwo+PiAtwqDCoMKgIHZhbCB8PSBB TUxfVUFSVF9DTEVBUl9FUlI7Cj4+IC3CoMKgwqAgd3JpdGVsKHZhbCwgcG9ydC0+bWVtYmFzZSAr IEFNTF9VQVJUX0NPTlRST0wpOwo+PiAtwqDCoMKgIHZhbCAmPSB+QU1MX1VBUlRfQ0xFQVJfRVJS Owo+PiAtwqDCoMKgIHdyaXRlbCh2YWwsIHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9DT05UUk9M KTsKPj4gK8KgwqDCoCBtZXNvbl91YXJ0X3Jlc2V0KHBvcnQpOwo+PiArwqDCoMKgIHZhbCA9IHJl YWRsKHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9DT05UUk9MKTsKPj4gwqDCoMKgwqDCoCB2YWwg fD0gKEFNTF9VQVJUX1JYX0VOIHwgQU1MX1VBUlRfVFhfRU4pOwo+PiDCoMKgwqDCoMKgIHdyaXRl bCh2YWwsIHBvcnQtPm1lbWJhc2UgKyBBTUxfVUFSVF9DT05UUk9MKTsKPj4gQEAgLTI5NSwxOSAr MzA2LDE3IEBAIHN0YXRpYyBpbnQgbWVzb25fdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQg Cj4+ICpwb3J0KQo+PiDCoCBzdGF0aWMgdm9pZCBtZXNvbl91YXJ0X2NoYW5nZV9zcGVlZChzdHJ1 Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCAKPj4gbG9uZyBiYXVkKQo+PiDCoCB7Cj4+ICvC oMKgwqAgc3RydWN0IG1lc29uX3VhcnRfZGF0YSAqcHJpdmF0ZV9kYXRhID0gcG9ydC0+cHJpdmF0 ZV9kYXRhOwo+PiDCoMKgwqDCoMKgIHUzMiB2YWw7Cj4+IMKgwqDCoMKgwqAgd2hpbGUgKCFtZXNv bl91YXJ0X3R4X2VtcHR5KHBvcnQpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY3B1X3JlbGF4KCk7 Cj4+IC3CoMKgwqAgaWYgKHBvcnQtPnVhcnRjbGsgPT0gMjQwMDAwMDApIHsKPj4gLcKgwqDCoMKg wqDCoMKgIHZhbCA9ICgocG9ydC0+dWFydGNsayAvIDMpIC8gYmF1ZCkgLSAxOwo+PiAtwqDCoMKg wqDCoMKgwqAgdmFsIHw9IEFNTF9VQVJUX0JBVURfWFRBTDsKPj4gLcKgwqDCoCB9IGVsc2Ugewo+ PiAtwqDCoMKgwqDCoMKgwqAgdmFsID0gKChwb3J0LT51YXJ0Y2xrICogMTAgLyAoYmF1ZCAqIDQp ICsgNSkgLyAxMCkgLSAxOwo+PiAtwqDCoMKgIH0KPj4gK8KgwqDCoCB2YWwgPSByZWFkbChwb3J0 LT5tZW1iYXNlICsgQU1MX1VBUlRfUkVHNSk7Cj4+IMKgwqDCoMKgwqAgdmFsIHw9IEFNTF9VQVJU X0JBVURfVVNFOwo+PiDCoMKgwqDCoMKgIHdyaXRlbCh2YWwsIHBvcnQtPm1lbWJhc2UgKyBBTUxf VUFSVF9SRUc1KTsKPj4gKwo+PiArwqDCoMKgIGNsa19zZXRfcmF0ZShwcml2YXRlX2RhdGEtPmJh dWRfY2xrLCBiYXVkKTsKPj4gwqAgfQo+PiDCoCBzdGF0aWMgdm9pZCBtZXNvbl91YXJ0X3NldF90 ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCj4+IEBAIC0zOTcsMTEgKzQwNiwyNyBAQCBz dGF0aWMgaW50IG1lc29uX3VhcnRfdmVyaWZ5X3BvcnQoc3RydWN0IAo+PiB1YXJ0X3BvcnQgKnBv cnQsCj4+IMKgIHN0YXRpYyB2b2lkIG1lc29uX3VhcnRfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0 X3BvcnQgKnBvcnQpCj4+IMKgIHsKPj4gLcKgwqDCoCAvKiBub3RoaW5nIHRvIGRvICovCj4+ICvC oMKgwqAgc3RydWN0IG1lc29uX3VhcnRfZGF0YSAqcHJpdmF0ZV9kYXRhID0gcG9ydC0+cHJpdmF0 ZV9kYXRhOwo+PiArCj4+ICvCoMKgwqAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXZhdGVfZGF0 YS0+YmF1ZF9jbGspOwo+PiArwqDCoMKgIGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2YXRlX2Rh dGEtPnBjbGspOwo+PiDCoCB9Cj4+IMKgIHN0YXRpYyBpbnQgbWVzb25fdWFydF9yZXF1ZXN0X3Bv cnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKPj4gwqAgewo+PiArwqDCoMKgIHN0cnVjdCBtZXNv bl91YXJ0X2RhdGEgKnByaXZhdGVfZGF0YSA9IHBvcnQtPnByaXZhdGVfZGF0YTsKPj4gK8KgwqDC oCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXZh dGVfZGF0YS0+cGNsayk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdmF0 ZV9kYXRhLT5iYXVkX2Nsayk7Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKg wqAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXZhdGVfZGF0YS0+cGNsayk7Cj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiDCoMKgwqDCoMKgIHJldHVy biAwOwo+PiDCoCB9Cj4+IEBAIC02MjksNTYgKzY1NCwxNzUgQEAgc3RhdGljIHN0cnVjdCB1YXJ0 X2RyaXZlciBtZXNvbl91YXJ0X2RyaXZlciA9IHsKPj4gwqDCoMKgwqDCoCAuY29uc8KgwqDCoMKg wqDCoMKgID0gTUVTT05fU0VSSUFMX0NPTlNPTEUsCj4+IMKgIH07Cj4+IC1zdGF0aWMgaW5saW5l IHN0cnVjdCBjbGsgKm1lc29uX3VhcnRfcHJvYmVfY2xvY2soc3RydWN0IGRldmljZSAqZGV2LAo+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0 IGNoYXIgKmlkKQo+PiArc3RhdGljIGludCBtZXNvbl91YXJ0X3JlZ2lzdGVyX2NsayhzdHJ1Y3Qg dWFydF9wb3J0ICpwb3J0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnN0IGNoYXIgKm5hbWVfc3VmZml4LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgKnBhcmVudF9kYXRhLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBudW1fcGFy ZW50cywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1 Y3QgY2xrX29wcyAqb3BzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBjbGtfaHcgKmh3KQo+PiDCoCB7Cj4+IC3CoMKgwqAgc3RydWN0IGNsayAqY2xrID0g TlVMTDsKPj4gK8KgwqDCoCBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0ID0geyB9Owo+PiArwqDC oMKgIGNoYXIgY2xrX25hbWVbMzJdOwo+PiDCoMKgwqDCoMKgIGludCByZXQ7Cj4+IC3CoMKgwqAg Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgaWQpOwo+PiAtwqDCoMKgIGlmIChJU19FUlIoY2xrKSkK Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiBjbGs7Cj4+ICvCoMKgwqAgc25wcmludGYoY2xrX25h bWUsIHNpemVvZihjbGtfbmFtZSksICIlcyMlcyIsIGRldl9uYW1lKHBvcnQtPmRldiksCj4+ICvC oMKgwqDCoMKgwqDCoMKgIG5hbWVfc3VmZml4KTsKPj4gLcKgwqDCoCByZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUoY2xrKTsKPj4gLcKgwqDCoCBpZiAocmV0KSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBk ZXZfZXJyKGRldiwgImNvdWxkbid0IGVuYWJsZSBjbGtcbiIpOwo+PiAtwqDCoMKgwqDCoMKgwqAg cmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gLcKgwqDCoCB9Cj4+ICvCoMKgwqAgaW5pdC5uYW1lID0g Y2xrX25hbWU7Cj4+ICvCoMKgwqAgaW5pdC5vcHMgPSBvcHM7Cj4+ICvCoMKgwqAgaW5pdC5mbGFn cyA9IENMS19TRVRfUkFURV9QQVJFTlQ7Cj4+ICvCoMKgwqAgaW5pdC5wYXJlbnRfZGF0YSA9IHBh cmVudF9kYXRhOwo+PiArwqDCoMKgIGluaXQubnVtX3BhcmVudHMgPSBudW1fcGFyZW50czsKPj4g Kwo+PiArwqDCoMKgIGh3LT5pbml0ID0gJmluaXQ7Cj4+IC3CoMKgwqAgZGV2bV9hZGRfYWN0aW9u X29yX3Jlc2V0KGRldiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHZvaWQoKikodm9pZCAq KSljbGtfZGlzYWJsZV91bnByZXBhcmUsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsayk7 Cj4+ICvCoMKgwqAgcmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIocG9ydC0+ZGV2LCBodyk7Cj4+ ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBkZXZfZXJyX3Byb2Jl KHBvcnQtPmRldiwgcmV0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSAnJXMnIGNsb2NrXG4iLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbGtfbmFtZSk7Cj4+IC3CoMKgwqAgcmV0 dXJuIGNsazsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiDCoCB9Cj4+IC1zdGF0aWMgaW50IG1l c29uX3VhcnRfcHJvYmVfY2xvY2tzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHVhcnRfcG9ydCAqcG9y dCkKPj4gLXsKPj4gLcKgwqDCoCBzdHJ1Y3QgY2xrICpjbGtfeHRhbCA9IE5VTEw7Cj4+IC3CoMKg wqAgc3RydWN0IGNsayAqY2xrX3BjbGsgPSBOVUxMOwo+PiAtwqDCoMKgIHN0cnVjdCBjbGsgKmNs a19iYXVkID0gTlVMTDsKPj4gK3N0YXRpYyBpbnQgbWVzb25fdWFydF9wcm9iZV9jbG9ja3Moc3Ry dWN0IHVhcnRfcG9ydCAqcG9ydCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBib29sIHJlZ2lzdGVyX2NsazgxX2RpdjQpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IG1l c29uX3VhcnRfZGF0YSAqcHJpdmF0ZV9kYXRhID0gcG9ydC0+cHJpdmF0ZV9kYXRhOwo+PiArwqDC oMKgIHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgdXNlX3h0YWxfbXV4X3BhcmVudHNbMl0gPSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCB7IC5pbmRleCA9IC0xLCB9LAo+PiArwqDCoMKgwqDCoMKgwqAgeyAu aW5kZXggPSAtMSwgfSwKPj4gK8KgwqDCoCB9Owo+PiArwqDCoMKgIHN0cnVjdCBjbGtfcGFyZW50 X2RhdGEgeHRhbF9jbGtfc2VsX211eF9wYXJlbnRzWzJdID0geyB9Owo+PiArwqDCoMKgIHN0cnVj dCBjbGtfcGFyZW50X2RhdGEgeHRhbDJfY2xrX3NlbF9tdXhfcGFyZW50c1syXSA9IHsgfTsKPj4g K8KgwqDCoCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIHh0YWxfZGl2X3BhcmVudCA9IHsgLmZ3X25h bWUgPSAieHRhbCIsIH07Cj4+ICvCoMKgwqAgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBjbGs4MV9k aXZfcGFyZW50ID0geyAuZndfbmFtZSA9ICJiYXVkIiwgfTsKPj4gK8KgwqDCoCBzdHJ1Y3QgY2xr X3BhcmVudF9kYXRhIGJhdWRfZGl2X3BhcmVudCA9IHsgfTsKPj4gK8KgwqDCoCBzdHJ1Y3QgY2xr ICpjbGtfYmF1ZCwgKmNsa194dGFsOwo+PiArwqDCoMKgIGludCByZXQ7Cj4+IC3CoMKgwqAgY2xr X3BjbGsgPSBtZXNvbl91YXJ0X3Byb2JlX2Nsb2NrKCZwZGV2LT5kZXYsICJwY2xrIik7Cj4+IC3C oMKgwqAgaWYgKElTX0VSUihjbGtfcGNsaykpCj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRS X0VSUihjbGtfcGNsayk7Cj4+ICvCoMKgwqAgcHJpdmF0ZV9kYXRhLT5wY2xrID0gZGV2bV9jbGtf Z2V0KHBvcnQtPmRldiwgInBjbGsiKTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKHByaXZhdGVfZGF0 YS0+cGNsaykpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZGV2X2Vycl9wcm9iZShwb3J0LT5k ZXYsIFBUUl9FUlIocHJpdmF0ZV9kYXRhLT5wY2xrKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgIkZhaWxlZCB0byBnZXQgdGhlICdwY2xrJyBjbG9ja1xuIik7 Cj4+ICsKPj4gK8KgwqDCoCBjbGtfYmF1ZCA9IGRldm1fY2xrX2dldChwb3J0LT5kZXYsICJiYXVk Iik7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihjbGtfYmF1ZCkpCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gZGV2X2Vycl9wcm9iZShwb3J0LT5kZXYsIFBUUl9FUlIoY2xrX2JhdWQpLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRmFpbGVkIHRvIGdldCB0aGUg J2JhdWQnIGNsb2NrXG4iKTsKPj4gLcKgwqDCoCBjbGtfeHRhbCA9IG1lc29uX3VhcnRfcHJvYmVf Y2xvY2soJnBkZXYtPmRldiwgInh0YWwiKTsKPj4gK8KgwqDCoCBjbGtfeHRhbCA9IGRldm1fY2xr X2dldChwb3J0LT5kZXYsICJ4dGFsIik7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUihjbGtfeHRh bCkpCj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjbGtfeHRhbCk7Cj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gZGV2X2Vycl9wcm9iZShwb3J0LT5kZXYsIFBUUl9FUlIoY2xrX3h0 YWwpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRmFpbGVk IHRvIGdldCB0aGUgJ3h0YWwnIGNsb2NrXG4iKTsKPj4gKwo+PiArwqDCoMKgIHByaXZhdGVfZGF0 YS0+eHRhbF9kaXYzLm11bHQgPSAxOwo+PiArwqDCoMKgIHByaXZhdGVfZGF0YS0+eHRhbF9kaXYz LmRpdiA9IDM7Cj4+ICvCoMKgwqAgcmV0ID0gbWVzb25fdWFydF9yZWdpc3Rlcl9jbGsocG9ydCwg Inh0YWxfZGl2MyIsICZ4dGFsX2Rpdl9wYXJlbnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgMSwgJmNsa19maXhlZF9mYWN0b3Jfb3BzLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZwcml2YXRlX2RhdGEtPnh0YWxf ZGl2My5odyk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7Cj4+IC3CoMKgwqAgY2xrX2JhdWQgPSBtZXNvbl91YXJ0X3Byb2JlX2Nsb2NrKCZwZGV2LT5k ZXYsICJiYXVkIik7Cj4+IC3CoMKgwqAgaWYgKElTX0VSUihjbGtfYmF1ZCkpCj4+IC3CoMKgwqDC oMKgwqDCoCByZXR1cm4gUFRSX0VSUihjbGtfYmF1ZCk7Cj4+ICvCoMKgwqAgaWYgKHJlZ2lzdGVy X2NsazgxX2RpdjQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHByaXZhdGVfZGF0YS0+Y2xrODFfZGl2 NC5tdWx0ID0gMTsKPj4gK8KgwqDCoMKgwqDCoMKgIHByaXZhdGVfZGF0YS0+Y2xrODFfZGl2NC5k aXYgPSA0Owo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gbWVzb25fdWFydF9yZWdpc3Rlcl9jbGso cG9ydCwgImNsazgxX2RpdjQiLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJmNsazgxX2Rpdl9wYXJlbnQsIDEsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmY2xrX2ZpeGVkX2ZhY3Rvcl9v cHMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmcHJpdmF0ZV9kYXRhLT5jbGs4MV9kaXY0Lmh3KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChy ZXQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgIHVzZV94dGFsX211eF9wYXJlbnRzWzBdLmh3ID0gJnByaXZhdGVfZGF0YS0+Y2xr ODFfZGl2NC5odzsKPj4gK8KgwqDCoCB9Cj4+IC3CoMKgwqAgcG9ydC0+dWFydGNsayA9IGNsa19n ZXRfcmF0ZShjbGtfYmF1ZCk7Cj4+ICvCoMKgwqAgaWYgKHByaXZhdGVfZGF0YS0+aGFzX3h0YWxf Y2xrX3NlbCkgewo+PiArwqDCoMKgwqDCoMKgwqAgcHJpdmF0ZV9kYXRhLT54dGFsX2RpdjIubXVs dCA9IDE7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcml2YXRlX2RhdGEtPnh0YWxfZGl2Mi5kaXYgPSAy Owo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gbWVzb25fdWFydF9yZWdpc3Rlcl9jbGsocG9ydCwg Inh0YWxfZGl2MiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmeHRhbF9kaXZfcGFyZW50LCAxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmNsa19maXhlZF9mYWN0b3Jfb3BzLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnByaXZh dGVfZGF0YS0+eHRhbF9kaXYyLmh3KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg IHh0YWxfY2xrX3NlbF9tdXhfcGFyZW50c1swXS5odyA9ICZwcml2YXRlX2RhdGEtPnh0YWxfZGl2 My5odzsKPj4gK8KgwqDCoMKgwqDCoMKgIHh0YWxfY2xrX3NlbF9tdXhfcGFyZW50c1sxXS5md19u YW1lID0gInh0YWwiOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBwcml2YXRlX2RhdGEtPnh0YWxf Y2xrX3NlbF9tdXgucmVnID0gcG9ydC0+bWVtYmFzZSArIAo+PiBBTUxfVUFSVF9SRUc1Owo+PiAr wqDCoMKgwqDCoMKgwqAgcHJpdmF0ZV9kYXRhLT54dGFsX2Nsa19zZWxfbXV4Lm1hc2sgPSAweDE7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcml2YXRlX2RhdGEtPnh0YWxfY2xrX3NlbF9tdXguc2hpZnQg PSAyNjsKPj4gK8KgwqDCoMKgwqDCoMKgIHByaXZhdGVfZGF0YS0+eHRhbF9jbGtfc2VsX211eC5m bGFncyA9IENMS19NVVhfUk9VTkRfQ0xPU0VTVDsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IG1l c29uX3VhcnRfcmVnaXN0ZXJfY2xrKHBvcnQsICJ4dGFsX2Nsa19zZWwiLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeHRhbF9jbGtfc2VsX211 eF9wYXJlbnRzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQVJSQVlfU0laRSh4dGFsX2Nsa19zZWxfbXV4X3BhcmVudHMpLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmNsa19tdXhfb3Bz LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JnByaXZhdGVfZGF0YS0+eHRhbF9jbGtfc2VsX211eC5odyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoCB4dGFsMl9jbGtfc2VsX211eF9wYXJlbnRzWzBdLmh3ID0gCj4+ICZwcml2 YXRlX2RhdGEtPnh0YWxfY2xrX3NlbF9tdXguaHc7Cj4+ICvCoMKgwqDCoMKgwqDCoCB4dGFsMl9j bGtfc2VsX211eF9wYXJlbnRzWzFdLmh3ID0gJnByaXZhdGVfZGF0YS0+eHRhbF9kaXYyLmh3Owo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBwcml2YXRlX2RhdGEtPnh0YWwyX2Nsa19zZWxfbXV4LnJl ZyA9IHBvcnQtPm1lbWJhc2UgKyAKPj4gQU1MX1VBUlRfUkVHNTsKPj4gK8KgwqDCoMKgwqDCoMKg IHByaXZhdGVfZGF0YS0+eHRhbDJfY2xrX3NlbF9tdXgubWFzayA9IDB4MTsKPj4gK8KgwqDCoMKg wqDCoMKgIHByaXZhdGVfZGF0YS0+eHRhbDJfY2xrX3NlbF9tdXguc2hpZnQgPSAyNzsKPj4gK8Kg wqDCoMKgwqDCoMKgIHByaXZhdGVfZGF0YS0+eHRhbDJfY2xrX3NlbF9tdXguZmxhZ3MgPSBDTEtf TVVYX1JPVU5EX0NMT1NFU1Q7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBtZXNvbl91YXJ0X3Jl Z2lzdGVyX2Nsayhwb3J0LCAieHRhbDJfY2xrX3NlbCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4dGFsMl9jbGtfc2VsX211eF9wYXJlbnRz LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg QVJSQVlfU0laRSh4dGFsMl9jbGtfc2VsX211eF9wYXJlbnRzKSwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjbGtfbXV4X29wcywKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZwcml2YXRl X2RhdGEtPnh0YWwyX2Nsa19zZWxfbXV4Lmh3KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQp Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgIHVzZV94dGFsX211eF9wYXJlbnRzWzFdLmh3ID0gCj4+ICZwcml2YXRlX2RhdGEtPnh0 YWwyX2Nsa19zZWxfbXV4Lmh3Owo+PiArwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCB1c2VfeHRhbF9tdXhfcGFyZW50c1sxXS5odyA9ICZwcml2YXRlX2RhdGEtPnh0YWxfZGl2My5o dzsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBwcml2YXRlX2RhdGEtPnVzZV94dGFsX211 eC5yZWcgPSBwb3J0LT5tZW1iYXNlICsgQU1MX1VBUlRfUkVHNTsKPj4gK8KgwqDCoCBwcml2YXRl X2RhdGEtPnVzZV94dGFsX211eC5tYXNrID0gMHgxOwo+PiArwqDCoMKgIHByaXZhdGVfZGF0YS0+ dXNlX3h0YWxfbXV4LnNoaWZ0ID0gMjQ7Cj4+ICvCoMKgwqAgcHJpdmF0ZV9kYXRhLT51c2VfeHRh bF9tdXguZmxhZ3MgPSBDTEtfTVVYX1JPVU5EX0NMT1NFU1Q7Cj4+ICvCoMKgwqAgcmV0ID0gbWVz b25fdWFydF9yZWdpc3Rlcl9jbGsocG9ydCwgInVzZV94dGFsIiwgCj4+IHVzZV94dGFsX211eF9w YXJlbnRzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFS UkFZX1NJWkUodXNlX3h0YWxfbXV4X3BhcmVudHMpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjbGtfbXV4X29wcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcHJpdmF0ZV9kYXRhLT51c2VfeHRhbF9tdXguaHcp Owo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiAr Cj4+ICvCoMKgwqAgYmF1ZF9kaXZfcGFyZW50Lmh3ID0gJnByaXZhdGVfZGF0YS0+dXNlX3h0YWxf bXV4Lmh3Owo+PiArCj4+ICvCoMKgwqAgcHJpdmF0ZV9kYXRhLT5iYXVkX2Rpdi5yZWcgPSBwb3J0 LT5tZW1iYXNlICsgQU1MX1VBUlRfUkVHNTsKPj4gK8KgwqDCoCBwcml2YXRlX2RhdGEtPmJhdWRf ZGl2LnNoaWZ0ID0gMDsKPj4gK8KgwqDCoCBwcml2YXRlX2RhdGEtPmJhdWRfZGl2LndpZHRoID0g MjM7Cj4+ICvCoMKgwqAgcHJpdmF0ZV9kYXRhLT5iYXVkX2Rpdi5mbGFncyA9IENMS19ESVZJREVS X1JPVU5EX0NMT1NFU1Q7Cj4+ICvCoMKgwqAgcmV0ID0gbWVzb25fdWFydF9yZWdpc3Rlcl9jbGso cG9ydCwgImJhdWRfZGl2IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmYmF1ZF9kaXZfcGFyZW50LCAxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICZjbGtfZGl2aWRlcl9vcHMsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnByaXZhdGVfZGF0YS0+YmF1ZF9kaXYuaHcpOwo+ PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ ICvCoMKgwqAgcHJpdmF0ZV9kYXRhLT5iYXVkX2NsayA9IGRldm1fY2xrX2h3X2dldF9jbGsocG9y dC0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJnByaXZhdGVfZGF0YS0+YmF1ZF9kaXYuaHcsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiYmF1ZF9yYXRlIik7 Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihwcml2YXRlX2RhdGEtPmJhdWRfY2xrKSkKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBkZXZfZXJyX3Byb2JlKHBvcnQtPmRldiwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUFRSX0VSUihwcml2YXRlX2RhdGEtPmJhdWRf Y2xrKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkZhaWxl ZCB0byByZXF1ZXN0IHRoZSAnYmF1ZF9yYXRlJyBjbG9ja1xuIik7Cj4+IMKgwqDCoMKgwqAgcmV0 dXJuIDA7Cj4+IMKgIH0KPj4gwqAgc3RhdGljIGludCBtZXNvbl91YXJ0X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+IMKgIHsKPj4gK8KgwqDCoCBzdHJ1Y3QgbWVzb25fdWFy dF9kYXRhICpwcml2YXRlX2RhdGE7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHJlc291cmNlICpyZXNf bWVtLCAqcmVzX2lycTsKPj4gK8KgwqDCoCBzdHJ1Y3QgY2xrICpjbGtfYmF1ZCwgKmNsa194dGFs Owo+PiArwqDCoMKgIGJvb2wgcmVnaXN0ZXJfY2xrODFfZGl2NDsKPj4gwqDCoMKgwqDCoCBzdHJ1 Y3QgdWFydF9wb3J0ICpwb3J0Owo+PiDCoMKgwqDCoMKgIGludCByZXQgPSAwOwo+PiDCoMKgwqDC oMKgIGludCBpZCA9IC0xOwo+PiBAQCAtNzExLDE4ICs4NTUsMzcgQEAgc3RhdGljIGludCBtZXNv bl91YXJ0X3Byb2JlKHN0cnVjdCAKPj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FQlVTWTsKPj4gwqDCoMKgwqDCoCB9Cj4+IC3CoMKgwqAgcG9y dCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHVhcnRfcG9ydCksIAo+ PiBHRlBfS0VSTkVMKTsKPj4gLcKgwqDCoCBpZiAoIXBvcnQpCj4+ICvCoMKgwqAgcHJpdmF0ZV9k YXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcHJpdmF0ZV9kYXRhKSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9LRVJORUwpOwo+PiAr wqDCoMKgIGlmICghcHJpdmF0ZV9kYXRhKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F Tk9NRU07Cj4+ICvCoMKgwqAgaWYgKGRldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ZGV2KSkK Pj4gK8KgwqDCoMKgwqDCoMKgIHByaXZhdGVfZGF0YS0+aGFzX3h0YWxfY2xrX3NlbCA9IHRydWU7 Cj4+ICsKPj4gK8KgwqDCoCBwcml2YXRlX2RhdGEtPnBjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYt PmRldiwgInBjbGsiKTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKHByaXZhdGVfZGF0YS0+cGNsaykp Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2LCBQVFJf RVJSKHByaXZhdGVfZGF0YS0+cGNsayksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICJGYWlsZWQgdG8gZ2V0IHRoZSAncGNsaycgY2xvY2tcbiIpOwo+PiArCj4+ ICvCoMKgwqAgY2xrX2JhdWQgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImJhdWQiKTsKPj4g K8KgwqDCoCBpZiAoSVNfRVJSKGNsa19iYXVkKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBk ZXZfZXJyX3Byb2JlKCZwZGV2LT5kZXYsIFBUUl9FUlIoY2xrX2JhdWQpLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRmFpbGVkIHRvIGdldCB0aGUgJ2JhdWQn IGNsb2NrXG4iKTsKPj4gKwo+PiArwqDCoMKgIGNsa194dGFsID0gZGV2bV9jbGtfZ2V0KCZwZGV2 LT5kZXYsICJ4dGFsIik7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihjbGtfeHRhbCkpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2LCBQVFJfRVJSKGNsa194 dGFsKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkZhaWxl ZCB0byBnZXQgdGhlICd4dGFsJyBjbG9ja1xuIik7Cj4+ICsKPj4gK8KgwqDCoCByZWdpc3Rlcl9j bGs4MV9kaXY0ID0gY2xrX2dldF9yYXRlKGNsa194dGFsKSAhPSAKPj4gY2xrX2dldF9yYXRlKGNs a19iYXVkKTsKPj4gKwo+PiArwqDCoMKgIHBvcnQgPSAmcHJpdmF0ZV9kYXRhLT5wb3J0Owo+PiAr Cj4+IMKgwqDCoMKgwqAgcG9ydC0+bWVtYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRl di0+ZGV2LCByZXNfbWVtKTsKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHBvcnQtPm1lbWJhc2Up KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIocG9ydC0+bWVtYmFzZSk7Cj4+ IC3CoMKgwqAgcmV0ID0gbWVzb25fdWFydF9wcm9iZV9jbG9ja3MocGRldiwgcG9ydCk7Cj4+IC3C oMKgwqAgaWYgKHJldCkKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IC0KPj4gwqDC oMKgwqDCoCBwb3J0LT5pb3R5cGUgPSBVUElPX01FTTsKPj4gwqDCoMKgwqDCoCBwb3J0LT5tYXBi YXNlID0gcmVzX21lbS0+c3RhcnQ7Cj4+IMKgwqDCoMKgwqAgcG9ydC0+bWFwc2l6ZSA9IHJlc291 cmNlX3NpemUocmVzX21lbSk7Cj4+IEBAIC03MzUsNiArODk4LDEyIEBAIHN0YXRpYyBpbnQgbWVz b25fdWFydF9wcm9iZShzdHJ1Y3QgCj4+IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gwqDCoMKg wqDCoCBwb3J0LT54X2NoYXIgPSAwOwo+PiDCoMKgwqDCoMKgIHBvcnQtPm9wcyA9ICZtZXNvbl91 YXJ0X29wczsKPj4gwqDCoMKgwqDCoCBwb3J0LT5maWZvc2l6ZSA9IDY0Owo+PiArwqDCoMKgIHBv cnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrX2JhdWQpOwo+PiArwqDCoMKgIHBvcnQtPnBy aXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKPj4gKwo+PiArwqDCoMKgIHJldCA9IG1lc29uX3Vh cnRfcHJvYmVfY2xvY2tzKHBvcnQsIHJlZ2lzdGVyX2NsazgxX2RpdjQpOwo+PiArwqDCoMKgIGlm IChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoMKgwqDCoMKgIG1lc29u X3BvcnRzW3BkZXYtPmlkXSA9IHBvcnQ7Cj4+IMKgwqDCoMKgwqAgcGxhdGZvcm1fc2V0X2RydmRh dGEocGRldiwgcG9ydCk7Cj4+IEBAIC03NjEsMTAgKzkzMCwzNCBAQCBzdGF0aWMgaW50IG1lc29u X3VhcnRfcmVtb3ZlKHN0cnVjdCAKPj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiDCoCB9Cj4+ IMKgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1lc29uX3VhcnRfZHRfbWF0Y2hb XSA9IHsKPj4gLcKgwqDCoCB7IC5jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb242LXVhcnQiIH0s Cj4+IC3CoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uOC11YXJ0IiB9LAo+PiAt wqDCoMKgIHsgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjhiLXVhcnQiIH0sCj4+IC3CoMKg wqAgeyAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uLWd4LXVhcnQiIH0sCj4gCj4gWW91IGNh bid0IGRyb3AgdXNlZCBpdGVtIHdpdGhvdXQgcGF0Y2ggZm9yIGR0cyBmaWxlcy4KPiAKPiBhcmNo L2FybTY0L2Jvb3QvZHRzL2FtbG9naWMkIGdyZXAgYW1sb2dpYyxtZXNvbi1neC11YXJ0ICp8d2Mg LWwKPiAxNgo+IFlvdSdyZSByaWdodC4gSSB3YXMgdGhvdWdodGxlc3MuIEknbSBnb2luZyB0byBh ZGQgdGhpcyBkZWxldGUuIERlbGV0ZSAKYWZ0ZXIgY2hhbmdpbmcgRFRTLgo+PiArwqDCoMKgIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIC5jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb242LXVhcnQiLAo+ PiArwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAodm9pZCAqKWZhbHNlLAo+PiArwqDCoMKgIH0sCj4+ ICvCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNv bjgtdWFydCIsCj4+ICvCoMKgwqDCoMKgwqDCoCAuZGF0YSA9ICh2b2lkICopZmFsc2UsCj4+ICvC oMKgwqAgfSwKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAuY29tcGF0aWJsZSA9ICJh bWxvZ2ljLG1lc29uOGItdWFydCIsCj4+ICvCoMKgwqDCoMKgwqDCoCAuZGF0YSA9ICh2b2lkICop ZmFsc2UsCj4+ICvCoMKgwqAgfSwKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAuY29t cGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uLWd4YmItdWFydCIsCj4+ICvCoMKgwqDCoMKgwqDCoCAu ZGF0YSA9ICh2b2lkICopZmFsc2UsCj4+ICvCoMKgwqAgfSwKPj4gK8KgwqDCoCB7Cj4+ICvCoMKg wqDCoMKgwqDCoCAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uLWd4bC11YXJ0IiwKPj4gK8Kg wqDCoMKgwqDCoMKgIC5kYXRhID0gKHZvaWQgKil0cnVlLAo+PiArwqDCoMKgIH0sCj4+ICvCoMKg wqAgewo+PiArwqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbi1nMTJh LXVhcnQiLAo+PiArwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAodm9pZCAqKXRydWUsCj4+ICvCoMKg wqAgfSwKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAuY29tcGF0aWJsZSA9ICJhbWxv Z2ljLG1lc29uLXM0LXVhcnQiLAo+PiArwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAodm9pZCAqKXRy dWUsCj4+ICvCoMKgwqAgfSwKPj4gwqDCoMKgwqDCoCB7IC8qIHNlbnRpbmVsICovIH0sCj4+IMKg IH07Cj4+IMKgIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1lc29uX3VhcnRfZHRfbWF0Y2gpOwo+ IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YW1sb2dpYyBtYWlsaW5nIGxpc3QKbGludXgtYW1sb2dpY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYW1sb2dpYwo=