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 1w7rIf-005lcB-2D for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 08:51:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7rId-00GDV6-2G for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 08:51:44 +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 1w7rId-00GDUy-0x for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 08:51:43 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7rIa-00000002K8C-1Il7 for pgsql-hackers@postgresql.org; Wed, 01 Apr 2026 08:51:43 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2ab39b111b9so28045565ad.1 for ; Wed, 01 Apr 2026 01:51:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775033498; cv=none; d=google.com; s=arc-20240605; b=Roik6s7OfnbH8wzQvwJft5u1acX2bpXDQy5S6O2HHb6Pn211jsAQ3Qu3UfKL/IZ1F8 24kQigFcaYcKSNg/ABQ4XibWmJ5tJoqfFr691hIaEA5Q/Vp3XYY9kKAVLzRvk0S9AEQ3 KEfaENRJF6UbxdvNmqgGHBTvsEyIB1SwdLdgROC3Z+tJprc53hoDPNkB/1IkWmuvDA2H 9VkK8ManyaLtUY9bjQl2Z4sdNN9K3hnyiDJFI7nsxXv5yFmXYoBIuo5eJ1Hns2mYGonO 0LC06wgxoRysJ9R9aC5uxtN+WYv2ZR75qlmdVBDJJWa6cFUwzC5JECO504PM1DRkM69/ +Igg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=twLMkZLpYqwuXZJCAbqCiwuR+TCjDE9auR/RBk1Z/2E=; fh=/fpVvxoH6A37LJGUJZ8S2BCWkxkaDWbmP1vZKidmssc=; b=ZYBpmxAy0b01h+crS9ghpWxc9aeOa4oLdk5xA9rvvUhfTl6z1xD+MhP7urlYhUap96 g6SdsXo7U/LLdxr5u+ogibQ0t1dZKFZmAdsbE8cTpXJCUWBy/A/zgj4SX5kgMcp+SUZ1 Hf5YyiFawBMJWeSuKWVK6Nq73O71S1P4wQ9gHAU6SNryWeHGYCh03ZVOrTOr0pgfSQIG PT+2nzkVaW9gP6DVjBuaxh6pfiJ16OFjh87hdzr3m2HVmDA+8lIGXsXHbjUq8HbY1a9M DTFNyUwoXOIGFZve0hXsVagEteJTjSHNwpBzrtI2N9xXxb+eRbSNPujgVdPiCYzlUcZl Zjbg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775033498; x=1775638298; darn=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=twLMkZLpYqwuXZJCAbqCiwuR+TCjDE9auR/RBk1Z/2E=; b=GUzttW9fFEwWhoCf/o0syLSLEiVs5ZbtKcewWzOJlliFd3e7Ag/1xIo3zimugk+zPX hIxe1jFNMkdiGB1cwhNhwykgansHebGx1rAu0/q20Cb6vUAY4Ds7e+qmQPJXgLc+XitA eTdiJbIkzGvZZ0mDggmDxtwUlq+hPHLfaBPpVxcqHKgVbH36jbOiCBhefqcNSGvjHFL0 wFFENh1fjlv4g0gJYHBVtz9xod3FlTvsFHU2yInqR3aV/pWTx1xoEv/x+iU6itZhxhdC 3p4YcM3SxfL3gORWhtYoOSshWbIEL9gIri5mXoi3jAXZXrJ2CFEjfYMN5bcgULp5kMSD vwdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775033498; x=1775638298; 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=twLMkZLpYqwuXZJCAbqCiwuR+TCjDE9auR/RBk1Z/2E=; b=nIlGOniPZRFKa3EQ9N6RiFIKIBdk5MiVVOhlDWXvxXLVIFwkF5vtw7iK+80Y2GLVQD 2c5qrKZALLiPrg/poSiS/821gj2+IfiCFg7ifVMfJ8WCbdo4hpxRedVOV2IpKii+AXqP bvP+vghdwl46NGyr7jkQytwZXTzH3gteghylpLF6kqn7ePMaeBAXaQKk4JaOEMzCr1W3 PSP/QEr7H9m+N/sc7FwxeZA+ote/o78aAAsFl6IuZGNVsu6HmAri8VILq5+0QLl9uvnf 0yLvmw9QxmQCuX7bwXiXN0QgxWe+OXxYlxSQkbtJTCI096MiCZNnOBOQy7+BjnLK2JK3 +5TQ== X-Forwarded-Encrypted: i=1; AJvYcCWnEmr2LC20iytgHWkwRzCCOJIN2MMjEWwg9vjBATHNSoTfF1hppXpEfmdJ2YBCdvRIeK5Waz6Q3JVAgn6Z@postgresql.org X-Gm-Message-State: AOJu0YxLPpE09gQqtlwCVBrDvTF7y0iiLxoR041ALbGICkb9uuzbwX73 gEGiI9MWpqBgMeK2JdD1gLro8mnRiiGsyOKimMgjYjEfoRasxPCcQ8ZfK2dRfoctRiSqILAEHVH cTtkBDPedSD/U9+IwdakQ+4zu5PqMCFU= X-Gm-Gg: ATEYQzyqncH7E12UOIH68Lugga9OzbAUnS7hpjR+ZWR36xACMLXGp38id2LVbHRn3w7 tPZosQKD3yx1LoP/JzMDHvju83YxJ7wEShMiGPJW8w+BcXFv0ZBg/rVkkojOmzurSnxIqNmOhMH p4vRc6h+3rU2o1/TABzsQK7pyI+nloJc+y+SeupA+2JeGLkn/Un0OBYg8TDrIHFflSXoFMHHi73 CEEbBc2exuDOH4Bkvtwsc0b/tYP3si8Ravyb95m6cqTpySZNi4TWz03ac9qs7v8tf7NiBslJdCP B+UTchRRpzO6mTjSyiw= X-Received: by 2002:a17:902:ebcb:b0:2b2:52af:52b0 with SMTP id d9443c01a7336-2b269b0029cmr30602345ad.17.1775033498349; Wed, 01 Apr 2026 01:51:38 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> <77FA04FE-1F84-4DA1-8855-8BBFD8CC889A@gmail.com> In-Reply-To: From: Amit Langote Date: Wed, 1 Apr 2026 17:51:21 +0900 X-Gm-Features: AQROBzAK-jtO-JBFpo1i4WzsvbSbjeRFAP0ggKuTqf5HVufDa4Aa5lF-SL3FoOE Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Junwang Zhao Cc: Chao Li , Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000225184064e623116" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000225184064e623116 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 1, 2026 at 12:54=E2=80=AFAM Junwang Zhao wr= ote: > + if (riinfo->fpmeta =3D=3D NULL) > + { > + /* Reload to ensure it's valid. */ > + riinfo =3D ri_LoadConstraintInfo(riinfo->constraint_id); > > I was thinking of wrapping the reload in a conditional check like > `!riinfo->valid`, since `riinfo` can be valid even when `fpmeta =3D=3D NU= LL`. > However, `if (riinfo->fpmeta =3D=3D NULL)` should rarely be true, so the > unconditional reload is harmless, and the code is cleaner. > > +1 to the fix. Thanks for checking. I have just pushed a slightly modified version of that. > > 0002 is the rebased batching patch. > > The change of RI_FastPathEntry from storing riinfo to fk_relid > makes sense to me. I'll do another review on 0002 tomorrow. Here's another version. This time, I have another fixup patch (0001) to make FastPathMeta self-contained by copying the FmgrInfo structs it needs out of RI_CompareHashEntry rather than storing pointers into it. This avoids any dependency on those cache entries remaining stable. I'll push that once the just committed patch has seen enough BF animals. 0002 is rebased over that. -- Thanks, Amit Langote --000000000000225184064e623116 Content-Type: application/octet-stream; name="v14-0001-Make-FastPathMeta-self-contained-by-copying-Fmgr.patch" Content-Disposition: attachment; filename="v14-0001-Make-FastPathMeta-self-contained-by-copying-Fmgr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnfsxdsq1 RnJvbSAwYTQxODdhYTcyYmFlNjQ3ZjYyMWVhMjQ2MjQ2OWZmNDA5YzAwNzU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMSBBcHIgMjAyNiAxNTo1MzoxMyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjE0 IDEvMl0gTWFrZSBGYXN0UGF0aE1ldGEgc2VsZi1jb250YWluZWQgYnkgY29weWluZyBGbWdySW5m bwogc3RydWN0cwoKRmFzdFBhdGhNZXRhIHN0b3JlZCBwb2ludGVycyBpbnRvIHJpX2NvbXBhcmVf Y2FjaGUgZW50cmllcyB2aWEKY29tcGFyZV9lbnRyaWVzW10sIGNyZWF0aW5nIGEgZGVwZW5kZW5j eSBvbiB0aGF0IGNhY2hlIHJlbWFpbmluZwpzdGFibGUuICBJZiByaV9jb21wYXJlX2NhY2hlIGVu dHJpZXMgd2VyZSBpbnZhbGlkYXRlZCBhZnRlciBmcG1ldGEKd2FzIHBvcHVsYXRlZCwgdGhlIHBv aW50ZXJzIHdvdWxkIGRhbmdsZS4KClJlcGxhY2UgY29tcGFyZV9lbnRyaWVzW10gd2l0aCBpbmxp bmUgY29waWVzIG9mIHRoZSB0d28gRm1nckluZm8KZmllbGRzIGFjdHVhbGx5IG5lZWRlZCAoY2Fz dF9mdW5jX2ZpbmZvIGFuZCBlcV9vcHJfZmluZm8pLCBjb3BpZWQKYXQgcG9wdWxhdGUgdGltZSB2 aWEgZm1ncl9pbmZvX2NvcHkoKS4gIGZwbWV0YSBub3cgZGVwZW5kcyBvbmx5IG9uCnJpaW5mbyBy ZW1haW5pbmcgdmFsaWQsIHdoaWNoIGlzIGFscmVhZHkgaGFuZGxlZCBieSB0aGUgaW52YWxpZGF0 aW9uCmNhbGxiYWNrLgoKVGhpcyBpc3N1ZSB3YXMgaW50cm9kdWNlZCBieSBjb21taXQgMmRhODZj MWVmOSAoIkFkZCBmYXN0IHBhdGggZm9yCmZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgY2hlY2tzIiku CgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FGNEMwd3MzY08rejVjTGtQ dXZ3bkF3a1NwN3NmdmdHajN5UT1MaTZLTk1xQUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNr ZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIHwgMjQgKysrKysrKysrKysrLS0tLS0tLS0tLS0t CiAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCA1MmJiMmYyZmVlOS4uMmRlMDhkYTY1Mzkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCkBAIC0xNTAsNyArMTUwLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgUklfQ29tcGFyZUhhc2hFbnRyeSBSSV9Db21wYXJlSGFzaEVudHJ5OwogLyog RmFzdC1wYXRoIG1ldGFkYXRhIGZvciBSSSBjaGVja3Mgb24gZm9yZWlnbiBrZXkgcmVmZXJlbmNp bmcgdGFibGVzICovCiB0eXBlZGVmIHN0cnVjdCBGYXN0UGF0aE1ldGEKIHsKLQlSSV9Db21wYXJl SGFzaEVudHJ5ICpjb21wYXJlX2VudHJpZXNbUklfTUFYX05VTUtFWVNdOworCUZtZ3JJbmZvCWVx X29wcl9maW5mb1tSSV9NQVhfTlVNS0VZU107CisJRm1nckluZm8JY2FzdF9mdW5jX2ZpbmZvW1JJ X01BWF9OVU1LRVlTXTsKIAlSZWdQcm9jZWR1cmUgcmVnb3BzW1JJX01BWF9OVU1LRVlTXTsKIAlP aWQJCQlzdWJ0eXBlc1tSSV9NQVhfTlVNS0VZU107CiAJaW50CQkJc3RyYXRzW1JJX01BWF9OVU1L RVlTXTsKQEAgLTI5OTYsMTYgKzI5OTcsMTIgQEAgYnVpbGRfaW5kZXhfc2NhbmtleXMoY29uc3Qg UklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IHJp aW5mby0+bmtleXM7IGkrKykKIAl7Ci0JCWlmIChwa19udWxsc1tpXSAhPSAnbicpCi0JCXsKLQkJ CVJJX0NvbXBhcmVIYXNoRW50cnkgKmVudHJ5ID0gZnBtZXRhLT5jb21wYXJlX2VudHJpZXNbaV07 Ci0KLQkJCWlmIChPaWRJc1ZhbGlkKGVudHJ5LT5jYXN0X2Z1bmNfZmluZm8uZm5fb2lkKSkKLQkJ CQlwa192YWxzW2ldID0gRnVuY3Rpb25DYWxsMygmZW50cnktPmNhc3RfZnVuY19maW5mbywKLQkJ CQkJCQkJCQkgICBwa192YWxzW2ldLAotCQkJCQkJCQkJCSAgIEludDMyR2V0RGF0dW0oLTEpLAkv KiB0eXBtb2QgKi8KLQkJCQkJCQkJCQkgICBCb29sR2V0RGF0dW0oZmFsc2UpKTsJLyogaW1wbGlj aXQgY29lcmNpb24gKi8KLQkJfQorCQlpZiAocGtfbnVsbHNbaV0gIT0gJ24nICYmCisJCQlPaWRJ c1ZhbGlkKGZwbWV0YS0+Y2FzdF9mdW5jX2ZpbmZvW2ldLmZuX29pZCkpCisJCQlwa192YWxzW2ld ID0gRnVuY3Rpb25DYWxsMygmZnBtZXRhLT5jYXN0X2Z1bmNfZmluZm9baV0sCisJCQkJCQkJCQkg ICBwa192YWxzW2ldLAorCQkJCQkJCQkJICAgSW50MzJHZXREYXR1bSgtMSksCS8qIHR5cG1vZCAq LworCQkJCQkJCQkJICAgQm9vbEdldERhdHVtKGZhbHNlKSk7CS8qIGltcGxpY2l0IGNvZXJjaW9u ICovCiAJfQogCiAJLyoKQEAgLTMwNDgsNyArMzA0NSwxMCBAQCByaV9wb3B1bGF0ZV9mYXN0cGF0 aF9tZXRhZGF0YShSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCQlPaWQJCQlsZWZ0dHlwZTsK IAkJUklfQ29tcGFyZUhhc2hFbnRyeSAqZW50cnkgPSByaV9IYXNoQ29tcGFyZU9wKGVxX29wciwg dHlwZWlkKTsKIAotCQlmcG1ldGEtPmNvbXBhcmVfZW50cmllc1tpXSA9IGVudHJ5OworCQlmbWdy X2luZm9fY29weSgmZnBtZXRhLT5jYXN0X2Z1bmNfZmluZm9baV0sICZlbnRyeS0+Y2FzdF9mdW5j X2ZpbmZvLAorCQkJCQkgICBDdXJyZW50TWVtb3J5Q29udGV4dCk7CisJCWZtZ3JfaW5mb19jb3B5 KCZmcG1ldGEtPmVxX29wcl9maW5mb1tpXSwgJmVudHJ5LT5lcV9vcHJfZmluZm8sCisJCQkJCSAg IEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKIAkJZnBtZXRhLT5yZWdvcHNbaV0gPSBnZXRfb3Bjb2Rl KGVxX29wcik7CiAKIAkJZ2V0X29wX29wZmFtaWx5X3Byb3BlcnRpZXMoZXFfb3ByLAotLSAKMi40 Ny4zCgo= --000000000000225184064e623116 Content-Type: application/octet-stream; name="v14-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Disposition: attachment; filename="v14-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnfsxdsj0 RnJvbSAyYmQ5NzQ0ZWQzZDRiZDYxNTZhNmYzZDgyNTkwYWFlNWUzZmE2NmFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMzEgTWFyIDIwMjYgMTg6MjI6MjMgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx NCAyLzJdIEJhdGNoIEZLIHJvd3MgYW5kIHVzZSBTS19TRUFSQ0hBUlJBWSBmb3IgZmFzdC1wYXRo IEZLCiBwcm9iZXMKCkluc3RlYWQgb2YgcHJvYmluZyB0aGUgUEsgaW5kZXggb24gZWFjaCB0cmln Z2VyIGludm9jYXRpb24sIGJ1ZmZlcgpGSyByb3dzIGluIGEgbmV3IHBlci1jb25zdHJhaW50IGNh Y2hlIGVudHJ5IChSSV9GYXN0UGF0aEVudHJ5KSBhbmQKZmx1c2ggdGhlbSBhcyBhIGJhdGNoLiAg Q29tYmluZWQgd2l0aCB0aGUgZmFzdCBwYXRoIGludHJvZHVjZWQgaW4KdGhlIHByZXZpb3VzIGNv bW1pdCwgYnVsayBGSyBpbnNlcnRzIGFyZSB+Mi45eCBmYXN0ZXIgKGludCBQSyAvCmludCBGSywg MU0gcm93cywgUEsgdGFibGUgYW5kIGluZGV4IGNhY2hlZCBpbiBtZW1vcnkpLgoKT24gZWFjaCB0 cmlnZ2VyIGludm9jYXRpb24sIHRoZSBuZXcgcmlfRmFzdFBhdGhCYXRjaEFkZCgpIGJ1ZmZlcnMK dGhlIEZLIHJvdyBpbiBSSV9GYXN0UGF0aEVudHJ5LiAgV2hlbiB0aGUgYnVmZmVyIGZpbGxzICg2 NCByb3dzKQpvciB0aGUgdHJpZ2dlci1maXJpbmcgY3ljbGUgZW5kcywgdGhlIG5ldyByaV9GYXN0 UGF0aEJhdGNoRmx1c2goKQpwcm9iZXMgdGhlIGluZGV4IGZvciBhbGwgYnVmZmVyZWQgcm93cywg c2hhcmluZyBhIHNpbmdsZQpDb21tYW5kQ291bnRlckluY3JlbWVudCwgc25hcHNob3QsIHBlcm1p c3Npb24gY2hlY2ssIGFuZCBzZWN1cml0eQpjb250ZXh0IHN3aXRjaCBhY3Jvc3MgdGhlIGJhdGNo LCByYXRoZXIgdGhhbiByZXBlYXRpbmcgZWFjaCBwZXIgcm93CmFzIHRoZSBTUEkgcGF0aCBkb2Vz LiAgUGVyLWZsdXNoIENDSSBpcyBzYWZlIGJlY2F1c2UgYWxsIEFGVEVSCnRyaWdnZXJzIGZvciB0 aGUgYnVmZmVyZWQgcm93cyBoYXZlIGFscmVhZHkgZmlyZWQgYnkgZmx1c2ggdGltZS4KCkZvciBz aW5nbGUtY29sdW1uIGZvcmVpZ24ga2V5cywgdGhlIGZsdXNoIGJ1aWxkcyBhbiBBcnJheVR5cGUg ZnJvbQp0aGUgYnVmZmVyZWQgRksgdmFsdWVzIChjYXN0aW5nIHRvIHRoZSBQSy1zaWRlIHR5cGUg aWYgbmVlZGVkKSBhbmQKY29uc3RydWN0cyBhIHNjYW4ga2V5IHdpdGggdGhlIFNLX1NFQVJDSEFS UkFZIGZsYWcuICBUaGUgaW5kZXggQU0Kc29ydHMgYW5kIGRlZHVwbGljYXRlcyB0aGUgYXJyYXkg aW50ZXJuYWxseSwgdGhlbiB3YWxrcyBtYXRjaGluZwpsZWFmIHBhZ2VzIGluIG9uZSBvcmRlcmVk IHRyYXZlcnNhbCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgZnJvbSB0aGUKcm9vdCBvbmNlIHBlciBy b3cuICBBIG1hdGNoZWRbXSBiaXRtYXAgdHJhY2tzIHdoaWNoIGJhdGNoIGl0ZW1zCndlcmUgc2F0 aXNmaWVkOyB0aGUgZmlyc3QgdW5tYXRjaGVkIGl0ZW0gaXMgcmVwb3J0ZWQgYXMgYQp2aW9sYXRp b24uICBNdWx0aS1jb2x1bW4gZm9yZWlnbiBrZXlzIGZhbGwgYmFjayB0byBwZXItcm93IHByb2Jp bmcKdmlhIHRoZSBuZXcgcmlfRmFzdFBhdGhGbHVzaExvb3AoKS4KCkZLIHR1cGxlcyBhcmUgbWF0 ZXJpYWxpemVkIHZpYSBFeGVjQ29weVNsb3RIZWFwVHVwbGUoKSBpbnRvIGEgbmV3CnB1cnBvc2Ut c3BlY2lmaWMgbWVtb3J5IGNvbnRleHQgKGZsdXNoX2N4dCksIGNoaWxkIG9mClRvcFRyYW5zYWN0 aW9uQ29udGV4dCwgd2hpY2ggaXMgYWxzbyB1c2VkIGZvciBwZXItZmx1c2ggdHJhbnNpZW50Cndv cms6IGNhc3QgcmVzdWx0cywgdGhlIHNlYXJjaCBhcnJheSwgYW5kIGluZGV4IHNjYW4gYWxsb2Nh dGlvbnMuCkl0IGlzIHJlc2V0IGFmdGVyIGVhY2ggZmx1c2ggYW5kIGRlbGV0ZWQgaW4gdGVhcmRv d24uCgpUaGUgUEsgcmVsYXRpb24sIGluZGV4LCB0dXBsZSBzbG90cywgYW5kIGZhc3QtcGF0aCBt ZXRhZGF0YSBhcmUKY2FjaGVkIGluIFJJX0Zhc3RQYXRoRW50cnkgYWNyb3NzIHRyaWdnZXIgaW52 b2NhdGlvbnMgd2l0aGluIGEKdHJpZ2dlci1maXJpbmcgYmF0Y2gsIGF2b2lkaW5nIHJlcGVhdGVk IG9wZW4vY2xvc2Ugb3ZlcmhlYWQuICBUaGUKc25hcHNob3QgYW5kIEluZGV4U2NhbkRlc2MgYXJl IHRha2VuIGZyZXNoIHBlciBmbHVzaC4KCnJpX0Zhc3RQYXRoRW5kQmF0Y2goKSBmbHVzaGVzIGFu eSBwYXJ0aWFsIGJhdGNoIGJlZm9yZSB0ZWFyaW5nCmRvd24gY2FjaGVkIHJlc291cmNlcy4gIFNp bmNlIHRoZSBGSyByZWxhdGlvbiBtYXkgYWxyZWFkeSBiZQpjbG9zZWQgYnkgZmx1c2ggdGltZSAo ZS5nLiBmb3IgZGVmZXJyZWQgY29uc3RyYWludHMgYXQgQ09NTUlUKSwKaXQgcmVvcGVucyB0aGUg cmVsYXRpb24gdXNpbmcgZW50cnktPmZrX3JlbGlkIGlmIG5lZWRlZC4KClRoZSBleGlzdGluZyBB TFRFUiBUQUJMRSB2YWxpZGF0aW9uIHBhdGggYnlwYXNzZXMgYmF0Y2hpbmcgYW5kCmNvbnRpbnVl cyB0byBjYWxsIHJpX0Zhc3RQYXRoQ2hlY2soKSBkaXJlY3RseSBwZXIgcm93LgoKTGlmZWN5Y2xl IG1hbmFnZW1lbnQgZm9yIFJJX0Zhc3RQYXRoRW50cnkgcmVsaWVzIG9uIHRocmVlIG5ldwptZWNo YW5pc21zOgoKICAtIEFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2s6IEEgbmV3IGdlbmVyYWwtcHVy cG9zZSBjYWxsYmFjawogICAgbWVjaGFuaXNtIGluIHRyaWdnZXIuYy4gIENhbGxiYWNrcyByZWdp c3RlcmVkIHZpYQogICAgUmVnaXN0ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrKCkgZmlyZSBh dCB0aGUgZW5kIG9mIGVhY2gKICAgIHRyaWdnZXItZmlyaW5nIGJhdGNoIChBZnRlclRyaWdnZXJF bmRRdWVyeSBmb3IgaW1tZWRpYXRlCiAgICBjb25zdHJhaW50cywgQWZ0ZXJUcmlnZ2VyRmlyZURl ZmVycmVkIGF0IENPTU1JVCwgYW5kCiAgICBBZnRlclRyaWdnZXJTZXRTdGF0ZSBmb3IgU0VUIENP TlNUUkFJTlRTIElNTUVESUFURSkuICBUaGUgUkkKICAgIGNvZGUgcmVnaXN0ZXJzIHJpX0Zhc3RQ YXRoRW5kQmF0Y2ggYXMgYSBiYXRjaCBjYWxsYmFjay4KCiAgLSBCYXRjaCBjYWxsYmFja3Mgb25s eSBmaXJlIGF0IHRoZSBvdXRlcm1vc3QgcXVlcnkgbGV2ZWwKICAgIChjaGVja2VkIGluc2lkZSBG aXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MpLCBzbyBuZXN0ZWQKICAgIHF1ZXJpZXMgZnJv bSBTUEkgaW5zaWRlIG90aGVyIEFGVEVSIHRyaWdnZXJzIGRvIG5vdCB0ZWFyIGRvd24KICAgIHRo ZSBjYWNoZSBtaWQtYmF0Y2guCgogIC0gWGFjdENhbGxiYWNrOiByaV9GYXN0UGF0aFhhY3RDYWxs YmFjayBOVUxMcyB0aGUgc3RhdGljIGNhY2hlCiAgICBwb2ludGVyIGF0IHRyYW5zYWN0aW9uIGVu ZCwgaGFuZGxpbmcgdGhlIGFib3J0IHBhdGggd2hlcmUgdGhlCiAgICBiYXRjaCBjYWxsYmFjayBu ZXZlciBmaXJlZC4KCiAgLSBTdWJYYWN0Q2FsbGJhY2s6IHJpX0Zhc3RQYXRoU3ViWGFjdENhbGxi YWNrIE5VTExzIHRoZSBzdGF0aWMKICAgIGNhY2hlIHBvaW50ZXIgb24gc3VidHJhbnNhY3Rpb24g YWJvcnQsIHByZXZlbnRpbmcgdGhlIGJhdGNoCiAgICBjYWxsYmFjayBmcm9tIGFjY2Vzc2luZyBh bHJlYWR5LXJlbGVhc2VkIHJlc291cmNlcy4KCiAgLSBBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZl KCk6IEEgbmV3IGV4cG9ydGVkIGFjY2Vzc29yIHRoYXQKICAgIHJldHVybnMgdHJ1ZSB3aGVuIGFm dGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPj0gMC4gIER1cmluZwogICAgQUxURVIgVEFCTEUgLi4u IEFERCBGT1JFSUdOIEtFWSB2YWxpZGF0aW9uLCBSSSB0cmlnZ2VycyBhcmUKICAgIGNhbGxlZCBk aXJlY3RseSBvdXRzaWRlIHRoZSBhZnRlci10cmlnZ2VyIGZyYW1ld29yaywgc28gYmF0Y2gKICAg IGNhbGxiYWNrcyB3b3VsZCBuZXZlciBmaXJlLiAgVGhlIGZhc3QtcGF0aCBjb2RlIHVzZXMgdGhp cyB0bwogICAgZmFsbCBiYWNrIHRvIHRoZSBub24tY2FjaGVkIHBlci1pbnZvY2F0aW9uIHBhdGgg aW4gdGhhdAogICAgY29udGV4dC4KCkF1dGhvcjogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5 QGdtYWlsLmNvbT4KQ28tYXV0aG9yZWQtYnk6IEp1bndhbmcgWmhhbyA8emhqd3BrdUBnbWFpbC5j b20+ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRyaXN0YW4ueWltQGdtYWlsLmNvbT4KVGVzdGVk LWJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQStIaXdxRjRDMHdzM2NPK3o1Y0xrUHV2d25Bd2tTcDdzZnZnR2ozeVE9TGk2 S05NcUFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMg ICAgICAgICAgICB8IDEwNSArKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMu YyAgICAgICB8IDU5NCArKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9jb21tYW5k cy90cmlnZ2VyLmggICAgICAgICAgICB8ICAxOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2ZvcmVpZ25fa2V5Lm91dCB8IDEyNiArKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWln bl9rZXkuc3FsICAgICAgfCAxMTggKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgIHwgICAzICsKIDYgZmlsZXMgY2hhbmdlZCwgOTYwIGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dl ci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCmluZGV4IDY1OTY4NDNhOGQ4Li40 YmMzMWNhYmZmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYwpAQCAtMzg5Myw2ICszODkzLDggQEAg dHlwZWRlZiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc0RhdGEKIAkvKiBwZXItc3VidHJhbnNhY3Rpb24t bGV2ZWwgZGF0YTogKi8KIAlBZnRlclRyaWdnZXJzVHJhbnNEYXRhICp0cmFuc19zdGFjazsJLyog YXJyYXkgb2Ygc3RydWN0cyBzaG93biBiZWxvdyAqLwogCWludAkJCW1heHRyYW5zZGVwdGg7CS8q IGFsbG9jYXRlZCBsZW4gb2YgYWJvdmUgYXJyYXkgKi8KKworCUxpc3QJICAgKmJhdGNoX2NhbGxi YWNrczsJLyogTGlzdCBvZiBBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0gKi8KIH0gQWZ0ZXJUcmln Z2Vyc0RhdGE7CiAKIHN0cnVjdCBBZnRlclRyaWdnZXJzUXVlcnlEYXRhCkBAIC0zOTI5LDYgKzM5 MzEsMTMgQEAgc3RydWN0IEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEKIAlUdXBsZVRhYmxlU2xvdCAq c3RvcmVzbG90OwkvKiBmb3IgY29udmVydGluZyB0byB0dXBsZXN0b3JlJ3MgZm9ybWF0ICovCiB9 OwogCisvKiBFbnRyeSBpbiBhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyAqLwordHlwZWRl ZiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtCit7CisJQWZ0ZXJUcmlnZ2VyQmF0Y2hD YWxsYmFjayBjYWxsYmFjazsKKwl2b2lkCSAgICphcmc7Cit9IEFmdGVyVHJpZ2dlckNhbGxiYWNr SXRlbTsKKwogc3RhdGljIEFmdGVyVHJpZ2dlcnNEYXRhIGFmdGVyVHJpZ2dlcnM7CiAKIHN0YXRp YyB2b2lkIEFmdGVyVHJpZ2dlckV4ZWN1dGUoRVN0YXRlICplc3RhdGUsCkBAIC0zOTY0LDYgKzM5 NzMsNyBAQCBzdGF0aWMgU2V0Q29uc3RyYWludFN0YXRlIFNldENvbnN0cmFpbnRTdGF0ZUFkZEl0 ZW0oU2V0Q29uc3RyYWludFN0YXRlIHN0YXRlLAogCQkJCQkJCQkJCQkJCU9pZCB0Z29pZCwgYm9v bCB0Z2lzZGVmZXJyZWQpOwogc3RhdGljIHZvaWQgY2FuY2VsX3ByaW9yX3N0bXRfdHJpZ2dlcnMo T2lkIHJlbGlkLCBDbWRUeXBlIGNtZFR5cGUsIGludCB0Z2V2ZW50KTsKIAorc3RhdGljIHZvaWQg RmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKHZvaWQpOwogCiAvKgogICogR2V0IHRoZSBG RFcgdHVwbGVzdG9yZSBmb3IgdGhlIGN1cnJlbnQgdHJpZ2dlciBxdWVyeSBsZXZlbCwgY3JlYXRp bmcgaXQKQEAgLTUwODksNiArNTA5OSw3IEBAIEFmdGVyVHJpZ2dlckJlZ2luWGFjdCh2b2lkKQog CSAqLwogCWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2NvdW50ZXIgPSAoQ29tbWFuZElkKSAxOwkvKiBt dXN0bid0IGJlIDAgKi8KIAlhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoID0gLTE7CisJYWZ0ZXJU cmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MgPSBOSUw7CiAKIAkvKgogCSAqIFZlcmlmeSB0aGF0IHRo ZXJlIGlzIG5vIGxlZnRvdmVyIHN0YXRlIHJlbWFpbmluZy4gIElmIHRoZXNlIGFzc2VydGlvbnMK QEAgLTUyMTAsNiArNTIyMSwxNSBAQCBBZnRlclRyaWdnZXJFbmRRdWVyeShFU3RhdGUgKmVzdGF0 ZSkKIAkJCWJyZWFrOwogCX0KIAorCS8qCisJICogRmlyZSBiYXRjaCBjYWxsYmFja3MgYmVmb3Jl IHJlbGVhc2luZyBxdWVyeS1sZXZlbCBzdG9yYWdlIGFuZCBiZWZvcmUKKwkgKiBkZWNyZW1lbnRp bmcgcXVlcnlfZGVwdGguICBDYWxsYmFja3MgbWF5IGRvIHJlYWwgd29yayAoaW5kZXggcHJvYmVz LAorCSAqIGVycm9yIHJlcG9ydGluZykgYW5kIHJlbHkgb24gcXVlcnlfZGVwdGggc3RpbGwgcmVm bGVjdGluZyB0aGUgY3VycmVudAorCSAqIGJhdGNoIGxldmVsIHNvIHRoYXQgbmVzdGVkIGNhbGxz IGZyb20gU1BJIGluc2lkZSBBRlRFUiB0cmlnZ2VycyBhcmUKKwkgKiBjb3JyZWN0bHkgc3VwcHJl c3NlZCBieSBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MncyBkZXB0aCBndWFyZC4KKwkg Ki8KKwlGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoKTsKKwogCS8qIFJlbGVhc2UgcXVl cnktbGV2ZWwtbG9jYWwgc3RvcmFnZSwgaW5jbHVkaW5nIHR1cGxlc3RvcmVzIGlmIGFueSAqLwog CUFmdGVyVHJpZ2dlckZyZWVRdWVyeSgmYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9zdGFja1thZnRlclRy aWdnZXJzLnF1ZXJ5X2RlcHRoXSk7CiAKQEAgLTUzMTcsNiArNTMzNyw5IEBAIEFmdGVyVHJpZ2dl ckZpcmVEZWZlcnJlZCh2b2lkKQogCQkJYnJlYWs7CQkJCS8qIGFsbCBmaXJlZCAqLwogCX0KIAor CS8qIEZsdXNoIGFueSBmYXN0LXBhdGggYmF0Y2hlcyBhY2N1bXVsYXRlZCBieSB0aGUgdHJpZ2dl cnMganVzdCBmaXJlZC4gKi8KKwlGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoKTsKKwog CS8qCiAJICogV2UgZG9uJ3QgYm90aGVyIGZyZWVpbmcgdGhlIGV2ZW50IGxpc3QsIHNpbmNlIGl0 IHdpbGwgZ28gYXdheSBhbnl3YXkKIAkgKiAoYW5kIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB2aWEg cGZyZWUpIGluIEFmdGVyVHJpZ2dlckVuZFhhY3QuCkBAIC02MDU5LDYgKzYwODIsMTEgQEAgQWZ0 ZXJUcmlnZ2VyU2V0U3RhdGUoQ29uc3RyYWludHNTZXRTdG10ICpzdG10KQogCQkJCWJyZWFrOwkJ CS8qIGFsbCBmaXJlZCAqLwogCQl9CiAKKwkJLyoKKwkJICogRmx1c2ggYW55IGZhc3QtcGF0aCBi YXRjaGVzIGFjY3VtdWxhdGVkIGJ5IHRoZSB0cmlnZ2VycyBqdXN0IGZpcmVkLgorCQkgKi8KKwkJ RmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKCk7CisKIAkJaWYgKHNuYXBzaG90X3NldCkK IAkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJfQpAQCAtNjc1NSwzICs2NzgzLDgwIEBAIGNoZWNr X21vZGlmaWVkX3ZpcnR1YWxfZ2VuZXJhdGVkKFR1cGxlRGVzYyB0dXBkZXNjLCBIZWFwVHVwbGUg dHVwbGUpCiAKIAlyZXR1cm4gdHVwbGU7CiB9CisKKy8qCisgKiBSZWdpc3RlckFmdGVyVHJpZ2dl ckJhdGNoQ2FsbGJhY2sKKyAqCQlSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVu IHRoZSBjdXJyZW50IHRyaWdnZXItZmlyaW5nCisgKgkJYmF0Y2ggY29tcGxldGVzLgorICoKKyAq IE11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgdHJpZ2dlciBmdW5jdGlvbidzIGV4ZWN1dGlv biBjb250ZXh0CisgKiAoaS5lLiwgd2hpbGUgYWZ0ZXJUcmlnZ2VycyBzdGF0ZSBpcyBhY3RpdmUp LgorICoKKyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIGNsZWFyZWQgYWZ0ZXIgaW52b2NhdGlvbiwg c28gdGhlIGNhbGxlciBtdXN0CisgKiByZS1yZWdpc3RlciBmb3IgZWFjaCBuZXcgYmF0Y2ggaWYg bmVlZGVkLgorICovCit2b2lkCitSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2soQWZ0 ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCQkJICB2b2lkICphcmcpCit7 CisJQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtICppdGVtOworCU1lbW9yeUNvbnRleHQgb2xkY3h0 OworCisJLyoKKwkgKiBBbGxvY2F0ZSBpbiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgc28gdGhlIGl0 ZW0gc3Vydml2ZXMgZm9yIHRoZSBkdXJhdGlvbgorCSAqIG9mIHRoZSBiYXRjaCwgd2hpY2ggbWF5 IHNwYW4gbXVsdGlwbGUgdHJpZ2dlciBpbnZvY2F0aW9ucy4KKwkgKgorCSAqIE11c3QgYmUgY2Fs bGVkIHdoaWxlIGFmdGVyVHJpZ2dlcnMgaXMgYWN0aXZlIChxdWVyeV9kZXB0aCA+PSAwKTsKKwkg KiBjYWxsYmFja3MgcmVnaXN0ZXJlZCBvdXRzaWRlIGEgdHJpZ2dlci1maXJpbmcgY29udGV4dCB3 b3VsZCBuZXZlciBmaXJlLgorCSAqLworCUFzc2VydChhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRo ID49IDApOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNv bnRleHQpOworCWl0ZW0gPSBwYWxsb2Moc2l6ZW9mKEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSkp OworCWl0ZW0tPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJaXRlbS0+YXJnID0gYXJnOworCWFmdGVy VHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0KKwkJbGFwcGVuZChhZnRlclRyaWdnZXJzLmJhdGNo X2NhbGxiYWNrcywgaXRlbSk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisK Ky8qCisgKiBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MKKyAqCQlJbnZva2UgYW5kIGNs ZWFyIGFsbCByZWdpc3RlcmVkIGJhdGNoIGNhbGxiYWNrcy4KKyAqCisgKiBPbmx5IGZpcmVzIGF0 IHRoZSBvdXRlcm1vc3QgcXVlcnkgbGV2ZWwgKHF1ZXJ5X2RlcHRoID09IDApIG9yIGZyb20KKyAq IHRvcC1sZXZlbCBvcGVyYXRpb25zIChxdWVyeV9kZXB0aCA9PSAtMSwgZS5nLiBBZnRlclRyaWdn ZXJGaXJlRGVmZXJyZWQKKyAqIGF0IENPTU1JVCkuICBOZXN0ZWQgcXVlcmllcyBmcm9tIFNQSSBp bnNpZGUgQUZURVIgdHJpZ2dlcnMgcnVuIGF0CisgKiBkZXB0aCA+IDAgYW5kIG11c3Qgbm90IHRl YXIgZG93biByZXNvdXJjZXMgdGhlIG91dGVyIGJhdGNoIHN0aWxsIG5lZWRzLgorICovCitzdGF0 aWMgdm9pZAorRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKHZvaWQpCit7CisJTGlzdENl bGwgICAqbGM7CisKKwlpZiAoYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA+IDApCisJCXJldHVy bjsKKworCWZvcmVhY2gobGMsIGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzKQorCXsKKwkJ QWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtICppdGVtID0gbGZpcnN0KGxjKTsKKworCQlpdGVtLT5j YWxsYmFjayhpdGVtLT5hcmcpOworCX0KKworCWxpc3RfZnJlZV9kZWVwKGFmdGVyVHJpZ2dlcnMu YmF0Y2hfY2FsbGJhY2tzKTsKKwlhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyA9IE5JTDsK K30KKworLyoKKyAqIEFmdGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUKKyAqCQlSZXR1cm5zIHRydWUg aWYgd2UncmUgaW5zaWRlIGEgcXVlcnktbGV2ZWwgdHJpZ2dlciBiYXRjaCB3aGVyZQorICoJCXJl Z2lzdGVyZWQgYmF0Y2ggY2FsbGJhY2tzIHdpbGwgYWN0dWFsbHkgYmUgaW52b2tlZC4KKyAqCisg KiBUaGlzIGlzIGZhbHNlIGR1cmluZyB2YWxpZGF0ZUZvcmVpZ25LZXlDb25zdHJhaW50KCksIHdo aWNoIGNhbGxzCisgKiBSSSB0cmlnZ2VyIGZ1bmN0aW9ucyBkaXJlY3RseSBvdXRzaWRlIHRoZSBh ZnRlci10cmlnZ2VyIGZyYW1ld29yay4KKyAqLworYm9vbAorQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0Fj dGl2ZSh2b2lkKQoreworCXJldHVybiBhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoID49IDA7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCmluZGV4IDJkZTA4ZGE2NTM5Li5iNjBlNzk1 NTYzNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTE5OSw2ICsxOTksNDgg QEAgdHlwZWRlZiBzdHJ1Y3QgUklfQ29tcGFyZUhhc2hFbnRyeQogCUZtZ3JJbmZvCWNhc3RfZnVu Y19maW5mbzsJLyogaW4gY2FzZSB3ZSBtdXN0IGNvZXJjZSBpbnB1dCAqLwogfSBSSV9Db21wYXJl SGFzaEVudHJ5OwogCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgRksgcm93cyBidWZmZXJlZCBi ZWZvcmUgZmx1c2hpbmcuCisgKgorICogTGFyZ2VyIGJhdGNoZXMgYW1vcnRpemUgcGVyLWZsdXNo IG92ZXJoZWFkIGFuZCBsZXQgdGhlIFNLX1NFQVJDSEFSUkFZCisgKiBwYXRoIHdhbGsgbW9yZSBs ZWFmIHBhZ2VzIGluIGEgc2luZ2xlIHNvcnRlZCB0cmF2ZXJzYWwuICBCdXQgZWFjaAorICogYnVm ZmVyZWQgcm93IGlzIGEgbWF0ZXJpYWxpemVkIEhlYXBUdXBsZSBpbiBmbHVzaF9jeHQsIGFuZCB0 aGUgbWF0Y2hlZFtdCisgKiBzY2FuIGluIHJpX0Zhc3RQYXRoRmx1c2hBcnJheSgpIGlzIE8oYmF0 Y2hfc2l6ZSkgcGVyIGluZGV4IG1hdGNoLgorICogQmVuY2htYXJraW5nIHNob3dlZCBsaXR0bGUg ZGlmZmVyZW5jZSBiZXR3ZWVuIDE2IGFuZCA2NCwgd2l0aCAyNTYKKyAqIGNvbnNpc3RlbnRseSBz bG93ZXIuICA2NCBpcyBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAqLworI2RlZmluZSBSSV9GQVNU UEFUSF9CQVRDSF9TSVpFCTY0CisKKy8qCisgKiBSSV9GYXN0UGF0aEVudHJ5CisgKgkJUGVyLWNv bnN0cmFpbnQgY2FjaGUgb2YgcmVzb3VyY2VzIG5lZWRlZCBieSByaV9GYXN0UGF0aEJhdGNoRmx1 c2goKS4KKyAqCisgKiBPbmUgZW50cnkgcGVyIGNvbnN0cmFpbnQsIGtleWVkIGJ5IHBnX2NvbnN0 cmFpbnQgT0lELiAgQ3JlYXRlZCBsYXppbHkKKyAqIGJ5IHJpX0Zhc3RQYXRoR2V0RW50cnkoKSBv biBmaXJzdCB1c2Ugd2l0aGluIGEgdHJpZ2dlci1maXJpbmcgYmF0Y2gKKyAqIGFuZCB0b3JuIGRv d24gYnkgcmlfRmFzdFBhdGhUZWFyZG93bigpIGF0IGJhdGNoIGVuZC4KKyAqCisgKiBGSyB0dXBs ZXMgYXJlIGJ1ZmZlcmVkIGluIGJhdGNoW10gYWNyb3NzIHRyaWdnZXIgaW52b2NhdGlvbnMgYW5k CisgKiBmbHVzaGVkIHdoZW4gdGhlIGJ1ZmZlciBmaWxscyBvciB0aGUgYmF0Y2ggZW5kcy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgUklfRmFzdFBhdGhFbnRyeQoreworCU9pZAkJCWNvbm9pZDsJCQkv KiBoYXNoIGtleTogcGdfY29uc3RyYWludCBPSUQgKi8KKwlPaWQJCQlma19yZWxpZDsJCS8qIGZv ciByaV9GYXN0UGF0aEVuZEJhdGNoKCkgKi8KKwlSZWxhdGlvbglwa19yZWw7CisJUmVsYXRpb24J aWR4X3JlbDsKKwlUdXBsZVRhYmxlU2xvdCAqcGtfc2xvdDsKKwlUdXBsZVRhYmxlU2xvdCAqZmtf c2xvdDsKKwlNZW1vcnlDb250ZXh0IGZsdXNoX2N4dDsJLyogc2hvcnQtbGl2ZWQgY29udGV4dCBm b3IgcGVyLWZsdXNoIHdvcmsgKi8KKworCS8qCisJICogVE9ETzogYmF0Y2hbXSBpcyBIZWFwVHVw bGVbXSBiZWNhdXNlIHRoZSBBRlRFUiB0cmlnZ2VyIG1hY2hpbmVyeQorCSAqIGN1cnJlbnRseSBw YXNzZXMgdHVwbGVzIGFzIEhlYXBUdXBsZXMuICBPbmNlIHRyaWdnZXIgaW5mcmFzdHJ1Y3R1cmUg aXMKKwkgKiBzbG90aWZpZWQsIHRoaXMgc2hvdWxkIHVzZSBhIHNsb3QgYXJyYXkgb3Igd2hhdGV2 ZXIgYmF0Y2hlZCB0dXBsZQorCSAqIHN0b3JhZ2UgYWJzdHJhY3Rpb24gZXhpc3RzIGF0IHRoYXQg cG9pbnQgdG8gYmUgVEFNLWFnbm9zdGljLgorCSAqLworCUhlYXBUdXBsZQliYXRjaFtSSV9GQVNU UEFUSF9CQVRDSF9TSVpFXTsKKwlpbnQJCQliYXRjaF9jb3VudDsKK30gUklfRmFzdFBhdGhFbnRy eTsKIAogLyoKICAqIExvY2FsIGRhdGEKQEAgLTIwOCw2ICsyNTAsOCBAQCBzdGF0aWMgSFRBQiAq cmlfcXVlcnlfY2FjaGUgPSBOVUxMOwogc3RhdGljIEhUQUIgKnJpX2NvbXBhcmVfY2FjaGUgPSBO VUxMOwogc3RhdGljIGRjbGlzdF9oZWFkIHJpX2NvbnN0cmFpbnRfY2FjaGVfdmFsaWRfbGlzdDsK IAorc3RhdGljIEhUQUIgKnJpX2Zhc3RwYXRoX2NhY2hlID0gTlVMTDsKK3N0YXRpYyBib29sIHJp X2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKIAogLyoKICAqIExvY2FsIGZ1 bmN0aW9uIHByb3RvdHlwZXMKQEAgLTI1OCw2ICszMDIsMTYgQEAgc3RhdGljIGJvb2wgcmlfUGVy Zm9ybUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJCQkJYm9vbCBk ZXRlY3ROZXdSb3dzLCBpbnQgZXhwZWN0X09LKTsKIHN0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQ2hl Y2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJCQkgUmVsYXRpb24gZmtf cmVsLCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEJh dGNoQWRkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCVJlbGF0aW9u IGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpOworc3RhdGljIGludAlyaV9GYXN0UGF0 aEZsdXNoQXJyYXkoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZr X3Nsb3QsCisJCQkJCQkJCSAgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRp b24gZmtfcmVsLAorCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LCBJbmRleFNjYW5EZXNjIHNj YW5kZXNjKTsKK3N0YXRpYyBpbnQJcmlfRmFzdFBhdGhGbHVzaExvb3AoUklfRmFzdFBhdGhFbnRy eSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCisJCQkJCQkJCSBjb25zdCBSSV9D b25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwsCisJCQkJCQkJCSBTbmFwc2hv dCBzbmFwc2hvdCwgSW5kZXhTY2FuRGVzYyBzY2FuZGVzYyk7CitzdGF0aWMgdm9pZCByaV9GYXN0 UGF0aEJhdGNoRmx1c2goUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwKKwkJCQkJCQkJICBSZWxh dGlvbiBma19yZWwpOwogc3RhdGljIGJvb2wgcmlfRmFzdFBhdGhQcm9iZU9uZShSZWxhdGlvbiBw a19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCiAJCQkJCQkJCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2Ms IFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwgY29uc3Qg UklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKQEAgLTI4MCw2ICszMzQsMTAgQEAgcGdfbm9yZXR1 cm4gc3RhdGljIHZvaWQgcmlfUmVwb3J0VmlvbGF0aW9uKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaWluZm8sCiAJCQkJCQkJCQkJICAgUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBma19yZWws CiAJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnZpb2xhdG9yc2xvdCwgVHVwbGVEZXNjIHR1 cGRlc2MsCiAJCQkJCQkJCQkJICAgaW50IHF1ZXJ5bm8sIGJvb2wgaXNfcmVzdHJpY3QsIGJvb2wg cGFydGdvbmUpOworc3RhdGljIFJJX0Zhc3RQYXRoRW50cnkgKnJpX0Zhc3RQYXRoR2V0RW50cnko Y29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJCQkJCQkJIFJlbGF0aW9uIGZr X3JlbCk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEVuZEJhdGNoKHZvaWQgKmFyZyk7CitzdGF0 aWMgdm9pZCByaV9GYXN0UGF0aFRlYXJkb3duKHZvaWQpOwogCiAKIC8qCkBAIC0zOTAsMTIgKzQ0 OCwyMiBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAkgKiBsb2NrLiAg VGhpcyBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byB0aGUgU1BJIHBhdGggYmVsb3cgYnV0 IGF2b2lkcwogCSAqIHRoZSBwZXItcm93IGV4ZWN1dG9yIG92ZXJoZWFkLgogCSAqCi0JICogcmlf RmFzdFBhdGhDaGVjaygpIHJlcG9ydHMgdGhlIHZpb2xhdGlvbiBpdHNlbGYgKHZpYSBlcmVwb3J0 KSBpZiBubwotCSAqIG1hdGNoaW5nIFBLIHJvdyBpcyBmb3VuZCwgc28gaXQgb25seSByZXR1cm5z IG9uIHN1Y2Nlc3MuCisJICogcmlfRmFzdFBhdGhCYXRjaEFkZCgpIGFuZCByaV9GYXN0UGF0aENo ZWNrKCkgcmVwb3J0IHRoZSB2aW9sYXRpb24KKwkgKiB0aGVtc2VsdmVzIGlmIG5vIG1hdGNoaW5n IFBLIHJvdyBpcyBmb3VuZCwgc28gdGhleSBvbmx5IHJldHVybiBvbgorCSAqIHN1Y2Nlc3MuCiAJ ICovCiAJaWYgKHJpX2Zhc3RwYXRoX2lzX2FwcGxpY2FibGUocmlpbmZvKSkKIAl7Ci0JCXJpX0Zh c3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWwsIG5ld3Nsb3QpOworCQlpZiAoQWZ0ZXJUcmlnZ2Vy QmF0Y2hJc0FjdGl2ZSgpKQorCQl7CisJCQkvKiBCYXRjaGVkIHBhdGg6IGJ1ZmZlciBhbmQgcHJv YmUgaW4gZ3JvdXBzICovCisJCQlyaV9GYXN0UGF0aEJhdGNoQWRkKHJpaW5mbywgZmtfcmVsLCBu ZXdzbG90KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEFMVEVSIFRBQkxFIHZhbGlkYXRpb246 IHBlci1yb3csIG5vIGNhY2hlICovCisJCQlyaV9GYXN0UGF0aENoZWNrKHJpaW5mbywgZmtfcmVs LCBuZXdzbG90KTsKKwkJfQogCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCX0KIApA QCAtMjY5MCwxMCArMjc1OCwxNCBAQCByaV9QZXJmb3JtQ2hlY2soY29uc3QgUklfQ29uc3RyYWlu dEluZm8gKnJpaW5mbywKIAogLyoKICAqIHJpX0Zhc3RQYXRoQ2hlY2sKLSAqCQlQZXJmb3JtIEZL IGV4aXN0ZW5jZSBjaGVjayB2aWEgZGlyZWN0IGluZGV4IHByb2JlLCBieXBhc3NpbmcgU1BJLgor ICoJCVBlcmZvcm0gcGVyIHJvdyBGSyBleGlzdGVuY2UgY2hlY2sgdmlhIGRpcmVjdCBpbmRleCBw cm9iZSwKKyAqCQlieXBhc3NpbmcgU1BJLgogICoKICAqIElmIG5vIG1hdGNoaW5nIFBLIHJvdyBl eGlzdHMsIHJlcG9ydCB0aGUgdmlvbGF0aW9uIHZpYSByaV9SZXBvcnRWaW9sYXRpb24oKSwKICAq IG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9ybWFsbHkuCisgKgorICogTm90ZTog VGhpcyBpcyBvbmx5IHVzZWQgYnkgdGhlIEFMVEVSIFRBQkxFIHZhbGlkYXRpb24gcGF0aC4gT3Ro ZXIgcGF0aHMgdXNlCisgKiByaV9GYXN0UGF0aEJhdGNoQWRkKCkuCiAgKi8KIHN0YXRpYyB2b2lk CiByaV9GYXN0UGF0aENoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCkBAIC0y NzYxLDYgKzI4MzMsMzI3IEBAIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludElu Zm8gKnJpaW5mbywKIAl0YWJsZV9jbG9zZShwa19yZWwsIE5vTG9jayk7CiB9CiAKKy8qCisgKiBy aV9GYXN0UGF0aEJhdGNoQWRkCisgKgkJQnVmZmVyIGEgRksgcm93IGZvciBiYXRjaGVkIHByb2Jp bmcuCisgKgorICogQWRkcyB0aGUgcm93IHRvIHRoZSBiYXRjaCBidWZmZXIuICBXaGVuIHRoZSBi dWZmZXIgaXMgZnVsbCwgZmx1c2hlcyBhbGwKKyAqIGJ1ZmZlcmVkIHJvd3MgYnkgcHJvYmluZyB0 aGUgUEsgaW5kZXguICBBbnkgdmlvbGF0aW9uIGlzIHJlcG9ydGVkCisgKiBpbW1lZGlhdGVseSBk dXJpbmcgdGhlIGZsdXNoIHZpYSByaV9SZXBvcnRWaW9sYXRpb24gKHdoaWNoIGRvZXMgbm90IHJl dHVybikuCisgKgorICogVXNlcyB0aGUgcGVyLWJhdGNoIGNhY2hlIChSSV9GYXN0UGF0aEVudHJ5 KSB0byBhdm9pZCBwZXItcm93IHJlbGF0aW9uCisgKiBvcGVuL2Nsb3NlLCBzbG90IGNyZWF0aW9u LCBldGMuCisgKgorICogVGhlIGJhdGNoIGlzIGFsc28gZmx1c2hlZCBhdCBlbmQgb2YgdHJpZ2dl ci1maXJpbmcgY3ljbGUgdmlhCisgKiByaV9GYXN0UGF0aEVuZEJhdGNoKCkuCisgKi8KK3N0YXRp YyB2b2lkCityaV9GYXN0UGF0aEJhdGNoQWRkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWlu Zm8sCisJCQkJCVJlbGF0aW9uIGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpCit7CisJ UklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSA9IHJpX0Zhc3RQYXRoR2V0RW50cnkocmlpbmZvLCBm a19yZWwpOworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CisJZnBlbnRyeS0+YmF0Y2hbZnBlbnRyeS0+ YmF0Y2hfY291bnRdID0KKwkJRXhlY0NvcHlTbG90SGVhcFR1cGxlKG5ld3Nsb3QpOworCWZwZW50 cnktPmJhdGNoX2NvdW50Kys7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwlp ZiAoZnBlbnRyeS0+YmF0Y2hfY291bnQgPj0gUklfRkFTVFBBVEhfQkFUQ0hfU0laRSkKKwkJcmlf RmFzdFBhdGhCYXRjaEZsdXNoKGZwZW50cnksIGZrX3JlbCk7Cit9CisKKy8qCisgKiByaV9GYXN0 UGF0aEJhdGNoRmx1c2gKKyAqCQlGbHVzaCBhbGwgYnVmZmVyZWQgRksgcm93cyBieSBwcm9iaW5n IHRoZSBQSyBpbmRleC4KKyAqCisgKiBEaXNwYXRjaGVzIHRvIHJpX0Zhc3RQYXRoRmx1c2hBcnJh eSgpIGZvciBzaW5nbGUtY29sdW1uIEZLcworICogKHVzaW5nIFNLX1NFQVJDSEFSUkFZKSBvciBy aV9GYXN0UGF0aEZsdXNoTG9vcCgpIGZvciBtdWx0aS1jb2x1bW4KKyAqIEZLcyAocGVyLXJvdyBw cm9iaW5nKS4gIFZpb2xhdGlvbnMgYXJlIHJlcG9ydGVkIGltbWVkaWF0ZWx5IHZpYQorICogcmlf UmVwb3J0VmlvbGF0aW9uKCksIHdoaWNoIGRvZXMgbm90IHJldHVybi4KKyAqLworc3RhdGljIHZv aWQKK3JpX0Zhc3RQYXRoQmF0Y2hGbHVzaChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxh dGlvbiBma19yZWwpCit7CisJLyogUmVsb2FkOyBtYXkgaGF2ZSBiZWVuIGludmFsaWRhdGVkIHNp bmNlIGxhc3QgYmF0Y2ggYWNjdW11bGF0aW9uLiAqLworCWNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaWluZm8gPSByaV9Mb2FkQ29uc3RyYWludEluZm8oZnBlbnRyeS0+Y29ub2lkKTsKKwlSZWxh dGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19yZWw7CisJUmVsYXRpb24JaWR4X3JlbCA9IGZwZW50 cnktPmlkeF9yZWw7CisJVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QgPSBmcGVudHJ5LT5ma19zbG90 OworCVNuYXBzaG90CXNuYXBzaG90OworCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CisJT2lkCQkJ c2F2ZWRfdXNlcmlkOworCWludAkJCXNhdmVkX3NlY19jb250ZXh0OworCU1lbW9yeUNvbnRleHQg b2xkY3h0OworCWludAkJCXZpb2xhdGlvbl9pbmRleDsKKworCWlmIChmcGVudHJ5LT5iYXRjaF9j b3VudCA9PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENDSSBhbmQgc2VjdXJpdHkgY29udGV4 dCBzd2l0Y2ggYXJlIGRvbmUgb25jZSBmb3IgdGhlIGVudGlyZSBiYXRjaC4KKwkgKiBQZXItcm93 IENDSSBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIGJ5IHRoZSB0aW1lIGEgZmx1c2ggcnVucywgYWxs IEFGVEVSCisJICogdHJpZ2dlcnMgZm9yIHRoZSBidWZmZXJlZCByb3dzIGhhdmUgYWxyZWFkeSBm aXJlZCAodHJpZ2dlciBpbnZvY2F0aW9ucworCSAqIHN0cmljdGx5IGFsdGVybmF0ZSBwZXIgcm93 KSwgc28gYSBzaW5nbGUgQ0NJIGFkdmFuY2VzIHBhc3QgYWxsIHRoZWlyCisJICogZWZmZWN0cy4g IFBlci1yb3cgc2VjdXJpdHkgY29udGV4dCBzd2l0Y2ggaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSBl YWNoCisJICogcm93J3MgcHJvYmUgcnVucyBlbnRpcmVseSBhcyB0aGUgUEsgdGFibGUgb3duZXIs IHNhbWUgYXMgdGhlIFNQSSBwYXRoCisJICogLS0gdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0 IHRoZSBTUEkgcGF0aCBzZXRzIGFuZCByZXN0b3JlcyB0aGUKKwkgKiBjb250ZXh0IHBlciByb3cg d2hlcmVhcyB3ZSBkbyBpdCBvbmNlIGFyb3VuZCB0aGUgd2hvbGUgYmF0Y2guCisJICovCisJQ29t bWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKwlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKworCS8qCisJICogYnVpbGRfaW5kZXhfc2NhbmtleXMo KSBtYXkgcGFsbG9jIGNhc3QgcmVzdWx0cyBmb3IgY3Jvc3MtdHlwZSBGS3MuIFVzZQorCSAqIHRo ZSBlbnRyeSdzIHNob3J0LWxpdmVkIGZsdXNoIGNvbnRleHQgc28gdGhlc2UgZG9uJ3QgYWNjdW11 bGF0ZSBhY3Jvc3MKKwkgKiBiYXRjaGVzLgorCSAqLworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhmcGVudHJ5LT5mbHVzaF9jeHQpOworCisJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNj YW4ocGtfcmVsLCBpZHhfcmVsLCBzbmFwc2hvdCwgTlVMTCwKKwkJCQkJCQkgICByaWluZm8tPm5r ZXlzLCAwLCBTT19OT05FKTsKKworCUdldFVzZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVkX3VzZXJp ZCwgJnNhdmVkX3NlY19jb250ZXh0KTsKKwlTZXRVc2VySWRBbmRTZWNDb250ZXh0KFJlbGF0aW9u R2V0Rm9ybShwa19yZWwpLT5yZWxvd25lciwKKwkJCQkJCSAgIHNhdmVkX3NlY19jb250ZXh0IHwK KwkJCQkJCSAgIFNFQ1VSSVRZX0xPQ0FMX1VTRVJJRF9DSEFOR0UgfAorCQkJCQkJICAgU0VDVVJJ VFlfTk9GT1JDRV9STFMpOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHVzZXIg aGFzIHBlcm1pc3Npb24gdG8gYWNjZXNzIHBrX3JlbC4gRG9uZSBoZXJlCisJICogcmF0aGVyIHRo YW4gYXQgZW50cnkgY3JlYXRpb24gc28gdGhhdCBwZXJtaXNzaW9uIGNoYW5nZXMgYmV0d2Vlbgor CSAqIGZsdXNoZXMgYXJlIHJlc3BlY3RlZCwgbWF0Y2hpbmcgdGhlIHBlci1yb3cgYmVoYXZpb3Ig b2YgdGhlIFNQSSBwYXRoLAorCSAqIGFsYmVpdCBjaGVja2VkIG9uY2UgcGVyIGZsdXNoIHJhdGhl ciB0aGFuIG9uY2UgcGVyIHJvdywgbGlrZSBpbgorCSAqIHJpX0Zhc3RQYXRoQ2hlY2soKS4KKwkg Ki8KKwlyaV9DaGVja1Blcm1pc3Npb25zKHBrX3JlbCk7CisKKwlpZiAocmlpbmZvLT5mcG1ldGEg PT0gTlVMTCkKKwl7CisJCS8qIFJlbG9hZCB0byBlbnN1cmUgaXQncyB2YWxpZC4gKi8KKwkJcmlp bmZvID0gcmlfTG9hZENvbnN0cmFpbnRJbmZvKHJpaW5mby0+Y29uc3RyYWludF9pZCk7CisJCXJp X3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKChSSV9Db25zdHJhaW50SW5mbyAqKSByaWluZm8s CisJCQkJCQkJCQkgIGZrX3JlbCwgaWR4X3JlbCk7CisJfQorCUFzc2VydChyaWluZm8tPmZwbWV0 YSk7CisJaWYgKHJpaW5mby0+bmtleXMgPT0gMSkKKwkJdmlvbGF0aW9uX2luZGV4ID0gcmlfRmFz dFBhdGhGbHVzaEFycmF5KGZwZW50cnksIGZrX3Nsb3QsIHJpaW5mbywKKwkJCQkJCQkJCQkJCWZr X3JlbCwgc25hcHNob3QsIHNjYW5kZXNjKTsKKwllbHNlCisJCXZpb2xhdGlvbl9pbmRleCA9IHJp X0Zhc3RQYXRoRmx1c2hMb29wKGZwZW50cnksIGZrX3Nsb3QsIHJpaW5mbywKKwkJCQkJCQkJCQkJ ICAgZmtfcmVsLCBzbmFwc2hvdCwgc2NhbmRlc2MpOworCisJU2V0VXNlcklkQW5kU2VjQ29udGV4 dChzYXZlZF91c2VyaWQsIHNhdmVkX3NlY19jb250ZXh0KTsKKwlVbnJlZ2lzdGVyU25hcHNob3Qo c25hcHNob3QpOworCWluZGV4X2VuZHNjYW4oc2NhbmRlc2MpOworCisJaWYgKHZpb2xhdGlvbl9p bmRleCA+PSAwKQorCXsKKwkJRXhlY1N0b3JlSGVhcFR1cGxlKGZwZW50cnktPmJhdGNoW3Zpb2xh dGlvbl9pbmRleF0sIGZrX3Nsb3QsIGZhbHNlKTsKKwkJcmlfUmVwb3J0VmlvbGF0aW9uKHJpaW5m bywgcGtfcmVsLCBma19yZWwsCisJCQkJCQkgICBma19zbG90LCBOVUxMLAorCQkJCQkJICAgUklf UExBTl9DSEVDS19MT09LVVBQSywgZmFsc2UsIGZhbHNlKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0 UmVzZXQoZnBlbnRyeS0+Zmx1c2hfY3h0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0 KTsKKworCS8qIFJlc2V0LiAqLworCWZwZW50cnktPmJhdGNoX2NvdW50ID0gMDsKK30KKworLyoK KyAqIHJpX0Zhc3RQYXRoRmx1c2hMb29wCisgKgkJTXVsdGktY29sdW1uIGZhbGxiYWNrOiBwcm9i ZSB0aGUgaW5kZXggb25jZSBwZXIgYnVmZmVyZWQgcm93LgorICoKKyAqIFVzZWQgZm9yIGNvbXBv c2l0ZSBmb3JlaWduIGtleXMgd2hlcmUgU0tfU0VBUkNIQVJSQVkgZG9lcyBub3QKKyAqIGFwcGx5 LgorICoKKyAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2aW9sYXRpbmcgcm93IGlu IHRoZSBiYXRjaCBhcnJheSwgb3IgLTEgaWYKKyAqIGFsbCByb3dzIGFyZSB2YWxpZC4KKyAqLwor c3RhdGljIGludAorcmlfRmFzdFBhdGhGbHVzaExvb3AoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRy eSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCisJCQkJCSBjb25zdCBSSV9Db25zdHJhaW50SW5m byAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwsCisJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwgSW5k ZXhTY2FuRGVzYyBzY2FuZGVzYykKK3sKKwlSZWxhdGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19y ZWw7CisJUmVsYXRpb24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7CisJVHVwbGVUYWJsZVNs b3QgKnBrX3Nsb3QgPSBmcGVudHJ5LT5wa19zbG90OworCURhdHVtCQlwa192YWxzW0lOREVYX01B WF9LRVlTXTsKKwljaGFyCQlwa19udWxsc1tJTkRFWF9NQVhfS0VZU107CisJU2NhbktleURhdGEg c2tleVtJTkRFWF9NQVhfS0VZU107CisJYm9vbAkJZm91bmQgPSB0cnVlOworCisJZm9yIChpbnQg aSA9IDA7IGkgPCBmcGVudHJ5LT5iYXRjaF9jb3VudDsgaSsrKQorCXsKKwkJRXhlY1N0b3JlSGVh cFR1cGxlKGZwZW50cnktPmJhdGNoW2ldLCBma19zbG90LCBmYWxzZSk7CisJCXJpX0V4dHJhY3RW YWx1ZXMoZmtfcmVsLCBma19zbG90LCByaWluZm8sIGZhbHNlLCBwa192YWxzLCBwa19udWxscyk7 CisJCWJ1aWxkX2luZGV4X3NjYW5rZXlzKHJpaW5mbywgaWR4X3JlbCwgcGtfdmFscywgcGtfbnVs bHMsIHNrZXkpOworCisJCWZvdW5kID0gcmlfRmFzdFBhdGhQcm9iZU9uZShwa19yZWwsIGlkeF9y ZWwsIHNjYW5kZXNjLCBwa19zbG90LAorCQkJCQkJCQkJc25hcHNob3QsIHJpaW5mbywgc2tleSwg cmlpbmZvLT5ua2V5cyk7CisKKwkJLyogUmVwb3J0IGZpcnN0IHVubWF0Y2hlZCByb3cgKi8KKwkJ aWYgKCFmb3VuZCkKKwkJCXJldHVybiBpOworCX0KKworCS8qIEFsbCBwYXNzLiAqLworCXJldHVy biAtMTsKK30KKworLyoKKyAqIHJpX0Zhc3RQYXRoRmx1c2hBcnJheQorICoJCVNpbmdsZS1jb2x1 bW4gZmFzdCBwYXRoIHVzaW5nIFNLX1NFQVJDSEFSUkFZLgorICoKKyAqIEJ1aWxkcyBhbiBhcnJh eSBvZiBGSyB2YWx1ZXMgYW5kIGRvZXMgb25lIGluZGV4IHNjYW4gd2l0aAorICogU0tfU0VBUkNI QVJSQVkuICBUaGUgaW5kZXggQU0gc29ydHMgYW5kIGRlZHVwbGljYXRlcyB0aGUgYXJyYXkKKyAq IGludGVybmFsbHksIHRoZW4gd2Fsa3MgbWF0Y2hpbmcgbGVhZiBwYWdlcyBpbiBvcmRlci4gIEVh Y2gKKyAqIG1hdGNoZWQgUEsgdHVwbGUgaXMgbG9ja2VkIGFuZCByZWNoZWNrZWQgYXMgYmVmb3Jl OyBhIG1hdGNoZWRbXQorICogYml0bWFwIHRyYWNrcyB3aGljaCBiYXRjaCBpdGVtcyB3ZXJlIHNh dGlzZmllZC4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmlvbGF0aW5n IHJvdyBpbiB0aGUgYmF0Y2ggYXJyYXksIG9yIC0xIGlmCisgKiBhbGwgcm93cyBhcmUgdmFsaWQu CisgKi8KK3N0YXRpYyBpbnQKK3JpX0Zhc3RQYXRoRmx1c2hBcnJheShSSV9GYXN0UGF0aEVudHJ5 ICpmcGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKKwkJCQkJICBjb25zdCBSSV9Db25z dHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBma19yZWwsCisJCQkJCSAgU25hcHNob3Qgc25h cHNob3QsIEluZGV4U2NhbkRlc2Mgc2NhbmRlc2MpCit7CisJRmFzdFBhdGhNZXRhICpmcG1ldGEg PSByaWluZm8tPmZwbWV0YTsKKwlSZWxhdGlvbglwa19yZWwgPSBmcGVudHJ5LT5wa19yZWw7CisJ UmVsYXRpb24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7CisJVHVwbGVUYWJsZVNsb3QgKnBr X3Nsb3QgPSBmcGVudHJ5LT5wa19zbG90OworCURhdHVtCQlzZWFyY2hfdmFsc1tSSV9GQVNUUEFU SF9CQVRDSF9TSVpFXTsKKwlib29sCQltYXRjaGVkW1JJX0ZBU1RQQVRIX0JBVENIX1NJWkVdOwor CWludAkJCW52YWxzID0gZnBlbnRyeS0+YmF0Y2hfY291bnQ7CisJRGF0dW0JCXBrX3ZhbHNbSU5E RVhfTUFYX0tFWVNdOworCWNoYXIJCXBrX251bGxzW0lOREVYX01BWF9LRVlTXTsKKwlTY2FuS2V5 RGF0YSBza2V5WzFdOworCUZtZ3JJbmZvICAgKmNhc3RfZnVuY19maW5mbzsKKwlGbWdySW5mbyAg ICplcV9vcHJfZmluZm87CisJT2lkCQkJZWxlbV90eXBlOworCWludDE2CQllbGVtX2xlbjsKKwli b29sCQllbGVtX2J5dmFsOworCWNoYXIJCWVsZW1fYWxpZ247CisJQXJyYXlUeXBlICAqYXJyOwor CisJQXNzZXJ0KGZwbWV0YSk7CisKKwltZW1zZXQobWF0Y2hlZCwgMCwgbnZhbHMgKiBzaXplb2Yo Ym9vbCkpOworCisJLyoKKwkgKiBFeHRyYWN0IEZLIHZhbHVlcywgY2FzdGluZyB0byB0aGUgb3Bl cmF0b3IncyBleHBlY3RlZCBpbnB1dCB0eXBlIGlmCisJICogbmVlZGVkIChlLmcuIGludDggRksg LT4gaW50NCBmb3IgaW50NDhlcSkuCisJICovCisJY2FzdF9mdW5jX2ZpbmZvID0gJmZwbWV0YS0+ Y2FzdF9mdW5jX2ZpbmZvWzBdOworCWVxX29wcl9maW5mbyA9ICZmcG1ldGEtPmVxX29wcl9maW5m b1swXTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG52YWxzOyBpKyspCisJeworCQlFeGVjU3RvcmVI ZWFwVHVwbGUoZnBlbnRyeS0+YmF0Y2hbaV0sIGZrX3Nsb3QsIGZhbHNlKTsKKwkJcmlfRXh0cmFj dFZhbHVlcyhma19yZWwsIGZrX3Nsb3QsIHJpaW5mbywgZmFsc2UsIHBrX3ZhbHMsIHBrX251bGxz KTsKKworCQkvKiBDYXN0IGlmIG5lZWRlZCAoZS5nLiBpbnQ4IEZLIC0+IG51bWVyaWMgUEspICov CisJCWlmIChPaWRJc1ZhbGlkKGNhc3RfZnVuY19maW5mby0+Zm5fb2lkKSkKKwkJCXNlYXJjaF92 YWxzW2ldID0gRnVuY3Rpb25DYWxsMyhjYXN0X2Z1bmNfZmluZm8sCisJCQkJCQkJCQkJICAgcGtf dmFsc1swXSwKKwkJCQkJCQkJCQkgICBJbnQzMkdldERhdHVtKC0xKSwKKwkJCQkJCQkJCQkgICBC b29sR2V0RGF0dW0oZmFsc2UpKTsKKwkJZWxzZQorCQkJc2VhcmNoX3ZhbHNbaV0gPSBwa192YWxz WzBdOworCX0KKworCS8qCisJICogQXJyYXkgZWxlbWVudCB0eXBlIG11c3QgbWF0Y2ggdGhlIG9w ZXJhdG9yJ3MgcmlnaHQtaGFuZCBpbnB1dCB0eXBlLAorCSAqIHdoaWNoIGlzIHdoYXQgdGhlIGlu ZGV4IGNvbXBhcmlzb24gZXhwZWN0cyBvbiB0aGUgc2VhcmNoIHNpZGUuCisJICogcmlfcG9wdWxh dGVfZmFzdHBhdGhfbWV0YWRhdGEoKSBzdG9yZXMgZXhhY3RseSB0aGlzIHZpYQorCSAqIGdldF9v cF9vcGZhbWlseV9wcm9wZXJ0aWVzKCksIHdoaWNoIHJldHVybnMgdGhlIG9wZXJhdG9yJ3Mgcmln aHQtaGFuZAorCSAqIHR5cGUgYXMgdGhlIHN1YnR5cGUgZm9yIGNyb3NzLXR5cGUgb3BlcmF0b3Jz IChlLmcuIGludDggZm9yIGludDQ4ZXEpCisJICogYW5kIHRoZSBjb21tb24gdHlwZSBmb3Igc2Ft ZS10eXBlIG9wZXJhdG9ycy4KKwkgKi8KKwllbGVtX3R5cGUgPSBmcG1ldGEtPnN1YnR5cGVzWzBd OworCUFzc2VydChPaWRJc1ZhbGlkKGVsZW1fdHlwZSkpOworCWdldF90eXBsZW5ieXZhbGFsaWdu KGVsZW1fdHlwZSwgJmVsZW1fbGVuLCAmZWxlbV9ieXZhbCwgJmVsZW1fYWxpZ24pOworCisJYXJy ID0gY29uc3RydWN0X2FycmF5KHNlYXJjaF92YWxzLCBudmFscywKKwkJCQkJCSAgZWxlbV90eXBl LCBlbGVtX2xlbiwgZWxlbV9ieXZhbCwgZWxlbV9hbGlnbik7CisKKwkvKgorCSAqIEJ1aWxkIHNj YW4ga2V5IHdpdGggU0tfU0VBUkNIQVJSQVkuICBUaGUgaW5kZXggQU0gY29kZSB3aWxsIGludGVy bmFsbHkKKwkgKiBzb3J0IGFuZCBkZWR1cGxpY2F0ZSwgdGhlbiB3YWxrIGxlYWYgcGFnZXMgaW4g b3JkZXIuCisJICovCisJU2NhbktleUVudHJ5SW5pdGlhbGl6ZSgmc2tleVswXSwKKwkJCQkJCSAg IFNLX1NFQVJDSEFSUkFZLAorCQkJCQkJICAgMSwJLyogYXR0bm8gKi8KKwkJCQkJCSAgIGZwbWV0 YS0+c3RyYXRzWzBdLAorCQkJCQkJICAgZnBtZXRhLT5zdWJ0eXBlc1swXSwKKwkJCQkJCSAgIGlk eF9yZWwtPnJkX2luZGNvbGxhdGlvblswXSwKKwkJCQkJCSAgIGZwbWV0YS0+cmVnb3BzWzBdLAor CQkJCQkJICAgUG9pbnRlckdldERhdHVtKGFycikpOworCisJaW5kZXhfcmVzY2FuKHNjYW5kZXNj LCBza2V5LCAxLCBOVUxMLCAwKTsKKworCS8qCisJICogV2FsayBhbGwgbWF0Y2hlcy4gIFRoZSBp bmRleCBBTSByZXR1cm5zIHRoZW0gaW4gaW5kZXggb3JkZXIuICBGb3IgZWFjaAorCSAqIG1hdGNo LCBmaW5kIHdoaWNoIGJhdGNoIGl0ZW0ocykgaXQgc2F0aXNmaWVzLgorCSAqLworCXdoaWxlIChp bmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBwa19zbG90 KSkKKwl7CisJCURhdHVtCQlmb3VuZF92YWw7CisJCWJvb2wJCWZvdW5kX251bGw7CisJCWJvb2wJ CWNvbmN1cnJlbnRseV91cGRhdGVkOworCQlTY2FuS2V5RGF0YSByZWNoZWNrX3NrZXlbMV07CisK KwkJaWYgKCFyaV9Mb2NrUEtUdXBsZShwa19yZWwsIHBrX3Nsb3QsIHNuYXBzaG90LCAmY29uY3Vy cmVudGx5X3VwZGF0ZWQpKQorCQkJY29udGludWU7CisKKwkJLyogRXh0cmFjdCB0aGUgUEsgdmFs dWUgZnJvbSB0aGUgbWF0Y2hlZCBhbmQgbG9ja2VkIHR1cGxlICovCisJCWZvdW5kX3ZhbCA9IHNs b3RfZ2V0YXR0cihwa19zbG90LCByaWluZm8tPnBrX2F0dG51bXNbMF0sICZmb3VuZF9udWxsKTsK KwkJQXNzZXJ0KCFmb3VuZF9udWxsKTsKKworCQlpZiAoY29uY3VycmVudGx5X3VwZGF0ZWQpCisJ CXsKKwkJCS8qCisJCQkgKiBCdWlsZCBhIHNpbmdsZS1rZXkgc2NhbmtleSBmb3IgcmVjaGVjay4g IFdlIG5lZWQgdGhlIGFjdHVhbCBQSworCQkJICogdmFsdWUgdGhhdCB3YXMgZm91bmQsIG5vdCB0 aGUgRksgc2VhcmNoIHZhbHVlLgorCQkJICovCisJCQlTY2FuS2V5RW50cnlJbml0aWFsaXplKCZy ZWNoZWNrX3NrZXlbMF0sIDAsIDEsCisJCQkJCQkJCSAgIGZwbWV0YS0+c3RyYXRzWzBdLAorCQkJ CQkJCQkgICBmcG1ldGEtPnN1YnR5cGVzWzBdLAorCQkJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRj b2xsYXRpb25bMF0sCisJCQkJCQkJCSAgIGZwbWV0YS0+cmVnb3BzWzBdLAorCQkJCQkJCQkgICBm b3VuZF92YWwpOworCQkJaWYgKCFyZWNoZWNrX21hdGNoZWRfcGtfdHVwbGUoaWR4X3JlbCwgcmVj aGVja19za2V5LCBwa19zbG90KSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIExp bmVhciBzY2FuIHRvIG1hcmsgYWxsIGJhdGNoIGl0ZW1zIG1hdGNoaW5nIHRoaXMgUEsgdmFsdWUu CisJCSAqIE8oYmF0Y2hfc2l6ZSkgcGVyIG1hdGNoLCBPKGJhdGNoX3NpemVeMikgd29yc3QgY2Fz ZSAtLSBmaW5lIGZvciB0aGUKKwkJICogY3VycmVudCBiYXRjaCBzaXplIG9mIDY0LgorCQkgKi8K KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudmFsczsgaSsrKQorCQl7CisJCQlpZiAoIW1hdGNoZWRb aV0gJiYKKwkJCQlEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoZXFfb3ByX2ZpbmZvLAor CQkJCQkJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRpb25bMF0sCisJCQkJCQkJCQkJCSAg IGZvdW5kX3ZhbCwKKwkJCQkJCQkJCQkJICAgc2VhcmNoX3ZhbHNbaV0pKSkKKwkJCQltYXRjaGVk W2ldID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qIFJlcG9ydCBmaXJzdCB1bm1hdGNoZWQgcm93ICov CisJZm9yIChpbnQgaSA9IDA7IGkgPCBudmFsczsgaSsrKQorCQlpZiAoIW1hdGNoZWRbaV0pCisJ CQlyZXR1cm4gaTsKKworCS8qIEFsbCBwYXNzLiAqLworCXJldHVybiAtMTsKK30KKwogLyoKICAq IHJpX0Zhc3RQYXRoUHJvYmVPbmUKICAqCQlQcm9iZSB0aGUgUEsgaW5kZXggZm9yIG9uZSBzZXQg b2Ygc2NhbiBrZXlzLCBsb2NrIHRoZSBtYXRjaGluZwpAQCAtMzY4NywzICs0MDgwLDE5NiBAQCBS SV9GS2V5X3RyaWdnZXJfdHlwZShPaWQgdGdmb2lkKQogCiAJcmV0dXJuIFJJX1RSSUdHRVJfTk9O RTsKIH0KKworLyoKKyAqIHJpX0Zhc3RQYXRoRW5kQmF0Y2gKKyAqCQlGbHVzaCByZW1haW5pbmcg cm93cyBhbmQgdGVhciBkb3duIGNhY2hlZCBzdGF0ZS4KKyAqCisgKiBSZWdpc3RlcmVkIGFzIGFu IEFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2suICBOb3RlOiB0aGUgZmx1c2ggY2FuCisgKiBkbyBy ZWFsIHdvcmsgKENDSSwgc2VjdXJpdHkgY29udGV4dCBzd2l0Y2gsIGluZGV4IHByb2JlcykgYW5k IGNhbgorICogdGhyb3cgRVJST1Igb24gYSBjb25zdHJhaW50IHZpb2xhdGlvbi4gIElmIHRoYXQg aGFwcGVucywKKyAqIHJpX0Zhc3RQYXRoVGVhcmRvd24gbmV2ZXIgcnVuczsgUmVzb3VyY2VPd25l ciArIFhhY3RDYWxsYmFjaworICogaGFuZGxlIHJlc291cmNlIGNsZWFudXAgb24gdGhlIGFib3J0 IHBhdGguCisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aEVuZEJhdGNoKHZvaWQgKmFyZykK K3sKKwlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOworCVJJX0Zhc3RQYXRoRW50cnkgKmVudHJ5Owor CisJaWYgKHJpX2Zhc3RwYXRoX2NhY2hlID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEZsdXNo IGFueSBwYXJ0aWFsIGJhdGNoZXMgLS0gY2FuIHRocm93IEVSUk9SICovCisJaGFzaF9zZXFfaW5p dCgmc3RhdHVzLCByaV9mYXN0cGF0aF9jYWNoZSk7CisJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2Vx X3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+YmF0Y2hfY291bnQg PiAwKQorCQl7CisJCQlSZWxhdGlvbglma19yZWwgPSB0YWJsZV9vcGVuKGVudHJ5LT5ma19yZWxp ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJcmlfRmFzdFBhdGhCYXRjaEZsdXNoKGVudHJ5LCBm a19yZWwpOworCQkJdGFibGVfY2xvc2UoZmtfcmVsLCBOb0xvY2spOworCQl9CisJfQorCisJLyog T3JkZXJseSB0ZWFyZG93biAqLworCXJpX0Zhc3RQYXRoVGVhcmRvd24oKTsKK30KKworLyoKKyAq IHJpX0Zhc3RQYXRoVGVhcmRvd24KKyAqCQlUZWFyIGRvd24gYWxsIGNhY2hlZCBmYXN0LXBhdGgg c3RhdGUuCisgKgorICogQ2FsbGVkIGZyb20gcmlfRmFzdFBhdGhFbmRCYXRjaCgpIGFmdGVyIGZs dXNoaW5nIGFueSByZW1haW5pbmcgcm93cy4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRo VGVhcmRvd24odm9pZCkKK3sKKwlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOworCVJJX0Zhc3RQYXRo RW50cnkgKmVudHJ5OworCisJaWYgKHJpX2Zhc3RwYXRoX2NhY2hlID09IE5VTEwpCisJCXJldHVy bjsKKworCWhhc2hfc2VxX2luaXQoJnN0YXR1cywgcmlfZmFzdHBhdGhfY2FjaGUpOworCXdoaWxl ICgoZW50cnkgPSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9IE5VTEwpCisJeworCQlpZiAo ZW50cnktPmlkeF9yZWwpCisJCQlpbmRleF9jbG9zZShlbnRyeS0+aWR4X3JlbCwgTm9Mb2NrKTsK KwkJaWYgKGVudHJ5LT5wa19yZWwpCisJCQl0YWJsZV9jbG9zZShlbnRyeS0+cGtfcmVsLCBOb0xv Y2spOworCQlpZiAoZW50cnktPnBrX3Nsb3QpCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVT bG90KGVudHJ5LT5wa19zbG90KTsKKwkJaWYgKGVudHJ5LT5ma19zbG90KQorCQkJRXhlY0Ryb3BT aW5nbGVUdXBsZVRhYmxlU2xvdChlbnRyeS0+Zmtfc2xvdCk7CisJCWlmIChlbnRyeS0+Zmx1c2hf Y3h0KQorCQkJTWVtb3J5Q29udGV4dERlbGV0ZShlbnRyeS0+Zmx1c2hfY3h0KTsKKwl9CisKKwlo YXNoX2Rlc3Ryb3kocmlfZmFzdHBhdGhfY2FjaGUpOworCXJpX2Zhc3RwYXRoX2NhY2hlID0gTlVM TDsKKwlyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkID0gZmFsc2U7Cit9CisKK3N0YXRp YyBib29sIHJpX2Zhc3RwYXRoX3hhY3RfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZhbHNlOworCitz dGF0aWMgdm9pZAorcmlfRmFzdFBhdGhYYWN0Q2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lk ICphcmcpCit7CisJLyoKKwkgKiBPbiBhYm9ydCwgUmVzb3VyY2VPd25lciBhbHJlYWR5IHJlbGVh c2VkIHJlbGF0aW9uczsgb24gY29tbWl0LAorCSAqIHJpX0Zhc3RQYXRoVGVhcmRvd24gYWxyZWFk eSByYW4uICBFaXRoZXIgd2F5LCBqdXN0IE5VTEwgdGhlIHN0YXRpYworCSAqIHBvaW50ZXJzIHNv IHRoZXkgZG9uJ3QgZGFuZ2xlIGludG8gdGhlIG5leHQgdHJhbnNhY3Rpb24uCisJICovCisJcmlf ZmFzdHBhdGhfY2FjaGUgPSBOVUxMOworCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQg PSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoU3ViWGFjdENhbGxiYWNrKFN1 YlhhY3RFdmVudCBldmVudCwgU3ViVHJhbnNhY3Rpb25JZCBteVN1YmlkLAorCQkJCQkJICAgU3Vi VHJhbnNhY3Rpb25JZCBwYXJlbnRTdWJpZCwgdm9pZCAqYXJnKQoreworCWlmIChldmVudCA9PSBT VUJYQUNUX0VWRU5UX0FCT1JUX1NVQikKKwl7CisJCS8qCisJCSAqIFJlc291cmNlT3duZXIgYWxy ZWFkeSByZWxlYXNlZCByZWxhdGlvbnMuICBOVUxMIHRoZSBzdGF0aWMgcG9pbnRlcnMKKwkJICog c28gdGhlIHN0aWxsLXJlZ2lzdGVyZWQgYmF0Y2ggY2FsbGJhY2sgYmVjb21lcyBhIG5vLW9wIGZv ciB0aGUgcmVzdAorCQkgKiBvZiB0aGlzIHRyYW5zYWN0aW9uLgorCQkgKi8KKwkJcmlfZmFzdHBh dGhfY2FjaGUgPSBOVUxMOworCQlyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkID0gZmFs c2U7CisJfQorfQorCisvKgorICogcmlfRmFzdFBhdGhHZXRFbnRyeQorICoJCUxvb2sgdXAgb3Ig Y3JlYXRlIGEgcGVyLWJhdGNoIGNhY2hlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gY29uc3RyYWludC4K KyAqCisgKiBPbiBmaXJzdCBjYWxsIGZvciBhIGNvbnN0cmFpbnQgd2l0aGluIGEgYmF0Y2g6IG9w ZW5zIHBrX3JlbCBhbmQgdGhlIGluZGV4LAorICogYWxsb2NhdGVzIHNsb3RzIGZvciBib3RoIEZL IHJvdyBhbmQgdGhlIGxvb2tlZCB1cCBQSyByb3csIGFuZCByZWdpc3RlcnMgdGhlCisgKiBjbGVh bnVwIGNhbGxiYWNrLgorICoKKyAqIE9uIHN1YnNlcXVlbnQgY2FsbHM6IHJldHVybnMgdGhlIGV4 aXN0aW5nIGVudHJ5LgorICovCitzdGF0aWMgUklfRmFzdFBhdGhFbnRyeSAqCityaV9GYXN0UGF0 aEdldEVudHJ5KGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3Jl bCkKK3sKKwlSSV9GYXN0UGF0aEVudHJ5ICplbnRyeTsKKwlib29sCQlmb3VuZDsKKworCS8qIENy ZWF0ZSBoYXNoIHRhYmxlIG9uIGZpcnN0IHVzZSBpbiB0aGlzIGJhdGNoICovCisJaWYgKHJpX2Zh c3RwYXRoX2NhY2hlID09IE5VTEwpCisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJaWYgKCFyaV9m YXN0cGF0aF94YWN0X2NhbGxiYWNrX3JlZ2lzdGVyZWQpCisJCXsKKwkJCVJlZ2lzdGVyWGFjdENh bGxiYWNrKHJpX0Zhc3RQYXRoWGFjdENhbGxiYWNrLCBOVUxMKTsKKwkJCVJlZ2lzdGVyU3ViWGFj dENhbGxiYWNrKHJpX0Zhc3RQYXRoU3ViWGFjdENhbGxiYWNrLCBOVUxMKTsKKwkJCXJpX2Zhc3Rw YXRoX3hhY3RfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IHRydWU7CisJCX0KKworCQljdGwua2V5c2l6 ZSA9IHNpemVvZihPaWQpOworCQljdGwuZW50cnlzaXplID0gc2l6ZW9mKFJJX0Zhc3RQYXRoRW50 cnkpOworCQljdGwuaGN4dCA9IFRvcFRyYW5zYWN0aW9uQ29udGV4dDsKKwkJcmlfZmFzdHBhdGhf Y2FjaGUgPSBoYXNoX2NyZWF0ZSgiUkkgZmFzdC1wYXRoIGNhY2hlIiwKKwkJCQkJCQkJCQkxNiwK KwkJCQkJCQkJCQkmY3RsLAorCQkJCQkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNI X0NPTlRFWFQpOworCX0KKworCWVudHJ5ID0gaGFzaF9zZWFyY2gocmlfZmFzdHBhdGhfY2FjaGUs ICZyaWluZm8tPmNvbnN0cmFpbnRfaWQsCisJCQkJCQlIQVNIX0VOVEVSLCAmZm91bmQpOworCisJ aWYgKCFmb3VuZCkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCS8qCisJCSAqIFpl cm8gb3V0IG5vbi1rZXkgZmllbGRzIHNvIHJpX0Zhc3RQYXRoVGVhcmRvd24gaXMgc2FmZSBpZiB3 ZSBlcnJvcgorCQkgKiBvdXQgZHVyaW5nIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24gYmVsb3cuCisJ CSAqLworCQltZW1zZXQoKChjaGFyICopIGVudHJ5KSArIG9mZnNldG9mKFJJX0Zhc3RQYXRoRW50 cnksIHBrX3JlbCksIDAsCisJCQkgICBzaXplb2YoUklfRmFzdFBhdGhFbnRyeSkgLSBvZmZzZXRv ZihSSV9GYXN0UGF0aEVudHJ5LCBwa19yZWwpKTsKKworCQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oVG9wVHJhbnNhY3Rpb25Db250ZXh0KTsKKworCQllbnRyeS0+ZmtfcmVsaWQgPSBS ZWxhdGlvbkdldFJlbGlkKGZrX3JlbCk7CisKKwkJLyoKKwkJICogT3BlbiBQSyB0YWJsZSBhbmQg aXRzIHVuaXF1ZSBpbmRleC4KKwkJICoKKwkJICogUm93U2hhcmVMb2NrIG9uIHBrX3JlbCBtYXRj aGVzIHdoYXQgdGhlIFNQSSBwYXRoJ3MgU0VMRUNUIC4uLiBGT1IKKwkJICogS0VZIFNIQVJFIHdv dWxkIGFjcXVpcmUgYXMgYSByZWxhdGlvbi1sZXZlbCBsb2NrLiBBY2Nlc3NTaGFyZUxvY2sKKwkJ ICogb24gdGhlIGluZGV4IGlzIHN0YW5kYXJkIGZvciBpbmRleCBzY2Fucy4KKwkJICoKKwkJICog V2UgZG9uJ3QgcmVsZWFzZSB0aGVzZSBsb2NrcyB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rpb24sIG1h dGNoaW5nIFNQSQorCQkgKiBiZWhhdmlvci4KKwkJICovCisJCWVudHJ5LT5wa19yZWwgPSB0YWJs ZV9vcGVuKHJpaW5mby0+cGtfcmVsaWQsIFJvd1NoYXJlTG9jayk7CisJCWVudHJ5LT5pZHhfcmVs ID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQllbnRy eS0+cGtfc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKGVudHJ5LT5wa19yZWwsIE5VTEwpOworCisJ CS8qCisJCSAqIE11c3QgYmUgVFRTT3BzSGVhcFR1cGxlIGJlY2F1c2UgRXhlY1N0b3JlSGVhcFR1 cGxlKCkgaXMgdXNlZCB0bworCQkgKiBsb2FkIGVudHJpZXMgZnJvbSBiYXRjaFtdIGludG8gdGhp cyBzbG90IGZvciB2YWx1ZSBleHRyYWN0aW9uLgorCQkgKi8KKwkJZW50cnktPmZrX3Nsb3QgPSBN YWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihma19yZWwpLAorCQkJCQkJ CQkJCQkJICAmVFRTT3BzSGVhcFR1cGxlKTsKKworCQllbnRyeS0+Zmx1c2hfY3h0ID0gQWxsb2NT ZXRDb250ZXh0Q3JlYXRlKFRvcFRyYW5zYWN0aW9uQ29udGV4dCwKKwkJCQkJCQkJCQkJCSAiUkkg ZmFzdCBwYXRoIGZsdXNoIHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCQkJCQkJCSBBTExPQ1NF VF9TTUFMTF9TSVpFUyk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJCS8q IEVuc3VyZSBjbGVhbnVwIGF0IGVuZCBvZiB0aGlzIHRyaWdnZXItZmlyaW5nIGJhdGNoICovCisJ CWlmICghcmlfZmFzdHBhdGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCkKKwkJeworCQkJUmVnaXN0ZXJB ZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrKHJpX0Zhc3RQYXRoRW5kQmF0Y2gsIE5VTEwpOworCQkJ cmlfZmFzdHBhdGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1 cm4gZW50cnk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKaW5kZXggMjdhZjUyODQ0MDYuLjc2NjQy OThmNWM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKKysrIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvdHJpZ2dlci5oCkBAIC0yODksNCArMjg5LDIyIEBAIGV4dGVy biB2b2lkIFJJX1BhcnRpdGlvblJlbW92ZV9DaGVjayhUcmlnZ2VyICp0cmlnZ2VyLCBSZWxhdGlv biBma19yZWwsCiAKIGV4dGVybiBpbnQJUklfRktleV90cmlnZ2VyX3R5cGUoT2lkIHRnZm9pZCk7 CiAKKy8qCisgKiBDYWxsYmFjayB0eXBlIGZvciBlbmQtb2YtdHJpZ2dlci1iYXRjaCBub3RpZmlj YXRpb25zLgorICoKKyAqIFJlZ2lzdGVyZWQgdmlhIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hD YWxsYmFjaygpLiAgSW52b2tlZCB3aGVuCisgKiBhIGJhdGNoIG9mIGFmdGVyLXRyaWdnZXIgcHJv Y2Vzc2luZyBjb21wbGV0ZXM6CisgKgktIEFmdGVyVHJpZ2dlckVuZFF1ZXJ5KCkgICAgICAoaW1t ZWRpYXRlIGNvbnN0cmFpbnRzKQorICoJLSBBZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQoKSAgKGRl ZmVycmVkIGNvbnN0cmFpbnRzIGF0IENPTU1JVCkKKyAqCS0gQWZ0ZXJUcmlnZ2VyU2V0U3RhdGUo KSAgICAgIChTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFKQorICoKKyAqIFRoZSBjYWxsYmFjayBs aXN0IGlzIGNsZWFyZWQgYWZ0ZXIgZWFjaCBiYXRjaC4gIENhbGxlcnMgbXVzdAorICogcmUtcmVn aXN0ZXIgaWYgdGhleSBuZWVkIHRvIGJlIGNhbGxlZCBhZ2FpbiBpbiBhIHN1YnNlcXVlbnQgYmF0 Y2guCisgKi8KK3R5cGVkZWYgdm9pZCAoKkFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2spICh2b2lk ICphcmcpOworCitleHRlcm4gdm9pZCBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2so QWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCQkJCQkJICB2b2lkICph cmcpOworZXh0ZXJuIGJvb2wgQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZSh2b2lkKTsKKwogI2Vu ZGlmCQkJCQkJCS8qIFRSSUdHRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9mb3JlaWduX2tleS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVp Z25fa2V5Lm91dAppbmRleCA2YzYwN2QzNjIyMi4uOTEyOTU3NTRiYWIgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CkBAIC0zNTU3LDMgKzM1NTcsMTI5IEBAIERF VEFJTDogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtwYXJ0MTNfdDEKIGRyb3AgY2FzY2FkZXMg dG8gdGFibGUgZmtwYXJ0MTNfdDIKIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtwYXJ0MTNfdDMK IFJFU0VUIHNlYXJjaF9wYXRoOworLS0gVGVzdHMgZm9yZWlnbiBrZXkgY2hlY2sgZmFzdC1wYXRo IG5vLWNhY2hlIHBhdGguCitDUkVBVEUgVEFCTEUgZnBfcGtfYWx0ZXIgKGEgaW50IFBSSU1BUlkg S0VZKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2FsdGVyIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwKTsKK0NSRUFURSBUQUJMRSBmcF9ma19hbHRlciAoYSBpbnQpOworSU5TRVJUIElOVE8gZnBf ZmtfYWx0ZXIgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworLS0gVmFsaWRhdGlvbiBw YXRoOiBzaG91bGQgc3VjY2VlZAorQUxURVIgVEFCTEUgZnBfZmtfYWx0ZXIgQUREIEZPUkVJR04g S0VZIChhKSBSRUZFUkVOQ0VTIGZwX3BrX2FsdGVyOworSU5TRVJUIElOVE8gZnBfZmtfYWx0ZXIg VkFMVUVTICgxMDEpOyAgLS0gc2hvdWxkIGZhaWwgKGNvbnN0cmFpbnQgYWN0aXZlKQorRVJST1I6 ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19hbHRlciIgdmlvbGF0ZXMgZm9yZWln biBrZXkgY29uc3RyYWludCAiZnBfZmtfYWx0ZXJfYV9ma2V5IgorREVUQUlMOiAgS2V5IChhKT0o MTAxKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGtfYWx0ZXIiLgorRFJPUCBUQUJMRSBm cF9ma19hbHRlciwgZnBfcGtfYWx0ZXI7CistLSBTZXBhcmF0ZSB0ZXN0OiB2YWxpZGF0aW9uIGNh dGNoZXMgZXhpc3RpbmcgdmlvbGF0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfYWx0ZXIyIChhIGlu dCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19hbHRlcjIgVkFMVUVTICgxKTsKK0NS RUFURSBUQUJMRSBmcF9ma19hbHRlcjIgKGEgaW50KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVy MiBWQUxVRVMgKDEpLCAoMjAwKTsgIC0tIDIwMCBoYXMgbm8gUEsgbWF0Y2gKK0FMVEVSIFRBQkxF IGZwX2ZrX2FsdGVyMiBBREQgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXIy OyAgLS0gc2hvdWxkIGZhaWwKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBf ZmtfYWx0ZXIyIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19hbHRlcjJf YV9ma2V5IgorREVUQUlMOiAgS2V5IChhKT0oMjAwKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAi ZnBfcGtfYWx0ZXIyIi4KK0RST1AgVEFCTEUgZnBfZmtfYWx0ZXIyLCBmcF9wa19hbHRlcjI7Cist LSBUZXN0cyB0aGF0IHRoZSBmYXN0LXBhdGggaGFuZGxlcyBjYWNoaW5nIGZvciBtdWx0aXBsZSBj b25zdHJhaW50cworQ1JFQVRFIFRBQkxFIGZwX3BrMSAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JF QVRFIFRBQkxFIGZwX3BrMiAoYiBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGsx IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9wazIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJM RSBmcF9tdWx0aV9mayAoCisgICAgYSBpbnQgUkVGRVJFTkNFUyBmcF9wazEsCisgICAgYiBpbnQg UkVGRVJFTkNFUyBmcF9wazIKKyk7CitJTlNFUlQgSU5UTyBmcF9tdWx0aV9mayBWQUxVRVMgKDEs IDEpOyAgLS0gdHdvIGNvbnN0cmFpbnRzLCBvbmUgYmF0Y2gKK0lOU0VSVCBJTlRPIGZwX211bHRp X2ZrIFZBTFVFUyAoMSwgMik7ICAtLSBzZWNvbmQgY29uc3RyYWludCBmYWlscworRVJST1I6ICBp bnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9tdWx0aV9mayIgdmlvbGF0ZXMgZm9yZWlnbiBr ZXkgY29uc3RyYWludCAiZnBfbXVsdGlfZmtfYl9ma2V5IgorREVUQUlMOiAgS2V5IChiKT0oMikg aXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZwX3BrMiIuCitEUk9QIFRBQkxFIGZwX211bHRpX2Zr LCBmcF9wazEsIGZwX3BrMjsKKy0tIFRlc3QgdGhhdCBmYXN0LXBhdGggY2FjaGUgaGFuZGxlcyBk ZWZlcnJlZCBjb25zdHJhaW50cyBhbmQgU0VUIENPTlNUUkFJTlRTIElNTUVESUFURQorQ1JFQVRF IFRBQkxFIGZwX3BrX2RlZmVyIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBf ZmtfZGVmZXIgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZGVmZXIgREVGRVJSQUJMRSBJTklUSUFM TFkgREVGRVJSRUQpOworSU5TRVJUIElOVE8gZnBfcGtfZGVmZXIgVkFMVUVTICgxKSwgKDIpOwor QkVHSU47CitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8g ZnBfZmtfZGVmZXIgVkFMVUVTICgyKTsKK1NFVCBDT05TVFJBSU5UUyBBTEwgSU1NRURJQVRFOyAg LS0gZmlyZXMgYmF0Y2ggY2FsbGJhY2sgaGVyZQorSU5TRVJUIElOVE8gZnBfZmtfZGVmZXIgVkFM VUVTICgzKTsgIC0tIHNob3VsZCBmYWlsLCBhbHNvIHRlc3RzIHRoYXQgY2FjaGUgd2FzIGNsZWFu ZWQgdXAKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfZGVmZXIiIHZp b2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX2RlZmVyX2FfZmtleSIKK0RFVEFJ TDogIEtleSAoYSk9KDMpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19kZWZlciIuCitD T01NSVQ7CitEUk9QIFRBQkxFIGZwX3BrX2RlZmVyLCBmcF9ma19kZWZlcjsKKy0tIFN1YnRyYW5z YWN0aW9uIGFib3J0OiBjYWNoZWQgc3RhdGUgbXVzdCBiZSBpbnZhbGlkYXRlZCBvbiBST0xMQkFD SyBUTworQ1JFQVRFIFRBQkxFIGZwX3BrX3N1YnhhY3QgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NS RUFURSBUQUJMRSBmcF9ma19zdWJ4YWN0IChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX3N1YnhhY3Qp OworSU5TRVJUIElOVE8gZnBfcGtfc3VieGFjdCBWQUxVRVMgKDEpLCAoMik7CitCRUdJTjsKK0lO U0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK1NBVkVQT0lOVCBzcDE7CitJTlNF UlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZBTFVFUyAoMik7CitST0xMQkFDSyBUTyBzcDE7CitJTlNF UlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1QgKiBGUk9N IGZwX2ZrX3N1YnhhY3Q7CisgYSAKKy0tLQorIDEKKyAxCisoMiByb3dzKQorCitEUk9QIFRBQkxF IGZwX2ZrX3N1YnhhY3QsIGZwX3BrX3N1YnhhY3Q7CistLSBGSyBjaGVjayBtdXN0IHNlZSBQSyBy b3dzIGluc2VydGVkIGJ5IGVhcmxpZXIgQUZURVIgdHJpZ2dlcnMKKy0tIGZpcmluZyBvbiB0aGUg c2FtZSBzdGF0ZW1lbnQKK0NSRUFURSBUQUJMRSBmcF9wa19jY2kgKGEgaW50IFBSSU1BUlkgS0VZ KTsKK0NSRUFURSBUQUJMRSBmcF9ma19jY2kgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfY2NpKTsK K0NSRUFURSBGVU5DVElPTiBmcF9hdXRvX3BrKCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJ TgorICBSQUlTRSBOT1RJQ0UgJ2ZwX2F1dG9fcGsgY2FsbGVkJzsKKyAgSU5TRVJUIElOVE8gZnBf cGtfY2NpIFZBTFVFUyAoTkVXLmEpOworICBSRVRVUk4gTkVXOworRU5EICQkIExBTkdVQUdFIHBs cGdzcWw7CistLSBOYW1lIHNvcnRzIGJlZm9yZSB0aGUgUkkgdHJpZ2dlciwgc28gZmlyZXMgZmly c3QgcGVyIHJvdworQ1JFQVRFIFRSSUdHRVIgIkFBQV9hdXRvIiBBRlRFUiBJTlNFUlQgT04gZnBf ZmtfY2NpCisgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKTsKKy0t IFNob3VsZCBzdWNjZWVkOiBBQUFfYXV0byBwcm92aXNpb25zIHRoZSBQSyByb3cgYmVmb3JlIFJJ IGNoZWNrCitJTlNFUlQgSU5UTyBmcF9ma19jY2kgVkFMVUVTICgxKSwgKDIpLCAoMyk7CitOT1RJ Q0U6ICBmcF9hdXRvX3BrIGNhbGxlZAorTk9USUNFOiAgZnBfYXV0b19wayBjYWxsZWQKK05PVElD RTogIGZwX2F1dG9fcGsgY2FsbGVkCitEUk9QIFRBQkxFIGZwX2ZrX2NjaSwgZnBfcGtfY2NpOwor RFJPUCBGVU5DVElPTiBmcF9hdXRvX3BrOworLS0gTXVsdGktY29sdW1uIEZLOiBleGVyY2lzZXMg YmF0Y2hlZCBwZXItcm93IHByb2Jpbmcgd2l0aCBjb21wb3NpdGUga2V5cworQ1JFQVRFIFRBQkxF IGZwX3BrX211bHRpIChhIGludCwgYiBpbnQsIFBSSU1BUlkgS0VZIChhLCBiKSk7CitJTlNFUlQg SU5UTyBmcF9wa19tdWx0aSBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAp IGk7CitDUkVBVEUgVEFCTEUgZnBfZmtfbXVsdGkgKHggaW50LCBhIGludCwgYiBpbnQsCisgICAg Rk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5DRVMgZnBfcGtfbXVsdGkpOworSU5TRVJUIElOVE8g ZnBfZmtfbXVsdGkgU0VMRUNUIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBp OworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkgVkFMVUVTICgxLCA5OTksIDk5OSk7CitFUlJPUjog IGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2ZrX211bHRpIiB2aW9sYXRlcyBmb3JlaWdu IGtleSBjb25zdHJhaW50ICJmcF9ma19tdWx0aV9hX2JfZmtleSIKK0RFVEFJTDogIEtleSAoYSwg Yik9KDk5OSwgOTk5KSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGtfbXVsdGkiLgorRFJP UCBUQUJMRSBmcF9ma19tdWx0aSwgZnBfcGtfbXVsdGk7CistLSBEZWZlcnJlZCBjb25zdHJhaW50 OiBiYXRjaCBmbHVzaGVkIGF0IENPTU1JVCwgbm90IGF0IHN0YXRlbWVudCBlbmQKK0NSRUFURSBU QUJMRSBmcF9wa19jb21taXQgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9m a19jb21taXQgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfY29tbWl0CisgICAgREVGRVJSQUJMRSBJ TklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElOVE8gZnBfcGtfY29tbWl0IFZBTFVFUyAoMSk7 CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDEpOworSU5TRVJUIElO VE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19jb21taXQgVkFM VUVTICg5OTkpOworQ09NTUlUOworRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJm cF9ma19jb21taXQiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX2NvbW1p dF9hX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEpPSg5OTkpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxl ICJmcF9wa19jb21taXQiLgorRFJPUCBUQUJMRSBmcF9ma19jb21taXQsIGZwX3BrX2NvbW1pdDsK Ky0tIENyb3NzLXR5cGUgRksgd2l0aCBidWxrIGluc2VydDogaW50OCBGSyByZWZlcmVuY2luZyBp bnQ0IFBLLAorLS0gdmFsdWVzIGNhc3QgZHVyaW5nIGFycmF5IGNvbnN0cnVjdGlvbgorQ1JFQVRF IFRBQkxFIGZwX3BrX2Nyb3NzIChhIGludDQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBf cGtfY3Jvc3MgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAyMDApOworQ1JFQVRFIFRBQkxFIGZw X2ZrX2Nyb3NzIChhIGludDggUkVGRVJFTkNFUyBmcF9wa19jcm9zcyk7CitJTlNFUlQgSU5UTyBm cF9ma19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitJTlNFUlQgSU5UTyBm cF9ma19jcm9zcyBWQUxVRVMgKDk5OSk7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFi bGUgImZwX2ZrX2Nyb3NzIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19j cm9zc19hX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEpPSg5OTkpIGlzIG5vdCBwcmVzZW50IGluIHRh YmxlICJmcF9wa19jcm9zcyIuCitEUk9QIFRBQkxFIGZwX2ZrX2Nyb3NzLCBmcF9wa19jcm9zczsK Ky0tIER1cGxpY2F0ZSBGSyB2YWx1ZXM6IHdoZW4gdXNpbmcgdGhlIGJhdGNoZWQgU0FPUCBwYXRo LCBldmVyeQorLS0gcm93IG11c3QgYmUgcmVjb2duaXplZCBhcyBzYXRpc2ZpZWQsIG5vdCBqdXN0 IHRoZSBmaXJzdCBtYXRjaAorQ1JFQVRFIFRBQkxFIGZwX3BrX2R1cCAoYSBpbnQgUFJJTUFSWSBL RVkpOworSU5TRVJUIElOVE8gZnBfcGtfZHVwIFZBTFVFUyAoMSk7CitDUkVBVEUgVEFCTEUgZnBf ZmtfZHVwIChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX2R1cCk7CitJTlNFUlQgSU5UTyBmcF9ma19k dXAgU0VMRUNUIDEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKK0RST1AgVEFCTEUgZnBf ZmtfZHVwLCBmcF9wa19kdXA7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3Jl aWduX2tleS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKaW5kZXgg ZmNkZDAwNmM5NzEuLmY2NDZkZDEwNDAxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9mb3JlaWduX2tleS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXku c3FsCkBAIC0yNTM1LDMgKzI1MzUsMTIxIEBAIFdJVEggY3RlIEFTICgKIAogRFJPUCBTQ0hFTUEg ZmtwYXJ0MTMgQ0FTQ0FERTsKIFJFU0VUIHNlYXJjaF9wYXRoOworCistLSBUZXN0cyBmb3JlaWdu IGtleSBjaGVjayBmYXN0LXBhdGggbm8tY2FjaGUgcGF0aC4KK0NSRUFURSBUQUJMRSBmcF9wa19h bHRlciAoYSBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIgU0VMRUNU IGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyIChhIGlu dCk7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MCk7CistLSBWYWxpZGF0aW9uIHBhdGg6IHNob3VsZCBzdWNjZWVkCitBTFRFUiBUQUJMRSBmcF9m a19hbHRlciBBREQgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXI7CitJTlNF UlQgSU5UTyBmcF9ma19hbHRlciBWQUxVRVMgKDEwMSk7ICAtLSBzaG91bGQgZmFpbCAoY29uc3Ry YWludCBhY3RpdmUpCitEUk9QIFRBQkxFIGZwX2ZrX2FsdGVyLCBmcF9wa19hbHRlcjsKKworLS0g U2VwYXJhdGUgdGVzdDogdmFsaWRhdGlvbiBjYXRjaGVzIGV4aXN0aW5nIHZpb2xhdGlvbgorQ1JF QVRFIFRBQkxFIGZwX3BrX2FsdGVyMiAoYSBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8g ZnBfcGtfYWx0ZXIyIFZBTFVFUyAoMSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfYWx0ZXIyIChhIGlu dCk7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlcjIgVkFMVUVTICgxKSwgKDIwMCk7ICAtLSAyMDAg aGFzIG5vIFBLIG1hdGNoCitBTFRFUiBUQUJMRSBmcF9ma19hbHRlcjIgQUREIEZPUkVJR04gS0VZ IChhKSBSRUZFUkVOQ0VTIGZwX3BrX2FsdGVyMjsgIC0tIHNob3VsZCBmYWlsCitEUk9QIFRBQkxF IGZwX2ZrX2FsdGVyMiwgZnBfcGtfYWx0ZXIyOworCistLSBUZXN0cyB0aGF0IHRoZSBmYXN0LXBh dGggaGFuZGxlcyBjYWNoaW5nIGZvciBtdWx0aXBsZSBjb25zdHJhaW50cworQ1JFQVRFIFRBQkxF IGZwX3BrMSAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX3BrMiAoYiBpbnQg UFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGsxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5U TyBmcF9wazIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9tdWx0aV9mayAoCisgICAgYSBp bnQgUkVGRVJFTkNFUyBmcF9wazEsCisgICAgYiBpbnQgUkVGRVJFTkNFUyBmcF9wazIKKyk7CitJ TlNFUlQgSU5UTyBmcF9tdWx0aV9mayBWQUxVRVMgKDEsIDEpOyAgLS0gdHdvIGNvbnN0cmFpbnRz LCBvbmUgYmF0Y2gKK0lOU0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMik7ICAtLSBz ZWNvbmQgY29uc3RyYWludCBmYWlscworRFJPUCBUQUJMRSBmcF9tdWx0aV9maywgZnBfcGsxLCBm cF9wazI7CisKKy0tIFRlc3QgdGhhdCBmYXN0LXBhdGggY2FjaGUgaGFuZGxlcyBkZWZlcnJlZCBj b25zdHJhaW50cyBhbmQgU0VUIENPTlNUUkFJTlRTIElNTUVESUFURQorQ1JFQVRFIFRBQkxFIGZw X3BrX2RlZmVyIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfZGVmZXIg KGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZGVmZXIgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJS RUQpOworSU5TRVJUIElOVE8gZnBfcGtfZGVmZXIgVkFMVUVTICgxKSwgKDIpOworCitCRUdJTjsK K0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19k ZWZlciBWQUxVRVMgKDIpOworU0VUIENPTlNUUkFJTlRTIEFMTCBJTU1FRElBVEU7ICAtLSBmaXJl cyBiYXRjaCBjYWxsYmFjayBoZXJlCitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDMp OyAgLS0gc2hvdWxkIGZhaWwsIGFsc28gdGVzdHMgdGhhdCBjYWNoZSB3YXMgY2xlYW5lZCB1cAor Q09NTUlUOworRFJPUCBUQUJMRSBmcF9wa19kZWZlciwgZnBfZmtfZGVmZXI7CisKKy0tIFN1YnRy YW5zYWN0aW9uIGFib3J0OiBjYWNoZWQgc3RhdGUgbXVzdCBiZSBpbnZhbGlkYXRlZCBvbiBST0xM QkFDSyBUTworQ1JFQVRFIFRBQkxFIGZwX3BrX3N1YnhhY3QgKGEgaW50IFBSSU1BUlkgS0VZKTsK K0NSRUFURSBUQUJMRSBmcF9ma19zdWJ4YWN0IChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX3N1Ynhh Y3QpOworSU5TRVJUIElOVE8gZnBfcGtfc3VieGFjdCBWQUxVRVMgKDEpLCAoMik7CitCRUdJTjsK K0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK1NBVkVQT0lOVCBzcDE7CitJ TlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZBTFVFUyAoMik7CitST0xMQkFDSyBUTyBzcDE7CitJ TlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1QgKiBG Uk9NIGZwX2ZrX3N1YnhhY3Q7CitEUk9QIFRBQkxFIGZwX2ZrX3N1YnhhY3QsIGZwX3BrX3N1Ynhh Y3Q7CisKKy0tIEZLIGNoZWNrIG11c3Qgc2VlIFBLIHJvd3MgaW5zZXJ0ZWQgYnkgZWFybGllciBB RlRFUiB0cmlnZ2VycworLS0gZmlyaW5nIG9uIHRoZSBzYW1lIHN0YXRlbWVudAorQ1JFQVRFIFRB QkxFIGZwX3BrX2NjaSAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Nj aSAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19jY2kpOworCitDUkVBVEUgRlVOQ1RJT04gZnBfYXV0 b19waygpIFJFVFVSTlMgdHJpZ2dlciBBUyAkJAorQkVHSU4KKyAgUkFJU0UgTk9USUNFICdmcF9h dXRvX3BrIGNhbGxlZCc7CisgIElOU0VSVCBJTlRPIGZwX3BrX2NjaSBWQUxVRVMgKE5FVy5hKTsK KyAgUkVUVVJOIE5FVzsKK0VORCAkJCBMQU5HVUFHRSBwbHBnc3FsOworCistLSBOYW1lIHNvcnRz IGJlZm9yZSB0aGUgUkkgdHJpZ2dlciwgc28gZmlyZXMgZmlyc3QgcGVyIHJvdworQ1JFQVRFIFRS SUdHRVIgIkFBQV9hdXRvIiBBRlRFUiBJTlNFUlQgT04gZnBfZmtfY2NpCisgIEZPUiBFQUNIIFJP VyBFWEVDVVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKTsKKworLS0gU2hvdWxkIHN1Y2NlZWQ6IEFB QV9hdXRvIHByb3Zpc2lvbnMgdGhlIFBLIHJvdyBiZWZvcmUgUkkgY2hlY2sKK0lOU0VSVCBJTlRP IGZwX2ZrX2NjaSBWQUxVRVMgKDEpLCAoMiksICgzKTsKKworRFJPUCBUQUJMRSBmcF9ma19jY2ks IGZwX3BrX2NjaTsKK0RST1AgRlVOQ1RJT04gZnBfYXV0b19wazsKKworLS0gTXVsdGktY29sdW1u IEZLOiBleGVyY2lzZXMgYmF0Y2hlZCBwZXItcm93IHByb2Jpbmcgd2l0aCBjb21wb3NpdGUga2V5 cworQ1JFQVRFIFRBQkxFIGZwX3BrX211bHRpIChhIGludCwgYiBpbnQsIFBSSU1BUlkgS0VZIChh LCBiKSk7CitJTlNFUlQgSU5UTyBmcF9wa19tdWx0aSBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDApIGk7CitDUkVBVEUgVEFCTEUgZnBfZmtfbXVsdGkgKHggaW50LCBhIGlu dCwgYiBpbnQsCisgICAgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVSRU5DRVMgZnBfcGtfbXVsdGkp OworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkgU0VMRUNUIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwKSBpOworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkgVkFMVUVTICgxLCA5OTks IDk5OSk7CitEUk9QIFRBQkxFIGZwX2ZrX211bHRpLCBmcF9wa19tdWx0aTsKKworLS0gRGVmZXJy ZWQgY29uc3RyYWludDogYmF0Y2ggZmx1c2hlZCBhdCBDT01NSVQsIG5vdCBhdCBzdGF0ZW1lbnQg ZW5kCitDUkVBVEUgVEFCTEUgZnBfcGtfY29tbWl0IChhIGludCBQUklNQVJZIEtFWSk7CitDUkVB VEUgVEFCTEUgZnBfZmtfY29tbWl0IChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX2NvbW1pdAorICAg IERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2NvbW1p dCBWQUxVRVMgKDEpOworQkVHSU47CitJTlNFUlQgSU5UTyBmcF9ma19jb21taXQgVkFMVUVTICgx KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gZnBf ZmtfY29tbWl0IFZBTFVFUyAoOTk5KTsKK0NPTU1JVDsKK0RST1AgVEFCTEUgZnBfZmtfY29tbWl0 LCBmcF9wa19jb21taXQ7CisKKy0tIENyb3NzLXR5cGUgRksgd2l0aCBidWxrIGluc2VydDogaW50 OCBGSyByZWZlcmVuY2luZyBpbnQ0IFBLLAorLS0gdmFsdWVzIGNhc3QgZHVyaW5nIGFycmF5IGNv bnN0cnVjdGlvbgorQ1JFQVRFIFRBQkxFIGZwX3BrX2Nyb3NzIChhIGludDQgUFJJTUFSWSBLRVkp OworSU5TRVJUIElOVE8gZnBfcGtfY3Jvc3MgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAyMDAp OworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Nyb3NzIChhIGludDggUkVGRVJFTkNFUyBmcF9wa19jcm9z cyk7CitJTlNFUlQgSU5UTyBmcF9ma19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIw MCk7CitJTlNFUlQgSU5UTyBmcF9ma19jcm9zcyBWQUxVRVMgKDk5OSk7CitEUk9QIFRBQkxFIGZw X2ZrX2Nyb3NzLCBmcF9wa19jcm9zczsKKworLS0gRHVwbGljYXRlIEZLIHZhbHVlczogd2hlbiB1 c2luZyB0aGUgYmF0Y2hlZCBTQU9QIHBhdGgsIGV2ZXJ5CistLSByb3cgbXVzdCBiZSByZWNvZ25p emVkIGFzIHNhdGlzZmllZCwgbm90IGp1c3QgdGhlIGZpcnN0IG1hdGNoCitDUkVBVEUgVEFCTEUg ZnBfcGtfZHVwIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19kdXAgVkFM VUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19kdXAgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtf ZHVwKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2R1cCBTRUxFQ1QgMSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAxMDApOworRFJPUCBUQUJMRSBmcF9ma19kdXAsIGZwX3BrX2R1cDsKZGlmZiAtLWdpdCBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKaW5kZXggOGU5YzA2NTQ3ZDYuLmMwYjllNTFlMzM1IDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdApAQCAtMzAsNiArMzAsOCBAQCBBZGRGb3JlaWduVXBkYXRlVGFyZ2V0c19m dW5jdGlvbgogQWRkckluZm8KIEFmZml4Tm9kZQogQWZmaXhOb2RlRGF0YQorQWZ0ZXJUcmlnZ2Vy QmF0Y2hDYWxsYmFjaworQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtCiBBZnRlclRyaWdnZXJFdmVu dAogQWZ0ZXJUcmlnZ2VyRXZlbnRDaHVuawogQWZ0ZXJUcmlnZ2VyRXZlbnREYXRhCkBAIC0yNDg1 LDYgKzI0ODcsNyBAQCBSSVgKIFJJX0NvbXBhcmVIYXNoRW50cnkKIFJJX0NvbXBhcmVLZXkKIFJJ X0NvbnN0cmFpbnRJbmZvCitSSV9GYXN0UGF0aEVudHJ5CiBSSV9RdWVyeUhhc2hFbnRyeQogUklf UXVlcnlLZXkKIFJURUtpbmQKLS0gCjIuNDcuMwoK --000000000000225184064e623116--