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 1f2j9u-00049t-Cw for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Apr 2018 20:00:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f2j9t-0007wM-66 for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Apr 2018 20:00: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 1f2j9s-0007vw-A1 for pgsql-hackers@lists.postgresql.org; Sun, 01 Apr 2018 20:00:56 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f2j9i-0003ow-U7 for pgsql-hackers@lists.postgresql.org; Sun, 01 Apr 2018 20:00:54 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id E724921C1C96; Sun, 1 Apr 2018 23:00:43 +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 8FA2E21C1C95; Sun, 1 Apr 2018 23:00:43 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1522612843; bh=f2NLUtVjuDuVpdsHotlyqRvZeqMwYR1KO0UxYH7WFDQ=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=YiD+90mE6xZFoCuvgkdxGiDIwlb8pfsKUgP831oXLtcCe9r+M/2PT0hj5dfb7DKnv EXaI7mx0MrXpcCweSCBudhuGeDjgx4pdb4OLnS9yVNutpbhGUCQDKIm24NNdI5+jO3 +VOtxhZRl1oE8YXQQT4mDCEtiG6CUB8SEbua7tj4= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_ceebbc087bb3a971adae882c05af7ccd" Date: Sun, 01 Apr 2018 23:00:43 +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: <8829c490d0e17b6033b3fd622dfeed1e@postgrespro.ru> References: <20180302030605.5ur6ktkb2vyb46pb@alap3.anarazel.de> <152025433949.1548.16466871234054596674.pgcf@coridan.postgresql.org> <34280367-0dab-7f73-8d7c-d21c7276814b@pgmasters.net> <8df9de83119eb295f3424c573d64ff84@postgrespro.ru> <20180326092405.71820cf2@asp437-24-g082ur> <6754a224654a4f0339195b83b133d551@postgrespro.ru> <9153fb21831d0ba7c832960f37df2688@postgrespro.ru> <20180328092115.GA32581@e733.localdomain> <8829c490d0e17b6033b3fd622dfeed1e@postgrespro.ru> Message-ID: 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 --=_ceebbc087bb3a971adae882c05af7ccd Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi Aleksandr, > I agree with Aleksander about silencing all errors in > websearch_to_tsquery(). > > In the attachment is a revised patch with the attempt to introduce an > ability to ignore syntax errors in gettoken_tsvector(). Thanks for the further improvements! Yes, you're both right, the API has to be consistent. Unfortunately, I had to make some adjustments according to Oleg Bartunov's review. Here's a change log: 1. &, | and (), <-> are no longer considered operators in web search mode. 2. I've stumbled upon a bug: web search used to transform "pg_class" into 'pg <-> class', which is no longer the case. 3. I changed the behavior of gettoken_tsvector() as soon as I had heard from Aleksander Alekseev, so I decided to use my implementation in this revision of the patch. This is a good subject for discussion, though. Feel free to share your opinion. 4. As suggested by Theodor, I've replaced some bool args with bit flags. > The name of enum ts_parsestate looks more like a name of the function > than a name of a type. > In my version, it renamed to QueryParserState, but you can fix it if > I'm wrong. True, but gettoken_query() returns ts_tokentype, so I decided to use this naming scheme. -- Dmitry Ivanov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_ceebbc087bb3a971adae882c05af7ccd Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=websearch_to_tsquery_v4.diff Content-Disposition: attachment; filename=websearch_to_tsquery_v4.diff; size=30798 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3RzZWFyY2gvdG9fdHNhbnkuYyBiL3NyYy9iYWNrZW5k L3RzZWFyY2gvdG9fdHNhbnkuYwppbmRleCBlYTU5NDdhM2E4Li42MDU1ZmI2YjRlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC90c2VhcmNoL3RvX3RzYW55LmMKKysrIGIvc3JjL2JhY2tlbmQvdHNl YXJjaC90b190c2FueS5jCkBAIC00OTAsNyArNDkwLDcgQEAgdG9fdHNxdWVyeV9ieWlkKFBHX0ZV TkNUSU9OX0FSR1MpCiAJcXVlcnkgPSBwYXJzZV90c3F1ZXJ5KHRleHRfdG9fY3N0cmluZyhpbiks CiAJCQkJCQkgIHB1c2h2YWxfbW9ycGgsCiAJCQkJCQkgIFBvaW50ZXJHZXREYXR1bSgmZGF0YSks Ci0JCQkJCQkgIGZhbHNlKTsKKwkJCQkJCSAgMCk7CiAKIAlQR19SRVRVUk5fVFNRVUVSWShxdWVy eSk7CiB9CkBAIC01MjAsNyArNTIwLDcgQEAgcGxhaW50b190c3F1ZXJ5X2J5aWQoUEdfRlVOQ1RJ T05fQVJHUykKIAlxdWVyeSA9IHBhcnNlX3RzcXVlcnkodGV4dF90b19jc3RyaW5nKGluKSwKIAkJ CQkJCSAgcHVzaHZhbF9tb3JwaCwKIAkJCQkJCSAgUG9pbnRlckdldERhdHVtKCZkYXRhKSwKLQkJ CQkJCSAgdHJ1ZSk7CisJCQkJCQkgIFBfVFNRX1BMQUlOKTsKIAogCVBHX1JFVFVSTl9QT0lOVEVS KHF1ZXJ5KTsKIH0KQEAgLTU1MSw3ICs1NTEsNyBAQCBwaHJhc2V0b190c3F1ZXJ5X2J5aWQoUEdf RlVOQ1RJT05fQVJHUykKIAlxdWVyeSA9IHBhcnNlX3RzcXVlcnkodGV4dF90b19jc3RyaW5nKGlu KSwKIAkJCQkJCSAgcHVzaHZhbF9tb3JwaCwKIAkJCQkJCSAgUG9pbnRlckdldERhdHVtKCZkYXRh KSwKLQkJCQkJCSAgdHJ1ZSk7CisJCQkJCQkgIFBfVFNRX1BMQUlOKTsKIAogCVBHX1JFVFVSTl9U U1FVRVJZKHF1ZXJ5KTsKIH0KQEAgLTU2NywzICs1NjcsMzUgQEAgcGhyYXNldG9fdHNxdWVyeShQ R19GVU5DVElPTl9BUkdTKQogCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY2ZnSWQpLAogCQkJ CQkJCQkJCVBvaW50ZXJHZXREYXR1bShpbikpKTsKIH0KKworRGF0dW0KK3dlYnNlYXJjaF90b190 c3F1ZXJ5X2J5aWQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICppbiA9IFBHX0dFVEFS R19URVhUX1BQKDEpOworCU1vcnBoT3BhcXVlCWRhdGE7CisJVFNRdWVyeQkJcXVlcnkgPSBOVUxM OworCisJZGF0YS5jZmdfaWQgPSBQR19HRVRBUkdfT0lEKDApOworCisJZGF0YS5xb3BlcmF0b3Ig PSBPUF9BTkQ7CisKKwlxdWVyeSA9IHBhcnNlX3RzcXVlcnkodGV4dF90b19jc3RyaW5nKGluKSwK KwkJCQkJCSAgcHVzaHZhbF9tb3JwaCwKKwkJCQkJCSAgUG9pbnRlckdldERhdHVtKCZkYXRhKSwK KwkJCQkJCSAgUF9UU1FfV0VCKTsKKworCVBHX1JFVFVSTl9UU1FVRVJZKHF1ZXJ5KTsKK30KKwor RGF0dW0KK3dlYnNlYXJjaF90b190c3F1ZXJ5KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkg ICAqaW4gPSBQR19HRVRBUkdfVEVYVF9QUCgwKTsKKwlPaWQJCQljZmdJZDsKKworCWNmZ0lkID0g Z2V0VFNDdXJyZW50Q29uZmlnKHRydWUpOworCVBHX1JFVFVSTl9EQVRVTShEaXJlY3RGdW5jdGlv bkNhbGwyKHdlYnNlYXJjaF90b190c3F1ZXJ5X2J5aWQsCisJCQkJCQkJCQkJT2JqZWN0SWRHZXRE YXR1bShjZmdJZCksCisJCQkJCQkJCQkJUG9pbnRlckdldERhdHVtKGluKSkpOworCit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHNxdWVyeS5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3RzcXVlcnkuYwppbmRleCAxY2NiZjc5MDMwLi42OTViZGI4OWU5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHNxdWVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC90c3F1ZXJ5LmMKQEAgLTMyLDE0ICszMiwyNyBAQCBjb25zdCBpbnQJdHNlYXJjaF9vcF9w cmlvcml0eVtPUF9DT1VOVF0gPQogCTMJCQkJCQkJLyogT1BfUEhSQVNFICovCiB9OwogCisvKgor ICogcGFyc2VyJ3Mgc3RhdGVzCisgKi8KK3R5cGVkZWYgZW51bQoreworCVdBSVRPUEVSQU5EID0g MSwKKwlXQUlUT1BFUkFUT1IgPSAyLAorCVdBSVRGSVJTVE9QRVJBTkQgPSAzLAorCVdBSVRTSU5H TEVPUEVSQU5EID0gNAorfSB0c19wYXJzZXJzdGF0ZTsKKwogc3RydWN0IFRTUXVlcnlQYXJzZXJT dGF0ZURhdGEKIHsKIAkvKiBTdGF0ZSBmb3IgZ2V0dG9rZW5fcXVlcnkgKi8KIAljaGFyCSAgICpi dWZmZXI7CQkJLyogZW50aXJlIHN0cmluZyB3ZSBhcmUgc2Nhbm5pbmcgKi8KIAljaGFyCSAgICpi dWY7CQkJLyogY3VycmVudCBzY2FuIHBvaW50ICovCi0JaW50CQkJc3RhdGU7CiAJaW50CQkJY291 bnQ7CQkJLyogbmVzdGluZyBjb3VudCwgaW5jcmVtZW50ZWQgYnkgKCwKIAkJCQkJCQkJICogZGVj cmVtZW50ZWQgYnkgKSAqLworCWJvb2wJCWluX3F1b3RlczsJCS8qIHBocmFzZSBpbiBxdW90ZXMg IiIgKi8KKwlib29sCQlpc193ZWI7CQkJLyogaXMgaXQgYSB3ZWIgc2VhcmNoPyAqLworCXRzX3Bh cnNlcnN0YXRlIHN0YXRlOwogCiAJLyogcG9saXNoIChwcmVmaXgpIG5vdGF0aW9uIGluIGxpc3Qs IGZpbGxlZCBpbiBieSBwdXNoKiBmdW5jdGlvbnMgKi8KIAlMaXN0CSAgICpwb2xzdHI7CkBAIC01 NywxMiArNzAsNiBAQCBzdHJ1Y3QgVFNRdWVyeVBhcnNlclN0YXRlRGF0YQogCVRTVmVjdG9yUGFy c2VTdGF0ZSB2YWxzdGF0ZTsKIH07CiAKLS8qIHBhcnNlcidzIHN0YXRlcyAqLwotI2RlZmluZSBX QUlUT1BFUkFORCAxCi0jZGVmaW5lIFdBSVRPUEVSQVRPUgkyCi0jZGVmaW5lIFdBSVRGSVJTVE9Q RVJBTkQgMwotI2RlZmluZSBXQUlUU0lOR0xFT1BFUkFORCA0Ci0KIC8qCiAgKiBzdWJyb3V0aW5l IHRvIHBhcnNlIHRoZSBtb2RpZmllcnMgKHdlaWdodCBhbmQgcHJlZml4IGZsYWcgY3VycmVudGx5 KQogICogcGFydCwgbGlrZSAnOkFCKicgb2YgYSBxdWVyeS4KQEAgLTE5Nyw2ICsyMDQsMjYgQEAg ZXJyOgogCXJldHVybiBidWY7CiB9CiAKKy8qCisgKiBQYXJzZSBPUiBvcGVyYXRvciB1c2VkIGlu IHdlYnNlYXJjaF90b190c3F1ZXJ5KCkuCisgKi8KK3N0YXRpYyBib29sCitwYXJzZV9vcl9vcGVy YXRvcihUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUpCit7CisJY2hhciAqYnVmID0gc3RhdGUtPmJ1 ZjsKKworCWlmIChzdGF0ZS0+aW5fcXVvdGVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4g KHRfaXNlcSgmYnVmWzBdLCAnbycpIHx8IHRfaXNlcSgmYnVmWzBdLCAnTycpKSAmJgorCQkgICAo dF9pc2VxKCZidWZbMV0sICdyJykgfHwgdF9pc2VxKCZidWZbMV0sICdSJykpICYmCisJCSAgIChi dWZbMl0gIT0gJ1wwJyAmJgorCQkJCSF0X2lzZXEoJmJ1ZlsyXSwgJy0nKSAmJgorCQkJCSF0X2lz ZXEoJmJ1ZlsyXSwgJ18nKSAmJgorCQkJCSF0X2lzYWxwaGEoJmJ1ZlsyXSkgJiYKKwkJCQkhdF9p c2RpZ2l0KCZidWZbMl0pKTsKK30KKwogLyoKICAqIHRva2VuIHR5cGVzIGZvciBwYXJzaW5nCiAg Ki8KQEAgLTIxOSwxMCArMjQ2LDEyIEBAIHR5cGVkZWYgZW51bQogICoKICAqLwogc3RhdGljIHRz X3Rva2VudHlwZQotZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAotCQkJ ICAgaW50OCAqb3BlcmF0b3IsCi0JCQkgICBpbnQgKmxlbnZhbCwgY2hhciAqKnN0cnZhbCwgaW50 MTYgKndlaWdodCwgYm9vbCAqcHJlZml4KQorZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0 YXRlIHN0YXRlLCBpbnQ4ICpvcGVyYXRvciwKKwkJCSAgIGludCAqbGVudmFsLCBjaGFyICoqc3Ry dmFsLAorCQkJICAgaW50MTYgKndlaWdodCwgYm9vbCAqcHJlZml4KQogeworCWJvb2wgaXNfd2Vi ID0gc3RhdGUtPmlzX3dlYjsKKwogCSp3ZWlnaHQgPSAwOwogCSpwcmVmaXggPSBmYWxzZTsKIApA QCAtMjMyLDI4ICsyNjEsNjMgQEAgZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0YXRlIHN0 YXRlLAogCQl7CiAJCQljYXNlIFdBSVRGSVJTVE9QRVJBTkQ6CiAJCQljYXNlIFdBSVRPUEVSQU5E OgotCQkJCWlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJyEnKSkKKwkJCQlpZiAoKCEgaXNfd2ViICYm IHRfaXNlcShzdGF0ZS0+YnVmLCAnIScpKSB8fAorCQkJCQkoaXNfd2ViICYmIHRfaXNlcShzdGF0 ZS0+YnVmLCAnLScpKSkKIAkJCQl7Ci0JCQkJCShzdGF0ZS0+YnVmKSsrOyAvKiBjYW4gc2FmZWx5 ICsrLCB0X2lzZXEgZ3VhcmFudGVlIHRoYXQKLQkJCQkJCQkJCSAqIHBnX21ibGVuKCk9PTEgKi8K KwkJCQkJc3RhdGUtPmJ1ZisrOworCisJCQkJCWlmIChzdGF0ZS0+aW5fcXVvdGVzKQorCQkJCQkJ Y29udGludWU7CisKIAkJCQkJKm9wZXJhdG9yID0gT1BfTk9UOwogCQkJCQlzdGF0ZS0+c3RhdGUg PSBXQUlUT1BFUkFORDsKIAkJCQkJcmV0dXJuIFBUX09QUjsKIAkJCQl9CiAJCQkJZWxzZSBpZiAo dF9pc2VxKHN0YXRlLT5idWYsICcoJykpCiAJCQkJeworCQkJCQlzdGF0ZS0+YnVmKys7CisKKwkJ CQkJaWYgKGlzX3dlYikKKwkJCQkJCWNvbnRpbnVlOworCiAJCQkJCXN0YXRlLT5jb3VudCsrOwot CQkJCQkoc3RhdGUtPmJ1ZikrKzsKIAkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CiAJ CQkJCXJldHVybiBQVF9PUEVOOwogCQkJCX0KIAkJCQllbHNlIGlmICh0X2lzZXEoc3RhdGUtPmJ1 ZiwgJzonKSkKIAkJCQl7CisJCQkJCXN0YXRlLT5idWYrKzsKKworCQkJCQlpZiAoaXNfd2ViKQor CQkJCQkJY29udGludWU7CisKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJyY29kZShF UlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9yIGluIHRz cXVlcnk6IFwiJXNcIiIsCiAJCQkJCQkJCQlzdGF0ZS0+YnVmZmVyKSkpOwogCQkJCX0KKwkJCQll bHNlIGlmIChpc193ZWIgJiYgdF9pc2VxKHN0YXRlLT5idWYsICciJykpCisJCQkJeworCQkJCQlz dGF0ZS0+YnVmKys7CisKKwkJCQkJLyogd2ViIHNlYXJjaCB0b2xlcmF0ZXMgbWlzc2luZyBxdW90 ZXMgKi8KKwkJCQkJaWYgKCFzdGF0ZS0+aW5fcXVvdGVzICYmIHN0cmNocihzdGF0ZS0+YnVmLCAn IicpKQorCQkJCQl7CisJCQkJCQkvKiBxdW90ZWQgdGV4dCBzaG91bGQgYmUgb3JkZXJlZCA8LT4g Ki8KKwkJCQkJCXN0YXRlLT5pbl9xdW90ZXMgPSB0cnVlOworCQkJCQkJc3RhdGUtPnN0YXRlID0g V0FJVE9QRVJBTkQ7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJc3RhdGUtPmluX3F1b3RlcyA9 IGZhbHNlOworCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllbHNlIGlmIChpc193ZWIgJiYg SVNPUEVSQVRPUihzdGF0ZS0+YnVmKSkKKwkJCQl7CisJCQkJCS8qIG9yIGVsc2UgZ2V0dG9rZW5f dHN2ZWN0b3IoKSB3aWxsIHJhaXNlIGFuIGVycm9yICovCisJCQkJCXN0YXRlLT5idWYrKzsKKwkJ CQkJY29udGludWU7CisJCQkJfQogCQkJCWVsc2UgaWYgKCF0X2lzc3BhY2Uoc3RhdGUtPmJ1Zikp CiAJCQkJewogCQkJCQkvKgpAQCAtMjYzLDEyICszMjcsMjIgQEAgZ2V0dG9rZW5fcXVlcnkoVFNR dWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCQkJCQlyZXNldF90c3ZlY3Rvcl9wYXJzZXIoc3RhdGUt PnZhbHN0YXRlLCBzdGF0ZS0+YnVmKTsKIAkJCQkJaWYgKGdldHRva2VuX3RzdmVjdG9yKHN0YXRl LT52YWxzdGF0ZSwgc3RydmFsLCBsZW52YWwsIE5VTEwsIE5VTEwsICZzdGF0ZS0+YnVmKSkKIAkJ CQkJewotCQkJCQkJc3RhdGUtPmJ1ZiA9IGdldF9tb2RpZmllcnMoc3RhdGUtPmJ1Ziwgd2VpZ2h0 LCBwcmVmaXgpOworCQkJCQkJaWYgKCFpc193ZWIpCisJCQkJCQl7CisJCQkJCQkJLyogd2ViIHNl YXJjaCBkb2VzIG5vdCBzdXBwb3J0IHdlaWdodHMgKi8KKwkJCQkJCQlzdGF0ZS0+YnVmID0gZ2V0 X21vZGlmaWVycyhzdGF0ZS0+YnVmLCB3ZWlnaHQsIHByZWZpeCk7CisJCQkJCQl9CiAJCQkJCQlz dGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFUT1I7CiAJCQkJCQlyZXR1cm4gUFRfVkFMOwogCQkJCQl9 CiAJCQkJCWVsc2UgaWYgKHN0YXRlLT5zdGF0ZSA9PSBXQUlURklSU1RPUEVSQU5EKQogCQkJCQkJ cmV0dXJuIFBUX0VORDsKKwkJCQkJZWxzZSBpZiAoaXNfd2ViKQorCQkJCQl7CisJCQkJCQkvKiBm aW5hbGx5LCB3ZSBoYXZlIHRvIHByb3ZpZGUgYW4gb3BlcmFuZCAqLworCQkJCQkJcHVzaFN0b3Ao c3RhdGUpOworCQkJCQkJcmV0dXJuIFBUX0VORDsKKwkJCQkJfQogCQkJCQllbHNlCiAJCQkJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBA IC0yNzcsNDAgKzM1MSw5NSBAQCBnZXR0b2tlbl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3Rh dGUsCiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSBXQUlUT1BFUkFUT1I6Ci0JCQkJaWYgKHRf aXNlcShzdGF0ZS0+YnVmLCAnJicpKQorCQkJCWlmICghIGlzX3dlYiAmJiB0X2lzZXEoc3RhdGUt PmJ1ZiwgJyYnKSkKIAkJCQl7CisJCQkJCXN0YXRlLT5idWYrKzsKIAkJCQkJc3RhdGUtPnN0YXRl ID0gV0FJVE9QRVJBTkQ7CiAJCQkJCSpvcGVyYXRvciA9IE9QX0FORDsKLQkJCQkJKHN0YXRlLT5i dWYpKys7CiAJCQkJCXJldHVybiBQVF9PUFI7CiAJCQkJfQotCQkJCWVsc2UgaWYgKHRfaXNlcShz dGF0ZS0+YnVmLCAnfCcpKQorCQkJCWVsc2UgaWYgKCEgaXNfd2ViICYmIHRfaXNlcShzdGF0ZS0+ YnVmLCAnfCcpKQogCQkJCXsKKwkJCQkJc3RhdGUtPmJ1ZisrOwogCQkJCQlzdGF0ZS0+c3RhdGUg PSBXQUlUT1BFUkFORDsKIAkJCQkJKm9wZXJhdG9yID0gT1BfT1I7Ci0JCQkJCShzdGF0ZS0+YnVm KSsrOwogCQkJCQlyZXR1cm4gUFRfT1BSOwogCQkJCX0KLQkJCQllbHNlIGlmICh0X2lzZXEoc3Rh dGUtPmJ1ZiwgJzwnKSkKKwkJCQllbHNlIGlmICghIGlzX3dlYiAmJiB0X2lzZXEoc3RhdGUtPmJ1 ZiwgJzwnKSkKIAkJCQl7Ci0JCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOwotCQkJCQkq b3BlcmF0b3IgPSBPUF9QSFJBU0U7CiAJCQkJCS8qIHdlaWdodCB2YXIgaXMgdXNlZCBhcyBzdG9y YWdlIGZvciBkaXN0YW5jZSAqLwogCQkJCQlzdGF0ZS0+YnVmID0gcGFyc2VfcGhyYXNlX29wZXJh dG9yKHN0YXRlLT5idWYsIHdlaWdodCk7CisJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5E OworCQkJCQkqb3BlcmF0b3IgPSBPUF9QSFJBU0U7CiAJCQkJCWlmICgqd2VpZ2h0IDwgMCkKIAkJ CQkJCXJldHVybiBQVF9FUlI7CiAJCQkJCXJldHVybiBQVF9PUFI7CiAJCQkJfQotCQkJCWVsc2Ug aWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAnKScpKQorCQkJCWVsc2UgaWYgKCEgaXNfd2ViICYmIHRf aXNlcShzdGF0ZS0+YnVmLCAnKScpKQogCQkJCXsKLQkJCQkJKHN0YXRlLT5idWYpKys7CisJCQkJ CXN0YXRlLT5idWYrKzsKIAkJCQkJc3RhdGUtPmNvdW50LS07CiAJCQkJCXJldHVybiAoc3RhdGUt PmNvdW50IDwgMCkgPyBQVF9FUlIgOiBQVF9DTE9TRTsKIAkJCQl9CisJCQkJZWxzZSBpZiAoaXNf d2ViICYmIHRfaXNlcShzdGF0ZS0+YnVmLCAnIicpKQorCQkJCXsKKwkJCQkJc3RhdGUtPmJ1Zisr OworCisJCQkJCS8qIHdlYiBzZWFyY2ggdG9sZXJhdGVzIG1pc3NpbmcgcXVvdGVzICovCisJCQkJ CWlmICghc3RhdGUtPmluX3F1b3RlcyAmJiBzdHJjaHIoc3RhdGUtPmJ1ZiwgJyInKSkKKwkJCQkJ eworCQkJCQkJLyogcXVvdGVkIHRleHQgc2hvdWxkIGJlIG9yZGVyZWQgPC0+ICovCisJCQkJCQlz dGF0ZS0+aW5fcXVvdGVzID0gdHJ1ZTsKKwkJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5E OworCisJCQkJCQkvKiBwdXQgaW1wbGljaXQgQU5EIGFmdGVyIGFuIG9wZXJhbmQgKi8KKwkJCQkJ CSpvcGVyYXRvciA9IE9QX0FORDsKKwkJCQkJCXJldHVybiBQVF9PUFI7CisJCQkJCX0KKwkJCQkJ ZWxzZQorCQkJCQkJc3RhdGUtPmluX3F1b3RlcyA9IGZhbHNlOworCisJCQkJCWNvbnRpbnVlOwor CQkJCX0KKwkJCQllbHNlIGlmIChpc193ZWIgJiYgcGFyc2Vfb3Jfb3BlcmF0b3Ioc3RhdGUpKQor CQkJCXsKKwkJCQkJc3RhdGUtPmJ1ZiArPSAyOyAvKiBzdHJsZW4oIk9SIikgKi8KKwkJCQkJc3Rh dGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJCSpvcGVyYXRvciA9IE9QX09SOworCQkJCQly ZXR1cm4gUFRfT1BSOworCQkJCX0KKwkJCQllbHNlIGlmIChpc193ZWIgJiYgSVNPUEVSQVRPUihz dGF0ZS0+YnVmKSkKKwkJCQl7CisJCQkJCS8qIGp1c3Qgc2tpcCBkaXNhYmxlZCBvcGVyYXRvcnMg Ki8KKwkJCQkJc3RhdGUtPmJ1ZisrOworCQkJCQljb250aW51ZTsKKwkJCQl9CiAJCQkJZWxzZSBp ZiAoKihzdGF0ZS0+YnVmKSA9PSAnXDAnKQotCQkJCQlyZXR1cm4gKHN0YXRlLT5jb3VudCkgPyBQ VF9FUlIgOiBQVF9FTkQ7CisJCQkJeworCQkJCQkvKiB3ZWIgc2VhcmNoIHRvbGVyYXRlcyB1bmV4 cGVjdGVkIGVuZCBvZiBsaW5lICovCisJCQkJCXJldHVybiAoIWlzX3dlYiAmJiBzdGF0ZS0+Y291 bnQpID8gUFRfRVJSIDogUFRfRU5EOworCQkJCX0KIAkJCQllbHNlIGlmICghdF9pc3NwYWNlKHN0 YXRlLT5idWYpKQorCQkJCXsKKwkJCQkJaWYgKGlzX3dlYikKKwkJCQkJeworCQkJCQkJaWYgKHN0 YXRlLT5pbl9xdW90ZXMpCisJCQkJCQl7CisJCQkJCQkJLyogcHV0IGltcGxpY2l0IDwtPiBhZnRl ciBhbiBvcGVyYW5kICovCisJCQkJCQkJKm9wZXJhdG9yID0gT1BfUEhSQVNFOworCQkJCQkJCSp3 ZWlnaHQgPSAxOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCS8qIHB1dCBp bXBsaWNpdCBBTkQgYWZ0ZXIgYW4gb3BlcmFuZCAqLworCQkJCQkJCSpvcGVyYXRvciA9IE9QX0FO RDsKKwkJCQkJCX0KKworCQkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJCQly ZXR1cm4gUFRfT1BSOworCQkJCQl9CiAJCQkJCXJldHVybiBQVF9FUlI7CisJCQkJfQogCQkJCWJy ZWFrOwogCQkJY2FzZSBXQUlUU0lOR0xFT1BFUkFORDoKIAkJCQlpZiAoKihzdGF0ZS0+YnVmKSA9 PSAnXDAnKQpAQCAtMzIwLDkgKzQ0OSw2IEBAIGdldHRva2VuX3F1ZXJ5KFRTUXVlcnlQYXJzZXJT dGF0ZSBzdGF0ZSwKIAkJCQlzdGF0ZS0+YnVmICs9IHN0cmxlbihzdGF0ZS0+YnVmKTsKIAkJCQlz dGF0ZS0+Y291bnQrKzsKIAkJCQlyZXR1cm4gUFRfVkFMOwotCQkJZGVmYXVsdDoKLQkJCQlyZXR1 cm4gUFRfRVJSOwotCQkJCWJyZWFrOwogCQl9CiAJCXN0YXRlLT5idWYgKz0gcGdfbWJsZW4oc3Rh dGUtPmJ1Zik7CiAJfQpAQCAtNjA1LDcgKzczMSw3IEBAIFRTUXVlcnkKIHBhcnNlX3RzcXVlcnko Y2hhciAqYnVmLAogCQkJICBQdXNoRnVuY3Rpb24gcHVzaHZhbCwKIAkJCSAgRGF0dW0gb3BhcXVl LAotCQkJICBib29sIGlzcGxhaW4pCisJCQkgIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgVFNRdWVy eVBhcnNlclN0YXRlRGF0YSBzdGF0ZTsKIAlpbnQJCQlpOwpAQCAtNjEzLDE3ICs3MzksMjggQEAg cGFyc2VfdHNxdWVyeShjaGFyICpidWYsCiAJaW50CQkJY29tbW9ubGVuOwogCVF1ZXJ5SXRlbSAg KnB0cjsKIAlMaXN0Q2VsbCAgICpjZWxsOwotCWJvb2wJCW5lZWRjbGVhbnVwOworCWJvb2wJCW5l ZWRjbGVhbnVwLAorCQkJCWlzX3BsYWluLAorCQkJCWlzX3dlYjsKKwlpbnQJCQl0c3ZfZmxhZ3Mg PSBQX1RTVl9PUFJfSVNfREVMSU0gfCBQX1RTVl9JU19UU1FVRVJZOworCisJaXNfcGxhaW4gPSAo ZmxhZ3MgJiBQX1RTUV9QTEFJTikgIT0gMDsKKwlpc193ZWIgPSAoZmxhZ3MgJiBQX1RTUV9XRUIp ICE9IDA7CisKKwlpZiAoaXNfd2ViKQorCQl0c3ZfZmxhZ3MgfD0gUF9UU1ZfSVNfV0VCOwogCiAJ LyogaW5pdCBzdGF0ZSAqLwogCXN0YXRlLmJ1ZmZlciA9IGJ1ZjsKIAlzdGF0ZS5idWYgPSBidWY7 Ci0Jc3RhdGUuc3RhdGUgPSAoaXNwbGFpbikgPyBXQUlUU0lOR0xFT1BFUkFORCA6IFdBSVRGSVJT VE9QRVJBTkQ7CiAJc3RhdGUuY291bnQgPSAwOworCXN0YXRlLmluX3F1b3RlcyA9IGZhbHNlOwor CXN0YXRlLmlzX3dlYiA9IGlzX3dlYjsKKwlzdGF0ZS5zdGF0ZSA9IGlzX3BsYWluID8gV0FJVFNJ TkdMRU9QRVJBTkQgOiBXQUlURklSU1RPUEVSQU5EOwogCXN0YXRlLnBvbHN0ciA9IE5JTDsKIAog CS8qIGluaXQgdmFsdWUgcGFyc2VyJ3Mgc3RhdGUgKi8KLQlzdGF0ZS52YWxzdGF0ZSA9IGluaXRf dHN2ZWN0b3JfcGFyc2VyKHN0YXRlLmJ1ZmZlciwgdHJ1ZSwgdHJ1ZSk7CisJc3RhdGUudmFsc3Rh dGUgPSBpbml0X3RzdmVjdG9yX3BhcnNlcihzdGF0ZS5idWZmZXIsIHRzdl9mbGFncyk7CiAKIAkv KiBpbml0IGxpc3Qgb2Ygb3BlcmFuZCAqLwogCXN0YXRlLnN1bWxlbiA9IDA7CkBAIC03MTYsNyAr ODUzLDcgQEAgdHNxdWVyeWluKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJY2hhcgkgICAqaW4gPSBQ R19HRVRBUkdfQ1NUUklORygwKTsKIAotCVBHX1JFVFVSTl9UU1FVRVJZKHBhcnNlX3RzcXVlcnko aW4sIHB1c2h2YWxfYXNpcywgUG9pbnRlckdldERhdHVtKE5VTEwpLCBmYWxzZSkpOworCVBHX1JF VFVSTl9UU1FVRVJZKHBhcnNlX3RzcXVlcnkoaW4sIHB1c2h2YWxfYXNpcywgUG9pbnRlckdldERh dHVtKE5VTEwpLCAwKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvdHN2ZWN0b3IuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvci5jCmluZGV4IDY0 ZTAyZWY0MzQuLjdhMjdiZDEyYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90 c3ZlY3Rvci5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvci5jCkBAIC0yMDAs NyArMjAwLDcgQEAgdHN2ZWN0b3JpbihQR19GVU5DVElPTl9BUkdTKQogCWNoYXIJICAgKmN1cjsK IAlpbnQJCQlidWZsZW4gPSAyNTY7CS8qIGFsbG9jYXRlZCBzaXplIG9mIHRtcGJ1ZiAqLwogCi0J c3RhdGUgPSBpbml0X3RzdmVjdG9yX3BhcnNlcihidWYsIGZhbHNlLCBmYWxzZSk7CisJc3RhdGUg PSBpbml0X3RzdmVjdG9yX3BhcnNlcihidWYsIDApOwogCiAJYXJybGVuID0gNjQ7CiAJYXJyID0g KFdvcmRFbnRyeUlOICopIHBhbGxvYyhzaXplb2YoV29yZEVudHJ5SU4pICogYXJybGVuKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9wYXJzZXIuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9wYXJzZXIuYwppbmRleCA3MzY3YmE2YTQwLi5mZWQ0 MTFhODQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3JfcGFyc2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yX3BhcnNlci5jCkBAIC0zMyw2 ICszMyw3IEBAIHN0cnVjdCBUU1ZlY3RvclBhcnNlU3RhdGVEYXRhCiAJaW50CQkJZW1sOwkJCS8q IG1heCBieXRlcyBwZXIgY2hhcmFjdGVyICovCiAJYm9vbAkJb3ByaXNkZWxpbTsJCS8qIHRyZWF0 ICEgfCAqICggKSBhcyBkZWxpbWl0ZXJzPyAqLwogCWJvb2wJCWlzX3RzcXVlcnk7CQkvKiBzYXkg InRzcXVlcnkiIG5vdCAidHN2ZWN0b3IiIGluIGVycm9ycz8gKi8KKwlib29sCQlpc193ZWI7CQkJ Lyogd2UncmUgaW4gd2Vic2VhcmNoX3RvX3RzcXVlcnkoKSAqLwogfTsKIAogCkBAIC00Miw3ICs0 Myw3IEBAIHN0cnVjdCBUU1ZlY3RvclBhcnNlU3RhdGVEYXRhCiAgKiAhIHwgJiAoICkKICAqLwog VFNWZWN0b3JQYXJzZVN0YXRlCi1pbml0X3RzdmVjdG9yX3BhcnNlcihjaGFyICppbnB1dCwgYm9v bCBvcHJpc2RlbGltLCBib29sIGlzX3RzcXVlcnkpCitpbml0X3RzdmVjdG9yX3BhcnNlcihjaGFy ICppbnB1dCwgaW50IGZsYWdzKQogewogCVRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZTsKIApAQCAt NTIsOCArNTMsOSBAQCBpbml0X3RzdmVjdG9yX3BhcnNlcihjaGFyICppbnB1dCwgYm9vbCBvcHJp c2RlbGltLCBib29sIGlzX3RzcXVlcnkpCiAJc3RhdGUtPmxlbiA9IDMyOwogCXN0YXRlLT53b3Jk ID0gKGNoYXIgKikgcGFsbG9jKHN0YXRlLT5sZW4pOwogCXN0YXRlLT5lbWwgPSBwZ19kYXRhYmFz ZV9lbmNvZGluZ19tYXhfbGVuZ3RoKCk7Ci0Jc3RhdGUtPm9wcmlzZGVsaW0gPSBvcHJpc2RlbGlt OwotCXN0YXRlLT5pc190c3F1ZXJ5ID0gaXNfdHNxdWVyeTsKKwlzdGF0ZS0+b3ByaXNkZWxpbSA9 IChmbGFncyAmIFBfVFNWX09QUl9JU19ERUxJTSkgIT0gMDsKKwlzdGF0ZS0+aXNfdHNxdWVyeSA9 IChmbGFncyAmIFBfVFNWX0lTX1RTUVVFUlkpICE9IDA7CisJc3RhdGUtPmlzX3dlYiA9IChmbGFn cyAmIFBfVFNWX0lTX1dFQikgIT0gMDsKIAogCXJldHVybiBzdGF0ZTsKIH0KQEAgLTg5LDE2ICs5 MSw2IEBAIGRvIHsgXAogCX0gXAogfSB3aGlsZSAoMCkKIAotLyogcGhyYXNlIG9wZXJhdG9yIGJl Z2lucyB3aXRoICc8JyAqLwotI2RlZmluZSBJU09QRVJBVE9SKHgpIFwKLQkoIHBnX21ibGVuKHgp ID09IDEgJiYgKCAqKHgpID09ICchJyB8fAlcCi0JCQkJCQkJKih4KSA9PSAnJicgfHwJXAotCQkJ CQkJCSooeCkgPT0gJ3wnIHx8CVwKLQkJCQkJCQkqKHgpID09ICcoJyB8fAlcCi0JCQkJCQkJKih4 KSA9PSAnKScgfHwJXAotCQkJCQkJCSooeCkgPT0gJzwnCQlcCi0JCQkJCQkgICkgKQotCiAvKiBG aWxscyBnZXR0b2tlbl90c3ZlY3RvcidzIG91dHB1dCBwYXJhbWV0ZXJzLCBhbmQgcmV0dXJucyB0 cnVlICovCiAjZGVmaW5lIFJFVFVSTl9UT0tFTiBcCiBkbyB7IFwKQEAgLTE4MywxNCArMTc1LDE1 IEBAIGdldHRva2VuX3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZSwKIAkJewogCQkJ aWYgKCooc3RhdGUtPnByc2J1ZikgPT0gJ1wwJykKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQllbHNl IGlmICh0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1wnJykpCisJCQllbHNlIGlmICghc3RhdGUtPmlz X3dlYiAmJiB0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1wnJykpCiAJCQkJc3RhdGVjb2RlID0gV0FJ VEVORENNUExYOwotCQkJZWxzZSBpZiAodF9pc2VxKHN0YXRlLT5wcnNidWYsICdcXCcpKQorCQkJ ZWxzZSBpZiAoIXN0YXRlLT5pc193ZWIgJiYgdF9pc2VxKHN0YXRlLT5wcnNidWYsICdcXCcpKQog CQkJewogCQkJCXN0YXRlY29kZSA9IFdBSVRORVhUQ0hBUjsKIAkJCQlvbGRzdGF0ZSA9IFdBSVRF TkRXT1JEOwogCQkJfQotCQkJZWxzZSBpZiAoc3RhdGUtPm9wcmlzZGVsaW0gJiYgSVNPUEVSQVRP UihzdGF0ZS0+cHJzYnVmKSkKKwkJCWVsc2UgaWYgKChzdGF0ZS0+b3ByaXNkZWxpbSAmJiBJU09Q RVJBVE9SKHN0YXRlLT5wcnNidWYpKSB8fAorCQkJCQkgKHN0YXRlLT5pc193ZWIgJiYgdF9pc2Vx KHN0YXRlLT5wcnNidWYsICciJykpKQogCQkJCVBSU1NZTlRBWEVSUk9SOwogCQkJZWxzZSBpZiAo IXRfaXNzcGFjZShzdGF0ZS0+cHJzYnVmKSkKIAkJCXsKQEAgLTIxNywxMyArMjEwLDE0IEBAIGdl dHRva2VuX3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZSwKIAkJfQogCQllbHNlIGlm IChzdGF0ZWNvZGUgPT0gV0FJVEVORFdPUkQpCiAJCXsKLQkJCWlmICh0X2lzZXEoc3RhdGUtPnBy c2J1ZiwgJ1xcJykpCisJCQlpZiAoIXN0YXRlLT5pc193ZWIgJiYgdF9pc2VxKHN0YXRlLT5wcnNi dWYsICdcXCcpKQogCQkJewogCQkJCXN0YXRlY29kZSA9IFdBSVRORVhUQ0hBUjsKIAkJCQlvbGRz dGF0ZSA9IFdBSVRFTkRXT1JEOwogCQkJfQogCQkJZWxzZSBpZiAodF9pc3NwYWNlKHN0YXRlLT5w cnNidWYpIHx8ICooc3RhdGUtPnByc2J1ZikgPT0gJ1wwJyB8fAotCQkJCQkgKHN0YXRlLT5vcHJp c2RlbGltICYmIElTT1BFUkFUT1Ioc3RhdGUtPnByc2J1ZikpKQorCQkJCQkgKHN0YXRlLT5vcHJp c2RlbGltICYmIElTT1BFUkFUT1Ioc3RhdGUtPnByc2J1ZikpIHx8CisJCQkJCSAoc3RhdGUtPmlz X3dlYiAmJiB0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJyInKSkpCiAJCQl7CiAJCQkJUkVTSVpFUFJT QlVGOwogCQkJCWlmIChjdXJwb3MgPT0gc3RhdGUtPndvcmQpCkBAIC0yNTAsMTEgKzI0NCwxMSBA QCBnZXR0b2tlbl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUsCiAJCX0KIAkJZWxz ZSBpZiAoc3RhdGVjb2RlID09IFdBSVRFTkRDTVBMWCkKIAkJewotCQkJaWYgKHRfaXNlcShzdGF0 ZS0+cHJzYnVmLCAnXCcnKSkKKwkJCWlmICghc3RhdGUtPmlzX3dlYiAmJiB0X2lzZXEoc3RhdGUt PnByc2J1ZiwgJ1wnJykpCiAJCQl7CiAJCQkJc3RhdGVjb2RlID0gV0FJVENIQVJDTVBMWDsKIAkJ CX0KLQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXFwnKSkKKwkJCWVsc2UgaWYg KCFzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXFwnKSkKIAkJCXsKIAkJ CQlzdGF0ZWNvZGUgPSBXQUlUTkVYVENIQVI7CiAJCQkJb2xkc3RhdGUgPSBXQUlURU5EQ01QTFg7 CkBAIC0yNzAsNyArMjY0LDcgQEAgZ2V0dG9rZW5fdHN2ZWN0b3IoVFNWZWN0b3JQYXJzZVN0YXRl IHN0YXRlLAogCQl9CiAJCWVsc2UgaWYgKHN0YXRlY29kZSA9PSBXQUlUQ0hBUkNNUExYKQogCQl7 Ci0JCQlpZiAodF9pc2VxKHN0YXRlLT5wcnNidWYsICdcJycpKQorCQkJaWYgKCFzdGF0ZS0+aXNf d2ViICYmIHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXCcnKSkKIAkJCXsKIAkJCQlSRVNJWkVQUlNC VUY7CiAJCQkJQ09QWUNIQVIoY3VycG9zLCBzdGF0ZS0+cHJzYnVmKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmgKaW5kZXggYmZjOTAwOThmOC4uMDBmMWE4NWFlNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKQEAg LTQ5NTAsNiArNDk1MCw4IEBAIERBVEEoaW5zZXJ0IE9JRCA9IDM3NDcgKCAgcGxhaW50b190c3F1 ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgaSBzCiBERVNDUigidHJhbnNm b3JtIHRvIHRzcXVlcnkiKTsKIERBVEEoaW5zZXJ0IE9JRCA9IDUwMDYgKCAgcGhyYXNldG9fdHNx dWVyeQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIGkgcyAyIDAgMzYxNSAiMzcz NCAyNSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwaHJhc2V0b190c3F1ZXJ5 X2J5aWQgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigidHJhbnNmb3JtIHRvIHRzcXVl cnkiKTsKK0RBVEEoaW5zZXJ0IE9JRCA9IDg4ODkgKCAgd2Vic2VhcmNoX3RvX3RzcXVlcnkJUEdO U1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmICB0IGYgaSBzIDIgMCAzNjE1ICIzNzM0IDI1IiBf bnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHdlYnNlYXJjaF90b190c3F1ZXJ5X2J5 aWQgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CitERVNDUigidHJhbnNmb3JtIHRvIHRzcXVlcnki KTsKIERBVEEoaW5zZXJ0IE9JRCA9IDM3NDkgKCAgdG9fdHN2ZWN0b3IJCVBHTlNQIFBHVUlEIDEy IDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE0ICIyNSIgX251bGxfIF9udWxsXyBfbnVs bF8gX251bGxfIF9udWxsXyB0b190c3ZlY3RvciBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKIERF U0NSKCJ0cmFuc2Zvcm0gdG8gdHN2ZWN0b3IiKTsKIERBVEEoaW5zZXJ0IE9JRCA9IDM3NTAgKCAg dG9fdHNxdWVyeQkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBzIHMgMSAwIDM2 MTUgIjI1IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHRvX3RzcXVlcnkgX251 bGxfIF9udWxsXyBfbnVsbF8gKSk7CkBAIC00OTU4LDYgKzQ5NjAsOCBAQCBEQVRBKGluc2VydCBP SUQgPSAzNzUxICggIHBsYWludG9fdHNxdWVyeQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBm IGYgdCBmIHMgcwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CiBEQVRBKGluc2VydCBP SUQgPSA1MDAxICggIHBocmFzZXRvX3RzcXVlcnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYg ZiBmIHQgZiBzIHMgMSAwIDM2MTUgIjI1IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251 bGxfIHBocmFzZXRvX3RzcXVlcnkgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigidHJh bnNmb3JtIHRvIHRzcXVlcnkiKTsKK0RBVEEoaW5zZXJ0IE9JRCA9IDg4OTAgKCAgd2Vic2VhcmNo X3RvX3RzcXVlcnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBzIHMgMSAwIDM2 MTUgIjI1IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHdlYnNlYXJjaF90b190 c3F1ZXJ5IF9udWxsXyBfbnVsbF8gX251bGxfICkpOworREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1 ZXJ5Iik7CiBEQVRBKGluc2VydCBPSUQgPSA0MjA5ICggIHRvX3RzdmVjdG9yCQlQR05TUCBQR1VJ RCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAxIDAgMzYxNCAiMzgwMiIgX251bGxfIF9udWxs XyBfbnVsbF8gX251bGxfIF9udWxsXyBqc29uYl90b190c3ZlY3RvciBfbnVsbF8gX251bGxfIF9u dWxsXyApKTsKIERFU0NSKCJ0cmFuc2Zvcm0ganNvbmIgdG8gdHN2ZWN0b3IiKTsKIERBVEEoaW5z ZXJ0IE9JRCA9IDQyMTAgKCAgdG9fdHN2ZWN0b3IJCVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBm IGYgZiB0IGYgcyBzIDEgMCAzNjE0ICIxMTQiIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBf bnVsbF8ganNvbl90b190c3ZlY3RvciBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3RzZWFyY2gvdHNfdXRpbHMuaCBiL3NyYy9pbmNsdWRlL3RzZWFyY2gv dHNfdXRpbHMuaAppbmRleCBmOGRkY2U1ZWNiLi43M2U5NjlmZTljIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS90c2VhcmNoL3RzX3V0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdHNlYXJjaC90c191 dGlscy5oCkBAIC0yNSw5ICsyNSwxMSBAQAogc3RydWN0IFRTVmVjdG9yUGFyc2VTdGF0ZURhdGE7 CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gdHN2ZWN0b3JfcGFyc2VyLmMgKi8KIHR5cGVkZWYgc3RydWN0 IFRTVmVjdG9yUGFyc2VTdGF0ZURhdGEgKlRTVmVjdG9yUGFyc2VTdGF0ZTsKIAotZXh0ZXJuIFRT VmVjdG9yUGFyc2VTdGF0ZSBpbml0X3RzdmVjdG9yX3BhcnNlcihjaGFyICppbnB1dCwKLQkJCQkJ IGJvb2wgb3ByaXNkZWxpbSwKLQkJCQkJIGJvb2wgaXNfdHNxdWVyeSk7CisjZGVmaW5lIFBfVFNW X09QUl9JU19ERUxJTQkoMSA8PCAwKQorI2RlZmluZSBQX1RTVl9JU19UU1FVRVJZCSgxIDw8IDEp CisjZGVmaW5lIFBfVFNWX0lTX1dFQgkJKDEgPDwgMikKKworZXh0ZXJuIFRTVmVjdG9yUGFyc2VT dGF0ZSBpbml0X3RzdmVjdG9yX3BhcnNlcihjaGFyICppbnB1dCwgaW50IGZsYWdzKTsKIGV4dGVy biB2b2lkIHJlc2V0X3RzdmVjdG9yX3BhcnNlcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUsIGNo YXIgKmlucHV0KTsKIGV4dGVybiBib29sIGdldHRva2VuX3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VT dGF0ZSBzdGF0ZSwKIAkJCQkgIGNoYXIgKip0b2tlbiwgaW50ICpsZW4sCkBAIC0zNSw2ICszNywx NiBAQCBleHRlcm4gYm9vbCBnZXR0b2tlbl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3RhdGUgc3Rh dGUsCiAJCQkJICBjaGFyICoqZW5kcHRyKTsKIGV4dGVybiB2b2lkIGNsb3NlX3RzdmVjdG9yX3Bh cnNlcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUpOwogCisvKiBwaHJhc2Ugb3BlcmF0b3IgYmVn aW5zIHdpdGggJzwnICovCisjZGVmaW5lIElTT1BFUkFUT1IoeCkgXAorCSggcGdfbWJsZW4oeCkg PT0gMSAmJiAoICooeCkgPT0gJyEnIHx8CVwKKwkJCQkJCQkqKHgpID09ICcmJyB8fAlcCisJCQkJ CQkJKih4KSA9PSAnfCcgfHwJXAorCQkJCQkJCSooeCkgPT0gJygnIHx8CVwKKwkJCQkJCQkqKHgp ID09ICcpJyB8fAlcCisJCQkJCQkJKih4KSA9PSAnPCcJCVwKKwkJCQkJCSAgKSApCisKIC8qIHBh cnNlX3RzcXVlcnkgKi8KIAogc3RydWN0IFRTUXVlcnlQYXJzZXJTdGF0ZURhdGE7CS8qIHByaXZh dGUgaW4gYmFja2VuZC91dGlscy9hZHQvdHNxdWVyeS5jICovCkBAIC00Niw5ICs1OCwxMyBAQCB0 eXBlZGVmIHZvaWQgKCpQdXNoRnVuY3Rpb24pIChEYXR1bSBvcGFxdWUsIFRTUXVlcnlQYXJzZXJT dGF0ZSBzdGF0ZSwKIAkJCQkJCQkJCQkJCQkgKiBRdWVyeU9wZXJhbmQgc3RydWN0ICovCiAJCQkJ CQkJICBib29sIHByZWZpeCk7CiAKKyNkZWZpbmUgUF9UU1FfUExBSU4JCSgxIDw8IDApCisjZGVm aW5lIFBfVFNRX1dFQgkJKDEgPDwgMSkKKwogZXh0ZXJuIFRTUXVlcnkgcGFyc2VfdHNxdWVyeShj aGFyICpidWYsCi0JCQkgIFB1c2hGdW5jdGlvbiBwdXNodmFsLAotCQkJICBEYXR1bSBvcGFxdWUs IGJvb2wgaXNwbGFpbik7CisJCQkJCQkJIFB1c2hGdW5jdGlvbiBwdXNodmFsLAorCQkJCQkJCSBE YXR1bSBvcGFxdWUsCisJCQkJCQkJIGludCBmbGFncyk7CiAKIC8qIEZ1bmN0aW9ucyBmb3IgdXNl IGJ5IFB1c2hGdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgKi8KIGV4dGVybiB2b2lkIHB1c2hWYWx1 ZShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3RzZWFyY2gub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90c2VhcmNo Lm91dAppbmRleCBkNjNmYjEyZjFkLi4yYjFkYTMwOGRmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3RzZWFyY2gub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdHNlYXJjaC5vdXQKQEAgLTE2NzIsMyArMTY3MiwzMjUgQEAgc2VsZWN0ICogZnJvbSBwaHJh c2VfaW5kZXhfdGVzdCB3aGVyZSBmdHMgQEAgcGhyYXNldG9fdHNxdWVyeSgnZW5nbGlzaCcsICdm YXQgY2EKICgxIHJvdykKIAogc2V0IGVuYWJsZV9zZXFzY2FuID0gb247CistLSB0ZXN0IHdlYnNl YXJjaF90b190c3F1ZXJ5IGZ1bmN0aW9uCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3Np bXBsZScsICdJIGhhdmUgYSBmYXQ6KkFCQ0QgY2F0Jyk7CisgICAgICAgICAgICB3ZWJzZWFyY2hf dG9fdHNxdWVyeSAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdpJyAmICdoYXZlJyAmICdhJyAmICdmYXQnICYgJ2FiY2QnICYgJ2Nh dCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnb3Jh bmdlOioqQUFCQkNDREQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICdvcmFuZ2UnICYgJ2FhYmJjY2RkJworKDEgcm93KQorCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQ6QSFjYXQ6QnxyYXQ6QzwnKTsKKyAgICAg ICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnICYgJ2EnICYgJ2NhdCcgJiAnYicgJiAncmF0 JyAmICdjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICdmYXQ6QSA6IGNhdDpCJyk7CisgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnICYgJ2EnICYgJ2NhdCcgJiAnYicKKygxIHJvdykK Kworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIDogZGVmJyk7Cisg d2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAn ZGVmJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdh YmM6ZGVmJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgJ2FiYycgJiAnZGVmJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J3NpbXBsZScsICdhOjo6YicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICdhJyAmICdiJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ3NpbXBsZScsICc6Jyk7CitOT1RJQ0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBkb2Vzbid0 IGNvbnRhaW4gbGV4ZW1lczogIjoiCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn ZW5nbGlzaCcsICdNeSBicmFuZCBuZXcgc21hcnRwaG9uZScpOworICAgICB3ZWJzZWFyY2hfdG9f dHNxdWVyeSAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdicmFuZCcg JiAnbmV3JyAmICdzbWFydHBob24nCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnZW5nbGlzaCcsICdNeSBicmFuZCAibmV3IHNtYXJ0cGhvbmUiJyk7CisgICAgICB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICdicmFuZCcgJiAnbmV3JyA8LT4gJ3NtYXJ0cGhvbicKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ015IGJyYW5kICJuZXcgLXNtYXJ0cGhvbmUi Jyk7CisgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdicmFuZCcgJiAnbmV3JyA8LT4gJ3NtYXJ0cGhvbicKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ015IGJyYW5kOkIg Im5ldyAtc21hcnRwaG9uZSInKTsKKyAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2JyYW5kJyAm ICdiJyAmICduZXcnIDwtPiAnc21hcnRwaG9uJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNo X3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgb3IgcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVl cnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2NhdCcgfCAncmF0JworKDEgcm93KQorCitz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgT1IgcmF0Jyk7Cisgd2Vi c2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2NhdCcgfCAncmF0 JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQg Ik9SIiByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAnY2F0JyAmICdvcicgJiAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgT1InKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnY2F0JyAmICdvcicKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnT1IgcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3Rz cXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ29yJyAmICdyYXQnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJyJmYXQgY2F0IE9SIHJhdCIn KTsKKyAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgPC0+ICdjYXQnIDwtPiAnb3InIDwtPiAncmF0 JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQg KGNhdCBPUiByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICdmYXQnICYgJ2NhdCcgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQqcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVl cnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgJiAncmF0JworKDEgcm93KQorCitz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQtcmF0Jyk7CisgICB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQt cmF0JyAmICdmYXQnICYgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnZmF0X3JhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdmYXQnICYgJ3JhdCcKKygxIHJvdykKKworLS0gT1IgaXMgYW4g b3BlcmF0b3IgaGVyZSAuLi4KK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywg JyJmYXQgY2F0Im9yImZhdCByYXQiJyk7CisgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2Nh dCcgfCAnZmF0JyA8LT4gJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yKHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yKXJhdCcpOworIHdlYnNlYXJjaF90 b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yJnJhdCcp OworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQn IHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUn LCAnZmF0IG9yfHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yIXJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yPHJhdCcpOworIHdlYnNlYXJj aF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygx IHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yPnJh dCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdm YXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1w bGUnLCAnZmF0IG9yICcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICdmYXQnCisoMSByb3cpCisKKy0tIC4uLiBidXQgbm90IGhlcmUKK3NlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvcmFuZ2UnKTsKKyB3ZWJzZWFyY2hf dG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvcmFuZ2UnCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvctGC 0LXRgdGCJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgJ2FiYycgJiAnb3LRgtC10YHRgicKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIE9SMTIzNCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ29yMTIzNCcKKygxIHJvdykKKworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9yLWFiYycpOworICAgICAg d2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAnYWJjJyAmICdvci1hYmMnICYgJ29yJyAmICdhYmMnCisoMSByb3cpCisKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBPUl9hYmMnKTsKKyB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvcicgJiAn YWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdh YmMgb3InKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnYWJjJyAmICdvcicKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnb3IgT1Igb3InKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAnb3InIHwgJ29yJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgZWF0ZW4gYSAtcmF0Licp OworICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcgJiAnZWF0ZW4nICYgISdyYXQn CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSBm YXQgY2F0IiBoYXMganVzdCBlYXRlbiBPUiAhcmF0LicpOworICAgICAgIHdlYnNlYXJjaF90b190 c3F1ZXJ5ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2Zh dCcgPC0+ICdjYXQnICYgJ2VhdGVuJyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSBmYXQgY2F0IiBoYXMganVzdCAoK2VhdGVuIE9S IC1yYXQpJyk7CisgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIDwtPiAnY2F0JyAmICdlYXRlbicg fCAhJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNo JywgJ3RoaXMgaXMgLS0tLWZpbmUnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAhISEhJ2ZpbmUnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnZW5nbGlzaCcsICcoKCkpICkpKSkgdGhpcyB8fHwgaXMgJiYgLWZpbmUsICJk ZWFyIGZyaWVuZCIgT1IgZ29vZCcpOworICAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICEnZmlu ZScgJiAnZGVhcicgPC0+ICdmcmllbmQnIHwgJ2dvb2QnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdhbiBvbGQgPC0+IGNhdCAiIGlzIGZpbmUgJiYm IHRvbycpOworICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAnb2xkJyAmICdjYXQnICYgJ2ZpbmUnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSB0aGUiIE9SIGp1c3Qgb24nKTsKK05PVElDRTogIHRl eHQtc2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vzbid0IGNvbnRh aW4gbGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1 c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAiINGB0YrQtdC70LAg0LrRgNGL0YHR gycpOworICAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ9GC0L7Qu9GB0YInIDwtPiAn0LrQvtGI0Lon ICYgJ9GB0YrQtdC7JyAmICfQutGA0YvRgScKKygxIHJvdykKKworc2VsZWN0IHRvX3RzdmVjdG9y KCdydXNzaWFuJywgJ9GB0YrQtdC70LAg0YLQvtC70YHRgtCw0Y8g0LrQvtGI0LrQsCDQutGA0YvR gdGDJykgQEAKK3dlYnNlYXJjaF90b190c3F1ZXJ5KCdydXNzaWFuJywgJyLRgtC+0LvRgdGC0LDR jyDQutC+0YjQutCwIiDRgdGK0LXQu9CwINC60YDRi9GB0YMnKTsKKyA/Y29sdW1uPyAKKy0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK3NlbGVjdCB0b190c3ZlY3RvcigncnVzc2lhbicsICfRgdGK 0LXQu9CwINGC0L7Qu9GB0YLQsNGPINGB0LXRgNCw0Y8g0LrQvtGI0LrQsCDQutGA0YvRgdGDJykg QEAKK3dlYnNlYXJjaF90b190c3F1ZXJ5KCdydXNzaWFuJywgJyLRgtC+0LvRgdGC0LDRjyDQutC+ 0YjQutCwIiDRgdGK0LXQu9CwINC60YDRi9GB0YMnKTsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0K KyBmCisoMSByb3cpCisKKy0tIGNhc2VzIGhhbmRsZWQgYnkgZ2V0dG9rZW5fdHN2ZWN0b3IoKQor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcnJycpOworTk9USUNFOiAgdGV4dC1zZWFyY2gg cXVlcnkgY29udGFpbnMgb25seSBzdG9wIHdvcmRzIG9yIGRvZXNuJ3QgY29udGFpbiBsZXhlbWVz LCBpZ25vcmVkCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnJydhYmMnJycnZGVm JycnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAn YWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnXGFi YycpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdh YmMnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnXCcpOworTk9USUNF OiAgdGV4dC1zZWFyY2ggcXVlcnkgY29udGFpbnMgb25seSBzdG9wIHdvcmRzIG9yIGRvZXNuJ3Qg Y29udGFpbiBsZXhlbWVzLCBpZ25vcmVkCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3RzZWFyY2guc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHNlYXJjaC5zcWwKaW5k ZXggMWM4NTIwYjNlOS4uZGE4ZDA4OTEwMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvdHNlYXJjaC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHNlYXJjaC5zcWwKQEAg LTUzOSwzICs1MzksNzUgQEAgY3JlYXRlIGluZGV4IHBocmFzZV9pbmRleF90ZXN0X2lkeCBvbiBw aHJhc2VfaW5kZXhfdGVzdCB1c2luZyBnaW4oZnRzKTsKIHNldCBlbmFibGVfc2Vxc2NhbiA9IG9m ZjsKIHNlbGVjdCAqIGZyb20gcGhyYXNlX2luZGV4X3Rlc3Qgd2hlcmUgZnRzIEBAIHBocmFzZXRv X3RzcXVlcnkoJ2VuZ2xpc2gnLCAnZmF0IGNhdCcpOwogc2V0IGVuYWJsZV9zZXFzY2FuID0gb247 CisKKy0tIHRlc3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkgZnVuY3Rpb24KK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ0kgaGF2ZSBhIGZhdDoqQUJDRCBjYXQnKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ29yYW5nZToqKkFBQkJDQ0REJyk7Citz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQ6QSFjYXQ6QnxyYXQ6Qzwn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdDpBIDogY2F0OkIn KTsKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIDogZGVmJyk7 CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhYmM6ZGVmJyk7CitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhOjo6YicpOworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnOicpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ2VuZ2xpc2gnLCAnTXkgYnJhbmQgbmV3IHNtYXJ0cGhvbmUnKTsKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdNeSBicmFuZCAibmV3IHNtYXJ0cGhvbmUiJyk7 CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnTXkgYnJhbmQgIm5ldyAt c21hcnRwaG9uZSInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdN eSBicmFuZDpCICJuZXcgLXNtYXJ0cGhvbmUiJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJ2NhdCBvciByYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnc2ltcGxlJywgJ2NhdCBPUiByYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2NhdCAiT1IiIHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnY2F0IE9SJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICdPUiByYXQnKTsKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnImZh dCBjYXQgT1IgcmF0IicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn ZmF0IChjYXQgT1IgcmF0Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICdmYXQqcmF0Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQt cmF0Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXRfcmF0Jyk7 CisKKy0tIE9SIGlzIGFuIG9wZXJhdG9yIGhlcmUgLi4uCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ3NpbXBsZScsICciZmF0IGNhdCJvciJmYXQgcmF0IicpOworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yKHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yKXJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yJnJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yfHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdzaW1wbGUnLCAnZmF0IG9yIXJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnZmF0IG9yPHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1w bGUnLCAnZmF0IG9yPnJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUn LCAnZmF0IG9yICcpOworCistLSAuLi4gYnV0IG5vdCBoZXJlCitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ3NpbXBsZScsICdhYmMgb3JhbmdlJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ3NpbXBsZScsICdhYmMgb3LRgtC10YHRgicpOworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIE9SMTIzNCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnYWJjIG9yLWFiYycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdzaW1wbGUnLCAnYWJjIE9SX2FiYycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnYWJjIG9yJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxl JywgJ29yIE9SIG9yJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcs ICciQSBmYXQgY2F0IiBoYXMganVzdCBlYXRlbiBhIC1yYXQuJyk7CitzZWxlY3Qgd2Vic2VhcmNo X3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgZWF0ZW4gT1IgIXJh dC4nKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSBmYXQgY2F0 IiBoYXMganVzdCAoK2VhdGVuIE9SIC1yYXQpJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnZW5nbGlzaCcsICd0aGlzIGlzIC0tLS1maW5lJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ2VuZ2xpc2gnLCAnKCgpKSApKSkpIHRoaXMgfHx8IGlzICYmIC1maW5lLCAiZGVh ciBmcmllbmQiIE9SIGdvb2QnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlz aCcsICdhbiBvbGQgPC0+IGNhdCAiIGlzIGZpbmUgJiYmIHRvbycpOworCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgdGhlIiBPUiBqdXN0IG9uJyk7CitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7RiNC6 0LAiINGB0YrQtdC70LAg0LrRgNGL0YHRgycpOworCitzZWxlY3QgdG9fdHN2ZWN0b3IoJ3J1c3Np YW4nLCAn0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwINC60YDRi9GB0YMnKSBA QAord2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7R iNC60LAiINGB0YrQtdC70LAg0LrRgNGL0YHRgycpOworCitzZWxlY3QgdG9fdHN2ZWN0b3IoJ3J1 c3NpYW4nLCAn0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDRgdC10YDQsNGPINC60L7RiNC60LAg 0LrRgNGL0YHRgycpIEBACit3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC7 0YHRgtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisKKy0tIGNhc2Vz IGhhbmRsZWQgYnkgZ2V0dG9rZW5fdHN2ZWN0b3IoKQorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCcnJycpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcnJ2FiYycnJydkZWYnJycp Oworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdcYWJjJyk7CitzZWxlY3Qgd2Vic2VhcmNo X3RvX3RzcXVlcnkoJ1wnKTsK --=_ceebbc087bb3a971adae882c05af7ccd--