<?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>65247</bug_id>
          
          <creation_ts>2011-07-27 04:58:32 -0700</creation_ts>
          <short_desc>WebSocket: Accept multiple subprotocols</short_desc>
          <delta_ts>2011-08-10 02:07:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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>65250</dependson>
    
    <dependson>65367</dependson>
    
    <dependson>65845</dependson>
          <blocked>50099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yuta Kitamura">yutak</reporter>
          <assigned_to name="Yuta Kitamura">yutak</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>martijn</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>442850</commentid>
    <comment_count>0</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-07-27 04:58:32 -0700</bug_when>
    <thetext>According to current WebSocket API specification, WebSocket constructor can accept an array of subprotocols:

&lt;http://dev.w3.org/html5/websockets/&gt;
    [Constructor(in DOMString url, in optional DOMString protocols),
     Constructor(in DOMString url, in optional DOMString[] protocols)]
    interface WebSocket {
        ...
    }

    

When WebSocket receives multiple subprotocols, it must send Sec-WebSocket-Protocol header field in the handshake request as in hybi protocol specification:

&lt;http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10&gt;
    Sec-WebSocket-Protocol: chat, superchat</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448414</commentid>
    <comment_count>1</comment_count>
      <attachid>103327</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-08-08 19:38:17 -0700</bug_when>
    <thetext>Created attachment 103327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448428</commentid>
    <comment_count>2</comment_count>
      <attachid>103327</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-08-08 21:37:11 -0700</bug_when>
    <thetext>Comment on attachment 103327
Patch

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

&gt; Source/WebCore/websockets/WebSocket.cpp:59
&gt; +static bool isSeparator(UChar character)

This should be &apos;inline&apos;

&gt; Source/WebCore/websockets/WebSocket.cpp:66
&gt; +    if (character == &apos;(&apos; || character == &apos;)&apos; || character == &apos;&lt;&apos; || character == &apos;&gt;&apos; || character == &apos;@&apos;
&gt; +        || character == &apos;,&apos; || character == &apos;;&apos; || character == &apos;:&apos; || character == &apos;\\&apos; || character == &apos;&quot;&apos;
&gt; +        || character == &apos;/&apos; || character == &apos;[&apos; || character == &apos;]&apos; || character == &apos;?&apos; || character == &apos;=&apos;
&gt; +        || character == &apos;{&apos; || character == &apos;}&apos; || character == &apos; &apos; || character == &apos;\t&apos;)
&gt; +        return true;
&gt; +    return false;

You can write just
  return character == &apos;(&apos; ....

Test coverage for this code is very low.

Let&apos;s improve the performance of this code by checking &quot;character is smaller than the minimum separator character&quot; and &quot;character is larger than the minimum separator character&quot;.

&gt; Source/WebCore/websockets/WebSocket.cpp:75
&gt; +    for (size_t i = 0; i &lt; protocol.length(); ++i)
&gt; +        if (protocol[i] &lt; 0x21 || protocol[i] &gt; 0x7E || isSeparator(protocol[i]))
&gt; +            return false;

* You have to enclose the content of &apos;for&apos; with {} because the content has two physical lines.

* What are 0x21 and 0x7E?

&gt; Source/WebCore/websockets/WebSocket.cpp:182
&gt; +            // Emulate JavaScript&apos;s Array.toString() behavior.
&gt; +            StringBuilder builder;

I have a question.  Should we support protocols-in-array in Hixie76?

&gt; Source/WebCore/websockets/WebSocket.cpp:206
&gt; +        for (size_t i = 0; i &lt; protocols.size(); ++i)
&gt; +            if (!isValidProtocolString(protocols[i])) {
&gt; +                scriptExecutionContext()-&gt;addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, &quot;Wrong protocol for WebSocket &apos;&quot; + encodeProtocolString(protocols[i]) + &quot;&apos;&quot;, 0, scriptExecutionContext()-&gt;securityOrigin()-&gt;toString(), 0);

You have to enclose the &apos;for&apos; content with {}.

&gt; Source/WebCore/websockets/WebSocket.cpp:218
&gt; +        for (size_t i = 0; i &lt; protocols.size(); ++i)
&gt; +            for (size_t j = i + 1; j &lt; protocols.size(); ++j)
&gt; +                if (protocols[i] == protocols[j]) {
&gt; +                    scriptExecutionContext()-&gt;addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, &quot;WebSocket protocols contain duplicates: &apos;&quot; + encodeProtocolString(protocols[i]) + &quot;&apos;&quot;, 0, scriptExecutionContext()-&gt;securityOrigin()-&gt;toString(), 0);
&gt; +                    m_state = CLOSED;
&gt; +                    ec = SYNTAX_ERR;
&gt; +                    return;
&gt; +                }

O(N^2) algorithm is not acceptable.

&gt; Source/WebCore/websockets/WebSocket.cpp:228
&gt; +        if (!protocols.isEmpty()) {
&gt; +            StringBuilder builder;
&gt; +            for (size_t i = 0; i &lt; protocols.size(); ++i) {
&gt; +                if (i)
&gt; +                    builder.append(&quot;, &quot;);
&gt; +                builder.append(protocols[i]);
&gt; +            }
&gt; +            protocolString = builder.toString();
&gt; +        }

This phrase appears twice in this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448507</commentid>
    <comment_count>3</comment_count>
      <attachid>103327</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-08-09 04:20:47 -0700</bug_when>
    <thetext>Comment on attachment 103327
Patch

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

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:182
&gt;&gt; +            StringBuilder builder;
&gt; 
&gt; I have a question.  Should we support protocols-in-array in Hixie76?

If you pass a non-string object, the value will be automatically converted to a string by calling object.toString(). Auto-generated IDL stubs follow this rule, and Web IDL spec seems to require this behavior.

I admit passing an array is weird. I just tried hard to not lose the compatibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448991</commentid>
    <comment_count>4</comment_count>
      <attachid>103445</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-08-09 23:05:12 -0700</bug_when>
    <thetext>Created attachment 103445
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448994</commentid>
    <comment_count>5</comment_count>
      <attachid>103327</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-08-09 23:16:10 -0700</bug_when>
    <thetext>Comment on attachment 103327
Patch

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

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:59
&gt;&gt; +static bool isSeparator(UChar character)
&gt; 
&gt; This should be &apos;inline&apos;

Fixed.

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:66
&gt;&gt; +    return false;
&gt; 
&gt; You can write just
&gt;   return character == &apos;(&apos; ....
&gt; 
&gt; Test coverage for this code is very low.
&gt; 
&gt; Let&apos;s improve the performance of this code by checking &quot;character is smaller than the minimum separator character&quot; and &quot;character is larger than the minimum separator character&quot;.

This code was rewritten. Added a new test to check this function.

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:75
&gt;&gt; +            return false;
&gt; 
&gt; * You have to enclose the content of &apos;for&apos; with {} because the content has two physical lines.
&gt; 
&gt; * What are 0x21 and 0x7E?

Added a brace. Added new constants to represent these values.

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:206
&gt;&gt; +                scriptExecutionContext()-&gt;addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, &quot;Wrong protocol for WebSocket &apos;&quot; + encodeProtocolString(protocols[i]) + &quot;&apos;&quot;, 0, scriptExecutionContext()-&gt;securityOrigin()-&gt;toString(), 0);
&gt; 
&gt; You have to enclose the &apos;for&apos; content with {}.

Fixed.

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:218
&gt;&gt; +                }
&gt; 
&gt; O(N^2) algorithm is not acceptable.

Fixed using HashSet&lt;String&gt;.

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:228
&gt;&gt; +        }
&gt; 
&gt; This phrase appears twice in this function.

Added a new function &quot;joinStrings&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449015</commentid>
    <comment_count>6</comment_count>
      <attachid>103445</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-08-10 00:39:43 -0700</bug_when>
    <thetext>Comment on attachment 103445
Patch v2

looks ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449045</commentid>
    <comment_count>7</comment_count>
      <attachid>103445</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-10 02:07:34 -0700</bug_when>
    <thetext>Comment on attachment 103445
Patch v2

Clearing flags on attachment: 103445

Committed r92757: &lt;http://trac.webkit.org/changeset/92757&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449046</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-10 02:07:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103327</attachid>
            <date>2011-08-08 19:38:17 -0700</date>
            <delta_ts>2011-08-09 23:16:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65247-20110809113815.patch</filename>
            <type>text/plain</type>
            <size>28779</size>
            <attacher name="Yuta Kitamura">yutak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI1MjcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjYTA3MWU2NzE1MWVjZjA4MDBmZWM3
