From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24510 invoked by alias); 5 Mar 2014 13:53:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 24483 invoked by uid 89); 5 Mar 2014 13:53:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-qa0-f50.google.com Received: from mail-qa0-f50.google.com (HELO mail-qa0-f50.google.com) (209.85.216.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 05 Mar 2014 13:53:08 +0000 Received: by mail-qa0-f50.google.com with SMTP id o15so967827qap.37 for ; Wed, 05 Mar 2014 05:53:05 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.140.89.71 with SMTP id u65mr6240754qgd.93.1394027585708; Wed, 05 Mar 2014 05:53:05 -0800 (PST) Received: by 10.96.156.38 with HTTP; Wed, 5 Mar 2014 05:53:05 -0800 (PST) In-Reply-To: <5316F34A.9060702@sfr.fr> References: <5148D5DF.9000508@net-b.de> <5308C48C.9080102@sfr.fr> <5316F34A.9060702@sfr.fr> Date: Wed, 05 Mar 2014 13:53:00 -0000 Message-ID: Subject: Re: [Patch, fortran] PR51976 - [F2003] Support deferred-length character components of derived types (allocatable string length) From: Janus Weil To: Mikael Morin Cc: Tobias Burnus , Paul Richard Thomas , "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary=001a11c1390a0df27e04f3dc5737 X-SW-Source: 2014-03/txt/msg00221.txt.bz2 --001a11c1390a0df27e04f3dc5737 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1261 Hi Mikael, >> The patch was regtested on x86_64-unknown-linux-gnu. Ok for trunk? >> > I'm asking for one more minor change, namely: > >> @@ -12364,6 +12356,25 @@ resolve_fl_derived0 (gfc_symbol *sym) >> return false; >> } >> >> + /* Add the hidden deferred length field. */ >> + if (c->ts.type == BT_CHARACTER && c->ts.deferred && !c->attr.function >> + && !sym->attr.is_class) >> + { >> + char name[GFC_MAX_SYMBOL_LEN+1]; >> + gfc_component *strlen; >> + sprintf (name, "_%s", c->name); > > It's not more costly to have a more explicit name like "_%s_length" or > something, and I prefer having the latter in complicated dumps or in the > debugger. I agree. > OK with that change, with the associated buffer size update. Also Steve > noted that the buffer size should take the terminating null character > into account. Steve's comment somehow got lost in the noise. I have updated both the name and the buffer size now in resolve_fl_derived0 as well as gfc_deferred_strlen. Updated patch attached. A few people expressed mixed feelings, therefore I'll wait a couple of days to allow the naysayers to chime in. In the absence of further feedback, I'll commit the patch on the weekend. Cheers, Janus --001a11c1390a0df27e04f3dc5737 Content-Type: text/plain; charset=US-ASCII; name="deferred-len-comp_2014-03-05.diff" Content-Disposition: attachment; filename="deferred-len-comp_2014-03-05.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hsenxr9b0 Content-length: 24974 SW5kZXg6IGdjYy9mb3J0cmFuL2dmb3J0cmFuLmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAkocmV2aXNpb24g MjA4MzQ0KQorKysgZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAkod29ya2luZyBj b3B5KQpAQCAtODExLDYgKzgxMSw5IEBAIHR5cGVkZWYgc3RydWN0CiAgIC8q IEF0dHJpYnV0ZXMgc2V0IGJ5IGNvbXBpbGVyIGV4dGVuc2lvbnMgKCFHQ0Mk IEFUVFJJQlVURVMpLiAgKi8KICAgdW5zaWduZWQgZXh0X2F0dHI6RVhUX0FU VFJfTlVNOwogCisgIC8qIElzIGEgcGFyYW1ldGVyIGFzc29jaWF0ZWQgd2l0 aCBhIGRlZmVycmVkIHR5cGUgY29tcG9uZW50LiAgKi8KKyAgdW5zaWduZWQg ZGVmZXJyZWRfcGFyYW1ldGVyOjE7CisKICAgLyogVGhlIG5hbWVzcGFjZSB3 aGVyZSB0aGUgYXR0cmlidXRlIGhhcyBiZWVuIHNldC4gICovCiAgIHN0cnVj dCBnZmNfbmFtZXNwYWNlICp2b2xhdGlsZV9ucywgKmFzeW5jaHJvbm91c19u czsKIH0KSW5kZXg6IGdjYy9mb3J0cmFuL3ByaW1hcnkuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBnY2MvZm9ydHJhbi9wcmltYXJ5LmMJKHJldmlz aW9uIDIwODM0NCkKKysrIGdjYy9mb3J0cmFuL3ByaW1hcnkuYwkod29ya2lu ZyBjb3B5KQpAQCAtMjM1NSw3ICsyMzU1LDcgQEAgYnVpbGRfYWN0dWFsX2Nv bnN0cnVjdG9yIChnZmNfc3RydWN0dXJlX2N0b3JfY29tcG8KIAl9CiAKICAg ICAgIC8qIElmIGl0IHdhcyBub3QgZm91bmQsIHRyeSB0aGUgZGVmYXVsdCBp bml0aWFsaXplciBpZiB0aGVyZSdzIGFueTsKLQkgb3RoZXJ3aXNlLCBpdCdz IGFuIGVycm9yLiAgKi8KKwkgb3RoZXJ3aXNlLCBpdCdzIGFuIGVycm9yIHVu bGVzcyB0aGlzIGlzIGEgZGVmZXJyZWQgcGFyYW1ldGVyLiAgKi8KICAgICAg IGlmICghY29tcF9pdGVyKQogCXsKIAkgIGlmIChjb21wLT5pbml0aWFsaXpl cikKQEAgLTIzNjUsNyArMjM2NSw3IEBAIGJ1aWxkX2FjdHVhbF9jb25zdHJ1 Y3RvciAoZ2ZjX3N0cnVjdHVyZV9jdG9yX2NvbXBvCiAJCXJldHVybiBmYWxz ZTsKIAkgICAgICB2YWx1ZSA9IGdmY19jb3B5X2V4cHIgKGNvbXAtPmluaXRp YWxpemVyKTsKIAkgICAgfQotCSAgZWxzZQorCSAgZWxzZSBpZiAoIWNvbXAt PmF0dHIuZGVmZXJyZWRfcGFyYW1ldGVyKQogCSAgICB7CiAJICAgICAgZ2Zj X2Vycm9yICgiTm8gaW5pdGlhbGl6ZXIgZm9yIGNvbXBvbmVudCAnJXMnIGdp dmVuIGluIHRoZSIKIAkJCSAiIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBhdCAl QyEiLCBjb21wLT5uYW1lKTsKQEAgLTI0NDcsNyArMjQ0Nyw3IEBAIGdmY19j b252ZXJ0X3RvX3N0cnVjdHVyZV9jb25zdHJ1Y3RvciAoZ2ZjX2V4cHIgKmUs CiAJewogCSAgLyogQ29tcG9uZW50cyB3aXRob3V0IG5hbWUgYXJlIG5vdCBh bGxvd2VkIGFmdGVyIHRoZSBmaXJzdCBuYW1lZAogCSAgICAgY29tcG9uZW50 IGluaXRpYWxpemVyISAgKi8KLQkgIGlmICghY29tcCkKKwkgIGlmICghY29t cCB8fCBjb21wLT5hdHRyLmRlZmVycmVkX3BhcmFtZXRlcikKIAkgICAgewog CSAgICAgIGlmIChsYXN0X25hbWUpCiAJCWdmY19lcnJvciAoIkNvbXBvbmVu dCBpbml0aWFsaXplciB3aXRob3V0IG5hbWUgYWZ0ZXIgY29tcG9uZW50IgpJ bmRleDogZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy9mb3J0cmFuL3Jlc29sdmUuYwkocmV2aXNpb24gMjA4 MzQ0KQorKysgZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jCSh3b3JraW5nIGNvcHkp CkBAIC0xMjEwNSwxNCArMTIxMDUsNiBAQCByZXNvbHZlX2ZsX2Rlcml2ZWQw IChnZmNfc3ltYm9sICpzeW0pCiAgICAgICBpZiAoYy0+YXR0ci5hcnRpZmlj aWFsKQogCWNvbnRpbnVlOwogCi0gICAgICAvKiBTZWUgUFJzIDUxNTUwLCA0 NzU0NSwgNDg2NTQsIDQ5MDUwLCA1MTA3NSAtIGFuZCA0NTE3MC4gICovCi0g ICAgICBpZiAoYy0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIgJiYgYy0+dHMu ZGVmZXJyZWQgJiYgIWMtPmF0dHIuZnVuY3Rpb24pCi0JewotCSAgZ2ZjX2Vy cm9yICgiRGVmZXJyZWQtbGVuZ3RoIGNoYXJhY3RlciBjb21wb25lbnQgJyVz JyBhdCAlTCBpcyBub3QgIgotCQkgICAgICJ5ZXQgc3VwcG9ydGVkIiwgYy0+ bmFtZSwgJmMtPmxvYyk7Ci0JICByZXR1cm4gZmFsc2U7Ci0JfQotCiAgICAg ICAvKiBGMjAwOCwgQzQ0Mi4gICovCiAgICAgICBpZiAoKCFzeW0tPmF0dHIu aXNfY2xhc3MgfHwgYyAhPSBzeW0tPmNvbXBvbmVudHMpCiAJICAmJiBjLT5h dHRyLmNvZGltZW5zaW9uCkBAIC0xMjM2NCw2ICsxMjM1NiwyNSBAQCByZXNv bHZlX2ZsX2Rlcml2ZWQwIChnZmNfc3ltYm9sICpzeW0pCiAJICByZXR1cm4g ZmFsc2U7CiAJfQogCisgICAgICAvKiBBZGQgdGhlIGhpZGRlbiBkZWZlcnJl ZCBsZW5ndGggZmllbGQuICAqLworICAgICAgaWYgKGMtPnRzLnR5cGUgPT0g QlRfQ0hBUkFDVEVSICYmIGMtPnRzLmRlZmVycmVkICYmICFjLT5hdHRyLmZ1 bmN0aW9uCisJICAmJiAhc3ltLT5hdHRyLmlzX2NsYXNzKQorCXsKKwkgIGNo YXIgbmFtZVtHRkNfTUFYX1NZTUJPTF9MRU4rOV07CisJICBnZmNfY29tcG9u ZW50ICpzdHJsZW47CisJICBzcHJpbnRmIChuYW1lLCAiXyVzX2xlbmd0aCIs IGMtPm5hbWUpOworCSAgc3RybGVuID0gZ2ZjX2ZpbmRfY29tcG9uZW50IChz eW0sIG5hbWUsIHRydWUsIHRydWUpOworCSAgaWYgKHN0cmxlbiA9PSBOVUxM KQorCSAgICB7CisJICAgICAgaWYgKCFnZmNfYWRkX2NvbXBvbmVudCAoc3lt LCBuYW1lLCAmc3RybGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCSAgICAgIHN0 cmxlbi0+dHMudHlwZSA9IEJUX0lOVEVHRVI7CisJICAgICAgc3RybGVuLT50 cy5raW5kID0gZ2ZjX2NoYXJsZW5faW50X2tpbmQ7CisJICAgICAgc3RybGVu LT5hdHRyLmFjY2VzcyA9IEFDQ0VTU19QUklWQVRFOworCSAgICAgIHN0cmxl bi0+YXR0ci5kZWZlcnJlZF9wYXJhbWV0ZXIgPSAxOworCSAgICB9CisJfQor CiAgICAgICBpZiAoYy0+dHMudHlwZSA9PSBCVF9ERVJJVkVECiAJICAmJiBz eW0tPmNvbXBvbmVudF9hY2Nlc3MgIT0gQUNDRVNTX1BSSVZBVEUKIAkgICYm IGdmY19jaGVja19zeW1ib2xfYWNjZXNzIChzeW0pCkluZGV4OiBnY2MvZm9y dHJhbi90cmFucy1hcnJheS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy9mb3J0cmFuL3RyYW5zLWFycmF5LmMJKHJldmlzaW9uIDIwODM0NCkK KysrIGdjYy9mb3J0cmFuL3RyYW5zLWFycmF5LmMJKHdvcmtpbmcgY29weSkK QEAgLTczNjUsNyArNzM2NSw3IEBAIGdldF9mdWxsX2FycmF5X3NpemUgKHN0 bXRibG9ja190ICpibG9jaywgdHJlZSBkZWNsCiAKIHN0YXRpYyB0cmVlCiBk dXBsaWNhdGVfYWxsb2NhdGFibGUgKHRyZWUgZGVzdCwgdHJlZSBzcmMsIHRy ZWUgdHlwZSwgaW50IHJhbmssCi0JCSAgICAgICBib29sIG5vX21hbGxvYykK KwkJICAgICAgIGJvb2wgbm9fbWFsbG9jLCB0cmVlIHN0cl9zeikKIHsKICAg dHJlZSB0bXA7CiAgIHRyZWUgc2l6ZTsKQEAgLTczODYsNyArNzM4NiwxMSBA QCBkdXBsaWNhdGVfYWxsb2NhdGFibGUgKHRyZWUgZGVzdCwgdHJlZSBzcmMs IHRyZWUgdAogICAgICAgbnVsbF9kYXRhID0gZ2ZjX2ZpbmlzaF9ibG9jayAo JmJsb2NrKTsKIAogICAgICAgZ2ZjX2luaXRfYmxvY2sgKCZibG9jayk7Ci0g ICAgICBzaXplID0gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAodHlwZSkp OworICAgICAgaWYgKHN0cl9zeiAhPSBOVUxMX1RSRUUpCisJc2l6ZSA9IHN0 cl9zejsKKyAgICAgIGVsc2UKKwlzaXplID0gVFlQRV9TSVpFX1VOSVQgKFRS RUVfVFlQRSAodHlwZSkpOworCiAgICAgICBpZiAoIW5vX21hbGxvYykKIAl7 CiAJICB0bXAgPSBnZmNfY2FsbF9tYWxsb2MgKCZibG9jaywgdHlwZSwgc2l6 ZSk7CkBAIC03NDEwLDggKzc0MTQsMTEgQEAgZHVwbGljYXRlX2FsbG9jYXRh YmxlICh0cmVlIGRlc3QsIHRyZWUgc3JjLCB0cmVlIHQKICAgICAgIGVsc2UK IAluZWxlbXMgPSBnZmNfaW5kZXhfb25lX25vZGU7CiAKLSAgICAgIHRtcCA9 IGZvbGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsCi0JCQkgIFRZ UEVfU0laRV9VTklUIChnZmNfZ2V0X2VsZW1lbnRfdHlwZSAodHlwZSkpKTsK KyAgICAgIGlmIChzdHJfc3ogIT0gTlVMTF9UUkVFKQorCXRtcCA9IGZvbGRf Y29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIHN0cl9zeik7CisgICAg ICBlbHNlCisJdG1wID0gZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhf dHlwZSwKKwkJCSAgICBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9lbGVtZW50 X3R5cGUgKHR5cGUpKSk7CiAgICAgICBzaXplID0gZm9sZF9idWlsZDJfbG9j IChpbnB1dF9sb2NhdGlvbiwgTVVMVF9FWFBSLCBnZmNfYXJyYXlfaW5kZXhf dHlwZSwKIAkJCSAgICAgIG5lbGVtcywgdG1wKTsKICAgICAgIGlmICghbm9f bWFsbG9jKQpAQCAtNzQ1Miw3ICs3NDU5LDcgQEAgZHVwbGljYXRlX2FsbG9j YXRhYmxlICh0cmVlIGRlc3QsIHRyZWUgc3JjLCB0cmVlIHQKIHRyZWUKIGdm Y19kdXBsaWNhdGVfYWxsb2NhdGFibGUgKHRyZWUgZGVzdCwgdHJlZSBzcmMs IHRyZWUgdHlwZSwgaW50IHJhbmspCiB7Ci0gIHJldHVybiBkdXBsaWNhdGVf YWxsb2NhdGFibGUgKGRlc3QsIHNyYywgdHlwZSwgcmFuaywgZmFsc2UpOwor ICByZXR1cm4gZHVwbGljYXRlX2FsbG9jYXRhYmxlIChkZXN0LCBzcmMsIHR5 cGUsIHJhbmssIGZhbHNlLCBOVUxMX1RSRUUpOwogfQogCiAKQEAgLTc0NjEs NyArNzQ2OCw3IEBAIGdmY19kdXBsaWNhdGVfYWxsb2NhdGFibGUgKHRyZWUg ZGVzdCwgdHJlZSBzcmMsIHRyCiB0cmVlCiBnZmNfY29weV9hbGxvY2F0YWJs ZV9kYXRhICh0cmVlIGRlc3QsIHRyZWUgc3JjLCB0cmVlIHR5cGUsIGludCBy YW5rKQogewotICByZXR1cm4gZHVwbGljYXRlX2FsbG9jYXRhYmxlIChkZXN0 LCBzcmMsIHR5cGUsIHJhbmssIHRydWUpOworICByZXR1cm4gZHVwbGljYXRl X2FsbG9jYXRhYmxlIChkZXN0LCBzcmMsIHR5cGUsIHJhbmssIHRydWUsIE5V TExfVFJFRSk7CiB9CiAKIApAQCAtNzcxOCw2ICs3NzI1LDE2IEBAIHN0cnVj dHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVl CiAJCQkJICAgICB2b2lkX3R5cGVfbm9kZSwgY29tcCwKIAkJCQkgICAgIGJ1 aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoY29tcCksIDApKTsKIAkgICAgICBn ZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZmbmJsb2NrLCB0bXApOworCSAgICAg IGlmIChnZmNfZGVmZXJyZWRfc3RybGVuIChjLCAmY29tcCkpCisJCXsKKwkJ ICBjb21wID0gZm9sZF9idWlsZDNfbG9jIChpbnB1dF9sb2NhdGlvbiwgQ09N UE9ORU5UX1JFRiwKKwkJCQkJICBUUkVFX1RZUEUgKGNvbXApLAorCQkJCQkg IGRlY2wsIGNvbXAsIE5VTExfVFJFRSk7CisJCSAgdG1wID0gZm9sZF9idWls ZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTU9ESUZZX0VYUFIsCisJCQkJCSBU UkVFX1RZUEUgKGNvbXApLCBjb21wLAorCQkJCQkgYnVpbGRfaW50X2NzdCAo VFJFRV9UWVBFIChjb21wKSwgMCkpOworCQkgIGdmY19hZGRfZXhwcl90b19i bG9jayAoJmZuYmxvY2ssIHRtcCk7CisJCX0KIAkgICAgfQogCSAgZWxzZSBp ZiAoYy0+dHMudHlwZSA9PSBCVF9DTEFTUyAmJiBDTEFTU19EQVRBIChjKS0+ YXR0ci5hbGxvY2F0YWJsZSkKIAkgICAgewpAQCAtNzg1NSw5ICs3ODcyLDI3 IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90 eXBlLCB0cmVlCiAJICAgICAgY29udGludWU7CiAJICAgIH0KIAotCSAgaWYg KGMtPmF0dHIuYWxsb2NhdGFibGUgJiYgIWMtPmF0dHIucHJvY19wb2ludGVy Ci0JICAgICAgJiYgIWNtcF9oYXNfYWxsb2NfY29tcHMpCisJICBpZiAoZ2Zj X2RlZmVycmVkX3N0cmxlbiAoYywgJnRtcCkpCiAJICAgIHsKKwkgICAgICB0 cmVlIGxlbiwgc2l6ZTsKKwkgICAgICBsZW4gPSB0bXA7CisJICAgICAgdG1w ID0gZm9sZF9idWlsZDNfbG9jIChpbnB1dF9sb2NhdGlvbiwgQ09NUE9ORU5U X1JFRiwKKwkJCQkgICAgIFRSRUVfVFlQRSAobGVuKSwKKwkJCQkgICAgIGRl Y2wsIGxlbiwgTlVMTF9UUkVFKTsKKwkgICAgICBsZW4gPSBmb2xkX2J1aWxk M19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT01QT05FTlRfUkVGLAorCQkJCSAg ICAgVFJFRV9UWVBFIChsZW4pLAorCQkJCSAgICAgZGVzdCwgbGVuLCBOVUxM X1RSRUUpOworCSAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRf bG9jYXRpb24sIE1PRElGWV9FWFBSLAorCQkJCSAgICAgVFJFRV9UWVBFIChs ZW4pLCBsZW4sIHRtcCk7CisJICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2Nr ICgmZm5ibG9jaywgdG1wKTsKKwkgICAgICBzaXplID0gc2l6ZV9vZl9zdHJp bmdfaW5fYnl0ZXMgKGMtPnRzLmtpbmQsIGxlbik7CisJICAgICAgdG1wID0g ZHVwbGljYXRlX2FsbG9jYXRhYmxlIChkY21wLCBjb21wLCBjdHlwZSwgcmFu aywKKwkJCQkJICAgZmFsc2UsIHNpemUpOworCSAgICAgIGdmY19hZGRfZXhw cl90b19ibG9jayAoJmZuYmxvY2ssIHRtcCk7CisJICAgIH0KKwkgIGVsc2Ug aWYgKGMtPmF0dHIuYWxsb2NhdGFibGUgJiYgIWMtPmF0dHIucHJvY19wb2lu dGVyCisJCSAgICYmICFjbXBfaGFzX2FsbG9jX2NvbXBzKQorCSAgICB7CiAJ ICAgICAgcmFuayA9IGMtPmFzID8gYy0+YXMtPnJhbmsgOiAwOwogCSAgICAg IGlmIChjLT5hdHRyLmNvZGltZW5zaW9uKQogCQl0bXAgPSBnZmNfY29weV9h bGxvY2F0YWJsZV9kYXRhIChkY21wLCBjb21wLCBjdHlwZSwgcmFuayk7CkBA IC04MzQyLDEwICs4Mzc3LDI0IEBAIGdmY19hbGxvY19hbGxvY2F0YWJsZV9m b3JfYXNzaWdubWVudCAoZ2ZjX2xvb3BpbmZvCiAgIC8qIEdldCB0aGUgbmV3 IGxocyBzaXplIGluIGJ5dGVzLiAgKi8KICAgaWYgKGV4cHIxLT50cy50eXBl ID09IEJUX0NIQVJBQ1RFUiAmJiBleHByMS0+dHMuZGVmZXJyZWQpCiAgICAg ewotICAgICAgdG1wID0gZXhwcjItPnRzLnUuY2wtPmJhY2tlbmRfZGVjbDsK LSAgICAgIGdjY19hc3NlcnQgKGV4cHIxLT50cy51LmNsLT5iYWNrZW5kX2Rl Y2wpOwotICAgICAgdG1wID0gZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGV4 cHIxLT50cy51LmNsLT5iYWNrZW5kX2RlY2wpLCB0bXApOwotICAgICAgZ2Zj X2FkZF9tb2RpZnkgKCZmYmxvY2ssIGV4cHIxLT50cy51LmNsLT5iYWNrZW5k X2RlY2wsIHRtcCk7CisgICAgICBpZiAoZXhwcjItPnRzLmRlZmVycmVkKQor CXsKKwkgIGlmIChUUkVFX0NPREUgKGV4cHIyLT50cy51LmNsLT5iYWNrZW5k X2RlY2wpID09IFZBUl9ERUNMKQorCSAgICB0bXAgPSBleHByMi0+dHMudS5j bC0+YmFja2VuZF9kZWNsOworCSAgZWxzZQorCSAgICB0bXAgPSByc3MtPmlu Zm8tPnN0cmluZ19sZW5ndGg7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHRt cCA9IGV4cHIyLT50cy51LmNsLT5iYWNrZW5kX2RlY2w7CisJICB0bXAgPSBm b2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZXhwcjEtPnRzLnUuY2wtPmJhY2tl bmRfZGVjbCksIHRtcCk7CisJfQorCisgICAgICBpZiAoZXhwcjEtPnRzLnUu Y2wtPmJhY2tlbmRfZGVjbAorCSAgJiYgVFJFRV9DT0RFIChleHByMS0+dHMu dS5jbC0+YmFja2VuZF9kZWNsKSA9PSBWQVJfREVDTCkKKwlnZmNfYWRkX21v ZGlmeSAoJmZibG9jaywgZXhwcjEtPnRzLnUuY2wtPmJhY2tlbmRfZGVjbCwg dG1wKTsKKyAgICAgIGVsc2UKKwlnZmNfYWRkX21vZGlmeSAoJmZibG9jaywg bHNzLT5pbmZvLT5zdHJpbmdfbGVuZ3RoLCB0bXApOwogICAgIH0KICAgZWxz ZSBpZiAoZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSICYmIGV4cHIx LT50cy51LmNsLT5iYWNrZW5kX2RlY2wpCiAgICAgewpJbmRleDogZ2NjL2Zv cnRyYW4vdHJhbnMtZXhwci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy9mb3J0cmFuL3RyYW5zLWV4cHIuYwkocmV2aXNpb24gMjA4MzQ0KQor KysgZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jCSh3b3JraW5nIGNvcHkpCkBA IC0xNjg5LDYgKzE2ODksMTQgQEAgZ2ZjX2NvbnZfY29tcG9uZW50X3JlZiAo Z2ZjX3NlICogc2UsIGdmY19yZWYgKiByZWYKICAgICAgIHNlLT5zdHJpbmdf bGVuZ3RoID0gdG1wOwogICAgIH0KIAorICBpZiAoZ2ZjX2RlZmVycmVkX3N0 cmxlbiAoYywgJmZpZWxkKSkKKyAgICB7CisgICAgICB0bXAgPSBmb2xkX2J1 aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT01QT05FTlRfUkVGLAorCQkJ ICAgICBUUkVFX1RZUEUgKGZpZWxkKSwKKwkJCSAgICAgZGVjbCwgZmllbGQs IE5VTExfVFJFRSk7CisgICAgICBzZS0+c3RyaW5nX2xlbmd0aCA9IHRtcDsK KyAgICB9CisKICAgaWYgKCgoYy0+YXR0ci5wb2ludGVyIHx8IGMtPmF0dHIu YWxsb2NhdGFibGUpCiAgICAgICAgJiYgKCFjLT5hdHRyLmRpbWVuc2lvbiAm JiAhYy0+YXR0ci5jb2RpbWVuc2lvbikKICAgICAgICAmJiBjLT50cy50eXBl ICE9IEJUX0NIQVJBQ1RFUikKQEAgLTYwNDMsOSArNjA1MSw0MiBAQCBnZmNf dHJhbnNfc3ViY29tcG9uZW50X2Fzc2lnbiAodHJlZSBkZXN0LCBnZmNfY29t cAogCSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmYmxvY2ssIHRtcCk7CiAJ fQogICAgIH0KLSAgZWxzZQorICBlbHNlIGlmIChnZmNfZGVmZXJyZWRfc3Ry bGVuIChjbSwgJnRtcCkpCiAgICAgewotICAgICAgLyogU2NhbGFyIGNvbXBv bmVudC4gICovCisgICAgICB0cmVlIHN0cmxlbjsKKyAgICAgIHN0cmxlbiA9 IHRtcDsKKyAgICAgIGdjY19hc3NlcnQgKHN0cmxlbik7CisgICAgICBzdHJs ZW4gPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT01QT05F TlRfUkVGLAorCQkJCVRSRUVfVFlQRSAoc3RybGVuKSwKKwkJCQlUUkVFX09Q RVJBTkQgKGRlc3QsIDApLAorCQkJCXN0cmxlbiwgTlVMTF9UUkVFKTsKKwor ICAgICAgaWYgKGV4cHItPmV4cHJfdHlwZSA9PSBFWFBSX05VTEwpCisJewor CSAgdG1wID0gYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChjbS0+YmFja2Vu ZF9kZWNsKSwgMCk7CisJICBnZmNfYWRkX21vZGlmeSAoJmJsb2NrLCBkZXN0 LCB0bXApOworCSAgdG1wID0gYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChz dHJsZW4pLCAwKTsKKwkgIGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIHN0cmxl biwgdG1wKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgdHJlZSBzaXplOwor CSAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7CisJICBnZmNfY29udl9leHBy ICgmc2UsIGV4cHIpOworCSAgc2l6ZSA9IHNpemVfb2Zfc3RyaW5nX2luX2J5 dGVzIChjbS0+dHMua2luZCwgc2Uuc3RyaW5nX2xlbmd0aCk7CisJICB0bXAg PSBidWlsZF9jYWxsX2V4cHJfbG9jIChpbnB1dF9sb2NhdGlvbiwKKwkJCQkg ICAgIGJ1aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5fTUFMTE9DKSwK KwkJCQkgICAgIDEsIHNpemUpOworCSAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9j aywgZGVzdCwKKwkJCSAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGRlc3Qp LCB0bXApKTsKKwkgIGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIHN0cmxlbiwg c2Uuc3RyaW5nX2xlbmd0aCk7CisJICB0bXAgPSBnZmNfYnVpbGRfbWVtY3B5 X2NhbGwgKGRlc3QsIHNlLmV4cHIsIHNpemUpOworCSAgZ2ZjX2FkZF9leHBy X3RvX2Jsb2NrICgmYmxvY2ssIHRtcCk7CisJfQorICAgIH0KKyAgZWxzZSBp ZiAoIWNtLT5hdHRyLmRlZmVycmVkX3BhcmFtZXRlcikKKyAgICB7CisgICAg ICAvKiBTY2FsYXIgY29tcG9uZW50IChleGNsdWRpbmcgZGVmZXJyZWQgcGFy YW1ldGVycykuICAqLwogICAgICAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7 CiAgICAgICBnZmNfaW5pdF9zZSAoJmxzZSwgTlVMTCk7CiAKQEAgLTc3NDcs NyArNzc4OCwxMCBAQCBhbGxvY19zY2FsYXJfYWxsb2NhdGFibGVfZm9yX2Fz c2lnbm1lbnQgKHN0bXRibG9jawogCiAgICAgICAvKiBVcGRhdGUgdGhlIGxo cyBjaGFyYWN0ZXIgbGVuZ3RoLiAgKi8KICAgICAgIHNpemUgPSBzdHJpbmdf bGVuZ3RoOwotICAgICAgZ2ZjX2FkZF9tb2RpZnkgKGJsb2NrLCBleHByMS0+ dHMudS5jbC0+YmFja2VuZF9kZWNsLCBzaXplKTsKKyAgICAgIGlmIChUUkVF X0NPREUgKGV4cHIxLT50cy51LmNsLT5iYWNrZW5kX2RlY2wpID09IFZBUl9E RUNMKQorCWdmY19hZGRfbW9kaWZ5IChibG9jaywgZXhwcjEtPnRzLnUuY2wt PmJhY2tlbmRfZGVjbCwgc2l6ZSk7CisgICAgICBlbHNlCisJZ2ZjX2FkZF9t b2RpZnkgKGJsb2NrLCBsc2Uuc3RyaW5nX2xlbmd0aCwgc2l6ZSk7CiAgICAg fQogfQogCkluZGV4OiBnY2MvZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvZm9ydHJhbi90cmFucy1p bnRyaW5zaWMuYwkocmV2aXNpb24gMjA4MzQ0KQorKysgZ2NjL2ZvcnRyYW4v dHJhbnMtaW50cmluc2ljLmMJKHdvcmtpbmcgY29weSkKQEAgLTUxNjYsNyAr NTE2Niw3IEBAIGdmY19jb252X2ludHJpbnNpY19zaXplIChnZmNfc2UgKiBz ZSwgZ2ZjX2V4cHIgKiBlCiAgICBleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5n IG51bGwgY2hhcmFjdGVycy4gIFRoZSByZXN1bHQgaGFzCiAgICBnZmNfYXJy YXlfaW5kZXhfdHlwZSB0eXBlLiAgKi8KIAotc3RhdGljIHRyZWUKK3RyZWUK IHNpemVfb2Zfc3RyaW5nX2luX2J5dGVzIChpbnQga2luZCwgdHJlZSBzdHJp bmdfbGVuZ3RoKQogewogICB0cmVlIGJ5dGVzaXplOwpJbmRleDogZ2NjL2Zv cnRyYW4vdHJhbnMtc3RtdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy9mb3J0cmFuL3RyYW5zLXN0bXQuYwkocmV2aXNpb24gMjA4MzQ0KQor KysgZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jCSh3b3JraW5nIGNvcHkpCkBA IC01MDI4LDYgKzUwMjgsMTEgQEAgZ2ZjX3RyYW5zX2FsbG9jYXRlIChnZmNf Y29kZSAqIGNvZGUpCiAJICAgICAgaWYgKHRtcCAmJiBUUkVFX0NPREUgKHRt cCkgPT0gVkFSX0RFQ0wpCiAJCWdmY19hZGRfbW9kaWZ5ICgmc2UucHJlLCB0 bXAsIGZvbGRfY29udmVydCAoVFJFRV9UWVBFICh0bXApLAogCQkJCW1lbXN6 KSk7CisJICAgICAgZWxzZSBpZiAoYWwtPmV4cHItPnRzLnR5cGUgPT0gQlRf Q0hBUkFDVEVSCisJCSAgICAgICAmJiBhbC0+ZXhwci0+dHMuZGVmZXJyZWQg JiYgc2Uuc3RyaW5nX2xlbmd0aCkKKwkJZ2ZjX2FkZF9tb2RpZnkgKCZzZS5w cmUsIHNlLnN0cmluZ19sZW5ndGgsCisJCQkJZm9sZF9jb252ZXJ0IChUUkVF X1RZUEUgKHNlLnN0cmluZ19sZW5ndGgpLAorCQkJCW1lbXN6KSk7CiAKIAkg ICAgICAvKiBDb252ZXJ0IHRvIHNpemUgaW4gYnl0ZXMsIHVzaW5nIHRoZSBj aGFyYWN0ZXIgS0lORC4gICovCiAJICAgICAgaWYgKHVubGltaXRlZF9jaGFy KQpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBnY2MvZm9ydHJhbi90cmFucy10eXBlcy5jCShy ZXZpc2lvbiAyMDgzNDQpCisrKyBnY2MvZm9ydHJhbi90cmFucy10eXBlcy5j CSh3b3JraW5nIGNvcHkpCkBAIC0yNDg2LDEyICsyNDg2LDE1IEBAIGdmY19n ZXRfZGVyaXZlZF90eXBlIChnZmNfc3ltYm9sICogZGVyaXZlZCkKICAgICAg ICAgZmllbGRfdHlwZSA9IGMtPnRzLnUuZGVyaXZlZC0+YmFja2VuZF9kZWNs OwogICAgICAgZWxzZQogCXsKLQkgIGlmIChjLT50cy50eXBlID09IEJUX0NI QVJBQ1RFUikKKwkgIGlmIChjLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUiAm JiAhYy0+dHMuZGVmZXJyZWQpCiAJICAgIHsKIAkgICAgICAvKiBFdmFsdWF0 ZSB0aGUgc3RyaW5nIGxlbmd0aC4gICovCiAJICAgICAgZ2ZjX2NvbnZfY29u c3RfY2hhcmxlbiAoYy0+dHMudS5jbCk7CiAJICAgICAgZ2NjX2Fzc2VydCAo Yy0+dHMudS5jbC0+YmFja2VuZF9kZWNsKTsKIAkgICAgfQorCSAgZWxzZSBp ZiAoYy0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIpCisJICAgIGMtPnRzLnUu Y2wtPmJhY2tlbmRfZGVjbAorCQkJPSBidWlsZF9pbnRfY3N0IChnZmNfY2hh cmxlbl90eXBlX25vZGUsIDApOwogCiAJICBmaWVsZF90eXBlID0gZ2ZjX3R5 cGVub2RlX2Zvcl9zcGVjICgmYy0+dHMpOwogCX0KSW5kZXg6IGdjYy9mb3J0 cmFuL3RyYW5zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2Zv cnRyYW4vdHJhbnMuYwkocmV2aXNpb24gMjA4MzQ0KQorKysgZ2NjL2ZvcnRy YW4vdHJhbnMuYwkod29ya2luZyBjb3B5KQpAQCAtMjA0NCwzICsyMDQ0LDIx IEBAIGdmY19saWtlbHkgKHRyZWUgY29uZCkKICAgY29uZCA9IGZvbGRfY29u dmVydCAoYm9vbGVhbl90eXBlX25vZGUsIGNvbmQpOwogICByZXR1cm4gY29u ZDsKIH0KKworCisvKiBHZXQgdGhlIHN0cmluZyBsZW5ndGggZm9yIGEgZGVm ZXJyZWQgY2hhcmFjdGVyIGxlbmd0aCBjb21wb25lbnQuICAqLworCitib29s CitnZmNfZGVmZXJyZWRfc3RybGVuIChnZmNfY29tcG9uZW50ICpjLCB0cmVl ICpkZWNsKQoreworICBjaGFyIG5hbWVbR0ZDX01BWF9TWU1CT0xfTEVOKzld OworICBnZmNfY29tcG9uZW50ICpzdHJsZW47CisgIGlmICghKGMtPnRzLnR5 cGUgPT0gQlRfQ0hBUkFDVEVSICYmIGMtPnRzLmRlZmVycmVkKSkKKyAgICBy ZXR1cm4gZmFsc2U7CisgIHNwcmludGYgKG5hbWUsICJfJXNfbGVuZ3RoIiwg Yy0+bmFtZSk7CisgIGZvciAoc3RybGVuID0gYzsgc3RybGVuOyBzdHJsZW4g PSBzdHJsZW4tPm5leHQpCisgICAgaWYgKHN0cmNtcCAoc3RybGVuLT5uYW1l LCBuYW1lKSA9PSAwKQorICAgICAgYnJlYWs7CisgICpkZWNsID0gc3RybGVu ID8gc3RybGVuLT5iYWNrZW5kX2RlY2wgOiBOVUxMX1RSRUU7CisgIHJldHVy biBzdHJsZW4gIT0gTlVMTDsKK30KSW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5z LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2ZvcnRyYW4vdHJh bnMuaAkocmV2aXNpb24gMjA4MzQ0KQorKysgZ2NjL2ZvcnRyYW4vdHJhbnMu aAkod29ya2luZyBjb3B5KQpAQCAtNDIyLDYgKzQyMiw4IEBAIHRyZWUgZ2Zj X2V2YWx1YXRlX25vdyAodHJlZSwgc3RtdGJsb2NrX3QgKik7CiAvKiBGaW5k IHRoZSBhcHByb3ByaWF0ZSB2YXJpYW50IG9mIGEgbWF0aCBpbnRyaW5zaWMu ICAqLwogdHJlZSBnZmNfYnVpbHRpbl9kZWNsX2Zvcl9mbG9hdF9raW5kIChl bnVtIGJ1aWx0X2luX2Z1bmN0aW9uLCBpbnQpOwogCit0cmVlIHNpemVfb2Zf c3RyaW5nX2luX2J5dGVzIChpbnQsIHRyZWUpOworCiAvKiBJbnRyaW5zaWMg cHJvY2VkdXJlIGhhbmRsaW5nLiAgKi8KIHRyZWUgZ2ZjX2NvbnZfaW50cmlu c2ljX3N1YnJvdXRpbmUgKGdmY19jb2RlICopOwogdm9pZCBnZmNfY29udl9p bnRyaW5zaWNfZnVuY3Rpb24gKGdmY19zZSAqLCBnZmNfZXhwciAqKTsKQEAg LTU4MSw2ICs1ODMsOSBAQCBib29sIGdldF9hcnJheV9jdG9yX3N0cmxlbiAo c3RtdGJsb2NrX3QgKiwgZ2ZjX2NvbgogdHJlZSBnZmNfbGlrZWx5ICh0cmVl KTsKIHRyZWUgZ2ZjX3VubGlrZWx5ICh0cmVlKTsKIAorLyogUmV0dXJuIHRo ZSBzdHJpbmcgbGVuZ3RoIG9mIGEgZGVmZXJyZWQgY2hhcmFjdGVyIGxlbmd0 aCBjb21wb25lbnQuICAqLworYm9vbCBnZmNfZGVmZXJyZWRfc3RybGVuIChn ZmNfY29tcG9uZW50ICosIHRyZWUgKik7CisKIC8qIEdlbmVyYXRlIGEgcnVu dGltZSBlcnJvciBjYWxsLiAgKi8KIHRyZWUgZ2ZjX3RyYW5zX3J1bnRpbWVf ZXJyb3IgKGJvb2wsIGxvY3VzKiwgY29uc3QgY2hhciosIC4uLik7CiAKSW5k ZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZGVmZXJyZWRfdHlwZV9j b21wb25lbnRfMS5mOTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJlZF90eXBlX2NvbXBvbmVu dF8xLmY5MAkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZGVmZXJyZWRfdHlwZV9jb21wb25lbnRfMS5mOTAJKHdvcmtpbmcg Y29weSkKQEAgLTAsMCArMSw2MCBAQAorISB7IGRnLWRvIHJ1biB9CishCish IFBSIDUxOTc2OiBbRjIwMDNdIFN1cHBvcnQgZGVmZXJyZWQtbGVuZ3RoIGNo YXJhY3RlciBjb21wb25lbnRzIG9mIGRlcml2ZWQgdHlwZXMgKGFsbG9jYXRh YmxlIHN0cmluZyBsZW5ndGgpCishCishIENvbnRyaWJ1dGVkIGJ5IFRvYmlh cyBCdXJudXMgIDxidXJudXNAZ2NjLmdudS5vcmc+CisKKyAgdHlwZSB0Cisg ICAgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogc3RyX2NvbXAK KyAgICBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBzdHJfY29t cDEKKyAgZW5kIHR5cGUgdAorICB0eXBlKHQpIDo6IHgKKyAgdHlwZSh0KSwg YWxsb2NhdGFibGUsIGRpbWVuc2lvbig6KSA6OiBhcnJheQorCisgICEgQ2hl Y2sgc2NhbGFycworICBhbGxvY2F0ZSAoeCVzdHJfY29tcCwgc291cmNlID0g ImFiYyIpCisgIGNhbGwgY2hlY2sgKHglc3RyX2NvbXAsICJhYmMiKQorICBk ZWFsbG9jYXRlICh4JXN0cl9jb21wKQorICBhbGxvY2F0ZSAoeCVzdHJfY29t cCwgc291cmNlID0gImFiY2RlZmdoaWprbG1ub3AiKQorICBjYWxsIGNoZWNr ICh4JXN0cl9jb21wLCAiYWJjZGVmZ2hpamtsbW5vcCIpCisgIHglc3RyX2Nv bXAgPSAieHl6IgorICBjYWxsIGNoZWNrICh4JXN0cl9jb21wLCAieHl6IikK KyAgeCVzdHJfY29tcCA9ICJhYmNkZWZnaGlqa2xtbm9wIgorICB4JXN0cl9j b21wMSA9ICJsbW5vcHFyc3QiCisgIGNhbGwgZm9vICh4JXN0cl9jb21wMSwg Imxtbm9wcXJzdCIpCisgIGNhbGwgYmFyICh4LCAiYWJjZGVmZ2hpamtsbW5v cCIsICJsbW5vcHFyc3QiKQorCisgICEgQ2hlY2sgYXJyYXlzIGFuZCBzdHJ1 Y3R1cmUgY29uc3RydWN0b3JzCisgIGFsbG9jYXRlIChhcnJheSgyKSwgc291 cmNlID0gW3QoImFiY2VkZWZnIiwiaGkiKSwgdCgiamtsIiwibW5vcCIpXSkK KyAgY2FsbCBjaGVjayAoYXJyYXkoMSklc3RyX2NvbXAsICJhYmNlZGVmZyIp CisgIGNhbGwgY2hlY2sgKGFycmF5KDEpJXN0cl9jb21wMSwgImhpIikKKyAg Y2FsbCBjaGVjayAoYXJyYXkoMiklc3RyX2NvbXAsICJqa2wiKQorICBjYWxs IGNoZWNrIChhcnJheSgyKSVzdHJfY29tcDEsICJtbm9wIikKKyAgZGVhbGxv Y2F0ZSAoYXJyYXkpCisgIGFsbG9jYXRlIChhcnJheSgzKSwgc291cmNlID0g W3gsIHgsIHhdKQorICBhcnJheSgyKSVzdHJfY29tcCA9ICJibG9vZXkiCisg IGNhbGwgYmFyIChhcnJheSgxKSwgImFiY2RlZmdoaWprbG1ub3AiLCAibG1u b3BxcnN0IikKKyAgY2FsbCBiYXIgKGFycmF5KDIpLCAiYmxvb2V5IiwgImxt bm9wcXJzdCIpCisgIGNhbGwgYmFyIChhcnJheSgzKSwgImFiY2RlZmdoaWpr bG1ub3AiLCAibG1ub3BxcnN0IikKKworY29udGFpbnMKKworICBzdWJyb3V0 aW5lIGZvbyAoY2hyMSwgY2hyMikKKyAgICBjaGFyYWN0ZXIgKCopIDo6IGNo cjEsIGNocjIKKyAgICBjYWxsIGNoZWNrIChjaHIxLCBjaHIyKQorICBlbmQg c3Vicm91dGluZQorCisgIHN1YnJvdXRpbmUgYmFyIChhLCBjaHIxLCBjaHIy KQorICAgIGNoYXJhY3RlciAoKikgOjogY2hyMSwgY2hyMgorICAgIHR5cGUo dCkgOjogYQorICAgIGNhbGwgY2hlY2sgKGElc3RyX2NvbXAsIGNocjEpCisg ICAgY2FsbCBjaGVjayAoYSVzdHJfY29tcDEsIGNocjIpCisgIGVuZCBzdWJy b3V0aW5lCisKKyAgc3Vicm91dGluZSBjaGVjayAoY2hyMSwgY2hyMikKKyAg ICBjaGFyYWN0ZXIgKCopIDo6IGNocjEsIGNocjIKKyAgICBpZiAobGVuKGNo cjEpIC5uZS4gbGVuIChjaHIyKSkgY2FsbCBhYm9ydAorICAgIGlmIChjaHIx IC5uZS4gY2hyMikgY2FsbCBhYm9ydAorICBlbmQgc3Vicm91dGluZQorCitl bmQKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZGVmZXJyZWRf dHlwZV9jb21wb25lbnRfMi5mOTAKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJlZF90eXBlX2Nv bXBvbmVudF8yLmY5MAkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvZGVmZXJyZWRfdHlwZV9jb21wb25lbnRfMi5mOTAJKHdv cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorISB7IGRnLWRvIHJ1biB9 CishCishIFBSIDUxOTc2OiBbRjIwMDNdIFN1cHBvcnQgZGVmZXJyZWQtbGVu Z3RoIGNoYXJhY3RlciBjb21wb25lbnRzIG9mIGRlcml2ZWQgdHlwZXMgKGFs bG9jYXRhYmxlIHN0cmluZyBsZW5ndGgpCishCishIENvbnRyaWJ1dGVkIGJ5 IFRvYmlhcyBCdXJudXMgIDxidXJudXNAZ2NjLmdudS5vcmc+CisKKyAgdHlw ZSB0CisgICAgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIGFsbG9jYXRhYmxl IDo6IHN0cl9jb21wCisgICAgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIGFs bG9jYXRhYmxlIDo6IHN0cl9jb21wMQorICBlbmQgdHlwZSB0CisgIHR5cGUo dCkgOjogeAorICB0eXBlKHQpLCBhbGxvY2F0YWJsZSwgZGltZW5zaW9uKDop IDo6IGFycmF5CisKKyAgISBDaGVjayBzY2FsYXJzCisgIGFsbG9jYXRlICh4 JXN0cl9jb21wLCBzb3VyY2UgPSA0XyJhYmMiKQorICBjYWxsIGNoZWNrICh4 JXN0cl9jb21wLCA0XyJhYmMiKQorICBkZWFsbG9jYXRlICh4JXN0cl9jb21w KQorICBhbGxvY2F0ZSAoeCVzdHJfY29tcCwgc291cmNlID0gNF8iYWJjZGVm Z2hpamtsbW5vcCIpCisgIGNhbGwgY2hlY2sgKHglc3RyX2NvbXAsIDRfImFi Y2RlZmdoaWprbG1ub3AiKQorICB4JXN0cl9jb21wID0gNF8ieHl6IgorICBj YWxsIGNoZWNrICh4JXN0cl9jb21wLCA0XyJ4eXoiKQorICB4JXN0cl9jb21w ID0gNF8iYWJjZGVmZ2hpamtsbW5vcCIKKyAgeCVzdHJfY29tcDEgPSA0XyJs bW5vcHFyc3QiCisgIGNhbGwgZm9vICh4JXN0cl9jb21wMSwgNF8ibG1ub3Bx cnN0IikKKyAgY2FsbCBiYXIgKHgsIDRfImFiY2RlZmdoaWprbG1ub3AiLCA0 XyJsbW5vcHFyc3QiKQorCisgICEgQ2hlY2sgYXJyYXlzIGFuZCBzdHJ1Y3R1 cmUgY29uc3RydWN0b3JzCisgIGFsbG9jYXRlIChhcnJheSgyKSwgc291cmNl ID0gW3QoNF8iYWJjZWRlZmciLDRfImhpIiksIHQoNF8iamtsIiw0XyJtbm9w IildKQorICBjYWxsIGNoZWNrIChhcnJheSgxKSVzdHJfY29tcCwgNF8iYWJj ZWRlZmciKQorICBjYWxsIGNoZWNrIChhcnJheSgxKSVzdHJfY29tcDEsIDRf ImhpIikKKyAgY2FsbCBjaGVjayAoYXJyYXkoMiklc3RyX2NvbXAsIDRfImpr bCIpCisgIGNhbGwgY2hlY2sgKGFycmF5KDIpJXN0cl9jb21wMSwgNF8ibW5v cCIpCisgIGRlYWxsb2NhdGUgKGFycmF5KQorICBhbGxvY2F0ZSAoYXJyYXko MyksIHNvdXJjZSA9IFt4LCB4LCB4XSkKKyAgYXJyYXkoMiklc3RyX2NvbXAg PSA0XyJibG9vZXkiCisgIGNhbGwgYmFyIChhcnJheSgxKSwgNF8iYWJjZGVm Z2hpamtsbW5vcCIsIDRfImxtbm9wcXJzdCIpCisgIGNhbGwgYmFyIChhcnJh eSgyKSwgNF8iYmxvb2V5IiwgNF8ibG1ub3BxcnN0IikKKyAgY2FsbCBiYXIg KGFycmF5KDMpLCA0XyJhYmNkZWZnaGlqa2xtbm9wIiwgNF8ibG1ub3BxcnN0 IikKKworY29udGFpbnMKKworICBzdWJyb3V0aW5lIGZvbyAoY2hyMSwgY2hy MikKKyAgICBjaGFyYWN0ZXIgKGxlbj0qLGtpbmQ9NCkgOjogY2hyMSwgY2hy MgorICAgIGNhbGwgY2hlY2sgKGNocjEsIGNocjIpCisgIGVuZCBzdWJyb3V0 aW5lCisKKyAgc3Vicm91dGluZSBiYXIgKGEsIGNocjEsIGNocjIpCisgICAg Y2hhcmFjdGVyIChsZW49KixraW5kPTQpIDo6IGNocjEsIGNocjIKKyAgICB0 eXBlKHQpIDo6IGEKKyAgICBjYWxsIGNoZWNrIChhJXN0cl9jb21wLCBjaHIx KQorICAgIGNhbGwgY2hlY2sgKGElc3RyX2NvbXAxLCBjaHIyKQorICBlbmQg c3Vicm91dGluZQorCisgIHN1YnJvdXRpbmUgY2hlY2sgKGNocjEsIGNocjIp CisgICAgY2hhcmFjdGVyIChsZW49KixraW5kPTQpIDo6IGNocjEsIGNocjIK KyAgICBpZiAobGVuKGNocjEpIC5uZS4gbGVuIChjaHIyKSkgY2FsbCBhYm9y dAorICAgIGlmIChjaHIxIC5uZS4gY2hyMikgY2FsbCBhYm9ydAorICBlbmQg c3Vicm91dGluZQorCitlbmQK --001a11c1390a0df27e04f3dc5737--