From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 2F7C53853837; Mon, 31 Oct 2022 14:46:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2F7C53853837 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.95,228,1661846400"; d="diff'?scan'208";a="85749250" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 31 Oct 2022 06:46:32 -0800 IronPort-SDR: 1fu0T791CTtyZAEcH0dsUKlNsNrKnLlxbZq9iB6YMnjNDe6obRA9TvP3bexfBhfzgOFFifm3zi okdkdCkdLPLITH1EKWY/AUl4xo4waYVl0hMcDj1BbcInA+cdFh6LQcSx+wI8ghtEhonWBuEU1O 8C3rzQReWLqA8Vkw9N9PHuBoqxp8LK3iuZvo17UjE1Ai/3pSJlWjQcUKR81ZnQkEpXAnrNvPxE dHyqVpuumfJ18OaM9aeSeU43vUCDevnWhsAfDL/+EtA6cywOvWI284JENwhurwZKQxxCnkog2w K9E= Content-Type: multipart/mixed; boundary="------------cYoevOLPWOHoXT0OJ2aKc2lw" Message-ID: <51e764f7-635f-9754-dc4b-d2cd2b58435d@codesourcery.com> Date: Mon, 31 Oct 2022 15:46:25 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch] OpenMP/Fortran: 'target update' with strides + DT components X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-13.mgc.mentorg.com (139.181.222.13) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,SPF_HELO_PASS,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: --------------cYoevOLPWOHoXT0OJ2aKc2lw Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable I recently saw that gfortran does not support derived type components with 'target update', an OpenMP 5.0 feature. When adding it, I also found out that strides where not handled. There is probably some room of improvement about what to copy and what not, but copying too much should be fine. Build + (reg)tested on x86_64-gnu-linux without offloading configured + libgomp tested on x86_64-gnu-linux with nvptx offloading. OK for mainline? * * * PS: Follow-up work items: * Strides: OpenMP seemingly permits also 'a%b([1,6,19,12])' as long as the first index has the lowest address. =E2=80=93 And also 'a%b(:)%c' is permitted =E2=80=93 both not handled in this patch (and rejected with a compile-time error) * There seems to be some problems with 'alloc' with pointers and allocatables in components =E2=80=93 but I have not rechecked. * For allocatables, 'target update' needs to do a deep mapping; I need to check whether that's the case. Note for the last two: allocatable components only works OG11/OG12 and I urgently need to cleanup + (re)submit that patch to mainline. (It came too late for GCC 12.) * There might be also some issue mapping/refcounting, which I have not investigated - affecting the 'target exit data' of target-11.f90. PPS: I intent to file at least one/some PRs about those issues, unless I can fix them quickly. ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------cYoevOLPWOHoXT0OJ2aKc2lw Content-Type: text/x-patch; charset="UTF-8"; name="omp-target-update.diff" Content-Disposition: attachment; filename="omp-target-update.diff" Content-Transfer-Encoding: base64 T3Blbk1QL0ZvcnRyYW46ICd0YXJnZXQgdXBkYXRlJyB3aXRoIHN0cmlkZXMgKyBEVCBjb21w b25lbnRzCgpPcGVuTVAgNS4wIHBlcm1pdHMgdG8gdXNlIGFycmF5cyB3aXRoIHN0cmlkZXMg YW5kIGRlcml2ZWQKdHlwZSBjb21wb25lbnRzIGZvciB0aGUgbGlzdCBpdGVtcyB0byB0aGUg J2Zyb20nLyd0bycgY2xhdXNlcwpvZiB0aGUgJ3RhcmdldCB1cGRhdGUnIGRpcmVjdGl2ZS4K CmdjYy9mb3J0cmFuL0NoYW5nZUxvZzoKCgkqIG9wZW5tcC5jYyAoZ2ZjX21hdGNoX29tcF9j bGF1c2VzKTogUGVybWl0IGRlcml2ZWQgdHlwZXMuCgkocmVzb2x2ZV9vbXBfY2xhdXNlcyk6 QWNjZXB0IG5vbmNvbnRpZ3VvdXMKCWFycmF5cy4KCSogdHJhbnMtb3Blbm1wLmNjIChnZmNf dHJhbnNfb21wX2NsYXVzZXMpOiBGaXhlcyBmb3IKCWRlcml2ZWQtdHlwZSBjaGFuZ2VzOyBm aXggc2l6ZSBmb3Igc2NhbGFycy4KCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSogdGVzdHN1aXRl L2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtMTEuZjkwOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRl L2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtMTMuZjkwOiBOZXcgdGVzdC4KCiBnY2MvZm9ydHJh bi9vcGVubXAuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxOSArKy0KIGdjYy9m b3J0cmFuL3RyYW5zLW9wZW5tcC5jYyAgICAgICAgICAgICAgICAgICAgIHwgICA5ICstCiBs aWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LTExLmY5MCB8ICA3NSAr KysrKysrKysrKwogbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC0x My5mOTAgfCAxNjIgKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQs IDI1NiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2djYy9m b3J0cmFuL29wZW5tcC5jYyBiL2djYy9mb3J0cmFuL29wZW5tcC5jYwppbmRleCA2NTNjNDNm NzlmZi4uMmRhZWQ3NGJlNzIgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL29wZW5tcC5jYwor KysgYi9nY2MvZm9ydHJhbi9vcGVubXAuY2MKQEAgLTI0OTksOSArMjQ5OSwxMCBAQCBnZmNf bWF0Y2hfb21wX2NsYXVzZXMgKGdmY19vbXBfY2xhdXNlcyAqKmNwLCBjb25zdCBvbXBfbWFz ayBtYXNrLAogCQkJCQkgICAgICB0cnVlKSA9PSBNQVRDSF9ZRVMpCiAJICAgIGNvbnRpbnVl OwogCSAgaWYgKChtYXNrICYgT01QX0NMQVVTRV9GUk9NKQotCSAgICAgICYmIGdmY19tYXRj aF9vbXBfdmFyaWFibGVfbGlzdCAoImZyb20gKCIsCisJICAgICAgJiYgKGdmY19tYXRjaF9v bXBfdmFyaWFibGVfbGlzdCAoImZyb20gKCIsCiAJCQkJCSAgICAgICZjLT5saXN0c1tPTVBf TElTVF9GUk9NXSwgZmFsc2UsCi0JCQkJCSAgICAgIE5VTEwsICZoZWFkLCB0cnVlKSA9PSBN QVRDSF9ZRVMpCisJCQkJCSAgICAgIE5VTEwsICZoZWFkLCB0cnVlLCB0cnVlKQorCQkgID09 IE1BVENIX1lFUykpCiAJICAgIGNvbnRpbnVlOwogCSAgYnJlYWs7CiAJY2FzZSAnZyc6CkBA IC0zNDM2LDkgKzM0MzcsMTAgQEAgZ2ZjX21hdGNoX29tcF9jbGF1c2VzIChnZmNfb21wX2Ns YXVzZXMgKipjcCwgY29uc3Qgb21wX21hc2sgbWFzaywKIAkJY29udGludWU7CiAJICAgIH0K IAkgIGVsc2UgaWYgKChtYXNrICYgT01QX0NMQVVTRV9UTykKLQkgICAgICAmJiBnZmNfbWF0 Y2hfb21wX3ZhcmlhYmxlX2xpc3QgKCJ0byAoIiwKKwkgICAgICAmJiAoZ2ZjX21hdGNoX29t cF92YXJpYWJsZV9saXN0ICgidG8gKCIsCiAJCQkJCSAgICAgICZjLT5saXN0c1tPTVBfTElT VF9UT10sIGZhbHNlLAotCQkJCQkgICAgICBOVUxMLCAmaGVhZCwgdHJ1ZSkgPT0gTUFUQ0hf WUVTKQorCQkJCQkgICAgICBOVUxMLCAmaGVhZCwgdHJ1ZSwgdHJ1ZSkKKwkJICA9PSBNQVRD SF9ZRVMpKQogCSAgICBjb250aW51ZTsKIAkgIGJyZWFrOwogCWNhc2UgJ3UnOgpAQCAtNzU4 NSw4ICs3NTg3LDExIEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2RlLCBn ZmNfb21wX2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCQkJICAgT25seSByYWlzZSBhbiBlcnJv ciBoZXJlIGlmIHdlJ3JlIHJlYWxseSBzdXJlIHRoZQogCQkJICAgYXJyYXkgaXNuJ3QgY29u dGlndW91cy4gIEFuIGV4cHJlc3Npb24gc3VjaCBhcwogCQkJICAgYXJyKC1uOm4sLW46bikg Y291bGQgYmUgY29udGlndW91cyBldmVuIGlmIGl0IGxvb2tzCi0JCQkgICBsaWtlIGl0IG1h eSBub3QgYmUuICAqLworCQkJICAgbGlrZSBpdCBtYXkgbm90IGJlLgorCQkJICAgQW5kIE9w ZW5NUCdzICd0YXJnZXQgdXBkYXRlJyBwZXJtaXRzIHN0cmlkZXMgZm9yCisJCQkgICB0aGUg dG8vZnJvbSBjbGF1c2UuICovCiAJCQlpZiAoY29kZS0+b3AgIT0gRVhFQ19PQUNDX1VQREFU RQorCQkJICAgICYmIGNvZGUtPm9wICE9IEVYRUNfT01QX1RBUkdFVF9VUERBVEUKIAkJCSAg ICAmJiBsaXN0ICE9IE9NUF9MSVNUX0NBQ0hFCiAJCQkgICAgJiYgbGlzdCAhPSBPTVBfTElT VF9ERVBFTkQKIAkJCSAgICAmJiAhZ2ZjX2lzX3NpbXBseV9jb250aWd1b3VzIChuLT5leHBy LCBmYWxzZSwgdHJ1ZSkKQEAgLTc2MzAsNyArNzYzNSw5IEBAIHJlc29sdmVfb21wX2NsYXVz ZXMgKGdmY19jb2RlICpjb2RlLCBnZmNfb21wX2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCQkJ aW50IGk7CiAJCQlnZmNfYXJyYXlfcmVmICphciA9ICZsYXN0c2xpY2UtPnUuYXI7CiAJCQlm b3IgKGkgPSAwOyBpIDwgYXItPmRpbWVuOyBpKyspCi0JCQkgIGlmIChhci0+c3RyaWRlW2ld ICYmIGNvZGUtPm9wICE9IEVYRUNfT0FDQ19VUERBVEUpCisJCQkgIGlmIChhci0+c3RyaWRl W2ldCisJCQkgICAgICAmJiBjb2RlLT5vcCAhPSBFWEVDX09BQ0NfVVBEQVRFCisJCQkgICAg ICAmJiBjb2RlLT5vcCAhPSBFWEVDX09NUF9UQVJHRVRfVVBEQVRFKQogCQkJICAgIHsKIAkJ CSAgICAgIGdmY19lcnJvciAoIlN0cmlkZSBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBmb3Ig IgogCQkJCQkgImFycmF5IHNlY3Rpb24gaW4gJXMgY2xhdXNlIGF0ICVMIiwKZGlmZiAtLWdp dCBhL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLW9w ZW5tcC5jYwppbmRleCA5YmQ0ZTZjN2UxYi4uNGJmZGY4NWNkOWIgMTAwNjQ0Ci0tLSBhL2dj Yy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1vcGVu bXAuY2MKQEAgLTM2MjYsNyArMzYyNiwxMCBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0 bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgIGdjY191 bnJlYWNoYWJsZSAoKTsKIAkJfQogCSAgICAgIHRyZWUgbm9kZSA9IGJ1aWxkX29tcF9jbGF1 c2UgKGlucHV0X2xvY2F0aW9uLCBjbGF1c2VfY29kZSk7Ci0JICAgICAgaWYgKG4tPmV4cHIg PT0gTlVMTCB8fCBuLT5leHByLT5yZWYtPnUuYXIudHlwZSA9PSBBUl9GVUxMKQorCSAgICAg IGlmIChuLT5leHByID09IE5VTEwKKwkJICB8fCAobi0+ZXhwci0+cmVmLT50eXBlID09IFJF Rl9BUlJBWQorCQkgICAgICAmJiBuLT5leHByLT5yZWYtPnUuYXIudHlwZSA9PSBBUl9GVUxM CisJCSAgICAgICYmIG4tPmV4cHItPnJlZi0+bmV4dCA9PSBOVUxMKSkKIAkJewogCQkgIHRy ZWUgZGVjbCA9IGdmY190cmFuc19vbXBfdmFyaWFibGUgKG4tPnN5bSwgZmFsc2UpOwogCQkg IGlmIChnZmNfb21wX3ByaXZhdGl6ZV9ieV9yZWZlcmVuY2UgKGRlY2wpKQpAQCAtMzY2Niwx MyArMzY2OSwxMyBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9j aywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQl7CiAJCSAgdHJlZSBwdHI7CiAJCSAg Z2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7Ci0JCSAgaWYgKG4tPmV4cHItPnJlZi0+dS5hci50 eXBlID09IEFSX0VMRU1FTlQpCisJCSAgaWYgKG4tPmV4cHItPnJhbmsgPT0gMCkKIAkJICAg IHsKIAkJICAgICAgZ2ZjX2NvbnZfZXhwcl9yZWZlcmVuY2UgKCZzZSwgbi0+ZXhwcik7CiAJ CSAgICAgIHB0ciA9IHNlLmV4cHI7CiAJCSAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sg KGJsb2NrLCAmc2UucHJlKTsKIAkJICAgICAgT01QX0NMQVVTRV9TSVpFIChub2RlKQotCQkJ PSBUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFIChwdHIpKTsKKwkJCT0gVFlQRV9TSVpFX1VO SVQgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChwdHIpKSk7CiAJCSAgICB9CiAJCSAgZWxzZQog CQkgICAgewpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFu L3RhcmdldC0xMS5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFy Z2V0LTExLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjBm YWEyZTYyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21w LmZvcnRyYW4vdGFyZ2V0LTExLmY5MApAQCAtMCwwICsxLDc1IEBACishIEJhc2VkIG9uIGxp YmdvbXAuYy90YXJnZXQtMjMuYworCishIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1 bXAtdHJlZS1vcmlnaW5hbCIgfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm9t cCB0YXJnZXQgdXBkYXRlIHRvXFwoeHhzXFxcWzNcXFxdIFxcXFtsZW46IDJcXFxdXFwpIiAi b3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm9tcCB0YXJn ZXQgdXBkYXRlIHRvXFwoc1xcLnMgXFxcW2xlbjogNFxcXF1cXCkiICJvcmlnaW5hbCIgfSB9 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAib21wIHRhcmdldCB1cGRhdGUgZnJv bVxcKHNcXC5zIFxcXFtsZW46IDRcXFxdXFwpIiAib3JpZ2luYWwiIH0gfQorCittb2R1bGUg bQorICBpbXBsaWNpdCBub25lCisgIHR5cGUgU190eXBlCisgICAgaW50ZWdlciBzCisgICAg aW50ZWdlciwgcG9pbnRlciA6OiB1KDopID0+IG51bGwoKQorICAgIGludGVnZXIgOjogdigw OjQpCisgIGVuZCB0eXBlIFNfdHlwZQorICBpbnRlZ2VyLCB2b2xhdGlsZSA6OiB6CitlbmQg bW9kdWxlIG0KKworcHJvZ3JhbSBtYWluCisgIHVzZSBtCisgIGltcGxpY2l0IG5vbmUKKyAg aW50ZWdlciwgdGFyZ2V0IDo6IHUoMDo5KSA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4 LCA5XQorICBsb2dpY2FsIDo6IGVycgorICB0eXBlIChTX3R5cGUpIDo6IHMKKyAgaW50ZWdl ciwgcG9pbnRlciA6OiB2KDopCisgIGludGVnZXIoa2luZD0yKSA6OiB4eHMoNSkKKyAgZXJy ID0gLmZhbHNlLgorICBzID0gU190eXBlKDksIHY9WzEwLCAxMSwgMTIsIDEzLCAxNF0pCisg IHMldSgwOikgPT4gdSgzOikKKyAgdigtNCszOikgPT4gdSgzOikKKyAgeHhzID0gWy0xLC0y LC0zLC00LC01XQorICAhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKHRvOiBzJXMsIHMl dSwgcyV1KDA6NSkpIG1hcCAoYWxsb2M6IHMldigxOjQpLCB4eHMoMzo1KSkKKyAgcyVzID0g cyVzICsgMQorICB1KDMpID0gdSgzKSArIDEKKyAgcyV2KDEpID0gcyV2KDEpICsgMQorICB4 eHMoMykgPSAtMzMKKyAgeHhzKDQpID0gLTQ0CisgIHh4cyg1KSA9IC01NQorICAhJG9tcCB0 YXJnZXQgdXBkYXRlIHRvICh4eHMoNCkpCisgICEkb21wIHRhcmdldCB1cGRhdGUgdG8gKHMl cykgdG8gKHMldSgwOjIpLCBzJXYoMTo0KSkKKworICAhJG9tcCB0YXJnZXQgbWFwIChhbGxv YzogcyVzLCBzJXYoMTo0KSkgbWFwIChmcm9tOiBlcnIpCisgICAgZXJyID0gLmZhbHNlLgor ICAgIGlmIChzJXMgLz0gMTAgLm9yLiBzJXYoMSkgLz0gMTIgLm9yLiBzJXYoMikgLz0gMTIg Lm9yLiBzJXYoMykgLz0gMTMpICYKKyAgICAgIGVyciA9IC50cnVlLgorICAgIGlmICh2KC0x KSAvPSA0IC5vci4gdigwKSAvPSA0IC5vci4gdigxKSAvPSA1IC5vci4gdigyKSAvPSA2IC5v ci4gdigzKSAvPSA3KSAmCisgICAgICBlcnIgPSAudHJ1ZS4KKyAgICBpZiAoeHhzKDQpIC89 IC00NCkgJgorICAgICAgZXJyID0gLnRydWUuCisgICAgcyVzID0gcyVzICsgMQorICAgIHMl digyKSA9IHMldigyKSArIDIKKyAgICB2KC0xKSA9IDUKKyAgICB2KDMpID0gOQorICAhJG9t cCBlbmQgdGFyZ2V0CisKKyAgaWYgKGVycikgJgorICAgIGVycm9yIHN0b3AKKworICAhJG9t cCB0YXJnZXQgbWFwIChhbGxvYzogcyV1KDA6NSkpCisgICAgZXJyID0gLmZhbHNlLgorICAg IGlmIChzJXUoMCkgLz0gNSAub3IuIHMldSgxKSAvPSA0IC5vci4gcyV1KDIpIC89IDUgLm9y LiBzJXUoMykgLz0gNiAub3IuIHMldSg0KSAvPSA5KSAmCisgICAgICBlcnIgPSAudHJ1ZS4K KyAgICBzJXUoMSkgPSAxMgorICAhJG9tcCBlbmQgdGFyZ2V0CisKKyAgISRvbXAgdGFyZ2V0 IHVwZGF0ZSBmcm9tIChzJXMsIHMldSgwOjUpKSBmcm9tIChzJXYoMTo0KSkKKyAgaWYgKGVy ciAub3IuIHMlcyAvPSAxMSAub3IuIHUoMCkgLz0gMCAub3IuIHUoMSkgLz0gMSAub3IuIHUo MikgLz0gMiAub3IuIHUoMykgLz0gNSAmCisgICAgICAub3IuIHUoNCkgLz0gMTIgLm9yLiB1 KDUpIC89IDUgLm9yLiB1KDYpIC89IDYgLm9yLiB1KDcpIC89IDkgLm9yLiB1KDgpIC89IDgg ICAgJgorICAgICAgLm9yLiB1KDkpIC89IDkgLm9yLiBzJXYoMCkgLz0gMTAgLm9yLiBzJXYo MSkgLz0gMTIgLm9yLiBzJXYoMikgLz0gMTQgICAgICAgICAgICYKKyAgICAgIC5vci4gcyV2 KDMpIC89IDEzIC5vci4gcyV2KDQpIC89IDE0KSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmCisgICAgZXJyb3Igc3RvcAorICAhICEkb21wIHRhcmdldCBl eGl0IGRhdGEgbWFwIChyZWxlYXNlOiBzJXMpCisgICEgISRvbXAgdGFyZ2V0IGV4aXQgZGF0 YSBtYXAgKHJlbGVhc2U6IHMldSgwOjUpKQorICAhICEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwIChkZWxldGU6IHMldigxOjQpKQorICAhICEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw IChyZWxlYXNlOiBzJXMpCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi90YXJnZXQtMTMuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5mb3J0cmFuL3RhcmdldC0xMy5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmU2MzM0YTUyNzVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC0xMy5mOTAKQEAgLTAsMCArMSwxNjIgQEAK K21vZHVsZSBtCisgIGltcGxpY2l0IG5vbmUKKyAgdHlwZSB0CisgICAgaW50ZWdlciA6OiBz LCBhKDUpCisgIGVuZCB0eXBlIHQKKworICB0eXBlIHQyCisgICAgaW50ZWdlciA6OiBzLCBh KDUpCisgICAgdHlwZSh0KSA6OiBzdCwgYXQoMjozKQorICBlbmQgdHlwZSB0MgorCisgIGlu dGVyZmFjZSBvcGVyYXRvcigvPSkKKyAgICBwcm9jZWR1cmUgbmVfY29tcGFyZV90CisgICAg cHJvY2VkdXJlIG5lX2NvbXBhcmVfdDIKKyAgZW5kIGludGVyZmFjZQorCitjb250YWlucwor CisgIGxvZ2ljYWwgcHVyZSBlbGVtZW50YWwgZnVuY3Rpb24gbmVfY29tcGFyZV90IChhLCBi KSByZXN1bHQocmVzKQorICAgIHR5cGUodCksIGludGVudChpbikgOjogYSwgYgorICAgIHJl cyA9IChhJXMgLz0gYiVzKSAub3IuIGFueShhJWEgLz0gYiVhKQorICBlbmQgZnVuY3Rpb24K KworICBsb2dpY2FsIHB1cmUgZWxlbWVudGFsIGZ1bmN0aW9uIG5lX2NvbXBhcmVfdDIgKGEs IGIpIHJlc3VsdChyZXMpCisgICAgdHlwZSh0MiksIGludGVudChpbikgOjogYSwgYgorICAg IHJlcyA9IChhJXMgLz0gYiVzKSAub3IuIGFueShhJWEgLz0gYiVhKSAgICAgJgorICAgICAg ICAgIC5vci4gKGElc3QgLz0gYiVzdCkgLm9yLiBhbnkoYSVhdCAvPSBiJWF0KQorICBlbmQg ZnVuY3Rpb24KK2VuZCBtb2R1bGUgbQorCitwcm9ncmFtIHAKK3VzZSBtCitpbXBsaWNpdCBu b25lCisKK3R5cGUodDIpIDo6IHZhcjEsIHZhcjIoNSksIHZhcjMoOikKK3R5cGUodDIpIDo6 IHZhcjFhLCB2YXIyYSg1KSwgdmFyM2EoOikKK2FsbG9jYXRhYmxlIDo6IHZhcjMsIHZhcjNh Citsb2dpY2FsIDo6IHNoYXJlZF9tZW1vcnkgPSAuZmFsc2UuCisKKyEkb21wIHRhcmdldCBt YXAodG86IHNoYXJlZF9tZW1vcnkpCisgIHNoYXJlZF9tZW1vcnkgPSAudHJ1ZS4KKyEkb21w IGVuZCB0YXJnZXQKKwordmFyMSA9IFQyKDEsIFsxLDIsMyw0LDVdLCBUKDExLCBbMTEsMjIs MzMsNDQsNTVdKSwgJgorICAgICAgICAgIFtUKC0xMSwgWy0xMSwtMjIsLTMzLC00NCwtNTVd KSwgVCgxMSwgWzExLDIyLDMzLDQ0LDU1XSldKQorCit2YXIyID0gW1QyKDEwMSwgWzIwMSwy MDIsMjAzLDIwNCwyMDVdLCBUKDIwMTEsIFsyMDExLDIwMjIsMjAzMywyMDQ0LDIwNTVdKSwg JgorICAgICAgICAgICBbVCgtMTEsIFstMTEsLTIyLC0zMywtNDQsLTU1XSksIFQoMTEsIFsx MSwyMiwzMyw0NCw1NV0pXSksICAgICAgICYKKyAgICAgICAgVDIoMTExLCBbMjExLDIxMiwy MTMsMjE0LDIxNV0sIFQoMjExMSwgWzIxMTEsMjEyMiwyMTMzLDIxNDQsMjE1NV0pLCAmCisg ICAgICAgICAgIFtUKC0xMSwgWy0xMSwtMjIsLTMzLC00NCwtNTVdKSwgVCgxMSwgWzExLDIy LDMzLDQ0LDU1XSldKSwgICAgICAgJgorICAgICAgICBUMigxMjEsIFsyMjEsMjIyLDIyMywy MjQsMjI1XSwgVCgyMjExLCBbMjIxMSwyMjIyLDIyMzMsMjI0NCwyMjU1XSksICYKKyAgICAg ICAgICAgW1QoLTExLCBbLTExLC0yMiwtMzMsLTQ0LC01NV0pLCBUKDExLCBbMTEsMjIsMzMs NDQsNTVdKV0pLCAgICAgICAmCisgICAgICAgIFQyKDEzMSwgWzIzMSwyMzIsMjMzLDIzNCwy MzVdLCBUKDIzMTEsIFsyMzExLDIzMjIsMjMzMywyMzQ0LDIzNTVdKSwgJgorICAgICAgICAg ICBbVCgtMTEsIFstMTEsLTIyLC0zMywtNDQsLTU1XSksIFQoMTEsIFsxMSwyMiwzMyw0NCw1 NV0pXSksICAgICAgICYKKyAgICAgICAgVDIoMTQxLCBbMjQxLDI0MiwyNDMsMjQ0LDI0NV0s IFQoMjQxMSwgWzI0MTEsMjQyMiwyNDMzLDI0NDQsMjQ1NV0pLCAmCisgICAgICAgICAgIFtU KC0xMSwgWy0xMSwtMjIsLTMzLC00NCwtNTVdKSwgVCgxMSwgWzExLDIyLDMzLDQ0LDU1XSld KV0KKwordmFyMyA9IFtUMigzMDEsIFs0MDEsNDAyLDQwMyw0MDQsNDA1XSwgVCg0MDExLCBb NDAxMSw0MDIyLDQwMzMsNDA0NCw0MDU1XSksICYKKyAgICAgICAgICAgW1QoLTExLCBbLTEx LC0yMiwtMzMsLTQ0LC01NV0pLCBUKDExLCBbMTEsMjIsMzMsNDQsNTVdKV0pLCAgICAgICAm CisgICAgICAgIFQyKDMxMSwgWzQxMSw0MTIsNDEzLDQxNCw0MTVdLCBUKDQxMTEsIFs0MTEx LDQxMjIsNDEzMyw0MTQ0LDQxNTVdKSwgJgorICAgICAgICAgICBbVCgtMTEsIFstMTEsLTIy LC0zMywtNDQsLTU1XSksIFQoMTEsIFsxMSwyMiwzMyw0NCw1NV0pXSksICAgICAgICYKKyAg ICAgICAgVDIoMzIxLCBbNDIxLDQyMiw0MjMsNDI0LDQyNV0sIFQoNDIxMSwgWzQyMTEsNDIy Miw0MjMzLDQyNDQsNDI1NV0pLCAmCisgICAgICAgICAgIFtUKC0xMSwgWy0xMSwtMjIsLTMz LC00NCwtNTVdKSwgVCgxMSwgWzExLDIyLDMzLDQ0LDU1XSldKSwgICAgICAgJgorICAgICAg ICBUMigzMzEsIFs0MzEsNDMyLDQzMyw0MzQsNDM1XSwgVCg0MzExLCBbNDMxMSw0MzIyLDQz MzMsNDM0NCw0MzU1XSksICYKKyAgICAgICAgICAgW1QoLTExLCBbLTExLC0yMiwtMzMsLTQ0 LC01NV0pLCBUKDExLCBbMTEsMjIsMzMsNDQsNTVdKV0pLCAgICAgICAmCisgICAgICAgIFQy KDM0MSwgWzQ0MSw0NDIsNDQzLDQ0NCw0NDVdLCBUKDQ0MTEsIFs0NDExLDQ0MjIsNDQzMyw0 NDQ0LDQ0NTVdKSwgJgorICAgICAgICAgICBbVCgtMTEsIFstMTEsLTIyLC0zMywtNDQsLTU1 XSksIFQoMTEsIFsxMSwyMiwzMyw0NCw1NV0pXSldCisKK3ZhcjFhID0gdmFyMQordmFyMmEg PSB2YXIyCit2YXIzYSA9IHZhcjMKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRv OnZhcjEpCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG86dmFyMikKKyEkb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcCh0bzp2YXIzKQorCishIC0tLS0tLS0tLS0tLS0tLQorCish JG9tcCB0YXJnZXQgdXBkYXRlIGZyb20odmFyMSVhdCg6OjIpKQorCitpZiAodmFyMWEgLz0g dmFyMSkgZXJyb3Igc3RvcAoraWYgKGFueSAodmFyMmEgLz0gdmFyMikpIGVycm9yIHN0b3AK K2lmIChhbnkgKHZhcjNhIC89IHZhcjMpKSBlcnJvciBzdG9wCisKKyEgLS0tLS0tLS0tLS0t LS0tCisKKyEkb21wIHRhcmdldAorICB2YXIxJXN0JXMgPSAxMjQzCisgIHZhcjIoMyklYXQo MikgPSBUKDEyMywgWzM0NSw2NCwzNTYsMzksMTNdKQorICB2YXIyKDMpJWF0KDMpID0gVCg0 OCwgWzc0LDE2Miw1NzIsMzU3LDNdKQorISRvbXAgZW5kIHRhcmdldAorCitpZiAoLm5vdC4g c2hhcmVkX21lbW9yeSkgdGhlbgorICBpZiAodmFyMSAvPSB2YXIxKSBlcnJvciBzdG9wCisg IGlmIChhbnkgKHZhcjJhIC89IHZhcjIpKSBlcnJvciBzdG9wCisgIGlmIChhbnkgKHZhcjNh IC89IHZhcjMpKSBlcnJvciBzdG9wCitlbmRpZgorCishJG9tcCB0YXJnZXQgdXBkYXRlIGZy b20odmFyMSVzdCkgZnJvbSh2YXIyKDMpJWF0KDI6MykpCisKK3ZhcjFhJXN0JXMgPSAxMjQz Cit2YXIyYSgzKSVhdCgyKSA9IFQoMTIzLCBbMzQ1LDY0LDM1NiwzOSwxM10pCit2YXIyYSgz KSVhdCgzKSA9IFQoNDgsIFs3NCwxNjIsNTcyLDM1NywzXSkKK2lmICh2YXIxIC89IHZhcjEp IGVycm9yIHN0b3AKK2lmIChhbnkgKHZhcjJhIC89IHZhcjIpKSBlcnJvciBzdG9wCitpZiAo YW55ICh2YXIzYSAvPSB2YXIzKSkgZXJyb3Igc3RvcAorCishIC0tLS0tLS0tLS0tLS0tLQor Cit2YXIzKDEpID0gdmFyMigxKQordmFyMSVhdCgyKSVhID0gdmFyMigxKSVhCit2YXIxJWF0 KDMpJWEgPSB2YXIyKDIpJWEKKwordmFyMWEgPSB2YXIxCit2YXIyYSA9IHZhcjIKK3ZhcjNh ID0gdmFyMworCishJG9tcCB0YXJnZXQgdXBkYXRlIHRvKHZhcjMpIHRvKHZhcjElYXQoMjoz KSkKKworISRvbXAgdGFyZ2V0CisgIHZhcjMoMSklcyA9IHZhcjMoMSklcyArIDEyMworICB2 YXIxJWF0KDIpJWEgPSB2YXIxJWF0KDIpJWEgKiA3CisgIHZhcjElYXQoMyklcyA9IHZhcjEl YXQoMyklcyAqICgtMykKKyEkb21wIGVuZCB0YXJnZXQKKworaWYgKC5ub3QuIHNoYXJlZF9t ZW1vcnkpIHRoZW4KKyAgaWYgKHZhcjEgLz0gdmFyMSkgZXJyb3Igc3RvcAorICBpZiAoYW55 ICh2YXIyYSAvPSB2YXIyKSkgZXJyb3Igc3RvcAorICBpZiAoYW55ICh2YXIzYSAvPSB2YXIz KSkgZXJyb3Igc3RvcAorZW5kaWYKKwordmFyM2EoMSklcyA9IHZhcjNhKDEpJXMgKyAxMjMK K3ZhcjFhJWF0KDIpJWEgPSB2YXIxYSVhdCgyKSVhICogNwordmFyMWElYXQoMyklcyA9IHZh cjFhJWF0KDMpJXMgKiAoLTMpCisKK2Jsb2NrCisgIGludGVnZXIsIHZvbGF0aWxlIDo6IGkx LGkyLGkzLGk0LGk1LGk2CisgIGkxID0gMQorICBpMiA9IDIKKyAgaTMgPSAxCisgIGk0ID0g MQorICBpNSA9IDIKKyAgaTYgPSAxCisgICEkb21wIHRhcmdldCB1cGRhdGUgZnJvbSh2YXIz KGkxOmkyOmkzKSkgZnJvbSh2YXIxJWF0KGk0Omk1Omk2KSkKKyAgaTEgPSAzCisgIGkyID0g MworICBpMyA9IDEKKyAgaTQgPSA1CisgIGk1ID0gMQorICAhJG9tcCB0YXJnZXQgdXBkYXRl IGZyb20odmFyMSVhdChpMSklcykgZnJvbSh2YXIxJWF0KGkxKSVhKGkzOmk0Omk1KSkKK2Vu ZCBibG9jaworCitpZiAodmFyMSAvPSB2YXIxKSBlcnJvciBzdG9wCitpZiAoYW55ICh2YXIy YSAvPSB2YXIyKSkgZXJyb3Igc3RvcAoraWYgKGFueSAodmFyM2EgLz0gdmFyMykpIGVycm9y IHN0b3AKKworISAtLS0tLS0tLS0tLS0tLS0KKworISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBt YXAoZnJvbTp2YXIxKQorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTp2YXIyKQor ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTp2YXIzKQorZW5kCg== --------------cYoevOLPWOHoXT0OJ2aKc2lw--