NzdiMTMyYzA4MWE3YTNiMzM0Li5lMzhmODk3ZmQwNmQ2MjY5YmJlNjc5NmU4OWFkMjU4OTE5MWRm
NTkyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDgtMDggIFl1dGEgS2l0YW11cmEgIDx5
dXRha0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBBY2NlcHQgbXVsdGlwbGUg
c3VicHJvdG9jb2xzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NTI0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCB0ZXN0cyB0byBjaGVjayB3aGV0aGVyIFdlYlNvY2tldCBhY2NlcHRzIG11bHRpcGxl
IHN1YnByb3RvY29scyBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGh0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJwcm90b2NvbHMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2ludmFsaWQtc3Vi
cHJvdG9jb2xzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5YmkvbXVsdGlwbGUtc3VicHJvdG9jb2xzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9tdWx0aXBsZS1zdWJwcm90b2Nv
bHMuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS9zdWItcHJvdG9jb2wtd2l0aC1zcGFjZS1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zdWItcHJvdG9jb2wtd2l0aC1zcGFj
ZS5odG1sOgorICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaHliaS0xMCBkb2VzIG5vdCBhbGxvdyBz
dWJwcm90b2NvbHMgY29udGFpbmluZyBhIHNwYWNlLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBsZS1zdWJwcm90b2NvbHMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dv
cmtlcnMvbXVsdGlwbGUtc3VicHJvdG9jb2xzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvbXVsdGlwbGUtc3Vi
cHJvdG9jb2xzLmpzOiBBZGRlZC4KKyAgICAgICAgKHdzLm9ub3Blbik6CisgICAgICAgICh3cy5v
bm1lc3NhZ2UpOgorICAgICAgICAod3Mub25jbG9zZSk6CisgICAgICAgICogaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9wcm90b2NvbC10ZXN0X3dzaC5w
eTogQ29waWVkIGZyb20gaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9wcm90b2NvbC10
ZXN0X3dzaC5weS4KKwogMjAxMS0wOC0wNSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgU2tpcCB0ZXN0IGVlemEtUHJvLXZlcnRpY2FsLW1ldHJpY3MtYWRqdXN0bWVu
dC5odG1sIGluIGNocm9taXVtLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9pbnZhbGlkLXN1YnByb3RvY29scy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2ludmFsaWQtc3VicHJv
dG9jb2xzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTg3NGNjNjBmYmIwODYyODg3ZDI0NTI0
ZWUzZmE2YTRkYjI4MDEzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9pbnZhbGlkLXN1YnByb3RvY29scy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyMCBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29s
IGZvciBXZWJTb2NrZXQgJ2EgYicKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90
b2NvbCBmb3IgV2ViU29ja2V0ICdhLGInCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3Jvbmcg
cHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnYVx1MDAwMGInCitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
MDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnXHUzMDQyJworQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ2MgZCcKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSAwOiBXZWJTb2NrZXQgcHJvdG9jb2xzIGNvbnRhaW4gZHVwbGljYXRlczogJ2En
CitXZWJTb2NrZXQgc2hvdWxkIGZhaWwgaWYgaW52YWxpZCBzdWJwcm90b2NvbHMgYXJlIHNwZWNp
ZmllZAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgbmV3IFdlYlNvY2tldCh1
cmwsICdhIGInKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAnYSxiJykgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVy
bCwgJ2FcMGInKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAnXHUzMDQyJykgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0
KHVybCwgWydhJywgJ2InLCAnYyBkJ10pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsIFsnYScsICdiJywg
J2MnLCAnYSddKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTIuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS9pbnZhbGlkLXN1YnByb3RvY29scy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJz
b2NrZXQvdGVzdHMvaHliaS9pbnZhbGlkLXN1YnByb3RvY29scy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgw
MmQ2M2VjZGQ5NzI5YmYwM2FhNjkyNjM4YWJjNmU1NDE2MTdkODkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2ludmFsaWQtc3Vi
cHJvdG9jb2xzLmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9qcy10ZXN0
LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4v
anMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJXZWJTb2Nr
ZXQgc2hvdWxkIGZhaWwgaWYgaW52YWxpZCBzdWJwcm90b2NvbHMgYXJlIHNwZWNpZmllZCIpOwor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5h
YmxlZCIsIDApOworCit2YXIgdXJsID0gIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rl
c3RzL3NpbXBsZSI7CitzaG91bGRUaHJvdygibmV3IFdlYlNvY2tldCh1cmwsICdhIGInKSIsICIn
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CitzaG91bGRUaHJvdygibmV3
IFdlYlNvY2tldCh1cmwsICdhLGInKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTInIik7CitzaG91bGRUaHJvdygibmV3IFdlYlNvY2tldCh1cmwsICdhXFwwYicpIiwgIidF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKK3Nob3VsZFRocm93KCJuZXcg
V2ViU29ja2V0KHVybCwgJ1xcdTMwNDInKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNl
cHRpb24gMTInIik7CitzaG91bGRUaHJvdygibmV3IFdlYlNvY2tldCh1cmwsIFsnYScsICdiJywg
J2MgZCddKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CitzaG91
bGRUaHJvdygibmV3IFdlYlNvY2tldCh1cmwsIFsnYScsICdiJywgJ2MnLCAnYSddKSIsICInRXJy
b3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVz
dC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
bXVsdGlwbGUtc3VicHJvdG9jb2xzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL211bHRpcGxlLXN1YnByb3RvY29scy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2
ZmM0YTdiZWIyYjRjMzViNWFlMTZkYjg1MjVmZmIwMTQwZTRkYzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL211bHRpcGxlLXN1
YnByb3RvY29scy5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vanMtdGVz
dC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4u
L2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiVGVzdCBX
ZWJTb2NrZXQgc3VicHJvdG9jb2wgbmVnb3RpYXRpb24uIik7CisKK3dpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRIaXhpZTc2V2ViU29ja2V0
UHJvdG9jb2xFbmFibGVkIiwgMCk7CisKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3
LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2h5YmkvcHJvdG9jb2wtdGVzdD9wcm90b2NvbD1z
dXBlcmNoYXQiLCBbImNoYXQiLCAic3VwZXJjaGF0Il0pOwordmFyIGNsb3NlRXZlbnQ7Cit2YXIg
cmVjZWl2ZWRNZXNzYWdlOworCisvLyBGSVhNRTogSW1wbGVtZW50IFdlYlNvY2tldC5wcm90b2Nv
bC4KKy8vIHNob3VsZEJlRXF1YWxUb1N0cmluZygid3MucHJvdG9jb2wiLCAiIik7CisKK3dzLm9u
b3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICBkZWJ1ZygiQ29ubmVjdGVkIik7CisgICAgLy8gRklY
TUU6IERpdHRvLgorICAgIC8vIHNob3VsZEJlRXF1YWxUb1N0cmluZygid3MucHJvdG9jb2wiLCAi
c3VwZXJjaGF0Iik7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAg
ICByZWNlaXZlZE1lc3NhZ2UgPSBldmVudC5kYXRhOworICAgIGRlYnVnKCJSZWNlaXZlZDogIiAr
IHJlY2VpdmVkTWVzc2FnZSk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWNlaXZlZE1l
c3NhZ2UiLCAic3VwZXJjaGF0Iik7Cit9OworCit3cy5vbmNsb3NlID0gZnVuY3Rpb24oZXZlbnQp
Cit7CisgICAgZGVidWcoIkNsb3NlZCIpOworICAgIGNsb3NlRXZlbnQgPSBldmVudDsKKyAgICBz
aG91bGRCZVRydWUoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsK
K307CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc3ViLXByb3RvY29sLXdpdGgtc3BhY2UuaHRtbCBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc3ViLXByb3RvY29sLXdp
dGgtc3BhY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVkYjQ0Nzc5OWI5
YTYyMGNlMmM3MGFiMTQzYjMyNTMyMzU2OTIzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL3N1Yi1wcm90b2NvbC13aXRoLXNwYWNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1
NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Ci08aHRtbD4KLTxoZWFkPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8u
Li9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Ci08c2NyaXB0IHNyYz0iLi4v
Li4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9o
ZWFkPgotPGJvZHk+Ci08ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Ci08ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWRlc2NyaXB0aW9u
KCJUZXN0IFdlYlNvY2tldCBoYW5kc2hha2Ugc3VjY2VzcyB3aXRoIHN1YiBwcm90b2NvbCBjb250
YWlucyBzcGFjZS4iKTsKLQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlk
ZVByZWZlcmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQiLCAwKTsK
LQotdmFyIHByb3RvY29sOwotCi1mdW5jdGlvbiBlbmRUZXN0KCkKLXsKLSAgICBzaG91bGRCZSgi
cHJvdG9jb2wiLCAnInN1YiBwcm90b2NvbCInKTsKLSAgICBmaW5pc2hKU1Rlc3QoKTsKLX0KLQot
dmFyIHVybCA9ICJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Byb3Rv
Y29sLXRlc3Q/cHJvdG9jb2w9c3ViJTIwcHJvdG9jb2wiOwotdmFyIHdzID0gbmV3IFdlYlNvY2tl
dCh1cmwsICJzdWIgcHJvdG9jb2wiKTsKLQotd3Mub25vcGVuID0gZnVuY3Rpb24oKQotewotICAg
IGRlYnVnKCJDb25uZWN0ZWQiKTsKLX07Ci0KLXdzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChtZXNz
YWdlRXZlbnQpCi17Ci0gICAgcHJvdG9jb2wgPSBtZXNzYWdlRXZlbnQuZGF0YTsKLSAgICB3cy5j
bG9zZSgpOwotfTsKLQotd3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBlbmRUZXN0KCk7
Ci19OwotCi1mdW5jdGlvbiB0aW1lT3V0Q2FsbGJhY2soKQotewotICAgIGRlYnVnKCJUaW1lZCBv
dXQgaW4gc3RhdGU6ICIgKyB3cy5yZWFkeVN0YXRlKTsKLSAgICBlbmRUZXN0KCk7Ci19Ci0KLXZh
ciB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KHRpbWVPdXRDYWxsYmFjaywgMzAwMCk7Ci0KLXZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4v
Li4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9k
eT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBsZS1zdWJwcm90b2NvbHMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL211bHRp
cGxlLXN1YnByb3RvY29scy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmEzN2YxMWFlZGFjZTI4
YTlhOTQ4YTZhY2I2ZGRkZDQ1ZmI3MTRlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBsZS1zdWJwcm90
b2NvbHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1Rlc3QgV2ViU29ja2V0IHN1YnBy
b3RvY29sIG5lZ290aWF0aW9uIGluIHdvcmtlcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworSU5GTzogQ29ubmVjdGVkCitJTkZPOiBSZWNlaXZlZDogc3VwZXJjaGF0CitQQVNTIFBB
U1M6IHJlY2VpdmVkTWVzc2FnZSBpcyBlcXVhbCB0byAic3VwZXJjaGF0IgorSU5GTzogQ2xvc2Vk
CitQQVNTIFBBU1M6IGNsb3NlRXZlbnQud2FzQ2xlYW4gaXMgdHJ1ZQorRE9ORQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBs
ZS1zdWJwcm90b2NvbHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBsZS1zdWJwcm90b2NvbHMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
ODI3MzU4NmYzNjNmOTI5MTY3ZTI3MTNjMjY1MmQ3YjUwZDM5MTQxCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL211
bHRpcGxlLXN1YnByb3RvY29scy5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4v
Li4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNj
cmlwdGlvbigiVGVzdCBXZWJTb2NrZXQgc3VicHJvdG9jb2wgbmVnb3RpYXRpb24gaW4gd29ya2Vy
cy4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVu
Y2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQiLCAwKTsKKworZnVuY3Rp
b24gc3RhcnRzV2l0aChzdHIsIHByZWZpeCkKK3sKKyAgICByZXR1cm4gc3RyLmluZGV4T2YocHJl
Zml4KSA9PSAwOworfQorCit2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL211bHRp
cGxlLXN1YnByb3RvY29scy5qcyIpOword29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVu
dCkKK3sKKyAgICB2YXIgbWVzc2FnZSA9IGV2ZW50LmRhdGE7CisgICAgaWYgKHN0YXJ0c1dpdGgo
bWVzc2FnZSwgIlBBU1MiKSkKKyAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICBlbHNl
IGlmIChzdGFydHNXaXRoKG1lc3NhZ2UsICJGQUlMIikpCisgICAgICAgIHRlc3RGYWlsZWQobWVz
c2FnZSkKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKG1lc3NhZ2UpOworICAgIGlmIChtZXNzYWdl
ID09PSAiRE9ORSIpCisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi8u
Li9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9tdWx0aXBsZS1zdWJwcm90b2NvbHMuanMgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2Vz
L211bHRpcGxlLXN1YnByb3RvY29scy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGE4M2VlN2Y3MmM1MmZjMmFl
ZGVmOTVlOGI1ZjU1MTc5ZjMyODkwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9tdWx0aXBsZS1z
dWJwcm90b2NvbHMuanMKQEAgLTAsMCArMSwzOCBAQAordmFyIHdzID0gbmV3IFdlYlNvY2tldCgi
d3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNl
cy9wcm90b2NvbC10ZXN0P3Byb3RvY29sPXN1cGVyY2hhdCIsIFsiY2hhdCIsICJzdXBlcmNoYXQi
XSk7CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQgV2ViU29ja2V0LnByb3RvY29sLgorLy8gaWYgKHdz
LnByb3RvY29sID09PSAiIikKKy8vICAgICBwb3N0TWVzc2FnZSgiUEFTUzogd3MucHJvdG9jb2wg
aXMgZXF1YWwgdG8gXCJcIiIpOworLy8gZWxzZQorLy8gICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB3
cy5wcm90b2NvbCBzaG91bGQgYmUgXCJcIiBidXQgd2FzIFwiIiArIHdzLnByb3RvY29sICsgIlwi
Iik7CisKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICBwb3N0TWVzc2FnZSgiSU5GTzog
Q29ubmVjdGVkIik7CisgICAgLy8gRklYTUU6IERpdHRvLgorICAgIC8vIGlmICh3cy5wcm90b2Nv
bCA9PT0gInN1cGVyY2hhdCIpCisgICAgLy8gICAgIHBvc3RNZXNzYWdlKCJQQVNTOiB3cy5wcm90
b2NvbCBpcyBlcXVhbCB0byBcInN1cGVyY2hhdFwiIik7CisgICAgLy8gZWxzZQorICAgIC8vICAg
ICBwb3N0TWVzc2FnZSgiRkFJTDogd3MucHJvdG9jb2wgc2hvdWxkIGJlIFwic3VwZXJjaGF0XCIg
YnV0IHdhcyBcIiIgKyB3cy5wcm90b2NvbCArICJcIiIpOworfTsKKword3Mub25tZXNzYWdlID0g
ZnVuY3Rpb24oZXZlbnQpCit7CisgICAgdmFyIHJlY2VpdmVkTWVzc2FnZSA9IGV2ZW50LmRhdGE7
CisgICAgcG9zdE1lc3NhZ2UoIklORk86IFJlY2VpdmVkOiAiICsgcmVjZWl2ZWRNZXNzYWdlKTsK
KyAgICBpZiAocmVjZWl2ZWRNZXNzYWdlID09PSAic3VwZXJjaGF0IikKKyAgICAgICAgcG9zdE1l
c3NhZ2UoIlBBU1M6IHJlY2VpdmVkTWVzc2FnZSBpcyBlcXVhbCB0byBcInN1cGVyY2hhdFwiIik7
CisgICAgZWxzZQorICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogcmVjZWl2ZWRNZXNzYWdlIHNo
b3VsZCBiZSBcInN1cGVyY2hhdFwiIGJ1dCB3YXMgXCIiICsgd3MucHJvdG9jb2wgKyAiXCIiKTsK
K307CisKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbihjbG9zZUV2ZW50KQoreworICAgIHBvc3RNZXNz
YWdlKCJJTkZPOiBDbG9zZWQiKTsKKyAgICBpZiAoY2xvc2VFdmVudC53YXNDbGVhbiA9PT0gdHJ1
ZSkKKyAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNsb3NlRXZlbnQud2FzQ2xlYW4gaXMgdHJ1
ZSIpOworICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNsb3NlRXZlbnQud2Fz
Q2xlYW4gc2hvdWxkIGJlIHRydWUgYnV0IHdhcyBcIiIgKyBjbG9zZUV2ZW50Lndhc0NsZWFuICsg
IlwiIik7CisKKyAgICBwb3N0TWVzc2FnZSgiRE9ORSIpOworfTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMv
cHJvdG9jb2wtdGVzdF93c2gucHkgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3Byb3RvY29sLXRlc3Rfd3NoLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmY0M2Q4ZTYwZWVlZjkzMTJiZGU3NWRiMzUwMDQyNmMwNmZlYmYwNzEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtl
cnMvcmVzb3VyY2VzL3Byb3RvY29sLXRlc3Rfd3NoLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKK2ltcG9ydCBjZ2kKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBt
c2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgor
ICAgIHIgPSByZXF1ZXN0LndzX3Jlc291cmNlLnNwbGl0KCc/JywgMSkKKyAgICBpZiBsZW4ocikg
PT0gMToKKyAgICAgICAgcmV0dXJuCisgICAgcGFyYW0gPSBjZ2kucGFyc2VfcXMoclsxXSkKKyAg
ICBpZiAncHJvdG9jb2wnIGluIHBhcmFtOgorICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0g
cGFyYW1bJ3Byb3RvY29sJ11bMF0KKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJl
cXVlc3QpOgorICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHJlcXVlc3Qud3NfcHJv
dG9jb2wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMzFlNjQzZDc5NzdjNTExOGE3YzhiZDk5MDQxZjRiZGUxMzY4
MTJjZi4uMWU4NDI0NjljZjE5MTgxYWZlZWIyNjEwYzkwOGE2ZWIwZjM1OGU2MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTA4LTA4ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFdlYlNvY2tldDogQWNjZXB0IG11bHRpcGxlIHN1YnByb3Rv
Y29scworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUy
NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJT
b2NrZXQgY29uc3RydWN0b3Igc2hvdWxkIGFjY2VwdCBhbiBhcnJheSBvZiBzdWJwcm90b2NvbHMg
aWYgaHliaS0xMCBwcm90b2NvbCBpcyBjaG9zZW4uCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJwcm90b2NvbHMuaHRtbAorICAgICAg
ICAgICAgICAgaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9tdWx0aXBsZS1zdWJwcm90
b2NvbHMuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS93b3JrZXJzL211bHRpcGxlLXN1YnByb3RvY29scy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tl
dENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYlNvY2tldCk6CisgICAgICAgIElmIHRoZSBzZWNv
bmQgYXJndW1lbnQgb2YgV2ViU29ja2V0IGNvbnN0cnVjdG9yIGlzIGFuIGFycmF5LCBidWlsZCBh
IFZlY3RvcjxTdHJpbmc+IGFuZAorICAgICAgICBwYXNzIGl0IHRvIFdlYlNvY2tldDo6Y29ubmVj
dCgpLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOFdlYlNvY2tldDo6Y29uc3RydWN0b3JDYWxsYmFjayk6Cisg
ICAgICAgIERpdHRvLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzU2VwYXJhdG9yKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppc1Zh
bGlkUHJvdG9jb2xTdHJpbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRQcm90
b2NvbFN0cmluZ0hpeGllNzYpOiBSZW5hbWVkIGZyb20gaXNWYWxpZFByb3RvY29sU3RyaW5nLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KToKKyAgICAgICAgSWYgYW4gYXJy
YXkgaXMgcHJvdmlkZWQgYXMgYSBzdWJwcm90b2NvbCwgYW5kIGlmIGhpeGllLTc2IGlzIHVzZWQg
Zm9yIHRoaXMgY29ubmVjdGlvbiwgaXQKKyAgICAgICAgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gYSBz
dHJpbmcgaW4gdGhlIHNhbWUgbWFubmVyIGFzIEphdmFTY3JpcHQncyBBcnJheS50b1N0cmluZygp
IGluIG9yZGVyCisgICAgICAgIHRvIGtlZXAgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgKiB3ZWJz
b2NrZXRzL1dlYlNvY2tldC5oOgorICAgICAgICBSZW1vdmVkIG1fcHJvdG9jb2wgYmVjYXVzZSBp
dCB3YXMgbm90IHVzZWQgYXQgYWxsLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hh
bm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpkaXNjb25uZWN0
KToKKyAgICAgICAgV2ViU29ja2V0Q2hhbm5lbCBtYXkgYmUgcmVsZWFzZWQgYmVmb3JlIGNvbm5l
Y3QoKSBpcyBjYWxsZWQsIHRodXMgbV9oYW5kc2hha2UgbWF5IGJlIG51bGwuCisKIDIwMTEtMDgt
MDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXB3YXJkcyBj
dXJzb3IgbW92ZW1lbnQgaW5jb3JyZWN0IHdoZW4gcHJldmlvdXMgYmxvY2sgZW5kcyB3aXRoIDxi
cj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNw
cAppbmRleCA4MTgyY2Y2MWE3YzM2YThiOGE1ZjZiZDlmN2Y2N2I4ZmExMmJjMGM4Li5hZjVkYWNh
NTU1ZTA4OWVjMTIyNThjNjE3MjJjNjA3Y2RmMzAxNmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIApAQCAtNjIsMTAgKzYzLDIzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXZWJTb2NrZXQoRXhl
Y1N0CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHdlYlNvY2tl
dC0+Y29ubmVjdCh1cmxTdHJpbmcsIGVjKTsKICAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIHBy
b3RvY29sID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3Qo
dXJsU3RyaW5nLCBwcm90b2NvbCwgZWMpOworICAgICAgICBKU1ZhbHVlIHByb3RvY29sc1ZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgICAgIGlmIChpc0pTQXJyYXkoJmV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvdG9jb2xzVmFsdWUpKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBw
cm90b2NvbHM7CisgICAgICAgICAgICBKU0FycmF5KiBwcm90b2NvbHNBcnJheSA9IGFzQXJyYXko
cHJvdG9jb2xzVmFsdWUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBy
b3RvY29sc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBy
b3RvY29sID0gdXN0cmluZ1RvU3RyaW5nKHByb3RvY29sc0FycmF5LT5nZXRJbmRleChpKS50b1N0
cmluZyhleGVjKSk7CisgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgcHJvdG9jb2xzLmFwcGVuZChwcm90b2NvbCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5nLCBwcm90b2NvbHMsIGVj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJp
bmdUb1N0cmluZyhwcm90b2NvbHNWYWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICAgICAgd2ViU29ja2V0LT5jb25uZWN0KHVybFN0
cmluZywgcHJvdG9jb2wsIGVjKTsKKyAgICAgICAgfQogICAgIH0KICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQ
UEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBXZWJTb2NrZXQsIHdlYlNv
Y2tldC5nZXQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKaW5kZXggNWUxNWRhYjg5YWM0YTYwODIwYWVkNjEx
N2QxNTVlM2Y1MTM2OTc1ZC4uNThhMjdlN2ZhMTNkYjlmYTJkZGMzZDJmZWQzZjdlODk3ZmM5NzVk
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29j
a2V0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJTb2NrZXRDdXN0b20uY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiV2ViU29ja2V0
LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC03NCwxMSArNzUsMjUgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2Vi
U29ja2V0Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAg
ICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCiAgICAgICAgIHdlYlNvY2tldC0+Y29ubmVjdCh1cmws
IGVjKTsKICAgICBlbHNlIHsKLSAgICAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoUHJvdG9jb2w7
Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gcHJvdG9jb2wgPSBhcmdzWzFdLT5Ub1N0
cmluZygpOwotICAgICAgICBpZiAodHJ5Q2F0Y2hQcm90b2NvbC5IYXNDYXVnaHQoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHRyeUNhdGNoUHJvdG9jb2wuRXhjZXB0aW9uKCkpOwot
ICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsLCB0b1dlYkNvcmVTdHJpbmcocHJvdG9jb2wp
LCBlYyk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHByb3RvY29sc1ZhbHVlID0gYXJn
c1sxXTsKKyAgICAgICAgaWYgKHByb3RvY29sc1ZhbHVlLT5Jc0FycmF5KCkpIHsKKyAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHByb3RvY29sczsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
QXJyYXk+IHByb3RvY29sc0FycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QocHJvdG9j
b2xzVmFsdWUpOworICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHByb3RvY29s
c0FycmF5LT5MZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgdjg6OlRyeUNhdGNoIHRy
eUNhdGNoUHJvdG9jb2w7CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBw
cm90b2NvbCA9IHByb3RvY29sc0FycmF5LT5HZXQodjg6OkludDMyOjpOZXcoaSkpLT5Ub1N0cmlu
ZygpOworICAgICAgICAgICAgICAgIGlmICh0cnlDYXRjaFByb3RvY29sLkhhc0NhdWdodCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih0cnlDYXRjaFByb3RvY29sLkV4
Y2VwdGlvbigpKTsKKyAgICAgICAgICAgICAgICBwcm90b2NvbHMuYXBwZW5kKHRvV2ViQ29yZVN0
cmluZyhwcm90b2NvbCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2ViU29ja2V0LT5j
b25uZWN0KHVybCwgcHJvdG9jb2xzLCBlYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2hQcm90b2NvbDsKKyAgICAgICAgICAgIHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gcHJvdG9jb2wgPSBwcm90b2NvbHNWYWx1ZS0+VG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgIGlmICh0cnlDYXRjaFByb3RvY29sLkhhc0NhdWdodCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKHRyeUNhdGNoUHJvdG9jb2wuRXhjZXB0aW9uKCkpOworICAgICAg
ICAgICAgd2ViU29ja2V0LT5jb25uZWN0KHVybCwgdG9XZWJDb3JlU3RyaW5nKHByb3RvY29sKSwg
ZWMpOworICAgICAgICB9CiAgICAgfQogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2Nr
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IGE3
YTExZTM0ZTcwNTc2NmZiNDI0ODA4NGIwYzBiZTBjY2MxYWY2ZmYuLjc4YTE4ZWE2NjdiNjE2MmRj
NjQ4NTEzNmE1MzI5NDBlZGM4OGRhYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5jcHAKQEAgLTU1LDggKzU1LDI5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8g
UmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBvbmUgb2YgInNlcGFyYXRvcnMi
IGRlZmluZWQgaW4gSFRUUC8xLjEgKFJGQzI2MTYpLgorc3RhdGljIGJvb2wgaXNTZXBhcmF0b3Io
VUNoYXIgY2hhcmFjdGVyKQoreworICAgIGlmIChjaGFyYWN0ZXIgPT0gJygnIHx8IGNoYXJhY3Rl
ciA9PSAnKScgfHwgY2hhcmFjdGVyID09ICc8JyB8fCBjaGFyYWN0ZXIgPT0gJz4nIHx8IGNoYXJh
Y3RlciA9PSAnQCcKKyAgICAgICAgfHwgY2hhcmFjdGVyID09ICcsJyB8fCBjaGFyYWN0ZXIgPT0g
JzsnIHx8IGNoYXJhY3RlciA9PSAnOicgfHwgY2hhcmFjdGVyID09ICdcXCcgfHwgY2hhcmFjdGVy
ID09ICciJworICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gJy8nIHx8IGNoYXJhY3RlciA9PSAnWycg
fHwgY2hhcmFjdGVyID09ICddJyB8fCBjaGFyYWN0ZXIgPT0gJz8nIHx8IGNoYXJhY3RlciA9PSAn
PScKKyAgICAgICAgfHwgY2hhcmFjdGVyID09ICd7JyB8fCBjaGFyYWN0ZXIgPT0gJ30nIHx8IGNo
YXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCcpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGJvb2wgaXNWYWxpZFByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCiB7CisgICAgaWYgKHByb3RvY29sLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJv
dG9jb2wubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sW2ldIDwgMHgyMSB8fCBw
cm90b2NvbFtpXSA+IDB4N0UgfHwgaXNTZXBhcmF0b3IocHJvdG9jb2xbaV0pKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBpc1Zh
bGlkUHJvdG9jb2xTdHJpbmdIaXhpZTc2KGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCit7CiAgICAg
aWYgKHByb3RvY29sLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAocHJv
dG9jb2wuaXNFbXB0eSgpKQpAQCAtMTEwLDE0ICsxMzEsMjEgQEAgV2ViU29ja2V0Ojp+V2ViU29j
a2V0KCkKIAogdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIGNvbm5lY3QodXJsLCBTdHJpbmcoKSwgZWMpOworICAgIFZl
Y3RvcjxTdHJpbmc+IHByb3RvY29sczsKKyAgICBjb25uZWN0KHVybCwgcHJvdG9jb2xzLCBlYyk7
CiB9CiAKIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBMT0coTmV0d29yaywg
IldlYlNvY2tldCAlcCBjb25uZWN0IHRvICVzIHByb3RvY29sPSVzIiwgdGhpcywgdXJsLnV0Zjgo
KS5kYXRhKCksIHByb3RvY29sLnV0ZjgoKS5kYXRhKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IHBy
b3RvY29sczsKKyAgICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29sKTsKKyAgICBjb25uZWN0KHVy
bCwgcHJvdG9jb2xzLCBlYyk7Cit9CisKK3ZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xzLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBMT0coTmV0d29yaywgIldlYlNvY2tldCAlcCBjb25uZWN0IHRvICVzIiwg
dGhpcywgdXJsLnV0ZjgoKS5kYXRhKCkpOwogICAgIG1fdXJsID0gS1VSTChLVVJMKCksIHVybCk7
Ci0gICAgbV9wcm90b2NvbCA9IHByb3RvY29sOwogCiAgICAgaWYgKCFtX3VybC5pc1ZhbGlkKCkp
IHsKICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRNZXNzYWdlKEpTTWVzc2Fn
ZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiSW52YWxpZCB1cmwg
Zm9yIFdlYlNvY2tldCAiICsgbV91cmwuc3RyaW5nKCksIDAsIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgMCk7CkBAIC0xMzgsMTIgKzE2Niw2
IEBAIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sLCBFeGNlcHRpb25Db2RlCiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIWlzVmFsaWRQcm90b2NvbFN0cmluZyhtX3By
b3RvY29sKSkgewotICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZE1lc3NhZ2Uo
SlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJXcm9u
ZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcobV9wcm90
b2NvbCkgKyAiJyIsIDAsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+dG9TdHJpbmcoKSwgMCk7Ci0gICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBpZiAoIXBvcnRBbGxv
d2VkKG1fdXJsKSkgewogICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZE1lc3Nh
Z2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJX
ZWJTb2NrZXQgcG9ydCAiICsgU3RyaW5nOjpudW1iZXIobV91cmwucG9ydCgpKSArICIgYmxvY2tl
ZCIsIDAsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKSwgMCk7CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CkBAIC0xNTIsOSArMTc0LDYxIEBA
IHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sLCBFeGNlcHRpb25Db2RlCiAgICAgfQogCiAgICAgbV9jaGFubmVsID0gVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRo
aXMpOwotICAgIC8vIEZJWE1FOiBHZXQgdGhlIHZhbHVlIG9mIG1fY2hhbm5lbC0+dXNlSGl4aWU3
NlByb3RvY29sKCkgYW5kIHZhbGlkYXRlIHRoZSB2YWx1ZSBvZiBzdWJwcm90b2NvbAotICAgIC8v
IGlmIGh5YmktMTAgcHJvdG9jb2wgaXMgdXNlZC4KLSAgICBtX2NoYW5uZWwtPmNvbm5lY3QobV91
cmwsIG1fcHJvdG9jb2wpOworCisgICAgU3RyaW5nIHByb3RvY29sU3RyaW5nOworICAgIGlmICht
X2NoYW5uZWwtPnVzZUhpeGllNzZQcm90b2NvbCgpKSB7CisgICAgICAgIGlmICghcHJvdG9jb2xz
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gRW11bGF0ZSBKYXZhU2NyaXB0J3MgQXJyYXku
dG9TdHJpbmcoKSBiZWhhdmlvci4KKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdG9jb2xzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIsIik7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocHJvdG9jb2xzW2ld
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByb3RvY29sU3RyaW5nID0gYnVpbGRlci50
b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGlmICghaXNWYWxpZFByb3RvY29sU3RyaW5n
SGl4aWU3Nihwcm90b2NvbFN0cmluZykpIHsKKyAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJv
ck1lc3NhZ2VMZXZlbCwgIldyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJyIgKyBlbmNvZGVQ
cm90b2NvbFN0cmluZyhwcm90b2NvbFN0cmluZykgKyAiJyIsIDAsIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgMCk7CisgICAgICAgICAgICBt
X3N0YXRlID0gQ0xPU0VEOworICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IFRo
ZXJlIGlzIGEgZGlzYWdyZWVtZW50IGFib3V0IHJlc3RyaWN0aW9uIG9mIHN1YnByb3RvY29scyBi
ZXR3ZWVuIFdlYlNvY2tldCBBUEkgYW5kIGh5YmktMTAgcHJvdG9jb2wKKyAgICAgICAgLy8gZHJh
ZnQuIFRoZSBmb3JtZXIgc2ltcGx5IHNheXMgIm9ubHkgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2Ug
VSswMDIxIHRvIFUrMDA3RSBhcmUgYWxsb3dlZCwiIHdoaWxlIHRoZSBsYXR0ZXIKKyAgICAgICAg
Ly8gaW1wb3NlcyBhIHN0cmljdGVyIHJ1bGU6ICJ0aGUgZWxlbWVudHMgTVVTVCBiZSBub24tZW1w
dHkgc3RyaW5ncyB3aXRoIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBpbiBbUkZDMjYxNl0sCisgICAg
ICAgIC8vIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy4iCisgICAgICAgIC8vCisgICAg
ICAgIC8vIEhlcmUsIHdlIHRocm93IFNZTlRBWF9FUlIgaWYgdGhlIGdpdmVuIHByb3RvY29scyBk
byBub3QgbWVldCB0aGUgbGF0dGVyIGNyaXRlcmlhLiBUaGlzIGJlaGF2aW9yIGRvZXMgbm90Cisg
ICAgICAgIC8vIGNvbXBseSB3aXRoIFdlYlNvY2tldCBBUEkgc3BlY2lmaWNhdGlvbiwgYnV0IGl0
IHNlZW1zIHRvIGJlIHRoZSBvbmx5IHJlYXNvbmFibGUgd2F5IHRvIGhhbmRsZSB0aGlzIGNvbmZs
aWN0LgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3RvY29scy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGlmICghaXNWYWxpZFByb3RvY29sU3RyaW5nKHByb3RvY29sc1tpXSkp
IHsKKyAgICAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZE1lc3NhZ2Uo
SlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJXcm9u
ZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9j
b2xzW2ldKSArICInIiwgMCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdp
bigpLT50b1N0cmluZygpLCAwKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwor
ICAgICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdG9jb2xz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgcHJv
dG9jb2xzLnNpemUoKTsgKytqKQorICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbHNbaV0gPT0g
cHJvdG9jb2xzW2pdKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1l
c3NhZ2VMZXZlbCwgIldlYlNvY2tldCBwcm90b2NvbHMgY29udGFpbiBkdXBsaWNhdGVzOiAnIiAr
IGVuY29kZVByb3RvY29sU3RyaW5nKHByb3RvY29sc1tpXSkgKyAiJyIsIDAsIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgMCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgICAgICAgICAgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICBpZiAoIXByb3RvY29scy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvdG9jb2xzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGkpCisgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKHByb3RvY29sc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm90
b2NvbFN0cmluZyA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG1fY2hhbm5lbC0+Y29ubmVjdChtX3VybCwgcHJvdG9jb2xTdHJpbmcpOwogICAgIEFjdGl2ZURP
TU9iamVjdDo6c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oIGIvU291cmNlL1dlYkNvcmUvd2Vic29j
a2V0cy9XZWJTb2NrZXQuaAppbmRleCAxOTFiYzNmODg5NmQ3MDk1NTFhY2QxOWQyNmI3MzQ0MDVi
Mjk0YjFjLi4xZmFiMzQ2ZDExMWIxOWY1NjFkYzUzNzRkMTQzOTdhMDYyZmVjMzQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKQEAgLTY0LDYgKzY0LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgY29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIGNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBjb25u
ZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xzLCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICAgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC0xMTAsNyArMTExLDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgICAgIEtVUkwgbV91cmw7Ci0gICAg
ICAgIFN0cmluZyBtX3Byb3RvY29sOwogICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRh
cmdldERhdGE7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbV9idWZmZXJlZEFtb3VudEFmdGVyQ2xv
c2U7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5u
ZWwuY3BwCmluZGV4IDAxNzNlMjkwYmYyMjVkYWJmYzFkMTRlZjg0NTQyY2Y5OGFlYTA1N2QuLjNk
OWM0YTkxNDBmOWI1NDE4NjkxZmFmYzNkYzhhMDJkM2VlMzAyMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMTg0LDcgKzE4NCw4IEBA
IHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgpCiAgICAgTE9HKE5ldHdvcmssICJX
ZWJTb2NrZXRDaGFubmVsICVwIGRpc2Nvbm5lY3QiLCB0aGlzKTsKICAgICBpZiAobV9pZGVudGlm
aWVyICYmIG1fY29udGV4dCkKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRD
bG9zZVdlYlNvY2tldChtX2NvbnRleHQsIG1faWRlbnRpZmllcik7Ci0gICAgbV9oYW5kc2hha2Ut
PmNsZWFyU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmIChtX2hhbmRzaGFrZSkKKyAg
ICAgICAgbV9oYW5kc2hha2UtPmNsZWFyU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIG1f
Y2xpZW50ID0gMDsKICAgICBtX2NvbnRleHQgPSAwOwogICAgIGlmIChtX2hhbmRsZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103445</attachid>
            <date>2011-08-09 23:05:12 -0700</date>
            <delta_ts>2011-08-10 02:07:34 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-65247-20110810150510.patch</filename>
            <type>text/plain</type>
            <size>46488</size>
            <attacher name="Yuta Kitamura">yutak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2OTMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwYjFiMGZhYWYyOWQxMWMyOTljY2Fl
