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.94.2) (envelope-from ) id 1r0Gw0-004iRx-89 for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Nov 2023 07:55:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r0Gvw-0060BF-S0 for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Nov 2023 07:55:36 +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.94.2) (envelope-from ) id 1r0Gvw-0060B6-Dv for pgsql-hackers@lists.postgresql.org; Tue, 07 Nov 2023 07:55:36 +0000 Received: from mail-yb1-xb29.google.com ([2607:f8b0:4864:20::b29]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r0Gvp-0058ha-M4 for pgsql-hackers@postgresql.org; Tue, 07 Nov 2023 07:55:35 +0000 Received: by mail-yb1-xb29.google.com with SMTP id 3f1490d57ef6-d9caf5cc948so5516291276.0 for ; Mon, 06 Nov 2023 23:55:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699343728; x=1699948528; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=mkVY9HGIamiuE+3MWcRzPiU8oOhXGYGT1bgOiJfQcD0=; b=Q6S/qbj2AQl2wWLW9n1ovHm6vm+tIOKV6Cgq2IOYPvA7Fyn9X9C7NI/7zh3SJFNO50 z7/Qu/crKKLPW3o5huhr9G55YnmgnqsNz0zm0aSyt10Rrq8KuyOUKTePN2AfJGctsOjk H6pXA9mki7b7wuyKljMeScnjmxTUft9LHr+LS6d+aMqFp1Td+pe45WfOpIaIcNsiUYt4 Z72Kvk7fhLotgz+Jqyh8LC5Va67EnA5djWsXD+7ybnBRgTktupkQwFZEzphIeczz2J94 rw1GEAUTX75lPMv4Q4FbuHVSM2MIm/Oe1Iqe6aw+Q+pcorIFnnQ2u5ZetPx0JTNIetQd Rl6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699343728; x=1699948528; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mkVY9HGIamiuE+3MWcRzPiU8oOhXGYGT1bgOiJfQcD0=; b=OMRLkEUD0/7uzbbe+2O4HHdhybGxbzwUlUXtRd2580IQejjeerTvZux8Wbee7YkUOe ilQ1dVTeYPRbh3eNn+Jt5j+X5phV7lxIwGBtGhFDSooMhMVnZWV2YI9fKL767lateZfE b6+HX1M/VhFxUSrr17FYhQv5A1UWQsgP9kNy6ypBqIMyC3SbST8kgP8PDz+52P8JGcjR NhK6KQaYaLMU5XwwfAS0RKOR9bXUje8O+ywXi7on7AOnP3pnNttTb4f1UJf6pL6p62mm KlIBXzdIac6nhLjATs4gOAtEyfJMTvYZokzsUIUoHKZvBiK1SFfmc66ybeTwUtJR9Qa5 0YSg== X-Gm-Message-State: AOJu0YzeAXE8u8RpOtNYToMJIWPTT9bnbrxmqCY5mgBkakLPJkJq/3If LAJR9U7h531mkk0pMJPqU2PgPJaNa9D9px+Cy1Y= X-Google-Smtp-Source: AGHT+IGNG5tvgK24z8CckszOWrj/zQtvr25SEG616p71Uur1AMtMp5cNvAJJ9lqF+fbEhMk/l64MSPUXDb/s2Bscyu0= X-Received: by 2002:a25:9805:0:b0:da0:c7e7:9a6d with SMTP id a5-20020a259805000000b00da0c7e79a6dmr29297798ybo.38.1699343727851; Mon, 06 Nov 2023 23:55:27 -0800 (PST) MIME-Version: 1.0 References: <600a153e-191b-952d-7090-cad5097b798f@gmail.com> In-Reply-To: From: Richard Guo Date: Tue, 7 Nov 2023 15:55:16 +0800 Message-ID: Subject: Re: Support run-time partition pruning for hash join To: Alexander Lakhin Cc: David Rowley , Andy Fan , PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000040117506098b4b26" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000040117506098b4b26 Content-Type: multipart/alternative; boundary="00000000000040117206098b4b24" --00000000000040117206098b4b24 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Nov 6, 2023 at 11:00=E2=80=AFPM Alexander Lakhin wrote: > Please look at a warning and an assertion failure triggered by the > following script: > set parallel_setup_cost =3D 0; > set parallel_tuple_cost =3D 0; > set min_parallel_table_scan_size =3D '1kB'; > > create table t1 (i int) partition by range (i); > create table t1_1 partition of t1 for values from (1) to (2); > create table t1_2 partition of t1 for values from (2) to (3); > insert into t1 values (1), (2); > > create table t2(i int); > insert into t2 values (1), (2); > analyze t1, t2; > > select * from t1 right join t2 on t1.i =3D t2.i; > > 2023-11-06 14:11:37.398 UTC|law|regression|6548f419.392cf5|WARNING: Join > partition pruning $0 has not been performed yet. > TRAP: failed Assert("node->as_prune_state"), File: "nodeAppend.c", Line: > 846, PID: 3747061 > Thanks for the report! I failed to take care of the parallel-hashjoin case, and I have to admit that it's not clear to me yet how we should do join partition pruning in that case. For now I think it's better to just avoid performing join partition pruning for parallel hashjoin, so that the patch doesn't become too complex for review. We can always extend it in the future. I have done that in v5. Thanks for testing! Thanks Richard --00000000000040117206098b4b24 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Mon, Nov 6, 2023 at 11:00=E2=80=AFPM A= lexander Lakhin <exclusion@gmail.= com> wrote:
<= div> Please look at a warning and an assertion failure triggered by the
following script:
set parallel_setup_cost =3D 0;
set parallel_tuple_cost =3D 0;
set min_parallel_table_scan_size =3D '1kB';

create table t1 (i int) partition by range (i);
create table t1_1 partition of t1 for values from (1) to (2);
create table t1_2 partition of t1 for values from (2) to (3);
insert into t1 values (1), (2);

create table t2(i int);
insert into t2 values (1), (2);
analyze t1, t2;

select * from t1 right join t2 on t1.i =3D t2.i;

2023-11-06 14:11:37.398 UTC|law|regression|6548f419.392cf5|WARNING:=C2= =A0 Join partition pruning $0 has not been performed yet.
TRAP: failed Assert("node->as_prune_state"), File: "nodeAppend.c", Line: 846, PID: 3747061

Thanks for the report!=C2=A0 I failed to take care of the = parallel-hashjoin
case, and I have to admit that it's not clear to m= e yet how we should do
join partition pruning in that case.

For n= ow I think it's better to just avoid performing join partition
pruni= ng for parallel hashjoin, so that the patch doesn't become too
compl= ex for review.=C2=A0 We can always extend it in the future.

I have d= one that in v5.=C2=A0 Thanks for testing!

Thanks
Richard
--00000000000040117206098b4b24-- --00000000000040117506098b4b26 Content-Type: application/octet-stream; name="v5-0001-Support-run-time-partition-pruning-for-hash-join.patch" Content-Disposition: attachment; filename="v5-0001-Support-run-time-partition-pruning-for-hash-join.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_loo1daip0 RnJvbSA0NzBlYmNlZTk1ZjRjMGIxNjJiNjgyNmNlODQwYmYxN2Q4ZGY1MjY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAxNCBBdWcgMjAyMyAxNDo1NToyNiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjVd IFN1cHBvcnQgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgZm9yIGhhc2ggam9pbgoKSWYgd2Ug aGF2ZSBhIGhhc2ggam9pbiB3aXRoIGFuIEFwcGVuZCBub2RlIG9uIHRoZSBvdXRlciBzaWRlLCBz b21ldGhpbmcKbGlrZQoKIEhhc2ggSm9pbgogICBIYXNoIENvbmQ6IChwdC5hID0gdC5hKQogICAt PiAgQXBwZW5kCiAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdF9wMSBwdF8xCiAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdF9wMiBwdF8yCiAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdF9wMyBw dF8zCiAgIC0+ICBIYXNoCiAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0CgpXZSBjYW4gYWN0dWFs bHkgcHJ1bmUgdGhvc2Ugc3Vibm9kZXMgb2YgdGhlIEFwcGVuZCB0aGF0IGNhbm5vdCBwb3NzaWJs eQpjb250YWluIGFueSBtYXRjaGluZyB0dXBsZXMgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUg am9pbi4gIFRvIGRvCnRoYXQsIHdoZW4gYnVpbGRpbmcgdGhlIEhhc2ggdGFibGUsIGZvciBlYWNo IHJvdyBmcm9tIHRoZSBpbm5lciBzaWRlIHdlCmNhbiBjb21wdXRlIHRoZSBtaW5pbXVtIHNldCBv ZiBzdWJub2RlcyB0aGF0IGNhbiBwb3NzaWJseSBtYXRjaCB0aGUgam9pbgpjb25kaXRpb24uICBX aGVuIHdlIGhhdmUgYnVpbHQgdGhlIEhhc2ggdGFibGUgYW5kIHN0YXJ0IHRvIGV4ZWN1dGUgdGhl CkFwcGVuZCBub2RlLCB3ZSBzaG91bGQgaGF2ZSBrbm93biB3aGljaCBzdWJub2RlcyBhcmUgc3Vy dml2ZWQgYW5kIHRodXMKY2FuIHNraXAgb3RoZXIgc3Vibm9kZXMuCgpUaGlzIHBhdGNoIGltcGxl bWVudHMgdGhpcyBpZGVhLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAg ICAgICAgICAgICB8ICA2MSArKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9u LmMgICAgICAgICAgfCAxMjcgKysrKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBl bmQuYyAgICAgICAgICAgICB8ICAzMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2gu YyAgICAgICAgICAgICAgIHwgIDc1ICsrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFz aGpvaW4uYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdl QXBwZW5kLmMgICAgICAgIHwgIDIyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAxMDYgKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jICAgICAgIHwgIDQ5ICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c2V0cmVmcy5jICAgICAgICAgIHwgIDYxICsrKysKIHNyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9w YXJ0cHJ1bmUuYyAgICAgICAgICB8IDI5OCArKysrKysrKysrKysrKysrLS0KIHNyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgMzYgKysrCiBzcmMvaW5jbHVkZS9vcHRp bWl6ZXIvY29zdC5oICAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvcGFydGl0 aW9uaW5nL3BhcnRwcnVuZS5oICAgICAgICAgIHwgIDEyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQgfCAgODYgKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwgICAgICB8ICAzOSArKysKIDE4IGZpbGVzIGNoYW5nZWQs IDk5MiBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMK aW5kZXggZjFkNzFiYzU0ZS4uYzUxY2Y2YmViNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAt MTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgorI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSGFz aC5oIgogI2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgpA QCAtMTE4LDYgKzExOSw5IEBAIHN0YXRpYyB2b2lkIHNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50 KGNvbnN0IGNoYXIgKnFsYWJlbCwgaW50IHdoaWNoLAogCQkJCQkJCQkJICAgUGxhblN0YXRlICpw bGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19mb3JlaWduc2Nh bl9pbmZvKEZvcmVpZ25TY2FuU3RhdGUgKmZzc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgc2hvd19ldmFsX3BhcmFtcyhCaXRtYXBzZXQgKmJtc19wYXJhbXMsIEV4cGxhaW5T dGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19qb2luX3BydW5pbmdfcmVzdWx0X2luZm8oQml0 bWFwc2V0ICpqb2luX3BydW5lX3BhcmFtaWRzLAorCQkJCQkJCQkJCSAgRXhwbGFpblN0YXRlICpl cyk7CitzdGF0aWMgdm9pZCBzaG93X2pvaW5wYXJ0cHJ1bmVfaW5mbyhIYXNoU3RhdGUgKmhhc2hz dGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgY29uc3QgY2hhciAqZXhwbGFpbl9nZXRf aW5kZXhfbmFtZShPaWQgaW5kZXhJZCk7CiBzdGF0aWMgdm9pZCBzaG93X2J1ZmZlcl91c2FnZShF eHBsYWluU3RhdGUgKmVzLCBjb25zdCBCdWZmZXJVc2FnZSAqdXNhZ2UsCiAJCQkJCQkJICBib29s IHBsYW5uaW5nKTsKQEAgLTIwNTcsOSArMjA2MSwxNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJc2hvd19pbmNyZW1lbnRhbF9zb3J0X2lu Zm8oY2FzdE5vZGUoSW5jcmVtZW50YWxTb3J0U3RhdGUsIHBsYW5zdGF0ZSksCiAJCQkJCQkJCQkg ICBlcyk7CiAJCQlicmVhazsKKwkJY2FzZSBUX0FwcGVuZDoKKwkJCWlmIChlcy0+dmVyYm9zZSkK KwkJCQlzaG93X2pvaW5fcHJ1bmluZ19yZXN1bHRfaW5mbygoKEFwcGVuZCAqKSBwbGFuKS0+am9p bl9wcnVuZV9wYXJhbWlkcywKKwkJCQkJCQkJCQkJICBlcyk7CisJCQlicmVhazsKIAkJY2FzZSBU X01lcmdlQXBwZW5kOgogCQkJc2hvd19tZXJnZV9hcHBlbmRfa2V5cyhjYXN0Tm9kZShNZXJnZUFw cGVuZFN0YXRlLCBwbGFuc3RhdGUpLAogCQkJCQkJCQkgICBhbmNlc3RvcnMsIGVzKTsKKwkJCWlm IChlcy0+dmVyYm9zZSkKKwkJCQlzaG93X2pvaW5fcHJ1bmluZ19yZXN1bHRfaW5mbygoKE1lcmdl QXBwZW5kICopIHBsYW4pLT5qb2luX3BydW5lX3BhcmFtaWRzLAorCQkJCQkJCQkJCQkgIGVzKTsK IAkJCWJyZWFrOwogCQljYXNlIFRfUmVzdWx0OgogCQkJc2hvd191cHBlcl9xdWFsKChMaXN0ICop ICgoUmVzdWx0ICopIHBsYW4pLT5yZXNjb25zdGFudHF1YWwsCkBAIC0yMDc1LDYgKzIwODcsOCBA QCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJ YnJlYWs7CiAJCWNhc2UgVF9IYXNoOgogCQkJc2hvd19oYXNoX2luZm8oY2FzdE5vZGUoSGFzaFN0 YXRlLCBwbGFuc3RhdGUpLCBlcyk7CisJCQlpZiAoZXMtPnZlcmJvc2UpCisJCQkJc2hvd19qb2lu cGFydHBydW5lX2luZm8oY2FzdE5vZGUoSGFzaFN0YXRlLCBwbGFuc3RhdGUpLCBlcyk7CiAJCQli cmVhazsKIAkJY2FzZSBUX01lbW9pemU6CiAJCQlzaG93X21lbW9pemVfaW5mbyhjYXN0Tm9kZShN ZW1vaXplU3RhdGUsIHBsYW5zdGF0ZSksIGFuY2VzdG9ycywKQEAgLTM1MTUsNiArMzUyOSw1MyBA QCBzaG93X2V2YWxfcGFyYW1zKEJpdG1hcHNldCAqYm1zX3BhcmFtcywgRXhwbGFpblN0YXRlICpl cykKIAkJRXhwbGFpblByb3BlcnR5TGlzdCgiUGFyYW1zIEV2YWx1YXRlZCIsIHBhcmFtcywgZXMp OwogfQogCisvKgorICogU2hvdyBqb2luIHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgYXQgQXBw ZW5kL01lcmdlQXBwZW5kIG5vZGVzLgorICovCitzdGF0aWMgdm9pZAorc2hvd19qb2luX3BydW5p bmdfcmVzdWx0X2luZm8oQml0bWFwc2V0ICpqb2luX3BydW5lX3BhcmFtaWRzLCBFeHBsYWluU3Rh dGUgKmVzKQoreworCWludAkJCXBhcmFtaWQgPSAtMTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7 CisKKwlpZiAoYm1zX2lzX2VtcHR5KGpvaW5fcHJ1bmVfcGFyYW1pZHMpKQorCQlyZXR1cm47CisK Kwl3aGlsZSAoKHBhcmFtaWQgPSBibXNfbmV4dF9tZW1iZXIoam9pbl9wcnVuZV9wYXJhbWlkcywg cGFyYW1pZCkpID49IDApCisJeworCQljaGFyCQlwYXJhbVszMl07CisKKwkJc25wcmludGYocGFy YW0sIHNpemVvZihwYXJhbSksICIkJWQiLCBwYXJhbWlkKTsKKwkJcGFyYW1zID0gbGFwcGVuZChw YXJhbXMsIHBzdHJkdXAocGFyYW0pKTsKKwl9CisKKwlFeHBsYWluUHJvcGVydHlMaXN0KCJKb2lu IFBhcnRpdGlvbiBQcnVuaW5nIiwgcGFyYW1zLCBlcyk7Cit9CisKKy8qCisgKiBTaG93IGpvaW4g cGFydGl0aW9uIHBydW5pbmcgaW5mb3MgYXQgSGFzaCBub2Rlcy4KKyAqLworc3RhdGljIHZvaWQK K3Nob3dfam9pbnBhcnRwcnVuZV9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWluU3Rh dGUgKmVzKQoreworCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwor CWlmICghaGFzaHN0YXRlLT5qb2lucGFydHBydW5lX3N0YXRlX2xpc3QpCisJCXJldHVybjsKKwor CWZvcmVhY2gobGMsIGhhc2hzdGF0ZS0+am9pbnBhcnRwcnVuZV9zdGF0ZV9saXN0KQorCXsKKwkJ Sm9pblBhcnRpdGlvblBydW5lU3RhdGUgKmpwc3RhdGUgPSAoSm9pblBhcnRpdGlvblBydW5lU3Rh dGUgKikgbGZpcnN0KGxjKTsKKwkJY2hhcgkJcGFyYW1bMzJdOworCisJCXNucHJpbnRmKHBhcmFt LCBzaXplb2YocGFyYW0pLCAiJCVkIiwganBzdGF0ZS0+cGFyYW1pZCk7CisJCXBhcmFtcyA9IGxh cHBlbmQocGFyYW1zLCBwc3RyZHVwKHBhcmFtKSk7CisJfQorCisJRXhwbGFpblByb3BlcnR5TGlz dCgiUGFydGl0aW9uIFBydW5lIiwgcGFyYW1zLCBlcyk7Cit9CisKIC8qCiAgKiBGZXRjaCB0aGUg bmFtZSBvZiBhbiBpbmRleCBpbiBhbiBFWFBMQUlOCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Bh cnRpdGlvbi5jCmluZGV4IGY2YzM0MzI4YjguLjM1YTkxNDlhMzkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUGFydGl0aW9uLmMKQEAgLTE5OSw2ICsxOTksOCBAQCBzdGF0aWMgdm9pZCBmaW5kX21h dGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSwK IAkJCQkJCQkJCQkgICBQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUsCiAJCQkJCQkJ CQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAogCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKnZhbGlk c3VicGxhbnMpOworc3RhdGljIGJvb2wgZ2V0X2pvaW5fcHJ1bmVfbWF0Y2hpbmdfc3VicGxhbnMo UGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkJCQkJCSBCaXRtYXBzZXQgKipwYXJ0c2V0KTsK IAogCiAvKgpAQCAtMTgwNiw3ICsxODA4LDcgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLAogCSAqIFBlcmZvcm0gYW4gaW5pdGlhbCBwYXJ0aXRpb24gcHJ1 bmUgcGFzcywgaWYgcmVxdWlyZWQuCiAJICovCiAJaWYgKHBydW5lc3RhdGUtPmRvX2luaXRpYWxf cHJ1bmUpCi0JCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSk7CisJCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSwgTlVMTCk7CiAJZWxzZQog CXsKIAkJLyogTm8gcHJ1bmluZywgc28gd2UnbGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJw bGFucyAqLwpAQCAtMTgzNiw2ICsxODM4LDM3IEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAlyZXR1cm4gcHJ1bmVzdGF0ZTsKIH0KIAorLyoKKyAqIEV4 ZWNJbml0Sm9pbnBhcnRwcnVuZUxpc3QKKyAqCQlJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcyBu ZWVkZWQgZm9yIGpvaW4gcGFydGl0aW9uIHBydW5pbmcKKyAqLworTGlzdCAqCitFeGVjSW5pdEpv aW5wYXJ0cHJ1bmVMaXN0KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkJICBMaXN0ICpqb2lu cGFydHBydW5lX2luZm9fbGlzdCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpyZXN1 bHQgPSBOSUw7CisKKwlmb3JlYWNoKGxjLCBqb2lucGFydHBydW5lX2luZm9fbGlzdCkKKwl7CisJ CUpvaW5QYXJ0aXRpb25QcnVuZUluZm8gKmpwaW5mbyA9IChKb2luUGFydGl0aW9uUHJ1bmVJbmZv ICopIGxmaXJzdChsYyk7CisJCUpvaW5QYXJ0aXRpb25QcnVuZVN0YXRlICpqcHN0YXRlID0gcGFs bG9jKHNpemVvZihKb2luUGFydGl0aW9uUHJ1bmVTdGF0ZSkpOworCisJCWpwc3RhdGUtPnBhcnRf cHJ1bmVfc3RhdGUgPQorCQkJQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShwbGFuc3RhdGUsIGpw aW5mby0+cGFydF9wcnVuZV9pbmZvKTsKKwkJQXNzZXJ0KGpwc3RhdGUtPnBhcnRfcHJ1bmVfc3Rh dGUtPmRvX2V4ZWNfcHJ1bmUpOworCisJCWpwc3RhdGUtPnBhcmFtaWQgPSBqcGluZm8tPnBhcmFt aWQ7CisJCWpwc3RhdGUtPm5wbGFucyA9IGpwaW5mby0+bnBsYW5zOworCQlqcHN0YXRlLT5maW5p c2hlZCA9IGZhbHNlOworCQlqcHN0YXRlLT5wYXJ0X3BydW5lX3Jlc3VsdCA9IE5VTEw7CisKKwkJ cmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIGpwc3RhdGUpOworCX0KKworCXJldHVybiByZXN1bHQ7 Cit9CisKIC8qCiAgKiBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlCiAgKgkJQnVpbGQgdGhlIGRh dGEgc3RydWN0dXJlIHJlcXVpcmVkIGZvciBjYWxsaW5nIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cwpAQCAtMjI3Myw3ICsyMzA2LDkgQEAgUGFydGl0aW9uUHJ1bmVGaXhTdWJQbGFuTWFwKFBhcnRp dGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAvKgogICogRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zCiAgKgkJRGV0ZXJtaW5lIHdoaWNoIHN1YnBsYW5zIG1hdGNoIHRoZSBwcnVuaW5nIHN0ZXBz IGRldGFpbGVkIGluCi0gKgkJJ3BydW5lc3RhdGUnIGZvciB0aGUgY3VycmVudCBjb21wYXJpc29u IGV4cHJlc3Npb24gdmFsdWVzLgorICoJCSdwcnVuZXN0YXRlJyBpZiBhbnkgZm9yIHRoZSBjdXJy ZW50IGNvbXBhcmlzb24gZXhwcmVzc2lvbiB2YWx1ZXMsIGFuZAorICoJCW1lYW53aGlsZSBtYXRj aCB0aGUgam9pbiBwYXJ0aXRpb24gcHJ1bmluZyByZXN1bHRzIGlmIGFueSBzdG9yZWQgaW4KKyAq CQlBcHBlbmQvTWVyZ2VBcHBlbmQgbm9kZSdzIGpvaW5fcHJ1bmVfcGFyYW1pZHMuCiAgKgogICog UGFzcyBpbml0aWFsX3BydW5lIGlmIFBBUkFNX0VYRUMgUGFyYW1zIGNhbm5vdCB5ZXQgYmUgZXZh bHVhdGVkLiAgVGhpcwogICogZGlmZmVyZW50aWF0ZXMgdGhlIGluaXRpYWwgZXhlY3V0b3ItdGlt ZSBwcnVuaW5nIHN0ZXAgZnJvbSBsYXRlcgpAQCAtMjI4MSwxMSArMjMxNiwzMCBAQCBQYXJ0aXRp b25QcnVuZUZpeFN1YlBsYW5NYXAoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKICAq LwogQml0bWFwc2V0ICoKIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0 YXRlICpwcnVuZXN0YXRlLAotCQkJCQkJIGJvb2wgaW5pdGlhbF9wcnVuZSkKKwkJCQkJCSBib29s IGluaXRpYWxfcHJ1bmUsCisJCQkJCQkgUGxhblN0YXRlICpwbGFuc3RhdGUpCiB7CiAJQml0bWFw c2V0ICAqcmVzdWx0ID0gTlVMTDsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CiAJaW50CQkJ aTsKKwlCaXRtYXBzZXQgICpqb2luX3BydW5lX3BhcnRzZXQgPSBOVUxMOworCWJvb2wJCWRvX2pv aW5fcHJ1bmU7CisKKwkvKiBSZXRyaWV2ZSB0aGUgam9pbiBwYXJ0aXRpb24gcHJ1bmluZyByZXN1 bHRzIGlmIGFueSAqLworCWRvX2pvaW5fcHJ1bmUgPQorCQlnZXRfam9pbl9wcnVuZV9tYXRjaGlu Z19zdWJwbGFucyhwbGFuc3RhdGUsICZqb2luX3BydW5lX3BhcnRzZXQpOworCisJLyoKKwkgKiBF aXRoZXIgd2UncmUgaGVyZSBvbiBwYXJ0aXRpb24gcHJ1bmUgZG9uZSBhY2NvcmRpbmcgdG8gdGhl IHBydW5pbmcgc3RlcHMKKwkgKiBkZXRhaWxlZCBpbiAncHJ1bmVzdGF0ZScsIG9yIHdlIGhhdmUg ZG9uZSBqb2luIHBhcnRpdGlvbiBwcnVuZS4KKwkgKi8KKwlBc3NlcnQoZG9fam9pbl9wcnVuZSB8 fCBwcnVuZXN0YXRlICE9IE5VTEwpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBubyAncHJ1bmVz dGF0ZScsIHRoZW4gcmVseSBlbnRpcmVseSBvbiBqb2luIHBydW5pbmcuCisJICovCisJaWYgKHBy dW5lc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIGpvaW5fcHJ1bmVfcGFydHNldDsKIAogCS8qCiAJ ICogRWl0aGVyIHdlJ3JlIGhlcmUgb24gdGhlIGluaXRpYWwgcHJ1bmUgZG9uZSBkdXJpbmcgcHJ1 bmluZwpAQCAtMjMyNiw2ICsyMzgwLDEwIEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0 aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogCS8qIEFkZCBpbiBhbnkgc3VicGxhbnMgdGhh dCBwYXJ0aXRpb24gcHJ1bmluZyBkaWRuJ3QgYWNjb3VudCBmb3IgKi8KIAlyZXN1bHQgPSBibXNf YWRkX21lbWJlcnMocmVzdWx0LCBwcnVuZXN0YXRlLT5vdGhlcl9zdWJwbGFucyk7CiAKKwkvKiBJ bnRlcnNlY3Qgam9pbiBwYXJ0aXRpb24gcHJ1bmluZyByZXN1bHRzICovCisJaWYgKGRvX2pvaW5f cHJ1bmUpCisJCXJlc3VsdCA9IGJtc19pbnRlcnNlY3QocmVzdWx0LCBqb2luX3BydW5lX3BhcnRz ZXQpOworCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJLyogQ29weSBy ZXN1bHQgb3V0IG9mIHRoZSB0ZW1wIGNvbnRleHQgYmVmb3JlIHdlIHJlc2V0IGl0ICovCkBAIC0y Mzk2LDMgKzI0NTQsNjYgQEAgZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKFBhcnRpdGlv blBydW5pbmdEYXRhICpwcnVuZWRhdGEsCiAJCX0KIAl9CiB9CisKKy8qCisgKiBnZXRfam9pbl9w cnVuZV9tYXRjaGluZ19zdWJwbGFucworICoJCVJldHJpZXZlIHRoZSBqb2luIHBhcnRpdGlvbiBw cnVuaW5nIHJlc3VsdHMgaWYgYW55IHN0b3JlZCBpbgorICoJCUFwcGVuZC9NZXJnZUFwcGVuZCBu b2RlJ3Mgam9pbl9wcnVuZV9wYXJhbWlkcy4gIFJldHVybiB0cnVlIGlmIHdlIGNhbgorICoJCWRv IGpvaW4gcGFydGl0aW9uIHBydW5pbmcsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuCisgKgorICog QWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElEcyB0byAqcGFydHNldAorICovCitz dGF0aWMgYm9vbAorZ2V0X2pvaW5fcHJ1bmVfbWF0Y2hpbmdfc3VicGxhbnMoUGxhblN0YXRlICpw bGFuc3RhdGUsIEJpdG1hcHNldCAqKnBhcnRzZXQpCit7CisJQml0bWFwc2V0ICAqam9pbl9wcnVu ZV9wYXJhbWlkczsKKwlpbnQJCQlucGxhbnM7CisJaW50CQkJcGFyYW1pZDsKKworCWlmIChwbGFu c3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElzQShwbGFuc3RhdGUsIEFw cGVuZFN0YXRlKSkKKwl7CisJCWpvaW5fcHJ1bmVfcGFyYW1pZHMgPQorCQkJKChBcHBlbmQgKikg cGxhbnN0YXRlLT5wbGFuKS0+am9pbl9wcnVuZV9wYXJhbWlkczsKKwkJbnBsYW5zID0gKChBcHBl bmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hc19ucGxhbnM7CisJfQorCWVsc2UgaWYgKElzQShwbGFu c3RhdGUsIE1lcmdlQXBwZW5kU3RhdGUpKQorCXsKKwkJam9pbl9wcnVuZV9wYXJhbWlkcyA9CisJ CQkoKE1lcmdlQXBwZW5kICopIHBsYW5zdGF0ZS0+cGxhbiktPmpvaW5fcHJ1bmVfcGFyYW1pZHM7 CisJCW5wbGFucyA9ICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19ucGxhbnM7 CisJfQorCWVsc2UKKwl7CisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAl ZCIsIChpbnQpIG5vZGVUYWcocGxhbnN0YXRlKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlp ZiAoYm1zX2lzX2VtcHR5KGpvaW5fcHJ1bmVfcGFyYW1pZHMpKQorCQlyZXR1cm4gZmFsc2U7CisK KwlBc3NlcnQobnBsYW5zID4gMCk7CisJKnBhcnRzZXQgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAs IG5wbGFucyAtIDEpOworCisJcGFyYW1pZCA9IC0xOworCXdoaWxlICgocGFyYW1pZCA9IGJtc19u ZXh0X21lbWJlcihqb2luX3BydW5lX3BhcmFtaWRzLCBwYXJhbWlkKSkgPj0gMCkKKwl7CisJCVBh cmFtRXhlY0RhdGEgKnBhcmFtOworCQlKb2luUGFydGl0aW9uUHJ1bmVTdGF0ZSAqanBzdGF0ZTsK KworCQlwYXJhbSA9ICYocGxhbnN0YXRlLT5zdGF0ZS0+ZXNfcGFyYW1fZXhlY192YWxzW3BhcmFt aWRdKTsKKwkJQXNzZXJ0KHBhcmFtLT5leGVjUGxhbiA9PSBOVUxMKTsKKwkJQXNzZXJ0KCFwYXJh bS0+aXNudWxsKTsKKwkJanBzdGF0ZSA9IChKb2luUGFydGl0aW9uUHJ1bmVTdGF0ZSAqKSBEYXR1 bUdldFBvaW50ZXIocGFyYW0tPnZhbHVlKTsKKworCQlpZiAoanBzdGF0ZSAhPSBOVUxMKQorCQkJ KnBhcnRzZXQgPSBibXNfaW50ZXJzZWN0KCpwYXJ0c2V0LCBqcHN0YXRlLT5wYXJ0X3BydW5lX3Jl c3VsdCk7CisJCWVsc2UJLyogdGhlIEhhc2ggbm9kZSBmb3IgdGhpcyBwcnVuaW5nIGhhcyBub3Qg YmVlbiBleGVjdXRlZCAqLworCQkJZWxvZyhXQVJOSU5HLCAiSm9pbiBwYXJ0aXRpb24gcHJ1bmlu ZyAkJWQgaGFzIG5vdCBiZWVuIHBlcmZvcm1lZCB5ZXQuIiwKKwkJCQkgcGFyYW1pZCk7CisJfQor CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl QXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKaW5kZXggNjA5ZGY2 YjllNi4uYzhkZDg1ODNkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFw cGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtMTUxLDEx ICsxNTEsMTMgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwg aW50IGVmbGFncykKIAkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwog CiAJCS8qCi0JCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJlZCBhbmQgdGhl cmUncyBhdCBsZWFzdCBvbmUKLQkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3Vi cGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKLQkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zLgorCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBydW5pbmcgb3Igam9p biBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0CisJCSAqIGxlYXN0IG9uZSBzdWJw bGFuLCB3ZSBjYW4gZmlsbCBhc192YWxpZF9zdWJwbGFucyBpbW1lZGlhdGVseSwKKwkJICogcHJl dmVudGluZyBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAJCSAqLwot CQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKKwkJaWYgKCFw cnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmCisJCQlibXNfaXNfZW1wdHkobm9kZS0+am9pbl9w cnVuZV9wYXJhbWlkcykgJiYKKwkJCW5wbGFucyA+IDApCiAJCXsKIAkJCWFwcGVuZHN0YXRlLT5h c192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CiAJ CQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CkBAIC0x NzAsMTAgKzE3MiwxOCBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0 YXRlLCBpbnQgZWZsYWdzKQogCQkgKiBzdWJwbGFucyBhcyB2YWxpZDsgdGhleSBtdXN0IGFsc28g YWxsIGJlIGluaXRpYWxpemVkLgogCQkgKi8KIAkJQXNzZXJ0KG5wbGFucyA+IDApOwotCQlhcHBl bmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSB2YWxpZHN1YnBsYW5zID0KLQkJCWJtc19hZGRf cmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCWFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJw bGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJdmFsaWRzdWJwbGFucyA9IGJtc19hZGRfcmFuZ2Uo TlVMTCwgMCwgbnBsYW5zIC0gMSk7CiAJCWFwcGVuZHN0YXRlLT5hc19wcnVuZV9zdGF0ZSA9IE5V TEw7CisKKwkJLyoKKwkJICogV2hlbiBqb2luIHBydW5pbmcgaXMgbm90IGVuYWJsZWQgd2UgY2Fu IGZpbGwgYXNfdmFsaWRfc3VicGxhbnMKKwkJICogaW1tZWRpYXRlbHksIHByZXZlbnRpbmcgbGF0 ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgorCQkgKi8KKwkJaWYgKGJtc19p c19lbXB0eShub2RlLT5qb2luX3BydW5lX3BhcmFtaWRzKSkKKwkJeworCQkJYXBwZW5kc3RhdGUt PmFzX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFuczsKKwkJCWFwcGVuZHN0YXRlLT5hc192 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJfQogCX0KIAogCS8qCkBAIC01ODAs NyArNTkwLDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9sb2NhbGx5KEFwcGVuZFN0YXRlICpub2Rl KQogCQllbHNlIGlmICghbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAkJewog CQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQ bGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsICZub2RlLT5wcyk7CiAJCQlub2RlLT5h c192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAkJfQogCkBAIC02NDcsNyArNjU3 LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3JfbGVhZGVyKEFwcGVuZFN0YXRlICpub2RlKQog CQlpZiAoIW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJCXsKIAkJCW5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+ YXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9k ZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCAmbm9kZS0+cHMpOwogCQkJbm9kZS0+YXNfdmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAKIAkJCS8qCkBAIC03MjMsNyArNzMzLDcgQEAg Y2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCWVsc2Ug aWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQogCXsKIAkJbm9kZS0+YXNf dmFsaWRfc3VicGxhbnMgPQotCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3By dW5lX3N0YXRlLCBmYWxzZSk7CisJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNf cHJ1bmVfc3RhdGUsIGZhbHNlLCAmbm9kZS0+cHMpOwogCQlub2RlLT5hc192YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQltYXJrX2ludmFsaWRfc3VicGxhbnNfYXNfZmluaXNo ZWQobm9kZSk7CkBAIC04NzYsNyArODg2LDcgQEAgRXhlY0FwcGVuZEFzeW5jQmVnaW4oQXBwZW5k U3RhdGUgKm5vZGUpCiAJaWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQog CXsKIAkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQlFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCAmbm9kZS0+cHMpOwogCQlub2RlLT5h c192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQljbGFzc2lmeV9tYXRjaGlu Z19zdWJwbGFucyhub2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVI YXNoLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaC5jCmluZGV4IGU3MmYwOTg2YzIu LjljYThiZjQ5ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2guYwpAQCAtMzEsNiArMzEsNyBAQAog I2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFi bGVzcGFjZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNkZWJ1Zy5oIgorI2luY2x1ZGUgImV4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9oYXNoam9pbi5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL25vZGVIYXNoLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUhh c2hqb2luLmgiCkBAIC00OCw2ICs0OSw4IEBAIHN0YXRpYyB2b2lkIEV4ZWNIYXNoSW5jcmVhc2VO dW1CYXRjaGVzKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlKTsKIHN0YXRpYyB2b2lkIEV4ZWNIYXNo SW5jcmVhc2VOdW1CdWNrZXRzKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlKTsKIHN0YXRpYyB2b2lk IEV4ZWNQYXJhbGxlbEhhc2hJbmNyZWFzZU51bUJhdGNoZXMoSGFzaEpvaW5UYWJsZSBoYXNodGFi bGUpOwogc3RhdGljIHZvaWQgRXhlY1BhcmFsbGVsSGFzaEluY3JlYXNlTnVtQnVja2V0cyhIYXNo Sm9pblRhYmxlIGhhc2h0YWJsZSk7CitzdGF0aWMgdm9pZCBFeGVjSm9pblBhcnRpdGlvblBydW5l KEhhc2hTdGF0ZSAqbm9kZSk7CitzdGF0aWMgdm9pZCBFeGVjU3RvcmVKb2luUGFydGl0aW9uUHJ1 bmVSZXN1bHQoSGFzaFN0YXRlICpub2RlKTsKIHN0YXRpYyB2b2lkIEV4ZWNIYXNoQnVpbGRTa2V3 SGFzaChIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSwgSGFzaCAqbm9kZSwKIAkJCQkJCQkJICBpbnQg bWN2c1RvVXNlKTsKIHN0YXRpYyB2b2lkIEV4ZWNIYXNoU2tld1RhYmxlSW5zZXJ0KEhhc2hKb2lu VGFibGUgaGFzaHRhYmxlLApAQCAtMTg5LDggKzE5MiwxNCBAQCBNdWx0aUV4ZWNQcml2YXRlSGFz aChIYXNoU3RhdGUgKm5vZGUpCiAJCQl9CiAJCQloYXNodGFibGUtPnRvdGFsVHVwbGVzICs9IDE7 CiAJCX0KKworCQkvKiBQZXJmb3JtIGpvaW4gcGFydGl0aW9uIHBydW5pbmcgKi8KKwkJRXhlY0pv aW5QYXJ0aXRpb25QcnVuZShub2RlKTsKIAl9CiAKKwkvKiBTdG9yZSB0aGUgc3Vydml2aW5nIHBh cnRpdGlvbnMgZm9yIEFwcGVuZC9NZXJnZUFwcGVuZCBub2RlcyAqLworCUV4ZWNTdG9yZUpvaW5Q YXJ0aXRpb25QcnVuZVJlc3VsdChub2RlKTsKKwogCS8qIHJlc2l6ZSB0aGUgaGFzaCB0YWJsZSBp ZiBuZWVkZWQgKE5UVVBfUEVSX0JVQ0tFVCBleGNlZWRlZCkgKi8KIAlpZiAoaGFzaHRhYmxlLT5u YnVja2V0cyAhPSBoYXNodGFibGUtPm5idWNrZXRzX29wdGltYWwpCiAJCUV4ZWNIYXNoSW5jcmVh c2VOdW1CdWNrZXRzKGhhc2h0YWJsZSk7CkBAIC00MDEsNiArNDEwLDEyIEBAIEV4ZWNJbml0SGFz aChIYXNoICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAloYXNoc3RhdGUtPmhh c2hrZXlzID0KIAkJRXhlY0luaXRFeHByTGlzdChub2RlLT5oYXNoa2V5cywgKFBsYW5TdGF0ZSAq KSBoYXNoc3RhdGUpOwogCisJLyoKKwkgKiBpbml0aWFsaXplIGpvaW4gcGFydGl0aW9uIHBydW5p bmcgaW5mb3MKKwkgKi8KKwloYXNoc3RhdGUtPmpvaW5wYXJ0cHJ1bmVfc3RhdGVfbGlzdCA9CisJ CUV4ZWNJbml0Sm9pbnBhcnRwcnVuZUxpc3QoJmhhc2hzdGF0ZS0+cHMsIG5vZGUtPmpvaW5wYXJ0 cHJ1bmVfaW5mb19saXN0KTsKKwogCXJldHVybiBoYXNoc3RhdGU7CiB9CiAKQEAgLTE2MDEsNiAr MTYxNiw1NiBAQCBFeGVjUGFyYWxsZWxIYXNoSW5jcmVhc2VOdW1CdWNrZXRzKEhhc2hKb2luVGFi bGUgaGFzaHRhYmxlKQogCX0KIH0KIAorLyoKKyAqIEV4ZWNKb2luUGFydGl0aW9uUHJ1bmUKKyAq CQlQZXJmb3JtIGpvaW4gcGFydGl0aW9uIHBydW5pbmcgYXQgdGhpcyBqb2luIGZvciBlYWNoCisg KgkJSm9pblBhcnRpdGlvblBydW5lU3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjSm9pblBh cnRpdGlvblBydW5lKEhhc2hTdGF0ZSAqbm9kZSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZv cmVhY2gobGMsIG5vZGUtPmpvaW5wYXJ0cHJ1bmVfc3RhdGVfbGlzdCkKKwl7CisJCUpvaW5QYXJ0 aXRpb25QcnVuZVN0YXRlICpqcHN0YXRlID0gKEpvaW5QYXJ0aXRpb25QcnVuZVN0YXRlICopIGxm aXJzdChsYyk7CisJCUJpdG1hcHNldAkgICAqbWF0Y2hpbmdfc3ViUGxhbnM7CisKKwkJaWYgKGpw c3RhdGUtPmZpbmlzaGVkKQorCQkJY29udGludWU7CisKKwkJbWF0Y2hpbmdfc3ViUGxhbnMgPQor CQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKGpwc3RhdGUtPnBhcnRfcHJ1bmVfc3RhdGUsIGZh bHNlLCBOVUxMKTsKKwkJanBzdGF0ZS0+cGFydF9wcnVuZV9yZXN1bHQgPQorCQkJYm1zX2FkZF9t ZW1iZXJzKGpwc3RhdGUtPnBhcnRfcHJ1bmVfcmVzdWx0LCBtYXRjaGluZ19zdWJQbGFucyk7CisK KwkJaWYgKGJtc19udW1fbWVtYmVycyhqcHN0YXRlLT5wYXJ0X3BydW5lX3Jlc3VsdCkgPT0ganBz dGF0ZS0+bnBsYW5zKQorCQkJanBzdGF0ZS0+ZmluaXNoZWQgPSB0cnVlOworCX0KK30KKworLyoK KyAqIEV4ZWNTdG9yZUpvaW5QYXJ0aXRpb25QcnVuZVJlc3VsdAorICoJCUZvciBlYWNoIEpvaW5Q YXJ0aXRpb25QcnVuZVN0YXRlLCBzdG9yZSB0aGUgc2V0IG9mIHN1cnZpdmluZyBwYXJ0aXRpb25z CisgKgkJdG8gbWFrZSBpdCBhdmFpbGFibGUgZm9yIHRoZSBBcHBlbmQvTWVyZ2VBcHBlbmQgbm9k ZS4KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNTdG9yZUpvaW5QYXJ0aXRpb25QcnVuZVJlc3VsdChI YXNoU3RhdGUgKm5vZGUpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBub2Rl LT5qb2lucGFydHBydW5lX3N0YXRlX2xpc3QpCisJeworCQlKb2luUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqanBzdGF0ZSA9IChKb2luUGFydGl0aW9uUHJ1bmVTdGF0ZSAqKSBsZmlyc3QobGMpOworCQlQ YXJhbUV4ZWNEYXRhCSAgICpwYXJhbTsKKworCQlwYXJhbSA9ICYobm9kZS0+cHMuc3RhdGUtPmVz X3BhcmFtX2V4ZWNfdmFsc1tqcHN0YXRlLT5wYXJhbWlkXSk7CisJCUFzc2VydChwYXJhbS0+ZXhl Y1BsYW4gPT0gTlVMTCk7CisJCUFzc2VydCghcGFyYW0tPmlzbnVsbCk7CisJCXBhcmFtLT52YWx1 ZSA9IFBvaW50ZXJHZXREYXR1bShqcHN0YXRlKTsKKwl9Cit9CisKIC8qCiAgKiBFeGVjSGFzaFRh YmxlSW5zZXJ0CiAgKgkJaW5zZXJ0IGEgdHVwbGUgaW50byB0aGUgaGFzaCB0YWJsZSBkZXBlbmRp bmcgb24gdGhlIGhhc2ggdmFsdWUKQEAgLTIzNDUsNiArMjQxMCwxNiBAQCB2b2lkCiBFeGVjUmVT Y2FuSGFzaChIYXNoU3RhdGUgKm5vZGUpCiB7CiAJUGxhblN0YXRlICAqb3V0ZXJQbGFuID0gb3V0 ZXJQbGFuU3RhdGUobm9kZSk7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiByZXNldCB0aGUgc3Rh dGUgaW4gSm9pblBhcnRpdGlvblBydW5lU3RhdGVzICovCisJZm9yZWFjaChsYywgbm9kZS0+am9p bnBhcnRwcnVuZV9zdGF0ZV9saXN0KQorCXsKKwkJSm9pblBhcnRpdGlvblBydW5lU3RhdGUgKmpw c3RhdGUgPSAoSm9pblBhcnRpdGlvblBydW5lU3RhdGUgKikgbGZpcnN0KGxjKTsKKworCQlqcHN0 YXRlLT5maW5pc2hlZCA9IGZhbHNlOworCQlqcHN0YXRlLT5wYXJ0X3BydW5lX3Jlc3VsdCA9IE5V TEw7CisJfQogCiAJLyoKIAkgKiBpZiBjaGdQYXJhbSBvZiBzdWJub2RlIGlzIG5vdCBudWxsIHRo ZW4gcGxhbiB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVIYXNoam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2lu LmMKaW5kZXggMjVhMmQ3OGYxNS4uZGRjYTgyNDIwNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhh c2hqb2luLmMKQEAgLTMxMSw2ICszMTEsMTYgQEAgRXhlY0hhc2hKb2luSW1wbChQbGFuU3RhdGUg KnBzdGF0ZSwgYm9vbCBwYXJhbGxlbCkKIAkJCQkJICovCiAJCQkJCW5vZGUtPmhqX0ZpcnN0T3V0 ZXJUdXBsZVNsb3QgPSBOVUxMOwogCQkJCX0KKwkJCQllbHNlIGlmIChoYXNoTm9kZS0+am9pbnBh cnRwcnVuZV9zdGF0ZV9saXN0ICE9IE5JTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEdpdmUg dGhlIGhhc2ggbm9kZSBhIGNoYW5jZSB0byBydW4gam9pbiBwYXJ0aXRpb24KKwkJCQkJICogcHJ1 bmluZyBpZiB0aGVyZSBpcyBhbnkgSm9pblBhcnRpdGlvblBydW5lU3RhdGUgdGhhdCBjYW4KKwkJ CQkJICogYmUgZXZhbHVhdGVkIGF0IGl0LiAgU28gZG8gbm90IGFwcGx5IHRoZSBlbXB0eS1vdXRl cgorCQkJCQkgKiBvcHRpbWl6YXRpb24gaW4gdGhpcyBjYXNlLgorCQkJCQkgKi8KKwkJCQkJbm9k ZS0+aGpfRmlyc3RPdXRlclR1cGxlU2xvdCA9IE5VTEw7CisJCQkJfQogCQkJCWVsc2UgaWYgKEhK X0ZJTExfT1VURVIobm9kZSkgfHwKIAkJCQkJCSAob3V0ZXJOb2RlLT5wbGFuLT5zdGFydHVwX2Nv c3QgPCBoYXNoTm9kZS0+cHMucGxhbi0+dG90YWxfY29zdCAmJgogCQkJCQkJICAhbm9kZS0+aGpf T3V0ZXJOb3RFbXB0eSkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVy Z2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4 IDIxYjU3MjZlNmUuLjllYjI3NmFiYzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVNZXJnZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFw cGVuZC5jCkBAIC05OSwxMSArOTksMTMgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVu ZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCW5wbGFucyA9IGJtc19udW1f bWVtYmVycyh2YWxpZHN1YnBsYW5zKTsKIAogCQkvKgotCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBy dW5pbmcgaXMgcmVxdWlyZWQgYW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lCi0JCSAqIHN1YnBsYW4s IHdlIGNhbiBmaWxsIG1zX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCi0J CSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KKwkJICogV2hlbiBu byBydW4tdGltZSBwcnVuaW5nIG9yIGpvaW4gcHJ1bmluZyBpcyByZXF1aXJlZCBhbmQgdGhlcmUn cyBhdAorCQkgKiBsZWFzdCBvbmUgc3VicGxhbiwgd2UgY2FuIGZpbGwgbXNfdmFsaWRfc3VicGxh bnMgaW1tZWRpYXRlbHksCisJCSAqIHByZXZlbnRpbmcgbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRN YXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5l ICYmIG5wbGFucyA+IDApCisJCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJgorCQkJ Ym1zX2lzX2VtcHR5KG5vZGUtPmpvaW5fcHJ1bmVfcGFyYW1pZHMpICYmCisJCQlucGxhbnMgPiAw KQogCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEws IDAsIG5wbGFucyAtIDEpOwogCX0KIAllbHNlCkBAIC0xMTUsOSArMTE3LDE1IEBAIEV4ZWNJbml0 TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdz KQogCQkgKiBzdWJwbGFucyBhcyB2YWxpZDsgdGhleSBtdXN0IGFsc28gYWxsIGJlIGluaXRpYWxp emVkLgogCQkgKi8KIAkJQXNzZXJ0KG5wbGFucyA+IDApOwotCQltZXJnZXN0YXRlLT5tc192YWxp ZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQotCQkJYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBu cGxhbnMgLSAxKTsKKwkJdmFsaWRzdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBs YW5zIC0gMSk7CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gTlVMTDsKKworCQkvKgor CQkgKiBXaGVuIGpvaW4gcHJ1bmluZyBpcyBub3QgZW5hYmxlZCB3ZSBjYW4gZmlsbCBtc192YWxp ZF9zdWJwbGFucworCQkgKiBpbW1lZGlhdGVseSwgcHJldmVudGluZyBsYXRlciBjYWxscyB0byBF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCisJCSAqLworCQlpZiAoYm1zX2lzX2VtcHR5KG5vZGUt PmpvaW5fcHJ1bmVfcGFyYW1pZHMpKQorCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMg PSB2YWxpZHN1YnBsYW5zOwogCX0KIAogCW1lcmdlcGxhbnN0YXRlcyA9IChQbGFuU3RhdGUgKiop IHBhbGxvYyhucGxhbnMgKiBzaXplb2YoUGxhblN0YXRlICopKTsKQEAgLTIxOCw3ICsyMjYsNyBA QCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqLwogCQlpZiAobm9kZS0+ bXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAkJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0K LQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNl KTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+bXNfcHJ1bmVfc3RhdGUsIGZh bHNlLCAmbm9kZS0+cHMpOwogCiAJCS8qCiAJCSAqIEZpcnN0IHRpbWUgdGhyb3VnaDogcHVsbCB0 aGUgZmlyc3QgdHVwbGUgZnJvbSBlYWNoIHZhbGlkIHN1YnBsYW4sCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvY29zdHNpemUuYwppbmRleCBkNmNlYWZkNTFjLi45YmRjODhhOWRiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE3Myw2ICsxNzMsMTAgQEAgc3RhdGljIHZv aWQgZ2V0X3Jlc3RyaWN0aW9uX3F1YWxfY29zdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqYmFzZXJlbCwKIHN0YXRpYyBib29sIGhhc19pbmRleGVkX2pvaW5fcXVhbHMoTmVzdFBhdGgg KnBhdGgpOwogc3RhdGljIGRvdWJsZSBhcHByb3hfdHVwbGVfY291bnQoUGxhbm5lckluZm8gKnJv b3QsIEpvaW5QYXRoICpwYXRoLAogCQkJCQkJCQkgTGlzdCAqcXVhbHMpOworc3RhdGljIGRvdWJs ZSBnZXRfam9pbnJlbF9tYXRjaGluZ19vdXRlcl9zaXplKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJCQkgIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKKwkJCQkJCQkJCQkJICBSZWxpZHMgaW5u ZXJfcmVsaWRzLAorCQkJCQkJCQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCk7CiBzdGF0aWMgZG91 YmxlIGNhbGNfam9pbnJlbF9zaXplX2VzdGltYXRlKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJ CQkJCSBSZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpvdXRlcl9y ZWwsCkBAIC01MzgwLDYgKzUzODQsNjEgQEAgZ2V0X3BhcmFtZXRlcml6ZWRfam9pbnJlbF9zaXpl KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJcmV0dXJuIG5yb3dzOwogfQog CisvKgorICogZ2V0X2pvaW5yZWxfbWF0Y2hpbmdfb3V0ZXJfc2l6ZQorICoJCU1ha2UgYSBzaXpl IGVzdGltYXRlIGZvciB0aGUgb3V0ZXIgc2lkZSB0aGF0IG1hdGNoZXMgdGhlIGlubmVyIHNpZGUu CisgKi8KK3N0YXRpYyBkb3VibGUKK2dldF9qb2lucmVsX21hdGNoaW5nX291dGVyX3NpemUoUGxh bm5lckluZm8gKnJvb3QsCisJCQkJCQkJCVJlbE9wdEluZm8gKm91dGVyX3JlbCwKKwkJCQkJCQkJ UmVsaWRzIGlubmVyX3JlbGlkcywKKwkJCQkJCQkJTGlzdCAqcmVzdHJpY3RsaXN0KQoreworCWRv dWJsZQkJbnJvd3M7CisJU2VsZWN0aXZpdHkgZmtzZWxlYzsKKwlTZWxlY3Rpdml0eSBqc2VsZWM7 CisJU3BlY2lhbEpvaW5JbmZvICpzamluZm87CisJU3BlY2lhbEpvaW5JbmZvIHNqaW5mb19kYXRh OworCisJc2ppbmZvID0gJnNqaW5mb19kYXRhOworCXNqaW5mby0+dHlwZSA9IFRfU3BlY2lhbEpv aW5JbmZvOworCXNqaW5mby0+bWluX2xlZnRoYW5kID0gb3V0ZXJfcmVsLT5yZWxpZHM7CisJc2pp bmZvLT5taW5fcmlnaHRoYW5kID0gaW5uZXJfcmVsaWRzOworCXNqaW5mby0+c3luX2xlZnRoYW5k ID0gb3V0ZXJfcmVsLT5yZWxpZHM7CisJc2ppbmZvLT5zeW5fcmlnaHRoYW5kID0gaW5uZXJfcmVs aWRzOworCXNqaW5mby0+am9pbnR5cGUgPSBKT0lOX1NFTUk7CisJc2ppbmZvLT5vanJlbGlkID0g MDsKKwlzamluZm8tPmNvbW11dGVfYWJvdmVfbCA9IE5VTEw7CisJc2ppbmZvLT5jb21tdXRlX2Fi b3ZlX3IgPSBOVUxMOworCXNqaW5mby0+Y29tbXV0ZV9iZWxvd19sID0gTlVMTDsKKwlzamluZm8t PmNvbW11dGVfYmVsb3dfciA9IE5VTEw7CisJLyogd2UgZG9uJ3QgYm90aGVyIHRyeWluZyB0byBt YWtlIHRoZSByZW1haW5pbmcgZmllbGRzIHZhbGlkICovCisJc2ppbmZvLT5saHNfc3RyaWN0ID0g ZmFsc2U7CisJc2ppbmZvLT5zZW1pX2Nhbl9idHJlZSA9IGZhbHNlOworCXNqaW5mby0+c2VtaV9j YW5faGFzaCA9IGZhbHNlOworCXNqaW5mby0+c2VtaV9vcGVyYXRvcnMgPSBOSUw7CisJc2ppbmZv LT5zZW1pX3Joc19leHBycyA9IE5JTDsKKworCWZrc2VsZWMgPSBnZXRfZm9yZWlnbl9rZXlfam9p bl9zZWxlY3Rpdml0eShyb290LAorCQkJCQkJCQkJCQkgICBvdXRlcl9yZWwtPnJlbGlkcywKKwkJ CQkJCQkJCQkJICAgaW5uZXJfcmVsaWRzLAorCQkJCQkJCQkJCQkgICBzamluZm8sCisJCQkJCQkJ CQkJCSAgICZyZXN0cmljdGxpc3QpOworCWpzZWxlYyA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHko cm9vdCwKKwkJCQkJCQkJCXJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJCTAsCisJCQkJCQkJCQlzamlu Zm8tPmpvaW50eXBlLAorCQkJCQkJCQkJc2ppbmZvKTsKKworCW5yb3dzID0gb3V0ZXJfcmVsLT5y b3dzICogZmtzZWxlYyAqIGpzZWxlYzsKKwlucm93cyA9IGNsYW1wX3Jvd19lc3QobnJvd3MpOwor CisJLyogRm9yIHNhZmV0eSwgbWFrZSBzdXJlIHJlc3VsdCBpcyBub3QgbW9yZSB0aGFuIHRoZSBi YXNlIGVzdGltYXRlICovCisJaWYgKG5yb3dzID4gb3V0ZXJfcmVsLT5yb3dzKQorCQlucm93cyA9 IG91dGVyX3JlbC0+cm93czsKKwlyZXR1cm4gbnJvd3M7Cit9CisKIC8qCiAgKiBjYWxjX2pvaW5y ZWxfc2l6ZV9lc3RpbWF0ZQogICoJCVdvcmtob3JzZSBmb3Igc2V0X2pvaW5yZWxfc2l6ZV9lc3Rp bWF0ZXMgYW5kCkBAIC02NDk1LDMgKzY1NTQsNTAgQEAgY29tcHV0ZV9iaXRtYXBfcGFnZXMoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsIFBhdGggKmJpdG1hcHF1YWwsCiAK IAlyZXR1cm4gcGFnZXNfZmV0Y2hlZDsKIH0KKworLyoKKyAqIGNvbXB1dGVfcGFydHBydW5lX2Nv c3QKKyAqCQlDb21wdXRlIHRoZSBvdmVyaGVhZCBvZiBqb2luIHBhcnRpdGlvbiBwcnVuaW5nLgor ICovCitkb3VibGUKK2NvbXB1dGVfcGFydHBydW5lX2Nvc3QoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKmFwcGVuZHJlbCwKKwkJCQkJICAgQ29zdCBhcHBlbmRfdG90YWxfY29zdCwgaW50 IGFwcGVuZF9ucGxhbnMsCisJCQkJCSAgIFJlbGlkcyBpbm5lcl9yZWxpZHMsIGRvdWJsZSBpbm5l cl9yb3dzLAorCQkJCQkgICBMaXN0ICpwcnVuZXF1YWwpCit7CisJQ29zdAkJcHJ1bmVfY29zdDsK KwlDb3N0CQlzYXZlZF9jb3N0OworCWRvdWJsZQkJbWF0Y2hpbmdfb3V0ZXJfcm93czsKKwlkb3Vi bGUJCXVubWF0Y2hlZF9ucGxhbnM7CisKKwlzd2l0Y2ggKGFwcGVuZHJlbC0+cGFydF9zY2hlbWUt PnN0cmF0ZWd5KQorCXsKKworCQljYXNlIFBBUlRJVElPTl9TVFJBVEVHWV9MSVNUOgorCQljYXNl IFBBUlRJVElPTl9TVFJBVEVHWV9SQU5HRToKKwkJCXBydW5lX2Nvc3QgPSBjcHVfb3BlcmF0b3Jf Y29zdCAqIExPRzIoYXBwZW5kX25wbGFucykgKiBpbm5lcl9yb3dzOworCQkJYnJlYWs7CisJCWNh c2UgUEFSVElUSU9OX1NUUkFURUdZX0hBU0g6CisJCQlwcnVuZV9jb3N0ID0gY3B1X29wZXJhdG9y X2Nvc3QgKiBhcHBlbmRfbnBsYW5zICogaW5uZXJfcm93czsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGFydGl0aW9uIHN0cmF0ZWd5OiAlZCIsCisJ CQkJIChpbnQpIGFwcGVuZHJlbC0+cGFydF9zY2hlbWUtPnN0cmF0ZWd5KTsKKwkJCWJyZWFrOwor CX0KKworCW1hdGNoaW5nX291dGVyX3Jvd3MgPQorCQlnZXRfam9pbnJlbF9tYXRjaGluZ19vdXRl cl9zaXplKHJvb3QsCisJCQkJCQkJCQkJYXBwZW5kcmVsLAorCQkJCQkJCQkJCWlubmVyX3JlbGlk cywKKwkJCQkJCQkJCQlwcnVuZXF1YWwpOworCisJLyoKKwkgKiBXZSBhc3N1bWUgdGhhdCBlYWNo IG91dGVyIGpvaW5lZCByb3cgb2NjdXBpZXMgb25lIG5ldyBwYXJ0aXRpb24uICBUaGlzCisJICog aXMgcmVhbGx5IHRoZSB3b3JzdCBjYXNlLgorCSAqLworCXVubWF0Y2hlZF9ucGxhbnMgPSBhcHBl bmRfbnBsYW5zIC0gTWluKG1hdGNoaW5nX291dGVyX3Jvd3MsIGFwcGVuZF9ucGxhbnMpOworCXNh dmVkX2Nvc3QgPSAodW5tYXRjaGVkX25wbGFucyAvIGFwcGVuZF9ucGxhbnMpICogYXBwZW5kX3Rv dGFsX2Nvc3Q7CisKKwlyZXR1cm4gcHJ1bmVfY29zdCAtIHNhdmVkX2Nvc3Q7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggMzRjYTZkNGFjMi4uMzA4ZmY0NTJk MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMjQyLDcgKzI0 Miw4IEBAIHN0YXRpYyBIYXNoICptYWtlX2hhc2goUGxhbiAqbGVmdHRyZWUsCiAJCQkJCSAgIExp c3QgKmhhc2hrZXlzLAogCQkJCQkgICBPaWQgc2tld1RhYmxlLAogCQkJCQkgICBBdHRyTnVtYmVy IHNrZXdDb2x1bW4sCi0JCQkJCSAgIGJvb2wgc2tld0luaGVyaXQpOworCQkJCQkgICBib29sIHNr ZXdJbmhlcml0LAorCQkJCQkgICBMaXN0ICpqb2lucGFydHBydW5lX2luZm9fbGlzdCk7CiBzdGF0 aWMgTWVyZ2VKb2luICptYWtlX21lcmdlam9pbihMaXN0ICp0bGlzdCwKIAkJCQkJCQkJIExpc3Qg KmpvaW5jbGF1c2VzLCBMaXN0ICpvdGhlcmNsYXVzZXMsCiAJCQkJCQkJCSBMaXN0ICptZXJnZWNs YXVzZXMsCkBAIC0zNDIsNiArMzQzLDcgQEAgY3JlYXRlX3BsYW4oUGxhbm5lckluZm8gKnJvb3Qs IFBhdGggKmJlc3RfcGF0aCkKIAkvKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlJ3Mgd29ya3NwYWNl IGluIFBsYW5uZXJJbmZvICovCiAJcm9vdC0+Y3VyT3V0ZXJSZWxzID0gTlVMTDsKIAlyb290LT5j dXJPdXRlclBhcmFtcyA9IE5JTDsKKwlyb290LT5qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRh dGVzID0gTklMOwogCiAJLyogUmVjdXJzaXZlbHkgcHJvY2VzcyB0aGUgcGF0aCB0cmVlLCBkZW1h bmRpbmcgdGhlIGNvcnJlY3QgdGxpc3QgcmVzdWx0ICovCiAJcGxhbiA9IGNyZWF0ZV9wbGFuX3Jl Y3Vyc2Uocm9vdCwgYmVzdF9wYXRoLCBDUF9FWEFDVF9UTElTVCk7CkBAIC0zNjksNiArMzcxLDgg QEAgY3JlYXRlX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKmJlc3RfcGF0aCkKIAlpZiAo cm9vdC0+Y3VyT3V0ZXJQYXJhbXMgIT0gTklMKQogCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFz c2lnbiBhbGwgTmVzdExvb3BQYXJhbXMgdG8gcGxhbiBub2RlcyIpOwogCisJQXNzZXJ0KHJvb3Qt PmpvaW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZXMgPT0gTklMKTsKKwogCS8qCiAJICogUmVz ZXQgcGxhbl9wYXJhbXMgdG8gZW5zdXJlIHBhcmFtIElEcyB1c2VkIGZvciBuZXN0bG9vcCBwYXJh bXMgYXJlIG5vdAogCSAqIHJlLXVzZWQgbGF0ZXIKQEAgLTEyMjMsNiArMTIyNyw3IEBAIGNyZWF0 ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBp bnQgZmxhZ3MpCiAJaW50CQkJbmFzeW5jcGxhbnMgPSAwOwogCVJlbE9wdEluZm8gKnJlbCA9IGJl c3RfcGF0aC0+cGF0aC5wYXJlbnQ7CiAJUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0cHJ1bmVpbmZv ID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqb2luX3BydW5lX3BhcmFtaWRzID0gTlVMTDsKIAlpbnQJ CQlub2RlbnVtc29ydGtleXMgPSAwOwogCUF0dHJOdW1iZXIgKm5vZGVTb3J0Q29sSWR4ID0gTlVM TDsKIAlPaWQJCSAgICpub2RlU29ydE9wZXJhdG9ycyA9IE5VTEw7CkBAIC0xMzc3LDYgKzEzODIs OCBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGggKmJl c3RfcGF0aCwgaW50IGZsYWdzKQogCSAqIElmIGFueSBxdWFscyBleGlzdCwgdGhleSBtYXkgYmUg dXNlZnVsIHRvIHBlcmZvcm0gZnVydGhlciBwYXJ0aXRpb24KIAkgKiBwcnVuaW5nIGR1cmluZyBl eGVjdXRpb24uICBHYXRoZXIgaW5mb3JtYXRpb24gbmVlZGVkIGJ5IHRoZSBleGVjdXRvciB0bwog CSAqIGRvIHBhcnRpdGlvbiBwcnVuaW5nLgorCSAqCisJICogQWxzbyBnYXRoZXIgaW5mb3JtYXRp b24gbmVlZGVkIGJ5IHRoZSBleGVjdXRvciB0byBkbyBqb2luIHBydW5pbmcuCiAJICovCiAJaWYg KGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZykKIAl7CkBAIC0xMzk5LDEzICsxNDA2LDIwIEBAIGNy ZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRo LCBpbnQgZmxhZ3MpCiAJCQlwYXJ0cHJ1bmVpbmZvID0KIAkJCQltYWtlX3BhcnRpdGlvbl9wcnVu ZWluZm8ocm9vdCwgcmVsLAogCQkJCQkJCQkJCSBiZXN0X3BhdGgtPnN1YnBhdGhzLAotCQkJCQkJ CQkJCSBwcnVuZXF1YWwpOworCQkJCQkJCQkJCSBwcnVuZXF1YWwsCisJCQkJCQkJCQkJIE5VTEwp OworCisJCWpvaW5fcHJ1bmVfcGFyYW1pZHMgPQorCQkJbWFrZV9qb2luX3BhcnRpdGlvbl9wcnVu ZWluZm9zKHJvb3QsIHJlbCwKKwkJCQkJCQkJCQkgICAoUGF0aCAqKSBiZXN0X3BhdGgsCisJCQkJ CQkJCQkJICAgYmVzdF9wYXRoLT5zdWJwYXRocyk7CiAJfQogCiAJcGxhbi0+YXBwZW5kcGxhbnMg PSBzdWJwbGFuczsKIAlwbGFuLT5uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwogCXBsYW4tPmZp cnN0X3BhcnRpYWxfcGxhbiA9IGJlc3RfcGF0aC0+Zmlyc3RfcGFydGlhbF9wYXRoOwogCXBsYW4t PnBhcnRfcHJ1bmVfaW5mbyA9IHBhcnRwcnVuZWluZm87CisJcGxhbi0+am9pbl9wcnVuZV9wYXJh bWlkcyA9IGpvaW5fcHJ1bmVfcGFyYW1pZHM7CiAKIAljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZw bGFuLT5wbGFuLCAoUGF0aCAqKSBiZXN0X3BhdGgpOwogCkBAIC0xNDQ1LDYgKzE0NTksNyBAQCBj cmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0 aCAqYmVzdF9wYXRoLAogCUxpc3RDZWxsICAgKnN1YnBhdGhzOwogCVJlbE9wdEluZm8gKnJlbCA9 IGJlc3RfcGF0aC0+cGF0aC5wYXJlbnQ7CiAJUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0cHJ1bmVp bmZvID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqb2luX3BydW5lX3BhcmFtaWRzID0gTlVMTDsKIAog CS8qCiAJICogV2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIGNyZWF0aW9uIG9mIHRoZSBNZXJnZUFw cGVuZCBub2RlIHNwbGl0IG91dApAQCAtMTU0MSw2ICsxNTU2LDggQEAgY3JlYXRlX21lcmdlX2Fw cGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwK IAkgKiBJZiBhbnkgcXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0byBwZXJmb3JtIGZ1 cnRoZXIgcGFydGl0aW9uCiAJICogcHJ1bmluZyBkdXJpbmcgZXhlY3V0aW9uLiAgR2F0aGVyIGlu Zm9ybWF0aW9uIG5lZWRlZCBieSB0aGUgZXhlY3V0b3IgdG8KIAkgKiBkbyBwYXJ0aXRpb24gcHJ1 bmluZy4KKwkgKgorCSAqIEFsc28gZ2F0aGVyIGluZm9ybWF0aW9uIG5lZWRlZCBieSB0aGUgZXhl Y3V0b3IgdG8gZG8gam9pbiBwcnVuaW5nLgogCSAqLwogCWlmIChlbmFibGVfcGFydGl0aW9uX3By dW5pbmcpCiAJewpAQCAtMTU1NCwxMSArMTU3MSwxOCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bs YW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCQlpZiAo cHJ1bmVxdWFsICE9IE5JTCkKIAkJCXBhcnRwcnVuZWluZm8gPSBtYWtlX3BhcnRpdGlvbl9wcnVu ZWluZm8ocm9vdCwgcmVsLAogCQkJCQkJCQkJCQkJCSBiZXN0X3BhdGgtPnN1YnBhdGhzLAotCQkJ CQkJCQkJCQkJCSBwcnVuZXF1YWwpOworCQkJCQkJCQkJCQkJCSBwcnVuZXF1YWwsCisJCQkJCQkJ CQkJCQkJIE5VTEwpOworCisJCWpvaW5fcHJ1bmVfcGFyYW1pZHMgPQorCQkJbWFrZV9qb2luX3Bh cnRpdGlvbl9wcnVuZWluZm9zKHJvb3QsIHJlbCwKKwkJCQkJCQkJCQkgICAoUGF0aCAqKSBiZXN0 X3BhdGgsCisJCQkJCQkJCQkJICAgYmVzdF9wYXRoLT5zdWJwYXRocyk7CiAJfQogCiAJbm9kZS0+ bWVyZ2VwbGFucyA9IHN1YnBsYW5zOwogCW5vZGUtPnBhcnRfcHJ1bmVfaW5mbyA9IHBhcnRwcnVu ZWluZm87CisJbm9kZS0+am9pbl9wcnVuZV9wYXJhbWlkcyA9IGpvaW5fcHJ1bmVfcGFyYW1pZHM7 CiAKIAkvKgogCSAqIElmIHByZXBhcmVfc29ydF9mcm9tX3BhdGhrZXlzIGFkZGVkIHNvcnQgY29s dW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0bwpAQCAtNDczNCw2ICs0NzU4LDEzIEBAIGNyZWF0ZV9o YXNoam9pbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LAogCUF0dHJOdW1iZXIJc2tld0NvbHVtbiA9 IEludmFsaWRBdHRyTnVtYmVyOwogCWJvb2wJCXNrZXdJbmhlcml0ID0gZmFsc2U7CiAJTGlzdENl bGwgICAqbGM7CisJTGlzdAkgICAqam9pbnBhcnRwcnVuZV9pbmZvX2xpc3Q7CisKKwkvKgorCSAq IENvbGxlY3QgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gYnVpbGQgSm9pblBhcnRpdGlvblBydW5l SW5mb3MgYXQgdGhpcworCSAqIGpvaW4uCisJICovCisJcHJlcGFyZV9qb2luX3BhcnRpdGlvbl9w cnVuZV9jYW5kaWRhdGUocm9vdCwgJmJlc3RfcGF0aC0+anBhdGgpOwogCiAJLyoKIAkgKiBIYXNo Sm9pbiBjYW4gcHJvamVjdCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZW1hbmQgZXhhY3QgdGxpc3Rz IGZyb20gdGhlCkBAIC00NzQ1LDYgKzQ3NzYsMTEgQEAgY3JlYXRlX2hhc2hqb2luX3BsYW4oUGxh bm5lckluZm8gKnJvb3QsCiAJb3V0ZXJfcGxhbiA9IGNyZWF0ZV9wbGFuX3JlY3Vyc2Uocm9vdCwg YmVzdF9wYXRoLT5qcGF0aC5vdXRlcmpvaW5wYXRoLAogCQkJCQkJCQkJIChiZXN0X3BhdGgtPm51 bV9iYXRjaGVzID4gMSkgPyBDUF9TTUFMTF9UTElTVCA6IDApOwogCisJLyoKKwkgKiBSZXRyaWV2 ZSBhbGwgdGhlIEpvaW5QYXJ0aXRpb25QcnVuZUluZm9zIGZvciB0aGlzIGpvaW4uCisJICovCisJ am9pbnBhcnRwcnVuZV9pbmZvX2xpc3QgPSBnZXRfam9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlk YXRlKHJvb3QpOworCiAJaW5uZXJfcGxhbiA9IGNyZWF0ZV9wbGFuX3JlY3Vyc2Uocm9vdCwgYmVz dF9wYXRoLT5qcGF0aC5pbm5lcmpvaW5wYXRoLAogCQkJCQkJCQkJIENQX1NNQUxMX1RMSVNUKTsK IApAQCAtNDg1MCw3ICs0ODg2LDggQEAgY3JlYXRlX2hhc2hqb2luX3BsYW4oUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCQkgIGlubmVyX2hhc2hrZXlzLAogCQkJCQkJICBza2V3VGFibGUsCiAJCQkJ CQkgIHNrZXdDb2x1bW4sCi0JCQkJCQkgIHNrZXdJbmhlcml0KTsKKwkJCQkJCSAgc2tld0luaGVy aXQsCisJCQkJCQkgIGpvaW5wYXJ0cHJ1bmVfaW5mb19saXN0KTsKIAogCS8qCiAJICogU2V0IEhh c2ggbm9kZSdzIHN0YXJ0dXAgJiB0b3RhbCBjb3N0cyBlcXVhbCB0byB0b3RhbCBjb3N0IG9mIGlu cHV0CkBAIC01OTc3LDcgKzYwMTQsOCBAQCBtYWtlX2hhc2goUGxhbiAqbGVmdHRyZWUsCiAJCSAg TGlzdCAqaGFzaGtleXMsCiAJCSAgT2lkIHNrZXdUYWJsZSwKIAkJICBBdHRyTnVtYmVyIHNrZXdD b2x1bW4sCi0JCSAgYm9vbCBza2V3SW5oZXJpdCkKKwkJICBib29sIHNrZXdJbmhlcml0LAorCQkg IExpc3QgKmpvaW5wYXJ0cHJ1bmVfaW5mb19saXN0KQogewogCUhhc2gJICAgKm5vZGUgPSBtYWtl Tm9kZShIYXNoKTsKIAlQbGFuCSAgICpwbGFuID0gJm5vZGUtPnBsYW47CkBAIC01OTkxLDYgKzYw MjksNyBAQCBtYWtlX2hhc2goUGxhbiAqbGVmdHRyZWUsCiAJbm9kZS0+c2tld1RhYmxlID0gc2tl d1RhYmxlOwogCW5vZGUtPnNrZXdDb2x1bW4gPSBza2V3Q29sdW1uOwogCW5vZGUtPnNrZXdJbmhl cml0ID0gc2tld0luaGVyaXQ7CisJbm9kZS0+am9pbnBhcnRwcnVuZV9pbmZvX2xpc3QgPSBqb2lu cGFydHBydW5lX2luZm9fbGlzdDsKIAogCXJldHVybiBub2RlOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCmluZGV4IGZjMzcwOTUxMGQuLmM0MTZlN2NjZGEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTE1Niw2ICsxNTYsMTEgQEAgc3RhdGljIFBsYW4g KnNldF9tZXJnZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJ CU1lcmdlQXBwZW5kICptcGxhbiwKIAkJCQkJCQkJCQlpbnQgcnRvZmZzZXQpOwogc3RhdGljIHZv aWQgc2V0X2hhc2hfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbiwgaW50 IHJ0b2Zmc2V0KTsKK3N0YXRpYyB2b2lkIHNldF9qb2lucGFydGl0aW9ucHJ1bmVfcmVmZXJlbmNl cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICBMaXN0ICpqb2lucGFydHBydW5lX2lu Zm9fbGlzdCwKKwkJCQkJCQkJCQkJICBpbmRleGVkX3RsaXN0ICpvdXRlcl9pdGxpc3QsCisJCQkJ CQkJCQkJCSAgaW50IHJ0b2Zmc2V0LAorCQkJCQkJCQkJCQkgIGRvdWJsZSBudW1fZXhlYyk7CiBz dGF0aWMgUmVsaWRzIG9mZnNldF9yZWxpZF9zZXQoUmVsaWRzIHJlbGlkcywgaW50IHJ0b2Zmc2V0 KTsKIHN0YXRpYyBOb2RlICpmaXhfc2Nhbl9leHByKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpu b2RlLAogCQkJCQkJICAgaW50IHJ0b2Zmc2V0LCBkb3VibGUgbnVtX2V4ZWMpOwpAQCAtMTg5Nyw2 ICsxOTAyLDYyIEBAIHNldF9oYXNoX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4g KnBsYW4sIGludCBydG9mZnNldCkKIAogCS8qIEhhc2ggbm9kZXMgZG9uJ3QgaGF2ZSB0aGVpciBv d24gcXVhbHMgKi8KIAlBc3NlcnQocGxhbi0+cXVhbCA9PSBOSUwpOworCisJc2V0X2pvaW5wYXJ0 aXRpb25wcnVuZV9yZWZlcmVuY2VzKHJvb3QsCisJCQkJCQkJCQkgIGhwbGFuLT5qb2lucGFydHBy dW5lX2luZm9fbGlzdCwKKwkJCQkJCQkJCSAgb3V0ZXJfaXRsaXN0LAorCQkJCQkJCQkJICBydG9m ZnNldCwKKwkJCQkJCQkJCSAgTlVNX0VYRUNfVExJU1QocGxhbikpOworfQorCisvKgorICogc2V0 X2pvaW5wYXJ0aXRpb25wcnVuZV9yZWZlcmVuY2VzCisgKgkgICBEbyBzZXRfcGxhbl9yZWZlcmVu Y2VzIHByb2Nlc3Npbmcgb24gSm9pblBhcnRpdGlvblBydW5lSW5mb3MKKyAqLworc3RhdGljIHZv aWQKK3NldF9qb2lucGFydGl0aW9ucHJ1bmVfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK KwkJCQkJCQkJICBMaXN0ICpqb2lucGFydHBydW5lX2luZm9fbGlzdCwKKwkJCQkJCQkJICBpbmRl eGVkX3RsaXN0ICpvdXRlcl9pdGxpc3QsCisJCQkJCQkJCSAgaW50IHJ0b2Zmc2V0LAorCQkJCQkJ CQkgIGRvdWJsZSBudW1fZXhlYykKK3sKKwlMaXN0Q2VsbCAgICpsOworCisJZm9yZWFjaChsLCBq b2lucGFydHBydW5lX2luZm9fbGlzdCkKKwl7CisJCUpvaW5QYXJ0aXRpb25QcnVuZUluZm8gKmpw aW5mbyA9IChKb2luUGFydGl0aW9uUHJ1bmVJbmZvICopIGxmaXJzdChsKTsKKwkJTGlzdENlbGwg ICAqbDE7CisKKwkJZm9yZWFjaChsMSwganBpbmZvLT5wYXJ0X3BydW5lX2luZm8tPnBydW5lX2lu Zm9zKQorCQl7CisJCQlMaXN0CSAgICpwcnVuZV9pbmZvcyA9IGxmaXJzdChsMSk7CisJCQlMaXN0 Q2VsbCAgICpsMjsKKworCQkJZm9yZWFjaChsMiwgcHJ1bmVfaW5mb3MpCisJCQl7CisJCQkJUGFy dGl0aW9uZWRSZWxQcnVuZUluZm8gKnBpbmZvID0gbGZpcnN0KGwyKTsKKworCQkJCXBpbmZvLT5y dGluZGV4ICs9IHJ0b2Zmc2V0OworCisJCQkJcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcyA9 IChMaXN0ICopCisJCQkJCWZpeF91cHBlcl9leHByKHJvb3QsCisJCQkJCQkJCSAgIChOb2RlICop IHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMsCisJCQkJCQkJCSAgIG91dGVyX2l0bGlzdCwK KwkJCQkJCQkJICAgT1VURVJfVkFSLAorCQkJCQkJCQkgICBydG9mZnNldCwKKwkJCQkJCQkJICAg TlJNX0VRVUFMLAorCQkJCQkJCQkgICBudW1fZXhlYyk7CisJCQkJcGluZm8tPmV4ZWNfcHJ1bmlu Z19zdGVwcyA9IChMaXN0ICopCisJCQkJCWZpeF91cHBlcl9leHByKHJvb3QsCisJCQkJCQkJCSAg IChOb2RlICopIHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMsCisJCQkJCQkJCSAgIG91dGVyX2l0 bGlzdCwKKwkJCQkJCQkJICAgT1VURVJfVkFSLAorCQkJCQkJCQkgICBydG9mZnNldCwKKwkJCQkJ CQkJICAgTlJNX0VRVUFMLAorCQkJCQkJCQkgICBudW1fZXhlYyk7CisJCQl9CisJCX0KKwl9CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMg Yi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKaW5kZXggM2YzMWVjYzk1Ni4u ZDk3ODA5MzgzMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVu ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwpAQCAtNDgsNyAr NDgsOSBAQAogI2luY2x1ZGUgIm9wdGltaXplci9hcHBlbmRpbmZvLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL3BhcmFtYXNzaWduLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2Rl LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5mby5oIgogI2luY2x1ZGUgInBhcnNl ci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5oIgogI2lu Y2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCIKQEAgLTEwMywxNSArMTA1LDE2IEBAIHR5 cGVkZWYgZW51bSBQYXJ0Q2xhdXNlVGFyZ2V0CiAgKgogICogZ2VuX3BhcnRwcnVuZV9zdGVwcygp IGluaXRpYWxpemVzIGFuZCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0LgogICoK LSAqIE5vdGUgdGhhdCBoYXNfbXV0YWJsZV9vcCwgaGFzX211dGFibGVfYXJnLCBhbmQgaGFzX2V4 ZWNfcGFyYW0gYXJlIHNldCBpZgotICogd2UgZm91bmQgYW55IHBvdGVudGlhbGx5LXVzZWZ1bC1m b3ItcHJ1bmluZyBjbGF1c2UgaGF2aW5nIHRob3NlIHByb3BlcnRpZXMsCi0gKiB3aGV0aGVyIG9y IG5vdCB3ZSBhY3R1YWxseSB1c2VkIHRoZSBjbGF1c2UgaW4gdGhlIHN0ZXBzIGxpc3QuICBUaGlz Ci0gKiBkZWZpbml0aW9uIGFsbG93cyB1cyB0byBza2lwIHRoZSBQQVJUVEFSR0VUX0VYRUMgcGFz cyBpbiBzb21lIGNhc2VzLgorICogTm90ZSB0aGF0IGhhc19tdXRhYmxlX29wLCBoYXNfbXV0YWJs ZV9hcmcsIGhhc19leGVjX3BhcmFtIGFuZCBoYXNfdmFycyBhcmUKKyAqIHNldCBpZiB3ZSBmb3Vu ZCBhbnkgcG90ZW50aWFsbHktdXNlZnVsLWZvci1wcnVuaW5nIGNsYXVzZSBoYXZpbmcgdGhvc2UK KyAqIHByb3BlcnRpZXMsIHdoZXRoZXIgb3Igbm90IHdlIGFjdHVhbGx5IHVzZWQgdGhlIGNsYXVz ZSBpbiB0aGUgc3RlcHMgbGlzdC4KKyAqIFRoaXMgZGVmaW5pdGlvbiBhbGxvd3MgdXMgdG8gc2tp cCB0aGUgUEFSVFRBUkdFVF9FWEVDIHBhc3MgaW4gc29tZSBjYXNlcy4KICAqLwogdHlwZWRlZiBz dHJ1Y3QgR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0CiB7CiAJLyogQ29waWVzIG9mIGlucHV0 IGFyZ3VtZW50cyBmb3IgZ2VuX3BhcnRwcnVuZV9zdGVwczogKi8KIAlSZWxPcHRJbmZvICpyZWw7 CQkJLyogdGhlIHBhcnRpdGlvbmVkIHJlbGF0aW9uICovCisJQml0bWFwc2V0ICAqYXZhaWxhYmxl X3JlbHM7CS8qIHJlbHMgd2hvc2UgVmFycyBtYXkgYmUgdXNlZCBmb3IgcHJ1bmluZyAqLwogCVBh cnRDbGF1c2VUYXJnZXQgdGFyZ2V0OwkvKiB1c2UtY2FzZSB3ZSdyZSBnZW5lcmF0aW5nIHN0ZXBz IGZvciAqLwogCS8qIFJlc3VsdCBkYXRhOiAqLwogCUxpc3QJICAgKnN0ZXBzOwkJCS8qIGxpc3Qg b2YgUGFydGl0aW9uUHJ1bmVTdGVwcyAqLwpAQCAtMTE5LDYgKzEyMiw3IEBAIHR5cGVkZWYgc3Ry dWN0IEdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4dAogCWJvb2wJCWhhc19tdXRhYmxlX2FyZzsJ LyogY2xhdXNlcyBpbmNsdWRlIGFueSBtdXRhYmxlIGNvbXBhcmlzb24KIAkJCQkJCQkJCSAqIHZh bHVlcywgKm90aGVyIHRoYW4qIGV4ZWMgcGFyYW1zICovCiAJYm9vbAkJaGFzX2V4ZWNfcGFyYW07 IC8qIGNsYXVzZXMgaW5jbHVkZSBhbnkgUEFSQU1fRVhFQyBwYXJhbXMgKi8KKwlib29sCQloYXNf dmFyczsJCS8qIGNsYXVzZXMgaW5jbHVkZSBhbnkgVmFycyBmcm9tICdhdmFpbGFibGVfcmVscycg Ki8KIAlib29sCQljb250cmFkaWN0b3J5OwkvKiBjbGF1c2VzIHdlcmUgcHJvdmVuIHNlbGYtY29u dHJhZGljdG9yeSAqLwogCS8qIFdvcmtpbmcgc3RhdGU6ICovCiAJaW50CQkJbmV4dF9zdGVwX2lk OwpAQCAtMTQ0LDggKzE0OCwxMCBAQCBzdGF0aWMgTGlzdCAqbWFrZV9wYXJ0aXRpb25lZHJlbF9w cnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJICAgTGlzdCAqcHJ1bmVxdWFs LAogCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcGFydHJlbGlkcywKIAkJCQkJCQkJCQkgICBpbnQg KnJlbGlkX3N1YnBsYW5fbWFwLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqYXZhaWxhYmxlX3Jl bHMsCiAJCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zKTsKIHN0YXRpYyB2 b2lkIGdlbl9wYXJ0cHJ1bmVfc3RlcHMoUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VzLAor CQkJCQkJCQlCaXRtYXBzZXQgKmF2YWlsYWJsZV9yZWxzLAogCQkJCQkJCQlQYXJ0Q2xhdXNlVGFy Z2V0IHRhcmdldCwKIAkJCQkJCQkJR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0 KTsKIHN0YXRpYyBMaXN0ICpnZW5fcGFydHBydW5lX3N0ZXBzX2ludGVybmFsKEdlbmVyYXRlUHJ1 bmluZ1N0ZXBzQ29udGV4dCAqY29udGV4dCwKQEAgLTIwNCw2ICsyMTAsMTAgQEAgc3RhdGljIFBh cnRDbGF1c2VNYXRjaFN0YXR1cyBtYXRjaF9ib29sZWFuX3BhcnRpdGlvbl9jbGF1c2UoT2lkIHBh cnRvcGZhbWlseSwKIHN0YXRpYyB2b2lkIHBhcnRrZXlfZGF0dW1fZnJvbV9leHByKFBhcnRpdGlv blBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCUV4cHIgKmV4cHIsIGludCBzdGF0ZWlk eCwKIAkJCQkJCQkJCURhdHVtICp2YWx1ZSwgYm9vbCAqaXNudWxsKTsKK3N0YXRpYyBib29sIGNv bnRhaW5fZm9yYmlkZGVuX3Zhcl9jbGF1c2UoTm9kZSAqbm9kZSwKKwkJCQkJCQkJCQkgR2VuZXJh dGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KTsKK3N0YXRpYyBib29sIGNvbnRhaW5fZm9y YmlkZGVuX3Zhcl9jbGF1c2Vfd2Fsa2VyKE5vZGUgKm5vZGUsCisJCQkJCQkJCQkJCQlHZW5lcmF0 ZVBydW5pbmdTdGVwc0NvbnRleHQgKmNvbnRleHQpOwogCiAKIC8qCkBAIC0yMTYsMTEgKzIyNiwx NCBAQCBzdGF0aWMgdm9pZCBwYXJ0a2V5X2RhdHVtX2Zyb21fZXhwcihQYXJ0aXRpb25QcnVuZUNv bnRleHQgKmNvbnRleHQsCiAgKiBvZiBzY2FuIHBhdGhzIGZvciBpdHMgY2hpbGQgcmVscy4KICAq ICdwcnVuZXF1YWwnIGlzIGEgbGlzdCBvZiBwb3RlbnRpYWwgcHJ1bmluZyBxdWFscyAoaS5lLiwg cmVzdHJpY3Rpb24KICAqIGNsYXVzZXMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgYXBwZW5k cmVsKS4KKyAqICdhdmFpbGFibGVfcmVscycgaXMgdGhlIHJlbGlkIHNldCBvZiByZWxzIHdob3Nl IFZhcnMgbWF5IGJlIHVzZWQgZm9yCisgKiBwcnVuaW5nLgogICovCiBQYXJ0aXRpb25QcnVuZUlu Zm8gKgogbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpwYXJlbnRyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCi0JCQkJCQkgTGlzdCAqcHJ1 bmVxdWFsKQorCQkJCQkJIExpc3QgKnBydW5lcXVhbCwKKwkJCQkJCSBCaXRtYXBzZXQgKmF2YWls YWJsZV9yZWxzKQogewogCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvOwogCUJpdG1hcHNl dCAgKmFsbG1hdGNoZWRzdWJwbGFucyA9IE5VTEw7CkBAIC0zMTMsNiArMzI2LDcgQEAgbWFrZV9w YXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRy ZWwsCiAJCQkJCQkJCQkJCQkgIHBydW5lcXVhbCwKIAkJCQkJCQkJCQkJCSAgcGFydHJlbGlkcywK IAkJCQkJCQkJCQkJCSAgcmVsaWRfc3VicGxhbl9tYXAsCisJCQkJCQkJCQkJCQkgIGF2YWlsYWJs ZV9yZWxzLAogCQkJCQkJCQkJCQkJICAmbWF0Y2hlZHN1YnBsYW5zKTsKIAogCQkvKiBXaGVuIHBy dW5pbmcgaXMgcG9zc2libGUsIHJlY29yZCB0aGUgbWF0Y2hlZCBzdWJwbGFucyAqLwpAQCAtMzYw LDYgKzM3NCwxODQgQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJcmV0dXJuIHBydW5laW5mbzsKIH0KIAorLyoKKyAq IG1ha2Vfam9pbl9wYXJ0aXRpb25fcHJ1bmVpbmZvcworICoJCUJ1aWxkcyBvbmUgSm9pblBhcnRp dGlvblBydW5lSW5mbyBmb3IgZWFjaCBqb2luIGF0IHdoaWNoIGpvaW4gcGFydGl0aW9uCisgKgkJ cHJ1bmluZyBpcyBwb3NzaWJsZSBmb3IgdGhpcyBhcHBlbmRyZWwuCisgKgorICogJ3BhcmVudHJl bCcgaXMgdGhlIFJlbE9wdEluZm8gZm9yIGFuIGFwcGVuZHJlbCwgYW5kICdzdWJwYXRocycgaXMg dGhlIGxpc3QKKyAqIG9mIHNjYW4gcGF0aHMgZm9yIGl0cyBjaGlsZCByZWxzLgorICovCitCaXRt YXBzZXQgKgorbWFrZV9qb2luX3BhcnRpdGlvbl9wcnVuZWluZm9zKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCisJCQkJCQkJICAgUGF0aCAqYmVzdF9wYXRoLCBMaXN0 ICpzdWJwYXRocykKK3sKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOworCUxpc3RDZWxsICAg KmxjOworCisJaWYgKCFJU19QQVJUSVRJT05FRF9SRUwocGFyZW50cmVsKSkKKwkJcmV0dXJuIE5V TEw7CisKKwlmb3JlYWNoKGxjLCByb290LT5qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGVz KQorCXsKKwkJSm9pblBhcnRpdGlvblBydW5lQ2FuZGlkYXRlSW5mbyAqY2FuZGlkYXRlID0KKwkJ CShKb2luUGFydGl0aW9uUHJ1bmVDYW5kaWRhdGVJbmZvICopIGxmaXJzdChsYyk7CisJCVBhcnRp dGlvblBydW5lSW5mbyAqcGFydF9wcnVuZV9pbmZvOworCQlMaXN0CSAgICpwcnVuZXF1YWw7CisJ CVJlbGlkcwkJam9pbnJlbGlkczsKKwkJTGlzdENlbGwgICAqbDsKKwkJZG91YmxlCQlwcnVuZV9j b3N0OworCisJCWlmIChjYW5kaWRhdGUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJ CSAqIElkZW50aWZ5IGFsbCBqb2luY2xhdXNlcyB0aGF0IGFyZSBtb3ZhYmxlIHRvIHRoaXMgYXBw ZW5kcmVsIGdpdmVuCisJCSAqIHRoaXMgaW5uZXIgc2lkZSByZWxpZHMuICBPbmx5IHRob3NlIGNs YXVzZXMgY2FuIGJlIHVzZWQgZm9yIGpvaW4KKwkJICogcGFydGl0aW9uIHBydW5pbmcuCisJCSAq LworCQlqb2lucmVsaWRzID0gYm1zX3VuaW9uKHBhcmVudHJlbC0+cmVsaWRzLCBjYW5kaWRhdGUt PmlubmVyX3JlbGlkcyk7CisJCXBydW5lcXVhbCA9IE5JTDsKKwkJZm9yZWFjaChsLCBjYW5kaWRh dGUtPmpvaW5yZXN0cmljdGluZm8pCisJCXsKKwkJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVz dHJpY3RJbmZvICopIGxmaXJzdChsKTsKKworCQkJaWYgKGpvaW5fY2xhdXNlX2lzX21vdmFibGVf aW50byhyaW5mbywKKwkJCQkJCQkJCQkJcGFyZW50cmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJCWpv aW5yZWxpZHMpKQorCQkJCXBydW5lcXVhbCA9IGxhcHBlbmQocHJ1bmVxdWFsLCByaW5mbyk7CisJ CX0KKworCQlpZiAocHJ1bmVxdWFsID09IE5JTCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAq IENoZWNrIHRoZSBvdmVyaGVhZCBvZiB0aGlzIHBydW5pbmcKKwkJICovCisJCXBydW5lX2Nvc3Qg PSBjb21wdXRlX3BhcnRwcnVuZV9jb3N0KHJvb3QsCisJCQkJCQkJCQkJCXBhcmVudHJlbCwKKwkJ CQkJCQkJCQkJYmVzdF9wYXRoLT50b3RhbF9jb3N0LAorCQkJCQkJCQkJCQlsaXN0X2xlbmd0aChz dWJwYXRocyksCisJCQkJCQkJCQkJCWNhbmRpZGF0ZS0+aW5uZXJfcmVsaWRzLAorCQkJCQkJCQkJ CQljYW5kaWRhdGUtPmlubmVyX3Jvd3MsCisJCQkJCQkJCQkJCXBydW5lcXVhbCk7CisJCWlmIChw cnVuZV9jb3N0ID4gMCkKKwkJCWNvbnRpbnVlOworCisJCXBhcnRfcHJ1bmVfaW5mbyA9IG1ha2Vf cGFydGl0aW9uX3BydW5laW5mbyhyb290LCBwYXJlbnRyZWwsCisJCQkJCQkJCQkJCQkgICBzdWJw YXRocywKKwkJCQkJCQkJCQkJCSAgIHBydW5lcXVhbCwKKwkJCQkJCQkJCQkJCSAgIGNhbmRpZGF0 ZS0+aW5uZXJfcmVsaWRzKTsKKworCQlpZiAocGFydF9wcnVuZV9pbmZvKQorCQl7CisJCQlKb2lu UGFydGl0aW9uUHJ1bmVJbmZvICpqcGluZm87CisKKwkJCWpwaW5mbyA9IG1ha2VOb2RlKEpvaW5Q YXJ0aXRpb25QcnVuZUluZm8pOworCisJCQlqcGluZm8tPnBhcnRfcHJ1bmVfaW5mbyA9IHBhcnRf cHJ1bmVfaW5mbzsKKwkJCWpwaW5mby0+cGFyYW1pZCA9IGFzc2lnbl9zcGVjaWFsX2V4ZWNfcGFy YW0ocm9vdCk7CisJCQlqcGluZm8tPm5wbGFucyA9IGxpc3RfbGVuZ3RoKHN1YnBhdGhzKTsKKwor CQkJY2FuZGlkYXRlLT5qb2lucGFydHBydW5lX2luZm9fbGlzdCA9CisJCQkJbGFwcGVuZChjYW5k aWRhdGUtPmpvaW5wYXJ0cHJ1bmVfaW5mb19saXN0LCBqcGluZm8pOworCisJCQlyZXN1bHQgPSBi bXNfYWRkX21lbWJlcihyZXN1bHQsIGpwaW5mby0+cGFyYW1pZCk7CisJCX0KKwl9CisKKwlyZXR1 cm4gcmVzdWx0OworfQorCisvKgorICogcHJlcGFyZV9qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5k aWRhdGUKKyAqIAkJQ2hlY2sgaWYgam9pbiBwYXJ0aXRpb24gcHJ1bmluZyBpcyBwb3NzaWJsZSBh dCB0aGlzIGpvaW4gYW5kIGlmIHNvCisgKiAJCWNvbGxlY3QgaW5mb3JtYXRpb24gcmVxdWlyZWQg dG8gYnVpbGQgSm9pblBhcnRpdGlvblBydW5lSW5mb3MuCisgKgorICogTm90ZSB0aGF0IHdlIG1h eSBidWlsZCBtb3JlIHRoYW4gb25lIEpvaW5QYXJ0aXRpb25QcnVuZUluZm8gYXQgb25lIGpvaW4s IGZvcgorICogZGlmZmVyZW50IEFwcGVuZC9NZXJnZUFwcGVuZCBwYXRocy4KKyAqLwordm9pZAor cHJlcGFyZV9qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGUoUGxhbm5lckluZm8gKnJvb3Qs IEpvaW5QYXRoICpqcGF0aCkKK3sKKwlKb2luUGFydGl0aW9uUHJ1bmVDYW5kaWRhdGVJbmZvICpj YW5kaWRhdGU7CisKKwlpZiAoIWVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZykKKwl7CisJCXJvb3Qt PmpvaW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZXMgPQorCQkJbGFwcGVuZChyb290LT5qb2lu X3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGVzLCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKworCS8q CisJICogRm9yIG5vdyBkbyBub3QgcGVyZm9ybSBqb2luIHBhcnRpdGlvbiBwcnVuaW5nIGZvciBw YXJhbGxlbCBoYXNoam9pbi4KKwkgKi8KKwlpZiAoanBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2Vy cyA+IDApCisJeworCQlyb290LT5qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGVzID0KKwkJ CWxhcHBlbmQocm9vdC0+am9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcywgTlVMTCk7CisJ CXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIGNhbm5vdCBwZXJmb3JtIGpvaW4gcGFydGl0aW9u IHBydW5pbmcgaWYgdGhlIG91dGVyIGlzIHRoZQorCSAqIG5vbi1udWxsYWJsZSBzaWRlLgorCSAq LworCWlmICghKGpwYXRoLT5qb2ludHlwZSA9PSBKT0lOX0lOTkVSIHx8CisJCSAganBhdGgtPmpv aW50eXBlID09IEpPSU5fU0VNSSB8fAorCQkgIGpwYXRoLT5qb2ludHlwZSA9PSBKT0lOX1JJR0hU IHx8CisJCSAganBhdGgtPmpvaW50eXBlID09IEpPSU5fUklHSFRfQU5USSkpCisJeworCQlyb290 LT5qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGVzID0KKwkJCWxhcHBlbmQocm9vdC0+am9p bl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcywgTlVMTCk7CisJCXJldHVybjsKKwl9CisKKwkv KgorCSAqIEZvciBub3cgd2Ugb25seSBzdXBwb3J0IEhhc2hKb2luLgorCSAqLworCWlmIChqcGF0 aC0+cGF0aC5wYXRodHlwZSAhPSBUX0hhc2hKb2luKQorCXsKKwkJcm9vdC0+am9pbl9wYXJ0aXRp b25fcHJ1bmVfY2FuZGlkYXRlcyA9CisJCQlsYXBwZW5kKHJvb3QtPmpvaW5fcGFydGl0aW9uX3By dW5lX2NhbmRpZGF0ZXMsIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJY2FuZGlkYXRlID0gbWFr ZU5vZGUoSm9pblBhcnRpdGlvblBydW5lQ2FuZGlkYXRlSW5mbyk7CisJY2FuZGlkYXRlLT5qb2lu cmVzdHJpY3RpbmZvID0ganBhdGgtPmpvaW5yZXN0cmljdGluZm87CisJY2FuZGlkYXRlLT5pbm5l cl9yZWxpZHMgPSBqcGF0aC0+aW5uZXJqb2lucGF0aC0+cGFyZW50LT5yZWxpZHM7CisJY2FuZGlk YXRlLT5pbm5lcl9yb3dzID0ganBhdGgtPmlubmVyam9pbnBhdGgtPnBhcmVudC0+cm93czsKKwlj YW5kaWRhdGUtPmpvaW5wYXJ0cHJ1bmVfaW5mb19saXN0ID0gTklMOworCisJcm9vdC0+am9pbl9w YXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcyA9CisJCWxhcHBlbmQocm9vdC0+am9pbl9wYXJ0aXRp b25fcHJ1bmVfY2FuZGlkYXRlcywgY2FuZGlkYXRlKTsKK30KKworLyoKKyAqIGdldF9qb2luX3Bh cnRpdGlvbl9wcnVuZV9jYW5kaWRhdGUKKyAqCQlQb3Agb3V0IHRoZSBKb2luUGFydGl0aW9uUHJ1 bmVDYW5kaWRhdGVJbmZvIGZvciB0aGlzIGpvaW4gYW5kIHJldHJpZXZlCisgKgkJdGhlIEpvaW5Q YXJ0aXRpb25QcnVuZUluZm9zLgorICovCitMaXN0ICoKK2dldF9qb2luX3BhcnRpdGlvbl9wcnVu ZV9jYW5kaWRhdGUoUGxhbm5lckluZm8gKnJvb3QpCit7CisJSm9pblBhcnRpdGlvblBydW5lQ2Fu ZGlkYXRlSW5mbyAqY2FuZGlkYXRlOworCUxpc3QgICAqcmVzdWx0OworCisJY2FuZGlkYXRlID0g bGxhc3Qocm9vdC0+am9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcyk7CisJcm9vdC0+am9p bl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcyA9CisJCWxpc3RfZGVsZXRlX2xhc3Qocm9vdC0+ am9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcyk7CisKKwlpZiAoY2FuZGlkYXRlID09IE5V TEwpCisJCXJldHVybiBOSUw7CisKKwlyZXN1bHQgPSBjYW5kaWRhdGUtPmpvaW5wYXJ0cHJ1bmVf aW5mb19saXN0OworCisJcGZyZWUoY2FuZGlkYXRlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisK IC8qCiAgKiBhZGRfcGFydF9yZWxpZHMKICAqCQlBZGQgbmV3IGluZm8gdG8gYSBsaXN0IG9mIEJp dG1hcHNldHMgb2YgcGFydGl0aW9uZWQgcmVsaWRzLgpAQCAtNDI4LDYgKzYyMCw4IEBAIGFkZF9w YXJ0X3JlbGlkcyhMaXN0ICphbGxwYXJ0cmVsaWRzLCBCaXRtYXBzZXQgKnBhcnRyZWxpZHMpCiAg KiBwYXJ0cmVsaWRzOiBTZXQgb2YgUlQgaW5kZXhlcyBpZGVudGlmeWluZyByZWxldmFudCBwYXJ0 aXRpb25lZCB0YWJsZXMKICAqICAgd2l0aGluIGEgc2luZ2xlIHBhcnRpdGlvbmluZyBoaWVyYXJj aHkKICAqIHJlbGlkX3N1YnBsYW5fbWFwW106IG1hcHMgY2hpbGQgcmVsYXRpb24gcmVsaWRzIHRv IHN1YnBsYW4gaW5kZXhlcworICogYXZhaWxhYmxlX3JlbHM6IHRoZSByZWxpZCBzZXQgb2YgcmVs cyB3aG9zZSBWYXJzIG1heSBiZSB1c2VkIGZvcgorICogICBwcnVuaW5nLgogICogbWF0Y2hlZHN1 YnBsYW5zOiBvbiBzdWNjZXNzLCByZWNlaXZlcyB0aGUgc2V0IG9mIHN1YnBsYW4gaW5kZXhlcyB3 aGljaAogICogICB3ZXJlIG1hdGNoZWQgdG8gdGhpcyBwYXJ0aXRpb24gaGllcmFyY2h5CiAgKgpA QCAtNDQwLDYgKzYzNCw3IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJCQkJICBMaXN0ICpwcnVuZXF1 YWwsCiAJCQkJCQkJICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJICBpbnQgKnJlbGlk X3N1YnBsYW5fbWFwLAorCQkJCQkJCSAgQml0bWFwc2V0ICphdmFpbGFibGVfcmVscywKIAkJCQkJ CQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucykKIHsKIAlSZWxPcHRJbmZvICp0YXJnZXRw YXJ0ID0gTlVMTDsKQEAgLTUzOSw4ICs3MzQsOCBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5l aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkgKiBwcnVu aW5nIHN0ZXBzIGFuZCBkZXRlY3RzIHdoZXRoZXIgdGhlcmUncyBhbnkgcG9zc2libHktdXNlZnVs IHF1YWxzCiAJCSAqIHRoYXQgd291bGQgcmVxdWlyZSBwZXItc2NhbiBwcnVuaW5nLgogCQkgKi8K LQkJZ2VuX3BhcnRwcnVuZV9zdGVwcyhzdWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBQQVJUVEFSR0VU X0lOSVRJQUwsCi0JCQkJCQkJJmNvbnRleHQpOworCQlnZW5fcGFydHBydW5lX3N0ZXBzKHN1YnBh cnQsIHBhcnRwcnVuZXF1YWwsIGF2YWlsYWJsZV9yZWxzLAorCQkJCQkJCVBBUlRUQVJHRVRfSU5J VElBTCwgJmNvbnRleHQpOwogCiAJCWlmIChjb250ZXh0LmNvbnRyYWRpY3RvcnkpCiAJCXsKQEAg LTU2NywxNCArNzYyLDE1IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQlpbml0aWFsX3BydW5pbmdfc3Rl cHMgPSBOSUw7CiAKIAkJLyoKLQkJICogSWYgbm8gZXhlYyBQYXJhbXMgYXBwZWFyIGluIHBvdGVu dGlhbGx5LXVzYWJsZSBwcnVuaW5nIGNsYXVzZXMsCi0JCSAqIHRoZW4gdGhlcmUncyBubyBwb2lu dCBpbiBldmVuIHRoaW5raW5nIGFib3V0IHBlci1zY2FuIHBydW5pbmcuCisJCSAqIElmIG5vIGV4 ZWMgUGFyYW1zIG9yIGF2YWlsYWJsZSBWYXJzIGFwcGVhciBpbiBwb3RlbnRpYWxseS11c2FibGUK KwkJICogcHJ1bmluZyBjbGF1c2VzLCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZXZlbiB0aGlu a2luZyBhYm91dAorCQkgKiBwZXItc2NhbiBwcnVuaW5nLgogCQkgKi8KLQkJaWYgKGNvbnRleHQu aGFzX2V4ZWNfcGFyYW0pCisJCWlmIChjb250ZXh0Lmhhc19leGVjX3BhcmFtIHx8IGNvbnRleHQu aGFzX3ZhcnMpCiAJCXsKIAkJCS8qIC4uLiBPSywgd2UnZCBiZXR0ZXIgdGhpbmsgYWJvdXQgaXQg Ki8KLQkJCWdlbl9wYXJ0cHJ1bmVfc3RlcHMoc3VicGFydCwgcGFydHBydW5lcXVhbCwgUEFSVFRB UkdFVF9FWEVDLAotCQkJCQkJCQkmY29udGV4dCk7CisJCQlnZW5fcGFydHBydW5lX3N0ZXBzKHN1 YnBhcnQsIHBhcnRwcnVuZXF1YWwsIGF2YWlsYWJsZV9yZWxzLAorCQkJCQkJCQlQQVJUVEFSR0VU X0VYRUMsICZjb250ZXh0KTsKIAogCQkJaWYgKGNvbnRleHQuY29udHJhZGljdG9yeSkKIAkJCXsK QEAgLTU4NywxMSArNzgzLDE0IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkvKgogCQkJICogRGV0ZWN0 IHdoaWNoIGV4ZWMgUGFyYW1zIGFjdHVhbGx5IGdvdCB1c2VkOyB0aGUgZmFjdCB0aGF0IHNvbWUK IAkJCSAqIHdlcmUgaW4gYXZhaWxhYmxlIGNsYXVzZXMgZG9lc24ndCBtZWFuIHdlIGFjdHVhbGx5 IHVzZWQgdGhlbS4KLQkJCSAqIFNraXAgcGVyLXNjYW4gcHJ1bmluZyBpZiB0aGVyZSBhcmUgbm9u ZS4KIAkJCSAqLwogCQkJZXhlY3BhcmFtaWRzID0gZ2V0X3BhcnRrZXlfZXhlY19wYXJhbWlkcyhl eGVjX3BydW5pbmdfc3RlcHMpOwogCi0JCQlpZiAoYm1zX2lzX2VtcHR5KGV4ZWNwYXJhbWlkcykp CisJCQkvKgorCQkJICogU2tpcCBwZXItc2NhbiBwcnVuaW5nIGlmIHRoZXJlIGFyZSBub25lIHVz ZWQgZXhlYyBQYXJhbXMgYW5kCisJCQkgKiB0aGVyZSBhcmUgbm9uZSBhdmFpbGFibGUgVmFycy4K KwkJCSAqLworCQkJaWYgKGJtc19pc19lbXB0eShleGVjcGFyYW1pZHMpICYmICFjb250ZXh0Lmhh c192YXJzKQogCQkJCWV4ZWNfcHJ1bmluZ19zdGVwcyA9IE5JTDsKIAkJfQogCQllbHNlCkBAIC03 MDMsNiArOTAyLDkgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKICAqCQlQcm9jZXNzICdjbGF1c2VzJyAodHlw aWNhbGx5IGEgcmVsJ3MgYmFzZXJlc3RyaWN0aW5mbyBsaXN0IG9mIGNsYXVzZXMpCiAgKgkJYW5k IGNyZWF0ZSBhIGxpc3Qgb2YgInBhcnRpdGlvbiBwcnVuaW5nIHN0ZXBzIi4KICAqCisgKiAnYXZh aWxhYmxlX3JlbHMnIGlzIHRoZSByZWxpZCBzZXQgb2YgcmVscyB3aG9zZSBWYXJzIG1heSBiZSB1 c2VkIGZvcgorICogcHJ1bmluZy4KKyAqCiAgKiAndGFyZ2V0JyB0ZWxscyB3aGV0aGVyIHRvIGdl bmVyYXRlIHBydW5pbmcgc3RlcHMgZm9yIHBsYW5uaW5nICh1c2UKICAqIGltbXV0YWJsZSBjbGF1 c2VzIG9ubHkpLCBvciBmb3IgZXhlY3V0b3Igc3RhcnR1cCAodXNlIGFueSBhbGxvd2FibGUKICAq IGNsYXVzZSBleGNlcHQgb25lcyBjb250YWluaW5nIFBBUkFNX0VYRUMgUGFyYW1zKSwgb3IgZm9y IGV4ZWN1dG9yCkBAIC03MTIsMTIgKzkxNCwxMyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5l aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogICogc29tZSBz dWJzaWRpYXJ5IGZsYWdzOyBzZWUgdGhlIEdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4dCB0eXBl ZGVmLgogICovCiBzdGF0aWMgdm9pZAotZ2VuX3BhcnRwcnVuZV9zdGVwcyhSZWxPcHRJbmZvICpy ZWwsIExpc3QgKmNsYXVzZXMsIFBhcnRDbGF1c2VUYXJnZXQgdGFyZ2V0LAotCQkJCQlHZW5lcmF0 ZVBydW5pbmdTdGVwc0NvbnRleHQgKmNvbnRleHQpCitnZW5fcGFydHBydW5lX3N0ZXBzKFJlbE9w dEluZm8gKnJlbCwgTGlzdCAqY2xhdXNlcywgQml0bWFwc2V0ICphdmFpbGFibGVfcmVscywKKwkJ CQkJUGFydENsYXVzZVRhcmdldCB0YXJnZXQsIEdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4dCAq Y29udGV4dCkKIHsKIAkvKiBJbml0aWFsaXplIGFsbCBvdXRwdXQgdmFsdWVzIHRvIHplcm8vZmFs c2UvTlVMTCAqLwogCW1lbXNldChjb250ZXh0LCAwLCBzaXplb2YoR2VuZXJhdGVQcnVuaW5nU3Rl cHNDb250ZXh0KSk7CiAJY29udGV4dC0+cmVsID0gcmVsOworCWNvbnRleHQtPmF2YWlsYWJsZV9y ZWxzID0gYXZhaWxhYmxlX3JlbHM7CiAJY29udGV4dC0+dGFyZ2V0ID0gdGFyZ2V0OwogCiAJLyoK QEAgLTc3Myw3ICs5NzYsNyBAQCBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMoUmVsT3B0SW5m byAqcmVsKQogCSAqIElmIHRoZSBjbGF1c2VzIGFyZSBmb3VuZCB0byBiZSBjb250cmFkaWN0b3J5 LCB3ZSBjYW4gcmV0dXJuIHRoZSBlbXB0eQogCSAqIHNldC4KIAkgKi8KLQlnZW5fcGFydHBydW5l X3N0ZXBzKHJlbCwgY2xhdXNlcywgUEFSVFRBUkdFVF9QTEFOTkVSLAorCWdlbl9wYXJ0cHJ1bmVf c3RlcHMocmVsLCBjbGF1c2VzLCBOVUxMLCBQQVJUVEFSR0VUX1BMQU5ORVIsCiAJCQkJCQkmZ2Nv bnRleHQpOwogCWlmIChnY29udGV4dC5jb250cmFkaWN0b3J5KQogCQlyZXR1cm4gTlVMTDsKQEAg LTE5NTcsOSArMjE2MCwxMCBAQCBtYXRjaF9jbGF1c2VfdG9fcGFydGl0aW9uX2tleShHZW5lcmF0 ZVBydW5pbmdTdGVwc0NvbnRleHQgKmNvbnRleHQsCiAJCQkJcmV0dXJuIFBBUlRDTEFVU0VfVU5T VVBQT1JURUQ7CiAKIAkJCS8qCi0JCQkgKiBXZSBjYW4gbmV2ZXIgcHJ1bmUgdXNpbmcgYW4gZXhw cmVzc2lvbiB0aGF0IGNvbnRhaW5zIFZhcnMuCisJCQkgKiBXZSBjYW4gbmV2ZXIgcHJ1bmUgdXNp bmcgYW4gZXhwcmVzc2lvbiB0aGF0IGNvbnRhaW5zIFZhcnMgZXhjZXB0CisJCQkgKiBmb3IgVmFy cyBiZWxvbmdpbmcgdG8gY29udGV4dC0+YXZhaWxhYmxlX3JlbHMuCiAJCQkgKi8KLQkJCWlmIChj b250YWluX3Zhcl9jbGF1c2UoKE5vZGUgKikgZXhwcikpCisJCQlpZiAoY29udGFpbl9mb3JiaWRk ZW5fdmFyX2NsYXVzZSgoTm9kZSAqKSBleHByLCBjb250ZXh0KSkKIAkJCQlyZXR1cm4gUEFSVENM QVVTRV9VTlNVUFBPUlRFRDsKIAogCQkJLyoKQEAgLTIxNTUsOSArMjM1OSwxMCBAQCBtYXRjaF9j bGF1c2VfdG9fcGFydGl0aW9uX2tleShHZW5lcmF0ZVBydW5pbmdTdGVwc0NvbnRleHQgKmNvbnRl eHQsCiAJCQkJcmV0dXJuIFBBUlRDTEFVU0VfVU5TVVBQT1JURUQ7CiAKIAkJCS8qCi0JCQkgKiBX ZSBjYW4gbmV2ZXIgcHJ1bmUgdXNpbmcgYW4gZXhwcmVzc2lvbiB0aGF0IGNvbnRhaW5zIFZhcnMu CisJCQkgKiBXZSBjYW4gbmV2ZXIgcHJ1bmUgdXNpbmcgYW4gZXhwcmVzc2lvbiB0aGF0IGNvbnRh aW5zIFZhcnMgZXhjZXB0CisJCQkgKiBmb3IgVmFycyBiZWxvbmdpbmcgdG8gY29udGV4dC0+YXZh aWxhYmxlX3JlbHMuCiAJCQkgKi8KLQkJCWlmIChjb250YWluX3Zhcl9jbGF1c2UoKE5vZGUgKikg cmlnaHRvcCkpCisJCQlpZiAoY29udGFpbl9mb3JiaWRkZW5fdmFyX2NsYXVzZSgoTm9kZSAqKSBy aWdodG9wLCBjb250ZXh0KSkKIAkJCQlyZXR1cm4gUEFSVENMQVVTRV9VTlNVUFBPUlRFRDsKIAog CQkJLyoKQEAgLTM3MjcsMyArMzkzMiw1NCBAQCBwYXJ0a2V5X2RhdHVtX2Zyb21fZXhwcihQYXJ0 aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAJCSp2YWx1ZSA9IEV4ZWNFdmFsRXhwclN3aXRj aENvbnRleHQoZXhwcnN0YXRlLCBlY3R4LCBpc251bGwpOwogCX0KIH0KKworLyoKKyAqIGNvbnRh aW5fZm9yYmlkZGVuX3Zhcl9jbGF1c2UKKyAqCSAgUmVjdXJzaXZlbHkgc2NhbiBhIGNsYXVzZSB0 byBkaXNjb3ZlciB3aGV0aGVyIGl0IGNvbnRhaW5zIGFueSBWYXIgbm9kZXMKKyAqCSAgKG9mIHRo ZSBjdXJyZW50IHF1ZXJ5IGxldmVsKSB0aGF0IGRvIG5vdCBiZWxvbmcgdG8gcmVsYXRpb25zIGlu CisgKgkgIGNvbnRleHQtPmF2YWlsYWJsZV9yZWxzLgorICoKKyAqCSAgUmV0dXJucyB0cnVlIGlm IGFueSBzdWNoIHZhcm5vZGUgZm91bmQuCisgKgorICogRG9lcyBub3QgZXhhbWluZSBzdWJxdWVy aWVzLCB0aGVyZWZvcmUgbXVzdCBvbmx5IGJlIHVzZWQgYWZ0ZXIgcmVkdWN0aW9uCisgKiBvZiBz dWJsaW5rcyB0byBzdWJwbGFucyEKKyAqLworc3RhdGljIGJvb2wKK2NvbnRhaW5fZm9yYmlkZGVu X3Zhcl9jbGF1c2UoTm9kZSAqbm9kZSwgR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250 ZXh0KQoreworCXJldHVybiBjb250YWluX2ZvcmJpZGRlbl92YXJfY2xhdXNlX3dhbGtlcihub2Rl LCBjb250ZXh0KTsKK30KKworc3RhdGljIGJvb2wKK2NvbnRhaW5fZm9yYmlkZGVuX3Zhcl9jbGF1 c2Vfd2Fsa2VyKE5vZGUgKm5vZGUsIEdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4dCAqY29udGV4 dCkKK3sKKwlpZiAobm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKElzQShub2Rl LCBWYXIpKQorCXsKKwkJVmFyCQkqdmFyID0gKFZhciAqKSBub2RlOworCisJCWlmICh2YXItPnZh cmxldmVsc3VwICE9IDApCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJaWYgKCFibXNfaXNfbWVtYmVy KHZhci0+dmFybm8sIGNvbnRleHQtPmF2YWlsYWJsZV9yZWxzKSkKKwkJCXJldHVybiB0cnVlOwkJ LyogYWJvcnQgdGhlIHRyZWUgdHJhdmVyc2FsIGFuZCByZXR1cm4gdHJ1ZSAqLworCisJCWNvbnRl eHQtPmhhc192YXJzID0gdHJ1ZTsKKworCQlpZiAoY29udGV4dC0+dGFyZ2V0ICE9IFBBUlRUQVJH RVRfRVhFQykKKwkJCXJldHVybiB0cnVlOwkJLyogYWJvcnQgdGhlIHRyZWUgdHJhdmVyc2FsIGFu ZCByZXR1cm4gdHJ1ZSAqLworCisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKElzQShub2RlLCBD dXJyZW50T2ZFeHByKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKElzQShub2RlLCBQbGFjZUhvbGRl clZhcikpCisJeworCQlpZiAoKChQbGFjZUhvbGRlclZhciAqKSBub2RlKS0+cGhsZXZlbHN1cCA9 PSAwKQorCQkJcmV0dXJuIHRydWU7CQkvKiBhYm9ydCB0aGUgdHJlZSB0cmF2ZXJzYWwgYW5kIHJl dHVybiB0cnVlICovCisJCS8qIGVsc2UgZmFsbCB0aHJvdWdoIHRvIGNoZWNrIHRoZSBjb250YWlu ZWQgZXhwciAqLworCX0KKwlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBjb250 YWluX2ZvcmJpZGRlbl92YXJfY2xhdXNlX3dhbGtlciwKKwkJCQkJCQkJICAodm9pZCAqKSBjb250 ZXh0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAppbmRleCAxNWVjODY5YWM4 Li43MjBiY2MxMTQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0 aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCkBAIC0xMjEs MTEgKzEyMSwyNiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlCiAJUGFydGl0 aW9uUHJ1bmluZ0RhdGEgKnBhcnRwcnVuZWRhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0g UGFydGl0aW9uUHJ1bmVTdGF0ZTsKIAorLyoKKyAqIEpvaW5QYXJ0aXRpb25QcnVuZVN0YXRlIC0g U3RhdGUgb2JqZWN0IHJlcXVpcmVkIGZvciBwbGFuIG5vZGVzIHRvIHBlcmZvcm0KKyAqIGpvaW4g cGFydGl0aW9uIHBydW5pbmcuCisgKi8KK3R5cGVkZWYgc3RydWN0IEpvaW5QYXJ0aXRpb25QcnVu ZVN0YXRlCit7CisJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcGFydF9wcnVuZV9zdGF0ZTsKKwlpbnQJ CQlwYXJhbWlkOworCWludAkJCW5wbGFuczsKKwlib29sCQlmaW5pc2hlZDsKKwlCaXRtYXBzZXQg ICpwYXJ0X3BydW5lX3Jlc3VsdDsKK30gSm9pblBhcnRpdGlvblBydW5lU3RhdGU7CisKIGV4dGVy biBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRl ICpwbGFuc3RhdGUsCiAJCQkJCQkJCQkJCQkJIGludCBuX3RvdGFsX3N1YnBsYW5zLAogCQkJCQkJ CQkJCQkJCSBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbywKIAkJCQkJCQkJCQkJCQkgQml0 bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKK2V4dGVybiBMaXN0ICpFeGVjSW5p dEpvaW5wYXJ0cHJ1bmVMaXN0KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICpqb2lucGFydHBy dW5lX2luZm9fbGlzdCk7CiBleHRlcm4gQml0bWFwc2V0ICpFeGVjRmluZE1hdGNoaW5nU3ViUGxh bnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkgICBib29sIGlu aXRpYWxfcHJ1bmUpOworCQkJCQkJCQkJCSAgIGJvb2wgaW5pdGlhbF9wcnVuZSwKKwkJCQkJCQkJ CQkgICBQbGFuU3RhdGUgKnBsYW5zdGF0ZSk7CiAKICNlbmRpZgkJCQkJCQkvKiBFWEVDUEFSVElU SU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggNWQ3ZjE3ZGVlMC4uMGFlYWZjYWJmZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTI2NzgsNiArMjY3OCw5IEBAIHR5cGVkZWYgc3RydWN0 IEhhc2hTdGF0ZQogCiAJLyogUGFyYWxsZWwgaGFzaCBzdGF0ZS4gKi8KIAlzdHJ1Y3QgUGFyYWxs ZWxIYXNoSm9pblN0YXRlICpwYXJhbGxlbF9zdGF0ZTsKKworCS8qIEluZm9zIGZvciBqb2luIHBh cnRpdGlvbiBwcnVuaW5nLiAqLworCUxpc3QgKmpvaW5wYXJ0cHJ1bmVfc3RhdGVfbGlzdDsKIH0g SGFzaFN0YXRlOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4 IGVkODVkYzc0MTQuLmQwNjZiNjEwNWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC01MzAsNiAr NTMwLDkgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJLyogbm90LXlldC1hc3NpZ25lZCBOZXN0TG9v cFBhcmFtcyAqLwogCUxpc3QJICAgKmN1ck91dGVyUGFyYW1zOwogCisJLyogYSBzdGFjayBvZiBK b2luUGFydGl0aW9uUHJ1bmVJbmZvcyAqLworCUxpc3QJICAgKmpvaW5fcGFydGl0aW9uX3BydW5l X2NhbmRpZGF0ZXM7CisKIAkvKgogCSAqIFRoZXNlIGZpZWxkcyBhcmUgd29ya3NwYWNlIGZvciBz ZXRyZWZzLmMuICBFYWNoIGlzIGFuIGFycmF5CiAJICogY29ycmVzcG9uZGluZyB0byBnbG9iLT5z dWJwbGFucy4gIChXZSBjb3VsZCBwcm9iYWJseSB0ZWFjaApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRl eCAyNGQ0NmM3NmRjLi4wMDA1OGE3MzVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMjc2LDYg KzI3Niw5IEBAIHR5cGVkZWYgc3RydWN0IEFwcGVuZAogCiAJLyogSW5mbyBmb3IgcnVuLXRpbWUg c3VicGxhbiBwcnVuaW5nOyBOVUxMIGlmIHdlJ3JlIG5vdCBkb2luZyB0aGF0ICovCiAJc3RydWN0 IFBhcnRpdGlvblBydW5lSW5mbyAqcGFydF9wcnVuZV9pbmZvOworCisJLyogSW5mbyBmb3Igam9p biBwYXJ0aXRpb24gcHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcgdGhhdCAqLworCUJp dG1hcHNldCAgKmpvaW5fcHJ1bmVfcGFyYW1pZHM7CiB9IEFwcGVuZDsKIAogLyogLS0tLS0tLS0t LS0tLS0tLQpAQCAtMzExLDYgKzMxNCw5IEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiAK IAkvKiBJbmZvIGZvciBydW4tdGltZSBzdWJwbGFuIHBydW5pbmc7IE5VTEwgaWYgd2UncmUgbm90 IGRvaW5nIHRoYXQgKi8KIAlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0X3BydW5lX2lu Zm87CisKKwkvKiBJbmZvIGZvciBqb2luIHBhcnRpdGlvbiBwcnVuaW5nOyBOVUxMIGlmIHdlJ3Jl IG5vdCBkb2luZyB0aGF0ICovCisJQml0bWFwc2V0ICAqam9pbl9wcnVuZV9wYXJhbWlkczsKIH0g TWVyZ2VBcHBlbmQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyMDcsNiArMTIxMyw3IEBA IHR5cGVkZWYgc3RydWN0IEhhc2gKIAlib29sCQlza2V3SW5oZXJpdDsJLyogaXMgb3V0ZXIgam9p biByZWwgYW4gaW5oZXJpdGFuY2UgdHJlZT8gKi8KIAkvKiBhbGwgb3RoZXIgaW5mbyBpcyBpbiB0 aGUgcGFyZW50IEhhc2hKb2luIG5vZGUgKi8KIAlDYXJkaW5hbGl0eSByb3dzX3RvdGFsOwkJLyog ZXN0aW1hdGUgdG90YWwgcm93cyBpZiBwYXJhbGxlbF9hd2FyZSAqLworCUxpc3QJICAgKmpvaW5w YXJ0cHJ1bmVfaW5mb19saXN0OwkvKiBpbmZvcyBmb3Igam9pbiBwYXJ0aXRpb24gcHJ1bmluZyAq LwogfSBIYXNoOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTUzLDYgKzE1NjAsMzUgQEAg dHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGVwQ29tYmluZQogCUxpc3QJICAgKnNvdXJj ZV9zdGVwaWRzOwogfSBQYXJ0aXRpb25QcnVuZVN0ZXBDb21iaW5lOwogCisvKgorICogSm9pblBh cnRpdGlvblBydW5lQ2FuZGlkYXRlSW5mbyAtIEluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGJ1aWxk CisgKiBKb2luUGFydGl0aW9uUHJ1bmVJbmZvcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSm9pblBh cnRpdGlvblBydW5lQ2FuZGlkYXRlSW5mbworeworCXBnX25vZGVfYXR0cihub19lcXVhbCwgbm9f cXVlcnlfanVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKwlMaXN0CSAgICpqb2lucmVzdHJpY3Rp bmZvOworCUJpdG1hcHNldCAgKmlubmVyX3JlbGlkczsKKwlkb3VibGUJCWlubmVyX3Jvd3M7CisJ TGlzdAkgICAqam9pbnBhcnRwcnVuZV9pbmZvX2xpc3Q7Cit9IEpvaW5QYXJ0aXRpb25QcnVuZUNh bmRpZGF0ZUluZm87CisKKy8qCisgKiBKb2luUGFydGl0aW9uUHJ1bmVJbmZvIC0gRGV0YWlscyBy ZXF1aXJlZCB0byBhbGxvdyB0aGUgZXhlY3V0b3IgdG8gcHJ1bmUKKyAqIHBhcnRpdGlvbnMgZHVy aW5nIGpvaW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IEpvaW5QYXJ0aXRpb25QcnVuZUluZm8KK3sK KwlwZ19ub2RlX2F0dHIobm9fZXF1YWwsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5 cGU7CisJUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0X3BydW5lX2luZm87CisJaW50CQkJcGFyYW1p ZDsKKwlpbnQJCQlucGxhbnM7Cit9IEpvaW5QYXJ0aXRpb25QcnVuZUluZm87CisKIAogLyoKICAq IFBsYW4gaW52YWxpZGF0aW9uIGluZm8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXpl ci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4IDZkNTBhZmJmNzQu LjUyZGU4NDRmNmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysr IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtMjExLDUgKzIxMSw5IEBAIGV4dGVy biB2b2lkIHNldF9mb3JlaWduX3NpemVfZXN0aW1hdGVzKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwpOwogZXh0ZXJuIFBhdGhUYXJnZXQgKnNldF9wYXRodGFyZ2V0X2Nvc3Rfd2lk dGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGhUYXJnZXQgKnRhcmdldCk7CiBleHRlcm4gZG91Ymxl IGNvbXB1dGVfYml0bWFwX3BhZ2VzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNl cmVsLAogCQkJCQkJCQkgICBQYXRoICpiaXRtYXBxdWFsLCBpbnQgbG9vcF9jb3VudCwgQ29zdCAq Y29zdCwgZG91YmxlICp0dXBsZSk7CitleHRlcm4gZG91YmxlIGNvbXB1dGVfcGFydHBydW5lX2Nv c3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmFwcGVuZHJlbCwKKwkJCQkJCQkJCSBD b3N0IGFwcGVuZF90b3RhbF9jb3N0LCBpbnQgYXBwZW5kX25wbGFucywKKwkJCQkJCQkJCSBSZWxp ZHMgaW5uZXJfcmVsaWRzLCBkb3VibGUgaW5uZXJfcm93cywKKwkJCQkJCQkJCSBMaXN0ICpwcnVu ZXF1YWwpOwogCiAjZW5kaWYJCQkJCQkJLyogQ09TVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmggYi9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcv cGFydHBydW5lLmgKaW5kZXggODYzNmUwNGUzNy4uODk5YWE2MWIzNCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuaApAQCAtMTksNiArMTksOCBAQAogCiBzdHJ1Y3QgUGxhbm5lcklu Zm87CQkJCS8qIGF2b2lkIGluY2x1ZGluZyBwYXRobm9kZXMuaCBoZXJlICovCiBzdHJ1Y3QgUmVs T3B0SW5mbzsKK3N0cnVjdCBQYXRoOworc3RydWN0IEpvaW5QYXRoOwogCiAKIC8qCkBAIC03Myw3 ICs3NSwxNSBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUNvbnRleHQKIGV4dGVybiBQ YXJ0aXRpb25QcnVuZUluZm8gKm1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhzdHJ1Y3QgUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkJc3RydWN0IFJlbE9wdEluZm8gKnBhcmVudHJlbCwK IAkJCQkJCQkJCQkJCQlMaXN0ICpzdWJwYXRocywKLQkJCQkJCQkJCQkJCQlMaXN0ICpwcnVuZXF1 YWwpOworCQkJCQkJCQkJCQkJCUxpc3QgKnBydW5lcXVhbCwKKwkJCQkJCQkJCQkJCQlCaXRtYXBz ZXQgKmF2YWlsYWJsZV9yZWxzKTsKK2V4dGVybiBCaXRtYXBzZXQgKm1ha2Vfam9pbl9wYXJ0aXRp b25fcHJ1bmVpbmZvcyhzdHJ1Y3QgUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCQkgc3Ry dWN0IFJlbE9wdEluZm8gKnBhcmVudHJlbCwKKwkJCQkJCQkJCQkJCSBzdHJ1Y3QgUGF0aCAqYmVz dF9wYXRoLAorCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzKTsKK2V4dGVybiB2b2lkIHByZXBh cmVfam9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlKHN0cnVjdCBQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJCQkJCQkJCSAgIHN0cnVjdCBKb2luUGF0aCAqanBhdGgpOworZXh0ZXJuIExpc3Qg KmdldF9qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGUoc3RydWN0IFBsYW5uZXJJbmZvICpy b290KTsKIGV4dGVybiBCaXRtYXBzZXQgKnBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucyhzdHJ1 Y3QgUmVsT3B0SW5mbyAqcmVsKTsKIGV4dGVybiBCaXRtYXBzZXQgKmdldF9tYXRjaGluZ19wYXJ0 aXRpb25zKFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkgIExpc3Qg KnBydW5pbmdfc3RlcHMpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w YXJ0aXRpb25fcHJ1bmUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25f cHJ1bmUub3V0CmluZGV4IDlhNGM0OGMwNTUuLmEwOGU3YTFmMGEgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKQEAgLTMwMDMsNiArMzAwMyw5MiBA QCBvcmRlciBieSB0YmwxLmNvbDEsIHRwcnQuY29sMTsKIC0tLS0tLSstLS0tLS0KICgwIHJvd3Mp CiAKKy0tIGpvaW4gcGFydGl0aW9uIHBydW5pbmcKKy0tIFRoZSAnTWVtb3J5IFVzYWdlJyBmcm9t IHRoZSBIYXNoIG5vZGUgY2FuIHZhcnkgYmV0d2VlbiBtYWNoaW5lcy4gIExldCdzIGp1c3QKKy0t IHJlcGxhY2UgdGhlIG51bWJlciB3aXRoIGFuICdOJy4KKy0tIFdlIG5lZWQgdG8gcnVuIEVYUExB SU4gQU5BTFlaRSBiZWNhdXNlIHdlIG5lZWQgdG8gc2VlICcobmV2ZXIgZXhlY3V0ZWQpJworLS0g bm90YXRpb25zIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IHdheSB0byB2ZXJpZnkgcnVudGltZSBw cnVuaW5nLgorY3JlYXRlIGZ1bmN0aW9uIGV4cGxhaW5fam9pbl9wYXJ0aXRpb25fcHJ1bmluZyh0 ZXh0KSByZXR1cm5zIHNldG9mIHRleHQKK2xhbmd1YWdlIHBscGdzcWwgYXMKKyQkCitkZWNsYXJl CisgICAgbG4gdGV4dDsKK2JlZ2luCisgICAgZm9yIGxuIGluCisgICAgICAgIGV4ZWN1dGUgZm9y bWF0KCdleHBsYWluIChhbmFseXplLCB2ZXJib3NlLCBjb3N0cyBvZmYsIHN1bW1hcnkgb2ZmLCB0 aW1pbmcgb2ZmKSAlcycsCisgICAgICAgICAgICAkMSkKKyAgICBsb29wCisgICAgICAgIGxuIDo9 IHJlZ2V4cF9yZXBsYWNlKGxuLCAnTWVtb3J5IFVzYWdlOiBcZCsnLCAnTWVtb3J5IFVzYWdlOiBO Jyk7CisgICAgICAgIHJldHVybiBuZXh0IGxuOworICAgIGVuZCBsb29wOworZW5kOworJCQ7Citk ZWxldGUgZnJvbSB0YmwxOworaW5zZXJ0IGludG8gdGJsMSB2YWx1ZXMgKDUwMSksICg1MDUpOwor YW5hbHl6ZSB0YmwxLCB0cHJ0Oworc2V0IGVuYWJsZV9uZXN0bG9vcCA9IG9mZjsKK3NldCBlbmFi bGVfbWVyZ2Vqb2luID0gb2ZmOworc2V0IGVuYWJsZV9oYXNoam9pbiA9IG9uOworc2VsZWN0IGV4 cGxhaW5fam9pbl9wYXJ0aXRpb25fcHJ1bmluZygnCitzZWxlY3QgKiBmcm9tIHRwcnQgcDEKKyAg IGlubmVyIGpvaW4gdHBydCBwMiBvbiBwMS5jb2wxID0gcDIuY29sMQorICAgcmlnaHQgam9pbiB0 YmwxIHQgb24gcDEuY29sMSA9IHQuY29sMSBhbmQgcDIuY29sMSA9IHQuY29sMTsnKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICBleHBsYWluX2pvaW5fcGFydGl0aW9uX3BydW5pbmcgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggUmlnaHQg Sm9pbiAoYWN0dWFsIHJvd3M9MiBsb29wcz0xKQorICAgT3V0cHV0OiBwMS5jb2wxLCBwMi5jb2wx LCB0LmNvbDEKKyAgIEhhc2ggQ29uZDogKChwMS5jb2wxID0gdC5jb2wxKSBBTkQgKHAyLmNvbDEg PSB0LmNvbDEpKQorICAgLT4gIEhhc2ggSm9pbiAoYWN0dWFsIHJvd3M9MyBsb29wcz0xKQorICAg ICAgICAgT3V0cHV0OiBwMS5jb2wxLCBwMi5jb2wxCisgICAgICAgICBIYXNoIENvbmQ6IChwMS5j b2wxID0gcDIuY29sMSkKKyAgICAgICAgIC0+ICBBcHBlbmQgKGFjdHVhbCByb3dzPTMgbG9vcHM9 MSkKKyAgICAgICAgICAgICAgIEpvaW4gUGFydGl0aW9uIFBydW5pbmc6ICQwCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnRwcnRfMSBwMV8xIChuZXZlciBleGVjdXRlZCkK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogcDFfMS5jb2wxCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLnRwcnRfMiBwMV8yIChhY3R1YWwgcm93cz0zIGxvb3BzPTEp CisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAxXzIuY29sMQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzMgcDFfMyAobmV2ZXIgZXhlY3V0ZWQpCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAxXzMuY29sMQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy50cHJ0XzQgcDFfNCAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHAxXzQuY29sMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy50cHJ0XzUgcDFfNSAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHAxXzUuY29sMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy50cHJ0XzYgcDFfNiAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHAxXzYuY29sMQorICAgICAgICAgLT4gIEhhc2ggKGFjdHVhbCByb3dzPTMgbG9vcHM9 MSkKKyAgICAgICAgICAgICAgIE91dHB1dDogcDIuY29sMQorICAgICAgICAgICAgICAgQnVja2V0 czogMTAyNCAgQmF0Y2hlczogMSAgTWVtb3J5IFVzYWdlOiBOa0IKKyAgICAgICAgICAgICAgIC0+ ICBBcHBlbmQgKGFjdHVhbCByb3dzPTMgbG9vcHM9MSkKKyAgICAgICAgICAgICAgICAgICAgIEpv aW4gUGFydGl0aW9uIFBydW5pbmc6ICQxCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLnRwcnRfMSBwMl8xIChuZXZlciBleGVjdXRlZCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogcDJfMS5jb2wxCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLnRwcnRfMiBwMl8yIChhY3R1YWwgcm93cz0zIGxvb3BzPTEpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAyXzIuY29sMQorICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzMgcDJfMyAobmV2ZXIgZXhlY3V0 ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAyXzMuY29sMQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzQgcDJfNCAobmV2ZXIg ZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAyXzQuY29sMQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzUgcDJfNSAo bmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAyXzUu Y29sMQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzYg cDJfNiAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHAyXzYuY29sMQorICAgLT4gIEhhc2ggKGFjdHVhbCByb3dzPTIgbG9vcHM9MSkKKyAgICAgICAg IE91dHB1dDogdC5jb2wxCisgICAgICAgICBCdWNrZXRzOiAxMDI0ICBCYXRjaGVzOiAxICBNZW1v cnkgVXNhZ2U6IE5rQgorICAgICAgICAgUGFydGl0aW9uIFBydW5lOiAkMCwgJDEKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMudGJsMSB0IChhY3R1YWwgcm93cz0yIGxvb3BzPTEpCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQuY29sMQorKDQzIHJvd3MpCisKK3NlbGVjdCAqIGZyb20g dHBydCBwMQorICAgaW5uZXIgam9pbiB0cHJ0IHAyIG9uIHAxLmNvbDEgPSBwMi5jb2wxCisgICBy aWdodCBqb2luIHRibDEgdCBvbiBwMS5jb2wxID0gdC5jb2wxIGFuZCBwMi5jb2wxID0gdC5jb2wx OworIGNvbDEgfCBjb2wxIHwgY29sMSAKKy0tLS0tLSstLS0tLS0rLS0tLS0tCisgIDUwMSB8ICA1 MDEgfCAgNTAxCisgIDUwNSB8ICA1MDUgfCAgNTA1CisoMiByb3dzKQorCiBkcm9wIHRhYmxlIHRi bDEsIHRwcnQ7CiAtLSBUZXN0IHdpdGggY29sdW1ucyBkZWZpbmVkIGluIHZhcnlpbmcgb3JkZXJz IGJldHdlZW4gZWFjaCBsZXZlbAogY3JlYXRlIHRhYmxlIHBhcnRfYWJjIChhIGludCBub3QgbnVs bCwgYiBpbnQgbm90IG51bGwsIGMgaW50IG5vdCBudWxsKSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbAppbmRleCA3YmYzOTIwODI3 Li5mYzU5ODJlZGNmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25f cHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwK QEAgLTcyNyw2ICs3MjcsNDUgQEAgc2VsZWN0IHRibDEuY29sMSwgdHBydC5jb2wxIGZyb20gdGJs MQogaW5uZXIgam9pbiB0cHJ0IG9uIHRibDEuY29sMSA9IHRwcnQuY29sMQogb3JkZXIgYnkgdGJs MS5jb2wxLCB0cHJ0LmNvbDE7CiAKKy0tIGpvaW4gcGFydGl0aW9uIHBydW5pbmcKKworLS0gVGhl ICdNZW1vcnkgVXNhZ2UnIGZyb20gdGhlIEhhc2ggbm9kZSBjYW4gdmFyeSBiZXR3ZWVuIG1hY2hp bmVzLiAgTGV0J3MganVzdAorLS0gcmVwbGFjZSB0aGUgbnVtYmVyIHdpdGggYW4gJ04nLgorLS0g V2UgbmVlZCB0byBydW4gRVhQTEFJTiBBTkFMWVpFIGJlY2F1c2Ugd2UgbmVlZCB0byBzZWUgJyhu ZXZlciBleGVjdXRlZCknCistLSBub3RhdGlvbnMgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkgd2F5 IHRvIHZlcmlmeSBydW50aW1lIHBydW5pbmcuCitjcmVhdGUgZnVuY3Rpb24gZXhwbGFpbl9qb2lu X3BhcnRpdGlvbl9wcnVuaW5nKHRleHQpIHJldHVybnMgc2V0b2YgdGV4dAorbGFuZ3VhZ2UgcGxw Z3NxbCBhcworJCQKK2RlY2xhcmUKKyAgICBsbiB0ZXh0OworYmVnaW4KKyAgICBmb3IgbG4gaW4K KyAgICAgICAgZXhlY3V0ZSBmb3JtYXQoJ2V4cGxhaW4gKGFuYWx5emUsIHZlcmJvc2UsIGNvc3Rz IG9mZiwgc3VtbWFyeSBvZmYsIHRpbWluZyBvZmYpICVzJywKKyAgICAgICAgICAgICQxKQorICAg IGxvb3AKKyAgICAgICAgbG4gOj0gcmVnZXhwX3JlcGxhY2UobG4sICdNZW1vcnkgVXNhZ2U6IFxk KycsICdNZW1vcnkgVXNhZ2U6IE4nKTsKKyAgICAgICAgcmV0dXJuIG5leHQgbG47CisgICAgZW5k IGxvb3A7CitlbmQ7CiskJDsKKworZGVsZXRlIGZyb20gdGJsMTsKK2luc2VydCBpbnRvIHRibDEg dmFsdWVzICg1MDEpLCAoNTA1KTsKK2FuYWx5emUgdGJsMSwgdHBydDsKKworc2V0IGVuYWJsZV9u ZXN0bG9vcCA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luID0gb2ZmOworc2V0IGVuYWJsZV9o YXNoam9pbiA9IG9uOworCitzZWxlY3QgZXhwbGFpbl9qb2luX3BhcnRpdGlvbl9wcnVuaW5nKCcK K3NlbGVjdCAqIGZyb20gdHBydCBwMQorICAgaW5uZXIgam9pbiB0cHJ0IHAyIG9uIHAxLmNvbDEg PSBwMi5jb2wxCisgICByaWdodCBqb2luIHRibDEgdCBvbiBwMS5jb2wxID0gdC5jb2wxIGFuZCBw Mi5jb2wxID0gdC5jb2wxOycpOworCitzZWxlY3QgKiBmcm9tIHRwcnQgcDEKKyAgIGlubmVyIGpv aW4gdHBydCBwMiBvbiBwMS5jb2wxID0gcDIuY29sMQorICAgcmlnaHQgam9pbiB0YmwxIHQgb24g cDEuY29sMSA9IHQuY29sMSBhbmQgcDIuY29sMSA9IHQuY29sMTsKKwogZHJvcCB0YWJsZSB0Ymwx LCB0cHJ0OwogCiAtLSBUZXN0IHdpdGggY29sdW1ucyBkZWZpbmVkIGluIHZhcnlpbmcgb3JkZXJz IGJldHdlZW4gZWFjaCBsZXZlbAotLSAKMi4zMS4wCgo= --00000000000040117506098b4b26--