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 1f2cRz-0004AM-EX for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Apr 2018 12:51:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f2cRx-0006q4-UY for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Apr 2018 12:51:09 +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 1f2cRx-0006pv-Az for pgsql-hackers@lists.postgresql.org; Sun, 01 Apr 2018 12:51:09 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f2cRt-0002lT-9Z for pgsql-hackers@lists.postgresql.org; Sun, 01 Apr 2018 12:51:08 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 335AB21C1CE8; Sun, 1 Apr 2018 15:51:04 +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 D8DF921C1CE7; Sun, 1 Apr 2018 15:51:03 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1522587063; bh=98RuHYAOPFmgSaN+Kw/lmaMA11hjUOnbMA7cORwLLdE=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=Uh2mKnsR4jivSA0jkLNvjyluV6cbFJSBup2xdSaFOjV/mhGqBUYjzdcEJdmv5P0tc f5Cms2dthgfwyZnyJtV4oBHjONwrSopUffNwZ9NdWvpD1QKKcmwE5P/8enFYlig8lE m6sPYBFjLkR2WMtbV2YF5q6wVvN4KIZpH1Nz23N4= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_bbb14a96e4b68ebe2cf7e82470d8d42c" Date: Sun, 01 Apr 2018 15:51:03 +0300 From: Aleksandr Parfenov To: Aleksander Alekseev Cc: Dmitry Ivanov , Thomas Munro , David Steele , PostgreSQL Hackers Subject: Re: new function for tsquery creartion In-Reply-To: <20180328092115.GA32581@e733.localdomain> 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> Message-ID: <8829c490d0e17b6033b3fd622dfeed1e@postgrespro.ru> X-Sender: a.parfenov@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_bbb14a96e4b68ebe2cf7e82470d8d42c Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello hackers, On 2018-03-28 12:21, Aleksander Alekseev wrote: > It doesn't sound right to me to accept any input as a general rule but > sometimes return errors nevertheless. That API would be complicated for > the users. Thus I suggest to accept any garbage and try our best to > interpret it. 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(). I'm also read through the patch and all the code looks good to me except one thing. 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. -- Aleksandr Parfenov Postgres Professional: http://www.postgrespro.com Russian Postgres Company --=_bbb14a96e4b68ebe2cf7e82470d8d42c Content-Transfer-Encoding: base64 Content-Type: text/x-diff; charset=us-ascii; name=websearch_to_tsquery_v3.diff Content-Disposition: attachment; filename=websearch_to_tsquery_v3.diff; size=36085 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 Y2NiZjc5MDMwLi4wMGU2MjE4NjkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv dHNxdWVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3F1ZXJ5LmMKQEAgLTMyLDEy ICszMiwyNCBAQCBjb25zdCBpbnQJdHNlYXJjaF9vcF9wcmlvcml0eVtPUF9DT1VOVF0gPQogCTMJ CQkJCQkJLyogT1BfUEhSQVNFICovCiB9OwogCisvKgorICogcGFyc2VyJ3Mgc3RhdGVzCisgKi8K K3R5cGVkZWYgZW51bQoreworCVdBSVRPUEVSQU5EID0gMSwKKwlXQUlUT1BFUkFUT1IgPSAyLAor CVdBSVRGSVJTVE9QRVJBTkQgPSAzLAorCVdBSVRTSU5HTEVPUEVSQU5EID0gNCwKKwlJTlFVT1RF UyA9IDUgLyogZm9yIHF1b3RlZCBwaHJhc2VzIGluIHdlYiBzZWFyY2ggKi8KK30gUXVlcnlQYXJz ZXJTdGF0ZTsKKwogc3RydWN0IFRTUXVlcnlQYXJzZXJTdGF0ZURhdGEKIHsKIAkvKiBTdGF0ZSBm b3IgZ2V0dG9rZW5fcXVlcnkgKi8KIAljaGFyCSAgICpidWZmZXI7CQkJLyogZW50aXJlIHN0cmlu ZyB3ZSBhcmUgc2Nhbm5pbmcgKi8KIAljaGFyCSAgICpidWY7CQkJLyogY3VycmVudCBzY2FuIHBv aW50ICovCi0JaW50CQkJc3RhdGU7CisJUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZTsKIAlpbnQJCQlj b3VudDsJCQkvKiBuZXN0aW5nIGNvdW50LCBpbmNyZW1lbnRlZCBieSAoLAogCQkJCQkJCQkgKiBk ZWNyZW1lbnRlZCBieSApICovCiAKQEAgLTU3LDEyICs2OSw2IEBAIHN0cnVjdCBUU1F1ZXJ5UGFy c2VyU3RhdGVEYXRhCiAJVFNWZWN0b3JQYXJzZVN0YXRlIHZhbHN0YXRlOwogfTsKIAotLyogcGFy c2VyJ3Mgc3RhdGVzICovCi0jZGVmaW5lIFdBSVRPUEVSQU5EIDEKLSNkZWZpbmUgV0FJVE9QRVJB VE9SCTIKLSNkZWZpbmUgV0FJVEZJUlNUT1BFUkFORCAzCi0jZGVmaW5lIFdBSVRTSU5HTEVPUEVS QU5EIDQKLQogLyoKICAqIHN1YnJvdXRpbmUgdG8gcGFyc2UgdGhlIG1vZGlmaWVycyAod2VpZ2h0 IGFuZCBwcmVmaXggZmxhZyBjdXJyZW50bHkpCiAgKiBwYXJ0LCBsaWtlICc6QUIqJyBvZiBhIHF1 ZXJ5LgpAQCAtMTk3LDYgKzIwMywyMSBAQCBlcnI6CiAJcmV0dXJuIGJ1ZjsKIH0KIAorLyoKKyAq IFBhcnNlIE9SIG9wZXJhdG9yIHVzZWQgaW4gd2Vic2VhcmNoX3RvX3RzcXVlcnkoKS4KKyAqLwor c3RhdGljIGJvb2wKK3BhcnNlX29yX29wZXJhdG9yKGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gKHRf aXNlcSgmYnVmWzBdLCAnbycpIHx8IHRfaXNlcSgmYnVmWzBdLCAnTycpKSAmJgorCQkgICAodF9p c2VxKCZidWZbMV0sICdyJykgfHwgdF9pc2VxKCZidWZbMV0sICdSJykpICYmCisJCSAgIChidWZb Ml0gIT0gJ1wwJyAmJgorCQkJCSF0X2lzZXEoJmJ1ZlsyXSwgJy0nKSAmJgorCQkJCSF0X2lzZXEo JmJ1ZlsyXSwgJ18nKSAmJgorCQkJCSF0X2lzYWxwaGEoJmJ1ZlsyXSkgJiYKKwkJCQkhdF9pc2Rp Z2l0KCZidWZbMl0pKTsKK30KKwogLyoKICAqIHRva2VuIHR5cGVzIGZvciBwYXJzaW5nCiAgKi8K QEAgLTIyMCw4ICsyNDEsOCBAQCB0eXBlZGVmIGVudW0KICAqLwogc3RhdGljIHRzX3Rva2VudHlw ZQogZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAotCQkJICAgaW50OCAq b3BlcmF0b3IsCi0JCQkgICBpbnQgKmxlbnZhbCwgY2hhciAqKnN0cnZhbCwgaW50MTYgKndlaWdo dCwgYm9vbCAqcHJlZml4KQorCQkJICAgaW50OCAqb3BlcmF0b3IsIGludCAqbGVudmFsLCBjaGFy ICoqc3RydmFsLAorCQkJICAgaW50MTYgKndlaWdodCwgYm9vbCAqcHJlZml4LCBib29sIGlzd2Vi KQogewogCSp3ZWlnaHQgPSAwOwogCSpwcmVmaXggPSBmYWxzZTsKQEAgLTIzMiw3ICsyNTMsOCBA QCBnZXR0b2tlbl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCiAJCXsKIAkJCWNhc2Ug V0FJVEZJUlNUT1BFUkFORDoKIAkJCWNhc2UgV0FJVE9QRVJBTkQ6Ci0JCQkJaWYgKHRfaXNlcShz dGF0ZS0+YnVmLCAnIScpKQorCQkJCWlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJyEnKSB8fAorCQkJ CQkoaXN3ZWIgJiYgdF9pc2VxKHN0YXRlLT5idWYsICctJykpKQogCQkJCXsKIAkJCQkJKHN0YXRl LT5idWYpKys7IC8qIGNhbiBzYWZlbHkgKyssIHRfaXNlcSBndWFyYW50ZWUgdGhhdAogCQkJCQkJ CQkJICogcGdfbWJsZW4oKT09MSAqLwpAQCAtMjQ5LDExICsyNzEsNTUgQEAgZ2V0dG9rZW5fcXVl cnkoVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCQkJCX0KIAkJCQllbHNlIGlmICh0X2lzZXEo c3RhdGUtPmJ1ZiwgJzonKSkKIAkJCQl7CisJCQkJCWlmIChpc3dlYikKKwkJCQkJeworCQkJCQkJ LyogaXQgZG9lc24ndCBtZWFuIGFueXRoaW5nICovCisJCQkJCQkoc3RhdGUtPmJ1ZikrKzsKKwkJ CQkJCWNvbnRpbnVlOworCQkJCQl9CisKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJCQkJIGVycm1zZygic3ludGF4IGVycm9y IGluIHRzcXVlcnk6IFwiJXNcIiIsCiAJCQkJCQkJCQlzdGF0ZS0+YnVmZmVyKSkpOwogCQkJCX0K KwkJCQllbHNlIGlmIChpc3dlYiAmJiB0X2lzZXEoc3RhdGUtPmJ1ZiwgJyknKSkKKwkJCQl7CisJ CQkJCWlmIChzdGF0ZS0+Y291bnQgPT0gMCkKKwkJCQkJeworCQkJCQkJLyogd2ViIHNlYXJjaCB0 b2xlcmF0ZXMgdXNlbGVzcyBjbG9zaW5nIHBhcmFudGhlc2VzICovCisJCQkJCQkoc3RhdGUtPmJ1 ZikrKzsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCShzdGF0ZS0+YnVmKSsrOworCQkJ CQlzdGF0ZS0+Y291bnQtLTsKKwkJCQkJcmV0dXJuIFBUX0NMT1NFOworCQkJCX0KKwkJCQllbHNl IGlmIChpc3dlYiAmJgorCQkJCQkJCSh0X2lzZXEoc3RhdGUtPmJ1ZiwgJyYnKSB8fAorCQkJCQkJ CSB0X2lzZXEoc3RhdGUtPmJ1ZiwgJ3wnKSB8fAorCQkJCQkJCSB0X2lzZXEoc3RhdGUtPmJ1Ziwg JzwnKSkpCisJCQkJeworCQkJCQkvKiBvciBlbHNlIGdldHRva2VuX3RzdmVjdG9yKCkgd2lsbCBy YWlzZSBhbiBlcnJvciAqLworCQkJCQkoc3RhdGUtPmJ1ZikrKzsKKwkJCQkJY29udGludWU7CisJ CQkJfQorCQkJCWVsc2UgaWYgKGlzd2ViICYmIHRfaXNlcShzdGF0ZS0+YnVmLCAnIicpKQorCQkJ CXsKKwkJCQkJLyogcXVvdGVkIHRleHQgc2hvdWxkIGJlIG9yZGVyZWQgKDwtPikgKi8KKwkJCQkJ Y2hhciAqcXVvdGUgPSBzdHJjaHIoc3RhdGUtPmJ1ZiArIDEsICciJyk7CisJCQkJCWlmIChxdW90 ZSA9PSBOVUxMKQorCQkJCQl7CisJCQkJCQkvKiB3ZWIgc2VhcmNoIHRvbGVyYXRlcyBtaXNzaW5n IHF1b3RlcyB0b28gKi8KKwkJCQkJCXN0YXRlLT5idWYrKzsKKwkJCQkJCWNvbnRpbnVlOworCQkJ CQl9CisJCQkJCSpzdHJ2YWwgPSBzdGF0ZS0+YnVmICsgMTsKKwkJCQkJKmxlbnZhbCA9IHF1b3Rl IC0gKnN0cnZhbDsKKwkJCQkJc3RhdGUtPmJ1ZiA9IHF1b3RlICsgMTsKKwkJCQkJc3RhdGUtPnN0 YXRlID0gSU5RVU9URVM7CisJCQkJCXJldHVybiBQVF9WQUw7CisJCQkJfQogCQkJCWVsc2UgaWYg KCF0X2lzc3BhY2Uoc3RhdGUtPmJ1ZikpCiAJCQkJewogCQkJCQkvKgpAQCAtMjY5LDYgKzMzNSwx NiBAQCBnZXR0b2tlbl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCiAJCQkJCX0KIAkJ CQkJZWxzZSBpZiAoc3RhdGUtPnN0YXRlID09IFdBSVRGSVJTVE9QRVJBTkQpCiAJCQkJCQlyZXR1 cm4gUFRfRU5EOworCQkJCQllbHNlIGlmIChpc3dlYikKKwkJCQkJeworCQkJCQkJaWYgKHN0YXRl LT5jb3VudCA+IDApCisJCQkJCQkJLyogZGVjcmVtZW50IHBlciBlYWNoIHBhcmVudGhlc2VzIGxl dmVsIChzZWUgUFRfT1BFTikgKi8KKwkJCQkJCQlzdGF0ZS0+Y291bnQtLTsKKwkJCQkJCWVsc2UK KwkJCQkJCQkvKiBmaW5hbGx5LCB3ZSBoYXZlIHRvIHByb3ZpZGUgYW4gb3BlcmFuZCAqLworCQkJ CQkJCXB1c2hTdG9wKHN0YXRlKTsKKwkJCQkJCXJldHVybiBQVF9FTkQ7CisJCQkJCX0KIAkJCQkJ ZWxzZQogCQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLApAQCAtMjkxLDI2ICszNjcsNjEgQEAgZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBh cnNlclN0YXRlIHN0YXRlLAogCQkJCQkoc3RhdGUtPmJ1ZikrKzsKIAkJCQkJcmV0dXJuIFBUX09Q UjsKIAkJCQl9Ci0JCQkJZWxzZSBpZiAodF9pc2VxKHN0YXRlLT5idWYsICc8JykpCisJCQkJZWxz ZSBpZiAoaXN3ZWIgJiYgcGFyc2Vfb3Jfb3BlcmF0b3Ioc3RhdGUtPmJ1ZikpCiAJCQkJewogCQkJ CQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFORDsKLQkJCQkJKm9wZXJhdG9yID0gT1BfUEhSQVNF OwotCQkJCQkvKiB3ZWlnaHQgdmFyIGlzIHVzZWQgYXMgc3RvcmFnZSBmb3IgZGlzdGFuY2UgKi8K LQkJCQkJc3RhdGUtPmJ1ZiA9IHBhcnNlX3BocmFzZV9vcGVyYXRvcihzdGF0ZS0+YnVmLCB3ZWln aHQpOwotCQkJCQlpZiAoKndlaWdodCA8IDApCisJCQkJCSpvcGVyYXRvciA9IE9QX09SOworCQkJ CQkoc3RhdGUtPmJ1ZikgKz0gMjsgLyogc3RybGVuKCJPUiIpICovCisJCQkJCXJldHVybiBQVF9P UFI7CisJCQkJfQorCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAnPCcpKQorCQkJCXsK KwkJCQkJaW50MTYJZGlzdGFuY2U7CisJCQkJCWNoYXIgICAqcGhyYXNlID0gcGFyc2VfcGhyYXNl X29wZXJhdG9yKHN0YXRlLT5idWYsICZkaXN0YW5jZSk7CisJCQkJCWlmIChkaXN0YW5jZSA8IDAp CisJCQkJCXsKKwkJCQkJCWlmIChpc3dlYikKKwkJCQkJCXsKKwkJCQkJCQkvKiB3ZWIgc2VhcmNo IHRvbGVyYXRlcyBicm9rZW4gcGhyYXNlIG9wZXJhdG9yICovCisJCQkJCQkJKHN0YXRlLT5idWYp Kys7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CiAJCQkJCQlyZXR1cm4gUFRfRVJSOworCQkJ CQl9CisJCQkJCXN0YXRlLT5idWYgPSBwaHJhc2U7CisJCQkJCSpvcGVyYXRvciA9IE9QX1BIUkFT RTsKKwkJCQkJKndlaWdodCA9IGRpc3RhbmNlOyAvKiB3ZWlnaHQgdmFyIGlzIHVzZWQgYXMgc3Rv cmFnZSBmb3IgZGlzdGFuY2UgKi8KKwkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CiAJ CQkJCXJldHVybiBQVF9PUFI7CiAJCQkJfQogCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+YnVm LCAnKScpKQogCQkJCXsKKwkJCQkJaWYgKGlzd2ViICYmIHN0YXRlLT5jb3VudCA9PSAwKQorCQkJ CQl7CisJCQkJCQkvKiB3ZWIgc2VhcmNoIHRvbGVyYXRlcyB1c2VsZXNzIGNsb3NpbmcgcGFyZW50 aGVzZXMgKi8KKwkJCQkJCShzdGF0ZS0+YnVmKSsrOworCQkJCQkJY29udGludWU7CisJCQkJCX0K IAkJCQkJKHN0YXRlLT5idWYpKys7CiAJCQkJCXN0YXRlLT5jb3VudC0tOwogCQkJCQlyZXR1cm4g KHN0YXRlLT5jb3VudCA8IDApID8gUFRfRVJSIDogUFRfQ0xPU0U7CiAJCQkJfQogCQkJCWVsc2Ug aWYgKCooc3RhdGUtPmJ1ZikgPT0gJ1wwJykKLQkJCQkJcmV0dXJuIChzdGF0ZS0+Y291bnQpID8g UFRfRVJSIDogUFRfRU5EOworCQkJCXsKKwkJCQkJLyogd2ViIHNlYXJjaCB0b2xlcmF0ZXMgdW5l eHBlY3RlZCBlbmQgb2YgbGluZSAqLworCQkJCQlyZXR1cm4gKCFpc3dlYiAmJiBzdGF0ZS0+Y291 bnQpID8gUFRfRVJSIDogUFRfRU5EOworCQkJCX0KIAkJCQllbHNlIGlmICghdF9pc3NwYWNlKHN0 YXRlLT5idWYpKQorCQkJCXsKKwkJCQkJaWYgKGlzd2ViKQorCQkJCQl7CisJCQkJCQkvKiBwdXQg aW1wbGljaXQgQU5EIGlmIHRoZXJlJ3Mgbm8gb3BlcmF0b3IgKi8KKwkJCQkJCSpvcGVyYXRvciA9 IE9QX0FORDsKKwkJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOworCQkJCQkJcmV0dXJu IFBUX09QUjsKKwkJCQkJfQogCQkJCQlyZXR1cm4gUFRfRVJSOworCQkJCX0KIAkJCQlicmVhazsK IAkJCWNhc2UgV0FJVFNJTkdMRU9QRVJBTkQ6CiAJCQkJaWYgKCooc3RhdGUtPmJ1ZikgPT0gJ1ww JykKQEAgLTMyMCw5ICs0MzEsMTAgQEAgZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0YXRl IHN0YXRlLAogCQkJCXN0YXRlLT5idWYgKz0gc3RybGVuKHN0YXRlLT5idWYpOwogCQkJCXN0YXRl LT5jb3VudCsrOwogCQkJCXJldHVybiBQVF9WQUw7Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiBQ VF9FUlI7Ci0JCQkJYnJlYWs7CisJCQljYXNlIElOUVVPVEVTOgorCQkJCS8qIHBocmFzZSBzaG91 bGQgYmUgZm9sbG93ZWQgYnkgYW4gb3BlcmF0b3IgKi8KKwkJCQlzdGF0ZS0+c3RhdGUgPSBXQUlU T1BFUkFUT1I7CisJCQkJY29udGludWU7CiAJCX0KIAkJc3RhdGUtPmJ1ZiArPSBwZ19tYmxlbihz dGF0ZS0+YnVmKTsKIAl9CkBAIC00NzUsNyArNTg3LDggQEAgY2xlYW5PcFN0YWNrKFRTUXVlcnlQ YXJzZXJTdGF0ZSBzdGF0ZSwKIHN0YXRpYyB2b2lkCiBtYWtlcG9sKFRTUXVlcnlQYXJzZXJTdGF0 ZSBzdGF0ZSwKIAkJUHVzaEZ1bmN0aW9uIHB1c2h2YWwsCi0JCURhdHVtIG9wYXF1ZSkKKwkJRGF0 dW0gb3BhcXVlLAorCQlib29sIGlzd2ViKQogewogCWludDgJCW9wZXJhdG9yID0gMDsKIAl0c190 b2tlbnR5cGUgdHlwZTsKQEAgLTQ4OSwxOSArNjAyLDIxIEBAIG1ha2Vwb2woVFNRdWVyeVBhcnNl clN0YXRlIHN0YXRlLAogCS8qIHNpbmNlIHRoaXMgZnVuY3Rpb24gcmVjdXJzZXMsIGl0IGNvdWxk IGJlIGRyaXZlbiB0byBzdGFjayBvdmVyZmxvdyAqLwogCWNoZWNrX3N0YWNrX2RlcHRoKCk7CiAK LQl3aGlsZSAoKHR5cGUgPSBnZXR0b2tlbl9xdWVyeShzdGF0ZSwgJm9wZXJhdG9yLCAmbGVudmFs LCAmc3RydmFsLCAmd2VpZ2h0LCAmcHJlZml4KSkgIT0gUFRfRU5EKQorCXdoaWxlICgodHlwZSA9 IGdldHRva2VuX3F1ZXJ5KHN0YXRlLCAmb3BlcmF0b3IsICZsZW52YWwsICZzdHJ2YWwsCisJCQkJ CQkJCSAgJndlaWdodCwgJnByZWZpeCwgaXN3ZWIpKSAhPSBQVF9FTkQpCiAJewogCQlzd2l0Y2gg KHR5cGUpCiAJCXsKIAkJCWNhc2UgUFRfVkFMOgotCQkJCXB1c2h2YWwob3BhcXVlLCBzdGF0ZSwg c3RydmFsLCBsZW52YWwsIHdlaWdodCwgcHJlZml4KTsKKwkJCQlwdXNodmFsKG9wYXF1ZSwgc3Rh dGUsIHN0cnZhbCwgbGVudmFsLCB3ZWlnaHQsIHByZWZpeCwKKwkJCQkJCXN0YXRlLT5zdGF0ZSA9 PSBJTlFVT1RFUyAvKiBmb3JjZSBwaHJhc2Ugb3BlcmF0b3IgKi8pOwogCQkJCWJyZWFrOwogCQkJ Y2FzZSBQVF9PUFI6CiAJCQkJY2xlYW5PcFN0YWNrKHN0YXRlLCBvcHN0YWNrLCAmbGVuc3RhY2ss IG9wZXJhdG9yKTsKIAkJCQlwdXNoT3BTdGFjayhvcHN0YWNrLCAmbGVuc3RhY2ssIG9wZXJhdG9y LCB3ZWlnaHQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBQVF9PUEVOOgotCQkJCW1ha2Vwb2woc3Rh dGUsIHB1c2h2YWwsIG9wYXF1ZSk7CisJCQkJbWFrZXBvbChzdGF0ZSwgcHVzaHZhbCwgb3BhcXVl LCBpc3dlYik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFBUX0NMT1NFOgogCQkJCWNsZWFuT3BTdGFj ayhzdGF0ZSwgb3BzdGFjaywgJmxlbnN0YWNrLCBPUF9PUiAvKiBsb3dlc3QgKi8gKTsKQEAgLTYw NSw3ICs3MjAsOCBAQCBUU1F1ZXJ5CiBwYXJzZV90c3F1ZXJ5KGNoYXIgKmJ1ZiwKIAkJCSAgUHVz aEZ1bmN0aW9uIHB1c2h2YWwsCiAJCQkgIERhdHVtIG9wYXF1ZSwKLQkJCSAgYm9vbCBpc3BsYWlu KQorCQkJICBib29sIGlzcGxhaW4sCisJCQkgIGJvb2wgaXN3ZWIpCiB7CiAJc3RydWN0IFRTUXVl cnlQYXJzZXJTdGF0ZURhdGEgc3RhdGU7CiAJaW50CQkJaTsKQEAgLTYyMyw3ICs3MzksNyBAQCBw YXJzZV90c3F1ZXJ5KGNoYXIgKmJ1ZiwKIAlzdGF0ZS5wb2xzdHIgPSBOSUw7CiAKIAkvKiBpbml0 IHZhbHVlIHBhcnNlcidzIHN0YXRlICovCi0Jc3RhdGUudmFsc3RhdGUgPSBpbml0X3RzdmVjdG9y X3BhcnNlcihzdGF0ZS5idWZmZXIsIHRydWUsIHRydWUpOworCXN0YXRlLnZhbHN0YXRlID0gaW5p dF90c3ZlY3Rvcl9wYXJzZXIoc3RhdGUuYnVmZmVyLCB0cnVlLCB0cnVlLCBpc3dlYik7CiAKIAkv KiBpbml0IGxpc3Qgb2Ygb3BlcmFuZCAqLwogCXN0YXRlLnN1bWxlbiA9IDA7CkBAIC02MzIsNyAr NzQ4LDcgQEAgcGFyc2VfdHNxdWVyeShjaGFyICpidWYsCiAJKihzdGF0ZS5jdXJvcCkgPSAnXDAn OwogCiAJLyogcGFyc2UgcXVlcnkgJiBtYWtlIHBvbGlzaCBub3RhdGlvbiAocG9zdGZpeCwgYnV0 IGluIHJldmVyc2Ugb3JkZXIpICovCi0JbWFrZXBvbCgmc3RhdGUsIHB1c2h2YWwsIG9wYXF1ZSk7 CisJbWFrZXBvbCgmc3RhdGUsIHB1c2h2YWwsIG9wYXF1ZSwgaXN3ZWIpOwogCiAJY2xvc2VfdHN2 ZWN0b3JfcGFyc2VyKHN0YXRlLnZhbHN0YXRlKTsKIApAQCAtNzAzLDcgKzgxOSw3IEBAIHBhcnNl X3RzcXVlcnkoY2hhciAqYnVmLAogCiBzdGF0aWMgdm9pZAogcHVzaHZhbF9hc2lzKERhdHVtIG9w YXF1ZSwgVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLCBjaGFyICpzdHJ2YWwsIGludCBsZW52YWws Ci0JCQkgaW50MTYgd2VpZ2h0LCBib29sIHByZWZpeCkKKwkJCSBpbnQxNiB3ZWlnaHQsIGJvb2wg cHJlZml4LCBib29sIGlzcGhyYXNlKQogewogCXB1c2hWYWx1ZShzdGF0ZSwgc3RydmFsLCBsZW52 YWwsIHdlaWdodCwgcHJlZml4KTsKIH0KQEAgLTcxNiw3ICs4MzIsNyBAQCB0c3F1ZXJ5aW4oUEdf RlVOQ1RJT05fQVJHUykKIHsKIAljaGFyCSAgICppbiA9IFBHX0dFVEFSR19DU1RSSU5HKDApOwog Ci0JUEdfUkVUVVJOX1RTUVVFUlkocGFyc2VfdHNxdWVyeShpbiwgcHVzaHZhbF9hc2lzLCBQb2lu dGVyR2V0RGF0dW0oTlVMTCksIGZhbHNlKSk7CisJUEdfUkVUVVJOX1RTUVVFUlkocGFyc2VfdHNx dWVyeShpbiwgcHVzaHZhbF9hc2lzLCBQb2ludGVyR2V0RGF0dW0oTlVMTCksIGZhbHNlLCBmYWxz ZSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9y LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3IuYwppbmRleCA2NGUwMmVmNDM0Li4z OTVhMzI2NTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3IuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3IuYwpAQCAtMjAwLDcgKzIwMCw3IEBA IHRzdmVjdG9yaW4oUEdfRlVOQ1RJT05fQVJHUykKIAljaGFyCSAgICpjdXI7CiAJaW50CQkJYnVm bGVuID0gMjU2OwkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiB0bXBidWYgKi8KIAotCXN0YXRlID0gaW5p dF90c3ZlY3Rvcl9wYXJzZXIoYnVmLCBmYWxzZSwgZmFsc2UpOworCXN0YXRlID0gaW5pdF90c3Zl Y3Rvcl9wYXJzZXIoYnVmLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAogCWFycmxlbiA9IDY0Owog CWFyciA9IChXb3JkRW50cnlJTiAqKSBwYWxsb2Moc2l6ZW9mKFdvcmRFbnRyeUlOKSAqIGFycmxl bik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3JfcGFyc2VyLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3JfcGFyc2VyLmMKaW5kZXggNzM2N2JhNmE0 MC4uNjk5NGQ4MzJkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9y X3BhcnNlci5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9wYXJzZXIuYwpA QCAtMzMsOCArMzMsMjIgQEAgc3RydWN0IFRTVmVjdG9yUGFyc2VTdGF0ZURhdGEKIAlpbnQJCQll bWw7CQkJLyogbWF4IGJ5dGVzIHBlciBjaGFyYWN0ZXIgKi8KIAlib29sCQlvcHJpc2RlbGltOwkJ LyogdHJlYXQgISB8ICogKCApIGFzIGRlbGltaXRlcnM/ICovCiAJYm9vbAkJaXNfdHNxdWVyeTsJ CS8qIHNheSAidHNxdWVyeSIgbm90ICJ0c3ZlY3RvciIgaW4gZXJyb3JzPyAqLworCWJvb2wJCWln bm9yZV9lcnJvcnM7CS8qIGlnbm9yZSBlcnJvcnMgYW5kIGxvZyB0aGVtIGFzIHdhcm5pbmdzICov CiB9OwogCisvKiBTdGF0ZSBjb2RlcyB1c2VkIGluIGdldHRva2VuX3RzdmVjdG9yICovCit0eXBl ZGVmIGVudW0KK3sKKwlXQUlUV09SRCA9IDEsCisJV0FJVEVORFdPUkQgPSAyLAorCVdBSVRORVhU Q0hBUiA9IDMsCisJV0FJVEVORENNUExYID0gNCwKKwlXQUlUUE9TSU5GTyA9IDUsCisJSU5QT1NJ TkZPID0gNiwKKwlXQUlUUE9TREVMSU0gPSA3LAorCVdBSVRDSEFSQ01QTFggPSA4Cit9IFZlY3Rv clBhcnNlU3RhdGVzOworCiAKIC8qCiAgKiBJbml0aWFsaXplcyBwYXJzZXIgZm9yIHRoZSBpbnB1 dCBzdHJpbmcuIElmIG9wcmlzZGVsaW0gaXMgc2V0LCB0aGUKQEAgLTQyLDcgKzU2LDcgQEAgc3Ry dWN0IFRTVmVjdG9yUGFyc2VTdGF0ZURhdGEKICAqICEgfCAmICggKQogICovCiBUU1ZlY3RvclBh cnNlU3RhdGUKLWluaXRfdHN2ZWN0b3JfcGFyc2VyKGNoYXIgKmlucHV0LCBib29sIG9wcmlzZGVs aW0sIGJvb2wgaXNfdHNxdWVyeSkKK2luaXRfdHN2ZWN0b3JfcGFyc2VyKGNoYXIgKmlucHV0LCBi b29sIG9wcmlzZGVsaW0sIGJvb2wgaXNfdHNxdWVyeSwgYm9vbCBpZ25vcmVfZXJyb3JzKQogewog CVRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZTsKIApAQCAtNTQsNiArNjgsNyBAQCBpbml0X3RzdmVj dG9yX3BhcnNlcihjaGFyICppbnB1dCwgYm9vbCBvcHJpc2RlbGltLCBib29sIGlzX3RzcXVlcnkp CiAJc3RhdGUtPmVtbCA9IHBnX2RhdGFiYXNlX2VuY29kaW5nX21heF9sZW5ndGgoKTsKIAlzdGF0 ZS0+b3ByaXNkZWxpbSA9IG9wcmlzZGVsaW07CiAJc3RhdGUtPmlzX3RzcXVlcnkgPSBpc190c3F1 ZXJ5OworCXN0YXRlLT5pZ25vcmVfZXJyb3JzID0gaWdub3JlX2Vycm9yczsKIAogCXJldHVybiBz dGF0ZTsKIH0KQEAgLTExOSwyNyArMTM0LDI3IEBAIGRvIHsgXAogCXJldHVybiB0cnVlOyBcCiB9 IHdoaWxlKDApCiAKLQotLyogU3RhdGUgY29kZXMgdXNlZCBpbiBnZXR0b2tlbl90c3ZlY3RvciAq LwotI2RlZmluZSBXQUlUV09SRAkJMQotI2RlZmluZSBXQUlURU5EV09SRAkJMgotI2RlZmluZSBX QUlUTkVYVENIQVIJMwotI2RlZmluZSBXQUlURU5EQ01QTFgJNAotI2RlZmluZSBXQUlUUE9TSU5G TwkJNQotI2RlZmluZSBJTlBPU0lORk8JCTYKLSNkZWZpbmUgV0FJVFBPU0RFTElNCTcKLSNkZWZp bmUgV0FJVENIQVJDTVBMWAk4Ci0KICNkZWZpbmUgUFJTU1lOVEFYRVJST1IgcHJzc3ludGF4ZXJy b3Ioc3RhdGUpCiAKIHN0YXRpYyB2b2lkCiBwcnNzeW50YXhlcnJvcihUU1ZlY3RvclBhcnNlU3Rh dGUgc3RhdGUpCiB7Ci0JZXJlcG9ydChFUlJPUiwKLQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKLQkJCSBzdGF0ZS0+aXNfdHNxdWVyeSA/Ci0JCQkgZXJybXNnKCJzeW50YXggZXJy b3IgaW4gdHNxdWVyeTogXCIlc1wiIiwgc3RhdGUtPmJ1ZnN0YXJ0KSA6Ci0JCQkgZXJybXNnKCJz eW50YXggZXJyb3IgaW4gdHN2ZWN0b3I6IFwiJXNcIiIsIHN0YXRlLT5idWZzdGFydCkpKTsKKwlp ZiAoc3RhdGUtPmlnbm9yZV9lcnJvcnMpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCXN0YXRlLT5pc190c3F1ZXJ5ID8KKwkJ CQllcnJtc2coInN5bnRheCBlcnJvciBpbiB0c3F1ZXJ5OiBcIiVzXCIiLCBzdGF0ZS0+YnVmc3Rh cnQpIDoKKwkJCQllcnJtc2coInN5bnRheCBlcnJvciBpbiB0c3ZlY3RvcjogXCIlc1wiIiwgc3Rh dGUtPmJ1ZnN0YXJ0KSkpOworCX0KKwllbHNlCisJeworCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQlzdGF0ZS0+aXNfdHNxdWVyeSA/CisJ CQkJZXJybXNnKCJzeW50YXggZXJyb3IgaW4gdHNxdWVyeTogXCIlc1wiIiwgc3RhdGUtPmJ1ZnN0 YXJ0KSA6CisJCQkJZXJybXNnKCJzeW50YXggZXJyb3IgaW4gdHN2ZWN0b3I6IFwiJXNcIiIsIHN0 YXRlLT5idWZzdGFydCkpKTsKKwl9CiB9CiAKIApAQCAtMTY1LDkgKzE4MCw5IEBAIGdldHRva2Vu X3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZSwKIAkJCQkgIFdvcmRFbnRyeVBvcyAq KnBvc19wdHIsIGludCAqcG9zbGVuLAogCQkJCSAgY2hhciAqKmVuZHB0cikKIHsKLQlpbnQJCQlv bGRzdGF0ZSA9IDA7CisJVmVjdG9yUGFyc2VTdGF0ZXMgb2xkc3RhdGUgPSAwOwogCWNoYXIJICAg KmN1cnBvcyA9IHN0YXRlLT53b3JkOwotCWludAkJCXN0YXRlY29kZSA9IFdBSVRXT1JEOworCVZl Y3RvclBhcnNlU3RhdGVzIHN0YXRlY29kZSA9IFdBSVRXT1JEOwogCiAJLyoKIAkgKiBwb3MgaXMg Zm9yIGNvbGxlY3RpbmcgdGhlIGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIHBvc2l0aW9ucyBmb2xs b3dlZCBieQpAQCAtMjAyLDEwICsyMTcsMjMgQEAgZ2V0dG9rZW5fdHN2ZWN0b3IoVFNWZWN0b3JQ YXJzZVN0YXRlIHN0YXRlLAogCQllbHNlIGlmIChzdGF0ZWNvZGUgPT0gV0FJVE5FWFRDSEFSKQog CQl7CiAJCQlpZiAoKihzdGF0ZS0+cHJzYnVmKSA9PSAnXDAnKQotCQkJCWVyZXBvcnQoRVJST1Is Ci0JCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJCQkgZXJybXNnKCJ0 aGVyZSBpcyBubyBlc2NhcGVkIGNoYXJhY3RlcjogXCIlc1wiIiwKLQkJCQkJCQkJc3RhdGUtPmJ1 ZnN0YXJ0KSkpOworCQkJeworCQkJCWlmIChzdGF0ZS0+aWdub3JlX2Vycm9ycykKKwkJCQl7CisJ CQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJP UiksCisJCQkJCQkJZXJybXNnKCJ0aGVyZSBpcyBubyBlc2NhcGVkIGNoYXJhY3RlcjogXCIlc1wi IiwKKwkJCQkJCQkJCXN0YXRlLT5idWZzdGFydCkpKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJ CX0KKwkJCQllbHNlCisJCQkJeworCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2Rl KEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCQllcnJtc2coInRoZXJlIGlzIG5vIGVzY2Fw ZWQgY2hhcmFjdGVyOiBcIiVzXCIiLAorCQkJCQkJCQkJc3RhdGUtPmJ1ZnN0YXJ0KSkpOworCQkJ CX0KKwkJCX0KIAkJCWVsc2UKIAkJCXsKIAkJCQlSRVNJWkVQUlNCVUY7CkBAIC0yNjAsNyArMjg4 LDE1IEBAIGdldHRva2VuX3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VTdGF0ZSBzdGF0ZSwKIAkJCQlv bGRzdGF0ZSA9IFdBSVRFTkRDTVBMWDsKIAkJCX0KIAkJCWVsc2UgaWYgKCooc3RhdGUtPnByc2J1 ZikgPT0gJ1wwJykKKwkJCXsKKwkJCQlpZiAoc3RhdGUtPmlnbm9yZV9lcnJvcnMpCisJCQkJewor CQkJCQkvKiBQYXJzZSBhcyB0aGVyZSBpcyBhIGNsb3NpbmcgcXVvdGUgY2hhcmFjdGVyIGluIHRo ZSBlbmQgKi8KKwkJCQkJc3RhdGVjb2RlID0gV0FJVENIQVJDTVBMWDsKKwkJCQkJY29udGludWU7 CisJCQkJfQogCQkJCVBSU1NZTlRBWEVSUk9SOworCQkJfQogCQkJZWxzZQogCQkJewogCQkJCVJF U0laRVBSU0JVRjsKQEAgLTMxOSwxMCArMzU1LDIyIEBAIGdldHRva2VuX3RzdmVjdG9yKFRTVmVj dG9yUGFyc2VTdGF0ZSBzdGF0ZSwKIAkJCQlXRVBfU0VUUE9TKHBvc1tucG9zIC0gMV0sIExJTUlU UE9TKGF0b2koc3RhdGUtPnByc2J1ZikpKTsKIAkJCQkvKiB3ZSBjYW5ub3QgZ2V0IGhlcmUgaW4g dHNxdWVyeSwgc28gbm8gbmVlZCBmb3IgMiBlcnJtc2dzICovCiAJCQkJaWYgKFdFUF9HRVRQT1Mo cG9zW25wb3MgLSAxXSkgPT0gMCkKLQkJCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCQkoZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJCQkJIGVycm1zZygid3JvbmcgcG9zaXRpb24g aW5mbyBpbiB0c3ZlY3RvcjogXCIlc1wiIiwKLQkJCQkJCQkJCXN0YXRlLT5idWZzdGFydCkpKTsK KwkJCQl7CisJCQkJCWlmIChzdGF0ZS0+aWdub3JlX2Vycm9ycykKKwkJCQkJeworCQkJCQkJZXJl cG9ydChXQVJOSU5HLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJ CQkJCQkJCWVycm1zZygid3JvbmcgcG9zaXRpb24gaW5mbyBpbiB0c3ZlY3RvcjogXCIlc1wiIiwK KwkJCQkJCQkJCQlzdGF0ZS0+YnVmc3RhcnQpKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7 CisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9F UlJPUiksCisJCQkJCQkJCWVycm1zZygid3JvbmcgcG9zaXRpb24gaW5mbyBpbiB0c3ZlY3Rvcjog XCIlc1wiIiwKKwkJCQkJCQkJCQlzdGF0ZS0+YnVmc3RhcnQpKSk7CisJCQkJCX0KKwkJCQl9CiAJ CQkJV0VQX1NFVFdFSUdIVChwb3NbbnBvcyAtIDFdLCAwKTsKIAkJCQlzdGF0ZWNvZGUgPSBXQUlU UE9TREVMSU07CiAJCQl9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCmluZGV4IDkwZDk5NGM3MWEuLjU2MDQx NjYzNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCkBAIC00OTY2LDYgKzQ5NjYsOCBAQCBEQVRBKGlu c2VydCBPSUQgPSAzNzQ3ICggIHBsYWludG9fdHNxdWVyeQlQR05TUCBQR1VJRCAxMiAxMDAgMCAw IDAgZiBmIGYgdCBmIGkgcwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CiBEQVRBKGlu c2VydCBPSUQgPSA1MDA2ICggIHBocmFzZXRvX3RzcXVlcnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAg MCAwIGYgZiBmIHQgZiBpIHMgMiAwIDM2MTUgIjM3MzQgMjUiIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyBfbnVsbF8gcGhyYXNldG9fdHNxdWVyeV9ieWlkIF9udWxsXyBfbnVsbF8gX251bGxf ICkpOwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CitEQVRBKGluc2VydCBPSUQgPSA4 ODg5ICggIHdlYnNlYXJjaF90b190c3F1ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYg ZiAgdCBmIGkgcyAyIDAgMzYxNSAiMzczNCAyNSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyB3ZWJzZWFyY2hfdG9fdHNxdWVyeV9ieWlkIF9udWxsXyBfbnVsbF8gX251bGxfICkp OworREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CiBEQVRBKGluc2VydCBPSUQgPSAzNzQ5 ICggIHRvX3RzdmVjdG9yCQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAx IDAgMzYxNCAiMjUiIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gdG9fdHN2ZWN0 b3IgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigidHJhbnNmb3JtIHRvIHRzdmVjdG9y Iik7CiBEQVRBKGluc2VydCBPSUQgPSAzNzUwICggIHRvX3RzcXVlcnkJCVBHTlNQIFBHVUlEIDEy IDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1ICIyNSIgX251bGxfIF9udWxsXyBfbnVs bF8gX251bGxfIF9udWxsXyB0b190c3F1ZXJ5IF9udWxsXyBfbnVsbF8gX251bGxfICkpOwpAQCAt NDk3NCw2ICs0OTc2LDggQEAgREFUQShpbnNlcnQgT0lEID0gMzc1MSAoICBwbGFpbnRvX3RzcXVl cnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBzIHMKIERFU0NSKCJ0cmFuc2Zv cm0gdG8gdHNxdWVyeSIpOwogREFUQShpbnNlcnQgT0lEID0gNTAwMSAoICBwaHJhc2V0b190c3F1 ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1ICIyNSIg X251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwaHJhc2V0b190c3F1ZXJ5IF9udWxs XyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7CitEQVRB KGluc2VydCBPSUQgPSA4ODkwICggIHdlYnNlYXJjaF90b190c3F1ZXJ5CVBHTlNQIFBHVUlEIDEy IDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1ICIyNSIgX251bGxfIF9udWxsXyBfbnVs bF8gX251bGxfIF9udWxsXyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSBfbnVsbF8gX251bGxfIF9udWxs XyApKTsKK0RFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVyeSIpOwogREFUQShpbnNlcnQgT0lEID0g NDIwOSAoICB0b190c3ZlY3RvcgkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBz IHMgMSAwIDM2MTQgIjM4MDIiIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8ganNv bmJfdG9fdHN2ZWN0b3IgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigidHJhbnNmb3Jt IGpzb25iIHRvIHRzdmVjdG9yIik7CiBEQVRBKGluc2VydCBPSUQgPSA0MjEwICggIHRvX3RzdmVj dG9yCQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAxIDAgMzYxNCAiMTE0 IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIGpzb25fdG9fdHN2ZWN0b3IgX251 bGxfIF9udWxsXyBfbnVsbF8gKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90c2VhcmNoL3Rz X3V0aWxzLmggYi9zcmMvaW5jbHVkZS90c2VhcmNoL3RzX3V0aWxzLmgKaW5kZXggZjhkZGNlNWVj Yi4uMmU4MDViZmViMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdHNlYXJjaC90c191dGlscy5o CisrKyBiL3NyYy9pbmNsdWRlL3RzZWFyY2gvdHNfdXRpbHMuaApAQCAtMjcsNyArMjcsOCBAQCB0 eXBlZGVmIHN0cnVjdCBUU1ZlY3RvclBhcnNlU3RhdGVEYXRhICpUU1ZlY3RvclBhcnNlU3RhdGU7 CiAKIGV4dGVybiBUU1ZlY3RvclBhcnNlU3RhdGUgaW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAq aW5wdXQsCiAJCQkJCSBib29sIG9wcmlzZGVsaW0sCi0JCQkJCSBib29sIGlzX3RzcXVlcnkpOwor CQkJCQkgYm9vbCBpc190c3F1ZXJ5LAorCQkJCQkgYm9vbCBpZ25vcmVfZXJyb3JzKTsKIGV4dGVy biB2b2lkIHJlc2V0X3RzdmVjdG9yX3BhcnNlcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUsIGNo YXIgKmlucHV0KTsKIGV4dGVybiBib29sIGdldHRva2VuX3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VT dGF0ZSBzdGF0ZSwKIAkJCQkgIGNoYXIgKip0b2tlbiwgaW50ICpsZW4sCkBAIC00NCwxMSArNDUs MTIgQEAgdHlwZWRlZiB2b2lkICgqUHVzaEZ1bmN0aW9uKSAoRGF0dW0gb3BhcXVlLCBUU1F1ZXJ5 UGFyc2VyU3RhdGUgc3RhdGUsCiAJCQkJCQkJICBjaGFyICp0b2tlbiwgaW50IHRva2VubGVuLAog CQkJCQkJCSAgaW50MTYgdG9rZW53ZWlnaHRzLAkvKiBiaXRtYXAgYXMgZGVzY3JpYmVkIGluCiAJ CQkJCQkJCQkJCQkJICogUXVlcnlPcGVyYW5kIHN0cnVjdCAqLwotCQkJCQkJCSAgYm9vbCBwcmVm aXgpOworCQkJCQkJCSAgYm9vbCBwcmVmaXgsCisJCQkJCQkJICBib29sIGlzcGhyYXNlKTsKIAog ZXh0ZXJuIFRTUXVlcnkgcGFyc2VfdHNxdWVyeShjaGFyICpidWYsCiAJCQkgIFB1c2hGdW5jdGlv biBwdXNodmFsLAotCQkJICBEYXR1bSBvcGFxdWUsIGJvb2wgaXNwbGFpbik7CisJCQkgIERhdHVt IG9wYXF1ZSwgYm9vbCBpc3BsYWluLCBib29sIGlzd2ViKTsKIAogLyogRnVuY3Rpb25zIGZvciB1 c2UgYnkgUHVzaEZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyAqLwogZXh0ZXJuIHZvaWQgcHVzaFZh bHVlKFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0ZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvdHNlYXJjaC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RzZWFy Y2gub3V0CmluZGV4IGQ2M2ZiMTJmMWQuLmQ1ZDFiZGRhN2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvdHNlYXJjaC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC90c2VhcmNoLm91dApAQCAtMTY3MiwzICsxNjcyLDQ1NSBAQCBzZWxlY3QgKiBmcm9tIHBo cmFzZV9pbmRleF90ZXN0IHdoZXJlIGZ0cyBAQCBwaHJhc2V0b190c3F1ZXJ5KCdlbmdsaXNoJywg J2ZhdCBjYQogKDEgcm93KQogCiBzZXQgZW5hYmxlX3NlcXNjYW4gPSBvbjsKKy0tIHRlc3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkgZnVuY3Rpb24KK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn KCknKTsKK05PVElDRTogIHRleHQtc2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3Jk cyBvciBkb2Vzbid0IGNvbnRhaW4gbGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1 ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJygoKSknKTsKK05PVElDRTogIHRleHQtc2VhcmNoIHF1ZXJ5IGNvbnRh aW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vzbid0IGNvbnRhaW4gbGV4ZW1lcywgaWdub3JlZAor IHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJygpKCkoKScpOworTk9USUNFOiAgdGV4 dC1zZWFyY2ggcXVlcnkgY29udGFpbnMgb25seSBzdG9wIHdvcmRzIG9yIGRvZXNuJ3QgY29udGFp biBsZXhlbWVzLCBpZ25vcmVkCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWJj ICgpJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg J2FiYycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcoKSBhYmMnKTsK KyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJwor KDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2FiYyAmICgpJyk7Cisgd2Vi c2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcoKSAmIGFiYycpOworIHdlYnNlYXJj aF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnJycnKTsKK1dBUk5JTkc6ICBzeW50YXggZXJy b3IgaW4gdHNxdWVyeTogIiciCitOT1RJQ0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBv bmx5IHN0b3Agd29yZHMgb3IgZG9lc24ndCBjb250YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdcJyk7CitXQVJOSU5HOiAgdGhlcmUgaXMgbm8g ZXNjYXBlZCBjaGFyYWN0ZXI6ICJcIgorTk9USUNFOiAgdGV4dC1zZWFyY2ggcXVlcnkgZG9lc24n dCBjb250YWluIGxleGVtZXM6ICJcIgorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J1xcJyk7CitOT1RJQ0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IHN0b3Agd29y ZHMgb3IgZG9lc24ndCBjb250YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJzZWFyY2hfdG9fdHNx dWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdhYiAnJyBhYmMnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWInICYgJ2FiYycKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdhYiAnJyBhYmMnJycpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYicgJiAnYWJjJworKDEgcm93KQorCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2FiIFwgYWJjJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVl cnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiJyAmICdhYmMnCisoMSByb3cpCisKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWIgXFwgYWJjJyk7Cisgd2Vic2VhcmNoX3RvX3Rz cXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiJyAmICdhYmMnCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKCcpOworTk9USUNFOiAgdGV4dC1zZWFyY2gg cXVlcnkgY29udGFpbnMgb25seSBzdG9wIHdvcmRzIG9yIGRvZXNuJ3QgY29udGFpbiBsZXhlbWVz LCBpZ25vcmVkCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKCgnKTsKK05PVElD RTogIHRleHQtc2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vzbid0 IGNvbnRhaW4gbGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVl cnkoJygoKCAgKSkgYWJjIG9yIGRlZicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdhYmMnIHwgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCcpKScpOworTk9USUNFOiAgdGV4dC1zZWFyY2ggcXVlcnkgZG9lc24n dCBjb250YWluIGxleGVtZXM6ICIpKSIKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCcpJyk7CitOT1RJQ0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBkb2Vzbid0IGNvbnRhaW4gbGV4ZW1l czogIikiCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKSgnKTsKK05PVElDRTog IHRleHQtc2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vzbid0IGNv bnRhaW4gbGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko JyYgKSggfCcpOworTk9USUNFOiAgdGV4dC1zZWFyY2ggcXVlcnkgY29udGFpbnMgb25seSBzdG9w IHdvcmRzIG9yIGRvZXNuJ3QgY29udGFpbiBsZXhlbWVzLCBpZ25vcmVkCisgd2Vic2VhcmNoX3Rv X3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK3NlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWJjICkoIGRlZicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdhYmMgfCApKCAmIGRlZicpOworIHdlYnNlYXJjaF90 b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnIHwgJ2RlZicKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcmIGFiYycpOworIHdlYnNlYXJjaF90 b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnCisoMSByb3cpCisKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWJjICYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVy eSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3wgYWJjJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdhYmMgfCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICdhYmMnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnPCBhYmMnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAnYWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2FiYyA8 Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2Fi YycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdhOjo6YicpOworIHdl YnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdiJworKDEgcm93 KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ015IGJyYW5kIG5ldyBzbWFydHBob25l Jyk7CisgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgJ2JyYW5kJyAmICduZXcnICYgJ3NtYXJ0cGhvbicKKygxIHJvdykKKwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdNeSBicmFuZCAibmV3IHNtYXJ0cGhvbmUiJyk7 CisgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdicmFuZCcgJiAnbmV3JyA8LT4gJ3NtYXJ0cGhvbicKKygxIHJvdykK Kworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdNeSBicmFuZCAibmV3IC1zbWFydHBob25l IicpOworICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAnYnJhbmQnICYgJ25ldycgPC0+ICdzbWFydHBob24nCisoMSBy b3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnTXkgYnJhbmQ6QiAibmV3IC1zbWFy dHBob25lIicpOworICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2JyYW5kJzpCICYgJ25ldycgPC0+ICdzbWFy dHBob24nCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnTXkgYnJhbmQ6 WiAibmV3IC1zbWFydHBob25lIicpOworICAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYnJhbmQn ICYgJ3onICYgJ25ldycgPC0+ICdzbWFydHBob24nCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnTXkgJiAoYnJhbmQgKCJuZXcgLXNtYXJ0cGhvbmUiJyk7CisgICAgICB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICdicmFuZCcgJiAnbmV3JyA8LT4gJ3NtYXJ0cGhvbicKKygxIHJvdykKKworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdNeSAmIChicmFuZCAoIm5ldykgLXNtYXJ0cGhvbmUiJyk7 CisgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdicmFuZCcgJiAnbmV3JyA8LT4gJ3NtYXJ0cGhvbicKKygxIHJvdykK Kworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0IG9yIHJhdCcpOwor IHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdjYXQnIHwg J3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn Y2F0IE9SIHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICdjYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnY2F0ICJPUiIgcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2NhdCcgJiAnb3InICYgJ3JhdCcKKygxIHJvdykKKwor c2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0IE9SJyk7Cisgd2Vic2Vh cmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2NhdCcgJiAnb3InCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ09SIHJhdCcp OworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdvcicg JiAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICciZmF0IGNhdCBPUiByYXQiJyk7CisgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIDwtPiAnY2F0 JyA8LT4gJ29yJyA8LT4gJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnZmF0IChjYXQgT1IgcmF0Jyk7CisgICB3ZWJzZWFyY2hfdG9fdHNxdWVy eSAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnICYgKCAnY2F0JyB8ICdy YXQnICkKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn ZmF0KnJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICdmYXQnICYgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdzaW1wbGUnLCAnZmF0LXJhdCcpOworICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0LXJhdCcgJiAnZmF0JyAmICdyYXQnCisoMSBy b3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdF9yYXQnKTsK KyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAm ICdyYXQnCisoMSByb3cpCisKKy0tIE9SIGlzIGFuIG9wZXJhdG9yIGhlcmUgLi4uCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3IocmF0Jyk7Cisgd2Vic2VhcmNo X3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgfCAncmF0JworKDEg cm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3IpcmF0 Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2Zh dCcgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBs ZScsICdmYXQgb3ImcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgJ2ZhdCcgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3J8cmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgfCAncmF0JworKDEgcm93KQorCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3IhcmF0Jyk7Cisgd2Vic2Vh cmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgfCAhJ3JhdCcK KygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9y PHJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnZmF0IG9yPnJhdCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdmYXQnIHwgJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IG9yICcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnCisoMSByb3cpCisKKy0tIC4uLiBidXQg bm90IGhlcmUKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvcmFu Z2UnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAn YWJjJyAmICdvcmFuZ2UnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2FiYyBvctGC0LXRgdGCJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAnb3LRgtC10YHRgicKKygxIHJvdykKKworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIE9SMTIzNCcpOworIHdlYnNl YXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ29yMTIz NCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJj IG9yLWFiYycpOworICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvci1hYmMnICYgJ29yJyAmICdhYmMn CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBP Ul9hYmMnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnYWJjJyAmICdvcicgJiAnYWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ3NpbXBsZScsICdhYmMgb3InKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvcicKKygxIHJvdykKKworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnb3IgT1Igb3InKTsKKyB3ZWJzZWFyY2hfdG9fdHNx dWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnb3InIHwgJ29yJworKDEgcm93KQorCitz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1 c3QgZWF0ZW4gYSAtcmF0LicpOworICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcg JiAnZWF0ZW4nICYgISdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnZW5nbGlzaCcsICciQSBmYXQgY2F0IiBoYXMganVzdCBlYXRlbiBPUiAhcmF0LicpOworICAg ICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcgJiAnZWF0ZW4nIHwgISdyYXQnCisoMSBy b3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSBmYXQgY2F0 IiBoYXMganVzdCAoK2VhdGVuIE9SIC1yYXQpJyk7CisgICAgICAgICAgd2Vic2VhcmNoX3RvX3Rz cXVlcnkgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgJ2ZhdCcgPC0+ICdjYXQnICYgKCAnZWF0ZW4nIHwgISdyYXQnICkKKygxIHJvdykKKworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ3RoaXMgaXMgLS0tLWZpbmUnKTsK KyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAhISEhJ2Zp bmUnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICco KCkpICkpKSkgdGhpcyB8fHwgaXMgJiYgLSEtZmluZSwgImRlYXIgZnJpZW5kIiBPUiBnb29kJyk7 CisgICAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICEhISdmaW5lJyAmICdkZWFyJyA8LT4g J2ZyaWVuZCcgfCAnZ29vZCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdlbmdsaXNoJywgJ2FuIG9sZCA8LT4gY2F0ICIgaXMgZmluZSAmJiYgdG9vJyk7CisgICB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnb2xkJyA8 LT4gJ2NhdCcgJiAnZmluZScKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdlbmdsaXNoJywgJyJBIHRoZSIgT1IganVzdCBvbicpOworTk9USUNFOiAgdGV4dC1zZWFyY2gg cXVlcnkgY29udGFpbnMgb25seSBzdG9wIHdvcmRzIG9yIGRvZXNuJ3QgY29udGFpbiBsZXhlbWVz LCBpZ25vcmVkCisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci 0YLQvtC70YHRgtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisgICAg ICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAn0YLQvtC70YHRgicgPC0+ICfQutC+0YjQuicgJiAn0YHRitC1 0LsnICYgJ9C60YDRi9GBJworKDEgcm93KQorCitzZWxlY3QgdG9fdHN2ZWN0b3IoJ3J1c3NpYW4n LCAn0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwINC60YDRi9GB0YMnKSBAQAor d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7RiNC6 0LAiINGB0YrQtdC70LAg0LrRgNGL0YHRgycpOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworc2VsZWN0IHRvX3RzdmVjdG9yKCdydXNzaWFuJywgJ9GB0YrQtdC70LAg0YLQ vtC70YHRgtCw0Y8g0YHQtdGA0LDRjyDQutC+0YjQutCwINC60YDRi9GB0YMnKSBAQAord2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAiINGB 0YrQtdC70LAg0LrRgNGL0YHRgycpOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIGYKKygxIHJv dykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHNlYXJjaC5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC90c2VhcmNoLnNxbAppbmRleCAxYzg1MjBiM2U5Li5jNzk3NmViODdj IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90c2VhcmNoLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC90c2VhcmNoLnNxbApAQCAtNTM5LDMgKzUzOSw5NSBAQCBjcmVhdGUg aW5kZXggcGhyYXNlX2luZGV4X3Rlc3RfaWR4IG9uIHBocmFzZV9pbmRleF90ZXN0IHVzaW5nIGdp bihmdHMpOwogc2V0IGVuYWJsZV9zZXFzY2FuID0gb2ZmOwogc2VsZWN0ICogZnJvbSBwaHJhc2Vf aW5kZXhfdGVzdCB3aGVyZSBmdHMgQEAgcGhyYXNldG9fdHNxdWVyeSgnZW5nbGlzaCcsICdmYXQg Y2F0Jyk7CiBzZXQgZW5hYmxlX3NlcXNjYW4gPSBvbjsKKworLS0gdGVzdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSBmdW5jdGlvbgorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcoKScpOworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcoKCkpJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJygpKCkoKScpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdhYmMgKCknKTsK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKCkgYWJjJyk7CitzZWxlY3Qgd2Vic2VhcmNo X3RvX3RzcXVlcnkoJ2FiYyAmICgpJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJygp ICYgYWJjJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJycnJyk7CitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ1wnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnXFwn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWIgJycgYWJjJyk7CitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ2FiICcnIGFiYycnJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ2FiIFwgYWJjJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2FiIFxcIGFi YycpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJygnKTsKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnKCgnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnKCgoICAp KSBhYmMgb3IgZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJykpJyk7CitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJyknKTsKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCcpKCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCcmICkoIHwnKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnYWJjICkoIGRlZicpOworc2VsZWN0IHdlYnNlYXJjaF90 b190c3F1ZXJ5KCdhYmMgfCApKCAmIGRlZicpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVl cnkoJyYgYWJjJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2FiYyAmJyk7CitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3wgYWJjJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ2FiYyB8Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJzwgYWJjJyk7Citz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2FiYyA8Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ2E6OjpiJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnTXkgYnJh bmQgbmV3IHNtYXJ0cGhvbmUnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnTXkgYnJh bmQgIm5ldyBzbWFydHBob25lIicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdNeSBi cmFuZCAibmV3IC1zbWFydHBob25lIicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdN eSBicmFuZDpCICJuZXcgLXNtYXJ0cGhvbmUiJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVl cnkoJ015IGJyYW5kOlogIm5ldyAtc21hcnRwaG9uZSInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnTXkgJiAoYnJhbmQgKCJuZXcgLXNtYXJ0cGhvbmUiJyk7CitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ015ICYgKGJyYW5kICgibmV3KSAtc21hcnRwaG9uZSInKTsKKworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0IG9yIHJhdCcpOworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0IE9SIHJhdCcpOworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0ICJPUiIgcmF0Jyk7CitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgT1InKTsKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnc2ltcGxlJywgJ09SIHJhdCcpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ3NpbXBsZScsICciZmF0IGNhdCBPUiByYXQiJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgKGNhdCBPUiByYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCpyYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJ2ZhdC1yYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2ZhdF9yYXQnKTsKKworLS0gT1IgaXMgYW4gb3BlcmF0b3IgaGVyZSAuLi4KK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcihyYXQnKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcilyYXQnKTsKK3NlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciZyYXQnKTsKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcnxyYXQnKTsKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciFyYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcjxyYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcj5yYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJ2ZhdCBvciAnKTsKKworLS0gLi4uIGJ1dCBub3QgaGVyZQorc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9yYW5nZScpOworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9y0YLQtdGB0YInKTsKK3NlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBPUjEyMzQnKTsKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvci1hYmMnKTsKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBPUl9hYmMnKTsKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvcicpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3Rz cXVlcnkoJ3NpbXBsZScsICdvciBPUiBvcicpOworCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVl cnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgZWF0ZW4gYSAtcmF0LicpOworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJBIGZhdCBjYXQiIGhhcyBqdXN0 IGVhdGVuIE9SICFyYXQuJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gn LCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgKCtlYXRlbiBPUiAtcmF0KScpOworCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAndGhpcyBpcyAtLS0tZmluZScpOworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJygoKSkgKSkpKSB0aGlzIHx8fCBpcyAm JiAtIS1maW5lLCAiZGVhciBmcmllbmQiIE9SIGdvb2QnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnZW5nbGlzaCcsICdhbiBvbGQgPC0+IGNhdCAiIGlzIGZpbmUgJiYmIHRvbycpOwor CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgdGhlIiBPUiBqdXN0 IG9uJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Qu9GB 0YLQsNGPINC60L7RiNC60LAiINGB0YrQtdC70LAg0LrRgNGL0YHRgycpOworCitzZWxlY3QgdG9f dHN2ZWN0b3IoJ3J1c3NpYW4nLCAn0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCw INC60YDRi9GB0YMnKSBAQAord2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3J1c3NpYW4nLCAnItGC0L7Q u9GB0YLQsNGPINC60L7RiNC60LAiINGB0YrQtdC70LAg0LrRgNGL0YHRgycpOworCitzZWxlY3Qg dG9fdHN2ZWN0b3IoJ3J1c3NpYW4nLCAn0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDRgdC10YDQ sNGPINC60L7RiNC60LAg0LrRgNGL0YHRgycpIEBACit3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVz c2lhbicsICci0YLQvtC70YHRgtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGD Jyk7Cg== --=_bbb14a96e4b68ebe2cf7e82470d8d42c--