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 1wfZYo-005WLr-1T for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 08:47:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfZYn-006LUn-0c for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 08:47:45 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wfZYm-006LUe-1y for pgsql-hackers@lists.postgresql.org; Fri, 03 Jul 2026 08:47:44 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfZYi-00000001RGC-3Grl for pgsql-hackers@lists.postgresql.org; Fri, 03 Jul 2026 08:47:43 +0000 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-c125fbfbae0so28896366b.1 for ; Fri, 03 Jul 2026 01:47:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783068459; cv=none; d=google.com; s=arc-20260327; b=aBos9ZBJzVprRVf+sOBDoeIxBe7Awokpy4pk6PiMPp4N+RnuooJxrChULL74lbrduG vi0PrE9jDMtPp6uWgTL1/PsBWoFTl8suHnSFmSDrLYl0A6DDotJe2m21O5T/e+gbH99q 0XXNINViHijO5kU63Jc/ZZ1cDvnJxD/xBzH+i//BT9t8N19cRhP7fvYxBn9/b7wQ2btE Qz1lC5VvdSjShigUOHewOKKt8+EhXW2Fnk+BIc6jupYRgXYCHAomsXqlWoHaBy+lCD/1 Z2DTrXKaDYAs1Oa41/zavSpxVYiIchjmVkE1Ezd28e8IvvRGvYFciMKvOfxbnshOYQGm tGjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=9VVEc+LFNvWXuj6pu9+Kz/hvuwZRPJQn3xP25cJBs74=; fh=jA1y0o48KsEr1ncbKeaqgkONBUmAh+4Dc8UAqTSPpFs=; b=DuINK5B48b8SQIWXeK39bLJb2FOM9m/Rt98VWE82JYHHo/wFVcdTdZyxLUPveCHMb8 q0eP+OKqvj8J8nKgWDn7y7oDGZeQgoMP6tbjGDLOySxRYnm9yftGn0t12Mxg8ZzUATCR gmkGQANmeDvb3EVQLBHojUSu/wvPAIR8fYeGZQSplqDHdk0Iwl4msNu/1JzZyZU/adch 2lKaeNjgogdoiXevGHVHHHwBDgD9o6s+NZzCx9XxM38D2Ucy8h/HpZZAxe5ptEO8wNx6 G7nHrcTtWmipPt8FuwMcux3y1kLa/g67WHpjNXdAtxrzBS1NsXRFub/8b+7G8/kErrPo +Bhg==; 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=enterprisedb.com; s=google; t=1783068459; x=1783673259; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9VVEc+LFNvWXuj6pu9+Kz/hvuwZRPJQn3xP25cJBs74=; b=MBxyz4AArx6CBYr9qZOXYNXTTpCeK3um9uhFsB62AGRjzfoPx88SLz6SzDjTQxKz+S sHxMYSDNRJ7iIeXSeWP5nWE3gdXYWAaKxfFXBpNqdT2ZE4RCnLKRRjZh8ayE1iZVw3B+ DaGVbS4CvV2KQujJZkK1xjKvSya15xQZlN7gmkF3fJtiA/YKcA5pOHc0F2Jz479YfHUS oDIOqxVhDmz+0Sh8qg/UiLAA/oWoz4+7dpjgKOnSrUDm8LC2J3yNABNNywfIb/VQtJRz Wsf64Duf8MhXkksm9wSjUO4SMefyD6RtxTgo4HceXVxfSsQdCVc9O8kKmqt0cwRCvFMA FHkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783068459; x=1783673259; h=cc: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=9VVEc+LFNvWXuj6pu9+Kz/hvuwZRPJQn3xP25cJBs74=; b=Lt7BtS1f1EwYSmhs/uhTEo/sD1LAR/zf+BRde/MVkUufgn8U9yVJY7M4jB8g4IKwtB IEchu16YOBv4zEwfSp9Djuoq+SoEOxG3TpWmOuclT+//IoTK1DVfX5OdiiNcLiK0u76K /SgHAEhP6LsQR7tep1Zw2k8RnGRnNXOgU6sNqZGxUMf1Rfm1zK6k2LX896apwEqhzHTq yoxyaML1gEI1P4bF5KIWkXreNCivSJgUsTG2/MiYNGhbhfm8QT82YW1sgpZRiMYhiFf9 ExBa/XfqpqzOfI4yVG6AfzzXNulnSZgoLDvWXn0FaYAlESWhu/K5dUQk6Sb+jyBXn9QZ wTHg== X-Gm-Message-State: AOJu0YyHuIZQrbS0xSG0mWTRIe6nY05VQ4OBK1a2C+DngH19Tk9XCU7b Urm+io0oPXuNeUoIVYXjHho381wRh8oPiCuCJMWxQDVbRKQ5GOue/IxNNaW2RKDLrwcP7Tq/6+J S0Pxjm1dVT91a3VaiBlm6NmGbh64oMSOqS2LVUC2y X-Gm-Gg: AfdE7clU6LoHj2alNUB9TprqfihwZvotKamsJieTvYkqirQDCtK/ZGLEFfrVf/CPUxt rVWoBmt/IxbqmR2ej++Eg1QKTQSh2yR+GqOy1oPtxbdKkJolVuGAzQ4jR7O7JqFS5ZG6gWuibfd DZ0bmkBNxJf3Kiu1NfAhd6C+hNZ54+29zlPlJTpTUqAc/vDCH6PnGNGys9FKz6VH8uEIGbtSvI2 GR3ZNa+C05P89PvlT8na+7c12k3LKRDJq3XPQC/adbnm1UHLri7JQeFARvxsAprFrWJB4iOjWc= X-Received: by 2002:a17:906:d1d1:b0:c12:f85:bea4 with SMTP id a640c23a62f3a-c12aa1943bemr347329766b.47.1783068458555; Fri, 03 Jul 2026 01:47:38 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Fri, 3 Jul 2026 14:17:25 +0530 X-Gm-Features: AVVi8CdsE7nw5sw-P3mEYftMNFOam-bmL9oYCq0otPwKNFYOoT7PLRYwgdDlUO8 Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Zsolt Parragi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000015cc3b0655b0fa40" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000015cc3b0655b0fa40 Content-Type: multipart/alternative; boundary="00000000000015cc390655b0fa3e" --00000000000015cc390655b0fa3e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Zsolt for the review. I have tried to fix most of the *edge cases. *= I added 12 new test cases. The v16 patch is ready for review. *Note: Windows-MinGW-Meson *builds are failing but not because of this patch. On Fri, Jul 3, 2026 at 4:04=E2=80=AFAM Zsolt Parragi wrote: > Hello! > > I can confirm the previous issues fixed, however I also found one more > with unique indexes on partitioned tables: > > CREATE SCHEMA s; > CREATE TABLE s.p (id int, region text) PARTITION BY LIST (region); > CREATE TABLE s.p_a PARTITION OF s.p FOR VALUES IN ('a'); > CREATE UNIQUE INDEX p_uidx ON s.p (id, region); > > SELECT pg_get_table_ddl('s.p', owner =3D> false); > -- CREATE TABLE s.p (id integer, region text) PARTITION BY LIST (region); > -- CREATE UNIQUE INDEX p_uidx ON s.p USING btree (id, region); > -- CREATE TABLE s.p_a PARTITION OF s.p FOR VALUES IN ('a'); > -- CREATE UNIQUE INDEX p_a_id_region_idx ON s.p_a USING btree (id, > region); -- fails because index already exists > > > --00000000000015cc390655b0fa3e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks=C2=A0Zsolt for the review. I have tried to fix most= of the edge cases. I added 12 new test cases.
The v16 patch is r= eady for review.
Note: Windows-MinGW-Meson builds are failing bu= t not because=C2=A0of this patch.

On Fri, Jul 3, 2026 = at 4:04=E2=80=AFAM Zsolt Parragi <zsolt.parragi@percona.com> wrote:
Hello!

I can confirm the previous issues fixed, however I also found one more
with unique indexes on partitioned tables:

CREATE SCHEMA s;
CREATE TABLE s.p (id int, region text) PARTITION BY LIST (region);
CREATE TABLE s.p_a PARTITION OF s.p FOR VALUES IN ('a');
CREATE UNIQUE INDEX p_uidx ON s.p (id, region);

SELECT pg_get_table_ddl('s.p', owner =3D> false);
-- CREATE TABLE s.p (id integer, region text) PARTITION BY LIST (region); -- CREATE UNIQUE INDEX p_uidx ON s.p USING btree (id, region);
-- CREATE TABLE s.p_a PARTITION OF s.p FOR VALUES IN ('a');
-- CREATE UNIQUE INDEX p_a_id_region_idx ON s.p_a USING btree (id,
region); -- fails because index already exists


--00000000000015cc390655b0fa3e-- --00000000000015cc3b0655b0fa40 Content-Type: application/octet-stream; name="v16-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v16-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr4oh4ho0 RnJvbSBiYzZiYWFkMDMwODM3MDcwNjkwMTQ5NTRlMTdkMGQ4NDViNmVmNjdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxNl0gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM IChpbmNsdWRpbmcgbmFtZWQgTk9UIE5VTEwgY29uc3RyYWludHMpLCBhbmQKcGVyLWNvbHVtbiBh dHRvcHRpb25zIGVtaXR0ZWQgYXMgQUxURVIgQ09MVU1OIFNFVCAoLi4uKS4KClN1cHBvcnRlZCB0 YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRTLCBQQVJUSVRJT04gQlkgKFJB TkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBPRiBwYXJlbnQgRk9SIFZBTFVF UyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVGQVVMVCksIFVTSU5HIHRhYmxl IGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJMRVNQQUNFLCBhbmQgaW5saW5l IENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZSBDUkVBVEUKVEFCTEUgYm9keS4KClN1cHBvcnRlZCBz dWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBoZWxwZXJzIGZyb20KcnVsZXV0 aWxzLmMpOiBpbmRleGVzIChpbmNsdWRpbmcgcGFydGlhbCBhbmQgZnVuY3Rpb25hbCkgdmlhCnBn X2dldF9pbmRleGRlZl9kZGw7IGNvbnN0cmFpbnRzIChQUklNQVJZIEtFWSB3aXRoIFdJVEhPVVQg T1ZFUkxBUFMgZm9yCnRlbXBvcmFsIGtleXMsIFVOSVFVRSB3aXRoIE5VTExTIE5PVCBESVNUSU5D VCBhbmQgSU5DTFVERSBjb2x1bW5zLApGT1JFSUdOIEtFWSB3aXRoIE9OIERFTEVURS9VUERBVEUg cmVmZXJlbnRpYWwgYWN0aW9ucyBhbmQgTUFUQ0ggY2xhdXNlLApOT1QgRU5GT1JDRUQgZm9yZWln biBrZXlzLCBFWENMVURFLCBuYW1lZCBOT1QgTlVMTCkgdmlhCnBnX2dldF9jb25zdHJhaW50ZGVm X2JvZHk7IHJ1bGVzIHZpYSBwZ19nZXRfcnVsZWRlZl9kZGw7IGV4dGVuZGVkCnN0YXRpc3RpY3Mg dmlhIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbDsgUkVQTElDQSBJREVOVElUWQpOT1RISU5H L0ZVTEwvVVNJTkcgSU5ERVg7IEFMVEVSIFRBQkxFIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VD VVJJVFk7CmFuZCBjaGlsZC1sb2NhbCBERUZBVUxUIG92ZXJyaWRlcyBvbiBpbmhlcml0YW5jZS9w YXJ0aXRpb24gY2hpbGRyZW4uCkRETCBmb3IgcGFydGl0aW9uIGNoaWxkcmVuIG9mIGEgcGFydGl0 aW9uZWQtdGFibGUgcGFyZW50IGlzIGFwcGVuZGVkCmFmdGVyIHRoZSBwYXJlbnQgYnkgZGVmYXVs dC4KClRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9sbG93cyB0aGUgbmFtZWQtcGFyYW1ldGVyIGNv bnZlbnRpb24KZXN0YWJsaXNoZWQgYnkgcGdfZ2V0X3JvbGVfZGRsKCksIHBnX2dldF90YWJsZXNw YWNlX2RkbCgpLCBhbmQKcGdfZ2V0X2RhdGFiYXNlX2RkbCgpOgoKICBwZ19nZXRfdGFibGVfZGRs KHJlbGF0aW9uICAgICAgICAgcmVnY2xhc3MsCiAgICAgICAgICAgICAgICAgICBwcmV0dHkgICAg ICAgICAgIGJvb2xlYW4gIERFRkFVTFQgZmFsc2UsCiAgICAgICAgICAgICAgICAgICBvd25lciAg ICAgICAgICAgIGJvb2xlYW4gIERFRkFVTFQgdHJ1ZSwKICAgICAgICAgICAgICAgICAgIHRhYmxl c3BhY2UgICAgICAgYm9vbGVhbiAgREVGQVVMVCB0cnVlLAogICAgICAgICAgICAgICAgICAgc2No ZW1hX3F1YWxpZmllZCBib29sZWFuICBERUZBVUxUIHRydWUsCiAgICAgICAgICAgICAgICAgICBv bmx5X2tpbmRzICAgICAgIHRleHRbXSAgIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgICAgICAg IGV4Y2VwdF9raW5kcyAgICAgdGV4dFtdICAgREVGQVVMVCBOVUxMKQoKcHJldHR5IGNvbnRyb2xz IHByZXR0eS1wcmludGVkIG91dHB1dC4gIG93bmVyIGNvbnRyb2xzIGVtaXNzaW9uIG9mIHRoZQpB TFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gc3RhdGVtZW50LiAgdGFibGVzcGFjZSBjb250cm9scyB0 aGUgVEFCTEVTUEFDRQpjbGF1c2Ugb24gQ1JFQVRFIFRBQkxFLiAgc2NoZW1hX3F1YWxpZmllZCBj b250cm9scyB3aGV0aGVyIG9iamVjdCBuYW1lcwphcmUgZW1pdHRlZCB3aXRoIHRoZWlyIHNjaGVt YSBwcmVmaXg6IHdoZW4gdHJ1ZSAodGhlIGRlZmF1bHQpIHRoZQphY3RpdmUgc2VhcmNoX3BhdGgg aXMgdGVtcG9yYXJpbHkgbmFycm93ZWQgdG8gcGdfY2F0YWxvZyBzbyBldmVyeQpkZXBhcnNlIGhl bHBlciBwcm9kdWNlcyBmdWxseS1xdWFsaWZpZWQgbmFtZXM7IHdoZW4gZmFsc2UgaXQgaXMgbmFy cm93ZWQKdG8gdGhlIHRhcmdldCB0YWJsZSdzIG93biBzY2hlbWEgc28gc2FtZS1zY2hlbWEgcmVm ZXJlbmNlcyBjb21lIG91dAp1bnF1YWxpZmllZCB3aGlsZSBjcm9zcy1zY2hlbWEgcmVmZXJlbmNl cyByZW1haW4gcXVhbGlmaWVkIGZvcgpjb3JyZWN0bmVzcy4gIFRlbXBvcmFyeSB0YWJsZXMgYXJl IG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgp0aGlzIHNldHRpbmc6IHRoZSBU RU1QT1JBUlkga2V5d29yZCBhbHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZAplbWl0 dGluZyBwZ190ZW1wX05OLnJlbG5hbWUgd291bGQgcHJvZHVjZSBub24tcmVwbGF5YWJsZSBEREwu CgpPYmplY3QtY2xhc3MgZmlsdGVyaW5nIHVzZXMgdHdvIG11dHVhbGx5LWV4Y2x1c2l2ZSB0ZXh0 LWFycmF5CnBhcmFtZXRlcnMsIG9ubHlfa2luZHMgYW5kIGV4Y2VwdF9raW5kcy4gIFdoZW4gb25s eV9raW5kcyBpcyBzZXQsIG9ubHkKdGhlIGxpc3RlZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiBl eGNlcHRfa2luZHMgaXMgc2V0LCBldmVyeSBraW5kCmV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgaXMg ZW1pdHRlZDsgd2hlbiBuZWl0aGVyIGlzIHNldCBldmVyeSBraW5kIGlzCmVtaXR0ZWQuICBFYWNo IGFycmF5IGVsZW1lbnQgaXMgbWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHkgd2l0aApsZWFkaW5n L3RyYWlsaW5nIHdoaXRlc3BhY2UgdHJpbW1lZDsgYW4gdW5yZWNvZ25pemVkIG5hbWUgcmFpc2Vz IGFuCmVycm9yLiAgVGhlIGtpbmQgdm9jYWJ1bGFyeSBpczoKCiAgdGFibGUsIGluZGV4LCBwcmlt YXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1c2lvbiwKICBydWxlLCBz dGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBhcnRpdGlvbgoKdHJpZ2dlciBhbmQg cG9saWN5IGFyZSBhY2NlcHRlZCBpbiB0aGUgdm9jYWJ1bGFyeSBidXQgY3VycmVudGx5IHByb2R1 Y2UKbm8gb3V0cHV0OyB0aGV5IGFyZSByZXNlcnZlZCBmb3Igd2hlbiBzdGFuZGFsb25lIHBnX2dl dF90cmlnZ2VyX2RkbCgpCmFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgYmVjb21lIGF2 YWlsYWJsZS4KCk5PVCBOVUxMIGlzIG5vdCBwYXJ0IG9mIHRoZSB2b2NhYnVsYXJ5OiBpdCBpcyBh bHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CnByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkg YWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgcmVqZWN0LgpXaGVuIHJlcGxpY2FfaWRlbnRp dHkgaXMgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIHRoZSB0YWJsZSdzIFJFUExJQ0EKSURFTlRJ VFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCB0aGF0IHRoZSBmaWx0ZXIgd291bGQg c3VwcHJlc3MsCnRoZSBmdW5jdGlvbiByYWlzZXMgYW4gZXJyb3IgYmVmb3JlIGVtaXR0aW5nIGFu eSBvdXRwdXQsIHNvIHRoZQpnZW5lcmF0ZWQgRERMIG5ldmVyIHJlZmVyZW5jZXMgYW4gaW5kZXgg aXQgZGlkIG5vdCBwcm9kdWNlLgoKRGVmYXVsdCBvbWlzc2lvbiBjb252ZW50aW9uOiBldmVyeSBv cHRpb25hbCBjbGF1c2UgaXMgb21pdHRlZCB3aGVuIGl0cwp2YWx1ZSBtYXRjaGVzIHdoYXQgdGhl IHNlcnZlciB3b3VsZCByZWFwcGx5IG9uIHJvdW5kLXRyaXAsIGluY2x1ZGluZwp0eXBlLWRlZmF1 bHQgQ09MTEFURSwgcGVyLXR5cGUgU1RPUkFHRSwgdGhlIGF1dG8tZ2VuZXJhdGVkIGlkZW50aXR5 CnNlcXVlbmNlIG5hbWUgYW5kIHBhcmFtZXRlciBkZWZhdWx0cywgaGVhcCBhY2Nlc3MgbWV0aG9k LCBkZWZhdWx0ClJFUExJQ0EgSURFTlRJVFksIGRpc2FibGVkIFJMUyB0b2dnbGVzLCBlbXB0eSBy ZWxvcHRpb25zLCBhbmQgdGhlCmRlZmF1bHQgdGFibGVzcGFjZS4KCkF1dGhvcjogQWtzaGF5IEpv c2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IE1hcmNvcyBQ ZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6 c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTogS3lvdGFybyBIb3JpZ3VjaGkg PGhvcmlreW90YS5udHRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5j aGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFJ1aSBaaGFvIDx6aGFvcnVpMTI2QGdtYWlsLmNv bT4KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAgICAgICAgICAgICAgfCAg MTQ2ICsrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgICAgICAgICAgICAgfCAg IDkzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAg MzAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAgICAgICAgICB8IDIw MDEgKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAg ICAgICAgICAgICB8ICAgODcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAg ICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAg ICAgICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCAgICAg ICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgICB8ICAgIDQgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5v dXQgICAgIHwgMTUxOCArKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3Nj aGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRf dGFibGVfZGRsLnNxbCAgICAgfCAgODc5ICsrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgICAyICsKIDEzIGZpbGVzIGNoYW5nZWQsIDQ3NTcg aW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFibGVfZGRsLm91dAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsCgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9m dW5jLWluZm8uc2dtbAppbmRleCA2OWVmMzg1N2NmYS4uNTVjNmI4NzMyNDAgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5j L2Z1bmMtaW5mby5zZ21sCkBAIC0zOTYwLDYgKzM5NjAsMTUyIEBAIGFjbCAgICAgIHwge3Bvc3Rn cmVzPWFyd2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVzfQogICAgICAgICBpcyBmYWxzZSwg dGhlIDxsaXRlcmFsPk9XTkVSPC9saXRlcmFsPiBjbGF1c2UgaXMgb21pdHRlZC4KICAgICAgICA8 L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkg cm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAg ICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfZ2V0X3RhYmxlX2RkbDwvcHJp bWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19nZXRfdGFi bGVfZGRsPC9mdW5jdGlvbj4KKyAgICAgICAgKCA8cGFyYW1ldGVyPnJlbGF0aW9uPC9wYXJhbWV0 ZXI+IDx0eXBlPnJlZ2NsYXNzPC90eXBlPgorICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVy PnByZXR0eTwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJh bD5ERUZBVUxUPC9saXRlcmFsPiBmYWxzZTwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4s IDxwYXJhbWV0ZXI+b3duZXI8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAg ICAgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gdHJ1ZTwvb3B0aW9uYWw+CisgICAgICAgIDxv cHRpb25hbD4sIDxwYXJhbWV0ZXI+dGFibGVzcGFjZTwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFu PC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiB0cnVlPC9vcHRpb25h bD4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5zY2hlbWFfcXVhbGlmaWVkPC9wYXJh bWV0ZXI+IDx0eXBlPmJvb2xlYW48L3R5cGU+CisgICAgICAgIDxsaXRlcmFsPkRFRkFVTFQ8L2xp dGVyYWw+IHRydWU8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPm9u bHlfa2luZHM8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dFtdPC90eXBlPgorICAgICAgICA8bGl0ZXJh bD5ERUZBVUxUPC9saXRlcmFsPiBOVUxMPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiwg PHBhcmFtZXRlcj5leGNlcHRfa2luZHM8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dFtdPC90eXBlPgor ICAgICAgICA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiBOVUxMPC9vcHRpb25hbD4gKQorICAg ICAgICA8cmV0dXJudmFsdWU+c2V0b2YgdGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJh PgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWNvbnN0cnVjdHMgdGhlIDxjb21tYW5kPkNSRUFU RSBUQUJMRTwvY29tbWFuZD4gc3RhdGVtZW50IGZvciB0aGUKKyAgICAgICAgc3BlY2lmaWVkIG9y ZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dlZCBieSB0aGUKKyAgICAgICAgPGNv bW1hbmQ+QUxURVIgVEFCTEU8L2NvbW1hbmQ+LCA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1h bmQ+LAorICAgICAgICA8Y29tbWFuZD5DUkVBVEUgUlVMRTwvY29tbWFuZD4sIGFuZCA8Y29tbWFu ZD5DUkVBVEUgU1RBVElTVElDUzwvY29tbWFuZD4KKyAgICAgICAgc3RhdGVtZW50cyBuZWVkZWQg dG8gcmVjcmVhdGUgdGhlIHRhYmxlJ3MgY29sdW1ucywgY29uc3RyYWludHMsCisgICAgICAgIGlu ZGV4ZXMsIHJ1bGVzLCBleHRlbmRlZCBzdGF0aXN0aWNzLCBhbmQgcm93LWxldmVsIHNlY3VyaXR5 IGZsYWdzLgorICAgICAgICBJbmhlcml0ZWQgY29sdW1ucyBhbmQgY29uc3RyYWludHMgYXJlIGVt aXR0ZWQgYnkgdGhlIHBhcmVudCB0YWJsZSdzCisgICAgICAgIERETCBhbmQgYXJlIG5vdCBkdXBs aWNhdGVkIG9uIGluaGVyaXRhbmNlIGNoaWxkcmVuIG9yIHBhcnRpdGlvbnMuCisgICAgICAgIEVh Y2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgorICAgICAgICBGb3Jl aWduLWtleSBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGVtaXR0ZWQgYWZ0ZXIgYWxsIG90aGVyCisg ICAgICAgIGNvbnN0cmFpbnRzIHNvIHRoYXQgc2VsZi1yZWZlcmVuY2luZyBmb3JlaWduIGtleXMg KHdoZXJlIHRoZQorICAgICAgICByZWZlcmVuY2VkIHByaW1hcnkgb3IgdW5pcXVlIGtleSBpcyBv biB0aGUgc2FtZSB0YWJsZSkgY2FuIGJlCisgICAgICAgIGFkZGVkIG9uY2UgdGhhdCBrZXkgYWxy ZWFkeSBleGlzdHMuCisgICAgICAgIFdoZW4gPHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4g aXMgdHJ1ZSwgdGhlIG91dHB1dCBpcworICAgICAgICBwcmV0dHktcHJpbnRlZC4gIFdoZW4gPHBh cmFtZXRlcj5vd25lcjwvcGFyYW1ldGVyPiBpcyBmYWxzZSwgdGhlCisgICAgICAgIDxjb21tYW5k PkFMVEVSIFRBQkxFIC4uLiBPV05FUiBUTzwvY29tbWFuZD4gc3RhdGVtZW50IGlzIG9taXR0ZWQu CisgICAgICAgIFdoZW4gPHBhcmFtZXRlcj50YWJsZXNwYWNlPC9wYXJhbWV0ZXI+IGlzIGZhbHNl LCB0aGUKKyAgICAgICAgPGxpdGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4gY2xhdXNlIGlzIG9t aXR0ZWQgZnJvbSB0aGUKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBz dGF0ZW1lbnQuICBUaGUKKyAgICAgICAgPHBhcmFtZXRlcj5vbmx5X2tpbmRzPC9wYXJhbWV0ZXI+ IGFuZCA8cGFyYW1ldGVyPmV4Y2VwdF9raW5kczwvcGFyYW1ldGVyPgorICAgICAgICBwYXJhbWV0 ZXJzIGRlc2NyaWJlZCBiZWxvdyBjb250cm9sIHdoaWNoIG9iamVjdCBjbGFzc2VzIGFyZSBlbWl0 dGVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxwYXJhbWV0 ZXI+b25seV9raW5kczwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5leGNlcHRfa2luZHM8L3Bh cmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVycyBlYWNoIHRha2UgYSB0ZXh0IGFycmF5IG9mIG9i amVjdC1jbGFzcyBraW5kIG5hbWVzCisgICAgICAgIGFuZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZl IChzcGVjaWZ5aW5nIGJvdGggcmFpc2VzIGFuCisgICAgICAgIGVycm9yKS4gIFdoZW4gPHBhcmFt ZXRlcj5vbmx5X2tpbmRzPC9wYXJhbWV0ZXI+IGlzIHNldCwgb25seSB0aGUKKyAgICAgICAgbGlz dGVkIGtpbmRzIGFyZSBlbWl0dGVkOyB3aGVuIDxwYXJhbWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJh bWV0ZXI+IGlzCisgICAgICAgIHNldCwgZXZlcnkga2luZCA8ZW1waGFzaXM+ZXhjZXB0PC9lbXBo YXNpcz4gdGhlIGxpc3RlZCBvbmVzIGlzCisgICAgICAgIGVtaXR0ZWQuICBXaGVuIG5laXRoZXIg aXMgc2V0ICh0aGUgZGVmYXVsdCksIGV2ZXJ5IGtpbmQgaXMKKyAgICAgICAgZW1pdHRlZC4gIExl YWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gZWFjaCBhcnJheSBlbGVtZW50CisgICAg ICAgIGlzIGlnbm9yZWQgYW5kIG1hdGNoaW5nIGlzIGNhc2UtaW5zZW5zaXRpdmU7IGFuIHVucmVj b2duaXplZAorICAgICAgICBraW5kIG5hbWUgcmFpc2VzIGFuIGVycm9yLgorICAgICAgICBUaGUg a2luZCB2b2NhYnVsYXJ5IGlzCisgICAgICAgIDxsaXRlcmFsPnRhYmxlPC9saXRlcmFsPiwKKyAg ICAgICAgPGxpdGVyYWw+aW5kZXg8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5wcmltYXJ5 X2tleTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnVuaXF1ZTwvbGl0ZXJhbD4sCisgICAg ICAgIDxsaXRlcmFsPmNoZWNrPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+Zm9yZWlnbl9r ZXk8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5leGNsdXNpb248L2xpdGVyYWw+LAorICAg ICAgICA8bGl0ZXJhbD5ydWxlPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+c3RhdGlzdGlj czwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnRyaWdnZXI8L2xpdGVyYWw+LAorICAgICAg ICA8bGl0ZXJhbD5wb2xpY3k8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5ybHM8L2xpdGVy YWw+ICh0aGUKKyAgICAgICAgPGNvbW1hbmQ+RU5BQkxFPC9jb21tYW5kPi88Y29tbWFuZD5GT1JD RSBST1cgTEVWRUwgU0VDVVJJVFk8L2NvbW1hbmQ+CisgICAgICAgIHRvZ2dsZXMpLAorICAgICAg ICA8bGl0ZXJhbD5yZXBsaWNhX2lkZW50aXR5PC9saXRlcmFsPiwgYW5kCisgICAgICAgIDxsaXRl cmFsPnBhcnRpdGlvbjwvbGl0ZXJhbD4gKHRoZSBEREwgZm9yIGVhY2ggZGlyZWN0CisgICAgICAg IHBhcnRpdGlvbiBjaGlsZCBvZiBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudCkuCisgICAgICAg IE5vdGUgdGhhdCA8bGl0ZXJhbD50cmlnZ2VyPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+cG9saWN5 PC9saXRlcmFsPgorICAgICAgICBhcmUgYWNjZXB0ZWQgaW4gdGhlIHZvY2FidWxhcnkgYnV0IGN1 cnJlbnRseSBwcm9kdWNlIG5vIG91dHB1dDsKKyAgICAgICAgdGhleSBhcmUgcmVzZXJ2ZWQgZm9y IGZ1dHVyZSB1c2Ugd2hlbiBzdGFuZGFsb25lCisgICAgICAgIDxmdW5jdGlvbj5wZ19nZXRfdHJp Z2dlcl9kZGw8L2Z1bmN0aW9uPiBhbmQKKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9wb2xpY3lf ZGRsPC9mdW5jdGlvbj4gaGVscGVycyBiZWNvbWUgYXZhaWxhYmxlLiAgVGhlCisgICAgICAgIDxs aXRlcmFsPnRhYmxlPC9saXRlcmFsPiBraW5kIGdyb3VwcyB0aGUKKyAgICAgICAgPGNvbW1hbmQ+ Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBzdGF0ZW1lbnQgdG9nZXRoZXIgd2l0aCB0aGUKKyAgICAg ICAgcmVsYXRlZCBwZXItdGFibGUgPGNvbW1hbmQ+QUxURVIgVEFCTEU8L2NvbW1hbmQ+IHBhc3Nl czoKKyAgICAgICAgPGNvbW1hbmQ+T1dORVIgVE88L2NvbW1hbmQ+LCBjaGlsZC1kZWZhdWx0Cisg ICAgICAgIDxjb21tYW5kPlNFVCBERUZBVUxUPC9jb21tYW5kPiwgYW5kIHBlci1jb2x1bW4KKyAg ICAgICAgPGNvbW1hbmQ+U0VUICg8cmVwbGFjZWFibGU+YXR0b3B0aW9uczwvcmVwbGFjZWFibGU+ KTwvY29tbWFuZD4uCisgICAgICAgIDxsaXRlcmFsPk5PVCBOVUxMPC9saXRlcmFsPiBjb25zdHJh aW50cyBhcmUgbm90IHBhcnQgb2YgdGhlCisgICAgICAgIHZvY2FidWxhcnk7IHRoZXkgYXJlIGFs d2F5cyBlbWl0dGVkIGFzIHBhcnQgb2YgdGhlIHRhYmxlIHRvCisgICAgICAgIGF2b2lkIHByb2R1 Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0CisgICAgICAgIDxsaXRlcmFsPk5VTEw8 L2xpdGVyYWw+IHZhbHVlcyB0aGUgc291cmNlIHdvdWxkIGhhdmUgcmVqZWN0ZWQuCisgICAgICAg IEZvciBleGFtcGxlLCB0aGUgc2Vjb25kIHBhc3Mgb2YgYSB0d28tcGFzcyBzY2hlbWEgY2xvbmUg dGhhdAorICAgICAgICBhZGRzIGNyb3NzLXRhYmxlIGZvcmVpZ24ga2V5cyBhZnRlciBkYXRhIGhh cyBsb2FkZWQgY2FuIGJlCisgICAgICAgIHdyaXR0ZW4gYXMKKyAgICAgICAgPGxpdGVyYWw+b25s eV9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXTwvbGl0ZXJhbD4sIGFuZCB0aGUKKyAgICAg ICAgcHViL3N1Yi1zdHlsZSBjbG9uZSB0aGF0IGtlZXBzIGEgcHJpbWFyeSBrZXkgYnV0IGRyb3Bz IGV2ZXJ5CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnQgY2FuIGJlIHdyaXR0ZW4gYXMKKyAgICAg ICAgPGxpdGVyYWw+ZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdjaGVjaycsJ2ZvcmVp Z25fa2V5JywnZXhjbHVzaW9uJ108L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgdGFibGUgaGFzCisgICAgICAgIDxsaXRlcmFsPlJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVg8L2xpdGVyYWw+IGFuZCB0aGUKKyAgICAgICAgPGxpdGVy YWw+cmVwbGljYV9pZGVudGl0eTwvbGl0ZXJhbD4ga2luZCBpcyBpbiB0aGUgYWN0aXZlCisgICAg ICAgIGZpbHRlciwgdGhlIGtpbmQgdGhhdCBlbWl0cyB0aGUgcmVmZXJlbmNlZCBpbmRleAorICAg ICAgICAoPGxpdGVyYWw+cHJpbWFyeV9rZXk8L2xpdGVyYWw+LCA8bGl0ZXJhbD51bmlxdWU8L2xp dGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5leGNsdXNpb248L2xpdGVyYWw+LCBvciA8bGl0ZXJh bD5pbmRleDwvbGl0ZXJhbD4pIG11c3QKKyAgICAgICAgYWxzbyBiZSBpbiB0aGUgZmlsdGVyLiAg T3RoZXJ3aXNlIHRoZSBlbWl0dGVkCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYPC9jb21tYW5kPgorICAgICAgICB3b3VsZCByZWZl cmVuY2UgYW4gaW5kZXggdGhlIHNhbWUgRERMIG5ldmVyIHByb2R1Y2VkLCBhbmQgdGhlCisgICAg ICAgIGZ1bmN0aW9uIHJlcG9ydHMgYW4gZXJyb3IgYmVmb3JlIGVtaXR0aW5nIGFueSBzdGF0ZW1l bnRzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxwYXJhbWV0 ZXI+c2NoZW1hX3F1YWxpZmllZDwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgKGRlZmF1bHQKKyAgICAg ICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4pIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHRhcmdldCB0 YWJsZSdzIG93bgorICAgICAgICBzY2hlbWEgaXMgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCBE REwuICBXaGVuIHNldCB0bworICAgICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoZSB0 YWJsZSBuYW1lIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQKKyAgICAgICAgaW4gdGhlIDxjb21tYW5k PkNSRUFURSBUQUJMRTwvY29tbWFuZD4gYW5kIGV2ZXJ5IHN1YnNlcXVlbnQKKyAgICAgICAgPGNv bW1hbmQ+QUxURVIgVEFCTEU8L2NvbW1hbmQ+LCA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1h bmQ+LAorICAgICAgICA8Y29tbWFuZD5DUkVBVEUgUlVMRTwvY29tbWFuZD4sIGFuZAorICAgICAg ICA8Y29tbWFuZD5DUkVBVEUgU1RBVElTVElDUzwvY29tbWFuZD4gc3RhdGVtZW50LiAgUmVmZXJl bmNlcyB0bworICAgICAgICBvYmplY3RzIGluIHRoZSBzYW1lIHNjaGVtYSBhcyB0aGUgdGFyZ2V0 IHRhYmxlIChpbmhlcml0YW5jZQorICAgICAgICBwYXJlbnRzLCBwYXJ0aXRpb24gcGFyZW50cywg aWRlbnRpdHkgc2VxdWVuY2VzLCBhbmQgYW55CisgICAgICAgIHNhbWUtc2NoZW1hIG9iamVjdCB0 aGUgZGVwYXJzZSBoZWxwZXJzIGhhcHBlbiB0byBtZW50aW9uKSBhcmUKKyAgICAgICAgYWxzbyBl bWl0dGVkIHVucXVhbGlmaWVkLCBzbyB0aGUgc2NyaXB0IGNhbiBiZSByZXBsYXllZCB1bmRlciBh CisgICAgICAgIGRpZmZlcmVudCA8dmFybmFtZT5zZWFyY2hfcGF0aDwvdmFybmFtZT4gdG8gcmVj cmVhdGUgdGhlIHRhYmxlCisgICAgICAgIGluIGFub3RoZXIgc2NoZW1hLiAgQ3Jvc3Mtc2NoZW1h IHJlZmVyZW5jZXMgKGZvciBleGFtcGxlIGEKKyAgICAgICAgZm9yZWlnbiBrZXkgdGFyZ2V0IGlu IGEgZGlmZmVyZW50IHNjaGVtYSkgcmVtYWluIHF1YWxpZmllZCBmb3IKKyAgICAgICAgY29ycmVj dG5lc3MuICBQYXJ0aXRpb24gY2hpbGRyZW4gdGhhdCByZXNpZGUgaW4gYSBkaWZmZXJlbnQKKyAg ICAgICAgc2NoZW1hIHRoYW4gdGhlIHRhcmdldCB0YWJsZSBhcmUgYWx3YXlzIGVtaXR0ZWQgd2l0 aCBmdWxsIHNjaGVtYQorICAgICAgICBxdWFsaWZpY2F0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhpcyBw YXJhbWV0ZXIsIGJlY2F1c2UgdGhlIG91dHB1dAorICAgICAgICB3b3VsZCBvdGhlcndpc2UgcGxh Y2UgdGhlIGNoaWxkIGluIHRoZSB3cm9uZyBzY2hlbWEgd2hlbgorICAgICAgICByZXBsYXllZC4K KyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIEFsbCB0aHJlZSBmb3JtcyBv ZiA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IGFyZSBzdXBwb3J0ZWQ6CisgICAgICAg IHRoZSBvcmRpbmFyeSBjb2x1bW4tbGlzdCBmb3JtLCB0aGUgdHlwZWQtdGFibGUgZm9ybQorICAg ICAgICAoPGxpdGVyYWw+T0YgPHJlcGxhY2VhYmxlPnR5cGVfbmFtZTwvcmVwbGFjZWFibGU+PC9s aXRlcmFsPiwgd2l0aAorICAgICAgICBwZXItY29sdW1uIDxsaXRlcmFsPldJVEggT1BUSU9OUzwv bGl0ZXJhbD4gb3ZlcnJpZGVzIGZvciBsb2NhbAorICAgICAgICBkZWZhdWx0cywgPGxpdGVyYWw+ Tk9UIE5VTEw8L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+Q0hFQ0s8L2xpdGVyYWw+CisgICAgICAg IGNvbnN0cmFpbnRzKSwgYW5kIHRoZSA8bGl0ZXJhbD5QQVJUSVRJT04gT0Y8L2xpdGVyYWw+IGZv cm0uCisgICAgICAgIDxsaXRlcmFsPlRFTVBPUkFSWTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPlVO TE9HR0VEPC9saXRlcmFsPgorICAgICAgICBwZXJzaXN0ZW5jZSBtb2RlcyBhcmUgZW1pdHRlZCBm cm9tCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5yZWxwZXJzaXN0ZW5jZTwvc3RydWN0ZmllbGQ+LiAg Rm9yIHRlbXBvcmFyeSB0YWJsZXMKKyAgICAgICAgcmVnaXN0ZXJlZCBpbiB0aGUgY3VycmVudCBz ZXNzaW9uLCB0aGUKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIERFTEVURSBST1dTPC9saXRl cmFsPiBhbmQKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIERST1A8L2xpdGVyYWw+IGNsYXVz ZXMgYXJlIGVtaXR0ZWQ7IHRoZSBkZWZhdWx0CisgICAgICAgIDxsaXRlcmFsPk9OIENPTU1JVCBQ UkVTRVJWRSBST1dTPC9saXRlcmFsPiBpcyBvbWl0dGVkLgorICAgICAgIDwvcGFyYT48L2VudHJ5 PgorICAgICAgPC9yb3c+CiAgICAgIDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxl PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCmluZGV4IDRiOTgwMmFhZmNjLi44OTcxNTFiZDZk MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYwpAQCAtMjM2LDYgKzIzNiw5OSBAQCBmaW5k X2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9vbCBvbWl0 X2RldGFjaGVkLAogfQogCiAKKy8qCisgKiBmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMKKyAqCisg KiBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHRoZSBPSURzIG9mIGFsbCByZWxhdGlvbnMgdGhh dCB0aGUgcmVsYXRpb24gd2l0aAorICogT0lEICdyZWxpZCcgaW5oZXJpdHMgKmRpcmVjdGx5KiBm cm9tLCBpbiBpbmhzZXFubyBvcmRlciAodGhlIG9yZGVyIGluIHdoaWNoCisgKiB0aGV5IHNob3Vs ZCBhcHBlYXIgaW4gYW4gSU5IRVJJVFMgY2xhdXNlKS4KKyAqCisgKiBUaGUgc3BlY2lmaWVkIGxv Y2sgdHlwZSBpcyBhY3F1aXJlZCBvbiBlYWNoIHBhcmVudCByZWxhdGlvbiAoYnV0IG5vdCBvbiB0 aGUKKyAqIGdpdmVuIHJlbDsgY2FsbGVyIHNob3VsZCBhbHJlYWR5IGhhdmUgbG9ja2VkIGl0KS4g IElmIGxvY2ttb2RlIGlzIE5vTG9jaworICogdGhlbiBubyBsb2NrcyBhcmUgYWNxdWlyZWQsIGJ1 dCBjYWxsZXIgbXVzdCBiZXdhcmUgb2YgcmFjZSBjb25kaXRpb25zCisgKiBhZ2FpbnN0IHBvc3Np YmxlIERST1BzIG9mIHBhcmVudCByZWxhdGlvbnMuCisgKgorICogUGFydGl0aW9uIGNoaWxkcmVu IGFsc28gaGF2ZSBhIHBnX2luaGVyaXRzIGVudHJ5IHBvaW50aW5nIHRvIHRoZQorICogcGFydGl0 aW9uZWQgcGFyZW50OyBjYWxsZXJzIHRoYXQgZGlzdGluZ3Vpc2ggSU5IRVJJVFMgZnJvbSBQQVJU SVRJT04gT0YKKyAqIG11c3QgY2hlY2sgcmVsaXNwYXJ0aXRpb24gdGhlbXNlbHZlcy4KKyAqLwor TGlzdCAqCitmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMoT2lkIHJlbGlkLCBMT0NLTU9ERSBsb2Nr bW9kZSkKK3sKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCVJlbGF0aW9uCXJlbGF0aW9uOworCVN5 c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5WzFdOworCUhlYXBUdXBsZQlpbmhlcml0 c1R1cGxlOworCU9pZAkJCWluaHBhcmVudDsKKwlPaWQJCSAgICpvaWRhcnI7CisJaW50CQkJbWF4 b2lkcywKKwkJCQludW1vaWRzLAorCQkJCWk7CisKKwkvKgorCSAqIFNjYW4gcGdfaW5oZXJpdHMg dmlhIHRoZSAoaW5ocmVsaWQsIGluaHNlcW5vKSBpbmRleCBzbyB0aGF0IHRoZSByb3dzCisJICog Y29tZSBvdXQgaW4gaW5oc2Vxbm8gb3JkZXIsIHdoaWNoIGlzIHRoZSBvcmRlciByZXF1aXJlZCBm b3IgdGhlCisJICogSU5IRVJJVFMgY2xhdXNlLgorCSAqLworCW1heG9pZHMgPSA4OworCW9pZGFy ciA9IChPaWQgKikgcGFsbG9jKG1heG9pZHMgKiBzaXplb2YoT2lkKSk7CisJbnVtb2lkcyA9IDA7 CisKKwlyZWxhdGlvbiA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2lu aHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJ ZEdldERhdHVtKHJlbGlkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHJlbGF0aW9u LCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5 KTsKKworCXdoaWxlICgoaW5oZXJpdHNUdXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpICE9 IE5VTEwpCisJeworCQlpbmhwYXJlbnQgPSAoKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVChp bmhlcml0c1R1cGxlKSktPmluaHBhcmVudDsKKwkJaWYgKG51bW9pZHMgPj0gbWF4b2lkcykKKwkJ eworCQkJbWF4b2lkcyAqPSAyOworCQkJb2lkYXJyID0gKE9pZCAqKSByZXBhbGxvYyhvaWRhcnIs IG1heG9pZHMgKiBzaXplb2YoT2lkKSk7CisJCX0KKwkJb2lkYXJyW251bW9pZHMrK10gPSBpbmhw YXJlbnQ7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKworCXRhYmxlX2Nsb3NlKHJl bGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBBY3F1aXJlIGxvY2tzIGFuZCBi dWlsZCB0aGUgcmVzdWx0IGxpc3QuICBVbmxpa2UKKwkgKiBmaW5kX2luaGVyaXRhbmNlX2NoaWxk cmVuIHdlIGRvICpub3QqIHNvcnQgYnkgT0lEOiBjYWxsZXJzIG5lZWQgdGhlCisJICogc2Vxbm8t b3JkZXJlZCB0cmF2ZXJzYWwuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bW9pZHM7IGkrKykK Kwl7CisJCWluaHBhcmVudCA9IG9pZGFycltpXTsKKworCQlpZiAobG9ja21vZGUgIT0gTm9Mb2Nr KQorCQl7CisJCQlMb2NrUmVsYXRpb25PaWQoaW5ocGFyZW50LCBsb2NrbW9kZSk7CisKKwkJCWlm ICghU2VhcmNoU3lzQ2FjaGVFeGlzdHMxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmhwYXJl bnQpKSkKKwkJCXsKKwkJCQlVbmxvY2tSZWxhdGlvbk9pZChpbmhwYXJlbnQsIGxvY2ttb2RlKTsK KwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kX29pZChsaXN0LCBp bmhwYXJlbnQpOworCX0KKworCXBmcmVlKG9pZGFycik7CisKKwlyZXR1cm4gbGlzdDsKK30KKwor CiAvKgogICogZmluZF9hbGxfaW5oZXJpdG9ycyAtCiAgKgkJUmV0dXJucyBhIGxpc3Qgb2YgcmVs YXRpb24gT0lEcyBpbmNsdWRpbmcgdGhlIGdpdmVuIHJlbCBwbHVzCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCmluZGV4IDk1YWJhZjQ4OTBjLi4wNmFmYTY4MTFlYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMKQEAgLTc0Niw3ICs3NDYsNiBAQCBzdGF0aWMgT2JqZWN0QWRkcmVzcyBBVEV4ZWNT ZXRDb21wcmVzc2lvbihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJICBjb25zdCBjaGFyICpjb2x1 bW4sIE5vZGUgKm5ld1ZhbHVlLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiAKIHN0YXRpYyB2b2lkIGlu ZGV4X2NvcHlfZGF0YShSZWxhdGlvbiByZWwsIFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKTsK LXN0YXRpYyBjb25zdCBjaGFyICpzdG9yYWdlX25hbWUoY2hhciBjKTsKIAogc3RhdGljIHZvaWQg UmFuZ2VWYXJDYWxsYmFja0ZvckRyb3BSZWxhdGlvbihjb25zdCBSYW5nZVZhciAqcmVsLCBPaWQg cmVsT2lkLAogCQkJCQkJCQkJCQlPaWQgb2xkUmVsT2lkLCB2b2lkICphcmcpOwpAQCAtMjUyNCw3 ICsyNTIzLDcgQEAgdHJ1bmNhdGVfY2hlY2tfYWN0aXZpdHkoUmVsYXRpb24gcmVsKQogICogc3Rv cmFnZV9uYW1lCiAgKgkgIHJldHVybnMgdGhlIG5hbWUgY29ycmVzcG9uZGluZyB0byBhIHR5cHN0 b3JhZ2UvYXR0c3RvcmFnZSBlbnVtIHZhbHVlCiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKK2Nv bnN0IGNoYXIgKgogc3RvcmFnZV9uYW1lKGNoYXIgYykKIHsKIAlzd2l0Y2ggKGMpCkBAIC0xOTgz Nyw2ICsxOTgzNiwzMyBAQCByZW1vdmVfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpCiAJfQog fQogCisvKgorICogTG9vayB1cCB0aGUgcmVnaXN0ZXJlZCBPTiBDT01NSVQgYWN0aW9uIGZvciBh IHJlbGF0aW9uLgorICoKKyAqIFJldHVybnMgT05DT01NSVRfTk9PUCB3aGVuIG5vdGhpbmcgd2Fz IHJlZ2lzdGVyZWQsIHdoaWNoIGFsc28gY292ZXJzCisgKiB0ZW1wb3JhcnkgdGFibGVzIGNyZWF0 ZWQgd2l0aCB0aGUgZGVmYXVsdCBPTiBDT01NSVQgUFJFU0VSVkUgUk9XUworICogYmVoYXZpb3Ig KHJlZ2lzdGVyX29uX2NvbW1pdF9hY3Rpb24oKSBza2lwcyB0aG9zZSwgc2luY2Ugbm8gYWN0aW9u IGlzCisgKiBuZWVkZWQgYXQgY29tbWl0KS4gIEVudHJpZXMgbWFya2VkIGZvciBkZWxldGlvbiBp biB0aGUgY3VycmVudAorICogdHJhbnNhY3Rpb24gYXJlIGlnbm9yZWQuCisgKi8KK09uQ29tbWl0 QWN0aW9uCitnZXRfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpCit7CisJTGlzdENlbGwgICAq bDsKKworCWZvcmVhY2gobCwgb25fY29tbWl0cykKKwl7CisJCU9uQ29tbWl0SXRlbSAqb2MgPSAo T25Db21taXRJdGVtICopIGxmaXJzdChsKTsKKworCQlpZiAob2MtPnJlbGlkICE9IHJlbGlkKQor CQkJY29udGludWU7CisJCWlmIChvYy0+ZGVsZXRpbmdfc3ViaWQgIT0gSW52YWxpZFN1YlRyYW5z YWN0aW9uSWQpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIG9jLT5vbmNvbW1pdDsKKwl9CisJcmV0 dXJuIE9OQ09NTUlUX05PT1A7Cit9CisKIC8qCiAgKiBQZXJmb3JtIE9OIENPTU1JVCBhY3Rpb25z LgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKaW5kZXggYTcwZjFjMjg2NTUuLmM3NGMzOWEx MjVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBU aGlzIGZpbGUgY29udGFpbnMgdGhlIHBnX2dldF8qX2RkbCBmYW1pbHkgb2YgZnVuY3Rpb25zIHRo YXQgZ2VuZXJhdGUKICAqIERETCBzdGF0ZW1lbnRzIHRvIHJlY3JlYXRlIGRhdGFiYXNlIG9iamVj dHMgc3VjaCBhcyByb2xlcywgdGFibGVzcGFjZXMsCi0gKiBhbmQgZGF0YWJhc2VzLCBhbG9uZyB3 aXRoIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3Igb3B0aW9uIHBhcnNpbmcgYW5kCisgKiBkYXRh YmFzZXMsIGFuZCB0YWJsZXMsIGFsb25nIHdpdGggY29tbW9uIGluZnJhc3RydWN0dXJlIGZvcgog ICogcHJldHR5LXByaW50aW5nLgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cApAQCAtMjEsMzAgKzIxLDg5 IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0 YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy90b2Fz dF9jb21wcmVzc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19hdXRoX21lbWJlcnMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1 dGhpZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RiX3Jv bGVfc2V0dGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKKyNpbmNs dWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIK ICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCi0jaW5jbHVkZSAiY29tbW9uL3JlbHBh dGguaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1 dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvZGF0ZXRpbWUuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0 aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgotI2luY2x1ZGUgInV0aWxz L3BnX2xvY2FsZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3J1 bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMv dGltZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCisvKgorICogT2JqZWN0 LWNsYXNzIGtpbmRzIHRoYXQgdGhlIG9ubHkgLyBleGNlcHQgb3B0aW9ucyBvbgorICogcGdfZ2V0 X3RhYmxlX2RkbCBjYW4gZmlsdGVyIG9uLiAgTWVtYmVycyBhcmUgc3RvcmVkIGFzIGludGVnZXJz IGluIGEKKyAqIEJpdG1hcHNldCBvbiBUYWJsZURkbENvbnRleHQuICBLZWVwIHRhYmxlX2RkbF9r aW5kX25hbWVzW10gaW4gc3luYworICogd2l0aCB0aGUgb3JkZXIgb2YgYWRkaXRpb25zIGhlcmUu CisgKi8KK3R5cGVkZWYgZW51bSBUYWJsZURkbEtpbmQKK3sKKwlUQUJMRV9ERExfS0lORF9UQUJM RSwKKwlUQUJMRV9ERExfS0lORF9JTkRFWCwKKwlUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWSwK KwlUQUJMRV9ERExfS0lORF9VTklRVUUsCisJVEFCTEVfRERMX0tJTkRfQ0hFQ0ssCisJVEFCTEVf RERMX0tJTkRfRk9SRUlHTl9LRVksCisJVEFCTEVfRERMX0tJTkRfRVhDTFVTSU9OLAorCVRBQkxF X0RETF9LSU5EX1JVTEUsCisJVEFCTEVfRERMX0tJTkRfU1RBVElTVElDUywKKwlUQUJMRV9ERExf S0lORF9UUklHR0VSLAorCVRBQkxFX0RETF9LSU5EX1BPTElDWSwKKwlUQUJMRV9ERExfS0lORF9S TFMsCisJVEFCTEVfRERMX0tJTkRfUkVQTElDQV9JREVOVElUWSwKKwlUQUJMRV9ERExfS0lORF9Q QVJUSVRJT04sCit9CQkJVGFibGVEZGxLaW5kOworCitzdGF0aWMgY29uc3Qgc3RydWN0Cit7CisJ Y29uc3QgY2hhciAqbmFtZTsKKwlUYWJsZURkbEtpbmQga2luZDsKK30JCQl0YWJsZV9kZGxfa2lu ZF9uYW1lc1tdID0KK3sKKwl7InRhYmxlIiwgVEFCTEVfRERMX0tJTkRfVEFCTEV9LAorCXsiaW5k ZXgiLCBUQUJMRV9ERExfS0lORF9JTkRFWH0sCisJeyJwcmltYXJ5X2tleSIsIFRBQkxFX0RETF9L SU5EX1BSSU1BUllfS0VZfSwKKwl7InVuaXF1ZSIsIFRBQkxFX0RETF9LSU5EX1VOSVFVRX0sCisJ eyJjaGVjayIsIFRBQkxFX0RETF9LSU5EX0NIRUNLfSwKKwl7ImZvcmVpZ25fa2V5IiwgVEFCTEVf RERMX0tJTkRfRk9SRUlHTl9LRVl9LAorCXsiZXhjbHVzaW9uIiwgVEFCTEVfRERMX0tJTkRfRVhD TFVTSU9OfSwKKwl7InJ1bGUiLCBUQUJMRV9ERExfS0lORF9SVUxFfSwKKwl7InN0YXRpc3RpY3Mi LCBUQUJMRV9ERExfS0lORF9TVEFUSVNUSUNTfSwKKwl7InRyaWdnZXIiLCBUQUJMRV9ERExfS0lO RF9UUklHR0VSfSwKKwl7InBvbGljeSIsIFRBQkxFX0RETF9LSU5EX1BPTElDWX0sCisJeyJybHMi LCBUQUJMRV9ERExfS0lORF9STFN9LAorCXsicmVwbGljYV9pZGVudGl0eSIsIFRBQkxFX0RETF9L SU5EX1JFUExJQ0FfSURFTlRJVFl9LAorCXsicGFydGl0aW9uIiwgVEFCTEVfRERMX0tJTkRfUEFS VElUSU9OfSwKK307CisKK3N0YXRpYyBCaXRtYXBzZXQgKnBhcnNlX2tpbmRfYXJyYXkoY29uc3Qg Y2hhciAqcGFyYW1uYW1lLCBBcnJheVR5cGUgKmFycik7CiBzdGF0aWMgdm9pZCBhcHBlbmRfZGRs X29wdGlvbihTdHJpbmdJbmZvIGJ1ZiwgYm9vbCBwcmV0dHksIGludCBpbmRlbnQsCiAJCQkJCQkJ ICBjb25zdCBjaGFyICpmbXQsIC4uLikKIAkJCXBnX2F0dHJpYnV0ZV9wcmludGYoNCwgNSk7CkBA IC01Nyw2ICsxMTYsMTgzIEBAIHN0YXRpYyBEYXR1bSBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3Jm KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgdHNpZCk7CiBzdGF0aWMgTGlzdCAqcGdfZ2V0 X2RhdGFiYXNlX2RkbF9pbnRlcm5hbChPaWQgZGJpZCwgYm9vbCBwcmV0dHksCiAJCQkJCQkJCQkJ ICBib29sIG5vX293bmVyLCBib29sIG5vX3RhYmxlc3BhY2UpOwogCisvKgorICogUGVyLWNvbHVt biBjYWNoZSBvZiBsb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxMIGNvbnN0cmFpbnRzLiAgQnVpbHQg b25jZQorICogYnkgY29sbGVjdF9sb2NhbF9ub3RfbnVsbCgpIGFuZCBjb25zdWx0ZWQgYnkgdGhl IGNvbHVtbi1lbWl0IGhlbHBlcnMKKyAqIGFuZCB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBs b29wLiAgRW50cmllcyB3aXRoIGNvbm9pZCA9PSBJbnZhbGlkT2lkCisgKiBtZWFuIHRoZSBjb2x1 bW4gaGFzIG5vIGxvY2FsIE5PVCBOVUxMIGNvbnN0cmFpbnQgcm93IGluIHBnX2NvbnN0cmFpbnQK KyAqICh0aGUgY29sdW1uIG1heSBzdGlsbCBoYXZlIGF0dG5vdG51bGw9dHJ1ZSBvbiBhIHByZS1Q Ry0xOC11cGdyYWRlZAorICogY2F0YWxvZywgaW4gd2hpY2ggY2FzZSBlbWl0IHBsYWluIGlubGlu ZSBOT1QgTlVMTCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IExvY2FsTm90TnVsbEVudHJ5Cit7CisJ T2lkCQkJY29ub2lkOworCWNoYXIJICAgKm5hbWU7CisJYm9vbAkJaXNfYXV0bzsJCS8qIG1hdGNo ZXMgIjx0YWJsZT5fPGNvbD5fbm90X251bGwiICovCisJYm9vbAkJbm9faW5oZXJpdDsKK30JCQlM b2NhbE5vdE51bGxFbnRyeTsKKworLyoKKyAqIFdvcmtpbmcgY29udGV4dCB0aHJlYWRlZCB0aHJv dWdoIHRoZSBwZXItcGFzcyBoZWxwZXJzIGJlbG93LiAgSW5wdXRzCisgKiAoY2FsbGVyLXByb3Zp ZGVkIG9wdGlvbiBmbGFncykgYXJlIGZpbGxlZCBpbiBvbmNlIGF0IHRoZSB0b3Agb2YKKyAqIHBn X2dldF90YWJsZV9kZGxfaW50ZXJuYWwgYW5kIHRyZWF0ZWQgYXMgcmVhZC1vbmx5IHRoZXJlYWZ0 ZXIuICBEZXJpdmVkCisgKiBmaWVsZHMgKHF1YWxuYW1lLCBubl9lbnRyaWVzLCBza2lwX25vdG51 bGxfb2lkcykgYXJlIGNvbXB1dGVkIG9uY2UKKyAqIGR1cmluZyBzZXR1cC4gIEVhY2ggcGFzcyBh cHBlbmRzIHRvIGN0eC0+YnVmIGFuZCBwdXNoZXMgdGhlIGZpbmlzaGVkCisgKiBzdGF0ZW1lbnQg b250byBjdHgtPnN0YXRlbWVudHMgdmlhIGFwcGVuZF9zdG10KCkuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IFRhYmxlRGRsQ29udGV4dAoreworCVJlbGF0aW9uCXJlbDsKKwlPaWQJCQlyZWxpZDsKKwli b29sCQlwcmV0dHk7CisJYm9vbAkJbm9fb3duZXI7CisJYm9vbAkJbm9fdGFibGVzcGFjZTsKKwli b29sCQlzY2hlbWFfcXVhbGlmaWVkOworCisJLyoKKwkgKiBPYmplY3QtY2xhc3MgZmlsdGVyaW5n LiAgSWYgb25seV9raW5kcyBpcyBub24tTlVMTCwgb25seSB0aGUKKwkgKiBraW5kcyBpbiB0aGF0 IHNldCBhcmUgZW1pdHRlZDsgaWYgZXhjZXB0X2tpbmRzIGlzIG5vbi1OVUxMLCBhbGwKKwkgKiBr aW5kcyAqZXhjZXB0KiB0aG9zZSBpbiB0aGF0IHNldCBhcmUgZW1pdHRlZDsgaWYgYm90aCBhcmUg TlVMTCwKKwkgKiBldmVyeSBraW5kIGlzIGVtaXR0ZWQgKHRoZSBkZWZhdWx0KS4gIFRoZSB0d28g YXJlIG11dHVhbGx5CisJICogZXhjbHVzaXZlIGF0IHRoZSB1c2VyLWZhY2luZyBsYXllciAodGhl IFNSRiBlbnRyeSByZWplY3RzCisJICogc3BlY2lmeWluZyBib3RoKS4KKwkgKi8KKwlCaXRtYXBz ZXQgICpvbmx5X2tpbmRzOworCUJpdG1hcHNldCAgKmV4Y2VwdF9raW5kczsKKworCS8qIERlcml2 ZWQgZHVyaW5nIHNldHVwICovCisJT2lkCQkJYmFzZV9uYW1lc3BhY2U7CisJY2hhcgkgICAqcXVh bG5hbWU7CisJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7IC8qID49IDAgaWYgd2UgbmFycm93ZWQgc2Vh cmNoX3BhdGggKi8KKwlMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllczsKKwlMaXN0CSAgICpz a2lwX25vdG51bGxfb2lkczsKKworCS8qIE11dGFibGUgd29ya2luZyBzdGF0ZSAqLworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKwlMaXN0CSAgICpzdGF0ZW1lbnRzOworfQkJCVRhYmxlRGRsQ29udGV4 dDsKKworc3RhdGljIExpc3QgKnBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250 ZXh0ICpjdHgpOworc3RhdGljIGJvb2wgaXNfa2luZF9pbmNsdWRlZChjb25zdCBUYWJsZURkbENv bnRleHQgKmN0eCwgVGFibGVEZGxLaW5kIGtpbmQpOworc3RhdGljIHZvaWQgYXBwZW5kX2NvbHVt bl9kZWZzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJ CSAgIGJvb2wgaW5jbHVkZV9jaGVjaywKKwkJCQkJCQkgICBib29sIHNjaGVtYV9xdWFsaWZpZWQs CisJCQkJCQkJICAgTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXMpOworc3RhdGljIHZvaWQg YXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJl bCwKKwkJCQkJCQkJCQkgIGJvb2wgcHJldHR5LCBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJCQkJ CQkJICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllcyk7CitzdGF0aWMgdm9pZCBhcHBlbmRf aW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsCisJ CQkJCQkJCQkJCWJvb2wgcHJldHR5LCBib29sICpmaXJzdCk7CitzdGF0aWMgY2hhciAqZmluZF9h dHRyZGVmX3RleHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwKKwkJCQkJCQkgICBM aXN0ICoqZHBjb250ZXh0KTsKK3N0YXRpYyBjaGFyICpsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChP aWQgcmVsaWQsIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCSBPaWQgYmFzZV9uYW1l c3BhY2UpOworc3RhdGljIExvY2FsTm90TnVsbEVudHJ5ICpjb2xsZWN0X2xvY2FsX25vdF9udWxs KFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCSAgTGlzdCAqKnNraXBfb2lkcyk7CisKK3N0YXRp YyB2b2lkIGFwcGVuZF9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVt aXRfY3JlYXRlX3RhYmxlX3N0bXQoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQg ZW1pdF9vd25lcl9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRf Y2hpbGRfZGVmYXVsdF9vdmVycmlkZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZv aWQgZW1pdF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVt aXRfaW5kZXhlcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2xvY2Fs X2NvbnN0cmFpbnRzKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcnVs ZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1pdF9zdGF0aXN0aWNzKFRh YmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcmVwbGljYV9pZGVudGl0eShU YWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3Jsc190b2dnbGVzKFRhYmxl RGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcGFydGl0aW9uX2NoaWxkcmVuKFRh YmxlRGRsQ29udGV4dCAqY3R4KTsKKworCisvKgorICogcGFyc2Vfa2luZF9hcnJheQorICoJCVBh cnNlIGEgdGV4dFtdIG9mIG9iamVjdC1jbGFzcyBraW5kIG5hbWVzIGludG8gYSBCaXRtYXBzZXQg b2YKKyAqCQlUYWJsZURkbEtpbmQgdmFsdWVzLgorICoKKyAqIEVhY2ggZWxlbWVudCBpcyBtYXRj aGVkIGNhc2UtaW5zZW5zaXRpdmVseTsgc3Vycm91bmRpbmcgd2hpdGVzcGFjZSBpcworICogc3Ry aXBwZWQuICBOVUxMIGVsZW1lbnRzIGFyZSByZWplY3RlZC4gIFVua25vd24ga2luZCBuYW1lcyBy YWlzZSBhbiBlcnJvcgorICogY2l0aW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXIgbmFtZS4gIEFu IGVtcHR5IGFycmF5IGlzIGFsc28gcmVqZWN0ZWQuCisgKiBEdXBsaWNhdGUgZW50cmllcyBhcmUg c2lsZW50bHkgZGUtZHVwbGljYXRlZCBieSB0aGUgQml0bWFwc2V0LgorICovCitzdGF0aWMgQml0 bWFwc2V0ICoKK3BhcnNlX2tpbmRfYXJyYXkoY29uc3QgY2hhciAqcGFyYW1uYW1lLCBBcnJheVR5 cGUgKmFycikKK3sKKwlEYXR1bQkgICAqZWxlbXM7CisJYm9vbAkgICAqbnVsbHM7CisJaW50CQkJ bmVsZW1zOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwlkZWNvbnN0cnVjdF9hcnJh eV9idWlsdGluKGFyciwgVEVYVE9JRCwgJmVsZW1zLCAmbnVsbHMsICZuZWxlbXMpOworCisJaWYg KG5lbGVtcyA9PSAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInBhcmFtZXRlciBcIiVzXCIgbXVz dCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBraW5kIiwKKwkJCQkJCXBhcmFtbmFtZSkpKTsKKworCWZv ciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJeworCQljaGFyCSAgICpyYXc7CisJCWNo YXIJICAgKnRva2VuOworCQljaGFyCSAgICplbmQ7CisJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisK KwkJaWYgKG51bGxzW2ldKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInBhcmFtZXRlciBcIiVz XCIgbXVzdCBub3QgY29udGFpbiBOVUxMIGVsZW1lbnRzIiwKKwkJCQkJCQlwYXJhbW5hbWUpKSk7 CisKKwkJcmF3ID0gdGV4dF90b19jc3RyaW5nKERhdHVtR2V0VGV4dFBQKGVsZW1zW2ldKSk7CisK KwkJLyogVHJpbSBsZWFkaW5nIHdoaXRlc3BhY2UuICovCisJCXRva2VuID0gcmF3OworCQl3aGls ZSAoKnRva2VuID09ICcgJyB8fCAqdG9rZW4gPT0gJ1x0JykKKwkJCXRva2VuKys7CisKKwkJLyog VHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLworCQllbmQgPSB0b2tlbiArIHN0cmxlbih0b2tl bik7CisJCXdoaWxlIChlbmQgPiB0b2tlbiAmJiAoZW5kWy0xXSA9PSAnICcgfHwgZW5kWy0xXSA9 PSAnXHQnKSkKKwkJCWVuZC0tOworCQkqZW5kID0gJ1wwJzsKKworCQlmb3IgKHNpemVfdCBqID0g MDsgaiA8IGxlbmd0aG9mKHRhYmxlX2RkbF9raW5kX25hbWVzKTsgaisrKQorCQl7CisJCQlpZiAo cGdfc3RyY2FzZWNtcCh0b2tlbiwgdGFibGVfZGRsX2tpbmRfbmFtZXNbal0ubmFtZSkgPT0gMCkK KwkJCXsKKwkJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsCisJCQkJCQkJCQkJKGlu dCkgdGFibGVfZGRsX2tpbmRfbmFtZXNbal0ua2luZCk7CisJCQkJZm91bmQgPSB0cnVlOworCQkJ CWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJy bXNnKCJ1bnJlY29nbml6ZWQga2luZCBcIiVzXCIgaW4gcGFyYW1ldGVyIFwiJXNcIiIsCisJCQkJ CQkJdG9rZW4sIHBhcmFtbmFtZSkpKTsKKworCQlwZnJlZShyYXcpOworCX0KKworCXJldHVybiBy ZXN1bHQ7Cit9CisKKy8qCisgKiBpc19raW5kX2luY2x1ZGVkCisgKgkJRGV0ZXJtaW5lIHdoZXRo ZXIgRERMIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LWNsYXNzIGtpbmQgc2hvdWxkIGJlCisgKgkJZW1p dHRlZCB1bmRlciB0aGUgY3VycmVudCBvcHRpb25zLgorICovCitzdGF0aWMgYm9vbAoraXNfa2lu ZF9pbmNsdWRlZChjb25zdCBUYWJsZURkbENvbnRleHQgKmN0eCwgVGFibGVEZGxLaW5kIGtpbmQp Cit7CisJaWYgKGN0eC0+b25seV9raW5kcyAhPSBOVUxMKQorCQlyZXR1cm4gYm1zX2lzX21lbWJl cigoaW50KSBraW5kLCBjdHgtPm9ubHlfa2luZHMpOworCWlmIChjdHgtPmV4Y2VwdF9raW5kcyAh PSBOVUxMKQorCQlyZXR1cm4gIWJtc19pc19tZW1iZXIoKGludCkga2luZCwgY3R4LT5leGNlcHRf a2luZHMpOworCXJldHVybiB0cnVlOworfQogCiAvKgogICogSGVscGVyIHRvIGFwcGVuZCBhIGZv cm1hdHRlZCBzdHJpbmcgd2l0aCBvcHRpb25hbCBwcmV0dHktcHJpbnRpbmcuCkBAIC05NzUsMyAr MTIxMSwxNzYyIEBAIHBnX2dldF9kYXRhYmFzZV9kZGwoUEdfRlVOQ1RJT05fQVJHUykKIAkJU1JG X1JFVFVSTl9ET05FKGZ1bmNjdHgpOwogCX0KIH0KKworLyoKKyAqIGxvb2t1cF9yZWxuYW1lX2Zv cl9lbWl0CisgKgkJUmV0dXJuIGVpdGhlciB0aGUgc2NoZW1hLXF1YWxpZmllZCBvciB0aGUgYmFy ZSBxdW90ZWQgbmFtZSBvZiBhCisgKgkJcmVsYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgc2NoZW1h X3F1YWxpZmllZCBmbGFnLgorICoKKyAqIFRlbXBvcmFyeSByZWxhdGlvbnMgYXJlIG5ldmVyIHNj aGVtYS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgorICogc2NoZW1hX3F1YWxpZmllZDogdGhlIFRF TVBPUkFSWSBrZXl3b3JkIGluIENSRUFURSBURU1QT1JBUlkgVEFCTEUKKyAqIGFscmVhZHkgcGxh Y2VzIHRoZSB0YWJsZSBpbiB0aGUgc2Vzc2lvbidzIHRlbXAgc2NoZW1hLCBzbyBlbWl0dGluZwor ICogcGdfdGVtcF9OTi5yZWxuYW1lIHdvdWxkIHByb2R1Y2UgRERMIHRoYXQgY2Fubm90IGJlIHJl cGxheWVkLgorICoKKyAqIFdoZW4gc2NoZW1hX3F1YWxpZmllZCBpcyB0cnVlIHRoZSBzY2hlbWEt cXVhbGlmaWVkIG5hbWUgaXMgYWx3YXlzCisgKiByZXR1cm5lZCBmb3Igbm9uLXRlbXBvcmFyeSBy ZWxhdGlvbnMuICBXaGVuIGZhbHNlLCB0aGUgYmFyZSByZWxuYW1lCisgKiBpcyByZXR1cm5lZCBv bmx5IGlmIHRoZSB0YXJnZXQgcmVsYXRpb24gbGl2ZXMgaW4gYmFzZV9uYW1lc3BhY2UgKHRoZQor ICogbmFtZXNwYWNlIG9mIHRoZSB0YWJsZSB3aG9zZSBEREwgaXMgYmVpbmcgZ2VuZXJhdGVkKTsg b3RoZXJ3aXNlIHRoZQorICogc2NoZW1hLXF1YWxpZmllZCBmb3JtIGlzIHJldHVybmVkLCBiZWNh dXNlIGNyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisgKiAoZm9yIGV4YW1wbGUgYW4gaW5oZXJpdGFu Y2UgcGFyZW50IG9yIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhCisgKiBkaWZmZXJlbnQgc2NoZW1h KSBhcmUgbm90IHNhZmUgdG8gb21pdC4KKyAqCisgKiBUaGlzIHJlcGxhY2VzIHRoZSB1bnNhZmUg cGF0dGVybgorICoJICBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25h bWUoZ2V0X3JlbF9uYW1lc3BhY2Uob2lkKSksCisgKgkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdldF9yZWxfbmFtZShvaWQpKQorICogd2hpY2ggZGVyZWZlcmVuY2VzIE5VTEwgd2hlbiBh IGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzIGRyb3BwZWQgdGhlCisgKiByZWZlcmVuY2VkIHJl bGF0aW9uIChvciBpdHMgc2NoZW1hKSBiZXR3ZWVuIHdoZW4gd2UgY2FjaGVkIGl0cyBPSUQgYW5k CisgKiB3aGVuIHdlIGFzayB0aGUgc3lzY2FjaGUgZm9yIGl0cyBuYW1lLiAgSG9sZGluZyBBY2Nl c3NTaGFyZUxvY2sgb24gYQorICogZGVwZW5kZW50IHJlbGF0aW9uIG1ha2VzIHRoaXMgcmFjZSB2 YW5pc2hpbmdseSB1bmxpa2VseSBpbiBwcmFjdGljZSwgYnV0CisgKiB3ZSBzdGlsbCBkZWZlbmQg YWdhaW5zdCBpdCBiZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSBpcyBhIFNJR1NFR1YuCisgKgorICog Q2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwZnJlZSgpaW5nIHRoZSByZXN1bHQuCisgKi8KK3N0 YXRpYyBjaGFyICoKK2xvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KE9pZCByZWxpZCwgYm9vbCBzY2hl bWFfcXVhbGlmaWVkLCBPaWQgYmFzZV9uYW1lc3BhY2UpCit7CisJSGVhcFR1cGxlCXRwOworCUZv cm1fcGdfY2xhc3MgcmVsdHVwOworCWNoYXIJICAgKm5zcG5hbWU7CisJY2hhcgkgICAqcmVzdWx0 OworCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbGlk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInJlbGF0aW9u IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgcmVsaWQpLAorCQkJCSBlcnJkZXRhaWwoIkl0 IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsKKworCXJlbHR1cCA9IChG b3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QodHApOworCisJLyoKKwkgKiBUZW1wb3JhcnkgcmVsYXRp b25zIGFyZSBuZXZlciBzY2hlbWEtcXVhbGlmaWVkOiB0aGUgVEVNUE9SQVJZIGtleXdvcmQKKwkg KiBhbHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZCBwZ190ZW1wX05OLnJlbG5hbWUg Y2Fubm90IGJlCisJICogcmVwbGF5ZWQgaW4gYW55IG90aGVyIHNlc3Npb24uCisJICovCisJaWYg KGlzVGVtcE5hbWVzcGFjZShyZWx0dXAtPnJlbG5hbWVzcGFjZSkpCisJeworCQlyZXN1bHQgPSBw c3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihyZWx0dXAtPnJlbG5hbWUpKSk7CisJCVJl bGVhc2VTeXNDYWNoZSh0cCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogQmFyZSBuYW1l IG9ubHkgd2hlbiBjYWxsZXIgYXNrZWQgYW5kIHRhcmdldCBpcyBpbiB0aGUgYmFzZSBuYW1lc3Bh Y2UuICovCisJaWYgKCFzY2hlbWFfcXVhbGlmaWVkICYmIHJlbHR1cC0+cmVsbmFtZXNwYWNlID09 IGJhc2VfbmFtZXNwYWNlKQorCXsKKwkJcmVzdWx0ID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVy KE5hbWVTdHIocmVsdHVwLT5yZWxuYW1lKSkpOworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQly ZXR1cm4gcmVzdWx0OworCX0KKworCW5zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUocmVsdHVw LT5yZWxuYW1lc3BhY2UpOworCWlmIChuc3BuYW1lID09IE5VTEwpCisJeworCQlPaWQJCQluc3Bv aWQgPSByZWx0dXAtPnJlbG5hbWVzcGFjZTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJ CQkJIGVycm1zZygic2NoZW1hIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgbnNwb2lkKSwK KwkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIp KSk7CisJfQorCisJcmVzdWx0ID0gcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobnNwbmFtZSwg TmFtZVN0cihyZWx0dXAtPnJlbG5hbWUpKTsKKworCXBmcmVlKG5zcG5hbWUpOworCVJlbGVhc2VT eXNDYWNoZSh0cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogY29sbGVjdF9sb2Nh bF9ub3RfbnVsbAorICoJCVNjYW4gcGdfY29uc3RyYWludCBvbmNlIGZvciBsb2NhbGx5LWRlY2xh cmVkIE5PVCBOVUxMIGNvbnN0cmFpbnRzCisgKgkJb24gcmVsLCByZXR1cm5pbmcgYSBwYWxsb2Mn ZCBhcnJheSBpbmRleGVkIGJ5IGF0dG51bSAoMS4ubmF0dHMpLgorICoKKyAqIEVudHJpZXMgd2l0 aCBjb25vaWQ9PUludmFsaWRPaWQgbWVhbiAibm8gbG9jYWwgTk9UIE5VTEwgcm93IGZvciB0aGlz CisgKiBjb2x1bW4iLiAgV2hlbiB0aGUgY29uc3RyYWludCBuYW1lIGRvZXMgbm90IG1hdGNoIHRo ZSBhdXRvLWdlbmVyYXRlZAorICogcGF0dGVybiAiPHRhYmxlbmFtZT5fPGNvbHVtbm5hbWU+X25v dF9udWxsIiwgdGhlIGNvbnN0cmFpbnQgT0lEIGlzCisgKiBhcHBlbmRlZCB0byAqc2tpcF9vaWRz IHNvIHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AgY2FuIGF2b2lkCisgKiByZS1lbWl0 dGluZyBpdCBhcyBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLSB0aGUgY29sdW1uLWVt aXQKKyAqIHBhc3Mgd2lsbCBwcm9kdWNlIGl0IGlubGluZSBhcyAiQ09OU1RSQUlOVCBuYW1lIE5P VCBOVUxMIiBpbnN0ZWFkLgorICovCitzdGF0aWMgTG9jYWxOb3ROdWxsRW50cnkgKgorY29sbGVj dF9sb2NhbF9ub3RfbnVsbChSZWxhdGlvbiByZWwsIExpc3QgKipza2lwX29pZHMpCit7CisJVHVw bGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJaW50CQkJbmF0dHMgPSB0 dXBkZXNjLT5uYXR0czsKKwlMb2NhbE5vdE51bGxFbnRyeSAqZW50cmllczsKKwljb25zdCBjaGFy ICpyZWxuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKTsKKwlSZWxhdGlvbgljb25S ZWw7CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBjb25LZXk7CisJSGVhcFR1 cGxlCWNvblR1cDsKKworCWVudHJpZXMgPSAoTG9jYWxOb3ROdWxsRW50cnkgKikgcGFsbG9jMChz aXplb2YoTG9jYWxOb3ROdWxsRW50cnkpICoKKwkJCQkJCQkJCQkJKG5hdHRzICsgMSkpOworCisJ Y29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlTY2FuS2V5SW5pdCgmY29uS2V5LAorCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5z Y2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRy dWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVw ID0gc3lzdGFibGVfZ2V0bmV4dChjb25TY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQg Y29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisJCURhdHVtCQlj b25rZXlEYXQ7CisJCWJvb2wJCWNvbmtleU51bGw7CisJCUFycmF5VHlwZSAgKmNvbmtleUFycjsK KwkJaW50MTYJICAgKmNvbmtleVZhbHM7CisJCWludAkJCWF0dG51bTsKKwkJRm9ybV9wZ19hdHRy aWJ1dGUgYXR0OworCQljaGFyCQlhdXRvbmFtZVtOQU1FREFUQUxFTl07CisKKwkJaWYgKGNvbi0+ Y29udHlwZSAhPSBDT05TVFJBSU5UX05PVE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKCFjb24t PmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQljb25rZXlEYXQgPSBoZWFwX2dldGF0dHIo Y29uVHVwLCBBbnVtX3BnX2NvbnN0cmFpbnRfY29ua2V5LAorCQkJCQkJCQkgUmVsYXRpb25HZXRE ZXNjcihjb25SZWwpLCAmY29ua2V5TnVsbCk7CisJCWlmIChjb25rZXlOdWxsKQorCQkJY29udGlu dWU7CisJCWNvbmtleUFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChjb25rZXlEYXQpOworCisJCS8q CisJCSAqIERlZmVuZCBhZ2FpbnN0IGEgbWFsZm9ybWVkIGNvbmtleTogYSBOT1QgTlVMTCBjb25z dHJhaW50IGlzIGFsd2F5cworCQkgKiBhIHNpbmdsZS1jb2x1bW4gMS1EIGludDIgYXJyYXksIGJ1 dCBhIGNvcnJ1cHRlZCBjYXRhbG9nIG9yIGEgZnV0dXJlCisJCSAqIHBhdGNoIHRoYXQgc3RvcmVz IHdpZGVyIGNvbmtleXMgbXVzdG4ndCB0cmlwIHVzIGludG8gcmVhZGluZyBwYXN0CisJCSAqIHRo ZSBhcnJheSBoZWFkZXIuCisJCSAqLworCQlpZiAoQVJSX05ESU0oY29ua2V5QXJyKSAhPSAxIHx8 CisJCQlBUlJfRElNUyhjb25rZXlBcnIpWzBdIDwgMSB8fAorCQkJQVJSX0hBU05VTEwoY29ua2V5 QXJyKSB8fAorCQkJQVJSX0VMRU1UWVBFKGNvbmtleUFycikgIT0gSU5UMk9JRCkKKwkJCWNvbnRp bnVlOworCisJCWNvbmtleVZhbHMgPSAoaW50MTYgKikgQVJSX0RBVEFfUFRSKGNvbmtleUFycik7 CisJCWF0dG51bSA9IGNvbmtleVZhbHNbMF07CisJCWlmIChhdHRudW0gPCAxIHx8IGF0dG51bSA+ IG5hdHRzKQorCQkJY29udGludWU7CisKKwkJYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBh dHRudW0gLSAxKTsKKwkJc25wcmludGYoYXV0b25hbWUsIHNpemVvZihhdXRvbmFtZSksICIlc18l c19ub3RfbnVsbCIsCisJCQkJIHJlbG5hbWUsIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7CisKKwkJ ZW50cmllc1thdHRudW1dLmNvbm9pZCA9IGNvbi0+b2lkOworCQllbnRyaWVzW2F0dG51bV0ubmFt ZSA9IHBzdHJkdXAoTmFtZVN0cihjb24tPmNvbm5hbWUpKTsKKwkJZW50cmllc1thdHRudW1dLmlz X2F1dG8gPSAoc3RyY21wKE5hbWVTdHIoY29uLT5jb25uYW1lKSwgYXV0b25hbWUpID09IDApOwor CQllbnRyaWVzW2F0dG51bV0ubm9faW5oZXJpdCA9IGNvbi0+Y29ubm9pbmhlcml0OworCisJCS8q CisJCSAqIElubGluZSBlbWlzc2lvbiBvZiBOT1QgTlVMTCBvbmx5IGhhcHBlbnMgZm9yIGNvbHVt bnMgdGhhdCB0aGUKKwkJICogY29sdW1uIGxpc3QgYWN0dWFsbHkgZW1pdHMsIGkuZS4gYXR0aXNs b2NhbCBjb2x1bW5zLiAgRm9yIHRob3NlCisJCSAqIHRoZSBpbmxpbmUgcGFzcyBhbHJlYWR5IG1h dGVyaWFsaXplcyB0aGUgY29uc3RyYWludCAoZWl0aGVyIGFzCisJCSAqICJDT05TVFJBSU5UIG5h bWUgTk9UIE5VTEwiIGZvciB1c2VyLW5hbWVkLCBvciBhcyBhIGJhcmUKKwkJICogIk5PVCBOVUxM IiB0aGF0IFBHIHJlLWNyZWF0ZXMgdW5kZXIgdGhlIGF1dG8tbmFtZSBwYXR0ZXJuKSwgc28KKwkJ ICogdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQgbG9vcCBtdXN0IG5vdCBlbWl0IGEgc2Vjb25k CisJCSAqIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBmb3IgdGhlIHNhbWUgY29sdW1u IC0gUEcgb25seQorCQkgKiBhbGxvd3Mgb25lIE5PVCBOVUxMIGNvbnN0cmFpbnQgcGVyIGNvbHVt biBhbmQgcmVqZWN0cyB0aGUKKwkJICogc2Vjb25kIHdpdGggYSBuYW1lIG1pc21hdGNoIHdoZW5l dmVyIHRoZSBzYXZlZCBhdXRvLW5hbWUgbm8KKwkJICogbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJl bnQgdGFibGUgbmFtZSAoZS5nLiBhZnRlciBhIHJlbmFtZSwgb3IKKwkJICogd2hlbiBDUkVBVEUg VEFCTEUgdW5pcXVpZmllcyB0aGUgYXV0by1uYW1lIHRvIGRvZGdlIGEgc2VxdWVuY2UKKwkJICog Y29sbGlzaW9uKS4gIEZvciBhIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgc2l0dGluZyBvbiBh bgorCQkgKiBpbmhlcml0ZWQgKG5vbi1sb2NhbCkgY29sdW1uIHRoZSBpbmxpbmUgcGF0aCBuZXZl ciBmaXJlcywgc28KKwkJICogbGVhdmUgdGhlIE9JRCBvdXQgb2Ygc2tpcF9vaWRzIGFuZCBsZXQg dGhlIHBvc3QtQ1JFQVRFIGxvb3AKKwkJICogZW1pdCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNU UkFJTlQuCisJCSAqLworCQlpZiAoYXR0LT5hdHRpc2xvY2FsICYmIHNraXBfb2lkcyAhPSBOVUxM KQorCQkJKnNraXBfb2lkcyA9IGxhcHBlbmRfb2lkKCpza2lwX29pZHMsIGNvbi0+b2lkKTsKKwl9 CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZW50cmllczsKK30KKworLyoKKyAqIGZpbmRfYXR0cmRl Zl90ZXh0CisgKgkJUmV0dXJuIHRoZSBkZXBhcnNlZCBERUZBVUxUL0dFTkVSQVRFRCBleHByZXNz aW9uIGZvciBhdHRudW0gb24gcmVsLAorICoJCW9yIE5VTEwgaWYgbm8gZW50cnkgZXhpc3RzIGlu IFR1cGxlQ29uc3RyLT5kZWZ2YWwuCisgKgorICogVGhlIGNhbGxlciBwYXNzZXMgYSBMaXN0ICoq IHNvIHRoYXQgdGhlIGRlcGFyc2UgY29udGV4dCBpcyBidWlsdCBsYXppbHkKKyAqIGFuZCByZXVz ZWQgYWNyb3NzIGNhbGxzIChkZXBhcnNlX2NvbnRleHRfZm9yIGlzIG5vdCBjaGVhcCkuICBSZXR1 cm5lZAorICogc3RyaW5nIGlzIHBhbGxvYydkIGluIHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0 OyBjYWxsZXIgcGZyZWUncyBpdC4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9hdHRyZGVmX3Rl eHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwgTGlzdCAqKmRwY29udGV4dCkKK3sK KwlUdXBsZUNvbnN0ciAqY29uc3RyID0gUmVsYXRpb25HZXREZXNjcihyZWwpLT5jb25zdHI7CisK KwlpZiAoY29uc3RyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpbnQgaiA9IDA7 IGogPCBjb25zdHItPm51bV9kZWZ2YWw7IGorKykKKwl7CisJCWlmIChjb25zdHItPmRlZnZhbFtq XS5hZG51bSAhPSBhdHRudW0pCisJCQljb250aW51ZTsKKworCQlpZiAoKmRwY29udGV4dCA9PSBO SUwpCisJCQkqZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKworCQly ZXR1cm4gZGVwYXJzZV9leHByZXNzaW9uKHN0cmluZ1RvTm9kZShjb25zdHItPmRlZnZhbFtqXS5h ZGJpbiksCisJCQkJCQkJCSAgKmRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwl9CisJcmV0dXJu IE5VTEw7Cit9CisKKy8qCisgKiBhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzCisgKgkJ RW1pdCBlYWNoIGxvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludCBvbiByZWwgYXMKKyAq CQkiQ09OU1RSQUlOVCBuYW1lIDxwZ19nZXRfY29uc3RyYWludGRlZj4iLCBzZXBhcmF0ZWQgYnkg JywnIGZyb20gYW55CisgKgkJcHJldmlvdXNseS1lbWl0dGVkIGNvbHVtbiBvciBjb25zdHJhaW50 LgorICoKKyAqICpmaXJzdCB0cmFja3Mgd2hldGhlciBhbnl0aGluZyBoYXMgYmVlbiBlbWl0dGVk IG9uIHRoaXMgbGlzdCB5ZXQsIHNvIHRoZQorICogY2FsbGVyIGNhbiBjaGFpbiBjb2x1bW4gZW1p c3Npb24gYW5kIGNvbnN0cmFpbnQgZW1pc3Npb24gdGhyb3VnaCB0aGUgc2FtZQorICogYnVmZmVy LiAgSW5oZXJpdGVkIENIRUNLIGNvbnN0cmFpbnRzICghY29uaXNsb2NhbCkgY29tZSBmcm9tIHRo ZSBwYXJlbnQncworICogRERMIGFuZCBhcmVuJ3QgcmVwZWF0ZWQgaGVyZS4KKyAqLworc3RhdGlj IHZvaWQKK2FwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMoU3RyaW5nSW5mbyBidWYsIFJl bGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJCWJvb2wgKmZpcnN0KQoreworCVJlbGF0 aW9uCWNvblJlbDsKKwlTeXNTY2FuRGVzYyBjb25TY2FuOworCVNjYW5LZXlEYXRhIGNvbktleTsK KwlIZWFwVHVwbGUJY29uVHVwOworCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgmY29uS2V5LAorCQkJCUFu dW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwlj b25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWRO YW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJd2hpbGUg KEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4dChjb25TY2FuKSkpCisJ eworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RS VUNUKGNvblR1cCk7CisJCURhdHVtCQlkZWZEYXR1bTsKKwkJY2hhcgkgICAqZGVmYm9keTsKKwor CQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJTlRfQ0hFQ0spCisJCQljb250aW51ZTsKKwkJ aWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQlpZiAoISpmaXJzdCkKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICAgIik7CisJCWVsc2UgaWYgKCEqZmlyc3QpCisJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCSpmaXJzdCA9IGZhbHNlOworCisJ CWRlZkRhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShGX1BHX0dFVF9DT05TVFJBSU5UREVGX09JRCwK KwkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY29uLT5vaWQpKTsKKwkJZGVmYm9keSA9IFRleHRE YXR1bUdldENTdHJpbmcoZGVmRGF0dW0pOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIkNPTlNU UkFJTlQgJXMgJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5h bWUpKSwKKwkJCQkJCSBkZWZib2R5KTsKKwkJcGZyZWUoZGVmYm9keSk7CisJfQorCXN5c3RhYmxl X2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2sp OworfQorCisvKgorICogYXBwZW5kX2NvbHVtbl9kZWZzCisgKgkJQXBwZW5kIHRoZSBjb21tYS1z ZXBhcmF0ZWQgY29sdW1uIGRlZmluaXRpb24gbGlzdCBmb3IgYSB0YWJsZS4KKyAqCisgKiBFbWl0 cyBlYWNoIG5vbi1kcm9wcGVkLCBsb2NhbGx5LWRlY2xhcmVkIGNvbHVtbiBhcworICoJCW5hbWUg dHlwZSBbQ09MTEFURSB4XSBbU1RPUkFHRSBzXSBbQ09NUFJFU1NJT04gY10KKyAqCQlbR0VORVJB VEVEIC4uLiB8IERFRkFVTFQgZV0gW05PVCBOVUxMXQorICogZm9sbG93ZWQgYnkgYW55IGxvY2Fs bHktZGVjbGFyZWQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzLiAgT3B0aW9uYWwKKyAqIGNsYXVz ZXMgYXJlIG9taXR0ZWQgd2hlbiB0aGVpciB2YWx1ZSBtYXRjaGVzIHdoYXQgdGhlIHN5c3RlbSB3 b3VsZAorICogcmVhcHBseSBvbiByb3VuZC10cmlwIChlLmcuIHR5cGUtZGVmYXVsdCBDT0xMQVRF LCB0eXBlLWRlZmF1bHQgU1RPUkFHRSkuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfY29sdW1u X2RlZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJICAg Ym9vbCBpbmNsdWRlX2NoZWNrLAorCQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkg ICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9 IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlPaWQJCQliYXNlX25hbWVzcGFjZSA9IFJlbGF0aW9u R2V0TmFtZXNwYWNlKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0gTklMOworCWJvb2wJCWZp cnN0ID0gdHJ1ZTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykK Kwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7 CisJCWNoYXIJICAgKnR5cHN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250 aW51ZTsKKworCQkvKgorCQkgKiBDb2x1bW5zIGluaGVyaXRlZCBmcm9tIGEgcGFyZW50IGFyZSBj b3ZlcmVkIGJ5IHRoZSBJTkhFUklUUyBjbGF1c2UsCisJCSAqIG5vdCB0aGUgY29sdW1uIGxpc3Qs IHVubGVzcyB0aGUgY2hpbGQgcmVkZWNsYXJlZCB0aGVtIGxvY2FsbHkKKwkJICogKGF0dGlzbG9j YWw9dHJ1ZSkuCisJCSAqLworCQlpZiAoIWF0dC0+YXR0aXNsb2NhbCkKKwkJCWNvbnRpbnVlOwor CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcsJyk7CisJCWlm IChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxuICAgICIpOworCQll bHNlIGlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWZp cnN0ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50 aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1 ZiwgJyAnKTsKKworCQl0eXBzdHIgPSBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoYXR0LT5hdHR0 eXBpZCwgYXR0LT5hdHR0eXBtb2QpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgdHlw c3RyKTsKKwkJcGZyZWUodHlwc3RyKTsKKworCQkvKiBDT0xMQVRFIGNsYXVzZSwgb25seSBpZiBp dCBkaWZmZXJzIGZyb20gdGhlIHR5cGUncyBkZWZhdWx0LiAqLworCQlpZiAoT2lkSXNWYWxpZChh dHQtPmF0dGNvbGxhdGlvbikgJiYKKwkJCWF0dC0+YXR0Y29sbGF0aW9uICE9IGdldF90eXBjb2xs YXRpb24oYXR0LT5hdHR0eXBpZCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT0xMQVRF ICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoYXR0LT5hdHRjb2xsYXRpb24p KTsKKworCQkvKiBTVE9SQUdFIGNsYXVzZSwgb25seSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHR5 cGUncyBkZWZhdWx0LiAqLworCQlpZiAoYXR0LT5hdHRzdG9yYWdlICE9IGdldF90eXBzdG9yYWdl KGF0dC0+YXR0dHlwaWQpKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgU1RPUkFHRSAlcyIs IHN0b3JhZ2VfbmFtZShhdHQtPmF0dHN0b3JhZ2UpKTsKKworCQkvKiBDT01QUkVTU0lPTiBjbGF1 c2UsIG9ubHkgaWYgZXhwbGljaXRseSBzZXQgb24gdGhlIGNvbHVtbi4gKi8KKwkJaWYgKENvbXBy ZXNzaW9uTWV0aG9kSXNWYWxpZChhdHQtPmF0dGNvbXByZXNzaW9uKSkKKwkJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiIENPTVBSRVNTSU9OICVzIiwKKwkJCQkJCQkgR2V0Q29tcHJlc3Npb25NZXRo b2ROYW1lKGF0dC0+YXR0Y29tcHJlc3Npb24pKTsKKworCQkvKgorCQkgKiBMb29rIHVwIHRoZSBk ZWZhdWx0L2dlbmVyYXRlZCBleHByZXNzaW9uIHRleHQgdXAgZnJvbnQ7IGdlbmVyYXRlZAorCQkg KiBjb2x1bW5zIGhhdmUgYXR0aGFzZGVmPXRydWUgd2l0aCBhbiBlbnRyeSBpbiBwZ19hdHRyZGVm IGp1c3QgbGlrZQorCQkgKiByZWd1bGFyIGRlZmF1bHRzLgorCQkgKi8KKwkJeworCQkJY2hhcgkg ICAqZGVmZXhwciA9IE5VTEw7CisKKwkJCWlmIChhdHQtPmF0dGhhc2RlZikKKwkJCQlkZWZleHBy ID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQtPmF0dG51bSwgJmRwY29udGV4dCk7CisKKwkJ CS8qIEdFTkVSQVRFRCAvIElERU5USVRZIC8gREVGQVVMVCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZl LiAqLworCQkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RP UkVEICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFM V0FZUyBBUyAoJXMpIFNUT1JFRCIsIGRlZmV4cHIpOworCQkJZWxzZSBpZiAoYXR0LT5hdHRnZW5l cmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMICYmIGRlZmV4cHIpCisJCQkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFMV0FZUyBBUyAoJXMpIFZJUlRVQUwiLCBk ZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5U SVRZX0FMV0FZUyB8fAorCQkJCQkgYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJ VFlfQllfREVGQVVMVCkKKwkJCXsKKwkJCQljb25zdCBjaGFyICppZGtpbmQgPQorCQkJCQkoYXR0 LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQorCQkJCQk/ICJBTFdB WVMiIDogIkJZIERFRkFVTFQiOworCQkJCU9pZAkJCXNlcWlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5j ZShyZWwsIGF0dC0+YXR0bnVtLCB0cnVlKTsKKworCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi IEdFTkVSQVRFRCAlcyBBUyBJREVOVElUWSIsIGlka2luZCk7CisKKwkJCQkvKgorCQkJCSAqIEVt aXQgb25seSB0aGUgc2VxdWVuY2Ugb3B0aW9ucyB0aGF0IGRpZmZlciBmcm9tIHRoZWlyCisJCQkJ ICogZGVmYXVsdHMgLSBtaXJyb3JpbmcgcGdfZ2V0X2RhdGFiYXNlX2RkbCdzIHBhdHRlcm4gb2YK KwkJCQkgKiBvbWl0dGluZyB2YWx1ZXMgdGhhdCB0aGUgc3lzdGVtIHdvdWxkIHJlYXBwbHkgb24g aXRzIG93bi4KKwkJCQkgKi8KKwkJCQlpZiAoT2lkSXNWYWxpZChzZXFpZCkpCisJCQkJeworCQkJ CQlIZWFwVHVwbGUJc2VxVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFNFUVJFTElELAorCQkJCQkJCQkJ CQkJCQkgT2JqZWN0SWRHZXREYXR1bShzZXFpZCkpOworCisJCQkJCWlmIChIZWFwVHVwbGVJc1Zh bGlkKHNlcVR1cCkpCisJCQkJCXsKKwkJCQkJCUZvcm1fcGdfc2VxdWVuY2Ugc2VxID0gKEZvcm1f cGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXFUdXApOworCQkJCQkJU3RyaW5nSW5mb0RhdGEgb3B0 czsKKwkJCQkJCWJvb2wJCWZpcnN0X29wdCA9IHRydWU7CisJCQkJCQlpbnQ2NAkJZGVmX21pbiwK KwkJCQkJCQkJCWRlZl9tYXgsCisJCQkJCQkJCQlkZWZfc3RhcnQ7CisJCQkJCQlpbnQ2NAkJdHlw X21pbiwKKwkJCQkJCQkJCXR5cF9tYXg7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBQZXItdHlwZSBi b3VuZHMgZm9yIHRoZSBzZXF1ZW5jZSdzIHVuZGVybHlpbmcKKwkJCQkJCSAqIGludGVnZXIgdHlw ZS4gIERlZmF1bHRzIHRvIGludDggaWYgdGhlIGNvbHVtbiB0eXBlCisJCQkJCQkgKiBpcyBzb21l dGhpbmcgZWxzZSAoc2hvdWxkbid0IGhhcHBlbiBmb3IgSURFTlRJVFksCisJCQkJCQkgKiBidXQg YmUgZGVmZW5zaXZlKS4KKwkJCQkJCSAqLworCQkJCQkJc3dpdGNoIChhdHQtPmF0dHR5cGlkKQor CQkJCQkJeworCQkJCQkJCWNhc2UgSU5UMk9JRDoKKwkJCQkJCQkJdHlwX21pbiA9IFBHX0lOVDE2 X01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lOVDE2X01BWDsKKwkJCQkJCQkJYnJlYWs7CisJ CQkJCQkJY2FzZSBJTlQ0T0lEOgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5UMzJfTUlOOworCQkJ CQkJCQl0eXBfbWF4ID0gUEdfSU5UMzJfTUFYOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZh dWx0OgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5UNjRfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0g UEdfSU5UNjRfTUFYOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKworCQkJCQkJaWYgKHNlcS0+ c2VxaW5jcmVtZW50ID4gMCkKKwkJCQkJCXsKKwkJCQkJCQlkZWZfbWluID0gMTsKKwkJCQkJCQlk ZWZfbWF4ID0gdHlwX21heDsKKwkJCQkJCQlkZWZfc3RhcnQgPSBkZWZfbWluOworCQkJCQkJfQor CQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWRlZl9taW4gPSB0eXBfbWluOworCQkJCQkJCWRl Zl9tYXggPSAtMTsKKwkJCQkJCQlkZWZfc3RhcnQgPSBkZWZfbWF4OworCQkJCQkJfQorCisJCQkJ CQlpbml0U3RyaW5nSW5mbygmb3B0cyk7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBTRVFVRU5DRSBO QU1FIC0gb21pdCB3aGVuIGl0IG1hdGNoZXMgdGhlIGltcGxpY2l0CisJCQkJCQkgKiAiPHRhYmxl bmFtZT5fPGNvbHVtbm5hbWU+X3NlcSIgcGF0dGVybiBpbiB0aGUgc2FtZQorCQkJCQkJICogc2No ZW1hLCBzaW5jZSBDUkVBVEUgVEFCTEUgd2lsbCByZWdlbmVyYXRlIHRoYXQKKwkJCQkJCSAqIGV4 YWN0IG5hbWUuICBUaGUgc2VxdWVuY2UgaXMgYW4gSU5URVJOQUwgZGVwZW5kZW5jeQorCQkJCQkJ ICogb2YgdGhlIGNvbHVtbiwgc28gdGhlIGxvY2sgd2UgaG9sZCBvbiB0aGUgdGFibGUKKwkJCQkJ CSAqIGFsc28gcGlucyBpdCwgYnV0IHRoZSBsb29rdXAgaGVscGVyIHN0aWxsIGRlZmVuZHMKKwkJ CQkJCSAqIGFnYWluc3QgYSBtaXNzaW5nIHBnX2NsYXNzIHJvdy4KKwkJCQkJCSAqLworCQkJCQkJ eworCQkJCQkJCUhlYXBUdXBsZQlzZXFDbGFzc1R1cDsKKwkJCQkJCQlGb3JtX3BnX2NsYXNzIHNl cUNsYXNzOworCQkJCQkJCWNoYXIJCWF1dG9uYW1lW05BTUVEQVRBTEVOXTsKKworCQkJCQkJCXNl cUNsYXNzVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwKKwkJCQkJCQkJCQkJCQkJICBPYmpl Y3RJZEdldERhdHVtKHNlcWlkKSk7CisJCQkJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcUNs YXNzVHVwKSkKKwkJCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkJCQkJCSBlcnJtc2coImlkZW50aXR5IHNlcXVl bmNlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQkJCQkJCXNlcWlkKSwKKwkJ CQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVk LiIpKSk7CisJCQkJCQkJc2VxQ2xhc3MgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHNlcUNs YXNzVHVwKTsKKworCQkJCQkJCXNucHJpbnRmKGF1dG9uYW1lLCBzaXplb2YoYXV0b25hbWUpLCAi JXNfJXNfc2VxIiwKKwkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJ CQkJCQkJIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7CisJCQkJCQkJaWYgKHNlcUNsYXNzLT5yZWxu YW1lc3BhY2UgIT0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSB8fAorCQkJCQkJCQlzdHJjbXAo TmFtZVN0cihzZXFDbGFzcy0+cmVsbmFtZSksIGF1dG9uYW1lKSAhPSAwKQorCQkJCQkJCXsKKwkJ CQkJCQkJY2hhcgkgICAqc2VxUXVhbCA9CisJCQkJCQkJCQlsb29rdXBfcmVsbmFtZV9mb3JfZW1p dChzZXFpZCwKKwkJCQkJCQkJCQkJCQkJCXNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJCQkJ CQliYXNlX25hbWVzcGFjZSk7CisKKwkJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVz U0VRVUVOQ0UgTkFNRSAlcyIsCisJCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNl cVF1YWwpOworCQkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCQkJcGZyZWUoc2VxUXVh bCk7CisJCQkJCQkJfQorCQkJCQkJCVJlbGVhc2VTeXNDYWNoZShzZXFDbGFzc1R1cCk7CisJCQkJ CQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcXN0YXJ0ICE9IGRlZl9zdGFydCkKKwkJCQkJCXsKKwkJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTVEFSVCBXSVRIICIgSU5UNjRfRk9STUFU LAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2Vxc3RhcnQpOworCQkJ CQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVt ZW50ICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzSU5D UkVNRU5UIEJZICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAi ICIsIHNlcS0+c2VxaW5jcmVtZW50KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJ CX0KKwkJCQkJCWlmIChzZXEtPnNlcW1pbiAhPSBkZWZfbWluKQorCQkJCQkJeworCQkJCQkJCWFw cGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01JTlZBTFVFICIgSU5UNjRfRk9STUFULAorCQkJCQkJ CQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWluKTsKKwkJCQkJCQlmaXJzdF9v cHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1heCAhPSBkZWZfbWF4KQor CQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01BWFZBTFVFICIgSU5U NjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWF4 KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNl cWNhY2hlICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVz Q0FDSEUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwg c2VxLT5zZXFjYWNoZSk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJ CQlpZiAoc2VxLT5zZXFjeWNsZSkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZv cHRzLCAiJXNDWUNMRSIsIGZpcnN0X29wdCA/ICIiIDogIiAiKTsKKwkJCQkJCQlmaXJzdF9vcHQg PSBmYWxzZTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKCFmaXJzdF9vcHQpCisJCQkJCQkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIgKCVzKSIsIG9wdHMuZGF0YSk7CisKKwkJCQkJCXBmcmVlKG9wdHMu ZGF0YSk7CisJCQkJCQlSZWxlYXNlU3lzQ2FjaGUoc2VxVHVwKTsKKwkJCQkJfQorCQkJCX0KKwkJ CX0KKwkJCWVsc2UgaWYgKGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgREVG QVVMVCAlcyIsIGRlZmV4cHIpOworCisJCQlpZiAoZGVmZXhwcikKKwkJCQlwZnJlZShkZWZleHBy KTsKKwkJfQorCisJCWlmIChhdHQtPmF0dG5vdG51bGwpCisJCXsKKwkJCUxvY2FsTm90TnVsbEVu dHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0bnVtXTsKKworCQkJaWYgKG5uLT5uYW1lICE9 IE5VTEwgJiYgIW5uLT5pc19hdXRvKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTlNU UkFJTlQgJXMgTk9UIE5VTEwiLAorCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihubi0+bmFtZSkp OworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIE5PVCBOVUxMIik7 CisJCQlpZiAobm4tPm5hbWUgIT0gTlVMTCAmJiBubi0+bm9faW5oZXJpdCkKKwkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBOTyBJTkhFUklUIik7CisJCX0KKwl9CisKKwkvKgorCSAq IFRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIC0gZW1pdHRlZCBpbmxpbmUgaW4gdGhlIENS RUFURSBUQUJMRSBib2R5CisJICogc28gdGhleSBhcHBlYXIgYWxvbmdzaWRlIHRoZSBjb2x1bW5z ICh0aGUgcGdfZHVtcCBzaGFwZSkuICBUaGUKKwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgaW4g cGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCBza2lwcyBDSEVDSworCSAqIGNvbnN0cmFpbnRzIHRv IGF2b2lkIGRvdWJsZS1lbWlzc2lvbi4KKwkgKi8KKwlpZiAoaW5jbHVkZV9jaGVjaykKKwkJYXBw ZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhidWYsIHJlbCwgcHJldHR5LCAmZmlyc3QpOwor fQorCisvKgorICogYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMKKyAqCQlGb3IgYSB0eXBl ZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIC4uLiBPRiB0eXBlX25hbWUpLCBhcHBlbmQgdGhlCisgKgkJ b3B0aW9uYWwgIihjb2wgV0lUSCBPUFRJT05TIC4uLiwgLi4uKSIgbGlzdCBjYXJyeWluZyBsb2Nh bGx5CisgKgkJYXBwbGllZCBwZXItY29sdW1uIG92ZXJyaWRlcyAtIERFRkFVTFQsIE5PVCBOVUxM LCBhbmQgYW55IGxvY2FsbHkKKyAqCQlkZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cy4KKyAqCisg KiBDb2x1bW5zIHdob3NlIHR5cGUgaXMgZnVsbHkgZGljdGF0ZWQgYnkgcmVsb2Z0eXBlIGVtaXQg bm90aGluZy4gIFRoZQorICogcGFyZW50aGVzaXNlZCBsaXN0IGlzIHN1cHByZXNzZWQgZW50aXJl bHkgd2hlbiBubyBjb2x1bW4gbmVlZHMgYW4KKyAqIG92ZXJyaWRlIGFuZCB0aGVyZSBhcmUgbm8g bG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cywgbWF0Y2hpbmcKKyAqIHRoZSBjYW5v bmljYWwgIkNSRUFURSBUQUJMRSB4IE9GIHQ7IiBzaGFwZS4KKyAqLworc3RhdGljIHZvaWQKK2Fw cGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWws IGJvb2wgcHJldHR5LAorCQkJCQkJCSAgYm9vbCBpbmNsdWRlX2NoZWNrLAorCQkJCQkJCSAgTG9j YWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXMpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxh dGlvbkdldERlc2NyKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0gTklMOworCVN0cmluZ0lu Zm9EYXRhIGlubmVyOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWluaXRTdHJpbmdJbmZvKCZp bm5lcik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJewor CQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQlj aGFyCSAgICpkZWZleHByID0gTlVMTDsKKwkJYm9vbAkJaGFzX2RlZmF1bHQ7CisJCWJvb2wJCWhh c19ub3RudWxsOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJ CWlmIChhdHQtPmF0dGhhc2RlZikKKwkJCWRlZmV4cHIgPSBmaW5kX2F0dHJkZWZfdGV4dChyZWws IGF0dC0+YXR0bnVtLCAmZHBjb250ZXh0KTsKKworCQloYXNfZGVmYXVsdCA9IChkZWZleHByICE9 IE5VTEwpOworCQloYXNfbm90bnVsbCA9IGF0dC0+YXR0bm90bnVsbDsKKworCQlpZiAoIWhhc19k ZWZhdWx0ICYmICFoYXNfbm90bnVsbCkKKwkJeworCQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUo ZGVmZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmaW5uZXIsICcsJyk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZpbm5lciwgIlxuICAgICIpOworCQllbHNlIGlmICghZmlyc3QpCisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcgJyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJ YXBwZW5kU3RyaW5nSW5mbygmaW5uZXIsICIlcyBXSVRIIE9QVElPTlMiLAorCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWlmIChoYXNfZGVmYXVsdCkK KwkJCWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiIERFRkFVTFQgJXMiLCBkZWZleHByKTsKKwkJ aWYgKGhhc19ub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAmbm5fZW50 cmllc1thdHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNf YXV0bykKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5lciwgIiBDT05TVFJBSU5UICVzIE5PVCBO VUxMIiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJCWVsc2UKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIiBOT1QgTlVMTCIpOworCQkJaWYgKG5u LT5uYW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmaW5uZXIsICIgTk8gSU5IRVJJVCIpOworCQl9CisKKwkJaWYgKGRlZmV4cHIpCisJCQlw ZnJlZShkZWZleHByKTsKKwl9CisKKwkvKgorCSAqIExvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29u c3RyYWludHMgb24gYSB0eXBlZCB0YWJsZSBiZWxvbmcgaW4gdGhlCisJICogY29sdW1uLWxpc3Qg cGFyZW50aGVzZXMsIHNhbWUgYXMgZm9yIGFuIHVudHlwZWQgdGFibGUuICBUaGUgb3V0LW9mLWxp bmUKKwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgc3RpbGwgc2tpcHMgQ0hFQ0tzLgorCSAqLwor CWlmIChpbmNsdWRlX2NoZWNrKQorCQlhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKCZp bm5lciwgcmVsLCBwcmV0dHksICZmaXJzdCk7CisKKwlpZiAoIWZpcnN0KQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsICIgKCIpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgaW5uZXIuZGF0YSk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7 CisJfQorCXBmcmVlKGlubmVyLmRhdGEpOworfQorCisvKgorICogYXBwZW5kX3N0bXQKKyAqCQlQ dXNoIGN0eC0+YnVmIG9udG8gY3R4LT5zdGF0ZW1lbnRzLgorICoKKyAqIFVzZWQgZm9yIGFsbCBE REwgZW1pc3Npb25zLiAgV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCB0aGUKKyAqIGFj dGl2ZSBzZWFyY2hfcGF0aCBoYXMgYWxyZWFkeSBiZWVuIG5hcnJvd2VkIHRvIHRoZSBiYXNlIHNj aGVtYSwgc28KKyAqIHJ1bGV1dGlscyBoZWxwZXJzIChwZ19nZXRfaW5kZXhkZWZfZGRsLCBwZ19n ZXRfcnVsZWRlZl9kZGwsCisgKiBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5LCBwZ19nZXRfc3Rh dGlzdGljc29iamRlZl9kZGwpIHByb2R1Y2UKKyAqIHVucXVhbGlmaWVkIG5hbWVzIGZvciBzYW1l LXNjaGVtYSBvYmplY3RzIGF1dG9tYXRpY2FsbHkuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRf c3RtdChUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwljdHgtPnN0YXRlbWVudHMgPSBsYXBwZW5k KGN0eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7Cit9CisKKy8qCisgKiBl bWl0X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRpbmcgQ1JFQVRFIFRBQkxF IHN0YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRFTVBPUkFSWSAvIFVOTE9H R0VEKSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLworICoJCVBBUlRJVElPTiBP RiBwYXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBtZXRob2QsCisgKgkJV0lU SCAocmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQuCisgKi8KK3N0YXRpYyB2 b2lkCitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCVJl bGF0aW9uCXJlbCA9IGN0eC0+cmVsOworCWNoYXIJCXJlbHBlcnNpc3RlbmNlID0gcmVsLT5yZF9y ZWwtPnJlbHBlcnNpc3RlbmNlOworCWNoYXIJCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2lu ZDsKKwlib29sCQlpc190eXBlZCA9IE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbG9mdHlwZSk7 CisJSGVhcFR1cGxlCWNsYXNzdHVwOworCURhdHVtCQlyZWxvcHREYXR1bTsKKwlib29sCQlyZWxv cHRJc251bGw7CisKKwljbGFzc3R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElk R2V0RGF0dW0oY3R4LT5yZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGN0 eC0+cmVsaWQpOworCisJcmVsb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCBjbGFz c3R1cCwKKwkJCQkJCQkJICBBbnVtX3BnX2NsYXNzX3JlbG9wdGlvbnMsICZyZWxvcHRJc251bGwp OworCisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmY3R4LT5idWYsICJDUkVBVEUgIik7CisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJ U1RFTkNFX1RFTVApCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiVEVNUE9S QVJZICIpOworCWVsc2UgaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlVOTE9HR0VEICIpOwor CWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiVEFCTEUgJXMiLCBjdHgtPnF1YWxuYW1lKTsK KworCWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJeworCQlPaWQJCQlwYXJlbnRP aWQgPSBnZXRfcGFydGl0aW9uX3BhcmVudChjdHgtPnJlbGlkLCB0cnVlKTsKKwkJY2hhcgkgICAq cGFyZW50UXVhbCA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHBhcmVudE9pZCwKKwkJCQkJCQkJ CQkJCQkJIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJIGN0eC0+YmFzZV9u YW1lc3BhY2UpOworCQljaGFyCSAgICpwYXJlbnRSZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHBhcmVu dE9pZCk7CisJCURhdHVtCQlib3VuZERhdHVtOworCQlib29sCQlib3VuZElzbnVsbDsKKwkJY2hh cgkgICAqZm9yVmFsdWVzID0gTlVMTDsKKwkJY2hhcgkgICAqYm91bmRTdHIgPSBOVUxMOworCisJ CWlmIChwYXJlbnRSZWxuYW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkgZXJybXNnKCJwYXJ0aXRpb24g cGFyZW50IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQlwYXJlbnRPaWQpLAor CQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIp KSk7CisKKwkJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIGNsYXNzdHVwLAor CQkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLCAmYm91bmRJc251bGwpOworCQlp ZiAoIWJvdW5kSXNudWxsKQorCQl7CisJCQlOb2RlCSAgICpib3VuZE5vZGU7CisJCQlMaXN0CSAg ICpkcGNvbnRleHQ7CisKKwkJCWJvdW5kU3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERh dHVtKTsKKwkJCWJvdW5kTm9kZSA9IHN0cmluZ1RvTm9kZShib3VuZFN0cik7CisJCQlkcGNvbnRl eHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKHBhcmVudFJlbG5hbWUsIHBhcmVudE9pZCk7CisJCQlm b3JWYWx1ZXMgPSBkZXBhcnNlX2V4cHJlc3Npb24oYm91bmROb2RlLCBkcGNvbnRleHQsIGZhbHNl LCBmYWxzZSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBQQVJUSVRJ T04gT0YgJXMgJXMiLAorCQkJCQkJIHBhcmVudFF1YWwsIGZvclZhbHVlcyA/IGZvclZhbHVlcyA6 ICJERUZBVUxUIik7CisJCWlmIChmb3JWYWx1ZXMpCisJCQlwZnJlZShmb3JWYWx1ZXMpOworCQlp ZiAoYm91bmRTdHIpCisJCQlwZnJlZShib3VuZFN0cik7CisJCXBmcmVlKHBhcmVudFF1YWwpOwor CQlwZnJlZShwYXJlbnRSZWxuYW1lKTsKKwl9CisJZWxzZSBpZiAoaXNfdHlwZWQpCisJeworCQlj aGFyCSAgICp0eXBuYW1lID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHJlbC0+cmRfcmVsLT5y ZWxvZnR5cGUpOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIE9GICVzIiwgdHlw bmFtZSk7CisJCXBmcmVlKHR5cG5hbWUpOworCisJCWFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJp ZGVzKCZjdHgtPmJ1ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCQkJCSAgaXNfa2luZF9pbmNs dWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNLKSwKKwkJCQkJCQkJCSAgY3R4LT5ubl9lbnRy aWVzKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcGFyZW50czsKKwkJTGlzdENlbGwgICAq bGM7CisJCWJvb2wJCWZpcnN0OworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVm LCAiICgiKTsKKworCQlhcHBlbmRfY29sdW1uX2RlZnMoJmN0eC0+YnVmLCByZWwsIGN0eC0+cHJl dHR5LAorCQkJCQkJICAgaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNL KSwKKwkJCQkJCSAgIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwgY3R4LT5ubl9lbnRyaWVzKTsKKwor CQlpZiAoY3R4LT5wcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1Ziwg IlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcpJyk7 CisKKwkJcGFyZW50cyA9IGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhjdHgtPnJlbGlkLCBOb0xv Y2spOworCQlpZiAocGFyZW50cyAhPSBOSUwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmN0eC0+YnVmLCAiIElOSEVSSVRTICgiKTsKKwkJCWZpcnN0ID0gdHJ1ZTsKKwkJCWZvcmVh Y2gobGMsIHBhcmVudHMpCisJCQl7CisJCQkJT2lkCQkJcG9pZCA9IGxmaXJzdF9vaWQobGMpOwor CQkJCWNoYXIJICAgKnBuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQocG9pZCwKKwkJCQkJ CQkJCQkJCQkJCWN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJCWN0eC0+YmFz ZV9uYW1lc3BhY2UpOworCisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmY3R4LT5idWYsICIsICIpOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmY3R4LT5idWYsIHBuYW1lKTsKKwkJCQlwZnJlZShwbmFtZSk7CisJCQl9 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcpJyk7CisJCQlsaXN0X2ZyZWUo cGFyZW50cyk7CisJCX0KKwl9CisKKwlpZiAocmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCXsKKwkJRGF0dW0JCXBhcnRrZXlEYXR1bTsKKwkJY2hhcgkgICAqcGFydGtleTsK KworCQlwYXJ0a2V5RGF0dW0gPSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdfR0VUX1BBUlRLRVlERUYs CisJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJCXBhcnRrZXkgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKHBhcnRrZXlEYXR1bSk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0 eC0+YnVmLCAiIFBBUlRJVElPTiBCWSAlcyIsIHBhcnRrZXkpOworCQlwZnJlZShwYXJ0a2V5KTsK Kwl9CisKKwlpZiAoT2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsYW0pICYmCisJCXJlbC0+cmRf cmVsLT5yZWxhbSAhPSBIRUFQX1RBQkxFX0FNX09JRCkKKwl7CisJCWNoYXIJICAgKmFtbmFtZSA9 IGdldF9hbV9uYW1lKHJlbC0+cmRfcmVsLT5yZWxhbSk7CisKKwkJaWYgKGFtbmFtZSAhPSBOVUxM KQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBVU0lORyAlcyIsCisJCQkJ CQkJIHF1b3RlX2lkZW50aWZpZXIoYW1uYW1lKSk7CisJCQlwZnJlZShhbW5hbWUpOworCQl9CisJ fQorCisJaWYgKCFyZWxvcHRJc251bGwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZj dHgtPmJ1ZiwgIiBXSVRIICgiKTsKKwkJZ2V0X3JlbG9wdGlvbnMoJmN0eC0+YnVmLCByZWxvcHRE YXR1bSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKwl9CisKKwlS ZWxlYXNlU3lzQ2FjaGUoY2xhc3N0dXApOworCisJaWYgKCFjdHgtPm5vX3RhYmxlc3BhY2UgJiYg T2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSkpCisJeworCQljaGFyCSAgICp0 c25hbWUgPSBnZXRfdGFibGVzcGFjZV9uYW1lKHJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKTsK KworCQlpZiAodHNuYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+ YnVmLCAiIFRBQkxFU1BBQ0UgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHRzbmFtZSkp OworCQkJcGZyZWUodHNuYW1lKTsKKwkJfQorCX0KKworCWlmIChyZWxwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJT25Db21taXRBY3Rpb24gb2MgPSBnZXRfb25fY29t bWl0X2FjdGlvbihjdHgtPnJlbGlkKTsKKworCQlpZiAob2MgPT0gT05DT01NSVRfREVMRVRFX1JP V1MpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBPTiBDT01NSVQgREVM RVRFIFJPV1MiKTsKKwkJZWxzZSBpZiAob2MgPT0gT05DT01NSVRfRFJPUCkKKwkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIE9OIENPTU1JVCBEUk9QIik7CisJfQorCisJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmN0eC0+YnVmLCAnOycpOworCWFwcGVuZF9zdG10KGN0eCk7Cit9 CisKKy8qCisgKiBlbWl0X293bmVyX3N0bXQKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBPV05F UiBUTyByb2xlLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9vd25lcl9zdG10KFRhYmxlRGRsQ29u dGV4dCAqY3R4KQoreworCWNoYXIJICAgKm93bmVyOworCisJaWYgKGN0eC0+bm9fb3duZXIpCisJ CXJldHVybjsKKworCW93bmVyID0gR2V0VXNlck5hbWVGcm9tSWQoY3R4LT5yZWwtPnJkX3JlbC0+ cmVsb3duZXIsIGZhbHNlKTsKKwlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwlhcHBlbmRT dHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIkFMVEVSIFRBQkxFICVzIE9XTkVSIFRPICVzOyIsCisJCQkJ CSBjdHgtPnF1YWxuYW1lLCBxdW90ZV9pZGVudGlmaWVyKG93bmVyKSk7CisJYXBwZW5kX3N0bXQo Y3R4KTsKKwlwZnJlZShvd25lcik7Cit9CisKKy8qCisgKiBlbWl0X2NoaWxkX2RlZmF1bHRfb3Zl cnJpZGVzCisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgQUxURVIgQ09MVU1OIGNvbCBTRVQgREVG QVVMVCBleHByIC0gb25lIHBlcgorICoJCWluaGVyaXRlZCAoYXR0aXNsb2NhbD1mYWxzZSkgbm9u LWdlbmVyYXRlZCBjb2x1bW4gY2FycnlpbmcgYQorICoJCWxvY2FsbHktc2V0IGRlZmF1bHQuICBH ZW5lcmF0ZWQgY29sdW1ucyBhcmUgc2tpcHBlZDogdGhlaXIKKyAqCQlleHByZXNzaW9uIGlzIGlu aGVyaXRlZCBhdXRvbWF0aWNhbGx5IGFuZCBTRVQgREVGQVVMVCB3b3VsZAorICoJCWZhaWwgYXQg cmVwbGF5LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJyaWRlcyhU YWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IoY3R4LT5yZWwpOworCUxpc3QJICAgKmRwY29udGV4dCA9IE5JTDsKKworCWZvciAoaW50 IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRl IGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJICAgKmRlZnN0cjsKKwor CQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5hdHRpc2xvY2FsIHx8ICFhdHQtPmF0dGhh c2RlZikKKwkJCWNvbnRpbnVlOworCQlpZiAoYXR0LT5hdHRnZW5lcmF0ZWQgIT0gJ1wwJykKKwkJ CWNvbnRpbnVlOworCisJCWRlZnN0ciA9IGZpbmRfYXR0cmRlZl90ZXh0KGN0eC0+cmVsLCBhdHQt PmF0dG51bSwgJmRwY29udGV4dCk7CisJCWlmIChkZWZzdHIgPT0gTlVMTCkKKwkJCWNvbnRpbnVl OworCisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZj dHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIgQ09MVU1OICVzIFNFVCBERUZB VUxUICVzOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVy KE5hbWVTdHIoYXR0LT5hdHRuYW1lKSksCisJCQkJCQkgZGVmc3RyKTsKKwkJYXBwZW5kX3N0bXQo Y3R4KTsKKwkJcGZyZWUoZGVmc3RyKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X2F0dG9wdGlvbnMK KyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBDT0xVTU4gY29sIFNFVCAoLi4uKSAtIG9u ZSBwZXIgY29sdW1uCisgKgkJd2l0aCBub24tbnVsbCBwZ19hdHRyaWJ1dGUuYXR0b3B0aW9ucy4g IFRoZSBpbmxpbmUgZm9ybSBvZiB0aGVzZQorICoJCW9wdGlvbnMgaXNuJ3QgYXZhaWxhYmxlIGlu IENSRUFURSBUQUJMRSwgc28gdGhleSBjb21lIG91dCBoZXJlLgorICovCitzdGF0aWMgdm9pZAor ZW1pdF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCVR1cGxlRGVzYwl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBs ZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQlIZWFwVHVwbGUJYXR0VHVwOworCQlEYXR1bQkJb3B0 RGF0dW07CisJCWJvb2wJCW9wdElzbnVsbDsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJ CQljb250aW51ZTsKKworCQlhdHRUdXAgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLAorCQkJCQkJ CQkgT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSwKKwkJCQkJCQkJIEludDE2R2V0RGF0dW0o YXR0LT5hdHRudW0pKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dFR1cCkpCisJCQljb250 aW51ZTsKKworCQlvcHREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihBVFROVU0sIGF0dFR1cCwKKwkJ CQkJCQkJICAgQW51bV9wZ19hdHRyaWJ1dGVfYXR0b3B0aW9ucywgJm9wdElzbnVsbCk7CisJCWlm ICghb3B0SXNudWxsKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIg Q09MVU1OICVzIFNFVCAoIiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCQkgcXVvdGVf aWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJCWdldF9yZWxvcHRpb25zKCZj dHgtPmJ1Ziwgb3B0RGF0dW0pOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYs ICIpOyIpOworCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJfQorCQlSZWxlYXNlU3lzQ2FjaGUoYXR0 VHVwKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X2luZGV4ZXMKKyAqCQlDUkVBVEUgSU5ERVggcGVy IG5vbi1jb25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiB0aGUgcmVsYXRpb24uCisgKgkJSW5kZXhl cyB0aGF0IGJhY2sgUEsgLyBVTklRVUUgLyBFWENMVURFIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVk CisgKgkJb3V0LW9mLWxpbmUgYnkgZW1pdF9sb2NhbF9jb25zdHJhaW50cyAodGhlIEFMVEVSIFRB QkxFIC4uLiBBREQKKyAqCQlDT05TVFJBSU5UIHN0YXRlbWVudCBjcmVhdGVzIHRoZSBpbmRleCBp bXBsaWNpdGx5KS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfaW5kZXhlcyhUYWJsZURkbENvbnRl eHQgKmN0eCkKK3sKKwlMaXN0CSAgICppbmRleG9pZHM7CisJTGlzdENlbGwgICAqbGM7CisKKwlp ZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9JTkRFWCkpCisJCXJldHVy bjsKKworCWluZGV4b2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KGN0eC0+cmVsKTsKKwlmb3Jl YWNoKGxjLCBpbmRleG9pZHMpCisJeworCQlPaWQJCQlpZHhvaWQgPSBsZmlyc3Rfb2lkKGxjKTsK KwkJY2hhcgkgICAqaWR4ZGVmOworCisJCWlmIChPaWRJc1ZhbGlkKGdldF9pbmRleF9jb25zdHJh aW50KGlkeG9pZCkpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU2tpcCBpbmRleGVzIHRo YXQgd2VyZSBpbmhlcml0ZWQgZnJvbSBhIHBhcmVudCBwYXJ0aXRpb25lZCBpbmRleC4KKwkJICog VGhleSBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHBhcmVudCBpbmRleCBEREwg aXMKKwkJICogcmVwbGF5ZWQgYW5kIHRoZSBwYXJ0aXRpb24gaXMgYXR0YWNoZWQsIHNvIGVtaXR0 aW5nIHRoZW0gc2VwYXJhdGVseQorCQkgKiB3b3VsZCBwcm9kdWNlIGEgInJlbGF0aW9uIGFscmVh ZHkgZXhpc3RzIiBlcnJvciBvbiByZXBsYXkuCisJCSAqLworCQlpZiAoZ2V0X3JlbF9yZWxpc3Bh cnRpdGlvbihpZHhvaWQpKQorCQkJY29udGludWU7CisKKwkJaWR4ZGVmID0gcGdfZ2V0X2luZGV4 ZGVmX2RkbChpZHhvaWQpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5k U3RyaW5nSW5mbygmY3R4LT5idWYsICIlczsiLCBpZHhkZWYpOworCQlhcHBlbmRfc3RtdChjdHgp OworCQlwZnJlZShpZHhkZWYpOworCX0KKwlsaXN0X2ZyZWUoaW5kZXhvaWRzKTsKK30KKworLyoK KyAqIGVtaXRfbG9jYWxfY29uc3RyYWludHMKKyAqCQlBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNU UkFJTlQgZm9yIGVhY2ggbG9jYWxseS1kZWZpbmVkIGNvbnN0cmFpbnQKKyAqCQlvbiB0aGUgcmVs YXRpb24uICBJbmhlcml0ZWQgY29uc3RyYWludHMgKGNvbmlzbG9jYWw9ZmFsc2UpIGNvbWUKKyAq CQlmcm9tIHRoZSBwYXJlbnQncyBEREwuICBDSEVDSyBjb25zdHJhaW50cyBhcmUgZW1pdHRlZCBp bmxpbmUgZm9yCisgKgkJcmVndWxhci90eXBlZCB0YWJsZXMgKHNraXAgaGVyZSkgYnV0IG91dC1v Zi1saW5lIGZvciBwYXJ0aXRpb24KKyAqCQljaGlsZHJlbiAobm8gY29sdW1uIGxpc3QgdG8gbGl2 ZSBpbikuICBMb2NhbCBOT1QgTlVMTAorICoJCWNvbnN0cmFpbnRzIG9uIGF0dGlzbG9jYWwgY29s dW1ucyAtIHdoZXRoZXIgdXNlci1uYW1lZCBvcgorICoJCW1hdGNoaW5nIHRoZSBhdXRvLW5hbWUg cGF0dGVybiAtIGFyZSBlbWl0dGVkIGlubGluZSBieSB0aGUKKyAqCQljb2x1bW4tZW1pdCBoZWxw ZXJzIGFuZCBhcmUgc2tpcHBlZCB2aWEgc2tpcF9ub3RudWxsX29pZHMsCisgKgkJYmVjYXVzZSBQ RyBvbmx5IGFsbG93cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbiBhbmQgd291bGQgcmVqZWN0Cisg KgkJYSBzZWNvbmQgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5ULiAgUGFydGl0aW9uIGNo aWxkcmVuCisgKgkJaGF2ZSBubyBjb2x1bW4gbGlzdCwgc28gdGhlaXIgTk9UIE5VTExzIGZhbGwg dGhyb3VnaCBoZXJlLgorICoKKyAqCQlFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gdGhlIG1hdGNo aW5nIGtpbmQgaW4gdGhlIG9ubHkgLyBleGNlcHQKKyAqCQl2b2NhYnVsYXJ5LCBzbyBjYWxsZXJz IGNhbiBwcm9kdWNlIGUuZy4gYW4gRkstb25seSBwYXNzCisgKgkJKG9ubHkgPT4gJ2ZvcmVpZ25f a2V5Jykgb3IgYSBwdWIvc3ViIGNsb25lIHRoYXQga2VlcHMgb25seQorICoJCXRoZSBwcmltYXJ5 IGtleSAoZXhjZXB0ID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uJykuCisg KgkJTk9UIE5VTEwgaXMgaW50ZW50aW9uYWxseSBub3QgaW4gdGhlIHZvY2FidWxhcnkgLSBhbHdh eXMgZW1pdHRlZAorICoJCXNvIGNsb25lZCBzY2hlbWFzIGRvbid0IHNpbGVudGx5IGFjY2VwdCBO VUxMcyB0aGUgc291cmNlIHdvdWxkCisgKgkJaGF2ZSByZWplY3RlZC4KKyAqLworc3RhdGljIHZv aWQKK2VtaXRfbG9jYWxfY29uc3RyYWludHMoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJUmVs YXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2NhbktleURhdGEgY29uS2V5 OworCUhlYXBUdXBsZQljb25UdXA7CisJYm9vbAkJaXNfcGFydGl0aW9uID0gY3R4LT5yZWwtPnJk X3JlbC0+cmVsaXNwYXJ0aXRpb247CisJTGlzdAkgICAqZmtfc3RtdHMgPSBOSUw7CisKKwljb25S ZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwor CVNjYW5LZXlJbml0KCZjb25LZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVt KGN0eC0+cmVsaWQpKTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29u c3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZj b25LZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0 bmV4dChjb25TY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdf Y29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwp CisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gaXRz IGtpbmQgaW4gdGhlIG9ubHkgLyBleGNlcHQKKwkJICogdm9jYWJ1bGFyeS4gIENIRUNLIGlzIGFs c28gc2tpcHBlZCBmb3Igbm9uLXBhcnRpdGlvbiByZWxhdGlvbnMKKwkJICogYmVjYXVzZSBhcHBl bmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzIGVtaXRzIHRob3NlIGlubGluZSBpbgorCQkgKiB0 aGUgQ1JFQVRFIFRBQkxFIGJvZHk7IHBhcnRpdGlvbiBjaGlsZHJlbiBoYXZlIG5vIGNvbHVtbiBs aXN0CisJCSAqIHRvIGxpdmUgaW4sIHNvIHRoZXkgY29tZSB0aHJvdWdoIHRoaXMgbG9vcC4gIE5P VCBOVUxMIGlzIG5vdCBhCisJCSAqIGZpbHRlcmFibGUga2luZCAtIGVtaXR0ZWQgdW5jb25kaXRp b25hbGx5IHRvIGF2b2lkIHByb2R1Y2luZworCQkgKiBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNj ZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgaGF2ZQorCQkgKiByZWplY3RlZC4KKwkJICovCisJ CXN3aXRjaCAoY29uLT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToK KwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tF WSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFV RToKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9VTklRVUUp KQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoK KwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSykpCisJ CQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBGb3Igbm9uLXBhcnRpdGlvbiByZWxhdGlv bnMsIENIRUNLIGlzIG5vcm1hbGx5IGVtaXR0ZWQKKwkJCQkgKiBpbmxpbmUgaW4gdGhlIENSRUFU RSBUQUJMRSBib2R5IGJ5CisJCQkJICogYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cywg c28gd2Ugc2tpcCBpdCBoZXJlIHRvCisJCQkJICogYXZvaWQgZG91YmxlIGVtaXNzaW9uLiAgQnV0 IHdoZW4gS0lORF9UQUJMRSBpcyBub3QgaW4KKwkJCQkgKiB0aGUgYWN0aXZlIGZpbHRlciAoZS5n LiBvbmx5PT4nY2hlY2snIG9yIGEgY2xvbmUgdGhhdAorCQkJCSAqIHRhcmdldHMgb25seSBzdWIt b2JqZWN0cyksIHRoZSBpbmxpbmUgcGFzcyBuZXZlciBydW5zOworCQkJCSAqIGZhbGwgdGhyb3Vn aCBhbmQgZW1pdCBlYWNoIENIRUNLIHZpYSBBTFRFUiBUQUJMRSBzbyB0aGUKKwkJCQkgKiB1c2Vy IGFjdHVhbGx5IGdldHMgdGhlIGNvbnN0cmFpbnQgdGhleSBhc2tlZCBmb3IuCisJCQkJICovCisJ CQkJaWYgKCFpc19wYXJ0aXRpb24gJiYKKwkJCQkJaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxF X0RETF9LSU5EX1RBQkxFKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENP TlNUUkFJTlRfRk9SRUlHTjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9E RExfS0lORF9GT1JFSUdOX0tFWSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2Fz ZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBU QUJMRV9ERExfS0lORF9FWENMVVNJT04pKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgQ09OU1RSQUlOVF9OT1ROVUxMOgorCQkJCS8qCisJCQkJICogT3V0LW9mLWxpbmUgTk9U IE5VTEwgaXMgY29uY2VwdHVhbGx5IHBhcnQgb2YgdGhlCisJCQkJICogdGFibGUgZGVmaW5pdGlv bjogZ2F0aW5nIGl0IG9uIEtJTkRfVEFCTEUgbWVhbnMgYW4KKwkJCQkgKiBvbmx5PWZvcmVpZ25f a2V5IHNlY29uZCBwYXNzIGRvZXMgbm90IHJlLWVtaXQKKwkJCQkgKiBOT1QgTlVMTHMgdGhhdCB0 aGUgZmlyc3QgcGFzcyBhbHJlYWR5IGNyZWF0ZWQsCisJCQkJICogd2hpbGUgdGhlIG5vLW9wdGlv bnMgZGVmYXVsdCBzdGlsbCBlbWl0cyB0aGVtLgorCQkJCSAqLworCQkJCWlmICghaXNfa2luZF9p bmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1RBQkxFKSkKKwkJCQkJY29udGludWU7CisJCQkJ aWYgKCFpc19wYXJ0aXRpb24gJiYKKwkJCQkJbGlzdF9tZW1iZXJfb2lkKGN0eC0+c2tpcF9ub3Ru dWxsX29pZHMsIGNvbi0+b2lkKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQlkZWZh dWx0OgorCQkJCS8qCisJCQkJICogQW55IGZ1dHVyZSBjb250eXBlIHRoZSB2b2NhYnVsYXJ5IGRv ZXMgbm90IHlldCBjb3ZlcjoKKwkJCQkgKiBmYWxsIHRocm91Z2ggYW5kIGVtaXQgaXQgdmlhIHBn X2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQsCisJCQkJICogbWF0Y2hpbmcgdGhlIG9yaWdpbmFs IGxvb3AncyAiZW1pdCB1bmxlc3MgZmlsdGVyZWQiCisJCQkJICogYmVoYXZpb3IuICBUaGlzIGlz IHVucmVhY2hhYmxlIGluIGN1cnJlbnQgUEcgKGV2ZXJ5CisJCQkJICogY29udHlwZSBhYm92ZSBp cyBlbnVtZXJhdGVkKSBidXQga2VwdCBkZWZlbnNpdmUgYWdhaW5zdAorCQkJCSAqIGEgbmV3IGNv bnR5cGUgYmVpbmcgaW50cm9kdWNlZC4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJfQorCisJCXsK KwkJCWNoYXIJICAgKmNvbmJvZHkgPSBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KGNvbi0+b2lk KTsKKworCQkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCQlhcHBlbmRTdHJpbmdJbmZv KCZjdHgtPmJ1ZiwgIkFMVEVSIFRBQkxFICVzIEFERCBDT05TVFJBSU5UICVzICVzOyIsCisJCQkJ CQkJIGN0eC0+cXVhbG5hbWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24t PmNvbm5hbWUpKSwKKwkJCQkJCQkgY29uYm9keSk7CisKKwkJCS8qCisJCQkgKiBEZWZlciBGSyBz dGF0ZW1lbnRzIHNvIHRoZXkgYXJlIGVtaXR0ZWQgYWZ0ZXIgYWxsIG90aGVyCisJCQkgKiBjb25z dHJhaW50cy4gIEEgc2VsZi1yZWZlcmVuY2luZyBGSyAoUkVGRVJFTkNFUyBzYW1lX3RhYmxlKQor CQkJICogcmVxdWlyZXMgdGhlIFBLL1VOSVFVRSBpdCB0YXJnZXRzIHRvIGV4aXN0IGZpcnN0LCBh bmQgYmVjYXVzZQorCQkJICogdGhlIGNhdGFsb2cgc2NhbiByZXR1cm5zIGNvbnN0cmFpbnRzIGlu IG5hbWUgb3JkZXIsIGFuIEZLIHdob3NlCisJCQkgKiBuYW1lIHNvcnRzIGJlZm9yZSB0aGUgUEsg bmFtZSB3b3VsZCBvdGhlcndpc2UgYmUgZW1pdHRlZCBmaXJzdAorCQkJICogYW5kIGZhaWwgd2l0 aCAidGhlcmUgaXMgbm8gdW5pcXVlIGNvbnN0cmFpbnQgbWF0Y2hpbmcgZ2l2ZW4KKwkJCSAqIGtl eXMiLgorCQkJICovCisJCQlpZiAoY29uLT5jb250eXBlID09IENPTlNUUkFJTlRfRk9SRUlHTikK KwkJCQlma19zdG10cyA9IGxhcHBlbmQoZmtfc3RtdHMsIHBzdHJkdXAoY3R4LT5idWYuZGF0YSkp OworCQkJZWxzZQorCQkJCWFwcGVuZF9zdG10KGN0eCk7CisKKwkJCXBmcmVlKGNvbmJvZHkpOwor CQl9CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVs LCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyogQXBwZW5kIGRlZmVycmVkIEZLIHN0YXRlbWVudHMg YWZ0ZXIgYWxsIG90aGVyIGNvbnN0cmFpbnRzLiAqLworCWN0eC0+c3RhdGVtZW50cyA9IGxpc3Rf Y29uY2F0KGN0eC0+c3RhdGVtZW50cywgZmtfc3RtdHMpOworfQorCisvKgorICogZW1pdF9ydWxl cworICoJCUNSRUFURSBSVUxFIHBlciBjYWNoZWQgcmV3cml0ZSBydWxlIG9uIHRoZSByZWxhdGlv bi4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfcnVsZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7 CisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUlVMRSkgfHwKKwkJ Y3R4LT5yZWwtPnJkX3J1bGVzID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgY3R4LT5yZWwtPnJkX3J1bGVzLT5udW1Mb2NrczsgaSsrKQorCXsKKwkJT2lkCQkJcnVs ZWlkID0gY3R4LT5yZWwtPnJkX3J1bGVzLT5ydWxlc1tpXS0+cnVsZUlkOworCQljaGFyCSAgICpy dWxlZGVmX3N0cjsKKworCQlydWxlZGVmX3N0ciA9IHBnX2dldF9ydWxlZGVmX2RkbChydWxlaWQp OworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmY3R4LT5idWYsIHJ1bGVkZWZfc3RyKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUo cnVsZWRlZl9zdHIpOworCX0KK30KKworLyoKKyAqIGVtaXRfc3RhdGlzdGljcworICoJCUNSRUFU RSBTVEFUSVNUSUNTIHBlciBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdCBvbiB0aGUgcmVsYXRp b24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICpj dHgpCit7CisJUmVsYXRpb24Jc3RhdFJlbDsKKwlTeXNTY2FuRGVzYyBzdGF0U2NhbjsKKwlTY2Fu S2V5RGF0YSBzdGF0S2V5OworCUhlYXBUdXBsZQlzdGF0VHVwOworCisJaWYgKCFpc19raW5kX2lu Y2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfU1RBVElTVElDUykpCisJCXJldHVybjsKKworCXN0 YXRSZWwgPSB0YWJsZV9vcGVuKFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJU2NhbktleUluaXQoJnN0YXRLZXksCisJCQkJQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0 eHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJ ZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlzdGF0U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihz dGF0UmVsLCBTdGF0aXN0aWNFeHRSZWxpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwg MSwgJnN0YXRLZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoc3RhdFR1cCA9IHN5c3Rh YmxlX2dldG5leHQoc3RhdFNjYW4pKSkKKwl7CisJCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0 ID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHN0YXRUdXApOworCQljaGFyCSAg ICpzdGF0ZGVmID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRsKHN0YXQtPm9pZCk7CisKKwkJ cmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LCAiJXM7Iiwgc3RhdGRlZik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVlKHN0YXRkZWYp OworCX0KKwlzeXN0YWJsZV9lbmRzY2FuKHN0YXRTY2FuKTsKKwl0YWJsZV9jbG9zZShzdGF0UmVs LCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogZW1pdF9yZXBsaWNhX2lkZW50aXR5Cisg KgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgUkVQTElDQSBJREVOVElUWSAuLi4gLSBlbWl0dGVkIG9u bHkgd2hlbiB0aGUKKyAqCQlyZWxyZXBsaWRlbnQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0ICgn ZCcgPSB1c2UgcHJpbWFyeSBrZXkpLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9yZXBsaWNhX2lk ZW50aXR5KFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCWlmICghaXNfa2luZF9pbmNsdWRlZChj dHgsIFRBQkxFX0RETF9LSU5EX1JFUExJQ0FfSURFTlRJVFkpKQorCQlyZXR1cm47CisJaWYgKGN0 eC0+cmVsLT5yZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQp CisJCXJldHVybjsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCXN3aXRjaCAoY3R4 LT5yZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50KQorCXsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZ X05PVEhJTkc6CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVS IFRBQkxFICVzIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsiLAorCQkJCQkJCSBjdHgtPnF1YWxu YW1lKTsKKwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lE RU5USVRZX0ZVTEw6CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFM VEVSIFRBQkxFICVzIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiLAorCQkJCQkJCSBjdHgtPnF1YWxu YW1lKTsKKwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lE RU5USVRZX0lOREVYOgorCQkJeworCQkJCU9pZAkJCXJlcGxpZHggPSBSZWxhdGlvbkdldFJlcGxp Y2FJbmRleChjdHgtPnJlbCk7CisKKwkJCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJCQl7 CisJCQkJCWNoYXIJICAgKmlkeG5hbWUgPSBnZXRfcmVsX25hbWUocmVwbGlkeCk7CisKKwkJCQkJ aWYgKGlkeG5hbWUgPT0gTlVMTCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2coInJlcGxpY2Eg aWRlbnRpdHkgaW5kZXggd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCQkJCXJl cGxpZHgpLAorCQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRs eSBkcm9wcGVkLiIpKSk7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJ CQkJCQkgIkFMVEVSIFRBQkxFICVzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggJXM7IiwK KwkJCQkJCQkJCSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaWR4 bmFtZSkpOworCQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlwZnJlZShpZHhuYW1lKTsKKwkJ CQl9CisJCQl9CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3Jsc190b2dnbGVzCisg KgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgRU5BQkxFIC8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZ LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0 eCkKK3sKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9STFMpKQor CQlyZXR1cm47CisKKwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+cmVscm93c2VjdXJpdHkpCisJewor CQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5i dWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFICVzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7IiwK KwkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwl9CisJaWYgKGN0 eC0+cmVsLT5yZF9yZWwtPnJlbGZvcmNlcm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0cmluZ0lu Zm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFM VEVSIFRBQkxFICVzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+cXVh bG5hbWUpOworCQlhcHBlbmRfc3RtdChjdHgpOworCX0KK30KKworLyoKKyAqIGVtaXRfcGFydGl0 aW9uX2NoaWxkcmVuCisgKgkJRm9yIGVhY2ggZGlyZWN0IHBhcnRpdGlvbiBjaGlsZCBvZiBhIHBh cnRpdGlvbmVkLXRhYmxlIHBhcmVudCwKKyAqCQlyZWN1cnNpdmVseSBjYWxsIHBnX2dldF90YWJs ZV9kZGxfaW50ZXJuYWwgYW5kIGFwcGVuZCB0aGUgY2hpbGQncworICoJCXN0YXRlbWVudHMuICBF YWNoIGNoaWxkJ3Mgb3duIERETCBoYW5kbGVzIGZ1cnRoZXIgbGV2ZWxzIHRocm91Z2gKKyAqCQl0 aGUgc2FtZSByZWN1cnNpb24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3BhcnRpdGlvbl9jaGls ZHJlbihUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICpjaGlsZHJlbjsKKwlMaXN0 Q2VsbCAgICpsYzsKKworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5E X1BBUlRJVElPTikgfHwKKwkJY3R4LT5yZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BB UlRJVElPTkVEX1RBQkxFKQorCQlyZXR1cm47CisKKwljaGlsZHJlbiA9IGZpbmRfaW5oZXJpdGFu Y2VfY2hpbGRyZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlmb3JlYWNoKGxjLCBj aGlsZHJlbikKKwl7CisJCU9pZAkJCWNoaWxkb2lkID0gbGZpcnN0X29pZChsYyk7CisJCVRhYmxl RGRsQ29udGV4dCBjaGlsZGN0eCA9IHswfTsKKwkJTGlzdAkgICAqY2hpbGRzdG10czsKKworCQkv KgorCQkgKiBFYWNoIHJlY3Vyc2l2ZSBpbnZvY2F0aW9uIHJlLWRlcml2ZXMgaXRzIG93biByZWws IG5hbWVzcGFjZSwKKwkJICogcXVhbG5hbWUsIE5PVCBOVUxMIGNhY2hlLCBidWZmZXIsIGFuZCBz dGF0ZW1lbnQgbGlzdCBpbnNpZGUKKwkJICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbC4gIFRo ZSB1c2VyLXN1cHBsaWVkIG9wdGlvbiBmaWVsZHMKKwkJICogY2Fycnkgb3ZlciB2ZXJiYXRpbSB3 aXRoIG9uZSBleGNlcHRpb246IEtJTkRfUEFSVElUSU9OIGlzIGEKKwkJICogImdhdGUiIGtpbmQg dGhhdCBjb250cm9scyB3aGV0aGVyIHdlIHJlY3Vyc2UgYXQgYWxsLCBub3QgYQorCQkgKiBraW5k IHRoYXQgdGhlIGNoaWxkcmVuIHRoZW1zZWx2ZXMgZXZlciBlbWl0LiAgSWYgd2UgcHJvcGFnYXRl ZAorCQkgKiBhbiBvbmx5LXNldCB0aGF0IGNvbnRhaW5lZCBQQVJUSVRJT04gaW50byBhIGNoaWxk LCB0aGUgY2hpbGQKKwkJICogd291bGQgbm90IGVtaXQgaXRzIG93biBDUkVBVEUgVEFCTEUgKEtJ TkRfVEFCTEUgYWJzZW50KSBub3IKKwkJICogYW55IHN1Yi1vYmplY3RzLCBhbmQgdGhlIHJlY3Vy c2lvbiB3b3VsZCBwcm9kdWNlIG5vdGhpbmcuICBTbworCQkgKiBzdHJpcCBQQVJUSVRJT04gb3V0 IG9mIG9ubHlfa2luZHMgd2hlbiByZWN1cnNpbmc7IGlmIHRoYXQKKwkJICogZW1wdGllcyB0aGUg c2V0LCBkcm9wIHRoZSBmaWx0ZXIgZW50aXJlbHkgc28gdGhlIGNoaWxkIGVtaXRzCisJCSAqIGl0 cyBmdWxsIERETC4gIGV4Y2VwdF9raW5kcyBwYXNzZXMgdGhyb3VnaCB1bmNoYW5nZWQgYmVjYXVz ZQorCQkgKiBQQVJUSVRJT04gaW4gdGhlIGV4Y2VwdC1zZXQgYWxyZWFkeSBzdG9wcGVkIHVzIGZy b20gZ2V0dGluZworCQkgKiBoZXJlLgorCQkgKi8KKwkJY2hpbGRjdHgucmVsaWQgPSBjaGlsZG9p ZDsKKwkJY2hpbGRjdHgucHJldHR5ID0gY3R4LT5wcmV0dHk7CisJCWNoaWxkY3R4Lm5vX293bmVy ID0gY3R4LT5ub19vd25lcjsKKwkJY2hpbGRjdHgubm9fdGFibGVzcGFjZSA9IGN0eC0+bm9fdGFi bGVzcGFjZTsKKwkJY2hpbGRjdHguc2NoZW1hX3F1YWxpZmllZCA9IGN0eC0+c2NoZW1hX3F1YWxp ZmllZDsKKwkJY2hpbGRjdHgub25seV9raW5kcyA9IGN0eC0+b25seV9raW5kczsKKwkJY2hpbGRj dHguZXhjZXB0X2tpbmRzID0gY3R4LT5leGNlcHRfa2luZHM7CisKKwkJLyoKKwkJICogV2hlbiBz Y2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCB0aGUgY29udHJhY3QgaXMgdGhhdCB0aGUgb3V0cHV0 CisJCSAqIGlzIHJlcGxheWFibGUgd2l0aCB0aGUgcGFyZW50J3Mgc2NoZW1hIGluIHNlYXJjaF9w YXRoLiAgVGhhdAorCQkgKiBjb250cmFjdCBjYW5ub3QgaG9sZCBmb3IgYSBjaGlsZCB0aGF0IGxp dmVzIGluIGEgZGlmZmVyZW50IHNjaGVtYToKKwkJICogaXRzIG93biBuYW1lIHdvdWxkIGJlIGFt YmlndW91cyAobGFuZGluZyBpbiB3aGF0ZXZlciBzY2hlbWEgaXMKKwkJICogZmlyc3QgaW4gc2Vh cmNoX3BhdGgpIGFuZCByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIHBhcmVudCB3b3VsZCBoYXZlCisJ CSAqIHRvIGJlIHNjaGVtYS1xdWFsaWZpZWQgYW55d2F5LiAgRm9yY2UgZnVsbCBxdWFsaWZpY2F0 aW9uIHNvIHRoZQorCQkgKiBjaGlsZCdzIERETCBpcyB1bmFtYmlndW91cyByZWdhcmRsZXNzIG9m IHRoZSBjYWxsZXIncyBzZWFyY2hfcGF0aC4KKwkJICovCisJCWlmICghY2hpbGRjdHguc2NoZW1h X3F1YWxpZmllZCAmJgorCQkJZ2V0X3JlbF9uYW1lc3BhY2UoY2hpbGRvaWQpICE9IGN0eC0+YmFz ZV9uYW1lc3BhY2UpCisJCQljaGlsZGN0eC5zY2hlbWFfcXVhbGlmaWVkID0gdHJ1ZTsKKworCQlp ZiAoY2hpbGRjdHgub25seV9raW5kcyAhPSBOVUxMICYmCisJCQlibXNfaXNfbWVtYmVyKChpbnQp IFRBQkxFX0RETF9LSU5EX1BBUlRJVElPTiwKKwkJCQkJCSAgY2hpbGRjdHgub25seV9raW5kcykp CisJCXsKKwkJCUJpdG1hcHNldCAgKmNoaWxkX29ubHkgPSBibXNfY29weShjaGlsZGN0eC5vbmx5 X2tpbmRzKTsKKworCQkJY2hpbGRfb25seSA9IGJtc19kZWxfbWVtYmVyKGNoaWxkX29ubHksCisJ CQkJCQkJCQkJKGludCkgVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OKTsKKwkJCWlmIChibXNfaXNf ZW1wdHkoY2hpbGRfb25seSkpCisJCQl7CisJCQkJYm1zX2ZyZWUoY2hpbGRfb25seSk7CisJCQkJ Y2hpbGRjdHgub25seV9raW5kcyA9IE5VTEw7CisJCQl9CisJCQllbHNlCisJCQkJY2hpbGRjdHgu b25seV9raW5kcyA9IGNoaWxkX29ubHk7CisJCX0KKworCQljaGlsZHN0bXRzID0gcGdfZ2V0X3Rh YmxlX2RkbF9pbnRlcm5hbCgmY2hpbGRjdHgpOworCQljdHgtPnN0YXRlbWVudHMgPSBsaXN0X2Nv bmNhdChjdHgtPnN0YXRlbWVudHMsIGNoaWxkc3RtdHMpOworCX0KKwlsaXN0X2ZyZWUoY2hpbGRy ZW4pOworfQorCisvKgorICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbAorICoJCUdlbmVyYXRl IERETCBzdGF0ZW1lbnRzIHRvIHJlY3JlYXRlIGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJs ZS4KKyAqCisgKiBUaGUgY2FsbGVyIGluaXRpYWxpemVzICpjdHggd2l0aCB0aGUgdXNlci1zdXBw bGllZCBvcHRpb24gZmllbGRzCisgKiAocmVsaWQsIHByZXR0eSwgbm9fb3duZXIsIG5vX3RhYmxl c3BhY2UsIHNjaGVtYV9xdWFsaWZpZWQsCisgKiBvbmx5X2tpbmRzLCBleGNlcHRfa2luZHMpLiAg VGhpcyBmdW5jdGlvbiBvcGVucyB0aGUgcmVsYXRpb24sCisgKiB2YWxpZGF0ZXMgYWNjZXNzLCBw b3B1bGF0ZXMgdGhlIGRlcml2ZWQgZmllbGRzIChyZWwsIHF1YWxuYW1lLAorICogbm5fZW50cmll cywgLi4uKSwgcnVucyB0aGUgZW1pc3Npb24gcGFzc2VzLCBhbmQgcmV0dXJucyB0aGUKKyAqIGFj Y3VtdWxhdGVkIHN0YXRlbWVudCBsaXN0LgorICoKKyAqIEVhY2ggZW1pc3Npb24gaGVscGVyIGNv bnN1bHRzIGlzX2tpbmRfaW5jbHVkZWQoKSB0byBkZWNpZGUgd2hldGhlcgorICogaXQgc2hvdWxk IHJ1bi4gIFRoZSB0YWJsZS1wcm9wZXIgcGFzc2VzIChDUkVBVEUgVEFCTEUgLyBPV05FUiAvCisg KiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIC8gQUxURVIgQ09MVU1OIC4uLiBTRVQgKC4u LikpIGFyZQorICogZ3JvdXBlZCB1bmRlciBLSU5EX1RBQkxFIHNvIHRoZSBGSy1vbmx5IC8gc3Vi LW9iamVjdC1vbmx5IHdvcmtmbG93CisgKiBpcyBleHByZXNzaWJsZSBhcyBhIHNpbmdsZSBvbmx5 IG9yIGV4Y2VwdCBsaXN0LgorICoKKyAqIFRyaWdnZXIgYW5kIHBvbGljeSBlbWlzc2lvbiBhcmUg c2NhZmZvbGRlZCBidXQgY3VycmVudGx5IGRpc2FibGVkCisgKiAoI2lmIDApIC0gdGhleSB3aWxs IGJlY29tZSBhIHNpbmdsZSBoZWxwZXIgY2FsbCBvbmNlIHRoZSBzdGFuZGFsb25lCisgKiBwZ19n ZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRfcG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCisgKi8KK3N0 YXRpYyBMaXN0ICoKK3BnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpj dHgpCit7CisJUmVsYXRpb24JcmVsOworCWNoYXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJl c3VsdDsKKworCXJlbCA9IHRhYmxlX29wZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRp YWwgY3V0IG9ubHkgc3VwcG9ydHMgb3JkaW5hcnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZp ZXdzLAorCSAqIG1hdHZpZXdzLCBmb3JlaWduIHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBj b21wb3NpdGUgdHlwZXMsIGFuZAorCSAqIFRPQVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZv ciBub3cuCisJICovCisJaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5k ICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0g cHN0cmR1cChSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShy ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBv cmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKwor CS8qIENhbGxlciBuZWVkcyBTRUxFQ1Qgb24gdGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRp b24uICovCisJYWNscmVzdWx0ID0gcGdfY2xhc3NfYWNsY2hlY2soY3R4LT5yZWxpZCwgR2V0VXNl cklkKCksIEFDTF9TRUxFQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFj bGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWwpKTsKKworCS8qCisJICogVmFsaWRhdGlvbjogaWYgdGhlIHRhYmxl IGhhcyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIGFuZCB0aGUKKwkgKiByZWZlcmVuY2Vk IGluZGV4IHdvdWxkIG5vdCBiZSBlbWl0dGVkIHVuZGVyIHRoZSBhY3RpdmUgZmlsdGVyLCB0aGUK KwkgKiBlbWl0dGVkIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlIHdvdWxkIHJlZmVyZW5jZSBhbiBp bmRleCB0aGUgc2FtZSBEREwKKwkgKiBuZXZlciBwcm9kdWNlZC4gIERldGVybWluZSB3aGljaCBr aW5kIHdvdWxkIGVtaXQgdGhlIGluZGV4IChvbmUgb2YKKwkgKiBwcmltYXJ5X2tleSAvIHVuaXF1 ZSAvIGV4Y2x1c2lvbiBmb3IgY29uc3RyYWludC1iYWNrZWQgaW5kZXhlcywKKwkgKiBvdGhlcndp c2UgdGhlIGdlbmVyaWMgImluZGV4IiBraW5kKSBhbmQgcmVxdWlyZSBpdCB0byBiZSBpbiBzY29w ZQorCSAqIHdoZW5ldmVyICJyZXBsaWNhX2lkZW50aXR5IiBpcy4gIFRoZSBjaGVjayB1c2VzIGlz X2tpbmRfaW5jbHVkZWQgc28KKwkgKiBpdCBjb3ZlcnMgYm90aCBmb3JtcyBuYXR1cmFsbHk6IGFu ICJleGNlcHQiIGxpc3QgdGhhdCBvbWl0cyB0aGUKKwkgKiBzb3VyY2Uga2luZCwgYW5kIGFuICJv bmx5IiBsaXN0IHRoYXQgb21pdHMgaXQuCisJICovCisJaWYgKHJlbC0+cmRfcmVsLT5yZWxyZXBs aWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9JTkRFWCAmJgorCQlpc19raW5kX2luY2x1ZGVkKGN0 eCwgVEFCTEVfRERMX0tJTkRfUkVQTElDQV9JREVOVElUWSkpCisJeworCQlPaWQJCQlyZXBsaWR4 ID0gUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgocmVsKTsKKworCQlpZiAoT2lkSXNWYWxpZChyZXBs aWR4KSkKKwkJeworCQkJVGFibGVEZGxLaW5kIGlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfSU5E RVg7CisJCQlPaWQJCQljb25vaWQgPSBnZXRfaW5kZXhfY29uc3RyYWludChyZXBsaWR4KTsKKwor CQkJaWYgKE9pZElzVmFsaWQoY29ub2lkKSkKKwkJCXsKKwkJCQlIZWFwVHVwbGUJY29uVHVwID0g U2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwKKwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1 bShjb25vaWQpKTsKKworCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCQkJewor CQkJCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RS VUNUKGNvblR1cCk7CisKKwkJCQkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCQkJCXsKKwkJCQkJ CWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgorCQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJ TkRfUFJJTUFSWV9LRVk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIENPTlNUUkFJTlRfVU5J UVVFOgorCQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfVU5JUVVFOworCQkJCQkJCWJy ZWFrOworCQkJCQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQkJCQlpZHhfa2luZCA9 IFRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6 CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGNvblR1cCk7CisJ CQkJfQorCQkJfQorCisJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBpZHhfa2luZCkpCisJ CQl7CisJCQkJY2hhcgkgICAqcmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsKSk7CisJCQkJY29uc3QgY2hhciAqaWR4X25hbWUgPSB0YWJsZV9kZGxfa2luZF9uYW1l c1soaW50KSBpZHhfa2luZF0ubmFtZTsKKworCQkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJSRVBMSUNBIElERU5USVRZIGZv ciB0YWJsZSBcIiVzXCIgcmVxdWlyZXMga2luZCBcIiVzXCIgdG8gYmUgZW1pdHRlZCIsCisJCQkJ CQkJCXJlbG5hbWUsIGlkeF9uYW1lKSwKKwkJCQkJCSBlcnJkZXRhaWwoIlRoZSB0YWJsZSdzIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBi eSB0aGUgXCIlc1wiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4iLAor CQkJCQkJCQkgICBpZHhfbmFtZSksCisJCQkJCQkgZXJyaGludCgiRWl0aGVyIGFkZCBcIiVzXCIg dG8gdGhlIGZpbHRlciBvciByZW1vdmUgXCJyZXBsaWNhX2lkZW50aXR5XCIgZnJvbSBpdC4iLAor CQkJCQkJCQkgaWR4X25hbWUpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFBvcHVsYXRl IGRlcml2ZWQgZmllbGRzIG5vdyB0aGF0IHRoZSByZWxhdGlvbiBpcyBvcGVuIGFuZCB2YWxpZGF0 ZWQuCisJICogVGhlIHJlbWFpbmluZyBkZXJpdmVkIGZpZWxkcyAobm5fZW50cmllcywgc2tpcF9u b3RudWxsX29pZHMsIGJ1ZiwKKwkgKiBzdGF0ZW1lbnRzKSBzdGFydCB6ZXJvZWQgdmlhIHRoZSBj YWxsZXIncyBgVGFibGVEZGxDb250ZXh0IGN0eCA9IHswfWAKKwkgKiBpbml0aWFsaXplcjsgdGhl IE5PVCBOVUxMIGNhY2hlIGlzIHBvcHVsYXRlZCBieSBjb2xsZWN0X2xvY2FsX25vdF9udWxsLAor CSAqIHRoZSBidWZmZXIgaXMgaW5pdFN0cmluZ0luZm8nZCwgYW5kIGVhY2ggZW1pdCBwYXNzIGFw cGVuZHMgdG8KKwkgKiBzdGF0ZW1lbnRzIHZpYSBsYXBwZW5kLgorCSAqLworCWN0eC0+cmVsID0g cmVsOworCWN0eC0+YmFzZV9uYW1lc3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOwor CWN0eC0+c2F2ZV9uZXN0bGV2ZWwgPSAtMTsKKwljdHgtPnF1YWxuYW1lID0gbG9va3VwX3JlbG5h bWVfZm9yX2VtaXQoY3R4LT5yZWxpZCwgY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJ CQljdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgb3ZlcnJpZGUg c2VhcmNoX3BhdGggc28gdGhhdCB0aGUgcnVsZXV0aWxzIGhlbHBlcnMKKwkgKiAocGdfZ2V0X2lu ZGV4ZGVmX2RkbCwgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keSwKKwkgKiBwZ19nZXRfc3RhdGlz dGljc29iamRlZl9kZGwsIHBnX2dldF9ydWxlZGVmX2RkbCwgZXRjLikgcHJvZHVjZSBuYW1lcwor CSAqIHRoYXQgbWF0Y2ggdGhlIHNjaGVtYV9xdWFsaWZpZWQgZmxhZy4gIFRob3NlIGhlbHBlcnMg ZGVjaWRlIHdoZXRoZXIgdG8KKwkgKiBxdWFsaWZ5IGEgbmFtZSBieSBjYWxsaW5nIFJlbGF0aW9u SXNWaXNpYmxlKCksIHdoaWNoIGNoZWNrcyB3aGV0aGVyIHRoZQorCSAqIG9iamVjdCdzIHNjaGVt YSBhcHBlYXJzIGluIHRoZSBhY3RpdmUgc2VhcmNoX3BhdGguCisJICoKKwkgKiBzY2hlbWFfcXVh bGlmaWVkID0gZmFsc2U6IG5hcnJvdyB0byB0aGUgYmFzZSBzY2hlbWEgc28gdGhhdCBzYW1lLXNj aGVtYQorCSAqIHJlZmVyZW5jZXMgaW4gREVGQVVMVCBleHByZXNzaW9ucywgRksgdGFyZ2V0cywg aW5kZXhlcywgcnVsZXMsIGFuZAorCSAqIHN0YXRpc3RpY3MgY29tZSBvdXQgdW5xdWFsaWZpZWQg YXV0b21hdGljYWxseS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisJICogc3RheSBxdWFsaWZp ZWQsIHdoaWNoIGlzIHRoZSBjb3JyZWN0bmVzcyByZXF1aXJlbWVudC4KKwkgKgorCSAqIHNjaGVt YV9xdWFsaWZpZWQgPSB0cnVlOiBuYXJyb3cgdG8gcGdfY2F0YWxvZyBvbmx5IHNvIHRoYXQgb2Jq ZWN0cyBpbgorCSAqIHRoZSBiYXNlIHNjaGVtYSAob3IgYW55IHVzZXIgc2NoZW1hIHRoZSBjYWxs ZXIgcGxhY2VkIG9uIHNlYXJjaF9wYXRoKQorCSAqIGFyZSBub3QgcmVhY2hhYmxlIHdpdGhvdXQg cXVhbGlmaWNhdGlvbiwgZm9yY2luZyBmdWxseS1xdWFsaWZpZWQgb3V0cHV0CisJICogZnJvbSBl dmVyeSBoZWxwZXIgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGVyJ3Mgc2Vzc2lvbiBzZWFyY2hfcGF0 aC4KKwkgKgorCSAqIEF0RU9YYWN0X0dVQyBjbGVhbnMgdXAgYXQgeGFjdCBlbmQgaWYgYW55dGhp bmcgdGhyb3dzIGJldHdlZW4gaGVyZSBhbmQKKwkgKiB0aGUgZXhwbGljaXQgcmVzdG9yZSBiZWxv dzsgb24gdGhlIG5vcm1hbCBwYXRoIHdlIHJlc3RvcmUgcmlnaHQgYmVmb3JlCisJICogcmV0dXJu aW5nLgorCSAqLworCWlmICghY3R4LT5zY2hlbWFfcXVhbGlmaWVkKQorCXsKKwkJY2hhcgkgICAq bnNwbmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCQlp ZiAobnNwbmFtZSAhPSBOVUxMKQorCQl7CisJCQljb25zdCBjaGFyICpxbnNwID0gcXVvdGVfaWRl bnRpZmllcihuc3BuYW1lKTsKKworCQkJY3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RM ZXZlbCgpOworCQkJKHZvaWQpIHNldF9jb25maWdfb3B0aW9uKCJzZWFyY2hfcGF0aCIsIHFuc3As CisJCQkJCQkJCQkgUEdDX1VTRVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCQkgR1VDX0FD VElPTl9TQVZFLCB0cnVlLCAwLCBmYWxzZSk7CisJCQlpZiAocW5zcCAhPSBuc3BuYW1lKQorCQkJ CXBmcmVlKChjaGFyICopIHFuc3ApOworCQkJcGZyZWUobnNwbmFtZSk7CisJCX0KKwl9CisJZWxz ZQorCXsKKwkJY3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQkodm9p ZCkgc2V0X2NvbmZpZ19vcHRpb24oInNlYXJjaF9wYXRoIiwgInBnX2NhdGFsb2ciLAorCQkJCQkJ CQkgUEdDX1VTRVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCSBHVUNfQUNUSU9OX1NBVkUs IHRydWUsIDAsIGZhbHNlKTsKKwl9CisKKwkvKgorCSAqIENhY2hlIGxvY2FsbHktZGVjbGFyZWQg Tk9UIE5VTEwgY29uc3RyYWludCBtZXRhZGF0YSBzbyB0aGUgY29sdW1uLSBlbWl0CisJICogaGVs cGVycyBjYW4gcHJvZHVjZSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbmxpbmUgZm9yIHVz ZXItbmFtZWQKKwkgKiBjb25zdHJhaW50cywgYW5kIHNvIHRoZSBjb25zdHJhaW50IGxvb3AgY2Fu IGF2b2lkIGRvdWJsZS1lbWl0dGluZyB0aGVtLgorCSAqLworCWN0eC0+bm5fZW50cmllcyA9IGNv bGxlY3RfbG9jYWxfbm90X251bGwocmVsLCAmY3R4LT5za2lwX25vdG51bGxfb2lkcyk7CisKKwlp bml0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCisJLyoKKwkgKiBFbWlzc2lvbiBwYXNzZXMuICBP cmRlciBpcyBzaWduaWZpY2FudDogQ1JFQVRFIFRBQkxFIGZpcnN0OyBPV05FUiBhbmQKKwkgKiB0 aGUgcGVyLWNvbHVtbiBBTFRFUiBDT0xVTU4gcGFzc2VzIGJlZm9yZSBzdWItb2JqZWN0IGVtaXNz aW9uOworCSAqIHN1Yi1vYmplY3RzIGluIGRlcGVuZGVuY3ktZnJpZW5kbHkgb3JkZXIgKGluZGV4 ZXMgYmVmb3JlIGNvbnN0cmFpbnRzLAorCSAqIHNpbmNlIGNvbnN0cmFpbnQtYmFja2VkIGluZGV4 ZXMgYXJlIGVtaXR0ZWQgb3V0LW9mLWxpbmUgYnkgdGhlCisJICogY29uc3RyYWludCBsb29wKTsg cGFydGl0aW9uIGNoaWxkcmVuIGxhc3Qgc28gdGhlIHBhcmVudCBhbHJlYWR5IGV4aXN0cworCSAq IGF0IHJlcGxheSB0aW1lLiAgRWFjaCBoZWxwZXIgZ2F0ZXMgaXRzZWxmIG9uIGlzX2tpbmRfaW5j bHVkZWQgZm9yIHRoZQorCSAqIHJlbGV2YW50IFRBQkxFX0RETF9LSU5EXyo7IHRoZSBmb3VyICJ0 YWJsZSBpdHNlbGYiIHBhc3NlcyBhcmUgZ3JvdXBlZAorCSAqIGhlcmUgdW5kZXIgS0lORF9UQUJM RSBzbyBhbGwgb2YgQ1JFQVRFIFRBQkxFIC8gT1dORVIgLyBTRVQgREVGQVVMVCAvCisJICogU0VU ICguLi4pIGRyb3Agb3V0IHRvZ2V0aGVyIHdoZW4gdGhlIHVzZXIgYXNrcyBmb3Igb25seSBzdWIt b2JqZWN0cworCSAqIChlLmcuIG9ubHkgPT4gJ2ZvcmVpZ25fa2V5JyBmb3IgdGhlIHNlY29uZCBw YXNzIG9mIGEgdHdvLXBhc3MgRksKKwkgKiBjbG9uZSkuCisJICovCisJaWYgKGlzX2tpbmRfaW5j bHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9UQUJMRSkpCisJeworCQllbWl0X2NyZWF0ZV90YWJs ZV9zdG10KGN0eCk7CisJCWVtaXRfb3duZXJfc3RtdChjdHgpOworCQllbWl0X2NoaWxkX2RlZmF1 bHRfb3ZlcnJpZGVzKGN0eCk7CisJCWVtaXRfYXR0b3B0aW9ucyhjdHgpOworCX0KKwllbWl0X2lu ZGV4ZXMoY3R4KTsKKwllbWl0X2xvY2FsX2NvbnN0cmFpbnRzKGN0eCk7CisJZW1pdF9ydWxlcyhj dHgpOworCWVtaXRfc3RhdGlzdGljcyhjdHgpOworCWVtaXRfcmVwbGljYV9pZGVudGl0eShjdHgp OworCWVtaXRfcmxzX3RvZ2dsZXMoY3R4KTsKKworCS8qCisJICogVHJpZ2dlcnMgYW5kIHJvdy1s ZXZlbCBzZWN1cml0eSBwb2xpY2llcyAtIGRpc2FibGVkIHVudGlsIHRoZQorCSAqIHN0YW5kYWxv bmUgcGdfZ2V0X3RyaWdnZXJfZGRsKCkgYW5kIHBnX2dldF9wb2xpY3lfZGRsKCkgaGVscGVycyBs YW5kLgorCSAqIFRoZSBzY2FuICsgbG9jayArIGZpbHRlciBzY2FmZm9sZGluZyBiZWxvdyBpcyBw cmVzZXJ2ZWQgKGluc2lkZSAjaWYgMCkKKwkgKiBzbyB3aXJpbmcgdXAgZWFjaCBlbWlzc2lvbiBi ZWNvbWVzIGEgb25lLWxpbmVyIGluIHRoZSBsb29wIGJvZHkgb25jZQorCSAqIHRob3NlIGhlbHBl cnMgYXJlIGF2YWlsYWJsZS4KKwkgKi8KKyNpZiAwCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4 LCBUQUJMRV9ERExfS0lORF9UUklHR0VSKSkKKwl7CisJCVJlbGF0aW9uCXRyaWdSZWw7CisJCVN5 c1NjYW5EZXNjIHRyaWdTY2FuOworCQlTY2FuS2V5RGF0YSB0cmlnS2V5OworCQlIZWFwVHVwbGUJ dHJpZ1R1cDsKKworCQl0cmlnUmVsID0gdGFibGVfb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJU2NhbktleUluaXQoJnRyaWdLZXksCisJCQkJCUFudW1fcGdfdHJp Z2dlcl90Z3JlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJ CU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOworCQl0cmlnU2NhbiA9IHN5c3RhYmxlX2Jl Z2luc2Nhbih0cmlnUmVsLCBUcmlnZ2VyUmVsaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJCSAgdHJ1 ZSwgTlVMTCwgMSwgJnRyaWdLZXkpOworCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0cmlnVHVw ID0gc3lzdGFibGVfZ2V0bmV4dCh0cmlnU2NhbikpKQorCQl7CisJCQlGb3JtX3BnX3RyaWdnZXIg dHJnID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQlpZiAodHJn LT50Z2lzaW50ZXJuYWwpCisJCQkJY29udGludWU7CisKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19n ZXRfdHJpZ2dlcl9kZGwodHJnLT5vaWQpIG91dHB1dCBoZXJlLiAqLworCQl9CisJCXN5c3RhYmxl X2VuZHNjYW4odHJpZ1NjYW4pOworCQl0YWJsZV9jbG9zZSh0cmlnUmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCX0KKworCWlmIChpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUE9M SUNZKSkKKwl7CisJCVJlbGF0aW9uCXBvbFJlbDsKKwkJU3lzU2NhbkRlc2MgcG9sU2NhbjsKKwkJ U2NhbktleURhdGEgcG9sS2V5OworCQlIZWFwVHVwbGUJcG9sVHVwOworCisJCXBvbFJlbCA9IHRh YmxlX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJU2NhbktleUlu aXQoJnBvbEtleSwKKwkJCQkJQW51bV9wZ19wb2xpY3lfcG9scmVsaWQsCisJCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlk KSk7CisJCXBvbFNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocG9sUmVsLCBQb2xpY3lQb2xyZWxp ZFBvbG5hbWVJbmRleElkLAorCQkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZwb2xLZXkpOworCQl3 aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChwb2xUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHBvbFNjYW4p KSkKKwkJeworCQkJLyogVE9ETzogYXBwZW5kIHBnX2dldF9wb2xpY3lfZGRsKHJlbGlkLCBwb2xu YW1lKSBvdXRwdXQgaGVyZS4gKi8KKwkJfQorCQlzeXN0YWJsZV9lbmRzY2FuKHBvbFNjYW4pOwor CQl0YWJsZV9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorI2VuZGlmCisKKwll bWl0X3BhcnRpdGlvbl9jaGlsZHJlbihjdHgpOworCisJeworCQlpbnQJCQluYXR0cyA9IFJlbGF0 aW9uR2V0RGVzY3IocmVsKS0+bmF0dHM7CisKKwkJZm9yIChpbnQgaSA9IDE7IGkgPD0gbmF0dHM7 IGkrKykKKwkJCWlmIChjdHgtPm5uX2VudHJpZXNbaV0ubmFtZSAhPSBOVUxMKQorCQkJCXBmcmVl KGN0eC0+bm5fZW50cmllc1tpXS5uYW1lKTsKKwl9CisJcGZyZWUoY3R4LT5ubl9lbnRyaWVzKTsK KworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlwZnJlZShjdHgtPmJ1Zi5k YXRhKTsKKwlwZnJlZShjdHgtPnF1YWxuYW1lKTsKKwlsaXN0X2ZyZWUoY3R4LT5za2lwX25vdG51 bGxfb2lkcyk7CisKKwkvKgorCSAqIFBvcCB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggbm93IHRo YXQgYWxsIGhlbHBlcnMgaGF2ZSBydW4uICBFcnJvcnMKKwkgKiB0aHJvd24gZWFybGllciBhcmUg Y2xlYW5lZCB1cCBieSBBdEVPWGFjdF9HVUMgYXQgeGFjdCBlbmQuCisJICovCisJaWYgKGN0eC0+ c2F2ZV9uZXN0bGV2ZWwgPj0gMCkKKwkJQXRFT1hhY3RfR1VDKHRydWUsIGN0eC0+c2F2ZV9uZXN0 bGV2ZWwpOworCisJcmV0dXJuIGN0eC0+c3RhdGVtZW50czsKK30KKworLyoKKyAqIHBnX2dldF90 YWJsZV9kZGwKKyAqCQlSZXR1cm4gRERMIHRvIHJlY3JlYXRlIGEgdGFibGUgYXMgYSBzZXQgb2Yg dGV4dCByb3dzLgorICovCitEYXR1bQorcGdfZ2V0X3RhYmxlX2RkbChQR19GVU5DVElPTl9BUkdT KQoreworCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKKwlMaXN0CSAgICpzdGF0ZW1lbnRzOwor CisJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKKwkJVGFibGVEZGxDb250ZXh0IGN0eCA9IHswfTsKKworCQlmdW5jY3R4ID0gU1JGX0ZJUlNU Q0FMTF9JTklUKCk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0 eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQl7 CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCQlTUkZfUkVUVVJOX0RP TkUoZnVuY2N0eCk7CisJCX0KKworCQlpZiAoIVBHX0FSR0lTTlVMTCg1KSAmJiAhUEdfQVJHSVNO VUxMKDYpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIlwib25seV9raW5kc1wiIGFuZCBcImV4 Y2VwdF9raW5kc1wiIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpKSk7CisKKwkJ LyogT3B0aW9uIGRlZmF1bHRzIChtYXRjaCBwcm9hcmdkZWZhdWx0cyBpbiBwZ19wcm9jLmRhdCku ICovCisJCWN0eC5yZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJCWN0eC5wcmV0dHkgPSBmYWxz ZTsKKwkJY3R4Lm5vX293bmVyID0gZmFsc2U7CQkvKiBvd25lciBERUZBVUxUIHRydWUgIC0+IG5v X293bmVyID0gZmFsc2UgKi8KKwkJY3R4Lm5vX3RhYmxlc3BhY2UgPSBmYWxzZTsJLyogdGFibGVz cGFjZSBERUZBVUxUIHRydWUgLT4gbm9fdGFibGVzcGFjZSA9IGZhbHNlICovCisJCWN0eC5zY2hl bWFfcXVhbGlmaWVkID0gdHJ1ZTsKKwkJY3R4Lm9ubHlfa2luZHMgPSBOVUxMOworCQljdHguZXhj ZXB0X2tpbmRzID0gTlVMTDsKKworCQkvKiBPdmVycmlkZSBkZWZhdWx0cyB3aXRoIGFueSBleHBs aWNpdGx5IHN1cHBsaWVkIHZhbHVlcy4gKi8KKwkJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCQlj dHgucHJldHR5ID0gUEdfR0VUQVJHX0JPT0woMSk7CisJCWlmICghUEdfQVJHSVNOVUxMKDIpKQor CQkJY3R4Lm5vX293bmVyID0gIVBHX0dFVEFSR19CT09MKDIpOworCQlpZiAoIVBHX0FSR0lTTlVM TCgzKSkKKwkJCWN0eC5ub190YWJsZXNwYWNlID0gIVBHX0dFVEFSR19CT09MKDMpOworCQlpZiAo IVBHX0FSR0lTTlVMTCg0KSkKKwkJCWN0eC5zY2hlbWFfcXVhbGlmaWVkID0gUEdfR0VUQVJHX0JP T0woNCk7CisJCWlmICghUEdfQVJHSVNOVUxMKDUpKQorCQkJY3R4Lm9ubHlfa2luZHMgPSBwYXJz ZV9raW5kX2FycmF5KCJvbmx5X2tpbmRzIiwKKwkJCQkJCQkJCQkJICBQR19HRVRBUkdfQVJSQVlU WVBFX1AoNSkpOworCQlpZiAoIVBHX0FSR0lTTlVMTCg2KSkKKwkJCWN0eC5leGNlcHRfa2luZHMg PSBwYXJzZV9raW5kX2FycmF5KCJleGNlcHRfa2luZHMiLAorCQkJCQkJCQkJCQkJUEdfR0VUQVJH X0FSUkFZVFlQRV9QKDYpKTsKKworCQlzdGF0ZW1lbnRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRl cm5hbCgmY3R4KTsKKwkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKKwkJZnVuY2N0 eC0+bWF4X2NhbGxzID0gbGlzdF9sZW5ndGgoc3RhdGVtZW50cyk7CisKKwkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRV UCgpOworCXN0YXRlbWVudHMgPSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAo ZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+bWF4X2NhbGxzKQorCXsKKwkJY2hhcgkgICAq c3RtdDsKKworCQlzdG10ID0gbGlzdF9udGgoc3RhdGVtZW50cywgZnVuY2N0eC0+Y2FsbF9jbnRy KTsKKworCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgQ1N0cmluZ0dldFRleHREYXR1bShzdG10 KSk7CisJfQorCWVsc2UKKwl7CisJCWxpc3RfZnJlZV9kZWVwKHN0YXRlbWVudHMpOworCQlTUkZf UkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmlu ZGV4IDg4ZGU1YzA0ODFjLi43MTg2Y2Y4M2UxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNp bmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNp bmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYWdncmVn YXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf YXV0aGlkLmgiCkBAIC0zNzAsNyArMzcxLDcgQEAgc3RhdGljIHZvaWQgbWFrZV9wcm9wZ3JhcGhk ZWZfZWxlbWVudHMoU3RyaW5nSW5mbyBidWYsIE9pZCBwZ3JlbGlkLCBjaGFyIHBnZWtpbmQKIHN0 YXRpYyB2b2lkIG1ha2VfcHJvcGdyYXBoZGVmX2xhYmVscyhTdHJpbmdJbmZvIGJ1ZiwgT2lkIGVs aWQsIGNvbnN0IGNoYXIgKmVsYWxpYXMsIE9pZCBlbHJlbGlkKTsKIHN0YXRpYyB2b2lkIG1ha2Vf cHJvcGdyYXBoZGVmX3Byb3BlcnRpZXMoU3RyaW5nSW5mbyBidWYsIE9pZCBlbGxhYmVsaWQsIE9p ZCBlbHJlbGlkKTsKIHN0YXRpYyBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lk IHN0YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHksCi0JCQkJCQkJCQkJIGJvb2wgbWlzc2luZ19v ayk7CisJCQkJCQkJCQkJIGJvb2wgbWlzc2luZ19vaywgaW50IHByZXR0eUZsYWdzKTsKIHN0YXRp YyBjaGFyICpwZ19nZXRfcGFydGtleWRlZl93b3JrZXIoT2lkIHJlbGlkLCBpbnQgcHJldHR5Rmxh Z3MsCiAJCQkJCQkJCQkgIGJvb2wgYXR0cnNPbmx5LCBib29sIG1pc3Npbmdfb2spOwogc3RhdGlj IGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihPaWQgY29uc3RyYWludElkLCBib29s IGZ1bGxDb21tYW5kLApAQCAtNjAzLDYgKzYwNCwxOSBAQCBwZ19nZXRfcnVsZWRlZl9leHQoUEdf RlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOwog fQogCisvKgorICogcGdfZ2V0X3J1bGVkZWZfZGRsCisgKgkJTGlrZSBwZ19nZXRfcnVsZWRlZiBi dXQgdXNlcyB0aGUgYWN0aXZlIHNlYXJjaF9wYXRoIHRvIGRlY2lkZQorICoJCXdoZXRoZXIgdG8g c2NoZW1hLXF1YWxpZnkgdGhlIHJ1bGUncyB0YXJnZXQgcmVsYXRpb24gbmFtZS4KKyAqCQlGb3Ig dXNlIGJ5IHBnX2dldF90YWJsZV9kZGwgd2hpY2ggaGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRo CisgKgkJdG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4gc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAq LworY2hhciAqCitwZ19nZXRfcnVsZWRlZl9kZGwoT2lkIHJ1bGVvaWQpCit7CisJcmV0dXJuIHBn X2dldF9ydWxlZGVmX3dvcmtlcihydWxlb2lkLCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRUWUZM QUdfU0NIRU1BKTsKK30KKwogCiBzdGF0aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93b3JrZXIo T2lkIHJ1bGVvaWQsIGludCBwcmV0dHlGbGFncykKQEAgLTEyNDEsNiArMTI1NSwyMiBAQCBwZ19n ZXRfaW5kZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJlbGlkKQogCQkJCQkJCQkgIDAsIGZhbHNlKTsK IH0KIAorLyoKKyAqIHBnX2dldF9pbmRleGRlZl9kZGwKKyAqCQlMaWtlIHBnX2dldF9pbmRleGRl Zl9zdHJpbmcgYnV0IHVzZXMgdGhlIGFjdGl2ZSBzZWFyY2hfcGF0aCB0bworICoJCWRlY2lkZSB3 aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHRoZSBpbmRleGVkIHJlbGF0aW9uIG5hbWUuCisgKgkJ Rm9yIHVzZSBieSBwZ19nZXRfdGFibGVfZGRsIHdoaWNoIGhhcyBhbHJlYWR5IHNldCBzZWFyY2hf cGF0aAorICoJCXRvIHRoZSBiYXNlIHNjaGVtYSB3aGVuIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Uu CisgKi8KK2NoYXIgKgorcGdfZ2V0X2luZGV4ZGVmX2RkbChPaWQgaW5kZXhyZWxpZCkKK3sKKwly ZXR1cm4gcGdfZ2V0X2luZGV4ZGVmX3dvcmtlcihpbmRleHJlbGlkLCAwLCBOVUxMLAorCQkJCQkJ CQkgIGZhbHNlLCBmYWxzZSwKKwkJCQkJCQkJICB0cnVlLCB0cnVlLAorCQkJCQkJCQkgIFBSRVRU WUZMQUdfU0NIRU1BLCBmYWxzZSk7Cit9CisKIC8qIEludGVybmFsIHZlcnNpb24gdGhhdCBqdXN0 IHJlcG9ydHMgdGhlIGtleS1jb2x1bW4gZGVmaW5pdGlvbnMgKi8KIGNoYXIgKgogcGdfZ2V0X2lu ZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KQpAQCAtMTk2OSw3ICsx OTk5LDcgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWYoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJ CQlzdGF0ZXh0aWQgPSBQR19HRVRBUkdfT0lEKDApOwogCWNoYXIJICAgKnJlczsKIAotCXJlcyA9 IHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCB0cnVlKTsKKwly ZXMgPSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxzZSwgdHJ1ZSwg MCk7CiAKIAlpZiAocmVzID09IE5VTEwpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CkBAIC0xOTg0LDcg KzIwMTQsMjAgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWYoUEdfRlVOQ1RJT05fQVJHUykKIGNo YXIgKgogcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpCiB7Ci0J cmV0dXJuIHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCBmYWxz ZSk7CisJcmV0dXJuIHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNl LCBmYWxzZSwgMCk7Cit9CisKKy8qCisgKiBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwKKyAq CQlMaWtlIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyBidXQgdXNlcyB0aGUgYWN0aXZl IHNlYXJjaF9wYXRoCisgKgkJdG8gZGVjaWRlIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdGhl IHN0YXRpc3RpY3Mgb2JqZWN0IG5hbWUuCisgKgkJRm9yIHVzZSBieSBwZ19nZXRfdGFibGVfZGRs IHdoaWNoIGhhcyBhbHJlYWR5IHNldCBzZWFyY2hfcGF0aAorICoJCXRvIHRoZSBiYXNlIHNjaGVt YSB3aGVuIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3N0YXRp c3RpY3NvYmpkZWZfZGRsKE9pZCBzdGF0ZXh0aWQpCit7CisJcmV0dXJuIHBnX2dldF9zdGF0aXN0 aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCBmYWxzZSwgUFJFVFRZRkxBR19TQ0hFTUEp OwogfQogCiAvKgpAQCAtMTk5Nyw3ICsyMDQwLDcgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZf Y29sdW1ucyhQR19GVU5DVElPTl9BUkdTKQogCU9pZAkJCXN0YXRleHRpZCA9IFBHX0dFVEFSR19P SUQoMCk7CiAJY2hhcgkgICAqcmVzOwogCi0JcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29y a2VyKHN0YXRleHRpZCwgdHJ1ZSwgdHJ1ZSk7CisJcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpf d29ya2VyKHN0YXRleHRpZCwgdHJ1ZSwgdHJ1ZSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpCiAJ CVBHX1JFVFVSTl9OVUxMKCk7CkBAIC0yMDA5LDcgKzIwNTIsOCBAQCBwZ19nZXRfc3RhdGlzdGlj c29iamRlZl9jb2x1bW5zKFBHX0ZVTkNUSU9OX0FSR1MpCiAgKiBJbnRlcm5hbCB3b3JraG9yc2Ug dG8gZGVjb21waWxlIGFuIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0LgogICovCiBzdGF0aWMg Y2hhciAqCi1wZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lkIHN0YXRleHRpZCwgYm9vbCBj b2x1bW5zX29ubHksIGJvb2wgbWlzc2luZ19vaykKK3BnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtl cihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNfb25seSwgYm9vbCBtaXNzaW5nX29rLAorCQkJ CQkJCWludCBwcmV0dHlGbGFncykKIHsKIAlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGV4dHJl YzsKIAlIZWFwVHVwbGUJc3RhdGV4dHR1cDsKQEAgLTIwNjksMTAgKzIxMTMsMTggQEAgcGdfZ2V0 X3N0YXRpc3RpY3NvYmpfd29ya2VyKE9pZCBzdGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LCBi b29sIG1pc3Npbmdfb2spCiAKIAlpZiAoIWNvbHVtbnNfb25seSkKIAl7Ci0JCW5zcCA9IGdldF9u YW1lc3BhY2VfbmFtZV9vcl90ZW1wKHN0YXRleHRyZWMtPnN0eG5hbWVzcGFjZSk7Ci0JCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBTVEFUSVNUSUNTICVzIiwKLQkJCQkJCSBxdW90ZV9x dWFsaWZpZWRfaWRlbnRpZmllcihuc3AsCi0JCQkJCQkJCQkJCQkJTmFtZVN0cihzdGF0ZXh0cmVj LT5zdHhuYW1lKSkpOworCQlpZiAoKHByZXR0eUZsYWdzICYgUFJFVFRZRkxBR19TQ0hFTUEpICYm CisJCQlTdGF0aXN0aWNzT2JqSXNWaXNpYmxlKHN0YXRleHRpZCkpCisJCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICJDUkVBVEUgU1RBVElTVElDUyAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZp ZXIoTmFtZVN0cihzdGF0ZXh0cmVjLT5zdHhuYW1lKSkpOworCQllbHNlCisJCXsKKwkJCW5zcCA9 IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKHN0YXRleHRyZWMtPnN0eG5hbWVzcGFjZSk7CisJ CQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJDUkVBVEUgU1RBVElTVElDUyAlcyIsCisJCQkJCQkJ IHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKG5zcCwKKwkJCQkJCQkJCQkJCQkJTmFtZVN0cihz dGF0ZXh0cmVjLT5zdHhuYW1lKSkpOworCQkJcGZyZWUobnNwKTsKKwkJfQogCiAJCS8qCiAJCSAq IERlY29kZSB0aGUgc3R4a2luZCBjb2x1bW4gc28gdGhhdCB3ZSBrbm93IHdoaWNoIHN0YXRzIHR5 cGVzIHRvCkBAIC0yMTYzLDEwICsyMjE1LDkgQEAgcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2Vy KE9pZCBzdGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LCBib29sIG1pc3Npbmdfb2spCiAJewog CQlOb2RlCSAgICpleHByID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKIAkJY2hhcgkgICAqc3RyOwot CQlpbnQJCQlwcmV0dHlGbGFncyA9IFBSRVRUWUZMQUdfUEFSRU47CiAKIAkJc3RyID0gZGVwYXJz ZV9leHByZXNzaW9uX3ByZXR0eShleHByLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UsCi0JCQkJCQkJ CQkJcHJldHR5RmxhZ3MsIDApOworCQkJCQkJCQkJCVBSRVRUWUZMQUdfUEFSRU4sIDApOwogCiAJ CWlmIChjb2xubyA+IDApCiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIsICIpOwpA QCAtMjU0NCw2ICsyNTk1LDIwIEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNv bnN0cmFpbnRJZCkKIAlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFp bnRJZCwgdHJ1ZSwgMCwgZmFsc2UpOwogfQogCisvKgorICogcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Ym9keQorICoJCVJldHVybnMgdGhlIGNvbnN0cmFpbnQgZGVmaW5pdGlvbiBib2R5IHdpdGhvdXQg dGhlCisgKgkJIkFMVEVSIFRBQkxFIG5hbWUgQUREIENPTlNUUkFJTlQgY25hbWUiIHByZWZpeC4K KyAqCQlGSyB0YXJnZXQgcmVsYXRpb24gbmFtZXMgaW4gdGhlIGJvZHkgYWxyZWFkeSB1c2UKKyAq CQlnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lIChzZWFyY2hfcGF0aC1hd2FyZSkuICBGb3IgdXNlIGJ5 CisgKgkJcGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBidWlsZHMgdGhlIEFMVEVSIFRBQkxFIHByZWZp eCBpdHNlbGYuCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keShPaWQgY29u c3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3Ry YWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAvKgogICogQXMgb2YgOS40LCB3ZSBub3cg dXNlIGFuIE1WQ0Mgc25hcHNob3QgZm9yIHRoaXMuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJp dHMuaAppbmRleCBjYzg3NGFiYWFiYi4uMWU0NjNiMDEwNmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2lu aGVyaXRzLmgKQEAgLTU1LDYgKzU1LDcgQEAgREVDTEFSRV9JTkRFWChwZ19pbmhlcml0c19wYXJl bnRfaW5kZXgsIDIxODcsIEluaGVyaXRzUGFyZW50SW5kZXhJZCwgcGdfaW5oZXJpdHMKIGV4dGVy biBMaXN0ICpmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01P REUgbG9ja21vZGUpOwogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0 ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQsCiAJCQkJCQkJCQkJCQlM T0NLTU9ERSBsb2NrbW9kZSwgYm9vbCAqZGV0YWNoZWRfZXhpc3QsIFRyYW5zYWN0aW9uSWQgKmRl dGFjaGVkX3htaW4pOworZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhPaWQg cmVsaWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIAogZXh0ZXJuIExpc3QgKmZpbmRfYWxsX2luaGVy aXRvcnMoT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCQkJCQkJIExpc3Qg KipudW1wYXJlbnRzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDNjYjg0MzU5YWRmLi5k ODZhZjU2YmE3OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAor KysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04NjM0LDYgKzg2MzQsMTQg QEAKICAgcHJvYXJndHlwZXMgPT4gJ3JlZ2RhdGFiYXNlIGJvb2wgYm9vbCBib29sJywKICAgcHJv YXJnbmFtZXMgPT4gJ3tkYXRhYmFzZSxwcmV0dHksb3duZXIsdGFibGVzcGFjZX0nLAogICBwcm9h cmdkZWZhdWx0cyA9PiAne2ZhbHNlLHRydWUsdHJ1ZX0nLCBwcm9zcmMgPT4gJ3BnX2dldF9kYXRh YmFzZV9kZGwnIH0sCit7IG9pZCA9PiAnODIxNScsIGRlc2NyID0+ICdnZXQgRERMIHRvIHJlY3Jl YXRlIGEgdGFibGUnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfdGFibGVfZGRsJywgcHJvcm93cyA9 PiAnNTAnLAorICBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHNldCA9PiAndCcsIHByb3ZvbGF0 aWxlID0+ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAorICBwcm9uYXJnZGVmYXVsdHMgPT4gJzYn LCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIGJvb2wg Ym9vbCBib29sIGJvb2wgX3RleHQgX3RleHQnLAorICBwcm9hcmduYW1lcyA9PiAne3JlbGF0aW9u LHByZXR0eSxvd25lcix0YWJsZXNwYWNlLHNjaGVtYV9xdWFsaWZpZWQsb25seV9raW5kcyxleGNl cHRfa2luZHN9JywKKyAgcHJvYXJnZGVmYXVsdHMgPT4gJ3tmYWxzZSx0cnVlLHRydWUsdHJ1ZSxO VUxMLE5VTEx9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfdGFibGVfZGRsJyB9LAogeyBvaWQgPT4g JzI1MDknLAogICBkZXNjciA9PiAnZGVwYXJzZSBhbiBlbmNvZGVkIGV4cHJlc3Npb24gd2l0aCBw cmV0dHktcHJpbnQgb3B0aW9uJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2V4cHInLCBwcm92b2xh dGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ3RleHQnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMu aAppbmRleCBjM2Q4NTE4Y2I2Mi4uZDMzNTYzZmRlYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3RhYmxlY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21k cy5oCkBAIC05Miw2ICs5Miw3IEBAIGV4dGVybiB2b2lkIGNoZWNrX29mX3R5cGUoSGVhcFR1cGxl IHR5cGV0dXBsZSk7CiAKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX29uX2NvbW1pdF9hY3Rpb24oT2lk IHJlbGlkLCBPbkNvbW1pdEFjdGlvbiBhY3Rpb24pOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX29uX2Nv bW1pdF9hY3Rpb24oT2lkIHJlbGlkKTsKK2V4dGVybiBPbkNvbW1pdEFjdGlvbiBnZXRfb25fY29t bWl0X2FjdGlvbihPaWQgcmVsaWQpOwogCiBleHRlcm4gdm9pZCBQcmVDb21taXRfb25fY29tbWl0 X2FjdGlvbnModm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9vbl9jb21taXRfYWN0aW9ucyhi b29sIGlzQ29tbWl0KTsKQEAgLTEwOCw0ICsxMDksNiBAQCBleHRlcm4gdm9pZCBSYW5nZVZhckNh bGxiYWNrT3duc1JlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWxhdGlvbiwKIGV4dGVybiBib29s IFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLAog CQkJCQkJCQkJCQkJIExpc3QgKnBhcnRDb25zdHJhaW50KTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIg KnN0b3JhZ2VfbmFtZShjaGFyIGMpOworCiAjZW5kaWYJCQkJCQkJLyogVEFCTEVDTURTX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvcnVsZXV0aWxzLmgKaW5kZXggMjVjMDVlMmY2NDkuLmMzYjNkYzY1YzkzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3Rt dCBQbGFubmVkU3RtdDsKICNkZWZpbmUgUlVMRV9JTkRFWERFRl9LRVlTX09OTFkJCTB4MDIJLyog aWdub3JlIGluY2x1ZGVkIGF0dHJpYnV0ZXMgKi8KIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRl eGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRl Zl9kZGwoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1 bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2lu ZGV4ZGVmX2NvbHVtbnNfZXh0ZW5kZWQoT2lkIGluZGV4cmVsaWQsCiAJCQkJCQkJCQkJCSAgdWlu dDE2IGZsYWdzKTsKQEAgLTM0LDYgKzM1LDcgQEAgZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5 ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0 X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsK IAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFp bnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keShPaWQgY29uc3Ry YWludElkKTsKIGV4dGVybiBjaGFyICpkZXBhcnNlX2V4cHJlc3Npb24oTm9kZSAqZXhwciwgTGlz dCAqZHBjb250ZXh0LAogCQkJCQkJCQlib29sIGZvcmNlcHJlZml4LCBib29sIHNob3dpbXBsaWNp dCk7CiBleHRlcm4gTGlzdCAqZGVwYXJzZV9jb250ZXh0X2Zvcihjb25zdCBjaGFyICphbGlhc25h bWUsIE9pZCByZWxpZCk7CkBAIC01NCw1ICs1Niw3IEBAIGV4dGVybiBjaGFyICpnZXRfcmFuZ2Vf cGFydGJvdW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpOwogZXh0ZXJuIHZvaWQgZ2V0X3Jl bG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwogCiBleHRlcm4gY2hh ciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJu IGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbChPaWQgc3RhdGV4dGlkKTsKK2V4dGVy biBjaGFyICpwZ19nZXRfcnVsZWRlZl9kZGwoT2lkIHJ1bGVvaWQpOwogCiAjZW5kaWYJCQkJCQkJ LyogUlVMRVVUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cGdfZ2V0X3RhYmxlX2RkbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BnX2dldF90 YWJsZV9kZGwub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYjI4 NDkxYjk1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdf Z2V0X3RhYmxlX2RkbC5vdXQKQEAgLTAsMCArMSwxNTE4IEBACistLQorLS0gcGdfZ2V0X3RhYmxl X2RkbAorLS0KKy0tIEFsbCB0ZXN0cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUgQUxURVIgVEFC TEUgT1dORVIgVE8gbGluZSBpcyBub3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0cHV0IHN0YWJs ZSBhY3Jvc3MgdGVzdCBydW5uZXJzICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBkaWZmZXJlbnQg cm9sZSBuYW1lcykuCistLQorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKK1NFVCBzZWFy Y2hfcGF0aCA9IHBndGJsX2RkbF90ZXN0OworLS0gQmFzaWMgdGFibGUgd2l0aCBQUklNQVJZIEtF WSwgTk9UIE5VTEwsIERFRkFVTFQsIENPTExBVEUuCitDUkVBVEUgVEFCTEUgYmFzaWMgKAorICAg IGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQgTk9UIE5VTEwgREVGQVVMVCAnYW5v bicgQ09MTEFURSAiQyIKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmJhc2ljIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVM VCAnYW5vbic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJh c2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3Mp CisKKy0tIElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3VzdG9tIHNlcXVlbmNl IG9wdGlvbnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fsd2F5cyBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGludCBHRU5FUkFURUQg QlkgREVGQVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnaWRfY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRfY29scyAo aWRfYWx3YXlzIGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSBOT1QgTlVMTCwg aWRfZGVmYXVsdCBpbnRlZ2VyIEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZIE5PVCBO VUxMKTsKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAoCisgICAgdiBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSAoCisgICAgICAgIFNFUVVFTkNFIE5BTUUgaWRfY3Vz dG9tX3Zfc2VxCisgICAgICAgIFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1CisgICAgICAg IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAKKyAgICAgICAgQ0FDSEUgMTAgQ1lDTEUKKyAgICAp CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZF9jdXN0b20gKHYgaW50ZWdl ciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQg QlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwIENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7 CisoMSByb3cpCisKKy0tIEdlbmVyYXRlZCBzdG9yZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdl bl9jb2xzICgKKyAgICBjZW50cyBpbnQsCisgICAgZG9sbGFycyBudW1lcmljIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGNlbnRzIC8gMTAwLjApIFNUT1JFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnZ2VuX2NvbHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmdl bl9jb2xzIChjZW50cyBpbnRlZ2VyLCBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBB UyAoKChjZW50cyk6Om51bWVyaWMgLyAxMDAuMCkpIFNUT1JFRCk7CisoMSByb3cpCisKKy0tIEdl bmVyYXRlZCB2aXJ0dWFsIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fdmlydHVhbCAoCisgICAg YmFzZSBpbnQsCisgICAgZGVyaXZlZCBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYmFzZSAqIDIp IFZJUlRVQUwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl92aXJ0dWFs Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuZ2VuX3ZpcnR1YWwgKGJhc2UgaW50ZWdlciwgZGVyaXZlZCBpbnRlZ2VyIEdFTkVS QVRFRCBBTFdBWVMgQVMgKChiYXNlICogMikpIFZJUlRVQUwpOworKDEgcm93KQorCistLSBTVE9S QUdFIGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdoZW4gbm9uLWRlZmF1bHQgZm9yIHRo ZSB0eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMgKAorICAgIGEgdGV4dCBTVE9SQUdF IEVYVEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0ZXh0IENPTVBSRVNT SU9OIHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0b3JhZ2VfY29s cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnN0b3JhZ2VfY29scyAoYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsIGIgdGV4dCBT VE9SQUdFIE1BSU4sIGMgdGV4dCBDT01QUkVTU0lPTiBwZ2x6KTsKKygxIHJvdykKKworLS0gQ29u c3RyYWludHM6IENIRUNLLCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZFUlJBQkxFKS4KK0NSRUFU RSBUQUJMRSByZWZkIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGNvbnMgKAor ICAgIGEgaW50IENIRUNLIChhID4gMCksCisgICAgYiBpbnQgVU5JUVVFLAorICAgIGMgaW50IFJF RkVSRU5DRVMgcmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQKKyk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIg aW50ZWdlciwgYyBpbnRlZ2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAoKGEgPiAw KSkpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29u c19iX2tleSBVTklRVUUgKGIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQURE IENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0Ymxf ZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMyByb3dz KQorCistLSBVTklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChQRyAxNSk6IG51bGwgdmFsdWVzIGFy ZSB0cmVhdGVkIGFzIGVxdWFsIGZvcgorLS0gdW5pcXVlbmVzcyBwdXJwb3Nlcywgc28gdGhlIE5V TExTIE5PVCBESVNUSU5DVCBjbGF1c2UgbXVzdCBiZSBlbWl0dGVkLgorQ1JFQVRFIFRBQkxFIG51 bGxzX25kICgKKyAgICBhIGludCwKKyAgICBiIGludCwKKyAgICBVTklRVUUgTlVMTFMgTk9UIERJ U1RJTkNUIChhLCBiKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbnVsbHNf bmQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5udWxsc19uZCAoYSBp bnRlZ2VyLCBiIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm51bGxzX25k IEFERCBDT05TVFJBSU5UIG51bGxzX25kX2FfYl9rZXkgVU5JUVVFIE5VTExTIE5PVCBESVNUSU5D VCAoYSwgYik7CisoMiByb3dzKQorCistLSBJTkNMVURFIGNvbHVtbnMgb24gYSBjb25zdHJhaW50 LWJhY2tlZCBVTklRVUUgaW5kZXggKFBHIDExKTogdGhlCistLSBjb3ZlcmluZyBjb2x1bW5zIGFw cGVhciBpbiBhbiBJTkNMVURFICguLi4pIGNsYXVzZSBvbiB0aGUgQUxURVIgVEFCTEUKKy0tIEFE RCBDT05TVFJBSU5UIHN0YXRlbWVudCwgbm90IGluIHRoZSBrZXkgY29sdW1uIGxpc3QuCitDUkVB VEUgVEFCTEUgaWR4X2luYyAoCisgICAgaWQgICBpbnQgUFJJTUFSWSBLRVksCisgICAgbmFtZSB0 ZXh0LAorICAgIGV4dHJhIHRleHQsCisgICAgVU5JUVVFIChuYW1lKSBJTkNMVURFIChleHRyYSkK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeF9pbmMnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4X2luYyAoaWQgaW50ZWdlciBOT1Qg TlVMTCwgbmFtZSB0ZXh0LCBleHRyYSB0ZXh0KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVz dC5pZHhfaW5jIEFERCBDT05TVFJBSU5UIGlkeF9pbmNfbmFtZV9leHRyYV9rZXkgVU5JUVVFIChu YW1lKSBJTkNMVURFIChleHRyYSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4X2lu YyBBREQgQ09OU1RSQUlOVCBpZHhfaW5jX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygzIHJvd3Mp CisKKy0tIEZPUkVJR04gS0VZIHdpdGggT04gREVMRVRFIC8gT04gVVBEQVRFIHJlZmVyZW50aWFs IGFjdGlvbnMgYW5kIE1BVENICistLSBjbGF1c2UuICBFYWNoIHZhcmlhbnQgbXVzdCBhcHBlYXIg dmVyYmF0aW0gaW4gdGhlIHJlY29uc3RydWN0ZWQgRERMLgorQ1JFQVRFIFRBQkxFIGZrX2FjdHNf dGd0IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZrX2FjdHMgKAorICAgIGEg aW50LAorICAgIGIgaW50LAorICAgIGMgaW50LAorICAgIGQgaW50LAorICAgIENPTlNUUkFJTlQg ZmtfY2FzY2FkZSAgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBERUxFVEUgQ0FTQ0FERSBPTiBVUERBVEUgUkVT VFJJQ1QsCisgICAgQ09OU1RSQUlOVCBma19zZXRudWxsICBGT1JFSUdOIEtFWSAoYikgUkVGRVJF TkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVU RSBTRVQgTlVMTCwKKyAgICBDT05TVFJBSU5UIGZrX3NldGRlZiAgIEZPUkVJR04gS0VZIChjKSBS RUZFUkVOQ0VTIGZrX2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04g REVMRVRFIFNFVCBERUZBVUxULAorICAgIENPTlNUUkFJTlQgZmtfbWF0Y2ggICAgRk9SRUlHTiBL RVkgKGQpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBNQVRDSCBGVUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdma19h Y3RzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ma19hY3RzIChhIGludGVn ZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyLCBkIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LmZrX2FjdHMgQUREIENPTlNUUkFJTlQgZmtfY2FzY2FkZSBGT1JFSUdOIEtFWSAo YSkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5ma19hY3RzX3RndChpZCkgT04gVVBEQVRFIFJF U1RSSUNUIE9OIERFTEVURSBDQVNDQURFOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmZr X2FjdHMgQUREIENPTlNUUkFJTlQgZmtfbWF0Y2ggRk9SRUlHTiBLRVkgKGQpIFJFRkVSRU5DRVMg cGd0YmxfZGRsX3Rlc3QuZmtfYWN0c190Z3QoaWQpIE1BVENIIEZVTEw7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuZmtfYWN0cyBBREQgQ09OU1RSQUlOVCBma19zZXRkZWYgRk9SRUlHTiBL RVkgKGMpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3QuZmtfYWN0c190Z3QoaWQpIE9OIERFTEVU RSBTRVQgREVGQVVMVDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ma19hY3RzIEFERCBD T05TVFJBSU5UIGZrX3NldG51bGwgRk9SRUlHTiBLRVkgKGIpIFJFRkVSRU5DRVMgcGd0YmxfZGRs X3Rlc3QuZmtfYWN0c190Z3QoaWQpIE9OIERFTEVURSBTRVQgTlVMTDsKKyg1IHJvd3MpCisKKy0t IE5PVCBFTkZPUkNFRCBmb3JlaWduIGtleSAoUEcgMTcpOiB0aGUgY29uc3RyYWludCBpcyByZWNv cmRlZCBpbiB0aGUKKy0tIGNhdGFsb2cgYnV0IG5vdCB2YWxpZGF0ZWQgYnkgdGhlIGVuZ2luZTsg Tk9UIEVORk9SQ0VEIG11c3QgYXBwZWFyIGluCistLSB0aGUgcmVjb25zdHJ1Y3RlZCBEREwuCitD UkVBVEUgVEFCTEUgbm90ZW5mX3RndCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJM RSBub3RlbmYgKAorICAgIGEgaW50LAorICAgIENPTlNUUkFJTlQgbm90ZW5mX2ZrIEZPUkVJR04g S0VZIChhKSBSRUZFUkVOQ0VTIG5vdGVuZl90Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAg ICAgTk9UIEVORk9SQ0VECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdub3Rl bmYnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5vdGVuZiAoYSBpbnRl Z2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ub3RlbmYgQUREIENPTlNUUkFJTlQg bm90ZW5mX2ZrIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF90ZXN0Lm5vdGVu Zl90Z3QoaWQpIE5PVCBFTkZPUkNFRDsKKygyIHJvd3MpCisKKy0tIFNlbGYtcmVmZXJlbmNpbmcg Rks6IHRoZSBQSyBtdXN0IGFwcGVhciBiZWZvcmUgdGhlIEZLIHRoYXQgcmVmZXJlbmNlcyBpdC4K Ky0tIFRoZSBjYXRhbG9nIHNjYW4gcmV0dXJucyBjb25zdHJhaW50cyBpbiBuYW1lIG9yZGVyOyB3 aXRob3V0IHRoZSBmaXgsCistLSAic2VsZl9yZWZfcGFyZW50X2lkX2ZrZXkiIHNvcnRzIGJlZm9y ZSAic2VsZl9yZWZfcGtleSIgYW5kIHRoZSBGSyBBREQKKy0tIENPTlNUUkFJTlQgZmFpbHMgd2l0 aCAidGhlcmUgaXMgbm8gdW5pcXVlIGNvbnN0cmFpbnQgbWF0Y2hpbmcgZ2l2ZW4ga2V5cyIuCitD UkVBVEUgVEFCTEUgc2VsZl9yZWYgKAorICAgIGlkICAgICAgICBpbnQgUFJJTUFSWSBLRVksCisg ICAgcGFyZW50X2lkIGludCBSRUZFUkVOQ0VTIHNlbGZfcmVmKGlkKQorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnc2VsZl9yZWYnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnNlbGZfcmVmIChpZCBpbnRlZ2VyIE5PVCBO VUxMLCBwYXJlbnRfaWQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc2Vs Zl9yZWYgQUREIENPTlNUUkFJTlQgc2VsZl9yZWZfcGtleSBQUklNQVJZIEtFWSAoaWQpOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnNlbGZfcmVmIEFERCBDT05TVFJBSU5UIHNlbGZfcmVm X3BhcmVudF9pZF9ma2V5IEZPUkVJR04gS0VZIChwYXJlbnRfaWQpIFJFRkVSRU5DRVMgcGd0Ymxf ZGRsX3Rlc3Quc2VsZl9yZWYoaWQpOworKDMgcm93cykKKworLS0gV0lUSE9VVCBPVkVSTEFQUyBv biBhIFBSSU1BUlkgS0VZIChQRyAxNyk6IHRoZSByYW5nZS10eXBlIHBlcmlvZAorLS0gY29sdW1u IGZvcm1zIGEgdGVtcG9yYWwgcHJpbWFyeSBrZXk7IFdJVEhPVVQgT1ZFUkxBUFMgbXVzdCBhcHBl YXIKKy0tIGluc2lkZSB0aGUga2V5IGNvbHVtbiBsaXN0IGluIHRoZSByZWNvbnN0cnVjdGVkIEFM VEVSIFRBQkxFLgorLS0gQm90aCBjb2x1bW5zIHVzZSByYW5nZSB0eXBlcyB3aXRoIG5hdGl2ZSBH aVNUIHN1cHBvcnQgc28gbm8KKy0tIGJ0cmVlX2dpc3QgZXh0ZW5zaW9uIGlzIG5lZWRlZC4KK0NS RUFURSBUQUJMRSB0ZW1wb3JhbF9wayAoCisgICAgZ3JwICBpbnQ0cmFuZ2UsCisgICAgZHVyaW5n IGRhdGVyYW5nZSwKKyAgICBQUklNQVJZIEtFWSAoZ3JwLCBkdXJpbmcgV0lUSE9VVCBPVkVSTEFQ UykKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBvcmFsX3BrJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxf dGVzdC50ZW1wb3JhbF9wayAoZ3JwIGludDRyYW5nZSBOT1QgTlVMTCwgZHVyaW5nIGRhdGVyYW5n ZSBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QudGVtcG9yYWxfcGsgQURE IENPTlNUUkFJTlQgdGVtcG9yYWxfcGtfcGtleSBQUklNQVJZIEtFWSAoZ3JwLCBkdXJpbmcgV0lU SE9VVCBPVkVSTEFQUyk7CisoMiByb3dzKQorCistLSBJbmRleGVzOiBmdW5jdGlvbmFsIGFuZCBw YXJ0aWFsLiAgQ29uc3RyYWludC1iYWNraW5nIGluZGV4ZXMgYXJlCistLSBzdXBwcmVzc2VkICh0 aGV5IGFyZSBlbWl0dGVkIGJ5IHRoZSBjb25zdHJhaW50IGxvb3ApLgorQ1JFQVRFIFRBQkxFIGlk eGQgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK0NSRUFURSBJTkRFWCBpZHhkX2xv d2VyIE9OIGlkeGQgKGxvd2VyKG5hbWUpKTsKK0NSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04g aWR4ZCAoaWQpIFdIRVJFIGlkID4gMTAwOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVB VEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChs b3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVz dC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKyBBTFRFUiBUQUJMRSBw Z3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZIEtFWSAo aWQpOworKDQgcm93cykKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBhIGNoaWxkIERFRkFV TFQgb3ZlcnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwYXIgKGEg aW50IERFRkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBpbnQpIElOSEVSSVRT IChwYXIpOworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFVTFQgOTk5Owor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5jaCAoYyBpbnRlZ2VyKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rl c3QucGFyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaCBBTFRFUiBDT0xVTU4gYSBT RVQgREVGQVVMVCA5OTk7CisoMiByb3dzKQorCistLSBQZXItY29sdW1uIGF0dG9wdGlvbnM6IGVt aXR0ZWQgYXMgQUxURVIgQ09MVU1OIFNFVCAoLi4uKS4KK0NSRUFURSBUQUJMRSBhdHRvcHQgKGEg aW50LCBiIHRleHQpOworQUxURVIgVEFCTEUgYXR0b3B0IEFMVEVSIENPTFVNTiBhIFNFVCAobl9k aXN0aW5jdCA9IDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2F0dG9wdCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYXR0b3B0IChhIGludGVnZXIs IGIgdGV4dCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYXR0b3B0IEFMVEVSIENPTFVN TiBhIFNFVCAobl9kaXN0aW5jdD0nMTAwJyk7CisoMiByb3dzKQorCistLSBQYXJ0aXRpb25lZCB0 YWJsZSBwYXJlbnRzIChSQU5HRSwgSEFTSCwgYW5kIExJU1QpLgorQ1JFQVRFIFRBQkxFIHBhcnRl ZF9yYW5nZSAoaWQgaW50LCBrIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBh cnRlZF9yYW5nZSAoaWQgaW50ZWdlciwgayBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlk KTsKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoIChpZCBpbnQpIFBBUlRJVElP TiBCWSBIQVNIIChpZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9o YXNoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9oYXNoIChpZCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworKDEgcm93KQorCitD UkVBVEUgVEFCTEUgcGFydGVkX2xpc3QgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBC WSBMSVNUIChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRf bGlzdCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2xpc3QgKGlkIGludGVnZXIsIHJl Z2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKygxIHJvdykKKworLS0gUGFy dGl0aW9uIGNoaWxkcmVuOiBGUk9NL1RPLCBXSVRIIChtb2R1bHVzLCByZW1haW5kZXIpLCBERUZB VUxULgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFu Z2UKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworQUxURVIgVEFCTEUgcGFydGVk X3JhbmdlXzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfMSBQQVJU SVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlIEZPUiBWQUxVRVMgRlJPTSAoMCkg VE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgQUxU RVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKKygyIHJvd3MpCisKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaGFzaAorICAgIEZPUiBWQUxVRVMgV0lUSCAo bW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoXzAg UEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoIEZPUiBWQUxVRVMgV0lUSCAo bW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRf cmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfcmFuZ2UgREVGQVVMVDsKKygxIHJvdykKKworLS0gTm9uLWNvbnN0cmFpbnQtYmFja2VkIGlu ZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IHRoZSBwYXJlbnQncyBpbmRleCBEREwKKy0tIG11 c3QgYXBwZWFyIG9uY2U7IHRoZSBhdXRvLWNyZWF0ZWQgY2hpbGQgcGFydGl0aW9uIGluZGV4ZXMg KHJlbGlzcGFydGl0aW9uPXQpCistLSBtdXN0IGJlIHN1cHByZXNzZWQgc28gdGhlIERETCByb3Vu ZC10cmlwcyB3aXRob3V0ICJyZWxhdGlvbiBhbHJlYWR5IGV4aXN0cyIuCitDUkVBVEUgVEFCTEUg cGFydGVkX2lkeCAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lv bik7CitDUkVBVEUgVEFCTEUgcGFydGVkX2lkeF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaWR4IEZP UiBWQUxVRVMgSU4gKCdhJyk7CitDUkVBVEUgVU5JUVVFIElOREVYIHBhcnRlZF9pZHhfdWlkeCBP TiBwYXJ0ZWRfaWR4IChpZCwgcmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX2lkeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfaWR4IChpZCBpbnRlZ2VyLCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lv bik7CisgQ1JFQVRFIFVOSVFVRSBJTkRFWCBwYXJ0ZWRfaWR4X3VpZHggT04gcGd0YmxfZGRsX3Rl c3QucGFydGVkX2lkeCBVU0lORyBidHJlZSAoaWQsIHJlZ2lvbik7CisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnBhcnRlZF9pZHhfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworKDMgcm93cykKKworLS0gUGxhaW4gKG5vbi11 bmlxdWUpIENSRUFURSBJTkRFWCBvbiBwYXJ0aXRpb25lZCB0YWJsZTogdGhlIGF1dG8tY3JlYXRl ZCBjaGlsZAorLS0gaW5kZXggKHJlbGlzcGFydGl0aW9uPXRydWUpIGlzIHN1cHByZXNzZWQsIGp1 c3QgbGlrZSB0aGUgVU5JUVVFIGNhc2UuCitDUkVBVEUgVEFCTEUgcGFydGVkX3BsYWluIChpZCBp bnQsIHZhbCB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfcGxhaW5fYSBQQVJUSVRJT04gT0YgcGFydGVkX3BsYWluIEZPUiBWQUxVRVMgRlJPTSAoMCkg VE8gKDEwMCk7CitDUkVBVEUgSU5ERVggcGFydGVkX3BsYWluX2lkX2lkeCBPTiBwYXJ0ZWRfcGxh aW4gKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3BsYWluJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QucGFydGVkX3BsYWluIChpZCBpbnRlZ2VyLCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CisgQ1JFQVRFIElOREVYIHBhcnRlZF9wbGFpbl9pZF9pZHggT04gcGd0YmxfZGRs X3Rlc3QucGFydGVkX3BsYWluIFVTSU5HIGJ0cmVlIChpZCk7CisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnBhcnRlZF9wbGFpbl9hIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfcGxhaW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKygzIHJvd3MpCisKKy0tIENv bnN0cmFpbnQtYmFja2VkIFBSSU1BUlkgS0VZIG9uIHBhcnRpdGlvbmVkIHRhYmxlOiB0aGUgY2hp bGQncyBpbmhlcml0ZWQKKy0tIGNvbnN0cmFpbnQgKGNvbmlzbG9jYWw9ZmFsc2UpIGFuZCBpdHMg YmFja2luZyBpbmRleCBhcmUgYm90aCBzdXBwcmVzc2VkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9w ayAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CitDUkVB VEUgVEFCTEUgcGFydGVkX3BrX2EgUEFSVElUSU9OIE9GIHBhcnRlZF9wayBGT1IgVkFMVUVTIElO ICgnYScpOworQUxURVIgVEFCTEUgcGFydGVkX3BrIEFERCBQUklNQVJZIEtFWSAoaWQsIHJlZ2lv bik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9wayc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGsg KGlkIGludGVnZXIgTk9UIE5VTEwsIHJlZ2lvbiB0ZXh0IE5PVCBOVUxMKSBQQVJUSVRJT04gQlkg TElTVCAocmVnaW9uKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGsgQURE IENPTlNUUkFJTlQgcGFydGVkX3BrX3BrZXkgUFJJTUFSWSBLRVkgKGlkLCByZWdpb24pOworIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGtfYSBQQVJUSVRJT04gT0YgcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX3BrIEZPUiBWQUxVRVMgSU4gKCdhJyk7CisoMyByb3dzKQorCistLSBN dWx0aS1sZXZlbCAoc3ViLXBhcnRpdGlvbmVkKSB0YWJsZSB3aXRoIGEgQ1JFQVRFIElOREVYIG9u IHRoZSByb290LgorLS0gVGhlIG1pZC1sZXZlbCBwYXJ0aXRpb25lZCBpbmRleCAocmVsaXNwYXJ0 aXRpb249dHJ1ZSwgcmVsa2luZD0nSScpIGFuZCB0aGUKKy0tIGxlYWYgaW5kZXggKHJlbGlzcGFy dGl0aW9uPXRydWUsIHJlbGtpbmQ9J2knKSBhcmUgYm90aCBzdXBwcmVzc2VkLgorQ1JFQVRFIFRB QkxFIHBhcnRlZF9zdWIgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChy ZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdWJfYSBQQVJUSVRJT04gT0YgcGFydGVkX3N1 YgorICAgIEZPUiBWQUxVRVMgSU4gKCdhJykgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVB VEUgVEFCTEUgcGFydGVkX3N1Yl9hMSBQQVJUSVRJT04gT0YgcGFydGVkX3N1Yl9hIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgSU5ERVggcGFydGVkX3N1Yl9pZF9pZHggT04g cGFydGVkX3N1YiAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRf c3ViJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdWIgKGlkIGludGVnZXIs IHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKyBDUkVBVEUgSU5ERVgg cGFydGVkX3N1Yl9pZF9pZHggT04gcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N1YiBVU0lORyBidHJl ZSAoaWQpOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3ViX2EgUEFSVElU SU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdWIgRk9SIFZBTFVFUyBJTiAoJ2EnKSBQQVJU SVRJT04gQlkgUkFOR0UgKGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVk X3N1Yl9hMSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N1Yl9hIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CisoNCByb3dzKQorCistLSBQYXJ0aXRpb24gY2hpbGQgd2l0 aCBpdHMgb3duIGxvY2FsbHktZGVmaW5lZCBpbmRleCAocmVsaXNwYXJ0aXRpb249ZmFsc2UpOgor LS0gdGhpcyBpcyBOT1QgaW5oZXJpdGVkIGZyb20gYW55IHBhcmVudCBwYXJ0aXRpb25lZCBpbmRl eCBhbmQgbXVzdCBiZSBlbWl0dGVkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGlsZF9pZHggKGlk IGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRB QkxFIHBhcnRlZF9jaGlsZF9pZHhfYSBQQVJUSVRJT04gT0YgcGFydGVkX2NoaWxkX2lkeCBGT1Ig VkFMVUVTIElOICgnYScpOworQ1JFQVRFIElOREVYIHBhcnRlZF9jaGlsZF9pZHhfYV9pZCBPTiBw YXJ0ZWRfY2hpbGRfaWR4X2EgKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGFydGVkX2NoaWxkX2lkeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hpbGRfaWR4IChpZCBpbnRlZ2VyLCByZWdp b24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LnBhcnRlZF9jaGlsZF9pZHhfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3Qu cGFydGVkX2NoaWxkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworIENSRUFURSBJTkRFWCBwYXJ0 ZWRfY2hpbGRfaWR4X2FfaWQgT04gcGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoaWxkX2lkeF9hIFVT SU5HIGJ0cmVlIChpZCk7CisoMyByb3dzKQorCistLSBNaXg6IHBhcmVudCBoYXMgYSBDUkVBVEUg SU5ERVggKGF1dG8tcHJvcGFnYXRlZCB0byBjaGlsZCwgcmVsaXNwYXJ0aXRpb249dHJ1ZSwKKy0t IHN1cHByZXNzZWQpIEFORCB0aGUgY2hpbGQgaGFzIGl0cyBvd24gbG9jYWwgaW5kZXggKHJlbGlz cGFydGl0aW9uPWZhbHNlLCBlbWl0dGVkKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfbWl4ZWQgKGlk IGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRB QkxFIHBhcnRlZF9taXhlZF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfbWl4ZWQgRk9SIFZBTFVFUyBJ TiAoJ2EnKTsKK0NSRUFURSBJTkRFWCBwYXJ0ZWRfbWl4ZWRfaWQgT04gcGFydGVkX21peGVkIChp ZCk7CitDUkVBVEUgSU5ERVggcGFydGVkX21peGVkX2FfcmVnaW9uIE9OIHBhcnRlZF9taXhlZF9h IChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4ZWQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4 ZWQgKGlkIGludGVnZXIsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsK KyBDUkVBVEUgSU5ERVggcGFydGVkX21peGVkX2lkIE9OIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9t aXhlZCBVU0lORyBidHJlZSAoaWQpOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfbWl4ZWRfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX21peGVkIEZPUiBW QUxVRVMgSU4gKCdhJyk7CisgQ1JFQVRFIElOREVYIHBhcnRlZF9taXhlZF9hX3JlZ2lvbiBPTiBw Z3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWRfYSBVU0lORyBidHJlZSAocmVnaW9uKTsKKyg0IHJv d3MpCisKKy0tIEZLIG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IGRlY2xhcmVkIG9uIHRoZSBwYXJl bnQ7IHBhcnRpdGlvbiBjaGlsZHJlbiBpbmhlcml0CistLSB0aGUgY29uc3RyYWludCB3aXRoIGNv bmlzbG9jYWw9ZmFsc2UgYW5kIG11c3Qgbm90IHJlLWVtaXQgaXQuCitDUkVBVEUgVEFCTEUgcGFy dGVkX2ZrX3RndCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfZmsg KGlkIGludCwgdGd0X2lkIGludCBSRUZFUkVOQ0VTIHBhcnRlZF9ma190Z3QoaWQpKQorICAgIFBB UlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9ma19hIFBBUlRJVElP TiBPRiBwYXJ0ZWRfZmsgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2ZrJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayAoaWQgaW50ZWdlciwg dGd0X2lkIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworIEFMVEVSIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnBhcnRlZF9mayBBREQgQ09OU1RSQUlOVCBwYXJ0ZWRfZmtfdGd0X2lkX2Zr ZXkgRk9SRUlHTiBLRVkgKHRndF9pZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf ZmtfdGd0KGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2ZrX2EgUEFS VElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayBGT1IgVkFMVUVTIEZST00gKDApIFRP ICgxMDApOworKDMgcm93cykKKworLS0gU3RhdGlzdGljcyBkZWNsYXJlZCBleHBsaWNpdGx5IG9u IGEgcGFydGl0aW9uIGNoaWxkIChub3QgYXV0by1wcm9wYWdhdGVkKToKKy0tIHRoZSBjaGlsZCdz IHN0YXRpc3RpY3Mgb2JqZWN0IGFwcGVhcnMgaW5zaWRlIHRoZSBjaGlsZCdzIERETCBibG9jay4K K0NSRUFURSBUQUJMRSBwYXJ0ZWRfc3R4IChpZCBpbnQsIHJlZ2lvbiB0ZXh0LCB2YWwgZmxvYXQp IFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdHhfYSBQ QVJUSVRJT04gT0YgcGFydGVkX3N0eCBGT1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIFNUQVRJ U1RJQ1MgcGFydGVkX3N0eF9zdGF0IChuZGlzdGluY3QpIE9OIGlkLCByZWdpb24gRlJPTSBwYXJ0 ZWRfc3R4OworQ1JFQVRFIFNUQVRJU1RJQ1MgcGFydGVkX3N0eF9hX3N0YXQgKG5kaXN0aW5jdCkg T04gaWQsIHZhbCBGUk9NIHBhcnRlZF9zdHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncGFydGVkX3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N0eCAoaWQgaW50ZWdlciwgcmVnaW9u IHRleHQsIHZhbCBkb3VibGUgcHJlY2lzaW9uKSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsK KyBDUkVBVEUgU1RBVElTVElDUyBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3R4X3N0YXQgKG5kaXN0 aW5jdCkgT04gaWQsIHJlZ2lvbiBGUk9NIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHg7CisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHhfYSBQQVJUSVRJT04gT0YgcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX3N0eCBGT1IgVkFMVUVTIElOICgnYScpOworIENSRUFURSBTVEFUSVNU SUNTIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHhfYV9zdGF0IChuZGlzdGluY3QpIE9OIGlkLCB2 YWwgRlJPTSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3R4X2E7CisoNCByb3dzKQorCitEUk9QIFRB QkxFIHBhcnRlZF9zdHg7CistLSBOTyBJTkhFUklUIENIRUNLIGNvbnN0cmFpbnQ6IHRoZSBOTyBJ TkhFUklUIGZsYWcgbXVzdCBhcHBlYXIgdmVyYmF0aW0gaW4gdGhlCistLSBpbmxpbmUgY29uc3Ry YWludCBkZWZpbml0aW9uIGluc2lkZSB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkuCitDUkVBVEUgVEFC TEUgbm9pbmhjaGsgKGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIHZhbF9wb3MgQ0hF Q0sgKHZhbCA+IDApIE5PIElOSEVSSVQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdub2luaGNoayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJM RSBwZ3RibF9kZGxfdGVzdC5ub2luaGNoayAoaWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENPTlNU UkFJTlQgdmFsX3BvcyBDSEVDSyAoKHZhbCA+IDApKSBOTyBJTkhFUklUKTsKKygxIHJvdykKKwor RFJPUCBUQUJMRSBub2luaGNoazsKKy0tIE11bHRpcGxlIGluaGVyaXRhbmNlIHBhcmVudHM6IHRo ZSBJTkhFUklUUyBjbGF1c2UgbXVzdCBsaXN0IGJvdGggcGFyZW50cyBpbgorLS0gZGVjbGFyYXRp b24gb3JkZXI7IG9ubHkgdGhlIGxvY2FsbHktZGVmaW5lZCBjb2x1bW4gYXBwZWFycyBpbiB0aGUg Y29sdW1uIGxpc3QuCitDUkVBVEUgVEFCTEUgbWlfcDEgKGEgaW50IERFRkFVTFQgMSk7CitDUkVB VEUgVEFCTEUgbWlfcDIgKGIgdGV4dCBERUZBVUxUICd4Jyk7CitDUkVBVEUgVEFCTEUgbWlfY2hp bGQgKGMgZmxvYXQpIElOSEVSSVRTIChtaV9wMSwgbWlfcDIpOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdtaV9jaGlsZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5taV9jaGlsZCAoYyBkb3VibGUgcHJlY2lzaW9u KSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3QubWlfcDEsIHBndGJsX2RkbF90ZXN0Lm1pX3AyKTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5taV9jaGlsZCBBTFRFUiBDT0xVTU4gYSBTRVQg REVGQVVMVCAxOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm1pX2NoaWxkIEFMVEVSIENP TFVNTiBiIFNFVCBERUZBVUxUICd4Jzo6dGV4dDsKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgbWlf cDEsIG1pX3AyIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIG1pX2No aWxkCistLSBSdWxlcy4KK0NSRUFURSBUQUJMRSBydCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSBy dF9sb2cgKGlkIGludCk7CitDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTIE9OIElOU0VSVCBU TyBydAorICAgIERPIEFMU08gSU5TRVJUIElOVE8gcnRfbG9nIFZBTFVFUyAoTkVXLmlkKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ydCAoaWQgaW50ZWdlcik7CisgQ1JFQVRFIFJVTEUg cnRfbG9nX2luc2VydCBBUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArCisgICAgIE9OIElOU0VSVCBUTyBwZ3RibF9kZGxfdGVzdC5ydCBETyAgSU5TRVJU IElOVE8gcGd0YmxfZGRsX3Rlc3QucnRfbG9nIChpZCkrCisgICBWQUxVRVMgKG5ldy5pZCk7Ciso MiByb3dzKQorCistLSBFeHRlbmRlZCBzdGF0aXN0aWNzLgorQ1JFQVRFIFRBQkxFIHN0eCAoYSBp bnQsIGIgaW50LCBjIGludCk7CitDUkVBVEUgU1RBVElTVElDUyBzdHhfbmR2IChuZGlzdGluY3Qp IE9OIGEsIGIgRlJPTSBzdHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5zdHggKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworIENSRUFURSBT VEFUSVNUSUNTIHBndGJsX2RkbF90ZXN0LnN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9N IHBndGJsX2RkbF90ZXN0LnN0eDsKKygyIHJvd3MpCisKKy0tIFJvdy1sZXZlbCBzZWN1cml0eSB0 b2dnbGVzLgorQ1JFQVRFIFRBQkxFIHJscyAoaWQgaW50KTsKK0FMVEVSIFRBQkxFIHJscyBFTkFC TEUgUk9XIExFVkVMIFNFQ1VSSVRZOworQUxURVIgVEFCTEUgcmxzIEZPUkNFIFJPVyBMRVZFTCBT RUNVUklUWTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5y bHMgKGlkIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBFTkFCTEUg Uk9XIExFVkVMIFNFQ1VSSVRZOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBGT1JD RSBST1cgTEVWRUwgU0VDVVJJVFk7CisoMyByb3dzKQorCistLSBSRVBMSUNBIElERU5USVRZOiBl bWl0dGVkIG9ubHkgd2hlbiBub3QgdGhlIGRlZmF1bHQuCitDUkVBVEUgVEFCTEUgcmlfZnVsbCAo YSBpbnQpOworQUxURVIgVEFCTEUgcmlfZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwgKGEg aW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCBSRVBMSUNBIElE RU5USVRZIEZVTEw7CisoMiByb3dzKQorCitDUkVBVEUgVEFCTEUgcmlfaWR4IChhIGludCBOT1Qg TlVMTCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHJpX2lkeCAoYSk7CitBTFRF UiBUQUJMRSByaV9pZHggUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfYTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4Jzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9pZHggKGEgaW50ZWdlciBOT1QgTlVMTCk7CisgQ1JFQVRF IFVOSVFVRSBJTkRFWCByaV9pZHhfYSBPTiBwZ3RibF9kZGxfdGVzdC5yaV9pZHggVVNJTkcgYnRy ZWUgKGEpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHJpX2lkeF9hOworKDMgcm93cykKKworLS0gVU5MT0dHRUQgKyByZWxv cHRpb25zLgorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFj dG9yID0gNzApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBVTkxPR0dFRCBUQUJMRSBwZ3RibF9kZGxfdGVzdC51bm8gKGlk IGludGVnZXIpIFdJVEggKGZpbGxmYWN0b3I9JzcwJyk7CisoMSByb3cpCisKKy0tIFR5cGVkIHRh YmxlIChDUkVBVEUgVEFCTEUgT0YgdHlwZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJpdGVkIGZyb20g dGhlCistLSB0eXBlIGVtaXQgbm90aGluZzsgbG9jYWxseS1hcHBsaWVkIERFRkFVTFQsIE5PVCBO VUxMIGFuZCBDSEVDSyBjb21lCistLSBvdXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNvbCBXSVRIIE9Q VElPTlMgLi4uKSIgbGlzdC4KK0NSRUFURSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50LCBiIHRleHQp OworQ1JFQVRFIFRBQkxFIHR5cGVkX3BsYWluIE9GIHR5cGVkX3Q7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3R5cGVkX3BsYWluJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC50 eXBlZF9wbGFpbiBPRiBwZ3RibF9kZGxfdGVzdC50eXBlZF90OworKDEgcm93KQorCitDUkVBVEUg VEFCTEUgdHlwZWRfb3ZlciBPRiB0eXBlZF90ICgKKyAgICBhIFdJVEggT1BUSU9OUyBERUZBVUxU IDcgTk9UIE5VTEwsCisgICAgYiBXSVRIIE9QVElPTlMgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlO VCBiX25vbmVtcHR5IENIRUNLIChsZW5ndGgoYikgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgndHlwZWRfb3Zlcic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX292ZXIgT0YgcGd0 YmxfZGRsX3Rlc3QudHlwZWRfdCAoYSBXSVRIIE9QVElPTlMgREVGQVVMVCA3IE5PVCBOVUxMLCBi IFdJVEggT1BUSU9OUyBOT1QgTlVMTCwgQ09OU1RSQUlOVCBiX25vbmVtcHR5IENIRUNLICgobGVu Z3RoKGIpID4gMCkpKTsKKygxIHJvdykKKworLS0gVGVtcG9yYXJ5IHRhYmxlcyArIE9OIENPTU1J VC4gIFRlbXAgdGFibGVzIG11c3QgbmV2ZXIgYmUgZW1pdHRlZCB3aXRoCistLSB0aGUgc2Vzc2lv bi1wcml2YXRlIHBnX3RlbXBfTk4gc2NoZW1hIHByZWZpeCAtLSB0aGUgVEVNUE9SQVJZIGtleXdv cmQKKy0tIGFscmVhZHkgcGxhY2VzIHRoZSB0YWJsZSBpbiBwZ190ZW1wIGFuZCB0aGUgcHJlZml4 IGlzIG5vbi1yZXBsYXlhYmxlLgorLS0gT04gQ09NTUlUIERST1Agb25seSBmaXJlcyBhdCBjb21t aXQsIHNvIHRoZSBxdWVyaWVzIHRoYXQgbmVlZCB0byBzZWUKKy0tIHRoZSBjYXRhbG9nIGVudHJ5 IG11c3QgcnVuIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzIHRoZSBDUkVBVEUuCitCRUdJTjsK K0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50KTsKK0NSRUFURSBURU1QIFRB QkxFIHRlbXBfZGVsZXRlIChpZCBpbnQpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKK0NSRUFURSBU RU1QIFRBQkxFIHRlbXBfZHJvcCAoaWQgaW50KSBPTiBDT01NSVQgRFJPUDsKK1NFTEVDVCBsaW5l IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWZhdWx0Jzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAg ICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBU QUJMRSB0ZW1wX2RlZmF1bHQgKGlkIGludGVnZXIpOworKDEgcm93KQorCitTRUxFQ1QgbGluZSBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVsZXRlJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0ZW1wX2RlbGV0ZSAo aWQgaW50ZWdlcikgT04gQ09NTUlUIERFTEVURSBST1dTOworKDEgcm93KQorCitTRUxFQ1QgbGlu ZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZHJvcCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSkgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBURU1QT1JBUlkgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnRlZ2VyKSBPTiBDT01N SVQgRFJPUDsKKygxIHJvdykKKworUk9MTEJBQ0s7CistLSBQcmV0dHkgbW9kZS4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Us IHByZXR0eSA9PiB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljICggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgaWQgaW50ZWdlciBOT1QgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQgTk9UIE5VTEwgICAg ICAgICAgICAgICAgICAgICArCisgKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNp YyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQor CistLSBvbmx5X2tpbmRzIC8gZXhjZXB0X2tpbmRzIGdhdGluZzogZWFjaCBlbWl0cyBlaXRoZXIg b25seSB0aGUgbGlzdGVkIGtpbmRzCistLSAob25seV9raW5kcykgb3IgZXZlcnkga2luZCBleGNl cHQgdGhlIGxpc3RlZCBvbmVzIChleGNlcHRfa2luZHMpLiAgVGhlIHR3bworLS0gYXJlIG11dHVh bGx5IGV4Y2x1c2l2ZS4gIEtpbmQgdm9jYWJ1bGFyeTogdGFibGUsIGluZGV4LAorLS0gcHJpbWFy eV9rZXksIHVuaXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5LCBleGNsdXNpb24sIHJ1bGUsCistLSBz dGF0aXN0aWNzLCB0cmlnZ2VyLCBwb2xpY3ksIHJscywgcmVwbGljYV9pZGVudGl0eSwgcGFydGl0 aW9uLgorLS0gTk9UIE5VTEwgaXMgbm90IGluIHRoZSB2b2NhYnVsYXJ5IC0gYWx3YXlzIGVtaXR0 ZWQgdG8gcHJldmVudAorLS0gcHJvZHVjaW5nIHNjaGVtYXMgdGhhdCBzaWxlbnRseSBhY2NlcHQg TlVMTHMgdGhlIHNvdXJjZSB3b3VsZAorLS0gaGF2ZSByZWplY3RlZC4KKy0tCistLSBleGNlcHRf a2luZHM9aW5kZXggaGlkZXMgdGhlIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRzLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBl eGNlcHRfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBp bnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dz KQorCistLSBleGNlcHRfa2luZHM9cHJpbWFyeV9rZXksdW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5 LGV4Y2x1c2lvbiBoaWRlcyBldmVyeQorLS0gdGFibGUtbGV2ZWwgY29uc3RyYWludC4gIElubGlu ZSBDSEVDSyBpbiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkgaXMKKy0tIHN1cHByZXNzZWQgdG9vLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5JywndW5pcXVlJywnY2hl Y2snLCdmb3JlaWduX2tleScsJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRl Z2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2luZHM9Zm9yZWlnbl9rZXkg c3VwcHJlc3NlcyBvbmx5IEZPUkVJR04gS0VZIGNvbnN0cmFpbnRzOworLS0gUFJJTUFSWSBLRVks IFVOSVFVRSwgQ0hFQ0ssIGFuZCBuYW1lZCBOT1QgTlVMTCBzdGF5LiAgVGhpcyBpcyB0aGUKKy0t IGZpcnN0IHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZLLWNsb25lIHdvcmtmbG93OiBlbWl0IHRhYmxl cyB3aXRob3V0CistLSBjcm9zcy10YWJsZSBGS3MsIGxvYWQgZGF0YSwgdGhlbiByZS1ydW4gd2l0 aCBvbmx5X2tpbmRzPWZvcmVpZ25fa2V5CistLSB0byBhZGQgdGhlbSBvbmNlIGFsbCB0YXJnZXRz IGV4aXN0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10pOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGlu dGVnZXIsIENPTlNUUkFJTlQgY29uc19hX2NoZWNrIENIRUNLICgoYSA+IDApKSk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2Jfa2V5IFVOSVFV RSAoYik7CisoMiByb3dzKQorCistLSBvbmx5X2tpbmRzPWZvcmVpZ25fa2V5IGlzIHRoZSBzZWNv bmQgcGFzcyBvZiB0aGUgdHdvLXBhc3MgRkstY2xvbmUKKy0tIHdvcmtmbG93OiBlbWl0IG9ubHkg dGhlIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCAuLi4gRk9SRUlHTgorLS0gS0VZIHJv d3M7IHRoZSBDUkVBVEUgVEFCTEUgYW5kIGV2ZXJ5IG5vbi1GSyBzdWItb2JqZWN0IGFyZQorLS0g c3VwcHJlc3NlZCAodGhlIHRhYmxlIGFscmVhZHkgZXhpc3RzIGZyb20gdGhlIGZpcnN0IHBhc3Mp LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRF UiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZP UkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF90ZXN0LnJlZmQoaWQpIERFRkVSUkFC TEUgSU5JVElBTExZIERFRkVSUkVEOworKDEgcm93KQorCistLSBBIHRhYmxlIHdpdGggbm8gZm9y ZWlnbiBrZXlzIHByb2R1Y2VzIG5vIHJvd3MgdW5kZXIKKy0tIG9ubHlfa2luZHM9Zm9yZWlnbl9r ZXkuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JlZmQnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10pOworIHBnX2dl dF90YWJsZV9kZGwgCistLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKKy0tIG9ubHlfa2lu ZHM9dGFibGUgZW1pdHMgb25seSB0aGUgYmFyZSBDUkVBVEUgVEFCTEUgKHdpdGggYW55IGlubGlu ZQorLS0gY29sdW1uLWxldmVsIE5PVCBOVUxMIGFuZCBDSEVDSykgLSBubyBpbmRleGVzLCBubyBQ UklNQVJZIEtFWSBBTFRFUiwKKy0tIG5vIG90aGVyIHN1Yi1vYmplY3RzLiAgVXNlZnVsIGZvciBj YXB0dXJpbmcgYSB0YWJsZSdzIHNoYXBlIHdpdGhvdXQKKy0tIHB1bGxpbmcgaW4gZXZlcnl0aGlu ZyBhdHRhY2hlZCB0byBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndGFibGUnXSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu aWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKygxIHJvdykKKworLS0gb25s eV9raW5kcz1jaGVjayBvbiBhIG5vbi1wYXJ0aXRpb24gdGFibGUuICBUaGUgY29uc3RyYWludCBs b29wIG11c3QgZW1pdAorLS0gY29sdW1uLWxldmVsIGFuZCB0YWJsZS1sZXZlbCBDSEVDSyBjb25z dHJhaW50cyB2aWEgQUxURVIgVEFCTEUgaGVyZSwKKy0tIGJlY2F1c2UgdGhlIGlubGluZSBwYXRo IGluIENSRUFURSBUQUJMRSBuZXZlciBydW5zIChLSU5EX1RBQkxFIGlzCistLSBub3QgaW4gdGhl IGZpbHRlcikuCitDUkVBVEUgVEFCTEUgY2hrX29ubHkgKAorICAgIGlkICBpbnQgUFJJTUFSWSBL RVksCisgICAgcXR5IGludCBDSEVDSyAocXR5ID4gMCksCisgICAgQ09OU1RSQUlOVCBjaGtfb25s eV9pZF9wb3MgQ0hFQ0sgKGlkID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2Noa19vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFS UkFZWydjaGVjayddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu Y2hrX29ubHkgQUREIENPTlNUUkFJTlQgY2hrX29ubHlfaWRfcG9zIENIRUNLICgoaWQgPiAwKSk7 CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2hrX29ubHkgQUREIENPTlNUUkFJTlQgY2hr X29ubHlfcXR5X2NoZWNrIENIRUNLICgocXR5ID4gMCkpOworKDIgcm93cykKKworRFJPUCBUQUJM RSBjaGtfb25seTsKKy0tIG9ubHlfa2luZHM9cGFydGl0aW9uIG9uIGEgcGFydGl0aW9uZWQtdGFi bGUgcGFyZW50OiBlYWNoIGNoaWxkJ3MgZnVsbCBEREwKKy0tIGlzIGVtaXR0ZWQgKENSRUFURSBU QUJMRSAuLi4gUEFSVElUSU9OIE9GIC4uLikuICBUaGUgInBhcnRpdGlvbiIKKy0tIGtleXdvcmQg aXMgYSBnYXRlIGF0IHRoZSBwYXJlbnQgbGV2ZWw7IGl0IGlzIHN0cmlwcGVkIGZyb20gdGhlCist LSBwcm9wYWdhdGVkIGZpbHRlciBzbyB0aGUgY2hpbGQgZG9lcyBub3QgZXhjbHVkZSBpdHMgb3du CistLSBDUkVBVEUgVEFCTEUuCitDUkVBVEUgVEFCTEUgcF9vbmx5IChpZCBpbnQsIHZhbCB0ZXh0 KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwX29ubHlfYSBQQVJUSVRJ T04gT0YgcF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgVEFCTEUg cF9vbmx5X2IgUEFSVElUSU9OIE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDIw MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Bfb25seSc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncGFydGl0aW9uJ10pOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QucF9vbmx5X2EgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBfb25seSBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5w X29ubHlfYiBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucF9vbmx5IEZPUiBWQUxVRVMgRlJP TSAoMTAwKSBUTyAoMjAwKTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgcF9vbmx5OworLS0gb25s eV9raW5kcyBhbmQgZXhjZXB0X2tpbmRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Us CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seV9raW5kcyA9PiBBUlJBWVsnZm9y ZWlnbl9rZXknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRfa2luZHMg PT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10pOworRVJST1I6ICAib25seV9raW5kcyIgYW5kICJleGNl cHRfa2luZHMiIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQorLS0gUHViL3N1YiBz Y2hlbWEgY2xvbmU6IGtlZXAgdGhlIHRhYmxlIGFuZCBpdHMgcHJpbWFyeSBrZXksIGRyb3AgdGhl CistLSByZXN0IG9mIHRoZSBjb25zdHJhaW50cyBzbyB0aGUgc3Vic2NyaWJlciBjYW4gcmVwbGlj YXRlIHdpdGhvdXQKKy0tIHB1bGxpbmcgY3Jvc3MtdGFibGUgZGVwZW5kZW5jaWVzIGFsb25nLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ2NoZWNrJywnZm9yZWlnbl9r ZXknLCdleGNsdXNpb24nXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2Vy KTsKKygxIHJvdykKKworLS0gZXhjZXB0X2tpbmRzPXJ1bGUgaGlkZXMgdGhlIENSRUFURSBSVUxF LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ydCAo aWQgaW50ZWdlcik7CisoMSByb3cpCisKKy0tIGV4Y2VwdF9raW5kcz1zdGF0aXN0aWNzIGhpZGVz IHRoZSBDUkVBVEUgU1RBVElTVElDUy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn c3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3N0 YXRpc3RpY3MnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3Quc3R4IChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKygxIHJv dykKKworLS0gZXhjZXB0X2tpbmRzPXJscyBoaWRlcyB0aGUgRU5BQkxFL0ZPUkNFIFJPVyBMRVZF TCBTRUNVUklUWSB0b2dnbGVzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncmxzJ10p OworICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxF IHBndGJsX2RkbF90ZXN0LnJscyAoaWQgaW50ZWdlcik7CisoMSByb3cpCisKKy0tIGV4Y2VwdF9r aW5kcz1yZXBsaWNhX2lkZW50aXR5IGhpZGVzIHRoZSBSRVBMSUNBIElERU5USVRZIGNsYXVzZS4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydyZXBsaWNhX2lkZW50aXR5J10pOwor ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwgKGEgaW50ZWdlcik7CisoMSByb3cpCisKKy0tIFBh cnRpdGlvbiBjaGlsZHJlbiBhcmUgZW1pdHRlZCBieSBkZWZhdWx0OyBleGNlcHRfa2luZHM9cGFy dGl0aW9uCistLSBzdXBwcmVzc2VzIHRoZW0gc28gb25seSB0aGUgcGFydGl0aW9uZWQtdGFibGUg cGFyZW50IGNvbWVzIG91dC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVk X3JhbmdlJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3BhcnRpdGlvbiddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QucGFydGVkX3JhbmdlIChpZCBpbnRlZ2VyLCBrIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5H RSAoaWQpOworKDEgcm93KQorCistLSBXaGl0ZXNwYWNlIGFyb3VuZCBraW5kIG5hbWVzIGlzIGFs bG93ZWQ7IGNhc2UgaXMgZm9sZGVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdp ZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJyAg SU5ERVggICcsJyAgUlVMRSAgJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5P VCBOVUxMLCBuYW1lIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQURE IENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQorCistLSBz Y2hlbWFfcXVhbGlmaWVkPWZhbHNlIHN0cmlwcyB0aGUgc2NoZW1hIGZyb20gdGhlIHRhcmdldCB0 YWJsZSBpdHNlbGYKKy0tIGFuZCBmcm9tIHNhbWUtc2NoZW1hIHNpYmxpbmcgcmVmZXJlbmNlcyAo aW5oZXJpdGFuY2UvcGFydGl0aW9uCistLSBwYXJlbnRzLCBpZGVudGl0eSBzZXF1ZW5jZXMgaW4g dGhlIHNhbWUgc2NoZW1hKSwgd2hpbGUgY3Jvc3Mtc2NoZW1hCistLSByZWZlcmVuY2VzIGFyZSBr ZXB0IHF1YWxpZmllZCBmb3IgY29ycmVjdG5lc3MuCistLQorLS0gQmFyZSBDUkVBVEUgVEFCTEUg Zm9yIGFuIG9yZGluYXJ5IHRhYmxlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdi YXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIGJhc2ljIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQg Q09MTEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxF IGJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJv d3MpCisKKy0tIElOSEVSSVRTIHBhcmVudCBpbiB0aGUgc2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1 bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1h X3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBjaCAoYyBpbnRlZ2VyKSBJTkhFUklUUyAocGFyKTsKKyBB TFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CisoMiByb3dzKQor CistLSBQYXJ0aXRpb24gcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVh bGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGFydGVkX3Jh bmdlXzEgUEFSVElUSU9OIE9GIHBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgx MDApOworIEFMVEVSIFRBQkxFIHBhcnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZB VUxUIDc7CisoMiByb3dzKQorCistLSBDcm9zcy1zY2hlbWEgRksgdGFyZ2V0IGtlZXBzIHF1YWxp ZmljYXRpb24uICBUaGUgJ3JlZmQnIHRhYmxlIGlzIGluCistLSBwZ3RibF9kZGxfdGVzdDsgcGxh Y2UgYW4gRksgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHNjaGVtYSBhbmQgdmVyaWZ5IGl0CistLSBz dGF5cyBxdWFsaWZpZWQgZXZlbiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCitDUkVBVEUg U0NIRU1BIHBndGJsX2RkbF9vdGhlcjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfb3RoZXIucGFy ZW50IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsgKAorICAg IGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGlkIGludCBSRUZFUkVOQ0VTIHBndGJsX2RkbF9v dGhlci5wYXJlbnQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3hzY2hlbWFf ZmsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg eHNjaGVtYV9mayAoaWQgaW50ZWdlciBOT1QgTlVMTCwgcGlkIGludGVnZXIpOworIEFMVEVSIFRB QkxFIHhzY2hlbWFfZmsgQUREIENPTlNUUkFJTlQgeHNjaGVtYV9ma19wa2V5IFBSSU1BUlkgS0VZ IChpZCk7CisgQUxURVIgVEFCTEUgeHNjaGVtYV9mayBBREQgQ09OU1RSQUlOVCB4c2NoZW1hX2Zr X3BpZF9ma2V5IEZPUkVJR04gS0VZIChwaWQpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX290aGVyLnBh cmVudChpZCk7CisoMyByb3dzKQorCistLSBDcm9zcy1zY2hlbWEgRksgd2hvc2UgdGFyZ2V0IHNj aGVtYSBuYW1lIGVuZHMgd2l0aCB0aGUgYmFzZSBzY2hlbWEgbmFtZQorLS0gKGUuZy4gInhwZ3Ri bF9kZGxfdGVzdCIgZW5kcyB3aXRoICJwZ3RibF9kZGxfdGVzdCIpLiAgQSBwb3N0LWhvYyB0ZXh0 CistLSBzdHJpcCB3b3VsZCBtYW5nbGUgInhwZ3RibF9kZGxfdGVzdC5yZWZ0YmwiIGludG8gInhy ZWZ0YmwiOyBkZWNpZGluZworLS0gcXVhbGlmaWNhdGlvbiBhdCBnZW5lcmF0aW9uIHRpbWUgYXZv aWRzIHRoZSBwcm9ibGVtIGVudGlyZWx5LgorQ1JFQVRFIFNDSEVNQSB4cGd0YmxfZGRsX3Rlc3Q7 CitDUkVBVEUgVEFCTEUgeHBndGJsX2RkbF90ZXN0LnJlZnRibCAoaWQgaW50IFBSSU1BUlkgS0VZ KTsKK0NSRUFURSBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkg S0VZLAorICAgIHJlZiBpbnQgUkVGRVJFTkNFUyB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsCispOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdWZmaXhfc2NoZW1hX2ZrJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVt YV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHN1ZmZpeF9zY2hlbWFfZmsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHJlZiBp bnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHN1 ZmZpeF9zY2hlbWFfZmtfcGtleSBQUklNQVJZIEtFWSAoaWQpOworIEFMVEVSIFRBQkxFIHN1ZmZp eF9zY2hlbWFfZmsgQUREIENPTlNUUkFJTlQgc3VmZml4X3NjaGVtYV9ma19yZWZfZmtleSBGT1JF SUdOIEtFWSAocmVmKSBSRUZFUkVOQ0VTIHhwZ3RibF9kZGxfdGVzdC5yZWZ0YmwoaWQpOworKDMg cm93cykKKworRFJPUCBUQUJMRSBzdWZmaXhfc2NoZW1hX2ZrOworRFJPUCBTQ0hFTUEgeHBndGJs X2RkbF90ZXN0IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHhwZ3Ri bF9kZGxfdGVzdC5yZWZ0YmwKKy0tIElkZW50aXR5IGNvbHVtbiB3aXRoIGEgY3VzdG9tIHNlcXVl bmNlIG5hbWUgaW4gdGhlIHNhbWUgc2NoZW1hIGlzCistLSBlbWl0dGVkIHVucXVhbGlmaWVkLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxp ZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAo diBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNUQVJUIFdJVEggMTAwIElO Q1JFTUVOVCBCWSA1IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUgMTAgQ1lDTEUpIE5P VCBOVUxMKTsKKygxIHJvdykKKworLS0gUm91bmQtdHJpcDogd2l0aCBzY2hlbWFfcXVhbGlmaWVk PWZhbHNlLCBhZnRlciBTRVQgc2VhcmNoX3BhdGggdGhlCistLSBEREwgY2FuIGJlIHJlcGxheWVk IGludG8gYSBkaWZmZXJlbnQgdGFyZ2V0IHNjaGVtYS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRs X3JlcGxheTsKK0RPICQkCitERUNMQVJFCisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBTRVQg TE9DQUwgc2VhcmNoX3BhdGggPSBwZ3RibF9kZGxfcmVwbGF5OworICAgIEZPUiBzdG10IElOCisg ICAgICAgIFNFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3Rlc3Qu YmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSkgQVMgbGluZQorICAgIExPT1AKKyAgICAg ICAgRVhFQ1VURSBzdG10OworICAgIEVORCBMT09QOworRU5EICQkOworU0VMRUNUIHJlbG5hbWVz cGFjZTo6cmVnbmFtZXNwYWNlOjp0ZXh0LCByZWxuYW1lCitGUk9NIHBnX2NsYXNzIFdIRVJFIG9p ZCA9ICdwZ3RibF9kZGxfcmVwbGF5LmJhc2ljJzo6cmVnY2xhc3M7CisgICByZWxuYW1lc3BhY2Ug ICB8IHJlbG5hbWUgCistLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tCisgcGd0YmxfZGRsX3Jl cGxheSB8IGJhc2ljCisoMSByb3cpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXkgQ0FT Q0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3JlcGxheS5i YXNpYworRFJPUCBUQUJMRSB4c2NoZW1hX2ZrOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX290aGVy IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9vdGhl ci5wYXJlbnQKKy0tIENyb3NzLXNjaGVtYSBwYXJ0aXRpb24gY2hpbGQgd2l0aCBzY2hlbWFfcXVh bGlmaWVkPWZhbHNlOiB0aGUgY2hpbGQgbXVzdAorLS0gY2FycnkgaXRzIG93biBzY2hlbWEgcHJl Zml4IHNvIHRoZSBvdXRwdXQgaXMgdW5hbWJpZ3VvdXMgcmVnYXJkbGVzcyBvZiB0aGUKKy0tIGNh bGxlcidzIHNlYXJjaF9wYXRoLiAgQmVmb3JlIHRoZSBmaXgsIHRoZSBjaGlsZCB3YXMgZW1pdHRl ZCBhcyB0aGUgYmFyZQorLS0gbmFtZSAicHRfYyIgKGxhbmRpbmcgaW4gd2hpY2hldmVyIHNjaGVt YSBpcyBmaXJzdCBpbiBzZWFyY2hfcGF0aCkgd2hpbGUKKy0tIHRoZSBwYXJlbnQgcmVmZXJlbmNl IGluc2lkZSB0aGUgQ1JFQVRFIFRBQkxFIGNhbWUgb3V0IGFzIHRoZSBmdWxseS1xdWFsaWZpZWQK Ky0tICJwZ3RibF9kZGxfcGFydF9zLnB0IiwgbWFraW5nIHRoZSBEREwgaW5jb25zaXN0ZW50IGFu ZCB1bnJlcGxheWFibGUuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9wYXJ0X3M7CitDUkVBVEUg U0NIRU1BIHBndGJsX2RkbF9wYXJ0X290aGVyOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9wYXJ0 X3MucHQgKGlkIGludCwgdmFsIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3BhcnRfb3RoZXIucHRfYworICAgIFBBUlRJVElPTiBPRiBwZ3RibF9k ZGxfcGFydF9zLnB0CisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3BhcnRfcy5wdCc6OnJlZ2NsYXNzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwdCAoaWQgaW50 ZWdlciwgdmFsIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworIENSRUFURSBUQUJM RSBwZ3RibF9kZGxfcGFydF9vdGhlci5wdF9jIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcGFydF9z LnB0IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisoMiByb3dzKQorCitEUk9QIFNDSEVN QSBwZ3RibF9kZGxfcGFydF9zIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHBndGJsX2RkbF9wYXJ0X3MucHQKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9wYXJ0X290aGVy IENBU0NBREU7CistLSBMb2NhbGx5LWRlY2xhcmVkIENIRUNLIG9uIGEgcGFydGl0aW9uIGNoaWxk IGhhcyBubyBpbmxpbmUgY29sdW1uCistLSBsaXN0IHRvIGxpdmUgaW4gKFBBUlRJVElPTiBPRiBm b3JtKSwgc28gaXQgbXVzdCBjb21lIG91dCBhcyBhCistLSBzZXBhcmF0ZSBBTFRFUiBUQUJMRSAu Li4gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGsgKGlk IGludCwgdmFsIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFy dGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0YgcGFydGVkX2NoaworICAgIChDT05TVFJBSU5UIGNo a19pbmxpbmUgQ0hFQ0sgKHZhbCA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEw MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9jaGtfY2hpbGQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxf dGVzdC5wYXJ0ZWRfY2hrX2NoaWxkIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf Y2hrIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRs X3Rlc3QucGFydGVkX2Noa19jaGlsZCBBREQgQ09OU1RSQUlOVCBjaGtfaW5saW5lIENIRUNLICgo dmFsID4gMCkpOworKDIgcm93cykKKworRFJPUCBUQUJMRSBwYXJ0ZWRfY2hrOworLS0gSW5oZXJp dGFuY2UgY2hpbGRyZW4gb2YgYSBwYXJlbnQgd2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4gc2hvdWxk IG5vdAorLS0gZW1pdCBhbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIGZvciB0aGUgaW5o ZXJpdGVkIGdlbmVyYXRlZAorLS0gY29sdW1uOiB0aGUgR0VORVJBVEVEIGV4cHJlc3Npb24gY2Fy cmllcyBkb3duIHRocm91Z2ggaW5oZXJpdGFuY2UsCistLSBhbmQgU0VUIERFRkFVTFQgd291bGQg ZmFpbCBhdCByZXBsYXkgYWdhaW5zdCBhIGdlbmVyYXRlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUg cGFyX2dlbiAoCisgICAgaWQgaW50LAorICAgIGcgIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChp ZCAqIDIpIFNUT1JFRAorKTsKK0NSRUFURSBUQUJMRSBjaF9nZW4gKCkgSU5IRVJJVFMgKHBhcl9n ZW4pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaF9nZW4nOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoX2dlbiAoKSBJTkhFUklUUyAocGd0YmxfZGRs X3Rlc3QucGFyX2dlbik7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcGFyX2dlbiBDQVNDQURFOwor Tk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjaF9nZW4KKy0tIEEgdXNlci1uYW1lZCBO T1QgTlVMTCBvbiBhIGxvY2FsIGNvbHVtbiBpcyBlbWl0dGVkIGlubGluZSBhcworLS0gIkNPTlNU UkFJTlQgbmFtZSBOT1QgTlVMTCIgc28gdGhlIG9yaWdpbmFsIG5hbWUgaXMgcHJlc2VydmVkLiAg QW4KKy0tIGF1dG8tbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBh cyBhIHBsYWluIGlubGluZQorLS0gIk5PVCBOVUxMIiAtIFBHIHJlLWNyZWF0ZXMgdGhlIGF1dG8t bmFtZWQgY29uc3RyYWludCB3aGVuIENSRUFURQorLS0gVEFCTEUgcnVucywgc28gdGhlIGNvbnN0 cmFpbnQgbG9vcCBza2lwcyBib3RoIGZvcm1zIHRvIGF2b2lkIHRoZQorLS0gcmVkdW5kYW50IChh bmQgb24gdGFibGUtcmVuYW1lIG9yIHNlcXVlbmNlLWNvbGxpc2lvbiwgYnJva2VuKQorLS0gQUxU RVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIC4uLiBOT1QgTlVMTCBzdGF0ZW1lbnQuCitDUkVB VEUgVEFCTEUgbm5fbmFtZWQgKAorICAgIGEgaW50IENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEws CisgICAgYiBpbnQgTk9UIE5VTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J25uX25hbWVkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fbmFtZWQgKGEgaW50ZWdl ciBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLCBiIGludGVnZXIgTk9UIE5VTEwpOworKDEgcm93 KQorCitEUk9QIFRBQkxFIG5uX25hbWVkOworLS0gUmVuYW1pbmcgdGhlIHRhYmxlIGFmdGVyIGFu IElERU5USVRZIE5PVCBOVUxMIGNvbHVtbiB3YXMgZGVjbGFyZWQKKy0tIGxlYXZlcyB0aGUgYXV0 by1uYW1lZCBjb25zdHJhaW50IGZyb3plbiBhdCB0aGUgb3JpZ2luYWwgbmFtZSwgd2hpY2gKKy0t IG5vIGxvbmdlciBtYXRjaGVzIHRoZSBwb3N0LXJlbmFtZSAiPHRhYmxlPl88Y29sPl9ub3RfbnVs bCIgcGF0dGVybi4KKy0tIFRoZSBlbWl0dGVkIERETCBtdXN0IHN0aWxsIHJvdW5kLXRyaXA6IHRo ZSBjb25zdHJhaW50IGxvb3AgbXVzdCBub3QKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RS QUlOVCBhIHNlY29uZCBOT1QgTlVMTCwgc2luY2UgQ1JFQVRFIFRBQkxFCistLSB3aXRoIHRoZSBp bmxpbmUgSURFTlRJVFkgYWxyZWFkeSBjcmVhdGVzIGFuIGF1dG8tTk9ULU5VTEwgdW5kZXIgdGhl CistLSBuZXcgdGFibGUgbmFtZSBhbmQgUEcgb25seSBwZXJtaXRzIG9uZSBOT1QgTlVMTCBwZXIg Y29sdW1uLgorQ1JFQVRFIFRBQkxFIG5uX3JlbmFtZWQgKAorICAgIGEgaW50IEdFTkVSQVRFRCBB TFdBWVMgQVMgSURFTlRJVFkgTk9UIE5VTEwKKyk7CitBTFRFUiBUQUJMRSBubl9yZW5hbWVkIFJF TkFNRSBUTyBubl9yZW5hbWVkMjsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5f cmVuYW1lZDInOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0Lm5uX3JlbmFtZWQyIChhIGludGVnZXIgR0VORVJBVEVEIEFMV0FZ UyBBUyBJREVOVElUWSAoU0VRVUVOQ0UgTkFNRSBwZ3RibF9kZGxfdGVzdC5ubl9yZW5hbWVkX2Ff c2VxKSBDT05TVFJBSU5UIG5uX3JlbmFtZWRfYV9ub3RfbnVsbCBOT1QgTlVMTCk7CisoMSByb3cp CisKK0RST1AgVEFCTEUgbm5fcmVuYW1lZDI7CistLSBMb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxM IG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uICBUaGUgY29sdW1uIGl0c2VsZgorLS0gaXMgb21pdHRl ZCBmcm9tIHRoZSBjaGlsZCdzIGNvbHVtbiBsaXN0IChhdHRpc2xvY2FsPWZhbHNlKSwgc28gdGhl CistLSB1c2VyLW5hbWVkIE5PVCBOVUxMIG11c3QgY29tZSBvdXQgdmlhIHRoZSBwb3N0LUNSRUFU RSBjb25zdHJhaW50CistLSBsb29wIHJhdGhlciB0aGFuIGlubGluZS4KK0NSRUFURSBUQUJMRSBu bl9wYXIgKGEgaW50KTsKK0NSRUFURSBUQUJMRSBubl9jaCAoYiBpbnQpIElOSEVSSVRTIChubl9w YXIpOworQUxURVIgVEFCTEUgbm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwgYTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fY2gnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fY2ggKGIgaW50ZWdlcikgSU5I RVJJVFMgKHBndGJsX2RkbF90ZXN0Lm5uX3Bhcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3Qubm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwgYTsKKygyIHJvd3MpCisKK0RS T1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IG5uX2NoCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgZHJvcCB0aGUgc2NoZW1hIHBy ZWZpeCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Npb25zIGFuZCBpbmxpbmUgQ0hFQ0sgYm9kaWVz IHRoYXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCistLSBvYmplY3RzIChzZXF1ZW5jZSB2aWEgbmV4 dHZhbCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxsKS4gIFRoaXMKKy0tIHJlbGllcyBvbiB0aGUg ZGVwYXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggcmF0aGVyCistLSB0 aGFuIG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF94cmVm OworQ1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94cmVmLm15c2VxOworQ1JFQVRFIEZVTkNUSU9O IHBndGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5TIGludCBMQU5HVUFHRSBzcWwgSU1NVVRBQkxF CisgICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3hyZWYudCAoCisg ICAgaWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3BndGJsX2RkbF94cmVmLm15c2VxJyksCisgICAg dmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAocGd0YmxfZGRsX3hyZWYuZih2YWwp ID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF94cmVm LnQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBm YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+ IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgdCAoaWQgaW50ZWdlciBERUZBVUxUIG5leHR2 YWwoJ215c2VxJzo6cmVnY2xhc3MpLCB2YWwgaW50ZWdlciwgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sg KChmKHZhbCkgPiAwKSkpOworKDEgcm93KQorCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfeHJlZiBD QVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byAzIG90aGVyIG9iamVjdHMKK0RFVEFJ TDogIGRyb3AgY2FzY2FkZXMgdG8gc2VxdWVuY2UgcGd0YmxfZGRsX3hyZWYubXlzZXEKK2Ryb3Ag Y2FzY2FkZXMgdG8gZnVuY3Rpb24gcGd0YmxfZGRsX3hyZWYuZihpbnRlZ2VyKQorZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfeHJlZi50CistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl IG11c3QgTk9UIGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlCistLSBjb250ZW50cyBoYXBw ZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QuICBTdHJpbmcK Ky0tIGxpdGVyYWwgdGV4dCBpcyBvdXRwdXQgdmVyYmF0aW0gYnkgdGhlIGRlcGFyc2VyIGFuZCBp cyB1bmFmZmVjdGVkIGJ5CistLSBzZWFyY2hfcGF0aCBuYXJyb3dpbmcuCitDUkVBVEUgU0NIRU1B IHBndGJsX2RkbF9zdHI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3N0ci5wIChpZCBpbnQsIG5v dGUgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3N0ci5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3N0ci5wCisgICAgKENPTlNUUkFJTlQgY2hr IENIRUNLIChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNlY3JldCcpKQorICAgIEZPUiBWQUxVRVMg RlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJs X2RkbF9zdHIucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv d25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVh bGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFM VUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNo ayBDSEVDSyAoKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2VjcmV0Jzo6dGV4dCkpOworKDIgcm93 cykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3N0ciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfc3RyLnAKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFs c2UgbXVzdCBOT1QgY29ycnVwdCBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzCistLSB3aG9zZSBj b250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBk b3QKKy0tIChmb3IgZXhhbXBsZSBhIGNvbHVtbiBsaXRlcmFsbHkgbmFtZWQgIjxzY2hlbWE+Lndl aXJkIiBpbnNpZGUgdGhhdAorLS0gc2NoZW1hKS4gIFRoZSBtZWNoYW5pc20gaXMgcHVyZWx5IHNl YXJjaF9wYXRoIG5hcnJvd2luZzogdGhlIGRlcGFyc2VyCistLSBvdXRwdXRzIGF0dHJpYnV0ZSBu YW1lcyB2ZXJiYXRpbSBmcm9tIHBnX2F0dHJpYnV0ZSwgc28gdGhlIHF1b3RlZAorLS0gaWRlbnRp ZmllciBjb250ZW50IGlzIG5ldmVyIGV4YW1pbmVkIGZvciBzY2hlbWEgcHJlZml4ZXMuICBUaGlz IGhvbGRzCistLSBldmVuIHdoZW4gdGhlIHNjaGVtYSBuYW1lIGlzIGEgc2luZ2xlIGxldHRlci4K K0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3FpZDsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlk LnAgKGlkIGludCwgInBndGJsX2RkbF9xaWQud2VpcmQiIGludCkKKyAgICBQQVJUSVRJT04gQlkg UkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnBjIFBBUlRJVElPTiBPRiBw Z3RibF9kZGxfcWlkLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCJwZ3RibF9kZGxfcWlk LndlaXJkIiA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9xaWQucGMnOjpyZWdjbGFzcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBjIFBBUlRJVElPTiBPRiBw IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGMgQUREIENPTlNU UkFJTlQgY2hrIENIRUNLICgoInBndGJsX2RkbF9xaWQud2VpcmQiID4gMCkpOworKDIgcm93cykK KworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3FpZCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfcWlkLnAKKy0tIFNhbWUgd2l0aCBhIHNob3J0IChzaW5n bGUtbGV0dGVyKSBzY2hlbWEgbmFtZSB0byBjb25maXJtIHRoZXJlIGlzIG5vCistLSBtaW5pbXVt LWxlbmd0aCBhc3N1bXB0aW9uIGluIHRoZSBzdHJpcHBpbmcgcGF0aC4KK0NSRUFURSBTQ0hFTUEg cGd0YmxfZGRsX3ExOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xMS5wIChpZCBpbnQsICJwZ3Ri bF9kZGxfcTEud2VpcmQiIGludCkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFU RSBUQUJMRSBwZ3RibF9kZGxfcTEucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9xMS5wCisgICAg KENPTlNUUkFJTlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3ExLndlaXJkIiA+IDApKQorICAgIEZP UiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BndGJsX2RkbF9xMS5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj aGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBjIFBBUlRJVElPTiBPRiBwIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8g KDEwMCk7CisgQUxURVIgVEFCTEUgcGMgQUREIENPTlNUUkFJTlQgY2hrIENIRUNLICgoInBndGJs X2RkbF9xMS53ZWlyZCIgPiAwKSk7CisoMiByb3dzKQorCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxf cTEgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3Ex LnAKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugd2hlbiB0aGUgYmFzZSBzY2hlbWEgbmFtZSBp dHNlbGYgcmVxdWlyZXMKKy0tIHF1b3RpbmcgKGl0cyBwcmVmaXggc3RhcnRzIHdpdGggIikuICBC b3RoIGZvcm1zIG9mIHRoZSBwcmVmaXggLQorLS0gYmFyZS1sb3dlcmNhc2UgYW5kIHF1b3RlZCAt IG11c3QgYmUgc3RyaXBwZWQgZnJvbSBvdXRlcgorLS0gQUxURVIgVEFCTEUgLyBPTiAvIENSRUFU RSBJTkRFWCBwcmVmaXhlcywgd2hpbGUgaW5uZXIgcXVvdGVkCistLSBpZGVudGlmaWVycyB0aGF0 IGhhcHBlbiB0byBiZWdpbiB0aGUgc2FtZSB3YXkgbXVzdCBiZSBwcmVzZXJ2ZWQuCitDUkVBVEUg U0NIRU1BICJQZ1RibC1EZGwtUSI7CitDUkVBVEUgVEFCTEUgIlBnVGJsLURkbC1RIi4iVCIgKGlk IGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAodmFsID4gMCkpOworQ1JF QVRFIElOREVYICJUX3ZhbF9pZHgiIE9OICJQZ1RibC1EZGwtUSIuIlQiICh2YWwpOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCciUGdUYmwtRGRsLVEiLiJUIic6OnJlZ2NsYXNzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSAi VCIgKGlkIGludGVnZXIsIHZhbCBpbnRlZ2VyLCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKHZhbCA+ IDApKSk7CisgQ1JFQVRFIElOREVYICJUX3ZhbF9pZHgiIE9OICJUIiBVU0lORyBidHJlZSAodmFs KTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BICJQZ1RibC1EZGwtUSIgQ0FTQ0FERTsKK05PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgIlBnVGJsLURkbC1RIi4iVCIKKy0tIEVycm9yOiBu b3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUuCitDUkVBVEUgVklFVyB2IEFTIFNF TEVDVCAxIEFTIHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3YnOjpyZWdjbGFz cyk7CitFUlJPUjogICJ2IiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUK K0NSRUFURSBTRVFVRU5DRSBzOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzJzo6 cmVnY2xhc3MpOworRVJST1I6ICAicyIgaXMgbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVk IHRhYmxlCistLSBOVUxMIGFyZ3VtZW50IHJldHVybnMgbm8gcm93cy4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbChOVUxMKTsKKyBwZ19nZXRfdGFibGVfZGRsIAorLS0tLS0tLS0tLS0t LS0tLS0tCisoMCByb3dzKQorCistLSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHZhbGlk YXRpb246IGlmIHRoZSByZWZlcmVuY2VkIGluZGV4CistLSB3b3VsZCBub3QgYmUgZW1pdHRlZCAo YmVjYXVzZSBpdHMgc291cmNlIGtpbmQgaXMgc3VwcHJlc3NlZCkgYnV0CistLSByZXBsaWNhX2lk ZW50aXR5IGl0c2VsZiB3b3VsZCBiZSwgdGhlIGZ1bmN0aW9uIHJhaXNlcyBhbiBlcnJvciBzbwor LS0gdGhlIGVtaXR0ZWQgRERMIG5ldmVyIGRhbmdsZXMuICBFeGVyY2lzZSBhbGwgdGhyZWUgY29u c3RyYWludC1iYWNrZWQKKy0tIGZvcm1zIChQSywgVU5JUVVFLCBFWENMVVNJT04pIGFuZCBhIGJh cmUgQ1JFQVRFIFVOSVFVRSBJTkRFWCwgaW4KKy0tIGJvdGggdGhlIGV4Y2VwdC1saXN0IGFuZCBv bmx5LWxpc3Qgc2hhcGVzLgorLS0KKy0tIFBLLWJhY2tlZDogZXhjZXB0X2tpbmRzPXByaW1hcnlf a2V5IHdpdGhvdXQgZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkuCitDUkVBVEUgVEFCTEUg cmlfcGtfZXhjbCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQUxURVIgVEFCTEUgcmlfcGtfZXhjbCBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX3BrX2V4Y2xfcGtleTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfcGtfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSddKTsKK0VSUk9SOiAgUkVQTElD QSBJREVOVElUWSBmb3IgdGFibGUgInJpX3BrX2V4Y2wiIHJlcXVpcmVzIGtpbmQgInByaW1hcnlf a2V5IiB0byBiZSBlbWl0dGVkCitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhlICJwcmltYXJ5 X2tleSIga2luZCwgd2hpY2ggaXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVp dGhlciBhZGQgInByaW1hcnlfa2V5IiB0byB0aGUgZmlsdGVyIG9yIHJlbW92ZSAicmVwbGljYV9p ZGVudGl0eSIgZnJvbSBpdC4KKy0tIFNhbWUgY2FsbCBidXQgYWxzbyBleGNsdWRpbmcgcmVwbGlj YV9pZGVudGl0eSBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlf cGtfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZ WydwcmltYXJ5X2tleScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfcGtfZXhjbCAoYSBpbnRlZ2VyIE5PVCBOVUxMKTsK KygxIHJvdykKKworRFJPUCBUQUJMRSByaV9wa19leGNsOworLS0gVU5JUVVFLWNvbnN0cmFpbnQt YmFja2VkIHJlcGxpY2EgaWRlbnRpdHkgaW5kZXguCitDUkVBVEUgVEFCTEUgcmlfdW5pcV9leGNs IChhIGludCBOT1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FMVEVSIFRBQkxFIHJpX3VuaXFfZXhj bCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX3VuaXFfZXhjbF9hX2tleTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfdW5pcV9leGNsJzo6cmVnY2xhc3MsIG93bmVy ID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZSddKTsKK0VSUk9SOiAgUkVQ TElDQSBJREVOVElUWSBmb3IgdGFibGUgInJpX3VuaXFfZXhjbCIgcmVxdWlyZXMga2luZCAidW5p cXVlIiB0byBiZSBlbWl0dGVkCitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhlICJ1bmlxdWUi IGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4KK0hJTlQ6ICBFaXRoZXIg YWRkICJ1bmlxdWUiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJyZXBsaWNhX2lkZW50aXR5IiBm cm9tIGl0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV91bmlxX2V4Y2wnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJywn cmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX3VuaXFfZXhjbCAoYSBpbnRlZ2Vy IE5PVCBOVUxMLCBiIGludGVnZXIpOworKDEgcm93KQorCitEUk9QIFRBQkxFIHJpX3VuaXFfZXhj bDsKKy0tIEJhcmUgQ1JFQVRFIFVOSVFVRSBJTkRFWCAobm8gYmFja2luZyBjb25zdHJhaW50KSB1 c2VkIGFzIFJFUExJQ0EKKy0tIElERU5USVRZOiB0aGUgaW5kZXggaXMgZW1pdHRlZCBieSB0aGUg ImluZGV4IiBraW5kLCBzbyBleGNsdWRpbmcKKy0tICJpbmRleCIgd2l0aG91dCBhbHNvIGV4Y2x1 ZGluZyAicmVwbGljYV9pZGVudGl0eSIgbXVzdCBlcnJvci4KK0NSRUFURSBUQUJMRSByaV9pZHhf ZXhjbCAoYSBpbnQgTk9UIE5VTEwsIGIgaW50KTsKK0NSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4 X2V4Y2xfYV91bmlxIE9OIHJpX2lkeF9leGNsIChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeF9leGNs IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2V4Y2xfYV91bmlxOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHhfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsKK0VSUk9SOiAgUkVQTElD QSBJREVOVElUWSBmb3IgdGFibGUgInJpX2lkeF9leGNsIiByZXF1aXJlcyBraW5kICJpbmRleCIg dG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhlIHRhYmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lO RyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHByb2R1Y2VkIGJ5IHRoZSAiaW5kZXgiIGtpbmQs IHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4KK0hJTlQ6ICBFaXRoZXIgYWRkICJp bmRleCIgdG8gdGhlIGZpbHRlciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZyb20gaXQu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2luZGV4JywncmVwbGljYV9p ZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9pZHhfZXhjbCAoYSBpbnRlZ2VyIE5PVCBOVUxMLCBi IGludGVnZXIpOworKDEgcm93KQorCitEUk9QIFRBQkxFIHJpX2lkeF9leGNsOworLS0gSW5jbHVk ZS1zaWRlIGFuYWxvZzogb25seV9raW5kcz1yZXBsaWNhX2lkZW50aXR5IG11c3QgaW5jbHVkZSB0 aGUga2luZAorLS0gdGhhdCBlbWl0cyB0aGUgaW5kZXgsIG9yIHRoZSBmdW5jdGlvbiBlcnJvcnMu CitDUkVBVEUgVEFCTEUgcmlfb25seSAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7CitB TFRFUiBUQUJMRSByaV9vbmx5IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfb25seV9h X2tleTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfb25seSc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSdd KTsKK0VSUk9SOiAgUkVQTElDQSBJREVOVElUWSBmb3IgdGFibGUgInJpX29ubHkiIHJlcXVpcmVz IGtpbmQgInVuaXF1ZSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhlIHRhYmxlJ3MgUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHByb2R1Y2VkIGJ5IHRo ZSAidW5pcXVlIiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIuCitISU5U OiAgRWl0aGVyIGFkZCAidW5pcXVlIiB0byB0aGUgZmlsdGVyIG9yIHJlbW92ZSAicmVwbGljYV9p ZGVudGl0eSIgZnJvbSBpdC4KKy0tIEluY2x1ZGluZyBib3RoIGtpbmRzIHN1Y2NlZWRzLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdyZXBsaWNhX2lkZW50aXR5J10p OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxU RVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qucmlfb25seSBBREQgQ09OU1RSQUlOVCByaV9vbmx5X2Ff a2V5IFVOSVFVRSAoYSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qucmlfb25seSBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX29ubHlfYV9rZXk7CisoMiByb3dzKQorCitEUk9Q IFRBQkxFIHJpX29ubHk7CistLSBQZXIta2luZCBvbmx5X2tpbmRzIC8gZXhjZXB0X2tpbmRzIGNv dmVyYWdlLiAgRm9yIGVhY2gga2luZCBpbiB0aGUgdm9jYWJ1bGFyeSwKKy0tIHZlcmlmeSB0aGF0 IG9ubHlfa2luZHM9SyBlbWl0cyBqdXN0IHRoYXQga2luZCdzIG91dHB1dCBhbmQgdGhhdCBleGNl cHRfa2luZHM9SworLS0gb21pdHMganVzdCB0aGF0IGtpbmQncyBvdXRwdXQuICBLaW5kcyB3aXRo IG5vIGZpeHR1cmUgYWJvdmUgKHRyaWdnZXIsCistLSBwb2xpY3kpIGFyZSBzdGlsbCByZWNvZ25p emVkIGJ1dCBjdXJyZW50bHkgZW1pdCBub3RoaW5nOyBvbmx5X2tpbmRzPUsKKy0tIHJldHVybnMg emVybyByb3dzIGZvciB0aGVtLiAgRml4dHVyZXMgdXNlZDoKKy0tICAgaWR4ZDogUEsgKyB0d28g c2Vjb25kYXJ5IENSRUFURSBJTkRFWAorLS0gICBjb25zOiBQSyArIFVOSVFVRSArIENIRUNLICsg RksgKGNvbnN0cmFpbnQtYmFja2VkKQorLS0gICBydDogICBDUkVBVEUgUlVMRQorLS0gICBzdHg6 ICBDUkVBVEUgU1RBVElTVElDUworLS0gICBybHM6ICBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNF Q1VSSVRZCistLSAgIHJpX2Z1bGw6IFJFUExJQ0EgSURFTlRJVFkgRlVMTCAobm8gc291cmNlLWtp bmQgZGVwZW5kZW5jeSkKK0NSRUFURSBUQUJMRSBleGNsX2ZpeCAocm5nIGludDRyYW5nZSwKKyAg ICBFWENMVURFIFVTSU5HIGdpc3QgKHJuZyBXSVRIICYmKSk7CistLSBvbmx5X2tpbmRzPUs6IGVt aXQgb25seSBraW5kIEsncyBzdGF0ZW1lbnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZ WydpbmRleCddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVz dC5pZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFy dGlhbCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4g MTAwKTsKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9r ZXknXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFS WSBLRVkgKGlkKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdj b25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd1bmlx dWUnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsKKygx IHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2ZpeCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnZXhjbHVzaW9uJ10pOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QuZXhjbF9maXggQUREIENPTlNUUkFJTlQgZXhjbF9maXhfcm5nX2V4Y2wgRVhD TFVERSBVU0lORyBnaXN0IChybmcgV0lUSCAmJik7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBBUyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIE9OIElOU0VSVCBUTyBw Z3RibF9kZGxfdGVzdC5ydCBETyAgSU5TRVJUIElOVE8gcGd0YmxfZGRsX3Rlc3QucnRfbG9nIChp ZCkrCisgICBWQUxVRVMgKG5ldy5pZCk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydzdGF0aXN0aWNzJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgU1RBVElTVElDUyBwZ3RibF9k ZGxfdGVzdC5zdHhfbmR2IChuZGlzdGluY3QpIE9OIGEsIGIgRlJPTSBwZ3RibF9kZGxfdGVzdC5z dHg7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydybHMnXSk7CisgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNV UklUWTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgRk9SQ0UgUk9XIExFVkVMIFNF Q1VSSVRZOworKDIgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9m dWxsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydyZXBs aWNhX2lkZW50aXR5J10pOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qucmlf ZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7CisoMSByb3cpCisKKy0tIHRyaWdnZXIgLyBwb2xp Y3kgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQ7IHVuY29tbWVudCB3aGVuCistLSBwZ19nZXRfdHJp Z2dlcl9kZGwgLyBwZ19nZXRfcG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCistLSBTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBv bmx5X2tpbmRzID0+IEFSUkFZWyd0cmlnZ2VyJ10pOworLS0gU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9 PiBBUlJBWVsncG9saWN5J10pOworLS0gZXhjZXB0X2tpbmRzPUs6IGVtaXQgZXZlcnl0aGluZyBl eGNlcHQga2luZCBLJ3Mgc3RhdGVtZW50cy4gIFBLL1VOSVFVRS8KKy0tIElOREVYIGFyZSBleGVy Y2lzZWQgb24gdGFibGVzIHdpdGhvdXQgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWAorLS0g c28gdGhlIHZhbGlkYXRpb24gZG9lcyBub3QgdHJpcC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+ IEFSUkFZWydwcmltYXJ5X2tleSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu aWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVBVEUgSU5ERVggaWR4 ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihuYW1lKSk7 CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5H IGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygzIHJvd3MpCisKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0 X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIsIENPTlNUUkFJTlQgY29u c19hX2NoZWNrIENIRUNLICgoYSA+IDApKSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu Y29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNF UyBwZ3RibF9kZGxfdGVzdC5yZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsK KygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydjaGVjayddKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIs IGMgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RS QUlOVCBjb25zX2Jfa2V5IFVOSVFVRSAoYik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu Y29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNF UyBwZ3RibF9kZGxfdGVzdC5yZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsK KygzIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZXhjbF9maXgnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnZXhjbHVzaW9u J10pOworICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5leGNsX2ZpeCAocm5nIGludDRyYW5n ZSk7CisoMSByb3cpCisKKy0tIHRyaWdnZXIgLyBwb2xpY3kgYXJlIG5vdCB5ZXQgaW1wbGVtZW50 ZWQ7IHVuY29tbWVudCB3aGVuCistLSBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRfcG9saWN5 X2RkbCBoZWxwZXJzIGxhbmQuCistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jh c2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3Ry aWdnZXInXSk7CistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3BvbGljeSddKTsK Ky0tIGV4Y2VwdF9raW5kcz10YWJsZSBzdXBwcmVzc2VzIHRoZSBDUkVBVEUgVEFCTEUgKyBPV05F UiArIGNoaWxkLWRlZmF1bHQKKy0tIFNFVCBERUZBVUxUICsgYXR0b3B0aW9ucyBwYXNzZXMsIGxl YXZpbmcgb25seSB0aGUgc3ViLW9iamVjdCBwYXNzZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9 PiBBUlJBWVsndGFibGUnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBp ZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJF IChpZCA+IDEwMCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RS QUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygzIHJvd3MpCisKKy0tIE11bHRpLWtp bmQgY29tcG9zaXRpb25zLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd0YWJsZScsJ2lu ZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2Vy IE5PVCBOVUxMLCBuYW1lIHRleHQpOworIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIHBndGJs X2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVgg aWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVS RSAoaWQgPiAxMDApOworKDMgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydw cmltYXJ5X2tleScsJ2ZvcmVpZ25fa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVS RU5DRVMgcGd0YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJS RUQ7CisoMSByb3cpCisKKy0tIER1cGxpY2F0ZSBlbnRyaWVzIGluIHRoZSBsaXN0IGFyZSBzaWxl bnRseSBkZS1kdXBsaWNhdGVkIGJ5IHRoZQorLS0gQml0bWFwc2V0LgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tp bmRzID0+IEFSUkFZWydpbmRleCcsJ2luZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBJTkRFWCBpZHhkX2xv d2VyIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBD UkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRy ZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworKDIgcm93cykKKworRFJPUCBUQUJMRSBleGNsX2Zp eDsKKy0tIEtpbmQtZmlsdGVyIHRlc3RzIG9uIHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGluZGV4 ZXMuCistLQorLS0gb25seV9raW5kcz1pbmRleCBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBvbmx5 IHRoZSByb290IENSRUFURSBJTkRFWCBpcworLS0gZW1pdHRlZDsgbm8gQ1JFQVRFIFRBQkxFLCBu byBwYXJ0aXRpb24gY2hpbGRyZW4gKEtJTkRfUEFSVElUSU9OIGFic2VudCkuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9taXhlZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZ WydpbmRleCddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgSU5ERVggcGFydGVkX21peGVkX2lkIE9OIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9taXhlZCBVU0lORyBidHJlZSAoaWQpOworKDEgcm93KQorCistLSBleGNlcHRfa2luZHM9aW5k ZXggb24gYSBwYXJ0aXRpb25lZCB0YWJsZTogQ1JFQVRFIFRBQkxFIGZvciB0aGUgcGFyZW50Cist LSBhbmQgYWxsIGNoaWxkcmVuIGFyZSBlbWl0dGVkOyBubyBpbmRleCBzdGF0ZW1lbnRzLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4ZWQnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0X2tpbmRz ID0+IEFSUkFZWydpbmRleCddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX21peGVkIChpZCBp bnRlZ2VyLCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9taXhlZF9hIFBBUlRJVElPTiBPRiBwZ3RibF9k ZGxfdGVzdC5wYXJ0ZWRfbWl4ZWQgRk9SIFZBTFVFUyBJTiAoJ2EnKTsKKygyIHJvd3MpCisKKy0t IG9ubHlfa2luZHM9cHJpbWFyeV9rZXkgb24gYSBwYXJ0aXRpb25lZCB0YWJsZTogb25seSB0aGUg QUxURVIgVEFCTEUgQURECistLSBDT05TVFJBSU5UIFBLIG9uIHRoZSBwYXJlbnQ7IHRoZSBjaGls ZCdzIGluaGVyaXRlZCBQSyAoY29uaXNsb2NhbD1mYWxzZSkKKy0tIGlzIHNraXBwZWQ7IG5vIENS RUFURSBUQUJMRSwgbm8gcGFydGl0aW9uIGNoaWxkcmVuLgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwYXJ0ZWRfcGsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb25seV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXkn XSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX3BrIEFERCBDT05TVFJBSU5UIHBhcnRlZF9wa19wa2V5IFBSSU1BUlkgS0VZIChpZCwgcmVn aW9uKTsKKygxIHJvdykKKworLS0gb25seV9raW5kcz1LIG9uIGEgdGFibGUgdGhhdCBkb2VzIG5v dCBoYXZlIGFueSBLIG9mIHRoYXQga2luZCBpcyBhIHZhbGlkCistLSBmaWx0ZXIgYW5kIHJldHVy bnMgemVybyByb3dzLiAgVGVzdGVkIHByZXZpb3VzbHkgd2l0aCBmb3JlaWduX2tleQorLS0gb24g J3JlZmQnOyBoZXJlIGFsc28gcnVsZSwgc3RhdGlzdGljcywgcmxzLCByZXBsaWNhX2lkZW50aXR5 LCBhbmQKKy0tIGV4Y2x1c2lvbiBvbiAnYmFzaWMnICh3aGljaCBoYXMgb25seSBQSyArIGNvbHVt bnMpLgorU0VMRUNUIGNvdW50KCopIEFTIHJ1bGVfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZ WydydWxlJ10pOworIHJ1bGVfcm93cyAKKy0tLS0tLS0tLS0tCisgICAgICAgICAwCisoMSByb3cp CisKK1NFTEVDVCBjb3VudCgqKSBBUyBzdGF0c19yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlb J3N0YXRpc3RpY3MnXSk7Cisgc3RhdHNfcm93cyAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDAK KygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEFTIHJsc19yb3dzCisgIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3JscyddKTsKKyBybHNfcm93cyAKKy0tLS0tLS0tLS0KKyAgICAgICAgMAorKDEgcm93 KQorCitTRUxFQ1QgY291bnQoKikgQVMgcmlfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydy ZXBsaWNhX2lkZW50aXR5J10pOworIHJpX3Jvd3MgCistLS0tLS0tLS0KKyAgICAgICAwCisoMSBy b3cpCisKK1NFTEVDVCBjb3VudCgqKSBBUyBleGNsX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJB WVsnZXhjbHVzaW9uJ10pOworIGV4Y2xfcm93cyAKKy0tLS0tLS0tLS0tCisgICAgICAgICAwCiso MSByb3cpCisKKy0tIElucHV0LXZhbGlkYXRpb24gZWRnZSBjYXNlcyBmb3IgdGhlIGtpbmQgYXJy YXkuICBBbGwKKy0tIG9mIHRoZXNlIHJhaXNlIGFuIGVycm9yOyB0aGUgZnVuY3Rpb24gbmV2ZXIg cmVhY2hlcyByZWxhdGlvbiBvcGVuLgorLS0gRW1wdHkgYXJyYXk6CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG9ubHlfa2luZHMgPT4gQVJSQVlbXTo6 dGV4dFtdKTsKK0VSUk9SOiAgcGFyYW1ldGVyICJvbmx5X2tpbmRzIiBtdXN0IHNwZWNpZnkgYXQg bGVhc3Qgb25lIGtpbmQKKy0tIE5VTEwgZWxlbWVudDoKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJBWVtOVUxMOjp0ZXh0 XSk7CitFUlJPUjogIHBhcmFtZXRlciAib25seV9raW5kcyIgbXVzdCBub3QgY29udGFpbiBOVUxM IGVsZW1lbnRzCistLSBVbnJlY29nbml6ZWQga2luZDoKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJBWVsnbm9fc3VjaF9r aW5kJ10pOworRVJST1I6ICB1bnJlY29nbml6ZWQga2luZCAibm9fc3VjaF9raW5kIiBpbiBwYXJh bWV0ZXIgIm9ubHlfa2luZHMiCistLSBTYW1lIGtpbmQgc3BlY2lmaWVkIHRocm91Z2ggYm90aCBw YXJhbWV0ZXJzIGlzIHN0aWxsIG11dGV4LXJlamVjdGVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworRVJST1I6ICAib25seV9r aW5kcyIgYW5kICJleGNlcHRfa2luZHMiIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2 ZQorLS0gUm91bmQtdHJpcCB2ZXJpZmljYXRpb24uICBGb3IgZXZlcnkgdGVzdCB0YWJsZSwgY2Fw dHVyZSB0aGUgRERMIHRoZQorLS0gZnVuY3Rpb24gZW1pdHMsIGRyb3AgdGhlIHNjaGVtYSwgcmVw bGF5IGVhY2ggdGFibGUncyBEREwgaW4KKy0tIGRlcGVuZGVuY3kgb3JkZXIsIGFuZCBjb25maXJt IHRoYXQgcGdfZ2V0X3RhYmxlX2RkbCBvbiB0aGUgcmVjcmVhdGVkCistLSByZWxhdGlvbiBtYXRj aGVzIHRoZSBvcmlnaW5hbCBsaW5lLWZvci1saW5lLiAgVGhlIGZpbmFsIFNFTEVDVCBtdXN0Cist LSByZXR1cm4gemVybyByb3dzLgorQ1JFQVRFIFRFTVAgVEFCTEUgcGd0YmxfZGRsX3J0X29yaWcg KG5hbWUgdGV4dCwgb3JkIGludCwgbGluZSB0ZXh0KTsKK0lOU0VSVCBJTlRPIHBndGJsX2RkbF9y dF9vcmlnCitTRUxFQ1QgdC5uYW1lLCBvLm9yZCwgby5saW5lCitGUk9NIChWQUxVRVMKKyAgICAg ICAgKCdiYXNpYycpLCAoJ2lkX2NvbHMnKSwgKCdpZF9jdXN0b20nKSwgKCdnZW5fY29scycpLCAo J2dlbl92aXJ0dWFsJyksICgnc3RvcmFnZV9jb2xzJyksCisgICAgICAgICgncmVmZCcpLCAoJ2Nv bnMnKSwgKCdudWxsc19uZCcpLCAoJ2lkeF9pbmMnKSwKKyAgICAgICAgKCdma19hY3RzX3RndCcp LCAoJ2ZrX2FjdHMnKSwgKCdub3RlbmZfdGd0JyksICgnbm90ZW5mJyksICgnc2VsZl9yZWYnKSwg KCd0ZW1wb3JhbF9waycpLAorICAgICAgICAoJ2lkeGQnKSwKKyAgICAgICAgKCdwYXInKSwgKCdj aCcpLCAoJ2F0dG9wdCcpLAorICAgICAgICAoJ3BhcnRlZF9yYW5nZScpLCAoJ3BhcnRlZF9yYW5n ZV8xJyksICgncGFydGVkX3JhbmdlX2RlZicpLAorICAgICAgICAoJ3BhcnRlZF9oYXNoJyksICgn cGFydGVkX2hhc2hfMCcpLAorICAgICAgICAoJ3BhcnRlZF9saXN0JyksCisgICAgICAgICgncGFy dGVkX2lkeCcpLCAoJ3BhcnRlZF9pZHhfYScpLAorICAgICAgICAoJ3BhcnRlZF9wbGFpbicpLCAo J3BhcnRlZF9wbGFpbl9hJyksCisgICAgICAgICgncGFydGVkX3BrJyksICgncGFydGVkX3BrX2En KSwKKyAgICAgICAgKCdwYXJ0ZWRfc3ViJyksICgncGFydGVkX3N1Yl9hJyksICgncGFydGVkX3N1 Yl9hMScpLAorICAgICAgICAoJ3BhcnRlZF9jaGlsZF9pZHgnKSwgKCdwYXJ0ZWRfY2hpbGRfaWR4 X2EnKSwKKyAgICAgICAgKCdwYXJ0ZWRfbWl4ZWQnKSwgKCdwYXJ0ZWRfbWl4ZWRfYScpLAorICAg ICAgICAoJ3BhcnRlZF9ma190Z3QnKSwgKCdwYXJ0ZWRfZmsnKSwgKCdwYXJ0ZWRfZmtfYScpLAor ICAgICAgICAoJ3J0X2xvZycpLCAoJ3J0JyksCisgICAgICAgICgnc3R4JyksICgncmxzJyksICgn cmlfZnVsbCcpLCAoJ3JpX2lkeCcpLCAoJ3VubycpCisgICAgICkgQVMgdChuYW1lKSwKKyAgICAg TEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpy ZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlKSBX SVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpOworRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJsZXMg Q09OU1RBTlQgdGV4dFtdIDo9IEFSUkFZWworICAgICAgICAnYmFzaWMnLCAnaWRfY29scycsICdp ZF9jdXN0b20nLCAnZ2VuX2NvbHMnLCAnZ2VuX3ZpcnR1YWwnLCAnc3RvcmFnZV9jb2xzJywKKyAg ICAgICAgJ3JlZmQnLCAnY29ucycsICdudWxsc19uZCcsICdpZHhfaW5jJywKKyAgICAgICAgJ2Zr X2FjdHNfdGd0JywgJ2ZrX2FjdHMnLCAnbm90ZW5mX3RndCcsICdub3RlbmYnLCAnc2VsZl9yZWYn LCAndGVtcG9yYWxfcGsnLAorICAgICAgICAnaWR4ZCcsCisgICAgICAgICdwYXInLCAnY2gnLCAn YXR0b3B0JywKKyAgICAgICAgJ3BhcnRlZF9yYW5nZScsICdwYXJ0ZWRfcmFuZ2VfMScsICdwYXJ0 ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAgJ3BhcnRlZF9oYXNoJywgJ3BhcnRlZF9oYXNoXzAnLAor ICAgICAgICAncGFydGVkX2xpc3QnLAorICAgICAgICAncGFydGVkX2lkeCcsICdwYXJ0ZWRfaWR4 X2EnLAorICAgICAgICAncGFydGVkX3BsYWluJywgJ3BhcnRlZF9wbGFpbl9hJywKKyAgICAgICAg J3BhcnRlZF9waycsICdwYXJ0ZWRfcGtfYScsCisgICAgICAgICdwYXJ0ZWRfc3ViJywgJ3BhcnRl ZF9zdWJfYScsICdwYXJ0ZWRfc3ViX2ExJywKKyAgICAgICAgJ3BhcnRlZF9jaGlsZF9pZHgnLCAn cGFydGVkX2NoaWxkX2lkeF9hJywKKyAgICAgICAgJ3BhcnRlZF9taXhlZCcsICdwYXJ0ZWRfbWl4 ZWRfYScsCisgICAgICAgICdwYXJ0ZWRfZmtfdGd0JywgJ3BhcnRlZF9maycsICdwYXJ0ZWRfZmtf YScsCisgICAgICAgICdydF9sb2cnLCAncnQnLAorICAgICAgICAnc3R4JywgJ3JscycsICdyaV9m dWxsJywgJ3JpX2lkeCcsICd1bm8nCisgICAgXTsKKyAgICB0IHRleHQ7CisgICAgc3RtdCB0ZXh0 OworQkVHSU4KKyAgICBEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworICAgIENS RUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7CisgICAgRk9SRUFDSCB0IElOIEFSUkFZIHRhYmxl cyBMT09QCisgICAgICAgIEZPUiBzdG10IElOCisgICAgICAgICAgICBTRUxFQ1QgbGluZSBGUk9N IHBndGJsX2RkbF9ydF9vcmlnIFdIRVJFIG5hbWUgPSB0IE9SREVSIEJZIG9yZAorICAgICAgICBM T09QCisgICAgICAgICAgICBCRUdJTgorICAgICAgICAgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAg ICAgICAgICAgIEVYQ0VQVElPTiBXSEVOIGR1cGxpY2F0ZV90YWJsZSBUSEVOCisgICAgICAgICAg ICAgICAgTlVMTDsgIC0tIHBhcnRpdGlvbiBjaGlsZCBhbHJlYWR5IGNyZWF0ZWQgYnkgaXRzIHBh cmVudCdzIERETAorICAgICAgICAgICAgRU5EOworICAgICAgICBFTkQgTE9PUDsKKyAgICBFTkQg TE9PUDsKK0VORCAkJDsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gNDMgb3RoZXIgb2JqZWN0 cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQorZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fdmly dHVhbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgcmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIG51bGxzX25kCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeF9pbmMKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgZmtfYWN0c190Z3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtf YWN0cworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBub3RlbmZfdGd0Citkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIG5vdGVuZgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzZWxmX3JlZgorZHJvcCBjYXNj YWRlcyB0byB0YWJsZSB0ZW1wb3JhbF9waworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZHhkCitk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjaAorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBhdHRvcHQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVk X3JhbmdlCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9oYXNoCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBhcnRlZF9saXN0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9pZHgK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX3BsYWluCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHBhcnRlZF9waworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfc3ViCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9jaGlsZF9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cGFydGVkX21peGVkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9ma190Z3QKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2ZrCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJ0Citk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJ0X2xvZworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdHgK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJpX2Z1 bGwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfaWR4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHVubworZHJvcCBjYXNjYWRlcyB0byB0eXBlIHR5cGVkX3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgdHlwZWRfcGxhaW4KK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdHlwZWRfb3ZlcgorZHJvcCBj YXNjYWRlcyB0byB2aWV3IHYKK2Ryb3AgY2FzY2FkZXMgdG8gc2VxdWVuY2UgcworV0lUSCBhZnRl cl9kZGwgQVMgKAorICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKKyAgICBGUk9NIChT RUxFQ1QgRElTVElOQ1QgbmFtZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKSBBUyB0LAorICAgICAg ICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUp OjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBm YWxzZSkgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3JkKQorKQorKFNFTEVDVCAnbWlzc2luZy1p bi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZwor IEVYQ0VQVAorIFNFTEVDVCAnbWlzc2luZy1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00g YWZ0ZXJfZGRsKQorVU5JT04gQUxMCisoU0VMRUNUICdleHRyYS1pbi1jb3B5JyBBUyBraW5kLCBu YW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwKKyBFWENFUFQKKyBTRUxFQ1QgJ2V4dHJhLWlu LWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykKK09SREVSIEJZ IGtpbmQsIG5hbWUsIG9yZDsKKyBraW5kIHwgbmFtZSB8IG9yZCB8IGxpbmUgCistLS0tLS0rLS0t LS0tKy0tLS0tKy0tLS0tLQorKDAgcm93cykKKworLS0gQ2xlYW51cC4KK0RST1AgU0NIRU1BIHBn dGJsX2RkbF90ZXN0IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDM4IG90aGVy IG9iamVjdHMKK0RFVEFJTDogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgYmFzaWMKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgaWRfY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZF9jdXN0b20K K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZ2VuX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg Z2VuX3ZpcnR1YWwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgc3RvcmFnZV9jb2xzCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIHJlZmQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgY29ucworZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBudWxsc19uZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZHhfaW5j Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGZrX2FjdHNfdGd0Citkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIGZrX2FjdHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgbm90ZW5mX3RndAorZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBub3RlbmYKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgc2VsZl9yZWYKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgdGVtcG9yYWxfcGsKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg aWR4ZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXIKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg Y2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgYXR0b3B0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHBhcnRlZF9yYW5nZQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfaGFzaAorZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfbGlzdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0 ZWRfaWR4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9wbGFpbgorZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBwYXJ0ZWRfcGsKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX3N1Ygor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfY2hpbGRfaWR4Citkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIHBhcnRlZF9taXhlZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfZmtfdGd0 Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9maworZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBydF9sb2cKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgc3R4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJscworZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSByaV9mdWxsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJpX2lkeAorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSB1bm8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1 bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDhmYTBhNmM0N2Zi Li45ZWNhNjRjY2EzYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC04MSw3ICs4 MSw3IEBAIHRlc3Q6IGNyZWF0ZV90YWJsZV9saWtlIGFsdGVyX2dlbmVyaWMgYWx0ZXJfb3BlcmF0 b3IgbWlzYyBhc3luYyBkYnNpemUgbWVyZ2UgbWlzCiAjIGNvbGxhdGUubGludXgudXRmOCBhbmQg Y29sbGF0ZS5pY3UudXRmOCB0ZXN0cyBjYW5ub3QgYmUgcnVuIGluIHBhcmFsbGVsIHdpdGggZWFj aCBvdGhlcgogIyBwc3FsIGRlcGVuZHMgb24gY3JlYXRlX2FtCiAjIGFtdXRpbHMgZGVwZW5kcyBv biBnZW9tZXRyeSwgY3JlYXRlX2luZGV4X3NwZ2lzdCwgaGFzaF9pbmRleCwgYnJpbgotdGVzdDog cnVsZXMgcHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxfcGlwZWxpbmUgYW11dGlscyBzdGF0c19leHQg Y29sbGF0ZS5saW51eC51dGY4IGNvbGxhdGUud2luZG93cy53aW4xMjUyCit0ZXN0OiBydWxlcyBw c3FsIHBzcWxfY3Jvc3N0YWIgcHNxbF9waXBlbGluZSBhbXV0aWxzIHN0YXRzX2V4dCBjb2xsYXRl LmxpbnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndpbjEyNTIgcGdfZ2V0X3RhYmxlX2RkbAogCiAj IC0tLS0tLS0tLS0KICMgUnVuIHRoZXNlIGFsb25lIHNvIHRoZXkgZG9uJ3QgcnVuIG91dCBvZiBw YXJhbGxlbCB3b3JrZXJzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRf dGFibGVfZGRsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYWRjNDFmZjdlYgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3Fs CkBAIC0wLDAgKzEsODc5IEBACistLQorLS0gcGdfZ2V0X3RhYmxlX2RkbAorLS0KKy0tIEFsbCB0 ZXN0cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUgQUxURVIgVEFCTEUgT1dORVIgVE8gbGluZSBp cyBub3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0cHV0IHN0YWJsZSBhY3Jvc3MgdGVzdCBydW5u ZXJzICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBkaWZmZXJlbnQgcm9sZSBuYW1lcykuCistLQor Q1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKK1NFVCBzZWFyY2hfcGF0aCA9IHBndGJsX2Rk bF90ZXN0OworCistLSBCYXNpYyB0YWJsZSB3aXRoIFBSSU1BUlkgS0VZLCBOT1QgTlVMTCwgREVG QVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBiYXNpYyAoCisgICAgaWQgaW50IFBSSU1BUlkg S0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBERUZBVUxUICdhbm9uJyBDT0xMQVRFICJDIgor KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UpOworCistLSBJZGVudGl0eSBjb2x1bW5zICh3aXRoIGRlZmF1bHQgYW5kIGN1 c3RvbSBzZXF1ZW5jZSBvcHRpb25zKS4KK0NSRUFURSBUQUJMRSBpZF9jb2xzICgKKyAgICBpZF9h bHdheXMgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFksCisgICAgaWRfZGVmYXVsdCBp bnQgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkX2NvbHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCitD UkVBVEUgVEFCTEUgaWRfY3VzdG9tICgKKyAgICB2IGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElE RU5USVRZICgKKyAgICAgICAgU0VRVUVOQ0UgTkFNRSBpZF9jdXN0b21fdl9zZXEKKyAgICAgICAg U1RBUlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUKKyAgICAgICAgTUlOVkFMVUUgNTAgTUFYVkFM VUUgMTAwMAorICAgICAgICBDQUNIRSAxMCBDWUNMRQorICAgICkKKyk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CisKKy0tIEdlbmVyYXRlZCBzdG9yZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdlbl9jb2xzICgK KyAgICBjZW50cyBpbnQsCisgICAgZG9sbGFycyBudW1lcmljIEdFTkVSQVRFRCBBTFdBWVMgQVMg KGNlbnRzIC8gMTAwLjApIFNUT1JFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnZ2VuX2NvbHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBHZW5lcmF0ZWQg dmlydHVhbCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgZ2VuX3ZpcnR1YWwgKAorICAgIGJhc2UgaW50 LAorICAgIGRlcml2ZWQgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGJhc2UgKiAyKSBWSVJUVUFM CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdnZW5fdmlydHVhbCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFNUT1JBR0UgYW5kIENPTVBSRVNTSU9OIChvbmx5 IGVtaXR0ZWQgd2hlbiBub24tZGVmYXVsdCBmb3IgdGhlIHR5cGUpLgorQ1JFQVRFIFRBQkxFIHN0 b3JhZ2VfY29scyAoCisgICAgYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsCisgICAgYiB0ZXh0IFNU T1JBR0UgTUFJTiwKKyAgICBjIHRleHQgQ09NUFJFU1NJT04gcGdsegorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnc3RvcmFnZV9jb2xzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKworLS0gQ29uc3RyYWludHM6IENIRUNLLCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZF UlJBQkxFKS4KK0NSRUFURSBUQUJMRSByZWZkIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRF IFRBQkxFIGNvbnMgKAorICAgIGEgaW50IENIRUNLIChhID4gMCksCisgICAgYiBpbnQgVU5JUVVF LAorICAgIGMgaW50IFJFRkVSRU5DRVMgcmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVG RVJSRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBVTklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChQRyAx NSk6IG51bGwgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIGVxdWFsIGZvcgorLS0gdW5pcXVlbmVzcyBw dXJwb3Nlcywgc28gdGhlIE5VTExTIE5PVCBESVNUSU5DVCBjbGF1c2UgbXVzdCBiZSBlbWl0dGVk LgorQ1JFQVRFIFRBQkxFIG51bGxzX25kICgKKyAgICBhIGludCwKKyAgICBiIGludCwKKyAgICBV TklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChhLCBiKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnbnVsbHNfbmQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBJ TkNMVURFIGNvbHVtbnMgb24gYSBjb25zdHJhaW50LWJhY2tlZCBVTklRVUUgaW5kZXggKFBHIDEx KTogdGhlCistLSBjb3ZlcmluZyBjb2x1bW5zIGFwcGVhciBpbiBhbiBJTkNMVURFICguLi4pIGNs YXVzZSBvbiB0aGUgQUxURVIgVEFCTEUKKy0tIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudCwgbm90 IGluIHRoZSBrZXkgY29sdW1uIGxpc3QuCitDUkVBVEUgVEFCTEUgaWR4X2luYyAoCisgICAgaWQg ICBpbnQgUFJJTUFSWSBLRVksCisgICAgbmFtZSB0ZXh0LAorICAgIGV4dHJhIHRleHQsCisgICAg VU5JUVVFIChuYW1lKSBJTkNMVURFIChleHRyYSkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2lkeF9pbmMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBGT1JF SUdOIEtFWSB3aXRoIE9OIERFTEVURSAvIE9OIFVQREFURSByZWZlcmVudGlhbCBhY3Rpb25zIGFu ZCBNQVRDSAorLS0gY2xhdXNlLiAgRWFjaCB2YXJpYW50IG11c3QgYXBwZWFyIHZlcmJhdGltIGlu IHRoZSByZWNvbnN0cnVjdGVkIERETC4KK0NSRUFURSBUQUJMRSBma19hY3RzX3RndCAoaWQgaW50 IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBma19hY3RzICgKKyAgICBhIGludCwKKyAgICBi IGludCwKKyAgICBjIGludCwKKyAgICBkIGludCwKKyAgICBDT05TVFJBSU5UIGZrX2Nhc2NhZGUg IEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIGZrX2FjdHNfdGd0KGlkKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT04gREVMRVRFIENBU0NBREUgT04gVVBEQVRFIFJFU1RSSUNULAorICAg IENPTlNUUkFJTlQgZmtfc2V0bnVsbCAgRk9SRUlHTiBLRVkgKGIpIFJFRkVSRU5DRVMgZmtfYWN0 c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBERUxFVEUgU0VUIE5VTEws CisgICAgQ09OU1RSQUlOVCBma19zZXRkZWYgICBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyBm a19hY3RzX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVURSBTRVQg REVGQVVMVCwKKyAgICBDT05TVFJBSU5UIGZrX21hdGNoICAgIEZPUkVJR04gS0VZIChkKSBSRUZF UkVOQ0VTIGZrX2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFUQ0gg RlVMTAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZmtfYWN0cyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIE5PVCBFTkZPUkNFRCBmb3JlaWduIGtleSAoUEcg MTcpOiB0aGUgY29uc3RyYWludCBpcyByZWNvcmRlZCBpbiB0aGUKKy0tIGNhdGFsb2cgYnV0IG5v dCB2YWxpZGF0ZWQgYnkgdGhlIGVuZ2luZTsgTk9UIEVORk9SQ0VEIG11c3QgYXBwZWFyIGluCist LSB0aGUgcmVjb25zdHJ1Y3RlZCBEREwuCitDUkVBVEUgVEFCTEUgbm90ZW5mX3RndCAoaWQgaW50 IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBub3RlbmYgKAorICAgIGEgaW50LAorICAgIENP TlNUUkFJTlQgbm90ZW5mX2ZrIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIG5vdGVuZl90Z3Qo aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgTk9UIEVORk9SQ0VECispOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdub3RlbmYnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworCistLSBTZWxmLXJlZmVyZW5jaW5nIEZLOiB0aGUgUEsgbXVzdCBhcHBlYXIgYmVmb3JlIHRo ZSBGSyB0aGF0IHJlZmVyZW5jZXMgaXQuCistLSBUaGUgY2F0YWxvZyBzY2FuIHJldHVybnMgY29u c3RyYWludHMgaW4gbmFtZSBvcmRlcjsgd2l0aG91dCB0aGUgZml4LAorLS0gInNlbGZfcmVmX3Bh cmVudF9pZF9ma2V5IiBzb3J0cyBiZWZvcmUgInNlbGZfcmVmX3BrZXkiIGFuZCB0aGUgRksgQURE CistLSBDT05TVFJBSU5UIGZhaWxzIHdpdGggInRoZXJlIGlzIG5vIHVuaXF1ZSBjb25zdHJhaW50 IG1hdGNoaW5nIGdpdmVuIGtleXMiLgorQ1JFQVRFIFRBQkxFIHNlbGZfcmVmICgKKyAgICBpZCAg ICAgICAgaW50IFBSSU1BUlkgS0VZLAorICAgIHBhcmVudF9pZCBpbnQgUkVGRVJFTkNFUyBzZWxm X3JlZihpZCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3NlbGZfcmVmJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gV0lUSE9VVCBPVkVSTEFQUyBvbiBhIFBS SU1BUlkgS0VZIChQRyAxNyk6IHRoZSByYW5nZS10eXBlIHBlcmlvZAorLS0gY29sdW1uIGZvcm1z IGEgdGVtcG9yYWwgcHJpbWFyeSBrZXk7IFdJVEhPVVQgT1ZFUkxBUFMgbXVzdCBhcHBlYXIKKy0t IGluc2lkZSB0aGUga2V5IGNvbHVtbiBsaXN0IGluIHRoZSByZWNvbnN0cnVjdGVkIEFMVEVSIFRB QkxFLgorLS0gQm90aCBjb2x1bW5zIHVzZSByYW5nZSB0eXBlcyB3aXRoIG5hdGl2ZSBHaVNUIHN1 cHBvcnQgc28gbm8KKy0tIGJ0cmVlX2dpc3QgZXh0ZW5zaW9uIGlzIG5lZWRlZC4KK0NSRUFURSBU QUJMRSB0ZW1wb3JhbF9wayAoCisgICAgZ3JwICBpbnQ0cmFuZ2UsCisgICAgZHVyaW5nIGRhdGVy YW5nZSwKKyAgICBQUklNQVJZIEtFWSAoZ3JwLCBkdXJpbmcgV0lUSE9VVCBPVkVSTEFQUykKKyk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBvcmFsX3BrJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKworLS0gSW5kZXhlczogZnVuY3Rpb25hbCBhbmQgcGFydGlhbC4g IENvbnN0cmFpbnQtYmFja2luZyBpbmRleGVzIGFyZQorLS0gc3VwcHJlc3NlZCAodGhleSBhcmUg ZW1pdHRlZCBieSB0aGUgY29uc3RyYWludCBsb29wKS4KK0NSRUFURSBUQUJMRSBpZHhkIChpZCBp bnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBp ZHhkIChsb3dlcihuYW1lKSk7CitDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIGlkeGQgKGlk KSBXSEVSRSBpZCA+IDEwMDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEluaGVyaXRhbmNlLCBpbmNsdWRpbmcg YSBjaGlsZCBERUZBVUxUIG92ZXJyaWRlIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uCitDUkVBVEUg VEFCTEUgcGFyIChhIGludCBERUZBVUxUIDEsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgY2ggKGMg aW50KSBJTkhFUklUUyAocGFyKTsKK0FMVEVSIFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBE RUZBVUxUIDk5OTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBQZXItY29sdW1uIGF0dG9wdGlvbnM6IGVtaXR0ZWQg YXMgQUxURVIgQ09MVU1OIFNFVCAoLi4uKS4KK0NSRUFURSBUQUJMRSBhdHRvcHQgKGEgaW50LCBi IHRleHQpOworQUxURVIgVEFCTEUgYXR0b3B0IEFMVEVSIENPTFVNTiBhIFNFVCAobl9kaXN0aW5j dCA9IDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2F0dG9wdCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFBhcnRpdGlvbmVkIHRhYmxlIHBhcmVudHMgKFJB TkdFLCBIQVNILCBhbmQgTElTVCkuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlIChpZCBpbnQs IGsgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworQ1JF QVRFIFRBQkxFIHBhcnRlZF9oYXNoIChpZCBpbnQpIFBBUlRJVElPTiBCWSBIQVNIIChpZCk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9saXN0IChpZCBpbnQsIHJlZ2lv biB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgncGFydGVkX2xpc3QnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCist LSBQYXJ0aXRpb24gY2hpbGRyZW46IEZST00vVE8sIFdJVEggKG1vZHVsdXMsIHJlbWFpbmRlciks IERFRkFVTFQuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBhcnRl ZF9yYW5nZQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitBTFRFUiBUQUJMRSBw YXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRf aGFzaAorICAgIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlX2RlZiBQQVJUSVRJT04g T0YgcGFydGVkX3JhbmdlIERFRkFVTFQ7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3BhcnRlZF9yYW5nZV9kZWYnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBOb24t Y29uc3RyYWludC1iYWNrZWQgaW5kZXggb24gYSBwYXJ0aXRpb25lZCB0YWJsZTogdGhlIHBhcmVu dCdzIGluZGV4IERETAorLS0gbXVzdCBhcHBlYXIgb25jZTsgdGhlIGF1dG8tY3JlYXRlZCBjaGls ZCBwYXJ0aXRpb24gaW5kZXhlcyAocmVsaXNwYXJ0aXRpb249dCkKKy0tIG11c3QgYmUgc3VwcHJl c3NlZCBzbyB0aGUgRERMIHJvdW5kLXRyaXBzIHdpdGhvdXQgInJlbGF0aW9uIGFscmVhZHkgZXhp c3RzIi4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaWR4IChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJU SVRJT04gQlkgTElTVCAocmVnaW9uKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaWR4X2EgUEFSVElU SU9OIE9GIHBhcnRlZF9pZHggRk9SIFZBTFVFUyBJTiAoJ2EnKTsKK0NSRUFURSBVTklRVUUgSU5E RVggcGFydGVkX2lkeF91aWR4IE9OIHBhcnRlZF9pZHggKGlkLCByZWdpb24pOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaWR4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKworLS0gUGxhaW4gKG5vbi11bmlxdWUpIENSRUFURSBJTkRFWCBvbiBwYXJ0aXRpb25l ZCB0YWJsZTogdGhlIGF1dG8tY3JlYXRlZCBjaGlsZAorLS0gaW5kZXggKHJlbGlzcGFydGl0aW9u PXRydWUpIGlzIHN1cHByZXNzZWQsIGp1c3QgbGlrZSB0aGUgVU5JUVVFIGNhc2UuCitDUkVBVEUg VEFCTEUgcGFydGVkX3BsYWluIChpZCBpbnQsIHZhbCB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0Ug KGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcGxhaW5fYSBQQVJUSVRJT04gT0YgcGFydGVkX3Bs YWluIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgSU5ERVggcGFydGVkX3Bs YWluX2lkX2lkeCBPTiBwYXJ0ZWRfcGxhaW4gKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncGFydGVkX3BsYWluJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0g Q29uc3RyYWludC1iYWNrZWQgUFJJTUFSWSBLRVkgb24gcGFydGl0aW9uZWQgdGFibGU6IHRoZSBj aGlsZCdzIGluaGVyaXRlZAorLS0gY29uc3RyYWludCAoY29uaXNsb2NhbD1mYWxzZSkgYW5kIGl0 cyBiYWNraW5nIGluZGV4IGFyZSBib3RoIHN1cHByZXNzZWQuCitDUkVBVEUgVEFCTEUgcGFydGVk X3BrIChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKK0NS RUFURSBUQUJMRSBwYXJ0ZWRfcGtfYSBQQVJUSVRJT04gT0YgcGFydGVkX3BrIEZPUiBWQUxVRVMg SU4gKCdhJyk7CitBTFRFUiBUQUJMRSBwYXJ0ZWRfcGsgQUREIFBSSU1BUlkgS0VZIChpZCwgcmVn aW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3BrJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gTXVsdGktbGV2ZWwgKHN1Yi1wYXJ0aXRpb25lZCkg dGFibGUgd2l0aCBhIENSRUFURSBJTkRFWCBvbiB0aGUgcm9vdC4KKy0tIFRoZSBtaWQtbGV2ZWwg cGFydGl0aW9uZWQgaW5kZXggKHJlbGlzcGFydGl0aW9uPXRydWUsIHJlbGtpbmQ9J0knKSBhbmQg dGhlCistLSBsZWFmIGluZGV4IChyZWxpc3BhcnRpdGlvbj10cnVlLCByZWxraW5kPSdpJykgYXJl IGJvdGggc3VwcHJlc3NlZC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfc3ViIChpZCBpbnQsIHJlZ2lv biB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRf c3ViX2EgUEFSVElUSU9OIE9GIHBhcnRlZF9zdWIKKyAgICBGT1IgVkFMVUVTIElOICgnYScpIFBB UlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdWJfYTEgUEFSVElU SU9OIE9GIHBhcnRlZF9zdWJfYSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworQ1JFQVRF IElOREVYIHBhcnRlZF9zdWJfaWRfaWR4IE9OIHBhcnRlZF9zdWIgKGlkKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3N1Yic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSk7CisKKy0tIFBhcnRpdGlvbiBjaGlsZCB3aXRoIGl0cyBvd24gbG9jYWxseS1kZWZpbmVkIGlu ZGV4IChyZWxpc3BhcnRpdGlvbj1mYWxzZSk6CistLSB0aGlzIGlzIE5PVCBpbmhlcml0ZWQgZnJv bSBhbnkgcGFyZW50IHBhcnRpdGlvbmVkIGluZGV4IGFuZCBtdXN0IGJlIGVtaXR0ZWQuCitDUkVB VEUgVEFCTEUgcGFydGVkX2NoaWxkX2lkeCAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9O IEJZIExJU1QgKHJlZ2lvbik7CitDUkVBVEUgVEFCTEUgcGFydGVkX2NoaWxkX2lkeF9hIFBBUlRJ VElPTiBPRiBwYXJ0ZWRfY2hpbGRfaWR4IEZPUiBWQUxVRVMgSU4gKCdhJyk7CitDUkVBVEUgSU5E RVggcGFydGVkX2NoaWxkX2lkeF9hX2lkIE9OIHBhcnRlZF9jaGlsZF9pZHhfYSAoaWQpOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hpbGRfaWR4Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKworLS0gTWl4OiBwYXJlbnQgaGFzIGEgQ1JFQVRFIElOREVYIChh dXRvLXByb3BhZ2F0ZWQgdG8gY2hpbGQsIHJlbGlzcGFydGl0aW9uPXRydWUsCistLSBzdXBwcmVz c2VkKSBBTkQgdGhlIGNoaWxkIGhhcyBpdHMgb3duIGxvY2FsIGluZGV4IChyZWxpc3BhcnRpdGlv bj1mYWxzZSwgZW1pdHRlZCkuCitDUkVBVEUgVEFCTEUgcGFydGVkX21peGVkIChpZCBpbnQsIHJl Z2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfbWl4ZWRfYSBQQVJUSVRJT04gT0YgcGFydGVkX21peGVkIEZPUiBWQUxVRVMgSU4gKCdhJyk7 CitDUkVBVEUgSU5ERVggcGFydGVkX21peGVkX2lkIE9OIHBhcnRlZF9taXhlZCAoaWQpOworQ1JF QVRFIElOREVYIHBhcnRlZF9taXhlZF9hX3JlZ2lvbiBPTiBwYXJ0ZWRfbWl4ZWRfYSAocmVnaW9u KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX21peGVkJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gRksgb24gYSBwYXJ0aXRpb25lZCB0YWJsZTogZGVj bGFyZWQgb24gdGhlIHBhcmVudDsgcGFydGl0aW9uIGNoaWxkcmVuIGluaGVyaXQKKy0tIHRoZSBj b25zdHJhaW50IHdpdGggY29uaXNsb2NhbD1mYWxzZSBhbmQgbXVzdCBub3QgcmUtZW1pdCBpdC4K K0NSRUFURSBUQUJMRSBwYXJ0ZWRfZmtfdGd0IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRF IFRBQkxFIHBhcnRlZF9mayAoaWQgaW50LCB0Z3RfaWQgaW50IFJFRkVSRU5DRVMgcGFydGVkX2Zr X3RndChpZCkpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFy dGVkX2ZrX2EgUEFSVElUSU9OIE9GIHBhcnRlZF9mayBGT1IgVkFMVUVTIEZST00gKDApIFRPICgx MDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfZmsnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBTdGF0aXN0aWNzIGRlY2xhcmVkIGV4cGxpY2l0bHkg b24gYSBwYXJ0aXRpb24gY2hpbGQgKG5vdCBhdXRvLXByb3BhZ2F0ZWQpOgorLS0gdGhlIGNoaWxk J3Mgc3RhdGlzdGljcyBvYmplY3QgYXBwZWFycyBpbnNpZGUgdGhlIGNoaWxkJ3MgRERMIGJsb2Nr LgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdHggKGlkIGludCwgcmVnaW9uIHRleHQsIHZhbCBmbG9h dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CitDUkVBVEUgVEFCTEUgcGFydGVkX3N0eF9h IFBBUlRJVElPTiBPRiBwYXJ0ZWRfc3R4IEZPUiBWQUxVRVMgSU4gKCdhJyk7CitDUkVBVEUgU1RB VElTVElDUyBwYXJ0ZWRfc3R4X3N0YXQgKG5kaXN0aW5jdCkgT04gaWQsIHJlZ2lvbiBGUk9NIHBh cnRlZF9zdHg7CitDUkVBVEUgU1RBVElTVElDUyBwYXJ0ZWRfc3R4X2Ffc3RhdCAobmRpc3RpbmN0 KSBPTiBpZCwgdmFsIEZST00gcGFydGVkX3N0eF9hOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFC TEUgcGFydGVkX3N0eDsKKworLS0gTk8gSU5IRVJJVCBDSEVDSyBjb25zdHJhaW50OiB0aGUgTk8g SU5IRVJJVCBmbGFnIG11c3QgYXBwZWFyIHZlcmJhdGltIGluIHRoZQorLS0gaW5saW5lIGNvbnN0 cmFpbnQgZGVmaW5pdGlvbiBpbnNpZGUgdGhlIENSRUFURSBUQUJMRSBib2R5LgorQ1JFQVRFIFRB QkxFIG5vaW5oY2hrIChpZCBpbnQsIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCB2YWxfcG9zIENI RUNLICh2YWwgPiAwKSBOTyBJTkhFUklUKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnbm9pbmhjaGsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBub2lu aGNoazsKKworLS0gTXVsdGlwbGUgaW5oZXJpdGFuY2UgcGFyZW50czogdGhlIElOSEVSSVRTIGNs YXVzZSBtdXN0IGxpc3QgYm90aCBwYXJlbnRzIGluCistLSBkZWNsYXJhdGlvbiBvcmRlcjsgb25s eSB0aGUgbG9jYWxseS1kZWZpbmVkIGNvbHVtbiBhcHBlYXJzIGluIHRoZSBjb2x1bW4gbGlzdC4K K0NSRUFURSBUQUJMRSBtaV9wMSAoYSBpbnQgREVGQVVMVCAxKTsKK0NSRUFURSBUQUJMRSBtaV9w MiAoYiB0ZXh0IERFRkFVTFQgJ3gnKTsKK0NSRUFURSBUQUJMRSBtaV9jaGlsZCAoYyBmbG9hdCkg SU5IRVJJVFMgKG1pX3AxLCBtaV9wMik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J21pX2NoaWxkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFCTEUgbWlfcDEs IG1pX3AyIENBU0NBREU7CisKKy0tIFJ1bGVzLgorQ1JFQVRFIFRBQkxFIHJ0IChpZCBpbnQpOwor Q1JFQVRFIFRBQkxFIHJ0X2xvZyAoaWQgaW50KTsKK0NSRUFURSBSVUxFIHJ0X2xvZ19pbnNlcnQg QVMgT04gSU5TRVJUIFRPIHJ0CisgICAgRE8gQUxTTyBJTlNFUlQgSU5UTyBydF9sb2cgVkFMVUVT IChORVcuaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEV4dGVuZGVkIHN0YXRpc3RpY3MuCitDUkVBVEUgVEFC TEUgc3R4IChhIGludCwgYiBpbnQsIGMgaW50KTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0eF9uZHYg KG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gUm93LWxldmVsIHNl Y3VyaXR5IHRvZ2dsZXMuCitDUkVBVEUgVEFCTEUgcmxzIChpZCBpbnQpOworQUxURVIgVEFCTEUg cmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRFUiBUQUJMRSBybHMgRk9SQ0UgUk9X IExFVkVMIFNFQ1VSSVRZOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBSRVBMSUNBIElERU5USVRZOiBlbWl0dGVk IG9ubHkgd2hlbiBub3QgdGhlIGRlZmF1bHQuCitDUkVBVEUgVEFCTEUgcmlfZnVsbCAoYSBpbnQp OworQUxURVIgVEFCTEUgcmlfZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworCitDUkVBVEUgVEFCTEUgcmlfaWR4IChhIGludCBOT1QgTlVMTCk7CitDUkVBVEUgVU5JUVVF IElOREVYIHJpX2lkeF9hIE9OIHJpX2lkeCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHggUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmlfaWR4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gVU5MT0dH RUQgKyByZWxvcHRpb25zLgorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRI IChmaWxsZmFjdG9yID0gNzApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8n OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBUeXBlZCB0YWJsZSAoQ1JFQVRFIFRB QkxFIE9GIHR5cGVfbmFtZSkuICBDb2x1bW5zIGluaGVyaXRlZCBmcm9tIHRoZQorLS0gdHlwZSBl bWl0IG5vdGhpbmc7IGxvY2FsbHktYXBwbGllZCBERUZBVUxULCBOT1QgTlVMTCBhbmQgQ0hFQ0sg Y29tZQorLS0gb3V0IHRocm91Z2ggYSBzaW5nbGUgIihjb2wgV0lUSCBPUFRJT05TIC4uLikiIGxp c3QuCitDUkVBVEUgVFlQRSB0eXBlZF90IEFTIChhIGludCwgYiB0ZXh0KTsKK0NSRUFURSBUQUJM RSB0eXBlZF9wbGFpbiBPRiB0eXBlZF90OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCd0eXBlZF9wbGFpbic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJM RSB0eXBlZF9vdmVyIE9GIHR5cGVkX3QgKAorICAgIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBO T1QgTlVMTCwKKyAgICBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGJf bm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChiKSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0g VGVtcG9yYXJ5IHRhYmxlcyArIE9OIENPTU1JVC4gIFRlbXAgdGFibGVzIG11c3QgbmV2ZXIgYmUg ZW1pdHRlZCB3aXRoCistLSB0aGUgc2Vzc2lvbi1wcml2YXRlIHBnX3RlbXBfTk4gc2NoZW1hIHBy ZWZpeCAtLSB0aGUgVEVNUE9SQVJZIGtleXdvcmQKKy0tIGFscmVhZHkgcGxhY2VzIHRoZSB0YWJs ZSBpbiBwZ190ZW1wIGFuZCB0aGUgcHJlZml4IGlzIG5vbi1yZXBsYXlhYmxlLgorLS0gT04gQ09N TUlUIERST1Agb25seSBmaXJlcyBhdCBjb21taXQsIHNvIHRoZSBxdWVyaWVzIHRoYXQgbmVlZCB0 byBzZWUKKy0tIHRoZSBjYXRhbG9nIGVudHJ5IG11c3QgcnVuIGluIHRoZSBzYW1lIHRyYW5zYWN0 aW9uIGFzIHRoZSBDUkVBVEUuCitCRUdJTjsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVmYXVs dCAoaWQgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnQpIE9OIENP TU1JVCBERUxFVEUgUk9XUzsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZHJvcCAoaWQgaW50KSBP TiBDT01NSVQgRFJPUDsKKworU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1w X2RlZmF1bHQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUg TElLRSAnQ1JFQVRFICUnOworCitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Rl bXBfZGVsZXRlJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKSBBUyBsaW5lCitXSEVSRSBsaW5l IExJS0UgJ0NSRUFURSAlJzsKKworU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0 ZW1wX2Ryb3AnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUg TElLRSAnQ1JFQVRFICUnOworUk9MTEJBQ0s7CisKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg cHJldHR5ID0+IHRydWUpOworCistLSBvbmx5X2tpbmRzIC8gZXhjZXB0X2tpbmRzIGdhdGluZzog ZWFjaCBlbWl0cyBlaXRoZXIgb25seSB0aGUgbGlzdGVkIGtpbmRzCistLSAob25seV9raW5kcykg b3IgZXZlcnkga2luZCBleGNlcHQgdGhlIGxpc3RlZCBvbmVzIChleGNlcHRfa2luZHMpLiAgVGhl IHR3bworLS0gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIEtpbmQgdm9jYWJ1bGFyeTogdGFibGUs IGluZGV4LAorLS0gcHJpbWFyeV9rZXksIHVuaXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5LCBleGNs dXNpb24sIHJ1bGUsCistLSBzdGF0aXN0aWNzLCB0cmlnZ2VyLCBwb2xpY3ksIHJscywgcmVwbGlj YV9pZGVudGl0eSwgcGFydGl0aW9uLgorLS0gTk9UIE5VTEwgaXMgbm90IGluIHRoZSB2b2NhYnVs YXJ5IC0gYWx3YXlzIGVtaXR0ZWQgdG8gcHJldmVudAorLS0gcHJvZHVjaW5nIHNjaGVtYXMgdGhh dCBzaWxlbnRseSBhY2NlcHQgTlVMTHMgdGhlIHNvdXJjZSB3b3VsZAorLS0gaGF2ZSByZWplY3Rl ZC4KKy0tCistLSBleGNlcHRfa2luZHM9aW5kZXggaGlkZXMgdGhlIENSRUFURSBJTkRFWCBzdGF0 ZW1lbnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOworCistLSBl eGNlcHRfa2luZHM9cHJpbWFyeV9rZXksdW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5LGV4Y2x1c2lv biBoaWRlcyBldmVyeQorLS0gdGFibGUtbGV2ZWwgY29uc3RyYWludC4gIElubGluZSBDSEVDSyBp biB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkgaXMKKy0tIHN1cHByZXNzZWQgdG9vLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBl eGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5JywndW5pcXVlJywnY2hlY2snLCdmb3Jl aWduX2tleScsJ2V4Y2x1c2lvbiddKTsKKworLS0gZXhjZXB0X2tpbmRzPWZvcmVpZ25fa2V5IHN1 cHByZXNzZXMgb25seSBGT1JFSUdOIEtFWSBjb25zdHJhaW50czsKKy0tIFBSSU1BUlkgS0VZLCBV TklRVUUsIENIRUNLLCBhbmQgbmFtZWQgTk9UIE5VTEwgc3RheS4gIFRoaXMgaXMgdGhlCistLSBm aXJzdCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1jbG9uZSB3b3JrZmxvdzogZW1pdCB0YWJsZXMg d2l0aG91dAorLS0gY3Jvc3MtdGFibGUgRktzLCBsb2FkIGRhdGEsIHRoZW4gcmUtcnVuIHdpdGgg b25seV9raW5kcz1mb3JlaWduX2tleQorLS0gdG8gYWRkIHRoZW0gb25jZSBhbGwgdGFyZ2V0cyBl eGlzdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKwor LS0gb25seV9raW5kcz1mb3JlaWduX2tleSBpcyB0aGUgc2Vjb25kIHBhc3Mgb2YgdGhlIHR3by1w YXNzIEZLLWNsb25lCistLSB3b3JrZmxvdzogZW1pdCBvbmx5IHRoZSBBTFRFUiBUQUJMRSAuLi4g QUREIENPTlNUUkFJTlQgLi4uIEZPUkVJR04KKy0tIEtFWSByb3dzOyB0aGUgQ1JFQVRFIFRBQkxF IGFuZCBldmVyeSBub24tRksgc3ViLW9iamVjdCBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZSB0YWJs ZSBhbHJlYWR5IGV4aXN0cyBmcm9tIHRoZSBmaXJzdCBwYXNzKS4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5k cyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CisKKy0tIEEgdGFibGUgd2l0aCBubyBmb3JlaWdu IGtleXMgcHJvZHVjZXMgbm8gcm93cyB1bmRlcgorLS0gb25seV9raW5kcz1mb3JlaWduX2tleS4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmVmZCc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CisKKy0tIG9ubHlf a2luZHM9dGFibGUgZW1pdHMgb25seSB0aGUgYmFyZSBDUkVBVEUgVEFCTEUgKHdpdGggYW55IGlu bGluZQorLS0gY29sdW1uLWxldmVsIE5PVCBOVUxMIGFuZCBDSEVDSykgLSBubyBpbmRleGVzLCBu byBQUklNQVJZIEtFWSBBTFRFUiwKKy0tIG5vIG90aGVyIHN1Yi1vYmplY3RzLiAgVXNlZnVsIGZv ciBjYXB0dXJpbmcgYSB0YWJsZSdzIHNoYXBlIHdpdGhvdXQKKy0tIHB1bGxpbmcgaW4gZXZlcnl0 aGluZyBhdHRhY2hlZCB0byBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4 ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndGFibGUn XSk7CisKKy0tIG9ubHlfa2luZHM9Y2hlY2sgb24gYSBub24tcGFydGl0aW9uIHRhYmxlLiAgVGhl IGNvbnN0cmFpbnQgbG9vcCBtdXN0IGVtaXQKKy0tIGNvbHVtbi1sZXZlbCBhbmQgdGFibGUtbGV2 ZWwgQ0hFQ0sgY29uc3RyYWludHMgdmlhIEFMVEVSIFRBQkxFIGhlcmUsCistLSBiZWNhdXNlIHRo ZSBpbmxpbmUgcGF0aCBpbiBDUkVBVEUgVEFCTEUgbmV2ZXIgcnVucyAoS0lORF9UQUJMRSBpcwor LS0gbm90IGluIHRoZSBmaWx0ZXIpLgorQ1JFQVRFIFRBQkxFIGNoa19vbmx5ICgKKyAgICBpZCAg aW50IFBSSU1BUlkgS0VZLAorICAgIHF0eSBpbnQgQ0hFQ0sgKHF0eSA+IDApLAorICAgIENPTlNU UkFJTlQgY2hrX29ubHlfaWRfcG9zIENIRUNLIChpZCA+IDApCispOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjaGtfb25seSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsnY2hlY2snXSk7CitEUk9QIFRBQkxFIGNoa19vbmx5OworCistLSBv bmx5X2tpbmRzPXBhcnRpdGlvbiBvbiBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudDogZWFjaCBj aGlsZCdzIGZ1bGwgRERMCistLSBpcyBlbWl0dGVkIChDUkVBVEUgVEFCTEUgLi4uIFBBUlRJVElP TiBPRiAuLi4pLiAgVGhlICJwYXJ0aXRpb24iCistLSBrZXl3b3JkIGlzIGEgZ2F0ZSBhdCB0aGUg cGFyZW50IGxldmVsOyBpdCBpcyBzdHJpcHBlZCBmcm9tIHRoZQorLS0gcHJvcGFnYXRlZCBmaWx0 ZXIgc28gdGhlIGNoaWxkIGRvZXMgbm90IGV4Y2x1ZGUgaXRzIG93bgorLS0gQ1JFQVRFIFRBQkxF LgorQ1JFQVRFIFRBQkxFIHBfb25seSAoaWQgaW50LCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcF9vbmx5X2EgUEFSVElUSU9OIE9GIHBfb25seSBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworQ1JFQVRFIFRBQkxFIHBfb25seV9iIFBBUlRJVElP TiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgyMDApOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9u bHlfa2luZHMgPT4gQVJSQVlbJ3BhcnRpdGlvbiddKTsKK0RST1AgVEFCTEUgcF9vbmx5OworCist LSBvbmx5X2tpbmRzIGFuZCBleGNlcHRfa2luZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZ Wydmb3JlaWduX2tleSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdF9r aW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CisKKy0tIFB1Yi9zdWIgc2NoZW1hIGNsb25l OiBrZWVwIHRoZSB0YWJsZSBhbmQgaXRzIHByaW1hcnkga2V5LCBkcm9wIHRoZQorLS0gcmVzdCBv ZiB0aGUgY29uc3RyYWludHMgc28gdGhlIHN1YnNjcmliZXIgY2FuIHJlcGxpY2F0ZSB3aXRob3V0 CistLSBwdWxsaW5nIGNyb3NzLXRhYmxlIGRlcGVuZGVuY2llcyBhbG9uZy4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhj ZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdjaGVjaycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVz aW9uJ10pOworCistLSBleGNlcHRfa2luZHM9cnVsZSBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1z dGF0aXN0aWNzIGhpZGVzIHRoZSBDUkVBVEUgU1RBVElTVElDUy4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2lu ZHMgPT4gQVJSQVlbJ3N0YXRpc3RpY3MnXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1ybHMgaGlkZXMg dGhlIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkgdG9nZ2xlcy4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNl cHRfa2luZHMgPT4gQVJSQVlbJ3JscyddKTsKKworLS0gZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRl bnRpdHkgaGlkZXMgdGhlIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNl cHRfa2luZHMgPT4gQVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisKKy0tIFBhcnRpdGlvbiBj aGlsZHJlbiBhcmUgZW1pdHRlZCBieSBkZWZhdWx0OyBleGNlcHRfa2luZHM9cGFydGl0aW9uCist LSBzdXBwcmVzc2VzIHRoZW0gc28gb25seSB0aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50IGNv bWVzIG91dC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3BhcnRpdGlv biddKTsKKworLS0gV2hpdGVzcGFjZSBhcm91bmQga2luZCBuYW1lcyBpcyBhbGxvd2VkOyBjYXNl IGlzIGZvbGRlZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWycgIElOREVYICAnLCcg IFJVTEUgICddKTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBzdHJpcHMgdGhlIHNjaGVt YSBmcm9tIHRoZSB0YXJnZXQgdGFibGUgaXRzZWxmCistLSBhbmQgZnJvbSBzYW1lLXNjaGVtYSBz aWJsaW5nIHJlZmVyZW5jZXMgKGluaGVyaXRhbmNlL3BhcnRpdGlvbgorLS0gcGFyZW50cywgaWRl bnRpdHkgc2VxdWVuY2VzIGluIHRoZSBzYW1lIHNjaGVtYSksIHdoaWxlIGNyb3NzLXNjaGVtYQor LS0gcmVmZXJlbmNlcyBhcmUga2VwdCBxdWFsaWZpZWQgZm9yIGNvcnJlY3RuZXNzLgorLS0KKy0t IEJhcmUgQ1JFQVRFIFRBQkxFIGZvciBhbiBvcmRpbmFyeSB0YWJsZS4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisK Ky0tIElOSEVSSVRTIHBhcmVudCBpbiB0aGUgc2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1bnF1YWxp ZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxp ZmllZCA9PiBmYWxzZSk7CisKKy0tIFBhcnRpdGlvbiBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1h IGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworCistLSBDcm9z cy1zY2hlbWEgRksgdGFyZ2V0IGtlZXBzIHF1YWxpZmljYXRpb24uICBUaGUgJ3JlZmQnIHRhYmxl IGlzIGluCistLSBwZ3RibF9kZGxfdGVzdDsgcGxhY2UgYW4gRksgdGFyZ2V0IGluIGEgZGlmZmVy ZW50IHNjaGVtYSBhbmQgdmVyaWZ5IGl0CistLSBzdGF5cyBxdWFsaWZpZWQgZXZlbiB3aXRoIHNj aGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9vdGhlcjsKK0NS RUFURSBUQUJMRSBwZ3RibF9kZGxfb3RoZXIucGFyZW50IChpZCBpbnQgUFJJTUFSWSBLRVkpOwor Q1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsgKAorICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAg cGlkIGludCBSRUZFUkVOQ0VTIHBndGJsX2RkbF9vdGhlci5wYXJlbnQKKyk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3hzY2hlbWFfZmsnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBm YWxzZSk7CisKKy0tIENyb3NzLXNjaGVtYSBGSyB3aG9zZSB0YXJnZXQgc2NoZW1hIG5hbWUgZW5k cyB3aXRoIHRoZSBiYXNlIHNjaGVtYSBuYW1lCistLSAoZS5nLiAieHBndGJsX2RkbF90ZXN0IiBl bmRzIHdpdGggInBndGJsX2RkbF90ZXN0IikuICBBIHBvc3QtaG9jIHRleHQKKy0tIHN0cmlwIHdv dWxkIG1hbmdsZSAieHBndGJsX2RkbF90ZXN0LnJlZnRibCIgaW50byAieHJlZnRibCI7IGRlY2lk aW5nCistLSBxdWFsaWZpY2F0aW9uIGF0IGdlbmVyYXRpb24gdGltZSBhdm9pZHMgdGhlIHByb2Js ZW0gZW50aXJlbHkuCitDUkVBVEUgU0NIRU1BIHhwZ3RibF9kZGxfdGVzdDsKK0NSRUFURSBUQUJM RSB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsIChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRB QkxFIHN1ZmZpeF9zY2hlbWFfZmsgKAorICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcmVm IGludCBSRUZFUkVOQ0VTIHhwZ3RibF9kZGxfdGVzdC5yZWZ0YmwKKyk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3N1ZmZpeF9zY2hlbWFfZmsnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9 PiBmYWxzZSk7CitEUk9QIFRBQkxFIHN1ZmZpeF9zY2hlbWFfZms7CitEUk9QIFNDSEVNQSB4cGd0 YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKKworLS0gSWRlbnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20g c2VxdWVuY2UgbmFtZSBpbiB0aGUgc2FtZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZp ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFf cXVhbGlmaWVkID0+IGZhbHNlKTsKKworLS0gUm91bmQtdHJpcDogd2l0aCBzY2hlbWFfcXVhbGlm aWVkPWZhbHNlLCBhZnRlciBTRVQgc2VhcmNoX3BhdGggdGhlCistLSBEREwgY2FuIGJlIHJlcGxh eWVkIGludG8gYSBkaWZmZXJlbnQgdGFyZ2V0IHNjaGVtYS4KK0NSRUFURSBTQ0hFTUEgcGd0Ymxf ZGRsX3JlcGxheTsKK0RPICQkCitERUNMQVJFCisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBT RVQgTE9DQUwgc2VhcmNoX3BhdGggPSBwZ3RibF9kZGxfcmVwbGF5OworICAgIEZPUiBzdG10IElO CisgICAgICAgIFNFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3Rl c3QuYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSkgQVMgbGluZQorICAgIExPT1AKKyAg ICAgICAgRVhFQ1VURSBzdG10OworICAgIEVORCBMT09QOworRU5EICQkOworU0VMRUNUIHJlbG5h bWVzcGFjZTo6cmVnbmFtZXNwYWNlOjp0ZXh0LCByZWxuYW1lCitGUk9NIHBnX2NsYXNzIFdIRVJF IG9pZCA9ICdwZ3RibF9kZGxfcmVwbGF5LmJhc2ljJzo6cmVnY2xhc3M7CitEUk9QIFNDSEVNQSBw Z3RibF9kZGxfcmVwbGF5IENBU0NBREU7CitEUk9QIFRBQkxFIHhzY2hlbWFfZms7CitEUk9QIFND SEVNQSBwZ3RibF9kZGxfb3RoZXIgQ0FTQ0FERTsKKworLS0gQ3Jvc3Mtc2NoZW1hIHBhcnRpdGlv biBjaGlsZCB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2U6IHRoZSBjaGlsZCBtdXN0CistLSBj YXJyeSBpdHMgb3duIHNjaGVtYSBwcmVmaXggc28gdGhlIG91dHB1dCBpcyB1bmFtYmlndW91cyBy ZWdhcmRsZXNzIG9mIHRoZQorLS0gY2FsbGVyJ3Mgc2VhcmNoX3BhdGguICBCZWZvcmUgdGhlIGZp eCwgdGhlIGNoaWxkIHdhcyBlbWl0dGVkIGFzIHRoZSBiYXJlCistLSBuYW1lICJwdF9jIiAobGFu ZGluZyBpbiB3aGljaGV2ZXIgc2NoZW1hIGlzIGZpcnN0IGluIHNlYXJjaF9wYXRoKSB3aGlsZQor LS0gdGhlIHBhcmVudCByZWZlcmVuY2UgaW5zaWRlIHRoZSBDUkVBVEUgVEFCTEUgY2FtZSBvdXQg YXMgdGhlIGZ1bGx5LXF1YWxpZmllZAorLS0gInBndGJsX2RkbF9wYXJ0X3MucHQiLCBtYWtpbmcg dGhlIERETCBpbmNvbnNpc3RlbnQgYW5kIHVucmVwbGF5YWJsZS4KK0NSRUFURSBTQ0hFTUEgcGd0 YmxfZGRsX3BhcnRfczsKK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3BhcnRfb3RoZXI7CitDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3BhcnRfcy5wdCAoaWQgaW50LCB2YWwgaW50KSBQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcGFydF9vdGhlci5wdF9jCisg ICAgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9wYXJ0X3MucHQKKyAgICBGT1IgVkFMVUVTIEZST00g KDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxf cGFydF9zLnB0Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3du ZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxp ZmllZCA9PiBmYWxzZSk7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9zIENBU0NBREU7CitE Uk9QIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9vdGhlciBDQVNDQURFOworCistLSBMb2NhbGx5LWRl Y2xhcmVkIENIRUNLIG9uIGEgcGFydGl0aW9uIGNoaWxkIGhhcyBubyBpbmxpbmUgY29sdW1uCist LSBsaXN0IHRvIGxpdmUgaW4gKFBBUlRJVElPTiBPRiBmb3JtKSwgc28gaXQgbXVzdCBjb21lIG91 dCBhcyBhCistLSBzZXBhcmF0ZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgc3RhdGVt ZW50LgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGsgKGlkIGludCwgdmFsIGludCkgUEFSVElUSU9O IEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX2Noa19jaGlsZCBQQVJUSVRJT04g T0YgcGFydGVkX2NoaworICAgIChDT05TVFJBSU5UIGNoa19pbmxpbmUgQ0hFQ0sgKHZhbCA+IDAp KQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BhcnRlZF9jaGtfY2hpbGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworRFJPUCBUQUJMRSBwYXJ0ZWRfY2hrOworCistLSBJbmhlcml0YW5jZSBjaGlsZHJlbiBvZiBh IHBhcmVudCB3aXRoIGEgZ2VuZXJhdGVkIGNvbHVtbiBzaG91bGQgbm90CistLSBlbWl0IGFuIEFM VEVSIENPTFVNTiAuLi4gU0VUIERFRkFVTFQgZm9yIHRoZSBpbmhlcml0ZWQgZ2VuZXJhdGVkCist LSBjb2x1bW46IHRoZSBHRU5FUkFURUQgZXhwcmVzc2lvbiBjYXJyaWVzIGRvd24gdGhyb3VnaCBp bmhlcml0YW5jZSwKKy0tIGFuZCBTRVQgREVGQVVMVCB3b3VsZCBmYWlsIGF0IHJlcGxheSBhZ2Fp bnN0IGEgZ2VuZXJhdGVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwYXJfZ2VuICgKKyAgICBpZCBp bnQsCisgICAgZyAgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGlkICogMikgU1RPUkVECispOwor Q1JFQVRFIFRBQkxFIGNoX2dlbiAoKSBJTkhFUklUUyAocGFyX2dlbik7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2NoX2dlbic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitE Uk9QIFRBQkxFIHBhcl9nZW4gQ0FTQ0FERTsKKworLS0gQSB1c2VyLW5hbWVkIE5PVCBOVUxMIG9u IGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgaW5saW5lIGFzCistLSAiQ09OU1RSQUlOVCBuYW1l IE5PVCBOVUxMIiBzbyB0aGUgb3JpZ2luYWwgbmFtZSBpcyBwcmVzZXJ2ZWQuICBBbgorLS0gYXV0 by1uYW1lZCBOT1QgTlVMTCBvbiBhIGxvY2FsIGNvbHVtbiBpcyBlbWl0dGVkIGFzIGEgcGxhaW4g aW5saW5lCistLSAiTk9UIE5VTEwiIC0gUEcgcmUtY3JlYXRlcyB0aGUgYXV0by1uYW1lZCBjb25z dHJhaW50IHdoZW4gQ1JFQVRFCistLSBUQUJMRSBydW5zLCBzbyB0aGUgY29uc3RyYWludCBsb29w IHNraXBzIGJvdGggZm9ybXMgdG8gYXZvaWQgdGhlCistLSByZWR1bmRhbnQgKGFuZCBvbiB0YWJs ZS1yZW5hbWUgb3Igc2VxdWVuY2UtY29sbGlzaW9uLCBicm9rZW4pCistLSBBTFRFUiBUQUJMRSAu Li4gQUREIENPTlNUUkFJTlQgLi4uIE5PVCBOVUxMIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBu bl9uYW1lZCAoCisgICAgYSBpbnQgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwKKyAgICBiIGlu dCBOT1QgTlVMTAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fbmFtZWQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBubl9uYW1lZDsKKworLS0g UmVuYW1pbmcgdGhlIHRhYmxlIGFmdGVyIGFuIElERU5USVRZIE5PVCBOVUxMIGNvbHVtbiB3YXMg ZGVjbGFyZWQKKy0tIGxlYXZlcyB0aGUgYXV0by1uYW1lZCBjb25zdHJhaW50IGZyb3plbiBhdCB0 aGUgb3JpZ2luYWwgbmFtZSwgd2hpY2gKKy0tIG5vIGxvbmdlciBtYXRjaGVzIHRoZSBwb3N0LXJl bmFtZSAiPHRhYmxlPl88Y29sPl9ub3RfbnVsbCIgcGF0dGVybi4KKy0tIFRoZSBlbWl0dGVkIERE TCBtdXN0IHN0aWxsIHJvdW5kLXRyaXA6IHRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBub3QKKy0t IEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBhIHNlY29uZCBOT1QgTlVMTCwgc2luY2Ug Q1JFQVRFIFRBQkxFCistLSB3aXRoIHRoZSBpbmxpbmUgSURFTlRJVFkgYWxyZWFkeSBjcmVhdGVz IGFuIGF1dG8tTk9ULU5VTEwgdW5kZXIgdGhlCistLSBuZXcgdGFibGUgbmFtZSBhbmQgUEcgb25s eSBwZXJtaXRzIG9uZSBOT1QgTlVMTCBwZXIgY29sdW1uLgorQ1JFQVRFIFRBQkxFIG5uX3JlbmFt ZWQgKAorICAgIGEgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgTk9UIE5VTEwKKyk7 CitBTFRFUiBUQUJMRSBubl9yZW5hbWVkIFJFTkFNRSBUTyBubl9yZW5hbWVkMjsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fcmVuYW1lZDInOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpOworRFJPUCBUQUJMRSBubl9yZW5hbWVkMjsKKworLS0gTG9jYWxseS1kZWNsYXJlZCBO T1QgTlVMTCBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlz IG9taXR0ZWQgZnJvbSB0aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxzZSks IHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNvbWUgb3V0IHZpYSB0aGUgcG9z dC1DUkVBVEUgY29uc3RyYWludAorLS0gbG9vcCByYXRoZXIgdGhhbiBpbmxpbmUuCitDUkVBVEUg VEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIgaW50KSBJTkhFUklU UyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBO VUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2NoJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CisKKy0tIHNjaGVt YV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBkcm9wIHRoZSBzY2hlbWEgcHJlZml4IGZyb20gREVGQVVM VAorLS0gZXhwcmVzc2lvbnMgYW5kIGlubGluZSBDSEVDSyBib2RpZXMgdGhhdCByZWZlcmVuY2Ug c2FtZS1zY2hlbWEKKy0tIG9iamVjdHMgKHNlcXVlbmNlIHZpYSBuZXh0dmFsLCBmdW5jdGlvbiB2 aWEgZGlyZWN0IGNhbGwpLiAgVGhpcworLS0gcmVsaWVzIG9uIHRoZSBkZXBhcnNlciByZXNwZWN0 aW5nIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCByYXRoZXIKKy0tIHRoYW4gb24gc3Vic3RyaW5n IHN0cmlwcGluZy4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3hyZWY7CitDUkVBVEUgU0VRVUVO Q0UgcGd0YmxfZGRsX3hyZWYubXlzZXE7CitDUkVBVEUgRlVOQ1RJT04gcGd0YmxfZGRsX3hyZWYu ZihpbnQpIFJFVFVSTlMgaW50IExBTkdVQUdFIHNxbCBJTU1VVEFCTEUKKyAgICBBUyAnU0VMRUNU ICQxJzsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfeHJlZi50ICgKKyAgICBpZCAgaW50IERFRkFV TFQgbmV4dHZhbCgncGd0YmxfZGRsX3hyZWYubXlzZXEnKSwKKyAgICB2YWwgaW50LAorICAgIENP TlNUUkFJTlQgY2hrIENIRUNLIChwZ3RibF9kZGxfeHJlZi5mKHZhbCkgPiAwKQorKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3hyZWYudCc6OnJlZ2NsYXNzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBT Q0hFTUEgcGd0YmxfZGRsX3hyZWYgQ0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxz ZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3aG9zZQorLS0gY29udGVudHMgaGFw cGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90LiAgU3RyaW5n CistLSBsaXRlcmFsIHRleHQgaXMgb3V0cHV0IHZlcmJhdGltIGJ5IHRoZSBkZXBhcnNlciBhbmQg aXMgdW5hZmZlY3RlZCBieQorLS0gc2VhcmNoX3BhdGggbmFycm93aW5nLgorQ1JFQVRFIFNDSEVN QSBwZ3RibF9kZGxfc3RyOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucCAoaWQgaW50LCBu b3RlIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF9zdHIucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9zdHIucAorICAgIChDT05TVFJBSU5UIGNo ayBDSEVDSyAobm90ZSA8PiAncGd0YmxfZGRsX3N0ci5zZWNyZXQnKSkKKyAgICBGT1IgVkFMVUVT IEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3Ri bF9kZGxfc3RyLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1 YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfc3RyIENBU0NBREU7CisK Ky0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBkb3VibGUtcXVvdGVk IGlkZW50aWZpZXJzCistLSB3aG9zZSBjb250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2No ZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QKKy0tIChmb3IgZXhhbXBsZSBhIGNvbHVtbiBsaXRl cmFsbHkgbmFtZWQgIjxzY2hlbWE+LndlaXJkIiBpbnNpZGUgdGhhdAorLS0gc2NoZW1hKS4gIFRo ZSBtZWNoYW5pc20gaXMgcHVyZWx5IHNlYXJjaF9wYXRoIG5hcnJvd2luZzogdGhlIGRlcGFyc2Vy CistLSBvdXRwdXRzIGF0dHJpYnV0ZSBuYW1lcyB2ZXJiYXRpbSBmcm9tIHBnX2F0dHJpYnV0ZSwg c28gdGhlIHF1b3RlZAorLS0gaWRlbnRpZmllciBjb250ZW50IGlzIG5ldmVyIGV4YW1pbmVkIGZv ciBzY2hlbWEgcHJlZml4ZXMuICBUaGlzIGhvbGRzCistLSBldmVuIHdoZW4gdGhlIHNjaGVtYSBu YW1lIGlzIGEgc2luZ2xlIGxldHRlci4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3FpZDsKK0NS RUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnAgKGlkIGludCwgInBndGJsX2RkbF9xaWQud2VpcmQi IGludCkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9k ZGxfcWlkLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcWlkLnAKKyAgICAoQ09OU1RSQUlOVCBj aGsgQ0hFQ0sgKCJwZ3RibF9kZGxfcWlkLndlaXJkIiA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJP TSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2Rk bF9xaWQucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FTQ0FERTsKKy0tIFNh bWUgd2l0aCBhIHNob3J0IChzaW5nbGUtbGV0dGVyKSBzY2hlbWEgbmFtZSB0byBjb25maXJtIHRo ZXJlIGlzIG5vCistLSBtaW5pbXVtLWxlbmd0aCBhc3N1bXB0aW9uIGluIHRoZSBzdHJpcHBpbmcg cGF0aC4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3ExOworQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF9xMS5wIChpZCBpbnQsICJwZ3RibF9kZGxfcTEud2VpcmQiIGludCkKKyAgICBQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcTEucGMgUEFSVElUSU9OIE9G IHBndGJsX2RkbF9xMS5wCisgICAgKENPTlNUUkFJTlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3Ex LndlaXJkIiA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9xMS5wYyc6OnJlZ2NsYXNzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hF TUEgcGd0YmxfZGRsX3ExIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugd2hl biB0aGUgYmFzZSBzY2hlbWEgbmFtZSBpdHNlbGYgcmVxdWlyZXMKKy0tIHF1b3RpbmcgKGl0cyBw cmVmaXggc3RhcnRzIHdpdGggIikuICBCb3RoIGZvcm1zIG9mIHRoZSBwcmVmaXggLQorLS0gYmFy ZS1sb3dlcmNhc2UgYW5kIHF1b3RlZCAtIG11c3QgYmUgc3RyaXBwZWQgZnJvbSBvdXRlcgorLS0g QUxURVIgVEFCTEUgLyBPTiAvIENSRUFURSBJTkRFWCBwcmVmaXhlcywgd2hpbGUgaW5uZXIgcXVv dGVkCistLSBpZGVudGlmaWVycyB0aGF0IGhhcHBlbiB0byBiZWdpbiB0aGUgc2FtZSB3YXkgbXVz dCBiZSBwcmVzZXJ2ZWQuCitDUkVBVEUgU0NIRU1BICJQZ1RibC1EZGwtUSI7CitDUkVBVEUgVEFC TEUgIlBnVGJsLURkbC1RIi4iVCIgKGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNo ayBDSEVDSyAodmFsID4gMCkpOworQ1JFQVRFIElOREVYICJUX3ZhbF9pZHgiIE9OICJQZ1RibC1E ZGwtUSIuIlQiICh2YWwpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCciUGdUYmwt RGRsLVEiLiJUIic6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93 bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFs aWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hFTUEgIlBnVGJsLURkbC1RIiBDQVNDQURFOworCist LSBFcnJvcjogbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlLgorQ1JFQVRFIFZJ RVcgdiBBUyBTRUxFQ1QgMSBBUyB4OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd2 Jzo6cmVnY2xhc3MpOworCitDUkVBVEUgU0VRVUVOQ0UgczsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgncyc6OnJlZ2NsYXNzKTsKKworLS0gTlVMTCBhcmd1bWVudCByZXR1cm5zIG5v IHJvd3MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoTlVMTCk7CisKKy0tIFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdmFsaWRhdGlvbjogaWYgdGhlIHJlZmVyZW5jZWQgaW5k ZXgKKy0tIHdvdWxkIG5vdCBiZSBlbWl0dGVkIChiZWNhdXNlIGl0cyBzb3VyY2Uga2luZCBpcyBz dXBwcmVzc2VkKSBidXQKKy0tIHJlcGxpY2FfaWRlbnRpdHkgaXRzZWxmIHdvdWxkIGJlLCB0aGUg ZnVuY3Rpb24gcmFpc2VzIGFuIGVycm9yIHNvCistLSB0aGUgZW1pdHRlZCBEREwgbmV2ZXIgZGFu Z2xlcy4gIEV4ZXJjaXNlIGFsbCB0aHJlZSBjb25zdHJhaW50LWJhY2tlZAorLS0gZm9ybXMgKFBL LCBVTklRVUUsIEVYQ0xVU0lPTikgYW5kIGEgYmFyZSBDUkVBVEUgVU5JUVVFIElOREVYLCBpbgor LS0gYm90aCB0aGUgZXhjZXB0LWxpc3QgYW5kIG9ubHktbGlzdCBzaGFwZXMuCistLQorLS0gUEst YmFja2VkOiBleGNlcHRfa2luZHM9cHJpbWFyeV9rZXkgd2l0aG91dCBleGNlcHRfa2luZHM9cmVw bGljYV9pZGVudGl0eS4KK0NSRUFURSBUQUJMRSByaV9wa19leGNsIChhIGludCBQUklNQVJZIEtF WSk7CitBTFRFUiBUQUJMRSByaV9wa19leGNsIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg cmlfcGtfZXhjbF9wa2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19l eGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3By aW1hcnlfa2V5J10pOworLS0gU2FtZSBjYWxsIGJ1dCBhbHNvIGV4Y2x1ZGluZyByZXBsaWNhX2lk ZW50aXR5IHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19l eGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3By aW1hcnlfa2V5JywncmVwbGljYV9pZGVudGl0eSddKTsKK0RST1AgVEFCTEUgcmlfcGtfZXhjbDsK KworLS0gVU5JUVVFLWNvbnN0cmFpbnQtYmFja2VkIHJlcGxpY2EgaWRlbnRpdHkgaW5kZXguCitD UkVBVEUgVEFCTEUgcmlfdW5pcV9leGNsIChhIGludCBOT1QgTlVMTCBVTklRVUUsIGIgaW50KTsK K0FMVEVSIFRBQkxFIHJpX3VuaXFfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJp X3VuaXFfZXhjbF9hX2tleTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfdW5p cV9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3VuaXF1ZSddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfdW5pcV9leGNs Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1 ZScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitEUk9QIFRBQkxFIHJpX3VuaXFfZXhjbDsKKworLS0g QmFyZSBDUkVBVEUgVU5JUVVFIElOREVYIChubyBiYWNraW5nIGNvbnN0cmFpbnQpIHVzZWQgYXMg UkVQTElDQQorLS0gSURFTlRJVFk6IHRoZSBpbmRleCBpcyBlbWl0dGVkIGJ5IHRoZSAiaW5kZXgi IGtpbmQsIHNvIGV4Y2x1ZGluZworLS0gImluZGV4IiB3aXRob3V0IGFsc28gZXhjbHVkaW5nICJy ZXBsaWNhX2lkZW50aXR5IiBtdXN0IGVycm9yLgorQ1JFQVRFIFRBQkxFIHJpX2lkeF9leGNsIChh IGludCBOT1QgTlVMTCwgYiBpbnQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfZXhjbF9h X3VuaXEgT04gcmlfaWR4X2V4Y2wgKGEpOworQUxURVIgVEFCTEUgcmlfaWR4X2V4Y2wgUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfZXhjbF9hX3VuaXE7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl LCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdyaV9pZHhfZXhjbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0 X2tpbmRzID0+IEFSUkFZWydpbmRleCcsJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitEUk9QIFRBQkxF IHJpX2lkeF9leGNsOworCistLSBJbmNsdWRlLXNpZGUgYW5hbG9nOiBvbmx5X2tpbmRzPXJlcGxp Y2FfaWRlbnRpdHkgbXVzdCBpbmNsdWRlIHRoZSBraW5kCistLSB0aGF0IGVtaXRzIHRoZSBpbmRl eCwgb3IgdGhlIGZ1bmN0aW9uIGVycm9ycy4KK0NSRUFURSBUQUJMRSByaV9vbmx5IChhIGludCBO T1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FMVEVSIFRBQkxFIHJpX29ubHkgUkVQTElDQSBJREVO VElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ffa2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydyZXBsaWNhX2lkZW50aXR5J10pOworLS0gSW5jbHVkaW5nIGJvdGgga2luZHMgc3Vj Y2VlZHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX29ubHknOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ3JlcGxpY2Ff aWRlbnRpdHknXSk7CitEUk9QIFRBQkxFIHJpX29ubHk7CisKKy0tIFBlci1raW5kIG9ubHlfa2lu ZHMgLyBleGNlcHRfa2luZHMgY292ZXJhZ2UuICBGb3IgZWFjaCBraW5kIGluIHRoZSB2b2NhYnVs YXJ5LAorLS0gdmVyaWZ5IHRoYXQgb25seV9raW5kcz1LIGVtaXRzIGp1c3QgdGhhdCBraW5kJ3Mg b3V0cHV0IGFuZCB0aGF0IGV4Y2VwdF9raW5kcz1LCistLSBvbWl0cyBqdXN0IHRoYXQga2luZCdz IG91dHB1dC4gIEtpbmRzIHdpdGggbm8gZml4dHVyZSBhYm92ZSAodHJpZ2dlciwKKy0tIHBvbGlj eSkgYXJlIHN0aWxsIHJlY29nbml6ZWQgYnV0IGN1cnJlbnRseSBlbWl0IG5vdGhpbmc7IG9ubHlf a2luZHM9SworLS0gcmV0dXJucyB6ZXJvIHJvd3MgZm9yIHRoZW0uICBGaXh0dXJlcyB1c2VkOgor LS0gICBpZHhkOiBQSyArIHR3byBzZWNvbmRhcnkgQ1JFQVRFIElOREVYCistLSAgIGNvbnM6IFBL ICsgVU5JUVVFICsgQ0hFQ0sgKyBGSyAoY29uc3RyYWludC1iYWNrZWQpCistLSAgIHJ0OiAgIENS RUFURSBSVUxFCistLSAgIHN0eDogIENSRUFURSBTVEFUSVNUSUNTCistLSAgIHJsczogIEVOQUJM RS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkKKy0tICAgcmlfZnVsbDogUkVQTElDQSBJREVOVElU WSBGVUxMIChubyBzb3VyY2Uta2luZCBkZXBlbmRlbmN5KQorQ1JFQVRFIFRBQkxFIGV4Y2xfZml4 IChybmcgaW50NHJhbmdlLAorICAgIEVYQ0xVREUgVVNJTkcgZ2lzdCAocm5nIFdJVEggJiYpKTsK KworLS0gb25seV9raW5kcz1LOiBlbWl0IG9ubHkga2luZCBLJ3Mgc3RhdGVtZW50cy4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3ByaW1hcnlfa2V5J10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdj b25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd1bmlx dWUnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2V4Y2xfZml4Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydleGNsdXNpb24nXSk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydydWxlJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3N0YXRpc3RpY3MnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Js cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmxzJ10p OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydyZXBsaWNhX2lkZW50aXR5J10pOwor LS0gdHJpZ2dlciAvIHBvbGljeSBhcmUgbm90IHlldCBpbXBsZW1lbnRlZDsgdW5jb21tZW50IHdo ZW4KKy0tIHBnX2dldF90cmlnZ2VyX2RkbCAvIHBnX2dldF9wb2xpY3lfZGRsIGhlbHBlcnMgbGFu ZC4KKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3RyaWdnZXInXSk7CistLSBTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydwb2xpY3knXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1L OiBlbWl0IGV2ZXJ5dGhpbmcgZXhjZXB0IGtpbmQgSydzIHN0YXRlbWVudHMuICBQSy9VTklRVUUv CistLSBJTkRFWCBhcmUgZXhlcmNpc2VkIG9uIHRhYmxlcyB3aXRob3V0IFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVgKKy0tIHNvIHRoZSB2YWxpZGF0aW9uIGRvZXMgbm90IHRyaXAuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2Vw dF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJS QVlbJ2NoZWNrJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2ZpeCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydleGNsdXNp b24nXSk7CistLSB0cmlnZ2VyIC8gcG9saWN5IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1bmNv bW1lbnQgd2hlbgorLS0gcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVs cGVycyBsYW5kLgorLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd0cmlnZ2VyJ10p OworLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydwb2xpY3knXSk7CistLSBleGNl cHRfa2luZHM9dGFibGUgc3VwcHJlc3NlcyB0aGUgQ1JFQVRFIFRBQkxFICsgT1dORVIgKyBjaGls ZC1kZWZhdWx0CistLSBTRVQgREVGQVVMVCArIGF0dG9wdGlvbnMgcGFzc2VzLCBsZWF2aW5nIG9u bHkgdGhlIHN1Yi1vYmplY3QgcGFzc2VzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3RhYmxlJ10pOworCistLSBNdWx0aS1raW5kIGNvbXBvc2l0aW9ucy4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9r aW5kcyA9PiBBUlJBWVsndGFibGUnLCdpbmRleCddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsncHJpbWFyeV9rZXknLCdmb3JlaWduX2tleSddKTsKKy0tIER1cGxpY2F0ZSBlbnRyaWVz IGluIHRoZSBsaXN0IGFyZSBzaWxlbnRseSBkZS1kdXBsaWNhdGVkIGJ5IHRoZQorLS0gQml0bWFw c2V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydpbmRleCcsJ2luZGV4J10pOworCitE Uk9QIFRBQkxFIGV4Y2xfZml4OworCistLSBLaW5kLWZpbHRlciB0ZXN0cyBvbiBwYXJ0aXRpb25l ZCB0YWJsZXMgd2l0aCBpbmRleGVzLgorLS0KKy0tIG9ubHlfa2luZHM9aW5kZXggb24gYSBwYXJ0 aXRpb25lZCB0YWJsZTogb25seSB0aGUgcm9vdCBDUkVBVEUgSU5ERVggaXMKKy0tIGVtaXR0ZWQ7 IG5vIENSRUFURSBUQUJMRSwgbm8gcGFydGl0aW9uIGNoaWxkcmVuIChLSU5EX1BBUlRJVElPTiBh YnNlbnQpLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4ZWQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1pbmRleCBv biBhIHBhcnRpdGlvbmVkIHRhYmxlOiBDUkVBVEUgVEFCTEUgZm9yIHRoZSBwYXJlbnQKKy0tIGFu ZCBhbGwgY2hpbGRyZW4gYXJlIGVtaXR0ZWQ7IG5vIGluZGV4IHN0YXRlbWVudHMuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9taXhlZCc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRfa2luZHMgPT4g QVJSQVlbJ2luZGV4J10pOworCistLSBvbmx5X2tpbmRzPXByaW1hcnlfa2V5IG9uIGEgcGFydGl0 aW9uZWQgdGFibGU6IG9ubHkgdGhlIEFMVEVSIFRBQkxFIEFERAorLS0gQ09OU1RSQUlOVCBQSyBv biB0aGUgcGFyZW50OyB0aGUgY2hpbGQncyBpbmhlcml0ZWQgUEsgKGNvbmlzbG9jYWw9ZmFsc2Up CistLSBpcyBza2lwcGVkOyBubyBDUkVBVEUgVEFCTEUsIG5vIHBhcnRpdGlvbiBjaGlsZHJlbi4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3BrJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlfa2luZHMg PT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworCistLSBvbmx5X2tpbmRzPUsgb24gYSB0YWJsZSB0 aGF0IGRvZXMgbm90IGhhdmUgYW55IEsgb2YgdGhhdCBraW5kIGlzIGEgdmFsaWQKKy0tIGZpbHRl ciBhbmQgcmV0dXJucyB6ZXJvIHJvd3MuICBUZXN0ZWQgcHJldmlvdXNseSB3aXRoIGZvcmVpZ25f a2V5CistLSBvbiAncmVmZCc7IGhlcmUgYWxzbyBydWxlLCBzdGF0aXN0aWNzLCBybHMsIHJlcGxp Y2FfaWRlbnRpdHksIGFuZAorLS0gZXhjbHVzaW9uIG9uICdiYXNpYycgKHdoaWNoIGhhcyBvbmx5 IFBLICsgY29sdW1ucykuCitTRUxFQ1QgY291bnQoKikgQVMgcnVsZV9yb3dzCisgIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CitTRUxFQ1QgY291bnQoKikgQVMgc3RhdHNfcm93cworICBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBv bmx5X2tpbmRzID0+IEFSUkFZWydzdGF0aXN0aWNzJ10pOworU0VMRUNUIGNvdW50KCopIEFTIHJs c19yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3JscyddKTsKK1NFTEVDVCBjb3VudCgqKSBB UyByaV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CitT RUxFQ1QgY291bnQoKikgQVMgZXhjbF9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2V4Y2x1 c2lvbiddKTsKKworLS0gSW5wdXQtdmFsaWRhdGlvbiBlZGdlIGNhc2VzIGZvciB0aGUga2luZCBh cnJheS4gIEFsbAorLS0gb2YgdGhlc2UgcmFpc2UgYW4gZXJyb3I7IHRoZSBmdW5jdGlvbiBuZXZl ciByZWFjaGVzIHJlbGF0aW9uIG9wZW4uCistLSBFbXB0eSBhcnJheToKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJBWVtd Ojp0ZXh0W10pOworLS0gTlVMTCBlbGVtZW50OgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZW05VTEw6OnRleHRdKTsK Ky0tIFVucmVjb2duaXplZCBraW5kOgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdi YXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZWydub19zdWNoX2tpbmQnXSk7Cist LSBTYW1lIGtpbmQgc3BlY2lmaWVkIHRocm91Z2ggYm90aCBwYXJhbWV0ZXJzIGlzIHN0aWxsIG11 dGV4LXJlamVjdGVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJl Z2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlfa2luZHMgPT4gQVJS QVlbJ2luZGV4J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0X2tpbmRz ID0+IEFSUkFZWydydWxlJ10pOworCistLSBSb3VuZC10cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBl dmVyeSB0ZXN0IHRhYmxlLCBjYXB0dXJlIHRoZSBEREwgdGhlCistLSBmdW5jdGlvbiBlbWl0cywg ZHJvcCB0aGUgc2NoZW1hLCByZXBsYXkgZWFjaCB0YWJsZSdzIERETCBpbgorLS0gZGVwZW5kZW5j eSBvcmRlciwgYW5kIGNvbmZpcm0gdGhhdCBwZ19nZXRfdGFibGVfZGRsIG9uIHRoZSByZWNyZWF0 ZWQKKy0tIHJlbGF0aW9uIG1hdGNoZXMgdGhlIG9yaWdpbmFsIGxpbmUtZm9yLWxpbmUuICBUaGUg ZmluYWwgU0VMRUNUIG11c3QKKy0tIHJldHVybiB6ZXJvIHJvd3MuCitDUkVBVEUgVEVNUCBUQUJM RSBwZ3RibF9kZGxfcnRfb3JpZyAobmFtZSB0ZXh0LCBvcmQgaW50LCBsaW5lIHRleHQpOworSU5T RVJUIElOVE8gcGd0YmxfZGRsX3J0X29yaWcKK1NFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUK K0ZST00gKFZBTFVFUworICAgICAgICAoJ2Jhc2ljJyksICgnaWRfY29scycpLCAoJ2lkX2N1c3Rv bScpLCAoJ2dlbl9jb2xzJyksICgnZ2VuX3ZpcnR1YWwnKSwgKCdzdG9yYWdlX2NvbHMnKSwKKyAg ICAgICAgKCdyZWZkJyksICgnY29ucycpLCAoJ251bGxzX25kJyksICgnaWR4X2luYycpLAorICAg ICAgICAoJ2ZrX2FjdHNfdGd0JyksICgnZmtfYWN0cycpLCAoJ25vdGVuZl90Z3QnKSwgKCdub3Rl bmYnKSwgKCdzZWxmX3JlZicpLCAoJ3RlbXBvcmFsX3BrJyksCisgICAgICAgICgnaWR4ZCcpLAor ICAgICAgICAoJ3BhcicpLCAoJ2NoJyksICgnYXR0b3B0JyksCisgICAgICAgICgncGFydGVkX3Jh bmdlJyksICgncGFydGVkX3JhbmdlXzEnKSwgKCdwYXJ0ZWRfcmFuZ2VfZGVmJyksCisgICAgICAg ICgncGFydGVkX2hhc2gnKSwgKCdwYXJ0ZWRfaGFzaF8wJyksCisgICAgICAgICgncGFydGVkX2xp c3QnKSwKKyAgICAgICAgKCdwYXJ0ZWRfaWR4JyksICgncGFydGVkX2lkeF9hJyksCisgICAgICAg ICgncGFydGVkX3BsYWluJyksICgncGFydGVkX3BsYWluX2EnKSwKKyAgICAgICAgKCdwYXJ0ZWRf cGsnKSwgKCdwYXJ0ZWRfcGtfYScpLAorICAgICAgICAoJ3BhcnRlZF9zdWInKSwgKCdwYXJ0ZWRf c3ViX2EnKSwgKCdwYXJ0ZWRfc3ViX2ExJyksCisgICAgICAgICgncGFydGVkX2NoaWxkX2lkeCcp LCAoJ3BhcnRlZF9jaGlsZF9pZHhfYScpLAorICAgICAgICAoJ3BhcnRlZF9taXhlZCcpLCAoJ3Bh cnRlZF9taXhlZF9hJyksCisgICAgICAgICgncGFydGVkX2ZrX3RndCcpLCAoJ3BhcnRlZF9maycp LCAoJ3BhcnRlZF9ma19hJyksCisgICAgICAgICgncnRfbG9nJyksICgncnQnKSwKKyAgICAgICAg KCdzdHgnKSwgKCdybHMnKSwgKCdyaV9mdWxsJyksICgncmlfaWR4JyksICgndW5vJykKKyAgICAg KSBBUyB0KG5hbWUpLAorICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxf dGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb3duZXIgPT4gZmFsc2UpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCk7CisKK0RPICQk CitERUNMQVJFCisgICAgdGFibGVzIENPTlNUQU5UIHRleHRbXSA6PSBBUlJBWVsKKyAgICAgICAg J2Jhc2ljJywgJ2lkX2NvbHMnLCAnaWRfY3VzdG9tJywgJ2dlbl9jb2xzJywgJ2dlbl92aXJ0dWFs JywgJ3N0b3JhZ2VfY29scycsCisgICAgICAgICdyZWZkJywgJ2NvbnMnLCAnbnVsbHNfbmQnLCAn aWR4X2luYycsCisgICAgICAgICdma19hY3RzX3RndCcsICdma19hY3RzJywgJ25vdGVuZl90Z3Qn LCAnbm90ZW5mJywgJ3NlbGZfcmVmJywgJ3RlbXBvcmFsX3BrJywKKyAgICAgICAgJ2lkeGQnLAor ICAgICAgICAncGFyJywgJ2NoJywgJ2F0dG9wdCcsCisgICAgICAgICdwYXJ0ZWRfcmFuZ2UnLCAn cGFydGVkX3JhbmdlXzEnLCAncGFydGVkX3JhbmdlX2RlZicsCisgICAgICAgICdwYXJ0ZWRfaGFz aCcsICdwYXJ0ZWRfaGFzaF8wJywKKyAgICAgICAgJ3BhcnRlZF9saXN0JywKKyAgICAgICAgJ3Bh cnRlZF9pZHgnLCAncGFydGVkX2lkeF9hJywKKyAgICAgICAgJ3BhcnRlZF9wbGFpbicsICdwYXJ0 ZWRfcGxhaW5fYScsCisgICAgICAgICdwYXJ0ZWRfcGsnLCAncGFydGVkX3BrX2EnLAorICAgICAg ICAncGFydGVkX3N1YicsICdwYXJ0ZWRfc3ViX2EnLCAncGFydGVkX3N1Yl9hMScsCisgICAgICAg ICdwYXJ0ZWRfY2hpbGRfaWR4JywgJ3BhcnRlZF9jaGlsZF9pZHhfYScsCisgICAgICAgICdwYXJ0 ZWRfbWl4ZWQnLCAncGFydGVkX21peGVkX2EnLAorICAgICAgICAncGFydGVkX2ZrX3RndCcsICdw YXJ0ZWRfZmsnLCAncGFydGVkX2ZrX2EnLAorICAgICAgICAncnRfbG9nJywgJ3J0JywKKyAgICAg ICAgJ3N0eCcsICdybHMnLCAncmlfZnVsbCcsICdyaV9pZHgnLCAndW5vJworICAgIF07CisgICAg dCB0ZXh0OworICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAgRFJPUCBTQ0hFTUEgcGd0YmxfZGRs X3Rlc3QgQ0FTQ0FERTsKKyAgICBDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworICAgIEZP UkVBQ0ggdCBJTiBBUlJBWSB0YWJsZXMgTE9PUAorICAgICAgICBGT1Igc3RtdCBJTgorICAgICAg ICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZyBXSEVSRSBuYW1lID0gdCBP UkRFUiBCWSBvcmQKKyAgICAgICAgTE9PUAorICAgICAgICAgICAgQkVHSU4KKyAgICAgICAgICAg ICAgICBFWEVDVVRFIHN0bXQ7CisgICAgICAgICAgICBFWENFUFRJT04gV0hFTiBkdXBsaWNhdGVf dGFibGUgVEhFTgorICAgICAgICAgICAgICAgIE5VTEw7ICAtLSBwYXJ0aXRpb24gY2hpbGQgYWxy ZWFkeSBjcmVhdGVkIGJ5IGl0cyBwYXJlbnQncyBEREwKKyAgICAgICAgICAgIEVORDsKKyAgICAg ICAgRU5EIExPT1A7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CisKK1dJVEggYWZ0ZXJfZGRsIEFT ICgKKyAgICBTRUxFQ1QgdC5uYW1lLCBvLm9yZCwgby5saW5lCisgICAgRlJPTSAoU0VMRUNUIERJ U1RJTkNUIG5hbWUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykgQVMgdCwKKyAgICAgICAgIExBVEVS QUwgcGdfZ2V0X3RhYmxlX2RkbCgoJ3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xh c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UpIFdJ VEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCkKKykKKyhTRUxFQ1QgJ21pc3NpbmctaW4tY29weScg QVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcKKyBFWENFUFQK KyBTRUxFQ1QgJ21pc3NpbmctaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2Rk bCkKK1VOSU9OIEFMTAorKFNFTEVDVCAnZXh0cmEtaW4tY29weScgQVMga2luZCwgbmFtZSwgb3Jk LCBsaW5lIEZST00gYWZ0ZXJfZGRsCisgRVhDRVBUCisgU0VMRUNUICdleHRyYS1pbi1jb3B5Jywg bmFtZSwgb3JkLCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcpCitPUkRFUiBCWSBraW5kLCBu YW1lLCBvcmQ7CisKKy0tIENsZWFudXAuCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVND QURFOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAxMTdlNzM3OWYxMC4uZWIxMTg5NzYy YTAgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNjQ4LDYgKzE2NDgsNyBAQCBMaXN0 ZW5lckVudHJ5CiBMb0luZm8KIExvYWRTdG10CiBMb2NhbEJ1ZmZlckxvb2t1cEVudAorTG9jYWxO b3ROdWxsRW50cnkKIExvY2FsUGdCYWNrZW5kU3RhdHVzCiBMb2NhbFRyYW5zYWN0aW9uSWQKIExv Y2F0aW9uCkBAIC0zMTUyLDYgKzMxNTMsNyBAQCBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2Fu U3RhdGUKIFRhYmxlRnVuY1R5cGUKIFRhYmxlSW5mbworVGFibGVEZGxDb250ZXh0CiBUYWJsZUxp a2VDbGF1c2UKIFRhYmxlU2FtcGxlQ2xhdXNlCiBUYWJsZVNjYW5EZXNjCi0tIAoyLjUxLjAKCg== --00000000000015cc3b0655b0fa40--