Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:35451 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 23954 invoked by uid 1010); 13 Feb 2008 16:27:06 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 23939 invoked from network); 13 Feb 2008 16:27:06 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 13 Feb 2008 16:27:06 -0000 Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:51543] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 78/10-24174-85A13B74 for ; Wed, 13 Feb 2008 11:27:06 -0500 Received: from MBOERGER-ZRH.corp.google.com (187-169.79-83.cust.bluewin.ch [83.79.169.187]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id BD4FC1B365D; Wed, 13 Feb 2008 17:27:00 +0100 (CET) Date: Wed, 13 Feb 2008 17:26:31 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <1774382013.20080213172631@marcus-boerger.de> To: "Andi Gutmans" , "Pierre Joye" CC: "PHP Internals List" In-Reply-To: <698DE66518E7CA45812BD18E807866CE013AA6C9@us-ex1.zend.net> References: <971575499.20080209153315@marcus-boerger.de> <698DE66518E7CA45812BD18E807866CE013AA6C9@us-ex1.zend.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------1D1617DD645663" Subject: Re: [PHP-DEV] [RFC] Conditional INI support From: helly@php.net (Marcus Boerger) ------------1D1617DD645663 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello Andi, Pierre, Monday, February 11, 2008, 7:49:04 PM, you wrote: > Hi Marcus, > In general I think conditional INI support can benefit many of our > users. We just need to make sure that we cover the most common needs and > also that we keep it very basic and simple so that we don't boil the > ocean and maintain two languages. So it's a balance we need to meet. Right > It would be very helpful that as part of the feedback loop you write > something a bit more detailed about this feature and what is and isn't > supported. I imagine most people on this list would have a hard time to > figure that out from the patch. This includes: > - What operators are supported in conditionals <, <=, >, >=, ==, !=, &&, || all use atoi [${left} < ${right}] -> atoi(${left}) < atoi(${right}) === and !== are string comparisons [${left} === ${right}] -> !strcmp(${lect}, ${right}) Instead of === and !== I could have introduced functions like strcmp but I wanted to keep it as simple as possible for the lexer as well as the user. The only thing I might want to add is !. But that would be unary and increase complexity. > - Are there any "functions" like empty() or is the ternary operator the > proposed solution for that? None, though instead of empty() you can do: ${var}==="" > - Is it possible to get to environment variables from this? If so how is > it namespaced? How about registry on Windows? Anything the ini allows today is possible, no changes, values are evaluated just as in assignments of the ini file. > - What happens when you use a variable which is not set? > - Do you propose a solution for concatenation of two values or is this > outside the scope? afaik th eini allows that already > - Can each [IF] include multiple conditionals i.e. $(value) > 1 AND > $(value) < 5 or just one condition with the expectation that people will > use nesting. Nesting is supported as well as braces. So the following works: [(${a} < ${b}) && (${c} < ${d})] > A few specific feedbacks: > - Ternary operator's syntax is a bit weird. My preference would be not > to have such an operator and require using [if ..] so that it's very > clear what's pre-processed even if it requires a bit more works. We > don't want the INI files to become too cryptic. Also the syntax would be > better formed as ${value}?1:2 but again I think it's better not to have > it. That seems the common response her. I'll drop it. > - I would prefer to see [ELSEIF] instead of [ELIF] to be consistent with > PHP. It would look weird for the same solution to have two approaches to > this. Both of you guys say the same for the same reasons., so I changed that as well. Also I reduced the number of added values to 'php.zts' and 'php.debug'. Maybe we can add those two as consts (Pierre?). regards marcus >> -----Original Message----- >> From: Marcus Boerger [mailto:helly@php.net] >> Sent: Saturday, February 09, 2008 6:33 AM >> To: PHP Internals List >> Subject: [PHP-DEV] [RFC] Conditional INI support >> >> Hello PHPlers, >> >> attached is a patch against 5.3 that brings three feature additions >> to INI parsing. >> >> 1) Ternary support for values >> >> setting = ${value?1:2} >> >> If ${value} evaluates to true then setting becomes 1 otherwise 2. >> This cannot be nested and only works for values, not for setting > names. >> >> 2) if-elif-else-endif support >> >> [IF ${value} == 1] >> setting = 1 >> [ELIF ${value} == 2] >> setting = 2 >> [ELSE] >> setting = 3 >> [ENDIF] >> >> This can be nested. Alternatively we could use apache style syntax > that >> looks more like XML. The reason I used square brackets is that this is >> the smallest change to normal INI files. >> >> 3) Add more values to INI parsing, namely: >> >> ${php.version} = 50300 >> ${php.debug} = 0 >> ${php.zts} = 0 >> ${php.sapi} = CLI >> >> Any comments? >> >> Best regards, >> Marcus Best regards, Marcus ------------1D1617DD645663 Content-Type: text/plain; name="ze2-ini-conditionals-20080213.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-ini-conditionals-20080213.diff.txt" SW5kZXg6IG1haW4vcGhwX2luaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0 b3J5L3BocC1zcmMvbWFpbi9waHBfaW5pLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM2 LjIuNC4yLjE1LjIuNwpkaWZmIC11IC1wIC1kIC1yMS4xMzYuMi40LjIuMTUuMi43IHBocF9p bmkuYwotLS0gbWFpbi9waHBfaW5pLmMJMyBGZWIgMjAwOCAxNDozNTo1OSAtMDAwMAkxLjEz Ni4yLjQuMi4xNS4yLjcKKysrIG1haW4vcGhwX2luaS5jCTEzIEZlYiAyMDA4IDE2OjIwOjI2 IC0wMDAwCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlICJwaHAuaCIKICNpbmNsdWRl ICJleHQvc3RhbmRhcmQvaW5mby5oIgorI2luY2x1ZGUgImV4dC9zdGFuZGFyZC9iYXNpY19m dW5jdGlvbnMuaCIKICNpbmNsdWRlICJ6ZW5kX2luaS5oIgogI2luY2x1ZGUgInplbmRfaW5p X3NjYW5uZXIuaCIKICNpbmNsdWRlICJwaHBfaW5pLmgiCkBAIC0zMjgsNiArMzI5LDMyIEBA IHN0YXRpYyB2b2lkIHBocF9sb2FkX3plbmRfZXh0ZW5zaW9uX2NiKHYKIH0KIC8qIH19fSAq LwogCitQSFBBUEkgdm9pZCBwaHBfaW5pX2FkZF9jb25maWdfc3RyaW5nbChjb25zdCBjaGFy KiBuYW1lLCBpbnQgbmFtZV9zaXplLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHZhbHVlX2xl biBUU1JNTFNfREMpIC8qIHt7eyovCit7CisJenZhbCB0bXA7CisJWlZBTF9TVFJJTkdMKCZ0 bXAsIHplbmRfc3RybmR1cCh2YWx1ZSwgdmFsdWVfbGVuKSwgdmFsdWVfbGVuLCAwKTsKKwla X1NFVF9SRUZDT1VOVCh0bXAsIDApOworCVpfVU5TRVRfSVNSRUYodG1wKTsKKwl6ZW5kX2hh c2hfdXBkYXRlKCZjb25maWd1cmF0aW9uX2hhc2gsIG5hbWUsIG5hbWVfc2l6ZSwgKHZvaWQg KikgJnRtcCwgc2l6ZW9mKHp2YWwpLCBOVUxMKTsKK30gLyogfX19ICovCisKK1BIUEFQSSB2 b2lkIHBocF9pbmlfYWRkX2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciogbmFtZSwgaW50IG5h bWVfc2l6ZSwgY29uc3QgY2hhciAqdmFsdWUgVFNSTUxTX0RDKSAvKiB7e3sqLworeworCXBo cF9pbmlfYWRkX2NvbmZpZ19zdHJpbmdsKG5hbWUsIG5hbWVfc2l6ZSwgdmFsdWUsIHN0cmxl bih2YWx1ZSkgVFNSTUxTX0NDKTsKK30gLyogfX19ICovCisKK1BIUEFQSSB2b2lkIHBocF9p bmlfYWRkX2NvbmZpZ19sb25nKGNvbnN0IGNoYXIqIG5hbWUsIGludCBuYW1lX3NpemUsIGxv bmcgdmFsdWUgVFNSTUxTX0RDKSAvKiB7e3sqLworeworCWNoYXIgc3RyX3ZhbFszMl07CisJ aW50IHZhbHVlX2xlbiA9IHNscHJpbnRmKHN0cl92YWwsIHNpemVvZihzdHJfdmFsKSwgIiVs ZCIsIHZhbHVlKTsKKwlwaHBfaW5pX2FkZF9jb25maWdfc3RyaW5nbChuYW1lLCBuYW1lX3Np emUsIHN0cl92YWwsIHZhbHVlX2xlbiBUU1JNTFNfQ0MpOworfSAvKiB9fX0gKi8KKworUEhQ QVBJIHZvaWQgcGhwX2luaV9hZGRfY29uZmlnX2Jvb2woY29uc3QgY2hhciogbmFtZSwgaW50 IG5hbWVfc2l6ZSwgaW50IHZhbHVlIFRTUk1MU19EQykgLyoge3t7Ki8KK3sKKwlwaHBfaW5p X2FkZF9jb25maWdfc3RyaW5nbChuYW1lLCBuYW1lX3NpemUsIHZhbHVlID8gIjEiIDogIjAi LCAxIFRTUk1MU19DQyk7Cit9IC8qIH19fSAqLworCiAvKiB7e3sgcGhwX2luaXRfY29uZmln CiAgKi8KIGludCBwaHBfaW5pdF9jb25maWcoVFNSTUxTX0QpCkBAIC0zNDcsNiArMzc0LDE3 IEBAIGludCBwaHBfaW5pdF9jb25maWcoVFNSTUxTX0QpCiAJCXNhcGlfbW9kdWxlLmluaV9k ZWZhdWx0cygmY29uZmlndXJhdGlvbl9oYXNoKTsKIAl9CiAKKyNpZiBaVFMKKwlwaHBfaW5p X2FkZF9jb25maWdfYm9vbCgicGhwLnp0cyIsIHNpemVvZigicGhwLnp0cyIpLCAxIFRTUk1M U19DQyk7CisjZWxzZQorCXBocF9pbmlfYWRkX2NvbmZpZ19ib29sKCJwaHAuenRzIiwgc2l6 ZW9mKCJwaHAuenRzIiksIDAgVFNSTUxTX0NDKTsKKyNlbmRpZgorI2lmIFpFTkRfREVCVUcK KwlwaHBfaW5pX2FkZF9jb25maWdfYm9vbCgicGhwLmRlYnVnIiwgc2l6ZW9mKCJwaHAuZGVi dWciKSwgMSBUU1JNTFNfQ0MpOworI2Vsc2UKKwlwaHBfaW5pX2FkZF9jb25maWdfYm9vbCgi cGhwLmRlYnVnIiwgc2l6ZW9mKCJwaHAuZGVidWciKSwgMCBUU1JNTFNfQ0MpOworI2VuZGlm CisKIAl6ZW5kX2xsaXN0X2luaXQoJmV4dGVuc2lvbl9saXN0cy5lbmdpbmUsIHNpemVvZihj aGFyICopLCAobGxpc3RfZHRvcl9mdW5jX3QpIGZyZWVfZXN0cmluZywgMSk7CiAJemVuZF9s bGlzdF9pbml0KCZleHRlbnNpb25fbGlzdHMuZnVuY3Rpb25zLCBzaXplb2YoY2hhciAqKSwg KGxsaXN0X2R0b3JfZnVuY190KSBmcmVlX2VzdHJpbmcsIDEpOwogCkBAIC01NTgsMjQgKzU5 NiwxOSBAQCBpbnQgcGhwX2luaXRfY29uZmlnKFRTUk1MU19EKQogCVBHKG9wZW5fYmFzZWRp cikgPSBvcGVuX2Jhc2VkaXI7CiAKIAlpZiAoZmguaGFuZGxlLmZwKSB7CisJCWludCBmaWxl bmFtZV9sZW47CisJCWNoYXIgKmZ0bXA7CiAJCWZoLnR5cGUgPSBaRU5EX0hBTkRMRV9GUDsK IAkJUkVTRVRfQUNUSVZFX0lOSV9IQVNIKCk7CiAKIAkJemVuZF9wYXJzZV9pbmlfZmlsZSgm ZmgsIDEsIFpFTkRfSU5JX1NDQU5ORVJfTk9STUFMLCAoemVuZF9pbmlfcGFyc2VyX2NiX3Qp IHBocF9pbmlfcGFyc2VyX2NiLCAmY29uZmlndXJhdGlvbl9oYXNoIFRTUk1MU19DQyk7CiAK LQkJewotCQkJenZhbCB0bXA7Ci0KLQkJCVpfU1RSTEVOKHRtcCkgPSBzdHJsZW4oZmguZmls ZW5hbWUpOwotCQkJWl9TVFJWQUwodG1wKSA9IHplbmRfc3RybmR1cChmaC5maWxlbmFtZSwg Wl9TVFJMRU4odG1wKSk7Ci0JCQlaX1RZUEUodG1wKSA9IElTX1NUUklORzsKLQkJCVpfU0VU X1JFRkNPVU5UKHRtcCwgMCk7Ci0KLQkJCXplbmRfaGFzaF91cGRhdGUoJmNvbmZpZ3VyYXRp b25faGFzaCwgImNmZ19maWxlX3BhdGgiLCBzaXplb2YoImNmZ19maWxlX3BhdGgiKSwgKHZv aWQgKikgJnRtcCwgc2l6ZW9mKHp2YWwpLCBOVUxMKTsKLQkJCWlmIChwaHBfaW5pX29wZW5l ZF9wYXRoKSB7Ci0JCQkJZWZyZWUocGhwX2luaV9vcGVuZWRfcGF0aCk7Ci0JCQl9Ci0JCQlw aHBfaW5pX29wZW5lZF9wYXRoID0gemVuZF9zdHJuZHVwKFpfU1RSVkFMKHRtcCksIFpfU1RS TEVOKHRtcCkpOworCQlmaWxlbmFtZV9sZW4gPSBzdHJsZW4oZmguZmlsZW5hbWUpOworCQlw aHBfaW5pX2FkZF9jb25maWdfc3RyaW5nbCgiY2ZnX2ZpbGVfcGF0aCIsIHNpemVvZigiY2Zn X2ZpbGVfcGF0aCIpLCBmaC5maWxlbmFtZSwgZmlsZW5hbWVfbGVuIFRTUk1MU19DQyk7CisJ CWZ0bXAgPSBwaHBfaW5pX29wZW5lZF9wYXRoOworCQlwaHBfaW5pX29wZW5lZF9wYXRoID0g emVuZF9zdHJuZHVwKGZoLmZpbGVuYW1lLCBmaWxlbmFtZV9sZW4pOworCQlpZiAoZnRtcCkg eworCQkJZWZyZWUoZnRtcCk7CiAJCX0KIAl9CiAKSW5kZXg6IFplbmQvemVuZF9nbG9iYWxz LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVu ZF9nbG9iYWxzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQxLjIuMy4yLjcuMi43CmRp ZmYgLXUgLXAgLWQgLXIxLjE0MS4yLjMuMi43LjIuNyB6ZW5kX2dsb2JhbHMuaAotLS0gWmVu ZC96ZW5kX2dsb2JhbHMuaAkyNCBKYW4gMjAwOCAwOTo0MTozNyAtMDAwMAkxLjE0MS4yLjMu Mi43LjIuNworKysgWmVuZC96ZW5kX2dsb2JhbHMuaAkxMyBGZWIgMjAwOCAxNjoyMDoyNyAt MDAwMApAQCAtNTIsNiArNTIsOCBAQCBFTkRfRVhURVJOX0MoKQogI2VuZGlmCiAKICNkZWZp bmUgU1lNVEFCTEVfQ0FDSEVfU0laRSAzMgorI2RlZmluZSBaRU5EX0RFQlVHX0NGR19QQVJT RVIgMAorCiAKIAogI2luY2x1ZGUgInplbmRfY29tcGlsZS5oIgpAQCAtMjcyLDYgKzI3NCw3 IEBAIHN0cnVjdCBfemVuZF9zY2FubmVyX2dsb2JhbHMgewogCiAJLyogRm9yIGluaSBzY2Fu bmVyLiBNb2RlcyBhcmU6IFpFTkRfSU5JX1NDQU5ORVJfTk9STUFMLCBaRU5EX0lOSV9TQ0FO TkVSX1JBVyAqLwogCWludCBzY2FubmVyX21vZGU7CisJaW50IGlmX2xldmVsOwogCiAjaWZk ZWYgWkVORF9NVUxUSUJZVEUKIAkvKiBvcmlnaW5hbCAodW5maWx0ZXJlZCkgc2NyaXB0ICov CkBAIC0yOTAsNiArMjkzLDEyIEBAIHN0cnVjdCBfemVuZF9zY2FubmVyX2dsb2JhbHMgewog I2VuZGlmIC8qIFpFTkRfTVVMVElCWVRFICovCiB9OwogCit0eXBlZGVmIGVudW0geworCVpF TkRfSU5JX0NPTkRfUkVBRCwKKwlaRU5EX0lOSV9DT05EX0lHTk9SRSwKKwlaRU5EX0lOSV9D T05EX0RPTkUsCit9IFpFTkRfSU5JX0NPTkRJVElPTkFMOworCiAjZW5kaWYgLyogWkVORF9H TE9CQUxTX0ggKi8KIAogLyoKSW5kZXg6IFplbmQvemVuZF9pbmlfcGFyc2VyLnkKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9pbmlfcGFy c2VyLnksdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDEuMi4yLjIuMi4yLjQKZGlmZiAtdSAt cCAtZCAtcjEuNDEuMi4yLjIuMi4yLjQgemVuZF9pbmlfcGFyc2VyLnkKLS0tIFplbmQvemVu ZF9pbmlfcGFyc2VyLnkJNCBGZWIgMjAwOCAyMDo0NToyMCAtMDAwMAkxLjQxLjIuMi4yLjIu Mi40CisrKyBaZW5kL3plbmRfaW5pX3BhcnNlci55CTEzIEZlYiAyMDA4IDE2OjIwOjI4IC0w MDAwCkBAIC0xNSwxMyArMTUsMTIgQEAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBB dXRob3JzOiBaZWV2IFN1cmFza2kgPHplZXZAemVuZC5jb20+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgIEphbmkgVGFza2luZW4gPGphbmlAcGhw Lm5ldD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAg TWFyY3VzIEJvZXJnZXIgPGhlbGx5QHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAqLwogCiAvKiAkSWQ6IHplbmRfaW5p X3BhcnNlci55LHYgMS40MS4yLjIuMi4yLjIuNCAyMDA4LzAyLzA0IDIwOjQ1OjIwIGphbmkg RXhwICQgKi8KIAotI2RlZmluZSBERUJVR19DRkdfUEFSU0VSIDAKLQogI2luY2x1ZGUgInpl bmQuaCIKICNpbmNsdWRlICJ6ZW5kX0FQSS5oIgogI2luY2x1ZGUgInplbmRfaW5pLmgiCkBA IC0yOSw2ICsyOCw5IEBACiAjaW5jbHVkZSAiemVuZF9pbmlfc2Nhbm5lci5oIgogI2luY2x1 ZGUgInplbmRfZXh0ZW5zaW9ucy5oIgogCitleHRlcm4gdm9pZCB6ZW5kX2luaV9zZXRfaWdu b3JlKFpFTkRfSU5JX0NPTkRJVElPTkFMIGlnbm9yZSBUU1JNTFNfREMpOworZXh0ZXJuIHZv aWQgemVuZF9pbmlfZXJyb3IoaW50IHNldmVyaXR5IFRTUk1MU19EQywgY2hhciAqZXJyb3Ip OworCiAjZGVmaW5lIFlZRVJST1JfVkVSQk9TRQogI2RlZmluZSBZWVNUWVBFIHp2YWwKIApA QCAtODYsNiArODgsMTA2IEBAIHN0YXRpYyB2b2lkIHplbmRfaW5pX2RvX29wKGNoYXIgdHlw ZSwgenYKIH0KIC8qIH19fSAqLwogCitzdGF0aWMgdm9pZCB6ZW5kX2luaV9jb21wYXJlKGlu dCB0eXBlLCB6dmFsICpyZXN1bHQsIHp2YWwgKm9wMSwgenZhbCAqb3AyKSAvKiB7e3sgKi8K K3sKKwlpbnQgaV9vcDEsIGlfb3AyLCByZXQ7CisJY2hhciAqc3RyMiA9ICIiOworCisJaWYg KHR5cGUgPT0gVF9JU19OT1RfSURFTlRJQ0FMIHx8IHR5cGUgPT0gVF9JU19OT1RfSURFTlRJ Q0FMKSB7CisJCWlmIChvcDIpIHsKKwkJCXJldCA9ICFzdHJjbXAoWl9TVFJWQUxfUChvcDEp LCBaX1NUUlZBTF9QKG9wMikpOworCQkJc3RyMiA9IFpfU1RSVkFMX1Aob3AyKTsKKwkJfSBl bHNlIHsKKwkJCXJldCA9IFpfU1RSTEVOX1Aob3AxKSA+IDA7CisJCX0KKwkJaWYgKHR5cGUg PT0gVF9JU19OT1RfSURFTlRJQ0FMKSB7CisjaWYgWkVORF9ERUJVR19DRkdfUEFSU0VSCisJ CQlmcHJpbnRmKHN0ZGVyciwgIklOSSBjb21wYXJlKCclcycgIT09ICclcycpXG4iLCBaX1NU UlZBTF9QKG9wMSksIHN0cjIpOworI2VuZGlmCisJCQlyZXQgPSByZXQgPyAwIDogMTsKKwkJ fSBlbHNlIHsKKyNpZiBaRU5EX0RFQlVHX0NGR19QQVJTRVIKKwkJCWZwcmludGYoc3RkZXJy LCAiSU5JIGNvbXBhcmUoJyVzJyA9PT0gJyVzJylcbiIsIFpfU1RSVkFMX1Aob3AxKSwgc3Ry Mik7CisjZW5kaWYKKwkJCXJldCA9IHJldCA/IDEgOiAwOworCQl9CisJfSBlbHNlIHsKKwkJ aV9vcDEgPSBhdG9pKFpfU1RSVkFMX1Aob3AxKSk7CisJCWlmIChvcDIpIHsKKwkJCWlfb3Ay ID0gYXRvaShaX1NUUlZBTF9QKG9wMikpOworCQl9IGVsc2UgeworCQkJaV9vcDIgPSAwOwor CQl9CisJCisJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBUX0lTX0VROgorI2lmIFpFTkRf REVCVUdfQ0ZHX1BBUlNFUgorCQkJCWZwcmludGYoc3RkZXJyLCAiSU5JIGNvbXBhcmUoJWQg PT0gJWQpXG4iLCBpX29wMSwgaV9vcDIpOworI2VuZGlmCisJCQkJcmV0ID0gaV9vcDEgPT0g aV9vcDI7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSVNfTkU6CisjaWYgWkVORF9ERUJVR19D RkdfUEFSU0VSCisJCQkJZnByaW50ZihzdGRlcnIsICJJTkkgY29tcGFyZSglZCAhPSAlZClc biIsIGlfb3AxLCBpX29wMik7CisjZW5kaWYKKwkJCQlyZXQgPSBpX29wMSAhPSBpX29wMjsK KwkJCQlicmVhazsKKwkJCWNhc2UgVF9JU19HRToKKyNpZiBaRU5EX0RFQlVHX0NGR19QQVJT RVIKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklOSSBjb21wYXJlKCVkID49ICVkKVxuIiwgaV9v cDEsIGlfb3AyKTsKKyNlbmRpZgorCQkJCXJldCA9IGlfb3AxID49IGlfb3AyOworCQkJCWJy ZWFrOworCQkJY2FzZSAnPic6CisjaWYgWkVORF9ERUJVR19DRkdfUEFSU0VSCisJCQkJZnBy aW50ZihzdGRlcnIsICJJTkkgY29tcGFyZSglZCA+ICVkKVxuIiwgaV9vcDEsIGlfb3AyKTsK KyNlbmRpZgorCQkJCXJldCA9IGlfb3AxID4gIGlfb3AyOworCQkJCWJyZWFrOworCQkJY2Fz ZSBUX0lTX0xFOgorI2lmIFpFTkRfREVCVUdfQ0ZHX1BBUlNFUgorCQkJCWZwcmludGYoc3Rk ZXJyLCAiSU5JIGNvbXBhcmUoJWQgPD0gJWQpXG4iLCBpX29wMSwgaV9vcDIpOworI2VuZGlm CisJCQkJcmV0ID0gaV9vcDEgPD0gaV9vcDI7CisJCQkJYnJlYWs7CisJCQljYXNlICc8JzoK KyNpZiBaRU5EX0RFQlVHX0NGR19QQVJTRVIKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklOSSBj b21wYXJlKCVkIDwgJWQpXG4iLCBpX29wMSwgaV9vcDIpOworI2VuZGlmCisJCQkJcmV0ID0g aV9vcDEgPCAgaV9vcDI7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfTF9BTkQ6CisjaWYgWkVO RF9ERUJVR19DRkdfUEFSU0VSCisJCQkJZnByaW50ZihzdGRlcnIsICJJTkkgY29tcGFyZSgl ZCAmJiAlZClcbiIsIGlfb3AxLCBpX29wMik7CisjZW5kaWYKKwkJCQlyZXQgPSBpX29wMSAm JiBpX29wMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9MX09SOgorI2lmIFpFTkRfREVCVUdf Q0ZHX1BBUlNFUgorCQkJCWZwcmludGYoc3RkZXJyLCAiSU5JIGNvbXBhcmUoJWQgfHwgJWQp XG4iLCBpX29wMSwgaV9vcDIpOworI2VuZGlmCisJCQkJcmV0ID0gaV9vcDEgJiYgaV9vcDI7 CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorI2lmIFpFTkRfREVCVUdfQ0ZHX1BBUlNFUgor CQkJCWZwcmludGYoc3RkZXJyLCAiSU5JIGNvbXBhcmUoJWQgPyAlZClcbiIsIGlfb3AxLCBp X29wMik7CisjZW5kaWYKKwkJCQlyZXQgPSAwOworCQkJCWJyZWFrOworCQl9CisJfQorCWZy ZWUoWl9TVFJWQUxfUChvcDEpKTsKKwlpZiAob3AyKSB7CisJCWZyZWUoWl9TVFJWQUxfUChv cDIpKTsKKwl9CisJWl9TVFJWQUxfUChyZXN1bHQpID0gbWFsbG9jKDIpOworCVpfU1RSVkFM X1AocmVzdWx0KVswXSA9IHJldCA/ICcxJyA6ICcwJzsKKwlaX1NUUlZBTF9QKHJlc3VsdClb MV0gPSAwOworCVpfU1RSTEVOX1AocmVzdWx0KSA9IDE7CisJWl9UWVBFX1AocmVzdWx0KSA9 IElTX1NUUklORzsKK30KKy8qIH19fSAqLworCiAvKiB7e3sgemVuZF9pbmlfaW5pdF9zdHJp bmcoKQogKi8KIHN0YXRpYyB2b2lkIHplbmRfaW5pX2luaXRfc3RyaW5nKHp2YWwgKnJlc3Vs dCkKQEAgLTE1OSwzMSArMjYxLDcgQEAgc3RhdGljIHZvaWQgemVuZF9pbmlfZ2V0X3Zhcih6 dmFsICpyZXN1bAogKi8KIHN0YXRpYyB2b2lkIGluaV9lcnJvcihjaGFyICptc2cpCiB7Ci0J Y2hhciAqZXJyb3JfYnVmOwotCWludCBlcnJvcl9idWZfbGVuOwotCWNoYXIgKmN1cnJlbnRs eV9wYXJzZWRfZmlsZW5hbWU7Ci0JVFNSTUxTX0ZFVENIKCk7Ci0KLQljdXJyZW50bHlfcGFy c2VkX2ZpbGVuYW1lID0gemVuZF9pbmlfc2Nhbm5lcl9nZXRfZmlsZW5hbWUoVFNSTUxTX0Mp OwotCWlmIChjdXJyZW50bHlfcGFyc2VkX2ZpbGVuYW1lKSB7Ci0JCWVycm9yX2J1Zl9sZW4g PSAxMjggKyBzdHJsZW4obXNnKSArIHN0cmxlbihjdXJyZW50bHlfcGFyc2VkX2ZpbGVuYW1l KTsgLyogc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggKi8KLQkJZXJyb3JfYnVmID0gKGNo YXIgKikgZW1hbGxvYyhlcnJvcl9idWZfbGVuKTsKLQotCQlzcHJpbnRmKGVycm9yX2J1Ziwg IiVzIGluICVzIG9uIGxpbmUgJWRcbiIsIG1zZywgY3VycmVudGx5X3BhcnNlZF9maWxlbmFt ZSwgemVuZF9pbmlfc2Nhbm5lcl9nZXRfbGluZW5vKFRTUk1MU19DKSk7Ci0JfSBlbHNlIHsK LQkJZXJyb3JfYnVmID0gZXN0cmR1cCgiSW52YWxpZCBjb25maWd1cmF0aW9uIGRpcmVjdGl2 ZVxuIik7Ci0JfQotCi0JaWYgKENHKGluaV9wYXJzZXJfdW5idWZmZXJlZF9lcnJvcnMpKSB7 Ci0jaWZkZWYgUEhQX1dJTjMyCi0JCU1lc3NhZ2VCb3goTlVMTCwgZXJyb3JfYnVmLCAiUEhQ IEVycm9yIiwgTUJfT0t8TUJfVE9QTU9TVHwweDAwMjAwMDAwTCk7Ci0jZWxzZQotCQlmcHJp bnRmKHN0ZGVyciwgIlBIUDogICVzIiwgZXJyb3JfYnVmKTsKLSNlbmRpZgotCX0gZWxzZSB7 Ci0JCXplbmRfZXJyb3IoRV9XQVJOSU5HLCAiJXMiLCBlcnJvcl9idWYpOwotCX0KLQllZnJl ZShlcnJvcl9idWYpOworCXplbmRfaW5pX2Vycm9yKEVfV0FSTklORyBUU1JNTFNfQ0MsIG1z Zyk7CiB9CiAvKiB9fX0gKi8KIApAQCAtMjUwLDYgKzMyOCw3IEBAIFpFTkRfQVBJIGludCB6 ZW5kX3BhcnNlX2luaV9zdHJpbmcoY2hhciAKICVwdXJlX3BhcnNlcgogCiAldG9rZW4gVENf U0VDVElPTgorJXRva2VuIFRDX0NPTkRJVElPTgogJXRva2VuIFRDX1JBVwogJXRva2VuIFRD X0NPTlNUQU5UCiAldG9rZW4gVENfTlVNQkVSCkBAIC0yNjMsNyArMzQyLDExIEBAIFpFTkRf QVBJIGludCB6ZW5kX3BhcnNlX2luaV9zdHJpbmcoY2hhciAKICV0b2tlbiBCT09MX1RSVUUK ICV0b2tlbiBCT09MX0ZBTFNFCiAldG9rZW4gRU5EX09GX0xJTkUKLSV0b2tlbiAnPScgJzon ICcsJyAnLicgJyInICdcJycgJ14nICcrJyAnLScgJy8nICcqJyAnJScgJyQnICd+JyAnPCcg Jz4nICc/JyAnQCcgJ3snICd9JworJWxlZnQgVF9MX09SCislbGVmdCBUX0xfQU5ECislbGVm dCBUX0lTX0VRIFRfSVNfTkUgVF9JU19JREVOVElDQUwgVF9JU19OT1RfSURFTlRJQ0FMCisl bGVmdCBUX0lTX0xFIFRfSVNfR0UKKyV0b2tlbiAnPScgJzonICcsJyAnLicgJyInICdcJycg J14nICcrJyAnLScgJy8nICcqJyAnJScgJyQnICd+JyAnPCcgJz4nICc/JyAnQCcgJ3snICd9 JyAnKCcgJyknCiAlbGVmdCAnfCcgJyYnCiAlcmlnaHQgJ34nICchJwogCkBAIC0yNzYsMzMg KzM1OSw3MSBAQCBzdGF0ZW1lbnRfbGlzdDoKIAogc3RhdGVtZW50OgogCQlUQ19TRUNUSU9O IHNlY3Rpb25fc3RyaW5nX29yX3ZhbHVlICddJyB7Ci0jaWYgREVCVUdfQ0ZHX1BBUlNFUgot CQkJcHJpbnRmKCJTRUNUSU9OOiBbJXNdXG4iLCBaX1NUUlZBTCgkMikpOworI2lmIFpFTkRf REVCVUdfQ0ZHX1BBUlNFUgorCQkJZnByaW50ZihzdGRlcnIsICJTRUNUSU9OOiBbJXNdXG4i LCBaX1NUUlZBTCgkMikpOwogI2VuZGlmCiAJCQlaRU5EX0lOSV9QQVJTRVJfQ0IoJiQyLCBO VUxMLCBOVUxMLCBaRU5EX0lOSV9QQVJTRVJfU0VDVElPTiwgWkVORF9JTklfUEFSU0VSX0FS RyBUU1JNTFNfQ0MpOwogCQkJZnJlZShaX1NUUlZBTCgkMikpOwogCQl9CisJfAlUQ19DT05E SVRJT04gY29tcGFyZSAnXScgeworCQkgICAgaW50IGlnbm9yZSA9IFpfU1RSVkFMKCQyKVsw XSA9PSAnMScgPyAwIDogMTsKKwkJCWZyZWUoWl9TVFJWQUwoJDIpKTsKKwkJCXplbmRfaW5p X3NldF9pZ25vcmUoaWdub3JlID8gWkVORF9JTklfQ09ORF9JR05PUkUgOiBaRU5EX0lOSV9D T05EX1JFQUQgVFNSTUxTX0NDKTsKKwkJfQogCXwJVENfTEFCRUwgJz0nIHN0cmluZ19vcl92 YWx1ZSB7Ci0jaWYgREVCVUdfQ0ZHX1BBUlNFUgotCQkJcHJpbnRmKCJOT1JNQUw6ICclcycg PSAnJXMnXG4iLCBaX1NUUlZBTCgkMSksIFpfU1RSVkFMKCQzKSk7CisjaWYgWkVORF9ERUJV R19DRkdfUEFSU0VSCisJCQlmcHJpbnRmKHN0ZGVyciwgIk5PUk1BTDogJyVzJyA9ICclcydc biIsIFpfU1RSVkFMKCQxKSwgWl9TVFJWQUwoJDMpKTsKICNlbmRpZgogCQkJWkVORF9JTklf UEFSU0VSX0NCKCYkMSwgJiQzLCBOVUxMLCBaRU5EX0lOSV9QQVJTRVJfRU5UUlksIFpFTkRf SU5JX1BBUlNFUl9BUkcgVFNSTUxTX0NDKTsKIAkJCWZyZWUoWl9TVFJWQUwoJDEpKTsKIAkJ CWZyZWUoWl9TVFJWQUwoJDMpKTsKIAkJfQogCXwJVENfT0ZGU0VUIG9wdGlvbl9vZmZzZXQg J10nICc9JyBzdHJpbmdfb3JfdmFsdWUgewotI2lmIERFQlVHX0NGR19QQVJTRVIKLQkJCXBy aW50ZigiT0ZGU0VUOiAnJXMnWyVzXSA9ICclcydcbiIsIFpfU1RSVkFMKCQxKSwgWl9TVFJW QUwoJDIpLCBaX1NUUlZBTCgkNSkpOworI2lmIFpFTkRfREVCVUdfQ0ZHX1BBUlNFUgorCQkJ ZnByaW50ZihzdGRlcnIsICJPRkZTRVQ6ICclcydbJXNdID0gJyVzJ1xuIiwgWl9TVFJWQUwo JDEpLCBaX1NUUlZBTCgkMiksIFpfU1RSVkFMKCQ1KSk7CiAjZW5kaWYKIAkJCVpFTkRfSU5J X1BBUlNFUl9DQigmJDEsICYkNSwgJiQyLCBaRU5EX0lOSV9QQVJTRVJfUE9QX0VOVFJZLCBa RU5EX0lOSV9QQVJTRVJfQVJHIFRTUk1MU19DQyk7CiAJCQlmcmVlKFpfU1RSVkFMKCQxKSk7 CiAJCQlmcmVlKFpfU1RSVkFMKCQyKSk7CiAJCQlmcmVlKFpfU1RSVkFMKCQ1KSk7CiAJCX0K LQl8CVRDX0xBQkVMCXsgWkVORF9JTklfUEFSU0VSX0NCKCYkMSwgTlVMTCwgTlVMTCwgWkVO RF9JTklfUEFSU0VSX0VOVFJZLCBaRU5EX0lOSV9QQVJTRVJfQVJHIFRTUk1MU19DQyk7IGZy ZWUoWl9TVFJWQUwoJDEpKTsgfQorCXwJVENfTEFCRUwJeworCQkJWkVORF9JTklfUEFSU0VS X0NCKCYkMSwgTlVMTCwgTlVMTCwgWkVORF9JTklfUEFSU0VSX0VOVFJZLCBaRU5EX0lOSV9Q QVJTRVJfQVJHIFRTUk1MU19DQyk7CisJCQlmcmVlKFpfU1RSVkFMKCQxKSk7CisJCX0KIAl8 CUVORF9PRl9MSU5FCiA7CiAKK2NvbXBhcmU6CisJCWNvbXBhcmVfcmlnaHQgVF9MX0FORCBj b21wYXJlX3JpZ2h0IHsgemVuZF9pbmlfY29tcGFyZShUX0xfQU5ELCAmJCQsICYkMSwgJiQz KTsgfQorCXwJY29tcGFyZV9yaWdodCBUX0xfT1IgIGNvbXBhcmVfcmlnaHQgeyB6ZW5kX2lu aV9jb21wYXJlKFRfTF9PUiwgICYkJCwgJiQxLCAmJDMpOyB9CisJfAljb21wYXJlX3JpZ2h0 IFRfSVNfR0UgY29tcGFyZV9yaWdodCB7IHplbmRfaW5pX2NvbXBhcmUoVF9JU19HRSwgJiQk LCAmJDEsICYkMyk7IH0KKwl8CWNvbXBhcmVfcmlnaHQgJz4nICAgICBjb21wYXJlX3JpZ2h0 IHsgemVuZF9pbmlfY29tcGFyZSgnPicsICAgICAmJCQsICYkMSwgJiQzKTsgfQorCXwJY29t cGFyZV9yaWdodCBUX0lTX0xFIGNvbXBhcmVfcmlnaHQgeyB6ZW5kX2luaV9jb21wYXJlKFRf SVNfTEUsICYkJCwgJiQxLCAmJDMpOyB9CisJfAljb21wYXJlX3JpZ2h0ICc8JyAgICAgY29t cGFyZV9yaWdodCB7IHplbmRfaW5pX2NvbXBhcmUoJzwnLCAgICAgJiQkLCAmJDEsICYkMyk7 IH0KKwl8CWNvbXBhcmVfcmlnaHQgVF9JU19FUSBjb21wYXJlX3JpZ2h0IHsgemVuZF9pbmlf Y29tcGFyZShUX0lTX0VRLCAmJCQsICYkMSwgJiQzKTsgfQorCXwJY29tcGFyZV9yaWdodCBU X0lTX05FIGNvbXBhcmVfcmlnaHQgeyB6ZW5kX2luaV9jb21wYXJlKFRfSVNfTkUsICYkJCwg JiQxLCAmJDMpOyB9CisJfAljb21wYXJlX3JpZ2h0IFRfSVNfSURFTlRJQ0FMIGNvbXBhcmVf cmlnaHQgeyB6ZW5kX2luaV9jb21wYXJlKFRfSVNfSURFTlRJQ0FMLCAmJCQsICYkMSwgJiQz KTsgfQorCXwJY29tcGFyZV9yaWdodCBUX0lTX05PVF9JREVOVElDQUwgY29tcGFyZV9yaWdo dCB7IHplbmRfaW5pX2NvbXBhcmUoVF9JU19OT1RfSURFTlRJQ0FMLCAmJCQsICYkMSwgJiQz KTsgfQorOworCitjb21wYXJlX3JpZ2h0OgorCQljb21wYXJlX3ZhbHVlCXsgJCQgPSAkMTsg fQorCXwJJygnIGNvbXBhcmUgJyknCXsgJCQgPSAkMjsgfQorOworCitjb21wYXJlX3ZhbHVl OgorCXwJVENfUkFXCQkJCQkJCXsgJCQgPSAkMTsgfQorCXwJVENfTlVNQkVSCQkJCQkJeyAk JCA9ICQxOyB9CisJfAlUQ19TVFJJTkcJCQkJCQl7ICQkID0gJDE7IH0KKwl8CUJPT0xfVFJV RQkJCQkJCXsgJCQgPSAkMTsgfQorCXwJQk9PTF9GQUxTRQkJCQkJCXsgJCQgPSAkMTsgfQor CXwJVENfQ09OU1RBTlQJCQkJCQl7IHplbmRfaW5pX2dldF9jb25zdGFudCgmJCQsICYkMSBU U1JNTFNfQ0MpOyB9CisJfAknIicgZW5jYXBzZWRfbGlzdCAnIicJCQl7ICQkID0gJDI7IH0K Kwl8CWNmZ192YXJfcmVmCQkJCQkJeyAkJCA9ICQxOyB9CisJfAknKCcgZXhwciAnKScJCQkJ CXsgJCQgPSAkMjsgfQorOworCQkKIHNlY3Rpb25fc3RyaW5nX29yX3ZhbHVlOgogCQl2YXJf c3RyaW5nX2xpc3QJCQkJCXsgJCQgPSAkMTsgfQogCXwJLyogZW1wdHkgKi8JCQkJCQl7IHpl bmRfaW5pX2luaXRfc3RyaW5nKCYkJCk7IH0KQEAgLTM0NSwxNSArNDY2LDE4IEBAIGV4cHI6 CiA7CiAKIGNmZ192YXJfcmVmOgotCQlUQ19ET0xMQVJfQ1VSTFkgVENfVkFSTkFNRSAnfScJ eyB6ZW5kX2luaV9nZXRfdmFyKCYkJCwgJiQyIFRTUk1MU19DQyk7IGZyZWUoWl9TVFJWQUwo JDIpKTsgfQorCQlUQ19ET0xMQVJfQ1VSTFkgVENfVkFSTkFNRSAnfScgeworCQkJemVuZF9p bmlfZ2V0X3ZhcigmJCQsICYkMiBUU1JNTFNfQ0MpOworCQkJZnJlZShaX1NUUlZBTCgkMikp OworCQl9CiA7CiAKIGNvbnN0YW50X3N0cmluZzoKIAkJVENfQ09OU1RBTlQJCQkJCQl7IHpl bmRfaW5pX2dldF9jb25zdGFudCgmJCQsICYkMSBUU1JNTFNfQ0MpOyB9Ci0JfAlUQ19SQVcJ CQkJCQkJeyAkJCA9ICQxOyAvKnByaW50ZigiVENfUkFXOiAnJXMnXG4iLCBaX1NUUlZBTCgk MSkpOyovIH0KLQl8CVRDX05VTUJFUgkJCQkJCXsgJCQgPSAkMTsgLypwcmludGYoIlRDX05V TUJFUjogJyVzJ1xuIiwgWl9TVFJWQUwoJDEpKTsqLyB9Ci0JfAlUQ19TVFJJTkcJCQkJCQl7 ICQkID0gJDE7IC8qcHJpbnRmKCJUQ19TVFJJTkc6ICclcydcbiIsIFpfU1RSVkFMKCQxKSk7 Ki8gfQotCXwJVENfV0hJVEVTUEFDRQkJCQkJeyAkJCA9ICQxOyAvKnByaW50ZigiVENfV0hJ VEVTUEFDRTogJyVzJ1xuIiwgWl9TVFJWQUwoJDEpKTsqLyB9CisJfAlUQ19SQVcJCQkJCQkJ eyAkJCA9ICQxOyAvKmZwcmludGYoc3RkZXJyLCAiVENfUkFXOiAnJXMnXG4iLCBaX1NUUlZB TCgkMSkpOyovIH0KKwl8CVRDX05VTUJFUgkJCQkJCXsgJCQgPSAkMTsgLypmcHJpbnRmKHN0 ZGVyciwgIlRDX05VTUJFUjogJyVzJ1xuIiwgWl9TVFJWQUwoJDEpKTsqLyB9CisJfAlUQ19T VFJJTkcJCQkJCQl7ICQkID0gJDE7IC8qZnByaW50ZihzdGRlcnIsICJUQ19TVFJJTkc6ICcl cydcbiIsIFpfU1RSVkFMKCQxKSk7Ki8gfQorCXwJVENfV0hJVEVTUEFDRQkJCQkJeyAkJCA9 ICQxOyAvKmZwcmludGYoc3RkZXJyLCAiVENfV0hJVEVTUEFDRTogJyVzJ1xuIiwgWl9TVFJW QUwoJDEpKTsqLyB9CiA7CiAKIC8qCkluZGV4OiBaZW5kL3plbmRfaW5pX3NjYW5uZXIubAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX2lu aV9zY2FubmVyLmwsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDEuMi4yLjIuMi4yLjIKZGlm ZiAtdSAtcCAtZCAtcjEuNDEuMi4yLjIuMi4yLjIgemVuZF9pbmlfc2Nhbm5lci5sCi0tLSBa ZW5kL3plbmRfaW5pX3NjYW5uZXIubAk0IEZlYiAyMDA4IDIwOjQ1OjIwIC0wMDAwCTEuNDEu Mi4yLjIuMi4yLjIKKysrIFplbmQvemVuZF9pbmlfc2Nhbm5lci5sCTEzIEZlYiAyMDA4IDE2 OjIwOjI4IC0wMDAwCkBAIC0xNSw2ICsxNSw3IEBACiAgICArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK ICAgIHwgQXV0aG9yczogWmVldiBTdXJhc2tpIDx6ZWV2QHplbmQuY29tPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICBKYW5pIFRhc2tpbmVuIDxq YW5pQHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAg ICAgICAgIE1hcmN1cyBCb2VyZ2VyIDxoZWxseUBwaHAubmV0PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogKi8KIApAQCAtNjgsMTEg KzY5LDE0IEBACiAKICV9CiAKKyV4IElHTk9SRQorJXggSUZET05FCiAleCBTVF9ET1VCTEVf UVVPVEVTCiAleCBTVF9PRkZTRVQKICV4IFNUX1JBVwogJXggU1RfU0VDVElPTl9SQVcKICV4 IFNUX1NFQ1RJT05fVkFMVUUKKyV4IFNUX0NPTkRJVElPTl9WQUxVRQogJXggU1RfVkFMVUUK ICV4IFNUX1ZBUk5BTUUKICVvcHRpb24gc3RhY2sKQEAgLTEyMiw2ICsxMjYsOCBAQCBaRU5E X0FQSSB6ZW5kX3NjYW5uZXJfZ2xvYmFscyBpbmlfc2Nhbm5lCiAJcmV0dXJuIHR5cGU7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCit2b2lkIHplbmRfaW5pX3Nl dF9pZ25vcmUoWkVORF9JTklfQ09ORElUSU9OQUwgc3RhdGUgVFNSTUxTX0RDKTsKKwogc3Rh dGljIGNoYXIgKmluaV9maWxlbmFtZTsKIAogLyoge3t7IGluaXRfaW5pX3NjYW5uZXIoKQpA QCAtMTI5LDYgKzEzNSw3IEBAIHN0YXRpYyBjaGFyICppbmlfZmlsZW5hbWU7CiBzdGF0aWMg dm9pZCBpbml0X2luaV9zY2FubmVyKFRTUk1MU19EKQogewogCVNDTkcobGluZW5vKSA9IDE7 CisJU0NORyhpZl9sZXZlbCkgPSAwOwogCVNDTkcoc2Nhbm5lcl9tb2RlKSA9IFpFTkRfSU5J X1NDQU5ORVJfTk9STUFMOwogCVNDTkcoeXlfc3RhcnRfc3RhY2tfcHRyKSA9IDA7CiAJU0NO Ryh5eV9zdGFydF9zdGFja19kZXB0aCkgPSAwOwpAQCAtMTk5LDYgKzIwNiwzNSBAQCBpbnQg emVuZF9pbmlfcHJlcGFyZV9zdHJpbmdfZm9yX3NjYW5uaW5nCiB9CiAvKiB9fX0gKi8KIAor dm9pZCB6ZW5kX2luaV9lcnJvcihpbnQgc2V2ZXJpdHkgVFNSTUxTX0RDLCBjaGFyICplcnJv cikgLyoge3t7ICovCit7CisJaWYgKCFlcnJvcikgeworCQllcnJvciA9ICJFcnJvciI7CisJ fQorCWlmIChDRyhpbmlfcGFyc2VyX3VuYnVmZmVyZWRfZXJyb3JzKSkgeworI2lmZGVmIFBI UF9XSU4zMgorCQlpZiAoaW5pX2ZpbGVuYW1lKSB7CisJCQl6ZW5kX3NwcHJpbnRmKCZlcnJv ciwgMCwgIiVzIGF0IGxpbmUgJWQgb2YgaW5pIGZpbGUgJXMuIiwgZXJyb3IsIFNDTkcobGlu ZW5vKSwgaW5pX2ZpbGVuYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXplbmRfc3BwcmludGYoJmVy cm9yLCAwLCAiJXMgaW4gaW52YWxpZCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZS4iLCBlcnJv cik7CisJCX0KKwkJTWVzc2FnZUJveChOVUxMLCBlcnJvciwgIlBIUCBFcnJvciIsIE1CX09L fE1CX1RPUE1PU1R8MHgwMDIwMDAwMEwpOworCQllZnJlZShlcnJvcik7CisjZWxzZQorCQlp ZiAoaW5pX2ZpbGVuYW1lKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlBIUDogJXMgYXQgbGlu ZSAlZCBvZiBpbmkgZmlsZSAlcy5cbiIsIGVycm9yLCBTQ05HKGxpbmVubyksIGluaV9maWxl bmFtZSk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlBIUDogJXMgaW4gaW52 YWxpZCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZS5cbiIsIGVycm9yKTsKKwkJfQorI2VuZGlm CisJfSBlbHNlIGlmIChpbmlfZmlsZW5hbWUpIHsKKwkJemVuZF9lcnJvcihzZXZlcml0eSwg IiVzIGF0IGxpbmUgJWQgb2YgaW5pIGZpbGUgJXMiLCBlcnJvciwgU0NORyhsaW5lbm8pLCBp bmlfZmlsZW5hbWUpOworCX0gZWxzZSB7CisJCXplbmRfZXJyb3Ioc2V2ZXJpdHksICIlcyBp biBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIiwgZXJyb3IpOworCX0KK30KKy8q IH19fSAqLworCiAvKiB7e3sgemVuZF9pbmlfY2xvc2VfZmlsZSgpCiAqLwogdm9pZCB6ZW5k X2luaV9jbG9zZV9maWxlKHplbmRfZmlsZV9oYW5kbGUgKmZoIFRTUk1MU19EQykKQEAgLTI5 MCw2ICszMjYsNyBAQCBSQVdfVkFMVUVfQ0hBUlMgW149XG5ccjtdCiBMSVRFUkFMX0RPTExB UiAoIiQiKFteYS16QS1aMC05e118KCJcXCJ7QU5ZX0NIQVJ9KSkpCiBWQUxVRV9DSEFSUyAg ICAgICAgIChbXiQ9IFx0XG5ccjsmfH4oKSEiJ118e0xJVEVSQUxfRE9MTEFSfSkKIFNFQ1RJ T05fVkFMVUVfQ0hBUlMgKFteJFxuXHI7IidcXVxcXXwoIlxcIntBTllfQ0hBUn0pfHtMSVRF UkFMX0RPTExBUn0pCitDT05ESVRJT05fVkFMVUVfQ0hBUlMgKFteJCBcdFxuXHI7IidcXVxc XXwoIlxcIntBTllfQ0hBUn0pfHtMSVRFUkFMX0RPTExBUn0pCiBET1VCTEVfUVVPVEVTX0NI QVJTIChbXiQiXFxdfCgiXFwie0FOWV9DSEFSfSl8e0xJVEVSQUxfRE9MTEFSfSkKIAogLyog IiAqLwpAQCAtMzEyLDcgKzM0OSw4MSBAQCBET1VCTEVfUVVPVEVTX0NIQVJTIChbXiQiXFxd fCgiXFwie0FOWV9DCiAJcmV0dXJuIFRDX1NFQ1RJT047CiB9CiAKLTxTVF9WQUxVRSxTVF9T RUNUSU9OX1ZBTFVFLFNUX09GRlNFVD4iJyJ7U0lOR0xFX1FVT1RFRF9DSEFSU30rIiciIHsg LyogUmF3IHN0cmluZyAqLworPElHTk9SRT4iW0VMU0VdIntUQUJTX0FORF9TUEFDRVN9KntO RVdMSU5FfSB7IC8qIEVuZCBvZiBjb25kaXRpb24gKi8KKwl6ZW5kX2luaV9zZXRfaWdub3Jl KFpFTkRfSU5JX0NPTkRfUkVBRCBUU1JNTFNfQ0MpOworCUJFR0lOKElOSVRJQUwpOworCVND TkcobGluZW5vKSsrOworCXJldHVybiBFTkRfT0ZfTElORTsKK30KKworPElGRE9ORSxJTklU SUFMPiJbRUxTRV0ie1RBQlNfQU5EX1NQQUNFU30qe05FV0xJTkV9IHsgLyogRW5kIG9mIGNv bmRpdGlvbiAqLworCWlmIChTQ05HKHNjYW5uZXJfbW9kZSkgIT0gWkVORF9JTklfU0NBTk5F Ul9SQVcpIHsKKwkJaWYgKCFTQ05HKGlmX2xldmVsKSkgeworCQkJemVuZF9pbmlfZXJyb3Io RV9XQVJOSU5HIFRTUk1MU19DQywgIltFTFNFXSB3aXRob3V0IFtJRl0iKTsKKwkJCXl5dGVy bWluYXRlKCk7CisJCX0KKwkJemVuZF9pbmlfc2V0X2lnbm9yZShaRU5EX0lOSV9DT05EX0lH Tk9SRSBUU1JNTFNfQ0MpOworCQlCRUdJTihJRkRPTkUpOworCX0gZWxzZSB7CisJCUJFR0lO KElOSVRJQUwpOworCX0KKwlTQ05HKGxpbmVubykrKzsKKwlyZXR1cm4gRU5EX09GX0xJTkU7 Cit9CisKKzxJTklUSUFMLElHTk9SRSxJRkRPTkU+IltFTkRJRl0ie1RBQlNfQU5EX1NQQUNF U30qe05FV0xJTkV9IHsgLyogRW5kIG9mIGNvbmRpdGlvbiAqLworCWlmIChTQ05HKHNjYW5u ZXJfbW9kZSkgIT0gWkVORF9JTklfU0NBTk5FUl9SQVcpIHsKKwkJaWYgKCFTQ05HKGlmX2xl dmVsKS0tKSB7CisJCQl6ZW5kX2luaV9lcnJvcihFX1dBUk5JTkcgVFNSTUxTX0NDLCAiW0VO RElGXSB3aXRob3V0IFtJRl0iKTsKKwkJCXl5dGVybWluYXRlKCk7CisJCX0KKwkJeXlfcG9w X3N0YXRlKFRTUk1MU19DKTsKKyNpZiBaRU5EX0RFQlVHX0NGR19QQVJTRVIKKwkJZnByaW50 ZihzdGRlcnIsICJFTkRJRlxuIik7CisjZW5kaWYKKwl9CisJU0NORyhsaW5lbm8pKys7CisJ cmV0dXJuIEVORF9PRl9MSU5FOworfQorCis8SU5JVElBTCxJR05PUkU+IltFTFNFSUYie1RB QlNfQU5EX1NQQUNFU30rIHsgLyogQ29uZGl0aW9uIGVsc2VpZiAqLworCWlmIChTQ05HKHNj YW5uZXJfbW9kZSkgIT0gWkVORF9JTklfU0NBTk5FUl9SQVcpIHsKKwkJaWYgKCFTQ05HKGlm X2xldmVsKSkgeworCQkJemVuZF9lcnJvcihFX1dBUk5JTkcsICJbRUxTRUlGXSB3aXRob3V0 IFtJRl0iKTsKKwkJCXl5dGVybWluYXRlKCk7CisJCX0KKwkJQkVHSU4oU1RfQ09ORElUSU9O X1ZBTFVFKTsKKwkJcmV0dXJuIFRDX0NPTkRJVElPTjsKKwl9IGVsc2UgeworCQlCRUdJTihJ RkRPTkUpOworCQlyZXR1cm4gRU5EX09GX0xJTkU7CisJfQorfQorCis8SUZET05FPiJbRUxT RUlGIntUQUJTX0FORF9TUEFDRVN9KyB7IC8qIENvbmRpdGlvbiBlbHNlaWYgKi8KKwlyZXR1 cm4gRU5EX09GX0xJTkU7Cit9CisKKzxJTklUSUFMPiJbSUYie1RBQlNfQU5EX1NQQUNFU30r IHsgLyogQ29uZGl0aW9uIGlmICovCisJaWYgKFNDTkcoc2Nhbm5lcl9tb2RlKSAhPSBaRU5E X0lOSV9TQ0FOTkVSX1JBVykgeworCQlTQ05HKGlmX2xldmVsKSsrOworCQl5eV9wdXNoX3N0 YXRlKFNUX0NPTkRJVElPTl9WQUxVRSBUU1JNTFNfQ0MpOworCQlyZXR1cm4gVENfQ09ORElU SU9OOworCX0gZWxzZSB7CisJCUJFR0lOKElGRE9ORSk7CisJCXJldHVybiBFTkRfT0ZfTElO RTsKKwl9Cit9CisKKzxJR05PUkUsSUZET05FPlteXFtde05FV0xJTkV9IHsKKwlTQ05HKGxp bmVubykrKzsKKwlpZiAoU0NORyhzY2FubmVyX21vZGUpID09IFpFTkRfSU5JX1NDQU5ORVJf UkFXKSB7CisJCUJFR0lOKElOSVRJQUwpOworCX0KKwlyZXR1cm4gRU5EX09GX0xJTkU7Cit9 CisKKzxTVF9WQUxVRSxTVF9TRUNUSU9OX1ZBTFVFLFNUX0NPTkRJVElPTl9WQUxVRSxTVF9P RkZTRVQ+Iicie1NJTkdMRV9RVU9URURfQ0hBUlN9KyInIiB7IC8qIFJhdyBzdHJpbmcgKi8K IAkvKiBFYXQgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2luZ2xlIHF1b3RlcyAqLwogCWlmICh5 eXRleHRbMF0gPT0gJ1wnJyAmJiB5eXRleHRbeXlsZW5nIC0gMV0gPT0gJ1wnJykgewogCQl5 eXRleHQrKzsKQEAgLTMyOCw2ICs0MzksNTIgQEAgRE9VQkxFX1FVT1RFU19DSEFSUyAoW14k IlxcXXwoIlxcIntBTllfQwogCXJldHVybiAnXSc7CiB9CiAKKzxTVF9DT05ESVRJT05fVkFM VUU+e1RBQlNfQU5EX1NQQUNFU30qIl0ie1RBQlNfQU5EX1NQQUNFU30qe05FV0xJTkV9PyB7 IC8qIEVuZCBvZiBjb25kaXRpb24gKi8KKwlCRUdJTihJTklUSUFMKTsKKwlTQ05HKGxpbmVu bykrKzsKKwlyZXR1cm4gJ10nOworfQorCis8U1RfQ09ORElUSU9OX1ZBTFVFPntUQUJTX0FO RF9TUEFDRVN9KiJ8fCJ7VEFCU19BTkRfU1BBQ0VTfSogeworCXJldHVybiBUX0xfT1I7Cit9 CisKKzxTVF9DT05ESVRJT05fVkFMVUU+e1RBQlNfQU5EX1NQQUNFU30qIiYmIntUQUJTX0FO RF9TUEFDRVN9KiB7CisJcmV0dXJuIFRfTF9BTkQ7Cit9CisKKzxTVF9DT05ESVRJT05fVkFM VUU+e1RBQlNfQU5EX1NQQUNFU30qIj09IntUQUJTX0FORF9TUEFDRVN9KiB7CisJcmV0dXJu IFRfSVNfRVE7Cit9CisKKzxTVF9DT05ESVRJT05fVkFMVUU+e1RBQlNfQU5EX1NQQUNFU30q IiE9IntUQUJTX0FORF9TUEFDRVN9KiB7CisJcmV0dXJuIFRfSVNfTkU7Cit9CisKKzxTVF9D T05ESVRJT05fVkFMVUU+e1RBQlNfQU5EX1NQQUNFU30qIj09PSJ7VEFCU19BTkRfU1BBQ0VT fSogeworCXJldHVybiBUX0lTX0lERU5USUNBTDsKK30KKworPFNUX0NPTkRJVElPTl9WQUxV RT57VEFCU19BTkRfU1BBQ0VTfSoiIT09IntUQUJTX0FORF9TUEFDRVN9KiB7CisJcmV0dXJu IFRfSVNfTk9UX0lERU5USUNBTDsKK30KKworPFNUX0NPTkRJVElPTl9WQUxVRT57VEFCU19B TkRfU1BBQ0VTfSoiPD0ie1RBQlNfQU5EX1NQQUNFU30qIHsKKwlyZXR1cm4gVF9JU19MRTsK K30KKworPFNUX0NPTkRJVElPTl9WQUxVRT57VEFCU19BTkRfU1BBQ0VTfSoiPj0ie1RBQlNf QU5EX1NQQUNFU30qIHsKKwlyZXR1cm4gVF9JU19HRTsKK30KKworPFNUX0NPTkRJVElPTl9W QUxVRT57VEFCU19BTkRfU1BBQ0VTfSoiKCJ7VEFCU19BTkRfU1BBQ0VTfSogeworCXJldHVy biAnKCc7Cit9CisKKzxTVF9DT05ESVRJT05fVkFMVUU+e1RBQlNfQU5EX1NQQUNFU30qIiki e1RBQlNfQU5EX1NQQUNFU30qIHsKKwlyZXR1cm4gJyknOworfQorCiA8SU5JVElBTD57TEFC RUx9Ilsie1RBQlNfQU5EX1NQQUNFU30qIHsgLyogU3RhcnQgb2Ygb3B0aW9uIHdpdGggb2Zm c2V0ICovCiAJLyogRWF0IHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIFsgKi8KIAlFQVRfVFJB SUxJTkdfV0hJVEVTUEFDRV9FWCgnWycpOwpAQCAtMzQzLDcgKzUwMCw3IEBAIERPVUJMRV9R VU9URVNfQ0hBUlMgKFteJCJcXF18KCJcXCJ7QU5ZX0MKIAlyZXR1cm4gJ10nOwogfQogCi08 U1RfRE9VQkxFX1FVT1RFUyxTVF9TRUNUSU9OX1ZBTFVFLFNUX1ZBTFVFLFNUX09GRlNFVD57 RE9MTEFSX0NVUkxZfSB7IC8qIFZhcmlhYmxlIHN0YXJ0ICovCis8U1RfRE9VQkxFX1FVT1RF UyxTVF9TRUNUSU9OX1ZBTFVFLFNUX0NPTkRJVElPTl9WQUxVRSxTVF9WQUxVRSxTVF9PRkZT RVQ+e0RPTExBUl9DVVJMWX0geyAvKiBWYXJpYWJsZSBzdGFydCAqLwogCXl5X3B1c2hfc3Rh dGUoU1RfVkFSTkFNRSBUU1JNTFNfQ0MpOwogCXJldHVybiBUQ19ET0xMQVJfQ1VSTFk7CiB9 CkBAIC0zNTIsMTIgKzUwOSw3IEBAIERPVUJMRV9RVU9URVNfQ0hBUlMgKFteJCJcXF18KCJc XCJ7QU5ZX0MKIAlSRVRVUk5fVE9LRU4oVENfVkFSTkFNRSwgeXl0ZXh0LCB5eWxlbmcpOwog fQogCi08U1RfVkFSTkFNRT4ifSIgeyAvKiBWYXJpYWJsZSBlbmQgKi8KLQl5eV9wb3Bfc3Rh dGUoVFNSTUxTX0MpOwotCXJldHVybiAnfSc7Ci19Ci0KLTxJTklUSUFMLFNUX1ZBTFVFPigi dHJ1ZSJ8Im9uInwieWVzIil7VEFCU19BTkRfU1BBQ0VTfSogeyAvKiBUUlVFIHZhbHVlICh3 aGVuIHVzZWQgb3V0c2lkZSBvcHRpb24gdmFsdWUvb2Zmc2V0IHRoaXMgY2F1c2VzIHBhcnNl IGVycm9yISkgKi8KKzxJTklUSUFMLFNUX0NPTkRJVElPTl9WQUxVRSxTVF9WQUxVRT4oInRy dWUifCJvbiJ8InllcyIpe1RBQlNfQU5EX1NQQUNFU30qIHsgLyogVFJVRSB2YWx1ZSAod2hl biB1c2VkIG91dHNpZGUgb3B0aW9uIHZhbHVlL29mZnNldCB0aGlzIGNhdXNlcyBwYXJzZSBl cnJvciEpICovCiAJUkVUVVJOX1RPS0VOKEJPT0xfVFJVRSwgIjEiLCAxKTsKIH0KIApAQCAt MzY1LDYgKzUxNywxMCBAQCBET1VCTEVfUVVPVEVTX0NIQVJTIChbXiQiXFxdfCgiXFwie0FO WV9DCiAJUkVUVVJOX1RPS0VOKEJPT0xfRkFMU0UsICIiLCAwKTsKIH0KIAorPFNUX0NPTkRJ VElPTl9WQUxVRT4oImZhbHNlInwib2ZmInwibm8ifCJub25lInwibnVsbCIpe1RBQlNfQU5E X1NQQUNFU30qIHsgLyogRkFMU0UgdmFsdWUgKHdoZW4gdXNlZCBpbiBjb25kaXRpb25zIHdl IHdhbnQgJzAnIHJhdGhlciB0aGFuICcnKSovCisJUkVUVVJOX1RPS0VOKEJPT0xfRkFMU0Us ICIwIiwgMSk7Cit9CisKIDxJTklUSUFMPntMQUJFTH0geyAvKiBHZXQgb3B0aW9uIG5hbWUg Ki8KIAlSRVRVUk5fVE9LRU4oVENfTEFCRUwsIHl5dGV4dCwgeXlsZW5nKTsKIH0KQEAgLTM5 OCwxMSArNTU0LDExIEBAIERPVUJMRV9RVU9URVNfQ0hBUlMgKFteJCJcXF18KCJcXCJ7QU5Z X0MKIAlyZXR1cm4gRU5EX09GX0xJTkU7CiB9CiAKLTxTVF9TRUNUSU9OX1ZBTFVFLFNUX1ZB TFVFLFNUX09GRlNFVD57Q09OU1RBTlR9IHsgLyogR2V0IGNvbnN0YW50IG9wdGlvbiB2YWx1 ZSAqLworPFNUX1NFQ1RJT05fVkFMVUUsU1RfQ09ORElUSU9OX1ZBTFVFLFNUX1ZBTFVFLFNU X09GRlNFVD57Q09OU1RBTlR9IHsgLyogR2V0IGNvbnN0YW50IG9wdGlvbiB2YWx1ZSAqLwog CVJFVFVSTl9UT0tFTihUQ19DT05TVEFOVCwgeXl0ZXh0LCB5eWxlbmcpOwogfQogCi08U1Rf U0VDVElPTl9WQUxVRSxTVF9WQUxVRSxTVF9PRkZTRVQ+e05VTUJFUn0geyAvKiBHZXQgbnVt YmVyIG9wdGlvbiB2YWx1ZSBhcyBzdHJpbmcgKi8KKzxTVF9TRUNUSU9OX1ZBTFVFLFNUX0NP TkRJVElPTl9WQUxVRSxTVF9WQUxVRSxTVF9PRkZTRVQ+e05VTUJFUn0geyAvKiBHZXQgbnVt YmVyIG9wdGlvbiB2YWx1ZSBhcyBzdHJpbmcgKi8KIAlSRVRVUk5fVE9LRU4oVENfTlVNQkVS LCB5eXRleHQsIHl5bGVuZyk7CiB9CiAKQEAgLTQyOCw3ICs1ODQsNyBAQCBET1VCTEVfUVVP VEVTX0NIQVJTIChbXiQiXFxdfCgiXFwie0FOWV9DCiAJUkVUVVJOX1RPS0VOKFRDX1NUUklO RywgeXl0ZXh0LCB5eWxlbmcpOwogfQogCi08U1RfU0VDVElPTl9WQUxVRSxTVF9WQUxVRSxT VF9PRkZTRVQ+e1RBQlNfQU5EX1NQQUNFU30qWyJdIHsgLyogRG91YmxlIHF1b3RlZCAnIicg c3RyaW5nIHN0YXJ0ICovCis8U1RfU0VDVElPTl9WQUxVRSxTVF9DT05ESVRJT05fVkFMVUUs U1RfVkFMVUUsU1RfT0ZGU0VUPntUQUJTX0FORF9TUEFDRVN9KlsiXSB7IC8qIERvdWJsZSBx dW90ZWQgJyInIHN0cmluZyBzdGFydCAqLwogCXl5X3B1c2hfc3RhdGUoU1RfRE9VQkxFX1FV T1RFUyBUU1JNTFNfQ0MpOwogCXJldHVybiAnIic7CiB9CkBAIC00NzMsMzcgKzYyOSw0NiBA QCBET1VCTEVfUVVPVEVTX0NIQVJTIChbXiQiXFxdfCgiXFwie0FOWV9DCiAJCXN3aXRjaCAo WVlTVEFURSkgewogCQljYXNlIElOSVRJQUw6CiAJCQlicmVhazsKKwkJCisJCWNhc2UgSUdO T1JFOgorCQljYXNlIElGRE9ORToKKwkJCXplbmRfaW5pX2Vycm9yKEVfRVJST1IgVFNSTUxT X0NDLCAiVW50ZXJtaW5hdGVkIFtJRl0gaW4gaW5pIik7CisJCQlicmVhazsKIAogCQljYXNl IFNUX0RPVUJMRV9RVU9URVM6Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbnRlcm1p bmF0ZWQgaW5pIG9wdGlvbiB2YWx1ZSBkb3VibGUgcXVvdGVzXG4iKTsKKwkJCXplbmRfaW5p X2Vycm9yKEVfRVJST1IgVFNSTUxTX0NDLCAiVW50ZXJtaW5hdGVkIGluaSBvcHRpb24gdmFs dWUgZG91YmxlIHF1b3RlcyIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTVF9PRkZTRVQ6Ci0J CQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbnRlcm1pbmF0ZWQgaW5pIG9wdGlvbiBvZmZz ZXRcbiIpOworCQkJemVuZF9pbmlfZXJyb3IoRV9FUlJPUiBUU1JNTFNfQ0MsICJVbnRlcm1p bmF0ZWQgaW5pIG9wdGlvbiBvZmZzZXQiKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1RfUkFX OgotCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW50ZXJtaW5hdGVkIHJhdyBpbmkgb3B0 aW9uIHZhbHVlXG4iKTsKKwkJCXplbmRfaW5pX2Vycm9yKEVfRVJST1IgVFNSTUxTX0NDLCAi VW50ZXJtaW5hdGVkIHJhdyBpbmkgb3B0aW9uIHZhbHVlIik7CiAJCQlicmVhazsKIAogCQlj YXNlIFNUX1NFQ1RJT05fUkFXOgotCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW50ZXJt aW5hdGVkIHJhdyBpbmkgc2VjdGlvbiB2YWx1ZVxuIik7CisJCQl6ZW5kX2luaV9lcnJvcihF X0VSUk9SIFRTUk1MU19DQywgIlVudGVybWluYXRlZCByYXcgaW5pIHNlY3Rpb24gdmFsdWUi KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1RfU0VDVElPTl9WQUxVRToKLQkJCWZwcmludGYo c3RkZXJyLCAiRVJST1I6IFVudGVybWluYXRlZCBpbmkgc2VjdGlvbiB2YWx1ZVxuIik7CisJ CQl6ZW5kX2luaV9lcnJvcihFX0VSUk9SIFRTUk1MU19DQywgIlVudGVybWluYXRlZCBpbmkg c2VjdGlvbiB2YWx1ZSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVF9DT05ESVRJT05fVkFM VUU6CisJCQl6ZW5kX2luaV9lcnJvcihFX0VSUk9SIFRTUk1MU19DQywgIlVudGVybWluYXRl ZCBpbmkgY29uZGl0aW9uIHZhbHVlIik7CiAJCQlicmVhazsKIAogCQljYXNlIFNUX1ZBTFVF OgotCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW50ZXJtaW5hdGVkIGluaSBvcHRpb24g dmFsdWVcbiIpOworCQkJemVuZF9pbmlfZXJyb3IoRV9FUlJPUiBUU1JNTFNfQ0MsICJVbnRl cm1pbmF0ZWQgaW5pIG9wdGlvbiB2YWx1ZSIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTVF9W QVJOQU1FOgotCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW50ZXJtaW5hdGVkIGluaSB2 YXJpYWJsZVxuIik7CisJCQl6ZW5kX2luaV9lcnJvcihFX0VSUk9SIFRTUk1MU19DQywgIlVu dGVybWluYXRlZCBpbmkgdmFyaWFibGUiKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0J CQlmcHJpbnRmKHN0ZGVyciwgIkJVRzogVW5rbm93biBzdGF0ZSAoJWQpXG4iLCBZWVNUQVRF KTsKKwkJCXplbmRfaW5pX2Vycm9yKEVfRVJST1IgVFNSTUxTX0NDLCAiVW5rbm93biBzdGF0 ZSIpOyAvKiAoJWQpXG4iLCBZWVNUQVRFKTsgKi8KIAkJCWJyZWFrOwogCQl9CiAJCXl5X3Bv cF9zdGF0ZShUU1JNTFNfQyk7CkBAIC01MTEsMyArNjc2LDMwIEBAIERPVUJMRV9RVU9URVNf Q0hBUlMgKFteJCJcXF18KCJcXCJ7QU5ZX0MKICNlbmRpZgogCXl5dGVybWluYXRlKCk7CiB9 CisKKyUlCisKK3ZvaWQgemVuZF9pbmlfc2V0X2lnbm9yZShaRU5EX0lOSV9DT05ESVRJT05B TCBzdGF0ZSBUU1JNTFNfREMpIC8qIHt7eyAqLworeworCXN3aXRjaChzdGF0ZSkgeworCQlj YXNlIFpFTkRfSU5JX0NPTkRfUkVBRDoKKyNpZiBaRU5EX0RFQlVHX0NGR19QQVJTRVIKKwkJ CWZwcmludGYoc3RkZXJyLCAiUkVBRFxuIik7CisjZW5kaWYKKwkJCUJFR0lOKElOSVRJQUwp OworCQkJYnJlYWs7CisJCWNhc2UgWkVORF9JTklfQ09ORF9JR05PUkU6CisjaWYgWkVORF9E RUJVR19DRkdfUEFSU0VSCisJCQlmcHJpbnRmKHN0ZGVyciwgIklHTk9SRVxuIik7CisjZW5k aWYKKwkJCUJFR0lOKElHTk9SRSk7CisJCQlicmVhazsKKwkJY2FzZSBaRU5EX0lOSV9DT05E X0RPTkU6CisjaWYgWkVORF9ERUJVR19DRkdfUEFSU0VSCisJCQlmcHJpbnRmKHN0ZGVyciwg IklGIERPTkVcbiIpOworI2VuZGlmCisJCQlCRUdJTihJRkRPTkUpOworCQkJYnJlYWs7CisJ fQorfQorLyogfX19ICovCg== ------------1D1617DD645663--