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 1r8c3I-00AolD-3M for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Nov 2023 08:05: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 1r8c3G-00FfLj-Pc for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Nov 2023 08:05:38 +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 1r8c3G-00FfLb-9P for pgsql-hackers@lists.postgresql.org; Thu, 30 Nov 2023 08:05:38 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r8c3B-009JYw-He for pgsql-hackers@postgresql.org; Thu, 30 Nov 2023 08:05:37 +0000 Received: from [10.4.14.67] (unknown [93.174.131.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.rybakina@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id BCBAFE21019; Thu, 30 Nov 2023 11:05:32 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1701331532; bh=s3h4zsedeKK8YHV4EFXIG+5ZLDJdzMo8zuUOCqZFFxc=; h=Message-ID:Date:User-Agent:Subject:From:To:Cc:References: In-Reply-To:From; b=NjsqgJon6QYLK42y6+vH90IeDk0iFhKc22TED72N+rtAN6Ie56FrpJ2qISfPv3ymK EwBFSymyX+Ki7iS+t75ZsL5vE0gnBZEgQaDBnUA4n5Vlt8/dLdY6MotMpVpBry3TDe E68WF5J4u9WehQ0aQIevgjGst2mmNh03Fkg0rwgI+9KF7H8r1fZQfS72Ys3maxnk4C Qk6BI+frUIyLj2Nk4qhUhlidVlH7NnwY6gs7KZGKF3tqJ5v6Sv68LNTgsPALa6EXKd thp6ybu204QGbT4Lu8KahaQvaueezS2yTt51xsv51sj8H2s/1VdHzKkuYsiuvb8p7C 4Dw6DJtsPyrrQ== Content-Type: multipart/mixed; boundary="------------9SZRxFr0ADwUTxyN6XMyp2Nh" Message-ID: Date: Thu, 30 Nov 2023 11:05:31 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes Content-Language: en-US From: Alena Rybakina To: Andrei Lepikhov , Robert Haas , pgsql-hackers@postgresql.org, Alexander Korotkov Cc: Peter Geoghegan , "Finnerty, Jim" , Marcos Pegoraro , teodor@sigaev.ru, Ranier Vilela , Tomas Vondra , Peter Eisentraut References: <567ED6CA.2040504@sigaev.ru> <16a7e3aa-24c0-4986-8820-ea2857bd7b6b@postgrespro.ru> <421656a9-5df7-41bb-9d58-1c1edbd5dc3e@postgrespro.ru> <28c727ba-5260-42a8-88b0-4ecdeeca6ef8@postgrespro.ru> <4c1c2c0b-802f-45ae-a7cd-007bfd8957cf@postgrespro.ru> <52f0d302-7963-452f-8c5a-f66d261514eb@postgrespro.ru> <43ad8a48-b980-410d-a83c-5beebf82a4ed@postgrespro.ru> <04ef16eb-46c1-4ce7-9f68-d1c80ef0be81@postgrespro.ru> <59e67a40-95a8-4d74-ae4e-027ea0f59084@postgrespro.ru> In-Reply-To: <59e67a40-95a8-4d74-ae4e-027ea0f59084@postgrespro.ru> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------9SZRxFr0ADwUTxyN6XMyp2Nh Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sorry, I forgot to apply my patches. For the first experiment was 0001-OR-to-ANY-in-parser-and-ANY-to-OR-in-index.diff and for the second experiment was 0002-OR-to-ANY-in-index.diff. On 30.11.2023 11:00, Alena Rybakina wrote: > Hi! > >> >>> Honestly, it seems very hard to avoid the conclusion that this >>> transformation is being done at too early a stage. Parse analysis is >>> not the time to try to do query optimization. I can't really believe >>> that there's a way to produce a committable patch along these lines. >>> Ideally, a transformation like this should be done after we know what >>> plan shape we're using (or considering using), so that we can make >>> cost-based decisions about whether to transform or not. But at the >>> very least it should happen somewhere in the planner. There's really >>> no justification for parse analysis rewriting the SQL that the user >>> entered. >> >> Here, we assume that array operation is generally better than many ORs. >> As a result, it should be more effective to make OR->ANY >> transformation in the parser (it is a relatively lightweight >> operation here) and, as a second phase, decompose that in the optimizer. >> We implemented earlier prototypes in different places of the >> optimizer, and I'm convinced that only this approach resolves the >> issues we found. >> Does this approach look weird? Maybe. We can debate it in this thread. > > I think this is incorrect, and the example of A. Korotkov confirms > this. If we perform the conversion at the parsing stage, we will skip > the more important conversion using OR expressions. I'll show you in > the example below. > > First of all, I will describe my idea to combine two approaches to > obtaining plans with OR to ANY transformation and ANY to OR > transformation. I think they are both good, and we can't work with > just one of them, we should consider both the option of OR > expressions, and with ANY. > > I did this by creating a RelOptInfo with which has references from the > original RelOptInfo, for which conversion is possible either from > ANY->OR, or vice versa. After obtaining the necessary transformation, > I started the procedure for obtaining the seq and index paths for both > relations and then calculated their cost. The relation with the lowest > cost is considered the best. > > I'm not sure if this is the best approach, but it's less complicated. > > I noticed that I got a lower cost for not the best plan, but I think > this corresponds to another topic related to the wrong estimate > calculation. > > 1. The first patch is a mixture of the original patch (when we perform > the conversion of OR to ANY at the parsing stage), and when we perform > the conversion at the index creation stage with the conversion to an > OR expression. We can see that the query proposed by A.Korotkov did > not have the best plan with ANY expression at all, and even despite > receiving a query with OR expressions, we cannot get anything better > than SeqScan, due to the lack of effective logical transformations > that would have been performed if we had left the OR expressions. > > So, I got query plans using enable_or_transformation if it is enabled: > > postgres=# create table test as (select (random()*10)::int x, > (random()*1000) y > from generate_series(1,1000000) i); > create index test_x_1_y on test (y) where x = 1; > create index test_x_2_y on test (y) where x = 2; > vacuum analyze test; > SELECT 1000000 > CREATE INDEX > CREATE INDEX > VACUUM > postgres=# explain select * from test where (x = 1 or x = 2) and y = 100; > WARNING:  cost with original approach: - 20440.000000 > WARNING:  cost with OR to ANY applied transfomation: - 15440.000000 >                                 QUERY PLAN > -------------------------------------------------------------------------- > >  Gather  (cost=1000.00..12690.10 rows=1 width=12) >    Workers Planned: 2 >    ->  Parallel Seq Scan on test  (cost=0.00..11690.00 rows=1 width=12) >          Filter: (((x = 1) OR (x = 2)) AND (y = '100'::double precision)) > (4 rows) > > and if it is off: > > postgres=# set enable_or_transformation =off; > SET > postgres=# explain select * from test where (x = 1 or x = 2) and y = 100; >                                                   QUERY PLAN > -------------------------------------------------------------------------------------------------------------- > >  Bitmap Heap Scan on test  (cost=8.60..12.62 rows=1 width=12) >    Recheck Cond: (((y = '100'::double precision) AND (x = 1)) OR ((y = > '100'::double precision) AND (x = 2))) >    ->  BitmapOr  (cost=8.60..8.60 rows=1 width=0) >          ->  Bitmap Index Scan on test_x_1_y  (cost=0.00..4.30 rows=1 > width=0) >                Index Cond: (y = '100'::double precision) >          ->  Bitmap Index Scan on test_x_2_y  (cost=0.00..4.30 rows=1 > width=0) >                Index Cond: (y = '100'::double precision) > (7 rows) > > 2. The second patch is my patch version when I moved the OR > transformation in the s index formation stage: > > So, I got the best query plan despite the possible OR to ANY > transformation: > > postgres=# create table test as (select (random()*10)::int x, > (random()*1000) y > from generate_series(1,1000000) i); > create index test_x_1_y on test (y) where x = 1; > create index test_x_2_y on test (y) where x = 2; > vacuum analyze test; > SELECT 1000000 > CREATE INDEX > CREATE INDEX > VACUUM > postgres=# explain select * from test where (x = 1 or x = 2) and y = 100; > WARNING:  cost with original approach: - 12.618000 > WARNING:  cost with OR to ANY applied transfomation: - 15440.000000 >                                                   QUERY PLAN > -------------------------------------------------------------------------------------------------------------- > >  Bitmap Heap Scan on test  (cost=8.60..12.62 rows=1 width=12) >    Recheck Cond: (((y = '100'::double precision) AND (x = 1)) OR ((y = > '100'::double precision) AND (x = 2))) >    ->  BitmapOr  (cost=8.60..8.60 rows=1 width=0) >          ->  Bitmap Index Scan on test_x_1_y  (cost=0.00..4.30 rows=1 > width=0) >                Index Cond: (y = '100'::double precision) >          ->  Bitmap Index Scan on test_x_2_y  (cost=0.00..4.30 rows=1 > width=0) >                Index Cond: (y = '100'::double precision) > (7 rows) > > > -- Regards, Alena Rybakina Postgres Professional --------------9SZRxFr0ADwUTxyN6XMyp2Nh Content-Type: text/x-patch; charset=UTF-8; name="0001-OR-to-ANY-in-parser-and-ANY-to-OR-in-index.diff" Content-Disposition: attachment; filename="0001-OR-to-ANY-in-parser-and-ANY-to-OR-in-index.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zk dy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0 CmluZGV4IDBhNWJkZjhiY2MwLi45MzY4YWUxZDA1MiAxMDA2NDQKLS0tIGEvY29udHJpYi9w b3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bv c3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC04NTM3LDE4ICs4NTM3 LDE4IEBAIGluc2VydCBpbnRvIHV0cnRlc3QgdmFsdWVzICgyLCAncXV4Jyk7CiAtLSBDaGVj ayBjYXNlIHdoZXJlIHRoZSBmb3JlaWduIHBhcnRpdGlvbiBpcyBhIHN1YnBsYW4gdGFyZ2V0 IHJlbAogZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQogdXBkYXRlIHV0cnRlc3Qgc2V0 IGEgPSAxIHdoZXJlIGEgPSAxIG9yIGEgPSAyIHJldHVybmluZyAqOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgVXBkYXRlIG9uIHB1Ymxp Yy51dHJ0ZXN0CiAgICBPdXRwdXQ6IHV0cnRlc3RfMS5hLCB1dHJ0ZXN0XzEuYgogICAgRm9y ZWlnbiBVcGRhdGUgb24gcHVibGljLnJlbXAgdXRydGVzdF8xCiAgICBVcGRhdGUgb24gcHVi bGljLmxvY3AgdXRydGVzdF8yCiAgICAtPiAgQXBwZW5kCiAgICAgICAgICAtPiAgRm9yZWln biBVcGRhdGUgb24gcHVibGljLnJlbXAgdXRydGVzdF8xCi0gICAgICAgICAgICAgICBSZW1v dGUgU1FMOiBVUERBVEUgcHVibGljLmxvY3QgU0VUIGEgPSAxIFdIRVJFICgoKGEgPSAxKSBP UiAoYSA9IDIpKSkgUkVUVVJOSU5HIGEsIGIKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6 IFVQREFURSBwdWJsaWMubG9jdCBTRVQgYSA9IDEgV0hFUkUgKChhID0gQU5ZICgnezEsMn0n OjppbnRlZ2VyW10pKSkgUkVUVVJOSU5HIGEsIGIKICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMubG9jcCB1dHJ0ZXN0XzIKICAgICAgICAgICAgICAgIE91dHB1dDogMSwgdXRy dGVzdF8yLnRhYmxlb2lkLCB1dHJ0ZXN0XzIuY3RpZCwgTlVMTDo6cmVjb3JkCi0gICAgICAg ICAgICAgICBGaWx0ZXI6ICgodXRydGVzdF8yLmEgPSAxKSBPUiAodXRydGVzdF8yLmEgPSAy KSkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHV0cnRlc3RfMi5hID0gQU5ZICgnezEsMn0n OjppbnRlZ2VyW10pKQogKDEwIHJvd3MpCiAKIC0tIFRoZSBuZXcgdmFsdWVzIGFyZSBjb25j YXRlbmF0ZWQgd2l0aCAnIHRyaWdnZXJlZCAhJwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1i bGVmdW5jcy5jCmluZGV4IDI4MTkwN2E0ZDgzLi45OTIwN2E4NjcwZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYwpAQCAtMTM1LDYgKzEzNSwzNiBAQCBKdW1ibGVR dWVyeShRdWVyeSAqcXVlcnkpCiAJcmV0dXJuIGpzdGF0ZTsKIH0KIAorSnVtYmxlU3RhdGUg KgorSnVtYmxlRXhwcihFeHByICpleHByLCB1aW50NjQgKnF1ZXJ5SWQpCit7CisJSnVtYmxl U3RhdGUgKmpzdGF0ZSA9IE5VTEw7CisKKwlBc3NlcnQocXVlcnlJZCAhPSBOVUxMKTsKKwor CWpzdGF0ZSA9IChKdW1ibGVTdGF0ZSAqKSBwYWxsb2Moc2l6ZW9mKEp1bWJsZVN0YXRlKSk7 CisKKwkvKiBTZXQgdXAgd29ya3NwYWNlIGZvciBxdWVyeSBqdW1ibGluZyAqLworCWpzdGF0 ZS0+anVtYmxlID0gKHVuc2lnbmVkIGNoYXIgKikgcGFsbG9jKEpVTUJMRV9TSVpFKTsKKwlq c3RhdGUtPmp1bWJsZV9sZW4gPSAwOworCWpzdGF0ZS0+Y2xvY2F0aW9uc19idWZfc2l6ZSA9 IDMyOworCWpzdGF0ZS0+Y2xvY2F0aW9ucyA9IChMb2NhdGlvbkxlbiAqKQorCQlwYWxsb2Mo anN0YXRlLT5jbG9jYXRpb25zX2J1Zl9zaXplICogc2l6ZW9mKExvY2F0aW9uTGVuKSk7CisJ anN0YXRlLT5jbG9jYXRpb25zX2NvdW50ID0gMDsKKwlqc3RhdGUtPmhpZ2hlc3RfZXh0ZXJu X3BhcmFtX2lkID0gMDsKKworCS8qIENvbXB1dGUgcXVlcnkgSUQgKi8KKwlfanVtYmxlTm9k ZShqc3RhdGUsIChOb2RlICopIGV4cHIpOworCSpxdWVyeUlkID0gRGF0dW1HZXRVSW50NjQo aGFzaF9hbnlfZXh0ZW5kZWQoanN0YXRlLT5qdW1ibGUsCisJCQkJCQkJCQkJCQlqc3RhdGUt Pmp1bWJsZV9sZW4sCisJCQkJCQkJCQkJCQkwKSk7CisKKwlpZiAoKnF1ZXJ5SWQgPT0gVUlO VDY0Q09OU1QoMCkpCisJCSpxdWVyeUlkID0gVUlOVDY0Q09OU1QoMSk7CisKKwlyZXR1cm4g anN0YXRlOworfQorCiAvKgogICogRW5hYmxlcyBxdWVyeSBpZGVudGlmaWVyIGNvbXB1dGF0 aW9uLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBh dGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDY3 OTIxYTA4MjYyLi4yZTk3ZmY5NjAzNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGls cy5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZU1hbmlwLmgiCiAjaW5jbHVkZSAidXRp bHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2V4cHIuaCIKKyNpbmNs dWRlICJ1dGlscy9hcnJheS5oIgogCiAKIC8qIEJpdG1hc2sgZmxhZ3MgZm9yIHB1c2hkb3du X3NhZmV0eV9pbmZvLnVuc2FmZUZsYWdzICovCkBAIC03NTksNiArNzYxLDE3OSBAQCBzZXRf cmVsX2NvbnNpZGVyX3BhcmFsbGVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiB9CiAKK3N0YXRpYyBMaXN0 KgorcmVzZWFyY2hfb3JfbGlzdChFeHByICpxdWFsLCBMaXN0ICpvcl9saXN0LCBSZXN0cmlj dEluZm8gKnN1Yl9yaW5mbykKK3sKKwlMaXN0ICplbGVtX2V4cHJzID0gTklMOworCisJLyog Q2hlY2s6IGl0IGlzIGFuIGV4cHIgb2YgdGhlIGZvcm0gJ0YoeCkgb3BlciBDb25zdEV4cHIn ICovCisJaWYgKCFJc0EocXVhbCwgU2NhbGFyQXJyYXlPcEV4cHIpKQorCXsKKwkJLyogQWdh aW4sIGl0J3Mgbm90IHRoZSBleHByIHdlIGNhbiB0cmFuc2Zvcm0gKi8KKwkJb3JfbGlzdCA9 IGxhcHBlbmQob3JfbGlzdCwgcXVhbCk7CisJfQorCWVsc2UKKwl7CisJCVNjYWxhckFycmF5 T3BFeHByICpzYW9wID0gKFNjYWxhckFycmF5T3BFeHByICopIHF1YWw7CisJCUV4cHIJICAg KnJpZ2h0b3AgPSAoRXhwciAqKSBsc2Vjb25kKHNhb3AtPmFyZ3MpOworCQlMaXN0Q2VsbCAg ICpsYzE7CisKKwkJaWYgKHN1Yl9yaW5mbyAmJiAhb3BfbWVyZ2Vqb2luYWJsZSgoKE9wRXhw ciAqKSBzdWJfcmluZm8tPmNsYXVzZSktPm9wbm8sIGV4cHJUeXBlKGdldF9sZWZ0b3Aoc3Vi X3JpbmZvLT5jbGF1c2UpKSkpCisJCQl7CisJCQkJLyogQW5kIGFnYWluLCBmaWx0ZXIgb3V0 IG5vbi1lcXVhbGl0eSBvcGVyYXRvcnMgKi8KKwkJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9s aXN0LCAodm9pZCAqKSBxdWFsKTsKKwkJCX0KKwkJZWxzZSBpZiAocmlnaHRvcCAmJiBJc0Eo cmlnaHRvcCwgQ29uc3QpKQorCQl7CisJCQlBcnJheVR5cGUgICphcnJ2YWw7CisJCQlpbnQx NgkJZWxlbWxlbjsKKwkJCWJvb2wJCWVsZW1ieXZhbDsKKwkJCWNoYXIJCWVsZW1hbGlnbjsK KwkJCURhdHVtCSAgICplbGVtX3ZhbHVlczsKKwkJCWJvb2wJICAgKmVsZW1fbnVsbHM7CisJ CQlpbnQJCQludW1fZWxlbXMsCisJCQkJCQlpOworCQkJQ29uc3QJICAgKmFyciA9IChDb25z dCAqKSByaWdodG9wOworCisJCQlhcnJ2YWwgPSBEYXR1bUdldEFycmF5VHlwZVAoYXJyLT5j b25zdHZhbHVlKTsKKwkJCWdldF90eXBsZW5ieXZhbGFsaWduKEFSUl9FTEVNVFlQRShhcnJ2 YWwpLAorCQkJCQkJCQkmZWxlbWxlbiwgJmVsZW1ieXZhbCwgJmVsZW1hbGlnbik7CisJCQlk ZWNvbnN0cnVjdF9hcnJheShhcnJ2YWwsCisJCQkJCQkJQVJSX0VMRU1UWVBFKGFycnZhbCks CisJCQkJCQkJZWxlbWxlbiwgZWxlbWJ5dmFsLCBlbGVtYWxpZ24sCisJCQkJCQkJJmVsZW1f dmFsdWVzLCAmZWxlbV9udWxscywKKwkJCQkJCQkmbnVtX2VsZW1zKTsKKworCQkJZm9yIChp ID0gMDsgaSA8IG51bV9lbGVtczsgaSsrKQorCQkJeworCQkJCUNvbnN0CSAgICplbGVtX2V4 cHI7CisKKwkJCQkvKgorCQkJCSogQSBudWxsIGFycmF5IGVsZW1lbnQgbXVzdCBsZWFkIHRv IGEgbnVsbCBjb21wYXJpc29uIHJlc3VsdCwKKwkJCQkqIHNpbmNlIHNhb3Bfb3AgaXMga25v d24gc3RyaWN0LiAgV2UgY2FuIGlnbm9yZSBpdCBpbiB0aGUKKwkJCQkqIHVzZU9yIGNhc2Us IGJ1dCBvdGhlcndpc2UgaXQgaW1wbGllcyBzZWxmLWNvbnRyYWRpY3Rpb24uCisJCQkJKi8K KwkJCQlpZiAoZWxlbV9udWxsc1tpXSkKKwkJCQl7CisJCQkJCW9yX2xpc3QgPSBsYXBwZW5k KG9yX2xpc3QsICh2b2lkICopIHF1YWwpOworCQkJCQllbGVtX2V4cHJzID0gTklMOworCQkJ CQlicmVhazsKKwkJCQl9CisKKwkJCQllbGVtX2V4cHIgPSBtYWtlQ29uc3QoQVJSX0VMRU1U WVBFKGFycnZhbCksIC0xLAorCQkJCQkJCQkJYXJyLT5jb25zdGNvbGxpZCwgZWxlbWxlbiwK KwkJCQkJCQkJCWVsZW1fdmFsdWVzW2ldLCBmYWxzZSwgZWxlbWJ5dmFsKTsKKwkJCQllbGVt X2V4cHJzID0gbGFwcGVuZChlbGVtX2V4cHJzLCBlbGVtX2V4cHIpOworCQkJfQorCQl9CisJ CWVsc2UgaWYgKHJpZ2h0b3AgJiYgSXNBKHJpZ2h0b3AsIEFycmF5RXhwcikgJiYgISgoQXJy YXlFeHByICopIHJpZ2h0b3ApLT5tdWx0aWRpbXMpCisJCXsKKwkJCUFycmF5RXhwciAgKmFy cmV4cHIgPSAoQXJyYXlFeHByICAqKWdldF9yaWdodG9wKHJpZ2h0b3ApOworCQkJZWxlbV9l eHBycyA9IGFycmV4cHItPmVsZW1lbnRzOworCQl9CisJCWVsc2UKKwkJCW9yX2xpc3QgPSBs YXBwZW5kKG9yX2xpc3QsIHF1YWwpOworCisJCWlmIChlbGVtX2V4cHJzKQorCQlmb3JlYWNo KGxjMSwgZWxlbV9leHBycykKKwkJeworCQkJRXhwcgkgICAqZWxlbV9jbGF1c2U7CisKKwkJ CWVsZW1fY2xhdXNlID0gbWFrZV9vcGNsYXVzZSgoKFNjYWxhckFycmF5T3BFeHByKikgcXVh bCktPm9wbm8sIEJPT0xPSUQsIGZhbHNlLAorCQkJCQkJCQkJCShFeHByICopIGxpbml0aWFs KCgoU2NhbGFyQXJyYXlPcEV4cHIqKXF1YWwpLT5hcmdzKSwgbGZpcnN0KGxjMSksCisJCQkJ CQkJCQkJSW52YWxpZE9pZCwgKChTY2FsYXJBcnJheU9wRXhwciopcXVhbCktPmlucHV0Y29s bGlkKTsKKwkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkKikgZWxlbV9jbGF1 c2UpOworCQl9CisJfQorCXJldHVybiBvcl9saXN0OworfQorCitzdGF0aWMgTGlzdCAqCitn ZXRfYmFzZXJlc3RyaWN0aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqYmFzZXJlc3Ry aWN0aW5mbykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICptb2RpZmllZF9yaW5m byA9IE5JTDsKKwlib29sCQlvcl90cmFuc2Zvcm1hdGlvbiA9IGZhbHNlOworCisJaWYgKCFl bmFibGVfb3JfdHJhbnNmb3JtYXRpb24pCisJCXJldHVybiBOVUxMOworCisJZm9yZWFjaChs YywgYmFzZXJlc3RyaWN0aW5mbykKKwl7CisJCVJlc3RyaWN0SW5mbyAgICpyaW5mb19iYXNl ID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYyk7CisJCVJlc3RyaWN0SW5mbyAgICpy aW5mbzsKKwkJTGlzdAkJICAgKm9yX2xpc3QgPSBOSUw7CisKKwkJTGlzdENlbGwJICAgKmxj X2VhcmdzLAorCQkJCQkgICAqbGNfcmFyZ3M7CisKKwkJaWYgKCFJc0EocmluZm9fYmFzZS0+ Y2xhdXNlLCBCb29sRXhwcikgJiYgIUlzQShyaW5mb19iYXNlLT5jbGF1c2UsIFNjYWxhckFy cmF5T3BFeHByKSkKKwkJeworCQkJLyogQWRkIGEgY2xhdXNlIHdpdGhvdXQgY2hhbmdlcyAq LworCQkJbW9kaWZpZWRfcmluZm8gPSBsYXBwZW5kKG1vZGlmaWVkX3JpbmZvLCByaW5mb19i YXNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKElzQShyaW5mb19iYXNlLT5jbGF1 c2UsIEJvb2xFeHByKSAmJiBpc19vcmNsYXVzZShyaW5mb19iYXNlLT5jbGF1c2UpKQorCQlm b3Jib3RoKGxjX2VhcmdzLCAoKEJvb2xFeHByICopIHJpbmZvX2Jhc2UtPmNsYXVzZSktPmFy Z3MsCisJCQkJbGNfcmFyZ3MsICgoQm9vbEV4cHIgKikgcmluZm9fYmFzZS0+b3JjbGF1c2Up LT5hcmdzKQorCQl7CisJCQlFeHByCQkJICAgKm9ycXVhbCA9IChFeHByICopIGxmaXJzdChs Y19lYXJncyk7CisJCQlSZXN0cmljdEluZm8gCSAgICpzdWJfcmluZm8gPSBsZmlyc3Rfbm9k ZShSZXN0cmljdEluZm8sIGxjX3JhcmdzKTsKKworCQkJaWYgKCFJc0Eob3JxdWFsLCBPcEV4 cHIpIHx8CisJCQkJIShibXNfaXNfZW1wdHkoc3ViX3JpbmZvLT5sZWZ0X3JlbGlkcykgXgor CQkJCWJtc19pc19lbXB0eShzdWJfcmluZm8tPnJpZ2h0X3JlbGlkcykpIHx8CisJCQkJY29u dGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgb3JxdWFsKSkKKwkJCXsKKwkJCQkv KiBBZ2FpbiwgaXQncyBub3QgdGhlIGV4cHIgd2UgY2FuIHRyYW5zZm9ybSAqLworCQkJCW9y X2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIG9ycXVhbCk7CisJCQkJY29udGlu dWU7CisJCQl9CisKKwkJCW9yX2xpc3QgPSByZXNlYXJjaF9vcl9saXN0KG9ycXVhbCwgb3Jf bGlzdCwgc3ViX3JpbmZvKTsKKwkJfQorCQllbHNlIGlmIChJc0EocmluZm9fYmFzZS0+Y2xh dXNlLCBTY2FsYXJBcnJheU9wRXhwcikpCisJCXsKKwkJCUV4cHIJCQkgICAqb3JxdWFsID0g cmluZm9fYmFzZS0+Y2xhdXNlOworCisJCQlvcl9saXN0ID0gcmVzZWFyY2hfb3JfbGlzdChv cnF1YWwsIG9yX2xpc3QsIE5VTEwpOworCQl9CisJCWVsc2UKKwkJeworCQkJb3JfbGlzdCA9 IGxhcHBlbmQob3JfbGlzdCwgKHZvaWQqKXJpbmZvX2Jhc2UtPmNsYXVzZSk7CisJCX0KKwor CisJCXJpbmZvID0gbWFrZV9yZXN0cmljdGluZm8ocm9vdCwKKwkJCQkgIGxpc3RfbGVuZ3Ro KG9yX2xpc3QpID4gMSA/IG1ha2VCb29sRXhwcihPUl9FWFBSLCBvcl9saXN0LCAtMSk6CisJ CQkJCQkJCQkJCQkJCQkJCQkJCShFeHByICopIGxpbml0aWFsKG9yX2xpc3QpLAorCQkJCSAg cmluZm9fYmFzZS0+aXNfcHVzaGVkX2Rvd24sCisJCQkJICByaW5mb19iYXNlLT5oYXNfY2xv bmUsCisJCQkJICByaW5mb19iYXNlLT5pc19jbG9uZSwKKwkJCQkgIHJpbmZvX2Jhc2UtPnBz ZXVkb2NvbnN0YW50LAorCQkJCSAgcmluZm9fYmFzZS0+c2VjdXJpdHlfbGV2ZWwsCisJCQkJ ICByaW5mb19iYXNlLT5yZXF1aXJlZF9yZWxpZHMsCisJCQkJICByaW5mb19iYXNlLT5pbmNv bXBhdGlibGVfcmVsaWRzLAorCQkJCSAgcmluZm9fYmFzZS0+b3V0ZXJfcmVsaWRzKTsKKwkJ cmluZm8tPmV2YWxfY29zdD1yaW5mb19iYXNlLT5ldmFsX2Nvc3Q7CisJCXJpbmZvLT5ub3Jt X3NlbGVjPXJpbmZvX2Jhc2UtPm5vcm1fc2VsZWM7CisJCXJpbmZvLT5vdXRlcl9zZWxlYz1y aW5mb19iYXNlLT5vdXRlcl9zZWxlYzsKKwkJcmluZm8tPmxlZnRfYnVja2V0c2l6ZT1yaW5m b19iYXNlLT5sZWZ0X2J1Y2tldHNpemU7CisJCXJpbmZvLT5yaWdodF9idWNrZXRzaXplPXJp bmZvX2Jhc2UtPnJpZ2h0X2J1Y2tldHNpemU7CisJCXJpbmZvLT5sZWZ0X21jdmZyZXE9cmlu Zm9fYmFzZS0+bGVmdF9tY3ZmcmVxOworCQlyaW5mby0+cmlnaHRfbWN2ZnJlcT1yaW5mb19i YXNlLT5yaWdodF9tY3ZmcmVxOworCQltb2RpZmllZF9yaW5mbyA9IGxhcHBlbmQobW9kaWZp ZWRfcmluZm8sIHJpbmZvKTsKKwkJb3JfdHJhbnNmb3JtYXRpb24gPSB0cnVlOworCX0KKwor CWlmKG9yX3RyYW5zZm9ybWF0aW9uKQorCXJldHVybiBtb2RpZmllZF9yaW5mbzsKKworCXJl dHVybiBiYXNlcmVzdHJpY3RpbmZvOworfQorCisKIC8qCiAgKiBzZXRfcGxhaW5fcmVsX3Bh dGhsaXN0CiAgKgkgIEJ1aWxkIGFjY2VzcyBwYXRocyBmb3IgYSBwbGFpbiByZWxhdGlvbiAo bm8gc3VicXVlcnksIG5vIGluaGVyaXRhbmNlKQpAQCAtNzY3LDYgKzk0MiwxMiBAQCBzdGF0 aWMgdm9pZAogc2V0X3BsYWluX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLCBSYW5nZVRibEVudHJ5ICpydGUpCiB7CiAJUmVsaWRzCQlyZXF1aXJl ZF9vdXRlcjsKKwlSZWxPcHRJbmZvICpyZUxfYWx0ZXJuYXRpdmUgPSBtYWtlTm9kZShSZWxP cHRJbmZvKTsKKwkvL3JlTF9hbHRlcm5hdGl2ZSA9IGNvcHlPYmplY3QocmVsKTsKKwlyZUxf YWx0ZXJuYXRpdmUgPSBjb3B5X3NpbXBsZV9yZWwocm9vdCwgcmVsLT5yZWxpZCwgcmVsLCBy ZUxfYWx0ZXJuYXRpdmUpOworCXJlTF9hbHRlcm5hdGl2ZS0+aW5kZXhsaXN0ID0gTklMOwor CXJlTF9hbHRlcm5hdGl2ZS0+YmFzZXJlc3RyaWN0aW5mbyA9IHJlbC0+YmFzZXJlc3RyaWN0 aW5mbzsKKwlyZUxfYWx0ZXJuYXRpdmUtPmVjbGFzc19pbmRleGVzID0gTlVMTDsKIAogCS8q CiAJICogV2UgZG9uJ3Qgc3VwcG9ydCBwdXNoaW5nIGpvaW4gY2xhdXNlcyBpbnRvIHRoZSBx dWFscyBvZiBhIHNlcXNjYW4sIGJ1dApAQCAtNzg3LDYgKzk2OCwzOSBAQCBzZXRfcGxhaW5f cmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFJhbmdl VGJsRW50cnkgKnJ0ZSkKIAogCS8qIENvbnNpZGVyIFRJRCBzY2FucyAqLwogCWNyZWF0ZV90 aWRzY2FuX3BhdGhzKHJvb3QsIHJlbCk7CisKKwlzZXRfY2hlYXBlc3QocmVsKTsKKworCWlm IChyZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwgJiYgZW5hYmxlX29yX3RyYW5z Zm9ybWF0aW9uKQorCXsKKwkJYm9vbCBhcHBsaWVkX3RyYW5zZm9tYXRpb249dHJ1ZTsKKwkJ Ly9hcHBsaWVkX3RyYW5zZm9tYXRpb24gPSAgKGJvb2wgKikgcGFsbG9jKHNpemVvZihib29s KSk7CisJCXJlTF9hbHRlcm5hdGl2ZS0+YmFzZXJlc3RyaWN0aW5mbyA9IGdldF9iYXNlcmVz dHJpY3RpbmZvKHJvb3QsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbyk7CitpZiAoYXBwbGllZF90 cmFuc2ZvbWF0aW9uKQoreworCWFkZF9wYXRoKHJlTF9hbHRlcm5hdGl2ZSwgY3JlYXRlX3Nl cXNjYW5fcGF0aChyb290LCByZUxfYWx0ZXJuYXRpdmUsIHJlcXVpcmVkX291dGVyLCAwKSk7 CisKKwlpZiAocmVMX2FsdGVybmF0aXZlLT5jb25zaWRlcl9wYXJhbGxlbCAmJiByZXF1aXJl ZF9vdXRlciA9PSBOVUxMKQorCQljcmVhdGVfcGxhaW5fcGFydGlhbF9wYXRocyhyb290LCBy ZUxfYWx0ZXJuYXRpdmUpOworCisJY3JlYXRlX2luZGV4X3BhdGhzKHJvb3QsIHJlTF9hbHRl cm5hdGl2ZSk7CisKKwljcmVhdGVfdGlkc2Nhbl9wYXRocyhyb290LCByZUxfYWx0ZXJuYXRp dmUpOworCisJc2V0X2NoZWFwZXN0KHJlTF9hbHRlcm5hdGl2ZSk7CisKKwllbG9nKFdBUk5J TkcsICJvcnM6IC0gJWYiLCByZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnRvdGFsX2Nvc3Qp OworCWVsb2coV0FSTklORywgImFwcGxpZWRfdHJhbnNmb21hdGlvbjogLSAlZiIsIHJlTF9h bHRlcm5hdGl2ZS0+Y2hlYXBlc3RfdG90YWxfcGF0aC0+dG90YWxfY29zdCk7CisKKwlpZiAo cmVMX2FsdGVybmF0aXZlLT5jaGVhcGVzdF90b3RhbF9wYXRoLT50b3RhbF9jb3N0IDw9IHJl bC0+Y2hlYXBlc3RfdG90YWxfcGF0aC0+dG90YWxfY29zdCkKKwl7CisJCS8vY29weV9zaW1w bGVfcmVsKHJvb3QsIHJlbC0+cmVsaWQsIHJlTF9hbHRlcm5hdGl2ZSwgcmVsKTsKKwkJcmVs LT5pbmRleGxpc3QgPSByZUxfYWx0ZXJuYXRpdmUtPmluZGV4bGlzdDsKKwkJcmVsLT5iYXNl cmVzdHJpY3RpbmZvID0gcmVMX2FsdGVybmF0aXZlLT5iYXNlcmVzdHJpY3RpbmZvOworCQly ZWwtPmVjbGFzc19pbmRleGVzID0gcmVMX2FsdGVybmF0aXZlLT5lY2xhc3NfaW5kZXhlczsK Kwl9CisJfQorCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YwppbmRleCA1ZDgzZjYwZWI5YS4uMTg5Y2VlNDQ5YmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTE4Myw2ICsxODMsOTcgQEAgZXhwYW5kX3BsYW5uZXJf YXJyYXlzKFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpCiAJcm9vdC0+c2ltcGxl X3JlbF9hcnJheV9zaXplID0gbmV3X3NpemU7CiB9CiAKK1JlbE9wdEluZm8gKgorY29weV9z aW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKmJh c2VfcmVsLCBSZWxPcHRJbmZvICpyZWwpCit7CisJcmVsLT5yZWxvcHRraW5kID0gYmFzZV9y ZWwtPnBhcmVudCA/IFJFTE9QVF9PVEhFUl9NRU1CRVJfUkVMIDogUkVMT1BUX0JBU0VSRUw7 CisJcmVsLT5yZWxpZHMgPSBiYXNlX3JlbC0+cmVsaWRzOworCXJlbC0+cm93cyA9IGJhc2Vf cmVsLT5yb3dzOworCS8qIGNoZWFwIHN0YXJ0dXAgY29zdCBpcyBpbnRlcmVzdGluZyBpZmYg bm90IGFsbCB0dXBsZXMgdG8gYmUgcmV0cmlldmVkICovCisJcmVsLT5jb25zaWRlcl9zdGFy dHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CisJcmVsLT5jb25zaWRlcl9wYXJh bV9zdGFydHVwID0gYmFzZV9yZWwtPmNvbnNpZGVyX3BhcmFtX3N0YXJ0dXA7CS8qIG1pZ2h0 IGdldCBjaGFuZ2VkIGxhdGVyICovCisJcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IGJhc2Vf cmVsLT5jb25zaWRlcl9wYXJhbGxlbDsgLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8K KwlyZWwtPnJlbHRhcmdldCA9IGJhc2VfcmVsLT5yZWx0YXJnZXQ7CisJcmVsLT5wYXRobGlz dCA9IGJhc2VfcmVsLT5wYXRobGlzdDsKKwlyZWwtPnBwaWxpc3QgPSBiYXNlX3JlbC0+cHBp bGlzdDsKKwlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBiYXNlX3JlbC0+cGFydGlhbF9wYXRo bGlzdDsKKwlyZWwtPmNoZWFwZXN0X3N0YXJ0dXBfcGF0aCA9IGJhc2VfcmVsLT5jaGVhcGVz dF9zdGFydHVwX3BhdGg7CisJcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoID0gYmFzZV9yZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGg7CisJcmVsLT5jaGVhcGVzdF91bmlxdWVfcGF0aCA9IGJh c2VfcmVsLT5jaGVhcGVzdF91bmlxdWVfcGF0aDsKKwlyZWwtPmNoZWFwZXN0X3BhcmFtZXRl cml6ZWRfcGF0aHMgPSBiYXNlX3JlbC0+Y2hlYXBlc3RfcGFyYW1ldGVyaXplZF9wYXRoczsK KwlyZWwtPnJlbGlkID0gYmFzZV9yZWwtPnJlbGlkOworCS8qIG1pbl9hdHRyLCBtYXhfYXR0 ciwgYXR0cl9uZWVkZWQsIGF0dHJfd2lkdGhzIGFyZSBzZXQgYmVsb3cgKi8KKwlyZWwtPmxh dGVyYWxfdmFycyA9IGJhc2VfcmVsLT5sYXRlcmFsX3ZhcnM7CisJcmVsLT5zdGF0bGlzdCA9 IGJhc2VfcmVsLT5zdGF0bGlzdDsKKwlyZWwtPnBhZ2VzID0gYmFzZV9yZWwtPnBhZ2VzOwor CXJlbC0+dHVwbGVzID0gYmFzZV9yZWwtPnR1cGxlczsKKwlyZWwtPmFsbHZpc2ZyYWMgPSBi YXNlX3JlbC0+YWxsdmlzZnJhYzsKKwlyZWwtPnN1YnJvb3QgPSBiYXNlX3JlbC0+c3Vicm9v dDsKKwlyZWwtPnN1YnBsYW5fcGFyYW1zID0gYmFzZV9yZWwtPnN1YnBsYW5fcGFyYW1zOwor CXJlbC0+cmVsX3BhcmFsbGVsX3dvcmtlcnMgPSBiYXNlX3JlbC0+cmVsX3BhcmFsbGVsX3dv cmtlcnM7IC8qIHNldCB1cCBpbiBnZXRfcmVsYXRpb25faW5mbyAqLworCXJlbC0+YW1mbGFn cyA9IGJhc2VfcmVsLT5hbWZsYWdzOworCXJlbC0+cGFyZW50ID0gYmFzZV9yZWwtPnBhcmVu dDsKKwlyZWwtPnNlcnZlcmlkID0gYmFzZV9yZWwtPnNlcnZlcmlkOworCXJlbC0+dXNlcmlk ID0gYmFzZV9yZWwtPnVzZXJpZDsKKwlyZWwtPnVzZXJpZGlzY3VycmVudCA9IGJhc2VfcmVs LT51c2VyaWRpc2N1cnJlbnQ7CisJcmVsLT5mZHdyb3V0aW5lID0gYmFzZV9yZWwtPmZkd3Jv dXRpbmU7CisJcmVsLT5mZHdfcHJpdmF0ZSA9IGJhc2VfcmVsLT5mZHdfcHJpdmF0ZTsKKwly ZWwtPnVuaXF1ZV9mb3JfcmVscyA9IGJhc2VfcmVsLT51bmlxdWVfZm9yX3JlbHM7CisJcmVs LT5ub25fdW5pcXVlX2Zvcl9yZWxzID0gYmFzZV9yZWwtPm5vbl91bmlxdWVfZm9yX3JlbHM7 CisJcmVsLT5iYXNlcmVzdHJpY3Rjb3N0LnN0YXJ0dXAgPSAwOworCXJlbC0+YmFzZXJlc3Ry aWN0Y29zdC5wZXJfdHVwbGUgPSAwOworCXJlbC0+YmFzZXJlc3RyaWN0X21pbl9zZWN1cml0 eSA9IFVJTlRfTUFYOworCXJlbC0+am9pbmluZm8gPSBiYXNlX3JlbC0+am9pbmluZm87CisJ cmVsLT5oYXNfZWNsYXNzX2pvaW5zID0gYmFzZV9yZWwtPmhhc19lY2xhc3Nfam9pbnM7CisK KwkvKgorCSAqIFBhc3MgYXNzb3J0ZWQgaW5mb3JtYXRpb24gZG93biB0aGUgaW5oZXJpdGFu Y2UgaGllcmFyY2h5LgorCSAqLworCWlmIChiYXNlX3JlbC0+cGFyZW50KQorCXsKKwkJLyog V2Uga2VlcCBiYWNrLWxpbmtzIHRvIGltbWVkaWF0ZSBwYXJlbnQgYW5kIHRvcG1vc3QgcGFy ZW50LiAqLworCQlyZWwtPnBhcmVudCA9IGJhc2VfcmVsLT5wYXJlbnQ7CisJCXJlbC0+dG9w X3BhcmVudCA9IGJhc2VfcmVsLT5wYXJlbnQtPnRvcF9wYXJlbnQgPyBiYXNlX3JlbC0+cGFy ZW50LT50b3BfcGFyZW50IDogYmFzZV9yZWwtPnBhcmVudDsKKwkJcmVsLT50b3BfcGFyZW50 X3JlbGlkcyA9IGJhc2VfcmVsLT50b3BfcGFyZW50LT5yZWxpZHM7CisKKwkJLyoKKwkJICog QSBjaGlsZCByZWwgaXMgYmVsb3cgdGhlIHNhbWUgb3V0ZXIgam9pbnMgYXMgaXRzIHBhcmVu dC4gIChXZQorCQkgKiBwcmVzdW1lIHRoaXMgaW5mbyB3YXMgYWxyZWFkeSBjYWxjdWxhdGVk IGZvciB0aGUgcGFyZW50LikKKwkJICovCisJCXJlbC0+bnVsbGluZ19yZWxpZHMgPSBiYXNl X3JlbC0+cGFyZW50LT5udWxsaW5nX3JlbGlkczsKKworCQkvKgorCQkgKiBBbHNvIHByb3Bh Z2F0ZSBsYXRlcmFsLXJlZmVyZW5jZSBpbmZvcm1hdGlvbiBmcm9tIGFwcGVuZHJlbCBwYXJl bnQKKwkJICogcmVscyB0byB0aGVpciBjaGlsZCByZWxzLiAgV2UgaW50ZW50aW9uYWxseSBn aXZlIGVhY2ggY2hpbGQgcmVsIHRoZQorCQkgKiBzYW1lIG1pbmltdW0gcGFyYW1ldGVyaXph dGlvbiwgZXZlbiB0aG91Z2ggaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0CisJCSAqIHNvbWUg ZG9uJ3QgcmVmZXJlbmNlIGFsbCB0aGUgbGF0ZXJhbCByZWxzLiAgVGhpcyBpcyBiZWNhdXNl IGFueQorCQkgKiBhcHBlbmQgcGF0aCBmb3IgdGhlIHBhcmVudCB3aWxsIGhhdmUgdG8gaGF2 ZSB0aGUgc2FtZQorCQkgKiBwYXJhbWV0ZXJpemF0aW9uIGZvciBldmVyeSBjaGlsZCBhbnl3 YXksIGFuZCB0aGVyZSdzIG5vIHZhbHVlIGluCisJCSAqIGZvcmNpbmcgZXh0cmEgcmVwYXJh bWV0ZXJpemVfcGF0aCgpIGNhbGxzLiAgU2ltaWxhcmx5LCBhIGxhdGVyYWwKKwkJICogcmVm ZXJlbmNlIHRvIHRoZSBwYXJlbnQgcHJldmVudHMgdXNlIG9mIG90aGVyd2lzZS1tb3ZhYmxl IGpvaW4gcmVscworCQkgKiBmb3IgZWFjaCBjaGlsZC4KKwkJICoKKwkJICogSXQncyBwb3Nz aWJsZSBmb3IgY2hpbGQgcmVscyB0byBoYXZlIHRoZWlyIG93biBjaGlsZHJlbiwgaW4gd2hp Y2gKKwkJICogY2FzZSB0aGUgdG9wbW9zdCBwYXJlbnQncyBsYXRlcmFsIGluZm8gcHJvcGFn YXRlcyBhbGwgdGhlIHdheSBkb3duLgorCQkgKi8KKwkJcmVsLT5kaXJlY3RfbGF0ZXJhbF9y ZWxpZHMgPSBiYXNlX3JlbC0+cGFyZW50LT5kaXJlY3RfbGF0ZXJhbF9yZWxpZHM7CisJCXJl bC0+bGF0ZXJhbF9yZWxpZHMgPSBiYXNlX3JlbC0+cGFyZW50LT5sYXRlcmFsX3JlbGlkczsK KwkJcmVsLT5sYXRlcmFsX3JlZmVyZW5jZXJzID0gYmFzZV9yZWwtPnBhcmVudC0+bGF0ZXJh bF9yZWZlcmVuY2VyczsKKwl9CisJZWxzZQorCXsKKwkJcmVsLT5wYXJlbnQgPSBiYXNlX3Jl bC0+cGFyZW50OworCQlyZWwtPnRvcF9wYXJlbnQgPSBiYXNlX3JlbC0+dG9wX3BhcmVudDsK KwkJcmVsLT50b3BfcGFyZW50X3JlbGlkcyA9IGJhc2VfcmVsLT50b3BfcGFyZW50X3JlbGlk czsKKwkJcmVsLT5udWxsaW5nX3JlbGlkcyA9IGJhc2VfcmVsLT5udWxsaW5nX3JlbGlkczsK KwkJcmVsLT5kaXJlY3RfbGF0ZXJhbF9yZWxpZHMgPSBiYXNlX3JlbC0+ZGlyZWN0X2xhdGVy YWxfcmVsaWRzOworCQlyZWwtPmxhdGVyYWxfcmVsaWRzID0gYmFzZV9yZWwtPmxhdGVyYWxf cmVsaWRzOworCQlyZWwtPmxhdGVyYWxfcmVmZXJlbmNlcnMgPSBiYXNlX3JlbC0+bGF0ZXJh bF9yZWZlcmVuY2VyczsKKwl9CisKKwlyZXR1cm4gcmVsOworfQorCiAvKgogICogYnVpbGRf c2ltcGxlX3JlbAogICoJICBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBmb3IgYSBiYXNl IHJlbGF0aW9uIG9yICdvdGhlcicgcmVsYXRpb24uCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIu YwppbmRleCA2NGM1ODJjMzQ0Yy4uZDhjNjA5NjE0NGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2V4cHIuYwpAQCAtMTYsMTIgKzE2LDE0IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAog I2luY2x1ZGUgImNhdGFsb2cvcGdfYWdncmVnYXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIK ICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9xdWVyeWp1 bWJsZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJw YXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9hZ2cuaCIKQEAgLTM4 LDExICs0MCwxMyBAQAogI2luY2x1ZGUgInV0aWxzL2RhdGUuaCIKICNpbmNsdWRlICJ1dGls cy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUg InV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAjaW5j bHVkZSAidXRpbHMveG1sLmgiCiAKIC8qIEdVQyBwYXJhbWV0ZXJzICovCiBib29sCQlUcmFu c2Zvcm1fbnVsbF9lcXVhbHMgPSBmYWxzZTsKK2Jvb2wJCWVuYWJsZV9vcl90cmFuc2Zvcm1h dGlvbiA9IHRydWU7CiAKIAogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUV4cHJSZWN1cnNlKFBh cnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwcik7CkBAIC05OSw2ICsxMDMsMjg5IEBAIHN0 YXRpYyBFeHByICptYWtlX2Rpc3RpbmN0X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAq b3BuYW1lLAogc3RhdGljIE5vZGUgKm1ha2VfbnVsbHRlc3RfZnJvbV9kaXN0aW5jdChQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJIEFfRXhwciAqZGlzdGluY3RhLCBOb2RlICph cmcpOwogCit0eXBlZGVmIHN0cnVjdCBPckNsYXVzZUdyb3VwS2V5Cit7CisJRXhwciAgICpl eHByOyAvKiBQb2ludGVyIHRvIHRoZSBleHByZXNzaW9uIHRyZWUgd2hpY2ggaGFzIGJlZW4g YSBzb3VyY2UgZm9yCisJCQkJCXRoZSBoYXNoa2V5IHZhbHVlICovCisJT2lkCQlvcG5vOwor CU9pZAkJZXhwcnR5cGU7Cit9IE9yQ2xhdXNlR3JvdXBLZXk7CisKK3R5cGVkZWYgc3RydWN0 IE9yQ2xhdXNlR3JvdXBFbnRyeQoreworCU9yQ2xhdXNlR3JvdXBLZXkga2V5OworCisJTm9k ZQkJICAgKm5vZGU7CisJTGlzdAkJICAgKmNvbnN0czsKKwlPaWQJCQkJc2NhbGFyX3R5cGU7 CisJTGlzdCAJCSAgICpleHByczsKK30gT3JDbGF1c2VHcm91cEVudHJ5OworCisvKgorICog SGFzaCBmdW5jdGlvbiB0aGF0J3MgY29tcGF0aWJsZSB3aXRoIGd1Y19uYW1lX2NvbXBhcmUK KyAqLworc3RhdGljIHVpbnQzMgorb3JjbGF1c2VfaGFzaChjb25zdCB2b2lkICpkYXRhLCBT aXplIGtleXNpemUpCit7CisJT3JDbGF1c2VHcm91cEtleSAgICprZXkgPSAoT3JDbGF1c2VH cm91cEtleSAqKSBkYXRhOworCXVpbnQ2NAkJCQloYXNoOworCisJKHZvaWQpIEp1bWJsZUV4 cHIoa2V5LT5leHByLCAmaGFzaCk7CisJaGFzaCArPSAoKHVpbnQ2NCkga2V5LT5vcG5vICsg KHVpbnQ2NCkga2V5LT5leHBydHlwZSkgJSBVSU5UNjRfTUFYOworCXJldHVybiBoYXNoOwor fQorCitzdGF0aWMgdm9pZCAqCitvcmNsYXVzZV9rZXljb3B5KHZvaWQgKmRlc3QsIGNvbnN0 IHZvaWQgKnNyYywgU2l6ZSBrZXlzaXplKQoreworCU9yQ2xhdXNlR3JvdXBLZXkgKnNyY19r ZXkgPSAoT3JDbGF1c2VHcm91cEtleSAqKSBzcmM7CisJT3JDbGF1c2VHcm91cEtleSAqZHN0 X2tleSA9IChPckNsYXVzZUdyb3VwS2V5ICopIGRlc3Q7CisKKwlBc3NlcnQoc2l6ZW9mKE9y Q2xhdXNlR3JvdXBLZXkpID09IGtleXNpemUpOworCisJZHN0X2tleS0+ZXhwciA9IHNyY19r ZXktPmV4cHI7CisJZHN0X2tleS0+b3BubyA9IHNyY19rZXktPm9wbm87CisJZHN0X2tleS0+ ZXhwcnR5cGUgPSBzcmNfa2V5LT5leHBydHlwZTsKKwlyZXR1cm4gZHN0X2tleTsKK30KKwor LyoKKyAqIER5bmFoYXNoIG1hdGNoIGZ1bmN0aW9uIHRvIHVzZSBpbiBndWNfaGFzaHRhYgor ICovCitzdGF0aWMgaW50CitvcmNsYXVzZV9tYXRjaChjb25zdCB2b2lkICpkYXRhMSwgY29u c3Qgdm9pZCAqZGF0YTIsIFNpemUga2V5c2l6ZSkKK3sKKwlPckNsYXVzZUdyb3VwS2V5ICAg KmtleTEgPSAoT3JDbGF1c2VHcm91cEtleSAqKSBkYXRhMTsKKwlPckNsYXVzZUdyb3VwS2V5 ICAgKmtleTIgPSAoT3JDbGF1c2VHcm91cEtleSAqKSBkYXRhMjsKKworCUFzc2VydChzaXpl b2YoT3JDbGF1c2VHcm91cEtleSkgPT0ga2V5c2l6ZSk7CisKKwlpZiAoa2V5MS0+b3BubyA9 PSBrZXkyLT5vcG5vICYmIGtleTEtPmV4cHJ0eXBlID09IGtleTItPmV4cHJ0eXBlICYmCisJ CWVxdWFsKGtleTEtPmV4cHIsIGtleTItPmV4cHIpKQorCQlyZXR1cm4gMDsKKworCXJldHVy biAxOworfQorCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1Cb29sRXhwck9yKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQm9vbEV4cHIgKmV4cHIpCit7CisJTGlzdAkJCQkgICAqb3JfbGlzdCA9 IE5JTDsKKwlMaXN0Q2VsbAkJCSAgICpsYzsKKwlIQVNIQ1RMCQkJCQlpbmZvOworCUhUQUIg CQkJCSAgICpvcl9ncm91cF9odGFiID0gTlVMTDsKKwlpbnQgCQkJCQlsZW5fb3JzID0gbGlz dF9sZW5ndGgoZXhwci0+YXJncyk7CisJSEFTSF9TRVFfU1RBVFVTCQkJaGFzaF9zZXE7CisJ T3JDbGF1c2VHcm91cEVudHJ5CSAgICplbnRyeSA9IE5VTEw7CisKKwkvKiBJZiB0aGlzIGlz IG5vdCBhbiAnT1InIGV4cHJlc3Npb24sIHNraXAgdGhlIHRyYW5zZm9ybWF0aW9uICovCisJ aWYgKCFlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24gfHwgZXhwci0+Ym9vbG9wICE9IE9SX0VY UFIgfHwgbGVuX29ycyA8IDIpCisJCXJldHVybiB0cmFuc2Zvcm1Cb29sRXhwcihwc3RhdGUs IChCb29sRXhwciAqKSBleHByKTsKKworCU1lbVNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8p KTsKKwlpbmZvLmtleXNpemUgPSBzaXplb2YoT3JDbGF1c2VHcm91cEtleSk7CisJaW5mby5l bnRyeXNpemUgPSBzaXplb2YoT3JDbGF1c2VHcm91cEVudHJ5KTsKKwlpbmZvLmhhc2ggPSBv cmNsYXVzZV9oYXNoOworCWluZm8ua2V5Y29weSA9IG9yY2xhdXNlX2tleWNvcHk7CisJaW5m by5tYXRjaCA9IG9yY2xhdXNlX21hdGNoOworCW9yX2dyb3VwX2h0YWIgPSBoYXNoX2NyZWF0 ZSgiT1IgR3JvdXBzIiwKKwkJCQkJCQkJbGVuX29ycywKKwkJCQkJCQkJJmluZm8sCisJCQkJ CQkJCUhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX0NPTVBBUkUgfCBIQVNIX0tF WUNPUFkpOworCisJZm9yZWFjaChsYywgZXhwci0+YXJncykKKwl7CisJCU5vZGUJCQkJICAg KmFyZyA9IGxmaXJzdChsYyk7CisJCU5vZGUJCQkJICAgKm9ycXVhbDsKKwkJTm9kZQkJCQkg ICAqY29uc3RfZXhwcjsKKwkJTm9kZQkJCQkgICAqbmNvbnN0X2V4cHI7CisJCU9yQ2xhdXNl R3JvdXBLZXkJCWhhc2hrZXk7CisJCWJvb2wJCQkJCWZvdW5kOworCisJCS8qIEF0IGZpcnN0 LCB0cmFuc2Zvcm0gdGhlIGFyZyBhbmQgZXZhbHVhdGUgY29uc3RhbnQgZXhwcmVzc2lvbnMu ICovCisJCW9ycXVhbCA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwgKE5vZGUgKikg YXJnKTsKKwkJb3JxdWFsID0gY29lcmNlX3RvX2Jvb2xlYW4ocHN0YXRlLCBvcnF1YWwsICJP UiIpOworCisJCWlmICghSXNBKG9ycXVhbCwgT3BFeHByKSkKKwkJeworCQkJb3JfbGlzdCA9 IGxhcHBlbmQob3JfbGlzdCwgb3JxdWFsKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoK KwkJICogRGV0ZWN0IHRoZSBjb25zdGFudCBzaWRlIG9mIHRoZSBjbGF1c2UuIFJlY2FsbCBu b24tY29uc3RhbnQKKwkJICogZXhwcmVzc2lvbiBjYW4gYmUgbWFkZSBub3Qgb25seSB3aXRo IFZhcnMsIGJ1dCBhbHNvIHdpdGggUGFyYW1zLAorCQkgKiB3aGljaCBpcyBub3QgYm9uZGVk IHdpdGggYW55IHJlbGF0aW9uLiBUaHVzLCB3ZSBkZXRlY3QgdGhlIGNvbnN0CisJCSAqIHNp ZGUgLSBpZiBhbm90aGVyIHNpZGUgaXMgY29uc3RhbnQgdG9vLCB0aGUgb3JxdWFsIGNvdWxk bid0IGJlCisJCSAqIGFuIE9wRXhwci4KKwkJICogR2V0IHBvaW50ZXJzIHRvIGNvbnN0YW50 IGFuZCBleHByZXNzaW9uIHNpZGVzIG9mIHRoZSBxdWFsLgorCQkgKi8KKwkJaWYgKElzQShn ZXRfbGVmdG9wKG9ycXVhbCksIENvbnN0KSkKKwkJeworCQkJbmNvbnN0X2V4cHIgPSBnZXRf cmlnaHRvcChvcnF1YWwpOworCQkJY29uc3RfZXhwciA9IGdldF9sZWZ0b3Aob3JxdWFsKTsK KwkJfQorCQllbHNlIGlmIChJc0EoZ2V0X3JpZ2h0b3Aob3JxdWFsKSwgQ29uc3QpKQorCQl7 CisJCQljb25zdF9leHByID0gZ2V0X3JpZ2h0b3Aob3JxdWFsKTsKKwkJCW5jb25zdF9leHBy ID0gZ2V0X2xlZnRvcChvcnF1YWwpOworCQl9CisJCWVsc2UKKwkJeworCQkJb3JfbGlzdCA9 IGxhcHBlbmQob3JfbGlzdCwgb3JxdWFsKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYg KCFvcF9tZXJnZWpvaW5hYmxlKCgoT3BFeHByICopIG9ycXVhbCktPm9wbm8sIGV4cHJUeXBl KG5jb25zdF9leHByKSkpCisJCXsKKwkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsIG9y cXVhbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSogQXQgdGhpcyBwb2ludCB3 ZSBkZWZpbml0ZWx5IGhhdmUgYSB0cmFuc2Zvcm1hYmxlIGNsYXVzZS4KKwkJKiBDbGFzc2lm eSBpdCBhbmQgYWRkIGludG8gc3BlY2lmaWMgZ3JvdXAgb2YgY2xhdXNlcywgb3IgY3JlYXRl IG5ldworCQkqIGdyb3VwLgorCQkqIFRPRE86IHRvIG1hbmFnZSBjb21wbGV4aXR5IGluIHRo ZSBjYXNlIG9mIG1hbnkgZGlmZmVyZW50IGNsYXVzZXMKKwkJKiAoWDE9QzEpIE9SIChYMj1D MiBPUikgLi4uIChYTiA9IENOKSB3ZSBjb3VsZCBpbnZlbnQgc29tZXRoaW5nCisJCSogbGlr ZSBhIGhhc2ggdGFibGUuIEJ1dCBhbHNvIHdlIGJlbGlldmUsIHRoYXQgdGhlIGNhc2Ugb2Yg bWFueQorCQkqIGRpZmZlcmVudCB2YXJpYWJsZSBzaWRlcyBpcyB2ZXJ5IHJhcmUuCisJCSov CisJCWhhc2hrZXkuZXhwciA9IChFeHByICopIG5jb25zdF9leHByOworCQloYXNoa2V5Lm9w bm8gPSAoKE9wRXhwciAqKSBvcnF1YWwpLT5vcG5vOworCQloYXNoa2V5LmV4cHJ0eXBlID0g ZXhwclR5cGUobmNvbnN0X2V4cHIpOworCQllbnRyeSA9IGhhc2hfc2VhcmNoKG9yX2dyb3Vw X2h0YWIsICZoYXNoa2V5LCBIQVNIX0VOVEVSLCAmZm91bmQpOworCisJCWlmICh1bmxpa2Vs eShmb3VuZCkpCisJCXsKKwkJCWVudHJ5LT5jb25zdHMgPSBsYXBwZW5kKGVudHJ5LT5jb25z dHMsIGNvbnN0X2V4cHIpOworCQkJZW50cnktPmV4cHJzID0gbGFwcGVuZChlbnRyeS0+ZXhw cnMsIG9ycXVhbCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQllbnRyeS0+bm9kZSA9IG5jb25z dF9leHByOworCQkJZW50cnktPmNvbnN0cyA9IGxpc3RfbWFrZTEoY29uc3RfZXhwcik7CisJ CQllbnRyeS0+ZXhwcnMgPSBsaXN0X21ha2UxKG9ycXVhbCk7CisJCX0KKwl9CisKKwlpZiAo bGlzdF9sZW5ndGgob3JfbGlzdCkgPT0gbGVuX29ycykKKwl7CisJCS8qCisJCSogTm8gYW55 IHRyYW5zZm9ybWF0aW9ucyBwb3NzaWJsZSB3aXRoIHRoaXMgbGlzdCBvZiBhcmd1bWVudHMu IEhlcmUgd2UKKwkJKiBhbHJlYWR5IG1hZGUgYWxsIHVuZGVybHlpbmcgdHJhbnNmb3JtYXRp b25zLiBUaHVzLCBqdXN0IHJldHVybiB0aGUKKwkJKiB0cmFuc2Zvcm1lZCBib29sIGV4cHJl c3Npb24uCisJCSovCisJCWhhc2hfZGVzdHJveShvcl9ncm91cF9odGFiKTsKKwkJcmV0dXJu IChOb2RlICopIG1ha2VCb29sRXhwcihPUl9FWFBSLCBvcl9saXN0LCBleHByLT5sb2NhdGlv bik7CisJfQorCisJaGFzaF9zZXFfaW5pdCgmaGFzaF9zZXEsIG9yX2dyb3VwX2h0YWIpOwor CisJLyogTGV0J3MgY29udmVydCBlYWNoIGdyb3VwIG9mIGNsYXVzZXMgdG8gYW4gSU4gb3Bl cmF0aW9uLiAqLworCisJLyoKKwkgKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGdyb3VwcyBh bmQgY29udmVydCBlYWNoLCB3aGVyZSBudW1iZXIgb2YKKwkqIGNvbnN0cyBtb3JlIHRoYW4g MS4gdHJpdmlhbCBncm91cHMgbW92ZSB0byBPUi1saXN0IGFnYWluCisJKi8KKworCXdoaWxl ICgoZW50cnkgPSAoT3JDbGF1c2VHcm91cEVudHJ5ICopIGhhc2hfc2VxX3NlYXJjaCgmaGFz aF9zZXEpKSAhPSBOVUxMKQorCXsKKwkJTGlzdAkJCSAgICphbGxleHByczsKKwkJT2lkCQkJ CSAgICBzY2FsYXJfdHlwZTsKKwkJT2lkCQkJCQlhcnJheV90eXBlOworCisJCUFzc2VydChs aXN0X2xlbmd0aChlbnRyeS0+Y29uc3RzKSA+IDApOworCQlBc3NlcnQobGlzdF9sZW5ndGgo ZW50cnktPmV4cHJzKSA9PSBsaXN0X2xlbmd0aChlbnRyeS0+Y29uc3RzKSk7CisKKwkJaWYg KGxpc3RfbGVuZ3RoKGVudHJ5LT5jb25zdHMpID09IDEpCisJCXsKKwkJCS8qCisJCQkgKiBP bmx5IG9uZSBlbGVtZW50IGluIHRoZSBjbGFzcy4gUmV0dXJuIHJpbmZvIGludG8gdGhlIEJv b2xFeHByCisJCQkgKiBhcmdzIGxpc3QgdW5jaGFuZ2VkLgorCQkJICovCisJCQlsaXN0X2Zy ZWUoZW50cnktPmNvbnN0cyk7CisJCQlvcl9saXN0ID0gbGlzdF9jb25jYXQob3JfbGlzdCwg ZW50cnktPmV4cHJzKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogRG8gdGhl IHRyYW5zZm9ybWF0aW9uLgorCQkgKi8KKwkJYWxsZXhwcnMgPSBsaXN0X2NvbmNhdChsaXN0 X21ha2UxKGVudHJ5LT5ub2RlKSwgZW50cnktPmNvbnN0cyk7CisJCXNjYWxhcl90eXBlID0g ZW50cnktPmtleS5leHBydHlwZTsKKworCQlpZiAoc2NhbGFyX3R5cGUgIT0gUkVDT1JET0lE ICYmIE9pZElzVmFsaWQoc2NhbGFyX3R5cGUpKQorCQkJYXJyYXlfdHlwZSA9IGdldF9hcnJh eV90eXBlKHNjYWxhcl90eXBlKTsKKwkJZWxzZQorCQkJYXJyYXlfdHlwZSA9IEludmFsaWRP aWQ7CisKKwkJaWYgKGFycmF5X3R5cGUgIT0gSW52YWxpZE9pZCkKKwkJeworCQkJLyoKKwkJ CSAqIE9LOiBjb2VyY2UgYWxsIHRoZSByaWdodC1oYW5kIG5vbi1WYXIgaW5wdXRzIHRvIHRo ZSBjb21tb24KKwkJCSAqIHR5cGUgYW5kIGJ1aWxkIGFuIEFycmF5RXhwciBmb3IgdGhlbS4K KwkJCSAqLworCQkJTGlzdAkJCSAgICphZXhwcnMgPSBOSUw7CisJCQlBcnJheUV4cHIJCSAg ICpuZXdhID0gTlVMTDsKKwkJCVNjYWxhckFycmF5T3BFeHByICAqc2FvcGV4cHIgPSBOVUxM OworCQkJTGlzdENlbGwJCSAgICpsOworCQkJSGVhcFR1cGxlCQkJb3BlcnR1cDsKKwkJCUZv cm1fcGdfb3BlcmF0b3IJb3BlcmZvcm07CisJCQlMaXN0CQkJICAgKm5hbWVsaXN0ID0gTklM OworCisJCQlhZXhwcnMgPSBlbnRyeS0+Y29uc3RzOworCisJCQluZXdhID0gbWFrZU5vZGUo QXJyYXlFeHByKTsKKwkJCS8qIGFycmF5X2NvbGxpZCB3aWxsIGJlIHNldCBieSBwYXJzZV9j b2xsYXRlLmMgKi8KKwkJCW5ld2EtPmVsZW1lbnRfdHlwZWlkID0gc2NhbGFyX3R5cGU7CisJ CQluZXdhLT5hcnJheV90eXBlaWQgPSBhcnJheV90eXBlOworCQkJbmV3YS0+bXVsdGlkaW1z ID0gZmFsc2U7CisJCQluZXdhLT5lbGVtZW50cyA9IGFleHByczsKKwkJCW5ld2EtPmxvY2F0 aW9uID0gLTE7CisKKwkJCW9wZXJ0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwKKwkJ CQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShlbnRyeS0+a2V5Lm9wbm8pKTsKKwkJCWlmICgh SGVhcFR1cGxlSXNWYWxpZChvcGVydHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgJXUiLAorCQkJCQkgZW50cnktPmtleS5vcG5vKTsK KworCQkJb3BlcmZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wZXJ0dXAp OworCQkJaWYgKCFPcGVyYXRvcklzVmlzaWJsZShlbnRyeS0+a2V5Lm9wbm8pKQorCQkJCW5h bWVsaXN0ID0gbGFwcGVuZChuYW1lbGlzdCwgbWFrZVN0cmluZyhnZXRfbmFtZXNwYWNlX25h bWUob3BlcmZvcm0tPm9wcm5hbWVzcGFjZSkpKTsKKworCQkJbmFtZWxpc3QgPSBsYXBwZW5k KG5hbWVsaXN0LCBtYWtlU3RyaW5nKHBzdHJkdXAoTmFtZVN0cihvcGVyZm9ybS0+b3BybmFt ZSkpKSk7CisJCQlSZWxlYXNlU3lzQ2FjaGUob3BlcnR1cCk7CisKKwkJCXNhb3BleHByID0K KwkJCQkoU2NhbGFyQXJyYXlPcEV4cHIgKikKKwkJCQkJbWFrZV9zY2FsYXJfYXJyYXlfb3Ao cHN0YXRlLAorCQkJCQkJCQkJCSBuYW1lbGlzdCwKKwkJCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJ CQkJCQkgZW50cnktPm5vZGUsCisJCQkJCQkJCQkJIChOb2RlICopIG5ld2EsCisJCQkJCQkJ CQkJIC0xKTsKKworCQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgKHZvaWQgKikgc2Fv cGV4cHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRoaXMgcGFydCB3b3Jr cyBvbiBpbnRhcnJheSB0ZXN0IChPUiB0aGVyZSBpcyBtYWRlIG9uCisJCQkgKiBlbGVtZW50 cyBvZiBhIGN1c3RvbSB0eXBlKQorCQkJICovCisJCQlsaXN0X2ZyZWUoZW50cnktPmNvbnN0 cyk7CisJCQlvcl9saXN0ID0gbGlzdF9jb25jYXQob3JfbGlzdCwgZW50cnktPmV4cHJzKTsK KwkJfQorCQloYXNoX3NlYXJjaChvcl9ncm91cF9odGFiLCAmZW50cnktPmtleSwgSEFTSF9S RU1PVkUsIE5VTEwpOworCX0KKwloYXNoX2Rlc3Ryb3kob3JfZ3JvdXBfaHRhYik7CisKKwkv KiBPbmUgbW9yZSB0cmljazogYXNzZW1ibGUgY29ycmVjdCBjbGF1c2UgKi8KKwlyZXR1cm4g KE5vZGUgKikgKChsaXN0X2xlbmd0aChvcl9saXN0KSA+IDEpID8KKwkJCQkJIG1ha2VCb29s RXhwcihPUl9FWFBSLCBvcl9saXN0LCBleHByLT5sb2NhdGlvbikgOgorCQkJCQkgbGluaXRp YWwob3JfbGlzdCkpOworfQogCiAvKgogICogdHJhbnNmb3JtRXhwciAtCkBAIC0yMTIsNyAr NDk5LDcgQEAgdHJhbnNmb3JtRXhwclJlY3Vyc2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2Rl ICpleHByKQogCQkJfQogCiAJCWNhc2UgVF9Cb29sRXhwcjoKLQkJCXJlc3VsdCA9IHRyYW5z Zm9ybUJvb2xFeHByKHBzdGF0ZSwgKEJvb2xFeHByICopIGV4cHIpOworCQkJcmVzdWx0ID0g dHJhbnNmb3JtQm9vbEV4cHJPcihwc3RhdGUsIChCb29sRXhwciAqKSBleHByKTsKIAkJCWJy ZWFrOwogCiAJCWNhc2UgVF9GdW5jQ2FsbDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMKaW5kZXggNjQ3NGUzNWVjMDQuLmMwNTRiM2UxNjU4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMTA0OCw2ICsxMDQ4LDE2IEBAIHN0cnVjdCBjb25m aWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEws IE5VTEwKIAl9LAorCXsKKwkJeyJlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24iLCBQR0NfVVNF UlNFVCwgUVVFUllfVFVOSU5HX09USEVSLAorCQkJZ2V0dGV4dF9ub29wKCJUcmFuc2Zvcm0g YSBzZXF1ZW5jZSBvZiBPUiBjbGF1c2VzIHRvIGFuIElOIGV4cHJlc3Npb24uIiksCisJCQln ZXR0ZXh0X25vb3AoIlRoZSBwbGFubmVyIHdpbGwgcmVwbGFjZSBjbGF1c2VzIGxpa2UgJ3g9 YzEgT1IgeD1jMiAuLiIKKwkJCQkJCSAidG8gdGhlIGNsYXVzZSAneCBJTiAoYzEsYzIsLi4u KSciKQorCQl9LAorCQkmZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uLAorCQl0cnVlLAorCQlO VUxMLCBOVUxMLCBOVUxMCisJfSwKIAl7CiAJCS8qCiAJCSAqIE5vdCBmb3IgZ2VuZXJhbCB1 c2UgLS0tIHVzZWQgYnkgU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiBhbmQgU0VUCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXgg Y2Y5ZjI4M2NmZWUuLjNkNWI1ZmJjNTgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zNzQsNiArMzc0LDcgQEAKICMgLSBQ bGFubmVyIE1ldGhvZCBDb25maWd1cmF0aW9uIC0KIAogI2VuYWJsZV9hc3luY19hcHBlbmQg PSBvbgorI2VuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbiA9IG9uCiAjZW5hYmxlX2JpdG1hcHNj YW4gPSBvbgogI2VuYWJsZV9nYXRoZXJtZXJnZSA9IG9uCiAjZW5hYmxlX2hhc2hhZ2cgPSBv bgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKaW5kZXggMDc2OTA4MWM3YWIuLjRhYWEzMWFh ODBlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKQEAgLTY1LDYgKzY1LDcgQEAgZXh0 ZXJuIFBHRExMSU1QT1JUIGludCBjb21wdXRlX3F1ZXJ5X2lkOwogCiBleHRlcm4gY29uc3Qg Y2hhciAqQ2xlYW5RdWVyeXRleHQoY29uc3QgY2hhciAqcXVlcnksIGludCAqbG9jYXRpb24s IGludCAqbGVuKTsKIGV4dGVybiBKdW1ibGVTdGF0ZSAqSnVtYmxlUXVlcnkoUXVlcnkgKnF1 ZXJ5KTsKK2V4dGVybiBKdW1ibGVTdGF0ZSAqSnVtYmxlRXhwcihFeHByICpleHByLCB1aW50 NjQgKnF1ZXJ5SWQpOwogZXh0ZXJuIHZvaWQgRW5hYmxlUXVlcnlJZCh2b2lkKTsKIAogZXh0 ZXJuIFBHRExMSU1QT1JUIGJvb2wgcXVlcnlfaWRfZW5hYmxlZDsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhub2RlLmgKaW5kZXggNmU1NTdiZWJjNDQuLmY1MGEwZGY1ZGQyIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMzA2LDYgKzMwNiw4IEBAIGV4dGVybiB2b2lkIHNl dHVwX3NpbXBsZV9yZWxfYXJyYXlzKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lk IGV4cGFuZF9wbGFubmVyX2FycmF5cyhQbGFubmVySW5mbyAqcm9vdCwgaW50IGFkZF9zaXpl KTsKIGV4dGVybiBSZWxPcHRJbmZvICpidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpy b290LCBpbnQgcmVsaWQsCiAJCQkJCQkJCQlSZWxPcHRJbmZvICpwYXJlbnQpOworZXh0ZXJu IFJlbE9wdEluZm8gKgorY29weV9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQg cmVsaWQsIFJlbE9wdEluZm8gKmJhc2VfcmVsLCBSZWxPcHRJbmZvICpyZWwpOwogZXh0ZXJu IFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxp ZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFu bmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2pv aW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfZXhwci5oCmluZGV4IDdkMzhjYTc1ZjdiLi4zYTg3ZGUwMjg1OSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9w YXJzZXIvcGFyc2VfZXhwci5oCkBAIC0xNyw2ICsxNyw3IEBACiAKIC8qIEdVQyBwYXJhbWV0 ZXJzICovCiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBUcmFuc2Zvcm1fbnVsbF9lcXVhbHM7 CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb247CiAK IGV4dGVybiBOb2RlICp0cmFuc2Zvcm1FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAq ZXhwciwgUGFyc2VFeHByS2luZCBleHByS2luZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAppbmRleCBhY2ZkOWQxZjRmNy4uM2JiNGJiY2E0 ODEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQK QEAgLTE4MzgsMTggKzE4MzgsNTAgQEAgRFJPUCBUQUJMRSBvbmVrX3dpdGhfbnVsbDsKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCAqIEZST00gdGVuazEKICAgV0hFUkUgdGhvdXNh bmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMg PSA0Mik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCi0gICBSZWNoZWNr IENvbmQ6ICgoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSAxKSkgT1IgKCh0aG91 c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMykpIE9SICgodGhvdXNhbmQgPSA0MikgQU5E ICh0ZW50aG91cyA9IDQyKSkpCi0gICAtPiAgQml0bWFwT3IKLSAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cwotICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMSkpCi0gICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKLSAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91 cyA9IDMpKQotICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3Vz X3RlbnRob3VzCi0gICAgICAgICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gNDIp IEFORCAodGVudGhvdXMgPSA0MikpCi0oOSByb3dzKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHRlbmsx X3Rob3VzX3RlbnRob3VzIG9uIHRlbmsxCisgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0g NDIpIEFORCAodGVudGhvdXMgPSBBTlkgKCd7MSwzLDQyfSc6OmludGVnZXJbXSkpKQorKDIg cm93cykKKworU0VMRUNUICogRlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFO RCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKKyB1 bmlxdWUxIHwgdW5pcXVlMiB8IHR3byB8IGZvdXIgfCB0ZW4gfCB0d2VudHkgfCBodW5kcmVk IHwgdGhvdXNhbmQgfCB0d290aG91c2FuZCB8IGZpdmV0aG91cyB8IHRlbnRob3VzIHwgb2Rk IHwgZXZlbiB8IHN0cmluZ3UxIHwgc3RyaW5ndTIgfCBzdHJpbmc0IAorLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgICAgICA0MiB8ICAgIDU1MzAgfCAg IDAgfCAgICAyIHwgICAyIHwgICAgICAyIHwgICAgICA0MiB8ICAgICAgIDQyIHwgICAgICAg ICAgNDIgfCAgICAgICAgNDIgfCAgICAgICA0MiB8ICA4NCB8ICAgODUgfCBRQkFBQUEgICB8 IFNFSUFBQSAgIHwgT09PT3h4CisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRo b3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQor ICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKKyAgICAgICAgIFJlY2hlY2sgQ29u ZDogKChodW5kcmVkID0gNDIpIEFORCAodGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50 ZWdlcltdKSkpCisgICAgICAgICAtPiAgQml0bWFwQW5kCisgICAgICAgICAgICAgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAorICAgICAgICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikKKyAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJb XSkpCisoOCByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBo dW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworIGNv dW50IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cpCisKK1NFVCBlbmFibGVfb3JfdHJhbnNm b3JtYXRpb24gPSBvbjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVu azEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91 cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgdGVuazFfdGhvdXNf dGVudGhvdXMgb24gdGVuazEKKyAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5E ICh0ZW50aG91cyA9IEFOWSAoJ3sxLDMsNDJ9Jzo6aW50ZWdlcltdKSkpCisoMiByb3dzKQog CiBTRUxFQ1QgKiBGUk9NIHRlbmsxCiAgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50 aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0gNDIpOwpAQCAtMTg2MSwy OCArMTg5MywxMDEgQEAgU0VMRUNUICogRlJPTSB0ZW5rMQogRVhQTEFJTiAoQ09TVFMgT0ZG KQogU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKICAgV0hFUkUgaHVuZHJlZCA9IDQyIEFO RCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEFn Z3JlZ2F0ZQogICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKLSAgICAgICAgIFJl Y2hlY2sgQ29uZDogKChodW5kcmVkID0gNDIpIEFORCAoKHRob3VzYW5kID0gNDIpIE9SICh0 aG91c2FuZCA9IDk5KSkpCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQy KSBBTkQgKHRob3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJbXSkpKQorICAgICAg ICAgLT4gIEJpdG1hcEFuZAorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2Fu IG9uIHRlbmsxX2h1bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICho dW5kcmVkID0gNDIpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24g dGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 ICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw5OX0nOjppbnRlZ2VyW10pKQorKDggcm93cykKKwor U0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAo dGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKKyBjb3VudCAKKy0tLS0tLS0KKyAg ICAxMAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikg RlJPTSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9S IHRlbnRob3VzID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1h cCBIZWFwIFNjYW4gb24gdGVuazEKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKCgodGhvdXNh bmQgPSA0MikgQU5EICh0ZW50aG91cyA9IEFOWSAoJ3sxLDN9Jzo6aW50ZWdlcltdKSkpIE9S ICh0aG91c2FuZCA9IDQxKSkKKyAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAg ICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAg ICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVu dGhvdXMgPSBBTlkgKCd7MSwzfSc6OmludGVnZXJbXSkpKQorICAgICAgICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA0MSkKKyg4IHJvd3MpCisKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0 ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzKSBPUiB0aG91c2FuZCA9IDQxOworIGNvdW50 IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRo b3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3Vz YW5kID0gNDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dy ZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCisgICAgICAgICBSZWNo ZWNrIENvbmQ6ICgoKGh1bmRyZWQgPSA0MikgQU5EICgodGVudGhvdXMgPCAyKSBPUiAodGhv dXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkpKSBPUiAodGhvdXNhbmQgPSA0 MSkpCisgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXBB bmQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5r MV9odW5kcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVu ZHJlZCA9IDQyKQorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhv dXNfdGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICh0ZW50aG91cyA8IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw5 OX0nOjppbnRlZ2VyW10pKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2Fu IG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBD b25kOiAodGhvdXNhbmQgPSA0MSkKKygxNCByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJP TSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRo b3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2FuZCA9IDQxOworIGNvdW50 IAorLS0tLS0tLQorICAgIDIwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRo b3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0ZW50 aG91cyA9IDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB Z2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCisgICAgICAgICBS ZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQyKSBBTkQgKCgodGhvdXNhbmQgPSA5OSkgQU5E ICh0ZW50aG91cyA9IDIpKSBPUiAodGhvdXNhbmQgPSBBTlkgKCd7NDIsNDF9Jzo6aW50ZWdl cltdKSkpKQogICAgICAgICAgLT4gIEJpdG1hcEFuZAogICAgICAgICAgICAgICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKICAgICAgICAgICAgICAgICAgICAg IEluZGV4IENvbmQ6IChodW5kcmVkID0gNDIpCiAgICAgICAgICAgICAgICAtPiAgQml0bWFw T3IKICAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5r MV90aG91c190ZW50aG91cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHRob3VzYW5kID0gNDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoKHRob3VzYW5kID0gOTkpIEFORCAodGVudGhvdXMgPSAyKSkKICAgICAgICAgICAg ICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91 cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0g OTkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQg PSBBTlkgKCd7NDIsNDF9Jzo6aW50ZWdlcltdKSkKICgxMSByb3dzKQogCiBTRUxFQ1QgY291 bnQoKikgRlJPTSB0ZW5rMQotICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9 IDQyIE9SIHRob3VzYW5kID0gOTkpOworICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91 c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhv dXMgPSAyKTsKICBjb3VudCAKIC0tLS0tLS0KICAgICAxMAogKDEgcm93KQogCitSRVNFVCBl bmFibGVfb3JfdHJhbnNmb3JtYXRpb247CiAtLQogLS0gQ2hlY2sgYmVoYXZpb3Igd2l0aCBk dXBsaWNhdGUgaW5kZXggY29sdW1uIGNvbnRlbnRzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ndWMub3V0CmluZGV4IDEyN2M5NTMyOTc2Li4wZjJiMWIxNjIwMCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZ3VjLm91dApAQCAtODYxLDcgKzg2MSw4IEBAIFNFTEVDVCBuYW1lIEZS T00gdGFiX3NldHRpbmdzX2ZsYWdzCiAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGRlZmF1bHRfc3RhdGlzdGljc190YXJnZXQK LSgxIHJvdykKKyBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24KKygyIHJvd3MpCiAKIC0tIFJ1 bnRpbWUtY29tcHV0ZWQgR1VDcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgcHJlc2V0IGNhdGVn b3J5LgogU0VMRUNUIG5hbWUgRlJPTSB0YWJfc2V0dGluZ3NfZmxhZ3MKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5oZXJpdC5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2luaGVyaXQub3V0CmluZGV4IDBmMWFhODMxZjY0Li4xNzgxMjUwMTIy NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmhlcml0Lm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luaGVyaXQub3V0CkBAIC0yNTYwLDcg KzI1NjAsNyBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbGlzdF9wYXJ0 ZWQgd2hlcmUgYSA9ICdhYicgb3IgYSBpbiAobnVsbCwgJ2NkJwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTZXEgU2NhbiBv biBwYXJ0X2FiX2NkIGxpc3RfcGFydGVkCi0gICBGaWx0ZXI6ICgoKGEpOjp0ZXh0ID0gJ2Fi Jzo6dGV4dCkgT1IgKChhKTo6dGV4dCA9IEFOWSAoJ3tOVUxMLGNkfSc6OnRleHRbXSkpKQor ICAgRmlsdGVyOiAoKChhKTo6dGV4dCA9IEFOWSAoJ3tOVUxMLGNkfSc6OnRleHRbXSkpIE9S ICgoYSk6OnRleHQgPSAnYWInOjp0ZXh0KSkKICgyIHJvd3MpCiAKIGV4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBsaXN0X3BhcnRlZCB3aGVyZSBhID0gJ2FiJzsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CmluZGV4IDJjNzMyNzAxNDNiLi5lOTUyZTU0MDFm NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CkBAIC00MjEwLDEwICs0MjEw LDEwIEBAIGV4cGxhaW4gKGNvc3RzIG9mZikKIHNlbGVjdCAqIGZyb20gdGVuazEgYSBqb2lu IHRlbmsxIGIgb24KICAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCiAg ICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0gNCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog IE5lc3RlZCBMb29wCi0gICBKb2luIEZpbHRlcjogKCgoYS51bmlxdWUxID0gMSkgQU5EIChi LnVuaXF1ZTEgPSAyKSkgT1IgKCgoYS51bmlxdWUyID0gMykgT1IgKGEudW5pcXVlMiA9IDcp KSBBTkQgKGIuaHVuZHJlZCA9IDQpKSkKKyAgIEpvaW4gRmlsdGVyOiAoKChhLnVuaXF1ZTEg PSAxKSBBTkQgKGIudW5pcXVlMSA9IDIpKSBPUiAoKGEudW5pcXVlMiA9IEFOWSAoJ3szLDd9 Jzo6aW50ZWdlcltdKSkgQU5EIChiLmh1bmRyZWQgPSA0KSkpCiAgICAtPiAgQml0bWFwIEhl YXAgU2NhbiBvbiB0ZW5rMSBiCiAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA9 IDIpIE9SIChodW5kcmVkID0gNCkpCiAgICAgICAgICAtPiAgQml0bWFwT3IKQEAgLTQyMjMs MTYgKzQyMjMsNjQgQEAgc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgog ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0KQogICAgLT4g IE1hdGVyaWFsaXplCiAgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMSBh Ci0gICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA9IDEpIE9SICh1bmlx dWUyID0gMykgT1IgKHVuaXF1ZTIgPSA3KSkKKyAgICAgICAgICAgICAgIFJlY2hlY2sgQ29u ZDogKCh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJb XSkpKQogICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCiAgICAgICAgICAgICAgICAgICAg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAxKQogICAgICAgICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUyID0gMykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUyID0gQU5ZICgnezMs N30nOjppbnRlZ2VyW10pKQorKDE3IHJvd3MpCisKK1NFVCBlbmFibGVfb3JfdHJhbnNmb3Jt YXRpb24gPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gdGVuazEg YSBqb2luIHRlbmsxIGIgb24KKyAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIp IG9yCisgICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVk ID0gNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBK b2luIEZpbHRlcjogKCgoYS51bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1ZTEgPSAyKSkgT1Ig KChhLnVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpIEFORCAoYi5odW5kcmVk ID0gNCkpKQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYgorICAgICAgICAg UmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPSAyKSBPUiAoaHVuZHJlZCA9IDQpKQorICAgICAg ICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVuazFfdW5pcXVlMQorICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVu aXF1ZTEgPSAyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRl bmsxX2h1bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVk ID0gNCkKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNj YW4gb24gdGVuazEgYQorICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEg PSAxKSBPUiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkpCisgICAgICAg ICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAg SW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDEpCiAgICAgICAgICAgICAgICAgICAgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTIgPSA3KQotKDE5IHJvd3MpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9 Jzo6aW50ZWdlcltdKSkKKygxNyByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1ZTEgPCAyMCBv ciBhLnVuaXF1ZTEgPSAzIG9yIGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9y CisgICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0g NCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChhLnVuaXF1ZTEgPCAyMCkgT1Ig KChhLnVuaXF1ZTEgPSAxKSBBTkQgKGIudW5pcXVlMSA9IDIpKSBPUiAoKGEudW5pcXVlMiA9 IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkgQU5EIChiLmh1bmRyZWQgPSA0KSkgT1IgKGEu dW5pcXVlMSA9IDMpKQorICAgLT4gIFNlcSBTY2FuIG9uIHRlbmsxIGIKKyAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYQorICAg ICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPCAyMCkgT1IgKHVuaXF1ZTEg PSAxKSBPUiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9Jzo6aW50ZWdlcltdKSkgT1IgKHVuaXF1 ZTEgPSAzKSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxIDwgMjApCisgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAxKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Vu aXF1ZTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUy ID0gQU5ZICgnezMsN30nOjppbnRlZ2VyW10pKQorICAgICAgICAgICAgICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMykKKygxNSByb3dzKQogCitSRVNF VCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb247CiAtLQogLS0gdGVzdCBwbGFjZW1lbnQgb2Yg bW92YWJsZSBxdWFscyBpbiBhIHBhcmFtZXRlcml6ZWQgam9pbiB0cmVlCiAtLQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dAppbmRleCA2NTYw ZmUyNDE2Zi4uNmU4ZDY0NjU1YjIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcGFydGl0aW9uX2pvaW4ub3V0CkBAIC0yOTYsNyArMjk2LDcgQEAgU0VMRUNUIHQxLmEs IHQxLmMsIHQyLmIsIHQyLmMgRlJPTSAoU0VMRUNUICogRlJPTSBwcnQxIFdIRVJFIGEgPCA0 NTApIHQxIEZVTEwgSk8KICAgIFNvcnQgS2V5OiBwcnQxLmEsIHBydDIuYgogICAgLT4gIEhh c2ggRnVsbCBKb2luCiAgICAgICAgICBIYXNoIENvbmQ6IChwcnQxLmEgPSBwcnQyLmIpCi0g ICAgICAgICBGaWx0ZXI6ICgocHJ0MS5iID0gMCkgT1IgKHBydDIuYSA9IDApKQorICAgICAg ICAgRmlsdGVyOiAoKHBydDIuYSA9IDApIE9SIChwcnQxLmIgPSAwKSkKICAgICAgICAgIC0+ ICBBcHBlbmQKICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX3AxIHBydDFf MQogICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYSA8IDQ1MCkKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dAppbmRleCA5YTRjNDhj MDU1Ni4uMTRhMjU0ZmJhN2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcGFydGl0aW9uX3BydW5lLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BhcnRpdGlvbl9wcnVuZS5vdXQKQEAgLTgyLDI1ICs4Miw0NyBAQCBleHBsYWluIChjb3N0 cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBudWxsOwogKDIgcm93cykKIAog ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgPSAnYScgb3Ig YSA9ICdjJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogIEFwcGVuZAogICAgLT4gIFNlcSBTY2FuIG9uIGxwX2FkIGxwXzEKLSAg ICAgICAgIEZpbHRlcjogKChhID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2MnOjpicGNoYXIp KQorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKQogICAg LT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzIKLSAgICAgICAgIEZpbHRlcjogKChhID0gJ2En OjpicGNoYXIpIE9SIChhID0gJ2MnOjpicGNoYXIpKQorICAgICAgICAgRmlsdGVyOiAoYSA9 IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKQogKDUgcm93cykKIAogZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90IG51bGwgYW5kIChhID0gJ2En IG9yIGEgPSAnYycpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEFw cGVuZAogICAgLT4gIFNlcSBTY2FuIG9uIGxwX2FkIGxwXzEKLSAgICAgICAgIEZpbHRlcjog KChhIElTIE5PVCBOVUxMKSBBTkQgKChhID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2MnOjpi cGNoYXIpKSkKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGEgPSBB TlkgKCd7YSxjfSc6OmJwY2hhcltdKSkpCiAgICAtPiAgU2VxIFNjYW4gb24gbHBfYmMgbHBf MgotICAgICAgICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFORCAoKGEgPSAnYSc6OmJw Y2hhcikgT1IgKGEgPSAnYyc6OmJwY2hhcikpKQorICAgICAgICAgRmlsdGVyOiAoKGEgSVMg Tk9UIE5VTEwpIEFORCAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKSkKICg1IHJvd3Mp CiAKK1NFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24gPSBvbjsKK2V4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2EnIG9yIGEgPSAnYyc7CisgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xCisgICAgICAgICBGaWx0ZXI6IChhID0gQU5ZICgn e2EsY30nOjpicGNoYXJbXSkpCisgICAtPiAgU2VxIFNjYW4gb24gbHBfYmMgbHBfMgorICAg ICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKQorKDUgcm93cykK KworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90 IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xCisg ICAgICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChhID0gQU5ZICgne2EsY30n OjpicGNoYXJbXSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzIKKyAgICAgICAg IEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hh cltdKSkpCisoNSByb3dzKQorCitSRVNFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb247CiBl eHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA8PiAnZyc7CiAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTE1LDEwICs1MzcsMTAgQEAgZXhwbGFpbiAoY29z dHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhIDw9IDMxOwogKDI3IHJvd3MpCiAK IGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDEgb3Ig YSA9IDc7Ci0gICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgU2VxIFNjYW4gb24gcmxwMiBybHAKLSAgIEZpbHRlcjogKChhID0gMSkgT1IgKGEgPSA3 KSkKKyAgIEZpbHRlcjogKGEgPSBBTlkgKCd7MSw3fSc6OmludGVnZXJbXSkpCiAoMiByb3dz KQogCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAx IG9yIGIgPSAnYWInOwpAQCAtNTk2LDEzICs2MTgsMTMgQEAgZXhwbGFpbiAoY29zdHMgb2Zm KSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhIDwgMSBvciAoYSA+IDIwIGFuZCBhIDwgMjUp OwogCiAtLSB3aGVyZSBjbGF1c2UgY29udHJhZGljdHMgc3ViLXBhcnRpdGlvbidzIGNvbnN0 cmFpbnQKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9 IDIwIG9yIGEgPSA0MDsKLSAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEFwcGVuZAogICAg LT4gIFNlcSBTY2FuIG9uIHJscDRfMSBybHBfMQotICAgICAgICAgRmlsdGVyOiAoKGEgPSAy MCkgT1IgKGEgPSA0MCkpCisgICAgICAgICBGaWx0ZXI6IChhID0gQU5ZICgnezIwLDQwfSc6 OmludGVnZXJbXSkpCiAgICAtPiAgU2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0IHJscF8yCi0g ICAgICAgICBGaWx0ZXI6ICgoYSA9IDIwKSBPUiAoYSA9IDQwKSkKKyAgICAgICAgIEZpbHRl cjogKGEgPSBBTlkgKCd7MjAsNDB9Jzo6aW50ZWdlcltdKSkKICg1IHJvd3MpCiAKIGV4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAzIHdoZXJlIGEgPSAyMDsgICAvKiBl bXB0eSAqLwpAQCAtNjcxLDYgKzY5MywxNjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxl Y3QgKiBmcm9tIHJscCB3aGVyZSAoYSA9IDEgYW5kIGEgPSAzKSBvciAoYSA+IDEgYW5kIGEg PQogICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChhID0gMykpIE9SICgoYSA+IDEp IEFORCAoYSA9IDE1KSkpCiAoMTEgcm93cykKIAorU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1h dGlvbiA9IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVy ZSBhID0gMSBvciBhID0gNzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg U2VxIFNjYW4gb24gcmxwMiBybHAKKyAgIEZpbHRlcjogKGEgPSBBTlkgKCd7MSw3fSc6Omlu dGVnZXJbXSkpCisoMiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZy b20gcmxwIHdoZXJlIGEgPSAxIG9yIGIgPSAnYWInOworICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4g IFNlcSBTY2FuIG9uIHJscDEgcmxwXzEKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1Ig KChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDIgcmxw XzIKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRl eHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNhYmNkIHJscF8zCisgICAgICAgICBGaWx0 ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBybHA0XzEgcmxwXzQKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChi KTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfMiBybHBf NQorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4 dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJscF82CisgICAgICAgICBG aWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKyAgIC0+ICBT ZXEgU2NhbiBvbiBybHA1XzEgcmxwXzcKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1Ig KChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfZGVm YXVsdCBybHBfOAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0g J2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfMTAgcmxwXzkK KyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQp KQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0XzMwIHJscF8xMAorICAgICAgICAg RmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAg U2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfbnVsbCBybHBfMTEKKyAgICAgICAgIEZpbHRlcjog KChhID0gMSkgT1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2Fu IG9uIHJscF9kZWZhdWx0X2RlZmF1bHQgcmxwXzEyCisgICAgICAgICBGaWx0ZXI6ICgoYSA9 IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKygyNSByb3dzKQorCitleHBsYWlu IChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPiAyMCBhbmQgYSA8IDI3 OworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2Vx IFNjYW4gb24gcmxwNF8xIHJscF8xCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDIwKSBBTkQg KGEgPCAyNykpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8yIHJscF8yCisgICAgICAgICBG aWx0ZXI6ICgoYSA+IDIwKSBBTkQgKGEgPCAyNykpCisoNSByb3dzKQorCitleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAyOTsKKyAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg U2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJscAorICAgRmlsdGVyOiAoYSA9IDI5KQorKDIg cm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBh ID49IDI5OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBl bmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0X2RlZmF1bHQgcmxwXzEKKyAgICAgICAgIEZp bHRlcjogKGEgPj0gMjkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNV8xIHJscF8yCisgICAg ICAgICBGaWx0ZXI6IChhID49IDI5KQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfZGVmYXVs dCBybHBfMworICAgICAgICAgRmlsdGVyOiAoYSA+PSAyOSkKKyAgIC0+ICBTZXEgU2NhbiBv biBybHBfZGVmYXVsdF8zMCBybHBfNAorICAgICAgICAgRmlsdGVyOiAoYSA+PSAyOSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF9kZWZhdWx0IHJscF81CisgICAgICAgICBG aWx0ZXI6IChhID49IDI5KQorKDExIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2Vs ZWN0ICogZnJvbSBybHAgd2hlcmUgYSA8IDEgb3IgKGEgPiAyMCBhbmQgYSA8IDI1KTsKKyAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcmxwMSBybHBfMQorICAgICAgICAgRmls dGVyOiAoKGEgPCAxKSBPUiAoKGEgPiAyMCkgQU5EIChhIDwgMjUpKSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBybHA0XzEgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhIDwgMSkgT1IgKChh ID4gMjApIEFORCAoYSA8IDI1KSkpCisoNSByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYp IHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAyMCBvciBhID0gNDA7CisgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ ICBTZXEgU2NhbiBvbiBybHA0XzEgcmxwXzEKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkg KCd7MjAsNDB9Jzo6aW50ZWdlcltdKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA1X2RlZmF1 bHQgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7MjAsNDB9Jzo6aW50ZWdl cltdKSkKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBy bHAzIHdoZXJlIGEgPSAyMDsgICAvKiBlbXB0eSAqLworICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPbmUtVGlt ZSBGaWx0ZXI6IGZhbHNlCisoMiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAqIGZyb20gcmxwIHdoZXJlIGEgPiAxIGFuZCBhID0gMTA7CS8qIG9ubHkgZGVmYXVsdCAq LworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0XzEwIHJscAor ICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPSAxMCkpCisoMiByb3dzKQorCitleHBsYWlu IChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPiAxIGFuZCBhID49MTU7 CS8qIHJscDMgb253YXJkcywgaW5jbHVkaW5nIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBv biBybHAzYWJjZCBybHBfMQorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0g MTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNlZmdoIHJscF8yCisgICAgICAgICBGaWx0 ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwM251 bGx4eSBybHBfMworICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQor ICAgLT4gIFNlcSBTY2FuIG9uIHJscDNfZGVmYXVsdCBybHBfNAorICAgICAgICAgRmlsdGVy OiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfMSBy bHBfNQorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4g IFNlcSBTY2FuIG9uIHJscDRfMiBybHBfNgorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBB TkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfZGVmYXVsdCBybHBfNwor ICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDVfMSBybHBfOAorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEg Pj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfZGVmYXVsdCBybHBfOQorICAgICAg ICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQgKGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9u IHJscF9kZWZhdWx0XzMwIHJscF8xMAorICAgICAgICAgRmlsdGVyOiAoKGEgPiAxKSBBTkQg KGEgPj0gMTUpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0X2RlZmF1bHQgcmxw XzExCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisoMjMgcm93 cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0g MSBhbmQgYSA9IDM7CS8qIGVtcHR5ICovCisgICAgICAgIFFVRVJZIFBMQU4gICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE9uZS1UaW1lIEZpbHRl cjogZmFsc2UKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJv bSBybHAgd2hlcmUgKGEgPSAxIGFuZCBhID0gMykgb3IgKGEgPiAxIGFuZCBhID0gMTUpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNlcSBTY2Fu IG9uIHJscDIgcmxwXzEKKyAgICAgICAgIEZpbHRlcjogKCgoYSA9IDEpIEFORCAoYSA9IDMp KSBPUiAoKGEgPiAxKSBBTkQgKGEgPSAxNSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNh YmNkIHJscF8yCisgICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAzKSkgT1Ig KChhID4gMSkgQU5EIChhID0gMTUpKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHAzZWZnaCBy bHBfMworICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChhID0gMykpIE9SICgoYSA+ IDEpIEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwM251bGx4eSBybHBf NAorICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChhID0gMykpIE9SICgoYSA+IDEp IEFORCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwM19kZWZhdWx0IHJscF81 CisgICAgICAgICBGaWx0ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAzKSkgT1IgKChhID4gMSkg QU5EIChhID0gMTUpKSkKKygxMSByb3dzKQorCitSRVNFVCBlbmFibGVfb3JfdHJhbnNmb3Jt YXRpb247CiAtLSBtdWx0aS1jb2x1bW4ga2V5cwogY3JlYXRlIHRhYmxlIG1jM3AgKGEgaW50 LCBiIGludCwgYyBpbnQpIHBhcnRpdGlvbiBieSByYW5nZSAoYSwgYWJzKGIpLCBjKTsKIGNy ZWF0ZSB0YWJsZSBtYzNwX2RlZmF1bHQgcGFydGl0aW9uIG9mIG1jM3AgZGVmYXVsdDsKQEAg LTE5MzMsMTAgKzIxMTIsMTAgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9t IGhwIHdoZXJlIGEgPSAxIGFuZCBiID0gJ2FiY2RlJzsKIAogZXhwbGFpbiAoY29zdHMgb2Zm KSBzZWxlY3QgKiBmcm9tIGhwIHdoZXJlIGEgPSAxIGFuZCBiID0gJ2FiY2RlJyBhbmQKICAg KGMgPSAyIG9yIGMgPSAzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogIFNlcSBTY2FuIG9uIGhwMiBocAotICAgRmlsdGVyOiAoKGEgPSAxKSBBTkQgKGIgPSAn YWJjZGUnOjp0ZXh0KSBBTkQgKChjID0gMikgT1IgKGMgPSAzKSkpCisgICBGaWx0ZXI6ICgo YyA9IEFOWSAoJ3syLDN9Jzo6aW50ZWdlcltdKSkgQU5EIChhID0gMSkgQU5EIChiID0gJ2Fi Y2RlJzo6dGV4dCkpCiAoMiByb3dzKQogCiBkcm9wIHRhYmxlIGhwMjsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggMDUwNzAzOTNiOTkuLmM5MjdjMjFkZDRkIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAtMjQ5NSw3ICsyNDk1LDcg QEAgcGdfc3RhdHN8IFNFTEVDVCBuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKICAgICAgSk9J TiBwZ19jbGFzcyBjIE9OICgoYy5vaWQgPSBzLnN0YXJlbGlkKSkpCiAgICAgIEpPSU4gcGdf YXR0cmlidXRlIGEgT04gKCgoYy5vaWQgPSBhLmF0dHJlbGlkKSBBTkQgKGEuYXR0bnVtID0g cy5zdGFhdHRudW0pKSkpCiAgICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4u b2lkID0gYy5yZWxuYW1lc3BhY2UpKSkKLSAgV0hFUkUgKChOT1QgYS5hdHRpc2Ryb3BwZWQp IEFORCBoYXNfY29sdW1uX3ByaXZpbGVnZShjLm9pZCwgYS5hdHRudW0sICdzZWxlY3QnOjp0 ZXh0KSBBTkQgKChjLnJlbHJvd3NlY3VyaXR5ID0gZmFsc2UpIE9SIChOT1Qgcm93X3NlY3Vy aXR5X2FjdGl2ZShjLm9pZCkpKSk7CisgIFdIRVJFICgoTk9UIGEuYXR0aXNkcm9wcGVkKSBB TkQgaGFzX2NvbHVtbl9wcml2aWxlZ2UoYy5vaWQsIGEuYXR0bnVtLCAnc2VsZWN0Jzo6dGV4 dCkgQU5EICgoTk9UIHJvd19zZWN1cml0eV9hY3RpdmUoYy5vaWQpKSBPUiAoYy5yZWxyb3dz ZWN1cml0eSA9IGZhbHNlKSkpOwogcGdfc3RhdHNfZXh0fCBTRUxFQ1QgY24ubnNwbmFtZSBB UyBzY2hlbWFuYW1lLAogICAgIGMucmVsbmFtZSBBUyB0YWJsZW5hbWUsCiAgICAgc24ubnNw bmFtZSBBUyBzdGF0aXN0aWNzX3NjaGVtYW5hbWUsCkBAIC0yNTI2LDcgKzI1MjYsNyBAQCBw Z19zdGF0c19leHR8IFNFTEVDVCBjbi5uc3BuYW1lIEFTIHNjaGVtYW5hbWUsCiAgIFdIRVJF ICgoTk9UIChFWElTVFMgKCBTRUxFQ1QgMQogICAgICAgICAgICBGUk9NICh1bm5lc3Qocy5z dHhrZXlzKSBrKGspCiAgICAgICAgICAgICAgSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiAoKChh LmF0dHJlbGlkID0gcy5zdHhyZWxpZCkgQU5EIChhLmF0dG51bSA9IGsuaykpKSkKLSAgICAg ICAgICBXSEVSRSAoTk9UIGhhc19jb2x1bW5fcHJpdmlsZWdlKGMub2lkLCBhLmF0dG51bSwg J3NlbGVjdCc6OnRleHQpKSkpKSBBTkQgKChjLnJlbHJvd3NlY3VyaXR5ID0gZmFsc2UpIE9S IChOT1Qgcm93X3NlY3VyaXR5X2FjdGl2ZShjLm9pZCkpKSk7CisgICAgICAgICAgV0hFUkUg KE5PVCBoYXNfY29sdW1uX3ByaXZpbGVnZShjLm9pZCwgYS5hdHRudW0sICdzZWxlY3QnOjp0 ZXh0KSkpKSkgQU5EICgoTk9UIHJvd19zZWN1cml0eV9hY3RpdmUoYy5vaWQpKSBPUiAoYy5y ZWxyb3dzZWN1cml0eSA9IGZhbHNlKSkpOwogcGdfc3RhdHNfZXh0X2V4cHJzfCBTRUxFQ1Qg Y24ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLAogICAgIGMucmVsbmFtZSBBUyB0YWJsZW5hbWUs CiAgICAgc24ubnNwbmFtZSBBUyBzdGF0aXN0aWNzX3NjaGVtYW5hbWUsCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdC5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3NlbGVjdC5vdXQKaW5kZXggMzNhNmRjZWIwZTMuLjdhODI5YzQ0Yzdi IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdC5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zZWxlY3Qub3V0CkBAIC04NjgsMTMgKzg2 OCwxMyBAQCBzZWxlY3QgdW5pcXVlMSwgdW5pcXVlMiBmcm9tIG9uZWsyCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBCaXRtYXAg SGVhcCBTY2FuIG9uIG9uZWsyCi0gICBSZWNoZWNrIENvbmQ6ICgoKHVuaXF1ZTIgPSAxMSkg QU5EIChzdHJpbmd1MSA8ICdCJzo6bmFtZSkpIE9SICh1bmlxdWUxID0gMCkpCisgICBSZWNo ZWNrIENvbmQ6ICgodW5pcXVlMSA9IDApIE9SICgodW5pcXVlMiA9IDExKSBBTkQgKHN0cmlu Z3UxIDwgJ0InOjpuYW1lKSkpCiAgICBGaWx0ZXI6IChzdHJpbmd1MSA8ICdCJzo6bmFtZSkK ICAgIC0+ICBCaXRtYXBPcgotICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG9u ZWsyX3UyX3BydGwKLSAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUyID0gMTEp CiAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gb25lazJfdTFfcHJ0bAogICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAwKQorICAgICAgICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIG9uZWsyX3UyX3BydGwKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6ICh1bmlxdWUyID0gMTEpCiAoOCByb3dzKQogCiBzZWxlY3QgdW5pcXVlMSwgdW5p cXVlMiBmcm9tIG9uZWsyCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N0YXRzX2V4dC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5v dXQKaW5kZXggYTQzMDE1M2IyMjUuLjY1OWQ3MTJmNzVlIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zdGF0c19leHQub3V0CkBAIC0xMzIyLDE5ICsxMzIyLDE5IEBAIFNFTEVD VCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMgV0hFUkUKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jv d3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEgPSAx IE9SIGEgPSA1MSkgQU5EIGIgPSAnJzEnJycpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKIC0t LS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisgICAgICAgMTAwIHwg ICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3Mo J1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEgPSAxIE9S IGEgPSA1MSkgQU5EIChiID0gJycxJycgT1IgYiA9ICcnMicnKScpOwogIGVzdGltYXRlZCB8 IGFjdHVhbCAKIC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisg ICAgICAgMTAwIHwgICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0 aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hF UkUgKGEgPSAxIE9SIGEgPSAyIE9SIGEgPSA1MSBPUiBhID0gNTIpIEFORCAoYiA9ICcnMScn IE9SIGIgPSAnJzInJyknKTsKICBlc3RpbWF0ZWQgfCBhY3R1YWwgCiAtLS0tLS0tLS0tLSst LS0tLS0tLQotICAgICAgIDE5NyB8ICAgIDIwMAorICAgICAgIDIwMCB8ICAgIDIwMAogKDEg cm93KQogCiAtLSBPUiBjbGF1c2VzIHJlZmVyZW5jaW5nIGRpZmZlcmVudCBhdHRyaWJ1dGVz IGFyZSBpbmNvbXBhdGlibGUKQEAgLTE2NjQsMTkgKzE2NjQsMTkgQEAgU0VMRUNUICogRlJP TSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyBXSEVSRQogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VM RUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoKGEgKiAyKSA9IDIg T1IgKGEgKiAyKSA9IDEwMikgQU5EIHVwcGVyKGIpID0gJycxJycnKTsKICBlc3RpbWF0ZWQg fCBhY3R1YWwgCiAtLS0tLS0tLS0tLSstLS0tLS0tLQotICAgICAgICA5OSB8ICAgIDEwMAor ICAgICAgIDEwMCB8ICAgIDEwMAogKDEgcm93KQogCiBTRUxFQ1QgKiBGUk9NIGNoZWNrX2Vz dGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIFdI RVJFICgoYSAqIDIpID0gMiBPUiAoYSAqIDIpID0gMTAyKSBBTkQgKHVwcGVyKGIpID0gJycx JycgT1IgdXBwZXIoYikgPSAnJzInJyknKTsKICBlc3RpbWF0ZWQgfCBhY3R1YWwgCiAtLS0t LS0tLS0tLSstLS0tLS0tLQotICAgICAgICA5OSB8ICAgIDEwMAorICAgICAgIDEwMCB8ICAg IDEwMAogKDEgcm93KQogCiBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdT RUxFQ1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIFdIRVJFICgoYSAqIDIpID0g MiBPUiAoYSAqIDIpID0gNCBPUiAoYSAqIDIpID0gMTAyIE9SIChhICogMikgPSAxMDQpIEFO RCAodXBwZXIoYikgPSAnJzEnJyBPUiB1cHBlcihiKSA9ICcnMicnKScpOwogIGVzdGltYXRl ZCB8IGFjdHVhbCAKIC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgMTk3IHwgICAgMjAw CisgICAgICAgMjAwIHwgICAgMjAwCiAoMSByb3cpCiAKIC0tIE9SIGNsYXVzZXMgcmVmZXJl bmNpbmcgZGlmZmVyZW50IGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQKaW5kZXggMjcxMzEzZWJmODYuLmM2YzZiOWZiOGQ5IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTIzLDYgKzEyMyw3IEBAIHNl bGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdl bmFibGUlJzsKICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJs ZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX25lc3Rsb29wICAgICAg ICAgICAgICAgIHwgb24KKyBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24gICAgICAgfCBvbgog IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgICAgICAgICB8IG9uCiAgZW5hYmxlX3BhcmFsbGVs X2hhc2ggICAgICAgICAgIHwgb24KICBlbmFibGVfcGFydGl0aW9uX3BydW5pbmcgICAgICAg fCBvbgpAQCAtMTMzLDcgKzEzNCw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdf c2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAg ICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8 IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyMiByb3dzKQor KDIzIHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlv bnMgZm9yIHZhcmlvdXMgdHlwZXMuCiBzZWxlY3QgdHlwZSwgY291bnQoKikgPiAwIGFzIG9r IEZST00gcGdfd2FpdF9ldmVudHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvdGlkc2Nhbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4u b3V0CmluZGV4IGYxMzNiNWE0YWM3Li4yYTA3OWU5OTZiMiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC90aWRzY2FuLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3RpZHNjYW4ub3V0CkBAIC00MywxMCArNDMsMjYgQEAgU0VMRUNUIGN0aWQs ICogRlJPTSB0aWRzY2FuIFdIRVJFICcoMCwxKScgPSBjdGlkOwogLS0gT1InZCBjbGF1c2Vz CiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hF UkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBUaWQgU2NhbiBvbiB0aWRzY2FuCisgICBUSUQgQ29uZDogKGN0aWQgPSBB TlkgKCd7IigwLDIpIiwiKDAsMSkifSc6OnRpZFtdKSkKKygyIHJvd3MpCisKK1NFTEVDVCBj dGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0g Y3RpZDsKKyBjdGlkICB8IGlkIAorLS0tLS0tLSstLS0tCisgKDAsMSkgfCAgMQorICgwLDIp IHwgIDIKKygyIHJvd3MpCisKK1NFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24gPSBvbjsK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVS RSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3RpZDsKKyAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBUaWQgU2NhbiBv biB0aWRzY2FuCi0gICBUSUQgQ29uZDogKChjdGlkID0gJygwLDIpJzo6dGlkKSBPUiAoJygw LDEpJzo6dGlkID0gY3RpZCkpCisgICBUSUQgQ29uZDogKGN0aWQgPSBBTlkgKCd7IigwLDIp IiwiKDAsMSkifSc6OnRpZFtdKSkKICgyIHJvd3MpCiAKIFNFTEVDVCBjdGlkLCAqIEZST00g dGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3RpZDsKQEAgLTU2 LDYgKzcyLDcgQEAgU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAn KDAsMiknIE9SICcoMCwxKScgPSBjdGlkOwogICgwLDIpIHwgIDIKICgyIHJvd3MpCiAKK1JF U0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbjsKIC0tIGN0aWQgPSBTY2FsYXJBcnJheU9w IC0gaW1wbGVtZW50ZWQgYXMgdGlkc2NhbgogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNU IGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSBBTlkoQVJSQVlbJygwLDEpJywg JygwLDIpJ106OnRpZFtdKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Ny ZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3Fs CmluZGV4IGQ0OWNlOWYzMDA3Li40OGJiMWJjMGEwYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9jcmVhdGVfaW5kZXguc3FsCkBAIC03MzcsNiArNzM3LDM4IEBAIFNFTEVDVCBjb3VudCgq KSBGUk9NIHRlbmsxCiBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQogICBXSEVSRSBodW5k cmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOwogCitTRVQg ZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uID0gb247CitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91 cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0gNDIpOworU0VMRUNUICogRlJP TSB0ZW5rMQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRl bnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAo dGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKK1NFTEVDVCBjb3VudCgqKSBGUk9N IHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhv dXNhbmQgPSA5OSk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1Ig dGVudGhvdXMgPSAzKSBPUiB0aG91c2FuZCA9IDQxOworU0VMRUNUIGNvdW50KCopIEZST00g dGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50 aG91cyA9IDMpIE9SIHRob3VzYW5kID0gNDE7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRo b3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3Vz YW5kID0gNDE7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVk ID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMg PCAyKSBPUiB0aG91c2FuZCA9IDQxOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg Y291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2Fu ZCA9IDQyIE9SIHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMg PSAyKTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0 MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5 IEFORCB0ZW50aG91cyA9IDIpOworUkVTRVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uOwor CiAtLQogLS0gQ2hlY2sgYmVoYXZpb3Igd2l0aCBkdXBsaWNhdGUgaW5kZXggY29sdW1uIGNv bnRlbnRzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAppbmRleCA4YThhNjNiZDJmMS4uNTVk N2UyYWU3ZDYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCkBAIC0xNDA4LDYgKzE0MDgsMTYg QEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVu azEgYiBvbgogICAoYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKICAgKChh LnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKK1NF VCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24gPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAgKGEudW5pcXVlMSA9 IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCisgICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1 ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0gNCk7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1ZTEgPCAyMCBv ciBhLnVuaXF1ZTEgPSAzIG9yIGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9y CisgICgoYS51bmlxdWUyID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0g NCk7CitSRVNFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb247CiAKIC0tCiAtLSB0ZXN0IHBs YWNlbWVudCBvZiBtb3ZhYmxlIHF1YWxzIGluIGEgcGFyYW1ldGVyaXplZCBqb2luIHRyZWUK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCmluZGV4IDdiZjM5 MjA4MjdmLi4xZTI3MGFlOWMwNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv cGFydGl0aW9uX3BydW5lLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRp b25fcHJ1bmUuc3FsCkBAIC0yMSw2ICsyMSwxMiBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBub3QgbnVsbDsKIGV4cGxhaW4gKGNvc3RzIG9m Zikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG51bGw7CiBleHBsYWluIChjb3N0cyBv ZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA9ICdhJyBvciBhID0gJ2MnOwogZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90IG51bGwgYW5k IChhID0gJ2EnIG9yIGEgPSAnYycpOworCitTRVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9u ID0gb247CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA9 ICdhJyBvciBhID0gJ2MnOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxw IHdoZXJlIGEgaXMgbm90IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycpOworUkVTRVQg ZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uOworCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAqIGZyb20gbHAgd2hlcmUgYSA8PiAnZyc7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAqIGZyb20gbHAgd2hlcmUgYSA8PiAnYScgYW5kIGEgPD4gJ2QnOwogZXhwbGFpbiAoY29z dHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgbm90IGluICgnYScsICdkJyk7CkBA IC05OSw2ICsxMDUsMjIgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJs cCB3aGVyZSBhID4gMSBhbmQgYSA+PTE1OwkvKiBybHAzIG9ud2FyZHMsIGkKIGV4cGxhaW4g KGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDEgYW5kIGEgPSAzOwkv KiBlbXB0eSAqLwogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVy ZSAoYSA9IDEgYW5kIGEgPSAzKSBvciAoYSA+IDEgYW5kIGEgPSAxNSk7CiAKKworU0VUIGVu YWJsZV9vcl90cmFuc2Zvcm1hdGlvbiA9IG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxl Y3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBhID0gNzsKK2V4cGxhaW4gKGNvc3RzIG9m Zikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDEgb3IgYiA9ICdhYic7CitleHBsYWlu IChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPiAyMCBhbmQgYSA8IDI3 OworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMjk7 CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPj0gMjk7 CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPCAxIG9y IChhID4gMjAgYW5kIGEgPCAyNSk7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZy b20gcmxwIHdoZXJlIGEgPSAyMCBvciBhID0gNDA7CitleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gcmxwMyB3aGVyZSBhID0gMjA7ICAgLyogZW1wdHkgKi8KK2V4cGxhaW4g KGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDEgYW5kIGEgPSAxMDsJ Lyogb25seSBkZWZhdWx0ICovCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20g cmxwIHdoZXJlIGEgPiAxIGFuZCBhID49MTU7CS8qIHJscDMgb253YXJkcywgaW5jbHVkaW5n IGRlZmF1bHQgKi8KK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hl cmUgYSA9IDEgYW5kIGEgPSAzOwkvKiBlbXB0eSAqLworZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgKiBmcm9tIHJscCB3aGVyZSAoYSA9IDEgYW5kIGEgPSAzKSBvciAoYSA+IDEgYW5k IGEgPSAxNSk7CitSRVNFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb247CisKIC0tIG11bHRp LWNvbHVtbiBrZXlzCiBjcmVhdGUgdGFibGUgbWMzcCAoYSBpbnQsIGIgaW50LCBjIGludCkg cGFydGl0aW9uIGJ5IHJhbmdlIChhLCBhYnMoYiksIGMpOwogY3JlYXRlIHRhYmxlIG1jM3Bf ZGVmYXVsdCBwYXJ0aXRpb24gb2YgbWMzcCBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdGlkc2Nhbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90aWRz Y2FuLnNxbAppbmRleCAzMTNlMGZiOWI2Ny4uMDQ5OWJlZGI5ZWIgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3RpZHNjYW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3RpZHNjYW4uc3FsCkBAIC0yMiw2ICsyMiwxMiBAQCBFWFBMQUlOIChDT1NUUyBPRkYp CiBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hFUkUgY3RpZCA9ICcoMCwyKScgT1Ig JygwLDEpJyA9IGN0aWQ7CiBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hFUkUgY3Rp ZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7CiAKK1NFVCBlbmFibGVfb3JfdHJhbnNm b3JtYXRpb24gPSBvbjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjdGlkLCAqIEZS T00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3RpZDsKK1NF TEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAs MSknID0gY3RpZDsKK1JFU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbjsKKwogLS0gY3Rp ZCA9IFNjYWxhckFycmF5T3AgLSBpbXBsZW1lbnRlZCBhcyB0aWRzY2FuCiBFWFBMQUlOIChD T1NUUyBPRkYpCiBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hFUkUgY3RpZCA9IEFO WShBUlJBWVsnKDAsMSknLCAnKDAsMiknXTo6dGlkW10pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCBkNjU5YWRiZmQ2Yy4uOTU5MWQwZDA4NGQgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0xNjQ1LDYgKzE2NDUsOCBAQCBOdW1lcmljVmFyCiBPTV91 aW50MzIKIE9QCiBPU0FQZXJHcm91cFN0YXRlCitPckNsYXVzZUdyb3VwRW50cnkKK09yQ2xh dXNlR3JvdXBLZXkKIE9TQVBlclF1ZXJ5U3RhdGUKIE9TSW5mbwogT1NTTENpcGhlcgotLSAK Mi4zNC4xCgo= --------------9SZRxFr0ADwUTxyN6XMyp2Nh Content-Type: text/x-patch; charset=UTF-8; name="0002-OR-to-ANY-in-index.diff" Content-Disposition: attachment; filename="0002-OR-to-ANY-in-index.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDY3OTIxYTA4MjYy Li5lMGQ4MzY3Mjc1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv YWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j CkBAIC01MCw2ICs1MCwxMiBAQAogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNp bmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNj YWNoZS5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2VyY2UuaCIKKyNpbmNsdWRlICJj b21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgorI2lu Y2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUu aCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogCiAKIC8qIEJpdG1hc2sgZmxh Z3MgZm9yIHB1c2hkb3duX3NhZmV0eV9pbmZvLnVuc2FmZUZsYWdzICovCkBAIC0xNjUsNiAr MTcxLDM5MCBAQCBzdGF0aWMgdm9pZCByZW1vdmVfdW51c2VkX3N1YnF1ZXJ5X291dHB1dHMo UXVlcnkgKnN1YnF1ZXJ5LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJICAgQml0bWFw c2V0ICpleHRyYV91c2VkX2F0dHJzKTsKIAogCitib29sCQllbmFibGVfb3JfdHJhbnNmb3Jt YXRpb24gPSB0cnVlOwordHlwZWRlZiBzdHJ1Y3QgT3JDbGF1c2VHcm91cEtleQoreworCUV4 cHIgICAqZXhwcjsgLyogUG9pbnRlciB0byB0aGUgZXhwcmVzc2lvbiB0cmVlIHdoaWNoIGhh cyBiZWVuIGEgc291cmNlIGZvcgorCQkJCQl0aGUgaGFzaGtleSB2YWx1ZSAqLworCU9pZAkJ b3BubzsKKwlPaWQJCWV4cHJ0eXBlOworfSBPckNsYXVzZUdyb3VwS2V5OworCit0eXBlZGVm IHN0cnVjdCBPckNsYXVzZUdyb3VwRW50cnkKK3sKKwlPckNsYXVzZUdyb3VwS2V5IGtleTsK KwlOb2RlCQkgICAqbm9kZTsKKwlMaXN0CQkgICAqY29uc3RzOworCU9pZAkJCQljb2xsYXRp b247CisJUmVzdHJpY3RJbmZvICAgKnJpbmZvOworCUxpc3QgCQkgICAqZXhwcnM7Cit9IE9y Q2xhdXNlR3JvdXBFbnRyeTsKKworLyoKKyAqIEhhc2ggZnVuY3Rpb24gdGhhdCdzIGNvbXBh dGlibGUgd2l0aCBndWNfbmFtZV9jb21wYXJlCisgKi8KK3N0YXRpYyB1aW50MzIKK29yY2xh dXNlX2hhc2goY29uc3Qgdm9pZCAqZGF0YSwgU2l6ZSBrZXlzaXplKQoreworCU9yQ2xhdXNl R3JvdXBLZXkgICAqa2V5ID0gKE9yQ2xhdXNlR3JvdXBLZXkgKikgZGF0YTsKKwl1aW50NjQJ CQkJaGFzaDsKKworCSh2b2lkKSBKdW1ibGVFeHByKGtleS0+ZXhwciwgJmhhc2gpOworCWhh c2ggPSAoKHVpbnQ2NCkga2V5LT5vcG5vICsgKHVpbnQ2NCkga2V5LT5leHBydHlwZSkgJSBV SU5UNjRfTUFYOworCXJldHVybiBoYXNoOworfQorCitzdGF0aWMgdm9pZCAqCitvcmNsYXVz ZV9rZXljb3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgU2l6ZSBrZXlzaXplKQor eworCU9yQ2xhdXNlR3JvdXBLZXkgKnNyY19rZXkgPSAoT3JDbGF1c2VHcm91cEtleSAqKSBz cmM7CisJT3JDbGF1c2VHcm91cEtleSAqZHN0X2tleSA9IChPckNsYXVzZUdyb3VwS2V5ICop IGRlc3Q7CisKKwlBc3NlcnQoc2l6ZW9mKE9yQ2xhdXNlR3JvdXBLZXkpID09IGtleXNpemUp OworCisJZHN0X2tleS0+ZXhwciA9IHNyY19rZXktPmV4cHI7CisJZHN0X2tleS0+b3BubyA9 IHNyY19rZXktPm9wbm87CisJZHN0X2tleS0+ZXhwcnR5cGUgPSBzcmNfa2V5LT5leHBydHlw ZTsKKwlyZXR1cm4gZHN0X2tleTsKK30KKworLyoKKyAqIER5bmFoYXNoIG1hdGNoIGZ1bmN0 aW9uIHRvIHVzZSBpbiBndWNfaGFzaHRhYgorICovCitzdGF0aWMgaW50CitvcmNsYXVzZV9t YXRjaChjb25zdCB2b2lkICpkYXRhMSwgY29uc3Qgdm9pZCAqZGF0YTIsIFNpemUga2V5c2l6 ZSkKK3sKKwlPckNsYXVzZUdyb3VwS2V5ICAgKmtleTEgPSAoT3JDbGF1c2VHcm91cEtleSAq KSBkYXRhMTsKKwlPckNsYXVzZUdyb3VwS2V5ICAgKmtleTIgPSAoT3JDbGF1c2VHcm91cEtl eSAqKSBkYXRhMjsKKworCUFzc2VydChzaXplb2YoT3JDbGF1c2VHcm91cEtleSkgPT0ga2V5 c2l6ZSk7CisKKwlpZiAoa2V5MS0+b3BubyA9PSBrZXkyLT5vcG5vICYmIGtleTEtPmV4cHJ0 eXBlID09IGtleTItPmV4cHJ0eXBlICYmCisJCWVxdWFsKGtleTEtPmV4cHIsIGtleTItPmV4 cHIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogUGFzcyB0aHJv dWdoIGJhc2VyZXN0cmljdGluZm8gY2xhdXNlcyBhbmQgdHJ5IHRvIGNvbnZlcnQgT1IgY2xh dXNlcyBpbnRvIElOCisgKiBSZXR1cm4gYSBtb2RpZmllZCBjbGF1c2UgbGlzdCBvciBqdXN0 IHRoZSBzYW1lIGJhc2VyZXN0cmljdGluZm8sIGlmIG5vCisgKiBjaGFuZ2VzIGhhdmUgbWFk ZS4KKyAqIFhYWDogZG8gbm90IGNoYW5nZSBzb3VyY2UgbGlzdCBvZiBjbGF1c2VzIGF0IGFs bC4KKyAqLworc3RhdGljIExpc3QgKgordHJhbnNmb3JtX29ycyhQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqYmFzZXJlc3RyaWN0aW5mbywgYm9vbCAqc29tZXRoaW5nX2NoYW5nZWQpCit7 CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqbW9kaWZpZWRfcmluZm8gPSBOSUw7CisK KwkvKgorCSAqIENvbXBsZXhpdHkgb2YgYSBjbGF1c2UgY291bGQgYmUgYXJiaXRyYXJpbHkg c29waGlzdGljYXRlZC4gSGVyZSwgd2Ugd2lsbAorCSAqIGxvb2sgdXAgb25seSBvbiB0aGUg dG9wIGxldmVsIG9mIGNsYXVzZSBsaXN0LgorCSAqIFhYWDogSXQgaXMgc3Vic3RhbnRpYXRl ZD8gQ291bGQgd2UgY2hhbmdlIHNvbWV0aGluZyBoZXJlPworCSAqLworCWZvcmVhY2ggKGxj LCBiYXNlcmVzdHJpY3RpbmZvKQorCXsKKwkJUmVzdHJpY3RJbmZvICAgKnJpbmZvID0gbGZp cnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYyk7CisJCVJlc3RyaWN0SW5mbyAgICpyaW5mb19i YXNlID0gY29weU9iamVjdChyaW5mbyk7CisJCUxpc3QJCSAgICpvcl9saXN0ID0gTklMOwor CQlMaXN0Q2VsbAkgICAqbGNfZWFyZ3MsCisJCQkJCSAgICpsY19yYXJnczsKKwkJYm9vbAkJ CWNoYW5nZV9hcHBseSA9IGZhbHNlOworCQlIQVNIQ1RMCQkJaW5mbzsKKwkJSFRBQiAJCSAg ICpvcl9ncm91cF9odGFiID0gTlVMTDsKKwkJaW50IAkJCWxlbl9vcnM7CisJCUhBU0hfU0VR X1NUQVRVUwkJaGFzaF9zZXE7CisJCU9yQ2xhdXNlR3JvdXBFbnRyeSAqZ2VudHJ5OworCisJ CWlmICghZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uIHx8ICFyZXN0cmljdGlvbl9pc19vcl9j bGF1c2UocmluZm8pKQorCQl7CisJCQkvKiBBZGQgYSBjbGF1c2Ugd2l0aG91dCBjaGFuZ2Vz ICovCisJCQltb2RpZmllZF9yaW5mbyA9IGxhcHBlbmQobW9kaWZpZWRfcmluZm8sIHJpbmZv KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbGVuX29ycyA9ICgoQm9vbEV4cHIgKikgcmlu Zm8tPmNsYXVzZSktPmFyZ3M/IGxpc3RfbGVuZ3RoKCgoQm9vbEV4cHIgKikgcmluZm8tPmNs YXVzZSktPmFyZ3MpIDogMDsKKworCQlpZiAobGVuX29ycyA8IDIpCisJCXsKKwkJCS8qIEFk ZCBhIGNsYXVzZSB3aXRob3V0IGNoYW5nZXMgKi8KKwkJCW1vZGlmaWVkX3JpbmZvID0gbGFw cGVuZChtb2RpZmllZF9yaW5mbywgcmluZm8pOworCQkJY29udGludWU7CisJCX0KKworCQlN ZW1TZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJCWluZm8ua2V5c2l6ZSA9IHNpemVv ZihPckNsYXVzZUdyb3VwS2V5KTsKKwkJaW5mby5lbnRyeXNpemUgPSBzaXplb2YoT3JDbGF1 c2VHcm91cEVudHJ5KTsKKwkJaW5mby5oYXNoID0gb3JjbGF1c2VfaGFzaDsKKwkJaW5mby5r ZXljb3B5ID0gb3JjbGF1c2Vfa2V5Y29weTsKKwkJaW5mby5tYXRjaCA9IG9yY2xhdXNlX21h dGNoOworCQlvcl9ncm91cF9odGFiID0gaGFzaF9jcmVhdGUoIk9SIEdyb3VwcyIsCisJCQkJ CQkJCQlsZW5fb3JzLAorCQkJCQkJCQkJJmluZm8sCisJCQkJCQkJCQlIQVNIX0VMRU0gfCBI QVNIX0ZVTkNUSU9OIHwgSEFTSF9DT01QQVJFIHwgSEFTSF9LRVlDT1BZKTsKKworCQkvKgor CQkgKiBOT1RFOgorCQkgKiBJdCBpcyBhbiBPUi1jbGF1c2UuIFNvLCByaW5mby0+b3JjbGF1 c2UgaXMgYSBCb29sRXhwciBub2RlLCBjb250YWlucworCQkgKiBhIGxpc3Qgb2Ygc3ViLXJl c3RyaWN0aW5mbyBhcmdzLCBhbmQgcmluZm8tPmNsYXVzZSAtIHdoaWNoIGlzIHRoZQorCQkg KiBzYW1lIGV4cHJlc3Npb24sIG1hZGUgZnJvbSBiYXJlIGNsYXVzZXMuIFRvIG5vdCBicmVh ayBzZWxlY3Rpdml0eQorCQkgKiBjYWNoZXMgYW5kIG90aGVyIG9wdGltaXphdGlvbnMsIHVz ZSBib3RoOgorCQkgKiAtIHVzZSByaW5mb3MgZnJvbSBvcmNsYXVzZSBpZiBubyB0cmFuc2Zv cm1hdGlvbiBuZWVkZWQKKwkJICogLSB1c2UgIGJhcmUgcXVhbHMgZnJvbSByaW5mby0+Y2xh dXNlIGluIHRoZSBjYXNlIG9mIHRyYW5zZm9ybWF0aW9uLAorCQkgKiB0byBjcmVhdGUgbmV3 IFJlc3RyaWN0SW5mbzogaW4gdGhpcyBjYXNlIHdlIGhhdmUgbm8gb3B0aW9ucyB0byBhdm9p ZAorCQkgKiBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uIHByb2NlZHVyZS4KKwkJICovCisJCWZv cmJvdGgobGNfZWFyZ3MsICgoQm9vbEV4cHIgKikgcmluZm8tPmNsYXVzZSktPmFyZ3MsCisJ CQkJbGNfcmFyZ3MsICgoQm9vbEV4cHIgKikgcmluZm8tPm9yY2xhdXNlKS0+YXJncykKKwkJ eworCQkJRXhwcgkJCSAgICpvcl9xdWFsID0gKEV4cHIgKikgbGZpcnN0KGxjX2VhcmdzKTsK KwkJCVJlc3RyaWN0SW5mbwkgICAqc3ViX3JpbmZvOworCQkJTm9kZQkJCSAgICpjb25zdF9l eHByOworCQkJTm9kZQkJCSAgICpuY29uc3RfZXhwcjsKKwkJCU9yQ2xhdXNlR3JvdXBLZXkJ CWhhc2hrZXk7CisJCQlib29sIGZvdW5kID0gZmFsc2U7CisKKwkJCS8qIEl0IG1heSBiZSBv bmUgbW9yZSBib29sZWFuIGV4cHJlc3Npb24sIHNraXAgaXQgZm9yIG5vdyAqLworCQkJaWYg KCFJc0EobGZpcnN0KGxjX3JhcmdzKSwgUmVzdHJpY3RJbmZvKSkKKwkJCXsKKwkJCQlvcl9s aXN0ID0gbGFwcGVuZChvcl9saXN0LCAodm9pZCAqKSBvcl9xdWFsKTsKKwkJCQljb250aW51 ZTsKKwkJCX0KKworCQkJc3ViX3JpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBs Y19yYXJncyk7CisKKwkJCS8qIENoZWNrOiBpdCBpcyBhbiBleHByIG9mIHRoZSBmb3JtICdG KHgpIG9wZXIgQ29uc3RFeHByJyAqLworCQkJaWYgKCFJc0Eob3JfcXVhbCwgT3BFeHByKSB8 fAorCQkJCSEoYm1zX2lzX2VtcHR5KHN1Yl9yaW5mby0+bGVmdF9yZWxpZHMpIF4KKwkJCQli bXNfaXNfZW1wdHkoc3ViX3JpbmZvLT5yaWdodF9yZWxpZHMpKSB8fAorCQkJCWNvbnRhaW5f dm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIG9yX3F1YWwpKQorCQkJeworCQkJCS8qIEFn YWluLCBpdCdzIG5vdCB0aGUgZXhwciB3ZSBjYW4gdHJhbnNmb3JtICovCisJCQkJb3JfbGlz dCA9IGxhcHBlbmQob3JfbGlzdCwgKHZvaWQgKikgb3JfcXVhbCk7CisJCQkJY29udGludWU7 CisJCQl9CisKKwkJCS8qIEdldCBwb2ludGVycyB0byBjb25zdGFudCBhbmQgZXhwcmVzc2lv biBzaWRlcyBvZiB0aGUgY2xhdXNlICovCisJCQljb25zdF9leHByID1ibXNfaXNfZW1wdHko c3ViX3JpbmZvLT5sZWZ0X3JlbGlkcykgPworCQkJCQkJCQkJCQkJZ2V0X2xlZnRvcChzdWJf cmluZm8tPmNsYXVzZSkgOgorCQkJCQkJCQkJCQkJZ2V0X3JpZ2h0b3Aoc3ViX3JpbmZvLT5j bGF1c2UpOworCQkJbmNvbnN0X2V4cHIgPSBibXNfaXNfZW1wdHkoc3ViX3JpbmZvLT5sZWZ0 X3JlbGlkcykgPworCQkJCQkJCQkJCQkJZ2V0X3JpZ2h0b3Aoc3ViX3JpbmZvLT5jbGF1c2Up IDoKKwkJCQkJCQkJCQkJCWdldF9sZWZ0b3Aoc3ViX3JpbmZvLT5jbGF1c2UpOworCisJCQlp ZiAoIW9wX21lcmdlam9pbmFibGUoKChPcEV4cHIgKikgc3ViX3JpbmZvLT5jbGF1c2UpLT5v cG5vLCBleHByVHlwZShuY29uc3RfZXhwcikpKQorCQkJeworCQkJCS8qIEFuZCBhZ2Fpbiwg ZmlsdGVyIG91dCBub24tZXF1YWxpdHkgb3BlcmF0b3JzICovCisJCQkJb3JfbGlzdCA9IGxh cHBlbmQob3JfbGlzdCwgKHZvaWQgKikgb3JfcXVhbCk7CisJCQkJY29udGludWU7CisJCQl9 CisKKwkJCS8qCisJCQkgKiBBdCB0aGlzIHBvaW50IHdlIGRlZmluaXRlbHkgaGF2ZSBhIHRy YW5zZm9ybWFibGUgY2xhdXNlLgorCQkJICogQ2xhc3NpZnkgaXQgYW5kIGFkZCBpbnRvIHNw ZWNpZmljIGdyb3VwIG9mIGNsYXVzZXMsIG9yIGNyZWF0ZSBuZXcKKwkJCSAqIGdyb3VwLgor CQkJICovCisJCQloYXNoa2V5LmV4cHIgPSAoRXhwciAqKSBuY29uc3RfZXhwcjsKKwkJCWhh c2hrZXkub3BubyA9ICgoT3BFeHByICopIG9yX3F1YWwpLT5vcG5vOworCQkJaGFzaGtleS5l eHBydHlwZSA9IGV4cHJUeXBlKG5jb25zdF9leHByKTsKKwkJCWdlbnRyeSA9IGhhc2hfc2Vh cmNoKG9yX2dyb3VwX2h0YWIsICZoYXNoa2V5LCBIQVNIX0VOVEVSLCAmZm91bmQpOworCisJ CQlpZiAodW5saWtlbHkoZm91bmQpKQorCQkJeworCQkJCWdlbnRyeS0+Y29uc3RzID0gbGFw cGVuZChnZW50cnktPmNvbnN0cywgY29uc3RfZXhwcik7CisJCQkJZ2VudHJ5LT5leHBycyA9 IGxhcHBlbmQoZ2VudHJ5LT5leHBycywgb3JfcXVhbCk7CisJCQl9CisJCQllbHNlCisJCQl7 CisJCQkJZ2VudHJ5LT5ub2RlID0gbmNvbnN0X2V4cHI7CisJCQkJZ2VudHJ5LT5jb25zdHMg PSBsaXN0X21ha2UxKGNvbnN0X2V4cHIpOworCQkJCWdlbnRyeS0+ZXhwcnMgPSBsaXN0X21h a2UxKG9yX3F1YWwpOworCQkJCWdlbnRyeS0+cmluZm8gPSBzdWJfcmluZm87CisJCQkJZ2Vu dHJ5LT5jb2xsYXRpb24gPSBleHBySW5wdXRDb2xsYXRpb24oKE5vZGUgKilzdWJfcmluZm8t PmNsYXVzZSk7CisJCQl9CisJCX0KKworCQlpZiAobGlzdF9sZW5ndGgob3JfbGlzdCkgPT0g bGVuX29ycykKKwkJeworCQkJLyoKKwkJCSogTm8gYW55IHRyYW5zZm9ybWF0aW9ucyBwb3Nz aWJsZSB3aXRoIHRoaXMgbGlzdCBvZiBhcmd1bWVudHMuIEhlcmUgd2UKKwkJCSogYWxyZWFk eSBtYWRlIGFsbCB1bmRlcmx5aW5nIHRyYW5zZm9ybWF0aW9ucy4gVGh1cywganVzdCByZXR1 cm4gdGhlCisJCQkqIHRyYW5zZm9ybWVkIGJvb2wgZXhwcmVzc2lvbi4KKwkJCSovCisJCQlt b2RpZmllZF9yaW5mbyA9IGxhcHBlbmQobW9kaWZpZWRfcmluZm8sIHJpbmZvKTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJaWYgKCFvcl9ncm91cF9odGFiICYmIGhhc2hfZ2V0X251bV9l bnRyaWVzKG9yX2dyb3VwX2h0YWIpIDwgMSkKKwkJeworCQkJLyoKKwkJCSAqIE5vIGFueSB0 cmFuc2Zvcm1hdGlvbnMgcG9zc2libGUgd2l0aCB0aGlzIHJpbmZvLCBqdXN0IGFkZCBpdHNl bGYKKwkJCSAqIHRvIHRoZSBsaXN0IGFuZCBnbyBmdXJ0aGVyLgorCQkJICovCisJCQltb2Rp ZmllZF9yaW5mbyA9IGxhcHBlbmQobW9kaWZpZWRfcmluZm8sIHJpbmZvKTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJaGFzaF9zZXFfaW5pdCgmaGFzaF9zZXEsIG9yX2dyb3VwX2h0YWIp OworCisJCS8qIExldCdzIGNvbnZlcnQgZWFjaCBncm91cCBvZiBjbGF1c2VzIHRvIGFuIElO IG9wZXJhdGlvbi4gKi8KKworCQkvKgorCQkqIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgZ3Jv dXBzIGFuZCBjb252ZXJ0IGVhY2gsIHdoZXJlIG51bWJlciBvZgorCQkqIGNvbnN0cyBtb3Jl IHRoYW4gMS4gdHJpdmlhbCBncm91cHMgbW92ZSB0byBPUi1saXN0IGFnYWluCisJCSovCisK KwkJd2hpbGUgKChnZW50cnkgPSAoT3JDbGF1c2VHcm91cEVudHJ5ICopIGhhc2hfc2VxX3Nl YXJjaCgmaGFzaF9zZXEpKSAhPSBOVUxMKQorCQl7CisJCQlPaWQJCQkJICAgIHNjYWxhcl90 eXBlOworCQkJT2lkCQkJCQlhcnJheV90eXBlOworCisJCQlBc3NlcnQobGlzdF9sZW5ndGgo Z2VudHJ5LT5jb25zdHMpID4gMCk7CisJCQlBc3NlcnQobGlzdF9sZW5ndGgoZ2VudHJ5LT5l eHBycykgPT0gbGlzdF9sZW5ndGgoZ2VudHJ5LT5jb25zdHMpKTsKKworCQkJaWYgKGxpc3Rf bGVuZ3RoKGdlbnRyeS0+Y29uc3RzKSA9PSAxKQorCQkJeworCQkJCS8qCisJCQkJKiBPbmx5 IG9uZSBlbGVtZW50IGluIHRoZSBjbGFzcy4gUmV0dXJuIHJpbmZvIGludG8gdGhlIEJvb2xF eHByCisJCQkJKiBhcmdzIGxpc3QgdW5jaGFuZ2VkLgorCQkJCSovCisJCQkJbGlzdF9mcmVl KGdlbnRyeS0+Y29uc3RzKTsKKwkJCQlvcl9saXN0ID0gbGlzdF9jb25jYXQob3JfbGlzdCwg Z2VudHJ5LT5leHBycyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkqIERv IHRoZSB0cmFuc2Zvcm1hdGlvbi4KKwkJCSoKKwkJCSogRmlyc3Qgb2YgYWxsLCB0cnkgdG8g c2VsZWN0IGEgY29tbW9uIHR5cGUgZm9yIHRoZSBhcnJheSBlbGVtZW50cy4KKwkJCSogTm90 ZSB0aGF0IHNpbmNlIHRoZSBMSFMnIHR5cGUgaXMgZmlyc3QgaW4gdGhlIGxpc3QsIGl0IHdp bGwgYmUKKwkJCSogcHJlZmVycmVkIHdoZW4gdGhlcmUgaXMgZG91YnQgKGVnLCB3aGVuIGFs bCB0aGUgUkhTIGl0ZW1zIGFyZQorCQkJKiB1bmtub3duIGxpdGVyYWxzKS4KKwkJCSoKKwkJ CSogTm90ZTogdXNlIGxpc3RfY29uY2F0IGhlcmUgbm90IGxjb25zLCB0byBhdm9pZCBkYW1h Z2luZyBybm9udmFycy4KKwkJCSoKKwkJCSogQXMgYSBzb3VyY2Ugb2YgaW5zaWRlcywgdXNl IG1ha2Vfc2NhbGFyX2FycmF5X29wKCkKKwkJCSovCisJCQlzY2FsYXJfdHlwZSA9IGdlbnRy eS0+a2V5LmV4cHJ0eXBlOworCisJCQlpZiAoc2NhbGFyX3R5cGUgIT0gUkVDT1JET0lEICYm IE9pZElzVmFsaWQoc2NhbGFyX3R5cGUpKQorCQkJCWFycmF5X3R5cGUgPSBnZXRfYXJyYXlf dHlwZShzY2FsYXJfdHlwZSk7CisJCQllbHNlCisJCQkJYXJyYXlfdHlwZSA9IEludmFsaWRP aWQ7CisKKwkJCWlmIChhcnJheV90eXBlICE9IEludmFsaWRPaWQgJiYgc2NhbGFyX3R5cGUg IT0gSW52YWxpZE9pZCkKKwkJCXsKKwkJCQkvKgorCQkJCSogT0s6IGNvZXJjZSBhbGwgdGhl IHJpZ2h0LWhhbmQgbm9uLVZhciBpbnB1dHMgdG8gdGhlIGNvbW1vbgorCQkJCSogdHlwZSBh bmQgYnVpbGQgYW4gQXJyYXlFeHByIGZvciB0aGVtLgorCQkJCSovCisJCQkJTGlzdAkgICAq YWV4cHJzID0gTlVMTDsKKwkJCQlBcnJheUV4cHIgICpuZXdhID0gTlVMTDsKKwkJCQlTY2Fs YXJBcnJheU9wRXhwciAqc2FvcGV4cHIgPSBOVUxMOworCQkJCUhlYXBUdXBsZQkJCW9wZXJ0 dXA7CisJCQkJRm9ybV9wZ19vcGVyYXRvcglvcGVyZm9ybTsKKwkJCQlMaXN0CQkJICAgKm5h bWVsaXN0ID0gTklMOworCisJCQkJYWV4cHJzID0gZ2VudHJ5LT5jb25zdHM7CisKKwkJCQlu ZXdhID0gbWFrZU5vZGUoQXJyYXlFeHByKTsKKwkJCQkvKiBhcnJheV9jb2xsaWQgd2lsbCBi ZSBzZXQgYnkgcGFyc2VfY29sbGF0ZS5jICovCisJCQkJbmV3YS0+ZWxlbWVudF90eXBlaWQg PSBzY2FsYXJfdHlwZTsKKwkJCQluZXdhLT5hcnJheV90eXBlaWQgPSBhcnJheV90eXBlOwor CQkJCW5ld2EtPm11bHRpZGltcyA9IGZhbHNlOworCQkJCW5ld2EtPmVsZW1lbnRzID0gYWV4 cHJzOworCQkJCW5ld2EtPmxvY2F0aW9uID0gLTE7CisKKwkJCQlvcGVydHVwID0gU2VhcmNo U3lzQ2FjaGUxKE9QRVJPSUQsCisJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oZ2VudHJ5 LT5rZXkub3BubykpOworCisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZXJ0dXApKQor CQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgJXUi LAorCQkJCQkJZ2VudHJ5LT5rZXkub3Bubyk7CisKKwkJCQlvcGVyZm9ybSA9IChGb3JtX3Bn X29wZXJhdG9yKSBHRVRTVFJVQ1Qob3BlcnR1cCk7CisJCQkJaWYgKCFPcGVyYXRvcklzVmlz aWJsZShnZW50cnktPmtleS5vcG5vKSkKKwkJCQkJbmFtZWxpc3QgPSBsYXBwZW5kKG5hbWVs aXN0LCBtYWtlU3RyaW5nKGdldF9uYW1lc3BhY2VfbmFtZShvcGVyZm9ybS0+b3BybmFtZXNw YWNlKSkpOworCisJCQkJbmFtZWxpc3QgPSBsYXBwZW5kKG5hbWVsaXN0LCBtYWtlU3RyaW5n KHBzdHJkdXAoTmFtZVN0cihvcGVyZm9ybS0+b3BybmFtZSkpKSk7CisJCQkJUmVsZWFzZVN5 c0NhY2hlKG9wZXJ0dXApOworCisJCQkJc2FvcGV4cHIgPSBtYWtlTm9kZShTY2FsYXJBcnJh eU9wRXhwcik7CisJCQkJc2FvcGV4cHItPm9wbm8gPSAoKE9wRXhwciAqKSBnZW50cnktPnJp bmZvLT5jbGF1c2UpLT5vcG5vOworCQkJCXNhb3BleHByLT51c2VPciA9IHRydWU7CisJCQkJ c2FvcGV4cHItPmlucHV0Y29sbGlkID0gZ2VudHJ5LT5jb2xsYXRpb247CisJCQkJc2FvcGV4 cHItPmFyZ3MgPSBsaXN0X21ha2UyKGdlbnRyeS0+bm9kZSwgbmV3YSk7CisJCQkJc2FvcGV4 cHItPmxvY2F0aW9uID0gLTE7CisKKworCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3Qs ICh2b2lkICopIHNhb3BleHByKTsKKworCQkJCSpzb21ldGhpbmdfY2hhbmdlZCA9IHRydWU7 CisJCQkJY2hhbmdlX2FwcGx5ID0gdHJ1ZTsKKworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CWxpc3RfZnJlZShnZW50cnktPmNvbnN0cyk7CisJCQkJb3JfbGlzdCA9IGxhcHBlbmQob3Jf bGlzdCwgKHZvaWQgKikgZ2VudHJ5LT5yaW5mby0+Y2xhdXNlKTsKKwkJCX0KKwkJCWhhc2hf c2VhcmNoKG9yX2dyb3VwX2h0YWIsICZnZW50cnktPmtleSwgSEFTSF9SRU1PVkUsIE5VTEwp OworCQl9CisKKwkJaGFzaF9kZXN0cm95KG9yX2dyb3VwX2h0YWIpOworCisJCWlmICghY2hh bmdlX2FwcGx5KQorCQl7CisJCQkvKgorCQkJICogRWFjaCBncm91cCBjb250YWlucyBvbmx5 IG9uZSBlbGVtZW50IC0gdXNlIHJpbmZvIGFzIGlzLgorCQkJICovCisJCQltb2RpZmllZF9y aW5mbyA9IGxhcHBlbmQobW9kaWZpZWRfcmluZm8sIHJpbmZvKTsKKwkJCWxpc3RfZnJlZShv cl9saXN0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTWFrZSBhIG5ldyB2 ZXJzaW9uIG9mIHRoZSByZXN0cmljdGlvbi4gUmVtZW1iZXIgc291cmNlIHJlc3RyaWN0aW9u CisJCSAqIGNhbiBiZSB1c2VkIGluIGFub3RoZXIgcGF0aCAoU2VxU2NhbiwgZm9yIGV4YW1w bGUpLgorCQkgKi8KKworCQkvKiBPbmUgbW9yZSB0cmljazogYXNzZW1ibGUgY29ycmVjdCBj bGF1c2UgKi8KKwkJcmluZm8gPSBtYWtlX3Jlc3RyaWN0aW5mbyhyb290LAorCQkJCSAgbGlz dF9sZW5ndGgob3JfbGlzdCkgPiAxID8gbWFrZUJvb2xFeHByKE9SX0VYUFIsIG9yX2xpc3Qs ICgoQm9vbEV4cHIgKikgcmluZm8tPmNsYXVzZSktPmxvY2F0aW9uKSA6CisJCQkJCQkJCQkJ CSBsaW5pdGlhbChvcl9saXN0KSwKKwkJCQkgIHJpbmZvLT5pc19wdXNoZWRfZG93biwKKwkJ CQkgIHJpbmZvLT5oYXNfY2xvbmUsCisJCQkJICByaW5mby0+aXNfY2xvbmUsCisJCQkJICBy aW5mby0+cHNldWRvY29uc3RhbnQsCisJCQkJICByaW5mby0+c2VjdXJpdHlfbGV2ZWwsCisJ CQkJICByaW5mby0+cmVxdWlyZWRfcmVsaWRzLAorCQkJCSAgcmluZm8tPmluY29tcGF0aWJs ZV9yZWxpZHMsCisJCQkJICByaW5mby0+b3V0ZXJfcmVsaWRzKTsKKwkJcmluZm8tPmV2YWxf Y29zdD1yaW5mb19iYXNlLT5ldmFsX2Nvc3Q7CisJCXJpbmZvLT5ub3JtX3NlbGVjPXJpbmZv X2Jhc2UtPm5vcm1fc2VsZWM7CisJCXJpbmZvLT5vdXRlcl9zZWxlYz1yaW5mb19iYXNlLT5v dXRlcl9zZWxlYzsKKwkJcmluZm8tPmxlZnRfYnVja2V0c2l6ZT1yaW5mb19iYXNlLT5sZWZ0 X2J1Y2tldHNpemU7CisJCXJpbmZvLT5yaWdodF9idWNrZXRzaXplPXJpbmZvX2Jhc2UtPnJp Z2h0X2J1Y2tldHNpemU7CisJCXJpbmZvLT5sZWZ0X21jdmZyZXE9cmluZm9fYmFzZS0+bGVm dF9tY3ZmcmVxOworCQlyaW5mby0+cmlnaHRfbWN2ZnJlcT1yaW5mb19iYXNlLT5yaWdodF9t Y3ZmcmVxOworCQltb2RpZmllZF9yaW5mbyA9IGxhcHBlbmQobW9kaWZpZWRfcmluZm8sIHJp bmZvKTsKKwkJKnNvbWV0aGluZ19jaGFuZ2VkID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIENo ZWNrIGlmIHRyYW5zZm9ybWF0aW9uIGhhcyBtYWRlLiBJZiBub3RoaW5nIGNoYW5nZWQgLSBy ZXR1cm4KKwkgKiBiYXNlcmVzdHJpY3RpbmZvIGFzIGlzLgorCSAqLworCWlmICgqc29tZXRo aW5nX2NoYW5nZWQpCisJeworCQlyZXR1cm4gbW9kaWZpZWRfcmluZm87CisJfQorCisJbGlz dF9mcmVlKG1vZGlmaWVkX3JpbmZvKTsKKwlyZXR1cm4gYmFzZXJlc3RyaWN0aW5mbzsKK30K KwogLyoKICAqIG1ha2Vfb25lX3JlbAogICoJICBGaW5kcyBhbGwgcG9zc2libGUgYWNjZXNz IHBhdGhzIGZvciBleGVjdXRpbmcgYSBxdWVyeSwgcmV0dXJuaW5nIGEKQEAgLTc2Nyw2ICsx MTU3LDEyIEBAIHN0YXRpYyB2b2lkCiBzZXRfcGxhaW5fcmVsX3BhdGhsaXN0KFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIHsKIAlS ZWxpZHMJCXJlcXVpcmVkX291dGVyOworCVJlbE9wdEluZm8gKnJlTF9hbHRlcm5hdGl2ZSA9 IG1ha2VOb2RlKFJlbE9wdEluZm8pOworCS8vcmVMX2FsdGVybmF0aXZlID0gY29weU9iamVj dChyZWwpOworCXJlTF9hbHRlcm5hdGl2ZSA9IGNvcHlfc2ltcGxlX3JlbChyb290LCByZWwt PnJlbGlkLCByZWwsIHJlTF9hbHRlcm5hdGl2ZSk7CisJcmVMX2FsdGVybmF0aXZlLT5pbmRl eGxpc3QgPSBOSUw7CisJcmVMX2FsdGVybmF0aXZlLT5iYXNlcmVzdHJpY3RpbmZvID0gcmVs LT5iYXNlcmVzdHJpY3RpbmZvOworCXJlTF9hbHRlcm5hdGl2ZS0+ZWNsYXNzX2luZGV4ZXMg PSBOVUxMOwogCiAJLyoKIAkgKiBXZSBkb24ndCBzdXBwb3J0IHB1c2hpbmcgam9pbiBjbGF1 c2VzIGludG8gdGhlIHF1YWxzIG9mIGEgc2Vxc2NhbiwgYnV0CkBAIC03ODcsNiArMTE4Mywz OSBAQCBzZXRfcGxhaW5fcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAogCS8qIENvbnNpZGVyIFRJRCBzY2Fu cyAqLwogCWNyZWF0ZV90aWRzY2FuX3BhdGhzKHJvb3QsIHJlbCk7CisKKwlzZXRfY2hlYXBl c3QocmVsKTsKKworCWlmIChyZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwgJiYg ZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uKQorCXsKKwkJYm9vbCBhcHBsaWVkX3RyYW5zZm9t YXRpb247CisJCWFwcGxpZWRfdHJhbnNmb21hdGlvbiA9ICAoYm9vbCAqKSBwYWxsb2Moc2l6 ZW9mKGJvb2wpKTsKKwkJcmVMX2FsdGVybmF0aXZlLT5iYXNlcmVzdHJpY3RpbmZvID0gdHJh bnNmb3JtX29ycyhyb290LCByZUxfYWx0ZXJuYXRpdmUtPmJhc2VyZXN0cmljdGluZm8sICZh cHBsaWVkX3RyYW5zZm9tYXRpb24pOworaWYgKGFwcGxpZWRfdHJhbnNmb21hdGlvbikKK3sK KwlhZGRfcGF0aChyZUxfYWx0ZXJuYXRpdmUsIGNyZWF0ZV9zZXFzY2FuX3BhdGgocm9vdCwg cmVMX2FsdGVybmF0aXZlLCByZXF1aXJlZF9vdXRlciwgMCkpOworCisJaWYgKHJlTF9hbHRl cm5hdGl2ZS0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgcmVxdWlyZWRfb3V0ZXIgPT0gTlVMTCkK KwkJY3JlYXRlX3BsYWluX3BhcnRpYWxfcGF0aHMocm9vdCwgcmVMX2FsdGVybmF0aXZlKTsK KworCWNyZWF0ZV9pbmRleF9wYXRocyhyb290LCByZUxfYWx0ZXJuYXRpdmUpOworCisJY3Jl YXRlX3RpZHNjYW5fcGF0aHMocm9vdCwgcmVMX2FsdGVybmF0aXZlKTsKKworCXNldF9jaGVh cGVzdChyZUxfYWx0ZXJuYXRpdmUpOworCisJZWxvZyhXQVJOSU5HLCAib3JzOiAtICVmIiwg cmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLT50b3RhbF9jb3N0KTsKKwllbG9nKFdBUk5JTkcs ICJhcHBsaWVkX3RyYW5zZm9tYXRpb246IC0gJWYiLCByZUxfYWx0ZXJuYXRpdmUtPmNoZWFw ZXN0X3RvdGFsX3BhdGgtPnRvdGFsX2Nvc3QpOworCisJaWYgKHJlTF9hbHRlcm5hdGl2ZS0+ Y2hlYXBlc3RfdG90YWxfcGF0aC0+dG90YWxfY29zdCA8PSByZWwtPmNoZWFwZXN0X3RvdGFs X3BhdGgtPnRvdGFsX2Nvc3QpCisJeworCQkvL2NvcHlfc2ltcGxlX3JlbChyb290LCByZWwt PnJlbGlkLCByZUxfYWx0ZXJuYXRpdmUsIHJlbCk7CisJCXJlbC0+aW5kZXhsaXN0ID0gcmVM X2FsdGVybmF0aXZlLT5pbmRleGxpc3Q7CisJCXJlbC0+YmFzZXJlc3RyaWN0aW5mbyA9IHJl TF9hbHRlcm5hdGl2ZS0+YmFzZXJlc3RyaWN0aW5mbzsKKwkJcmVsLT5lY2xhc3NfaW5kZXhl cyA9IHJlTF9hbHRlcm5hdGl2ZS0+ZWNsYXNzX2luZGV4ZXM7CisJfQorCX0KKwl9CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCBhY2Y0OTM3 ZGIwMS4uYTljYzlhNTg1ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBh dGguYwpAQCAtMzQsMTIgKzM0LDYgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcmVzdHJpY3Rp bmZvLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMv c2VsZnVuY3MuaCIKLSNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCi0jaW5jbHVk ZSAiY29tbW9uL2hhc2hmbi5oIgotI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIK LSNpbmNsdWRlICJub2Rlcy9xdWVyeWp1bWJsZS5oIgotI2luY2x1ZGUgInV0aWxzL3N5c2Nh Y2hlLmgiCi0jaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKIAogLyogWFhYIHNlZSBQ YXJ0Q29sbE1hdGNoZXNFeHByQ29sbCAqLwogI2RlZmluZSBJbmRleENvbGxNYXRjaGVzRXhw ckNvbGwoaWR4Y29sbGF0aW9uLCBleHByY29sbGF0aW9uKSBcCkBAIC0xOTgsMzkxICsxOTIs NiBAQCBzdGF0aWMgYm9vbCBlY19tZW1iZXJfbWF0Y2hlc19pbmRleGNvbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJICAgRXF1aXZhbGVuY2VDbGFz cyAqZWMsIEVxdWl2YWxlbmNlTWVtYmVyICplbSwKIAkJCQkJCQkJCSAgIHZvaWQgKmFyZyk7 CiAKLWJvb2wJCWVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbiA9IHRydWU7Ci10eXBlZGVmIHN0 cnVjdCBPckNsYXVzZUdyb3VwS2V5Ci17Ci0JRXhwciAgICpleHByOyAvKiBQb2ludGVyIHRv IHRoZSBleHByZXNzaW9uIHRyZWUgd2hpY2ggaGFzIGJlZW4gYSBzb3VyY2UgZm9yCi0JCQkJ CXRoZSBoYXNoa2V5IHZhbHVlICovCi0JT2lkCQlvcG5vOwotCU9pZAkJZXhwcnR5cGU7Ci19 IE9yQ2xhdXNlR3JvdXBLZXk7Ci0KLXR5cGVkZWYgc3RydWN0IE9yQ2xhdXNlR3JvdXBFbnRy eQotewotCU9yQ2xhdXNlR3JvdXBLZXkga2V5OwotCU5vZGUJCSAgICpub2RlOwotCUxpc3QJ CSAgICpjb25zdHM7Ci0JT2lkCQkJCWNvbGxhdGlvbjsKLQlSZXN0cmljdEluZm8gICAqcmlu Zm87Ci0JTGlzdCAJCSAgICpleHByczsKLX0gT3JDbGF1c2VHcm91cEVudHJ5OwotCi0vKgot ICogSGFzaCBmdW5jdGlvbiB0aGF0J3MgY29tcGF0aWJsZSB3aXRoIGd1Y19uYW1lX2NvbXBh cmUKLSAqLwotc3RhdGljIHVpbnQzMgotb3JjbGF1c2VfaGFzaChjb25zdCB2b2lkICpkYXRh LCBTaXplIGtleXNpemUpCi17Ci0JT3JDbGF1c2VHcm91cEtleSAgICprZXkgPSAoT3JDbGF1 c2VHcm91cEtleSAqKSBkYXRhOwotCXVpbnQ2NAkJCQloYXNoOwotCi0JKHZvaWQpIEp1bWJs ZUV4cHIoa2V5LT5leHByLCAmaGFzaCk7Ci0JaGFzaCA9ICgodWludDY0KSBrZXktPm9wbm8g KyAodWludDY0KSBrZXktPmV4cHJ0eXBlKSAlIFVJTlQ2NF9NQVg7Ci0JcmV0dXJuIGhhc2g7 Ci19Ci0KLXN0YXRpYyB2b2lkICoKLW9yY2xhdXNlX2tleWNvcHkodm9pZCAqZGVzdCwgY29u c3Qgdm9pZCAqc3JjLCBTaXplIGtleXNpemUpCi17Ci0JT3JDbGF1c2VHcm91cEtleSAqc3Jj X2tleSA9IChPckNsYXVzZUdyb3VwS2V5ICopIHNyYzsKLQlPckNsYXVzZUdyb3VwS2V5ICpk c3Rfa2V5ID0gKE9yQ2xhdXNlR3JvdXBLZXkgKikgZGVzdDsKLQotCUFzc2VydChzaXplb2Yo T3JDbGF1c2VHcm91cEtleSkgPT0ga2V5c2l6ZSk7Ci0KLQlkc3Rfa2V5LT5leHByID0gc3Jj X2tleS0+ZXhwcjsKLQlkc3Rfa2V5LT5vcG5vID0gc3JjX2tleS0+b3BubzsKLQlkc3Rfa2V5 LT5leHBydHlwZSA9IHNyY19rZXktPmV4cHJ0eXBlOwotCXJldHVybiBkc3Rfa2V5OwotfQot Ci0vKgotICogRHluYWhhc2ggbWF0Y2ggZnVuY3Rpb24gdG8gdXNlIGluIGd1Y19oYXNodGFi Ci0gKi8KLXN0YXRpYyBpbnQKLW9yY2xhdXNlX21hdGNoKGNvbnN0IHZvaWQgKmRhdGExLCBj b25zdCB2b2lkICpkYXRhMiwgU2l6ZSBrZXlzaXplKQotewotCU9yQ2xhdXNlR3JvdXBLZXkg ICAqa2V5MSA9IChPckNsYXVzZUdyb3VwS2V5ICopIGRhdGExOwotCU9yQ2xhdXNlR3JvdXBL ZXkgICAqa2V5MiA9IChPckNsYXVzZUdyb3VwS2V5ICopIGRhdGEyOwotCi0JQXNzZXJ0KHNp emVvZihPckNsYXVzZUdyb3VwS2V5KSA9PSBrZXlzaXplKTsKLQotCWlmIChrZXkxLT5vcG5v ID09IGtleTItPm9wbm8gJiYga2V5MS0+ZXhwcnR5cGUgPT0ga2V5Mi0+ZXhwcnR5cGUgJiYK LQkJZXF1YWwoa2V5MS0+ZXhwciwga2V5Mi0+ZXhwcikpCi0JCXJldHVybiAwOwotCi0JcmV0 dXJuIDE7Ci19Ci0KLS8qCi0gKiBQYXNzIHRocm91Z2ggYmFzZXJlc3RyaWN0aW5mbyBjbGF1 c2VzIGFuZCB0cnkgdG8gY29udmVydCBPUiBjbGF1c2VzIGludG8gSU4KLSAqIFJldHVybiBh IG1vZGlmaWVkIGNsYXVzZSBsaXN0IG9yIGp1c3QgdGhlIHNhbWUgYmFzZXJlc3RyaWN0aW5m bywgaWYgbm8KLSAqIGNoYW5nZXMgaGF2ZSBtYWRlLgotICogWFhYOiBkbyBub3QgY2hhbmdl IHNvdXJjZSBsaXN0IG9mIGNsYXVzZXMgYXQgYWxsLgotICovCi1zdGF0aWMgTGlzdCAqCi10 cmFuc2Zvcm1fb3JzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpiYXNlcmVzdHJpY3RpbmZv KQotewotCUxpc3RDZWxsICAgKmxjOwotCUxpc3QJICAgKm1vZGlmaWVkX3JpbmZvID0gTklM OwotCWJvb2wJCXNvbWV0aGluZ19jaGFuZ2VkID0gZmFsc2U7Ci0KLQkvKgotCSAqIENvbXBs ZXhpdHkgb2YgYSBjbGF1c2UgY291bGQgYmUgYXJiaXRyYXJpbHkgc29waGlzdGljYXRlZC4g SGVyZSwgd2Ugd2lsbAotCSAqIGxvb2sgdXAgb25seSBvbiB0aGUgdG9wIGxldmVsIG9mIGNs YXVzZSBsaXN0LgotCSAqIFhYWDogSXQgaXMgc3Vic3RhbnRpYXRlZD8gQ291bGQgd2UgY2hh bmdlIHNvbWV0aGluZyBoZXJlPwotCSAqLwotCWZvcmVhY2ggKGxjLCBiYXNlcmVzdHJpY3Rp bmZvKQotCXsKLQkJUmVzdHJpY3RJbmZvICAgKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJp Y3RJbmZvLCBsYyk7Ci0JCVJlc3RyaWN0SW5mbyAgICpyaW5mb19iYXNlID0gY29weU9iamVj dChyaW5mbyk7Ci0JCUxpc3QJCSAgICpvcl9saXN0ID0gTklMOwotCQlMaXN0Q2VsbAkgICAq bGNfZWFyZ3MsCi0JCQkJCSAgICpsY19yYXJnczsKLQkJYm9vbAkJCWNoYW5nZV9hcHBseSA9 IGZhbHNlOwotCQlIQVNIQ1RMCQkJaW5mbzsKLQkJSFRBQiAJCSAgICpvcl9ncm91cF9odGFi ID0gTlVMTDsKLQkJaW50IAkJCWxlbl9vcnM7Ci0JCUhBU0hfU0VRX1NUQVRVUwkJaGFzaF9z ZXE7Ci0JCU9yQ2xhdXNlR3JvdXBFbnRyeSAqZ2VudHJ5OwotCi0JCWlmICghZW5hYmxlX29y X3RyYW5zZm9ybWF0aW9uIHx8ICFyZXN0cmljdGlvbl9pc19vcl9jbGF1c2UocmluZm8pKQot CQl7Ci0JCQkvKiBBZGQgYSBjbGF1c2Ugd2l0aG91dCBjaGFuZ2VzICovCi0JCQltb2RpZmll ZF9yaW5mbyA9IGxhcHBlbmQobW9kaWZpZWRfcmluZm8sIHJpbmZvKTsKLQkJCWNvbnRpbnVl OwotCQl9Ci0KLQkJbGVuX29ycyA9ICgoQm9vbEV4cHIgKikgcmluZm8tPmNsYXVzZSktPmFy Z3M/IGxpc3RfbGVuZ3RoKCgoQm9vbEV4cHIgKikgcmluZm8tPmNsYXVzZSktPmFyZ3MpIDog MDsKLQotCQlpZiAobGVuX29ycyA8IDIpCi0JCXsKLQkJCS8qIEFkZCBhIGNsYXVzZSB3aXRo b3V0IGNoYW5nZXMgKi8KLQkJCW1vZGlmaWVkX3JpbmZvID0gbGFwcGVuZChtb2RpZmllZF9y aW5mbywgcmluZm8pOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlNZW1TZXQoJmluZm8sIDAs IHNpemVvZihpbmZvKSk7Ci0JCWluZm8ua2V5c2l6ZSA9IHNpemVvZihPckNsYXVzZUdyb3Vw S2V5KTsKLQkJaW5mby5lbnRyeXNpemUgPSBzaXplb2YoT3JDbGF1c2VHcm91cEVudHJ5KTsK LQkJaW5mby5oYXNoID0gb3JjbGF1c2VfaGFzaDsKLQkJaW5mby5rZXljb3B5ID0gb3JjbGF1 c2Vfa2V5Y29weTsKLQkJaW5mby5tYXRjaCA9IG9yY2xhdXNlX21hdGNoOwotCQlvcl9ncm91 cF9odGFiID0gaGFzaF9jcmVhdGUoIk9SIEdyb3VwcyIsCi0JCQkJCQkJCQlsZW5fb3JzLAot CQkJCQkJCQkJJmluZm8sCi0JCQkJCQkJCQlIQVNIX0VMRU0gfCBIQVNIX0ZVTkNUSU9OIHwg SEFTSF9DT01QQVJFIHwgSEFTSF9LRVlDT1BZKTsKLQotCQkvKgotCQkgKiBOT1RFOgotCQkg KiBJdCBpcyBhbiBPUi1jbGF1c2UuIFNvLCByaW5mby0+b3JjbGF1c2UgaXMgYSBCb29sRXhw ciBub2RlLCBjb250YWlucwotCQkgKiBhIGxpc3Qgb2Ygc3ViLXJlc3RyaWN0aW5mbyBhcmdz LCBhbmQgcmluZm8tPmNsYXVzZSAtIHdoaWNoIGlzIHRoZQotCQkgKiBzYW1lIGV4cHJlc3Np b24sIG1hZGUgZnJvbSBiYXJlIGNsYXVzZXMuIFRvIG5vdCBicmVhayBzZWxlY3Rpdml0eQot CQkgKiBjYWNoZXMgYW5kIG90aGVyIG9wdGltaXphdGlvbnMsIHVzZSBib3RoOgotCQkgKiAt IHVzZSByaW5mb3MgZnJvbSBvcmNsYXVzZSBpZiBubyB0cmFuc2Zvcm1hdGlvbiBuZWVkZWQK LQkJICogLSB1c2UgIGJhcmUgcXVhbHMgZnJvbSByaW5mby0+Y2xhdXNlIGluIHRoZSBjYXNl IG9mIHRyYW5zZm9ybWF0aW9uLAotCQkgKiB0byBjcmVhdGUgbmV3IFJlc3RyaWN0SW5mbzog aW4gdGhpcyBjYXNlIHdlIGhhdmUgbm8gb3B0aW9ucyB0byBhdm9pZAotCQkgKiBzZWxlY3Rp dml0eSBlc3RpbWF0aW9uIHByb2NlZHVyZS4KLQkJICovCi0JCWZvcmJvdGgobGNfZWFyZ3Ms ICgoQm9vbEV4cHIgKikgcmluZm8tPmNsYXVzZSktPmFyZ3MsCi0JCQkJbGNfcmFyZ3MsICgo Qm9vbEV4cHIgKikgcmluZm8tPm9yY2xhdXNlKS0+YXJncykKLQkJewotCQkJRXhwcgkJCSAg ICpvcl9xdWFsID0gKEV4cHIgKikgbGZpcnN0KGxjX2VhcmdzKTsKLQkJCVJlc3RyaWN0SW5m bwkgICAqc3ViX3JpbmZvOwotCQkJTm9kZQkJCSAgICpjb25zdF9leHByOwotCQkJTm9kZQkJ CSAgICpuY29uc3RfZXhwcjsKLQkJCU9yQ2xhdXNlR3JvdXBLZXkJCWhhc2hrZXk7Ci0JCQli b29sIGZvdW5kID0gZmFsc2U7Ci0KLQkJCS8qIEl0IG1heSBiZSBvbmUgbW9yZSBib29sZWFu IGV4cHJlc3Npb24sIHNraXAgaXQgZm9yIG5vdyAqLwotCQkJaWYgKCFJc0EobGZpcnN0KGxj X3JhcmdzKSwgUmVzdHJpY3RJbmZvKSkKLQkJCXsKLQkJCQlvcl9saXN0ID0gbGFwcGVuZChv cl9saXN0LCAodm9pZCAqKSBvcl9xdWFsKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJ c3ViX3JpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsY19yYXJncyk7Ci0KLQkJ CS8qIENoZWNrOiBpdCBpcyBhbiBleHByIG9mIHRoZSBmb3JtICdGKHgpIG9wZXIgQ29uc3RF eHByJyAqLwotCQkJaWYgKCFJc0Eob3JfcXVhbCwgT3BFeHByKSB8fAotCQkJCSEoYm1zX2lz X2VtcHR5KHN1Yl9yaW5mby0+bGVmdF9yZWxpZHMpIF4KLQkJCQlibXNfaXNfZW1wdHkoc3Vi X3JpbmZvLT5yaWdodF9yZWxpZHMpKSB8fAotCQkJCWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rp b25zKChOb2RlICopIG9yX3F1YWwpKQotCQkJewotCQkJCS8qIEFnYWluLCBpdCdzIG5vdCB0 aGUgZXhwciB3ZSBjYW4gdHJhbnNmb3JtICovCi0JCQkJb3JfbGlzdCA9IGxhcHBlbmQob3Jf bGlzdCwgKHZvaWQgKikgb3JfcXVhbCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8q IEdldCBwb2ludGVycyB0byBjb25zdGFudCBhbmQgZXhwcmVzc2lvbiBzaWRlcyBvZiB0aGUg Y2xhdXNlICovCi0JCQljb25zdF9leHByID1ibXNfaXNfZW1wdHkoc3ViX3JpbmZvLT5sZWZ0 X3JlbGlkcykgPwotCQkJCQkJCQkJCQkJZ2V0X2xlZnRvcChzdWJfcmluZm8tPmNsYXVzZSkg OgotCQkJCQkJCQkJCQkJZ2V0X3JpZ2h0b3Aoc3ViX3JpbmZvLT5jbGF1c2UpOwotCQkJbmNv bnN0X2V4cHIgPSBibXNfaXNfZW1wdHkoc3ViX3JpbmZvLT5sZWZ0X3JlbGlkcykgPwotCQkJ CQkJCQkJCQkJZ2V0X3JpZ2h0b3Aoc3ViX3JpbmZvLT5jbGF1c2UpIDoKLQkJCQkJCQkJCQkJ CWdldF9sZWZ0b3Aoc3ViX3JpbmZvLT5jbGF1c2UpOwotCi0JCQlpZiAoIW9wX21lcmdlam9p bmFibGUoKChPcEV4cHIgKikgc3ViX3JpbmZvLT5jbGF1c2UpLT5vcG5vLCBleHByVHlwZShu Y29uc3RfZXhwcikpKQotCQkJewotCQkJCS8qIEFuZCBhZ2FpbiwgZmlsdGVyIG91dCBub24t ZXF1YWxpdHkgb3BlcmF0b3JzICovCi0JCQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwg KHZvaWQgKikgb3JfcXVhbCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkg KiBBdCB0aGlzIHBvaW50IHdlIGRlZmluaXRlbHkgaGF2ZSBhIHRyYW5zZm9ybWFibGUgY2xh dXNlLgotCQkJICogQ2xhc3NpZnkgaXQgYW5kIGFkZCBpbnRvIHNwZWNpZmljIGdyb3VwIG9m IGNsYXVzZXMsIG9yIGNyZWF0ZSBuZXcKLQkJCSAqIGdyb3VwLgotCQkJICovCi0JCQloYXNo a2V5LmV4cHIgPSAoRXhwciAqKSBuY29uc3RfZXhwcjsKLQkJCWhhc2hrZXkub3BubyA9ICgo T3BFeHByICopIG9yX3F1YWwpLT5vcG5vOwotCQkJaGFzaGtleS5leHBydHlwZSA9IGV4cHJU eXBlKG5jb25zdF9leHByKTsKLQkJCWdlbnRyeSA9IGhhc2hfc2VhcmNoKG9yX2dyb3VwX2h0 YWIsICZoYXNoa2V5LCBIQVNIX0VOVEVSLCAmZm91bmQpOwotCi0JCQlpZiAodW5saWtlbHko Zm91bmQpKQotCQkJewotCQkJCWdlbnRyeS0+Y29uc3RzID0gbGFwcGVuZChnZW50cnktPmNv bnN0cywgY29uc3RfZXhwcik7Ci0JCQkJZ2VudHJ5LT5leHBycyA9IGxhcHBlbmQoZ2VudHJ5 LT5leHBycywgb3JfcXVhbCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJZ2VudHJ5LT5u b2RlID0gbmNvbnN0X2V4cHI7Ci0JCQkJZ2VudHJ5LT5jb25zdHMgPSBsaXN0X21ha2UxKGNv bnN0X2V4cHIpOwotCQkJCWdlbnRyeS0+ZXhwcnMgPSBsaXN0X21ha2UxKG9yX3F1YWwpOwot CQkJCWdlbnRyeS0+cmluZm8gPSBzdWJfcmluZm87Ci0JCQkJZ2VudHJ5LT5jb2xsYXRpb24g PSBleHBySW5wdXRDb2xsYXRpb24oKE5vZGUgKilzdWJfcmluZm8tPmNsYXVzZSk7Ci0JCQl9 Ci0JCX0KLQotCQlpZiAobGlzdF9sZW5ndGgob3JfbGlzdCkgPT0gbGVuX29ycykKLQkJewot CQkJLyoKLQkJCSogTm8gYW55IHRyYW5zZm9ybWF0aW9ucyBwb3NzaWJsZSB3aXRoIHRoaXMg bGlzdCBvZiBhcmd1bWVudHMuIEhlcmUgd2UKLQkJCSogYWxyZWFkeSBtYWRlIGFsbCB1bmRl cmx5aW5nIHRyYW5zZm9ybWF0aW9ucy4gVGh1cywganVzdCByZXR1cm4gdGhlCi0JCQkqIHRy YW5zZm9ybWVkIGJvb2wgZXhwcmVzc2lvbi4KLQkJCSovCi0JCQltb2RpZmllZF9yaW5mbyA9 IGxhcHBlbmQobW9kaWZpZWRfcmluZm8sIHJpbmZvKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0K LQkJaWYgKCFvcl9ncm91cF9odGFiICYmIGhhc2hfZ2V0X251bV9lbnRyaWVzKG9yX2dyb3Vw X2h0YWIpIDwgMSkKLQkJewotCQkJLyoKLQkJCSAqIE5vIGFueSB0cmFuc2Zvcm1hdGlvbnMg cG9zc2libGUgd2l0aCB0aGlzIHJpbmZvLCBqdXN0IGFkZCBpdHNlbGYKLQkJCSAqIHRvIHRo ZSBsaXN0IGFuZCBnbyBmdXJ0aGVyLgotCQkJICovCi0JCQltb2RpZmllZF9yaW5mbyA9IGxh cHBlbmQobW9kaWZpZWRfcmluZm8sIHJpbmZvKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJ aGFzaF9zZXFfaW5pdCgmaGFzaF9zZXEsIG9yX2dyb3VwX2h0YWIpOwotCi0JCS8qIExldCdz IGNvbnZlcnQgZWFjaCBncm91cCBvZiBjbGF1c2VzIHRvIGFuIElOIG9wZXJhdGlvbi4gKi8K LQotCQkvKgotCQkqIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgZ3JvdXBzIGFuZCBjb252ZXJ0 IGVhY2gsIHdoZXJlIG51bWJlciBvZgotCQkqIGNvbnN0cyBtb3JlIHRoYW4gMS4gdHJpdmlh bCBncm91cHMgbW92ZSB0byBPUi1saXN0IGFnYWluCi0JCSovCi0KLQkJd2hpbGUgKChnZW50 cnkgPSAoT3JDbGF1c2VHcm91cEVudHJ5ICopIGhhc2hfc2VxX3NlYXJjaCgmaGFzaF9zZXEp KSAhPSBOVUxMKQotCQl7Ci0JCQlPaWQJCQkJICAgIHNjYWxhcl90eXBlOwotCQkJT2lkCQkJ CQlhcnJheV90eXBlOwotCi0JCQlBc3NlcnQobGlzdF9sZW5ndGgoZ2VudHJ5LT5jb25zdHMp ID4gMCk7Ci0JCQlBc3NlcnQobGlzdF9sZW5ndGgoZ2VudHJ5LT5leHBycykgPT0gbGlzdF9s ZW5ndGgoZ2VudHJ5LT5jb25zdHMpKTsKLQotCQkJaWYgKGxpc3RfbGVuZ3RoKGdlbnRyeS0+ Y29uc3RzKSA9PSAxKQotCQkJewotCQkJCS8qCi0JCQkJKiBPbmx5IG9uZSBlbGVtZW50IGlu IHRoZSBjbGFzcy4gUmV0dXJuIHJpbmZvIGludG8gdGhlIEJvb2xFeHByCi0JCQkJKiBhcmdz IGxpc3QgdW5jaGFuZ2VkLgotCQkJCSovCi0JCQkJbGlzdF9mcmVlKGdlbnRyeS0+Y29uc3Rz KTsKLQkJCQlvcl9saXN0ID0gbGlzdF9jb25jYXQob3JfbGlzdCwgZ2VudHJ5LT5leHBycyk7 Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkqIERvIHRoZSB0cmFuc2Zvcm1h dGlvbi4KLQkJCSoKLQkJCSogRmlyc3Qgb2YgYWxsLCB0cnkgdG8gc2VsZWN0IGEgY29tbW9u IHR5cGUgZm9yIHRoZSBhcnJheSBlbGVtZW50cy4KLQkJCSogTm90ZSB0aGF0IHNpbmNlIHRo ZSBMSFMnIHR5cGUgaXMgZmlyc3QgaW4gdGhlIGxpc3QsIGl0IHdpbGwgYmUKLQkJCSogcHJl ZmVycmVkIHdoZW4gdGhlcmUgaXMgZG91YnQgKGVnLCB3aGVuIGFsbCB0aGUgUkhTIGl0ZW1z IGFyZQotCQkJKiB1bmtub3duIGxpdGVyYWxzKS4KLQkJCSoKLQkJCSogTm90ZTogdXNlIGxp c3RfY29uY2F0IGhlcmUgbm90IGxjb25zLCB0byBhdm9pZCBkYW1hZ2luZyBybm9udmFycy4K LQkJCSoKLQkJCSogQXMgYSBzb3VyY2Ugb2YgaW5zaWRlcywgdXNlIG1ha2Vfc2NhbGFyX2Fy cmF5X29wKCkKLQkJCSovCi0JCQlzY2FsYXJfdHlwZSA9IGdlbnRyeS0+a2V5LmV4cHJ0eXBl OwotCi0JCQlpZiAoc2NhbGFyX3R5cGUgIT0gUkVDT1JET0lEICYmIE9pZElzVmFsaWQoc2Nh bGFyX3R5cGUpKQotCQkJCWFycmF5X3R5cGUgPSBnZXRfYXJyYXlfdHlwZShzY2FsYXJfdHlw ZSk7Ci0JCQllbHNlCi0JCQkJYXJyYXlfdHlwZSA9IEludmFsaWRPaWQ7Ci0KLQkJCWlmIChh cnJheV90eXBlICE9IEludmFsaWRPaWQgJiYgc2NhbGFyX3R5cGUgIT0gSW52YWxpZE9pZCkK LQkJCXsKLQkJCQkvKgotCQkJCSogT0s6IGNvZXJjZSBhbGwgdGhlIHJpZ2h0LWhhbmQgbm9u LVZhciBpbnB1dHMgdG8gdGhlIGNvbW1vbgotCQkJCSogdHlwZSBhbmQgYnVpbGQgYW4gQXJy YXlFeHByIGZvciB0aGVtLgotCQkJCSovCi0JCQkJTGlzdAkgICAqYWV4cHJzID0gTlVMTDsK LQkJCQlBcnJheUV4cHIgICpuZXdhID0gTlVMTDsKLQkJCQlTY2FsYXJBcnJheU9wRXhwciAq c2FvcGV4cHIgPSBOVUxMOwotCQkJCUhlYXBUdXBsZQkJCW9wZXJ0dXA7Ci0JCQkJRm9ybV9w Z19vcGVyYXRvcglvcGVyZm9ybTsKLQkJCQlMaXN0CQkJICAgKm5hbWVsaXN0ID0gTklMOwot Ci0JCQkJYWV4cHJzID0gZ2VudHJ5LT5jb25zdHM7Ci0KLQkJCQluZXdhID0gbWFrZU5vZGUo QXJyYXlFeHByKTsKLQkJCQkvKiBhcnJheV9jb2xsaWQgd2lsbCBiZSBzZXQgYnkgcGFyc2Vf Y29sbGF0ZS5jICovCi0JCQkJbmV3YS0+ZWxlbWVudF90eXBlaWQgPSBzY2FsYXJfdHlwZTsK LQkJCQluZXdhLT5hcnJheV90eXBlaWQgPSBhcnJheV90eXBlOwotCQkJCW5ld2EtPm11bHRp ZGltcyA9IGZhbHNlOwotCQkJCW5ld2EtPmVsZW1lbnRzID0gYWV4cHJzOwotCQkJCW5ld2Et PmxvY2F0aW9uID0gLTE7Ci0KLQkJCQlvcGVydHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJP SUQsCi0JCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oZ2VudHJ5LT5rZXkub3BubykpOwot Ci0JCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZXJ0dXApKQotCQkJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgJXUiLAotCQkJCQkJZ2VudHJ5 LT5rZXkub3Bubyk7Ci0KLQkJCQlvcGVyZm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRT VFJVQ1Qob3BlcnR1cCk7Ci0JCQkJaWYgKCFPcGVyYXRvcklzVmlzaWJsZShnZW50cnktPmtl eS5vcG5vKSkKLQkJCQkJbmFtZWxpc3QgPSBsYXBwZW5kKG5hbWVsaXN0LCBtYWtlU3RyaW5n KGdldF9uYW1lc3BhY2VfbmFtZShvcGVyZm9ybS0+b3BybmFtZXNwYWNlKSkpOwotCi0JCQkJ bmFtZWxpc3QgPSBsYXBwZW5kKG5hbWVsaXN0LCBtYWtlU3RyaW5nKHBzdHJkdXAoTmFtZVN0 cihvcGVyZm9ybS0+b3BybmFtZSkpKSk7Ci0JCQkJUmVsZWFzZVN5c0NhY2hlKG9wZXJ0dXAp OwotCi0JCQkJc2FvcGV4cHIgPSBtYWtlTm9kZShTY2FsYXJBcnJheU9wRXhwcik7Ci0JCQkJ c2FvcGV4cHItPm9wbm8gPSAoKE9wRXhwciAqKSBnZW50cnktPnJpbmZvLT5jbGF1c2UpLT5v cG5vOwotCQkJCXNhb3BleHByLT51c2VPciA9IHRydWU7Ci0JCQkJc2FvcGV4cHItPmlucHV0 Y29sbGlkID0gZ2VudHJ5LT5jb2xsYXRpb247Ci0JCQkJc2FvcGV4cHItPmFyZ3MgPSBsaXN0 X21ha2UyKGdlbnRyeS0+bm9kZSwgbmV3YSk7Ci0JCQkJc2FvcGV4cHItPmxvY2F0aW9uID0g LTE7Ci0KLQotCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIHNhb3Bl eHByKTsKLQotCQkJCXNvbWV0aGluZ19jaGFuZ2VkID0gdHJ1ZTsKLQkJCQljaGFuZ2VfYXBw bHkgPSB0cnVlOwotCi0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJbGlzdF9mcmVlKGdlbnRy eS0+Y29uc3RzKTsKLQkJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCAodm9pZCAqKSBn ZW50cnktPnJpbmZvLT5jbGF1c2UpOwotCQkJfQotCQkJaGFzaF9zZWFyY2gob3JfZ3JvdXBf aHRhYiwgJmdlbnRyeS0+a2V5LCBIQVNIX1JFTU9WRSwgTlVMTCk7Ci0JCX0KLQotCQloYXNo X2Rlc3Ryb3kob3JfZ3JvdXBfaHRhYik7Ci0KLQkJaWYgKCFjaGFuZ2VfYXBwbHkpCi0JCXsK LQkJCS8qCi0JCQkgKiBFYWNoIGdyb3VwIGNvbnRhaW5zIG9ubHkgb25lIGVsZW1lbnQgLSB1 c2UgcmluZm8gYXMgaXMuCi0JCQkgKi8KLQkJCW1vZGlmaWVkX3JpbmZvID0gbGFwcGVuZCht b2RpZmllZF9yaW5mbywgcmluZm8pOwotCQkJbGlzdF9mcmVlKG9yX2xpc3QpOwotCQkJY29u dGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBNYWtlIGEgbmV3IHZlcnNpb24gb2YgdGhlIHJl c3RyaWN0aW9uLiBSZW1lbWJlciBzb3VyY2UgcmVzdHJpY3Rpb24KLQkJICogY2FuIGJlIHVz ZWQgaW4gYW5vdGhlciBwYXRoIChTZXFTY2FuLCBmb3IgZXhhbXBsZSkuCi0JCSAqLwotCi0J CS8qIE9uZSBtb3JlIHRyaWNrOiBhc3NlbWJsZSBjb3JyZWN0IGNsYXVzZSAqLwotCQlyaW5m byA9IG1ha2VfcmVzdHJpY3RpbmZvKHJvb3QsCi0JCQkJICBsaXN0X2xlbmd0aChvcl9saXN0 KSA+IDEgPyBtYWtlQm9vbEV4cHIoT1JfRVhQUiwgb3JfbGlzdCwgKChCb29sRXhwciAqKSBy aW5mby0+Y2xhdXNlKS0+bG9jYXRpb24pIDoKLQkJCQkJCQkJCQkJIGxpbml0aWFsKG9yX2xp c3QpLAotCQkJCSAgcmluZm8tPmlzX3B1c2hlZF9kb3duLAotCQkJCSAgcmluZm8tPmhhc19j bG9uZSwKLQkJCQkgIHJpbmZvLT5pc19jbG9uZSwKLQkJCQkgIHJpbmZvLT5wc2V1ZG9jb25z dGFudCwKLQkJCQkgIHJpbmZvLT5zZWN1cml0eV9sZXZlbCwKLQkJCQkgIHJpbmZvLT5yZXF1 aXJlZF9yZWxpZHMsCi0JCQkJICByaW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcywKLQkJCQkg IHJpbmZvLT5vdXRlcl9yZWxpZHMpOwotCQlyaW5mby0+ZXZhbF9jb3N0PXJpbmZvX2Jhc2Ut PmV2YWxfY29zdDsKLQkJcmluZm8tPm5vcm1fc2VsZWM9cmluZm9fYmFzZS0+bm9ybV9zZWxl YzsKLQkJcmluZm8tPm91dGVyX3NlbGVjPXJpbmZvX2Jhc2UtPm91dGVyX3NlbGVjOwotCQly aW5mby0+bGVmdF9idWNrZXRzaXplPXJpbmZvX2Jhc2UtPmxlZnRfYnVja2V0c2l6ZTsKLQkJ cmluZm8tPnJpZ2h0X2J1Y2tldHNpemU9cmluZm9fYmFzZS0+cmlnaHRfYnVja2V0c2l6ZTsK LQkJcmluZm8tPmxlZnRfbWN2ZnJlcT1yaW5mb19iYXNlLT5sZWZ0X21jdmZyZXE7Ci0JCXJp bmZvLT5yaWdodF9tY3ZmcmVxPXJpbmZvX2Jhc2UtPnJpZ2h0X21jdmZyZXE7Ci0JCW1vZGlm aWVkX3JpbmZvID0gbGFwcGVuZChtb2RpZmllZF9yaW5mbywgcmluZm8pOwotCQlzb21ldGhp bmdfY2hhbmdlZCA9IHRydWU7Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBpZiB0cmFuc2Zvcm1h dGlvbiBoYXMgbWFkZS4gSWYgbm90aGluZyBjaGFuZ2VkIC0gcmV0dXJuCi0JICogYmFzZXJl c3RyaWN0aW5mbyBhcyBpcy4KLQkgKi8KLQlpZiAoc29tZXRoaW5nX2NoYW5nZWQpCi0Jewot CQlyZXR1cm4gbW9kaWZpZWRfcmluZm87Ci0JfQotCi0JbGlzdF9mcmVlKG1vZGlmaWVkX3Jp bmZvKTsKLQlyZXR1cm4gYmFzZXJlc3RyaWN0aW5mbzsKLX0KLQogLyoKICAqIGNyZWF0ZV9p bmRleF9wYXRocygpCiAgKgkgIEdlbmVyYXRlIGFsbCBpbnRlcmVzdGluZyBpbmRleCBwYXRo cyBmb3IgdGhlIGdpdmVuIHJlbGF0aW9uLgpAQCAtMTEwOCw5ICs3MTcsNiBAQCBnZXRfaW5k ZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAlib29sCQlz a2lwX2xvd2VyX3Nhb3AgPSBmYWxzZTsKIAlMaXN0Q2VsbCAgICpsYzsKIAotCWlmIChyZWwt PnJlbG9wdGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwpCi0JCXJlbC0+YmFzZXJlc3RyaWN0aW5m byA9IHRyYW5zZm9ybV9vcnMocm9vdCwgcmVsLT5iYXNlcmVzdHJpY3RpbmZvKTsKLQogCS8q CiAJICogQnVpbGQgc2ltcGxlIGluZGV4IHBhdGhzIHVzaW5nIHRoZSBjbGF1c2VzLiAgQWxs b3cgU2NhbGFyQXJyYXlPcEV4cHIKIAkgKiBjbGF1c2VzIG9ubHkgaWYgdGhlIGluZGV4IEFN IHN1cHBvcnRzIHRoZW0gbmF0aXZlbHksIGFuZCBza2lwIGFueSBzdWNoCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggNWQ4M2Y2MGViOWEuLjE4OWNlZTQ0OWJm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0xODMsNiArMTgz LDk3IEBAIGV4cGFuZF9wbGFubmVyX2FycmF5cyhQbGFubmVySW5mbyAqcm9vdCwgaW50IGFk ZF9zaXplKQogCXJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZSA9IG5ld19zaXplOwogfQog CitSZWxPcHRJbmZvICoKK2NvcHlfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50 IHJlbGlkLCBSZWxPcHRJbmZvICpiYXNlX3JlbCwgUmVsT3B0SW5mbyAqcmVsKQoreworCXJl bC0+cmVsb3B0a2luZCA9IGJhc2VfcmVsLT5wYXJlbnQgPyBSRUxPUFRfT1RIRVJfTUVNQkVS X1JFTCA6IFJFTE9QVF9CQVNFUkVMOworCXJlbC0+cmVsaWRzID0gYmFzZV9yZWwtPnJlbGlk czsKKwlyZWwtPnJvd3MgPSBiYXNlX3JlbC0+cm93czsKKwkvKiBjaGVhcCBzdGFydHVwIGNv c3QgaXMgaW50ZXJlc3RpbmcgaWZmIG5vdCBhbGwgdHVwbGVzIHRvIGJlIHJldHJpZXZlZCAq LworCXJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlvbiA+IDAp OworCXJlbC0+Y29uc2lkZXJfcGFyYW1fc3RhcnR1cCA9IGJhc2VfcmVsLT5jb25zaWRlcl9w YXJhbV9zdGFydHVwOwkvKiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLworCXJlbC0+Y29u c2lkZXJfcGFyYWxsZWwgPSBiYXNlX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWw7IC8qIG1pZ2h0 IGdldCBjaGFuZ2VkIGxhdGVyICovCisJcmVsLT5yZWx0YXJnZXQgPSBiYXNlX3JlbC0+cmVs dGFyZ2V0OworCXJlbC0+cGF0aGxpc3QgPSBiYXNlX3JlbC0+cGF0aGxpc3Q7CisJcmVsLT5w cGlsaXN0ID0gYmFzZV9yZWwtPnBwaWxpc3Q7CisJcmVsLT5wYXJ0aWFsX3BhdGhsaXN0ID0g YmFzZV9yZWwtPnBhcnRpYWxfcGF0aGxpc3Q7CisJcmVsLT5jaGVhcGVzdF9zdGFydHVwX3Bh dGggPSBiYXNlX3JlbC0+Y2hlYXBlc3Rfc3RhcnR1cF9wYXRoOworCXJlbC0+Y2hlYXBlc3Rf dG90YWxfcGF0aCA9IGJhc2VfcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoOworCXJlbC0+Y2hl YXBlc3RfdW5pcXVlX3BhdGggPSBiYXNlX3JlbC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGg7CisJ cmVsLT5jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzID0gYmFzZV9yZWwtPmNoZWFwZXN0 X3BhcmFtZXRlcml6ZWRfcGF0aHM7CisJcmVsLT5yZWxpZCA9IGJhc2VfcmVsLT5yZWxpZDsK KwkvKiBtaW5fYXR0ciwgbWF4X2F0dHIsIGF0dHJfbmVlZGVkLCBhdHRyX3dpZHRocyBhcmUg c2V0IGJlbG93ICovCisJcmVsLT5sYXRlcmFsX3ZhcnMgPSBiYXNlX3JlbC0+bGF0ZXJhbF92 YXJzOworCXJlbC0+c3RhdGxpc3QgPSBiYXNlX3JlbC0+c3RhdGxpc3Q7CisJcmVsLT5wYWdl cyA9IGJhc2VfcmVsLT5wYWdlczsKKwlyZWwtPnR1cGxlcyA9IGJhc2VfcmVsLT50dXBsZXM7 CisJcmVsLT5hbGx2aXNmcmFjID0gYmFzZV9yZWwtPmFsbHZpc2ZyYWM7CisJcmVsLT5zdWJy b290ID0gYmFzZV9yZWwtPnN1YnJvb3Q7CisJcmVsLT5zdWJwbGFuX3BhcmFtcyA9IGJhc2Vf cmVsLT5zdWJwbGFuX3BhcmFtczsKKwlyZWwtPnJlbF9wYXJhbGxlbF93b3JrZXJzID0gYmFz ZV9yZWwtPnJlbF9wYXJhbGxlbF93b3JrZXJzOyAvKiBzZXQgdXAgaW4gZ2V0X3JlbGF0aW9u X2luZm8gKi8KKwlyZWwtPmFtZmxhZ3MgPSBiYXNlX3JlbC0+YW1mbGFnczsKKwlyZWwtPnBh cmVudCA9IGJhc2VfcmVsLT5wYXJlbnQ7CisJcmVsLT5zZXJ2ZXJpZCA9IGJhc2VfcmVsLT5z ZXJ2ZXJpZDsKKwlyZWwtPnVzZXJpZCA9IGJhc2VfcmVsLT51c2VyaWQ7CisJcmVsLT51c2Vy aWRpc2N1cnJlbnQgPSBiYXNlX3JlbC0+dXNlcmlkaXNjdXJyZW50OworCXJlbC0+ZmR3cm91 dGluZSA9IGJhc2VfcmVsLT5mZHdyb3V0aW5lOworCXJlbC0+ZmR3X3ByaXZhdGUgPSBiYXNl X3JlbC0+ZmR3X3ByaXZhdGU7CisJcmVsLT51bmlxdWVfZm9yX3JlbHMgPSBiYXNlX3JlbC0+ dW5pcXVlX2Zvcl9yZWxzOworCXJlbC0+bm9uX3VuaXF1ZV9mb3JfcmVscyA9IGJhc2VfcmVs LT5ub25fdW5pcXVlX2Zvcl9yZWxzOworCXJlbC0+YmFzZXJlc3RyaWN0Y29zdC5zdGFydHVw ID0gMDsKKwlyZWwtPmJhc2VyZXN0cmljdGNvc3QucGVyX3R1cGxlID0gMDsKKwlyZWwtPmJh c2VyZXN0cmljdF9taW5fc2VjdXJpdHkgPSBVSU5UX01BWDsKKwlyZWwtPmpvaW5pbmZvID0g YmFzZV9yZWwtPmpvaW5pbmZvOworCXJlbC0+aGFzX2VjbGFzc19qb2lucyA9IGJhc2VfcmVs LT5oYXNfZWNsYXNzX2pvaW5zOworCisJLyoKKwkgKiBQYXNzIGFzc29ydGVkIGluZm9ybWF0 aW9uIGRvd24gdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKwkgKi8KKwlpZiAoYmFzZV9y ZWwtPnBhcmVudCkKKwl7CisJCS8qIFdlIGtlZXAgYmFjay1saW5rcyB0byBpbW1lZGlhdGUg cGFyZW50IGFuZCB0b3Btb3N0IHBhcmVudC4gKi8KKwkJcmVsLT5wYXJlbnQgPSBiYXNlX3Jl bC0+cGFyZW50OworCQlyZWwtPnRvcF9wYXJlbnQgPSBiYXNlX3JlbC0+cGFyZW50LT50b3Bf cGFyZW50ID8gYmFzZV9yZWwtPnBhcmVudC0+dG9wX3BhcmVudCA6IGJhc2VfcmVsLT5wYXJl bnQ7CisJCXJlbC0+dG9wX3BhcmVudF9yZWxpZHMgPSBiYXNlX3JlbC0+dG9wX3BhcmVudC0+ cmVsaWRzOworCisJCS8qCisJCSAqIEEgY2hpbGQgcmVsIGlzIGJlbG93IHRoZSBzYW1lIG91 dGVyIGpvaW5zIGFzIGl0cyBwYXJlbnQuICAoV2UKKwkJICogcHJlc3VtZSB0aGlzIGluZm8g d2FzIGFscmVhZHkgY2FsY3VsYXRlZCBmb3IgdGhlIHBhcmVudC4pCisJCSAqLworCQlyZWwt Pm51bGxpbmdfcmVsaWRzID0gYmFzZV9yZWwtPnBhcmVudC0+bnVsbGluZ19yZWxpZHM7CisK KwkJLyoKKwkJICogQWxzbyBwcm9wYWdhdGUgbGF0ZXJhbC1yZWZlcmVuY2UgaW5mb3JtYXRp b24gZnJvbSBhcHBlbmRyZWwgcGFyZW50CisJCSAqIHJlbHMgdG8gdGhlaXIgY2hpbGQgcmVs cy4gIFdlIGludGVudGlvbmFsbHkgZ2l2ZSBlYWNoIGNoaWxkIHJlbCB0aGUKKwkJICogc2Ft ZSBtaW5pbXVtIHBhcmFtZXRlcml6YXRpb24sIGV2ZW4gdGhvdWdoIGl0J3MgcXVpdGUgcG9z c2libGUgdGhhdAorCQkgKiBzb21lIGRvbid0IHJlZmVyZW5jZSBhbGwgdGhlIGxhdGVyYWwg cmVscy4gIFRoaXMgaXMgYmVjYXVzZSBhbnkKKwkJICogYXBwZW5kIHBhdGggZm9yIHRoZSBw YXJlbnQgd2lsbCBoYXZlIHRvIGhhdmUgdGhlIHNhbWUKKwkJICogcGFyYW1ldGVyaXphdGlv biBmb3IgZXZlcnkgY2hpbGQgYW55d2F5LCBhbmQgdGhlcmUncyBubyB2YWx1ZSBpbgorCQkg KiBmb3JjaW5nIGV4dHJhIHJlcGFyYW1ldGVyaXplX3BhdGgoKSBjYWxscy4gIFNpbWlsYXJs eSwgYSBsYXRlcmFsCisJCSAqIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHByZXZlbnRzIHVz ZSBvZiBvdGhlcndpc2UtbW92YWJsZSBqb2luIHJlbHMKKwkJICogZm9yIGVhY2ggY2hpbGQu CisJCSAqCisJCSAqIEl0J3MgcG9zc2libGUgZm9yIGNoaWxkIHJlbHMgdG8gaGF2ZSB0aGVp ciBvd24gY2hpbGRyZW4sIGluIHdoaWNoCisJCSAqIGNhc2UgdGhlIHRvcG1vc3QgcGFyZW50 J3MgbGF0ZXJhbCBpbmZvIHByb3BhZ2F0ZXMgYWxsIHRoZSB3YXkgZG93bi4KKwkJICovCisJ CXJlbC0+ZGlyZWN0X2xhdGVyYWxfcmVsaWRzID0gYmFzZV9yZWwtPnBhcmVudC0+ZGlyZWN0 X2xhdGVyYWxfcmVsaWRzOworCQlyZWwtPmxhdGVyYWxfcmVsaWRzID0gYmFzZV9yZWwtPnBh cmVudC0+bGF0ZXJhbF9yZWxpZHM7CisJCXJlbC0+bGF0ZXJhbF9yZWZlcmVuY2VycyA9IGJh c2VfcmVsLT5wYXJlbnQtPmxhdGVyYWxfcmVmZXJlbmNlcnM7CisJfQorCWVsc2UKKwl7CisJ CXJlbC0+cGFyZW50ID0gYmFzZV9yZWwtPnBhcmVudDsKKwkJcmVsLT50b3BfcGFyZW50ID0g YmFzZV9yZWwtPnRvcF9wYXJlbnQ7CisJCXJlbC0+dG9wX3BhcmVudF9yZWxpZHMgPSBiYXNl X3JlbC0+dG9wX3BhcmVudF9yZWxpZHM7CisJCXJlbC0+bnVsbGluZ19yZWxpZHMgPSBiYXNl X3JlbC0+bnVsbGluZ19yZWxpZHM7CisJCXJlbC0+ZGlyZWN0X2xhdGVyYWxfcmVsaWRzID0g YmFzZV9yZWwtPmRpcmVjdF9sYXRlcmFsX3JlbGlkczsKKwkJcmVsLT5sYXRlcmFsX3JlbGlk cyA9IGJhc2VfcmVsLT5sYXRlcmFsX3JlbGlkczsKKwkJcmVsLT5sYXRlcmFsX3JlZmVyZW5j ZXJzID0gYmFzZV9yZWwtPmxhdGVyYWxfcmVmZXJlbmNlcnM7CisJfQorCisJcmV0dXJuIHJl bDsKK30KKwogLyoKICAqIGJ1aWxkX3NpbXBsZV9yZWwKICAqCSAgQ29uc3RydWN0IGEgbmV3 IFJlbE9wdEluZm8gZm9yIGEgYmFzZSByZWxhdGlvbiBvciAnb3RoZXInIHJlbGF0aW9uLgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCA2ZTU1N2JlYmM0NC4uMmIzODI1YjZl NTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCisrKyBi L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0zMDQsNiArMzA0LDggQEAg ZXh0ZXJuIFBhdGggKnJlcGFyYW1ldGVyaXplX3BhdGhfYnlfY2hpbGQoUGxhbm5lckluZm8g KnJvb3QsIFBhdGggKnBhdGgsCiAgKi8KIGV4dGVybiB2b2lkIHNldHVwX3NpbXBsZV9yZWxf YXJyYXlzKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIGV4cGFuZF9wbGFubmVy X2FycmF5cyhQbGFubmVySW5mbyAqcm9vdCwgaW50IGFkZF9zaXplKTsKK2V4dGVybiBSZWxP cHRJbmZvICoKK2NvcHlfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlk LCBSZWxPcHRJbmZvICpiYXNlX3JlbCwgUmVsT3B0SW5mbyAqcmVsKTsKIGV4dGVybiBSZWxP cHRJbmZvICpidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQs CiAJCQkJCQkJCQlSZWxPcHRJbmZvICpwYXJlbnQpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZp bmRfYmFzZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCk7Ci0tIAoyLjM0LjEK Cg== --------------9SZRxFr0ADwUTxyN6XMyp2Nh--