Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f3K7O-0001h7-Jm for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Apr 2018 11:28:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f3K7N-0002yo-Hd for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Apr 2018 11:28:49 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f3K7M-0002yf-O1 for pgsql-hackers@lists.postgresql.org; Tue, 03 Apr 2018 11:28:49 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f3K7D-0004ud-RN for pgsql-hackers@lists.postgresql.org; Tue, 03 Apr 2018 11:28:47 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 9CB1021C1C47; Tue, 3 Apr 2018 14:28:37 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 4F46421C1C45; Tue, 3 Apr 2018 14:28:37 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1522754917; bh=6YAe2BDcd6lagwHaW/oKHmdcXbQtJ3aeejLlcahztZs=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=pqfug4BVawxXlf8rWdmGhuWaSWflEpgEKRiZ5Hgd6Z7++E24Y5Y3g48JzgL3oJj6g aBmdUaqjErNn5xTse0nc67yqFmbjHrZDehKIQd2p0FZN+w5kzbaCMbqyBs2n3bEN94 9bi1OBaXU/+K7BX2Ruub98MPYeV6VravEbs13a/c= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_db7664ea4c203097b0630cbdefe3f1e9" Date: Tue, 03 Apr 2018 14:28:37 +0300 From: Dmitry Ivanov To: Aleksandr Parfenov Cc: Aleksander Alekseev , Thomas Munro , David Steele , PostgreSQL Hackers Subject: Re: new function for tsquery creartion Organization: Postgres Professional In-Reply-To: <1f33416d7173df5504e84e63680bd27e@postgrespro.ru> References: <20180302030605.5ur6ktkb2vyb46pb@alap3.anarazel.de> <152025433949.1548.16466871234054596674.pgcf@coridan.postgresql.org> <34280367-0dab-7f73-8d7c-d21c7276814b@pgmasters.net> <8df9de83119eb295f3424c573d64ff84@postgrespro.ru> <20180326092405.71820cf2@asp437-24-g082ur> <6754a224654a4f0339195b83b133d551@postgrespro.ru> <9153fb21831d0ba7c832960f37df2688@postgrespro.ru> <20180328092115.GA32581@e733.localdomain> <8829c490d0e17b6033b3fd622dfeed1e@postgrespro.ru> <1f33416d7173df5504e84e63680bd27e@postgrespro.ru> Message-ID: <94e41ae5e36b640d3172729c4c9b5b4c@postgrespro.ru> X-Sender: d.ivanov@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_db7664ea4c203097b0630cbdefe3f1e9 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed > The code in its current state looks messy and way too complicated; > there're lots of interleaving code branches. Thus, I decided to split > gettoken_query() into three independent tokenizers for phrase, web and > original (to_tsquery()) syntaxes. Documentation is included. Any > feedback is very welcome. I'm sorry, I totally forgot to fix a few more things, the patch is attached below. -- Dmitry Ivanov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_db7664ea4c203097b0630cbdefe3f1e9 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=websearch_to_tsquery_v7.diff Content-Disposition: attachment; filename=websearch_to_tsquery_v7.diff; size=42714 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sCmluZGV4IDVhYmIxYzQ2ZmIuLmMzYjdiZTZlNGUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtOTYwOSw2ICs5NjA5 LDE4IEBAIENSRUFURSBUWVBFIHJhaW5ib3cgQVMgRU5VTSAoJ3JlZCcsICdvcmFuZ2UnLCAneWVs bG93JywgJ2dyZWVuJywgJ2JsdWUnLCAncHVycGxlCiAgICAgICAgIDxlbnRyeT48bGl0ZXJhbD5w aHJhc2V0b190c3F1ZXJ5KCdlbmdsaXNoJywgJ1RoZSBGYXQgUmF0cycpPC9saXRlcmFsPjwvZW50 cnk+CiAgICAgICAgIDxlbnRyeT48bGl0ZXJhbD4nZmF0JyAmbHQ7LSZndDsgJ3JhdCc8L2xpdGVy YWw+PC9lbnRyeT4KICAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+ CisgICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgIDxwcmltYXJ5PndlYnNlYXJjaF90b190 c3F1ZXJ5PC9wcmltYXJ5PgorICAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgICAgPGxpdGVy YWw+PGZ1bmN0aW9uPndlYnNlYXJjaF90b190c3F1ZXJ5KDxvcHRpb25hbD4gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmNvbmZpZzwvcmVwbGFjZWFibGU+IDx0eXBlPnJlZ2NvbmZpZzwv dHlwZT4gLCA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cXVlcnk8 L3JlcGxhY2VhYmxlPiA8dHlwZT50ZXh0PC90eXBlPik8L2Z1bmN0aW9uPjwvbGl0ZXJhbD4KKyAg ICAgICAgIDwvZW50cnk+CisgICAgICAgIDxlbnRyeT48dHlwZT50c3F1ZXJ5PC90eXBlPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeT5wcm9kdWNlIDx0eXBlPnRzcXVlcnk8L3R5cGU+IGZyb20gYSB3 ZWIgc2VhcmNoIHN0eWxlIHF1ZXJ5PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PjxsaXRlcmFsPndl YnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJmYXQgcmF0IiBvciByYXQnKTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnk+PGxpdGVyYWw+J2ZhdCcgJmx0Oy0mZ3Q7ICdyYXQn IHwgJ3JhdCc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KICAgICAgICA8cm93Pgog ICAgICAgICA8ZW50cnk+CiAgICAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3RleHRzZWFyY2guc2dtbCBiL2RvYy9zcmMvc2dtbC90ZXh0c2VhcmNoLnNnbWwKaW5k ZXggNjEwYjdiZjAzMy4uMTlmNTg1MTFjOCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3RleHRz ZWFyY2guc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvdGV4dHNlYXJjaC5zZ21sCkBAIC03OTcsMTMg Kzc5NywxNiBAQCBVUERBVEUgdHQgU0VUIHRpID0KICAgIDxwYXJhPgogICAgIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gcHJvdmlkZXMgdGhlCiAgICAgZnVuY3Rpb25zIDxm dW5jdGlvbj50b190c3F1ZXJ5PC9mdW5jdGlvbj4sCi0gICAgPGZ1bmN0aW9uPnBsYWludG9fdHNx dWVyeTwvZnVuY3Rpb24+LCBhbmQKLSAgICA8ZnVuY3Rpb24+cGhyYXNldG9fdHNxdWVyeTwvZnVu Y3Rpb24+CisgICAgPGZ1bmN0aW9uPnBsYWludG9fdHNxdWVyeTwvZnVuY3Rpb24+LAorICAgIDxm dW5jdGlvbj5waHJhc2V0b190c3F1ZXJ5PC9mdW5jdGlvbj4gYW5kCisgICAgPGZ1bmN0aW9uPndl YnNlYXJjaF90b190c3F1ZXJ5PC9mdW5jdGlvbj4KICAgICBmb3IgY29udmVydGluZyBhIHF1ZXJ5 IHRvIHRoZSA8dHlwZT50c3F1ZXJ5PC90eXBlPiBkYXRhIHR5cGUuCiAgICAgPGZ1bmN0aW9uPnRv X3RzcXVlcnk8L2Z1bmN0aW9uPiBvZmZlcnMgYWNjZXNzIHRvIG1vcmUgZmVhdHVyZXMKICAgICB0 aGFuIGVpdGhlciA8ZnVuY3Rpb24+cGxhaW50b190c3F1ZXJ5PC9mdW5jdGlvbj4gb3IKLSAgICA8 ZnVuY3Rpb24+cGhyYXNldG9fdHNxdWVyeTwvZnVuY3Rpb24+LCBidXQgaXQgaXMgbGVzcyBmb3Jn aXZpbmcKLSAgICBhYm91dCBpdHMgaW5wdXQuCisgICAgPGZ1bmN0aW9uPnBocmFzZXRvX3RzcXVl cnk8L2Z1bmN0aW9uPiwgYnV0IGl0IGlzIGxlc3MgZm9yZ2l2aW5nIGFib3V0IGl0cworICAgIGlu cHV0LiA8ZnVuY3Rpb24+d2Vic2VhcmNoX3RvX3RzcXVlcnk8L2Z1bmN0aW9uPiBpcyBhIHNpbXBs aWZpZWQgdmVyc2lvbgorICAgIG9mIDxmdW5jdGlvbj50b190c3F1ZXJ5PC9mdW5jdGlvbj4gd2l0 aCBhbiBhbHRlcm5hdGl2ZSBzeW50YXgsIHNpbWlsYXIKKyAgICB0byB0aGUgb25lIHVzZWQgYnkg d2ViIHNlYXJjaCBlbmdpbmVzLgogICAgPC9wYXJhPgogCiAgICA8aW5kZXh0ZXJtPgpAQCAtOTYy LDYgKzk2NSw4NyBAQCBTRUxFQ1QgcGhyYXNldG9fdHNxdWVyeSgnZW5nbGlzaCcsICdUaGUgRmF0 ICZhbXA7IFJhdHM6QycpOwogPC9zY3JlZW4+CiAgICA8L3BhcmE+CiAKKzxzeW5vcHNpcz4KK3dl YnNlYXJjaF90b190c3F1ZXJ5KDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmNvbmZpZzwvcmVwbGFjZWFibGU+IDx0eXBlPnJlZ2NvbmZpZzwvdHlwZT4sIDwvb3B0aW9u YWw+IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5xdWVyeXRleHQ8L3JlcGxhY2VhYmxl PiA8dHlwZT50ZXh0PC90eXBlPikgcmV0dXJucyA8dHlwZT50c3F1ZXJ5PC90eXBlPgorPC9zeW5v cHNpcz4KKworICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPndlYnNlYXJjaF90b190c3F1ZXJ5PC9m dW5jdGlvbj4gY3JlYXRlcyBhIDx0eXBlPnRzcXVlcnk8L3R5cGU+CisgICAgdmFsdWUgZnJvbSA8 cmVwbGFjZWFibGU+cXVlcnl0ZXh0PC9yZXBsYWNlYWJsZT4gdXNpbmcgYW4gYWx0ZXJuYXRpdmUK KyAgICBzeW50YXggaW4gd2hpY2ggc2ltcGxlIHVuZm9ybWF0dGVkIHRleHQgaXMgYSB2YWxpZCBx dWVyeS4KKyAgICBVbmxpa2UgPGZ1bmN0aW9uPnBsYWludG9fdHNxdWVyeTwvZnVuY3Rpb24+Cisg ICAgYW5kIDxmdW5jdGlvbj5waHJhc2V0b190c3F1ZXJ5PC9mdW5jdGlvbj4sIGl0IGFsc28gcmVj b2duaXplcyBjZXJ0YWluCisgICAgb3BlcmF0b3JzLiBNb3Jlb3ZlciwgdGhpcyBmdW5jdGlvbiBz aG91bGQgbmV2ZXIgcmFpc2Ugc3ludGF4IGVycm9ycywKKyAgICB3aGljaCBtYWtlcyBpdCBwb3Nz aWJsZSB0byB1c2UgcmF3IHVzZXItc3VwcGxpZWQgaW5wdXQgZm9yIHNlYXJjaC4KKyAgICBUaGUg Zm9sbG93aW5nIHN5bnRheCBpcyBzdXBwb3J0ZWQ6CisgICAgPGl0ZW1pemVkbGlzdCAgc3BhY2lu Zz0iY29tcGFjdCIgbWFyaz0iYnVsbGV0Ij4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICA8bGl0ZXJhbD51bnF1b3RlZCB0ZXh0PC9saXRlcmFsPjogdGV4dCBub3QgaW5z aWRlIHF1b3RlIG1hcmtzIHdpbGwgYmUKKyAgICAgICAgY29udmVydGVkIHRvIHRlcm1zIHNlcGFy YXRlZCBieSA8bGl0ZXJhbD4mYW1wOzwvbGl0ZXJhbD4gb3BlcmF0b3JzLCBhcworICAgICAgICBp ZiBwcm9jZXNzZWQgYnkKKyAgICAgICAgPGZ1bmN0aW9uPnBsYWludG9fdHNxdWVyeTwvZnVuY3Rp b24+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPiJxdW90ZWQgdGV4dCI8L2xpdGVyYWw+OiB0 ZXh0IGluc2lkZSBxdW90ZSBtYXJrcyB3aWxsIGJlCisgICAgICAgIGNvbnZlcnRlZCB0byB0ZXJt cyBzZXBhcmF0ZWQgYnkgPGxpdGVyYWw+Jmx0Oy0mZ3Q7PC9saXRlcmFsPgorICAgICAgICBvcGVy YXRvcnMsIGFzIGlmIHByb2Nlc3NlZCBieSA8ZnVuY3Rpb24+cGhyYXNldG9fdHNxdWVyeTwvZnVu Y3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+ CisgICAgICA8cGFyYT4KKyAgICAgICA8bGl0ZXJhbD5PUjwvbGl0ZXJhbD46IGxvZ2ljYWwgb3Ig d2lsbCBiZSBjb252ZXJ0ZWQgdG8KKyAgICAgICB0aGUgPGxpdGVyYWw+fDwvbGl0ZXJhbD4gb3Bl cmF0b3IuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgIDxsaXN0aXRlbT4K KyAgICAgIDxwYXJhPgorICAgICAgIDxsaXRlcmFsPi08L2xpdGVyYWw+OiB0aGUgbG9naWNhbCBu b3Qgb3BlcmF0b3IsIGNvbnZlcnRlZCB0byB0aGUKKyAgICAgICB0aGUgPGxpdGVyYWw+ITwvbGl0 ZXJhbD4gb3BlcmF0b3IuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9p dGVtaXplZGxpc3Q+CisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBFeGFtcGxlczoKKyAgICA8 c2NyZWVuPgorICAgICAgc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ1Ro ZSBmYXQgcmF0cycpOworICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5CisgICAgICAtLS0tLS0t LS0tLS0tLS0tLQorICAgICAgICdmYXQnICZhbXA7ICdyYXQnCisgICAgICAoMSByb3cpCisgICAg PC9zY3JlZW4+CisgICAgPHNjcmVlbj4KKyAgICAgIHNlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnZW5nbGlzaCcsICcic3VwZXJub3ZhZSBzdGFycyIgLWNyYWInKTsKKyAgICAgICAgICAgICB3 ZWJzZWFyY2hfdG9fdHNxdWVyeQorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICAgICAgICdzdXBlcm5vdmEnICZsdDstJmd0OyAnc3RhcicgJmFtcDsgISdjcmFiJwor ICAgICAgKDEgcm93KQorICAgIDwvc2NyZWVuPgorICAgIDxzY3JlZW4+CisgICAgICBzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnInNhZCBjYXQiIG9yICJmYXQgcmF0Iicp OworICAgICAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5CisgICAgICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICdzYWQnICZsdDstJmd0OyAnY2F0JyB8ICdm YXQnICZsdDstJmd0OyAncmF0JworICAgICAgKDEgcm93KQorICAgIDwvc2NyZWVuPgorICAgIDxz Y3JlZW4+CisgICAgICBzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnc2ln bmFsIC0ic2VnbWVudGF0aW9uIGZhdWx0IicpOworICAgICAgICAgICAgICAgd2Vic2VhcmNoX3Rv X3RzcXVlcnkKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgICAgICdzaWduYWwnICZhbXA7ICEoICdzZWdtZW50JyAmbHQ7LSZndDsgJ2ZhdWx0JyApCisg ICAgICAoMSByb3cpCisgICAgPC9zY3JlZW4+CisgICAgPHNjcmVlbj4KKyAgICAgIHNlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciIiIgKSggZHVtbXkgXFwgcXVlcnkgJmx0 Oy0mZ3Q7Jyk7CisgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkKKyAgICAgIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAnZHVtbWknICZhbXA7ICdxdWVyaScKKyAgICAgICgxIHJvdykK KyAgICA8L3NjcmVlbj4KKyAgICA8L3BhcmE+CiAgIDwvc2VjdDI+CiAKICAgPHNlY3QyIGlkPSJ0 ZXh0c2VhcmNoLXJhbmtpbmciPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdHNlYXJjaC90b190 c2FueS5jIGIvc3JjL2JhY2tlbmQvdHNlYXJjaC90b190c2FueS5jCmluZGV4IGVhNTk0N2EzYTgu LjYwNTVmYjZiNGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3RzZWFyY2gvdG9fdHNhbnkuYwor KysgYi9zcmMvYmFja2VuZC90c2VhcmNoL3RvX3RzYW55LmMKQEAgLTQ5MCw3ICs0OTAsNyBAQCB0 b190c3F1ZXJ5X2J5aWQoUEdfRlVOQ1RJT05fQVJHUykKIAlxdWVyeSA9IHBhcnNlX3RzcXVlcnko dGV4dF90b19jc3RyaW5nKGluKSwKIAkJCQkJCSAgcHVzaHZhbF9tb3JwaCwKIAkJCQkJCSAgUG9p bnRlckdldERhdHVtKCZkYXRhKSwKLQkJCQkJCSAgZmFsc2UpOworCQkJCQkJICAwKTsKIAogCVBH X1JFVFVSTl9UU1FVRVJZKHF1ZXJ5KTsKIH0KQEAgLTUyMCw3ICs1MjAsNyBAQCBwbGFpbnRvX3Rz cXVlcnlfYnlpZChQR19GVU5DVElPTl9BUkdTKQogCXF1ZXJ5ID0gcGFyc2VfdHNxdWVyeSh0ZXh0 X3RvX2NzdHJpbmcoaW4pLAogCQkJCQkJICBwdXNodmFsX21vcnBoLAogCQkJCQkJICBQb2ludGVy R2V0RGF0dW0oJmRhdGEpLAotCQkJCQkJICB0cnVlKTsKKwkJCQkJCSAgUF9UU1FfUExBSU4pOwog CiAJUEdfUkVUVVJOX1BPSU5URVIocXVlcnkpOwogfQpAQCAtNTUxLDcgKzU1MSw3IEBAIHBocmFz ZXRvX3RzcXVlcnlfYnlpZChQR19GVU5DVElPTl9BUkdTKQogCXF1ZXJ5ID0gcGFyc2VfdHNxdWVy eSh0ZXh0X3RvX2NzdHJpbmcoaW4pLAogCQkJCQkJICBwdXNodmFsX21vcnBoLAogCQkJCQkJICBQ b2ludGVyR2V0RGF0dW0oJmRhdGEpLAotCQkJCQkJICB0cnVlKTsKKwkJCQkJCSAgUF9UU1FfUExB SU4pOwogCiAJUEdfUkVUVVJOX1RTUVVFUlkocXVlcnkpOwogfQpAQCAtNTY3LDMgKzU2NywzNSBA QCBwaHJhc2V0b190c3F1ZXJ5KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkJCQkJT2JqZWN0SWRH ZXREYXR1bShjZmdJZCksCiAJCQkJCQkJCQkJUG9pbnRlckdldERhdHVtKGluKSkpOwogfQorCitE YXR1bQord2Vic2VhcmNoX3RvX3RzcXVlcnlfYnlpZChQR19GVU5DVElPTl9BUkdTKQoreworCXRl eHQJICAgKmluID0gUEdfR0VUQVJHX1RFWFRfUFAoMSk7CisJTW9ycGhPcGFxdWUJZGF0YTsKKwlU U1F1ZXJ5CQlxdWVyeSA9IE5VTEw7CisKKwlkYXRhLmNmZ19pZCA9IFBHX0dFVEFSR19PSUQoMCk7 CisKKwlkYXRhLnFvcGVyYXRvciA9IE9QX0FORDsKKworCXF1ZXJ5ID0gcGFyc2VfdHNxdWVyeSh0 ZXh0X3RvX2NzdHJpbmcoaW4pLAorCQkJCQkJICBwdXNodmFsX21vcnBoLAorCQkJCQkJICBQb2lu dGVyR2V0RGF0dW0oJmRhdGEpLAorCQkJCQkJICBQX1RTUV9XRUIpOworCisJUEdfUkVUVVJOX1RT UVVFUlkocXVlcnkpOworfQorCitEYXR1bQord2Vic2VhcmNoX3RvX3RzcXVlcnkoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwl0ZXh0CSAgICppbiA9IFBHX0dFVEFSR19URVhUX1BQKDApOworCU9pZAkJ CWNmZ0lkOworCisJY2ZnSWQgPSBnZXRUU0N1cnJlbnRDb25maWcodHJ1ZSk7CisJUEdfUkVUVVJO X0RBVFVNKERpcmVjdEZ1bmN0aW9uQ2FsbDIod2Vic2VhcmNoX3RvX3RzcXVlcnlfYnlpZCwKKwkJ CQkJCQkJCQlPYmplY3RJZEdldERhdHVtKGNmZ0lkKSwKKwkJCQkJCQkJCQlQb2ludGVyR2V0RGF0 dW0oaW4pKSk7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3F1ZXJ5 LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHNxdWVyeS5jCmluZGV4IDFjY2JmNzkwMzAuLjIw MmRiODg3NWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3F1ZXJ5LmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzcXVlcnkuYwpAQCAtMzIsMTQgKzMyLDUzIEBAIGNv bnN0IGludAl0c2VhcmNoX29wX3ByaW9yaXR5W09QX0NPVU5UXSA9CiAJMwkJCQkJCQkvKiBPUF9Q SFJBU0UgKi8KIH07CiAKKy8qCisgKiBwYXJzZXIncyBzdGF0ZXMKKyAqLwordHlwZWRlZiBlbnVt Cit7CisJV0FJVE9QRVJBTkQgPSAxLAorCVdBSVRPUEVSQVRPUiA9IDIsCisJV0FJVEZJUlNUT1BF UkFORCA9IDMKK30gdHNfcGFyc2Vyc3RhdGU7CisKKy8qCisgKiB0b2tlbiB0eXBlcyBmb3IgcGFy c2luZworICovCit0eXBlZGVmIGVudW0KK3sKKwlQVF9FTkQgPSAwLAorCVBUX0VSUiA9IDEsCisJ UFRfVkFMID0gMiwKKwlQVF9PUFIgPSAzLAorCVBUX09QRU4gPSA0LAorCVBUX0NMT1NFID0gNQor fSB0c190b2tlbnR5cGU7CisKKy8qCisgKiBnZXQgdG9rZW4gZnJvbSBxdWVyeSBzdHJpbmcKKyAq CisgKiAqb3BlcmF0b3IgaXMgZmlsbGVkIGluIHdpdGggT1BfKiB3aGVuIHJldHVybiB2YWx1ZXMg aXMgUFRfT1BSLAorICogYnV0ICp3ZWlnaHQgY291bGQgY29udGFpbiBhIGRpc3RhbmNlIHZhbHVl IGluIGNhc2Ugb2YgcGhyYXNlIG9wZXJhdG9yLgorICogKnN0cnZhbCwgKmxlbnZhbCBhbmQgKndl aWdodCBhcmUgZmlsbGVkIGluIHdoZW4gcmV0dXJuIHZhbHVlIGlzIFBUX1ZBTAorICoKKyAqLwor dHlwZWRlZiB0c190b2tlbnR5cGUgKCp0c190b2tlbml6ZXIpKFRTUXVlcnlQYXJzZXJTdGF0ZSBz dGF0ZSwgaW50OCAqb3BlcmF0b3IsCisJCQkJCQkJCQkgaW50ICpsZW52YWwsIGNoYXIgKipzdHJ2 YWwsCisJCQkJCQkJCQkgaW50MTYgKndlaWdodCwgYm9vbCAqcHJlZml4KTsKKwogc3RydWN0IFRT UXVlcnlQYXJzZXJTdGF0ZURhdGEKIHsKLQkvKiBTdGF0ZSBmb3IgZ2V0dG9rZW5fcXVlcnkgKi8K KwkvKiBUb2tlbml6ZXIgdXNlZCBmb3IgcGFyc2luZyB0c3F1ZXJ5ICovCisJdHNfdG9rZW5pemVy IGdldHRva2VuOworCisJLyogU3RhdGUgb2YgdG9rZW5pemVyIGZ1bmN0aW9uICovCiAJY2hhcgkg ICAqYnVmZmVyOwkJCS8qIGVudGlyZSBzdHJpbmcgd2UgYXJlIHNjYW5uaW5nICovCiAJY2hhcgkg ICAqYnVmOwkJCS8qIGN1cnJlbnQgc2NhbiBwb2ludCAqLwotCWludAkJCXN0YXRlOwogCWludAkJ CWNvdW50OwkJCS8qIG5lc3RpbmcgY291bnQsIGluY3JlbWVudGVkIGJ5ICgsCiAJCQkJCQkJCSAq IGRlY3JlbWVudGVkIGJ5ICkgKi8KKwlib29sCQlpbl9xdW90ZXM7CQkvKiBwaHJhc2UgaW4gcXVv dGVzICIiICovCisJdHNfcGFyc2Vyc3RhdGUgc3RhdGU7CiAKIAkvKiBwb2xpc2ggKHByZWZpeCkg bm90YXRpb24gaW4gbGlzdCwgZmlsbGVkIGluIGJ5IHB1c2gqIGZ1bmN0aW9ucyAqLwogCUxpc3QJ ICAgKnBvbHN0cjsKQEAgLTU3LDEyICs5Niw2IEBAIHN0cnVjdCBUU1F1ZXJ5UGFyc2VyU3RhdGVE YXRhCiAJVFNWZWN0b3JQYXJzZVN0YXRlIHZhbHN0YXRlOwogfTsKIAotLyogcGFyc2VyJ3Mgc3Rh dGVzICovCi0jZGVmaW5lIFdBSVRPUEVSQU5EIDEKLSNkZWZpbmUgV0FJVE9QRVJBVE9SCTIKLSNk ZWZpbmUgV0FJVEZJUlNUT1BFUkFORCAzCi0jZGVmaW5lIFdBSVRTSU5HTEVPUEVSQU5EIDQKLQog LyoKICAqIHN1YnJvdXRpbmUgdG8gcGFyc2UgdGhlIG1vZGlmaWVycyAod2VpZ2h0IGFuZCBwcmVm aXggZmxhZyBjdXJyZW50bHkpCiAgKiBwYXJ0LCBsaWtlICc6QUIqJyBvZiBhIHF1ZXJ5LgpAQCAt MTk4LDM1ICsyMzEsMzQgQEAgZXJyOgogfQogCiAvKgotICogdG9rZW4gdHlwZXMgZm9yIHBhcnNp bmcKKyAqIFBhcnNlIE9SIG9wZXJhdG9yIHVzZWQgaW4gd2Vic2VhcmNoX3RvX3RzcXVlcnkoKS4K ICAqLwotdHlwZWRlZiBlbnVtCitzdGF0aWMgYm9vbAorcGFyc2Vfb3Jfb3BlcmF0b3IoVFNRdWVy eVBhcnNlclN0YXRlIHN0YXRlKQogewotCVBUX0VORCA9IDAsCi0JUFRfRVJSID0gMSwKLQlQVF9W QUwgPSAyLAotCVBUX09QUiA9IDMsCi0JUFRfT1BFTiA9IDQsCi0JUFRfQ0xPU0UgPSA1Ci19IHRz X3Rva2VudHlwZTsKKwljaGFyICpidWYgPSBzdGF0ZS0+YnVmOworCisJaWYgKHN0YXRlLT5pbl9x dW90ZXMpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAodF9pc2VxKCZidWZbMF0sICdvJykg fHwgdF9pc2VxKCZidWZbMF0sICdPJykpICYmCisJCSAgICh0X2lzZXEoJmJ1ZlsxXSwgJ3InKSB8 fCB0X2lzZXEoJmJ1ZlsxXSwgJ1InKSkgJiYKKwkJICAgKGJ1ZlsyXSAhPSAnXDAnICYmCisJCQkJ IXRfaXNlcSgmYnVmWzJdLCAnLScpICYmCisJCQkJIXRfaXNlcSgmYnVmWzJdLCAnXycpICYmCisJ CQkJIXRfaXNhbHBoYSgmYnVmWzJdKSAmJgorCQkJCSF0X2lzZGlnaXQoJmJ1ZlsyXSkpOworfQog Ci0vKgotICogZ2V0IHRva2VuIGZyb20gcXVlcnkgc3RyaW5nCi0gKgotICogKm9wZXJhdG9yIGlz IGZpbGxlZCBpbiB3aXRoIE9QXyogd2hlbiByZXR1cm4gdmFsdWVzIGlzIFBUX09QUiwKLSAqIGJ1 dCAqd2VpZ2h0IGNvdWxkIGNvbnRhaW4gYSBkaXN0YW5jZSB2YWx1ZSBpbiBjYXNlIG9mIHBocmFz ZSBvcGVyYXRvci4KLSAqICpzdHJ2YWwsICpsZW52YWwgYW5kICp3ZWlnaHQgYXJlIGZpbGxlZCBp biB3aGVuIHJldHVybiB2YWx1ZSBpcyBQVF9WQUwKLSAqCi0gKi8KIHN0YXRpYyB0c190b2tlbnR5 cGUKLWdldHRva2VuX3F1ZXJ5KFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwKLQkJCSAgIGludDgg Km9wZXJhdG9yLAotCQkJICAgaW50ICpsZW52YWwsIGNoYXIgKipzdHJ2YWwsIGludDE2ICp3ZWln aHQsIGJvb2wgKnByZWZpeCkKK2dldHRva2VuX3F1ZXJ5X3N0YW5kYXJkKFRTUXVlcnlQYXJzZXJT dGF0ZSBzdGF0ZSwgaW50OCAqb3BlcmF0b3IsCisJCQkJCQlpbnQgKmxlbnZhbCwgY2hhciAqKnN0 cnZhbCwKKwkJCQkJCWludDE2ICp3ZWlnaHQsIGJvb2wgKnByZWZpeCkKIHsKIAkqd2VpZ2h0ID0g MDsKIAkqcHJlZml4ID0gZmFsc2U7CiAKLQl3aGlsZSAoMSkKKwl3aGlsZSAodHJ1ZSkKIAl7CiAJ CXN3aXRjaCAoc3RhdGUtPnN0YXRlKQogCQl7CkBAIC0yMzQsMTcgKzI2NiwxNiBAQCBnZXR0b2tl bl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCiAJCQljYXNlIFdBSVRPUEVSQU5EOgog CQkJCWlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJyEnKSkKIAkJCQl7Ci0JCQkJCShzdGF0ZS0+YnVm KSsrOyAvKiBjYW4gc2FmZWx5ICsrLCB0X2lzZXEgZ3VhcmFudGVlIHRoYXQKLQkJCQkJCQkJCSAq IHBnX21ibGVuKCk9PTEgKi8KLQkJCQkJKm9wZXJhdG9yID0gT1BfTk9UOworCQkJCQlzdGF0ZS0+ YnVmKys7CiAJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOworCQkJCQkqb3BlcmF0b3Ig PSBPUF9OT1Q7CiAJCQkJCXJldHVybiBQVF9PUFI7CiAJCQkJfQogCQkJCWVsc2UgaWYgKHRfaXNl cShzdGF0ZS0+YnVmLCAnKCcpKQogCQkJCXsKLQkJCQkJc3RhdGUtPmNvdW50Kys7Ci0JCQkJCShz dGF0ZS0+YnVmKSsrOworCQkJCQlzdGF0ZS0+YnVmKys7CiAJCQkJCXN0YXRlLT5zdGF0ZSA9IFdB SVRPUEVSQU5EOworCQkJCQlzdGF0ZS0+Y291bnQrKzsKIAkJCQkJcmV0dXJuIFBUX09QRU47CiAJ CQkJfQogCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAnOicpKQpAQCAtMjU2LDEwICsy ODcsNyBAQCBnZXR0b2tlbl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCiAJCQkJfQog CQkJCWVsc2UgaWYgKCF0X2lzc3BhY2Uoc3RhdGUtPmJ1ZikpCiAJCQkJewotCQkJCQkvKgotCQkJ CQkgKiBXZSByZWx5IG9uIHRoZSB0c3ZlY3RvciBwYXJzZXIgdG8gcGFyc2UgdGhlIHZhbHVlIGZv cgotCQkJCQkgKiB1cwotCQkJCQkgKi8KKwkJCQkJLyogV2UgcmVseSBvbiB0aGUgdHN2ZWN0b3Ig cGFyc2VyIHRvIHBhcnNlIHRoZSB2YWx1ZSBmb3IgdXMgKi8KIAkJCQkJcmVzZXRfdHN2ZWN0b3Jf cGFyc2VyKHN0YXRlLT52YWxzdGF0ZSwgc3RhdGUtPmJ1Zik7CiAJCQkJCWlmIChnZXR0b2tlbl90 c3ZlY3RvcihzdGF0ZS0+dmFsc3RhdGUsIHN0cnZhbCwgbGVudmFsLCBOVUxMLCBOVUxMLCAmc3Rh dGUtPmJ1ZikpCiAJCQkJCXsKQEAgLTI2OCw3ICsyOTYsOSBAQCBnZXR0b2tlbl9xdWVyeShUU1F1 ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCiAJCQkJCQlyZXR1cm4gUFRfVkFMOwogCQkJCQl9CiAJCQkJ CWVsc2UgaWYgKHN0YXRlLT5zdGF0ZSA9PSBXQUlURklSU1RPUEVSQU5EKQorCQkJCQl7CiAJCQkJ CQlyZXR1cm4gUFRfRU5EOworCQkJCQl9CiAJCQkJCWVsc2UKIAkJCQkJCWVyZXBvcnQoRVJST1Is CiAJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTI3Niw1OCArMzA2 LDIwOSBAQCBnZXR0b2tlbl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCiAJCQkJCQkJ CQkJc3RhdGUtPmJ1ZmZlcikpKTsKIAkJCQl9CiAJCQkJYnJlYWs7CisKIAkJCWNhc2UgV0FJVE9Q RVJBVE9SOgogCQkJCWlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJyYnKSkKIAkJCQl7CisJCQkJCXN0 YXRlLT5idWYrKzsKIAkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CiAJCQkJCSpvcGVy YXRvciA9IE9QX0FORDsKLQkJCQkJKHN0YXRlLT5idWYpKys7CiAJCQkJCXJldHVybiBQVF9PUFI7 CiAJCQkJfQogCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAnfCcpKQogCQkJCXsKKwkJ CQkJc3RhdGUtPmJ1ZisrOwogCQkJCQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFORDsKIAkJCQkJ Km9wZXJhdG9yID0gT1BfT1I7Ci0JCQkJCShzdGF0ZS0+YnVmKSsrOwogCQkJCQlyZXR1cm4gUFRf T1BSOwogCQkJCX0KIAkJCQllbHNlIGlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJzwnKSkKIAkJCQl7 Ci0JCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOwotCQkJCQkqb3BlcmF0b3IgPSBPUF9Q SFJBU0U7CiAJCQkJCS8qIHdlaWdodCB2YXIgaXMgdXNlZCBhcyBzdG9yYWdlIGZvciBkaXN0YW5j ZSAqLwogCQkJCQlzdGF0ZS0+YnVmID0gcGFyc2VfcGhyYXNlX29wZXJhdG9yKHN0YXRlLT5idWYs IHdlaWdodCk7CisJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOworCQkJCQkqb3BlcmF0 b3IgPSBPUF9QSFJBU0U7CiAJCQkJCWlmICgqd2VpZ2h0IDwgMCkKIAkJCQkJCXJldHVybiBQVF9F UlI7CiAJCQkJCXJldHVybiBQVF9PUFI7CiAJCQkJfQogCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0 ZS0+YnVmLCAnKScpKQogCQkJCXsKLQkJCQkJKHN0YXRlLT5idWYpKys7CisJCQkJCXN0YXRlLT5i dWYrKzsKIAkJCQkJc3RhdGUtPmNvdW50LS07CiAJCQkJCXJldHVybiAoc3RhdGUtPmNvdW50IDwg MCkgPyBQVF9FUlIgOiBQVF9DTE9TRTsKIAkJCQl9Ci0JCQkJZWxzZSBpZiAoKihzdGF0ZS0+YnVm KSA9PSAnXDAnKQorCQkJCWVsc2UgaWYgKCpzdGF0ZS0+YnVmID09ICdcMCcpCisJCQkJewogCQkJ CQlyZXR1cm4gKHN0YXRlLT5jb3VudCkgPyBQVF9FUlIgOiBQVF9FTkQ7CisJCQkJfQogCQkJCWVs c2UgaWYgKCF0X2lzc3BhY2Uoc3RhdGUtPmJ1ZikpCisJCQkJewogCQkJCQlyZXR1cm4gUFRfRVJS OworCQkJCX0KIAkJCQlicmVhazsKLQkJCWNhc2UgV0FJVFNJTkdMRU9QRVJBTkQ6Ci0JCQkJaWYg KCooc3RhdGUtPmJ1ZikgPT0gJ1wwJykKKwkJfQorCisJCXN0YXRlLT5idWYgKz0gcGdfbWJsZW4o c3RhdGUtPmJ1Zik7CisJfQorfQorCitzdGF0aWMgdHNfdG9rZW50eXBlCitnZXR0b2tlbl9xdWVy eV93ZWJzZWFyY2goVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLCBpbnQ4ICpvcGVyYXRvciwKKwkJ CQkJCSBpbnQgKmxlbnZhbCwgY2hhciAqKnN0cnZhbCwKKwkJCQkJCSBpbnQxNiAqd2VpZ2h0LCBi b29sICpwcmVmaXgpCit7CisJKndlaWdodCA9IDA7CisJKnByZWZpeCA9IGZhbHNlOworCisJd2hp bGUgKHRydWUpCisJeworCQlzd2l0Y2ggKHN0YXRlLT5zdGF0ZSkKKwkJeworCQkJY2FzZSBXQUlU RklSU1RPUEVSQU5EOgorCQkJY2FzZSBXQUlUT1BFUkFORDoKKwkJCQlpZiAodF9pc2VxKHN0YXRl LT5idWYsICctJykpCisJCQkJeworCQkJCQlzdGF0ZS0+YnVmKys7CisJCQkJCXN0YXRlLT5zdGF0 ZSA9IFdBSVRPUEVSQU5EOworCisJCQkJCWlmIChzdGF0ZS0+aW5fcXVvdGVzKQorCQkJCQkJY29u dGludWU7CisKKwkJCQkJKm9wZXJhdG9yID0gT1BfTk9UOworCQkJCQlyZXR1cm4gUFRfT1BSOwor CQkJCX0KKwkJCQllbHNlIGlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJyInKSkKKwkJCQl7CisJCQkJ CXN0YXRlLT5idWYrKzsKKworCQkJCQlpZiAoIXN0YXRlLT5pbl9xdW90ZXMpCisJCQkJCXsKKwkJ CQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOworCisJCQkJCQlpZiAoc3RyY2hyKHN0YXRl LT5idWYsICciJykpCisJCQkJCQl7CisJCQkJCQkJLyogcXVvdGVkIHRleHQgc2hvdWxkIGJlIG9y ZGVyZWQgPC0+ICovCisJCQkJCQkJc3RhdGUtPmluX3F1b3RlcyA9IHRydWU7CisJCQkJCQkJcmV0 dXJuIFBUX09QRU47CisJCQkJCQl9CisKKwkJCQkJCS8qIHdlYiBzZWFyY2ggdG9sZXJhdGVzIG1p c3NpbmcgcXVvdGVzICovCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJ CXsKKwkJCQkJCS8qIHdlIGhhdmUgdG8gcHJvdmlkZSBhbiBvcGVyYW5kICovCisJCQkJCQlzdGF0 ZS0+aW5fcXVvdGVzID0gZmFsc2U7CisJCQkJCQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFUT1I7 CisJCQkJCQlwdXNoU3RvcChzdGF0ZSk7CisJCQkJCQlyZXR1cm4gUFRfQ0xPU0U7CisJCQkJCX0K KwkJCQl9CisJCQkJZWxzZSBpZiAoSVNPUEVSQVRPUihzdGF0ZS0+YnVmKSkKKwkJCQl7CisJCQkJ CS8qIG9yIGVsc2UgZ2V0dG9rZW5fdHN2ZWN0b3IoKSB3aWxsIHJhaXNlIGFuIGVycm9yICovCisJ CQkJCXN0YXRlLT5idWYrKzsKKwkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJ CWNvbnRpbnVlOworCQkJCX0KKwkJCQllbHNlIGlmICghdF9pc3NwYWNlKHN0YXRlLT5idWYpKQor CQkJCXsKKwkJCQkJLyogV2UgcmVseSBvbiB0aGUgdHN2ZWN0b3IgcGFyc2VyIHRvIHBhcnNlIHRo ZSB2YWx1ZSBmb3IgdXMgKi8KKwkJCQkJcmVzZXRfdHN2ZWN0b3JfcGFyc2VyKHN0YXRlLT52YWxz dGF0ZSwgc3RhdGUtPmJ1Zik7CisJCQkJCWlmIChnZXR0b2tlbl90c3ZlY3RvcihzdGF0ZS0+dmFs c3RhdGUsIHN0cnZhbCwgbGVudmFsLCBOVUxMLCBOVUxMLCAmc3RhdGUtPmJ1ZikpCisJCQkJCXsK KwkJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQVRPUjsKKwkJCQkJCXJldHVybiBQVF9WQUw7 CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoc3RhdGUtPnN0YXRlID09IFdBSVRGSVJTVE9QRVJBTkQp CisJCQkJCXsKKwkJCQkJCXJldHVybiBQVF9FTkQ7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7 CisJCQkJCQkvKiBmaW5hbGx5LCB3ZSBoYXZlIHRvIHByb3ZpZGUgYW4gb3BlcmFuZCAqLworCQkJ CQkJcHVzaFN0b3Aoc3RhdGUpOworCQkJCQkJcmV0dXJuIFBUX0VORDsKKwkJCQkJfQorCQkJCX0K KwkJCQlicmVhazsKKworCQkJY2FzZSBXQUlUT1BFUkFUT1I6CisJCQkJaWYgKHRfaXNlcShzdGF0 ZS0+YnVmLCAnIicpKQorCQkJCXsKKwkJCQkJaWYgKCFzdGF0ZS0+aW5fcXVvdGVzKQorCQkJCQl7 CisJCQkJCQkvKgorCQkJCQkJICogcHV0IGltcGxpY2l0IEFORCBhZnRlciBhbiBvcGVyYW5kCisJ CQkJCQkgKiBhbmQgaGFuZGxlIHRoaXMgcXVvdGUgaW4gV0FJVE9QRVJBTkQKKwkJCQkJCSAqLwor CQkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJCQkqb3BlcmF0b3IgPSBPUF9B TkQ7CisJCQkJCQlyZXR1cm4gUFRfT1BSOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJ CQkJc3RhdGUtPmJ1ZisrOworCisJCQkJCQkvKiBqdXN0IGNsb3NlIHF1b3RlcyAqLworCQkJCQkJ c3RhdGUtPmluX3F1b3RlcyA9IGZhbHNlOworCQkJCQkJcmV0dXJuIFBUX0NMT1NFOworCQkJCQl9 CisJCQkJfQorCQkJCWVsc2UgaWYgKHBhcnNlX29yX29wZXJhdG9yKHN0YXRlKSkKKwkJCQl7CisJ CQkJCXN0YXRlLT5idWYgKz0gMjsgLyogc3RybGVuKCJPUiIpICovCisJCQkJCXN0YXRlLT5zdGF0 ZSA9IFdBSVRPUEVSQU5EOworCQkJCQkqb3BlcmF0b3IgPSBPUF9PUjsKKwkJCQkJcmV0dXJuIFBU X09QUjsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKnN0YXRlLT5idWYgPT0gJ1wwJykKKwkJCQl7CiAJ CQkJCXJldHVybiBQVF9FTkQ7Ci0JCQkJKnN0cnZhbCA9IHN0YXRlLT5idWY7Ci0JCQkJKmxlbnZh bCA9IHN0cmxlbihzdGF0ZS0+YnVmKTsKLQkJCQlzdGF0ZS0+YnVmICs9IHN0cmxlbihzdGF0ZS0+ YnVmKTsKLQkJCQlzdGF0ZS0+Y291bnQrKzsKLQkJCQlyZXR1cm4gUFRfVkFMOwotCQkJZGVmYXVs dDoKLQkJCQlyZXR1cm4gUFRfRVJSOworCQkJCX0KKwkJCQllbHNlIGlmICghdF9pc3NwYWNlKHN0 YXRlLT5idWYpKQorCQkJCXsKKwkJCQkJaWYgKHN0YXRlLT5pbl9xdW90ZXMpCisJCQkJCXsKKwkJ CQkJCS8qIHB1dCBpbXBsaWNpdCA8LT4gYWZ0ZXIgYW4gb3BlcmFuZCAqLworCQkJCQkJKm9wZXJh dG9yID0gT1BfUEhSQVNFOworCQkJCQkJKndlaWdodCA9IDE7CisJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQl7CisJCQkJCQkvKiBwdXQgaW1wbGljaXQgQU5EIGFmdGVyIGFuIG9wZXJhbmQgKi8KKwkJ CQkJCSpvcGVyYXRvciA9IE9QX0FORDsKKwkJCQkJfQorCisJCQkJCXN0YXRlLT5zdGF0ZSA9IFdB SVRPUEVSQU5EOworCQkJCQlyZXR1cm4gUFRfT1BSOworCQkJCX0KIAkJCQlicmVhazsKIAkJfQor CiAJCXN0YXRlLT5idWYgKz0gcGdfbWJsZW4oc3RhdGUtPmJ1Zik7CiAJfQogfQogCitzdGF0aWMg dHNfdG9rZW50eXBlCitnZXR0b2tlbl9xdWVyeV9wbGFpbihUU1F1ZXJ5UGFyc2VyU3RhdGUgc3Rh dGUsIGludDggKm9wZXJhdG9yLAorCQkJCQkgaW50ICpsZW52YWwsIGNoYXIgKipzdHJ2YWwsCisJ CQkJCSBpbnQxNiAqd2VpZ2h0LCBib29sICpwcmVmaXgpCit7CisJKndlaWdodCA9IDA7CisJKnBy ZWZpeCA9IGZhbHNlOworCisJaWYgKCpzdGF0ZS0+YnVmID09ICdcMCcpCisJCXJldHVybiBQVF9F TkQ7CisKKwkqc3RydmFsID0gc3RhdGUtPmJ1ZjsKKwkqbGVudmFsID0gc3RybGVuKHN0YXRlLT5i dWYpOworCXN0YXRlLT5idWYgKz0gKmxlbnZhbDsKKwlzdGF0ZS0+Y291bnQrKzsKKwlyZXR1cm4g UFRfVkFMOworfQorCiAvKgogICogUHVzaCBhbiBvcGVyYXRvciB0byBzdGF0ZS0+cG9sc3RyCiAg Ki8KQEAgLTQ4OSw3ICs2NzAsOSBAQCBtYWtlcG9sKFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwK IAkvKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2VzLCBpdCBjb3VsZCBiZSBkcml2ZW4gdG8g c3RhY2sgb3ZlcmZsb3cgKi8KIAljaGVja19zdGFja19kZXB0aCgpOwogCi0Jd2hpbGUgKCh0eXBl ID0gZ2V0dG9rZW5fcXVlcnkoc3RhdGUsICZvcGVyYXRvciwgJmxlbnZhbCwgJnN0cnZhbCwgJndl aWdodCwgJnByZWZpeCkpICE9IFBUX0VORCkKKwl3aGlsZSAoKHR5cGUgPSBzdGF0ZS0+Z2V0dG9r ZW4oc3RhdGUsICZvcGVyYXRvciwKKwkJCQkJCQkJICAgJmxlbnZhbCwgJnN0cnZhbCwKKwkJCQkJ CQkJICAgJndlaWdodCwgJnByZWZpeCkpICE9IFBUX0VORCkKIAl7CiAJCXN3aXRjaCAodHlwZSkK IAkJewpAQCAtNjA1LDcgKzc4OCw3IEBAIFRTUXVlcnkKIHBhcnNlX3RzcXVlcnkoY2hhciAqYnVm LAogCQkJICBQdXNoRnVuY3Rpb24gcHVzaHZhbCwKIAkJCSAgRGF0dW0gb3BhcXVlLAotCQkJICBi b29sIGlzcGxhaW4pCisJCQkgIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgVFNRdWVyeVBhcnNlclN0 YXRlRGF0YSBzdGF0ZTsKIAlpbnQJCQlpOwpAQCAtNjEzLDE3ICs3OTYsMzggQEAgcGFyc2VfdHNx dWVyeShjaGFyICpidWYsCiAJaW50CQkJY29tbW9ubGVuOwogCVF1ZXJ5SXRlbSAgKnB0cjsKIAlM aXN0Q2VsbCAgICpjZWxsOwotCWJvb2wJCW5lZWRjbGVhbnVwOworCWJvb2wJCW5lZWRjbGVhbnVw LAorCQkJCWlzX3BsYWluLAorCQkJCWlzX3dlYjsKKwlpbnQJCQl0c3ZfZmxhZ3MgPSBQX1RTVl9P UFJfSVNfREVMSU0gfCBQX1RTVl9JU19UU1FVRVJZOworCisJaXNfcGxhaW4gPSAoZmxhZ3MgJiBQ X1RTUV9QTEFJTikgIT0gMDsKKwlpc193ZWIgPSAoZmxhZ3MgJiBQX1RTUV9XRUIpICE9IDA7CisK KwkvKiBwbGFpbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCB3ZWIgKi8KKwlBc3NlcnQoIShpc19w bGFpbiAmJiBpc193ZWIpKTsKKworCWlmIChpc193ZWIpCisJCXRzdl9mbGFncyB8PSBQX1RTVl9J U19XRUI7CisKKwkvKiBzZWxlY3Qgc3VpdGFibGUgdG9rZW5pemVyICovCisJaWYgKGlzX3BsYWlu KQorCQlzdGF0ZS5nZXR0b2tlbiA9IGdldHRva2VuX3F1ZXJ5X3BsYWluOworCWVsc2UgaWYgKGlz X3dlYikKKwkJc3RhdGUuZ2V0dG9rZW4gPSBnZXR0b2tlbl9xdWVyeV93ZWJzZWFyY2g7CisJZWxz ZQorCQlzdGF0ZS5nZXR0b2tlbiA9IGdldHRva2VuX3F1ZXJ5X3N0YW5kYXJkOwogCiAJLyogaW5p dCBzdGF0ZSAqLwogCXN0YXRlLmJ1ZmZlciA9IGJ1ZjsKIAlzdGF0ZS5idWYgPSBidWY7Ci0Jc3Rh dGUuc3RhdGUgPSAoaXNwbGFpbikgPyBXQUlUU0lOR0xFT1BFUkFORCA6IFdBSVRGSVJTVE9QRVJB TkQ7CiAJc3RhdGUuY291bnQgPSAwOworCXN0YXRlLmluX3F1b3RlcyA9IGZhbHNlOworCXN0YXRl LnN0YXRlID0gV0FJVEZJUlNUT1BFUkFORDsKIAlzdGF0ZS5wb2xzdHIgPSBOSUw7CiAKIAkvKiBp bml0IHZhbHVlIHBhcnNlcidzIHN0YXRlICovCi0Jc3RhdGUudmFsc3RhdGUgPSBpbml0X3RzdmVj dG9yX3BhcnNlcihzdGF0ZS5idWZmZXIsIHRydWUsIHRydWUpOworCXN0YXRlLnZhbHN0YXRlID0g aW5pdF90c3ZlY3Rvcl9wYXJzZXIoc3RhdGUuYnVmZmVyLCB0c3ZfZmxhZ3MpOwogCiAJLyogaW5p dCBsaXN0IG9mIG9wZXJhbmQgKi8KIAlzdGF0ZS5zdW1sZW4gPSAwOwpAQCAtNzE2LDcgKzkyMCw3 IEBAIHRzcXVlcnlpbihQR19GVU5DVElPTl9BUkdTKQogewogCWNoYXIJICAgKmluID0gUEdfR0VU QVJHX0NTVFJJTkcoMCk7CiAKLQlQR19SRVRVUk5fVFNRVUVSWShwYXJzZV90c3F1ZXJ5KGluLCBw dXNodmFsX2FzaXMsIFBvaW50ZXJHZXREYXR1bShOVUxMKSwgZmFsc2UpKTsKKwlQR19SRVRVUk5f VFNRVUVSWShwYXJzZV90c3F1ZXJ5KGluLCBwdXNodmFsX2FzaXMsIFBvaW50ZXJHZXREYXR1bShO VUxMKSwgMCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Rz dmVjdG9yLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3IuYwppbmRleCA2NGUwMmVm NDM0Li43YTI3YmQxMmEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0 b3IuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3IuYwpAQCAtMjAwLDcgKzIw MCw3IEBAIHRzdmVjdG9yaW4oUEdfRlVOQ1RJT05fQVJHUykKIAljaGFyCSAgICpjdXI7CiAJaW50 CQkJYnVmbGVuID0gMjU2OwkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiB0bXBidWYgKi8KIAotCXN0YXRl ID0gaW5pdF90c3ZlY3Rvcl9wYXJzZXIoYnVmLCBmYWxzZSwgZmFsc2UpOworCXN0YXRlID0gaW5p dF90c3ZlY3Rvcl9wYXJzZXIoYnVmLCAwKTsKIAogCWFycmxlbiA9IDY0OwogCWFyciA9IChXb3Jk RW50cnlJTiAqKSBwYWxsb2Moc2l6ZW9mKFdvcmRFbnRyeUlOKSAqIGFycmxlbik7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3JfcGFyc2VyLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvdHN2ZWN0b3JfcGFyc2VyLmMKaW5kZXggNzM2N2JhNmE0MC4uZmVkNDExYTg0 MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yX3BhcnNlci5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9wYXJzZXIuYwpAQCAtMzMsNiArMzMs NyBAQCBzdHJ1Y3QgVFNWZWN0b3JQYXJzZVN0YXRlRGF0YQogCWludAkJCWVtbDsJCQkvKiBtYXgg Ynl0ZXMgcGVyIGNoYXJhY3RlciAqLwogCWJvb2wJCW9wcmlzZGVsaW07CQkvKiB0cmVhdCAhIHwg KiAoICkgYXMgZGVsaW1pdGVycz8gKi8KIAlib29sCQlpc190c3F1ZXJ5OwkJLyogc2F5ICJ0c3F1 ZXJ5IiBub3QgInRzdmVjdG9yIiBpbiBlcnJvcnM/ICovCisJYm9vbAkJaXNfd2ViOwkJCS8qIHdl J3JlIGluIHdlYnNlYXJjaF90b190c3F1ZXJ5KCkgKi8KIH07CiAKIApAQCAtNDIsNyArNDMsNyBA QCBzdHJ1Y3QgVFNWZWN0b3JQYXJzZVN0YXRlRGF0YQogICogISB8ICYgKCApCiAgKi8KIFRTVmVj dG9yUGFyc2VTdGF0ZQotaW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5wdXQsIGJvb2wgb3By aXNkZWxpbSwgYm9vbCBpc190c3F1ZXJ5KQoraW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5w dXQsIGludCBmbGFncykKIHsKIAlUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGU7CiAKQEAgLTUyLDgg KzUzLDkgQEAgaW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5wdXQsIGJvb2wgb3ByaXNkZWxp bSwgYm9vbCBpc190c3F1ZXJ5KQogCXN0YXRlLT5sZW4gPSAzMjsKIAlzdGF0ZS0+d29yZCA9IChj aGFyICopIHBhbGxvYyhzdGF0ZS0+bGVuKTsKIAlzdGF0ZS0+ZW1sID0gcGdfZGF0YWJhc2VfZW5j b2RpbmdfbWF4X2xlbmd0aCgpOwotCXN0YXRlLT5vcHJpc2RlbGltID0gb3ByaXNkZWxpbTsKLQlz dGF0ZS0+aXNfdHNxdWVyeSA9IGlzX3RzcXVlcnk7CisJc3RhdGUtPm9wcmlzZGVsaW0gPSAoZmxh Z3MgJiBQX1RTVl9PUFJfSVNfREVMSU0pICE9IDA7CisJc3RhdGUtPmlzX3RzcXVlcnkgPSAoZmxh Z3MgJiBQX1RTVl9JU19UU1FVRVJZKSAhPSAwOworCXN0YXRlLT5pc193ZWIgPSAoZmxhZ3MgJiBQ X1RTVl9JU19XRUIpICE9IDA7CiAKIAlyZXR1cm4gc3RhdGU7CiB9CkBAIC04OSwxNiArOTEsNiBA QCBkbyB7IFwKIAl9IFwKIH0gd2hpbGUgKDApCiAKLS8qIHBocmFzZSBvcGVyYXRvciBiZWdpbnMg d2l0aCAnPCcgKi8KLSNkZWZpbmUgSVNPUEVSQVRPUih4KSBcCi0JKCBwZ19tYmxlbih4KSA9PSAx ICYmICggKih4KSA9PSAnIScgfHwJXAotCQkJCQkJCSooeCkgPT0gJyYnIHx8CVwKLQkJCQkJCQkq KHgpID09ICd8JyB8fAlcCi0JCQkJCQkJKih4KSA9PSAnKCcgfHwJXAotCQkJCQkJCSooeCkgPT0g JyknIHx8CVwKLQkJCQkJCQkqKHgpID09ICc8JwkJXAotCQkJCQkJICApICkKLQogLyogRmlsbHMg Z2V0dG9rZW5fdHN2ZWN0b3IncyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIHJldHVybnMgdHJ1ZSAq LwogI2RlZmluZSBSRVRVUk5fVE9LRU4gXAogZG8geyBcCkBAIC0xODMsMTQgKzE3NSwxNSBAQCBn ZXR0b2tlbl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUsCiAJCXsKIAkJCWlmICgq KHN0YXRlLT5wcnNidWYpID09ICdcMCcpCiAJCQkJcmV0dXJuIGZhbHNlOwotCQkJZWxzZSBpZiAo dF9pc2VxKHN0YXRlLT5wcnNidWYsICdcJycpKQorCQkJZWxzZSBpZiAoIXN0YXRlLT5pc193ZWIg JiYgdF9pc2VxKHN0YXRlLT5wcnNidWYsICdcJycpKQogCQkJCXN0YXRlY29kZSA9IFdBSVRFTkRD TVBMWDsKLQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXFwnKSkKKwkJCWVsc2Ug aWYgKCFzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXFwnKSkKIAkJCXsK IAkJCQlzdGF0ZWNvZGUgPSBXQUlUTkVYVENIQVI7CiAJCQkJb2xkc3RhdGUgPSBXQUlURU5EV09S RDsKIAkJCX0KLQkJCWVsc2UgaWYgKHN0YXRlLT5vcHJpc2RlbGltICYmIElTT1BFUkFUT1Ioc3Rh dGUtPnByc2J1ZikpCisJCQllbHNlIGlmICgoc3RhdGUtPm9wcmlzZGVsaW0gJiYgSVNPUEVSQVRP UihzdGF0ZS0+cHJzYnVmKSkgfHwKKwkJCQkJIChzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShzdGF0 ZS0+cHJzYnVmLCAnIicpKSkKIAkJCQlQUlNTWU5UQVhFUlJPUjsKIAkJCWVsc2UgaWYgKCF0X2lz c3BhY2Uoc3RhdGUtPnByc2J1ZikpCiAJCQl7CkBAIC0yMTcsMTMgKzIxMCwxNCBAQCBnZXR0b2tl bl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUsCiAJCX0KIAkJZWxzZSBpZiAoc3Rh dGVjb2RlID09IFdBSVRFTkRXT1JEKQogCQl7Ci0JCQlpZiAodF9pc2VxKHN0YXRlLT5wcnNidWYs ICdcXCcpKQorCQkJaWYgKCFzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAn XFwnKSkKIAkJCXsKIAkJCQlzdGF0ZWNvZGUgPSBXQUlUTkVYVENIQVI7CiAJCQkJb2xkc3RhdGUg PSBXQUlURU5EV09SRDsKIAkJCX0KIAkJCWVsc2UgaWYgKHRfaXNzcGFjZShzdGF0ZS0+cHJzYnVm KSB8fCAqKHN0YXRlLT5wcnNidWYpID09ICdcMCcgfHwKLQkJCQkJIChzdGF0ZS0+b3ByaXNkZWxp bSAmJiBJU09QRVJBVE9SKHN0YXRlLT5wcnNidWYpKSkKKwkJCQkJIChzdGF0ZS0+b3ByaXNkZWxp bSAmJiBJU09QRVJBVE9SKHN0YXRlLT5wcnNidWYpKSB8fAorCQkJCQkgKHN0YXRlLT5pc193ZWIg JiYgdF9pc2VxKHN0YXRlLT5wcnNidWYsICciJykpKQogCQkJewogCQkJCVJFU0laRVBSU0JVRjsK IAkJCQlpZiAoY3VycG9zID09IHN0YXRlLT53b3JkKQpAQCAtMjUwLDExICsyNDQsMTEgQEAgZ2V0 dG9rZW5fdHN2ZWN0b3IoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlLAogCQl9CiAJCWVsc2UgaWYg KHN0YXRlY29kZSA9PSBXQUlURU5EQ01QTFgpCiAJCXsKLQkJCWlmICh0X2lzZXEoc3RhdGUtPnBy c2J1ZiwgJ1wnJykpCisJCQlpZiAoIXN0YXRlLT5pc193ZWIgJiYgdF9pc2VxKHN0YXRlLT5wcnNi dWYsICdcJycpKQogCQkJewogCQkJCXN0YXRlY29kZSA9IFdBSVRDSEFSQ01QTFg7CiAJCQl9Ci0J CQllbHNlIGlmICh0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1xcJykpCisJCQllbHNlIGlmICghc3Rh dGUtPmlzX3dlYiAmJiB0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1xcJykpCiAJCQl7CiAJCQkJc3Rh dGVjb2RlID0gV0FJVE5FWFRDSEFSOwogCQkJCW9sZHN0YXRlID0gV0FJVEVORENNUExYOwpAQCAt MjcwLDcgKzI2NCw3IEBAIGdldHRva2VuX3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0 ZSwKIAkJfQogCQllbHNlIGlmIChzdGF0ZWNvZGUgPT0gV0FJVENIQVJDTVBMWCkKIAkJewotCQkJ aWYgKHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXCcnKSkKKwkJCWlmICghc3RhdGUtPmlzX3dlYiAm JiB0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1wnJykpCiAJCQl7CiAJCQkJUkVTSVpFUFJTQlVGOwog CQkJCUNPUFlDSEFSKGN1cnBvcywgc3RhdGUtPnByc2J1Zik7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCmlu ZGV4IDkwZDk5NGM3MWEuLjU2MDQxNjYzNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCkBAIC00OTY2 LDYgKzQ5NjYsOCBAQCBEQVRBKGluc2VydCBPSUQgPSAzNzQ3ICggIHBsYWludG9fdHNxdWVyeQlQ R05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIGkgcwogREVTQ1IoInRyYW5zZm9ybSB0 byB0c3F1ZXJ5Iik7CiBEQVRBKGluc2VydCBPSUQgPSA1MDA2ICggIHBocmFzZXRvX3RzcXVlcnkJ UEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBpIHMgMiAwIDM2MTUgIjM3MzQgMjUi IF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gcGhyYXNldG9fdHNxdWVyeV9ieWlk IF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7 CitEQVRBKGluc2VydCBPSUQgPSA4ODg5ICggIHdlYnNlYXJjaF90b190c3F1ZXJ5CVBHTlNQIFBH VUlEIDEyIDEwMCAwIDAgMCBmIGYgZiAgdCBmIGkgcyAyIDAgMzYxNSAiMzczNCAyNSIgX251bGxf IF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyB3ZWJzZWFyY2hfdG9fdHNxdWVyeV9ieWlkIF9u dWxsXyBfbnVsbF8gX251bGxfICkpOworREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CiBE QVRBKGluc2VydCBPSUQgPSAzNzQ5ICggIHRvX3RzdmVjdG9yCQlQR05TUCBQR1VJRCAxMiAxMDAg MCAwIDAgZiBmIGYgdCBmIHMgcyAxIDAgMzYxNCAiMjUiIF9udWxsXyBfbnVsbF8gX251bGxfIF9u dWxsXyBfbnVsbF8gdG9fdHN2ZWN0b3IgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigi dHJhbnNmb3JtIHRvIHRzdmVjdG9yIik7CiBEQVRBKGluc2VydCBPSUQgPSAzNzUwICggIHRvX3Rz cXVlcnkJCVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1ICIy NSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyB0b190c3F1ZXJ5IF9udWxsXyBf bnVsbF8gX251bGxfICkpOwpAQCAtNDk3NCw2ICs0OTc2LDggQEAgREFUQShpbnNlcnQgT0lEID0g Mzc1MSAoICBwbGFpbnRvX3RzcXVlcnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQg ZiBzIHMKIERFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVyeSIpOwogREFUQShpbnNlcnQgT0lEID0g NTAwMSAoICBwaHJhc2V0b190c3F1ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0 IGYgcyBzIDEgMCAzNjE1ICIyNSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBw aHJhc2V0b190c3F1ZXJ5IF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInRyYW5zZm9y bSB0byB0c3F1ZXJ5Iik7CitEQVRBKGluc2VydCBPSUQgPSA4ODkwICggIHdlYnNlYXJjaF90b190 c3F1ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1ICIy NSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyB3ZWJzZWFyY2hfdG9fdHNxdWVy eSBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVyeSIp OwogREFUQShpbnNlcnQgT0lEID0gNDIwOSAoICB0b190c3ZlY3RvcgkJUEdOU1AgUEdVSUQgMTIg MTAwIDAgMCAwIGYgZiBmIHQgZiBzIHMgMSAwIDM2MTQgIjM4MDIiIF9udWxsXyBfbnVsbF8gX251 bGxfIF9udWxsXyBfbnVsbF8ganNvbmJfdG9fdHN2ZWN0b3IgX251bGxfIF9udWxsXyBfbnVsbF8g KSk7CiBERVNDUigidHJhbnNmb3JtIGpzb25iIHRvIHRzdmVjdG9yIik7CiBEQVRBKGluc2VydCBP SUQgPSA0MjEwICggIHRvX3RzdmVjdG9yCQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYg dCBmIHMgcyAxIDAgMzYxNCAiMTE0IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxf IGpzb25fdG9fdHN2ZWN0b3IgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS90c2VhcmNoL3RzX3V0aWxzLmggYi9zcmMvaW5jbHVkZS90c2VhcmNoL3RzX3V0 aWxzLmgKaW5kZXggZjhkZGNlNWVjYi4uNzNlOTY5ZmU5YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdHNlYXJjaC90c191dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3RzZWFyY2gvdHNfdXRpbHMu aApAQCAtMjUsOSArMjUsMTEgQEAKIHN0cnVjdCBUU1ZlY3RvclBhcnNlU3RhdGVEYXRhOwkvKiBv cGFxdWUgc3RydWN0IGluIHRzdmVjdG9yX3BhcnNlci5jICovCiB0eXBlZGVmIHN0cnVjdCBUU1Zl Y3RvclBhcnNlU3RhdGVEYXRhICpUU1ZlY3RvclBhcnNlU3RhdGU7CiAKLWV4dGVybiBUU1ZlY3Rv clBhcnNlU3RhdGUgaW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5wdXQsCi0JCQkJCSBib29s IG9wcmlzZGVsaW0sCi0JCQkJCSBib29sIGlzX3RzcXVlcnkpOworI2RlZmluZSBQX1RTVl9PUFJf SVNfREVMSU0JKDEgPDwgMCkKKyNkZWZpbmUgUF9UU1ZfSVNfVFNRVUVSWQkoMSA8PCAxKQorI2Rl ZmluZSBQX1RTVl9JU19XRUIJCSgxIDw8IDIpCisKK2V4dGVybiBUU1ZlY3RvclBhcnNlU3RhdGUg aW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5wdXQsIGludCBmbGFncyk7CiBleHRlcm4gdm9p ZCByZXNldF90c3ZlY3Rvcl9wYXJzZXIoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlLCBjaGFyICpp bnB1dCk7CiBleHRlcm4gYm9vbCBnZXR0b2tlbl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3RhdGUg c3RhdGUsCiAJCQkJICBjaGFyICoqdG9rZW4sIGludCAqbGVuLApAQCAtMzUsNiArMzcsMTYgQEAg ZXh0ZXJuIGJvb2wgZ2V0dG9rZW5fdHN2ZWN0b3IoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlLAog CQkJCSAgY2hhciAqKmVuZHB0cik7CiBleHRlcm4gdm9pZCBjbG9zZV90c3ZlY3Rvcl9wYXJzZXIo VFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlKTsKIAorLyogcGhyYXNlIG9wZXJhdG9yIGJlZ2lucyB3 aXRoICc8JyAqLworI2RlZmluZSBJU09QRVJBVE9SKHgpIFwKKwkoIHBnX21ibGVuKHgpID09IDEg JiYgKCAqKHgpID09ICchJyB8fAlcCisJCQkJCQkJKih4KSA9PSAnJicgfHwJXAorCQkJCQkJCSoo eCkgPT0gJ3wnIHx8CVwKKwkJCQkJCQkqKHgpID09ICcoJyB8fAlcCisJCQkJCQkJKih4KSA9PSAn KScgfHwJXAorCQkJCQkJCSooeCkgPT0gJzwnCQlcCisJCQkJCQkgICkgKQorCiAvKiBwYXJzZV90 c3F1ZXJ5ICovCiAKIHN0cnVjdCBUU1F1ZXJ5UGFyc2VyU3RhdGVEYXRhOwkvKiBwcml2YXRlIGlu IGJhY2tlbmQvdXRpbHMvYWR0L3RzcXVlcnkuYyAqLwpAQCAtNDYsOSArNTgsMTMgQEAgdHlwZWRl ZiB2b2lkICgqUHVzaEZ1bmN0aW9uKSAoRGF0dW0gb3BhcXVlLCBUU1F1ZXJ5UGFyc2VyU3RhdGUg c3RhdGUsCiAJCQkJCQkJCQkJCQkJICogUXVlcnlPcGVyYW5kIHN0cnVjdCAqLwogCQkJCQkJCSAg Ym9vbCBwcmVmaXgpOwogCisjZGVmaW5lIFBfVFNRX1BMQUlOCQkoMSA8PCAwKQorI2RlZmluZSBQ X1RTUV9XRUIJCSgxIDw8IDEpCisKIGV4dGVybiBUU1F1ZXJ5IHBhcnNlX3RzcXVlcnkoY2hhciAq YnVmLAotCQkJICBQdXNoRnVuY3Rpb24gcHVzaHZhbCwKLQkJCSAgRGF0dW0gb3BhcXVlLCBib29s IGlzcGxhaW4pOworCQkJCQkJCSBQdXNoRnVuY3Rpb24gcHVzaHZhbCwKKwkJCQkJCQkgRGF0dW0g b3BhcXVlLAorCQkJCQkJCSBpbnQgZmxhZ3MpOwogCiAvKiBGdW5jdGlvbnMgZm9yIHVzZSBieSBQ dXNoRnVuY3Rpb24gaW1wbGVtZW50YXRpb25zICovCiBleHRlcm4gdm9pZCBwdXNoVmFsdWUoVFNR dWVyeVBhcnNlclN0YXRlIHN0YXRlLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC90c2VhcmNoLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHNlYXJjaC5vdXQK aW5kZXggZDYzZmIxMmYxZC4uMzc4MjVhMTEzMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC90c2VhcmNoLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Rz ZWFyY2gub3V0CkBAIC0xNjcyLDMgKzE2NzIsNDMyIEBAIHNlbGVjdCAqIGZyb20gcGhyYXNlX2lu ZGV4X3Rlc3Qgd2hlcmUgZnRzIEBAIHBocmFzZXRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnZmF0IGNh CiAoMSByb3cpCiAKIHNldCBlbmFibGVfc2Vxc2NhbiA9IG9uOworLS0gdGVzdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSBmdW5jdGlvbgorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUn LCAnSSBoYXZlIGEgZmF0OipBQkNEIGNhdCcpOworICAgICAgICAgICAgd2Vic2VhcmNoX3RvX3Rz cXVlcnkgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAnaScgJiAnaGF2ZScgJiAnYScgJiAnZmF0JyAmICdhYmNkJyAmICdjYXQnCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ29yYW5nZToq KkFBQkJDQ0REJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAnb3JhbmdlJyAmICdhYWJiY2NkZCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0OkEhY2F0OkJ8cmF0OkM8Jyk7CisgICAgICAgICAg d2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAmICdhJyAmICdjYXQnICYgJ2InICYgJ3JhdCcgJiAn YycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0 OkEgOiBjYXQ6QicpOworICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAmICdhJyAmICdjYXQnICYgJ2InCisoMSByb3cpCisKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCpyYXQnKTsKKyB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAmICdyYXQnCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdC1yYXQn KTsKKyAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgJ2ZhdC1yYXQnICYgJ2ZhdCcgJiAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXRfcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVl cnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgJiAncmF0JworKDEgcm93KQorCist LSB3ZWlnaHRzIGFyZSBjb21wbGV0ZWx5IGlnbm9yZWQKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJ2FiYyA6IGRlZicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjOmRlZicpOworIHdlYnNlYXJjaF90b190 c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykK Kworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYTo6OmInKTsKKyB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYScgJiAnYicKKygx IHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjOmQnKTsK KyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAm ICdkJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICc6 Jyk7CitOT1RJQ0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IHN0b3Agd29yZHMg b3IgZG9lc24ndCBjb250YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJzZWFyY2hfdG9fdHNxdWVy eSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gdGhlc2Ugb3BlcmF0 b3JzIGFyZSBpZ25vcmVkCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdh YmMgJiBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnc2ltcGxlJywgJ2FiYyB8IGRlZicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIDwtPiBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9f dHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cp CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyAocGcgb3IgY2xh c3MpJyk7CisgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICdhYmMnICYgJ3BnJyB8ICdjbGFzcycKKygxIHJvdykKKworLS0gTk9UIGlzIGlnbm9yZWQg aW4gcXVvdGVzCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnTXkgYnJh bmQgbmV3IHNtYXJ0cGhvbmUnKTsKKyAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYnJhbmQnICYgJ25ldycgJiAnc21hcnRw aG9uJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAn TXkgYnJhbmQgIm5ldyBzbWFydHBob25lIicpOworICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYnJhbmQnICYgJ25l dycgPC0+ICdzbWFydHBob24nCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnZW5nbGlzaCcsICdNeSBicmFuZCAibmV3IC1zbWFydHBob25lIicpOworICAgICAgd2Vic2Vh cmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnYnJhbmQnICYgJ25ldycgPC0+ICdzbWFydHBob24nCisoMSByb3cpCisKKy0tIHRlc3QgT1Ig b3BlcmF0b3IKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBvciBy YXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAn Y2F0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2lt cGxlJywgJ2NhdCBPUiByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAnY2F0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCAiT1IiIHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1 ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdjYXQnICYgJ29yJyAmICdyYXQnCisoMSBy b3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBPUicpOwor IHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdjYXQnICYg J29yJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdP UiByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnb3InICYgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnImZhdCBjYXQgT1IgcmF0IicpOworICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVy eSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8 LT4gJ2NhdCcgPC0+ICdvcicgPC0+ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCAoY2F0IE9SIHJhdCcpOworIHdlYnNlYXJjaF90b190 c3F1ZXJ5ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgJiAnY2F0JyB8ICdyYXQn CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ29yIE9S IG9yJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg J29yJyB8ICdvcicKKygxIHJvdykKKworLS0gT1IgaXMgYW4gb3BlcmF0b3IgaGVyZSAuLi4KK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJyJmYXQgY2F0Im9yImZhdCByYXQi Jyk7CisgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcgfCAnZmF0JyA8LT4gJ3JhdCcK KygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9y KHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnZmF0IG9yKXJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yJnJhdCcpOworIHdlYnNlYXJjaF90b190c3F1 ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yfHJhdCcpOworIHdl YnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3Jh dCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0 IG9yIXJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdzaW1wbGUnLCAnZmF0IG9yPHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yPnJhdCcpOworIHdlYnNlYXJjaF90b190 c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykK Kworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yICcpOworIHdl YnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnCisoMSBy b3cpCisKKy0tIC4uLiBidXQgbm90IGhlcmUKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2FiYyBvcmFuZ2UnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvcmFuZ2UnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvctGC0LXRgdGCJyk7Cisgd2Vic2VhcmNo X3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAnb3LRgtC10YHR gicKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJj IE9SMTIzNCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICdhYmMnICYgJ29yMTIzNCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnYWJjIG9yLWFiYycpOworICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvci1h YmMnICYgJ29yJyAmICdhYmMnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnc2ltcGxlJywgJ2FiYyBPUl9hYmMnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvcicgJiAnYWJjJworKDEgcm93KQorCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhYmMgb3InKTsKKyB3ZWJzZWFyY2hf dG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvcicKKygxIHJv dykKKworLS0gdGVzdCBxdW90ZXMKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlz aCcsICcicGdfY2xhc3MgcGcnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdwZycgJiAnY2xhc3MnICYgJ3BnJworKDEgcm93KQorCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAncGdfY2xhc3MgcGciJyk7Cisgd2Vic2Vh cmNoX3RvX3RzcXVlcnkgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAncGcnICYgJ2NsYXNz JyAmICdwZycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNo JywgJyJwZ19jbGFzcyBwZyInKTsKKyAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICggJ3BnJyAmICdjbGFzcycgKSA8LT4gJ3BnJwor KDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYWJjICJw Z19jbGFzcyBwZyInKTsKKyAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICggJ3BnJyAmICdj bGFzcycgKSA8LT4gJ3BnJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J2VuZ2xpc2gnLCAnInBnX2NsYXNzIHBnIiBkZWYnKTsKKyAgICAgICAgd2Vic2VhcmNoX3RvX3Rz cXVlcnkgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAo ICdwZycgJiAnY2xhc3MnICkgPC0+ICdwZycgJiAnZGVmJworKDEgcm93KQorCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYWJjICJwZyBwZ19jbGFzcyBwZyIgZGVmJyk7 CisgICAgICAgICAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICdhYmMnICYgJ3BnJyA8LT4gKCAncGcnICYgJ2NsYXNzJyApIDwtPiAncGcnICYgJ2RlZicKKygx IHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyBvciAicGcg cGdfY2xhc3MgcGciIG9yICcpOworICAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ3BnJyA8LT4gKCAn cGcnICYgJ2NsYXNzJyApIDwtPiAncGcnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnZW5nbGlzaCcsICciInBnIHBnX2NsYXNzIHBnIiInKTsKKyAgICAgd2Vic2VhcmNo X3RvX3RzcXVlcnkgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ3BnJyAm ICdwZycgJiAnY2xhc3MnICYgJ3BnJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ2VuZ2xpc2gnLCAnYWJjICIiIiIiIGRlZicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2NhdCAtImZhdCByYXQiJyk7Cisg ICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICdjYXQnICYgISggJ2ZhdCcgPC0+ICdyYXQnICkKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2NhdCAtImZhdCByYXQiIGNoZWVzZScpOwor ICAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdjYXQnICYgISggJ2ZhdCcgPC0+ICdyYXQnICkg JiAnY2hlZXMnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlz aCcsICdhYmMgImRlZiAtIicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2FiYyAiZGVmIDoiJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVl cnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAnZGVmJworKDEgcm93KQorCitz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1 c3QgZWF0ZW4gYSAtcmF0LicpOworICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcg JiAnZWF0ZW4nICYgISdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnZW5nbGlzaCcsICciQSBmYXQgY2F0IiBoYXMganVzdCBlYXRlbiBPUiAhcmF0LicpOworICAg ICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgJ2ZhdCcgPC0+ICdjYXQnICYgJ2VhdGVuJyB8ICdyYXQnCisoMSByb3cp CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSBmYXQgY2F0IiBo YXMganVzdCAoK2VhdGVuIE9SIC1yYXQpJyk7CisgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5 ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIDwt PiAnY2F0JyAmICdlYXRlbicgfCAhJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdlbmdsaXNoJywgJ3RoaXMgaXMgLS0tLWZpbmUnKTsKKyB3ZWJzZWFyY2hfdG9f dHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAhISEhJ2ZpbmUnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICcoKCkpICkpKSkgdGhpcyB8 fHwgaXMgJiYgLWZpbmUsICJkZWFyIGZyaWVuZCIgT1IgZ29vZCcpOworICAgICAgICAgIHdlYnNl YXJjaF90b190c3F1ZXJ5ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICEnZmluZScgJiAnZGVhcicgPC0+ICdmcmllbmQnIHwgJ2dvb2QnCisoMSBy b3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdhbiBvbGQgPC0+ IGNhdCAiIGlzIGZpbmUgJiYmIHRvbycpOworICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnb2xkJyAmICdjYXQnICYgJ2ZpbmUnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSB0aGUiIE9SIGp1c3Qg b24nKTsKK05PVElDRTogIHRleHQtc2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3Jk cyBvciBkb2Vzbid0IGNvbnRhaW4gbGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1 ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAiINGB 0YrQtdC70LAg0LrRgNGL0YHRgycpOworICAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ9GC0L7Qu9GB 0YInIDwtPiAn0LrQvtGI0LonICYgJ9GB0YrQtdC7JyAmICfQutGA0YvRgScKKygxIHJvdykKKwor c2VsZWN0IHRvX3RzdmVjdG9yKCdydXNzaWFuJywgJ9GB0YrQtdC70LAg0YLQvtC70YHRgtCw0Y8g 0LrQvtGI0LrQsCDQutGA0YvRgdGDJykgQEAKK3dlYnNlYXJjaF90b190c3F1ZXJ5KCdydXNzaWFu JywgJyLRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwIiDRgdGK0LXQu9CwINC60YDRi9GB0YMnKTsK KyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK3NlbGVjdCB0b190c3ZlY3Rv cigncnVzc2lhbicsICfRgdGK0LXQu9CwINGC0L7Qu9GB0YLQsNGPINGB0LXRgNCw0Y8g0LrQvtGI 0LrQsCDQutGA0YvRgdGDJykgQEAKK3dlYnNlYXJjaF90b190c3F1ZXJ5KCdydXNzaWFuJywgJyLR gtC+0LvRgdGC0LDRjyDQutC+0YjQutCwIiDRgdGK0LXQu9CwINC60YDRi9GB0YMnKTsKKyA/Y29s dW1uPyAKKy0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIGNhc2VzIGhhbmRsZWQgYnkgZ2V0 dG9rZW5fdHN2ZWN0b3IoKQorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcnJycpOworTk9U SUNFOiAgdGV4dC1zZWFyY2ggcXVlcnkgY29udGFpbnMgb25seSBzdG9wIHdvcmRzIG9yIGRvZXNu J3QgY29udGFpbiBsZXhlbWVzLCBpZ25vcmVkCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnJydhYmMnJycnZGVmJycnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnXGFiYycpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdhYmMnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnXCcpOworTk9USUNFOiAgdGV4dC1zZWFyY2ggcXVlcnkgY29udGFpbnMgb25seSBzdG9w IHdvcmRzIG9yIGRvZXNuJ3QgY29udGFpbiBsZXhlbWVzLCBpZ25vcmVkCisgd2Vic2VhcmNoX3Rv X3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RzZWFyY2guc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvdHNlYXJjaC5zcWwKaW5kZXggMWM4NTIwYjNlOS4uZjI5OWE1ZDMyYiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdHNlYXJjaC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvdHNlYXJjaC5zcWwKQEAgLTUzOSwzICs1MzksOTggQEAgY3JlYXRlIGluZGV4IHBocmFzZV9p bmRleF90ZXN0X2lkeCBvbiBwaHJhc2VfaW5kZXhfdGVzdCB1c2luZyBnaW4oZnRzKTsKIHNldCBl bmFibGVfc2Vxc2NhbiA9IG9mZjsKIHNlbGVjdCAqIGZyb20gcGhyYXNlX2luZGV4X3Rlc3Qgd2hl cmUgZnRzIEBAIHBocmFzZXRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnZmF0IGNhdCcpOwogc2V0IGVu YWJsZV9zZXFzY2FuID0gb247CisKKy0tIHRlc3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkgZnVuY3Rp b24KK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ0kgaGF2ZSBhIGZhdDoq QUJDRCBjYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ29yYW5n ZToqKkFBQkJDQ0REJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdm YXQ6QSFjYXQ6QnxyYXQ6QzwnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxl JywgJ2ZhdDpBIDogY2F0OkInKTsKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1w bGUnLCAnZmF0KnJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn ZmF0LXJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0X3Jh dCcpOworCistLSB3ZWlnaHRzIGFyZSBjb21wbGV0ZWx5IGlnbm9yZWQKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyA6IGRlZicpOworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjOmRlZicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnYTo6OmInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2lt cGxlJywgJ2FiYzpkJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICc6 Jyk7CisKKy0tIHRoZXNlIG9wZXJhdG9ycyBhcmUgaWdub3JlZAorc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjICYgZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ3NpbXBsZScsICdhYmMgfCBkZWYnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnc2ltcGxlJywgJ2FiYyA8LT4gZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J3NpbXBsZScsICdhYmMgKHBnIG9yIGNsYXNzKScpOworCistLSBOT1QgaXMgaWdub3JlZCBpbiBx dW90ZXMKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdNeSBicmFuZCBu ZXcgc21hcnRwaG9uZScpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywg J015IGJyYW5kICJuZXcgc21hcnRwaG9uZSInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnZW5nbGlzaCcsICdNeSBicmFuZCAibmV3IC1zbWFydHBob25lIicpOworCistLSB0ZXN0IE9S IG9wZXJhdG9yCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgb3Ig cmF0Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgT1IgcmF0 Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgIk9SIiByYXQn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBPUicpOworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnT1IgcmF0Jyk7CitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICciZmF0IGNhdCBPUiByYXQiJyk7CitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgKGNhdCBPUiByYXQnKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ29yIE9SIG9yJyk7CisKKy0tIE9SIGlz IGFuIG9wZXJhdG9yIGhlcmUgLi4uCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBs ZScsICciZmF0IGNhdCJvciJmYXQgcmF0IicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdzaW1wbGUnLCAnZmF0IG9yKHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnZmF0IG9yKXJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1w bGUnLCAnZmF0IG9yJnJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUn LCAnZmF0IG9yfHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn ZmF0IG9yIXJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0 IG9yPHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9y PnJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yICcp OworCistLSAuLi4gYnV0IG5vdCBoZXJlCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3Np bXBsZScsICdhYmMgb3JhbmdlJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBs ZScsICdhYmMgb3LRgtC10YHRgicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1w bGUnLCAnYWJjIE9SMTIzNCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUn LCAnYWJjIG9yLWFiYycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn YWJjIE9SX2FiYycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJj IG9yJyk7CisKKy0tIHRlc3QgcXVvdGVzCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2Vu Z2xpc2gnLCAnInBnX2NsYXNzIHBnJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2Vu Z2xpc2gnLCAncGdfY2xhc3MgcGciJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2Vu Z2xpc2gnLCAnInBnX2NsYXNzIHBnIicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdl bmdsaXNoJywgJ2FiYyAicGdfY2xhc3MgcGciJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVl cnkoJ2VuZ2xpc2gnLCAnInBnX2NsYXNzIHBnIiBkZWYnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnZW5nbGlzaCcsICdhYmMgInBnIHBnX2NsYXNzIHBnIiBkZWYnKTsKK3NlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICcgb3IgInBnIHBnX2NsYXNzIHBnIiBvciAn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciInBnIHBnX2NsYXNz IHBnIiInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdhYmMgIiIi IiIgZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnY2F0IC0i ZmF0IHJhdCInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdjYXQg LSJmYXQgcmF0IiBjaGVlc2UnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlz aCcsICdhYmMgImRlZiAtIicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNo JywgJ2FiYyAiZGVmIDoiJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlz aCcsICciQSBmYXQgY2F0IiBoYXMganVzdCBlYXRlbiBhIC1yYXQuJyk7CitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgZWF0ZW4gT1Ig IXJhdC4nKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSBmYXQg Y2F0IiBoYXMganVzdCAoK2VhdGVuIE9SIC1yYXQpJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnZW5nbGlzaCcsICd0aGlzIGlzIC0tLS1maW5lJyk7CitzZWxlY3Qgd2Vic2VhcmNo X3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnKCgpKSApKSkpIHRoaXMgfHx8IGlzICYmIC1maW5lLCAi ZGVhciBmcmllbmQiIE9SIGdvb2QnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5n bGlzaCcsICdhbiBvbGQgPC0+IGNhdCAiIGlzIGZpbmUgJiYmIHRvbycpOworCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgdGhlIiBPUiBqdXN0IG9uJyk7CitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7R iNC60LAiINGB0YrQtdC70LAg0LrRgNGL0YHRgycpOworCitzZWxlY3QgdG9fdHN2ZWN0b3IoJ3J1 c3NpYW4nLCAn0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwINC60YDRi9GB0YMn KSBAQAord2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC6 0L7RiNC60LAiINGB0YrQtdC70LAg0LrRgNGL0YHRgycpOworCitzZWxlY3QgdG9fdHN2ZWN0b3Io J3J1c3NpYW4nLCAn0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDRgdC10YDQsNGPINC60L7RiNC6 0LAg0LrRgNGL0YHRgycpIEBACit3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQ vtC70YHRgtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisKKy0tIGNh c2VzIGhhbmRsZWQgYnkgZ2V0dG9rZW5fdHN2ZWN0b3IoKQorc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCcnJycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcnJ2FiYycnJydkZWYn JycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdcYWJjJyk7CitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ1wnKTsK --=_db7664ea4c203097b0630cbdefe3f1e9--