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 1rVyru-002X5B-AU for pgsql-hackers@arkaria.postgresql.org; Fri, 02 Feb 2024 19:06:31 +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 1rVyrt-00FKZQ-CX for pgsql-hackers@arkaria.postgresql.org; Fri, 02 Feb 2024 19:06:29 +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 1rVyrs-00FKZI-CF for pgsql-hackers@lists.postgresql.org; Fri, 02 Feb 2024 19:06:29 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rVyrl-004kkF-Le for pgsql-hackers@postgresql.org; Fri, 02 Feb 2024 19:06:27 +0000 Received: from [192.168.43.178] (unknown [176.59.172.195]) (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 AD63AE21140; Fri, 2 Feb 2024 22:06:17 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1706900778; bh=dEoFqa1EhA0LD4sA1dHZCrF3UuH0LoXYAluHFekv1Lw=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=mJvcf+0oaw4Vf3f33SKZvOVfN8qun7cdaA7iMEVqLAbqnifr25XwPrBoND1Gtm0CI mQmt/8NC6wzq3qc86mM3HYj4piH8DbtJ5iYSr35YXPV3z4mUKHFNHTemXR32B9+SYl coxrtz516O/ciPjaGvHG/iPUZN097Q8/nt4oXv718hdqVWQNx/eJ3hgfo/T0qahMtu YpuGiDYB5TyY8g0xtZvcIw/qAu4O3bo/P+P2u6kDUquuSj9+xaaVN9Wz1ZiCk2kSq7 MQjJ5ysSmih/yPxgQNhTgWVlXMbtKa1oF+rkhz1WZXqmlixEnWAkIGJ0wwd4P2oyTl 85Z0ofscuf0wQ== Content-Type: multipart/mixed; boundary="------------JLGFPDPHRmHq2eYSluHNmLB4" Message-ID: <7e11e27b-7ab9-4d59-af0a-a921861a9206@postgrespro.ru> Date: Fri, 2 Feb 2024 22:06:17 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes Content-Language: en-US To: jian he Cc: Andrei Lepikhov , Robert Haas , pgsql-hackers@postgresql.org, Alexander Korotkov , Peter Geoghegan , "Finnerty, Jim" , Marcos Pegoraro , teodor@sigaev.ru, Ranier Vilela , Tomas Vondra , Peter Eisentraut References: <567ED6CA.2040504@sigaev.ru> <43ad8a48-b980-410d-a83c-5beebf82a4ed@postgrespro.ru> <04ef16eb-46c1-4ce7-9f68-d1c80ef0be81@postgrespro.ru> <59e67a40-95a8-4d74-ae4e-027ea0f59084@postgrespro.ru> <59b77a8a-29d6-4727-bf26-4a30a6a9719a@postgrespro.ru> <32d23d97-d07f-4d44-9933-ba3295fb3ed8@postgrespro.ru> From: Alena 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. --------------JLGFPDPHRmHq2eYSluHNmLB4 Content-Type: multipart/alternative; boundary="------------E0gJYGVtgsebDv8eOMpJygF0" --------------E0gJYGVtgsebDv8eOMpJygF0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 01.02.2024 08:00, jian he wrote: > On Wed, Jan 31, 2024 at 7:10 PM Alena Rybakina > wrote: >> Hi, thank you for your review and interest in this subject. >> >> On 31.01.2024 13:15, jian he wrote: >> >> On Wed, Jan 31, 2024 at 10:55 AM jian he wrote: >> >> based on my understanding of >> https://www.postgresql.org/docs/current/xoper-optimization.html#XOPER-COMMUTATOR >> I think you need move commutator check right after the `if >> (get_op_rettype(opno) != BOOLOID)` branch >> >> I was wrong about this part. sorry for the noise. >> >> >> I have made some changes (attachment). >> * if the operator expression left or right side type category is >> {array | domain | composite}, then don't do the transformation. >> (i am not 10% sure with composite) >> >> To be honest, I'm not sure about this check, because we check the type of variable there: >> >> if (!IsA(orqual, OpExpr)) >> { >> or_list = lappend(or_list, orqual); >> continue; >> } >> And below: >> if (IsA(leftop, Const)) >> { >> opno = get_commutator(opno); >> >> if (!OidIsValid(opno)) >> { >> /* Commuter doesn't exist, we can't reverse the order */ >> or_list = lappend(or_list, orqual); >> continue; >> } >> >> nconst_expr = get_rightop(orqual); >> const_expr = get_leftop(orqual); >> } >> else if (IsA(rightop, Const)) >> { >> const_expr = get_rightop(orqual); >> nconst_expr = get_leftop(orqual); >> } >> else >> { >> or_list = lappend(or_list, orqual); >> continue; >> } >> >> Isn't that enough? > alter table tenk1 add column arr int[]; > set enable_or_transformation to on; > EXPLAIN (COSTS OFF) > SELECT count(*) FROM tenk1 > WHERE arr = '{1,2,3}' or arr = '{1,2}'; > > the above query will not do the OR transformation. because array type > doesn't have array type. > ` > scalar_type = entry->key.exprtype; > if (scalar_type != RECORDOID && OidIsValid(scalar_type)) > array_type = get_array_type(scalar_type); > else > array_type = InvalidOid; > ` > > If either side of the operator expression is array or array related type, > we can be sure it cannot do the transformation > (get_array_type will return InvalidOid for anyarray type). > we can check it earlier, so hash related code will not be invoked for > array related types. Agree. >> Besides, some of examples (with ARRAY) works fine: >> >> postgres=# CREATE TABLE sal_emp ( >> pay_by_quarter integer[], >> pay_by_quater1 integer[] >> ); >> CREATE TABLE >> postgres=# INSERT INTO sal_emp >> VALUES ( >> '{10000, 10000, 10000, 10000}', >> '{1,2,3,4}'); >> INSERT 0 1 >> postgres=# select * from sal_emp where pay_by_quarter[1] = 10000 or pay_by_quarter[1]=2; >> pay_by_quarter | pay_by_quater1 >> ---------------------------+---------------- >> {10000,10000,10000,10000} | {1,2,3,4} >> (1 row) >> >> postgres=# explain select * from sal_emp where pay_by_quarter[1] = 10000 or pay_by_quarter[1]=2; >> QUERY PLAN >> -------------------------------------------------------------- >> Seq Scan on sal_emp (cost=0.00..21.00 rows=9 width=64) >> Filter: (pay_by_quarter[1] = ANY ('{10000,2}'::integer[])) >> (2 rows) >> >> * if the left side of the operator expression node contains volatile >> functions, then don't do the transformation. >> >> I'm also not sure about the volatility check function, because we perform such a conversion at the parsing stage, and at this stage we don't have a RelOptInfo variable and especially a RestictInfo such as PathTarget. >> > see the example in here: > https://www.postgresql.org/message-id/CACJufxGXhJ823cdAdp2Ho7qC-HZ3_-dtdj-myaAi_u9RQLn45g%40mail.gmail.com > > set enable_or_transformation to on; > create or replace function retint(int) returns int as > $func$ > begin raise notice 'hello'; > return $1 + round(10 * random()); end > $func$ LANGUAGE plpgsql; > > SELECT count(*) FROM tenk1 WHERE thousand = 42; > will return 10 rows. > > SELECT count(*) FROM tenk1 WHERE thousand = 42 AND (retint(1) = 4 OR > retint(1) = 3); > this query I should return 20 notices 'hello', but now only 10. > > EXPLAIN (COSTS OFF) > SELECT count(*) FROM tenk1 > WHERE thousand = 42 AND (retint(1) = 4 OR retint(1) = 3); > QUERY PLAN > ------------------------------------------------------------------------------ > Aggregate > -> Seq Scan on tenk1 > Filter: ((thousand = 42) AND (retint(1) = ANY ('{4,3}'::integer[]))) > (3 rows) Agree. I added your code to the patch. -- Regards, Alena Rybakina Postgres Professional:http://www.postgrespro.com The Russian Postgres Company --------------E0gJYGVtgsebDv8eOMpJygF0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit


On 01.02.2024 08:00, jian he wrote:
On Wed, Jan 31, 2024 at 7:10 PM Alena Rybakina
<a.rybakina@postgrespro.ru> wrote:
Hi, thank you for your review and interest in this subject.

On 31.01.2024 13:15, jian he wrote:

On Wed, Jan 31, 2024 at 10:55 AM jian he <jian.universality@gmail.com> wrote:

based on my understanding of
https://www.postgresql.org/docs/current/xoper-optimization.html#XOPER-COMMUTATOR
I think you need move commutator check right after the `if
(get_op_rettype(opno) != BOOLOID)` branch

I was wrong about this part. sorry for the noise.


I have made some changes (attachment).
* if the operator expression left or right side type category is
{array | domain | composite}, then don't do the transformation.
(i am not 10% sure with composite)

To be honest, I'm not sure about this check, because we check the type of variable there:

if (!IsA(orqual, OpExpr))
        {
            or_list = lappend(or_list, orqual);
            continue;
        }
And below:
if (IsA(leftop, Const))
        {
            opno = get_commutator(opno);

            if (!OidIsValid(opno))
            {
                /* Commuter doesn't exist, we can't reverse the order */
                or_list = lappend(or_list, orqual);
                continue;
            }

            nconst_expr = get_rightop(orqual);
            const_expr = get_leftop(orqual);
        }
        else if (IsA(rightop, Const))
        {
            const_expr = get_rightop(orqual);
            nconst_expr = get_leftop(orqual);
        }
        else
        {
            or_list = lappend(or_list, orqual);
            continue;
        }

Isn't that enough?
alter table tenk1 add column arr int[];
set enable_or_transformation to on;
EXPLAIN (COSTS OFF)
SELECT count(*) FROM tenk1
WHERE arr = '{1,2,3}' or arr = '{1,2}';

the above query will not do the OR transformation. because array type
doesn't have array type.
`
scalar_type = entry->key.exprtype;
if (scalar_type != RECORDOID && OidIsValid(scalar_type))
array_type = get_array_type(scalar_type);
else
array_type = InvalidOid;
`

If either side of the operator expression is array or array related type,
we can be sure it cannot do the transformation
(get_array_type will return InvalidOid for anyarray type).
we can check it earlier, so hash related code will not be invoked for
array related types.
Agree.
Besides, some of examples (with ARRAY) works fine:

postgres=# CREATE TABLE sal_emp (
    pay_by_quarter  integer[],
    pay_by_quater1 integer[]
);
CREATE TABLE
postgres=# INSERT INTO sal_emp
    VALUES (
    '{10000, 10000, 10000, 10000}',
    '{1,2,3,4}');
INSERT 0 1
postgres=# select * from sal_emp where pay_by_quarter[1] = 10000 or pay_by_quarter[1]=2;
      pay_by_quarter       | pay_by_quater1
---------------------------+----------------
 {10000,10000,10000,10000} | {1,2,3,4}
(1 row)

postgres=# explain select * from sal_emp where pay_by_quarter[1] = 10000 or pay_by_quarter[1]=2;
                          QUERY PLAN
--------------------------------------------------------------
 Seq Scan on sal_emp  (cost=0.00..21.00 rows=9 width=64)
   Filter: (pay_by_quarter[1] = ANY ('{10000,2}'::integer[]))
(2 rows)

* if the left side of the operator expression node contains volatile
functions, then don't do the transformation.

I'm also not sure about the volatility check function, because we perform such a conversion at the parsing stage, and at this stage we don't have a RelOptInfo variable and especially a RestictInfo such as PathTarget.

 see the example in here:
https://www.postgresql.org/message-id/CACJufxGXhJ823cdAdp2Ho7qC-HZ3_-dtdj-myaAi_u9RQLn45g%40mail.gmail.com

set enable_or_transformation to on;
create or replace function retint(int) returns int as
$func$
begin raise notice 'hello';
        return $1 + round(10 * random()); end
$func$ LANGUAGE plpgsql;

SELECT count(*) FROM tenk1 WHERE thousand = 42;
will return 10 rows.

SELECT count(*) FROM tenk1 WHERE thousand = 42 AND (retint(1) = 4 OR
retint(1) = 3);
this query I should return 20 notices 'hello', but now only 10.

EXPLAIN (COSTS OFF)
SELECT count(*) FROM tenk1
WHERE thousand = 42 AND (retint(1) = 4 OR  retint(1) = 3);
                                  QUERY PLAN
------------------------------------------------------------------------------
 Aggregate
   ->  Seq Scan on tenk1
         Filter: ((thousand = 42) AND (retint(1) = ANY ('{4,3}'::integer[])))
(3 rows)

Agree.

I added your code to the patch.

