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 1f3JTH-0007EG-VD for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Apr 2018 10:47:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f3JTG-0000gU-NT for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Apr 2018 10:47:22 +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 1f3JTF-0000gL-Rm for pgsql-hackers@lists.postgresql.org; Tue, 03 Apr 2018 10:47:22 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f3JTB-0003zq-9C for pgsql-hackers@lists.postgresql.org; Tue, 03 Apr 2018 10:47:20 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 6AC6921C1CE8; Tue, 3 Apr 2018 13:47:14 +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 25B9D21C1CB0; Tue, 3 Apr 2018 13:47:14 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1522752434; bh=RneqahA9h4vRZEDr6MSbekTYRXvkh9wMRx9HfuSPqOI=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=bRW9uV6rxrSE5MmI+sVWjakoL2Geh3NPD8zHDt6f/v1AAVbpg8JkpmNf+8sCps5QT aEzQKT15se6sGUIT6z20pus9f1ZUJChNUNcZCdx5BC6ruwPmXf9rK7avI4Yk1hHqkN LlV8qdJThs9nsE7GB5n4ZfQka18hsS+sCIg8Xufg= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_b2d870cfa337c928639a8df02df58e5f" Date: Tue, 03 Apr 2018 13:47:14 +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: 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> Message-ID: <1f33416d7173df5504e84e63680bd27e@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 --=_b2d870cfa337c928639a8df02df58e5f Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi everyone, 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. -- Dmitry Ivanov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_b2d870cfa337c928639a8df02df58e5f Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=websearch_to_tsquery_v6.diff Content-Disposition: attachment; filename=websearch_to_tsquery_v6.diff; size=42817 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 LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHNxdWVyeS5jCmluZGV4IDFjY2JmNzkwMzAuLmQ1 ZGY4YjU1MDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3F1ZXJ5LmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzcXVlcnkuYwpAQCAtMzIsMTQgKzMyLDUzIEBAIGNv bnN0IGludAl0c2VhcmNoX29wX3ByaW9yaXR5W09QX0NPVU5UXSA9CiAJMwkJCQkJCQkvKiBPUF9Q SFJBU0UgKi8KIH07CiAKKy8qCisgKiBwYXJzZXIncyBzdGF0ZXMKKyAqLwordHlwZWRlZiBlbnVt Cit7CisJV0FJVE9QRVJBTkQgPSAxLAorCVdBSVRPUEVSQVRPUiA9IDIsCisJV0FJVEZJUlNUT1BF UkFORCA9IDMKK30gdHNfcGFyc2Vyc3RhdGU7CisKKy8qCisgKiB0b2tlbiB0eXBlcyBmb3IgcGFy c2luZworICovCit0eXBlZGVmIGVudW0KK3sKKwlQVF9FTkQgPSAwLAorCVBUX0VSUiA9IDEsCisJ UFRfVkFMID0gMiwKKwlQVF9PUFIgPSAzLAorCVBUX09QRU4gPSA0LAorCVBUX0NMT1NFID0gNQor fSB0c190b2tlbnR5cGU7CisKKy8qCisgKiBnZXQgdG9rZW4gZnJvbSBxdWVyeSBzdHJpbmcKKyAq CisgKiAqb3BlcmF0b3IgaXMgZmlsbGVkIGluIHdpdGggT1BfKiB3aGVuIHJldHVybiB2YWx1ZXMg aXMgUFRfT1BSLAorICogYnV0ICp3ZWlnaHQgY291bGQgY29udGFpbiBhIGRpc3RhbmNlIHZhbHVl IGluIGNhc2Ugb2YgcGhyYXNlIG9wZXJhdG9yLgorICogKnN0cnZhbCwgKmxlbnZhbCBhbmQgKndl aWdodCBhcmUgZmlsbGVkIGluIHdoZW4gcmV0dXJuIHZhbHVlIGlzIFBUX1ZBTAorICoKKyAqLwor dHlwZWRlZiB0c190b2tlbnR5cGUgdHNfdG9rZW5pemVyKFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0 ZSwgaW50OCAqb3BlcmF0b3IsCisJCQkJCQkJCSAgaW50ICpsZW52YWwsIGNoYXIgKipzdHJ2YWws CisJCQkJCQkJCSAgaW50MTYgKndlaWdodCwgYm9vbCAqcHJlZml4KTsKKwogc3RydWN0IFRTUXVl cnlQYXJzZXJTdGF0ZURhdGEKIHsKLQkvKiBTdGF0ZSBmb3IgZ2V0dG9rZW5fcXVlcnkgKi8KKwkv KiBUb2tlbml6ZXIgdXNlZCBmb3IgcGFyc2luZyB0c3F1ZXJ5ICovCisJdHNfdG9rZW5pemVyICpn ZXR0b2tlbjsKKworCS8qIFN0YXRlIG9mIHRva2VuaXplciBmdW5jdGlvbiAqLwogCWNoYXIJICAg KmJ1ZmZlcjsJCQkvKiBlbnRpcmUgc3RyaW5nIHdlIGFyZSBzY2FubmluZyAqLwogCWNoYXIJICAg KmJ1ZjsJCQkvKiBjdXJyZW50IHNjYW4gcG9pbnQgKi8KLQlpbnQJCQlzdGF0ZTsKIAlpbnQJCQlj b3VudDsJCQkvKiBuZXN0aW5nIGNvdW50LCBpbmNyZW1lbnRlZCBieSAoLAogCQkJCQkJCQkgKiBk ZWNyZW1lbnRlZCBieSApICovCisJYm9vbAkJaW5fcXVvdGVzOwkJLyogcGhyYXNlIGluIHF1b3Rl cyAiIiAqLworCXRzX3BhcnNlcnN0YXRlIHN0YXRlOwogCiAJLyogcG9saXNoIChwcmVmaXgpIG5v dGF0aW9uIGluIGxpc3QsIGZpbGxlZCBpbiBieSBwdXNoKiBmdW5jdGlvbnMgKi8KIAlMaXN0CSAg ICpwb2xzdHI7CkBAIC01NywxMiArOTYsNiBAQCBzdHJ1Y3QgVFNRdWVyeVBhcnNlclN0YXRlRGF0 YQogCVRTVmVjdG9yUGFyc2VTdGF0ZSB2YWxzdGF0ZTsKIH07CiAKLS8qIHBhcnNlcidzIHN0YXRl cyAqLwotI2RlZmluZSBXQUlUT1BFUkFORCAxCi0jZGVmaW5lIFdBSVRPUEVSQVRPUgkyCi0jZGVm aW5lIFdBSVRGSVJTVE9QRVJBTkQgMwotI2RlZmluZSBXQUlUU0lOR0xFT1BFUkFORCA0Ci0KIC8q CiAgKiBzdWJyb3V0aW5lIHRvIHBhcnNlIHRoZSBtb2RpZmllcnMgKHdlaWdodCBhbmQgcHJlZml4 IGZsYWcgY3VycmVudGx5KQogICogcGFydCwgbGlrZSAnOkFCKicgb2YgYSBxdWVyeS4KQEAgLTE5 OCwzNSArMjMxLDM0IEBAIGVycjoKIH0KIAogLyoKLSAqIHRva2VuIHR5cGVzIGZvciBwYXJzaW5n CisgKiBQYXJzZSBPUiBvcGVyYXRvciB1c2VkIGluIHdlYnNlYXJjaF90b190c3F1ZXJ5KCkuCiAg Ki8KLXR5cGVkZWYgZW51bQorc3RhdGljIGJvb2wKK3BhcnNlX29yX29wZXJhdG9yKFRTUXVlcnlQ YXJzZXJTdGF0ZSBzdGF0ZSkKIHsKLQlQVF9FTkQgPSAwLAotCVBUX0VSUiA9IDEsCi0JUFRfVkFM ID0gMiwKLQlQVF9PUFIgPSAzLAotCVBUX09QRU4gPSA0LAotCVBUX0NMT1NFID0gNQotfSB0c190 b2tlbnR5cGU7CisJY2hhciAqYnVmID0gc3RhdGUtPmJ1ZjsKKworCWlmIChzdGF0ZS0+aW5fcXVv dGVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gKHRfaXNlcSgmYnVmWzBdLCAnbycpIHx8 IHRfaXNlcSgmYnVmWzBdLCAnTycpKSAmJgorCQkgICAodF9pc2VxKCZidWZbMV0sICdyJykgfHwg dF9pc2VxKCZidWZbMV0sICdSJykpICYmCisJCSAgIChidWZbMl0gIT0gJ1wwJyAmJgorCQkJCSF0 X2lzZXEoJmJ1ZlsyXSwgJy0nKSAmJgorCQkJCSF0X2lzZXEoJmJ1ZlsyXSwgJ18nKSAmJgorCQkJ CSF0X2lzYWxwaGEoJmJ1ZlsyXSkgJiYKKwkJCQkhdF9pc2RpZ2l0KCZidWZbMl0pKTsKK30KIAot LyoKLSAqIGdldCB0b2tlbiBmcm9tIHF1ZXJ5IHN0cmluZwotICoKLSAqICpvcGVyYXRvciBpcyBm aWxsZWQgaW4gd2l0aCBPUF8qIHdoZW4gcmV0dXJuIHZhbHVlcyBpcyBQVF9PUFIsCi0gKiBidXQg KndlaWdodCBjb3VsZCBjb250YWluIGEgZGlzdGFuY2UgdmFsdWUgaW4gY2FzZSBvZiBwaHJhc2Ug b3BlcmF0b3IuCi0gKiAqc3RydmFsLCAqbGVudmFsIGFuZCAqd2VpZ2h0IGFyZSBmaWxsZWQgaW4g d2hlbiByZXR1cm4gdmFsdWUgaXMgUFRfVkFMCi0gKgotICovCiBzdGF0aWMgdHNfdG9rZW50eXBl Ci1nZXR0b2tlbl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCi0JCQkgICBpbnQ4ICpv cGVyYXRvciwKLQkJCSAgIGludCAqbGVudmFsLCBjaGFyICoqc3RydmFsLCBpbnQxNiAqd2VpZ2h0 LCBib29sICpwcmVmaXgpCitnZXR0b2tlbl9xdWVyeV9zdGFuZGFyZChUU1F1ZXJ5UGFyc2VyU3Rh dGUgc3RhdGUsIGludDggKm9wZXJhdG9yLAorCQkJCQkJaW50ICpsZW52YWwsIGNoYXIgKipzdHJ2 YWwsCisJCQkJCQlpbnQxNiAqd2VpZ2h0LCBib29sICpwcmVmaXgpCiB7CiAJKndlaWdodCA9IDA7 CiAJKnByZWZpeCA9IGZhbHNlOwogCi0Jd2hpbGUgKDEpCisJd2hpbGUgKHRydWUpCiAJewogCQlz d2l0Y2ggKHN0YXRlLT5zdGF0ZSkKIAkJewpAQCAtMjM0LDE3ICsyNjYsMjAgQEAgZ2V0dG9rZW5f cXVlcnkoVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCQkJY2FzZSBXQUlUT1BFUkFORDoKIAkJ CQlpZiAodF9pc2VxKHN0YXRlLT5idWYsICchJykpCiAJCQkJewotCQkJCQkoc3RhdGUtPmJ1Zikr KzsgLyogY2FuIHNhZmVseSArKywgdF9pc2VxIGd1YXJhbnRlZSB0aGF0Ci0JCQkJCQkJCQkgKiBw Z19tYmxlbigpPT0xICovCi0JCQkJCSpvcGVyYXRvciA9IE9QX05PVDsKKwkJCQkJc3RhdGUtPmJ1 ZisrOwogCQkJCQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFORDsKKworCQkJCQlpZiAoc3RhdGUt PmluX3F1b3RlcykKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCSpvcGVyYXRvciA9IE9QX05PVDsK IAkJCQkJcmV0dXJuIFBUX09QUjsKIAkJCQl9CiAJCQkJZWxzZSBpZiAodF9pc2VxKHN0YXRlLT5i dWYsICcoJykpCiAJCQkJewotCQkJCQlzdGF0ZS0+Y291bnQrKzsKLQkJCQkJKHN0YXRlLT5idWYp Kys7CisJCQkJCXN0YXRlLT5idWYrKzsKIAkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7 CisJCQkJCXN0YXRlLT5jb3VudCsrOwogCQkJCQlyZXR1cm4gUFRfT1BFTjsKIAkJCQl9CiAJCQkJ ZWxzZSBpZiAodF9pc2VxKHN0YXRlLT5idWYsICc6JykpCkBAIC0yNTYsMTAgKzI5MSw3IEBAIGdl dHRva2VuX3F1ZXJ5KFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwKIAkJCQl9CiAJCQkJZWxzZSBp ZiAoIXRfaXNzcGFjZShzdGF0ZS0+YnVmKSkKIAkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIFdlIHJl bHkgb24gdGhlIHRzdmVjdG9yIHBhcnNlciB0byBwYXJzZSB0aGUgdmFsdWUgZm9yCi0JCQkJCSAq IHVzCi0JCQkJCSAqLworCQkJCQkvKiBXZSByZWx5IG9uIHRoZSB0c3ZlY3RvciBwYXJzZXIgdG8g cGFyc2UgdGhlIHZhbHVlIGZvciB1cyAqLwogCQkJCQlyZXNldF90c3ZlY3Rvcl9wYXJzZXIoc3Rh dGUtPnZhbHN0YXRlLCBzdGF0ZS0+YnVmKTsKIAkJCQkJaWYgKGdldHRva2VuX3RzdmVjdG9yKHN0 YXRlLT52YWxzdGF0ZSwgc3RydmFsLCBsZW52YWwsIE5VTEwsIE5VTEwsICZzdGF0ZS0+YnVmKSkK IAkJCQkJewpAQCAtMjY4LDcgKzMwMCw5IEBAIGdldHRva2VuX3F1ZXJ5KFRTUXVlcnlQYXJzZXJT dGF0ZSBzdGF0ZSwKIAkJCQkJCXJldHVybiBQVF9WQUw7CiAJCQkJCX0KIAkJCQkJZWxzZSBpZiAo c3RhdGUtPnN0YXRlID09IFdBSVRGSVJTVE9QRVJBTkQpCisJCQkJCXsKIAkJCQkJCXJldHVybiBQ VF9FTkQ7CisJCQkJCX0KIAkJCQkJZWxzZQogCQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtMjc2LDU4ICszMTAsMjA5IEBAIGdl dHRva2VuX3F1ZXJ5KFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwKIAkJCQkJCQkJCQlzdGF0ZS0+ YnVmZmVyKSkpOwogCQkJCX0KIAkJCQlicmVhazsKKwogCQkJY2FzZSBXQUlUT1BFUkFUT1I6CiAJ CQkJaWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAnJicpKQogCQkJCXsKKwkJCQkJc3RhdGUtPmJ1Zisr OwogCQkJCQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFORDsKIAkJCQkJKm9wZXJhdG9yID0gT1Bf QU5EOwotCQkJCQkoc3RhdGUtPmJ1ZikrKzsKIAkJCQkJcmV0dXJuIFBUX09QUjsKIAkJCQl9CiAJ CQkJZWxzZSBpZiAodF9pc2VxKHN0YXRlLT5idWYsICd8JykpCiAJCQkJeworCQkJCQlzdGF0ZS0+ YnVmKys7CiAJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOwogCQkJCQkqb3BlcmF0b3Ig PSBPUF9PUjsKLQkJCQkJKHN0YXRlLT5idWYpKys7CiAJCQkJCXJldHVybiBQVF9PUFI7CiAJCQkJ fQogCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAnPCcpKQogCQkJCXsKLQkJCQkJc3Rh dGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7Ci0JCQkJCSpvcGVyYXRvciA9IE9QX1BIUkFTRTsKIAkJ CQkJLyogd2VpZ2h0IHZhciBpcyB1c2VkIGFzIHN0b3JhZ2UgZm9yIGRpc3RhbmNlICovCiAJCQkJ CXN0YXRlLT5idWYgPSBwYXJzZV9waHJhc2Vfb3BlcmF0b3Ioc3RhdGUtPmJ1Ziwgd2VpZ2h0KTsK KwkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJCSpvcGVyYXRvciA9IE9QX1BI UkFTRTsKIAkJCQkJaWYgKCp3ZWlnaHQgPCAwKQogCQkJCQkJcmV0dXJuIFBUX0VSUjsKIAkJCQkJ cmV0dXJuIFBUX09QUjsKIAkJCQl9CiAJCQkJZWxzZSBpZiAodF9pc2VxKHN0YXRlLT5idWYsICcp JykpCiAJCQkJewotCQkJCQkoc3RhdGUtPmJ1ZikrKzsKKwkJCQkJc3RhdGUtPmJ1ZisrOwogCQkJ CQlzdGF0ZS0+Y291bnQtLTsKIAkJCQkJcmV0dXJuIChzdGF0ZS0+Y291bnQgPCAwKSA/IFBUX0VS UiA6IFBUX0NMT1NFOwogCQkJCX0KLQkJCQllbHNlIGlmICgqKHN0YXRlLT5idWYpID09ICdcMCcp Ci0JCQkJCXJldHVybiAoc3RhdGUtPmNvdW50KSA/IFBUX0VSUiA6IFBUX0VORDsKKwkJCQllbHNl IGlmICgqc3RhdGUtPmJ1ZiA9PSAnXDAnKQorCQkJCXsKKwkJCQkJcmV0dXJuIHN0YXRlLT5jb3Vu dCA/IFBUX0VSUiA6IFBUX0VORDsKKwkJCQl9CiAJCQkJZWxzZSBpZiAoIXRfaXNzcGFjZShzdGF0 ZS0+YnVmKSkKKwkJCQl7CiAJCQkJCXJldHVybiBQVF9FUlI7CisJCQkJfQogCQkJCWJyZWFrOwot CQkJY2FzZSBXQUlUU0lOR0xFT1BFUkFORDoKLQkJCQlpZiAoKihzdGF0ZS0+YnVmKSA9PSAnXDAn KQorCQl9CisKKwkJc3RhdGUtPmJ1ZiArPSBwZ19tYmxlbihzdGF0ZS0+YnVmKTsKKwl9Cit9CisK K3N0YXRpYyB0c190b2tlbnR5cGUKK2dldHRva2VuX3F1ZXJ5X3dlYnNlYXJjaChUU1F1ZXJ5UGFy c2VyU3RhdGUgc3RhdGUsIGludDggKm9wZXJhdG9yLAorCQkJCQkJIGludCAqbGVudmFsLCBjaGFy ICoqc3RydmFsLAorCQkJCQkJIGludDE2ICp3ZWlnaHQsIGJvb2wgKnByZWZpeCkKK3sKKwkqd2Vp Z2h0ID0gMDsKKwkqcHJlZml4ID0gZmFsc2U7CisKKwl3aGlsZSAodHJ1ZSkKKwl7CisJCXN3aXRj aCAoc3RhdGUtPnN0YXRlKQorCQl7CisJCQljYXNlIFdBSVRGSVJTVE9QRVJBTkQ6CisJCQljYXNl IFdBSVRPUEVSQU5EOgorCQkJCWlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJy0nKSkKKwkJCQl7CisJ CQkJCXN0YXRlLT5idWYrKzsKKwkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisKKwkJ CQkJaWYgKHN0YXRlLT5pbl9xdW90ZXMpCisJCQkJCQljb250aW51ZTsKKworCQkJCQkqb3BlcmF0 b3IgPSBPUF9OT1Q7CisJCQkJCXJldHVybiBQVF9PUFI7CisJCQkJfQorCQkJCWVsc2UgaWYgKHRf aXNlcShzdGF0ZS0+YnVmLCAnIicpKQorCQkJCXsKKwkJCQkJc3RhdGUtPmJ1ZisrOworCisJCQkJ CWlmICghc3RhdGUtPmluX3F1b3RlcykKKwkJCQkJeworCQkJCQkJc3RhdGUtPnN0YXRlID0gV0FJ VE9QRVJBTkQ7CisKKwkJCQkJCWlmIChzdHJjaHIoc3RhdGUtPmJ1ZiwgJyInKSkKKwkJCQkJCXsK KwkJCQkJCQkvKiBxdW90ZWQgdGV4dCBzaG91bGQgYmUgb3JkZXJlZCA8LT4gKi8KKwkJCQkJCQlz dGF0ZS0+aW5fcXVvdGVzID0gdHJ1ZTsKKwkJCQkJCQlyZXR1cm4gUFRfT1BFTjsKKwkJCQkJCX0K KworCQkJCQkJLyogd2ViIHNlYXJjaCB0b2xlcmF0ZXMgbWlzc2luZyBxdW90ZXMgKi8KKwkJCQkJ CWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyogd2UgaGF2ZSB0 byBwcm92aWRlIGFuIG9wZXJhbmQgKi8KKwkJCQkJCXN0YXRlLT5pbl9xdW90ZXMgPSBmYWxzZTsK KwkJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQVRPUjsKKwkJCQkJCXB1c2hTdG9wKHN0YXRl KTsKKwkJCQkJCXJldHVybiBQVF9DTE9TRTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChJ U09QRVJBVE9SKHN0YXRlLT5idWYpKQorCQkJCXsKKwkJCQkJLyogb3IgZWxzZSBnZXR0b2tlbl90 c3ZlY3RvcigpIHdpbGwgcmFpc2UgYW4gZXJyb3IgKi8KKwkJCQkJc3RhdGUtPmJ1ZisrOworCQkJ CQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFORDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJ CWVsc2UgaWYgKCF0X2lzc3BhY2Uoc3RhdGUtPmJ1ZikpCisJCQkJeworCQkJCQkvKiBXZSByZWx5 IG9uIHRoZSB0c3ZlY3RvciBwYXJzZXIgdG8gcGFyc2UgdGhlIHZhbHVlIGZvciB1cyAqLworCQkJ CQlyZXNldF90c3ZlY3Rvcl9wYXJzZXIoc3RhdGUtPnZhbHN0YXRlLCBzdGF0ZS0+YnVmKTsKKwkJ CQkJaWYgKGdldHRva2VuX3RzdmVjdG9yKHN0YXRlLT52YWxzdGF0ZSwgc3RydmFsLCBsZW52YWws IE5VTEwsIE5VTEwsICZzdGF0ZS0+YnVmKSkKKwkJCQkJeworCQkJCQkJc3RhdGUtPnN0YXRlID0g V0FJVE9QRVJBVE9SOworCQkJCQkJcmV0dXJuIFBUX1ZBTDsKKwkJCQkJfQorCQkJCQllbHNlIGlm IChzdGF0ZS0+c3RhdGUgPT0gV0FJVEZJUlNUT1BFUkFORCkKKwkJCQkJeworCQkJCQkJcmV0dXJu IFBUX0VORDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8qIGZpbmFsbHksIHdl IGhhdmUgdG8gcHJvdmlkZSBhbiBvcGVyYW5kICovCisJCQkJCQlwdXNoU3RvcChzdGF0ZSk7CisJ CQkJCQlyZXR1cm4gUFRfRU5EOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNl IFdBSVRPUEVSQVRPUjoKKwkJCQlpZiAodF9pc2VxKHN0YXRlLT5idWYsICciJykpCisJCQkJewor CQkJCQlpZiAoIXN0YXRlLT5pbl9xdW90ZXMpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBw dXQgaW1wbGljaXQgQU5EIGFmdGVyIGFuIG9wZXJhbmQKKwkJCQkJCSAqIGFuZCBoYW5kbGUgdGhp cyBxdW90ZSBpbiBXQUlUT1BFUkFORAorCQkJCQkJICovCisJCQkJCQlzdGF0ZS0+c3RhdGUgPSBX QUlUT1BFUkFORDsKKwkJCQkJCSpvcGVyYXRvciA9IE9QX0FORDsKKwkJCQkJCXJldHVybiBQVF9P UFI7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlzdGF0ZS0+YnVmKys7CisKKwkJ CQkJCS8qIGp1c3QgY2xvc2UgcXVvdGVzICovCisJCQkJCQlzdGF0ZS0+aW5fcXVvdGVzID0gZmFs c2U7CisJCQkJCQlyZXR1cm4gUFRfQ0xPU0U7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAo cGFyc2Vfb3Jfb3BlcmF0b3Ioc3RhdGUpKQorCQkJCXsKKwkJCQkJc3RhdGUtPmJ1ZiArPSAyOyAv KiBzdHJsZW4oIk9SIikgKi8KKwkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJ CSpvcGVyYXRvciA9IE9QX09SOworCQkJCQlyZXR1cm4gUFRfT1BSOworCQkJCX0KKwkJCQllbHNl IGlmICgqc3RhdGUtPmJ1ZiA9PSAnXDAnKQorCQkJCXsKIAkJCQkJcmV0dXJuIFBUX0VORDsKLQkJ CQkqc3RydmFsID0gc3RhdGUtPmJ1ZjsKLQkJCQkqbGVudmFsID0gc3RybGVuKHN0YXRlLT5idWYp OwotCQkJCXN0YXRlLT5idWYgKz0gc3RybGVuKHN0YXRlLT5idWYpOwotCQkJCXN0YXRlLT5jb3Vu dCsrOwotCQkJCXJldHVybiBQVF9WQUw7Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiBQVF9FUlI7 CisJCQkJfQorCQkJCWVsc2UgaWYgKCF0X2lzc3BhY2Uoc3RhdGUtPmJ1ZikpCisJCQkJeworCQkJ CQlpZiAoc3RhdGUtPmluX3F1b3RlcykKKwkJCQkJeworCQkJCQkJLyogcHV0IGltcGxpY2l0IDwt PiBhZnRlciBhbiBvcGVyYW5kICovCisJCQkJCQkqb3BlcmF0b3IgPSBPUF9QSFJBU0U7CisJCQkJ CQkqd2VpZ2h0ID0gMTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8qIHB1dCBp bXBsaWNpdCBBTkQgYWZ0ZXIgYW4gb3BlcmFuZCAqLworCQkJCQkJKm9wZXJhdG9yID0gT1BfQU5E OworCQkJCQl9CisKKwkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJCXJldHVy biBQVF9PUFI7CisJCQkJfQogCQkJCWJyZWFrOwogCQl9CisKIAkJc3RhdGUtPmJ1ZiArPSBwZ19t YmxlbihzdGF0ZS0+YnVmKTsKIAl9CiB9CiAKK3N0YXRpYyB0c190b2tlbnR5cGUKK2dldHRva2Vu X3F1ZXJ5X3BsYWluKFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwgaW50OCAqb3BlcmF0b3IsCisJ CQkJCSBpbnQgKmxlbnZhbCwgY2hhciAqKnN0cnZhbCwKKwkJCQkJIGludDE2ICp3ZWlnaHQsIGJv b2wgKnByZWZpeCkKK3sKKwkqd2VpZ2h0ID0gMDsKKwkqcHJlZml4ID0gZmFsc2U7CisKKwlpZiAo KnN0YXRlLT5idWYgPT0gJ1wwJykKKwkJcmV0dXJuIFBUX0VORDsKKworCSpzdHJ2YWwgPSBzdGF0 ZS0+YnVmOworCSpsZW52YWwgPSBzdHJsZW4oc3RhdGUtPmJ1Zik7CisJc3RhdGUtPmJ1ZiArPSBz dHJsZW4oc3RhdGUtPmJ1Zik7CisJc3RhdGUtPmNvdW50Kys7CisJcmV0dXJuIFBUX1ZBTDsKK30K KwogLyoKICAqIFB1c2ggYW4gb3BlcmF0b3IgdG8gc3RhdGUtPnBvbHN0cgogICovCkBAIC00ODks NyArNjc0LDkgQEAgbWFrZXBvbChUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCiAJLyogc2luY2Ug dGhpcyBmdW5jdGlvbiByZWN1cnNlcywgaXQgY291bGQgYmUgZHJpdmVuIHRvIHN0YWNrIG92ZXJm bG93ICovCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKIAotCXdoaWxlICgodHlwZSA9IGdldHRva2Vu X3F1ZXJ5KHN0YXRlLCAmb3BlcmF0b3IsICZsZW52YWwsICZzdHJ2YWwsICZ3ZWlnaHQsICZwcmVm aXgpKSAhPSBQVF9FTkQpCisJd2hpbGUgKCh0eXBlID0gc3RhdGUtPmdldHRva2VuKHN0YXRlLCAm b3BlcmF0b3IsCisJCQkJCQkJCSAgICZsZW52YWwsICZzdHJ2YWwsCisJCQkJCQkJCSAgICZ3ZWln aHQsICZwcmVmaXgpKSAhPSBQVF9FTkQpCiAJewogCQlzd2l0Y2ggKHR5cGUpCiAJCXsKQEAgLTYw NSw3ICs3OTIsNyBAQCBUU1F1ZXJ5CiBwYXJzZV90c3F1ZXJ5KGNoYXIgKmJ1ZiwKIAkJCSAgUHVz aEZ1bmN0aW9uIHB1c2h2YWwsCiAJCQkgIERhdHVtIG9wYXF1ZSwKLQkJCSAgYm9vbCBpc3BsYWlu KQorCQkJICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IFRTUXVlcnlQYXJzZXJTdGF0ZURhdGEgc3Rh dGU7CiAJaW50CQkJaTsKQEAgLTYxMywxNyArODAwLDM4IEBAIHBhcnNlX3RzcXVlcnkoY2hhciAq YnVmLAogCWludAkJCWNvbW1vbmxlbjsKIAlRdWVyeUl0ZW0gICpwdHI7CiAJTGlzdENlbGwgICAq Y2VsbDsKLQlib29sCQluZWVkY2xlYW51cDsKKwlib29sCQluZWVkY2xlYW51cCwKKwkJCQlpc19w bGFpbiwKKwkJCQlpc193ZWI7CisJaW50CQkJdHN2X2ZsYWdzID0gUF9UU1ZfT1BSX0lTX0RFTElN IHwgUF9UU1ZfSVNfVFNRVUVSWTsKKworCWlzX3BsYWluID0gKGZsYWdzICYgUF9UU1FfUExBSU4p ICE9IDA7CisJaXNfd2ViID0gKGZsYWdzICYgUF9UU1FfV0VCKSAhPSAwOworCisJLyogcGxhaW4g c2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggd2ViICovCisJQXNzZXJ0KCEoaXNfcGxhaW4gJiYgaXNf d2ViKSk7CisKKwlpZiAoaXNfd2ViKQorCQl0c3ZfZmxhZ3MgfD0gUF9UU1ZfSVNfV0VCOworCisJ Lyogc2VsZWN0IHN1aXRhYmxlIHRva2VuaXplciAqLworCWlmIChpc19wbGFpbikKKwkJc3RhdGUu Z2V0dG9rZW4gPSBnZXR0b2tlbl9xdWVyeV9wbGFpbjsKKwllbHNlIGlmIChpc193ZWIpCisJCXN0 YXRlLmdldHRva2VuID0gZ2V0dG9rZW5fcXVlcnlfd2Vic2VhcmNoOworCWVsc2UKKwkJc3RhdGUu Z2V0dG9rZW4gPSBnZXR0b2tlbl9xdWVyeV9zdGFuZGFyZDsKIAogCS8qIGluaXQgc3RhdGUgKi8K IAlzdGF0ZS5idWZmZXIgPSBidWY7CiAJc3RhdGUuYnVmID0gYnVmOwotCXN0YXRlLnN0YXRlID0g KGlzcGxhaW4pID8gV0FJVFNJTkdMRU9QRVJBTkQgOiBXQUlURklSU1RPUEVSQU5EOwogCXN0YXRl LmNvdW50ID0gMDsKKwlzdGF0ZS5pbl9xdW90ZXMgPSBmYWxzZTsKKwlzdGF0ZS5zdGF0ZSA9IFdB SVRGSVJTVE9QRVJBTkQ7CiAJc3RhdGUucG9sc3RyID0gTklMOwogCiAJLyogaW5pdCB2YWx1ZSBw YXJzZXIncyBzdGF0ZSAqLwotCXN0YXRlLnZhbHN0YXRlID0gaW5pdF90c3ZlY3Rvcl9wYXJzZXIo c3RhdGUuYnVmZmVyLCB0cnVlLCB0cnVlKTsKKwlzdGF0ZS52YWxzdGF0ZSA9IGluaXRfdHN2ZWN0 b3JfcGFyc2VyKHN0YXRlLmJ1ZmZlciwgdHN2X2ZsYWdzKTsKIAogCS8qIGluaXQgbGlzdCBvZiBv cGVyYW5kICovCiAJc3RhdGUuc3VtbGVuID0gMDsKQEAgLTcxNiw3ICs5MjQsNyBAQCB0c3F1ZXJ5 aW4oUEdfRlVOQ1RJT05fQVJHUykKIHsKIAljaGFyCSAgICppbiA9IFBHX0dFVEFSR19DU1RSSU5H KDApOwogCi0JUEdfUkVUVVJOX1RTUVVFUlkocGFyc2VfdHNxdWVyeShpbiwgcHVzaHZhbF9hc2lz LCBQb2ludGVyR2V0RGF0dW0oTlVMTCksIGZhbHNlKSk7CisJUEdfUkVUVVJOX1RTUVVFUlkocGFy c2VfdHNxdWVyeShpbiwgcHVzaHZhbF9hc2lzLCBQb2ludGVyR2V0RGF0dW0oTlVMTCksIDApKTsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvci5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yLmMKaW5kZXggNjRlMDJlZjQzNC4uN2EyN2Jk MTJhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yLmMKQEAgLTIwMCw3ICsyMDAsNyBAQCB0c3Zl Y3RvcmluKFBHX0ZVTkNUSU9OX0FSR1MpCiAJY2hhcgkgICAqY3VyOwogCWludAkJCWJ1ZmxlbiA9 IDI1NjsJLyogYWxsb2NhdGVkIHNpemUgb2YgdG1wYnVmICovCiAKLQlzdGF0ZSA9IGluaXRfdHN2 ZWN0b3JfcGFyc2VyKGJ1ZiwgZmFsc2UsIGZhbHNlKTsKKwlzdGF0ZSA9IGluaXRfdHN2ZWN0b3Jf cGFyc2VyKGJ1ZiwgMCk7CiAKIAlhcnJsZW4gPSA2NDsKIAlhcnIgPSAoV29yZEVudHJ5SU4gKikg cGFsbG9jKHNpemVvZihXb3JkRW50cnlJTikgKiBhcnJsZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yX3BhcnNlci5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3RzdmVjdG9yX3BhcnNlci5jCmluZGV4IDczNjdiYTZhNDAuLmZlZDQxMWE4NDIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9wYXJzZXIuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvdHN2ZWN0b3JfcGFyc2VyLmMKQEAgLTMzLDYgKzMzLDcgQEAgc3RydWN0 IFRTVmVjdG9yUGFyc2VTdGF0ZURhdGEKIAlpbnQJCQllbWw7CQkJLyogbWF4IGJ5dGVzIHBlciBj aGFyYWN0ZXIgKi8KIAlib29sCQlvcHJpc2RlbGltOwkJLyogdHJlYXQgISB8ICogKCApIGFzIGRl bGltaXRlcnM/ICovCiAJYm9vbAkJaXNfdHNxdWVyeTsJCS8qIHNheSAidHNxdWVyeSIgbm90ICJ0 c3ZlY3RvciIgaW4gZXJyb3JzPyAqLworCWJvb2wJCWlzX3dlYjsJCQkvKiB3ZSdyZSBpbiB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgpICovCiB9OwogCiAKQEAgLTQyLDcgKzQzLDcgQEAgc3RydWN0IFRT VmVjdG9yUGFyc2VTdGF0ZURhdGEKICAqICEgfCAmICggKQogICovCiBUU1ZlY3RvclBhcnNlU3Rh dGUKLWluaXRfdHN2ZWN0b3JfcGFyc2VyKGNoYXIgKmlucHV0LCBib29sIG9wcmlzZGVsaW0sIGJv b2wgaXNfdHNxdWVyeSkKK2luaXRfdHN2ZWN0b3JfcGFyc2VyKGNoYXIgKmlucHV0LCBpbnQgZmxh Z3MpCiB7CiAJVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlOwogCkBAIC01Miw4ICs1Myw5IEBAIGlu aXRfdHN2ZWN0b3JfcGFyc2VyKGNoYXIgKmlucHV0LCBib29sIG9wcmlzZGVsaW0sIGJvb2wgaXNf dHNxdWVyeSkKIAlzdGF0ZS0+bGVuID0gMzI7CiAJc3RhdGUtPndvcmQgPSAoY2hhciAqKSBwYWxs b2Moc3RhdGUtPmxlbik7CiAJc3RhdGUtPmVtbCA9IHBnX2RhdGFiYXNlX2VuY29kaW5nX21heF9s ZW5ndGgoKTsKLQlzdGF0ZS0+b3ByaXNkZWxpbSA9IG9wcmlzZGVsaW07Ci0Jc3RhdGUtPmlzX3Rz cXVlcnkgPSBpc190c3F1ZXJ5OworCXN0YXRlLT5vcHJpc2RlbGltID0gKGZsYWdzICYgUF9UU1Zf T1BSX0lTX0RFTElNKSAhPSAwOworCXN0YXRlLT5pc190c3F1ZXJ5ID0gKGZsYWdzICYgUF9UU1Zf SVNfVFNRVUVSWSkgIT0gMDsKKwlzdGF0ZS0+aXNfd2ViID0gKGZsYWdzICYgUF9UU1ZfSVNfV0VC KSAhPSAwOwogCiAJcmV0dXJuIHN0YXRlOwogfQpAQCAtODksMTYgKzkxLDYgQEAgZG8geyBcCiAJ fSBcCiB9IHdoaWxlICgwKQogCi0vKiBwaHJhc2Ugb3BlcmF0b3IgYmVnaW5zIHdpdGggJzwnICov Ci0jZGVmaW5lIElTT1BFUkFUT1IoeCkgXAotCSggcGdfbWJsZW4oeCkgPT0gMSAmJiAoICooeCkg PT0gJyEnIHx8CVwKLQkJCQkJCQkqKHgpID09ICcmJyB8fAlcCi0JCQkJCQkJKih4KSA9PSAnfCcg fHwJXAotCQkJCQkJCSooeCkgPT0gJygnIHx8CVwKLQkJCQkJCQkqKHgpID09ICcpJyB8fAlcCi0J CQkJCQkJKih4KSA9PSAnPCcJCVwKLQkJCQkJCSAgKSApCi0KIC8qIEZpbGxzIGdldHRva2VuX3Rz dmVjdG9yJ3Mgb3V0cHV0IHBhcmFtZXRlcnMsIGFuZCByZXR1cm5zIHRydWUgKi8KICNkZWZpbmUg UkVUVVJOX1RPS0VOIFwKIGRvIHsgXApAQCAtMTgzLDE0ICsxNzUsMTUgQEAgZ2V0dG9rZW5fdHN2 ZWN0b3IoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlLAogCQl7CiAJCQlpZiAoKihzdGF0ZS0+cHJz YnVmKSA9PSAnXDAnKQogCQkJCXJldHVybiBmYWxzZTsKLQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0 ZS0+cHJzYnVmLCAnXCcnKSkKKwkJCWVsc2UgaWYgKCFzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShz dGF0ZS0+cHJzYnVmLCAnXCcnKSkKIAkJCQlzdGF0ZWNvZGUgPSBXQUlURU5EQ01QTFg7Ci0JCQll bHNlIGlmICh0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1xcJykpCisJCQllbHNlIGlmICghc3RhdGUt PmlzX3dlYiAmJiB0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1xcJykpCiAJCQl7CiAJCQkJc3RhdGVj b2RlID0gV0FJVE5FWFRDSEFSOwogCQkJCW9sZHN0YXRlID0gV0FJVEVORFdPUkQ7CiAJCQl9Ci0J CQllbHNlIGlmIChzdGF0ZS0+b3ByaXNkZWxpbSAmJiBJU09QRVJBVE9SKHN0YXRlLT5wcnNidWYp KQorCQkJZWxzZSBpZiAoKHN0YXRlLT5vcHJpc2RlbGltICYmIElTT1BFUkFUT1Ioc3RhdGUtPnBy c2J1ZikpIHx8CisJCQkJCSAoc3RhdGUtPmlzX3dlYiAmJiB0X2lzZXEoc3RhdGUtPnByc2J1Ziwg JyInKSkpCiAJCQkJUFJTU1lOVEFYRVJST1I7CiAJCQllbHNlIGlmICghdF9pc3NwYWNlKHN0YXRl LT5wcnNidWYpKQogCQkJewpAQCAtMjE3LDEzICsyMTAsMTQgQEAgZ2V0dG9rZW5fdHN2ZWN0b3Io VFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlLAogCQl9CiAJCWVsc2UgaWYgKHN0YXRlY29kZSA9PSBX QUlURU5EV09SRCkKIAkJewotCQkJaWYgKHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXFwnKSkKKwkJ CWlmICghc3RhdGUtPmlzX3dlYiAmJiB0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1xcJykpCiAJCQl7 CiAJCQkJc3RhdGVjb2RlID0gV0FJVE5FWFRDSEFSOwogCQkJCW9sZHN0YXRlID0gV0FJVEVORFdP UkQ7CiAJCQl9CiAJCQllbHNlIGlmICh0X2lzc3BhY2Uoc3RhdGUtPnByc2J1ZikgfHwgKihzdGF0 ZS0+cHJzYnVmKSA9PSAnXDAnIHx8Ci0JCQkJCSAoc3RhdGUtPm9wcmlzZGVsaW0gJiYgSVNPUEVS QVRPUihzdGF0ZS0+cHJzYnVmKSkpCisJCQkJCSAoc3RhdGUtPm9wcmlzZGVsaW0gJiYgSVNPUEVS QVRPUihzdGF0ZS0+cHJzYnVmKSkgfHwKKwkJCQkJIChzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShz dGF0ZS0+cHJzYnVmLCAnIicpKSkKIAkJCXsKIAkJCQlSRVNJWkVQUlNCVUY7CiAJCQkJaWYgKGN1 cnBvcyA9PSBzdGF0ZS0+d29yZCkKQEAgLTI1MCwxMSArMjQ0LDExIEBAIGdldHRva2VuX3RzdmVj dG9yKFRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZSwKIAkJfQogCQllbHNlIGlmIChzdGF0ZWNvZGUg PT0gV0FJVEVORENNUExYKQogCQl7Ci0JCQlpZiAodF9pc2VxKHN0YXRlLT5wcnNidWYsICdcJycp KQorCQkJaWYgKCFzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXCcnKSkK IAkJCXsKIAkJCQlzdGF0ZWNvZGUgPSBXQUlUQ0hBUkNNUExYOwogCQkJfQotCQkJZWxzZSBpZiAo dF9pc2VxKHN0YXRlLT5wcnNidWYsICdcXCcpKQorCQkJZWxzZSBpZiAoIXN0YXRlLT5pc193ZWIg JiYgdF9pc2VxKHN0YXRlLT5wcnNidWYsICdcXCcpKQogCQkJewogCQkJCXN0YXRlY29kZSA9IFdB SVRORVhUQ0hBUjsKIAkJCQlvbGRzdGF0ZSA9IFdBSVRFTkRDTVBMWDsKQEAgLTI3MCw3ICsyNjQs NyBAQCBnZXR0b2tlbl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUsCiAJCX0KIAkJ ZWxzZSBpZiAoc3RhdGVjb2RlID09IFdBSVRDSEFSQ01QTFgpCiAJCXsKLQkJCWlmICh0X2lzZXEo c3RhdGUtPnByc2J1ZiwgJ1wnJykpCisJCQlpZiAoIXN0YXRlLT5pc193ZWIgJiYgdF9pc2VxKHN0 YXRlLT5wcnNidWYsICdcJycpKQogCQkJewogCQkJCVJFU0laRVBSU0JVRjsKIAkJCQlDT1BZQ0hB UihjdXJwb3MsIHN0YXRlLT5wcnNidWYpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuaAppbmRleCA5MGQ5OTRj NzFhLi41NjA0MTY2MzZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu aAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuaApAQCAtNDk2Niw2ICs0OTY2LDgg QEAgREFUQShpbnNlcnQgT0lEID0gMzc0NyAoICBwbGFpbnRvX3RzcXVlcnkJUEdOU1AgUEdVSUQg MTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBpIHMKIERFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVyeSIp OwogREFUQShpbnNlcnQgT0lEID0gNTAwNiAoICBwaHJhc2V0b190c3F1ZXJ5CVBHTlNQIFBHVUlE IDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgaSBzIDIgMCAzNjE1ICIzNzM0IDI1IiBfbnVsbF8gX251 bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHBocmFzZXRvX3RzcXVlcnlfYnlpZCBfbnVsbF8gX251 bGxfIF9udWxsXyApKTsKIERFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVyeSIpOworREFUQShpbnNl cnQgT0lEID0gODg4OSAoICB3ZWJzZWFyY2hfdG9fdHNxdWVyeQlQR05TUCBQR1VJRCAxMiAxMDAg MCAwIDAgZiBmIGYgIHQgZiBpIHMgMiAwIDM2MTUgIjM3MzQgMjUiIF9udWxsXyBfbnVsbF8gX251 bGxfIF9udWxsXyBfbnVsbF8gd2Vic2VhcmNoX3RvX3RzcXVlcnlfYnlpZCBfbnVsbF8gX251bGxf IF9udWxsXyApKTsKK0RFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVyeSIpOwogREFUQShpbnNlcnQg T0lEID0gMzc0OSAoICB0b190c3ZlY3RvcgkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBm IHQgZiBzIHMgMSAwIDM2MTQgIjI1IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxf IHRvX3RzdmVjdG9yIF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInRyYW5zZm9ybSB0 byB0c3ZlY3RvciIpOwogREFUQShpbnNlcnQgT0lEID0gMzc1MCAoICB0b190c3F1ZXJ5CQlQR05T UCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAxIDAgMzYxNSAiMjUiIF9udWxsXyBf bnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gdG9fdHNxdWVyeSBfbnVsbF8gX251bGxfIF9udWxs XyApKTsKQEAgLTQ5NzQsNiArNDk3Niw4IEBAIERBVEEoaW5zZXJ0IE9JRCA9IDM3NTEgKCAgcGxh aW50b190c3F1ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzCiBERVND UigidHJhbnNmb3JtIHRvIHRzcXVlcnkiKTsKIERBVEEoaW5zZXJ0IE9JRCA9IDUwMDEgKCAgcGhy YXNldG9fdHNxdWVyeQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAxIDAg MzYxNSAiMjUiIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gcGhyYXNldG9fdHNx dWVyeSBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKIERFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVy eSIpOworREFUQShpbnNlcnQgT0lEID0gODg5MCAoICB3ZWJzZWFyY2hfdG9fdHNxdWVyeQlQR05T UCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAxIDAgMzYxNSAiMjUiIF9udWxsXyBf bnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gd2Vic2VhcmNoX3RvX3RzcXVlcnkgX251bGxfIF9u dWxsXyBfbnVsbF8gKSk7CitERVNDUigidHJhbnNmb3JtIHRvIHRzcXVlcnkiKTsKIERBVEEoaW5z ZXJ0IE9JRCA9IDQyMDkgKCAgdG9fdHN2ZWN0b3IJCVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBm IGYgZiB0IGYgcyBzIDEgMCAzNjE0ICIzODAyIiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8g X251bGxfIGpzb25iX3RvX3RzdmVjdG9yIF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1Io InRyYW5zZm9ybSBqc29uYiB0byB0c3ZlY3RvciIpOwogREFUQShpbnNlcnQgT0lEID0gNDIxMCAo ICB0b190c3ZlY3RvcgkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBzIHMgMSAw IDM2MTQgIjExNCIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBqc29uX3RvX3Rz dmVjdG9yIF9udWxsXyBfbnVsbF8gX251bGxfICkpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dHNlYXJjaC90c191dGlscy5oIGIvc3JjL2luY2x1ZGUvdHNlYXJjaC90c191dGlscy5oCmluZGV4 IGY4ZGRjZTVlY2IuLjczZTk2OWZlOWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3RzZWFyY2gv dHNfdXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS90c2VhcmNoL3RzX3V0aWxzLmgKQEAgLTI1LDkg KzI1LDExIEBACiBzdHJ1Y3QgVFNWZWN0b3JQYXJzZVN0YXRlRGF0YTsJLyogb3BhcXVlIHN0cnVj dCBpbiB0c3ZlY3Rvcl9wYXJzZXIuYyAqLwogdHlwZWRlZiBzdHJ1Y3QgVFNWZWN0b3JQYXJzZVN0 YXRlRGF0YSAqVFNWZWN0b3JQYXJzZVN0YXRlOwogCi1leHRlcm4gVFNWZWN0b3JQYXJzZVN0YXRl IGluaXRfdHN2ZWN0b3JfcGFyc2VyKGNoYXIgKmlucHV0LAotCQkJCQkgYm9vbCBvcHJpc2RlbGlt LAotCQkJCQkgYm9vbCBpc190c3F1ZXJ5KTsKKyNkZWZpbmUgUF9UU1ZfT1BSX0lTX0RFTElNCSgx IDw8IDApCisjZGVmaW5lIFBfVFNWX0lTX1RTUVVFUlkJKDEgPDwgMSkKKyNkZWZpbmUgUF9UU1Zf SVNfV0VCCQkoMSA8PCAyKQorCitleHRlcm4gVFNWZWN0b3JQYXJzZVN0YXRlIGluaXRfdHN2ZWN0 b3JfcGFyc2VyKGNoYXIgKmlucHV0LCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgcmVzZXRfdHN2 ZWN0b3JfcGFyc2VyKFRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZSwgY2hhciAqaW5wdXQpOwogZXh0 ZXJuIGJvb2wgZ2V0dG9rZW5fdHN2ZWN0b3IoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlLAogCQkJ CSAgY2hhciAqKnRva2VuLCBpbnQgKmxlbiwKQEAgLTM1LDYgKzM3LDE2IEBAIGV4dGVybiBib29s IGdldHRva2VuX3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZSwKIAkJCQkgIGNoYXIg KiplbmRwdHIpOwogZXh0ZXJuIHZvaWQgY2xvc2VfdHN2ZWN0b3JfcGFyc2VyKFRTVmVjdG9yUGFy c2VTdGF0ZSBzdGF0ZSk7CiAKKy8qIHBocmFzZSBvcGVyYXRvciBiZWdpbnMgd2l0aCAnPCcgKi8K KyNkZWZpbmUgSVNPUEVSQVRPUih4KSBcCisJKCBwZ19tYmxlbih4KSA9PSAxICYmICggKih4KSA9 PSAnIScgfHwJXAorCQkJCQkJCSooeCkgPT0gJyYnIHx8CVwKKwkJCQkJCQkqKHgpID09ICd8JyB8 fAlcCisJCQkJCQkJKih4KSA9PSAnKCcgfHwJXAorCQkJCQkJCSooeCkgPT0gJyknIHx8CVwKKwkJ CQkJCQkqKHgpID09ICc8JwkJXAorCQkJCQkJICApICkKKwogLyogcGFyc2VfdHNxdWVyeSAqLwog CiBzdHJ1Y3QgVFNRdWVyeVBhcnNlclN0YXRlRGF0YTsJLyogcHJpdmF0ZSBpbiBiYWNrZW5kL3V0 aWxzL2FkdC90c3F1ZXJ5LmMgKi8KQEAgLTQ2LDkgKzU4LDEzIEBAIHR5cGVkZWYgdm9pZCAoKlB1 c2hGdW5jdGlvbikgKERhdHVtIG9wYXF1ZSwgVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCQkJ CQkJCQkJCQkJCSAqIFF1ZXJ5T3BlcmFuZCBzdHJ1Y3QgKi8KIAkJCQkJCQkgIGJvb2wgcHJlZml4 KTsKIAorI2RlZmluZSBQX1RTUV9QTEFJTgkJKDEgPDwgMCkKKyNkZWZpbmUgUF9UU1FfV0VCCQko MSA8PCAxKQorCiBleHRlcm4gVFNRdWVyeSBwYXJzZV90c3F1ZXJ5KGNoYXIgKmJ1ZiwKLQkJCSAg UHVzaEZ1bmN0aW9uIHB1c2h2YWwsCi0JCQkgIERhdHVtIG9wYXF1ZSwgYm9vbCBpc3BsYWluKTsK KwkJCQkJCQkgUHVzaEZ1bmN0aW9uIHB1c2h2YWwsCisJCQkJCQkJIERhdHVtIG9wYXF1ZSwKKwkJ CQkJCQkgaW50IGZsYWdzKTsKIAogLyogRnVuY3Rpb25zIGZvciB1c2UgYnkgUHVzaEZ1bmN0aW9u IGltcGxlbWVudGF0aW9ucyAqLwogZXh0ZXJuIHZvaWQgcHVzaFZhbHVlKFRTUXVlcnlQYXJzZXJT dGF0ZSBzdGF0ZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHNlYXJj aC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RzZWFyY2gub3V0CmluZGV4IGQ2M2Zi MTJmMWQuLjM3ODI1YTExMzAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dHNlYXJjaC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90c2VhcmNoLm91dApA QCAtMTY3MiwzICsxNjcyLDQzMiBAQCBzZWxlY3QgKiBmcm9tIHBocmFzZV9pbmRleF90ZXN0IHdo ZXJlIGZ0cyBAQCBwaHJhc2V0b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2ZhdCBjYQogKDEgcm93KQog CiBzZXQgZW5hYmxlX3NlcXNjYW4gPSBvbjsKKy0tIHRlc3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkg ZnVuY3Rpb24KK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ0kgaGF2ZSBh IGZhdDoqQUJDRCBjYXQnKTsKKyAgICAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg J2knICYgJ2hhdmUnICYgJ2EnICYgJ2ZhdCcgJiAnYWJjZCcgJiAnY2F0JworKDEgcm93KQorCitz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdvcmFuZ2U6KipBQUJCQ0NERCcp OworIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ29y YW5nZScgJiAnYWFiYmNjZGQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnc2ltcGxlJywgJ2ZhdDpBIWNhdDpCfHJhdDpDPCcpOworICAgICAgICAgIHdlYnNlYXJjaF90 b190c3F1ZXJ5ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgJ2ZhdCcgJiAnYScgJiAnY2F0JyAmICdiJyAmICdyYXQnICYgJ2MnCisoMSByb3cp CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdDpBIDogY2F0OkIn KTsKKyAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgJ2ZhdCcgJiAnYScgJiAnY2F0JyAmICdiJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQqcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVl cnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgJiAncmF0JworKDEgcm93KQorCitz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQtcmF0Jyk7CisgICB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQt cmF0JyAmICdmYXQnICYgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnZmF0X3JhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdmYXQnICYgJ3JhdCcKKygxIHJvdykKKworLS0gd2VpZ2h0cyBh cmUgY29tcGxldGVseSBpZ25vcmVkCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBs ZScsICdhYmMgOiBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnc2ltcGxlJywgJ2FiYzpkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2E6OjpiJyk7Cisgd2Vic2VhcmNoX3RvX3Rz cXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2EnICYgJ2InCisoMSByb3cpCisKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYzpkJyk7Cisgd2Vic2VhcmNo X3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAnZCcKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnOicpOworTk9USUNF OiAgdGV4dC1zZWFyY2ggcXVlcnkgY29udGFpbnMgb25seSBzdG9wIHdvcmRzIG9yIGRvZXNuJ3Qg Y29udGFpbiBsZXhlbWVzLCBpZ25vcmVkCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIHRoZXNlIG9wZXJhdG9ycyBhcmUgaWdu b3JlZAorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjICYgZGVmJyk7 Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycg JiAnZGVmJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICdhYmMgfCBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJ2FiYyA8LT4gZGVmJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAnZGVmJworKDEgcm93KQorCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhYmMgKHBnIG9yIGNsYXNzKScpOworICB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAm ICdwZycgfCAnY2xhc3MnCisoMSByb3cpCisKKy0tIE5PVCBpcyBpZ25vcmVkIGluIHF1b3Rlcwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ015IGJyYW5kIG5ldyBzbWFy dHBob25lJyk7CisgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgJ2JyYW5kJyAmICduZXcnICYgJ3NtYXJ0cGhvbicKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ015IGJyYW5kICJu ZXcgc21hcnRwaG9uZSInKTsKKyAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2JyYW5kJyAmICduZXcnIDwtPiAnc21h cnRwaG9uJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gn LCAnTXkgYnJhbmQgIm5ldyAtc21hcnRwaG9uZSInKTsKKyAgICAgIHdlYnNlYXJjaF90b190c3F1 ZXJ5ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2JyYW5kJyAm ICduZXcnIDwtPiAnc21hcnRwaG9uJworKDEgcm93KQorCistLSB0ZXN0IE9SIG9wZXJhdG9yCitz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgb3IgcmF0Jyk7Cisgd2Vi c2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2NhdCcgfCAncmF0 JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQg T1IgcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgJ2NhdCcgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J3NpbXBsZScsICdjYXQgIk9SIiByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAnY2F0JyAmICdvcicgJiAncmF0JworKDEgcm93KQorCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgT1InKTsKKyB3ZWJzZWFyY2hf dG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnY2F0JyAmICdvcicKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnT1IgcmF0Jyk7Cisg d2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ29yJyAmICdy YXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJyJm YXQgY2F0IE9SIHJhdCInKTsKKyAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgPC0+ICdjYXQnIDwt PiAnb3InIDwtPiAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J3NpbXBsZScsICdmYXQgKGNhdCBPUiByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnICYgJ2NhdCcgfCAncmF0JworKDEgcm93KQor CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdvciBPUiBvcicpOworIHdl YnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdvcicgfCAnb3In CisoMSByb3cpCisKKy0tIE9SIGlzIGFuIG9wZXJhdG9yIGhlcmUgLi4uCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICciZmF0IGNhdCJvciJmYXQgcmF0IicpOworICAgICAg IHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgJ2ZhdCcgPC0+ICdjYXQnIHwgJ2ZhdCcgPC0+ICdyYXQnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcihyYXQnKTsKKyB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyB8ICdy YXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2Zh dCBvcilyYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAnZmF0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnc2ltcGxlJywgJ2ZhdCBvciZyYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcnxyYXQnKTsKKyB3ZWJzZWFyY2hfdG9f dHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyB8ICdyYXQnCisoMSByb3cp CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciFyYXQnKTsK KyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyB8 ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywg J2ZhdCBvcjxyYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAnZmF0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJ2ZhdCBvcj5yYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciAnKTsKKyB3ZWJzZWFyY2hfdG9f dHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JworKDEgcm93KQorCistLSAu Li4gYnV0IG5vdCBoZXJlCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdh YmMgb3JhbmdlJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgJ2FiYycgJiAnb3JhbmdlJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ3NpbXBsZScsICdhYmMgb3LRgtC10YHRgicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ29y0YLQtdGB0YInCisoMSByb3cp CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBPUjEyMzQnKTsK KyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAm ICdvcjEyMzQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxl JywgJ2FiYyBvci1hYmMnKTsKKyAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAnb3ItYWJjJyAmICdvcicg JiAnYWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICdhYmMgT1JfYWJjJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgJ2FiYycgJiAnb3InICYgJ2FiYycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9yJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAnb3InCisoMSByb3cpCisKKy0tIHRl c3QgcXVvdGVzCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnInBnX2Ns YXNzIHBnJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAncGcnICYgJ2NsYXNzJyAmICdwZycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdlbmdsaXNoJywgJ3BnX2NsYXNzIHBnIicpOworIHdlYnNlYXJjaF90b190c3F1 ZXJ5ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ3BnJyAmICdjbGFzcycgJiAncGcnCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICcicGdfY2xh c3MgcGciJyk7CisgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAoICdwZycgJiAnY2xhc3MnICkgPC0+ICdwZycKKygxIHJvdykKKwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2FiYyAicGdfY2xhc3MgcGci Jyk7CisgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAoICdwZycgJiAnY2xhc3MnICkgPC0+ ICdwZycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywg JyJwZ19jbGFzcyBwZyIgZGVmJyk7CisgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKCAncGcnICYgJ2Ns YXNzJyApIDwtPiAncGcnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdlbmdsaXNoJywgJ2FiYyAicGcgcGdfY2xhc3MgcGciIGRlZicpOworICAgICAgICAg ICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdw ZycgPC0+ICggJ3BnJyAmICdjbGFzcycgKSA8LT4gJ3BnJyAmICdkZWYnCisoMSByb3cpCisKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICcgb3IgInBnIHBnX2NsYXNzIHBn IiBvciAnKTsKKyAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdwZycgPC0+ICggJ3BnJyAmICdjbGFz cycgKSA8LT4gJ3BnJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2Vu Z2xpc2gnLCAnIiJwZyBwZ19jbGFzcyBwZyIiJyk7CisgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5 ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdwZycgJiAncGcnICYgJ2Ns YXNzJyAmICdwZycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmds aXNoJywgJ2FiYyAiIiIiIiBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdjYXQgLSJmYXQgcmF0IicpOworICAgICB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnY2F0 JyAmICEoICdmYXQnIDwtPiAncmF0JyApCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnZW5nbGlzaCcsICdjYXQgLSJmYXQgcmF0IiBjaGVlc2UnKTsKKyAgICAgICAgICB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAnY2F0JyAmICEoICdmYXQnIDwtPiAncmF0JyApICYgJ2NoZWVzJwor KDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYWJjICJk ZWYgLSInKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn ZW5nbGlzaCcsICdhYmMgImRlZiA6IicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJBIGZhdCBjYXQiIGhhcyBqdXN0IGVhdGVuIGEg LXJhdC4nKTsKKyAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgPC0+ICdjYXQnICYgJ2VhdGVuJyAm ICEncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gn LCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgZWF0ZW4gT1IgIXJhdC4nKTsKKyAgICAgICB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICdmYXQnIDwtPiAnY2F0JyAmICdlYXRlbicgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgKCtl YXRlbiBPUiAtcmF0KScpOworICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcgJiAn ZWF0ZW4nIHwgISdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn ZW5nbGlzaCcsICd0aGlzIGlzIC0tLS1maW5lJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgISEhISdmaW5lJworKDEgcm93KQorCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnKCgpKSApKSkpIHRoaXMgfHx8IGlzICYmIC1m aW5lLCAiZGVhciBmcmllbmQiIE9SIGdvb2QnKTsKKyAgICAgICAgICB3ZWJzZWFyY2hfdG9fdHNx dWVyeSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAhJ2ZpbmUnICYgJ2RlYXInIDwtPiAnZnJpZW5kJyB8ICdnb29kJworKDEgcm93KQorCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYW4gb2xkIDwtPiBjYXQgIiBpcyBm aW5lICYmJiB0b28nKTsKKyAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgJ29sZCcgJiAnY2F0JyAmICdmaW5lJworKDEgcm93KQorCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgdGhlIiBPUiBqdXN0IG9uJyk7CitOT1RJ Q0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IHN0b3Agd29yZHMgb3IgZG9lc24n dCBjb250YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdydXNzaWFuJywgJyLRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwIiDRgdGK0LXQu9CwINC6 0YDRi9GB0YMnKTsKKyAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICfRgtC+0LvRgdGCJyA8LT4gJ9C6 0L7RiNC6JyAmICfRgdGK0LXQuycgJiAn0LrRgNGL0YEnCisoMSByb3cpCisKK3NlbGVjdCB0b190 c3ZlY3RvcigncnVzc2lhbicsICfRgdGK0LXQu9CwINGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAg 0LrRgNGL0YHRgycpIEBACit3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC7 0YHRgtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisgP2NvbHVtbj8g CistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitzZWxlY3QgdG9fdHN2ZWN0b3IoJ3J1c3NpYW4n LCAn0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDRgdC10YDQsNGPINC60L7RiNC60LAg0LrRgNGL 0YHRgycpIEBACit3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC70YHRgtCw 0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgZgorKDEgcm93KQorCistLSBjYXNlcyBoYW5kbGVkIGJ5IGdldHRva2VuX3RzdmVj dG9yKCkKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnJycnKTsKK05PVElDRTogIHRleHQt c2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vzbid0IGNvbnRhaW4g bGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJycnYWJj JycnJ2RlZicnJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgJ2FiYycgJiAnZGVmJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVl cnkoJ1xhYmMnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAnYWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ1wnKTsK K05PVElDRTogIHRleHQtc2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBk b2Vzbid0IGNvbnRhaW4gbGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC90c2VhcmNoLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RzZWFyY2gu c3FsCmluZGV4IDFjODUyMGIzZTkuLmYyOTlhNWQzMmIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3RzZWFyY2guc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RzZWFyY2gu c3FsCkBAIC01MzksMyArNTM5LDk4IEBAIGNyZWF0ZSBpbmRleCBwaHJhc2VfaW5kZXhfdGVzdF9p ZHggb24gcGhyYXNlX2luZGV4X3Rlc3QgdXNpbmcgZ2luKGZ0cyk7CiBzZXQgZW5hYmxlX3NlcXNj YW4gPSBvZmY7CiBzZWxlY3QgKiBmcm9tIHBocmFzZV9pbmRleF90ZXN0IHdoZXJlIGZ0cyBAQCBw aHJhc2V0b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2ZhdCBjYXQnKTsKIHNldCBlbmFibGVfc2Vxc2Nh biA9IG9uOworCistLSB0ZXN0IHdlYnNlYXJjaF90b190c3F1ZXJ5IGZ1bmN0aW9uCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdJIGhhdmUgYSBmYXQ6KkFCQ0QgY2F0Jyk7 CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdvcmFuZ2U6KipBQUJCQ0NE RCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0OkEhY2F0OkJ8 cmF0OkM8Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQ6QSA6 IGNhdDpCJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCpy YXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdC1yYXQnKTsK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdF9yYXQnKTsKKworLS0g d2VpZ2h0cyBhcmUgY29tcGxldGVseSBpZ25vcmVkCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVl cnkoJ3NpbXBsZScsICdhYmMgOiBkZWYnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2FiYzpkZWYnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxl JywgJ2E6OjpiJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhYmM6 ZCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnOicpOworCistLSB0 aGVzZSBvcGVyYXRvcnMgYXJlIGlnbm9yZWQKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2FiYyAmIGRlZicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1w bGUnLCAnYWJjIHwgZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICdhYmMgPC0+IGRlZicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn YWJjIChwZyBvciBjbGFzcyknKTsKKworLS0gTk9UIGlzIGlnbm9yZWQgaW4gcXVvdGVzCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnTXkgYnJhbmQgbmV3IHNtYXJ0cGhv bmUnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdNeSBicmFuZCAi bmV3IHNtYXJ0cGhvbmUiJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gn LCAnTXkgYnJhbmQgIm5ldyAtc21hcnRwaG9uZSInKTsKKworLS0gdGVzdCBPUiBvcGVyYXRvcgor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0IG9yIHJhdCcpOworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0IE9SIHJhdCcpOworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0ICJPUiIgcmF0Jyk7CitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgT1InKTsKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ09SIHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnImZhdCBjYXQgT1IgcmF0IicpOworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IChjYXQgT1IgcmF0Jyk7CitzZWxlY3Qgd2Vic2VhcmNo X3RvX3RzcXVlcnkoJ3NpbXBsZScsICdvciBPUiBvcicpOworCistLSBPUiBpcyBhbiBvcGVyYXRv ciBoZXJlIC4uLgorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnImZhdCBj YXQib3IiZmF0IHJhdCInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywg J2ZhdCBvcihyYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2Zh dCBvcilyYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBv ciZyYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcnxy YXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciFyYXQn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcjxyYXQnKTsK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcj5yYXQnKTsKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciAnKTsKKworLS0gLi4u IGJ1dCBub3QgaGVyZQorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJj IG9yYW5nZScpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9y 0YLQtdGB0YInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBP UjEyMzQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvci1h YmMnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBPUl9hYmMn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvcicpOworCist LSB0ZXN0IHF1b3Rlcworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJw Z19jbGFzcyBwZycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ3Bn X2NsYXNzIHBnIicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJw Z19jbGFzcyBwZyInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdh YmMgInBnX2NsYXNzIHBnIicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNo JywgJyJwZ19jbGFzcyBwZyIgZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2Vu Z2xpc2gnLCAnYWJjICJwZyBwZ19jbGFzcyBwZyIgZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIG9yICJwZyBwZ19jbGFzcyBwZyIgb3IgJyk7CitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIiJwZyBwZ19jbGFzcyBwZyIiJyk7Citz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYWJjICIiIiIiIGRlZicpOwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2NhdCAtImZhdCByYXQiJyk7 CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnY2F0IC0iZmF0IHJhdCIg Y2hlZXNlJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYWJjICJk ZWYgLSInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdhYmMgImRl ZiA6IicpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0 IGNhdCIgaGFzIGp1c3QgZWF0ZW4gYSAtcmF0LicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdlbmdsaXNoJywgJyJBIGZhdCBjYXQiIGhhcyBqdXN0IGVhdGVuIE9SICFyYXQuJyk7Citz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1 c3QgKCtlYXRlbiBPUiAtcmF0KScpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2Vu Z2xpc2gnLCAndGhpcyBpcyAtLS0tZmluZScpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdlbmdsaXNoJywgJygoKSkgKSkpKSB0aGlzIHx8fCBpcyAmJiAtZmluZSwgImRlYXIgZnJpZW5k IiBPUiBnb29kJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYW4g b2xkIDwtPiBjYXQgIiBpcyBmaW5lICYmJiB0b28nKTsKKworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdlbmdsaXNoJywgJyJBIHRoZSIgT1IganVzdCBvbicpOworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdydXNzaWFuJywgJyLRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwIiDRgdGK 0LXQu9CwINC60YDRi9GB0YMnKTsKKworc2VsZWN0IHRvX3RzdmVjdG9yKCdydXNzaWFuJywgJ9GB 0YrQtdC70LAg0YLQvtC70YHRgtCw0Y8g0LrQvtGI0LrQsCDQutGA0YvRgdGDJykgQEAKK3dlYnNl YXJjaF90b190c3F1ZXJ5KCdydXNzaWFuJywgJyLRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwIiDR gdGK0LXQu9CwINC60YDRi9GB0YMnKTsKKworc2VsZWN0IHRvX3RzdmVjdG9yKCdydXNzaWFuJywg J9GB0YrQtdC70LAg0YLQvtC70YHRgtCw0Y8g0YHQtdGA0LDRjyDQutC+0YjQutCwINC60YDRi9GB 0YMnKSBAQAord2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGP INC60L7RiNC60LAiINGB0YrQtdC70LAg0LrRgNGL0YHRgycpOworCistLSBjYXNlcyBoYW5kbGVk IGJ5IGdldHRva2VuX3RzdmVjdG9yKCkKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnJycn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnJydhYmMnJycnZGVmJycnKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnXGFiYycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdcJyk7Cg== --=_b2d870cfa337c928639a8df02df58e5f--