From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 52D483858412; Mon, 14 Feb 2022 15:10:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 52D483858412 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: R4/lSkNXdzZc5TdBYHj3l+FuqLnxqG3qmiBTc14RUJ2N7jvv6Lpd04/1Y+oVpVQnHE5Adj30ph laKbwa3P3ZI69kkcXTvWJFSX4WasY/Q3+gPZRLEHcjSYqeRFCoYdXVupaohEw2787d54K1QeJS rDEIexVX5tpw58f3qyfWtEl+ATfjv5Ud1nYe+UvV78g1Mumgw5GMmqv5dwY7RjPVAJWaWxuul7 jLA4AqSMIe7e2hzFGq/Vjm4y1dlDoNISCcc1Kq1x9d/VcViGAGOMTKm6XlgpUzzVAE0W1BRR9E HcE/hschVpySbDSBUYWEPRpH X-IronPort-AV: E=Sophos;i="5.88,368,1635235200"; d="scan'208,223";a="71970505" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 14 Feb 2022 07:10:36 -0800 IronPort-SDR: JmYDW91jFNLG0X9oMkHGmoQ9r9Rd0qeeudHUz+WjErYzFl1AbzURPWWMQ7ImqwHO2JXmXkOyn4 Q24ReEg3WnDU6er92Ga50ZYy5UOyA5oaGdu62sZSU+bxOKmAlBUT7t2Ovrm4TrvKrUcaWfaofj +XEsJfVFPVwTtAPTpaRNZ86qKVO7uW7cpKDapH3C8t1Yr7IQyHYUEjHJ4wT7h71jVUtebOhfFQ yUxb/of7VNZKPCW5DhB5tNPOYKbUjhcJJe5inh7F71n3hQA5nRl/vn0er+JEKyIqyxv6aFEuis AtM= Content-Type: multipart/mixed; boundary="------------dRqGwIgPjyJ0bBZBAverwhpO" Message-ID: <1325ba5d-7069-516e-11b0-35766e5ad85b@codesourcery.com> Date: Mon, 14 Feb 2022 15:09:32 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.0 To: gcc-patches , fortran , Jakub Jelinek References: <88facbcc-5be6-5c3b-1e73-f5ceba75ef6f@codesourcery.com> Subject: Re: [PATCH 6/7] openmp, fortran: Add Fortran support for parsing metadirectives From: Kwok Cheung Yeung In-Reply-To: <88facbcc-5be6-5c3b-1e73-f5ceba75ef6f@codesourcery.com> X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-07.mgc.mentorg.com (139.181.222.7) To SVR-IES-MBX-04.mgc.mentorg.com (139.181.222.4) X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, NICE_REPLY_A, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham 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: Mon, 14 Feb 2022 15:10:40 -0000 --------------dRqGwIgPjyJ0bBZBAverwhpO Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit > This patch implements metadirective parsing in the Fortran frontend. This patch (to be applied on top of the current set of metadirective patches) implements a feature that was present in the C and C++ front-ends but not in Fortran - the early culling of metadirective variants that can be eliminated during parsing because their selectors are resolvable at parse-time and still do not match. This is more efficient, and allows code with nested metadirectives like this (which works on other compilers) to compile: !$omp metadirective when (implementation={vendor("ibm")}: & !$omp& target teams distribute) !$omp metadirective when (implementation={vendor("gnu")}: parallel do) This would currently fail because when parsing the body of the 'target teams distribute', the parser sees the metadirective when it is expecting a loop nest. If the vendor("ibm") is eliminated early though, it would just evaluate to '!$omp nothing' and the following metadirective would not be incorrect. This doesn't work for selectors such as 'arch' that would need to be deferred until later passes though. As the selector matching code (omp_context_selector_matches in omp-general.cc) works on Generic trees, I have allowed for a limited translation from the GFortran AST form to tree form during parsing, skipping over things like expression translation that must be done later. I have also fixed another FE issue with nested metadirectives, that occurs when you have something like: program P !$omp metadirective !$omp metadirective !$omp metadirective end program P When gfc_match_end is called after parsing the do statement, it needs to drop down multiple levels from the innermost metadirective state to that of 'program P' in order to find the proper end type, and not just one level as it currently does. Thanks Kwok --------------dRqGwIgPjyJ0bBZBAverwhpO Content-Type: text/plain; charset="UTF-8"; name="0001-openmp-Eliminate-non-matching-metadirective-variants.patch" Content-Disposition: attachment; filename*0="0001-openmp-Eliminate-non-matching-metadirective-variants.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1YTdiMTA5YTAxNDQyMmE1YjQzZTQzNjY5ZGYxZGMwZDU5ZTgzMGNmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLd29rIENoZXVuZyBZZXVuZyA8a2N5QGNvZGVzb3Vy Y2VyeS5jb20+CkRhdGU6IEZyaSwgMTEgRmViIDIwMjIgMTE6MjA6MTggKzAwMDAKU3ViamVj dDogW1BBVENIIDEvMl0gb3Blbm1wOiBFbGltaW5hdGUgbm9uLW1hdGNoaW5nIG1ldGFkaXJl Y3RpdmUgdmFyaWFudHMKIGVhcmx5IGluIEZvcnRyYW4gZnJvbnQtZW5kCgpUaGlzIHBhdGNo IGNoZWNrcyBkdXJpbmcgcGFyc2luZyBpZiBhIG1ldGFkaXJlY3RpdmUgc2VsZWN0b3IgaXMg Ym90aApyZXNvbHZhYmxlIGFuZCBub24tbWF0Y2hpbmcgLSBpZiBzbywgaXQgaXMgcmVtb3Zl ZCBmcm9tIGZ1cnRoZXIKY29uc2lkZXJhdGlvbi4gIFRoaXMgaXMgYm90aCBtb3JlIGVmZmlj aWVudCwgYW5kIGF2b2lkcyBzcHVyaW91cwpzeW50YXggZXJyb3JzIGNhdXNlZCBieSBjb25z aWRlcmluZyBjb21iaW5hdGlvbnMgb2Ygc2VsZWN0b3JzIHRoYXQKbGVhZCB0byBpbnZhbGlk IGNvbWJpbmF0aW9ucyBvZiBPcGVuTVAgZGlyZWN0aXZlcywgd2hlbiB0aGF0CmNvbWJpbmF0 aW9uIHdvdWxkIG5ldmVyIGFyaXNlIGluIHRoZSBmaXJzdCBwbGFjZS4KClRoaXMgZXhwb3Nl cyBhbm90aGVyIGJ1ZyAtIHdoZW4gbWV0YWRpcmVjdGl2ZXMgdGhhdCBhcmUgbm90IG9mIHRo ZQpiZWdpbi1lbmQgdmFyaWV0eSBhcmUgbmVzdGVkLCB3ZSBtaWdodCBoYXZlIHRvIGRyaWxs IHVwIHRocm91Z2gKbXVsdGlwbGUgbGF5ZXJzIG9mIHRoZSBzdGF0ZSBzdGFjayB0byByZWFj aCB0aGUgc3RhdGUgZm9yIHRoZQpuZXh0IHN0YXRlbWVudC4gIFRoaXMgaXMgbm93IGZpeGVk LgoKMjAyMi0wMi0xMSAgS3dvayBDaGV1bmcgWWV1bmcgIDxrY3lAY29kZXNvdXJjZXJ5LmNv bT4KCglnY2MvCgkqIG9tcC1nZW5lcmFsLmNjIChERUxBWV9NRVRBRElSRUNUSVZFU19BRlRF Ul9MVE8pOiBDaGVjayB0aGF0IGNmdW4gaXMKCW5vbi1udWxsIGJlZm9yZSBkZXJlZmVuY2lu Zy4KCglnY2MvZm9ydHJhbi8KCSogZGVjbC5jYyAoZ2ZjX21hdGNoX2VuZCk6IFNlYXJjaCBm b3IgZmlyc3QgcHJldmlvdXMgc3RhdGUgdGhhdCBpcyBub3QKCUNPTVBfT01QX01FVEFESVJF Q1RJVkUuCgkqIGdmb3J0cmFuLmggKGdmY19za2lwX29tcF9tZXRhZGlyZWN0aXZlX2NsYXVz ZSk6IEFkZCBwcm90b3R5cGUuCgkqIG9wZW5tcC5jYyAobWF0Y2hfb21wX21ldGFkaXJlY3Rp dmUpOiBTa2lwIGNsYXVzZSBpZgoJcmVzdWx0IG9mIGdmY19za2lwX29tcF9tZXRhZGlyZWN0 aXZlX2NsYXVzZSBpcyB0cnVlLgoJKiB0cmFucy1vcGVubXAuY2MgKGdmY190cmFuc19vbXBf c2V0X3NlbGVjdG9yKTogQWRkIGFyZ3VtZW50IGFuZAoJZGlzYWJsZQlleHByZXNzaW9uIGNv bnZlcnNpb24gaWYgZmFsc2UuCgkoZ2ZjX3NraXBfb21wX21ldGFkaXJlY3RpdmVfY2xhdXNl KTogTmV3LgoKCWdjYy90ZXN0c3VpdGUvCgkqIGdmb3J0cmFuLmRnL2dvbXAvbWV0YWRpcmVj dGl2ZS04LmY5MDogTmV3LgotLS0KIGdjYy9mb3J0cmFuL2RlY2wuY2MgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDIxICsrKysrKysrKy0KIGdjYy9mb3J0cmFuL2dmb3J0cmFuLmgg ICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICsrCiBnY2MvZm9ydHJhbi9vcGVubXAuY2Mg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgNyArKystCiBnY2MvZm9ydHJhbi90cmFucy1v cGVubXAuY2MgICAgICAgICAgICAgICAgICAgfCAzOCArKysrKysrKysrKysrKy0tLS0tCiBn Y2Mvb21wLWdlbmVyYWwuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSArKy0K IC4uLi9nZm9ydHJhbi5kZy9nb21wL21ldGFkaXJlY3RpdmUtOC5mOTAgICAgICB8IDIyICsr KysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDgxIGluc2VydGlvbnMoKyksIDE2IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv Z29tcC9tZXRhZGlyZWN0aXZlLTguZjkwCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vZGVj bC5jYyBiL2djYy9mb3J0cmFuL2RlY2wuY2MKaW5kZXggZTAyNGUzNjBjODguLmE3N2FjNzY4 MTc1IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9kZWNsLmNjCisrKyBiL2djYy9mb3J0cmFu L2RlY2wuY2MKQEAgLTgzMjUsMTUgKzgzMjUsMzIgQEAgZ2ZjX21hdGNoX2VuZCAoZ2ZjX3N0 YXRlbWVudCAqc3QpCiAKICAgICBjYXNlIENPTVBfQ09OVEFJTlM6CiAgICAgY2FzZSBDT01Q X0RFUklWRURfQ09OVEFJTlM6Ci0gICAgY2FzZSBDT01QX09NUF9NRVRBRElSRUNUSVZFOgog ICAgIGNhc2UgQ09NUF9PTVBfQkVHSU5fTUVUQURJUkVDVElWRToKICAgICAgIHN0YXRlID0g Z2ZjX3N0YXRlX3N0YWNrLT5wcmV2aW91cy0+c3RhdGU7CiAgICAgICBibG9ja19uYW1lID0g Z2ZjX3N0YXRlX3N0YWNrLT5wcmV2aW91cy0+c3ltID09IE5VTEwKLQkJID8gTlVMTCA6IGdm Y19zdGF0ZV9zdGFjay0+cHJldmlvdXMtPnN5bS0+bmFtZTsKKwkJICAgPyBOVUxMIDogZ2Zj X3N0YXRlX3N0YWNrLT5wcmV2aW91cy0+c3ltLT5uYW1lOwogICAgICAgYWJyZXZpYXRlZF9t b2Rwcm9jX2RlY2wgPSBnZmNfc3RhdGVfc3RhY2stPnByZXZpb3VzLT5zeW0KIAkJJiYgZ2Zj X3N0YXRlX3N0YWNrLT5wcmV2aW91cy0+c3ltLT5hYnJfbW9kcHJvY19kZWNsOwogICAgICAg YnJlYWs7CiAKKyAgICBjYXNlIENPTVBfT01QX01FVEFESVJFQ1RJVkU6CisgICAgICB7CisJ LyogTWV0YWRpcmVjdGl2ZXMgY2FuIGJlIG5lc3RlZCwgc28gd2UgbmVlZCB0byBkcmlsbCBk b3duIHRvIHRoZQorCSAgIGZpcnN0IHN0YXRlIHRoYXQgaXMgbm90IENPTVBfT01QX01FVEFE SVJFQ1RJVkUuICAqLworCWdmY19zdGF0ZV9kYXRhICpzdGF0ZV9kYXRhID0gZ2ZjX3N0YXRl X3N0YWNrOworCisJZG8KKwl7CisJICBzdGF0ZV9kYXRhID0gc3RhdGVfZGF0YS0+cHJldmlv dXM7CisJICBzdGF0ZSA9IHN0YXRlX2RhdGEtPnN0YXRlOworCSAgYmxvY2tfbmFtZSA9IHN0 YXRlX2RhdGEtPnN5bSA9PSBOVUxMCisJCSAgICAgICA/IE5VTEwgOiBzdGF0ZV9kYXRhLT5z eW0tPm5hbWU7CisJICBhYnJldmlhdGVkX21vZHByb2NfZGVjbCA9IHN0YXRlX2RhdGEtPnN5 bQorCQkmJiBzdGF0ZV9kYXRhLT5zeW0tPmFicl9tb2Rwcm9jX2RlY2w7CisJfQorCXdoaWxl IChzdGF0ZSA9PSBDT01QX09NUF9NRVRBRElSRUNUSVZFKTsKKyAgICAgIH0KKyAgICAgIGJy ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9n Y2MvZm9ydHJhbi9nZm9ydHJhbi5oIGIvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAppbmRleCAz ZDhjNjVmZjFiZS4uYmRiNGIwZjZhYTUgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2dmb3J0 cmFuLmgKKysrIGIvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaApAQCAtMzk0MCw0ICszOTQwLDgg QEAgYm9vbCBnZmNfaXNfcmVhbGxvY2F0YWJsZV9saHMgKGdmY19leHByICopOwogdm9pZCBm aW5pc2hfb2FjY19kZWNsYXJlIChnZmNfbmFtZXNwYWNlICosIGdmY19zeW1ib2wgKiwgYm9v bCk7CiB2b2lkIGdmY19hZGp1c3RfYnVpbHRpbnMgKHZvaWQpOwogCisvKiB0cmFucy1vcGVu bXAuYyAqLworCitib29sIGdmY19za2lwX29tcF9tZXRhZGlyZWN0aXZlX2NsYXVzZSAoZ2Zj X29tcF9tZXRhZGlyZWN0aXZlX2NsYXVzZSAqKTsKKwogI2VuZGlmIC8qIEdDQ19HRk9SVFJB Tl9IICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vb3Blbm1wLmNjIGIvZ2NjL2ZvcnRy YW4vb3Blbm1wLmNjCmluZGV4IDFhOTdhNjI0NjJmLi41ZTg3ZTE4Y2UwZCAxMDA2NDQKLS0t IGEvZ2NjL2ZvcnRyYW4vb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0cmFuL29wZW5tcC5jYwpA QCAtNTE5NSw4ICs1MTk1LDExIEBAIG1hdGNoX29tcF9tZXRhZGlyZWN0aXZlIChib29sIGJl Z2luX3ApCiAJICBuZXdfc3QuZXh0Lm9tcF9jbGF1c2VzID0gTlVMTDsKIAl9CiAKLSAgICAg ICpuZXh0X2NsYXVzZSA9IG9tYzsKLSAgICAgIG5leHRfY2xhdXNlID0gJm9tYy0+bmV4dDsK KyAgICAgIGlmICghZ2ZjX3NraXBfb21wX21ldGFkaXJlY3RpdmVfY2xhdXNlIChvbWMpKQor CXsKKwkgICpuZXh0X2NsYXVzZSA9IG9tYzsKKwkgIG5leHRfY2xhdXNlID0gJm9tYy0+bmV4 dDsKKwl9CiAgICAgfQogCiAgIGlmIChnZmNfbWF0Y2hfb21wX2VvcyAoKSAhPSBNQVRDSF9Z RVMpCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MgYi9nY2MvZm9y dHJhbi90cmFucy1vcGVubXAuY2MKaW5kZXggYTE5ZDkxNmQ5OGMuLjg0ZTU2OWQyNjY0IDEw MDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRy YW4vdHJhbnMtb3Blbm1wLmNjCkBAIC03NDk5LDcgKzc0OTksOCBAQCBnZmNfdHJhbnNfb21w X2RlY2xhcmVfc2ltZCAoZ2ZjX25hbWVzcGFjZSAqbnMpCiB9CiAKIHN0YXRpYyB0cmVlCi1n ZmNfdHJhbnNfb21wX3NldF9zZWxlY3RvciAoZ2ZjX29tcF9zZXRfc2VsZWN0b3IgKmdmY19z ZWxlY3RvcnMsIGxvY3VzIHdoZXJlKQorZ2ZjX3RyYW5zX29tcF9zZXRfc2VsZWN0b3IgKGdm Y19vbXBfc2V0X3NlbGVjdG9yICpnZmNfc2VsZWN0b3JzLCBsb2N1cyB3aGVyZSwKKwkJCSAg ICBib29sIGNvbnZfZXhwcl9wID0gdHJ1ZSkKIHsKICAgdHJlZSBzZXRfc2VsZWN0b3JzID0g TlVMTF9UUkVFOwogICBnZmNfb21wX3NldF9zZWxlY3RvciAqb3NzOwpAQCAtNzUyMCwxMSAr NzUyMSwxNSBAQCBnZmNfdHJhbnNfb21wX3NldF9zZWxlY3RvciAoZ2ZjX29tcF9zZXRfc2Vs ZWN0b3IgKmdmY19zZWxlY3RvcnMsIGxvY3VzIHdoZXJlKQogCQljYXNlIENUWF9QUk9QRVJU WV9VU0VSOgogCQljYXNlIENUWF9QUk9QRVJUWV9FWFBSOgogCQkgIHsKLQkJICAgIGdmY19z ZSBzZTsKLQkJICAgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotCQkgICAgZ2ZjX2NvbnZf ZXhwciAoJnNlLCBvdHAtPmV4cHIpOwotCQkgICAgcHJvcGVydGllcyA9IHRyZWVfY29ucyAo TlVMTF9UUkVFLCBzZS5leHByLAotCQkJCQkgICAgcHJvcGVydGllcyk7CisJCSAgICB0cmVl IGV4cHIgPSBOVUxMX1RSRUU7CisJCSAgICBpZiAoY29udl9leHByX3ApCisJCSAgICAgIHsK KwkJCWdmY19zZSBzZTsKKwkJCWdmY19pbml0X3NlICgmc2UsIE5VTEwpOworCQkJZ2ZjX2Nv bnZfZXhwciAoJnNlLCBvdHAtPmV4cHIpOworCQkJZXhwciA9IHNlLmV4cHI7CisJCSAgICAg IH0KKwkJICAgIHByb3BlcnRpZXMgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgZXhwciwgcHJv cGVydGllcyk7CiAJCSAgfQogCQkgIGJyZWFrOwogCQljYXNlIENUWF9QUk9QRVJUWV9JRDoK QEAgLTc1NjAsMTEgKzc1NjUsMTYgQEAgZ2ZjX3RyYW5zX29tcF9zZXRfc2VsZWN0b3IgKGdm Y19vbXBfc2V0X3NlbGVjdG9yICpnZmNfc2VsZWN0b3JzLCBsb2N1cyB3aGVyZSkKIAogCSAg aWYgKG9zLT5zY29yZSkKIAkgICAgewotCSAgICAgIGdmY19zZSBzZTsKLQkgICAgICBnZmNf aW5pdF9zZSAoJnNlLCBOVUxMKTsKLQkgICAgICBnZmNfY29udl9leHByICgmc2UsIG9zLT5z Y29yZSk7CisJICAgICAgdHJlZSBleHByID0gTlVMTF9UUkVFOworCSAgICAgIGlmIChjb252 X2V4cHJfcCkKKwkJeworCQkgIGdmY19zZSBzZTsKKwkJICBnZmNfaW5pdF9zZSAoJnNlLCBO VUxMKTsKKwkJICBnZmNfY29udl9leHByICgmc2UsIG9zLT5zY29yZSk7CisJCSAgZXhwciA9 IHNlLmV4cHI7CisJCX0KIAkgICAgICBwcm9wZXJ0aWVzID0gdHJlZV9jb25zIChnZXRfaWRl bnRpZmllciAoIiBzY29yZSIpLAotCQkJCSAgICAgIHNlLmV4cHIsIHByb3BlcnRpZXMpOwor CQkJCSAgICAgIGV4cHIsIHByb3BlcnRpZXMpOwogCSAgICB9CiAKIAkgIHNlbGVjdG9ycyA9 IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIgKG9zLT50cmFpdF9zZWxlY3Rvcl9uYW1lKSwK QEAgLTc3NTUsMyArNzc2NSwxMSBAQCBnZmNfdHJhbnNfb21wX21ldGFkaXJlY3RpdmUgKGdm Y19jb2RlICpjb2RlKQogCiAgIHJldHVybiBtZXRhZGlyZWN0aXZlX3RyZWU7CiB9CisKK2Jv b2wgZ2ZjX3NraXBfb21wX21ldGFkaXJlY3RpdmVfY2xhdXNlIChnZmNfb21wX21ldGFkaXJl Y3RpdmVfY2xhdXNlICpjbGF1c2UpCit7CisgIHRyZWUgc2VsZWN0b3IgPSBnZmNfdHJhbnNf b21wX3NldF9zZWxlY3RvciAoY2xhdXNlLT5zZWxlY3RvcnMsCisJCQkJCSAgICAgIGNsYXVz ZS0+d2hlcmUsIGZhbHNlKTsKKworICByZXR1cm4gb21wX2NvbnRleHRfc2VsZWN0b3JfbWF0 Y2hlcyAoc2VsZWN0b3IsIHRydWUpID09IDA7Cit9CmRpZmYgLS1naXQgYS9nY2Mvb21wLWdl bmVyYWwuY2MgYi9nY2Mvb21wLWdlbmVyYWwuY2MKaW5kZXggODQyZTlmZDg2OGYuLmIwMzJl MWRlNjk3IDEwMDY0NAotLS0gYS9nY2Mvb21wLWdlbmVyYWwuY2MKKysrIGIvZ2NjL29tcC1n ZW5lcmFsLmNjCkBAIC0xMjU0LDggKzEyNTQsOSBAQCBvbXBfY29udGV4dF9uYW1lX2xpc3Rf cHJvcCAodHJlZSBwcm9wKQogfQogCiAjZGVmaW5lIERFTEFZX01FVEFESVJFQ1RJVkVTX0FG VEVSX0xUTyB7IFwKLSAgaWYgKG1ldGFkaXJlY3RpdmVfcCAmJiAhKGNmdW4tPmN1cnJfcHJv cGVydGllcyAmIFBST1BfZ2ltcGxlX2xvbXBfZGV2KSkJXAotICAgIHJldHVybiAtMTsJXAor ICBpZiAobWV0YWRpcmVjdGl2ZV9wIFwKKyAgICAgICYmICEoY2Z1biAmJiBjZnVuLT5jdXJy X3Byb3BlcnRpZXMgJiBQUk9QX2dpbXBsZV9sb21wX2RldikpIFwKKyAgICByZXR1cm4gLTE7 IFwKIH0KIAogLyogUmV0dXJuIDEgaWYgY29udGV4dCBzZWxlY3RvciBtYXRjaGVzIHRoZSBj dXJyZW50IE9wZW5NUCBjb250ZXh0LCAwCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL2dvbXAvbWV0YWRpcmVjdGl2ZS04LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvZ29tcC9tZXRhZGlyZWN0aXZlLTguZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5lMTM0NzkxMDMzMgotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9tZXRhZGlyZWN0aXZlLTguZjkwCkBAIC0w LDAgKzEsMjIgQEAKKyEgeyBkZy1kbyBjb21waWxlIH0KKyEgeyBkZy1hZGRpdGlvbmFsLW9w dGlvbnMgIi1mZHVtcC10cmVlLW9yaWdpbmFsIiB9CisKK3Byb2dyYW0gdGVzdAorICBpbnRl Z2VyIDo6IGkKKyAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IE4gPSAxMDAKKyAgaW50ZWdlciA6 OiBzdW0gPSAwCisgIAorICAhIFRoZSBjb21waWxlciBzaG91bGQgbmV2ZXIgY29uc2lkZXIg YSBzaXR1YXRpb24gd2hlcmUgYm90aCBtZXRhZGlyZWN0aXZlcworICAhIG1hdGNoLiAgSWYg aXQgZG9lcywgdGhlbiB0aGUgbmVzdGVkIG1ldGFkaXJlY3RpdmUgd291bGQgYmUgYW4gZXJy b3IKKyAgISBhcyBpdCBpcyBub3QgYSBsb29wLW5lc3QgYXMgcGVyIHRoZSBPcGVuTVAgc3Bl Y2lmaWNhdGlvbi4KKworICAhJG9tcCBtZXRhZGlyZWN0aXZlIHdoZW4gKGltcGxlbWVudGF0 aW9uPXt2ZW5kb3IoImlibSIpfTogJgorICAhJG9tcCYgIHRhcmdldCB0ZWFtcyBkaXN0cmli dXRlKQorICAgICEkb21wIG1ldGFkaXJlY3RpdmUgd2hlbiAoaW1wbGVtZW50YXRpb249e3Zl bmRvcigiZ251Iil9OiBwYXJhbGxlbCBkbykKKyAgICAgIGRvIGkgPSAxLCBOCisJc3VtID0g c3VtICsgaQorICAgICAgZW5kIGRvCitlbmQgcHJvZ3JhbQorCishIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC1ub3QgIndoZW4gXFwoaW1wbGVtZW50YXRpb24gdmVuZG9yIFwiaWJt XCJcXCk6IiAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgIndoZW4gXFwoaW1wbGVtZW50YXRpb24gdmVuZG9yIFwiZ251XCJcXCk6IiAxICJv cmlnaW5hbCIgfSB9Ci0tIAoyLjI1LjEKCg== --------------dRqGwIgPjyJ0bBZBAverwhpO--