Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9rgE-001pvp-1T for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 21:40:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9rgC-00CDxB-36 for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 21:40:21 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9rgB-00CDx3-35 for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 21:40:20 +0000 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9rg8-00000000v7O-1B3a for pgsql-hackers@postgresql.org; Mon, 06 Apr 2026 21:40:19 +0000 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-679f6ee3fb0so1570767eaf.2 for ; Mon, 06 Apr 2026 14:40:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775511614; cv=none; d=google.com; s=arc-20240605; b=d1BgDsSJ85gwvB+aEQNQwsHt5dgqjMViHdu+QN4PFpIlzp4iVLTeEy1xWhLvqgosaD Lv6aYjPGn3/nbyMCze1FoaiQaQuCr2fdDoG7SC3QzRz6LDB6zJn9TQdP7m8MIXgkuFjT d2hTyxRBcVg9YY6r4DWbPw9gzmXI+jXe0J/RzRU9TmV5WsMorVhhtFhdWucg0Cv6yjEA ElKVz6oiSkWVeHyQkliRO9uYZvuBxV5IxkTDuC0mcKNe3cA1LIjxmrKjgzdWznjsIxrL uzs0diRmLC7PsNiJGUZWZ8xm8PG9Tz00xO4uBskZmbruWQ+/yQqglIsye8VAIqX1r97s 050Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=cFOTK+Qi7BnNQt4TmnIpbyfzA+2ajy8m3SnWd3csuVg=; fh=RfrkJab44jNT7RraF/sJO97r9/nkUL0AAgzmC7PBS2w=; b=PZU3sjwzgkTxXc3ASBf0pB7EOjJxLwVt7deMsOHaqtqN9phkNIj5tVLkdTV2RtXgKu 7VQnhNp7PR/qvrEDvgHkFOUobSQ2r7lj/snx9jgE97TIIwoe10M0duCHRiTgdlic0ugN NpwMGJBIXJzG8kLfzUA4qplEyh4amYlT+fRaSYSEeAli+aKLL+VoxLB+d7IwfO1aX6Tf 4KN2aeTgdZcV3Y+cGobpud+xcm6PX/yDW9A5OrTB+GZ/c4Y+HwzHF+MNb1TjHZtbRmK/ UfagYJy3pm9RXGBixn2Aq4o1I6/V2aOqQRt4md52BacwU21xcyI/4pgvPT8psMpOaR+w qjqA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775511614; x=1776116414; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=cFOTK+Qi7BnNQt4TmnIpbyfzA+2ajy8m3SnWd3csuVg=; b=FvEvl1esSyMH3uS5Em1h7/6YoOmh4qeOL4uOvz/V7fTC1tYBCkOnK7oFPNTWc0aI/q g1THEH87zNfV/XHhAvkOqm2Zn1hWus1jy7jillsK/xTmic4Kh9a0kjFxTguGoYPSbq+z lfCVCCqaojnx/z7Ks7oP/P35l9nl4cUroBYc4AQwu7BQtZBQ308TJafFjRyiiNIgL3TO rvA6PdZ9ax/0DSsOFdfdb/AyPD2eWtsA9vWSxAr9vy0bzdVN2Tsoy9DkH+mX56I+tHo5 MpXClQ5qIXk863bHKMVVDnOi4AI7NlyByHlZm3o0Aed0cV5C9PKglFKaruEcVSxn2AK4 hpuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775511614; x=1776116414; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cFOTK+Qi7BnNQt4TmnIpbyfzA+2ajy8m3SnWd3csuVg=; b=Yk+VDizI38lRMjf5nHa7/fzxTev6ujYGO9HpclZzc8adHN8JGyKGayjqYDkFXdjTWI HBQOx7Hi9jPU+jrceb9jp37FKLsSAISzU8GKvPEgoc/VWVmmGLfIdwv7WMZ1Wz6Um5UE SMx73lFTpsMAaGCM5GnA//t2lMBZKX/rOH+n/gI/DHn2Bhlr1bWyLxygNa1Iih4Gyxyy S95cfP5viM+/SbOOgW9ZPO62RhMOgLYTx7tE6y2g7AioyujClbk17uR+ZfivgCR8WLMj 7Qx29jDJCAMhqOq9Bo7j46SzVY7DHomaWj8pP/LcnfrTHoGWf8mMB9SIcl0NRwQ3Ablj xXnw== X-Gm-Message-State: AOJu0Yz20gdvjDlH+CD50fPrVM1dwL9KCTmKKKecAVlvtj4iLrDPWk37 hBpy9Z70u9lwZIHj3E3ShzWNeBSaNsTwwrYE144mO8ch5FXHCPYCzK93n1rIB4FMwhTj60oMP0D 5Owcn198mnOYmvsLbwPTaw0d5GreSpIu9pgrw X-Gm-Gg: AeBDietO1up9ZiLbFIngw730PvTYbrtdGwdlFHLBZNafjaw++kOGDKFSV72py4z8yMN LG2xouFg7zz9j8c+VCOh38d2nS6ust8Z094ByS0yRp+diNite0HONwsZFdttYCLKYqQMnnOppvD 4kpEsxNbUEJb3z6t0MDH5pn+XpwphDY6kUBurnSu1+0ohXJW6zOskp4e6INn+1mT7hBiNGHHnxo eZoGLSa+TqJczmJ/Py2Tako9v2Po2mnQKQZtuowgFto8hcsivCWLRWO6qyqGbzd0v5qC5E/kWWX /qxQG3twqWgA0yLOW7651JbA8+b9L+AyAF1oxugVY7SDT8CqyW4lgj7kd7qSyKGvV17H X-Received: by 2002:a05:6820:1c83:b0:67e:3eaa:80ba with SMTP id 006d021491bc7-6821ef80667mr7329317eaf.15.1775511614465; Mon, 06 Apr 2026 14:40:14 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Andrew Jackson Date: Mon, 6 Apr 2026 16:39:38 -0500 X-Gm-Features: AQROBzAQTqR0XH0Pf79SfGcoaCjHyEFhgPH2mr8fyuKVfJL2K3pvXqniwhzPT4k Message-ID: Subject: Re: Add http connection service file functionality To: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000137a84064ed18305" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000137a84064ed18305 Content-Type: text/plain; charset="UTF-8" Hello, I went ahead and repurposed this patch to implement connection parameter lookup similar to how it is currently done for LDAP. This means this will only look up the info for a single service and is only accessible via the pg_service.conf file. I also tested builds for with and without oauth configured and it builds so I think the CI issues should be fixed now. I also expanded unit tests significantly. Also I forgot to mention in my last emails that the implementation for the libcurl logic was mostly borrowed from the libcurl docs[0]. Thanks, Andrew Jackson [0]: https://curl.se/libcurl/c/fopen.html --000000000000137a84064ed18305 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-http-connection-paramater-lookup-functionality.patch" Content-Disposition: attachment; filename="0001-Add-http-connection-paramater-lookup-functionality.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnpmdc10 RnJvbSA1ZTk1OGNlMWFiYjU4N2ViMDc5NGZjZTc1MzMyNTllNjY4NjJkZmM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21tYW5kZXJLZXluZXMgPGFuZHJld2phY2tzb245NDdAZ21h aWwuY29tYT4KRGF0ZTogU3VuLCAyMyBNYXIgMjAyNSAyMjowMzo0NSAtMDUwMApTdWJqZWN0OiBb UEFUQ0hdIEFkZCBodHRwIGNvbm5lY3Rpb24gcGFyYW1hdGVyIGxvb2t1cCBmdW5jdGlvbmFsaXR5 CgpBZGRzIDMgZXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHRoZSBsaWJwcS1vYXV0aCBzaGFyZWQgb2Jq ZWN0CmZpbGUgdGhhdCBhcmUgdXNlZCBpbiB0aGUgaHR0cFNlcnZpY2VMb29rdXAgZnVuY3Rpb24g aW4KZmUtY29ubmVjdC5jIHRvIHJlYWQgY29ubmVjdGlvbiBwYXJhbWV0ZXJzIGZyb20gYW4gSFRU UAp3ZWIgc2VydmVyLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHByb3ZpZGUgdGhlIGFiaWxpdHkgZm9y Cm1hbmFnZWQgc2VydmljZSBvcGVyYXRvcnMgdG8gZGVmaW5lIGEgc2luZ2xlIHNvdXJjZSBvZiB0 cnV0aCBmb3IKY29ubmVjdGlvbiBkZXRhaWxzLiBUaGUgaW1wbGVtZW50YXRpb24gcmVmbGVjdHMg dGhlCmN1cnJlbnRseSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBvZiBsaWJwcSBsZGFwIGNvbm5l Y3Rpb24KcGFyYW1ldGVyIGxvb2t1cC4gVGhpcyBlbmFibGVzIGEgZm9ybSBvZiBidWlsdC1pbiBs aWJwcQpzZXJ2aWNlIGRpc2NvdmVyeSBmb3JtYXQuIFRoaXMgd291bGQgYWxsb3cgYWRtaW5pc3Ry YXRvcnMgdG8KYWRkLCByZW1vdmUsIGFuZCBjaGFuZ2UgaG9zdHMgaW4gbXVsdGkgaG9zdCBjb25u ZWN0aW9uCnN0cmluZ3Mgd2l0aG91dCBjb29yZGluYXRpbmcgd2l0aCBldmVyeSBlbmQgdXNlciB3 aG8gbWF5CmhhcmRjb2RlIHRoZWlyIGNvbm5lY3Rpb24gc3RyaW5ncyBpbiBhIGxvdCBvZiBkaWZm ZXJlbnQgcGxhY2VzLgoKV2hpbGUgdGhlIGxpYnBxLWxkYXAgZnVuY3Rpb25hbGl0eSBhY2NvbXBs aXNoZWQgdGhlIGFib3ZlIGdvYWwKc2V0dGluZyB1cCBMREFQIGluZnJhc3RydWN0dXJlIGlzIGEg bG90IGxlc3MgYWNjZXNzaWJsZSB0bwptYW55IGFkbWluaXN0cmF0b3JzIHRoYW4gc2V0dGluZyB1 cCBhbiBIVFRQIHdlYiBzZXJ2ZXIuIEluIG1hbnkKY2FzZXMgaXQgd291bGQgYmUgc3VmZmljaWVu dCB0byAianVzdCB0aHJvdyBzb21lIGZpbGVzIG9uIGFuIHMzCmJ1Y2tldCIuCgpUaGUgY3VycmVu dCBzdGF0ZSBvZiB0aGlzIHBhdGNoIGlzIHJvdWdoIGFuZCBJIGFtIGhhcHB5IHRvIGFjY2VwdAph bnkgZmVlZGJhY2suCgpTb21lIGlzc3VlczoKMS4gQnVuZGxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5 IGluIHdpdGggbGlicHEtb2F1dGguc28gc2VlbXMgb2RkLgogICBJdCB3b3VsZCBwcm9iYWJseSBt YWtlIG1vcmUgc2Vuc2UgdG8gcmVuYW1lIGxpYnBxLW9hdXRoLnNvIHRvCiAgIGxpYnBxLW9hdXRo LnNvIHRvIGxpYnBxLWxpYmN1cmwuc28gb3IgY3JlYXRlIGFuIGVudGlyZWx5IG5ldwogICAuc28g ZmlsZSBmb3IgdGhpcyBsb2dpYy4KMi4gVGVzdHMgbWF5IG5vdCBzaXQgaW4gdGhlIGNvcnJlY3Qg cGxhY2UuCjMuIFRoZSBjb2RlIGltcGxlbWVudGVkIGluIGxpYnBxLW9hdXRoLnNvIGlzIGltcGxl bWVuZXRlZCBpbiBhbgogICBmaWxlIG9wZW4vcmVhZC9jbG9zZSBsaWtlIGludGVyZmFjZSBib3Jy b3dlZCBmcm9tIGxpYmN1cmwncwogICBkb2NzIFs0XS4gVGhpcyBtYXkgbm90IGJlIHRoZSBiZXN0 IHByb2R1Y3Rpb24gcmVhZHkgYXBwcm9hY2gKICAgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24gYW5k IGhhcHB5IHRvIGdldCB0aGlzIHVwZGF0ZWRkIGlmCiAgIG5lZWQgYmUuCgpEZXNwaXRlIHRoZXNl IHNob3J0Y29taW5ncyB0aGlzIGFwcHJvYWNoIG1heSBiZSBhIG1vcmUgbmF0dXJhbAphbHRlcm5h dGl2ZSB0byBwcmV2aW91cyBhdHRlbXB0cyBbMiwgM10gYXQgYWxsb3dpbmcgYWRtaW5pc3RyYXRv cnMKdG8gbWl4IHJlYWQtb25seS9yZWFkLXdyaXRlIG5vZGVzIGludG8gb3ZlcmxvYWRlZCBBIHJl Y29yZHMuCgpbMF06IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9saWJw cS1sZGFwLmh0bWwKWzFdOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2Zs YXQvQ0FLSzVCa0ZPRkdmS0pOYlR1WUJ2RTBQZnBIbVc4aVpFbWROb2dhQ1lxakFPaHROZ0RnQG1h aWwuZ21haWwuY29tClsyXTogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9m bGF0L0NBS0s1QmtFU1NjNjlzcDJUaVRXSHZ2T0hDVWV5MHJEV1hTclI5cGlueVJxeWZhbVVZZ0Bt YWlsLmdtYWlsLmNvbQpbM106IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQv QU05UFIwOU1CNDkwMDhCMDJDREYwMDMwNTRENUQ0RTAwOTc3REFAQU05UFIwOU1CNDkwMC5ldXJw cmQwOS5wcm9kLm91dGxvb2suY29tCls0XTogaHR0cHM6Ly9jdXJsLnNlL2xpYmN1cmwvYy9mb3Bl bi5odG1sCi0tLQogZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwgICAgICAgICAgICAgICAgICAgICAg IHwgIDQwICsrKwogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgICAgICAg IHwgICAxICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0ICAgICAgICB8 ICAgNyArLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvaHR0cC1zZXJ2aWNlLmMgICAgIHwg MjgwICsrKysrKysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvaHR0cC1z ZXJ2aWNlLmggICAgIHwgIDUyICsrKysKIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29u LmJ1aWxkICAgICAgICB8ICAgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMg ICAgICAgICAgICAgfCAyNjkgKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL2h0dHBf cGdfc2VydmljZS9NYWtlZmlsZSAgICAgfCAgMzcgKysrCiBzcmMvdGVzdC9tb2R1bGVzL2h0dHBf cGdfc2VydmljZS9tZXNvbi5idWlsZCAgfCAgMTcgKysKIC4uLi90LzAwMV9odHRwX3NlcnZpY2Vf ZmlsZS5wbCAgICAgICAgICAgICAgICB8IDIwMCArKysrKysrKysrKysrCiAuLi4vaHR0cF9wZ19z ZXJ2aWNlL3QvUGdIdHRwU2VydmljZS9TZXJ2ZXIucG0gfCAxNDEgKysrKysrKysrCiAuLi4vaHR0 cF9wZ19zZXJ2aWNlL3QvaHR0cF9zZXJ2aWNlX3NlcnZlci5weSAgfCAgNzMgKysrKysKIDEzIGZp bGVzIGNoYW5nZWQsIDExMTcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9odHRwLXNlcnZpY2UuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2h0dHAtc2VydmljZS5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvTWFr ZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2Vydmlj ZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaHR0cF9w Z19zZXJ2aWNlL3QvMDAxX2h0dHBfc2VydmljZV9maWxlLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvdC9QZ0h0dHBTZXJ2aWNlL1NlcnZlci5w bQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL3Qv aHR0cF9zZXJ2aWNlX3NlcnZlci5weQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9saWJwcS5z Z21sIGIvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwKaW5kZXggNmRiODIzODA4ZmMuLmYxYTEwMGMw YjY1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvbGlicHEuc2dtbApAQCAtOTcyMSw2ICs5NzIxLDQ2IEBAIGxkYXA6Ly9sZGFwLmFjbWUuY29t L2NuPWRic2VydmVyLGNuPWhvc3RzP3BnY29ubmVjdGluZm8/YmFzZT8ob2JqZWN0Y2xhc3M9KikK IAogIDwvc2VjdDE+CiAKKyA8c2VjdDEgaWQ9ImxpYnBxLWh0dHAiPgorICA8dGl0bGU+SFRUUCBM b29rdXAgb2YgQ29ubmVjdGlvbiBQYXJhbWV0ZXJzPC90aXRsZT4KKworICA8aW5kZXh0ZXJtIHpv bmU9ImxpYnBxLWh0dHAiPgorICAgPHByaW1hcnk+SFRUUGNvbm5lY3Rpb24gcGFyYW1ldGVyIGxv b2t1cDwvcHJpbWFyeT4KKyAgPC9pbmRleHRlcm0+CisKKyAgPHBhcmE+CisgIElmIDxhcHBsaWNh dGlvbj5saWJwcTwvYXBwbGljYXRpb24+IGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggbGliY3VybCBz dXBwb3J0IChvcHRpb24KKyAgPGxpdGVyYWw+PG9wdGlvbj4tLXdpdGgtbGliY3VybDwvb3B0aW9u PjwvbGl0ZXJhbD4pIGZvciA8Y29tbWFuZD5jb25maWd1cmU8L2NvbW1hbmQ+CisgIGl0IGlzIHBv c3NpYmxlIHRvIHJldHJpZXZlIGNvbm5lY3Rpb24gb3B0aW9ucyBsaWtlIDxsaXRlcmFsPmhvc3Q8 L2xpdGVyYWw+CisgICBvciA8bGl0ZXJhbD5kYm5hbWU8L2xpdGVyYWw+IHZpYSBIVFRQIGZyb20g YSBjZW50cmFsIHNlcnZlci4KKyAgIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCBpZiB0aGUgY29ubmVj dGlvbiBwYXJhbWV0ZXJzIGZvciBhIGRhdGFiYXNlIGNoYW5nZSwKKyAgIHRoZSBjb25uZWN0aW9u IGluZm9ybWF0aW9uIGRvZXNuJ3QgaGF2ZSB0byBiZSB1cGRhdGVkIG9uIGFsbCBjbGllbnQgbWFj aGluZXMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIExEQVAgY29ubmVjdGlvbiBwYXJhbWV0 ZXIgbG9va3VwIHVzZXMgdGhlIGNvbm5lY3Rpb24gc2VydmljZSBmaWxlCisgICA8ZmlsZW5hbWU+ cGdfc2VydmljZS5jb25mPC9maWxlbmFtZT4gKHNlZSA8eHJlZgorICAgbGlua2VuZD0ibGlicHEt cGdzZXJ2aWNlIi8+KS4gIEEgbGluZSBpbiBhCisgICA8ZmlsZW5hbWU+cGdfc2VydmljZS5jb25m PC9maWxlbmFtZT4gc3RhbnphIHRoYXQgc3RhcnRzIHdpdGgKKyAgIDxsaXRlcmFsPmh0dHA6Ly88 L2xpdGVyYWw+IHdpbGwgYmUgcmVjb2duaXplZCBhcyBhbiBIVFRQIFVSTCBhbmQgYW4KKyAgIEhU VFAgcXVlcnkgd2lsbCBiZSBwZXJmb3JtZWQuIFRoZSByZXN1bHQgbXVzdCBiZSBhIGxpc3Qgb2YK KyAgIDxsaXRlcmFsPmtleXdvcmQgPSB2YWx1ZTwvbGl0ZXJhbD4gcGFpcnMgd2hpY2ggd2lsbCBi ZSB1c2VkIHRvIHNldAorICAgY29ubmVjdGlvbiBvcHRpb25zLiBUaGUgVVJMIG11c3QgYmUgb2Yg dGhlIGZvcm0KKzxzeW5vcHNpcz4KK2h0dHA6Ly9bPHJlcGxhY2VhYmxlPmhvc3RuYW1lPC9yZXBs YWNlYWJsZT5bOjxyZXBsYWNlYWJsZT5wb3J0PC9yZXBsYWNlYWJsZT5dXS88cmVwbGFjZWFibGU+ cGF0aDwvcmVwbGFjZWFibGU+Cis8L3N5bm9wc2lzPgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBQcm9jZXNzaW5nIG9mIDxmaWxlbmFtZT5wZ19zZXJ2aWNlLmNvbmY8L2ZpbGVuYW1lPiBpcyB0 ZXJtaW5hdGVkIGFmdGVyCisgICBhIHN1Y2Nlc3NmdWwgSFRUUCBsb29rdXAsIGJ1dCBpcyBjb250 aW51ZWQgaWYgdGhlIEhUVFAgc2VydmVyIGNhbm5vdAorICAgYmUgY29udGFjdGVkLiAgVGhpcyBp cyB0byBwcm92aWRlIGEgZmFsbGJhY2sgd2l0aCBmdXJ0aGVyIEhUVFAgVVJMCisgICBsaW5lcyB0 aGF0IHBvaW50IHRvIGRpZmZlcmVudCBIVFRQIHNlcnZlcnMsIGNsYXNzaWNhbCA8bGl0ZXJhbD5r ZXl3b3JkCisgICA9IHZhbHVlPC9saXRlcmFsPiBwYWlycywgb3IgZGVmYXVsdCBjb25uZWN0aW9u IG9wdGlvbnMuICBJZiB5b3Ugd291bGQKKyAgIHJhdGhlciBnZXQgYW4gZXJyb3IgbWVzc2FnZSBp biB0aGlzIGNhc2UsIGFkZCBhIHN5bnRhY3RpY2FsbHkgaW5jb3JyZWN0CisgICBsaW5lIGFmdGVy IHRoZSBMREFQIFVSTC4KKyAgPC9wYXJhPgorIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImxpYnBx LXNzbCI+CiAgIDx0aXRsZT5TU0wgU3VwcG9ydDwvdGl0bGU+CmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRo L01ha2VmaWxlCmluZGV4IDExZTFhM2NmNTI4Li42ZDRhMWYyNDBjYyAxMDA2NDQKLS0tIGEvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKKysrIGIvc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvTWFrZWZpbGUKQEAgLTQyLDYgKzQyLDcgQEAgT0JKU19TVEFUSUMgPSBvYXV0aC1j dXJsLm8KIE9CSlNfU0hMSUIgPSBcCiAJb2F1dGgtY3VybF9zaGxpYi5vIFwKIAlvYXV0aC11dGls cy5vIFwKKwlodHRwLXNlcnZpY2UubyBcCiAKIG9hdXRoLXV0aWxzLm86IG92ZXJyaWRlIENQUEZM QUdTICs9ICQoQ1BQRkxBR1NfU0hMSUIpCiAKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL2V4cG9ydHMudHh0IGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0 cy50eHQKaW5kZXggN2JjMTJiODYwZDcuLjU1M2ViMzkxNDU4IDEwMDY0NAotLS0gYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS1vYXV0aC9leHBvcnRzLnR4dAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9leHBvcnRzLnR4dApAQCAtMSwzICsxLDYgQEAKICMgc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvZXhwb3J0cy50eHQKLWxpYnBxX29hdXRoX2luaXQgICAgICAgICAgMQotcGdfc3Rh cnRfb2F1dGhiZWFyZXIgICAgICAyCitsaWJwcV9vYXV0aF9pbml0ICAgICAgICAgICAgIDEKK3Bn X3N0YXJ0X29hdXRoYmVhcmVyICAgICAgICAgMgordXJsX2ZvcGVuICAgICAgICAgICAgICAgICAg ICAzCit1cmxfZmdldHMgICAgICAgICAgICAgICAgICAgIDQKK3VybF9mY2xvc2UgICAgICAgICAg ICAgICAgICAgNQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvaHR0cC1z ZXJ2aWNlLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9odHRwLXNlcnZpY2UuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2ZhZjc3OGQwNzUKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9odHRwLXNlcnZpY2UuYwpAQCAt MCwwICsxLDI4MCBAQAorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaW5jbHVkZSAi cG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRlICJwcWV4cGJ1ZmZlci5oIgorI2luY2x1ZGUgPGVycm5v Lmg+CisjaW5jbHVkZSAib2F1dGgtdXRpbHMuaCIKKyNpbmNsdWRlICJodHRwLXNlcnZpY2UuaCIK KworLyogd2UgdXNlIGEgZ2xvYmFsIG9uZSBmb3IgY29udmVuaWVuY2UgKi8KK3N0YXRpYyBDVVJM TSAqbXVsdGlfaGFuZGxlOworCisvKiBjdXJsIGNhbGxzIHRoaXMgcm91dGluZSB0byBnZXQgbW9y ZSBkYXRhICovCitzdGF0aWMgc2l6ZV90IHdyaXRlX2NhbGxiYWNrKGNoYXIgKmJ1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKnVzZXJwKQoreworICBjaGFyICpuZXdidWZmOworICBzaXplX3QgcmVtYnVmZjsKKwor ICBVUkxfRklMRSAqdXJsID0gKFVSTF9GSUxFICopdXNlcnA7CisgIHNpemUgKj0gbml0ZW1zOwor CisgIHJlbWJ1ZmYgPSB1cmwtPmJ1ZmZlcl9sZW4gLSB1cmwtPmJ1ZmZlcl9wb3M7IC8qIHJlbWFp bmluZyBzcGFjZSBpbiBidWZmZXIgKi8KKworICBpZihzaXplID4gcmVtYnVmZikgeworICAgIC8q IG5vdCBlbm91Z2ggc3BhY2UgaW4gYnVmZmVyICovCisgICAgbmV3YnVmZiA9IHJlYWxsb2ModXJs LT5idWZmZXIsIHVybC0+YnVmZmVyX2xlbiArIChzaXplIC0gcmVtYnVmZikpOworICAgIGlmKCFu ZXdidWZmKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbGxiYWNrIGJ1ZmZlciBncm93IGZh aWxlZFxuIik7CisgICAgICBzaXplID0gcmVtYnVmZjsKKyAgICB9CisgICAgZWxzZSB7CisgICAg ICAvKiByZWFsbG9jIHN1Y2NlZWRlZCBpbmNyZWFzZSBidWZmZXIgc2l6ZSovCisgICAgICB1cmwt PmJ1ZmZlcl9sZW4gKz0gc2l6ZSAtIHJlbWJ1ZmY7CisgICAgICB1cmwtPmJ1ZmZlciA9IG5ld2J1 ZmY7CisgICAgfQorICB9CisKKyAgbWVtY3B5KCZ1cmwtPmJ1ZmZlclt1cmwtPmJ1ZmZlcl9wb3Nd LCBidWZmZXIsIHNpemUpOworICB1cmwtPmJ1ZmZlcl9wb3MgKz0gc2l6ZTsKKworICByZXR1cm4g c2l6ZTsKK30KKworLyogdXNlIHRvIGF0dGVtcHQgdG8gZmlsbCB0aGUgcmVhZCBidWZmZXIgdXAg dG8gcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcyAqLworc3RhdGljIGludCBmaWxsX2J1ZmZlcihV UkxfRklMRSAqZmlsZSwgc2l6ZV90IHdhbnQpCit7CisgIGZkX3NldCBmZHJlYWQ7CisgIGZkX3Nl dCBmZHdyaXRlOworICBmZF9zZXQgZmRleGNlcDsKKyAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsK KyAgaW50IHJjOworICBDVVJMTWNvZGUgbWM7IC8qIGN1cmxfbXVsdGlfZmRzZXQoKSByZXR1cm4g Y29kZSAqLworCisgIC8qIG9ubHkgYXR0ZW1wdCB0byBmaWxsIGJ1ZmZlciBpZiB0cmFuc2FjdGlv bnMgc3RpbGwgcnVubmluZyBhbmQgYnVmZmVyCisgICAqIGRvZXMgbm90IGV4Y2VlZCByZXF1aXJl ZCBzaXplIGFscmVhZHkKKyAgICovCisgIGlmKCghZmlsZS0+c3RpbGxfcnVubmluZykgfHwgKGZp bGUtPmJ1ZmZlcl9wb3MgPiB3YW50KSkKKyAgICByZXR1cm4gMDsKKworICAvKiBhdHRlbXB0IHRv IGZpbGwgYnVmZmVyICovCisgIGRvIHsKKyAgICBpbnQgbWF4ZmQgPSAtMTsKKyAgICBsb25nIGN1 cmxfdGltZW8gPSAtMTsKKworICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAgRkRfWkVSTygmZmR3 cml0ZSk7CisgICAgRkRfWkVSTygmZmRleGNlcCk7CisKKyAgICAvKiBzZXQgYSBzdWl0YWJsZSB0 aW1lb3V0IHRvIGZhaWwgb24gKi8KKyAgICB0aW1lb3V0LnR2X3NlYyA9IDYwOyAvKiAxIG1pbnV0 ZSAqLworICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgICBjdXJsX211bHRpX3RpbWVvdXQo bXVsdGlfaGFuZGxlLCAmY3VybF90aW1lbyk7CisgICAgaWYoY3VybF90aW1lbyA+PSAwKSB7Cisg ICAgICB0aW1lb3V0LnR2X3NlYyA9IGN1cmxfdGltZW8gLyAxMDAwOworICAgICAgaWYodGltZW91 dC50dl9zZWMgPiAxKQorICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgICAgICBlbHNlCisg ICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IChjdXJsX3RpbWVvICUgMTAwMCkgKiAxMDAwOworICAg IH0KKworICAgIC8qIGdldCBmaWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlIHRyYW5zZmVycyAqLwor ICAgIG1jID0gY3VybF9tdWx0aV9mZHNldChtdWx0aV9oYW5kbGUsICZmZHJlYWQsICZmZHdyaXRl LCAmZmRleGNlcCwgJm1heGZkKTsKKworICAgIGlmKG1jICE9IENVUkxNX09LKSB7CisgICAgICBm cHJpbnRmKHN0ZGVyciwgImN1cmxfbXVsdGlfZmRzZXQoKSBmYWlsZWQsIGNvZGUgJWQuXG4iLCBt Yyk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBPbiBzdWNjZXNzIHRoZSB2YWx1ZSBv ZiBtYXhmZCBpcyBndWFyYW50ZWVkIHRvIGJlID49IC0xLiBXZSBjYWxsCisgICAgICAgc2VsZWN0 KG1heGZkICsgMSwgLi4uKTsgc3BlY2lhbGx5IGluIGNhc2Ugb2YgKG1heGZkID09IC0xKSB0aGVy ZSBhcmUKKyAgICAgICBubyBmZHMgcmVhZHkgeWV0IHNvIHdlIGNhbGwgc2VsZWN0KDAsIC4uLikg LS1vciBTbGVlcCgpIG9uIFdpbmRvd3MtLQorICAgICAgIHRvIHNsZWVwIDEwMG1zLCB3aGljaCBp cyB0aGUgbWluaW11bSBzdWdnZXN0ZWQgdmFsdWUgaW4gdGhlCisgICAgICAgY3VybF9tdWx0aV9m ZHNldCgpIGRvYy4gKi8KKworICAgIGlmKG1heGZkID09IC0xKSB7CisjaWZkZWYgX1dJTjMyCisg ICAgICBTbGVlcCgxMDApOworICAgICAgcmMgPSAwOworI2Vsc2UKKyAgICAgIC8qIFBvcnRhYmxl IHNsZWVwIGZvciBwbGF0Zm9ybXMgb3RoZXIgdGhhbiBXaW5kb3dzLiAqLworICAgICAgc3RydWN0 IHRpbWV2YWwgd2FpdCA9IHsgMCwgMTAwICogMTAwMCB9OyAvKiAxMDBtcyAqLworICAgICAgcmMg PSBzZWxlY3QoMCwgTlVMTCwgTlVMTCwgTlVMTCwgJndhaXQpOworI2VuZGlmCisgICAgfQorICAg IGVsc2UgeworICAgICAgLyogTm90ZSB0aGF0IG9uIHNvbWUgcGxhdGZvcm1zICd0aW1lb3V0JyBt YXkgYmUgbW9kaWZpZWQgYnkgc2VsZWN0KCkuCisgICAgICAgICBJZiB5b3UgbmVlZCBhY2Nlc3Mg dG8gdGhlIG9yaWdpbmFsIHZhbHVlIHNhdmUgYSBjb3B5IGJlZm9yZWhhbmQuICovCisgICAgICBy YyA9IHNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVv dXQpOworICAgIH0KKworICAgIHN3aXRjaChyYykgeworICAgIGNhc2UgLTE6CisgICAgICAvKiBz ZWxlY3QgZXJyb3IgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwOgorICAgIGRlZmF1bHQ6 CisgICAgICAvKiB0aW1lb3V0IG9yIHJlYWRhYmxlL3dyaXRhYmxlIHNvY2tldHMgKi8KKyAgICAg IGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aV9oYW5kbGUsICZmaWxlLT5zdGlsbF9ydW5uaW5nKTsK KyAgICAgIGJyZWFrOworICAgIH0KKyAgfSB3aGlsZShmaWxlLT5zdGlsbF9ydW5uaW5nICYmIChm aWxlLT5idWZmZXJfcG9zIDwgd2FudCkpOworICByZXR1cm4gMTsKK30KKworLyogdXNlIHRvIHJl bW92ZSB3YW50IGJ5dGVzIGZyb20gdGhlIGZyb250IG9mIGEgZmlsZXMgYnVmZmVyICovCitzdGF0 aWMgaW50IHVzZV9idWZmZXIoVVJMX0ZJTEUgKmZpbGUsIHNpemVfdCB3YW50KQoreworICAvKiBz b3J0IG91dCBidWZmZXIgKi8KKyAgaWYoZmlsZS0+YnVmZmVyX3BvcyA8PSB3YW50KSB7CisgICAg LyogZGl0Y2ggYnVmZmVyIC0gd3JpdGUgd2lsbCByZWNyZWF0ZSAqLworICAgIGZyZWUoZmlsZS0+ YnVmZmVyKTsKKyAgICBmaWxlLT5idWZmZXIgPSBOVUxMOworICAgIGZpbGUtPmJ1ZmZlcl9wb3Mg PSAwOworICAgIGZpbGUtPmJ1ZmZlcl9sZW4gPSAwOworICB9CisgIGVsc2UgeworICAgIC8qIG1v dmUgcmVzdCBkb3duIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBsYXRlciAqLworICAgIG1lbW1vdmUo ZmlsZS0+YnVmZmVyLAorICAgICAgICAgICAgJmZpbGUtPmJ1ZmZlclt3YW50XSwKKyAgICAgICAg ICAgIChmaWxlLT5idWZmZXJfcG9zIC0gd2FudCkpOworCisgICAgZmlsZS0+YnVmZmVyX3BvcyAt PSB3YW50OworICB9CisgIHJldHVybiAwOworfQorCitVUkxfRklMRSAqdXJsX2ZvcGVuKGNvbnN0 IGNoYXIgKnVybCwgY29uc3QgY2hhciAqb3BlcmF0aW9uKQoreworICAvKiB0aGlzIGNvZGUgY291 bGQgY2hlY2sgZm9yIFVSTHMgb3IgdHlwZXMgaW4gdGhlICd1cmwnIGFuZAorICAgICBiYXNpY2Fs bHkgdXNlIHRoZSByZWFsIGZvcGVuKCkgZm9yIHN0YW5kYXJkIGZpbGVzICovCisKKyAgVVJMX0ZJ TEUgKmZpbGU7CisgICh2b2lkKW9wZXJhdGlvbjsKKworICBmaWxlID0gY2FsbG9jKDEsIHNpemVv ZihVUkxfRklMRSkpOworICBpZighZmlsZSkKKyAgICByZXR1cm4gTlVMTDsKKworICBmaWxlLT5o YW5kbGUuZmlsZSA9IGZvcGVuKHVybCwgb3BlcmF0aW9uKTsKKyAgaWYoZmlsZS0+aGFuZGxlLmZp bGUpCisgICAgZmlsZS0+dHlwZSA9IENGVFlQRV9GSUxFOyAvKiBtYXJrZWQgYXMgVVJMICovCisK KyAgZWxzZSB7CisgICAgZmlsZS0+dHlwZSA9IENGVFlQRV9DVVJMOyAvKiBtYXJrZWQgYXMgVVJM ICovCisgICAgZmlsZS0+aGFuZGxlLmN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgICAgY3Vy bF9lYXN5X3NldG9wdChmaWxlLT5oYW5kbGUuY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisgICAg Y3VybF9lYXN5X3NldG9wdChmaWxlLT5oYW5kbGUuY3VybCwgQ1VSTE9QVF9XUklURURBVEEsIGZp bGUpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZmlsZS0+aGFuZGxlLmN1cmwsIENVUkxPUFRfVkVS Qk9TRSwgMEwpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZmlsZS0+aGFuZGxlLmN1cmwsIENVUkxP UFRfV1JJVEVGVU5DVElPTiwgd3JpdGVfY2FsbGJhY2spOworCisgICAgaWYoIW11bHRpX2hhbmRs ZSkKKyAgICAgIG11bHRpX2hhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworCisgICAgY3VybF9t dWx0aV9hZGRfaGFuZGxlKG11bHRpX2hhbmRsZSwgZmlsZS0+aGFuZGxlLmN1cmwpOworCisgICAg LyogbGV0cyBzdGFydCB0aGUgZmV0Y2ggKi8KKyAgICBjdXJsX211bHRpX3BlcmZvcm0obXVsdGlf aGFuZGxlLCAmZmlsZS0+c3RpbGxfcnVubmluZyk7CisKKyAgICBpZigoZmlsZS0+YnVmZmVyX3Bv cyA9PSAwKSAmJiAoIWZpbGUtPnN0aWxsX3J1bm5pbmcpKSB7CisgICAgICAvKiBpZiBzdGlsbF9y dW5uaW5nIGlzIDAgbm93LCB3ZSBzaG91bGQgcmV0dXJuIE5VTEwgKi8KKworICAgICAgLyogbWFr ZSBzdXJlIHRoZSBlYXN5IGhhbmRsZSBpcyBub3QgaW4gdGhlIG11bHRpIGhhbmRsZSBhbnltb3Jl ICovCisgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobXVsdGlfaGFuZGxlLCBmaWxlLT5o YW5kbGUuY3VybCk7CisKKyAgICAgIC8qIGNsZWFudXAgKi8KKyAgICAgIGN1cmxfZWFzeV9jbGVh bnVwKGZpbGUtPmhhbmRsZS5jdXJsKTsKKworICAgICAgZnJlZShmaWxlKTsKKworICAgICAgZmls ZSA9IE5VTEw7CisgICAgfQorICB9CisgIHJldHVybiBmaWxlOworfQorCitpbnQgdXJsX2ZjbG9z ZShVUkxfRklMRSAqZmlsZSkKK3sKKyAgaW50IHJldCA9IDA7LyogZGVmYXVsdCBpcyBnb29kIHJl dHVybiAqLworCisgIHN3aXRjaChmaWxlLT50eXBlKSB7CisgIGNhc2UgQ0ZUWVBFX0ZJTEU6Cisg ICAgcmV0ID0gZmNsb3NlKGZpbGUtPmhhbmRsZS5maWxlKTsgLyogcGFzc3Rocm91Z2ggKi8KKyAg ICBicmVhazsKKworICBjYXNlIENGVFlQRV9DVVJMOgorICAgIC8qIG1ha2Ugc3VyZSB0aGUgZWFz eSBoYW5kbGUgaXMgbm90IGluIHRoZSBtdWx0aSBoYW5kbGUgYW55bW9yZSAqLworICAgIGN1cmxf bXVsdGlfcmVtb3ZlX2hhbmRsZShtdWx0aV9oYW5kbGUsIGZpbGUtPmhhbmRsZS5jdXJsKTsKKwor ICAgIC8qIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChmaWxlLT5oYW5kbGUuY3Vy bCk7CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDogLyogdW5rbm93biBvciBzdXBwb3J0ZWQgdHlw ZSAtIG9oIGRlYXIgKi8KKyAgICByZXQgPSBFT0Y7CisgICAgZXJybm8gPSBFQkFERjsKKyAgICBi cmVhazsKKyAgfQorCisgIGZyZWUoZmlsZS0+YnVmZmVyKTsvKiBmcmVlIGFueSBhbGxvY2F0ZWQg YnVmZmVyIHNwYWNlICovCisgIGZyZWUoZmlsZSk7CisKKyAgcmV0dXJuIHJldDsKK30KKworY2hh ciAqdXJsX2ZnZXRzKGNoYXIgKnB0ciwgc2l6ZV90IHNpemUsIFVSTF9GSUxFICpmaWxlKQorewor ICBzaXplX3Qgd2FudCA9IHNpemUgLSAxOy8qIGFsd2F5cyBuZWVkIHRvIGxlYXZlIHJvb20gZm9y IHplcm8gdGVybWluYXRpb24gKi8KKyAgc2l6ZV90IGxvb3A7CisKKyAgc3dpdGNoKGZpbGUtPnR5 cGUpIHsKKyAgY2FzZSBDRlRZUEVfRklMRToKKyAgICBwdHIgPSBmZ2V0cyhwdHIsIChpbnQpc2l6 ZSwgZmlsZS0+aGFuZGxlLmZpbGUpOworICAgIGJyZWFrOworCisgIGNhc2UgQ0ZUWVBFX0NVUkw6 CisgICAgZmlsbF9idWZmZXIoZmlsZSwgd2FudCk7CisKKyAgICAvKiBjaGVjayBpZiB0aGVyZSdz IGRhdGEgaW4gdGhlIGJ1ZmZlciAtIGlmIG5vdCBmaWxsIGVpdGhlciBlcnJvcmVkIG9yCisgICAg ICogRU9GICovCisgICAgaWYoIWZpbGUtPmJ1ZmZlcl9wb3MpCisgICAgICByZXR1cm4gTlVMTDsK KworICAgIC8qIGVuc3VyZSBvbmx5IGF2YWlsYWJsZSBkYXRhIGlzIGNvbnNpZGVyZWQgKi8KKyAg ICBpZihmaWxlLT5idWZmZXJfcG9zIDwgd2FudCkKKyAgICAgIHdhbnQgPSBmaWxlLT5idWZmZXJf cG9zOworCisgICAgLypidWZmZXIgY29udGFpbnMgZGF0YSAqLworICAgIC8qIGxvb2sgZm9yIG5l d2xpbmUgb3IgZW9mICovCisgICAgZm9yKGxvb3AgPSAwOyBsb29wIDwgd2FudDsgbG9vcCsrKSB7 CisgICAgICBpZihmaWxlLT5idWZmZXJbbG9vcF0gPT0gJ1xuJykgeworICAgICAgICB3YW50ID0g bG9vcCArIDE7LyogaW5jbHVkZSBuZXdsaW5lICovCisgICAgICAgIGJyZWFrOworICAgICAgfQor ICAgIH0KKworICAgIC8qIHhmZXIgZGF0YSB0byBjYWxsZXIgKi8KKyAgICBtZW1jcHkocHRyLCBm aWxlLT5idWZmZXIsIHdhbnQpOworICAgIHB0clt3YW50XSA9IDA7LyogYWx3YXlzIG51bGwgdGVy bWluYXRlICovCisKKyAgICB1c2VfYnVmZmVyKGZpbGUsIHdhbnQpOworCisgICAgYnJlYWs7CisK KyAgZGVmYXVsdDogLyogdW5rbm93biBvciBzdXBwb3J0ZWQgdHlwZSAtIG9oIGRlYXIgKi8KKyAg ICBwdHIgPSBOVUxMOworICAgIGVycm5vID0gRUJBREY7CisgICAgYnJlYWs7CisgIH0KKworICBy ZXR1cm4gcHRyOy8qc3VjY2VzcyAqLworfQorCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9odHRwLXNlcnZpY2UuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2h0 dHAtc2VydmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOTZl Y2JhZDc1NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2h0 dHAtc2VydmljZS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGh0dHAtc2VydmljZS4KKyAqCisgKgkgIERlZmluaXRpb25zIGZvciBIVFRQIHNlcnZpY2UgZmls ZQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW50ZXJm YWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisjaWZuZGVmIEhUVFBfU0VSVklDRV9ICisjZGVmaW5lIEhUVFBfU0VSVklDRV9ICisKKyNp bmNsdWRlICJsaWJwcS1mZS5oIgorCitlbnVtIGZjdXJsX3R5cGVfZSB7CisgIENGVFlQRV9OT05F ID0gMCwKKyAgQ0ZUWVBFX0ZJTEUgPSAxLAorICBDRlRZUEVfQ1VSTCA9IDIKK307CitzdHJ1Y3Qg ZmN1cmxfZGF0YQoreworICBlbnVtIGZjdXJsX3R5cGVfZSB0eXBlOyAgICAgLyogdHlwZSBvZiBo YW5kbGUgKi8KKyAgdW5pb24geworICAgIENVUkwgKmN1cmw7CisgICAgRklMRSAqZmlsZTsKKyAg fSBoYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qIGhhbmRsZSAqLworCisgIGNoYXIgKmJ1ZmZl cjsgICAgICAgICAgICAgICAvKiBidWZmZXIgdG8gc3RvcmUgY2FjaGVkIGRhdGEqLworICBzaXpl X3QgYnVmZmVyX2xlbjsgICAgICAgICAgLyogY3VycmVudGx5IGFsbG9jYXRlZCBidWZmZXJzIGxl bmd0aCAqLworICBzaXplX3QgYnVmZmVyX3BvczsgICAgICAgICAgLyogZW5kIG9mIGRhdGEgaW4g YnVmZmVyKi8KKyAgaW50IHN0aWxsX3J1bm5pbmc7ICAgICAgICAgIC8qIElzIGJhY2tncm91bmQg dXJsIGZldGNoIHN0aWxsIGluIHByb2dyZXNzICovCit9OworCit0eXBlZGVmIHN0cnVjdCBmY3Vy bF9kYXRhIFVSTF9GSUxFOworCisvKiBFeHBvcnRlZCBmbG93IGNhbGxiYWNrLiAqLworCitleHRl cm4gUEdETExFWFBPUlQgVVJMX0ZJTEUKKyp1cmxfZm9wZW4oY29uc3QgY2hhciAqdXJsLCBjb25z dCBjaGFyICpvcGVyYXRpb24pOworCitleHRlcm4gUEdETExFWFBPUlQgY2hhcgorKnVybF9mZ2V0 cyhjaGFyICpwdHIsIHNpemVfdCBzaXplLCBVUkxfRklMRSAqZmlsZSk7CisKK2V4dGVybiBQR0RM TEVYUE9SVCBpbnQKK3VybF9mY2xvc2UoVVJMX0ZJTEUgKmZpbGUpOworCisjZW5kaWYJCQkJCQkJ LyogSFRUUF9TRVJWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL21lc29uLmJ1aWxkIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQK aW5kZXggZWEzYTkwMGY0ZjEuLjM3Nzk1NWVkNzA1IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBsaWJwcV9vYXV0aF9zb3VyY2VzID0gZmls ZXMoCiAjIFRoZSBzaGFyZWQgbGlicmFyeSBuZWVkcyBhZGRpdGlvbmFsIGdsdWUgc3ltYm9scy4K IGxpYnBxX29hdXRoX3NvX3NvdXJjZXMgPSBmaWxlcygKICAgJ29hdXRoLXV0aWxzLmMnLAorICAn aHR0cC1zZXJ2aWNlLmMnLAogKQogbGlicHFfb2F1dGhfc29fY19hcmdzID0gWwogICAnLURVU0Vf RFlOQU1JQ19PQVVUSCcsCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25u ZWN0LmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKaW5kZXggZGI5YjRjOGVk YmYuLmQwYzU3YjczNTFkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25u ZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCkBAIC0xNSw2ICsx NSw3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8ZGxmY24uaD4K ICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Y3R5 cGUuaD4KQEAgLTE0Miw2ICsxNDMsMzEgQEAgc3RhdGljIGludAlsZGFwU2VydmljZUxvb2t1cChj b25zdCBjaGFyICpwdXJsLCBQUWNvbm5pbmZvT3B0aW9uICpvcHRpb25zLAogI2RlZmluZSBEZWZh dWx0R1NTTW9kZSAiZGlzYWJsZSIKICNlbmRpZgogCisjaWZkZWYgVVNFX0xJQkNVUkwKK3N0YXRp YyBpbnQJaHR0cFNlcnZpY2VMb29rdXAoY29uc3QgY2hhciAqcHVybCwgUFFjb25uaW5mb09wdGlv biAqb3B0aW9ucywKKwkJCQkJCQkgIFBRRXhwQnVmZmVyIGVycm9yTWVzc2FnZSk7CitlbnVtIGZj dXJsX3R5cGVfZSB7CisgIENGVFlQRV9OT05FID0gMCwKKyAgQ0ZUWVBFX0ZJTEUgPSAxLAorICBD RlRZUEVfQ1VSTCA9IDIKK307CitzdHJ1Y3QgZmN1cmxfZGF0YQoreworICBlbnVtIGZjdXJsX3R5 cGVfZSB0eXBlOyAgICAgLyogdHlwZSBvZiBoYW5kbGUgKi8KKyAgdW5pb24geworICAgIHZvaWQg KmN1cmw7CisgICAgRklMRSAqZmlsZTsKKyAgfSBoYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8q IGhhbmRsZSAqLworCisgIGNoYXIgKmJ1ZmZlcjsgICAgICAgICAgICAgICAvKiBidWZmZXIgdG8g c3RvcmUgY2FjaGVkIGRhdGEqLworICBzaXplX3QgYnVmZmVyX2xlbjsgICAgICAgICAgLyogY3Vy cmVudGx5IGFsbG9jYXRlZCBidWZmZXJzIGxlbmd0aCAqLworICBzaXplX3QgYnVmZmVyX3Bvczsg ICAgICAgICAgLyogZW5kIG9mIGRhdGEgaW4gYnVmZmVyKi8KKyAgaW50IHN0aWxsX3J1bm5pbmc7 ICAgICAgICAgIC8qIElzIGJhY2tncm91bmQgdXJsIGZldGNoIHN0aWxsIGluIHByb2dyZXNzICov Cit9OworCit0eXBlZGVmIHN0cnVjdCBmY3VybF9kYXRhIFVSTF9GSUxFOworI2VuZGlmCisKIC8q IC0tLS0tLS0tLS0KICAqIERlZmluaXRpb24gb2YgdGhlIGNvbm5pbmZvIHBhcmFtZXRlcnMgYW5k IHRoZWlyIGZhbGxiYWNrIHJlc291cmNlcy4KICAqCkBAIC01OTczLDYgKzU5OTksMjI5IEBAIGxk YXBTZXJ2aWNlTG9va3VwKGNvbnN0IGNoYXIgKnB1cmwsIFBRY29ubmluZm9PcHRpb24gKm9wdGlv bnMsCiAKICNlbmRpZgkJCQkJCQkvKiBVU0VfTERBUCAqLwogCisjaWZkZWYgVVNFX0xJQkNVUkwK KyNkZWZpbmUgSFRUUF9VUkwJImh0dHA6Ly8iCisKKworLyoKKyAqCQlodHRwU2VydmljZUxvb2t1 cAorICoKKyAqIFNlYXJjaCB0aGUgSFRUUCBVUkwgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50LCB0 cmVhdCB0aGUgcmVzdWx0IGFzIGEKKyAqIHN0cmluZyBvZiBjb25uZWN0aW9uIG9wdGlvbnMgdGhh dCBhcmUgcGFyc2VkIGFuZCBhZGRlZCB0byB0aGUgYXJyYXkgb2YKKyAqIG9wdGlvbnMgcGFzc2Vk IGFzIHNlY29uZCBhcmd1bWVudC4KKyAqCisgKiBSZXR1cm5zCisgKgkwIGlmIHRoZSBsb29rdXAg d2FzIHN1Y2Nlc3NmdWwsCisgKgkxIGlmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBMREFQIHNlcnZl ciBjb3VsZCBiZSBlc3RhYmxpc2hlZCBidXQKKyAqCSAgdGhlIHNlYXJjaCB3YXMgdW5zdWNjZXNz ZnVsLAorICoJMiBpZiBhIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBhbmQK KyAqCTMgaWYgYSBmYXRhbCBlcnJvciBvY2N1cnJlZC4KKyAqCTQgaWYgbGlicHEtb2F1dGggbW9k dWxlIGRvZXMgbm90IGV4aXN0CisgKgorICogQW4gZXJyb3IgbWVzc2FnZSBpcyBhcHBlbmRlZCB0 byAqZXJyb3JNZXNzYWdlIGZvciByZXR1cm4gY29kZXMgMSBhbmQgMy4KKyAqLworc3RhdGljIGlu dAoraHR0cFNlcnZpY2VMb29rdXAoCitjb25zdCBjaGFyICpwdXJsLCBQUWNvbm5pbmZvT3B0aW9u ICpvcHRpb25zLAorCQkJCQkJCSAgUFFFeHBCdWZmZXIgZXJyb3JNZXNzYWdlCisJCSkKK3sKKwlp bnQJCQlyZXN1bHQgPSAwLAorCQkJCWxpbmVuciA9IDAsCisJCQkJaTsKKwlVUkxfRklMRSAqZjsK KworCWNoYXIJICAgKmxpbmUsCisJCQkgICAqdXJsOworCWNoYXIJCWJ1ZlsxMDI0XTsKKworCXZv aWQgCSAgICpsaWJjdXJsX21vZHVsZTsKKwlVUkxfRklMRSAqICgqdXJsX2ZvcGVuKSAoY29uc3Qg Y2hhciAqdXJsLCBjb25zdCBjaGFyICpvcGVyYXRpb24pOworCWNoYXIgKiAoKnVybF9mZ2V0cykg KGNoYXIgKnB0ciwgc2l6ZV90IHNpemUsIFVSTF9GSUxFICpmaWxlKTsKKwlpbnQJCQkoKnVybF9m Y2xvc2UpIChVUkxfRklMRSAqZmlsZSk7CisKKwljb25zdCBjaGFyICpjb25zdCBtb2R1bGVfbmFt ZSA9CisjaWYgZGVmaW5lZChfX2Rhcndpbl9fKQorCQlMSUJESVIgIi9saWJwcS1vYXV0aCIgRExT VUZGSVg7CisjZWxzZQorCQkibGlicHEtb2F1dGgiIERMU1VGRklYOworI2VuZGlmCisKKwlpZiAo KHVybCA9IHN0cmR1cChwdXJsKSkgPT0gTlVMTCkKKwl7CisJCWxpYnBxX2FwcGVuZF9lcnJvcihl cnJvck1lc3NhZ2UsICJvdXQgb2YgbWVtb3J5Iik7CisJCXJldHVybiAzOworCX0KKworCWlmIChw Z19zdHJuY2FzZWNtcCh1cmwsIEhUVFBfVVJMLCBzdHJsZW4oSFRUUF9VUkwpKSAhPSAwKQorCXsK KwkJbGlicHFfYXBwZW5kX2Vycm9yKGVycm9yTWVzc2FnZSwKKwkJCQkJCSAgICJpbnZhbGlkIEhU VFAgVVJMIFwiJXNcIjogc2NoZW1lIG11c3QgYmUgaHR0cDovLyIsIHB1cmwpOworCQlmcmVlKHVy bCk7CisJCXJldHVybiAzOworCX0KKworCWxpYmN1cmxfbW9kdWxlID0gZGxvcGVuKG1vZHVsZV9u YW1lLCBSVExEX05PVyB8IFJUTERfTE9DQUwpOworCWlmICghbGliY3VybF9tb2R1bGUpCisJewor CQkvKgorCQkgKiBGb3IgZW5kIHVzZXJzLCB0aGlzIHByb2JhYmx5IGlzbid0IGFuIGVycm9yIGNv bmRpdGlvbiwgaXQganVzdAorCQkgKiBtZWFucyB0aGUgZmxvdyBpc24ndCBpbnN0YWxsZWQuIERl dmVsb3BlcnMgYW5kIHBhY2thZ2UgbWFpbnRhaW5lcnMKKwkJICogbWF5IHdhbnQgdG8gZGVidWcg dGhpcyB2aWEgdGhlIFBHT0FVVEhERUJVRyBlbnZ2YXIsIHRob3VnaC4KKwkJICoKKwkJICogTm90 ZSB0aGF0IFBPU0lYIGRsZXJyb3IoKSBpc24ndCBndWFyYW50ZWVkIHRvIGJlIHRocmVhZHNhZmUu CisJCSAqLworCQlmcmVlKHVybCk7CisJCWlmIChvYXV0aF91bnNhZmVfZGVidWdnaW5nX2VuYWJs ZWQoKSkKKwkJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIGRsb3BlbiBmb3IgbGlicHEtb2F1dGg6 ICVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gNDsKKwl9CisKKwlpZiAoKHVybF9mb3BlbiA9 IGRsc3ltKGxpYmN1cmxfbW9kdWxlLCAidXJsX2ZvcGVuIikpID09IE5VTEwKKwkJIHx8ICh1cmxf ZmdldHMgPSBkbHN5bShsaWJjdXJsX21vZHVsZSwgInVybF9mZ2V0cyIpKSA9PSBOVUxMCisJCSB8 fCAodXJsX2ZjbG9zZSA9IGRsc3ltKGxpYmN1cmxfbW9kdWxlLCAidXJsX2ZjbG9zZSIpKSA9PSBO VUxMKQorCXsKKwkJaWYgKG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCgpKQorCQkJZnBy aW50ZihzdGRlcnIsICJmYWlsZWQgZGxzeW0gZm9yIGxpYnBxLW9hdXRoOiAlc1xuIiwgZGxlcnJv cigpKTsKKworCQlkbGNsb3NlKGxpYmN1cmxfbW9kdWxlKTsKKwkJbGliY3VybF9tb2R1bGUgPSBO VUxMOworCisJCWxpYnBxX2FwcGVuZF9lcnJvcihlcnJvck1lc3NhZ2UsCisJCQkJCQkgICAiY291 bGQgbm90IGZpbmQgZW50cnkgcG9pbnQgZm9yIGxpYnBxLW9hdXRoIik7CisJCXJldHVybiAzOwor CX0KKworCWYgPSB1cmxfZm9wZW4odXJsLCAiciIpOworCWlmIChmID09IE5VTEwpCisJeworCQlm cmVlKHVybCk7CisJCXJldHVybiAzOworCX0KKworCWZyZWUodXJsKTsKKworCS8qIGFzc3VtZSBj b25uZWN0aW9uIGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCB1bnRpbCB3ZSByZWFkICovCisJcmVz dWx0ID0gMjsKKworCXdoaWxlICgobGluZSA9IHVybF9mZ2V0cyhidWYsIHNpemVvZihidWYpLCBm KSkgIT0gTlVMTCkKKwl7CisJCWludAkJCWxlbjsKKwkJY2hhcgkgICAqa2V5LAorCQkJCSAgICp2 YWw7CisJCWJvb2wJCWZvdW5kX2tleXdvcmQ7CisKKwkJbGluZW5yKys7CisKKwkJaWYgKHN0cmxl bihsaW5lKSA+PSBzaXplb2YoYnVmKSAtIDEpCisJCXsKKwkJCSBsaWJwcV9hcHBlbmRfZXJyb3Io ZXJyb3JNZXNzYWdlLAorCQkJCQkJCSAgICJsaW5lICVkIHRvbyBsb25nIGluIHNlcnZpY2UgZmls ZSBcIiVzXCIiLAorCQkJCQkJCSAgIGxpbmVuciwKKwkJCQkJCQkgICBwdXJsKTsKKwkJCXJlc3Vs dCA9IDM7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQkvKiBpZ25vcmUgd2hpdGVzcGFjZSBhdCBl bmQgb2YgbGluZSwgZXNwZWNpYWxseSB0aGUgbmV3bGluZSAqLworCQlsZW4gPSBzdHJsZW4obGlu ZSk7CisJCXdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpIGxpbmVbbGVu IC0gMV0pKQorCQkJbGluZVstLWxlbl0gPSAnXDAnOworCisJCS8qIGlnbm9yZSBsZWFkaW5nIHdo aXRlc3BhY2UgdG9vICovCisJCXdoaWxlICgqbGluZSAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSBsaW5lWzBdKSkKKwkJCWxpbmUrKzsKKworCQkvKiBpZ25vcmUgY29tbWVudHMgYW5kIGVtcHR5 IGxpbmVzICovCisJCWlmIChsaW5lWzBdID09ICdcMCcgfHwgbGluZVswXSA9PSAnIycpCisJCQlj b250aW51ZTsKKworCQkvKgorCQkgKiB3ZSBkbyBub3Qgc3VwcG9ydCBsZGFwIGxvb2t1cHMgd2l0 aGluIGh0dHAgbG9va3VwcyBidXQgd2UgZG8gcmFpc2UgZXJvcnIKKwkJICogZXZlbiBpbiBub24g bGRhcCBidWlsZHMKKwkJICovCisJCWlmIChzdHJuY21wKGxpbmUsICJsZGFwIiwgNCkgPT0gMCkK KwkJeworCQkJIGxpYnBxX2FwcGVuZF9lcnJvcihlcnJvck1lc3NhZ2UsCisJCQkJCQkJICAgImxk YXA6Ly8gbGluZXMgYXJlIG5vdCBhbGxvd2VkIGluIGh0dHAgc2VydmljZSBsb29rdXBzIgorCQkJ CQkJCSAgICk7CisJCQlyZXN1bHQgPSAzOworCQkJZ290byBleGl0OworCQl9CisKKwkJLyogd2Ug ZG8gbm90IHN1cHBvcnQgcmVjdXJzaXZlIGh0dHAgbG9va3VwcyAqLworCQlpZiAoc3RybmNtcChs aW5lLCAiaHR0cCIsIDQpID09IDApCisJCXsKKwkJCSBsaWJwcV9hcHBlbmRfZXJyb3IoZXJyb3JN ZXNzYWdlLAorCQkJCQkJCSAgICJodHRwOi8vIGxpbmVzIGFyZSBub3QgYWxsb3dlZCBpbiBodHRw IHNlcnZpY2UgbG9va3VwcyIKKwkJCQkJCQkgICApOworCQkJcmVzdWx0ID0gMzsKKwkJCWdvdG8g ZXhpdDsKKwkJfQorCisJCWtleSA9IGxpbmU7CisJCXZhbCA9IHN0cmNocihsaW5lLCAnPScpOwor CQlpZiAodmFsID09IE5VTEwpCisJCXsKKwkJCWxpYnBxX2FwcGVuZF9lcnJvcihlcnJvck1lc3Nh Z2UsCisJCQkJCQkJICAgInN5bnRheCBlcnJvciBpbiBzZXJ2aWNlIGZpbGUgXCIlc1wiLCBsaW5l ICVkIiwKKwkJCQkJCQkgICBwdXJsLAorCQkJCQkJCSAgIGxpbmVucik7CisJCQlyZXN1bHQgPSAz OworCQkJZ290byBleGl0OworCQl9CisJCSp2YWwrKyA9ICdcMCc7CisKKwkJaWYgKHN0cmNtcChr ZXksICJzZXJ2aWNlIikgPT0gMCkKKwkJeworCQkJbGlicHFfYXBwZW5kX2Vycm9yKGVycm9yTWVz c2FnZSwKKwkJCQkJCSAgICJuZXN0ZWQgc2VydmljZSBzcGVjaWZpY2F0aW9ucyBub3Qgc3VwcG9y dGVkIGluIHNlcnZpY2UgZmlsZSBcIiVzXCIsIGxpbmUgJWQiLAorCQkJCQkJICAgcHVybCwKKwkJ CQkJCQkgICBsaW5lbnIpOworCQkJcmVzdWx0ID0gMzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJ CS8qCisJCSAqIFNldCB0aGUgcGFyYW1ldGVyIC0tLSBidXQgZG9uJ3Qgb3ZlcnJpZGUgYW55IHBy ZXZpb3VzCisJCSAqIGV4cGxpY2l0IHNldHRpbmcuCisJCSAqLworCQlmb3VuZF9rZXl3b3JkID0g ZmFsc2U7CisJCWZvciAoaSA9IDA7IG9wdGlvbnNbaV0ua2V5d29yZDsgaSsrKQorCQl7CisJCQlp ZiAoc3RyY21wKG9wdGlvbnNbaV0ua2V5d29yZCwga2V5KSA9PSAwKQorCQkJeworCQkJCWlmIChv cHRpb25zW2ldLnZhbCA9PSBOVUxMKQorCQkJCQlvcHRpb25zW2ldLnZhbCA9IHN0cmR1cCh2YWwp OworCQkJCWlmICghb3B0aW9uc1tpXS52YWwpCisJCQkJeworCQkJCQlsaWJwcV9hcHBlbmRfZXJy b3IoZXJyb3JNZXNzYWdlLCAib3V0IG9mIG1lbW9yeSIpOworCQkJCQlyZXN1bHQgPSAzOworCQkJ CQlnb3RvIGV4aXQ7CisJCQkJfQorCQkJCWZvdW5kX2tleXdvcmQgPSB0cnVlOworCQkJCWJyZWFr OworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZF9rZXl3b3JkKQorCQl7CisJCQlsaWJwcV9hcHBl bmRfZXJyb3IoZXJyb3JNZXNzYWdlLAorCQkJCQkJICAgInN5bnRheCBlcnJvciBpbiBzZXJ2aWNl IGZpbGUgXCIlc1wiLCBsaW5lICVkIiwKKwkJCQkJCSAgIHB1cmwsCisJCQkJCQkgICBsaW5lbnIp OworCQkJcmVzdWx0ID0gMzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworZXhpdDoKKwl1cmxf ZmNsb3NlKGYpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgkJCQkJCQkvKiBVU0VfTElC Q1VSTCAqLworCiAvKgogICogcGFyc2VTZXJ2aWNlSW5mbzogaWYgYSBzZXJ2aWNlIG5hbWUgaGFz IGJlZW4gZ2l2ZW4sIGxvb2sgaXQgdXAgYW5kIGFic29yYgogICogY29ubmVjdGlvbiBvcHRpb25z IGZyb20gaXQgaW50byAqb3B0aW9ucy4KQEAgLTYxNTMsNiArNjQwMiwyNiBAQCBwYXJzZVNlcnZp Y2VGaWxlKGNvbnN0IGNoYXIgKnNlcnZpY2VGaWxlLAogCQkJCX0KICNlbmRpZgogCisjaWZkZWYg VVNFX0xJQkNVUkwKKwkJCQlpZiAoc3RybmNtcChsaW5lLCAiaHR0cCIsIDQpID09IDApCisJCQkJ eworCQkJCQlpbnQJCQlyYyA9IGh0dHBTZXJ2aWNlTG9va3VwKGxpbmUsIG9wdGlvbnMsIGVycm9y TWVzc2FnZSk7CisKKwkJCQkJLyogaWYgcmMgPSAyIG9yIDQsIGdvIG9uIHJlYWRpbmcgZm9yIGZh bGxiYWNrICovCisJCQkJCXN3aXRjaCAocmMpCisJCQkJCXsKKwkJCQkJCWNhc2UgMDoKKwkJCQkJ CQlnb3RvIGV4aXQ7CisJCQkJCQljYXNlIDE6CisJCQkJCQljYXNlIDM6CisJCQkJCQkJcmVzdWx0 ID0gMzsKKwkJCQkJCQlnb3RvIGV4aXQ7CisJCQkJCQljYXNlIDI6CisJCQkJCQljYXNlIDQ6CisJ CQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYKIAkJCQlrZXkgPSBsaW5lOwog CQkJCXZhbCA9IHN0cmNocihsaW5lLCAnPScpOwogCQkJCWlmICh2YWwgPT0gTlVMTCkKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2Vm aWxlCmluZGV4IDI4Y2UzYjM1ZWRhLi4wYjI5ZmMzYTU1NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xMyw2 ICsxMyw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgaW5kZXggXAogCQkgIGxpYnBxX3BpcGVsaW5lIFwK IAkJICBvYXV0aF92YWxpZGF0b3IgXAorCQkgIGh0dHBfcGdfc2VydmljZSBcCiAJCSAgcGxzYW1w bGUgXAogCQkgIHNwZ2lzdF9uYW1lX29wcyBcCiAJCSAgdGVzdF9haW8gXApkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1 bGVzL2h0dHBfcGdfc2VydmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZjhlYmM0MjRkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL2h0dHBfcGdfc2VydmljZS9NYWtlZmlsZQpAQCAtMCwwICsxLDM3IEBACisjLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIworIyBNYWtlZmlsZSBmb3Igc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0 b3IKKyMKKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisjCisjIHNyYy90ZXN0L21vZHVs ZXMvb2F1dGhfdmFsaWRhdG9yL01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQR0ZJ TEVERVNDID0gImh0dHBfcGdfc2VydmljZSAtIHRlc3QgaHR0cF9zZXJ2aWNlIG1vZHVsZSIKKwor UEdBUFBJQ09OID0gd2luMzIKKworUEdfQ1BQRkxBR1MgPSAtSSQobGlicHFfc3JjZGlyKQorUEdf TElCU19JTlRFUk5BTCArPSAkKGxpYnBxX3BncG9ydCkKKworTk9fSU5TVEFMTENIRUNLID0gMQor CitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcK K1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitl bHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2VydmljZQordG9wX2J1aWxk ZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCisK K2V4cG9ydCBQWVRIT04KK2V4cG9ydCB3aXRoX2xpYmN1cmwKK2V4cG9ydCB3aXRoX3B5dGhvbgor CitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvbWVz b24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2VydmljZS9tZXNvbi5idWlsZApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzhhY2U0YWFhMTAKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2VydmljZS9tZXNvbi5idWls ZApAQCAtMCwwICsxLDE3IEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordGVzdHMgKz0geworICAnbmFtZSc6ICdodHRwX3BnX3Nl cnZpY2UnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVz b24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAg ICAndC8wMDFfaHR0cF9zZXJ2aWNlX2ZpbGUucGwnLAorICAgIF0sCisgICAgJ2Vudic6IHsKKyAg ICAgICdQWVRIT04nOiBweXRob24ucGF0aCgpLAorICAgICAgJ3dpdGhfbGliY3VybCc6IGxpYmN1 cmwuZm91bmQoKSA/ICd5ZXMnIDogJ25vJywKKyAgICAgICd3aXRoX3B5dGhvbic6ICd5ZXMnLAor ICAgIH0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2Vy dmljZS90LzAwMV9odHRwX3NlcnZpY2VfZmlsZS5wbCBiL3NyYy90ZXN0L21vZHVsZXMvaHR0cF9w Z19zZXJ2aWNlL3QvMDAxX2h0dHBfc2VydmljZV9maWxlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4yNjRmMWE4YTg4MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL3QvMDAxX2h0dHBfc2VydmljZV9maWxlLnBsCkBA IC0wLDAgKzEsMjAwIEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwn OworCit1c2UgRmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OlJlYWxCaW47CisKK3VzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNl IFRlc3Q6Ok1vcmU7CisKK3VzZSBQZ0h0dHBTZXJ2aWNlOjpTZXJ2ZXI7CisKK2lmICgkRU5We3dp dGhfbGliY3VybH0gbmUgJ3llcycpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnSFRUUCBzZXJ2aWNl IGZpbGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJzsKK30KKworaWYgKCRFTlZ7d2l0aF9w eXRob259IG5lICd5ZXMnKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0hUVFAgc2VydmljZSB0ZXN0 cyByZXF1aXJlIC0td2l0aC1weXRob24gdG8gcnVuJzsKK30KKworbXkgJHRkID0gUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7CisKK215ICRub2RlX2R1bW15ID0gUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlX2R1bW15Jyk7Ciskbm9kZV9kdW1teS0+aW5pdDsKKwor bXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUnKTsKKyRub2Rl LT5pbml0OworJG5vZGUtPnN0YXJ0OworCisjIFdpbmRvd3MgdnMgbm9uLVdpbmRvd3M6IENSTEYg dnMgTEYgZm9yIHRoZSBmaWxlJ3MgbmV3bGluZSwgcmVseWluZyBvbgorIyB0aGUgZmFjdCB0aGF0 IGxpYnBxIHVzZXMgZmdldHMoKSB3aGVuIHJlYWRpbmcgdGhlIGxpbmVzIG9mIGEgc2VydmljZSBm aWxlLgorbXkgJG5ld2xpbmUgPSAiXG4iOworCisjIENyZWF0ZSB0aGUgc2V0IG9mIHNlcnZpY2Ug ZmlsZXMgdXNlZCBpbiB0aGUgdGVzdHMuCisjIEZpbGUgdGhhdCBpbmNsdWRlcyBhIHZhbGlkIHNl cnZpY2UgbmFtZSwgdGhhdCB1c2VzIGEgZGVjb21wb3NlZCBjb25uZWN0aW9uCisjIHN0cmluZyBm b3IgaXRzIGNvbnRlbnRzLCBzcGxpdCBvbiBzcGFjZXMuCitteSAkcmVtb3RlX3NydmZpbGVfdmFs aWQgPSAiJHRkL3JlbW90ZV9wZ19zZXJ2aWNlX3ZhbGlkLmNvbmYiOworYXBwZW5kX3RvX2ZpbGUo JHJlbW90ZV9zcnZmaWxlX3ZhbGlkLCBxcXsKK3BvcnQ9fSAuICRub2RlLT5wb3J0KCkgLiBxcXsK K2hvc3Q9fSAuICRub2RlLT5ob3N0KCkgLiBxcXsKK2RibmFtZT1wb3N0Z3JlcworfSk7CisKK215 ICRtaXNzaW5nX2VxdWFsc19pbnZhbGlkID0gIiR0ZC9taXNzaW5nX2VxdWFsc19pbnZhbGlkLmNv bmYiOworYXBwZW5kX3RvX2ZpbGUoJG1pc3NpbmdfZXF1YWxzX2ludmFsaWQsIHFxeworcG9ydD19 IC4gJG5vZGUtPnBvcnQoKSAuIHFxeworaG9zdD19IC4gJG5vZGUtPmhvc3QoKSAuIHFxeworZGJu YW1lPQorfSk7CisKK215ICRyZW1vdGVfcGdfc2VydmljZV9ub25leGlzdGFudF9jb25uZWN0aW9u X29wdGlvbiA9ICIkdGQvcmVtb3RlX3BnX3NlcnZpY2Vfbm9uZXhpc3RhbnRfY29ubmVjdGlvbl9v cHRpb24uY29uZiI7CithcHBlbmRfdG9fZmlsZSgkcmVtb3RlX3BnX3NlcnZpY2Vfbm9uZXhpc3Rh bnRfY29ubmVjdGlvbl9vcHRpb24sIHFxeworcG9ydD19IC4gJG5vZGUtPnBvcnQoKSAuIHFxewor bm9uZXhpc3RhbnRfcGFyYW09c29tZXRoaW5nCitkYm5hbWU9cG9zdGdyZXMKK30pOworCitteSAk cmVtb3RlX3BnX3NlcnZpY2VfbGRhcF9jb25uZWN0aW9uX29wdGlvbiA9ICIkdGQvcmVtb3RlX3Bn X3NlcnZpY2VfbGRhcF9jb25uZWN0aW9uX29wdGlvbi5jb25mIjsKK2FwcGVuZF90b19maWxlKCRy ZW1vdGVfcGdfc2VydmljZV9sZGFwX2Nvbm5lY3Rpb25fb3B0aW9uLCBxcXsKK2xkYXA6Ly8KK30p OworCitteSAkcmVtb3RlX3BnX3NlcnZpY2VfaHR0cF9jb25uZWN0aW9uX29wdGlvbiA9ICIkdGQv cmVtb3RlX3BnX3NlcnZpY2VfaHR0cF9jb25uZWN0aW9uX29wdGlvbi5jb25mIjsKK2FwcGVuZF90 b19maWxlKCRyZW1vdGVfcGdfc2VydmljZV9odHRwX2Nvbm5lY3Rpb25fb3B0aW9uLCBxcXsKK2h0 dHA6Ly8KK30pOworCitteSAkcmVtb3RlX3BnX3NlcnZpY2VfbmVzdGVkX2Nvbm5lY3Rpb25fb3B0 aW9uID0gIiR0ZC9yZW1vdGVfcGdfc2VydmljZV9uZXN0ZWRfY29ubmVjdGlvbl9vcHRpb24uY29u ZiI7CithcHBlbmRfdG9fZmlsZSgkcmVtb3RlX3BnX3NlcnZpY2VfbmVzdGVkX2Nvbm5lY3Rpb25f b3B0aW9uLCBxcXsKK3NlcnZpY2U9bm9uZXhpc3RlbnQKK30pOworCisjIEZpbGUgZGVmaW5lZCB3 aXRoIG5vIGNvbnRlbnRzLCB1c2VkIGFzIGRlZmF1bHQgdmFsdWUgZm9yIFBHU0VSVklDRUZJTEUs CisjIHNvIGFzIG5vIGxvb2t1cCBpcyBhdHRlbXB0ZWQgaW4gdGhlIHVzZXIncyBob21lIGRpcmVj dG9yeS4KK215ICRzcnZmaWxlX2VtcHR5ID0gIiR0ZC9wZ19zZXJ2aWNlX2VtcHR5LmNvbmYiOwor YXBwZW5kX3RvX2ZpbGUoJHNydmZpbGVfZW1wdHksICcnKTsKKworbXkgJHNlcnZlciA9IFBnSHR0 cFNlcnZpY2U6OlNlcnZlci0+bmV3KCk7Ciskc2VydmVyLT5ydW4oJHRkKTsKKworbXkgJHBvcnQg PSAkc2VydmVyLT5wb3J0OworbXkgJGlzc3VlciA9ICJodHRwOi8vMTI3LjAuMC4xOiRwb3J0IjsK KworbXkgJGxvY2FsX3NydmZpbGVfdmFsaWQgPSAiJHRkL2xvY2FsX3BnX3NlcnZpY2VfdmFsaWQu Y29uZiI7CithcHBlbmRfdG9fZmlsZSgkbG9jYWxfc3J2ZmlsZV92YWxpZCwgcXF7CitbaHR0cF9z ZXJ2aWNlXQorfSAuICRpc3N1ZXIgLiBxcXsvcmVtb3RlX3BnX3NlcnZpY2VfdmFsaWQuY29uZgor CitbaHR0cF9zZXJ2aWNlX2luY29ycmVjdF9zY2hlbWVfd2l0aF9mYWxsYmFja10KK2h0dHA6LzEy Ny4wLjAuMTp9IC4gJHBvcnQgLiBxcXsKK30gLiAkaXNzdWVyIC4gcXF7L3JlbW90ZV9wZ19zZXJ2 aWNlX3ZhbGlkLmNvbmYKKworW2h0dHBfc2VydmljZV9pbmNvcnJlY3Rfc2NoZW1lXQoraHR0cDov MTI3LjAuMC4xOn0gLiAkcG9ydCAuIHFxey9yZW1vdGVfcGdfc2VydmljZV92YWxpZC5jb25mCisK K1todHRwX3NlcnZpY2Vfbm9uX2xpc3RlbmluZ19wb3J0XQoraHR0cDovLzEyNy4wLjAuMToxMjM0 L3JlbW90ZV9wZ19zZXJ2aWNlX3ZhbGlkLmNvbmYKKworW2h0dHBfc2VydmljZV9ub25fbGlzdGVu aW5nX3BvcnRfd2l0aF9mYWxsYmFja10KK2h0dHA6Ly8xMjcuMC4wLjE6MTIzNAorfSAuICRpc3N1 ZXIgLiBxcXsvcmVtb3RlX3BnX3NlcnZpY2VfdmFsaWQuY29uZgorCitbcmVtb3RlX3BnX3NlcnZp Y2Vfbm9uZXhpc3RhbnRfY29ubmVjdGlvbl9vcHRpb25dCit9IC4gJGlzc3VlciAuIHFxey9yZW1v dGVfcGdfc2VydmljZV9ub25leGlzdGFudF9jb25uZWN0aW9uX29wdGlvbi5jb25mCisKK1tuZXN0 ZWRfaHR0cF9zZXJ2aWNlXQorfSAuICRpc3N1ZXIgLiBxcXsvcmVtb3RlX3BnX3NlcnZpY2VfaHR0 cF9jb25uZWN0aW9uX29wdGlvbi5jb25mCisKK1tsZGFwX3NlcnZpY2VdCit9IC4gJGlzc3VlciAu IHFxey9yZW1vdGVfcGdfc2VydmljZV9sZGFwX2Nvbm5lY3Rpb25fb3B0aW9uLmNvbmYKKworW3Jl bW90ZV9uZXN0ZWRdCit9IC4gJGlzc3VlciAuIHFxey9yZW1vdGVfcGdfc2VydmljZV9uZXN0ZWRf Y29ubmVjdGlvbl9vcHRpb24uY29uZgorCitbbWlzc2luZ19lcXVhbHNfaW52YWxpZF0KK30gLiAk aXNzdWVyIC4gcXF7L21pc3NpbmdfZXF1YWxzX2ludmFsaWQuY29uZgorfSk7CisKKyMgU2V0IHRo ZSBmYWxsYmFjayBkaXJlY3RvcnkgbG9va3VwIG9mIHRoZSBzZXJ2aWNlIGZpbGUgdG8gdGhlIHRl bXBvcmFyeQorIyBkaXJlY3Rvcnkgb2YgdGhpcyB0ZXN0LiAgUEdTWVNDT05GRElSIGlzIHVzZWQg aWYgdGhlIHNlcnZpY2UgZmlsZQorIyBkZWZpbmVkIGluIFBHU0VSVklDRUZJTEUgY2Fubm90IGJl IGZvdW5kLCBvciB3aGVuIGEgc2VydmljZSBmaWxlIGlzCisjIGZvdW5kIGJ1dCBub3QgdGhlIHNl cnZpY2UgbmFtZS4KK2xvY2FsICRFTlZ7UEdTWVNDT05GRElSfSA9ICR0ZDsKKworIyBGb3JjZSBQ R1NFUlZJQ0VGSUxFIHRvIGEgZGVmYXVsdCBsb2NhdGlvbiwgc28gYXMgdGhpcyB0ZXN0IG5ldmVy CisjIHRyaWVzIHRvIGxvb2sgYXQgYSBob21lIGRpcmVjdG9yeS4gIFRoaXMgdmFsdWUgbmVlZHMg dG8gcmVtYWluCisjIGF0IHRoZSB0b3Agb2YgdGhpcyBzY3JpcHQgYmVmb3JlIHJ1bm5pbmcgYW55 IHRlc3RzLCBhbmQgc2hvdWxkIG5ldmVyCisjIGJlIGNoYW5nZWQuCisKK3sKKwlsb2NhbCAkRU5W e1BHU0VSVklDRUZJTEV9ID0gJGxvY2FsX3NydmZpbGVfdmFsaWQ7CisKKwkkbm9kZV9kdW1teS0+ Y29ubmVjdF9vaygKKwkJJ3NlcnZpY2U9aHR0cF9zZXJ2aWNlJywKKwkJJ2Nvbm5lY3Rpb24gd2l0 aCBjb3JyZWN0ICJzZXJ2aWNlIiBzdHJpbmcgYW5kIFBHU0VSVklDRUZJTEUnLAorCQlzcWwgPT4g IlNFTEVDVCAnY29ubmVjdDFfMSciLAorCQlleHBlY3RlZF9zdGRvdXQgPT4gcXIvY29ubmVjdDFf MS8pOworCisJJG5vZGVfZHVtbXktPmNvbm5lY3Rfb2soCisJCSdwb3N0Z3JlczovLz9zZXJ2aWNl PWh0dHBfc2VydmljZScsCisJCSdjb25uZWN0aW9uIHdpdGggY29ycmVjdCAic2VydmljZSIgVVJJ IGFuZCBQR1NFUlZJQ0VGSUxFJywKKwkJc3FsID0+ICJTRUxFQ1QgJ2Nvbm5lY3QxXzInIiwKKwkJ ZXhwZWN0ZWRfc3Rkb3V0ID0+IHFyL2Nvbm5lY3QxXzIvKTsKKworCSRub2RlX2R1bW15LT5jb25u ZWN0X2ZhaWxzKAorCQknc2VydmljZT1odHRwX3NlcnZpY2VfaW5jb3JyZWN0X3NjaGVtZScsCisJ CSdzZXJ2aWNlIHdpdGggaW52YWxpZCBodHRwIHNjaGVtZSBjb3JyZWN0bHkgcmFpc2VzIGVycm9y JywKKwkJZXhwZWN0ZWRfc3RkZXJyPT4gcXIvcHNxbDogZXJyb3I6IGludmFsaWQgSFRUUCBVUkwg XCIuKlwiOiBzY2hlbWUgbXVzdCBiZSBodHRwOlwvXC8vKTsKKworCSRub2RlX2R1bW15LT5jb25u ZWN0X2ZhaWxzKAorCQknc2VydmljZT1odHRwX3NlcnZpY2Vfbm9uX2xpc3RlbmluZ19wb3J0JywK KwkJJ3F1ZXJ5IG9uIG5vbiBsaXN0ZW5pbmcgcG9ydCBjb250aW51ZXMgdG8gdXNlIGNvbm5lY3Rp b24gcGFyYW1ldGVycyBmcm9tIG5vZGVfZHVtbXknLAorCQlleHBlY3RlZF9zdGRlcnI9PgorCQkg IHFyL3BzcWw6IGVycm9yOiBjb25uZWN0aW9uIHRvIHNlcnZlciBvbiBzb2NrZXQgXCJcL3RtcFwv LipcIiBmYWlsZWQ6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkvKTsKKworCSRub2RlX2R1bW15 LT5jb25uZWN0X29rKAorCQknc2VydmljZT1odHRwX3NlcnZpY2Vfbm9uX2xpc3RlbmluZ19wb3J0 X3dpdGhfZmFsbGJhY2snLAorCQknY2hlY2sgdGhhdCBub24gbGlzdGVuaW5nIFVSTCBhbGxvd3Mg ZmFsbGJhY2sgdG8gbGlzdGVuaW5nIFVSTCcsCisJCXNxbCA9PiAiU0VMRUNUICdjb25uZWN0MV8z JyIsCisJCWV4cGVjdGVkX3N0ZG91dCA9PiBxci9jb25uZWN0MV8zLyk7CisKKwkkbm9kZV9kdW1t eS0+Y29ubmVjdF9mYWlscygKKwkJJ3NlcnZpY2U9aHR0cF9zZXJ2aWNlX2luY29ycmVjdF9zY2hl bWVfd2l0aF9mYWxsYmFjaycsCisJCSdjaGVjayB0aGF0IGluY29ycmVjdCBodHRwIGFkZHJlc3Mg ZG9lcyBub3QgYWxsb3cgZmFsbGJhY2snLAorCQlleHBlY3RlZF9zdGRlcnIgPT4gcXIvcHNxbDog ZXJyb3I6IGludmFsaWQgSFRUUCBVUkwgXCIuKlwiOiBzY2hlbWUgbXVzdCBiZSBodHRwOlwvXC8v KTsKKworCSRub2RlX2R1bW15LT5jb25uZWN0X2ZhaWxzKAorCQknc2VydmljZT1yZW1vdGVfcGdf c2VydmljZV9ub25leGlzdGFudF9jb25uZWN0aW9uX29wdGlvbicsCisJCScnLAorCQlleHBlY3Rl ZF9zdGRlcnIgPT4gcXIvcHNxbDogZXJyb3I6IHN5bnRheCBlcnJvciBpbiBzZXJ2aWNlIGZpbGUg XCJodHRwOlwvXC8xMjdcLjBcLjBcLjE6LipcL3JlbW90ZV9wZ19zZXJ2aWNlX25vbmV4aXN0YW50 X2Nvbm5lY3Rpb25fb3B0aW9uLmNvbmZcIi8pOworCisJJG5vZGVfZHVtbXktPmNvbm5lY3RfZmFp bHMoCisJCSdzZXJ2aWNlPWxkYXBfc2VydmljZScsCisJCSdjaGVjayB0aGF0IGxkYXA6Ly8gbGlu ZXMgYXJlIG5vdCBhbGxvd2VkIGluIGh0dHAgc2VydmljZSBmaWxlJywKKwkJZXhwZWN0ZWRfc3Rk ZXJyID0+IHFyL3BzcWw6IGVycm9yOiBsZGFwOlwvXC8gbGluZXMgYXJlIG5vdCBhbGxvd2VkIGlu IGh0dHAgc2VydmljZSBsb29rdXBzLyk7CisKKwkkbm9kZV9kdW1teS0+Y29ubmVjdF9mYWlscygK KwkJJ3NlcnZpY2U9bmVzdGVkX2h0dHBfc2VydmljZScsCisJCSdjaGVjayB0aGF0IGh0dHA6Ly8g bGluZXMgYXJlIG5vdCBhbGxvd2VkIGluIGh0dHAgc2VydmljZSBmaWxlJywKKwkJZXhwZWN0ZWRf c3RkZXJyID0+IHFyL3BzcWw6IGVycm9yOiBodHRwOlwvXC8gbGluZXMgYXJlIG5vdCBhbGxvd2Vk IGluIGh0dHAgc2VydmljZSBsb29rdXBzLyk7CisKKwkkbm9kZV9kdW1teS0+Y29ubmVjdF9mYWls cygKKwkJJ3NlcnZpY2U9cmVtb3RlX25lc3RlZCcsCisJCScnLAorCQlleHBlY3RlZF9zdGRvdXQg PT4gcXIvcHNxbDogZXJyb3I6IG5lc3RlZCBzZXJ2aWNlIHNwZWNpZmljYXRpb25zIG5vdCBzdXBw b3J0ZWQgaW4gc2VydmljZSBmaWxlIFwiaHR0cDpcL1wvMTI3XC4wXC4wXC4xOi4qXC9yZW1vdGVf cGdfc2VydmljZV9uZXN0ZWRfY29ubmVjdGlvbl9vcHRpb24uY29uZlwiLyk7CisKKwkkbm9kZV9k dW1teS0+Y29ubmVjdF9mYWlscygKKwkJJ3NlcnZpY2U9bWlzc2luZ19lcXVhbHNfaW52YWxpZCcs CisJCScnLAorCQlleHBlY3RlZF9zdGRvdXQgPT4gcXIvcHNxbDogZXJyb3I6IHN5bnRheCBlcnJv ciBpbiBzZXJ2aWNlIGZpbGUgXCJodHRwOlwvXC8xMjdcLjBcLjBcLjE6LipcL21pc3NpbmdfZXF1 YWxzX2ludmFsaWQuY29uZlwiLyk7CisKK30KKworJHNlcnZlci0+c3RvcDsKKworJG5vZGUtPnRl YXJkb3duX25vZGU7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9odHRwX3BnX3NlcnZpY2UvdC9QZ0h0dHBTZXJ2aWNlL1NlcnZlci5wbSBiL3NyYy90ZXN0 L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL3QvUGdIdHRwU2VydmljZS9TZXJ2ZXIucG0KbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUzZDY3YWYzYjMzCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvdC9QZ0h0dHBTZXJ2aWNl L1NlcnZlci5wbQpAQCAtMCwwICsxLDE0MSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKz1wb2QKKworPWhlYWQxIE5BTUUKKwor UGdIdHRwU2VydmljZTo6U2VydmVyIC0gcnVucyBhIG1vY2sgcGdfc2VydmljZSBIVFRQIHNlcnZl ciBmb3IgdGVzdGluZworCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgUGdIdHRwU2VydmljZTo6 U2VydmVyOworCisgIG15ICRzZXJ2ZXIgPSBQZ0h0dHBTZXJ2aWNlOjpTZXJ2ZXItPm5ldygpOwor ICAkc2VydmVyLT5ydW47CisKKyAgbXkgJHBvcnQgPSAkc2VydmVyLT5wb3J0OworICBteSAkaXNz dWVyID0gImh0dHA6Ly8xMjcuMC4wLjE6JHBvcnQiOworCisgICMgdGVzdCBhZ2FpbnN0ICRpc3N1 ZXIuLi4KKworICAkc2VydmVyLT5zdG9wOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBp cyBnbHVlIEFQSSBiZXR3ZWVuIHRoZSBQZXJsIHRlc3RzIGFuZCB0aGUgUHl0aG9uIHBnX3NlcnZp Y2Ugc2VydmVyCitkYWVtb24gaW1wbGVtZW50ZWQgaW4gdC9odHRwX3NlcnZpY2Vfc2VydmVyLnB5 LiAoUHl0aG9uIGhhcyBhIGZhaXJseSB1c2FibGUgSFRUUCBzZXJ2ZXIKK2luIGl0cyBzdGFuZGFy ZCBsaWJyYXJ5LCBzbyB0aGUgaW1wbGVtZW50YXRpb24gd2FzIHBvcnRlZCBmcm9tIFBlcmwuKQor CitUaGlzIHBnX3NlcnZpY2Ugc2VydmVyIGRvZXMgbm90IHVzZSBUTFMgKGl0IGltcGxlbWVudHMg YSBub25zdGFuZGFyZCwgdW5zYWZlCitpc3N1ZXIgYXQgImh0dHA6Ly8xMjcuMC4wLjE6PHBvcnQ+ IiksIHNvIGxpYnBxIGluIHBhcnRpY3VsYXIgd2lsbCBuZWVkIHRvIHNldAorUEdIVFRQU0VSVklD RUJVRz1VTlNBRkUgdG8gYmUgYWJsZSB0byB0YWxrIHRvIGl0LgorCis9Y3V0CisKK3BhY2thZ2Ug UGdIdHRwU2VydmljZTo6U2VydmVyOworCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OwordXNl IFNjYWxhcjo6VXRpbDsKK3VzZSBUZXN0OjpNb3JlOworCis9cG9kCisKKz1oZWFkMSBNRVRIT0RT CisKKz1vdmVyCisKKz1pdGVtIFBnSHR0cFNlcnZpY2U6OlNlcnZlcjo6U2VydmVyLT5uZXcoKQor CitDcmVhdGUgYSBuZXcgSFRUUCBQRyBTZXJ2aWNlIFNlcnZlciBvYmplY3QuCisKKz1jdXQKKwor c3ViIG5ldworeworCW15ICRjbGFzcyA9IHNoaWZ0OworCisJbXkgJHNlbGYgPSB7fTsKKwlibGVz cygkc2VsZiwgJGNsYXNzKTsKKworCXJldHVybiAkc2VsZjsKK30KKworPXBvZAorCis9aXRlbSAk c2VydmVyLT5wb3J0KCkKKworUmV0dXJucyB0aGUgcG9ydCBpbiB1c2UgYnkgdGhlIHNlcnZlci4K KworPWN1dAorCitzdWIgcG9ydAoreworCW15ICRzZWxmID0gc2hpZnQ7CisKKwlyZXR1cm4gJHNl bGYtPnsncG9ydCd9OworfQorCis9cG9kCisKKz1pdGVtICRzZXJ2ZXItPnJ1bigpCisKK1J1bnMg dGhlIGh0dHAgcGcgc2VydmljZSBzZXJ2ZXIgZGFlbW9uIGluIHQvaHR0cF9zZXJ2aWNlX3NlcnZl ci5weS4KKworPWN1dAorCitzdWIgcnVuCit7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlteSAkc2Vy dmljZV9maWxlX3BhdGggPSBzaGlmdDsKKwlteSAkcG9ydDsKKworCXByaW50ICRFTlZ7UFlUSE9O fTsKKwlteSAkcGlkID0gb3BlbihteSAkcmVhZF9maCwgIi18IiwgInB5dGhvbiIsICJ0L2h0dHBf c2VydmljZV9zZXJ2ZXIucHkiLCAkc2VydmljZV9maWxlX3BhdGgpCisJICBvciBkaWUgImZhaWxl ZCB0byBzdGFydCBodHRwIHBnX3NlcnZpY2Ugc2VydmVyOiAkISI7CisKKwkjIEdldCB0aGUgcG9y dCBudW1iZXIgZnJvbSB0aGUgZGFlbW9uLiBJdCBjbG9zZXMgc3Rkb3V0IGFmdGVyd2FyZHM7IHRo YXQgd2F5CisJIyB3ZSBjYW4gc2x1cnAgaW4gdGhlIGVudGlyZSBjb250ZW50cyBoZXJlIHJhdGhl ciB0aGFuIHdvcnJ5aW5nIGFib3V0IHRoZQorCSMgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisJ JHBvcnQgPSBkbyB7IGxvY2FsICQvID0gdW5kZWY7IDwkcmVhZF9maD4gfQorCSAgLy8gZGllICJm YWlsZWQgdG8gcmVhZCBwb3J0IG51bWJlcjogJCEiOworCWNob21wICRwb3J0OworCWRpZSAic2Vy dmVyIGRpZCBub3QgYWR2ZXJ0aXNlIGEgdmFsaWQgcG9ydCIKKwkgIHVubGVzcyBTY2FsYXI6OlV0 aWw6Omxvb2tzX2xpa2VfbnVtYmVyKCRwb3J0KTsKKworCSRzZWxmLT57J3BpZCd9ID0gJHBpZDsK Kwkkc2VsZi0+eydwb3J0J30gPSAkcG9ydDsKKwkkc2VsZi0+eydjaGlsZCd9ID0gJHJlYWRfZmg7 CisKKwlub3RlKCJIVFRQIHBnX3NlcnZpY2UgKFBJRCAkcGlkKSBpcyBsaXN0ZW5pbmcgb24gcG9y dCAkcG9ydFxuIik7Cit9CisKKz1wb2QKKworPWl0ZW0gJHNlcnZlci0+c3RvcCgpCisKK1NlbmRz IFNJR1RFUk0gdG8gdGhlIGh0dHAgcGdfc2VydmljZSBzZXJ2ZXIgYW5kIHdhaXRzIGZvciBpdCB0 byBleGl0LgorCis9Y3V0CisKK3N1YiBzdG9wCit7CisJbXkgJHNlbGYgPSBzaGlmdDsKKworCW5v dGUoIlNlbmRpbmcgU0lHVEVSTSB0byBodHRwIHBnX3NlcnZpY2UgUElEOiAkc2VsZi0+eydwaWQn fVxuIik7CisKKwlraWxsKDE1LCAkc2VsZi0+eydwaWQnfSk7CisJJHNlbGYtPnsncGlkJ30gPSB1 bmRlZjsKKworCSMgQ2xvc2luZyB0aGUgcG9wZW4oKSBoYW5kbGUgd2FpdHMgZm9yIHRoZSBwcm9j ZXNzIHRvIGV4aXQuCisJY2xvc2UoJHNlbGYtPnsnY2hpbGQnfSk7CisJJHNlbGYtPnsnY2hpbGQn fSA9IHVuZGVmOworfQorCis9cG9kCisKKz1iYWNrCisKKz1jdXQKKworMTsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL3QvaHR0cF9zZXJ2aWNlX3NlcnZlci5w eSBiL3NyYy90ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL3QvaHR0cF9zZXJ2aWNlX3NlcnZl ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2ZkNDRmMjRkYTAK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2VydmljZS90L2h0 dHBfc2VydmljZV9zZXJ2ZXIucHkKQEAgLTAsMCArMSw3MyBAQAorIyEgL3Vzci9iaW4vZW52IHB5 dGhvbjMKKyMKKyMgQSBtb2NrIGh0dHAgcGdfc2VydmljZSBzZXJ2ZXIsIGRlc2lnbmVkIHRvIGJl IGludm9rZWQgZnJvbQorIyBQZ0h0dHBTZXJ2aWNlL1NlcnZlci5wbS4gVGhpcyBsaXN0ZW5zIG9u IGFuIGVwaGVtZXJhbCBwb3J0IG51bWJlciAocHJpbnRlZCB0byBzdGRvdXQKKyMgc28gdGhhdCB0 aGUgUGVybCB0ZXN0cyBjYW4gY29udGFjdCBpdCkgYW5kIHJ1bnMgYXMgYSBkYWVtb24gdW50aWwg aXQgaXMKKyMgc2lnbmFsZWQuCisjCisKK2ltcG9ydCBodHRwLnNlcnZlcgoraW1wb3J0IG9zCitp bXBvcnQgc3lzCitpbXBvcnQgdGV4dHdyYXAKKworCitjbGFzcyBTZXJ2aWNlRmlsZUhhbmRsZXIo aHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiCisgICAgQ29yZSBp bXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VydmljZSBmaWxlIHNlcnZlci4gVGhlIEFQSSBpcworICAg IGluaGVyaXRhbmNlLWJhc2VkLCB3aXRoIGFuIGVudHJ5IHBvaW50IGF0IGRvX0dFVCgpLiBTZWUg dGhlCisgICAgZG9jdW1lbnRhdGlvbiBmb3IgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci4KKyAgICAi IiIKKworICAgIEpzb25PYmplY3QgPSBkaWN0W3N0ciwgb2JqZWN0XSAgIyBUeXBlQWxpYXMgaXMg bm90IGF2YWlsYWJsZSB1bnRpbCAzLjEwCisKKworICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAg ICAgIHNlbGYuX3Jlc3BvbnNlX2NvZGUgPSAyMDAKKworICAgICAgICBzZWxmLl9zZW5kX3NlcnZp Y2VfZmlsZSgpCisKKyAgICBkZWYgX3NlbmRfc2VydmljZV9maWxlKHNlbGYpIC0+IE5vbmU6Cisg ICAgICAgICIiIgorICAgICAgICBTZW5kcyB0aGUgcHJvdmlkZWQgSlNPTiBkaWN0IGFzIGFuIGFw cGxpY2F0aW9uL2pzb24gcmVzcG9uc2UuCisgICAgICAgIHNlbGYuX3Jlc3BvbnNlX2NvZGUgY2Fu IGJlIG1vZGlmaWVkIHRvIHNlbmQgSlNPTiBlcnJvciByZXNwb25zZXMuCisgICAgICAgICIiIgor CisgICAgICAgIHNlcnZpY2VfZmlsZV9wYXRoID0gc3lzLmFyZ3ZbMV0gKyAiLyIgKyBzZWxmLnBh dGgKKyAgICAgICAgd2l0aCBvcGVuKHNlcnZpY2VfZmlsZV9wYXRoLCAiciIpIGFzIGZpbGU6Cisg ICAgICAgICAgICBzZXJ2aWNlX2ZpbGVfY29udGVudCA9IGZpbGUucmVhZCgpCisKKyAgICAgICAg cmVzcCA9IHNlcnZpY2VfZmlsZV9jb250ZW50LmVuY29kZSgpCisgICAgICAgIHNlbGYubG9nX21l c3NhZ2UoInNlbmRpbmcgc3RyaW5nIHJlc3BvbnNlOiAlcyIsIHJlc3ApCisKKyAgICAgICAgc2Vs Zi5zZW5kX3Jlc3BvbnNlKHNlbGYuX3Jlc3BvbnNlX2NvZGUpCisgICAgICAgIHNlbGYuc2VuZF9o ZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluIikKKyAgICAgICAgc2VsZi5zZW5kX2hl YWRlcigiQ29udGVudC1MZW5ndGgiLCBzdHIobGVuKHJlc3ApKSkKKyAgICAgICAgc2VsZi5lbmRf aGVhZGVycygpCisKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwKQorCisKK2RlZiBtYWlu KCk6CisgICAgIiIiCisgICAgU3RhcnRzIHRoZSBQZ0h0dHBTZXJ2aWNlIHNlcnZlciBvbiBsb2Nh bGhvc3QuIFRoZSBlcGhlbWVyYWwgcG9ydCBpbiB1c2Ugd2lsbAorICAgIGJlIHByaW50ZWQgdG8g c3Rkb3V0LgorICAgICIiIgorCisgICAgcyA9IGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIoKCIxMjcu MC4wLjEiLCAwKSwgU2VydmljZUZpbGVIYW5kbGVyKQorCisgICAgIyBHaXZlIHRoZSBwYXJlbnQg dGhlIHBvcnQgbnVtYmVyIHRvIGNvbnRhY3QgKHRoaXMgaXMgYWxzbyB0aGUgc2lnbmFsIHRoYXQK KyAgICAjIHdlJ3JlIHJlYWR5IHRvIHJlY2VpdmUgcmVxdWVzdHMpLgorICAgIHBvcnQgPSBzLnNv Y2tldC5nZXRzb2NrbmFtZSgpWzFdCisgICAgcHJpbnQocG9ydCkKKworICAgICMgc3Rkb3V0IGlz IGNsb3NlZCB0byBhbGxvdyB0aGUgcGFyZW50IHRvIGp1c3QgInJlYWQgdG8gdGhlIGVuZCIuCisg ICAgc3Rkb3V0ID0gc3lzLnN0ZG91dC5maWxlbm8oKQorICAgIHN5cy5zdGRvdXQuY2xvc2UoKQor ICAgIG9zLmNsb3NlKHN0ZG91dCkKKworICAgIHMuc2VydmVfZm9yZXZlcigpICAjIHdlIGV4cGVj dCBvdXIgcGFyZW50IHRvIHNlbmQgYSB0ZXJtaW5hdGlvbiBzaWduYWwKKworCitpZiBfX25hbWVf XyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQotLSAKMi41MS4yCgo= --000000000000137a84064ed18305--