From unknown Fri Mar 29 08:54:01 2024 X-Loop: owner@bugs.x2go.org Subject: Bug#1135: MySQL Database backend support Reply-To: Walid MOGHRABI , 1135@bugs.x2go.org Resent-From: Walid MOGHRABI Resent-To: x2go-dev@lists.x2go.org Resent-CC: X2Go Developers X-Loop: owner@bugs.x2go.org Resent-Date: Fri, 13 Jan 2017 17:00:02 +0000 Resent-Message-ID: Resent-Sender: owner@bugs.x2go.org X-X2Go-PR-Message: report 1135 X-X2Go-PR-Package: x2goserver X-X2Go-PR-Keywords: patch Received: via spool by submit@bugs.x2go.org id=B.148432653811008 (code B); Fri, 13 Jan 2017 17:00:02 +0000 Received: (at submit) by bugs.x2go.org; 13 Jan 2017 16:55:38 +0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on ymir.das-netzwerkteam.de X-Spam-Level: X-Spam-Status: No, score=0.8 required=3.0 tests=BAYES_50,URIBL_BLOCKED autolearn=ham version=3.3.2 Received: from localhost (localhost [127.0.0.1]) by ymir.das-netzwerkteam.de (Postfix) with ESMTP id 8B0003CDDD for ; Fri, 13 Jan 2017 17:55:32 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at ymir.das-netzwerkteam.de Received: from ymir.das-netzwerkteam.de ([127.0.0.1]) by localhost (ymir.das-netzwerkteam.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ja2EC9ajA4wY for ; Fri, 13 Jan 2017 17:55:26 +0100 (CET) Received: from zm-01.servicemagic.eu (zm-01.servicemagic.eu [176.31.236.17]) by ymir.das-netzwerkteam.de (Postfix) with ESMTPS id BC66D5DAA7 for ; Fri, 13 Jan 2017 17:55:25 +0100 (CET) Received: from localhost (localhost.localdomain [127.0.0.1]) by zm-01.servicemagic.eu (Postfix) with ESMTP id 058CC80A9221F for ; Fri, 13 Jan 2017 17:55:23 +0100 (CET) X-Amavis-Modified: Mail body modified (using disclaimer) - zm-01.servicemagic.eu X-Virus-Scanned: amavisd-new at servicemagic.eu Received: from zm-01.servicemagic.eu ([127.0.0.1]) by localhost (zm-01.servicemagic.eu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NCAwZplSIJ4z for ; Fri, 13 Jan 2017 17:55:19 +0100 (CET) Received: from zm-01.servicemagic.eu (localhost.localdomain [127.0.0.1]) by zm-01.servicemagic.eu (Postfix) with ESMTP id 62BE4807CC6AA for ; Fri, 13 Jan 2017 17:55:19 +0100 (CET) Date: Fri, 13 Jan 2017 17:55:19 +0100 (CET) From: Walid MOGHRABI To: submit@bugs.x2go.org Message-ID: <1719550560.33223559.1484326519373.JavaMail.root@servicemagic.eu> In-Reply-To: <1040981999.33222686.1484325938728.JavaMail.root@servicemagic.eu> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_33223557_1572844661.1484326519364" X-Originating-IP: [10.33.100.60] X-Mailer: Zimbra 7.2.0_GA_2669 (ZimbraWebClient - GC55 (Linux)/7.2.0_GA_2669) ------=_Part_33223557_1572844661.1484326519364 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit package: x2goserver priority: wishlist tags: patch This is a proposal patch for a MySQL session storage database backend for X2Go Server. I did this simply because : 1) I'm not used to PostgreSQL and much more skilled with MySQL 2) I do believe MySQL is pretty common on Linux and is widely spread so I guess this can be useful for many other people willing to build a strong TCE setup and not willing to dig into PostgreSQL 3) I find it a lot easier to build a multi-master replication scenario with MySQL than with PostgreSQL (but as I said, I'm much more skilled wih MySQL) This backend is tightly inspired by the PostgreSQL backend and work exactly the same so this is a drop in replacement for it, til now, all my tests seems to work correctly, feel free to test by yourself and report errors. Regards, Walid Moghrabi TRAVAUX.COM BAT I - PARC CEZANNE 2 290 AVENUE GALILEE - CS 80403 13591 AIX EN PROVENCE CEDEX 3 --- DISCLAIMER: This e-mail is private and confidential and may contain proprietary or legally privileged information. It is for the intended recipient only. If you have received this email in error, please notify the author by replying to it and then destroy it. If you are not the intended recipient you must not use, disclose, distribute, copy, print or rely on this e-mail or any attachment. Thank you ------=_Part_33223557_1572844661.1484326519364 Content-Type: text/x-patch; name=MySQL-Database-backend-support.patch Content-Disposition: attachment; filename=MySQL-Database-backend-support.patch Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL1gyR28vU2VydmVyL0RCLnBtIGIvWDJHby9TZXJ2ZXIvREIucG0KaW5kZXgg NDFhMjJlOC4uYjI1MDFmMyAxMDA2NDQKLS0tIGEvWDJHby9TZXJ2ZXIvREIucG0KKysrIGIvWDJH by9TZXJ2ZXIvREIucG0KQEAgLTM4LDYgKzM4LDcgQEAKIHVzZSBYMkdvOjpDb25maWcgcXcoIGdl dF9zcWxjb25maWcgKTsKIHVzZSBYMkdvOjpMb2cgcXcoIGxvZ2xldmVsICk7CiB1c2UgWDJHbzo6 U2VydmVyOjpEQjo6UG9zdGdyZVNRTDsKK3VzZSBYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDsKIHVz ZSBYMkdvOjpVdGlscyBxdyggc3lzdGVtX2NhcHR1cmVfbWVyZ2VkX291dHB1dCBzeXN0ZW1fY2Fw dHVyZV9zdGRvdXRfb3V0cHV0ICk7CiBzZXRsb2dtYXNrKCBMT0dfVVBUTyhsb2dsZXZlbCgpKSAp OwogCkBAIC01Niw3ICs1Nyw3IEBACiBteSAkZGJ1c2VyOwogbXkgJHNzbG1vZGU7CiAKLWlmICgk YmFja2VuZCBuZSAncG9zdGdyZXMnICYmICRiYWNrZW5kIG5lICdzcWxpdGUnKQoraWYgKCRiYWNr ZW5kIG5lICdwb3N0Z3JlcycgJiYgJGJhY2tlbmQgbmUgJ215c3FsJyAmJiAkYmFja2VuZCBuZSAn c3FsaXRlJykKIHsKIAlkaWUgInVua25vd24gYmFja2VuZCAkYmFja2VuZCI7CiB9CkBAIC03Niw2 ICs3NywxMCBAQAogCXsKIAkJWDJHbzo6U2VydmVyOjpEQjo6UG9zdGdyZVNRTDo6ZGJzeXNfcm1z ZXNzaW9uc3Jvb3QoJHNpZCk7CiAJfQorCWlmKCRiYWNrZW5kIGVxICdteXNxbCcpCisJeworCQlY MkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJzeXNfcm1zZXNzaW9uc3Jvb3QoJHNpZCk7CisJfQog CWlmKCRiYWNrZW5kIGVxICdzcWxpdGUnKQogCXsKIAkJc3lzdGVtX2NhcHR1cmVfbWVyZ2VkX291 dHB1dCgiJHgyZ29fbGliX3BhdGgvbGlieDJnby1zZXJ2ZXItZGItc3FsaXRlMy13cmFwcGVyIiwg InJtc2Vzc2lvbnNyb290IiwgIiRzaWQiKTsKQEAgLTg4LDYgKzkzLDEwIEBACiAJaWYgKCRiYWNr ZW5kIGVxICdwb3N0Z3JlcycpCiAJewogCQlYMkdvOjpTZXJ2ZXI6OkRCOjpQb3N0Z3JlU1FMOjpk YnN5c19kZWxldGVtb3VudHMoJHNpZCk7CisJfQorCWlmICgkYmFja2VuZCBlcSAnbXlzcWwnKQor CXsKKwkJWDJHbzo6U2VydmVyOjpEQjo6TXlTUUw6OmRic3lzX2RlbGV0ZW1vdW50cygkc2lkKTsK IAl9CiAJaWYgKCRiYWNrZW5kIGVxICdzcWxpdGUnKQogCXsKQEAgLTEwMyw2ICsxMTIsMTAgQEAK IAl7CiAJCXJldHVybiBYMkdvOjpTZXJ2ZXI6OkRCOjpQb3N0Z3JlU1FMOjpkYnN5c19saXN0c2Vz c2lvbnNyb290KCRzZXJ2ZXIpOwogCX0KKwlpZiAoJGJhY2tlbmQgZXEgJ215c3FsJykKKwl7CisJ CXJldHVybiBYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJzeXNfbGlzdHNlc3Npb25zcm9vdCgk c2VydmVyKTsKKwl9CiAJaWYoJGJhY2tlbmQgZXEgJ3NxbGl0ZScpCiAJewogCQlyZXR1cm4gc3Bs aXQoIlxuIixzeXN0ZW1fY2FwdHVyZV9tZXJnZWRfb3V0cHV0KCIkeDJnb19saWJfcGF0aC9saWJ4 MmdvLXNlcnZlci1kYi1zcWxpdGUzLXdyYXBwZXIiLCAibGlzdHNlc3Npb25zcm9vdCIsICIkc2Vy dmVyIikpOwpAQCAtMTE0LDYgKzEyNywxMCBAQAogCWlmICgkYmFja2VuZCBlcSAncG9zdGdyZXMn KQogCXsKIAkJcmV0dXJuIFgyR286OlNlcnZlcjo6REI6OlBvc3RncmVTUUw6OmRic3lzX2xpc3Rz ZXNzaW9uc3Jvb3RfYWxsKCk7CisJfQorCWlmICgkYmFja2VuZCBlcSAnbXlzcWwnKQorCXsKKwkJ cmV0dXJuIFgyR286OlNlcnZlcjo6REI6Ok15U1FMOjpkYnN5c19saXN0c2Vzc2lvbnNyb290X2Fs bCgpOwogCX0KIAlpZiAoJGJhY2tlbmQgZXEgJ3NxbGl0ZScpCiAJewpAQCAtMTI4LDYgKzE0NSwx MCBAQAogCWlmICgkYmFja2VuZCBlcSAncG9zdGdyZXMnKQogCXsKIAkJQG1vdW50cyA9IFgyR286 OlNlcnZlcjo6REI6OlBvc3RncmVTUUw6OmRic3lzX2dldG1vdW50cygkc2lkKTsKKwl9CisJaWYg KCRiYWNrZW5kIGVxICdteXNxbCcpCisJeworCQlAbW91bnRzID0gWDJHbzo6U2VydmVyOjpEQjo6 TXlTUUw6OmRic3lzX2dldG1vdW50cygkc2lkKTsKIAl9CiAJaWYgKCRiYWNrZW5kIGVxICdzcWxp dGUnKQogCXsKQEAgLTE0Niw2ICsxNjcsMTAgQEAKIAl7CiAJCUBtb3VudHMgPSBYMkdvOjpTZXJ2 ZXI6OkRCOjpQb3N0Z3JlU1FMOjpkYl9nZXRtb3VudHMoJHNpZCk7CiAJfQorCWlmKCRiYWNrZW5k IGVxICdteXNxbCcpCisJeworCQlAbW91bnRzID0gWDJHbzo6U2VydmVyOjpEQjo6TXlTUUw6OmRi X2dldG1vdW50cygkc2lkKTsKKwl9CiAJaWYgKCRiYWNrZW5kIGVxICdzcWxpdGUnKQogCXsKIAkJ QG1vdW50cyA9IHNwbGl0KCJcbiIsc3lzdGVtX2NhcHR1cmVfbWVyZ2VkX291dHB1dCgiJHgyZ29f bGliX3BhdGgvbGlieDJnby1zZXJ2ZXItZGItc3FsaXRlMy13cmFwcGVyIiwgImdldG1vdW50cyIs ICIkc2lkIikpOwpAQCAtMTYzLDYgKzE4OCwxMCBAQAogCXsKIAkJWDJHbzo6U2VydmVyOjpEQjo6 UG9zdGdyZVNRTDo6ZGJfZGVsZXRlbW91bnQoJHNpZCwgJHBhdGgpOwogCX0KKwlpZiAoJGJhY2tl bmQgZXEgJ215c3FsJykKKwl7CisJCVgyR286OlNlcnZlcjo6REI6Ok15U1FMOjpkYl9kZWxldGVt b3VudCgkc2lkLCAkcGF0aCk7CisJfQogCWlmICgkYmFja2VuZCBlcSAnc3FsaXRlJykKIAl7CiAJ CXN5c3RlbV9jYXB0dXJlX21lcmdlZF9vdXRwdXQoIiR4MmdvX2xpYl9wYXRoL2xpYngyZ28tc2Vy dmVyLWRiLXNxbGl0ZTMtd3JhcHBlciIsICJkZWxldGVtb3VudCIsICIkc2lkIiwgIiRwYXRoIik7 CkBAIC0xNzksNiArMjA4LDEwIEBACiAJaWYgKCRiYWNrZW5kIGVxICdwb3N0Z3JlcycpCiAJewog CQkkcmVzX29rID0gWDJHbzo6U2VydmVyOjpEQjo6UG9zdGdyZVNRTDo6ZGJfaW5zZXJ0bW91bnQo JHNpZCwgJHBhdGgsICRjbGllbnQpOworCX0KKwlpZiAoJGJhY2tlbmQgZXEgJ215c3FsJykKKwl7 CisJCSRyZXNfb2sgPSBYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJfaW5zZXJ0bW91bnQoJHNp ZCwgJHBhdGgsICRjbGllbnQpOwogCX0KIAlpZiAoJGJhY2tlbmQgZXEgJ3NxbGl0ZScpCiAJewpA QCAtMjAwLDYgKzIzMywxMCBAQAogCXsKIAkJWDJHbzo6U2VydmVyOjpEQjo6UG9zdGdyZVNRTDo6 ZGJfaW5zZXJ0c2Vzc2lvbigkZGlzcGxheSwgJHNlcnZlciwgJHNpZCk7CiAJfQorCWlmICgkYmFj a2VuZCBlcSAnbXlzcWwnKQorCXsKKwkJWDJHbzo6U2VydmVyOjpEQjo6TXlTUUw6OmRiX2luc2Vy dHNlc3Npb24oJGRpc3BsYXksICRzZXJ2ZXIsICRzaWQpOworCX0KIAlpZiAoJGJhY2tlbmQgZXEg J3NxbGl0ZScpCiAJewogCQlteSAkZXJyPXN5c3RlbV9jYXB0dXJlX21lcmdlZF9vdXRwdXQoIiR4 MmdvX2xpYl9wYXRoL2xpYngyZ28tc2VydmVyLWRiLXNxbGl0ZTMtd3JhcHBlciIsICJpbnNlcnRz ZXNzaW9uIiwgIiRkaXNwbGF5IiwgIiRzZXJ2ZXIiLCAiJHNpZCIpOwpAQCAtMjIwLDYgKzI1Nywx MCBAQAogCWlmICgkYmFja2VuZCBlcSAncG9zdGdyZXMnKQogCXsKIAkJWDJHbzo6U2VydmVyOjpE Qjo6UG9zdGdyZVNRTDo6ZGJfaW5zZXJ0c2hhZG93c2Vzc2lvbigkZGlzcGxheSwgJHNlcnZlciwg JHNpZCwgJHNoYWRyZXFfdXNlcik7CisJfQorCWlmICgkYmFja2VuZCBlcSAnbXlzcWwnKQorCXsK KwkJWDJHbzo6U2VydmVyOjpEQjo6TXlTUUw6OmRiX2luc2VydHNoYWRvd3Nlc3Npb24oJGRpc3Bs YXksICRzZXJ2ZXIsICRzaWQsICRzaGFkcmVxX3VzZXIpOwogCX0KIAlpZiAoJGJhY2tlbmQgZXEg J3NxbGl0ZScpCiAJewpAQCAtMjQ3LDYgKzI4OCwxMCBAQAogCXsKIAkJWDJHbzo6U2VydmVyOjpE Qjo6UG9zdGdyZVNRTDo6ZGJfY3JlYXRlc2Vzc2lvbigkc2lkLCAkY29va2llLCAkcGlkLCAkY2xp ZW50LCAkZ3JfcG9ydCwgJHNuZF9wb3J0LCAkZnNfcG9ydCwgJHRla2ljdHJsX3BvcnQsICR0ZWtp ZGF0YV9wb3J0KTsKIAl9CisJaWYgKCRiYWNrZW5kIGVxICdteXNxbCcpCisJeworCQlYMkdvOjpT ZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJfY3JlYXRlc2Vzc2lvbigkc2lkLCAkY29va2llLCAkcGlkLCAk Y2xpZW50LCAkZ3JfcG9ydCwgJHNuZF9wb3J0LCAkZnNfcG9ydCwgJHRla2ljdHJsX3BvcnQsICR0 ZWtpZGF0YV9wb3J0KTsKKwl9CiAJaWYgKCRiYWNrZW5kIGVxICdzcWxpdGUnKQogCXsKIAkJbXkg JGVycj0gc3lzdGVtX2NhcHR1cmVfbWVyZ2VkX291dHB1dCgiJHgyZ29fbGliX3BhdGgvbGlieDJn by1zZXJ2ZXItZGItc3FsaXRlMy13cmFwcGVyIiwgImNyZWF0ZXNlc3Npb24iLCAiJHNpZCIsICIk Y29va2llIiwgIiRwaWQiLCAiJGNsaWVudCIsICIkZ3JfcG9ydCIsICIkc25kX3BvcnQiLCAiJGZz X3BvcnQiLCAiJHRla2ljdHJsX3BvcnQiLCAiJHRla2lkYXRhX3BvcnQiKTsKQEAgLTI3Myw2ICsz MTgsMTEgQEAKIAkJIyBmb3IgUG9zdGdyZVNRTCB3ZSBjYW4gdXNlIHRoZSBub3JtYWwgZGJfY3Jl YXRlc2Vzc2lvbiBjb2RlLi4uCiAJCVgyR286OlNlcnZlcjo6REI6OlBvc3RncmVTUUw6OmRiX2Ny ZWF0ZXNlc3Npb24oJHNpZCwgJGNvb2tpZSwgJHBpZCwgJGNsaWVudCwgJGdyX3BvcnQsICRzbmRf cG9ydCwgJGZzX3BvcnQsIC0xLCAtMSk7CiAJfQorCWlmICgkYmFja2VuZCBlcSAnbXlzcWwnKQor CXsKKwkJIyBmb3IgTXlTUUwgd2UgY2FuIHVzZSB0aGUgbm9ybWFsIGRiX2NyZWF0ZXNlc3Npb24g Y29kZS4uLgorCQlYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJfY3JlYXRlc2Vzc2lvbigkc2lk LCAkY29va2llLCAkcGlkLCAkY2xpZW50LCAkZ3JfcG9ydCwgJHNuZF9wb3J0LCAkZnNfcG9ydCwg LTEsIC0xKTsKKwl9CiAJaWYgKCRiYWNrZW5kIGVxICdzcWxpdGUnKQogCXsKIAkJbXkgJGVycj1z eXN0ZW1fY2FwdHVyZV9tZXJnZWRfb3V0cHV0KCIkeDJnb19saWJfcGF0aC9saWJ4MmdvLXNlcnZl ci1kYi1zcWxpdGUzLXdyYXBwZXIiLCAiY3JlYXRlc2hhZG93c2Vzc2lvbiIsICIkc2lkIiwgIiRj b29raWUiLCAiJHBpZCIsICIkY2xpZW50IiwgIiRncl9wb3J0IiwgIiRzbmRfcG9ydCIsICIkZnNf cG9ydCIsICIkc2hhZHJlcV91c2VyIik7CkBAIC0yOTIsNiArMzQyLDEwIEBACiAJaWYgKCRiYWNr ZW5kIGVxICdwb3N0Z3JlcycpCiAJewogCQlYMkdvOjpTZXJ2ZXI6OkRCOjpQb3N0Z3JlU1FMOjpk Yl9pbnNlcnRwb3J0KCRzZXJ2ZXIsICRzaWQsICRzc2hwb3J0KTsKKwl9CisJaWYgKCRiYWNrZW5k IGVxICdteXNxbCcpCisJeworCQlYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJfaW5zZXJ0cG9y dCgkc2VydmVyLCAkc2lkLCAkc3NocG9ydCk7CiAJfQogCWlmICgkYmFja2VuZCBlcSAnc3FsaXRl JykKIAl7CkBAIC0zMTMsNiArMzY3LDEwIEBACiAJewogCQlYMkdvOjpTZXJ2ZXI6OkRCOjpQb3N0 Z3JlU1FMOjpkYl9ybXBvcnQoJHNlcnZlciwgJHNpZCwgJHNzaHBvcnQpOwogCX0KKwlpZiAoJGJh Y2tlbmQgZXEgJ215c3FsJykKKwl7CisJCVgyR286OlNlcnZlcjo6REI6Ok15U1FMOjpkYl9ybXBv cnQoJHNlcnZlciwgJHNpZCwgJHNzaHBvcnQpOworCX0KIAlpZiAoJGJhY2tlbmQgZXEgJ3NxbGl0 ZScpCiAJewogCQlzeXN0ZW1fY2FwdHVyZV9tZXJnZWRfb3V0cHV0KCIkeDJnb19saWJfcGF0aC9s aWJ4MmdvLXNlcnZlci1kYi1zcWxpdGUzLXdyYXBwZXIiLCAicm1wb3J0IiwgIiRzZXJ2ZXIiLCAi JHNpZCIsICIkc3NocG9ydCIpOwpAQCAtMzMzLDYgKzM5MSwxMCBAQAogCXsKIAkJWDJHbzo6U2Vy dmVyOjpEQjo6UG9zdGdyZVNRTDo6ZGJfcmVzdW1lKCRjbGllbnQsICRzaWQsICRncl9wb3J0LCAk c25kX3BvcnQsICRmc19wb3J0LCAkdGVraWN0cmxfcG9ydCwgJHRla2lkYXRhX3BvcnQpOwogCX0K KwlpZiAoJGJhY2tlbmQgZXEgJ215c3FsJykKKwl7CisJCVgyR286OlNlcnZlcjo6REI6Ok15U1FM OjpkYl9yZXN1bWUoJGNsaWVudCwgJHNpZCwgJGdyX3BvcnQsICRzbmRfcG9ydCwgJGZzX3BvcnQs ICR0ZWtpY3RybF9wb3J0LCAkdGVraWRhdGFfcG9ydCk7CisJfQogCWlmICgkYmFja2VuZCBlcSAn c3FsaXRlJykKIAl7CiAJCXN5c3RlbV9jYXB0dXJlX21lcmdlZF9vdXRwdXQoIiR4MmdvX2xpYl9w YXRoL2xpYngyZ28tc2VydmVyLWRiLXNxbGl0ZTMtd3JhcHBlciIsICJyZXN1bWUiLCAiJGNsaWVu dCIsICIkc2lkIiwgIiRncl9wb3J0IiwgIiRzbmRfcG9ydCIsICIkZnNfcG9ydCIsICIkdGVraWN0 cmxfcG9ydCIsICIkdGVraWRhdGFfcG9ydCIpOwpAQCAtMzQ4LDYgKzQxMCwxMCBAQAogCXsKIAkJ WDJHbzo6U2VydmVyOjpEQjo6UG9zdGdyZVNRTDo6ZGJfY2hhbmdlc3RhdHVzKCRzdGF0dXMsICRz aWQpOwogCX0KKwlpZiAoJGJhY2tlbmQgZXEgJ215c3FsJykKKwl7CisJCVgyR286OlNlcnZlcjo6 REI6Ok15U1FMOjpkYl9jaGFuZ2VzdGF0dXMoJHN0YXR1cywgJHNpZCk7CisJfQogCWlmICgkYmFj a2VuZCBlcSAnc3FsaXRlJykKIAl7CiAJCXN5c3RlbV9jYXB0dXJlX21lcmdlZF9vdXRwdXQoIiR4 MmdvX2xpYl9wYXRoL2xpYngyZ28tc2VydmVyLWRiLXNxbGl0ZTMtd3JhcHBlciIsICJjaGFuZ2Vz dGF0dXMiLCAiJHN0YXR1cyIsICIkc2lkIik7CkBAIC0zNjIsNiArNDI4LDEwIEBACiAJaWYgKCRi YWNrZW5kIGVxICdwb3N0Z3JlcycpCiAJewogCQkkc3RhdHVzID0gWDJHbzo6U2VydmVyOjpEQjo6 UG9zdGdyZVNRTDo6ZGJfZ2V0c3RhdHVzKCRzaWQpOworCX0KKwlpZiAoJGJhY2tlbmQgZXEgJ215 c3FsJykKKwl7CisJCSRzdGF0dXMgPSBYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJfZ2V0c3Rh dHVzKCRzaWQpOwogCX0KIAlpZiAoJGJhY2tlbmQgZXEgJ3NxbGl0ZScpCiAJewpAQCAtMzc5LDYg KzQ0OSwxMCBAQAogCWlmICgkYmFja2VuZCBlcSAncG9zdGdyZXMnKQogCXsKIAkJQGRpc3BsYXlz ID0gWDJHbzo6U2VydmVyOjpEQjo6UG9zdGdyZVNRTDo6ZGJfZ2V0ZGlzcGxheXMoJHNlcnZlcik7 CisJfQorCWlmICgkYmFja2VuZCBlcSAnbXlzcWwnKQorCXsKKwkJQGRpc3BsYXlzID0gWDJHbzo6 U2VydmVyOjpEQjo6TXlTUUw6OmRiX2dldGRpc3BsYXlzKCRzZXJ2ZXIpOwogCX0KIAlpZiAoJGJh Y2tlbmQgZXEgJ3NxbGl0ZScpCiAJewpAQCAtMzk4LDYgKzQ3MiwxMCBAQAogCXsKIAkJQHBvcnRz ID0gWDJHbzo6U2VydmVyOjpEQjo6UG9zdGdyZVNRTDo6ZGJfZ2V0cG9ydHMoJHNlcnZlcik7CiAJ fQorCWlmICgkYmFja2VuZCBlcSAnbXlzcWwnKQorCXsKKwkJQHBvcnRzID0gWDJHbzo6U2VydmVy OjpEQjo6TXlTUUw6OmRiX2dldHBvcnRzKCRzZXJ2ZXIpOworCX0KIAlpZiAoJGJhY2tlbmQgZXEg J3NxbGl0ZScpCiAJewogCQlAcG9ydHMgPSBzcGxpdCgiXG4iLHN5c3RlbV9jYXB0dXJlX21lcmdl ZF9vdXRwdXQoIiR4MmdvX2xpYl9wYXRoL2xpYngyZ28tc2VydmVyLWRiLXNxbGl0ZTMtd3JhcHBl ciIsICJnZXRwb3J0cyIsICIkc2VydmVyIikpOwpAQCAtNDEzLDYgKzQ5MSwxMCBAQAogCWlmICgk YmFja2VuZCBlcSAncG9zdGdyZXMnKQogCXsKIAkJQHNlcnZlcnMgPSBYMkdvOjpTZXJ2ZXI6OkRC OjpQb3N0Z3JlU1FMOjpkYl9nZXRzZXJ2ZXJzKCk7CisJfQorCWlmICgkYmFja2VuZCBlcSAnbXlz cWwnKQorCXsKKwkJQHNlcnZlcnMgPSBYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJfZ2V0c2Vy dmVycygpOwogCX0KIAlpZiAoJGJhY2tlbmQgZXEgJ3NxbGl0ZScpCiAJewpAQCAtNDMxLDYgKzUx MywxMCBAQAogCXsKIAkJJGFnZW50ID0gWDJHbzo6U2VydmVyOjpEQjo6UG9zdGdyZVNRTDo6ZGJf Z2V0YWdlbnQoJHNpZCk7CiAJfQorCWlmICgkYmFja2VuZCBlcSAnbXlzcWwnKQorCXsKKwkJJGFn ZW50ID0gWDJHbzo6U2VydmVyOjpEQjo6TXlTUUw6OmRiX2dldGFnZW50KCRzaWQpOworCX0KIAlp ZigkYmFja2VuZCBlcSAnc3FsaXRlJykKIAl7CiAJCSRhZ2VudD1zeXN0ZW1fY2FwdHVyZV9tZXJn ZWRfb3V0cHV0KCIkeDJnb19saWJfcGF0aC9saWJ4MmdvLXNlcnZlci1kYi1zcWxpdGUzLXdyYXBw ZXIiLCAiZ2V0YWdlbnQiLCAiJHNpZCIpOwpAQCAtNDQ3LDYgKzUzMywxMCBAQAogCXsKIAkJJGRp c3BsYXkgPSBYMkdvOjpTZXJ2ZXI6OkRCOjpQb3N0Z3JlU1FMOjpkYl9nZXRkaXNwbGF5KCRzaWQp OwogCX0KKwlpZiAoJGJhY2tlbmQgZXEgJ215c3FsJykKKwl7CisJCSRkaXNwbGF5ID0gWDJHbzo6 U2VydmVyOjpEQjo6TXlTUUw6OmRiX2dldGRpc3BsYXkoJHNpZCk7CisJfQogCWlmICgkYmFja2Vu ZCBlcSAnc3FsaXRlJykKIAl7CiAJCSRkaXNwbGF5PXN5c3RlbV9jYXB0dXJlX21lcmdlZF9vdXRw dXQoIiR4MmdvX2xpYl9wYXRoL2xpYngyZ28tc2VydmVyLWRiLXNxbGl0ZTMtd3JhcHBlciIsICJn ZXRkaXNwbGF5IiwgIiRzaWQiKTsKQEAgLTQ2Miw2ICs1NTIsMTAgQEAKIAl7CiAJCXJldHVybiBY MkdvOjpTZXJ2ZXI6OkRCOjpQb3N0Z3JlU1FMOjpkYl9saXN0c2Vzc2lvbnMoJHNlcnZlcik7CiAJ fQorCWlmICgkYmFja2VuZCBlcSAnbXlzcWwnKQorCXsKKwkJcmV0dXJuIFgyR286OlNlcnZlcjo6 REI6Ok15U1FMOjpkYl9saXN0c2Vzc2lvbnMoJHNlcnZlcik7CisJfQogCWlmICgkYmFja2VuZCBl cSAnc3FsaXRlJykKIAl7CiAJCXJldHVybiBzcGxpdCgiXG4iLHN5c3RlbV9jYXB0dXJlX21lcmdl ZF9vdXRwdXQoIiR4MmdvX2xpYl9wYXRoL2xpYngyZ28tc2VydmVyLWRiLXNxbGl0ZTMtd3JhcHBl ciIsICJsaXN0c2Vzc2lvbnMiLCAiJHNlcnZlciIpKTsKQEAgLTQ3Myw2ICs1NjcsMTAgQEAKIAlp ZigkYmFja2VuZCBlcSAncG9zdGdyZXMnKQogCXsKIAkJcmV0dXJuIFgyR286OlNlcnZlcjo6REI6 OlBvc3RncmVTUUw6OmRiX2xpc3RzZXNzaW9uc19hbGwoKTsKKwl9CisJaWYoJGJhY2tlbmQgZXEg J215c3FsJykKKwl7CisJCXJldHVybiBYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTDo6ZGJfbGlzdHNl c3Npb25zX2FsbCgpOwogCX0KIAlpZiAoJGJhY2tlbmQgZXEgJ3NxbGl0ZScpCiAJewpAQCAtNDg3 LDYgKzU4NSwxMCBAQAogCXsKIAkJcmV0dXJuIFgyR286OlNlcnZlcjo6REI6OlBvc3RncmVTUUw6 OmRiX2xpc3RzaGFkb3dzZXNzaW9ucygkc2VydmVyKTsKIAl9CisJaWYgKCRiYWNrZW5kIGVxICdt eXNxbCcpCisJeworCQlyZXR1cm4gWDJHbzo6U2VydmVyOjpEQjo6TXlTUUw6OmRiX2xpc3RzaGFk b3dzZXNzaW9ucygkc2VydmVyKTsKKwl9CiAJaWYgKCRiYWNrZW5kIGVxICdzcWxpdGUnKQogCXsK IAkJcmV0dXJuIHNwbGl0KCJcbiIsc3lzdGVtX2NhcHR1cmVfbWVyZ2VkX291dHB1dCgiJHgyZ29f bGliX3BhdGgvbGlieDJnby1zZXJ2ZXItZGItc3FsaXRlMy13cmFwcGVyIiwgImxpc3RzaGFkb3dz ZXNzaW9ucyIsICIkc2VydmVyIikpOwpAQCAtNDk5LDYgKzYwMSwxMCBAQAogCXsKIAkJcmV0dXJu IFgyR286OlNlcnZlcjo6REI6OlBvc3RncmVTUUw6OmRiX2xpc3RzaGFkb3dzZXNzaW9uc19hbGwo KTsKIAl9CisJaWYoJGJhY2tlbmQgZXEgJ215c3FsJykKKwl7CisJCXJldHVybiBYMkdvOjpTZXJ2 ZXI6OkRCOjpNeVNRTDo6ZGJfbGlzdHNoYWRvd3Nlc3Npb25zX2FsbCgpOworCX0KIAlpZiAoJGJh Y2tlbmQgZXEgJ3NxbGl0ZScpCiAJewogCQlyZXR1cm4gc3BsaXQoIlxuIixzeXN0ZW1fY2FwdHVy ZV9tZXJnZWRfb3V0cHV0KCIkeDJnb19saWJfcGF0aC9saWJ4MmdvLXNlcnZlci1kYi1zcWxpdGUz LXdyYXBwZXIiLCAibGlzdHNoYWRvd3Nlc3Npb25zX2FsbCIpKTsKZGlmZiAtLWdpdCBhL1gyR28v U2VydmVyL0RCL015U1FMLnBtIGIvWDJHby9TZXJ2ZXIvREIvTXlTUUwucG0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlODFkZQotLS0gL2Rldi9udWxsCisrKyBiL1gyR28v U2VydmVyL0RCL015U1FMLnBtCkBAIC0wLDAgKzEsNzM5IEBACisjIENvcHlyaWdodCAoQykgMjAw Ny0yMDE1IFgyR28gUHJvamVjdCAtIGh0dHA6Ly93aWtpLngyZ28ub3JnCisjCisjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorIyBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDE1IE9sZWtz YW5kciBTaG5leWRlciA8b2xla3NhbmRyLnNobmV5ZGVyQG9idmlvdXNseS1uaWNlLmRlPgorIyBD b3B5cmlnaHQgKEMpIDIwMDctMjAxNSBIZWluei1NYXJrdXMgR3JhZXNpbmcgPGhlaW56LW0uZ3Jh ZXNpbmdAb2J2aW91c2x5LW5pY2UuZGU+CisKK3BhY2thZ2UgWDJHbzo6U2VydmVyOjpEQjo6TXlT UUw7CisKKz1oZWFkMSBOQU1FCisKK1gyR286OlNlcnZlcjo6REI6Ok15U1FMIC0gWDJHbyBTZXNz aW9uIERhdGFiYXNlIHBhY2thZ2UgZm9yIFBlcmwgKE15U1FMIGJhY2tlbmQpCisKKz1oZWFkMSBE RVNDUklQVElPTgorCitYMkdvOjpTZXJ2ZXI6OkRCOjpNeVNRTCBQZXJsIHBhY2thZ2UgZm9yIFgy R286OlNlcnZlci4KKworPWN1dAorCit1c2Ugc3RyaWN0OwordXNlIERCSTsKK3VzZSBQT1NJWDsK K3VzZSBTeXM6OlN5c2xvZyBxdyggOnN0YW5kYXJkIDptYWNyb3MgKTsKKwordXNlIFgyR286Okxv ZyBxdyggbG9nbGV2ZWwgKTsKK3VzZSBYMkdvOjpDb25maWcgcXcoIGdldF9jb25maWcgZ2V0X3Nx bGNvbmZpZyApOwordXNlIFgyR286OlV0aWxzIHF3KCBzYW5pdGl6ZXIgc3lzdGVtX2NhcHR1cmVf c3Rkb3V0X291dHB1dCBpc190cnVlICk7CisKK3NldGxvZ21hc2soIExPR19VUFRPKGxvZ2xldmVs KCkpICk7CisKK3VzZSBiYXNlICdFeHBvcnRlcic7CisKK291ciBARVhQT1JUPSgnZGJfbGlzdHNl c3Npb25zJywnZGJfbGlzdHNlc3Npb25zX2FsbCcsICdkYl9nZXRzZXJ2ZXJzJywgJ2RiX2dldGFn ZW50JywgJ2RiX3Jlc3VtZScsICdkYl9jaGFuZ2VzdGF0dXMnLCAnZGJfZ2V0c3RhdHVzJywKKyAg ICAgICAgICAgICAnZGJfZ2V0ZGlzcGxheXMnLCAnZGJfaW5zZXJ0c2Vzc2lvbicsICdkYl9pbnNl cnRzaGFkb3dzZXNzaW9uJywgJ2RiX2dldHBvcnRzJywgJ2RiX2luc2VydHBvcnQnLCAnZGJfcm1w b3J0JywgJ2RiX2NyZWF0ZXNlc3Npb24nLCAnZGJfY3JlYXRlc2hhZG93c2Vzc2lvbicsICdkYl9p bnNlcnRtb3VudCcsCisgICAgICAgICAgICAgJ2RiX2dldG1vdW50cycsICdkYl9kZWxldGVtb3Vu dCcsICdkYl9nZXRkaXNwbGF5JywgJ2Ric3lzX2dldG1vdW50cycsICdkYnN5c19saXN0c2Vzc2lv bnNyb290JywKKyAgICAgICAgICAgICAnZGJzeXNfbGlzdHNlc3Npb25zcm9vdF9hbGwnLCAnZGJz eXNfcm1zZXNzaW9uc3Jvb3QnLCAnZGJzeXNfZGVsZXRlbW91bnRzJywgJ2RiX2xpc3RzaGFkb3dz ZXNzaW9ucycsJ2RiX2xpc3RzaGFkb3dzZXNzaW9uc19hbGwnLCApOworCitteSAoJHVuYW1lLCAk cGFzcywgJHVpZCwgJHBnaWQsICRxdW90YSwgJGNvbW1lbnQsICRnY29zLCAkaG9tZWRpciwgJHNo ZWxsLCAkZXhwaXJlKSA9IGdldHB3dWlkKCQ8KTsKK215ICRyZWFsdXNlcj0kdW5hbWU7CisKK215 ICRob3N0OworbXkgJHBvcnQ7CitteSAkZGI9IngyZ29fc2Vzc2lvbnMiOworI215ICRkYnBhc3M9 ImllY2g3eWFIIjsKKyNteSAkZGJ1c2VyPSJ4MmdvZGJ1c2VyIjsKK215ICRkYnBhc3M7CitteSAk ZGJ1c2VyOworbXkgJHNzbG1vZGU7CitteSAkd2l0aF9UZUtpOworCitzdWIgaW5pdF9kYgorewor CSMgdGhlICRDb25maWcgaXMgcmVxdWlyZWQgbGF0ZXIgKHNlZSBiZWxvdy4uLikKKwlteSAkQ29u ZmlnID0gZ2V0X2NvbmZpZzsKKwkkd2l0aF9UZUtpID0gaXNfdHJ1ZSgkQ29uZmlnLT5wYXJhbSgi dGVsZWtpbmVzaXMuZW5hYmxlIikpOworCisJaWYgKCAhICggJGRidXNlciBhbmQgJGRicGFzcyAp ICkKKwl7CisJCW15ICRTcWxDb25maWcgPSBnZXRfc3FsY29uZmlnOworCQlteSAkeDJnb19saWJf cGF0aD1zeXN0ZW1fY2FwdHVyZV9zdGRvdXRfb3V0cHV0KCJ4MmdvcGF0aCIsICJsaWJleGVjIik7 CisKKwkJbXkgJGJhY2tlbmQ9JFNxbENvbmZpZy0+cGFyYW0oImJhY2tlbmQiKTsKKwkJaWYgKCAk YmFja2VuZCBuZSAibXlzcWwiICkKKwkJeworCQkJZGllICJYMkdvIHNlcnZlciBpcyBub3QgY29u ZmlndXJlZCB0byB1c2UgdGhlIE15U1FMIHNlc3Npb24gZGIgYmFja2VuZCI7CisJCX0KKworCQkk aG9zdD0kU3FsQ29uZmlnLT5wYXJhbSgibXlzcWwuaG9zdCIpOworCQkkcG9ydD0kU3FsQ29uZmln LT5wYXJhbSgibXlzcWwucG9ydCIpOworCQlpZiAoISRob3N0KQorCQl7CisJCQkkaG9zdD0nbG9j YWxob3N0JzsKKwkJfQorCQlpZiAoISRwb3J0KQorCQl7CisJCQkkcG9ydD0nMzMwNic7CisJCX0K KwkJbXkgJHBhc3NmaWxlOworCQlpZiAoJHVuYW1lIGVxICdyb290JykKKwkJeworCQkJJGRidXNl cj0neDJnb2RidXNlcic7CisJCQkkcGFzc2ZpbGU9Ii9ldGMveDJnby94Mmdvc3FsL3Bhc3N3b3Jk cy94MmdvYWRtaW4iOworCQl9CisJCWVsc2UKKwkJeworCQkJJGRidXNlcj0ieDJnb3VzZXJfJHVu YW1lIjsKKwkJCSRwYXNzZmlsZT0iJGhvbWVkaXIvLngyZ28vc3FscGFzcyI7CisJCX0KKwkJb3Bl biAoRkwsIjwgJHBhc3NmaWxlIikgb3IgZGllICJDYW4ndCByZWFkIHBhc3N3b3JkIGZpbGUgJHBh c3NmaWxlPGJyPiI7CisJCSRkYnBhc3M9PEZMPjsKKwkJY2xvc2UoRkwpOworCQljaG9tcCgkZGJw YXNzKTsKKwl9CisKKwlteSAkZGJoPURCSS0+Y29ubmVjdCgiZGJpOm15c3FsOmRhdGFiYXNlPSRk Yjtob3N0PSRob3N0O3BvcnQ9JHBvcnQiLCIkZGJ1c2VyIiwiJGRicGFzcyIse1JhaXNlRXJyb3Ig PT4gMX0pIG9yIGRpZSAkXzsKKworCXJldHVybiAkZGJoOworfQorCitzdWIgZGJzeXNfcm1zZXNz aW9uc3Jvb3QKK3sKKwlteSAkZGJoID0gaW5pdF9kYigpOworCWNoZWNrX3Jvb3QoKTsKKwlteSAk c2lkPXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJzZXNzaW9uX2lkXCIgbWlzc2VkIjsKKwlteSAk c3RoPSRkYmgtPnByZXBhcmUoImRlbGV0ZSBmcm9tIHNlc3Npb25zICB3aGVyZSBzZXNzaW9uX2lk PT8iKTsKKwkkc3RoLT5leGVjdXRlKCRzaWQpOworCWlmICgkc3RoLT5lcnIoKSkKKwl7CisJCXN5 c2xvZygnZXJyb3InLCAicm1zZXNzaW9uc3Jvb3QgKE15U1FMIHNlc3Npb24gZGIgYmFja2VuZCkg ZmFpbGVkIHdpdGggZXhpdGNvZGU6ICRzdGgtPmVycigpIik7CisJCWRpZTsKKwl9CisJJHN0aC0+ ZmluaXNoKCk7CisJdW5kZWYgJGRiaDsKKwlyZXR1cm4gMTsKK30KKworc3ViIGRic3lzX2xpc3Rz ZXNzaW9uc3Jvb3QKK3sKKwlteSAkZGJoID0gaW5pdF9kYigpOworCWNoZWNrX3Jvb3QoKTsKKwlt eSAkc2VydmVyPXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJzZXJ2ZXJcIiBtaXNzZWQiOworCW15 IEBzdHJpbmdzOworCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgic2VsZWN0IGFnZW50X3BpZCwgc2Vz c2lvbl9pZCwgZGlzcGxheSwgc2VydmVyLCBzdGF0dXMsCisJICAgICAgICAgICAgICAgICAgICAg ICBEQVRFX0ZPUk1BVChpbml0X3RpbWUsICclWS0lbS0lZFQlSDolSTolUycpLAorCSAgICAgICAg ICAgICAgICAgICAgICAgY29va2llLGNsaWVudCxncl9wb3J0LHNvdW5kX3BvcnQsCisJICAgICAg ICAgICAgICAgICAgICAgICBEQVRFX0ZPUk1BVChsYXN0X3RpbWUsICclWS0lbS0lZFQlSDolSTol UycpLAorCSAgICAgICAgICAgICAgICAgICAgICAgdW5hbWUsCisJICAgICAgICAgICAgICAgICAg ICAgICBNT0QoVU5JWF9USU1FU1RBTVAoTk9XKCkpIC0gVU5JWF9USU1FU1RBTVAoaW5pdF90aW1l KSwgODY0MDApLGZzX3BvcnQsCisJICAgICAgICAgICAgICAgICAgICAgICB0ZWtpY3RybF9wb3J0 LCB0ZWtpZGF0YV9wb3J0IGZyb20gc2Vzc2lvbnMKKwkgICAgICAgICAgICAgICAgICAgICAgIHdo ZXJlIHNlcnZlcj0/ICBvcmRlciBieSBzdGF0dXMgZGVzYyIpOworCSRzdGgtPmV4ZWN1dGUoJHNl cnZlcik7CisJaWYgKCRzdGgtPmVycigpKSB7CisJCXN5c2xvZygnZXJyb3InLCAibGlzdHNlc3Np b25zcm9vdCAoTXlTUUwgc2Vzc2lvbiBkYiBiYWNrZW5kKSBmYWlsZWQgd2l0aCBleGl0Y29kZTog JHN0aC0+ZXJyKCkiKTsKKwkJZGllKCk7CisJfQorCW15IEBzZXNzaW9ucyA9IGZldGNocm93X2Fy cmF5X2RhdGFzZXRzKCRzdGgpOworCSRzdGgtPmZpbmlzaCgpOworCXVuZGVmICRkYmg7CisJcmV0 dXJuIEBzZXNzaW9uczsKK30KKworc3ViIGRic3lzX2xpc3RzZXNzaW9uc3Jvb3RfYWxsCit7CisJ bXkgJGRiaCA9IGluaXRfZGIoKTsKKwljaGVja19yb290KCk7CisJbXkgQHN0cmluZ3M7CisJbXkg JHN0aD0kZGJoLT5wcmVwYXJlKCJzZWxlY3QgYWdlbnRfcGlkLCBzZXNzaW9uX2lkLCBkaXNwbGF5 LCBzZXJ2ZXIsIHN0YXR1cywKKwkgICAgICAgICAgICAgICAgICAgICAgIERBVEVfRk9STUFUKGlu aXRfdGltZSwgJyVZLSVtLSVkVCVIOiVJOiVTJyksCisJICAgICAgICAgICAgICAgICAgICAgICBj b29raWUsY2xpZW50LGdyX3BvcnQsc291bmRfcG9ydCwKKwkgICAgICAgICAgICAgICAgICAgICAg IERBVEVfRk9STUFUKGxhc3RfdGltZSwgJyVZLSVtLSVkVCVIOiVJOiVTJyksCisJICAgICAgICAg ICAgICAgICAgICAgICB1bmFtZSwKKwkgICAgICAgICAgICAgICAgICAgICAgIE1PRChVTklYX1RJ TUVTVEFNUChOT1coKSkgLSBVTklYX1RJTUVTVEFNUChpbml0X3RpbWUpLCA4NjQwMCksZnNfcG9y dCwKKwkgICAgICAgICAgICAgICAgICAgICAgIHRla2ljdHJsX3BvcnQsIHRla2lkYXRhX3BvcnQg ZnJvbSBzZXNzaW9ucworCSAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgc3RhdHVzIGRl c2MiKTsKKwkkc3RoLT5leGVjdXRlKCk7CisJaWYgKCRzdGgtPmVycigpKQorCXsKKwkJc3lzbG9n KCdlcnJvcicsICJsaXN0c2Vzc2lvbnNyb290X2FsbCAoTXlTUUwgc2Vzc2lvbiBkYiBiYWNrZW5k KSBmYWlsZWQgd2l0aCBleGl0Y29kZTogJHN0aC0+ZXJyKCkiKTsKKwkJZGllKCk7CisJfQorCW15 IEBzZXNzaW9ucyA9IGZldGNocm93X2FycmF5X2RhdGFzZXRzKCRzdGgpOworCSRzdGgtPmZpbmlz aCgpOworCXVuZGVmICRkYmg7CisJcmV0dXJuIEBzZXNzaW9uczsKK30KKworc3ViIGRic3lzX2Rl bGV0ZW1vdW50cworeworCW15ICRkYmggPSBpbml0X2RiKCk7CisJbXkgJHNpZD1zaGlmdCBvciBk aWUgImFyZ3VtZW50IFwic2Vzc2lvbl9pZFwiIG1pc3NlZCI7CisJY2hlY2tfdXNlcigkc2lkKTsK KwlteSAkc3RoPSRkYmgtPnByZXBhcmUoImRlbGV0ZSBmcm9tIG1vdW50cyB3aGVyZSBzZXNzaW9u X2lkPT8iKTsKKwkkc3RoLT5leGVjdXRlKCRzaWQpOworCWlmICgkc3RoLT5lcnIoKSkKKwl7CisJ CXN5c2xvZygnZXJyb3InLCAiZGVsZXRlbW91bnRzIChNeVNRTCBzZXNzaW9uIGRiIGJhY2tlbmQp IGZhaWxlZCB3aXRoIGV4aXRjb2RlOiAkc3RoLT5lcnIoKSIpOworCQlkaWUoKTsKKwl9CisJJHN0 aC0+ZmluaXNoKCk7CisJdW5kZWYgJGRiaDsKKwlyZXR1cm4gMTsKK30KKworc3ViIGRiX2dldG1v dW50cworeworCW15ICRkYmggPSBpbml0X2RiKCk7CisJbXkgJHNpZD1zaGlmdCBvciBkaWUgImFy Z3VtZW50IFwic2Vzc2lvbl9pZFwiIG1pc3NlZCI7CisJJHNpZCA9IHNhbml0aXplcigneDJnb3Np ZCcsICRzaWQpIG9yIGRpZSAiYXJndW1lbnQgXCJzZXNzaW9uX2lkXCIgbWFsZm9ybWVkIjsKKwlj aGVja191c2VyKCRzaWQpOworCW15IEBzdHJpbmdzOworCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgi c2VsZWN0IGNsaWVudCwgcGF0aCBmcm9tIG1vdW50cyB3aGVyZSBzZXNzaW9uX2lkPT8iKTsKKwkk c3RoLT5leGVjdXRlKCRzaWQpOworCWlmICgkc3RoLT5lcnIoKSkKKwl7CisJCXN5c2xvZygnZXJy b3InLCAiZ2V0bW91bnRzIChNeVNRTCBzZXNzaW9uIGRiIGJhY2tlbmQpIGZhaWxlZCB3aXRoIGV4 aXRjb2RlOiAkc3RoLT5lcnIoKSIpOworCQlkaWU7CisJfQorCW15IEBtb3VudHMgPSBmZXRjaHJv d19hcnJheV9kYXRhc2V0cygkc3RoKTsKKwkkc3RoLT5maW5pc2goKTsKKwl1bmRlZiAkZGJoOwor CXJldHVybiBAbW91bnRzOworfQorCitzdWIgZGJfZGVsZXRlbW91bnQKK3sKKwlteSAkZGJoID0g aW5pdF9kYigpOworCW15ICRzaWQ9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInNlc3Npb25faWRc IiBtaXNzZWQiOworCSRzaWQgPSBzYW5pdGl6ZXIoJ3gyZ29zaWQnLCAkc2lkKSBvciBkaWUgImFy Z3VtZW50IFwic2Vzc2lvbl9pZFwiIG1hbGZvcm1lZCI7CisJbXkgJHBhdGg9c2hpZnQgb3IgZGll ICJhcmd1bWVudCBcInBhdGhcIiBtaXNzZWQiOworCWNoZWNrX3VzZXIoJHNpZCk7CisJbXkgJHN0 aD0kZGJoLT5wcmVwYXJlKCJkZWxldGUgZnJvbSBtb3VudHMgd2hlcmUgc2Vzc2lvbl9pZD0/IGFu ZCBwYXRoPT8iKTsKKwkkc3RoLT5leGVjdXRlKCRzaWQsICRwYXRoKTsKKwlpZiAoJHN0aC0+ZXJy KCkpCisJeworCQlzeXNsb2coJ2Vycm9yJywgImRlbGV0ZW1vdW50IChNeVNRTCBzZXNzaW9uIGRi IGJhY2tlbmQpIGZhaWxlZCB3aXRoIGV4aXRjb2RlOiAkc3RoLT5lcnIoKSIpOworCQlkaWUoKTsK Kwl9CisJJHN0aC0+ZmluaXNoKCk7CisJdW5kZWYgJGRiaDsKKwlyZXR1cm4gMTsKK30KKworc3Vi IGRiX2luc2VydG1vdW50Cit7CisJbXkgJGRiaCA9IGluaXRfZGIoKTsKKwlteSAkc2lkPXNoaWZ0 IG9yIGRpZSAiYXJndW1lbnQgXCJzZXNzaW9uX2lkXCIgbWlzc2VkIjsKKwkkc2lkID0gc2FuaXRp emVyKCd4Mmdvc2lkJywgJHNpZCkgb3IgZGllICJhcmd1bWVudCBcInNlc3Npb25faWRcIiBtYWxm b3JtZWQiOworCW15ICRwYXRoPXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJwYXRoXCIgbWlzc2Vk IjsKKwlteSAkY2xpZW50PXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJjbGllbnRcIiBtaXNzZWQi OworCWNoZWNrX3VzZXIoJHNpZCk7CisJbXkgJHN0aD0kZGJoLT5wcmVwYXJlKCJpbnNlcnQgaW50 byBtb3VudHMgKHNlc3Npb25faWQscGF0aCxjbGllbnQpIHZhbHVlcyAgKD8sID8sID8pIik7CisJ JHN0aC0+ZXhlY3V0ZSgkc2lkLCAkcGF0aCwgJGNsaWVudCk7CisJbXkgJHN1Y2Nlc3MgPSAwOwor CWlmKCEgJHN0aC0+ZXJyKCkpCisJeworCQkkc3VjY2VzcyA9IDE7CisJfSBlbHNlIHsKKwkJc3lz bG9nKCdkZWJ1ZycsICJpbnNlcnRtb3VudCAoTXlTUUwgc2Vzc2lvbiBkYiBiYWNrZW5kKSBmYWls ZWQgd2l0aCBleGl0Y29kZTogJHN0aC0+ZXJyKCksIHRoaXMgaXNzdWUgd2lsbCBiZSBpbnRlcnBy ZXRlZCBhczogU1NIRlMgc2hhcmUgYWxyZWFkeSBtb3VudGVkIik7CisJfQorCSRzdGgtPmZpbmlz aCgpOworCXVuZGVmICRkYmg7CisJcmV0dXJuICRzdWNjZXNzOworfQorCitzdWIgZGJfaW5zZXJ0 c2Vzc2lvbgoreworCW15ICRkYmggPSBpbml0X2RiKCk7CisJbXkgJGRpc3BsYXk9c2hpZnQgb3Ig ZGllICJhcmd1bWVudCBcImRpc3BsYXlcIiBtaXNzZWQiOworCSRkaXNwbGF5ID0gc2FuaXRpemVy KCdudW0nLCAkZGlzcGxheSkgb3IgZGllICJhcmd1bWVudCBcImRpc3BsYXlcIiBtYWxmb3JtZWQi OworCW15ICRzZXJ2ZXI9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInNlcnZlclwiIG1pc3NlZCI7 CisJbXkgJHNpZD1zaGlmdCBvciBkaWUgImFyZ3VtZW50IFwic2Vzc2lvbl9pZFwiIG1pc3NlZCI7 CisJJHNpZCA9IHNhbml0aXplcigneDJnb3NpZCcsICRzaWQpIG9yIGRpZSAiYXJndW1lbnQgXCJz ZXNzaW9uX2lkXCIgbWFsZm9ybWVkIjsKKwljaGVja191c2VyKCRzaWQpOworCW15ICRzdGg9JGRi aC0+cHJlcGFyZSgiaW5zZXJ0IGludG8gc2Vzc2lvbnMgKGRpc3BsYXksc2VydmVyLHVuYW1lLHNl c3Npb25faWQsIGluaXRfdGltZSwgbGFzdF90aW1lKSB2YWx1ZXMKKwkgICAgICAgICAgICAgICAg ICAgICAgICg/LCA/LCA/LCA/LCBOT1coKSwgTk9XKCkpIik7CisJJHN0aC0+ZXhlY3V0ZSgkZGlz cGxheSwgJHNlcnZlciwgJHJlYWx1c2VyLCAkc2lkKSBvciBkaWUgJF87CisJJHN0aC0+ZmluaXNo KCk7CisJdW5kZWYgJGRiaDsKKwlyZXR1cm4gMTsKK30KKworc3ViIGRiX2luc2VydHNoYWRvd3Nl c3Npb24KK3sKKwlteSAkZGJoID0gaW5pdF9kYigpOworCW15ICRkaXNwbGF5PXNoaWZ0IG9yIGRp ZSAiYXJndW1lbnQgXCJkaXNwbGF5XCIgbWlzc2VkIjsKKwkkZGlzcGxheSA9IHNhbml0aXplcign bnVtJywgJGRpc3BsYXkpIG9yIGRpZSAiYXJndW1lbnQgXCJkaXNwbGF5XCIgbWFsZm9ybWVkIjsK KwlteSAkc2VydmVyPXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJzZXJ2ZXJcIiBtaXNzZWQiOwor CW15ICRzaWQ9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInNlc3Npb25faWRcIiBtaXNzZWQiOwor CSRzaWQgPSBzYW5pdGl6ZXIoJ3gyZ29zaWQnLCAkc2lkKSBvciBkaWUgImFyZ3VtZW50IFwic2Vz c2lvbl9pZFwiIG1hbGZvcm1lZCI7CisJbXkgJHNoYWRyZXFfdXNlciA9IHNoaWZ0IG9yIGRpZSAi YXJndW1lbnQgXCJzaGFkcmVxX3VzZXJcIiBtaXNzZWQiOworCW15ICRmYWtlX3NpZCA9ICRzaWQ7 CisJJGZha2Vfc2lkID1+IHMvJHNoYWRyZXFfdXNlci0vJHJlYWx1c2VyLS87CisJY2hlY2tfdXNl cigkZmFrZV9zaWQpOworCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgiaW5zZXJ0IGludG8gc2Vzc2lv bnMgKGRpc3BsYXksc2VydmVyLHVuYW1lLHNlc3Npb25faWQsIGluaXRfdGltZSwgbGFzdF90aW1l KSB2YWx1ZXMKKwkgICAgICAgICAgICAgICAgICAgICAgICg/LCA/LCA/LCA/LCBOT1coKSwgTk9X KCkpIik7CisJJHN0aC0+ZXhlY3V0ZSgkZGlzcGxheSwgJHNlcnZlciwgJHNoYWRyZXFfdXNlciwg JHNpZCkgb3IgZGllICRfOworCSRzdGgtPmZpbmlzaCgpOworCXVuZGVmICRkYmg7CisJcmV0dXJu IDE7Cit9CisKK3N1YiBkYl9jcmVhdGVzZXNzaW9uCit7CisJbXkgJGRiaCA9IGluaXRfZGIoKTsK KwlteSAkc2lkPXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJzZXNzaW9uX2lkXCIgbWlzc2VkIjsK Kwkkc2lkID0gc2FuaXRpemVyKCd4Mmdvc2lkJywgJHNpZCkgb3IgZGllICJhcmd1bWVudCBcInNl c3Npb25faWRcIiBtYWxmb3JtZWQiOworCW15ICRjb29raWU9c2hpZnQgb3IgZGllImFyZ3VtZW50 IFwiY29va2llXCIgbWlzc2VkIjsKKwlteSAkcGlkPXNoaWZ0IG9yIGRpZSJhcmd1bWVudCBcInBp ZFwiIG1pc3NlZCI7CisJJHBpZCA9IHNhbml0aXplcignbnVtJywgJHBpZCkgb3IgZGllICJhcmd1 bWVudCBcInBpZFwiIG1hbGZvcm1lZCI7CisJbXkgJGNsaWVudD1zaGlmdCBvciBkaWUiYXJndW1l bnQgXCJjbGllbnRcIiBtaXNzZWQiOworCW15ICRncl9wb3J0PXNoaWZ0IG9yIGRpZSJhcmd1bWVu dCBcImdyX3BvcnRcIiBtaXNzZWQiOworCSRncl9wb3J0ID0gc2FuaXRpemVyKCdudW0nLCAkZ3Jf cG9ydCkgb3IgZGllICJhcmd1bWVudCBcImdyX3BvcnRcIiBtYWxmb3JtZWQiOworCW15ICRzbmRf cG9ydD1zaGlmdCBvciBkaWUiYXJndW1lbnQgXCJzbmRfcG9ydFwiIG1pc3NlZCI7CisJJHNuZF9w b3J0ID0gc2FuaXRpemVyKCdudW0nLCAkc25kX3BvcnQpIG9yIGRpZSAiYXJndW1lbnQgXCJzbmRf cG9ydFwiIG1hbGZvcm1lZCI7CisJbXkgJGZzX3BvcnQ9c2hpZnQgb3IgZGllImFyZ3VtZW50IFwi ZnNfcG9ydFwiIG1pc3NlZCI7CisJJGZzX3BvcnQgPSBzYW5pdGl6ZXIoJ251bScsICRmc19wb3J0 KSBvciBkaWUgImFyZ3VtZW50IFwiZnNfcG9ydFwiIG1hbGZvcm1lZCI7CisJbXkgJHRla2ljdHJs X3BvcnQ9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInRla2ljdHJsX3BvcnRcIiBtaXNzZWQiOwor CSR0ZWtpY3RybF9wb3J0ID0gc2FuaXRpemVyKCdwbm51bScsICR0ZWtpY3RybF9wb3J0KSBvciBk aWUgImFyZ3VtZW50IFwidGVraWN0cmxfcG9ydFwiIG1hbGZvcm1lZCI7CisJbXkgJHRla2lkYXRh X3BvcnQ9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInRla2lkYXRhX3BvcnRcIiBtaXNzZWQiOwor CSR0ZWtpZGF0YV9wb3J0ID0gc2FuaXRpemVyKCdwbm51bScsICR0ZWtpZGF0YV9wb3J0KSBvciBk aWUgImFyZ3VtZW50IFwidGVraWRhdGFfcG9ydFwiIG1hbGZvcm1lZCI7CisJY2hlY2tfdXNlcigk c2lkKTsKKwlteSAkc3RoPSRkYmgtPnByZXBhcmUoInVwZGF0ZSBzZXNzaW9ucyBzZXQgc3RhdHVz PSdSJyxsYXN0X3RpbWU9Tk9XKCksY29va2llPT8sYWdlbnRfcGlkPT8sCisJICAgICAgICAgICAg ICAgICAgICAgICBjbGllbnQ9Pyxncl9wb3J0PT8sc291bmRfcG9ydD0/LGZzX3BvcnQ9Pyx0ZWtp Y3RybF9wb3J0PT8sdGVraWRhdGFfcG9ydD0/IHdoZXJlIHNlc3Npb25faWQ9PyBhbmQgdW5hbWU9 PyIpOworCSRzdGgtPmV4ZWN1dGUoJGNvb2tpZSwgJHBpZCwgJGNsaWVudCwgJGdyX3BvcnQsICRz bmRfcG9ydCwgJGZzX3BvcnQsICR0ZWtpY3RybF9wb3J0LCAkdGVraWRhdGFfcG9ydCwgJHNpZCwg JHJlYWx1c2VyKTsKKwlpZiAoJHN0aC0+ZXJyKCkpCisJeworCQlzeXNsb2coJ2Vycm9yJywgImNy ZWF0ZXNlc3Npb24gKE15U1FMIHNlc3Npb24gZGIgYmFja2VuZCkgZmFpbGVkIHdpdGggZXhpdGNv ZGU6ICRzdGgtPmVycigpIik7CisJCWRpZSgpOworCX0KKwkkc3RoLT5maW5pc2goKTsKKwl1bmRl ZiAkZGJoOworCXJldHVybiAxOworfQorCitzdWIgZGJfY3JlYXRlc2hhZG93c2Vzc2lvbgorewor CW15ICRkYmggPSBpbml0X2RiKCk7CisJbXkgJHNpZD1zaGlmdCBvciBkaWUgImFyZ3VtZW50IFwi c2Vzc2lvbl9pZFwiIG1pc3NlZCI7CisJJHNpZCA9IHNhbml0aXplcigneDJnb3NpZCcsICRzaWQp IG9yIGRpZSAiYXJndW1lbnQgXCJzZXNzaW9uX2lkXCIgbWFsZm9ybWVkIjsKKwlteSAkY29va2ll PXNoaWZ0IG9yIGRpZSJhcmd1bWVudCBcImNvb2tpZVwiIG1pc3NlZCI7CisJbXkgJHBpZD1zaGlm dCBvciBkaWUiYXJndW1lbnQgXCJwaWRcIiBtaXNzZWQiOworCSRwaWQgPSBzYW5pdGl6ZXIoJ251 bScsICRwaWQpIG9yIGRpZSAiYXJndW1lbnQgXCJwaWRcIiBtYWxmb3JtZWQiOworCW15ICRjbGll bnQ9c2hpZnQgb3IgZGllImFyZ3VtZW50IFwiY2xpZW50XCIgbWlzc2VkIjsKKwlteSAkZ3JfcG9y dD1zaGlmdCBvciBkaWUiYXJndW1lbnQgXCJncl9wb3J0XCIgbWlzc2VkIjsKKwkkZ3JfcG9ydCA9 IHNhbml0aXplcignbnVtJywgJGdyX3BvcnQpIG9yIGRpZSAiYXJndW1lbnQgXCJncl9wb3J0XCIg bWFsZm9ybWVkIjsKKwlteSAkc25kX3BvcnQ9c2hpZnQgb3IgZGllImFyZ3VtZW50IFwic25kX3Bv cnRcIiBtaXNzZWQiOworCSRzbmRfcG9ydCA9IHNhbml0aXplcignbnVtJywgJHNuZF9wb3J0KSBv ciBkaWUgImFyZ3VtZW50IFwic25kX3BvcnRcIiBtYWxmb3JtZWQiOworCW15ICRmc19wb3J0PXNo aWZ0IG9yIGRpZSJhcmd1bWVudCBcImZzX3BvcnRcIiBtaXNzZWQiOworCSRmc19wb3J0ID0gc2Fu aXRpemVyKCdudW0nLCAkZnNfcG9ydCkgb3IgZGllICJhcmd1bWVudCBcImZzX3BvcnRcIiBtYWxm b3JtZWQiOworCW15ICRzaGFkcmVxX3VzZXIgPSBzaGlmdCBvciBkaWUgImFyZ3VtZW50IFwic2hh ZHJlcV91c2VyXCIgbWlzc2VkIjsKKwljaGVja191c2VyKCRzaWQpOworCW15ICRzdGg9JGRiaC0+ cHJlcGFyZSgidXBkYXRlIHNlc3Npb25zIHNldCBzdGF0dXM9J1InLGxhc3RfdGltZT1OT1coKSxj b29raWU9PyxhZ2VudF9waWQ9PywKKwkgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudD0/LGdy X3BvcnQ9Pyxzb3VuZF9wb3J0PT8sZnNfcG9ydD0/LHRla2ljdHJsX3BvcnQ9LTEsdGVraWRhdGFf cG9ydD0tMSB3aGVyZSBzZXNzaW9uX2lkPT8gYW5kIHVuYW1lPT8iKTsKKwkkc3RoLT5leGVjdXRl KCRjb29raWUsICRwaWQsICRjbGllbnQsICRncl9wb3J0LCAkc25kX3BvcnQsICRmc19wb3J0LCAk c2lkLCAkc2hhZHJlcV91c2VyKTsKKwlpZiAoJHN0aC0+ZXJyKCkpCisJeworCQlzeXNsb2coJ2Vy cm9yJywgImNyZWF0ZXNoYWRvd3Nlc3Npb24gKE15U1FMIHNlc3Npb24gZGIgYmFja2VuZCkgZmFp bGVkIHdpdGggZXhpdGNvZGU6ICRzdGgtPmVycigpIik7CisJCWRpZSgpOworCX0KKwkkc3RoLT5m aW5pc2goKTsKKwl1bmRlZiAkZGJoOworCXJldHVybiAxOworfQorCitzdWIgZGJfaW5zZXJ0cG9y dAoreworCW15ICRkYmggPSBpbml0X2RiKCk7CisJbXkgJHNlcnZlcj1zaGlmdCBvciBkaWUgImFy Z3VtZW50IFwic2VydmVyXCIgbWlzc2VkIjsKKwlteSAkc2lkPXNoaWZ0IG9yIGRpZSAiYXJndW1l bnQgXCJzZXNzaW9uX2lkXCIgbWlzc2VkIjsKKwkkc2lkID0gc2FuaXRpemVyKCd4Mmdvc2lkJywg JHNpZCkgb3IgZGllICJhcmd1bWVudCBcInNlc3Npb25faWRcIiBtYWxmb3JtZWQiOworCW15ICRz c2hwb3J0PXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJwb3J0XCIgbWlzc2VkIjsKKwlteSAkc3Ro PSRkYmgtPnByZXBhcmUoImluc2VydCBpbnRvIHVzZWRfcG9ydHMgKHNlcnZlcixzZXNzaW9uX2lk LHBvcnQpIHZhbHVlcyAgKD8sID8sID8pIik7CisJY2hlY2tfdXNlcigkc2lkKTsKKwkkc3RoLT5l eGVjdXRlKCRzZXJ2ZXIsICRzaWQsICRzc2hwb3J0KTsKKwlpZiAoJHN0aC0+ZXJyKCkpCisJewor CQlzeXNsb2coJ2Vycm9yJywgImluc2VydHBvcnQgKE15U1FMIHNlc3Npb24gZGIgYmFja2VuZCkg ZmFpbGVkIHdpdGggZXhpdGNvZGU6ICRzdGgtPmVycigpIik7CisJCWRpZSgpOworCX0KKwkkc3Ro LT5maW5pc2goKTsKKwl1bmRlZiAkZGJoOworCXJldHVybiAxOworfQorCitzdWIgZGJfcm1wb3J0 Cit7CisJbXkgJGRiaCA9IGluaXRfZGIoKTsKKwlteSAkc2VydmVyPXNoaWZ0IG9yIGRpZSAiYXJn dW1lbnQgXCJzZXJ2ZXJcIiBtaXNzZWQiOworCW15ICRzaWQ9c2hpZnQgb3IgZGllICJhcmd1bWVu dCBcInNlc3Npb25faWRcIiBtaXNzZWQiOworCSRzaWQgPSBzYW5pdGl6ZXIoJ3gyZ29zaWQnLCAk c2lkKSBvciBkaWUgImFyZ3VtZW50IFwic2Vzc2lvbl9pZFwiIG1hbGZvcm1lZCI7CisJbXkgJHNz aHBvcnQ9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInBvcnRcIiBtaXNzZWQiOworCW15ICRzdGg9 JGRiaC0+cHJlcGFyZSgiZGVsZXRlIGZyb20gdXNlZF9wb3J0cyB3aGVyZSBzZXJ2ZXI9PyBhbmQg c2Vzc2lvbl9pZD0/IGFuZCBwb3J0PT8iKTsKKwljaGVja191c2VyKCRzaWQpOworCSRzdGgtPmV4 ZWN1dGUoJHNlcnZlciwgJHNpZCwgJHNzaHBvcnQpOworCWlmICgkc3RoLT5lcnIoKSkgeworCQlz eXNsb2coJ2Vycm9yJywgInJtcG9ydCAoTXlTUUwgc2Vzc2lvbiBkYiBiYWNrZW5kKSBmYWlsZWQg d2l0aCBleGl0Y29kZTogJHN0aC0+ZXJyKCkiKTsKKwkJZGllKCk7CisJfQorCSRzdGgtPmZpbmlz aCgpOworCXVuZGVmICRkYmg7CisJcmV0dXJuIDE7Cit9CisKK3N1YiBkYl9yZXN1bWUKK3sKKwlt eSAkZGJoID0gaW5pdF9kYigpOworCW15ICRjbGllbnQ9c2hpZnQgb3IgZGllICJhcmd1bWVudCBc ImNsaWVudFwiIG1pc3NlZCI7CisJbXkgJHNpZD1zaGlmdCBvciBkaWUgImFyZ3VtZW50IFwic2Vz c2lvbl9pZFwiIG1pc3NlZCI7CisJJHNpZCA9IHNhbml0aXplcigneDJnb3NpZCcsICRzaWQpIG9y IGRpZSAiYXJndW1lbnQgXCJzZXNzaW9uX2lkXCIgbWFsZm9ybWVkIjsKKwlteSAkZ3JfcG9ydD1z aGlmdCBvciBkaWUgImFyZ3VtZW50IFwiZ3JfcG9ydFwiIG1pc3NlZCI7CisJJGdyX3BvcnQgPSBz YW5pdGl6ZXIoJ251bScsICRncl9wb3J0KSBvciBkaWUgImFyZ3VtZW50IFwiZ3JfcG9ydFwiIG1h bGZvcm1lZCI7CisJbXkgJHNuZF9wb3J0PXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJzbmRfcG9y dFwiIG1pc3NlZCI7CisJJHNuZF9wb3J0ID0gc2FuaXRpemVyKCdudW0nLCAkc25kX3BvcnQpIG9y IGRpZSAiYXJndW1lbnQgXCJzbmRfcG9ydFwiIG1hbGZvcm1lZCI7CisJbXkgJGZzX3BvcnQ9c2hp ZnQgb3IgZGllICJhcmd1bWVudCBcImZzX3BvcnRcIiBtaXNzZWQiOworCSRmc19wb3J0ID0gc2Fu aXRpemVyKCdudW0nLCAkZnNfcG9ydCkgb3IgZGllICJhcmd1bWVudCBcImZzX3BvcnRcIiBtYWxm b3JtZWQiOworCW15ICR0ZWtpY3RybF9wb3J0PXNoaWZ0IG9yIGRpZSJhcmd1bWVudCBcInRla2lj dHJsX3BvcnRcIiBtaXNzZWQiOworCSR0ZWtpY3RybF9wb3J0ID0gc2FuaXRpemVyKCdwbm51bScs ICR0ZWtpY3RybF9wb3J0KSBvciBkaWUgImFyZ3VtZW50IFwidGVraWN0cmxfcG9ydFwiIG1hbGZv cm1lZCI7CisJbXkgJHRla2lkYXRhX3BvcnQ9c2hpZnQgb3IgZGllImFyZ3VtZW50IFwidGVraWRh dGFfcG9ydFwiIG1pc3NlZCI7CisJJHRla2lkYXRhX3BvcnQgPSBzYW5pdGl6ZXIoJ3BubnVtJywg JHRla2lkYXRhX3BvcnQpIG9yIGRpZSAiYXJndW1lbnQgXCJ0ZWtpZGF0YV9wb3J0XCIgbWFsZm9y bWVkIjsKKwljaGVja191c2VyKCRzaWQpOworCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgidXBkYXRl IHNlc3Npb25zIHNldCBsYXN0X3RpbWU9Tk9XKCksc3RhdHVzPSdSJywKKwkgICAgICAgICAgICAg ICAgICAgICAgIGNsaWVudD0/LGdyX3BvcnQ9Pyxzb3VuZF9wb3J0PT8sZnNfcG9ydD0/LHRla2lj dHJsX3BvcnQ9Pyx0ZWtpZGF0YV9wb3J0PT8gd2hlcmUgc2Vzc2lvbl9pZCA9ID8gYW5kIHVuYW1l PT8iKTsKKwkkc3RoLT5leGVjdXRlKCRjbGllbnQsICRncl9wb3J0LCAkc25kX3BvcnQsICRmc19w b3J0LCAkdGVraWN0cmxfcG9ydCwgJHRla2lkYXRhX3BvcnQsICRzaWQsICRyZWFsdXNlcik7CisJ aWYgKCRzdGgtPmVycigpKQorCXsKKwkJc3lzbG9nKCdlcnJvcicsICJyZXN1bWUgKE15U1FMIHNl c3Npb24gZGIgYmFja2VuZCkgZmFpbGVkIHdpdGggZXhpdGNvZGU6ICRzdGgtPmVycigpIik7CisJ CWRpZSgpOworCX0KKwkkc3RoLT5maW5pc2goKTsKKwl1bmRlZiAkZGJoOworCXJldHVybiAxOwor fQorCitzdWIgZGJfY2hhbmdlc3RhdHVzCit7CisJbXkgJGRiaCA9IGluaXRfZGIoKTsKKwlteSAk c3RhdHVzPXNoaWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJzdGF0dXNcIiBtaXNzZWQiOworCW15ICRz aWQ9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInNlc3Npb25faWRcIiBtaXNzZWQiOworCSRzaWQg PSBzYW5pdGl6ZXIoJ3gyZ29zaWQnLCAkc2lkKSBvciBkaWUgImFyZ3VtZW50IFwic2Vzc2lvbl9p ZFwiIG1hbGZvcm1lZCI7CisJY2hlY2tfdXNlcigkc2lkKTsKKworCSMgd2UgbmVlZCB0byBiZSBh YmxlIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2Ygbm9ybWFsIHNlc3Npb25zICgkcmVhbHVzZXIgPT0g JGVmZmVjdGl2ZV91c2VyKQorCSMgX2FuZF8gZGVza3RvcCBzaGFyaW5nIHNlc3Npb24gKCRyZWFs dXNlciAhPSAkZWZmZWN0aXZlX3VzZXIpLiBUaHVzLCBleHRyYWN0aW5nIHRoZSBlZmZlY3RpdmUK KwkjIHVzZXJuYW1lIGZyb20gdGhlIHNlc3Npb24gSUQuLi4KKwlteSAkZWZmZWN0aXZlX3VzZXIg PSAkc2lkOworCSRlZmZlY3RpdmVfdXNlciA9fiBzL1wtWzAtOV0rXC1bMC05XXsxMH1fLiovLzsK KworCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgidXBkYXRlIHNlc3Npb25zIHNldCBsYXN0X3RpbWU9 Tk9XKCksCisJICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9PyB3aGVyZSBzZXNzaW9uX2lk ID0gPyBhbmQgdW5hbWU9PyIpOworCSRzdGgtPmV4ZWN1dGUoJHN0YXR1cywgJHNpZCwgJGVmZmVj dGl2ZV91c2VyKTsKKwlpZiAoJHN0aC0+ZXJyKCkpCisJeworCQlzeXNsb2coJ2Vycm9yJywgImNo YW5nZXN0YXR1cyAoTXlTUUwgc2Vzc2lvbiBkYiBiYWNrZW5kKSBmYWlsZWQgd2l0aCBleGl0Y29k ZTogJHN0aC0+ZXJyKCkiKTsKKwkJZGllKCk7CisJfQorCSRzdGgtPmZpbmlzaCgpOworCXVuZGVm ICRkYmg7CisJcmV0dXJuIDE7Cit9CisKK3N1YiBkYl9nZXRzdGF0dXMKK3sKKwlteSAkZGJoID0g aW5pdF9kYigpOworCW15ICRzaWQ9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInNlc3Npb25faWRc IiBtaXNzZWQiOworCSRzaWQgPSBzYW5pdGl6ZXIoJ3gyZ29zaWQnLCAkc2lkKSBvciBkaWUgImFy Z3VtZW50IFwic2Vzc2lvbl9pZFwiIG1hbGZvcm1lZCI7CisJY2hlY2tfdXNlcigkc2lkKTsKKwlt eSAkc3RoPSRkYmgtPnByZXBhcmUoInNlbGVjdCBzdGF0dXMgZnJvbSBzZXNzaW9ucyB3aGVyZSBz ZXNzaW9uX2lkID0gPyIpOworCSRzdGgtPmV4ZWN1dGUoJHNpZCk7CisJaWYgKCRzdGgtPmVycigp KQorCXsKKwkJc3lzbG9nKCdlcnJvcicsICJjaGFuZ2VzdGF0dXMgKE15U1FMIHNlc3Npb24gZGIg YmFja2VuZCkgZmFpbGVkIHdpdGggZXhpdGNvZGU6ICRzdGgtPmVycigpIik7CisJCWRpZSgpOwor CX0KKwlteSBAZGF0YTsKKwlteSAkc3RhdHVzOworCUBkYXRhID0gJHN0aC0+ZmV0Y2hyb3dfYXJy YXk7CisJeworCQkkc3RhdHVzID0gJGRhdGFbMF07CisJfQorCSRzdGgtPmZpbmlzaCgpOworCXVu ZGVmICRkYmg7CisJcmV0dXJuICRzdGF0dXM7Cit9CisKK3N1YiBkYl9nZXRkaXNwbGF5cworewor CW15ICRkYmggPSBpbml0X2RiKCk7CisJI2lnbm9yZSAkc2VydmVyCisJbXkgQHN0cmluZ3M7CisJ bXkgJHN0aD0kZGJoLT5wcmVwYXJlKCJzZWxlY3QgZGlzcGxheSBmcm9tIHNlc3Npb25zIik7CisJ JHN0aC0+ZXhlY3V0ZSgpOworCWlmICgkc3RoLT5lcnIoKSkKKwl7CisJCXN5c2xvZygnZXJyb3In LCAiZ2V0ZGlzcGxheXMgKE15U1FMIHNlc3Npb24gZGIgYmFja2VuZCkgZmFpbGVkIHdpdGggZXhp dGNvZGU6ICRzdGgtPmVycigpIik7CisJCWRpZSgpOworCX0KKwlteSBAZGF0YTsKKwlteSAkaT0w OworCXdoaWxlIChAZGF0YSA9ICRzdGgtPmZldGNocm93X2FycmF5KQorCXsKKwkJJHN0cmluZ3Nb JGkrK109J3wnLiRkYXRhWzBdLid8JzsKKwl9CisJJHN0aC0+ZmluaXNoKCk7CisJdW5kZWYgJGRi aDsKKwlyZXR1cm4gam9pbigiXG4iLEBzdHJpbmdzKTsKK30KKworc3ViIGRiX2dldHBvcnRzCit7 CisJbXkgJGRiaCA9IGluaXRfZGIoKTsKKwkjaWdub3JlICRzZXJ2ZXIKKwlteSAkc2VydmVyPXNo aWZ0IG9yIGRpZSAiYXJndW1lbnQgXCJzZXJ2ZXJcIiBtaXNzZWQiOworCW15IEBzdHJpbmdzOwor CW15ICRzdGg9JGRiaC0+cHJlcGFyZSgic2VsZWN0IHBvcnQgZnJvbSB1c2VkX3BvcnRzIik7CisJ JHN0aC0+ZXhlY3V0ZSgpOworCWlmICgkc3RoLT5lcnIoKSkKKwl7CisJCXN5c2xvZygnZXJyb3In LCAiZ2V0cG9ydHMgKE15U1FMIHNlc3Npb24gZGIgYmFja2VuZCkgZmFpbGVkIHdpdGggZXhpdGNv ZGU6ICRzdGgtPmVycigpIik7CisJCWRpZSgpOworCX0KKwlteSBAZGF0YTsKKwlteSAkaT0wOwor CXdoaWxlIChAZGF0YSA9ICRzdGgtPmZldGNocm93X2FycmF5KQorCXsKKwkJJHN0cmluZ3NbJGkr K109J3wnLiRkYXRhWzBdLid8JzsKKwl9CisJJHN0aC0+ZmluaXNoKCk7CisJdW5kZWYgJGRiaDsK KwlyZXR1cm4gam9pbigiXG4iLEBzdHJpbmdzKTsKK30KKworc3ViIGRiX2dldHNlcnZlcnMKK3sK KwlteSAkZGJoID0gaW5pdF9kYigpOworCW15IEBzdHJpbmdzOworCW15ICRzdGg9JGRiaC0+cHJl cGFyZSgic2VsZWN0IHNlcnZlcixjb3VudCgqKSBmcm9tIHNlc3Npb25zIHdoZXJlIHN0YXR1cyAh PSAnRicgZ3JvdXAgYnkgc2VydmVyIik7CisJJHN0aC0+ZXhlY3V0ZSgpOworCWlmICgkc3RoLT5l cnIoKSkKKwl7CisJCXN5c2xvZygnZXJyb3InLCAiZ2V0c2VydmVycyAoTXlTUUwgc2Vzc2lvbiBk YiBiYWNrZW5kKSBmYWlsZWQgd2l0aCBleGl0Y29kZTogJHN0aC0+ZXJyKCkiKTsKKwkJZGllKCk7 CisJfQorCW15IEBkYXRhOworCW15ICRpPTA7CisJd2hpbGUgKEBkYXRhID0gJHN0aC0+ZmV0Y2hy b3dfYXJyYXkpCisJeworCQkkc3RyaW5nc1skaSsrXT0kZGF0YVswXTsKKwl9CisJJHN0aC0+Zmlu aXNoKCk7CisJdW5kZWYgJGRiaDsKKwlyZXR1cm4gam9pbigiXG4iLEBzdHJpbmdzKTsKK30KKwor c3ViIGRiX2dldGFnZW50Cit7CisJbXkgJGRiaCA9IGluaXRfZGIoKTsKKwlteSAkc2lkPXNoaWZ0 IG9yIGRpZSAiYXJndW1lbnQgXCJzZXNzaW9uX2lkXCIgbWlzc2VkIjsKKwkkc2lkID0gc2FuaXRp emVyKCd4Mmdvc2lkJywgJHNpZCkgb3IgZGllICJhcmd1bWVudCBcInNlc3Npb25faWRcIiBtYWxm b3JtZWQiOworCW15ICRhZ2VudDsKKwljaGVja191c2VyKCRzaWQpOworCW15ICRzdGg9JGRiaC0+ cHJlcGFyZSgic2VsZWN0IGFnZW50X3BpZCBmcm9tIHNlc3Npb25zCisJICAgICAgICAgICAgICAg ICAgICAgICB3aGVyZSBzZXNzaW9uX2lkPT8iKTsKKwkkc3RoLT5leGVjdXRlKCRzaWQpOworCWlm ICgkc3RoLT5lcnIoKSkKKwl7CisJCXN5c2xvZygnZXJyb3InLCAiZ2V0YWdlbnQgKE15U1FMIHNl c3Npb24gZGIgYmFja2VuZCkgZmFpbGVkIHdpdGggZXhpdGNvZGU6ICRzdGgtPmVycigpIik7CisJ CWRpZSgpOworCX0KKwlteSBAZGF0YTsKKwlteSAkaT0wOworCWlmKEBkYXRhID0gJHN0aC0+ZmV0 Y2hyb3dfYXJyYXkpCisJeworCQkkYWdlbnQ9JGRhdGFbMF07CisJfQorCSRzdGgtPmZpbmlzaCgp OworCXVuZGVmICRkYmg7CisJcmV0dXJuICRhZ2VudDsKK30KKworc3ViIGRiX2dldGRpc3BsYXkK K3sKKwlteSAkZGJoID0gaW5pdF9kYigpOworCW15ICRzaWQ9c2hpZnQgb3IgZGllICJhcmd1bWVu dCBcInNlc3Npb25faWRcIiBtaXNzZWQiOworCSRzaWQgPSBzYW5pdGl6ZXIoJ3gyZ29zaWQnLCAk c2lkKSBvciBkaWUgImFyZ3VtZW50IFwic2Vzc2lvbl9pZFwiIG1hbGZvcm1lZCI7CisJbXkgJGRp c3BsYXk7CisJY2hlY2tfdXNlcigkc2lkKTsKKwlteSAkc3RoPSRkYmgtPnByZXBhcmUoInNlbGVj dCBkaXNwbGF5IGZyb20gc2Vzc2lvbnMKKwkgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHNl c3Npb25faWQgPT8iKTsKKwkkc3RoLT5leGVjdXRlKCRzaWQpOworCWlmICgkc3RoLT5lcnIoKSkK Kwl7CisJCXN5c2xvZygnZXJyb3InLCAiZ2V0ZGlzcGxheSAoTXlTUUwgc2Vzc2lvbiBkYiBiYWNr ZW5kKSBmYWlsZWQgd2l0aCBleGl0Y29kZTogJHN0aC0+ZXJyKCkiKTsKKwkJZGllKCk7CisJfQor CW15IEBkYXRhOworCW15ICRpPTA7CisJaWYoQGRhdGEgPSAkc3RoLT5mZXRjaHJvd19hcnJheSkK Kwl7CisJCSRkaXNwbGF5PSRkYXRhWzBdOworCX0KKwkkc3RoLT5maW5pc2goKTsKKwl1bmRlZiAk ZGJoOworCXJldHVybiAkZGlzcGxheTsKK30KKworc3ViIGRiX2xpc3RzZXNzaW9ucworeworCW15 ICRkYmggPSBpbml0X2RiKCk7CisJbXkgJHNlcnZlcj1zaGlmdCBvciBkaWUgImFyZ3VtZW50IFwi c2VydmVyXCIgbWlzc2VkIjsKKworCW15IEBzdHJpbmdzOworCW15ICRzdGg9JGRiaC0+cHJlcGFy ZSgic2VsZWN0IGFnZW50X3BpZCwgc2Vzc2lvbl9pZCwgZGlzcGxheSwgc2VydmVyLCBzdGF0dXMs CisJICAgICAgICAgICAgICAgICAgICAgICBEQVRFX0ZPUk1BVChpbml0X3RpbWUsICclWS0lbS0l ZFQlSDolSTolUycpLAorCSAgICAgICAgICAgICAgICAgICAgICAgY29va2llLGNsaWVudCxncl9w b3J0LHNvdW5kX3BvcnQsCisJICAgICAgICAgICAgICAgICAgICAgICBEQVRFX0ZPUk1BVChsYXN0 X3RpbWUsICclWS0lbS0lZFQlSDolSTolUycpLAorCSAgICAgICAgICAgICAgICAgICAgICAgdW5h bWUsCisJICAgICAgICAgICAgICAgICAgICAgICBNT0QoVU5JWF9USU1FU1RBTVAoTk9XKCkpIC0g VU5JWF9USU1FU1RBTVAoaW5pdF90aW1lKSwgODY0MDApLGZzX3BvcnQsCisJICAgICAgICAgICAg ICAgICAgICAgICB0ZWtpY3RybF9wb3J0LHRla2lkYXRhX3BvcnQgZnJvbSBzZXNzaW9ucworCSAg ICAgICAgICAgICAgICAgICAgICAgd2hlcmUgc3RhdHVzICE9J0YnIGFuZCBzZXJ2ZXI9PyBhbmQg dW5hbWU9PworCSAgICAgICAgICAgICAgICAgICAgICAgYW5kICAoICBzZXNzaW9uX2lkIG5vdCBs aWtlICclWFNIQUQlJykgIG9yZGVyIGJ5IHN0YXR1cyBkZXNjIik7CisJJHN0aC0+ZXhlY3V0ZSgk c2VydmVyLCAkcmVhbHVzZXIpOworCWlmICgkc3RoLT5lcnIoKSkKKwl7CisJCXN5c2xvZygnZXJy b3InLCAibGlzdHNlc3Npb25zIChNeVNRTCBzZXNzaW9uIGRiIGJhY2tlbmQpIGZhaWxlZCB3aXRo IGV4aXRjb2RlOiAkc3RoLT5lcnIoKSIpOworCQlkaWUoKTsKKwl9CisJbXkgQHNlc3Npb25zID0g ZmV0Y2hyb3dfYXJyYXlfZGF0YXNldHMoJHN0aCk7CisJJHN0aC0+ZmluaXNoKCk7CisJdW5kZWYg JGRiaDsKKwlyZXR1cm4gQHNlc3Npb25zOworfQorCitzdWIgZGJfbGlzdHNlc3Npb25zX2FsbAor eworCW15ICRkYmggPSBpbml0X2RiKCk7CisJbXkgQHN0cmluZ3M7CisJbXkgJHN0aD0kZGJoLT5w cmVwYXJlKCJzZWxlY3QgYWdlbnRfcGlkLCBzZXNzaW9uX2lkLCBkaXNwbGF5LCBzZXJ2ZXIsIHN0 YXR1cywKKwkgICAgICAgICAgICAgICAgICAgICAgIERBVEVfRk9STUFUKGluaXRfdGltZSwgJyVZ LSVtLSVkVCVIOiVJOiVTJyksCisJICAgICAgICAgICAgICAgICAgICAgICBjb29raWUsY2xpZW50 LGdyX3BvcnQsc291bmRfcG9ydCwKKwkgICAgICAgICAgICAgICAgICAgICAgIERBVEVfRk9STUFU KGxhc3RfdGltZSwgJyVZLSVtLSVkVCVIOiVJOiVTJyksCisJICAgICAgICAgICAgICAgICAgICAg ICB1bmFtZSwKKwkgICAgICAgICAgICAgICAgICAgICAgIE1PRChVTklYX1RJTUVTVEFNUChOT1co KSkgLSBVTklYX1RJTUVTVEFNUChpbml0X3RpbWUpLCA4NjQwMCksZnNfcG9ydCwKKwkgICAgICAg ICAgICAgICAgICAgICAgIHRla2ljdHJsX3BvcnQsdGVraWRhdGFfcG9ydCBmcm9tICBzZXNzaW9u cworCSAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgc3RhdHVzICE9J0YnIGFuZCB1bmFtZT0/ IGFuZCAgKCAgc2Vzc2lvbl9pZCBub3QgbGlrZSAnJVhTSEFEJScpICBvcmRlciBieSBzdGF0dXMg ZGVzYyIpOworCQorCSRzdGgtPmV4ZWN1dGUoJHJlYWx1c2VyKTsKKwlpZiAoJHN0aC0+ZXJyKCkp CisJeworCQlzeXNsb2coJ2Vycm9yJywgImxpc3RzZXNzaW9uc19hbGwgKE15U1FMIHNlc3Npb24g ZGIgYmFja2VuZCkgZmFpbGVkIHdpdGggZXhpdGNvZGU6ICRzdGgtPmVycigpIik7CisJCWRpZSgp OworCX0KKwlteSBAc2Vzc2lvbnMgPSBmZXRjaHJvd19hcnJheV9kYXRhc2V0cygkc3RoKTsKKwkk c3RoLT5maW5pc2goKTsKKwl1bmRlZiAkZGJoOworCXJldHVybiBAc2Vzc2lvbnM7Cit9CisKK3N1 YiBkYl9saXN0c2hhZG93c2Vzc2lvbnMKK3sKKwlteSAkZGJoID0gaW5pdF9kYigpOworCW15ICRz ZXJ2ZXI9c2hpZnQgb3IgZGllICJhcmd1bWVudCBcInNlcnZlclwiIG1pc3NlZCI7CisJbXkgQHN0 cmluZ3M7CisJbXkgJHN0aD0kZGJoLT5wcmVwYXJlKCJzZWxlY3QgYWdlbnRfcGlkLCBzZXNzaW9u X2lkLCBkaXNwbGF5LCBzZXJ2ZXIsIHN0YXR1cywKKwkgICAgICAgICAgICAgICAgICAgICAgIERB VEVfRk9STUFUKGluaXRfdGltZSwgJyVZLSVtLSVkVCVIOiVJOiVTJyksCisJICAgICAgICAgICAg ICAgICAgICAgICBjb29raWUsY2xpZW50LGdyX3BvcnQsc291bmRfcG9ydCwKKwkgICAgICAgICAg ICAgICAgICAgICAgIERBVEVfRk9STUFUKGxhc3RfdGltZSwgJyVZLSVtLSVkVCVIOiVJOiVTJyks CisJICAgICAgICAgICAgICAgICAgICAgICB1bmFtZSwKKwkgICAgICAgICAgICAgICAgICAgICAg IE1PRChVTklYX1RJTUVTVEFNUChOT1coKSkgLSBVTklYX1RJTUVTVEFNUChpbml0X3RpbWUpLCA4 NjQwMCksZnNfcG9ydCBmcm9tICBzZXNzaW9ucworCSAgICAgICAgICAgICAgICAgICAgICAgd2hl cmUgc3RhdHVzICE9J0YnIGFuZCBzZXJ2ZXI9PyBhbmQgdW5hbWU9PworCSAgICAgICAgICAgICAg ICAgICAgICAgYW5kICAoICBzZXNzaW9uX2lkIGxpa2UgJyVYU0hBRCUnKSAgb3JkZXIgYnkgc3Rh dHVzIGRlc2MiKTsKKwkkc3RoLT5leGVjdXRlKCRzZXJ2ZXIsICRyZWFsdXNlcik7CisJaWYgKCRz dGgtPmVycigpKQorCXsKKwkJc3lzbG9nKCdlcnJvcicsICJsaXN0c2Vzc2lvbnMgKE15U1FMIHNl c3Npb24gZGIgYmFja2VuZCkgZmFpbGVkIHdpdGggZXhpdGNvZGU6ICRzdGgtPmVycigpIik7CisJ CWRpZSgpOworCX0KKwlteSBAc2Vzc2lvbnMgPSBmZXRjaHJvd19hcnJheV9kYXRhc2V0cygkc3Ro KTsKKwkkc3RoLT5maW5pc2goKTsKKwl1bmRlZiAkZGJoOworCXJldHVybiBAc2Vzc2lvbnM7Cit9 CisKK3N1YiBkYl9saXN0c2hhZG93c2Vzc2lvbnNfYWxsCit7CisJbXkgJGRiaCA9IGluaXRfZGIo KTsKKwlteSBAc3RyaW5nczsKKwlteSAkc3RoPSRkYmgtPnByZXBhcmUoInNlbGVjdCBhZ2VudF9w aWQsIHNlc3Npb25faWQsIGRpc3BsYXksIHNlcnZlciwgc3RhdHVzLAorCSAgICAgICAgICAgICAg ICAgICAgICAgREFURV9GT1JNQVQoaW5pdF90aW1lLCAnJVktJW0tJWRUJUg6JUk6JVMnKSwKKwkg ICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZSxjbGllbnQsZ3JfcG9ydCxzb3VuZF9wb3J0LAor CSAgICAgICAgICAgICAgICAgICAgICAgREFURV9GT1JNQVQobGFzdF90aW1lLCAnJVktJW0tJWRU JUg6JUk6JVMnKSwKKwkgICAgICAgICAgICAgICAgICAgICAgIHVuYW1lLAorCSAgICAgICAgICAg ICAgICAgICAgICAgTU9EKFVOSVhfVElNRVNUQU1QKE5PVygpKSAtIFVOSVhfVElNRVNUQU1QKGlu aXRfdGltZSksIDg2NDAwKSxmc19wb3J0IGZyb20gIHNlc3Npb25zIAorCSAgICAgICAgICAgICAg ICAgICAgICAgd2hlcmUgc3RhdHVzICE9J0YnIGFuZCB1bmFtZT0/IGFuZCAgKCAgc2Vzc2lvbl9p ZCBsaWtlICclWFNIQUQlJykgIG9yZGVyIGJ5IHN0YXR1cyBkZXNjIik7CisJCisJJHN0aC0+ZXhl Y3V0ZSgkcmVhbHVzZXIpOworCWlmICgkc3RoLT5lcnIoKSkKKwl7CisJCXN5c2xvZygnZXJyb3In LCAibGlzdHNlc3Npb25zX2FsbCAoTXlTUUwgc2Vzc2lvbiBkYiBiYWNrZW5kKSBmYWlsZWQgd2l0 aCBleGl0Y29kZTogJHN0aC0+ZXJyKCkiKTsKKwkJZGllKCk7CisJfQorCW15IEBzZXNzaW9ucyA9 IGZldGNocm93X2FycmF5X2RhdGFzZXRzKCRzdGgpOworCSRzdGgtPmZpbmlzaCgpOworCXVuZGVm ICRkYmg7CisJcmV0dXJuIEBzZXNzaW9uczsKK30KKworc3ViIGNoZWNrX3Jvb3QKK3sKKwlpZiAo JHJlYWx1c2VyIG5lICJyb290IikKKwl7CisJCWRpZSAiJHJlYWx1c2VyLCB5b3UgY2FuIG5vdCBk byB0aGlzIGpvYiI7CisJfQorfQorCitzdWIgY2hlY2tfdXNlcgoreworCW15ICRzaWQ9c2hpZnQg b3IgZGllICJhcmd1bWVudCBcInNlc3Npb25faWRcIiBtaXNzZWQiOworCXJldHVybiBpZiAkcmVh bHVzZXIgZXEgInJvb3QiOworCisJIyBzZXNzaW9uIGlkIGxvb2tzIGxpa2Ugc29tZXVzZXItNTEt MTMwNDAwNTg5NV9zdERnbm9tZS1zZXNzaW9uX2RwMjQKKwkjIGR1cmluZyBEQiBpbnNlcnRzZXNz aW9uIGl0IG9ubHkgbG9va3MgbGlrZSBzb21ldXNlci01MS0xMzA0MDA1ODk1CisKKwkjIGRlcml2 ZSB0aGUgc2Vzc2lvbidzIHVzZXIgZnJvbSB0aGUgc2Vzc2lvbiBuYW1lL2lkCisJbXkgJHVzZXIg PSAiJHNpZCI7CisKKwkjIGhhbmRsZSBBY3RpdmVEaXJlY3RvcnkgRG9tYWluIHVzZXIgYWNjb3Vu dHMgZ3JhY2VmdWxseQorCSRyZWFsdXNlciA9fiBzL1xcLy87CisKKwkjIHBlcmZvcm0gdGhlIHVz ZXIgY2hlY2sKKwkkdXNlciA9fiBzLygkcmVhbHVzZXItWzAtOV17Mix9LVswLTldezEwLH1fc3Qo RHxSKS4qfC4qLVswLTldezIsfS1bMC05XXsxMCx9X3N0UygwfDEpWFNIQUQkcmVhbHVzZXIuKikv JHJlYWx1c2VyLzsKKwkkdXNlciBlcSAkcmVhbHVzZXIgb3IgZGllICIkcmVhbHVzZXIgaXMgbm90 IGF1dGhvcml6ZWQiOworfQorCitzdWIgZmV0Y2hyb3dfYXJyYXlfZGF0YXNldHMKK3sKKwlteSAk c3RoID0gc2hpZnQ7CisJbXkgQGxpbmVzOworCW15IEBkYXRhOworCXdoaWxlIChAZGF0YSA9ICRz dGgtPmZldGNocm93X2FycmF5KCkpCisJeworCQlwdXNoIEBsaW5lcywgam9pbignfCcsIEBkYXRh KTsKKwl9CisJcmV0dXJuIEBsaW5lczsKK30KKworMTsKZGlmZiAtLWdpdCBhL3gyZ29zZXJ2ZXIt Y29tbW9uL2V0Yy94Mmdvc3FsL3NxbCBiL3gyZ29zZXJ2ZXItY29tbW9uL2V0Yy94Mmdvc3FsL3Nx bAppbmRleCA2NmE3ZjdkLi4xMTM3OTlkIDEwMDY0NAotLS0gYS94Mmdvc2VydmVyLWNvbW1vbi9l dGMveDJnb3NxbC9zcWwKKysrIGIveDJnb3NlcnZlci1jb21tb24vZXRjL3gyZ29zcWwvc3FsCkBA IC0xLDQgKzEsNCBAQAotI3Bvc3RncmVzIG9yIHNxbGl0ZQorI3Bvc3RncmVzIG9yIG15c3FsIG9y IHNxbGl0ZQogYmFja2VuZD1zcWxpdGUKIAogW3Bvc3RncmVzXQpAQCAtMTIsMyArMTIsMTEgQEAK ICNyZXF1aXJlOiBjb25uZWN0IG9ubHkgd2l0aCBTU0wKICNkZWZhdWx0IC0gcHJlZmVyCiBzc2w9 cHJlZmVyCisKK1tteXNxbF0KK2hvc3Q9bG9jYWxob3N0Citwb3J0PTMzMDYKKyNyZXN0cmljdCB1 c2VycyBuZXR3b3JrLCAiJSIgZm9yIGFueQordW5ldD1sb2NhbGhvc3QKKyNkYXRhYmFzZSBhZG1p biAobXVzdCBoYXZlIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBkYXRhYmFzZXMgYW5kIHVzZXJzKQor ZGJhZG1pbj1yb290CmRpZmYgLS1naXQgYS94Mmdvc2VydmVyL3NiaW4veDJnb2RiYWRtaW4gYi94 Mmdvc2VydmVyL3NiaW4veDJnb2RiYWRtaW4KaW5kZXggZDNjNjI2Ni4uZTc0NmU0MyAxMDA3NTUK LS0tIGEveDJnb3NlcnZlci9zYmluL3gyZ29kYmFkbWluCisrKyBiL3gyZ29zZXJ2ZXIvc2Jpbi94 MmdvZGJhZG1pbgpAQCAtNjMsNiArNjMsOSBAQAogCiBteSAkQ29uZmlnID0gZ2V0X3NxbGNvbmZp ZygpOwogCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU1FMaXRlIEJhY2tl bmQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogaWYgKCRDb25maWctPnBhcmFt KCJiYWNrZW5kIikgZXEgJ3NxbGl0ZScpCiB7CiAJbXkgJHVzZXI9IngyZ291c2VyIjsKQEAgLTIz Niw0OTYgKzIzOSw4MjkgQEAKIAl9CiB9CiAKLW15ICRob3N0PSRDb25maWctPnBhcmFtKCJwb3N0 Z3Jlcy5ob3N0Iik7Ci1teSAkcG9ydD0kQ29uZmlnLT5wYXJhbSgicG9zdGdyZXMucG9ydCIpOwot bXkgJHNzbG1vZGU9JENvbmZpZy0+cGFyYW0oInBvc3RncmVzLnNzbCIpOwotaWYgKCEkc3NsbW9k ZSkKLXsKLQkkc3NsbW9kZT0icHJlZmVyIjsKLX0KLW15ICRkYmFkbWluPSRDb25maWctPnBhcmFt KCJwb3N0Z3Jlcy5kYmFkbWluIik7Ci1teSAkeDJnb2FkbWluPSJ4MmdvZGJ1c2VyIjsKLW15ICR4 MmdvYWRtaW5wYXNzPWBwd2dlbiA4IDFgOwotY2hvbXAgKCR4MmdvYWRtaW5wYXNzKTsKLW15ICRk Yj0ieDJnb19zZXNzaW9ucyI7CiAKLWlmICghJGhvc3QpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgTXlTUUwgQmFja2VuZAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCitpZiAoJENvbmZpZy0+cGFyYW0oImJhY2tlbmQiKSBlcSAnbXlzcWwnKQogewotCSRo b3N0PSdsb2NhbGhvc3QnOwotfQotaWYgKCEkcG9ydCkKLXsKLQkkcG9ydD0nNTQzMic7Ci19Ci1p ZiAoISRkYmFkbWluKQotewotCSRkYmFkbWluPSdwb3N0Z3Jlcyc7Ci19Ci0KLW9wZW4gKEZMLCI8 IC9ldGMveDJnby94Mmdvc3FsL3Bhc3N3b3Jkcy9wZ2FkbWluICIpIG9yIGRpZSAiQ2FuJ3QgcmVh ZCBwYXNzd29yZCBmaWxlIC9ldGMveDJnby94Mmdvc3FsL3Bhc3N3b3Jkcy9wZ2FkbWluIjsKLW15 ICRkYmFkbWlucGFzcz08Rkw+OwotY2xvc2UoRkwpOwotY2hvbXAoJGRiYWRtaW5wYXNzKTsKLQot aWYgKCR1cGRhdGVkYikKLXsKLQkjIGNoZWNrIGlmIHRoZSBEQiBhbHJlYWR5IGV4aXN0cywgaWYg bm90LCBjcmVhdGUgaXQuLi4KLQlteSAkZGJoOwotCXVudGlsICgKLQkJJGRiaCA9IERCSS0+Y29u bmVjdCgiZGJpOlBnOmRibmFtZT0kZGI7aG9zdD0kaG9zdDtwb3J0PSRwb3J0O3NzbG1vZGU9JHNz bG1vZGUiLCAiJGRiYWRtaW4iLCAiJGRiYWRtaW5wYXNzIix7QXV0b0NvbW1pdCA9PiAxLCBSYWlz ZUVycm9yID0+IDAsIFByaW50RXJyb3IgPT4gMH0pCi0JKSB7Ci0JCSRjcmVhdGVkYiA9IDE7Ci0J CWxhc3Q7Ci0JfTsKLQlpZiAoISRjcmVhdGVkYikgewotCQkkZGJoID0gREJJLT5jb25uZWN0KCJk Ymk6UGc6ZGJuYW1lPSRkYjtob3N0PSRob3N0O3BvcnQ9JHBvcnQ7c3NsbW9kZT0kc3NsbW9kZSIs ICIkZGJhZG1pbiIsICIkZGJhZG1pbnBhc3MiLHtBdXRvQ29tbWl0ID0+IDF9KTsKLQkJaWYgKCRk YmgpIHsKLQkJCW15ICR1cGRhdGVfdmlld3Nfbl9ydWxlcyA9IDA7Ci0JCQlteSAkc3RoX3Rla2lj dHJsOwotCQkJbXkgJHN0aF90ZWtpZGF0YTsKLQkJCW15ICRzdGhfdXBkYXRlOwotCQkJdHJ5IHsK LQkJCQkkc3RoX3Rla2ljdHJsID0gJGRiaC0+cHJlcGFyZSgiCi0JCQkJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2VsZWN0IHRla2ljdHJsX3BvcnQgZnJvbSBzZXNzaW9ucwotCQkJCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOwotCQkJCSRzdGhfdGVraWN0cmwtPmV4ZWN1 dGUoKTsKLQkJCX0gY2F0Y2ggewotCQkJCXByaW50ICJBRERJTkc6IHRla2ljdHJsX3BvcnQgY29s dW1uIHRvIHRhYmxlIHNlc3Npb25zXG4iOwotCQkJCSRzdGhfdGVraWN0cmwgPSAkZGJoLT5wcmVw YXJlKCIKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlciB0YWJsZSBzZXNz aW9ucwotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBjb2x1bW4gdGVraWN0 cmxfcG9ydCBpbnQKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKLQkJCQkk c3RoX3Rla2ljdHJsLT5leGVjdXRlKCkgb3IgZGllOwotCQkJCSRzdGhfdGVraWN0cmwtPmZpbmlz aCgpOwotCQkJCSR1cGRhdGVfdmlld3Nfbl9ydWxlcyA9IDE7Ci0JCQl9OwotCQkJdHJ5IHsKLQkJ CQkkc3RoX3Rla2lkYXRhID0gJGRiaC0+cHJlcGFyZSgiCi0JCQkJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VsZWN0IHRla2lkYXRhX3BvcnQgZnJvbSBzZXNzaW9ucwotCQkJCSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIpOwotCQkJCSRzdGhfdGVraWRhdGEtPmV4ZWN1dGUo KTsKLQkJCX0gY2F0Y2ggewotCQkJCXByaW50ICJBRERJTkc6IHRla2lkYXRhX3BvcnQgY29sdW1u IHRvIHRhYmxlIHNlc3Npb25zXG4iOwotCQkJCSRzdGhfdGVraWRhdGE9JGRiaC0+cHJlcGFyZSgi Ci0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyIHRhYmxlIHNlc3Npb25zCi0J CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBjb2x1bW4gdGVraWRhdGFfcG9ydCBp bnQKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7Ci0JCQkJJHN0aF90ZWtpZGF0 YS0+ZXhlY3V0ZSgpIG9yIGRpZTsKLQkJCQkkc3RoX3Rla2lkYXRhLT5maW5pc2goKTsKLQkJCQkk dXBkYXRlX3ZpZXdzX25fcnVsZXMgPSAxOwotCQkJfTsKLQotCQkJaWYgKCR1cGRhdGVfdmlld3Nf bl9ydWxlcykKLQkJCXsKLQkJCQlwcmludCAiVVBEQVRJTkcgVklFVzogc2Vzc2lvbnNfdmlld1xu IjsKLQkJCQkkc3RoX3VwZGF0ZT0kZGJoLT5wcmVwYXJlKCIKLQkJCQkgICAgICAgICAgICAgICAg ICAgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIFZJRVcgc2Vzc2lvbnNfdmlldyBhcwotCQkJCSAg ICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUCi0JCQkJICAgICAgICAgICAgICAgICAgICAg ICAgICBhZ2VudF9waWQsIHNlc3Npb25faWQsIGRpc3BsYXksIHNlcnZlciwgc3RhdHVzLCBpbml0 X3RpbWUsIGNvb2tpZSwgY2xpZW50LCBncl9wb3J0LAotCQkJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgc291bmRfcG9ydCwgbGFzdF90aW1lLCB1bmFtZSwgZnNfcG9ydCwgdGVraWN0cmxfcG9y dCwgdGVraWRhdGFfcG9ydCBmcm9tIHNlc3Npb25zCi0JCQkJICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGVyZSBjcmVhdG9yX2lkID0gY3VycmVudF91c2VyCi0JCQkJICAgICAgICAgICAgICAg ICAgICAgICAgICAiKTsKLQkJCQkkc3RoX3VwZGF0ZS0+ZXhlY3V0ZSgpIG9yIGRpZTsKLQkJCQlw cmludCAiVVBEQVRJTkcgUlVMRTogdXBkYXRlX3Nlc3Nfdmlld1xuIjsKLQkJCQkkc3RoX3VwZGF0 ZT0kZGJoLT5wcmVwYXJlKCIKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBv ciByZXBsYWNlIFJVTEUgdXBkYXRlX3Nlc3NfdmlldyBBUyBPTiBVUERBVEUKLQkJCQkgICAgICAg ICAgICAgICAgICAgICAgICAgIFRPIHNlc3Npb25zX3ZpZXcgRE8gSU5TVEVBRAotCQkJCSAgICAg ICAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHNlc3Npb25zIHNldAotCQkJCSAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdHVzPU5FVy5zdGF0dXMsCi0JCQkJICAgICAgICAgICAgICAgICAg ICAgICAgICBsYXN0X3RpbWU9TkVXLmxhc3RfdGltZSwKLQkJCQkgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvb2tpZT1ORVcuY29va2llLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg YWdlbnRfcGlkPU5FVy5hZ2VudF9waWQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBj bGllbnQ9TkVXLmNsaWVudCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGdyX3BvcnQ9 TkVXLmdyX3BvcnQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VuZF9wb3J0PU5F Vy5zb3VuZF9wb3J0LAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfcG9ydD1ORVcu ZnNfcG9ydCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHRla2ljdHJsX3BvcnQ9TkVX LnRla2ljdHJsX3BvcnQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWtpZGF0YV9w b3J0PU5FVy50ZWtpZGF0YV9wb3J0Ci0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVy ZSBzZXNzaW9uX2lkPU9MRC5zZXNzaW9uX2lkIGFuZCBjcmVhdG9yX2lkPWN1cnJlbnRfdXNlcgot CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIik7Ci0JCQkJJHN0aF91cGRhdGUtPmV4ZWN1 dGUoKSBvciBkaWU7Ci0JCQkJJHN0aF91cGRhdGUtPmZpbmlzaCgpOworCW15ICRob3N0PSRDb25m aWctPnBhcmFtKCJteXNxbC5ob3N0Iik7CisJbXkgJHBvcnQ9JENvbmZpZy0+cGFyYW0oIm15c3Fs LnBvcnQiKTsKKwlteSAkdW5ldD0kQ29uZmlnLT5wYXJhbSgibXlzcWwudW5ldCIpOworCW15ICRk YmFkbWluPSRDb25maWctPnBhcmFtKCJteXNxbC5kYmFkbWluIik7CisJbXkgJHgyZ29hZG1pbj0i eDJnb2RidXNlciI7CisJbXkgJHgyZ29hZG1pbnBhc3M9YHB3Z2VuIDggMWA7CisJY2hvbXAgKCR4 MmdvYWRtaW5wYXNzKTsKKwlteSAkZGI9IngyZ29fc2Vzc2lvbnMiOworCQorCWlmICghJGhvc3Qp CisJeworCQkkaG9zdD0nbG9jYWxob3N0JzsKKwl9CisJaWYgKCEkcG9ydCkKKwl7CisJCSRwb3J0 PSczMzA2JzsKKwl9CisJaWYgKCEkZGJhZG1pbikKKwl7CisJCSRkYmFkbWluPSdyb290JzsKKwl9 CisJCisJb3BlbiAoRkwsIjwgL2V0Yy94MmdvL3gyZ29zcWwvcGFzc3dvcmRzL215YWRtaW4gIikg b3IgZGllICJDYW4ndCByZWFkIHBhc3N3b3JkIGZpbGUgL2V0Yy94MmdvL3gyZ29zcWwvcGFzc3dv cmRzL215YWRtaW4iOworCW15ICRkYmFkbWlucGFzcz08Rkw+OworCWNsb3NlKEZMKTsKKwljaG9t cCgkZGJhZG1pbnBhc3MpOworCQorCWlmICgkdXBkYXRlZGIpCisJeworCQkjIGNoZWNrIGlmIHRo ZSBEQiBhbHJlYWR5IGV4aXN0cywgaWYgbm90LCBjcmVhdGUgaXQuLi4KKwkJbXkgJGRiaDsKKwkJ dW50aWwgKAorCQkJJGRiaCA9IERCSS0+Y29ubmVjdCgiZGJpOm15c3FsOmRhdGFiYXNlPSRkYjto b3N0PSRob3N0O3BvcnQ9JHBvcnQiLCIkZGJhZG1pbiIsIiRkYmFkbWlucGFzcyIse1JhaXNlRXJy b3IgPT4gMX0pCisJCSkgeworCQkJJGNyZWF0ZWRiID0gMTsKKwkJCWxhc3Q7CisJCX07CisJCWlm ICghJGNyZWF0ZWRiKSB7CisJCQkkZGJoID0gREJJLT5jb25uZWN0KCJkYmk6bXlzcWw6ZGF0YWJh c2U9JGRiO2hvc3Q9JGhvc3Q7cG9ydD0kcG9ydCIsIiRkYmFkbWluIiwiJGRiYWRtaW5wYXNzIix7 UmFpc2VFcnJvciA9PiAxfSk7CisJCQlpZiAoJGRiaCkgeworCQkJCW15ICR1cGRhdGVfdmlld3Nf bl9ydWxlcyA9IDA7CisJCQkJbXkgJHN0aF90ZWtpY3RybDsKKwkJCQlteSAkc3RoX3Rla2lkYXRh OworCQkJCW15ICRzdGhfdXBkYXRlOworCQkJCXRyeSB7CisJCQkJCSRzdGhfdGVraWN0cmwgPSAk ZGJoLT5wcmVwYXJlKCIKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0 IHRla2ljdHJsX3BvcnQgZnJvbSBzZXNzaW9ucworCQkJCQkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiKTsKKwkJCQkJJHN0aF90ZWtpY3RybC0+ZXhlY3V0ZSgpOworCQkJCX0gY2F0Y2gg eworCQkJCQlwcmludCAiQURESU5HOiB0ZWtpY3RybF9wb3J0IGNvbHVtbiB0byB0YWJsZSBzZXNz aW9uc1xuIjsKKwkJCQkJJHN0aF90ZWtpY3RybCA9ICRkYmgtPnByZXBhcmUoIgorCQkJCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlciB0YWJsZSBzZXNzaW9ucworCQkJCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgY29sdW1uIHRla2ljdHJsX3BvcnQgaW50CisJ CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworCQkJCQkkc3RoX3Rla2ljdHJs LT5leGVjdXRlKCkgb3IgZGllOworCQkJCQkkc3RoX3Rla2ljdHJsLT5maW5pc2goKTsKKwkJCQkJ JHVwZGF0ZV92aWV3c19uX3J1bGVzID0gMTsKKwkJCQl9OworCQkJCXRyeSB7CisJCQkJCSRzdGhf dGVraWRhdGEgPSAkZGJoLT5wcmVwYXJlKCIKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZWN0IHRla2lkYXRhX3BvcnQgZnJvbSBzZXNzaW9ucworCQkJCQkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiKTsKKwkJCQkJJHN0aF90ZWtpZGF0YS0+ZXhlY3V0ZSgpOwor CQkJCX0gY2F0Y2ggeworCQkJCQlwcmludCAiQURESU5HOiB0ZWtpZGF0YV9wb3J0IGNvbHVtbiB0 byB0YWJsZSBzZXNzaW9uc1xuIjsKKwkJCQkJJHN0aF90ZWtpZGF0YT0kZGJoLT5wcmVwYXJlKCIK KwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyIHRhYmxlIHNlc3Npb25zCisJ CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgY29sdW1uIHRla2lkYXRhX3BvcnQg aW50CisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJCQkJJHN0aF90ZWtp ZGF0YS0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkJCQkJJHN0aF90ZWtpZGF0YS0+ZmluaXNoKCk7CisJ CQkJCSR1cGRhdGVfdmlld3Nfbl9ydWxlcyA9IDE7CisJCQkJfTsKIAkJCX0KKwkJCWlmICgkZGJo KSB7CisJCQkJdW5kZWYgJGRiaDsKKwkJCX0KKwkJCWV4aXQoMCk7CisJCX0gZWxzZSB7CisJCQlw cmludCAiTm8gc2Vzc2lvbiBEQiBmb3VuZC4gVXNlIC0tY3JlYXRlZGIgaW5zdGVhZCBvZiAtLXVw ZGF0ZWRiLlxuIjsKIAkJfQotCQlpZiAoJGRiaCkgewotCQkJdW5kZWYgJGRiaDsKLQkJfQorCX0K KwkKKwlpZiAoJGNyZWF0ZWRiKQorCXsKKwkJbXlfY3JlYXRlX2RhdGFiYXNlKCk7CisJCW15X2Ny ZWF0ZV90YWJsZXMoKTsKIAkJZXhpdCgwKTsKLQl9IGVsc2UgewotCQlwcmludCAiTm8gc2Vzc2lv biBEQiBmb3VuZC4gVXNlIC0tY3JlYXRlZGIgaW5zdGVhZCBvZiAtLXVwZGF0ZWRiLlxuIjsKIAl9 Ci19Ci0KLWlmICgkY3JlYXRlZGIpCi17Ci0JY3JlYXRlX2RhdGFiYXNlKCk7Ci0JY3JlYXRlX3Rh YmxlcygpOwotCWV4aXQoMCk7Ci19Ci0KLWlmICgkbGlzdHVzZXJzKQotewotCWxpc3RfdXNlcnMo KTsKLQlleGl0KDApOwotfQotCi1teSAkZGJoPURCSS0+Y29ubmVjdCgiZGJpOlBnOmRibmFtZT0k ZGI7aG9zdD0kaG9zdDtwb3J0PSRwb3J0O3NzbG1vZGU9JHNzbG1vZGUiLCAiJGRiYWRtaW4iLCAi JGRiYWRtaW5wYXNzIix7QXV0b0NvbW1pdCA9PiAxfSkgb3IgZGllICRfOwotaWYgKCRhZGR1c2Vy KQotewotCWFkZF91c2VyKCRhZGR1c2VyKTsKLX0KLQotaWYgKCRhZGRncm91cCkKLXsKLQlteSAo JG5hbWUsICRwYXNzd2QsICRnaWQsICRtZW1iZXJzKSA9IGdldGdybmFtKCAkYWRkZ3JvdXApOwot CW15IEBncnBfbWVtYmVycz1zcGxpdCgnICcsJG1lbWJlcnMpOwotCWZvcmVhY2ggKEBncnBfbWVt YmVycykKKwkKKwlpZiAoJGxpc3R1c2VycykKIAl7Ci0JCWNob21wKCRfKTsKLQkJYWRkX3VzZXIo JF8pOworCQlteV9saXN0X3VzZXJzKCk7CisJCWV4aXQoMCk7CiAJfQotfQotCi1pZiAoJHJtdXNl cikKLXsKLQlybV91c2VyKCRybXVzZXIpOwotfQotCi1pZiAoJHJtZ3JvdXApCi17Ci0JbXkgKCRu YW1lLCAkcGFzc3dkLCAkZ2lkLCAkbWVtYmVycykgPSBnZXRncm5hbSggJHJtZ3JvdXApOwotCW15 IEBncnBfbWVtYmVycz1zcGxpdCgnICcsJG1lbWJlcnMpOwotCWZvcmVhY2ggKEBncnBfbWVtYmVy cykKKwkKKwlteSAkZGJoPURCSS0+Y29ubmVjdCgiZGJpOm15c3FsOmRhdGFiYXNlPSRkYjtob3N0 PSRob3N0O3BvcnQ9JHBvcnQiLCIkZGJhZG1pbiIsIiRkYmFkbWlucGFzcyIse1JhaXNlRXJyb3Ig PT4gMX0pIG9yIGRpZSAkXzsKKwlpZiAoJGFkZHVzZXIpCiAJewotCQljaG9tcCgkXyk7Ci0JCXJt X3VzZXIoJF8pOworCQlteV9hZGRfdXNlcigkYWRkdXNlcik7CiAJfQotfQotdW5kZWYgJGRiaDsK LQotc3ViIGxpc3RfdXNlcnMoKQotewotCW15ICRkYmg9REJJLT5jb25uZWN0KCJkYmk6UGc6ZGJu YW1lPXBvc3RncmVzO2hvc3Q9JGhvc3Q7cG9ydD0kcG9ydDtzc2xtb2RlPSRzc2xtb2RlIiwgIiRk YmFkbWluIiwgIiRkYmFkbWlucGFzcyIse0F1dG9Db21taXQgPT4gMX0pIG9yIGRpZSAkXzsKLQlt eSAkc3RoPSRkYmgtPnByZXBhcmUoInNlbGVjdCByb2xuYW1lIGZyb20gcGdfcm9sZXMgd2hlcmUg cm9sbmFtZSBsaWtlICd4MmdvdXNlcl8lJyIpOwotCSRzdGgtPmV4ZWN1dGUoKW9yIGRpZTsKLQlw cmludGYgKCIlLTIwcyBEQiB1c2VyXG4iLCJVTklYIHVzZXIiKTsKLQlwcmludCAiLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwotCW15IEBkYXRhOwotCXdoaWxlIChA ZGF0YSA9ICRzdGgtPmZldGNocm93X2FycmF5KQorCQorCWlmICgkYWRkZ3JvdXApCiAJewotCQlA ZGF0YVswXT1+cy94MmdvdXNlcl8vLzsKLQkJcHJpbnRmICgiJS0yMHMgeDJnb3VzZXJfQGRhdGFb MF1cbiIsQGRhdGFbMF0pOworCQlteSAoJG5hbWUsICRwYXNzd2QsICRnaWQsICRtZW1iZXJzKSA9 IGdldGdybmFtKCAkYWRkZ3JvdXApOworCQlteSBAZ3JwX21lbWJlcnM9c3BsaXQoJyAnLCRtZW1i ZXJzKTsKKwkJZm9yZWFjaCAoQGdycF9tZW1iZXJzKQorCQl7CisJCQljaG9tcCgkXyk7CisJCQlt eV9hZGRfdXNlcigkXyk7CisJCX0KIAl9Ci0JJHN0aC0+ZmluaXNoKCk7CisJCisJaWYgKCRybXVz ZXIpCisJeworCQlteV9ybV91c2VyKCRybXVzZXIpOworCX0KKwkKKwlpZiAoJHJtZ3JvdXApCisJ eworCQlteSAoJG5hbWUsICRwYXNzd2QsICRnaWQsICRtZW1iZXJzKSA9IGdldGdybmFtKCAkcm1n cm91cCk7CisJCW15IEBncnBfbWVtYmVycz1zcGxpdCgnICcsJG1lbWJlcnMpOworCQlmb3JlYWNo IChAZ3JwX21lbWJlcnMpCisJCXsKKwkJCWNob21wKCRfKTsKKwkJCW15X3JtX3VzZXIoJF8pOwor CQl9CisJfQogCXVuZGVmICRkYmg7Ci19Ci0KLXN1YiBybV91c2VyKCkKLXsKLQlteSAkdXNlcj1z aGlmdDsKLQotCXByaW50ICgicm0gREIgdXNlciBcIngyZ291c2VyXyR1c2VyXCJcbiIpOwotCi0J bXkgJHN0aD0kZGJoLT5wcmVwYXJlKCJSRVZPS0UgQUxMIFBSSVZJTEVHRVMgT04gc2Vzc2lvbnMs IHVzZWRfcG9ydHMsIG1vdW50cyBGUk9NIFwieDJnb3VzZXJfJHVzZXJcIiIpOwotCSRzdGgtPmV4 ZWN1dGUoKTsKLQotCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgiUkVWT0tFIEFMTCBQUklWSUxFR0VT IE9OIHNlc3Npb25zX3ZpZXcsIG1vdW50c192aWV3LCBzZXJ2ZXJzX3ZpZXcsIHBvcnRzX3ZpZXcg RlJPTSBcIngyZ291c2VyXyR1c2VyXCIiKTsKLQkkc3RoLT5leGVjdXRlKCk7Ci0KLQlteSAkc3Ro PSRkYmgtPnByZXBhcmUoIkRST1AgT1dORUQgQlkgXCJ4MmdvdXNlcl8kdXNlclwiIik7Ci0JJHN0 aC0+ZXhlY3V0ZSgpOwotCi0JbXkgJHN0aD0kZGJoLT5wcmVwYXJlKCJkcm9wIFVTRVIgaWYgZXhp c3RzIFwieDJnb3VzZXJfJHVzZXJcIiIpOwotCSRzdGgtPmV4ZWN1dGUoKTsKLQkkc3RoLT5maW5p c2goKTsKLQotCW15ICgkbmFtZSwgJHBhc3MsICR1aWQsICRwZ2lkLCAkcXVvdGEsICRjb21tZW50 LCAkZ2NvcywgJGRpciwgJHNoZWxsLCAkZXhwaXJlKSA9IGdldHB3bmFtKCR1c2VyKTsKLQlpZiAo ISAkdWlkKQorCQorCXN1YiBteV9saXN0X3VzZXJzKCkKIAl7Ci0JCXJldHVybjsKKwkJbXkgJGRi aD1EQkktPmNvbm5lY3QoImRiaTpteXNxbDpkYXRhYmFzZT0kZGI7aG9zdD0kaG9zdDtwb3J0PSRw b3J0IiwiJGRiYWRtaW4iLCIkZGJhZG1pbnBhc3MiLHtSYWlzZUVycm9yID0+IDF9KSBvciBkaWUg JF87CisJCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgic2VsZWN0IHVzZXIgZnJvbSBteXNxbC51c2Vy IHdoZXJlIHVzZXIgbGlrZSAneDJnb3VzZXJfJSciKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpb3IgZGll OworCQlwcmludGYgKCIlLTIwcyBEQiB1c2VyXG4iLCJVTklYIHVzZXIiKTsKKwkJcHJpbnQgIi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKwkJbXkgQGRhdGE7CisJ CXdoaWxlIChAZGF0YSA9ICRzdGgtPmZldGNocm93X2FycmF5KQorCQl7CisJCQlAZGF0YVswXT1+ cy94MmdvdXNlcl8vLzsKKwkJCXByaW50ZiAoIiUtMjBzIHgyZ291c2VyX0BkYXRhWzBdXG4iLEBk YXRhWzBdKTsKKwkJfQorCQkkc3RoLT5maW5pc2goKTsKKwkJdW5kZWYgJGRiaDsKIAl9Ci0JaWYg KCAtZSAiJGRpci8ueDJnby9zcWxwYXNzIiApCisJCisJc3ViIG15X3JtX3VzZXIoKQogCXsKLQkJ dW5saW5rKCIkZGlyLy54MmdvL3NxbHBhc3MiKTsKKwkJbXkgJHVzZXI9c2hpZnQ7CisJCisJCXBy aW50ICgicm0gREIgdXNlciBcIngyZ291c2VyXyR1c2VyXCJcbiIpOworCisJCW15ICRzdGg9JGRi aC0+cHJlcGFyZSgiRFJPUCBVU0VSIElGIEVYSVNUUyBgeDJnb3VzZXJfJHVzZXJgQGAkdW5ldGAi KTsKKwkJJHN0aC0+ZXhlY3V0ZSgpOworCQkkc3RoLT5maW5pc2goKTsKKworCQlteSAoJG5hbWUs ICRwYXNzLCAkdWlkLCAkcGdpZCwgJHF1b3RhLCAkY29tbWVudCwgJGdjb3MsICRkaXIsICRzaGVs bCwgJGV4cGlyZSkgPSBnZXRwd25hbSgkdXNlcik7CisJCWlmICghICR1aWQpCisJCXsKKwkJCXJl dHVybjsKKwkJfQorCQlpZiAoIC1lICIkZGlyLy54MmdvL3NxbHBhc3MiICkKKwkJeworCQkJdW5s aW5rKCIkZGlyLy54MmdvL3NxbHBhc3MiKTsKKwkJfQorCX0KKwkKKwlzdWIgbXlfYWRkX3VzZXIo KQorCXsKKwkJbXkgJHVzZXI9c2hpZnQ7CisKKwkJbXkgKCRuYW1lLCAkcGFzcywgJHVpZCwgJHBn aWQsICRxdW90YSwgJGNvbW1lbnQsICRnY29zLCAkZGlyLCAkc2hlbGwsICRleHBpcmUpID0gZ2V0 cHduYW0oJHVzZXIpOworCQlpZiAoISAkbmFtZSkKKwkJeworCQkJcHJpbnQgIkNhbm5vdCBmaW5k IHVzZXIgKCR1c2VyKVxuIjsKKwkJCXJldHVybjsKKwkJfSBlbHNpZiAoJG5hbWUgZXEgInJvb3Qi KSB7CisJCQlwcmludCAiVGhlIHN1cGVyLXVzZXIgXCJyb290XCIgaXMgbm90IGFsbG93ZWQgdG8g dXNlIFgyR29cbiI7CisJCQlyZXR1cm47CisJCX0KKwkJJHBhc3M9YHB3Z2VuIDggMWA7CisJCWNo b21wKCRwYXNzKTsKKworCQlteSAkc3RoPSRkYmgtPnByZXBhcmUoIkRST1AgVVNFUiBJRiBFWElT VFMgYHgyZ291c2VyXyR1c2VyYEBgJHVuZXRgIik7CisJCSRzdGgtPntXYXJufT0wOworCQkkc3Ro LT57UHJpbnRFcnJvcn09MDsKKwkJJHN0aC0+ZXhlY3V0ZSgpOworCisJCXByaW50ICgiY3JlYXRl IERCIHVzZXIgXCJ4MmdvdXNlcl8kdXNlclwiXG4iKTsKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCJD UkVBVEUgVVNFUiBgeDJnb3VzZXJfJHVzZXJgQGAkdW5ldGAgSURFTlRJRklFRCBCWSAnJHBhc3Mn Iik7CisJCSRzdGgtPmV4ZWN1dGUoKTsKKworCQkkc3RoPSRkYmgtPnByZXBhcmUoIkdSQU5UIFNF TEVDVCwgSU5TRVJULCBVUERBVEUsIERFTEVURSBPTiAqIFRPIGB4MmdvdXNlcl8kdXNlcmBAYCR1 bmV0YCIpOworCQkkc3RoLT5leGVjdXRlKCk7CisKKwkJJHN0aC0+ZmluaXNoKCk7CisJCisJCWlm ICghIC1kICIkZGlyLy54MmdvIiApCisJCXsKKwkJCQlpZiAoIGRlZmluZWQgKCZGaWxlOjpQYXRo OjptYWtlX3BhdGgpICkKKwkJCQl7CisJCQkJCUZpbGU6OlBhdGg6Om1ha2VfcGF0aCgiJGRpci8u eDJnbyIpOworCQkJCX0KKwkJCQllbHNpZiAoIGRlZmluZWQgKCZGaWxlOjpQYXRoOjpta3BhdGgp ICkKKwkJCQl7CisJCQkJCUZpbGU6OlBhdGg6Om1rcGF0aCgiJGRpci8ueDJnbyIpOworCQkJCX0K KwkJCQllbHNlCisJCQkJeworCQkJCQlkaWUgIlVuYWJsZSB0byBjcmVhdGUgZm9sZGVycyB3aXRo IEZpbGU6OlBhdGgiOworCQkJCX0KKwkJfQorCQorCQkjc2F2ZSB1c2VyIHBhc3N3b3JkCisJCW9w ZW4gKEZMLCI+ICRkaXIvLngyZ28vc3FscGFzcyIpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBwYXNzd29y ZCBmaWxlICRkaXIvLngyZ28vc3FscGFzcyI7CisJCXByaW50IEZMICRwYXNzOworCQljbG9zZShG TCk7CisJCWNobW9kKDA3MDAsIiRkaXIvLngyZ28iKTsKKwkJY2hvd24oJHVpZCwkcGdpZCwiJGRp ci8ueDJnbyIpOworCQljaG1vZCgwNjAwLCIkZGlyLy54MmdvL3NxbHBhc3MiKTsKKwkJY2hvd24o JHVpZCwkcGdpZCwiJGRpci8ueDJnby9zcWxwYXNzIik7CisJfQorCQorCXN1YiBteV9jcmVhdGVf dGFibGVzKCkKKwl7CisJCSRkYmg9REJJLT5jb25uZWN0KCJkYmk6bXlzcWw6ZGF0YWJhc2U9JGRi O2hvc3Q9JGhvc3Q7cG9ydD0kcG9ydCIsIiRkYmFkbWluIiwiJGRiYWRtaW5wYXNzIix7UmFpc2VF cnJvciA9PiAxfSkgb3IgZGllICRfOworCQlteSAkc3RoPSRkYmgtPnByZXBhcmUoIgorCQkgICAg ICAgICAgICAgICAgICAgICAgQ1JFQVRFIFRBQkxFIGBzZXNzaW9uc2AgKAorCQkgICAgICAgICAg ICAgICAgICAgICAgYHNlc3Npb25faWRgIHZhcmNoYXIoNTAwKSBOT1QgTlVMTCwKKwkJICAgICAg ICAgICAgICAgICAgICAgIGBkaXNwbGF5YCBpbnQoMTEpIE5PVCBOVUxMLAorCQkgICAgICAgICAg ICAgICAgICAgICAgYHVuYW1lYCB2YXJjaGFyKDEwMCkgTk9UIE5VTEwsCisJCSAgICAgICAgICAg ICAgICAgICAgICBgc2VydmVyYCB2YXJjaGFyKDEwMCkgTk9UIE5VTEwsCisJCSAgICAgICAgICAg ICAgICAgICAgICBgY2xpZW50YCB2YXJjaGFyKDIwKSBERUZBVUxUIE5VTEwsCisJCSAgICAgICAg ICAgICAgICAgICAgICBgc3RhdHVzYCBjaGFyKDEpIE5PVCBOVUxMIERFRkFVTFQgJ1InLAorCQkg ICAgICAgICAgICAgICAgICAgICAgYGluaXRfdGltZWAgZGF0ZXRpbWUgTk9UIE5VTEwgREVGQVVM VCBDVVJSRU5UX1RJTUVTVEFNUCwKKwkJICAgICAgICAgICAgICAgICAgICAgIGBsYXN0X3RpbWVg IGRhdGV0aW1lIE5PVCBOVUxMIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCisJCSAgICAgICAg ICAgICAgICAgICAgICBgY29va2llYCBjaGFyKDQ1KSBERUZBVUxUIE5VTEwsCisJCSAgICAgICAg ICAgICAgICAgICAgICBgYWdlbnRfcGlkYCBpbnQoMTEpIERFRkFVTFQgTlVMTCwKKwkJICAgICAg ICAgICAgICAgICAgICAgIGBncl9wb3J0YCBpbnQoMTEpIERFRkFVTFQgTlVMTCwKKwkJICAgICAg ICAgICAgICAgICAgICAgIGBzb3VuZF9wb3J0YCBpbnQoMTEpIERFRkFVTFQgTlVMTCwKKwkJICAg ICAgICAgICAgICAgICAgICAgIGBmc19wb3J0YCBpbnQoMTEpIERFRkFVTFQgTlVMTCwKKwkJICAg ICAgICAgICAgICAgICAgICAgIGB0ZWtpY3RybF9wb3J0YCBpbnQoMTEpIERFRkFVTFQgTlVMTCwK KwkJICAgICAgICAgICAgICAgICAgICAgIGB0ZWtpZGF0YV9wb3J0YCBpbnQoMTEpIERFRkFVTFQg TlVMTCwKKwkJICAgICAgICAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZIChgc2Vzc2lvbl9pZGAp LAorCQkgICAgICAgICAgICAgICAgICAgICAgVU5JUVVFIEtFWSBgZGlzcGxheV9VTklRVUVgIChg ZGlzcGxheWApKQorCQkgICAgICAgICAgICAgICAgICAgICAgIik7CisJCSRzdGgtPmV4ZWN1dGUo KSBvciBkaWU7CisKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAgICAgICAg IENSRUFURSBUQUJMRSBgbWVzc2FnZXNgICgKKwkJICAgICAgICAgICAgICAgICAgIGBtZXNzX2lk YCB2YXJjaGFyKDIwKSBOT1QgTlVMTCwKKwkJICAgICAgICAgICAgICAgICAgIGBtZXNhZ2VgIGxv bmd0ZXh0LAorCQkgICAgICAgICAgICAgICAgICAgUFJJTUFSWSBLRVkgKGBtZXNzX2lkYCkpCisJ CSAgICAgICAgICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkKKwkJ JHN0aD0kZGJoLT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAgICAgICAgIENSRUFURSBUQUJMRSBg dXNlcl9tZXNzYWdlc2AgKAorCQkgICAgICAgICAgICAgICAgICAgYG1lc3NfaWRgIHZhcmNoYXIo MjApIE5PVCBOVUxMLAorCQkgICAgICAgICAgICAgICAgICAgYHVuYW1lYCB2YXJjaGFyKDEwMCkg Tk9UIE5VTEwsCisJCSAgICAgICAgICAgICAgICAgICBQUklNQVJZIEtFWSAoYG1lc3NfaWRgKSkK KwkJICAgICAgICAgICAgICAgICAgICIpOworCQkkc3RoLT5leGVjdXRlKCkgb3IgZGllOworCQor CQkkc3RoPSRkYmgtPnByZXBhcmUoIgorCQkgICAgICAgICAgICAgICAgICAgQ1JFQVRFIFRBQkxF IGB1c2VkX3BvcnRzYCAoCisJCSAgICAgICAgICAgICAgICAgICBgc2VydmVyYCB2YXJjaGFyKDEw MCkgTk9UIE5VTEwsCisJCSAgICAgICAgICAgICAgICAgICBgc2Vzc2lvbl9pZGAgdmFyY2hhcig1 MDApIERFRkFVTFQgTlVMTCwKKwkJICAgICAgICAgICAgICAgICAgIGBwb3J0YCBpbnQoMTEpIE5P VCBOVUxMLAorCQkgICAgICAgICAgICAgICAgICAgUFJJTUFSWSBLRVkgKGBwb3J0YCksCisJCSAg ICAgICAgICAgICAgICAgICBLRVkgYHVzZWRfcG9ydHNfc2Vzc2lvbl9pZF9ma2V5X2lkeGAgKGBz ZXNzaW9uX2lkYCksCisJCSAgICAgICAgICAgICAgICAgICBDT05TVFJBSU5UIGB1c2VkX3BvcnRz X3Nlc3Npb25faWRfZmtleWAgRk9SRUlHTiBLRVkgKGBzZXNzaW9uX2lkYCkgUkVGRVJFTkNFUyBg c2Vzc2lvbnNgIChgc2Vzc2lvbl9pZGApIE9OIERFTEVURSBDQVNDQURFIE9OIFVQREFURSBOTyBB Q1RJT04pCisJCSAgICAgICAgICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRp ZTsKKwkKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAgICAgICAgIENSRUFU RSBUQUJMRSBgbW91bnRzYCAoCisJCSAgICAgICAgICAgICAgICAgICBgaWRgIGludCgxMSkgTk9U IE5VTEwgQVVUT19JTkNSRU1FTlQsCisJCSAgICAgICAgICAgICAgICAgICBgc2Vzc2lvbl9pZGAg dmFyY2hhcig1MDApIERFRkFVTFQgTlVMTCwKKwkJICAgICAgICAgICAgICAgICAgIGBwYXRoYCB2 YXJjaGFyKDUxMikgTk9UIE5VTEwsCisJCSAgICAgICAgICAgICAgICAgICBgY2xpZW50YCB2YXJj aGFyKDIwKSBOT1QgTlVMTCwKKwkJICAgICAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZIChgaWRg KSwKKwkJICAgICAgICAgICAgICAgICAgIFVOSVFVRSBLRVkgYG1vdW50c19wa2V5YCAoYHBhdGhg LGBjbGllbnRgKSwKKwkJICAgICAgICAgICAgICAgICAgIEtFWSBgbW91bnRzX3Nlc3Npb25faWRf ZmtleV9pZHhgIChgc2Vzc2lvbl9pZGApLAorCQkgICAgICAgICAgICAgICAgICAgQ09OU1RSQUlO VCBgbW91bnRzX3Nlc3Npb25faWRfZmtleWAgRk9SRUlHTiBLRVkgKGBzZXNzaW9uX2lkYCkgUkVG RVJFTkNFUyBgc2Vzc2lvbnNgIChgc2Vzc2lvbl9pZGApIE9OIFVQREFURSBOTyBBQ1RJT04pCisJ CSAgICAgICAgICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkKKwkJ JHN0aD0kZGJoLT5wcmVwYXJlKCJHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIFRPIGAkeDJnb2Fk bWluYEBgJHVuZXRgIik7CisJCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7CisJCSRzdGgtPmZpbmlz aCgpOworCQl1bmRlZiAkZGJoOworCX0KKwkKKwlzdWIgbXlfY3JlYXRlX2RhdGFiYXNlCisJewor CQlteSAkZGJoPURCSS0+Y29ubmVjdCgiZGJpOm15c3FsOmRhdGFiYXNlPW15c3FsO2hvc3Q9JGhv c3Q7cG9ydD0kcG9ydCIsIiRkYmFkbWluIiwiJGRiYWRtaW5wYXNzIix7UmFpc2VFcnJvciA9PiAx fSkgb3IgZGllICRfOworCQkjZHJvcCBkYiBpZiBleGlzdHMKKwkJbXkgJHN0aD0kZGJoLT5wcmVw YXJlKCJEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBgJGRiYCIpOworCQkkc3RoLT5leGVjdXRlKCk7 CisJCSNkcm9wIHgyZ29hZG1pbgorCQkkc3RoPSRkYmgtPnByZXBhcmUoIkRST1AgVVNFUiBJRiBF WElTVFMgYCR4MmdvYWRtaW5gQGAkdW5ldGAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpOworCQkjY3Jl YXRlIGRiCisJCSRzdGg9JGRiaC0+cHJlcGFyZSgiQ1JFQVRFIERBVEFCQVNFIElGIE5PVCBFWElT VFMgYCRkYmAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkJI2NyZWF0ZSB4MmdvYWRt aW4KKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCJDUkVBVEUgVVNFUiBgJHgyZ29hZG1pbmBAYCR1bmV0 YCBJREVOVElGSUVEIEJZICckeDJnb2FkbWlucGFzcyciKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9y IGRpZTsKKwkJI3NhdmUgeDJnb2FkbWluIHBhc3N3b3JkCisJCW9wZW4gKEZMLCI+IC9ldGMveDJn by94Mmdvc3FsL3Bhc3N3b3Jkcy94MmdvYWRtaW4gIikgb3IgZGllICJDYW4ndCB3cml0ZSBwYXNz d29yZCBmaWxlIC9ldGMveDJnby94Mmdvc3FsL3Bhc3N3b3Jkcy94MmdvYWRtaW4iOworCQlwcmlu dCBGTCAkeDJnb2FkbWlucGFzczsKKwkJY2xvc2UoRkwpOworCQkkc3RoLT5maW5pc2goKTsKKwkJ dW5kZWYgJGRiaDsKIAl9CiB9CiAKLXN1YiBhZGRfdXNlcigpCisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBQb3N0Z3JlU1FMIEJhY2tlbmQKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworaWYgKCRDb25maWctPnBhcmFtKCJiYWNrZW5kIikgZXEgJ3Bvc3Rn cmVzJykKIHsKLQlteSAkdXNlcj1zaGlmdDsKLQlteSAoJG5hbWUsICRwYXNzLCAkdWlkLCAkcGdp ZCwgJHF1b3RhLCAkY29tbWVudCwgJGdjb3MsICRkaXIsICRzaGVsbCwgJGV4cGlyZSkgPSBnZXRw d25hbSgkdXNlcik7Ci0JaWYgKCEgJG5hbWUpCisJbXkgJGhvc3Q9JENvbmZpZy0+cGFyYW0oInBv c3RncmVzLmhvc3QiKTsKKwlteSAkcG9ydD0kQ29uZmlnLT5wYXJhbSgicG9zdGdyZXMucG9ydCIp OworCW15ICRzc2xtb2RlPSRDb25maWctPnBhcmFtKCJwb3N0Z3Jlcy5zc2wiKTsKKwlpZiAoISRz c2xtb2RlKQogCXsKLQkJcHJpbnQgIkNhbm5vdCBmaW5kIHVzZXIgKCR1c2VyKVxuIjsKLQkJcmV0 dXJuOwotCX0gZWxzaWYgKCRuYW1lIGVxICJyb290IikgewotCQlwcmludCAiVGhlIHN1cGVyLXVz ZXIgXCJyb290XCIgaXMgbm90IGFsbG93ZWQgdG8gdXNlIFgyR29cbiI7Ci0JCXJldHVybjsKKwkJ JHNzbG1vZGU9InByZWZlciI7CiAJfQotCSRwYXNzPWBwd2dlbiA4IDFgOwotCWNob21wKCRwYXNz KTsKLQotCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgiUkVWT0tFIEFMTCBQUklWSUxFR0VTIE9OIHNl c3Npb25zLCB1c2VkX3BvcnRzLCBtb3VudHMgRlJPTSBcIngyZ291c2VyXyR1c2VyXCIiKTsKLQkk c3RoLT57V2Fybn09MDsKLQkkc3RoLT57UHJpbnRFcnJvcn09MDsKLQkkc3RoLT5leGVjdXRlKCk7 Ci0KLQlteSAkc3RoPSRkYmgtPnByZXBhcmUoIlJFVk9LRSBBTEwgUFJJVklMRUdFUyBPTiBzZXNz aW9uc192aWV3LCBtb3VudHNfdmlldywgc2VydmVyc192aWV3LCBwb3J0c192aWV3IEZST00gXCJ4 MmdvdXNlcl8kdXNlclwiIik7Ci0JJHN0aC0+e1dhcm59PTA7Ci0JJHN0aC0+e1ByaW50RXJyb3J9 PTA7Ci0JJHN0aC0+ZXhlY3V0ZSgpOwotCi0JbXkgJHN0aD0kZGJoLT5wcmVwYXJlKCJEUk9QIE9X TkVEIEJZIFwieDJnb3VzZXJfJHVzZXJcIiIpOwotCSRzdGgtPntXYXJufT0wOwotCSRzdGgtPntQ cmludEVycm9yfT0wOwotCSRzdGgtPmV4ZWN1dGUoKTsKLQotCSRzdGg9JGRiaC0+cHJlcGFyZSgi ZHJvcCBVU0VSIGlmIGV4aXN0cyBcIngyZ291c2VyXyR1c2VyXCIiKTsKLQkkc3RoLT57V2Fybn09 MDsKLQkkc3RoLT57UHJpbnRFcnJvcn09MDsKLQkkc3RoLT5leGVjdXRlKCk7Ci0KLQlwcmludCAo ImNyZWF0ZSBEQiB1c2VyIFwieDJnb3VzZXJfJHVzZXJcIlxuIik7Ci0JJHN0aD0kZGJoLT5wcmVw YXJlKCJjcmVhdGUgVVNFUiBcIngyZ291c2VyXyR1c2VyXCIgV0lUSCBFTkNSWVBURUQgUEFTU1dP UkQgJyRwYXNzJyIpOwotCSRzdGgtPmV4ZWN1dGUoKTsKLQotCSRzdGg9JGRiaC0+cHJlcGFyZSgi R1JBTlQgSU5TRVJULCBVUERBVEUsIERFTEVURSBPTiBzZXNzaW9ucywgdXNlZF9wb3J0cywgbW91 bnRzIFRPIFwieDJnb3VzZXJfJHVzZXJcIiIpOwotCSRzdGgtPmV4ZWN1dGUoKTsKLQotCSRzdGg9 JGRiaC0+cHJlcGFyZSgiR1JBTlQgU0VMRUNUIE9OIHVzZWRfcG9ydHMgVE8gXCJ4MmdvdXNlcl8k dXNlclwiIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpOwotCi0JJHN0aD0kZGJoLT5wcmVwYXJlKCJHUkFO VCBTRUxFQ1QsIFVQREFURSwgREVMRVRFIE9OIHNlc3Npb25zX3ZpZXcsIG1vdW50c192aWV3LCBz ZXJ2ZXJzX3ZpZXcsIHBvcnRzX3ZpZXcgVE8gXCJ4MmdvdXNlcl8kdXNlclwiIik7Ci0JJHN0aC0+ ZXhlY3V0ZSgpOwotCSRzdGgtPmZpbmlzaCgpOwotCi0JaWYgKCEgLWQgIiRkaXIvLngyZ28iICkK KwlteSAkZGJhZG1pbj0kQ29uZmlnLT5wYXJhbSgicG9zdGdyZXMuZGJhZG1pbiIpOworCW15ICR4 MmdvYWRtaW49IngyZ29kYnVzZXIiOworCW15ICR4MmdvYWRtaW5wYXNzPWBwd2dlbiA4IDFgOwor CWNob21wICgkeDJnb2FkbWlucGFzcyk7CisJbXkgJGRiPSJ4MmdvX3Nlc3Npb25zIjsKKwkKKwlp ZiAoISRob3N0KQogCXsKLQkJCWlmICggZGVmaW5lZCAoJkZpbGU6OlBhdGg6Om1ha2VfcGF0aCkg KQotCQkJewotCQkJCUZpbGU6OlBhdGg6Om1ha2VfcGF0aCgiJGRpci8ueDJnbyIpOwotCQkJfQot CQkJZWxzaWYgKCBkZWZpbmVkICgmRmlsZTo6UGF0aDo6bWtwYXRoKSApCi0JCQl7Ci0JCQkJRmls ZTo6UGF0aDo6bWtwYXRoKCIkZGlyLy54MmdvIik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJ ZGllICJVbmFibGUgdG8gY3JlYXRlIGZvbGRlcnMgd2l0aCBGaWxlOjpQYXRoIjsKLQkJCX0KKwkJ JGhvc3Q9J2xvY2FsaG9zdCc7CiAJfQotCi0JI3NhdmUgdXNlciBwYXNzd29yZAotCW9wZW4gKEZM LCI+ICRkaXIvLngyZ28vc3FscGFzcyIpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBwYXNzd29yZCBmaWxl ICRkaXIvLngyZ28vc3FscGFzcyI7Ci0JcHJpbnQgRkwgJHBhc3M7CisJaWYgKCEkcG9ydCkKKwl7 CisJCSRwb3J0PSc1NDMyJzsKKwl9CisJaWYgKCEkZGJhZG1pbikKKwl7CisJCSRkYmFkbWluPSdw b3N0Z3Jlcyc7CisJfQorCQorCW9wZW4gKEZMLCI8IC9ldGMveDJnby94Mmdvc3FsL3Bhc3N3b3Jk cy9wZ2FkbWluICIpIG9yIGRpZSAiQ2FuJ3QgcmVhZCBwYXNzd29yZCBmaWxlIC9ldGMveDJnby94 Mmdvc3FsL3Bhc3N3b3Jkcy9wZ2FkbWluIjsKKwlteSAkZGJhZG1pbnBhc3M9PEZMPjsKIAljbG9z ZShGTCk7Ci0JY2htb2QoMDcwMCwiJGRpci8ueDJnbyIpOwotCWNob3duKCR1aWQsJHBnaWQsIiRk aXIvLngyZ28iKTsKLQljaG1vZCgwNjAwLCIkZGlyLy54MmdvL3NxbHBhc3MiKTsKLQljaG93bigk dWlkLCRwZ2lkLCIkZGlyLy54MmdvL3NxbHBhc3MiKTsKLX0KLQotc3ViIGNyZWF0ZV90YWJsZXMo KQotewotCSRkYmg9REJJLT5jb25uZWN0KCJkYmk6UGc6ZGJuYW1lPSRkYjtob3N0PSRob3N0O3Bv cnQ9JHBvcnQ7c3NsbW9kZT0kc3NsbW9kZSIsICIkZGJhZG1pbiIsICIkZGJhZG1pbnBhc3MiLHtB dXRvQ29tbWl0ID0+IDF9KSBvciBkaWUgJF87Ci0JbXkgJHN0aD0kZGJoLT5wcmVwYXJlKCIKLQkg ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIHRhYmxlIHNlc3Npb25zKAotCSAgICAgICAgICAg ICAgICAgICAgICBzZXNzaW9uX2lkIHRleHQgcHJpbWFyeSBrZXksCi0JICAgICAgICAgICAgICAg ICAgICAgIGRpc3BsYXkgaW50ZWdlciBub3QgbnVsbCwKLQkgICAgICAgICAgICAgICAgICAgICAg dW5hbWUgdGV4dCBub3QgbnVsbCwKLQkgICAgICAgICAgICAgICAgICAgICAgc2VydmVyIHRleHQg bm90IG51bGwsCi0JICAgICAgICAgICAgICAgICAgICAgIGNsaWVudCBpbmV0LAotCSAgICAgICAg ICAgICAgICAgICAgICBzdGF0dXMgY2hhcigxKSBub3QgbnVsbCBkZWZhdWx0ICdSJywKLQkgICAg ICAgICAgICAgICAgICAgICAgaW5pdF90aW1lIHRpbWVzdGFtcCBub3QgbnVsbCBkZWZhdWx0IG5v dygpLAotCSAgICAgICAgICAgICAgICAgICAgICBsYXN0X3RpbWUgdGltZXN0YW1wIG5vdCBudWxs IGRlZmF1bHQgbm93KCksCi0JICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZSBjaGFyKDMzKSwK LQkgICAgICAgICAgICAgICAgICAgICAgYWdlbnRfcGlkIGludCwKLQkgICAgICAgICAgICAgICAg ICAgICAgZ3JfcG9ydCBpbnQsCi0JICAgICAgICAgICAgICAgICAgICAgIHNvdW5kX3BvcnQgaW50 LAotCSAgICAgICAgICAgICAgICAgICAgICBmc19wb3J0IGludCwKLQkgICAgICAgICAgICAgICAg ICAgICAgdGVraWN0cmxfcG9ydCBpbnQsCi0JICAgICAgICAgICAgICAgICAgICAgIHRla2lkYXRh X3BvcnQgaW50LAotCSAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yX2lkIHRleHQgTk9UIE5V TEwgZGVmYXVsdCBjdXJyZW50X3VzZXIsCi0JICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShk aXNwbGF5KSkKLQkgICAgICAgICAgICAgICAgICAgICAgIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpIG9y IGRpZTsKLQotCSRzdGg9JGRiaC0+cHJlcGFyZSgiCi0JICAgICAgICAgICAgICAgICAgIGNyZWF0 ZSBWSUVXIHNlc3Npb25zX3ZpZXcgYXMKLQkgICAgICAgICAgICAgICAgICAgU0VMRUNUCi0JICAg ICAgICAgICAgICAgICAgIGFnZW50X3BpZCwgc2Vzc2lvbl9pZCwgZGlzcGxheSwgc2VydmVyLCBz dGF0dXMsIGluaXRfdGltZSwgY29va2llLCBjbGllbnQsIGdyX3BvcnQsCi0JICAgICAgICAgICAg ICAgICAgIHNvdW5kX3BvcnQsIGxhc3RfdGltZSwgdW5hbWUsIGZzX3BvcnQsIHRla2ljdHJsX3Bv cnQsIHRla2lkYXRhX3BvcnQgZnJvbSBzZXNzaW9ucwotCSAgICAgICAgICAgICAgICAgICB3aGVy ZSBjcmVhdG9yX2lkID0gY3VycmVudF91c2VyCi0JICAgICAgICAgICAgICAgICAgICIpOwotCSRz dGgtPmV4ZWN1dGUoKSBvciBkaWU7Ci0KLQkkc3RoPSRkYmgtPnByZXBhcmUoIgotCSAgICAgICAg ICAgICAgICAgICBjcmVhdGUgVklFVyBzZXJ2ZXJzX3ZpZXcgYXMKLQkgICAgICAgICAgICAgICAg ICAgU0VMRUNUCi0JICAgICAgICAgICAgICAgICAgIHNlcnZlciwgZGlzcGxheSwgc3RhdHVzIGZy b20gc2Vzc2lvbnMKLQkgICAgICAgICAgICAgICAgICAgIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpIG9y IGRpZTsKLQotCSRzdGg9JGRiaC0+cHJlcGFyZSgiCi0JICAgICAgICAgICAgICAgICAgIGNyZWF0 ZSBvciByZXBsYWNlIFJVTEUgdXBkYXRlX3Nlc3NfcHJpdiBBUyBPTiBVUERBVEUKLQkgICAgICAg ICAgICAgICAgICAgVE8gc2Vzc2lvbnMgd2hlcmUgKE9MRC5jcmVhdG9yX2lkIDw+IGN1cnJlbnRf dXNlciBvciBPTEQuY3JlYXRvcl9pZCA8PiBORVcuY3JlYXRvcl9pZCkgYW5kIGN1cnJlbnRfdXNl ciA8PiAnJHgyZ29hZG1pbicKLQkgICAgICAgICAgICAgICAgICAgRE8gSU5TVEVBRCBOT1RISU5H Ci0JICAgICAgICAgICAgICAgICAgICIpOwotCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7Ci0KLQkk c3RoPSRkYmgtPnByZXBhcmUoIgotCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgb3IgcmVwbGFj ZSBSVUxFIGluc2VydF9zZXNzX3ByaXYgQVMgT04gSU5TRVJUCi0JICAgICAgICAgICAgICAgICAg IFRPIHNlc3Npb25zIHdoZXJlIE5FVy5jcmVhdG9yX2lkIDw+IGN1cnJlbnRfdXNlciBhbmQgY3Vy cmVudF91c2VyIDw+ICckeDJnb2FkbWluJwotCSAgICAgICAgICAgICAgICAgICBETyBJTlNURUFE IE5PVEhJTkcKLQkgICAgICAgICAgICAgICAgICAgIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpIG9yIGRp ZTsKLQotCSRzdGg9JGRiaC0+cHJlcGFyZSgiCi0JICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBv ciByZXBsYWNlIFJVTEUgZGVsZXRlX3Nlc3NfcHJpdiBBUyBPTiBERUxFVEUKLQkgICAgICAgICAg ICAgICAgICAgVE8gc2Vzc2lvbnMgd2hlcmUgT0xELmNyZWF0b3JfaWQgPD4gY3VycmVudF91c2Vy IGFuZCBjdXJyZW50X3VzZXIgPD4gJyR4MmdvYWRtaW4nCi0JICAgICAgICAgICAgICAgICAgIERP IElOU1RFQUQgTk9USElORwotCSAgICAgICAgICAgICAgICAgICAiKTsKLQkkc3RoLT5leGVjdXRl KCkgb3IgZGllOwotCi0JJHN0aD0kZGJoLT5wcmVwYXJlKCIKLQkgICAgICAgICAgICAgICAgICAg Y3JlYXRlIG9yIHJlcGxhY2UgUlVMRSB1cGRhdGVfc2Vzc192aWV3IEFTIE9OIFVQREFURQotCSAg ICAgICAgICAgICAgICAgICBUTyBzZXNzaW9uc192aWV3IERPIElOU1RFQUQKLQkgICAgICAgICAg ICAgICAgICAgdXBkYXRlIHNlc3Npb25zIHNldAotCSAgICAgICAgICAgICAgICAgICBzdGF0dXM9 TkVXLnN0YXR1cywKLQkgICAgICAgICAgICAgICAgICAgbGFzdF90aW1lPU5FVy5sYXN0X3RpbWUs Ci0JICAgICAgICAgICAgICAgICAgIGNvb2tpZT1ORVcuY29va2llLAotCSAgICAgICAgICAgICAg ICAgICBhZ2VudF9waWQ9TkVXLmFnZW50X3BpZCwKLQkgICAgICAgICAgICAgICAgICAgY2xpZW50 PU5FVy5jbGllbnQsCi0JICAgICAgICAgICAgICAgICAgIGdyX3BvcnQ9TkVXLmdyX3BvcnQsCi0J ICAgICAgICAgICAgICAgICAgIHNvdW5kX3BvcnQ9TkVXLnNvdW5kX3BvcnQsCi0JICAgICAgICAg ICAgICAgICAgIGZzX3BvcnQ9TkVXLmZzX3BvcnQsCi0JICAgICAgICAgICAgICAgICAgIHRla2lj dHJsX3BvcnQ9TkVXLnRla2ljdHJsX3BvcnQsCi0JICAgICAgICAgICAgICAgICAgIHRla2lkYXRh X3BvcnQ9TkVXLnRla2lkYXRhX3BvcnQKLQkgICAgICAgICAgICAgICAgICAgd2hlcmUgc2Vzc2lv bl9pZD1PTEQuc2Vzc2lvbl9pZCBhbmQgY3JlYXRvcl9pZD1jdXJyZW50X3VzZXIKLQkgICAgICAg ICAgICAgICAgICAgIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKLQotCSRzdGg9JGRiaC0+ cHJlcGFyZSgiCi0JICAgICAgICAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSBtZXNzYWdlcyhtZXNz X2lkIHZhcmNoYXIoMjApIHByaW1hcnkga2V5LCBtZXNzYWdlIHRleHQpCi0JICAgICAgICAgICAg ICAgICAgICIpOwotCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7Ci0KLQkkc3RoPSRkYmgtPnByZXBh cmUoIgotCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgdGFibGUgdXNlcl9tZXNzYWdlcygKLQkg ICAgICAgICAgICAgICAgICAgbWVzc19pZCB0ZXh0IG5vdCBudWxsLAotCSAgICAgICAgICAgICAg ICAgICB1bmFtZSB0ZXh0IG5vdCBudWxsKQotCSAgICAgICAgICAgICAgICAgICAiKTsKLQkkc3Ro LT5leGVjdXRlKCkgb3IgZGllOwotCi0JJHN0aD0kZGJoLT5wcmVwYXJlKCIKLQkgICAgICAgICAg ICAgICAgICAgY3JlYXRlIHRhYmxlIHVzZWRfcG9ydHMoCi0JICAgICAgICAgICAgICAgICAgIHNl cnZlciB0ZXh0IG5vdCBudWxsLAotCSAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkIHRleHQg cmVmZXJlbmNlcyBzZXNzaW9ucyBvbiBkZWxldGUgY2FzY2FkZSwKLQkgICAgICAgICAgICAgICAg ICAgY3JlYXRvcl9pZCB0ZXh0IE5PVCBOVUxMIGRlZmF1bHQgY3VycmVudF91c2VyLAotCSAgICAg ICAgICAgICAgICAgICBwb3J0IGludGVnZXIgcHJpbWFyeSBrZXkpCi0JICAgICAgICAgICAgICAg ICAgICIpOwotCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7Ci0KLQkkc3RoPSRkYmgtPnByZXBhcmUo IgotCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgVklFVyBwb3J0c192aWV3IGFzCi0JICAgICAg ICAgICAgICAgICAgIFNFTEVDVAotCSAgICAgICAgICAgICAgICAgICBzZXJ2ZXIsIHBvcnQgZnJv bSB1c2VkX3BvcnRzCi0JICAgICAgICAgICAgICAgICAgICIpOwotCSRzdGgtPmV4ZWN1dGUoKSBv ciBkaWU7Ci0KLQkkc3RoPSRkYmgtPnByZXBhcmUoIgotCSAgICAgICAgICAgICAgICAgICBjcmVh dGUgb3IgcmVwbGFjZSBSVUxFIGluc2VydF9wb3J0X3ByaXYgQVMgT04gSU5TRVJUCi0JICAgICAg ICAgICAgICAgICAgIFRPIHVzZWRfcG9ydHMgd2hlcmUgTkVXLmNyZWF0b3JfaWQgPD4gY3VycmVu dF91c2VyIGFuZCBjdXJyZW50X3VzZXIgPD4gJyR4MmdvYWRtaW4nCi0JICAgICAgICAgICAgICAg ICAgIERPIElOU1RFQUQgTk9USElORwotCSAgICAgICAgICAgICAgICAgICAiKTsKLQkkc3RoLT5l eGVjdXRlKCkgb3IgZGllOwotCi0JJHN0aD0kZGJoLT5wcmVwYXJlKCIKLQkgICAgICAgICAgICAg ICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgUlVMRSB1cGRhdGVfcG9ydF9wcml2IEFTIE9OIFVQREFU RQotCSAgICAgICAgICAgICAgICAgICBUTyB1c2VkX3BvcnRzIHdoZXJlIChORVcuY3JlYXRvcl9p ZCA8PiBjdXJyZW50X3VzZXIgb3IgT0xELmNyZWF0b3JfaWQgPD4gY3VycmVudF91c2VyKSBhbmQg Y3VycmVudF91c2VyIDw+ICckeDJnb2FkbWluJwotCSAgICAgICAgICAgICAgICAgICBETyBJTlNU RUFEIE5PVEhJTkcKLQkgICAgICAgICAgICAgICAgICAgIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpIG9y IGRpZTsKLQotCSRzdGg9JGRiaC0+cHJlcGFyZSgiCi0JICAgICAgICAgICAgICAgICAgIGNyZWF0 ZSBvciByZXBsYWNlIFJVTEUgZGVsZXRlX3BvcnRfcHJpdiBBUyBPTiBERUxFVEUKLQkgICAgICAg ICAgICAgICAgICAgVE8gdXNlZF9wb3J0cyB3aGVyZSBPTEQuY3JlYXRvcl9pZCA8PiBjdXJyZW50 X3VzZXIgYW5kIGN1cnJlbnRfdXNlciA8PiAnJHgyZ29hZG1pbicKLQkgICAgICAgICAgICAgICAg ICAgRE8gSU5TVEVBRCBOT1RISU5HCi0JICAgICAgICAgICAgICAgICAgICIpOwotCSRzdGgtPmV4 ZWN1dGUoKSBvciBkaWU7Ci0KLQkkc3RoPSRkYmgtPnByZXBhcmUoIgotCSAgICAgICAgICAgICAg ICAgICBjcmVhdGUgdGFibGUgbW91bnRzKAotCSAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lk IHRleHQgcmVmZXJlbmNlcyBzZXNzaW9ucyBvbiBkZWxldGUgcmVzdHJpY3QsCi0JICAgICAgICAg ICAgICAgICAgIHBhdGggdGV4dCBub3QgbnVsbCwKLQkgICAgICAgICAgICAgICAgICAgY2xpZW50 IGluZXQgbm90IG51bGwsCi0JICAgICAgICAgICAgICAgICAgIGNyZWF0b3JfaWQgdGV4dCBOT1Qg TlVMTCBkZWZhdWx0IGN1cnJlbnRfdXNlciwKLQkgICAgICAgICAgICAgICAgICAgcHJpbWFyeSBr ZXkocGF0aCxjbGllbnQpKQotCSAgICAgICAgICAgICAgICAgICAiKTsKLQkkc3RoLT5leGVjdXRl KCkgb3IgZGllOwotCi0JJHN0aD0kZGJoLT5wcmVwYXJlKCIKLQkgICAgICAgICAgICAgICAgICAg Y3JlYXRlIFZJRVcgbW91bnRzX3ZpZXcgYXMKLQkgICAgICAgICAgICAgICAgICAgU0VMRUNUCi0J ICAgICAgICAgICAgICAgICAgIGNsaWVudCxwYXRoLCBzZXNzaW9uX2lkIGZyb20gbW91bnRzCi0J ICAgICAgICAgICAgICAgICAgIHdoZXJlIGNyZWF0b3JfaWQgPSBjdXJyZW50X3VzZXIKLQkgICAg ICAgICAgICAgICAgICAgIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKLQotCSRzdGg9JGRi aC0+cHJlcGFyZSgiCi0JICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIFJVTEUg ZGVsZXRlX21vdW50c192aWV3IEFTIE9OIERFTEVURQotCSAgICAgICAgICAgICAgICAgICBUTyBt b3VudHNfdmlldyBETyBJTlNURUFECi0JICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmcm9tIG1v dW50cwotCSAgICAgICAgICAgICAgICAgICB3aGVyZSBzZXNzaW9uX2lkPU9MRC5zZXNzaW9uX2lk IGFuZCBjcmVhdG9yX2lkPWN1cnJlbnRfdXNlciBhbmQgcGF0aD1PTEQucGF0aAotCSAgICAgICAg ICAgICAgICAgICAiKTsKLQkkc3RoLT5leGVjdXRlKCkgb3IgZGllOwotCi0JJHN0aD0kZGJoLT5w cmVwYXJlKCIKLQkgICAgICAgICAgICAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgUlVMRSBpbnNl cnRfbW91bnRfcHJpdiBBUyBPTiBJTlNFUlQKLQkgICAgICAgICAgICAgICAgICAgVE8gbW91bnRz IHdoZXJlIE5FVy5jcmVhdG9yX2lkIDw+IGN1cnJlbnRfdXNlciBhbmQgY3VycmVudF91c2VyIDw+ ICckeDJnb2FkbWluJwotCSAgICAgICAgICAgICAgICAgICBETyBJTlNURUFEIE5PVEhJTkcKLQkg ICAgICAgICAgICAgICAgICAgIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKLQotCSRzdGg9 JGRiaC0+cHJlcGFyZSgiCi0JICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIFJV TEUgdXBkYXRlX21vdW50X3ByaXYgQVMgT04gVVBEQVRFCi0JICAgICAgICAgICAgICAgICAgIFRP IG1vdW50cyB3aGVyZSAoTkVXLmNyZWF0b3JfaWQgPD4gY3VycmVudF91c2VyIG9yIE9MRC5jcmVh dG9yX2lkIDw+IGN1cnJlbnRfdXNlcikgYW5kIGN1cnJlbnRfdXNlciA8PiAnJHgyZ29hZG1pbicK LQkgICAgICAgICAgICAgICAgICAgRE8gSU5TVEVBRCBOT1RISU5HCi0JICAgICAgICAgICAgICAg ICAgICIpOwotCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7Ci0KLQkkc3RoPSRkYmgtPnByZXBhcmUo IgotCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBSVUxFIGRlbGV0ZV9tb3Vu dF9wcml2IEFTIE9OIERFTEVURQotCSAgICAgICAgICAgICAgICAgICBUTyBtb3VudHMgd2hlcmUg T0xELmNyZWF0b3JfaWQgPD4gY3VycmVudF91c2VyIGFuZCBjdXJyZW50X3VzZXIgPD4gJyR4Mmdv YWRtaW4nCi0JICAgICAgICAgICAgICAgICAgIERPIElOU1RFQUQgTk9USElORwotCSAgICAgICAg ICAgICAgICAgICAiKTsKLQkkc3RoLT5leGVjdXRlKCkgb3IgZGllOwotCi0JJHN0aD0kZGJoLT5w cmVwYXJlKCJHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBzZXNzaW9ucywgbWVzc2FnZXMsIHVzZXJf bWVzc2FnZXMsIHVzZWRfcG9ydHMsIG1vdW50cyBUTyAkeDJnb2FkbWluIik7Ci0JJHN0aC0+ZXhl Y3V0ZSgpIG9yIGRpZTsKLQkkc3RoLT5maW5pc2goKTsKKwljaG9tcCgkZGJhZG1pbnBhc3MpOwor CQorCWlmICgkdXBkYXRlZGIpCisJeworCQkjIGNoZWNrIGlmIHRoZSBEQiBhbHJlYWR5IGV4aXN0 cywgaWYgbm90LCBjcmVhdGUgaXQuLi4KKwkJbXkgJGRiaDsKKwkJdW50aWwgKAorCQkJJGRiaCA9 IERCSS0+Y29ubmVjdCgiZGJpOlBnOmRibmFtZT0kZGI7aG9zdD0kaG9zdDtwb3J0PSRwb3J0O3Nz bG1vZGU9JHNzbG1vZGUiLCAiJGRiYWRtaW4iLCAiJGRiYWRtaW5wYXNzIix7QXV0b0NvbW1pdCA9 PiAxLCBSYWlzZUVycm9yID0+IDAsIFByaW50RXJyb3IgPT4gMH0pCisJCSkgeworCQkJJGNyZWF0 ZWRiID0gMTsKKwkJCWxhc3Q7CisJCX07CisJCWlmICghJGNyZWF0ZWRiKSB7CisJCQkkZGJoID0g REJJLT5jb25uZWN0KCJkYmk6UGc6ZGJuYW1lPSRkYjtob3N0PSRob3N0O3BvcnQ9JHBvcnQ7c3Ns bW9kZT0kc3NsbW9kZSIsICIkZGJhZG1pbiIsICIkZGJhZG1pbnBhc3MiLHtBdXRvQ29tbWl0ID0+ IDF9KTsKKwkJCWlmICgkZGJoKSB7CisJCQkJbXkgJHVwZGF0ZV92aWV3c19uX3J1bGVzID0gMDsK KwkJCQlteSAkc3RoX3Rla2ljdHJsOworCQkJCW15ICRzdGhfdGVraWRhdGE7CisJCQkJbXkgJHN0 aF91cGRhdGU7CisJCQkJdHJ5IHsKKwkJCQkJJHN0aF90ZWtpY3RybCA9ICRkYmgtPnByZXBhcmUo IgorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgdGVraWN0cmxfcG9y dCBmcm9tIHNlc3Npb25zCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOwor CQkJCQkkc3RoX3Rla2ljdHJsLT5leGVjdXRlKCk7CisJCQkJfSBjYXRjaCB7CisJCQkJCXByaW50 ICJBRERJTkc6IHRla2ljdHJsX3BvcnQgY29sdW1uIHRvIHRhYmxlIHNlc3Npb25zXG4iOworCQkJ CQkkc3RoX3Rla2ljdHJsID0gJGRiaC0+cHJlcGFyZSgiCisJCQkJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFsdGVyIHRhYmxlIHNlc3Npb25zCisJCQkJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFkZCBjb2x1bW4gdGVraWN0cmxfcG9ydCBpbnQKKwkJCQkJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIik7CisJCQkJCSRzdGhfdGVraWN0cmwtPmV4ZWN1dGUoKSBv ciBkaWU7CisJCQkJCSRzdGhfdGVraWN0cmwtPmZpbmlzaCgpOworCQkJCQkkdXBkYXRlX3ZpZXdz X25fcnVsZXMgPSAxOworCQkJCX07CisJCQkJdHJ5IHsKKwkJCQkJJHN0aF90ZWtpZGF0YSA9ICRk YmgtPnByZXBhcmUoIgorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Qg dGVraWRhdGFfcG9ydCBmcm9tIHNlc3Npb25zCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIpOworCQkJCQkkc3RoX3Rla2lkYXRhLT5leGVjdXRlKCk7CisJCQkJfSBjYXRjaCB7 CisJCQkJCXByaW50ICJBRERJTkc6IHRla2lkYXRhX3BvcnQgY29sdW1uIHRvIHRhYmxlIHNlc3Np b25zXG4iOworCQkJCQkkc3RoX3Rla2lkYXRhPSRkYmgtPnByZXBhcmUoIgorCQkJCQkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWx0ZXIgdGFibGUgc2Vzc2lvbnMKKwkJCQkJICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFkZCBjb2x1bW4gdGVraWRhdGFfcG9ydCBpbnQKKwkJCQkJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIpOworCQkJCQkkc3RoX3Rla2lkYXRhLT5leGVjdXRl KCkgb3IgZGllOworCQkJCQkkc3RoX3Rla2lkYXRhLT5maW5pc2goKTsKKwkJCQkJJHVwZGF0ZV92 aWV3c19uX3J1bGVzID0gMTsKKwkJCQl9OworCQorCQkJCWlmICgkdXBkYXRlX3ZpZXdzX25fcnVs ZXMpCisJCQkJeworCQkJCQlwcmludCAiVVBEQVRJTkcgVklFVzogc2Vzc2lvbnNfdmlld1xuIjsK KwkJCQkJJHN0aF91cGRhdGU9JGRiaC0+cHJlcGFyZSgiCisJCQkJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgVklFVyBzZXNzaW9uc192aWV3IGFzCisJCQkJCSAg ICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUCisJCQkJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgYWdlbnRfcGlkLCBzZXNzaW9uX2lkLCBkaXNwbGF5LCBzZXJ2ZXIsIHN0YXR1cywgaW5p dF90aW1lLCBjb29raWUsIGNsaWVudCwgZ3JfcG9ydCwKKwkJCQkJICAgICAgICAgICAgICAgICAg ICAgICAgICBzb3VuZF9wb3J0LCBsYXN0X3RpbWUsIHVuYW1lLCBmc19wb3J0LCB0ZWtpY3RybF9w b3J0LCB0ZWtpZGF0YV9wb3J0IGZyb20gc2Vzc2lvbnMKKwkJCQkJICAgICAgICAgICAgICAgICAg ICAgICAgICB3aGVyZSBjcmVhdG9yX2lkID0gY3VycmVudF91c2VyCisJCQkJCSAgICAgICAgICAg ICAgICAgICAgICAgICAgIik7CisJCQkJCSRzdGhfdXBkYXRlLT5leGVjdXRlKCkgb3IgZGllOwor CQkJCQlwcmludCAiVVBEQVRJTkcgUlVMRTogdXBkYXRlX3Nlc3Nfdmlld1xuIjsKKwkJCQkJJHN0 aF91cGRhdGU9JGRiaC0+cHJlcGFyZSgiCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg Y3JlYXRlIG9yIHJlcGxhY2UgUlVMRSB1cGRhdGVfc2Vzc192aWV3IEFTIE9OIFVQREFURQorCQkJ CQkgICAgICAgICAgICAgICAgICAgICAgICAgIFRPIHNlc3Npb25zX3ZpZXcgRE8gSU5TVEVBRAor CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSBzZXNzaW9ucyBzZXQKKwkJCQkJ ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9TkVXLnN0YXR1cywKKwkJCQkJICAgICAg ICAgICAgICAgICAgICAgICAgICBsYXN0X3RpbWU9TkVXLmxhc3RfdGltZSwKKwkJCQkJICAgICAg ICAgICAgICAgICAgICAgICAgICBjb29raWU9TkVXLmNvb2tpZSwKKwkJCQkJICAgICAgICAgICAg ICAgICAgICAgICAgICBhZ2VudF9waWQ9TkVXLmFnZW50X3BpZCwKKwkJCQkJICAgICAgICAgICAg ICAgICAgICAgICAgICBjbGllbnQ9TkVXLmNsaWVudCwKKwkJCQkJICAgICAgICAgICAgICAgICAg ICAgICAgICBncl9wb3J0PU5FVy5ncl9wb3J0LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAg ICAgIHNvdW5kX3BvcnQ9TkVXLnNvdW5kX3BvcnQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgZnNfcG9ydD1ORVcuZnNfcG9ydCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZWtpY3RybF9wb3J0PU5FVy50ZWtpY3RybF9wb3J0LAorCQkJCQkgICAgICAgICAgICAgICAg ICAgICAgICAgIHRla2lkYXRhX3BvcnQ9TkVXLnRla2lkYXRhX3BvcnQKKwkJCQkJICAgICAgICAg ICAgICAgICAgICAgICAgICB3aGVyZSBzZXNzaW9uX2lkPU9MRC5zZXNzaW9uX2lkIGFuZCBjcmVh dG9yX2lkPWN1cnJlbnRfdXNlcgorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICIpOwor CQkJCQkkc3RoX3VwZGF0ZS0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkJCQkJJHN0aF91cGRhdGUtPmZp bmlzaCgpOworCQkJCX0KKwkJCX0KKwkJCWlmICgkZGJoKSB7CisJCQkJdW5kZWYgJGRiaDsKKwkJ CX0KKwkJCWV4aXQoMCk7CisJCX0gZWxzZSB7CisJCQlwcmludCAiTm8gc2Vzc2lvbiBEQiBmb3Vu ZC4gVXNlIC0tY3JlYXRlZGIgaW5zdGVhZCBvZiAtLXVwZGF0ZWRiLlxuIjsKKwkJfQorCX0KKwkK KwlpZiAoJGNyZWF0ZWRiKQorCXsKKwkJY3JlYXRlX2RhdGFiYXNlKCk7CisJCWNyZWF0ZV90YWJs ZXMoKTsKKwkJZXhpdCgwKTsKKwl9CisJCisJaWYgKCRsaXN0dXNlcnMpCisJeworCQlsaXN0X3Vz ZXJzKCk7CisJCWV4aXQoMCk7CisJfQorCQorCW15ICRkYmg9REJJLT5jb25uZWN0KCJkYmk6UGc6 ZGJuYW1lPSRkYjtob3N0PSRob3N0O3BvcnQ9JHBvcnQ7c3NsbW9kZT0kc3NsbW9kZSIsICIkZGJh ZG1pbiIsICIkZGJhZG1pbnBhc3MiLHtBdXRvQ29tbWl0ID0+IDF9KSBvciBkaWUgJF87CisJaWYg KCRhZGR1c2VyKQorCXsKKwkJYWRkX3VzZXIoJGFkZHVzZXIpOworCX0KKwkKKwlpZiAoJGFkZGdy b3VwKQorCXsKKwkJbXkgKCRuYW1lLCAkcGFzc3dkLCAkZ2lkLCAkbWVtYmVycykgPSBnZXRncm5h bSggJGFkZGdyb3VwKTsKKwkJbXkgQGdycF9tZW1iZXJzPXNwbGl0KCcgJywkbWVtYmVycyk7CisJ CWZvcmVhY2ggKEBncnBfbWVtYmVycykKKwkJeworCQkJY2hvbXAoJF8pOworCQkJYWRkX3VzZXIo JF8pOworCQl9CisJfQorCQorCWlmICgkcm11c2VyKQorCXsKKwkJcm1fdXNlcigkcm11c2VyKTsK Kwl9CisJCisJaWYgKCRybWdyb3VwKQorCXsKKwkJbXkgKCRuYW1lLCAkcGFzc3dkLCAkZ2lkLCAk bWVtYmVycykgPSBnZXRncm5hbSggJHJtZ3JvdXApOworCQlteSBAZ3JwX21lbWJlcnM9c3BsaXQo JyAnLCRtZW1iZXJzKTsKKwkJZm9yZWFjaCAoQGdycF9tZW1iZXJzKQorCQl7CisJCQljaG9tcCgk Xyk7CisJCQlybV91c2VyKCRfKTsKKwkJfQorCX0KIAl1bmRlZiAkZGJoOwotfQotCi1zdWIgY3Jl YXRlX2RhdGFiYXNlCi17Ci0JbXkgJGRiaD1EQkktPmNvbm5lY3QoImRiaTpQZzpkYm5hbWU9cG9z dGdyZXM7aG9zdD0kaG9zdDtwb3J0PSRwb3J0O3NzbG1vZGU9JHNzbG1vZGUiLCAiJGRiYWRtaW4i LCAiJGRiYWRtaW5wYXNzIix7QXV0b0NvbW1pdCA9PiAxfSkgb3IgZGllICRfOwotCSNkcm9wIGRi IGlmIGV4aXN0cwotCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgiZHJvcCBkYXRhYmFzZSBpZiBleGlz dHMgeDJnb19zZXNzaW9ucyIpOwotCSRzdGgtPmV4ZWN1dGUoKTsKLQkjZHJvcCB4MmdvYWRtaW4K LQkkc3RoPSRkYmgtPnByZXBhcmUoImRyb3AgdXNlciBpZiBleGlzdHMgJHgyZ29hZG1pbiIpOwot CSRzdGgtPmV4ZWN1dGUoKTsKLQkjY3JlYXRlIGRiCi0JJHN0aD0kZGJoLT5wcmVwYXJlKCJjcmVh dGUgZGF0YWJhc2UgJGRiIik7Ci0JJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKLQkjY3JlYXRlIHgy Z29hZG1pbgotCSRzdGg9JGRiaC0+cHJlcGFyZSgiY3JlYXRlIFVTRVIgJHgyZ29hZG1pbiBXSVRI IEVOQ1JZUFRFRCBQQVNTV09SRCAnJHgyZ29hZG1pbnBhc3MnIik7Ci0JJHN0aC0+ZXhlY3V0ZSgp IG9yIGRpZTsKLQkjc2F2ZSB4MmdvYWRtaW4gcGFzc3dvcmQKLQlvcGVuIChGTCwiPiAvZXRjL3gy Z28veDJnb3NxbC9wYXNzd29yZHMveDJnb2FkbWluICIpIG9yIGRpZSAiQ2FuJ3Qgd3JpdGUgcGFz c3dvcmQgZmlsZSAvZXRjL3gyZ28veDJnb3NxbC9wYXNzd29yZHMveDJnb2FkbWluIjsKLQlwcmlu dCBGTCAkeDJnb2FkbWlucGFzczsKLQljbG9zZShGTCk7Ci0JJHN0aC0+ZmluaXNoKCk7Ci0JdW5k ZWYgJGRiaDsKKwkKKwlzdWIgbGlzdF91c2VycygpCisJeworCQlteSAkZGJoPURCSS0+Y29ubmVj dCgiZGJpOlBnOmRibmFtZT1wb3N0Z3Jlcztob3N0PSRob3N0O3BvcnQ9JHBvcnQ7c3NsbW9kZT0k c3NsbW9kZSIsICIkZGJhZG1pbiIsICIkZGJhZG1pbnBhc3MiLHtBdXRvQ29tbWl0ID0+IDF9KSBv ciBkaWUgJF87CisJCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgic2VsZWN0IHJvbG5hbWUgZnJvbSBw Z19yb2xlcyB3aGVyZSByb2xuYW1lIGxpa2UgJ3gyZ291c2VyXyUnIik7CisJCSRzdGgtPmV4ZWN1 dGUoKW9yIGRpZTsKKwkJcHJpbnRmICgiJS0yMHMgREIgdXNlclxuIiwiVU5JWCB1c2VyIik7CisJ CXByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisJCW15 IEBkYXRhOworCQl3aGlsZSAoQGRhdGEgPSAkc3RoLT5mZXRjaHJvd19hcnJheSkKKwkJeworCQkJ QGRhdGFbMF09fnMveDJnb3VzZXJfLy87CisJCQlwcmludGYgKCIlLTIwcyB4MmdvdXNlcl9AZGF0 YVswXVxuIixAZGF0YVswXSk7CisJCX0KKwkJJHN0aC0+ZmluaXNoKCk7CisJCXVuZGVmICRkYmg7 CisJfQorCQorCXN1YiBybV91c2VyKCkKKwl7CisJCW15ICR1c2VyPXNoaWZ0OworCQorCQlwcmlu dCAoInJtIERCIHVzZXIgXCJ4MmdvdXNlcl8kdXNlclwiXG4iKTsKKwkKKwkJbXkgJHN0aD0kZGJo LT5wcmVwYXJlKCJSRVZPS0UgQUxMIFBSSVZJTEVHRVMgT04gc2Vzc2lvbnMsIHVzZWRfcG9ydHMs IG1vdW50cyBGUk9NIFwieDJnb3VzZXJfJHVzZXJcIiIpOworCQkkc3RoLT5leGVjdXRlKCk7CisJ CisJCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgiUkVWT0tFIEFMTCBQUklWSUxFR0VTIE9OIHNlc3Np b25zX3ZpZXcsIG1vdW50c192aWV3LCBzZXJ2ZXJzX3ZpZXcsIHBvcnRzX3ZpZXcgRlJPTSBcIngy Z291c2VyXyR1c2VyXCIiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpOworCQorCQlteSAkc3RoPSRkYmgt PnByZXBhcmUoIkRST1AgT1dORUQgQlkgXCJ4MmdvdXNlcl8kdXNlclwiIik7CisJCSRzdGgtPmV4 ZWN1dGUoKTsKKwkKKwkJbXkgJHN0aD0kZGJoLT5wcmVwYXJlKCJkcm9wIFVTRVIgaWYgZXhpc3Rz IFwieDJnb3VzZXJfJHVzZXJcIiIpOworCQkkc3RoLT5leGVjdXRlKCk7CisJCSRzdGgtPmZpbmlz aCgpOworCQorCQlteSAoJG5hbWUsICRwYXNzLCAkdWlkLCAkcGdpZCwgJHF1b3RhLCAkY29tbWVu dCwgJGdjb3MsICRkaXIsICRzaGVsbCwgJGV4cGlyZSkgPSBnZXRwd25hbSgkdXNlcik7CisJCWlm ICghICR1aWQpCisJCXsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIC1lICIkZGlyLy54MmdvL3Nx bHBhc3MiICkKKwkJeworCQkJdW5saW5rKCIkZGlyLy54MmdvL3NxbHBhc3MiKTsKKwkJfQorCX0K KwkKKwlzdWIgYWRkX3VzZXIoKQorCXsKKwkJbXkgJHVzZXI9c2hpZnQ7CisJCW15ICgkbmFtZSwg JHBhc3MsICR1aWQsICRwZ2lkLCAkcXVvdGEsICRjb21tZW50LCAkZ2NvcywgJGRpciwgJHNoZWxs LCAkZXhwaXJlKSA9IGdldHB3bmFtKCR1c2VyKTsKKwkJaWYgKCEgJG5hbWUpCisJCXsKKwkJCXBy aW50ICJDYW5ub3QgZmluZCB1c2VyICgkdXNlcilcbiI7CisJCQlyZXR1cm47CisJCX0gZWxzaWYg KCRuYW1lIGVxICJyb290IikgeworCQkJcHJpbnQgIlRoZSBzdXBlci11c2VyIFwicm9vdFwiIGlz IG5vdCBhbGxvd2VkIHRvIHVzZSBYMkdvXG4iOworCQkJcmV0dXJuOworCQl9CisJCSRwYXNzPWBw d2dlbiA4IDFgOworCQljaG9tcCgkcGFzcyk7CisJCisJCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgi UkVWT0tFIEFMTCBQUklWSUxFR0VTIE9OIHNlc3Npb25zLCB1c2VkX3BvcnRzLCBtb3VudHMgRlJP TSBcIngyZ291c2VyXyR1c2VyXCIiKTsKKwkJJHN0aC0+e1dhcm59PTA7CisJCSRzdGgtPntQcmlu dEVycm9yfT0wOworCQkkc3RoLT5leGVjdXRlKCk7CisJCisJCW15ICRzdGg9JGRiaC0+cHJlcGFy ZSgiUkVWT0tFIEFMTCBQUklWSUxFR0VTIE9OIHNlc3Npb25zX3ZpZXcsIG1vdW50c192aWV3LCBz ZXJ2ZXJzX3ZpZXcsIHBvcnRzX3ZpZXcgRlJPTSBcIngyZ291c2VyXyR1c2VyXCIiKTsKKwkJJHN0 aC0+e1dhcm59PTA7CisJCSRzdGgtPntQcmludEVycm9yfT0wOworCQkkc3RoLT5leGVjdXRlKCk7 CisJCisJCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgiRFJPUCBPV05FRCBCWSBcIngyZ291c2VyXyR1 c2VyXCIiKTsKKwkJJHN0aC0+e1dhcm59PTA7CisJCSRzdGgtPntQcmludEVycm9yfT0wOworCQkk c3RoLT5leGVjdXRlKCk7CisJCisJCSRzdGg9JGRiaC0+cHJlcGFyZSgiZHJvcCBVU0VSIGlmIGV4 aXN0cyBcIngyZ291c2VyXyR1c2VyXCIiKTsKKwkJJHN0aC0+e1dhcm59PTA7CisJCSRzdGgtPntQ cmludEVycm9yfT0wOworCQkkc3RoLT5leGVjdXRlKCk7CisJCisJCXByaW50ICgiY3JlYXRlIERC IHVzZXIgXCJ4MmdvdXNlcl8kdXNlclwiXG4iKTsKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCJjcmVh dGUgVVNFUiBcIngyZ291c2VyXyR1c2VyXCIgV0lUSCBFTkNSWVBURUQgUEFTU1dPUkQgJyRwYXNz JyIpOworCQkkc3RoLT5leGVjdXRlKCk7CisJCisJCSRzdGg9JGRiaC0+cHJlcGFyZSgiR1JBTlQg SU5TRVJULCBVUERBVEUsIERFTEVURSBPTiBzZXNzaW9ucywgdXNlZF9wb3J0cywgbW91bnRzIFRP IFwieDJnb3VzZXJfJHVzZXJcIiIpOworCQkkc3RoLT5leGVjdXRlKCk7CisJCisJCSRzdGg9JGRi aC0+cHJlcGFyZSgiR1JBTlQgU0VMRUNUIE9OIHVzZWRfcG9ydHMgVE8gXCJ4MmdvdXNlcl8kdXNl clwiIik7CisJCSRzdGgtPmV4ZWN1dGUoKTsKKwkKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCJHUkFO VCBTRUxFQ1QsIFVQREFURSwgREVMRVRFIE9OIHNlc3Npb25zX3ZpZXcsIG1vdW50c192aWV3LCBz ZXJ2ZXJzX3ZpZXcsIHBvcnRzX3ZpZXcgVE8gXCJ4MmdvdXNlcl8kdXNlclwiIik7CisJCSRzdGgt PmV4ZWN1dGUoKTsKKwkJJHN0aC0+ZmluaXNoKCk7CisJCisJCWlmICghIC1kICIkZGlyLy54Mmdv IiApCisJCXsKKwkJCQlpZiAoIGRlZmluZWQgKCZGaWxlOjpQYXRoOjptYWtlX3BhdGgpICkKKwkJ CQl7CisJCQkJCUZpbGU6OlBhdGg6Om1ha2VfcGF0aCgiJGRpci8ueDJnbyIpOworCQkJCX0KKwkJ CQllbHNpZiAoIGRlZmluZWQgKCZGaWxlOjpQYXRoOjpta3BhdGgpICkKKwkJCQl7CisJCQkJCUZp bGU6OlBhdGg6Om1rcGF0aCgiJGRpci8ueDJnbyIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJewor CQkJCQlkaWUgIlVuYWJsZSB0byBjcmVhdGUgZm9sZGVycyB3aXRoIEZpbGU6OlBhdGgiOworCQkJ CX0KKwkJfQorCQorCQkjc2F2ZSB1c2VyIHBhc3N3b3JkCisJCW9wZW4gKEZMLCI+ICRkaXIvLngy Z28vc3FscGFzcyIpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBwYXNzd29yZCBmaWxlICRkaXIvLngyZ28v c3FscGFzcyI7CisJCXByaW50IEZMICRwYXNzOworCQljbG9zZShGTCk7CisJCWNobW9kKDA3MDAs IiRkaXIvLngyZ28iKTsKKwkJY2hvd24oJHVpZCwkcGdpZCwiJGRpci8ueDJnbyIpOworCQljaG1v ZCgwNjAwLCIkZGlyLy54MmdvL3NxbHBhc3MiKTsKKwkJY2hvd24oJHVpZCwkcGdpZCwiJGRpci8u eDJnby9zcWxwYXNzIik7CisJfQorCQorCXN1YiBjcmVhdGVfdGFibGVzKCkKKwl7CisJCSRkYmg9 REJJLT5jb25uZWN0KCJkYmk6UGc6ZGJuYW1lPSRkYjtob3N0PSRob3N0O3BvcnQ9JHBvcnQ7c3Ns bW9kZT0kc3NsbW9kZSIsICIkZGJhZG1pbiIsICIkZGJhZG1pbnBhc3MiLHtBdXRvQ29tbWl0ID0+ IDF9KSBvciBkaWUgJF87CisJCW15ICRzdGg9JGRiaC0+cHJlcGFyZSgiCisJCSAgICAgICAgICAg ICAgICAgICAgICBjcmVhdGUgdGFibGUgc2Vzc2lvbnMoCisJCSAgICAgICAgICAgICAgICAgICAg ICBzZXNzaW9uX2lkIHRleHQgcHJpbWFyeSBrZXksCisJCSAgICAgICAgICAgICAgICAgICAgICBk aXNwbGF5IGludGVnZXIgbm90IG51bGwsCisJCSAgICAgICAgICAgICAgICAgICAgICB1bmFtZSB0 ZXh0IG5vdCBudWxsLAorCQkgICAgICAgICAgICAgICAgICAgICAgc2VydmVyIHRleHQgbm90IG51 bGwsCisJCSAgICAgICAgICAgICAgICAgICAgICBjbGllbnQgaW5ldCwKKwkJICAgICAgICAgICAg ICAgICAgICAgIHN0YXR1cyBjaGFyKDEpIG5vdCBudWxsIGRlZmF1bHQgJ1InLAorCQkgICAgICAg ICAgICAgICAgICAgICAgaW5pdF90aW1lIHRpbWVzdGFtcCBub3QgbnVsbCBkZWZhdWx0IG5vdygp LAorCQkgICAgICAgICAgICAgICAgICAgICAgbGFzdF90aW1lIHRpbWVzdGFtcCBub3QgbnVsbCBk ZWZhdWx0IG5vdygpLAorCQkgICAgICAgICAgICAgICAgICAgICAgY29va2llIGNoYXIoMzMpLAor CQkgICAgICAgICAgICAgICAgICAgICAgYWdlbnRfcGlkIGludCwKKwkJICAgICAgICAgICAgICAg ICAgICAgIGdyX3BvcnQgaW50LAorCQkgICAgICAgICAgICAgICAgICAgICAgc291bmRfcG9ydCBp bnQsCisJCSAgICAgICAgICAgICAgICAgICAgICBmc19wb3J0IGludCwKKwkJICAgICAgICAgICAg ICAgICAgICAgIHRla2ljdHJsX3BvcnQgaW50LAorCQkgICAgICAgICAgICAgICAgICAgICAgdGVr aWRhdGFfcG9ydCBpbnQsCisJCSAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yX2lkIHRleHQg Tk9UIE5VTEwgZGVmYXVsdCBjdXJyZW50X3VzZXIsCisJCSAgICAgICAgICAgICAgICAgICAgICB1 bmlxdWUoZGlzcGxheSkpCisJCSAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhl Y3V0ZSgpIG9yIGRpZTsKKwkKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAg ICAgICAgIGNyZWF0ZSBWSUVXIHNlc3Npb25zX3ZpZXcgYXMKKwkJICAgICAgICAgICAgICAgICAg IFNFTEVDVAorCQkgICAgICAgICAgICAgICAgICAgYWdlbnRfcGlkLCBzZXNzaW9uX2lkLCBkaXNw bGF5LCBzZXJ2ZXIsIHN0YXR1cywgaW5pdF90aW1lLCBjb29raWUsIGNsaWVudCwgZ3JfcG9ydCwK KwkJICAgICAgICAgICAgICAgICAgIHNvdW5kX3BvcnQsIGxhc3RfdGltZSwgdW5hbWUsIGZzX3Bv cnQsIHRla2ljdHJsX3BvcnQsIHRla2lkYXRhX3BvcnQgZnJvbSBzZXNzaW9ucworCQkgICAgICAg ICAgICAgICAgICAgd2hlcmUgY3JlYXRvcl9pZCA9IGN1cnJlbnRfdXNlcgorCQkgICAgICAgICAg ICAgICAgICAgIik7CisJCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7CisJCisJCSRzdGg9JGRiaC0+ cHJlcGFyZSgiCisJCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgVklFVyBzZXJ2ZXJzX3ZpZXcg YXMKKwkJICAgICAgICAgICAgICAgICAgIFNFTEVDVAorCQkgICAgICAgICAgICAgICAgICAgc2Vy dmVyLCBkaXNwbGF5LCBzdGF0dXMgZnJvbSBzZXNzaW9ucworCQkgICAgICAgICAgICAgICAgICAg Iik7CisJCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7CisJCisJCSRzdGg9JGRiaC0+cHJlcGFyZSgi CisJCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBSVUxFIHVwZGF0ZV9zZXNz X3ByaXYgQVMgT04gVVBEQVRFCisJCSAgICAgICAgICAgICAgICAgICBUTyBzZXNzaW9ucyB3aGVy ZSAoT0xELmNyZWF0b3JfaWQgPD4gY3VycmVudF91c2VyIG9yIE9MRC5jcmVhdG9yX2lkIDw+IE5F Vy5jcmVhdG9yX2lkKSBhbmQgY3VycmVudF91c2VyIDw+ICckeDJnb2FkbWluJworCQkgICAgICAg ICAgICAgICAgICAgRE8gSU5TVEVBRCBOT1RISU5HCisJCSAgICAgICAgICAgICAgICAgICAiKTsK KwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCIKKwkJ ICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIFJVTEUgaW5zZXJ0X3Nlc3NfcHJp diBBUyBPTiBJTlNFUlQKKwkJICAgICAgICAgICAgICAgICAgIFRPIHNlc3Npb25zIHdoZXJlIE5F Vy5jcmVhdG9yX2lkIDw+IGN1cnJlbnRfdXNlciBhbmQgY3VycmVudF91c2VyIDw+ICckeDJnb2Fk bWluJworCQkgICAgICAgICAgICAgICAgICAgRE8gSU5TVEVBRCBOT1RISU5HCisJCSAgICAgICAg ICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkKKwkJJHN0aD0kZGJo LT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIFJVTEUg ZGVsZXRlX3Nlc3NfcHJpdiBBUyBPTiBERUxFVEUKKwkJICAgICAgICAgICAgICAgICAgIFRPIHNl c3Npb25zIHdoZXJlIE9MRC5jcmVhdG9yX2lkIDw+IGN1cnJlbnRfdXNlciBhbmQgY3VycmVudF91 c2VyIDw+ICckeDJnb2FkbWluJworCQkgICAgICAgICAgICAgICAgICAgRE8gSU5TVEVBRCBOT1RI SU5HCisJCSAgICAgICAgICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsK KwkKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBv ciByZXBsYWNlIFJVTEUgdXBkYXRlX3Nlc3NfdmlldyBBUyBPTiBVUERBVEUKKwkJICAgICAgICAg ICAgICAgICAgIFRPIHNlc3Npb25zX3ZpZXcgRE8gSU5TVEVBRAorCQkgICAgICAgICAgICAgICAg ICAgdXBkYXRlIHNlc3Npb25zIHNldAorCQkgICAgICAgICAgICAgICAgICAgc3RhdHVzPU5FVy5z dGF0dXMsCisJCSAgICAgICAgICAgICAgICAgICBsYXN0X3RpbWU9TkVXLmxhc3RfdGltZSwKKwkJ ICAgICAgICAgICAgICAgICAgIGNvb2tpZT1ORVcuY29va2llLAorCQkgICAgICAgICAgICAgICAg ICAgYWdlbnRfcGlkPU5FVy5hZ2VudF9waWQsCisJCSAgICAgICAgICAgICAgICAgICBjbGllbnQ9 TkVXLmNsaWVudCwKKwkJICAgICAgICAgICAgICAgICAgIGdyX3BvcnQ9TkVXLmdyX3BvcnQsCisJ CSAgICAgICAgICAgICAgICAgICBzb3VuZF9wb3J0PU5FVy5zb3VuZF9wb3J0LAorCQkgICAgICAg ICAgICAgICAgICAgZnNfcG9ydD1ORVcuZnNfcG9ydCwKKwkJICAgICAgICAgICAgICAgICAgIHRl a2ljdHJsX3BvcnQ9TkVXLnRla2ljdHJsX3BvcnQsCisJCSAgICAgICAgICAgICAgICAgICB0ZWtp ZGF0YV9wb3J0PU5FVy50ZWtpZGF0YV9wb3J0CisJCSAgICAgICAgICAgICAgICAgICB3aGVyZSBz ZXNzaW9uX2lkPU9MRC5zZXNzaW9uX2lkIGFuZCBjcmVhdG9yX2lkPWN1cnJlbnRfdXNlcgorCQkg ICAgICAgICAgICAgICAgICAgIik7CisJCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7CisJCisJCSRz dGg9JGRiaC0+cHJlcGFyZSgiCisJCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgdGFibGUgbWVz c2FnZXMobWVzc19pZCB2YXJjaGFyKDIwKSBwcmltYXJ5IGtleSwgbWVzc2FnZSB0ZXh0KQorCQkg ICAgICAgICAgICAgICAgICAgIik7CisJCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7CisJCisJCSRz dGg9JGRiaC0+cHJlcGFyZSgiCisJCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgdGFibGUgdXNl cl9tZXNzYWdlcygKKwkJICAgICAgICAgICAgICAgICAgIG1lc3NfaWQgdGV4dCBub3QgbnVsbCwK KwkJICAgICAgICAgICAgICAgICAgIHVuYW1lIHRleHQgbm90IG51bGwpCisJCSAgICAgICAgICAg ICAgICAgICAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkKKwkJJHN0aD0kZGJoLT5w cmVwYXJlKCIKKwkJICAgICAgICAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSB1c2VkX3BvcnRzKAor CQkgICAgICAgICAgICAgICAgICAgc2VydmVyIHRleHQgbm90IG51bGwsCisJCSAgICAgICAgICAg ICAgICAgICBzZXNzaW9uX2lkIHRleHQgcmVmZXJlbmNlcyBzZXNzaW9ucyBvbiBkZWxldGUgY2Fz Y2FkZSwKKwkJICAgICAgICAgICAgICAgICAgIGNyZWF0b3JfaWQgdGV4dCBOT1QgTlVMTCBkZWZh dWx0IGN1cnJlbnRfdXNlciwKKwkJICAgICAgICAgICAgICAgICAgIHBvcnQgaW50ZWdlciBwcmlt YXJ5IGtleSkKKwkJICAgICAgICAgICAgICAgICAgICIpOworCQkkc3RoLT5leGVjdXRlKCkgb3Ig ZGllOworCQorCQkkc3RoPSRkYmgtPnByZXBhcmUoIgorCQkgICAgICAgICAgICAgICAgICAgY3Jl YXRlIFZJRVcgcG9ydHNfdmlldyBhcworCQkgICAgICAgICAgICAgICAgICAgU0VMRUNUCisJCSAg ICAgICAgICAgICAgICAgICBzZXJ2ZXIsIHBvcnQgZnJvbSB1c2VkX3BvcnRzCisJCSAgICAgICAg ICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkKKwkJJHN0aD0kZGJo LT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIFJVTEUg aW5zZXJ0X3BvcnRfcHJpdiBBUyBPTiBJTlNFUlQKKwkJICAgICAgICAgICAgICAgICAgIFRPIHVz ZWRfcG9ydHMgd2hlcmUgTkVXLmNyZWF0b3JfaWQgPD4gY3VycmVudF91c2VyIGFuZCBjdXJyZW50 X3VzZXIgPD4gJyR4MmdvYWRtaW4nCisJCSAgICAgICAgICAgICAgICAgICBETyBJTlNURUFEIE5P VEhJTkcKKwkJICAgICAgICAgICAgICAgICAgICIpOworCQkkc3RoLT5leGVjdXRlKCkgb3IgZGll OworCQorCQkkc3RoPSRkYmgtPnByZXBhcmUoIgorCQkgICAgICAgICAgICAgICAgICAgY3JlYXRl IG9yIHJlcGxhY2UgUlVMRSB1cGRhdGVfcG9ydF9wcml2IEFTIE9OIFVQREFURQorCQkgICAgICAg ICAgICAgICAgICAgVE8gdXNlZF9wb3J0cyB3aGVyZSAoTkVXLmNyZWF0b3JfaWQgPD4gY3VycmVu dF91c2VyIG9yIE9MRC5jcmVhdG9yX2lkIDw+IGN1cnJlbnRfdXNlcikgYW5kIGN1cnJlbnRfdXNl ciA8PiAnJHgyZ29hZG1pbicKKwkJICAgICAgICAgICAgICAgICAgIERPIElOU1RFQUQgTk9USElO RworCQkgICAgICAgICAgICAgICAgICAgIik7CisJCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7CisJ CisJCSRzdGg9JGRiaC0+cHJlcGFyZSgiCisJCSAgICAgICAgICAgICAgICAgICBjcmVhdGUgb3Ig cmVwbGFjZSBSVUxFIGRlbGV0ZV9wb3J0X3ByaXYgQVMgT04gREVMRVRFCisJCSAgICAgICAgICAg ICAgICAgICBUTyB1c2VkX3BvcnRzIHdoZXJlIE9MRC5jcmVhdG9yX2lkIDw+IGN1cnJlbnRfdXNl ciBhbmQgY3VycmVudF91c2VyIDw+ICckeDJnb2FkbWluJworCQkgICAgICAgICAgICAgICAgICAg RE8gSU5TVEVBRCBOT1RISU5HCisJCSAgICAgICAgICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhl Y3V0ZSgpIG9yIGRpZTsKKwkKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAg ICAgICAgIGNyZWF0ZSB0YWJsZSBtb3VudHMoCisJCSAgICAgICAgICAgICAgICAgICBzZXNzaW9u X2lkIHRleHQgcmVmZXJlbmNlcyBzZXNzaW9ucyBvbiBkZWxldGUgcmVzdHJpY3QsCisJCSAgICAg ICAgICAgICAgICAgICBwYXRoIHRleHQgbm90IG51bGwsCisJCSAgICAgICAgICAgICAgICAgICBj bGllbnQgaW5ldCBub3QgbnVsbCwKKwkJICAgICAgICAgICAgICAgICAgIGNyZWF0b3JfaWQgdGV4 dCBOT1QgTlVMTCBkZWZhdWx0IGN1cnJlbnRfdXNlciwKKwkJICAgICAgICAgICAgICAgICAgIHBy aW1hcnkga2V5KHBhdGgsY2xpZW50KSkKKwkJICAgICAgICAgICAgICAgICAgICIpOworCQkkc3Ro LT5leGVjdXRlKCkgb3IgZGllOworCQorCQkkc3RoPSRkYmgtPnByZXBhcmUoIgorCQkgICAgICAg ICAgICAgICAgICAgY3JlYXRlIFZJRVcgbW91bnRzX3ZpZXcgYXMKKwkJICAgICAgICAgICAgICAg ICAgIFNFTEVDVAorCQkgICAgICAgICAgICAgICAgICAgY2xpZW50LHBhdGgsIHNlc3Npb25faWQg ZnJvbSBtb3VudHMKKwkJICAgICAgICAgICAgICAgICAgIHdoZXJlIGNyZWF0b3JfaWQgPSBjdXJy ZW50X3VzZXIKKwkJICAgICAgICAgICAgICAgICAgICIpOworCQkkc3RoLT5leGVjdXRlKCkgb3Ig ZGllOworCQorCQkkc3RoPSRkYmgtPnByZXBhcmUoIgorCQkgICAgICAgICAgICAgICAgICAgY3Jl YXRlIG9yIHJlcGxhY2UgUlVMRSBkZWxldGVfbW91bnRzX3ZpZXcgQVMgT04gREVMRVRFCisJCSAg ICAgICAgICAgICAgICAgICBUTyBtb3VudHNfdmlldyBETyBJTlNURUFECisJCSAgICAgICAgICAg ICAgICAgICBkZWxldGUgZnJvbSBtb3VudHMKKwkJICAgICAgICAgICAgICAgICAgIHdoZXJlIHNl c3Npb25faWQ9T0xELnNlc3Npb25faWQgYW5kIGNyZWF0b3JfaWQ9Y3VycmVudF91c2VyIGFuZCBw YXRoPU9MRC5wYXRoCisJCSAgICAgICAgICAgICAgICAgICAiKTsKKwkJJHN0aC0+ZXhlY3V0ZSgp IG9yIGRpZTsKKwkKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCIKKwkJICAgICAgICAgICAgICAgICAg IGNyZWF0ZSBvciByZXBsYWNlIFJVTEUgaW5zZXJ0X21vdW50X3ByaXYgQVMgT04gSU5TRVJUCisJ CSAgICAgICAgICAgICAgICAgICBUTyBtb3VudHMgd2hlcmUgTkVXLmNyZWF0b3JfaWQgPD4gY3Vy cmVudF91c2VyIGFuZCBjdXJyZW50X3VzZXIgPD4gJyR4MmdvYWRtaW4nCisJCSAgICAgICAgICAg ICAgICAgICBETyBJTlNURUFEIE5PVEhJTkcKKwkJICAgICAgICAgICAgICAgICAgICIpOworCQkk c3RoLT5leGVjdXRlKCkgb3IgZGllOworCQorCQkkc3RoPSRkYmgtPnByZXBhcmUoIgorCQkgICAg ICAgICAgICAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgUlVMRSB1cGRhdGVfbW91bnRfcHJpdiBB UyBPTiBVUERBVEUKKwkJICAgICAgICAgICAgICAgICAgIFRPIG1vdW50cyB3aGVyZSAoTkVXLmNy ZWF0b3JfaWQgPD4gY3VycmVudF91c2VyIG9yIE9MRC5jcmVhdG9yX2lkIDw+IGN1cnJlbnRfdXNl cikgYW5kIGN1cnJlbnRfdXNlciA8PiAnJHgyZ29hZG1pbicKKwkJICAgICAgICAgICAgICAgICAg IERPIElOU1RFQUQgTk9USElORworCQkgICAgICAgICAgICAgICAgICAgIik7CisJCSRzdGgtPmV4 ZWN1dGUoKSBvciBkaWU7CisJCisJCSRzdGg9JGRiaC0+cHJlcGFyZSgiCisJCSAgICAgICAgICAg ICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBSVUxFIGRlbGV0ZV9tb3VudF9wcml2IEFTIE9OIERF TEVURQorCQkgICAgICAgICAgICAgICAgICAgVE8gbW91bnRzIHdoZXJlIE9MRC5jcmVhdG9yX2lk IDw+IGN1cnJlbnRfdXNlciBhbmQgY3VycmVudF91c2VyIDw+ICckeDJnb2FkbWluJworCQkgICAg ICAgICAgICAgICAgICAgRE8gSU5TVEVBRCBOT1RISU5HCisJCSAgICAgICAgICAgICAgICAgICAi KTsKKwkJJHN0aC0+ZXhlY3V0ZSgpIG9yIGRpZTsKKwkKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCJH UkFOVCBBTEwgUFJJVklMRUdFUyBPTiBzZXNzaW9ucywgbWVzc2FnZXMsIHVzZXJfbWVzc2FnZXMs IHVzZWRfcG9ydHMsIG1vdW50cyBUTyAkeDJnb2FkbWluIik7CisJCSRzdGgtPmV4ZWN1dGUoKSBv ciBkaWU7CisJCSRzdGgtPmZpbmlzaCgpOworCQl1bmRlZiAkZGJoOworCX0KKwkKKwlzdWIgY3Jl YXRlX2RhdGFiYXNlCisJeworCQlteSAkZGJoPURCSS0+Y29ubmVjdCgiZGJpOlBnOmRibmFtZT1w b3N0Z3Jlcztob3N0PSRob3N0O3BvcnQ9JHBvcnQ7c3NsbW9kZT0kc3NsbW9kZSIsICIkZGJhZG1p biIsICIkZGJhZG1pbnBhc3MiLHtBdXRvQ29tbWl0ID0+IDF9KSBvciBkaWUgJF87CisJCSNkcm9w IGRiIGlmIGV4aXN0cworCQlteSAkc3RoPSRkYmgtPnByZXBhcmUoImRyb3AgZGF0YWJhc2UgaWYg ZXhpc3RzICRkYiIpOworCQkkc3RoLT5leGVjdXRlKCk7CisJCSNkcm9wIHgyZ29hZG1pbgorCQkk c3RoPSRkYmgtPnByZXBhcmUoImRyb3AgdXNlciBpZiBleGlzdHMgJHgyZ29hZG1pbiIpOworCQkk c3RoLT5leGVjdXRlKCk7CisJCSNjcmVhdGUgZGIKKwkJJHN0aD0kZGJoLT5wcmVwYXJlKCJjcmVh dGUgZGF0YWJhc2UgJGRiIik7CisJCSRzdGgtPmV4ZWN1dGUoKSBvciBkaWU7CisJCSNjcmVhdGUg eDJnb2FkbWluCisJCSRzdGg9JGRiaC0+cHJlcGFyZSgiY3JlYXRlIFVTRVIgJHgyZ29hZG1pbiBX SVRIIEVOQ1JZUFRFRCBQQVNTV09SRCAnJHgyZ29hZG1pbnBhc3MnIik7CisJCSRzdGgtPmV4ZWN1 dGUoKSBvciBkaWU7CisJCSNzYXZlIHgyZ29hZG1pbiBwYXNzd29yZAorCQlvcGVuIChGTCwiPiAv ZXRjL3gyZ28veDJnb3NxbC9wYXNzd29yZHMveDJnb2FkbWluICIpIG9yIGRpZSAiQ2FuJ3Qgd3Jp dGUgcGFzc3dvcmQgZmlsZSAvZXRjL3gyZ28veDJnb3NxbC9wYXNzd29yZHMveDJnb2FkbWluIjsK KwkJcHJpbnQgRkwgJHgyZ29hZG1pbnBhc3M7CisJCWNsb3NlKEZMKTsKKwkJJHN0aC0+ZmluaXNo KCk7CisJCXVuZGVmICRkYmg7CisJfQogfQo= ------=_Part_33223557_1572844661.1484326519364--