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 1vv0aN-00Ghbb-17 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 22:08:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vv0aK-003gi7-32 for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 22:08:52 +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 1vv0aK-003ght-0q for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 22:08:52 +0000 Received: from mail-ua1-x929.google.com ([2607:f8b0:4864:20::929]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vv0aH-000000011S5-08N1 for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 22:08:51 +0000 Received: by mail-ua1-x929.google.com with SMTP id a1e0cc1a2514c-94dd61e0e86so336324241.1 for ; Tue, 24 Feb 2026 14:08:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771970929; cv=none; d=google.com; s=arc-20240605; b=AM35L05Y0lt5KJDeXrk83KLa+Dl5bK6cfu2ah2O8yCmkHBl4IkudqSLxT0gvC4EEbW dUoAogiprk7jiVEYsG9vFmflZ7mQjyINQQF/Fo1vimvTtiArHUdT1kVOfldj5XoU61lS 7ytsJumcUIqFDStQl7ZT6FcLf5aWeipWYNkaLu6EitpMDEbFgq53WS7zPVFObJVzCLTP FcKv1cd5gkoxjKTyzJR/9PDnLq2AaeimCwluVILqyGBHDIk4gw1ih47w5Hf/Mw+i8+ZQ 4IlnGTd1gNX2nmh7F9eQhtVZhG9IjpiMt5qxMD10HohNksq+Xt7eGdUnVgZz7Jmbyso6 Bkrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=HuWUMZFPVYr6WIfHbOFQusU+O7/2niphC4jNQWJmBFU=; fh=zjHrN0N4qcPaX0i8rdRNxx837FQdOGjP3gPoyfONeh4=; b=atIuOn74XaeJC2/5ToVPU/JypzQ8UdroTtQZhEDtonHO92JvgaAPhkH3DS/iBfgwDI KUCnzJyiIkLu/ky/ar4mVssFBnP1c1WsBR4xrE6kxMB4WgL7MKRwzFiVktqco27dqeIY Jl3QbKPxL/b4U+sgxd8l9LYPkbZk5g0Cfw9LOgpydEdYQU0tIkQcPcT6SucWZjPdh4Un b+a9/D06k47lpdksKPWh3VGXF3NbwsTmnAwbwMXWE4Ht0R+yeGFwyQ81Nqp5zmn/3hbg Nj5YbF4GknWADWsUskxtutF+jRun1sCOl7ucwuEwQSYiZsUA2/pFFjZQtcDpVlL1Xndp BwcQ==; darn=lists.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=20230601; t=1771970929; x=1772575729; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=HuWUMZFPVYr6WIfHbOFQusU+O7/2niphC4jNQWJmBFU=; b=HuMGlQV7OckB1HupntmJ8h/+JOoMnz7RGS+9EC1iw9gMiT3ZhoxoiyLoEurNGfIkLs c6GdYHwCUayIOfZQl+HjX1Mg0B+fSasl/IfYWaMjdG3LvyrIrb78kLg6kDwVBH8BEYdB 3ZhjyJWK3Un7hSjhwzC1N92+fB654xij/XxX+tCc5hdB35vXz42yfh8KxfJLhSw4OVp5 BAe56lj+eUKKrLRhHjdYtkl7kz6J5c7cbqxYGjj0kq0yrBYihXDNE4YUy4DfVt7GnYiF +G7V15pEdcN09SKWyk78HYxxQLybq9ORVrurCZ9QFVcD6DU6mN5s6IPuHSd9A3E5RQg5 xujg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771970929; x=1772575729; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=HuWUMZFPVYr6WIfHbOFQusU+O7/2niphC4jNQWJmBFU=; b=PiIqZvin7TMZ3qdLnJqla3BDiPv1gQqcyzhqvUl0lb4MBvmScrocDppbZXCBjFpGx/ t6ZCLVcwSyVstXltd9VgJIevY7ZZEr8ZubP0pvrwlbcVVQ1FKwe/JBeTIftNPtQ8BrJR C4ao4mNmCprPC5Jny+EnJyqdZzu4vAolKkIxG38ed8DPbM3WyL1NaGH1v7hhXy3wNdqb UD78cGnHFCG/O2tW4+OBFIe1nOaxlxS740ZHy7bwCxycCGTb8vO3hz2RzfThjeiPMV7G CLgfAm1rYY+1we/CYkQKWzgQ2/h4GbpROjOCOWmt1zWXhRkxibXDt6adsV4oBLhIdHGj kICQ== X-Forwarded-Encrypted: i=1; AJvYcCVpLfvZPdEU7dimDhBcT4DwxGJ6qRHtFe+n+X44Zr3gm6yb7ZpdepdvapJWR4dZMV0mL4AaJiPSICuHHDvi@lists.postgresql.org X-Gm-Message-State: AOJu0YwEt35lGrZQV0uwCFmSukeMLffD3PQWi8PC5RSaIHZjrWKviHBo +rya8uYyTWa8ekz3pywvsAU1w7KzOf4o61qw87JK+Gpvphn8S1vq/5i+59/Xp3DXG6JyEVaFEI2 ScFdo28HkAu9SCv8SZPoIucxiZfBuChU= X-Gm-Gg: ATEYQzztCgumdodDQo77wjzyxjB3RDNXeNuM2UKcFNy+YGI8M6hAOeAXV0IyjwXOx2m EwLxXbmoPPCASALAAo2nGy9Pey/UsxGqQOabL7vi3khQ6J4r6lI7qxuhVOrQxYe4xrWEif9vyd/ BYW2AEIXANASBFsOKRZqqCO0puxLmp+v67EgNCn61ojc42yL3+H3I60rNWcs16crn4ak+MTHV6A mf0q0/Iy32MSFCcNfBn9kpjKS22pj/ilk2VwzoJBi68bU7den00ddDot/Bae8b0OpjV+kVCFYUw zhjOOHS/ZY1l4RInlFmdcvHw4dca9zdVMZdDQGklWBjJC1kn X-Received: by 2002:a05:6102:c48:b0:5fe:13bc:f13a with SMTP id ada2fe7eead31-5feb30f2f8bmr5768142137.36.1771970929286; Tue, 24 Feb 2026 14:08:49 -0800 (PST) MIME-Version: 1.0 From: SATYANARAYANA NARLAPURAM Date: Tue, 24 Feb 2026 14:08:37 -0800 X-Gm-Features: AaiRm50wGiZeXJ2UwUCLFFj-3E9JAXU0QsBU82UBCLF12X8983Izu6ndhHrFFvo Message-ID: Subject: synchronized_standby_slots behavior inconsistent with quorum-based synchronous replication To: PostgreSQL-development , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000cb0559064b992197" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cb0559064b992197 Content-Type: multipart/alternative; boundary="000000000000cb0558064b992195" --000000000000cb0558064b992195 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi hackers, synchronized_standby_slots requires that every physical slot listed in the GUC has caught up before a logical failover slot is allowed to proceed with decoding. This is an ALL-of-N slots semantic. The logical slot availability model does not align with quorum replication semantics set using synchronous_standby_names which can be configured for quorum commit (ANY M of N). In a typical 3 Node HA deployment with quorum sync rep: Primary, standby1 (corresponds to sb1_slot), standby2 (corresponds to sb2_slot) synchronized_standby_slots =3D ' sb1_slot, sb2_slot' synchronous_standby_names =3D 'Any 1 ('standby1','standby2')' If standby1 goes down, synchronous commits still succeed because standby2 satisfies the quorum. However, logical decoding blocks indefinitely in WaitForStandbyConfirmation(), waiting for sb1_slot (corresponds to standby1) to catch up =E2=80=94 even though the transaction is already safe= ly committed on a quorum of synchronous standbys. This blocks logical decoding consumers from progressing and is inconsistent with the availability guarantee the DBA intended by choosing quorum commit. This scenario is constructed in the TAP test (052_synchronized_standby_slots_quorum.pl) in the attached patch. *Proposal:* Make synchronized_standby_slots quorum aware i.e. extend the GUC to accept an ANY M (slot1, slot2, ...) syntax similar to synchronous_standby_names, so StandbySlotsHaveCaughtup() can return true when M of N slots (where M <= =3D N and M >=3D 1) have caught up. I still prefer two different GUCs for this = as the list of slots to be synchronized can still be different (for example, DBA may want to ensure Geo standby to be sync before allowing the logical decoding client to read the changes). I kept synchronized_standby_slots parse logic similar to synchronous_standby_names to keep things simple. The default behavior is also not changed for synchronized_standby_slots. Added a draft patch (AI assisted). Please let me know your Thoughts. Thanks, Satya --000000000000cb0558064b992195 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Hi hackers,

synchronized_standby_slots requires= that every physical slot listed in the GUC has caught up before a logical = failover slot is allowed to proceed with decoding. This is an ALL-of-N slot= s=C2=A0 semantic.=C2=A0 The logical slot availability model does not align with quorum replication = semantics set using synchronous_standby_names which can be=C2=A0configured = for quorum commit (ANY M of N).

In a typical 3 Node HA deployment wi= th quorum sync rep:

Primary, standby1 (corresponds to sb= 1_slot), standby2 (corresponds to sb2_slot)
synchronized_standby_= slots =3D ' sb1_slot,=C2=A0 sb2_slot'
synchronous_standby_names =3D 'Any 1 ('stan= dby1','standby2')'

If standby1 goes down, synchronou= s commits still succeed because standby2 satisfies the quorum. However, log= ical decoding blocks indefinitely in WaitForStandbyConfirmation(), waiting = for sb1_slot (corresponds to standby1) to catch up =E2=80=94 even though th= e transaction is already safely committed on a quorum of synchronous standb= ys. This blocks=C2=A0logical decoding consumers from progressing and is inc= onsistent with the availability guarantee the DBA intended by choosing quor= um commit. This scenario is constructed in the TAP test (052_synchronized_standby_slots_qu= orum.pl) in the attached patch.=C2=A0


Proposal:
Make synchronized_standby_slots quorum aware i.e. extend the GUC to accep= t an ANY M (slot1, slot2, ...) syntax similar to synchronous_standby_names,= so StandbySlotsHaveCaughtup() can return true when M of N slots (where M &= lt;=3D N and M >=3D 1) have caught up. I still prefer two different GUCs= for this as the list of slots to be synchronized can still be different (f= or example, DBA may want to ensure Geo standby to be sync before allowing t= he logical decoding client to read the changes). I kept synchronized_standb= y_slots=C2=A0 parse logic similar to=C2=A0 synchronous_standby_names=C2=A0 to keep things simple. The default behavior= is also not changed for=C2=A0 synchronized_standby_slots.

Added a draft patch (AI assi= sted). Please let me know=C2=A0your Thoughts.

Thanks,
Satya
--000000000000cb0558064b992195-- --000000000000cb0559064b992197 Content-Type: application/octet-stream; name="0001-Add-quorum-support-to-synchronized_standby_slots.patch" Content-Disposition: attachment; filename="0001-Add-quorum-support-to-synchronized_standby_slots.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm157yoh0 RnJvbSA3ZjE2NGNlMjE2ODU3ZTBhMGJmYjEzNTk5MGY5OGM4NmNjZWE5YzYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSA8c2F0eWFuYXJsYXB1cmFtQGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAyNCBGZWIgMjAyNiAxMzoyODoyMCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBx dW9ydW0gc3VwcG9ydCB0byBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cwoKUHJldmlvdXNseSwg c3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgcmVxdWlyZWQgQUxMIGxpc3RlZCBwaHlzaWNhbCBz bG90cwp0byBjb25maXJtIFdBTCByZWNlaXB0IGJlZm9yZSBsb2dpY2FsIGRlY29kaW5nIGNvdWxk IHByb2NlZWQuIFRoaXMgY3JlYXRlZAphbiBhdmFpbGFiaWxpdHkgcHJvYmxlbSB3aGVuIHVzZWQg d2l0aCBxdW9ydW0tYmFzZWQgc3luY2hyb25vdXMgcmVwbGljYXRpb24KKHN5bmNocm9ub3VzX3N0 YW5kYnlfbmFtZXMgPSAnQU5ZIE4gKC4uLiknKTogYSB0cmFuc2FjdGlvbiBjb3VsZCBiZSBzYWZl bHkKY29tbWl0dGVkIHZpYSBxdW9ydW0sIHlldCBsb2dpY2FsIGRlY29kaW5nIGNvbnN1bWVycyB3 b3VsZCBzdGFsbCB3YWl0aW5nCmZvciBhIHN0YW5kYnkgdGhhdCB3YXNuJ3QgbmVlZGVkIGZvciB0 aGUgZHVyYWJpbGl0eSBndWFyYW50ZWUuCgpUaGlzIHBhdGNoIGV4dGVuZHMgc3luY2hyb25pemVk X3N0YW5kYnlfc2xvdHMgdG8gYWNjZXB0IHRoZSBzYW1lIHN5bnRheCBhcwpzeW5jaHJvbm91c19z dGFuZGJ5X25hbWVzLCByZXVzaW5nIHRoZSBzeW5jcmVwX3l5cGFyc2Uvc2Nhbm5lciBncmFtbWFy OgoKICBzbG90MSwgc2xvdDIgICAgICAgICAgICAgICAgICAgLS0gQUxMIG1vZGUgKGJhY2t3YXJk LWNvbXBhdGlibGUpCiAgQU5ZIE4gKHNsb3QxLCBzbG90MiwgLi4uKSAgICAgIC0tIHF1b3J1bTog Ti1vZi1NIHNsb3RzIHN1ZmZpY2UKICBGSVJTVCBOIChzbG90MSwgc2xvdDIsIC4uLikgICAgLS0g cHJpb3JpdHk6IEFMTCBzbG90cyByZXF1aXJlZAoKS2V5IGNoYW5nZXM6CgotIFN5bmNTdGFuZGJ5 U2xvdHNDb25maWdEYXRhIG5vdyBtaXJyb3JzIFN5bmNSZXBDb25maWdEYXRhIHdpdGggbnVtX3N5 bmMsCiAgc3luY3JlcF9tZXRob2QgKFNZTkNfUkVQX1BSSU9SSVRZIC8gU1lOQ19SRVBfUVVPUlVN KSwgYW5kIG5zbG90bmFtZXMuCgotIGNoZWNrX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzKCkg cmV1c2VzIHN5bmNyZXBfeXlwYXJzZSgpIGFuZAogIHN5bmNyZXBfc2Nhbm5lcl9pbml0L2Zpbmlz aCgpIGZvciBwYXJzaW5nLiAgQWZ0ZXIgcGFyc2luZywgaXQgdmFsaWRhdGVzCiAgZWFjaCBtZW1i ZXIgbmFtZSBhcyBhIGxlZ2FsIHJlcGxpY2F0aW9uIHNsb3QgbmFtZSBhbmQgcmVqZWN0cwogIG51 bV9zeW5jID4gbm1lbWJlcnMuCgotIFN0YW5kYnlTbG90c0hhdmVDYXVnaHR1cCgpIGluIFFVT1JV TSBtb2RlIGNvbnRpbnVlcyBwYXN0IGxhZ2dpbmcgc2xvdHMKICB0byBjb3VudCBjYXVnaHQtdXAg b25lcywgcmV0dXJuaW5nIHRydWUgb25jZSBudW1fc3luYyBhcmUgc2F0aXNmaWVkLgogIEluIFBS SU9SSVRZIG1vZGUgKHRoZSBkZWZhdWx0KSwgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbAogIGJy ZWFrLW9uLWZpcnN0LWxhZ2dpbmctc2xvdCBiZWhhdmlvciByZXF1aXJpbmcgYWxsIHNsb3RzLgoK LSBEb2N1bWVudGF0aW9uIHVwZGF0ZWQgd2l0aCBmb3JtYWwgc3lub3BzaXMsIEZJUlNUL0FOWS9w bGFpbi1saXN0CiAgZXhwbGFuYXRpb25zLCBleGFtcGxlcywgYW5kIGNyb3NzLXJlZmVyZW5jZSB0 byBzeW5jaHJvbm91c19zdGFuZGJ5X25hbWVzLgoKLSBOZXcgVEFQIHRlc3QgKDA1Ml9zeW5jaHJv bml6ZWRfc3RhbmRieV9zbG90c19xdW9ydW0ucGwpIHdpdGggMTEgc3VidGVzdHMKICBjb3Zlcmlu ZyBBTEwtbW9kZSBibG9ja2luZywgQU5ZLW1vZGUgcXVvcnVtLCBGSVJTVCBOLCBiYWNrd2FyZCBj b21wYXQsCiAgcmVjb3Zlcnkgc2NlbmFyaW9zLCBhbmQgR1VDIHZhbGlkYXRpb24gb2YgaW52YWxp ZCB2YWx1ZXMuCi0tLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAg ICAgIHwgIDY3ICsrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAg ICAgICB8IDI0MCArKysrKysrKystLS0tLQogLi4uLzA1Ml9zeW5jaHJvbml6ZWRfc3RhbmRieV9z bG90c19xdW9ydW0ucGwgIHwgMzAzICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2Vk LCA1MTkgaW5zZXJ0aW9ucygrKSwgOTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTJfc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfcXVvcnVt LnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sCmluZGV4IGY2NzBlMmQ0YzMxLi45OTE3ZDVjZTcwZCAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApA QCAtNDk0OSwxNyArNDk0OSw2NCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC90 ZXJtPgogICAgICAgPGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgotICAgICAgICBBIGNvbW1hLXNl cGFyYXRlZCBsaXN0IG9mIHN0cmVhbWluZyByZXBsaWNhdGlvbiBzdGFuZGJ5IHNlcnZlciBzbG90 IG5hbWVzCi0gICAgICAgIHRoYXQgbG9naWNhbCBXQUwgc2VuZGVyIHByb2Nlc3NlcyB3aWxsIHdh aXQgZm9yLiBMb2dpY2FsIFdBTCBzZW5kZXIgcHJvY2Vzc2VzCi0gICAgICAgIHdpbGwgc2VuZCBk ZWNvZGVkIGNoYW5nZXMgdG8gcGx1Z2lucyBvbmx5IGFmdGVyIHRoZSBzcGVjaWZpZWQgcmVwbGlj YXRpb24KLSAgICAgICAgc2xvdHMgY29uZmlybSByZWNlaXZpbmcgV0FMLiBUaGlzIGd1YXJhbnRl ZXMgdGhhdCBsb2dpY2FsIHJlcGxpY2F0aW9uCisgICAgICAgIFNwZWNpZmllcyB3aGljaCBzdHJl YW1pbmcgcmVwbGljYXRpb24gc3RhbmRieSBzZXJ2ZXIgc2xvdHMgbG9naWNhbCBXQUwKKyAgICAg ICAgc2VuZGVyIHByb2Nlc3NlcyBtdXN0IHdhaXQgZm9yIGJlZm9yZSBkZWxpdmVyaW5nIGRlY29k ZWQgY2hhbmdlcy4gVGhpcworICAgICAgICBwYXJhbWV0ZXIgdXNlcyB0aGUgc2FtZSBzeW50YXgg YXMKKyAgICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLXN5bmNocm9ub3VzLXN0YW5kYnktbmFtZXMi Lz46Cis8c3lub3BzaXM+CitbRklSU1RdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u dW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNs b3RfbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKQorQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnNsb3RfbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKQorPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnNsb3RfbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0KKzwvc3lu b3BzaXM+CisgICAgICAgIHdoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1f c3luYzwvcmVwbGFjZWFibGU+IGlzCisgICAgICAgIHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgcmVw bGljYXRpb24gc2xvdHMgdGhhdCBtdXN0IGNvbmZpcm0gV0FMCisgICAgICAgIHJlY2VpcHQgYmVm b3JlIGxvZ2ljYWwgZGVjb2RpbmcgcHJvY2VlZHMsCisgICAgICAgIGFuZCA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+c2xvdF9uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgaXMgdGhl IG5hbWUgb2YgYSBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90LgorICAgICAgICA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPgorICAgICAgICBtdXN0 IGJlIGFuIGludGVnZXIgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIG11c3Qgbm90IGV4Y2Vl ZCB0aGUKKyAgICAgICAgbnVtYmVyIG9mIGxpc3RlZCBzbG90cy4KKyAgICAgICA8L3BhcmE+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBrZXl3b3JkIDxsaXRlcmFsPkZJUlNUPC9saXRlcmFs PiwgY291cGxlZCB3aXRoCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u dW1fc3luYzwvcmVwbGFjZWFibGU+LCBzcGVjaWZpZXMKKyAgICAgICAgcHJpb3JpdHktYmFzZWQg c2VtYW50aWNzLiBMb2dpY2FsIGRlY29kaW5nIHdpbGwgd2FpdCB1bnRpbAorICAgICAgICA8ZW1w aGFzaXM+YWxsPC9lbXBoYXNpcz4gbGlzdGVkIHBoeXNpY2FsIHNsb3RzIGhhdmUgY29uZmlybWVk IFdBTAorICAgICAgICByZWNlaXB0IHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIEEgcGxh aW4gY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aG91dCBhIGtleXdvcmQgaXMgZXF1aXZhbGVudCB0 bworICAgICAgICA8bGl0ZXJhbD5GSVJTVCAxICguLi4pPC9saXRlcmFsPiBhbmQgdGhlcmVmb3Jl IGFsc28gcmVxdWlyZXMgYWxsCisgICAgICAgIGxpc3RlZCBzbG90cy4KKyAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBrZXl3b3JkIDxsaXRlcmFsPkFOWTwvbGl0ZXJh bD4sIGNvdXBsZWQgd2l0aAorICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiwgc3BlY2lmaWVzCisgICAgICAgIHF1b3J1bS1iYXNlZCBz ZW1hbnRpY3MuIExvZ2ljYWwgZGVjb2RpbmcgcHJvY2VlZHMgb25jZSBhdCBsZWFzdAorICAgICAg ICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiBv ZiB0aGUgbGlzdGVkCisgICAgICAgIHNsb3RzIGhhdmUgY2F1Z2h0IHVwLgorICAgICAgICBGb3Ig ZXhhbXBsZSwgYSBzZXR0aW5nIG9mIDxsaXRlcmFsPkFOWSAxIChzYjFfc2xvdCwgc2IyX3Nsb3Qp PC9saXRlcmFsPgorICAgICAgICB3aWxsIGFsbG93IGxvZ2ljYWwgZGVjb2RpbmcgdG8gcHJvY2Vl ZCBhcyBzb29uIGFzIGVpdGhlciBwaHlzaWNhbCBzbG90CisgICAgICAgIGhhcyBjb25maXJtZWQg V0FMIHJlY2VpcHQuIFRoaXMgaXMgdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAg cXVvcnVtLWJhc2VkIHN5bmNocm9ub3VzIHJlcGxpY2F0aW9uCisgICAgICAgICg8bGl0ZXJhbD5z eW5jaHJvbm91c19zdGFuZGJ5X25hbWVzID0gJ0FOWSAuLi4nPC9saXRlcmFsPiksIHNvIHRoYXQK KyAgICAgICAgbG9naWNhbCBkZWNvZGluZyBhdmFpbGFiaWxpdHkgbWF0Y2hlcyB0aGUgY29tbWl0 IGR1cmFiaWxpdHkgZ3VhcmFudGVlLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgPGxpdGVyYWw+RklSU1Q8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5BTlk8L2xpdGVyYWw+ IGFyZSBjYXNlLWluc2Vuc2l0aXZlLgorICAgICAgICBJZiB0aGVzZSBrZXl3b3JkcyBhcmUgdXNl ZCBhcyB0aGUgbmFtZSBvZiBhIHJlcGxpY2F0aW9uIHNsb3QsCisgICAgICAgIHRoZSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2xvdF9uYW1lPC9yZXBsYWNlYWJsZT4gbXVzdAorICAg ICAgICBiZSBkb3VibGUtcXVvdGVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgVGhpcyBndWFyYW50ZWVzIHRoYXQgbG9naWNhbCByZXBsaWNhdGlvbgogICAgICAgICBm YWlsb3ZlciBzbG90cyBkbyBub3QgY29uc3VtZSBjaGFuZ2VzIHVudGlsIHRob3NlIGNoYW5nZXMg YXJlIHJlY2VpdmVkCi0gICAgICAgIGFuZCBmbHVzaGVkIHRvIGNvcnJlc3BvbmRpbmcgcGh5c2lj YWwgc3RhbmRieXMuIElmIGEKKyAgICAgICAgYW5kIGZsdXNoZWQgdG8gdGhlIHJlcXVpcmVkIHBo eXNpY2FsIHN0YW5kYnlzLiBJZiBhCiAgICAgICAgIGxvZ2ljYWwgcmVwbGljYXRpb24gY29ubmVj dGlvbiBpcyBtZWFudCB0byBzd2l0Y2ggdG8gYSBwaHlzaWNhbCBzdGFuZGJ5CiAgICAgICAgIGFm dGVyIHRoZSBzdGFuZGJ5IGlzIHByb21vdGVkLCB0aGUgcGh5c2ljYWwgcmVwbGljYXRpb24gc2xv dCBmb3IgdGhlCiAgICAgICAgIHN0YW5kYnkgc2hvdWxkIGJlIGxpc3RlZCBoZXJlLiBOb3RlIHRo YXQgbG9naWNhbCByZXBsaWNhdGlvbiB3aWxsIG5vdAotICAgICAgICBwcm9jZWVkIGlmIHRoZSBz bG90cyBzcGVjaWZpZWQgaW4gdGhlCi0gICAgICAgIDx2YXJuYW1lPnN5bmNocm9uaXplZF9zdGFu ZGJ5X3Nsb3RzPC92YXJuYW1lPiBkbyBub3QgZXhpc3Qgb3IgYXJlIGludmFsaWRhdGVkLgorICAg ICAgICBwcm9jZWVkIGlmIHRoZSBzbG90cyBzcGVjaWZpZWQgaW4KKyAgICAgICAgPHZhcm5hbWU+ c3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHM8L3Zhcm5hbWU+IGRvIG5vdCBleGlzdCBvciBhcmUK KyAgICAgICAgaW52YWxpZGF0ZWQuCiAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHJlcGxpY2F0 aW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zCiAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBnLXJlcGxp Y2F0aW9uLXNsb3QtYWR2YW5jZSI+CiAgICAgICAgIDxmdW5jdGlvbj5wZ19yZXBsaWNhdGlvbl9z bG90X2FkdmFuY2U8L2Z1bmN0aW9uPjwvbGluaz4sCkBAIC00OTY3LDkgKzUwMTQsOSBAQCBBTlkg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8 cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgICA8ZnVuY3Rpb24+cGdfbG9naWNhbF9zbG90X2dl dF9jaGFuZ2VzPC9mdW5jdGlvbj48L2xpbms+LCBhbmQKICAgICAgICAgPGxpbmsgbGlua2VuZD0i cGctbG9naWNhbC1zbG90LXBlZWstY2hhbmdlcyI+CiAgICAgICAgIDxmdW5jdGlvbj5wZ19sb2dp Y2FsX3Nsb3RfcGVla19jaGFuZ2VzPC9mdW5jdGlvbj48L2xpbms+LAotICAgICAgICB3aGVuIHVz ZWQgd2l0aCBsb2dpY2FsIGZhaWxvdmVyIHNsb3RzLCB3aWxsIGJsb2NrIHVudGlsIGFsbAotICAg ICAgICBwaHlzaWNhbCBzbG90cyBzcGVjaWZpZWQgaW4gPHZhcm5hbWU+c3luY2hyb25pemVkX3N0 YW5kYnlfc2xvdHM8L3Zhcm5hbWU+IGhhdmUKLSAgICAgICAgY29uZmlybWVkIFdBTCByZWNlaXB0 LgorICAgICAgICB3aGVuIHVzZWQgd2l0aCBsb2dpY2FsIGZhaWxvdmVyIHNsb3RzLCB3aWxsIGJs b2NrIHVudGlsIHRoZSByZXF1aXJlZAorICAgICAgICBwaHlzaWNhbCBzbG90cyBzcGVjaWZpZWQg aW4gPHZhcm5hbWU+c3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHM8L3Zhcm5hbWU+CisgICAgICAg IGhhdmUgY29uZmlybWVkIFdBTCByZWNlaXB0LgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFy YT4KICAgICAgICAgVGhlIHN0YW5kYnlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBoeXNpY2FsIHJl cGxpY2F0aW9uIHNsb3RzIGluCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9z bG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5kZXggMjhjNzAxOTQwMmIu LjU1MDllMTU1ODZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCkBAIC01MCw2ICs1MCw3IEBACiAj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vc2xvdHN5bmMuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCisjaW5jbHVk ZSAicmVwbGljYXRpb24vc3luY3JlcC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRl cl9wcml2YXRlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv aXBjLmgiCkBAIC04OSwxMSArOTAsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVwbGljYXRpb25TbG90 T25EaXNrCiAgKiBOb3RlOiB0aGlzIG11c3QgYmUgYSBmbGF0IHJlcHJlc2VudGF0aW9uIHRoYXQg Y2FuIGJlIGhlbGQgaW4gYSBzaW5nbGUgY2h1bmsKICAqIG9mIGd1Y19tYWxsb2MnZCBtZW1vcnks IHNvIHRoYXQgaXQgY2FuIGJlIHN0b3JlZCBhcyB0aGUgImV4dHJhIiBkYXRhIGZvciB0aGUKICAq IHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIEdVQy4KKyAqCisgKiBUaGUgbGF5b3V0IG1pcnJv cnMgU3luY1JlcENvbmZpZ0RhdGEgc28gdGhhdCB0aGUgc2FtZSBxdW9ydW0gLyBwcmlvcml0eQor ICogc2VtYW50aWNzIGNhbiBiZSBleHByZXNzZWQuICBUaGUgc3luY3JlcF9tZXRob2QgZmllbGQg dXNlcyB0aGUKKyAqIFNZTkNfUkVQX1BSSU9SSVRZIGFuZCBTWU5DX1JFUF9RVU9SVU0gY29uc3Rh bnRzIGZyb20gc3luY3JlcC5oLgogICovCiB0eXBlZGVmIHN0cnVjdAogewotCS8qIE51bWJlciBv ZiBzbG90IG5hbWVzIGluIHRoZSBzbG90X25hbWVzW10gKi8KLQlpbnQJCQluc2xvdG5hbWVzOwor CWludAkJCWNvbmZpZ19zaXplOwkvKiB0b3RhbCBzaXplIG9mIHRoaXMgc3RydWN0LCBpbiBieXRl cyAqLworCWludAkJCW51bV9zeW5jOwkJLyogbnVtYmVyIG9mIHNsb3RzIHRoYXQgbXVzdCBjb25m aXJtIFdBTAorCQkJCQkJCQkgKiByZWNlaXB0IGJlZm9yZSBsb2dpY2FsIGRlY29kaW5nIHByb2Nl ZWRzICovCisJdWludDgJCXN5bmNyZXBfbWV0aG9kOwkvKiBTWU5DX1JFUF9QUklPUklUWSBvciBT WU5DX1JFUF9RVU9SVU0gKi8KKwlpbnQJCQluc2xvdG5hbWVzOwkJLyogbnVtYmVyIG9mIHNsb3Qg bmFtZXMgdGhhdCBmb2xsb3cgKi8KIAogCS8qCiAJICogc2xvdF9uYW1lcyBjb250YWlucyAnbnNs b3RuYW1lcycgY29uc2VjdXRpdmUgbnVsbC10ZXJtaW5hdGVkIEMgc3RyaW5ncy4KQEAgLTI5NDYs OTQgKzI5NTQsMTMxIEBAIEdldFNsb3RJbnZhbGlkYXRpb25DYXVzZU5hbWUoUmVwbGljYXRpb25T bG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UpCiB9CiAKIC8qCi0gKiBBIGhlbHBlciBmdW5jdGlv biB0byB2YWxpZGF0ZSBzbG90cyBzcGVjaWZpZWQgaW4gR1VDIHN5bmNocm9uaXplZF9zdGFuZGJ5 X3Nsb3RzLgorICogR1VDIGNoZWNrX2hvb2sgZm9yIHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3Rz CisgKgorICogVGhpcyByZXVzZXMgdGhlIHN5bmNyZXBfeXlwYXJzZSAvIHN5bmNyZXBfc2Nhbm5l ciBpbmZyYXN0cnVjdHVyZSB0aGF0IGlzCisgKiBhbHNvIHVzZWQgZm9yIHN5bmNocm9ub3VzX3N0 YW5kYnlfbmFtZXMsIHNvIHRoZSBzYW1lIHN5bnRheCBpcyBhY2NlcHRlZDoKICAqCi0gKiBUaGUg cmF3bmFtZSB3aWxsIGJlIHBhcnNlZCwgYW5kIHRoZSByZXN1bHQgd2lsbCBiZSBzYXZlZCBpbnRv ICplbGVtbGlzdC4KKyAqICAgc2xvdDEsIHNsb3QyICAgICAgICAgICAgICAgICAgIC0tIHdhaXQg Zm9yIEFMTCBsaXN0ZWQgc2xvdHMgKEZJUlNUIDEpCisgKiAgIEFOWSBOIChzbG90MSwgc2xvdDIs IC4uLikgICAgICAtLSB3YWl0IGZvciBOLW9mLU0gKHF1b3J1bSkKKyAqICAgRklSU1QgTiAoc2xv dDEsIHNsb3QyLCAuLi4pICAgIC0tIHdhaXQgZm9yIGZpcnN0IE4gaW4gcHJpb3JpdHkgb3JkZXIK KyAqCisgKiBBZnRlciBwYXJzaW5nLCB3ZSBhZGRpdGlvbmFsbHkgdmFsaWRhdGUgZXZlcnkgbmFt ZSBhcyBhIGxlZ2FsIHJlcGxpY2F0aW9uCisgKiBzbG90IG5hbWUuCiAgKi8KLXN0YXRpYyBib29s Ci12YWxpZGF0ZV9zeW5jX3N0YW5kYnlfc2xvdHMoY2hhciAqcmF3bmFtZSwgTGlzdCAqKmVsZW1s aXN0KQorYm9vbAorY2hlY2tfc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMoY2hhciAqKm5ld3Zh bCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogewotCS8qIFZlcmlmeSBzeW50YXgg YW5kIHBhcnNlIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBpZGVudGlmaWVycyAqLwotCWlmICghU3Bs aXRJZGVudGlmaWVyU3RyaW5nKHJhd25hbWUsICcsJywgZWxlbWxpc3QpKQotCXsKLQkJR1VDX2No ZWNrX2VycmRldGFpbCgiTGlzdCBzeW50YXggaXMgaW52YWxpZC4iKTsKLQkJcmV0dXJuIGZhbHNl OwotCX0KKwljaGFyCSAgICpwdHI7CisJaW50CQkJc2l6ZTsKKwlTeW5jU3RhbmRieVNsb3RzQ29u ZmlnRGF0YSAqY29uZmlnOworCisJaWYgKCgqbmV3dmFsKVswXSA9PSAnXDAnKQorCQlyZXR1cm4g dHJ1ZTsKIAotCS8qIEl0ZXJhdGUgdGhlIGxpc3QgdG8gdmFsaWRhdGUgZWFjaCBzbG90IG5hbWUg Ki8KLQlmb3JlYWNoX3B0cihjaGFyLCBuYW1lLCAqZWxlbWxpc3QpCisJLyogcGFyc2Ugd2l0aCB0 aGUgc3luY3JlcCBncmFtbWFyICovCiAJewotCQlpbnQJCQllcnJfY29kZTsKLQkJY2hhcgkgICAq ZXJyX21zZyA9IE5VTEw7Ci0JCWNoYXIJICAgKmVycl9oaW50ID0gTlVMTDsKKwkJeXlzY2FuX3QJ c2Nhbm5lcjsKKwkJaW50CQkJcGFyc2VfcmM7CisJCVN5bmNSZXBDb25maWdEYXRhICpzeW5jcmVw X3BhcnNlX3Jlc3VsdCA9IE5VTEw7CisJCWNoYXIJICAgKnN5bmNyZXBfcGFyc2VfZXJyb3JfbXNn ID0gTlVMTDsKKworCQlzeW5jcmVwX3NjYW5uZXJfaW5pdCgqbmV3dmFsLCAmc2Nhbm5lcik7CisJ CXBhcnNlX3JjID0gc3luY3JlcF95eXBhcnNlKCZzeW5jcmVwX3BhcnNlX3Jlc3VsdCwKKwkJCQkJ CQkJICAgJnN5bmNyZXBfcGFyc2VfZXJyb3JfbXNnLAorCQkJCQkJCQkgICBzY2FubmVyKTsKKwkJ c3luY3JlcF9zY2FubmVyX2ZpbmlzaChzY2FubmVyKTsKKworCQlpZiAocGFyc2VfcmMgIT0gMCB8 fCBzeW5jcmVwX3BhcnNlX3Jlc3VsdCA9PSBOVUxMKQorCQl7CisJCQlHVUNfY2hlY2tfZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUik7CisJCQlpZiAoc3luY3JlcF9wYXJzZV9lcnJvcl9tc2cp CisJCQkJR1VDX2NoZWNrX2VycmRldGFpbCgiJXMiLCBzeW5jcmVwX3BhcnNlX2Vycm9yX21zZyk7 CisJCQllbHNlCisJCQkJR1VDX2NoZWNrX2VycmRldGFpbCgiXCIlc1wiIHBhcnNlciBmYWlsZWQu IiwKKwkJCQkJCQkJCSJzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyIpOworCQkJcmV0dXJuIGZh bHNlOworCQl9CiAKLQkJaWYgKCFSZXBsaWNhdGlvblNsb3RWYWxpZGF0ZU5hbWVJbnRlcm5hbChu YW1lLCBmYWxzZSwgJmVycl9jb2RlLAotCQkJCQkJCQkJCQkJICZlcnJfbXNnLCAmZXJyX2hpbnQp KQorCQlpZiAoc3luY3JlcF9wYXJzZV9yZXN1bHQtPm51bV9zeW5jIDw9IDApCiAJCXsKLQkJCUdV Q19jaGVja19lcnJjb2RlKGVycl9jb2RlKTsKLQkJCUdVQ19jaGVja19lcnJkZXRhaWwoIiVzIiwg ZXJyX21zZyk7Ci0JCQlpZiAoZXJyX2hpbnQgIT0gTlVMTCkKLQkJCQlHVUNfY2hlY2tfZXJyaGlu dCgiJXMiLCBlcnJfaGludCk7CisJCQlHVUNfY2hlY2tfZXJybXNnKCJudW1iZXIgb2Ygc3luY2hy b25pemVkIHN0YW5kYnkgc2xvdHMgKCVkKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIiwKKwkJ CQkJCQkgc3luY3JlcF9wYXJzZV9yZXN1bHQtPm51bV9zeW5jKTsKIAkJCXJldHVybiBmYWxzZTsK IAkJfQotCX0KIAotCXJldHVybiB0cnVlOwotfQorCQkvKiBSZWplY3QgbnVtX3N5bmMgPiBubWVt YmVycyDigJQgaXQgY2FuIG5ldmVyIGJlIHNhdGlzZmllZCAqLworCQlpZiAoc3luY3JlcF9wYXJz ZV9yZXN1bHQtPm51bV9zeW5jID4gc3luY3JlcF9wYXJzZV9yZXN1bHQtPm5tZW1iZXJzKQorCQl7 CisJCQlHVUNfY2hlY2tfZXJybXNnKCJudW1iZXIgb2Ygc3luY2hyb25pemVkIHN0YW5kYnkgc2xv dHMgKCVkKSBtdXN0IG5vdCBleGNlZWQgdGhlIG51bWJlciBvZiBsaXN0ZWQgc2xvdHMgKCVkKSIs CisJCQkJCQkJIHN5bmNyZXBfcGFyc2VfcmVzdWx0LT5udW1fc3luYywKKwkJCQkJCQkgc3luY3Jl cF9wYXJzZV9yZXN1bHQtPm5tZW1iZXJzKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQogCi0vKgot ICogR1VDIGNoZWNrX2hvb2sgZm9yIHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzCi0gKi8KLWJv b2wKLWNoZWNrX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzKGNoYXIgKipuZXd2YWwsIHZvaWQg KipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKLXsKLQljaGFyCSAgICpyYXduYW1lOwotCWNoYXIJ ICAgKnB0cjsKLQlMaXN0CSAgICplbGVtbGlzdDsKLQlpbnQJCQlzaXplOwotCWJvb2wJCW9rOwot CVN5bmNTdGFuZGJ5U2xvdHNDb25maWdEYXRhICpjb25maWc7CisJCS8qIHZhbGlkYXRlIGV2ZXJ5 IG1lbWJlciBuYW1lIGFzIGEgc2xvdCBuYW1lICovCisJCXsKKwkJCWNvbnN0IGNoYXIgKm1uYW1l ID0gc3luY3JlcF9wYXJzZV9yZXN1bHQtPm1lbWJlcl9uYW1lczsKIAotCWlmICgoKm5ld3ZhbClb MF0gPT0gJ1wwJykKLQkJcmV0dXJuIHRydWU7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IHN5bmNy ZXBfcGFyc2VfcmVzdWx0LT5ubWVtYmVyczsgaSsrKQorCQkJeworCQkJCWludAkJCWVycl9jb2Rl OworCQkJCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOworCQkJCWNoYXIJICAgKmVycl9oaW50ID0g TlVMTDsKKworCQkJCWlmICghUmVwbGljYXRpb25TbG90VmFsaWRhdGVOYW1lSW50ZXJuYWwobW5h bWUsIGZhbHNlLCAmZXJyX2NvZGUsCisJCQkJCQkJCQkJCQkJCSAmZXJyX21zZywgJmVycl9oaW50 KSkKKwkJCQl7CisJCQkJCUdVQ19jaGVja19lcnJjb2RlKGVycl9jb2RlKTsKKwkJCQkJR1VDX2No ZWNrX2VycmRldGFpbCgiJXMiLCBlcnJfbXNnKTsKKwkJCQkJaWYgKGVycl9oaW50ICE9IE5VTEwp CisJCQkJCQlHVUNfY2hlY2tfZXJyaGludCgiJXMiLCBlcnJfaGludCk7CisJCQkJCXJldHVybiBm YWxzZTsKKwkJCQl9CisKKwkJCQltbmFtZSArPSBzdHJsZW4obW5hbWUpICsgMTsKKwkJCX0KKwkJ fQogCi0JLyogTmVlZCBhIG1vZGlmaWFibGUgY29weSBvZiB0aGUgR1VDIHN0cmluZyAqLwotCXJh d25hbWUgPSBwc3RyZHVwKCpuZXd2YWwpOworCQkvKiBidWlsZCBTeW5jU3RhbmRieVNsb3RzQ29u ZmlnRGF0YSBmcm9tIHRoZSBwYXJzZWQgU3luY1JlcENvbmZpZ0RhdGEgKi8KKwkJc2l6ZSA9IG9m ZnNldG9mKFN5bmNTdGFuZGJ5U2xvdHNDb25maWdEYXRhLCBzbG90X25hbWVzKTsKKwkJeworCQkJ Y29uc3QgY2hhciAqbW5hbWUgPSBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+bWVtYmVyX25hbWVzOwog Ci0JLyogTm93IHZlcmlmeSBpZiB0aGUgc3BlY2lmaWVkIHNsb3RzIGV4aXN0IGFuZCBoYXZlIGNv cnJlY3QgdHlwZSAqLwotCW9rID0gdmFsaWRhdGVfc3luY19zdGFuZGJ5X3Nsb3RzKHJhd25hbWUs ICZlbGVtbGlzdCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IHN5bmNyZXBfcGFyc2VfcmVzdWx0 LT5ubWVtYmVyczsgaSsrKQorCQkJeworCQkJCXNpemUgKz0gc3RybGVuKG1uYW1lKSArIDE7CisJ CQkJbW5hbWUgKz0gc3RybGVuKG1uYW1lKSArIDE7CisJCQl9CisJCX0KIAotCWlmICghb2sgfHwg ZWxlbWxpc3QgPT0gTklMKQotCXsKLQkJcGZyZWUocmF3bmFtZSk7Ci0JCWxpc3RfZnJlZShlbGVt bGlzdCk7Ci0JCXJldHVybiBvazsKLQl9CisJCS8qIEdVQyBleHRyYSB2YWx1ZSBtdXN0IGJlIGd1 Y19tYWxsb2MnZCwgbm90IHBhbGxvYydkICovCisJCWNvbmZpZyA9IChTeW5jU3RhbmRieVNsb3Rz Q29uZmlnRGF0YSAqKSBndWNfbWFsbG9jKExPRywgc2l6ZSk7CisJCWlmICghY29uZmlnKQorCQkJ cmV0dXJuIGZhbHNlOwogCi0JLyogQ29tcHV0ZSB0aGUgc2l6ZSByZXF1aXJlZCBmb3IgdGhlIFN5 bmNTdGFuZGJ5U2xvdHNDb25maWdEYXRhIHN0cnVjdCAqLwotCXNpemUgPSBvZmZzZXRvZihTeW5j U3RhbmRieVNsb3RzQ29uZmlnRGF0YSwgc2xvdF9uYW1lcyk7Ci0JZm9yZWFjaF9wdHIoY2hhciwg c2xvdF9uYW1lLCBlbGVtbGlzdCkKLQkJc2l6ZSArPSBzdHJsZW4oc2xvdF9uYW1lKSArIDE7CisJ CWNvbmZpZy0+Y29uZmlnX3NpemUgPSBzaXplOworCQljb25maWctPm51bV9zeW5jID0gc3luY3Jl cF9wYXJzZV9yZXN1bHQtPm51bV9zeW5jOworCQljb25maWctPnN5bmNyZXBfbWV0aG9kID0gc3lu Y3JlcF9wYXJzZV9yZXN1bHQtPnN5bmNyZXBfbWV0aG9kOworCQljb25maWctPm5zbG90bmFtZXMg PSBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+bm1lbWJlcnM7CiAKLQkvKiBHVUMgZXh0cmEgdmFsdWUg bXVzdCBiZSBndWNfbWFsbG9jJ2QsIG5vdCBwYWxsb2MnZCAqLwotCWNvbmZpZyA9IChTeW5jU3Rh bmRieVNsb3RzQ29uZmlnRGF0YSAqKSBndWNfbWFsbG9jKExPRywgc2l6ZSk7Ci0JaWYgKCFjb25m aWcpCi0JCXJldHVybiBmYWxzZTsKKwkJLyogQ29weSBtZW1iZXIgbmFtZXMgaW50byB0aGUgZmxh dCBzbG90X25hbWVzIGFycmF5ICovCisJCXsKKwkJCWNvbnN0IGNoYXIgKm1uYW1lID0gc3luY3Jl cF9wYXJzZV9yZXN1bHQtPm1lbWJlcl9uYW1lczsKIAotCS8qIFRyYW5zZm9ybSB0aGUgZGF0YSBp bnRvIFN5bmNTdGFuZGJ5U2xvdHNDb25maWdEYXRhICovCi0JY29uZmlnLT5uc2xvdG5hbWVzID0g bGlzdF9sZW5ndGgoZWxlbWxpc3QpOworCQkJcHRyID0gY29uZmlnLT5zbG90X25hbWVzOworCQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+bm1lbWJlcnM7IGkrKykK KwkJCXsKKwkJCQlpbnQJCQlsZW4gPSBzdHJsZW4obW5hbWUpICsgMTsKIAotCXB0ciA9IGNvbmZp Zy0+c2xvdF9uYW1lczsKLQlmb3JlYWNoX3B0cihjaGFyLCBzbG90X25hbWUsIGVsZW1saXN0KQot CXsKLQkJc3RyY3B5KHB0ciwgc2xvdF9uYW1lKTsKLQkJcHRyICs9IHN0cmxlbihzbG90X25hbWUp ICsgMTsKKwkJCQltZW1jcHkocHRyLCBtbmFtZSwgbGVuKTsKKwkJCQlwdHIgKz0gbGVuOworCQkJ CW1uYW1lICs9IGxlbjsKKwkJCX0KKwkJfQogCX0KIAogCSpleHRyYSA9IGNvbmZpZzsKLQotCXBm cmVlKHJhd25hbWUpOwotCWxpc3RfZnJlZShlbGVtbGlzdCk7CiAJcmV0dXJuIHRydWU7CiB9CiAK QEAgLTMwOTQsNiArMzEzOSw3IEBAIFN0YW5kYnlTbG90c0hhdmVDYXVnaHR1cChYTG9nUmVjUHRy IHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCkKIAljb25zdCBjaGFyICpuYW1lOwogCWludAkJCWNh dWdodF91cF9zbG90X251bSA9IDA7CiAJWExvZ1JlY1B0cgltaW5fcmVzdGFydF9sc24gPSBJbnZh bGlkWExvZ1JlY1B0cjsKKwlib29sCQlxdW9ydW1fbW9kZTsKIAogCS8qCiAJICogRG9uJ3QgbmVl ZCB0byB3YWl0IGZvciB0aGUgc3RhbmRieXMgdG8gY2F0Y2ggdXAgaWYgdGhlcmUgaXMgbm8gdmFs dWUgaW4KQEAgLTMxMjEsNiArMzE2NywxNSBAQCBTdGFuZGJ5U2xvdHNIYXZlQ2F1Z2h0dXAoWExv Z1JlY1B0ciB3YWl0X2Zvcl9sc24sIGludCBlbGV2ZWwpCiAJICogVG8gcHJldmVudCBjb25jdXJy ZW50IHNsb3QgZHJvcHBpbmcgYW5kIGNyZWF0aW9uIHdoaWxlIGZpbHRlcmluZyB0aGUKIAkgKiBz bG90cywgdGFrZSB0aGUgUmVwbGljYXRpb25TbG90Q29udHJvbExvY2sgb3V0c2lkZSBvZiB0aGUg bG9vcC4KIAkgKi8KKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIHdlIGFyZSBpbiBxdW9ydW0g bW9kZS4gIEluIHF1b3J1bSBtb2RlIHdlIG11c3QgdmlzaXQKKwkgKiBldmVyeSBzbG90IChza2lw cGluZyBsYWdnaW5nIG9uZXMpIHVudGlsIHF1b3J1bSByZXF1aXJlbWVudHMgbWV0IAorCSAqIHNv IHdlIGNhbiBjb3VudCB0aGUgdG90YWwgbnVtYmVyIHRoYXQgaGF2ZSBjYXVnaHQgdXAuCisJICog SW4gdGhlIGRlZmF1bHQgQUxMIG1vZGUgdGhlIG9yaWdpbmFsCisJICogYnJlYWstb24tZmlyc3Qt bGFnZ2luZy1zbG90IGJlaGF2aW91ciBpcyBwcmVzZXJ2ZWQuCisJICovCisJcXVvcnVtX21vZGUg PSAoc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfY29uZmlnLT5zeW5jcmVwX21ldGhvZCA9PSBT WU5DX1JFUF9RVU9SVU0pOworCiAJTFdMb2NrQWNxdWlyZShSZXBsaWNhdGlvblNsb3RDb250cm9s TG9jaywgTFdfU0hBUkVEKTsKIAogCW5hbWUgPSBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90c19j b25maWctPnNsb3RfbmFtZXM7CkBAIC0zMTI5LDEzICszMTg0LDE1IEBAIFN0YW5kYnlTbG90c0hh dmVDYXVnaHR1cChYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCkKIAkJWExvZ1Jl Y1B0cglyZXN0YXJ0X2xzbjsKIAkJYm9vbAkJaW52YWxpZGF0ZWQ7CiAJCWJvb2wJCWluYWN0aXZl OworCQlib29sCQlzbG90X29rID0gdHJ1ZTsKIAkJUmVwbGljYXRpb25TbG90ICpzbG90OwogCiAJ CXNsb3QgPSBTZWFyY2hOYW1lZFJlcGxpY2F0aW9uU2xvdChuYW1lLCBmYWxzZSk7CiAKIAkJLyoK IAkJICogSWYgYSBzbG90IG5hbWUgcHJvdmlkZWQgaW4gc3luY2hyb25pemVkX3N0YW5kYnlfc2xv dHMgZG9lcyBub3QKLQkJICogZXhpc3QsIHJlcG9ydCBhIG1lc3NhZ2UgYW5kIGV4aXQgdGhlIGxv b3AuCisJCSAqIGV4aXN0LCByZXBvcnQgYSBtZXNzYWdlLiAgSW4gQUxMIG1vZGUsIGJyZWFrIGlt bWVkaWF0ZWx5OworCQkgKiBpbiBxdW9ydW0gbW9kZSwgc2tpcCBhbmQgY29udGludWUuCiAJCSAq LwogCQlpZiAoIXNsb3QpCiAJCXsKQEAgLTMxNDcsMTAgKzMyMDQsMTMgQEAgU3RhbmRieVNsb3Rz SGF2ZUNhdWdodHVwKFhMb2dSZWNQdHIgd2FpdF9mb3JfbHNuLCBpbnQgZWxldmVsKQogCQkJCQkJ CSAgbmFtZSksCiAJCQkJCWVycmhpbnQoIkNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCBcIiVz XCIgb3IgYW1lbmQgcGFyYW1ldGVyIFwiJXNcIi4iLAogCQkJCQkJCW5hbWUsICJzeW5jaHJvbml6 ZWRfc3RhbmRieV9zbG90cyIpKTsKLQkJCWJyZWFrOworCQkJaWYgKCFxdW9ydW1fbW9kZSkKKwkJ CQlicmVhazsKKwkJCW5hbWUgKz0gc3RybGVuKG5hbWUpICsgMTsKKwkJCWNvbnRpbnVlOwogCQl9 CiAKLQkJLyogU2FtZSBhcyBhYm92ZTogaWYgYSBzbG90IGlzIG5vdCBwaHlzaWNhbCwgZXhpdCB0 aGUgbG9vcC4gKi8KKwkJLyogU2FtZSBhcyBhYm92ZTogaWYgYSBzbG90IGlzIG5vdCBwaHlzaWNh bCwgc2tpcC9icmVhay4gKi8KIAkJaWYgKFNsb3RJc0xvZ2ljYWwoc2xvdCkpCiAJCXsKIAkJCWVy ZXBvcnQoZWxldmVsLApAQCAtMzE2MSw3ICszMjIxLDEwIEBAIFN0YW5kYnlTbG90c0hhdmVDYXVn aHR1cChYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCkKIAkJCQkJCQkgIG5hbWUp LAogCQkJCQllcnJoaW50KCJSZW1vdmUgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBcIiVz XCIgZnJvbSBwYXJhbWV0ZXIgXCIlc1wiLiIsCiAJCQkJCQkJbmFtZSwgInN5bmNocm9uaXplZF9z dGFuZGJ5X3Nsb3RzIikpOwotCQkJYnJlYWs7CisJCQlpZiAoIXF1b3J1bV9tb2RlKQorCQkJCWJy ZWFrOworCQkJbmFtZSArPSBzdHJsZW4obmFtZSkgKyAxOworCQkJY29udGludWU7CiAJCX0KIAog CQlTcGluTG9ja0FjcXVpcmUoJnNsb3QtPm11dGV4KTsKQEAgLTMxODEsMTAgKzMyNDQsMTEgQEAg U3RhbmRieVNsb3RzSGF2ZUNhdWdodHVwKFhMb2dSZWNQdHIgd2FpdF9mb3JfbHNuLCBpbnQgZWxl dmVsKQogCQkJCQkJCSAgbmFtZSksCiAJCQkJCWVycmhpbnQoIkRyb3AgYW5kIHJlY3JlYXRlIHRo ZSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiwgb3IgYW1lbmQgcGFyYW1ldGVyIFwiJXNcIi4iLAog CQkJCQkJCW5hbWUsICJzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyIpKTsKLQkJCWJyZWFrOwor CQkJc2xvdF9vayA9IGZhbHNlOwogCQl9CiAKLQkJaWYgKCFYTG9nUmVjUHRySXNWYWxpZChyZXN0 YXJ0X2xzbikgfHwgcmVzdGFydF9sc24gPCB3YWl0X2Zvcl9sc24pCisJCWlmIChzbG90X29rICYm CisJCQkoIVhMb2dSZWNQdHJJc1ZhbGlkKHJlc3RhcnRfbHNuKSB8fCByZXN0YXJ0X2xzbiA8IHdh aXRfZm9yX2xzbikpCiAJCXsKIAkJCS8qIExvZyBhIG1lc3NhZ2UgaWYgbm8gYWN0aXZlX3BpZCBm b3IgdGhpcyBwaHlzaWNhbCBzbG90ICovCiAJCQlpZiAoaW5hY3RpdmUpCkBAIC0zMTk2LDkgKzMy NjAsMTYgQEAgU3RhbmRieVNsb3RzSGF2ZUNhdWdodHVwKFhMb2dSZWNQdHIgd2FpdF9mb3JfbHNu LCBpbnQgZWxldmVsKQogCQkJCQkJCQkgIG5hbWUpLAogCQkJCQkJZXJyaGludCgiU3RhcnQgdGhl IHN0YW5kYnkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiwgb3Ig YW1lbmQgcGFyYW1ldGVyIFwiJXNcIi4iLAogCQkJCQkJCQluYW1lLCAic3luY2hyb25pemVkX3N0 YW5kYnlfc2xvdHMiKSk7CisJCQlzbG90X29rID0gZmFsc2U7CisJCX0KIAotCQkJLyogQ29udGlu dWUgaWYgdGhlIGN1cnJlbnQgc2xvdCBoYXNuJ3QgY2F1Z2h0IHVwLiAqLwotCQkJYnJlYWs7CisJ CWlmICghc2xvdF9vaykKKwkJeworCQkJLyogSW4gQUxMIG1vZGUsIHN0b3Agb24gdGhlIGZpcnN0 IGxhZ2dpbmcgc2xvdCAqLworCQkJaWYgKCFxdW9ydW1fbW9kZSkKKwkJCQlicmVhazsKKwkJCW5h bWUgKz0gc3RybGVuKG5hbWUpICsgMTsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJQXNzZXJ0KHJl c3RhcnRfbHNuID49IHdhaXRfZm9yX2xzbik7CkBAIC0zMjE1LDExICszMjg2LDE4IEBAIFN0YW5k YnlTbG90c0hhdmVDYXVnaHR1cChYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCkK IAlMV0xvY2tSZWxlYXNlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrKTsKIAogCS8qCi0JICog UmV0dXJuIGZhbHNlIGlmIG5vdCBhbGwgdGhlIHN0YW5kYnlzIGhhdmUgY2F1Z2h0IHVwIHRvIHRo ZSBzcGVjaWZpZWQKLQkgKiBXQUwgbG9jYXRpb24uCi0JICovCi0JaWYgKGNhdWdodF91cF9zbG90 X251bSAhPSBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90c19jb25maWctPm5zbG90bmFtZXMpCi0J CXJldHVybiBmYWxzZTsKKwkvKiBJbiBxdW9ydW0gbW9kZSwgd2Ugb25seSBuZWVkIG51bV9zeW5j IG9mIHRoZSBsaXN0ZWQgc2xvdHMgdG8gaGF2ZSBjYXVnaHQgdXAuICovCisJeworCQlpbnQJCQly ZXF1aXJlZDsKKworCQlpZiAoc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfY29uZmlnLT5zeW5j cmVwX21ldGhvZCA9PSBTWU5DX1JFUF9RVU9SVU0pCisJCQlyZXF1aXJlZCA9IHN5bmNocm9uaXpl ZF9zdGFuZGJ5X3Nsb3RzX2NvbmZpZy0+bnVtX3N5bmM7CisJCWVsc2UKKwkJCXJlcXVpcmVkID0g c3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfY29uZmlnLT5uc2xvdG5hbWVzOworCisJCWlmIChj YXVnaHRfdXBfc2xvdF9udW0gPCByZXF1aXJlZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CiAKIAkv KiBUaGUgc3Nfb2xkZXN0X2ZsdXNoX2xzbiBtdXN0IG5vdCByZXRyZWF0LiAqLwogCUFzc2VydCgh WExvZ1JlY1B0cklzVmFsaWQoc3Nfb2xkZXN0X2ZsdXNoX2xzbikgfHwKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlY292ZXJ5L3QvMDUyX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzX3F1b3J1bS5w bCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDUyX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzX3F1 b3J1bS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDJiMTJmM2I0 MzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA1Ml9zeW5jaHJvbml6 ZWRfc3RhbmRieV9zbG90c19xdW9ydW0ucGwKQEAgLTAsMCArMSwzMDMgQEAKKworIyBDb3B5cmln aHQgKGMpIDIwMjQtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwor IyBUZXN0IHRoYXQgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgc3VwcG9ydHMgcXVvcnVtLWJh c2VkIHN5bnRheAorIyAoQU5ZIE4gKHNsb3QxLCBzbG90MiwgLi4uKSkgc28gdGhhdCBsb2dpY2Fs IGRlY29kaW5nIGF2YWlsYWJpbGl0eSBtYXRjaGVzCisjIHRoZSBjb21taXQgZHVyYWJpbGl0eSBn dWFyYW50ZWUgb2Ygc3luY2hyb25vdXNfc3RhbmRieV9uYW1lcyA9ICdBTlkgLi4uJy4KKyMKKyMg U2V0dXA6IGEgMy1ub2RlIGNsdXN0ZXIgd2l0aCBvbmUgcHJpbWFyeSwgdHdvIHBoeXNpY2FsIHN0 YW5kYnlzLCBhbmQgYQorIyBsb2dpY2FsIGRlY29kaW5nIGNsaWVudCB1c2luZyBhIGZhaWxvdmVy LWVuYWJsZWQgc2xvdC4KKyMKKyMgICAgICAgICAgICAgICB8IC0tLS0+IHN0YW5kYnkxIChwcmlt YXJ5X3Nsb3RfbmFtZSA9IHNiMV9zbG90KQorIyBwcmltYXJ5IC0tLS0tLXwKKyMgICAgICAgICAg ICAgICB8IC0tLS0+IHN0YW5kYnkyIChwcmltYXJ5X3Nsb3RfbmFtZSA9IHNiMl9zbG90KQorIwor IyAgIHN5bmNocm9ub3VzX3N0YW5kYnlfbmFtZXMgPSAnQU5ZIDEgKHN0YW5kYnkxLCBzdGFuZGJ5 MiknCisjCisjIFdlIHRlc3QgdHdvIHNjZW5hcmlvczoKKyMKKyMgQSkgc3luY2hyb25pemVkX3N0 YW5kYnlfc2xvdHMgPSAnc2IxX3Nsb3QsIHNiMl9zbG90JyAgICAgICAgKEFMTCBtb2RlKQorIyAg ICBXaXRoIHN0YW5kYnkxIGRvd24sIGxvZ2ljYWwgZGVjb2RpbmcgQkxPQ0tTIGRlc3BpdGUgdGhl IHF1b3J1bSBjb21taXQKKyMgICAgaGF2aW5nIHN1Y2NlZWRlZCDigJQgdGhpcyBkZW1vbnN0cmF0 ZXMgdGhlIG9yaWdpbmFsIGxpbWl0YXRpb24uCisjCisjIEIpIHN5bmNocm9uaXplZF9zdGFuZGJ5 X3Nsb3RzID0gJ0FOWSAxIChzYjFfc2xvdCwgc2IyX3Nsb3QpJyAocXVvcnVtIG1vZGUpCisjICAg IFdpdGggc3RhbmRieTEgZG93biwgbG9naWNhbCBkZWNvZGluZyBwcm9jZWVkcyBiZWNhdXNlIHNi Ml9zbG90IGFsb25lCisjICAgIHNhdGlzZmllcyB0aGUgcXVvcnVtIOKAlCB0aGlzIGlzIHRoZSBm aXguCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3Vz ZSBUZXN0OjpNb3JlOworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAxLiAgQ3JlYXRlIGEgcHJp bWFyeSB3aXRoIGxvZ2ljYWwgcmVwbGljYXRpb24gbGV2ZWwsIGF1dG92YWN1dW0gb2ZmCisjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorbXkgJHByaW1hcnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3ByaW1hcnknKTsKKyRwcmltYXJ5LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xv Z2ljYWwnKTsKKyRwcmltYXJ5LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXF7 CithdXRvdmFjdXVtID0gb2ZmCit9KTsKKyRwcmltYXJ5LT5zdGFydDsKKworIyBQaHlzaWNhbCBy ZXBsaWNhdGlvbiBzbG90cyBmb3IgdGhlIHR3byBzdGFuZGJ5cworJHByaW1hcnktPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Ns b3QoJ3NiMV9zbG90Jyk7Iik7CiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxfcmVwbGljYXRpb25fc2xvdCgnc2IyX3Nsb3QnKTsiKTsK KworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMi4gIENyZWF0ZSBzdGFuZGJ5MSBhbmQgc3RhbmRi eTIgZnJvbSBhIGZyZXNoIGJhY2t1cAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK215ICRiYWNrdXBf bmFtZSA9ICdiYXNlX2JhY2t1cCc7CiskcHJpbWFyeS0+YmFja3VwKCRiYWNrdXBfbmFtZSk7CisK K215ICRjb25uc3RyID0gJHByaW1hcnktPmNvbm5zdHI7CisKK215ICRzdGFuZGJ5MSA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieTEnKTsKKyRzdGFuZGJ5MS0+aW5pdF9m cm9tX2JhY2t1cCgKKwkkcHJpbWFyeSwgJGJhY2t1cF9uYW1lLAorCWhhc19zdHJlYW1pbmcgPT4g MSwKKwloYXNfcmVzdG9yaW5nID0+IDEpOworJHN0YW5kYnkxLT5hcHBlbmRfY29uZigKKwkncG9z dGdyZXNxbC5jb25mJywgcXEoCitob3Rfc3RhbmRieV9mZWVkYmFjayA9IG9uCitwcmltYXJ5X3Ns b3RfbmFtZSA9ICdzYjFfc2xvdCcKK3ByaW1hcnlfY29ubmluZm8gPSAnJGNvbm5zdHIgZGJuYW1l PXBvc3RncmVzJworKSk7CisKK215ICRzdGFuZGJ5MiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygnc3RhbmRieTInKTsKKyRzdGFuZGJ5Mi0+aW5pdF9mcm9tX2JhY2t1cCgKKwkkcHJp bWFyeSwgJGJhY2t1cF9uYW1lLAorCWhhc19zdHJlYW1pbmcgPT4gMSwKKwloYXNfcmVzdG9yaW5n ID0+IDEpOworJHN0YW5kYnkyLT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXEo Citob3Rfc3RhbmRieV9mZWVkYmFjayA9IG9uCitwcmltYXJ5X3Nsb3RfbmFtZSA9ICdzYjJfc2xv dCcKK3ByaW1hcnlfY29ubmluZm8gPSAnJGNvbm5zdHIgZGJuYW1lPXBvc3RncmVzJworKSk7CisK KyRzdGFuZGJ5MS0+c3RhcnQ7Ciskc3RhbmRieTItPnN0YXJ0OworCiskcHJpbWFyeS0+d2FpdF9m b3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkxKTsKKyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlf Y2F0Y2h1cCgkc3RhbmRieTIpOworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAzLiAgQ3JlYXRl IGEgbG9naWNhbCBmYWlsb3ZlciBzbG90IG9uIHRoZSBwcmltYXJ5CisjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfY3JlYXRl X2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdCgnbG9naWNhbF9mYWlsb3ZlcicsICd0ZXN0X2RlY29k aW5nJywgZmFsc2UsIGZhbHNlLCB0cnVlKTsiCispOworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IyA0LiAgQ29uZmlndXJlIHF1b3J1bSBzeW5jIHJlcCB3aXRoIEFMTC1tb2RlIHN5bmNocm9uaXpl ZF9zdGFuZGJ5X3Nsb3RzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJHByaW1hcnktPmFwcGVuZF9j b25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKK3N5bmNocm9ub3VzX3N0YW5kYnlfbmFtZXMg PSAnQU5ZIDEgKHN0YW5kYnkxLCBzdGFuZGJ5MiknCitzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90 cyA9ICdzYjFfc2xvdCwgc2IyX3Nsb3QnCit9KTsKKyRwcmltYXJ5LT5yZWxvYWQ7CisKKyRwcmlt YXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTEpOworJHByaW1hcnktPndhaXRf Zm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5Mik7CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisj IDUuICBDb25maXJtIHRoYXQgcXVvcnVtIHN5bmMgcmVwIGlzIGFjdGl2ZSBmb3IgYm90aCBzdGFu ZGJ5cworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lzKCAkcHJpbWFyeS0+c2FmZV9wc3FsKAorCQkn cG9zdGdyZXMnLAorCQlxe1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24g V0hFUkUgc3luY19zdGF0ZSA9ICdxdW9ydW0nO30KKwkpLAorCScyJywKKwknYm90aCBzdGFuZGJ5 cyBhcmUgaW4gcXVvcnVtIHN5bmMgc3RhdGUnKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUEFSVCBBOiBBTEwtbW9kZSBibG9ja3MgZXZl biB3aGVuIHF1b3J1bSBpcyBtZXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKKyRzdGFuZGJ5MS0+c3RvcDsKKworIyBDb21taXQgc3VjY2VlZHMg c2luY2Ugc3RhbmRieTIgc2F0aXNmaWVzIHRoZSBxdW9ydW0uCitteSAkZW1pdF9sc24gPSAkcHJp bWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sb2dpY2FsX2VtaXRfbWVz c2FnZSh0cnVlLCAncXRlc3QnLCAnYWxsX21vZGVfYmxvY2tzJyk7IgorKTsKK2xpa2UoJGVtaXRf bHNuLCBxci9eWzAtOUEtRl0rXC9bMC05QS1GXSskLywKKwknc3luY2hyb25vdXMgY29tbWl0IHN1 Y2NlZWRzIHdpdGggcXVvcnVtIChzdGFuZGJ5MiBhbGl2ZSknKTsKKworJHByaW1hcnktPndhaXRf Zm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5Mik7CisKK215ICRsb2dfb2Zmc2V0ID0gLXMgJHBy aW1hcnktPmxvZ2ZpbGU7CisKK215ICRiZyA9ICRwcmltYXJ5LT5iYWNrZ3JvdW5kX3BzcWwoCisJ J3Bvc3RncmVzJywKKwlvbl9lcnJvcl9zdG9wID0+IDAsCisJdGltZW91dCA9PiAkUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCk7CisKKyRiZy0+cXVlcnlfdW50aWwoCisJ cXIvZGVjb2RlX3N0YXJ0LywgcSgKKyAgIFxlY2hvIGRlY29kZV9zdGFydAorICAgU0VMRUNUIHBn X2xvZ2ljYWxfc2xvdF9wZWVrX2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBOVUxM KTsKKykpOworCisjIFdhaXQgZm9yIHRoZSBwcmltYXJ5IHRvIGxvZyBhIHdhcm5pbmcgYWJvdXQg c2IxX3Nsb3Qgbm90IGJlaW5nIGFjdGl2ZS4KKyRwcmltYXJ5LT53YWl0X2Zvcl9sb2coCisJcXIv cmVwbGljYXRpb24gc2xvdCBcInNiMV9zbG90XCIgc3BlY2lmaWVkIGluIHBhcmFtZXRlciAic3lu Y2hyb25pemVkX3N0YW5kYnlfc2xvdHMiIGRvZXMgbm90IGhhdmUgYWN0aXZlX3BpZC8sCisJJGxv Z19vZmZzZXQpOworCitwYXNzKCdBTEwgbW9kZTogbG9naWNhbCBkZWNvZGluZyBibG9ja2VkIGJ5 IHNiMV9zbG90IGV2ZW4gdGhvdWdoIHF1b3J1bSBjb21taXQgc3VjY2VlZGVkJyk7CisKKyMgVW5i bG9jayBieSBjbGVhcmluZyBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cy4KKyRwcmltYXJ5LT5h ZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3Rz JywgIicnIik7CiskcHJpbWFyeS0+cmVsb2FkOworJGJnLT5xdWl0OworCisjIENvbnN1bWUgdGhl IGNoYW5nZSBzbyB0aGUgc2xvdCBpcyBjbGVhbiBmb3IgdGhlIG5leHQgdGVzdC4KKyRwcmltYXJ5 LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxe1NFTEVDVCBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2No YW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBOVUxMKTt9KTsKKworIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUEFSVCBCOiBBTlkgKHF1 b3J1bSkgbW9kZSDigJQgbG9naWNhbCBkZWNvZGluZyBwcm9jZWVkcworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBTd2l0Y2ggc3luY2hyb25p emVkX3N0YW5kYnlfc2xvdHMgdG8gcXVvcnVtIG1vZGU6IG5lZWQgb25seSAxIG9mIDIgc2xvdHMu CiskcHJpbWFyeS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzeW5jaHJvbml6ZWRf c3RhbmRieV9zbG90cycsCisJIidBTlkgMSAoc2IxX3Nsb3QsIHNiMl9zbG90KSciKTsKKyRwcmlt YXJ5LT5yZWxvYWQ7CisKKyMgc3RhbmRieTEgaXMgc3RpbGwgZG93bjsgc3RhbmRieTIgaXMgdXAu CisKKyMgRW1pdCBhbm90aGVyIHRyYW5zYWN0aW9uYWwgbWVzc2FnZSDigJQgY29tbWl0cyB2aWEg cXVvcnVtLgorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbG9n aWNhbF9lbWl0X21lc3NhZ2UodHJ1ZSwgJ3F0ZXN0JywgJ3F1b3J1bV9tb2RlX3dvcmtzJyk7Igor KTsKKyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTIpOworCisjIElu IHF1b3J1bSBtb2RlLCBsb2dpY2FsIGRlY29kaW5nIHNob3VsZCBOT1QgYmxvY2sgYmVjYXVzZSBz YjJfc2xvdCBoYXMKKyMgY2F1Z2h0IHVwIGFuZCAxLW9mLTIgaXMgc3VmZmljaWVudC4KK215ICRk ZWNvZGVkID0gJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXF7U0VMRUNUIGNvdW50 KCopIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdsb2dpY2FsX2ZhaWxvdmVyJywg TlVMTCwgTlVMTCkKKwkgIFdIRVJFIGRhdGEgTElLRSAnJXF1b3J1bV9tb2RlX3dvcmtzJSc7fSk7 CitpcygkZGVjb2RlZCwgJzEnLAorCSdBTlkgbW9kZTogbG9naWNhbCBkZWNvZGluZyBwcm9jZWVk cyB3aXRoIG9ubHkgc2IyX3Nsb3QgY2F1Z2h0IHVwJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBBUlQgQzogVmVyaWZ5IGJhY2t3YXJk LWNvbXBhdCDigJQgcGxhaW4gbGlzdCBzdGlsbCByZXF1aXJlcyBBTEwKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQnJpbmcgc3RhbmRieTEg YmFjay4KKyRzdGFuZGJ5MS0+c3RhcnQ7CiskcHJpbWFyeS0+d2FpdF9mb3JfcmVwbGF5X2NhdGNo dXAoJHN0YW5kYnkxKTsKKworIyBTd2l0Y2ggdG8gcGxhaW4gbGlzdCAoQUxMIG1vZGUpIHdpdGgg Ym90aCBzbG90cy4KKyRwcmltYXJ5LT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3N5 bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzJywKKwkiJ3NiMV9zbG90LCBzYjJfc2xvdCciKTsKKyRw cmltYXJ5LT5yZWxvYWQ7CisKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUIHBnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlKHRydWUsICdxdGVzdCcsICdib3RoX2NhdWdodF91 cCcpOyIKKyk7CiskcHJpbWFyeS0+d2FpdF9mb3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkxKTsK KyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTIpOworCitteSAkZGVj b2RlZF9iYyA9ICRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxe1NFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnbG9naWNhbF9mYWlsb3Zlcics IE5VTEwsIE5VTEwpCisJICBXSEVSRSBkYXRhIExJS0UgJyVib3RoX2NhdWdodF91cCUnO30pOwor aXMoJGRlY29kZWRfYmMsICcxJywKKwknYmFja3dhcmQtY29tcGF0OiBwbGFpbiBsaXN0IHdvcmtz IHdoZW4gYWxsIHN0YW5kYnlzIGFyZSB1cCcpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQQVJUIEQ6IEFOWSBtb2RlIOKAlCBicmluZ2lu ZyBzdGFuZGJ5MSBiYWNrIGFsc28gd29ya3MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgU3RvcCBzdGFuZGJ5MSBhZ2Fpbiwgc3dpdGNoIHRv IEFOWSAxLgorJHN0YW5kYnkxLT5zdG9wOworCiskcHJpbWFyeS0+YWRqdXN0X2NvbmYoJ3Bvc3Rn cmVzcWwuY29uZicsICdzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cycsCisJIidBTlkgMSAoc2Ix X3Nsb3QsIHNiMl9zbG90KSciKTsKKyRwcmltYXJ5LT5yZWxvYWQ7CisKKyRwcmltYXJ5LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlKHRydWUs ICdxdGVzdCcsICdzdGFuZGJ5MV9yZWNvdmVyeScpOyIKKyk7CisKKyRwcmltYXJ5LT53YWl0X2Zv cl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTIpOworCisjIERlY29kaW5nIHByb2NlZWRzIHZpYSBx dW9ydW0uCitteSAkZGVjb2RlZF9kMSA9ICRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK Kwlxe1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnbG9n aWNhbF9mYWlsb3ZlcicsIE5VTEwsIE5VTEwpCisJICBXSEVSRSBkYXRhIExJS0UgJyVzdGFuZGJ5 MV9yZWNvdmVyeSUnO30pOworaXMoJGRlY29kZWRfZDEsICcxJywKKwknQU5ZIG1vZGU6IGRlY29k aW5nIHdvcmtzIHdoaWxlIHN0YW5kYnkxIGlzIGRvd24nKTsKKworIyBCcmluZyBzdGFuZGJ5MSBi YWNrIGFuZCB2ZXJpZnkgZGVjb2Rpbmcgc3RpbGwgd29ya3MuCiskc3RhbmRieTEtPnN0YXJ0Owor JHByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5MSk7CisKKyRwcmltYXJ5 LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xvZ2ljYWxfZW1pdF9tZXNzYWdl KHRydWUsICdxdGVzdCcsICdhZnRlcl9yZWNvdmVyeScpOyIKKyk7CiskcHJpbWFyeS0+d2FpdF9m b3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkxKTsKKyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlf Y2F0Y2h1cCgkc3RhbmRieTIpOworCitteSAkZGVjb2RlZF9kMiA9ICRwcmltYXJ5LT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwlxe1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9n ZXRfY2hhbmdlcygnbG9naWNhbF9mYWlsb3ZlcicsIE5VTEwsIE5VTEwpCisJICBXSEVSRSBkYXRh IExJS0UgJyVhZnRlcl9yZWNvdmVyeSUnO30pOworaXMoJGRlY29kZWRfZDIsICcxJywKKwknQU5Z IG1vZGU6IGRlY29kaW5nIHdvcmtzIGFmdGVyIHN0YW5kYnkxIHJlY292ZXJzJyk7CisKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBBUlQgRTog VmVyaWZ5IEZJUlNUIE4gc3ludGF4ICh0cmVhdGVkIGFzIEFMTCBtb2RlKQorIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBGSVJTVCAyIChzYjFf c2xvdCwgc2IyX3Nsb3QpIOKAlCBib3RoIHN0YW5kYnlzIHVwLCBzaG91bGQgd29yayBsaWtlIEFM TC4KKyRwcmltYXJ5LT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3N5bmNocm9uaXpl ZF9zdGFuZGJ5X3Nsb3RzJywKKwkiJ0ZJUlNUIDIgKHNiMV9zbG90LCBzYjJfc2xvdCknIik7Cisk cHJpbWFyeS0+cmVsb2FkOworCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBwZ19sb2dpY2FsX2VtaXRfbWVzc2FnZSh0cnVlLCAncXRlc3QnLCAnZmlyc3Rfbl90ZXN0 Jyk7IgorKTsKKyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTEpOwor JHByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5Mik7CisKK215ICRkZWNv ZGVkX2UgPSAkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXtTRUxFQ1QgY291bnQo KikgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBO VUxMLCBOVUxMKQorCSAgV0hFUkUgZGF0YSBMSUtFICclZmlyc3Rfbl90ZXN0JSc7fSk7Citpcygk ZGVjb2RlZF9lLCAnMScsCisJJ0ZJUlNUIE4gbW9kZTogZGVjb2Rpbmcgd29ya3Mgd2hlbiBhbGwg c3RhbmRieXMgYXJlIHVwJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIFBBUlQgRjogVmVyaWZ5IEdVQyB2YWxpZGF0aW9uIHJlamVjdHMg YmFkIHZhbHVlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKworbXkgKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpOworCisjIE4gZXhjZWVkcyBu dW1iZXIgb2YgbGlzdGVkIHNsb3RzCisoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkcHJp bWFyeS0+cHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTWVNURU0gU0VUIHN5bmNocm9uaXplZF9z dGFuZGJ5X3Nsb3RzID0gJ0FOWSAzIChzYjFfc2xvdCwgc2IyX3Nsb3QpJzsiKTsKK2xpa2UoJHN0 ZGVyciwgcXIvRVJST1IvLAorCSdHVUMgcmVqZWN0cyBBTlkgTiB3aGVuIE4gPiBudW1iZXIgb2Yg bGlzdGVkIHNsb3RzJyk7CisKKyMgTWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzCisoJHJlc3Vs dCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkcHJpbWFyeS0+cHNxbCgncG9zdGdyZXMnLAorCSJBTFRF UiBTWVNURU0gU0VUIHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzID0gJ0FOWSAxIChzYjFfc2xv dCwgc2IyX3Nsb3QnOyIpOworbGlrZSgkc3RkZXJyLCBxci9FUlJPUi8sCisJJ0dVQyByZWplY3Rz IG1hbGZvcm1lZCBBTlkgc3ludGF4Jyk7CisKKyMgSW52YWxpZCBzbG90IG5hbWUKKygkcmVzdWx0 LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRwcmltYXJ5LT5wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVS IFNZU1RFTSBTRVQgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgPSAnQU5ZIDEgKElOVkFMSURf VVBQRVIpJzsiKTsKK2xpa2UoJHN0ZGVyciwgcXIvRVJST1IvLAorCSdHVUMgcmVqZWN0cyBpbnZh bGlkIHNsb3QgbmFtZSBpbiBBTlkgc3ludGF4Jyk7CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisj IENsZWFudXAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ2xvZ2ljYWxfZmFpbG92 ZXInKTsiKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --000000000000cb0559064b992197--