-- 
Regards,
Alena Rybakina
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
--------------E0gJYGVtgsebDv8eOMpJygF0-- --------------JLGFPDPHRmHq2eYSluHNmLB4 Content-Type: text/x-patch; charset=UTF-8; name="v15-1-0001-Transform-OR-clause-to-ANY-expressions.patch" Content-Disposition: attachment; filename="v15-1-0001-Transform-OR-clause-to-ANY-expressions.patch" Content-Transfer-Encoding: base64 RnJvbSAwZmNhZDcyMTUzYzllYWFmNDM2ZTViNDE3YzgwM2E3MGZiZWFmOGFjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogRnJpLCAyIEZlYiAyMDI0IDIyOjAxOjA5ICswMzAwClN1Ympl Y3Q6IFtQQVRDSF0gVHJhbnNmb3JtIE9SIGNsYXVzZSB0byBBTlkgZXhwcmVzc2lvbnMuCgpS ZXBsYWNlIChleHByIG9wIEMxKSBPUiAoZXhwciBvcCBDMikgLi4uIHdpdGggZXhwciBvcCBB TlkoQzEsIEMyLCAuLi4pIG9uIHRoZQpwcmVsaW1pbmFyeSBzdGFnZSBvZiBvcHRpbWl6YXRp b24gd2hlbiB3ZSBhcmUgc3RpbGwgd29ya2luZyB3aXRoIHRoZSB0cmVlCmV4cHJlc3Npb24u CkhlcmUgQzxYPiBpcyBhIGNvbnN0YW50IGV4cHJlc3Npb24sICdleHByJyBpcyBub24tY29u c3RhbnQgZXhwcmVzc2lvbiwgJ29wJyBpcwphbiBvcGVyYXRvciB3aGljaCByZXR1cm5zIGJv b2xlYW4gcmVzdWx0IGFuZCBoYXMgYSBjb21tdXRlciAoZm9yIHRoZSBjYXNlIG9mCnJldmVy c2Ugb3JkZXIgb2YgY29uc3RhbnQgYW5kIG5vbi1jb25zdGFudCBwYXJ0cyBvZiB0aGUgZXhw cmVzc2lvbiwKbGlrZSAnQ1ggb3AgZXhwcicpLgpTb21ldGltZXMgaXQgY2FuIGxlYWQgdG8g bm90IG9wdGltYWwgcGxhbi4gQnV0IHdlIHRoaW5rIGl0IGlzIGJldHRlciB0byBoYXZlCmFy cmF5IG9mIGVsZW1lbnRzIGluc3RlYWQgb2YgYSBsb3Qgb2YgT1IgY2xhdXNlcy4gSGVyZSBp cyBhIHJvb20gZm9yIGZ1cnRoZXIKb3B0aW1pemF0aW9ucyBvbiBkZWNvbXBvc2luZyB0aGF0 IGFycmF5IGludG8gbW9yZSBvcHRpbWFsIHBhcnRzLgpBdXRob3JzOiBBbGVuYSBSeWJha2lu YSA8bGVuYS5yaWJhY2tpbmFAeWFuZGV4LnJ1PiwgQW5kcmV5IExlcGlraG92IDxhLmxlcGlr aG92QHBvc3RncmVzcHJvLnJ1PgpSZXZpZXdlZC1ieTogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bi b3d0LmllPiwgUmFuaWVyIFZpbGVsYSA8cmFuaWVyLnZmQGdtYWlsLmNvbT4KUmV2aWV3ZWQt Ynk6IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+LCBSb2JlcnQg SGFhcyA8cm9iZXJ0bWhhYXNAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogamlhbiBoZSA8amlh bi51bml2ZXJzYWxpdHlAZ21haWwuY29tPgotLS0KIC4uLi9wb3N0Z3Jlc19mZHcvZXhwZWN0 ZWQvcG9zdGdyZXNfZmR3Lm91dCAgICB8ICAxNiArLQogc3JjL2JhY2tlbmQvbm9kZXMvcXVl cnlqdW1ibGVmdW5jcy5jICAgICAgICAgIHwgIDMwICsrCiBzcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfZXhwci5jICAgICAgICAgICAgICAgfCAzNDAgKysrKysrKysrKysrKysrKystCiBz cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgMTEgKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsK IHNyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgICAgICAgICB8ICAgNiAr LQogc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaCAgICAgICAgICAgICAgIHwgICAx ICsKIHNyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmggICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgICAgfCAx NTYgKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5oZXJpdC5vdXQgICAg ICAgICB8ICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCAgICAg ICAgICAgIHwgIDYyICsrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9u X3BydW5lLm91dCB8IDIxOSArKysrKysrKystLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ydWxlcy5vdXQgICAgICAgICAgIHwgICA0ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N0YXRzX2V4dC5vdXQgICAgICAgfCAgMTIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC90aWRzY2FuLm91dCAgICAgICAgIHwgIDIzICstCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9jcmVhdGVfaW5kZXguc3FsICAgICAgICAgfCAgMzUgKysKIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pvaW4uc3FsICAgICAgICAgICAgICAgICB8ICAxMCArCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsICAgICAgfCAgMjIgKysKIHNyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3RpZHNjYW4uc3FsICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogMjEgZmlsZXMg Y2hhbmdlZCwgODkyIGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IGI1 YTM4YWViMjE0Li5hMDdhZWZjOWU1MSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19m ZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xMzQ5LDcgKzEzNDksNyBAQCBTRUxF Q1QgdDEuYzEsIHQxLmMyLCB0Mi5jMSwgdDIuYzIgRlJPTSBmdDQgdDEgTEVGVCBKT0lOIChT RUxFQ1QgKiBGUk9NIGZ0NSBXSEVSRQogIEZvcmVpZ24gU2NhbgogICAgT3V0cHV0OiB0MS5j MSwgdDEuYzIsIGZ0NS5jMSwgZnQ1LmMyCiAgICBSZWxhdGlvbnM6IChwdWJsaWMuZnQ0IHQx KSBMRUZUIEpPSU4gKHB1YmxpYy5mdDUpCi0gICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjEuYzEs IHIxLmMyLCByNC5jMSwgcjQuYzIgRlJPTSAoIlMgMSIuIlQgMyIgcjEgTEVGVCBKT0lOICJT IDEiLiJUIDQiIHI0IE9OICgoKHIxLmMxID0gcjQuYzEpKSBBTkQgKChyNC5jMSA8IDEwKSkp KSBXSEVSRSAoKChyNC5jMSA8IDEwKSBPUiAocjQuYzEgSVMgTlVMTCkpKSBBTkQgKChyMS5j MSA8IDEwKSkKKyAgIFJlbW90ZSBTUUw6IFNFTEVDVCByMS5jMSwgcjEuYzIsIHI0LmMxLCBy NC5jMiBGUk9NICgiUyAxIi4iVCAzIiByMSBMRUZUIEpPSU4gIlMgMSIuIlQgNCIgcjQgT04g KCgocjEuYzEgPSByNC5jMSkpIEFORCAoKHI0LmMxIDwgMTApKSkpIFdIRVJFICgoKHI0LmMx IElTIE5VTEwpIE9SIChyNC5jMSA8IDEwKSkpIEFORCAoKHIxLmMxIDwgMTApKQogKDQgcm93 cykKIAogU0VMRUNUIHQxLmMxLCB0MS5jMiwgdDIuYzEsIHQyLmMyIEZST00gZnQ0IHQxIExF RlQgSk9JTiAoU0VMRUNUICogRlJPTSBmdDUgV0hFUkUgYzEgPCAxMCkgdDIgT04gKHQxLmMx ID0gdDIuYzEpCkBAIC0zMTA1LDcgKzMxMDUsNyBAQCBzZWxlY3QgYXJyYXlfYWdnKGRpc3Rp bmN0ICh0MS5jMSklNSkgZnJvbSBmdDQgdDEgZnVsbCBqb2luIGZ0NSB0MiBvbiAodDEuYzEg PSB0MgogIEZvcmVpZ24gU2NhbgogICAgT3V0cHV0OiAoYXJyYXlfYWdnKERJU1RJTkNUICh0 MS5jMSAlIDUpKSksICgodDIuYzEgJSAzKSkKICAgIFJlbGF0aW9uczogQWdncmVnYXRlIG9u ICgocHVibGljLmZ0NCB0MSkgRlVMTCBKT0lOIChwdWJsaWMuZnQ1IHQyKSkKLSAgIFJlbW90 ZSBTUUw6IFNFTEVDVCBhcnJheV9hZ2coRElTVElOQ1QgKHIxLmMxICUgNSkpLCAocjIuYzEg JSAzKSBGUk9NICgiUyAxIi4iVCAzIiByMSBGVUxMIEpPSU4gIlMgMSIuIlQgNCIgcjIgT04g KCgocjEuYzEgPSByMi5jMSkpKSkgV0hFUkUgKCgocjEuYzEgPCAyMCkgT1IgKChyMS5jMSBJ UyBOVUxMKSBBTkQgKHIyLmMxIDwgNSkpKSkgR1JPVVAgQlkgMiBPUkRFUiBCWSBhcnJheV9h Z2coRElTVElOQ1QgKHIxLmMxICUgNSkpIEFTQyBOVUxMUyBMQVNUCisgICBSZW1vdGUgU1FM OiBTRUxFQ1QgYXJyYXlfYWdnKERJU1RJTkNUIChyMS5jMSAlIDUpKSwgKHIyLmMxICUgMykg RlJPTSAoIlMgMSIuIlQgMyIgcjEgRlVMTCBKT0lOICJTIDEiLiJUIDQiIHIyIE9OICgoKHIx LmMxID0gcjIuYzEpKSkpIFdIRVJFICgoKChyMS5jMSBJUyBOVUxMKSBBTkQgKHIyLmMxIDwg NSkpIE9SIChyMS5jMSA8IDIwKSkpIEdST1VQIEJZIDIgT1JERVIgQlkgYXJyYXlfYWdnKERJ U1RJTkNUIChyMS5jMSAlIDUpKSBBU0MgTlVMTFMgTEFTVAogKDQgcm93cykKIAogc2VsZWN0 IGFycmF5X2FnZyhkaXN0aW5jdCAodDEuYzEpJTUpIGZyb20gZnQ0IHQxIGZ1bGwgam9pbiBm dDUgdDIgb24gKHQxLmMxID0gdDIuYzEpIHdoZXJlIHQxLmMxIDwgMjAgb3IgKHQxLmMxIGlz IG51bGwgYW5kIHQyLmMxIDwgNSkgZ3JvdXAgYnkgKHQyLmMxKSUzIG9yZGVyIGJ5IDE7CkBA IC0zMTIzLDcgKzMxMjMsNyBAQCBzZWxlY3QgYXJyYXlfYWdnKGRpc3RpbmN0ICh0MS5jMSkl NSBvcmRlciBieSAodDEuYzEpJTUpIGZyb20gZnQ0IHQxIGZ1bGwgam9pbiBmdAogIEZvcmVp Z24gU2NhbgogICAgT3V0cHV0OiAoYXJyYXlfYWdnKERJU1RJTkNUICh0MS5jMSAlIDUpIE9S REVSIEJZICh0MS5jMSAlIDUpKSksICgodDIuYzEgJSAzKSkKICAgIFJlbGF0aW9uczogQWdn cmVnYXRlIG9uICgocHVibGljLmZ0NCB0MSkgRlVMTCBKT0lOIChwdWJsaWMuZnQ1IHQyKSkK LSAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhcnJheV9hZ2coRElTVElOQ1QgKHIxLmMxICUgNSkg T1JERVIgQlkgKChyMS5jMSAlIDUpKSBBU0MgTlVMTFMgTEFTVCksIChyMi5jMSAlIDMpIEZS T00gKCJTIDEiLiJUIDMiIHIxIEZVTEwgSk9JTiAiUyAxIi4iVCA0IiByMiBPTiAoKChyMS5j MSA9IHIyLmMxKSkpKSBXSEVSRSAoKChyMS5jMSA8IDIwKSBPUiAoKHIxLmMxIElTIE5VTEwp IEFORCAocjIuYzEgPCA1KSkpKSBHUk9VUCBCWSAyIE9SREVSIEJZIGFycmF5X2FnZyhESVNU SU5DVCAocjEuYzEgJSA1KSBPUkRFUiBCWSAoKHIxLmMxICUgNSkpIEFTQyBOVUxMUyBMQVNU KSBBU0MgTlVMTFMgTEFTVAorICAgUmVtb3RlIFNRTDogU0VMRUNUIGFycmF5X2FnZyhESVNU SU5DVCAocjEuYzEgJSA1KSBPUkRFUiBCWSAoKHIxLmMxICUgNSkpIEFTQyBOVUxMUyBMQVNU KSwgKHIyLmMxICUgMykgRlJPTSAoIlMgMSIuIlQgMyIgcjEgRlVMTCBKT0lOICJTIDEiLiJU IDQiIHIyIE9OICgoKHIxLmMxID0gcjIuYzEpKSkpIFdIRVJFICgoKChyMS5jMSBJUyBOVUxM KSBBTkQgKHIyLmMxIDwgNSkpIE9SIChyMS5jMSA8IDIwKSkpIEdST1VQIEJZIDIgT1JERVIg QlkgYXJyYXlfYWdnKERJU1RJTkNUIChyMS5jMSAlIDUpIE9SREVSIEJZICgocjEuYzEgJSA1 KSkgQVNDIE5VTExTIExBU1QpIEFTQyBOVUxMUyBMQVNUCiAoNCByb3dzKQogCiBzZWxlY3Qg YXJyYXlfYWdnKGRpc3RpbmN0ICh0MS5jMSklNSBvcmRlciBieSAodDEuYzEpJTUpIGZyb20g ZnQ0IHQxIGZ1bGwgam9pbiBmdDUgdDIgb24gKHQxLmMxID0gdDIuYzEpIHdoZXJlIHQxLmMx IDwgMjAgb3IgKHQxLmMxIGlzIG51bGwgYW5kIHQyLmMxIDwgNSkgZ3JvdXAgYnkgKHQyLmMx KSUzIG9yZGVyIGJ5IDE7CkBAIC0zMTQwLDcgKzMxNDAsNyBAQCBzZWxlY3QgYXJyYXlfYWdn KGRpc3RpbmN0ICh0MS5jMSklNSBvcmRlciBieSAodDEuYzEpJTUgZGVzYyBudWxscyBsYXN0 KSBmcm9tIGZ0NAogIEZvcmVpZ24gU2NhbgogICAgT3V0cHV0OiAoYXJyYXlfYWdnKERJU1RJ TkNUICh0MS5jMSAlIDUpIE9SREVSIEJZICh0MS5jMSAlIDUpIERFU0MgTlVMTFMgTEFTVCkp LCAoKHQyLmMxICUgMykpCiAgICBSZWxhdGlvbnM6IEFnZ3JlZ2F0ZSBvbiAoKHB1YmxpYy5m dDQgdDEpIEZVTEwgSk9JTiAocHVibGljLmZ0NSB0MikpCi0gICBSZW1vdGUgU1FMOiBTRUxF Q1QgYXJyYXlfYWdnKERJU1RJTkNUIChyMS5jMSAlIDUpIE9SREVSIEJZICgocjEuYzEgJSA1 KSkgREVTQyBOVUxMUyBMQVNUKSwgKHIyLmMxICUgMykgRlJPTSAoIlMgMSIuIlQgMyIgcjEg RlVMTCBKT0lOICJTIDEiLiJUIDQiIHIyIE9OICgoKHIxLmMxID0gcjIuYzEpKSkpIFdIRVJF ICgoKHIxLmMxIDwgMjApIE9SICgocjEuYzEgSVMgTlVMTCkgQU5EIChyMi5jMSA8IDUpKSkp IEdST1VQIEJZIDIgT1JERVIgQlkgYXJyYXlfYWdnKERJU1RJTkNUIChyMS5jMSAlIDUpIE9S REVSIEJZICgocjEuYzEgJSA1KSkgREVTQyBOVUxMUyBMQVNUKSBBU0MgTlVMTFMgTEFTVAor ICAgUmVtb3RlIFNRTDogU0VMRUNUIGFycmF5X2FnZyhESVNUSU5DVCAocjEuYzEgJSA1KSBP UkRFUiBCWSAoKHIxLmMxICUgNSkpIERFU0MgTlVMTFMgTEFTVCksIChyMi5jMSAlIDMpIEZS T00gKCJTIDEiLiJUIDMiIHIxIEZVTEwgSk9JTiAiUyAxIi4iVCA0IiByMiBPTiAoKChyMS5j MSA9IHIyLmMxKSkpKSBXSEVSRSAoKCgocjEuYzEgSVMgTlVMTCkgQU5EIChyMi5jMSA8IDUp KSBPUiAocjEuYzEgPCAyMCkpKSBHUk9VUCBCWSAyIE9SREVSIEJZIGFycmF5X2FnZyhESVNU SU5DVCAocjEuYzEgJSA1KSBPUkRFUiBCWSAoKHIxLmMxICUgNSkpIERFU0MgTlVMTFMgTEFT VCkgQVNDIE5VTExTIExBU1QKICg0IHJvd3MpCiAKIHNlbGVjdCBhcnJheV9hZ2coZGlzdGlu Y3QgKHQxLmMxKSU1IG9yZGVyIGJ5ICh0MS5jMSklNSBkZXNjIG51bGxzIGxhc3QpIGZyb20g ZnQ0IHQxIGZ1bGwgam9pbiBmdDUgdDIgb24gKHQxLmMxID0gdDIuYzEpIHdoZXJlIHQxLmMx IDwgMjAgb3IgKHQxLmMxIGlzIG51bGwgYW5kIHQyLmMxIDwgNSkgZ3JvdXAgYnkgKHQyLmMx KSUzIG9yZGVyIGJ5IDE7CkBAIC04Nzk3LDE4ICs4Nzk3LDE4IEBAIGluc2VydCBpbnRvIHV0 cnRlc3QgdmFsdWVzICgyLCAncXV4Jyk7CiAtLSBDaGVjayBjYXNlIHdoZXJlIHRoZSBmb3Jl aWduIHBhcnRpdGlvbiBpcyBhIHN1YnBsYW4gdGFyZ2V0IHJlbAogZXhwbGFpbiAodmVyYm9z ZSwgY29zdHMgb2ZmKQogdXBkYXRlIHV0cnRlc3Qgc2V0IGEgPSAxIHdoZXJlIGEgPSAxIG9y IGEgPSAyIHJldHVybmluZyAqOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgVXBkYXRlIG9uIHB1YmxpYy51dHJ0ZXN0CiAgICBPdXRwdXQ6 IHV0cnRlc3RfMS5hLCB1dHJ0ZXN0XzEuYgogICAgRm9yZWlnbiBVcGRhdGUgb24gcHVibGlj LnJlbXAgdXRydGVzdF8xCiAgICBVcGRhdGUgb24gcHVibGljLmxvY3AgdXRydGVzdF8yCiAg ICAtPiAgQXBwZW5kCiAgICAgICAgICAtPiAgRm9yZWlnbiBVcGRhdGUgb24gcHVibGljLnJl bXAgdXRydGVzdF8xCi0gICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBVUERBVEUgcHVibGlj LmxvY3QgU0VUIGEgPSAxIFdIRVJFICgoKGEgPSAxKSBPUiAoYSA9IDIpKSkgUkVUVVJOSU5H IGEsIGIKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFVQREFURSBwdWJsaWMubG9jdCBT RVQgYSA9IDEgV0hFUkUgKChhID0gQU5ZICgnezEsMn0nOjppbnRlZ2VyW10pKSkgUkVUVVJO SU5HIGEsIGIKICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMubG9jcCB1dHJ0ZXN0 XzIKICAgICAgICAgICAgICAgIE91dHB1dDogMSwgdXRydGVzdF8yLnRhYmxlb2lkLCB1dHJ0 ZXN0XzIuY3RpZCwgTlVMTDo6cmVjb3JkCi0gICAgICAgICAgICAgICBGaWx0ZXI6ICgodXRy dGVzdF8yLmEgPSAxKSBPUiAodXRydGVzdF8yLmEgPSAyKSkKKyAgICAgICAgICAgICAgIEZp bHRlcjogKHV0cnRlc3RfMi5hID0gQU5ZICgnezEsMn0nOjppbnRlZ2VyW10pKQogKDEwIHJv d3MpCiAKIC0tIFRoZSBuZXcgdmFsdWVzIGFyZSBjb25jYXRlbmF0ZWQgd2l0aCAnIHRyaWdn ZXJlZCAhJwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5j cy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCmluZGV4IGU0ODli ZmNlYjU2Li40ZTc3Y2ZlOTI1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcXVl cnlqdW1ibGVmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxlZnVu Y3MuYwpAQCAtMTM1LDYgKzEzNSwzNiBAQCBKdW1ibGVRdWVyeShRdWVyeSAqcXVlcnkpCiAJ cmV0dXJuIGpzdGF0ZTsKIH0KIAorSnVtYmxlU3RhdGUgKgorSnVtYmxlRXhwcihFeHByICpl eHByLCB1aW50NjQgKnF1ZXJ5SWQpCit7CisJSnVtYmxlU3RhdGUgKmpzdGF0ZSA9IE5VTEw7 CisKKwlBc3NlcnQocXVlcnlJZCAhPSBOVUxMKTsKKworCWpzdGF0ZSA9IChKdW1ibGVTdGF0 ZSAqKSBwYWxsb2Moc2l6ZW9mKEp1bWJsZVN0YXRlKSk7CisKKwkvKiBTZXQgdXAgd29ya3Nw YWNlIGZvciBxdWVyeSBqdW1ibGluZyAqLworCWpzdGF0ZS0+anVtYmxlID0gKHVuc2lnbmVk IGNoYXIgKikgcGFsbG9jKEpVTUJMRV9TSVpFKTsKKwlqc3RhdGUtPmp1bWJsZV9sZW4gPSAw OworCWpzdGF0ZS0+Y2xvY2F0aW9uc19idWZfc2l6ZSA9IDMyOworCWpzdGF0ZS0+Y2xvY2F0 aW9ucyA9IChMb2NhdGlvbkxlbiAqKQorCQlwYWxsb2MoanN0YXRlLT5jbG9jYXRpb25zX2J1 Zl9zaXplICogc2l6ZW9mKExvY2F0aW9uTGVuKSk7CisJanN0YXRlLT5jbG9jYXRpb25zX2Nv dW50ID0gMDsKKwlqc3RhdGUtPmhpZ2hlc3RfZXh0ZXJuX3BhcmFtX2lkID0gMDsKKworCS8q IENvbXB1dGUgcXVlcnkgSUQgKi8KKwlfanVtYmxlTm9kZShqc3RhdGUsIChOb2RlICopIGV4 cHIpOworCSpxdWVyeUlkID0gRGF0dW1HZXRVSW50NjQoaGFzaF9hbnlfZXh0ZW5kZWQoanN0 YXRlLT5qdW1ibGUsCisJCQkJCQkJCQkJCQlqc3RhdGUtPmp1bWJsZV9sZW4sCisJCQkJCQkJ CQkJCQkwKSk7CisKKwlpZiAoKnF1ZXJ5SWQgPT0gVUlOVDY0Q09OU1QoMCkpCisJCSpxdWVy eUlkID0gVUlOVDY0Q09OU1QoMSk7CisKKwlyZXR1cm4ganN0YXRlOworfQorCiAvKgogICog RW5hYmxlcyBxdWVyeSBpZGVudGlmaWVyIGNvbXB1dGF0aW9uLgogICoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfZXhwci5jCmluZGV4IDkzMDBjN2I5YWJjLi5mYjE5OTIzMGNiZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jCkBAIC0xNiwxMiArMTYsMTQgQEAKICNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgogCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGJj b21tYW5kcy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21h a2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm5v ZGVzL3F1ZXJ5anVtYmxlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgog I2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Fn Zy5oIgpAQCAtMzgsMTEgKzQwLDEzIEBACiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5oIgogI2lu Y2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3Rh bXAuaCIKICNpbmNsdWRlICJ1dGlscy94bWwuaCIKIAogLyogR1VDIHBhcmFtZXRlcnMgKi8K IGJvb2wJCVRyYW5zZm9ybV9udWxsX2VxdWFscyA9IGZhbHNlOworYm9vbAkJZW5hYmxlX29y X3RyYW5zZm9ybWF0aW9uID0gdHJ1ZTsKIAogCiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtRXhw clJlY3Vyc2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByKTsKQEAgLTk5LDYgKzEw MywzNDAgQEAgc3RhdGljIEV4cHIgKm1ha2VfZGlzdGluY3Rfb3AoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBMaXN0ICpvcG5hbWUsCiBzdGF0aWMgTm9kZSAqbWFrZV9udWxsdGVzdF9mcm9tX2Rp c3RpbmN0KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQkgQV9FeHByICpkaXN0aW5j dGEsIE5vZGUgKmFyZyk7CiAKK3R5cGVkZWYgc3RydWN0IE9yQ2xhdXNlR3JvdXBLZXkKK3sK KwlFeHByICAgKmV4cHI7IC8qIFBvaW50ZXIgdG8gdGhlIGV4cHJlc3Npb24gdHJlZSB3aGlj aCBoYXMgYmVlbiBhIHNvdXJjZSBmb3IKKwkJCQkJdGhlIGhhc2hrZXkgdmFsdWUgKi8KKwlP aWQJCW9wbm87CisJT2lkCQlleHBydHlwZTsKK30gT3JDbGF1c2VHcm91cEtleTsKKwordHlw ZWRlZiBzdHJ1Y3QgT3JDbGF1c2VHcm91cEVudHJ5Cit7CisJT3JDbGF1c2VHcm91cEtleSBr ZXk7CisKKwlOb2RlCQkgICAqbm9kZTsKKwlMaXN0CQkgICAqY29uc3RzOworCU9pZAkJCQlz Y2FsYXJfdHlwZTsKKwlMaXN0IAkJICAgKmV4cHJzOworfSBPckNsYXVzZUdyb3VwRW50cnk7 CisKKy8qCisgKiBIYXNoIGZ1bmN0aW9uIHRoYXQncyBjb21wYXRpYmxlIHdpdGggZ3VjX25h bWVfY29tcGFyZQorICovCitzdGF0aWMgdWludDMyCitvcmNsYXVzZV9oYXNoKGNvbnN0IHZv aWQgKmRhdGEsIFNpemUga2V5c2l6ZSkKK3sKKwlPckNsYXVzZUdyb3VwS2V5ICAgKmtleSA9 IChPckNsYXVzZUdyb3VwS2V5ICopIGRhdGE7CisJdWludDY0CQkJCWhhc2g7CisKKwkodm9p ZCkgSnVtYmxlRXhwcihrZXktPmV4cHIsICZoYXNoKTsKKwloYXNoICs9ICgodWludDY0KSBr ZXktPm9wbm8gKyAodWludDY0KSBrZXktPmV4cHJ0eXBlKSAlIFVJTlQ2NF9NQVg7CisJcmV0 dXJuIGhhc2g7Cit9CisKK3N0YXRpYyB2b2lkICoKK29yY2xhdXNlX2tleWNvcHkodm9pZCAq ZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBTaXplIGtleXNpemUpCit7CisJT3JDbGF1c2VHcm91 cEtleSAqc3JjX2tleSA9IChPckNsYXVzZUdyb3VwS2V5ICopIHNyYzsKKwlPckNsYXVzZUdy b3VwS2V5ICpkc3Rfa2V5ID0gKE9yQ2xhdXNlR3JvdXBLZXkgKikgZGVzdDsKKworCUFzc2Vy dChzaXplb2YoT3JDbGF1c2VHcm91cEtleSkgPT0ga2V5c2l6ZSk7CisKKwlkc3Rfa2V5LT5l eHByID0gc3JjX2tleS0+ZXhwcjsKKwlkc3Rfa2V5LT5vcG5vID0gc3JjX2tleS0+b3BubzsK Kwlkc3Rfa2V5LT5leHBydHlwZSA9IHNyY19rZXktPmV4cHJ0eXBlOworCXJldHVybiBkc3Rf a2V5OworfQorCisvKgorICogRHluYWhhc2ggbWF0Y2ggZnVuY3Rpb24gdG8gdXNlIGluIGd1 Y19oYXNodGFiCisgKi8KK3N0YXRpYyBpbnQKK29yY2xhdXNlX21hdGNoKGNvbnN0IHZvaWQg KmRhdGExLCBjb25zdCB2b2lkICpkYXRhMiwgU2l6ZSBrZXlzaXplKQoreworCU9yQ2xhdXNl R3JvdXBLZXkgICAqa2V5MSA9IChPckNsYXVzZUdyb3VwS2V5ICopIGRhdGExOworCU9yQ2xh dXNlR3JvdXBLZXkgICAqa2V5MiA9IChPckNsYXVzZUdyb3VwS2V5ICopIGRhdGEyOworCisJ QXNzZXJ0KHNpemVvZihPckNsYXVzZUdyb3VwS2V5KSA9PSBrZXlzaXplKTsKKworCWlmIChr ZXkxLT5vcG5vID09IGtleTItPm9wbm8gJiYga2V5MS0+ZXhwcnR5cGUgPT0ga2V5Mi0+ZXhw cnR5cGUgJiYKKwkJZXF1YWwoa2V5MS0+ZXhwciwga2V5Mi0+ZXhwcikpCisJCXJldHVybiAw OworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9ybUJvb2xFeHBy T3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBCb29sRXhwciAqZXhwcikKK3sKKwlMaXN0CQkJCSAg ICpvcl9saXN0ID0gTklMOworCUxpc3QJCQkJICAgKmVudHJpZXMgPSBOSUw7CisJTGlzdENl bGwJCQkgICAqbGM7CisJSEFTSENUTAkJCQkJaW5mbzsKKwlIVEFCIAkJCQkgICAqb3JfZ3Jv dXBfaHRhYiA9IE5VTEw7CisJaW50IAkJCQkJbGVuX29ycyA9IGxpc3RfbGVuZ3RoKGV4cHIt PmFyZ3MpOworCU9yQ2xhdXNlR3JvdXBFbnRyeQkgICAqZW50cnkgPSBOVUxMOworCisJLyog SWYgdGhpcyBpcyBub3QgYW4gJ09SJyBleHByZXNzaW9uLCBza2lwIHRoZSB0cmFuc2Zvcm1h dGlvbiAqLworCWlmICghZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uIHx8IGV4cHItPmJvb2xv cCAhPSBPUl9FWFBSIHx8IGxlbl9vcnMgPCAyKQorCQlyZXR1cm4gdHJhbnNmb3JtQm9vbEV4 cHIocHN0YXRlLCAoQm9vbEV4cHIgKikgZXhwcik7CisKKwlNZW1TZXQoJmluZm8sIDAsIHNp emVvZihpbmZvKSk7CisJaW5mby5rZXlzaXplID0gc2l6ZW9mKE9yQ2xhdXNlR3JvdXBLZXkp OworCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKE9yQ2xhdXNlR3JvdXBFbnRyeSk7CisJaW5m by5oYXNoID0gb3JjbGF1c2VfaGFzaDsKKwlpbmZvLmtleWNvcHkgPSBvcmNsYXVzZV9rZXlj b3B5OworCWluZm8ubWF0Y2ggPSBvcmNsYXVzZV9tYXRjaDsKKwlvcl9ncm91cF9odGFiID0g aGFzaF9jcmVhdGUoIk9SIEdyb3VwcyIsCisJCQkJCQkJCWxlbl9vcnMsCisJCQkJCQkJCSZp bmZvLAorCQkJCQkJCQlIQVNIX0VMRU0gfCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9DT01QQVJF IHwgSEFTSF9LRVlDT1BZKTsKKworCWZvcmVhY2gobGMsIGV4cHItPmFyZ3MpCisJeworCQlO b2RlCQkJCSAgICphcmcgPSBsZmlyc3QobGMpOworCQlOb2RlCQkJCSAgICpvcnF1YWw7CisJ CU5vZGUJCQkJICAgKmNvbnN0X2V4cHI7CisJCU5vZGUJCQkJICAgKm5jb25zdF9leHByOwor CQlPckNsYXVzZUdyb3VwS2V5CQloYXNoa2V5OworCQlib29sCQkJCQlmb3VuZDsKKwkJT2lk CQkJCQkJb3BubzsKKwkJVFlQQ0FURUdPUlkgCQkJY2F0ZWdvcnk7CisJCU5vZGUJCQkJICAg KmxlZnRvcCwgKnJpZ2h0b3A7CisKKwkJLyogQXQgZmlyc3QsIHRyYW5zZm9ybSB0aGUgYXJn IGFuZCBldmFsdWF0ZSBjb25zdGFudCBleHByZXNzaW9ucy4gKi8KKwkJb3JxdWFsID0gdHJh bnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSBhcmcpOworCQlvcnF1YWwgPSBj b2VyY2VfdG9fYm9vbGVhbihwc3RhdGUsIG9ycXVhbCwgIk9SIik7CisKKwkJaWYgKCFJc0Eo b3JxdWFsLCBPcEV4cHIpKQorCQl7CisJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBv cnF1YWwpOworCQkJY29udGludWU7CisJCX0KKworCQlvcG5vID0gKChPcEV4cHIgKikgb3Jx dWFsKS0+b3BubzsKKwkJaWYgKGdldF9vcF9yZXR0eXBlKG9wbm8pICE9IEJPT0xPSUQpCisJ CXsKKwkJCS8qIE9ubHkgb3BlcmF0b3IgcmV0dXJuaW5nIGJvb2xlYW4gc3VpdHMgT1IgLT4g QU5ZIHRyYW5zZm9ybWF0aW9uICovCisJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBv cnF1YWwpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBEZXRlY3QgdGhlIGNv bnN0YW50IHNpZGUgb2YgdGhlIGNsYXVzZS4gUmVjYWxsIG5vbi1jb25zdGFudAorCQkgKiBl eHByZXNzaW9uIGNhbiBiZSBtYWRlIG5vdCBvbmx5IHdpdGggVmFycywgYnV0IGFsc28gd2l0 aCBQYXJhbXMsCisJCSAqIHdoaWNoIGlzIG5vdCBib25kZWQgd2l0aCBhbnkgcmVsYXRpb24u IFRodXMsIHdlIGRldGVjdCB0aGUgY29uc3QKKwkJICogc2lkZSAtIGlmIGFub3RoZXIgc2lk ZSBpcyBjb25zdGFudCB0b28sIHRoZSBvcnF1YWwgY291bGRuJ3QgYmUKKwkJICogYW4gT3BF eHByLgorCQkgKiBHZXQgcG9pbnRlcnMgdG8gY29uc3RhbnQgYW5kIGV4cHJlc3Npb24gc2lk ZXMgb2YgdGhlIHF1YWwuCisJCSAqLworCQlsZWZ0b3AgPSBnZXRfbGVmdG9wKG9ycXVhbCk7 CisJCWlmIChJc0EobGVmdG9wLCBSZWxhYmVsVHlwZSkpCisJCQlsZWZ0b3AgPSAoTm9kZSAq KSAoKFJlbGFiZWxUeXBlICopIGxlZnRvcCktPmFyZzsKKwkJcmlnaHRvcCA9IGdldF9yaWdo dG9wKG9ycXVhbCk7CisJCWlmIChJc0EocmlnaHRvcCwgUmVsYWJlbFR5cGUpKQorCQkJcmln aHRvcCA9IChOb2RlICopICgoUmVsYWJlbFR5cGUgKikgcmlnaHRvcCktPmFyZzsKKworCQlp ZiAoSXNBKGxlZnRvcCwgQ29uc3QpKQorCQl7CisJCQlvcG5vID0gZ2V0X2NvbW11dGF0b3Io b3Bubyk7CisKKwkJCWlmICghT2lkSXNWYWxpZChvcG5vKSkKKwkJCXsKKwkJCQkvKiBjb21t dXRhdG9yIGRvZXNuJ3QgZXhpc3QsIHdlIGNhbid0IHJldmVyc2UgdGhlIG9yZGVyICovCisJ CQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgb3JxdWFsKTsKKwkJCQljb250aW51ZTsK KwkJCX0KKworCQkJbmNvbnN0X2V4cHIgPSBnZXRfcmlnaHRvcChvcnF1YWwpOworCQkJY29u c3RfZXhwciA9IGdldF9sZWZ0b3Aob3JxdWFsKTsKKwkJfQorCQllbHNlIGlmIChJc0Eocmln aHRvcCwgQ29uc3QpKQorCQl7CisJCQljb25zdF9leHByID0gZ2V0X3JpZ2h0b3Aob3JxdWFs KTsKKwkJCW5jb25zdF9leHByID0gZ2V0X2xlZnRvcChvcnF1YWwpOworCQl9CisJCWVsc2UK KwkJeworCQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgb3JxdWFsKTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJLyogdHJhbnNmb3JtYXRpb24gb25seSB3b3JrcyB3aXRoIGJvdGgg c2lkZSB0eXBlIGlzIG5vdCB7IGFycmF5IHwgY29tcG9pc3RlIHwgZG9tYWluIH0gKi8KKwkJ Y2F0ZWdvcnkgPSBUeXBlQ2F0ZWdvcnkoZXhwclR5cGUoY29uc3RfZXhwcikpOworCQlpZiAo Y2F0ZWdvcnkgPT0gVFlQQ0FURUdPUllfQVJSQVkgfHwgY2F0ZWdvcnkgPT0gVFlQVFlQRV9E T01BSU4KKwkJCXx8IGNhdGVnb3J5ID09IFRZUFRZUEVfQ09NUE9TSVRFKQorCQl7CisJCQlv cl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBvcnF1YWwpOworCQkJY29udGludWU7CisJCX0K KworCQljYXRlZ29yeSA9IFR5cGVDYXRlZ29yeShleHByVHlwZShuY29uc3RfZXhwcikpOwor CQlpZiAoY2F0ZWdvcnkgPT0gVFlQQ0FURUdPUllfQVJSQVkgfHwgY2F0ZWdvcnkgPT0gVFlQ VFlQRV9ET01BSU4KKwkJCXx8IGNhdGVnb3J5ID09IFRZUFRZUEVfQ09NUE9TSVRFKQorCQl7 CisJCQlvcl9saXN0ID0gbGFwcGVuZChvcl9saXN0LCBvcnF1YWwpOworCQkJY29udGludWU7 CisJCX0KKworCQkvKgorCQkgKiBpZiB0aGUgbm9uLWNvbnN0IChsZWZ0IHNpZGUgb2Ygb3Bl cmF0b3IgZXhwcmVzc2lvbikgY29udGFpbiB2b2x0YWluIGZ1bmN0aW9ucworCQkgKiB0aGVu IHdlIGNhbm5vdCBkbyB0aGUgdHJhbnNmb3JtYXRpb24KKwkJKi8KKwkJaWYgKGNvbnRhaW5f dm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIG5jb25zdF9leHByKSkKKwkJeworCQkJb3Jf bGlzdCA9IGxhcHBlbmQob3JfbGlzdCwgb3JxdWFsKTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJLyoKKwkJKiBBdCB0aGlzIHBvaW50IHdlIGRlZmluaXRlbHkgaGF2ZSBhIHRyYW5zZm9y bWFibGUgY2xhdXNlLgorCQkqIENsYXNzaWZ5IGl0IGFuZCBhZGQgaW50byBzcGVjaWZpYyBn cm91cCBvZiBjbGF1c2VzLCBvciBjcmVhdGUgbmV3CisJCSogZ3JvdXAuCisJCSovCisJCWhh c2hrZXkuZXhwciA9IChFeHByICopIG5jb25zdF9leHByOworCQloYXNoa2V5Lm9wbm8gPSBv cG5vOworCQloYXNoa2V5LmV4cHJ0eXBlID0gZXhwclR5cGUobmNvbnN0X2V4cHIpOworCQll bnRyeSA9IGhhc2hfc2VhcmNoKG9yX2dyb3VwX2h0YWIsICZoYXNoa2V5LCBIQVNIX0VOVEVS LCAmZm91bmQpOworCisJCWlmICh1bmxpa2VseShmb3VuZCkpCisJCXsKKwkJCWVudHJ5LT5j b25zdHMgPSBsYXBwZW5kKGVudHJ5LT5jb25zdHMsIGNvbnN0X2V4cHIpOworCQkJZW50cnkt PmV4cHJzID0gbGFwcGVuZChlbnRyeS0+ZXhwcnMsIG9ycXVhbCk7CisJCX0KKwkJZWxzZQor CQl7CisJCQllbnRyeS0+bm9kZSA9IG5jb25zdF9leHByOworCQkJZW50cnktPmNvbnN0cyA9 IGxpc3RfbWFrZTEoY29uc3RfZXhwcik7CisJCQllbnRyeS0+ZXhwcnMgPSBsaXN0X21ha2Ux KG9ycXVhbCk7CisKKwkJCS8qCisJCQkgKiBBZGQgdGhlIGVudHJ5IHRvIHRoZSBsaXN0LiBJ dCBpcyBuZWVkZWQgZXhjbHVzaXZlbHkgdG8gbWFuYWdlIHRoZQorCQkJICogcHJvYmxlbSB3 aXRoIHRoZSBvcmRlciBvZiB0cmFuc2Zvcm1lZCBjbGF1c2VzIGluIGV4cGxhaW4uCisJCQkg KiBIYXNoIHZhbHVlIGNhbiBkZXBlbmQgb24gdGhlIHBsYXRmb3JtIGFuZCB2ZXJzaW9uLiBI ZW5jZSwKKwkJCSAqIHNlcXVlbnRhbCBzY2FuIG9mIHRoZSBoYXNoIHRhYmxlIHdvdWxkIHBy b25lIHRvIGNoYW5nZSB0aGUgb3JkZXIKKwkJCSAqIG9mIGNsYXVzZXMgaW4gbGlzdHMgYW5k LCBhcyBhIHJlc3VsdCwgYnJlYWsgcmVncmVzc2lvbiB0ZXN0cworCQkJICogYWNjaWRlbnRp YWxseS4KKwkJCSAqLworCQkJZW50cmllcyA9IGxhcHBlbmQoZW50cmllcywgZW50cnkpOwor CQl9CisJfQorCisJLyogTGV0J3MgY29udmVydCBlYWNoIGdyb3VwIG9mIGNsYXVzZXMgdG8g YW4gSU4gb3BlcmF0aW9uLiAqLworCisJLyoKKwkgKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9m IGdyb3VwcyBhbmQgY29udmVydCBlYWNoLCB3aGVyZSBudW1iZXIgb2YKKwkgKiBjb25zdHMg bW9yZSB0aGFuIDEuIHRyaXZpYWwgZ3JvdXBzIG1vdmUgdG8gT1ItbGlzdCBhZ2FpbgorCSAq LworCisJZm9yZWFjaCAobGMsIGVudHJpZXMpCisJeworCQlPaWQJCQkJICAgIHNjYWxhcl90 eXBlOworCQlPaWQJCQkJCWFycmF5X3R5cGU7CisKKwkJZW50cnkgPSAoT3JDbGF1c2VHcm91 cEVudHJ5ICopIGxmaXJzdChsYyk7CisKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGVudHJ5LT5j b25zdHMpID4gMCk7CisJCUFzc2VydChsaXN0X2xlbmd0aChlbnRyeS0+ZXhwcnMpID09IGxp c3RfbGVuZ3RoKGVudHJ5LT5jb25zdHMpKTsKKworCQlpZiAobGlzdF9sZW5ndGgoZW50cnkt PmNvbnN0cykgPT0gMSkKKwkJeworCQkJLyoKKwkJCSAqIE9ubHkgb25lIGVsZW1lbnQgaW4g dGhlIGNsYXNzLiBSZXR1cm4gb3JpZ2luIGV4cHJlc3Npb24gaW50bworCQkJICogdGhlIEJv b2xFeHByIGFyZ3MgbGlzdCB1bmNoYW5nZWQuCisJCQkgKi8KKwkJCWxpc3RfZnJlZShlbnRy eS0+Y29uc3RzKTsKKwkJCW9yX2xpc3QgPSBsaXN0X2NvbmNhdChvcl9saXN0LCBlbnRyeS0+ ZXhwcnMpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBEbyB0aGUgdHJhbnNm b3JtYXRpb24uCisJCSAqLworCisJCXNjYWxhcl90eXBlID0gZW50cnktPmtleS5leHBydHlw ZTsKKwkJaWYgKHNjYWxhcl90eXBlICE9IFJFQ09SRE9JRCAmJiBPaWRJc1ZhbGlkKHNjYWxh cl90eXBlKSkKKwkJCWFycmF5X3R5cGUgPSBnZXRfYXJyYXlfdHlwZShzY2FsYXJfdHlwZSk7 CisJCWVsc2UKKwkJCWFycmF5X3R5cGUgPSBJbnZhbGlkT2lkOworCisJCWlmIChPaWRJc1Zh bGlkKGFycmF5X3R5cGUpKQorCQl7CisJCQkvKgorCQkJICogT0s6IGNvZXJjZSBhbGwgdGhl IHJpZ2h0LWhhbmQgbm9uLVZhciBpbnB1dHMgdG8gdGhlIGNvbW1vbgorCQkJICogdHlwZSBh bmQgYnVpbGQgYW4gQXJyYXlFeHByIGZvciB0aGVtLgorCQkJICovCisJCQlMaXN0CQkJICAg KmFleHBycyA9IE5JTDsKKwkJCUFycmF5RXhwcgkJICAgKm5ld2EgPSBOVUxMOworCQkJU2Nh bGFyQXJyYXlPcEV4cHIgICpzYW9wZXhwciA9IE5VTEw7CisJCQlIZWFwVHVwbGUJCQlvcGVy dHVwOworCQkJRm9ybV9wZ19vcGVyYXRvcglvcGVyZm9ybTsKKwkJCUxpc3QJCQkgICAqbmFt ZWxpc3QgPSBOSUw7CisJCQlMaXN0Q2VsbAkJICAgKmxjMTsKKworCQkJZm9yZWFjaChsYzEs IGVudHJ5LT5jb25zdHMpCisJCQl7CisJCQkJTm9kZSAgICpyZXhwciA9IChOb2RlICopIGxm aXJzdChsYzEpOworCisJCQkJcmV4cHIgPSBjb2VyY2VfdG9fY29tbW9uX3R5cGUocHN0YXRl LCByZXhwciwKKwkJCQkJCQkJCQkJICBzY2FsYXJfdHlwZSwKKwkJCQkJCQkJCQkJICAiSU4i KTsKKwkJCQlhZXhwcnMgPSBsYXBwZW5kKGFleHBycywgcmV4cHIpOworCQkJfQorCisJCQlu ZXdhID0gbWFrZU5vZGUoQXJyYXlFeHByKTsKKwkJCS8qIGFycmF5X2NvbGxpZCB3aWxsIGJl IHNldCBieSBwYXJzZV9jb2xsYXRlLmMgKi8KKwkJCW5ld2EtPmVsZW1lbnRfdHlwZWlkID0g c2NhbGFyX3R5cGU7CisJCQluZXdhLT5hcnJheV90eXBlaWQgPSBhcnJheV90eXBlOworCQkJ bmV3YS0+bXVsdGlkaW1zID0gZmFsc2U7CisJCQluZXdhLT5lbGVtZW50cyA9IGFleHByczsK KwkJCW5ld2EtPmxvY2F0aW9uID0gLTE7CisKKwkJCW9wZXJ0dXAgPSBTZWFyY2hTeXNDYWNo ZTEoT1BFUk9JRCwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShlbnRyeS0+a2V5Lm9w bm8pKTsKKwkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGVydHVwKSkKKwkJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgJXUiLAorCQkJCQkgZW50 cnktPmtleS5vcG5vKTsKKworCQkJb3BlcmZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VU U1RSVUNUKG9wZXJ0dXApOworCQkJaWYgKCFPcGVyYXRvcklzVmlzaWJsZShlbnRyeS0+a2V5 Lm9wbm8pKQorCQkJCW5hbWVsaXN0ID0gbGFwcGVuZChuYW1lbGlzdCwgbWFrZVN0cmluZyhn ZXRfbmFtZXNwYWNlX25hbWUob3BlcmZvcm0tPm9wcm5hbWVzcGFjZSkpKTsKKworCQkJbmFt ZWxpc3QgPSBsYXBwZW5kKG5hbWVsaXN0LCBtYWtlU3RyaW5nKHBzdHJkdXAoTmFtZVN0cihv cGVyZm9ybS0+b3BybmFtZSkpKSk7CisJCQlSZWxlYXNlU3lzQ2FjaGUob3BlcnR1cCk7CisK KwkJCXNhb3BleHByID0KKwkJCQkoU2NhbGFyQXJyYXlPcEV4cHIgKikKKwkJCQkJbWFrZV9z Y2FsYXJfYXJyYXlfb3AocHN0YXRlLAorCQkJCQkJCQkJCSBuYW1lbGlzdCwKKwkJCQkJCQkJ CQkgdHJ1ZSwKKwkJCQkJCQkJCQkgZW50cnktPm5vZGUsCisJCQkJCQkJCQkJIChOb2RlICop IG5ld2EsCisJCQkJCQkJCQkJIC0xKTsKKworCQkJb3JfbGlzdCA9IGxhcHBlbmQob3JfbGlz dCwgKHZvaWQgKikgc2FvcGV4cHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAq IElmIHRoZSBjb25zdCBub2RlIChyaWdodCBzaWRlIG9mIG9wZXJhdG9yIGV4cHJlc3Npb24p ICdzIHR5cGUKKwkJCSAqICBkb24ndCBoYXZlIOKAnHRydWXigJ0gYXJyYXkgdHlwZSwgdGhl biB3ZSBjYW5ubm90IGRvIHRoZSB0cmFuc2Zvcm1hdGlvbi4KKwkJCSAqIFdlIHNpbXBseSBj b25jYXRlbmF0ZSB0aGUgZXhwcmVzc2lvbiBub2RlLgorCQkJICoKKwkJCSAqLworCQkJbGlz dF9mcmVlKGVudHJ5LT5jb25zdHMpOworCQkJb3JfbGlzdCA9IGxpc3RfY29uY2F0KG9yX2xp c3QsIGVudHJ5LT5leHBycyk7CisJCX0KKwl9CisJaGFzaF9kZXN0cm95KG9yX2dyb3VwX2h0 YWIpOworCWxpc3RfZnJlZShlbnRyaWVzKTsKKworCS8qIE9uZSBtb3JlIHRyaWNrOiBhc3Nl bWJsZSBjb3JyZWN0IGNsYXVzZSAqLworCXJldHVybiAoTm9kZSAqKSAoKGxpc3RfbGVuZ3Ro KG9yX2xpc3QpID4gMSkgPworCQkJCQkgbWFrZUJvb2xFeHByKE9SX0VYUFIsIG9yX2xpc3Qs IGV4cHItPmxvY2F0aW9uKSA6CisJCQkJCSBsaW5pdGlhbChvcl9saXN0KSk7Cit9CiAKIC8q CiAgKiB0cmFuc2Zvcm1FeHByIC0KQEAgLTIxMiw3ICs1NTAsNyBAQCB0cmFuc2Zvcm1FeHBy UmVjdXJzZShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIpCiAJCQl9CiAKIAkJY2Fz ZSBUX0Jvb2xFeHByOgotCQkJcmVzdWx0ID0gdHJhbnNmb3JtQm9vbEV4cHIocHN0YXRlLCAo Qm9vbEV4cHIgKikgZXhwcik7CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Cb29sRXhwck9yKHBz dGF0ZSwgKEJvb2xFeHByICopIGV4cHIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBUX0Z1bmND YWxsOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA3ZmU1ODUxOGQ3 ZC4uZGRkYTJkM2M0ODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBA IC0xMDcxLDYgKzEwNzEsMTcgQEAgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVz Qm9vbFtdID0KIAkJdHJ1ZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCisJeworCQl7ImVu YWJsZV9vcl90cmFuc2Zvcm1hdGlvbiIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfT1RI RVIsCisJCQlnZXR0ZXh0X25vb3AoIlRyYW5zZm9ybSBhIHNlcXVlbmNlIG9mIE9SIGNsYXVz ZXMgdG8gYW4gSU4gZXhwcmVzc2lvbi4iKSwKKwkJCWdldHRleHRfbm9vcCgiVGhlIHBsYW5u ZXIgd2lsbCByZXBsYWNlIGNsYXVzZXMgbGlrZSAneD1jMSBPUiB4PWMyIC4uIgorCQkJCQkJ ICJ0byB0aGUgY2xhdXNlICd4IElOIChjMSxjMiwuLi4pJyIpLAorCQkJR1VDX0VYUExBSU4K KwkJfSwKKwkJJmVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbiwKKwkJdHJ1ZSwKKwkJTlVMTCwg TlVMTCwgTlVMTAorCX0sCiAJewogCQkvKgogCQkgKiBOb3QgZm9yIGdlbmVyYWwgdXNlIC0t LSB1c2VkIGJ5IFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gYW5kIFNFVApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGRhMTBi NDNkYWMzLi42ODc2ZDczMzkyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzc5LDYgKzM3OSw3IEBACiAjIC0gUGxhbm5l ciBNZXRob2QgQ29uZmlndXJhdGlvbiAtCiAKICNlbmFibGVfYXN5bmNfYXBwZW5kID0gb24K KyNlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24gPSBvbgogI2VuYWJsZV9iaXRtYXBzY2FuID0g b24KICNlbmFibGVfZ2F0aGVybWVyZ2UgPSBvbgogI2VuYWJsZV9oYXNoYWdnID0gb24KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9w Z19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggMDBiNTA5MjcxM2QuLmQyOGJmNjE3ZGJl IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9z cmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtMjA5NSw5ICsyMDk1LDkgQEAg bXkgJXRlc3RzID0gKAogCQlyZWdleHAgPT4gcXIvXgogCQkJXFFDUkVBVEUgRE9NQUlOIGR1 bXBfdGVzdC51c19wb3N0YWxfY29kZSBBUyB0ZXh0IENPTExBVEUgcGdfY2F0YWxvZy4iQyIg REVGQVVMVCAnMTAwMTQnOjp0ZXh0XEVcblxzKwogCQkJXFFDT05TVFJBSU5UIHVzX3Bvc3Rh bF9jb2RlX2NoZWNrIENIRUNLIFxFCi0JCQlcUSgoKFZBTFVFIH4gJ15cZHs1fVxFCi0JCQlc JFxRJzo6dGV4dCkgT1IgKFZBTFVFIH4gJ15cZHs1fS1cZHs0fVxFXCQKLQkJCVxRJzo6dGV4 dCkpKTtcRSgufFxuKSoKKwkJCVxRKChWQUxVRSB+IEFOWSAoQVJSQVlbJ15cZHs1fVxFCisJ CQlcJFxRJzo6dGV4dCwgJ15cZHs1fS1cZHs0fVxFXCQKKwkJCVxRJzo6dGV4dF0pKSk7XEUo LnxcbikqCiAJCQlcUUNPTU1FTlQgT04gQ09OU1RSQUlOVCB1c19wb3N0YWxfY29kZV9jaGVj ayBPTiBET01BSU4gZHVtcF90ZXN0LnVzX3Bvc3RhbF9jb2RlIElTICdjaGVjayBpdCc7XEUK IAkJCS94bSwKIAkJbGlrZSA9PgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcXVl cnlqdW1ibGUuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKaW5kZXggZjFj NTVjODA2N2YuLmE5YWUwNDhhZjUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9x dWVyeWp1bWJsZS5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKQEAg LTY1LDYgKzY1LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21wdXRlX3F1ZXJ5X2lk OwogCiBleHRlcm4gY29uc3QgY2hhciAqQ2xlYW5RdWVyeXRleHQoY29uc3QgY2hhciAqcXVl cnksIGludCAqbG9jYXRpb24sIGludCAqbGVuKTsKIGV4dGVybiBKdW1ibGVTdGF0ZSAqSnVt YmxlUXVlcnkoUXVlcnkgKnF1ZXJ5KTsKK2V4dGVybiBKdW1ibGVTdGF0ZSAqSnVtYmxlRXhw cihFeHByICpleHByLCB1aW50NjQgKnF1ZXJ5SWQpOwogZXh0ZXJuIHZvaWQgRW5hYmxlUXVl cnlJZCh2b2lkKTsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgcXVlcnlfaWRfZW5hYmxl ZDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9leHByLmggYi9zcmMv aW5jbHVkZS9wYXJzZXIvcGFyc2VfZXhwci5oCmluZGV4IDliNDZkZmQ5ZWNjLi40ZmY0YWRj NzdkMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2V4cHIuaAorKysg Yi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfZXhwci5oCkBAIC0xNyw2ICsxNyw3IEBACiAK IC8qIEdVQyBwYXJhbWV0ZXJzICovCiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBUcmFuc2Zv cm1fbnVsbF9lcXVhbHM7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfb3JfdHJh bnNmb3JtYXRpb247CiAKIGV4dGVybiBOb2RlICp0cmFuc2Zvcm1FeHByKFBhcnNlU3RhdGUg KnBzdGF0ZSwgTm9kZSAqZXhwciwgUGFyc2VFeHByS2luZCBleHByS2luZCk7CiAKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAppbmRleCA3OWZhMTE3 Y2I1NC4uYjg2NTNjMDllYTIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY3JlYXRlX2luZGV4Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV9pbmRleC5vdXQKQEAgLTE4MzgsMTggKzE4MzgsNTAgQEAgRFJPUCBUQUJMRSBvbmVr X3dpdGhfbnVsbDsKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCAqIEZST00gdGVuazEK ICAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9 IDMgT1IgdGVudGhvdXMgPSA0Mik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBCaXRtYXAgSGVhcCBTY2FuIG9uIHRl bmsxCi0gICBSZWNoZWNrIENvbmQ6ICgoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMg PSAxKSkgT1IgKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMykpIE9SICgodGhv dXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDQyKSkpCi0gICAtPiAgQml0bWFwT3IKLSAg ICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cwot ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRo b3VzID0gMSkpCi0gICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhv dXNfdGVudGhvdXMKLSAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0 MikgQU5EICh0ZW50aG91cyA9IDMpKQotICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2Fu IG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCi0gICAgICAgICAgICAgICBJbmRleCBDb25kOiAo KHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSA0MikpCi0oOSByb3dzKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBT Y2FuIHVzaW5nIHRlbmsxX3Rob3VzX3RlbnRob3VzIG9uIHRlbmsxCisgICBJbmRleCBDb25k OiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSBBTlkgKCd7MSwzLDQyfSc6Omlu dGVnZXJbXSkpKQorKDIgcm93cykKKworU0VMRUNUICogRlJPTSB0ZW5rMQorICBXSEVSRSB0 aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50 aG91cyA9IDQyKTsKKyB1bmlxdWUxIHwgdW5pcXVlMiB8IHR3byB8IGZvdXIgfCB0ZW4gfCB0 d2VudHkgfCBodW5kcmVkIHwgdGhvdXNhbmQgfCB0d290aG91c2FuZCB8IGZpdmV0aG91cyB8 IHRlbnRob3VzIHwgb2RkIHwgZXZlbiB8IHN0cmluZ3UxIHwgc3RyaW5ndTIgfCBzdHJpbmc0 IAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgICAgICA0 MiB8ICAgIDU1MzAgfCAgIDAgfCAgICAyIHwgICAyIHwgICAgICAyIHwgICAgICA0MiB8ICAg ICAgIDQyIHwgICAgICAgICAgNDIgfCAgICAgICAgNDIgfCAgICAgICA0MiB8ICA4NCB8ICAg ODUgfCBRQkFBQUEgICB8IFNFSUFBQSAgIHwgT09PT3h4CisoMSByb3cpCisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRy ZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKKyAgICAg ICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0gNDIpIEFORCAodGhvdXNhbmQgPSBBTlkg KCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAtPiAgQml0bWFwQW5kCisgICAg ICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAorICAg ICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikKKyAgICAgICAg ICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cwor ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gQU5ZICgnezQy LDk5fSc6OmludGVnZXJbXSkpCisoOCByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSB0 ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3Vz YW5kID0gOTkpOworIGNvdW50IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cpCisKK1NFVCBl bmFibGVfb3JfdHJhbnNmb3JtYXRpb24gPSBvbjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBBTkQgKHRlbnRob3Vz ID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNp bmcgdGVuazFfdGhvdXNfdGVudGhvdXMgb24gdGVuazEKKyAgIEluZGV4IENvbmQ6ICgodGhv dXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IEFOWSAoJ3sxLDMsNDJ9Jzo6aW50ZWdlcltd KSkpCisoMiByb3dzKQogCiBTRUxFQ1QgKiBGUk9NIHRlbmsxCiAgIFdIRVJFIHRob3VzYW5k ID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0g NDIpOwpAQCAtMTg2MSwyOCArMTg5MywxMTYgQEAgU0VMRUNUICogRlJPTSB0ZW5rMQogRVhQ TEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKICAgV0hFUkUg aHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVu azEKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0gNDIpIEFORCAodGhvdXNh bmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkpCisgICAgICAgICAtPiAgQml0bWFw QW5kCisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVu ZHJlZAorICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikK KyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190 ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0g QU5ZICgnezQyLDk5fSc6OmludGVnZXJbXSkpCisoOCByb3dzKQorCitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQy IE9SIHRob3VzYW5kID0gOTkpOworIGNvdW50IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cp CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisg IFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kIDwgNDIgT1IgdGhvdXNhbmQgPCA5 OSBPUiA0MyA+IHRob3VzYW5kIE9SIDQyID4gdGhvdXNhbmQpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCisg ICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQyKSBBTkQgKHRob3VzYW5kIDwg QU5ZICgnezQyLDk5LDQzLDQyfSc6OmludGVnZXJbXSkpKQorICAgICAgICAgLT4gIEJpdG1h cEFuZAorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1 bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNDIp CisgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNf dGVudGhvdXMKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91c2FuZCA8 IEFOWSAoJ3s0Miw5OSw0Myw0Mn0nOjppbnRlZ2VyW10pKQorKDggcm93cykKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgdGhv dXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMpIE9SIHRob3Vz YW5kID0gNDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxCisg ICAgICAgICBSZWNoZWNrIENvbmQ6ICgoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMg PSBBTlkgKCd7MSwzfSc6OmludGVnZXJbXSkpKSBPUiAodGhvdXNhbmQgPSA0MSkpCisgICAg ICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2Nh biBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gQU5ZICgnezEsM30nOjpp bnRlZ2VyW10pKSkKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0 ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KHRob3VzYW5kID0gNDEpCisoOCByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3Vz ID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxMAorKDEg cm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5k ID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2FuZCA9IDQxOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQml0bWFwIEhl YXAgU2NhbiBvbiB0ZW5rMQorICAgICAgICAgUmVjaGVjayBDb25kOiAoKChodW5kcmVkID0g NDIpIEFORCAoKHRob3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJbXSkpIE9SICh0 ZW50aG91cyA8IDIpKSkgT1IgKHRob3VzYW5kID0gNDEpKQorICAgICAgICAgLT4gIEJpdG1h cE9yCisgICAgICAgICAgICAgICAtPiAgQml0bWFwQW5kCisgICAgICAgICAgICAgICAgICAg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSBBTlkgKCd7 NDIsOTl9Jzo6aW50ZWdlcltdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRlbnRob3VzIDwgMikKKyAgICAg ICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91 cworICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gNDEpCiso MTQgcm93cykKKworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJl ZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5IE9SIHRlbnRob3Vz IDwgMikgT1IgdGhvdXNhbmQgPSA0MTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAyMAorKDEg cm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5k ID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWdncmVnYXRlCiAgICAtPiAgQml0bWFw IEhlYXAgU2NhbiBvbiB0ZW5rMQotICAgICAgICAgUmVjaGVjayBDb25kOiAoKGh1bmRyZWQg PSA0MikgQU5EICgodGhvdXNhbmQgPSA0MikgT1IgKHRob3VzYW5kID0gOTkpKSkKKyAgICAg ICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0gNDIpIEFORCAoKCh0aG91c2FuZCA9IDk5 KSBBTkQgKHRlbnRob3VzID0gMikpIE9SICh0aG91c2FuZCA9IEFOWSAoJ3s0Miw0MX0nOjpp bnRlZ2VyW10pKSkpCiAgICAgICAgICAtPiAgQml0bWFwQW5kCiAgICAgICAgICAgICAgICAt PiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAogICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0MikKICAgICAgICAgICAgICAgIC0+ICBC aXRtYXBPcgogICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IHRlbmsxX3Rob3VzX3RlbnRob3VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAodGhvdXNhbmQgPSA0MikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA5OSkgQU5EICh0ZW50aG91cyA9IDIpKQogICAgICAg ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3Rl bnRob3VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNh bmQgPSA5OSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh0aG91 c2FuZCA9IEFOWSAoJ3s0Miw0MX0nOjppbnRlZ2VyW10pKQogKDExIHJvd3MpCiAKIFNFTEVD VCBjb3VudCgqKSBGUk9NIHRlbmsxCi0gIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3Vz YW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQg KHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0 ZW50aG91cyA9IDIpOwogIGNvdW50IAogLS0tLS0tLQogICAgIDEwCiAoMSByb3cpCiAKK1JF U0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbjsKIC0tCiAtLSBDaGVjayBiZWhhdmlvciB3 aXRoIGR1cGxpY2F0ZSBpbmRleCBjb2x1bW4gY29udGVudHMKIC0tCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luaGVyaXQub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9pbmhlcml0Lm91dAppbmRleCAxMzBhOTI0MjI4OC4uNjg0ODg2MzM2Y2Qg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5oZXJpdC5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmhlcml0Lm91dApAQCAtMjYwMCw3ICsy NjAwLDcgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxpc3RfcGFydGVk IHdoZXJlIGEgPSAnYWInIG9yIGEgaW4gKG51bGwsICdjZCcKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgU2VxIFNjYW4gb24g cGFydF9hYl9jZCBsaXN0X3BhcnRlZAotICAgRmlsdGVyOiAoKChhKTo6dGV4dCA9ICdhYic6 OnRleHQpIE9SICgoYSk6OnRleHQgPSBBTlkgKCd7TlVMTCxjZH0nOjp0ZXh0W10pKSkKKyAg IEZpbHRlcjogKCgoYSk6OnRleHQgPSBBTlkgKCd7TlVMTCxjZH0nOjp0ZXh0W10pKSBPUiAo KGEpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCiAoMiByb3dzKQogCiBleHBsYWluIChjb3N0cyBv ZmYpIHNlbGVjdCAqIGZyb20gbGlzdF9wYXJ0ZWQgd2hlcmUgYSA9ICdhYic7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qb2luLm91dAppbmRleCA5YzA4ZDAxMzRjYS4uMjU2ZWQ4YWNiNWMg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dApAQCAtNDIxMCwxMCArNDIxMCwx MCBAQCBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgKiBmcm9tIHRlbmsxIGEgam9pbiB0 ZW5rMSBiIG9uCiAgIChhLnVuaXF1ZTEgPSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgogICAo KGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBO ZXN0ZWQgTG9vcAotICAgSm9pbiBGaWx0ZXI6ICgoKGEudW5pcXVlMSA9IDEpIEFORCAoYi51 bmlxdWUxID0gMikpIE9SICgoKGEudW5pcXVlMiA9IDMpIE9SIChhLnVuaXF1ZTIgPSA3KSkg QU5EIChiLmh1bmRyZWQgPSA0KSkpCisgICBKb2luIEZpbHRlcjogKCgoYS51bmlxdWUxID0g MSkgQU5EIChiLnVuaXF1ZTEgPSAyKSkgT1IgKChhLnVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6 OmludGVnZXJbXSkpIEFORCAoYi5odW5kcmVkID0gNCkpKQogICAgLT4gIEJpdG1hcCBIZWFw IFNjYW4gb24gdGVuazEgYgogICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPSAy KSBPUiAoaHVuZHJlZCA9IDQpKQogICAgICAgICAgLT4gIEJpdG1hcE9yCkBAIC00MjIzLDE2 ICs0MjIzLDY0IEBAIHNlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KICAg ICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNCkKICAgIC0+ICBN YXRlcmlhbGl6ZQogICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYQot ICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPSAxKSBPUiAodW5pcXVl MiA9IDMpIE9SICh1bmlxdWUyID0gNykpCisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6 ICgodW5pcXVlMSA9IDEpIE9SICh1bmlxdWUyID0gQU5ZICgnezMsN30nOjppbnRlZ2VyW10p KSkKICAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgogICAgICAgICAgICAgICAgICAgICAg LT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTEKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUxID0gMSkKICAgICAgICAgICAgICAg ICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IDMpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IEFOWSAoJ3szLDd9 Jzo6aW50ZWdlcltdKSkKKygxNyByb3dzKQorCitTRVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0 aW9uID0gb247CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHRlbmsxIGEg am9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1ZTEgPSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBv cgorICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykgYW5kIGIuaHVuZHJlZCA9 IDQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6ICgoKGEudW5pcXVlMSA9IDEpIEFORCAoYi51bmlxdWUxID0gMikpIE9SICgo YS51bmlxdWUyID0gQU5ZICgnezMsN30nOjppbnRlZ2VyW10pKSBBTkQgKGIuaHVuZHJlZCA9 IDQpKSkKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxIGIKKyAgICAgICAgIFJl Y2hlY2sgQ29uZDogKCh1bmlxdWUxID0gMikgT1IgKGh1bmRyZWQgPSA0KSkKKyAgICAgICAg IC0+ICBCaXRtYXBPcgorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IHRlbmsxX3VuaXF1ZTEKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlx dWUxID0gMikKKyAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5r MV9odW5kcmVkCisgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaHVuZHJlZCA9 IDQpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBCaXRtYXAgSGVhcCBTY2Fu IG9uIHRlbmsxIGEKKyAgICAgICAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1bmlxdWUxID0g MSkgT1IgKHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6OmludGVnZXJbXSkpKQorICAgICAgICAg ICAgICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKHVuaXF1ZTEgPSAxKQogICAgICAgICAgICAgICAgICAgICAgLT4gIEJp dG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3VuaXF1ZTIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUyID0gNykKLSgxOSByb3dzKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTIgPSBBTlkgKCd7Myw3fSc6 OmludGVnZXJbXSkpCisoMTcgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0 ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgorICAoYS51bmlxdWUxIDwgMjAgb3Ig YS51bmlxdWUxID0gMyBvciBhLnVuaXF1ZTEgPSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgor ICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoKGEudW5pcXVlMSA9IDEpIEFORCAo Yi51bmlxdWUxID0gMikpIE9SICgoYS51bmlxdWUyID0gQU5ZICgnezMsN30nOjppbnRlZ2Vy W10pKSBBTkQgKGIuaHVuZHJlZCA9IDQpKSBPUiAoYS51bmlxdWUxIDwgMjApIE9SIChhLnVu aXF1ZTEgPSAzKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiB0ZW5rMSBiCisgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlbmsxIGEKKyAgICAg ICAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1bmlxdWUxID0gMSkgT1IgKHVuaXF1ZTIgPSBB TlkgKCd7Myw3fSc6OmludGVnZXJbXSkpIE9SICh1bmlxdWUxIDwgMjApIE9SICh1bmlxdWUx ID0gMykpCisgICAgICAgICAgICAgICAtPiAgQml0bWFwT3IKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDEpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTIgPSBBTlkgKCd7 Myw3fSc6OmludGVnZXJbXSkpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKHVuaXF1ZTEgPCAyMCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDMpCisoMTUgcm93cykKIAorUkVTRVQg ZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uOwogLS0KIC0tIHRlc3QgcGxhY2VtZW50IG9mIG1v dmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0ZXJpemVkIGpvaW4gdHJlZQogLS0KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dAppbmRleCA5YTRj NDhjMDU1Ni4uMzQyM2FmNDc2ODQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKQEAgLTgyLDI1ICs4Miw0NyBAQCBleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBudWxsOwogKDIgcm93cykK IAogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgPSAnYScg b3IgYSA9ICdjJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogIEFwcGVuZAogICAgLT4gIFNlcSBTY2FuIG9uIGxwX2FkIGxwXzEK LSAgICAgICAgIEZpbHRlcjogKChhID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2MnOjpicGNo YXIpKQorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKQog ICAgLT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzIKLSAgICAgICAgIEZpbHRlcjogKChhID0g J2EnOjpicGNoYXIpIE9SIChhID0gJ2MnOjpicGNoYXIpKQorICAgICAgICAgRmlsdGVyOiAo YSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKQogKDUgcm93cykKIAogZXhwbGFpbiAoY29z dHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90IG51bGwgYW5kIChhID0g J2EnIG9yIGEgPSAnYycpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog IEFwcGVuZAogICAgLT4gIFNlcSBTY2FuIG9uIGxwX2FkIGxwXzEKLSAgICAgICAgIEZpbHRl cjogKChhIElTIE5PVCBOVUxMKSBBTkQgKChhID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2Mn OjpicGNoYXIpKSkKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGEg PSBBTlkgKCd7YSxjfSc6OmJwY2hhcltdKSkpCiAgICAtPiAgU2VxIFNjYW4gb24gbHBfYmMg bHBfMgotICAgICAgICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFORCAoKGEgPSAnYSc6 OmJwY2hhcikgT1IgKGEgPSAnYyc6OmJwY2hhcikpKQorICAgICAgICAgRmlsdGVyOiAoKGEg SVMgTk9UIE5VTEwpIEFORCAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKSkKICg1IHJv d3MpCiAKK1NFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24gPSBvbjsKK2V4cGxhaW4gKGNv c3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhID0gJ2EnIG9yIGEgPSAnYyc7Cisg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAg IC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xCisgICAgICAgICBGaWx0ZXI6IChhID0gQU5Z ICgne2EsY30nOjpicGNoYXJbXSkpCisgICAtPiAgU2VxIFNjYW4gb24gbHBfYmMgbHBfMgor ICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3thLGN9Jzo6YnBjaGFyW10pKQorKDUgcm93 cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMg bm90IG51bGwgYW5kIChhID0gJ2EnIG9yIGEgPSAnYycpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8x CisgICAgICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChhID0gQU5ZICgne2Es Y30nOjpicGNoYXJbXSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzIKKyAgICAg ICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGEgPSBBTlkgKCd7YSxjfSc6OmJw Y2hhcltdKSkpCisoNSByb3dzKQorCitSRVNFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb247 CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA8PiAnZyc7 CiAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTE1LDEwICs1MzcsMTAgQEAgZXhwbGFpbiAo Y29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhIDw9IDMxOwogKDI3IHJvd3Mp CiAKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDEg b3IgYSA9IDc7Ci0gICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgU2VxIFNjYW4gb24gcmxwMiBybHAKLSAgIEZpbHRlcjogKChhID0gMSkgT1IgKGEg PSA3KSkKKyAgIEZpbHRlcjogKGEgPSBBTlkgKCd7MSw3fSc6OmludGVnZXJbXSkpCiAoMiBy b3dzKQogCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEg PSAxIG9yIGIgPSAnYWInOwpAQCAtNTg5LDIwICs2MTEsMjAgQEAgZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhIDwgMSBvciAoYSA+IDIwIGFuZCBhIDwg MjUpOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgQXBwZW5kCiAgICAtPiAgU2VxIFNjYW4gb24gcmxwMSBybHBfMQotICAgICAg ICAgRmlsdGVyOiAoKGEgPCAxKSBPUiAoKGEgPiAyMCkgQU5EIChhIDwgMjUpKSkKKyAgICAg ICAgIEZpbHRlcjogKCgoYSA+IDIwKSBBTkQgKGEgPCAyNSkpIE9SIChhIDwgMSkpCiAgICAt PiAgU2VxIFNjYW4gb24gcmxwNF8xIHJscF8yCi0gICAgICAgICBGaWx0ZXI6ICgoYSA8IDEp IE9SICgoYSA+IDIwKSBBTkQgKGEgPCAyNSkpKQorICAgICAgICAgRmlsdGVyOiAoKChhID4g MjApIEFORCAoYSA8IDI1KSkgT1IgKGEgPCAxKSkKICg1IHJvd3MpCiAKIC0tIHdoZXJlIGNs YXVzZSBjb250cmFkaWN0cyBzdWItcGFydGl0aW9uJ3MgY29uc3RyYWludAogZXhwbGFpbiAo Y29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMjAgb3IgYSA9IDQwOwot ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQXBwZW5kCiAgICAtPiAgU2VxIFNjYW4gb24g cmxwNF8xIHJscF8xCi0gICAgICAgICBGaWx0ZXI6ICgoYSA9IDIwKSBPUiAoYSA9IDQwKSkK KyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7MjAsNDB9Jzo6aW50ZWdlcltdKSkKICAg IC0+ICBTZXEgU2NhbiBvbiBybHA1X2RlZmF1bHQgcmxwXzIKLSAgICAgICAgIEZpbHRlcjog KChhID0gMjApIE9SIChhID0gNDApKQorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3sy MCw0MH0nOjppbnRlZ2VyW10pKQogKDUgcm93cykKIAogZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgKiBmcm9tIHJscDMgd2hlcmUgYSA9IDIwOyAgIC8qIGVtcHR5ICovCkBAIC02NzEs NiArNjkzLDE2MyBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdo ZXJlIChhID0gMSBhbmQgYSA9IDMpIG9yIChhID4gMSBhbmQgYSA9CiAgICAgICAgICBGaWx0 ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAzKSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUpKSkK ICgxMSByb3dzKQogCitTRVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uID0gb247CitleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIG9yIGEgPSA3 OworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBybHAy IHJscAorICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3sxLDd9Jzo6aW50ZWdlcltdKSkKKygyIHJv d3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9 IDEgb3IgYiA9ICdhYic7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcmxw MSBybHBfMQorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2Fi Jzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwMiBybHBfMgorICAgICAgICAgRmls dGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2Vx IFNjYW4gb24gcmxwM2FiY2QgcmxwXzMKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1Ig KChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfMSBy bHBfNAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6 dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8yIHJscF81CisgICAgICAgICBGaWx0 ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBybHA0X2RlZmF1bHQgcmxwXzYKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkg T1IgKChiKTo6dGV4dCA9ICdhYic6OnRleHQpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVf MSBybHBfNworICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2Fi Jzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0IHJscF84CisgICAg ICAgICBGaWx0ZXI6ICgoYSA9IDEpIE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBybHBfZGVmYXVsdF8xMCBybHBfOQorICAgICAgICAgRmlsdGVy OiAoKGEgPSAxKSBPUiAoKGIpOjp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNj YW4gb24gcmxwX2RlZmF1bHRfMzAgcmxwXzEwCisgICAgICAgICBGaWx0ZXI6ICgoYSA9IDEp IE9SICgoYik6OnRleHQgPSAnYWInOjp0ZXh0KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHBf ZGVmYXVsdF9udWxsIHJscF8xMQorICAgICAgICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoKGIp Ojp0ZXh0ID0gJ2FiJzo6dGV4dCkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRf ZGVmYXVsdCBybHBfMTIKKyAgICAgICAgIEZpbHRlcjogKChhID0gMSkgT1IgKChiKTo6dGV4 dCA9ICdhYic6OnRleHQpKQorKDI1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2Vs ZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDIwIGFuZCBhIDwgMjc7CisgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHA0XzEg cmxwXzEKKyAgICAgICAgIEZpbHRlcjogKChhID4gMjApIEFORCAoYSA8IDI3KSkKKyAgIC0+ ICBTZXEgU2NhbiBvbiBybHA0XzIgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhID4gMjAp IEFORCAoYSA8IDI3KSkKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 ICogZnJvbSBybHAgd2hlcmUgYSA9IDI5OworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBybHA0 X2RlZmF1bHQgcmxwCisgICBGaWx0ZXI6IChhID0gMjkpCisoMiByb3dzKQorCitleHBsYWlu IChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPj0gMjk7CisgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNlcSBT Y2FuIG9uIHJscDRfZGVmYXVsdCBybHBfMQorICAgICAgICAgRmlsdGVyOiAoYSA+PSAyOSkK KyAgIC0+ICBTZXEgU2NhbiBvbiBybHA1XzEgcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKGEg Pj0gMjkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0IHJscF8zCisgICAgICAg ICBGaWx0ZXI6IChhID49IDI5KQorICAgLT4gIFNlcSBTY2FuIG9uIHJscF9kZWZhdWx0XzMw IHJscF80CisgICAgICAgICBGaWx0ZXI6IChhID49IDI5KQorICAgLT4gIFNlcSBTY2FuIG9u IHJscF9kZWZhdWx0X2RlZmF1bHQgcmxwXzUKKyAgICAgICAgIEZpbHRlcjogKGEgPj0gMjkp CisoMTEgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3 aGVyZSBhIDwgMSBvciAoYSA+IDIwIGFuZCBhIDwgMjUpOworICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ ICBTZXEgU2NhbiBvbiBybHAxIHJscF8xCisgICAgICAgICBGaWx0ZXI6ICgoKGEgPiAyMCkg QU5EIChhIDwgMjUpKSBPUiAoYSA8IDEpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDRfMSBy bHBfMgorICAgICAgICAgRmlsdGVyOiAoKChhID4gMjApIEFORCAoYSA8IDI1KSkgT1IgKGEg PCAxKSkKKyg1IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBy bHAgd2hlcmUgYSA9IDIwIG9yIGEgPSA0MDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHJs cDRfMSBybHBfMQorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3syMCw0MH0nOjppbnRl Z2VyW10pKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDVfZGVmYXVsdCBybHBfMgorICAgICAg ICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3syMCw0MH0nOjppbnRlZ2VyW10pKQorKDUgcm93cykK KworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscDMgd2hlcmUgYSA9IDIw OyAgIC8qIGVtcHR5ICovCisgICAgICAgIFFVRVJZIFBMQU4gICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE9uZS1UaW1lIEZpbHRlcjogZmFsc2UK KygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hl cmUgYSA+IDEgYW5kIGEgPSAxMDsJLyogb25seSBkZWZhdWx0ICovCisgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfMTAgcmxwCisgICBGaWx0ZXI6ICgoYSA+ IDEpIEFORCAoYSA9IDEwKSkKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2Vs ZWN0ICogZnJvbSBybHAgd2hlcmUgYSA+IDEgYW5kIGEgPj0xNTsJLyogcmxwMyBvbndhcmRz LCBpbmNsdWRpbmcgZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNhYmNkIHJscF8x CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2Vx IFNjYW4gb24gcmxwM2VmZ2ggcmxwXzIKKyAgICAgICAgIEZpbHRlcjogKChhID4gMSkgQU5E IChhID49IDE1KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHAzbnVsbHh5IHJscF8zCisgICAg ICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4g b24gcmxwM19kZWZhdWx0IHJscF80CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAo YSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNF8xIHJscF81CisgICAgICAgICBG aWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxw NF8yIHJscF82CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisg ICAtPiAgU2VxIFNjYW4gb24gcmxwNF9kZWZhdWx0IHJscF83CisgICAgICAgICBGaWx0ZXI6 ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwNV8xIHJs cF84CisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAg U2VxIFNjYW4gb24gcmxwNV9kZWZhdWx0IHJscF85CisgICAgICAgICBGaWx0ZXI6ICgoYSA+ IDEpIEFORCAoYSA+PSAxNSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfMzAg cmxwXzEwCisgICAgICAgICBGaWx0ZXI6ICgoYSA+IDEpIEFORCAoYSA+PSAxNSkpCisgICAt PiAgU2VxIFNjYW4gb24gcmxwX2RlZmF1bHRfZGVmYXVsdCBybHBfMTEKKyAgICAgICAgIEZp bHRlcjogKChhID4gMSkgQU5EIChhID49IDE1KSkKKygyMyByb3dzKQorCitleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIGFuZCBhID0gMzsJLyog ZW1wdHkgKi8KKyAgICAgICAgUVVFUlkgUExBTiAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFJlc3VsdAorICAgT25lLVRpbWUgRmlsdGVyOiBmYWxzZQorKDIgcm93 cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSAoYSA9 IDEgYW5kIGEgPSAzKSBvciAoYSA+IDEgYW5kIGEgPSAxNSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgU2VxIFNjYW4gb24gcmxwMiBybHBfMQor ICAgICAgICAgRmlsdGVyOiAoKChhID0gMSkgQU5EIChhID0gMykpIE9SICgoYSA+IDEpIEFO RCAoYSA9IDE1KSkpCisgICAtPiAgU2VxIFNjYW4gb24gcmxwM2FiY2QgcmxwXzIKKyAgICAg ICAgIEZpbHRlcjogKCgoYSA9IDEpIEFORCAoYSA9IDMpKSBPUiAoKGEgPiAxKSBBTkQgKGEg PSAxNSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIHJscDNlZmdoIHJscF8zCisgICAgICAgICBG aWx0ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAzKSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUp KSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBybHAzbnVsbHh5IHJscF80CisgICAgICAgICBGaWx0 ZXI6ICgoKGEgPSAxKSBBTkQgKGEgPSAzKSkgT1IgKChhID4gMSkgQU5EIChhID0gMTUpKSkK KyAgIC0+ICBTZXEgU2NhbiBvbiBybHAzX2RlZmF1bHQgcmxwXzUKKyAgICAgICAgIEZpbHRl cjogKCgoYSA9IDEpIEFORCAoYSA9IDMpKSBPUiAoKGEgPiAxKSBBTkQgKGEgPSAxNSkpKQor KDExIHJvd3MpCisKK1JFU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbjsKIC0tIG11bHRp LWNvbHVtbiBrZXlzCiBjcmVhdGUgdGFibGUgbWMzcCAoYSBpbnQsIGIgaW50LCBjIGludCkg cGFydGl0aW9uIGJ5IHJhbmdlIChhLCBhYnMoYiksIGMpOwogY3JlYXRlIHRhYmxlIG1jM3Bf ZGVmYXVsdCBwYXJ0aXRpb24gb2YgbWMzcCBkZWZhdWx0OwpAQCAtMTkzMywxMCArMjExMiwx MCBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gaHAgd2hlcmUgYSA9IDEg YW5kIGIgPSAnYWJjZGUnOwogCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20g aHAgd2hlcmUgYSA9IDEgYW5kIGIgPSAnYWJjZGUnIGFuZAogICAoYyA9IDIgb3IgYyA9IDMp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgU2VxIFNjYW4gb24g aHAyIGhwCi0gICBGaWx0ZXI6ICgoYSA9IDEpIEFORCAoYiA9ICdhYmNkZSc6OnRleHQpIEFO RCAoKGMgPSAyKSBPUiAoYyA9IDMpKSkKKyAgIEZpbHRlcjogKChjID0gQU5ZICgnezIsM30n OjppbnRlZ2VyW10pKSBBTkQgKGEgPSAxKSBBTkQgKGIgPSAnYWJjZGUnOjp0ZXh0KSkKICgy IHJvd3MpCiAKIGRyb3AgdGFibGUgaHAyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ydWxlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVz Lm91dAppbmRleCBhYmM5NDRlOGI4Mi4uM2VjNjE0YzQzNzYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0yNTAwLDcgKzI1MDAsNyBAQCBwZ19zdGF0c3wgU0VM RUNUIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLAogICAgICBKT0lOIHBnX2NsYXNzIGMgT04g KChjLm9pZCA9IHMuc3RhcmVsaWQpKSkKICAgICAgSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiAo KChjLm9pZCA9IGEuYXR0cmVsaWQpIEFORCAoYS5hdHRudW0gPSBzLnN0YWF0dG51bSkpKSkK ICAgICAgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OICgobi5vaWQgPSBjLnJlbG5hbWVz cGFjZSkpKQotICBXSEVSRSAoKE5PVCBhLmF0dGlzZHJvcHBlZCkgQU5EIGhhc19jb2x1bW5f cHJpdmlsZWdlKGMub2lkLCBhLmF0dG51bSwgJ3NlbGVjdCc6OnRleHQpIEFORCAoKGMucmVs cm93c2VjdXJpdHkgPSBmYWxzZSkgT1IgKE5PVCByb3dfc2VjdXJpdHlfYWN0aXZlKGMub2lk KSkpKTsKKyAgV0hFUkUgKChOT1QgYS5hdHRpc2Ryb3BwZWQpIEFORCBoYXNfY29sdW1uX3By aXZpbGVnZShjLm9pZCwgYS5hdHRudW0sICdzZWxlY3QnOjp0ZXh0KSBBTkQgKChOT1Qgcm93 X3NlY3VyaXR5X2FjdGl2ZShjLm9pZCkpIE9SIChjLnJlbHJvd3NlY3VyaXR5ID0gZmFsc2Up KSk7CiBwZ19zdGF0c19leHR8IFNFTEVDVCBjbi5uc3BuYW1lIEFTIHNjaGVtYW5hbWUsCiAg ICAgYy5yZWxuYW1lIEFTIHRhYmxlbmFtZSwKICAgICBzbi5uc3BuYW1lIEFTIHN0YXRpc3Rp Y3Nfc2NoZW1hbmFtZSwKQEAgLTI1MzEsNyArMjUzMSw3IEBAIHBnX3N0YXRzX2V4dHwgU0VM RUNUIGNuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKICAgV0hFUkUgKChOT1QgKEVYSVNUUyAo IFNFTEVDVCAxCiAgICAgICAgICAgIEZST00gKHVubmVzdChzLnN0eGtleXMpIGsoaykKICAg ICAgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OICgoKGEuYXR0cmVsaWQgPSBzLnN0 eHJlbGlkKSBBTkQgKGEuYXR0bnVtID0gay5rKSkpKQotICAgICAgICAgIFdIRVJFIChOT1Qg aGFzX2NvbHVtbl9wcml2aWxlZ2UoYy5vaWQsIGEuYXR0bnVtLCAnc2VsZWN0Jzo6dGV4dCkp KSkpIEFORCAoKGMucmVscm93c2VjdXJpdHkgPSBmYWxzZSkgT1IgKE5PVCByb3dfc2VjdXJp dHlfYWN0aXZlKGMub2lkKSkpKTsKKyAgICAgICAgICBXSEVSRSAoTk9UIGhhc19jb2x1bW5f cHJpdmlsZWdlKGMub2lkLCBhLmF0dG51bSwgJ3NlbGVjdCc6OnRleHQpKSkpKSBBTkQgKChO T1Qgcm93X3NlY3VyaXR5X2FjdGl2ZShjLm9pZCkpIE9SIChjLnJlbHJvd3NlY3VyaXR5ID0g ZmFsc2UpKSk7CiBwZ19zdGF0c19leHRfZXhwcnN8IFNFTEVDVCBjbi5uc3BuYW1lIEFTIHNj aGVtYW5hbWUsCiAgICAgYy5yZWxuYW1lIEFTIHRhYmxlbmFtZSwKICAgICBzbi5uc3BuYW1l IEFTIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c3RhdHNfZXh0Lm91dAppbmRleCAxMDkwM2JkYWIwOS4uNmY1NWI5ZTNlYzEgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKQEAgLTEzMjIsMTkgKzEzMjIs MTkgQEAgU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJP TSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRQogU0VMRUNUICogRlJPTSBjaGVja19l c3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBX SEVSRSAoYSA9IDEgT1IgYSA9IDUxKSBBTkQgYiA9ICcnMScnJyk7CiAgZXN0aW1hdGVkIHwg YWN0dWFsIAogLS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAgICAgICAgOTkgfCAgICAxMDAKKyAg ICAgICAxMDAgfCAgICAxMDAKICgxIHJvdykKIAogU0VMRUNUICogRlJPTSBjaGVja19lc3Rp bWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVS RSAoYSA9IDEgT1IgYSA9IDUxKSBBTkQgKGIgPSAnJzEnJyBPUiBiID0gJycyJycpJyk7CiAg ZXN0aW1hdGVkIHwgYWN0dWFsIAogLS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAgICAgICAgOTkg fCAgICAxMDAKKyAgICAgICAxMDAgfCAgICAxMDAKICgxIHJvdykKIAogU0VMRUNUICogRlJP TSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyBXSEVSRSAoYSA9IDEgT1IgYSA9IDIgT1IgYSA9IDUxIE9SIGEgPSA1MikgQU5E IChiID0gJycxJycgT1IgYiA9ICcnMicnKScpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAKIC0t LS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgMTk3IHwgICAgMjAwCisgICAgICAgMjAwIHwg ICAgMjAwCiAoMSByb3cpCiAKIC0tIE9SIGNsYXVzZXMgcmVmZXJlbmNpbmcgZGlmZmVyZW50 IGF0dHJpYnV0ZXMgYXJlIGluY29tcGF0aWJsZQpAQCAtMTY2NCwxOSArMTY2NCwxOSBAQCBT RUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzIFdIRVJFCiBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRl ZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIFdIRVJFICgo YSAqIDIpID0gMiBPUiAoYSAqIDIpID0gMTAyKSBBTkQgdXBwZXIoYikgPSAnJzEnJycpOwog IGVzdGltYXRlZCB8IGFjdHVhbCAKIC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5 IHwgICAgMTAwCisgICAgICAgMTAwIHwgICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZS T00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMgV0hFUkUgKChhICogMikgPSAyIE9SIChhICogMikgPSAxMDIpIEFORCAodXBw ZXIoYikgPSAnJzEnJyBPUiB1cHBlcihiKSA9ICcnMicnKScpOwogIGVzdGltYXRlZCB8IGFj dHVhbCAKIC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisgICAg ICAgMTAwIHwgICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1h dGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUg KChhICogMikgPSAyIE9SIChhICogMikgPSA0IE9SIChhICogMikgPSAxMDIgT1IgKGEgKiAy KSA9IDEwNCkgQU5EICh1cHBlcihiKSA9ICcnMScnIE9SIHVwcGVyKGIpID0gJycyJycpJyk7 CiAgZXN0aW1hdGVkIHwgYWN0dWFsIAogLS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAgICAgICAx OTcgfCAgICAyMDAKKyAgICAgICAyMDAgfCAgICAyMDAKICgxIHJvdykKIAogLS0gT1IgY2xh dXNlcyByZWZlcmVuY2luZyBkaWZmZXJlbnQgYXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCA5YmU3YWNhMmI4YS4uMWY5MDI5YjViMmEg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xMjQsNiAr MTI0LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBu YW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8 IG9uCiAgZW5hYmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbmVz dGxvb3AgICAgICAgICAgICAgICAgfCBvbgorIGVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbiAg ICAgICB8IG9uCiAgZW5hYmxlX3BhcmFsbGVsX2FwcGVuZCAgICAgICAgIHwgb24KICBlbmFi bGVfcGFyYWxsZWxfaGFzaCAgICAgICAgICAgfCBvbgogIGVuYWJsZV9wYXJ0aXRpb25fcHJ1 bmluZyAgICAgICB8IG9uCkBAIC0xMzQsNyArMTM1LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRp bmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJs ZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQgICAgICAgICAg ICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBvbgot KDIzIHJvd3MpCisoMjQgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50 IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4KIHNlbGVjdCB0eXBlLCBjb3VudCgq KSA+IDAgYXMgb2sgRlJPTSBwZ193YWl0X2V2ZW50cwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC90aWRzY2FuLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdGlkc2Nhbi5vdXQKaW5kZXggZjEzM2I1YTRhYzcuLjJhMDc5ZTk5NmIyIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlkc2Nhbi5vdXQKQEAgLTQzLDEwICs0MywyNiBAQCBT RUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hFUkUgJygwLDEpJyA9IGN0aWQ7CiAtLSBP UidkIGNsYXVzZXMKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBjdGlkLCAqIEZST00g dGlkc2NhbiBXSEVSRSBjdGlkID0gJygwLDIpJyBPUiAnKDAsMSknID0gY3RpZDsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHRpZHNjYW4KKyAgIFRJRCBDb25k OiAoY3RpZCA9IEFOWSAoJ3siKDAsMikiLCIoMCwxKSJ9Jzo6dGlkW10pKQorKDIgcm93cykK KworU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAsMiknIE9S ICcoMCwxKScgPSBjdGlkOworIGN0aWQgIHwgaWQgCistLS0tLS0tKy0tLS0KKyAoMCwxKSB8 ICAxCisgKDAsMikgfCAgMgorKDIgcm93cykKKworU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1h dGlvbiA9IG9uOworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGN0aWQsICogRlJPTSB0 aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBjdGlkOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog IFRpZCBTY2FuIG9uIHRpZHNjYW4KLSAgIFRJRCBDb25kOiAoKGN0aWQgPSAnKDAsMiknOjp0 aWQpIE9SICgnKDAsMSknOjp0aWQgPSBjdGlkKSkKKyAgIFRJRCBDb25kOiAoY3RpZCA9IEFO WSAoJ3siKDAsMikiLCIoMCwxKSJ9Jzo6dGlkW10pKQogKDIgcm93cykKIAogU0VMRUNUIGN0 aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScgPSBj dGlkOwpAQCAtNTYsNiArNzIsNyBAQCBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hF UkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7CiAgKDAsMikgfCAgMgogKDIg cm93cykKIAorUkVTRVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uOwogLS0gY3RpZCA9IFNj YWxhckFycmF5T3AgLSBpbXBsZW1lbnRlZCBhcyB0aWRzY2FuCiBFWFBMQUlOIChDT1NUUyBP RkYpCiBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNjYW4gV0hFUkUgY3RpZCA9IEFOWShBUlJB WVsnKDAsMSknLCAnKDAsMiknXTo6dGlkW10pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0 ZV9pbmRleC5zcWwKaW5kZXggZDQ5Y2U5ZjMwMDcuLjU2ZmRlMTViYzE1IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKQEAgLTczNyw2ICs3MzcsNDEgQEAgU0VM RUNUIGNvdW50KCopIEZST00gdGVuazEKIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiAg IFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5 OSk7CiAKK1NFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb24gPSBvbjsKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQgPSA0MiBB TkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMgPSA0Mik7CitT RUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91 cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0gNDIpOworCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVk ID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworU0VMRUNUIGNv dW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQg PSA0MiBPUiB0aG91c2FuZCA9IDk5KTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBj b3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5k IDwgNDIgT1IgdGhvdXNhbmQgPCA5OSBPUiA0MyA+IHRob3VzYW5kIE9SIDQyID4gdGhvdXNh bmQpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5r MQorICBXSEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3Vz ID0gMykgT1IgdGhvdXNhbmQgPSA0MTsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisg IFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAz KSBPUiB0aG91c2FuZCA9IDQxOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291 bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9 IDQyIE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2FuZCA9IDQx OworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFO RCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9IDk5IE9SIHRlbnRob3VzIDwgMikgT1Ig dGhvdXNhbmQgPSA0MTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCop IEZST00gdGVuazEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBP UiB0aG91c2FuZCA9IDQxIE9SIHRob3VzYW5kID0gOTkgQU5EIHRlbnRob3VzID0gMik7CitT RUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0 aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gNDEgT1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVu dGhvdXMgPSAyKTsKK1JFU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbjsKKwogLS0KIC0t IENoZWNrIGJlaGF2aW9yIHdpdGggZHVwbGljYXRlIGluZGV4IGNvbHVtbiBjb250ZW50cwog LS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvam9pbi5zcWwKaW5kZXggZTFkYjIwMjVkYjYuLjM1M2RlZWNlZjAz IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbApAQCAtMTQwOCw2ICsxNDA4LDE2IEBAIGV4cGxh aW4gKGNvc3RzIG9mZikKIHNlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24K ICAgKGEudW5pcXVlMSA9IDEgYW5kIGIudW5pcXVlMSA9IDIpIG9yCiAgICgoYS51bmlxdWUy ID0gMyBvciBhLnVuaXF1ZTIgPSA3KSBhbmQgYi5odW5kcmVkID0gNCk7CitTRVQgZW5hYmxl X29yX3RyYW5zZm9ybWF0aW9uID0gb247CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tIHRlbmsxIGEgam9pbiB0ZW5rMSBiIG9uCisgIChhLnVuaXF1ZTEgPSAxIGFuZCBi LnVuaXF1ZTEgPSAyKSBvcgorICAoKGEudW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykg YW5kIGIuaHVuZHJlZCA9IDQpOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJv bSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgorICAoYS51bmlxdWUxIDwgMjAgb3IgYS51bmlx dWUxID0gMyBvciBhLnVuaXF1ZTEgPSAxIGFuZCBiLnVuaXF1ZTEgPSAyKSBvcgorICAoKGEu dW5pcXVlMiA9IDMgb3IgYS51bmlxdWUyID0gNykgYW5kIGIuaHVuZHJlZCA9IDQpOworUkVT RVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uOwogCiAtLQogLS0gdGVzdCBwbGFjZW1lbnQg b2YgbW92YWJsZSBxdWFscyBpbiBhIHBhcmFtZXRlcml6ZWQgam9pbiB0cmVlCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbAppbmRleCA3YmYzOTIwODI3Zi4u MWUyNzBhZTljMDYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlv bl9wcnVuZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5l LnNxbApAQCAtMjEsNiArMjEsMTIgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBm cm9tIGxwIHdoZXJlIGEgaXMgbm90IG51bGw7CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAqIGZyb20gbHAgd2hlcmUgYSBpcyBudWxsOwogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxl Y3QgKiBmcm9tIGxwIHdoZXJlIGEgPSAnYScgb3IgYSA9ICdjJzsKIGV4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG5vdCBudWxsIGFuZCAoYSA9ICdh JyBvciBhID0gJ2MnKTsKKworU0VUIGVuYWJsZV9vcl90cmFuc2Zvcm1hdGlvbiA9IG9uOwor ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgPSAnYScgb3Ig YSA9ICdjJzsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBh IGlzIG5vdCBudWxsIGFuZCAoYSA9ICdhJyBvciBhID0gJ2MnKTsKK1JFU0VUIGVuYWJsZV9v cl90cmFuc2Zvcm1hdGlvbjsKKwogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9t IGxwIHdoZXJlIGEgPD4gJ2cnOwogZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9t IGxwIHdoZXJlIGEgPD4gJ2EnIGFuZCBhIDw+ICdkJzsKIGV4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIG5vdCBpbiAoJ2EnLCAnZCcpOwpAQCAtOTksNiAr MTA1LDIyIEBAIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUg YSA+IDEgYW5kIGEgPj0xNTsJLyogcmxwMyBvbndhcmRzLCBpCiBleHBsYWluIChjb3N0cyBv ZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIGFuZCBhID0gMzsJLyogZW1wdHkg Ki8KIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgKGEgPSAx IGFuZCBhID0gMykgb3IgKGEgPiAxIGFuZCBhID0gMTUpOwogCisKK1NFVCBlbmFibGVfb3Jf dHJhbnNmb3JtYXRpb24gPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJv bSBybHAgd2hlcmUgYSA9IDEgb3IgYSA9IDc7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAqIGZyb20gcmxwIHdoZXJlIGEgPSAxIG9yIGIgPSAnYWInOworZXhwbGFpbiAoY29zdHMg b2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID4gMjAgYW5kIGEgPCAyNzsKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDI5OworZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID49IDI5OworZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhIDwgMSBvciAoYSA+IDIw IGFuZCBhIDwgMjUpOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3 aGVyZSBhID0gMjAgb3IgYSA9IDQwOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBm cm9tIHJscDMgd2hlcmUgYSA9IDIwOyAgIC8qIGVtcHR5ICovCitleHBsYWluIChjb3N0cyBv ZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPiAxIGFuZCBhID0gMTA7CS8qIG9ubHkg ZGVmYXVsdCAqLworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVy ZSBhID4gMSBhbmQgYSA+PTE1OwkvKiBybHAzIG9ud2FyZHMsIGluY2x1ZGluZyBkZWZhdWx0 ICovCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPSAx IGFuZCBhID0gMzsJLyogZW1wdHkgKi8KK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBybHAgd2hlcmUgKGEgPSAxIGFuZCBhID0gMykgb3IgKGEgPiAxIGFuZCBhID0gMTUp OworUkVTRVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9uOworCiAtLSBtdWx0aS1jb2x1bW4g a2V5cwogY3JlYXRlIHRhYmxlIG1jM3AgKGEgaW50LCBiIGludCwgYyBpbnQpIHBhcnRpdGlv biBieSByYW5nZSAoYSwgYWJzKGIpLCBjKTsKIGNyZWF0ZSB0YWJsZSBtYzNwX2RlZmF1bHQg cGFydGl0aW9uIG9mIG1jM3AgZGVmYXVsdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3RpZHNjYW4uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdGlkc2Nhbi5zcWwK aW5kZXggMzEzZTBmYjliNjcuLjA0OTliZWRiOWViIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC90aWRzY2FuLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90aWRz Y2FuLnNxbApAQCAtMjIsNiArMjIsMTIgQEAgRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNU IGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAsMiknIE9SICcoMCwxKScg PSBjdGlkOwogU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSAnKDAs MiknIE9SICcoMCwxKScgPSBjdGlkOwogCitTRVQgZW5hYmxlX29yX3RyYW5zZm9ybWF0aW9u ID0gb247CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY3RpZCwgKiBGUk9NIHRpZHNj YW4gV0hFUkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7CitTRUxFQ1QgY3Rp ZCwgKiBGUk9NIHRpZHNjYW4gV0hFUkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0 aWQ7CitSRVNFVCBlbmFibGVfb3JfdHJhbnNmb3JtYXRpb247CisKIC0tIGN0aWQgPSBTY2Fs YXJBcnJheU9wIC0gaW1wbGVtZW50ZWQgYXMgdGlkc2NhbgogRVhQTEFJTiAoQ09TVFMgT0ZG KQogU0VMRUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFIGN0aWQgPSBBTlkoQVJSQVlb JygwLDEpJywgJygwLDIpJ106OnRpZFtdKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK aW5kZXggOTE0MzNkNDM5YjcuLmFkYWU2NjhiMzcwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdApAQCAtMTY1NCw2ICsxNjU0LDggQEAgTnVtZXJpY1ZhcgogT01fdWludDMyCiBP UAogT1NBUGVyR3JvdXBTdGF0ZQorT3JDbGF1c2VHcm91cEVudHJ5CitPckNsYXVzZUdyb3Vw S2V5CiBPU0FQZXJRdWVyeVN0YXRlCiBPU0luZm8KIE9TU0xDaXBoZXIKLS0gCjIuMzQuMQoK --------------JLGFPDPHRmHq2eYSluHNmLB4--