From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [20.232.28.96]) by sourceware.org (Postfix) with SMTP id 51B5E3858C54 for ; Thu, 1 Dec 2022 03:07:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 51B5E3858C54 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com Received: from E0001797DT (unknown [113.200.72.66]) by app2 (Coremail) with SMTP id EggMCgBn9i9aGohjzG8UAA--.48570S2; Thu, 01 Dec 2022 11:07:06 +0800 (CST) Date: Thu, 1 Dec 2022 11:07:06 +0800 From: "Fei Gao" To: "Palmer Dabbelt" Cc: gcc-patches , jeffreyalaw , "Kito Cheng" , gaofei Subject: Re: [PATCH] RISC-V: optimize stack manipulation in save-restore References: X-Priority: 3 X-GUID: AF3F8F7B-2AB2-44A2-B70F-E3D0ACFBA9F6 X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <2022120111070592771334@eswincomputing.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-CM-TRANSID:EggMCgBn9i9aGohjzG8UAA--.48570S2 X-Coremail-Antispam: 1UD129KBjvJXoW3Kr1DWr43JF1Utr1xWr13twb_yoWkGr1rpr s5tFZxAryUJrn5Cry7Jr1rJFyfJ3ykK3W5GryvqF10yrsrAr40gFW2gr1q9ryUZF4kAr10 yF1DWrnru3ZrJaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvj1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s1l8cAvFVAK 0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVWDJVCq3wA2z4 x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l 84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I 8CrVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VW8Jr1UJr1lOx8S6xCaFVCjc4AY 6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACY4xI67k042 43AVAKzVAKj4xxMxkIecxEwVAFwVW8GwCF04k20xvY0x0EwIxGrwCF04k20xvE74AGY7Cv 6cx26r4UJr1UJwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI 8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIxkGc2Ij64vIr41l IxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIx AIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2 jsIEc7CjxVAFwI0_Jr0_Gr1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjfUxO JeDUUUU X-CM-SenderInfo: xjdrwv3l6h245lqf0zpsxwx03jof0z/ X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: T24gMjAyMi0xMi0wMcKgMDY6NTAgwqBQYWxtZXIgRGFiYmVsdCA8cGFsbWVyQGRhYmJlbHQuY29t PiB3cm90ZToKPgo+T24gV2VkLCAzMCBOb3YgMjAyMiAwMDozNzoxNyBQU1QgKC0wODAwKSwgZ2Fv ZmVpQGVzd2luY29tcHV0aW5nLmNvbSB3cm90ZToKPj4gVGhlIHN0YWNrIHRoYXQgc2F2ZS1yZXN0 b3JlIHJlc2VydmVzIGlzIG5vdCB3ZWxsIGFjY3VtdWxhdGVkIGluIHN0YWNrIGFsbG9jYXRpb24g YW5kIGRlYWxsb2NhdGlvbi4KPj4gVGhpcyBwYXRjaCBhbGxvd3MgbGVzcyBpbnN0cnVjdGlvbnMg dG8gYmUgdXNlZCBpbiBzdGFjayBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaWYgc2F2ZS1y ZXN0b3JlIGVuYWJsZWQsCj4+IGFuZCBhbHNvIGEgbXVjaCBjbGVhciBsb2dpYyBmb3Igc2F2ZS1y ZXN0b3JlIHN0YWNrIG1hbmlwdWxhdGlvbi4KPj4KPj4gYmVmb3JlIHBhdGNoOgo+PiBiYXI6Cj4+ IGNhbGwJdDAsX19yaXNjdl9zYXZlXzQKPj4gYWRkaQlzcCxzcCwtNjQKPj4gLi4uCj4+IGxpCXQw LC0xMjI4OAo+PiBhZGRpCXQwLHQwLC0xOTY4ICMgb3B0aW1pemVkIG91dCBhZnRlciBwYXRjaAo+ PiBhZGQJc3Asc3AsdDAgIyBwcm9sb2d1ZQo+PiAuLi4KPj4gbGkJdDAsMTIyODggIyBlcGlsb2d1 ZQo+PiBhZGRpCXQwLHQwLDIwMDAgIyBvcHRpbWl6ZWQgb3V0IGFmdGVyIHBhdGNoCj4+IGFkZAlz cCxzcCx0MAo+PiAuLi4KPj4gYWRkaQlzcCxzcCwzMgo+PiB0YWlsCV9fcmlzY3ZfcmVzdG9yZV80 Cj4+Cj4+IGFmdGVyIHBhdGNoOgo+PiBiYXI6Cj4+IGNhbGwJdDAsX19yaXNjdl9zYXZlXzQKPj4g YWRkaQlzcCxzcCwtMjAzMgo+PiAuLi4KPj4gbGkJdDAsLTEyMjg4Cj4+IGFkZAlzcCxzcCx0MCAj IHByb2xvZ3VlCj4+IC4uLgo+PiBsaQl0MCwxMjI4OCAjIGVwaWxvZ3VlCj4+IGFkZAlzcCxzcCx0 MAo+PiAuLi4KPj4gYWRkaQlzcCxzcCwyMDMyCj4+IHRhaWwJX19yaXNjdl9yZXN0b3JlXzQKPj4K Pj4gZ2NjL0NoYW5nZUxvZzoKPj4KPj7CoMKgwqDCoMKgwqDCoMKgICogY29uZmlnL3Jpc2N2L3Jp c2N2LmNjIChyaXNjdl9maXJzdF9zdGFja19zdGVwKTogYWRkIGEgbmV3IGZ1bmN0aW9uIHBhcmFt ZXRlciByZW1haW5pbmdfc2l6ZS4KPj7CoMKgwqDCoMKgwqDCoMKgIChyaXNjdl9jb21wdXRlX2Zy YW1lX2luZm8pOiBhZGFwdCBuZXcgcmlzY3ZfZmlyc3Rfc3RhY2tfc3RlcCBpbnRlcmZhY2UuCj4+ wqDCoMKgwqDCoMKgwqDCoCAocmlzY3ZfZXhwYW5kX3Byb2xvZ3VlKTogY29uc2lkZXIgc2F2ZS1y ZXN0b3JlIGluIHN0YWNrIGFsbG9jYXRpb24uCj4+wqDCoMKgwqDCoMKgwqDCoCAocmlzY3ZfZXhw YW5kX2VwaWxvZ3VlKTogY29uc2lkZXIgc2F2ZS1yZXN0b3JlIGluIHN0YWNrIGRlYWxsb2NhdGlv bi4KPj4KPj4gZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6Cj4+Cj4+wqDCoMKgwqDCoMKgwqDCoCAq IGdjYy50YXJnZXQvcmlzY3Yvc3RhY2tfc2F2ZV9yZXN0b3JlLmM6IE5ldyB0ZXN0Lgo+PiAtLS0K Pj7CoCBnY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmNjwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8IDU4ICsrKysrKysrKystLS0tLS0tLS0KPj7CoCAuLi4vZ2NjLnRhcmdl dC9yaXNjdi9zdGFja19zYXZlX3Jlc3RvcmUuY8KgwqDCoMKgIHwgNDAgKysrKysrKysrKysrKwo+ PsKgIDIgZmlsZXMgY2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCj4+ wqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zdGFj a19zYXZlX3Jlc3RvcmUuYwo+Cj5JIGd1ZXNzIHdpdGggdGhlIFJJU0MtViBiYWNrZW5kIHN0aWxs IGJlaW5nIG9wZW4gZm9yIHRoaW5ncyBhcyBiaWcgYXMKPnRoZSBWIHBvcnQgd2Ugc2hvdWxkIHBy b2JhYmx5IGJlIHRha2luZyBjb2RlIGxpa2UgdGhpcyBhcyB3ZWxsP8KgIEkKPndvdWxkbid0IGJl IG9wcG9zZWQgdG8gbWFraW5nIGFuIGV4Y2VwdGlvbiBmb3IgdGhlIFYgY29kZSBhbmQgaG9sZGlu Zwo+ZXZlcnl0aGluZyBlbHNlIGJhY2ssIHRob3VnaC4KPgo+PiBkaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9yaXNjdi9yaXNjdi5jYyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YuY2MKPj4gaW5kZXgg MDViZGJhNWFiNGQuLjllOTJlNzI5YTVmIDEwMDY0NAo+PiAtLS0gYS9nY2MvY29uZmlnL3Jpc2N2 L3Jpc2N2LmNjCj4+ICsrKyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YuY2MKPj4gQEAgLTQ2MzQs NyArNDYzNCw3IEBAIHJpc2N2X3NhdmVfbGliY2FsbF9jb3VudCAodW5zaWduZWQgbWFzaykKPj7C oMKgwqDCoCBUaGV5IGRlY3JlYXNlIHN0YWNrX3BvaW50ZXJfcnR4IGJ1dCBsZWF2ZSBmcmFtZV9w b2ludGVyX3J0eCBhbmQKPj7CoMKgwqDCoCBoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4IHVuY2hhbmdl ZC7CoCAqLwo+Pgo+PiAtc3RhdGljIEhPU1RfV0lERV9JTlQgcmlzY3ZfZmlyc3Rfc3RhY2tfc3Rl cCAoc3RydWN0IHJpc2N2X2ZyYW1lX2luZm8gKmZyYW1lKTsKPj4gK3N0YXRpYyBIT1NUX1dJREVf SU5UIHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAgKHN0cnVjdCByaXNjdl9mcmFtZV9pbmZvICpmcmFt ZSwgcG9seV9pbnQ2NCByZW1haW5pbmdfc2l6ZSk7Cj4+Cj4+wqAgLyogSGFuZGxlIHN0YWNrIGFs aWduIGZvciBwb2x5X2ludC7CoCAqLwo+PsKgIHN0YXRpYyBwb2x5X2ludDY0Cj4+IEBAIC00NjYz LDcgKzQ2NjMsNyBAQCByaXNjdl9jb21wdXRlX2ZyYW1lX2luZm8gKHZvaWQpCj4+wqDCoMKgwqDC oMKgIHNhdmUvcmVzdG9yZSB0MC7CoCBXZSBjaGVjayBmb3IgdGhpcyBiZWZvcmUgY2xlYXJpbmcg dGhlIGZyYW1lIHN0cnVjdC7CoCAqLwo+PsKgwqDCoCBpZiAoY2Z1bi0+bWFjaGluZS0+aW50ZXJy dXB0X2hhbmRsZXJfcCkKPj7CoMKgwqDCoMKgIHsKPj4gLcKgwqDCoMKgwqAgSE9TVF9XSURFX0lO VCBzdGVwMSA9IHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAgKGZyYW1lKTsKPj4gK8KgwqDCoMKgwqAg SE9TVF9XSURFX0lOVCBzdGVwMSA9IHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAgKGZyYW1lLCBmcmFt ZS0+dG90YWxfc2l6ZSk7Cj4+wqDCoMKgwqDCoMKgwqAgaWYgKCEgUE9MWV9TTUFMTF9PUEVSQU5E X1AgKChmcmFtZS0+dG90YWxfc2l6ZSAtIHN0ZXAxKSkpCj4+wqAgaW50ZXJydXB0X3NhdmVfcHJv bG9ndWVfdGVtcCA9IHRydWU7Cj4+wqDCoMKgwqDCoCB9Cj4+IEBAIC00OTEzLDMxICs0OTEzLDMx IEBAIHJpc2N2X3Jlc3RvcmVfcmVnIChydHggcmVnLCBydHggbWVtKQo+PsKgwqDCoMKgIHdpdGhv dXQgYWRkaW5nIGV4dHJhIGluc3RydWN0aW9ucy7CoCAqLwo+Pgo+PsKgIHN0YXRpYyBIT1NUX1dJ REVfSU5UCj4+IC1yaXNjdl9maXJzdF9zdGFja19zdGVwIChzdHJ1Y3QgcmlzY3ZfZnJhbWVfaW5m byAqZnJhbWUpCj4+ICtyaXNjdl9maXJzdF9zdGFja19zdGVwIChzdHJ1Y3QgcmlzY3ZfZnJhbWVf aW5mbyAqZnJhbWUsIHBvbHlfaW50NjQgcmVtYWluaW5nX3NpemUpCj4+wqAgewo+PiAtwqAgSE9T VF9XSURFX0lOVCBmcmFtZV90b3RhbF9jb25zdGFudF9zaXplOwo+PiAtwqAgaWYgKCFmcmFtZS0+ dG90YWxfc2l6ZS5pc19jb25zdGFudCAoKSkKPj4gLcKgwqDCoCBmcmFtZV90b3RhbF9jb25zdGFu dF9zaXplCj4+IC3CoMKgwqDCoMKgID0gcmlzY3Zfc3RhY2tfYWxpZ24gKGZyYW1lLT50b3RhbF9z aXplLmNvZWZmc1swXSkKPj4gLQktIHJpc2N2X3N0YWNrX2FsaWduIChmcmFtZS0+dG90YWxfc2l6 ZS5jb2VmZnNbMV0pOwo+PiArwqAgSE9TVF9XSURFX0lOVCByZW1haW5pbmdfY29uc3Rfc2l6ZTsK Pj4gK8KgIGlmICghcmVtYWluaW5nX3NpemUuaXNfY29uc3RhbnQgKCkpCj4+ICvCoMKgwqAgcmVt YWluaW5nX2NvbnN0X3NpemUKPj4gK8KgwqDCoMKgwqAgPSByaXNjdl9zdGFja19hbGlnbiAocmVt YWluaW5nX3NpemUuY29lZmZzWzBdKQo+PiArCS0gcmlzY3Zfc3RhY2tfYWxpZ24gKHJlbWFpbmlu Z19zaXplLmNvZWZmc1sxXSk7Cj4KPlRoZSBhbGlnbm1lbnQgbG9va3Mgb2ZmIGhlcmUsIGF0IGxl YXN0IGluIHRoZSBlbWFpbC7CoCBXb3J0aCBmaXhpbmcgaXQgdXAKPmlmIHlvdSdyZSB0b3VjaGlu ZyB0aGUgbGluZXMgYW55d2F5LiAKClN1cmUsIGkgd2lsbCBjaGFuZ2XCoFJJU0NWX1NUQUNLX0FM SUdOIGludG/CoHJpc2N2X3N0YWNrX2FsaWduLgoKPgo+PsKgwqDCoCBlbHNlCj4+IC3CoMKgwqAg ZnJhbWVfdG90YWxfY29uc3RhbnRfc2l6ZSA9IGZyYW1lLT50b3RhbF9zaXplLnRvX2NvbnN0YW50 ICgpOwo+PiArwqDCoMKgIHJlbWFpbmluZ19jb25zdF9zaXplID0gcmVtYWluaW5nX3NpemUudG9f Y29uc3RhbnQgKCk7Cj4+Cj4+IC3CoCBpZiAoU01BTExfT1BFUkFORCAoZnJhbWVfdG90YWxfY29u c3RhbnRfc2l6ZSkpCj4+IC3CoMKgwqAgcmV0dXJuIGZyYW1lX3RvdGFsX2NvbnN0YW50X3NpemU7 Cj4+ICvCoCBpZiAoU01BTExfT1BFUkFORCAocmVtYWluaW5nX2NvbnN0X3NpemUpKQo+PiArwqDC oMKgIHJldHVybiByZW1haW5pbmdfY29uc3Rfc2l6ZTsKPj4KPj7CoMKgwqAgSE9TVF9XSURFX0lO VCBtaW5fZmlyc3Rfc3RlcCA9Cj4+IC3CoMKgwqAgUklTQ1ZfU1RBQ0tfQUxJR04gKChmcmFtZS0+ dG90YWxfc2l6ZSAtIGZyYW1lLT5mcmFtZV9wb2ludGVyX29mZnNldCkudG9fY29uc3RhbnQoKSk7 Cj4+ICvCoMKgwqAgUklTQ1ZfU1RBQ0tfQUxJR04gKChyZW1haW5pbmdfc2l6ZSAtIGZyYW1lLT5m cmFtZV9wb2ludGVyX29mZnNldCkudG9fY29uc3RhbnQoKSk7Cj4+wqDCoMKgIEhPU1RfV0lERV9J TlQgbWF4X2ZpcnN0X3N0ZXAgPSBJTU1fUkVBQ0ggLyAyIC0gUFJFRkVSUkVEX1NUQUNLX0JPVU5E QVJZIC8gODsKPj4gLcKgIEhPU1RfV0lERV9JTlQgbWluX3NlY29uZF9zdGVwID0gZnJhbWVfdG90 YWxfY29uc3RhbnRfc2l6ZSAtIG1heF9maXJzdF9zdGVwOwo+PiArwqAgSE9TVF9XSURFX0lOVCBt aW5fc2Vjb25kX3N0ZXAgPSByZW1haW5pbmdfY29uc3Rfc2l6ZSAtIG1heF9maXJzdF9zdGVwOwo+ PsKgwqDCoCBnY2NfYXNzZXJ0IChtaW5fZmlyc3Rfc3RlcCA8PSBtYXhfZmlyc3Rfc3RlcCk7Cj4+ Cj4+wqDCoMKgIC8qIEFzIGFuIG9wdGltaXphdGlvbiwgdXNlIHRoZSBsZWFzdC1zaWduaWZpY2Fu dCBiaXRzIG9mIHRoZSB0b3RhbCBmcmFtZQo+PsKgwqDCoMKgwqDCoCBzaXplLCBzbyB0aGF0IHRo ZSBzZWNvbmQgYWRqdXN0bWVudCBzdGVwIGlzIGp1c3QgTFVJICsgQURELsKgICovCj4+wqDCoMKg IGlmICghU01BTExfT1BFUkFORCAobWluX3NlY29uZF9zdGVwKQo+PiAtwqDCoMKgwqDCoCAmJiBm cmFtZV90b3RhbF9jb25zdGFudF9zaXplICUgSU1NX1JFQUNIIDwgSU1NX1JFQUNIIC8gMgo+PiAt wqDCoMKgwqDCoCAmJiBmcmFtZV90b3RhbF9jb25zdGFudF9zaXplICUgSU1NX1JFQUNIID49IG1p bl9maXJzdF9zdGVwKQo+PiAtwqDCoMKgIHJldHVybiBmcmFtZV90b3RhbF9jb25zdGFudF9zaXpl ICUgSU1NX1JFQUNIOwo+PiArwqDCoMKgwqDCoCAmJiByZW1haW5pbmdfY29uc3Rfc2l6ZSAlIElN TV9SRUFDSCA8IElNTV9SRUFDSCAvIDIKPj4gK8KgwqDCoMKgwqAgJiYgcmVtYWluaW5nX2NvbnN0 X3NpemUgJSBJTU1fUkVBQ0ggPj0gbWluX2ZpcnN0X3N0ZXApCj4+ICvCoMKgwqAgcmV0dXJuIHJl bWFpbmluZ19jb25zdF9zaXplICUgSU1NX1JFQUNIOwo+Cj5Mb29rcyBsaWtlIHRoaXMgZW50aXJl IGZyYW1lLT50b3RhbF9zaXplIC0+IHJlbWFpbmluZ19zaXplIGNvbnZlcnNpb24KPmNvdWxkIGJl IGRvbmUgYXMgYW4gaW5kZXBlbmRlbnQgcGF0Y2ggdGhhdCB3b3VsZCBjaGFuZ2Ugbm8KPmZ1bmN0 aW9uYWxpdHksIHRoYXQncyBhbHdheXMgYSBuaWNlIHdheSB0byBkbyB0aGluZ3MgYXMgaXQgbWFr ZXMgdGhlCj5jb2RlIGVhc2llciB0byByZWFkLiAKClN1cmUsIGkgd2lsbCBzcGxpdCB0aGlzIHBh dGNoLgoKPgo+SSBzcGVudCBhIGJpdCBwb2tpbmcgYXJvdW5kIGhlcmUgYW5kIG5vdGhpbmcgd3Jv bmcgaXMganVtcGluZyBvdXQsIGJ1dAo+dHJ5aW5nIHRvIGtlZXAgYWxsIHRoZXNlIG9mZnNldCBk aWZmZXJlbmNlcyBpbiBteSBoZWFkIGlzIGEgYml0IHRyaWNreS7CoAo+SWYgeW91IGhhdmUgdGhl IHRpbWUgdG8gcmVmYWN0b3IgdGhpcyB0byBiZSBlYXNpZXIgdG8gcmVhZCB0aGF0J2QgYmUKPmdy ZWF0LCBvdGhlcndpc2UgaG9wZWZ1bGx5IEkgKG9yIHNvbWVvbmUgZWxzZSkgd2lsbCBoYXZlIHRo ZSB0aW1lIHRvCj50YWtlIGEgbG9vayAtLSBwcm9iYWJseSBub3QgdG9kYXkgb24gbXkgZW5kLCB0 aG91Z2gsIGFzIEkndmUgZ290IHNvbWUKPkxpbnV4IGJhY2tsb2cgdG8gbG9vayBhdC4gCgpJJ2xs IHRyeSBpdC4gQWxzbyBpIHByb3Bvc2UgdG8gYWRkIHN0ZXAwIGZvciBwcmUtYWxsb2NhdGVkIHN0 YWNrIGNhc2VzIGxpa2Ugc2F2ZS1yZXN0b3JlIGxpYiBjYWxsLCAKYW5kwqB0aGUgZnV0dXJlIFpj bXAgaW4gWmMqIGV4dGVuc2lvbiBpZiBuZWVkZWQuIApTbyB3ZSBoYXZlIGEgY2xlYXIgbG9naWMg b2YgbWFuaXB1bGF0ZSBzdGFjayBzdGVwIGJ5IHN0ZXAuCgo+Cj5UaGFua3MhCj4KPj7CoMKgwqAg aWYgKFRBUkdFVF9SVkMpCj4+wqDCoMKgwqDCoCB7Cj4+IEBAIC01MDM3LDkgKzUwMzcsNyBAQCBy aXNjdl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpCj4+wqDCoMKgIC8qIFNhdmUgdGhlIHJlZ2lzdGVy cy7CoCAqLwo+PsKgwqDCoCBpZiAoKGZyYW1lLT5tYXNrIHwgZnJhbWUtPmZtYXNrKSAhPSAwKQo+ PsKgwqDCoMKgwqAgewo+PiAtwqDCoMKgwqDCoCBIT1NUX1dJREVfSU5UIHN0ZXAxID0gcmlzY3Zf Zmlyc3Rfc3RhY2tfc3RlcCAoZnJhbWUpOwo+PiAtwqDCoMKgwqDCoCBpZiAoc2l6ZS5pc19jb25z dGFudCAoKSkKPj4gLQlzdGVwMSA9IE1JTiAoc2l6ZS50b19jb25zdGFudCgpLCBzdGVwMSk7Cj4+ ICvCoMKgwqDCoMKgIEhPU1RfV0lERV9JTlQgc3RlcDEgPSByaXNjdl9maXJzdF9zdGFja19zdGVw IChmcmFtZSwgc2l6ZSk7Cj4+Cj4+wqDCoMKgwqDCoMKgwqAgaW5zbiA9IGdlbl9hZGQzX2luc24g KHN0YWNrX3BvaW50ZXJfcnR4LAo+PsKgIMKgwqDCoCBzdGFja19wb2ludGVyX3J0eCwKPj4gQEAg LTUxNDIsNiArNTE0MCw4IEBAIHJpc2N2X2V4cGFuZF9lcGlsb2d1ZSAoaW50IHN0eWxlKQo+PsKg wqDCoCBIT1NUX1dJREVfSU5UIHN0ZXAyID0gMDsKPj7CoMKgwqAgYm9vbCB1c2VfcmVzdG9yZV9s aWJjYWxsID0gKChzdHlsZSA9PSBOT1JNQUxfUkVUVVJOKQo+PsKgIMKgwqDCoMKgwqAgJiYgcmlz Y3ZfdXNlX3NhdmVfbGliY2FsbCAoZnJhbWUpKTsKPj4gK8KgIHVuc2lnbmVkIGxpYmNhbGxfc2l6 ZSA9IHVzZV9yZXN0b3JlX2xpYmNhbGwgPwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZyYW1lLT5zYXZlX2xpYmNhbGxfYWRqdXN0bWVu dCA6IDA7Cj4+wqDCoMKgIHJ0eCByYSA9IGdlbl9ydHhfUkVHIChQbW9kZSwgUkVUVVJOX0FERFJf UkVHTlVNKTsKPj7CoMKgwqAgcnR4IGluc247Cj4+Cj4+IEBAIC01MjEyLDEzICs1MjEyLDE4IEBA IHJpc2N2X2V4cGFuZF9lcGlsb2d1ZSAoaW50IHN0eWxlKQo+PsKgwqDCoMKgwqDCoMKgIFJFR19O T1RFUyAoaW5zbikgPSBkd2FyZjsKPj7CoMKgwqDCoMKgIH0KPj4KPj4gK8KgIGlmICh1c2VfcmVz dG9yZV9saWJjYWxsKQo+PiArwqDCoMKgIGZyYW1lLT5tYXNrID0gMDsgLyogVGVtcG9yYXJpbHkg ZmliIGZvciBHUFJzLsKgICovCj4+ICsKPj7CoMKgwqAgLyogSWYgd2UgbmVlZCB0byByZXN0b3Jl IHJlZ2lzdGVycywgZGVhbGxvY2F0ZSBhcyBtdWNoIHN0YWNrIGFzCj4+wqDCoMKgwqDCoMKgIHBv c3NpYmxlIGluIHRoZSBzZWNvbmQgc3RlcCB3aXRob3V0IGdvaW5nIG91dCBvZiByYW5nZS7CoCAq Lwo+PsKgwqDCoCBpZiAoKGZyYW1lLT5tYXNrIHwgZnJhbWUtPmZtYXNrKSAhPSAwKQo+PiAtwqDC oMKgIHsKPj4gLcKgwqDCoMKgwqAgc3RlcDIgPSByaXNjdl9maXJzdF9zdGFja19zdGVwIChmcmFt ZSk7Cj4+IC3CoMKgwqDCoMKgIHN0ZXAxIC09IHN0ZXAyOwo+PiAtwqDCoMKgIH0KPj4gK8KgwqDC oCBzdGVwMiA9IHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAgKGZyYW1lLCBmcmFtZS0+dG90YWxfc2l6 ZSAtIGxpYmNhbGxfc2l6ZSk7Cj4+ICsKPj4gK8KgIGlmICh1c2VfcmVzdG9yZV9saWJjYWxsKQo+ PiArwqDCoMKgIGZyYW1lLT5tYXNrID0gbWFzazsgLyogVW5kbyB0aGUgYWJvdmUgZmliLsKgICov Cj4+ICsKPj4gK8KgIHN0ZXAxIC09IHN0ZXAyICsgbGliY2FsbF9zaXplOwo+Pgo+PsKgwqDCoCAv KiBTZXQgVEFSR0VUIHRvIEJBU0UgKyBTVEVQMS7CoCAqLwo+PsKgwqDCoCBpZiAoa25vd25fZ3Qg KHN0ZXAxLCAwKSkKPj4gQEAgLTUyNzIsMTUgKzUyNzcsMTIgQEAgcmlzY3ZfZXhwYW5kX2VwaWxv Z3VlIChpbnQgc3R5bGUpCj4+wqDCoMKgwqDCoCBmcmFtZS0+bWFzayA9IDA7IC8qIFRlbXBvcmFy aWx5IGZpYiB0aGF0IHdlIG5lZWQgbm90IHNhdmUgR1BScy7CoCAqLwo+Pgo+PsKgwqDCoCAvKiBS ZXN0b3JlIHRoZSByZWdpc3RlcnMuwqAgKi8KPj4gLcKgIHJpc2N2X2Zvcl9lYWNoX3NhdmVkX3Jl ZyAoZnJhbWUtPnRvdGFsX3NpemUgLSBzdGVwMiwgcmlzY3ZfcmVzdG9yZV9yZWcsCj4+ICvCoCBy aXNjdl9mb3JfZWFjaF9zYXZlZF9yZWcgKGZyYW1lLT50b3RhbF9zaXplIC0gc3RlcDIgLSBsaWJj YWxsX3NpemUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmlzY3ZfcmVzdG9yZV9yZWcsCj4+wqAgwqDCoMKgIHRydWUsIHN0eWxlID09 IEVYQ0VQVElPTl9SRVRVUk4pOwo+Pgo+PsKgwqDCoCBpZiAodXNlX3Jlc3RvcmVfbGliY2FsbCkK Pj4gLcKgwqDCoCB7Cj4+wqDCoMKgwqDCoMKgwqAgZnJhbWUtPm1hc2sgPSBtYXNrOyAvKiBVbmRv IHRoZSBhYm92ZSBmaWIuwqAgKi8KPj4gLcKgwqDCoMKgwqAgZ2NjX2Fzc2VydCAoc3RlcDIgPj0g ZnJhbWUtPnNhdmVfbGliY2FsbF9hZGp1c3RtZW50KTsKPj4gLcKgwqDCoMKgwqAgc3RlcDIgLT0g ZnJhbWUtPnNhdmVfbGliY2FsbF9hZGp1c3RtZW50Owo+PiAtwqDCoMKgIH0KPj4KPj7CoMKgwqAg aWYgKG5lZWRfYmFycmllcl9wKQo+PsKgwqDCoMKgwqAgcmlzY3ZfZW1pdF9zdGFja190aWUgKCk7 Cj4+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yvc3RhY2tfc2F2 ZV9yZXN0b3JlLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yvc3RhY2tfc2F2ZV9y ZXN0b3JlLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAuLjQ2 OTVlZjk0NjlhCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L3Jpc2N2L3N0YWNrX3NhdmVfcmVzdG9yZS5jCj4+IEBAIC0wLDAgKzEsNDAgQEAKPj4gKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCj4+ICsvKiB7IGRnLW9wdGlvbnMgIi1tYXJjaD1ydjMyaW1h ZmMgLW1hYmk9aWxwMzJmIC1tc2F2ZS1yZXN0b3JlIC1PMiAtZm5vLXNjaGVkdWxlLWluc25zIC1m bm8tc2NoZWR1bGUtaW5zbnMyIC1mbm8tdW5yb2xsLWxvb3BzIC1mbm8tcGVlbC1sb29wcyIgfSAq Lwo+PiArLyogeyBkZy1maW5hbCB7IGNoZWNrLWZ1bmN0aW9uLWJvZGllcyAiKioiICIiIH0gfSAq Lwo+PiArCj4+ICtjaGFyIG15X2dldGNoYXIoKTsKPj4gK2Zsb2F0IGdldGYoKTsKPj4gKwo+PiAr LyoKPj4gKyoqYmFyOgo+PiArKioJY2FsbAl0MCxfX3Jpc2N2X3NhdmVfNAo+PiArKioJYWRkaQlz cCxzcCwtMjAzMgo+PiArKioJLi4uCj4+ICsqKglsaQl0MCwtMTIyODgKPj4gKyoqCWFkZAlzcCxz cCx0MAo+PiArKioJLi4uCj4+ICsqKglsaQl0MCwxMjI4OAo+PiArKioJYWRkCXNwLHNwLHQwCj4+ ICsqKgkuLi4KPj4gKyoqCWFkZGkJc3Asc3AsMjAzMgo+PiArKioJdGFpbAlfX3Jpc2N2X3Jlc3Rv cmVfNAo+PiArKi8KPgo+VGhlIHRlc3QgbmVlZHMgdG8gYWN0dWFsbHkgY2hlY2sgdGhpcywgaXQg Y2FuJ3QganVzdCBiZSBtYW51YWwuIAoKSSBkaWRuJ3QgZ2V0IHlvdXIgcG9pbnQuIApUaGXCoHsg ZGctZmluYWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiB9IH0gbWF0Y2hlcyB0aGUg b3V0cHV0IHdpdGggdGhlIGV4cGVjdGVkIHJlc3VsdCBhYm92ZSBhdXRvbWF0aWNhbGx5LsKgClBs ZWFzZSBsZXQgbWUga25vdyB5b3VyIGlkZWEuwqAKClRoYW5rcyAmIEJSLMKgCkZlaQoKPgo+PiAr aW50IGJhcigpCj4+ICt7Cj4+ICvCoCBmbG9hdCB2b2xhdGlsZSBmYXJyYXlbMzU2OF07Cj4+ICsK Pj4gK8KgIGZsb2F0IHN1bSA9IDA7Cj4+ICvCoCBmbG9hdCBmMSA9IGdldGYoKTsKPj4gK8KgIGZs b2F0IGYyID0gZ2V0ZigpOwo+PiArwqAgZmxvYXQgZjMgPSBnZXRmKCk7Cj4+ICvCoCBmbG9hdCBm NCA9IGdldGYoKTsKPj4gKwo+PiArwqAgZm9yIChpbnQgaSA9IDA7IGkgPCAzNTY4OyBpKyspCj4+ ICvCoCB7Cj4+ICvCoMKgwqAgZmFycmF5W2ldID0gbXlfZ2V0Y2hhcigpICogMS4yOwo+PiArwqDC oMKgIHN1bSArPSBmYXJyYXlbaV07Cj4+ICvCoCB9Cj4+ICsKPj4gK8KgIHJldHVybiBzdW0gKyBm MSArIGYyICsgZjMgKyBmNDsKPj4gK30KPj4gKw==