From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.smtpout.orange.fr (smtp09.smtpout.orange.fr [80.12.242.131]) by sourceware.org (Postfix) with ESMTPS id 21EC63858C2C for ; Thu, 21 Apr 2022 21:14:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 21EC63858C2C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=orange.fr Authentication-Results: sourceware.org; spf=none smtp.mailfrom=orange.fr Received: from [192.168.1.17] ([86.253.179.215]) by smtp.orange.fr with ESMTPA id he8VnmmF5KpuHhe8bnyCXf; Thu, 21 Apr 2022 23:14:54 +0200 X-ME-Helo: [192.168.1.17] X-ME-Auth: MDU4MTIxYWM4YWI0ZGE4ZTUwZWZmNTExZmI2ZWZlMThkM2ZhYiE5OWRkOGM= X-ME-Date: Thu, 21 Apr 2022 23:14:54 +0200 X-ME-IP: 86.253.179.215 Content-Type: multipart/mixed; boundary="------------1y7RY8fv1fub0jmqc1x1IlGL" Message-ID: <8541b594-57c9-f6aa-7164-3918abe67a8f@orange.fr> Date: Thu, 21 Apr 2022 23:14:47 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 From: Mikael Morin Subject: [PATCH] fortran: Detect duplicate unlimited polymorphic types [PR103662] To: gfortran , gcc-patches Content-Language: en-US X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=unavailable autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Apr 2022 21:14:58 -0000 This is a multi-part message in MIME format. --------------1y7RY8fv1fub0jmqc1x1IlGL Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello, this is a fix for PR103662, a TBAA issue with unlimited polymorphic types. I attached a draft patch to the PR which was accumulating all unlimited polymorphic symbols to a single namespace, avoiding duplicate symbols and thus eliminating the problem. After reviewing the code more in detail, I was afraid that some symbols could still end up in the local namespace, and that the problem would remain for them after all. Despite not being able to generate a testcase where it happened, I decided to produce a patch based on Jakub’s analysis in the PR audit trail, as that way supports duplicates by design. On top of Jakub’s patch, there are a couple more types registrations just in case (they handle duplicates so that’s fine), and the type comparison fix that he was too fortran-uncomfortable to do. The testcase had to be fixed as we found out in the PR audit trail. Regression tested on x86_64-pc-linux-gnu. OK for master? Mikael --------------1y7RY8fv1fub0jmqc1x1IlGL Content-Type: text/x-patch; charset=UTF-8; name="0001-fortran-Detect-duplicate-unlimited-polymorphic-types.patch" Content-Disposition: attachment; filename*0="0001-fortran-Detect-duplicate-unlimited-polymorphic-types.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmZjlkZThiMDBlNWVlZGY0NGFmMGNlNzVkMjY4ZGNlMjE2YmY2NDVmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNaWthZWwgTW9yaW4gPG1pa2FlbEBnY2MuZ251Lm9y Zz4KRGF0ZTogV2VkLCAyMCBBcHIgMjAyMiAxMjowNDozOCArMDIwMApTdWJqZWN0OiBbUEFU Q0hdIGZvcnRyYW46IERldGVjdCBkdXBsaWNhdGUgdW5saW1pdGVkIHBvbHltb3JwaGljIHR5 cGVzCiBbUFIxMDM2NjJdCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9w bGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpU aGlzIGZpeGVzIGEgdHlwZS1iYXNlZCBhbGlhcyBhbmFseXNpcyBpc3N1ZSB3aXRoIHVubGlt aXRlZCBwb2x5bW9ycGhpYwpjbGFzcyBkZXNjcmlwdG9ycyAodHlwZXMgYmVoaW5kIGNsYXNz KCopKSBjYXVzaW5nIGRhdGEgaW5pdGlhbGlzYXRpb24gdG8KYmUgcmVtb3ZlZCBieSBvcHRp bWl6YXRpb24uCgpUaGUgZm9ydHJhbiBmcm9udC1lbmQgbWF5IGNyZWF0ZSBtdWx0aXBsZSBk ZWNsYXJhdGlvbnMgZm9yIHR5cGVzLCBmb3IKZXhhbXBsZSBpZiBhIHR5cGUgaXMgcmVkZWNs YXJlZCBpbiBlYWNoIHByb2dyYW0gdW5pdCBpdCBpcyB1c2VkIGluLgpUbyBhdm9pZCBvcHRp bWl6YXRpb24gc2VlaW5nIHRoZW0gYXMgbm9uLWFsaWFzaW5nLCBhIGxpc3Qgb2YgZGVyaXZl ZAp0eXBlcyBpcyBjcmVhdGVkIGF0IHJlc29sdXRpb24gdGltZSwgYW5kIHVzZWQgYXQgdHJh bnNsYXRpb24gdG8gc2V0CnRoZSBzYW1lIFRZUEVfQ0FOT05JQ0FMIHR5cGUgZm9yIGVhY2gg ZHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb24uCgpUaGlzIG1lY2hhbmlzbSBkaWRu4oCZdCB3 b3JrIGZvciB1bmxpbWl0ZWQgcG9seW1vcnBoaWMgZGVzY3JpcHRvcnMgdHlwZXMsCmFzIHRo ZXJlIGlzIGEgc2hvcnQtY2lyY3VpdCByZXR1cm4gc2tpcHBpbmcgYWxsIHRoZSByZXNvbHV0 aW9uIGhhbmRsaW5nCmZvciB0aGVtLCBpbmNsdWRpbmcgdGhlIHR5cGUgcmVnaXN0cmF0aW9u LgoKVGhpcyBjaGFuZ2UgYWRkcyB0eXBlIHJlZ2lzdHJhdGlvbiAod2hpY2ggaGFuZGxlcyBk dXBsaWNhdGUgcmVnaXN0ZXJpbmcpCmF0IHNldmVyYWwgc2hvcnQtY2lyY3VpdCByZXR1cm5z LCBhbmQgdXBkYXRlcyB0eXBlIGNvbXBhcmlzb24gdG8gaGFuZGxlCnNwZWNpZmljYWxseSB1 bmxpbWl0ZWQgcG9seW1vcnBoaWMgZmFrZSBzeW1ib2xzLCBjbGFzcyBkZXNjcmlwdG9yIHR5 cGVzCmFuZCB2aXJ0dWFsIHRhYmxlIHR5cGVzLgoKVGhlIHRlc3QsIHdoaWNoIGV4aGliaXRl ZCBtaXNtYXRjaGluZyBkeW5hbWljIHR5cGVzIGhhZCB0byBiZSBmaXhlZCBhcwp3ZWxsLgoK CVBSIGZvcnRyYW4vMTAzNjYyCgpnY2MvZm9ydHJhbi9DaGFuZ2VMb2c6CgoJKiBpbnRlcmZh Y2UuY2MgKGdmY19jb21wYXJlX2Rlcml2ZWRfdHlwZXMpOiBTdXBwb3J0IGNvbXBhcmluZwoJ dW5saW1pdGVkIHBvbHltb3JwaGljIGZha2Ugc3ltYm9scy4gIFJlY3Vyc2l2ZWx5IGNvbXBh cmUgY2xhc3MKCWRlc2NyaXB0b3IgdHlwZXMgYW5kIHZpcnR1YWwgdGFibGUgdHlwZXMuCgkq IHJlc29sdmUuY2MgKHJlc29sdmVfZmxfZGVyaXZlZCk6IEFkZCB0eXBlIHRvIHRoZSB0eXBl cyBsaXN0CglvbiB1bmxpbWl0ZWQgcG9seW1vcnBoaWMgc2hvcnQtY2lyY3VpdCByZXR1cm4u CgkocmVzb2x2ZV9zeW1ib2wpOiBEaXR0by4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoK CSogZ2ZvcnRyYW4uZGcvdW5saW1pdGVkX3BvbHltb3JwaGljXzMuZjAzIChmb28pOiBTZXBh cmF0ZQoJYmluZChjKSBhbmQgc2VxdWVuY2UgY2hlY2tzIHRvLi4uCgkoZm9vX2JjLCBmb29f c3EpOiAuLi4gdHdvIGRpZmZlcmVudCBwcm9jZWR1cmVzLgoJKG1haW4sIGZvbyopOiBDaGFu Z2UgdHlwZSBkZWNsYXJhdGlvbnMgc28gdGhhdCB0eXBlIG5hbWUsCgljb21wb25lbnQgbmFt ZSwgYW5kIGVpdGhlciBiaW5kKGMpIG9yIHNlcXVlbmNlIGF0dHJpYnV0ZSBtYXRjaAoJYmV0 d2VlbiB0aGUgbWFpbiB0eXBlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIHByb2NlZHVyZSB0eXBl CglkZWNsYXJhdGlvbnMuCgkodG9wbGV2ZWwpOiBBZGQgb3B0aW1pemF0aW9uIGR1bXAgY2hl Y2tzLgoKQ28tQXV0aG9yZWQtQnk6IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+ Ci0tLQogZ2NjL2ZvcnRyYW4vaW50ZXJmYWNlLmNjICAgICAgICAgICAgICAgICAgICAgIHwg MTkgKysrKystLQogZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYyAgICAgICAgICAgICAgICAgICAg ICAgIHwgMTUgKysrKy0KIC4uLi9nZm9ydHJhbi5kZy91bmxpbWl0ZWRfcG9seW1vcnBoaWNf My5mMDMgICB8IDU2ICsrKysrKysrKysrKystLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNjYg aW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRy YW4vaW50ZXJmYWNlLmNjIGIvZ2NjL2ZvcnRyYW4vaW50ZXJmYWNlLmNjCmluZGV4IDAwMGE1 MzBjYmE0Li43ZWQ2ZTEzNzExZiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vaW50ZXJmYWNl LmNjCisrKyBiL2djYy9mb3J0cmFuL2ludGVyZmFjZS5jYwpAQCAtNjE4LDYgKzYxOCwxNCBA QCBnZmNfY29tcGFyZV9kZXJpdmVkX3R5cGVzIChnZmNfc3ltYm9sICpkZXJpdmVkMSwgZ2Zj X3N5bWJvbCAqZGVyaXZlZDIpCiAgIGlmICghZGVyaXZlZDEgfHwgIWRlcml2ZWQyKQogICAg IGdmY19pbnRlcm5hbF9lcnJvciAoImdmY19jb21wYXJlX2Rlcml2ZWRfdHlwZXM6IGludmFs aWQgZGVyaXZlZCB0eXBlIik7CiAKKyAgaWYgKGRlcml2ZWQxLT5hdHRyLnVubGltaXRlZF9w b2x5bW9ycGhpYworICAgICAgJiYgZGVyaXZlZDItPmF0dHIudW5saW1pdGVkX3BvbHltb3Jw aGljKQorICAgIHJldHVybiB0cnVlOworCisgIGlmIChkZXJpdmVkMS0+YXR0ci51bmxpbWl0 ZWRfcG9seW1vcnBoaWMKKyAgICAgICE9IGRlcml2ZWQyLT5hdHRyLnVubGltaXRlZF9wb2x5 bW9ycGhpYykKKyAgICByZXR1cm4gZmFsc2U7CisKICAgLyogQ29tcGFyZSBVTklPTiB0eXBl cyBzcGVjaWFsbHkuICAqLwogICBpZiAoZGVyaXZlZDEtPmF0dHIuZmxhdm9yID09IEZMX1VO SU9OIHx8IGRlcml2ZWQyLT5hdHRyLmZsYXZvciA9PSBGTF9VTklPTikKICAgICByZXR1cm4g Y29tcGFyZV91bmlvbl90eXBlcyAoZGVyaXZlZDEsIGRlcml2ZWQyKTsKQEAgLTYzMCwxMCAr NjM4LDExIEBAIGdmY19jb21wYXJlX2Rlcml2ZWRfdHlwZXMgKGdmY19zeW1ib2wgKmRlcml2 ZWQxLCBnZmNfc3ltYm9sICpkZXJpdmVkMikKICAgICAgICYmIHN0cmNtcCAoZGVyaXZlZDEt Pm1vZHVsZSwgZGVyaXZlZDItPm1vZHVsZSkgPT0gMCkKICAgICByZXR1cm4gdHJ1ZTsKIAot ICAvKiBDb21wYXJlIHR5cGUgdmlhIHRoZSBydWxlcyBvZiB0aGUgc3RhbmRhcmQuICBCb3Ro IHR5cGVzIG11c3QgaGF2ZQotICAgICB0aGUgU0VRVUVOQ0Ugb3IgQklORChDKSBhdHRyaWJ1 dGUgdG8gYmUgZXF1YWwuIFNUUlVDVFVSRXMgYXJlIHNwZWNpYWwKLSAgICAgYmVjYXVzZSB0 aGV5IGNhbiBiZSBhbm9ueW1vdXM7IHRoZXJlZm9yZSB0d28gc3RydWN0dXJlcyB3aXRoIGRp ZmZlcmVudAotICAgICBuYW1lcyBtYXkgYmUgZXF1YWwuICAqLworICAvKiBDb21wYXJlIHR5 cGUgdmlhIHRoZSBydWxlcyBvZiB0aGUgc3RhbmRhcmQuICBCb3RoIHR5cGVzIG11c3QgaGF2 ZSB0aGUKKyAgICAgU0VRVUVOQ0Ugb3IgQklORChDKSBhdHRyaWJ1dGUgdG8gYmUgZXF1YWwu ICBXZSBhbHNvIGNvbXBhcmUgdHlwZXMKKyAgICAgcmVjdXJzaXZlbHkgaWYgdGhleSBhcmUg Y2xhc3MgZGVzY3JpcHRvcnMgdHlwZXMgb3IgdmlydHVhbCB0YWJsZXMgdHlwZXMuCisgICAg IFNUUlVDVFVSRXMgYXJlIHNwZWNpYWwgYmVjYXVzZSB0aGV5IGNhbiBiZSBhbm9ueW1vdXM7 IHRoZXJlZm9yZSB0d28KKyAgICAgc3RydWN0dXJlcyB3aXRoIGRpZmZlcmVudCBuYW1lcyBt YXkgYmUgZXF1YWwuICAqLwogCiAgIC8qIENvbXBhcmUgbmFtZXMsIGJ1dCBub3QgZm9yIGFu b255bW91cyB0eXBlcyBzdWNoIGFzIFVOSU9OIG9yIE1BUC4gICovCiAgIGlmICghaXNfYW5v bnltb3VzX2R0IChkZXJpdmVkMSkgJiYgIWlzX2Fub255bW91c19kdCAoZGVyaXZlZDIpCkBA IC02NDYsNiArNjU1LDggQEAgZ2ZjX2NvbXBhcmVfZGVyaXZlZF90eXBlcyAoZ2ZjX3N5bWJv bCAqZGVyaXZlZDEsIGdmY19zeW1ib2wgKmRlcml2ZWQyKQogCiAgIGlmICghKGRlcml2ZWQx LT5hdHRyLnNlcXVlbmNlICYmIGRlcml2ZWQyLT5hdHRyLnNlcXVlbmNlKQogICAgICAgJiYg IShkZXJpdmVkMS0+YXR0ci5pc19iaW5kX2MgJiYgZGVyaXZlZDItPmF0dHIuaXNfYmluZF9j KQorICAgICAgJiYgIShkZXJpdmVkMS0+YXR0ci5pc19jbGFzcyAmJiBkZXJpdmVkMi0+YXR0 ci5pc19jbGFzcykKKyAgICAgICYmICEoZGVyaXZlZDEtPmF0dHIudnR5cGUgJiYgZGVyaXZl ZDItPmF0dHIudnR5cGUpCiAgICAgICAmJiAhKGRlcml2ZWQxLT5hdHRyLnBkdF90eXBlICYm IGRlcml2ZWQyLT5hdHRyLnBkdF90eXBlKSkKICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAt LWdpdCBhL2djYy9mb3J0cmFuL3Jlc29sdmUuY2MgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNj CmluZGV4IDIxYzg3OTdjOTM4Li4wMTFmYjVlYjE0ZCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRy YW4vcmVzb2x2ZS5jYworKysgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjCkBAIC0xNTExMiw3 ICsxNTExMiwxMCBAQCByZXNvbHZlX2ZsX2Rlcml2ZWQgKGdmY19zeW1ib2wgKnN5bSkKICAg Z2ZjX3N5bWJvbCAqZ2VuX2R0ID0gTlVMTDsKIAogICBpZiAoc3ltLT5hdHRyLnVubGltaXRl ZF9wb2x5bW9ycGhpYykKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICB7CisgICAgICBhZGRfZHRf dG9fZHRfbGlzdCAoc3ltKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICBpZiAo IXN5bS0+YXR0ci5pc19jbGFzcykKICAgICBnZmNfZmluZF9zeW1ib2wgKHN5bS0+bmFtZSwg c3ltLT5ucywgMCwgJmdlbl9kdCk7CkBAIC0xNTE1MCw3ICsxNTE1MywxMCBAQCByZXNvbHZl X2ZsX2Rlcml2ZWQgKGdmY19zeW1ib2wgKnN5bSkKIAogICAgICAgLyogTm90aGluZyBtb3Jl IHRvIGRvIGZvciB1bmxpbWl0ZWQgcG9seW1vcnBoaWMgZW50aXRpZXMuICAqLwogICAgICAg aWYgKGRhdGEtPnRzLnUuZGVyaXZlZC0+YXR0ci51bmxpbWl0ZWRfcG9seW1vcnBoaWMpCi0J cmV0dXJuIHRydWU7CisJeworCSAgYWRkX2R0X3RvX2R0X2xpc3QgKHN5bSk7CisJICByZXR1 cm4gdHJ1ZTsKKwl9CiAgICAgICBlbHNlIGlmICh2cHRyLT50cy51LmRlcml2ZWQgPT0gTlVM TCkKIAl7CiAJICBnZmNfc3ltYm9sICp2dGFiID0gZ2ZjX2ZpbmRfZGVyaXZlZF92dGFiIChk YXRhLT50cy51LmRlcml2ZWQpOwpAQCAtMTU0NjcsNyArMTU0NzMsMTAgQEAgcmVzb2x2ZV9z eW1ib2wgKGdmY19zeW1ib2wgKnN5bSkKICAgICByZXR1cm47CiAKICAgaWYgKHN5bS0+YXR0 ci51bmxpbWl0ZWRfcG9seW1vcnBoaWMpCi0gICAgcmV0dXJuOworICAgIHsKKyAgICAgIGFk ZF9kdF90b19kdF9saXN0IChzeW0pOworICAgICAgcmV0dXJuOworICAgIH0KIAogICBpZiAo c3ltLT5hdHRyLmZsYXZvciA9PSBGTF9VTktOT1dOCiAgICAgICB8fCAoc3ltLT5hdHRyLmZs YXZvciA9PSBGTF9QUk9DRURVUkUgJiYgIXN5bS0+YXR0ci5pbnRyaW5zaWMKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvdW5saW1pdGVkX3BvbHltb3JwaGljXzMu ZjAzIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy91bmxpbWl0ZWRfcG9seW1vcnBoaWNf My5mMDMKaW5kZXggMDc1ZDZkNzI3ZTIuLjc4MGQ2OGNkZDg3IDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL3VubGltaXRlZF9wb2x5bW9ycGhpY18zLmYwMworKysg Yi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3VubGltaXRlZF9wb2x5bW9ycGhpY18zLmYw MwpAQCAtMSw0ICsxLDUgQEAKICEgeyBkZy1kbyBydW4gfQorISB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLWZkdW1wLXRyZWUtZHNlLWRldGFpbHMiIH0KICEKICEgQ2hlY2sgdGhhdCBw b2ludGVyIGFzc2lnbm1lbnRzIGFsbG93ZWQgYnkgRjIwMDM6QzcxNwogISB3b3JrIGFuZCBj aGVjayBudWxsIGluaXRpYWxpemF0aW9uIG9mIENMQVNTKCopIHBvaW50ZXJzLgpAQCAtNywy MCArOCwzMSBAQAogIQogcHJvZ3JhbSBtYWluCiAgIGludGVyZmFjZQotICAgIHN1YnJvdXRp bmUgZm9vKHopCisgICAgc3Vicm91dGluZSBmb29fYmMoeikKICAgICAgIGNsYXNzKCopLCBw b2ludGVyLCBpbnRlbnQoaW4pIDo6IHoKLSAgICBlbmQgc3Vicm91dGluZSBmb28KKyAgICBl bmQgc3Vicm91dGluZSBmb29fYmMKKyAgICBzdWJyb3V0aW5lIGZvb19zcSh6KQorICAgICAg Y2xhc3MoKiksIHBvaW50ZXIsIGludGVudChpbikgOjogegorICAgIGVuZCBzdWJyb3V0aW5l IGZvb19zcQogICBlbmQgaW50ZXJmYWNlCisgIHR5cGUsIGJpbmQoYykgOjogYmMKKyAgICBp bnRlZ2VyIDo6IGkKKyAgZW5kIHR5cGUgYmMKICAgdHlwZSBzcQogICAgIHNlcXVlbmNlCi0g ICAgaW50ZWdlciA6OiBpCisgICAgaW50ZWdlciA6OiBrCiAgIGVuZCB0eXBlIHNxCisgIHR5 cGUoYmMpLCB0YXJnZXQgOjogdwogICB0eXBlKHNxKSwgdGFyZ2V0IDo6IHgKICAgY2xhc3Mo KiksIHBvaW50ZXIgOjogeSwgegotICB4JWkgPSA0MgorICB3JWkgPSAyMworICB5ID0+IHcK KyAgeiA9PiB5ICEgdW5saW1pdGVkID0+IHVubGltaXRlZCBhbGxvd2VkCisgIGNhbGwgZm9v X2JjKHopCisgIHglayA9IDQyCiAgIHkgPT4geAogICB6ID0+IHkgISB1bmxpbWl0ZWQgPT4g dW5saW1pdGVkIGFsbG93ZWQKLSAgY2FsbCBmb28gKHopCisgIGNhbGwgZm9vX3NxKHopCiAg IGNhbGwgYmFyCiBjb250YWlucwogICBzdWJyb3V0aW5lIGJhcgpAQCAtMzMsMjEgKzQ1LDMx IEBAIGNvbnRhaW5zCiAKIGVuZCBwcm9ncmFtIG1haW4KIAotCi1zdWJyb3V0aW5lIGZvbyh0 Z3QpCitzdWJyb3V0aW5lIGZvb19iYyh0Z3QpCiAgIHVzZSBpc29fY19iaW5kaW5nCiAgIGNs YXNzKCopLCBwb2ludGVyLCBpbnRlbnQoaW4pIDo6IHRndAotICB0eXBlLCBiaW5kKGMpIDo6 IHMKLSAgICBpbnRlZ2VyIChjX2ludCkgOjogawotICBlbmQgdHlwZSBzCi0gIHR5cGUgdAor ICB0eXBlLCBiaW5kKGMpIDo6IGJjCisgICAgaW50ZWdlciAoY19pbnQpIDo6IGkKKyAgZW5k IHR5cGUgYmMKKyAgdHlwZShiYyksIHBvaW50ZXIgOjogcHRyMQorICBwdHIxID0+IHRndCAh IGJpbmQoYykgPT4gdW5saW1pdGVkIGFsbG93ZWQKKyAgaWYgKHB0cjElaSAubmUuIDIzKSBT VE9QIDIKK2VuZCBzdWJyb3V0aW5lIGZvb19iYworCitzdWJyb3V0aW5lIGZvb19zcSh0Z3Qp CisgIGNsYXNzKCopLCBwb2ludGVyLCBpbnRlbnQoaW4pIDo6IHRndAorICB0eXBlIHNxCiAg ICAgc2VxdWVuY2UKICAgICBpbnRlZ2VyIDo6IGsKLSAgZW5kIHR5cGUgdAotICB0eXBlKHMp LCBwb2ludGVyIDo6IHB0cjEKLSAgdHlwZSh0KSwgcG9pbnRlciA6OiBwdHIyCi0gIHB0cjEg PT4gdGd0ICEgYmluZChjKSA9PiB1bmxpbWl0ZWQgYWxsb3dlZAotICBpZiAocHRyMSVrIC5u ZS4gNDIpIFNUT1AgMgorICBlbmQgdHlwZSBzcQorICB0eXBlKHNxKSwgcG9pbnRlciA6OiBw dHIyCiAgIHB0cjIgPT4gdGd0ICEgc2VxdWVuY2UgdHlwZSA9PiB1bmxpbWl0ZWQgYWxsb3dl ZAogICBpZiAocHRyMiVrIC5uZS4gNDIpIFNUT1AgMwotZW5kIHN1YnJvdXRpbmUgZm9vCitl bmQgc3Vicm91dGluZSBmb29fc3EKKworISBQUiBmb3J0cmFuLzEwMzY2MgorISBXZSB1c2Vk IHRvIHByb2R1Y2UgbXVsdGlwbGUgaW5kZXBlbmRhbnQgdHlwZXMgZm9yIHRoZSB1bmxpbWl0 ZWQgcG9seW1vcnBoaWMKKyEgZGVzY3JpcHRvcnMgKHR5cGVzIGZvciBjbGFzcygqKSkgd2hp Y2ggY2F1c2VkIHN0b3JlcyB0byB0aGVtIHRvIGJlIHNlZW4gYXMKKyEgdXNlbGVzcy4KKyEg eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiRGVsZXRlZCBkZWFkIHN0b3JlOiB6 Ll9kYXRhID0gJnciICJkc2UxIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LW5vdCAiRGVsZXRlZCBkZWFkIHN0b3JlOiB6Ll9kYXRhID0gJngiICJkc2UxIiB9IH0KLS0g CjIuMzUuMQoK --------------1y7RY8fv1fub0jmqc1x1IlGL--