Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wBJid-000wH4-2a for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 21:48:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wBJia-00Ed9a-0t for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 21:48:49 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wBJiZ-00Ed9S-2c for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 21:48:48 +0000 Received: from mail-yw1-x1133.google.com ([2607:f8b0:4864:20::1133]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wBJiY-00000000QIH-1fZE for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 21:48:48 +0000 Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-79a7109f568so30315977b3.1 for ; Fri, 10 Apr 2026 14:48:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775857724; cv=none; d=google.com; s=arc-20240605; b=iQ2K/8EawXjX/Yn65WqMJwXOOul+vzZsfQwnvTgvITz2I0IlF+npzwtgti8vORPJdn /+WtkWYRG1W4L8W9v4Fxe2WOJD7/OBDVw3OTnJ/D08rWfFFI6vfRustmRjRwFA+BNOhi 1UnsB17QcxrXpVqTgauK80mJ5Ns14LDZ9cutCh3VQecd61UaoFUpORUTq/lfRsuKESr9 Z47PulqHIdfojzynuOnLqDJSGG1pRvrzCZ+tJHG5WoJMvOE1Fa26ItyrjOYbaPUbdUzn CdVOZummzW7SoBIUlFKvlKzdajs9mP26r+v94tWziNzlB6AMyWt9QbR5kKIn/CBvA+zt kx1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=kuZd9kbY6zCaiONxFEVR1Zvl9reH+7HCgptwBQNES9E=; fh=fzyWA6mwg8dSSfdITANt1kWFJaSgrPfDLna+nuja5v0=; b=U/9RJ9DCVD+zW6ymwTEXdDaveibh5CUL9KUIJGjJE41pYqAaqHuHazv0H9yYjwELiZ P19CLUfC0qHtnEy7Why1+F3RP2QCDzC6o9KjaMxOSdh1BXRdHDyHX+/RZKd+ASBReTlE gM2cBrYHywsAIGPg6Wr8w7dnQgOgmbZ5pT0B6UsNazwyVSFBIPc3tXeGpqS9x3gv0mZz mj5RTkcU3lz7dTvr5Wp3LWjRcRjlJ6ZiBvz97735jOUf9E+3nFZeIswUkATodjFwFAlt saIOsftuF9TRSxe3KUkalNSPxADVJIN6voeZDCeAtamNmTmPxW6FKIzi26cG6unWO0yh /waA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775857724; x=1776462524; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=kuZd9kbY6zCaiONxFEVR1Zvl9reH+7HCgptwBQNES9E=; b=pEUH8CkzwY5OW4ifbXxoLsAXIXqFTQYliqV4N5gwqRd/LEqxS/DV9bi1uBcNo8ZpLF FjNIQwDZGONljhXMQWRhGDUIgMPxiqR5u1VOpWEIHYyYT4RvXNkquazfSczERbyNlCoJ UwhHhxyyCCFtz0RUa1sjszAjoUdzV6wejXH4BQuHGwc7SvIvUjIxpupeEVFOaBL0rTWZ M+vPg+WPBU/du/cCfACE4yzlC3jQSpWVVtUZ3w3PWiMgnw7OS6JlH93P81fQt+kwYoMu k79TFGNMnox4zGScsTGiK00xgMId0VrpbIl1G3MLEIwTKDW9NxdWu5Qda742VSfd2LZ+ plVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775857724; x=1776462524; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=kuZd9kbY6zCaiONxFEVR1Zvl9reH+7HCgptwBQNES9E=; b=QFBc2YR95B5/PkmFl4JPr0RuWi9z6upYlIE1zByTMUvC7BRtGcvtRbj3ovhd/Oc2my sZBe/JmlifTvzj5ANo/eFm9ojdlo40Tvmb7Obnzm1an8Kifpi+ltYuRt5XTymt17HbRC 6R7v6GzcQ5V9oExAF1M9jTa1AY4naC4DK5Bmxf5EvnsoWesBDJeXJfInwVNRA9fIPWfX v5hcIK6NR7sh+BNYc0R7Y4JemLq+ftpMZTxn3dAqSUpY6wYqzMy3mwG6LtlED08PmFmc GThReLJCowe7nxk/oK6eBI9Z7HOwZu8Bc3GfPlUT1XSYI+MXqzz/kgldGZlzJ4+WQM2H yydw== X-Forwarded-Encrypted: i=1; AJvYcCUolJ1LBRjs6czZd0QMPoKev8oC3d1f+9OHRDZXCkwYTJm0SYyMJChAc1Z7Y2rTHUS5cPEo+xwo4YzkkyzK@lists.postgresql.org X-Gm-Message-State: AOJu0YzMAxZlzJ8/4ELouZKuH2AHb4BfIJupCThANP+BRQytLAIQxs8H 3nbUuim660SbJ/afv6zbNogMPSvhksfEqvV/2VVuk88o1A/GwRMpDEPPfz9nj4KbSXJlY3c/Z7j bJ6o4rDVdtKpLqOCmitTI5Hf1FhruzRw= X-Gm-Gg: AeBDievgVjyJhPHppGDv8sHopDkahUYjK8xuW5t0f49LAVPH3EpNDE+8Yxj4vVfmSD8 8+zAtqMGh8D6BEx19sh8oZ/CKCjsvTg8zW/Hy8tDSTiRvCwihdQCCH4wxT6jsoN6+pYvi5Y3INR nzOX5qwQosNzleSn4eQFL4x7fYz/XAQ7n3WJhafVBnWHSAOaVuFOAXEC3fKprLwTaOQZacsN7wd Vfvga3og+49hRpvxhpCr6gvck81XZJ5WP5rI/Ej71duiPg6pESvvLnIRDO/bR+r6h2Dx14UOuJC gpWJVE8YKWobING4YHUcPVgMKRWO1BSWTcWUKT1uiJhjzyu/DF8= X-Received: by 2002:a05:690c:c507:b0:7a2:7b00:67f6 with SMTP id 00721157ae682-7af6f22b954mr48891467b3.9.1775857723825; Fri, 10 Apr 2026 14:48:43 -0700 (PDT) MIME-Version: 1.0 References: <87r0hmvuvr.fsf@163.com> <8102ff5b-b156-409e-a48f-e53e63a39b36@eisentraut.org> <8734t6c5rh.fsf@163.com> <87o7bn7z56.fsf@163.com> <875xx197bp.fsf@163.com> <87ttk0lgcx.fsf@163.com> <8734m5fua1.fsf@163.com> <87a5dx4cfb.fsf@163.com> <7487A577-7BDC-4B94-9FFA-741E95439BFC@gmail.com> <873417fgc0.fsf@163.com> <87eckqz5i9.fsf@163.com> In-Reply-To: From: Haibo Yan Date: Fri, 10 Apr 2026 14:48:32 -0700 X-Gm-Features: AQROBzAqVLck6v46yoLjOptQ2qf0gXR67YSOpixyPiV4TFT1-3lhLFArrRpEcPk Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: Andy Fan Cc: Dmitry Dolgov <9erthalion6@gmail.com>, David Rowley , Peter Eisentraut , Amit Langote , Alvaro Herrera , jian he , Chapman Flack , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000cd13e2064f22187d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cd13e2064f22187d Content-Type: multipart/alternative; boundary="000000000000cd13e1064f22187b" --000000000000cd13e1064f22187b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 8, 2026 at 12:50=E2=80=AFPM Haibo Yan w= rote: > On Tue, Apr 7, 2026 at 6:21=E2=80=AFPM Haibo Yan = wrote: > >> On Tue, Apr 7, 2026 at 5:00=E2=80=AFPM Andy Fan = wrote: >> >>> Haibo Yan writes: >>> >>> Hi Haibo, >>> >>> > I agree that if this approach is extended to the full matrix naively, >>> > duplication will become a real issue. >>> >>> Could you summary how it would be? I think it would be helpful for >>> others to review. Otherwise every reviewer needs to count them many >>> times. >>> >>> -- >>> Best Regards >>> Andy Fan >>> >> Hi Andy, >> Sure. >> >> My current thought is to extend it in stages, rather than trying to solv= e >> the full matrix in a single patch. >> >> A rough plan would be: >> >> 1. Keep the current stage-1 patch small and validate the basic approach >> first >> >> >> - >> >> jsonb_object_field / -> / equivalent subscripting form >> - >> >> casts to numeric and bool >> - >> >> support-function rewrite directly to explicit typed extractor >> functions >> >> 2. Extend target types before extending extractor families >> >> >> - >> >> add int4 / int8 / float8 for the same object-field family first >> - >> >> keep the SQL-visible rewrite targets explicit, e.g. >> >> - >> >> jsonb_object_field_int4 >> - >> >> jsonb_object_field_int8 >> - >> >> jsonb_object_field_float8 >> >> - >> >> avoid the previous numeric-intermediate rewrite shape >> >> 3. Then extend to other extractor families with the same overall pattern >> >> >> - >> >> likely starting with jsonb_array_element and jsonb_extract_path >> - >> >> and possibly jsonb_path_query_first later >> - >> >> each family would still rewrite to explicit typed extractor entry >> points, e.g. >> >> - >> >> jsonb_array_element_numeric >> - >> >> jsonb_extract_path_bool >> - >> >> jsonb_path_query_first_int4 >> >> >> 4. Keep duplication manageable by sharing the implementation underneath >> >> >> - >> >> keep the SQL/catalog-level rewrite targets explicit for readability >> and reviewability >> - >> >> but factor the C implementation into: >> >> - >> >> extractor-family lookup helpers >> - >> >> target-type conversion helpers >> - >> >> thin wrappers, possibly generated with small macros >> >> So the idea would be: explicit rewrite targets at the SQL/catalog level, >> but shared lookup/conversion code underneath, instead of going back to t= he >> earlier start/finish/internal pipeline. >> >> I agree that if this is extended naively across the full matrix, >> duplication will become a real issue. My reason for keeping the current >> patch narrow is that I wanted to first validate this simpler rewrite sha= pe >> on a small subset before deciding how best to scale it further. >> >> Regards, >> >> Haibo >> >> Hi all, > > Following up on our previous discussion, I want to clarify the current > patch plan together with the updated first patch. > > Earlier I described this work roughly as a 4-patch line. After iterating > on the implementation and trying to keep each step reviewable, I now thin= k > the cleaner split is a 5-patch series: > > > 1. > > object-field casts to scalar types > 2. > > array-element casts to scalar types > 3. > > extract-path casts to scalar types > 4. > > multi-subscript casts via extract-path lowering > 5. > > jsonpath-first casts to scalar types (jsonb_path_query_first and _tz) > > The overall design is unchanged: use the cast function=E2=80=99s support = hook to > recognize cast(extract(...)) over scalar-returning jsonb extraction > functions, and rewrite that directly to explicit typed extractor calls. > > Supported target types remain: > > > - numeric > - bool > - int4 > - int8 > - float8 > > One point I also want to make explicit is that I do not plan to include > jsonb_path_query in this series. > > After looking at it more carefully, I do not think it fits the same model > as the rest of the series. The patches here are all about scalar-returnin= g > extraction functions, where the cast prosupport hook can see and rewrite = a > scalar expression pair. jsonb_path_query is set-returning, so optimizing > casts over it would likely need a different mechanism, probably at planne= r > or executor level, rather than one more patch in this prosupport-based > series. > > Attached here is the updated first patch in the current plan. > > This patch covers object-field extraction only: > > > - jsonb_object_field > - -> with text key > - key subscripting > > and rewrites casts to: > > > - numeric > - bool > - int4 > - int8 > - float8 > > to direct typed extractor calls. > > Thanks again for the earlier comments. I plan to send the remaining > patches in follow-up emails in the order above. > > Regards, > Haibo > Hi all, Following up on the earlier thread, I am continuing with the same overall plan and sending the next two patches in the series together. The design is still the same as before: use the cast function=E2=80=99s sup= port hook to recognize cast(extract(...)) over scalar-returning jsonb extraction functions, and rewrite that directly to explicit typed extractor calls, without changing normal SQL syntax. At this point, I have also folded int2 and float4 into the per-family patches, so each patch now carries the full target-type coverage for the functionality it introduces. The supported target types are now: numeric - bool - int2 - int4 - int8 - float4 - float8 I am still keeping jsonb_path_query out of scope for this series. The series is focused on scalar-returning extraction functions, where the cast prosupport hook can see and rewrite a scalar expression pair. jsonb_path_query is set-returning, so optimizing casts over it looks like a different planner/executor problem rather than one more patch in this prosupport-based line. With that in mind, the current 5-patch plan is: 1. object-field casts to scalar types 2. array-element casts to scalar types 3. extract-path casts to scalar types 4. multi-subscript casts via extract-path lowering 5. jsonpath-first casts to scalar types (jsonb_path_query_first and _tz) In this email I am sending the first two patches: - patch 1: object-field casts to scalar types - patch 2: array-element casts to scalar types Patch 1 covers: - jsonb_object_field - -> with text key - key subscripting Patch 2 covers: - jsonb_array_element - -> with integer RHS - single-index array subscripting Both patches now support the full target-type set listed above. Thanks again for the earlier comments. I plan to continue with the remaining patches in follow-up emails in the same order. Regards, Haibo --000000000000cd13e1064f22187b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Wed, Apr 8, 2026 at 12:50=E2=80=AFPM H= aibo Yan <tristan.yim@gmail.com= > wrote:
On Tue, Apr 7, 2026 at 6:21=E2=80=AFPM Haibo Yan <tristan.yim@gmail.com> wrot= e:
On Tue, Apr 7, 2026 at 5:00=E2= =80=AFPM Andy Fan <zhihuifan1213@163.com> wrote:
=
Haibo Yan <tristan.yim@gmail.com&g= t; writes:

Hi Haibo,

> I agree that if this approach is extended to the full matrix naively,<= br> > duplication will become a real issue.

Could you summary how it would be? I think it would be helpful for
others to review.=C2=A0 Otherwise every reviewer needs to count them many times.

--
Best Regards
Andy Fan
Hi Andy,
Sure.

My current thought is to extend it in stages, rather than trying to solv= e the full matrix in a single patch.

A rough plan would be:

1. Keep the current stage-1 patch small and validate th= e basic approach first

  • jsonb_object_field / -> / equivalent subscr= ipting form

  • casts to numeric and bool

  • support-function rewrite directly to explicit typed extractor functions<= /p>

2. Extend target types before extending extractor families

<= span>

  • add int4 / int8 / float8 for the = same object-field family first

  • keep the SQL-visible rewrite targets explicit, e.g.

    • jsonb_object_field_int4

    • jsonb_object_field_int8

    • jsonb_object_field_float8

  • avoid the previous numeric-intermediate rewrite shape

3. Th= en extend to other extractor families with the same overall pattern

  • likely starting with jsonb_array_element and j= sonb_extract_path

  • and possibly jsonb_path_query_first later

  • each family would still rewrite to explicit typed extractor entry points= , e.g.

    • jsonb_array_element_numeric

    • jsonb_extract_path_bool

    • jsonb_path_query_first_int4

4. Keep duplication manageable by sharing the implementati= on underneath

  • keep the SQL/catalog-level rewrite targets explicit for readability and = reviewability

  • but factor the C implementation into:

    • extractor-family lookup helpers

    • target-type conversion helpers

    • thin wrappers, possibly generated with small macros

  • So the idea would be: explicit rewrite targets at the SQL/catalog level,= but shared lookup/conversion code underneath, instead of going back to the= earlier start/finish/internal pipeline.

    I agree that if this is extended naively across the full matrix, duplica= tion will become a real issue. My reason for keeping the current patch narr= ow is that I wanted to first validate this simpler rewrite shape on a small= subset before deciding how best to scale it further.

    Regards,

    Haibo


Hi all,

Following up on our previous discussion, I want to clarify the current p= atch plan together with the updated first patch.

Earlier I described this work roughly as a 4-patch line. After iterating= on the implementation and trying to keep each step reviewable, I now think= the cleaner split is a 5-patch series:

  1. object-field casts to scalar types

  2. array-element casts to scalar types

  3. extract-path casts to scalar types

  4. multi-subscript casts via extract-path lowering

  5. jsonpath-first casts to scalar types (jsonb_path_query_first and _tz)

The overall design is unchanged: use the cast function=E2=80=99s support= hook to recognize cast(extract(...)) over scalar-returning jsonb extraction functions, and rewrite that directly to explici= t typed extractor calls.

Supported target types remain:

  • numeric
  • bool
  • int4
  • int8<= /li>
  • float8

One point I also want to make explicit is that I do not pla= n to include jsonb_path_query in this series.

After looking at it more carefully, I do not think it fits the same mode= l as the rest of the series. The patches here are all about scalar-returnin= g extraction functions, where the cast prosupport hook can see and rewrite = a scalar expression pair. jsonb_path_query is set-returning, s= o optimizing casts over it would likely need a different mechanism, probabl= y at planner or executor level, rather than one more patch in this prosuppo= rt-based series.

Attached here is the updated first patch in the current plan.

This patch covers object-field extraction only:

  • jsonb_object_field
  • -> w= ith text key
  • key subscripting

and rewrites casts to:

  • numeric
  • bool
  • int4
  • int8<= /li>
  • float8

to direct typed extractor calls.

Thanks again for the earlier comments. I plan to send the remaining patc= hes in follow-up emails in the order above.

Regards,

Haibo=C2=A0

Hi all,
Following up on the earlier threa= d, I am continuing with the same overall plan and sending the next two patc= hes in the series together.
The design is still the same as before: use = the cast function=E2=80=99s support hook to recognize cast(extract(...)) ov= er scalar-returning jsonb extraction functions, and rewrite that directly t= o explicit typed extractor calls, without changing normal SQL syntax.
At= this point, I have also folded int2 and float4 into the per-family patches= , so each patch now carries the full target-type coverage for the functiona= lity it introduces.
The supported target types are now:
numeric
  • bool
  • int2
  • int4
  • int8
  • float4
  • fl= oat8
  • I am still keeping jsonb_path_query out of scope for this ser= ies. The series is focused on scalar-returning extraction functions, where = the cast prosupport hook can see and rewrite a scalar expression pair. json= b_path_query is set-returning, so optimizing casts over it looks like a dif= ferent planner/executor problem rather than one more patch in this prosuppo= rt-based line.

    With that in mind, the current 5-patch plan is:
  • object-field casts to scalar types
  • array-element casts to sca= lar types
  • extract-path casts to scalar types
  • multi-subscrip= t casts via extract-path lowering
  • jsonpath-first casts to scalar ty= pes (jsonb_path_query_first and _tz)
  • In this email I am sending th= e first two patches:
    • patch 1: object-field casts to scalar types=
    • patch 2: array-element casts to scalar types
    Patch 1 cove= rs:
    • jsonb_object_field
    • -> with text key
    • key s= ubscripting
    Patch 2 covers:
    • jsonb_array_element
    • -> with integer RHS
    • single-index array subscripting
    Bo= th patches now support the full target-type set listed above.
    Thanks aga= in for the earlier comments. I plan to continue with the remaining patches = in follow-up emails in the same order.

    Regards,
    Haibo

    --000000000000cd13e1064f22187b-- --000000000000cd13e2064f22187d Content-Type: application/octet-stream; name="v5-0001-jsonb-optimize-object-field-casts-to-scalar-types.patch" Content-Disposition: attachment; filename="v5-0001-jsonb-optimize-object-field-casts-to-scalar-types.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mntftr0c0 RnJvbSAyNzM1ZTlkYTliMDdkZDE0YjBjOTg0Yjk4YzMxN2MzMGUwYmZmOGJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFRodSwgMiBBcHIgMjAyNiAyMToyMjo1NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjUgMS81XSBq c29uYjogb3B0aW1pemUgb2JqZWN0LWZpZWxkIGNhc3RzIHRvIHNjYWxhciB0eXBlcwoKRXh0ZW5k IHRoZSBleGlzdGluZyBzdXBwb3J0LWZ1bmN0aW9uIHJld3JpdGUgZm9yIGpzb25iIG9iamVjdC1m aWVsZApleHRyYWN0aW9uLCBpbmNsdWRpbmcganNvbmJfb2JqZWN0X2ZpZWxkKCksIC0+LCBhbmQg a2V5IHN1YnNjcmlwdGluZy4KClRoaXMga2VlcHMgb3JkaW5hcnkgU1FMIHN5bnRheCB1bmNoYW5n ZWQgYW5kIHJld3JpdGVzIHN1cHBvcnRlZCBjYXN0cwpkaXJlY3RseSB0byBleHBsaWNpdCB0eXBl ZCBleHRyYWN0b3IgZnVuY3Rpb25zIGZvciBudW1lcmljLCBib29sLAppbnQyLCBpbnQ0LCBpbnQ4 LCBmbG9hdDQsIGFuZCBmbG9hdDguCgpDby1hdXRob3JlZC1ieTogQW5keSBGYW4gPHpoaWh1aWZh bjEyMTNAMTYzLmNvbT4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAgICB8 IDE1NCArKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyAgIHwgMTk1 ICsrKysrKysrKystCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICB8ICA1NSAr KystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dCB8IDQ4NSArKysrKysrKysr KysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwgICAgICB8 IDEyMCArKysrKystCiA1IGZpbGVzIGNoYW5nZWQsIDk5NSBpbnNlcnRpb25zKCspLCAxNCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCmluZGV4IDg2NGM1YWMxYzg1Li5jODVkNDg4MmYy MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKQEAgLTE3LDYgKzE3LDkgQEAKICNpbmNsdWRlICJmdW5j YXBpLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVu Y3MuaCIKKyNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMv anNvbi5oIgpAQCAtMTgxNiw2ICsxODE5LDE1NSBAQCBjYW5ub3RDYXN0SnNvbmJWYWx1ZShlbnVt IGpidlR5cGUgdHlwZSwgY29uc3QgY2hhciAqc3FsdHlwZSwgTm9kZSAqZXNjb250ZXh0KQogCXJl dHVybiAoRGF0dW0pIDA7CiB9CiAKKy8qCisgKiBqc29uYl9jYXN0X3N1cHBvcnQoKQorICoKKyAq IFBsYW5uZXIgc3VwcG9ydCBmdW5jdGlvbiBmb3IganNvbmItdG8tc2NhbGFyIGNhc3QgZnVuY3Rp b25zLCBhdHRhY2hlZCB2aWEKKyAqIHByb3N1cHBvcnQgb24gdGhlIGpzb25iX251bWVyaWMsIGpz b25iX2Jvb2wsIGpzb25iX2ludDQsIGpzb25iX2ludDgsIGFuZAorICoganNvbmJfZmxvYXQ4IGNh dGFsb2cgZW50cmllcy4KKyAqCisgKiBXaGVuIHRoZSBzb2xlIGFyZ3VtZW50IHRvIHRoZSBjYXN0 IGlzIGEganNvbmJfb2JqZWN0X2ZpZWxkKCkgY2FsbCAodGhlIC0+CisgKiBvcGVyYXRvciksIHdl IHJlcGxhY2UgdGhlIHR3by1zdGVwIGNhc3QoZXh0cmFjdCguLi4pKSBleHByZXNzaW9uIHdpdGgg YQorICogc2luZ2xlIHR5cGVkIGV4dHJhY3RvciB0aGF0IHJlYWRzIHRoZSBzY2FsYXIgZGlyZWN0 bHkgZnJvbSB0aGUgaW4tbWVtb3J5CisgKiBKc29uYlZhbHVlLCBhdm9pZGluZyBhIHJvdW5kLXRy aXAgdGhyb3VnaCBKc29uYlZhbHVlVG9Kc29uYi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgKGogLT4g J2EnKTo6bnVtZXJpYyBpcyBwYXJzZWQgYXM6CisgKiAgIGpzb25iX251bWVyaWMoanNvbmJfb2Jq ZWN0X2ZpZWxkKGosICdhJykpCisgKiBhbmQgaXMgcmV3cml0dGVuIHRvOgorICogICBqc29uYl9v YmplY3RfZmllbGRfbnVtZXJpYyhqLCAnYScpCisgKi8KK0RhdHVtCitqc29uYl9jYXN0X3N1cHBv cnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlOb2RlCSAgICpyYXdyZXEgPSAoTm9kZSAqKSBQR19H RVRBUkdfUE9JTlRFUigwKTsKKwlOb2RlCSAgICpyZXQgPSBOVUxMOworCisJaWYgKElzQShyYXdy ZXEsIFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkpKQorCXsKKwkJU3VwcG9ydFJlcXVlc3RTaW1wbGlm eSAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkgKikgcmF3cmVxOworCQlGdW5jRXhwciAg ICpmZXhwciA9IHJlcS0+ZmNhbGw7CisJCU5vZGUJICAgKmFyZzsKKwkJT2lkCQkJaW5uZXJfZnVu Y2lkOworCQlMaXN0CSAgICppbm5lcl9hcmdzOworCQlpbnQJCQlsb2NhdGlvbjsKKwkJT2lkCQkJ cmVwbGFjZW1lbnRfZnVuY2lkOworCQlPaWQJCQlyZXBsYWNlbWVudF9yZXR0eXBlOworCQlGdW5j RXhwciAgICpuZXdmZXhwcjsKKworCQkvKiBUaGUgY2FzdCBmdW5jdGlvbiBtdXN0IGhhdmUgZXhh Y3RseSBvbmUgYXJndW1lbnQgKi8KKwkJaWYgKGxpc3RfbGVuZ3RoKGZleHByLT5hcmdzKSAhPSAx KQorCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwkJYXJnID0gKE5vZGUgKikgbGluaXRp YWwoZmV4cHItPmFyZ3MpOworCisJCS8qCisJCSAqIElkZW50aWZ5IHRoZSBpbm5lciBleHRyYWN0 aW9uIGV4cHJlc3Npb24uICBJdCBtYXkgYXBwZWFyIGFzIGEKKwkJICogRnVuY0V4cHIsIGFuIE9w RXhwciwgb3IgYSBTdWJzY3JpcHRpbmdSZWYsIGRlcGVuZGluZyBvbiBob3cgdGhlCisJCSAqIGV4 cHJlc3Npb24gaXMgcmVwcmVzZW50ZWQgYXQgdGhpcyBwb2ludC4gIEFjY2VwdCB0aGUgc3VwcG9y dGVkCisJCSAqIGZvcm1zLgorCQkgKi8KKwkJaWYgKElzQShhcmcsIEZ1bmNFeHByKSkKKwkJewor CQkJRnVuY0V4cHIgICAqaW5uZXIgPSAoRnVuY0V4cHIgKikgYXJnOworCisJCQlpbm5lcl9mdW5j aWQgPSBpbm5lci0+ZnVuY2lkOworCQkJaW5uZXJfYXJncyA9IGlubmVyLT5hcmdzOworCQkJbG9j YXRpb24gPSBpbm5lci0+bG9jYXRpb247CisJCX0KKwkJZWxzZSBpZiAoSXNBKGFyZywgT3BFeHBy KSkKKwkJeworCQkJT3BFeHByCSAgICppbm5lciA9IChPcEV4cHIgKikgYXJnOworCisJCQlpbm5l cl9mdW5jaWQgPSBpbm5lci0+b3BmdW5jaWQ7CisJCQlpbm5lcl9hcmdzID0gaW5uZXItPmFyZ3M7 CisJCQlsb2NhdGlvbiA9IGlubmVyLT5sb2NhdGlvbjsKKwkJfQorCQllbHNlIGlmIChJc0EoYXJn LCBTdWJzY3JpcHRpbmdSZWYpKQorCQl7CisJCQlTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiA9IChT dWJzY3JpcHRpbmdSZWYgKikgYXJnOworCQkJTm9kZQkgICAqc3Vic2NyaXB0OworCisJCQkvKgor CQkJICogT25seSBoYW5kbGUgdGhlIG5hcnJvdyBjYXNlIGVxdWl2YWxlbnQgdG8gb2JqZWN0LWZp ZWxkCisJCQkgKiBleHRyYWN0aW9uOiBhIHNpbmdsZSB0ZXh0LXR5cGVkIHN1YnNjcmlwdCBvbiBh IGpzb25iCisJCQkgKiBjb250YWluZXIsIHdpdGggbm8gc2xpY2UgYW5kIG5vIGFzc2lnbm1lbnQu CisJCQkgKi8KKwkJCWlmIChzYnNyZWYtPnJlZmNvbnRhaW5lcnR5cGUgIT0gSlNPTkJPSUQpCisJ CQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCQlpZiAobGlzdF9sZW5ndGgoc2JzcmVmLT5y ZWZ1cHBlcmluZGV4cHIpICE9IDEpCisJCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCQlp ZiAoc2JzcmVmLT5yZWZsb3dlcmluZGV4cHIgIT0gTklMKQorCQkJCVBHX1JFVFVSTl9QT0lOVEVS KE5VTEwpOworCQkJaWYgKHNic3JlZi0+cmVmYXNzZ25leHByICE9IE5VTEwpCisJCQkJUEdfUkVU VVJOX1BPSU5URVIoTlVMTCk7CisKKwkJCXN1YnNjcmlwdCA9IChOb2RlICopIGxpbml0aWFsKHNi c3JlZi0+cmVmdXBwZXJpbmRleHByKTsKKwkJCWlmIChleHByVHlwZShzdWJzY3JpcHQpICE9IFRF WFRPSUQpCisJCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwkJCWlubmVyX2Z1bmNpZCA9 IEZfSlNPTkJfT0JKRUNUX0ZJRUxEOworCQkJaW5uZXJfYXJncyA9IGxpc3RfbWFrZTIoc2JzcmVm LT5yZWZleHByLCBzdWJzY3JpcHQpOworCQkJbG9jYXRpb24gPSBleHByTG9jYXRpb24oYXJnKTsK KwkJfQorCQllbHNlCisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCQkvKiBPbmx5IHJl d3JpdGUganNvbmJfb2JqZWN0X2ZpZWxkKGpzb25iLCB0ZXh0KTsgdmVyaWZ5IGFyaXR5IHRvbyAq LworCQlpZiAoaW5uZXJfZnVuY2lkICE9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEKQorCQkJUEdfUkVU VVJOX1BPSU5URVIoTlVMTCk7CisJCWlmIChsaXN0X2xlbmd0aChpbm5lcl9hcmdzKSAhPSAyKQor CQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwkJLyogTWFwIHRoZSBvdXRlciBjYXN0IHRv IHRoZSBjb3JyZXNwb25kaW5nIHR5cGVkIGV4dHJhY3RvciAqLworCQlpZiAoZmV4cHItPmZ1bmNp ZCA9PSBGX05VTUVSSUNfSlNPTkIpCisJCXsKKwkJCXJlcGxhY2VtZW50X2Z1bmNpZCA9IEZfSlNP TkJfT0JKRUNUX0ZJRUxEX05VTUVSSUM7CisJCQlyZXBsYWNlbWVudF9yZXR0eXBlID0gTlVNRVJJ Q09JRDsKKwkJfQorCQllbHNlIGlmIChmZXhwci0+ZnVuY2lkID09IEZfQk9PTF9KU09OQikKKwkJ eworCQkJcmVwbGFjZW1lbnRfZnVuY2lkID0gRl9KU09OQl9PQkpFQ1RfRklFTERfQk9PTDsKKwkJ CXJlcGxhY2VtZW50X3JldHR5cGUgPSBCT09MT0lEOworCQl9CisJCWVsc2UgaWYgKGZleHByLT5m dW5jaWQgPT0gRl9JTlQ0X0pTT05CKQorCQl7CisJCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pT T05CX09CSkVDVF9GSUVMRF9JTlQ0OworCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IElOVDRPSUQ7 CisJCX0KKwkJZWxzZSBpZiAoZmV4cHItPmZ1bmNpZCA9PSBGX0lOVDhfSlNPTkIpCisJCXsKKwkJ CXJlcGxhY2VtZW50X2Z1bmNpZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX0lOVDg7CisJCQlyZXBs YWNlbWVudF9yZXR0eXBlID0gSU5UOE9JRDsKKwkJfQorCQllbHNlIGlmIChmZXhwci0+ZnVuY2lk ID09IEZfRkxPQVQ4X0pTT05CKQorCQl7CisJCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pTT05C X09CSkVDVF9GSUVMRF9GTE9BVDg7CisJCQlyZXBsYWNlbWVudF9yZXR0eXBlID0gRkxPQVQ4T0lE OworCQl9CisJCWVsc2UgaWYgKGZleHByLT5mdW5jaWQgPT0gRl9JTlQyX0pTT05CKQorCQl7CisJ CQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pTT05CX09CSkVDVF9GSUVMRF9JTlQyOworCQkJcmVw bGFjZW1lbnRfcmV0dHlwZSA9IElOVDJPSUQ7CisJCX0KKwkJZWxzZSBpZiAoZmV4cHItPmZ1bmNp ZCA9PSBGX0ZMT0FUNF9KU09OQikKKwkJeworCQkJcmVwbGFjZW1lbnRfZnVuY2lkID0gRl9KU09O Ql9PQkpFQ1RfRklFTERfRkxPQVQ0OworCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IEZMT0FUNE9J RDsKKwkJfQorCQllbHNlCisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCQkvKiBCdWls ZCB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gY2FsbCAqLworCQluZXdmZXhwciA9IG1ha2VGdW5j RXhwcihyZXBsYWNlbWVudF9mdW5jaWQsIHJlcGxhY2VtZW50X3JldHR5cGUsCisJCQkJCQkJCWlu bmVyX2FyZ3MsIEludmFsaWRPaWQsIEludmFsaWRPaWQsCisJCQkJCQkJCUNPRVJDRV9FWFBMSUNJ VF9DQUxMKTsKKwkJbmV3ZmV4cHItPmxvY2F0aW9uID0gbG9jYXRpb247CisJCXJldCA9IChOb2Rl ICopIG5ld2ZleHByOworCX0KKworCVBHX1JFVFVSTl9QT0lOVEVSKHJldCk7Cit9CisKIERhdHVt CiBqc29uYl9ib29sKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CkBAIC0yMDMzLDQgKzIxODUsNCBAQCBK c29uYlVucXVvdGUoSnNvbmIgKmpiKQogCX0KIAllbHNlCiAJCXJldHVybiBKc29uYlRvQ1N0cmlu ZyhOVUxMLCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsKLX0KK30KXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKaW5kZXggOTdjYzNkNjAzNDAuLmMy NjA1NzdkODk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCkBAIC05MjEsNiArOTIxLDE5 OSBAQCBqc29uYl9vYmplY3RfZmllbGRfdGV4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9OVUxMKCk7CiB9CiAKKy8qCisgKiBUeXBlZCBzY2FsYXIgZXh0cmFjdGlvbiBmcm9tIGpzb25i IG9iamVjdCBmaWVsZHMuCisgKgorICogVGhlc2UgZnVuY3Rpb25zIGV4dHJhY3QgYSB0eXBlZCBz Y2FsYXIgZGlyZWN0bHkgZnJvbSB0aGUgaW4tbWVtb3J5CisgKiBKc29uYlZhbHVlIGZvdW5kIGJ5 IGtleSBsb29rdXAsIHNraXBwaW5nIHRoZSBpbnRlcm1lZGlhdGUgSnNvbmIKKyAqIHNlcmlhbGl6 YXRpb24gdGhhdCBvY2N1cnMgd2l0aCB0aGUgdW5vcHRpbWl6ZWQgY2FzdC1vdmVyLWV4dHJhY3Rp b24gcGF0aC4KKyAqCisgKiBUaGV5IGxpdmUgaGVyZSBhbG9uZ3NpZGUganNvbmJfb2JqZWN0X2Zp ZWxkKCkgYmVjYXVzZSB0aGV5IHNoYXJlIHRoZQorICogc2FtZSBrZXktbG9va3VwIGxvZ2ljIChn ZXRLZXlKc29uVmFsdWVGcm9tQ29udGFpbmVyKS4KKyAqCisgKiBSZWdpc3RlcmVkIGluIHBnX3By b2MgYXMgb3JkaW5hcnkgU1FMLWNhbGxhYmxlIGJ1aWx0aW5zOyBhbHNvIHNlcnZlIGFzCisgKiBw bGFubmVyIHJld3JpdGUgdGFyZ2V0cyBmb3IganNvbmJfY2FzdF9zdXBwb3J0KCkgaW4ganNvbmIu Yy4KKyAqCisgKiBOVUxMIHNlbWFudGljcyBtYXRjaCB0aGUgZXhpc3RpbmcgY2FzdCBwYXRoOiBh IG1pc3Npbmcga2V5IG9yIGEgSlNPTgorICogbnVsbCB2YWx1ZSBib3RoIHByb2R1Y2UgU1FMIE5V TEw7IGEgdHlwZSBtaXNtYXRjaCByYWlzZXMgRVJST1IuCisgKi8KKworLyoKKyAqIExvb2sgdXAg YSBrZXkgaW4gYSBqc29uYiBvYmplY3QgYW5kIHJldHVybiB0aGUgSnNvbmJWYWx1ZSwgb3IgTlVM TC4KKyAqIFJldHVybnMgTlVMTCAod2l0aG91dCBlcnJvcikgd2hlbiB0aGUgaW5wdXQgaXMgbm90 IGFuIG9iamVjdCwgdGhlIGtleQorICogaXMgYWJzZW50LCBvciB0aGUgdmFsdWUgaXMgSlNPTiBu dWxsLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitqc29uYl9vYmplY3RfZmllbGRfbG9va3Vw KEpzb25iICpqYiwgdGV4dCAqa2V5LCBKc29uYlZhbHVlICp2YnVmKQoreworCUpzb25iVmFsdWUg KnY7CisKKwlpZiAoIUpCX1JPT1RfSVNfT0JKRUNUKGpiKSkKKwkJcmV0dXJuIE5VTEw7CisKKwl2 ID0gZ2V0S2V5SnNvblZhbHVlRnJvbUNvbnRhaW5lcigmamItPnJvb3QsCisJCQkJCQkJCQkgVkFS REFUQV9BTlkoa2V5KSwKKwkJCQkJCQkJCSBWQVJTSVpFX0FOWV9FWEhEUihrZXkpLAorCQkJCQkJ CQkJIHZidWYpOworCisJLyogTWlzc2luZyBrZXkgb3IgSlNPTiBudWxsIGJvdGggbWFwIHRvIFNR TCBOVUxMICovCisJaWYgKHYgPT0gTlVMTCB8fCB2LT50eXBlID09IGpidk51bGwpCisJCXJldHVy biBOVUxMOworCisJcmV0dXJuIHY7Cit9CisKKy8qCisgKiBSYWlzZSBhIHR5cGUtbWlzbWF0Y2gg ZXJyb3IgZm9yIHR5cGVkIGZpZWxkIGV4dHJhY3Rpb24uCisgKgorICogVGhlIG1lc3NhZ2Ugd29y ZGluZyBtYXRjaGVzIGNhbm5vdENhc3RKc29uYlZhbHVlKCkgaW4ganNvbmIuYyBzbyB0aGF0Cisg KiB0aGUgb3B0aW1pemVkIGFuZCB1bm9wdGltaXplZCBwYXRocyBwcm9kdWNlIGlkZW50aWNhbCBl cnJvcnMuCisgKi8KK3N0YXRpYyB2b2lkCitqc29uYl9maWVsZF9jYXN0X2Vycm9yKEpzb25iVmFs dWUgKnYsIGNvbnN0IGNoYXIgKnNxbHR5cGUpCit7CisJY29uc3QgY2hhciAqanNvbnR5cGU7CisK Kwlzd2l0Y2ggKHYtPnR5cGUpCisJeworCQljYXNlIGpidk51bGw6CisJCQlqc29udHlwZSA9ICJu dWxsIjsKKwkJCWJyZWFrOworCQljYXNlIGpidlN0cmluZzoKKwkJCWpzb250eXBlID0gInN0cmlu ZyI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZOdW1lcmljOgorCQkJanNvbnR5cGUgPSAibnVtZXJp YyI7CisJCQlicmVhazsKKwkJY2FzZSBqYnZCb29sOgorCQkJanNvbnR5cGUgPSAiYm9vbGVhbiI7 CisJCQlicmVhazsKKwkJY2FzZSBqYnZBcnJheToKKwkJCWpzb250eXBlID0gImFycmF5IjsKKwkJ CWJyZWFrOworCQljYXNlIGpidk9iamVjdDoKKwkJCWpzb250eXBlID0gIm9iamVjdCI7CisJCQli cmVhazsKKwkJY2FzZSBqYnZCaW5hcnk6CisJCQlqc29udHlwZSA9ICJhcnJheSBvciBvYmplY3Qi OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5rbm93biBqc29uYiB0 eXBlOiAlZCIsIChpbnQpIHYtPnR5cGUpOworCQkJanNvbnR5cGUgPSBOVUxMOwkvKiBrZWVwIGNv bXBpbGVyIHF1aWV0ICovCisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJIGVycm1zZygiY2Fubm90IGNhc3QganNv bmIgJXMgdG8gdHlwZSAlcyIsCisJCQkJCWpzb250eXBlLCBzcWx0eXBlKSkpOworfQorCisvKgor ICogUGVyLXR5cGUgY29udmVyc2lvbiBoZWxwZXJzIGZvciB0eXBlZCBmaWVsZCBleHRyYWN0aW9u LgorICoKKyAqIEVhY2ggdmFsaWRhdGVzIHRoZSBleHBlY3RlZCBKc29uYlZhbHVlIHR5cGUsIHJh aXNlcyBhIHR5cGUtbWlzbWF0Y2gKKyAqIGVycm9yICh2aWEganNvbmJfZmllbGRfY2FzdF9lcnJv cikgaWYgd3JvbmcsIGFuZCByZXR1cm5zIHRoZSBjb252ZXJ0ZWQKKyAqIHZhbHVlIGFzIERhdHVt LiAgVGhlc2UgYXJlIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGNvbnZlcnNpb24gc2VtYW50aWNzCisg KiBsaXZlOyB0aGUgd3JhcHBlciBtYWNybyBiZWxvdyBpcyBpbnRlbnRpb25hbGx5IGtlcHQgdGhp bi4KKyAqLworc3RhdGljIERhdHVtCitqc29uYl92YWx1ZV90b19udW1lcmljX2RhdHVtKEpzb25i VmFsdWUgKnYpCit7CisJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJanNvbmJfZmllbGRf Y2FzdF9lcnJvcih2LCAibnVtZXJpYyIpOworCisJcmV0dXJuIE51bWVyaWNHZXREYXR1bShEYXR1 bUdldE51bWVyaWNDb3B5KE51bWVyaWNHZXREYXR1bSh2LT52YWwubnVtZXJpYykpKTsKK30KKwor c3RhdGljIERhdHVtCitqc29uYl92YWx1ZV90b19ib29sX2RhdHVtKEpzb25iVmFsdWUgKnYpCit7 CisJaWYgKHYtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJanNvbmJfZmllbGRfY2FzdF9lcnJvcih2LCAi Ym9vbGVhbiIpOworCisJcmV0dXJuIEJvb2xHZXREYXR1bSh2LT52YWwuYm9vbGVhbik7Cit9CisK K3N0YXRpYyBEYXR1bQoranNvbmJfdmFsdWVfdG9faW50NF9kYXR1bShKc29uYlZhbHVlICp2KQor eworCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCWpzb25iX2ZpZWxkX2Nhc3RfZXJyb3Io diwgImludGVnZXIiKTsKKworCXJldHVybiBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfaW50 NCwgTnVtZXJpY0dldERhdHVtKHYtPnZhbC5udW1lcmljKSk7Cit9CisKK3N0YXRpYyBEYXR1bQor anNvbmJfdmFsdWVfdG9faW50OF9kYXR1bShKc29uYlZhbHVlICp2KQoreworCWlmICh2LT50eXBl ICE9IGpidk51bWVyaWMpCisJCWpzb25iX2ZpZWxkX2Nhc3RfZXJyb3IodiwgImJpZ2ludCIpOwor CisJcmV0dXJuIERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19pbnQ4LCBOdW1lcmljR2V0RGF0 dW0odi0+dmFsLm51bWVyaWMpKTsKK30KKworc3RhdGljIERhdHVtCitqc29uYl92YWx1ZV90b19m bG9hdDhfZGF0dW0oSnNvbmJWYWx1ZSAqdikKK3sKKwlpZiAodi0+dHlwZSAhPSBqYnZOdW1lcmlj KQorCQlqc29uYl9maWVsZF9jYXN0X2Vycm9yKHYsICJkb3VibGUgcHJlY2lzaW9uIik7CisKKwly ZXR1cm4gRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX2Zsb2F0OCwgTnVtZXJpY0dldERhdHVt KHYtPnZhbC5udW1lcmljKSk7Cit9CisKK3N0YXRpYyBEYXR1bQoranNvbmJfdmFsdWVfdG9faW50 Ml9kYXR1bShKc29uYlZhbHVlICp2KQoreworCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJ CWpzb25iX2ZpZWxkX2Nhc3RfZXJyb3IodiwgInNtYWxsaW50Iik7CisKKwlyZXR1cm4gRGlyZWN0 RnVuY3Rpb25DYWxsMShudW1lcmljX2ludDIsIE51bWVyaWNHZXREYXR1bSh2LT52YWwubnVtZXJp YykpOworfQorCitzdGF0aWMgRGF0dW0KK2pzb25iX3ZhbHVlX3RvX2Zsb2F0NF9kYXR1bShKc29u YlZhbHVlICp2KQoreworCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCWpzb25iX2ZpZWxk X2Nhc3RfZXJyb3IodiwgInJlYWwiKTsKKworCXJldHVybiBEaXJlY3RGdW5jdGlvbkNhbGwxKG51 bWVyaWNfZmxvYXQ0LCBOdW1lcmljR2V0RGF0dW0odi0+dmFsLm51bWVyaWMpKTsKK30KKworLyoK KyAqIFRoaW4td3JhcHBlciBtYWNybyBmb3IgdGhlIGpzb25iX29iamVjdF9maWVsZF88dHlwZT4g ZXh0cmFjdG9yIGZhbWlseS4KKyAqIFJlZHVjZXMgcmVwZXRpdGlvbjogZWFjaCB3cmFwcGVyIGRv ZXMgbG9va3VwLCBOVUxMIGhhbmRsaW5nLCBhbmQgZGVsZWdhdGVzCisgKiB0byBhIHR5cGUtc3Bl Y2lmaWMgY29udmVyc2lvbiBoZWxwZXIgdGhhdCBob2xkcyB0aGUgYWN0dWFsIHNlbWFudGljcy4K KyAqLworI2RlZmluZSBERUZJTkVfSlNPTkJfT0JKRUNUX0ZJRUxEX1RZUEVEKGZuYW1lLCBjb252 Zm4pIFwKK0RhdHVtIFwKK2ZuYW1lKFBHX0ZVTkNUSU9OX0FSR1MpIFwKK3sgXAorCUpzb25iCSAg ICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDApOyBcCisJdGV4dAkgICAqa2V5ID0gUEdfR0VUQVJH X1RFWFRfUFAoMSk7IFwKKwlKc29uYlZhbHVlCXZidWY7IFwKKwlKc29uYlZhbHVlICp2OyBcCisJ RGF0dW0JCXJlc3VsdDsgXAorXAorCXYgPSBqc29uYl9vYmplY3RfZmllbGRfbG9va3VwKGpiLCBr ZXksICZ2YnVmKTsgXAorCWlmICh2ID09IE5VTEwpIFwKKwl7IFwKKwkJUEdfRlJFRV9JRl9DT1BZ KGpiLCAwKTsgXAorCQlQR19SRVRVUk5fTlVMTCgpOyBcCisJfSBcCitcCisJcmVzdWx0ID0gY29u dmZuKHYpOyBcCisJUEdfRlJFRV9JRl9DT1BZKGpiLCAwKTsgXAorCXJldHVybiByZXN1bHQ7IFwK K30KKworREVGSU5FX0pTT05CX09CSkVDVF9GSUVMRF9UWVBFRChqc29uYl9vYmplY3RfZmllbGRf bnVtZXJpYywganNvbmJfdmFsdWVfdG9fbnVtZXJpY19kYXR1bSkKK0RFRklORV9KU09OQl9PQkpF Q1RfRklFTERfVFlQRUQoanNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2wsIGpzb25iX3ZhbHVlX3RvX2Jv b2xfZGF0dW0pCitERUZJTkVfSlNPTkJfT0JKRUNUX0ZJRUxEX1RZUEVEKGpzb25iX29iamVjdF9m aWVsZF9pbnQ0LCBqc29uYl92YWx1ZV90b19pbnQ0X2RhdHVtKQorREVGSU5FX0pTT05CX09CSkVD VF9GSUVMRF9UWVBFRChqc29uYl9vYmplY3RfZmllbGRfaW50OCwganNvbmJfdmFsdWVfdG9faW50 OF9kYXR1bSkKK0RFRklORV9KU09OQl9PQkpFQ1RfRklFTERfVFlQRUQoanNvbmJfb2JqZWN0X2Zp ZWxkX2Zsb2F0OCwganNvbmJfdmFsdWVfdG9fZmxvYXQ4X2RhdHVtKQorREVGSU5FX0pTT05CX09C SkVDVF9GSUVMRF9UWVBFRChqc29uYl9vYmplY3RfZmllbGRfaW50MiwganNvbmJfdmFsdWVfdG9f aW50Ml9kYXR1bSkKK0RFRklORV9KU09OQl9PQkpFQ1RfRklFTERfVFlQRUQoanNvbmJfb2JqZWN0 X2ZpZWxkX2Zsb2F0NCwganNvbmJfdmFsdWVfdG9fZmxvYXQ0X2RhdHVtKQorCiBEYXR1bQoganNv bl9hcnJheV9lbGVtZW50KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CkBAIC02MTY3LDQgKzYzNjAsNCBA QCBqc29uX2NoZWNrX211dGFiaWxpdHkoT2lkIHR5cG9pZCwgYm9vbCBpc19qc29uYiwgYm9vbCAq aGFzX211dGFibGUpCiAJCQkJKmhhc19tdXRhYmxlID0gdHJ1ZTsKIAkJCWJyZWFrOwogCX0KLX0K K30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRl eCBmYTlhZTc5MDgyYi4uNDA2ZTA4ZGZmZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt NDc5OCwyNSArNDc5OCwzMCBAQAogICBwcm9zcmMgPT4gJ251bWVyaWNfcGdfbHNuJyB9LAogCiB7 IG9pZCA9PiAnMzU1NicsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGJvb2xlYW4nLAotICBw cm9uYW1lID0+ICdib29sJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdq c29uYicsCisgIHByb25hbWUgPT4gJ2Jvb2wnLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1 cHBvcnQnLCBwcm9yZXR0eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAg cHJvc3JjID0+ICdqc29uYl9ib29sJyB9LAogeyBvaWQgPT4gJzM0NDknLCBkZXNjciA9PiAnY29u dmVydCBqc29uYiB0byBudW1lcmljJywKLSAgcHJvbmFtZSA9PiAnbnVtZXJpYycsIHByb3JldHR5 cGUgPT4gJ251bWVyaWMnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAorICBwcm9uYW1lID0+ICdu dW1lcmljJywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywgcHJvcmV0dHlwZSA9 PiAnbnVtZXJpYycsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJf bnVtZXJpYycgfSwKIHsgb2lkID0+ICczNDUwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8g aW50MicsCi0gIHByb25hbWUgPT4gJ2ludDInLCBwcm9yZXR0eXBlID0+ICdpbnQyJywgcHJvYXJn dHlwZXMgPT4gJ2pzb25iJywKKyAgcHJvbmFtZSA9PiAnaW50MicsIHByb3N1cHBvcnQgPT4gJ2pz b25iX2Nhc3Rfc3VwcG9ydCcsCisgIHByb3JldHR5cGUgPT4gJ2ludDInLCBwcm9hcmd0eXBlcyA9 PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2ludDInIH0sCiB7IG9pZCA9PiAnMzQ1MScs IGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGludDQnLAotICBwcm9uYW1lID0+ICdpbnQ0Jywg cHJvcmV0dHlwZSA9PiAnaW50NCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCisgIHByb25hbWUg PT4gJ2ludDQnLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAorICBwcm9yZXR0 eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29u Yl9pbnQ0JyB9LAogeyBvaWQgPT4gJzM0NTInLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBp bnQ4JywKLSAgcHJvbmFtZSA9PiAnaW50OCcsIHByb3JldHR5cGUgPT4gJ2ludDgnLCBwcm9hcmd0 eXBlcyA9PiAnanNvbmInLAorICBwcm9uYW1lID0+ICdpbnQ4JywgcHJvc3VwcG9ydCA9PiAnanNv bmJfY2FzdF9zdXBwb3J0JywKKyAgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJfaW50OCcgfSwKIHsgb2lkID0+ICczNDUzJywg ZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gZmxvYXQ0JywKLSAgcHJvbmFtZSA9PiAnZmxvYXQ0 JywgcHJvcmV0dHlwZSA9PiAnZmxvYXQ0JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKKyAgcHJv bmFtZSA9PiAnZmxvYXQ0JywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKKyAg cHJvcmV0dHlwZSA9PiAnZmxvYXQ0JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3Jj ID0+ICdqc29uYl9mbG9hdDQnIH0sCiB7IG9pZCA9PiAnMjU4MCcsIGRlc2NyID0+ICdjb252ZXJ0 IGpzb25iIHRvIGZsb2F0OCcsCi0gIHByb25hbWUgPT4gJ2Zsb2F0OCcsIHByb3JldHR5cGUgPT4g J2Zsb2F0OCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCisgIHByb25hbWUgPT4gJ2Zsb2F0OCcs IHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCisgIHByb3JldHR5cGUgPT4gJ2Zs b2F0OCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJfZmxvYXQ4 JyB9LAogCiAjIGZvcm1hdHRpbmcKQEAgLTEyNzY5LDQgKzEyNzc0LDM4IEBACiAgIHByb25hbWUg PT4gJ2hhc2hvaWQ4ZXh0ZW5kZWQnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywKICAgcHJvYXJndHlw ZXMgPT4gJ29pZDggaW50OCcsIHByb3NyYyA9PiAnaGFzaG9pZDhleHRlbmRlZCcgfSwKIAotXQor CisjIGpzb25iIGNhc3Qgb3B0aW1pemF0aW9uIHN1cHBvcnQgZnVuY3Rpb25zCit7IG9pZCA9PiAn OTk1MCcsIGRlc2NyID0+ICdwbGFubmVyIHN1cHBvcnQgZm9yIGpzb25iIGNhc3RzJywKKyAgcHJv bmFtZSA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAor ICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9y dCcgfSwKK3sgb2lkID0+ICc5OTUzJywgZGVzY3IgPT4gJ2V4dHJhY3QgbnVtZXJpYyBmcm9tIGpz b25iIG9iamVjdCBieSBmaWVsZCBuYW1lJywKKyAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2Zp ZWxkX251bWVyaWMnLCBwcm9yZXR0eXBlID0+ICdudW1lcmljJywKKyAgcHJvYXJndHlwZXMgPT4g J2pzb25iIHRleHQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbixmaWVsZF9uYW1lfScsCisg IHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMnIH0sCit7IG9pZCA9PiAnOTk1 NCcsIGRlc2NyID0+ICdleHRyYWN0IGJvb2xlYW4gZnJvbSBqc29uYiBvYmplY3QgYnkgZmllbGQg bmFtZScsCisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9maWVsZF9ib29sJywgcHJvcmV0dHlw ZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICdqc29uYiB0ZXh0JywgcHJvYXJnbmFtZXMg PT4gJ3tmcm9tX2pzb24sZmllbGRfbmFtZX0nLAorICBwcm9zcmMgPT4gJ2pzb25iX29iamVjdF9m aWVsZF9ib29sJyB9LAoreyBvaWQgPT4gJzk5NTUnLCBkZXNjciA9PiAnZXh0cmFjdCBpbnQ0IGZy b20ganNvbmIgb2JqZWN0IGJ5IGZpZWxkIG5hbWUnLAorICBwcm9uYW1lID0+ICdqc29uYl9vYmpl Y3RfZmllbGRfaW50NCcsIHByb3JldHR5cGUgPT4gJ2ludDQnLAorICBwcm9hcmd0eXBlcyA9PiAn anNvbmIgdGV4dCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLGZpZWxkX25hbWV9JywKKyAg cHJvc3JjID0+ICdqc29uYl9vYmplY3RfZmllbGRfaW50NCcgfSwKK3sgb2lkID0+ICc5OTU2Jywg ZGVzY3IgPT4gJ2V4dHJhY3QgaW50OCBmcm9tIGpzb25iIG9iamVjdCBieSBmaWVsZCBuYW1lJywK KyAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX2ludDgnLCBwcm9yZXR0eXBlID0+ICdp bnQ4JywKKyAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIHRleHQnLCBwcm9hcmduYW1lcyA9PiAne2Zy b21fanNvbixmaWVsZF9uYW1lfScsCisgIHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX2lu dDgnIH0sCit7IG9pZCA9PiAnOTk1NycsIGRlc2NyID0+ICdleHRyYWN0IGZsb2F0OCBmcm9tIGpz b25iIG9iamVjdCBieSBmaWVsZCBuYW1lJywKKyAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2Zp ZWxkX2Zsb2F0OCcsIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsCisgIHByb2FyZ3R5cGVzID0+ICdq c29uYiB0ZXh0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sZmllbGRfbmFtZX0nLAorICBw cm9zcmMgPT4gJ2pzb25iX29iamVjdF9maWVsZF9mbG9hdDgnIH0sCit7IG9pZCA9PiAnOTk4MCcs IGRlc2NyID0+ICdleHRyYWN0IGludDIgZnJvbSBqc29uYiBvYmplY3QgYnkgZmllbGQgbmFtZScs CisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9maWVsZF9pbnQyJywgcHJvcmV0dHlwZSA9PiAn aW50MicsCisgIHByb2FyZ3R5cGVzID0+ICdqc29uYiB0ZXh0JywgcHJvYXJnbmFtZXMgPT4gJ3tm cm9tX2pzb24sZmllbGRfbmFtZX0nLAorICBwcm9zcmMgPT4gJ2pzb25iX29iamVjdF9maWVsZF9p bnQyJyB9LAoreyBvaWQgPT4gJzk5ODEnLCBkZXNjciA9PiAnZXh0cmFjdCBmbG9hdDQgZnJvbSBq c29uYiBvYmplY3QgYnkgZmllbGQgbmFtZScsCisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9m aWVsZF9mbG9hdDQnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDQnLAorICBwcm9hcmd0eXBlcyA9PiAn anNvbmIgdGV4dCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLGZpZWxkX25hbWV9JywKKyAg cHJvc3JjID0+ICdqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ0JyB9LAorCitdClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9q c29uYi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dAppbmRleCA0ZTI0 Njc4NTJkYi4uYzMxZmIxMjBkZDggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvanNvbmIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CkBA IC00NTgsNyArNDU4LDQ4NyBAQCBDUkVBVEUgVEVNUCBUQUJMRSB0ZXN0X2pzb25iICgKIElOU0VS VCBJTlRPIHRlc3RfanNvbmIgVkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNjYWxhciInKSwKICgnYXJy YXknLCdbInplcm8iLCAib25lIiwidHdvIixudWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10seyJm MSI6OX1dJyksCi0oJ29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJm aWVsZDMiOm51bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsi ZjEiOjl9fScpOworKCdvYmplY3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwyIiwi ZmllbGQzIjpudWxsLCAiZmllbGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYiOiB7 ImYxIjo5fSwgImZpZWxkNyI6IHRydWV9Jyk7CistLSBPcHRpbWl6ZWQgdHlwZWQgZXh0cmFjdGlv bjogdGhlIHBsYW5uZXIgcmV3cml0ZXMgKGotPidrZXknKTo6dHlwZSBpbnRvIGEKKy0tIGRpcmVj dCB0eXBlZCBleHRyYWN0b3IgY2FsbCwgY3VycmVudGx5IGZvciBudW1lcmljLCBib29sLCBpbnQy LCBpbnQ0LCBpbnQ4LAorLS0gZmxvYXQ0LCBmbG9hdDguCistLSBTZWN0aW9uIDE6IHBsYW5uZXIg cmV3cml0ZSB2ZXJpZmljYXRpb24gKHJld3JpdHRlbiB0YXJnZXRzKQorRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMgRlJP TSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29i amVjdF9maWVsZF9udW1lcmljKHRlc3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6 ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ3Jyk6 OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25i X29iamVjdF9maWVsZF9ib29sKHRlc3RfanNvbiwgJ2ZpZWxkNyc6OnRleHQpCisgICBGaWx0ZXI6 ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6 OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25i X29iamVjdF9maWVsZF9pbnQ0KHRlc3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6 ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6 OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25i X29iamVjdF9maWVsZF9pbnQ4KHRlc3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6 ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6 OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6 IGpzb25iX29iamVjdF9maWVsZF9mbG9hdDgodGVzdF9qc29uLCAnZmllbGQ0Jzo6dGV4dCkKKyAg IEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dz KQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9qc29uIC0+ICdm aWVsZDQnKTo6aW50MiBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1 dDoganNvbmJfb2JqZWN0X2ZpZWxkX2ludDIodGVzdF9qc29uLCAnZmllbGQ0Jzo6dGV4dCkKKyAg IEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dz KQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9qc29uIC0+ICdm aWVsZDQnKTo6ZmxvYXQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0 JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAg IE91dHB1dDoganNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0NCh0ZXN0X2pzb24sICdmaWVsZDQnOjp0 ZXh0KQorICAgRmlsdGVyOiAodGVzdF9qc29uYi5qc29uX3R5cGUgPSAnb2JqZWN0Jzo6dGV4dCkK KygzIHJvd3MpCisKKy0tIFNlY3Rpb24gMWI6IHBsYW5uZXIgcmV3cml0ZSB2ZXJpZmljYXRpb24g Zm9yIHN1YnNjcmlwdGluZyBzeW50YXgKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VM RUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBw Z190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDoganNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMo dGVzdF9qc29uLCAnZmllbGQ0Jzo6dGV4dCkKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90 eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpIFNFTEVDVCAodGVzdF9qc29uWydmaWVsZDcnXSk6OmJvb2wgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g cGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29iamVjdF9maWVsZF9ib29sKHRl c3RfanNvbiwgJ2ZpZWxkNyc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlw ZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKSBTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjppbnQ0IEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBn X3RlbXAudGVzdF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9vYmplY3RfZmllbGRfaW50NCh0ZXN0 X2pzb24sICdmaWVsZDQnOjp0ZXh0KQorICAgRmlsdGVyOiAodGVzdF9qc29uYi5qc29uX3R5cGUg PSAnb2JqZWN0Jzo6dGV4dCkKKygzIHJvd3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikgU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6aW50OCBGUk9NIHRlc3RfanNvbmIgV0hF UkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190 ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDoganNvbmJfb2JqZWN0X2ZpZWxkX2ludDgodGVzdF9q c29uLCAnZmllbGQ0Jzo6dGV4dCkKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0g J29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp IFNFTEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hF UkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g cGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29iamVjdF9maWVsZF9mbG9hdDgo dGVzdF9qc29uLCAnZmllbGQ0Jzo6dGV4dCkKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90 eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpIFNFTEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6OmludDIgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g cGdfdGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX29iamVjdF9maWVsZF9pbnQyKHRl c3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlw ZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKSBTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjpmbG9hdDQgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHBnX3RlbXAudGVzdF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9vYmplY3RfZmllbGRfZmxv YXQ0KHRlc3RfanNvbiwgJ2ZpZWxkNCc6OnRleHQpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpz b25fdHlwZSA9ICdvYmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworLS0gU2VjdGlvbiAyOiBjb3Jy ZWN0IGV4ZWN1dGlvbiB0aHJvdWdoIHRoZSByZXdyaXR0ZW4gcGF0aAorU0VMRUNUICh0ZXN0X2pz b24gLT4gJ2ZpZWxkNCcpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUg PSAnb2JqZWN0JzsKKyBudW1lcmljIAorLS0tLS0tLS0tCisgICAgICAgNAorKDEgcm93KQorCitT RUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ3Jyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdvYmplY3QnOworIGJvb2wgCistLS0tLS0KKyB0CisoMSByb3cpCisKK1NF TEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7CisgaW50NCAKKy0tLS0tLQorICAgIDQKKygxIHJvdykKKwor U0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyBpbnQ4IAorLS0tLS0tCisgICAgNAorKDEgcm93KQor CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgZmxvYXQ4IAorLS0tLS0tLS0KKyAgICAgIDQK KygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQyIEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyBpbnQyIAorLS0tLS0tCisgICAg NAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0NCBGUk9N IHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgZmxvYXQ0IAorLS0tLS0t LS0KKyAgICAgIDQKKygxIHJvdykKKworLS0gU2VjdGlvbiAyYjogY29ycmVjdCBleGVjdXRpb24g dGhyb3VnaCBzdWJzY3JpcHRpbmcgc3ludGF4CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10p OjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyB0 ZXN0X2pzb24gCistLS0tLS0tLS0tLQorICAgICAgICAgNAorKDEgcm93KQorCitTRUxFQ1QgKHRl c3RfanNvblsnZmllbGQ3J10pOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUg PSAnb2JqZWN0JzsKKyB0ZXN0X2pzb24gCistLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VM RUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7CisgdGVzdF9qc29uIAorLS0tLS0tLS0tLS0KKyAgICAgICAgIDQK KygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6aW50OCBGUk9NIHRlc3Rf anNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgdGVzdF9qc29uIAorLS0tLS0tLS0t LS0KKyAgICAgICAgIDQKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6 ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyB0ZXN0 X2pzb24gCistLS0tLS0tLS0tLQorICAgICAgICAgNAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3Rf anNvblsnZmllbGQ0J10pOjppbnQyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAn b2JqZWN0JzsKKyB0ZXN0X2pzb24gCistLS0tLS0tLS0tLQorICAgICAgICAgNAorKDEgcm93KQor CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjpmbG9hdDQgRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0tCisgICAg ICAgICA0CisoMSByb3cpCisKKy0tIFNlY3Rpb24gMzogTlVMTCBzZW1hbnRpY3MgKG1pc3Npbmcg a2V5LCBKU09OIG51bGwsIG5vbi1vYmplY3QgaW5wdXQpCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAn ZmllbGQzJyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmpl Y3QnOyAgLS0gSlNPTiBudWxsCisgbnVtZXJpYyAKKy0tLS0tLS0tLQorICAgICAgICAKKygxIHJv dykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ25vbmV4aXN0ZW50Jyk6Om51bWVyaWMgRlJPTSB0 ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gbWlzc2luZyBrZXkKKyBu dW1lcmljIAorLS0tLS0tLS0tCisgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNv biAtPiAneCcpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnYXJy YXknOyAgLS0gbm9uLW9iamVjdAorIG51bWVyaWMgCistLS0tLS0tLS0KKyAgICAgICAgCisoMSBy b3cpCisKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDMnKTo6Ym9vbCBGUk9NIHRlc3RfanNv bmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGwsIGJvb2wgcGF0aAor IGJvb2wgCistLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxk MycpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0t IEpTT04gbnVsbCwgaW50NCBwYXRoCisgaW50NCAKKy0tLS0tLQorICAgICAKKygxIHJvdykKKwor U0VMRUNUICh0ZXN0X2pzb24gLT4gJ25vbmV4aXN0ZW50Jyk6OmludDQgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gbWlzc2luZyBrZXksIGludDQKKyBpbnQ0 IAorLS0tLS0tCisgICAgIAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQz Jyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAt LSBKU09OIG51bGwsIGZsb2F0OCBwYXRoCisgZmxvYXQ4IAorLS0tLS0tLS0KKyAgICAgICAKKygx IHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ25vbmV4aXN0ZW50Jyk6OmZsb2F0OCBGUk9N IHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBtaXNzaW5nIGtleSwg ZmxvYXQ4CisgZmxvYXQ4IAorLS0tLS0tLS0KKyAgICAgICAKKygxIHJvdykKKworU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkMycpOjppbnQyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbCwgaW50MiBwYXRoCisgaW50MiAKKy0tLS0tLQor ICAgICAKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ25vbmV4aXN0ZW50Jyk6Omlu dDIgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gbWlzc2lu ZyBrZXksIGludDIKKyBpbnQyIAorLS0tLS0tCisgICAgIAorKDEgcm93KQorCitTRUxFQ1QgKHRl c3RfanNvbiAtPiAnZmllbGQzJyk6OmZsb2F0NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGwsIGZsb2F0NCBwYXRoCisgZmxvYXQ0IAorLS0t LS0tLS0KKyAgICAgICAKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ25vbmV4aXN0 ZW50Jyk6OmZsb2F0NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7 ICAtLSBtaXNzaW5nIGtleSwgZmxvYXQ0CisgZmxvYXQ0IAorLS0tLS0tLS0KKyAgICAgICAKKygx IHJvdykKKworLS0gU2VjdGlvbiAzYjogTlVMTCBzZW1hbnRpY3MgdGhyb3VnaCBzdWJzY3JpcHRp bmcgc3ludGF4CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQzJ10pOjpudW1lcmljIEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbAorIHRlc3Rf anNvbiAKKy0tLS0tLS0tLS0tCisgICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9q c29uWydub25leGlzdGVudCddKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ29iamVjdCc7ICAtLSBtaXNzaW5nIGtleQorIHRlc3RfanNvbiAKKy0tLS0tLS0tLS0t CisgICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9qc29uWydub25leGlzdGVudCdd KTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0t IG1pc3Npbmcga2V5LCBmbG9hdDgKKyB0ZXN0X2pzb24gCistLS0tLS0tLS0tLQorICAgICAgICAg IAorKDEgcm93KQorCistLSBTZWN0aW9uIDQ6IHR5cGUtbWlzbWF0Y2ggZXJyb3JzIChzY2FsYXIg YW5kIGNvbnRhaW5lciB0eXBlcykKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6bnVt ZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJp bmcgdG8gbnVtZXJpYworRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBu dW1lcmljCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQxJyk6OmJvb2wgRlJPTSB0ZXN0X2pz b25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gc3RyaW5nIHRvIGJvb2wKK0VSUk9S OiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgYm9vbGVhbgorU0VMRUNUICh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNScpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsgIC0tIGFycmF5IHRvIG51bWVyaWMKK0VSUk9SOiAgY2Fubm90IGNhc3Qg anNvbmIgYXJyYXkgb3Igb2JqZWN0IHRvIHR5cGUgbnVtZXJpYworU0VMRUNUICh0ZXN0X2pzb24g LT4gJ2ZpZWxkMScpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2Jq ZWN0JzsgIC0tIHN0cmluZyB0byBpbnQ0CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmlu ZyB0byB0eXBlIGludGVnZXIKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6aW50OCBG Uk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcgdG8g aW50OAorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBiaWdpbnQKK1NF TEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBmbG9hdDgKK0VSUk9SOiAgY2Fu bm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgZG91YmxlIHByZWNpc2lvbgorU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkNScpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsgIC0tIGFycmF5IHRvIGludDQKK0VSUk9SOiAgY2Fubm90IGNhc3QganNv bmIgYXJyYXkgb3Igb2JqZWN0IHRvIHR5cGUgaW50ZWdlcgorU0VMRUNUICh0ZXN0X2pzb24gLT4g J2ZpZWxkNScpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmpl Y3QnOyAgLS0gYXJyYXkgdG8gZmxvYXQ4CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGFycmF5 IG9yIG9iamVjdCB0byB0eXBlIGRvdWJsZSBwcmVjaXNpb24KK1NFTEVDVCAodGVzdF9qc29uIC0+ ICdmaWVsZDEnKTo6aW50MiBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7ICAtLSBzdHJpbmcgdG8gaW50MgorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcg dG8gdHlwZSBzbWFsbGludAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjpmbG9hdDQg RlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gc3RyaW5nIHRv IGZsb2F0NAorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSByZWFsCitT RUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ1Jyk6OmludDIgRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gYXJyYXkgdG8gaW50MgorRVJST1I6ICBjYW5ub3Qg Y2FzdCBqc29uYiBhcnJheSBvciBvYmplY3QgdG8gdHlwZSBzbWFsbGludAorU0VMRUNUICh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNScpOjpmbG9hdDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOyAgLS0gYXJyYXkgdG8gZmxvYXQ0CitFUlJPUjogIGNhbm5vdCBjYXN0IGpz b25iIGFycmF5IG9yIG9iamVjdCB0byB0eXBlIHJlYWwKKy0tIFNlY3Rpb24gNGI6IHR5cGUtbWlz bWF0Y2ggZXJyb3IgdGhyb3VnaCBzdWJzY3JpcHRpbmcgc3ludGF4CitTRUxFQ1QgKHRlc3RfanNv blsnZmllbGQxJ10pOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAn b2JqZWN0JzsgIC0tIHN0cmluZyB0byBudW1lcmljCitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25i IHN0cmluZyB0byB0eXBlIG51bWVyaWMKK1NFTEVDVCAodGVzdF9qc29uWydmaWVsZDEnXSk6Omlu dDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gc3RyaW5n IHRvIGludDgKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgYmlnaW50 CistLSBTZWN0aW9uIDU6IGRpcmVjdCBjYWxscyB0byB0eXBlZCBleHRyYWN0b3IgYnVpbHRpbnMK K1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYygneyJhIjogMX0nOjpqc29uYiwgJ2En KTsKKyBqc29uYl9vYmplY3RfZmllbGRfbnVtZXJpYyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QganNv bmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IDMuMTR9Jzo6anNvbmIsICdhJyk7CisganNv bmJfb2JqZWN0X2ZpZWxkX251bWVyaWMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgICAgICAgIDMuMTQKKygxIHJvdykKKworU0VMRUNUIGpzb25iX29iamVj dF9maWVsZF9ib29sKCd7ImEiOiB0cnVlfSc6Ompzb25iLCAnYScpOworIGpzb25iX29iamVjdF9m aWVsZF9ib29sIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VM RUNUIGpzb25iX29iamVjdF9maWVsZF9ib29sKCd7ImEiOiBmYWxzZX0nOjpqc29uYiwgJ2EnKTsK KyBqc29uYl9vYmplY3RfZmllbGRfYm9vbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBm CisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50NCgneyJhIjogNDJ9Jzo6 anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2ludDQgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgNDIKKygxIHJvdykKKworU0VMRUNUIGpz b25iX29iamVjdF9maWVsZF9pbnQ4KCd7ImEiOiA5ODc2NTQzMjEwfSc6Ompzb25iLCAnYScpOwor IGpzb25iX29iamVjdF9maWVsZF9pbnQ4IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICA5ODc2NTQzMjEwCisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3RfZmll bGRfZmxvYXQ4KCd7ImEiOiAzLjE0fSc6Ompzb25iLCAnYScpOworIGpzb25iX29iamVjdF9maWVs ZF9mbG9hdDggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAg ICAgICAzLjE0CisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50MigneyJh IjogNDJ9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2ludDIgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgNDIKKygxIHJvdykKKwor U0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQyKCd7ImEiOiAzfSc6Ompzb25iLCAnYScpOwor IGpzb25iX29iamVjdF9maWVsZF9pbnQyIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAzCisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3RfZmll bGRfZmxvYXQ0KCd7ImEiOiAzLjE0fSc6Ompzb25iLCAnYScpOworIGpzb25iX29iamVjdF9maWVs ZF9mbG9hdDQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAg ICAgICAzLjE0CisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ0KCd7 ImEiOiAxLjV9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0NCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAxLjUKKygx IHJvdykKKworLS0gZGlyZWN0IGNhbGxzOiBOVUxMIHNlbWFudGljcworU0VMRUNUIGpzb25iX29i amVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAxfSc6Ompzb25iLCAnbWlzc2luZycpOworIGpzb25i X29iamVjdF9maWVsZF9udW1lcmljIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3Rf ZmllbGRfbnVtZXJpYygneyJhIjogbnVsbH0nOjpqc29uYiwgJ2EnKTsKKyBqc29uYl9vYmplY3Rf ZmllbGRfbnVtZXJpYyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Jv b2woJ3siYSI6IHRydWV9Jzo6anNvbmIsICdtaXNzaW5nJyk7CisganNvbmJfb2JqZWN0X2ZpZWxk X2Jvb2wgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBq c29uYl9vYmplY3RfZmllbGRfaW50NCgneyJhIjogMX0nOjpqc29uYiwgJ21pc3NpbmcnKTsKKyBq c29uYl9vYmplY3RfZmllbGRfaW50NCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxk X2ludDQoJ3siYSI6IG51bGx9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2lu dDQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAK KygxIHJvdykKKworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9mbG9hdDgoJ3siYSI6IDEuMH0n Ojpqc29uYiwgJ21pc3NpbmcnKTsKKyBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ4IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93 KQorCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDIoJ3siYSI6IDF9Jzo6anNvbmIsICdt aXNzaW5nJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2ludDIgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworU0VMRUNUIGpzb25i X29iamVjdF9maWVsZF9pbnQyKCd7ImEiOiBudWxsfSc6Ompzb25iLCAnYScpOworIGpzb25iX29i amVjdF9maWVsZF9pbnQyIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg ICAgICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ0 KCd7ImEiOiAxLjB9Jzo6anNvbmIsICdtaXNzaW5nJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2Zs b2F0NCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAg ICAgICAKKygxIHJvdykKKworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9mbG9hdDQoJ3siYSI6 IG51bGx9Jzo6anNvbmIsICdhJyk7CisganNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0NCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJv dykKKworLS0gZGlyZWN0IGNhbGxzOiB0eXBlLW1pc21hdGNoIGVycm9ycworU0VMRUNUIGpzb25i X29iamVjdF9maWVsZF9udW1lcmljKCd7ImEiOiAidGV4dCJ9Jzo6anNvbmIsICdhJyk7CitFUlJP UjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBlIG51bWVyaWMKK1NFTEVDVCBqc29u Yl9vYmplY3RfZmllbGRfYm9vbCgneyJhIjogMX0nOjpqc29uYiwgJ2EnKTsKK0VSUk9SOiAgY2Fu bm90IGNhc3QganNvbmIgbnVtZXJpYyB0byB0eXBlIGJvb2xlYW4KK1NFTEVDVCBqc29uYl9vYmpl Y3RfZmllbGRfbnVtZXJpYygneyJhIjogeyJ4IjoxfX0nOjpqc29uYiwgJ2EnKTsgIC0tIGNvbnRh aW5lciB0byBzY2FsYXIKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgYXJyYXkgb3Igb2JqZWN0 IHRvIHR5cGUgbnVtZXJpYworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQ0KCd7ImEiOiAi dGV4dCJ9Jzo6anNvbmIsICdhJyk7CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0 byB0eXBlIGludGVnZXIKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50OCgneyJhIjogdHJ1 ZX0nOjpqc29uYiwgJ2EnKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgYm9vbGVhbiB0byB0 eXBlIGJpZ2ludAorU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9mbG9hdDgoJ3siYSI6IFsxLDJd fSc6Ompzb25iLCAnYScpOyAgLS0gY29udGFpbmVyIHRvIGZsb2F0OAorRVJST1I6ICBjYW5ub3Qg Y2FzdCBqc29uYiBhcnJheSBvciBvYmplY3QgdG8gdHlwZSBkb3VibGUgcHJlY2lzaW9uCitTRUxF Q1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDIoJ3siYSI6ICJ0ZXh0In0nOjpqc29uYiwgJ2EnKTsg IC0tIHN0cmluZyB0byBpbnQyCitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0 eXBlIHNtYWxsaW50CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0NCgneyJhIjogdHJ1 ZX0nOjpqc29uYiwgJ2EnKTsgIC0tIGJvb2wgdG8gZmxvYXQ0CitFUlJPUjogIGNhbm5vdCBjYXN0 IGpzb25iIGJvb2xlYW4gdG8gdHlwZSByZWFsCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2lu dDIoJ3siYSI6IFsxLDJdfSc6Ompzb25iLCAnYScpOyAgLS0gY29udGFpbmVyIHRvIGludDIKK0VS Uk9SOiAgY2Fubm90IGNhc3QganNvbmIgYXJyYXkgb3Igb2JqZWN0IHRvIHR5cGUgc21hbGxpbnQK K1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ0KCd7ImEiOiB7IngiOjF9fSc6Ompzb25i LCAnYScpOyAgLS0gY29udGFpbmVyIHRvIGZsb2F0NAorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29u YiBhcnJheSBvciBvYmplY3QgdG8gdHlwZSByZWFsCistLSBkaXJlY3QgY2FsbHM6IGludGVnZXIg b3ZlcmZsb3cKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50NCgneyJhIjogOTk5OTk5OTk5 OX0nOjpqc29uYiwgJ2EnKTsKK0VSUk9SOiAgaW50ZWdlciBvdXQgb2YgcmFuZ2UKKy0tIGRpcmVj dCBjYWxsczogaW50MiBvdmVyZmxvdworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQyKCd7 ImEiOiA5OTk5OX0nOjpqc29uYiwgJ2EnKTsKK0VSUk9SOiAgc21hbGxpbnQgb3V0IG9mIHJhbmdl CiBTRUxFQ1QgdGVzdF9qc29uIC0+ICd4JyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBl ID0gJ3NjYWxhcic7CiAgP2NvbHVtbj8gCiAtLS0tLS0tLS0tCkBAIC01ODYsNyArMTA2Niw4IEBA IFNFTEVDVCBqc29uYl9vYmplY3Rfa2V5cyh0ZXN0X2pzb24pIEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKICBmaWVsZDQKICBmaWVsZDUKICBmaWVsZDYKLSg2IHJv d3MpCisgZmllbGQ3CisoNyByb3dzKQogCiAtLSBudWxscwogU0VMRUNUICh0ZXN0X2pzb24tPidm aWVsZDMnKSBJUyBOVUxMIEFTIGV4cGVjdF9mYWxzZSBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29u Yi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwKaW5kZXggZDI4ZWQxYzFlODUu LjYxYzU2NzExMGZjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsCkBAIC0xNTUsNyArMTU1LDEyMyBA QCBDUkVBVEUgVEVNUCBUQUJMRSB0ZXN0X2pzb25iICgKIElOU0VSVCBJTlRPIHRlc3RfanNvbmIg VkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNjYWxhciInKSwKICgnYXJyYXknLCdbInplcm8iLCAib25l IiwidHdvIixudWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10seyJmMSI6OX1dJyksCi0oJ29iamVj dCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51bGwsICJmaWVs ZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsiZjEiOjl9fScpOworKCdvYmpl Y3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwyIiwiZmllbGQzIjpudWxsLCAiZmll bGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYiOiB7ImYxIjo5fSwgImZpZWxkNyI6 IHRydWV9Jyk7CisKKy0tIE9wdGltaXplZCB0eXBlZCBleHRyYWN0aW9uOiB0aGUgcGxhbm5lciBy ZXdyaXRlcyAoai0+J2tleScpOjp0eXBlIGludG8gYQorLS0gZGlyZWN0IHR5cGVkIGV4dHJhY3Rv ciBjYWxsLCBjdXJyZW50bHkgZm9yIG51bWVyaWMsIGJvb2wsIGludDIsIGludDQsIGludDgsCist LSBmbG9hdDQsIGZsb2F0OC4KKworLS0gU2VjdGlvbiAxOiBwbGFubmVyIHJld3JpdGUgdmVyaWZp Y2F0aW9uIChyZXdyaXR0ZW4gdGFyZ2V0cykKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikg U0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikg U0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNycpOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VM RUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBq c29uX3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNU ICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29u X3R5cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdvYmplY3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRl c3RfanNvbiAtPiAnZmllbGQ0Jyk6OmludDIgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3Rf anNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBl ID0gJ29iamVjdCc7CisKKy0tIFNlY3Rpb24gMWI6IHBsYW5uZXIgcmV3cml0ZSB2ZXJpZmljYXRp b24gZm9yIHN1YnNjcmlwdGluZyBzeW50YXgKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikg U0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hF UkUganNvbl90eXBlID0gJ29iamVjdCc7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNF TEVDVCAodGVzdF9qc29uWydmaWVsZDcnXSk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1Qg KHRlc3RfanNvblsnZmllbGQ0J10pOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0 X2pzb25bJ2ZpZWxkNCddKTo6aW50OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0g J29iamVjdCc7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9qc29u WydmaWVsZDQnXSk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29i amVjdCc7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9qc29uWydm aWVsZDQnXSk6OmludDIgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3Qn OworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0 J10pOjpmbG9hdDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOwor CistLSBTZWN0aW9uIDI6IGNvcnJlY3QgZXhlY3V0aW9uIHRocm91Z2ggdGhlIHJld3JpdHRlbiBw YXRoCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pz b25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2Zp ZWxkNycpOjpib29sIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsK K1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hF UkUganNvbl90eXBlID0gJ29iamVjdCc7CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6 OmludDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworU0VMRUNU ICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOworU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQy IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK1NFTEVDVCAodGVz dF9qc29uIC0+ICdmaWVsZDQnKTo6ZmxvYXQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsKKworLS0gU2VjdGlvbiAyYjogY29ycmVjdCBleGVjdXRpb24gdGhyb3Vn aCBzdWJzY3JpcHRpbmcgc3ludGF4CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10pOjpudW1l cmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK1NFTEVDVCAo dGVzdF9qc29uWydmaWVsZDcnXSk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOworU0VMRUNUICh0ZXN0X2pzb25bJ2ZpZWxkNCddKTo6aW50NCBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CitTRUxFQ1QgKHRlc3RfanNvblsn ZmllbGQ0J10pOjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0 JzsKK1NFTEVDVCAodGVzdF9qc29uWydmaWVsZDQnXSk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQ0J10p OjppbnQyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK1NFTEVD VCAodGVzdF9qc29uWydmaWVsZDQnXSk6OmZsb2F0NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7CisKKy0tIFNlY3Rpb24gMzogTlVMTCBzZW1hbnRpY3MgKG1pc3Np bmcga2V5LCBKU09OIG51bGwsIG5vbi1vYmplY3QgaW5wdXQpCitTRUxFQ1QgKHRlc3RfanNvbiAt PiAnZmllbGQzJyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdv YmplY3QnOyAgLS0gSlNPTiBudWxsCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnbm9uZXhpc3RlbnQn KTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAt LSBtaXNzaW5nIGtleQorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ3gnKTo6bnVtZXJpYyBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ2FycmF5JzsgIC0tIG5vbi1vYmplY3QKK1NFTEVD VCAodGVzdF9qc29uIC0+ICdmaWVsZDMnKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGwsIGJvb2wgcGF0aAorU0VMRUNUICh0ZXN0 X2pzb24gLT4gJ2ZpZWxkMycpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUg PSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbCwgaW50NCBwYXRoCitTRUxFQ1QgKHRlc3RfanNvbiAt PiAnbm9uZXhpc3RlbnQnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0g J29iamVjdCc7ICAtLSBtaXNzaW5nIGtleSwgaW50NAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2Zp ZWxkMycpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3Qn OyAgLS0gSlNPTiBudWxsLCBmbG9hdDggcGF0aAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ25vbmV4 aXN0ZW50Jyk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7ICAtLSBtaXNzaW5nIGtleSwgZmxvYXQ4CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQz Jyk6OmludDIgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0g SlNPTiBudWxsLCBpbnQyIHBhdGgKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdub25leGlzdGVudCcp OjppbnQyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIG1p c3Npbmcga2V5LCBpbnQyCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQzJyk6OmZsb2F0NCBG Uk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBKU09OIG51bGws IGZsb2F0NCBwYXRoCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnbm9uZXhpc3RlbnQnKTo6ZmxvYXQ0 IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIG1pc3Npbmcg a2V5LCBmbG9hdDQKKworLS0gU2VjdGlvbiAzYjogTlVMTCBzZW1hbnRpY3MgdGhyb3VnaCBzdWJz Y3JpcHRpbmcgc3ludGF4CitTRUxFQ1QgKHRlc3RfanNvblsnZmllbGQzJ10pOjpudW1lcmljIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIEpTT04gbnVsbAor U0VMRUNUICh0ZXN0X2pzb25bJ25vbmV4aXN0ZW50J10pOjpudW1lcmljIEZST00gdGVzdF9qc29u YiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIG1pc3Npbmcga2V5CitTRUxFQ1QgKHRl c3RfanNvblsnbm9uZXhpc3RlbnQnXSk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7ICAtLSBtaXNzaW5nIGtleSwgZmxvYXQ4CisKKy0tIFNlY3Rpb24g NDogdHlwZS1taXNtYXRjaCBlcnJvcnMgKHNjYWxhciBhbmQgY29udGFpbmVyIHR5cGVzKQorU0VM RUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBudW1lcmljCitTRUxFQ1QgKHRl c3RfanNvbiAtPiAnZmllbGQxJyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOyAgLS0gc3RyaW5nIHRvIGJvb2wKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdm aWVsZDUnKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7ICAtLSBhcnJheSB0byBudW1lcmljCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQxJyk6 OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gc3Ry aW5nIHRvIGludDQKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6aW50OCBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcgdG8gaW50OAor U0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gc3RyaW5nIHRvIGZsb2F0OAorU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkNScpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsgIC0tIGFycmF5IHRvIGludDQKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdm aWVsZDUnKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0 JzsgIC0tIGFycmF5IHRvIGZsb2F0OAorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjpp bnQyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsgIC0tIHN0cmlu ZyB0byBpbnQyCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQxJyk6OmZsb2F0NCBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7ICAtLSBzdHJpbmcgdG8gZmxvYXQ0 CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQ1Jyk6OmludDIgRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOyAgLS0gYXJyYXkgdG8gaW50MgorU0VMRUNUICh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNScpOjpmbG9hdDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOyAgLS0gYXJyYXkgdG8gZmxvYXQ0CisKKy0tIFNlY3Rpb24gNGI6IHR5cGUt bWlzbWF0Y2ggZXJyb3IgdGhyb3VnaCBzdWJzY3JpcHRpbmcgc3ludGF4CitTRUxFQ1QgKHRlc3Rf anNvblsnZmllbGQxJ10pOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUg PSAnb2JqZWN0JzsgIC0tIHN0cmluZyB0byBudW1lcmljCitTRUxFQ1QgKHRlc3RfanNvblsnZmll bGQxJ10pOjppbnQ4IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0Jzsg IC0tIHN0cmluZyB0byBpbnQ4CisKKy0tIFNlY3Rpb24gNTogZGlyZWN0IGNhbGxzIHRvIHR5cGVk IGV4dHJhY3RvciBidWlsdGlucworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmljKCd7 ImEiOiAxfSc6Ompzb25iLCAnYScpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9udW1lcmlj KCd7ImEiOiAzLjE0fSc6Ompzb25iLCAnYScpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9i b29sKCd7ImEiOiB0cnVlfSc6Ompzb25iLCAnYScpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVs ZF9ib29sKCd7ImEiOiBmYWxzZX0nOjpqc29uYiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3Rf ZmllbGRfaW50NCgneyJhIjogNDJ9Jzo6anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0 X2ZpZWxkX2ludDgoJ3siYSI6IDk4NzY1NDMyMTB9Jzo6anNvbmIsICdhJyk7CitTRUxFQ1QganNv bmJfb2JqZWN0X2ZpZWxkX2Zsb2F0OCgneyJhIjogMy4xNH0nOjpqc29uYiwgJ2EnKTsKK1NFTEVD VCBqc29uYl9vYmplY3RfZmllbGRfaW50MigneyJhIjogNDJ9Jzo6anNvbmIsICdhJyk7CitTRUxF Q1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDIoJ3siYSI6IDN9Jzo6anNvbmIsICdhJyk7CitTRUxF Q1QganNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0NCgneyJhIjogMy4xNH0nOjpqc29uYiwgJ2EnKTsK K1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ0KCd7ImEiOiAxLjV9Jzo6anNvbmIsICdh Jyk7CistLSBkaXJlY3QgY2FsbHM6IE5VTEwgc2VtYW50aWNzCitTRUxFQ1QganNvbmJfb2JqZWN0 X2ZpZWxkX251bWVyaWMoJ3siYSI6IDF9Jzo6anNvbmIsICdtaXNzaW5nJyk7CitTRUxFQ1QganNv bmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoJ3siYSI6IG51bGx9Jzo6anNvbmIsICdhJyk7CitTRUxF Q1QganNvbmJfb2JqZWN0X2ZpZWxkX2Jvb2woJ3siYSI6IHRydWV9Jzo6anNvbmIsICdtaXNzaW5n Jyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDQoJ3siYSI6IDF9Jzo6anNvbmIsICdt aXNzaW5nJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDQoJ3siYSI6IG51bGx9Jzo6 anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0OCgneyJhIjogMS4w fSc6Ompzb25iLCAnbWlzc2luZycpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQyKCd7 ImEiOiAxfSc6Ompzb25iLCAnbWlzc2luZycpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9p bnQyKCd7ImEiOiBudWxsfSc6Ompzb25iLCAnYScpOworU0VMRUNUIGpzb25iX29iamVjdF9maWVs ZF9mbG9hdDQoJ3siYSI6IDEuMH0nOjpqc29uYiwgJ21pc3NpbmcnKTsKK1NFTEVDVCBqc29uYl9v YmplY3RfZmllbGRfZmxvYXQ0KCd7ImEiOiBudWxsfSc6Ompzb25iLCAnYScpOworLS0gZGlyZWN0 IGNhbGxzOiB0eXBlLW1pc21hdGNoIGVycm9ycworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9u dW1lcmljKCd7ImEiOiAidGV4dCJ9Jzo6anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0 X2ZpZWxkX2Jvb2woJ3siYSI6IDF9Jzo6anNvbmIsICdhJyk7CitTRUxFQ1QganNvbmJfb2JqZWN0 X2ZpZWxkX251bWVyaWMoJ3siYSI6IHsieCI6MX19Jzo6anNvbmIsICdhJyk7ICAtLSBjb250YWlu ZXIgdG8gc2NhbGFyCitTRUxFQ1QganNvbmJfb2JqZWN0X2ZpZWxkX2ludDQoJ3siYSI6ICJ0ZXh0 In0nOjpqc29uYiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50OCgneyJhIjog dHJ1ZX0nOjpqc29uYiwgJ2EnKTsKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ4KCd7 ImEiOiBbMSwyXX0nOjpqc29uYiwgJ2EnKTsgIC0tIGNvbnRhaW5lciB0byBmbG9hdDgKK1NFTEVD VCBqc29uYl9vYmplY3RfZmllbGRfaW50MigneyJhIjogInRleHQifSc6Ompzb25iLCAnYScpOyAg LS0gc3RyaW5nIHRvIGludDIKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ0KCd7ImEi OiB0cnVlfSc6Ompzb25iLCAnYScpOyAgLS0gYm9vbCB0byBmbG9hdDQKK1NFTEVDVCBqc29uYl9v YmplY3RfZmllbGRfaW50MigneyJhIjogWzEsMl19Jzo6anNvbmIsICdhJyk7ICAtLSBjb250YWlu ZXIgdG8gaW50MgorU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9mbG9hdDQoJ3siYSI6IHsieCI6 MX19Jzo6anNvbmIsICdhJyk7ICAtLSBjb250YWluZXIgdG8gZmxvYXQ0CistLSBkaXJlY3QgY2Fs bHM6IGludGVnZXIgb3ZlcmZsb3cKK1NFTEVDVCBqc29uYl9vYmplY3RfZmllbGRfaW50NCgneyJh IjogOTk5OTk5OTk5OX0nOjpqc29uYiwgJ2EnKTsKKy0tIGRpcmVjdCBjYWxsczogaW50MiBvdmVy ZmxvdworU0VMRUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQyKCd7ImEiOiA5OTk5OX0nOjpqc29u YiwgJ2EnKTsKIAogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdzY2FsYXInOwogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0ZXN0 X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdhcnJheSc7CkBAIC0xNjE0LDQgKzE3MzAsNCBAQCBz ZWxlY3QgKCdbeyJuYW1lIjogImFsaWNlIn0sIHsibmFtZSI6ICJib2IifV0nOjpqc29uYikubmFt ZTsKIHNlbGVjdCAoJ3RydWUnOjpqc29uYik6OmJvb2w7CiBzZWxlY3QgKCd0cnVlJzo6anNvbmIp LmJvb2w7CiBzZWxlY3QgKCd7InRleHQiOiAiaGVsbG8ifSc6Ompzb25iKTo6dGV4dDsKLXNlbGVj dCAoJ3sidGV4dCI6ICJoZWxsbyJ9Jzo6anNvbmIpLnRleHQ7CitzZWxlY3QgKCd7InRleHQiOiAi aGVsbG8ifSc6Ompzb25iKS50ZXh0OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0gCjIu NTIuMAoK --000000000000cd13e2064f22187d Content-Type: application/octet-stream; name="v5-0002-jsonb-optimize-array-element-casts-to-scalar-type.patch" Content-Disposition: attachment; filename="v5-0002-jsonb-optimize-array-element-casts-to-scalar-type.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mntftr0r1 RnJvbSA2MmViNWNiMjI2OGVjNDY4NjY4YTIzMWE1MjNiNGU1ZWFmZWJmNzg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFdlZCwgOCBBcHIgMjAyNiAwMDo0OToxNSAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjUgMi81XSBq c29uYjogb3B0aW1pemUgYXJyYXktZWxlbWVudCBjYXN0cyB0byBzY2FsYXIgdHlwZXMKCkV4dGVu ZCB0aGUgZXhpc3Rpbmcgc3VwcG9ydC1mdW5jdGlvbiByZXdyaXRlIHRvIGpzb25iIGFycmF5LWVs ZW1lbnQKZXh0cmFjdGlvbiwgaW5jbHVkaW5nIGJvdGggLT4gaW50ZWdlciBhbmQgc2luZ2xlLWlu ZGV4IHN1YnNjcmlwdGluZy4KClN1cHBvcnRlZCBjYXN0cyBhcmUgcmV3cml0dGVuIGRpcmVjdGx5 IHRvIGV4cGxpY2l0IHR5cGVkIGV4dHJhY3RvcgpmdW5jdGlvbnMgZm9yIG51bWVyaWMsIGJvb2ws IGludDIsIGludDQsIGludDgsIGZsb2F0NCwgYW5kIGZsb2F0OC4KLS0tCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmIuYyAgICAgICB8IDE1NCArKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25mdW5jcy5jICAgfCAgNjcgKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0ICAgICB8ICAyOCArKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNv bmIub3V0IHwgMzA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pzb25iLnNxbCAgICAgIHwgIDg1ICsrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDU5 MyBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCmluZGV4 IGM4NWQ0ODgyZjIyLi41YWJiNTFkNDdkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKQEAgLTE4MjYs MTUgKzE4MjYsMTQgQEAgY2Fubm90Q2FzdEpzb25iVmFsdWUoZW51bSBqYnZUeXBlIHR5cGUsIGNv bnN0IGNoYXIgKnNxbHR5cGUsIE5vZGUgKmVzY29udGV4dCkKICAqIHByb3N1cHBvcnQgb24gdGhl IGpzb25iX251bWVyaWMsIGpzb25iX2Jvb2wsIGpzb25iX2ludDQsIGpzb25iX2ludDgsIGFuZAog ICoganNvbmJfZmxvYXQ4IGNhdGFsb2cgZW50cmllcy4KICAqCi0gKiBXaGVuIHRoZSBzb2xlIGFy Z3VtZW50IHRvIHRoZSBjYXN0IGlzIGEganNvbmJfb2JqZWN0X2ZpZWxkKCkgY2FsbCAodGhlIC0+ Ci0gKiBvcGVyYXRvciksIHdlIHJlcGxhY2UgdGhlIHR3by1zdGVwIGNhc3QoZXh0cmFjdCguLi4p KSBleHByZXNzaW9uIHdpdGggYQotICogc2luZ2xlIHR5cGVkIGV4dHJhY3RvciB0aGF0IHJlYWRz IHRoZSBzY2FsYXIgZGlyZWN0bHkgZnJvbSB0aGUgaW4tbWVtb3J5Ci0gKiBKc29uYlZhbHVlLCBh dm9pZGluZyBhIHJvdW5kLXRyaXAgdGhyb3VnaCBKc29uYlZhbHVlVG9Kc29uYi4KKyAqIFdoZW4g dGhlIHNvbGUgYXJndW1lbnQgdG8gdGhlIGNhc3QgaXMgYSBqc29uYiBleHRyYWN0aW9uIGNhbGws IHdlIHJlcGxhY2UKKyAqIHRoZSB0d28tc3RlcCBjYXN0KGV4dHJhY3QoLi4uKSkgZXhwcmVzc2lv biB3aXRoIGEgc2luZ2xlIHR5cGVkIGV4dHJhY3RvcgorICogdGhhdCByZWFkcyB0aGUgc2NhbGFy IGRpcmVjdGx5IGZyb20gdGhlIGluLW1lbW9yeSBKc29uYlZhbHVlLCBhdm9pZGluZyBhCisgKiBy b3VuZC10cmlwIHRocm91Z2ggSnNvbmJWYWx1ZVRvSnNvbmIuCiAgKgotICogRm9yIGV4YW1wbGUs IChqIC0+ICdhJyk6Om51bWVyaWMgaXMgcGFyc2VkIGFzOgotICogICBqc29uYl9udW1lcmljKGpz b25iX29iamVjdF9maWVsZChqLCAnYScpKQotICogYW5kIGlzIHJld3JpdHRlbiB0bzoKLSAqICAg anNvbmJfb2JqZWN0X2ZpZWxkX251bWVyaWMoaiwgJ2EnKQorICogU3VwcG9ydGVkIGV4dHJhY3Rp b24gZmFtaWxpZXM6CisgKiAgIC0ganNvbmJfb2JqZWN0X2ZpZWxkKGosICdrZXknKSAgLyAgaiAt PiAna2V5JyAgLyAgalsna2V5J10KKyAqICAgLSBqc29uYl9hcnJheV9lbGVtZW50KGosIGlkeCkg ICAvICBqIC0+IGlkeCAgICAvICBqW2lkeF0KICAqLwogRGF0dW0KIGpzb25iX2Nhc3Rfc3VwcG9y dChQR19GVU5DVElPTl9BUkdTKQpAQCAtMTg4NiwxMSArMTg4NSwxMiBAQCBqc29uYl9jYXN0X3N1 cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKIAkJewogCQkJU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYg PSAoU3Vic2NyaXB0aW5nUmVmICopIGFyZzsKIAkJCU5vZGUJICAgKnN1YnNjcmlwdDsKKwkJCU9p ZAkJCXN1YnNjcmlwdF90eXBlOwogCiAJCQkvKgotCQkJICogT25seSBoYW5kbGUgdGhlIG5hcnJv dyBjYXNlIGVxdWl2YWxlbnQgdG8gb2JqZWN0LWZpZWxkCi0JCQkgKiBleHRyYWN0aW9uOiBhIHNp bmdsZSB0ZXh0LXR5cGVkIHN1YnNjcmlwdCBvbiBhIGpzb25iCi0JCQkgKiBjb250YWluZXIsIHdp dGggbm8gc2xpY2UgYW5kIG5vIGFzc2lnbm1lbnQuCisJCQkgKiBIYW5kbGUgc2luZ2xlLXN1YnNj cmlwdCBqc29uYiBhY2Nlc3Mgd2l0aCBubyBzbGljZSBhbmQgbm8KKwkJCSAqIGFzc2lnbm1lbnQu ICBUZXh0IHN1YnNjcmlwdHMgbWFwIHRvIG9iamVjdC1maWVsZCBleHRyYWN0aW9uOworCQkJICog aW50NCBzdWJzY3JpcHRzIG1hcCB0byBhcnJheS1lbGVtZW50IGV4dHJhY3Rpb24uCiAJCQkgKi8K IAkJCWlmIChzYnNyZWYtPnJlZmNvbnRhaW5lcnR5cGUgIT0gSlNPTkJPSUQpCiAJCQkJUEdfUkVU VVJOX1BPSU5URVIoTlVMTCk7CkBAIC0xOTAyLDU3ICsxOTAyLDExMyBAQCBqc29uYl9jYXN0X3N1 cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKIAog CQkJc3Vic2NyaXB0ID0gKE5vZGUgKikgbGluaXRpYWwoc2JzcmVmLT5yZWZ1cHBlcmluZGV4cHIp OwotCQkJaWYgKGV4cHJUeXBlKHN1YnNjcmlwdCkgIT0gVEVYVE9JRCkKKwkJCXN1YnNjcmlwdF90 eXBlID0gZXhwclR5cGUoc3Vic2NyaXB0KTsKKworCQkJaWYgKHN1YnNjcmlwdF90eXBlID09IFRF WFRPSUQpCisJCQl7CisJCQkJaW5uZXJfZnVuY2lkID0gRl9KU09OQl9PQkpFQ1RfRklFTEQ7CisJ CQkJaW5uZXJfYXJncyA9IGxpc3RfbWFrZTIoc2JzcmVmLT5yZWZleHByLCBzdWJzY3JpcHQpOwor CQkJfQorCQkJZWxzZSBpZiAoc3Vic2NyaXB0X3R5cGUgPT0gSU5UNE9JRCkKKwkJCXsKKwkJCQlp bm5lcl9mdW5jaWQgPSBGX0pTT05CX0FSUkFZX0VMRU1FTlQ7CisJCQkJaW5uZXJfYXJncyA9IGxp c3RfbWFrZTIoc2JzcmVmLT5yZWZleHByLCBzdWJzY3JpcHQpOworCQkJfQorCQkJZWxzZQogCQkJ CVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOwogCi0JCQlpbm5lcl9mdW5jaWQgPSBGX0pTT05CX09C SkVDVF9GSUVMRDsKLQkJCWlubmVyX2FyZ3MgPSBsaXN0X21ha2UyKHNic3JlZi0+cmVmZXhwciwg c3Vic2NyaXB0KTsKIAkJCWxvY2F0aW9uID0gZXhwckxvY2F0aW9uKGFyZyk7CiAJCX0KIAkJZWxz ZQogCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CiAKLQkJLyogT25seSByZXdyaXRlIGpzb25i X29iamVjdF9maWVsZChqc29uYiwgdGV4dCk7IHZlcmlmeSBhcml0eSB0b28gKi8KLQkJaWYgKGlu bmVyX2Z1bmNpZCAhPSBGX0pTT05CX09CSkVDVF9GSUVMRCkKLQkJCVBHX1JFVFVSTl9QT0lOVEVS KE5VTEwpOworCQkvKgorCQkgKiBWZXJpZnkgdGhlIGlubmVyIGV4dHJhY3Rpb24gZnVuY3Rpb24g YW5kIG1hcCB0aGUgb3V0ZXIgY2FzdCB0byB0aGUKKwkJICogY29ycmVzcG9uZGluZyB0eXBlZCBl eHRyYWN0b3IuICBFYWNoIHN1cHBvcnRlZCBleHRyYWN0aW9uIGZhbWlseQorCQkgKiBoYXMgaXRz IG93biBzZXQgb2YgdHlwZWQgcmV3cml0ZSB0YXJnZXRzLgorCQkgKi8KIAkJaWYgKGxpc3RfbGVu Z3RoKGlubmVyX2FyZ3MpICE9IDIpCiAJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKIAotCQkv KiBNYXAgdGhlIG91dGVyIGNhc3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdHlwZWQgZXh0cmFjdG9y ICovCi0JCWlmIChmZXhwci0+ZnVuY2lkID09IEZfTlVNRVJJQ19KU09OQikKLQkJewotCQkJcmVw bGFjZW1lbnRfZnVuY2lkID0gRl9KU09OQl9PQkpFQ1RfRklFTERfTlVNRVJJQzsKLQkJCXJlcGxh Y2VtZW50X3JldHR5cGUgPSBOVU1FUklDT0lEOwotCQl9Ci0JCWVsc2UgaWYgKGZleHByLT5mdW5j aWQgPT0gRl9CT09MX0pTT05CKQotCQl7Ci0JCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pTT05C X09CSkVDVF9GSUVMRF9CT09MOwotCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IEJPT0xPSUQ7Ci0J CX0KLQkJZWxzZSBpZiAoZmV4cHItPmZ1bmNpZCA9PSBGX0lOVDRfSlNPTkIpCisJCWlmIChpbm5l cl9mdW5jaWQgPT0gRl9KU09OQl9PQkpFQ1RfRklFTEQpCiAJCXsKLQkJCXJlcGxhY2VtZW50X2Z1 bmNpZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX0lOVDQ7Ci0JCQlyZXBsYWNlbWVudF9yZXR0eXBl ID0gSU5UNE9JRDsKLQkJfQotCQllbHNlIGlmIChmZXhwci0+ZnVuY2lkID09IEZfSU5UOF9KU09O QikKLQkJewotCQkJcmVwbGFjZW1lbnRfZnVuY2lkID0gRl9KU09OQl9PQkpFQ1RfRklFTERfSU5U ODsKLQkJCXJlcGxhY2VtZW50X3JldHR5cGUgPSBJTlQ4T0lEOwotCQl9Ci0JCWVsc2UgaWYgKGZl eHByLT5mdW5jaWQgPT0gRl9GTE9BVDhfSlNPTkIpCi0JCXsKLQkJCXJlcGxhY2VtZW50X2Z1bmNp ZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX0ZMT0FUODsKLQkJCXJlcGxhY2VtZW50X3JldHR5cGUg PSBGTE9BVDhPSUQ7Ci0JCX0KLQkJZWxzZSBpZiAoZmV4cHItPmZ1bmNpZCA9PSBGX0lOVDJfSlNP TkIpCi0JCXsKLQkJCXJlcGxhY2VtZW50X2Z1bmNpZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX0lO VDI7Ci0JCQlyZXBsYWNlbWVudF9yZXR0eXBlID0gSU5UMk9JRDsKKwkJCWlmIChmZXhwci0+ZnVu Y2lkID09IEZfTlVNRVJJQ19KU09OQikKKwkJCXsKKwkJCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBG X0pTT05CX09CSkVDVF9GSUVMRF9OVU1FUklDOworCQkJCXJlcGxhY2VtZW50X3JldHR5cGUgPSBO VU1FUklDT0lEOworCQkJfQorCQkJZWxzZSBpZiAoZmV4cHItPmZ1bmNpZCA9PSBGX0JPT0xfSlNP TkIpCisJCQl7CisJCQkJcmVwbGFjZW1lbnRfZnVuY2lkID0gRl9KU09OQl9PQkpFQ1RfRklFTERf Qk9PTDsKKwkJCQlyZXBsYWNlbWVudF9yZXR0eXBlID0gQk9PTE9JRDsKKwkJCX0KKwkJCWVsc2Ug aWYgKGZleHByLT5mdW5jaWQgPT0gRl9JTlQ0X0pTT05CKQorCQkJeworCQkJCXJlcGxhY2VtZW50 X2Z1bmNpZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX0lOVDQ7CisJCQkJcmVwbGFjZW1lbnRfcmV0 dHlwZSA9IElOVDRPSUQ7CisJCQl9CisJCQllbHNlIGlmIChmZXhwci0+ZnVuY2lkID09IEZfSU5U OF9KU09OQikKKwkJCXsKKwkJCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pTT05CX09CSkVDVF9G SUVMRF9JTlQ4OworCQkJCXJlcGxhY2VtZW50X3JldHR5cGUgPSBJTlQ4T0lEOworCQkJfQorCQkJ ZWxzZSBpZiAoZmV4cHItPmZ1bmNpZCA9PSBGX0ZMT0FUOF9KU09OQikKKwkJCXsKKwkJCQlyZXBs YWNlbWVudF9mdW5jaWQgPSBGX0pTT05CX09CSkVDVF9GSUVMRF9GTE9BVDg7CisJCQkJcmVwbGFj ZW1lbnRfcmV0dHlwZSA9IEZMT0FUOE9JRDsKKwkJCX0KKwkJCWVsc2UgaWYgKGZleHByLT5mdW5j aWQgPT0gRl9JTlQyX0pTT05CKQorCQkJeworCQkJCXJlcGxhY2VtZW50X2Z1bmNpZCA9IEZfSlNP TkJfT0JKRUNUX0ZJRUxEX0lOVDI7CisJCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IElOVDJPSUQ7 CisJCQl9CisJCQllbHNlIGlmIChmZXhwci0+ZnVuY2lkID09IEZfRkxPQVQ0X0pTT05CKQorCQkJ eworCQkJCXJlcGxhY2VtZW50X2Z1bmNpZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX0ZMT0FUNDsK KwkJCQlyZXBsYWNlbWVudF9yZXR0eXBlID0gRkxPQVQ0T0lEOworCQkJfQorCQkJZWxzZQorCQkJ CVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOwogCQl9Ci0JCWVsc2UgaWYgKGZleHByLT5mdW5jaWQg PT0gRl9GTE9BVDRfSlNPTkIpCisJCWVsc2UgaWYgKGlubmVyX2Z1bmNpZCA9PSBGX0pTT05CX0FS UkFZX0VMRU1FTlQpCiAJCXsKLQkJCXJlcGxhY2VtZW50X2Z1bmNpZCA9IEZfSlNPTkJfT0JKRUNU X0ZJRUxEX0ZMT0FUNDsKLQkJCXJlcGxhY2VtZW50X3JldHR5cGUgPSBGTE9BVDRPSUQ7CisJCQlp ZiAoZmV4cHItPmZ1bmNpZCA9PSBGX05VTUVSSUNfSlNPTkIpCisJCQl7CisJCQkJcmVwbGFjZW1l bnRfZnVuY2lkID0gRl9KU09OQl9BUlJBWV9FTEVNRU5UX05VTUVSSUM7CisJCQkJcmVwbGFjZW1l bnRfcmV0dHlwZSA9IE5VTUVSSUNPSUQ7CisJCQl9CisJCQllbHNlIGlmIChmZXhwci0+ZnVuY2lk ID09IEZfQk9PTF9KU09OQikKKwkJCXsKKwkJCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pTT05C X0FSUkFZX0VMRU1FTlRfQk9PTDsKKwkJCQlyZXBsYWNlbWVudF9yZXR0eXBlID0gQk9PTE9JRDsK KwkJCX0KKwkJCWVsc2UgaWYgKGZleHByLT5mdW5jaWQgPT0gRl9JTlQ0X0pTT05CKQorCQkJewor CQkJCXJlcGxhY2VtZW50X2Z1bmNpZCA9IEZfSlNPTkJfQVJSQVlfRUxFTUVOVF9JTlQ0OworCQkJ CXJlcGxhY2VtZW50X3JldHR5cGUgPSBJTlQ0T0lEOworCQkJfQorCQkJZWxzZSBpZiAoZmV4cHIt PmZ1bmNpZCA9PSBGX0lOVDhfSlNPTkIpCisJCQl7CisJCQkJcmVwbGFjZW1lbnRfZnVuY2lkID0g Rl9KU09OQl9BUlJBWV9FTEVNRU5UX0lOVDg7CisJCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IElO VDhPSUQ7CisJCQl9CisJCQllbHNlIGlmIChmZXhwci0+ZnVuY2lkID09IEZfRkxPQVQ4X0pTT05C KQorCQkJeworCQkJCXJlcGxhY2VtZW50X2Z1bmNpZCA9IEZfSlNPTkJfQVJSQVlfRUxFTUVOVF9G TE9BVDg7CisJCQkJcmVwbGFjZW1lbnRfcmV0dHlwZSA9IEZMT0FUOE9JRDsKKwkJCX0KKwkJCWVs c2UgaWYgKGZleHByLT5mdW5jaWQgPT0gRl9JTlQyX0pTT05CKQorCQkJeworCQkJCXJlcGxhY2Vt ZW50X2Z1bmNpZCA9IEZfSlNPTkJfQVJSQVlfRUxFTUVOVF9JTlQyOworCQkJCXJlcGxhY2VtZW50 X3JldHR5cGUgPSBJTlQyT0lEOworCQkJfQorCQkJZWxzZSBpZiAoZmV4cHItPmZ1bmNpZCA9PSBG X0ZMT0FUNF9KU09OQikKKwkJCXsKKwkJCQlyZXBsYWNlbWVudF9mdW5jaWQgPSBGX0pTT05CX0FS UkFZX0VMRU1FTlRfRkxPQVQ0OworCQkJCXJlcGxhY2VtZW50X3JldHR5cGUgPSBGTE9BVDRPSUQ7 CisJCQl9CisJCQllbHNlCisJCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CiAJCX0KIAkJZWxz ZQogCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMK aW5kZXggYzI2MDU3N2Q4OTUuLmNjOWM1MWM1Y2JmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5j cy5jCkBAIC0xMTE0LDYgKzExMTQsNzMgQEAgREVGSU5FX0pTT05CX09CSkVDVF9GSUVMRF9UWVBF RChqc29uYl9vYmplY3RfZmllbGRfZmxvYXQ4LCBqc29uYl92YWx1ZV90b19mbG9hdDgKIERFRklO RV9KU09OQl9PQkpFQ1RfRklFTERfVFlQRUQoanNvbmJfb2JqZWN0X2ZpZWxkX2ludDIsIGpzb25i X3ZhbHVlX3RvX2ludDJfZGF0dW0pCiBERUZJTkVfSlNPTkJfT0JKRUNUX0ZJRUxEX1RZUEVEKGpz b25iX29iamVjdF9maWVsZF9mbG9hdDQsIGpzb25iX3ZhbHVlX3RvX2Zsb2F0NF9kYXR1bSkKIAor LyoKKyAqIExvb2sgdXAgYW4gZWxlbWVudCBieSBpbmRleCBpbiBhIGpzb25iIGFycmF5IGFuZCBy ZXR1cm4gdGhlIEpzb25iVmFsdWUsCisgKiBvciBOVUxMLiAgUmV0dXJucyBOVUxMICh3aXRob3V0 IGVycm9yKSB3aGVuIHRoZSBpbnB1dCBpcyBub3QgYW4gYXJyYXksCisgKiB0aGUgaW5kZXggaXMg b3V0IG9mIHJhbmdlLCBvciB0aGUgdmFsdWUgaXMgSlNPTiBudWxsLiAgSGFuZGxlcyBuZWdhdGl2 ZQorICogaW5kaWNlcyB0aGUgc2FtZSB3YXkgYXMganNvbmJfYXJyYXlfZWxlbWVudCgpLgorICov CitzdGF0aWMgSnNvbmJWYWx1ZSAqCitqc29uYl9hcnJheV9lbGVtZW50X2xvb2t1cChKc29uYiAq amIsIGludDMyIGVsZW1lbnQpCit7CisJSnNvbmJWYWx1ZSAqdjsKKworCWlmICghSkJfUk9PVF9J U19BUlJBWShqYikpCisJCXJldHVybiBOVUxMOworCisJLyogSGFuZGxlIG5lZ2F0aXZlIHN1YnNj cmlwdCAqLworCWlmIChlbGVtZW50IDwgMCkKKwl7CisJCXVpbnQzMgkJbmVsZW1lbnRzID0gSkJf Uk9PVF9DT1VOVChqYik7CisKKwkJaWYgKHBnX2Fic19zMzIoZWxlbWVudCkgPiBuZWxlbWVudHMp CisJCQlyZXR1cm4gTlVMTDsKKwkJZWxzZQorCQkJZWxlbWVudCArPSBuZWxlbWVudHM7CisJfQor CisJdiA9IGdldEl0aEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKCZqYi0+cm9vdCwgZWxlbWVudCk7 CisKKwkvKiBNaXNzaW5nIGluZGV4IG9yIEpTT04gbnVsbCBib3RoIG1hcCB0byBTUUwgTlVMTCAq LworCWlmICh2ID09IE5VTEwgfHwgdi0+dHlwZSA9PSBqYnZOdWxsKQorCQlyZXR1cm4gTlVMTDsK KworCXJldHVybiB2OworfQorCisvKgorICogVGhpbi13cmFwcGVyIG1hY3JvIGZvciB0aGUganNv bmJfYXJyYXlfZWxlbWVudF88dHlwZT4gZXh0cmFjdG9yIGZhbWlseS4KKyAqIFNhbWUgcGF0dGVy biBhcyBERUZJTkVfSlNPTkJfT0JKRUNUX0ZJRUxEX1RZUEVEIGJ1dCBmb3IgYXJyYXkgZWxlbWVu dHMuCisgKi8KKyNkZWZpbmUgREVGSU5FX0pTT05CX0FSUkFZX0VMRU1FTlRfVFlQRUQoZm5hbWUs IGNvbnZmbikgXAorRGF0dW0gXAorZm5hbWUoUEdfRlVOQ1RJT05fQVJHUykgXAoreyBcCisJSnNv bmIJICAgKmpiID0gUEdfR0VUQVJHX0pTT05CX1AoMCk7IFwKKwlpbnQzMgkJZWxlbWVudCA9IFBH X0dFVEFSR19JTlQzMigxKTsgXAorCUpzb25iVmFsdWUgKnY7IFwKKwlEYXR1bQkJcmVzdWx0OyBc CitcCisJdiA9IGpzb25iX2FycmF5X2VsZW1lbnRfbG9va3VwKGpiLCBlbGVtZW50KTsgXAorCWlm ICh2ID09IE5VTEwpIFwKKwl7IFwKKwkJUEdfRlJFRV9JRl9DT1BZKGpiLCAwKTsgXAorCQlQR19S RVRVUk5fTlVMTCgpOyBcCisJfSBcCitcCisJcmVzdWx0ID0gY29udmZuKHYpOyBcCisJUEdfRlJF RV9JRl9DT1BZKGpiLCAwKTsgXAorCXJldHVybiByZXN1bHQ7IFwKK30KKworREVGSU5FX0pTT05C X0FSUkFZX0VMRU1FTlRfVFlQRUQoanNvbmJfYXJyYXlfZWxlbWVudF9udW1lcmljLCBqc29uYl92 YWx1ZV90b19udW1lcmljX2RhdHVtKQorREVGSU5FX0pTT05CX0FSUkFZX0VMRU1FTlRfVFlQRUQo anNvbmJfYXJyYXlfZWxlbWVudF9ib29sLCBqc29uYl92YWx1ZV90b19ib29sX2RhdHVtKQorREVG SU5FX0pTT05CX0FSUkFZX0VMRU1FTlRfVFlQRUQoanNvbmJfYXJyYXlfZWxlbWVudF9pbnQ0LCBq c29uYl92YWx1ZV90b19pbnQ0X2RhdHVtKQorREVGSU5FX0pTT05CX0FSUkFZX0VMRU1FTlRfVFlQ RUQoanNvbmJfYXJyYXlfZWxlbWVudF9pbnQ4LCBqc29uYl92YWx1ZV90b19pbnQ4X2RhdHVtKQor REVGSU5FX0pTT05CX0FSUkFZX0VMRU1FTlRfVFlQRUQoanNvbmJfYXJyYXlfZWxlbWVudF9mbG9h dDgsIGpzb25iX3ZhbHVlX3RvX2Zsb2F0OF9kYXR1bSkKK0RFRklORV9KU09OQl9BUlJBWV9FTEVN RU5UX1RZUEVEKGpzb25iX2FycmF5X2VsZW1lbnRfaW50MiwganNvbmJfdmFsdWVfdG9faW50Ml9k YXR1bSkKK0RFRklORV9KU09OQl9BUlJBWV9FTEVNRU5UX1RZUEVEKGpzb25iX2FycmF5X2VsZW1l bnRfZmxvYXQ0LCBqc29uYl92YWx1ZV90b19mbG9hdDRfZGF0dW0pCisKIERhdHVtCiBqc29uX2Fy cmF5X2VsZW1lbnQoUEdfRlVOQ1RJT05fQVJHUykKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cmlu ZGV4IDQwNmUwOGRmZmRkLi5hZDc1MmEwYTllMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMjgwNyw1ICsxMjgwNywzMyBAQAogICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRf ZmxvYXQ0JywgcHJvcmV0dHlwZSA9PiAnZmxvYXQ0JywKICAgcHJvYXJndHlwZXMgPT4gJ2pzb25i IHRleHQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbixmaWVsZF9uYW1lfScsCiAgIHByb3Ny YyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX2Zsb2F0NCcgfSwKK3sgb2lkID0+ICc5OTYwJywgZGVz Y3IgPT4gJ2V4dHJhY3QgbnVtZXJpYyBmcm9tIGpzb25iIGFycmF5IGJ5IGVsZW1lbnQgaW5kZXgn LAorICBwcm9uYW1lID0+ICdqc29uYl9hcnJheV9lbGVtZW50X251bWVyaWMnLCBwcm9yZXR0eXBl ID0+ICdudW1lcmljJywKKyAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIGludDQnLCBwcm9hcmduYW1l cyA9PiAne2Zyb21fanNvbixlbGVtZW50X2luZGV4fScsCisgIHByb3NyYyA9PiAnanNvbmJfYXJy YXlfZWxlbWVudF9udW1lcmljJyB9LAoreyBvaWQgPT4gJzk5NjEnLCBkZXNjciA9PiAnZXh0cmFj dCBib29sZWFuIGZyb20ganNvbmIgYXJyYXkgYnkgZWxlbWVudCBpbmRleCcsCisgIHByb25hbWUg PT4gJ2pzb25iX2FycmF5X2VsZW1lbnRfYm9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBw cm9hcmd0eXBlcyA9PiAnanNvbmIgaW50NCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLGVs ZW1lbnRfaW5kZXh9JywKKyAgcHJvc3JjID0+ICdqc29uYl9hcnJheV9lbGVtZW50X2Jvb2wnIH0s Cit7IG9pZCA9PiAnOTk2MicsIGRlc2NyID0+ICdleHRyYWN0IGludDQgZnJvbSBqc29uYiBhcnJh eSBieSBlbGVtZW50IGluZGV4JywKKyAgcHJvbmFtZSA9PiAnanNvbmJfYXJyYXlfZWxlbWVudF9p bnQ0JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsCisgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0 JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sZWxlbWVudF9pbmRleH0nLAorICBwcm9zcmMg PT4gJ2pzb25iX2FycmF5X2VsZW1lbnRfaW50NCcgfSwKK3sgb2lkID0+ICc5OTYzJywgZGVzY3Ig PT4gJ2V4dHJhY3QgaW50OCBmcm9tIGpzb25iIGFycmF5IGJ5IGVsZW1lbnQgaW5kZXgnLAorICBw cm9uYW1lID0+ICdqc29uYl9hcnJheV9lbGVtZW50X2ludDgnLCBwcm9yZXR0eXBlID0+ICdpbnQ4 JywKKyAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIGludDQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21f anNvbixlbGVtZW50X2luZGV4fScsCisgIHByb3NyYyA9PiAnanNvbmJfYXJyYXlfZWxlbWVudF9p bnQ4JyB9LAoreyBvaWQgPT4gJzk5NjQnLCBkZXNjciA9PiAnZXh0cmFjdCBmbG9hdDggZnJvbSBq c29uYiBhcnJheSBieSBlbGVtZW50IGluZGV4JywKKyAgcHJvbmFtZSA9PiAnanNvbmJfYXJyYXlf ZWxlbWVudF9mbG9hdDgnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDgnLAorICBwcm9hcmd0eXBlcyA9 PiAnanNvbmIgaW50NCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLGVsZW1lbnRfaW5kZXh9 JywKKyAgcHJvc3JjID0+ICdqc29uYl9hcnJheV9lbGVtZW50X2Zsb2F0OCcgfSwKK3sgb2lkID0+ ICc5OTgyJywgZGVzY3IgPT4gJ2V4dHJhY3QgaW50MiBmcm9tIGpzb25iIGFycmF5IGJ5IGVsZW1l bnQgaW5kZXgnLAorICBwcm9uYW1lID0+ICdqc29uYl9hcnJheV9lbGVtZW50X2ludDInLCBwcm9y ZXR0eXBlID0+ICdpbnQyJywKKyAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIGludDQnLCBwcm9hcmdu YW1lcyA9PiAne2Zyb21fanNvbixlbGVtZW50X2luZGV4fScsCisgIHByb3NyYyA9PiAnanNvbmJf YXJyYXlfZWxlbWVudF9pbnQyJyB9LAoreyBvaWQgPT4gJzk5ODMnLCBkZXNjciA9PiAnZXh0cmFj dCBmbG9hdDQgZnJvbSBqc29uYiBhcnJheSBieSBlbGVtZW50IGluZGV4JywKKyAgcHJvbmFtZSA9 PiAnanNvbmJfYXJyYXlfZWxlbWVudF9mbG9hdDQnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDQnLAor ICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgaW50NCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29u LGVsZW1lbnRfaW5kZXh9JywKKyAgcHJvc3JjID0+ICdqc29uYl9hcnJheV9lbGVtZW50X2Zsb2F0 NCcgfSwKIAogXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYi5vdXQKaW5kZXggYzMxZmIxMjBkZDguLjM2YmM4MjA5NWJlIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2pzb25iLm91dApAQCAtOTM5LDYgKzkzOSwzMTQgQEAgRVJST1I6ICBpbnRlZ2Vy IG91dCBvZiByYW5nZQogLS0gZGlyZWN0IGNhbGxzOiBpbnQyIG92ZXJmbG93CiBTRUxFQ1QganNv bmJfb2JqZWN0X2ZpZWxkX2ludDIoJ3siYSI6IDk5OTk5fSc6Ompzb25iLCAnYScpOwogRVJST1I6 ICBzbWFsbGludCBvdXQgb2YgcmFuZ2UKKy0tIE9wdGltaXplZCB0eXBlZCBleHRyYWN0aW9uOiBh cnJheS1lbGVtZW50IGZhbWlseQorLS0gVGhlIHBsYW5uZXIgcmV3cml0ZXMgKGotPmlkeCk6OnR5 cGUgYW5kIChqW2lkeF0pOjp0eXBlIGludG8gZGlyZWN0CistLSB0eXBlZCBleHRyYWN0b3IgY2Fs bHMgZm9yIHRoZSBzYW1lIHRhcmdldCB0eXBlcyBhcyB0aGUgb2JqZWN0LWZpZWxkIGZhbWlseS4K Ky0tIENyZWF0ZSBhIHNtYWxsIGZpeHR1cmUgd2l0aCB0eXBlZCBhcnJheSBlbGVtZW50cyBmb3Ig dGVzdGluZworQ1JFQVRFIFRFTVAgVEFCTEUgdGVzdF9qc29uYl9hcnIgKHRlc3RfYXJyIGpzb25i KTsKK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfYXJyIFZBTFVFUyAoJ1sxMCwgMi41LCB0cnVlLCBu dWxsLCAiaGVsbG8iLCBbMSwyXSwgeyJrIjoxfV0nKTsKKy0tIFNlY3Rpb24gQTE6IHBsYW5uZXIg cmV3cml0ZSB2ZXJpZmljYXRpb24gKGFycmF5IGVsZW1lbnQsIG9wZXJhdG9yIGZvcm0pCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9hcnIgLT4gMCk6Om51bWVyaWMg RlJPTSB0ZXN0X2pzb25iX2FycjsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmJfYXJyCisgICBP dXRwdXQ6IGpzb25iX2FycmF5X2VsZW1lbnRfbnVtZXJpYyh0ZXN0X2FyciwgMCkKKygyIHJvd3Mp CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2FyciAtPiAwKTo6 aW50NCBGUk9NIHRlc3RfanNvbmJfYXJyOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYl9hcnIKKyAgIE91 dHB1dDoganNvbmJfYXJyYXlfZWxlbWVudF9pbnQ0KHRlc3RfYXJyLCAwKQorKDIgcm93cykKKwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfYXJyIC0+IDEpOjpmbG9h dDggRlJPTSB0ZXN0X2pzb25iX2FycjsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iX2FycgorICAg T3V0cHV0OiBqc29uYl9hcnJheV9lbGVtZW50X2Zsb2F0OCh0ZXN0X2FyciwgMSkKKygyIHJvd3Mp CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2FyciAtPiAyKTo6 Ym9vbCBGUk9NIHRlc3RfanNvbmJfYXJyOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYl9hcnIKKyAgIE91 dHB1dDoganNvbmJfYXJyYXlfZWxlbWVudF9ib29sKHRlc3RfYXJyLCAyKQorKDIgcm93cykKKwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfYXJyIC0+IDApOjppbnQ4 IEZST00gdGVzdF9qc29uYl9hcnI7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25iX2FycgorICAgT3V0cHV0 OiBqc29uYl9hcnJheV9lbGVtZW50X2ludDgodGVzdF9hcnIsIDApCisoMiByb3dzKQorCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9hcnIgLT4gMCk6OmludDIgRlJP TSB0ZXN0X2pzb25iX2FycjsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmJfYXJyCisgICBPdXRwdXQ6IGpz b25iX2FycmF5X2VsZW1lbnRfaW50Mih0ZXN0X2FyciwgMCkKKygyIHJvd3MpCisKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2FyciAtPiAxKTo6ZmxvYXQ0IEZST00g dGVzdF9qc29uYl9hcnI7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYl9hcnIKKyAgIE91dHB1dDog anNvbmJfYXJyYXlfZWxlbWVudF9mbG9hdDQodGVzdF9hcnIsIDEpCisoMiByb3dzKQorCistLSBT ZWN0aW9uIEExYjogcGxhbm5lciByZXdyaXRlIHZlcmlmaWNhdGlvbiAoYXJyYXkgc3Vic2NyaXB0 aW5nIGZvcm0pCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9hcnJb MF0pOjpudW1lcmljIEZST00gdGVzdF9qc29uYl9hcnI7CisgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pz b25iX2FycgorICAgT3V0cHV0OiBqc29uYl9hcnJheV9lbGVtZW50X251bWVyaWModGVzdF9hcnIs IDApCisoMiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVz dF9hcnJbMF0pOjppbnQ0IEZST00gdGVzdF9qc29uYl9hcnI7CisgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25i X2FycgorICAgT3V0cHV0OiBqc29uYl9hcnJheV9lbGVtZW50X2ludDQodGVzdF9hcnIsIDApCiso MiByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9hcnJb MV0pOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iX2FycjsKKyAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdfdGVtcC50ZXN0X2pzb25i X2FycgorICAgT3V0cHV0OiBqc29uYl9hcnJheV9lbGVtZW50X2Zsb2F0OCh0ZXN0X2FyciwgMSkK KygyIHJvd3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2Fy clsyXSk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iX2FycjsKKyAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmJfYXJy CisgICBPdXRwdXQ6IGpzb25iX2FycmF5X2VsZW1lbnRfYm9vbCh0ZXN0X2FyciwgMikKKygyIHJv d3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2FyclswXSk6 OmludDggRlJPTSB0ZXN0X2pzb25iX2FycjsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmJfYXJyCisgICBP dXRwdXQ6IGpzb25iX2FycmF5X2VsZW1lbnRfaW50OCh0ZXN0X2FyciwgMCkKKygyIHJvd3MpCisK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0ZXN0X2FyclswXSk6OmludDIg RlJPTSB0ZXN0X2pzb25iX2FycjsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmJfYXJyCisgICBPdXRwdXQ6 IGpzb25iX2FycmF5X2VsZW1lbnRfaW50Mih0ZXN0X2FyciwgMCkKKygyIHJvd3MpCisKKy0tIFNl Y3Rpb24gQTFjOiBwbGFubmVyIHJld3JpdGUgdmVyaWZpY2F0aW9uIChkaXJlY3QgZnVuY3Rpb24g Y2FsbCBmb3JtKQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKGpzb25iX2Fy cmF5X2VsZW1lbnQodGVzdF9hcnIsIDApKTo6aW50NCBGUk9NIHRlc3RfanNvbmJfYXJyOworICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBn X3RlbXAudGVzdF9qc29uYl9hcnIKKyAgIE91dHB1dDoganNvbmJfYXJyYXlfZWxlbWVudF9pbnQ0 KHRlc3RfYXJyLCAwKQorKDIgcm93cykKKworLS0gU2VjdGlvbiBBMjogY29ycmVjdCBleGVjdXRp b24gdGhyb3VnaCByZXdyaXR0ZW4gcGF0aAorU0VMRUNUICh0ZXN0X2FyciAtPiAwKTo6aW50NCBG Uk9NIHRlc3RfanNvbmJfYXJyOworIGludDQgCistLS0tLS0KKyAgIDEwCisoMSByb3cpCisKK1NF TEVDVCAodGVzdF9hcnIgLT4gMCk6OmludDggRlJPTSB0ZXN0X2pzb25iX2FycjsKKyBpbnQ4IAor LS0tLS0tCisgICAxMAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfYXJyIC0+IDApOjpudW1lcmlj IEZST00gdGVzdF9qc29uYl9hcnI7CisgbnVtZXJpYyAKKy0tLS0tLS0tLQorICAgICAgMTAKKygx IHJvdykKKworU0VMRUNUICh0ZXN0X2FyciAtPiAxKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYl9h cnI7CisgZmxvYXQ4IAorLS0tLS0tLS0KKyAgICAyLjUKKygxIHJvdykKKworU0VMRUNUICh0ZXN0 X2FyciAtPiAyKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmJfYXJyOworIGJvb2wgCistLS0tLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9hcnIgLT4gMCk6OmludDIgRlJPTSB0ZXN0X2pzb25i X2FycjsKKyBpbnQyIAorLS0tLS0tCisgICAxMAorKDEgcm93KQorCitTRUxFQ1QgKHRlc3RfYXJy IC0+IDEpOjpmbG9hdDQgRlJPTSB0ZXN0X2pzb25iX2FycjsKKyBmbG9hdDQgCistLS0tLS0tLQor ICAgIDIuNQorKDEgcm93KQorCistLSBTZWN0aW9uIEEyYjogY29ycmVjdCBleGVjdXRpb24gdGhy b3VnaCBzdWJzY3JpcHRpbmcKK1NFTEVDVCAodGVzdF9hcnJbMF0pOjppbnQ0IEZST00gdGVzdF9q c29uYl9hcnI7CisgdGVzdF9hcnIgCistLS0tLS0tLS0tCisgICAgICAgMTAKKygxIHJvdykKKwor U0VMRUNUICh0ZXN0X2FyclsxXSk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmJfYXJyOworIHRlc3Rf YXJyIAorLS0tLS0tLS0tLQorICAgICAgMi41CisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9hcnJb Ml0pOjpib29sIEZST00gdGVzdF9qc29uYl9hcnI7CisgdGVzdF9hcnIgCistLS0tLS0tLS0tCisg dAorKDEgcm93KQorCistLSBTZWN0aW9uIEEzOiBOVUxMIHNlbWFudGljcworU0VMRUNUICh0ZXN0 X2FyciAtPiA5OSk6OmludDQgRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIG91dCBvZiByYW5nZQor IGludDQgCistLS0tLS0KKyAgICAgCisoMSByb3cpCisKK1NFTEVDVCAodGVzdF9hcnIgLT4gMyk6 Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIEpTT04gbnVsbCBlbGVtZW50CisgbnVt ZXJpYyAKKy0tLS0tLS0tLQorICAgICAgICAKKygxIHJvdykKKworU0VMRUNUICh0ZXN0X2FyciAt PiAtMSk6OmludDQgRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIG5lZ2F0aXZlOiBsYXN0IGVsZW1l bnQgaXMgb2JqZWN0LCB3cm9uZyB0eXBlIHdvdWxkIGVycm9yOyB1c2UgLTQgZm9yIG51bGwKK0VS Uk9SOiAgY2Fubm90IGNhc3QganNvbmIgYXJyYXkgb3Igb2JqZWN0IHRvIHR5cGUgaW50ZWdlcgor U0VMRUNUICh0ZXN0X2FyciAtPiAtNCk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0t IG5lZ2F0aXZlIGluZGV4IHBvaW50aW5nIHRvIG51bGwgZWxlbWVudAorIG51bWVyaWMgCistLS0t LS0tLS0KKyAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCAoJ3siayI6MX0nOjpqc29uYiAtPiAw KTo6aW50NDsgIC0tIG5vbi1hcnJheSBpbnB1dAorIGludDQgCistLS0tLS0KKyAgICAgCisoMSBy b3cpCisKK1NFTEVDVCAodGVzdF9hcnIgLT4gOTkpOjppbnQyIEZST00gdGVzdF9qc29uYl9hcnI7 ICAtLSBvdXQgb2YgcmFuZ2UsIGludDIKKyBpbnQyIAorLS0tLS0tCisgICAgIAorKDEgcm93KQor CitTRUxFQ1QgKHRlc3RfYXJyIC0+IDMpOjpmbG9hdDQgRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0t IEpTT04gbnVsbCBlbGVtZW50LCBmbG9hdDQKKyBmbG9hdDQgCistLS0tLS0tLQorICAgICAgIAor KDEgcm93KQorCistLSBTZWN0aW9uIEEzYjogTlVMTCB0aHJvdWdoIHN1YnNjcmlwdGluZworU0VM RUNUICh0ZXN0X2Fycls5OV0pOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIG91dCBv ZiByYW5nZQorIHRlc3RfYXJyIAorLS0tLS0tLS0tLQorICAgICAgICAgCisoMSByb3cpCisKK1NF TEVDVCAodGVzdF9hcnJbM10pOjppbnQ4IEZST00gdGVzdF9qc29uYl9hcnI7ICAtLSBKU09OIG51 bGwgZWxlbWVudAorIHRlc3RfYXJyIAorLS0tLS0tLS0tLQorICAgICAgICAgCisoMSByb3cpCisK Ky0tIFNlY3Rpb24gQTQ6IHR5cGUtbWlzbWF0Y2ggZXJyb3JzCitTRUxFQ1QgKHRlc3RfYXJyIC0+ IDQpOjppbnQ0IEZST00gdGVzdF9qc29uYl9hcnI7ICAtLSBzdHJpbmcgdG8gaW50NAorRVJST1I6 ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBpbnRlZ2VyCitTRUxFQ1QgKHRlc3Rf YXJyIC0+IDQpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIHN0cmluZyB0byBmbG9h dDgKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgZG91YmxlIHByZWNp c2lvbgorU0VMRUNUICh0ZXN0X2FyciAtPiA1KTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmJfYXJy OyAgLS0gYXJyYXkgY29udGFpbmVyIHRvIG51bWVyaWMKK0VSUk9SOiAgY2Fubm90IGNhc3QganNv bmIgYXJyYXkgb3Igb2JqZWN0IHRvIHR5cGUgbnVtZXJpYworU0VMRUNUICh0ZXN0X2FyciAtPiA2 KTo6aW50OCBGUk9NIHRlc3RfanNvbmJfYXJyOyAgLS0gb2JqZWN0IGNvbnRhaW5lciB0byBpbnQ4 CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGFycmF5IG9yIG9iamVjdCB0byB0eXBlIGJpZ2lu dAorU0VMRUNUICh0ZXN0X2FyciAtPiAyKTo6aW50NCBGUk9NIHRlc3RfanNvbmJfYXJyOyAgLS0g Ym9vbCB0byBpbnQ0CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGJvb2xlYW4gdG8gdHlwZSBp bnRlZ2VyCitTRUxFQ1QgKHRlc3RfYXJyIC0+IDQpOjppbnQyIEZST00gdGVzdF9qc29uYl9hcnI7 ICAtLSBzdHJpbmcgdG8gaW50MgorRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8g dHlwZSBzbWFsbGludAorU0VMRUNUICh0ZXN0X2FyciAtPiA0KTo6ZmxvYXQ0IEZST00gdGVzdF9q c29uYl9hcnI7ICAtLSBzdHJpbmcgdG8gZmxvYXQ0CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25i IHN0cmluZyB0byB0eXBlIHJlYWwKKy0tIFNlY3Rpb24gQTRiOiBlcnJvciB0aHJvdWdoIHN1YnNj cmlwdGluZworU0VMRUNUICh0ZXN0X2Fycls0XSk6OmludDggRlJPTSB0ZXN0X2pzb25iX2Fycjsg IC0tIHN0cmluZyB0byBpbnQ4CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0 eXBlIGJpZ2ludAorLS0gU2VjdGlvbiBBNTogZGlyZWN0IGNhbGxzIHRvIGFycmF5LWVsZW1lbnQg dHlwZWQgZXh0cmFjdG9yIGJ1aWx0aW5zCitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9pbnQ0 KCdbMTAsIDIwLCAzMF0nOjpqc29uYiwgMCk7CisganNvbmJfYXJyYXlfZWxlbWVudF9pbnQ0IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgMTAKKygx IHJvdykKKworU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRfaW50OCgnWzEwLCAyMCwgMzBdJzo6 anNvbmIsIDEpOworIGpzb25iX2FycmF5X2VsZW1lbnRfaW50OCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIDIwCisoMSByb3cpCisKK1NFTEVDVCBq c29uYl9hcnJheV9lbGVtZW50X2Zsb2F0OCgnWzEuNSwgMi41XSc6Ompzb25iLCAwKTsKKyBqc29u Yl9hcnJheV9lbGVtZW50X2Zsb2F0OCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgICAgICAgICAgICAgIDEuNQorKDEgcm93KQorCitTRUxFQ1QganNvbmJfYXJyYXlf ZWxlbWVudF9udW1lcmljKCdbMy4xNF0nOjpqc29uYiwgMCk7CisganNvbmJfYXJyYXlfZWxlbWVu dF9udW1lcmljIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg ICAgICAgICAgIDMuMTQKKygxIHJvdykKKworU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRfYm9v bCgnW3RydWUsIGZhbHNlXSc6Ompzb25iLCAxKTsKKyBqc29uYl9hcnJheV9lbGVtZW50X2Jvb2wg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworLS0gZGlyZWN0IGNh bGxzOiBOVUxMIHNlbWFudGljcworU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRfaW50NCgnWzEs IDJdJzo6anNvbmIsIDUpOyAgLS0gb3V0IG9mIHJhbmdlCisganNvbmJfYXJyYXlfZWxlbWVudF9p bnQ0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAKKygxIHJvdykKKworU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRfaW50NCgnWzEsIG51bGws IDNdJzo6anNvbmIsIDEpOyAgLS0gSlNPTiBudWxsCisganNvbmJfYXJyYXlfZWxlbWVudF9pbnQ0 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAK KygxIHJvdykKKworU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRfZmxvYXQ4KCd7ImEiOjF9Jzo6 anNvbmIsIDApOyAgLS0gbm9uLWFycmF5CisganNvbmJfYXJyYXlfZWxlbWVudF9mbG9hdDggCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAK KygxIHJvdykKKworLS0gZGlyZWN0IGNhbGxzOiB0eXBlLW1pc21hdGNoIGVycm9ycworU0VMRUNU IGpzb25iX2FycmF5X2VsZW1lbnRfaW50NCgnWyJ0ZXh0Il0nOjpqc29uYiwgMCk7CitFUlJPUjog IGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBlIGludGVnZXIKK1NFTEVDVCBqc29uYl9h cnJheV9lbGVtZW50X2ludDgoJ1t0cnVlXSc6Ompzb25iLCAwKTsKK0VSUk9SOiAgY2Fubm90IGNh c3QganNvbmIgYm9vbGVhbiB0byB0eXBlIGJpZ2ludAorU0VMRUNUIGpzb25iX2FycmF5X2VsZW1l bnRfZmxvYXQ4KCdbWzEsMl1dJzo6anNvbmIsIDApOyAgLS0gY29udGFpbmVyIHRvIGZsb2F0OAor RVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJheSBvciBvYmplY3QgdG8gdHlwZSBkb3VibGUg cHJlY2lzaW9uCitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9pbnQyKCdbMTAsIDIwXSc6Ompz b25iLCAwKTsKKyBqc29uYl9hcnJheV9lbGVtZW50X2ludDIgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAxMAorKDEgcm93KQorCitTRUxFQ1QganNv bmJfYXJyYXlfZWxlbWVudF9mbG9hdDQoJ1szLjE0LCAyLjVdJzo6anNvbmIsIDEpOworIGpzb25i X2FycmF5X2VsZW1lbnRfZmxvYXQ0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAgMi41CisoMSByb3cpCisKIFNFTEVDVCB0ZXN0X2pzb24gLT4g J3gnIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKICA/Y29sdW1u PyAKIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNx bCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAppbmRleCA2MWM1NjcxMTBmYy4uNjlj MjE3NzZmODQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwKQEAgLTI3Myw2ICsyNzMsOTEgQEAgU0VM RUNUIGpzb25iX29iamVjdF9maWVsZF9pbnQ0KCd7ImEiOiA5OTk5OTk5OTk5fSc6Ompzb25iLCAn YScpOwogLS0gZGlyZWN0IGNhbGxzOiBpbnQyIG92ZXJmbG93CiBTRUxFQ1QganNvbmJfb2JqZWN0 X2ZpZWxkX2ludDIoJ3siYSI6IDk5OTk5fSc6Ompzb25iLCAnYScpOwogCistLSBPcHRpbWl6ZWQg dHlwZWQgZXh0cmFjdGlvbjogYXJyYXktZWxlbWVudCBmYW1pbHkKKy0tIFRoZSBwbGFubmVyIHJl d3JpdGVzIChqLT5pZHgpOjp0eXBlIGFuZCAoaltpZHhdKTo6dHlwZSBpbnRvIGRpcmVjdAorLS0g dHlwZWQgZXh0cmFjdG9yIGNhbGxzIGZvciB0aGUgc2FtZSB0YXJnZXQgdHlwZXMgYXMgdGhlIG9i amVjdC1maWVsZCBmYW1pbHkuCisKKy0tIENyZWF0ZSBhIHNtYWxsIGZpeHR1cmUgd2l0aCB0eXBl ZCBhcnJheSBlbGVtZW50cyBmb3IgdGVzdGluZworQ1JFQVRFIFRFTVAgVEFCTEUgdGVzdF9qc29u Yl9hcnIgKHRlc3RfYXJyIGpzb25iKTsKK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfYXJyIFZBTFVF UyAoJ1sxMCwgMi41LCB0cnVlLCBudWxsLCAiaGVsbG8iLCBbMSwyXSwgeyJrIjoxfV0nKTsKKwor LS0gU2VjdGlvbiBBMTogcGxhbm5lciByZXdyaXRlIHZlcmlmaWNhdGlvbiAoYXJyYXkgZWxlbWVu dCwgb3BlcmF0b3IgZm9ybSkKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICh0 ZXN0X2FyciAtPiAwKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmJfYXJyOworRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfYXJyIC0+IDApOjppbnQ0IEZST00gdGVzdF9q c29uYl9hcnI7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9hcnIg LT4gMSk6OmZsb2F0OCBGUk9NIHRlc3RfanNvbmJfYXJyOworRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKSBTRUxFQ1QgKHRlc3RfYXJyIC0+IDIpOjpib29sIEZST00gdGVzdF9qc29uYl9hcnI7 CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9hcnIgLT4gMCk6Omlu dDggRlJPTSB0ZXN0X2pzb25iX2FycjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VM RUNUICh0ZXN0X2FyciAtPiAwKTo6aW50MiBGUk9NIHRlc3RfanNvbmJfYXJyOworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfYXJyIC0+IDEpOjpmbG9hdDQgRlJPTSB0 ZXN0X2pzb25iX2FycjsKKworLS0gU2VjdGlvbiBBMWI6IHBsYW5uZXIgcmV3cml0ZSB2ZXJpZmlj YXRpb24gKGFycmF5IHN1YnNjcmlwdGluZyBmb3JtKQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKSBTRUxFQ1QgKHRlc3RfYXJyWzBdKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmJfYXJyOwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKHRlc3RfYXJyWzBdKTo6aW50NCBG Uk9NIHRlc3RfanNvbmJfYXJyOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1Qg KHRlc3RfYXJyWzFdKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYl9hcnI7CitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9hcnJbMl0pOjpib29sIEZST00gdGVzdF9qc29u Yl9hcnI7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAodGVzdF9hcnJbMF0p OjppbnQ4IEZST00gdGVzdF9qc29uYl9hcnI7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp IFNFTEVDVCAodGVzdF9hcnJbMF0pOjppbnQyIEZST00gdGVzdF9qc29uYl9hcnI7CisKKy0tIFNl Y3Rpb24gQTFjOiBwbGFubmVyIHJld3JpdGUgdmVyaWZpY2F0aW9uIChkaXJlY3QgZnVuY3Rpb24g Y2FsbCBmb3JtKQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKGpzb25iX2Fy cmF5X2VsZW1lbnQodGVzdF9hcnIsIDApKTo6aW50NCBGUk9NIHRlc3RfanNvbmJfYXJyOworCist LSBTZWN0aW9uIEEyOiBjb3JyZWN0IGV4ZWN1dGlvbiB0aHJvdWdoIHJld3JpdHRlbiBwYXRoCitT RUxFQ1QgKHRlc3RfYXJyIC0+IDApOjppbnQ0IEZST00gdGVzdF9qc29uYl9hcnI7CitTRUxFQ1Qg KHRlc3RfYXJyIC0+IDApOjppbnQ4IEZST00gdGVzdF9qc29uYl9hcnI7CitTRUxFQ1QgKHRlc3Rf YXJyIC0+IDApOjpudW1lcmljIEZST00gdGVzdF9qc29uYl9hcnI7CitTRUxFQ1QgKHRlc3RfYXJy IC0+IDEpOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iX2FycjsKK1NFTEVDVCAodGVzdF9hcnIgLT4g Mik6OmJvb2wgRlJPTSB0ZXN0X2pzb25iX2FycjsKK1NFTEVDVCAodGVzdF9hcnIgLT4gMCk6Omlu dDIgRlJPTSB0ZXN0X2pzb25iX2FycjsKK1NFTEVDVCAodGVzdF9hcnIgLT4gMSk6OmZsb2F0NCBG Uk9NIHRlc3RfanNvbmJfYXJyOworCistLSBTZWN0aW9uIEEyYjogY29ycmVjdCBleGVjdXRpb24g dGhyb3VnaCBzdWJzY3JpcHRpbmcKK1NFTEVDVCAodGVzdF9hcnJbMF0pOjppbnQ0IEZST00gdGVz dF9qc29uYl9hcnI7CitTRUxFQ1QgKHRlc3RfYXJyWzFdKTo6ZmxvYXQ4IEZST00gdGVzdF9qc29u Yl9hcnI7CitTRUxFQ1QgKHRlc3RfYXJyWzJdKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmJfYXJyOwor CistLSBTZWN0aW9uIEEzOiBOVUxMIHNlbWFudGljcworU0VMRUNUICh0ZXN0X2FyciAtPiA5OSk6 OmludDQgRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIG91dCBvZiByYW5nZQorU0VMRUNUICh0ZXN0 X2FyciAtPiAzKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmJfYXJyOyAgLS0gSlNPTiBudWxsIGVs ZW1lbnQKK1NFTEVDVCAodGVzdF9hcnIgLT4gLTEpOjppbnQ0IEZST00gdGVzdF9qc29uYl9hcnI7 ICAtLSBuZWdhdGl2ZTogbGFzdCBlbGVtZW50IGlzIG9iamVjdCwgd3JvbmcgdHlwZSB3b3VsZCBl cnJvcjsgdXNlIC00IGZvciBudWxsCitTRUxFQ1QgKHRlc3RfYXJyIC0+IC00KTo6bnVtZXJpYyBG Uk9NIHRlc3RfanNvbmJfYXJyOyAgLS0gbmVnYXRpdmUgaW5kZXggcG9pbnRpbmcgdG8gbnVsbCBl bGVtZW50CitTRUxFQ1QgKCd7ImsiOjF9Jzo6anNvbmIgLT4gMCk6OmludDQ7ICAtLSBub24tYXJy YXkgaW5wdXQKK1NFTEVDVCAodGVzdF9hcnIgLT4gOTkpOjppbnQyIEZST00gdGVzdF9qc29uYl9h cnI7ICAtLSBvdXQgb2YgcmFuZ2UsIGludDIKK1NFTEVDVCAodGVzdF9hcnIgLT4gMyk6OmZsb2F0 NCBGUk9NIHRlc3RfanNvbmJfYXJyOyAgLS0gSlNPTiBudWxsIGVsZW1lbnQsIGZsb2F0NAorCist LSBTZWN0aW9uIEEzYjogTlVMTCB0aHJvdWdoIHN1YnNjcmlwdGluZworU0VMRUNUICh0ZXN0X2Fy cls5OV0pOjpmbG9hdDggRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIG91dCBvZiByYW5nZQorU0VM RUNUICh0ZXN0X2FyclszXSk6OmludDggRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIEpTT04gbnVs bCBlbGVtZW50CisKKy0tIFNlY3Rpb24gQTQ6IHR5cGUtbWlzbWF0Y2ggZXJyb3JzCitTRUxFQ1Qg KHRlc3RfYXJyIC0+IDQpOjppbnQ0IEZST00gdGVzdF9qc29uYl9hcnI7ICAtLSBzdHJpbmcgdG8g aW50NAorU0VMRUNUICh0ZXN0X2FyciAtPiA0KTo6ZmxvYXQ4IEZST00gdGVzdF9qc29uYl9hcnI7 ICAtLSBzdHJpbmcgdG8gZmxvYXQ4CitTRUxFQ1QgKHRlc3RfYXJyIC0+IDUpOjpudW1lcmljIEZS T00gdGVzdF9qc29uYl9hcnI7ICAtLSBhcnJheSBjb250YWluZXIgdG8gbnVtZXJpYworU0VMRUNU ICh0ZXN0X2FyciAtPiA2KTo6aW50OCBGUk9NIHRlc3RfanNvbmJfYXJyOyAgLS0gb2JqZWN0IGNv bnRhaW5lciB0byBpbnQ4CitTRUxFQ1QgKHRlc3RfYXJyIC0+IDIpOjppbnQ0IEZST00gdGVzdF9q c29uYl9hcnI7ICAtLSBib29sIHRvIGludDQKK1NFTEVDVCAodGVzdF9hcnIgLT4gNCk6OmludDIg RlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIHN0cmluZyB0byBpbnQyCitTRUxFQ1QgKHRlc3RfYXJy IC0+IDQpOjpmbG9hdDQgRlJPTSB0ZXN0X2pzb25iX2FycjsgIC0tIHN0cmluZyB0byBmbG9hdDQK KworLS0gU2VjdGlvbiBBNGI6IGVycm9yIHRocm91Z2ggc3Vic2NyaXB0aW5nCitTRUxFQ1QgKHRl c3RfYXJyWzRdKTo6aW50OCBGUk9NIHRlc3RfanNvbmJfYXJyOyAgLS0gc3RyaW5nIHRvIGludDgK KworLS0gU2VjdGlvbiBBNTogZGlyZWN0IGNhbGxzIHRvIGFycmF5LWVsZW1lbnQgdHlwZWQgZXh0 cmFjdG9yIGJ1aWx0aW5zCitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9pbnQ0KCdbMTAsIDIw LCAzMF0nOjpqc29uYiwgMCk7CitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9pbnQ4KCdbMTAs IDIwLCAzMF0nOjpqc29uYiwgMSk7CitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9mbG9hdDgo J1sxLjUsIDIuNV0nOjpqc29uYiwgMCk7CitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9udW1l cmljKCdbMy4xNF0nOjpqc29uYiwgMCk7CitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9ib29s KCdbdHJ1ZSwgZmFsc2VdJzo6anNvbmIsIDEpOworLS0gZGlyZWN0IGNhbGxzOiBOVUxMIHNlbWFu dGljcworU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRfaW50NCgnWzEsIDJdJzo6anNvbmIsIDUp OyAgLS0gb3V0IG9mIHJhbmdlCitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9pbnQ0KCdbMSwg bnVsbCwgM10nOjpqc29uYiwgMSk7ICAtLSBKU09OIG51bGwKK1NFTEVDVCBqc29uYl9hcnJheV9l bGVtZW50X2Zsb2F0OCgneyJhIjoxfSc6Ompzb25iLCAwKTsgIC0tIG5vbi1hcnJheQorLS0gZGly ZWN0IGNhbGxzOiB0eXBlLW1pc21hdGNoIGVycm9ycworU0VMRUNUIGpzb25iX2FycmF5X2VsZW1l bnRfaW50NCgnWyJ0ZXh0Il0nOjpqc29uYiwgMCk7CitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVu dF9pbnQ4KCdbdHJ1ZV0nOjpqc29uYiwgMCk7CitTRUxFQ1QganNvbmJfYXJyYXlfZWxlbWVudF9m bG9hdDgoJ1tbMSwyXV0nOjpqc29uYiwgMCk7ICAtLSBjb250YWluZXIgdG8gZmxvYXQ4CitTRUxF Q1QganNvbmJfYXJyYXlfZWxlbWVudF9pbnQyKCdbMTAsIDIwXSc6Ompzb25iLCAwKTsKK1NFTEVD VCBqc29uYl9hcnJheV9lbGVtZW50X2Zsb2F0NCgnWzMuMTQsIDIuNV0nOjpqc29uYiwgMSk7CisK KwogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdzY2FsYXInOwogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdhcnJheSc7CiBTRUxFQ1QgdGVzdF9qc29uIC0+ICd4JyBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7Ci0tIAoyLjUyLjAKCg== --000000000000cd13e2064f22187d--