ZTQ2YmM5NGNmNWY5NTZhNThhLi44ZTY4Y2Y0NzcyYjM1MjNhM2ViNzIxZjM2MzZmMzYwNGU4ZTdh
OTk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDgtMDkgIFl1dGEgS2l0YW11cmEgIDx5
dXRha0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBBY2NlcHQgbXVsdGlwbGUg
c3VicHJvdG9jb2xzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NTI0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCB0ZXN0cyB0byBjaGVjayB3aGV0aGVyIFdlYlNvY2tldCBhY2NlcHRzIG11bHRpcGxl
IHN1YnByb3RvY29scyBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGh0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5YmkvYWNjZXB0LWZpcnN0LXN1YnByb3RvY29sX3dzaC5weTogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9pbnZhbGlkLXN1YnBy
b3RvY29sLWNoYXJhY3RlcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2ludmFsaWQtc3VicHJvdG9jb2wtY2hhcmFjdGVycy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2lu
dmFsaWQtc3VicHJvdG9jb2xzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9pbnZhbGlkLXN1YnByb3RvY29scy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL211bHRpcGxlLXN1
YnByb3RvY29scy1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3N1Yi1wcm90b2NvbC13aXRoLXNwYWNlLWV4cGVjdGVk
LnR4dC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL211bHRpcGxl
LXN1YnByb3RvY29scy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3N1Yi1wcm90b2NvbC13aXRoLXNwYWNlLWV4cGVjdGVkLnR4dDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3N1Yi1wcm90b2Nv
bC13aXRoLXNwYWNlLmh0bWw6CisgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBoeWJpLTEwIGRvZXMg
bm90IGFsbG93IHN1YnByb3RvY29scyBjb250YWluaW5nIGEgc3BhY2UuCisgICAgICAgICogaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL211bHRpcGxlLXN1YnByb3RvY29s
cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBsZS1zdWJwcm90b2NvbHMuaHRtbDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9t
dWx0aXBsZS1zdWJwcm90b2NvbHMuanM6IEFkZGVkLgorICAgICAgICAod3Mub25vcGVuKToKKyAg
ICAgICAgKHdzLm9ubWVzc2FnZSk6CisgICAgICAgICh3cy5vbmNsb3NlKToKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3Byb3RvY29s
LXRlc3Rfd3NoLnB5OiBDb3BpZWQgZnJvbSBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3Byb3RvY29sLXRlc3Rfd3NoLnB5LgorCiAyMDExLTA4LTA5ICBBYmhpc2hlayBBcnlhICA8aW5m
ZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVGVzdHMgdGhhdCB3ZSBkbyBub3QgY3Jhc2gg
d2hlbiB0cnlpbmcgdG8gZGlydHkgbGluZSBib3hlcyBvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9hY2NlcHQtZmlyc3Qtc3VicHJvdG9j
b2xfd3NoLnB5IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9h
Y2NlcHQtZmlyc3Qtc3VicHJvdG9jb2xfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjYWQ1MTI1OTc4Njg5
NDM5YmM2M2Y1ZDI2OTQyYzM3OTQ4NTk1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2FjY2VwdC1maXJzdC1zdWJwcm90b2Nv
bF93c2gucHkKQEAgLTAsMCArMSw2IEBACitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hh
a2UocmVxdWVzdCk6CisgICAgcmVxdWVzdC53c19wcm90b2NvbCA9IHJlcXVlc3Qud3NfcmVxdWVz
dGVkX3Byb3RvY29sc1swXQorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVz
dCk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaHliaS9pbnZhbGlkLXN1YnByb3RvY29sLWNoYXJhY3RlcnMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9pbnZhbGlkLXN1
YnByb3RvY29sLWNoYXJhY3RlcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3OTBmOTM5NjRj
MGI5YzQ5NDJkYTYyMzk4MWEzMGQ3NjY1ZWUwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2ludmFsaWQtc3VicHJvdG9jb2wt
Y2hhcmFjdGVycy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxODcgQEAKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICdcdTAwMDAnCitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnXHUwMDAxJwor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ1x1
MDAwMicKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29j
a2V0ICdcdTAwMDMnCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9y
IFdlYlNvY2tldCAnXHUwMDA0JworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3Rv
Y29sIGZvciBXZWJTb2NrZXQgJ1x1MDAwNScKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9u
ZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICdcdTAwMDYnCitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
MDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnXHUwMDA3JworQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ1x1MDAwOCcKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICdcdTAwMDknCitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnXHUw
MDBBJworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2Nr
ZXQgJ1x1MDAwQicKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3Ig
V2ViU29ja2V0ICdcdTAwMEMnCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9j
b2wgZm9yIFdlYlNvY2tldCAnXHUwMDBEJworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25n
IHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ1x1MDAwRScKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAw
OiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICdcdTAwMEYnCitDT05TT0xFIE1FU1NBR0U6
IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnXHUwMDEwJworQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ1x1MDAxMScKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICdcdTAw
MTInCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tl
dCAnXHUwMDEzJworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBX
ZWJTb2NrZXQgJ1x1MDAxNCcKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2Nv
bCBmb3IgV2ViU29ja2V0ICdcdTAwMTUnCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3Jvbmcg
cHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnXHUwMDE2JworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6
IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ1x1MDAxNycKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICdcdTAwMTgnCitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnXHUwMDE5JworQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ1x1MDAx
QScKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0
ICdcdTAwMUInCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdl
YlNvY2tldCAnXHUwMDFDJworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29s
IGZvciBXZWJTb2NrZXQgJ1x1MDAxRCcKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBw
cm90b2NvbCBmb3IgV2ViU29ja2V0ICdcdTAwMUUnCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDog
V3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnXHUwMDFGJworQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJyAnCitDT05TT0xFIE1FU1NBR0U6
IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnIicKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICcoJworQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJyknCitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnLCcKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICcvJworQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJzonCitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnOycKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICc8Jwor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJz0n
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAn
PicKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0
ICc/JworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2Nr
ZXQgJ0AnCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNv
Y2tldCAnWycKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2Vi
U29ja2V0ICdcXCcKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3Ig
V2ViU29ja2V0ICddJworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZv
ciBXZWJTb2NrZXQgJ3snCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wg
Zm9yIFdlYlNvY2tldCAnfScKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2Nv
bCBmb3IgV2ViU29ja2V0ICdcdTAwN0YnCitXZWJTb2NrZXQgc2hvdWxkIGZhaWwgaWYgc3VicHJv
dG9jb2wgY29udGFpbnMgYSBmb3JiaWRkZW4gY2hhcmFjdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwMDAiKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJT
b2NrZXQodXJsLCAiXHUwMDAxIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBE
T00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAwMiIpIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3
IFdlYlNvY2tldCh1cmwsICJcdTAwMDMiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9F
UlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDA0Iikg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFT
UyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAwNSIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lO
VEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAw
MDYiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIu
CitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDA3IikgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwg
Ilx1MDAwOCIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlv
biAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwMDkiKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJTb2NrZXQo
dXJsLCAiXHUwMDBhIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhj
ZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAwYiIpIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNv
Y2tldCh1cmwsICJcdTAwMGMiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDBkIikgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcg
V2ViU29ja2V0KHVybCwgIlx1MDAwZSIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VS
UjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwMGYiKSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNT
IG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDEwIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5U
QVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAx
MSIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4K
K1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwMTIiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAi
XHUwMDEzIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAxNCIpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1
cmwsICJcdTAwMTUiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNl
cHRpb24gMTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDE2IikgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29j
a2V0KHVybCwgIlx1MDAxNyIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwMTgiKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBX
ZWJTb2NrZXQodXJsLCAiXHUwMDE5IikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAxYSIpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1Mg
bmV3IFdlYlNvY2tldCh1cmwsICJcdTAwMWIiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRB
WF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDFj
IikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgor
UEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAxZCIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
U1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJc
dTAwMWUiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDFmIikgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVy
bCwgIlx1MDAyMCIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMi4KK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAi
XHUwMDIxIgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAyMiIpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgV2ViU29ja2V0IGNv
cnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDIzIgorUEFTUyBXZWJTb2NrZXQgY29y
cmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwMjQiCitQQVNTIFdlYlNvY2tldCBjb3Jy
ZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDAyNSIKK1BBU1MgV2ViU29ja2V0IGNvcnJl
Y3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDI2IgorUEFTUyBXZWJTb2NrZXQgY29ycmVj
dGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwMjciCitQQVNTIG5ldyBXZWJTb2NrZXQodXJs
LCAiXHUwMDI4IikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0
aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAyOSIpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgV2ViU29ja2V0IGNv
cnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDJhIgorUEFTUyBXZWJTb2NrZXQgY29y
cmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwMmIiCitQQVNTIG5ldyBXZWJTb2NrZXQo
dXJsLCAiXHUwMDJjIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhj
ZXB0aW9uIDEyLgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29s
ICJcdTAwMmQiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wg
Ilx1MDAyZSIKK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwMmYiKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIFdlYlNvY2tldCBj
b3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDAzMCIKK1BBU1MgV2ViU29ja2V0IGNv
cnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDMxIgorUEFTUyBXZWJTb2NrZXQgY29y
cmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwMzIiCitQQVNTIFdlYlNvY2tldCBjb3Jy
ZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDAzMyIKK1BBU1MgV2ViU29ja2V0IGNvcnJl
Y3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDM0IgorUEFTUyBXZWJTb2NrZXQgY29ycmVj
dGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwMzUiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0
bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDAzNiIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3Rs
eSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDM3IgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5
IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwMzgiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkg
YWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDAzOSIKK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJc
dTAwM2EiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTIuCitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDNiIikgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVy
bCwgIlx1MDAzYyIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwM2QiKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJTb2Nr
ZXQodXJsLCAiXHUwMDNlIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00g
RXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgIlx1MDAzZiIpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdl
YlNvY2tldCh1cmwsICJcdTAwNDAiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6
IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3Vi
cHJvdG9jb2wgIlx1MDA0MSIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJw
cm90b2NvbCAiXHUwMDQyIgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnBy
b3RvY29sICJcdTAwNDMiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJv
dG9jb2wgIlx1MDA0NCIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90
b2NvbCAiXHUwMDQ1IgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3Rv
Y29sICJcdTAwNDYiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9j
b2wgIlx1MDA0NyIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2Nv
bCAiXHUwMDQ4IgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29s
ICJcdTAwNDkiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wg
Ilx1MDA0YSIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAi
XHUwMDRiIgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJc
dTAwNGMiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1
MDA0ZCIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUw
MDRlIgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAw
NGYiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA1
MCIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDUx
IgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwNTIi
CitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA1MyIK
K1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDU0Igor
UEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwNTUiCitQ
QVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA1NiIKK1BB
U1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDU3IgorUEFT
UyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwNTgiCitQQVNT
IFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA1OSIKK1BBU1Mg
V2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDVhIgorUEFTUyBu
ZXcgV2ViU29ja2V0KHVybCwgIlx1MDA1YiIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwNWMi
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQ
QVNTIG5ldyBXZWJTb2NrZXQodXJsLCAiXHUwMDVkIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFj
Y2VwdGVkIHN1YnByb3RvY29sICJcdTAwNWUiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNj
ZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA1ZiIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2Nl
cHRlZCBzdWJwcm90b2NvbCAiXHUwMDYwIgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2Vw
dGVkIHN1YnByb3RvY29sICJcdTAwNjEiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0
ZWQgc3VicHJvdG9jb2wgIlx1MDA2MiIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRl
ZCBzdWJwcm90b2NvbCAiXHUwMDYzIgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVk
IHN1YnByb3RvY29sICJcdTAwNjQiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQg
c3VicHJvdG9jb2wgIlx1MDA2NSIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBz
dWJwcm90b2NvbCAiXHUwMDY2IgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1
YnByb3RvY29sICJcdTAwNjciCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3Vi
cHJvdG9jb2wgIlx1MDA2OCIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJw
cm90b2NvbCAiXHUwMDY5IgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnBy
b3RvY29sICJcdTAwNmEiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJv
dG9jb2wgIlx1MDA2YiIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90
b2NvbCAiXHUwMDZjIgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3Rv
Y29sICJcdTAwNmQiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9j
b2wgIlx1MDA2ZSIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2Nv
bCAiXHUwMDZmIgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29s
ICJcdTAwNzAiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wg
Ilx1MDA3MSIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAi
XHUwMDcyIgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJc
dTAwNzMiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1
MDA3NCIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUw
MDc1IgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAw
NzYiCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA3
NyIKK1BBU1MgV2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCAiXHUwMDc4
IgorUEFTUyBXZWJTb2NrZXQgY29ycmVjdGx5IGFjY2VwdGVkIHN1YnByb3RvY29sICJcdTAwNzki
CitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA3YSIK
K1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwN2IiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkg
YWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA3YyIKK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJc
dTAwN2QiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTIuCitQQVNTIFdlYlNvY2tldCBjb3JyZWN0bHkgYWNjZXB0ZWQgc3VicHJvdG9jb2wgIlx1MDA3
ZSIKK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICJcdTAwN2YiKSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9pbnZhbGlkLXN1YnByb3RvY29sLWNoYXJhY3Rl
cnMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52
YWxpZC1zdWJwcm90b2NvbC1jaGFyYWN0ZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzY1OTk0NmUyNTI0
YzBhMmZlZTE2NGZiMWIzOTc4NzUwN2U0NzdiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJwcm90b2NvbC1j
aGFyYWN0ZXJzLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9qcy10ZXN0
LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4v
anMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJXZWJTb2Nr
ZXQgc2hvdWxkIGZhaWwgaWYgc3VicHJvdG9jb2wgY29udGFpbnMgYSBmb3JiaWRkZW4gY2hhcmFj
dGVyLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVy
ZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIsIDApOworCitmdW5j
dGlvbiBlc2NhcGVVbmljb2RlQ2hhcmFjdGVyKGNvZGVQb2ludCkKK3sKKyAgICB2YXIgaGV4Q29k
ZSA9IGNvZGVQb2ludC50b1N0cmluZygxNik7CisgICAgd2hpbGUgKGhleENvZGUubGVuZ3RoIDwg
NCkKKyAgICAgICAgaGV4Q29kZSA9ICIwIiArIGhleENvZGU7CisgICAgcmV0dXJuICJcXHUiICsg
aGV4Q29kZTsKK30KKwordmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90
ZXN0cy9oeWJpL2FjY2VwdC1maXJzdC1zdWJwcm90b2NvbCI7Cit2YXIgc2VwYXJhdG9ycyA9ICIo
KTw+QCw7OlxcXCIvW10/PXt9IFx0IjsKKworZnVuY3Rpb24gcnVuVGVzdChjb2RlUG9pbnQpCit7
CisgICAgaWYgKGNvZGVQb2ludCA9PSAxMjgpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgY2hhcmFjdGVyID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlUG9pbnQpOworICAgIGlmIChjb2RlUG9pbnQgPj0gMHgyMSAmJiBjb2RlUG9p
bnQgPD0gMHg3RSAmJiBzZXBhcmF0b3JzLmluZGV4T2YoY2hhcmFjdGVyKSA9PT0gLTEpIHsKKyAg
ICAgICAgdmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwsIGNoYXJhY3Rlcik7CisgICAgICAgIHdz
Lm9ub3BlbiA9IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgi
V2ViU29ja2V0IGNvcnJlY3RseSBhY2NlcHRlZCBzdWJwcm90b2NvbCBcIiIgKyBlc2NhcGVVbmlj
b2RlQ2hhcmFjdGVyKGNvZGVQb2ludCkgKyAiXCIiKTsKKyAgICAgICAgICAgIHdzLmNsb3NlKCk7
CisgICAgICAgIH07CisgICAgICAgIHdzLm9uY2xvc2UgPSBmdW5jdGlvbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNldFRpbWVvdXQoInJ1blRlc3QoIiArIChjb2RlUG9pbnQgKyAxKSArICIp
IiwgMCk7CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2hvdWxkVGhyb3coIm5l
dyBXZWJTb2NrZXQodXJsLCBcIiIgKyBlc2NhcGVVbmljb2RlQ2hhcmFjdGVyKGNvZGVQb2ludCkg
KyAiXCIpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAg
ICAgc2V0VGltZW91dCgicnVuVGVzdCgiICsgKGNvZGVQb2ludCArIDEpICsgIikiLCAwKTsKKyAg
ICB9Cit9CisKK3J1blRlc3QoMCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJwcm90
b2NvbHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9pbnZhbGlkLXN1YnByb3RvY29scy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU4
NzRjYzYwZmJiMDg2Mjg4N2QyNDUyNGVlM2ZhNmE0ZGIyODAxMwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJw
cm90b2NvbHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICdhIGInCitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgMDogV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnYSxiJworQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ2FcdTAwMDBiJwor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFdyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJ1x1
MzA0MicKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29j
a2V0ICdjIGQnCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogV2ViU29ja2V0IHByb3RvY29scyBj
b250YWluIGR1cGxpY2F0ZXM6ICdhJworV2ViU29ja2V0IHNob3VsZCBmYWlsIGlmIGludmFsaWQg
c3VicHJvdG9jb2xzIGFyZSBzcGVjaWZpZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CitQQVNTIG5ldyBXZWJTb2NrZXQodXJsLCAnYSBiJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgJ2Es
YicpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4K
K1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsICdhXDBiJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcgV2ViU29ja2V0KHVybCwgJ1x1
MzA0MicpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
Mi4KK1BBU1MgbmV3IFdlYlNvY2tldCh1cmwsIFsnYScsICdiJywgJ2MgZCddKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBXZWJT
b2NrZXQodXJsLCBbJ2EnLCAnYicsICdjJywgJ2EnXSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJwcm90b2NvbHMuaHRtbCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJwcm90b2Nv
bHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MDJkNjNlY2RkOTcyOWJmMDNhYTY5MjYzOGFiYzZlNTQxNjE3
ZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaHliaS9pbnZhbGlkLXN1YnByb3RvY29scy5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+
CitkZXNjcmlwdGlvbigiV2ViU29ja2V0IHNob3VsZCBmYWlsIGlmIGludmFsaWQgc3VicHJvdG9j
b2xzIGFyZSBzcGVjaWZpZWQiKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEhpeGll
NzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQiLCAwKTsKKwordmFyIHVybCA9ICJ3czovLzEyNy4w
LjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9zaW1wbGUiOworc2hvdWxkVGhyb3coIm5ldyBXZWJT
b2NrZXQodXJsLCAnYSBiJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEy
JyIpOworc2hvdWxkVGhyb3coIm5ldyBXZWJTb2NrZXQodXJsLCAnYSxiJykiLCAiJ0Vycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworc2hvdWxkVGhyb3coIm5ldyBXZWJTb2Nr
ZXQodXJsLCAnYVxcMGInKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIn
Iik7CitzaG91bGRUaHJvdygibmV3IFdlYlNvY2tldCh1cmwsICdcXHUzMDQyJykiLCAiJ0Vycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworc2hvdWxkVGhyb3coIm5ldyBXZWJT
b2NrZXQodXJsLCBbJ2EnLCAnYicsICdjIGQnXSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00g
RXhjZXB0aW9uIDEyJyIpOworc2hvdWxkVGhyb3coIm5ldyBXZWJTb2NrZXQodXJsLCBbJ2EnLCAn
YicsICdjJywgJ2EnXSkiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIp
OworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL211bHRpcGxlLXN1YnByb3RvY29scy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL211bHRpcGxlLXN1
YnByb3RvY29scy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWVlZmZkMDM2YTliN2ZmOTNiNmJl
YmMyZjQ5Mjg2Yjc4NDg1ZGRiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvbXVsdGlwbGUtc3VicHJvdG9jb2xzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0IFdlYlNvY2tldCBzdWJwcm90b2NvbCBuZWdvdGlh
dGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitDb25uZWN0ZWQKK1JlY2VpdmVk
OiBzdXBlcmNoYXQKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlIGlzICJzdXBlcmNoYXQiCitDbG9zZWQK
K1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9tdWx0aXBsZS1zdWJwcm90b2NvbHMuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvbXVsdGlwbGUtc3Vi
cHJvdG9jb2xzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZmYzRhN2JlYjJiNGMzNWI1YWUxNmRiODUyNWZm
YjAxNDBlNGRjMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5YmkvbXVsdGlwbGUtc3VicHJvdG9jb2xzLmh0bWwKQEAgLTAsMCArMSw1
MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+
PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJUZXN0IFdlYlNvY2tldCBzdWJwcm90b2NvbCBuZWdvdGlh
dGlvbi4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZl
cmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQiLCAwKTsKKwordmFy
IHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMv
aHliaS9wcm90b2NvbC10ZXN0P3Byb3RvY29sPXN1cGVyY2hhdCIsIFsiY2hhdCIsICJzdXBlcmNo
YXQiXSk7Cit2YXIgY2xvc2VFdmVudDsKK3ZhciByZWNlaXZlZE1lc3NhZ2U7CisKKy8vIEZJWE1F
OiBJbXBsZW1lbnQgV2ViU29ja2V0LnByb3RvY29sLgorLy8gc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJ3cy5wcm90b2NvbCIsICIiKTsKKword3Mub25vcGVuID0gZnVuY3Rpb24oKQoreworICAgIGRl
YnVnKCJDb25uZWN0ZWQiKTsKKyAgICAvLyBGSVhNRTogRGl0dG8uCisgICAgLy8gc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJ3cy5wcm90b2NvbCIsICJzdXBlcmNoYXQiKTsKK307CisKK3dzLm9ubWVz
c2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIHJlY2VpdmVkTWVzc2FnZSA9IGV2ZW50LmRh
dGE7CisgICAgZGVidWcoIlJlY2VpdmVkOiAiICsgcmVjZWl2ZWRNZXNzYWdlKTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY2VpdmVkTWVzc2FnZSIsICJzdXBlcmNoYXQiKTsKK307CisK
K3dzLm9uY2xvc2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICBkZWJ1ZygiQ2xvc2VkIik7Cisg
ICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgIHNob3VsZEJlVHJ1ZSgiY2xvc2VFdmVudC53YXND
bGVhbiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zdWIt
cHJvdG9jb2wtd2l0aC1zcGFjZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3N1Yi1wcm90b2NvbC13aXRoLXNwYWNlLWV4cGVjdGVkLnR4
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxYTc0OTFmMDZkZTJhNjlmMjllY2M1
NGQ3ZTgwODRiMzNjNDdlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3N1Yi1w
cm90b2NvbC13aXRoLXNwYWNlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwICsw
LDAgQEAKLVRlc3QgV2ViU29ja2V0IGhhbmRzaGFrZSBzdWNjZXNzIHdpdGggc3ViIHByb3RvY29s
IGNvbnRhaW5zIHNwYWNlLgotCi1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLUNvbm5lY3Rl
ZAotUEFTUyBwcm90b2NvbCBpcyAic3ViIHByb3RvY29sIgotUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc3ViLXByb3RvY29sLXdpdGgtc3BhY2UuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc3ViLXByb3Rv
Y29sLXdpdGgtc3BhY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVkYjQ0
Nzc5OWI5YTYyMGNlMmM3MGFiMTQzYjMyNTMyMzU2OTIzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3N1Yi1wcm90b2NvbC13aXRoLXNwYWNlLmh0bWwKKysrIC9kZXYvbnVsbApA
QCAtMSw1NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Ci08c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgotPC9oZWFkPgotPGJvZHk+Ci08ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Ci08ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWRlc2Ny
aXB0aW9uKCJUZXN0IFdlYlNvY2tldCBoYW5kc2hha2Ugc3VjY2VzcyB3aXRoIHN1YiBwcm90b2Nv
bCBjb250YWlucyBzcGFjZS4iKTsKLQotd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5v
dmVycmlkZVByZWZlcmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQi
LCAwKTsKLQotdmFyIHByb3RvY29sOwotCi1mdW5jdGlvbiBlbmRUZXN0KCkKLXsKLSAgICBzaG91
bGRCZSgicHJvdG9jb2wiLCAnInN1YiBwcm90b2NvbCInKTsKLSAgICBmaW5pc2hKU1Rlc3QoKTsK
LX0KLQotdmFyIHVybCA9ICJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3Byb3RvY29sLXRlc3Q/cHJvdG9jb2w9c3ViJTIwcHJvdG9jb2wiOwotdmFyIHdzID0gbmV3IFdl
YlNvY2tldCh1cmwsICJzdWIgcHJvdG9jb2wiKTsKLQotd3Mub25vcGVuID0gZnVuY3Rpb24oKQot
ewotICAgIGRlYnVnKCJDb25uZWN0ZWQiKTsKLX07Ci0KLXdzLm9ubWVzc2FnZSA9IGZ1bmN0aW9u
IChtZXNzYWdlRXZlbnQpCi17Ci0gICAgcHJvdG9jb2wgPSBtZXNzYWdlRXZlbnQuZGF0YTsKLSAg
ICB3cy5jbG9zZSgpOwotfTsKLQotd3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBlbmRU
ZXN0KCk7Ci19OwotCi1mdW5jdGlvbiB0aW1lT3V0Q2FsbGJhY2soKQotewotICAgIGRlYnVnKCJU
aW1lZCBvdXQgaW4gc3RhdGU6ICIgKyB3cy5yZWFkeVN0YXRlKTsKLSAgICBlbmRUZXN0KCk7Ci19
Ci0KLXZhciB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KHRpbWVPdXRDYWxsYmFjaywgMzAwMCk7Ci0K
LXZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
LTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBsZS1zdWJwcm90b2NvbHMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJz
L211bHRpcGxlLXN1YnByb3RvY29scy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmEzN2YxMWFl
ZGFjZTI4YTlhOTQ4YTZhY2I2ZGRkZDQ1ZmI3MTRlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBsZS1z
dWJwcm90b2NvbHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1Rlc3QgV2ViU29ja2V0
IHN1YnByb3RvY29sIG5lZ290aWF0aW9uIGluIHdvcmtlcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworSU5GTzogQ29ubmVjdGVkCitJTkZPOiBSZWNlaXZlZDogc3VwZXJjaGF0CitQ
QVNTIFBBU1M6IHJlY2VpdmVkTWVzc2FnZSBpcyBlcXVhbCB0byAic3VwZXJjaGF0IgorSU5GTzog
Q2xvc2VkCitQQVNTIFBBU1M6IGNsb3NlRXZlbnQud2FzQ2xlYW4gaXMgdHJ1ZQorRE9ORQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9t
dWx0aXBsZS1zdWJwcm90b2NvbHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9tdWx0aXBsZS1zdWJwcm90b2NvbHMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xODI3MzU4NmYzNjNmOTI5MTY3ZTI3MTNjMjY1MmQ3YjUwZDM5MTQxCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3Jr
ZXJzL211bHRpcGxlLXN1YnByb3RvY29scy5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+
CitkZXNjcmlwdGlvbigiVGVzdCBXZWJTb2NrZXQgc3VicHJvdG9jb2wgbmVnb3RpYXRpb24gaW4g
d29ya2Vycy4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVBy
ZWZlcmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQiLCAwKTsKKwor
ZnVuY3Rpb24gc3RhcnRzV2l0aChzdHIsIHByZWZpeCkKK3sKKyAgICByZXR1cm4gc3RyLmluZGV4
T2YocHJlZml4KSA9PSAwOworfQorCit2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2Vz
L211bHRpcGxlLXN1YnByb3RvY29scy5qcyIpOword29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9u
IChldmVudCkKK3sKKyAgICB2YXIgbWVzc2FnZSA9IGV2ZW50LmRhdGE7CisgICAgaWYgKHN0YXJ0
c1dpdGgobWVzc2FnZSwgIlBBU1MiKSkKKyAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAg
ICBlbHNlIGlmIChzdGFydHNXaXRoKG1lc3NhZ2UsICJGQUlMIikpCisgICAgICAgIHRlc3RGYWls
ZWQobWVzc2FnZSkKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKG1lc3NhZ2UpOworICAgIGlmICht
ZXNzYWdlID09PSAiRE9ORSIpCisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9tdWx0aXBsZS1zdWJwcm90b2NvbHMuanMg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVz
b3VyY2VzL211bHRpcGxlLXN1YnByb3RvY29scy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGE4M2VlN2Y3MmM1
MmZjMmFlZGVmOTVlOGI1ZjU1MTc5ZjMyODkwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9tdWx0
aXBsZS1zdWJwcm90b2NvbHMuanMKQEAgLTAsMCArMSwzOCBAQAordmFyIHdzID0gbmV3IFdlYlNv
Y2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jl
c291cmNlcy9wcm90b2NvbC10ZXN0P3Byb3RvY29sPXN1cGVyY2hhdCIsIFsiY2hhdCIsICJzdXBl
cmNoYXQiXSk7CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQgV2ViU29ja2V0LnByb3RvY29sLgorLy8g
aWYgKHdzLnByb3RvY29sID09PSAiIikKKy8vICAgICBwb3N0TWVzc2FnZSgiUEFTUzogd3MucHJv
dG9jb2wgaXMgZXF1YWwgdG8gXCJcIiIpOworLy8gZWxzZQorLy8gICAgIHBvc3RNZXNzYWdlKCJG
QUlMOiB3cy5wcm90b2NvbCBzaG91bGQgYmUgXCJcIiBidXQgd2FzIFwiIiArIHdzLnByb3RvY29s
ICsgIlwiIik7CisKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICBwb3N0TWVzc2FnZSgi
SU5GTzogQ29ubmVjdGVkIik7CisgICAgLy8gRklYTUU6IERpdHRvLgorICAgIC8vIGlmICh3cy5w
cm90b2NvbCA9PT0gInN1cGVyY2hhdCIpCisgICAgLy8gICAgIHBvc3RNZXNzYWdlKCJQQVNTOiB3
cy5wcm90b2NvbCBpcyBlcXVhbCB0byBcInN1cGVyY2hhdFwiIik7CisgICAgLy8gZWxzZQorICAg
IC8vICAgICBwb3N0TWVzc2FnZSgiRkFJTDogd3MucHJvdG9jb2wgc2hvdWxkIGJlIFwic3VwZXJj
aGF0XCIgYnV0IHdhcyBcIiIgKyB3cy5wcm90b2NvbCArICJcIiIpOworfTsKKword3Mub25tZXNz
YWdlID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAgdmFyIHJlY2VpdmVkTWVzc2FnZSA9IGV2ZW50
LmRhdGE7CisgICAgcG9zdE1lc3NhZ2UoIklORk86IFJlY2VpdmVkOiAiICsgcmVjZWl2ZWRNZXNz
YWdlKTsKKyAgICBpZiAocmVjZWl2ZWRNZXNzYWdlID09PSAic3VwZXJjaGF0IikKKyAgICAgICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IHJlY2VpdmVkTWVzc2FnZSBpcyBlcXVhbCB0byBcInN1cGVyY2hh
dFwiIik7CisgICAgZWxzZQorICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogcmVjZWl2ZWRNZXNz
YWdlIHNob3VsZCBiZSBcInN1cGVyY2hhdFwiIGJ1dCB3YXMgXCIiICsgd3MucHJvdG9jb2wgKyAi
XCIiKTsKK307CisKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbihjbG9zZUV2ZW50KQoreworICAgIHBv
c3RNZXNzYWdlKCJJTkZPOiBDbG9zZWQiKTsKKyAgICBpZiAoY2xvc2VFdmVudC53YXNDbGVhbiA9
PT0gdHJ1ZSkKKyAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNsb3NlRXZlbnQud2FzQ2xlYW4g
aXMgdHJ1ZSIpOworICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNsb3NlRXZl
bnQud2FzQ2xlYW4gc2hvdWxkIGJlIHRydWUgYnV0IHdhcyBcIiIgKyBjbG9zZUV2ZW50Lndhc0Ns
ZWFuICsgIlwiIik7CisKKyAgICBwb3N0TWVzc2FnZSgiRE9ORSIpOworfTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNv
dXJjZXMvcHJvdG9jb2wtdGVzdF93c2gucHkgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3Byb3RvY29sLXRlc3Rfd3NoLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY0M2Q4ZTYwZWVlZjkzMTJiZGU3NWRiMzUwMDQyNmMwNmZlYmYwNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3dvcmtlcnMvcmVzb3VyY2VzL3Byb3RvY29sLXRlc3Rfd3NoLnB5CkBAIC0wLDAgKzEsNDQgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBjZ2kKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGlt
cG9ydCBtc2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVl
c3QpOgorICAgIHIgPSByZXF1ZXN0LndzX3Jlc291cmNlLnNwbGl0KCc/JywgMSkKKyAgICBpZiBs
ZW4ocikgPT0gMToKKyAgICAgICAgcmV0dXJuCisgICAgcGFyYW0gPSBjZ2kucGFyc2VfcXMoclsx
XSkKKyAgICBpZiAncHJvdG9jb2wnIGluIHBhcmFtOgorICAgICAgICByZXF1ZXN0LndzX3Byb3Rv
Y29sID0gcGFyYW1bJ3Byb3RvY29sJ11bMF0KKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9k
YXRhKHJlcXVlc3QpOgorICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHJlcXVlc3Qu
d3NfcHJvdG9jb2wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmI5NDcxNTBhMmJjMWU4Njg1Njk3MDhjYjYzYzll
YzhlYjMyMmQzOC4uZjE0ZmY1ZDdhOTQzOTg2NmI2ZWUxMzA3YWZkYTViMzVlNWI2MTIwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDExLTA4LTA5ICBZdXRhIEtpdGFtdXJhICA8eXV0
YWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYlNvY2tldDogQWNjZXB0IG11bHRpcGxlIHN1
YnByb3RvY29scworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjUyNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXZWJTb2NrZXQgY29uc3RydWN0b3Igc2hvdWxkIGFjY2VwdCBhbiBhcnJheSBvZiBzdWJwcm90
b2NvbHMgaWYgaHliaS0xMCBwcm90b2NvbCBpcyBjaG9zZW4uCisKKyAgICAgICAgVGVzdHM6IGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvaW52YWxpZC1zdWJwcm90b2NvbC1jaGFyYWN0
ZXJzLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
aW52YWxpZC1zdWJwcm90b2NvbHMuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy93ZWJz
b2NrZXQvdGVzdHMvaHliaS9tdWx0aXBsZS1zdWJwcm90b2NvbHMuaHRtbAorICAgICAgICAgICAg
ICAgaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL211bHRpcGxlLXN1YnBy
b3RvY29scy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U1dlYlNvY2tldCk6CisgICAgICAgIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgV2ViU29ja2V0
IGNvbnN0cnVjdG9yIGlzIGFuIGFycmF5LCBidWlsZCBhIFZlY3RvcjxTdHJpbmc+IGFuZAorICAg
ICAgICBwYXNzIGl0IHRvIFdlYlNvY2tldDo6Y29ubmVjdCgpLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFdl
YlNvY2tldDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIERpdHRvLgorICAgICAgICAq
IHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRQcm90
b2NvbENoYXJhY3Rlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZFByb3RvY29s
U3RyaW5nKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkUHJvdG9jb2xTdHJpbmdI
aXhpZTc2KTogUmVuYW1lZCBmcm9tIGlzVmFsaWRQcm90b2NvbFN0cmluZy4KKyAgICAgICAgKFdl
YkNvcmU6OmpvaW5TdHJpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVj
dCk6CisgICAgICAgIElmIGFuIGFycmF5IGlzIHByb3ZpZGVkIGFzIGEgc3VicHJvdG9jb2wsIGFu
ZCBpZiBoaXhpZS03NiBpcyB1c2VkIGZvciB0aGlzIGNvbm5lY3Rpb24sIGl0CisgICAgICAgIG11
c3QgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGluIHRoZSBzYW1lIG1hbm5lciBhcyBKYXZhU2Ny
aXB0J3MgQXJyYXkudG9TdHJpbmcoKSBpbiBvcmRlcgorICAgICAgICB0byBrZWVwIGNvbXBhdGli
aWxpdHkuCisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDoKKyAgICAgICAgUmVtb3Zl
ZCBtX3Byb3RvY29sIGJlY2F1c2UgaXQgd2FzIG5vdCB1c2VkIGF0IGFsbC4KKyAgICAgICAgKiB3
ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29j
a2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCk6CisgICAgICAgIFdlYlNvY2tldENoYW5uZWwgbWF5IGJl
IHJlbGVhc2VkIGJlZm9yZSBjb25uZWN0KCkgaXMgY2FsbGVkLCB0aHVzIG1faGFuZHNoYWtlIG1h
eSBiZSBudWxsLgorCiAyMDExLTA4LTA5ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBKYXZhU3RyaW5nIGlzIG5vdCBuZWVkZWQgYnkgVjgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAppbmRleCA4MTgy
Y2Y2MWE3YzM2YThiOGE1ZjZiZDlmN2Y2N2I4ZmExMmJjMGM4Li5hZjVkYWNhNTU1ZTA4OWVjMTIy
NThjNjE3MjJjNjA3Y2RmMzAxNmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSlNF
dmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9FcnJvci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIApAQCAtNjIsMTAgKzYzLDIzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXZWJTb2NrZXQoRXhlY1N0CiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHdlYlNvY2tldC0+Y29ubmVjdCh1
cmxTdHJpbmcsIGVjKTsKICAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIHByb3RvY29sID0gdXN0
cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwotICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5nLCBw
cm90b2NvbCwgZWMpOworICAgICAgICBKU1ZhbHVlIHByb3RvY29sc1ZhbHVlID0gZXhlYy0+YXJn
dW1lbnQoMSk7CisgICAgICAgIGlmIChpc0pTQXJyYXkoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
dG9jb2xzVmFsdWUpKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBwcm90b2NvbHM7Cisg
ICAgICAgICAgICBKU0FycmF5KiBwcm90b2NvbHNBcnJheSA9IGFzQXJyYXkocHJvdG9jb2xzVmFs
dWUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sc0FycmF5
LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gdXN0
cmluZ1RvU3RyaW5nKHByb3RvY29sc0FycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKSk7
CisgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgcHJvdG9jb2xzLmFwcGVuZChwcm90b2NvbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsU3RyaW5nLCBwcm90b2NvbHMsIGVjKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHVzdHJpbmdUb1N0cmluZyhw
cm90b2NvbHNWYWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOworICAgICAgICAgICAgd2ViU29ja2V0LT5jb25uZWN0KHVybFN0cmluZywgcHJvdG9j
b2wsIGVjKTsKKyAgICAgICAgfQogICAgIH0KICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGpz
Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBXZWJTb2NrZXQsIHdlYlNvY2tldC5nZXQoKSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29j
a2V0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNv
Y2tldEN1c3RvbS5jcHAKaW5kZXggNWUxNWRhYjg5YWM0YTYwODIwYWVkNjExN2QxNTVlM2Y1MTM2
OTc1ZC4uNThhMjdlN2ZhMTNkYjlmYTJkZGMzZDJmZWQzZjdlODk3ZmM5NzVkNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0
b20uY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5jbHVk
ZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC03NCwxMSArNzUsMjUgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViU29ja2V0Ojpjb25z
dHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDIpCiAgICAgICAgIHdlYlNvY2tldC0+Y29ubmVjdCh1cmwsIGVjKTsKICAgICBl
bHNlIHsKLSAgICAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoUHJvdG9jb2w7Ci0gICAgICAgIHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gcHJvdG9jb2wgPSBhcmdzWzFdLT5Ub1N0cmluZygpOwotICAg
ICAgICBpZiAodHJ5Q2F0Y2hQcm90b2NvbC5IYXNDYXVnaHQoKSkKLSAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKHRyeUNhdGNoUHJvdG9jb2wuRXhjZXB0aW9uKCkpOwotICAgICAgICB3ZWJT
b2NrZXQtPmNvbm5lY3QodXJsLCB0b1dlYkNvcmVTdHJpbmcocHJvdG9jb2wpLCBlYyk7CisgICAg
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHByb3RvY29sc1ZhbHVlID0gYXJnc1sxXTsKKyAgICAg
ICAgaWYgKHByb3RvY29sc1ZhbHVlLT5Jc0FycmF5KCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IHByb3RvY29sczsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHByb3Rv
Y29sc0FycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QocHJvdG9jb2xzVmFsdWUpOwor
ICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHByb3RvY29sc0FycmF5LT5MZW5n
dGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoUHJvdG9j
b2w7CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBwcm90b2NvbCA9IHBy
b3RvY29sc0FycmF5LT5HZXQodjg6OkludDMyOjpOZXcoaSkpLT5Ub1N0cmluZygpOworICAgICAg
ICAgICAgICAgIGlmICh0cnlDYXRjaFByb3RvY29sLkhhc0NhdWdodCgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih0cnlDYXRjaFByb3RvY29sLkV4Y2VwdGlvbigpKTsK
KyAgICAgICAgICAgICAgICBwcm90b2NvbHMuYXBwZW5kKHRvV2ViQ29yZVN0cmluZyhwcm90b2Nv
bCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2ViU29ja2V0LT5jb25uZWN0KHVybCwg
cHJvdG9jb2xzLCBlYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2ODo6VHJ5Q2F0
Y2ggdHJ5Q2F0Y2hQcm90b2NvbDsKKyAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4g
cHJvdG9jb2wgPSBwcm90b2NvbHNWYWx1ZS0+VG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICh0
cnlDYXRjaFByb3RvY29sLkhhc0NhdWdodCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKHRyeUNhdGNoUHJvdG9jb2wuRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgd2ViU29j
a2V0LT5jb25uZWN0KHVybCwgdG9XZWJDb3JlU3RyaW5nKHByb3RvY29sKSwgZWMpOworICAgICAg
ICB9CiAgICAgfQogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IGE3YTExZTM0ZTcwNTc2
NmZiNDI0ODA4NGIwYzBiZTBjY2MxYWY2ZmYuLjJlMDcyMWFkNTgzMGM0OTQ3MTAyMTNjNTM3OTlj
Y2RlMTM5YmFmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29j
a2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKQEAg
LTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbC5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CkBAIC01NSw4ICs1NiwzMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkUHJvdG9jb2xDaGFyYWN0ZXIoVUNoYXIgY2hhcmFj
dGVyKQoreworICAgIC8vIEh5YmktMTAgc2F5cyAiKFN1YnByb3RvY29sIHN0cmluZyBtdXN0IGNv
bnNpc3Qgb2YpIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrMDAyMSB0byBVKzAwN0Ugbm90IGlu
Y2x1ZGluZworICAgIC8vIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW4gW1JGQzI2
MTZdLiIKKyAgICBjb25zdCBVQ2hhciBtaW5pbXVtUHJvdG9jb2xDaGFyYWN0ZXIgPSAnISc7IC8v
IFUrMDAyMS4KKyAgICBjb25zdCBVQ2hhciBtYXhpbXVtUHJvdG9jb2xDaGFyYWN0ZXIgPSAnfic7
IC8vIFUrMDA3RS4KKyAgICByZXR1cm4gY2hhcmFjdGVyID49IG1pbmltdW1Qcm90b2NvbENoYXJh
Y3RlciAmJiBjaGFyYWN0ZXIgPD0gbWF4aW11bVByb3RvY29sQ2hhcmFjdGVyCisgICAgICAgICYm
IGNoYXJhY3RlciAhPSAnIicgJiYgY2hhcmFjdGVyICE9ICcoJyAmJiBjaGFyYWN0ZXIgIT0gJykn
ICYmIGNoYXJhY3RlciAhPSAnLCcgJiYgY2hhcmFjdGVyICE9ICcvJworICAgICAgICAmJiAhKGNo
YXJhY3RlciA+PSAnOicgJiYgY2hhcmFjdGVyIDw9ICdAJykgLy8gVSswMDNBIC0gVSswMDQwICgn
OicsICc7JywgJzwnLCAnPScsICc+JywgJz8nLCAnQCcpLgorICAgICAgICAmJiAhKGNoYXJhY3Rl
ciA+PSAnWycgJiYgY2hhcmFjdGVyIDw9ICddJykgLy8gVSswMDVCIC0gVSswMDVEICgnWycsICdc
XCcsICddJykuCisgICAgICAgICYmIGNoYXJhY3RlciAhPSAneycgJiYgY2hhcmFjdGVyICE9ICd9
JzsKK30KKwogc3RhdGljIGJvb2wgaXNWYWxpZFByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
cHJvdG9jb2wpCiB7CisgICAgaWYgKHByb3RvY29sLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdG9jb2wubGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbENoYXJhY3Rlcihwcm90b2NvbFtpXSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCBpc1ZhbGlkUHJvdG9jb2xTdHJpbmdIaXhpZTc2KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2wpCit7CiAgICAgaWYgKHByb3RvY29sLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgpKQpAQCAtODMsNiArMTA4LDE3IEBAIHN0
YXRpYyBTdHJpbmcgZW5jb2RlUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiBwcm90b2NvbCkK
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCitzdGF0aWMgU3RyaW5nIGpvaW5T
dHJpbmdzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJpbmdzLCBjb25zdCBjaGFyKiBzZXBhcmF0
b3IpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RyaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmlu
Z3NbaV0pOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCiBzdGF0
aWMgYm9vbCB3ZWJTb2NrZXRzQXZhaWxhYmxlID0gZmFsc2U7CiAKIHZvaWQgV2ViU29ja2V0Ojpz
ZXRJc0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKQEAgLTExMCwxNCArMTQ2LDIxIEBAIFdlYlNv
Y2tldDo6fldlYlNvY2tldCgpCiAKIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmlu
ZyYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBjb25uZWN0KHVybCwgU3RyaW5nKCks
IGVjKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBwcm90b2NvbHM7CisgICAgY29ubmVjdCh1cmwsIHBy
b3RvY29scywgZWMpOwogfQogCiB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
TE9HKE5ldHdvcmssICJXZWJTb2NrZXQgJXAgY29ubmVjdCB0byAlcyBwcm90b2NvbD0lcyIsIHRo
aXMsIHVybC51dGY4KCkuZGF0YSgpLCBwcm90b2NvbC51dGY4KCkuZGF0YSgpKTsKKyAgICBWZWN0
b3I8U3RyaW5nPiBwcm90b2NvbHM7CisgICAgcHJvdG9jb2xzLmFwcGVuZChwcm90b2NvbCk7Cisg
ICAgY29ubmVjdCh1cmwsIHByb3RvY29scywgZWMpOworfQorCit2b2lkIFdlYlNvY2tldDo6Y29u
bmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByb3RvY29scywg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXQgJXAgY29u
bmVjdCB0byAlcyIsIHRoaXMsIHVybC51dGY4KCkuZGF0YSgpKTsKICAgICBtX3VybCA9IEtVUkwo
S1VSTCgpLCB1cmwpOwotICAgIG1fcHJvdG9jb2wgPSBwcm90b2NvbDsKIAogICAgIGlmICghbV91
cmwuaXNWYWxpZCgpKSB7CiAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkTWVz
c2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
IkludmFsaWQgdXJsIGZvciBXZWJTb2NrZXQgIiArIG1fdXJsLnN0cmluZygpLCAwLCBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIDApOwpAQCAt
MTM4LDEyICsxODEsNiBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZQogICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFpc1ZhbGlkUHJvdG9j
b2xTdHJpbmcobV9wcm90b2NvbCkpIHsKLSAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCAiV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnIiArIGVuY29kZVByb3RvY29s
U3RyaW5nKG1fcHJvdG9jb2wpICsgIiciLCAwLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIDApOwotICAgICAgICBtX3N0YXRlID0gQ0xPU0VE
OwotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAg
aWYgKCFwb3J0QWxsb3dlZChtX3VybCkpIHsKICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVz
c2FnZUxldmVsLCAiV2ViU29ja2V0IHBvcnQgIiArIFN0cmluZzo6bnVtYmVyKG1fdXJsLnBvcnQo
KSkgKyAiIGJsb2NrZWQiLCAwLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCksIDApOwogICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwpAQCAtMTUy
LDkgKzE4OSw1MSBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZQogICAgIH0KIAogICAgIG1fY2hh
bm5lbCA9IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCB0aGlzKTsKLSAgICAvLyBGSVhNRTogR2V0IHRoZSB2YWx1ZSBvZiBtX2NoYW5u
ZWwtPnVzZUhpeGllNzZQcm90b2NvbCgpIGFuZCB2YWxpZGF0ZSB0aGUgdmFsdWUgb2Ygc3VicHJv
dG9jb2wKLSAgICAvLyBpZiBoeWJpLTEwIHByb3RvY29sIGlzIHVzZWQuCi0gICAgbV9jaGFubmVs
LT5jb25uZWN0KG1fdXJsLCBtX3Byb3RvY29sKTsKKworICAgIFN0cmluZyBwcm90b2NvbFN0cmlu
ZzsKKyAgICBpZiAobV9jaGFubmVsLT51c2VIaXhpZTc2UHJvdG9jb2woKSkgeworICAgICAgICBp
ZiAoIXByb3RvY29scy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIEVtdWxhdGUgSmF2YVNj
cmlwdCdzIEFycmF5LnRvU3RyaW5nKCkgYmVoYXZpb3IuCisgICAgICAgICAgICBwcm90b2NvbFN0
cmluZyA9IGpvaW5TdHJpbmdzKHByb3RvY29scywgIiwiKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIWlzVmFsaWRQcm90b2NvbFN0cmluZ0hpeGllNzYocHJvdG9jb2xTdHJpbmcpKSB7CisgICAg
ICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291
cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJXcm9uZyBwcm90b2NvbCBm
b3IgV2ViU29ja2V0ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2xTdHJpbmcpICsg
IiciLCAwLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCksIDApOworICAgICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICAgICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGRpc2FncmVlbWVudCBhYm91dCByZXN0
cmljdGlvbiBvZiBzdWJwcm90b2NvbHMgYmV0d2VlbiBXZWJTb2NrZXQgQVBJIGFuZCBoeWJpLTEw
IHByb3RvY29sCisgICAgICAgIC8vIGRyYWZ0LiBUaGUgZm9ybWVyIHNpbXBseSBzYXlzICJvbmx5
IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrMDAyMSB0byBVKzAwN0UgYXJlIGFsbG93ZWQsIiB3
aGlsZSB0aGUgbGF0dGVyCisgICAgICAgIC8vIGltcG9zZXMgYSBzdHJpY3RlciBydWxlOiAidGhl
IGVsZW1lbnRzIE1VU1QgYmUgbm9uLWVtcHR5IHN0cmluZ3Mgd2l0aCBjaGFyYWN0ZXJzIGFzIGRl
ZmluZWQgaW4gW1JGQzI2MTZdLAorICAgICAgICAvLyBhbmQgTVVTVCBhbGwgYmUgdW5pcXVlIHN0
cmluZ3MuIgorICAgICAgICAvLworICAgICAgICAvLyBIZXJlLCB3ZSB0aHJvdyBTWU5UQVhfRVJS
IGlmIHRoZSBnaXZlbiBwcm90b2NvbHMgZG8gbm90IG1lZXQgdGhlIGxhdHRlciBjcml0ZXJpYS4g
VGhpcyBiZWhhdmlvciBkb2VzIG5vdAorICAgICAgICAvLyBjb21wbHkgd2l0aCBXZWJTb2NrZXQg
QVBJIHNwZWNpZmljYXRpb24sIGJ1dCBpdCBzZWVtcyB0byBiZSB0aGUgb25seSByZWFzb25hYmxl
IHdheSB0byBoYW5kbGUgdGhpcyBjb25mbGljdC4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwcm90b2NvbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghaXNWYWxpZFBy
b3RvY29sU3RyaW5nKHByb3RvY29sc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICciICsg
ZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2xzW2ldKSArICInIiwgMCwgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCAwKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOworICAgICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgSGFzaFNldDxTdHJpbmc+IHZpc2l0ZWQ7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcHJvdG9jb2xzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAodmlzaXRlZC5j
b250YWlucyhwcm90b2NvbHNbaV0pKSB7CisgICAgICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVy
cm9yTWVzc2FnZUxldmVsLCAiV2ViU29ja2V0IHByb3RvY29scyBjb250YWluIGR1cGxpY2F0ZXM6
ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2xzW2ldKSArICInIiwgMCwgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCAwKTsKKyAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOworICAgICAgICAgICAgICAgIGVjID0gU1lO
VEFYX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2aXNpdGVkLmFkZChwcm90b2NvbHNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFwcm90b2NvbHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcHJvdG9jb2xTdHJpbmcgPSBqb2lu
U3RyaW5ncyhwcm90b2NvbHMsICIsICIpOworICAgIH0KKworICAgIG1fY2hhbm5lbC0+Y29ubmVj
dChtX3VybCwgcHJvdG9jb2xTdHJpbmcpOwogICAgIEFjdGl2ZURPTU9iamVjdDo6c2V0UGVuZGlu
Z0FjdGl2aXR5KHRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5oIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaApp
bmRleCAxOTFiYzNmODg5NmQ3MDk1NTFhY2QxOWQyNmI3MzQ0MDViMjk0YjFjLi4xZmFiMzQ2ZDEx
MWIxOWY1NjFkYzUzNzRkMTQzOTdhMDYyZmVjMzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0LmgKQEAgLTY0LDYgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIHZvaWQgY29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgRXhjZXB0aW9uQ29kZSYpOwogICAg
ICAgICB2b2lkIGNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2wsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBjb25uZWN0KGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xzLCBFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYp
OwogCkBAIC0xMTAsNyArMTExLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0
YXRlIG1fc3RhdGU7CiAgICAgICAgIEtVUkwgbV91cmw7Ci0gICAgICAgIFN0cmluZyBtX3Byb3Rv
Y29sOwogICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAgICAgICAg
IHVuc2lnbmVkIGxvbmcgbV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2U7CiAgICAgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDAxNzNl
MjkwYmYyMjVkYWJmYzFkMTRlZjg0NTQyY2Y5OGFlYTA1N2QuLjNkOWM0YTkxNDBmOWI1NDE4Njkx
ZmFmYzNkYzhhMDJkM2VlMzAyMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMTg0LDcgKzE4NCw4IEBAIHZvaWQgV2ViU29ja2V0Q2hh
bm5lbDo6ZGlzY29ubmVjdCgpCiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVw
IGRpc2Nvbm5lY3QiLCB0aGlzKTsKICAgICBpZiAobV9pZGVudGlmaWVyICYmIG1fY29udGV4dCkK
ICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldChtX2Nv
bnRleHQsIG1faWRlbnRpZmllcik7Ci0gICAgbV9oYW5kc2hha2UtPmNsZWFyU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgIGlmIChtX2hhbmRzaGFrZSkKKyAgICAgICAgbV9oYW5kc2hha2Ut
PmNsZWFyU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIG1fY2xpZW50ID0gMDsKICAgICBt
X2NvbnRleHQgPSAwOwogICAgIGlmIChtX2hhbmRsZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>