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 86487C7EE25 for ; Fri, 9 Jun 2023 09:55:16 +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=BgOoL7Goq+n03tgv93iOlrUtST9d0mJcirCs5A68dkg=; b=Le0VNgkEZvfOf/ kA+blJ4s1pdBmPupnAdtkpsJ5zzsU8oXM4SRTTIm4TpHgYw1exsHyV69VulXZ2KGrmmzXo931Wg0F OSn8xh0ylT9lELxuWAguXAoay8FWASzqfnaQatwYIj44Wl5JZwSYSyUJP7bFtLNd7jeCBvKqHNtBP 61QS2x8n1aPD6TnV3O2ar0A/cLh6loqgWcdUnTqhIaNjP06DRtPycTi9K3cHvqKJpETY9hx4E8JLR 5ZlHGcq3Jo3/aww+4jjIbDEfrXGPJqpV1LokY7tY+GBnRWd8fK+k+dgauEjxir38pzRJMtenY/B57 HOV0rsnPI1l5lsuAbpYA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q7YpR-00CTwa-0P; Fri, 09 Jun 2023 09:54:45 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q7YpN-00CTvM-1C for linux-arm-kernel@lists.infradead.org; Fri, 09 Jun 2023 09:54:43 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E8BEEAB6; Fri, 9 Jun 2023 02:55:21 -0700 (PDT) Received: from [10.57.25.114] (unknown [10.57.25.114]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B17923F587; Fri, 9 Jun 2023 02:54:34 -0700 (PDT) Message-ID: <3f5f69e4-9324-152c-6581-8855a3dbb221@arm.com> Date: Fri, 9 Jun 2023 10:54:33 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.11.1 Subject: Re: [PATCH V11 05/10] arm64/perf: Add branch stack support in ARMV8 PMU To: Anshuman Khandual , Mark Rutland Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, will@kernel.org, catalin.marinas@arm.com, Mark Brown , James Clark , Rob Herring , Marc Zyngier , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , linux-perf-users@vger.kernel.org References: <20230531040428.501523-1-anshuman.khandual@arm.com> <20230531040428.501523-6-anshuman.khandual@arm.com> <290b577c-4740-d2e2-d236-c8bbe2f907b9@arm.com> <78cb22e2-c46e-d62d-fefc-b7963737499e@arm.com> From: Suzuki K Poulose In-Reply-To: <78cb22e2-c46e-d62d-fefc-b7963737499e@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230609_025441_501756_41A4DE70 X-CRM114-Status: GOOD ( 35.20 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMDkvMDYvMjAyMyAwNTowMCwgQW5zaHVtYW4gS2hhbmR1YWwgd3JvdGU6Cj4gCj4gCj4gT24g Ni84LzIzIDE1OjQzLCBTdXp1a2kgSyBQb3Vsb3NlIHdyb3RlOgo+PiBPbiAwNi8wNi8yMDIzIDEx OjM0LCBBbnNodW1hbiBLaGFuZHVhbCB3cm90ZToKPj4+Cj4+Pgo+Pj4gT24gNi81LzIzIDE3OjM1 LCBNYXJrIFJ1dGxhbmQgd3JvdGU6Cj4+Pj4gT24gV2VkLCBNYXkgMzEsIDIwMjMgYXQgMDk6MzQ6 MjNBTSArMDUzMCwgQW5zaHVtYW4gS2hhbmR1YWwgd3JvdGU6Cj4+Pj4+IFRoaXMgZW5hYmxlcyBz dXBwb3J0IGZvciBicmFuY2ggc3RhY2sgc2FtcGxpbmcgZXZlbnQgaW4gQVJNVjggUE1VLCBjaGVj a2luZwo+Pj4+PiBoYXNfYnJhbmNoX3N0YWNrKCkgb24gdGhlIGV2ZW50IGluc2lkZSAnc3RydWN0 IGFybV9wbXUnIGNhbGxiYWNrcy4gQWx0aG91Z2gKPj4+Pj4gdGhlc2UgYnJhbmNoIHN0YWNrIGhl bHBlcnMgYXJtdjhwbXVfYnJhbmNoX1hYWFhYKCkgYXJlIGp1c3QgZHVtbXkgZnVuY3Rpb25zCj4+ Pj4+IGZvciBub3cuIFdoaWxlIGhlcmUsIHRoaXMgYWxzbyBkZWZpbmVzIGFybV9wbXUncyBzY2hl ZF90YXNrKCkgY2FsbGJhY2sgd2l0aAo+Pj4+PiBhcm12OHBtdV9zY2hlZF90YXNrKCksIHdoaWNo IHJlc2V0cyB0aGUgYnJhbmNoIHJlY29yZCBidWZmZXIgb24gYSBzY2hlZF9pbi4KPj4+Pgo+Pj4+ IFRoaXMgZ2VuZXJhbGx5IGxvb2tzIGdvb2QsIGJ1dCBJIGhhdmUgYSBmZXcgY29tbWVudHMgYmVs b3cuCj4+Pj4KPj4+PiBbLi4uXQo+Pj4+Cj4+Pj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgYXJtdjhw bXVfYnJhbmNoX3ZhbGlkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4+Pj4gK3sKPj4+Pj4g K8KgwqDCoCBXQVJOX09OX09OQ0UoIWhhc19icmFuY2hfc3RhY2soZXZlbnQpKTsKPj4+Pj4gK8Kg wqDCoCByZXR1cm4gZmFsc2U7Cj4+Pj4+ICt9Cj4+Pj4KPj4+PiBJSVVDIHRoaXMgaXMgZm9yIHZh bGlkYXRpbmcgdGhlIGF0dHIsIHNvIGNvdWxkIHdlIHBsZWFzZSBuYW1lIHRoaXMKPj4+PiBhcm12 OHBtdV9icmFuY2hfYXR0cl92YWxpZCgpID8KPj4+Cj4+PiBTdXJlLCB3aWxsIGNoYW5nZSB0aGUg bmFtZSBhbmQgdXBkYXRlZCBjYWxsIHNpdGVzLgo+Pj4KPj4+Pgo+Pj4+IFsuLi5dCj4+Pj4KPj4+ Pj4gK3N0YXRpYyBpbnQgYnJhbmNoX3JlY29yZHNfYWxsb2Moc3RydWN0IGFybV9wbXUgKmFybXBt dSkKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgcG11X2h3X2V2ZW50cyAqZXZlbnRzOwo+ Pj4+PiArwqDCoMKgIGludCBjcHU7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBmb3JfZWFjaF9wb3Nz aWJsZV9jcHUoY3B1KSB7Cj4+Cj4+IFNob3VsZG4ndCB0aGlzIGJlIHN1cHBvcnRlZF9wbXVzID8g aS5lLgo+PiAgwqDCoMKgwqBmb3JfZWFjaF9jcHUoY3B1LCAmYXJtcG11LT5zdXBwb3J0ZWRfY3B1 cykgewo+Pgo+Pgo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZXZlbnRzID0gcGVyX2NwdV9wdHIoYXJt cG11LT5od19ldmVudHMsIGNwdSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBldmVudHMtPmJyYW5j aGVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJyYW5jaF9yZWNvcmRzKSwgR0ZQX0tFUk5FTCk7 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWV2ZW50cy0+YnJhbmNoZXMpCj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pgo+PiBEbyB3ZSBuZWVkIHRvIGZy ZWUgdGhlIGFsbG9jYXRlZCBicmFuY2hlcyBhbHJlYWR5ID8KPiAKPiBUaGlzIGdldHMgZml4ZWQg aW4gdGhlIG5leHQgcGF0Y2ggdmlhIHBlci1jcHUgYWxsb2NhdGlvbi4gSSB3aWxsCj4gbW92ZSBh bmQgZm9sZCB0aGUgY29kZSBibG9jayBpbiBoZXJlLiBVcGRhdGVkIGZ1bmN0aW9uIHdpbGwgbG9v awo+IGxpa2UgdGhlIGZvbGxvd2luZy4KPiAKPiBzdGF0aWMgaW50IGJyYW5jaF9yZWNvcmRzX2Fs bG9jKHN0cnVjdCBhcm1fcG11ICphcm1wbXUpCj4gewo+ICAgICAgICAgIHN0cnVjdCBicmFuY2hf cmVjb3JkcyBfX3BlcmNwdSAqcmVjb3JkczsKPiAgICAgICAgICBpbnQgY3B1Owo+IAo+ICAgICAg ICAgIHJlY29yZHMgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBicmFuY2hfcmVjb3JkcywgR0ZQ X0tFUk5FTCk7Cj4gICAgICAgICAgaWYgKCFyZWNvcmRzKQo+ICAgICAgICAgICAgICAgICAgcmV0 dXJuIC1FTk9NRU07Cj4gCj4gICAgICAgICAgLyoKPiAgICAgICAgICAgKiBGSVhNRTogTWVtb3J5 IGFsbG9jYXRlZCB2aWEgcmVjb3JkcyBnZXRzIGNvbXBsZXRlbHkKPiAgICAgICAgICAgKiBjb25z dW1lZCBoZXJlLCBuZXZlciByZXF1aXJlZCB0byBiZSBmcmVlZCB1cCBsYXRlci4gSGVuY2UKPiAg ICAgICAgICAgKiBsb3NpbmcgYWNjZXNzIHRvIG9uIHN0YWNrICdyZWNvcmRzJyBpcyBhY2NlcHRh YmxlLgo+ICAgICAgICAgICAqIE90aGVyd2lzZSB0aGlzIGFsbG9jIGhhbmRsZSBoYXMgdG8gYmUg c2F2ZWQgc29tZSB3aGVyZS4KPiAgICAgICAgICAgKi8KPiAgICAgICAgICBmb3JfZWFjaF9wb3Nz aWJsZV9jcHUoY3B1KSB7Cj4gICAgICAgICAgICAgICAgICBzdHJ1Y3QgcG11X2h3X2V2ZW50cyAq ZXZlbnRzX2NwdTsKPiAgICAgICAgICAgICAgICAgIHN0cnVjdCBicmFuY2hfcmVjb3JkcyAqcmVj b3Jkc19jcHU7Cj4gCj4gICAgICAgICAgICAgICAgICBldmVudHNfY3B1ID0gcGVyX2NwdV9wdHIo YXJtcG11LT5od19ldmVudHMsIGNwdSk7Cj4gICAgICAgICAgICAgICAgICByZWNvcmRzX2NwdSA9 IHBlcl9jcHVfcHRyKHJlY29yZHMsIGNwdSk7Cj4gICAgICAgICAgICAgICAgICBldmVudHNfY3B1 LT5icmFuY2hlcyA9IHJlY29yZHNfY3B1Owo+ICAgICAgICAgIH0KPiAgICAgICAgICByZXR1cm4g MDsKPiB9Cj4gCj4gUmVnYXJkaW5nIHRoZSBjcHVtYXNrIGFyZ3VtZW50IGluIGZvcl9lYWNoX2Nw dSgpLgo+IAo+IC0gaHdfZXZlbnRzIGlzIGEgX19wZXJjcHUgcG9pbnRlciBpbiBzdHJ1Y3QgYXJt X3BtdQo+IAo+IAktIHBtdS0+aHdfZXZlbnRzID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgcG11 X2h3X2V2ZW50cywgR0ZQX0tFUk5FTCkKPiAKPiAKPiAtICdyZWNvcmRzJyBhYm92ZSBpcyBiZWlu ZyBhbGxvY2F0ZWQgdmlhIGFsbG9jX3BlcmNwdV9nZnAoKQo+IAo+IAktIHJlY29yZHMgPSBhbGxv Y19wZXJjcHVfZ2ZwKHN0cnVjdCBicmFuY2hfcmVjb3JkcywgR0ZQX0tFUk5FTCkKCgo+IAo+IElm ICdhcm1wbXUtPnN1cHBvcnRlZF9jcHVzJyBtYXNrIGdldHMgdXNlZCBpbnN0ZWFkIG9mIHBvc3Np YmxlIGNwdSBtYXNrLAo+IHdvdWxkIG5vdCB0aGVyZSBiZSBzb21lIGRhbmdsaW5nIHBlci1jcHUg YnJhbmNoX3JlY29yZCBhbGxvY2F0ZWQgYXJlYXMsCj4gdGhhdCByZW1haW4gdW5zaWduZWQgPyBB c3NpZ25pbmcgYWxsIG9mIHRoZW0gYmFjayBpbnRvIGh3X2V2ZW50cyBzaG91bGQKPiBiZSBoYXJt bGVzcy4KClRoYXRzIGJlY2F1c2UgeW91IGFyZSB1c2luZyBhbGxvY19wZXJjcHUgZm9yIHJlY29y ZHMgPyBXaXRoIHRoZSBjdXJyZW50CnByb3Bvc2VkIGNvZGUsIGlmIHRoZXJlIGFyZSB0d28gZGlm ZmVyZW50IGFybV9wbXVzIG9uIHRoZSBzeXN0ZW0sIHlvdQp3b3VsZCBlbmQgdXAgd2FzdGluZyAx eHBlcl9jcHUgYnJhbmNoX3JlY29yZHMgPyBBbmQgaWYgdGhlcmUgYXJlIDMsCjJ4cGVyX2NwdSBn ZXRzIHdhc3RlZCA/Cgo+IAo+Pgo+Pj4+PiArwqDCoMKgIH0KPj4KPj4KPj4gTWF5IGJlOgo+PiAg wqDCoMKgwqBpbnQgcmV0ID0gMDsKPj4KPj4gIMKgwqDCoMKgZm9yX2VhY2hfY3B1KGNwdSwgJmFy bXBtdS0+c3VwcG9ydGVkX2NwdXMpIHsKPj4gIMKgwqDCoMKgwqDCoMKgIGV2ZW50cyA9IHBlcl9j cHVfcHRyKGFybXBtdS0+aHdfZXZlbnRzLCBjcHUpOwo+PiAgwqDCoMKgwqDCoMKgwqAgZXZlbnRz LT5icmFuY2hlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdMKgwqDCoMKgwqDCoMKgwqAgYnJhbmNo X3JlY29yZHMpLCBHRlBfS0VSTkVMKTsKPj4gICAgICAgICAKPj4gIMKgwqDCoMKgwqDCoMKgIGlm ICghZXZlbnRzLT5icmFuY2hlcykgewo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAt RU5PTUVNOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gIMKgwqDCoMKgwqDC oMKgIH0KPj4gIMKgwqDCoMKgfQo+Pgo+PiAgwqDCoMKgwqBpZiAoIXJldCkKPj4gIMKgwqDCoMKg wqDCoMKgIHJldHVybiAwOwo+Pgo+PiAgwqDCoMKgwqBmb3JfZWFjaF9jcHUoY3B1LCAmYXJtcG11 LT5zdXBwb3J0ZWRfY3B1cykgewo+PiAgwqDCoMKgwqDCoMKgwqAgZXZlbnRzID0gcGVyX2NwdV9w dHIoYXJtcG11LT5od19ldmVudHMsIGNwdSk7Cj4+ICDCoMKgwqDCoMKgwqDCoCBpZiAoIWV2ZW50 cy0+YnJhbmNoZXMpCj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiAgwqDCoMKg wqDCoMKgwqAga2ZyZWUoZXZlbnRzLT5icmFuY2hlcyk7Cj4+ICDCoMKgwqDCoH0KPj4gIMKgwqDC oMKgcmV0dXJuIHJldDsKPj4gICAgICAKPj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+Pgo+Pj4+ IFRoaXMgbGVha3MgbWVtb3J5IGlmIGFueSBhbGxvY2F0aW9uIGZhaWxzLCBhbmQgdGhlIG5leHQg cGF0Y2ggcmVwbGFjZXMgdGhpcwo+Pj4+IGNvZGUgZW50aXJlbHkuCj4+Pgo+Pj4gT2theS4KPj4+ Cj4+Pj4KPj4+PiBQbGVhc2UgYWRkIHRoaXMgb25jZSBpbiBhIHdvcmtpbmcgc3RhdGUuIEVpdGhl ciB1c2UgdGhlIHBlcmNwdSBhbGxvY2F0aW9uCj4+Pj4gdHJpY2sgaW4gdGhlIG5leHQgcGF0Y2gg ZnJvbSB0aGUgc3RhcnQsIG9yIGhhdmUgdGhpcyBremFsbG9jKCkgd2l0aCBhCj4+Pj4gY29ycmVz cG9uZGluZyBrZnJlZSgpIGluIGFuIGVycm9yIHBhdGguCj4+Pgo+Pj4gSSB3aWxsIGNoYW5nZSBi cmFuY2hfcmVjb3Jkc19hbGxvYygpIGFzIHN1Z2dlc3RlZCBpbiB0aGUgbmV4dCBwYXRjaCdzIHRo cmVhZAo+Pj4gYW5kIGZvbGQgdGhvc2UgY2hhbmdlcyBoZXJlIGluIHRoaXMgcGF0Y2guCj4+Pgo+ Pj4+Cj4+Pj4+ICDCoCB9Cj4+Pj4+ICDCoCDCoCBzdGF0aWMgaW50IGFybXY4cG11X3Byb2JlX3Bt dShzdHJ1Y3QgYXJtX3BtdSAqY3B1X3BtdSkKPj4+Pj4gQEAgLTExNDUsMTIgKzExNjIsMjQgQEAg c3RhdGljIGludCBhcm12OHBtdV9wcm9iZV9wbXUoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCj4+ Pj4+ICDCoMKgwqDCoMKgIH07Cj4+Pj4+ICDCoMKgwqDCoMKgIGludCByZXQ7Cj4+Pj4+ICDCoCAr wqDCoMKgIHJldCA9IGFybXY4cG11X3ByaXZhdGVfYWxsb2MoY3B1X3BtdSk7Cj4+Pj4+ICvCoMKg wqAgaWYgKHJldCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+ICsKPj4+ Pj4gIMKgwqDCoMKgwqAgcmV0ID0gc21wX2NhbGxfZnVuY3Rpb25fYW55KCZjcHVfcG11LT5zdXBw b3J0ZWRfY3B1cywKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBfX2FybXY4cG11X3Byb2JlX3BtdSwKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAmcHJvYmUsIDEpOwo+Pj4+PiAgwqDCoMKgwqDCoCBpZiAocmV0 KQo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+ICDCoCArwqDCoMKg IGlmIChhcm1fcG11X2JyYW5jaF9zdGFja19zdXBwb3J0ZWQoY3B1X3BtdSkpIHsKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldCA9IGJyYW5jaF9yZWNvcmRzX2FsbG9jKGNwdV9wbXUpOwo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIHJldDsKPj4+Pj4gK8KgwqDCoCB9IGVsc2Ugewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgYXJt djhwbXVfcHJpdmF0ZV9mcmVlKGNwdV9wbXUpOwo+Pj4+PiArwqDCoMKgIH0KPj4+Pgo+Pj4+IEkg c2VlIGZyb20gdGhlIG5leHQgcGF0Y2ggdGhhdCAicHJpdmF0ZSIgaXMgZm91ciBpbnRzLCBzbyBw bGVhc2UganVzdCBhZGQgdGhhdAo+Pj4+IHRvIHN0cnVjdCBhcm1fcG11IHVuZGVyIGFuIGlmZGVm IENPTkZJR19BUk02NF9CUkJFLiBUaGF0J2xsIHNpbXBsaWZ5IHRoaXMsIGFuZAo+Pj4+IGlmIHdl IGVuZCB1cCBuZWVkaW5nIG1vcmUgc3BhY2UgaW4gZnV0dXJlIHdlIGNhbiBjb25zaWRlciBmYWN0 b3JpbmcgaXQgb3V0Lgo+Pj4KPj4+IHN0cnVjdCBhcm1fcG11IHsKPj4+ICDCoMKgwqDCoC4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KPj4+ICDCoMKgwqDCoMKgwqDCoMKg IC8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIGF0dHJpYnV0ZXMgKi8KPj4+ICDCoMKgwqDCoMKg wqDCoMKgIHZvaWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpwcml2YXRlOwo+Pj4gfQo+Pj4KPj4+ IHByaXZhdGUgcG9pbnRlciBoZXJlIGNyZWF0ZXMgYW4gYWJzdHJhY3Rpb24gZm9yIGdpdmVuIHBt dSBpbXBsZW1lbnRhdGlvbgo+Pj4gdG8gaGlkZSBhdHRyaWJ1dGUgZGV0YWlscyB3aXRob3V0IG1h a2luZyBpdCBrbm93biB0byBjb3JlIGFybSBwbXUgbGF5ZXIuCj4+PiBBbHRob3VnaCBhZGRpbmcg aWZkZWYgQ09ORklHX0FSTTY0X0JSQkUgc29sdmVzIHRoZSBwcm9ibGVtIGFzIG1lbnRpb25lZAo+ Pj4gYWJvdmUsIGl0IGRvZXMgYnJlYWsgdGhhdCBhYnN0cmFjdGlvbi4gQ3VycmVudGx5IGFybV9w bXUgbGF5ZXIgaXMgYXdhcmUKPj4+IGFib3V0ICdicmFuY2ggcmVjb3JkcycgYnV0IG5vdCBhYm91 dCBCUkJFIGluIHBhcnRpY3VsYXIgd2hpY2ggdGhlIGRyaXZlcgo+Pj4gYWRkcyBsYXRlciBvbi4g SSBzdWdnZXN0IHdlIHNob3VsZCBub3QgYnJlYWsgdGhhdCBhYnN0cmFjdGlvbi4KPj4+Cj4+PiBJ bnN0ZWFkIGEgZ2xvYmFsICdzdGF0aWMgc3RydWN0IGJyYmVfaHdfYXR0cicgaW4gZHJpdmVycy9w ZXJmL2FybV9icmJlLmMKPj4+IGNhbiBiZSBpbml0aWFsaXplZCBpbnRvIGFybV9wbXUtPnByaXZh dGUgZHVyaW5nIGFybXY4cG11X2JyYW5jaF9wcm9iZSgpLAo+Pj4gd2hpY2ggd2lsbCBhbHNvIHNv bHZlIHRoZSBhbGxvY2F0aW9uLWZyZWUgcHJvYmxlbS4gQWxzbyBzaW1pbGFyIGhlbHBlcnMKPj4+ IGFybXY4cG11X3Rhc2tfY3R4X2FsbG9jKCkvZnJlZSgpIGNvdWxkIGJlIGRlZmluZWQgdG8gbWFu YWdlIHRhc2sgY29udGV4dAo+Pj4gY2FjaGUgaS5lIGFybV9wbXUtPnBtdS50YXNrX2N0eF9jYWNo ZSBpbmRlcGVuZGVudGx5Lgo+Pj4KPj4+IEJ1dCBub3cgYXJtdjhwbXVfdGFza19jdHhfYWxsb2Mo KSBjYW4gYmUgY2FsbGVkIGFmdGVyIHBtdSBwcm9iZSBjb25maXJtcwo+Pj4gdG8gaGF2ZSBhcm1f cG11LT5oYXNfYnJhbmNoX3N0YWNrLgo+Pj4KPj4+Pgo+Pj4+PiArCj4+Pj4+ICDCoMKgwqDCoMKg IHJldHVybiBwcm9iZS5wcmVzZW50ID8gMCA6IC1FTk9ERVY7Cj4+Pj4+ICDCoCB9Cj4+Pj4KPj4+ PiBJdCBhbHNvIHNlZW1zIG9kZCB0byBjZWNrIHByb2JlLnByZXNlbnQgKmFmdGVyKiBjaGVja2lu Zwo+Pj4+IGFybV9wbXVfYnJhbmNoX3N0YWNrX3N1cHBvcnRlZCgpLgo+Pj4KPj4+IEkgd2lsbCBy ZW9yZ2FuaXplIGFzIHN1Z2dlc3RlZCBiZWxvdy4KPj4+Cj4+Pj4KPj4+PiBXaXRoIHRoZSBhbGxv Y2F0aW9uIHJlbW92ZWQgSSB0aGluayB0aGlzIGNhbiBiZSB3cml0dGVuIG1vcmUgY2xlYXJseSBh czoKPj4+Pgo+Pj4+IHwgc3RhdGljIGludCBhcm12OHBtdV9wcm9iZV9wbXUoc3RydWN0IGFybV9w bXUgKmNwdV9wbXUpCj4+Pj4gfCB7Cj4+Pj4gfMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFybXY4 cG11X3Byb2JlX2luZm8gcHJvYmUgPSB7Cj4+Pj4gfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC5wbXUgPSBjcHVfcG11LAo+Pj4+IHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAucHJlc2VudCA9IGZhbHNlLAo+Pj4+IHzCoMKgwqDCoMKgwqDCoMKgIH07Cj4+Pj4gfMKg wqDCoMKgwqDCoMKgwqAgaW50IHJldDsKPj4+PiB8Cj4+Pj4gfMKgwqDCoMKgwqDCoMKgwqAgcmV0 ID0gc21wX2NhbGxfZnVuY3Rpb25fYW55KCZjcHVfcG11LT5zdXBwb3J0ZWRfY3B1cywKPj4+PiB8 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIF9fYXJtdjhwbXVfcHJvYmVfcG11LAo+Pj4+IHzCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJnByb2JlLCAxKTsKPj4+PiB8wqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4+IHzCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0OyA+IHwKPj4+PiB8wqDCoMKg wqDCoMKgwqDCoCBpZiAoIXByb2JlLnByZXNlbnQpCj4+Pj4gfMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREVWOwo+Pj4+IHwKPj4+PiB8wqDCoMKgwqDCoMKgwqDC oCBpZiAoYXJtX3BtdV9icmFuY2hfc3RhY2tfc3VwcG9ydGVkKGNwdV9wbXUpKQo+Pj4+IHzCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBicmFuY2hfcmVjb3Jkc19hbGxvYyhj cHVfcG11KTsKPj4+PiB8Cj4+Pj4gfMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+PiB8 IH0KPj4KPj4gQ291bGQgd2Ugbm90IHNpbXBsaWZ5IHRoaXMgYXMgYmVsb3cgYW5kIGtlZXAgdGhl IGFic3RyYWN0aW9uLCBzaW5jZSB3ZQo+PiBhbHJlYWR5IGhhdmUgaXQgPwo+IAo+IE5vLCB0aGVy ZSBpcyBhbiBhbGxvY2F0aW9uIGRlcGVuZGVuY3kgYmVmb3JlIHRoZSBzbXAgY2FsbCBjb250ZXh0 LgoKT2ssIEkgd2Fzbid0IGF3YXJlIG9mIHRoYXQuIENvdWxkIHdlIG5vdCByZWFkIHdoYXRldmVy IHdlIG5lZWQgdG8ga25vdwphYm91dCB0aGUgYnJiZSBpbiBhcm12OHBtdV9wcm9iZV9pbmZvIGFu ZCBwcm9jZXNzIGl0IGF0IHRoZSBjYWxsZXIgaGVyZT8KQW5kIHRoZW4gZG8gdGhlIHRoZSBwcml2 YXRlX2FsbG9jIGV0YyBhcyB3ZSBuZWVkID8KClN1enVraQoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK