<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>115387</bug_id>
          
          <creation_ts>2013-04-29 17:16:59 -0700</creation_ts>
          <short_desc>[webkitpy] Need suggest-emeriti command</short_desc>
          <delta_ts>2018-02-01 10:29:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=153591</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=163318</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>115391</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Glenn Adams">glenn</reporter>
          <assigned_to name="Glenn Adams">glenn</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dpranke</cc>
    
    <cc>lforschler</cc>
    
    <cc>mjs</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>882847</commentid>
    <comment_count>0</comment_count>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-04-29 17:16:59 -0700</bug_when>
    <thetext>There should be a suggest-emeriti command that complements to suggest-nominations, and which suggests committers and/or reviewers to be &quot;retired&quot; to an emeritus role.

See the thread at [1].

[1] https://lists.webkit.org/pipermail/webkit-dev/2013-April/024450.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884441</commentid>
    <comment_count>1</comment_count>
      <attachid>200509</attachid>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-05-03 16:51:36 -0700</bug_when>
    <thetext>Created attachment 200509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884468</commentid>
    <comment_count>2</comment_count>
      <attachid>200509</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-05-03 20:43:57 -0700</bug_when>
    <thetext>Comment on attachment 200509
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=200509&amp;action=review

Really cool!

I think you could have get away with a single command :)

I cannot review this right now but here is some comments I have from looking over the patch:

&gt; Tools/ChangeLog:59
&gt; +        (SuggestNominations._count_recent_patches): Add require_reviews option, which differs from suggest-nominations and suggest-emeriti.

Why not just catch the exception from the call site in SuggestEmeriti?

&gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:2
&gt; +# Copyright (c) 2011 Google Inc. All rights reserved.
&gt; +# Copyright (c) 2011 Code Aurora Forum. All rights reserved.

It this right?

&gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:115
&gt; +            # skip committers that are reviewers

Comment style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884481</commentid>
    <comment_count>3</comment_count>
      <attachid>200516</attachid>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-05-03 23:26:04 -0700</bug_when>
    <thetext>Created attachment 200516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884483</commentid>
    <comment_count>4</comment_count>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-05-03 23:32:03 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 200509 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=200509&amp;action=review
&gt; 
&gt; Really cool!
&gt; 
&gt; I think you could have get away with a single command :)

I suppose you mean I could have implemented this as an option on suggest-nominations. Yes, that would have been possible, at the cost of merging somewhat unrelated functionality. I prefer smaller modules with less surface area, making mods easier, etc.

&gt; 
&gt; I cannot review this right now but here is some comments I have from looking over the patch:
&gt; 
&gt; &gt; Tools/ChangeLog:59
&gt; &gt; +        (SuggestNominations._count_recent_patches): Add require_reviews option, which differs from suggest-nominations and suggest-emeriti.
&gt; 
&gt; Why not just catch the exception from the call site in SuggestEmeriti?

In SuggestNominations, we need to treat missing reviewer as an error condition, raising exception without returning a commit dict; but in SuggestEmeriti lack of reviewer isn&apos;t an error, and we want the commit object. I suppose I could handle this by returning a commit object in both cases, and have SuggestNominations merely skip it if reviewers is empty. In which case I could remove the CommitLogMissingReviewer class.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:2
&gt; &gt; +# Copyright (c) 2011 Google Inc. All rights reserved.
&gt; &gt; +# Copyright (c) 2011 Code Aurora Forum. All rights reserved.
&gt; 
&gt; It this right?

Fixed. I thought of this after I posted the earlier patch.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:115
&gt; &gt; +            # skip committers that are reviewers
&gt; 
&gt; Comment style.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886501</commentid>
    <comment_count>5</comment_count>
      <attachid>200516</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-05-08 16:05:27 -0700</bug_when>
    <thetext>Comment on attachment 200516
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=200516&amp;action=review

&gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:72
&gt; +            reviewers_cache = activity[&apos;reviewers_cache&apos;]

Do we really need this? It is not like performance matters here.

&gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:80
&gt; +                reviewer_name, _ = self._comment_regexp.subn(&quot;&quot;, reviewer_name)
&gt; +                reviewer_name, _ = self._string_regexp.subn(&quot;&quot;, reviewer_name)
&gt; +                reviewer_name = reviewer_name.strip()
&gt; +                reviewer = reviewers_cache.get(reviewer_name)
&gt; +                if not reviewer:
&gt; +                    contributors, _ = self._committer_list.contributors_by_fuzzy_match(reviewer_name)
&gt; +                    if contributors:

Discussed on IRC: looks like we should use the generalized cleaning code here.

&gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:88
&gt; +                if not reviewed_revisions:
&gt; +                    reviewed_revisions = set()

You can use defaultdict or similar mechanism to avoid this kind of tricks.

&gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:94
&gt; +            committer = commit[&apos;committer&apos;]
&gt; +            if committer:

Can &quot;not committer&quot; happen?

&gt; Tools/Scripts/webkitpy/tool/commands/suggestemeriti.py:98
&gt; +                if not committed_revisions:
&gt; +                    committed_revisions = set()

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395542</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-02-01 10:29:55 -0800</bug_when>
    <thetext>Would be nice to revive this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200509</attachid>
            <date>2013-05-03 16:51:36 -0700</date>
            <delta_ts>2013-05-03 23:26:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115387-20130503165047.patch</filename>
            <type>text/plain</type>
            <size>32652</size>
            <attacher name="Glenn Adams">glenn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NDgwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzlmNjRmNTg5NWE2OWMxZWQ3ZGY3Y2EzZmUyOWFmYzVi
YWViOGI1My4uNzc1ZWM2ZGY3OWI0ZWRiODg2ZTAyOWRkMjlhZDA5YjFjNzNhOGY4YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDEzLTA1LTAzICBHbGVubiBBZGFtcyAgPGdsZW5uQHNreW5hdi5jb20+CisKKyAgICAg
ICAgW3dlYmtpdHB5XSBOZWVkIHN1Z2dlc3QtZW1lcml0aSBjb21tYW5kCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzODcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VnZ2VzdC1lbWVyaXRpIGNv
bW1hbmQgdGhhdCBzaG93cyBpZGxlIHJldmlld2VycyBhbmQgKG5vbi1yZXZpZXdlcikgY29tbWl0
dGVycyBhcyBjYW5kaWRhdGVzIGZvciBlbWVyaXR1cyBzdGF0dXMuCisgICAgICAgIEVtZXJpdGkg
aXMgdGhlIHBsdXJhbCBvZiBlbWVyaXR1cy4KKworICAgICAgICBCeSBkZWZhdWx0LCByZXZpZXdl
cnMgdGhhdCByZXZpZXcgZmV3ZXIgdGhhbiAyIHBhdGNoZXMgaW4gdGhlIHBhc3QgMTIgbW9udGhz
IGFyZSBmbGFnZ2VkIGFzIGlkbGUgKGluYWN0aXZlKS4KKyAgICAgICAgU2ltaWxhcmx5LCAobm9u
LXJldmlld2VyKSBjb21taXR0ZXJzIHRoYXQgY29tbWl0IGZld2VyIHRoYW4gMiBwYXRjaGVzIGlu
IHRoZSBwYXN0IDEyIG1vbnRocyBhcmUgZmxhZ2dlZCBhcyBpZGxlIChpbmFjdGl2ZSkuCisKKyAg
ICAgICAgVGhlc2UgcGFyYW1ldGVycyBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgZm9sbG93aW5n
IG9wdGlvbnM6CisKKyAgICAgICAgLS1yZXZpZXdlci1pZGxlICAgICAgICAtIHJldmlld2VyIGlk
bGUgcGVyaW9kIChpbiBtb250aHMpLCBkZWZhdWx0cyB0byAxMgorICAgICAgICAtLXJldmlld2Vy
LW1pbi1jb3VudCAgIC0gbWluaW11bSByZXZpZXcgY291bnQgaW4gaWRsZSBwZXJpb2QsIGRlZmF1
bHRzIHRvIDIKKyAgICAgICAgLS1jb21taXR0ZXItaWRsZSAgICAgICAtIGNvbW1pdHRlciBpZGxl
IHBlcmlvZCAoaW4gbW9udGhzKSwgZGVmYXVsdHMgdG8gMTIKKyAgICAgICAgLS1jb21taXR0ZXIt
bWluLWNvdW50ICAtIG1pbmltdW0gY29tbWl0IGNvdW50IGluIGlkbGUgcGVyaW9kLCBkZWZhdWx0
cyB0byAyCisKKyAgICAgICAgQnkgZGVmYXVsdCwgYm90aCBpZGxlIHJldmlld2VycyBhbmQgKG5v
bi1yZXZpZXdlcikgY29tbWl0dGVycyBhcmUgc2hvd24uIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBj
YW4gYmUKKyAgICAgICAgdXNlZCB0byByZWR1Y2Ugd2hhdCBpcyBhbmFseXplZCBhbmQgb3V0cHV0
OgorCisgICAgICAgIC0tbm8tcmV2aWV3ZXJzICAgICAgICAgLSBkb24ndCBhbmFseXplIG9yIHNo
b3cgaWRsZSByZXZpZXdlcnMKKyAgICAgICAgLS1uby1jb21taXR0ZXJzICAgICAgICAtIGRvbid0
IGFuYWx5emUgb3Igc2hvdyBpZGxlIGNvbW1pdHRlcnMKKworICAgICAgICBUaGUgbm93IHNoYXJl
ZCBBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQgYmFzZSBjbGFzcyBpcyBhbHNvIG1vdmVkIHRvIGl0
cyBvd24gc291cmNlIGZpbGUuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdCBhZGRlZDogc3VnZ2Vz
dGVtZXJpdGlfdW5pdHRlc3QKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9fX2luaXRfXy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvYWJzdHJhY3Rjb21taXRsb2djb21tYW5kLnB5OiBBZGRlZC4gQ29kZSBtb3ZlZCBmcm9tIHN1
Z2dlc3Rub21pbmF0aW9ucy5weS4KKyAgICAgICAgKENvbW1pdExvZ0Vycm9yKToKKyAgICAgICAg
KENvbW1pdExvZ0Vycm9yLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1pdExvZ01pc3NpbmdSZXZp
ZXdlcik6CisgICAgICAgIChDb21taXRMb2dNaXNzaW5nUmV2aWV3ZXIuX19pbml0X18pOgorICAg
ICAgICAoQWJzdHJhY3RDb21taXRMb2dDb21tYW5kKToKKyAgICAgICAgKEFic3RyYWN0Q29tbWl0
TG9nQ29tbWFuZC5fX2luaXRfXyk6CisgICAgICAgIChBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQu
X2luaXRfb3B0aW9ucyk6CisgICAgICAgIChBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQuX3JlY2Vu
dF9jb21taXRfbWVzc2FnZXMpOgorICAgICAgICAoQWJzdHJhY3RDb21taXRMb2dDb21tYW5kLl9h
dXRob3JfbmFtZV9mcm9tX2VtYWlsKToKKyAgICAgICAgKEFic3RyYWN0Q29tbWl0TG9nQ29tbWFu
ZC5fY29udHJpYnV0b3JfZnJvbV9lbWFpbCk6CisgICAgICAgIChBYnN0cmFjdENvbW1pdExvZ0Nv
bW1hbmQuX3BhcnNlX2NvbW1pdF9tZXNzYWdlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdGVtZXJpdGkucHk6IEFkZGVkLgorICAgICAgICAoU3VnZ2Vz
dEVtZXJpdGkpOgorICAgICAgICAoU3VnZ2VzdEVtZXJpdGkuX19pbml0X18pOgorICAgICAgICAo
U3VnZ2VzdEVtZXJpdGkuX2luaXRfb3B0aW9ucyk6CisgICAgICAgIChTdWdnZXN0RW1lcml0aS5f
Y291bnRfYWN0aXZpdHkpOgorICAgICAgICAoU3VnZ2VzdEVtZXJpdGkuX2NvbGxlY3Rfc3VnZ2Vz
dGlvbnMpOgorICAgICAgICAoU3VnZ2VzdEVtZXJpdGkuX3ByaW50X3N1Z2dlc3Rpb25zKToKKyAg
ICAgICAgKFN1Z2dlc3RFbWVyaXRpLl9jb3VudF9yZWNlbnRfYWN0aXZpdHkpOgorICAgICAgICAo
U3VnZ2VzdEVtZXJpdGkuZXhlY3V0ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3N1Z2dlc3RlbWVyaXRpX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFN1
Z2dlc3RFbWVyaXRpVGVzdCk6CisgICAgICAgIChTdWdnZXN0RW1lcml0aVRlc3QuX21ha2Vfb3B0
aW9ucyk6CisgICAgICAgIChTdWdnZXN0RW1lcml0aVRlc3QuX21ha2VfY29tbWl0dGVyX2xpc3Qp
OgorICAgICAgICAodGVzdF9iYXNpYyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3N1Z2dlc3Rub21pbmF0aW9ucy5weTogTW92ZSBBYnN0cmFjdENvbW1pdExvZ0Nv
bW1hbmQgZXQgYWwgdG8gYWJzdHJhY3Rjb21taXRsb2djb21tYW5kLnB5LgorICAgICAgICAoU3Vn
Z2VzdE5vbWluYXRpb25zLl9jb3VudF9yZWNlbnRfcGF0Y2hlcyk6IEFkZCByZXF1aXJlX3Jldmll
d3Mgb3B0aW9uLCB3aGljaCBkaWZmZXJzIGZyb20gc3VnZ2VzdC1ub21pbmF0aW9ucyBhbmQgc3Vn
Z2VzdC1lbWVyaXRpLgorCiAyMDEzLTA1LTAxICBHbGVubiBBZGFtcyAgPGdsZW5uQHNreW5hdi5j
b20+CiAKICAgICAgICAgW3dlYmtpdHB5XSBOZWVkIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNv
bW1hbmRzIHRoYXQgYW5hbHl6ZSBjb21taXQgbG9ncwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CmluZGV4IGIzODJiNDYzOTRhYjZmYmFlMTFm
Nzc2MWIxY2RlZmQ4YmFmY2M0ODIuLjQ3Zjk1YjNjNDdlMDY5N2Y0ZmI4MDcxZTI5ZDVhZmNlMmEz
NzU1Y2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9f
X2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHkKQEAgLTIwLDYgKzIwLDcgQEAgZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnJl
YmFzZWxpbmUgaW1wb3J0IFJlYmFzZWxpbmUKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5y
ZWJhc2VsaW5lc2VydmVyIGltcG9ydCBSZWJhc2VsaW5lU2VydmVyCiBmcm9tIHdlYmtpdHB5LnRv
b2wuY29tbWFuZHMuc2hlcmlmZmJvdCBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLnVwbG9hZCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnN1Z2dlc3Ru
b21pbmF0aW9ucyBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnN1Z2dlc3Rl
bWVyaXRpIGltcG9ydCBTdWdnZXN0RW1lcml0aQorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRz
LnN1Z2dlc3Rub21pbmF0aW9ucyBpbXBvcnQgU3VnZ2VzdE5vbWluYXRpb25zCiAKIEFic3RyYWN0
RWFybHlXYXJuaW5nU3lzdGVtLmxvYWRfZXdzX2NsYXNzZXMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Fic3RyYWN0Y29tbWl0bG9nY29tbWFuZC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9hYnN0cmFjdGNvbW1pdGxv
Z2NvbW1hbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg2NjU5YWIzN2RjYzRmNjQyOGU3ZWVmZGYyNDM1MWFi
MWYyNjdlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9hYnN0cmFjdGNvbW1pdGxvZ2NvbW1hbmQucHkKQEAgLTAsMCArMSwxNDQgQEAKKyMg
Q29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoYykgMjAxMSBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCitp
bXBvcnQgcmUKKworZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuY2hhbmdlbG9nIGltcG9y
dCBDaGFuZ2VMb2dFbnRyeQorZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMg
aW1wb3J0IENvbW1pdHRlckxpc3QKK2Zyb20gd2Via2l0cHkudG9vbC5ncmFtbWFyIGltcG9ydCBq
b2luX3dpdGhfc2VwYXJhdG9ycworZnJvbSB3ZWJraXRweS50b29sLm11bHRpY29tbWFuZHRvb2wg
aW1wb3J0IENvbW1hbmQKKworCitjbGFzcyBDb21taXRMb2dFcnJvcihFeGNlcHRpb24pOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYpCisK
KworY2xhc3MgQ29tbWl0TG9nTWlzc2luZ1Jldmlld2VyKENvbW1pdExvZ0Vycm9yKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1pdExvZ0Vycm9yLl9faW5pdF9fKHNlbGYp
CisKKworY2xhc3MgQWJzdHJhY3RDb21taXRMb2dDb21tYW5kKENvbW1hbmQpOgorICAgIF9sZWFk
aW5nX2luZGVudF9yZWdleHAgPSByZS5jb21waWxlKHIiXlsgXXs0fSIsIHJlLk1VTFRJTElORSkK
KyAgICBfcmV2aWV3ZWRfYnlfcmVnZXhwID0gcmUuY29tcGlsZShDaGFuZ2VMb2dFbnRyeS5yZXZp
ZXdlZF9ieV9yZWdleHAsIHJlLk1VTFRJTElORSkKKyAgICBfcGF0Y2hfYnlfcmVnZXhwID0gcmUu
Y29tcGlsZShyJ15QYXRjaCBieSAoP1A8bmFtZT4uKz8pXHMrPCg/UDxlbWFpbD5bXjw+XSspPiBv
biAoP1A8ZGF0ZT5cZHs0fS1cZHsyfS1cZHsyfSkkJywgcmUuTVVMVElMSU5FKQorICAgIF9jb21t
aXR0ZXJfcmVnZXhwID0gcmUuY29tcGlsZShyJ15BdXRob3I6ICg/UDxlbWFpbD5cUyspXHMrPFte
Pl0rPiQnLCByZS5NVUxUSUxJTkUpCisgICAgX2RhdGVfcmVnZXhwID0gcmUuY29tcGlsZShyJ15E
YXRlOiAgICg/UDxkYXRlPlxkezR9LVxkezJ9LVxkezJ9KSAoP1A8dGltZT5cZHsyfTpcZHsyfTpc
ZHsyfSkgW1wrXC1dXGR7NH0kJywgcmUuTVVMVElMSU5FKQorICAgIF9yZXZpc2lvbl9yZWdleHAg
PSByZS5jb21waWxlKHInXmdpdC1zdm4taWQ6IGh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0
b3J5L3dlYmtpdC90cnVua0AoP1A8c3ZuaWQ+XGQrKSAoP1A8Z2l0aWQ+WzAtOWEtZlwtXXszNn0p
JCcsIHJlLk1VTFRJTElORSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zPU5vbmUp
OgorICAgICAgICBvcHRpb25zID0gb3B0aW9ucyBvciBbXQorICAgICAgICBvcHRpb25zICs9IFsK
KyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW1heC1jb21taXQtYWdlIiwgYWN0aW9uPSJzdG9y
ZSIsIGRlc3Q9Im1heF9jb21taXRfYWdlIiwgdHlwZT0iaW50IiwgZGVmYXVsdD05LCBoZWxwPSJT
cGVjaWZ5IG1heGltdW0gY29tbWl0IGFnZSB0byBjb25zaWRlciAoaW4gbW9udGhzKS4iKSwKKyAg
ICAgICAgXQorICAgICAgICBvcHRpb25zID0gc29ydGVkKG9wdGlvbnMsIGNtcD1sYW1iZGEgYSwg
YjogY21wKGEuX2xvbmdfb3B0cywgYi5fbG9uZ19vcHRzKSkKKyAgICAgICAgc3VwZXIoQWJzdHJh
Y3RDb21taXRMb2dDb21tYW5kLCBzZWxmKS5fX2luaXRfXyhvcHRpb25zPW9wdGlvbnMpCisgICAg
ICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIG9uIHRoZSB0b29sIHNvbWV3aGVy
ZS4KKyAgICAgICAgc2VsZi5fY29tbWl0dGVyX2xpc3QgPSBDb21taXR0ZXJMaXN0KCkKKworICAg
IGRlZiBfaW5pdF9vcHRpb25zKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLnZlcmJvc2Ug
PSBvcHRpb25zLnZlcmJvc2UKKyAgICAgICAgc2VsZi5tYXhfY29tbWl0X2FnZSA9IG9wdGlvbnMu
bWF4X2NvbW1pdF9hZ2UKKworICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8gc2NtLnB5
CisgICAgZGVmIF9yZWNlbnRfY29tbWl0X21lc3NhZ2VzKHNlbGYpOgorICAgICAgICBnaXRfbG9n
ID0gc2VsZi5fdG9vbC5leGVjdXRpdmUucnVuX2NvbW1hbmQoWydnaXQnLCAnbG9nJywgJy0tZGF0
ZT1pc28nLCAnLS1zaW5jZT0iJXMgbW9udGhzIGFnbyInICUgc2VsZi5tYXhfY29tbWl0X2FnZV0p
CisgICAgICAgIG1lc3NhZ2VzID0gcmUuc3BsaXQociJeY29tbWl0IFx3ezQwfSQiLCBnaXRfbG9n
LCBmbGFncz1yZS5NVUxUSUxJTkUpWzE6XSAgIyBJZ25vcmUgdGhlIGZpcnN0IG1lc3NhZ2Ugd2hp
Y2ggd2lsbCBiZSBlbXB0eS4KKyAgICAgICAgZm9yIG1lc3NhZ2UgaW4gbWVzc2FnZXM6CisgICAg
ICAgICAgICAjIFVuaW5kZW50IGFsbCB0aGUgbGluZXMKKyAgICAgICAgICAgIChtZXNzYWdlLCBf
KSA9IHNlbGYuX2xlYWRpbmdfaW5kZW50X3JlZ2V4cC5zdWJuKCIiLCBtZXNzYWdlKQorICAgICAg
ICAgICAgeWllbGQgbWVzc2FnZS5sc3RyaXAoKSAgIyBSZW1vdmUgYW55IGxlYWRpbmcgbmV3bGlu
ZXMgZnJvbSB0aGUgbG9nIG1lc3NhZ2UuCisKKyAgICBkZWYgX2F1dGhvcl9uYW1lX2Zyb21fZW1h
aWwoc2VsZiwgZW1haWwpOgorICAgICAgICBjb250cmlidXRvciA9IHNlbGYuX2NvbW1pdHRlcl9s
aXN0LmNvbnRyaWJ1dG9yX2J5X2VtYWlsKGVtYWlsKQorICAgICAgICByZXR1cm4gY29udHJpYnV0
b3IuZnVsbF9uYW1lIGlmIGNvbnRyaWJ1dG9yIGVsc2UgTm9uZQorCisgICAgZGVmIF9jb250cmli
dXRvcl9mcm9tX2VtYWlsKHNlbGYsIGVtYWlsKToKKyAgICAgICAgY29udHJpYnV0b3IgPSBzZWxm
Ll9jb21taXR0ZXJfbGlzdC5jb250cmlidXRvcl9ieV9lbWFpbChlbWFpbCkKKyAgICAgICAgcmV0
dXJuIGNvbnRyaWJ1dG9yIGlmIGNvbnRyaWJ1dG9yIGVsc2UgTm9uZQorCisgICAgZGVmIF9wYXJz
ZV9jb21taXRfbWVzc2FnZShzZWxmLCBjb21taXRfbWVzc2FnZSwgcmVxdWlyZV9yZXZpZXc9RmFs
c2UpOgorICAgICAgICBjb21taXR0ZXJfbWF0Y2ggPSBzZWxmLl9jb21taXR0ZXJfcmVnZXhwLnNl
YXJjaChjb21taXRfbWVzc2FnZSkKKyAgICAgICAgaWYgbm90IGNvbW1pdHRlcl9tYXRjaDoKKyAg
ICAgICAgICAgIHJhaXNlIENvbW1pdExvZ0Vycm9yCisKKyAgICAgICAgY29tbWl0dGVyX2VtYWls
ID0gY29tbWl0dGVyX21hdGNoLmdyb3VwKCdlbWFpbCcpCisgICAgICAgIGlmIG5vdCBjb21taXR0
ZXJfZW1haWw6CisgICAgICAgICAgICByYWlzZSBDb21taXRMb2dFcnJvcgorCisgICAgICAgIGNv
bW1pdHRlciA9IHNlbGYuX2NvbnRyaWJ1dG9yX2Zyb21fZW1haWwoY29tbWl0dGVyX2VtYWlsKQor
ICAgICAgICBpZiBub3QgY29tbWl0dGVyOgorICAgICAgICAgICAgcmFpc2UgQ29tbWl0TG9nRXJy
b3IKKworICAgICAgICBjb21taXRfZGF0ZV9tYXRjaCA9IHNlbGYuX2RhdGVfcmVnZXhwLnNlYXJj
aChjb21taXRfbWVzc2FnZSkKKyAgICAgICAgaWYgbm90IGNvbW1pdF9kYXRlX21hdGNoOgorICAg
ICAgICAgICAgcmFpc2UgQ29tbWl0TG9nRXJyb3IKKyAgICAgICAgY29tbWl0X2RhdGUgPSBjb21t
aXRfZGF0ZV9tYXRjaC5ncm91cCgnZGF0ZScpCisKKyAgICAgICAgcmV2aXNpb25fbWF0Y2ggPSBz
ZWxmLl9yZXZpc2lvbl9yZWdleHAuc2VhcmNoKGNvbW1pdF9tZXNzYWdlKQorICAgICAgICBpZiBu
b3QgcmV2aXNpb25fbWF0Y2g6CisgICAgICAgICAgICByYWlzZSBDb21taXRMb2dFcnJvcgorICAg
ICAgICByZXZpc2lvbiA9IHJldmlzaW9uX21hdGNoLmdyb3VwKCdzdm5pZCcpCisKKyAgICAgICAg
IyBMb29rIGZvciAiUGF0Y2ggYnkiIGxpbmUgZmlyc3QsIHdoaWNoIGlzIHVzZWQgZm9yIG5vbi1j
b21taXR0ZXIgY29udHJpYnV0b3JzOworICAgICAgICAjIG90aGVyd2lzZSwgdXNlIGNvbW1pdHRl
ciBpbmZvIGRldGVybWluZWQgYWJvdmUuCisgICAgICAgIGF1dGhvcl9tYXRjaCA9IHNlbGYuX3Bh
dGNoX2J5X3JlZ2V4cC5zZWFyY2goY29tbWl0X21lc3NhZ2UpCisgICAgICAgIGlmIG5vdCBhdXRo
b3JfbWF0Y2g6CisgICAgICAgICAgICBhdXRob3JfbWF0Y2ggPSBjb21taXR0ZXJfbWF0Y2gKKwor
ICAgICAgICBhdXRob3JfZW1haWwgPSBhdXRob3JfbWF0Y2guZ3JvdXAoJ2VtYWlsJykKKyAgICAg
ICAgaWYgbm90IGF1dGhvcl9lbWFpbDoKKyAgICAgICAgICAgIGF1dGhvcl9lbWFpbCA9IGNvbW1p
dHRlcl9lbWFpbAorCisgICAgICAgIGF1dGhvcl9uYW1lID0gYXV0aG9yX21hdGNoLmdyb3VwKCdu
YW1lJykgaWYgJ25hbWUnIGluIGF1dGhvcl9tYXRjaC5ncm91cGRpY3QoKSBlbHNlIE5vbmUKKyAg
ICAgICAgaWYgbm90IGF1dGhvcl9uYW1lOgorICAgICAgICAgICAgYXV0aG9yX25hbWUgPSBzZWxm
Ll9hdXRob3JfbmFtZV9mcm9tX2VtYWlsKGF1dGhvcl9lbWFpbCkKKyAgICAgICAgaWYgbm90IGF1
dGhvcl9uYW1lOgorICAgICAgICAgICAgcmFpc2UgQ29tbWl0TG9nRXJyb3IKKworICAgICAgICBj
b250cmlidXRvciA9IHNlbGYuX2NvbnRyaWJ1dG9yX2Zyb21fZW1haWwoYXV0aG9yX2VtYWlsKQor
ICAgICAgICBpZiBjb250cmlidXRvciBhbmQgYXV0aG9yX25hbWUgIT0gY29udHJpYnV0b3IuZnVs
bF9uYW1lIGFuZCBjb250cmlidXRvci5mdWxsX25hbWU6CisgICAgICAgICAgICBhdXRob3JfbmFt
ZSA9IGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZQorCisgICAgICAgIHJldmlld2VyX21hdGNoID0gc2Vs
Zi5fcmV2aWV3ZWRfYnlfcmVnZXhwLnNlYXJjaChjb21taXRfbWVzc2FnZSkKKyAgICAgICAgaWYg
bm90IHJldmlld2VyX21hdGNoIGFuZCByZXF1aXJlX3JldmlldzoKKyAgICAgICAgICAgIHJhaXNl
IENvbW1pdExvZ01pc3NpbmdSZXZpZXdlcgorICAgICAgICByZXZpZXdlcnMgPSByZXZpZXdlcl9t
YXRjaC5ncm91cCgncmV2aWV3ZXInKSBpZiByZXZpZXdlcl9tYXRjaCBlbHNlICcnCisKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICdjb21taXR0ZXInOiBjb21taXR0ZXIsCisgICAgICAg
ICAgICAnY29tbWl0X2RhdGUnOiBjb21taXRfZGF0ZSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6
IHJldmlzaW9uLAorICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6IGF1dGhvcl9lbWFpbCwKKyAg
ICAgICAgICAgICdhdXRob3JfbmFtZSc6IGF1dGhvcl9uYW1lLAorICAgICAgICAgICAgJ2NvbnRy
aWJ1dG9yJzogY29udHJpYnV0b3IsCisgICAgICAgICAgICAncmV2aWV3ZXJzJzogcmV2aWV3ZXJz
LAorICAgICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvc3VnZ2VzdGVtZXJpdGkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvc3VnZ2VzdGVtZXJpdGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIyNjcwZDQ2MDJkZWQzOGQ1YWNh
ZjZjYTEyOTA1OWI4ZmU5NzhlNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9zdWdnZXN0ZW1lcml0aS5weQpAQCAtMCwwICsxLDE4MiBAQAor
IyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChjKSAyMDExIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24K
K2ltcG9ydCByZQorCitmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuYWJzdHJhY3Rjb21taXRs
b2djb21tYW5kIGltcG9ydCAqCisKKworY2xhc3MgU3VnZ2VzdEVtZXJpdGkoQWJzdHJhY3RDb21t
aXRMb2dDb21tYW5kKToKKyAgICBuYW1lID0gInN1Z2dlc3QtZW1lcml0aSIKKyAgICBoZWxwX3Rl
eHQgPSAiU3VnZ2VzdCByZXRpcmVtZW50IG9mIHJldmlld2Vycy9jb21taXR0ZXJzIHRvIGVtZXJp
dHVzIHN0YXR1cyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9
IFsKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWNvbW1pdHRlci1pZGxlIiwgYWN0aW9uPSJz
dG9yZSIsIGRlc3Q9ImNvbW1pdHRlcl9pZGxlIiwgdHlwZT0iaW50IiwgZGVmYXVsdD0xMiwgaGVs
cD0iU3BlY2lmeSBpZGxlIHRpbWUgKGluIG1vbnRocykgZm9yIHJldGlyaW5nIENvbW1pdHRlcnMu
IiksCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1jb21taXR0ZXItbWluLWNvdW50IiwgYWN0
aW9uPSJzdG9yZSIsIGRlc3Q9ImNvbW1pdHRlcl9taW5fY291bnQiLCB0eXBlPSJpbnQiLCBkZWZh
dWx0PTIsIGhlbHA9IlNwZWNpZnkgbWluaW11bSBjb21taXQgY291bnQgZm9yIHJldGlyaW5nIENv
bW1pdHRlcnMuIiksCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1uby1jb21taXR0ZXJzIiwg
YWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InNob3dfaWRsZV9jb21taXR0ZXJzIiwgZGVmYXVs
dD1UcnVlLCBoZWxwPSJEb24ndCBhbmFseXplIG9yIHNob3cgaWRsZSBDb21taXR0ZXJzLiIpLAor
ICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tcmV2aWV3ZXItaWRsZSIsIGFjdGlvbj0ic3RvcmUi
LCBkZXN0PSJyZXZpZXdlcl9pZGxlIiwgdHlwZT0iaW50IiwgZGVmYXVsdD0xMiwgaGVscD0iU3Bl
Y2lmeSBpZGxlIHRpbWUgKGluIG1vbnRocykgZm9yIHJldGlyaW5nIFJldmlld2Vycy4iKSwKKyAg
ICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLXJldmlld2VyLW1pbi1jb3VudCIsIGFjdGlvbj0ic3Rv
cmUiLCBkZXN0PSJyZXZpZXdlcl9taW5fY291bnQiLCB0eXBlPSJpbnQiLCBkZWZhdWx0PTIsIGhl
bHA9IlNwZWNpZnkgbWluaW11bSByZXZpZXcgY291bnQgZm9yIHJldGlyaW5nIFJldmlld2Vycy4i
KSwKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXJldmlld2VycyIsIGFjdGlvbj0ic3Rv
cmVfZmFsc2UiLCBkZXN0PSJzaG93X2lkbGVfcmV2aWV3ZXJzIiwgZGVmYXVsdD1UcnVlLCBoZWxw
PSJEb24ndCBhbmFseXplIG9yIHNob3cgaWRsZSBSZXZpZXdlcnMuIiksCisgICAgICAgIF0KKyAg
ICAgICAgc3VwZXIoU3VnZ2VzdEVtZXJpdGksIHNlbGYpLl9faW5pdF9fKG9wdGlvbnM9b3B0aW9u
cykKKworICAgIGRlZiBfaW5pdF9vcHRpb25zKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBzdXBl
cihTdWdnZXN0RW1lcml0aSwgc2VsZikuX2luaXRfb3B0aW9ucyhvcHRpb25zKQorICAgICAgICBz
ZWxmLmNvbW1pdHRlcl9pZGxlID0gb3B0aW9ucy5jb21taXR0ZXJfaWRsZQorICAgICAgICBzZWxm
LmNvbW1pdHRlcl9taW5fY291bnQgPSBvcHRpb25zLmNvbW1pdHRlcl9taW5fY291bnQKKyAgICAg
ICAgc2VsZi5zaG93X2lkbGVfY29tbWl0dGVycyA9IG9wdGlvbnMuc2hvd19pZGxlX2NvbW1pdHRl
cnMKKyAgICAgICAgc2VsZi5yZXZpZXdlcl9pZGxlID0gb3B0aW9ucy5yZXZpZXdlcl9pZGxlCisg
ICAgICAgIHNlbGYucmV2aWV3ZXJfbWluX2NvdW50ID0gb3B0aW9ucy5yZXZpZXdlcl9taW5fY291
bnQKKyAgICAgICAgc2VsZi5zaG93X2lkbGVfcmV2aWV3ZXJzID0gb3B0aW9ucy5zaG93X2lkbGVf
cmV2aWV3ZXJzCisgICAgICAgIGlmIHNlbGYubWF4X2NvbW1pdF9hZ2UgPCBvcHRpb25zLmNvbW1p
dHRlcl9pZGxlIGFuZCBzZWxmLnNob3dfaWRsZV9jb21taXR0ZXJzOgorICAgICAgICAgICAgc2Vs
Zi5tYXhfY29tbWl0X2FnZSA9IG9wdGlvbnMuY29tbWl0dGVyX2lkbGUKKyAgICAgICAgaWYgc2Vs
Zi5tYXhfY29tbWl0X2FnZSA8IG9wdGlvbnMucmV2aWV3ZXJfaWRsZSBhbmQgc2VsZi5zaG93X2lk
bGVfcmV2aWV3ZXJzOgorICAgICAgICAgICAgc2VsZi5tYXhfY29tbWl0X2FnZSA9IG9wdGlvbnMu
cmV2aWV3ZXJfaWRsZQorCisgICAgX2NvbW1lbnRfcmVnZXhwID0gcmUuY29tcGlsZShyIlwoW15c
KV0qXClccyoiKQorICAgIF9zdHJpbmdfcmVnZXhwID0gcmUuY29tcGlsZShyIlwiW15cIl0qXCJc
cyoiKQorCisgICAgZGVmIF9jb3VudF9hY3Rpdml0eShzZWxmLCBjb21taXQsIGFjdGl2aXR5KToK
KyAgICAgICAgcmV2aXNpb24gPSBjb21taXRbJ3JldmlzaW9uJ10KKyAgICAgICAgaWYgbm90IHJl
dmlzaW9uOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5zaG93X2lkbGVf
cmV2aWV3ZXJzOgorICAgICAgICAgICAgcmV2aWV3ZXJzX2NhY2hlID0gYWN0aXZpdHlbJ3Jldmll
d2Vyc19jYWNoZSddCisgICAgICAgICAgICBmb3IgcmV2aWV3ZXJfbmFtZSBpbiByZS5zcGxpdChy
IlxzK2FuZHwmXHMrfFxzKiwoPzpccyphbmR8JlxzKyk/IiwgY29tbWl0WydyZXZpZXdlcnMnXSk6
CisgICAgICAgICAgICAgICAgcmV2aWV3ZXJfbmFtZSwgXyA9IHNlbGYuX2NvbW1lbnRfcmVnZXhw
LnN1Ym4oIiIsIHJldmlld2VyX25hbWUpCisgICAgICAgICAgICAgICAgcmV2aWV3ZXJfbmFtZSwg
XyA9IHNlbGYuX3N0cmluZ19yZWdleHAuc3VibigiIiwgcmV2aWV3ZXJfbmFtZSkKKyAgICAgICAg
ICAgICAgICByZXZpZXdlcl9uYW1lID0gcmV2aWV3ZXJfbmFtZS5zdHJpcCgpCisgICAgICAgICAg
ICAgICAgcmV2aWV3ZXIgPSByZXZpZXdlcnNfY2FjaGUuZ2V0KHJldmlld2VyX25hbWUpCisgICAg
ICAgICAgICAgICAgaWYgbm90IHJldmlld2VyOgorICAgICAgICAgICAgICAgICAgICBjb250cmli
dXRvcnMsIF8gPSBzZWxmLl9jb21taXR0ZXJfbGlzdC5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0
Y2gocmV2aWV3ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgY29udHJpYnV0b3JzOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV2aWV3ZXIgPSBjb250cmlidXRvcnNbMF0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIHJldmlld2VyOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldmlld2Vyc19jYWNoZVtyZXZpZXdlcl9uYW1lXSA9IHJldmlld2VyCisgICAgICAgICAg
ICBpZiByZXZpZXdlcjoKKyAgICAgICAgICAgICAgICByZXZpZXdzID0gYWN0aXZpdHlbJ3Jldmll
d3MnXQorICAgICAgICAgICAgICAgIHJldmlld2VkX3JldmlzaW9ucyA9IHJldmlld3MuZ2V0KHJl
dmlld2VyKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXZpZXdlZF9yZXZpc2lvbnM6CisgICAg
ICAgICAgICAgICAgICAgIHJldmlld2VkX3JldmlzaW9ucyA9IHNldCgpCisgICAgICAgICAgICAg
ICAgcmV2aWV3ZWRfcmV2aXNpb25zLmFkZChyZXZpc2lvbikKKyAgICAgICAgICAgICAgICByZXZp
ZXdzW3Jldmlld2VyXSA9IHJldmlld2VkX3JldmlzaW9ucworCisgICAgICAgIGlmIHNlbGYuc2hv
d19pZGxlX2NvbW1pdHRlcnM6CisgICAgICAgICAgICBjb21taXR0ZXIgPSBjb21taXRbJ2NvbW1p
dHRlciddCisgICAgICAgICAgICBpZiBjb21taXR0ZXI6CisgICAgICAgICAgICAgICAgY29tbWl0
cyA9IGFjdGl2aXR5Wydjb21taXRzJ10KKyAgICAgICAgICAgICAgICBjb21taXR0ZWRfcmV2aXNp
b25zID0gY29tbWl0cy5nZXQoY29tbWl0dGVyKQorICAgICAgICAgICAgICAgIGlmIG5vdCBjb21t
aXR0ZWRfcmV2aXNpb25zOgorICAgICAgICAgICAgICAgICAgICBjb21taXR0ZWRfcmV2aXNpb25z
ID0gc2V0KCkKKyAgICAgICAgICAgICAgICBjb21taXR0ZWRfcmV2aXNpb25zLmFkZChyZXZpc2lv
bikKKyAgICAgICAgICAgICAgICBjb21taXRzW2NvbW1pdHRlcl0gPSBjb21taXR0ZWRfcmV2aXNp
b25zCisKKyAgICBkZWYgX2NvbGxlY3Rfc3VnZ2VzdGlvbnMoc2VsZiwgYWN0aXZpdHkpOgorICAg
ICAgICByZXZpZXdzID0gYWN0aXZpdHlbJ3Jldmlld3MnXQorICAgICAgICBpbmFjdGl2ZV9yZXZp
ZXdlcnMgPSBzZXQoKQorICAgICAgICByZXZpZXdlcnMgPSBzZWxmLl9jb21taXR0ZXJfbGlzdC5y
ZXZpZXdlcnMoKQorICAgICAgICBmb3IgcmV2aWV3ZXIgaW4gc2VsZi5fY29tbWl0dGVyX2xpc3Qu
cmV2aWV3ZXJzKCk6CisgICAgICAgICAgICBpZiByZXZpZXdlciBub3QgaW4gcmV2aWV3cyBvciBs
ZW4ocmV2aWV3c1tyZXZpZXdlcl0pIDwgc2VsZi5yZXZpZXdlcl9taW5fY291bnQ6CisgICAgICAg
ICAgICAgICAgaW5hY3RpdmVfcmV2aWV3ZXJzLmFkZChyZXZpZXdlcikKKyAgICAgICAgY29tbWl0
cyA9IGFjdGl2aXR5Wydjb21taXRzJ10KKyAgICAgICAgaW5hY3RpdmVfY29tbWl0dGVycyA9IHNl
dCgpCisgICAgICAgIGNvbW1pdHRlcnMgPSBzZWxmLl9jb21taXR0ZXJfbGlzdC5jb21taXR0ZXJz
KCkKKyAgICAgICAgY29tbWl0dGVyc19jb3VudCA9IDAKKyAgICAgICAgZm9yIGNvbW1pdHRlciBp
biBjb21taXR0ZXJzOgorICAgICAgICAgICAgIyBza2lwIGNvbW1pdHRlcnMgdGhhdCBhcmUgcmV2
aWV3ZXJzCisgICAgICAgICAgICBpZiBjb21taXR0ZXIuY2FuX3JldmlldzoKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgY29tbWl0dGVyc19jb3VudCArPSAxCisgICAgICAg
ICAgICBpZiBjb21taXR0ZXIgbm90IGluIGNvbW1pdHMgb3IgbGVuKGNvbW1pdHNbY29tbWl0dGVy
XSkgPCBzZWxmLmNvbW1pdHRlcl9taW5fY291bnQ6CisgICAgICAgICAgICAgICAgaW5hY3RpdmVf
Y29tbWl0dGVycy5hZGQoY29tbWl0dGVyKQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
J3Jldmlld2Vyc19jb3VudCc6IGxlbihyZXZpZXdlcnMpLAorICAgICAgICAgICAgJ3Jldmlld2Vy
X2lkbGUnOiBzZWxmLnJldmlld2VyX2lkbGUsCisgICAgICAgICAgICAncmV2aWV3ZXJfbWluX2Nv
dW50Jzogc2VsZi5yZXZpZXdlcl9taW5fY291bnQsCisgICAgICAgICAgICAnaW5hY3RpdmVfcmV2
aWV3ZXJzJzogaW5hY3RpdmVfcmV2aWV3ZXJzLAorICAgICAgICAgICAgJ2NvbW1pdHRlcnNfY291
bnQnOiBjb21taXR0ZXJzX2NvdW50LAorICAgICAgICAgICAgJ2NvbW1pdHRlcl9pZGxlJzogc2Vs
Zi5jb21taXR0ZXJfaWRsZSwKKyAgICAgICAgICAgICdjb21taXR0ZXJfbWluX2NvdW50Jzogc2Vs
Zi5jb21taXR0ZXJfbWluX2NvdW50LAorICAgICAgICAgICAgJ2luYWN0aXZlX2NvbW1pdHRlcnMn
OiBpbmFjdGl2ZV9jb21taXR0ZXJzLAorICAgICAgICB9CisKKyAgICBkZWYgX3ByaW50X3N1Z2dl
c3Rpb25zKHNlbGYsIHN1Z2dlc3Rpb25zLCBhY3Rpdml0eSk6CisgICAgICAgIGlmIHNlbGYuc2hv
d19pZGxlX3Jldmlld2VyczoKKyAgICAgICAgICAgIGluYWN0aXZlX3Jldmlld2VycyA9IHN1Z2dl
c3Rpb25zWydpbmFjdGl2ZV9yZXZpZXdlcnMnXQorICAgICAgICAgICAgbWluX2NvdW50ID0gc3Vn
Z2VzdGlvbnNbJ3Jldmlld2VyX21pbl9jb3VudCddCisgICAgICAgICAgICBpZGxlID0gc3VnZ2Vz
dGlvbnNbJ3Jldmlld2VyX2lkbGUnXQorICAgICAgICAgICAgaWYgaW5hY3RpdmVfcmV2aWV3ZXJz
OgorICAgICAgICAgICAgICAgIHByaW50ICdcblRoZSBmb2xsb3dpbmcgcmV2aWV3ZXJzIGhhdmUg
cGVyZm9ybWVkIGZld2VyIHRoYW4gJWQgcmV2aWV3JXMgaW4gdGhlIHBhc3QgJWQgbW9udGhzOicg
JSAobWluX2NvdW50LCAncycgaWYgbWluX2NvdW50ID4gMCBlbHNlICcnLCBpZGxlKQorICAgICAg
ICAgICAgICAgIGZvciByZXZpZXdlciBpbiBzb3J0ZWQoaW5hY3RpdmVfcmV2aWV3ZXJzLCBjbXA9
bGFtYmRhIGEsIGI6IGNtcChhLmZ1bGxfbmFtZSwgYi5mdWxsX25hbWUpKToKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbnQgJyAgJXMnICUgKHJldmlld2VyLmZ1bGxfbmFtZSkKKyAgICAgICAgICAg
ICAgICB0b3RhbCA9IHN1Z2dlc3Rpb25zWydyZXZpZXdlcnNfY291bnQnXQorICAgICAgICAgICAg
ICAgIGNvdW50ID0gbGVuKGluYWN0aXZlX3Jldmlld2VycykKKyAgICAgICAgICAgICAgICByYXRp
byA9IGZsb2F0KGNvdW50KSAvIGZsb2F0KHRvdGFsKQorICAgICAgICAgICAgICAgIHByaW50ICdU
aGVzZSByZXZpZXdlcnMgcmVwcmVzZW50ICUuMmYlJSAoJWQgb2YgJWQpIG9mIGFsbCByZXZpZXdl
ciVzLicgJSAocmF0aW8gKiAxMDAuMCwgY291bnQsIHRvdGFsLCAncycgaWYgdG90YWwgPiAxIGVs
c2UgJycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICdcbkFsbCBy
ZXZpZXdlcnMgaGF2ZSBwZXJmb3JtZWQgYXQgbGVhc3QgdGhhbiAlZCByZXZpZXclcyBpbiB0aGUg
cGFzdCAlZCBtb250aHMuJyAlIChtaW5fY291bnQsICdzJyBpZiBtaW5fY291bnQgPiAwIGVsc2Ug
JycsIGlkbGUpCisgICAgICAgIGlmIHNlbGYuc2hvd19pZGxlX2NvbW1pdHRlcnM6CisgICAgICAg
ICAgICBpbmFjdGl2ZV9jb21taXR0ZXJzID0gc3VnZ2VzdGlvbnNbJ2luYWN0aXZlX2NvbW1pdHRl
cnMnXQorICAgICAgICAgICAgbWluX2NvdW50ID0gc3VnZ2VzdGlvbnNbJ2NvbW1pdHRlcl9taW5f
Y291bnQnXQorICAgICAgICAgICAgaWRsZSA9IHN1Z2dlc3Rpb25zWydjb21taXR0ZXJfaWRsZSdd
CisgICAgICAgICAgICBpZiBpbmFjdGl2ZV9jb21taXR0ZXJzOgorICAgICAgICAgICAgICAgIHBy
aW50ICdcblRoZSBmb2xsb3dpbmcgKG5vbi1yZXZpZXdlcikgY29tbWl0dGVycyBoYXZlIHBlcmZv
cm1lZCBmZXdlciB0aGFuICVkIGNvbW1pdCVzIGluIHRoZSBwYXN0ICVkIG1vbnRoczonICUgKG1p
bl9jb3VudCwgJ3MnIGlmIG1pbl9jb3VudCA+IDAgZWxzZSAnJywgaWRsZSkKKyAgICAgICAgICAg
ICAgICBmb3IgY29tbWl0dGVyIGluIHNvcnRlZChpbmFjdGl2ZV9jb21taXR0ZXJzLCBjbXA9bGFt
YmRhIGEsIGI6IGNtcChhLmZ1bGxfbmFtZSwgYi5mdWxsX25hbWUpKToKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQgJyAgJXMnICUgKGNvbW1pdHRlci5mdWxsX25hbWUpCisgICAgICAgICAgICAg
ICAgdG90YWwgPSBzdWdnZXN0aW9uc1snY29tbWl0dGVyc19jb3VudCddCisgICAgICAgICAgICAg
ICAgY291bnQgPSBsZW4oaW5hY3RpdmVfY29tbWl0dGVycykKKyAgICAgICAgICAgICAgICByYXRp
byA9IGZsb2F0KGNvdW50KSAvIGZsb2F0KHRvdGFsKQorICAgICAgICAgICAgICAgIHByaW50ICdU
aGVzZSBjb21taXR0ZXJzIHJlcHJlc2VudCAlLjJmJSUgKCVkIG9mICVkKSBvZiBhbGwgKG5vbi1y
ZXZpZXdlcikgY29tbWl0dGVyJXMuJyAlIChyYXRpbyAqIDEwMC4wLCBjb3VudCwgdG90YWwsICdz
JyBpZiB0b3RhbCA+IDEgZWxzZSAnJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcHJpbnQgJ1xuQWxsIChub24tcmV2aWV3ZXIpIGNvbW1pdHRlcnMgaGF2ZSBwZXJmb3JtZWQg
YXQgbGVhc3QgdGhhbiAlZCBjb21taXQlcyBpbiB0aGUgcGFzdCAlZCBtb250aHMuJyAlIChtaW5f
Y291bnQsICdzJyBpZiBtaW5fY291bnQgPiAwIGVsc2UgJycsIGlkbGUpCisKKyAgICBkZWYgX2Nv
dW50X3JlY2VudF9hY3Rpdml0eShzZWxmKToKKyAgICAgICAgYWN0aXZpdHkgPSB7CisgICAgICAg
ICAgICAncmV2aWV3ZXJzX2NhY2hlJzoge30sCisgICAgICAgICAgICAncmV2aWV3cyc6IHt9LAor
ICAgICAgICAgICAgJ2NvbW1pdHMnOiB7fSwKKyAgICAgICAgfQorICAgICAgICBmb3IgY29tbWl0
X21lc3NhZ2UgaW4gc2VsZi5fcmVjZW50X2NvbW1pdF9tZXNzYWdlcygpOgorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2NvdW50X2FjdGl2aXR5KHNlbGYuX3BhcnNlX2Nv
bW1pdF9tZXNzYWdlKGNvbW1pdF9tZXNzYWdlKSwgYWN0aXZpdHkpCisgICAgICAgICAgICBleGNl
cHQgQ29tbWl0TG9nRXJyb3IsIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICByZXR1cm4gYWN0aXZpdHkKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMs
IGFyZ3MsIHRvb2wpOgorICAgICAgICBzZWxmLl9pbml0X29wdGlvbnMob3B0aW9ucykKKyAgICAg
ICAgYWN0aXZpdHkgPSBzZWxmLl9jb3VudF9yZWNlbnRfYWN0aXZpdHkoKQorICAgICAgICBzdWdn
ZXN0aW9ucyA9IHNlbGYuX2NvbGxlY3Rfc3VnZ2VzdGlvbnMoYWN0aXZpdHkpCisgICAgICAgIHNl
bGYuX3ByaW50X3N1Z2dlc3Rpb25zKHN1Z2dlc3Rpb25zLCBhY3Rpdml0eSkKKworaWYgX19uYW1l
X18gPT0gIl9fbWFpbl9fIjoKKyAgICBTdWdnZXN0RW1lcml0aSgpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdGVtZXJpdGlfdW5pdHRlc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdGVtZXJpdGlf
dW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JjYTE2NTA5YjJkZjJmOTFiODdmZDI3NjdmYzFkMmQx
Nzk5NGZiYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9zdWdnZXN0ZW1lcml0aV91bml0dGVzdC5weQpAQCAtMCwwICsxLDEwOSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChDKSAyMDExIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMg
aW1wb3J0IENvbW1pdHRlckxpc3QsIENvbW1pdHRlciwgUmV2aWV3ZXIKK2Zyb20gd2Via2l0cHku
dG9vbC5jb21tYW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Citmcm9tIHdlYmtp
dHB5LnRvb2wuY29tbWFuZHMuc3VnZ2VzdGVtZXJpdGkgaW1wb3J0IFN1Z2dlc3RFbWVyaXRpCitm
cm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zLCBNb2NrVG9vbAor
CisKK2NsYXNzIFN1Z2dlc3RFbWVyaXRpVGVzdChDb21tYW5kc1Rlc3QpOgorCisgICAgZGVmIF9t
YWtlX29wdGlvbnMoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBkZWZhdWx0cyA9IHsKKyAgICAg
ICAgICAgICdjb21taXR0ZXJfaWRsZSc6IDEyLAorICAgICAgICAgICAgJ2NvbW1pdHRlcl9taW5f
Y291bnQnOiAyLAorICAgICAgICAgICAgJ3Nob3dfaWRsZV9jb21taXR0ZXJzJzogVHJ1ZSwKKyAg
ICAgICAgICAgICdyZXZpZXdlcl9pZGxlJzogMTIsCisgICAgICAgICAgICAncmV2aWV3ZXJfbWlu
X2NvdW50JzogMiwKKyAgICAgICAgICAgICdzaG93X2lkbGVfcmV2aWV3ZXJzJzogVHJ1ZSwKKyAg
ICAgICAgICAgICdtYXhfY29tbWl0X2FnZSc6IDksCisgICAgICAgICAgICAndmVyYm9zZSc6IEZh
bHNlLAorICAgICAgICB9CisgICAgICAgIG9wdGlvbnMgPSBNb2NrT3B0aW9ucygqKmRlZmF1bHRz
KQorICAgICAgICBvcHRpb25zLnVwZGF0ZSgqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIG9wdGlv
bnMKKworICAgIGRlZiBfbWFrZV9jb21taXR0ZXJfbGlzdChzZWxmKToKKyAgICAgICAgY29tbWl0
dGVycyA9IFsKKyAgICAgICAgICAgIENvbW1pdHRlcignVHdlZXR5IFBpZScsIFsndHdlZXR5QHdi
LmNvbSddLCAndHdlZXR5JyksCisgICAgICAgICAgICBDb21taXR0ZXIoJ1NwZWVkeSBHb256YWxl
eicsIFsnc3BlZWR5QHdiLmNvbSddLCAnc3BlZWR5JyksCisgICAgICAgICAgICBDb21taXR0ZXIo
J0FsYSBCYWhtYScsIFsnYWxhQHdiLmNvbSddLCAnYWxhJyksCisgICAgICAgIF0KKyAgICAgICAg
cmV2aWV3ZXJzID0gWworICAgICAgICAgICAgUmV2aWV3ZXIoJ0J1Z3MgQnVubnknLCBbJ2J1Z3NA
d2IuY29tJ10sICdidWdzJyksCisgICAgICAgICAgICBSZXZpZXdlcignRGFmZnkgRHVjaycsIFsn
ZGFmZnlAd2IuY29tJ10sICdkYWZmeScpLAorICAgICAgICAgICAgUmV2aWV3ZXIoJ1Bvcmt5IFBp
ZycsIFsncG9ya3lAd2IuY29tJ10sICdwb3JreScpLAorICAgICAgICBdCisgICAgICAgIHJldHVy
biBDb21taXR0ZXJMaXN0KGNvbW1pdHRlcnM9Y29tbWl0dGVycywgcmV2aWV3ZXJzPXJldmlld2Vy
cykKKworICAgIF9tb2NrX2dpdF9vdXRwdXQgPSAiIiIKK2NvbW1pdCAzNjZkOWYwOGIxMWI1MDg0
YTZmM2QwODg2ZDA1MDZkYTAxNzFjZDU2CitBdXRob3I6IHR3ZWV0eUB3Yi5jb20gPHR3ZWV0eUB3
Yi5jb21AMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjPgorRGF0ZTogICAyMDEz
LTA1LTAyIDAyOjEwOjI1ICswMDAwCisKKyAgICBIaXQgU3lsdmVzdGVyIHRoZSBDYXQgd2l0aCBh
IGxhcmdlIGhhbW1lci4KKworICAgIFJldmlld2VkIGJ5IFBvcmt5IFBpZy4KKworICAgIGdpdC1z
dm4taWQ6IGh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVua0AxNDk0
ODAgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjCisKK2NvbW1pdCA2OGFmYjky
NDE1OTEwYzRjOTExZjFkYjIzNDg1MDhlNWRkMTkzNTEyCitBdXRob3I6IHR3ZWV0eUB3Yi5jb20g
PHR3ZWV0eUB3Yi5jb21AMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjPgorRGF0
ZTogICAyMDEzLTA1LTAyIDAxOjQ4OjU1ICswMDAwCisKKyAgICBTbWFjayBCdWdzIEJ1bm55IHdp
dGggYSBsYXJnZSBjYXJyb3QuCisKKyAgICBSZXZpZXdlZCBieSBQb3JreSBQaWcuCisKKyAgICBn
aXQtc3ZuLWlkOiBodHRwOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmtA
MTQ5NDc0IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYworIiIiCisKKyAgICBf
ZXhwZWN0ZWRfYmFzaWNfb3V0cHV0ID0gIiIiCitUaGUgZm9sbG93aW5nIHJldmlld2VycyBoYXZl
IHBlcmZvcm1lZCBmZXdlciB0aGFuIDIgcmV2aWV3cyBpbiB0aGUgcGFzdCAxMiBtb250aHM6Cisg
IEJ1Z3MgQnVubnkKKyAgRGFmZnkgRHVjaworVGhlc2UgcmV2aWV3ZXJzIHJlcHJlc2VudCA2Ni42
NyUgKDIgb2YgMykgb2YgYWxsIHJldmlld2Vycy4KKworVGhlIGZvbGxvd2luZyAobm9uLXJldmll
d2VyKSBjb21taXR0ZXJzIGhhdmUgcGVyZm9ybWVkIGZld2VyIHRoYW4gMiBjb21taXRzIGluIHRo
ZSBwYXN0IDEyIG1vbnRoczoKKyAgQWxhIEJhaG1hCisgIFNwZWVkeSBHb256YWxlegorVGhlc2Ug
Y29tbWl0dGVycyByZXByZXNlbnQgNjYuNjclICgyIG9mIDMpIG9mIGFsbCAobm9uLXJldmlld2Vy
KSBjb21taXR0ZXJzLgorIiIiCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAg
c2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSBzZWxmLl9leHBl
Y3RlZF9iYXNpY19vdXRwdXQKKyAgICAgICAgb3B0aW9ucyA9IHNlbGYuX21ha2Vfb3B0aW9ucygp
CisgICAgICAgIHN1Z2dlc3RfZW1lcml0aSA9IFN1Z2dlc3RFbWVyaXRpKCkKKyAgICAgICAgc3Vn
Z2VzdF9lbWVyaXRpLl9pbml0X29wdGlvbnMob3B0aW9ucz1vcHRpb25zKQorICAgICAgICBzdWdn
ZXN0X2VtZXJpdGkuX2NvbW1pdHRlcl9saXN0ID0gc2VsZi5fbWFrZV9jb21taXR0ZXJfbGlzdCgp
CisgICAgICAgIHRvb2wgPSBNb2NrVG9vbCgpCisgICAgICAgIHRvb2wuZXhlY3V0aXZlLnJ1bl9j
b21tYW5kID0gbGFtYmRhIGNvbW1hbmQ6IHNlbGYuX21vY2tfZ2l0X291dHB1dAorICAgICAgICBz
ZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoc3VnZ2VzdF9lbWVyaXRpLCBbXSwgZXhwZWN0ZWRf
c3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCwgb3B0aW9ucz1vcHRpb25zLCB0b29sPXRvb2wpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdG5vbWlu
YXRpb25zLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3N1Z2dlc3Ru
b21pbmF0aW9ucy5weQppbmRleCAzYWUzMzY2NDVlODRiYzUzOTMwMjVjNjk4YjRjMWI3ZWQ4ODhk
NzVlLi5iMWFiNzlhNTUzNjA4Y2JjZGUxZWI4YmMwNzRlNzNhYzFiMzJmYmFjIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdG5vbWluYXRpb25z
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9zdWdnZXN0bm9t
aW5hdGlvbnMucHkKQEAgLTMwLDExOCArMzAsNyBAQAogZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFr
ZV9vcHRpb24KIGltcG9ydCByZQogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFu
Z2Vsb2cgaW1wb3J0IENoYW5nZUxvZ0VudHJ5Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcu
Y29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSB3ZWJraXRweS50b29sLmdyYW1t
YXIgaW1wb3J0IGpvaW5fd2l0aF9zZXBhcmF0b3JzCi1mcm9tIHdlYmtpdHB5LnRvb2wubXVsdGlj
b21tYW5kdG9vbCBpbXBvcnQgQ29tbWFuZAotCi0KLWNsYXNzIENvbW1pdExvZ0Vycm9yKEV4Y2Vw
dGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBFeGNlcHRpb24uX19pbml0
X18oc2VsZikKLQotCi1jbGFzcyBDb21taXRMb2dNaXNzaW5nUmV2aWV3ZXIoQ29tbWl0TG9nRXJy
b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgQ29tbWl0TG9nRXJyb3IuX19p
bml0X18oc2VsZikKLQotCi1jbGFzcyBBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQoQ29tbWFuZCk6
Ci0gICAgX2xlYWRpbmdfaW5kZW50X3JlZ2V4cCA9IHJlLmNvbXBpbGUociJeWyBdezR9IiwgcmUu
TVVMVElMSU5FKQotICAgIF9yZXZpZXdlZF9ieV9yZWdleHAgPSByZS5jb21waWxlKENoYW5nZUxv
Z0VudHJ5LnJldmlld2VkX2J5X3JlZ2V4cCwgcmUuTVVMVElMSU5FKQotICAgIF9wYXRjaF9ieV9y
ZWdleHAgPSByZS5jb21waWxlKHInXlBhdGNoIGJ5ICg/UDxuYW1lPi4rPylccys8KD9QPGVtYWls
PltePD5dKyk+IG9uICg/UDxkYXRlPlxkezR9LVxkezJ9LVxkezJ9KSQnLCByZS5NVUxUSUxJTkUp
Ci0gICAgX2NvbW1pdHRlcl9yZWdleHAgPSByZS5jb21waWxlKHInXkF1dGhvcjogKD9QPGVtYWls
PlxTKylccys8W14+XSs+JCcsIHJlLk1VTFRJTElORSkKLSAgICBfZGF0ZV9yZWdleHAgPSByZS5j
b21waWxlKHInXkRhdGU6ICAgKD9QPGRhdGU+XGR7NH0tXGR7Mn0tXGR7Mn0pICg/UDx0aW1lPlxk
ezJ9OlxkezJ9OlxkezJ9KSBbXCtcLV1cZHs0fSQnLCByZS5NVUxUSUxJTkUpCi0gICAgX3Jldmlz
aW9uX3JlZ2V4cCA9IHJlLmNvbXBpbGUocideZ2l0LXN2bi1pZDogaHR0cDovL3N2bi53ZWJraXQu
b3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rQCg/UDxzdm5pZD5cZCspICg/UDxnaXRpZD5bMC05
YS1mXC1dezM2fSkkJywgcmUuTVVMVElMSU5FKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9w
dGlvbnM9Tm9uZSk6Ci0gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIFtdCi0gICAgICAgIG9w
dGlvbnMgKz0gWwotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tbWF4LWNvbW1pdC1hZ2UiLCBh
Y3Rpb249InN0b3JlIiwgZGVzdD0ibWF4X2NvbW1pdF9hZ2UiLCB0eXBlPSJpbnQiLCBkZWZhdWx0
PTksIGhlbHA9IlNwZWNpZnkgbWF4aW11bSBjb21taXQgYWdlIHRvIGNvbnNpZGVyIChpbiBtb250
aHMpLiIpLAotICAgICAgICBdCi0gICAgICAgIG9wdGlvbnMgPSBzb3J0ZWQob3B0aW9ucywgY21w
PWxhbWJkYSBhLCBiOiBjbXAoYS5fbG9uZ19vcHRzLCBiLl9sb25nX29wdHMpKQotICAgICAgICBz
dXBlcihBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQsIHNlbGYpLl9faW5pdF9fKG9wdGlvbnM9b3B0
aW9ucykKLSAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgb24gdGhlIHRv
b2wgc29tZXdoZXJlLgotICAgICAgICBzZWxmLl9jb21taXR0ZXJfbGlzdCA9IENvbW1pdHRlckxp
c3QoKQotCi0gICAgZGVmIF9pbml0X29wdGlvbnMoc2VsZiwgb3B0aW9ucyk6Ci0gICAgICAgIHNl
bGYudmVyYm9zZSA9IG9wdGlvbnMudmVyYm9zZQotICAgICAgICBzZWxmLm1heF9jb21taXRfYWdl
ID0gb3B0aW9ucy5tYXhfY29tbWl0X2FnZQotCi0gICAgIyBGSVhNRTogVGhpcyBzaG91bGQgbW92
ZSB0byBzY20ucHkKLSAgICBkZWYgX3JlY2VudF9jb21taXRfbWVzc2FnZXMoc2VsZik6Ci0gICAg
ICAgIGdpdF9sb2cgPSBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ2dpdCcsICds
b2cnLCAnLS1kYXRlPWlzbycsICctLXNpbmNlPSIlcyBtb250aHMgYWdvIicgJSBzZWxmLm1heF9j
b21taXRfYWdlXSkKLSAgICAgICAgbWVzc2FnZXMgPSByZS5zcGxpdChyIl5jb21taXQgXHd7NDB9
JCIsIGdpdF9sb2csIGZsYWdzPXJlLk1VTFRJTElORSlbMTpdICAjIElnbm9yZSB0aGUgZmlyc3Qg
bWVzc2FnZSB3aGljaCB3aWxsIGJlIGVtcHR5LgotICAgICAgICBmb3IgbWVzc2FnZSBpbiBtZXNz
YWdlczoKLSAgICAgICAgICAgICMgVW5pbmRlbnQgYWxsIHRoZSBsaW5lcwotICAgICAgICAgICAg
KG1lc3NhZ2UsIF8pID0gc2VsZi5fbGVhZGluZ19pbmRlbnRfcmVnZXhwLnN1Ym4oIiIsIG1lc3Nh
Z2UpCi0gICAgICAgICAgICB5aWVsZCBtZXNzYWdlLmxzdHJpcCgpICAjIFJlbW92ZSBhbnkgbGVh
ZGluZyBuZXdsaW5lcyBmcm9tIHRoZSBsb2cgbWVzc2FnZS4KLQotICAgIGRlZiBfYXV0aG9yX25h
bWVfZnJvbV9lbWFpbChzZWxmLCBlbWFpbCk6Ci0gICAgICAgIGNvbnRyaWJ1dG9yID0gc2VsZi5f
Y29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JfYnlfZW1haWwoZW1haWwpCi0gICAgICAgIHJldHVy
biBjb250cmlidXRvci5mdWxsX25hbWUgaWYgY29udHJpYnV0b3IgZWxzZSBOb25lCi0KLSAgICBk
ZWYgX2NvbnRyaWJ1dG9yX2Zyb21fZW1haWwoc2VsZiwgZW1haWwpOgotICAgICAgICBjb250cmli
dXRvciA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yX2J5X2VtYWlsKGVtYWlsKQot
ICAgICAgICByZXR1cm4gY29udHJpYnV0b3IgaWYgY29udHJpYnV0b3IgZWxzZSBOb25lCi0KLSAg
ICBkZWYgX3BhcnNlX2NvbW1pdF9tZXNzYWdlKHNlbGYsIGNvbW1pdF9tZXNzYWdlKToKLSAgICAg
ICAgY29tbWl0dGVyX21hdGNoID0gc2VsZi5fY29tbWl0dGVyX3JlZ2V4cC5zZWFyY2goY29tbWl0
X21lc3NhZ2UpCi0gICAgICAgIGlmIG5vdCBjb21taXR0ZXJfbWF0Y2g6Ci0gICAgICAgICAgICBy
YWlzZSBDb21taXRMb2dFcnJvcgotCi0gICAgICAgIGNvbW1pdHRlcl9lbWFpbCA9IGNvbW1pdHRl
cl9tYXRjaC5ncm91cCgnZW1haWwnKQotICAgICAgICBpZiBub3QgY29tbWl0dGVyX2VtYWlsOgot
ICAgICAgICAgICAgcmFpc2UgQ29tbWl0TG9nRXJyb3IKLQotICAgICAgICBjb21taXR0ZXIgPSBz
ZWxmLl9jb250cmlidXRvcl9mcm9tX2VtYWlsKGNvbW1pdHRlcl9lbWFpbCkKLSAgICAgICAgaWYg
bm90IGNvbW1pdHRlcjoKLSAgICAgICAgICAgIHJhaXNlIENvbW1pdExvZ0Vycm9yCi0KLSAgICAg
ICAgY29tbWl0X2RhdGVfbWF0Y2ggPSBzZWxmLl9kYXRlX3JlZ2V4cC5zZWFyY2goY29tbWl0X21l
c3NhZ2UpCi0gICAgICAgIGlmIG5vdCBjb21taXRfZGF0ZV9tYXRjaDoKLSAgICAgICAgICAgIHJh
aXNlIENvbW1pdExvZ0Vycm9yCi0gICAgICAgIGNvbW1pdF9kYXRlID0gY29tbWl0X2RhdGVfbWF0
Y2guZ3JvdXAoJ2RhdGUnKQotCi0gICAgICAgIHJldmlzaW9uX21hdGNoID0gc2VsZi5fcmV2aXNp
b25fcmVnZXhwLnNlYXJjaChjb21taXRfbWVzc2FnZSkKLSAgICAgICAgaWYgbm90IHJldmlzaW9u
X21hdGNoOgotICAgICAgICAgICAgcmFpc2UgQ29tbWl0TG9nRXJyb3IKLSAgICAgICAgcmV2aXNp
b24gPSByZXZpc2lvbl9tYXRjaC5ncm91cCgnc3ZuaWQnKQotCi0gICAgICAgICMgTG9vayBmb3Ig
IlBhdGNoIGJ5IiBsaW5lIGZpcnN0LCB3aGljaCBpcyB1c2VkIGZvciBub24tY29tbWl0dGVyIGNv
bnRyaWJ1dG9yczsKLSAgICAgICAgIyBvdGhlcndpc2UsIHVzZSBjb21taXR0ZXIgaW5mbyBkZXRl
cm1pbmVkIGFib3ZlLgotICAgICAgICBhdXRob3JfbWF0Y2ggPSBzZWxmLl9wYXRjaF9ieV9yZWdl
eHAuc2VhcmNoKGNvbW1pdF9tZXNzYWdlKQotICAgICAgICBpZiBub3QgYXV0aG9yX21hdGNoOgot
ICAgICAgICAgICAgYXV0aG9yX21hdGNoID0gY29tbWl0dGVyX21hdGNoCi0KLSAgICAgICAgYXV0
aG9yX2VtYWlsID0gYXV0aG9yX21hdGNoLmdyb3VwKCdlbWFpbCcpCi0gICAgICAgIGlmIG5vdCBh
dXRob3JfZW1haWw6Ci0gICAgICAgICAgICBhdXRob3JfZW1haWwgPSBjb21taXR0ZXJfZW1haWwK
LQotICAgICAgICBhdXRob3JfbmFtZSA9IGF1dGhvcl9tYXRjaC5ncm91cCgnbmFtZScpIGlmICdu
YW1lJyBpbiBhdXRob3JfbWF0Y2guZ3JvdXBkaWN0KCkgZWxzZSBOb25lCi0gICAgICAgIGlmIG5v
dCBhdXRob3JfbmFtZToKLSAgICAgICAgICAgIGF1dGhvcl9uYW1lID0gc2VsZi5fYXV0aG9yX25h
bWVfZnJvbV9lbWFpbChhdXRob3JfZW1haWwpCi0gICAgICAgIGlmIG5vdCBhdXRob3JfbmFtZToK
LSAgICAgICAgICAgIHJhaXNlIENvbW1pdExvZ0Vycm9yCi0KLSAgICAgICAgY29udHJpYnV0b3Ig
PSBzZWxmLl9jb250cmlidXRvcl9mcm9tX2VtYWlsKGF1dGhvcl9lbWFpbCkKLSAgICAgICAgaWYg
Y29udHJpYnV0b3IgYW5kIGF1dGhvcl9uYW1lICE9IGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZSBhbmQg
Y29udHJpYnV0b3IuZnVsbF9uYW1lOgotICAgICAgICAgICAgYXV0aG9yX25hbWUgPSBjb250cmli
dXRvci5mdWxsX25hbWUKLQotICAgICAgICByZXZpZXdlcl9tYXRjaCA9IHNlbGYuX3Jldmlld2Vk
X2J5X3JlZ2V4cC5zZWFyY2goY29tbWl0X21lc3NhZ2UpCi0gICAgICAgIGlmIG5vdCByZXZpZXdl
cl9tYXRjaDoKLSAgICAgICAgICAgIHJhaXNlIENvbW1pdExvZ01pc3NpbmdSZXZpZXdlcgotICAg
ICAgICByZXZpZXdlcnMgPSByZXZpZXdlcl9tYXRjaC5ncm91cCgncmV2aWV3ZXInKQotCi0gICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAnY29tbWl0dGVyJzogY29tbWl0dGVyLAotICAgICAg
ICAgICAgJ2NvbW1pdF9kYXRlJzogY29tbWl0X2RhdGUsCi0gICAgICAgICAgICAncmV2aXNpb24n
OiByZXZpc2lvbiwKLSAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiBhdXRob3JfZW1haWwsCi0g
ICAgICAgICAgICAnYXV0aG9yX25hbWUnOiBhdXRob3JfbmFtZSwKLSAgICAgICAgICAgICdjb250
cmlidXRvcic6IGNvbnRyaWJ1dG9yLAotICAgICAgICAgICAgJ3Jldmlld2Vycyc6IHJldmlld2Vy
cywKLSAgICAgICAgfQorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmFic3RyYWN0Y29tbWl0
bG9nY29tbWFuZCBpbXBvcnQgKgogCiAKIGNsYXNzIFN1Z2dlc3ROb21pbmF0aW9ucyhBYnN0cmFj
dENvbW1pdExvZ0NvbW1hbmQpOgpAQCAtMjEyLDcgKzEwMSw3IEBAIGNsYXNzIFN1Z2dlc3ROb21p
bmF0aW9ucyhBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQpOgogICAgICAgICB9CiAgICAgICAgIGZv
ciBjb21taXRfbWVzc2FnZSBpbiBzZWxmLl9yZWNlbnRfY29tbWl0X21lc3NhZ2VzKCk6CiAgICAg
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fY291bnRfY29tbWl0KHNlbGYuX3Bh
cnNlX2NvbW1pdF9tZXNzYWdlKGNvbW1pdF9tZXNzYWdlKSwgYW5hbHlzaXMpCisgICAgICAgICAg
ICAgICAgc2VsZi5fY291bnRfY29tbWl0KHNlbGYuX3BhcnNlX2NvbW1pdF9tZXNzYWdlKGNvbW1p
dF9tZXNzYWdlLCByZXF1aXJlX3Jldmlldz1UcnVlKSwgYW5hbHlzaXMpCiAgICAgICAgICAgICBl
eGNlcHQgQ29tbWl0TG9nRXJyb3IsIGV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBjb250aW51
ZQogICAgICAgICByZXR1cm4gYW5hbHlzaXNbJ2NvdW50ZXJzX2J5X2VtYWlsJ10K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200516</attachid>
            <date>2013-05-03 23:26:04 -0700</date>
            <delta_ts>2013-05-08 16:05:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115387-20130503232516.patch</filename>
            <type>text/plain</type>
            <size>32589</size>
            <attacher name="Glenn Adams">glenn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NDgwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzlmNjRmNTg5NWE2OWMxZWQ3ZGY3Y2EzZmUyOWFmYzVi
YWViOGI1My4uNzc1ZWM2ZGY3OWI0ZWRiODg2ZTAyOWRkMjlhZDA5YjFjNzNhOGY4YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDEzLTA1LTAzICBHbGVubiBBZGFtcyAgPGdsZW5uQHNreW5hdi5jb20+CisKKyAgICAg
ICAgW3dlYmtpdHB5XSBOZWVkIHN1Z2dlc3QtZW1lcml0aSBjb21tYW5kCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzODcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VnZ2VzdC1lbWVyaXRpIGNv
bW1hbmQgdGhhdCBzaG93cyBpZGxlIHJldmlld2VycyBhbmQgKG5vbi1yZXZpZXdlcikgY29tbWl0
dGVycyBhcyBjYW5kaWRhdGVzIGZvciBlbWVyaXR1cyBzdGF0dXMuCisgICAgICAgIEVtZXJpdGkg
aXMgdGhlIHBsdXJhbCBvZiBlbWVyaXR1cy4KKworICAgICAgICBCeSBkZWZhdWx0LCByZXZpZXdl
cnMgdGhhdCByZXZpZXcgZmV3ZXIgdGhhbiAyIHBhdGNoZXMgaW4gdGhlIHBhc3QgMTIgbW9udGhz
IGFyZSBmbGFnZ2VkIGFzIGlkbGUgKGluYWN0aXZlKS4KKyAgICAgICAgU2ltaWxhcmx5LCAobm9u
LXJldmlld2VyKSBjb21taXR0ZXJzIHRoYXQgY29tbWl0IGZld2VyIHRoYW4gMiBwYXRjaGVzIGlu
IHRoZSBwYXN0IDEyIG1vbnRocyBhcmUgZmxhZ2dlZCBhcyBpZGxlIChpbmFjdGl2ZSkuCisKKyAg
ICAgICAgVGhlc2UgcGFyYW1ldGVycyBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgZm9sbG93aW5n
IG9wdGlvbnM6CisKKyAgICAgICAgLS1yZXZpZXdlci1pZGxlICAgICAgICAtIHJldmlld2VyIGlk
bGUgcGVyaW9kIChpbiBtb250aHMpLCBkZWZhdWx0cyB0byAxMgorICAgICAgICAtLXJldmlld2Vy
LW1pbi1jb3VudCAgIC0gbWluaW11bSByZXZpZXcgY291bnQgaW4gaWRsZSBwZXJpb2QsIGRlZmF1
bHRzIHRvIDIKKyAgICAgICAgLS1jb21taXR0ZXItaWRsZSAgICAgICAtIGNvbW1pdHRlciBpZGxl
IHBlcmlvZCAoaW4gbW9udGhzKSwgZGVmYXVsdHMgdG8gMTIKKyAgICAgICAgLS1jb21taXR0ZXIt
bWluLWNvdW50ICAtIG1pbmltdW0gY29tbWl0IGNvdW50IGluIGlkbGUgcGVyaW9kLCBkZWZhdWx0
cyB0byAyCisKKyAgICAgICAgQnkgZGVmYXVsdCwgYm90aCBpZGxlIHJldmlld2VycyBhbmQgKG5v
bi1yZXZpZXdlcikgY29tbWl0dGVycyBhcmUgc2hvd24uIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBj
YW4gYmUKKyAgICAgICAgdXNlZCB0byByZWR1Y2Ugd2hhdCBpcyBhbmFseXplZCBhbmQgb3V0cHV0
OgorCisgICAgICAgIC0tbm8tcmV2aWV3ZXJzICAgICAgICAgLSBkb24ndCBhbmFseXplIG9yIHNo
b3cgaWRsZSByZXZpZXdlcnMKKyAgICAgICAgLS1uby1jb21taXR0ZXJzICAgICAgICAtIGRvbid0
IGFuYWx5emUgb3Igc2hvdyBpZGxlIGNvbW1pdHRlcnMKKworICAgICAgICBUaGUgbm93IHNoYXJl
ZCBBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQgYmFzZSBjbGFzcyBpcyBhbHNvIG1vdmVkIHRvIGl0
cyBvd24gc291cmNlIGZpbGUuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdCBhZGRlZDogc3VnZ2Vz
dGVtZXJpdGlfdW5pdHRlc3QKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9fX2luaXRfXy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvYWJzdHJhY3Rjb21taXRsb2djb21tYW5kLnB5OiBBZGRlZC4gQ29kZSBtb3ZlZCBmcm9tIHN1
Z2dlc3Rub21pbmF0aW9ucy5weS4KKyAgICAgICAgKENvbW1pdExvZ0Vycm9yKToKKyAgICAgICAg
KENvbW1pdExvZ0Vycm9yLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1pdExvZ01pc3NpbmdSZXZp
ZXdlcik6CisgICAgICAgIChDb21taXRMb2dNaXNzaW5nUmV2aWV3ZXIuX19pbml0X18pOgorICAg
ICAgICAoQWJzdHJhY3RDb21taXRMb2dDb21tYW5kKToKKyAgICAgICAgKEFic3RyYWN0Q29tbWl0
TG9nQ29tbWFuZC5fX2luaXRfXyk6CisgICAgICAgIChBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQu
X2luaXRfb3B0aW9ucyk6CisgICAgICAgIChBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQuX3JlY2Vu
dF9jb21taXRfbWVzc2FnZXMpOgorICAgICAgICAoQWJzdHJhY3RDb21taXRMb2dDb21tYW5kLl9h
dXRob3JfbmFtZV9mcm9tX2VtYWlsKToKKyAgICAgICAgKEFic3RyYWN0Q29tbWl0TG9nQ29tbWFu
ZC5fY29udHJpYnV0b3JfZnJvbV9lbWFpbCk6CisgICAgICAgIChBYnN0cmFjdENvbW1pdExvZ0Nv
bW1hbmQuX3BhcnNlX2NvbW1pdF9tZXNzYWdlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdGVtZXJpdGkucHk6IEFkZGVkLgorICAgICAgICAoU3VnZ2Vz
dEVtZXJpdGkpOgorICAgICAgICAoU3VnZ2VzdEVtZXJpdGkuX19pbml0X18pOgorICAgICAgICAo
U3VnZ2VzdEVtZXJpdGkuX2luaXRfb3B0aW9ucyk6CisgICAgICAgIChTdWdnZXN0RW1lcml0aS5f
Y291bnRfYWN0aXZpdHkpOgorICAgICAgICAoU3VnZ2VzdEVtZXJpdGkuX2NvbGxlY3Rfc3VnZ2Vz
dGlvbnMpOgorICAgICAgICAoU3VnZ2VzdEVtZXJpdGkuX3ByaW50X3N1Z2dlc3Rpb25zKToKKyAg
ICAgICAgKFN1Z2dlc3RFbWVyaXRpLl9jb3VudF9yZWNlbnRfYWN0aXZpdHkpOgorICAgICAgICAo
U3VnZ2VzdEVtZXJpdGkuZXhlY3V0ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3N1Z2dlc3RlbWVyaXRpX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFN1
Z2dlc3RFbWVyaXRpVGVzdCk6CisgICAgICAgIChTdWdnZXN0RW1lcml0aVRlc3QuX21ha2Vfb3B0
aW9ucyk6CisgICAgICAgIChTdWdnZXN0RW1lcml0aVRlc3QuX21ha2VfY29tbWl0dGVyX2xpc3Qp
OgorICAgICAgICAodGVzdF9iYXNpYyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3N1Z2dlc3Rub21pbmF0aW9ucy5weTogTW92ZSBBYnN0cmFjdENvbW1pdExvZ0Nv
bW1hbmQgZXQgYWwgdG8gYWJzdHJhY3Rjb21taXRsb2djb21tYW5kLnB5LgorICAgICAgICAoU3Vn
Z2VzdE5vbWluYXRpb25zLl9jb3VudF9yZWNlbnRfcGF0Y2hlcyk6IEFkZCByZXF1aXJlX3Jldmll
d3Mgb3B0aW9uLCB3aGljaCBkaWZmZXJzIGZyb20gc3VnZ2VzdC1ub21pbmF0aW9ucyBhbmQgc3Vn
Z2VzdC1lbWVyaXRpLgorCiAyMDEzLTA1LTAxICBHbGVubiBBZGFtcyAgPGdsZW5uQHNreW5hdi5j
b20+CiAKICAgICAgICAgW3dlYmtpdHB5XSBOZWVkIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNv
bW1hbmRzIHRoYXQgYW5hbHl6ZSBjb21taXQgbG9ncwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CmluZGV4IGIzODJiNDYzOTRhYjZmYmFlMTFm
Nzc2MWIxY2RlZmQ4YmFmY2M0ODIuLjQ3Zjk1YjNjNDdlMDY5N2Y0ZmI4MDcxZTI5ZDVhZmNlMmEz
NzU1Y2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9f
X2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHkKQEAgLTIwLDYgKzIwLDcgQEAgZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnJl
YmFzZWxpbmUgaW1wb3J0IFJlYmFzZWxpbmUKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5y
ZWJhc2VsaW5lc2VydmVyIGltcG9ydCBSZWJhc2VsaW5lU2VydmVyCiBmcm9tIHdlYmtpdHB5LnRv
b2wuY29tbWFuZHMuc2hlcmlmZmJvdCBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLnVwbG9hZCBpbXBvcnQgKgotZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnN1Z2dlc3Ru
b21pbmF0aW9ucyBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnN1Z2dlc3Rl
bWVyaXRpIGltcG9ydCBTdWdnZXN0RW1lcml0aQorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRz
LnN1Z2dlc3Rub21pbmF0aW9ucyBpbXBvcnQgU3VnZ2VzdE5vbWluYXRpb25zCiAKIEFic3RyYWN0
RWFybHlXYXJuaW5nU3lzdGVtLmxvYWRfZXdzX2NsYXNzZXMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Fic3RyYWN0Y29tbWl0bG9nY29tbWFuZC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9hYnN0cmFjdGNvbW1pdGxv
Z2NvbW1hbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDJkZWFiZDExMThiOThhMjUzMzY0YTkxOGYyNWFjMThm
Nzk4ZDNkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9hYnN0cmFjdGNvbW1pdGxvZ2NvbW1hbmQucHkKQEAgLTAsMCArMSwxNDUgQEAKKyMg
Q29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoYykgMjAxMSBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDEzIFNreW5hdiwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KK2lt
cG9ydCByZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2cgaW1wb3J0
IENoYW5nZUxvZ0VudHJ5Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcuY29tbWl0dGVycyBp
bXBvcnQgQ29tbWl0dGVyTGlzdAorZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1wb3J0IGpv
aW5fd2l0aF9zZXBhcmF0b3JzCitmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBp
bXBvcnQgQ29tbWFuZAorCisKK2NsYXNzIENvbW1pdExvZ0Vycm9yKEV4Y2VwdGlvbik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZikKKwor
CitjbGFzcyBDb21taXRMb2dNaXNzaW5nUmV2aWV3ZXIoQ29tbWl0TG9nRXJyb3IpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWl0TG9nRXJyb3IuX19pbml0X18oc2VsZikK
KworCitjbGFzcyBBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQoQ29tbWFuZCk6CisgICAgX2xlYWRp
bmdfaW5kZW50X3JlZ2V4cCA9IHJlLmNvbXBpbGUociJeWyBdezR9IiwgcmUuTVVMVElMSU5FKQor
ICAgIF9yZXZpZXdlZF9ieV9yZWdleHAgPSByZS5jb21waWxlKENoYW5nZUxvZ0VudHJ5LnJldmll
d2VkX2J5X3JlZ2V4cCwgcmUuTVVMVElMSU5FKQorICAgIF9wYXRjaF9ieV9yZWdleHAgPSByZS5j
b21waWxlKHInXlBhdGNoIGJ5ICg/UDxuYW1lPi4rPylccys8KD9QPGVtYWlsPltePD5dKyk+IG9u
ICg/UDxkYXRlPlxkezR9LVxkezJ9LVxkezJ9KSQnLCByZS5NVUxUSUxJTkUpCisgICAgX2NvbW1p
dHRlcl9yZWdleHAgPSByZS5jb21waWxlKHInXkF1dGhvcjogKD9QPGVtYWlsPlxTKylccys8W14+
XSs+JCcsIHJlLk1VTFRJTElORSkKKyAgICBfZGF0ZV9yZWdleHAgPSByZS5jb21waWxlKHInXkRh
dGU6ICAgKD9QPGRhdGU+XGR7NH0tXGR7Mn0tXGR7Mn0pICg/UDx0aW1lPlxkezJ9OlxkezJ9Olxk
ezJ9KSBbXCtcLV1cZHs0fSQnLCByZS5NVUxUSUxJTkUpCisgICAgX3JldmlzaW9uX3JlZ2V4cCA9
IHJlLmNvbXBpbGUocideZ2l0LXN2bi1pZDogaHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRv
cnkvd2Via2l0L3RydW5rQCg/UDxzdm5pZD5cZCspICg/UDxnaXRpZD5bMC05YS1mXC1dezM2fSkk
JywgcmUuTVVMVElMSU5FKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnM9Tm9uZSk6
CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIFtdCisgICAgICAgIG9wdGlvbnMgKz0gWwor
ICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tbWF4LWNvbW1pdC1hZ2UiLCBhY3Rpb249InN0b3Jl
IiwgZGVzdD0ibWF4X2NvbW1pdF9hZ2UiLCB0eXBlPSJpbnQiLCBkZWZhdWx0PTksIGhlbHA9IlNw
ZWNpZnkgbWF4aW11bSBjb21taXQgYWdlIHRvIGNvbnNpZGVyIChpbiBtb250aHMpLiIpLAorICAg
ICAgICBdCisgICAgICAgIG9wdGlvbnMgPSBzb3J0ZWQob3B0aW9ucywgY21wPWxhbWJkYSBhLCBi
OiBjbXAoYS5fbG9uZ19vcHRzLCBiLl9sb25nX29wdHMpKQorICAgICAgICBzdXBlcihBYnN0cmFj
dENvbW1pdExvZ0NvbW1hbmQsIHNlbGYpLl9faW5pdF9fKG9wdGlvbnM9b3B0aW9ucykKKyAgICAg
ICAgIyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgb24gdGhlIHRvb2wgc29tZXdoZXJl
LgorICAgICAgICBzZWxmLl9jb21taXR0ZXJfbGlzdCA9IENvbW1pdHRlckxpc3QoKQorCisgICAg
ZGVmIF9pbml0X29wdGlvbnMoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYudmVyYm9zZSA9
IG9wdGlvbnMudmVyYm9zZQorICAgICAgICBzZWxmLm1heF9jb21taXRfYWdlID0gb3B0aW9ucy5t
YXhfY29tbWl0X2FnZQorCisgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0byBzY20ucHkK
KyAgICBkZWYgX3JlY2VudF9jb21taXRfbWVzc2FnZXMoc2VsZik6CisgICAgICAgIGdpdF9sb2cg
PSBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ2dpdCcsICdsb2cnLCAnLS1kYXRl
PWlzbycsICctLXNpbmNlPSIlcyBtb250aHMgYWdvIicgJSBzZWxmLm1heF9jb21taXRfYWdlXSkK
KyAgICAgICAgbWVzc2FnZXMgPSByZS5zcGxpdChyIl5jb21taXQgXHd7NDB9JCIsIGdpdF9sb2cs
IGZsYWdzPXJlLk1VTFRJTElORSlbMTpdICAjIElnbm9yZSB0aGUgZmlyc3QgbWVzc2FnZSB3aGlj
aCB3aWxsIGJlIGVtcHR5LgorICAgICAgICBmb3IgbWVzc2FnZSBpbiBtZXNzYWdlczoKKyAgICAg
ICAgICAgICMgVW5pbmRlbnQgYWxsIHRoZSBsaW5lcworICAgICAgICAgICAgKG1lc3NhZ2UsIF8p
ID0gc2VsZi5fbGVhZGluZ19pbmRlbnRfcmVnZXhwLnN1Ym4oIiIsIG1lc3NhZ2UpCisgICAgICAg
ICAgICB5aWVsZCBtZXNzYWdlLmxzdHJpcCgpICAjIFJlbW92ZSBhbnkgbGVhZGluZyBuZXdsaW5l
cyBmcm9tIHRoZSBsb2cgbWVzc2FnZS4KKworICAgIGRlZiBfYXV0aG9yX25hbWVfZnJvbV9lbWFp
bChzZWxmLCBlbWFpbCk6CisgICAgICAgIGNvbnRyaWJ1dG9yID0gc2VsZi5fY29tbWl0dGVyX2xp
c3QuY29udHJpYnV0b3JfYnlfZW1haWwoZW1haWwpCisgICAgICAgIHJldHVybiBjb250cmlidXRv
ci5mdWxsX25hbWUgaWYgY29udHJpYnV0b3IgZWxzZSBOb25lCisKKyAgICBkZWYgX2NvbnRyaWJ1
dG9yX2Zyb21fZW1haWwoc2VsZiwgZW1haWwpOgorICAgICAgICBjb250cmlidXRvciA9IHNlbGYu
X2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yX2J5X2VtYWlsKGVtYWlsKQorICAgICAgICByZXR1
cm4gY29udHJpYnV0b3IgaWYgY29udHJpYnV0b3IgZWxzZSBOb25lCisKKyAgICBkZWYgX3BhcnNl
X2NvbW1pdF9tZXNzYWdlKHNlbGYsIGNvbW1pdF9tZXNzYWdlLCByZXF1aXJlX3Jldmlldz1GYWxz
ZSk6CisgICAgICAgIGNvbW1pdHRlcl9tYXRjaCA9IHNlbGYuX2NvbW1pdHRlcl9yZWdleHAuc2Vh
cmNoKGNvbW1pdF9tZXNzYWdlKQorICAgICAgICBpZiBub3QgY29tbWl0dGVyX21hdGNoOgorICAg
ICAgICAgICAgcmFpc2UgQ29tbWl0TG9nRXJyb3IKKworICAgICAgICBjb21taXR0ZXJfZW1haWwg
PSBjb21taXR0ZXJfbWF0Y2guZ3JvdXAoJ2VtYWlsJykKKyAgICAgICAgaWYgbm90IGNvbW1pdHRl
cl9lbWFpbDoKKyAgICAgICAgICAgIHJhaXNlIENvbW1pdExvZ0Vycm9yCisKKyAgICAgICAgY29t
bWl0dGVyID0gc2VsZi5fY29udHJpYnV0b3JfZnJvbV9lbWFpbChjb21taXR0ZXJfZW1haWwpCisg
ICAgICAgIGlmIG5vdCBjb21taXR0ZXI6CisgICAgICAgICAgICByYWlzZSBDb21taXRMb2dFcnJv
cgorCisgICAgICAgIGNvbW1pdF9kYXRlX21hdGNoID0gc2VsZi5fZGF0ZV9yZWdleHAuc2VhcmNo
KGNvbW1pdF9tZXNzYWdlKQorICAgICAgICBpZiBub3QgY29tbWl0X2RhdGVfbWF0Y2g6CisgICAg
ICAgICAgICByYWlzZSBDb21taXRMb2dFcnJvcgorICAgICAgICBjb21taXRfZGF0ZSA9IGNvbW1p
dF9kYXRlX21hdGNoLmdyb3VwKCdkYXRlJykKKworICAgICAgICByZXZpc2lvbl9tYXRjaCA9IHNl
bGYuX3JldmlzaW9uX3JlZ2V4cC5zZWFyY2goY29tbWl0X21lc3NhZ2UpCisgICAgICAgIGlmIG5v
dCByZXZpc2lvbl9tYXRjaDoKKyAgICAgICAgICAgIHJhaXNlIENvbW1pdExvZ0Vycm9yCisgICAg
ICAgIHJldmlzaW9uID0gcmV2aXNpb25fbWF0Y2guZ3JvdXAoJ3N2bmlkJykKKworICAgICAgICAj
IExvb2sgZm9yICJQYXRjaCBieSIgbGluZSBmaXJzdCwgd2hpY2ggaXMgdXNlZCBmb3Igbm9uLWNv
bW1pdHRlciBjb250cmlidXRvcnM7CisgICAgICAgICMgb3RoZXJ3aXNlLCB1c2UgY29tbWl0dGVy
IGluZm8gZGV0ZXJtaW5lZCBhYm92ZS4KKyAgICAgICAgYXV0aG9yX21hdGNoID0gc2VsZi5fcGF0
Y2hfYnlfcmVnZXhwLnNlYXJjaChjb21taXRfbWVzc2FnZSkKKyAgICAgICAgaWYgbm90IGF1dGhv
cl9tYXRjaDoKKyAgICAgICAgICAgIGF1dGhvcl9tYXRjaCA9IGNvbW1pdHRlcl9tYXRjaAorCisg
ICAgICAgIGF1dGhvcl9lbWFpbCA9IGF1dGhvcl9tYXRjaC5ncm91cCgnZW1haWwnKQorICAgICAg
ICBpZiBub3QgYXV0aG9yX2VtYWlsOgorICAgICAgICAgICAgYXV0aG9yX2VtYWlsID0gY29tbWl0
dGVyX2VtYWlsCisKKyAgICAgICAgYXV0aG9yX25hbWUgPSBhdXRob3JfbWF0Y2guZ3JvdXAoJ25h
bWUnKSBpZiAnbmFtZScgaW4gYXV0aG9yX21hdGNoLmdyb3VwZGljdCgpIGVsc2UgTm9uZQorICAg
ICAgICBpZiBub3QgYXV0aG9yX25hbWU6CisgICAgICAgICAgICBhdXRob3JfbmFtZSA9IHNlbGYu
X2F1dGhvcl9uYW1lX2Zyb21fZW1haWwoYXV0aG9yX2VtYWlsKQorICAgICAgICBpZiBub3QgYXV0
aG9yX25hbWU6CisgICAgICAgICAgICByYWlzZSBDb21taXRMb2dFcnJvcgorCisgICAgICAgIGNv
bnRyaWJ1dG9yID0gc2VsZi5fY29udHJpYnV0b3JfZnJvbV9lbWFpbChhdXRob3JfZW1haWwpCisg
ICAgICAgIGlmIGNvbnRyaWJ1dG9yIGFuZCBhdXRob3JfbmFtZSAhPSBjb250cmlidXRvci5mdWxs
X25hbWUgYW5kIGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZToKKyAgICAgICAgICAgIGF1dGhvcl9uYW1l
ID0gY29udHJpYnV0b3IuZnVsbF9uYW1lCisKKyAgICAgICAgcmV2aWV3ZXJfbWF0Y2ggPSBzZWxm
Ll9yZXZpZXdlZF9ieV9yZWdleHAuc2VhcmNoKGNvbW1pdF9tZXNzYWdlKQorICAgICAgICBpZiBu
b3QgcmV2aWV3ZXJfbWF0Y2ggYW5kIHJlcXVpcmVfcmV2aWV3OgorICAgICAgICAgICAgcmFpc2Ug
Q29tbWl0TG9nTWlzc2luZ1Jldmlld2VyCisgICAgICAgIHJldmlld2VycyA9IHJldmlld2VyX21h
dGNoLmdyb3VwKCdyZXZpZXdlcicpIGlmIHJldmlld2VyX21hdGNoIGVsc2UgJycKKworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgJ2NvbW1pdHRlcic6IGNvbW1pdHRlciwKKyAgICAgICAg
ICAgICdjb21taXRfZGF0ZSc6IGNvbW1pdF9kYXRlLAorICAgICAgICAgICAgJ3JldmlzaW9uJzog
cmV2aXNpb24sCisgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogYXV0aG9yX2VtYWlsLAorICAg
ICAgICAgICAgJ2F1dGhvcl9uYW1lJzogYXV0aG9yX25hbWUsCisgICAgICAgICAgICAnY29udHJp
YnV0b3InOiBjb250cmlidXRvciwKKyAgICAgICAgICAgICdyZXZpZXdlcnMnOiByZXZpZXdlcnMs
CisgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9zdWdnZXN0ZW1lcml0aS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9zdWdnZXN0ZW1lcml0aS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDQ5OWNkNGVjMWRkN2MyNzU3Mjc5
MjJkMzRiN2RjYzQ3MWEzOWZjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL3N1Z2dlc3RlbWVyaXRpLnB5CkBAIC0wLDAgKzEsMTgxIEBACisj
IENvcHlyaWdodCAoYykgMjAxMyBTa3luYXYsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBTa3luYXYsIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgoraW1w
b3J0IHJlCisKK2Zyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5hYnN0cmFjdGNvbW1pdGxvZ2Nv
bW1hbmQgaW1wb3J0ICoKKworCitjbGFzcyBTdWdnZXN0RW1lcml0aShBYnN0cmFjdENvbW1pdExv
Z0NvbW1hbmQpOgorICAgIG5hbWUgPSAic3VnZ2VzdC1lbWVyaXRpIgorICAgIGhlbHBfdGV4dCA9
ICJTdWdnZXN0IHJldGlyZW1lbnQgb2YgcmV2aWV3ZXJzL2NvbW1pdHRlcnMgdG8gZW1lcml0dXMg
c3RhdHVzIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gWwor
ICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tY29tbWl0dGVyLWlkbGUiLCBhY3Rpb249InN0b3Jl
IiwgZGVzdD0iY29tbWl0dGVyX2lkbGUiLCB0eXBlPSJpbnQiLCBkZWZhdWx0PTEyLCBoZWxwPSJT
cGVjaWZ5IGlkbGUgdGltZSAoaW4gbW9udGhzKSBmb3IgcmV0aXJpbmcgQ29tbWl0dGVycy4iKSwK
KyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWNvbW1pdHRlci1taW4tY291bnQiLCBhY3Rpb249
InN0b3JlIiwgZGVzdD0iY29tbWl0dGVyX21pbl9jb3VudCIsIHR5cGU9ImludCIsIGRlZmF1bHQ9
MiwgaGVscD0iU3BlY2lmeSBtaW5pbXVtIGNvbW1pdCBjb3VudCBmb3IgcmV0aXJpbmcgQ29tbWl0
dGVycy4iKSwKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLWNvbW1pdHRlcnMiLCBhY3Rp
b249InN0b3JlX2ZhbHNlIiwgZGVzdD0ic2hvd19pZGxlX2NvbW1pdHRlcnMiLCBkZWZhdWx0PVRy
dWUsIGhlbHA9IkRvbid0IGFuYWx5emUgb3Igc2hvdyBpZGxlIENvbW1pdHRlcnMuIiksCisgICAg
ICAgICAgICBtYWtlX29wdGlvbigiLS1yZXZpZXdlci1pZGxlIiwgYWN0aW9uPSJzdG9yZSIsIGRl
c3Q9InJldmlld2VyX2lkbGUiLCB0eXBlPSJpbnQiLCBkZWZhdWx0PTEyLCBoZWxwPSJTcGVjaWZ5
IGlkbGUgdGltZSAoaW4gbW9udGhzKSBmb3IgcmV0aXJpbmcgUmV2aWV3ZXJzLiIpLAorICAgICAg
ICAgICAgbWFrZV9vcHRpb24oIi0tcmV2aWV3ZXItbWluLWNvdW50IiwgYWN0aW9uPSJzdG9yZSIs
IGRlc3Q9InJldmlld2VyX21pbl9jb3VudCIsIHR5cGU9ImludCIsIGRlZmF1bHQ9MiwgaGVscD0i
U3BlY2lmeSBtaW5pbXVtIHJldmlldyBjb3VudCBmb3IgcmV0aXJpbmcgUmV2aWV3ZXJzLiIpLAor
ICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tbm8tcmV2aWV3ZXJzIiwgYWN0aW9uPSJzdG9yZV9m
YWxzZSIsIGRlc3Q9InNob3dfaWRsZV9yZXZpZXdlcnMiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRv
bid0IGFuYWx5emUgb3Igc2hvdyBpZGxlIFJldmlld2Vycy4iKSwKKyAgICAgICAgXQorICAgICAg
ICBzdXBlcihTdWdnZXN0RW1lcml0aSwgc2VsZikuX19pbml0X18ob3B0aW9ucz1vcHRpb25zKQor
CisgICAgZGVmIF9pbml0X29wdGlvbnMoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHN1cGVyKFN1
Z2dlc3RFbWVyaXRpLCBzZWxmKS5faW5pdF9vcHRpb25zKG9wdGlvbnMpCisgICAgICAgIHNlbGYu
Y29tbWl0dGVyX2lkbGUgPSBvcHRpb25zLmNvbW1pdHRlcl9pZGxlCisgICAgICAgIHNlbGYuY29t
bWl0dGVyX21pbl9jb3VudCA9IG9wdGlvbnMuY29tbWl0dGVyX21pbl9jb3VudAorICAgICAgICBz
ZWxmLnNob3dfaWRsZV9jb21taXR0ZXJzID0gb3B0aW9ucy5zaG93X2lkbGVfY29tbWl0dGVycwor
ICAgICAgICBzZWxmLnJldmlld2VyX2lkbGUgPSBvcHRpb25zLnJldmlld2VyX2lkbGUKKyAgICAg
ICAgc2VsZi5yZXZpZXdlcl9taW5fY291bnQgPSBvcHRpb25zLnJldmlld2VyX21pbl9jb3VudAor
ICAgICAgICBzZWxmLnNob3dfaWRsZV9yZXZpZXdlcnMgPSBvcHRpb25zLnNob3dfaWRsZV9yZXZp
ZXdlcnMKKyAgICAgICAgaWYgc2VsZi5tYXhfY29tbWl0X2FnZSA8IG9wdGlvbnMuY29tbWl0dGVy
X2lkbGUgYW5kIHNlbGYuc2hvd19pZGxlX2NvbW1pdHRlcnM6CisgICAgICAgICAgICBzZWxmLm1h
eF9jb21taXRfYWdlID0gb3B0aW9ucy5jb21taXR0ZXJfaWRsZQorICAgICAgICBpZiBzZWxmLm1h
eF9jb21taXRfYWdlIDwgb3B0aW9ucy5yZXZpZXdlcl9pZGxlIGFuZCBzZWxmLnNob3dfaWRsZV9y
ZXZpZXdlcnM6CisgICAgICAgICAgICBzZWxmLm1heF9jb21taXRfYWdlID0gb3B0aW9ucy5yZXZp
ZXdlcl9pZGxlCisKKyAgICBfY29tbWVudF9yZWdleHAgPSByZS5jb21waWxlKHIiXChbXlwpXSpc
KVxzKiIpCisgICAgX3N0cmluZ19yZWdleHAgPSByZS5jb21waWxlKHIiXCJbXlwiXSpcIlxzKiIp
CisKKyAgICBkZWYgX2NvdW50X2FjdGl2aXR5KHNlbGYsIGNvbW1pdCwgYWN0aXZpdHkpOgorICAg
ICAgICByZXZpc2lvbiA9IGNvbW1pdFsncmV2aXNpb24nXQorICAgICAgICBpZiBub3QgcmV2aXNp
b246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLnNob3dfaWRsZV9yZXZp
ZXdlcnM6CisgICAgICAgICAgICByZXZpZXdlcnNfY2FjaGUgPSBhY3Rpdml0eVsncmV2aWV3ZXJz
X2NhY2hlJ10KKyAgICAgICAgICAgIGZvciByZXZpZXdlcl9uYW1lIGluIHJlLnNwbGl0KHIiXHMr
YW5kfCZccyt8XHMqLCg/OlxzKmFuZHwmXHMrKT8iLCBjb21taXRbJ3Jldmlld2VycyddKToKKyAg
ICAgICAgICAgICAgICByZXZpZXdlcl9uYW1lLCBfID0gc2VsZi5fY29tbWVudF9yZWdleHAuc3Vi
bigiIiwgcmV2aWV3ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICByZXZpZXdlcl9uYW1lLCBfID0g
c2VsZi5fc3RyaW5nX3JlZ2V4cC5zdWJuKCIiLCByZXZpZXdlcl9uYW1lKQorICAgICAgICAgICAg
ICAgIHJldmlld2VyX25hbWUgPSByZXZpZXdlcl9uYW1lLnN0cmlwKCkKKyAgICAgICAgICAgICAg
ICByZXZpZXdlciA9IHJldmlld2Vyc19jYWNoZS5nZXQocmV2aWV3ZXJfbmFtZSkKKyAgICAgICAg
ICAgICAgICBpZiBub3QgcmV2aWV3ZXI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9y
cywgXyA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaChy
ZXZpZXdlcl9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBjb250cmlidXRvcnM6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXZpZXdlciA9IGNvbnRyaWJ1dG9yc1swXQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgcmV2aWV3ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV2aWV3ZXJzX2NhY2hlW3Jldmlld2VyX25hbWVdID0gcmV2aWV3ZXIKKyAgICAgICAgICAgIGlm
IHJldmlld2VyOgorICAgICAgICAgICAgICAgIHJldmlld3MgPSBhY3Rpdml0eVsncmV2aWV3cydd
CisgICAgICAgICAgICAgICAgcmV2aWV3ZWRfcmV2aXNpb25zID0gcmV2aWV3cy5nZXQocmV2aWV3
ZXIpCisgICAgICAgICAgICAgICAgaWYgbm90IHJldmlld2VkX3JldmlzaW9uczoKKyAgICAgICAg
ICAgICAgICAgICAgcmV2aWV3ZWRfcmV2aXNpb25zID0gc2V0KCkKKyAgICAgICAgICAgICAgICBy
ZXZpZXdlZF9yZXZpc2lvbnMuYWRkKHJldmlzaW9uKQorICAgICAgICAgICAgICAgIHJldmlld3Nb
cmV2aWV3ZXJdID0gcmV2aWV3ZWRfcmV2aXNpb25zCisKKyAgICAgICAgaWYgc2VsZi5zaG93X2lk
bGVfY29tbWl0dGVyczoKKyAgICAgICAgICAgIGNvbW1pdHRlciA9IGNvbW1pdFsnY29tbWl0dGVy
J10KKyAgICAgICAgICAgIGlmIGNvbW1pdHRlcjoKKyAgICAgICAgICAgICAgICBjb21taXRzID0g
YWN0aXZpdHlbJ2NvbW1pdHMnXQorICAgICAgICAgICAgICAgIGNvbW1pdHRlZF9yZXZpc2lvbnMg
PSBjb21taXRzLmdldChjb21taXR0ZXIpCisgICAgICAgICAgICAgICAgaWYgbm90IGNvbW1pdHRl
ZF9yZXZpc2lvbnM6CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZF9yZXZpc2lvbnMgPSBz
ZXQoKQorICAgICAgICAgICAgICAgIGNvbW1pdHRlZF9yZXZpc2lvbnMuYWRkKHJldmlzaW9uKQor
ICAgICAgICAgICAgICAgIGNvbW1pdHNbY29tbWl0dGVyXSA9IGNvbW1pdHRlZF9yZXZpc2lvbnMK
KworICAgIGRlZiBfY29sbGVjdF9zdWdnZXN0aW9ucyhzZWxmLCBhY3Rpdml0eSk6CisgICAgICAg
IHJldmlld3MgPSBhY3Rpdml0eVsncmV2aWV3cyddCisgICAgICAgIGluYWN0aXZlX3Jldmlld2Vy
cyA9IHNldCgpCisgICAgICAgIHJldmlld2VycyA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LnJldmll
d2VycygpCisgICAgICAgIGZvciByZXZpZXdlciBpbiBzZWxmLl9jb21taXR0ZXJfbGlzdC5yZXZp
ZXdlcnMoKToKKyAgICAgICAgICAgIGlmIHJldmlld2VyIG5vdCBpbiByZXZpZXdzIG9yIGxlbihy
ZXZpZXdzW3Jldmlld2VyXSkgPCBzZWxmLnJldmlld2VyX21pbl9jb3VudDoKKyAgICAgICAgICAg
ICAgICBpbmFjdGl2ZV9yZXZpZXdlcnMuYWRkKHJldmlld2VyKQorICAgICAgICBjb21taXRzID0g
YWN0aXZpdHlbJ2NvbW1pdHMnXQorICAgICAgICBpbmFjdGl2ZV9jb21taXR0ZXJzID0gc2V0KCkK
KyAgICAgICAgY29tbWl0dGVycyA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbW1pdHRlcnMoKQor
ICAgICAgICBjb21taXR0ZXJzX2NvdW50ID0gMAorICAgICAgICBmb3IgY29tbWl0dGVyIGluIGNv
bW1pdHRlcnM6CisgICAgICAgICAgICAjIFNraXAgY29tbWl0dGVycyB0aGF0IGFyZSByZXZpZXdl
cnMuCisgICAgICAgICAgICBpZiBjb21taXR0ZXIuY2FuX3JldmlldzoKKyAgICAgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICAgICAgY29tbWl0dGVyc19jb3VudCArPSAxCisgICAgICAgICAg
ICBpZiBjb21taXR0ZXIgbm90IGluIGNvbW1pdHMgb3IgbGVuKGNvbW1pdHNbY29tbWl0dGVyXSkg
PCBzZWxmLmNvbW1pdHRlcl9taW5fY291bnQ6CisgICAgICAgICAgICAgICAgaW5hY3RpdmVfY29t
bWl0dGVycy5hZGQoY29tbWl0dGVyKQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgJ3Jl
dmlld2Vyc19jb3VudCc6IGxlbihyZXZpZXdlcnMpLAorICAgICAgICAgICAgJ3Jldmlld2VyX2lk
bGUnOiBzZWxmLnJldmlld2VyX2lkbGUsCisgICAgICAgICAgICAncmV2aWV3ZXJfbWluX2NvdW50
Jzogc2VsZi5yZXZpZXdlcl9taW5fY291bnQsCisgICAgICAgICAgICAnaW5hY3RpdmVfcmV2aWV3
ZXJzJzogaW5hY3RpdmVfcmV2aWV3ZXJzLAorICAgICAgICAgICAgJ2NvbW1pdHRlcnNfY291bnQn
OiBjb21taXR0ZXJzX2NvdW50LAorICAgICAgICAgICAgJ2NvbW1pdHRlcl9pZGxlJzogc2VsZi5j
b21taXR0ZXJfaWRsZSwKKyAgICAgICAgICAgICdjb21taXR0ZXJfbWluX2NvdW50Jzogc2VsZi5j
b21taXR0ZXJfbWluX2NvdW50LAorICAgICAgICAgICAgJ2luYWN0aXZlX2NvbW1pdHRlcnMnOiBp
bmFjdGl2ZV9jb21taXR0ZXJzLAorICAgICAgICB9CisKKyAgICBkZWYgX3ByaW50X3N1Z2dlc3Rp
b25zKHNlbGYsIHN1Z2dlc3Rpb25zLCBhY3Rpdml0eSk6CisgICAgICAgIGlmIHNlbGYuc2hvd19p
ZGxlX3Jldmlld2VyczoKKyAgICAgICAgICAgIGluYWN0aXZlX3Jldmlld2VycyA9IHN1Z2dlc3Rp
b25zWydpbmFjdGl2ZV9yZXZpZXdlcnMnXQorICAgICAgICAgICAgbWluX2NvdW50ID0gc3VnZ2Vz
dGlvbnNbJ3Jldmlld2VyX21pbl9jb3VudCddCisgICAgICAgICAgICBpZGxlID0gc3VnZ2VzdGlv
bnNbJ3Jldmlld2VyX2lkbGUnXQorICAgICAgICAgICAgaWYgaW5hY3RpdmVfcmV2aWV3ZXJzOgor
ICAgICAgICAgICAgICAgIHByaW50ICdcblRoZSBmb2xsb3dpbmcgcmV2aWV3ZXJzIGhhdmUgcGVy
Zm9ybWVkIGZld2VyIHRoYW4gJWQgcmV2aWV3JXMgaW4gdGhlIHBhc3QgJWQgbW9udGhzOicgJSAo
bWluX2NvdW50LCAncycgaWYgbWluX2NvdW50ID4gMCBlbHNlICcnLCBpZGxlKQorICAgICAgICAg
ICAgICAgIGZvciByZXZpZXdlciBpbiBzb3J0ZWQoaW5hY3RpdmVfcmV2aWV3ZXJzLCBjbXA9bGFt
YmRhIGEsIGI6IGNtcChhLmZ1bGxfbmFtZSwgYi5mdWxsX25hbWUpKToKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQgJyAgJXMnICUgKHJldmlld2VyLmZ1bGxfbmFtZSkKKyAgICAgICAgICAgICAg
ICB0b3RhbCA9IHN1Z2dlc3Rpb25zWydyZXZpZXdlcnNfY291bnQnXQorICAgICAgICAgICAgICAg
IGNvdW50ID0gbGVuKGluYWN0aXZlX3Jldmlld2VycykKKyAgICAgICAgICAgICAgICByYXRpbyA9
IGZsb2F0KGNvdW50KSAvIGZsb2F0KHRvdGFsKQorICAgICAgICAgICAgICAgIHByaW50ICdUaGVz
ZSByZXZpZXdlcnMgcmVwcmVzZW50ICUuMmYlJSAoJWQgb2YgJWQpIG9mIGFsbCByZXZpZXdlciVz
LicgJSAocmF0aW8gKiAxMDAuMCwgY291bnQsIHRvdGFsLCAncycgaWYgdG90YWwgPiAxIGVsc2Ug
JycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICdcbkFsbCByZXZp
ZXdlcnMgaGF2ZSBwZXJmb3JtZWQgYXQgbGVhc3QgdGhhbiAlZCByZXZpZXclcyBpbiB0aGUgcGFz
dCAlZCBtb250aHMuJyAlIChtaW5fY291bnQsICdzJyBpZiBtaW5fY291bnQgPiAwIGVsc2UgJycs
IGlkbGUpCisgICAgICAgIGlmIHNlbGYuc2hvd19pZGxlX2NvbW1pdHRlcnM6CisgICAgICAgICAg
ICBpbmFjdGl2ZV9jb21taXR0ZXJzID0gc3VnZ2VzdGlvbnNbJ2luYWN0aXZlX2NvbW1pdHRlcnMn
XQorICAgICAgICAgICAgbWluX2NvdW50ID0gc3VnZ2VzdGlvbnNbJ2NvbW1pdHRlcl9taW5fY291
bnQnXQorICAgICAgICAgICAgaWRsZSA9IHN1Z2dlc3Rpb25zWydjb21taXR0ZXJfaWRsZSddCisg
ICAgICAgICAgICBpZiBpbmFjdGl2ZV9jb21taXR0ZXJzOgorICAgICAgICAgICAgICAgIHByaW50
ICdcblRoZSBmb2xsb3dpbmcgKG5vbi1yZXZpZXdlcikgY29tbWl0dGVycyBoYXZlIHBlcmZvcm1l
ZCBmZXdlciB0aGFuICVkIGNvbW1pdCVzIGluIHRoZSBwYXN0ICVkIG1vbnRoczonICUgKG1pbl9j
b3VudCwgJ3MnIGlmIG1pbl9jb3VudCA+IDAgZWxzZSAnJywgaWRsZSkKKyAgICAgICAgICAgICAg
ICBmb3IgY29tbWl0dGVyIGluIHNvcnRlZChpbmFjdGl2ZV9jb21taXR0ZXJzLCBjbXA9bGFtYmRh
IGEsIGI6IGNtcChhLmZ1bGxfbmFtZSwgYi5mdWxsX25hbWUpKToKKyAgICAgICAgICAgICAgICAg
ICAgcHJpbnQgJyAgJXMnICUgKGNvbW1pdHRlci5mdWxsX25hbWUpCisgICAgICAgICAgICAgICAg
dG90YWwgPSBzdWdnZXN0aW9uc1snY29tbWl0dGVyc19jb3VudCddCisgICAgICAgICAgICAgICAg
Y291bnQgPSBsZW4oaW5hY3RpdmVfY29tbWl0dGVycykKKyAgICAgICAgICAgICAgICByYXRpbyA9
IGZsb2F0KGNvdW50KSAvIGZsb2F0KHRvdGFsKQorICAgICAgICAgICAgICAgIHByaW50ICdUaGVz
ZSBjb21taXR0ZXJzIHJlcHJlc2VudCAlLjJmJSUgKCVkIG9mICVkKSBvZiBhbGwgKG5vbi1yZXZp
ZXdlcikgY29tbWl0dGVyJXMuJyAlIChyYXRpbyAqIDEwMC4wLCBjb3VudCwgdG90YWwsICdzJyBp
ZiB0b3RhbCA+IDEgZWxzZSAnJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cHJpbnQgJ1xuQWxsIChub24tcmV2aWV3ZXIpIGNvbW1pdHRlcnMgaGF2ZSBwZXJmb3JtZWQgYXQg
bGVhc3QgdGhhbiAlZCBjb21taXQlcyBpbiB0aGUgcGFzdCAlZCBtb250aHMuJyAlIChtaW5fY291
bnQsICdzJyBpZiBtaW5fY291bnQgPiAwIGVsc2UgJycsIGlkbGUpCisKKyAgICBkZWYgX2NvdW50
X3JlY2VudF9hY3Rpdml0eShzZWxmKToKKyAgICAgICAgYWN0aXZpdHkgPSB7CisgICAgICAgICAg
ICAncmV2aWV3ZXJzX2NhY2hlJzoge30sCisgICAgICAgICAgICAncmV2aWV3cyc6IHt9LAorICAg
ICAgICAgICAgJ2NvbW1pdHMnOiB7fSwKKyAgICAgICAgfQorICAgICAgICBmb3IgY29tbWl0X21l
c3NhZ2UgaW4gc2VsZi5fcmVjZW50X2NvbW1pdF9tZXNzYWdlcygpOgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIHNlbGYuX2NvdW50X2FjdGl2aXR5KHNlbGYuX3BhcnNlX2NvbW1p
dF9tZXNzYWdlKGNvbW1pdF9tZXNzYWdlKSwgYWN0aXZpdHkpCisgICAgICAgICAgICBleGNlcHQg
Q29tbWl0TG9nRXJyb3IsIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICByZXR1cm4gYWN0aXZpdHkKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFy
Z3MsIHRvb2wpOgorICAgICAgICBzZWxmLl9pbml0X29wdGlvbnMob3B0aW9ucykKKyAgICAgICAg
YWN0aXZpdHkgPSBzZWxmLl9jb3VudF9yZWNlbnRfYWN0aXZpdHkoKQorICAgICAgICBzdWdnZXN0
aW9ucyA9IHNlbGYuX2NvbGxlY3Rfc3VnZ2VzdGlvbnMoYWN0aXZpdHkpCisgICAgICAgIHNlbGYu
X3ByaW50X3N1Z2dlc3Rpb25zKHN1Z2dlc3Rpb25zLCBhY3Rpdml0eSkKKworaWYgX19uYW1lX18g
PT0gIl9fbWFpbl9fIjoKKyAgICBTdWdnZXN0RW1lcml0aSgpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdGVtZXJpdGlfdW5pdHRlc3QucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdGVtZXJpdGlfdW5p
dHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FmZTQ4NzNhYTIyNTQxOGFkNzEzODcyZmY0M2MzYTNjNTc3
NzViYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9zdWdnZXN0ZW1lcml0aV91bml0dGVzdC5weQpAQCAtMCwwICsxLDEwOCBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTMgU2t5bmF2LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgU2t5bmF2LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMgaW1wb3J0
IENvbW1pdHRlckxpc3QsIENvbW1pdHRlciwgUmV2aWV3ZXIKK2Zyb20gd2Via2l0cHkudG9vbC5j
b21tYW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0Citmcm9tIHdlYmtpdHB5LnRv
b2wuY29tbWFuZHMuc3VnZ2VzdGVtZXJpdGkgaW1wb3J0IFN1Z2dlc3RFbWVyaXRpCitmcm9tIHdl
YmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zLCBNb2NrVG9vbAorCisKK2Ns
YXNzIFN1Z2dlc3RFbWVyaXRpVGVzdChDb21tYW5kc1Rlc3QpOgorCisgICAgZGVmIF9tYWtlX29w
dGlvbnMoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBkZWZhdWx0cyA9IHsKKyAgICAgICAgICAg
ICdjb21taXR0ZXJfaWRsZSc6IDEyLAorICAgICAgICAgICAgJ2NvbW1pdHRlcl9taW5fY291bnQn
OiAyLAorICAgICAgICAgICAgJ3Nob3dfaWRsZV9jb21taXR0ZXJzJzogVHJ1ZSwKKyAgICAgICAg
ICAgICdyZXZpZXdlcl9pZGxlJzogMTIsCisgICAgICAgICAgICAncmV2aWV3ZXJfbWluX2NvdW50
JzogMiwKKyAgICAgICAgICAgICdzaG93X2lkbGVfcmV2aWV3ZXJzJzogVHJ1ZSwKKyAgICAgICAg
ICAgICdtYXhfY29tbWl0X2FnZSc6IDksCisgICAgICAgICAgICAndmVyYm9zZSc6IEZhbHNlLAor
ICAgICAgICB9CisgICAgICAgIG9wdGlvbnMgPSBNb2NrT3B0aW9ucygqKmRlZmF1bHRzKQorICAg
ICAgICBvcHRpb25zLnVwZGF0ZSgqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIG9wdGlvbnMKKwor
ICAgIGRlZiBfbWFrZV9jb21taXR0ZXJfbGlzdChzZWxmKToKKyAgICAgICAgY29tbWl0dGVycyA9
IFsKKyAgICAgICAgICAgIENvbW1pdHRlcignVHdlZXR5IFBpZScsIFsndHdlZXR5QHdiLmNvbSdd
LCAndHdlZXR5JyksCisgICAgICAgICAgICBDb21taXR0ZXIoJ1NwZWVkeSBHb256YWxleicsIFsn
c3BlZWR5QHdiLmNvbSddLCAnc3BlZWR5JyksCisgICAgICAgICAgICBDb21taXR0ZXIoJ0FsYSBC
YWhtYScsIFsnYWxhQHdiLmNvbSddLCAnYWxhJyksCisgICAgICAgIF0KKyAgICAgICAgcmV2aWV3
ZXJzID0gWworICAgICAgICAgICAgUmV2aWV3ZXIoJ0J1Z3MgQnVubnknLCBbJ2J1Z3NAd2IuY29t
J10sICdidWdzJyksCisgICAgICAgICAgICBSZXZpZXdlcignRGFmZnkgRHVjaycsIFsnZGFmZnlA
d2IuY29tJ10sICdkYWZmeScpLAorICAgICAgICAgICAgUmV2aWV3ZXIoJ1Bvcmt5IFBpZycsIFsn
cG9ya3lAd2IuY29tJ10sICdwb3JreScpLAorICAgICAgICBdCisgICAgICAgIHJldHVybiBDb21t
aXR0ZXJMaXN0KGNvbW1pdHRlcnM9Y29tbWl0dGVycywgcmV2aWV3ZXJzPXJldmlld2VycykKKwor
ICAgIF9tb2NrX2dpdF9vdXRwdXQgPSAiIiIKK2NvbW1pdCAzNjZkOWYwOGIxMWI1MDg0YTZmM2Qw
ODg2ZDA1MDZkYTAxNzFjZDU2CitBdXRob3I6IHR3ZWV0eUB3Yi5jb20gPHR3ZWV0eUB3Yi5jb21A
MjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjPgorRGF0ZTogICAyMDEzLTA1LTAy
IDAyOjEwOjI1ICswMDAwCisKKyAgICBIaXQgU3lsdmVzdGVyIHRoZSBDYXQgd2l0aCBhIGxhcmdl
IGhhbW1lci4KKworICAgIFJldmlld2VkIGJ5IFBvcmt5IFBpZy4KKworICAgIGdpdC1zdm4taWQ6
IGh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVua0AxNDk0ODAgMjY4
ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjCisKK2NvbW1pdCA2OGFmYjkyNDE1OTEw
YzRjOTExZjFkYjIzNDg1MDhlNWRkMTkzNTEyCitBdXRob3I6IHR3ZWV0eUB3Yi5jb20gPHR3ZWV0
eUB3Yi5jb21AMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjPgorRGF0ZTogICAy
MDEzLTA1LTAyIDAxOjQ4OjU1ICswMDAwCisKKyAgICBTbWFjayBCdWdzIEJ1bm55IHdpdGggYSBs
YXJnZSBjYXJyb3QuCisKKyAgICBSZXZpZXdlZCBieSBQb3JreSBQaWcuCisKKyAgICBnaXQtc3Zu
LWlkOiBodHRwOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmtAMTQ5NDc0
IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYworIiIiCisKKyAgICBfZXhwZWN0
ZWRfYmFzaWNfb3V0cHV0ID0gIiIiCitUaGUgZm9sbG93aW5nIHJldmlld2VycyBoYXZlIHBlcmZv
cm1lZCBmZXdlciB0aGFuIDIgcmV2aWV3cyBpbiB0aGUgcGFzdCAxMiBtb250aHM6CisgIEJ1Z3Mg
QnVubnkKKyAgRGFmZnkgRHVjaworVGhlc2UgcmV2aWV3ZXJzIHJlcHJlc2VudCA2Ni42NyUgKDIg
b2YgMykgb2YgYWxsIHJldmlld2Vycy4KKworVGhlIGZvbGxvd2luZyAobm9uLXJldmlld2VyKSBj
b21taXR0ZXJzIGhhdmUgcGVyZm9ybWVkIGZld2VyIHRoYW4gMiBjb21taXRzIGluIHRoZSBwYXN0
IDEyIG1vbnRoczoKKyAgQWxhIEJhaG1hCisgIFNwZWVkeSBHb256YWxlegorVGhlc2UgY29tbWl0
dGVycyByZXByZXNlbnQgNjYuNjclICgyIG9mIDMpIG9mIGFsbCAobm9uLXJldmlld2VyKSBjb21t
aXR0ZXJzLgorIiIiCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5t
YXhEaWZmID0gTm9uZQorICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSBzZWxmLl9leHBlY3RlZF9i
YXNpY19vdXRwdXQKKyAgICAgICAgb3B0aW9ucyA9IHNlbGYuX21ha2Vfb3B0aW9ucygpCisgICAg
ICAgIHN1Z2dlc3RfZW1lcml0aSA9IFN1Z2dlc3RFbWVyaXRpKCkKKyAgICAgICAgc3VnZ2VzdF9l
bWVyaXRpLl9pbml0X29wdGlvbnMob3B0aW9ucz1vcHRpb25zKQorICAgICAgICBzdWdnZXN0X2Vt
ZXJpdGkuX2NvbW1pdHRlcl9saXN0ID0gc2VsZi5fbWFrZV9jb21taXR0ZXJfbGlzdCgpCisgICAg
ICAgIHRvb2wgPSBNb2NrVG9vbCgpCisgICAgICAgIHRvb2wuZXhlY3V0aXZlLnJ1bl9jb21tYW5k
ID0gbGFtYmRhIGNvbW1hbmQ6IHNlbGYuX21vY2tfZ2l0X291dHB1dAorICAgICAgICBzZWxmLmFz
c2VydF9leGVjdXRlX291dHB1dHMoc3VnZ2VzdF9lbWVyaXRpLCBbXSwgZXhwZWN0ZWRfc3Rkb3V0
PWV4cGVjdGVkX3N0ZG91dCwgb3B0aW9ucz1vcHRpb25zLCB0b29sPXRvb2wpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdG5vbWluYXRpb25z
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3N1Z2dlc3Rub21pbmF0
aW9ucy5weQppbmRleCAzYWUzMzY2NDVlODRiYzUzOTMwMjVjNjk4YjRjMWI3ZWQ4ODhkNzVlLi5i
MWFiNzlhNTUzNjA4Y2JjZGUxZWI4YmMwNzRlNzNhYzFiMzJmYmFjIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvc3VnZ2VzdG5vbWluYXRpb25zLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9zdWdnZXN0bm9taW5hdGlv
bnMucHkKQEAgLTMwLDExOCArMzAsNyBAQAogZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRp
b24KIGltcG9ydCByZQogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2cg
aW1wb3J0IENoYW5nZUxvZ0VudHJ5Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcuY29tbWl0
dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAotZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1w
b3J0IGpvaW5fd2l0aF9zZXBhcmF0b3JzCi1mcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5k
dG9vbCBpbXBvcnQgQ29tbWFuZAotCi0KLWNsYXNzIENvbW1pdExvZ0Vycm9yKEV4Y2VwdGlvbik6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2Vs
ZikKLQotCi1jbGFzcyBDb21taXRMb2dNaXNzaW5nUmV2aWV3ZXIoQ29tbWl0TG9nRXJyb3IpOgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgQ29tbWl0TG9nRXJyb3IuX19pbml0X18o
c2VsZikKLQotCi1jbGFzcyBBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQoQ29tbWFuZCk6Ci0gICAg
X2xlYWRpbmdfaW5kZW50X3JlZ2V4cCA9IHJlLmNvbXBpbGUociJeWyBdezR9IiwgcmUuTVVMVElM
SU5FKQotICAgIF9yZXZpZXdlZF9ieV9yZWdleHAgPSByZS5jb21waWxlKENoYW5nZUxvZ0VudHJ5
LnJldmlld2VkX2J5X3JlZ2V4cCwgcmUuTVVMVElMSU5FKQotICAgIF9wYXRjaF9ieV9yZWdleHAg
PSByZS5jb21waWxlKHInXlBhdGNoIGJ5ICg/UDxuYW1lPi4rPylccys8KD9QPGVtYWlsPltePD5d
Kyk+IG9uICg/UDxkYXRlPlxkezR9LVxkezJ9LVxkezJ9KSQnLCByZS5NVUxUSUxJTkUpCi0gICAg
X2NvbW1pdHRlcl9yZWdleHAgPSByZS5jb21waWxlKHInXkF1dGhvcjogKD9QPGVtYWlsPlxTKylc
cys8W14+XSs+JCcsIHJlLk1VTFRJTElORSkKLSAgICBfZGF0ZV9yZWdleHAgPSByZS5jb21waWxl
KHInXkRhdGU6ICAgKD9QPGRhdGU+XGR7NH0tXGR7Mn0tXGR7Mn0pICg/UDx0aW1lPlxkezJ9Olxk
ezJ9OlxkezJ9KSBbXCtcLV1cZHs0fSQnLCByZS5NVUxUSUxJTkUpCi0gICAgX3JldmlzaW9uX3Jl
Z2V4cCA9IHJlLmNvbXBpbGUocideZ2l0LXN2bi1pZDogaHR0cDovL3N2bi53ZWJraXQub3JnL3Jl
cG9zaXRvcnkvd2Via2l0L3RydW5rQCg/UDxzdm5pZD5cZCspICg/UDxnaXRpZD5bMC05YS1mXC1d
ezM2fSkkJywgcmUuTVVMVElMSU5FKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnM9
Tm9uZSk6Ci0gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIFtdCi0gICAgICAgIG9wdGlvbnMg
Kz0gWwotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tbWF4LWNvbW1pdC1hZ2UiLCBhY3Rpb249
InN0b3JlIiwgZGVzdD0ibWF4X2NvbW1pdF9hZ2UiLCB0eXBlPSJpbnQiLCBkZWZhdWx0PTksIGhl
bHA9IlNwZWNpZnkgbWF4aW11bSBjb21taXQgYWdlIHRvIGNvbnNpZGVyIChpbiBtb250aHMpLiIp
LAotICAgICAgICBdCi0gICAgICAgIG9wdGlvbnMgPSBzb3J0ZWQob3B0aW9ucywgY21wPWxhbWJk
YSBhLCBiOiBjbXAoYS5fbG9uZ19vcHRzLCBiLl9sb25nX29wdHMpKQotICAgICAgICBzdXBlcihB
YnN0cmFjdENvbW1pdExvZ0NvbW1hbmQsIHNlbGYpLl9faW5pdF9fKG9wdGlvbnM9b3B0aW9ucykK
LSAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgb24gdGhlIHRvb2wgc29t
ZXdoZXJlLgotICAgICAgICBzZWxmLl9jb21taXR0ZXJfbGlzdCA9IENvbW1pdHRlckxpc3QoKQot
Ci0gICAgZGVmIF9pbml0X29wdGlvbnMoc2VsZiwgb3B0aW9ucyk6Ci0gICAgICAgIHNlbGYudmVy
Ym9zZSA9IG9wdGlvbnMudmVyYm9zZQotICAgICAgICBzZWxmLm1heF9jb21taXRfYWdlID0gb3B0
aW9ucy5tYXhfY29tbWl0X2FnZQotCi0gICAgIyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0byBz
Y20ucHkKLSAgICBkZWYgX3JlY2VudF9jb21taXRfbWVzc2FnZXMoc2VsZik6Ci0gICAgICAgIGdp
dF9sb2cgPSBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ2dpdCcsICdsb2cnLCAn
LS1kYXRlPWlzbycsICctLXNpbmNlPSIlcyBtb250aHMgYWdvIicgJSBzZWxmLm1heF9jb21taXRf
YWdlXSkKLSAgICAgICAgbWVzc2FnZXMgPSByZS5zcGxpdChyIl5jb21taXQgXHd7NDB9JCIsIGdp
dF9sb2csIGZsYWdzPXJlLk1VTFRJTElORSlbMTpdICAjIElnbm9yZSB0aGUgZmlyc3QgbWVzc2Fn
ZSB3aGljaCB3aWxsIGJlIGVtcHR5LgotICAgICAgICBmb3IgbWVzc2FnZSBpbiBtZXNzYWdlczoK
LSAgICAgICAgICAgICMgVW5pbmRlbnQgYWxsIHRoZSBsaW5lcwotICAgICAgICAgICAgKG1lc3Nh
Z2UsIF8pID0gc2VsZi5fbGVhZGluZ19pbmRlbnRfcmVnZXhwLnN1Ym4oIiIsIG1lc3NhZ2UpCi0g
ICAgICAgICAgICB5aWVsZCBtZXNzYWdlLmxzdHJpcCgpICAjIFJlbW92ZSBhbnkgbGVhZGluZyBu
ZXdsaW5lcyBmcm9tIHRoZSBsb2cgbWVzc2FnZS4KLQotICAgIGRlZiBfYXV0aG9yX25hbWVfZnJv
bV9lbWFpbChzZWxmLCBlbWFpbCk6Ci0gICAgICAgIGNvbnRyaWJ1dG9yID0gc2VsZi5fY29tbWl0
dGVyX2xpc3QuY29udHJpYnV0b3JfYnlfZW1haWwoZW1haWwpCi0gICAgICAgIHJldHVybiBjb250
cmlidXRvci5mdWxsX25hbWUgaWYgY29udHJpYnV0b3IgZWxzZSBOb25lCi0KLSAgICBkZWYgX2Nv
bnRyaWJ1dG9yX2Zyb21fZW1haWwoc2VsZiwgZW1haWwpOgotICAgICAgICBjb250cmlidXRvciA9
IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yX2J5X2VtYWlsKGVtYWlsKQotICAgICAg
ICByZXR1cm4gY29udHJpYnV0b3IgaWYgY29udHJpYnV0b3IgZWxzZSBOb25lCi0KLSAgICBkZWYg
X3BhcnNlX2NvbW1pdF9tZXNzYWdlKHNlbGYsIGNvbW1pdF9tZXNzYWdlKToKLSAgICAgICAgY29t
bWl0dGVyX21hdGNoID0gc2VsZi5fY29tbWl0dGVyX3JlZ2V4cC5zZWFyY2goY29tbWl0X21lc3Nh
Z2UpCi0gICAgICAgIGlmIG5vdCBjb21taXR0ZXJfbWF0Y2g6Ci0gICAgICAgICAgICByYWlzZSBD
b21taXRMb2dFcnJvcgotCi0gICAgICAgIGNvbW1pdHRlcl9lbWFpbCA9IGNvbW1pdHRlcl9tYXRj
aC5ncm91cCgnZW1haWwnKQotICAgICAgICBpZiBub3QgY29tbWl0dGVyX2VtYWlsOgotICAgICAg
ICAgICAgcmFpc2UgQ29tbWl0TG9nRXJyb3IKLQotICAgICAgICBjb21taXR0ZXIgPSBzZWxmLl9j
b250cmlidXRvcl9mcm9tX2VtYWlsKGNvbW1pdHRlcl9lbWFpbCkKLSAgICAgICAgaWYgbm90IGNv
bW1pdHRlcjoKLSAgICAgICAgICAgIHJhaXNlIENvbW1pdExvZ0Vycm9yCi0KLSAgICAgICAgY29t
bWl0X2RhdGVfbWF0Y2ggPSBzZWxmLl9kYXRlX3JlZ2V4cC5zZWFyY2goY29tbWl0X21lc3NhZ2Up
Ci0gICAgICAgIGlmIG5vdCBjb21taXRfZGF0ZV9tYXRjaDoKLSAgICAgICAgICAgIHJhaXNlIENv
bW1pdExvZ0Vycm9yCi0gICAgICAgIGNvbW1pdF9kYXRlID0gY29tbWl0X2RhdGVfbWF0Y2guZ3Jv
dXAoJ2RhdGUnKQotCi0gICAgICAgIHJldmlzaW9uX21hdGNoID0gc2VsZi5fcmV2aXNpb25fcmVn
ZXhwLnNlYXJjaChjb21taXRfbWVzc2FnZSkKLSAgICAgICAgaWYgbm90IHJldmlzaW9uX21hdGNo
OgotICAgICAgICAgICAgcmFpc2UgQ29tbWl0TG9nRXJyb3IKLSAgICAgICAgcmV2aXNpb24gPSBy
ZXZpc2lvbl9tYXRjaC5ncm91cCgnc3ZuaWQnKQotCi0gICAgICAgICMgTG9vayBmb3IgIlBhdGNo
IGJ5IiBsaW5lIGZpcnN0LCB3aGljaCBpcyB1c2VkIGZvciBub24tY29tbWl0dGVyIGNvbnRyaWJ1
dG9yczsKLSAgICAgICAgIyBvdGhlcndpc2UsIHVzZSBjb21taXR0ZXIgaW5mbyBkZXRlcm1pbmVk
IGFib3ZlLgotICAgICAgICBhdXRob3JfbWF0Y2ggPSBzZWxmLl9wYXRjaF9ieV9yZWdleHAuc2Vh
cmNoKGNvbW1pdF9tZXNzYWdlKQotICAgICAgICBpZiBub3QgYXV0aG9yX21hdGNoOgotICAgICAg
ICAgICAgYXV0aG9yX21hdGNoID0gY29tbWl0dGVyX21hdGNoCi0KLSAgICAgICAgYXV0aG9yX2Vt
YWlsID0gYXV0aG9yX21hdGNoLmdyb3VwKCdlbWFpbCcpCi0gICAgICAgIGlmIG5vdCBhdXRob3Jf
ZW1haWw6Ci0gICAgICAgICAgICBhdXRob3JfZW1haWwgPSBjb21taXR0ZXJfZW1haWwKLQotICAg
ICAgICBhdXRob3JfbmFtZSA9IGF1dGhvcl9tYXRjaC5ncm91cCgnbmFtZScpIGlmICduYW1lJyBp
biBhdXRob3JfbWF0Y2guZ3JvdXBkaWN0KCkgZWxzZSBOb25lCi0gICAgICAgIGlmIG5vdCBhdXRo
b3JfbmFtZToKLSAgICAgICAgICAgIGF1dGhvcl9uYW1lID0gc2VsZi5fYXV0aG9yX25hbWVfZnJv
bV9lbWFpbChhdXRob3JfZW1haWwpCi0gICAgICAgIGlmIG5vdCBhdXRob3JfbmFtZToKLSAgICAg
ICAgICAgIHJhaXNlIENvbW1pdExvZ0Vycm9yCi0KLSAgICAgICAgY29udHJpYnV0b3IgPSBzZWxm
Ll9jb250cmlidXRvcl9mcm9tX2VtYWlsKGF1dGhvcl9lbWFpbCkKLSAgICAgICAgaWYgY29udHJp
YnV0b3IgYW5kIGF1dGhvcl9uYW1lICE9IGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZSBhbmQgY29udHJp
YnV0b3IuZnVsbF9uYW1lOgotICAgICAgICAgICAgYXV0aG9yX25hbWUgPSBjb250cmlidXRvci5m
dWxsX25hbWUKLQotICAgICAgICByZXZpZXdlcl9tYXRjaCA9IHNlbGYuX3Jldmlld2VkX2J5X3Jl
Z2V4cC5zZWFyY2goY29tbWl0X21lc3NhZ2UpCi0gICAgICAgIGlmIG5vdCByZXZpZXdlcl9tYXRj
aDoKLSAgICAgICAgICAgIHJhaXNlIENvbW1pdExvZ01pc3NpbmdSZXZpZXdlcgotICAgICAgICBy
ZXZpZXdlcnMgPSByZXZpZXdlcl9tYXRjaC5ncm91cCgncmV2aWV3ZXInKQotCi0gICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAnY29tbWl0dGVyJzogY29tbWl0dGVyLAotICAgICAgICAgICAg
J2NvbW1pdF9kYXRlJzogY29tbWl0X2RhdGUsCi0gICAgICAgICAgICAncmV2aXNpb24nOiByZXZp
c2lvbiwKLSAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiBhdXRob3JfZW1haWwsCi0gICAgICAg
ICAgICAnYXV0aG9yX25hbWUnOiBhdXRob3JfbmFtZSwKLSAgICAgICAgICAgICdjb250cmlidXRv
cic6IGNvbnRyaWJ1dG9yLAotICAgICAgICAgICAgJ3Jldmlld2Vycyc6IHJldmlld2VycywKLSAg
ICAgICAgfQorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmFic3RyYWN0Y29tbWl0bG9nY29t
bWFuZCBpbXBvcnQgKgogCiAKIGNsYXNzIFN1Z2dlc3ROb21pbmF0aW9ucyhBYnN0cmFjdENvbW1p
dExvZ0NvbW1hbmQpOgpAQCAtMjEyLDcgKzEwMSw3IEBAIGNsYXNzIFN1Z2dlc3ROb21pbmF0aW9u
cyhBYnN0cmFjdENvbW1pdExvZ0NvbW1hbmQpOgogICAgICAgICB9CiAgICAgICAgIGZvciBjb21t
aXRfbWVzc2FnZSBpbiBzZWxmLl9yZWNlbnRfY29tbWl0X21lc3NhZ2VzKCk6CiAgICAgICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fY291bnRfY29tbWl0KHNlbGYuX3BhcnNlX2Nv
bW1pdF9tZXNzYWdlKGNvbW1pdF9tZXNzYWdlKSwgYW5hbHlzaXMpCisgICAgICAgICAgICAgICAg
c2VsZi5fY291bnRfY29tbWl0KHNlbGYuX3BhcnNlX2NvbW1pdF9tZXNzYWdlKGNvbW1pdF9tZXNz
YWdlLCByZXF1aXJlX3Jldmlldz1UcnVlKSwgYW5hbHlzaXMpCiAgICAgICAgICAgICBleGNlcHQg
Q29tbWl0TG9nRXJyb3IsIGV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAg
ICAgICByZXR1cm4gYW5hbHlzaXNbJ2NvdW50ZXJzX2J5X2VtYWlsJ10K
</data>
<flag name="review"
          id="221951"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>