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 1vsvtI-009NTT-0Z for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 04:43:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsvtG-001sDX-2Y for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 04:43:50 +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 1vsvtG-001sCl-10 for pgsql-hackers@lists.postgresql.org; Thu, 19 Feb 2026 04:43:50 +0000 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vsvtB-000000005Mb-1Z7c for pgsql-hackers@lists.postgresql.org; Thu, 19 Feb 2026 04:43:48 +0000 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-6729292dcd7so324292eaf.0 for ; Wed, 18 Feb 2026 20:43:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771476223; cv=none; d=google.com; s=arc-20240605; b=YGugTj14e/e6RaEsCpedThLdYVKARZa6v7djoCAxjt3vPDNJR4Rx1GmnhOrz+Wo3gk qI9jNMIRe7VuX8KWdN1tyDlL7McXK28qelhHik80rv4+aS8Y6CFX7Es7u2IjzZ4O15Y6 hYHeb6Q6QgWuTIbbLwFUVEwQEPx7ih8dShuuzGjRh9yCEWjKlwkAUhTpd5Qg5pQZYZky wmruSmTACVVFu02QZPsGcxSf3ZqMxopHZLAsVaD40EF1PMoH/39iJt7Q2f1gWD6he7m1 S5690NgV/lJIeByI7k7L7LwgCSzb3y89HC29kwuQ1Hx9jxkUZgZ0D0WZZKpEfCwzCL29 zW3w== 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=4Y3M+5VjsNHKkkAg1phmnNAXCerwhP4zFaY5U6/fn0g=; fh=J9S6+fAHRjNxYbMFl8D416xvbT4buk1e82rUP3afd7Y=; b=bwvrwKQumPAmUu2qJa0HHT6Q/kwYbLkSF2hrvSw4SRhOFi0Zm42vp7iW1rnNuT3XAw FeEAxZO88ZJTBT2D8NAeNwXKS7ynNJGllONEdGA9jGnRVpJt6FnqtPQQuzo4dhWpEGW4 +/fNSXbkiEMq2iGs1vYcaumgba2ailRfNL7Jky1ItEiSEQUYiUXJ3QTh2sznzpxb+6AG sBQUo+npx+OYnomKENAKkcYub45P7cEaUGu5OxS/eszdTD4ENXL/aT8lbeUGXTuAnxtx tLjS94Eb9VfS6gJMCw1oAu74kLg6HYNyynrKhbAg1dCE1qth/A7SmMeRUVIHvczBKUp0 GEyw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771476223; x=1772081023; 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=4Y3M+5VjsNHKkkAg1phmnNAXCerwhP4zFaY5U6/fn0g=; b=IgmJDDKROmWCUXboxAy4JtDueWZZ2O82KVKfyd2EMcwBwK6oXNLp7uM+ixdGMFKRxN yRRXtiOUbW1khgTM6VPHso5ayDoBbZnDP84ot0Nmsu2Ir+y4f+IxyXEJ9Avv/sB0/bsl Iiqo7jQhwijRyu3mlccRVK+Epvx1iqP5LsEkg20PGW9N/JjITbXnRfSjoC+ii8fJNEHp Du06G24JKLsXBYs2PvwoyyjmPYnF2yzhiZYbyE9VJ8aw5RnpQxyLV97mJYiGCB1KUWBm +bcE1w3bgZephjzsBwaWOOe/tRWXa47ogabGaVEYAEljBBNErT7pPoS1epL3wQ+tCSCO dhgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771476223; x=1772081023; 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=4Y3M+5VjsNHKkkAg1phmnNAXCerwhP4zFaY5U6/fn0g=; b=mPcazUp5roxfyu2zPMIgCQkwRi713HgrDXUk7gRNxs7lOnsQP7Jg/GiiN5hrwJZzGA C7pepWIijC2nUonR8fPri789w3OuX/oeJaWHm91uv7S3dhayd4cl6ROgSH/sxjFjgelw HiwbMfPF0f3Q7LyGYPL2y9UI1qiMCK354VFzMoKE+O6julbXE4bmU5YiTCvnbi0bZRCB EaE0pR5w8MrqDZe3Xrsy6iodHYsodUvghyef5HpwoLyTUw9lVWj/BxpZaCRvi3XRtwU+ wNA21RbAf49/3OkTCDen/TFWfQBY72Uv9TgzPbcCLf9UhSYckR4zhqTjqHgbTMLep/iu H3ZA== X-Forwarded-Encrypted: i=1; AJvYcCVN0PcsvZR0aCfiwW0AZJP58NiHPKWaM2xzTEDR7VvsZ2BSjQYiIvUcgFrIbpAkyZ8O7nWwxdClDCZpzaW2@lists.postgresql.org X-Gm-Message-State: AOJu0Yxne/eWQgkkLV9N8WmiLv/KISkwWXapDbK7VBOWCkgoSO9hBs+K j/VUqa0iEj+GPn/WlmPP5O0cBXxazYIOKzQ9jMDpJppiTU+YK6UCumnKwFqtxkmDyippntVxW9T 9NmneDqYUylhmiCoKWSmlHqlDn+zHOJ0= X-Gm-Gg: AZuq6aJCvnCAyt46+nj1NAneP9FT/fbGgQcU/KuCCr36jXiyUB0kYDUR645mFky30gb MoaXWA83SLhO0fkceNfn8wxRDHRIoTjTaTBn9dfgiCp80PeGeCvOpfS2uFEHtDSGfyN+4SWFVVt 746fjDY5LsR9MLofU6R4EPxqH5IrKhukA3e369vAF9+J+/cnWThGmf9ypa4gFGUCmJk/pBj6iLe tZ0QKcTKGsWUHhNSMTeH+SmFhhBs+WyPOFhpcuMfr3FkNCNz2H4JogNVXlsTTMxd2QiWiDzwiWy Ks1nK7B8Qh7A1bQ0dg== X-Received: by 2002:a05:6820:4887:b0:679:9353:120d with SMTP id 006d021491bc7-679a71e1c50mr2066407eaf.31.1771476222590; Wed, 18 Feb 2026 20:43:42 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Shlok Kyal Date: Thu, 19 Feb 2026 10:13:30 +0530 X-Gm-Features: AaiRm52vMa1PRgB4JUCd1ofUqy44Q5hveMfEoQG0qObP_fS2fIdEDA58Qa-NAEQ Message-ID: Subject: Re: Skipping schema changes in publication To: shveta malik Cc: vignesh C , "David G. Johnston" , Dilip Kumar , Amit Kapila , Peter Smith , "Zhijie Hou (Fujitsu)" , YeXiu <1518981153@qq.com>, Ian Lawrence Barwick , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000fa0109064b25f23a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fa0109064b25f23a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 17 Feb 2026 at 17:08, shveta malik wrote: > > On Tue, Feb 17, 2026 at 12:01=E2=80=AFPM shveta malik wrote: > > > > On Tue, Feb 17, 2026 at 11:13=E2=80=AFAM vignesh C wrote: > > > > > > Thanks for the comments. The attached v45 version patch has the > > > changes for the same. > > > > > > > Thanks Vignesh, please find a few comments from v44 itself. Please > > ignore if already addressed. Will switch to v45 now. > > > > > > 1) > > publication_has_any_exception: > > + ScanKeyInit(&skey, > > + Anum_pg_publication_rel_prpubid, > > + BTEqualStrategyNumber, F_OIDEQ, > > + ObjectIdGetDatum(pubid)); > > + > > + scan =3D systable_beginscan(pubRel, > > + PublicationRelPrrelidPrpubidIndexId, > > + true, NULL, 1, &skey); > > > > PublicationRelPrrelidPrpubidIndexId is index on relid and pubid, I > > don't think it will be used in this case where we have only pubid key. > > Shall we use PublicationRelPrpubidIndexId instead? > > > > 2) > > +/* > > + * is_relid_published_explicitly > > + * > > + * Checks if the given relation OID is explicitly part of the publicat= ion. > > + * This corresponds to the 'FOR TABLE' syntax. > > + */ > > +static bool > > +is_relid_published_explicitly(Oid relid, Oid pubid) > > +{ > > + /* > > + * Search the syscache for pg_publication_rel using the (relid, pubid) > > + * index. > > + */ > > + return SearchSysCacheExists2(PUBLICATIONRELMAP, > > + ObjectIdGetDatum(relid), > > + ObjectIdGetDatum(pubid)); > > +} > > > > How are we ensuring that it is not fetching the one with except-flag > > as true? Shall we assert when pub is all-tables to rule out that > > case/mistake? Or if we code-flow is expected to come to this function > > even for 'all-tables' pub (it appears to me t by looking at the > > caller), we shall return in such a case instead of Assert. > > > > > > 3) > > Shall we rename these: > > 'is_relid_published_as_except' as 'is_relid_excepted'. > > 'is_relid_published_as_except_with_ancestors' as 'is_relid_or_ancestor_= excepted' > > > > These will be to match tones of: > > is_schema_published > > is_relid_published_explicitly > > > > I feel even for 'is_relid_published_explicitly', we can simply say > > 'is_relid_published'. Comments (and assert/checks) can explain that it > > is for FOR-TABLE pub. > > > > 4) > > + List *except_leaves =3D NIL; > > + List *allowed_leaves =3D NIL; > > > > Similar to allowed_leaves, shall we have excepted_leaves instead of > > except_leaves? > > > > 5) > > pg_get_publication_effective_tables(): > > > > + > > + /* > > + * Check whether the table itself or its schema is > > + * included in this publication. > > + */ > > + if (is_relid_published_explicitly(curr_relid, pubid) || > > + is_schema_published(get_rel_namespace(curr_relid), pubid)) > > + { > > + allowed_leaves =3D lappend_oid(allowed_leaves, curr_relid); > > + } > > + else > > + { > > + List *ancestors =3D get_partition_ancestors(curr_relid); > > + > > + /* > > + * Check whether any ancestor, or its schema, is > > + * included in this publication. > > + */ > > + foreach_oid(anc_oid, ancestors) > > + { > > + if (is_relid_published_explicitly(anc_oid, pubid) || > > + is_schema_published(get_rel_namespace(anc_oid), pubid)) > > + allowed_leaves =3D lappend_oid(allowed_leaves, curr_relid); > > + } > > + } > > > > Do you think we can convert this code part to > > is_relid_or_ancestor_published(), similar to > > is_relid_published_as_except_with_ancestors()? > > > > is_relid_or_ancestor_published() can check both pg_publication_rel and > > pg_publication_namespace. I do not see individual use-case scenarios > > for is_relid_published_explicitly() and is_schema_published() and thus > > it is better to club these in one function. So at the end we will be > > left with 2 such functions: > > > > is_relid_or_ancestor_published > > is_relid_or_ancestor_excepted/excluded (choose the name based on > > others comments too) > > > > A few more: > > 6) > postgres=3D# CREATE PUBLICATION pub4 for ALL TABLES EXCEPT TABLE (tab1); > ERROR: cannot add relation "tab1" to publication > DETAIL: This operation is not supported for temporary tables. > > postgres=3D# CREATE PUBLICATION pub4 for ALL TABLES EXCEPT TABLE (tab2); > ERROR: cannot add relation "tab2" to publication > DETAIL: This operation is not supported for unlogged tables. > > Shall we change the error message here as we are not trying to add > relation here. > Based on the discussion in [1]. We are still analysing this change. Will address it in the next version of patch. > 7) > Currently the error i s: > > postgres=3D# create subscription sub1 connection '...' publication pub1,p= ub2,pub3; > ERROR: publications "pub1", "pub2", "pub3" are defined with EXCEPT TABLE > HINT: Subscription cannot be created using multiple publications that > specify EXCEPT TABLE. > > Hint looks more like DETAIL. Shall we have this: > > ERROR: cannot create subscription with multiple publications that > specify EXCEPT TABLE > DETAIL: The publications "pub1", "pub2", and "pub3" define EXCEPT > TABLE clauses. > Modified it as per Amit's suggestion in [2]. > 8) > pg_get_publication_effective_tables(): > > + /* Return root immediately if no filtering logic is needed */ > + if (has_clean_all_tables_pub || !has_any_except) > > I think we do not need any additional boolean 'has_any_except' for > this purpose. We can simply rely on 'except_pub_names' being Nil. > > 9) > + /* Return root immediately if no filtering logic is needed */ > + if (has_clean_all_tables_pub || !has_any_except) > + { > + oldcontext =3D MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); > + final_output =3D list_make1_oid(root_relid); > + MemoryContextSwitchTo(oldcontext); > + } > + else > > Can we please write a comment atop 'else' block to say what it is > going to attempt? This is because there is a big chunk of code in > 'else' block and it is difficult to construct our logic by reading > each part of it. > > 10) > CreatePublication() has changed the way we process publications. > Earlier, we had explicit checks for publication types such as > 'for_all_tables' and 'for_all_sequences' etc, which made the code > easier to follow. That differentiation based on publication type is no > longer there. As an example, > we now invoke functions like TransformPubWhereClauses() and > CheckPubRelationColumnList() even for FOR ALL TABLES ... EXCEPT > publications, which are not needed. We could consider restoring the > previous structure, where logic was clearly separated based on > publication type. > Thanks for reviewing the patch. I have addressed the remaining comments in the v46 patch.. [1]: https://www.postgresql.org/message-id/CAA4eK1J%3D41eienWGzgAnB_-fAGjZd= B2daP_N%3D84NSm1QT56YVQ%40mail.gmail.com [2]: https://www.postgresql.org/message-id/CAA4eK1KWqttt3UMdR8P0wYyqDO6cuLh= uvGb5cDpuctG8F10EFA%40mail.gmail.com Thanks, Shlok Kyal --000000000000fa0109064b25f23a Content-Type: application/octet-stream; name="v46-0002-Extended-tests-for-EXCEPT-TABLE-patch.patch" Content-Disposition: attachment; filename="v46-0002-Extended-tests-for-EXCEPT-TABLE-patch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlsz5oct1 RnJvbSAwMGE5NTZjYmNkNjRmMTY0Yjg1MGRjZjkxNzcwNWQzYzlkYTUyOGExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNCBGZWIgMjAyNiAxMjoyNzo1NyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjQ2 IDIvMl0gRXh0ZW5kZWQgdGVzdHMgZm9yIEVYQ0VQVCBUQUJMRSBwYXRjaAoKVGhpcyBwYXRjaCBj b250YWlucyBleHRyYSB0ZXN0cyBmb3IgRVhDRVBUIFRBQkxFIHBhdGNoLiBQdXJwb3NlIG9mIHRo aXMKdGVzdHMgdG8ga2VlcCB0cmFjayBvZiB0ZXN0cyB3aGljaCBvbmNlIGJyb2tlIHRoZSBwYXRj aC4KCkJhc2VkIG9uIGRpc2N1c3Npb24gaW4gZnV0dXJlIHdlIG1heSBwaWNrIHVwIHNvbWUgdGVz dCB0byBpbmNsdWRlIGluCnRoZSBtYWluIHBhdGNoLgotLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzEwMV90ZXN0LnBsIHwgMTM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmls ZSBjaGFuZ2VkLCAxMzYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzEwMV90ZXN0LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMTAxX3Rlc3QucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8xMDFfdGVzdC5w bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmU0ZGZjM2E3MTMKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8xMDFfdGVzdC5wbApAQCAt MCwwICsxLDEzNiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisjCisjIEV4dGVuZGVkIHRlc3QgZm9yIEVYQ0VQVCBUQUJMRQorCit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0 OjpNb3JlOworCisjIC0tLS0tLS0tCisjIFB1Ymxpc2hlcgorIyAtLS0tLS0tLQorbXkgJHB1Ymxp c2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiskcHVi bGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRwdWJsaXNoZXIt PmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxKAord2FsX2xldmVsID0gbG9naWNh bAorbG9nX21pbl9tZXNzYWdlcyA9IElORk8KK2xvZ19zdGF0ZW1lbnQgPSBhbGwKK3dhbF9yZWNl aXZlcl90aW1lb3V0ID0gMAord2FsX3NlbmRlcl90aW1lb3V0ID0gMAorKSk7CiskcHVibGlzaGVy LT5zdGFydDsKKworIyBDcmVhdGUgYSBwYXJ0aXRpb24gc3RydWN0dXJlOgorIyBzYzEudDEKKyMg ICAtIHNjMS5jaGlsZDEKKyMgICAgICAgLSBzYzEuY2hpbGQxXzEKKyMgICAgICAgLSBzYzEuY2hp bGQxXzIKKyMgICAtIHNjMS5jaGlsZDIKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxKAorCUNSRUFURSBTQ0hFTUEgc2MxOworCUNSRUFURSBUQUJMRSBzYzEudDEoaWQgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworCUNSRUFURSBUQUJMRSBzYzEuY2hpbGQxKGlkIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKwlDUkVBVEUgVEFCTEUgc2MxLmNoaWxkMiBQQVJU SVRJT04gT0Ygc2MxLnQxIEZPUiBWQUxVRVMgRlJPTSAoMTAxKSBUTyAoMjAwKTsKKwlDUkVBVEUg VEFCTEUgc2MxLmNoaWxkMV8xIFBBUlRJVElPTiBPRiBzYzEuY2hpbGQxIEZPUiBWQUxVRVMgRlJP TSAoMCkgVE8gKDUwKTsKKwlDUkVBVEUgVEFCTEUgc2MxLmNoaWxkMV8yIFBBUlRJVElPTiBPRiBz YzEuY2hpbGQxIEZPUiBWQUxVRVMgRlJPTSAoNTEpIFRPICgxMDApOworCUFMVEVSIFRBQkxFIHNj MS50MSBBVFRBQ0ggUEFSVElUSU9OIHNjMS5jaGlsZDEgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MTAwKTsKKykpOworCisjIC0tLS0tLS0tLS0KKyMgU3Vic2NyaWJlcgorIyAtLS0tLS0tLS0tCitt eSAkY29ubnN0ciA9ICRwdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Citt eSAkc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJl cicpOworJHN1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwor JHN1YnNjcmliZXItPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxKAord2FsX2xl dmVsID0gbG9naWNhbAorbG9nX21pbl9tZXNzYWdlcyA9IElORk8KK2xvZ19zdGF0ZW1lbnQgPSBh bGwKK3dhbF9yZWNlaXZlcl90aW1lb3V0ID0gMAord2FsX3NlbmRlcl90aW1lb3V0ID0gMAorKSk7 Ciskc3Vic2NyaWJlci0+c3RhcnQ7CisKKyRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3Rn cmVzJywgcSgKKwlDUkVBVEUgU0NIRU1BIHNjMTsKKwlDUkVBVEUgVEFCTEUgc2MxLnQxKGlkIGlu dCk7CisJQ1JFQVRFIFRBQkxFIHNjMS5jaGlsZDEoaWQgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2Mx LmNoaWxkMV8xKGlkIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjMS5jaGlsZDFfMihpZCBpbnQpOwor CUNSRUFURSBUQUJMRSBzYzEuY2hpbGQyKGlkIGludCk7CispKTsKKworIyBUZXN0IDE6CisjIENy ZWF0ZSB0d28gcHVibGljYXRpb25zLCBvbmUgd2l0aCAiQUxMIFRBQkxFUyBFWENFUFQiLCBvdGhl ciB3aXRoICJGT1IgVEFCTEUiCisjIFRhYmxlcyBzcGVjaWZpZWQgaW4gIkVYQ0VQVCIgYW5kICJG T1IgVEFCTEUiIGFyZSBwYXJ0IG9mIHNhbWUgcGFydGl0aW9uIHRyZWUKKyRwdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCUlOU0VSVCBJTlRPIHNjMS50MSBWQUxVRVMgKDEp LCAoNTEpLCAoMTAxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUyBF WENFUFQgVEFCTEUgKHNjMS5jaGlsZDIpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZSk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFIHNjMS5jaGlsZDFf MSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7Ciskc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBD T05ORUNUSU9OICckY29ubnN0cicgUFVCTElDQVRJT04gcHViMSwgcHViMjsiKTsKKworIyBDaGVj ayBmb3IgdGFibGVzeW5jCiskc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMo JHB1Ymxpc2hlciwgJ3N1YjEnKTsKK215ICRyZXN1bHQgPQorICAkc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjMS50MSBPUkRFUiBCWSBpZCIpOworaXMo ICRyZXN1bHQsIHFxKDEKKzUxKSwgJ2NoZWNrIGRhdGEgYWZ0ZXIgdGFibGVzeW5jJyk7CisKKyMg Q2hlY2sgZm9yIGluY3JlbWVudGFsIHN5bmMKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyBzYzEudDEgVkFMVUVTICgxKSwgKDUxKSwgKDEwMSkiKTsKKyRz dWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVyLCAnc3ViMScp OworJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIEZST00gc2MxLnQxIE9SREVSIEJZIGlkIik7CitpcyggJHJlc3VsdCwgcXEoMQorMQorNTEK KzUxKSwgJ2NoZWNrIGRhdGEgYWZ0ZXIgaW5jcmVtZW50YWwgc3luYycpOworCisjIGNsZWFudXAK KyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCURST1AgUFVCTElDQVRJ T04gcHViMSwgcHViMjsKKwlUUlVOQ0FURSBzYzEudDE7CispKTsKKyRzdWJzY3JpYmVyLT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywgcSgKKwlEUk9QIFNVQlNDUklQVElPTiBzdWIxOworCVRSVU5D QVRFIHNjMS50MTsKKykpOworCisjIFRlc3QgMjogQ3JlYXRlIHB1YmxpY2F0aW9uIHdpdGggRVhD RVBUIFRBQkxFIGxpc3QgaGF2aW5nIGFsbCBwYXJ0aXRpb25zIG9mCisjIHBhcnRpY3VsYXIgbGV2 ZWwKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCUlOU0VSVCBJTlRP IHNjMS50MSBWQUxVRVMgKDEpLCAoNTEpLCAoMTAxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHVi MSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjMS5jaGlsZDIsIHNjMS5jaGlsZDEpIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CispKTsKKyRzdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIxIENPTk5F Q1RJT04gJyRjb25uc3RyJyBQVUJMSUNBVElPTiBwdWIxOyIpOworCisjIENoZWNrIGZvciB0YWJs ZXN5bmMKKyRzdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVy LCAnc3ViMScpOworJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCAqIEZST00gc2MxLnQxIE9SREVSIEJZIGlkIik7CitpcygkcmVzdWx0LCBxcSgp LCAnY2hlY2sgZGF0YSBhZnRlciB0YWJsZXN5bmMnKTsKKworIyBDaGVjayBmb3IgaW5jcmVtZW50 YWwgc3luYworJHB1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRP IHNjMS50MSBWQUxVRVMgKDEpLCAoNTEpLCAoMTAxKSIpOworJHN1YnNjcmliZXItPndhaXRfZm9y X3N1YnNjcmlwdGlvbl9zeW5jKCRwdWJsaXNoZXIsICdzdWIxJyk7CiskcmVzdWx0ID0KKyAgJHN1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzYzEudDEgT1JE RVIgQlkgaWQiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayBkYXRhIGFmdGVyIGluY3JlbWVu dGFsIHN5bmMnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --000000000000fa0109064b25f23a Content-Type: application/octet-stream; name="v46-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Disposition: attachment; filename="v46-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlsz5oca0 RnJvbSBmNzBmODUyMjk4NTcwZTMyNzI1YTBhMDdkMWE3ZTM4ZmUzNjQ3ZjdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjggSmFuIDIwMjYgMTA6NDc6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIHY0NiAxLzJd IFNraXAgcHVibGlzaGluZyB0aGUgdGFibGVzIHNwZWNpZmllZCBpbiBFWENFUFQgVEFCTEUuCgpB IG5ldyAiRVhDRVBUIFRBQkxFIiBjbGF1c2UgZm9yIENSRUFURSBQVUJMSUNBVElPTiBhbGxvd3Mg b25lIG9yIG1vcmUKdGFibGVzIHRvIGJlIGV4Y2x1ZGVkLiBUaGUgcHVibGlzaGVyIHdpbGwgbm90 IHNlbmQgdGhlIGRhdGEgb2YgZXhjbHVkZWQKdGFibGVzIHRvIHRoZSBzdWJzY3JpYmVyLgoKVGhl IG5ldyBzeW50YXggYWxsb3dzIHNwZWNpZnlpbmcgZXhjbHVkZWQgcmVsYXRpb25zIHdoZW4gY3Jl YXRpbmcgYQpwdWJsaWNhdGlvbi4gRm9yIGV4YW1wbGU6CkNSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodDEsdDIpOwoKQSBuZXcgY29sdW1uICJwcmV4 Y2VwdCIgaXMgYWRkZWQgdG8gdGFibGUgInBnX3B1YmxpY2F0aW9uX3JlbCIsIHRvIGZsYWcKdGhl IHJlbGF0aW9ucyB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcHVibGlj YXRpb25zLgoKRm9yIEVYQ0VQVCBUQUJMRSBvbiBwYXJ0aXRpb24gdGFibGVzLCBleHRlbmRlZCBm ZXRjaF9yZW1vdGVfdGFibGVfaW5mbygpIHRvCmNvbXB1dGUgdGhlIGVmZmVjdGl2ZSBzZXQgb2Yg cmVsYXRpb25zIHVzZWQgZm9yIHRoZSBpbml0aWFsIENPUFkuIFdoZW4KZXhjbHVzaW9ucyBhcmUg cHJlc2VudCwgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgY2FuIG5vIGxvbmdlciBiZSB1c2Vk CmRpcmVjdGx5OyBpbnN0ZWFkLCBkZXJpdmUgdGhlIGxpc3Qgb2Ygbm9uLWV4Y2x1ZGVkIGxlYWYg cGFydGl0aW9ucyBhbmQKY29tYmluZSB0aGVtIHdpdGggVU5JT04gQUxMLiBXaGVuIG5vIGV4Y2x1 c2lvbnMgZXhpc3QsIHJldGFpbiB0aGUgZXhpc3RpbmcKYmVoYXZpb3IgYW5kIGNvcHkgZnJvbSB0 aGUgcm9vdCByZWxhdGlvbiBhcyBiZWZvcmUuCkFsc28gdXBkYXRlZCB0aGUgYmVoYXZpb3VyIG9m IGluY3JlbWVudGFsIHN5bmMgZm9yIHBhcnRpdGlvbiB0YWJsZXMgYXMKcGVyIGFwcHJvYWNoIDEu CkFwcHJvYWNoIDEgaXMgZGlzY3Vzc2VkIGF0OgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkL0NBSnB5MHVEODFIUnJNWXI3Uy02QVY0VzJQdGJHS00tbmYyRDg5enNvTUhKOWpa c3NVZ0BtYWlsLmdtYWlsLmNvbQoKQ3JlYXRpb24gb2Ygc3Vic2NyaXB0aW9uIG9uIG11bHRpcGxl IHB1YmxpY2F0aW9ucyB3aXRoIEVYQ0VQVCBjbGF1c2UgaXMKbm90IHN1cHBvcnRlZCBieSB0aGlz IHBhdGNoLgoKcGdfZHVtcCBpcyB1cGRhdGVkIGZvciB0aGUgbmV3IEVYQ0VQVCBUQUJMRSBzeW50 YXguCgpUaGUgcHNxbCBcZCBmYW1pbHkgb2YgY29tbWFuZHMgY2FuIG5vdyBkaXNwbGF5IGV4Y2x1 ZGVkIHRhYmxlcy4KCkJ1bXAgY2F0YWxvZyB2ZXJzaW9uLgotLS0KIGRvYy9zcmMvc2dtbC9jYXRh bG9ncy5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAxMCArCiBkb2Mvc3JjL3NnbWwvbG9naWNh bC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAgfCAgIDYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3B1YmxpY2F0aW9uLnNnbWwgICAgICB8ICA1OSArLQogZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmMgICAgICAgICAgfCA2MzAgKysrKysrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgfCAgNTMgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAgICAgICB8IDExMCArKysKIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgICAgICAgICAgIHwgIDQxICstCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jICAgfCAxNDggKysrLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgIHwgMjAyICsrKysrLQogc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgfCAgNjggKysKIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmggICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgICAgICAgICAgfCAgMzAgKwogc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDg3ICsrLQogc3JjL2Jpbi9wc3Fs L3RhYi1jb21wbGV0ZS5pbi5jICAgICAgICAgICAgICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDcgKwogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgIDE5ICstCiBzcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMv cGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAgIDYgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQgICAgIHwgMTI4ICsrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3B1YmxpY2F0aW9uLnNxbCAgICAgICAgICB8ICA2MCArLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICAxICsKIC4uLi90LzAzN19yZXBfY2hhbmdlc19l eGNlcHRfdGFibGUucGwgICAgICAgICB8IDM2MiArKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogMjcgZmlsZXMgY2hhbmdlZCwg MTk2MSBpbnNlcnRpb25zKCspLCAxMTYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJsZS5wbAoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Nh dGFsb2dzLnNnbWwKaW5kZXggMzMyMTkzNTY1ZTIuLjYwMGZlZDlmNGMwIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dt bApAQCAtNjU3Miw2ICs2NTcyLDE2IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtp dGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAgICAgICA8 L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSBy b2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+ CisgICAgICA8c3RydWN0ZmllbGQ+cHJleGNlcHQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5ib29sPC90 eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVHJ1ZSBpZiB0aGUgdGFi bGUgaXMgZXhjbHVkZWQgZnJvbSB0aGUgcHVibGljYXRpb24uIFNlZQorICAgICAgIDxsaW5rIGxp bmtlbmQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbi1wYXJhbXMtZm9yLWV4Y2VwdC10YWJsZSI+PGxp dGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFsPjwvbGluaz4uCisgICAgICA8L3BhcmE+PC9lbnRy eT4KKyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9n X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CiAgICAgICA8c3Ry dWN0ZmllbGQ+cHJxdWFsPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+cGdfbm9kZV90cmVlPC90eXBlPgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCBiL2RvYy9z cmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKaW5kZXggNTAyOGZlOWFmMDkuLmJjYjQ3 M2MwNzhiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTExNiw3ICsx MTYsMTEgQEAKICAgIDxsaXRlcmFsPkZPUiBUQUJMRVMgSU4gU0NIRU1BPC9saXRlcmFsPiwgPGxp dGVyYWw+Rk9SIEFMTCBUQUJMRVM8L2xpdGVyYWw+LAogICAgb3IgPGxpdGVyYWw+Rk9SIEFMTCBT RVFVRU5DRVM8L2xpdGVyYWw+LiBVbmxpa2UgdGFibGVzLCBzZXF1ZW5jZXMgY2FuIGJlCiAgICBz eW5jaHJvbml6ZWQgYXQgYW55IHRpbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKLSAgIDx4 cmVmIGxpbmtlbmQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tc2VxdWVuY2VzIi8+LgorICAgPHhyZWYg bGlua2VuZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1zZXF1ZW5jZXMiLz4uIFdoZW4gYSBwdWJsaWNh dGlvbiBpcworICAgY3JlYXRlZCB3aXRoIDxsaXRlcmFsPkZPUiBBTEwgVEFCTEVTPC9saXRlcmFs PiwgYSB0YWJsZSBvciBzZXQgb2YgdGFibGVzIGNhbgorICAgYmUgZXhwbGljaXRseSBleGNsdWRl ZCBmcm9tIHB1YmxpY2F0aW9uIHVzaW5nIHRoZQorICAgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0 ZXB1YmxpY2F0aW9uLXBhcmFtcy1mb3ItZXhjZXB0LXRhYmxlIj48bGl0ZXJhbD5FWENFUFQgVEFC TEU8L2xpdGVyYWw+PC9saW5rPgorICAgY2xhdXNlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAppbmRleCA2ZWZiYjkxNWNlYy4u NDM2ZTdkNjk0YTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0 aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbApA QCAtMzIsMTIgKzMyLDE2IEBAIENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9hbGxfb2JqZWN0PC9yZXBsYWNlYWJsZT4g aXMgb25lIG9mOjwvcGhyYXNlPgogCi0gICAgQUxMIFRBQkxFUworICAgIEFMTCBUQUJMRVMgWyBF WENFUFQgWyBUQUJMRSBdICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4Y2VwdF90 YWJsZV9vYmplY3Q8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApIF0KICAgICBBTEwgU0VRVUVOQ0VT CiAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9hbmRf Y29sdW1uczwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgogCiAgICAgWyBPTkxZIF0gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBb ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJs ZT4gWywgLi4uIF0gKSBdIFsgV0hFUkUgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgXQorCis8cGhyYXNlPmFuZCA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+ZXhjZXB0X3RhYmxlX29iamVjdDwvcmVwbGFjZWFibGU+IGlzOjwv cGhyYXNlPgorCisgICAgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRh YmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXQogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lz ZGl2PgogCkBAIC0xNjQsNyArMTY4LDggQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KICAgICA8bGlzdGl0ZW0+CiAg ICAgIDxwYXJhPgogICAgICAgTWFya3MgdGhlIHB1YmxpY2F0aW9uIGFzIG9uZSB0aGF0IHJlcGxp Y2F0ZXMgY2hhbmdlcyBmb3IgYWxsIHRhYmxlcyBpbgotICAgICAgdGhlIGRhdGFiYXNlLCBpbmNs dWRpbmcgdGFibGVzIGNyZWF0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgIHRoZSBkYXRhYmFzZSwg aW5jbHVkaW5nIHRhYmxlcyBjcmVhdGVkIGluIHRoZSBmdXR1cmUuIFRhYmxlcyBsaXN0ZWQgaW4K KyAgICAgIEVYQ0VQVCBUQUJMRSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgcHVibGljYXRpb24uCiAg ICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CkBAIC0xODQs NiArMTg5LDM5IEBAIENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVu dHJ5PgogCisgICA8dmFybGlzdGVudHJ5IGlkPSJzcWwtY3JlYXRlcHVibGljYXRpb24tcGFyYW1z LWZvci1leGNlcHQtdGFibGUiPgorICAgIDx0ZXJtPjxsaXRlcmFsPkVYQ0VQVCBUQUJMRTwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoaXMgY2xh dXNlIHNwZWNpZmllcyBhIGxpc3Qgb2YgdGFibGVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCisg ICAgICBwdWJsaWNhdGlvbi4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIEZvciBp bmhlcml0ZWQgdGFibGVzLCBpZiA8bGl0ZXJhbD5PTkxZPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQg YmVmb3JlIHRoZQorICAgICAgdGFibGUgbmFtZSwgb25seSB0aGF0IHRhYmxlIGlzIGV4Y2x1ZGVk IGZyb20gdGhlIHB1YmxpY2F0aW9uLiBJZgorICAgICAgPGxpdGVyYWw+T05MWTwvbGl0ZXJhbD4g aXMgbm90IHNwZWNpZmllZCwgdGhlIHRhYmxlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnQKKyAgICAg IHRhYmxlcyAoaWYgYW55KSBhcmUgZXhjbHVkZWQuIE9wdGlvbmFsbHksIDxsaXRlcmFsPio8L2xp dGVyYWw+IGNhbiBiZQorICAgICAgc3BlY2lmaWVkIGFmdGVyIHRoZSB0YWJsZSBuYW1lIHRvIGV4 cGxpY2l0bHkgaW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50CisgICAgICB0YWJsZXMgYXJlIGV4Y2x1 ZGVkLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgRm9yIHBhcnRpdGlvbmVkIHRh YmxlcywgaWYgYSB0YWJsZSBpcyBzcGVjaWZpZWQgaW4gRVhDRVBUIFRBQkxFLCB0aGF0CisgICAg ICB0YWJsZSBhbmQgYWxsIG9mIGl0cyBwYXJ0aXRpb25zICh0aGF0IGlzLCB0aGUgZW50aXJlIHBh cnRpdGlvbiBzdWJ0cmVlCisgICAgICByb290ZWQgYXQgdGhhdCB0YWJsZSkgYXJlIGV4Y2x1ZGVk IGZyb20gdGhlIHB1YmxpY2F0aW9uLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAg VGhlcmUgY2FuIGJlIGEgY2FzZSB3aGVyZSBhIHN1YnNjcmlwdGlvbiBpbmNsdWRlcyBtdWx0aXBs ZSBwdWJsaWNhdGlvbnMuCisgICAgICBJbiBzdWNoIGEgY2FzZSwgYSB0YWJsZSBvciBwYXJ0aXRp b24gdGhhdCBpcyBpbmNsdWRlZCBpbiBvbmUgcHVibGljYXRpb24KKyAgICAgIGFuZCBsaXN0ZWQg aW4gdGhlIDxsaXRlcmFsPkVYQ0VQVCBUQUJMRTwvbGl0ZXJhbD4gY2xhdXNlIG9mIGFub3RoZXIg aXMKKyAgICAgIGNvbnNpZGVyZWQgaW5jbHVkZWQgZm9yIHJlcGxpY2F0aW9uLgorICAgICA8L3Bh cmE+CisgICAgIDxwYXJhPgorICAgICAgU3Vic2NyaWJpbmcgdG8gbXVsdGlwbGUgcHVibGljYXRp b25zIHdpdGggZGlmZmVyZW50CisgICAgICA8bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVyYWw+ IGxpc3RzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVudHJ5IGlkPSJzcWwt Y3JlYXRlcHVibGljYXRpb24tcGFyYW1zLXdpdGgiPgogICAgIDx0ZXJtPjxsaXRlcmFsPldJVEgg KCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fcGFyYW1ldGVyPC9y ZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnZhbHVlPC9yZXBs YWNlYWJsZT5dIFssIC4uLiBdICk8L2xpdGVyYWw+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KQEAg LTQ4OSw2ICs1MjcsMjMgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIGFsbF9zZXF1ZW5jZXMgRk9SIEFM TCBTRVFVRU5DRVM7CiAgICBhbGwgc2VxdWVuY2VzIGZvciBzeW5jaHJvbml6YXRpb246CiA8cHJv Z3JhbWxpc3Rpbmc+CiBDUkVBVEUgUFVCTElDQVRJT04gYWxsX3RhYmxlc19zZXF1ZW5jZXMgRk9S IEFMTCBUQUJMRVMsIEFMTCBTRVFVRU5DRVM7Cis8L3Byb2dyYW1saXN0aW5nPgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBDcmVhdGUgYSBwdWJsaWNhdGlvbiB0aGF0IHB1Ymxpc2hlcyBhbGwg Y2hhbmdlcyBpbiBhbGwgdGFibGVzIGV4Y2VwdAorICAgPHN0cnVjdG5hbWU+dXNlcnM8L3N0cnVj dG5hbWU+IGFuZCA8c3RydWN0bmFtZT5kZXBhcnRtZW50czwvc3RydWN0bmFtZT46Cis8cHJvZ3Jh bWxpc3Rpbmc+CitDUkVBVEUgUFVCTElDQVRJT04gYWxsX3RhYmxlc19leGNlcHQgRk9SIEFMTCBU QUJMRVMgRVhDRVBUICh1c2VycywgZGVwYXJ0bWVudHMpOworPC9wcm9ncmFtbGlzdGluZz4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgQ3JlYXRlIGEgcHVibGljYXRpb24gdGhhdCBwdWJsaXNo ZXMgYWxsIHNlcXVlbmNlcyBmb3Igc3luY2hyb25pemF0aW9uLCBhbmQKKyAgIGFsbCBjaGFuZ2Vz IGluIGFsbCB0YWJsZXMgZXhjZXB0IDxzdHJ1Y3RuYW1lPnVzZXJzPC9zdHJ1Y3RuYW1lPiBhbmQK KyAgIDxzdHJ1Y3RuYW1lPmRlcGFydG1lbnRzPC9zdHJ1Y3RuYW1lPjoKKzxwcm9ncmFtbGlzdGlu Zz4KK0NSRUFURSBQVUJMSUNBVElPTiBhbGxfc2VxdWVuY2VzX3RhYmxlc19leGNlcHQgRk9SIEFM TCBTRVFVRU5DRVMsIEFMTCBUQUJMRVMgRVhDRVBUICh1c2VycywgZGVwYXJ0bWVudHMpOwogPC9w cm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgogIDwvcmVmc2VjdDE+CmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNn bWwKaW5kZXggOGIxZDk0OGJhMDUuLjEwNDViYzZhMDJjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvcmVmL3BzcWwtcmVmLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21s CkBAIC0yMTAzLDggKzIxMDMsOSBAQCBTRUxFQ1QgJDEgXHBhcnNlIHN0bXQxCiAgICAgICAgIGxp c3RlZC4KICAgICAgICAgSWYgPGxpdGVyYWw+eDwvbGl0ZXJhbD4gaXMgYXBwZW5kZWQgdG8gdGhl IGNvbW1hbmQgbmFtZSwgdGhlIHJlc3VsdHMKICAgICAgICAgYXJlIGRpc3BsYXllZCBpbiBleHBh bmRlZCBtb2RlLgotICAgICAgICBJZiA8bGl0ZXJhbD4rPC9saXRlcmFsPiBpcyBhcHBlbmRlZCB0 byB0aGUgY29tbWFuZCBuYW1lLCB0aGUgdGFibGVzIGFuZAotICAgICAgICBzY2hlbWFzIGFzc29j aWF0ZWQgd2l0aCBlYWNoIHB1YmxpY2F0aW9uIGFyZSBzaG93biBhcyB3ZWxsLgorICAgICAgICBJ ZiA8bGl0ZXJhbD4rPC9saXRlcmFsPiBpcyBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCBuYW1lLCB0 aGUgdGFibGVzLAorICAgICAgICBleGNsdWRlZCB0YWJsZXMsIGFuZCBzY2hlbWFzIGFzc29jaWF0 ZWQgd2l0aCBlYWNoIHB1YmxpY2F0aW9uIGFyZSBzaG93bgorICAgICAgICBhcyB3ZWxsLgogICAg ICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA5YTQ3OTFjNTczZS4uZjcxYWQx ZTQ5ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwor KysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTI5LDYgKzI5LDcg QEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbl9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uX3JlbC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25j bWRzLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgpAQCAtMzY2LDkgKzM2NywxMSBAQCBHZXRUb3BN b3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKE9pZCBwdWJvaWQsIExpc3QgKmFuY2VzdG9ycywgaW50 ICphbmNlc3Rvcl9sZXZlbAogCWZvcmVhY2gobGMsIGFuY2VzdG9ycykKIAl7CiAJCU9pZAkJCWFu Y2VzdG9yID0gbGZpcnN0X29pZChsYyk7Ci0JCUxpc3QJICAgKmFwdWJpZHMgPSBHZXRSZWxhdGlv blB1YmxpY2F0aW9ucyhhbmNlc3Rvcik7CisJCUxpc3QJICAgKmFwdWJpZHMgPSBOSUw7CiAJCUxp c3QJICAgKmFzY2hlbWFQdWJpZHMgPSBOSUw7CiAKKwkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMo YW5jZXN0b3IsICZhcHViaWRzLCBOVUxMKTsKKwogCQlsZXZlbCsrOwogCiAJCWlmIChsaXN0X21l bWJlcl9vaWQoYXB1YmlkcywgcHVib2lkKSkKQEAgLTQ4Miw2ICs0ODUsOCBAQCBwdWJsaWNhdGlv bl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAkJT2Jq ZWN0SWRHZXREYXR1bShwdWJpZCk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3By cmVsaWQgLSAxXSA9CiAJCU9iamVjdElkR2V0RGF0dW0ocmVsaWQpOworCXZhbHVlc1tBbnVtX3Bn X3B1YmxpY2F0aW9uX3JlbF9wcmV4Y2VwdCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHByaS0+ZXhj ZXB0KTsKIAogCS8qIEFkZCBxdWFsaWZpY2F0aW9ucywgaWYgYXZhaWxhYmxlICovCiAJaWYgKHBy aS0+d2hlcmVDbGF1c2UgIT0gTlVMTCkKQEAgLTc0OSwzOCArNzU0LDU4IEBAIHB1YmxpY2F0aW9u X2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBPaWQgc2NoZW1haWQsIGJvb2wgaWZfbm90X2V4aXN0cykK IAlyZXR1cm4gbXlzZWxmOwogfQogCi0vKiBHZXRzIGxpc3Qgb2YgcHVibGljYXRpb24gb2lkcyBm b3IgYSByZWxhdGlvbiAqLwotTGlzdCAqCi1HZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVs aWQpCisvKgorICogR2V0IHRoZSBsaXN0IG9mIHB1YmxpY2F0aW9uIG9pZHMgYXNzb2NpYXRlZCB3 aXRoIGEgc3BlY2lmaWVkIHJlbGF0aW9uLgorICoKKyAqIFBhcmFtZXRlciAncHViaWRzJyByZXR1 cm5zIHRoZSBPaWRzIG9mIHRoZSBwdWJsaWNhdGlvbnMgdGhlIHJlbGF0aW9uIGlzIHBhcnQKKyAq IG9mLiBQYXJhbWV0ZXIgJ2V4Y2VwdF9wdWJpZHMnIHJldHVybnMgdGhlIE9pZHMgb2YgcHVibGlj YXRpb25zIHRoZSByZWxhdGlvbgorICogaXMgZXhjbHVkZWQgZnJvbS4KKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVsYXRpb24gaXMgcGFydCBvZiBhbnkgcHVibGlj YXRpb24uCisgKi8KK2Jvb2wKK0dldFJlbGF0aW9uUHVibGljYXRpb25zKE9pZCByZWxpZCwgTGlz dCAqKnB1YmlkcywgTGlzdCAqKmV4Y2VwdF9wdWJpZHMpCiB7Ci0JTGlzdAkgICAqcmVzdWx0ID0g TklMOwogCUNhdENMaXN0ICAgKnB1YnJlbGxpc3Q7Ci0JaW50CQkJaTsKKwlib29sCQlmb3VuZCA9 IGZhbHNlOwogCiAJLyogRmluZCBhbGwgcHVibGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUg cmVsYXRpb24uICovCiAJcHVicmVsbGlzdCA9IFNlYXJjaFN5c0NhY2hlTGlzdDEoUFVCTElDQVRJ T05SRUxNQVAsCiAJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShyZWxpZCkpOwotCWZvciAoaSA9 IDA7IGkgPCBwdWJyZWxsaXN0LT5uX21lbWJlcnM7IGkrKykKKwlmb3IgKGludCBpID0gMDsgaSA8 IHB1YnJlbGxpc3QtPm5fbWVtYmVyczsgaSsrKQogCXsKIAkJSGVhcFR1cGxlCXR1cCA9ICZwdWJy ZWxsaXN0LT5tZW1iZXJzW2ldLT50dXBsZTsKLQkJT2lkCQkJcHViaWQgPSAoKEZvcm1fcGdfcHVi bGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKSktPnBycHViaWQ7CisJCUZvcm1fcGdfcHVibGlj YXRpb25fcmVsIHB1YnJlbCA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1 cCk7CisJCU9pZAkJCXB1YmlkID0gcHVicmVsLT5wcnB1YmlkOwogCi0JCXJlc3VsdCA9IGxhcHBl bmRfb2lkKHJlc3VsdCwgcHViaWQpOworCQlpZiAocHVicmVsLT5wcmV4Y2VwdCkKKwkJeworCQkJ aWYgKGV4Y2VwdF9wdWJpZHMpCisJCQkJKmV4Y2VwdF9wdWJpZHMgPSBsYXBwZW5kX29pZCgqZXhj ZXB0X3B1YmlkcywgcHViaWQpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKHB1YmlkcykKKwkJ CQkqcHViaWRzID0gbGFwcGVuZF9vaWQoKnB1YmlkcywgcHViaWQpOworCQkJZm91bmQgPSB0cnVl OworCQl9CiAJfQogCiAJUmVsZWFzZVN5c0NhY2hlTGlzdChwdWJyZWxsaXN0KTsKIAotCXJldHVy biByZXN1bHQ7CisJcmV0dXJuIGZvdW5kOwogfQogCiAvKgotICogR2V0cyBsaXN0IG9mIHJlbGF0 aW9uIG9pZHMgZm9yIGEgcHVibGljYXRpb24uCisgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZXQg dGhlIGxpc3Qgb2YgcmVsYXRpb24gT2lkcyBmb3IgYSBwdWJsaWNhdGlvbi4KICAqCi0gKiBUaGlz IHNob3VsZCBvbmx5IGJlIHVzZWQgRk9SIFRBQkxFIHB1YmxpY2F0aW9ucywgdGhlIEZPUiBBTEwg VEFCTEVTL1NFUVVFTkNFUwotICogc2hvdWxkIHVzZSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9u cygpLgorICogSWYgZXhjZXB0X2ZsYWcgaXMgdHJ1ZSwgcmV0dXJucyB0aGUgbGlzdCBvZiByZWxh dGlvbnMgc3BlY2lmaWVkIGluIHRoZQorICogRVhDRVBUIGNsYXVzZSBvZiB0aGUgcHVibGljYXRp b247IG90aGVyd2lzZSwgcmV0dXJucyB0aGUgbGlzdCBvZiByZWxhdGlvbnMKKyAqIGluY2x1ZGVk IGluIHRoZSBwdWJsaWNhdGlvbi4KICAqLwotTGlzdCAqCi1HZXRQdWJsaWNhdGlvblJlbGF0aW9u cyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCkKK3N0YXRpYyBMaXN0 ICoKK2dldF9wdWJsaWNhdGlvbl9yZWxhdGlvbnMoT2lkIHB1YmlkLCBQdWJsaWNhdGlvblBhcnRP cHQgcHViX3BhcnRvcHQsCisJCQkJCQkgIGJvb2wgZXhjZXB0X2ZsYWcpCiB7CiAJTGlzdAkgICAq cmVzdWx0OwogCVJlbGF0aW9uCXB1YnJlbHNyZWw7CkBAIC04MDUsOCArODMwLDEwIEBAIEdldFB1 YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0 b3B0KQogCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCBwdWJyZWw7CiAKIAkJcHVicmVsID0gKEZv cm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKLQkJcmVzdWx0ID0gR2V0UHVi UGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKHJlc3VsdCwgcHViX3BhcnRvcHQsCi0JCQkJCQkJCQkJ CQlwdWJyZWwtPnBycmVsaWQpOworCisJCWlmIChleGNlcHRfZmxhZyA9PSBwdWJyZWwtPnByZXhj ZXB0KQorCQkJcmVzdWx0ID0gR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKHJlc3VsdCwg cHViX3BhcnRvcHQsCisJCQkJCQkJCQkJCQkJcHVicmVsLT5wcnJlbGlkKTsKIAl9CiAKIAlzeXN0 YWJsZV9lbmRzY2FuKHNjYW4pOwpAQCAtODE5LDYgKzg0NiwzNiBAQCBHZXRQdWJsaWNhdGlvblJl bGF0aW9ucyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCkKIAlyZXR1 cm4gcmVzdWx0OwogfQogCisvKgorICogUmV0dXJuIHRoZSBsaXN0IG9mIHJlbGF0aW9uIE9pZHMg Zm9yIGEgcHVibGljYXRpb24uCisgKgorICogRm9yIGEgRk9SIFRBQkxFIHB1YmxpY2F0aW9uLCB0 aGlzIHJldHVybnMgdGhlIGxpc3Qgb2YgcmVsYXRpb25zIGV4cGxpY2l0bHkKKyAqIGluY2x1ZGVk IGluIHRoZSBwdWJsaWNhdGlvbi4KKyAqCisgKiBQdWJsaWNhdGlvbnMgZGVjbGFyZWQgd2l0aCBG T1IgQUxMIFRBQkxFUy9TRVFVRU5DRVMgc2hvdWxkIHVzZQorICogR2V0QWxsUHVibGljYXRpb25S ZWxhdGlvbnMoKSB0byBvYnRhaW4gdGhlIGNvbXBsZXRlIHNldCBvZiB0YWJsZXMvc2VxdWVuY2Vz CisgKiBjb3ZlcmVkIGJ5IHRoZSBwdWJsaWNhdGlvbi4KKyAqLworTGlzdCAqCitHZXRJbmNsdWRl ZFJlbGF0aW9uc0J5UHViKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0 KQoreworCUFzc2VydCghR2V0UHVibGljYXRpb24ocHViaWQpLT5hbGx0YWJsZXMpOworCisJcmV0 dXJuIGdldF9wdWJsaWNhdGlvbl9yZWxhdGlvbnMocHViaWQsIHB1Yl9wYXJ0b3B0LCBmYWxzZSk7 Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgdGFibGVzIE9pZHMgZXhjbHVkZWQgZnJv bSBhIHB1YmxpY2F0aW9uLgorICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIEZPUiBBTEwg VEFCTEVTIHB1YmxpY2F0aW9ucy4KKyAqLworTGlzdCAqCitHZXRFeGNsdWRlZFRhYmxlc0J5UHVi KE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KQoreworCUFzc2VydChH ZXRQdWJsaWNhdGlvbihwdWJpZCktPmFsbHRhYmxlcyk7CisKKwlyZXR1cm4gZ2V0X3B1YmxpY2F0 aW9uX3JlbGF0aW9ucyhwdWJpZCwgcHViX3BhcnRvcHQsIHRydWUpOworfQorCiAvKgogICogR2V0 cyBsaXN0IG9mIHB1YmxpY2F0aW9uIG9pZHMgZm9yIHB1YmxpY2F0aW9ucyBtYXJrZWQgYXMgRk9S IEFMTCBUQUJMRVMuCiAgKi8KQEAgLTg1NiwyNiArOTEzLDc2IEBAIEdldEFsbFRhYmxlc1B1Ymxp Y2F0aW9ucyh2b2lkKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBSZXR1cm5zIHRydWUg aWYgdGhlIGdpdmVuIHBhcnRpdGlvbmVkIHRhYmxlIGlzIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVkCisg KiBieSB0aGUgRVhDRVBUIGxpc3QuCisgKgorICogQSByZWxhdGlvbiBpcyBjb25zaWRlcmVkIGV4 Y2x1ZGVkIGlmOgorICogIDEpIEl0IGlzIGV4cGxpY2l0bHkgcHJlc2VudCBpbiBleGNlcHRsaXN0 LCBvcgorICogIDIpIEFsbCBvZiBpdHMgbGVhZiBwYXJ0aXRpb25zIGFyZSBwcmVzZW50IGluIGV4 Y2VwdGxpc3QuCisgKi8KK3N0YXRpYyBib29sCityZWxhdGlvbl9pc19lZmZlY3RpdmVseV9leGNs dWRlZChPaWQgcmVsaWQsIExpc3QgKmV4Y2VwdGxpc3QpCit7CisJTGlzdAkgICAqbGVhZnRhYmxl cyA9IE5JTDsKKworCWlmIChleGNlcHRsaXN0ID09IE5JTCkKKwkJcmV0dXJuIGZhbHNlOworCisJ LyogRXhwbGljaXRseSBleGNsdWRlZCAqLworCWlmIChsaXN0X21lbWJlcl9vaWQoZXhjZXB0bGlz dCwgcmVsaWQpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIEdldCBhbGwgbGVhZiBwYXJ0aXRpb25z IG9mIHJlbGlkICovCisJbGVhZnRhYmxlcyA9IEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9u cyhsZWFmdGFibGVzLAorCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9MRUFGLAorCQkJCQkJ CQkJCQkJcmVsaWQpOworCisJLyoKKwkgKiBJZiBhbnkgbGVhZiBpcyBOT1QgcHJlc2VudCBpbiBl eGNlcHRsaXN0LCB0aGVuIHRoZSByZWxhdGlvbiBpcyBub3QKKwkgKiBmdWxseSBleGNsdWRlZC4K KwkgKi8KKwlmb3JlYWNoX29pZChsZWFmcmVsaWQsIGxlYWZ0YWJsZXMpCisJeworCQlpZiAoIWxp c3RfbWVtYmVyX29pZChleGNlcHRsaXN0LCBsZWFmcmVsaWQpKQorCQkJcmV0dXJuIGZhbHNlOwor CX0KKworCS8qIEFsbCBsZWF2ZXMgYXJlIGV4Y2x1ZGVkICovCisJcmV0dXJuIHRydWU7Cit9CisK IC8qCiAgKiBHZXRzIGxpc3Qgb2YgYWxsIHJlbGF0aW9ucyBwdWJsaXNoZWQgYnkgRk9SIEFMTCBU QUJMRVMvU0VRVUVOQ0VTCi0gKiBwdWJsaWNhdGlvbihzKS4KKyAqIHB1YmxpY2F0aW9uLgogICoK ICAqIElmIHRoZSBwdWJsaWNhdGlvbiBwdWJsaXNoZXMgcGFydGl0aW9uIGNoYW5nZXMgdmlhIHRo ZWlyIHJlc3BlY3RpdmUgcm9vdAogICogcGFydGl0aW9uZWQgdGFibGVzLCB3ZSBtdXN0IGV4Y2x1 ZGUgcGFydGl0aW9ucyBpbiBmYXZvciBvZiBpbmNsdWRpbmcgdGhlCiAgKiByb290IHBhcnRpdGlv bmVkIHRhYmxlcy4gVGhpcyBpcyBub3QgYXBwbGljYWJsZSB0byBGT1IgQUxMIFNFUVVFTkNFUwog ICogcHVibGljYXRpb24uCisgKgorICogRm9yIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24s IHRoZSByZXR1cm5lZCBsaXN0IGV4Y2x1ZGVzIHRhYmxlcyBtZW50aW9uZWQKKyAqIGluIEVYQ0VQ VCBUQUJMRSBjbGF1c2UuCiAgKi8KIExpc3QgKgotR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMo Y2hhciByZWxraW5kLCBib29sIHB1YnZpYXJvb3QpCitHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9u cyhQdWJsaWNhdGlvbiAqcHViLCBjaGFyIHJlbGtpbmQpCiB7CiAJUmVsYXRpb24JY2xhc3NSZWw7 CiAJU2NhbktleURhdGEga2V5WzFdOwogCVRhYmxlU2NhbkRlc2Mgc2NhbjsKIAlIZWFwVHVwbGUJ dHVwbGU7CiAJTGlzdAkgICAqcmVzdWx0ID0gTklMOworCUxpc3QJICAgKmV4Y2VwdGxpc3QgPSBO SUw7CisJYm9vbAkJcHVidmlhcm9vdCA9IHB1Yi0+cHVidmlhcm9vdDsKKwlPaWQJCQlwdWJpZCA9 IHB1Yi0+b2lkOwogCiAJQXNzZXJ0KCEocmVsa2luZCA9PSBSRUxLSU5EX1NFUVVFTkNFICYmIHB1 YnZpYXJvb3QpKTsKIAorCWlmIChyZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04pCisJCWV4Y2Vw dGxpc3QgPSBHZXRFeGNsdWRlZFRhYmxlc0J5UHViKHB1YmlkLCBwdWJ2aWFyb290ID8KKwkJCQkJ CQkJCQkJUFVCTElDQVRJT05fUEFSVF9BTEwgOgorCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJU X0xFQUYpOworCiAJY2xhc3NSZWwgPSB0YWJsZV9vcGVuKFJlbGF0aW9uUmVsYXRpb25JZCwgQWNj ZXNzU2hhcmVMb2NrKTsKIAogCVNjYW5LZXlJbml0KCZrZXlbMF0sCkBAIC04OTEsNyArOTk4LDgg QEAgR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoY2hhciByZWxraW5kLCBib29sIHB1YnZpYXJv b3QpCiAJCU9pZAkJCXJlbGlkID0gcmVsRm9ybS0+b2lkOwogCiAJCWlmIChpc19wdWJsaXNoYWJs ZV9jbGFzcyhyZWxpZCwgcmVsRm9ybSkgJiYKLQkJCSEocmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24g JiYgcHVidmlhcm9vdCkpCisJCQkhKHJlbEZvcm0tPnJlbGlzcGFydGl0aW9uICYmIHB1YnZpYXJv b3QpICYmCisJCQkhbGlzdF9tZW1iZXJfb2lkKGV4Y2VwdGxpc3QsIHJlbGlkKSkKIAkJCXJlc3Vs dCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcmVsaWQpOwogCX0KIApAQCAtOTEyLDcgKzEwMjAsOCBA QCBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9v dCkKIAkJCU9pZAkJCXJlbGlkID0gcmVsRm9ybS0+b2lkOwogCiAJCQlpZiAoaXNfcHVibGlzaGFi bGVfY2xhc3MocmVsaWQsIHJlbEZvcm0pICYmCi0JCQkJIXJlbEZvcm0tPnJlbGlzcGFydGl0aW9u KQorCQkJCSFyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbiAmJgorCQkJCSFyZWxhdGlvbl9pc19lZmZl Y3RpdmVseV9leGNsdWRlZChyZWxpZCwgZXhjZXB0bGlzdCkpCiAJCQkJcmVzdWx0ID0gbGFwcGVu ZF9vaWQocmVzdWx0LCByZWxpZCk7CiAJCX0KIApAQCAtMTExNiw2ICsxMjI1LDQ3MSBAQCBHZXRQ dWJsaWNhdGlvbkJ5TmFtZShjb25zdCBjaGFyICpwdWJuYW1lLCBib29sIG1pc3Npbmdfb2spCiAJ cmV0dXJuIE9pZElzVmFsaWQob2lkKSA/IEdldFB1YmxpY2F0aW9uKG9pZCkgOiBOVUxMOwogfQog CisvKiBIZWxwZXI6IENoZWNrIHN5c2NhY2hlIGZvciBwcmV4Y2VwdCBmbGFnICovCitib29sCitp c19yZWxpZF9leGNlcHRlZChPaWQgcmVsaWQsIE9pZCBwdWJpZCkKK3sKKwlIZWFwVHVwbGUJdHVw OworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCisJdHVwID0gU2VhcmNoU3lzQ2FjaGUyKFBVQkxJ Q0FUSU9OUkVMTUFQLCBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwgT2JqZWN0SWRHZXREYXR1bShw dWJpZCkpOworCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJeworCQlGb3JtX3BnX3B1Ymxp Y2F0aW9uX3JlbCBwcmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0 dXApOworCisJCXJlc3VsdCA9IHByZm9ybS0+cHJleGNlcHQ7CisJCVJlbGVhc2VTeXNDYWNoZSh0 dXApOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogcHVibGljYXRpb25faGFzX2Fu eV9leGNlcHRfdGFibGUKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHB1YmxpY2F0 aW9uIE9JRCBoYXMgYXQgbGVhc3Qgb25lIGVudHJ5IGluCisgKiBwZ19wdWJsaWNhdGlvbl9yZWwg bWFya2VkIGFzIGFuIGV4Y2VwdGlvbiAocHJleGNlcHQgPSB0cnVlKS4KKyAqLworYm9vbAorcHVi bGljYXRpb25faGFzX2FueV9leGNlcHRfdGFibGUoT2lkIHB1YmlkKQoreworCVJlbGF0aW9uCXB1 YnJlbHNyZWw7CisJU2NhbktleURhdGEgc2NhbmtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhl YXBUdXBsZQl0dXA7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCS8qIE9wZW4gcGdfcHVibGlj YXRpb25fcmVsIHdpdGggQWNjZXNzU2hhcmVMb2NrICovCisJcHVicmVsc3JlbCA9IHRhYmxlX29w ZW4oUHVibGljYXRpb25SZWxSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkg KiBMb29rIHVwIGJ5IHB1YmxpY2F0aW9uIE9JRC4gVXNpbmcgdGhlIGluZGV4IG9uIChwcnB1Ymlk KSBpcyBoaWdobHkKKwkgKiBlZmZpY2llbnQuCisJICovCisJU2NhbktleUluaXQoJnNjYW5rZXks CisJCQkJQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJwdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShwdWJpZCkpOworCisJc2Nh biA9IHN5c3RhYmxlX2JlZ2luc2NhbihwdWJyZWxzcmVsLAorCQkJCQkJCSAgUHVibGljYXRpb25S ZWxQcnB1YmlkSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZzY2Fua2V5KTsKKwor CS8qIFdlIG9ubHkgbmVlZCB0byBmaW5kIGFueSBvY2N1cnJlbmNlIG9mIHByZXhjZXB0ID0gdHJ1 ZSAqLworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nh bikpKQorCXsKKwkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgcHVicmVsOworCisJCXB1YnJlbCA9 IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1cCk7CisJCWlmIChwdWJyZWwt PnByZXhjZXB0KQorCQl7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwor CXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocHVicmVsc3JlbCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJldHVybiBmb3VuZDsKK30KKworLyoKKyAqIGlzX3JlbGlkX3B1Ymxp c2hlZAorICoKKyAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gT0lEIGlzIGV4cGxpY2l0 bHkgcGFydCBvZiB0aGUgcHVibGljYXRpb24uCisgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSAn Rk9SIFRBQkxFJyBzeW50YXguCisgKi8KK3N0YXRpYyBib29sCitpc19yZWxpZF9wdWJsaXNoZWQo T2lkIHJlbGlkLCBPaWQgcHViaWQpCit7CisJSGVhcFR1cGxlCXR1cDsKKwlib29sCQlyZXN1bHQg PSBmYWxzZTsKKworCS8qCisJICogU2VhcmNoIHRoZSBzeXNjYWNoZSBmb3IgcGdfcHVibGljYXRp b25fcmVsIHVzaW5nIHRoZSAocmVsaWQsIHB1YmlkKQorCSAqIGluZGV4LgorCSAqLworCXR1cCA9 IFNlYXJjaFN5c0NhY2hlMihQVUJMSUNBVElPTlJFTE1BUCwgT2JqZWN0SWRHZXREYXR1bShyZWxp ZCksCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKwlpZiAoSGVhcFR1cGxlSXNW YWxpZCh0dXApKQorCXsKKwkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgcHJmb3JtID0gKEZvcm1f cGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKKworCQlpZiAocHJmb3JtLT5wcmV4 Y2VwdCA9PSBmYWxzZSkKKwkJCXJlc3VsdCA9IHRydWU7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHR1 cCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGlzX3NjaGVtYV9wdWJsaXNo ZWQKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuIG5hbWVzcGFjZSBPSUQgaXMgcGFydCBvZiB0 aGUgcHVibGljYXRpb24ncworICogc2NoZW1hIGxpc3QuIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhl ICdGT1IgVEFCTEVTIElOIFNDSEVNQScgc3ludGF4LgorICovCitzdGF0aWMgYm9vbAoraXNfc2No ZW1hX3B1Ymxpc2hlZChPaWQgbnNwaWQsIE9pZCBwdWJpZCkKK3sKKwkvKgorCSAqIFNlYXJjaCB0 aGUgc3lzY2FjaGUgZm9yIHBnX3B1YmxpY2F0aW9uX25hbWVzcGFjZSB1c2luZyB0aGUgKG5zcGlk LAorCSAqIHB1YmlkKSBpbmRleC4KKwkgKi8KKwlyZXR1cm4gU2VhcmNoU3lzQ2FjaGVFeGlzdHMy KFBVQkxJQ0FUSU9OTkFNRVNQQUNFTUFQLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShuc3Bp ZCksCisJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7Cit9CisKKy8qCisgKiBpc19y ZWxpZF9vcl9hbmNlc3Rvcl9leGNlcHRlZAorICoKKyAqIENoZWNrIGlmIHRoZSByZWxhdGlvbiAn cmVsaWQnIG9yIGFueSBvZiBpdHMgcGFydGl0aW9uIGFuY2VzdG9ycyBhcmUKKyAqIGV4cGxpY2l0 bHkgc3BlY2lmaWVkIGluIHRoZSBFWENFUFQgY2xhdXNlIG9mIHRoZSBnaXZlbiBwdWJsaWNhdGlv bi4KKyAqLworc3RhdGljIGJvb2wKK2lzX3JlbGlkX29yX2FuY2VzdG9yX2V4Y2VwdGVkKE9pZCBy ZWxpZCwgT2lkIHB1YmlkKQoreworCUxpc3QJICAgKmFuY2VzdG9yczsKKwlMaXN0Q2VsbCAgICps YzsKKwlib29sCQlpbl9leGNlcHQgPSBmYWxzZTsKKworCS8qIENoZWNrIHRoZSByZWxhdGlvbiBp dHNlbGYgZmlyc3QgKi8KKwlpZiAoaXNfcmVsaWRfZXhjZXB0ZWQocmVsaWQsIHB1YmlkKSkKKwkJ cmV0dXJuIHRydWU7CisKKwkvKiBDaGVjayB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gKi8KKwlhbmNl c3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7CisKKwlmb3JlYWNoKGxjLCBh bmNlc3RvcnMpCisJeworCQlPaWQJCQlhbmNlc3RvciA9IGxmaXJzdF9vaWQobGMpOworCisJCWlm IChpc19yZWxpZF9leGNlcHRlZChhbmNlc3RvciwgcHViaWQpKQorCQl7CisJCQlpbl9leGNlcHQg PSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKwor CXJldHVybiBpbl9leGNlcHQ7Cit9CisKKy8qCisgKiBpc19yZWxpZF9vcl9hbmNlc3Rvcl9wdWJs aXNoZWQKKyAqCisgKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gdGFibGUgb3IgaXRzIHNjaGVtYSBv ciBhbnkgb2YgaXRzIHBhcnRpdGlvbiBhbmNlc3RvcnMsCisgKiBvciBpdHMgc2NoZW1hIGluY2x1 ZGVkIGluIHRoZSBzcGVjaWZpZWQgcHVibGljYXRpb24KKyAqLworc3RhdGljIGJvb2wKK2lzX3Jl bGlkX29yX2FuY2VzdG9yX3B1Ymxpc2hlZChPaWQgcmVsaWQsIE9pZCBwdWJpZCkKK3sKKwlpZiAo aXNfcmVsaWRfcHVibGlzaGVkKHJlbGlkLCBwdWJpZCkgfHwKKwkJaXNfc2NoZW1hX3B1Ymxpc2hl ZChnZXRfcmVsX25hbWVzcGFjZShyZWxpZCksIHB1YmlkKSkKKwl7CisJCXJldHVybiB0cnVlOwor CX0KKwllbHNlCisJeworCQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2Vz dG9ycyhyZWxpZCk7CisKKwkJZm9yZWFjaF9vaWQoYW5jX29pZCwgYW5jZXN0b3JzKQorCQl7CisJ CQlpZiAoaXNfcmVsaWRfcHVibGlzaGVkKGFuY19vaWQsIHB1YmlkKSB8fAorCQkJCWlzX3NjaGVt YV9wdWJsaXNoZWQoZ2V0X3JlbF9uYW1lc3BhY2UoYW5jX29pZCksIHB1YmlkKSkKKwkJCQlyZXR1 cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIHBnX2dldF9w dWJsaWNhdGlvbl9lZmZlY3RpdmVfdGFibGVzCisgKgorICogR2l2ZW4gYSByb290IHBhcnRpdGlv bmVkIHRhYmxlIGFuZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zLCBjYWxjdWxhdGUgdGhlIHNldAor ICogb2YgcmVsYXRpb25zIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IHB1Ymxpc2hlZC4gVGhpcyBpcyBu ZWNlc3NhcnkgZm9yCisgKiAiRk9SIEFMTCBUQUJMRVMiIHB1YmxpY2F0aW9ucyB0aGF0IHVzZSAi RVhDRVBUIFRBQkxFIiBmaWx0ZXJzLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbWlu aW1hbCBzZXQgb2YgcmVsYXRpb25zIHRoYXQgY29sbGVjdGl2ZWx5CisgKiBpbmNsdWRlIGFsbCBu b24tZXhjbHVkZWQgbGVhZiBwYXJ0aXRpb25zIGluIHRoZSBwYXJ0aXRpb24gaGllcmFyY2h5Lgor ICovCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX2VmZmVjdGl2ZV90YWJsZXMoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqcmVzdWx0 czsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlPaWQJCQlyb290X3JlbGlkID0g UEdfR0VUQVJHX09JRCgwKTsKKwkJQXJyYXlUeXBlICAqcHViX25hbWVzX2FycmF5ID0gUEdfR0VU QVJHX0FSUkFZVFlQRV9QKDEpOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCUxpc3QJ ICAgKnB1Yl9vaWRzID0gTklMOworCQlEYXR1bQkgICAqcHViX2RhdHVtczsKKwkJYm9vbAkgICAq cHViX251bGxzOworCQlpbnQJCQlwdWJfY291bnQ7CisJCVR1cGxlRGVzYwl0dXBkZXNjOworCQlM aXN0CSAgICpmaW5hbF9vdXRwdXQgPSBOSUw7CisJCWJvb2wJCWhhc19jbGVhbl9hbGxfdGFibGVz X3B1YiA9IGZhbHNlOworCQlMaXN0CSAgICpleGNlcHRfcHViX25hbWVzID0gTklMOworCQlPaWQJ CQlleGNlcHRfcHViX2lkID0gSW52YWxpZE9pZDsKKworCQlBc3NlcnQoZ2V0X3JlbF9yZWxraW5k KHJvb3RfcmVsaWQpID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpOworCisJCWZ1bmNjdHgg PSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKworCQlkZWNvbnN0cnVjdF9hcnJheShwdWJfbmFtZXNf YXJyYXksIFRFWFRPSUQsIC0xLCBmYWxzZSwgJ2knLAorCQkJCQkJICAmcHViX2RhdHVtcywgJnB1 Yl9udWxscywgJnB1Yl9jb3VudCk7CisKKwkJLyogQnVpbGQgdGhlIGxpc3Qgb2YgcHViX29pZHMg Ki8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJfY291bnQ7IGkrKykKKwkJeworCQkJaWYgKCFw dWJfbnVsbHNbaV0pCisJCQl7CisJCQkJY2hhcgkgICAqcHVibmFtZSA9IFRleHREYXR1bUdldENT dHJpbmcocHViX2RhdHVtc1tpXSk7CisKKwkJCQlwdWJfb2lkcyA9IGxhcHBlbmRfb2lkKHB1Yl9v aWRzLCBnZXRfcHVibGljYXRpb25fb2lkKHB1Ym5hbWUsIGZhbHNlKSk7CisJCQl9CisJCX0KKwor CQkvKgorCQkgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZXhwZW5zaXZlIGV4cGFuc2lvbiBzdGVw IGNhbiBiZSBza2lwcGVkLiBJZgorCQkgKiBhbnkgcHVibGljYXRpb24gaXMgYSBGT1IgQUxMIFRB QkxFUyBwdWJsaWNhdGlvbiB3aXRob3V0IGFuIEVYQ0VQVAorCQkgKiBjbGF1c2UsIHRoZSByb290 IHJlbGF0aW9uIGFsb25lIGlzIHN1ZmZpY2llbnQgYXMgdGhlIHJlc3VsdC4KKwkJICovCisJCWZv cmVhY2hfb2lkKHB1Ym9pZCwgcHViX29pZHMpCisJCXsKKwkJCUhlYXBUdXBsZQlwdWJUdXA7CisJ CQlGb3JtX3BnX3B1YmxpY2F0aW9uIHB1YmZvcm07CisKKwkJCXB1YlR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQVUJMSUNBVElPTk9JRCwgT2JqZWN0SWRHZXREYXR1bShwdWJvaWQpKTsKKwkJCWlmICgh SGVhcFR1cGxlSXNWYWxpZChwdWJUdXApKQorCQkJCWNvbnRpbnVlOworCisJCQlwdWJmb3JtID0g KEZvcm1fcGdfcHVibGljYXRpb24pIEdFVFNUUlVDVChwdWJUdXApOworCQkJaWYgKHB1YmZvcm0t PnB1YmFsbHRhYmxlcykKKwkJCXsKKwkJCQkvKiBDaGVjayB3aGV0aGVyIHRoaXMgcHVibGljYXRp b24gZGVmaW5lcyBhbnkgRVhDRVBUIGVudHJpZXMgKi8KKwkJCQlpZiAocHVibGljYXRpb25faGFz X2FueV9leGNlcHRfdGFibGUocHVib2lkKSkKKwkJCQl7CisJCQkJCWV4Y2VwdF9wdWJfbmFtZXMg PSBsYXBwZW5kKGV4Y2VwdF9wdWJfbmFtZXMsCisJCQkJCQkJCQkJCSAgIG1ha2VTdHJpbmcocHVi Zm9ybS0+cHVibmFtZS5kYXRhKSk7CisJCQkJCWV4Y2VwdF9wdWJfaWQgPSBwdWJmb3JtLT5vaWQ7 CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMgcHVibGljYXRp b24gaW5jbHVkZXMgYWxsIHRhYmxlcyB3aXRob3V0IGV4Y2VwdC4KKwkJCQkJICovCisJCQkJCWhh c19jbGVhbl9hbGxfdGFibGVzX3B1YiA9IHRydWU7CisJCQkJfQorCQkJfQorCisJCQlSZWxlYXNl U3lzQ2FjaGUocHViVHVwKTsKKwkJfQorCisJCWlmIChsaXN0X2xlbmd0aChleGNlcHRfcHViX25h bWVzKSA+IDEpCisJCXsKKwkJCVN0cmluZ0luZm8JcHViX25hbWVzID0gbWFrZVN0cmluZ0luZm8o KTsKKworCQkJR2V0UHVibGljYXRpb25zU3RyKGV4Y2VwdF9wdWJfbmFtZXMsIHB1Yl9uYW1lcywg dHJ1ZSk7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgdXNlIG11bHRpcGxlIHB1YmxpY2F0 aW9ucyB3aXRoIEVYQ0VQVCBUQUJMRSBsaXN0cyIpLAorCQkJCQllcnJkZXRhaWwoIlRoZSBmb2xs b3dpbmcgcHVibGljYXRpb25zIGhhdmUgZXhjZXB0aW9uczogJXMuIiwKKwkJCQkJCQkgIHB1Yl9u YW1lcy0+ZGF0YSkpOworCQl9CisKKwkJLyogUmV0dXJuIHJvb3QgaW1tZWRpYXRlbHkgaWYgbm8g ZmlsdGVyaW5nIGxvZ2ljIGlzIG5lZWRlZCAqLworCQlpZiAoaGFzX2NsZWFuX2FsbF90YWJsZXNf cHViIHx8ICFPaWRJc1ZhbGlkKGV4Y2VwdF9wdWJfaWQpKQorCQl7CisJCQlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisJ CQlmaW5hbF9vdXRwdXQgPSBsaXN0X21ha2UxX29pZChyb290X3JlbGlkKTsKKwkJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQorCisJCS8qCisJCSAqIEJ1aWxkIHRoZSBl ZmZlY3RpdmUgcHVibGljYXRpb24gcmVsYXRpb24gbGlzdCBmb3IgYSBwYXJ0aXRpb25lZAorCQkg KiBoaWVyYXJjaHkgaW4gdGhlIHByZXNlbmNlIG9mIGFuIEVYQ0VQVCBwdWJsaWNhdGlvbi4KKwkJ ICoKKwkJICogMS4gQ29sbGVjdCBhbGwgbGVhZiBwYXJ0aXRpb25zIHVuZGVyIHRoZSBnaXZlbiBy b290IHJlbGF0aW9uLgorCQkgKgorCQkgKiAyLiBDbGFzc2lmeSBlYWNoIGxlYWYgYXMgZWl0aGVy OiAtIGV4Y2VwdGVkX2xlYXZlczogZXhwbGljaXRseQorCQkgKiBleGNsdWRlZCB2aWEgdGhlIEVY Q0VQVCBjbGF1c2UgKGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoIGFueSBvZgorCQkgKiBpdHMg YW5jZXN0b3JzKSwgb3IgLSBhbGxvd2VkX2xlYXZlczogbm90IGV4Y2x1ZGVkIGFuZCB0aGVyZWZv cmUKKwkJICogcGFydCBvZiB0aGUgZWZmZWN0aXZlIHB1YmxpY2F0aW9uIHNldC4KKwkJICoKKwkJ ICogMy4gUmUtZXZhbHVhdGUgZXhjbHVkZWQgbGVhdmVzIGFnYWluc3Qgb3RoZXIgcHVibGljYXRp b25zLiBBIGxlYWYKKwkJICogZXhjbHVkZWQgaW4gb25lIHB1YmxpY2F0aW9uIG1heSBzdGlsbCBi ZSBlZmZlY3RpdmVseSBpbmNsdWRlZCBpZiBpdAorCQkgKiAob3IgYW55IG9mIGl0cyBhbmNlc3Rv cnMsIG9yIGl0cyBzY2hlbWEpIGlzIHB1Ymxpc2hlZCB0aHJvdWdoCisJCSAqIGFub3RoZXIgcHVi bGljYXRpb24uIFN1Y2ggbGVhdmVzIGFyZSBhZGRlZCBiYWNrIHRvIGFsbG93ZWRfbGVhdmVzLgor CQkgKgorCQkgKiA0LiBCb3R0b20tdXAgY29sbGFwc2Ugb2YgcGFydGl0aW9uIGJyYW5jaGVzLiBG b3IgZWFjaCBwYXJ0aXRpb25lZAorCQkgKiB0YWJsZSBpbiB0aGUgaGllcmFyY2h5OiAtIElmICph bGwqIG9mIGl0cyBsZWFmIHBhcnRpdGlvbnMgYXJlCisJCSAqIHByZXNlbnQgaW4gYWxsb3dlZF9s ZWF2ZXMsIHRoZSBwYXJlbnQgY2FuIHJlcHJlc2VudCB0aGUgZW50aXJlCisJCSAqIGJyYW5jaC4g LSBTdWNoIHBhcmVudHMgYXJlIGFkZGVkIGFzIGNhbmRpZGF0ZXMsIGFsbG93aW5nCisJCSAqIGhp Z2hlci1sZXZlbCByZXByZXNlbnRhdGlvbiBpbnN0ZWFkIG9mIGxpc3RpbmcgZXZlcnkgbGVhZgor CQkgKiBpbmRpdmlkdWFsbHkuCisJCSAqCisJCSAqIDUuIERlZHVwbGljYXRlIGFuZCBub3JtYWxp emUgdGhlIHJlc3VsdC4gUmVtb3ZlIGFueSByZWxhdGlvbiB3aG9zZQorCQkgKiBhbmNlc3RvciBp cyBhbHJlYWR5IHNlbGVjdGVkIGFzIGEgY2FuZGlkYXRlLiBUaGlzIGVuc3VyZXMgdGhlIGZpbmFs CisJCSAqIG91dHB1dCBjb250YWlucyBvbmx5IHRoZSBoaWdoZXN0LWxldmVsIHJlcHJlc2VudGF0 aXZlIGZvciBlYWNoCisJCSAqIGZ1bGx5LWFsbG93ZWQgYnJhbmNoIGFuZCBhdm9pZHMgcmVkdW5k YW50IGVudHJpZXMuCisJCSAqCisJCSAqIFRoZSBmaW5hbF9vdXRwdXQgdGhlcmVmb3JlIGNvbnRh aW5zIGEgbWluaW1hbCwgbm9uLXJlZHVuZGFudCBzZXQgb2YKKwkJICogcmVsYXRpb25zIHRoYXQg YWNjdXJhdGVseSByZXByZXNlbnRzIHRoZSBlZmZlY3RpdmUgcHVibGljYXRpb24gc2V0CisJCSAq IGFmdGVyIGNvbnNpZGVyaW5nIEVYQ0VQVCBydWxlcyBhbmQgbXVsdGlwbGUgcHVibGljYXRpb25z LgorCQkgKi8KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAgICphbGxfdGFibGVzOworCQkJTGlzdAkg ICAqYWxsX2xlYXZlcyA9IE5JTDsKKwkJCUxpc3QJICAgKmV4Y2VwdGVkX2xlYXZlcyA9IE5JTDsK KwkJCUxpc3QJICAgKmFsbG93ZWRfbGVhdmVzID0gTklMOworCQkJTGlzdAkgICAqY2FuZGlkYXRl X2xpc3QgPSBOSUw7CisKKwkJCS8qIEdldCBhbGwgdGhlIGxlYWYgcmVsYXRpb25zICovCisJCQlh bGxfbGVhdmVzID0gR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKGFsbF9sZWF2ZXMsCisJ CQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfTEVBRiwKKwkJCQkJCQkJCQkJCQkJcm9vdF9y ZWxpZCk7CisJCQlmb3JlYWNoX29pZChjdXJyX3JlbGlkLCBhbGxfbGVhdmVzKQorCQkJeworCQkJ CS8qCisJCQkJICogQSBsZWFmIHRhYmxlIGlzIGNvbnNpZGVyZWQgZXhjbHVkZWQgaWYgaXQsIG9y IGFueSBvZiBpdHMKKwkJCQkgKiBhbmNlc3RvcnMsIGlzIGxpc3RlZCBpbiB0aGUgRVhDRVBUIGNs YXVzZSBvZiB0aGUKKwkJCQkgKiBwdWJsaWNhdGlvbi4gT3RoZXJ3aXNlLCBpdCByZW1haW5zIHBh cnQgb2YgdGhlIGVmZmVjdGl2ZQorCQkJCSAqIHB1YmxpY2F0aW9uIHNldC4KKwkJCQkgKi8KKwkJ CQlpZiAoaXNfcmVsaWRfb3JfYW5jZXN0b3JfZXhjZXB0ZWQoY3Vycl9yZWxpZCwgZXhjZXB0X3B1 Yl9pZCkpCisJCQkJCWV4Y2VwdGVkX2xlYXZlcyA9IGxhcHBlbmRfb2lkKGV4Y2VwdGVkX2xlYXZl cywgY3Vycl9yZWxpZCk7CisJCQkJZWxzZQorCQkJCQlhbGxvd2VkX2xlYXZlcyA9IGxhcHBlbmRf b2lkKGFsbG93ZWRfbGVhdmVzLCBjdXJyX3JlbGlkKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEEg dGFibGUgZXhjbHVkZWQgYnkgdGhlIEVYQ0VQVCBjbGF1c2Ugb2Ygb25lIHB1YmxpY2F0aW9uIG1h eQorCQkJICogc3RpbGwgYmUgaW5jbHVkZWQgaWYgaXQgaXMgZXhwbGljaXRseSBwdWJsaXNoZWQs IG9yIHB1Ymxpc2hlZAorCQkJICogdmlhIGl0cyBzY2hlbWEgb3IgYW55IG9mIGl0cyBhbmNlc3Rv cnMsIGluIGFub3RoZXIgcHVibGljYXRpb24uCisJCQkgKi8KKwkJCWZvcmVhY2hfb2lkKGN1cnJf cmVsaWQsIGV4Y2VwdGVkX2xlYXZlcykKKwkJCXsKKwkJCQlmb3JlYWNoX29pZChwdWJpZCwgcHVi X29pZHMpCisJCQkJeworCQkJCQkvKiBTa2lwIHRoZSBwdWJsaWNhdGlvbiB0aGF0IGV4Y2x1ZGVk IHRoaXMgcmVsYXRpb24uICovCisJCQkJCWlmIChwdWJpZCA9PSBleGNlcHRfcHViX2lkKQorCQkJ CQkJY29udGludWU7CisKKwkJCQkJaWYgKGlzX3JlbGlkX29yX2FuY2VzdG9yX3B1Ymxpc2hlZChj dXJyX3JlbGlkLCBwdWJpZCkpCisJCQkJCQlhbGxvd2VkX2xlYXZlcyA9IGxhcHBlbmRfb2lkKGFs bG93ZWRfbGVhdmVzLAorCQkJCQkJCQkJCQkJCSBjdXJyX3JlbGlkKTsKKwkJCQl9CisJCQl9CisK KwkJCS8qIEJvdHRvbS1VcCBDb2xsYXBzZS4gQ2hlY2sgaWYgcGFyZW50cyBjYW4gcmVwcmVzZW50 IGNoaWxkcmVuICovCisJCQlhbGxfdGFibGVzID0gZmluZF9hbGxfaW5oZXJpdG9ycyhyb290X3Jl bGlkLCBBY2Nlc3NTaGFyZUxvY2ssIE5VTEwpOworCQkJY2FuZGlkYXRlX2xpc3QgPSBsaXN0X2Nv cHkoYWxsb3dlZF9sZWF2ZXMpOworCQkJZm9yZWFjaF9vaWQoY3Vycl9yZWxpZCwgYWxsX3RhYmxl cykKKwkJCXsKKwkJCQlMaXN0CSAgICpicmFuY2hfbGVhdmVzID0gTklMOworCQkJCWJvb2wJCWFs bF9hbGxvd2VkID0gdHJ1ZTsKKworCQkJCS8qIE9ubHkgY29uc2lkZXIgcGFydGl0aW9uZWQgdGFi bGVzIGFzIGNvbGxhcHNlIGNhbmRpZGF0ZXMgKi8KKwkJCQlpZiAoZ2V0X3JlbF9yZWxraW5kKGN1 cnJfcmVsaWQpICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCWNvbnRpbnVlOwor CisJCQkJYnJhbmNoX2xlYXZlcyA9IEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhicmFu Y2hfbGVhdmVzLAorCQkJCQkJCQkJCQkJCQkJICAgUFVCTElDQVRJT05fUEFSVF9MRUFGLAorCQkJ CQkJCQkJCQkJCQkJICAgY3Vycl9yZWxpZCk7CisJCQkJaWYgKGJyYW5jaF9sZWF2ZXMgPT0gTklM KQorCQkJCQljb250aW51ZTsKKworCQkJCWZvcmVhY2hfb2lkKGxjYl9vaWQsIGJyYW5jaF9sZWF2 ZXMpCisJCQkJeworCQkJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChhbGxvd2VkX2xlYXZlcywgbGNi X29pZCkpCisJCQkJCXsKKwkJCQkJCWFsbF9hbGxvd2VkID0gZmFsc2U7CisJCQkJCQlicmVhazsK KwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChhbGxfYWxsb3dlZCkKKwkJCQkJY2FuZGlkYXRlX2xp c3QgPSBsaXN0X2FwcGVuZF91bmlxdWVfb2lkKGNhbmRpZGF0ZV9saXN0LAorCQkJCQkJCQkJCQkJ CQkJY3Vycl9yZWxpZCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBEZWR1cGxpY2F0ZTogRmlsdGVy IG91dCBhbnkgcmVsYXRpb24gd2hvc2UgYW5jZXN0b3IgaXMgYWxyZWFkeQorCQkJICogcHJlc2Vu dCBpbiB0aGUgY2FuZGlkYXRlIGxpc3QuIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IHJldHVybiB0aGUK KwkJCSAqICJoaWdoZXN0IiByZXByZXNlbnRhdGl2ZSBmb3IgZWFjaCBicmFuY2guCisJCQkgKi8K KwkJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2Fs bF9tZW1vcnlfY3R4KTsKKworCQkJZm9yZWFjaF9vaWQoY3Vycl9yZWxpZCwgY2FuZGlkYXRlX2xp c3QpCisJCQl7CisJCQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3Rv cnMoY3Vycl9yZWxpZCk7CisJCQkJYm9vbAkJYW5jZXN0b3JfYWxyZWFkeV9pbmNsdWRlZCA9IGZh bHNlOworCisJCQkJLyoKKwkJCQkgKiBDaGVjayBpZiBhbnkgYW5jZXN0b3Igb2YgdGhlIGN1cnJl bnQgcmVsYXRpb24gZXhpc3RzIGluIHRoZQorCQkJCSAqIGNhbmRpZGF0ZSBsaXN0LiBJZiBzbywg dGhpcyByZWxhdGlvbiBpcyByZWR1bmRhbnQuCisJCQkJICovCisJCQkJZm9yZWFjaF9vaWQoYW5j ZXN0b3JfcmVsaWQsIGFuY2VzdG9ycykKKwkJCQl7CisJCQkJCWlmIChsaXN0X21lbWJlcl9vaWQo Y2FuZGlkYXRlX2xpc3QsIGFuY2VzdG9yX3JlbGlkKSkKKwkJCQkJeworCQkJCQkJYW5jZXN0b3Jf YWxyZWFkeV9pbmNsdWRlZCA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwor CQkJCWlmICghYW5jZXN0b3JfYWxyZWFkeV9pbmNsdWRlZCkKKwkJCQkJZmluYWxfb3V0cHV0ID0g bGFwcGVuZF9vaWQoZmluYWxfb3V0cHV0LCBjdXJyX3JlbGlkKTsKKworCQkJCWxpc3RfZnJlZShh bmNlc3RvcnMpOworCQkJfQorCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisJCX0KKworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11 bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3Ig Zm9yIHRoZSByZXN1bHQgcm93cy4gKi8KKwkJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVE ZXNjKDIpOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJu c3BuYW1lIiwKKwkJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5 KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAyLCAicmVsbmFtZSIsCisJCQkJCQkgICBURVhUT0lELCAt MSwgMCk7CisKKwkJZnVuY2N0eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2Mp OworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBmaW5hbF9vdXRwdXQ7CisKKwkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCS8qIFNSRiBQZXItY2FsbCBSZXN1bWUgKi8K KwlmdW5jY3R4ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsKKwlyZXN1bHRzID0gKExpc3QgKikgZnVu Y2N0eC0+dXNlcl9mY3R4OworCisJaWYgKGZ1bmNjdHgtPmNhbGxfY250ciA8IGxpc3RfbGVuZ3Ro KHJlc3VsdHMpKQorCXsKKwkJT2lkCQkJY3VycmVudF9yZWxpZCA9IGxpc3RfbnRoX29pZChyZXN1 bHRzLCAoaW50KSBmdW5jY3R4LT5jYWxsX2NudHIpOworCQlIZWFwVHVwbGUJcmV0dHVwbGU7CisJ CURhdHVtCQl2YWx1ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdID0ge2ZhbHNlLCBmYWxzZX07CisK KwkJdmFsdWVzWzBdID0gQ1N0cmluZ0dldFRleHREYXR1bShnZXRfbmFtZXNwYWNlX25hbWUoZ2V0 X3JlbF9uYW1lc3BhY2UoY3VycmVudF9yZWxpZCkpKTsKKwkJdmFsdWVzWzFdID0gQ1N0cmluZ0dl dFRleHREYXR1bShnZXRfcmVsX25hbWUoY3VycmVudF9yZWxpZCkpOworCisJCXJldHR1cGxlID0g aGVhcF9mb3JtX3R1cGxlKGZ1bmNjdHgtPnR1cGxlX2Rlc2MsIHZhbHVlcywgbnVsbHMpOworCQlT UkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgSGVhcFR1cGxlR2V0RGF0dW0ocmV0dHVwbGUpKTsKKwl9 CisKKwlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7Cit9CisKIC8qCiAgKiBHZXQgaW5mb3JtYXRp b24gb2YgdGhlIHRhYmxlcyBpbiB0aGUgZ2l2ZW4gcHVibGljYXRpb24gYXJyYXkuCiAgKgpAQCAt MTE2OCwxNyArMTc0MiwxNyBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCQkgKiB0aG9zZS4gT3RoZXJ3aXNlLCBnZXQgdGhlIHBhcnRpdGlvbmVkIHRhYmxl IGl0c2VsZi4KIAkJCSAqLwogCQkJaWYgKHB1Yl9lbGVtLT5hbGx0YWJsZXMpCi0JCQkJcHViX2Vs ZW1fdGFibGVzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUkVMS0lORF9SRUxBVElPTiwK LQkJCQkJCQkJCQkJCQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCk7CisJCQkJcHViX2VsZW1fdGFi bGVzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0sCisJCQkJCQkJCQkJCQkJ CQkgUkVMS0lORF9SRUxBVElPTik7CiAJCQllbHNlCiAJCQl7CiAJCQkJTGlzdAkgICAqcmVsaWRz LAogCQkJCQkJICAgKnNjaGVtYXJlbGlkczsKIAotCQkJCXJlbGlkcyA9IEdldFB1YmxpY2F0aW9u UmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQsCi0JCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZpYXJv b3QgPwotCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6Ci0JCQkJCQkJCQkJCQkg UFVCTElDQVRJT05fUEFSVF9MRUFGKTsKKwkJCQlyZWxpZHMgPSBHZXRJbmNsdWRlZFJlbGF0aW9u c0J5UHViKHB1Yl9lbGVtLT5vaWQsCisJCQkJCQkJCQkJCQkgICBwdWJfZWxlbS0+cHVidmlhcm9v dCA/CisJCQkJCQkJCQkJCQkgICBQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgorCQkJCQkJCQkJCQkJ ICAgUFVCTElDQVRJT05fUEFSVF9MRUFGKTsKIAkJCQlzY2hlbWFyZWxpZHMgPSBHZXRBbGxTY2hl bWFQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAogCQkJCQkJCQkJCQkJCQkJCXB1 Yl9lbGVtLT5wdWJ2aWFyb290ID8KIAkJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX1JP T1QgOgpAQCAtMTM2Nyw3ICsxOTQxLDcgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3NlcXVlbmNlcyhQ R19GVU5DVElPTl9BUkdTKQogCQlwdWJsaWNhdGlvbiA9IEdldFB1YmxpY2F0aW9uQnlOYW1lKHB1 Ym5hbWUsIGZhbHNlKTsKIAogCQlpZiAocHVibGljYXRpb24tPmFsbHNlcXVlbmNlcykKLQkJCXNl cXVlbmNlcyA9IEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKFJFTEtJTkRfU0VRVUVOQ0UsIGZh bHNlKTsKKwkJCXNlcXVlbmNlcyA9IEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmxpY2F0 aW9uLCBSRUxLSU5EX1NFUVVFTkNFKTsKIAogCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBzZXF1ZW5j ZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggZmMzYTRjMTll NjUuLmYzYjFlNDI3NmE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNh dGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpA QCAtMTk4LDcgKzE5OCwxMiBAQCBPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhMaXN0ICpwdWJv YmpzcGVjX2xpc3QsIFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAogCQlzd2l0Y2ggKHB1Ym9iai0+cHVi b2JqdHlwZSkKIAkJeworCQkJY2FzZSBQVUJMSUNBVElPTk9CSl9FWENFUFRfVEFCTEU6CisJCQkJ cHVib2JqLT5wdWJ0YWJsZS0+ZXhjZXB0ID0gdHJ1ZTsKKwkJCQkqcmVscyA9IGxhcHBlbmQoKnJl bHMsIHB1Ym9iai0+cHVidGFibGUpOworCQkJCWJyZWFrOwogCQkJY2FzZSBQVUJMSUNBVElPTk9C Sl9UQUJMRToKKwkJCQlwdWJvYmotPnB1YnRhYmxlLT5leGNlcHQgPSBmYWxzZTsKIAkJCQkqcmVs cyA9IGxhcHBlbmQoKnJlbHMsIHB1Ym9iai0+cHVidGFibGUpOwogCQkJCWJyZWFrOwogCQkJY2Fz ZSBQVUJMSUNBVElPTk9CSl9UQUJMRVNfSU5fU0NIRU1BOgpAQCAtNTE5LDggKzUyNCw4IEBAIElu dmFsaWRhdGVQdWJSZWxTeW5jQ2FjaGUoT2lkIHB1YmlkLCBib29sIHB1YmFsbHRhYmxlcykKIAkJ ICogYSB0YXJnZXQuIEhvd2V2ZXIsIFdBTCByZWNvcmRzIGZvciBUUlVOQ0FURSBzcGVjaWZ5IGJv dGggYSByb290IGFuZAogCQkgKiBpdHMgbGVhdmVzLgogCQkgKi8KLQkJcmVsaWRzID0gR2V0UHVi bGljYXRpb25SZWxhdGlvbnMocHViaWQsCi0JCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfQUxM KTsKKwkJcmVsaWRzID0gR2V0SW5jbHVkZWRSZWxhdGlvbnNCeVB1YihwdWJpZCwKKwkJCQkJCQkJ CQkgICBQVUJMSUNBVElPTl9QQVJUX0FMTCk7CiAJCXNjaGVtYXJlbGlkcyA9IEdldEFsbFNjaGVt YVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmlkLAogCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9Q QVJUX0FMTCk7CiAKQEAgLTg0NSw2ICs4NTAsNyBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAlBY2xSZXN1bHQJYWNs cmVzdWx0OwogCUxpc3QJICAgKnJlbGF0aW9ucyA9IE5JTDsKIAlMaXN0CSAgICpzY2hlbWFpZGxp c3QgPSBOSUw7CisJTGlzdAkgICAqcmVscyA9IE5JTDsKIAogCS8qIG11c3QgaGF2ZSBDUkVBVEUg cHJpdmlsZWdlIG9uIGRhdGFiYXNlICovCiAJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKERh dGFiYXNlUmVsYXRpb25JZCwgTXlEYXRhYmFzZUlkLCBHZXRVc2VySWQoKSwgQUNMX0NSRUFURSk7 CkBAIC05MjksOCArOTM1LDIzIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50 KCk7CiAKIAkvKiBBc3NvY2lhdGUgb2JqZWN0cyB3aXRoIHRoZSBwdWJsaWNhdGlvbi4gKi8KKwlP YmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhzdG10LT5wdWJvYmplY3RzLCBwc3RhdGUsICZyZWxh dGlvbnMsCisJCQkJCQkJICAgJnNjaGVtYWlkbGlzdCk7CisJaWYgKHJlbGF0aW9ucyAhPSBOSUwp CisJeworCQlBc3NlcnQoIXN0bXQtPmZvcl9hbGxfc2VxdWVuY2VzKTsKKwkJcmVscyA9IE9wZW5U YWJsZUxpc3QocmVsYXRpb25zKTsKKwl9CisKIAlpZiAoc3RtdC0+Zm9yX2FsbF90YWJsZXMpCiAJ eworCQkvKiBQcm9jZXNzIEVYQ0VQVCB0YWJsZSBsaXN0ICovCisJCWlmIChyZWxhdGlvbnMgIT0g TklMKQorCQl7CisJCQlBc3NlcnQocmVscyAhPSBOSUwpOworCQkJUHVibGljYXRpb25BZGRUYWJs ZXMocHVib2lkLCByZWxzLCB0cnVlLCBOVUxMKTsKKwkJfQorCiAJCS8qCiAJCSAqIEludmFsaWRh dGUgcmVsY2FjaGUgc28gdGhhdCBwdWJsaWNhdGlvbiBpbmZvIGlzIHJlYnVpbHQuIFNlcXVlbmNl cwogCQkgKiBwdWJsaWNhdGlvbiBkb2Vzbid0IHJlcXVpcmUgaW52YWxpZGF0aW9uLCBhcyByZXBs aWNhIGlkZW50aXR5CkBAIC05NDAsOSArOTYxLDYgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VT dGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJfQogCWVsc2UgaWYg KCFzdG10LT5mb3JfYWxsX3NlcXVlbmNlcykKIAl7Ci0JCU9iamVjdHNJblB1YmxpY2F0aW9uVG9P aWRzKHN0bXQtPnB1Ym9iamVjdHMsIHBzdGF0ZSwgJnJlbGF0aW9ucywKLQkJCQkJCQkJICAgJnNj aGVtYWlkbGlzdCk7Ci0KIAkJLyogRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcmVxdWlyZXMgc3VwZXJ1 c2VyICovCiAJCWlmIChzY2hlbWFpZGxpc3QgIT0gTklMICYmICFzdXBlcnVzZXIoKSkKIAkJCWVy ZXBvcnQoRVJST1IsCkBAIC05NTEsOSArOTY5LDYgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VT dGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAKIAkJaWYgKHJlbGF0 aW9ucyAhPSBOSUwpCiAJCXsKLQkJCUxpc3QJICAgKnJlbHM7Ci0KLQkJCXJlbHMgPSBPcGVuVGFi bGVMaXN0KHJlbGF0aW9ucyk7CiAJCQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcHN0 YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQkgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qp OwogCkBAIC05NjIsNyArOTc3LDYgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0 YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCQkJCQkJCQkgICBwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCk7CiAKIAkJCVB1YmxpY2F0aW9uQWRkVGFibGVzKHB1Ym9pZCwgcmVs cywgdHJ1ZSwgTlVMTCk7Ci0JCQlDbG9zZVRhYmxlTGlzdChyZWxzKTsKIAkJfQogCiAJCWlmIChz Y2hlbWFpZGxpc3QgIT0gTklMKQpAQCAtOTc2LDYgKzk5MCw5IEBAIENyZWF0ZVB1YmxpY2F0aW9u KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9CiAJ fQogCisJaWYgKHJlbHMgIT0gTklMKQorCQlDbG9zZVRhYmxlTGlzdChyZWxzKTsKKwogCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRl SG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC0xMDUwLDggKzEwNjcs OCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVi bGljYXRpb25TdG10ICpzdG10LAogCQlMb2NrRGF0YWJhc2VPYmplY3QoUHVibGljYXRpb25SZWxh dGlvbklkLCBwdWJmb3JtLT5vaWQsIDAsCiAJCQkJCQkgICBBY2Nlc3NTaGFyZUxvY2spOwogCi0J CXJvb3RfcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViZm9ybS0+b2lkLAotCQkJ CQkJCQkJCQkgIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisJCXJvb3RfcmVsaWRzID0gR2V0SW5j bHVkZWRSZWxhdGlvbnNCeVB1YihwdWJmb3JtLT5vaWQsCisJCQkJCQkJCQkJCQlQVUJMSUNBVElP Tl9QQVJUX1JPT1QpOwogCiAJCWZvcmVhY2gobGMsIHJvb3RfcmVsaWRzKQogCQl7CkBAIC0xMTcw LDggKzExODcsOCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUs IEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCQkgKiB0cmVlcywgbm90IGp1c3QgdGhvc2Ug ZXhwbGljaXRseSBtZW50aW9uZWQgaW4gdGhlIHB1YmxpY2F0aW9uLgogCQkgKi8KIAkJaWYgKHJv b3RfcmVsaWRzID09IE5JTCkKLQkJCXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1 YmZvcm0tPm9pZCwKLQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsKKwkJCXJlbGlk cyA9IEdldEluY2x1ZGVkUmVsYXRpb25zQnlQdWIocHViZm9ybS0+b2lkLAorCQkJCQkJCQkJCQkg ICBQVUJMSUNBVElPTl9QQVJUX0FMTCk7CiAJCWVsc2UKIAkJewogCQkJLyoKQEAgLTEyNTYsOCAr MTI3Myw4IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0 bXQsIEhlYXBUdXBsZSB0dXAsCiAJCVB1YmxpY2F0aW9uRHJvcFRhYmxlcyhwdWJpZCwgcmVscywg ZmFsc2UpOwogCWVsc2UJCQkJCQkvKiBBUF9TZXRPYmplY3RzICovCiAJewotCQlMaXN0CSAgICpv bGRyZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJpZCwKLQkJCQkJCQkJCQkJCQkJ UFVCTElDQVRJT05fUEFSVF9ST09UKTsKKwkJTGlzdAkgICAqb2xkcmVsaWRzID0gR2V0SW5jbHVk ZWRSZWxhdGlvbnNCeVB1YihwdWJpZCwKKwkJCQkJCQkJCQkJCQkJICBQVUJMSUNBVElPTl9QQVJU X1JPT1QpOwogCQlMaXN0CSAgICpkZWxyZWxzID0gTklMOwogCQlMaXN0Q2VsbCAgICpvbGRsYzsK IApAQCAtMTM1OCw2ICsxMzc1LDcgQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAkJCQlvbGRyZWwgPSBwYWxsb2Nfb2Jq ZWN0KFB1YmxpY2F0aW9uUmVsSW5mbyk7CiAJCQkJb2xkcmVsLT53aGVyZUNsYXVzZSA9IE5VTEw7 CiAJCQkJb2xkcmVsLT5jb2x1bW5zID0gTklMOworCQkJCW9sZHJlbC0+ZXhjZXB0ID0gZmFsc2U7 CiAJCQkJb2xkcmVsLT5yZWxhdGlvbiA9IHRhYmxlX29wZW4ob2xkcmVsaWQsCiAJCQkJCQkJCQkJ CSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAkJCQlkZWxyZWxzID0gbGFwcGVuZChkZWxy ZWxzLCBvbGRyZWwpOwpAQCAtMTQwOCw3ICsxNDI2LDggQEAgQWx0ZXJQdWJsaWNhdGlvblNjaGVt YXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCUxpc3RDZWxsICAgKmxjOwogCQlMaXN0 CSAgICpyZWxvaWRzOwogCi0JCXJlbG9pZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJm b3JtLT5vaWQsIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisJCXJlbG9pZHMgPSBHZXRJbmNsdWRl ZFJlbGF0aW9uc0J5UHViKHB1YmZvcm0tPm9pZCwKKwkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFS VF9ST09UKTsKIAogCQlmb3JlYWNoKGxjLCByZWxvaWRzKQogCQl7CkBAIC0xNzcxLDYgKzE3OTAs NyBAQCBPcGVuVGFibGVMaXN0KExpc3QgKnRhYmxlcykKIAkJcHViX3JlbC0+cmVsYXRpb24gPSBy ZWw7CiAJCXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+d2hlcmVDbGF1c2U7CiAJCXB1Yl9yZWwt PmNvbHVtbnMgPSB0LT5jb2x1bW5zOworCQlwdWJfcmVsLT5leGNlcHQgPSB0LT5leGNlcHQ7CiAJ CXJlbHMgPSBsYXBwZW5kKHJlbHMsIHB1Yl9yZWwpOwogCQlyZWxpZHMgPSBsYXBwZW5kX29pZChy ZWxpZHMsIG15cmVsaWQpOwogCkBAIC0xODQzLDYgKzE4NjMsNyBAQCBPcGVuVGFibGVMaXN0KExp c3QgKnRhYmxlcykKIAogCQkJCS8qIGNoaWxkIGluaGVyaXRzIGNvbHVtbiBsaXN0IGZyb20gcGFy ZW50ICovCiAJCQkJcHViX3JlbC0+Y29sdW1ucyA9IHQtPmNvbHVtbnM7CisJCQkJcHViX3JlbC0+ ZXhjZXB0ID0gdC0+ZXhjZXB0OwogCQkJCXJlbHMgPSBsYXBwZW5kKHJlbHMsIHB1Yl9yZWwpOwog CQkJCXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlkcywgY2hpbGRyZWxpZCk7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCAwYjNjODQ5OWI0OS4uYmFjMDQ4MDkw NmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTU0OSw2ICs1 NDksMTExIEBAIGNoZWNrX3B1YmxpY2F0aW9ucyhXYWxSZWNlaXZlckNvbm4gKndyY29ubiwgTGlz dCAqcHVibGljYXRpb25zKQogCX0KIH0KIAorLyoKKyAqIEVSUk9SIGlmIG11bHRpcGxlIHB1Ymxp Y2F0aW9ucyB3aXRoIEVYQ0VQVCBjbGF1c2VzIGFyZSBwcmVzZW50LgorICoKKyAqIExvZ2ljYWwg cmVwbGljYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBzdWJzY3JpYmluZyB0byBtb3JlIHRoYW4gb25l CisgKiBwdWJsaWNhdGlvbiB0aGF0IGRlZmluZXMgYW4gZXhjbHVzaW9uIGxpc3QuIEFsbG93aW5n IHRoaXMgd291bGQKKyAqIGNyZWF0ZSBhbWJpZ3VvdXMgYW5kIHVucHJlZGljdGFibGUgcmVwbGlj YXRpb24gYmVoYXZpb3IuCisgKgorICogVGhlIGFtYmlndWl0eSBhcmlzZXMgd2hlbiBwdWJsaWNh dGlvbnMgZGlmZmVyIGluIHRoZWlyIGV4Y2x1c2lvbnMKKyAqIGFuZCBpbiB0aGUgc2V0dGluZyBv ZiAncHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QnLiBJbiBzdWNoIGNhc2VzLAorICogdGhlIGVm ZmVjdGl2ZSBwdWJsaWNhdGlvbiBzZXQgY2Fubm90IGJlIGRldGVybWluZWQgY29uc2lzdGVudGx5 OgorICoKKyAqICAgLSBUYWJsZXMgZXhjbHVkZWQgaW4gb25lIHB1YmxpY2F0aW9uIG1heSBiZSBp bXBsaWNpdGx5IGluY2x1ZGVkCisgKiAgICAgaW4gYW5vdGhlci4KKyAqICAgLSBDb25mbGljdGlu ZyAncHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QnIHNldHRpbmdzIGFsdGVyIGhvdworICogICAg IHBhcnRpdGlvbnMgYXJlIHJlcHJlc2VudGVkIGFuZCBkZWR1cGxpY2F0ZWQuCisgKgorICogVG8g YXZvaWQgdGhlc2UgY29uZmxpY3RzLCBhIHN1YnNjcmlwdGlvbiBtYXkgaW5jbHVkZSBhdCBtb3N0 IG9uZQorICogJ0ZPUiBBTEwgVEFCTEVTJyBwdWJsaWNhdGlvbiB0aGF0IHNwZWNpZmllcyBhbiBF WENFUFQgY2xhdXNlLgorICoKKyAqIEV4YW1wbGU6CisgKgorICogICBQYXJ0aXRpb25lZCB0YWJs ZTogdGFiX3Jvb3QKKyAqICAgUGFydGl0aW9uczogcGFydDEsIHBhcnQyLCBwYXJ0MworICoKKyAq ICAgcHViMToKKyAqICAgICBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKHBhcnQxLCBwYXJ0MikKKyAq ICAgICAgIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSkKKyAqCisgKiAg IHB1YjI6CisgKiAgICAgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIChwYXJ0MykKKyAqICAgICAgIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpCisgKgorICogU3Vic2NyaWJp bmcgdG8gYm90aCBwdWIxIGFuZCBwdWIyIGlzIGludmFsaWQgYmVjYXVzZToKKyAqICAgLSBwdWIx IGV4Y2x1ZGVzIHBhcnQxIGFuZCBwYXJ0MiwgcHVibGlzaGluZyByZW1haW5pbmcgcGFydGl0aW9u cworICogICAgIHZpYSB0aGUgcm9vdC4KKyAqICAgLSBwdWIyIGV4Y2x1ZGVzIHBhcnQzLCBwdWJs aXNoaW5nIG90aGVyIHBhcnRpdGlvbnMgaW5kaXZpZHVhbGx5LgorICoKKyAqIFRoZSByZXN1bHRp bmcgcHVibGljYXRpb24gc2V0IGlzIGFtYmlndW91cyBhbmQgcHJvdmlkZXMgbm8gY2xlYXIKKyAq IGJlbmVmaXQuIFVubGVzcyBhbGwgcHVibGljYXRpb25zIGV4Y2x1ZGUgdGhlIHNhbWUgdGFibGVz LCBjb21iaW5pbmcKKyAqIHRoZW0gaW50cm9kdWNlcyBjb21wbGV4IGFuZCBjb25mbGljdGluZyBw YXJ0aXRpb24gcmVzb2x1dGlvbiBydWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3B1Ymxp Y2F0aW9uc19leGNlcHRfbGlzdChXYWxSZWNlaXZlckNvbm4gKndyY29ubiwgTGlzdCAqcHVibGlj YXRpb25zKQoreworCUxpc3QJICAgKmV4Y2VwdF9wdWJsaWNhdGlvbnMgPSBOSUw7CisJV2FsUmN2 RXhlY1Jlc3VsdCAqcmVzOworCVN0cmluZ0luZm9EYXRhIGNtZDsKKwlTdHJpbmdJbmZvRGF0YSBw dWJuYW1lczsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlPaWQJCQl0YWJsZVJvd1sxXSA9IHtU RVhUT0lEfTsKKworCWlmIChsaXN0X2xlbmd0aChwdWJsaWNhdGlvbnMpIDw9IDEpCisJCXJldHVy bjsKKworCWluaXRTdHJpbmdJbmZvKCZjbWQpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNt ZCwKKwkJCQkJCSAgICJTRUxFQ1QgcC5wdWJuYW1lXG4iCisJCQkJCQkgICAiIEZST00gcGdfY2F0 YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCisJCQkJCQkgICAiIFdIRVJFIHAucHVibmFtZSBJTiAo Iik7CisKKwlHZXRQdWJsaWNhdGlvbnNTdHIocHVibGljYXRpb25zLCAmY21kLCB0cnVlKTsKKwor CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwKKwkJCQkJCSAgICIpXG4iCisJCQkJCQkgICAi ICAgQU5EIEVYSVNUUyAoU0VMRUNUIDFcbiIKKwkJCQkJCSAgICIgICAgICAgICAgICAgICAgIEZS T00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHJcbiIKKwkJCQkJCSAgICIgICAgICAg ICAgICAgICAgV0hFUkUgcHIucHJwdWJpZCA9IHAub2lkXG4iCisJCQkJCQkgICAiICAgICAgICAg ICAgICAgICAgQU5EIHByLnByZXhjZXB0IElTIFRSVUUpIik7CisKKwlyZXMgPSB3YWxyY3ZfZXhl Yyh3cmNvbm4sIGNtZC5kYXRhLCAxLCB0YWJsZVJvdyk7CisJcGZyZWUoY21kLmRhdGEpOworCisJ aWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJZXJybXNnKCJjb3VsZCBub3QgcmVjZWl2ZSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBmcm9tIHRo ZSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJICAgcmVzLT5lcnIpKTsKKworCXNsb3QgPSBNYWtlU2lu Z2xlVHVwbGVUYWJsZVNsb3QocmVzLT50dXBsZWRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOwor CXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChyZXMtPnR1cGxlc3RvcmUsIHRydWUsIGZh bHNlLCBzbG90KSkKKwl7CisJCWNoYXIJICAgKnB1Ym5hbWU7CisJCWJvb2wJCWlzbnVsbDsKKwor CQlwdWJuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMSwgJmlz bnVsbCkpOworCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJZXhjZXB0X3B1YmxpY2F0aW9ucyA9IGxh cHBlbmQoZXhjZXB0X3B1YmxpY2F0aW9ucywgbWFrZVN0cmluZyhwdWJuYW1lKSk7CisJCUV4ZWND bGVhclR1cGxlKHNsb3QpOworCX0KKworCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xv dCk7CisKKwl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CisKKwlpZiAobGlzdF9sZW5ndGgoZXhj ZXB0X3B1YmxpY2F0aW9ucykgPD0gMSkKKwkJcmV0dXJuOworCisJaW5pdFN0cmluZ0luZm8oJnB1 Ym5hbWVzKTsKKwlHZXRQdWJsaWNhdGlvbnNTdHIoZXhjZXB0X3B1YmxpY2F0aW9ucywgJnB1Ym5h bWVzLCBmYWxzZSk7CisKKwllcmVwb3J0KEVSUk9SLAorCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCisJCQllcnJtc2coImNhbm5vdCBjb21iaW5lIHB1YmxpY2F0aW9u cyAlcyB3aXRoIEVYQ0VQVCBUQUJMRSBjbGF1c2VzIiwgcHVibmFtZXMuZGF0YSkpOworfQorCiAv KgogICogQXV4aWxpYXJ5IGZ1bmN0aW9uIHRvIGJ1aWxkIGEgdGV4dCBhcnJheSBvdXQgb2YgYSBs aXN0IG9mIFN0cmluZyBub2Rlcy4KICAqLwpAQCAtNzk1LDYgKzkwMCw3IEBAIENyZWF0ZVN1YnNj cmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQs CiAJCQljaGFyCQlyZWxhdGlvbl9zdGF0ZTsKIAogCQkJY2hlY2tfcHVibGljYXRpb25zKHdyY29u biwgcHVibGljYXRpb25zKTsKKwkJCWNoZWNrX3B1YmxpY2F0aW9uc19leGNlcHRfbGlzdCh3cmNv bm4sIHB1YmxpY2F0aW9ucyk7CiAJCQljaGVja19wdWJsaWNhdGlvbnNfb3JpZ2luX3RhYmxlcyh3 cmNvbm4sIHB1YmxpY2F0aW9ucywKIAkJCQkJCQkJCQkJIG9wdHMuY29weV9kYXRhLAogCQkJCQkJ CQkJCQkgb3B0cy5yZXRhaW5kZWFkdHVwbGVzLCBvcHRzLm9yaWdpbiwKQEAgLTk1OSw2ICsxMDY1 LDggQEAgQWx0ZXJTdWJzY3JpcHRpb25fcmVmcmVzaChTdWJzY3JpcHRpb24gKnN1YiwgYm9vbCBj b3B5X2RhdGEsCiAJCWlmICh2YWxpZGF0ZV9wdWJsaWNhdGlvbnMpCiAJCQljaGVja19wdWJsaWNh dGlvbnMod3Jjb25uLCB2YWxpZGF0ZV9wdWJsaWNhdGlvbnMpOwogCisJCWNoZWNrX3B1YmxpY2F0 aW9uc19leGNlcHRfbGlzdCh3cmNvbm4sIHN1Yi0+cHVibGljYXRpb25zKTsKKwogCQkvKiBHZXQg dGhlIHJlbGF0aW9uIGxpc3QgZnJvbSBwdWJsaXNoZXIuICovCiAJCXB1YnJlbHMgPSBmZXRjaF9y ZWxhdGlvbl9saXN0KHdyY29ubiwgc3ViLT5wdWJsaWNhdGlvbnMpOwogCkBAIC0yOTQwLDYgKzMw NDgsOCBAQCBmZXRjaF9yZWxhdGlvbl9saXN0KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0 ICpwdWJsaWNhdGlvbnMpCiAJCQkJCQkgcHViX25hbWVzLmRhdGEpOwogCX0KIAorCWVsb2coTE9H LCAiZmV0Y2hfcmVsYXRpb25fbGlzdDogZXhlY3V0aW5nIHF1ZXJ5IHRvIGZldGNoIGVmZmVjdGl2 ZSByZWxhdGlvbnM6IFxuJXMiLAorCQkgY21kLmRhdGEpOwogCXBmcmVlKHB1Yl9uYW1lcy5kYXRh KTsKIAogCXJlcyA9IHdhbHJjdl9leGVjKHdyY29ubiwgY21kLmRhdGEsIGNvbHVtbl9jb3VudCwg dGFibGVSb3cpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBmOTc2YzBlNWM3ZS4uYTUz NTFmYzU5YzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC04Njg4LDcgKzg2ODgsNyBA QCBBVEV4ZWNTZXRFeHByZXNzaW9uKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVs LCBjb25zdCBjaGFyICpjb2xOYW1lLAogCSAqIGV4cHJlc3Npb25zLgogCSAqLwogCWlmIChhdHRn ZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMICYmCi0JCUdldFJlbGF0aW9u UHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQocmVsKSkgIT0gTklMKQorCQlHZXRSZWxhdGlv blB1YmxpY2F0aW9ucyhSZWxhdGlvbkdldFJlbGlkKHJlbCksIE5VTEwsIE5VTEwpKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK IAkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSAvIFNFVCBFWFBSRVNTSU9OIGlzIG5vdCBzdXBwb3J0 ZWQgZm9yIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaW4gdGFibGVzIHRoYXQgYXJlIHBhcnQg b2YgYSBwdWJsaWNhdGlvbiIpLApAQCAtMTg4ODQsNyArMTg4ODQsNyBAQCBBVFByZXBDaGFuZ2VQ ZXJzaXN0ZW5jZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwgYm9vbCB0b0xv Z2dlZCkKIAkgKiBVTkxPR0dFRCwgYXMgVU5MT0dHRUQgdGFibGVzIGNhbid0IGJlIHB1Ymxpc2hl ZC4KIAkgKi8KIAlpZiAoIXRvTG9nZ2VkICYmCi0JCUdldFJlbGF0aW9uUHVibGljYXRpb25zKFJl bGF0aW9uR2V0UmVsaWQocmVsKSkgIT0gTklMKQorCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhS ZWxhdGlvbkdldFJlbGlkKHJlbCksIE5VTEwsIE5VTEwpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJ CSBlcnJtc2coImNhbm5vdCBjaGFuZ2UgdGFibGUgXCIlc1wiIHRvIHVubG9nZ2VkIGJlY2F1c2Ug aXQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bh cnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IGM1NjcyNTJhY2M0 Li5kZTQzNzRlNzRkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysg Yi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0yMDMsNiArMjAzLDcgQEAgc3RhdGljIHZv aWQgcHJvY2Vzc0NBU2JpdHMoaW50IGNhc19iaXRzLCBpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIg KmNvbnN0clR5cGUsCiBzdGF0aWMgUGFydGl0aW9uU3RyYXRlZ3kgcGFyc2VQYXJ0aXRpb25TdHJh dGVneShjaGFyICpzdHJhdGVneSwgaW50IGxvY2F0aW9uLAogCQkJCQkJCQkJCQkJY29yZV95eXNj YW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIHZvaWQgcHJlcHJvY2Vzc19wdWJfYWxsX29ianR5cGVf bGlzdChMaXN0ICphbGxfb2JqZWN0c19saXN0LAorCQkJCQkJCQkJCQlMaXN0ICoqcHVib2JqZWN0 cywKIAkJCQkJCQkJCQkJYm9vbCAqYWxsX3RhYmxlcywKIAkJCQkJCQkJCQkJYm9vbCAqYWxsX3Nl cXVlbmNlcywKIAkJCQkJCQkJCQkJY29yZV95eXNjYW5fdCB5eXNjYW5uZXIpOwpAQCAtNDU1LDYg KzQ1Niw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxu YW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJCQkJVHJpZ2dlclRyYW5zaXRpb25z IFRyaWdnZXJSZWZlcmVuY2luZwogCQkJCXZhY3V1bV9yZWxhdGlvbl9saXN0IG9wdF92YWN1dW1f cmVsYXRpb25fbGlzdAogCQkJCWRyb3Bfb3B0aW9uX2xpc3QgcHViX29ial9saXN0IHB1Yl9hbGxf b2JqX3R5cGVfbGlzdAorCQkJCXB1Yl9leGNlcHRfb2JqX2xpc3Qgb3B0X3B1Yl9leGNlcHRfY2xh dXNlCiAKICV0eXBlIDxyZXRjbGF1c2U+IHJldHVybmluZ19jbGF1c2UKICV0eXBlIDxub2RlPgly ZXR1cm5pbmdfb3B0aW9uCkBAIC01OTIsNiArNTk0LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1 cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5 KTsKICV0eXBlIDxub2RlPgl2YXJfdmFsdWUgem9uZV92YWx1ZQogJXR5cGUgPHJvbGVzcGVjPiBh dXRoX2lkZW50IFJvbGVTcGVjIG9wdF9ncmFudGVkX2J5CiAldHlwZSA8cHVibGljYXRpb25vYmpl Y3RzcGVjPiBQdWJsaWNhdGlvbk9ialNwZWMKKyV0eXBlIDxwdWJsaWNhdGlvbm9iamVjdHNwZWM+ IFB1YmxpY2F0aW9uRXhjZXB0T2JqU3BlYwogJXR5cGUgPHB1YmxpY2F0aW9uYWxsb2JqZWN0c3Bl Yz4gUHVibGljYXRpb25BbGxPYmpTcGVjCiAKICV0eXBlIDxrZXl3b3JkPiB1bnJlc2VydmVkX2tl eXdvcmQgdHlwZV9mdW5jX25hbWVfa2V5d29yZApAQCAtMTA3OTIsNyArMTA3OTUsNyBAQCBBbHRl ck93bmVyU3RtdDogQUxURVIgQUdHUkVHQVRFIGFnZ3JlZ2F0ZV93aXRoX2FyZ3R5cGVzIE9XTkVS IFRPIFJvbGVTcGVjCiAgKgogICogcHViX2FsbF9vYmpfdHlwZSBpcyBvbmUgb2Y6CiAgKgotICoJ CVRBQkxFUworICoJCVRBQkxFUyBbRVhDRVBUIFtUQUJMRV0gKCB0YWJsZSBbLCAuLi5dICldCiAg KgkJU0VRVUVOQ0VTCiAgKgogICogQ1JFQVRFIFBVQkxJQ0FUSU9OIEZPUiBwdWJfb2JqIFssIC4u Ll0gW1dJVEggb3B0aW9uc10KQEAgLTEwODE4LDcgKzEwODIxLDggQEAgQ3JlYXRlUHVibGljYXRp b25TdG10OgogCQkJCQlDcmVhdGVQdWJsaWNhdGlvblN0bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVQ dWJsaWNhdGlvblN0bXQpOwogCiAJCQkJCW4tPnB1Ym5hbWUgPSAkMzsKLQkJCQkJcHJlcHJvY2Vz c19wdWJfYWxsX29ianR5cGVfbGlzdCgkNSwgJm4tPmZvcl9hbGxfdGFibGVzLAorCQkJCQlwcmVw cm9jZXNzX3B1Yl9hbGxfb2JqdHlwZV9saXN0KCQ1LCAmbi0+cHVib2JqZWN0cywKKwkJCQkJCQkJ CQkJCQkmbi0+Zm9yX2FsbF90YWJsZXMsCiAJCQkJCQkJCQkJCQkJJm4tPmZvcl9hbGxfc2VxdWVu Y2VzLAogCQkJCQkJCQkJCQkJCXl5c2Nhbm5lcik7CiAJCQkJCW4tPm9wdGlvbnMgPSAkNjsKQEAg LTEwOTMzLDExICsxMDkzNywxOSBAQCBwdWJfb2JqX2xpc3Q6CVB1YmxpY2F0aW9uT2JqU3BlYwog CQkJCQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CiAJOwogCitvcHRfcHViX2V4Y2VwdF9jbGF1 c2U6CisJCQlFWENFUFQgb3B0X3RhYmxlICcoJyBwdWJfZXhjZXB0X29ial9saXN0ICcpJwl7ICQk ID0gJDQ7IH0KKwkJCXwgLypFTVBUWSovCQkJCQkJCQkJCXsgJCQgPSBOSUw7IH0KKwkJOworCiBQ dWJsaWNhdGlvbkFsbE9ialNwZWM6Ci0JCQkJQUxMIFRBQkxFUworCQkJCUFMTCBUQUJMRVMgb3B0 X3B1Yl9leGNlcHRfY2xhdXNlCiAJCQkJCXsKIAkJCQkJCSQkID0gbWFrZU5vZGUoUHVibGljYXRp b25BbGxPYmpTcGVjKTsKIAkJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05fQUxMX1RB QkxFUzsKKwkJCQkJCSQkLT5leGNlcHRfdGFibGVzID0gJDM7CisJCQkJCQlpZigkJC0+ZXhjZXB0 X3RhYmxlcyAhPSBOVUxMKQorCQkJCQkJCXByZXByb2Nlc3NfcHVib2JqX2xpc3QoJCQtPmV4Y2Vw dF90YWJsZXMsIHl5c2Nhbm5lcik7CiAJCQkJCQkkJC0+bG9jYXRpb24gPSBAMTsKIAkJCQkJfQog CQkJCXwgQUxMIFNFUVVFTkNFUwpAQCAtMTA5NTQsNiArMTA5NjYsMjMgQEAgcHViX2FsbF9vYmpf dHlwZV9saXN0OglQdWJsaWNhdGlvbkFsbE9ialNwZWMKIAkJCQkJeyAkJCA9IGxhcHBlbmQoJDEs ICQzKTsgfQogCTsKIAorUHVibGljYXRpb25FeGNlcHRPYmpTcGVjOgorCQkJIHJlbGF0aW9uX2V4 cHIKKwkJCQl7CisJCQkJCSQkID0gbWFrZU5vZGUoUHVibGljYXRpb25PYmpTcGVjKTsKKwkJCQkJ JCQtPnB1Ym9ianR5cGUgPSBQVUJMSUNBVElPTk9CSl9FWENFUFRfVEFCTEU7CisJCQkJCSQkLT5w dWJ0YWJsZSA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uVGFibGUpOworCQkJCQkkJC0+cHVidGFibGUt PmV4Y2VwdCA9IHRydWU7CisJCQkJCSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMTsKKwkJCQkJ JCQtPmxvY2F0aW9uID0gQDE7CisJCQkJfQorCTsKKworcHViX2V4Y2VwdF9vYmpfbGlzdDogUHVi bGljYXRpb25FeGNlcHRPYmpTcGVjCisJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJ fCBwdWJfZXhjZXB0X29ial9saXN0ICcsJyBQdWJsaWNhdGlvbkV4Y2VwdE9ialNwZWMKKwkJCQkJ eyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQorCTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgpAQCAtMTk4MTIsOCArMTk4NDEsOSBAQCBwYXJzZVBhcnRpdGlvblN0cmF0ZWd5KGNoYXIgKnN0 cmF0ZWd5LCBpbnQgbG9jYXRpb24sIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogICogQWxzbywg Y2hlY2tzIGlmIHRoZSBwdWJfb2JqZWN0X3R5cGUgaGFzIGJlZW4gc3BlY2lmaWVkIG1vcmUgdGhh biBvbmNlLgogICovCiBzdGF0aWMgdm9pZAotcHJlcHJvY2Vzc19wdWJfYWxsX29ianR5cGVfbGlz dChMaXN0ICphbGxfb2JqZWN0c19saXN0LCBib29sICphbGxfdGFibGVzLAotCQkJCQkJCQlib29s ICphbGxfc2VxdWVuY2VzLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKK3ByZXByb2Nlc3NfcHVi X2FsbF9vYmp0eXBlX2xpc3QoTGlzdCAqYWxsX29iamVjdHNfbGlzdCwgTGlzdCAqKnB1Ym9iamVj dHMsCisJCQkJCQkJCWJvb2wgKmFsbF90YWJsZXMsIGJvb2wgKmFsbF9zZXF1ZW5jZXMsCisJCQkJ CQkJCWNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogewogCWlmICghYWxsX29iamVjdHNfbGlzdCkK IAkJcmV0dXJuOwpAQCAtMTk4MzMsNiArMTk4NjMsNyBAQCBwcmVwcm9jZXNzX3B1Yl9hbGxfb2Jq dHlwZV9saXN0KExpc3QgKmFsbF9vYmplY3RzX2xpc3QsIGJvb2wgKmFsbF90YWJsZXMsCiAJCQkJ CQlwYXJzZXJfZXJycG9zaXRpb24ob2JqLT5sb2NhdGlvbikpOwogCiAJCQkqYWxsX3RhYmxlcyA9 IHRydWU7CisJCQkqcHVib2JqZWN0cyA9IGxpc3RfY29uY2F0KCpwdWJvYmplY3RzLCBvYmotPmV4 Y2VwdF90YWJsZXMpOwogCQl9CiAJCWVsc2UgaWYgKG9iai0+cHVib2JqdHlwZSA9PSBQVUJMSUNB VElPTl9BTExfU0VRVUVOQ0VTKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC90YWJsZXN5bmMuYwppbmRleCAxOWEzYzIxYTg2My4uYzVjNmMwZDQ4ZTggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAtNzE2LDIxICs3MTYsMjgg QEAgY29weV9yZWFkX2RhdGEodm9pZCAqb3V0YnVmLCBpbnQgbWlucmVhZCwgaW50IG1heHJlYWQp CiAgKiBtZXNzYWdlIHByb3ZpZGVzIGR1cmluZyByZXBsaWNhdGlvbi4KICAqCiAgKiBUaGlzIGZ1 bmN0aW9uIGFsc28gcmV0dXJucyAoYSkgdGhlIHJlbGF0aW9uIHF1YWxpZmljYXRpb25zIHRvIGJl IHVzZWQgaW4KLSAqIHRoZSBDT1BZIGNvbW1hbmQsIGFuZCAoYikgd2hldGhlciB0aGUgcmVtb3Rl IHJlbGF0aW9uIGhhcyBwdWJsaXNoZWQgYW55Ci0gKiBnZW5lcmF0ZWQgY29sdW1uLgorICogdGhl IENPUFkgY29tbWFuZCwgKGIpIHdoZXRoZXIgdGhlIHJlbW90ZSByZWxhdGlvbiBoYXMgcHVibGlz aGVkIGFueQorICogZ2VuZXJhdGVkIGNvbHVtbiwgYW5kIChjKSBjb21wdXRlcyB0aGUgZWZmZWN0 aXZlIHNldCBvZiByZWxhdGlvbnMgdG8gYmUgdXNlZAorICogYXMgQ09QWSBzb3VyY2VzIHdoZW4g ZXhjbHVzaW9ucyBhcmUgcHJlc2VudC4gV2hlbiBubyBleGNsdXNpb25zIGV4aXN0LCB0aGUKKyAq IGxpc3QgcmVtYWlucyBlbXB0eSBhbmQgdGhlIHJvb3QgcmVsYXRpb24gaXMgdXNlZCBhcy1pcy4g V2hlbiBleGNsdXNpb25zCisgKiBleGlzdCwgdGhlIGxpc3QgY29udGFpbnMgbGVhZiByZWxhdGlv bnMgdGhhdCBhcmUgbm90IGV4Y2x1ZGVkIGFuZCBtdXN0IGJlCisgKiBjb21iaW5lZCB1c2luZyBV TklPTiBBTEwuCiAgKi8KIHN0YXRpYyB2b2lkCiBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFy ICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCi0JCQkJ CQlMaXN0ICoqcXVhbCwgYm9vbCAqZ2VuY29sX3B1Ymxpc2hlZCkKKwkJCQkJCUxpc3QgKipxdWFs LCBib29sICpnZW5jb2xfcHVibGlzaGVkLAorCQkJCQkJTGlzdCAqKmVmZmVjdGl2ZV9yZWxhdGlv bnMpCiB7CiAJV2FsUmN2RXhlY1Jlc3VsdCAqcmVzOwogCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlU dXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlPaWQJCQl0YWJsZVJvd1tdID0ge09JRE9JRCwgQ0hBUk9J RCwgQ0hBUk9JRH07CisJT2lkCQkJdGFibGVSb3dbXSA9IHtPSURPSUQsIENIQVJPSUQsIENIQVJP SUQsIEJPT0xPSUR9OwogCU9pZAkJCWF0dHJSb3dbXSA9IHtJTlQyT0lELCBURVhUT0lELCBPSURP SUQsIEJPT0xPSUQsIEJPT0xPSUR9OwogCU9pZAkJCXF1YWxSb3dbXSA9IHtURVhUT0lEfTsKKwlP aWQJCQlmaWx0ZXJ0YWJsZVJvd1tdID0ge1RFWFRPSUQsIFRFWFRPSUR9OwogCWJvb2wJCWlzbnVs bDsKIAlpbnQJCQluYXR0OworCWJvb2wJCWlzX3BhcnRpdGlvbjsKIAlTdHJpbmdJbmZvCXB1Yl9u YW1lcyA9IE5VTEw7CiAJQml0bWFwc2V0ICAqaW5jbHVkZWRfY29scyA9IE5VTEw7CiAJaW50CQkJ c2VydmVyX3ZlcnNpb24gPSB3YWxyY3Zfc2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2 Q29ubik7CkBAIC03NDAsNyArNzQ3LDcgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAq bnNwbmFtZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLAogCiAJLyog Rmlyc3QgZmV0Y2ggT2lkIGFuZCByZXBsaWNhIGlkZW50aXR5LiAqLwogCWluaXRTdHJpbmdJbmZv KCZjbWQpOwotCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIlNFTEVDVCBjLm9pZCwgYy5yZWxyZXBs aWRlbnQsIGMucmVsa2luZCIKKwlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRUxFQ1QgYy5vaWQs IGMucmVscmVwbGlkZW50LCBjLnJlbGtpbmQsIGMucmVsaXNwYXJ0aXRpb24iCiAJCQkJCSAiICBG Uk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgYyIKIAkJCQkJICIgIElOTkVSIEpPSU4gcGdfY2F0YWxv Zy5wZ19uYW1lc3BhY2UgbiIKIAkJCQkJICIgICAgICAgIE9OIChjLnJlbG5hbWVzcGFjZSA9IG4u b2lkKSIKQEAgLTc3MCw2ICs3NzcsOCBAQCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpu c3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCiAJQXNzZXJ0 KCFpc251bGwpOwogCWxyZWwtPnJlbGtpbmQgPSBEYXR1bUdldENoYXIoc2xvdF9nZXRhdHRyKHNs b3QsIDMsICZpc251bGwpKTsKIAlBc3NlcnQoIWlzbnVsbCk7CisJaXNfcGFydGl0aW9uID0gRGF0 dW1HZXRCb29sKHNsb3RfZ2V0YXR0cihzbG90LCA0LCAmaXNudWxsKSk7CisJQXNzZXJ0KCFpc251 bGwpOwogCiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKIAl3YWxyY3ZfY2xl YXJfcmVzdWx0KHJlcyk7CkBAIC05NTQsNiArOTYzLDc1IEBAIGZldGNoX3JlbW90ZV90YWJsZV9p bmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsIExvZ2ljYWxSZXBSZWxhdGlvbiAqbHJl bCwKIAogCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKIAorCWlmIChzZXJ2ZXJfdmVyc2lvbiA+ PSAxOTAwMDAgJiYgIWlzX3BhcnRpdGlvbiAmJgorCQlscmVsLT5yZWxraW5kID09IFJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7CisKKwkJLyoK KwkJICogVGhpcyBxdWVyeSByZWN1cnNpdmVseSB0cmF2ZXJzZXMgdGhlIGluaGVyaXRhbmNlIChw YXJ0aXRpb24pIHRyZWUKKwkJICogc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gdGFibGUgT0lEIGFu ZCBkZXRlcm1pbmVzIHdoaWNoIGxlYWYKKwkJICogcmVsYXRpb25zIHNob3VsZCBiZSBpbmNsdWRl ZCBmb3IgcmVwbGljYXRpb24uIEV4Y2x1c2lvbiBwcm9wYWdhdGVzCisJCSAqIGZyb20gcGFyZW50 IHRvIGNoaWxkLCBhbmQgYSByZWxhdGlvbiBpcyBhbHNvIHRyZWF0ZWQgYXMgZXhjbHVkZWQgaWYK KwkJICogaXQgaXMgZXhwbGljaXRseSBtYXJrZWQgd2l0aCBwcmV4Y2VwdCA9IHRydWUgaW4gcGdf cHVibGljYXRpb25fcmVsCisJCSAqIGZvciB0aGUgc3BlY2lmaWVkIHB1YmxpY2F0aW9ucy4gVGhl IGZpbmFsIHJlc3VsdCByZXR1cm5zIG9ubHkgbm9uCisJCSAqIGV4Y2x1ZGVkIGxlYWYgcmVsYXRp b25zLgorCQkgKi8KKwkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiU0VMRUNUIG5zcG5hbWUsIHJl bG5hbWUgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fZWZmZWN0aXZlX3RhYmxlcygldSwgQVJSQVlb JXNdKTsiLAorCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0YSk7 CisKKwkJZWxvZyhMT0csICJFeGVjdXRpbmcgcXVlcnkgdG8gZ2V0IHRoZSBwYXJ0aXRpb24gdGFi bGVzIHRvIGJlIGNvcGllZDpcbiVzIiwgY21kLmRhdGEpOworCQlyZXMgPSB3YWxyY3ZfZXhlYyhM b2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwKKwkJCQkJCSAgbGVuZ3Rob2YoZmlsdGVy dGFibGVSb3cpLCBmaWx0ZXJ0YWJsZVJvdyk7CisKKwkJaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJD Vl9PS19UVVBMRVMpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfQ09O TkVDVElPTl9GQUlMVVJFKSwKKwkJCQkJZXJybXNnKCJjb3VsZCBub3QgZ2V0IGVmZmVjdGl2ZSBp bmNsdWRlZCB0YWJsZSBsaXN0IGZvciB0YWJsZSBcIiVzLiVzXCIgZnJvbSBwdWJsaXNoZXI6ICVz IiwKKwkJCQkJCSAgIG5zcG5hbWUsIHJlbG5hbWUsIHJlcy0+ZXJyKSk7CisKKwkJLyoKKwkJICog U3RvcmUgdGhlIHRhYmxlcyBhcyBhIGxpc3Qgb2Ygc2NoZW1hbmFtZSBhbmQgdGFibGVuYW1lLgor CQkgKi8KKwkJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywg JlRUU09wc01pbmltYWxUdXBsZSk7CisJCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChy ZXMtPnR1cGxlc3RvcmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwkJeworCQkJUXVhbGlmaWVkUmVs YXRpb25OYW1lICpyZWxpbmZvID0gcGFsbG9jX29iamVjdChRdWFsaWZpZWRSZWxhdGlvbk5hbWUp OworCisJCQlyZWxpbmZvLT5uc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0 dHIoc2xvdCwgMSwgJmlzbnVsbCkpOworCQkJQXNzZXJ0KCFpc251bGwpOworCQkJcmVsaW5mby0+ cmVsbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251 bGwpKTsKKwkJCUFzc2VydCghaXNudWxsKTsKKworCQkJKmVmZmVjdGl2ZV9yZWxhdGlvbnMgPSBs YXBwZW5kKCplZmZlY3RpdmVfcmVsYXRpb25zLCByZWxpbmZvKTsKKworCQkJRXhlY0NsZWFyVHVw bGUoc2xvdCk7CisJCX0KKworCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwor CisJCS8qCisJCSAqIElmIHRoZXJlIGlzIGV4YWN0bHkgb25lIGl0ZW0gaW4gdGhlIGVmZmVjdGl2 ZV9yZWxhdGlvbnMgbGlzdCBhbmQgaXQKKwkJICogZXF1YWxzIHRoZSB0YWJsZSBiZWluZyBwcm9j ZXNzZWQsIHRoYXQgbWVhbnMgbm8gYWN0dWFsIGV4Y2x1c2lvbgorCQkgKiBvY2N1cnJlZC4KKwkJ ICovCisJCWlmIChsaXN0X2xlbmd0aCgqZWZmZWN0aXZlX3JlbGF0aW9ucykgPT0gMSkKKwkJewor CQkJUXVhbGlmaWVkUmVsYXRpb25OYW1lICpyZWxpbmZvOworCisJCQlyZWxpbmZvID0gbGluaXRp YWwoKmVmZmVjdGl2ZV9yZWxhdGlvbnMpOworCQkJaWYgKHN0cmNtcChuc3BuYW1lLCByZWxpbmZv LT5uc3BuYW1lKSA9PSAwICYmCisJCQkJc3RyY21wKHJlbG5hbWUsIHJlbGluZm8tPnJlbG5hbWUp ID09IDApCisJCQl7CisJCQkJcGZyZWUocmVsaW5mby0+bnNwbmFtZSk7CisJCQkJcGZyZWUocmVs aW5mby0+cmVsbmFtZSk7CisJCQkJbGlzdF9mcmVlX2RlZXAoKmVmZmVjdGl2ZV9yZWxhdGlvbnMp OworCQkJCSplZmZlY3RpdmVfcmVsYXRpb25zID0gTklMOworCQkJfQorCQl9CisJfQorCiAJLyoK IAkgKiBHZXQgcmVsYXRpb24ncyByb3cgZmlsdGVyIGV4cHJlc3Npb25zLiBESVNUSU5DVCBhdm9p ZHMgdGhlIHNhbWUKIAkgKiBleHByZXNzaW9uIG9mIGEgdGFibGUgaW4gbXVsdGlwbGUgcHVibGlj YXRpb25zIGZyb20gYmVpbmcgaW5jbHVkZWQKQEAgLTEwNDMsNiArMTEyMSw3IEBAIGNvcHlfdGFi bGUoUmVsYXRpb24gcmVsKQogCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsbWFwZW50cnk7CiAJ TG9naWNhbFJlcFJlbGF0aW9uIGxyZWw7CiAJTGlzdAkgICAqcXVhbCA9IE5JTDsKKwlMaXN0CSAg ICplZmZlY3RpdmVfcmVsYXRpb25zID0gTklMOwogCVdhbFJjdkV4ZWNSZXN1bHQgKnJlczsKIAlT dHJpbmdJbmZvRGF0YSBjbWQ7CiAJQ29weUZyb21TdGF0ZSBjc3RhdGU7CkBAIC0xMDU0LDcgKzEx MzMsNyBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkKIAkvKiBHZXQgdGhlIHB1Ymxpc2hlciBy ZWxhdGlvbiBpbmZvLiAqLwogCWZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGdldF9uYW1lc3BhY2Vf bmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpKSwKIAkJCQkJCQlSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpLCAmbHJlbCwgJnF1YWwsCi0JCQkJCQkJJmdlbmNvbF9wdWJsaXNoZWQpOwor CQkJCQkJCSZnZW5jb2xfcHVibGlzaGVkLCAmZWZmZWN0aXZlX3JlbGF0aW9ucyk7CiAKIAkvKiBQ dXQgdGhlIHJlbGF0aW9uIGludG8gcmVsbWFwLiAqLwogCWxvZ2ljYWxyZXBfcmVsbWFwX3VwZGF0 ZSgmbHJlbCk7CkBAIC0xMDY2LDkgKzExNDUsNjEgQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwp CiAJLyogU3RhcnQgY29weSBvbiB0aGUgcHVibGlzaGVyLiAqLwogCWluaXRTdHJpbmdJbmZvKCZj bWQpOwogCisKKwlpZiAoZWZmZWN0aXZlX3JlbGF0aW9ucyAmJiBsaXN0X2xlbmd0aChlZmZlY3Rp dmVfcmVsYXRpb25zKSkKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQkvKgorCQkgKiBC dWlsZCBhIHNpbmdsZSBDT1BZIGNvbW1hbmQgdG8gc3luY2hyb25pemUgYWxsIHJlc29sdmVkIHJl bGF0aW9ucworCQkgKiBpbnRvIHRoZSByb290IHRhYmxlLgorCQkgKgorCQkgKiBUaGUgYXJyYXkg J2VmZmVjdGl2ZV9yZWxhdGlvbnMnIGNvbnRhaW5zIHRoZSBsZWFmIHRhYmxlcyBvZgorCQkgKiBw YXJ0aXRpb24gaGllcmFyY2hpZXMsIHdpdGggZXhjbHVkZWQgc3VidHJlZXMgcmVtb3ZlZCBhY2Nv cmRpbmcgdG8KKwkJICogdGhlIEVYQ0VQVCBjbGF1c2VzLiBUaGlzIGFwcGxpZXMgb25seSB3aGVu CisJCSAqICdwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCcgaXMgZW5hYmxlZCwgc2luY2UgdGhl IGluaXRpYWwgc3luYworCQkgKiBtdXN0IHJvdXRlIGFsbCBjaGFuZ2VzIHRvIHRoZSByb290IHRh YmxlLgorCQkgKgorCQkgKiBXZSBjb25zdHJ1Y3QgYSBVTklPTiBBTEwgcXVlcnkgdGhhdCBjb21i aW5lcyBkYXRhIGZyb20gbXVsdGlwbGUKKwkJICogbGVhZiByZWxhdGlvbnMgaW50byBvbmUgc3Vi LUNPUFkgc3RhdGVtZW50LCBlbnN1cmluZyBhbGwgcm93cyBhcmUKKwkJICogY29waWVkIGNvbnNp c3RlbnRseSBpbnRvIHRoZSByb290IHRhYmxlLgorCQkgKi8KKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmY21kLCAiQ09QWSAoXG4iKTsKKwkJZm9yZWFjaF9wdHIoUXVhbGlmaWVkUmVsYXRpb25O YW1lLCByZWxpbmZvLCBlZmZlY3RpdmVfcmVsYXRpb25zKQorCQl7CisJCQlpZiAoIWZpcnN0KQor CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIlVOSU9OIEFMTFxuIik7CisKKwkJCWZp cnN0ID0gZmFsc2U7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIlNFTEVDVCAi KTsKKworCQkJLyogSWYgdGhlIHRhYmxlIGhhcyBjb2x1bW5zLCB0aGVuIHNwZWNpZnkgdGhlIGNv bHVtbnMgKi8KKwkJCWlmIChscmVsLm5hdHRzKQorCQkJeworCQkJCWZvciAoaW50IGkgPSAwOyBp IDwgbHJlbC5uYXR0czsgaSsrKQorCQkJCXsKKwkJCQkJaWYgKGkgPiAwKQorCQkJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmY21kLCAiLCAiKTsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjbWQsIHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOworCQkJCX0KKwkJ CX0KKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIgKiAiKTsKKwor CQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiIEZST00gICVzXG4iLAorCQkJCQkJCSBxdW90ZV9x dWFsaWZpZWRfaWRlbnRpZmllcihyZWxpbmZvLT5uc3BuYW1lLAorCQkJCQkJCQkJCQkJCQlyZWxp bmZvLT5yZWxuYW1lKSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIp XG4iKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiVE8gU1RET1VUIik7CisJfQog CS8qIFJlZ3VsYXIgb3IgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBubyByb3cgZmlsdGVyIG9yIGdl bmVyYXRlZCBjb2x1bW5zICovCi0JaWYgKChscmVsLnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElP TiB8fCBscmVsLnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJJiYgcXVh bCA9PSBOSUwgJiYgIWdlbmNvbF9wdWJsaXNoZWQpCisJZWxzZSBpZiAoKGxyZWwucmVsa2luZCA9 PSBSRUxLSU5EX1JFTEFUSU9OIHx8CisJCQkgIGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJ VElPTkVEX1RBQkxFKSAmJgorCQkJIHF1YWwgPT0gTklMICYmICFnZW5jb2xfcHVibGlzaGVkKQog CXsKIAkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiQ09QWSAlcyIsCiAJCQkJCQkgcXVvdGVfcXVh bGlmaWVkX2lkZW50aWZpZXIobHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUpKTsKQEAgLTExNTcs NiArMTI4OCw3IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCX0KIAogCXJlcyA9IHdhbHJj dl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLCAwLCBOVUxMKTsKKwllbG9n KExPRywgIlRhYmxlc3luYyB3b3JrZXI6IEV4ZWN1dGluZyBxdWVyeSB0byBnZXQgdGhlIGluaXRp YWwgc3luYyBkYXRhOlxuJXMiLCBjbWQuZGF0YSk7CiAJcGZyZWUoY21kLmRhdGEpOwogCWlmIChy ZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfQ09QWV9PVVQpCiAJCWVyZXBvcnQoRVJST1IsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCA3YTQ5MTg1ZDI5 ZC4uZDM2ZDgyZTE1YTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYwpAQCAtMTc5NywxMiArMTc5NywyMSBAQCBwZ291dHB1dF9zaHV0ZG93bihMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgpCiAgKiB0byBzaWxlbnRseSBjb250aW51ZSB0aGUgcmVwbGlj YXRpb24gaW4gdGhlIGFic2VuY2Ugb2YgYSBtaXNzaW5nIHB1YmxpY2F0aW9uLgogICogVGhpcyBp cyByZXF1aXJlZCBiZWNhdXNlIHdlIGFsbG93IHRoZSB1c2VycyB0byBjcmVhdGUgcHVibGljYXRp b25zIGFmdGVyIHRoZXkKICAqIGhhdmUgc3BlY2lmaWVkIHRoZSByZXF1aXJlZCBwdWJsaWNhdGlv bnMgYXQgdGhlIHRpbWUgb2YgcmVwbGljYXRpb24gc3RhcnQuCisgKgorICogV2UgYWxzbyBlbmZv cmNlIHRoYXQgbm8gbW9yZSB0aGFuIG9uZSBwdWJsaWNhdGlvbiBpbiB0aGUgbGlzdCBtYXkgY29u dGFpbgorICogYW4gRVhDRVBUIFRBQkxFIGNsYXVzZS4gVXNpbmcgbXVsdGlwbGUgcHVibGljYXRp b25zIHdpdGggRVhDRVBUIFRBQkxFIGNsYXVzZQorICogaXMgY3VycmVudGx5IHVuc3VwcG9ydGVk IHRvIHByZXZlbnQgbm9uLWRldGVybWluaXN0aWMgZmlsdGVyaW5nIGJlaGF2aW9yCisgKiBhY3Jv c3Mgb3ZlcmxhcHBpbmcgcHVibGljYXRpb24gc2V0cy4KKyAqCisgKiBHaXZlbiBhIGxpc3Qgb2Yg cHVibGljYXRpb24gbmFtZXMsIGxvb2sgdXAgZWFjaCBwdWJsaWNhdGlvbiBhbmQgcmV0dXJuCisg KiBhIGxpc3Qgb2YgUHVibGljYXRpb24gb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWxp ZCBwdWJsaWNhdGlvbnMuCiAgKi8KIHN0YXRpYyBMaXN0ICoKIExvYWRQdWJsaWNhdGlvbnMoTGlz dCAqcHVibmFtZXMpCiB7CiAJTGlzdAkgICAqcmVzdWx0ID0gTklMOwogCUxpc3RDZWxsICAgKmxj OworCUxpc3QJICAgKnB1Ym5hbWVzX3dpdGhfZXhjZXB0ID0gTklMOwogCiAJZm9yZWFjaChsYywg cHVibmFtZXMpCiAJewpAQCAtMTgxMCw3ICsxODE5LDEzIEBAIExvYWRQdWJsaWNhdGlvbnMoTGlz dCAqcHVibmFtZXMpCiAJCVB1YmxpY2F0aW9uICpwdWIgPSBHZXRQdWJsaWNhdGlvbkJ5TmFtZShw dWJuYW1lLCB0cnVlKTsKIAogCQlpZiAocHViKQorCQl7CiAJCQlyZXN1bHQgPSBsYXBwZW5kKHJl c3VsdCwgcHViKTsKKworCQkJLyogQ2hlY2sgaWYgdGhpcyBwdWJsaWNhdGlvbiBoYXMgYW4gRVhD RVBUIFRBQkxFIGxpc3QuICovCisJCQlpZiAocHVibGljYXRpb25faGFzX2FueV9leGNlcHRfdGFi bGUocHViLT5vaWQpKQorCQkJCXB1Ym5hbWVzX3dpdGhfZXhjZXB0ID0gbGFwcGVuZChwdWJuYW1l c193aXRoX2V4Y2VwdCwgcHN0cmR1cChwdWJuYW1lKSk7CisJCX0KIAkJZWxzZQogCQkJZXJlcG9y dChXQVJOSU5HLAogCQkJCQllcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJ VEVfU1RBVEUpLApAQCAtMTgxOSw2ICsxODM0LDI1IEBAIExvYWRQdWJsaWNhdGlvbnMoTGlzdCAq cHVibmFtZXMpCiAJCQkJCWVycmhpbnQoIkNyZWF0ZSB0aGUgcHVibGljYXRpb24gaWYgaXQgZG9l cyBub3QgZXhpc3QuIikpOwogCX0KIAorCS8qCisJICogSWYgbW9yZSB0aGFuIG9uZSBwdWJsaWNh dGlvbiBoYXMgYW4gRVhDRVBUIGxpc3QsIHRocm93IGFuIGVycm9yIGxpc3RpbmcKKwkgKiBhbGwg dGhlIHByb2JsZW1hdGljIHB1YmxpY2F0aW9ucy4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgocHVi bmFtZXNfd2l0aF9leGNlcHQpID4gMSkKKwl7CisJCVN0cmluZ0luZm9EYXRhIHB1Yl9uYW1lc19z dHI7CisKKwkJaW5pdFN0cmluZ0luZm8oJnB1Yl9uYW1lc19zdHIpOworCQlHZXRQdWJsaWNhdGlv bnNTdHIocHVibmFtZXNfd2l0aF9leGNlcHQsICZwdWJfbmFtZXNfc3RyLCB0cnVlKTsKKworCQll cmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJCWVycm1zZygiY2Fubm90IHVzZSBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgd2l0aCBFWENF UFQgVEFCTEUgbGlzdHMiKSwKKwkJCQllcnJkZXRhaWwoIlB1YmxpY2F0aW9ucyAoJXMpIGRlZmlu ZSBFWENFUFQgVEFCTEUgY2xhdXNlcy4iLAorCQkJCQkJICBwdWJfbmFtZXNfc3RyLmRhdGEpKTsK Kwl9CisKKwlsaXN0X2ZyZWVfZGVlcChwdWJuYW1lc193aXRoX2V4Y2VwdCk7CiAJcmV0dXJuIHJl c3VsdDsKIH0KIApAQCAtMjA0Miw2ICsyMDc2LDczIEBAIHNldF9zY2hlbWFfc2VudF9pbl9zdHJl YW1lZF90eG4oUmVsYXRpb25TeW5jRW50cnkgKmVudHJ5LCBUcmFuc2FjdGlvbklkIHhpZCkKIAlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIH0KIAorLyoKKyAqIHB1YmxpY2F0aW9uX2hh c19wdWJsaXNoYWJsZV9wYXJ0aXRpb25zCisgKgorICogQ2hlY2tzIGlmIHRoZSBwdWJsaWNhdGlv biBoYXMgYW55IGVmZmVjdGl2ZSBkYXRhIGluIGEgcGFydGl0aW9uIHRyZWUuCisgKiBSZXR1cm5z IHRydWUgaWYgYXQgbGVhc3Qgb25lIGxlYWYgaXMgTk9UIGV4Y2x1ZGVkLgorICovCitzdGF0aWMg Ym9vbAorcHVibGljYXRpb25faGFzX3B1Ymxpc2hhYmxlX3BhcnRpdGlvbnMoT2lkIHJvb3RfcmVs aWQsIE9pZCBwdWJpZCkKK3sKKwlMaXN0CSAgICphbGxfbGVhdmVzID0gTklMOworCUxpc3QJICAg KmV4Y2VwdF90YWJsZXNfaW5fcHViID0gTklMOworCisJQXNzZXJ0KGdldF9yZWxfcmVsa2luZChy b290X3JlbGlkKSA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKTsKKworCWV4Y2VwdF90YWJs ZXNfaW5fcHViID0gR2V0RXhjbHVkZWRUYWJsZXNCeVB1YihwdWJpZCwKKwkJCQkJCQkJCQkJCSAg UFVCTElDQVRJT05fUEFSVF9MRUFGKTsKKworCWlmIChleGNlcHRfdGFibGVzX2luX3B1YiA9PSBO SUwpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEdldCBhbGwgbGVhZiByZWxhdGlvbnMgaW4gdGhl IGhpZXJhcmNoeSAqLworCWFsbF9sZWF2ZXMgPSBHZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxhdGlv bnMoTklMLAorCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9MRUFGLAorCQkJCQkJCQkJCQkJ cm9vdF9yZWxpZCk7CisKKwkvKgorCSAqIFRyYXZlcnNlIGxlYXZlcy4gSWYgd2UgZmluZCBldmVu IE9ORSBsZWFmIHRoYXQgaXMgbm90IGV4Y2x1ZGVkIGJ5IHRoZQorCSAqIHB1YmxpY2F0aW9uJ3Mg RVhDRVBUIGxpc3QsIHRoZSB0cmVlIGlzIGVmZmVjdGl2ZS4KKwkgKi8KKwlmb3JlYWNoX29pZChj dXJyX3JlbGlkLCBhbGxfbGVhdmVzKQorCXsKKwkJYm9vbAkJcmVsYXRpb25faW5fZXhjZXB0ID0g ZmFsc2U7CisJCUxpc3QJICAgKmFuY2VzdG9yczsKKworCQkvKiBDaGVjayBpZiB0aGUgbGVhZiBp dHNlbGYgaXMgYW4gZXhjZXB0aW9uICovCisJCWlmIChsaXN0X21lbWJlcl9vaWQoZXhjZXB0X3Rh Ymxlc19pbl9wdWIsIGN1cnJfcmVsaWQpKQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgaWYg YW55IGFuY2VzdG9yIGlzIGFuIGV4Y2VwdGlvbiAqLworCQlhbmNlc3RvcnMgPSBnZXRfcGFydGl0 aW9uX2FuY2VzdG9ycyhjdXJyX3JlbGlkKTsKKworCQlmb3JlYWNoX29pZChhbmNlc3RvciwgYW5j ZXN0b3JzKQorCQl7CisJCQlpZiAobGlzdF9tZW1iZXJfb2lkKGV4Y2VwdF90YWJsZXNfaW5fcHVi LCBhbmNlc3RvcikpCisJCQl7CisJCQkJcmVsYXRpb25faW5fZXhjZXB0ID0gdHJ1ZTsKKwkJCQli cmVhazsKKwkJCX0KKwkJfQorCisJCWxpc3RfZnJlZShhbmNlc3RvcnMpOworCisJCS8qCisJCSAq IElmIHRoaXMgbGVhZiBpcyBub3QgbGlzdGVkIGluIHRoZSBFWENFUFQgY2xhdXNlLCB0aGUgcHVi bGljYXRpb24KKwkJICogZWZmZWN0aXZlbHkgaW5jbHVkZXMgZGF0YSBmcm9tIHRoaXMgcGFydGl0 aW9uIHRyZWUuCisJCSAqLworCQlpZiAoIXJlbGF0aW9uX2luX2V4Y2VwdCkKKwkJeworCQkJbGlz dF9mcmVlKGFsbF9sZWF2ZXMpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlsaXN0X2Zy ZWUoYWxsX2xlYXZlcyk7CisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogRmluZCBvciBjcmVh dGUgZW50cnkgaW4gdGhlIHJlbGF0aW9uIHNjaGVtYSBjYWNoZS4KICAqCkBAIC0yMDg5LDcgKzIx OTAsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiBy ZWxhdGlvbikKIAlpZiAoIWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQpCiAJewogCQlPaWQJCQlzY2hl bWFJZCA9IGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKTsKLQkJTGlzdAkgICAqcHViaWRzID0gR2V0 UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsaWQpOworCQlMaXN0CSAgICpwdWJpZHMgPSBOSUw7CiAK IAkJLyoKIAkJICogV2UgZG9uJ3QgYWNxdWlyZSBhIGxvY2sgb24gdGhlIG5hbWVzcGFjZSBzeXN0 ZW0gdGFibGUgYXMgd2UgYnVpbGQKQEAgLTIxMDMsNiArMjIwNCwxMSBAQCBnZXRfcmVsX3N5bmNf ZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJYm9vbAkJYW1f cGFydGl0aW9uID0gZ2V0X3JlbF9yZWxpc3BhcnRpdGlvbihyZWxpZCk7CiAJCWNoYXIJCXJlbGtp bmQgPSBnZXRfcmVsX3JlbGtpbmQocmVsaWQpOwogCQlMaXN0CSAgICpyZWxfcHVibGljYXRpb25z ID0gTklMOworCQlib29sCQlyb290X3B1Ymxpc2hlZF92aWFfYWxsdGFibGVzID0gZmFsc2U7CisJ CU9pZAkJCXJvb3RfYW5jZXN0b3IgPSBJbnZhbGlkT2lkOworCQlMaXN0CSAgICphbmNlc3RvcnMg PSBOSUw7CisKKwkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsaWQsICZwdWJpZHMsIE5VTEwp OwogCiAJCS8qIFJlbG9hZCBwdWJsaWNhdGlvbnMgaWYgbmVlZGVkIGJlZm9yZSB1c2UuICovCiAJ CWlmICghcHVibGljYXRpb25zX3ZhbGlkKQpAQCAtMjE4MSw2ICsyMjg3LDMzIEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRy eS0+ZXN0YXRlID0gTlVMTDsKIAkJbWVtc2V0KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihl bnRyeS0+ZXhwcnN0YXRlKSk7CiAKKwkJLyoKKwkJICogRm9yIHBhcnRpdGlvbnMsIHByZS1kZXRl cm1pbmUgaWYgdGhlIHRvcC1tb3N0IGFuY2VzdG9yIGlzIGNvdmVyZWQKKwkJICogYnkgYW55ICdG T1IgQUxMIFRBQkxFUycgcHVibGljYXRpb24gdGhhdCB1c2VzCisJCSAqICdwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCcgYW5kIGFuICdFWENFUFQnIGNsYXVzZS4KKwkJICoKKwkJICogVGhpcyBw cmUtY2FsY3VsYXRpb24gaXMgdml0YWwgZm9yIHJlc29sdmluZyBvdmVybGFwIGNvbmZsaWN0czog aWYgYQorCQkgKiBwYXJ0aXRpb24gaXMgZXhjbHVkZWQgZ2xvYmFsbHkgdmlhIGFuIEVYQ0VQVCBj bGF1c2UgYnV0IGluY2x1ZGVkCisJCSAqIGV4cGxpY2l0bHkgZWxzZXdoZXJlICh0YWJsZS9zY2hl bWEgbGV2ZWwpLCBpdCBtdXN0IHN0aWxsIGJlIHJvdXRlZAorCQkgKiB2aWEgdGhlIHJvb3QgaWRl bnRpdHkgaWYgdGhhdCByb290IGlzIHB1Ymxpc2hlZC4KKwkJICovCisJCWlmIChhbV9wYXJ0aXRp b24pCisJCXsKKwkJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsK KwkJCXJvb3RfYW5jZXN0b3IgPSBsbGFzdF9vaWQoYW5jZXN0b3JzKTsKKworCQkJZm9yZWFjaF9w dHIoUHVibGljYXRpb24sIHB1YmluZm8sIGRhdGEtPnB1YmxpY2F0aW9ucykKKwkJCXsKKwkJCQlp ZiAocHViaW5mby0+YWxsdGFibGVzICYmIHB1YmluZm8tPnB1YnZpYXJvb3QgJiYKKwkJCQkJcHVi bGljYXRpb25faGFzX3B1Ymxpc2hhYmxlX3BhcnRpdGlvbnMocm9vdF9hbmNlc3RvciwKKwkJCQkJ CQkJCQkJCQkJICAgcHViaW5mby0+b2lkKSkKKwkJCQl7CisJCQkJCXJvb3RfcHVibGlzaGVkX3Zp YV9hbGx0YWJsZXMgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwogCQkv KgogCQkgKiBCdWlsZCBwdWJsaWNhdGlvbiBjYWNoZS4gV2UgY2FuJ3QgdXNlIG9uZSBwcm92aWRl ZCBieSByZWxjYWNoZSBhcwogCQkgKiByZWxjYWNoZSBjb25zaWRlcnMgYWxsIHB1YmxpY2F0aW9u cyB0aGF0IHRoZSBnaXZlbiByZWxhdGlvbiBpcyBpbiwKQEAgLTIyMDMsMjAgKzIzMzYsNDIgQEAg Z2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24p CiAJCQkvKgogCQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLCBw aWNrIHRoZSBwYXJ0aXRpb24KIAkJCSAqIHJvb3QgYW5kIHNldCB0aGUgYW5jZXN0b3IgbGV2ZWwg YWNjb3JkaW5nbHkuCisJCQkgKgorCQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1 YmxpY2F0aW9uIGFuZCBpdCBoYXMgYW4gRVhDRVBUCisJCQkgKiBUQUJMRSBsaXN0OgorCQkJICoK KwkJCSAqIElmIHRoZSByZWxhdGlvbiBpcyBhIHBhcnRpdGlvbiwgY2hlY2sgd2hldGhlciB0aGUg Y3VycmVudAorCQkJICogcmVsYXRpb24gb3IgYW55IG9mIHRoZSBhbmNlc3RvcnMgaXMgaW5jbHVk ZWQgaW4gdGhlIEVYQ0VQVAorCQkJICogVEFCTEUgbGlzdC4gSWYgc28sIGRvIG5vdCBwdWJsaXNo IHRoZSBjaGFuZ2UuCisJCQkgKgorCQkJICogIkRvIG5vdCBwdWJsaXNoIHRoZSBjaGFuZ2UiIGlz IGFjaGlldmVkIGJ5IGtlZXBpbmcgdGhlIHZhcmlhYmxlCisJCQkgKiAicHVibGlzaCIgc2V0IHRv IGZhbHNlLiBBbmQgZXZlbnR1YWxseSwgZW50cnktPnB1YmFjdGlvbnMgd2lsbAorCQkJICogcmVt YWluIGFsbCBmYWxzZSBmb3IgdGhpcyBwdWJsaWNhdGlvbi4KIAkJCSAqLwogCQkJaWYgKHB1Yi0+ YWxsdGFibGVzKQogCQkJewotCQkJCXB1Ymxpc2ggPSB0cnVlOwotCQkJCWlmIChwdWItPnB1YnZp YXJvb3QgJiYgYW1fcGFydGl0aW9uKQorCQkJCUxpc3QJICAgKmV4Y2VwdHB1YmlkcyA9IE5JTDsK KworCQkJCWlmIChhbV9wYXJ0aXRpb24pCiAJCQkJewotCQkJCQlMaXN0CSAgICphbmNlc3RvcnMg PSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7CisJCQkJCWZvcmVhY2hfb2lkKGFuY2Vz dG9yLCBhbmNlc3RvcnMpCisJCQkJCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3Rvciwg TlVMTCwgJmV4Y2VwdHB1Ymlkcyk7CiAKLQkJCQkJcHViX3JlbGlkID0gbGxhc3Rfb2lkKGFuY2Vz dG9ycyk7Ci0JCQkJCWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgoYW5jZXN0b3JzKTsKKwkJ CQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkKKwkJCQkJeworCQkJCQkJcHViX3JlbGlkID0gcm9vdF9h bmNlc3RvcjsKKwkJCQkJCWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgoYW5jZXN0b3JzKTsK KwkJCQkJfQogCQkJCX0KLQkJCX0KIAotCQkJaWYgKCFwdWJsaXNoKQorCQkJCUdldFJlbGF0aW9u UHVibGljYXRpb25zKHJlbGlkLCBOVUxMLCAmZXhjZXB0cHViaWRzKTsKKworCQkJCWlmICghbGlz dF9tZW1iZXJfb2lkKGV4Y2VwdHB1YmlkcywgcHViLT5vaWQpKQorCQkJCQlwdWJsaXNoID0gdHJ1 ZTsKKworCQkJCWxpc3RfZnJlZShleGNlcHRwdWJpZHMpOworCQkJfQorCQkJZWxzZSBpZiAoIXB1 Ymxpc2gpCiAJCQl7CiAJCQkJYm9vbAkJYW5jZXN0b3JfcHVibGlzaGVkID0gZmFsc2U7CiAKQEAg LTIyMzAsMTIgKzIzODUsMTAgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0 YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJewogCQkJCQlPaWQJCQlhbmNlc3RvcjsKIAkJCQkJ aW50CQkJbGV2ZWw7Ci0JCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5j ZXN0b3JzKHJlbGlkKTsKIAogCQkJCQlhbmNlc3RvciA9IEdldFRvcE1vc3RBbmNlc3RvckluUHVi bGljYXRpb24ocHViLT5vaWQsCiAJCQkJCQkJCQkJCQkJCQkgICBhbmNlc3RvcnMsCiAJCQkJCQkJ CQkJCQkJCQkgICAmbGV2ZWwpOwotCiAJCQkJCWlmIChhbmNlc3RvciAhPSBJbnZhbGlkT2lkKQog CQkJCQl7CiAJCQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQgPSB0cnVlOwpAQCAtMjI1MCw3ICsyNDAz LDI1IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJl bGF0aW9uKQogCQkJCWlmIChsaXN0X21lbWJlcl9vaWQocHViaWRzLCBwdWItPm9pZCkgfHwKIAkJ CQkJbGlzdF9tZW1iZXJfb2lkKHNjaGVtYVB1YmlkcywgcHViLT5vaWQpIHx8CiAJCQkJCWFuY2Vz dG9yX3B1Ymxpc2hlZCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSByb290IGFuY2Vz dG9yIGlzIGVmZmVjdGl2ZWx5IHB1Ymxpc2hlZCBieSBhbiBBTEwKKwkJCQkJICogVEFCTEVTIHB1 YmxpY2F0aW9uIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsCisJCQkJCSAqIHRoZW4g Y2hhbmdlcyBmb3IgaXRzIHBhcnRpdGlvbnMgbXVzdCBiZSBwdWJsaXNoZWQgdXNpbmcKKwkJCQkJ ICogdGhlIHJvb3QgaWRlbnRpdHkuCisJCQkJCSAqCisJCQkJCSAqIFRoaXMgYXBwbGllcyBldmVu IGlmIG90aGVyIHB1YmxpY2F0aW9ucyBkbyBub3Qgc3BlY2lmeQorCQkJCQkgKiBwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCwgcHJvdmlkZWQgdGhlIHJvb3QgaXMgbm90CisJCQkJCSAqIGV4Y2x1 ZGVkIGZyb20gdGhhdCBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLgorCQkJCQkgKi8KKwkJCQkJaWYg KHJvb3RfcHVibGlzaGVkX3ZpYV9hbGx0YWJsZXMpCisJCQkJCXsKKwkJCQkJCXB1Yl9yZWxpZCA9 IHJvb3RfYW5jZXN0b3I7CisJCQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxpc3RfbGVuZ3RoKGFuY2Vz dG9ycyk7CisJCQkJCX0KKwogCQkJCQlwdWJsaXNoID0gdHJ1ZTsKKwkJCQl9CiAJCQl9CiAKIAkJ CS8qCkBAIC0yMjk4LDYgKzI0NjksMTcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0 YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJCUFzc2VydChwdWJsaXNoX2FzX3JlbGlk ID09IHB1Yl9yZWxpZCk7CiAJCQkJfQogCisJCQkJLyoKKwkJCQkgKiBQYXJ0aXRpb25zIHdob3Nl IHRvcC1tb3N0IGFuY2VzdG9yIGlzIGJlaW5nIHB1Ymxpc2hlZCB2aWEKKwkJCQkgKiBhbiAnQUxM IFRBQkxFUycgcHVibGljYXRpb24gbmVlZCBub3QgYmUgaW5kaXZpZHVhbGx5CisJCQkJICogcHVi bGlzaGVkIHZpYSBhbnkgb3RoZXIgcHVibGljYXRpb24uIFJlcGVhdGVkIG9jY3VycmVuY2VzCisJ CQkJICogb2YgYSBwYXJ0aXRpb24gdGFrZSB0aGUgbGVhc3QgcmVzdHJpY3RlZCBkZWZpbml0aW9u LCB3aGljaAorCQkJCSAqIHRoZSAnQUxMIFRBQkxFUycgcHVibGljYXRpb24gYWx3YXlzIHByb3Zp ZGVzLiBJLmUuLCBhbGwKKwkJCQkgKiBjb2x1bW5zIGFuZCBhbGwgcm93cy4KKwkJCQkgKi8KKwkJ CQlpZiAocm9vdF9wdWJsaXNoZWRfdmlhX2FsbHRhYmxlcykKKwkJCQkJY29udGludWU7CisKIAkJ CQkvKiBUcmFjayBwdWJsaWNhdGlvbnMgZm9yIHRoaXMgYW5jZXN0b3IuICovCiAJCQkJcmVsX3B1 YmxpY2F0aW9ucyA9IGxhcHBlbmQocmVsX3B1YmxpY2F0aW9ucywgcHViKTsKIAkJCX0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDZiNjM0YzlmZmYxLi5kYzAyMWRiYjZjZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC01Nzg4LDcgKzU3ODgsOSBAQCBSZWxhdGlv bkdldEV4Y2x1c2lvbkluZm8oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIHZvaWQKIFJlbGF0aW9u QnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAq cHViZGVzYykKIHsKLQlMaXN0CSAgICpwdWJvaWRzOworCUxpc3QJICAgKnB1Ym9pZHMgPSBOSUw7 CisJTGlzdAkgICAqZXhjZXB0cHVib2lkcyA9IE5JTDsKKwlMaXN0CSAgICphbGx0YWJsZXNwdWJv aWRzOwogCUxpc3RDZWxsICAgKmxjOwogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCU9pZAkJCXNj aGVtYWlkOwpAQCAtNTgyNiw3ICs1ODI4LDcgQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVz YyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCXB1YmRlc2Mt PmdlbmNvbHNfdmFsaWRfZm9yX2RlbGV0ZSA9IHRydWU7CiAKIAkvKiBGZXRjaCB0aGUgcHVibGlj YXRpb24gbWVtYmVyc2hpcCBpbmZvLiAqLwotCXB1Ym9pZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0 aW9ucyhyZWxpZCk7CisJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsaWQsICZwdWJvaWRzLCAm ZXhjZXB0cHVib2lkcyk7CiAJc2NoZW1haWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlv bik7CiAJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywgR2V0U2NoZW1h UHVibGljYXRpb25zKHNjaGVtYWlkKSk7CiAKQEAgLTU4MzgsMTYgKzU4NDAsMjUgQEAgUmVsYXRp b25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNj ICpwdWJkZXNjKQogCQlmb3JlYWNoKGxjLCBhbmNlc3RvcnMpCiAJCXsKIAkJCU9pZAkJCWFuY2Vz dG9yID0gbGZpcnN0X29pZChsYyk7CisJCQlMaXN0CSAgICphbmNlc3Rvcl9wdWJvaWRzID0gTklM OworCQkJTGlzdAkgICAqYW5jZXN0b3JfZXhjZXB0cHVib2lkcyA9IE5JTDsKIAotCQkJcHVib2lk cyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKLQkJCQkJCQkJCQkJIEdldFJlbGF0 aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKSk7CisJCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhh bmNlc3RvciwgJmFuY2VzdG9yX3B1Ym9pZHMsCisJCQkJCQkJCQkmYW5jZXN0b3JfZXhjZXB0cHVi b2lkcyk7CisKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIGFu Y2VzdG9yX3B1Ym9pZHMpOwogCQkJc2NoZW1haWQgPSBnZXRfcmVsX25hbWVzcGFjZShhbmNlc3Rv cik7CiAJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAogCQkJCQkJ CQkJCQkgR2V0U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYWlkKSk7CisJCQlleGNlcHRwdWJvaWRz ID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChleGNlcHRwdWJvaWRzLAorCQkJCQkJCQkJCQkJICAg YW5jZXN0b3JfZXhjZXB0cHVib2lkcyk7CiAJCX0KIAl9Ci0JcHVib2lkcyA9IGxpc3RfY29uY2F0 X3VuaXF1ZV9vaWQocHVib2lkcywgR2V0QWxsVGFibGVzUHVibGljYXRpb25zKCkpOwogCisJYWxs dGFibGVzcHVib2lkcyA9IEdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucygpOworCXB1Ym9pZHMgPSBs aXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCisJCQkJCQkJCQkgbGlzdF9kaWZmZXJlbmNl X29pZChhbGx0YWJsZXNwdWJvaWRzLAorCQkJCQkJCQkJCQkJCQkgZXhjZXB0cHVib2lkcykpOwog CWZvcmVhY2gobGMsIHB1Ym9pZHMpCiAJewogCQlPaWQJCQlwdWJpZCA9IGxmaXJzdF9vaWQobGMp OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMKaW5kZXggNDk1OTgzMDQzMzUuLjExMTJjNGUxMjRkIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK QEAgLTQ2MjMsOSArNDYyMyw1NSBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCkKIAkJ CShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAJ CXB1YmluZm9baV0ucHViZ2VuY29sc190eXBlID0KIAkJCSooUFFnZXR2YWx1ZShyZXMsIGksIGlf cHViZ2VuY29scykpOworCQlwdWJpbmZvW2ldLmV4Y2VwdF90YWJsZXMgPSAoU2ltcGxlUHRyTGlz dCkKKwkJeworCQkJTlVMTCwgTlVMTAorCQl9OwogCiAJCS8qIERlY2lkZSB3aGV0aGVyIHdlIHdh bnQgdG8gZHVtcCBpdCAqLwogCQlzZWxlY3REdW1wYWJsZU9iamVjdCgmKHB1YmluZm9baV0uZG9i aiksIGZvdXQpOworCisJCS8qCisJCSAqIEdldCB0aGUgbGlzdCBvZiB0YWJsZXMgZm9yIHB1Ymxp Y2F0aW9ucyBzcGVjaWZpZWQgd2l0aCB0aGUgRVhDRVBUCisJCSAqIFRBQkxFIGNsYXVzZS4gVGhp cyBpcyBpbnRyb2R1Y2VkIGluIFBvc3RncmVTUUwgMTkuCisJCSAqCisJCSAqIEVYQ0VQVCBUQUJM RVMgaXMgcHJvY2Vzc2VkIGhlcmUgYW5kIG91dHB1dCBkaXJlY3RseSBieQorCQkgKiBkdW1wUHVi bGljYXRpb24oKS4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIGFwcHJvYWNoIHVzZWQgaW4KKwkJICog ZHVtcFB1YmxpY2F0aW9uVGFibGUoKSBhbmQgZHVtcFB1YmxpY2F0aW9uTmFtZXNwYWNlKCksIHNp bmNlIHRoYXQKKwkJICogYXBwcm9hY2ggd291bGQgcmVxdWlyZSBFWENFUFQgVEFCTEUgc3VwcG9y dCBmb3IgQUxURVIgUFVCTElDQVRJT04sCisJCSAqIHdoaWNoIGlzIG5vdCBjdXJyZW50bHkgc3Vw cG9ydGVkLgorCQkgKi8KKwkJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTkwMDAwKQorCQl7 CisJCQlpbnQJCQludGJsczsKKwkJCVBHcmVzdWx0ICAgKnJlc190YmxzOworCisJCQlyZXNldFBR RXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAorCQkJCQkJCSAg IlNFTEVDVCBwcnJlbGlkXG4iCisJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0 aW9uX3JlbFxuIgorCQkJCQkJCSAgIldIRVJFIHBycHViaWQgPSAldSBhbmQgcHJleGNlcHQiLAor CQkJCQkJCSAgcHViaW5mb1tpXS5kb2JqLmNhdElkLm9pZCk7CisKKwkJCXJlc190YmxzID0gRXhl Y3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOworCisJCQlu dGJscyA9IFBRbnR1cGxlcyhyZXNfdGJscyk7CisKKwkJCWZvciAoaW50IGogPSAwOyBqIDwgbnRi bHM7IGorKykKKwkJCXsKKwkJCQlPaWQJCQlwcnJlbGlkOworCQkJCVRhYmxlSW5mbyAgKnRiaW5m bzsKKworCQkJCXBycmVsaWQgPSBhdG9vaWQoUFFnZXR2YWx1ZShyZXNfdGJscywgaiwgMCkpOwor CisJCQkJdGJpbmZvID0gZmluZFRhYmxlQnlPaWQocHJyZWxpZCk7CisKKwkJCQlpZiAodGJpbmZv ICE9IE5VTEwpCisJCQkJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQoJnB1YmluZm9baV0uZXhjZXB0 X3RhYmxlcywgdGJpbmZvKTsKKwkJCX0KKworCQkJUFFjbGVhcihyZXNfdGJscyk7CisJCX0KIAl9 CiAKIGNsZWFudXA6CkBAIC00NjY1LDcgKzQ3MTEsMjUgQEAgZHVtcFB1YmxpY2F0aW9uKEFyY2hp dmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9uSW5mbyAqcHViaW5mbykKIAlpZiAocHViaW5mby0+ cHViYWxsdGFibGVzICYmIHB1YmluZm8tPnB1YmFsbHNlcXVlbmNlcykKIAkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBUQUJMRVMsIEFMTCBTRVFVRU5DRVMiKTsKIAllbHNl IGlmIChwdWJpbmZvLT5wdWJhbGx0YWJsZXMpCisJeworCQlpbnQJCQluX2V4Y2VwdCA9IDA7CisK IAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBUQUJMRVMiKTsKKworCQkv KiBJbmNsdWRlIEVYQ0VQVCBUQUJMRSBjbGF1c2UgaWYgdGhlcmUgYXJlIGV4Y2VwdF90YWJsZXMu ICovCisJCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmNlbGwgPSBwdWJpbmZvLT5leGNlcHRfdGFi bGVzLmhlYWQ7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0KQorCQl7CisJCQlUYWJsZUluZm8gICp0 YmluZm8gPSAoVGFibGVJbmZvICopIGNlbGwtPnB0cjsKKworCQkJaWYgKCsrbl9leGNlcHQgPT0g MSkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBFWENFUFQgVEFCTEUgKCIpOwor CQkJZWxzZQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAiKTsKKwkJCWFwcGVu ZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiT05MWSAlcyIsIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5m bykpOworCQl9CisJCWlmIChuX2V4Y2VwdCA+IDApCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihx dWVyeSwgIikiKTsKKwl9CiAJZWxzZSBpZiAocHViaW5mby0+cHViYWxsc2VxdWVuY2VzKQogCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBGT1IgQUxMIFNFUVVFTkNFUyIpOwogCkBAIC00 ODQ1LDYgKzQ5MDksNyBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJs ZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCiAJLyogQ29sbGVjdCBhbGwgcHVibGlj YXRpb24gbWVtYmVyc2hpcCBpbmZvLiAqLwogCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1 MDAwMCkKKwl7CiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNU IHRhYmxlb2lkLCBvaWQsIHBycHViaWQsIHBycmVsaWQsICIKIAkJCQkJCQkgInBnX2NhdGFsb2cu cGdfZ2V0X2V4cHIocHJxdWFsLCBwcnJlbGlkKSBBUyBwcnJlbHF1YWwsICIKQEAgLTQ4NTcsNiAr NDkyMiw5IEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0 YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJCQkJCQkJICIgICAgICBXSEVSRSBhdHRyZWxpZCA9 IHByLnBycmVsaWQgQU5EIGF0dG51bSA9IHByYXR0cnNbc10pXG4iCiAJCQkJCQkJICIgIEVMU0Ug TlVMTCBFTkQpIHByYXR0cnMgIgogCQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0 aW9uX3JlbCBwciIpOworCQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxOTAwMDApCisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBXSEVSRSBOT1QgcHIucHJleGNlcHQiKTsKKwl9 CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCB0 YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBwcnJlbGlkLCAiCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCA0YzRiMTRl NWZjNy4uZDE0MWViNjZkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjc2LDYgKzY3Niw3IEBAIHR5cGVk ZWYgc3RydWN0IF9QdWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJ0cnVuY2F0ZTsKIAlib29sCQlw dWJ2aWFyb290OwogCVB1Ymxpc2hHZW5jb2xzVHlwZSBwdWJnZW5jb2xzX3R5cGU7CisJU2ltcGxl UHRyTGlzdCBleGNlcHRfdGFibGVzOwogfSBQdWJsaWNhdGlvbkluZm87CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90 LzAwMl9wZ19kdW1wLnBsCmluZGV4IGE4ZGNjMmI1Yzc1Li41NGVhZTU3N2M5MSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3QvMDAyX3BnX2R1bXAucGwKQEAgLTMxNzAsNiArMzE3MCwzNiBAQCBteSAldGVzdHMgPSAoCiAJ CWxpa2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAogCX0sCiAK KwknQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjgnID0+IHsKKwkJY3JlYXRlX29yZGVyID0+IDUwLAor CQljcmVhdGVfc3FsID0+CisJCSAgJ0NSRUFURSBQVUJMSUNBVElPTiBwdWI4IEZPUiBBTEwgVEFC TEVTIEVYQ0VQVCAoZHVtcF90ZXN0LnRlc3RfdGFibGUpOycsCisJCXJlZ2V4cCA9PiBxci9eCisJ CQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWI4IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAo T05MWSBkdW1wX3Rlc3QudGVzdF90YWJsZSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0 ZSwgZGVsZXRlLCB0cnVuY2F0ZScpO1xFCisJCQkveG0sCisJCWxpa2UgPT4geyAlZnVsbF9ydW5z LCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAorCX0sCisKKwknQ1JFQVRFIFBVQkxJQ0FUSU9O IHB1YjknID0+IHsKKwkJY3JlYXRlX29yZGVyID0+IDUwLAorCQljcmVhdGVfc3FsID0+CisJCSAg J0NSRUFURSBQVUJMSUNBVElPTiBwdWI5IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoZHVt cF90ZXN0LnRlc3RfdGFibGUsIGR1bXBfdGVzdC50ZXN0X3NlY29uZF90YWJsZSk7JywKKwkJcmVn ZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjkgRk9SIEFMTCBUQUJMRVMg RVhDRVBUIFRBQkxFIChPTkxZIGR1bXBfdGVzdC50ZXN0X3RhYmxlLCBPTkxZIGR1bXBfdGVzdC50 ZXN0X3NlY29uZF90YWJsZSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRl LCB0cnVuY2F0ZScpO1xFCisJCQkveG0sCisJCWxpa2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0aW9u X3Bvc3RfZGF0YSA9PiAxLCB9LAorCX0sCisKKwknQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEwJyA9 PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA5MiwKKwkJY3JlYXRlX3NxbCA9PgorCQkgICdDUkVBVEUg UFVCTElDQVRJT04gcHViMTAgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChkdW1wX3Rlc3Qu dGVzdF9pbmhlcml0YW5jZV9wYXJlbnQpOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUNSRUFU RSBQVUJMSUNBVElPTiBwdWIxMCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKE9OTFkgZHVt cF90ZXN0LnRlc3RfaW5oZXJpdGFuY2VfcGFyZW50LCBPTkxZIGR1bXBfdGVzdC50ZXN0X2luaGVy aXRhbmNlX2NoaWxkKSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUsIHRy dW5jYXRlJyk7XEUKKwkJCS94bSwKKwkJbGlrZSA9PiB7ICVmdWxsX3J1bnMsIHNlY3Rpb25fcG9z dF9kYXRhID0+IDEsIH0sCisJfSwKKwogCSdDUkVBVEUgU1VCU0NSSVBUSU9OIHN1YjEnID0+IHsK IAkJY3JlYXRlX29yZGVyID0+IDUwLAogCQljcmVhdGVfc3FsID0+ICdDUkVBVEUgU1VCU0NSSVBU SU9OIHN1YjEKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKaW5kZXggMzU4NGM0ZTE0MjguLjY0YjFiNmVmZWJlIDEwMDY0NAotLS0g YS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpA QCAtMzA3MywxNyArMzA3MywzNCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFy ICpzY2hlbWFuYW1lLAogCQkJCQkJCQkgICIgICAgICAgICAgV0hFUkUgYXR0cmVsaWQgPSBwci5w cnJlbGlkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKVxuIgogCQkJCQkJCQkgICIgICAgICAgIEVM U0UgTlVMTCBFTkQpICIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9u IHBcbiIKLQkJCQkJCQkJICAiICAgICBKT0lOIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVs IHByIE9OIHAub2lkID0gcHIucHJwdWJpZFxuIgotCQkJCQkJCQkgICIgICAgIEpPSU4gcGdfY2F0 YWxvZy5wZ19jbGFzcyBjIE9OIGMub2lkID0gcHIucHJyZWxpZFxuIgotCQkJCQkJCQkgICJXSEVS RSBwci5wcnJlbGlkID0gJyVzJ1xuIgorCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19w dWJsaWNhdGlvbl9yZWwgcHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCisJCQkJCQkJCSAgIgkJ Sk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgT04gYy5vaWQgPSBwci5wcnJlbGlkXG4iCisJCQkJ CQkJCSAgIldIRVJFIHByLnBycmVsaWQgPSAnJXMnXG4iLAorCQkJCQkJCQkgIG9pZCwgb2lkLCBv aWQpOworCisJCQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTkwMDAwKQorCQkJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmYnVmLCAiIEFORCBOT1QgcHIucHJleGNlcHRcbiIpOworCisJCQkJYXBwZW5k UFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkJICAiVU5JT05cbiIKIAkJCQkJCQkJICAiU0VMRUNU IHB1Ym5hbWVcbiIKLQkJCQkJCQkJICAiICAgICAsIE5VTExcbiIKLQkJCQkJCQkJICAiICAgICAs IE5VTExcbiIKKwkJCQkJCQkJICAiCQksIE5VTExcbiIKKwkJCQkJCQkJICAiCQksIE5VTExcbiIK IAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uIHBcbiIKLQkJCQkJCQkJ ICAiV0hFUkUgcC5wdWJhbGx0YWJsZXMgQU5EIHBnX2NhdGFsb2cucGdfcmVsYXRpb25faXNfcHVi bGlzaGFibGUoJyVzJylcbiIKLQkJCQkJCQkJICAiT1JERVIgQlkgMTsiLAotCQkJCQkJCQkgIG9p ZCwgb2lkLCBvaWQsIG9pZCk7CisJCQkJCQkJCSAgIldIRVJFIHAucHViYWxsdGFibGVzIEFORCBw Z19jYXRhbG9nLnBnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlKCclcycpXG4iLAorCQkJCQkJCQkg IG9pZCk7CisKKwkJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJCQkJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsCisJCQkJCQkJCQkgICIgICAgIEFORCBOT1QgRVhJU1RTIChcbiIKKwkJ CQkJCQkJCSAgIgkJU0VMRUNUIDFcbiIKKwkJCQkJCQkJCSAgIgkJRlJPTSBwZ19jYXRhbG9nLnBn X3B1YmxpY2F0aW9uX3JlbCBwclxuIgorCQkJCQkJCQkJICAiCQlKT0lOIHBnX2NhdGFsb2cucGdf Y2xhc3MgcGNcbiIKKwkJCQkJCQkJCSAgIgkJT04gcHIucHJyZWxpZCA9IHBjLm9pZFxuIgorCQkJ CQkJCQkJICAiCQlXSEVSRSBwci5wcnJlbGlkID0gJyVzJyBBTkQgcHIucHJwdWJpZCA9IHAub2lk KVxuIiwKKwkJCQkJCQkJCSAgb2lkKTsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYs ICJPUkRFUiBCWSAxOyIpOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtMzEzNCw2ICszMTUxLDM1 IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQlQ UWNsZWFyKHJlc3VsdCk7CiAJCX0KIAorCQkvKiBQcmludCBwdWJsaWNhdGlvbnMgd2hlcmUgdGhl IHRhYmxlIGlzIGluIHRoZSBFWENFUFQgY2xhdXNlICovCisJCWlmIChwc2V0LnN2ZXJzaW9uID49 IDE5MDAwMCkKKwkJeworCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkgICJTRUxF Q1QgcHVibmFtZVxuIgorCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBw XG4iCisJCQkJCQkJICAiSk9JTiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwciBPTiBw Lm9pZCA9IHByLnBycHViaWRcbiIKKwkJCQkJCQkgICJXSEVSRSBwci5wcnJlbGlkID0gJyVzJ1xu IEFORCBwci5wcmV4Y2VwdFxuIgorCQkJCQkJCSAgIk9SREVSIEJZIDE7Iiwgb2lkKTsKKworCQkJ cmVzdWx0ID0gUFNRTGV4ZWMoYnVmLmRhdGEpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZ290byBl cnJvcl9yZXR1cm47CisJCQllbHNlCisJCQkJdHVwbGVzID0gUFFudHVwbGVzKHJlc3VsdCk7CisK KwkJCWlmICh0dXBsZXMgPiAwKQorCQkJCXByaW50VGFibGVBZGRGb290ZXIoJmNvbnQsIF8oIkV4 Y2VwdCBQdWJsaWNhdGlvbnM6IikpOworCisJCQkvKiBNaWdodCBiZSBhbiBlbXB0eSBzZXQgLSB0 aGF0J3Mgb2sgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZXM7IGkrKykKKwkJCXsKKwkJCQlw cmludGZQUUV4cEJ1ZmZlcigmYnVmLCAiICAgIFwiJXNcIiIsIFBRZ2V0dmFsdWUocmVzdWx0LCBp LCAwKSk7CisKKwkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYuZGF0YSk7CisJCQl9 CisJCQlQUWNsZWFyKHJlc3VsdCk7CisJCX0KKwogCQkvKgogCQkgKiBJZiB2ZXJib3NlLCBwcmlu dCBOT1QgTlVMTCBjb25zdHJhaW50cy4KIAkJICovCkBAIC02NzUzLDggKzY3OTksMTIgQEAgZGVz Y3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCQkJCQkgICIgICAgIHBn X2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIHByXG4iCiAJCQkJCQkJICAiV0hFUkUgYy5yZWxu YW1lc3BhY2UgPSBuLm9pZFxuIgogCQkJCQkJCSAgIiAgQU5EIGMub2lkID0gcHIucHJyZWxpZFxu IgotCQkJCQkJCSAgIiAgQU5EIHByLnBycHViaWQgPSAnJXMnXG4iCi0JCQkJCQkJICAiT1JERVIg QlkgMSwyIiwgcHViaWQpOworCQkJCQkJCSAgIiAgQU5EIHByLnBycHViaWQgPSAnJXMnXG4iLCBw dWJpZCk7CisKKwkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCQlhcHBlbmRQUUV4 cEJ1ZmZlcigmYnVmLCAiICBBTkQgTk9UIHByLnByZXhjZXB0XG4iKTsKKworCQkJYXBwZW5kUFFF eHBCdWZmZXIoJmJ1ZiwgIk9SREVSIEJZIDEsMiIpOwogCQkJaWYgKCFhZGRGb290ZXJUb1B1Ymxp Y2F0aW9uRGVzYygmYnVmLCBfKCJUYWJsZXM6IiksIGZhbHNlLCAmY29udCkpCiAJCQkJZ290byBl cnJvcl9yZXR1cm47CiAKQEAgLTY3NzIsNiArNjgyMiwyMyBAQCBkZXNjcmliZVB1YmxpY2F0aW9u cyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCX0KIAkJ fQorCQllbHNlCisJCXsKKwkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCXsKKwkJ CQkvKiBHZXQgdGFibGVzIGluIHRoZSBFWENFUFQgY2xhdXNlIGZvciB0aGlzIHB1YmxpY2F0aW9u ICovCisJCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkJICAiU0VMRUNUIGNvbmNh dChjLnJlbG5hbWVzcGFjZTo6cmVnbmFtZXNwYWNlLCAnLicsIGMucmVsbmFtZSlcbiIKKwkJCQkJ CQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiIKKwkJCQkJCQkJICAiICAgICBKT0lO IHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIHByIE9OIGMub2lkID0gcHIucHJyZWxpZFxu IgorCQkJCQkJCQkgICJXSEVSRSBwci5wcnB1YmlkID0gJyVzJ1xuIgorCQkJCQkJCQkgICIgIEFO RCBwci5wcmV4Y2VwdFxuIgorCQkJCQkJCQkgICJPUkRFUiBCWSAxIiwgcHViaWQpOworCQkJCWlm ICghYWRkRm9vdGVyVG9QdWJsaWNhdGlvbkRlc2MoJmJ1ZiwgXygiRXhjZXB0IHRhYmxlczoiKSwK KwkJCQkJCQkJCQkJCXRydWUsICZjb250KSkKKwkJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQl9 CisJCX0KIAogCQlwcmludFRhYmxlKCZjb250LCBwc2V0LnF1ZXJ5Rm91dCwgZmFsc2UsIHBzZXQu bG9nZmlsZSk7CiAJCXByaW50VGFibGVDbGVhbnVwKCZjb250KTsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4u YwppbmRleCA4YjkxYmMwMDA2Mi4uMzk0MDRlYTBmNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC90YWItY29tcGxldGUuaW4uYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMK QEAgLTM2NjksNyArMzY2OSwxNyBAQCBtYXRjaF9wcmV2aW91c193b3JkcyhpbnQgcGF0dGVybl9p ZCwKIAllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwg IkZPUiIsICJBTEwiKSkKIAkJQ09NUExFVEVfV0lUSCgiVEFCTEVTIiwgIlNFUVVFTkNFUyIpOwog CWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9S IiwgIkFMTCIsICJUQUJMRVMiKSkKLQkJQ09NUExFVEVfV0lUSCgiV0lUSCAoIik7CisJCUNPTVBM RVRFX1dJVEgoIkVYQ0VQVCBUQUJMRSAoIiwgIldJVEggKCIpOworCWVsc2UgaWYgKE1hdGNoZXMo IkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFMTCIsICJUQUJMRVMi LCAiRVhDRVBUIikpCisJCUNPTVBMRVRFX1dJVEgoIlRBQkxFICgiKTsKKwllbHNlIGlmIChNYXRj aGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFC TEVTIiwgIkVYQ0VQVCIsICJUQUJMRSIpKQorCQlDT01QTEVURV9XSVRIKCIoIik7CisJZWxzZSBp ZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxM IiwgIlRBQkxFUyIsICJFWENFUFQiLCAiVEFCTEUiLCAiKCIpKQorCQlDT01QTEVURV9XSVRIX1ND SEVNQV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl90YWJsZXMpOworCWVsc2UgaWYgKE1hdGNoZXMo IkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFMTCIsICJUQUJMRVMi LCAiRVhDRVBUIiwgIlRBQkxFIiwgIigiLCBNYXRjaEFueU4pICYmIGVuZHNfd2l0aChwcmV2X3dk LCAnLCcpKQorCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl90 YWJsZXMpOworCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNo QW55LCAiRk9SIiwgIkFMTCIsICJUQUJMRVMiLCAiRVhDRVBUIiwgIlRBQkxFIiwgIigiLCBNYXRj aEFueU4pICYmICFlbmRzX3dpdGgocHJldl93ZCwgJywnKSkKKwkJQ09NUExFVEVfV0lUSCgiKSIp OwogCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAi Rk9SIiwgIlRBQkxFUyIpKQogCQlDT01QTEVURV9XSVRIKCJJTiBTQ0hFTUEiKTsKIAllbHNlIGlm IChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJUQUJM RSIsIE1hdGNoQW55KSAmJiAhZW5kc193aXRoKHByZXZfd2QsICcsJykpCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdAppbmRleCBkYWM0MDk5MmNiYy4uMGI5NTFhM2Q2ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdApAQCAtMTIzOTgsNiArMTIzOTgsMTMgQEAKICAgcHJvbmFtZSA9PiAncGdfcmVsYXRp b25faXNfcHVibGlzaGFibGUnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUgPT4g J2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MnLAogICBwcm9zcmMgPT4gJ3BnX3JlbGF0 aW9uX2lzX3B1Ymxpc2hhYmxlJyB9LAoreyBvaWQgPT4gJzkwMDInLCBkZXNjciA9PiAncmV0dXJu IHBhcnRpdGlvbiB0YWJsZXMgZWxpZ2libGUgZm9yIHRhYmxlc3luYyB3aGVuIHB1YmxpY2F0aW9u IHVzZXMgRVhDRVBUIGFuZCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUnLAorICBw cm9uYW1lID0+ICdwZ19nZXRfcHVibGljYXRpb25fZWZmZWN0aXZlX3RhYmxlcycsICBwcm9yb3dz ID0+ICcxMDAwJywKKyAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBw cm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnb2lkIF90ZXh0JywKKyAgcHJv YWxsYXJndHlwZXMgPT4gJ3tvaWQsX3RleHQsdGV4dCx0ZXh0fScsIHByb2FyZ21vZGVzID0+ICd7 aSxpLG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAne3Jvb3RfcmVsaWQscHViX25hbWVzLG5zcG5h bWUscmVsbmFtZX0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl9lZmZlY3RpdmVf dGFibGVzJyB9LAogCiAjIHJscwogeyBvaWQgPT4gJzMyOTgnLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCmluZGV4IDM2OGJlY2NhODk5Li44NjM4YTZhN2ZlNiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtMTQ2LDE2ICsxNDYsMTggQEAgdHlwZWRlZiBzdHJ1 Y3QgUHVibGljYXRpb25SZWxJbmZvCiAJUmVsYXRpb24JcmVsYXRpb247CiAJTm9kZQkgICAqd2hl cmVDbGF1c2U7CiAJTGlzdAkgICAqY29sdW1uczsKKwlib29sCQlleGNlcHQ7CiB9IFB1YmxpY2F0 aW9uUmVsSW5mbzsKIAogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbihPaWQgcHVi aWQpOwogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbkJ5TmFtZShjb25zdCBjaGFy ICpwdWJuYW1lLCBib29sIG1pc3Npbmdfb2spOwotZXh0ZXJuIExpc3QgKkdldFJlbGF0aW9uUHVi bGljYXRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gYm9vbCBHZXRSZWxhdGlvblB1YmxpY2F0aW9u cyhPaWQgcmVsaWQsIExpc3QgKipwdWJpZHMsIExpc3QgKipleGNlcHRfcHViaWRzKTsKIAogLyot LS0tLS0tLS0KLSAqIEV4cGVjdGVkIHZhbHVlcyBmb3IgcHViX3BhcnRvcHQgcGFyYW1ldGVyIG9m IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKCksCi0gKiB3aGljaCBhbGxvd3MgY2FsbGVycyB0byBz cGVjaWZ5IHdoaWNoIHBhcnRpdGlvbnMgb2YgcGFydGl0aW9uZWQgdGFibGVzCi0gKiBtZW50aW9u ZWQgaW4gdGhlIHB1YmxpY2F0aW9uIHRoZXkgZXhwZWN0IHRvIHNlZS4KKyAqIEV4cGVjdGVkIHZh bHVlcyBmb3IgcHViX3BhcnRvcHQgcGFyYW1ldGVyIG9mCisgKiBHZXRJbmNsdWRlZFJlbGF0aW9u c0J5UHViKCksIHdoaWNoIGFsbG93cyBjYWxsZXJzIHRvIHNwZWNpZnkgd2hpY2gKKyAqIHBhcnRp dGlvbnMgb2YgcGFydGl0aW9uZWQgdGFibGVzIG1lbnRpb25lZCBpbiB0aGUgcHVibGljYXRpb24g dGhleSBleHBlY3QgdG8KKyAqIHNlZS4KICAqCiAgKglST09UOglvbmx5IHRoZSB0YWJsZSBleHBs aWNpdGx5IG1lbnRpb25lZCBpbiB0aGUgcHVibGljYXRpb24KICAqCUxFQUY6CW9ubHkgbGVhZiBw YXJ0aXRpb25zIGluIGdpdmVuIHRyZWUKQEAgLTE2OCw5ICsxNzAsMTIgQEAgdHlwZWRlZiBlbnVt IFB1YmxpY2F0aW9uUGFydE9wdAogCVBVQkxJQ0FUSU9OX1BBUlRfQUxMLAogfSBQdWJsaWNhdGlv blBhcnRPcHQ7CiAKLWV4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgcHVi aWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCk7CitleHRlcm4gTGlzdCAqR2V0SW5j bHVkZWRSZWxhdGlvbnNCeVB1YihPaWQgcHViaWQsCisJCQkJCQkJCQkgICBQdWJsaWNhdGlvblBh cnRPcHQgcHViX3BhcnRvcHQpOworZXh0ZXJuIExpc3QgKkdldEV4Y2x1ZGVkVGFibGVzQnlQdWIo T2lkIHB1YmlkLAorCQkJCQkJCQkJUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KTsKIGV4 dGVybiBMaXN0ICpHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnModm9pZCk7Ci1leHRlcm4gTGlzdCAq R2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoY2hhciByZWxraW5kLCBib29sIHB1YnZpYXJvb3Qp OworZXh0ZXJuIExpc3QgKkdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKFB1YmxpY2F0aW9uICpw dWIsIGNoYXIgcmVsa2luZCk7CiBleHRlcm4gTGlzdCAqR2V0UHVibGljYXRpb25TY2hlbWFzKE9p ZCBwdWJpZCk7CiBleHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVibGljYXRpb25zKE9pZCBzY2hlbWFp ZCk7CiBleHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHNjaGVt YWlkLApAQCAtMTg1LDYgKzE5MCw4IEBAIGV4dGVybiBPaWQJR2V0VG9wTW9zdEFuY2VzdG9ySW5Q dWJsaWNhdGlvbihPaWQgcHVib2lkLCBMaXN0ICphbmNlc3RvcnMsCiAKIGV4dGVybiBib29sIGlz X3B1Ymxpc2hhYmxlX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gYm9vbCBpc19zY2hl bWFfcHVibGljYXRpb24oT2lkIHB1YmlkKTsKK2V4dGVybiBib29sIGlzX3JlbGlkX2V4Y2VwdGVk KE9pZCByZWxpZCwgT2lkIHB1YmlkKTsKK2V4dGVybiBib29sIHB1YmxpY2F0aW9uX2hhc19hbnlf ZXhjZXB0X3RhYmxlKE9pZCBwdWJpZCk7CiBleHRlcm4gYm9vbCBjaGVja19hbmRfZmV0Y2hfY29s dW1uX2xpc3QoUHVibGljYXRpb24gKnB1YiwgT2lkIHJlbGlkLAogCQkJCQkJCQkJCU1lbW9yeUNv bnRleHQgbWN4dCwgQml0bWFwc2V0ICoqY29scyk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJs aWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmggYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oCmluZGV4IDNhODc5MGU4NDgy Li44MDJhOGY1NzZjMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbl9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5o CkBAIC0zMSw2ICszMSw3IEBAIENBVEFMT0cocGdfcHVibGljYXRpb25fcmVsLDYxMDYsUHVibGlj YXRpb25SZWxSZWxhdGlvbklkKQogCU9pZAkJCW9pZDsJCQkvKiBvaWQgKi8KIAlPaWQJCQlwcnB1 YmlkIEJLSV9MT09LVVAocGdfcHVibGljYXRpb24pOyAvKiBPaWQgb2YgdGhlIHB1YmxpY2F0aW9u ICovCiAJT2lkCQkJcHJyZWxpZCBCS0lfTE9PS1VQKHBnX2NsYXNzKTsJLyogT2lkIG9mIHRoZSBy ZWxhdGlvbiAqLworCWJvb2wJCXByZXhjZXB0IEJLSV9ERUZBVUxUKGYpOwkvKiByZWxhdGlvbiBp cyBub3QgcHVibGlzaGVkICovCiAKICNpZmRlZglDQVRBTE9HX1ZBUkxFTgkJCS8qIHZhcmlhYmxl LWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLwogCXBnX25vZGVfdHJlZSBwcnF1YWw7CQkvKiBx dWFsaWZpY2F0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDBhZWM0OWJkZDIyLi5i MWRlMzVkYzNlMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtNDI5OSw5ICs0Mjk5LDEwIEBA IHR5cGVkZWYgc3RydWN0IEFsdGVyVFNDb25maWd1cmF0aW9uU3RtdAogdHlwZWRlZiBzdHJ1Y3Qg UHVibGljYXRpb25UYWJsZQogewogCU5vZGVUYWcJCXR5cGU7Ci0JUmFuZ2VWYXIgICAqcmVsYXRp b247CQkvKiByZWxhdGlvbiB0byBiZSBwdWJsaXNoZWQgKi8KKwlSYW5nZVZhciAgICpyZWxhdGlv bjsJCS8qIHB1YmxpY2F0aW9uIHJlbGF0aW9uICovCiAJTm9kZQkgICAqd2hlcmVDbGF1c2U7CS8q IHF1YWxpZmljYXRpb25zICovCiAJTGlzdAkgICAqY29sdW1uczsJCS8qIExpc3Qgb2YgY29sdW1u cyBpbiBhIHB1YmxpY2F0aW9uIHRhYmxlICovCisJYm9vbAkJZXhjZXB0OwkJCS8qIFRydWUgaWYg bGlzdGVkIGluIHRoZSBFWENFUFQgY2xhdXNlICovCiB9IFB1YmxpY2F0aW9uVGFibGU7CiAKIC8q CkBAIC00MzEwLDYgKzQzMTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvblRhYmxlCiB0 eXBlZGVmIGVudW0gUHVibGljYXRpb25PYmpTcGVjVHlwZQogewogCVBVQkxJQ0FUSU9OT0JKX1RB QkxFLAkJLyogQSB0YWJsZSAqLworCVBVQkxJQ0FUSU9OT0JKX0VYQ0VQVF9UQUJMRSwJLyogQSB0 YWJsZSBpbiB0aGUgRVhDRVBUIGNsYXVzZSAqLwogCVBVQkxJQ0FUSU9OT0JKX1RBQkxFU19JTl9T Q0hFTUEsCS8qIEFsbCB0YWJsZXMgaW4gc2NoZW1hICovCiAJUFVCTElDQVRJT05PQkpfVEFCTEVT X0lOX0NVUl9TQ0hFTUEsCS8qIEFsbCB0YWJsZXMgaW4gZmlyc3QgZWxlbWVudCBvZgogCQkJCQkJ CQkJCQkgKiBzZWFyY2hfcGF0aCAqLwpAQCAtNDMzOCw2ICs0MzQwLDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgUHVibGljYXRpb25BbGxPYmpTcGVjCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlQdWJsaWNhdGlv bkFsbE9ialR5cGUgcHVib2JqdHlwZTsJLyogdHlwZSBvZiB0aGlzIHB1YmxpY2F0aW9uIG9iamVj dCAqLworCUxpc3QJICAgKmV4Y2VwdF90YWJsZXM7CS8qIHRhYmxlcyBzcGVjaWZpZWQgaW4gdGhl IEVYQ0VQVCBjbGF1c2UgKi8KIAlQYXJzZUxvYwlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9u LCBvciAtMSBpZiB1bmtub3duICovCiB9IFB1YmxpY2F0aW9uQWxsT2JqU3BlYzsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAppbmRleCAzM2ZiN2Y1NTJiNC4uMWY5 ZWNlMDU2YjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRl cm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBA IC0yMzQsNiArMjM0LDEyIEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv CiAJUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqc2hhcmVkOwogfSBQYXJhbGxlbEFwcGx5V29y a2VySW5mbzsKIAordHlwZWRlZiBzdHJ1Y3QgUXVhbGlmaWVkUmVsYXRpb25OYW1lCit7CisJY2hh cgkgICAqbnNwbmFtZTsKKwljaGFyCSAgICpyZWxuYW1lOworfSBRdWFsaWZpZWRSZWxhdGlvbk5h bWU7CisKIC8qIE1haW4gbWVtb3J5IGNvbnRleHQgZm9yIGFwcGx5IHdvcmtlci4gUGVybWFuZW50 IGR1cmluZyB3b3JrZXIgbGlmZXRpbWUuICovCiBleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5Q29u dGV4dCBBcHBseUNvbnRleHQ7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQKaW5kZXggN2ZiNDlhYWYyOWIuLjU1ZGZiZTlkNWU5IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMjEzLDMzICsyMTMsMTM5IEBAIE5vdC1udWxs IGNvbnN0cmFpbnRzOgogIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCBm ICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg bm9uZSAgICAgICAgICAgICAgfCBmCiAoMSByb3cpCiAKLURST1AgVEFCTEUgdGVzdHB1Yl90Ymwy OwotRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlcywgdGVzdHB1Yl9mb3J0YWJs ZSwgdGVzdHB1Yl9mb3JzY2hlbWEsIHRlc3RwdWJfZm9yX3RibF9zY2hlbWE7Ci1DUkVBVEUgVEFC TEUgdGVzdHB1Yl90YmwzIChhIGludCk7Ci1DUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmwzYSAoYiB0 ZXh0KSBJTkhFUklUUyAodGVzdHB1Yl90YmwzKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gRVhDRVBUIFRBQkxFIHRlc3RzIGZvciBub3JtYWwgdGFi bGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNFVCBj bGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKLUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi MyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwotQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZP UiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKKy0tIFNwZWNpZnkgdGFibGVsaXN0IGluIHRoZSBF WENFUFQgY2xhdXNlIG9mIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24KK0NSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZSBGT1IgQUxMIFRBQkxFUyBF WENFUFQgVEFCTEUgKHRlc3RwdWJfdGJsMSwgdGVzdHB1Yl90YmwyKTsKK1xkUnArIHRlc3RwdWJf Zm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVt bnMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgdCAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYKK0V4Y2VwdCB0YWJsZXM6Cisg ICAgInB1YmxpYy50ZXN0cHViX3RibDEiCisgICAgInB1YmxpYy50ZXN0cHViX3RibDIiCisKKy0t IFNwZWNpZnkgdGFibGUgaW4gdGhlIEVYQ0VQVCBjbGF1c2Ugb2YgYSBGT1IgQUxMIFRBQkxFUyBw dWJsaWNhdGlvbgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2Vw dHRhYmxlMSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKHRlc3RwdWJfdGJsMSk7CitcZFJwKyB0ZXN0 cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFi bGUxCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5j ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQg Y29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRhYmxl czoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKKworLS0gQ2hlY2sgdGhhdCB0aGUgdGFibGUg ZGVzY3JpcHRpb24gc2hvd3MgdGhlIHB1YmxpY2F0aW9ucyB3aGVyZSBpdCBpcyBsaXN0ZWQKKy0t IGluIHRoZSBFWENFUFQgY2xhdXNlCitcZCB0ZXN0cHViX3RibDEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3RwdWJfdGJsMSIKKyBDb2x1bW4gfCAgVHlwZSAg IHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCAgICAgICAgICAgICAgICAgRGVmYXVsdCAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgaWQgICAgIHwgaW50ZWdl ciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgbmV4dHZhbCgndGVzdHB1Yl90YmwxX2lkX3NlcSc6 OnJlZ2NsYXNzKQorIGRhdGEgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAor SW5kZXhlczoKKyAgICAidGVzdHB1Yl90YmwxX3BrZXkiIFBSSU1BUlkgS0VZLCBidHJlZSAoaWQp CitQdWJsaWNhdGlvbnM6CisgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgorRXhjZXB0IFB1Ymxp Y2F0aW9uczoKKyAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUiCisgICAgInRl c3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMSIKKwogUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKK0RST1AgVEFCTEUgdGVzdHB1Yl90YmwyOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcmFsbHRhYmxlcywgdGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1Yl9mb3JzY2hlbWEsIHRlc3Rw dWJfZm9yX3RibF9zY2hlbWEsIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlLCB0ZXN0 cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTE7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRlc3RzIGZvciBpbmhlcml0ZWQgdGFibGVzLCBhbmQK Ky0tIEVYQ0VQVCBUQUJMRSB0ZXN0cyBmb3IgaW5oZXJpdGVkIHRhYmxlcworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTRVQgY2xpZW50X21pbl9tZXNzYWdl cyA9ICdFUlJPUic7CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50IChhIGludCk7CitD UkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfY2hpbGQgKGIgdGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJf dGJsX3BhcmVudCk7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3Rw dWJfdGJsX3BhcmVudDsKIFxkUnArIHRlc3RwdWIzCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMwogICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBW aWEgcm9vdCAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCiAgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYKIFRhYmxlczoKLSAgICAicHVibGljLnRl c3RwdWJfdGJsMyIKLSAgICAicHVibGljLnRlc3RwdWJfdGJsM2EiCisgICAgInB1YmxpYy50ZXN0 cHViX3RibF9jaGlsZCIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKIAorQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsX3BhcmVudDsK IFxkUnArIHRlc3RwdWI0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAogICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCAKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tCiAgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25l ICAgICAgICAgICAgICB8IGYKIFRhYmxlczoKLSAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKKyAg ICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKKworLS0gTGlzdCB0aGUgcGFyZW50IHRhYmxl IGluIHRoZSBFWENFUFQgY2xhdXNlICh3aXRob3V0IE9OTFkgb3IgJyonKQorQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWI1IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90Ymxf cGFyZW50KTsKK1xkUnArIHRlc3RwdWI1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAg ICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBub25lICAgICAgICAgICAgICB8IGYKK0V4Y2VwdCB0YWJsZXM6CisgICAgInB1YmxpYy50 ZXN0cHViX3RibF9jaGlsZCIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKKworLS0g RVhDRVBUIHdpdGggJyonOiBsaXN0IHRoZSB0YWJsZSBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cyBp biB0aGUgRVhDRVBUIGNsYXVzZQorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBBTEwg VEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmxfcGFyZW50ICopOworXGRScCsgdGVzdHB1 YjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAg IHwgZgorRXhjZXB0IHRhYmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAg ICJwdWJsaWMudGVzdHB1Yl90YmxfcGFyZW50IgorCistLSBFWENFUFQgd2l0aCBPTkxZOiBsaXN0 IHRoZSB0YWJsZSBpbiB0aGUgRVhDRVBUIGNsYXVzZSwgYnV0IG5vdCBpdHMgZGVzY2VuZGFudHMK K0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNyBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUg KE9OTFkgdGVzdHB1Yl90YmxfcGFyZW50KTsKK1xkUnArIHRlc3RwdWI3CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViNworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVu Y2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVk IGNvbHVtbnMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYKK0V4Y2VwdCB0YWJs ZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3RibF9wYXJlbnQiCiAKLURST1AgVEFCTEUgdGVzdHB1 Yl90YmwzLCB0ZXN0cHViX3RibDNhOwotRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMywgdGVzdHB1 YjQ7CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworRFJPUCBUQUJMRSB0ZXN0cHViX3RibF9w YXJlbnQsIHRlc3RwdWJfdGJsX2NoaWxkOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMywgdGVz dHB1YjQsIHRlc3RwdWI1LCB0ZXN0cHViNiwgdGVzdHB1Yjc7CistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIEVYQ0VQVCBUQUJMRSB0ZXN0cyBmb3IgcGFy dGl0aW9uZWQgdGFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBUQUJMRSB0 ZXN0cHViX3Jvb3QoYSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShhKTsKK0NSRUFURSBUQUJMRSB0 ZXN0cHViX3BhcnQxIFBBUlRJVElPTiBPRiB0ZXN0cHViX3Jvb3QgRk9SIFZBTFVFUyBGUk9NICgw KSBUTyAoMTAwKTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3BhcnQyIFBBUlRJVElPTiBPRiB0ZXN0 cHViX3Jvb3QgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgyMDApOworQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWI4IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl9yb290KTsK K1xkUnArIHRlc3RwdWI4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjgKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCBmICAg ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgbm9u ZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1Yl9y b290IgorCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjkgRk9SIEFMTCBUQUJMRVMgRVhDRVBU IFRBQkxFICh0ZXN0cHViX3BhcnQxKTsKK1xkUnArIHRlc3RwdWI5OworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjkKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBj b2x1bW5zIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IHQgICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVz OgorICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0MSIKKworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKK0RST1AgVEFCTEUgdGVzdHB1Yl9yb290LCB0ZXN0cHViX3BhcnQxLCB0ZXN0cHViX3BhcnQy OworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViOCwgdGVzdHB1Yjk7CiAtLS0gVGVzdHMgZm9yIHB1 YmxpY2F0aW9ucyB3aXRoIFNFUVVFTkNFUwogQ1JFQVRFIFNFUVVFTkNFIHJlZ3Jlc3NfcHViX3Nl cTA7CiBDUkVBVEUgU0VRVUVOQ0UgcHViX3Rlc3QucmVncmVzc19wdWJfc2VxMTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAppbmRleCA4NWIwMGJkNjdjOC4uODA5MTNkNTYyYmUgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKQEAgLTEwNSwyMCArMTA1LDY0IEBAIFNF TEVDVCBwdWJuYW1lLCBwdWJhbGx0YWJsZXMgRlJPTSBwZ19wdWJsaWNhdGlvbiBXSEVSRSBwdWJu YW1lID0gJ3Rlc3RwdWJfZm9yYWxsCiBcZCsgdGVzdHB1Yl90YmwyCiBcZFJwKyB0ZXN0cHViX2Zv cmFsbHRhYmxlcwogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKy0tIEVYQ0VQVCBUQUJMRSB0ZXN0cyBmb3Igbm9ybWFsIHRhYmxlcworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTRVQgY2xpZW50X21pbl9tZXNzYWdl cyA9ICdFUlJPUic7CistLSBTcGVjaWZ5IHRhYmxlbGlzdCBpbiB0aGUgRVhDRVBUIGNsYXVzZSBv ZiBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0 ZXN0cHViX3RibDEsIHRlc3RwdWJfdGJsMik7CitcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlc19l eGNlcHR0YWJsZQorLS0gU3BlY2lmeSB0YWJsZSBpbiB0aGUgRVhDRVBUIGNsYXVzZSBvZiBhIEZP UiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3Jh bGx0YWJsZXNfZXhjZXB0dGFibGUxIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAodGVzdHB1Yl90Ymwx KTsKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMQorLS0gQ2hlY2sgdGhh dCB0aGUgdGFibGUgZGVzY3JpcHRpb24gc2hvd3MgdGhlIHB1YmxpY2F0aW9ucyB3aGVyZSBpdCBp cyBsaXN0ZWQKKy0tIGluIHRoZSBFWENFUFQgY2xhdXNlCitcZCB0ZXN0cHViX3RibDEKKworUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwyOwotRFJPUCBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlcywgdGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1 Yl9mb3JzY2hlbWEsIHRlc3RwdWJfZm9yX3RibF9zY2hlbWE7CitEUk9QIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwg dGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSwgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUs IHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMTsKIAotQ1JFQVRFIFRBQkxFIHRlc3Rw dWJfdGJsMyAoYSBpbnQpOwotQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsM2EgKGIgdGV4dCkgSU5I RVJJVFMgKHRlc3RwdWJfdGJsMyk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKy0tIFRlc3RzIGZvciBpbmhlcml0ZWQgdGFibGVzLCBhbmQKKy0tIEVYQ0VQ VCBUQUJMRSB0ZXN0cyBmb3IgaW5oZXJpdGVkIHRhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJP Uic7Ci1DUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsK LUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7 Ci1SRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX3Bh cmVudCAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2NoaWxkIChiIHRleHQpIElO SEVSSVRTICh0ZXN0cHViX3RibF9wYXJlbnQpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIz IEZPUiBUQUJMRSB0ZXN0cHViX3RibF9wYXJlbnQ7CiBcZFJwKyB0ZXN0cHViMworQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsX3BhcmVudDsKIFxk UnArIHRlc3RwdWI0CistLSBMaXN0IHRoZSBwYXJlbnQgdGFibGUgaW4gdGhlIEVYQ0VQVCBjbGF1 c2UgKHdpdGhvdXQgT05MWSBvciAnKicpCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9S IEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVz dHB1YjUKKy0tIEVYQ0VQVCB3aXRoICcqJzogbGlzdCB0aGUgdGFibGUgYW5kIGFsbCBpdHMgZGVz Y2VuZGFudHMgaW4gdGhlIEVYQ0VQVCBjbGF1c2UKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi NiBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHRlc3RwdWJfdGJsX3BhcmVudCAqKTsKK1xk UnArIHRlc3RwdWI2CistLSBFWENFUFQgd2l0aCBPTkxZOiBsaXN0IHRoZSB0YWJsZSBpbiB0aGUg RVhDRVBUIGNsYXVzZSwgYnV0IG5vdCBpdHMgZGVzY2VuZGFudHMKK0NSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViNyBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKE9OTFkgdGVzdHB1Yl90Ymxf cGFyZW50KTsKK1xkUnArIHRlc3RwdWI3CiAKLURST1AgVEFCTEUgdGVzdHB1Yl90YmwzLCB0ZXN0 cHViX3RibDNhOwotRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMywgdGVzdHB1YjQ7CitSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOworRFJPUCBUQUJMRSB0ZXN0cHViX3RibF9wYXJlbnQsIHRlc3Rw dWJfdGJsX2NoaWxkOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMywgdGVzdHB1YjQsIHRlc3Rw dWI1LCB0ZXN0cHViNiwgdGVzdHB1Yjc7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorLS0gRVhDRVBUIFRBQkxFIHRlc3RzIGZvciBwYXJ0aXRpb25lZCB0 YWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcm9v dChhIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGEpOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcGFy dDEgUEFSVElUSU9OIE9GIHRlc3RwdWJfcm9vdCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfcGFydDIgUEFSVElUSU9OIE9GIHRlc3RwdWJfcm9vdCBG T1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDIwMCk7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 YjggRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3Jvb3QpOworXGRScCsgdGVz dHB1Yjg7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjkgRk9SIEFMTCBUQUJMRVMgRVhDRVBU IFRBQkxFICh0ZXN0cHViX3BhcnQxKTsKK1xkUnArIHRlc3RwdWI5OworCitSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOworRFJPUCBUQUJMRSB0ZXN0cHViX3Jvb3QsIHRlc3RwdWJfcGFydDEsIHRl c3RwdWJfcGFydDI7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWI4LCB0ZXN0cHViOTsKIAogLS0t IFRlc3RzIGZvciBwdWJsaWNhdGlvbnMgd2l0aCBTRVFVRU5DRVMKIENSRUFURSBTRVFVRU5DRSBy ZWdyZXNzX3B1Yl9zZXEwOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29u LmJ1aWxkIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCmluZGV4IGE0YzdkYmFm ZjU5Li4wNzI4MmFhM2MxOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29u LmJ1aWxkCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZApAQCAtNDYsNiAr NDYsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMzRfdGVtcG9yYWwucGwnLAogICAgICAgJ3Qv MDM1X2NvbmZsaWN0cy5wbCcsCiAgICAgICAndC8wMzZfc2VxdWVuY2VzLnBsJywKKyAgICAgICd0 LzAzN19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwnLAogICAgICAgJ3QvMTAwX2J1Z3MucGwn LAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdf cmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3 X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJsZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZGNjYjFlZmI3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsCkBAIC0wLDAgKzEsMzYy IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisKKyMgTG9naWNhbCByZXBsaWNhdGlvbiB0ZXN0cyBmb3IgRVhDRVBUIFRB QkxFIHB1YmxpY2F0aW9ucwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRl c3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSBwdWJsaXNoZXIgbm9kZQorbXkgJG5vZGVfcHVibGlz aGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2Rl X3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9w dWJsaXNoZXItPnN0YXJ0OworCitteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNo ZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CisKKyMgSW5pdGlhbGl6ZSBzdWJzY3Jp YmVyIG5vZGUKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRyZXN1 bHQ7CisKK3N1YiB0ZXN0X2V4Y2VwdF9yb290X3BhcnRpdGlvbgoreworCW15ICRwdWJ2aWFyb290 ID0gQF87CisKKwkjIFdoZW4gdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgaXMgbGlzdGVkIGlu IHRoZSBFWENFUFQgY2xhdXNlLAorCSMgYWxsIGl0cyBwYXJ0aXRpb25zIGFyZSBub3QgcHVibGlz aGVkLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxcSgKKwkJ Q1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFC TEUgKHNjaDEudDEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gJHB1YnZpYXJv b3QpOworCQlJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMSksICgxMDEpLCAoMTUxKTsKKwkp KTsKKwkkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicg UFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IgorCSk7CisJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9m b3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLAorCQkndGFwX3N1Yl9wYXJ0Jyk7 CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBzbG90 X25hbWUgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJ3Rlc3Rfc2xvdCcsIHBnX2N1 cnJlbnRfd2FsX2xzbigpKTsiCisJKTsKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCQkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoMTAyKSwgKDE1Miki KTsKKworCSMgVmVyaWZ5IHRoYXQgZGF0YSBpbnNlcnRlZCBpbnRvIHRoZSBwYXJ0aXRpb25lZCB0 YWJsZSBpcyBub3QgcHVibGlzaGVkIHdoZW4KKwkjIGl0IGlzIGluIHRoZSBFWENFUFQgY2xhdXNl LgorCSRyZXN1bHQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQki U0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfYmluYXJ5X2NoYW5n ZXMoJ3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEwsICdwcm90b192ZXJzaW9uJywgJzEnLCAncHVibGlj YXRpb25fbmFtZXMnLCAndGFwX3B1Yl9wYXJ0JykiCisJKTsKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworCisJIyBDaGVjayB0aGF0IG5vIHJvd3Mg YXJlIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcgorCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEudDEiKTsKKwlp cygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiByb290IHRhYmxlJyk7CisKKwkkcmVzdWx0 ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICog RlJPTSBzY2gxLnBhcnQxIik7CisJaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFi bGUgc2NoMS5wYXJ0MScpOworCisJJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MiIpOworCWlzKCRyZXN1 bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDInKTsKKworCSRyZXN1bHQg PQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBG Uk9NIHNjaDEucGFydDJfMSIpOworCWlzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRh YmxlIHNjaDEucGFydDJfMScpOworCisJJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0Ml8yIik7CisJaXMo JHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFibGUgc2NoMS5wYXJ0Ml8yJyk7CisKKwkk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9O IHRhcF9zdWJfcGFydCIpOworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydDsiKTsKK30KKworIyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBFWENFUFQgVEFCTEUgdGVzdCBjYXNl cyBmb3Igbm9ybWFsIHRhYmxlcworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorIyBDcmVhdGUgc2NoZW1hcyBhbmQgdGFibGVzIG9uIHB1Ymxpc2hlcgorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFNDSEVN QSBzY2gxOworCUNSRUFURSBUQUJMRSBzY2gxLnRhYjEgQVMgU0VMRUNUIGdlbmVyYXRlX3Nlcmll cygxLDEwKSBBUyBhOworKSk7CisKKyMgQ3JlYXRlIHNjaGVtYXMgYW5kIHRhYmxlcyBvbiBzdWJz Y3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJ Q1JFQVRFIFNDSEVNQSBzY2gxOworCUNSRUFURSBUQUJMRSBzY2gxLnRhYjEgKGEgaW50KTsKKykp OworCisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24sIGFuZCBjcmVhdGUgYSBsb2dpY2FsIHJl cGxpY2F0aW9uIHNsb3QgdG8gaGVscCB3aXRoCisjIGxhdGVyIHRlc3RzLgorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJf c2NoZW1hIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoc2NoMS50YWIxKSIKKyk7CisKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19jcmVhdGVf bG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCd0ZXN0X3Nsb3QnLCAncGdvdXRwdXQnKSIpOworCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQ VElPTiB0YXBfc3ViX3NjaGVtYSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIHRhcF9wdWJfc2NoZW1hIgorKTsKKworIyBXYWl0IGZvciBpbml0aWFsIHRhYmxlIHN5 bmMgdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3lu Yygkbm9kZV9wdWJsaXNoZXIsCisJJ3RhcF9zdWJfc2NoZW1hJyk7CisKKyMgQ2hlY2sgdGhlIHRh YmxlIGRhdGEgZG9lcyBub3Qgc3luYyBmb3IgdGhlIHRhYmxlcyBzcGVjaWZpZWQgaW4gRVhDRVBU IGNsYXVzZQorJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gc2NoMS50YWIxIik7CitpcygkcmVzdWx0LCBxcSgw KSwKKwknY2hlY2sgdGhlcmUgaXMgbm8gaW5pdGlhbCBkYXRhIGNvcGllZCBmb3IgdGhlIHRhYmxl cyBzcGVjaWZpZWQgaW4gdGhlIGV4Y2VwdCBjbGF1c2UnCispOworCisjIEluc2VydCBzb21lIGRh dGEgaW50byB0aGUgdGFibGUgbGlzdGVkIGluIHRoZSBFWENFUFQgY2xhdXNlCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBzY2gxLnRhYjEgVkFM VUVTKGdlbmVyYXRlX3NlcmllcygxMSwyMCkpIik7CisKKyMgVmVyaWZ5IHRoYXQgZGF0YSBpbnNl cnRlZCBpbnRvIGEgdGFibGUgbGlzdGVkIGluIHRoZSBFWENFUFQgY2xhdXNlIGlzIG5vdAorIyBw dWJsaXNoZWQuCiskcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfYmluYXJ5 X2NoYW5nZXMoJ3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEwsICdwcm90b192ZXJzaW9uJywgJzEnLCAn cHVibGljYXRpb25fbmFtZXMnLCAndGFwX3N1Yl9zY2hlbWEnKSIKKyk7CitpcygkcmVzdWx0LCBx cSh0KSwKKwkndmVyaWZ5IG5vIGNoYW5nZXMgZm9yIHRhYmxlIGxpc3RlZCBpbiB0aGUgRVhDRVBU IGNsYXVzZSBhcmUgcHJlc2VudCBpbiB0aGUgcmVwbGljYXRpb24gc2xvdCcKKyk7CisKKyMgVmVy aWZ5IHRoYXQgZGF0YSBpbnNlcnRlZCBpbnRvIGEgdGFibGUgbGlzdGVkIGluIHRoZSBFWENFUFQg Y2xhdXNlIGlzIG5vdAorIyByZXBsaWNhdGVkLgorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCd0YXBfc3ViX3NjaGVtYScpOworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gc2NoMS50YWIxIik7 CitpcygkcmVzdWx0LCBxcSgwKSwgJ2NoZWNrIHJlcGxpY2F0ZWQgaW5zZXJ0cyBvbiBzdWJzY3Jp YmVyJyk7CisKKyMgY2xlYW51cAorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3NjaGVtYSIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJRFJPUCBQVUJMSUNBVElPTiB0YXBfcHVi X3NjaGVtYTsKKwlUUlVOQ0FURSBUQUJMRSBzY2gxLnRhYjE7CispKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFCTEUgc2NoMS50YWIxIik7CisK KyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgRVhDRVBU IFRBQkxFIHRlc3QgY2FzZXMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcworIyBDaGVjayBiZWhhdmlv ciBvZiBFWENFUFQgVEFCTEUgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBvbiBhCisj IHBhcnRpdGlvbmVkIHRhYmxlIGFuZCBpdHMgcGFydGl0aW9ucy4KKyMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgU2V0dXAgcGFydGl0aW9uZWQgdGFibGUg YW5kIHBhcnRpdGlvbnMgb24gdGhlIHB1Ymxpc2hlciB0aGF0IG1hcCB0byBub3JtYWwKKyMgdGFi bGVzIG9uIHRoZSBzdWJzY3JpYmVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgc2NoMS50MShhIGludCkgUEFSVElUSU9OIEJZIFJB TkdFKGEpOworCUNSRUFURSBUQUJMRSBzY2gxLnBhcnQxIFBBUlRJVElPTiBPRiBzY2gxLnQxIEZP UiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDIgUEFS VElUSU9OIE9GIHNjaDEudDEgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgyMDApIFBBUlRJVElP TiBCWSBSQU5HRShhKTs7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDJfMSBQQVJUSVRJT04gT0Yg c2NoMS5wYXJ0MiBGT1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDE1MCk7CisJQ1JFQVRFIFRBQkxF IHNjaDEucGFydDJfMiBQQVJUSVRJT04gT0Ygc2NoMS5wYXJ0MiBGT1IgVkFMVUVTIEZST00gKDE1 MCkgVE8gKDIwMCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0 Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSBzY2gxLnQxKGEgaW50KTsKKwlDUkVBVEUgVEFCTEUg c2NoMS5wYXJ0MShhIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDIoYSBpbnQpOworCUNS RUFURSBUQUJMRSBzY2gxLnBhcnQyXzEoYSBpbnQpOworCUNSRUFURSBUQUJMRSBzY2gxLnBhcnQy XzIoYSBpbnQpOworKSk7CisKK3Rlc3RfZXhjZXB0X3Jvb3RfcGFydGl0aW9uKCdmYWxzZScpOwor dGVzdF9leGNlcHRfcm9vdF9wYXJ0aXRpb24oJ3RydWUnKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0 aW9uX3Nsb3RfYWR2YW5jZSgndGVzdF9zbG90JywgcGdfY3VycmVudF93YWxfbHNuKCkpOyIKKyk7 CisKKyMgRXhjbHVkaW5nIG9uZSBvZiB0aGUgcGFydGl0aW9ucyAocGFydDIpIHNob3VsZCBub3Qg YWZmZWN0IHJlcGxpY2F0aW9uIG9mIHRoZQorIyBvdGhlciBwYXJ0aXRpb25zIHRoYXQgZG9uJ3Qg aW50ZXJzZWN0IGl0LiBTbywgaW4gdGhpcyBjYXNlLCBhbGwgb2YgcGFydDEKKyMgc2hvdWxkIHN0 aWxsIGJlIHJlcGxpY2F0ZWQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxcSgKKwlUUlVOQ0FURSBzY2gxLnQxOworCUlOU0VSVCBJTlRPIHNjaDEudDEgVkFMVUVT ICgzKSwgKDEwMyksICgxNTMpOworCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9S IEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnBhcnQyKSBXSVRIIChwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo CisJJ3Bvc3RncmVzJywgcXEoCisJVFJVTkNBVEUgc2NoMS50MTsKKwlDUkVBVEUgU1VCU0NSSVBU SU9OIHRhcF9zdWJfcGFydCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FU SU9OIHRhcF9wdWJfcGFydDsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2Ny aXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2xvdF9uYW1lIEZST00gcGdf cmVwbGljYXRpb25fc2xvdF9hZHZhbmNlKCd0ZXN0X3Nsb3QnLCBwZ19jdXJyZW50X3dhbF9sc24o KSk7IgorKTsKKworIyBWZXJpZnkgdGhhdCBkYXRhIGluc2VydGVkIHRvIHRoZSBwYXJ0aXRpb24g cGFydDIgaXMgbm90IHB1Ymxpc2hlZCB3aGVuIGl0CisjIGlzIGluIHRoZSBFWENFUFQgY2xhdXNl CiskcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUIGNvdW50KCopID0gMCBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfYmluYXJ5X2NoYW5nZXMo J3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEwsICdwcm90b192ZXJzaW9uJywgJzEnLCAncHVibGljYXRp b25fbmFtZXMnLCAndGFwX3B1Yl9wYXJ0JykiCispOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKworIyBDaGVjayB0aGF0IHRhYmxlIGRhdGEgMTAz IGFuZCAxNTMgd2hpY2ggaXMgcHJlc2VudCBpbiBzY2gxLnBhcnQyIHNob3VsZAorIyBub3QgYmUg cmVwbGljYXRlZC4KKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS50MSIpOworaXMoJHJlc3VsdCwgcXEoMyksICdjaGVj ayByb3dzIG9uIHJvb3QgdGFibGUnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQxIik7CitpcygkcmVz dWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQxJyk7CisKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00g c2NoMS5wYXJ0MiIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFibGUgc2No MS5wYXJ0MicpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDJfMSIpOworaXMoJHJlc3VsdCwgcXEo KSwgJ2NoZWNrIHJvd3Mgb24gdGFibGUgc2NoMS5wYXJ0Ml8xJyk7CisKKyRyZXN1bHQgPQorICAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2No MS5wYXJ0Ml8yIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gx LnBhcnQyXzInKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydDsiKTsKKworIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0IHdoZW4g YSBzdWJzY3JpcHRpb24gaXMgc3Vic2NyaWJpbmcgdG8gbXVsdGlwbGUgcHVibGljYXRpb25zCisj ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEVSUk9SIGlm IHN1YnNjcmliaW5nIHRvIG11bHRpcGxlIHB1YmxpY2F0aW9ucyBoYXZpbmcgRVhDRVBUIFRBQkxF LgorbXkgKCRzdGRvdXQsICRzdGRlcnIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgK KwkncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YjEgRk9SIEFMTCBU QUJMRVMgRVhDRVBUIChzY2gxLnRhYjEpOworCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViMiBG T1IgQUxMIFRBQkxFUyBFWENFUFQgKHNjaDEudDEpOworKSk7CisKKygkcmVzdWx0LCAkc3Rkb3V0 LCAkc3RkZXJyKSA9ICRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVC TElDQVRJT04gdGFwX3B1YjEsIHRhcF9wdWIyIgorKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9F UlJPUjogIGNhbm5vdCBjb21iaW5lIHB1YmxpY2F0aW9ucyAidGFwX3B1YjEiLCAidGFwX3B1YjIi IHdpdGggRVhDRVBUIFRBQkxFIGNsYXVzZXMvLAorCSdzdWJzY3JpcHRpb24gd2l0aCBtdWx0aXBs ZSBFWENFUFQgVEFCTEUgcHVibGljYXRpb24nKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0RST1AgUFVCTElDQVRJT04gdGFwX3B1YjInKTsKKworIyBPSyB3aGVu IGEgdGFibGUgaXMgZXhjbHVkZWQgYnkgcHViMSBFWENFUFQgVEFCTEUsIGJ1dCBpdCBpcyBpbmNs dWRlZCBieSBwdWIyCisjIEZPUiBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJ J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIyIEZPUiBUQUJMRSBz Y2gxLnRhYjE7CisJSU5TRVJUIElOVE8gc2NoMS50YWIxIFZBTFVFUygxKTsKKykpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9z dWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiB0YXBfcHViMSwg dGFwX3B1YjIiCispOworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5 bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1YicpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxcShJTlNFUlQgSU5UTyBzY2gxLnRhYjEgVkFMVUVTKDIpKSk7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWInKTsKKworJHJlc3VsdCA9 ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00g c2NoMS50YWIxIE9SREVSIEJZIGEiKTsKK2lzKCAkcmVzdWx0LCBxcSgxCisyKSwKKwkiY2hlY2sg cmVwbGljYXRpb24gb2YgYSB0YWJsZSBpbiB0aGUgRVhDRVBUIGNsYXVzZSBvZiBvbmUgcHVibGlj YXRpb24gYnV0IGluY2x1ZGVkIGJ5IGFub3RoZXIiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViMjsKKwlU UlVOQ0FURSBzY2gxLnRhYjE7CispKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcShUUlVOQ0FURSBzY2gxLnRhYjEpKTsKKworIyBPSyB3aGVuIGEgdGFibGUgaXMg ZXhjbHVkZWQgYnkgcHViMSBFWENFUFQgVEFCTEUsIGJ1dCBpdCBpcyBpbmNsdWRlZCBieSBwdWIy CisjIEZPUiBBTEwgVEFCTEVTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YjIgRk9SIEFMTCBUQUJMRVM7CisJ SU5TRVJUIElOVE8gc2NoMS50YWIxIFZBTFVFUygxKTsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+ cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElP TiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiB0YXBfcHViMSwgdGFwX3B1YjIiCisp OworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVi bGlzaGVyLCAndGFwX3N1YicpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcShJTlNFUlQgSU5UTyBzY2gxLnRhYjEgVkFMVUVTKDIpKSk7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWInKTsKKworJHJlc3VsdCA9ICRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gc2NoMS50YWIxIE9S REVSIEJZIGEiKTsKK2lzKCAkcmVzdWx0LCBxcSgxCisyKSwKKwkiY2hlY2sgcmVwbGljYXRpb24g b2YgYSB0YWJsZSBpbiB0aGUgRVhDRVBUIGNsYXVzZSBvZiBvbmUgcHVibGljYXRpb24gYnV0IGlu Y2x1ZGVkIGJ5IGFub3RoZXIiCispOworCisjIEVSUk9SIGlmIEFMVEVSIFNVQlNDUklQVElPTiAu Li4gUkVGUkVTSCBQVUJMSUNBVElPTiBjYXVzZXMgdGhlCisjIHN1YnNjcmlwdGlvbiB0byBlbmQg dXAgd2l0aCBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgaGF2aW5nIEVYQ0VQVCBUQUJMRS4KKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCURST1AgUFVCTElDQVRJ T04gdGFwX3B1YjI7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIyIEZPUiBBTEwgVEFCTEVT IEVYQ0VQVCAoc2NoMS50MSk7CispKTsKKworKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0g JG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04g dGFwX3N1YiBSRUZSRVNIIFBVQkxJQ0FUSU9OIik7CitsaWtlKAorCSRzdGRlcnIsCisJcXIvRVJS T1I6ICBjYW5ub3QgY29tYmluZSBwdWJsaWNhdGlvbnMgInRhcF9wdWIxIiwgInRhcF9wdWIyIiB3 aXRoIEVYQ0VQVCBUQUJMRSBjbGF1c2VzLywKKwknc3Vic2NyaXB0aW9uIHdpdGggbXVsdGlwbGUg RVhDRVBUIFRBQkxFIHB1YmxpY2F0aW9uJyk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1YicpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0RST1AgUFVCTElDQVRJT04gdGFwX3B1YjEnKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdEUk9QIFBVQkxJQ0FUSU9O IHRhcF9wdWIyJyk7CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKyMgVGVzdCBtdWx0aS1wdWJsaWNhdGlvbiBzdWJzY3JpcHRpb24gd2hlcmUgYSB0YWJs ZSBsaXN0ZWQgaW4gdGhlCisjIEVYQ0VQVCBjbGF1c2Ugb2Ygb25lIHB1YmxpY2F0aW9uIGlzIGlu Y2x1ZGVkIGJ5IGFub3RoZXIgcHVibGljYXRpb24KKyMgPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0 Z3JlcycsIHFxKAorCVRSVU5DQVRFIFRBQkxFIHNjaDEudDE7CisJQ1JFQVRFIFBVQkxJQ0FUSU9O IHRhcF9wdWJfcGFydDEgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnBhcnQyXzEp IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CisJQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRhcF9wdWJfcGFydDIgRk9SIFRBQkxFIHNjaDEucGFydDJfMSBXSEVSRSAoYSA+IDEx MCkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKKwlJTlNFUlQgSU5U TyBzY2gxLnQxIFZBTFVFUyAoMTEpLCAoMTExKSwgKDE2MSk7CispKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlUUlVOQ0FURSBUQUJMRSBzY2gxLnQx LCBzY2gxLnBhcnQxLCBzY2gxLnBhcnQyLCBzY2gxLnBhcnQyXzEsIHNjaDEucGFydDJfMjsKKwlD UkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nv bm5zdHInIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydDEsIHRhcF9wdWJfcGFydDI7CispKTsKKyRu b2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hl ciwgJ3RhcF9zdWJfcGFydCcpOworCisjIFZlcmlmeSB0aGF0IHJvd3MgZm9yIHNjaDEucGFydDJf MSBhcmUgcmVwbGljYXRlZCBiZWNhdXNlIHRoZSB0YWJsZSwgYWx0aG91Z2gKKyMgbGlzdGVkIGlu IHRoZSBFWENFUFQgY2xhdXNlIG9mIHRhcF9wdWJfcGFydDEsIGlzIGluY2x1ZGVkIGJ5IHRhcF9w dWJfcGFydDIuCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEudDEgT1JERVIgQlkgMSIpOworaXMoICRyZXN1bHQs IHFxKDExCisxMTEKKzE2MSksICdpbml0aWFsIHJvd3MgcmVwbGljYXRlZCB0byByb290IHRhYmxl Jyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJ TlRPIHNjaDEudDEgVkFMVUVTICgxMiksICgxMTIpLCAoMTYyKTsiKTsKKworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKworJHJlc3VsdCA9CisgICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gx LnQxIE9SREVSIEJZIDEiKTsKK2lzKCAkcmVzdWx0LCBxcSgxMQorMTIKKzExMQorMTEyCisxNjEK KzE2MiksICdzdWJzZXF1ZW50IHJvd3MgcmVwbGljYXRlZCB0byByb290IHRhYmxlJyk7CisKKyRu b2RlX3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKaW5kZXggMjQxOTQ1NzM0ZWMuLjljNTc2ZTNjMjY3IDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMjQyMSw2ICsyNDIxLDcgQEAgUVROb2RlCiBRVUVSWVRZUEUK IFF1YWxDb3N0CiBRdWFsSXRlbQorUXVhbGlmaWVkUmVsYXRpb25OYW1lCiBRdWVyeQogUXVlcnlD b21wbGV0aW9uCiBRdWVyeURlc2MKLS0gCjIuMzQuMQoK --000000000000fa0109064b25f23a--