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 1qWZvK-003hYl-9J for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Aug 2023 10:08:15 +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 1qWZvI-00FyrV-UQ for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Aug 2023 10:08:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qWZvI-00Fyqo-1g for pgsql-hackers@lists.postgresql.org; Thu, 17 Aug 2023 10:08:12 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qWZvC-000bbS-4p for pgsql-hackers@postgresql.org; Thu, 17 Aug 2023 10:08:11 +0000 Received: from [10.4.15.186] (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 849B7E203D1; Thu, 17 Aug 2023 13:08:03 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1692266883; bh=bN/+479SwEjJOk5WxYkBUAvgKAd5ekz2sGoXx/C/sVA=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=udwOszvLf8H8UrHNRQMQaOuevuVQiS4nyDzsDx812vH44Ze57AbwaJCCBxd16zHbN vGOXj6nRxmgCGTGidESgd513sSGSs8DEGK44tdxYaS0smkWYvCDD8rRixrN6gORCfg 0B+evYdrbiK8Ab3IU8eclwHmFb4ojfp/4mQSSlclZiXEkSaR33i6r75Ey2LeCa1+rm KgIXp1xnW4LdWP/MrJFMSBWwVO3eQlslxq/S54frk+p0B5RPqy3PA0YLfe+MwidObL KlgL68hLDQwnHU6gewNo7noqByhs5FEKRoZ/eOeW0LhX1M0+vsGmDSGjKjqMupCv1Z UIsAvwVkGy3dg== Content-Type: multipart/mixed; boundary="------------0SpOk2mdGmUJumjHbXudt08W" Message-ID: <4bac271d-1700-db24-74ac-8414f2baf9fd@postgrespro.ru> Date: Thu, 17 Aug 2023 13:08:03 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: POC, WIP: OR-clause support for indexes To: Peter Geoghegan Cc: "Finnerty, Jim" , Marcos Pegoraro , Andrey Lepikhov , pgsql-hackers@postgresql.org, teodor@sigaev.ru, Ranier Vilela , Tomas Vondra References: <567ED6CA.2040504@sigaev.ru> <7829312a-eb6b-b9ba-9719-71c9bc410884@yandex.ru> <9ea35f18-419d-efb7-b7c8-2e641a61f020@yandex.ru> <08f5ff34-1497-2123-8701-461a299035c9@yandex.ru> <8d714510-af73-a908-99c8-fc14536f2669@yandex.ru> Content-Language: en-US From: "a.rybakina" In-Reply-To: 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. --------------0SpOk2mdGmUJumjHbXudt08W Content-Type: multipart/alternative; boundary="------------VG3a6g45u3aLKIHMCUMytKBd" --------------VG3a6g45u3aLKIHMCUMytKBd Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, all! >> The optimizer will itself do a limited form of "normalizing to CNF". >> Are you familiar with extract_restriction_or_clauses(), from >> orclauses.c? Comments above the function have an example of how this >> can work: >> >>   * Although a join clause must reference multiple relations overall, >>   * an OR of ANDs clause might contain sub-clauses that reference >> just one >>   * relation and can be used to build a restriction clause for that rel. >>   * For example consider >>   *      WHERE ((a.x = 42 AND b.y = 43) OR (a.x = 44 AND b.z = 45)); >>   * We can transform this into >>   *      WHERE ((a.x = 42 AND b.y = 43) OR (a.x = 44 AND b.z = 45)) >>   *          AND (a.x = 42 OR a.x = 44) >>   *          AND (b.y = 43 OR b.z = 45); >>   * which allows the latter clauses to be applied during the scans of >> a and b, >>   * perhaps as index qualifications, and in any case reducing the >> number of >>   * rows arriving at the join.  In essence this is a partial >> transformation to >>   * CNF (AND of ORs format).  It is not complete, however, because we >> do not >>   * unravel the original OR --- doing so would usually bloat the >> qualification >>   * expression to little gain. > This is an interesting feature. I didn't notice this function before, > I studied many times consider_new_or_cause, which were called there. > As far as I know, there is a selectivity calculation going on there, > but as far as I remember, I called it earlier after my conversion, and > unfortunately it didn't solve my problem with calculating selectivity. > I'll reconsider it again, maybe I can find something I missed. >> Of course this immediately makes me wonder: shouldn't your patch be >> able to perform an additional transformation here? You know, by >> transforming "a.x = 42 OR a.x = 44" into "a IN (42, 44)"? Although I >> haven't checked for myself, I assume that this doesn't happen right >> now, since your patch currently performs all of its transformations >> during parsing. >> >> I also noticed that the same comment block goes on to say something >> about "clauselist_selectivity's inability to recognize redundant >> conditions". Perhaps that is relevant to the problems you were having >> with selectivity estimation, back when the code was in >> preprocess_qual_conditions() instead? I have no reason to believe that >> there should be any redundancy left behind by your transformation, so >> this is just one possibility to consider. >> Separately, the commit message of commit 25a9e54d2d says something >> about how the planner builds RestrictInfos, which seems >> possibly-relevant. That commit enhanced extended statistics for OR >> clauses, so the relevant paragraph describes a limitation of extended >> statistics with OR clauses specifically. I'm just guessing, but it >> still seems like it might be relevant to the problem you ran into with >> selectivity estimation. Another possibility to consider. > > I understood what is said about AND clauses in this comment. It seems > to me that AND clauses saved like (BoolExpr *) > expr->args->(RestrictInfo *) clauseA->(RestrictInfo *)clauseB lists > and OR clauses saved like (BoolExpr *) expr -> orclause->(RestrictInfo > *)clause A->(RestrictInfo *)clause B. > > As I understand it, selectivity is calculated for each expression. But > I'll exploring it deeper, because I think this place may contain the > answer to the question, what's wrong with selectivity calculation in > my patch. I could move transformation in there (extract_restriction_or_clauses) and didn't have any problem with selectivity calculation, besides it also works on the redundant or duplicates stage. So, it looks like: CREATE TABLE tenk1 (unique1 int, unique2 int, ten int, hundred int); insert into tenk1 SELECT x,x,x,x FROM generate_series(1,50000) as x; CREATE INDEX a_idx1 ON tenk1(unique1); CREATE INDEX a_idx2 ON tenk1(unique2); CREATE INDEX a_hundred ON tenk1(hundred); explain analyze select * from tenk1 a join tenk1 b on ((a.unique2 = 3 or a.unique2 = 7)); PLAN ------------------------------------------------------------------------------------------------------------------------------ Nested Loop (cost=0.29..2033.62 rows=100000 width=32) (actual time=0.090..60.258 rows=100000 loops=1) -> Seq Scan on tenk1 b (cost=0.00..771.00 rows=50000 width=16) (actual time=0.016..9.747 rows=50000 loops=1) -> Materialize (cost=0.29..12.62 rows=2 width=16) (actual time=0.000..0.000 rows=2 loops=50000) -> Index Scan using a_idx2 on tenk1 a (cost=0.29..12.62 rows=2 width=16) (actual time=0.063..0.068 rows=2 loops=1) Index Cond: (unique2 = ANY (ARRAY[3, 7])) Planning Time: 8.257 ms Execution Time: 64.453 ms (7 rows) Overall, this was due to incorrectly defined types of elements in the array, and if we had applied the transformation with the definition of the tup operator, we could have avoided such problems (I used make_scalar_array_op and have not yet found an alternative to this). When I moved the transformation on the index creation stage, it couldn't work properly and as a result I faced the same problem of selectivity calculation. I supposed that the selectivity values are also used there, and not recalculated all over again. perhaps we can solve this by forcibly recalculating the selectivity values, but I foresee other problems there. explain analyze select * from tenk1 a join tenk1 b on ((a.unique2 = 3 or a.unique2 = 7)); QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------- Nested Loop (cost=12.58..312942.91 rows=24950000 width=32) (actual time=0.040..47.582 rows=100000 loops=1) -> Seq Scan on tenk1 b (cost=0.00..771.00 rows=50000 width=16) (actual time=0.009..7.039 rows=50000 loops=1) -> Materialize (cost=12.58..298.16 rows=499 width=16) (actual time=0.000..0.000 rows=2 loops=50000) -> Bitmap Heap Scan on tenk1 a (cost=12.58..295.66 rows=499 width=16) (actual time=0.025..0.028 rows=2 loops=1) Recheck Cond: ((unique2 = 3) OR (unique2 = 7)) Heap Blocks: exact=1 -> BitmapOr (cost=12.58..12.58 rows=500 width=0) (actual time=0.023..0.024 rows=0 loops=1) -> Bitmap Index Scan on a_idx2 (cost=0.00..6.17 rows=250 width=0) (actual time=0.019..0.019 rows=1 loops=1) Index Cond: (unique2 = 3) -> Bitmap Index Scan on a_idx2 (cost=0.00..6.17 rows=250 width=0) (actual time=0.003..0.003 rows=1 loops=1) Index Cond: (unique2 = 7) Planning Time: 0.401 ms Execution Time: 51.350 ms (13 rows) I have attached a diff file so far, but it is very raw and did not pass all regression tests (I attached regression.diff) and even had bad conversion cases (some of the cases did not work at all, in other cases there were no non-converted nodes). But now I see an interesting transformation, which was the most interesting for me. EXPLAIN (COSTS OFF) SELECT * FROM tenk1 WHERE thousand = 42 AND (tenthous = 1 OR tenthous = 3 OR tenthous = 42); - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ - Bitmap Heap Scan on tenk1 - Recheck Cond: (((thousand = 42) AND (tenthous = 1)) OR ((thousand = 42) AND (tenthous = 3)) OR ((thousand = 42) AND (tenthous = 42))) - -> BitmapOr - -> Bitmap Index Scan on tenk1_thous_tenthous - Index Cond: ((thousand = 42) AND (tenthous = 1)) - -> Bitmap Index Scan on tenk1_thous_tenthous - Index Cond: ((thousand = 42) AND (tenthous = 3)) - -> Bitmap Index Scan on tenk1_thous_tenthous - Index Cond: ((thousand = 42) AND (tenthous = 42)) -(9 rows) + QUERY PLAN +------------------------------------------------------------------------ + Index Scan using tenk1_thous_tenthous on tenk1 + Index Cond: ((thousand = 42) AND (tenthous = ANY (ARRAY[1, 3, 42]))) +(2 rows) --------------VG3a6g45u3aLKIHMCUMytKBd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi, all!
The optimizer will itself do a limited form of "normalizing to CNF".
Are you familiar with extract_restriction_or_clauses(), from
orclauses.c? Comments above the function have an example of how this
can work:

  * Although a join clause must reference multiple relations overall,
  * an OR of ANDs clause might contain sub-clauses that reference just one
  * relation and can be used to build a restriction clause for that rel.
  * For example consider
  *      WHERE ((a.x = 42 AND b.y = 43) OR (a.x = 44 AND b.z = 45));
  * We can transform this into
  *      WHERE ((a.x = 42 AND b.y = 43) OR (a.x = 44 AND b.z = 45))
  *          AND (a.x = 42 OR a.x = 44)
  *          AND (b.y = 43 OR b.z = 45);
  * which allows the latter clauses to be applied during the scans of a and b,
  * perhaps as index qualifications, and in any case reducing the number of
  * rows arriving at the join.  In essence this is a partial transformation to
  * CNF (AND of ORs format).  It is not complete, however, because we do not
  * unravel the original OR --- doing so would usually bloat the qualification
  * expression to little gain.
This is an interesting feature. I didn't notice this function before, I studied many times consider_new_or_cause, which were called there. As far as I know, there is a selectivity calculation going on there, but as far as I remember, I called it earlier after my conversion, and unfortunately it didn't solve my problem with calculating selectivity. I'll reconsider it again, maybe I can find something I missed.
Of course this immediately makes me wonder: shouldn't your patch be
able to perform an additional transformation here? You know, by
transforming "a.x = 42 OR a.x = 44" into "a IN (42, 44)"? Although I
haven't checked for myself, I assume that this doesn't happen right
now, since your patch currently performs all of its transformations
during parsing.

I also noticed that the same comment block goes on to say something
about "clauselist_selectivity's inability to recognize redundant
conditions". Perhaps that is relevant to the problems you were having
with selectivity estimation, back when the code was in
preprocess_qual_conditions() instead? I have no reason to believe that
there should be any redundancy left behind by your transformation, so
this is just one possibility to consider.
Separately, the commit message of commit 25a9e54d2d says something
about how the planner builds RestrictInfos, which seems
possibly-relevant. That commit enhanced extended statistics for OR
clauses, so the relevant paragraph describes a limitation of extended
statistics with OR clauses specifically. I'm just guessing, but it
still seems like it might be relevant to the problem you ran into with
selectivity estimation. Another possibility to consider.

I understood what is said about AND clauses in this comment. It seems to me that AND clauses saved like (BoolExpr *) expr->args->(RestrictInfo *) clauseA->(RestrictInfo *)clauseB lists and OR clauses saved like (BoolExpr *) expr -> orclause->(RestrictInfo *)clause A->(RestrictInfo *)clause B.

As I understand it, selectivity is calculated for each expression. But I'll exploring it deeper, because I think this place may contain the answer to the question, what's wrong with selectivity calculation in my patch.

I could move transformation in there (extract_restriction_or_clauses) and didn't have any problem with selectivity calculation, besides it also works on the redundant or duplicates stage. So, it looks like:

CREATE TABLE tenk1 (unique1 int, unique2 int, ten int, hundred int); insert into tenk1 SELECT x,x,x,x FROM generate_series(1,50000) as x; CREATE INDEX a_idx1 ON tenk1(unique1); CREATE INDEX a_idx2 ON tenk1(unique2); CREATE INDEX a_hundred ON tenk1(hundred);

explain analyze select * from tenk1 a join tenk1 b on ((a.unique2 = 3 or a.unique2 = 7));

PLAN ------------------------------------------------------------------------------------------------------------------------------ Nested Loop (cost=0.29..2033.62 rows=100000 width=32) (actual time=0.090..60.258 rows=100000 loops=1) -> Seq Scan on tenk1 b (cost=0.00..771.00 rows=50000 width=16) (actual time=0.016..9.747 rows=50000 loops=1) -> Materialize (cost=0.29..12.62 rows=2 width=16) (actual time=0.000..0.000 rows=2 loops=50000) -> Index Scan using a_idx2 on tenk1 a (cost=0.29..12.62 rows=2 width=16) (actual time=0.063..0.068 rows=2 loops=1) Index Cond: (unique2 = ANY (ARRAY[3, 7])) Planning Time: 8.257 ms Execution Time: 64.453 ms (7 rows)

Overall, this was due to incorrectly defined types of elements in the array, and if we had applied the transformation with the definition of the tup operator, we could have avoided such problems (I used make_scalar_array_op and have not yet found an alternative to this).

When I moved the transformation on the index creation stage, it couldn't work properly and as a result I faced the same problem of selectivity calculation. I supposed that the selectivity values are also used there, and not recalculated all over again. perhaps we can solve this by forcibly recalculating the selectivity values, but I foresee other problems there.

explain analyze select * from tenk1 a join tenk1 b on ((a.unique2 = 3 or a.unique2 = 7));

QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------- Nested Loop (cost=12.58..312942.91 rows=24950000 width=32) (actual time=0.040..47.582 rows=100000 loops=1) -> Seq Scan on tenk1 b (cost=0.00..771.00 rows=50000 width=16) (actual time=0.009..7.039 rows=50000 loops=1) -> Materialize (cost=12.58..298.16 rows=499 width=16) (actual time=0.000..0.000 rows=2 loops=50000) -> Bitmap Heap Scan on tenk1 a (cost=12.58..295.66 rows=499 width=16) (actual time=0.025..0.028 rows=2 loops=1) Recheck Cond: ((unique2 = 3) OR (unique2 = 7)) Heap Blocks: exact=1 -> BitmapOr (cost=12.58..12.58 rows=500 width=0) (actual time=0.023..0.024 rows=0 loops=1) -> Bitmap Index Scan on a_idx2 (cost=0.00..6.17 rows=250 width=0) (actual time=0.019..0.019 rows=1 loops=1) Index Cond: (unique2 = 3) -> Bitmap Index Scan on a_idx2 (cost=0.00..6.17 rows=250 width=0) (actual time=0.003..0.003 rows=1 loops=1) Index Cond: (unique2 = 7) Planning Time: 0.401 ms Execution Time: 51.350 ms (13 rows)

I have attached a diff file so far, but it is very raw and did not pass all regression tests (I attached regression.diff) and even had bad conversion cases (some of the cases did not work at all, in other cases there were no non-converted nodes). But now I see an interesting transformation, which was the most interesting for me.

EXPLAIN (COSTS OFF) SELECT * FROM tenk1 WHERE thousand = 42 AND (tenthous = 1 OR tenthous = 3 OR tenthous = 42); - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ - Bitmap Heap Scan on tenk1 - Recheck Cond: (((thousand = 42) AND (tenthous = 1)) OR ((thousand = 42) AND (tenthous = 3)) OR ((thousand = 42) AND (tenthous = 42))) - -> BitmapOr - -> Bitmap Index Scan on tenk1_thous_tenthous - Index Cond: ((thousand = 42) AND (tenthous = 1)) - -> Bitmap Index Scan on tenk1_thous_tenthous - Index Cond: ((thousand = 42) AND (tenthous = 3)) - -> Bitmap Index Scan on tenk1_thous_tenthous - Index Cond: ((thousand = 42) AND (tenthous = 42)) -(9 rows) + QUERY PLAN +------------------------------------------------------------------------ + Index Scan using tenk1_thous_tenthous on tenk1 + Index Cond: ((thousand = 42) AND (tenthous = ANY (ARRAY[1, 3, 42]))) +(2 rows)

--------------VG3a6g45u3aLKIHMCUMytKBd-- --------------0SpOk2mdGmUJumjHbXudt08W Content-Type: text/x-patch; charset=UTF-8; name="regresssion.diff" Content-Disposition: attachment; filename="regresssion.diff" Content-Transfer-Encoding: base64 ZGlmZiAtVTMgL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm83L3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvb3ByX3Nhbml0eS5vdXQgL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm83L3NyYy90ZXN0 L3JlZ3Jlc3MvcmVzdWx0cy9vcHJfc2FuaXR5Lm91dAotLS0gL2hvbWUvYWxlbmEvcG9zdGdy ZXNwcm83L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQJMjAyMy0w OC0xMiAwMjowMzo0NS4yODQwNzQ4MzQgKzAzMDAKKysrIC9ob21lL2FsZW5hL3Bvc3RncmVz cHJvNy9zcmMvdGVzdC9yZWdyZXNzL3Jlc3VsdHMvb3ByX3Nhbml0eS5vdXQJMjAyMy0wOC0x NyAwMDowMDoyMi43OTMwNDM5MTAgKzAzMDAKQEAgLTQ3LDEwICs0Nyw4IEBACiBTRUxFQ1Qg cDEub2lkLCBwMS5wcm9uYW1lCiBGUk9NIHBnX3Byb2MgYXMgcDEKIFdIRVJFIChwcm9zcmMg PSAnJyBPUiBwcm9zcmMgPSAnLScpIEFORCBwcm9zcWxib2R5IElTIE5VTEw7Ci0gb2lkIHwg cHJvbmFtZSAKLS0tLS0tKy0tLS0tLS0tLQotKDAgcm93cykKLQorRVJST1I6ICBjb3VsZCBu b3QgZGV0ZXJtaW5lIHdoaWNoIGNvbGxhdGlvbiB0byB1c2UgZm9yIHN0cmluZyBjb21wYXJp c29uCitISU5UOiAgVXNlIHRoZSBDT0xMQVRFIGNsYXVzZSB0byBzZXQgdGhlIGNvbGxhdGlv biBleHBsaWNpdGx5LgogLS0gcHJvcmV0c2V0IHNob3VsZCBvbmx5IGJlIHNldCBmb3Igbm9y bWFsIGZ1bmN0aW9ucwogU0VMRUNUIHAxLm9pZCwgcDEucHJvbmFtZQogRlJPTSBwZ19wcm9j IEFTIHAxCkBAIC04MSwxMCArNzksOCBAQAogU0VMRUNUIHAxLm9pZCwgcDEucHJvbmFtZQog RlJPTSBwZ19wcm9jIGFzIHAxCiBXSEVSRSBwcm9sYW5nID0gMTMgQU5EIChwcm9iaW4gSVMg TlVMTCBPUiBwcm9iaW4gPSAnJyBPUiBwcm9iaW4gPSAnLScpOwotIG9pZCB8IHByb25hbWUg Ci0tLS0tLSstLS0tLS0tLS0KLSgwIHJvd3MpCi0KK0VSUk9SOiAgY291bGQgbm90IGRldGVy bWluZSB3aGljaCBjb2xsYXRpb24gdG8gdXNlIGZvciBzdHJpbmcgY29tcGFyaXNvbgorSElO VDogIFVzZSB0aGUgQ09MTEFURSBjbGF1c2UgdG8gc2V0IHRoZSBjb2xsYXRpb24gZXhwbGlj aXRseS4KIFNFTEVDVCBwMS5vaWQsIHAxLnByb25hbWUKIEZST00gcGdfcHJvYyBhcyBwMQog V0hFUkUgcHJvbGFuZyAhPSAxMyBBTkQgcHJvYmluIElTIE5PVCBOVUxMOwpkaWZmIC1VMyAv aG9tZS9hbGVuYS9wb3N0Z3Jlc3Bybzcvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVh dGVfaW5kZXgub3V0IC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNz L3Jlc3VsdHMvY3JlYXRlX2luZGV4Lm91dAotLS0gL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm83 L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAkyMDIzLTA4LTEy IDAyOjAzOjQ1LjI2MDA3NDI5OCArMDMwMAorKysgL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm83 L3NyYy90ZXN0L3JlZ3Jlc3MvcmVzdWx0cy9jcmVhdGVfaW5kZXgub3V0CTIwMjMtMDgtMTcg MDA6MDA6MjUuMzA5MDYwNTQwICswMzAwCkBAIC0xODM4LDE4ICsxODM4LDExIEBACiBFWFBM QUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHRlbmsxCiAgIFdIRVJFIHRob3VzYW5k ID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0g NDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0gQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQotICAgUmVjaGVjayBD b25kOiAoKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMSkpIE9SICgodGhvdXNh bmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDMpKSBPUiAoKHRob3VzYW5kID0gNDIpIEFORCAo dGVudGhvdXMgPSA0MikpKQotICAgLT4gIEJpdG1hcE9yCi0gICAgICAgICAtPiAgQml0bWFw IEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhvdXMKLSAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDEpKQotICAgICAg ICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCi0gICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMg PSAzKSkKLSAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190 ZW50aG91cwotICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBB TkQgKHRlbnRob3VzID0gNDIpKQotKDkgcm93cykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0ZW5rMV90aG91c190ZW50aG91 cyBvbiB0ZW5rMQorICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRo b3VzID0gQU5ZIChBUlJBWVsxLCAzLCA0Ml0pKSkKKygyIHJvd3MpCiAKIFNFTEVDVCAqIEZS T00gdGVuazEKICAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0 ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CkBAIC0xODYxLDIwICsxODU0LDE3IEBA CiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQogICBX SEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogIEFnZ3JlZ2F0ZQogICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKLSAgICAg ICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0gNDIpIEFORCAoKHRob3VzYW5kID0gNDIp IE9SICh0aG91c2FuZCA9IDk5KSkpCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJl ZCA9IDQyKSBBTkQgKHRob3VzYW5kID0gQU5ZIChBUlJBWVs0MiwgOTldKSkpCiAgICAgICAg ICAtPiAgQml0bWFwQW5kCiAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVuazFfaHVuZHJlZAogICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1 bmRyZWQgPSA0MikKLSAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgotICAgICAgICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3Vz Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA0 MikKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5r MV90aG91c190ZW50aG91cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHRob3VzYW5kID0gOTkpCi0oMTEgcm93cykKKyAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gQU5ZIChBUlJBWVs0MiwgOTldKSkKKyg4 IHJvd3MpCiAKIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiAgIFdIRVJFIGh1bmRyZWQg PSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CmRpZmYgLVUzIC9o b21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luaGVy aXQub3V0IC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL3Jlc3Vs dHMvaW5oZXJpdC5vdXQKLS0tIC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2luaGVyaXQub3V0CTIwMjMtMDgtMTIgMDI6MDM6MjkuNDExNzE5 NDUzICswMzAwCisrKyAvaG9tZS9hbGVuYS9wb3N0Z3Jlc3Bybzcvc3JjL3Rlc3QvcmVncmVz cy9yZXN1bHRzL2luaGVyaXQub3V0CTIwMjMtMDgtMTcgMDA6MDA6MjYuNzgxMDcwMjY2ICsw MzAwCkBAIC0xOTI5LDcgKzE5MjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTZXEgU2NhbiBvbiBwYXJ0X2FiX2Nk IGxpc3RfcGFydGVkCi0gICBGaWx0ZXI6ICgoKGEpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkgT1Ig KChhKTo6dGV4dCA9IEFOWSAoJ3tOVUxMLGNkfSc6OnRleHRbXSkpKQorICAgRmlsdGVyOiAo KChhKTo6dGV4dCA9IEFOWSAoJ3tOVUxMLGNkfSc6OnRleHRbXSkpIE9SICgoYSk6OnRleHQg PSAnYWInOjp0ZXh0KSkKICgyIHJvd3MpCiAKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBsaXN0X3BhcnRlZCB3aGVyZSBhID0gJ2FiJzsKZGlmZiAtVTMgL2hvbWUvYWxl bmEvcG9zdGdyZXNwcm83L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzYy5vdXQgL2hv bWUvYWxlbmEvcG9zdGdyZXNwcm83L3NyYy90ZXN0L3JlZ3Jlc3MvcmVzdWx0cy9taXNjLm91 dAotLS0gL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm83L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvbWlzYy5vdXQJMjAyMy0wOC0xMiAwMjowMzoyOS40Mzk3MjAwODEgKzAzMDAKKysrIC9o b21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL3Jlc3VsdHMvbWlzYy5v dXQJMjAyMy0wOC0xNyAwMDowMDozNy43MjkxNDI1MjUgKzAzMDAKQEAgLTk5LDEwICs5OSwx NCBAQAogICAgU0VMRUNUICdwb3N0aGFja2luZycsIHAubmFtZQogICAgRlJPTSBwZXJzb24q IHAKICAgIFdIRVJFIHAubmFtZSA9ICdtaWtlJyBvciBwLm5hbWUgPSAnamVmZic7CitFUlJP UjogIGNvdWxkIG5vdCBkZXRlcm1pbmUgd2hpY2ggY29sbGF0aW9uIHRvIHVzZSBmb3Igc3Ry aW5nIGNvbXBhcmlzb24KK0hJTlQ6ICBVc2UgdGhlIENPTExBVEUgY2xhdXNlIHRvIHNldCB0 aGUgY29sbGF0aW9uIGV4cGxpY2l0bHkuCiBJTlNFUlQgSU5UTyBob2JiaWVzX3IgKG5hbWUs IHBlcnNvbikKICAgIFNFTEVDVCAnYmFza2V0YmFsbCcsIHAubmFtZQogICAgRlJPTSBwZXJz b24gcAogICAgV0hFUkUgcC5uYW1lID0gJ2pvZScgb3IgcC5uYW1lID0gJ3NhbGx5JzsKK0VS Uk9SOiAgY291bGQgbm90IGRldGVybWluZSB3aGljaCBjb2xsYXRpb24gdG8gdXNlIGZvciBz dHJpbmcgY29tcGFyaXNvbgorSElOVDogIFVzZSB0aGUgQ09MTEFURSBjbGF1c2UgdG8gc2V0 IHRoZSBjb2xsYXRpb24gZXhwbGljaXRseS4KIElOU0VSVCBJTlRPIGhvYmJpZXNfciAobmFt ZSkgVkFMVUVTICgnc2t5d2Fsa2luZycpOwogSU5TRVJUIElOVE8gZXF1aXBtZW50X3IgKG5h bWUsIGhvYmJ5KSBWQUxVRVMgKCdhZHZpbCcsICdwb3N0aGFja2luZycpOwogSU5TRVJUIElO VE8gZXF1aXBtZW50X3IgKG5hbWUsIGhvYmJ5KSBWQUxVRVMgKCdwZWV0JydzIGNvZmZlZScs ICdwb3N0aGFja2luZycpOwpAQCAtMTYzLDI0ICsxNjcsMTcgQEAKIC0tIGV2ZXJ5b25lIGVs c2UgZG9lcyBub3RoaW5nLgogLS0KIFNFTEVDVCBwLm5hbWUsIG5hbWUocC5ob2JiaWVzKSBG Uk9NIE9OTFkgcGVyc29uIHA7Ci0gbmFtZSAgfCAgICBuYW1lICAgICAKLS0tLS0tLS0rLS0t LS0tLS0tLS0tLQotIG1pa2UgIHwgcG9zdGhhY2tpbmcKLSBqb2UgICB8IGJhc2tldGJhbGwK LSBzYWxseSB8IGJhc2tldGJhbGwKLSgzIHJvd3MpCisgbmFtZSB8IG5hbWUgCistLS0tLS0r LS0tLS0tCisoMCByb3dzKQogCiAtLQogLS0gYXMgYWJvdmUsIGJ1dCBqZWZmIGFsc28gZG9l cyBwb3N0X2hhY2tpbmcuCiAtLQogU0VMRUNUIHAubmFtZSwgbmFtZShwLmhvYmJpZXMpIEZS T00gcGVyc29uKiBwOwotIG5hbWUgIHwgICAgbmFtZSAgICAgCi0tLS0tLS0tKy0tLS0tLS0t LS0tLS0KLSBtaWtlICB8IHBvc3RoYWNraW5nCi0gam9lICAgfCBiYXNrZXRiYWxsCi0gc2Fs bHkgfCBiYXNrZXRiYWxsCi0gamVmZiAgfCBwb3N0aGFja2luZwotKDQgcm93cykKKyBuYW1l IHwgbmFtZSAKKy0tLS0tLSstLS0tLS0KKygwIHJvd3MpCiAKIC0tCiAtLSB0aGUgbmV4dCB0 d28gcXVlcmllcyBkZW1vbnN0cmF0ZSBob3cgZnVuY3Rpb25zIGdlbmVyYXRlIGJvZ3VzIGR1 cGxpY2F0ZXMuCkBAIC0xODgsMjUgKzE4NSwxNiBAQAogLS0KIFNFTEVDVCBESVNUSU5DVCBo b2JiaWVzX3IubmFtZSwgbmFtZShob2JiaWVzX3IuZXF1aXBtZW50KSBGUk9NIGhvYmJpZXNf cgogICBPUkRFUiBCWSAxLDI7Ci0gICAgbmFtZSAgICAgfCAgICAgbmFtZSAgICAgIAotLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KLSBiYXNrZXRiYWxsICB8IGhpZ2h0b3BzCi0g cG9zdGhhY2tpbmcgfCBhZHZpbAotIHBvc3RoYWNraW5nIHwgcGVldCdzIGNvZmZlZQotIHNr eXdhbGtpbmcgIHwgZ3V0cwotKDQgcm93cykKKyAgICBuYW1lICAgIHwgbmFtZSAKKy0tLS0t LS0tLS0tLSstLS0tLS0KKyBza3l3YWxraW5nIHwgZ3V0cworKDEgcm93KQogCiBTRUxFQ1Qg aG9iYmllc19yLm5hbWUsIChob2JiaWVzX3IuZXF1aXBtZW50KS5uYW1lIEZST00gaG9iYmll c19yOwotICAgIG5hbWUgICAgIHwgICAgIG5hbWUgICAgICAKLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tCi0gcG9zdGhhY2tpbmcgfCBhZHZpbAotIHBvc3RoYWNraW5nIHwgcGVl dCdzIGNvZmZlZQotIHBvc3RoYWNraW5nIHwgYWR2aWwKLSBwb3N0aGFja2luZyB8IHBlZXQn cyBjb2ZmZWUKLSBiYXNrZXRiYWxsICB8IGhpZ2h0b3BzCi0gYmFza2V0YmFsbCAgfCBoaWdo dG9wcwotIHNreXdhbGtpbmcgIHwgZ3V0cwotKDcgcm93cykKKyAgICBuYW1lICAgIHwgbmFt ZSAKKy0tLS0tLS0tLS0tLSstLS0tLS0KKyBza3l3YWxraW5nIHwgZ3V0cworKDEgcm93KQog CiAtLQogLS0gbWlrZSBuZWVkcyBhZHZpbCBhbmQgcGVldCdzIGNvZmZlZSwKQEAgLTIxNCw3 MSArMjAyLDQxIEBACiAtLSBldmVyeW9uZSBlbHNlIGlzIGZpbmUuCiAtLQogU0VMRUNUIHAu bmFtZSwgbmFtZShwLmhvYmJpZXMpLCBuYW1lKGVxdWlwbWVudChwLmhvYmJpZXMpKSBGUk9N IE9OTFkgcGVyc29uIHA7Ci0gbmFtZSAgfCAgICBuYW1lICAgICB8ICAgICBuYW1lICAgICAg Ci0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCi0gbWlrZSAgfCBwb3N0 aGFja2luZyB8IGFkdmlsCi0gbWlrZSAgfCBwb3N0aGFja2luZyB8IHBlZXQncyBjb2ZmZWUK LSBqb2UgICB8IGJhc2tldGJhbGwgIHwgaGlnaHRvcHMKLSBzYWxseSB8IGJhc2tldGJhbGwg IHwgaGlnaHRvcHMKLSg0IHJvd3MpCisgbmFtZSB8IG5hbWUgfCBuYW1lIAorLS0tLS0tKy0t LS0tLSstLS0tLS0KKygwIHJvd3MpCiAKIC0tCiAtLSBhcyBhYm92ZSwgYnV0IGplZmYgbmVl ZHMgYWR2aWwgYW5kIHBlZXQncyBjb2ZmZWUgYXMgd2VsbC4KIC0tCiBTRUxFQ1QgcC5uYW1l LCBuYW1lKHAuaG9iYmllcyksIG5hbWUoZXF1aXBtZW50KHAuaG9iYmllcykpIEZST00gcGVy c29uKiBwOwotIG5hbWUgIHwgICAgbmFtZSAgICAgfCAgICAgbmFtZSAgICAgIAotLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQotIG1pa2UgIHwgcG9zdGhhY2tpbmcg fCBhZHZpbAotIG1pa2UgIHwgcG9zdGhhY2tpbmcgfCBwZWV0J3MgY29mZmVlCi0gam9lICAg fCBiYXNrZXRiYWxsICB8IGhpZ2h0b3BzCi0gc2FsbHkgfCBiYXNrZXRiYWxsICB8IGhpZ2h0 b3BzCi0gamVmZiAgfCBwb3N0aGFja2luZyB8IGFkdmlsCi0gamVmZiAgfCBwb3N0aGFja2lu ZyB8IHBlZXQncyBjb2ZmZWUKLSg2IHJvd3MpCisgbmFtZSB8IG5hbWUgfCBuYW1lIAorLS0t LS0tKy0tLS0tLSstLS0tLS0KKygwIHJvd3MpCiAKIC0tCiAtLSBqdXN0IGxpa2UgdGhlIGxh c3QgdHdvLCBidXQgbWFrZSBzdXJlIHRoYXQgdGhlIHRhcmdldCBsaXN0IGZpeHVwIGFuZAog LS0gdW5mbGF0dGVuaW5nIGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5LgogLS0KIFNFTEVDVCBu YW1lKGVxdWlwbWVudChwLmhvYmJpZXMpKSwgcC5uYW1lLCBuYW1lKHAuaG9iYmllcykgRlJP TSBPTkxZIHBlcnNvbiBwOwotICAgICBuYW1lICAgICAgfCBuYW1lICB8ICAgIG5hbWUgICAg IAotLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLQotIGFkdmlsICAgICAg ICAgfCBtaWtlICB8IHBvc3RoYWNraW5nCi0gcGVldCdzIGNvZmZlZSB8IG1pa2UgIHwgcG9z dGhhY2tpbmcKLSBoaWdodG9wcyAgICAgIHwgam9lICAgfCBiYXNrZXRiYWxsCi0gaGlnaHRv cHMgICAgICB8IHNhbGx5IHwgYmFza2V0YmFsbAotKDQgcm93cykKKyBuYW1lIHwgbmFtZSB8 IG5hbWUgCistLS0tLS0rLS0tLS0tKy0tLS0tLQorKDAgcm93cykKIAogU0VMRUNUIChwLmhv YmJpZXMpLmVxdWlwbWVudC5uYW1lLCBwLm5hbWUsIG5hbWUocC5ob2JiaWVzKSBGUk9NIHBl cnNvbiogcDsKLSAgICAgbmFtZSAgICAgIHwgbmFtZSAgfCAgICBuYW1lICAgICAKLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0KLSBhZHZpbCAgICAgICAgIHwgbWlr ZSAgfCBwb3N0aGFja2luZwotIHBlZXQncyBjb2ZmZWUgfCBtaWtlICB8IHBvc3RoYWNraW5n Ci0gaGlnaHRvcHMgICAgICB8IGpvZSAgIHwgYmFza2V0YmFsbAotIGhpZ2h0b3BzICAgICAg fCBzYWxseSB8IGJhc2tldGJhbGwKLSBhZHZpbCAgICAgICAgIHwgamVmZiAgfCBwb3N0aGFj a2luZwotIHBlZXQncyBjb2ZmZWUgfCBqZWZmICB8IHBvc3RoYWNraW5nCi0oNiByb3dzKQor IG5hbWUgfCBuYW1lIHwgbmFtZSAKKy0tLS0tLSstLS0tLS0rLS0tLS0tCisoMCByb3dzKQog CiBTRUxFQ1QgKHAuaG9iYmllcykuZXF1aXBtZW50Lm5hbWUsIG5hbWUocC5ob2JiaWVzKSwg cC5uYW1lIEZST00gT05MWSBwZXJzb24gcDsKLSAgICAgbmFtZSAgICAgIHwgICAgbmFtZSAg ICAgfCBuYW1lICAKLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0KLSBh ZHZpbCAgICAgICAgIHwgcG9zdGhhY2tpbmcgfCBtaWtlCi0gcGVldCdzIGNvZmZlZSB8IHBv c3RoYWNraW5nIHwgbWlrZQotIGhpZ2h0b3BzICAgICAgfCBiYXNrZXRiYWxsICB8IGpvZQot IGhpZ2h0b3BzICAgICAgfCBiYXNrZXRiYWxsICB8IHNhbGx5Ci0oNCByb3dzKQorIG5hbWUg fCBuYW1lIHwgbmFtZSAKKy0tLS0tLSstLS0tLS0rLS0tLS0tCisoMCByb3dzKQogCiBTRUxF Q1QgbmFtZShlcXVpcG1lbnQocC5ob2JiaWVzKSksIG5hbWUocC5ob2JiaWVzKSwgcC5uYW1l IEZST00gcGVyc29uKiBwOwotICAgICBuYW1lICAgICAgfCAgICBuYW1lICAgICB8IG5hbWUg IAotLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLQotIGFkdmlsICAgICAg ICAgfCBwb3N0aGFja2luZyB8IG1pa2UKLSBwZWV0J3MgY29mZmVlIHwgcG9zdGhhY2tpbmcg fCBtaWtlCi0gaGlnaHRvcHMgICAgICB8IGJhc2tldGJhbGwgIHwgam9lCi0gaGlnaHRvcHMg ICAgICB8IGJhc2tldGJhbGwgIHwgc2FsbHkKLSBhZHZpbCAgICAgICAgIHwgcG9zdGhhY2tp bmcgfCBqZWZmCi0gcGVldCdzIGNvZmZlZSB8IHBvc3RoYWNraW5nIHwgamVmZgotKDYgcm93 cykKKyBuYW1lIHwgbmFtZSB8IG5hbWUgCistLS0tLS0rLS0tLS0tKy0tLS0tLQorKDAgcm93 cykKIAogU0VMRUNUIG5hbWUoZXF1aXBtZW50KGhvYmJ5X2NvbnN0cnVjdCh0ZXh0ICdza3l3 YWxraW5nJywgdGV4dCAnbWVyJykpKTsKICBuYW1lIApAQCAtMzM0LDcgKzI5Miw3IEBACiBT RUxFQ1QgaG9iYmllc19ieV9uYW1lKCdiYXNrZXRiYWxsJyk7CiAgaG9iYmllc19ieV9uYW1l IAogLS0tLS0tLS0tLS0tLS0tLS0KLSBqb2UKKyAKICgxIHJvdykKIAogU0VMRUNUIG5hbWUs IG92ZXJwYWlkKGVtcC4qKSBGUk9NIGVtcDsKQEAgLTM2NCwyOCArMzIyLDE2IEBACiAoMSBy b3cpCiAKIFNFTEVDVCAqLCBuYW1lKGVxdWlwbWVudChoLiopKSBGUk9NIGhvYmJpZXNfciBo OwotICAgIG5hbWUgICAgIHwgcGVyc29uIHwgICAgIG5hbWUgICAgICAKLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCi0gcG9zdGhhY2tpbmcgfCBtaWtlICAgfCBh ZHZpbAotIHBvc3RoYWNraW5nIHwgbWlrZSAgIHwgcGVldCdzIGNvZmZlZQotIHBvc3RoYWNr aW5nIHwgamVmZiAgIHwgYWR2aWwKLSBwb3N0aGFja2luZyB8IGplZmYgICB8IHBlZXQncyBj b2ZmZWUKLSBiYXNrZXRiYWxsICB8IGpvZSAgICB8IGhpZ2h0b3BzCi0gYmFza2V0YmFsbCAg fCBzYWxseSAgfCBoaWdodG9wcwotIHNreXdhbGtpbmcgIHwgICAgICAgIHwgZ3V0cwotKDcg cm93cykKKyAgICBuYW1lICAgIHwgcGVyc29uIHwgbmFtZSAKKy0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0KKyBza3l3YWxraW5nIHwgICAgICAgIHwgZ3V0cworKDEgcm93KQogCiBT RUxFQ1QgKiwgKGVxdWlwbWVudChDQVNUKChoLiopIEFTIGhvYmJpZXNfcikpKS5uYW1lIEZS T00gaG9iYmllc19yIGg7Ci0gICAgbmFtZSAgICAgfCBwZXJzb24gfCAgICAgbmFtZSAgICAg IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KLSBwb3N0aGFja2lu ZyB8IG1pa2UgICB8IGFkdmlsCi0gcG9zdGhhY2tpbmcgfCBtaWtlICAgfCBwZWV0J3MgY29m ZmVlCi0gcG9zdGhhY2tpbmcgfCBqZWZmICAgfCBhZHZpbAotIHBvc3RoYWNraW5nIHwgamVm ZiAgIHwgcGVldCdzIGNvZmZlZQotIGJhc2tldGJhbGwgIHwgam9lICAgIHwgaGlnaHRvcHMK LSBiYXNrZXRiYWxsICB8IHNhbGx5ICB8IGhpZ2h0b3BzCi0gc2t5d2Fsa2luZyAgfCAgICAg ICAgfCBndXRzCi0oNyByb3dzKQorICAgIG5hbWUgICAgfCBwZXJzb24gfCBuYW1lIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLQorIHNreXdhbGtpbmcgfCAgICAgICAgfCBndXRz CisoMSByb3cpCiAKIC0tCiAtLSBmdW5jdGlvbmFsIGpvaW5zCmRpZmYgLVUzIC9ob21lL2Fs ZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0 IC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL3Jlc3VsdHMvdGlk c2Nhbi5vdXQKLS0tIC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3RpZHNjYW4ub3V0CTIwMjMtMDgtMTIgMDI6MDM6MjkuNTExNzIxNjk0ICsw MzAwCisrKyAvaG9tZS9hbGVuYS9wb3N0Z3Jlc3Bybzcvc3JjL3Rlc3QvcmVncmVzcy9yZXN1 bHRzL3RpZHNjYW4ub3V0CTIwMjMtMDgtMTcgMDA6MDA6MzcuNTIxMTQxMTUzICswMzAwCkBA IC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBUaWQgU2NhbiBvbiB0aWRz Y2FuCi0gICBUSUQgQ29uZDogKChjdGlkID0gJygwLDIpJzo6dGlkKSBPUiAoJygwLDEpJzo6 dGlkID0gY3RpZCkpCisgICBUSUQgQ29uZDogKGN0aWQgPSBBTlkgKEFSUkFZWycoMCwyKSc6 OnRpZCwgJygwLDEpJzo6dGlkXSkpCiAoMiByb3dzKQogCiBTRUxFQ1QgY3RpZCwgKiBGUk9N IHRpZHNjYW4gV0hFUkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7CmRpZmYg LVUzIC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N0YXRzX2V4dC5vdXQgL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm83L3NyYy90ZXN0L3JlZ3Jl c3MvcmVzdWx0cy9zdGF0c19leHQub3V0Ci0tLSAvaG9tZS9hbGVuYS9wb3N0Z3Jlc3Bybzcv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0CTIwMjMtMDgtMTIgMDI6 MDM6NDUuMzIwMDc1NjM5ICswMzAwCisrKyAvaG9tZS9hbGVuYS9wb3N0Z3Jlc3Bybzcvc3Jj L3Rlc3QvcmVncmVzcy9yZXN1bHRzL3N0YXRzX2V4dC5vdXQJMjAyMy0wOC0xNyAwMDowMDo0 MS4xNjUxNjUxNzQgKzAzMDAKQEAgLTExNjAsMTcgKzExNjAsMTMgQEAKICgxIHJvdykKIAog U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5j dGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoYSA9IDEgT1IgYSA9IDUxKSBBTkQgKGIgPSAn JzEnJyBPUiBiID0gJycyJycpJyk7Ci0gZXN0aW1hdGVkIHwgYWN0dWFsIAotLS0tLS0tLS0t LS0rLS0tLS0tLS0KLSAgICAgICAgIDQgfCAgICAxMDAKLSgxIHJvdykKLQorRVJST1I6ICBj b3VsZCBub3QgZGV0ZXJtaW5lIHdoaWNoIGNvbGxhdGlvbiB0byB1c2UgZm9yIHN0cmluZyBj b21wYXJpc29uCitISU5UOiAgVXNlIHRoZSBDT0xMQVRFIGNsYXVzZSB0byBzZXQgdGhlIGNv bGxhdGlvbiBleHBsaWNpdGx5LgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGNoZWNr X2VzdGltYXRlZF9yb3dzKHRleHQpIGxpbmUgNyBhdCBGT1Igb3ZlciBFWEVDVVRFIHN0YXRl bWVudAogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJP TSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoYSA9IDEgT1IgYSA9IDIgT1IgYSA9 IDUxIE9SIGEgPSA1MikgQU5EIChiID0gJycxJycgT1IgYiA9ICcnMicnKScpOwotIGVzdGlt YXRlZCB8IGFjdHVhbCAKLS0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgICA4IHwgICAg MjAwCi0oMSByb3cpCi0KK0VSUk9SOiAgY291bGQgbm90IGRldGVybWluZSB3aGljaCBjb2xs YXRpb24gdG8gdXNlIGZvciBzdHJpbmcgY29tcGFyaXNvbgorSElOVDogIFVzZSB0aGUgQ09M TEFURSBjbGF1c2UgdG8gc2V0IHRoZSBjb2xsYXRpb24gZXhwbGljaXRseS4KK0NPTlRFWFQ6 ICBQTC9wZ1NRTCBmdW5jdGlvbiBjaGVja19lc3RpbWF0ZWRfcm93cyh0ZXh0KSBsaW5lIDcg YXQgRk9SIG92ZXIgRVhFQ1VURSBzdGF0ZW1lbnQKIC0tIE9SIGNsYXVzZXMgcmVmZXJlbmNp bmcgZGlmZmVyZW50IGF0dHJpYnV0ZXMKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVk X3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEg PSAxIE9SIGIgPSAnJzEnJykgQU5EIGIgPSAnJzEnJycpOwogIGVzdGltYXRlZCB8IGFjdHVh bCAKQEAgLTEzMjIsMjEgKzEzMTgsMTcgQEAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1h dGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUg KGEgPSAxIE9SIGEgPSA1MSkgQU5EIGIgPSAnJzEnJycpOwogIGVzdGltYXRlZCB8IGFjdHVh bCAKIC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisgICAgICAg MTAwIHwgICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVk X3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEg PSAxIE9SIGEgPSA1MSkgQU5EIChiID0gJycxJycgT1IgYiA9ICcnMicnKScpOwotIGVzdGlt YXRlZCB8IGFjdHVhbCAKLS0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAg MTAwCi0oMSByb3cpCi0KK0VSUk9SOiAgY291bGQgbm90IGRldGVybWluZSB3aGljaCBjb2xs YXRpb24gdG8gdXNlIGZvciBzdHJpbmcgY29tcGFyaXNvbgorSElOVDogIFVzZSB0aGUgQ09M TEFURSBjbGF1c2UgdG8gc2V0IHRoZSBjb2xsYXRpb24gZXhwbGljaXRseS4KK0NPTlRFWFQ6 ICBQTC9wZ1NRTCBmdW5jdGlvbiBjaGVja19lc3RpbWF0ZWRfcm93cyh0ZXh0KSBsaW5lIDcg YXQgRk9SIG92ZXIgRVhFQ1VURSBzdGF0ZW1lbnQKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0 aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hF UkUgKGEgPSAxIE9SIGEgPSAyIE9SIGEgPSA1MSBPUiBhID0gNTIpIEFORCAoYiA9ICcnMScn IE9SIGIgPSAnJzInJyknKTsKLSBlc3RpbWF0ZWQgfCBhY3R1YWwgCi0tLS0tLS0tLS0tLSst LS0tLS0tLQotICAgICAgIDE5NyB8ICAgIDIwMAotKDEgcm93KQotCitFUlJPUjogIGNvdWxk IG5vdCBkZXRlcm1pbmUgd2hpY2ggY29sbGF0aW9uIHRvIHVzZSBmb3Igc3RyaW5nIGNvbXBh cmlzb24KK0hJTlQ6ICBVc2UgdGhlIENPTExBVEUgY2xhdXNlIHRvIHNldCB0aGUgY29sbGF0 aW9uIGV4cGxpY2l0bHkuCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gY2hlY2tfZXN0 aW1hdGVkX3Jvd3ModGV4dCkgbGluZSA3IGF0IEZPUiBvdmVyIEVYRUNVVEUgc3RhdGVtZW50 CiAtLSBPUiBjbGF1c2VzIHJlZmVyZW5jaW5nIGRpZmZlcmVudCBhdHRyaWJ1dGVzIGFyZSBp bmNvbXBhdGlibGUKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ1NFTEVD VCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEgPSAxIE9SIGIgPSAn JzEnJykgQU5EIGIgPSAnJzEnJycpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKQEAgLTE1MDEs MTcgKzE0OTMsMTMgQEAKICgxIHJvdykKIAogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0 ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAo KGEgKiAyKSA9IDIgT1IgKGEgKiAyKSA9IDEwMikgQU5EICh1cHBlcihiKSA9ICcnMScnIE9S IHVwcGVyKGIpID0gJycyJycpJyk7Ci0gZXN0aW1hdGVkIHwgYWN0dWFsIAotLS0tLS0tLS0t LS0rLS0tLS0tLS0KLSAgICAgICAgIDEgfCAgICAxMDAKLSgxIHJvdykKLQorRVJST1I6ICBj b3VsZCBub3QgZGV0ZXJtaW5lIHdoaWNoIGNvbGxhdGlvbiB0byB1c2UgZm9yIHN0cmluZyBj b21wYXJpc29uCitISU5UOiAgVXNlIHRoZSBDT0xMQVRFIGNsYXVzZSB0byBzZXQgdGhlIGNv bGxhdGlvbiBleHBsaWNpdGx5LgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGNoZWNr X2VzdGltYXRlZF9yb3dzKHRleHQpIGxpbmUgNyBhdCBGT1Igb3ZlciBFWEVDVVRFIHN0YXRl bWVudAogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJP TSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoKGEgKiAyKSA9IDIgT1IgKGEgKiAy KSA9IDQgT1IgKGEgKiAyKSA9IDEwMiBPUiAoYSAqIDIpID0gMTA0KSBBTkQgKHVwcGVyKGIp ID0gJycxJycgT1IgdXBwZXIoYikgPSAnJzInJyknKTsKLSBlc3RpbWF0ZWQgfCBhY3R1YWwg Ci0tLS0tLS0tLS0tLSstLS0tLS0tLQotICAgICAgICAgMSB8ICAgIDIwMAotKDEgcm93KQot CitFUlJPUjogIGNvdWxkIG5vdCBkZXRlcm1pbmUgd2hpY2ggY29sbGF0aW9uIHRvIHVzZSBm b3Igc3RyaW5nIGNvbXBhcmlzb24KK0hJTlQ6ICBVc2UgdGhlIENPTExBVEUgY2xhdXNlIHRv IHNldCB0aGUgY29sbGF0aW9uIGV4cGxpY2l0bHkuCitDT05URVhUOiAgUEwvcGdTUUwgZnVu Y3Rpb24gY2hlY2tfZXN0aW1hdGVkX3Jvd3ModGV4dCkgbGluZSA3IGF0IEZPUiBvdmVyIEVY RUNVVEUgc3RhdGVtZW50CiAtLSBPUiBjbGF1c2VzIHJlZmVyZW5jaW5nIGRpZmZlcmVudCBh dHRyaWJ1dGVzCiBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdTRUxFQ1Qg KiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIFdIRVJFICgoYSAqIDIpID0gMiBPUiB1 cHBlcihiKSA9ICcnMScnKSBBTkQgdXBwZXIoYikgPSAnJzEnJycpOwogIGVzdGltYXRlZCB8 IGFjdHVhbCAKQEAgLTE2NjQsMjEgKzE2NTIsMTcgQEAKIFNFTEVDVCAqIEZST00gY2hlY2tf ZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMg V0hFUkUgKChhICogMikgPSAyIE9SIChhICogMikgPSAxMDIpIEFORCB1cHBlcihiKSA9ICcn MScnJyk7CiAgZXN0aW1hdGVkIHwgYWN0dWFsIAogLS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAg ICAgICAgOTkgfCAgICAxMDAKKyAgICAgICAxMDAgfCAgICAxMDAKICgxIHJvdykKIAogU0VM RUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoKGEgKiAyKSA9IDIgT1IgKGEgKiAyKSA9IDEwMikg QU5EICh1cHBlcihiKSA9ICcnMScnIE9SIHVwcGVyKGIpID0gJycyJycpJyk7Ci0gZXN0aW1h dGVkIHwgYWN0dWFsIAotLS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAgICAgICAgOTkgfCAgICAx MDAKLSgxIHJvdykKLQorRVJST1I6ICBjb3VsZCBub3QgZGV0ZXJtaW5lIHdoaWNoIGNvbGxh dGlvbiB0byB1c2UgZm9yIHN0cmluZyBjb21wYXJpc29uCitISU5UOiAgVXNlIHRoZSBDT0xM QVRFIGNsYXVzZSB0byBzZXQgdGhlIGNvbGxhdGlvbiBleHBsaWNpdGx5LgorQ09OVEVYVDog IFBML3BnU1FMIGZ1bmN0aW9uIGNoZWNrX2VzdGltYXRlZF9yb3dzKHRleHQpIGxpbmUgNyBh dCBGT1Igb3ZlciBFWEVDVVRFIHN0YXRlbWVudAogU0VMRUNUICogRlJPTSBjaGVja19lc3Rp bWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVS RSAoKGEgKiAyKSA9IDIgT1IgKGEgKiAyKSA9IDQgT1IgKGEgKiAyKSA9IDEwMiBPUiAoYSAq IDIpID0gMTA0KSBBTkQgKHVwcGVyKGIpID0gJycxJycgT1IgdXBwZXIoYikgPSAnJzInJykn KTsKLSBlc3RpbWF0ZWQgfCBhY3R1YWwgCi0tLS0tLS0tLS0tLSstLS0tLS0tLQotICAgICAg IDE5NyB8ICAgIDIwMAotKDEgcm93KQotCitFUlJPUjogIGNvdWxkIG5vdCBkZXRlcm1pbmUg d2hpY2ggY29sbGF0aW9uIHRvIHVzZSBmb3Igc3RyaW5nIGNvbXBhcmlzb24KK0hJTlQ6ICBV c2UgdGhlIENPTExBVEUgY2xhdXNlIHRvIHNldCB0aGUgY29sbGF0aW9uIGV4cGxpY2l0bHku CitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gY2hlY2tfZXN0aW1hdGVkX3Jvd3ModGV4 dCkgbGluZSA3IGF0IEZPUiBvdmVyIEVYRUNVVEUgc3RhdGVtZW50CiAtLSBPUiBjbGF1c2Vz IHJlZmVyZW5jaW5nIGRpZmZlcmVudCBhdHRyaWJ1dGVzCiBTRUxFQ1QgKiBGUk9NIGNoZWNr X2VzdGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVz IFdIRVJFICgoYSAqIDIpID0gMiBPUiB1cHBlcihiKSA9ICcnMScnKSBBTkQgdXBwZXIoYikg PSAnJzEnJycpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKZGlmZiAtVTMgL2hvbWUvYWxlbmEv cG9zdGdyZXNwcm83L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4u b3V0IC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL3Jlc3VsdHMv cGFydGl0aW9uX2pvaW4ub3V0Ci0tLSAvaG9tZS9hbGVuYS9wb3N0Z3Jlc3Bybzcvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQJMjAyMy0wOC0xMiAwMjow Mzo0NS4yODgwNzQ5MjQgKzAzMDAKKysrIC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMv dGVzdC9yZWdyZXNzL3Jlc3VsdHMvcGFydGl0aW9uX2pvaW4ub3V0CTIwMjMtMDgtMTcgMDA6 MDA6NTEuMTczMjMxMDY4ICswMzAwCkBAIC0yOTAsMTMgKzI5MCwxMyBAQAogLS0gQ3VycmVu dGx5IHdlIGNhbid0IGRvIHBhcnRpdGlvbmVkIGpvaW4gaWYgbnVsbGFibGUtc2lkZSBwYXJ0 aXRpb25zIGFyZSBwcnVuZWQKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB0MS5hLCB0 MS5jLCB0Mi5iLCB0Mi5jIEZST00gKFNFTEVDVCAqIEZST00gcHJ0MSBXSEVSRSBhIDwgNDUw KSB0MSBGVUxMIEpPSU4gKFNFTEVDVCAqIEZST00gcHJ0MiBXSEVSRSBiID4gMjUwKSB0MiBP TiB0MS5hID0gdDIuYiBXSEVSRSB0MS5iID0gMCBPUiB0Mi5hID0gMCBPUkRFUiBCWSB0MS5h LCB0Mi5iOwotICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIFNvcnQKICAgIFNvcnQgS2V5OiBwcnQxLmEsIHBydDIu YgogICAgLT4gIEhhc2ggRnVsbCBKb2luCiAgICAgICAgICBIYXNoIENvbmQ6IChwcnQxLmEg PSBwcnQyLmIpCi0gICAgICAgICBGaWx0ZXI6ICgocHJ0MS5iID0gMCkgT1IgKHBydDIuYSA9 IDApKQorICAgICAgICAgRmlsdGVyOiAoKChwcnQxLmIgPSAwKSBPUiAocHJ0Mi5hID0gMCkp IEFORCAoKHBydDEuYiA9IDApIE9SIChwcnQyLmEgPSAwKSkpCiAgICAgICAgICAtPiAgQXBw ZW5kCiAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9wMSBwcnQxXzEKICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGEgPCA0NTApCkBAIC0yMjcwLDEwICsyMjcw LDExIEBACiB3aGVyZSBub3QgZXhpc3RzIChzZWxlY3QgMSBmcm9tIHBydHgyCiAgICAgICAg ICAgICAgICAgICB3aGVyZSBwcnR4Mi5hPXBydHgxLmEgYW5kIChwcnR4Mi5iPXBydHgxLmIr MSBvciBwcnR4Mi5jPTk5KSkKICAgYW5kIGE8MjAgYW5kIGM9OTE7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogIEFwcGVuZAogICAgLT4gIE5lc3RlZCBMb29wIEFudGkgSm9pbgorICAgICAgICAgSm9p biBGaWx0ZXI6ICgocHJ0eDJfMS5iID0gKHBydHgxXzEuYiArIDEpKSBPUiAocHJ0eDJfMS5j ID0gOTkpKQogICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydHgxXzEKICAgICAgICAgICAg ICAgIEZpbHRlcjogKChhIDwgMjApIEFORCAoYyA9IDkxKSkKICAgICAgICAgIC0+ICBCaXRt YXAgSGVhcCBTY2FuIG9uIHBydHgyXzEKQEAgLTIyODUsNiArMjI4Niw3IEBACiAgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gcHJ0eDJfMV9jX2lkeAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGMgPSA5OSkKICAgIC0+ ICBOZXN0ZWQgTG9vcCBBbnRpIEpvaW4KKyAgICAgICAgIEpvaW4gRmlsdGVyOiAoKHBydHgy XzIuYiA9IChwcnR4MV8yLmIgKyAxKSkgT1IgKHBydHgyXzIuYyA9IDk5KSkKICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwcnR4MV8yCiAgICAgICAgICAgICAgICBGaWx0ZXI6ICgoYSA8 IDIwKSBBTkQgKGMgPSA5MSkpCiAgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBw cnR4Ml8yCkBAIC0yMjk1LDcgKzIyOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGIgPSAocHJ0eDFfMi5iICsgMSkpCiAgICAgICAgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gcHJ0eDJfMl9jX2lkeAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGMgPSA5OSkKLSgyMyByb3dzKQorKDI1 IHJvd3MpCiAKIHNlbGVjdCAqIGZyb20gcHJ0eDEKIHdoZXJlIG5vdCBleGlzdHMgKHNlbGVj dCAxIGZyb20gcHJ0eDIKZGlmZiAtVTMgL2hvbWUvYWxlbmEvcG9zdGdyZXNwcm83L3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dCAvaG9tZS9hbGVuYS9w b3N0Z3Jlc3Bybzcvc3JjL3Rlc3QvcmVncmVzcy9yZXN1bHRzL3BhcnRpdGlvbl9wcnVuZS5v dXQKLS0tIC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQJMjAyMy0wOC0xMiAwMjowMzo0NS4yOTIwNzUwMTMg KzAzMDAKKysrIC9ob21lL2FsZW5hL3Bvc3RncmVzcHJvNy9zcmMvdGVzdC9yZWdyZXNzL3Jl c3VsdHMvcGFydGl0aW9uX3BydW5lLm91dAkyMDIzLTA4LTE3IDAwOjAwOjUwLjc3NzIyODQ2 MyArMDMwMApAQCAtODIsMjQgKzgyLDM4IEBACiAoMiByb3dzKQogCiBleHBsYWluIChjb3N0 cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA9ICdhJyBvciBhID0gJ2MnOwotICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg QXBwZW5kCiAgICAtPiAgU2VxIFNjYW4gb24gbHBfYWQgbHBfMQotICAgICAgICAgRmlsdGVy OiAoKGEgPSAnYSc6OmJwY2hhcikgT1IgKGEgPSAnYyc6OmJwY2hhcikpCisgICAgICAgICBG aWx0ZXI6IChhID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpCiAgICAtPiAgU2VxIFNjYW4g b24gbHBfYmMgbHBfMgotICAgICAgICAgRmlsdGVyOiAoKGEgPSAnYSc6OmJwY2hhcikgT1Ig KGEgPSAnYyc6OmJwY2hhcikpCi0oNSByb3dzKQorICAgICAgICAgRmlsdGVyOiAoYSA9IEFO WSAoJ3thLGN9Jzo6YnBjaGFyW10pKQorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2VmIGxwXzMK KyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hhcltdKSkKKyAgIC0+ ICBTZXEgU2NhbiBvbiBscF9nIGxwXzQKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7 YSxjfSc6OmJwY2hhcltdKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9udWxsIGxwXzUKKyAg ICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hhcltdKSkKKyAgIC0+ICBT ZXEgU2NhbiBvbiBscF9kZWZhdWx0IGxwXzYKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkg KCd7YSxjfSc6OmJwY2hhcltdKSkKKygxMyByb3dzKQogCiBleHBsYWluIChjb3N0cyBvZmYp IHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBub3QgbnVsbCBhbmQgKGEgPSAnYScgb3Ig YSA9ICdjJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQXBwZW5k CiAgICAtPiAgU2VxIFNjYW4gb24gbHBfYWQgbHBfMQotICAgICAgICAgRmlsdGVyOiAoKGEg SVMgTk9UIE5VTEwpIEFORCAoKGEgPSAnYSc6OmJwY2hhcikgT1IgKGEgPSAnYyc6OmJwY2hh cikpKQorICAgICAgICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFORCAoYSA9IEFOWSAo J3thLGN9Jzo6YnBjaGFyW10pKSkKICAgIC0+ICBTZXEgU2NhbiBvbiBscF9iYyBscF8yCi0g ICAgICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EICgoYSA9ICdhJzo6YnBjaGFy KSBPUiAoYSA9ICdjJzo6YnBjaGFyKSkpCi0oNSByb3dzKQorICAgICAgICAgRmlsdGVyOiAo KGEgSVMgTk9UIE5VTEwpIEFORCAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBscF9lZiBscF8zCisgICAgICAgICBGaWx0ZXI6ICgoYSBJUyBO T1QgTlVMTCkgQU5EIChhID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpKQorICAgLT4gIFNl cSBTY2FuIG9uIGxwX2cgbHBfNAorICAgICAgICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwp IEFORCAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKSkKKyAgIC0+ICBTZXEgU2NhbiBv biBscF9kZWZhdWx0IGxwXzUKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBB TkQgKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hhcltdKSkpCisoMTEgcm93cykKIAogZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgPD4gJ2cnOwogICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCkBAIC01MTUsMTEgKzUyOSwxMyBAQAog KDI3IHJvd3MpCiAKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hl cmUgYSA9IDEgb3IgYSA9IDc7Ci0gICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBTZXEgU2NhbiBvbiBybHAyIHJs cAotICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoYSA9IDcpKQotKDIgcm93cykKKyAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICBTdWJw bGFucyBSZW1vdmVkOiAxCisgICAtPiAgU2VxIFNjYW4gb24gcmxwMiBybHBfMQorICAgICAg ICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3sxLDd9Jzo6aW50ZWdlcltdKSkKKyg0IHJvd3MpCiAK IGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDEgb3Ig YiA9ICdhYic7CiAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgCkBAIC01OTYsMTQgKzYxMiwxNSBAQAogCiAtLSB3aGVyZSBjbGF1c2Ug Y29udHJhZGljdHMgc3ViLXBhcnRpdGlvbidzIGNvbnN0cmFpbnQKIGV4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDIwIG9yIGEgPSA0MDsKLSAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIEFwcGVuZAorICAgU3VicGxhbnMgUmVtb3ZlZDogMgog ICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfMSBybHBfMQotICAgICAgICAgRmlsdGVyOiAoKGEg PSAyMCkgT1IgKGEgPSA0MCkpCisgICAgICAgICBGaWx0ZXI6IChhID0gQU5ZICgnezIwLDQw fSc6OmludGVnZXJbXSkpCiAgICAtPiAgU2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0IHJscF8y Ci0gICAgICAgICBGaWx0ZXI6ICgoYSA9IDIwKSBPUiAoYSA9IDQwKSkKLSg1IHJvd3MpCisg ICAgICAgICBGaWx0ZXI6IChhID0gQU5ZICgnezIwLDQwfSc6OmludGVnZXJbXSkpCisoNiBy b3dzKQogCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwMyB3aGVyZSBh ID0gMjA7ICAgLyogZW1wdHkgKi8KICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgCkBAIC0x OTMzLDEwICsxOTUwLDEwIEBACiAKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJv bSBocCB3aGVyZSBhID0gMSBhbmQgYiA9ICdhYmNkZScgYW5kCiAgIChjID0gMiBvciBjID0g Myk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTZXEgU2NhbiBv biBocDIgaHAKLSAgIEZpbHRlcjogKChhID0gMSkgQU5EIChiID0gJ2FiY2RlJzo6dGV4dCkg QU5EICgoYyA9IDIpIE9SIChjID0gMykpKQorICAgRmlsdGVyOiAoKGMgPSBBTlkgKCd7Miwz fSc6OmludGVnZXJbXSkpIEFORCAoYSA9IDEpIEFORCAoYiA9ICdhYmNkZSc6OnRleHQpKQog KDIgcm93cykKIAogZHJvcCB0YWJsZSBocDI7CkBAIC0yMjY1LDExICsyMjgyLDExIEBACiAg ICAgICAgICBXb3JrZXJzIExhdW5jaGVkOiBOCiAgICAgICAgICAtPiAgUGFyYWxsZWwgQXBw ZW5kIChhY3R1YWwgcm93cz1OIGxvb3BzPU4pCiAgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gYWJfYTFfYjIgYWJfMSAoYWN0dWFsIHJvd3M9TiBsb29wcz1OKQot ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGIgPSAyKSBBTkQgKChhID0gJDApIE9S IChhID0gJDEpKSkKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChhID0gQU5ZIChB UlJBWVskMCwgJDFdKSkgQU5EIChiID0gMikpCiAgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gYWJfYTJfYjIgYWJfMiAobmV2ZXIgZXhlY3V0ZWQpCi0gICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICgoYiA9IDIpIEFORCAoKGEgPSAkMCkgT1IgKGEgPSAk MSkpKQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgPSBBTlkgKEFSUkFZWyQw LCAkMV0pKSBBTkQgKGIgPSAyKSkKICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEg U2NhbiBvbiBhYl9hM19iMiBhYl8zIChhY3R1YWwgcm93cz1OIGxvb3BzPU4pCi0gICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICgoYiA9IDIpIEFORCAoKGEgPSAkMCkgT1IgKGEgPSAk MSkpKQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgPSBBTlkgKEFSUkFZWyQw LCAkMV0pKSBBTkQgKGIgPSAyKSkKICgxNiByb3dzKQogCiAtLSBUZXN0IHBydW5pbmcgZHVy aW5nIHBhcmFsbGVsIG5lc3RlZCBsb29wIHF1ZXJ5CkBAIC0zNDA4LDE0ICszNDI1LDExIEBA CiAoMiByb3dzKQogCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcHBfYXJy cGFydCB3aGVyZSBhIGluICgnezQsIDV9JywgJ3sxfScpOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotIEFwcGVuZAotICAgLT4gIFNlcSBTY2FuIG9uIHBwX2FycnBh cnQxIHBwX2FycnBhcnRfMQotICAgICAgICAgRmlsdGVyOiAoKGEgPSAnezQsNX0nOjppbnRl Z2VyW10pIE9SIChhID0gJ3sxfSc6OmludGVnZXJbXSkpCi0gICAtPiAgU2VxIFNjYW4gb24g cHBfYXJycGFydDIgcHBfYXJycGFydF8yCi0gICAgICAgICBGaWx0ZXI6ICgoYSA9ICd7NCw1 fSc6OmludGVnZXJbXSkgT1IgKGEgPSAnezF9Jzo6aW50ZWdlcltdKSkKLSg1IHJvd3MpCisg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBwX2FycnBhcnQyIHBwX2FycnBh cnQKKyAgIEZpbHRlcjogKGEgPSAnezQsNX0nOjppbnRlZ2VyW10pCisoMiByb3dzKQogCiBl eHBsYWluIChjb3N0cyBvZmYpIHVwZGF0ZSBwcF9hcnJwYXJ0IHNldCBhID0gYSB3aGVyZSBh ID0gJ3sxfSc7CiAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg IApAQCAtMzQ2NCwxNCArMzQ3OCwxMSBAQAogKDIgcm93cykKIAogZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgKiBmcm9tIHBwaF9hcnJwYXJ0IHdoZXJlIGEgaW4gKCd7NCwgNX0nLCAn ezF9Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQXBwZW5kCi0g ICAtPiAgU2VxIFNjYW4gb24gcHBoX2FycnBhcnQxIHBwaF9hcnJwYXJ0XzEKLSAgICAgICAg IEZpbHRlcjogKChhID0gJ3s0LDV9Jzo6aW50ZWdlcltdKSBPUiAoYSA9ICd7MX0nOjppbnRl Z2VyW10pKQotICAgLT4gIFNlcSBTY2FuIG9uIHBwaF9hcnJwYXJ0MiBwcGhfYXJycGFydF8y Ci0gICAgICAgICBGaWx0ZXI6ICgoYSA9ICd7NCw1fSc6OmludGVnZXJbXSkgT1IgKGEgPSAn ezF9Jzo6aW50ZWdlcltdKSkKLSg1IHJvd3MpCisgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBwcGhfYXJycGFydDEgcHBoX2FycnBhcnQKKyAgIEZpbHRlcjogKGEg PSAnezQsNX0nOjppbnRlZ2VyW10pCisoMiByb3dzKQogCiBkcm9wIHRhYmxlIHBwaF9hcnJw YXJ0OwogLS0gZW51bSB0eXBlIGxpc3QgcGFydGl0aW9uIGtleQo= --------------0SpOk2mdGmUJumjHbXudt08W Content-Type: text/x-patch; charset=UTF-8; name="diff_fix_sel.diff" Content-Disposition: attachment; filename="diff_fix_sel.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKaW5kZXggNDM1NDM4YTE3 MzUuLjljODIyOTdlMjQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jbGF1c2VzZWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2Vz ZWwuYwpAQCAtNzUxLDcgKzc1MSw4IEBAIGNsYXVzZV9zZWxlY3Rpdml0eV9leHQoUGxhbm5l ckluZm8gKnJvb3QsCiAJCSAqIHNvIHRoYXQgcGVyLXN1YmNsYXVzZSBzZWxlY3Rpdml0aWVz IGNhbiBiZSBjYWNoZWQuCiAJCSAqLwogCQlpZiAocmluZm8tPm9yY2xhdXNlKQotCQkJY2xh dXNlID0gKE5vZGUgKikgcmluZm8tPm9yY2xhdXNlOworCQkJe2NsYXVzZSA9IChOb2RlICop IHJpbmZvLT5vcmNsYXVzZTsKKwkJCX0KIAkJZWxzZQogCQkJY2xhdXNlID0gKE5vZGUgKikg cmluZm8tPmNsYXVzZTsKIAl9CkBAIC04MjMsNiArODI0LDcgQEAgY2xhdXNlX3NlbGVjdGl2 aXR5X2V4dChQbGFubmVySW5mbyAqcm9vdCwKIAkJICogQWxtb3N0IHRoZSBzYW1lIHRoaW5n IGFzIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHksIGJ1dCB3aXRoIHRoZQogCQkgKiBjbGF1c2Vz IGNvbm5lY3RlZCBieSBPUi4KIAkJICovCisKIAkJczEgPSBjbGF1c2VsaXN0X3NlbGVjdGl2 aXR5X29yKHJvb3QsCiAJCQkJCQkJCQkgICAoKEJvb2xFeHByICopIGNsYXVzZSktPmFyZ3Ms CiAJCQkJCQkJCQkgICB2YXJSZWxpZCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL29yY2xhdXNlcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3Jj bGF1c2VzLmMKaW5kZXggNmVmOWQxNGI5MDIuLjgxYjExODY1MjAzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9vcmNsYXVzZXMuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9vcmNsYXVzZXMuYwpAQCAtMjIsNiArMjIsMTAgQEAKICNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29yY2xh dXNlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8uaCIKKyNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZXhwci5oIgor I2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2VyY2UuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFy c2Vfb3Blci5oIgogCiAKIHN0YXRpYyBib29sIGlzX3NhZmVfcmVzdHJpY3Rpb25fY2xhdXNl X2ZvcihSZXN0cmljdEluZm8gKnJpbmZvLCBSZWxPcHRJbmZvICpyZWwpOwpAQCAtMjksNiAr MzMsMzAwIEBAIHN0YXRpYyBFeHByICpleHRyYWN0X29yX2NsYXVzZShSZXN0cmljdEluZm8g Km9yX3JpbmZvLCBSZWxPcHRJbmZvICpyZWwpOwogc3RhdGljIHZvaWQgY29uc2lkZXJfbmV3 X29yX2NsYXVzZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJ CQkgICBFeHByICpvcmNsYXVzZSwgUmVzdHJpY3RJbmZvICpqb2luX29yX3JpbmZvKTsKIAor dHlwZWRlZiBzdHJ1Y3QgT3JDbGF1c2VHcm91cEVudHJ5Cit7CisJTm9kZQkJICAgKm5vZGU7 CisJTGlzdAkJICAgKmNvbnN0czsKKwlPaWQJCQkJY29sbGF0aW9uOworCU9pZAkJCQlvcG5v OworCVJlc3RyaWN0SW5mbyAgICpyaW5mbzsKKwlFeHByICpleHByOworfSBPckNsYXVzZUdy b3VwRW50cnk7CisKKy8qCisgKiBQYXNzIHRocm91Z2ggYmFzZXJlc3RyaWN0aW5mbyBjbGF1 c2VzIGFuZCB0cnkgdG8gY29udmVydCBPUiBjbGF1c2VzIGludG8gSU4KKyAqIFJldHVybiBh IG1vZGlmaWVkIGNsYXVzZSBsaXN0IG9yIGp1c3QgdGhlIHNhbWUgYmFzZXJlc3RyaWN0aW5m bywgaWYgbm8KKyAqIGNoYW5nZXMgaGF2ZSBtYWRlLgorICogWFhYOiBkbyBub3QgY2hhbmdl IHNvdXJjZSBsaXN0IG9mIGNsYXVzZXMgYXQgYWxsLgorICovCitzdGF0aWMgTGlzdCAqCit0 cmFuc2Zvcm1fb3JzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpiYXNlcmVzdHJpY3RpbmZv KQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3RDZWxsICAgKmxjX2NwOworCUxpc3QJICAg Km1vZGlmaWVkX3JpbmZvID0gTklMOworCWJvb2wJCXNvbWV0aGluZ19jaGFuZ2VkID0gZmFs c2U7CisJTGlzdAkgICAqYmFzZXJlc3RyaWN0aW5mb19vcmlnaW4gPSBsaXN0X2NvcHkoYmFz ZXJlc3RyaWN0aW5mbyk7CisKKwkvKgorCSAqIENvbXBsZXhpdHkgb2YgYSBjbGF1c2UgY291 bGQgYmUgYXJiaXRyYXJpbHkgc29waGlzdGljYXRlZC4gSGVyZSwgd2Ugd2lsbAorCSAqIGxv b2sgdXAgb25seSBvbiB0aGUgdG9wIGxldmVsIG9mIGNsYXVzZSBsaXN0LgorCSAqIFhYWDog SXQgaXMgc3Vic3RhbnRpYXRlZD8gQ291bGQgd2UgY2hhbmdlIHNvbWV0aGluZyBoZXJlPwor CSAqLworCWZvcmJvdGggKGxjLCBiYXNlcmVzdHJpY3RpbmZvLCBsY19jcCwgYmFzZXJlc3Ry aWN0aW5mb19vcmlnaW4pCisJeworCQlSZXN0cmljdEluZm8gICAqcmluZm8gPSBsZmlyc3Rf bm9kZShSZXN0cmljdEluZm8sIGxjKTsKKwkJUmVzdHJpY3RJbmZvICAgKnJpbmZvX2Jhc2Ug PSBsZmlyc3Rfbm9kZShSZXN0cmljdEluZm8sIGxjX2NwKTsKKwkJTGlzdAkJICAgKm9yX2xp c3QgPSBOSUw7CisJCUxpc3RDZWxsCSAgICpsY19lYXJncywKKwkJCQkJICAgKmxjX3Jhcmdz LAorCQkJCQkgICAqbGNfYXJnczsKKwkJTGlzdAkJICAgKmdyb3Vwc19saXN0ID0gTklMOwor CisJCWlmICghcmVzdHJpY3Rpb25faXNfb3JfY2xhdXNlKHJpbmZvKSkKKwkJeworCQkJLyog QWRkIGEgY2xhdXNlIHdpdGhvdXQgY2hhbmdlcyAqLworCQkJbW9kaWZpZWRfcmluZm8gPSBs YXBwZW5kKG1vZGlmaWVkX3JpbmZvLCByaW5mbyk7CisJCQljb250aW51ZTsKKwkJfQorCisJ CS8qCisJCSAqIE5PVEU6CisJCSAqIEl0IGlzIGFuIE9SLWNsYXVzZS4gU28sIHJpbmZvLT5v cmNsYXVzZSBpcyBhIEJvb2xFeHByIG5vZGUsIGNvbnRhaW5zCisJCSAqIGEgbGlzdCBvZiBz dWItcmVzdHJpY3RpbmZvIGFyZ3MsIGFuZCByaW5mby0+Y2xhdXNlIC0gd2hpY2ggaXMgdGhl CisJCSAqIHNhbWUgZXhwcmVzc2lvbiwgbWFkZSBmcm9tIGJhcmUgY2xhdXNlcy4gVG8gbm90 IGJyZWFrIHNlbGVjdGl2aXR5CisJCSAqIGNhY2hlcyBhbmQgb3RoZXIgb3B0aW1pemF0aW9u cywgdXNlIGJvdGg6CisJCSAqIC0gdXNlIHJpbmZvcyBmcm9tIG9yY2xhdXNlIGlmIG5vIHRy YW5zZm9ybWF0aW9uIG5lZWRlZAorCQkgKiAtIHVzZSAgYmFyZSBxdWFscyBmcm9tIHJpbmZv LT5jbGF1c2UgaW4gdGhlIGNhc2Ugb2YgdHJhbnNmb3JtYXRpb24sCisJCSAqIHRvIGNyZWF0 ZSBuZXcgUmVzdHJpY3RJbmZvOiBpbiB0aGlzIGNhc2Ugd2UgaGF2ZSBubyBvcHRpb25zIHRv IGF2b2lkCisJCSAqIHNlbGVjdGl2aXR5IGVzdGltYXRpb24gcHJvY2VkdXJlLgorCQkgKi8K KwkJZm9yYm90aChsY19lYXJncywgKChCb29sRXhwciAqKSByaW5mby0+Y2xhdXNlKS0+YXJn cywKKwkJCQlsY19yYXJncywgKChCb29sRXhwciAqKSByaW5mby0+b3JjbGF1c2UpLT5hcmdz KQorCQl7CisJCQlFeHByCQkJICAgKmJhcmVfb3JhcmcgPSAoRXhwciAqKSBsZmlyc3QobGNf ZWFyZ3MpOworCQkJUmVzdHJpY3RJbmZvCSAgICpzdWJfcmluZm87CisJCQlOb2RlCQkJICAg KmNvbnN0X2V4cHI7CisJCQlOb2RlCQkJICAgKm5vbl9jb25zdF9leHByOworCQkJTGlzdENl bGwJCSAgICpsY19ncm91cHM7CisJCQlPckNsYXVzZUdyb3VwRW50cnkgKmdlbnRyeTsKKwkJ CU9pZAkJCQkJb3BubzsKKworCQkJLyogSXQgbWF5IGJlIG9uZSBtb3JlIGJvb2xlYW4gZXhw cmVzc2lvbiwgc2tpcCBpdCBmb3Igbm93ICovCisJCQlpZiAoIUlzQShsZmlyc3QobGNfcmFy Z3MpLCBSZXN0cmljdEluZm8pKQorCQkJeworCQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xp c3QsICh2b2lkICopIGJhcmVfb3JhcmcpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlz dWJfcmluZm8gPSBsZmlyc3Rfbm9kZShSZXN0cmljdEluZm8sIGxjX3JhcmdzKTsKKworCQkJ LyogQ2hlY2s6IGl0IGlzIGFuIGV4cHIgb2YgdGhlIGZvcm0gJ0YoeCkgb3BlciBDb25zdEV4 cHInICovCisJCQlpZiAoIUlzQShiYXJlX29yYXJnLCBPcEV4cHIpIHx8CisJCQkJIShibXNf aXNfZW1wdHkoc3ViX3JpbmZvLT5sZWZ0X3JlbGlkcykgXgorCQkJCWJtc19pc19lbXB0eShz dWJfcmluZm8tPnJpZ2h0X3JlbGlkcykpIHx8CisJCQkJY29udGFpbl92b2xhdGlsZV9mdW5j dGlvbnMoKE5vZGUgKikgYmFyZV9vcmFyZykpCisJCQl7CisJCQkJLyogQWdhaW4sIGl0J3Mg bm90IHRoZSBleHByIHdlIGNhbiB0cmFuc2Zvcm0gKi8KKwkJCQlvcl9saXN0ID0gbGFwcGVu ZChvcl9saXN0LCAodm9pZCAqKSBiYXJlX29yYXJnKTsKKwkJCQljb250aW51ZTsKKwkJCX0K KworCQkJLyogR2V0IHBvaW50ZXJzIHRvIGNvbnN0YW50IGFuZCBleHByZXNzaW9uIHNpZGVz IG9mIHRoZSBjbGF1c2UgKi8KKwkJCWNvbnN0X2V4cHIgPWJtc19pc19lbXB0eShzdWJfcmlu Zm8tPmxlZnRfcmVsaWRzKSA/CisJCQkJCQkJCQkJCQlnZXRfbGVmdG9wKHN1Yl9yaW5mby0+ Y2xhdXNlKSA6CisJCQkJCQkJCQkJCQlnZXRfcmlnaHRvcChzdWJfcmluZm8tPmNsYXVzZSk7 CisJCQlub25fY29uc3RfZXhwciA9IGJtc19pc19lbXB0eShzdWJfcmluZm8tPmxlZnRfcmVs aWRzKSA/CisJCQkJCQkJCQkJCQlnZXRfcmlnaHRvcChzdWJfcmluZm8tPmNsYXVzZSkgOgor CQkJCQkJCQkJCQkJZ2V0X2xlZnRvcChzdWJfcmluZm8tPmNsYXVzZSk7CisKKwkJCW9wbm8g PSAoKE9wRXhwciAqKSBzdWJfcmluZm8tPmNsYXVzZSktPm9wbm87CisJCQlpZiAoIW9wX21l cmdlam9pbmFibGUob3BubywgZXhwclR5cGUobm9uX2NvbnN0X2V4cHIpKSkKKwkJCXsKKwkJ CQkvKiBBbmQgYWdhaW4sIGZpbHRlciBvdXQgbm9uLWVxdWFsaXR5IG9wZXJhdG9ycyAqLwor CQkJCW9yX2xpc3QgPSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIGJhcmVfb3JhcmcpOwor CQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICogQXQgdGhpcyBwb2ludCB3ZSBk ZWZpbml0ZWx5IGhhdmUgYSB0cmFuc2Zvcm1hYmxlIGNsYXVzZS4KKwkJCSAqIENsYXNzaWZ5 IGl0IGFuZCBhZGQgaW50byBzcGVjaWZpYyBncm91cCBvZiBjbGF1c2VzLCBvciBjcmVhdGUg bmV3CisJCQkgKiBncm91cC4KKwkJCSAqIFRPRE86IHRvIG1hbmFnZSBjb21wbGV4aXR5IGlu IHRoZSBjYXNlIG9mIG1hbnkgZGlmZmVyZW50IGNsYXVzZXMKKwkJCSAqIChYMT1DMSkgT1Ig KFgyPUMyIE9SKSAuLi4gKFhOID0gQ04pIHdlIGNvdWxkIGludmVudCBzb21ldGhpbmcKKwkJ CSAqIGxpa2UgYSBoYXNoIHRhYmxlIChodGFiIGtleSA/Pz8pLgorCQkJICovCisJCQlmb3Jl YWNoKGxjX2dyb3VwcywgZ3JvdXBzX2xpc3QpCisJCQl7CisJCQkJT3JDbGF1c2VHcm91cEVu dHJ5ICp2ID0gKE9yQ2xhdXNlR3JvdXBFbnRyeSAqKSBsZmlyc3QobGNfZ3JvdXBzKTsKKwor CQkJCUFzc2VydCh2LT5ub2RlICE9IE5VTEwpOworCisJCQkJaWYgKGVxdWFsKHYtPm5vZGUs IG5vbl9jb25zdF9leHByKSkKKwkJCQl7CisJCQkJCXYtPmNvbnN0cyA9IGxhcHBlbmQodi0+ Y29uc3RzLCBjb25zdF9leHByKTsKKwkJCQkJbm9uX2NvbnN0X2V4cHIgPSBOVUxMOworCQkJ CQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChub25fY29uc3RfZXhwciA9PSBOVUxM KQorCQkJCS8qCisJCQkJICogVGhlIGNsYXVzZSBjbGFzc2lmaWVkIHN1Y2Nlc3NmdWxseSBh bmQgYWRkZWQgaW50byBleGlzdGVkCisJCQkJICogY2xhdXNlIGdyb3VwLgorCQkJCSAqLwor CQkJCWNvbnRpbnVlOworCisJCQkvKiBOZXcgY2xhdXNlIGdyb3VwIG5lZWRlZCAqLworCQkJ Z2VudHJ5ID0gcGFsbG9jKHNpemVvZihPckNsYXVzZUdyb3VwRW50cnkpKTsKKwkJCWdlbnRy eS0+bm9kZSA9IG5vbl9jb25zdF9leHByOworCQkJZ2VudHJ5LT5jb25zdHMgPSBsaXN0X21h a2UxKGNvbnN0X2V4cHIpOworCQkJZ2VudHJ5LT5jb2xsYXRpb24gPSBleHBySW5wdXRDb2xs YXRpb24oKE5vZGUgKilzdWJfcmluZm8tPmNsYXVzZSk7CisJCQlnZW50cnktPm9wbm8gPSBv cG5vOworCQkJZ2VudHJ5LT5yaW5mbyA9IHN1Yl9yaW5mbzsKKwkJCWdlbnRyeS0+ZXhwciA9 IGJhcmVfb3Jhcmc7CisJCQlncm91cHNfbGlzdCA9IGxhcHBlbmQoZ3JvdXBzX2xpc3QsICAo dm9pZCAqKSBnZW50cnkpOworCQl9CisKKwkJaWYgKGdyb3Vwc19saXN0ID09IE5JTCkKKwkJ eworCQkJLyoKKwkJCSAqIE5vIGFueSB0cmFuc2Zvcm1hdGlvbnMgcG9zc2libGUgd2l0aCB0 aGlzIHJpbmZvLCBqdXN0IGFkZCBpdHNlbGYKKwkJCSAqIHRvIHRoZSBsaXN0IGFuZCBnbyBm dXJ0aGVyLgorCQkJICovCisJCQltb2RpZmllZF9yaW5mbyA9IGxhcHBlbmQobW9kaWZpZWRf cmluZm8sIHJpbmZvKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTGV0J3MgY29udmVy dCBlYWNoIGdyb3VwIG9mIGNsYXVzZXMgdG8gYW4gSU4gb3BlcmF0aW9uLiAqLworCisJCS8q CisJCSAqIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgZ3JvdXBzIGFuZCBjb252ZXJ0IGVhY2gs IHdoZXJlIG51bWJlciBvZgorCQkgKiBjb25zdHMgbW9yZSB0aGFuIDEuIHRyaXZpYWwgZ3Jv dXBzIG1vdmUgdG8gT1ItbGlzdCBhZ2FpbgorCQkgKi8KKworCQlmb3JlYWNoKGxjX2FyZ3Ms IGdyb3Vwc19saXN0KQorCQl7CisJCQlPckNsYXVzZUdyb3VwRW50cnkgKmdlbnRyeSA9IChP ckNsYXVzZUdyb3VwRW50cnkgKikgbGZpcnN0KGxjX2FyZ3MpOworCQkJTGlzdAkJCSAgICph bGxleHByczsKKwkJCU9pZAkJCQkgICAgc2NhbGFyX3R5cGU7CisJCQlPaWQJCQkJCWFycmF5 X3R5cGU7CisKKwkJCUFzc2VydChsaXN0X2xlbmd0aChnZW50cnktPmNvbnN0cykgPiAwKTsK KworCQkJaWYgKGxpc3RfbGVuZ3RoKGdlbnRyeS0+Y29uc3RzKSA9PSAxKQorCQkJeworCQkJ CS8qCisJCQkJICogT25seSBvbmUgZWxlbWVudCBpbiB0aGUgY2xhc3MuIFJldHVybiByaW5m byBpbnRvIHRoZSBCb29sRXhwcgorCQkJCSAqIGFyZ3MgbGlzdCB1bmNoYW5nZWQuCisJCQkJ ICovCisJCQkJbGlzdF9mcmVlKGdlbnRyeS0+Y29uc3RzKTsKKwkJCQlvcl9saXN0ID0gbGFw cGVuZChvcl9saXN0LCBnZW50cnktPmV4cHIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJ CQkvKgorCQkJICogRG8gdGhlIHRyYW5zZm9ybWF0aW9uLgorCQkJICoKKwkJCSAqIEZpcnN0 IG9mIGFsbCwgdHJ5IHRvIHNlbGVjdCBhIGNvbW1vbiB0eXBlIGZvciB0aGUgYXJyYXkgZWxl bWVudHMuCisJCQkgKiBOb3RlIHRoYXQgc2luY2UgdGhlIExIUycgdHlwZSBpcyBmaXJzdCBp biB0aGUgbGlzdCwgaXQgd2lsbCBiZQorCQkJICogcHJlZmVycmVkIHdoZW4gdGhlcmUgaXMg ZG91YnQgKGVnLCB3aGVuIGFsbCB0aGUgUkhTIGl0ZW1zIGFyZQorCQkJICogdW5rbm93biBs aXRlcmFscykuCisJCQkgKgorCQkJICogTm90ZTogdXNlIGxpc3RfY29uY2F0IGhlcmUgbm90 IGxjb25zLCB0byBhdm9pZCBkYW1hZ2luZyBybm9udmFycy4KKwkJCSAqCisJCQkgKiBBcyBh IHNvdXJjZSBvZiBpbnNpZGVzLCB1c2UgbWFrZV9zY2FsYXJfYXJyYXlfb3AoKQorCQkJICov CisJCQlhbGxleHBycyA9IGxpc3RfY29uY2F0KGxpc3RfbWFrZTEoZ2VudHJ5LT5ub2RlKSwg Z2VudHJ5LT5jb25zdHMpOworCQkJc2NhbGFyX3R5cGUgPSBzZWxlY3RfY29tbW9uX3R5cGUo TlVMTCwgYWxsZXhwcnMsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoc2NhbGFyX3R5cGUgIT0g UkVDT1JET0lEICYmIE9pZElzVmFsaWQoc2NhbGFyX3R5cGUpKQorCQkJCWFycmF5X3R5cGUg PSBnZXRfYXJyYXlfdHlwZShzY2FsYXJfdHlwZSk7CisJCQllbHNlCisJCQkJYXJyYXlfdHlw ZSA9IEludmFsaWRPaWQ7CisKKwkJCWlmIChhcnJheV90eXBlICE9IEludmFsaWRPaWQpCisJ CQl7CisJCQkJLyoKKwkJCQkgKiBPSzogY29lcmNlIGFsbCB0aGUgcmlnaHQtaGFuZCBub24t VmFyIGlucHV0cyB0byB0aGUgY29tbW9uCisJCQkJICogdHlwZSBhbmQgYnVpbGQgYW4gQXJy YXlFeHByIGZvciB0aGVtLgorCQkJCSAqLworCQkJCUxpc3QJICAgKmFleHByczsKKwkJCQlB cnJheUV4cHIgICpuZXdhOworCQkJCVNjYWxhckFycmF5T3BFeHByICpzYW9wZXhwcjsKKwkJ CQlMaXN0Q2VsbCAqbDsKKworCQkJCWFleHBycyA9IE5JTDsKKworCQkJCWZvcmVhY2gobCwg Z2VudHJ5LT5jb25zdHMpCisJCQkJeworCQkJCQlOb2RlCSAgICpyZXhwciA9IChOb2RlICop IGxmaXJzdChsKTsKKworCQkJCQlyZXhwciA9IGNvZXJjZV90b19jb21tb25fdHlwZShOVUxM LCByZXhwciwKKwkJCQkJCQkJCQkJCXNjYWxhcl90eXBlLAorCQkJCQkJCQkJCQkJIklOIik7 CisJCQkJCWFleHBycyA9IGxhcHBlbmQoYWV4cHJzLCByZXhwcik7CisJCQkJfQorCisJCQkJ bmV3YSA9IG1ha2VOb2RlKEFycmF5RXhwcik7CisJCQkJLyogYXJyYXlfY29sbGlkIHdpbGwg YmUgc2V0IGJ5IHBhcnNlX2NvbGxhdGUuYyAqLworCQkJCW5ld2EtPmVsZW1lbnRfdHlwZWlk ID0gc2NhbGFyX3R5cGU7CisJCQkJbmV3YS0+YXJyYXlfdHlwZWlkID0gYXJyYXlfdHlwZTsK KwkJCQluZXdhLT5tdWx0aWRpbXMgPSBmYWxzZTsKKwkJCQluZXdhLT5lbGVtZW50cyA9IGFl eHByczsKKwkJCQluZXdhLT5sb2NhdGlvbiA9IC0xOworCisJCQkJc2FvcGV4cHIgPQorCQkJ CQkoU2NhbGFyQXJyYXlPcEV4cHIgKikKKwkJCQkJCW1ha2Vfc2NhbGFyX2FycmF5X29wKE5V TEwsCisJCQkJCQkJCQkJCSBsaXN0X21ha2UxKG1ha2VTdHJpbmcoKGNoYXIgKikgIj0iKSks CisJCQkJCQkJCQkJCSB0cnVlLAorCQkJCQkJCQkJCQkgZ2VudHJ5LT5ub2RlLAorCQkJCQkJ CQkJCQkgKE5vZGUgKikgbmV3YSwKKwkJCQkJCQkJCQkJIC0xKTsKKworCQkJCW9yX2xpc3Qg PSBsYXBwZW5kKG9yX2xpc3QsICh2b2lkICopIHNhb3BleHByKTsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQlsaXN0X2ZyZWUoZ2VudHJ5LT5jb25zdHMpOworCQkJCW9yX2xpc3QgPSBs YXBwZW5kKG9yX2xpc3QsIGdlbnRyeS0+ZXhwcik7CisJCQkJY29udGludWU7CisJCQl9CisJ CX0KKworCQkvKgorCQkgKiBNYWtlIGEgbmV3IHZlcnNpb24gb2YgdGhlIHJlc3RyaWN0aW9u LiBSZW1lbWJlciBzb3VyY2UgcmVzdHJpY3Rpb24KKwkJICogY2FuIGJlIHVzZWQgaW4gYW5v dGhlciBwYXRoIChTZXFTY2FuLCBmb3IgZXhhbXBsZSkuCisJCSAqLworCisJCS8qIE9uZSBt b3JlIHRyaWNrOiBhc3NlbWJsZSBjb3JyZWN0IGNsYXVzZSAqLworCQlyaW5mbyA9IG1ha2Vf cmVzdHJpY3RpbmZvKHJvb3QsCisJCQkJICBsaXN0X2xlbmd0aChvcl9saXN0KSA+IDEgPyBt YWtlX29yY2xhdXNlKG9yX2xpc3QpIDoKKwkJCQkJCQkJCQkJIChFeHByICopIGxpbml0aWFs KG9yX2xpc3QpLAorCQkJCSAgcmluZm8tPmlzX3B1c2hlZF9kb3duLAorCQkJCSAgcmluZm8t Pmhhc19jbG9uZSwKKwkJCQkgIHJpbmZvLT5pc19jbG9uZSwKKwkJCQkgIHJpbmZvLT5wc2V1 ZG9jb25zdGFudCwKKwkJCQkgIHJpbmZvLT5zZWN1cml0eV9sZXZlbCwKKwkJCQkgIHJpbmZv LT5yZXF1aXJlZF9yZWxpZHMsCisJCQkJICByaW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcywK KwkJCQkgIHJpbmZvLT5vdXRlcl9yZWxpZHMpOworCQlyaW5mby0+ZXZhbF9jb3N0PXJpbmZv X2Jhc2UtPmV2YWxfY29zdDsKKwkJcmluZm8tPm5vcm1fc2VsZWM9cmluZm9fYmFzZS0+bm9y bV9zZWxlYzsKKwkJcmluZm8tPm91dGVyX3NlbGVjPXJpbmZvX2Jhc2UtPm91dGVyX3NlbGVj OworCQlyaW5mby0+bGVmdF9idWNrZXRzaXplPXJpbmZvX2Jhc2UtPmxlZnRfYnVja2V0c2l6 ZTsKKwkJcmluZm8tPnJpZ2h0X2J1Y2tldHNpemU9cmluZm9fYmFzZS0+cmlnaHRfYnVja2V0 c2l6ZTsKKwkJcmluZm8tPmxlZnRfbWN2ZnJlcT1yaW5mb19iYXNlLT5sZWZ0X21jdmZyZXE7 CisJCXJpbmZvLT5yaWdodF9tY3ZmcmVxPXJpbmZvX2Jhc2UtPnJpZ2h0X21jdmZyZXE7CisK KwkJbW9kaWZpZWRfcmluZm8gPSBsYXBwZW5kKG1vZGlmaWVkX3JpbmZvLCByaW5mbyk7CisJ CWxpc3RfZnJlZV9kZWVwKGdyb3Vwc19saXN0KTsKKwkJc29tZXRoaW5nX2NoYW5nZWQgPSB0 cnVlOworCX0KKworCS8qCisJICogQ2hlY2sgaWYgdHJhbnNmb3JtYXRpb24gaGFzIG1hZGUu IElmIG5vdGhpbmcgY2hhbmdlZCAtIHJldHVybgorCSAqIGJhc2VyZXN0cmljdGluZm8gYXMg aXMuCisJICovCisJaWYgKHNvbWV0aGluZ19jaGFuZ2VkKQorCXsKKwkJcmV0dXJuIG1vZGlm aWVkX3JpbmZvOworCX0KKworCWxpc3RfZnJlZShtb2RpZmllZF9yaW5mbyk7CisJcmV0dXJu IGJhc2VyZXN0cmljdGluZm87Cit9CiAKIC8qCiAgKiBleHRyYWN0X3Jlc3RyaWN0aW9uX29y X2NsYXVzZXMKQEAgLTkzLDYgKzM5MSwxMCBAQCBleHRyYWN0X3Jlc3RyaWN0aW9uX29yX2Ns YXVzZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJCWlmIChyZWwtPnJlbG9wdGtpbmQgIT0gUkVM T1BUX0JBU0VSRUwpCiAJCQljb250aW51ZTsKIAorCQlpZiAocmVsLT5yZWxvcHRraW5kID09 IFJFTE9QVF9CQVNFUkVMKQorCQlyZWwtPmJhc2VyZXN0cmljdGluZm8gID0gdHJhbnNmb3Jt X29ycyhyb290LCByZWwtPmJhc2VyZXN0cmljdGluZm8pOworCQlyZWwtPmpvaW5pbmZvID0g dHJhbnNmb3JtX29ycyhyb290LCByZWwtPmpvaW5pbmZvKTsKKwogCQkvKgogCQkgKiBGaW5k IHBvdGVudGlhbGx5IGludGVyZXN0aW5nIE9SIGpvaW5jbGF1c2VzLiAgV2UgY2FuIHVzZSBh bnkKIAkJICogam9pbmNsYXVzZSB0aGF0IGlzIGNvbnNpZGVyZWQgc2FmZSB0byBtb3ZlIHRv IHRoaXMgcmVsIGJ5IHRoZQo= --------------0SpOk2mdGmUJumjHbXudt08W--