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 1f0x6N-0001zq-5z for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Mar 2018 22:30:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f0x6L-0002k8-L3 for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Mar 2018 22:29:57 +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 1f0x6K-0002jG-S6 for pgsql-hackers@lists.postgresql.org; Tue, 27 Mar 2018 22:29:57 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f0x6F-0002Au-RY for pgsql-hackers@lists.postgresql.org; Tue, 27 Mar 2018 22:29:55 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 8EC5B21C274B; Wed, 28 Mar 2018 01:29:48 +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 4525721C2737; Wed, 28 Mar 2018 01:29:48 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1522189788; bh=yujD+/EHUC80i4WN4CNRAIDgFcqQSohidOwWYG2CDvk=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=akXI8pJ6/FCZy3lXWC5aLztcJG1MU9z4u4V+bUChUSYW1NJJGcTO7SopHW0GB3CB8 lXnpyuisNJ4nJXUpOTIQZPQ1xn2jgvsabv2Dvv5DiZ8rB6nhz8mMPF/G7aNdzfaqTD GN6bHet+3VSJKTBWqRnWN965pfpKXrQOyIrgtcHI= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_2db345fa0d7f2b03818dd6376d9d8c11" Date: Wed, 28 Mar 2018 01:29:48 +0300 From: Dmitry Ivanov To: Thomas Munro Cc: Aleksandr Parfenov , David Steele , Aleksander Alekseev , PostgreSQL Hackers Subject: Re: new function for tsquery creartion Organization: Postgres Professional In-Reply-To: <6754a224654a4f0339195b83b133d551@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> Message-ID: <9153fb21831d0ba7c832960f37df2688@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 --=_2db345fa0d7f2b03818dd6376d9d8c11 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi everyone, I'd like to share some intermediate results. Here's what has changed: 1. OR operator is now case-insensitive. Moreover, trailing whitespace is no longer used to identify it: select websearch_to_tsquery('simple', 'abc or'); websearch_to_tsquery ---------------------- 'abc' & 'or' (1 row) select websearch_to_tsquery('simple', 'abc or(def)'); websearch_to_tsquery ---------------------- 'abc' | 'def' (1 row) select websearch_to_tsquery('simple', 'abc or!def'); websearch_to_tsquery ---------------------- 'abc' | 'def' (1 row) 2. AROUND(N) has been dropped. I hope that operator will allow us to implement it with a few lines of code. 3. websearch_to_tsquery() now tolerates various syntax errors, for instance: Misused operators: 'abc &' '| abc' '<- def' Missing parentheses: 'abc & (def <-> (cat or rat' Other sorts of nonsense: 'abc &--|| def' => 'abc' & !!'def' 'abc:def' => 'abc':D & 'ef' This, however, doesn't mean that the result will always be adequate (who would have thought?). Overall, current implementation follows the GIGO principle. In theory, this would allow us to use user-supplied websearch strings (but see gotchas), even if they don't make much sense. Better then nothing, right? 4. A small refactoring: I've replaced all WAIT* macros with a enum for better debugging (names look much nicer in GDB). Hope this is acceptable. 5. Finally, I've added a few more comments and tests. I haven't checked the code coverage, though. A few gotchas: I haven't touched gettoken_tsvector() yet. As a result, the following queries produce errors: select websearch_to_tsquery('simple', ''''); ERROR: syntax error in tsquery: "'" select websearch_to_tsquery('simple', '\'); ERROR: there is no escaped character: "\" Maybe there's more. The question is: should we fix those, or it's fine as it is? I don't have a strong opinion about this. -- Dmitry Ivanov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_2db345fa0d7f2b03818dd6376d9d8c11 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=websearch_to_tsquery_v1.diff Content-Disposition: attachment; filename=websearch_to_tsquery_v1.diff; size=28788 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3RzZWFyY2gvdG9fdHNhbnkuYyBiL3NyYy9iYWNrZW5k L3RzZWFyY2gvdG9fdHNhbnkuYwppbmRleCBlYTU5NDdhM2E4Li5iZGYwNTIzNmNmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC90c2VhcmNoL3RvX3RzYW55LmMKKysrIGIvc3JjL2JhY2tlbmQvdHNl YXJjaC90b190c2FueS5jCkBAIC0zOTAsNyArMzkwLDggQEAgYWRkX3RvX3RzdmVjdG9yKHZvaWQg Kl9zdGF0ZSwgY2hhciAqZWxlbV92YWx1ZSwgaW50IGVsZW1fbGVuKQogICogYW5kIGRpZmZlcmVu dCB2YXJpYW50cyBhcmUgT1JlZCB0b2dldGhlci4KICAqLwogc3RhdGljIHZvaWQKLXB1c2h2YWxf bW9ycGgoRGF0dW0gb3BhcXVlLCBUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsIGNoYXIgKnN0cnZh bCwgaW50IGxlbnZhbCwgaW50MTYgd2VpZ2h0LCBib29sIHByZWZpeCkKK3B1c2h2YWxfbW9ycGgo RGF0dW0gb3BhcXVlLCBUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsIGNoYXIgKnN0cnZhbCwgaW50 IGxlbnZhbCwKKwkJCSAgaW50MTYgd2VpZ2h0LCBib29sIHByZWZpeCwgYm9vbCBmb3JjZV9waHJh c2UpCiB7CiAJaW50MzIJCWNvdW50ID0gMDsKIAlQYXJzZWRUZXh0CXByczsKQEAgLTQyMyw3ICs0 MjQsMTIgQEAgcHVzaHZhbF9tb3JwaChEYXR1bSBvcGFxdWUsIFRTUXVlcnlQYXJzZXJTdGF0ZSBz dGF0ZSwgY2hhciAqc3RydmFsLCBpbnQgbGVudmFsLAogCQkJCQkvKiBwdXQgcGxhY2Vob2xkZXJz IGZvciBlYWNoIG1pc3Npbmcgc3RvcCB3b3JkICovCiAJCQkJCXB1c2hTdG9wKHN0YXRlKTsKIAkJ CQkJaWYgKGNudHBvcykKLQkJCQkJCXB1c2hPcGVyYXRvcihzdGF0ZSwgZGF0YS0+cW9wZXJhdG9y LCAxKTsKKwkJCQkJeworCQkJCQkJaWYgKGZvcmNlX3BocmFzZSkKKwkJCQkJCQlwdXNoT3BlcmF0 b3Ioc3RhdGUsIE9QX1BIUkFTRSwgMSk7CisJCQkJCQllbHNlCisJCQkJCQkJcHVzaE9wZXJhdG9y KHN0YXRlLCBkYXRhLT5xb3BlcmF0b3IsIDEpOworCQkJCQl9CiAJCQkJCWNudHBvcysrOwogCQkJ CQlwb3MrKzsKIAkJCQl9CkBAIC00NjQsNyArNDcwLDEwIEBAIHB1c2h2YWxfbW9ycGgoRGF0dW0g b3BhcXVlLCBUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsIGNoYXIgKnN0cnZhbCwgaW50IGxlbnZh bCwKIAkJCWlmIChjbnRwb3MpCiAJCQl7CiAJCQkJLyogZGlzdGFuY2UgbWF5IGJlIHVzZWZ1bCAq LwotCQkJCXB1c2hPcGVyYXRvcihzdGF0ZSwgZGF0YS0+cW9wZXJhdG9yLCAxKTsKKwkJCQlpZiAo Zm9yY2VfcGhyYXNlKQorCQkJCQlwdXNoT3BlcmF0b3Ioc3RhdGUsIE9QX1BIUkFTRSwgMSk7CisJ CQkJZWxzZQorCQkJCQlwdXNoT3BlcmF0b3Ioc3RhdGUsIGRhdGEtPnFvcGVyYXRvciwgMSk7CiAJ CQl9CiAKIAkJCWNudHBvcysrOwpAQCAtNDkwLDYgKzQ5OSw3IEBAIHRvX3RzcXVlcnlfYnlpZChQ R19GVU5DVElPTl9BUkdTKQogCXF1ZXJ5ID0gcGFyc2VfdHNxdWVyeSh0ZXh0X3RvX2NzdHJpbmco aW4pLAogCQkJCQkJICBwdXNodmFsX21vcnBoLAogCQkJCQkJICBQb2ludGVyR2V0RGF0dW0oJmRh dGEpLAorCQkJCQkJICBmYWxzZSwKIAkJCQkJCSAgZmFsc2UpOwogCiAJUEdfUkVUVVJOX1RTUVVF UlkocXVlcnkpOwpAQCAtNTIwLDcgKzUzMCw4IEBAIHBsYWludG9fdHNxdWVyeV9ieWlkKFBHX0ZV TkNUSU9OX0FSR1MpCiAJcXVlcnkgPSBwYXJzZV90c3F1ZXJ5KHRleHRfdG9fY3N0cmluZyhpbiks CiAJCQkJCQkgIHB1c2h2YWxfbW9ycGgsCiAJCQkJCQkgIFBvaW50ZXJHZXREYXR1bSgmZGF0YSks Ci0JCQkJCQkgIHRydWUpOworCQkJCQkJICB0cnVlLAorCQkJCQkJICBmYWxzZSk7CiAKIAlQR19S RVRVUk5fUE9JTlRFUihxdWVyeSk7CiB9CkBAIC01NTEsNyArNTYyLDggQEAgcGhyYXNldG9fdHNx dWVyeV9ieWlkKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcXVlcnkgPSBwYXJzZV90c3F1ZXJ5KHRleHRf dG9fY3N0cmluZyhpbiksCiAJCQkJCQkgIHB1c2h2YWxfbW9ycGgsCiAJCQkJCQkgIFBvaW50ZXJH ZXREYXR1bSgmZGF0YSksCi0JCQkJCQkgIHRydWUpOworCQkJCQkJICB0cnVlLAorCQkJCQkJICBm YWxzZSk7CiAKIAlQR19SRVRVUk5fVFNRVUVSWShxdWVyeSk7CiB9CkBAIC01NjcsMyArNTc5LDM2 IEBAIHBocmFzZXRvX3RzcXVlcnkoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCQkJCQlPYmplY3RJ ZEdldERhdHVtKGNmZ0lkKSwKIAkJCQkJCQkJCQlQb2ludGVyR2V0RGF0dW0oaW4pKSk7CiB9CisK K0RhdHVtCit3ZWJzZWFyY2hfdG9fdHNxdWVyeV9ieWlkKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ dGV4dAkgICAqaW4gPSBQR19HRVRBUkdfVEVYVF9QUCgxKTsKKwlNb3JwaE9wYXF1ZQlkYXRhOwor CVRTUXVlcnkJCXF1ZXJ5ID0gTlVMTDsKKworCWRhdGEuY2ZnX2lkID0gUEdfR0VUQVJHX09JRCgw KTsKKworCWRhdGEucW9wZXJhdG9yID0gT1BfQU5EOworCisJcXVlcnkgPSBwYXJzZV90c3F1ZXJ5 KHRleHRfdG9fY3N0cmluZyhpbiksCisJCQkJCQkgIHB1c2h2YWxfbW9ycGgsCisJCQkJCQkgIFBv aW50ZXJHZXREYXR1bSgmZGF0YSksCisJCQkJCQkgIGZhbHNlLAorCQkJCQkJICB0cnVlKTsKKwor CVBHX1JFVFVSTl9UU1FVRVJZKHF1ZXJ5KTsKK30KKworRGF0dW0KK3dlYnNlYXJjaF90b190c3F1 ZXJ5KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqaW4gPSBQR19HRVRBUkdfVEVYVF9Q UCgwKTsKKwlPaWQJCQljZmdJZDsKKworCWNmZ0lkID0gZ2V0VFNDdXJyZW50Q29uZmlnKHRydWUp OworCVBHX1JFVFVSTl9EQVRVTShEaXJlY3RGdW5jdGlvbkNhbGwyKHdlYnNlYXJjaF90b190c3F1 ZXJ5X2J5aWQsCisJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShjZmdJZCksCisJCQkJCQkJCQkJ UG9pbnRlckdldERhdHVtKGluKSkpOworCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvdHNxdWVyeS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzcXVlcnkuYwppbmRleCAx Y2NiZjc5MDMwLi40Yjc0NjBlNWI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv dHNxdWVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3F1ZXJ5LmMKQEAgLTMyLDEy ICszMiwyNCBAQCBjb25zdCBpbnQJdHNlYXJjaF9vcF9wcmlvcml0eVtPUF9DT1VOVF0gPQogCTMJ CQkJCQkJLyogT1BfUEhSQVNFICovCiB9OwogCisvKgorICogcGFyc2VyJ3Mgc3RhdGVzCisgKi8K K3R5cGVkZWYgZW51bQoreworCVdBSVRPUEVSQU5EID0gMSwKKwlXQUlUT1BFUkFUT1IgPSAyLAor CVdBSVRGSVJTVE9QRVJBTkQgPSAzLAorCVdBSVRTSU5HTEVPUEVSQU5EID0gNCwKKwlJTlFVT1RF UyA9IDUgLyogZm9yIHF1b3RlZCBwaHJhc2VzIGluIHdlYiBzZWFyY2ggKi8KK30gdHNfcGFyc2Vy c3RhdGU7CisKIHN0cnVjdCBUU1F1ZXJ5UGFyc2VyU3RhdGVEYXRhCiB7CiAJLyogU3RhdGUgZm9y IGdldHRva2VuX3F1ZXJ5ICovCiAJY2hhcgkgICAqYnVmZmVyOwkJCS8qIGVudGlyZSBzdHJpbmcg d2UgYXJlIHNjYW5uaW5nICovCiAJY2hhcgkgICAqYnVmOwkJCS8qIGN1cnJlbnQgc2NhbiBwb2lu dCAqLwotCWludAkJCXN0YXRlOworCXRzX3BhcnNlcnN0YXRlIHN0YXRlOwogCWludAkJCWNvdW50 OwkJCS8qIG5lc3RpbmcgY291bnQsIGluY3JlbWVudGVkIGJ5ICgsCiAJCQkJCQkJCSAqIGRlY3Jl bWVudGVkIGJ5ICkgKi8KIApAQCAtNTcsMTIgKzY5LDYgQEAgc3RydWN0IFRTUXVlcnlQYXJzZXJT dGF0ZURhdGEKIAlUU1ZlY3RvclBhcnNlU3RhdGUgdmFsc3RhdGU7CiB9OwogCi0vKiBwYXJzZXIn cyBzdGF0ZXMgKi8KLSNkZWZpbmUgV0FJVE9QRVJBTkQgMQotI2RlZmluZSBXQUlUT1BFUkFUT1IJ MgotI2RlZmluZSBXQUlURklSU1RPUEVSQU5EIDMKLSNkZWZpbmUgV0FJVFNJTkdMRU9QRVJBTkQg NAotCiAvKgogICogc3Vicm91dGluZSB0byBwYXJzZSB0aGUgbW9kaWZpZXJzICh3ZWlnaHQgYW5k IHByZWZpeCBmbGFnIGN1cnJlbnRseSkKICAqIHBhcnQsIGxpa2UgJzpBQionIG9mIGEgcXVlcnku CkBAIC0xOTcsNiArMjAzLDI1IEBAIGVycjoKIAlyZXR1cm4gYnVmOwogfQogCisvKgorICogUGFy c2UgT1Igb3BlcmF0b3IgdXNlZCBpbiB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgpLgorICovCitzdGF0 aWMgYm9vbAorcGFyc2Vfb3Jfb3BlcmF0b3IoY2hhciAqYnVmLCBpbnQgKmxlbikKK3sKKwlib29s IGlzX29yID0gKHRfaXNlcSgmYnVmWzBdLCAnbycpIHx8IHRfaXNlcSgmYnVmWzBdLCAnTycpKSAm JgorCQkJCSAodF9pc2VxKCZidWZbMV0sICdyJykgfHwgdF9pc2VxKCZidWZbMV0sICdSJykpICYm CisJCQkJCShidWZbMl0gIT0gJ1wwJyAmJgorCQkJCQkgIXRfaXNlcSgmYnVmWzJdLCAnLScpICYm CisJCQkJCSAhdF9pc2VxKCZidWZbMl0sICdfJykgJiYKKwkJCQkJICF0X2lzYWxwaGEoJmJ1Zlsy XSkgJiYKKwkJCQkJICF0X2lzZGlnaXQoJmJ1ZlsyXSkpOworCisJKmxlbiA9IDIgKyBwZ19tYmxl bigmYnVmWzJdKTsKKworCXJldHVybiBpc19vcjsKK30KKwogLyoKICAqIHRva2VuIHR5cGVzIGZv ciBwYXJzaW5nCiAgKi8KQEAgLTIyMCwxOSArMjQ1LDIyIEBAIHR5cGVkZWYgZW51bQogICovCiBz dGF0aWMgdHNfdG9rZW50eXBlCiBnZXR0b2tlbl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3Rh dGUsCi0JCQkgICBpbnQ4ICpvcGVyYXRvciwKLQkJCSAgIGludCAqbGVudmFsLCBjaGFyICoqc3Ry dmFsLCBpbnQxNiAqd2VpZ2h0LCBib29sICpwcmVmaXgpCisJCQkgICBpbnQ4ICpvcGVyYXRvciwg aW50ICpsZW52YWwsIGNoYXIgKipzdHJ2YWwsCisJCQkgICBpbnQxNiAqd2VpZ2h0LCBib29sICpw cmVmaXgsIGJvb2wgaXN3ZWIpCiB7CiAJKndlaWdodCA9IDA7CiAJKnByZWZpeCA9IGZhbHNlOwog CiAJd2hpbGUgKDEpCiAJeworCQlpbnQgb3BsZW4gPSAwOworCiAJCXN3aXRjaCAoc3RhdGUtPnN0 YXRlKQogCQl7CiAJCQljYXNlIFdBSVRGSVJTVE9QRVJBTkQ6CiAJCQljYXNlIFdBSVRPUEVSQU5E OgotCQkJCWlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJyEnKSkKKwkJCQlpZiAodF9pc2VxKHN0YXRl LT5idWYsICchJykgfHwKKwkJCQkJKGlzd2ViICYmIHRfaXNlcShzdGF0ZS0+YnVmLCAnLScpKSkK IAkJCQl7CiAJCQkJCShzdGF0ZS0+YnVmKSsrOyAvKiBjYW4gc2FmZWx5ICsrLCB0X2lzZXEgZ3Vh cmFudGVlIHRoYXQKIAkJCQkJCQkJCSAqIHBnX21ibGVuKCk9PTEgKi8KQEAgLTI0OSwxMSArMjc3 LDU1IEBAIGdldHRva2VuX3F1ZXJ5KFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwKIAkJCQl9CiAJ CQkJZWxzZSBpZiAodF9pc2VxKHN0YXRlLT5idWYsICc6JykpCiAJCQkJeworCQkJCQlpZiAoaXN3 ZWIpCisJCQkJCXsKKwkJCQkJCS8qIGl0IGRvZXNuJ3QgbWVhbiBhbnl0aGluZyAqLworCQkJCQkJ KHN0YXRlLT5idWYpKys7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCiAJCQkJCWVyZXBvcnQo RVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCQkJCSBl cnJtc2coInN5bnRheCBlcnJvciBpbiB0c3F1ZXJ5OiBcIiVzXCIiLAogCQkJCQkJCQkJc3RhdGUt PmJ1ZmZlcikpKTsKIAkJCQl9CisJCQkJZWxzZSBpZiAoaXN3ZWIgJiYgdF9pc2VxKHN0YXRlLT5i dWYsICcpJykpCisJCQkJeworCQkJCQlpZiAoc3RhdGUtPmNvdW50ID09IDApCisJCQkJCXsKKwkJ CQkJCS8qIHdlYiBzZWFyY2ggdG9sZXJhdGVzIHVzZWxlc3MgY2xvc2luZyBwYXJhbnRoZXNlcyAq LworCQkJCQkJKHN0YXRlLT5idWYpKys7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQko c3RhdGUtPmJ1ZikrKzsKKwkJCQkJc3RhdGUtPmNvdW50LS07CisJCQkJCXJldHVybiBQVF9DTE9T RTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoaXN3ZWIgJiYKKwkJCQkJCQkodF9pc2VxKHN0YXRlLT5i dWYsICcmJykgfHwKKwkJCQkJCQkgdF9pc2VxKHN0YXRlLT5idWYsICd8JykgfHwKKwkJCQkJCQkg dF9pc2VxKHN0YXRlLT5idWYsICc8JykpKQorCQkJCXsKKwkJCQkJLyogb3IgZWxzZSBnZXR0b2tl bl90c3ZlY3RvcigpIHdpbGwgcmFpc2UgYW4gZXJyb3IgKi8KKwkJCQkJKHN0YXRlLT5idWYpKys7 CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllbHNlIGlmIChpc3dlYiAmJiB0X2lzZXEoc3Rh dGUtPmJ1ZiwgJyInKSkKKwkJCQl7CisJCQkJCS8qIHF1b3RlZCB0ZXh0IHNob3VsZCBiZSBvcmRl cmVkICg8LT4pICovCisJCQkJCWNoYXIgKnF1b3RlID0gc3RyY2hyKHN0YXRlLT5idWYgKyAxLCAn IicpOworCQkJCQlpZiAocXVvdGUgPT0gTlVMTCkKKwkJCQkJeworCQkJCQkJLyogd2ViIHNlYXJj aCB0b2xlcmF0ZXMgbWlzc2luZyBxdW90ZXMgdG9vICovCisJCQkJCQlzdGF0ZS0+YnVmKys7CisJ CQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQkqc3RydmFsID0gc3RhdGUtPmJ1ZiArIDE7CisJ CQkJCSpsZW52YWwgPSBxdW90ZSAtICpzdHJ2YWw7CisJCQkJCXN0YXRlLT5idWYgPSBxdW90ZSAr IDE7CisJCQkJCXN0YXRlLT5zdGF0ZSA9IElOUVVPVEVTOworCQkJCQlyZXR1cm4gUFRfVkFMOwor CQkJCX0KIAkJCQllbHNlIGlmICghdF9pc3NwYWNlKHN0YXRlLT5idWYpKQogCQkJCXsKIAkJCQkJ LyoKQEAgLTI2OSw2ICszNDEsMTYgQEAgZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0YXRl IHN0YXRlLAogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKHN0YXRlLT5zdGF0ZSA9PSBXQUlURklSU1RP UEVSQU5EKQogCQkJCQkJcmV0dXJuIFBUX0VORDsKKwkJCQkJZWxzZSBpZiAoaXN3ZWIpCisJCQkJ CXsKKwkJCQkJCWlmIChzdGF0ZS0+Y291bnQgPiAwKQorCQkJCQkJCS8qIGRlY3JlbWVudCBwZXIg ZWFjaCBwYXJlbnRoZXNlcyBsZXZlbCAoc2VlIFBUX09QRU4pICovCisJCQkJCQkJc3RhdGUtPmNv dW50LS07CisJCQkJCQllbHNlCisJCQkJCQkJLyogZmluYWxseSwgd2UgaGF2ZSB0byBwcm92aWRl IGFuIG9wZXJhbmQgKi8KKwkJCQkJCQlwdXNoU3RvcChzdGF0ZSk7CisJCQkJCQlyZXR1cm4gUFRf RU5EOworCQkJCQl9CiAJCQkJCWVsc2UKIAkJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTI5MSwyNiArMzczLDYxIEBAIGdldHRv a2VuX3F1ZXJ5KFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwKIAkJCQkJKHN0YXRlLT5idWYpKys7 CiAJCQkJCXJldHVybiBQVF9PUFI7CiAJCQkJfQotCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+ YnVmLCAnPCcpKQorCQkJCWVsc2UgaWYgKGlzd2ViICYmIHBhcnNlX29yX29wZXJhdG9yKHN0YXRl LT5idWYsICZvcGxlbikpCiAJCQkJewogCQkJCQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFORDsK LQkJCQkJKm9wZXJhdG9yID0gT1BfUEhSQVNFOwotCQkJCQkvKiB3ZWlnaHQgdmFyIGlzIHVzZWQg YXMgc3RvcmFnZSBmb3IgZGlzdGFuY2UgKi8KLQkJCQkJc3RhdGUtPmJ1ZiA9IHBhcnNlX3BocmFz ZV9vcGVyYXRvcihzdGF0ZS0+YnVmLCB3ZWlnaHQpOwotCQkJCQlpZiAoKndlaWdodCA8IDApCisJ CQkJCSpvcGVyYXRvciA9IE9QX09SOworCQkJCQkoc3RhdGUtPmJ1ZikgKz0gb3BsZW47CisJCQkJ CXJldHVybiBQVF9PUFI7CisJCQkJfQorCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAn PCcpKQorCQkJCXsKKwkJCQkJaW50MTYJZGlzdGFuY2U7CisJCQkJCWNoYXIgICAqcGhyYXNlID0g cGFyc2VfcGhyYXNlX29wZXJhdG9yKHN0YXRlLT5idWYsICZkaXN0YW5jZSk7CisJCQkJCWlmIChk aXN0YW5jZSA8IDApCisJCQkJCXsKKwkJCQkJCWlmIChpc3dlYikKKwkJCQkJCXsKKwkJCQkJCQkv KiB3ZWIgc2VhcmNoIHRvbGVyYXRlcyBicm9rZW4gcGhyYXNlIG9wZXJhdG9yICovCisJCQkJCQkJ KHN0YXRlLT5idWYpKys7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CiAJCQkJCQlyZXR1cm4g UFRfRVJSOworCQkJCQl9CisJCQkJCXN0YXRlLT5idWYgPSBwaHJhc2U7CisJCQkJCSpvcGVyYXRv ciA9IE9QX1BIUkFTRTsKKwkJCQkJKndlaWdodCA9IGRpc3RhbmNlOyAvKiB3ZWlnaHQgdmFyIGlz IHVzZWQgYXMgc3RvcmFnZSBmb3IgZGlzdGFuY2UgKi8KKwkJCQkJc3RhdGUtPnN0YXRlID0gV0FJ VE9QRVJBTkQ7CiAJCQkJCXJldHVybiBQVF9PUFI7CiAJCQkJfQogCQkJCWVsc2UgaWYgKHRfaXNl cShzdGF0ZS0+YnVmLCAnKScpKQogCQkJCXsKKwkJCQkJaWYgKGlzd2ViICYmIHN0YXRlLT5jb3Vu dCA9PSAwKQorCQkJCQl7CisJCQkJCQkvKiB3ZWIgc2VhcmNoIHRvbGVyYXRlcyB1c2VsZXNzIGNs b3NpbmcgcGFyZW50aGVzZXMgKi8KKwkJCQkJCShzdGF0ZS0+YnVmKSsrOworCQkJCQkJY29udGlu dWU7CisJCQkJCX0KIAkJCQkJKHN0YXRlLT5idWYpKys7CiAJCQkJCXN0YXRlLT5jb3VudC0tOwog CQkJCQlyZXR1cm4gKHN0YXRlLT5jb3VudCA8IDApID8gUFRfRVJSIDogUFRfQ0xPU0U7CiAJCQkJ fQogCQkJCWVsc2UgaWYgKCooc3RhdGUtPmJ1ZikgPT0gJ1wwJykKLQkJCQkJcmV0dXJuIChzdGF0 ZS0+Y291bnQpID8gUFRfRVJSIDogUFRfRU5EOworCQkJCXsKKwkJCQkJLyogd2ViIHNlYXJjaCB0 b2xlcmF0ZXMgdW5leHBlY3RlZCBlbmQgb2YgbGluZSAqLworCQkJCQlyZXR1cm4gKCFpc3dlYiAm JiBzdGF0ZS0+Y291bnQpID8gUFRfRVJSIDogUFRfRU5EOworCQkJCX0KIAkJCQllbHNlIGlmICgh dF9pc3NwYWNlKHN0YXRlLT5idWYpKQorCQkJCXsKKwkJCQkJaWYgKGlzd2ViKQorCQkJCQl7CisJ CQkJCQkvKiBwdXQgaW1wbGljaXQgQU5EIGlmIHRoZXJlJ3Mgbm8gb3BlcmF0b3IgKi8KKwkJCQkJ CSpvcGVyYXRvciA9IE9QX0FORDsKKwkJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOwor CQkJCQkJcmV0dXJuIFBUX09QUjsKKwkJCQkJfQogCQkJCQlyZXR1cm4gUFRfRVJSOworCQkJCX0K IAkJCQlicmVhazsKIAkJCWNhc2UgV0FJVFNJTkdMRU9QRVJBTkQ6CiAJCQkJaWYgKCooc3RhdGUt PmJ1ZikgPT0gJ1wwJykKQEAgLTMyMCw5ICs0MzcsMTAgQEAgZ2V0dG9rZW5fcXVlcnkoVFNRdWVy eVBhcnNlclN0YXRlIHN0YXRlLAogCQkJCXN0YXRlLT5idWYgKz0gc3RybGVuKHN0YXRlLT5idWYp OwogCQkJCXN0YXRlLT5jb3VudCsrOwogCQkJCXJldHVybiBQVF9WQUw7Ci0JCQlkZWZhdWx0Ogot CQkJCXJldHVybiBQVF9FUlI7Ci0JCQkJYnJlYWs7CisJCQljYXNlIElOUVVPVEVTOgorCQkJCS8q IHBocmFzZSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYW4gb3BlcmF0b3IgKi8KKwkJCQlzdGF0ZS0+ c3RhdGUgPSBXQUlUT1BFUkFUT1I7CisJCQkJY29udGludWU7CiAJCX0KIAkJc3RhdGUtPmJ1ZiAr PSBwZ19tYmxlbihzdGF0ZS0+YnVmKTsKIAl9CkBAIC00NzUsNyArNTkzLDggQEAgY2xlYW5PcFN0 YWNrKFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwKIHN0YXRpYyB2b2lkCiBtYWtlcG9sKFRTUXVl cnlQYXJzZXJTdGF0ZSBzdGF0ZSwKIAkJUHVzaEZ1bmN0aW9uIHB1c2h2YWwsCi0JCURhdHVtIG9w YXF1ZSkKKwkJRGF0dW0gb3BhcXVlLAorCQlib29sIGlzd2ViKQogewogCWludDgJCW9wZXJhdG9y ID0gMDsKIAl0c190b2tlbnR5cGUgdHlwZTsKQEAgLTQ4OSwxOSArNjA4LDIxIEBAIG1ha2Vwb2wo VFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCS8qIHNpbmNlIHRoaXMgZnVuY3Rpb24gcmVjdXJz ZXMsIGl0IGNvdWxkIGJlIGRyaXZlbiB0byBzdGFjayBvdmVyZmxvdyAqLwogCWNoZWNrX3N0YWNr X2RlcHRoKCk7CiAKLQl3aGlsZSAoKHR5cGUgPSBnZXR0b2tlbl9xdWVyeShzdGF0ZSwgJm9wZXJh dG9yLCAmbGVudmFsLCAmc3RydmFsLCAmd2VpZ2h0LCAmcHJlZml4KSkgIT0gUFRfRU5EKQorCXdo aWxlICgodHlwZSA9IGdldHRva2VuX3F1ZXJ5KHN0YXRlLCAmb3BlcmF0b3IsICZsZW52YWwsICZz dHJ2YWwsCisJCQkJCQkJCSAgJndlaWdodCwgJnByZWZpeCwgaXN3ZWIpKSAhPSBQVF9FTkQpCiAJ ewogCQlzd2l0Y2ggKHR5cGUpCiAJCXsKIAkJCWNhc2UgUFRfVkFMOgotCQkJCXB1c2h2YWwob3Bh cXVlLCBzdGF0ZSwgc3RydmFsLCBsZW52YWwsIHdlaWdodCwgcHJlZml4KTsKKwkJCQlwdXNodmFs KG9wYXF1ZSwgc3RhdGUsIHN0cnZhbCwgbGVudmFsLCB3ZWlnaHQsIHByZWZpeCwKKwkJCQkJCXN0 YXRlLT5zdGF0ZSA9PSBJTlFVT1RFUyAvKiBmb3JjZSBwaHJhc2Ugb3BlcmF0b3IgKi8pOwogCQkJ CWJyZWFrOwogCQkJY2FzZSBQVF9PUFI6CiAJCQkJY2xlYW5PcFN0YWNrKHN0YXRlLCBvcHN0YWNr LCAmbGVuc3RhY2ssIG9wZXJhdG9yKTsKIAkJCQlwdXNoT3BTdGFjayhvcHN0YWNrLCAmbGVuc3Rh Y2ssIG9wZXJhdG9yLCB3ZWlnaHQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBQVF9PUEVOOgotCQkJ CW1ha2Vwb2woc3RhdGUsIHB1c2h2YWwsIG9wYXF1ZSk7CisJCQkJbWFrZXBvbChzdGF0ZSwgcHVz aHZhbCwgb3BhcXVlLCBpc3dlYik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFBUX0NMT1NFOgogCQkJ CWNsZWFuT3BTdGFjayhzdGF0ZSwgb3BzdGFjaywgJmxlbnN0YWNrLCBPUF9PUiAvKiBsb3dlc3Qg Ki8gKTsKQEAgLTYwNSw3ICs3MjYsOCBAQCBUU1F1ZXJ5CiBwYXJzZV90c3F1ZXJ5KGNoYXIgKmJ1 ZiwKIAkJCSAgUHVzaEZ1bmN0aW9uIHB1c2h2YWwsCiAJCQkgIERhdHVtIG9wYXF1ZSwKLQkJCSAg Ym9vbCBpc3BsYWluKQorCQkJICBib29sIGlzcGxhaW4sCisJCQkgIGJvb2wgaXN3ZWIpCiB7CiAJ c3RydWN0IFRTUXVlcnlQYXJzZXJTdGF0ZURhdGEgc3RhdGU7CiAJaW50CQkJaTsKQEAgLTYzMiw3 ICs3NTQsNyBAQCBwYXJzZV90c3F1ZXJ5KGNoYXIgKmJ1ZiwKIAkqKHN0YXRlLmN1cm9wKSA9ICdc MCc7CiAKIAkvKiBwYXJzZSBxdWVyeSAmIG1ha2UgcG9saXNoIG5vdGF0aW9uIChwb3N0Zml4LCBi dXQgaW4gcmV2ZXJzZSBvcmRlcikgKi8KLQltYWtlcG9sKCZzdGF0ZSwgcHVzaHZhbCwgb3BhcXVl KTsKKwltYWtlcG9sKCZzdGF0ZSwgcHVzaHZhbCwgb3BhcXVlLCBpc3dlYik7CiAKIAljbG9zZV90 c3ZlY3Rvcl9wYXJzZXIoc3RhdGUudmFsc3RhdGUpOwogCkBAIC03MDMsNyArODI1LDcgQEAgcGFy c2VfdHNxdWVyeShjaGFyICpidWYsCiAKIHN0YXRpYyB2b2lkCiBwdXNodmFsX2FzaXMoRGF0dW0g b3BhcXVlLCBUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsIGNoYXIgKnN0cnZhbCwgaW50IGxlbnZh bCwKLQkJCSBpbnQxNiB3ZWlnaHQsIGJvb2wgcHJlZml4KQorCQkJIGludDE2IHdlaWdodCwgYm9v bCBwcmVmaXgsIGJvb2wgaXNwaHJhc2UpCiB7CiAJcHVzaFZhbHVlKHN0YXRlLCBzdHJ2YWwsIGxl bnZhbCwgd2VpZ2h0LCBwcmVmaXgpOwogfQpAQCAtNzE2LDcgKzgzOCw3IEBAIHRzcXVlcnlpbihQ R19GVU5DVElPTl9BUkdTKQogewogCWNoYXIJICAgKmluID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7 CiAKLQlQR19SRVRVUk5fVFNRVUVSWShwYXJzZV90c3F1ZXJ5KGluLCBwdXNodmFsX2FzaXMsIFBv aW50ZXJHZXREYXR1bShOVUxMKSwgZmFsc2UpKTsKKwlQR19SRVRVUk5fVFNRVUVSWShwYXJzZV90 c3F1ZXJ5KGluLCBwdXNodmFsX2FzaXMsIFBvaW50ZXJHZXREYXR1bShOVUxMKSwgZmFsc2UsIGZh bHNlKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCmluZGV4IGJmYzkwMDk4ZjguLjAwZjFh ODVhZTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCkBAIC00OTUwLDYgKzQ5NTAsOCBAQCBEQVRBKGlu c2VydCBPSUQgPSAzNzQ3ICggIHBsYWludG9fdHNxdWVyeQlQR05TUCBQR1VJRCAxMiAxMDAgMCAw IDAgZiBmIGYgdCBmIGkgcwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CiBEQVRBKGlu c2VydCBPSUQgPSA1MDA2ICggIHBocmFzZXRvX3RzcXVlcnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAg MCAwIGYgZiBmIHQgZiBpIHMgMiAwIDM2MTUgIjM3MzQgMjUiIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyBfbnVsbF8gcGhyYXNldG9fdHNxdWVyeV9ieWlkIF9udWxsXyBfbnVsbF8gX251bGxf ICkpOwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CitEQVRBKGluc2VydCBPSUQgPSA4 ODg5ICggIHdlYnNlYXJjaF90b190c3F1ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYg ZiAgdCBmIGkgcyAyIDAgMzYxNSAiMzczNCAyNSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyB3ZWJzZWFyY2hfdG9fdHNxdWVyeV9ieWlkIF9udWxsXyBfbnVsbF8gX251bGxfICkp OworREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CiBEQVRBKGluc2VydCBPSUQgPSAzNzQ5 ICggIHRvX3RzdmVjdG9yCQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAx IDAgMzYxNCAiMjUiIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gdG9fdHN2ZWN0 b3IgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigidHJhbnNmb3JtIHRvIHRzdmVjdG9y Iik7CiBEQVRBKGluc2VydCBPSUQgPSAzNzUwICggIHRvX3RzcXVlcnkJCVBHTlNQIFBHVUlEIDEy IDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1ICIyNSIgX251bGxfIF9udWxsXyBfbnVs bF8gX251bGxfIF9udWxsXyB0b190c3F1ZXJ5IF9udWxsXyBfbnVsbF8gX251bGxfICkpOwpAQCAt NDk1OCw2ICs0OTYwLDggQEAgREFUQShpbnNlcnQgT0lEID0gMzc1MSAoICBwbGFpbnRvX3RzcXVl cnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBzIHMKIERFU0NSKCJ0cmFuc2Zv cm0gdG8gdHNxdWVyeSIpOwogREFUQShpbnNlcnQgT0lEID0gNTAwMSAoICBwaHJhc2V0b190c3F1 ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1ICIyNSIg X251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwaHJhc2V0b190c3F1ZXJ5IF9udWxs XyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CitEQVRB KGluc2VydCBPSUQgPSA4ODkwICggIHdlYnNlYXJjaF90b190c3F1ZXJ5CVBHTlNQIFBHVUlEIDEy IDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1ICIyNSIgX251bGxfIF9udWxsXyBfbnVs bF8gX251bGxfIF9udWxsXyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSBfbnVsbF8gX251bGxfIF9udWxs XyApKTsKK0RFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVyeSIpOwogREFUQShpbnNlcnQgT0lEID0g NDIwOSAoICB0b190c3ZlY3RvcgkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBz IHMgMSAwIDM2MTQgIjM4MDIiIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8ganNv bmJfdG9fdHN2ZWN0b3IgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigidHJhbnNmb3Jt IGpzb25iIHRvIHRzdmVjdG9yIik7CiBEQVRBKGluc2VydCBPSUQgPSA0MjEwICggIHRvX3RzdmVj dG9yCQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAxIDAgMzYxNCAiMTE0 IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIGpzb25fdG9fdHN2ZWN0b3IgX251 bGxfIF9udWxsXyBfbnVsbF8gKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90c2VhcmNoL3Rz X3V0aWxzLmggYi9zcmMvaW5jbHVkZS90c2VhcmNoL3RzX3V0aWxzLmgKaW5kZXggZjhkZGNlNWVj Yi4uMDk4YzliOTA5MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdHNlYXJjaC90c191dGlscy5o CisrKyBiL3NyYy9pbmNsdWRlL3RzZWFyY2gvdHNfdXRpbHMuaApAQCAtNDQsMTEgKzQ0LDEyIEBA IHR5cGVkZWYgdm9pZCAoKlB1c2hGdW5jdGlvbikgKERhdHVtIG9wYXF1ZSwgVFNRdWVyeVBhcnNl clN0YXRlIHN0YXRlLAogCQkJCQkJCSAgY2hhciAqdG9rZW4sIGludCB0b2tlbmxlbiwKIAkJCQkJ CQkgIGludDE2IHRva2Vud2VpZ2h0cywJLyogYml0bWFwIGFzIGRlc2NyaWJlZCBpbgogCQkJCQkJ CQkJCQkJCSAqIFF1ZXJ5T3BlcmFuZCBzdHJ1Y3QgKi8KLQkJCQkJCQkgIGJvb2wgcHJlZml4KTsK KwkJCQkJCQkgIGJvb2wgcHJlZml4LAorCQkJCQkJCSAgYm9vbCBpc3BocmFzZSk7CiAKIGV4dGVy biBUU1F1ZXJ5IHBhcnNlX3RzcXVlcnkoY2hhciAqYnVmLAogCQkJICBQdXNoRnVuY3Rpb24gcHVz aHZhbCwKLQkJCSAgRGF0dW0gb3BhcXVlLCBib29sIGlzcGxhaW4pOworCQkJICBEYXR1bSBvcGFx dWUsIGJvb2wgaXNwbGFpbiwgYm9vbCBpc3dlYik7CiAKIC8qIEZ1bmN0aW9ucyBmb3IgdXNlIGJ5 IFB1c2hGdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgKi8KIGV4dGVybiB2b2lkIHB1c2hWYWx1ZShU U1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3RzZWFyY2gub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90c2VhcmNoLm91 dAppbmRleCBkNjNmYjEyZjFkLi4yNjVmZDU1ZmNjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3RzZWFyY2gub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dHNlYXJjaC5vdXQKQEAgLTE2NzIsMyArMTY3Miw0MDggQEAgc2VsZWN0ICogZnJvbSBwaHJhc2Vf aW5kZXhfdGVzdCB3aGVyZSBmdHMgQEAgcGhyYXNldG9fdHNxdWVyeSgnZW5nbGlzaCcsICdmYXQg Y2EKICgxIHJvdykKIAogc2V0IGVuYWJsZV9zZXFzY2FuID0gb247CistLSB0ZXN0IHdlYnNlYXJj aF90b190c3F1ZXJ5IGZ1bmN0aW9uCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJygpJyk7 CitOT1RJQ0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IHN0b3Agd29yZHMgb3Ig ZG9lc24ndCBjb250YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCcoKCkpJyk7CitOT1RJQ0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBv bmx5IHN0b3Agd29yZHMgb3IgZG9lc24ndCBjb250YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcoKSgpKCknKTsKK05PVElDRTogIHRleHQtc2Vh cmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vzbid0IGNvbnRhaW4gbGV4 ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2FiYyAoKScp OworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMn CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKCkgYWJjJyk7Cisgd2Vi c2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdhYmMgJiAoKScpOworIHdlYnNlYXJj aF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKCkgJiBhYmMnKTsKKyB3ZWJzZWFyY2hfdG9f dHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJworKDEgcm93KQorCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJygnKTsKK05PVElDRTogIHRleHQtc2VhcmNoIHF1ZXJ5 IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vzbid0IGNvbnRhaW4gbGV4ZW1lcywgaWdu b3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJygoJyk7CitOT1RJQ0U6ICB0 ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IHN0b3Agd29yZHMgb3IgZG9lc24ndCBjb250 YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCco KCggICkpIGFiYyBvciBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAnYWJjJyB8ICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnKSknKTsKK05PVElDRTogIHRleHQtc2VhcmNoIHF1ZXJ5IGRvZXNuJ3QgY29u dGFpbiBsZXhlbWVzOiAiKSkiCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKScp OworTk9USUNFOiAgdGV4dC1zZWFyY2ggcXVlcnkgZG9lc24ndCBjb250YWluIGxleGVtZXM6ICIp IgorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEg cm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJykoJyk7CitOT1RJQ0U6ICB0ZXh0 LXNlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IHN0b3Agd29yZHMgb3IgZG9lc24ndCBjb250YWlu IGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcmICko IHwnKTsKK05PVElDRTogIHRleHQtc2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3Jk cyBvciBkb2Vzbid0IGNvbnRhaW4gbGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1 ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ2FiYyApKCBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWJjIHwgKSggJiBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNx dWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyB8ICdkZWYnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnJiBhYmMnKTsKKyB3ZWJzZWFyY2hfdG9fdHNx dWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJworKDEgcm93KQorCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2FiYyAmJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCd8IGFiYycpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdhYmMnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnYWJjIHwnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAnYWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJzwg YWJjJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg J2FiYycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdhYmMgPCcpOwor IHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYTo6OmInKTsKKyB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYicKKygxIHJvdykKKwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdNeSBicmFuZCBuZXcgc21hcnRwaG9uZScpOwor ICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICdicmFuZCcgJiAnbmV3JyAmICdzbWFydHBob24nCisoMSByb3cpCisKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnTXkgYnJhbmQgIm5ldyBzbWFydHBob25lIicpOworICAg ICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAnYnJhbmQnICYgJ25ldycgPC0+ICdzbWFydHBob24nCisoMSByb3cpCisKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnTXkgYnJhbmQgIm5ldyAtc21hcnRwaG9uZSInKTsK KyAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgJ2JyYW5kJyAmICduZXcnIDwtPiAnc21hcnRwaG9uJworKDEgcm93KQor CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ015IGJyYW5kOkIgIm5ldyAtc21hcnRwaG9u ZSInKTsKKyAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdicmFuZCc6QiAmICduZXcnIDwtPiAnc21hcnRwaG9u JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ015IGJyYW5kOlogIm5l dyAtc21hcnRwaG9uZSInKTsKKyAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2JyYW5kJyAmICd6 JyAmICduZXcnIDwtPiAnc21hcnRwaG9uJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ015ICYgKGJyYW5kICgibmV3IC1zbWFydHBob25lIicpOworICAgICAgd2Vic2Vh cmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnYnJhbmQnICYgJ25ldycgPC0+ICdzbWFydHBob24nCisoMSByb3cpCisKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnTXkgJiAoYnJhbmQgKCJuZXcpIC1zbWFydHBob25lIicpOworICAg ICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAnYnJhbmQnICYgJ25ldycgPC0+ICdzbWFydHBob24nCisoMSByb3cpCisKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBvciByYXQnKTsKKyB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnY2F0JyB8ICdyYXQn CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBP UiByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnY2F0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2NhdCAiT1IiIHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdjYXQnICYgJ29yJyAmICdyYXQnCisoMSByb3cpCisKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBPUicpOworIHdlYnNlYXJjaF90 b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdjYXQnICYgJ29yJworKDEgcm93 KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdPUiByYXQnKTsKKyB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnb3InICYgJ3Jh dCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnImZh dCBjYXQgT1IgcmF0IicpOworICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcgPC0+ ICdvcicgPC0+ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2ZhdCAoY2F0IE9SIHJhdCcpOworICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAmICggJ2NhdCcgfCAncmF0JyAp CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCpy YXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAn ZmF0JyAmICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2lt cGxlJywgJ2ZhdC1yYXQnKTsKKyAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdC1yYXQnICYgJ2ZhdCcgJiAncmF0JworKDEgcm93KQor CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXRfcmF0Jyk7Cisgd2Vi c2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgJiAncmF0 JworKDEgcm93KQorCistLSBPUiBpcyBhbiBvcGVyYXRvciBoZXJlIC4uLgorc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yKHJhdCcpOworIHdlYnNlYXJjaF90b190 c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykK Kworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yKXJhdCcpOwor IHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwg J3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn ZmF0IG9yJnJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yfHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yIXJhdCcpOworIHdlYnNlYXJjaF90 b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yPHJhdCcp OworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQn IHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUn LCAnZmF0IG9yPnJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yICcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnCisoMSByb3cpCisKKy0tIC4uLiBidXQgbm90IGhl cmUKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvcmFuZ2UnKTsK KyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAm ICdvcmFuZ2UnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxl JywgJ2FiYyBvctGC0LXRgdGCJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgJ2FiYycgJiAnb3LRgtC10YHRgicKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIE9SMTIzNCcpOworIHdlYnNlYXJjaF90 b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ29yMTIzNCcKKygx IHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9yLWFi YycpOworICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvci1hYmMnICYgJ29yJyAmICdhYmMnCisoMSBy b3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBPUl9hYmMn KTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJj JyAmICdvcicgJiAnYWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J3NpbXBsZScsICdhYmMgb3InKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvcicKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnb3IgT1Igb3InKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnb3InIHwgJ29yJworKDEgcm93KQorCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgZWF0 ZW4gYSAtcmF0LicpOworICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcgJiAnZWF0 ZW4nICYgISdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5n bGlzaCcsICciQSBmYXQgY2F0IiBoYXMganVzdCBlYXRlbiBPUiAhcmF0LicpOworICAgICAgICB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcgJiAnZWF0ZW4nIHwgISdyYXQnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSBmYXQgY2F0IiBoYXMg anVzdCAoK2VhdGVuIE9SIC1yYXQpJyk7CisgICAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2Zh dCcgPC0+ICdjYXQnICYgKCAnZWF0ZW4nIHwgISdyYXQnICkKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ3RoaXMgaXMgLS0tLWZpbmUnKTsKKyB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAhISEhJ2ZpbmUnCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICcoKCkpICkp KSkgdGhpcyB8fHwgaXMgJiYgLSEtZmluZSwgImRlYXIgZnJpZW5kIiBPUiBnb29kJyk7CisgICAg ICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICEhISdmaW5lJyAmICdkZWFyJyA8LT4gJ2ZyaWVu ZCcgfCAnZ29vZCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmds aXNoJywgJ2FuIG9sZCA8LT4gY2F0ICIgaXMgZmluZSAmJiYgdG9vJyk7CisgICB3ZWJzZWFyY2hf dG9fdHNxdWVyeSAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnb2xkJyA8LT4gJ2Nh dCcgJiAnZmluZScKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmds aXNoJywgJyJBIHRoZSIgT1IganVzdCBvbicpOworTk9USUNFOiAgdGV4dC1zZWFyY2ggcXVlcnkg Y29udGFpbnMgb25seSBzdG9wIHdvcmRzIG9yIGRvZXNuJ3QgY29udGFpbiBsZXhlbWVzLCBpZ25v cmVkCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC7 0YHRgtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisgICAgICAgICB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAn0YLQvtC70YHRgicgPC0+ICfQutC+0YjQuicgJiAn0YHRitC10LsnICYg J9C60YDRi9GBJworKDEgcm93KQorCitzZWxlY3QgdG9fdHN2ZWN0b3IoJ3J1c3NpYW4nLCAn0YHR itC10LvQsCDRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwINC60YDRi9GB0YMnKSBAQAord2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAiINGB 0YrQtdC70LAg0LrRgNGL0YHRgycpOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJv dykKKworc2VsZWN0IHRvX3RzdmVjdG9yKCdydXNzaWFuJywgJ9GB0YrQtdC70LAg0YLQvtC70YHR gtCw0Y8g0YHQtdGA0LDRjyDQutC+0YjQutCwINC60YDRi9GB0YMnKSBAQAord2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAiINGB0YrQtdC7 0LAg0LrRgNGL0YHRgycpOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHNlYXJjaC5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC90c2VhcmNoLnNxbAppbmRleCAxYzg1MjBiM2U5Li4xYmY5ZjgwYTljIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90c2VhcmNoLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC90c2VhcmNoLnNxbApAQCAtNTM5LDMgKzUzOSw4OCBAQCBjcmVhdGUgaW5kZXgg cGhyYXNlX2luZGV4X3Rlc3RfaWR4IG9uIHBocmFzZV9pbmRleF90ZXN0IHVzaW5nIGdpbihmdHMp Owogc2V0IGVuYWJsZV9zZXFzY2FuID0gb2ZmOwogc2VsZWN0ICogZnJvbSBwaHJhc2VfaW5kZXhf dGVzdCB3aGVyZSBmdHMgQEAgcGhyYXNldG9fdHNxdWVyeSgnZW5nbGlzaCcsICdmYXQgY2F0Jyk7 CiBzZXQgZW5hYmxlX3NlcXNjYW4gPSBvbjsKKworLS0gdGVzdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSBmdW5jdGlvbgorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcoKScpOworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCcoKCkpJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko JygpKCkoKScpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdhYmMgKCknKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKCkgYWJjJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ2FiYyAmICgpJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJygpICYgYWJj Jyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKCcpOworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCcoKCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcoKCggICkp IGFiYyBvciBkZWYnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKSknKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKScpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVl cnkoJykoJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJyYgKSggfCcpOworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdhYmMgKSggZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ2FiYyB8ICkoICYgZGVmJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnJiBhYmMnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWJjICYnKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnfCBhYmMnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnYWJjIHwnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnPCBhYmMnKTsKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWJjIDwnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnYTo6OmInKTsKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdNeSBicmFu ZCBuZXcgc21hcnRwaG9uZScpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdNeSBicmFu ZCAibmV3IHNtYXJ0cGhvbmUiJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ015IGJy YW5kICJuZXcgLXNtYXJ0cGhvbmUiJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ015 IGJyYW5kOkIgIm5ldyAtc21hcnRwaG9uZSInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnTXkgYnJhbmQ6WiAibmV3IC1zbWFydHBob25lIicpOworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdNeSAmIChicmFuZCAoIm5ldyAtc21hcnRwaG9uZSInKTsKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnTXkgJiAoYnJhbmQgKCJuZXcpIC1zbWFydHBob25lIicpOworCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgb3IgcmF0Jyk7CitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgT1IgcmF0Jyk7CitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgIk9SIiByYXQnKTsKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBPUicpOworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnT1IgcmF0Jyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJyJmYXQgY2F0IE9SIHJhdCInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCAoY2F0IE9SIHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0KnJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnZmF0LXJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnZmF0X3JhdCcpOworCistLSBPUiBpcyBhbiBvcGVyYXRvciBoZXJlIC4uLgorc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yKHJhdCcpOworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yKXJhdCcpOworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yJnJhdCcpOworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yfHJhdCcpOworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yIXJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yPHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yPnJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yICcpOworCistLSAuLi4gYnV0IG5vdCBoZXJlCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhYmMgb3JhbmdlJyk7CitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhYmMgb3LRgtC10YHRgicpOworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIE9SMTIzNCcpOworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9yLWFiYycpOworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIE9SX2FiYycpOworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9yJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJ29yIE9SIG9yJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnZW5nbGlzaCcsICciQSBmYXQgY2F0IiBoYXMganVzdCBlYXRlbiBhIC1yYXQuJyk7CitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1c3Qg ZWF0ZW4gT1IgIXJhdC4nKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcs ICciQSBmYXQgY2F0IiBoYXMganVzdCAoK2VhdGVuIE9SIC1yYXQpJyk7CisKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICd0aGlzIGlzIC0tLS1maW5lJyk7CitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnKCgpKSApKSkpIHRoaXMgfHx8IGlzICYm IC0hLWZpbmUsICJkZWFyIGZyaWVuZCIgT1IgZ29vZCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdlbmdsaXNoJywgJ2FuIG9sZCA8LT4gY2F0ICIgaXMgZmluZSAmJiYgdG9vJyk7CisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSB0aGUiIE9SIGp1c3Qg b24nKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC70YHR gtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisKK3NlbGVjdCB0b190 c3ZlY3RvcigncnVzc2lhbicsICfRgdGK0LXQu9CwINGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAg 0LrRgNGL0YHRgycpIEBACit3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC7 0YHRgtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisKK3NlbGVjdCB0 b190c3ZlY3RvcigncnVzc2lhbicsICfRgdGK0LXQu9CwINGC0L7Qu9GB0YLQsNGPINGB0LXRgNCw 0Y8g0LrQvtGI0LrQsCDQutGA0YvRgdGDJykgQEAKK3dlYnNlYXJjaF90b190c3F1ZXJ5KCdydXNz aWFuJywgJyLRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwIiDRgdGK0LXQu9CwINC60YDRi9GB0YMn KTsK --=_2db345fa0d7f2b03818dd6376d9d8c11--