<?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>84555</bug_id>
          
          <creation_ts>2012-04-22 16:55:53 -0700</creation_ts>
          <short_desc>Add support for the Blob constructor</short_desc>
          <delta_ts>2012-04-29 13:08:04 -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>DOM</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>http://dev.w3.org/2006/webapi/FileAPI/#constructorBlob</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>84036</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ericu</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jianli</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>Ms2ger</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>607399</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-22 16:55:53 -0700</bug_when>
    <thetext>The File API spec has been updated to include a constructor for Blob (http://dev.w3.org/2006/webapi/FileAPI/#constructorBlob).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607401</commentid>
    <comment_count>1</comment_count>
      <attachid>138279</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-22 17:02:37 -0700</bug_when>
    <thetext>Created attachment 138279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607402</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-22 17:03:46 -0700</bug_when>
    <thetext>The attached patch implements the constructor for JSC, but not for V8.  I am not set up to do that, so ideally someone from the V8 side could fill in that bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607403</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-22 17:04:35 -0700</bug_when>
    <thetext>Attachment 138279 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:62:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 2 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607405</commentid>
    <comment_count>4</comment_count>
      <attachid>138279</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-04-22 17:22:23 -0700</bug_when>
    <thetext>Comment on attachment 138279
Patch

Attachment 138279 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12469716</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607540</commentid>
    <comment_count>5</comment_count>
      <attachid>138307</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-04-23 01:24:13 -0700</bug_when>
    <thetext>Created attachment 138307
Filled in the V8 code

Added constructor code for V8 based on Sam&apos;s patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607553</commentid>
    <comment_count>6</comment_count>
      <attachid>138307</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 01:55:00 -0700</bug_when>
    <thetext>Comment on attachment 138307
Filled in the V8 code

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

Just commented on binding code.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:69
&gt; +    if (!exec-&gt;argumentCount())
&gt; +        return throwVMError(exec, createSyntaxError(exec, &quot;Not enough arguments&quot;));

This should be createTypeError().

Also please move this argument check to the head of this method.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:84
&gt; +        if (!blobPropertyBagValue.isUndefinedOrNull()) {

Maybe this should be &apos;blobPropertyBagValue.isObject()&apos;?

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:89
&gt; +            // Create the dictionary wrapper from the initializer object.
&gt; +            JSDictionary dictionary(exec, blobPropertyBagObject);

Please use Dictionary instead of JSDictionary. We are going to remove direct usages of JSDictionary.

exec-&gt;HadExcepton() check please.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:92
&gt; +            if (!dictionary.tryGetProperty(&quot;type&quot;, type))

You might want to use dictionary.get().

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:98
&gt; +            if (exec-&gt;hadException())
&gt; +                return JSValue::encode(jsUndefined());

Remove this.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:68
&gt; +        return throwError(&quot;Not enough arguments&quot;, V8Proxy::SyntaxError);

This should be V8Proxy::TypeError.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:78
&gt; +    v8::Local&lt;v8::Array&gt; blobParts = v8::Local&lt;v8::Array&gt;::Cast(firstArg);

You might want to use EXCEPTION_BLOCK here.

Just an out-of-curiosity question: Is there any reason to use v8::Local&lt;*&gt; instead of v8::Handle&lt;*&gt;?

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:83
&gt; +    if (args.Length() &gt; 1 &amp;&amp; !isUndefinedOrNull(args[1]) &amp;&amp; args[1]-&gt;IsObject()) {

&apos;!isUndefinedOrNull(args[1])&apos; would not be necessary. If args[1] is undefined or null, &apos;args[1]-&gt;IsObject()&apos; will return false.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:85
&gt; +        v8::Local&lt;v8::Value&gt; v8Type = object-&gt;Get(v8::String::New(&quot;type&quot;));

Could you use Dictionary, just like JSC binding code?

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:86
&gt; +        if (!v8Type.IsEmpty() &amp;&amp; !isUndefinedOrNull(v8Type)) {

I am not sure if we should check &apos;!isUndefinedOrNull(v8Type)&apos;. Is this speced?

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:91
&gt; +        if (!v8Endings.IsEmpty() &amp;&amp; !isUndefinedOrNull(v8Endings)) {

Ditto.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:105
&gt; +        v8::Local&lt;v8::Value&gt; item = blobParts-&gt;Get(v8::Int32::New(i));

You might want to use v8::Uint32::New(i).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607596</commentid>
    <comment_count>7</comment_count>
      <attachid>138324</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-04-23 04:24:54 -0700</bug_when>
    <thetext>Created attachment 138324
new patch with v8 code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607603</commentid>
    <comment_count>8</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-04-23 04:54:29 -0700</bug_when>
    <thetext>Thanks, I&apos;ve updated the binding code.

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

&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:69
&gt;&gt; +        return throwVMError(exec, createSyntaxError(exec, &quot;Not enough arguments&quot;));
&gt; 
&gt; This should be createTypeError().
&gt; 
&gt; Also please move this argument check to the head of this method.

Done.

&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:84
&gt;&gt; +        if (!blobPropertyBagValue.isUndefinedOrNull()) {
&gt; 
&gt; Maybe this should be &apos;blobPropertyBagValue.isObject()&apos;?

Done.

&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:89
&gt;&gt; +            JSDictionary dictionary(exec, blobPropertyBagObject);
&gt; 
&gt; Please use Dictionary instead of JSDictionary. We are going to remove direct usages of JSDictionary.
&gt; 
&gt; exec-&gt;HadExcepton() check please.

Done.

&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:92
&gt;&gt; +            if (!dictionary.tryGetProperty(&quot;type&quot;, type))
&gt; 
&gt; You might want to use dictionary.get().

Done.

&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:98
&gt;&gt; +                return JSValue::encode(jsUndefined());
&gt; 
&gt; Remove this.

Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:68
&gt;&gt; +        return throwError(&quot;Not enough arguments&quot;, V8Proxy::SyntaxError);
&gt; 
&gt; This should be V8Proxy::TypeError.

Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:78
&gt;&gt; +    v8::Local&lt;v8::Array&gt; blobParts = v8::Local&lt;v8::Array&gt;::Cast(firstArg);
&gt; 
&gt; You might want to use EXCEPTION_BLOCK here.
&gt; 
&gt; Just an out-of-curiosity question: Is there any reason to use v8::Local&lt;*&gt; instead of v8::Handle&lt;*&gt;?

It looked there objects could be simply stack allocated since they&apos;re only used within this function, but I&apos;m not very familiar with the v8 conventions and I&apos;d follow if you have recommendations.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:83
&gt;&gt; +    if (args.Length() &gt; 1 &amp;&amp; !isUndefinedOrNull(args[1]) &amp;&amp; args[1]-&gt;IsObject()) {
&gt; 
&gt; &apos;!isUndefinedOrNull(args[1])&apos; would not be necessary. If args[1] is undefined or null, &apos;args[1]-&gt;IsObject()&apos; will return false.

Sounds like true.  Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:85
&gt;&gt; +        v8::Local&lt;v8::Value&gt; v8Type = object-&gt;Get(v8::String::New(&quot;type&quot;));
&gt; 
&gt; Could you use Dictionary, just like JSC binding code?

Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:86
&gt;&gt; +        if (!v8Type.IsEmpty() &amp;&amp; !isUndefinedOrNull(v8Type)) {
&gt; 
&gt; I am not sure if we should check &apos;!isUndefinedOrNull(v8Type)&apos;. Is this speced?

Likely not. (Removed this code anyway)

&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:91
&gt;&gt; +        if (!v8Endings.IsEmpty() &amp;&amp; !isUndefinedOrNull(v8Endings)) {
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:105
&gt;&gt; +        v8::Local&lt;v8::Value&gt; item = blobParts-&gt;Get(v8::Int32::New(i));
&gt; 
&gt; You might want to use v8::Uint32::New(i).

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607614</commentid>
    <comment_count>9</comment_count>
      <attachid>138324</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-04-23 05:39:42 -0700</bug_when>
    <thetext>Comment on attachment 138324
new patch with v8 code

Attachment 138324 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12477759</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607629</commentid>
    <comment_count>10</comment_count>
      <attachid>138331</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-04-23 06:23:51 -0700</bug_when>
    <thetext>Created attachment 138331
new patch with v8 code

efl build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607715</commentid>
    <comment_count>11</comment_count>
      <attachid>138331</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 08:51:21 -0700</bug_when>
    <thetext>Comment on attachment 138331
new patch with v8 code

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

r+ for the binding part an the IDL part. I am not familiar with the blob test cases though.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:76
&gt; +    unsigned length = array-&gt;length();

Nit: Shall we move this to just before &apos;for (unsigned i = 0; i &lt; length; ++i)&apos;?

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:120
&gt; +                return JSValue::encode(JSValue());

Nit: JSValue() =&gt; jsUndefined(). Both are OK but let&apos;s make it consistent in the same method.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:99
&gt; +    for (uint32_t i = 0; i &lt; blobParts-&gt;Length(); ++i) {

Nit: uint32_t =&gt; unsinged. Let&apos;s make it consistent between JSC and V8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607721</commentid>
    <comment_count>12</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 08:55:38 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Just an out-of-curiosity question: Is there any reason to use v8::Local&lt;*&gt; instead of v8::Handle&lt;*&gt;?
&gt; 
&gt; It looked there objects could be simply stack allocated since they&apos;re only used within this function, but I&apos;m not very familiar with the v8 conventions and I&apos;d follow if you have recommendations.

Both are OK. Handle is just a base class of Local and Persistent. We often use Handle for these cases since we can pass the variable around without considering whether it is Local or Persistent. I was just wondering it since you were mixing Handle and Local in your first patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608007</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-23 14:08:11 -0700</bug_when>
    <thetext>At least my part, was not ready to be reviewed ( I am pretty sure I didn&apos;t mark it r?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608009</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-23 14:12:23 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 138307 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138307&amp;action=review
&gt; 
&gt; Just commented on binding code.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:69
&gt; &gt; +    if (!exec-&gt;argumentCount())
&gt; &gt; +        return throwVMError(exec, createSyntaxError(exec, &quot;Not enough arguments&quot;));
&gt; 
&gt; This should be createTypeError().
&gt; 
&gt; Also please move this argument check to the head of this method.
&gt; 

This is actually completely wrong. The spec says the Blob constructor should support being called with no arguments.

&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:84
&gt; &gt; +        if (!blobPropertyBagValue.isUndefinedOrNull()) {
&gt; 
&gt; Maybe this should be &apos;blobPropertyBagValue.isObject()&apos;?

This is the idiomatic way of doing this that I added when doing the EventInit work.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:89
&gt; &gt; +            // Create the dictionary wrapper from the initializer object.
&gt; &gt; +            JSDictionary dictionary(exec, blobPropertyBagObject);
&gt; 
&gt; Please use Dictionary instead of JSDictionary. We are going to remove direct usages of JSDictionary.

Why?  What is the benefit of the added abstraction. Why have both?

&gt; 
&gt; exec-&gt;HadExcepton() check please.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:92
&gt; &gt; +            if (!dictionary.tryGetProperty(&quot;type&quot;, type))
&gt; 
&gt; You might want to use dictionary.get().

Again, why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608011</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-23 14:13:12 -0700</bug_when>
    <thetext>In addition to no having completed writing my patch, I had not yet added the test case.  Please let me finish :D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608018</commentid>
    <comment_count>16</comment_count>
      <attachid>138307</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 14:23:01 -0700</bug_when>
    <thetext>Comment on attachment 138307
Filled in the V8 code

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

&gt;&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:84
&gt;&gt;&gt; +        if (!blobPropertyBagValue.isUndefinedOrNull()) {
&gt;&gt; 
&gt;&gt; Maybe this should be &apos;blobPropertyBagValue.isObject()&apos;?
&gt; 
&gt; This is the idiomatic way of doing this that I added when doing the EventInit work.

I am not sure why this is an idiomatic way, but if you want to use the idiom, you need to check exec-&gt;hadException() after toObject(). toObject() can throw exception. (In that sense, I think that isObject() check would be better.)

&gt;&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:89
&gt;&gt;&gt; +            JSDictionary dictionary(exec, blobPropertyBagObject);
&gt;&gt; 
&gt;&gt; Please use Dictionary instead of JSDictionary. We are going to remove direct usages of JSDictionary.
&gt;&gt; 
&gt;&gt; exec-&gt;HadExcepton() check please.
&gt; 
&gt; Why?  What is the benefit of the added abstraction. Why have both?

There has been work to make js/Dictionary.h and v8/Dictionary.h consistent, so that we can use .get() to access a dictionary in both bindings. (e.g. https://bugs.webkit.org/show_bug.cgi?id=80477) We do not want to have both, and we are killing the direct usage of JSDictionary.

&gt;&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:92
&gt;&gt;&gt; +            if (!dictionary.tryGetProperty(&quot;type&quot;, type))
&gt;&gt; 
&gt;&gt; You might want to use dictionary.get().
&gt; 
&gt; Again, why?

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608035</commentid>
    <comment_count>17</comment_count>
      <attachid>138331</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-04-23 14:46:47 -0700</bug_when>
    <thetext>Comment on attachment 138331
new patch with v8 code

r- if nothing else because Sam hasn&apos;t finished :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608131</commentid>
    <comment_count>18</comment_count>
      <attachid>138279</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 15:54:40 -0700</bug_when>
    <thetext>Comment on attachment 138279
Patch

Attachment 138279 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12517048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608315</commentid>
    <comment_count>19</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-04-23 19:38:59 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; In addition to no having completed writing my patch, I had not yet added the test case.  Please let me finish :D.

Sorry looks like I was too hasty!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608350</commentid>
    <comment_count>20</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-23 21:19:52 -0700</bug_when>
    <thetext>After talking to the spec editor, it looks like this part of the spec is still being ironed out.  Simon Pieters filed a bunch of really good bugs on it, all of which I agree with:
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=16721
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=16723
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=16724
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=16727
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=16729
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=16732
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=16746</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608357</commentid>
    <comment_count>21</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-23 21:41:19 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 138307 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138307&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:84
&gt; &gt;&gt;&gt; +        if (!blobPropertyBagValue.isUndefinedOrNull()) {
&gt; &gt;&gt; 
&gt; &gt;&gt; Maybe this should be &apos;blobPropertyBagValue.isObject()&apos;?
&gt; &gt; 
&gt; &gt; This is the idiomatic way of doing this that I added when doing the EventInit work.
&gt; 
&gt; I am not sure why this is an idiomatic way, but if you want to use the idiom, you need to check exec-&gt;hadException() after toObject(). toObject() can throw exception. (In that sense, I think that isObject() check would be better.)

I am pretty sure that if the value is not undefined or null, toObject can&apos;t throw.

&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:89
&gt; &gt;&gt;&gt; +            JSDictionary dictionary(exec, blobPropertyBagObject);
&gt; &gt;&gt; 
&gt; &gt;&gt; Please use Dictionary instead of JSDictionary. We are going to remove direct usages of JSDictionary.
&gt; &gt;&gt; 
&gt; &gt;&gt; exec-&gt;HadExcepton() check please.
&gt; &gt; 
&gt; &gt; Why?  What is the benefit of the added abstraction. Why have both?
&gt; 
&gt; There has been work to make js/Dictionary.h and v8/Dictionary.h consistent, so that we can use .get() to access a dictionary in both bindings. (e.g. https://bugs.webkit.org/show_bug.cgi?id=80477) We do not want to have both, and we are killing the direct usage of JSDictionary.

The Dictionary interface seems like an odd mish-mash of stuff.  Why does it include EventTarget related code?  This seems like a case where we are trying to share code between JSC and V8, and thus far that has been a faulty strategy.  ScriptObject and ScriptValue continue to be error prone objects to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608559</commentid>
    <comment_count>22</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 05:04:30 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; The Dictionary interface seems like an odd mish-mash of stuff.  Why does it include EventTarget related code?  This seems like a case where we are trying to share code between JSC and V8, and thus far that has been a faulty strategy.  ScriptObject and ScriptValue continue to be error prone objects to use.

Basically -- I am not intending to say something strong on JSC bindings, and just wanted to point out that there has been work to introduce js/Dictionary.h and align interfaces between js/Dictionary.h and v8/Dictoinary.h (which was originally v8/OptionsObject.{h,cpp}).

&gt; Why does it include EventTarget related code?

Do you mean &apos;class EventTarget&apos; in JSDictionary.h? It is needed for converting EventTarget value, i.e. convertValue(JSC::ExecState*, JSC::JSValue, RefPtr&lt;EventTarget&gt;&amp; result).

&gt; ScriptObject and ScriptValue continue to be error prone objects to use.

How is this concern related to the indirection of Dictionary interfaces? Basically Dictionary.get() just redirects to JSDictionary.tryGetProperty().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609125</commentid>
    <comment_count>23</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-24 15:15:08 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; The Dictionary interface seems like an odd mish-mash of stuff.  Why does it include EventTarget related code?  This seems like a case where we are trying to share code between JSC and V8, and thus far that has been a faulty strategy.  ScriptObject and ScriptValue continue to be error prone objects to use.
&gt; 
&gt; Basically -- I am not intending to say something strong on JSC bindings, and just wanted to point out that there has been work to introduce js/Dictionary.h and align interfaces between js/Dictionary.h and v8/Dictoinary.h (which was originally v8/OptionsObject.{h,cpp}).
&gt; 
&gt; &gt; Why does it include EventTarget related code?
&gt; 
&gt; Do you mean &apos;class EventTarget&apos; in JSDictionary.h? It is needed for converting EventTarget value, i.e. convertValue(JSC::ExecState*, JSC::JSValue, RefPtr&lt;EventTarget&gt;&amp; result).

Sorry, I meant the getEventListener() function. It seems out of place.  


&gt; &gt; ScriptObject and ScriptValue continue to be error prone objects to use.
&gt; 
&gt; How is this concern related to the indirection of Dictionary interfaces? Basically Dictionary.get() just redirects to JSDictionary.tryGetProperty().

The concern is with trying to create abstractions around the two JS engines.  In the past, it has not worked well.  Pieces were implemented for one, and not the other, and just lead to more trouble than it was worth.  It seems that is already the case here, with getWithUndefinedOrNullCheck() not being implemented for JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611199</commentid>
    <comment_count>24</comment_count>
      <attachid>139124</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-26 19:56:14 -0700</bug_when>
    <thetext>Created attachment 139124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611201</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-26 19:58:00 -0700</bug_when>
    <thetext>Attachment 139124 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:72:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 45 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611241</commentid>
    <comment_count>26</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-26 21:56:49 -0700</bug_when>
    <thetext>Ok, I think this is ready for review now.  I am happy with my test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611253</commentid>
    <comment_count>27</comment_count>
      <attachid>139124</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-04-26 22:35:15 -0700</bug_when>
    <thetext>Comment on attachment 139124
Patch

Attachment 139124 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12558104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611629</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-27 10:22:14 -0700</bug_when>
    <thetext>EFL build failure:


/mnt/eflews/git/webkit/Source/WebCore/bindings/js/JSBlobCustom.cpp: In static member function &apos;static void* WebCore::JSBlobConstructor::constructJSBlob(JSC::ExecState*)&apos;:
/mnt/eflews/git/webkit/Source/WebCore/bindings/js/JSBlobCustom.cpp:121: error: no matching function for call to &apos;WebCore::WebKitBlobBuilder::append(WTF::ArrayBuffer*)&apos;
/mnt/eflews/git/webkit/Source/WebCore/fileapi/WebKitBlobBuilder.h:49: note: candidates are: void WebCore::WebKitBlobBuilder::append(WebCore::Blob*)
/mnt/eflews/git/webkit/Source/WebCore/fileapi/WebKitBlobBuilder.h:50: note:                 void WebCore::WebKitBlobBuilder::append(const WTF::String&amp;, WebCore::ExceptionCode&amp;)
/mnt/eflews/git/webkit/Source/WebCore/fileapi/WebKitBlobBuilder.h:51: note:                 void WebCore::WebKitBlobBuilder::append(const WTF::String&amp;, const WTF::String&amp;, WebCore::ExceptionCode&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611656</commentid>
    <comment_count>29</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2012-04-27 10:39:52 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; EFL build failure:
&gt; 
&gt; /mnt/eflews/git/webkit/Source/WebCore/bindings/js/JSBlobCustom.cpp:121: error: no matching function for call to &apos;WebCore::WebKitBlobBuilder::append(WTF::ArrayBuffer*)&apos;

WebKitBlobBuilder::append(ArrayBuffer) is not enabled on all platforms.
Since BlobBuilder is anyway going to be deprecated probably we should just remove &apos;#if ENABLE(BLOB)&apos; around append(ArrayBuffer) in WebKitBlobBuilder.{h,cpp,idl}?
(And if we do so I&apos;d like the same conditional directive in V8BlobCustom.cpp to be removed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611659</commentid>
    <comment_count>30</comment_count>
      <attachid>139226</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-27 10:43:44 -0700</bug_when>
    <thetext>Created attachment 139226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611662</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-27 10:46:59 -0700</bug_when>
    <thetext>Attachment 139226 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:72:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 45 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611683</commentid>
    <comment_count>32</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-27 11:04:17 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; EFL build failure:
&gt; &gt; 
&gt; &gt; /mnt/eflews/git/webkit/Source/WebCore/bindings/js/JSBlobCustom.cpp:121: error: no matching function for call to &apos;WebCore::WebKitBlobBuilder::append(WTF::ArrayBuffer*)&apos;
&gt; 
&gt; WebKitBlobBuilder::append(ArrayBuffer) is not enabled on all platforms.
&gt; Since BlobBuilder is anyway going to be deprecated probably we should just remove &apos;#if ENABLE(BLOB)&apos; around append(ArrayBuffer) in WebKitBlobBuilder.{h,cpp,idl}?
&gt; (And if we do so I&apos;d like the same conditional directive in V8BlobCustom.cpp to be removed)

I just added the correct #ifdef for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611822</commentid>
    <comment_count>33</comment_count>
      <attachid>139226</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-04-27 13:16:01 -0700</bug_when>
    <thetext>Comment on attachment 139226
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611831</commentid>
    <comment_count>34</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-27 13:23:02 -0700</bug_when>
    <thetext>Committed r115484: &lt;http://trac.webkit.org/changeset/115484&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611833</commentid>
    <comment_count>35</comment_count>
      <attachid>139226</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-27 13:24:12 -0700</bug_when>
    <thetext>Comment on attachment 139226
Patch

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

Sorry for the late comments. I&apos;d be happy if you could land a follow-up patch.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:78
&gt; +    unsigned length = array-&gt;length();

Nit: Let&apos;s move this just before &apos;for (unsigned i = 0; i &lt; length; i++)&apos;.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:98
&gt; +            if (exec-&gt;hadException())
&gt; +                return JSValue::encode(jsUndefined());

Move this just below &apos;JSDictionary dictionary()&apos;.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:103
&gt; +            if (exec-&gt;hadException())
&gt; +                return JSValue::encode(jsUndefined());

Why is this check needed?

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:130
&gt; +                return JSValue::encode(JSValue());

Nit: JSValue() =&gt; jsUndefined(), just for consistency in the same method.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:65
&gt; +        return throwError(&quot;Blob constructor&apos;s associated frame is not available&quot;, V8Proxy::ReferenceError);

Please make this error message consistent with the JSC&apos;s one.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:69
&gt; +        return toV8(blob.get());

Please pass Isolate. &apos;toV8(blob.get(), args.GetIsolate())&apos;

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:81
&gt; +    if (args.Length() &gt; 1 &amp;&amp; args[1]-&gt;IsObject()) {

I wonder why you use IsObject() in V8 but isUndefinedOrNull() in JSC.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:82
&gt; +        Dictionary dictionary(args[1]);

Use EXCEPTION_BLOCK() here. This can throw.

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:116
&gt; +    return toV8(blob.get());

toV8(blob.get(), args.GetIsolate())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611864</commentid>
    <comment_count>36</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-04-27 13:51:12 -0700</bug_when>
    <thetext>This broke Chromium: http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac%20Builder/builds/23046/steps/compile/logs/stdio

Can haz rollout?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611883</commentid>
    <comment_count>37</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-04-27 14:06:51 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; This broke Chromium: http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac%20Builder/builds/23046/steps/compile/logs/stdio
&gt; 
&gt; Can haz rollout?

Haven&apos;t heard a response, reverted in http://trac.webkit.org/changeset/115491/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611893</commentid>
    <comment_count>38</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-27 14:18:31 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 139226 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=139226&amp;action=review
&gt; 
&gt; Sorry for the late comments. I&apos;d be happy if you could land a follow-up patch.

It&apos;s cool.  I got rolled out :D.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:78
&gt; &gt; +    unsigned length = array-&gt;length();
&gt; 
&gt; Nit: Let&apos;s move this just before &apos;for (unsigned i = 0; i &lt; length; i++)&apos;.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:98
&gt; &gt; +            if (exec-&gt;hadException())
&gt; &gt; +                return JSValue::encode(jsUndefined());
&gt; 
&gt; Move this just below &apos;JSDictionary dictionary()&apos;.

I don&apos;t follow. This is checking if the toString() in get() threw an exception.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:103
&gt; &gt; +            if (exec-&gt;hadException())
&gt; &gt; +                return JSValue::encode(jsUndefined());
&gt; 
&gt; Why is this check needed?

Same here.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:130
&gt; &gt; +                return JSValue::encode(JSValue());
&gt; 
&gt; Nit: JSValue() =&gt; jsUndefined(), just for consistency in the same method.

Ok.

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:65
&gt; &gt; +        return throwError(&quot;Blob constructor&apos;s associated frame is not available&quot;, V8Proxy::ReferenceError);
&gt; 
&gt; Please make this error message consistent with the JSC&apos;s one.

Ok.

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:69
&gt; &gt; +        return toV8(blob.get());
&gt; 
&gt; Please pass Isolate. &apos;toV8(blob.get(), args.GetIsolate())&apos;

Ok.

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:81
&gt; &gt; +    if (args.Length() &gt; 1 &amp;&amp; args[1]-&gt;IsObject()) {
&gt; 
&gt; I wonder why you use IsObject() in V8 but isUndefinedOrNull() in JSC.

I didn&apos;t write the V8 bindings.  It was provided for me.

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:82
&gt; &gt; +        Dictionary dictionary(args[1]);
&gt; 
&gt; Use EXCEPTION_BLOCK() here. This can throw.

What is the condition under which this throws?

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:116
&gt; &gt; +    return toV8(blob.get());
&gt; 
&gt; toV8(blob.get(), args.GetIsolate())

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611898</commentid>
    <comment_count>39</comment_count>
      <attachid>139226</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-27 14:25:47 -0700</bug_when>
    <thetext>Comment on attachment 139226
Patch

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

&gt;&gt;&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:98
&gt;&gt;&gt; +                return JSValue::encode(jsUndefined());
&gt;&gt; 
&gt;&gt; Move this just below &apos;JSDictionary dictionary()&apos;.
&gt; 
&gt; I don&apos;t follow. This is checking if the toString() in get() threw an exception.

Makes sense.

&gt;&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:81
&gt;&gt;&gt; +    if (args.Length() &gt; 1 &amp;&amp; args[1]-&gt;IsObject()) {
&gt;&gt; 
&gt;&gt; I wonder why you use IsObject() in V8 but isUndefinedOrNull() in JSC.
&gt; 
&gt; I didn&apos;t write the V8 bindings.  It was provided for me.

Actually I am not sure. As you commented in the JSC side, we are not sure if we should use isUndefinedOrNull() or isObject() in this case. This is already confusing in the Event constructor. Maybe we can fix the behavior in another patch.

&gt;&gt;&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:82
&gt;&gt;&gt; +        Dictionary dictionary(args[1]);
&gt;&gt; 
&gt;&gt; Use EXCEPTION_BLOCK() here. This can throw.
&gt; 
&gt; What is the condition under which this throws?

Sorry, you&apos;re right, this cannot throw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611902</commentid>
    <comment_count>40</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-27 14:31:40 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; &gt;&gt; I wonder why you use IsObject() in V8 but isUndefinedOrNull() in JSC.
&gt; &gt; 
&gt; &gt; I didn&apos;t write the V8 bindings.  It was provided for me.
&gt; 
&gt; Actually I am not sure. As you commented in the JSC side, we are not sure if we should use isUndefinedOrNull() or isObject() in this case. This is already confusing in the Event constructor. Maybe we can fix the behavior in another patch.

But I think that it is important to align the behavior between JSC and V8. Would you add the following tests and confirm the test results?

new Blob([&apos;hello&apos;], null);
new Blob([&apos;hello&apos;], undefined);
new Blob([&apos;hello&apos;], 123);
new Blob([&apos;hello&apos;], 123.4);
new Blob([&apos;hello&apos;], []);
new Blob([&apos;hello&apos;], true);
new Blob([&apos;hello&apos;], &quot;abc&quot;);
new Blob([&apos;hello&apos;], /abc/);
new Blob([&apos;hello&apos;], function () {});</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611914</commentid>
    <comment_count>41</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-27 14:43:08 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt; &gt;&gt; I wonder why you use IsObject() in V8 but isUndefinedOrNull() in JSC.
&gt; &gt; &gt; 
&gt; &gt; &gt; I didn&apos;t write the V8 bindings.  It was provided for me.
&gt; &gt; 
&gt; &gt; Actually I am not sure. As you commented in the JSC side, we are not sure if we should use isUndefinedOrNull() or isObject() in this case. This is already confusing in the Event constructor. Maybe we can fix the behavior in another patch.
&gt; 
&gt; But I think that it is important to align the behavior between JSC and V8. Would you add the following tests and confirm the test results?
&gt; 
&gt; new Blob([&apos;hello&apos;], null);
&gt; new Blob([&apos;hello&apos;], undefined);
&gt; new Blob([&apos;hello&apos;], 123);
&gt; new Blob([&apos;hello&apos;], 123.4);
&gt; new Blob([&apos;hello&apos;], []);
&gt; new Blob([&apos;hello&apos;], true);
&gt; new Blob([&apos;hello&apos;], &quot;abc&quot;);
&gt; new Blob([&apos;hello&apos;], /abc/);
&gt; new Blob([&apos;hello&apos;], function () {});

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611923</commentid>
    <comment_count>42</comment_count>
      <attachid>139283</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-27 14:58:14 -0700</bug_when>
    <thetext>Created attachment 139283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611926</commentid>
    <comment_count>43</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-27 15:00:19 -0700</bug_when>
    <thetext>Sam: Did you update blob-constructor-expected.txt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611927</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-27 15:01:29 -0700</bug_when>
    <thetext>Attachment 139283 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:76:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 45 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612195</commentid>
    <comment_count>45</comment_count>
    <who name="Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
    <bug_when>2012-04-28 00:46:54 -0700</bug_when>
    <thetext>There are a couple of WebIDL issues here, still.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:80
&gt; +    if (exec-&gt;argumentCount() &gt; 1) {

This should happen after converting the array elements.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:83
&gt; +        // FIXME: Should we throw if the blobPropertyBag is not an object?

Yes; a TypeError: &lt;http://dev.w3.org/2006/webapi/WebIDL/#es-dictionary&gt;.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:98
&gt; +            bool containsEndings = dictionary.get(&quot;endings&quot;, endings);

These properties should be got in lexicographic order; first endings and then type.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:104
&gt; +                    setDOMException(exec, INVALID_STATE_ERR);

Per &lt;https://www.w3.org/Bugs/Public/show_bug.cgi?id=16729&gt; (mentioned in the ChangeLog) and &lt;http://dev.w3.org/2006/webapi/WebIDL/#es-enumeration&gt;, this should be a TypeError.

&gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:123
&gt; +            blobBuilder-&gt;append(toArrayBuffer(item));

Is this the right condition?

&gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:56
&gt; +v8::Handle&lt;v8::Value&gt; V8Blob::constructorCallback(const v8::Arguments&amp; args)

Same issues here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612205</commentid>
    <comment_count>46</comment_count>
      <attachid>139283</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-28 01:33:43 -0700</bug_when>
    <thetext>Comment on attachment 139283
Patch

Attachment 139283 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12555550</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612333</commentid>
    <comment_count>47</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-28 15:25:02 -0700</bug_when>
    <thetext>Re-landed with suggested changes and hopeful buildfixes in http://trac.webkit.org/changeset/115582.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612334</commentid>
    <comment_count>48</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-28 15:26:13 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; There are a couple of WebIDL issues here, still.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:80
&gt; &gt; +    if (exec-&gt;argumentCount() &gt; 1) {
&gt; 
&gt; This should happen after converting the array elements.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:83
&gt; &gt; +        // FIXME: Should we throw if the blobPropertyBag is not an object?
&gt; 
&gt; Yes; a TypeError: &lt;http://dev.w3.org/2006/webapi/WebIDL/#es-dictionary&gt;.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:98
&gt; &gt; +            bool containsEndings = dictionary.get(&quot;endings&quot;, endings);
&gt; 
&gt; These properties should be got in lexicographic order; first endings and then type.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:104
&gt; &gt; +                    setDOMException(exec, INVALID_STATE_ERR);
&gt; 
&gt; Per &lt;https://www.w3.org/Bugs/Public/show_bug.cgi?id=16729&gt; (mentioned in the ChangeLog) and &lt;http://dev.w3.org/2006/webapi/WebIDL/#es-enumeration&gt;, this should be a TypeError.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:123
&gt; &gt; +            blobBuilder-&gt;append(toArrayBuffer(item));
&gt; 
&gt; Is this the right condition?
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/custom/V8BlobCustom.cpp:56
&gt; &gt; +v8::Handle&lt;v8::Value&gt; V8Blob::constructorCallback(const v8::Arguments&amp; args)
&gt; 
&gt; Same issues here.

I&apos;ll tackle these in a follow up patch.  Thanks for the review!!  (This is one reason I would love to see test cases go hand in hand with spec writing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612341</commentid>
    <comment_count>49</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-28 16:14:36 -0700</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:123
&gt; &gt; +            blobBuilder-&gt;append(toArrayBuffer(item));
&gt; 
&gt; Is this the right condition?

I am not sure what you are asking here.  Do you think we should use ArrayBufferView?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612342</commentid>
    <comment_count>50</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-28 16:21:03 -0700</bug_when>
    <thetext>Reopening to address a bit more feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612351</commentid>
    <comment_count>51</comment_count>
      <attachid>139379</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-28 17:21:06 -0700</bug_when>
    <thetext>Created attachment 139379
Patch addressing additional feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612353</commentid>
    <comment_count>52</comment_count>
      <attachid>139379</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-28 17:34:22 -0700</bug_when>
    <thetext>Comment on attachment 139379
Patch addressing additional feedback.

r+ from my side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612377</commentid>
    <comment_count>53</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-28 20:27:08 -0700</bug_when>
    <thetext>Ms2ger: Does it look good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612392</commentid>
    <comment_count>54</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-04-28 23:07:19 -0700</bug_when>
    <thetext>FYI: I updated the Qt expected files after this patch - http://trac.webkit.org/changeset/115592 and fixed a typo in fast/files/workers/inline-worker-via-blob-url.html: http://trac.webkit.org/changeset/115592/trunk/LayoutTests/fast/files/workers/inline-worker-via-blob-url.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612419</commentid>
    <comment_count>55</comment_count>
    <who name="Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
    <bug_when>2012-04-29 03:55:58 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (This is one reason I would love to see test cases go hand in hand with
&gt; spec writing).

Fair point; these edge cases aren&apos;t too important, though.

(In reply to comment #49)
&gt; &gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:123
&gt; &gt; &gt; +            blobBuilder-&gt;append(toArrayBuffer(item));
&gt; &gt; 
&gt; &gt; Is this the right condition?
&gt; 
&gt; I am not sure what you are asking here.  Do you think we should use ArrayBufferView?

Sorry, I thought more context would be quoted; I was wondering about #if ENABLE(BLOB), where I would have expected a check related to Typed Arrays.


The followup patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612447</commentid>
    <comment_count>56</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-04-29 12:31:37 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (In reply to comment #48)
&gt; &gt; (This is one reason I would love to see test cases go hand in hand with
&gt; &gt; spec writing).
&gt; 
&gt; Fair point; these edge cases aren&apos;t too important, though.
&gt; 

Well...

&gt; (In reply to comment #49)
&gt; &gt; &gt; &gt; Source/WebCore/bindings/js/JSBlobCustom.cpp:123
&gt; &gt; &gt; &gt; +            blobBuilder-&gt;append(toArrayBuffer(item));
&gt; &gt; &gt; 
&gt; &gt; &gt; Is this the right condition?
&gt; &gt; 
&gt; &gt; I am not sure what you are asking here.  Do you think we should use ArrayBufferView?
&gt; 
&gt; Sorry, I thought more context would be quoted; I was wondering about #if ENABLE(BLOB), where I would have expected a check related to Typed Arrays.
&gt; 
&gt; 
&gt; The followup patch looks good to me.

Yeah, the #ifdef is correct, just odd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612451</commentid>
    <comment_count>57</comment_count>
      <attachid>139379</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-29 13:07:55 -0700</bug_when>
    <thetext>Comment on attachment 139379
Patch addressing additional feedback.

Clearing flags on attachment: 139379

Committed r115599: &lt;http://trac.webkit.org/changeset/115599&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612452</commentid>
    <comment_count>58</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-29 13:08:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138279</attachid>
            <date>2012-04-22 17:02:37 -0700</date>
            <delta_ts>2012-04-26 19:56:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84555-20120422170335.patch</filename>
            <type>text/plain</type>
            <size>44432</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0ODM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVmYTI3YTNkMzExNDgz
YjcxYmY5Njc0ODk2NDhjOTVkNWFhNWU5My4uNDE3Njk2ZTk2N2RmNDQ0YmM3MDcwMGNhNzk5MjYw
Y2MyMjA2ZjFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTIyICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBC
bG9iIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDU1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQmxvYkNvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU0Jsb2IpOgorICAgICAgICBJbXBsZW1lbnQgYmxvYiBjb25zdHJ1Y3Rvci4KKworICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VjhCbG9iOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgQWRkIHN0dWIgZm9y
IGJsb2IgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuaWRsOgorICAgICAg
ICBBZGQgY29uc3RydWN0b3IgdG8gSURMLgorCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmlkbDoKKyAgICAgICAgQWRkIEJsb2IgY29uc3RydWN0b3IgdG8gdGhlIHdvcmtlciBnbG9i
YWwgb2JqZWN0LgorCiAyMDEyLTA0LTIwICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5j
b20+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBvcGFxdWUgY29udGVudCB0cmFuc2Zv
cm0gb3V0IG9mIFNraWEgY29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCbG9iQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxv
YkN1c3RvbS5jcHAKaW5kZXggMDQ5NDU2MDQzOGMzMzIyNmQxMDc5YzliMDhjZTNmMmViYWU4ZTAz
NS4uODI1NTgzMTNjNTZlMGNlMjlhYmYzZjk4OWJlMzY4MzExYzBjMmY2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCkBAIC0zMiw4ICszMiwxNSBAQAog
I2luY2x1ZGUgIkpTQmxvYi5oIgogCiAjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNs
dWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiSlNEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0
QmxvYkJ1aWxkZXIuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKQEAgLTUxLDQgKzU4LDc0IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJsb2IqIGJsb2IpCiAgICAgcmV0
dXJuIENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIEJsb2IsIGJsb2IpOwog
fQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTQmxvYkNvbnN0cnVjdG9yKiBq
c0NvbnN0cnVjdG9yID0ganNDYXN0PEpTQmxvYkNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkp
OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJCbG9iIGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CisKKyAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisK
KyAgICBKU1ZhbHVlIGZpcnN0QXJnID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFpc0pT
QXJyYXkoZmlyc3RBcmcpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yIGlzIG5v
dCBvZiB0eXBlIEFycmF5IikpOworCisgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KGZpcnN0
QXJnKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICBTdHJp
bmcgdHlwZTsKKyAgICBTdHJpbmcgZW5kaW5ncyA9ICJ0cmFuc3BhcmVudCI7CisKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICBKU1ZhbHVlIGJsb2JQcm9wZXJ0
eUJhZ1ZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisKKyAgICAgICAgaWYgKCFibG9iUHJvcGVy
dHlCYWdWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAvLyBHaXZlbiB0
aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVsZCBhbiBvYmplY3QuCisgICAgICAg
ICAgICBKU09iamVjdCogYmxvYlByb3BlcnR5QmFnT2JqZWN0ID0gYmxvYlByb3BlcnR5QmFnVmFs
dWUudG9PYmplY3QoZXhlYyk7CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFy
eSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KKyAgICAgICAgICAgIEpTRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIGJsb2JQcm9wZXJ0eUJhZ09iamVjdCk7CisKKyAgICAg
ICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSB0eXBlIHByb3BlcnR5LgorICAgICAgICAgICAg
aWYgKCFkaWN0aW9uYXJ5LnRyeUdldFByb3BlcnR5KCJ0eXBlIiwgdHlwZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICAg
ICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIGVuZGluZ3MgcHJvcGVydHkgYW5kIHZhbGlkYXRlIGl0
LgorICAgICAgICAgICAgYm9vbCBjb250YWluc0VuZGluZ3MgPSBkaWN0aW9uYXJ5LmdldCgiZW5k
aW5ncyIsIGVuZGluZ3MpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisK
KyAgICAgICAgICAgIGlmIChjb250YWluc0VuZGluZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZW5kaW5ncyAhPSAidHJhbnNwYXJlbnQiICYmIGVuZGluZ3MgIT0gIm5hdGl2ZSIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOVkFMSURfU1RBVEVfRVJSKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBBU1NFUlQoZW5kaW5ncyA9PSAidHJhbnNwYXJlbnQiIHx8IGVuZGluZ3MgPT0gIm5hdGl2
ZSIpOworCisgICAgLy8gRklYTUU6IHRoaXMgd291bGQgYmUgYmV0dGVyIGlmIHRoZSBXZWJLaXRC
bG9iQnVpbGRlciB3ZXJlIGEgc3RhY2sgb2JqZWN0IHRvIGF2b2lkIHRoZSBhbGxvY2F0aW9uLgor
ICAgIFJlZlB0cjxXZWJLaXRCbG9iQnVpbGRlcj4gYmxvYkJ1aWxkZXIgPSBXZWJLaXRCbG9iQnVp
bGRlcjo6Y3JlYXRlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CisgICAgICAgIEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAg
aWYgKGl0ZW0uaW5oZXJpdHMoJkpTQXJyYXlCdWZmZXI6OnNfaW5mbykpCisgICAgICAgICAgICBi
bG9iQnVpbGRlci0+YXBwZW5kKHRvQXJyYXlCdWZmZXIoaXRlbSkpOworICAgICAgICBlbHNlIGlm
IChpdGVtLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpCisgICAgICAgICAgICBibG9iQnVpbGRl
ci0+YXBwZW5kKHRvQmxvYihpdGVtKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3Ry
aW5nIHN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhpdGVtLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICAgICAgYmxv
YkJ1aWxkZXItPmFwcGVuZChzdHJpbmcsIGVuZGluZ3MsIEFTU0VSVF9OT19FWENFUFRJT04pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBibG9iQnVpbGRlci0+
Z2V0QmxvYih0eXBlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKENSRUFURV9ET01fV1JB
UFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgQmxvYiwgYmxvYi5nZXQo
KSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCmluZGV4IDY4NTM1NzhlOTI3YTdl
OTIzYTMwYjRkNzE2YWMyZWM4YzM3NGZjMDEuLjRlZjRiYzJlNjliYTM1YzMwZjc3MGRjMWM0YzQ0
NTc3OGRmYjU2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEJsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEJsb2JDdXN0b20uY3BwCkBAIC00OSw0ICs0OSwyNiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChCbG9iKiBpbXBsKQogICAgIHJldHVybiBWOEJsb2I6OndyYXAoaW1wbCk7CiB9CiAK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEJsb2I6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5CbG9iLkNvbnN0cnVj
dG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMg
YSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgaWYgKENvbnN0cnVjdG9y
TW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQor
ICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgpID09
IDApCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4
UHJveHk6OlN5bnRheEVycm9yKTsKKworICAgIC8vIEdldCB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBj
b250ZXh0LgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBnZXRTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigiQmxvYiBjb25zdHJ1Y3RvcidzIGFzc29jaWF0ZWQgZnJhbWUgaXMgbm90IGF2YWls
YWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhlIEJsb2IgY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRocm93RXJyb3IoIkJsb2IgY29u
c3RydXRvciBub3QgaW1wbGVtZW50ZWQiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
QmxvYi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaWRsCmluZGV4IDI5YzUxNDFk
MjZjNDNiMDAxNGE1OGM0YzhiMDdmMWQ1MzJlNmNlYTMuLjZiN2U1OWQyMmY5NzRlNzNkZTA3MTZi
NGMzODc0YmIzOGM2MDNjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxv
Yi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmlkbApAQCAtMzMsNyArMzMs
OSBAQCBtb2R1bGUgaHRtbCB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgSlNHZW5lcmF0ZUlz
UmVhY2hhYmxlPUltcGwsCiAgICAgICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgICAgIEpTTm9T
dGF0aWNUYWJsZXMKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcywKKyAgICAgICAgQ3VzdG9tQ29u
c3RydWN0b3IsCisgICAgICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycz0yCiAgICAgXSBCbG9iIHsK
ICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmlkbAppbmRleCBiZTllNmMwMDBiOGI0NzYxM2RhYzc4YTNkZjBk
OGQxNzA1MzA5ZjZlLi41NWIzYTQwNDI0YTdhMWEwYjVmZjMzODZlYTRhMmMyMmI3Njg4NjEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTg0LDYgKzg0LDcg
QEAgbW9kdWxlIHRocmVhZHMgewogCiAjaWYgZGVmaW5lZChFTkFCTEVfQkxPQikgJiYgRU5BQkxF
X0JMT0IKICAgICAgICAgYXR0cmlidXRlIFdlYktpdEJsb2JCdWlsZGVyQ29uc3RydWN0b3IgV2Vi
S2l0QmxvYkJ1aWxkZXI7CisgICAgICAgIGF0dHJpYnV0ZSBCbG9iQ29uc3RydWN0b3IgQmxvYjsK
ICAgICAgICAgYXR0cmlidXRlIEZpbGVSZWFkZXJDb25zdHJ1Y3RvciBGaWxlUmVhZGVyOwogICAg
ICAgICBhdHRyaWJ1dGUgRmlsZVJlYWRlclN5bmNDb25zdHJ1Y3RvciBGaWxlUmVhZGVyU3luYzsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDIzZmRhYzFjOGEwYzE4NzRjZjhmN2RiODhmNmVkYWY3MjQwYTFmZmQu
LjcwNzYyNjQ4MWQyZjk2ZDlhYmIyODllOGMzNTEyYzQwMGM3NDNlZGQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1MSBAQAorMjAxMi0wNC0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgQmxvYiBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ1NTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggdGVzdHMgdGhhdCB3ZXJlIG5v
dCBkaXJlY3RseSB0ZXN0aW5nIEJsb2JCdWlsZGVyIG92ZXIgdG8KKyAgICAgICAgdXNpbmcgdGhl
IEJsb2IgY29uc3RydWN0b3IsIHRvIGdldCB0ZXN0IGNvdmVyYWdlIG9mIHN0YW5kYXJkIHdheQor
ICAgICAgICBjb25zdHJ1Y3RpbmcgYmxvYnMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9IVE1MQW5j
aG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQtdW5zZXQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Rv
bS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQuaHRtbDoKKyAgICAgICAgKiBmYXN0
L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbDoKKyAgICAg
ICAgKiBmYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC5odG1sOgor
ICAgICAgICAqIGZhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbDoKKyAgICAgICAgKiBm
YXN0L2ZpbGVzL2Jsb2ItYnVpbGRlci1jcmFzaC1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAg
ICAgICogZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2guaHRtbDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBmYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0
L2ZpbGVzL2Jsb2Itc2xpY2UtdGVzdC5odG1sOgorICAgICAgICAqIGZhc3QvZmlsZXMvZmlsZS1y
ZWFkZXItZmZmZC5odG1sOgorICAgICAgICAqIGZhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVu
dHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWJsb2ItdGVzdC1j
YXNlcy5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWNvbW1vbi5qczoK
KyAgICAgICAgKiBmYXN0L2ZpbGVzL3dvcmtlcnMvaW5saW5lLXdvcmtlci12aWEtYmxvYi11cmwu
aHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFi
b3J0LWNvbnRpbnVlLmpzOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmls
ZS13cml0ZXItYWJvcnQtZGVwdGguanM6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanM6CisgICAgICAgICogZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVuZC5qczoKKyAgICAg
ICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtd3JpdGUtb3Zl
cmxhcHBlZC5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLXV0aWxzLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMvZmlsZWFwaS9jcmVhdGUtYmxvYi11
cmwtZnJvbS1kYXRhLXVybC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvZmlsZXN5c3RlbS9u
by1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwv
YmxvYi9yZXNvdXJjZXMvaHlicmlkLWJsb2ItdXRpbC5qczoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5c3RlbS1maWxlLmh0bWw6CisgICAgICAg
ICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9iamVjdC5odG1sOgor
ICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQt
YWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbDoKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sOgorICAgICAgICAq
IGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1s
OgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJs
b2IuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtl
cnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qczoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9y
YWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
c3RydWN0dXJlZC1jbG9uZS5odG1sOgorCiAyMDEyLTA0LTIwICBHdXN0YXZvIE5vcm9uaGEgU2ls
dmEgIDxnbnNAZ25vbWUub3JnPgogCiAgICAgICAgIFJlYmFzZWxpbmUgbW9yZSBHVEsgdGVzdHMg
YWZ0ZXIgPGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzExNDc5OT4uCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxv
YWQtdW5zZXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2Fu
Y2hvci1kb3dubG9hZC11bnNldC5odG1sCmluZGV4IDYzMjFiOWM1MDU4OGY5OGFhOTE3YTMxOGI1
ODZhYzU1OGMyZDNkNjguLjQzYTJjZGYxMzI2YWFjODc5MjhiZmU0OTM2NjAyMzk1YTNiMGJkN2Ig
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hv
ci1kb3dubG9hZC11bnNldC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNo
b3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC11bnNldC5odG1sCkBAIC0yNCw5ICsyNCw4IEBAIGZ1
bmN0aW9uIGNsaWNrKGVsbXQpCiAKIGZ1bmN0aW9uIHJ1blRlc3QoKQogewotICAgIHZhciBiYiA9
IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgiPCFkb2N0eXBlIGh0bWw+
PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsg
InNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIg
KyAiaXB0PjwvaHRtbD4iKTsKLSAgICB2YXIgYmxvYiA9IGJiLmdldEJsb2IoInRleHQvaHRtbCIs
ICJpbmxpbmUiKTsKKyAgICB2YXIgc3RyaW5nID0gIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFk
Pjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9o
ZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0
bWw+Iik7ICAgIAorICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAidGV4
dC9odG1sIn0pOwogICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsb2It
dXJsIik7CiAgICAgbGluay5ocmVmID0gd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwo
YmxvYik7CiAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2Rvd25sb2FkJyk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3du
bG9hZC5odG1sCmluZGV4IGM4Mzc3ZjkyOThhMTk5OWE0YWVjMGI2NWM1MWRkMTljNzVmNTgyYTIu
LjkwNjEwMTQ2NDMyZTcxN2Y1OGFkNzI0OTg1ODYyN2FhNzUxOWExYjAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC5odG1s
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3du
bG9hZC5odG1sCkBAIC0yNCw5ICsyNCw4IEBAIGZ1bmN0aW9uIGNsaWNrKGVsbXQpCiAKIGZ1bmN0
aW9uIHJ1blRlc3QoKQogewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwot
ICAgIGJiLmFwcGVuZCgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90
aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwv
Ym9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iKTsKLSAgICB2YXIg
YmxvYiA9IGJiLmdldEJsb2IoInRleHQvaHRtbCIsICJpbmxpbmUiKTsKKyAgICB2YXIgc3RyaW5n
ID0gIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlw
dD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlw
dD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+IjsKKyAgICB2YXIgYmxvYiA9IG5ldyBC
bG9iKFtzdHJpbmddLCB7dHlwZTogInRleHQvaHRtbCJ9KTsKICAgICB2YXIgbGluayA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJibG9iLXVybCIpOwogICAgIGxpbmsuaHJlZiA9IHdpbmRvdy53
ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgIGNsaWNrKGxpbmspOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93
bmxvYWQtc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9h
bmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAppbmRleCBkMGI0MmFmMGI1YWI3MGE0ODNhMGE2Yzdk
NzIyOWY3N2Q3MTlhYmU1Li41NDUyYTJjZGEyZjRhYTgyZWI2YWQwMjdkNGNjMWMwOTU4NTgwOWUy
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNo
b3Itbm9kb3dubG9hZC1zZXQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5j
aG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbApAQCAtMjQsOSArMjQsOCBAQCBm
dW5jdGlvbiBjbGljayhlbG10KQogCiBmdW5jdGlvbiBydW5UZXN0KCkKIHsKLSAgICB2YXIgYmIg
PSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoIjwhZG9jdHlwZSBodG1s
PjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiAr
ICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3Ii
ICsgImlwdD48L2h0bWw+Iik7Ci0gICAgdmFyIGJsb2IgPSBiYi5nZXRCbG9iKCJ0ZXh0L2h0bWwi
LCAiaW5saW5lIik7CisgICAgdmFyIHN0cmluZyA9ICI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVh
ZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0Pjwv
aGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9o
dG1sPiI7CisgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbc3RyaW5nXSwge3R5cGU6ICJ0ZXh0L2h0
bWwifSk7CiAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmxvYi11cmwi
KTsKICAgICBsaW5rLmhyZWYgPSB3aW5kb3cud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9i
KTsKICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnKTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9h
ZC5odG1sCmluZGV4IGY5MWVkYzFmY2Q4MjM2YjgyNDk0MDY5ZWQwMzMxMjczYzAwNjQ2MDMuLmRj
ZDEwMDk5M2FjMTA4MDMwNTJkMTc4ZmUxNTdmMGNiMjgwN2Q3MTkgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93
bmxvYWQuaHRtbApAQCAtMjQsOSArMjQsOCBAQCBmdW5jdGlvbiBjbGljayhlbG10KQogCiBmdW5j
dGlvbiBydW5UZXN0KCkKIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsK
LSAgICBiYi5hcHBlbmQoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwv
dGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8
L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7Ci0gICAgdmFy
IGJsb2IgPSBiYi5nZXRCbG9iKCJ0ZXh0L2h0bWwiLCAiaW5saW5lIik7CisgICAgdmFyIHN0cmlu
ZyA9ICI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3Jp
cHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3Jp
cHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiI7CisgICAgdmFyIGJsb2IgPSBuZXcg
QmxvYihbc3RyaW5nXSwge3R5cGU6ICJ0ZXh0L2h0bWwifSk7CiAgICAgdmFyIGxpbmsgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYmxvYi11cmwiKTsKICAgICBsaW5rLmhyZWYgPSB3aW5kb3cu
d2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICBjbGljayhsaW5rKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbAppbmRleCA3ZDVjMDRj
MzljYjhiZWI4OWE4YmY1ZDAwY2Q0MmFlMjM0NWYwOWFhLi4zYjhmZDc1NTM3MTYyNGY1OTA1ZWI3
YTBjNDA1YTY4OTcxOTczOGIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS93aW5k
b3ctZG9tdXJsLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vd2luZG93LWRv
bXVybC1jcmFzaC5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+DQogPGhlYWQ+DQogPHNjcmlw
dD4NCi12YXIgYmxvYiA9IChuZXcgV2ViS2l0QmxvYkJ1aWxkZXIpLmdldEJsb2IoKTsNCit2YXIg
YmxvYiA9IG5ldyBCbG9iKFtdKTsNCiB2YXIgdXJsID0gbnVsbDsNCiB2YXIgY291bnQgPSAwOw0K
IA0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNo
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNo
LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4YWFhNjhmYzQ3
YTIyM2M0YjE4OWVjNDMxMDhlYjc4ZGVkNGU2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItYnVpbGRlci1j
cmFzaC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLVRlc3QgdGhh
dCBjYWxsaW5nIFdlYktpdEJsb2JCdWlsZGVyLmFwcGVuZCB3aXRoIG51bGwgdmFsdWUgc2hvdWxk
IG5vdCBjYXVzZSBjcmFzaC4KLURPTkUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxv
Yi1idWlsZGVyLWNyYXNoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNjY0
YjFkNTFhOGFjNmFlNjE4ZDNlNDcyMzk0MTgzNTI5YTQ5MGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWJ1
aWxkZXItY3Jhc2guaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTwhRE9DVFlQ
RSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBsb2cobWVzc2FnZSkK
LXsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UgKyAiXG4iKSk7Ci19Ci0KLWZ1bmN0aW9uIHRl
c3QoKQotewotICAgIGxvZygiVGVzdCB0aGF0IGNhbGxpbmcgV2ViS2l0QmxvYkJ1aWxkZXIuYXBw
ZW5kIHdpdGggbnVsbCB2YWx1ZSBzaG91bGQgbm90IGNhdXNlIGNyYXNoLiIpOwotICAgIHZhciBi
dWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQobnVs
bCk7Ci0KLSAgICBsb2coIkRPTkUiKTsKLX0KLQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci08L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5IG9ubG9hZD0idGVzdCgpIj4KLTxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJl
PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9i
bG9iLXNsaWNlLW92ZXJmbG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xp
Y2Utb3ZlcmZsb3cuaHRtbAppbmRleCBlYzhmYThjZDg3OTBhZWFkMzY5ZTQ2YTBjOTZhY2FhYmZj
MDk3MDBhLi5hM2VlN2M0YzNlMzI2NjVhYTZjZTc4ZWY5ZDg3MDdhOGExZjllMTA1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbApAQCAtNSwx
OSArNSwyMiBAQCBhIHRydW5jYXRlZCBzbGljZSBiZWluZyByZXR1cm5lZC4KIDxwcmUgaWQ9J2Nv
bnNvbGUnPjwvcHJlPgogPHNjcmlwdD4KIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKLSAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCkKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpCiB9Ci12YXIg
YnVpbGRlciA9ICBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKwogdmFyIHRleHQgPSAnJzsKLWZv
ciAodmFyIGkgPSAwOyBpIDwgMjAwMDsgKytpKSB0ZXh0ICs9ICdBJzsKLWJ1aWxkZXIuYXBwZW5k
KHRleHQpOwotYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpOworZm9yICh2YXIgaSA9IDA7IGkgPCAy
MDAwOyArK2kpCisgICAgdGV4dCArPSAnQSc7CisKK2Jsb2IgPSBuZXcgQmxvYihbdGV4dF0pOwog
c2xpY2VkQmxvYiA9IGJsb2Iud2Via2l0U2xpY2UoMTk5OSwgOTIyMzM3MjAzNjg1NDc3NTAwMCk7
CisKIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoJ0Jsb2Igc2xpY2UgbGVuZ3RoOiAnICsgc2xpY2VkQmxvYi5zaXpl
KSk7CiBpZiAoc2xpY2VkQmxvYi5zaXplICE9IDEpIHsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRkFJTCcp
KTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCdGQUlMJykpOwogfQorCiBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CiAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS10ZXN0Lmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2UtdGVzdC5odG1sCmluZGV4IDU2MDQ4
ZGEwNjJhNTFhNDNjZmM2NmU3MTQ5YzliYzkxMWY5MTFlOGQuLjBjOGNkMTY2MDc5NThhZDkxMDhi
NTIxOGI3MDgwNWIwZTFkMDI2NTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMv
YmxvYi1zbGljZS10ZXN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNs
aWNlLXRlc3QuaHRtbApAQCAtODIsOSArODIsNyBAQCBmdW5jdGlvbiBydW5OZXh0VGVzdCgpCiAK
IGZ1bmN0aW9uIHJ1blRlc3RzKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9i
QnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2Nzg5Iik7Ci0gICAgYmxvYiA9
IGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIGJsb2IgPSBuZXcgQmxvYihbIjAxMjM0NTY3ODkiXSk7
CiAKICAgICBydW5OZXh0VGVzdCgpOwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9maWxlLXJlYWRlci1mZmZkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUt
cmVhZGVyLWZmZmQuaHRtbAppbmRleCAwYjRmZjFhYjE5MWZmOThlY2YyMDQ0ZGJmMzdiNDU2YmQ2
MjQzMDVkLi5lYWNhMjRlYmE2MDA4ZDIyNjFjYzVkNTNkMWZlMTBhMzllNDM5ZGZlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbApAQCAtMTAsOSArMTAs
OCBAQAogPHNjcmlwdD4KIGRlc2NyaXB0aW9uKCJUaHJvdyB2YXJpb3VzIGJhZCBieXRlcyBhdCBm
aWxlIHJlYWRlci4iKTsKIAotYmIgPSBldmFsQW5kTG9nKCJiYiA9IG5ldyBXZWJLaXRCbG9iQnVp
bGRlcigpOyIpOwogYXJyYXkgPSBldmFsQW5kTG9nKCJhcnJheSA9IG5ldyBVaW50OEFycmF5KFs2
NSwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUs
IDY2XSk7Iik7Ci1ibG9iID0gZXZhbEFuZExvZygiYmxvYiA9IGJ1aWxkQmxvYihbYXJyYXkuYnVm
ZmVyXSk7Iik7CitibG9iID0gZXZhbEFuZExvZygiYmxvYiA9IG5ldyBCbG9iKFthcnJheS5idWZm
ZXJdKTsiKTsKIHJlYWRlciA9IGV2YWxBbmRMb2coInJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7
Iik7CiByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgZmlsZVN0cmluZyA9IGV2
ZW50LnRhcmdldC5yZXN1bHQ7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL25v
dC1lbm91Z2gtYXJndW1lbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL25vdC1lbm91
Z2gtYXJndW1lbnRzLmh0bWwKaW5kZXggMDE5YTlmMWM1ZWE0MWExYTQ2ZTk1NTIyM2ZkMzg1MzA3
ODA5NTJkMi4uNTkxNTUzZjFhZTQzOTFhZGNiYmI2YmFiNzlhZmNhYjFmMDhhMDk2NSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMuaHRtbApAQCAt
MTUsOSArMTUsNyBAQCBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZygpJyk7
CiBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc1RleHQoKScpOwogc2hvdWxkVGhyb3coJ3JlYWRl
ci5yZWFkQXNEYXRhVVJMKCknKTsKIAotdmFyIGJsb2JCdWlsZGVyID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7Ci0KLXNob3VsZFRocm93KCdibG9iQnVpbGRlci5hcHBlbmQoKScpOworc2hvdWxk
VGhyb3coJ25ldyBCbG9iKCknKTsKIAogdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWJsb2ItdGVzdC1jYXNlcy5qcyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCmluZGV4IDgxOWNhMDBi
YzBhNjE1ODQ3ZGQwMDcxNWY2ZWZhZWUxY2YwYzJiYjMuLmZmMGY0ODExZTRkNTg2NzA0ODg0ODAx
MTU2ZTg0NTMzNWU5Y2U1ZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVz
b3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCkBAIC0xNzAsMTEgKzE3MCwxMSBA
QCBmdW5jdGlvbiB0ZXN0UmVhZGluZ1NsaWNlZEh5YnJpZEJsb2IodGVzdEZpbGVzKQogZnVuY3Rp
b24gdGVzdFJlYWRpbmdUcmlwbGVTbGljZWRIeWJyaWRCbG9iKHRlc3RGaWxlcykKIHsKICAgICBs
b2coIlRlc3QgcmVhZGluZyBhIHRyaXBsZS1zbGljZWQgaHlicmlkIGJsb2IiKTsKLSAgICB2YXIg
YnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwogICAgIHZhciBhcnJheSA9IG5ldyBV
aW50OEFycmF5KFs0OCwgNDksIDUwXSk7Ci0gICAgdmFyIGJsb2IgPSBidWlsZEJsb2IoWydGaXJz
dCcsIHRlc3RGaWxlc1snZmlsZTEnXS53ZWJraXRTbGljZSgxLCAxMSksIHRlc3RGaWxlc1snZW1w
dHktZmlsZSddLCAnU2Vjb25kJywgdGVzdEZpbGVzWydmaWxlMiddLCB0ZXN0RmlsZXNbJ2ZpbGUz
J10sICdUaGlyZCcsIGFycmF5LmJ1ZmZlcl0sIHVuZGVmaW5lZCwgYnVpbGRlcik7CisgICAgdmFy
IGl0ZW1zID0gWydGaXJzdCcsIHRlc3RGaWxlc1snZmlsZTEnXS53ZWJraXRTbGljZSgxLCAxMSks
IHRlc3RGaWxlc1snZW1wdHktZmlsZSddLCAnU2Vjb25kJywgdGVzdEZpbGVzWydmaWxlMiddLCB0
ZXN0RmlsZXNbJ2ZpbGUzJ10sICdUaGlyZCcsIGFycmF5LmJ1ZmZlcl07CisgICAgdmFyIGJsb2Ig
PSBidWlsZEJsb2IoaXRlbXMpOwogICAgIHZhciBibG9iID0gYmxvYi53ZWJraXRTbGljZSg3LCAx
OSk7Ci0gICAgdmFyIGJsb2IyID0gYnVpbGRCbG9iKFsnRm9vJywgYmxvYiwgJ0JhciddLCB1bmRl
ZmluZWQsIGJ1aWxkZXIpOworICAgIHZhciBibG9iMiA9IGJ1aWxkQmxvYihpdGVtcy5jb25jYXQo
WydGb28nLCBibG9iLCAnQmFyJ10pKTsKICAgICB2YXIgYmxvYjIgPSBibG9iMi53ZWJraXRTbGlj
ZSgxMiwgNDIpOwogICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCBibG9iMik7
CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWNv
bW1vbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpz
CmluZGV4IDA3MTI1YTU5ZmYwYjI2MTM5NjMyMzVjOWU0ZDM4NWQwODUzOWMyM2EuLmJhYzc5OWMx
MzJkYzM1NGViZDhmZjU4NmEyZGQ5MjliNzA4OWZjNWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCkBAIC0xLDEzICsxLDExIEBACiAvLyBC
dWlsZHMgYSBibG9iIGZyb20gYSBsaXN0IG9mIGl0ZW1zLgogLy8gVGhlICdjb250ZW50VHlwZScg
YXJndW1lbnQgaXMgb3B0aW9uYWwuCiAvLyBJZiB0aGUgJ2J1aWxkZXInIGFyZ3VtZW50IGlzIG5v
dCBwcm92aWRlZCwgY3JlYXRlIGEgbmV3IG9uZS4KLWZ1bmN0aW9uIGJ1aWxkQmxvYihpdGVtcywg
Y29udGVudFR5cGUsIGJ1aWxkZXIpCitmdW5jdGlvbiBidWlsZEJsb2IoaXRlbXMsIGNvbnRlbnRU
eXBlKQogewotICAgIGlmIChidWlsZGVyID09PSB1bmRlZmluZWQpCi0gICAgICAgIGJ1aWxkZXIg
PSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1z
Lmxlbmd0aDsgaSsrKQotICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVtc1tpXSk7Ci0gICAgcmV0
dXJuIGJ1aWxkZXIuZ2V0QmxvYihjb250ZW50VHlwZSk7CisgICAgaWYgKGNvbnRlbnRUeXBlID09
PSB1bmRlZmluZWQpCisgICAgICAgIHJldHVybiBuZXcgQmxvYihpdGVtcyk7CisgICAgcmV0dXJu
IG5ldyBCbG9iKGl0ZW1zLCB7dHlwZTpjb250ZW50VHlwZX0pOwogfQogCiAvLyBSZWFkcyBhIGJs
b2IgZWl0aGVyIGFzeW5jaHJvbm91c2x5IG9yIHN5bmNocm9ub3VzbHkuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvaW5saW5lLXdvcmtlci12aWEtYmxvYi11cmwu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZpYS1i
bG9iLXVybC5odG1sCmluZGV4IDNiYWNjZGEyNzc0MDAzYTcwMzRiMjIwNGY4OTA3ZjExNmJmODU4
ZWUuLjA0YmQwOGNmNjAyYzBmNzQwMDU1Yjg5NDA0MjM1Y2FjNmIxZDEyZjEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZpYS1ibG9iLXVy
bC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2Vy
LXZpYS1ibG9iLXVybC5odG1sCkBAIC0xMCwxMyArMTAsMTIgQEAgZnVuY3Rpb24gbG9nKG1lc3Nh
Z2UpCiBmdW5jdGlvbiBydW5UZXN0KCkKIHsKICAgICBsb2coIlRlc3QgaW5saW5lIHdlYiB3b3Jr
ZXIgdmlhIGJsb2IgVVJMLiIpOwotICAgIHZhciBibG9iQnVpbGRlciA9IG5ldyBXZWJLaXRCbG9i
QnVpbGRlcigpOwotICAgIGJsb2JCdWlsZGVyLmFwcGVuZChbCisgICAgdmFyIHN0cmluZyA9IFsK
ICAgICAgICAgIm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsiLAogICAgICAgICAiICAgIHBvc3RN
ZXNzYWdlKCdIZWxsbyBmcm9tIHdvcmtlcicpOyIsCiAgICAgICAgICJ9OyIKICAgICBdLmpvaW4o
J1xuJykpOwotICAgIHZhciBibG9iVVJMID0gd2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9i
QnVpbGRlci5nZXRCbG9iKCkpOworICAgIHZhciBibG9iVVJMID0gd2Via2l0VVJMLmNyZWF0ZU9i
amVjdFVSTChuZXcgQmxvYihbc3RyaW5nXSkpOwogICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2Vy
KGJsb2JVUkwpOwogICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgewogICAg
ICAgICBsb2coZXZlbnQuZGF0YSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmpzIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5q
cwppbmRleCBiNWNlYjRhODczMWU3NzA1MjI1MGFkMjgwY2M1NGFhMjA2YTBlZWJmLi4xNzkxNmRi
YjU4YzY5ZmI5NjJkZDI4MTVlZDBmODAxZGNlZjhmYmJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmpz
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXIt
YWJvcnQtY29udGludWUuanMKQEAgLTUyLDExICs1MiwxMSBAQCBmdW5jdGlvbiBub3AoKSB7CiB9
CiAKIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKKyAgICB2YXIgYmIgPSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
OyArK2kpIHsKLSAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICBiYi5wdXNoKGJsb2Ip
OwogICAgIH0KLSAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihi
Yik7CiB9CiAKIC8vIFRoZXNlIG1ldGhvZHMgc2V0IHVwIGEgd3JpdGUsIGFib3J0IGl0IGFzIHNv
b24gYXMgaXQgc3RhcnRzLCB0aGVuIGluaXRpYXRlCkBAIC05MSw5ICs5MSw3IEBAIGZ1bmN0aW9u
IGNoZWNrTGVuZ3RoQW5kQ29tcGxldGVUZXN0KGUpIHsKIAogZnVuY3Rpb24gc3RhcnRXcml0ZSgp
IHsKICAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCi0gICAgdmFyIGJiID0g
bmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOwot
ICAgIHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKKyAgICB2YXIgYmxvYiA9IHRl
blhCbG9iKG5ldyBCbG9iKFsibG9yZW0gaXBzdW0iXSkpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihi
bG9iKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJs
b2IpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9m
aWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9y
ZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanMKaW5kZXggZWE4YjYzODNhN2Y3ZTU5
OTJiMzYzNjYwZGMyNmM5MjYxYjU2MjVkYy4uOTdiMTIwYWQwZmQzOTRmMTJjOGEyNzBjODdlNTZl
MDE1MDhmMThkYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzCkBAIC0xMCw5ICsx
MCw3IEBAIHZhciBzYXdXcml0ZVN0YXJ0OwogdmFyIHNhd0Fib3J0OwogdmFyIHNhd1dyaXRlRW5k
OwogdmFyIHdyaXRlcjsKLXZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotYmIuYXBw
ZW5kKCJsb3JlbSBpcHN1bSIpOwotdmFyIGJsb2IgPSBiYi5nZXRCbG9iKCk7Cit2YXIgYmxvYiA9
IG5ldyBCbG9iKFsibG9yZW0gaXBzdW0iXSk7CiB2YXIgcmVjdXJzaW9uRGVwdGggPSAwOwogdmFy
IG1ldGhvZDsKIHZhciB0ZXN0c1J1biA9IDA7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcwppbmRleCAyYzQx
MDdhOTU3OGY1MTZjNmRmNDdiNDBhNzBiNWM0Zjg1ODU2MWYxLi40OTlhN2RmOGEzOTUzNDA5MDdl
YjFjZWQwYTkxYzc3ZjRmMzc3OGVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQuanMKQEAgLTEyLDExICsx
MiwxMSBAQCB2YXIgc2F3V3JpdGVFbmQ7CiB2YXIgd3JpdGVyOwogCiBmdW5jdGlvbiB0ZW5YQmxv
YihibG9iKSB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgdmFy
IGJiID0gW107CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgICAgIGJi
LmFwcGVuZChibG9iKTsKKyAgICAgICAgYmIucHVzaChibG9iKTsKICAgICB9Ci0gICAgcmV0dXJu
IGJiLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoYmIpOwogfQogCiBmdW5jdGlvbiBv
bldyaXRlU3RhcnQoZSkgewpAQCAtNjIsOSArNjIsNyBAQCBmdW5jdGlvbiBvbldyaXRlRW5kKGUp
IHsKIAogZnVuY3Rpb24gc3RhcnRXcml0ZShmaWxlV3JpdGVyKSB7CiAgICAgLy8gTGV0J3MgbWFr
ZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOwotICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKLSAgICB2YXIgYmxvYiA9IHRlblhC
bG9iKGJiLmdldEJsb2IoKSk7CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihuZXcgQmxvYihbImxv
cmVtIGlwc3VtIl0pKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRl
blhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpz
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVu
dHMuanMKaW5kZXggYzg4ZTBmYjI0ZmRjNWVlYTU4OGE4YTZkNTdjNTQyZTdmZjBlNjlhYi4uZGY5
ZTZhYmQwYTg4MjkwMjg2ZDExZjhhMWZkMzE5YTcwZjExYzhmOCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVu
dHMuanMKQEAgLTE2LDExICsxNiwxMSBAQCB2YXIgbGFzdFByb2dyZXNzID0gMDsKIHZhciB0b0Jl
V3JpdHRlbjsKIAogZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgewotICAgIHZhciBiYiA9IG5ldyBX
ZWJLaXRCbG9iQnVpbGRlcigpOworICAgIHZhciBiYiA9IFtdOwogICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTA7ICsraSkgewotICAgICAgICBiYi5hcHBlbmQoYmxvYik7CisgICAgICAgIGJiLnB1
c2goYmxvYik7CiAgICAgfQotICAgIHJldHVybiBiYi5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5l
dyBCbG9iKGJiKTsKIH0KIAogZnVuY3Rpb24gb25Xcml0ZVN0YXJ0KGUpIHsKQEAgLTc4LDkgKzc4
LDcgQEAgZnVuY3Rpb24gb25Xcml0ZUVuZChlKSB7CiAKIGZ1bmN0aW9uIHN0YXJ0V3JpdGUoZmls
ZVdyaXRlcikgewogICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4KLSAgICB2
YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoImxvcmVtIGlw
c3VtIik7Ci0gICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOworICAgIHZhciBi
bG9iID0gdGVuWEJsb2IobmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKSk7CiAgICAgYmxvYiA9IHRl
blhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0gdGVu
WEJsb2IoYmxvYik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMKaW5kZXggODRiYmFiYjkyMGQ0ZTBj
NjIxMjk3NDNhYmQ3YWNhZDhmZjYyZjdmZS4uZWExZjZmMjIwYTNlZjJiZDQ5MjIzZWIwN2U2NzU1
MGI4MzU0YzIxNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcwpAQCAtMTQsMTggKzE0LDE2IEBA
IGZ1bmN0aW9uIG9uVGVzdFN1Y2Nlc3MoKSB7CiB9CiAKIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2Ip
IHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICB2YXIgYmIgPSBb
XTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAgICAgYmIuYXBwZW5k
KGJsb2IpOworICAgICAgICBiYi5wdXNoKGJsb2IpOwogICAgIH0KLSAgICByZXR1cm4gYmIuZ2V0
QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihiYik7CiB9CiAKIGZ1bmN0aW9uIHN0YXJ0V3Jp
dGUod3JpdGVyKSB7CiAgICAgLy8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAg
IHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgibG9yZW0g
aXBzdW0iKTsKLSAgICB2YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgdmFy
IGJsb2IgPSB0ZW5YQmxvYihuZXcgQmxvYlsibG9yZW0gaXBzdW0iXSk7CiAgICAgYmxvYiA9IHRl
blhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0gdGVu
WEJsb2IoYmxvYik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1bmNhdGUtZXh0ZW5kLmpzIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVu
ZC5qcwppbmRleCAzZGY5OTEzNzIzYTNlOWI3OWY3NmJjYTRmYjdkYTM4ZDk3NmFmYzY2Li44ZmJi
MDE0N2EwMTI1YWE1Y2RjMDQ5NmFkYjZjZTNhYzIyZDUzZDkzIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1bmNhdGUt
ZXh0ZW5kLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmls
ZS13cml0ZXItc3luYy10cnVuY2F0ZS1leHRlbmQuanMKQEAgLTE1LDEwICsxNSw4IEBAIHJlbW92
ZUFsbEluRGlyZWN0b3J5U3luYyhmaWxlU3lzdGVtLnJvb3QpOwogdmFyIGVudHJ5ID0gZmlsZVN5
c3RlbS5yb290LmdldEZpbGUoJ2EnLCB7Y3JlYXRlOnRydWUsIGV4Y2x1c2l2ZTp0cnVlfSk7CiB2
YXIgd3JpdGVyID0gZW50cnkuY3JlYXRlV3JpdGVyKCk7CiBhc3NlcnQoIXdyaXRlci5wb3NpdGlv
bik7Ci12YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwogdmFyIHRlc3REYXRh
ID0gInRlc3QgZGF0YSI7Ci1idWlsZGVyLmFwcGVuZCh0ZXN0RGF0YSk7Ci13cml0ZXIud3JpdGUo
YnVpbGRlci5nZXRCbG9iKCkpOword3JpdGVyLndyaXRlKG5ldyBCbG9iKFt0ZXN0RGF0YV0pKTsK
IGFzc2VydCh3cml0ZXIubGVuZ3RoID09IHRlc3REYXRhLmxlbmd0aCk7CiBhc3NlcnQod3JpdGVy
LnBvc2l0aW9uID09IHdyaXRlci5sZW5ndGgpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtd3JpdGUtb3ZlcmxhcHBl
ZC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXIt
c3luYy13cml0ZS1vdmVybGFwcGVkLmpzCmluZGV4IDhmMWVkOWE3ZTg3MmExMzBiOWMyYzJhN2Vk
MTIxNjdkZWMzNmY1MmEuLjZlM2Q1N2I0NjU1ZmU0NDJkMWM3MDUxOWIzYjU5ZTYwMTA3MTA5MmIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpzCkBA
IC0xNSwxMCArMTUsOCBAQCByZW1vdmVBbGxJbkRpcmVjdG9yeVN5bmMoZmlsZVN5c3RlbS5yb290
KTsKIHZhciBlbnRyeSA9IGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKCdhJywge2NyZWF0ZTp0cnVl
LCBleGNsdXNpdmU6dHJ1ZX0pOwogdmFyIHdyaXRlciA9IGVudHJ5LmNyZWF0ZVdyaXRlcigpOwog
YXNzZXJ0KCF3cml0ZXIucG9zaXRpb24pOwotdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1
aWxkZXIoKTsKIHZhciB0ZXN0RGF0YSA9ICJ0ZXN0IGRhdGEiOwotYnVpbGRlci5hcHBlbmQodGVz
dERhdGEpOwotdmFyIGJsb2IgPSBidWlsZGVyLmdldEJsb2IoKTsKK3ZhciBibG9iID0gbmV3IEJs
b2IoW3Rlc3REYXRhXSk7CiB3cml0ZXIud3JpdGUoYmxvYik7CiBhc3NlcnQod3JpdGVyLmxlbmd0
aCA9PSB0ZXN0RGF0YS5sZW5ndGgpOwogYXNzZXJ0KHdyaXRlci5wb3NpdGlvbiA9PSB3cml0ZXIu
bGVuZ3RoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItdXRpbHMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzCmluZGV4IDlhYzg0NDBiMWNhYzc4OWE1NWEyMTIz
ZTBlNWY3Nzc0Y2E5ZjgxMDkuLmUyNmNlYWJkNWI3MWU0NzE4MDQ3ODc0OTAzNzFkOTYzOWE5MGNi
NjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmls
ZS13cml0ZXItdXRpbHMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci11dGlscy5qcwpAQCAtMTM0LDkgKzEzNCw3IEBAIGZ1bmN0aW9uIGNy
ZWF0ZUVtcHR5RmlsZShmaWxlU3lzdGVtLCBmaWxlTmFtZSwgb25TdWNjZXNzKQogCiBmdW5jdGlv
biB3cml0ZVN0cmluZyhmaWxlRW50cnksIGZpbGVXcml0ZXIsIG9mZnNldCwgZGF0YSwgb25TdWNj
ZXNzKQogewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFw
cGVuZChkYXRhKTsKLSAgICB2YXIgYmxvYiA9IGJiLmdldEJsb2IoKTsKKyAgICB2YXIgYmxvYiA9
IG5ldyBCbG9iKFtkYXRhXSk7CiAgICAgZmlsZVdyaXRlci5zZWVrKG9mZnNldCk7CiAgICAgZmls
ZVdyaXRlci53cml0ZShibG9iKTsKICAgICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlYXBpL2NyZWF0ZS1ibG9iLXVy
bC1mcm9tLWRhdGEtdXJsLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVhcGkvY3Jl
YXRlLWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbAppbmRleCAwNGM5YmUwMTkxNDdkYTQ2MjNj
ZTgyOTFjNTNiNjBmMGQ4MzhhNTg3Li4zODA4NTFjNDc3MjgyODU3OTYyZWZmZWVlNDZkZWVhMjZl
ZjE5ZWMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVhcGkvY3JlYXRl
LWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2ZpbGVhcGkvY3JlYXRlLWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbApAQCAtMjgsNiArMjgs
NiBAQCB2YXIgdCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiA8Ym9keT4KIDxwPiBUZXN0IGNh
c2UgZm9yIGNoZWNraW5nIGJsb2IgVVJMIG5vdCBhbGxvd2VkIHRvIGJlIGNyZWF0ZWQgZnJvbSB0
aGUgY29kZSBydW5uaW5nIGZyb20gZGF0YSBVUkk8L3A+CiA8cHJlIGlkPSdjb25zb2xlJz48L3By
ZT4KLTxpZnJhbWUgc3JjPSJkYXRhOnRleHQvaHRtbCwlM0NzY3JpcHQlM0V2YXIlMjBiJTIwJTNE
JTIwbmV3JTIwV2ViS2l0QmxvYkJ1aWxkZXIoKSUzQmIuYXBwZW5kKCUyMkZvbyUyMiklM0J2YXIl
MjBiYiUyMCUzRCUyMGIuZ2V0QmxvYigndGV4dCUyRmh0bWwnKSUzQnRvcC5sb2NhdGlvbiUzRCdo
dHRwJTNBJTJGJTJGMTI3LjAuMC4xJTNBODAwMCUyRmZpbGVhcGklMkZjcmVhdGUtYmxvYi11cmwt
ZnJvbS1kYXRhLXVybC5odG1sJTIzJyUyMCUyQiUyMHdpbmRvdy53ZWJraXRVUkwuY3JlYXRlT2Jq
ZWN0VVJMKGJiKSUzQiUzQyUyRnNjcmlwdCUzRSI+PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0iZGF0
YTp0ZXh0L2h0bWwsJTNDc2NyaXB0JTNFdmFyJTIwYmIlMjAlM0QlMjBuZXclMjBCbG9iJTI4JTVC
JTIyRm9vJTIyJTVEJTJDJTIwJTdCdHlwZSUzQSUyMnRleHQlMkZodG1sJTIyJTdEJTI5JTNCdG9w
LmxvY2F0aW9uJTNEJTI3aHR0cCUzQSUyRiUyRjEyNy4wLjAuMSUzQTgwMDAlMkZmaWxlYXBpJTJG
Y3JlYXRlLWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbCUyMyUyNyUyMCUyQiUyMHdpbmRvdy53
ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMJTI4YmIlMjklM0IlM0MlMkZzY3JpcHQlM0UiPjwvaWZy
YW1lPgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9maWxlc3lzdGVtL25vLWNhY2hlLWZpbGVzeXN0ZW0tdXJsLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbAppbmRleCBl
YzE2YTU0NGYzYTFkZmExZDRiYWJlNWYxYzAyMjJjNzY2M2JhYjE4Li5hZDRhZGQ2M2RkMGIyOThl
NjIyYmVkNDM5ZTg1MTNkZWVmNTBlNzg3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbApA
QCAtMjQsOSArMjQsNyBAQAogICAgICAgd3JpdGVyLm9ud3JpdGVlbmQgPSBmdW5jdGlvbigpIHsK
ICAgICAgICAgY2FsbGJhY2socmFuZCk7CiAgICAgICB9OwotICAgICAgdmFyIGJiID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgICBiYi5hcHBlbmQoJ2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgPSAoZXhwZWN0ZWQgPT0gJyArIHJhbmQgKyAnKSA/ICJT
VUNDRVNTIiA6ICJGQUlMVVJFIjsnKTsKLSAgICAgIHdyaXRlci53cml0ZShiYi5nZXRCbG9iKCd0
ZXh0L3BsYWluJykpOworICAgICAgd3JpdGVyLndyaXRlKG5ldyBCbG9iKFsnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCA9IChleHBlY3RlZCA9PSAnICsgcmFuZCAr
ICcpID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiOyddLCB7dHlwZTondGV4dC9wbGFpbid9KSk7CiAg
ICAgfQogCiAgICAgZ2V0RmlsZVdyaXRlcihmdW5jdGlvbihmaWxlLCB3cml0ZXIpIHsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvYmxvYi9yZXNvdXJjZXMvaHlicmlk
LWJsb2ItdXRpbC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvYmxvYi9yZXNvdXJj
ZXMvaHlicmlkLWJsb2ItdXRpbC5qcwppbmRleCAwNjE1OTk2NWZjNDNjODQwMDJhYzljODcwOTc5
YWY0MjI1NDBmMWVlLi42ZDNlOTg2Y2U4MmY0OGZmYTI5NzE0YWIzYmFlNTIxODVjOTU2MmNlIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Jsb2IvcmVzb3VyY2VzL2h5
YnJpZC1ibG9iLXV0aWwuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9i
L3Jlc291cmNlcy9oeWJyaWQtYmxvYi11dGlsLmpzCkBAIC0xMzEsMTYgKzEzMSwxOSBAQCB2YXIg
SHlicmlkQmxvYlRlc3RVdGlsID0gZnVuY3Rpb24odGVzdEZ1bmMsIG9wdF9maWxlUGF0aHMpIHsK
IAogICAgIHRoaXMuYXBwZW5kQW5kQ3JlYXRlQmxvYiA9IGZ1bmN0aW9uKGl0ZW1zLCBvcHRfZW5k
aW5nLCBvcHRfdHlwZSkKICAgICB7Ci0gICAgICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVp
bGRlcigpOworICAgICAgICB2YXIgYnVpbGRlciA9IFtdOwogICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaXRlbXNbaV0gaW5z
dGFuY2VvZiBBcnJheSkgewogICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIGNv
bWJpbmUgaXRzIGVsZW1lbnRzIGFuZCBhcHBlbmQgYXMgYSBibG9iLgotICAgICAgICAgICAgICAg
IGJiLmFwcGVuZCh0aGlzLmFwcGVuZEFuZENyZWF0ZUJsb2IoaXRlbXNbaV0sIG9wdF9lbmRpbmcs
IG9wdF90eXBlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zW2ldLnR5cGUgPT0gImRh
dGEiICYmIG9wdF9lbmRpbmcpCi0gICAgICAgICAgICAgICAgYmIuYXBwZW5kKGl0ZW1zW2ldLnZh
bHVlLCBvcHRfZW5kaW5nKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYi5h
cHBlbmQoaXRlbXNbaV0udmFsdWUpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIucHVzaCh0aGlz
LmFwcGVuZEFuZENyZWF0ZUJsb2IoaXRlbXNbaV0sIG9wdF9lbmRpbmcsIG9wdF90eXBlKSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBidWlsZGVyLnB1c2goaXRlbXNbaV0u
dmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiYi5nZXRCbG9iKG9wdF90eXBlKTsK
KyAgICAgICAgdmFyIG9wdGlvbnMgPSB7fTsKKyAgICAgICAgaWYgKG9wdF9lbmRpbmcpCisgICAg
ICAgICAgICBvcHRpb25zLmVuZGluZ3MgPSBvcHRfZW5kaW5nOworICAgICAgICBpZiAob3B0X3R5
cGUpCisgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSBvcHRfdHlwZTsKKyAgICAgICAgcmV0dXJu
IG5ldyBCbG9iKGJ1aWxkZXIsIG9wdGlvbnMpOwogICAgIH07CiB9OwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0t
ZmlsZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3Jl
YXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCmluZGV4IDFlM2FlMjFiYWYzMDMzZWRiNjkyYWViMWYz
ZTJkMDgyYWExMmE2ZmMuLmNlZGJiMGRjYmYwMGU4M2Q5Y2I4MTIyZTk0Y2Y4MmVmNGUwNTczMjcg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2Ny
ZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5c3RlbS1maWxlLmh0bWwKQEAgLTUsMTIgKzUs
MTAgQEAKICAgICAgICAgICAgIHdlYmtpdFJlcXVlc3RGaWxlU3lzdGVtKFRFTVBPUkFSWSwgMTAw
LCBmdW5jdGlvbihmcykgewogICAgICAgICAgICAgICAgIGZzLnJvb3QuZ2V0RmlsZSgicGFnZS5o
dG1sIiwge2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZW50cnkpIHsKICAgICAgICAgICAgICAgICAg
ICAgZW50cnkuY3JlYXRlV3JpdGVyKGZ1bmN0aW9uKHdyaXRlcikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBiYi5hcHBlbmQoJzxkaXYgaWQ9ImlubmVyRGl2Ij5WaXNpYmxlIENvbnRlbnRz
PC9kaXY+XG4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5vbndyaXRlID0gZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZW50cnku
dG9VUkwoKSArICIgY3JlYXRlZC4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUoYmIuZ2V0QmxvYigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZShuZXcgQmxvYihbJzxkaXYgaWQ9ImlubmVyRGl2
Ij5WaXNpYmxlIENvbnRlbnRzPC9kaXY+XG4nXSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9iamVjdC5odG1s
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9i
amVjdC5odG1sCmluZGV4IDY2NTQ2MjVhOWRiM2UyMjQ3OTFlNGJhZjdiMTA5YjMzNzNjMjM1ZTEu
LmY2NGFkN2FiMjNkM2Y0MTNmMTFmZjZmNjBjNjBlZGNlMmYwMjg5Y2YgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3Qu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2
L3NlbmQtb2JqZWN0Lmh0bWwKQEAgLTE1LDggKzE1LDcgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKIAogZnVuY3Rpb24gY3JlYXRlRW1wdHlCbG9iKCkKIHsKLSAgICB2YXIgYnVp
bGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJs
b2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW10pOwogfQogCiB2YXIgd3MgPSBuZXcgV2ViU29j
a2V0KCJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L2VjaG8iKTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
YnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS1p
bi1idXN5Lmh0bWwKaW5kZXggYWMxN2UwMTRjZWEwZTNmM2FiNDQxOTk3OGUxYWUzZWRkZGNjZTI0
NS4uMzk5NTA3OTNjYjJjNDYxMTM5NWJlMmQ3Y2FlZDI0ZTM3ZDI2NDc1ZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3Vu
dC1hZnRlci1jbG9zZS1pbi1idXN5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS1pbi1idXN5Lmh0
bWwKQEAgLTIzLDkgKzIzLDcgQEAgZnVuY3Rpb24gY3JlYXRlU3RyaW5nV2l0aExlbmd0aChsZW5n
dGgpCiAKIGZ1bmN0aW9uIGNyZWF0ZUJsb2JXaXRoTGVuZ3RoKGxlbmd0aCkKIHsKLSAgICB2YXIg
YnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG5l
dyBBcnJheUJ1ZmZlcihsZW5ndGgpKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7Cisg
ICAgcmV0dXJuIG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKV0pOwogfQogCiB2YXIg
d3MgPSBuZXcgV2ViU29ja2V0KCJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9o
eWJpL2VjaG8iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xv
c2UuaHRtbAppbmRleCAyN2YyMzgwYzNkYjE2Y2U3MDk3N2UxNGVhMDFjODRhNzg3M2Q5YjkxLi40
YjNkMTBmNTFmNzRiM2M3NjNjYzZmZjNjNzUwZjBmODg4NWYwNDRjIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFm
dGVyLWNsb3NlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sCkBAIC0yMyw5ICsyMyw3IEBA
IGZ1bmN0aW9uIGNyZWF0ZVN0cmluZ1dpdGhMZW5ndGgobGVuZ3RoKQogCiBmdW5jdGlvbiBjcmVh
dGVCbG9iV2l0aExlbmd0aChsZW5ndGgpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0
QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZChuZXcgQXJyYXlCdWZmZXIobGVuZ3Ro
KSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihb
bmV3IEFycmF5QnVmZmVyKGxlbmd0aCldKTsKIH0KIAogdmFyIHdzID0gbmV3IFdlYlNvY2tldCgi
d3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9zaW1wbGUiKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1i
bG9iLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtYmxvYi5odG1sCmluZGV4IDJiODBmYTJlMGI4ZDMwNmQyM2Q0ODgwNzllNWYwZmM4ZmNjMWZl
NjAuLjY2YjQ0OTE1ODVmYmVlM2MwY2M4ZjAxMDY4YmYyMTFjNTU2YmUyYWMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWJsb2IuaHRtbApAQCAtMjAsMTUgKzIwLDEyIEBAIGZ1bmN0aW9uIHN0YXJ0c1dpdGgodGFyZ2V0
LCBwcmVmaXgpCiAKIGZ1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nSGVsbG9Xb3JsZCgpCiB7
Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVy
LmFwcGVuZCgiSGVsbG8sIHdvcmxkISIpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsK
KyAgICByZXR1cm4gbmV3IEJsb2IoWyJIZWxsbywgd29ybGQhIl0pOwogfQogCiBmdW5jdGlvbiBj
cmVhdGVFbXB0eUJsb2IoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWls
ZGVyKCk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxv
YihbXSk7CiB9CiAKIGZ1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRl
cygpCkBAIC0zNiw5ICszMyw3IEBAIGZ1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlz
dGluY3RCeXRlcygpCiAgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKQogICAgICAgICBhcnJheVtpXSA9IGk7Ci0gICAg
dmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVu
ZChhcnJheS5idWZmZXIpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1
cm4gbmV3IEJsb2IoW2FycmF5LmJ1ZmZlcl0pOwogfQogCiB2YXIgdXJsID0gIndzOi8vMTI3LjAu
MC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2h5YmkvY2hlY2stYmluYXJ5LW1lc3NhZ2VzIjsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2Vu
ZC1maWxlLWJsb2ItZmFpbC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKaW5kZXggNmRhOTgzYjZiMTRmM2Q4
ODRjNDMzYzRlMWQ4ZjkyYjYwYzFhM2JlNC4uMDFiNTQ1NWVkOGVkNmMyMTM5MWNlMDg4ZjBmNjU4
NzdmYjg2NzY5ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKQEAg
LTU5LDkgKzU5LDcgQEAgZnVuY3Rpb24gZGlkR2V0RmlsZVdyaXRlcih3cml0ZXIpCiAgICAgfTsK
ICAgICB3cml0ZXIub253cml0ZSA9IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBidWls
ZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1l
c3NhZ2VUb1dyaXRlKTsKLSAgICAgICAgd3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0QmxvYigpKTsK
KyAgICAgICAgd3JpdGVyLndyaXRlKG5ldyBCbG9iKFttZXNzYWdlVG9Xcml0ZV0pKTsKICAgICAg
ICAgd3JpdGVyLm9ud3JpdGUgPSBkaWRXcml0ZUZpbGU7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJs
b2IuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2Vu
ZC1maWxlLWJsb2IuaHRtbAppbmRleCAyYTM0MWJjYzE5NTM1ZDkxNjE1Y2Y0MDRjNGU5ZTU3NDFm
ZjljMjg2Li4yZDNjZGU4N2U4ZTcyNTlhOGFlYmVlYmQ1M2EyZjMwOGNjNTdlNWZlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmls
ZS1ibG9iLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCkBAIC01OSw5ICs1OSw3IEBAIGZ1bmN0aW9uIGRpZEdl
dEZpbGVXcml0ZXIod3JpdGVyKQogICAgIH07CiAgICAgd3JpdGVyLm9ud3JpdGUgPSBmdW5jdGlv
bigpCiAgICAgewotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigp
OwotICAgICAgICBidWlsZGVyLmFwcGVuZChtZXNzYWdlVG9Xcml0ZSk7Ci0gICAgICAgIHdyaXRl
ci53cml0ZShidWlsZGVyLmdldEJsb2IoKSk7CisgICAgICAgIHdyaXRlci53cml0ZShuZXcgQmxv
YihbbWVzc2FnZVRvV3JpdGVdKSk7CiAgICAgICAgIHdyaXRlci5vbndyaXRlID0gZGlkV3JpdGVG
aWxlOwogICAgIH07CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qcyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2Vu
ZC1ibG9iLmpzCmluZGV4IGMwMTIwZWI5OGFlYTFjZWU4YTM5OTliZWU0MTYzYTU0MzEyNDEwNjYu
LjBkYjVjYmFiYTFlYzQ2YjQ1NjA1ZGZjNjc0NTBjY2NiNzA5M2QyMGQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJj
ZXMvc2VuZC1ibG9iLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzCkBAIC0xLDE0ICsxLDExIEBA
CiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKQogewotICAgIHZhciBi
dWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIkhl
bGxvLCB3b3JsZCEiKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJu
IG5ldyBCbG9iKFsiSGVsbG8sIHdvcmxkISJdKTsKIH0KIAogZnVuY3Rpb24gY3JlYXRlRW1wdHlC
bG9iKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAg
IHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW10pOwogfQog
CiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQpAQCAtMTYs
OSArMTMsNyBAQCBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMo
KQogICAgIHZhciBhcnJheSA9IG5ldyBVaW50OEFycmF5KDI1Nik7CiAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAyNTY7ICsraSkKICAgICAgICAgYXJyYXlbaV0gPSBpOwotICAgIHZhciBidWlsZGVy
ID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoYXJyYXkuYnVm
ZmVyKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9i
KFthcnJheS5idWZmZXJdKTsKIH0KIAogdmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL2NoZWNrLWJpbmFyeS1tZXNzYWdl
cyI7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9kb20vV2luZG93
L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CmluZGV4IDc5
OGRkZjQ5NTVjNTQ1OTM5MDYzMWU1MmU3YjJhZDUyNWY2OTU2NzYuLmI5MGRkNWVjYzA1NDg2ZDJh
N2E5MmRhMWM2YzU0NjQwNDZlNzliNWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRp
ZXMtZXhwZWN0ZWQudHh0CkBAIC0xODAsNiArMTgwLDcgQEAgd2luZG93LkJlZm9yZUxvYWRFdmVu
dC5wcm90b3R5cGUucHJldmVudERlZmF1bHQgW2Z1bmN0aW9uXQogd2luZG93LkJlZm9yZUxvYWRF
dmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIFtmdW5jdGlvbl0KIHdpbmRv
dy5CZWZvcmVMb2FkRXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbiBbZnVuY3Rpb25dCiB3
aW5kb3cuQmxvYiBbb2JqZWN0IEJsb2JDb25zdHJ1Y3Rvcl0KK3dpbmRvdy5CbG9iLmxlbmd0aCBb
bnVtYmVyXQogd2luZG93LkJsb2IucHJvdG90eXBlIFtvYmplY3QgQmxvYlByb3RvdHlwZV0KIHdp
bmRvdy5Cb29sZWFuIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24gW29iamVjdCBDREFU
QVNlY3Rpb25Db25zdHJ1Y3Rvcl0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL25vYmxvYnMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL25vYmxv
YnMuaHRtbAppbmRleCA0ZWM5NmE0ZTIwYzY5ODY2NWY0Mzc3ZGMwNjc1OTQ0MzhjMzQ1ZTM5Li5h
NGQ3M2QyYTgwNDZlNWRmNjQxYzIxOWFhNDU1Y2Y2NDk5MTQxOGRkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvbm9ibG9icy5odG1sCkBAIC01OCwxMyArNTgsOSBAQCBmdW5jdGlv
biB0ZXN0QmxvYigpCiAgICAgZGVidWcoIiIpOwogICAgIGRlYnVnKCJ0ZXN0QmxvYigpOiIpOwog
Ci0gICAgZXZhbEFuZExvZygiQmxvYkJ1aWxkZXIgPSB3aW5kb3cuQmxvYkJ1aWxkZXIgfHwgd2lu
ZG93LldlYktpdEJsb2JCdWlsZGVyIik7Ci0gICAgc2hvdWxkQmVUcnVlKCJCbG9iQnVpbGRlciAh
PSBudWxsIik7CiAgICAgc2hvdWxkQmVUcnVlKCJGaWxlUmVhZGVyICE9IG51bGwiKTsKLSAgICBl
dmFsQW5kTG9nKCJidWlsZGVyID0gbmV3IEJsb2JCdWlsZGVyKCkiKTsKICAgICBldmFsQW5kTG9n
KCJ0ZXN0X2NvbnRlbnQgPSAnVGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgb25seSBhIHRlc3QuJyIp
OwotICAgIGV2YWxBbmRMb2coImJ1aWxkZXIuYXBwZW5kKHRlc3RfY29udGVudCkiKTsKLSAgICBl
dmFsQW5kTG9nKCJibG9iID0gYnVpbGRlci5nZXRCbG9iKCkiKTsKKyAgICBldmFsQW5kTG9nKCJi
bG9iID0gbmV3IEJsb2IoW3Rlc3RfY29udGVudF0pIik7CiAgICAgdmFsaWRhdGVFeGNlcHRpb25z
KCJibG9iIiwgdGVzdEZpbGUpOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwKaW5kZXggZmRhOGQyYmM4ZThiYmE3OThhZTBm
MDgyNjJlM2I3MzMwMjljNjFiMS4uZDI4YWI3Y2M5YjI4OTVlMWQzMzE2MTJmZGIxYzU4YzBhNzA2
Y2QwYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJl
ZC1jbG9uZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVy
ZWQtY2xvbmUuaHRtbApAQCAtMzc2LDEzICszNzYsOSBAQCBmdW5jdGlvbiB0ZXN0QmxvYihjYWxs
YmFjaykKICAgICBjYWxsYmFjaygpOwogICAgIHJldHVybjsKIAotICAgIGV2YWxBbmRMb2coIkJs
b2JCdWlsZGVyID0gc2VsZi5CbG9iQnVpbGRlciB8fCBzZWxmLldlYktpdEJsb2JCdWlsZGVyIik7
Ci0gICAgc2hvdWxkQmVUcnVlKCJCbG9iQnVpbGRlciAhPSBudWxsIik7CiAgICAgc2hvdWxkQmVU
cnVlKCJGaWxlUmVhZGVyICE9IG51bGwiKTsKLSAgICBldmFsQW5kTG9nKCJidWlsZGVyID0gbmV3
IEJsb2JCdWlsZGVyKCkiKTsKICAgICBldmFsQW5kTG9nKCJ0ZXN0X2NvbnRlbnQgPSAnVGhpcyBp
cyBhIHRlc3QuIFRoaXMgaXMgb25seSBhIHRlc3QuJyIpOwotICAgIGV2YWxBbmRMb2coImJ1aWxk
ZXIuYXBwZW5kKHRlc3RfY29udGVudCkiKTsKLSAgICBldmFsQW5kTG9nKCJ0ZXN0X2RhdGEgPSBi
dWlsZGVyLmdldEJsb2IoKSIpOworICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YSA9IG5ldyBCbG9i
KFt0ZXN0X2NvbnRlbnRdKSIpOwogICAgIHRlc3RWYWx1ZSh0ZXN0X2RhdGEsIGZ1bmN0aW9uKHJl
c3VsdCkgewogICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdDsKICAgICAgICAgc2hvdWxkQmVU
cnVlKCJ0ZXN0X2RhdGEgIT09IHJlc3VsdCIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138307</attachid>
            <date>2012-04-23 01:24:13 -0700</date>
            <delta_ts>2012-04-23 14:23:01 -0700</delta_ts>
            <desc>Filled in the V8 code</desc>
            <filename>blob-constructor.patch</filename>
            <type>text/plain</type>
            <size>48918</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">Y29tbWl0IDQyYTljNmUzZDQ0YTY4ZjczMjE4YTFhODVjNTQ3NzUzMDBkMDkxNzAKQXV0aG9yOiBL
aW51a28gWWFzdWRhIDxraW51a29AY2hyb21pdW0ub3JnPgpEYXRlOiAgIE1vbiBBcHIgMjMgMTc6
MTY6MzYgMjAxMiArMDkwMAoKICAgIEFkZGluZyBCbG9iIENvbnN0cnVjdG9yCgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDNi
ODliYzEuLjBjMjFkZTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMi0wNC0yMyAgS2ludWtv
IFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkaW5nIEJsb2IgQ29u
c3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg0NTU1CisKKyAgICAgICAgUmV3cml0ZSBibG9iLXJlbGF0ZWQgdGVzdHMgd2l0aCBCbG9iQnVp
bGRlciB0byB1c2UgdGhlIG5ldyBCbG9iIGNvbnN0cnVjdG9yLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vSFRNTEFuY2hvckVsZW1l
bnQvYW5jaG9yLWRvd25sb2FkLXVuc2V0Lmh0bWw6CisgICAgICAgICogZmFzdC9kb20vSFRNTEFu
Y2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLmh0bWw6CisgICAgICAgICogZmFzdC9kb20vSFRN
TEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0Lmh0bWw6CisgICAgICAgICogZmFz
dC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQuaHRtbDoKKyAgICAgICAg
KiBmYXN0L2RvbS93aW5kb3ctZG9tdXJsLWNyYXNoLmh0bWw6CisgICAgICAgICogZmFzdC9maWxl
cy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWw6CisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLXNs
aWNlLXRlc3QuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2Itd2l0aC1udWxsLWNyYXNo
LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1i
dWlsZGVyLWNyYXNoLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2Itd2l0
aC1udWxsLWNyYXNoLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Js
b2ItYnVpbGRlci1jcmFzaC5odG1sLgorICAgICAgICAqIGZhc3QvZmlsZXMvZmlsZS1yZWFkZXIt
ZmZmZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9maWxlLXJlYWRlci1mZmZk
Lmh0bWw6CisgICAgICAgICogZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy5odG1sOgor
ICAgICAgICAqIGZhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzOgor
ICAgICAgICAqIGZhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzOgorICAgICAgICAq
IGZhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZpYS1ibG9iLXVybC5odG1sOgorICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGlu
dWUuanM6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1h
Ym9ydC1kZXB0aC5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUt
d3JpdGVyLWFib3J0LmpzOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmls
ZS13cml0ZXItZXZlbnRzLmpzOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS13cml0ZXItZ2MtYmxvYi5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3Vy
Y2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1bmNhdGUtZXh0ZW5kLmpzOgorICAgICAgICAqIGZhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpz
OgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMu
anM6CisgICAgICAgICogaHR0cC90ZXN0cy9maWxlYXBpL2NyZWF0ZS1ibG9iLXVybC1mcm9tLWRh
dGEtdXJsLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL25vLWNhY2hlLWZp
bGVzeXN0ZW0tdXJsLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291
cmNlcy9oeWJyaWQtYmxvYi11dGlsLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
ZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbDoK
KyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0
Lmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJl
ZEFtb3VudC1hZnRlci1jbG9zZS1pbi1idXN5Lmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sOgorICAg
ICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWw6Cisg
ICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1m
YWlsLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWZpbGUtYmxvYi5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHN0b3JhZ2UvaW5kZXhlZGRiL25vYmxvYnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0
b3JhZ2UvaW5kZXhlZGRiL25vYmxvYnMuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRk
Yi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWw6CisKIDIwMTItMDQtMjIgIE1pa2hhaWwgTmFnYW5vdiAg
PG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQg
dGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLXVuc2V0Lmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQtdW5zZXQuaHRt
bAppbmRleCA2MzIxYjljLi4wMThiMzQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQtdW5zZXQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQtdW5zZXQu
aHRtbApAQCAtMjQsOSArMjQsOCBAQCBmdW5jdGlvbiBjbGljayhlbG10KQogCiBmdW5jdGlvbiBy
dW5UZXN0KCkKIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBi
Yi5hcHBlbmQoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+
PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+
PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7Ci0gICAgdmFyIGJsb2Ig
PSBiYi5nZXRCbG9iKCJ0ZXh0L2h0bWwiLCAiaW5saW5lIik7CisgICAgdmFyIHN0cmluZyA9ICI8
IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiI7CisgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihb
c3RyaW5nXSwge3R5cGU6ICJ0ZXh0L2h0bWwifSk7CiAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYmxvYi11cmwiKTsKICAgICBsaW5rLmhyZWYgPSB3aW5kb3cud2Via2l0
VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgnZG93
bmxvYWQnKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVt
ZW50L2FuY2hvci1kb3dubG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hv
ckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLmh0bWwKaW5kZXggYzgzNzdmOS4uOTA2MTAxNCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRv
d25sb2FkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQv
YW5jaG9yLWRvd25sb2FkLmh0bWwKQEAgLTI0LDkgKzI0LDggQEAgZnVuY3Rpb24gY2xpY2soZWxt
dCkKIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0
bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48
Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiIp
OwotICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigidGV4dC9odG1sIiwgImlubGluZSIpOworICAg
IHZhciBzdHJpbmcgPSAiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90
aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwv
Ym9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iOworICAgIHZhciBi
bG9iID0gbmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAidGV4dC9odG1sIn0pOwogICAgIHZhciBs
aW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsb2ItdXJsIik7CiAgICAgbGluay5ocmVm
ID0gd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgY2xpY2sobGlu
ayk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9h
bmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNo
b3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLXNldC5odG1sCmluZGV4IGQwYjQyYWYuLjU0NTJh
MmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2Fu
Y2hvci1ub2Rvd25sb2FkLXNldC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxB
bmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLXNldC5odG1sCkBAIC0yNCw5ICsyNCw4IEBA
IGZ1bmN0aW9uIGNsaWNrKGVsbXQpCiAKIGZ1bmN0aW9uIHJ1blRlc3QoKQogewotICAgIHZhciBi
YiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgiPCFkb2N0eXBlIGh0
bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8i
ICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3Nj
ciIgKyAiaXB0PjwvaHRtbD4iKTsKLSAgICB2YXIgYmxvYiA9IGJiLmdldEJsb2IoInRleHQvaHRt
bCIsICJpbmxpbmUiKTsKKyAgICB2YXIgc3RyaW5nID0gIjwhZG9jdHlwZSBodG1sPjxodG1sPjxo
ZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+
PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48
L2h0bWw+IjsKKyAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtzdHJpbmddLCB7dHlwZTogInRleHQv
aHRtbCJ9KTsKICAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJibG9iLXVy
bCIpOwogICAgIGxpbmsuaHJlZiA9IHdpbmRvdy53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKGJs
b2IpOwogICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcpOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25s
b2FkLmh0bWwKaW5kZXggZjkxZWRjMS4uZGNkMTAwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC5o
dG1sCkBAIC0yNCw5ICsyNCw4IEBAIGZ1bmN0aW9uIGNsaWNrKGVsbXQpCiAKIGZ1bmN0aW9uIHJ1
blRlc3QoKQogewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJi
LmFwcGVuZCgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48
c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48
c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iKTsKLSAgICB2YXIgYmxvYiA9
IGJiLmdldEJsb2IoInRleHQvaHRtbCIsICJpbmxpbmUiKTsKKyAgICB2YXIgc3RyaW5nID0gIjwh
ZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+IjsKKyAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtz
dHJpbmddLCB7dHlwZTogInRleHQvaHRtbCJ9KTsKICAgICB2YXIgbGluayA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJibG9iLXVybCIpOwogICAgIGxpbmsuaHJlZiA9IHdpbmRvdy53ZWJraXRV
UkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgIGNsaWNrKGxpbmspOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vd2luZG93LWRvbXVybC1jcmFzaC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vd2luZG93LWRvbXVybC1jcmFzaC5odG1sCmluZGV4IDdkNWMwNGMuLjNiOGZk
NzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2gu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS93aW5kb3ctZG9tdXJsLWNyYXNoLmh0bWwK
QEAgLTEsNyArMSw3IEBACiA8aHRtbD4NCiA8aGVhZD4NCiA8c2NyaXB0Pg0KLXZhciBibG9iID0g
KG5ldyBXZWJLaXRCbG9iQnVpbGRlcikuZ2V0QmxvYigpOw0KK3ZhciBibG9iID0gbmV3IEJsb2Io
W10pOw0KIHZhciB1cmwgPSBudWxsOw0KIHZhciBjb3VudCA9IDA7DQogDQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2gtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2gtZXhwZWN0ZWQudHh0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MThhYWE2Li4wMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNoLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDMgKzAsMCBAQAotVGVzdCB0aGF0IGNhbGxpbmcgV2ViS2l0QmxvYkJ1aWxk
ZXIuYXBwZW5kIHdpdGggbnVsbCB2YWx1ZSBzaG91bGQgbm90IGNhdXNlIGNyYXNoLgotRE9ORQot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItYnVpbGRlci1jcmFzaC5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2guaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI2NjRiMS4uMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItYnVpbGRlci1jcmFzaC5odG1sCisrKyAvZGV2L251bGwKQEAg
LTEsMjYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdD4K
LWZ1bmN0aW9uIGxvZyhtZXNzYWdlKQotewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSArICJc
biIpKTsKLX0KLQotZnVuY3Rpb24gdGVzdCgpCi17Ci0gICAgbG9nKCJUZXN0IHRoYXQgY2FsbGlu
ZyBXZWJLaXRCbG9iQnVpbGRlci5hcHBlbmQgd2l0aCBudWxsIHZhbHVlIHNob3VsZCBub3QgY2F1
c2UgY3Jhc2guIik7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsK
LSAgICBidWlsZGVyLmFwcGVuZChudWxsKTsKLQotICAgIGxvZygiRE9ORSIpOwotfQotCi1pZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgot
PHByZSBpZD0nY29uc29sZSc+PC9wcmU+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sCmluZGV4IGVjOGZhOGMuLmEz
ZWU3YzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVy
Zmxvdy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxv
dy5odG1sCkBAIC01LDE5ICs1LDIyIEBAIGEgdHJ1bmNhdGVkIHNsaWNlIGJlaW5nIHJldHVybmVk
LgogPHByZSBpZD0nY29uc29sZSc+PC9wcmU+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgewotICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0g
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCkKIH0KLXZhciBidWlsZGVyID0gIG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworCiB2YXIg
dGV4dCA9ICcnOwotZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwOyArK2kpIHRleHQgKz0gJ0EnOwot
YnVpbGRlci5hcHBlbmQodGV4dCk7Ci1ibG9iID0gYnVpbGRlci5nZXRCbG9iKCk7Citmb3IgKHZh
ciBpID0gMDsgaSA8IDIwMDA7ICsraSkKKyAgICB0ZXh0ICs9ICdBJzsKKworYmxvYiA9IG5ldyBC
bG9iKFt0ZXh0XSk7CiBzbGljZWRCbG9iID0gYmxvYi53ZWJraXRTbGljZSgxOTk5LCA5MjIzMzcy
MDM2ODU0Nzc1MDAwKTsKKwogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQmxvYiBzbGljZSBsZW5ndGg6ICcgKyBz
bGljZWRCbG9iLnNpemUpKTsKIGlmIChzbGljZWRCbG9iLnNpemUgIT0gMSkgewotICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCdGQUlMJykpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0ZBSUwnKSk7CiB9CisKIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNs
aWNlLXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS10ZXN0Lmh0
bWwKaW5kZXggNTYwNDhkYS4uMGM4Y2QxNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9ibG9iLXNsaWNlLXRlc3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Js
b2Itc2xpY2UtdGVzdC5odG1sCkBAIC04Miw5ICs4Miw3IEBAIGZ1bmN0aW9uIHJ1bk5leHRUZXN0
KCkKIAogZnVuY3Rpb24gcnVuVGVzdHMoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktp
dEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3ODkiKTsKLSAgICBi
bG9iID0gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgYmxvYiA9IG5ldyBCbG9iKFsiMDEyMzQ1Njc4
OSJdKTsKIAogICAgIHJ1bk5leHRUZXN0KCk7CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL2Jsb2Itd2l0aC1udWxsLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvYmxvYi13aXRoLW51bGwtY3Jhc2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTFlODAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itd2l0aC1udWxsLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBjb25zdHJ1Y3RpbmcgQmxvYiB3aXRoIG51bGwgdmFsdWUg
c2hvdWxkIG5vdCBjYXVzZSBjcmFzaC4KK0RPTkUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjZmNzVlYzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzL2Jsb2Itd2l0aC1udWxsLWNyYXNoLmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQor
eworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSArICJcbiIpKTsKK30KKworZnVuY3Rpb24gdGVz
dCgpCit7CisgICAgbG9nKCJUZXN0IHRoYXQgY29uc3RydWN0aW5nIEJsb2Igd2l0aCBudWxsIHZh
bHVlIHNob3VsZCBub3QgY2F1c2UgY3Jhc2guIik7CisgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihb
bnVsbF0pOworCisgICAgbG9nKCJET05FIik7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKSI+Cis8cHJlIGlkPSdjb25zb2xlJz48
L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXMvZmlsZS1yZWFkZXItZmZmZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L2ZpbGUtcmVhZGVyLWZmZmQtZXhwZWN0ZWQudHh0CmluZGV4IGNjMTI0YTUuLjQ1Zjk3YzcgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmZmZC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1mZmZkLWV4cGVj
dGVkLnR4dApAQCAtMiw5ICsyLDggQEAgVGhyb3cgdmFyaW91cyBiYWQgYnl0ZXMgYXQgZmlsZSBy
ZWFkZXIuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAotYmIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoWzY1LCAyNDUsIDI0NiwgMjQ3LCAy
NDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgNjZdKTsKLWJsb2IgPSBidWls
ZEJsb2IoW2FycmF5LmJ1ZmZlcl0pOworYmxvYiA9IG5ldyBCbG9iKFthcnJheS5idWZmZXJdKTsK
IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiByZWFkZXIucmVhZEFzVGV4dChibG9iKTsKIFBB
U1MgZmlsZVN0cmluZyBpcyAnQe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vUInCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmZmZC5odG1sCmluZGV4IDBiNGZm
MWEuLmVhY2EyNGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFk
ZXItZmZmZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmZm
ZC5odG1sCkBAIC0xMCw5ICsxMCw4IEBACiA8c2NyaXB0PgogZGVzY3JpcHRpb24oIlRocm93IHZh
cmlvdXMgYmFkIGJ5dGVzIGF0IGZpbGUgcmVhZGVyLiIpOwogCi1iYiA9IGV2YWxBbmRMb2coImJi
ID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Iik7CiBhcnJheSA9IGV2YWxBbmRMb2coImFycmF5
ID0gbmV3IFVpbnQ4QXJyYXkoWzY1LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEs
IDI1MiwgMjUzLCAyNTQsIDI1NSwgNjZdKTsiKTsKLWJsb2IgPSBldmFsQW5kTG9nKCJibG9iID0g
YnVpbGRCbG9iKFthcnJheS5idWZmZXJdKTsiKTsKK2Jsb2IgPSBldmFsQW5kTG9nKCJibG9iID0g
bmV3IEJsb2IoW2FycmF5LmJ1ZmZlcl0pOyIpOwogcmVhZGVyID0gZXZhbEFuZExvZygicmVhZGVy
ID0gbmV3IEZpbGVSZWFkZXIoKTsiKTsKIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkg
ewogICBmaWxlU3RyaW5nID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy1leHBlY3RlZC50eHQKaW5k
ZXggYWNmYmFlMC4uZTNiNWRlNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9u
b3QtZW5vdWdoLWFyZ3VtZW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy1leHBlY3RlZC50eHQKQEAgLTcsNyArNyw3IEBAIFBB
U1MgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
Tm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KIFBBU1MgcmVh
ZGVyLnJlYWRBc1RleHQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFy
Z3VtZW50cy4KIFBBU1MgcmVhZGVyLnJlYWRBc0RhdGFVUkwoKSB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgYmxvYkJ1aWxkZXIuYXBwZW5kKCkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KK1BBU1MgbmV3IEJsb2IoKSB0
aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgogUEFTUyBm
aWxlSW5wdXQuZmlsZXMuaXRlbSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91
Z2ggYXJndW1lbnRzLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL25vdC1lbm91Z2gtYXJndW1lbnRzLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL25vdC1lbm91Z2gtYXJndW1lbnRzLmh0bWwKaW5kZXggMDE5
YTlmMS4uNTkxNTUzZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ub3QtZW5v
dWdoLWFyZ3VtZW50cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3Vn
aC1hcmd1bWVudHMuaHRtbApAQCAtMTUsOSArMTUsNyBAQCBzaG91bGRUaHJvdygncmVhZGVyLnJl
YWRBc0JpbmFyeVN0cmluZygpJyk7CiBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc1RleHQoKScp
Owogc2hvdWxkVGhyb3coJ3JlYWRlci5yZWFkQXNEYXRhVVJMKCknKTsKIAotdmFyIGJsb2JCdWls
ZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0KLXNob3VsZFRocm93KCdibG9iQnVpbGRl
ci5hcHBlbmQoKScpOworc2hvdWxkVGhyb3coJ25ldyBCbG9iKCknKTsKIAogdmFyIGZpbGVJbnB1
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWJsb2ItdGVzdC1jYXNl
cy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNh
c2VzLmpzCmluZGV4IDgxOWNhMDAuLmZmMGY0ODEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCkBAIC0xNzAs
MTEgKzE3MCwxMSBAQCBmdW5jdGlvbiB0ZXN0UmVhZGluZ1NsaWNlZEh5YnJpZEJsb2IodGVzdEZp
bGVzKQogZnVuY3Rpb24gdGVzdFJlYWRpbmdUcmlwbGVTbGljZWRIeWJyaWRCbG9iKHRlc3RGaWxl
cykKIHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhIHRyaXBsZS1zbGljZWQgaHlicmlkIGJsb2Ii
KTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwogICAgIHZhciBh
cnJheSA9IG5ldyBVaW50OEFycmF5KFs0OCwgNDksIDUwXSk7Ci0gICAgdmFyIGJsb2IgPSBidWls
ZEJsb2IoWydGaXJzdCcsIHRlc3RGaWxlc1snZmlsZTEnXS53ZWJraXRTbGljZSgxLCAxMSksIHRl
c3RGaWxlc1snZW1wdHktZmlsZSddLCAnU2Vjb25kJywgdGVzdEZpbGVzWydmaWxlMiddLCB0ZXN0
RmlsZXNbJ2ZpbGUzJ10sICdUaGlyZCcsIGFycmF5LmJ1ZmZlcl0sIHVuZGVmaW5lZCwgYnVpbGRl
cik7CisgICAgdmFyIGl0ZW1zID0gWydGaXJzdCcsIHRlc3RGaWxlc1snZmlsZTEnXS53ZWJraXRT
bGljZSgxLCAxMSksIHRlc3RGaWxlc1snZW1wdHktZmlsZSddLCAnU2Vjb25kJywgdGVzdEZpbGVz
WydmaWxlMiddLCB0ZXN0RmlsZXNbJ2ZpbGUzJ10sICdUaGlyZCcsIGFycmF5LmJ1ZmZlcl07Cisg
ICAgdmFyIGJsb2IgPSBidWlsZEJsb2IoaXRlbXMpOwogICAgIHZhciBibG9iID0gYmxvYi53ZWJr
aXRTbGljZSg3LCAxOSk7Ci0gICAgdmFyIGJsb2IyID0gYnVpbGRCbG9iKFsnRm9vJywgYmxvYiwg
J0JhciddLCB1bmRlZmluZWQsIGJ1aWxkZXIpOworICAgIHZhciBibG9iMiA9IGJ1aWxkQmxvYihp
dGVtcy5jb25jYXQoWydGb28nLCBibG9iLCAnQmFyJ10pKTsKICAgICB2YXIgYmxvYjIgPSBibG9i
Mi53ZWJraXRTbGljZSgxMiwgNDIpOwogICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZp
bGVzLCBibG9iMik7CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291
cmNlcy9yZWFkLWNvbW1vbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3Jl
YWQtY29tbW9uLmpzCmluZGV4IDA3MTI1YTUuLmJhYzc5OWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCkBAIC0xLDEzICsxLDExIEBACiAv
LyBCdWlsZHMgYSBibG9iIGZyb20gYSBsaXN0IG9mIGl0ZW1zLgogLy8gVGhlICdjb250ZW50VHlw
ZScgYXJndW1lbnQgaXMgb3B0aW9uYWwuCiAvLyBJZiB0aGUgJ2J1aWxkZXInIGFyZ3VtZW50IGlz
IG5vdCBwcm92aWRlZCwgY3JlYXRlIGEgbmV3IG9uZS4KLWZ1bmN0aW9uIGJ1aWxkQmxvYihpdGVt
cywgY29udGVudFR5cGUsIGJ1aWxkZXIpCitmdW5jdGlvbiBidWlsZEJsb2IoaXRlbXMsIGNvbnRl
bnRUeXBlKQogewotICAgIGlmIChidWlsZGVyID09PSB1bmRlZmluZWQpCi0gICAgICAgIGJ1aWxk
ZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0
ZW1zLmxlbmd0aDsgaSsrKQotICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVtc1tpXSk7Ci0gICAg
cmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYihjb250ZW50VHlwZSk7CisgICAgaWYgKGNvbnRlbnRUeXBl
ID09PSB1bmRlZmluZWQpCisgICAgICAgIHJldHVybiBuZXcgQmxvYihpdGVtcyk7CisgICAgcmV0
dXJuIG5ldyBCbG9iKGl0ZW1zLCB7dHlwZTpjb250ZW50VHlwZX0pOwogfQogCiAvLyBSZWFkcyBh
IGJsb2IgZWl0aGVyIGFzeW5jaHJvbm91c2x5IG9yIHN5bmNocm9ub3VzbHkuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvaW5saW5lLXdvcmtlci12aWEtYmxvYi11
cmwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZp
YS1ibG9iLXVybC5odG1sCmluZGV4IDNiYWNjZGEuLjA1MzBiOTQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZpYS1ibG9iLXVybC5odG1s
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZpYS1i
bG9iLXVybC5odG1sCkBAIC0xMCwxMyArMTAsMTIgQEAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCiBm
dW5jdGlvbiBydW5UZXN0KCkKIHsKICAgICBsb2coIlRlc3QgaW5saW5lIHdlYiB3b3JrZXIgdmlh
IGJsb2IgVVJMLiIpOwotICAgIHZhciBibG9iQnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOwotICAgIGJsb2JCdWlsZGVyLmFwcGVuZChbCisgICAgdmFyIHN0cmluZyA9IFsKICAgICAg
ICAgIm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsiLAogICAgICAgICAiICAgIHBvc3RNZXNzYWdl
KCdIZWxsbyBmcm9tIHdvcmtlcicpOyIsCiAgICAgICAgICJ9OyIKLSAgICBdLmpvaW4oJ1xuJykp
OwotICAgIHZhciBibG9iVVJMID0gd2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iQnVpbGRl
ci5nZXRCbG9iKCkpOworICAgIF0uam9pbignXG4nKTsKKyAgICB2YXIgYmxvYlVSTCA9IHdlYmtp
dFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3N0cmluZ10pKTsKICAgICB2YXIgd29ya2Vy
ID0gbmV3IFdvcmtlcihibG9iVVJMKTsKICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24o
ZXZlbnQpIHsKICAgICAgICAgbG9nKGV2ZW50LmRhdGEpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5q
cyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJv
cnQtY29udGludWUuanMKaW5kZXggYjVjZWI0YS4uMTc5MTZkYiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51
ZS5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLWFib3J0LWNvbnRpbnVlLmpzCkBAIC01MiwxMSArNTIsMTEgQEAgZnVuY3Rpb24gbm9wKCkg
ewogfQogCiBmdW5jdGlvbiB0ZW5YQmxvYihibG9iKSB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktp
dEJsb2JCdWlsZGVyKCk7CisgICAgdmFyIGJiID0gW107CiAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDsgKytpKSB7Ci0gICAgICAgIGJiLmFwcGVuZChibG9iKTsKKyAgICAgICAgYmIucHVzaChi
bG9iKTsKICAgICB9Ci0gICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJs
b2IoYmIpOwogfQogCiAvLyBUaGVzZSBtZXRob2RzIHNldCB1cCBhIHdyaXRlLCBhYm9ydCBpdCBh
cyBzb29uIGFzIGl0IHN0YXJ0cywgdGhlbiBpbml0aWF0ZQpAQCAtOTEsOSArOTEsNyBAQCBmdW5j
dGlvbiBjaGVja0xlbmd0aEFuZENvbXBsZXRlVGVzdChlKSB7CiAKIGZ1bmN0aW9uIHN0YXJ0V3Jp
dGUoKSB7CiAgICAgLy8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgIHZhciBi
YiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0i
KTsKLSAgICB2YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgdmFyIGJsb2Ig
PSB0ZW5YQmxvYihuZXcgQmxvYihbImxvcmVtIGlwc3VtIl0pKTsKICAgICBibG9iID0gdGVuWEJs
b2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxv
YihibG9iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzCmluZGV4IGVhOGI2MzguLjk3
YjEyMGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcwpAQCAtMTAsOSArMTAsNyBA
QCB2YXIgc2F3V3JpdGVTdGFydDsKIHZhciBzYXdBYm9ydDsKIHZhciBzYXdXcml0ZUVuZDsKIHZh
ciB3cml0ZXI7Ci12YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLWJiLmFwcGVuZCgi
bG9yZW0gaXBzdW0iKTsKLXZhciBibG9iID0gYmIuZ2V0QmxvYigpOwordmFyIGJsb2IgPSBuZXcg
QmxvYihbImxvcmVtIGlwc3VtIl0pOwogdmFyIHJlY3Vyc2lvbkRlcHRoID0gMDsKIHZhciBtZXRo
b2Q7CiB2YXIgdGVzdHNSdW4gPSAwOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQuanMKaW5kZXggMmM0MTA3YS4u
NDk5YTdkZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNl
cy9maWxlLXdyaXRlci1hYm9ydC5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzCkBAIC0xMiwxMSArMTIsMTEgQEAgdmFyIHNh
d1dyaXRlRW5kOwogdmFyIHdyaXRlcjsKIAogZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgewotICAg
IHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIHZhciBiYiA9IFtdOwogICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAgICBiYi5hcHBlbmQoYmxvYik7
CisgICAgICAgIGJiLnB1c2goYmxvYik7CiAgICAgfQotICAgIHJldHVybiBiYi5nZXRCbG9iKCk7
CisgICAgcmV0dXJuIG5ldyBCbG9iKGJiKTsKIH0KIAogZnVuY3Rpb24gb25Xcml0ZVN0YXJ0KGUp
IHsKQEAgLTYyLDkgKzYyLDcgQEAgZnVuY3Rpb24gb25Xcml0ZUVuZChlKSB7CiAKIGZ1bmN0aW9u
IHN0YXJ0V3JpdGUoZmlsZVdyaXRlcikgewogICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBt
ZWdhYnl0ZS4KLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5h
cHBlbmQoImxvcmVtIGlwc3VtIik7Ci0gICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9i
KCkpOworICAgIHZhciBibG9iID0gdGVuWEJsb2IobmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKSk7
CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsK
ICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCmluZGV4IGM4
OGUwZmIuLmRmOWU2YWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9y
ZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCkBAIC0xNiwxMSArMTYsMTEg
QEAgdmFyIGxhc3RQcm9ncmVzcyA9IDA7CiB2YXIgdG9CZVdyaXR0ZW47CiAKIGZ1bmN0aW9uIHRl
blhCbG9iKGJsb2IpIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAg
ICB2YXIgYmIgPSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAg
ICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICBiYi5wdXNoKGJsb2IpOwogICAgIH0KLSAgICBy
ZXR1cm4gYmIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihiYik7CiB9CiAKIGZ1bmN0
aW9uIG9uV3JpdGVTdGFydChlKSB7CkBAIC03OCw5ICs3OCw3IEBAIGZ1bmN0aW9uIG9uV3JpdGVF
bmQoZSkgewogCiBmdW5jdGlvbiBzdGFydFdyaXRlKGZpbGVXcml0ZXIpIHsKICAgICAvLyBMZXQn
cyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCi0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOwotICAgIHZhciBibG9iID0g
dGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKKyAgICB2YXIgYmxvYiA9IHRlblhCbG9iKG5ldyBCbG9i
KFsibG9yZW0gaXBzdW0iXSkpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9i
ID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1i
bG9iLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRl
ci1nYy1ibG9iLmpzCmluZGV4IDg0YmJhYmIuLjQ4ZmI3NWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcworKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJs
b2IuanMKQEAgLTE0LDE4ICsxNCwxNiBAQCBmdW5jdGlvbiBvblRlc3RTdWNjZXNzKCkgewogfQog
CiBmdW5jdGlvbiB0ZW5YQmxvYihibG9iKSB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7CisgICAgdmFyIGJiID0gW107CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsg
KytpKSB7Ci0gICAgICAgIGJiLmFwcGVuZChibG9iKTsKKyAgICAgICAgYmIucHVzaChibG9iKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoYmIp
OwogfQogCiBmdW5jdGlvbiBzdGFydFdyaXRlKHdyaXRlcikgewogICAgIC8vIExldCdzIG1ha2Ug
aXQgYWJvdXQgYSBtZWdhYnl0ZS4KLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIo
KTsKLSAgICBiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0gICAgdmFyIGJsb2IgPSB0ZW5YQmxv
YihiYi5nZXRCbG9iKCkpOworICAgIHZhciBibG9iID0gdGVuWEJsb2IobmV3IEJsb2IoWyJsb3Jl
bSBpcHN1bSJdKSk7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5Y
QmxvYihibG9iKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1bmNh
dGUtZXh0ZW5kLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVuZC5qcwppbmRleCAzZGY5OTEzLi44ZmJiMDE0IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLXN5bmMtdHJ1bmNhdGUtZXh0ZW5kLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy10cnVuY2F0ZS1leHRlbmQuanMKQEAgLTE1
LDEwICsxNSw4IEBAIHJlbW92ZUFsbEluRGlyZWN0b3J5U3luYyhmaWxlU3lzdGVtLnJvb3QpOwog
dmFyIGVudHJ5ID0gZmlsZVN5c3RlbS5yb290LmdldEZpbGUoJ2EnLCB7Y3JlYXRlOnRydWUsIGV4
Y2x1c2l2ZTp0cnVlfSk7CiB2YXIgd3JpdGVyID0gZW50cnkuY3JlYXRlV3JpdGVyKCk7CiBhc3Nl
cnQoIXdyaXRlci5wb3NpdGlvbik7Ci12YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOwogdmFyIHRlc3REYXRhID0gInRlc3QgZGF0YSI7Ci1idWlsZGVyLmFwcGVuZCh0ZXN0RGF0
YSk7Ci13cml0ZXIud3JpdGUoYnVpbGRlci5nZXRCbG9iKCkpOword3JpdGVyLndyaXRlKG5ldyBC
bG9iKFt0ZXN0RGF0YV0pKTsKIGFzc2VydCh3cml0ZXIubGVuZ3RoID09IHRlc3REYXRhLmxlbmd0
aCk7CiBhc3NlcnQod3JpdGVyLnBvc2l0aW9uID09IHdyaXRlci5sZW5ndGgpOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5
bmMtd3JpdGUtb3ZlcmxhcHBlZC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZmlsZS13cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpzCmluZGV4IDhmMWVkOWEu
LjZlM2Q1N2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpzCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy13cml0ZS1vdmVybGFw
cGVkLmpzCkBAIC0xNSwxMCArMTUsOCBAQCByZW1vdmVBbGxJbkRpcmVjdG9yeVN5bmMoZmlsZVN5
c3RlbS5yb290KTsKIHZhciBlbnRyeSA9IGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKCdhJywge2Ny
ZWF0ZTp0cnVlLCBleGNsdXNpdmU6dHJ1ZX0pOwogdmFyIHdyaXRlciA9IGVudHJ5LmNyZWF0ZVdy
aXRlcigpOwogYXNzZXJ0KCF3cml0ZXIucG9zaXRpb24pOwotdmFyIGJ1aWxkZXIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKIHZhciB0ZXN0RGF0YSA9ICJ0ZXN0IGRhdGEiOwotYnVpbGRlci5h
cHBlbmQodGVzdERhdGEpOwotdmFyIGJsb2IgPSBidWlsZGVyLmdldEJsb2IoKTsKK3ZhciBibG9i
ID0gbmV3IEJsb2IoW3Rlc3REYXRhXSk7CiB3cml0ZXIud3JpdGUoYmxvYik7CiBhc3NlcnQod3Jp
dGVyLmxlbmd0aCA9PSB0ZXN0RGF0YS5sZW5ndGgpOwogYXNzZXJ0KHdyaXRlci5wb3NpdGlvbiA9
PSB3cml0ZXIubGVuZ3RoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9yZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzCmluZGV4IDlhYzg0NDAuLmUyNmNl
YWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmls
ZS13cml0ZXItdXRpbHMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci11dGlscy5qcwpAQCAtMTM0LDkgKzEzNCw3IEBAIGZ1bmN0aW9uIGNy
ZWF0ZUVtcHR5RmlsZShmaWxlU3lzdGVtLCBmaWxlTmFtZSwgb25TdWNjZXNzKQogCiBmdW5jdGlv
biB3cml0ZVN0cmluZyhmaWxlRW50cnksIGZpbGVXcml0ZXIsIG9mZnNldCwgZGF0YSwgb25TdWNj
ZXNzKQogewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFw
cGVuZChkYXRhKTsKLSAgICB2YXIgYmxvYiA9IGJiLmdldEJsb2IoKTsKKyAgICB2YXIgYmxvYiA9
IG5ldyBCbG9iKFtkYXRhXSk7CiAgICAgZmlsZVdyaXRlci5zZWVrKG9mZnNldCk7CiAgICAgZmls
ZVdyaXRlci53cml0ZShibG9iKTsKICAgICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlYXBpL2NyZWF0ZS1ibG9iLXVy
bC1mcm9tLWRhdGEtdXJsLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVhcGkvY3Jl
YXRlLWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbAppbmRleCAwNGM5YmUwLi4zODA4NTFjIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVhcGkvY3JlYXRlLWJsb2ItdXJs
LWZyb20tZGF0YS11cmwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVhcGkv
Y3JlYXRlLWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbApAQCAtMjgsNiArMjgsNiBAQCB2YXIg
dCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiA8Ym9keT4KIDxwPiBUZXN0IGNhc2UgZm9yIGNo
ZWNraW5nIGJsb2IgVVJMIG5vdCBhbGxvd2VkIHRvIGJlIGNyZWF0ZWQgZnJvbSB0aGUgY29kZSBy
dW5uaW5nIGZyb20gZGF0YSBVUkk8L3A+CiA8cHJlIGlkPSdjb25zb2xlJz48L3ByZT4KLTxpZnJh
bWUgc3JjPSJkYXRhOnRleHQvaHRtbCwlM0NzY3JpcHQlM0V2YXIlMjBiJTIwJTNEJTIwbmV3JTIw
V2ViS2l0QmxvYkJ1aWxkZXIoKSUzQmIuYXBwZW5kKCUyMkZvbyUyMiklM0J2YXIlMjBiYiUyMCUz
RCUyMGIuZ2V0QmxvYigndGV4dCUyRmh0bWwnKSUzQnRvcC5sb2NhdGlvbiUzRCdodHRwJTNBJTJG
JTJGMTI3LjAuMC4xJTNBODAwMCUyRmZpbGVhcGklMkZjcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRh
LXVybC5odG1sJTIzJyUyMCUyQiUyMHdpbmRvdy53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKGJi
KSUzQiUzQyUyRnNjcmlwdCUzRSI+PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0iZGF0YTp0ZXh0L2h0
bWwsJTNDc2NyaXB0JTNFdmFyJTIwYmIlMjAlM0QlMjBuZXclMjBCbG9iJTI4JTVCJTIyRm9vJTIy
JTVEJTJDJTIwJTdCdHlwZSUzQSUyMnRleHQlMkZodG1sJTIyJTdEJTI5JTNCdG9wLmxvY2F0aW9u
JTNEJTI3aHR0cCUzQSUyRiUyRjEyNy4wLjAuMSUzQTgwMDAlMkZmaWxlYXBpJTJGY3JlYXRlLWJs
b2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbCUyMyUyNyUyMCUyQiUyMHdpbmRvdy53ZWJraXRVUkwu
Y3JlYXRlT2JqZWN0VVJMJTI4YmIlMjklM0IlM0MlMkZzY3JpcHQlM0UiPjwvaWZyYW1lPgogPC9i
b2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lz
dGVtL25vLWNhY2hlLWZpbGVzeXN0ZW0tdXJsLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbAppbmRleCBlYzE2YTU0Li5h
ZDRhZGQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vbm8t
Y2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Zp
bGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbApAQCAtMjQsOSArMjQsNyBAQAog
ICAgICAgd3JpdGVyLm9ud3JpdGVlbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgY2FsbGJhY2so
cmFuZCk7CiAgICAgICB9OwotICAgICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7
Ci0gICAgICBiYi5hcHBlbmQoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5l
ckhUTUwgPSAoZXhwZWN0ZWQgPT0gJyArIHJhbmQgKyAnKSA/ICJTVUNDRVNTIiA6ICJGQUlMVVJF
IjsnKTsKLSAgICAgIHdyaXRlci53cml0ZShiYi5nZXRCbG9iKCd0ZXh0L3BsYWluJykpOworICAg
ICAgd3JpdGVyLndyaXRlKG5ldyBCbG9iKFsnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3Vs
dCIpLmlubmVySFRNTCA9IChleHBlY3RlZCA9PSAnICsgcmFuZCArICcpID8gIlNVQ0NFU1MiIDog
IkZBSUxVUkUiOyddLCB7dHlwZTondGV4dC9wbGFpbid9KSk7CiAgICAgfQogCiAgICAgZ2V0Rmls
ZVdyaXRlcihmdW5jdGlvbihmaWxlLCB3cml0ZXIpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9jYWwvYmxvYi9yZXNvdXJjZXMvaHlicmlkLWJsb2ItdXRpbC5qcyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvYmxvYi9yZXNvdXJjZXMvaHlicmlkLWJsb2ItdXRp
bC5qcwppbmRleCAwNjE1OTk2Li42ZDNlOTg2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvY2FsL2Jsb2IvcmVzb3VyY2VzL2h5YnJpZC1ibG9iLXV0aWwuanMKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291cmNlcy9oeWJyaWQtYmxvYi11dGls
LmpzCkBAIC0xMzEsMTYgKzEzMSwxOSBAQCB2YXIgSHlicmlkQmxvYlRlc3RVdGlsID0gZnVuY3Rp
b24odGVzdEZ1bmMsIG9wdF9maWxlUGF0aHMpIHsKIAogICAgIHRoaXMuYXBwZW5kQW5kQ3JlYXRl
QmxvYiA9IGZ1bmN0aW9uKGl0ZW1zLCBvcHRfZW5kaW5nLCBvcHRfdHlwZSkKICAgICB7Ci0gICAg
ICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgICAgICB2YXIgYnVpbGRl
ciA9IFtdOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7
CiAgICAgICAgICAgICBpZiAoaXRlbXNbaV0gaW5zdGFuY2VvZiBBcnJheSkgewogICAgICAgICAg
ICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIGNvbWJpbmUgaXRzIGVsZW1lbnRzIGFuZCBhcHBl
bmQgYXMgYSBibG9iLgotICAgICAgICAgICAgICAgIGJiLmFwcGVuZCh0aGlzLmFwcGVuZEFuZENy
ZWF0ZUJsb2IoaXRlbXNbaV0sIG9wdF9lbmRpbmcsIG9wdF90eXBlKSk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGl0ZW1zW2ldLnR5cGUgPT0gImRhdGEiICYmIG9wdF9lbmRpbmcpCi0gICAgICAg
ICAgICAgICAgYmIuYXBwZW5kKGl0ZW1zW2ldLnZhbHVlLCBvcHRfZW5kaW5nKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYi5hcHBlbmQoaXRlbXNbaV0udmFsdWUpOworICAg
ICAgICAgICAgICAgIGJ1aWxkZXIucHVzaCh0aGlzLmFwcGVuZEFuZENyZWF0ZUJsb2IoaXRlbXNb
aV0sIG9wdF9lbmRpbmcsIG9wdF90eXBlKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBidWlsZGVyLnB1c2goaXRlbXNbaV0udmFsdWUpOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBiYi5nZXRCbG9iKG9wdF90eXBlKTsKKyAgICAgICAgdmFyIG9wdGlvbnMgPSB7fTsK
KyAgICAgICAgaWYgKG9wdF9lbmRpbmcpCisgICAgICAgICAgICBvcHRpb25zLmVuZGluZ3MgPSBv
cHRfZW5kaW5nOworICAgICAgICBpZiAob3B0X3R5cGUpCisgICAgICAgICAgICBvcHRpb25zLnR5
cGUgPSBvcHRfdHlwZTsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9iKGJ1aWxkZXIsIG9wdGlvbnMp
OwogICAgIH07CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLWV4cGVj
dGVkLnR4dAppbmRleCBjODQwMGU1Li5mMDQ2ZDJmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZy
YW1lLWZyb20tcmVtb3RlLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLUNPTlNPTEUgTUVT
U0FHRTogbGluZSAxMTogZmlsZXN5c3RlbTpodHRwOi8vbG9jYWxob3N0OjgwMDAvdGVtcG9yYXJ5
L3BhZ2UuaHRtbCBjcmVhdGVkLgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IGZpbGVzeXN0ZW06
aHR0cDovL2xvY2FsaG9zdDo4MDAwL3RlbXBvcmFyeS9wYWdlLmh0bWwgY3JlYXRlZC4KIENPTlNP
TEUgTUVTU0FHRTogTm90IGFsbG93ZWQgdG8gbG9hZCBsb2NhbCByZXNvdXJjZTogZmlsZXN5c3Rl
bTpodHRwOi8vbG9jYWxob3N0OjgwMDAvdGVtcG9yYXJ5L3BhZ2UuaHRtbAogVGhpcyB0ZXN0IGlz
IHRvIHNlZSBpZiBhIHJlbW90ZSBmaWxlIGNhbiBpbmNsdWRlIGEgbG9jYWwgcGFnZSB2aWEgYSBm
aWxlc3lzdGVtOiBVUkkgaW4gYW4gaUZyYW1lLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5c3RlbS1maWxlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5
c3RlbS1maWxlLmh0bWwKaW5kZXggMWUzYWUyMS4uY2VkYmIwZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmls
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2Ny
ZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbApAQCAtNSwxMiArNSwxMCBAQAogICAgICAgICAgICAg
d2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCAxMDAsIGZ1bmN0aW9uKGZzKSB7CiAg
ICAgICAgICAgICAgICAgZnMucm9vdC5nZXRGaWxlKCJwYWdlLmh0bWwiLCB7Y3JlYXRlOnRydWV9
LCBmdW5jdGlvbihlbnRyeSkgewogICAgICAgICAgICAgICAgICAgICBlbnRyeS5jcmVhdGVXcml0
ZXIoZnVuY3Rpb24od3JpdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJiLmFwcGVu
ZCgnPGRpdiBpZD0iaW5uZXJEaXYiPlZpc2libGUgQ29udGVudHM8L2Rpdj5cbicpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm9ud3JpdGUgPSBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlbnRyeS50b1VSTCgpICsgIiBjcmVhdGVk
LiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci53cml0ZShiYi5nZXRCbG9iKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLndyaXRlKG5ldyBCbG9iKFsnPGRpdiBpZD0iaW5uZXJEaXYiPlZpc2libGUgQ29udGVudHM8
L2Rpdj5cbiddKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0Lmh0bWwKaW5kZXggNjY1
NDYyNS4uZjY0YWQ3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9iamVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbApAQCAtMTUsOCAr
MTUsNyBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogCiBmdW5jdGlvbiBjcmVh
dGVFbXB0eUJsb2IoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihb
XSk7CiB9CiAKIHZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vi
c29ja2V0L3Rlc3RzL2hpeGllNzYvZWNobyIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS1p
bi1idXN5Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLWluLWJ1c3kuaHRtbAppbmRleCBhYzE3ZTAxLi4z
OTk1MDc5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLWluLWJ1c3kuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFm
dGVyLWNsb3NlLWluLWJ1c3kuaHRtbApAQCAtMjMsOSArMjMsNyBAQCBmdW5jdGlvbiBjcmVhdGVT
dHJpbmdXaXRoTGVuZ3RoKGxlbmd0aCkKIAogZnVuY3Rpb24gY3JlYXRlQmxvYldpdGhMZW5ndGgo
bGVuZ3RoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0g
ICAgYnVpbGRlci5hcHBlbmQobmV3IEFycmF5QnVmZmVyKGxlbmd0aCkpOwotICAgIHJldHVybiBi
dWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcihs
ZW5ndGgpXSk7CiB9CiAKIHZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vbG9jYWxob3N0Ojg4
ODAvd2Vic29ja2V0L3Rlc3RzL2h5YmkvZWNobyIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9z
ZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZm
ZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sCmluZGV4IDI3ZjIzODAuLjRiM2QxMGYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVy
ZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwKQEAgLTIz
LDkgKzIzLDcgQEAgZnVuY3Rpb24gY3JlYXRlU3RyaW5nV2l0aExlbmd0aChsZW5ndGgpCiAKIGZ1
bmN0aW9uIGNyZWF0ZUJsb2JXaXRoTGVuZ3RoKGxlbmd0aCkKIHsKLSAgICB2YXIgYnVpbGRlciA9
IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG5ldyBBcnJheUJ1
ZmZlcihsZW5ndGgpKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJu
IG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKV0pOwogfQogCiB2YXIgd3MgPSBuZXcg
V2ViU29ja2V0KCJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NpbXBs
ZSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS9zZW5kLWJsb2IuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwKaW5kZXggMmI4MGZhMi4uNjZiNDQ5MSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2Iu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtYmxvYi5odG1sCkBAIC0yMCwxNSArMjAsMTIgQEAgZnVuY3Rpb24gc3RhcnRzV2l0aCh0YXJn
ZXQsIHByZWZpeCkKIAogZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxsb1dvcmxkKCkK
IHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKCJIZWxsbywgd29ybGQhIik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigp
OworICAgIHJldHVybiBuZXcgQmxvYihbIkhlbGxvLCB3b3JsZCEiXSk7CiB9CiAKIGZ1bmN0aW9u
IGNyZWF0ZUVtcHR5QmxvYigpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1
aWxkZXIoKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBC
bG9iKFtdKTsKIH0KIAogZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5
dGVzKCkKQEAgLTM2LDkgKzMzLDcgQEAgZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxE
aXN0aW5jdEJ5dGVzKCkKICAgICB2YXIgYXJyYXkgPSBuZXcgVWludDhBcnJheSgyNTYpOwogICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpCiAgICAgICAgIGFycmF5W2ldID0gaTsKLSAg
ICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKGFycmF5LmJ1ZmZlcik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJl
dHVybiBuZXcgQmxvYihbYXJyYXkuYnVmZmVyXSk7CiB9CiAKIHZhciB1cmwgPSAid3M6Ly8xMjcu
MC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9jaGVjay1iaW5hcnktbWVzc2FnZXMiOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAppbmRleCA2ZGE5ODNiNi4uMDFi
NTQ1NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKQEAgLTU5LDkg
KzU5LDcgQEAgZnVuY3Rpb24gZGlkR2V0RmlsZVdyaXRlcih3cml0ZXIpCiAgICAgfTsKICAgICB3
cml0ZXIub253cml0ZSA9IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBidWlsZGVyID0g
bmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1lc3NhZ2VU
b1dyaXRlKTsKLSAgICAgICAgd3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICAg
ICAgd3JpdGVyLndyaXRlKG5ldyBCbG9iKFttZXNzYWdlVG9Xcml0ZV0pKTsKICAgICAgICAgd3Jp
dGVyLm9ud3JpdGUgPSBkaWRXcml0ZUZpbGU7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxl
LWJsb2IuaHRtbAppbmRleCAyYTM0MWJjLi4yZDNjZGU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUt
YmxvYi5odG1sCkBAIC01OSw5ICs1OSw3IEBAIGZ1bmN0aW9uIGRpZEdldEZpbGVXcml0ZXIod3Jp
dGVyKQogICAgIH07CiAgICAgd3JpdGVyLm9ud3JpdGUgPSBmdW5jdGlvbigpCiAgICAgewotICAg
ICAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgICAgICBidWls
ZGVyLmFwcGVuZChtZXNzYWdlVG9Xcml0ZSk7Ci0gICAgICAgIHdyaXRlci53cml0ZShidWlsZGVy
LmdldEJsb2IoKSk7CisgICAgICAgIHdyaXRlci53cml0ZShuZXcgQmxvYihbbWVzc2FnZVRvV3Jp
dGVdKSk7CiAgICAgICAgIHdyaXRlci5vbndyaXRlID0gZGlkV3JpdGVGaWxlOwogICAgIH07CiB9
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzCmluZGV4
IGMwMTIwZWIuLjBkYjVjYmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJj
ZXMvc2VuZC1ibG9iLmpzCkBAIC0xLDE0ICsxLDExIEBACiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29u
dGFpbmluZ0hlbGxvV29ybGQoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIkhlbGxvLCB3b3JsZCEiKTsKLSAgICByZXR1
cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKFsiSGVsbG8sIHdvcmxk
ISJdKTsKIH0KIAogZnVuY3Rpb24gY3JlYXRlRW1wdHlCbG9iKCkKIHsKLSAgICB2YXIgYnVpbGRl
ciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2Io
KTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW10pOwogfQogCiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29u
dGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQpAQCAtMTYsOSArMTMsNyBAQCBmdW5jdGlvbiBjcmVh
dGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQogICAgIHZhciBhcnJheSA9IG5ldyBV
aW50OEFycmF5KDI1Nik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkKICAgICAg
ICAgYXJyYXlbaV0gPSBpOwotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoYXJyYXkuYnVmZmVyKTsKLSAgICByZXR1cm4gYnVpbGRl
ci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKFthcnJheS5idWZmZXJdKTsKIH0KIAog
dmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtl
cnMvcmVzb3VyY2VzL2NoZWNrLWJpbmFyeS1tZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS9XaW5kb3cvd2luZG93
LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CmluZGV4IDc5OGRkZjQuLmI5MGRkNWUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Rv
bS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CkBAIC0xODAsNiArMTgwLDcg
QEAgd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQgW2Z1bmN0
aW9uXQogd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3Bh
Z2F0aW9uIFtmdW5jdGlvbl0KIHdpbmRvdy5CZWZvcmVMb2FkRXZlbnQucHJvdG90eXBlLnN0b3BQ
cm9wYWdhdGlvbiBbZnVuY3Rpb25dCiB3aW5kb3cuQmxvYiBbb2JqZWN0IEJsb2JDb25zdHJ1Y3Rv
cl0KK3dpbmRvdy5CbG9iLmxlbmd0aCBbbnVtYmVyXQogd2luZG93LkJsb2IucHJvdG90eXBlIFtv
YmplY3QgQmxvYlByb3RvdHlwZV0KIHdpbmRvdy5Cb29sZWFuIFtmdW5jdGlvbl0KIHdpbmRvdy5D
REFUQVNlY3Rpb24gW29iamVjdCBDREFUQVNlY3Rpb25Db25zdHJ1Y3Rvcl0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL25vYmxvYnMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbm9ibG9icy1leHBlY3RlZC50eHQKaW5kZXggZTlj
MzIzYS4uYzJiMGIwNGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L25vYmxvYnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L25vYmxvYnMtZXhwZWN0ZWQudHh0CkBAIC0xNiwxMyArMTYsOSBAQCBzdG9yZSA9IGRiLmNyZWF0
ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQogc3RvcmUucHV0KCd2YWx1ZScsICdrZXknKQogCiB0
ZXN0QmxvYigpOgotQmxvYkJ1aWxkZXIgPSB3aW5kb3cuQmxvYkJ1aWxkZXIgfHwgd2luZG93Lldl
YktpdEJsb2JCdWlsZGVyCi1QQVNTIEJsb2JCdWlsZGVyICE9IG51bGwgaXMgdHJ1ZQogUEFTUyBG
aWxlUmVhZGVyICE9IG51bGwgaXMgdHJ1ZQotYnVpbGRlciA9IG5ldyBCbG9iQnVpbGRlcigpCiB0
ZXN0X2NvbnRlbnQgPSAnVGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgb25seSBhIHRlc3QuJwotYnVp
bGRlci5hcHBlbmQodGVzdF9jb250ZW50KQotYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpCitibG9i
ID0gbmV3IEJsb2IoW3Rlc3RfY29udGVudF0pCiAKIHZhbGlkYXRlRXhjZXB0aW9ucyhibG9iKToK
IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9u
LlJFQURfV1JJVEUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9u
b2Jsb2JzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWwK
aW5kZXggNGVjOTZhNC4uYTRkNzNkMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvbm9ibG9icy5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L25vYmxvYnMuaHRtbApAQCAtNTgsMTMgKzU4LDkgQEAgZnVuY3Rpb24gdGVzdEJsb2IoKQogICAg
IGRlYnVnKCIiKTsKICAgICBkZWJ1ZygidGVzdEJsb2IoKToiKTsKIAotICAgIGV2YWxBbmRMb2co
IkJsb2JCdWlsZGVyID0gd2luZG93LkJsb2JCdWlsZGVyIHx8IHdpbmRvdy5XZWJLaXRCbG9iQnVp
bGRlciIpOwotICAgIHNob3VsZEJlVHJ1ZSgiQmxvYkJ1aWxkZXIgIT0gbnVsbCIpOwogICAgIHNo
b3VsZEJlVHJ1ZSgiRmlsZVJlYWRlciAhPSBudWxsIik7Ci0gICAgZXZhbEFuZExvZygiYnVpbGRl
ciA9IG5ldyBCbG9iQnVpbGRlcigpIik7CiAgICAgZXZhbEFuZExvZygidGVzdF9jb250ZW50ID0g
J1RoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIG9ubHkgYSB0ZXN0LiciKTsKLSAgICBldmFsQW5kTG9n
KCJidWlsZGVyLmFwcGVuZCh0ZXN0X2NvbnRlbnQpIik7Ci0gICAgZXZhbEFuZExvZygiYmxvYiA9
IGJ1aWxkZXIuZ2V0QmxvYigpIik7CisgICAgZXZhbEFuZExvZygiYmxvYiA9IG5ldyBCbG9iKFt0
ZXN0X2NvbnRlbnRdKSIpOwogICAgIHZhbGlkYXRlRXhjZXB0aW9ucygiYmxvYiIsIHRlc3RGaWxl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0
dXJlZC1jbG9uZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJl
ZC1jbG9uZS5odG1sCmluZGV4IGZkYThkMmIuLmQyOGFiN2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwKQEAgLTM3NiwxMyAr
Mzc2LDkgQEAgZnVuY3Rpb24gdGVzdEJsb2IoY2FsbGJhY2spCiAgICAgY2FsbGJhY2soKTsKICAg
ICByZXR1cm47CiAKLSAgICBldmFsQW5kTG9nKCJCbG9iQnVpbGRlciA9IHNlbGYuQmxvYkJ1aWxk
ZXIgfHwgc2VsZi5XZWJLaXRCbG9iQnVpbGRlciIpOwotICAgIHNob3VsZEJlVHJ1ZSgiQmxvYkJ1
aWxkZXIgIT0gbnVsbCIpOwogICAgIHNob3VsZEJlVHJ1ZSgiRmlsZVJlYWRlciAhPSBudWxsIik7
Ci0gICAgZXZhbEFuZExvZygiYnVpbGRlciA9IG5ldyBCbG9iQnVpbGRlcigpIik7CiAgICAgZXZh
bEFuZExvZygidGVzdF9jb250ZW50ID0gJ1RoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIG9ubHkgYSB0
ZXN0LiciKTsKLSAgICBldmFsQW5kTG9nKCJidWlsZGVyLmFwcGVuZCh0ZXN0X2NvbnRlbnQpIik7
Ci0gICAgZXZhbEFuZExvZygidGVzdF9kYXRhID0gYnVpbGRlci5nZXRCbG9iKCkiKTsKKyAgICBl
dmFsQW5kTG9nKCJ0ZXN0X2RhdGEgPSBuZXcgQmxvYihbdGVzdF9jb250ZW50XSkiKTsKICAgICB0
ZXN0VmFsdWUodGVzdF9kYXRhLCBmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgc2VsZi5yZXN1
bHQgPSByZXN1bHQ7CiAgICAgICAgIHNob3VsZEJlVHJ1ZSgidGVzdF9kYXRhICE9PSByZXN1bHQi
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAwYjVlZGY0Li4xMzgxNjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzAgQEAKKzIwMTItMDQtMjIgIEtpbnVrbyBZYXN1ZGEgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBCbG9iIGNvbnN0cnVjdG9yCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBKU0MgYW5kIFY4IGltcGxl
bWVudGF0aW9uIGZvciBCbG9iIGNvbnN0cnVjdG9yLgorICAgICAgICBBbHNvIGZpeGVzIHNvbWUg
dGVzdCBleHBlY3RhdGlvbnMuCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gU2FtIFdl
aW5pZyAoc2FtQHdlYmtpdC5vcmcpJ3MgSlNDIHBhdGNoLgorCisgICAgICAgIFRlc3RzOiBBbGwg
QmxvYkJ1aWxkZXIgdGVzdHMgc2hvdWxkIHdvcmsgd2l0aCB0aGUgbmV3IEJsb2IgY29uc3RydWN0
b3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNCbG9iQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQmxvYik6CisgICAgICAgIElt
cGxlbWVudCBibG9iIGNvbnN0cnVjdG9yLgorCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4QmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEJsb2I6OmNvbnN0cnVjdG9y
Q2FsbGJhY2spOgorICAgICAgICBJbXBsZW1lbnQgYmxvYiBjb25zdHJ1Y3Rvci4KKworICAgICAg
ICAqIGZpbGVhcGkvQmxvYi5pZGw6CisgICAgICAgIEFkZCBjb25zdHJ1Y3RvciB0byBJREwuCisK
KyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorICAgICAgICBBZGQgQmxvYiBj
b25zdHJ1Y3RvciB0byB0aGUgd29ya2VyIGdsb2JhbCBvYmplY3QuCisKIDIwMTItMDQtMjIgIFNo
YXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBEYW1hZ2UgVHJhY2tlciBuZWVkcyB0byB1c2UgQ0NNYXRoVXRpbCB0cmFuc2Zvcm1zCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAppbmRleCAwNDk0NTYwLi44
MjU1ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAK
QEAgLTMyLDggKzMyLDE1IEBACiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAKICNpbmNsdWRlICJCbG9i
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJKU0ZpbGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRCbG9iQnVpbGRlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTEsNCArNTgsNzQgQEAgSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
QmxvYiogYmxvYikKICAgICByZXR1cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9i
amVjdCwgQmxvYiwgYmxvYik7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNC
bG9iQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQmxvYihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
SlNCbG9iQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNCbG9iQ29uc3RydWN0
b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNl
RXJyb3IoZXhlYywgIkJsb2IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2
YWlsYWJsZSIpKTsKKworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJOb3QgZW5v
dWdoIGFyZ3VtZW50cyIpKTsKKworICAgIEpTVmFsdWUgZmlyc3RBcmcgPSBleGVjLT5hcmd1bWVu
dCgwKTsKKyAgICBpZiAoIWlzSlNBcnJheShmaXJzdEFyZykpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBvZiB0
aGUgY29uc3RydWN0b3IgaXMgbm90IG9mIHR5cGUgQXJyYXkiKSk7CisKKyAgICBKU0FycmF5KiBh
cnJheSA9IGFzQXJyYXkoZmlyc3RBcmcpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5s
ZW5ndGgoKTsKKworICAgIFN0cmluZyB0eXBlOworICAgIFN0cmluZyBlbmRpbmdzID0gInRyYW5z
cGFyZW50IjsKKworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CisgICAgICAg
IEpTVmFsdWUgYmxvYlByb3BlcnR5QmFnVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKworICAg
ICAgICBpZiAoIWJsb2JQcm9wZXJ0eUJhZ1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAg
ICAgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxk
IGFuIG9iamVjdC4KKyAgICAgICAgICAgIEpTT2JqZWN0KiBibG9iUHJvcGVydHlCYWdPYmplY3Qg
PSBibG9iUHJvcGVydHlCYWdWYWx1ZS50b09iamVjdChleGVjKTsKKworICAgICAgICAgICAgLy8g
Q3JlYXRlIHRoZSBkaWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0aGUgaW5pdGlhbGl6ZXIgb2JqZWN0
LgorICAgICAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoZXhlYywgYmxvYlByb3BlcnR5
QmFnT2JqZWN0KTsKKworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJv
cGVydHkuCisgICAgICAgICAgICBpZiAoIWRpY3Rpb25hcnkudHJ5R2V0UHJvcGVydHkoInR5cGUi
LCB0eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworCisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgZW5kaW5ncyBwcm9w
ZXJ0eSBhbmQgdmFsaWRhdGUgaXQuCisgICAgICAgICAgICBib29sIGNvbnRhaW5zRW5kaW5ncyA9
IGRpY3Rpb25hcnkuZ2V0KCJlbmRpbmdzIiwgZW5kaW5ncyk7CisgICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICAgICAgaWYgKGNvbnRhaW5zRW5kaW5ncykgewor
ICAgICAgICAgICAgICAgIGlmIChlbmRpbmdzICE9ICJ0cmFuc3BhcmVudCIgJiYgZW5kaW5ncyAh
PSAibmF0aXZlIikgeworICAgICAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
SU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVChlbmRpbmdzID09ICJ0cmFuc3BhcmVudCIg
fHwgZW5kaW5ncyA9PSAibmF0aXZlIik7CisKKyAgICAvLyBGSVhNRTogdGhpcyB3b3VsZCBiZSBi
ZXR0ZXIgaWYgdGhlIFdlYktpdEJsb2JCdWlsZGVyIHdlcmUgYSBzdGFjayBvYmplY3QgdG8gYXZv
aWQgdGhlIGFsbG9jYXRpb24uCisgICAgUmVmUHRyPFdlYktpdEJsb2JCdWlsZGVyPiBibG9iQnVp
bGRlciA9IFdlYktpdEJsb2JCdWlsZGVyOjpjcmVhdGUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdl
dEluZGV4KGkpOworICAgICAgICBpZiAoaXRlbS5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19p
bmZvKSkKKyAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQodG9BcnJheUJ1ZmZlcihpdGVt
KSk7CisgICAgICAgIGVsc2UgaWYgKGl0ZW0uaW5oZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkKKyAg
ICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQodG9CbG9iKGl0ZW0pKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGl0ZW0udG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5kKHN0cmluZywgZW5kaW5ncywgQVNT
RVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWZQdHI8QmxvYj4g
YmxvYiA9IGJsb2JCdWlsZGVyLT5nZXRCbG9iKHR5cGUpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVj
dCgpLCBCbG9iLCBibG9iLmdldCgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAK
aW5kZXggNjg1MzU3OC4uMTI0MDU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKQEAgLTMxLDkgKzMxLDE0IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIlY4QXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKICNpbmNsdWRlICJWOEJsb2IuaCIKICNpbmNs
dWRlICJWOEZpbGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0Qmxv
YkJ1aWxkZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ5LDQgKzU0LDcyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEJsb2IqIGlt
cGwpCiAgICAgcmV0dXJuIFY4QmxvYjo6d3JhcChpbXBsKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4QmxvYjo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLkJsb2IuQ29uc3RydWN0b3IiKTsKKworICAgIGlm
ICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRP
TSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIFY4
UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkg
PT0gQ29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBh
cmdzLkhvbGRlcigpOworCisgICAgaWYgKCFhcmdzLkxlbmd0aCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7
CisKKyAgICAvLyBHZXQgdGhlIHNjcmlwdCBleGVjdXRpb24gY29udGV4dC4KKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkJsb2IgY29uc3Ry
dWN0b3IncyBhc3NvY2lhdGVkIGZyYW1lIGlzIG5vdCBhdmFpbGFibGUiLCBWOFByb3h5OjpSZWZl
cmVuY2VFcnJvcik7CisKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBmaXJzdEFyZyA9IGFyZ3Nb
MF07CisgICAgaWYgKCFmaXJzdEFyZy0+SXNBcnJheSgpKQorICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiRmlyc3QgYXJndW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yIGlzIG5vdCBvZiB0eXBlIEFy
cmF5IiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBibG9i
UGFydHMgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdChmaXJzdEFyZyk7CisKKyAgICBTdHJp
bmcgdHlwZTsKKyAgICBTdHJpbmcgZW5kaW5ncyA9ICJ0cmFuc3BhcmVudCI7CisKKyAgICBpZiAo
YXJncy5MZW5ndGgoKSA+IDEgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbMV0pICYmIGFyZ3Nb
MV0tPklzT2JqZWN0KCkpIHsKKyAgICAgICAgRVhDRVBUSU9OX0JMT0NLKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4sIG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSk7
CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VHlwZSA9IG9iamVjdC0+R2V0KHY4OjpT
dHJpbmc6Ok5ldygidHlwZSIpKTsKKyAgICAgICAgaWYgKCF2OFR5cGUuSXNFbXB0eSgpICYmICFp
c1VuZGVmaW5lZE9yTnVsbCh2OFR5cGUpKSB7CisgICAgICAgICAgICBFWENFUFRJT05fQkxPQ0so
U3RyaW5nLCB0eXBlVmFsdWUsIHRvV2ViQ29yZVN0cmluZyh2OFR5cGUtPlRvU3RyaW5nKCkpKTsK
KyAgICAgICAgICAgIHR5cGUgPSB0eXBlVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdjhFbmRpbmdzID0gb2JqZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJl
bmRpbmdzIikpOworICAgICAgICBpZiAoIXY4RW5kaW5ncy5Jc0VtcHR5KCkgJiYgIWlzVW5kZWZp
bmVkT3JOdWxsKHY4RW5kaW5ncykpIHsKKyAgICAgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhTdHJp
bmcsIGVuZGluZ3NWYWx1ZSwgdG9XZWJDb3JlU3RyaW5nKHY4RW5kaW5ncy0+VG9TdHJpbmcoKSkp
OworICAgICAgICAgICAgaWYgKGVuZGluZ3NWYWx1ZSAhPSAidHJhbnNwYXJlbnQiICYmIGVuZGlu
Z3NWYWx1ZSAhPSAibmF0aXZlIikgeworICAgICAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4
Y2VwdGlvbihJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZGluZ3MgPSBlbmRpbmdz
VmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoZW5kaW5ncyA9PSAidHJhbnNw
YXJlbnQiIHx8IGVuZGluZ3MgPT0gIm5hdGl2ZSIpOworCisgICAgUmVmUHRyPFdlYktpdEJsb2JC
dWlsZGVyPiBibG9iQnVpbGRlciA9IFdlYktpdEJsb2JCdWlsZGVyOjpjcmVhdGUoKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYmxvYlBhcnRzLT5MZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGl0ZW0gPSBibG9iUGFydHMtPkdldCh2ODo6SW50MzI6
Ok5ldyhpKSk7CisgICAgICAgIEFTU0VSVCghaXRlbS5Jc0VtcHR5KCkpOworICAgICAgICBpZiAo
VjhBcnJheUJ1ZmZlcjo6SGFzSW5zdGFuY2UoaXRlbSkpIHsKKyAgICAgICAgICAgIEFycmF5QnVm
ZmVyKiBhcnJheUJ1ZmZlciA9IFY4QXJyYXlCdWZmZXI6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoaXRlbSkpOworICAgICAgICAgICAgQVNTRVJUKGFycmF5QnVmZmVyKTsK
KyAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQoYXJyYXlCdWZmZXIpOworICAgICAgICB9
IGVsc2UgaWYgKFY4QmxvYjo6SGFzSW5zdGFuY2UoaXRlbSkpIHsKKyAgICAgICAgICAgIEJsb2Iq
IGJsb2IgPSBWOEJsb2I6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoaXRl
bSkpOworICAgICAgICAgICAgQVNTRVJUKGJsb2IpOworICAgICAgICAgICAgYmxvYkJ1aWxkZXIt
PmFwcGVuZChibG9iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEVYQ0VQVElPTl9C
TE9DSyhTdHJpbmcsIHN0cmluZ1ZhbHVlLCB0b1dlYkNvcmVTdHJpbmcoaXRlbS0+VG9TdHJpbmco
KSkpOworICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChzdHJpbmdWYWx1ZSwgZW5kaW5n
cywgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWZQdHI8
QmxvYj4gYmxvYiA9IGJsb2JCdWlsZGVyLT5nZXRCbG9iKHR5cGUpOworICAgIHJldHVybiB0b1Y4
KGJsb2IuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9C
bG9iLmlkbAppbmRleCAyOWM1MTQxLi42YjdlNTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0Jsb2IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwK
QEAgLTMzLDcgKzMzLDkgQEAgbW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBbCiAgICAgICAg
IEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAogICAgICAgICBDdXN0b21Ub0pTT2JqZWN0LAot
ICAgICAgICBKU05vU3RhdGljVGFibGVzCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMsCisgICAg
ICAgIEN1c3RvbUNvbnN0cnVjdG9yLAorICAgICAgICBDb25zdHJ1Y3RvclBhcmFtZXRlcnM9Mgog
ICAgIF0gQmxvYiB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKaW5kZXggYmU5ZTZjMC4uNTViM2E0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCkBAIC04NCw2ICs4
NCw3IEBAIG1vZHVsZSB0aHJlYWRzIHsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0JMT0IpICYmIEVO
QUJMRV9CTE9CCiAgICAgICAgIGF0dHJpYnV0ZSBXZWJLaXRCbG9iQnVpbGRlckNvbnN0cnVjdG9y
IFdlYktpdEJsb2JCdWlsZGVyOworICAgICAgICBhdHRyaWJ1dGUgQmxvYkNvbnN0cnVjdG9yIEJs
b2I7CiAgICAgICAgIGF0dHJpYnV0ZSBGaWxlUmVhZGVyQ29uc3RydWN0b3IgRmlsZVJlYWRlcjsK
ICAgICAgICAgYXR0cmlidXRlIEZpbGVSZWFkZXJTeW5jQ29uc3RydWN0b3IgRmlsZVJlYWRlclN5
bmM7CiAjZW5kaWYK
</data>
<flag name="review"
          id="143615"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138324</attachid>
            <date>2012-04-23 04:24:54 -0700</date>
            <delta_ts>2012-04-23 06:23:51 -0700</delta_ts>
            <desc>new patch with v8 code</desc>
            <filename>fixed.patch</filename>
            <type>text/plain</type>
            <size>48202</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">Y29tbWl0IDE5M2U3MTIyZDZkMWFmZjRkZTIyNmYzMjdkOTQ5NjM4MDc0Njc2ZjAKQXV0aG9yOiBL
aW51a28gWWFzdWRhIDxraW51a29AY2hyb21pdW0ub3JnPgpEYXRlOiAgIE1vbiBBcHIgMjMgMTc6
MTY6MzYgMjAxMiArMDkwMAoKICAgIEFkZGluZyBCbG9iIENvbnN0cnVjdG9yCiAgICAKICAgIGZp
eGluZwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCAzYjg5YmMxLi4wYzIxZGU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIw
MTItMDQtMjMgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEFkZGluZyBCbG9iIENvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NDU1NQorCisgICAgICAgIFJld3JpdGUgYmxvYi1yZWxhdGVkIHRl
c3RzIHdpdGggQmxvYkJ1aWxkZXIgdG8gdXNlIHRoZSBuZXcgQmxvYiBjb25zdHJ1Y3Rvci4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9t
L0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC11bnNldC5odG1sOgorICAgICAgICAq
IGZhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC5odG1sOgorICAgICAg
ICAqIGZhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLXNldC5odG1s
OgorICAgICAgICAqIGZhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2Fk
Lmh0bWw6CisgICAgICAgICogZmFzdC9kb20vd2luZG93LWRvbXVybC1jcmFzaC5odG1sOgorICAg
ICAgICAqIGZhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sOgorICAgICAgICAqIGZh
c3QvZmlsZXMvYmxvYi1zbGljZS10ZXN0Lmh0bWw6CisgICAgICAgICogZmFzdC9maWxlcy9ibG9i
LXdpdGgtbnVsbC1jcmFzaC1leHBlY3RlZC50eHQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL2Jsb2ItYnVpbGRlci1jcmFzaC1leHBlY3RlZC50eHQuCisgICAgICAgICogZmFz
dC9maWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2guaHRtbC4KKyAgICAgICAgKiBmYXN0L2Zp
bGVzL2ZpbGUtcmVhZGVyLWZmZmQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZmlsZXMv
ZmlsZS1yZWFkZXItZmZmZC5odG1sOgorICAgICAgICAqIGZhc3QvZmlsZXMvbm90LWVub3VnaC1h
cmd1bWVudHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZmlsZXMvbm90LWVub3VnaC1h
cmd1bWVudHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWJsb2It
dGVzdC1jYXNlcy5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWNvbW1v
bi5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3dvcmtlcnMvaW5saW5lLXdvcmtlci12aWEtYmxv
Yi11cmwuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLWFib3J0LWNvbnRpbnVlLmpzOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanM6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanM6CisgICAgICAgICogZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVuZC5qczoK
KyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtd3Jp
dGUtb3ZlcmxhcHBlZC5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2Zp
bGUtd3JpdGVyLXV0aWxzLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMvZmlsZWFwaS9jcmVhdGUt
YmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvZmlsZXN5
c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvYmxvYi9yZXNvdXJjZXMvaHlicmlkLWJsb2ItdXRpbC5qczoKKyAgICAgICAgKiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5
c3RlbS1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4
aWU3Ni9zZW5kLW9iamVjdC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sOgorICAgICAg
ICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXIt
Y2xvc2UuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtYmxvYi5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1maWxlLWJsb2ItZmFpbC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qczoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWw6CisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS5odG1sOgorCiAyMDEyLTA0LTIyICBN
aWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9t
aXVtXSBVbnJldmlld2VkIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC11bnNl
dC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRv
d25sb2FkLXVuc2V0Lmh0bWwKaW5kZXggNjMyMWI5Yy4uMDE4YjM0NiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLXVuc2V0
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9y
LWRvd25sb2FkLXVuc2V0Lmh0bWwKQEAgLTI0LDkgKzI0LDggQEAgZnVuY3Rpb24gY2xpY2soZWxt
dCkKIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0
bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48
Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiIp
OwotICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigidGV4dC9odG1sIiwgImlubGluZSIpOworICAg
IHZhciBzdHJpbmcgPSAiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90
aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwv
Ym9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iOworICAgIHZhciBi
bG9iID0gbmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAidGV4dC9odG1sIn0pOwogICAgIHZhciBs
aW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsb2ItdXJsIik7CiAgICAgbGluay5ocmVm
ID0gd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgbGluay5yZW1v
dmVBdHRyaWJ1dGUoJ2Rvd25sb2FkJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC5odG1sCmluZGV4IGM4Mzc3
ZjkuLjkwNjEwMTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JF
bGVtZW50L2FuY2hvci1kb3dubG9hZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hU
TUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC5odG1sCkBAIC0yNCw5ICsyNCw4IEBAIGZ1
bmN0aW9uIGNsaWNrKGVsbXQpCiAKIGZ1bmN0aW9uIHJ1blRlc3QoKQogewotICAgIHZhciBiYiA9
IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgiPCFkb2N0eXBlIGh0bWw+
PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsg
InNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIg
KyAiaXB0PjwvaHRtbD4iKTsKLSAgICB2YXIgYmxvYiA9IGJiLmdldEJsb2IoInRleHQvaHRtbCIs
ICJpbmxpbmUiKTsKKyAgICB2YXIgc3RyaW5nID0gIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFk
Pjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9o
ZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0
bWw+IjsKKyAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtzdHJpbmddLCB7dHlwZTogInRleHQvaHRt
bCJ9KTsKICAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJibG9iLXVybCIp
OwogICAgIGxpbmsuaHJlZiA9IHdpbmRvdy53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2Ip
OwogICAgIGNsaWNrKGxpbmspOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRN
TEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAppbmRl
eCBkMGI0MmFmLi41NDUyYTJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1M
QW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbApA
QCAtMjQsOSArMjQsOCBAQCBmdW5jdGlvbiBjbGljayhlbG10KQogCiBmdW5jdGlvbiBydW5UZXN0
KCkKIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBl
bmQoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlw
dD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlw
dD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7Ci0gICAgdmFyIGJsb2IgPSBiYi5n
ZXRCbG9iKCJ0ZXh0L2h0bWwiLCAiaW5saW5lIik7CisgICAgdmFyIHN0cmluZyA9ICI8IWRvY3R5
cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
Ozwvc2NyIiArICJpcHQ+PC9odG1sPiI7CisgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbc3RyaW5n
XSwge3R5cGU6ICJ0ZXh0L2h0bWwifSk7CiAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiYmxvYi11cmwiKTsKICAgICBsaW5rLmhyZWYgPSB3aW5kb3cud2Via2l0VVJMLmNy
ZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnKTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hv
ci1ub2Rvd25sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVu
dC9hbmNob3Itbm9kb3dubG9hZC5odG1sCmluZGV4IGY5MWVkYzEuLmRjZDEwMDkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25s
b2FkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5j
aG9yLW5vZG93bmxvYWQuaHRtbApAQCAtMjQsOSArMjQsOCBAQCBmdW5jdGlvbiBjbGljayhlbG10
KQogCiBmdW5jdGlvbiBydW5UZXN0KCkKIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1
aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRs
ZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxi
b2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7
Ci0gICAgdmFyIGJsb2IgPSBiYi5nZXRCbG9iKCJ0ZXh0L2h0bWwiLCAiaW5saW5lIik7CisgICAg
dmFyIHN0cmluZyA9ICI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3Rp
dGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9i
b2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiI7CisgICAgdmFyIGJs
b2IgPSBuZXcgQmxvYihbc3RyaW5nXSwge3R5cGU6ICJ0ZXh0L2h0bWwifSk7CiAgICAgdmFyIGxp
bmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmxvYi11cmwiKTsKICAgICBsaW5rLmhyZWYg
PSB3aW5kb3cud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICBjbGljayhsaW5r
KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2gu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbAppbmRl
eCA3ZDVjMDRjLi4zYjhmZDc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS93aW5k
b3ctZG9tdXJsLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vd2luZG93LWRv
bXVybC1jcmFzaC5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+DQogPGhlYWQ+DQogPHNjcmlw
dD4NCi12YXIgYmxvYiA9IChuZXcgV2ViS2l0QmxvYkJ1aWxkZXIpLmdldEJsb2IoKTsNCit2YXIg
YmxvYiA9IG5ldyBCbG9iKFtdKTsNCiB2YXIgdXJsID0gbnVsbDsNCiB2YXIgY291bnQgPSAwOw0K
IA0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNo
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNo
LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4YWFhNi4uMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItYnVpbGRlci1jcmFzaC1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLVRlc3QgdGhhdCBjYWxsaW5n
IFdlYktpdEJsb2JCdWlsZGVyLmFwcGVuZCB3aXRoIG51bGwgdmFsdWUgc2hvdWxkIG5vdCBjYXVz
ZSBjcmFzaC4KLURPTkUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9i
LWJ1aWxkZXItY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVy
LWNyYXNoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNjY0YjEuLjAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2guaHRtbAor
KysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08
aGVhZD4KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBsb2cobWVzc2FnZSkKLXsKLSAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKG1lc3NhZ2UgKyAiXG4iKSk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3QoKQotewotICAgIGxvZygi
VGVzdCB0aGF0IGNhbGxpbmcgV2ViS2l0QmxvYkJ1aWxkZXIuYXBwZW5kIHdpdGggbnVsbCB2YWx1
ZSBzaG91bGQgbm90IGNhdXNlIGNyYXNoLiIpOwotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktp
dEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQobnVsbCk7Ci0KLSAgICBsb2coIkRP
TkUiKTsKLX0KLQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9u
bG9hZD0idGVzdCgpIj4KLTxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJlPgotPC9ib2R5PgotPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbApp
bmRleCBlYzhmYThjLi5hM2VlN2M0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Js
b2Itc2xpY2Utb3ZlcmZsb3cuaHRtbApAQCAtNSwxOSArNSwyMiBAQCBhIHRydW5jYXRlZCBzbGlj
ZSBiZWluZyByZXR1cm5lZC4KIDxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJlPgogPHNjcmlwdD4KIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOwotICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCkKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpCiB9Ci12YXIgYnVpbGRlciA9ICBuZXcgV2ViS2l0QmxvYkJ1
aWxkZXIoKTsKKwogdmFyIHRleHQgPSAnJzsKLWZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDsgKytp
KSB0ZXh0ICs9ICdBJzsKLWJ1aWxkZXIuYXBwZW5kKHRleHQpOwotYmxvYiA9IGJ1aWxkZXIuZ2V0
QmxvYigpOworZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwOyArK2kpCisgICAgdGV4dCArPSAnQSc7
CisKK2Jsb2IgPSBuZXcgQmxvYihbdGV4dF0pOwogc2xpY2VkQmxvYiA9IGJsb2Iud2Via2l0U2xp
Y2UoMTk5OSwgOTIyMzM3MjAzNjg1NDc3NTAwMCk7CisKIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0Jsb2Igc2xp
Y2UgbGVuZ3RoOiAnICsgc2xpY2VkQmxvYi5zaXplKSk7CiBpZiAoc2xpY2VkQmxvYi5zaXplICE9
IDEpIHsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRkFJTCcpKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdGQUlM
JykpOwogfQorCiBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvYmxvYi1zbGljZS10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Js
b2Itc2xpY2UtdGVzdC5odG1sCmluZGV4IDU2MDQ4ZGEuLjBjOGNkMTYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS10ZXN0Lmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLXRlc3QuaHRtbApAQCAtODIsOSArODIsNyBAQCBmdW5j
dGlvbiBydW5OZXh0VGVzdCgpCiAKIGZ1bmN0aW9uIHJ1blRlc3RzKCkKIHsKLSAgICB2YXIgYnVp
bGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIz
NDU2Nzg5Iik7Ci0gICAgYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIGJsb2IgPSBuZXcg
QmxvYihbIjAxMjM0NTY3ODkiXSk7CiAKICAgICBydW5OZXh0VGVzdCgpOwogfQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itd2l0aC1udWxsLWNyYXNoLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmExZTgwCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitUZXN0IHRoYXQgY29uc3RydWN0aW5nIEJsb2Ig
d2l0aCBudWxsIHZhbHVlIHNob3VsZCBub3QgY2F1c2UgY3Jhc2guCitET05FCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi13aXRoLW51bGwtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi13aXRoLW51bGwtY3Jhc2guaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjc1ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC5odG1sCkBAIC0wLDAgKzEs
MjUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlv
biBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScp
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UgKyAiXG4iKSk7Cit9
CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGxvZygiVGVzdCB0aGF0IGNvbnN0cnVjdGluZyBC
bG9iIHdpdGggbnVsbCB2YWx1ZSBzaG91bGQgbm90IGNhdXNlIGNyYXNoLiIpOworICAgIHZhciBi
bG9iID0gbmV3IEJsb2IoW251bGxdKTsKKworICAgIGxvZygiRE9ORSIpOworfQorCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHBy
ZSBpZD0nY29uc29sZSc+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1mZmZkLWV4cGVjdGVkLnR4dAppbmRleCBjYzEy
NGE1Li40NWY5N2M3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVh
ZGVyLWZmZmQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1y
ZWFkZXItZmZmZC1leHBlY3RlZC50eHQKQEAgLTIsOSArMiw4IEBAIFRocm93IHZhcmlvdXMgYmFk
IGJ5dGVzIGF0IGZpbGUgcmVhZGVyLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKLWJi
ID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CiBhcnJheSA9IG5ldyBVaW50OEFycmF5KFs2NSwg
MjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUsIDY2
XSk7Ci1ibG9iID0gYnVpbGRCbG9iKFthcnJheS5idWZmZXJdKTsKK2Jsb2IgPSBuZXcgQmxvYihb
YXJyYXkuYnVmZmVyXSk7CiByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogcmVhZGVyLnJlYWRB
c1RleHQoYmxvYik7CiBQQVNTIGZpbGVTdHJpbmcgaXMgJ0Hvv73vv73vv73vv73vv73vv73vv73v
v73vv73vv73vv71CJwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJl
YWRlci1mZmZkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQu
aHRtbAppbmRleCAwYjRmZjFhLi5lYWNhMjRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L2ZpbGUtcmVhZGVyLWZmZmQuaHRtbApAQCAtMTAsOSArMTAsOCBAQAogPHNjcmlwdD4KIGRlc2Ny
aXB0aW9uKCJUaHJvdyB2YXJpb3VzIGJhZCBieXRlcyBhdCBmaWxlIHJlYWRlci4iKTsKIAotYmIg
PSBldmFsQW5kTG9nKCJiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOyIpOwogYXJyYXkgPSBl
dmFsQW5kTG9nKCJhcnJheSA9IG5ldyBVaW50OEFycmF5KFs2NSwgMjQ1LCAyNDYsIDI0NywgMjQ4
LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUsIDY2XSk7Iik7Ci1ibG9iID0gZXZh
bEFuZExvZygiYmxvYiA9IGJ1aWxkQmxvYihbYXJyYXkuYnVmZmVyXSk7Iik7CitibG9iID0gZXZh
bEFuZExvZygiYmxvYiA9IG5ldyBCbG9iKFthcnJheS5idWZmZXJdKTsiKTsKIHJlYWRlciA9IGV2
YWxBbmRMb2coInJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7Iik7CiByZWFkZXIub25sb2FkID0g
ZnVuY3Rpb24oZXZlbnQpIHsKICAgZmlsZVN0cmluZyA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL25vdC1lbm91Z2gtYXJndW1lbnRzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMt
ZXhwZWN0ZWQudHh0CmluZGV4IGFjZmJhZTAuLmVjYTFmMTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMtZXhwZWN0ZWQudHh0CkBA
IC03LDcgKzcsNyBAQCBQQVNTIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcigpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgogUEFTUyByZWFkZXIucmVhZEFz
QmluYXJ5U3RyaW5nKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1
bWVudHMuCiBQQVNTIHJlYWRlci5yZWFkQXNUZXh0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogTm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIHJlYWRlci5yZWFkQXNEYXRhVVJMKCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1QQVNTIGJsb2JC
dWlsZGVyLmFwcGVuZCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQ
QVNTIG5ldyBCbG9iKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1
bWVudHMuCiBQQVNTIGZpbGVJbnB1dC5maWxlcy5pdGVtKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1
bWVudHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMu
aHRtbAppbmRleCAwMTlhOWYxLi41OTE1NTNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL25vdC1lbm91Z2gtYXJndW1lbnRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy5odG1sCkBAIC0xNSw5ICsxNSw3IEBAIHNob3VsZFRo
cm93KCdyZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKCknKTsKIHNob3VsZFRocm93KCdyZWFkZXIu
cmVhZEFzVGV4dCgpJyk7CiBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc0RhdGFVUkwoKScpOwog
Ci12YXIgYmxvYkJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLQotc2hvdWxkVGhy
b3coJ2Jsb2JCdWlsZGVyLmFwcGVuZCgpJyk7CitzaG91bGRUaHJvdygnbmV3IEJsb2IoKScpOwog
CiB2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jylb
MF07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQt
YmxvYi10ZXN0LWNhc2VzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVh
ZC1ibG9iLXRlc3QtY2FzZXMuanMKaW5kZXggODE5Y2EwMC4uZmYwZjQ4MSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1ibG9iLXRlc3QtY2FzZXMuanMK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1ibG9iLXRlc3QtY2Fz
ZXMuanMKQEAgLTE3MCwxMSArMTcwLDExIEBAIGZ1bmN0aW9uIHRlc3RSZWFkaW5nU2xpY2VkSHli
cmlkQmxvYih0ZXN0RmlsZXMpCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ1RyaXBsZVNsaWNlZEh5YnJp
ZEJsb2IodGVzdEZpbGVzKQogewogICAgIGxvZygiVGVzdCByZWFkaW5nIGEgdHJpcGxlLXNsaWNl
ZCBoeWJyaWQgYmxvYiIpOwotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7CiAgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoWzQ4LCA0OSwgNTBdKTsKLSAgICB2
YXIgYmxvYiA9IGJ1aWxkQmxvYihbJ0ZpcnN0JywgdGVzdEZpbGVzWydmaWxlMSddLndlYmtpdFNs
aWNlKDEsIDExKSwgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10sICdTZWNvbmQnLCB0ZXN0RmlsZXNb
J2ZpbGUyJ10sIHRlc3RGaWxlc1snZmlsZTMnXSwgJ1RoaXJkJywgYXJyYXkuYnVmZmVyXSwgdW5k
ZWZpbmVkLCBidWlsZGVyKTsKKyAgICB2YXIgaXRlbXMgPSBbJ0ZpcnN0JywgdGVzdEZpbGVzWydm
aWxlMSddLndlYmtpdFNsaWNlKDEsIDExKSwgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10sICdTZWNv
bmQnLCB0ZXN0RmlsZXNbJ2ZpbGUyJ10sIHRlc3RGaWxlc1snZmlsZTMnXSwgJ1RoaXJkJywgYXJy
YXkuYnVmZmVyXTsKKyAgICB2YXIgYmxvYiA9IGJ1aWxkQmxvYihpdGVtcyk7CiAgICAgdmFyIGJs
b2IgPSBibG9iLndlYmtpdFNsaWNlKDcsIDE5KTsKLSAgICB2YXIgYmxvYjIgPSBidWlsZEJsb2Io
WydGb28nLCBibG9iLCAnQmFyJ10sIHVuZGVmaW5lZCwgYnVpbGRlcik7CisgICAgdmFyIGJsb2Iy
ID0gYnVpbGRCbG9iKGl0ZW1zLmNvbmNhdChbJ0ZvbycsIGJsb2IsICdCYXInXSkpOwogICAgIHZh
ciBibG9iMiA9IGJsb2IyLndlYmtpdFNsaWNlKDEyLCA0Mik7CiAgICAgcmVhZEJsb2JBc0JpbmFy
eVN0cmluZyh0ZXN0RmlsZXMsIGJsb2IyKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKaW5kZXggMDcxMjVhNS4uYmFjNzk5YyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKQEAgLTEs
MTMgKzEsMTEgQEAKIC8vIEJ1aWxkcyBhIGJsb2IgZnJvbSBhIGxpc3Qgb2YgaXRlbXMuCiAvLyBU
aGUgJ2NvbnRlbnRUeXBlJyBhcmd1bWVudCBpcyBvcHRpb25hbC4KIC8vIElmIHRoZSAnYnVpbGRl
cicgYXJndW1lbnQgaXMgbm90IHByb3ZpZGVkLCBjcmVhdGUgYSBuZXcgb25lLgotZnVuY3Rpb24g
YnVpbGRCbG9iKGl0ZW1zLCBjb250ZW50VHlwZSwgYnVpbGRlcikKK2Z1bmN0aW9uIGJ1aWxkQmxv
YihpdGVtcywgY29udGVudFR5cGUpCiB7Ci0gICAgaWYgKGJ1aWxkZXIgPT09IHVuZGVmaW5lZCkK
LSAgICAgICAgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0
ZW1zW2ldKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKGNvbnRlbnRUeXBlKTsKKyAgICBp
ZiAoY29udGVudFR5cGUgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9iKGl0
ZW1zKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoaXRlbXMsIHt0eXBlOmNvbnRlbnRUeXBlfSk7CiB9
CiAKIC8vIFJlYWRzIGEgYmxvYiBlaXRoZXIgYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25vdXNs
eS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29y
a2VyLXZpYS1ibG9iLXVybC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lu
bGluZS13b3JrZXItdmlhLWJsb2ItdXJsLmh0bWwKaW5kZXggM2JhY2NkYS4uMDUzMGI5NCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13b3JrZXItdmlh
LWJsb2ItdXJsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lubGlu
ZS13b3JrZXItdmlhLWJsb2ItdXJsLmh0bWwKQEAgLTEwLDEzICsxMCwxMiBAQCBmdW5jdGlvbiBs
b2cobWVzc2FnZSkKIGZ1bmN0aW9uIHJ1blRlc3QoKQogewogICAgIGxvZygiVGVzdCBpbmxpbmUg
d2ViIHdvcmtlciB2aWEgYmxvYiBVUkwuIik7Ci0gICAgdmFyIGJsb2JCdWlsZGVyID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmxvYkJ1aWxkZXIuYXBwZW5kKFsKKyAgICB2YXIgc3Ry
aW5nID0gWwogICAgICAgICAib25tZXNzYWdlID0gZnVuY3Rpb24oZSkgeyIsCiAgICAgICAgICIg
ICAgcG9zdE1lc3NhZ2UoJ0hlbGxvIGZyb20gd29ya2VyJyk7IiwKICAgICAgICAgIn07IgotICAg
IF0uam9pbignXG4nKSk7Ci0gICAgdmFyIGJsb2JVUkwgPSB3ZWJraXRVUkwuY3JlYXRlT2JqZWN0
VVJMKGJsb2JCdWlsZGVyLmdldEJsb2IoKSk7CisgICAgXS5qb2luKCdcbicpOworICAgIHZhciBi
bG9iVVJMID0gd2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbc3RyaW5nXSkpOwog
ICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKGJsb2JVUkwpOwogICAgIHdvcmtlci5vbm1lc3Nh
Z2UgPSBmdW5jdGlvbihldmVudCkgewogICAgICAgICBsb2coZXZlbnQuZGF0YSk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFi
b3J0LWNvbnRpbnVlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9m
aWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcwppbmRleCBiNWNlYjRhLi4xNzkxNmRiIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVy
LWFib3J0LWNvbnRpbnVlLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKQEAgLTUyLDExICs1MiwxMSBAQCBm
dW5jdGlvbiBub3AoKSB7CiB9CiAKIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICB2YXIg
YmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICB2YXIgYmIgPSBbXTsKICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAg
ICAgICBiYi5wdXNoKGJsb2IpOwogICAgIH0KLSAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworICAg
IHJldHVybiBuZXcgQmxvYihiYik7CiB9CiAKIC8vIFRoZXNlIG1ldGhvZHMgc2V0IHVwIGEgd3Jp
dGUsIGFib3J0IGl0IGFzIHNvb24gYXMgaXQgc3RhcnRzLCB0aGVuIGluaXRpYXRlCkBAIC05MSw5
ICs5MSw3IEBAIGZ1bmN0aW9uIGNoZWNrTGVuZ3RoQW5kQ29tcGxldGVUZXN0KGUpIHsKIAogZnVu
Y3Rpb24gc3RhcnRXcml0ZSgpIHsKICAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5
dGUuCi0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5k
KCJsb3JlbSBpcHN1bSIpOwotICAgIHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsK
KyAgICB2YXIgYmxvYiA9IHRlblhCbG9iKG5ldyBCbG9iKFsibG9yZW0gaXBzdW0iXSkpOwogICAg
IGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAg
YmxvYiA9IHRlblhCbG9iKGJsb2IpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanMKaW5k
ZXggZWE4YjYzOC4uOTdiMTIwYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcworKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzCkBA
IC0xMCw5ICsxMCw3IEBAIHZhciBzYXdXcml0ZVN0YXJ0OwogdmFyIHNhd0Fib3J0OwogdmFyIHNh
d1dyaXRlRW5kOwogdmFyIHdyaXRlcjsKLXZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigp
OwotYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOwotdmFyIGJsb2IgPSBiYi5nZXRCbG9iKCk7Cit2
YXIgYmxvYiA9IG5ldyBCbG9iKFsibG9yZW0gaXBzdW0iXSk7CiB2YXIgcmVjdXJzaW9uRGVwdGgg
PSAwOwogdmFyIG1ldGhvZDsKIHZhciB0ZXN0c1J1biA9IDA7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcwpp
bmRleCAyYzQxMDdhLi40OTlhN2RmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQuanMKQEAgLTEyLDExICsx
MiwxMSBAQCB2YXIgc2F3V3JpdGVFbmQ7CiB2YXIgd3JpdGVyOwogCiBmdW5jdGlvbiB0ZW5YQmxv
YihibG9iKSB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgdmFy
IGJiID0gW107CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgICAgIGJi
LmFwcGVuZChibG9iKTsKKyAgICAgICAgYmIucHVzaChibG9iKTsKICAgICB9Ci0gICAgcmV0dXJu
IGJiLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoYmIpOwogfQogCiBmdW5jdGlvbiBv
bldyaXRlU3RhcnQoZSkgewpAQCAtNjIsOSArNjIsNyBAQCBmdW5jdGlvbiBvbldyaXRlRW5kKGUp
IHsKIAogZnVuY3Rpb24gc3RhcnRXcml0ZShmaWxlV3JpdGVyKSB7CiAgICAgLy8gTGV0J3MgbWFr
ZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOwotICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKLSAgICB2YXIgYmxvYiA9IHRlblhC
bG9iKGJiLmdldEJsb2IoKSk7CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihuZXcgQmxvYihbImxv
cmVtIGlwc3VtIl0pKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRl
blhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpz
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVu
dHMuanMKaW5kZXggYzg4ZTBmYi4uZGY5ZTZhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKQEAg
LTE2LDExICsxNiwxMSBAQCB2YXIgbGFzdFByb2dyZXNzID0gMDsKIHZhciB0b0JlV3JpdHRlbjsK
IAogZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9i
QnVpbGRlcigpOworICAgIHZhciBiYiA9IFtdOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7
ICsraSkgewotICAgICAgICBiYi5hcHBlbmQoYmxvYik7CisgICAgICAgIGJiLnB1c2goYmxvYik7
CiAgICAgfQotICAgIHJldHVybiBiYi5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKGJi
KTsKIH0KIAogZnVuY3Rpb24gb25Xcml0ZVN0YXJ0KGUpIHsKQEAgLTc4LDkgKzc4LDcgQEAgZnVu
Y3Rpb24gb25Xcml0ZUVuZChlKSB7CiAKIGZ1bmN0aW9uIHN0YXJ0V3JpdGUoZmlsZVdyaXRlcikg
ewogICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4KLSAgICB2YXIgYmIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0g
ICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOworICAgIHZhciBibG9iID0gdGVu
WEJsb2IobmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKSk7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJs
b2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxv
Yik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2Zp
bGUtd3JpdGVyLWdjLWJsb2IuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3Vy
Y2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMKaW5kZXggODRiYmFiYi4uNDhmYjc1YyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1n
Yy1ibG9iLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmls
ZS13cml0ZXItZ2MtYmxvYi5qcwpAQCAtMTQsMTggKzE0LDE2IEBAIGZ1bmN0aW9uIG9uVGVzdFN1
Y2Nlc3MoKSB7CiB9CiAKIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICB2YXIgYmIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICB2YXIgYmIgPSBbXTsKICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICBi
Yi5wdXNoKGJsb2IpOwogICAgIH0KLSAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworICAgIHJldHVy
biBuZXcgQmxvYihiYik7CiB9CiAKIGZ1bmN0aW9uIHN0YXJ0V3JpdGUod3JpdGVyKSB7CiAgICAg
Ly8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgIHZhciBiYiA9IG5ldyBXZWJL
aXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKLSAgICB2YXIg
YmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihu
ZXcgQmxvYihbImxvcmVtIGlwc3VtIl0pKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAg
ICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0
ZXItc3luYy10cnVuY2F0ZS1leHRlbmQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1bmNhdGUtZXh0ZW5kLmpzCmluZGV4IDNkZjk5
MTMuLjhmYmIwMTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNv
dXJjZXMvZmlsZS13cml0ZXItc3luYy10cnVuY2F0ZS1leHRlbmQuanMKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRydW5jYXRlLWV4
dGVuZC5qcwpAQCAtMTUsMTAgKzE1LDggQEAgcmVtb3ZlQWxsSW5EaXJlY3RvcnlTeW5jKGZpbGVT
eXN0ZW0ucm9vdCk7CiB2YXIgZW50cnkgPSBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSgnYScsIHtj
cmVhdGU6dHJ1ZSwgZXhjbHVzaXZlOnRydWV9KTsKIHZhciB3cml0ZXIgPSBlbnRyeS5jcmVhdGVX
cml0ZXIoKTsKIGFzc2VydCghd3JpdGVyLnBvc2l0aW9uKTsKLXZhciBidWlsZGVyID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7CiB2YXIgdGVzdERhdGEgPSAidGVzdCBkYXRhIjsKLWJ1aWxkZXIu
YXBwZW5kKHRlc3REYXRhKTsKLXdyaXRlci53cml0ZShidWlsZGVyLmdldEJsb2IoKSk7Cit3cml0
ZXIud3JpdGUobmV3IEJsb2IoW3Rlc3REYXRhXSkpOwogYXNzZXJ0KHdyaXRlci5sZW5ndGggPT0g
dGVzdERhdGEubGVuZ3RoKTsKIGFzc2VydCh3cml0ZXIucG9zaXRpb24gPT0gd3JpdGVyLmxlbmd0
aCk7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS13cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanMK
aW5kZXggOGYxZWQ5YS4uNmUzZDU3YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanMKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5j
LXdyaXRlLW92ZXJsYXBwZWQuanMKQEAgLTE1LDEwICsxNSw4IEBAIHJlbW92ZUFsbEluRGlyZWN0
b3J5U3luYyhmaWxlU3lzdGVtLnJvb3QpOwogdmFyIGVudHJ5ID0gZmlsZVN5c3RlbS5yb290Lmdl
dEZpbGUoJ2EnLCB7Y3JlYXRlOnRydWUsIGV4Y2x1c2l2ZTp0cnVlfSk7CiB2YXIgd3JpdGVyID0g
ZW50cnkuY3JlYXRlV3JpdGVyKCk7CiBhc3NlcnQoIXdyaXRlci5wb3NpdGlvbik7Ci12YXIgYnVp
bGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwogdmFyIHRlc3REYXRhID0gInRlc3QgZGF0
YSI7Ci1idWlsZGVyLmFwcGVuZCh0ZXN0RGF0YSk7Ci12YXIgYmxvYiA9IGJ1aWxkZXIuZ2V0Qmxv
YigpOwordmFyIGJsb2IgPSBuZXcgQmxvYihbdGVzdERhdGFdKTsKIHdyaXRlci53cml0ZShibG9i
KTsKIGFzc2VydCh3cml0ZXIubGVuZ3RoID09IHRlc3REYXRhLmxlbmd0aCk7CiBhc3NlcnQod3Jp
dGVyLnBvc2l0aW9uID09IHdyaXRlci5sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMKaW5kZXgg
OWFjODQ0MC4uZTI2Y2VhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzCkBAIC0xMzQsOSArMTM0LDcg
QEAgZnVuY3Rpb24gY3JlYXRlRW1wdHlGaWxlKGZpbGVTeXN0ZW0sIGZpbGVOYW1lLCBvblN1Y2Nl
c3MpCiAKIGZ1bmN0aW9uIHdyaXRlU3RyaW5nKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgb2Zmc2V0
LCBkYXRhLCBvblN1Y2Nlc3MpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7Ci0gICAgYmIuYXBwZW5kKGRhdGEpOwotICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigpOwor
ICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdKTsKICAgICBmaWxlV3JpdGVyLnNlZWsob2Zm
c2V0KTsKICAgICBmaWxlV3JpdGVyLndyaXRlKGJsb2IpOwogICAgIGZpbGVXcml0ZXIub25lcnJv
ciA9IG9uRXJyb3I7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVhcGkv
Y3JlYXRlLWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvZmlsZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCmluZGV4IDA0Yzli
ZTAuLjM4MDg1MWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZWFwaS9j
cmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvZmlsZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCkBAIC0yOCw2
ICsyOCw2IEBAIHZhciB0ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKIDxib2R5PgogPHA+IFRl
c3QgY2FzZSBmb3IgY2hlY2tpbmcgYmxvYiBVUkwgbm90IGFsbG93ZWQgdG8gYmUgY3JlYXRlZCBm
cm9tIHRoZSBjb2RlIHJ1bm5pbmcgZnJvbSBkYXRhIFVSSTwvcD4KIDxwcmUgaWQ9J2NvbnNvbGUn
PjwvcHJlPgotPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1sLCUzQ3NjcmlwdCUzRXZhciUyMGIl
MjAlM0QlMjBuZXclMjBXZWJLaXRCbG9iQnVpbGRlcigpJTNCYi5hcHBlbmQoJTIyRm9vJTIyKSUz
QnZhciUyMGJiJTIwJTNEJTIwYi5nZXRCbG9iKCd0ZXh0JTJGaHRtbCcpJTNCdG9wLmxvY2F0aW9u
JTNEJ2h0dHAlM0ElMkYlMkYxMjcuMC4wLjElM0E4MDAwJTJGZmlsZWFwaSUyRmNyZWF0ZS1ibG9i
LXVybC1mcm9tLWRhdGEtdXJsLmh0bWwlMjMnJTIwJTJCJTIwd2luZG93LndlYmtpdFVSTC5jcmVh
dGVPYmplY3RVUkwoYmIpJTNCJTNDJTJGc2NyaXB0JTNFIj48L2lmcmFtZT4KKzxpZnJhbWUgc3Jj
PSJkYXRhOnRleHQvaHRtbCwlM0NzY3JpcHQlM0V2YXIlMjBiYiUyMCUzRCUyMG5ldyUyMEJsb2Il
MjglNUIlMjJGb28lMjIlNUQlMkMlMjAlN0J0eXBlJTNBJTIydGV4dCUyRmh0bWwlMjIlN0QlMjkl
M0J0b3AubG9jYXRpb24lM0QlMjdodHRwJTNBJTJGJTJGMTI3LjAuMC4xJTNBODAwMCUyRmZpbGVh
cGklMkZjcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sJTIzJTI3JTIwJTJCJTIwd2lu
ZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwlMjhiYiUyOSUzQiUzQyUyRnNjcmlwdCUzRSI+
PC9pZnJhbWU+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sCmlu
ZGV4IGVjMTZhNTQuLmFkNGFkZDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
ZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sCkBAIC0y
NCw5ICsyNCw3IEBACiAgICAgICB3cml0ZXIub253cml0ZWVuZCA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICBjYWxsYmFjayhyYW5kKTsKICAgICAgIH07Ci0gICAgICB2YXIgYmIgPSBuZXcgV2ViS2l0
QmxvYkJ1aWxkZXIoKTsKLSAgICAgIGJiLmFwcGVuZCgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJlc3VsdCIpLmlubmVySFRNTCA9IChleHBlY3RlZCA9PSAnICsgcmFuZCArICcpID8gIlNVQ0NF
U1MiIDogIkZBSUxVUkUiOycpOwotICAgICAgd3JpdGVyLndyaXRlKGJiLmdldEJsb2IoJ3RleHQv
cGxhaW4nKSk7CisgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoWydkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gKGV4cGVjdGVkID09ICcgKyByYW5kICsgJykg
PyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSI7J10sIHt0eXBlOid0ZXh0L3BsYWluJ30pKTsKICAgICB9
CiAKICAgICBnZXRGaWxlV3JpdGVyKGZ1bmN0aW9uKGZpbGUsIHdyaXRlcikgewpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291cmNlcy9oeWJyaWQtYmxv
Yi11dGlsLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291cmNlcy9o
eWJyaWQtYmxvYi11dGlsLmpzCmluZGV4IDA2MTU5OTYuLjZkM2U5ODYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvYmxvYi9yZXNvdXJjZXMvaHlicmlkLWJsb2ItdXRp
bC5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Jsb2IvcmVzb3VyY2VzL2h5
YnJpZC1ibG9iLXV0aWwuanMKQEAgLTEzMSwxNiArMTMxLDE5IEBAIHZhciBIeWJyaWRCbG9iVGVz
dFV0aWwgPSBmdW5jdGlvbih0ZXN0RnVuYywgb3B0X2ZpbGVQYXRocykgewogCiAgICAgdGhpcy5h
cHBlbmRBbmRDcmVhdGVCbG9iID0gZnVuY3Rpb24oaXRlbXMsIG9wdF9lbmRpbmcsIG9wdF90eXBl
KQogICAgIHsKLSAgICAgICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAg
ICAgIHZhciBidWlsZGVyID0gW107CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMu
bGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGlmIChpdGVtc1tpXSBpbnN0YW5jZW9mIEFycmF5
KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJheSwgY29tYmluZSBpdHMgZWxl
bWVudHMgYW5kIGFwcGVuZCBhcyBhIGJsb2IuCi0gICAgICAgICAgICAgICAgYmIuYXBwZW5kKHRo
aXMuYXBwZW5kQW5kQ3JlYXRlQmxvYihpdGVtc1tpXSwgb3B0X2VuZGluZywgb3B0X3R5cGUpKTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbXNbaV0udHlwZSA9PSAiZGF0YSIgJiYgb3B0X2Vu
ZGluZykKLSAgICAgICAgICAgICAgICBiYi5hcHBlbmQoaXRlbXNbaV0udmFsdWUsIG9wdF9lbmRp
bmcpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJiLmFwcGVuZChpdGVtc1tp
XS52YWx1ZSk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5wdXNoKHRoaXMuYXBwZW5kQW5kQ3Jl
YXRlQmxvYihpdGVtc1tpXSwgb3B0X2VuZGluZywgb3B0X3R5cGUpKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGJ1aWxkZXIucHVzaChpdGVtc1tpXS52YWx1ZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGJiLmdldEJsb2Iob3B0X3R5cGUpOworICAgICAgICB2YXIg
b3B0aW9ucyA9IHt9OworICAgICAgICBpZiAob3B0X2VuZGluZykKKyAgICAgICAgICAgIG9wdGlv
bnMuZW5kaW5ncyA9IG9wdF9lbmRpbmc7CisgICAgICAgIGlmIChvcHRfdHlwZSkKKyAgICAgICAg
ICAgIG9wdGlvbnMudHlwZSA9IG9wdF90eXBlOworICAgICAgICByZXR1cm4gbmV3IEJsb2IoYnVp
bGRlciwgb3B0aW9ucyk7CiAgICAgfTsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJv
bS1yZW1vdGUtZXhwZWN0ZWQudHh0CmluZGV4IGM4NDAwZTUuLmYwNDZkMmYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1y
ZW1vdGUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
ZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBA
QAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDExOiBmaWxlc3lzdGVtOmh0dHA6Ly9sb2NhbGhvc3Q6
ODAwMC90ZW1wb3JhcnkvcGFnZS5odG1sIGNyZWF0ZWQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
OTogZmlsZXN5c3RlbTpodHRwOi8vbG9jYWxob3N0OjgwMDAvdGVtcG9yYXJ5L3BhZ2UuaHRtbCBj
cmVhdGVkLgogQ09OU09MRSBNRVNTQUdFOiBOb3QgYWxsb3dlZCB0byBsb2FkIGxvY2FsIHJlc291
cmNlOiBmaWxlc3lzdGVtOmh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90ZW1wb3JhcnkvcGFnZS5odG1s
CiBUaGlzIHRlc3QgaXMgdG8gc2VlIGlmIGEgcmVtb3RlIGZpbGUgY2FuIGluY2x1ZGUgYSBsb2Nh
bCBwYWdlIHZpYSBhIGZpbGVzeXN0ZW06IFVSSSBpbiBhbiBpRnJhbWUuCiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lz
dGVtLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2Vz
L2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbAppbmRleCAxZTNhZTIxLi5jZWRiYjBkIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUt
ZmlsZXN5c3RlbS1maWxlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCkBAIC01LDEyICs1LDEwIEBA
CiAgICAgICAgICAgICB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShURU1QT1JBUlksIDEwMCwgZnVu
Y3Rpb24oZnMpIHsKICAgICAgICAgICAgICAgICBmcy5yb290LmdldEZpbGUoInBhZ2UuaHRtbCIs
IHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIGVu
dHJ5LmNyZWF0ZVdyaXRlcihmdW5jdGlvbih3cml0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYmIuYXBwZW5kKCc8ZGl2IGlkPSJpbm5lckRpdiI+VmlzaWJsZSBDb250ZW50czwvZGl2
PlxuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIub253cml0ZSA9IGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVudHJ5LnRvVVJM
KCkgKyAiIGNyZWF0ZWQuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKGJiLmdldEJsb2IoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoWyc8ZGl2IGlkPSJpbm5lckRpdiI+Vmlz
aWJsZSBDb250ZW50czwvZGl2PlxuJ10pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbCBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3Qu
aHRtbAppbmRleCA2NjU0NjI1Li5mNjRhZDdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0Lmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9iamVjdC5o
dG1sCkBAIC0xNSw4ICsxNSw3IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAK
IGZ1bmN0aW9uIGNyZWF0ZUVtcHR5QmxvYigpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0
dXJuIG5ldyBCbG9iKFtdKTsKIH0KIAogdmFyIHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcu
MC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9lY2hvIik7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50
LWFmdGVyLWNsb3NlLWluLWJ1c3kuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sCmlu
ZGV4IGFjMTdlMDEuLjM5OTUwNzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVm
ZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sCkBAIC0yMyw5ICsyMyw3IEBAIGZ1
bmN0aW9uIGNyZWF0ZVN0cmluZ1dpdGhMZW5ndGgobGVuZ3RoKQogCiBmdW5jdGlvbiBjcmVhdGVC
bG9iV2l0aExlbmd0aChsZW5ndGgpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZChuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKSk7
Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihbbmV3
IEFycmF5QnVmZmVyKGxlbmd0aCldKTsKIH0KIAogdmFyIHdzID0gbmV3IFdlYlNvY2tldCgid3M6
Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9lY2hvIik7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1v
dW50LWFmdGVyLWNsb3NlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwKaW5kZXggMjdmMjM4MC4u
NGIzZDEwZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xv
c2UuaHRtbApAQCAtMjMsOSArMjMsNyBAQCBmdW5jdGlvbiBjcmVhdGVTdHJpbmdXaXRoTGVuZ3Ro
KGxlbmd0aCkKIAogZnVuY3Rpb24gY3JlYXRlQmxvYldpdGhMZW5ndGgobGVuZ3RoKQogewotICAg
IHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBl
bmQobmV3IEFycmF5QnVmZmVyKGxlbmd0aCkpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2Io
KTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcihsZW5ndGgpXSk7CiB9CiAK
IHZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2ltcGxlIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2IuaHRtbAppbmRleCAyYjgwZmEyLi42NmI0
NDkxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9o
eWJpL3NlbmQtYmxvYi5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwKQEAgLTIwLDE1ICsyMCwxMiBAQCBmdW5jdGlvbiBz
dGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQogCiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmlu
Z0hlbGxvV29ybGQoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIkhlbGxvLCB3b3JsZCEiKTsKLSAgICByZXR1cm4gYnVp
bGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKFsiSGVsbG8sIHdvcmxkISJdKTsK
IH0KIAogZnVuY3Rpb24gY3JlYXRlRW1wdHlCbG9iKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9IG5l
dyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAg
ICByZXR1cm4gbmV3IEJsb2IoW10pOwogfQogCiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmlu
Z0FsbERpc3RpbmN0Qnl0ZXMoKQpAQCAtMzYsOSArMzMsNyBAQCBmdW5jdGlvbiBjcmVhdGVCbG9i
Q29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQogICAgIHZhciBhcnJheSA9IG5ldyBVaW50OEFy
cmF5KDI1Nik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkKICAgICAgICAgYXJy
YXlbaV0gPSBpOwotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0g
ICAgYnVpbGRlci5hcHBlbmQoYXJyYXkuYnVmZmVyKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRC
bG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKFthcnJheS5idWZmZXJdKTsKIH0KIAogdmFyIHVy
bCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL2NoZWNrLWJpbmFy
eS1tZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sCmluZGV4
IDZkYTk4M2I2Li4wMWI1NDU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwu
aHRtbApAQCAtNTksOSArNTksNyBAQCBmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVyKHdyaXRlcikK
ICAgICB9OwogICAgIHdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQobWVzc2FnZVRvV3JpdGUpOwotICAgICAgICB3cml0ZXIud3JpdGUoYnVpbGRlci5nZXRC
bG9iKCkpOworICAgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoW21lc3NhZ2VUb1dyaXRlXSkp
OwogICAgICAgICB3cml0ZXIub253cml0ZSA9IGRpZFdyaXRlRmlsZTsKICAgICB9OwogfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWZpbGUtYmxvYi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCmluZGV4IDJhMzQxYmMuLjJkM2NkZTggMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxl
LWJsb2IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9o
eWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwKQEAgLTU5LDkgKzU5LDcgQEAgZnVuY3Rpb24gZGlkR2V0
RmlsZVdyaXRlcih3cml0ZXIpCiAgICAgfTsKICAgICB3cml0ZXIub253cml0ZSA9IGZ1bmN0aW9u
KCkKICAgICB7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1lc3NhZ2VUb1dyaXRlKTsKLSAgICAgICAgd3JpdGVy
LndyaXRlKGJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICAgICAgd3JpdGVyLndyaXRlKG5ldyBCbG9i
KFttZXNzYWdlVG9Xcml0ZV0pKTsKICAgICAgICAgd3JpdGVyLm9ud3JpdGUgPSBkaWRXcml0ZUZp
bGU7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5k
LWJsb2IuanMKaW5kZXggYzAxMjBlYi4uMGRiNWNiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJs
b2IuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93
b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2IuanMKQEAgLTEsMTQgKzEsMTEgQEAKIGZ1bmN0aW9u
IGNyZWF0ZUJsb2JDb250YWluaW5nSGVsbG9Xb3JsZCgpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiSGVsbG8sIHdvcmxk
ISIpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2Io
WyJIZWxsbywgd29ybGQhIl0pOwogfQogCiBmdW5jdGlvbiBjcmVhdGVFbXB0eUJsb2IoKQogewot
ICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgcmV0dXJuIGJ1
aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihbXSk7CiB9CiAKIGZ1bmN0aW9u
IGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRlcygpCkBAIC0xNiw5ICsxMyw3IEBA
IGZ1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRlcygpCiAgICAgdmFy
IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1
NjsgKytpKQogICAgICAgICBhcnJheVtpXSA9IGk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZChhcnJheS5idWZmZXIpOwotICAg
IHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW2FycmF5LmJ1
ZmZlcl0pOwogfQogCiB2YXIgdXJsID0gIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvY2hlY2stYmluYXJ5LW1lc3NhZ2VzIjsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBy
b3BlcnRpZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9t
L1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggNzk4ZGRmNC4uYjkw
ZGQ1ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRv
dy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKQEAg
LTE4MCw2ICsxODAsNyBAQCB3aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5wcmV2ZW50
RGVmYXVsdCBbZnVuY3Rpb25dCiB3aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5zdG9w
SW1tZWRpYXRlUHJvcGFnYXRpb24gW2Z1bmN0aW9uXQogd2luZG93LkJlZm9yZUxvYWRFdmVudC5w
cm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uIFtmdW5jdGlvbl0KIHdpbmRvdy5CbG9iIFtvYmplY3Qg
QmxvYkNvbnN0cnVjdG9yXQord2luZG93LkJsb2IubGVuZ3RoIFtudW1iZXJdCiB3aW5kb3cuQmxv
Yi5wcm90b3R5cGUgW29iamVjdCBCbG9iUHJvdG90eXBlXQogd2luZG93LkJvb2xlYW4gW2Z1bmN0
aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbiBbb2JqZWN0IENEQVRBU2VjdGlvbkNvbnN0cnVjdG9y
XQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbm9ibG9icy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLWV4cGVjdGVk
LnR4dAppbmRleCBlOWMzMjNhLi5jMmIwYjA0YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbm9ibG9icy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbm9ibG9icy1leHBlY3RlZC50eHQKQEAgLTE2LDEzICsxNiw5IEBAIHN0
b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCiBzdG9yZS5wdXQoJ3ZhbHVl
JywgJ2tleScpCiAKIHRlc3RCbG9iKCk6Ci1CbG9iQnVpbGRlciA9IHdpbmRvdy5CbG9iQnVpbGRl
ciB8fCB3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXIKLVBBU1MgQmxvYkJ1aWxkZXIgIT0gbnVsbCBp
cyB0cnVlCiBQQVNTIEZpbGVSZWFkZXIgIT0gbnVsbCBpcyB0cnVlCi1idWlsZGVyID0gbmV3IEJs
b2JCdWlsZGVyKCkKIHRlc3RfY29udGVudCA9ICdUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyBvbmx5
IGEgdGVzdC4nCi1idWlsZGVyLmFwcGVuZCh0ZXN0X2NvbnRlbnQpCi1ibG9iID0gYnVpbGRlci5n
ZXRCbG9iKCkKK2Jsb2IgPSBuZXcgQmxvYihbdGVzdF9jb250ZW50XSkKIAogdmFsaWRhdGVFeGNl
cHRpb25zKGJsb2IpOgogdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywg
SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL25vYmxvYnMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L25vYmxvYnMuaHRtbAppbmRleCA0ZWM5NmE0Li5hNGQ3M2QyIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbm9ibG9icy5odG1sCkBAIC01OCwxMyArNTgsOSBAQCBmdW5jdGlvbiB0
ZXN0QmxvYigpCiAgICAgZGVidWcoIiIpOwogICAgIGRlYnVnKCJ0ZXN0QmxvYigpOiIpOwogCi0g
ICAgZXZhbEFuZExvZygiQmxvYkJ1aWxkZXIgPSB3aW5kb3cuQmxvYkJ1aWxkZXIgfHwgd2luZG93
LldlYktpdEJsb2JCdWlsZGVyIik7Ci0gICAgc2hvdWxkQmVUcnVlKCJCbG9iQnVpbGRlciAhPSBu
dWxsIik7CiAgICAgc2hvdWxkQmVUcnVlKCJGaWxlUmVhZGVyICE9IG51bGwiKTsKLSAgICBldmFs
QW5kTG9nKCJidWlsZGVyID0gbmV3IEJsb2JCdWlsZGVyKCkiKTsKICAgICBldmFsQW5kTG9nKCJ0
ZXN0X2NvbnRlbnQgPSAnVGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgb25seSBhIHRlc3QuJyIpOwot
ICAgIGV2YWxBbmRMb2coImJ1aWxkZXIuYXBwZW5kKHRlc3RfY29udGVudCkiKTsKLSAgICBldmFs
QW5kTG9nKCJibG9iID0gYnVpbGRlci5nZXRCbG9iKCkiKTsKKyAgICBldmFsQW5kTG9nKCJibG9i
ID0gbmV3IEJsb2IoW3Rlc3RfY29udGVudF0pIik7CiAgICAgdmFsaWRhdGVFeGNlcHRpb25zKCJi
bG9iIiwgdGVzdEZpbGUpOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwKaW5kZXggZmRhOGQyYi4uZDI4YWI3YyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS5odG1s
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUuaHRt
bApAQCAtMzc2LDEzICszNzYsOSBAQCBmdW5jdGlvbiB0ZXN0QmxvYihjYWxsYmFjaykKICAgICBj
YWxsYmFjaygpOwogICAgIHJldHVybjsKIAotICAgIGV2YWxBbmRMb2coIkJsb2JCdWlsZGVyID0g
c2VsZi5CbG9iQnVpbGRlciB8fCBzZWxmLldlYktpdEJsb2JCdWlsZGVyIik7Ci0gICAgc2hvdWxk
QmVUcnVlKCJCbG9iQnVpbGRlciAhPSBudWxsIik7CiAgICAgc2hvdWxkQmVUcnVlKCJGaWxlUmVh
ZGVyICE9IG51bGwiKTsKLSAgICBldmFsQW5kTG9nKCJidWlsZGVyID0gbmV3IEJsb2JCdWlsZGVy
KCkiKTsKICAgICBldmFsQW5kTG9nKCJ0ZXN0X2NvbnRlbnQgPSAnVGhpcyBpcyBhIHRlc3QuIFRo
aXMgaXMgb25seSBhIHRlc3QuJyIpOwotICAgIGV2YWxBbmRMb2coImJ1aWxkZXIuYXBwZW5kKHRl
c3RfY29udGVudCkiKTsKLSAgICBldmFsQW5kTG9nKCJ0ZXN0X2RhdGEgPSBidWlsZGVyLmdldEJs
b2IoKSIpOworICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YSA9IG5ldyBCbG9iKFt0ZXN0X2NvbnRl
bnRdKSIpOwogICAgIHRlc3RWYWx1ZSh0ZXN0X2RhdGEsIGZ1bmN0aW9uKHJlc3VsdCkgewogICAg
ICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdDsKICAgICAgICAgc2hvdWxkQmVUcnVlKCJ0ZXN0X2Rh
dGEgIT09IHJlc3VsdCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDBiNWVkZjQuLjEzODE2MmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMi0wNC0yMiAgS2ludWtvIFlhc3VkYSA8a2ludWtvQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIEJsb2IgY29uc3RydWN0
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTU1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEpT
QyBhbmQgVjggaW1wbGVtZW50YXRpb24gZm9yIEJsb2IgY29uc3RydWN0b3IuCisgICAgICAgIEFs
c28gZml4ZXMgc29tZSB0ZXN0IGV4cGVjdGF0aW9ucy4KKyAgICAgICAgVGhpcyBwYXRjaCBpcyBi
YXNlZCBvbiBTYW0gV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykncyBKU0MgcGF0Y2guCisKKyAgICAg
ICAgVGVzdHM6IEFsbCBCbG9iQnVpbGRlciB0ZXN0cyBzaG91bGQgd29yayB3aXRoIHRoZSBuZXcg
QmxvYiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9i
KToKKyAgICAgICAgSW1wbGVtZW50IGJsb2IgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Qmxv
Yjo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIEltcGxlbWVudCBibG9iIGNvbnN0cnVj
dG9yLgorCisgICAgICAgICogZmlsZWFwaS9CbG9iLmlkbDoKKyAgICAgICAgQWRkIGNvbnN0cnVj
dG9yIHRvIElETC4KKworICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6CisgICAg
ICAgIEFkZCBCbG9iIGNvbnN0cnVjdG9yIHRvIHRoZSB3b3JrZXIgZ2xvYmFsIG9iamVjdC4KKwog
MjAxMi0wNC0yMiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIERhbWFnZSBUcmFja2VyIG5lZWRzIHRvIHVzZSBDQ01hdGhVdGlsIHRy
YW5zZm9ybXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCmlu
ZGV4IDA0OTQ1NjAuLjcyZDQ1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmxvYkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcApAQCAtMzIsOCArMzIsMTUgQEAKICNpbmNsdWRlICJKU0Jsb2IuaCIKIAog
I2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0ZpbGUuaCIKKyNpbmNsdWRlICJXZWJLaXRCbG9iQnVpbGRlci5oIgorI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTEsNCArNTgs
NjkgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmxvYiogYmxvYikKICAgICByZXR1cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4
ZWMsIGdsb2JhbE9iamVjdCwgQmxvYiwgYmxvYik7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNCbG9iQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQmxvYihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3Vt
ZW50cyIpKTsKKworICAgIEpTQmxvYkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0
PEpTQmxvYkNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJCbG9iIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQg
ZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CisKKyAgICBKU1ZhbHVlIGZpcnN0QXJnID0gZXhl
Yy0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFpc0pTQXJyYXkoZmlyc3RBcmcpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJn
dW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yIGlzIG5vdCBvZiB0eXBlIEFycmF5IikpOworCisgICAg
SlNBcnJheSogYXJyYXkgPSBhc0FycmF5KGZpcnN0QXJnKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBTdHJpbmcgZW5kaW5n
cyA9ICJ0cmFuc3BhcmVudCI7CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkg
eworICAgICAgICBKU1ZhbHVlIGJsb2JQcm9wZXJ0eUJhZ1ZhbHVlID0gZXhlYy0+YXJndW1lbnQo
MSk7CisKKyAgICAgICAgaWYgKGJsb2JQcm9wZXJ0eUJhZ1ZhbHVlLmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxk
IGFuIG9iamVjdC4KKyAgICAgICAgICAgIEpTT2JqZWN0KiBibG9iUHJvcGVydHlCYWdPYmplY3Qg
PSBibG9iUHJvcGVydHlCYWdWYWx1ZS50b09iamVjdChleGVjKTsKKworICAgICAgICAgICAgLy8g
Q3JlYXRlIHRoZSBkaWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0aGUgaW5pdGlhbGl6ZXIgb2JqZWN0
LgorICAgICAgICAgICAgRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIGJsb2JQcm9wZXJ0eUJh
Z09iamVjdCk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAg
ICAgICAgLy8gRXh0cmFjdCB0eXBlIGFuZCBlbmRpbmdzIGZpZWxkcy4KKyAgICAgICAgICAgIGRp
Y3Rpb25hcnkuZ2V0KCJ0eXBlIiwgdHlwZSk7CisgICAgICAgICAgICBpZiAoZGljdGlvbmFyeS5n
ZXQoImVuZGluZ3MiLCBlbmRpbmdzKSkgeworICAgICAgICAgICAgICAgIGlmIChlbmRpbmdzICE9
ICJ0cmFuc3BhcmVudCIgJiYgZW5kaW5ncyAhPSAibmF0aXZlIikgeworICAgICAgICAgICAgICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VS
VChlbmRpbmdzID09ICJ0cmFuc3BhcmVudCIgfHwgZW5kaW5ncyA9PSAibmF0aXZlIik7CisKKyAg
ICAvLyBGSVhNRTogdGhpcyB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlIFdlYktpdEJsb2JCdWlsZGVy
IHdlcmUgYSBzdGFjayBvYmplY3QgdG8gYXZvaWQgdGhlIGFsbG9jYXRpb24uCisgICAgUmVmUHRy
PFdlYktpdEJsb2JCdWlsZGVyPiBibG9iQnVpbGRlciA9IFdlYktpdEJsb2JCdWlsZGVyOjpjcmVh
dGUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdldEluZGV4KGkpOworICAgICAgICBpZiAoaXRlbS5p
bmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZvKSkKKyAgICAgICAgICAgIGJsb2JCdWlsZGVy
LT5hcHBlbmQodG9BcnJheUJ1ZmZlcihpdGVtKSk7CisgICAgICAgIGVsc2UgaWYgKGl0ZW0uaW5o
ZXJpdHMoJkpTQmxvYjo6c19pbmZvKSkKKyAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQo
dG9CbG9iKGl0ZW0pKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyaW5n
ID0gdXN0cmluZ1RvU3RyaW5nKGl0ZW0udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgICAgICBibG9iQnVpbGRlci0+
YXBwZW5kKHN0cmluZywgZW5kaW5ncywgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGJsb2JCdWlsZGVyLT5nZXRCbG9iKHR5
cGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMs
IGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBCbG9iLCBibG9iLmdldCgpKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKaW5kZXggNjg1MzU3OC4uOTBjN2U4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAK
QEAgLTMxLDkgKzMxLDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxvYi5o
IgogCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJWOEFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhCbG9iLmgiCiAjaW5jbHVkZSAi
VjhGaWxlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdEJsb2JCdWls
ZGVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00OSw0ICs1NSw2NiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChCbG9iKiBpbXBsKQog
ICAgIHJldHVybiBWOEJsb2I6OndyYXAoaW1wbCk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOEJsb2I6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5CbG9iLkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFy
Z3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2Jq
ZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5
OjpUeXBlRXJyb3IpOworCisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENv
bnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5I
b2xkZXIoKTsKKworICAgIGlmICghYXJncy5MZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKworICAg
IC8vIEdldCB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQmxvYiBjb25zdHJ1Y3Rvcidz
IGFzc29jaWF0ZWQgZnJhbWUgaXMgbm90IGF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVy
cm9yKTsKKworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGZpcnN0QXJnID0gYXJnc1swXTsKKyAg
ICBpZiAoIWZpcnN0QXJnLT5Jc0FycmF5KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJG
aXJzdCBhcmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMgbm90IG9mIHR5cGUgQXJyYXkiLCBW
OFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgRVhDRVBUSU9OX0JMT0NLKHY4OjpMb2NhbDx2ODo6
QXJyYXk+LCBibG9iUGFydHMsIHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGZpcnN0QXJnKSk7
CisKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBTdHJpbmcgZW5kaW5ncyA9ICJ0cmFuc3BhcmVudCI7
CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNPYmplY3QoKSkgewor
ICAgICAgICBEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoYXJnc1sxXSk7CisgICAgICAgIGRpY3Rpb25h
cnkuZ2V0KCJ0eXBlIiwgdHlwZSk7CisgICAgICAgIGlmIChkaWN0aW9uYXJ5LmdldCgiZW5kaW5n
cyIsIGVuZGluZ3MpKSB7CisgICAgICAgICAgICBpZiAoZW5kaW5ncyAhPSAidHJhbnNwYXJlbnQi
ICYmIGVuZGluZ3MgIT0gIm5hdGl2ZSIpIHsKKyAgICAgICAgICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICAgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBB
U1NFUlQoZW5kaW5ncyA9PSAidHJhbnNwYXJlbnQiIHx8IGVuZGluZ3MgPT0gIm5hdGl2ZSIpOwor
CisgICAgUmVmUHRyPFdlYktpdEJsb2JCdWlsZGVyPiBibG9iQnVpbGRlciA9IFdlYktpdEJsb2JC
dWlsZGVyOjpjcmVhdGUoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYmxvYlBhcnRz
LT5MZW5ndGgoKTsgKytpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGl0ZW0gPSBi
bG9iUGFydHMtPkdldCh2ODo6VWludDMyOjpOZXcoaSkpOworICAgICAgICBBU1NFUlQoIWl0ZW0u
SXNFbXB0eSgpKTsKKyAgICAgICAgaWYgKFY4QXJyYXlCdWZmZXI6Okhhc0luc3RhbmNlKGl0ZW0p
KSB7CisgICAgICAgICAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSBWOEFycmF5QnVmZmVy
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGl0ZW0pKTsKKyAgICAgICAg
ICAgIEFTU0VSVChhcnJheUJ1ZmZlcik7CisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5k
KGFycmF5QnVmZmVyKTsKKyAgICAgICAgfSBlbHNlIGlmIChWOEJsb2I6Okhhc0luc3RhbmNlKGl0
ZW0pKSB7CisgICAgICAgICAgICBCbG9iKiBibG9iID0gVjhCbG9iOjp0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGl0ZW0pKTsKKyAgICAgICAgICAgIEFTU0VSVChibG9iKTsK
KyAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQoYmxvYik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBFWENFUFRJT05fQkxPQ0soU3RyaW5nLCBzdHJpbmdWYWx1ZSwgdG9XZWJD
b3JlU3RyaW5nKGl0ZW0tPlRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5h
cHBlbmQoc3RyaW5nVmFsdWUsIGVuZGluZ3MsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAg
ICB9CisgICAgfQorCisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBibG9iQnVpbGRlci0+Z2V0Qmxv
Yih0eXBlKTsKKyAgICByZXR1cm4gdG9WOChibG9iLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwKaW5kZXggMjljNTE0MS4uNmI3ZTU5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0Jsb2IuaWRsCkBAIC0zMyw3ICszMyw5IEBAIG1vZHVsZSBodG1sIHsK
ICAgICBpbnRlcmZhY2UgWwogICAgICAgICBKU0dlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKICAg
ICAgICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcworICAgICAg
ICBKU05vU3RhdGljVGFibGVzLAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RvciwKKyAgICAgICAg
Q29uc3RydWN0b3JQYXJhbWV0ZXJzPTIKICAgICBdIEJsb2IgewogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
aWRsCmluZGV4IGJlOWU2YzAuLjU1YjNhNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmlkbApAQCAtODQsNiArODQsNyBAQCBtb2R1bGUgdGhyZWFkcyB7CiAKICNpZiBk
ZWZpbmVkKEVOQUJMRV9CTE9CKSAmJiBFTkFCTEVfQkxPQgogICAgICAgICBhdHRyaWJ1dGUgV2Vi
S2l0QmxvYkJ1aWxkZXJDb25zdHJ1Y3RvciBXZWJLaXRCbG9iQnVpbGRlcjsKKyAgICAgICAgYXR0
cmlidXRlIEJsb2JDb25zdHJ1Y3RvciBCbG9iOwogICAgICAgICBhdHRyaWJ1dGUgRmlsZVJlYWRl
ckNvbnN0cnVjdG9yIEZpbGVSZWFkZXI7CiAgICAgICAgIGF0dHJpYnV0ZSBGaWxlUmVhZGVyU3lu
Y0NvbnN0cnVjdG9yIEZpbGVSZWFkZXJTeW5jOwogI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="143644"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138331</attachid>
            <date>2012-04-23 06:23:51 -0700</date>
            <delta_ts>2012-04-26 19:56:09 -0700</delta_ts>
            <desc>new patch with v8 code</desc>
            <filename>updated2.patch</filename>
            <type>text/plain</type>
            <size>48274</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">Y29tbWl0IGJjNGY3YjY0OTE0OTM4NmI2YjQ0YWU2M2ZmM2NmMzVmODlkNTA0ZGYKQXV0aG9yOiBL
aW51a28gWWFzdWRhIDxraW51a29AY2hyb21pdW0ub3JnPgpEYXRlOiAgIE1vbiBBcHIgMjMgMTc6
MTY6MzYgMjAxMiArMDkwMAoKICAgIEFkZGluZyBCbG9iIENvbnN0cnVjdG9yCgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgx
NjdlNGIuLjU2MzE1YTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMi0wNC0yMyAgS2ludWtv
IFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkaW5nIEJsb2IgQ29u
c3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg0NTU1CisKKyAgICAgICAgUmV3cml0ZSBibG9iLXJlbGF0ZWQgdGVzdHMgd2l0aCBCbG9iQnVp
bGRlciB0byB1c2UgdGhlIG5ldyBCbG9iIGNvbnN0cnVjdG9yLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vSFRNTEFuY2hvckVsZW1l
bnQvYW5jaG9yLWRvd25sb2FkLXVuc2V0Lmh0bWw6CisgICAgICAgICogZmFzdC9kb20vSFRNTEFu
Y2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLmh0bWw6CisgICAgICAgICogZmFzdC9kb20vSFRN
TEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0Lmh0bWw6CisgICAgICAgICogZmFz
dC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQuaHRtbDoKKyAgICAgICAg
KiBmYXN0L2RvbS93aW5kb3ctZG9tdXJsLWNyYXNoLmh0bWw6CisgICAgICAgICogZmFzdC9maWxl
cy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWw6CisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLXNs
aWNlLXRlc3QuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2Itd2l0aC1udWxsLWNyYXNo
LWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1i
dWlsZGVyLWNyYXNoLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2Itd2l0
aC1udWxsLWNyYXNoLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Js
b2ItYnVpbGRlci1jcmFzaC5odG1sLgorICAgICAgICAqIGZhc3QvZmlsZXMvZmlsZS1yZWFkZXIt
ZmZmZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9maWxlLXJlYWRlci1mZmZk
Lmh0bWw6CisgICAgICAgICogZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy5odG1sOgor
ICAgICAgICAqIGZhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzOgor
ICAgICAgICAqIGZhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzOgorICAgICAgICAq
IGZhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZpYS1ibG9iLXVybC5odG1sOgorICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGlu
dWUuanM6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1h
Ym9ydC1kZXB0aC5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUt
d3JpdGVyLWFib3J0LmpzOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmls
ZS13cml0ZXItZXZlbnRzLmpzOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS13cml0ZXItZ2MtYmxvYi5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3Vy
Y2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1bmNhdGUtZXh0ZW5kLmpzOgorICAgICAgICAqIGZhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpz
OgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMu
anM6CisgICAgICAgICogaHR0cC90ZXN0cy9maWxlYXBpL2NyZWF0ZS1ibG9iLXVybC1mcm9tLWRh
dGEtdXJsLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9maWxlc3lzdGVtL25vLWNhY2hlLWZp
bGVzeXN0ZW0tdXJsLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291
cmNlcy9oeWJyaWQtYmxvYi11dGlsLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
ZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbDoK
KyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0
Lmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJl
ZEFtb3VudC1hZnRlci1jbG9zZS1pbi1idXN5Lmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sOgorICAg
ICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWw6Cisg
ICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1m
YWlsLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWZpbGUtYmxvYi5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHN0b3JhZ2UvaW5kZXhlZGRiL25vYmxvYnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0
b3JhZ2UvaW5kZXhlZGRiL25vYmxvYnMuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRk
Yi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWw6CisKIDIwMTItMDQtMjIgIFBhYmxvIEZsb3VyZXQgIDxw
YWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFJlc2V0IGV2ZW50IHByb3BhZ2F0aW9uIGFu
ZCBjYW5jZWxlZCBmbGFncyBpbiBFdmVudC5pbml0RXZlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC11bnNldC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2Fk
LXVuc2V0Lmh0bWwKaW5kZXggNjMyMWI5Yy4uMDE4YjM0NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLXVuc2V0Lmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRvd25s
b2FkLXVuc2V0Lmh0bWwKQEAgLTI0LDkgKzI0LDggQEAgZnVuY3Rpb24gY2xpY2soZWxtdCkKIAog
ZnVuY3Rpb24gcnVuVGVzdCgpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7Ci0gICAgYmIuYXBwZW5kKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0
bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5Q
QVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiIpOwotICAg
IHZhciBibG9iID0gYmIuZ2V0QmxvYigidGV4dC9odG1sIiwgImlubGluZSIpOworICAgIHZhciBz
dHJpbmcgPSAiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48
c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48
c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iOworICAgIHZhciBibG9iID0g
bmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAidGV4dC9odG1sIn0pOwogICAgIHZhciBsaW5rID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsb2ItdXJsIik7CiAgICAgbGluay5ocmVmID0gd2lu
ZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgbGluay5yZW1vdmVBdHRy
aWJ1dGUoJ2Rvd25sb2FkJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1M
QW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC5odG1sCmluZGV4IGM4Mzc3ZjkuLjkw
NjEwMTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50
L2FuY2hvci1kb3dubG9hZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNo
b3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC5odG1sCkBAIC0yNCw5ICsyNCw4IEBAIGZ1bmN0aW9u
IGNsaWNrKGVsbXQpCiAKIGZ1bmN0aW9uIHJ1blRlc3QoKQogewotICAgIHZhciBiYiA9IG5ldyBX
ZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+
PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlw
dD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0
PjwvaHRtbD4iKTsKLSAgICB2YXIgYmxvYiA9IGJiLmdldEJsb2IoInRleHQvaHRtbCIsICJpbmxp
bmUiKTsKKyAgICB2YXIgc3RyaW5nID0gIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRs
ZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxi
b2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+IjsK
KyAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtzdHJpbmddLCB7dHlwZTogInRleHQvaHRtbCJ9KTsK
ICAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJibG9iLXVybCIpOwogICAg
IGxpbmsuaHJlZiA9IHdpbmRvdy53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAg
IGNsaWNrKGxpbmspOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hv
ckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAppbmRleCBkMGI0
MmFmLi41NDUyYTJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9y
RWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbApAQCAtMjQs
OSArMjQsOCBAQCBmdW5jdGlvbiBjbGljayhlbG10KQogCiBmdW5jdGlvbiBydW5UZXN0KCkKIHsK
LSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoIjwh
ZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7Ci0gICAgdmFyIGJsb2IgPSBiYi5nZXRCbG9i
KCJ0ZXh0L2h0bWwiLCAiaW5saW5lIik7CisgICAgdmFyIHN0cmluZyA9ICI8IWRvY3R5cGUgaHRt
bD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIg
KyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2Ny
IiArICJpcHQ+PC9odG1sPiI7CisgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbc3RyaW5nXSwge3R5
cGU6ICJ0ZXh0L2h0bWwifSk7CiAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiYmxvYi11cmwiKTsKICAgICBsaW5rLmhyZWYgPSB3aW5kb3cud2Via2l0VVJMLmNyZWF0ZU9i
amVjdFVSTChibG9iKTsKICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rv
d25sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNo
b3Itbm9kb3dubG9hZC5odG1sCmluZGV4IGY5MWVkYzEuLmRjZDEwMDkgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5v
ZG93bmxvYWQuaHRtbApAQCAtMjQsOSArMjQsOCBAQCBmdW5jdGlvbiBjbGljayhlbG10KQogCiBm
dW5jdGlvbiBydW5UZXN0KCkKIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIo
KTsKLSAgICBiYi5hcHBlbmQoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRs
ZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBB
U1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7Ci0gICAg
dmFyIGJsb2IgPSBiYi5nZXRCbG9iKCJ0ZXh0L2h0bWwiLCAiaW5saW5lIik7CisgICAgdmFyIHN0
cmluZyA9ICI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxz
Y3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5Pjxz
Y3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiI7CisgICAgdmFyIGJsb2IgPSBu
ZXcgQmxvYihbc3RyaW5nXSwge3R5cGU6ICJ0ZXh0L2h0bWwifSk7CiAgICAgdmFyIGxpbmsgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmxvYi11cmwiKTsKICAgICBsaW5rLmhyZWYgPSB3aW5k
b3cud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICBjbGljayhsaW5rKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbAppbmRleCA3ZDVj
MDRjLi4zYjhmZDc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS93aW5kb3ctZG9t
dXJsLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vd2luZG93LWRvbXVybC1j
cmFzaC5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+DQogPGhlYWQ+DQogPHNjcmlwdD4NCi12
YXIgYmxvYiA9IChuZXcgV2ViS2l0QmxvYkJ1aWxkZXIpLmdldEJsb2IoKTsNCit2YXIgYmxvYiA9
IG5ldyBCbG9iKFtdKTsNCiB2YXIgdXJsID0gbnVsbDsNCiB2YXIgY291bnQgPSAwOw0KIA0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNoLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNoLWV4cGVj
dGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4YWFhNi4uMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItYnVpbGRlci1jcmFzaC1leHBlY3RlZC50
eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLVRlc3QgdGhhdCBjYWxsaW5nIFdlYktp
dEJsb2JCdWlsZGVyLmFwcGVuZCB3aXRoIG51bGwgdmFsdWUgc2hvdWxkIG5vdCBjYXVzZSBjcmFz
aC4KLURPTkUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWJ1aWxk
ZXItY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNo
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNjY0YjEuLjAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2guaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4K
LTxzY3JpcHQ+Ci1mdW5jdGlvbiBsb2cobWVzc2FnZSkKLXsKLSAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1l
c3NhZ2UgKyAiXG4iKSk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3QoKQotewotICAgIGxvZygiVGVzdCB0
aGF0IGNhbGxpbmcgV2ViS2l0QmxvYkJ1aWxkZXIuYXBwZW5kIHdpdGggbnVsbCB2YWx1ZSBzaG91
bGQgbm90IGNhdXNlIGNyYXNoLiIpOwotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQobnVsbCk7Ci0KLSAgICBsb2coIkRPTkUiKTsK
LX0KLQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0i
dGVzdCgpIj4KLTxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJlPgotPC9ib2R5PgotPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbAppbmRleCBl
YzhmYThjLi5hM2VlN2M0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2It
c2xpY2Utb3ZlcmZsb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xp
Y2Utb3ZlcmZsb3cuaHRtbApAQCAtNSwxOSArNSwyMiBAQCBhIHRydW5jYXRlZCBzbGljZSBiZWlu
ZyByZXR1cm5lZC4KIDxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJlPgogPHNjcmlwdD4KIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOwotICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCkKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpCiB9Ci12YXIgYnVpbGRlciA9ICBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIo
KTsKKwogdmFyIHRleHQgPSAnJzsKLWZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDsgKytpKSB0ZXh0
ICs9ICdBJzsKLWJ1aWxkZXIuYXBwZW5kKHRleHQpOwotYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigp
OworZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwOyArK2kpCisgICAgdGV4dCArPSAnQSc7CisKK2Js
b2IgPSBuZXcgQmxvYihbdGV4dF0pOwogc2xpY2VkQmxvYiA9IGJsb2Iud2Via2l0U2xpY2UoMTk5
OSwgOTIyMzM3MjAzNjg1NDc3NTAwMCk7CisKIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0Jsb2Igc2xpY2UgbGVu
Z3RoOiAnICsgc2xpY2VkQmxvYi5zaXplKSk7CiBpZiAoc2xpY2VkQmxvYi5zaXplICE9IDEpIHsK
LSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgnRkFJTCcpKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdGQUlMJykpOwog
fQorCiBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXMvYmxvYi1zbGljZS10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xp
Y2UtdGVzdC5odG1sCmluZGV4IDU2MDQ4ZGEuLjBjOGNkMTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS10ZXN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlcy9ibG9iLXNsaWNlLXRlc3QuaHRtbApAQCAtODIsOSArODIsNyBAQCBmdW5jdGlvbiBy
dW5OZXh0VGVzdCgpCiAKIGZ1bmN0aW9uIHJ1blRlc3RzKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9
IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2Nzg5
Iik7Ci0gICAgYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIGJsb2IgPSBuZXcgQmxvYihb
IjAxMjM0NTY3ODkiXSk7CiAKICAgICBydW5OZXh0VGVzdCgpOwogfQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itd2l0aC1udWxsLWNyYXNoLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmExZTgwCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwzIEBACitUZXN0IHRoYXQgY29uc3RydWN0aW5nIEJsb2Igd2l0aCBu
dWxsIHZhbHVlIHNob3VsZCBub3QgY2F1c2UgY3Jhc2guCitET05FCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi13aXRoLW51bGwtY3Jhc2guaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvYmxvYi13aXRoLW51bGwtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42Zjc1ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9ibG9iLXdpdGgtbnVsbC1jcmFzaC5odG1sCkBAIC0wLDAgKzEsMjUgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2co
bWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UgKyAiXG4iKSk7Cit9CisKK2Z1
bmN0aW9uIHRlc3QoKQoreworICAgIGxvZygiVGVzdCB0aGF0IGNvbnN0cnVjdGluZyBCbG9iIHdp
dGggbnVsbCB2YWx1ZSBzaG91bGQgbm90IGNhdXNlIGNyYXNoLiIpOworICAgIHZhciBibG9iID0g
bmV3IEJsb2IoW251bGxdKTsKKworICAgIGxvZygiRE9ORSIpOworfQorCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHByZSBpZD0n
Y29uc29sZSc+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy9maWxlLXJlYWRlci1mZmZkLWV4cGVjdGVkLnR4dAppbmRleCBjYzEyNGE1Li40
NWY5N2M3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZm
ZmQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXIt
ZmZmZC1leHBlY3RlZC50eHQKQEAgLTIsOSArMiw4IEBAIFRocm93IHZhcmlvdXMgYmFkIGJ5dGVz
IGF0IGZpbGUgcmVhZGVyLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKLWJiID0gbmV3
IFdlYktpdEJsb2JCdWlsZGVyKCk7CiBhcnJheSA9IG5ldyBVaW50OEFycmF5KFs2NSwgMjQ1LCAy
NDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUsIDY2XSk7Ci1i
bG9iID0gYnVpbGRCbG9iKFthcnJheS5idWZmZXJdKTsKK2Jsb2IgPSBuZXcgQmxvYihbYXJyYXku
YnVmZmVyXSk7CiByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogcmVhZGVyLnJlYWRBc1RleHQo
YmxvYik7CiBQQVNTIGZpbGVTdHJpbmcgaXMgJ0Hvv73vv73vv73vv73vv73vv73vv73vv73vv73v
v73vv71CJwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1m
ZmZkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbApp
bmRleCAwYjRmZjFhLi5lYWNhMjRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L2ZpbGUtcmVhZGVyLWZmZmQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUt
cmVhZGVyLWZmZmQuaHRtbApAQCAtMTAsOSArMTAsOCBAQAogPHNjcmlwdD4KIGRlc2NyaXB0aW9u
KCJUaHJvdyB2YXJpb3VzIGJhZCBieXRlcyBhdCBmaWxlIHJlYWRlci4iKTsKIAotYmIgPSBldmFs
QW5kTG9nKCJiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOyIpOwogYXJyYXkgPSBldmFsQW5k
TG9nKCJhcnJheSA9IG5ldyBVaW50OEFycmF5KFs2NSwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDks
IDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUsIDY2XSk7Iik7Ci1ibG9iID0gZXZhbEFuZExv
ZygiYmxvYiA9IGJ1aWxkQmxvYihbYXJyYXkuYnVmZmVyXSk7Iik7CitibG9iID0gZXZhbEFuZExv
ZygiYmxvYiA9IG5ldyBCbG9iKFthcnJheS5idWZmZXJdKTsiKTsKIHJlYWRlciA9IGV2YWxBbmRM
b2coInJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7Iik7CiByZWFkZXIub25sb2FkID0gZnVuY3Rp
b24oZXZlbnQpIHsKICAgZmlsZVN0cmluZyA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL25vdC1lbm91Z2gtYXJndW1lbnRzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMtZXhwZWN0
ZWQudHh0CmluZGV4IGFjZmJhZTAuLmVjYTFmMTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMtZXhwZWN0ZWQudHh0CkBAIC03LDcg
KzcsNyBAQCBQQVNTIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcigpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgogUEFTUyByZWFkZXIucmVhZEFzQmluYXJ5
U3RyaW5nKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMu
CiBQQVNTIHJlYWRlci5yZWFkQXNUZXh0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90
IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIHJlYWRlci5yZWFkQXNEYXRhVVJMKCkgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1QQVNTIGJsb2JCdWlsZGVy
LmFwcGVuZCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIG5l
dyBCbG9iKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMu
CiBQQVNTIGZpbGVJbnB1dC5maWxlcy5pdGVtKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
Tm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMuaHRtbApp
bmRleCAwMTlhOWYxLi41OTE1NTNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L25vdC1lbm91Z2gtYXJndW1lbnRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9u
b3QtZW5vdWdoLWFyZ3VtZW50cy5odG1sCkBAIC0xNSw5ICsxNSw3IEBAIHNob3VsZFRocm93KCdy
ZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKCknKTsKIHNob3VsZFRocm93KCdyZWFkZXIucmVhZEFz
VGV4dCgpJyk7CiBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc0RhdGFVUkwoKScpOwogCi12YXIg
YmxvYkJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLQotc2hvdWxkVGhyb3coJ2Js
b2JCdWlsZGVyLmFwcGVuZCgpJyk7CitzaG91bGRUaHJvdygnbmV3IEJsb2IoKScpOwogCiB2YXIg
ZmlsZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10
ZXN0LWNhc2VzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1ibG9i
LXRlc3QtY2FzZXMuanMKaW5kZXggODE5Y2EwMC4uZmYwZjQ4MSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1ibG9iLXRlc3QtY2FzZXMuanMKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1ibG9iLXRlc3QtY2FzZXMuanMK
QEAgLTE3MCwxMSArMTcwLDExIEBAIGZ1bmN0aW9uIHRlc3RSZWFkaW5nU2xpY2VkSHlicmlkQmxv
Yih0ZXN0RmlsZXMpCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ1RyaXBsZVNsaWNlZEh5YnJpZEJsb2Io
dGVzdEZpbGVzKQogewogICAgIGxvZygiVGVzdCByZWFkaW5nIGEgdHJpcGxlLXNsaWNlZCBoeWJy
aWQgYmxvYiIpOwotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CiAg
ICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoWzQ4LCA0OSwgNTBdKTsKLSAgICB2YXIgYmxv
YiA9IGJ1aWxkQmxvYihbJ0ZpcnN0JywgdGVzdEZpbGVzWydmaWxlMSddLndlYmtpdFNsaWNlKDEs
IDExKSwgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10sICdTZWNvbmQnLCB0ZXN0RmlsZXNbJ2ZpbGUy
J10sIHRlc3RGaWxlc1snZmlsZTMnXSwgJ1RoaXJkJywgYXJyYXkuYnVmZmVyXSwgdW5kZWZpbmVk
LCBidWlsZGVyKTsKKyAgICB2YXIgaXRlbXMgPSBbJ0ZpcnN0JywgdGVzdEZpbGVzWydmaWxlMSdd
LndlYmtpdFNsaWNlKDEsIDExKSwgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10sICdTZWNvbmQnLCB0
ZXN0RmlsZXNbJ2ZpbGUyJ10sIHRlc3RGaWxlc1snZmlsZTMnXSwgJ1RoaXJkJywgYXJyYXkuYnVm
ZmVyXTsKKyAgICB2YXIgYmxvYiA9IGJ1aWxkQmxvYihpdGVtcyk7CiAgICAgdmFyIGJsb2IgPSBi
bG9iLndlYmtpdFNsaWNlKDcsIDE5KTsKLSAgICB2YXIgYmxvYjIgPSBidWlsZEJsb2IoWydGb28n
LCBibG9iLCAnQmFyJ10sIHVuZGVmaW5lZCwgYnVpbGRlcik7CisgICAgdmFyIGJsb2IyID0gYnVp
bGRCbG9iKGl0ZW1zLmNvbmNhdChbJ0ZvbycsIGJsb2IsICdCYXInXSkpOwogICAgIHZhciBibG9i
MiA9IGJsb2IyLndlYmtpdFNsaWNlKDEyLCA0Mik7CiAgICAgcmVhZEJsb2JBc0JpbmFyeVN0cmlu
Zyh0ZXN0RmlsZXMsIGJsb2IyKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNv
dXJjZXMvcmVhZC1jb21tb24uanMKaW5kZXggMDcxMjVhNS4uYmFjNzk5YyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKQEAgLTEsMTMgKzEs
MTEgQEAKIC8vIEJ1aWxkcyBhIGJsb2IgZnJvbSBhIGxpc3Qgb2YgaXRlbXMuCiAvLyBUaGUgJ2Nv
bnRlbnRUeXBlJyBhcmd1bWVudCBpcyBvcHRpb25hbC4KIC8vIElmIHRoZSAnYnVpbGRlcicgYXJn
dW1lbnQgaXMgbm90IHByb3ZpZGVkLCBjcmVhdGUgYSBuZXcgb25lLgotZnVuY3Rpb24gYnVpbGRC
bG9iKGl0ZW1zLCBjb250ZW50VHlwZSwgYnVpbGRlcikKK2Z1bmN0aW9uIGJ1aWxkQmxvYihpdGVt
cywgY29udGVudFR5cGUpCiB7Ci0gICAgaWYgKGJ1aWxkZXIgPT09IHVuZGVmaW5lZCkKLSAgICAg
ICAgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0ZW1zW2ld
KTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKGNvbnRlbnRUeXBlKTsKKyAgICBpZiAoY29u
dGVudFR5cGUgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9iKGl0ZW1zKTsK
KyAgICByZXR1cm4gbmV3IEJsb2IoaXRlbXMsIHt0eXBlOmNvbnRlbnRUeXBlfSk7CiB9CiAKIC8v
IFJlYWRzIGEgYmxvYiBlaXRoZXIgYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25vdXNseS4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZp
YS1ibG9iLXVybC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13
b3JrZXItdmlhLWJsb2ItdXJsLmh0bWwKaW5kZXggM2JhY2NkYS4uMDUzMGI5NCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13b3JrZXItdmlhLWJsb2It
dXJsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13b3Jr
ZXItdmlhLWJsb2ItdXJsLmh0bWwKQEAgLTEwLDEzICsxMCwxMiBAQCBmdW5jdGlvbiBsb2cobWVz
c2FnZSkKIGZ1bmN0aW9uIHJ1blRlc3QoKQogewogICAgIGxvZygiVGVzdCBpbmxpbmUgd2ViIHdv
cmtlciB2aWEgYmxvYiBVUkwuIik7Ci0gICAgdmFyIGJsb2JCdWlsZGVyID0gbmV3IFdlYktpdEJs
b2JCdWlsZGVyKCk7Ci0gICAgYmxvYkJ1aWxkZXIuYXBwZW5kKFsKKyAgICB2YXIgc3RyaW5nID0g
WwogICAgICAgICAib25tZXNzYWdlID0gZnVuY3Rpb24oZSkgeyIsCiAgICAgICAgICIgICAgcG9z
dE1lc3NhZ2UoJ0hlbGxvIGZyb20gd29ya2VyJyk7IiwKICAgICAgICAgIn07IgotICAgIF0uam9p
bignXG4nKSk7Ci0gICAgdmFyIGJsb2JVUkwgPSB3ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKGJs
b2JCdWlsZGVyLmdldEJsb2IoKSk7CisgICAgXS5qb2luKCdcbicpOworICAgIHZhciBibG9iVVJM
ID0gd2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbc3RyaW5nXSkpOwogICAgIHZh
ciB3b3JrZXIgPSBuZXcgV29ya2VyKGJsb2JVUkwpOwogICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBm
dW5jdGlvbihldmVudCkgewogICAgICAgICBsb2coZXZlbnQuZGF0YSk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNv
bnRpbnVlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdy
aXRlci1hYm9ydC1jb250aW51ZS5qcwppbmRleCBiNWNlYjRhLi4xNzkxNmRiIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0
LWNvbnRpbnVlLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKQEAgLTUyLDExICs1MiwxMSBAQCBmdW5jdGlv
biBub3AoKSB7CiB9CiAKIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICB2YXIgYmIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICB2YXIgYmIgPSBbXTsKICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICBi
Yi5wdXNoKGJsb2IpOwogICAgIH0KLSAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworICAgIHJldHVy
biBuZXcgQmxvYihiYik7CiB9CiAKIC8vIFRoZXNlIG1ldGhvZHMgc2V0IHVwIGEgd3JpdGUsIGFi
b3J0IGl0IGFzIHNvb24gYXMgaXQgc3RhcnRzLCB0aGVuIGluaXRpYXRlCkBAIC05MSw5ICs5MSw3
IEBAIGZ1bmN0aW9uIGNoZWNrTGVuZ3RoQW5kQ29tcGxldGVUZXN0KGUpIHsKIAogZnVuY3Rpb24g
c3RhcnRXcml0ZSgpIHsKICAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCi0g
ICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCJsb3Jl
bSBpcHN1bSIpOwotICAgIHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKKyAgICB2
YXIgYmxvYiA9IHRlblhCbG9iKG5ldyBCbG9iKFsibG9yZW0gaXBzdW0iXSkpOwogICAgIGJsb2Ig
PSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9
IHRlblhCbG9iKGJsb2IpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanMKaW5kZXggZWE4
YjYzOC4uOTdiMTIwYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzCkBAIC0xMCw5
ICsxMCw3IEBAIHZhciBzYXdXcml0ZVN0YXJ0OwogdmFyIHNhd0Fib3J0OwogdmFyIHNhd1dyaXRl
RW5kOwogdmFyIHdyaXRlcjsKLXZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotYmIu
YXBwZW5kKCJsb3JlbSBpcHN1bSIpOwotdmFyIGJsb2IgPSBiYi5nZXRCbG9iKCk7Cit2YXIgYmxv
YiA9IG5ldyBCbG9iKFsibG9yZW0gaXBzdW0iXSk7CiB2YXIgcmVjdXJzaW9uRGVwdGggPSAwOwog
dmFyIG1ldGhvZDsKIHZhciB0ZXN0c1J1biA9IDA7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcwppbmRleCAy
YzQxMDdhLi40OTlhN2RmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQuanMKQEAgLTEyLDExICsxMiwxMSBA
QCB2YXIgc2F3V3JpdGVFbmQ7CiB2YXIgd3JpdGVyOwogCiBmdW5jdGlvbiB0ZW5YQmxvYihibG9i
KSB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgdmFyIGJiID0g
W107CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgICAgIGJiLmFwcGVu
ZChibG9iKTsKKyAgICAgICAgYmIucHVzaChibG9iKTsKICAgICB9Ci0gICAgcmV0dXJuIGJiLmdl
dEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoYmIpOwogfQogCiBmdW5jdGlvbiBvbldyaXRl
U3RhcnQoZSkgewpAQCAtNjIsOSArNjIsNyBAQCBmdW5jdGlvbiBvbldyaXRlRW5kKGUpIHsKIAog
ZnVuY3Rpb24gc3RhcnRXcml0ZShmaWxlV3JpdGVyKSB7CiAgICAgLy8gTGV0J3MgbWFrZSBpdCBh
Ym91dCBhIG1lZ2FieXRlLgotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwot
ICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKLSAgICB2YXIgYmxvYiA9IHRlblhCbG9iKGJi
LmdldEJsb2IoKSk7CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihuZXcgQmxvYihbImxvcmVtIGlw
c3VtIl0pKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9i
KGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMK
aW5kZXggYzg4ZTBmYi4uZGY5ZTZhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanMKQEAgLTE2LDEx
ICsxNiwxMSBAQCB2YXIgbGFzdFByb2dyZXNzID0gMDsKIHZhciB0b0JlV3JpdHRlbjsKIAogZnVu
Y3Rpb24gdGVuWEJsb2IoYmxvYikgewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOworICAgIHZhciBiYiA9IFtdOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkg
ewotICAgICAgICBiYi5hcHBlbmQoYmxvYik7CisgICAgICAgIGJiLnB1c2goYmxvYik7CiAgICAg
fQotICAgIHJldHVybiBiYi5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKGJiKTsKIH0K
IAogZnVuY3Rpb24gb25Xcml0ZVN0YXJ0KGUpIHsKQEAgLTc4LDkgKzc4LDcgQEAgZnVuY3Rpb24g
b25Xcml0ZUVuZChlKSB7CiAKIGZ1bmN0aW9uIHN0YXJ0V3JpdGUoZmlsZVdyaXRlcikgewogICAg
IC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4KLSAgICB2YXIgYmIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0gICAgdmFy
IGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOworICAgIHZhciBibG9iID0gdGVuWEJsb2Io
bmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKSk7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwog
ICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLWdjLWJsb2IuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2Zp
bGUtd3JpdGVyLWdjLWJsb2IuanMKaW5kZXggODRiYmFiYi4uNDhmYjc1YyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9i
LmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0
ZXItZ2MtYmxvYi5qcwpAQCAtMTQsMTggKzE0LDE2IEBAIGZ1bmN0aW9uIG9uVGVzdFN1Y2Nlc3Mo
KSB7CiB9CiAKIGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICB2YXIgYmIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKKyAgICB2YXIgYmIgPSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwOyArK2kpIHsKLSAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICBiYi5wdXNo
KGJsb2IpOwogICAgIH0KLSAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcg
QmxvYihiYik7CiB9CiAKIGZ1bmN0aW9uIHN0YXJ0V3JpdGUod3JpdGVyKSB7CiAgICAgLy8gTGV0
J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9i
QnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKLSAgICB2YXIgYmxvYiA9
IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihuZXcgQmxv
YihbImxvcmVtIGlwc3VtIl0pKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxv
YiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3lu
Yy10cnVuY2F0ZS1leHRlbmQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3Vy
Y2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1bmNhdGUtZXh0ZW5kLmpzCmluZGV4IDNkZjk5MTMuLjhm
YmIwMTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS13cml0ZXItc3luYy10cnVuY2F0ZS1leHRlbmQuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVuZC5q
cwpAQCAtMTUsMTAgKzE1LDggQEAgcmVtb3ZlQWxsSW5EaXJlY3RvcnlTeW5jKGZpbGVTeXN0ZW0u
cm9vdCk7CiB2YXIgZW50cnkgPSBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSgnYScsIHtjcmVhdGU6
dHJ1ZSwgZXhjbHVzaXZlOnRydWV9KTsKIHZhciB3cml0ZXIgPSBlbnRyeS5jcmVhdGVXcml0ZXIo
KTsKIGFzc2VydCghd3JpdGVyLnBvc2l0aW9uKTsKLXZhciBidWlsZGVyID0gbmV3IFdlYktpdEJs
b2JCdWlsZGVyKCk7CiB2YXIgdGVzdERhdGEgPSAidGVzdCBkYXRhIjsKLWJ1aWxkZXIuYXBwZW5k
KHRlc3REYXRhKTsKLXdyaXRlci53cml0ZShidWlsZGVyLmdldEJsb2IoKSk7Cit3cml0ZXIud3Jp
dGUobmV3IEJsb2IoW3Rlc3REYXRhXSkpOwogYXNzZXJ0KHdyaXRlci5sZW5ndGggPT0gdGVzdERh
dGEubGVuZ3RoKTsKIGFzc2VydCh3cml0ZXIucG9zaXRpb24gPT0gd3JpdGVyLmxlbmd0aCk7CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanMKaW5kZXgg
OGYxZWQ5YS4uNmUzZDU3YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanMKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRl
LW92ZXJsYXBwZWQuanMKQEAgLTE1LDEwICsxNSw4IEBAIHJlbW92ZUFsbEluRGlyZWN0b3J5U3lu
YyhmaWxlU3lzdGVtLnJvb3QpOwogdmFyIGVudHJ5ID0gZmlsZVN5c3RlbS5yb290LmdldEZpbGUo
J2EnLCB7Y3JlYXRlOnRydWUsIGV4Y2x1c2l2ZTp0cnVlfSk7CiB2YXIgd3JpdGVyID0gZW50cnku
Y3JlYXRlV3JpdGVyKCk7CiBhc3NlcnQoIXdyaXRlci5wb3NpdGlvbik7Ci12YXIgYnVpbGRlciA9
IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwogdmFyIHRlc3REYXRhID0gInRlc3QgZGF0YSI7Ci1i
dWlsZGVyLmFwcGVuZCh0ZXN0RGF0YSk7Ci12YXIgYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpOwor
dmFyIGJsb2IgPSBuZXcgQmxvYihbdGVzdERhdGFdKTsKIHdyaXRlci53cml0ZShibG9iKTsKIGFz
c2VydCh3cml0ZXIubGVuZ3RoID09IHRlc3REYXRhLmxlbmd0aCk7CiBhc3NlcnQod3JpdGVyLnBv
c2l0aW9uID09IHdyaXRlci5sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5qcyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMKaW5kZXggOWFjODQ0
MC4uZTI2Y2VhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci11dGlscy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzCkBAIC0xMzQsOSArMTM0LDcgQEAgZnVu
Y3Rpb24gY3JlYXRlRW1wdHlGaWxlKGZpbGVTeXN0ZW0sIGZpbGVOYW1lLCBvblN1Y2Nlc3MpCiAK
IGZ1bmN0aW9uIHdyaXRlU3RyaW5nKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgb2Zmc2V0LCBkYXRh
LCBvblN1Y2Nlc3MpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0g
ICAgYmIuYXBwZW5kKGRhdGEpOwotICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigpOworICAgIHZh
ciBibG9iID0gbmV3IEJsb2IoW2RhdGFdKTsKICAgICBmaWxlV3JpdGVyLnNlZWsob2Zmc2V0KTsK
ICAgICBmaWxlV3JpdGVyLndyaXRlKGJsb2IpOwogICAgIGZpbGVXcml0ZXIub25lcnJvciA9IG9u
RXJyb3I7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVhcGkvY3JlYXRl
LWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmls
ZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCmluZGV4IDA0YzliZTAuLjM4
MDg1MWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZWFwaS9jcmVhdGUt
YmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
ZmlsZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCkBAIC0yOCw2ICsyOCw2
IEBAIHZhciB0ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKIDxib2R5PgogPHA+IFRlc3QgY2Fz
ZSBmb3IgY2hlY2tpbmcgYmxvYiBVUkwgbm90IGFsbG93ZWQgdG8gYmUgY3JlYXRlZCBmcm9tIHRo
ZSBjb2RlIHJ1bm5pbmcgZnJvbSBkYXRhIFVSSTwvcD4KIDxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJl
PgotPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1sLCUzQ3NjcmlwdCUzRXZhciUyMGIlMjAlM0Ql
MjBuZXclMjBXZWJLaXRCbG9iQnVpbGRlcigpJTNCYi5hcHBlbmQoJTIyRm9vJTIyKSUzQnZhciUy
MGJiJTIwJTNEJTIwYi5nZXRCbG9iKCd0ZXh0JTJGaHRtbCcpJTNCdG9wLmxvY2F0aW9uJTNEJ2h0
dHAlM0ElMkYlMkYxMjcuMC4wLjElM0E4MDAwJTJGZmlsZWFwaSUyRmNyZWF0ZS1ibG9iLXVybC1m
cm9tLWRhdGEtdXJsLmh0bWwlMjMnJTIwJTJCJTIwd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmpl
Y3RVUkwoYmIpJTNCJTNDJTJGc2NyaXB0JTNFIj48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSJkYXRh
OnRleHQvaHRtbCwlM0NzY3JpcHQlM0V2YXIlMjBiYiUyMCUzRCUyMG5ldyUyMEJsb2IlMjglNUIl
MjJGb28lMjIlNUQlMkMlMjAlN0J0eXBlJTNBJTIydGV4dCUyRmh0bWwlMjIlN0QlMjklM0J0b3Au
bG9jYXRpb24lM0QlMjdodHRwJTNBJTJGJTJGMTI3LjAuMC4xJTNBODAwMCUyRmZpbGVhcGklMkZj
cmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sJTIzJTI3JTIwJTJCJTIwd2luZG93Lndl
YmtpdFVSTC5jcmVhdGVPYmplY3RVUkwlMjhiYiUyOSUzQiUzQyUyRnNjcmlwdCUzRSI+PC9pZnJh
bWU+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sCmluZGV4IGVj
MTZhNTQuLmFkNGFkZDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5
c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sCkBAIC0yNCw5ICsy
NCw3IEBACiAgICAgICB3cml0ZXIub253cml0ZWVuZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICBj
YWxsYmFjayhyYW5kKTsKICAgICAgIH07Ci0gICAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1
aWxkZXIoKTsKLSAgICAgIGJiLmFwcGVuZCgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3Vs
dCIpLmlubmVySFRNTCA9IChleHBlY3RlZCA9PSAnICsgcmFuZCArICcpID8gIlNVQ0NFU1MiIDog
IkZBSUxVUkUiOycpOwotICAgICAgd3JpdGVyLndyaXRlKGJiLmdldEJsb2IoJ3RleHQvcGxhaW4n
KSk7CisgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoWydkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicmVzdWx0IikuaW5uZXJIVE1MID0gKGV4cGVjdGVkID09ICcgKyByYW5kICsgJykgPyAiU1VD
Q0VTUyIgOiAiRkFJTFVSRSI7J10sIHt0eXBlOid0ZXh0L3BsYWluJ30pKTsKICAgICB9CiAKICAg
ICBnZXRGaWxlV3JpdGVyKGZ1bmN0aW9uKGZpbGUsIHdyaXRlcikgewpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291cmNlcy9oeWJyaWQtYmxvYi11dGls
LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291cmNlcy9oeWJyaWQt
YmxvYi11dGlsLmpzCmluZGV4IDA2MTU5OTYuLjZkM2U5ODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9jYWwvYmxvYi9yZXNvdXJjZXMvaHlicmlkLWJsb2ItdXRpbC5qcwor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Jsb2IvcmVzb3VyY2VzL2h5YnJpZC1i
bG9iLXV0aWwuanMKQEAgLTEzMSwxNiArMTMxLDE5IEBAIHZhciBIeWJyaWRCbG9iVGVzdFV0aWwg
PSBmdW5jdGlvbih0ZXN0RnVuYywgb3B0X2ZpbGVQYXRocykgewogCiAgICAgdGhpcy5hcHBlbmRB
bmRDcmVhdGVCbG9iID0gZnVuY3Rpb24oaXRlbXMsIG9wdF9lbmRpbmcsIG9wdF90eXBlKQogICAg
IHsKLSAgICAgICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgICAgIHZh
ciBidWlsZGVyID0gW107CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3Ro
OyBpKyspIHsKICAgICAgICAgICAgIGlmIChpdGVtc1tpXSBpbnN0YW5jZW9mIEFycmF5KSB7CiAg
ICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJheSwgY29tYmluZSBpdHMgZWxlbWVudHMg
YW5kIGFwcGVuZCBhcyBhIGJsb2IuCi0gICAgICAgICAgICAgICAgYmIuYXBwZW5kKHRoaXMuYXBw
ZW5kQW5kQ3JlYXRlQmxvYihpdGVtc1tpXSwgb3B0X2VuZGluZywgb3B0X3R5cGUpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXRlbXNbaV0udHlwZSA9PSAiZGF0YSIgJiYgb3B0X2VuZGluZykK
LSAgICAgICAgICAgICAgICBiYi5hcHBlbmQoaXRlbXNbaV0udmFsdWUsIG9wdF9lbmRpbmcpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJiLmFwcGVuZChpdGVtc1tpXS52YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5wdXNoKHRoaXMuYXBwZW5kQW5kQ3JlYXRlQmxv
YihpdGVtc1tpXSwgb3B0X2VuZGluZywgb3B0X3R5cGUpKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGJ1aWxkZXIucHVzaChpdGVtc1tpXS52YWx1ZSk7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGJiLmdldEJsb2Iob3B0X3R5cGUpOworICAgICAgICB2YXIgb3B0aW9u
cyA9IHt9OworICAgICAgICBpZiAob3B0X2VuZGluZykKKyAgICAgICAgICAgIG9wdGlvbnMuZW5k
aW5ncyA9IG9wdF9lbmRpbmc7CisgICAgICAgIGlmIChvcHRfdHlwZSkKKyAgICAgICAgICAgIG9w
dGlvbnMudHlwZSA9IG9wdF90eXBlOworICAgICAgICByZXR1cm4gbmV3IEJsb2IoYnVpbGRlciwg
b3B0aW9ucyk7CiAgICAgfTsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1v
dGUtZXhwZWN0ZWQudHh0CmluZGV4IGM4NDAwZTUuLmYwNDZkMmYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5
c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAotQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDExOiBmaWxlc3lzdGVtOmh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90
ZW1wb3JhcnkvcGFnZS5odG1sIGNyZWF0ZWQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgOTogZmls
ZXN5c3RlbTpodHRwOi8vbG9jYWxob3N0OjgwMDAvdGVtcG9yYXJ5L3BhZ2UuaHRtbCBjcmVhdGVk
LgogQ09OU09MRSBNRVNTQUdFOiBOb3QgYWxsb3dlZCB0byBsb2FkIGxvY2FsIHJlc291cmNlOiBm
aWxlc3lzdGVtOmh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90ZW1wb3JhcnkvcGFnZS5odG1sCiBUaGlz
IHRlc3QgaXMgdG8gc2VlIGlmIGEgcmVtb3RlIGZpbGUgY2FuIGluY2x1ZGUgYSBsb2NhbCBwYWdl
IHZpYSBhIGZpbGVzeXN0ZW06IFVSSSBpbiBhbiBpRnJhbWUuCiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZp
bGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0
ZS1maWxlc3lzdGVtLWZpbGUuaHRtbAppbmRleCAxZTNhZTIxLi5jZWRiYjBkIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5
c3RlbS1maWxlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNv
dXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCkBAIC01LDEyICs1LDEwIEBACiAgICAg
ICAgICAgICB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShURU1QT1JBUlksIDEwMCwgZnVuY3Rpb24o
ZnMpIHsKICAgICAgICAgICAgICAgICBmcy5yb290LmdldEZpbGUoInBhZ2UuaHRtbCIsIHtjcmVh
dGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNy
ZWF0ZVdyaXRlcihmdW5jdGlvbih3cml0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YmIuYXBwZW5kKCc8ZGl2IGlkPSJpbm5lckRpdiI+VmlzaWJsZSBDb250ZW50czwvZGl2PlxuJyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIub253cml0ZSA9IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVudHJ5LnRvVVJMKCkgKyAi
IGNyZWF0ZWQuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLndyaXRlKGJiLmdldEJsb2IoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoWyc8ZGl2IGlkPSJpbm5lckRpdiI+VmlzaWJsZSBD
b250ZW50czwvZGl2PlxuJ10pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbApp
bmRleCA2NjU0NjI1Li5mNjRhZDdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9iamVjdC5odG1sCkBA
IC0xNSw4ICsxNSw3IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAKIGZ1bmN0
aW9uIGNyZWF0ZUVtcHR5QmxvYigpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5l
dyBCbG9iKFtdKTsKIH0KIAogdmFyIHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6
ODg4MC93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9lY2hvIik7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVy
LWNsb3NlLWluLWJ1c3kuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sCmluZGV4IGFj
MTdlMDEuLjM5OTUwNzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRB
bW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sCkBAIC0yMyw5ICsyMyw3IEBAIGZ1bmN0aW9u
IGNyZWF0ZVN0cmluZ1dpdGhMZW5ndGgobGVuZ3RoKQogCiBmdW5jdGlvbiBjcmVhdGVCbG9iV2l0
aExlbmd0aChsZW5ndGgpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxk
ZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZChuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKSk7Ci0gICAg
cmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihbbmV3IEFycmF5
QnVmZmVyKGxlbmd0aCldKTsKIH0KIAogdmFyIHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly9sb2Nh
bGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9lY2hvIik7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFm
dGVyLWNsb3NlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9o
eWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwKaW5kZXggMjdmMjM4MC4uNGIzZDEw
ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRt
bApAQCAtMjMsOSArMjMsNyBAQCBmdW5jdGlvbiBjcmVhdGVTdHJpbmdXaXRoTGVuZ3RoKGxlbmd0
aCkKIAogZnVuY3Rpb24gY3JlYXRlQmxvYldpdGhMZW5ndGgobGVuZ3RoKQogewotICAgIHZhciBi
dWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQobmV3
IEFycmF5QnVmZmVyKGxlbmd0aCkpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAg
ICByZXR1cm4gbmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcihsZW5ndGgpXSk7CiB9CiAKIHZhciB3
cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvc2ltcGxlIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJz
b2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2IuaHRtbAppbmRleCAyYjgwZmEyLi42NmI0NDkxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtYmxvYi5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2h5Ymkvc2VuZC1ibG9iLmh0bWwKQEAgLTIwLDE1ICsyMCwxMiBAQCBmdW5jdGlvbiBzdGFydHNX
aXRoKHRhcmdldCwgcHJlZml4KQogCiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxv
V29ybGQoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0g
ICAgYnVpbGRlci5hcHBlbmQoIkhlbGxvLCB3b3JsZCEiKTsKLSAgICByZXR1cm4gYnVpbGRlci5n
ZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKFsiSGVsbG8sIHdvcmxkISJdKTsKIH0KIAog
ZnVuY3Rpb24gY3JlYXRlRW1wdHlCbG9iKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJL
aXRCbG9iQnVpbGRlcigpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1
cm4gbmV3IEJsb2IoW10pOwogfQogCiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERp
c3RpbmN0Qnl0ZXMoKQpAQCAtMzYsOSArMzMsNyBAQCBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFp
bmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQogICAgIHZhciBhcnJheSA9IG5ldyBVaW50OEFycmF5KDI1
Nik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkKICAgICAgICAgYXJyYXlbaV0g
PSBpOwotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVp
bGRlci5hcHBlbmQoYXJyYXkuYnVmZmVyKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7
CisgICAgcmV0dXJuIG5ldyBCbG9iKFthcnJheS5idWZmZXJdKTsKIH0KIAogdmFyIHVybCA9ICJ3
czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL2NoZWNrLWJpbmFyeS1tZXNz
YWdlcyI7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sCmluZGV4IDZkYTk4
M2I2Li4wMWI1NDU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbApA
QCAtNTksOSArNTksNyBAQCBmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVyKHdyaXRlcikKICAgICB9
OwogICAgIHdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIGJ1
aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
bWVzc2FnZVRvV3JpdGUpOwotICAgICAgICB3cml0ZXIud3JpdGUoYnVpbGRlci5nZXRCbG9iKCkp
OworICAgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoW21lc3NhZ2VUb1dyaXRlXSkpOwogICAg
ICAgICB3cml0ZXIub253cml0ZSA9IGRpZFdyaXRlRmlsZTsKICAgICB9OwogfQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUt
YmxvYi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWZpbGUtYmxvYi5odG1sCmluZGV4IDJhMzQxYmMuLjJkM2NkZTggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2Iu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZmlsZS1ibG9iLmh0bWwKQEAgLTU5LDkgKzU5LDcgQEAgZnVuY3Rpb24gZGlkR2V0RmlsZVdy
aXRlcih3cml0ZXIpCiAgICAgfTsKICAgICB3cml0ZXIub253cml0ZSA9IGZ1bmN0aW9uKCkKICAg
ICB7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKG1lc3NhZ2VUb1dyaXRlKTsKLSAgICAgICAgd3JpdGVyLndyaXRl
KGJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICAgICAgd3JpdGVyLndyaXRlKG5ldyBCbG9iKFttZXNz
YWdlVG9Xcml0ZV0pKTsKICAgICAgICAgd3JpdGVyLm9ud3JpdGUgPSBkaWRXcml0ZUZpbGU7CiAg
ICAgfTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2Iu
anMKaW5kZXggYzAxMjBlYi4uMGRiNWNiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2IuanMK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJz
L3Jlc291cmNlcy9zZW5kLWJsb2IuanMKQEAgLTEsMTQgKzEsMTEgQEAKIGZ1bmN0aW9uIGNyZWF0
ZUJsb2JDb250YWluaW5nSGVsbG9Xb3JsZCgpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiSGVsbG8sIHdvcmxkISIpOwot
ICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoWyJIZWxs
bywgd29ybGQhIl0pOwogfQogCiBmdW5jdGlvbiBjcmVhdGVFbXB0eUJsb2IoKQogewotICAgIHZh
ciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIu
Z2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihbXSk7CiB9CiAKIGZ1bmN0aW9uIGNyZWF0
ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRlcygpCkBAIC0xNiw5ICsxMyw3IEBAIGZ1bmN0
aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRlcygpCiAgICAgdmFyIGFycmF5
ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytp
KQogICAgICAgICBhcnJheVtpXSA9IGk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZChhcnJheS5idWZmZXIpOwotICAgIHJldHVy
biBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW2FycmF5LmJ1ZmZlcl0p
OwogfQogCiB2YXIgdXJsID0gIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9yZXNvdXJjZXMvY2hlY2stYmluYXJ5LW1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRp
ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRv
dy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggNzk4ZGRmNC4uYjkwZGQ1ZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKQEAgLTE4MCw2
ICsxODAsNyBAQCB3aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVs
dCBbZnVuY3Rpb25dCiB3aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRp
YXRlUHJvcGFnYXRpb24gW2Z1bmN0aW9uXQogd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5
cGUuc3RvcFByb3BhZ2F0aW9uIFtmdW5jdGlvbl0KIHdpbmRvdy5CbG9iIFtvYmplY3QgQmxvYkNv
bnN0cnVjdG9yXQord2luZG93LkJsb2IubGVuZ3RoIFtudW1iZXJdCiB3aW5kb3cuQmxvYi5wcm90
b3R5cGUgW29iamVjdCBCbG9iUHJvdG90eXBlXQogd2luZG93LkJvb2xlYW4gW2Z1bmN0aW9uXQog
d2luZG93LkNEQVRBU2VjdGlvbiBbb2JqZWN0IENEQVRBU2VjdGlvbkNvbnN0cnVjdG9yXQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbm9ibG9icy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLWV4cGVjdGVkLnR4dApp
bmRleCBlOWMzMjNhLi5jMmIwYjA0YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvbm9ibG9icy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvbm9ibG9icy1leHBlY3RlZC50eHQKQEAgLTE2LDEzICsxNiw5IEBAIHN0b3JlID0g
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCiBzdG9yZS5wdXQoJ3ZhbHVlJywgJ2tl
eScpCiAKIHRlc3RCbG9iKCk6Ci1CbG9iQnVpbGRlciA9IHdpbmRvdy5CbG9iQnVpbGRlciB8fCB3
aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXIKLVBBU1MgQmxvYkJ1aWxkZXIgIT0gbnVsbCBpcyB0cnVl
CiBQQVNTIEZpbGVSZWFkZXIgIT0gbnVsbCBpcyB0cnVlCi1idWlsZGVyID0gbmV3IEJsb2JCdWls
ZGVyKCkKIHRlc3RfY29udGVudCA9ICdUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyBvbmx5IGEgdGVz
dC4nCi1idWlsZGVyLmFwcGVuZCh0ZXN0X2NvbnRlbnQpCi1ibG9iID0gYnVpbGRlci5nZXRCbG9i
KCkKK2Jsb2IgPSBuZXcgQmxvYihbdGVzdF9jb250ZW50XSkKIAogdmFsaWRhdGVFeGNlcHRpb25z
KGJsb2IpOgogdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJh
bnNhY3Rpb24uUkVBRF9XUklURSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL25vYmxvYnMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL25vYmxv
YnMuaHRtbAppbmRleCA0ZWM5NmE0Li5hNGQ3M2QyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvbm9ibG9icy5odG1sCkBAIC01OCwxMyArNTgsOSBAQCBmdW5jdGlvbiB0ZXN0Qmxv
YigpCiAgICAgZGVidWcoIiIpOwogICAgIGRlYnVnKCJ0ZXN0QmxvYigpOiIpOwogCi0gICAgZXZh
bEFuZExvZygiQmxvYkJ1aWxkZXIgPSB3aW5kb3cuQmxvYkJ1aWxkZXIgfHwgd2luZG93LldlYktp
dEJsb2JCdWlsZGVyIik7Ci0gICAgc2hvdWxkQmVUcnVlKCJCbG9iQnVpbGRlciAhPSBudWxsIik7
CiAgICAgc2hvdWxkQmVUcnVlKCJGaWxlUmVhZGVyICE9IG51bGwiKTsKLSAgICBldmFsQW5kTG9n
KCJidWlsZGVyID0gbmV3IEJsb2JCdWlsZGVyKCkiKTsKICAgICBldmFsQW5kTG9nKCJ0ZXN0X2Nv
bnRlbnQgPSAnVGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgb25seSBhIHRlc3QuJyIpOwotICAgIGV2
YWxBbmRMb2coImJ1aWxkZXIuYXBwZW5kKHRlc3RfY29udGVudCkiKTsKLSAgICBldmFsQW5kTG9n
KCJibG9iID0gYnVpbGRlci5nZXRCbG9iKCkiKTsKKyAgICBldmFsQW5kTG9nKCJibG9iID0gbmV3
IEJsb2IoW3Rlc3RfY29udGVudF0pIik7CiAgICAgdmFsaWRhdGVFeGNlcHRpb25zKCJibG9iIiwg
dGVzdEZpbGUpOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9z
dHJ1Y3R1cmVkLWNsb25lLmh0bWwKaW5kZXggZmRhOGQyYi4uZDI4YWI3YyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS5odG1sCisrKyBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUuaHRtbApAQCAt
Mzc2LDEzICszNzYsOSBAQCBmdW5jdGlvbiB0ZXN0QmxvYihjYWxsYmFjaykKICAgICBjYWxsYmFj
aygpOwogICAgIHJldHVybjsKIAotICAgIGV2YWxBbmRMb2coIkJsb2JCdWlsZGVyID0gc2VsZi5C
bG9iQnVpbGRlciB8fCBzZWxmLldlYktpdEJsb2JCdWlsZGVyIik7Ci0gICAgc2hvdWxkQmVUcnVl
KCJCbG9iQnVpbGRlciAhPSBudWxsIik7CiAgICAgc2hvdWxkQmVUcnVlKCJGaWxlUmVhZGVyICE9
IG51bGwiKTsKLSAgICBldmFsQW5kTG9nKCJidWlsZGVyID0gbmV3IEJsb2JCdWlsZGVyKCkiKTsK
ICAgICBldmFsQW5kTG9nKCJ0ZXN0X2NvbnRlbnQgPSAnVGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMg
b25seSBhIHRlc3QuJyIpOwotICAgIGV2YWxBbmRMb2coImJ1aWxkZXIuYXBwZW5kKHRlc3RfY29u
dGVudCkiKTsKLSAgICBldmFsQW5kTG9nKCJ0ZXN0X2RhdGEgPSBidWlsZGVyLmdldEJsb2IoKSIp
OworICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YSA9IG5ldyBCbG9iKFt0ZXN0X2NvbnRlbnRdKSIp
OwogICAgIHRlc3RWYWx1ZSh0ZXN0X2RhdGEsIGZ1bmN0aW9uKHJlc3VsdCkgewogICAgICAgICBz
ZWxmLnJlc3VsdCA9IHJlc3VsdDsKICAgICAgICAgc2hvdWxkQmVUcnVlKCJ0ZXN0X2RhdGEgIT09
IHJlc3VsdCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY2ZTk1MDcuLmZmODc2YWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzMCBAQAorMjAxMi0wNC0yMiAgS2ludWtvIFlhc3VkYSA8a2ludWtvQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlIEJsb2IgY29uc3RydWN0b3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTU1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEpTQyBhbmQg
VjggaW1wbGVtZW50YXRpb24gZm9yIEJsb2IgY29uc3RydWN0b3IuCisgICAgICAgIEFsc28gZml4
ZXMgc29tZSB0ZXN0IGV4cGVjdGF0aW9ucy4KKyAgICAgICAgVGhpcyBwYXRjaCBpcyBiYXNlZCBv
biBTYW0gV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykncyBKU0MgcGF0Y2guCisKKyAgICAgICAgVGVz
dHM6IEFsbCBCbG9iQnVpbGRlciB0ZXN0cyBzaG91bGQgd29yayB3aXRoIHRoZSBuZXcgQmxvYiBj
b25zdHJ1Y3Rvci4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKToKKyAg
ICAgICAgSW1wbGVtZW50IGJsb2IgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4QmxvYjo6Y29u
c3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIEltcGxlbWVudCBibG9iIGNvbnN0cnVjdG9yLgor
CisgICAgICAgICogZmlsZWFwaS9CbG9iLmlkbDoKKyAgICAgICAgQWRkIGNvbnN0cnVjdG9yIHRv
IElETC4KKworICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6CisgICAgICAgIEFk
ZCBCbG9iIGNvbnN0cnVjdG9yIHRvIHRoZSB3b3JrZXIgZ2xvYmFsIG9iamVjdC4KKwogMjAxMi0w
NC0yMiAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgT3B0aW1p
emUgRWxlbWVudCBhdHRyaWJ1dGUgc3RvcmFnZSBmb3IgdGhlIGNvbW1vbiBjYXNlIChubyBBdHRy
IG9iamVjdHMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9i
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAK
aW5kZXggMDQ5NDU2MC4uNWRjMWRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCbG9iQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0Jsb2JDdXN0b20uY3BwCkBAIC0zMiw4ICszMiwxNSBAQAogI2luY2x1ZGUgIkpTQmxvYi5oIgog
CiAjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIkpTRmlsZS5oIgorI2luY2x1ZGUgIldlYktpdEJsb2JCdWlsZGVyLmgiCisjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC01MSw0ICs1
OCw3MiBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCbG9iKiBibG9iKQogICAgIHJldHVybiBDUkVBVEVfRE9NX1dSQVBQRVIo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBCbG9iLCBibG9iKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJn
dW1lbnRzIikpOworCisgICAgSlNCbG9iQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nh
c3Q8SlNCbG9iQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIkJsb2IgY29uc3RydWN0b3IgYXNzb2NpYXRl
ZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsKKworICAgIEpTVmFsdWUgZmlyc3RBcmcgPSBl
eGVjLT5hcmd1bWVudCgwKTsKKyAgICBpZiAoIWlzSlNBcnJheShmaXJzdEFyZykpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBh
cmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMgbm90IG9mIHR5cGUgQXJyYXkiKSk7CisKKyAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkoZmlyc3RBcmcpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgIFN0cmluZyB0eXBlOworICAgIFN0cmluZyBlbmRp
bmdzID0gInRyYW5zcGFyZW50IjsKKworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAx
KSB7CisgICAgICAgIEpTVmFsdWUgYmxvYlByb3BlcnR5QmFnVmFsdWUgPSBleGVjLT5hcmd1bWVu
dCgxKTsKKworICAgICAgICBpZiAoYmxvYlByb3BlcnR5QmFnVmFsdWUuaXNPYmplY3QoKSkgewor
ICAgICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWll
bGQgYW4gb2JqZWN0LgorICAgICAgICAgICAgSlNPYmplY3QqIGJsb2JQcm9wZXJ0eUJhZ09iamVj
dCA9IGJsb2JQcm9wZXJ0eUJhZ1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOworCisgICAgICAgICAgICAv
LyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmpl
Y3QuCisgICAgICAgICAgICBEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoZXhlYywgYmxvYlByb3BlcnR5
QmFnT2JqZWN0KTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAg
ICAgICAgICAvLyBFeHRyYWN0IHR5cGUgYW5kIGVuZGluZ3MgZmllbGRzLgorICAgICAgICAgICAg
ZGljdGlvbmFyeS5nZXQoInR5cGUiLCB0eXBlKTsKKyAgICAgICAgICAgIGlmIChkaWN0aW9uYXJ5
LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpKSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZGluZ3Mg
IT0gInRyYW5zcGFyZW50IiAmJiBlbmRpbmdzICE9ICJuYXRpdmUiKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQVNT
RVJUKGVuZGluZ3MgPT0gInRyYW5zcGFyZW50IiB8fCBlbmRpbmdzID09ICJuYXRpdmUiKTsKKwor
ICAgIC8vIEZJWE1FOiB0aGlzIHdvdWxkIGJlIGJldHRlciBpZiB0aGUgV2ViS2l0QmxvYkJ1aWxk
ZXIgd2VyZSBhIHN0YWNrIG9iamVjdCB0byBhdm9pZCB0aGUgYWxsb2NhdGlvbi4KKyAgICBSZWZQ
dHI8V2ViS2l0QmxvYkJ1aWxkZXI+IGJsb2JCdWlsZGVyID0gV2ViS2l0QmxvYkJ1aWxkZXI6OmNy
ZWF0ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisjaWYgRU5BQkxFKEJMT0Ip
CisgICAgICAgIGlmIChpdGVtLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyOjpzX2luZm8pKQorICAg
ICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZCh0b0FycmF5QnVmZmVyKGl0ZW0pKTsKKyAgICAg
ICAgZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChpdGVtLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5m
bykpCisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5kKHRvQmxvYihpdGVtKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhp
dGVtLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChzdHJpbmcsIGVuZGlu
Z3MsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRy
PEJsb2I+IGJsb2IgPSBibG9iQnVpbGRlci0+Z2V0QmxvYih0eXBlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKENSRUFURV9ET01fV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9i
YWxPYmplY3QoKSwgQmxvYiwgYmxvYi5nZXQoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCbG9i
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0
b20uY3BwCmluZGV4IDY4NTM1NzguLjI1ZjE2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCkBAIC0zMSw5ICszMSwxNSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJsb2IuaCIKIAorI2luY2x1ZGUgIkRpY3Rp
b25hcnkuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiVjhBcnJheUJ1
ZmZlci5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jv
cy5oIgogI2luY2x1ZGUgIlY4QmxvYi5oIgogI2luY2x1ZGUgIlY4RmlsZS5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRCbG9iQnVpbGRlci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksNCArNTUsNjkgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQmxvYiogaW1wbCkKICAgICByZXR1cm4gVjhCbG9iOjp3
cmFwKGltcGwpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhCbG9iOjpjb25zdHJ1Y3Rv
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJE
T00uQmxvYi5Db25zdHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgp
KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5u
b3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKworICAg
IGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rvck1vZGU6OldyYXBF
eGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CisKKyAgICBpZiAo
IWFyZ3MuTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFy
Z3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisKKyAgICAvLyBHZXQgdGhlIHNjcmlwdCBl
eGVjdXRpb24gY29udGV4dC4KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
Z2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkJsb2IgY29uc3RydWN0b3IncyBhc3NvY2lhdGVkIGZyYW1lIGlz
IG5vdCBhdmFpbGFibGUiLCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CisKKyAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBmaXJzdEFyZyA9IGFyZ3NbMF07CisgICAgaWYgKCFmaXJzdEFyZy0+SXNB
cnJheSgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRmlyc3QgYXJndW1lbnQgb2YgdGhl
IGNvbnN0cnVjdG9yIGlzIG5vdCBvZiB0eXBlIEFycmF5IiwgVjhQcm94eTo6VHlwZUVycm9yKTsK
KworICAgIEVYQ0VQVElPTl9CTE9DSyh2ODo6TG9jYWw8djg6OkFycmF5PiwgYmxvYlBhcnRzLCB2
ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdChmaXJzdEFyZykpOworCisgICAgU3RyaW5nIHR5cGU7
CisgICAgU3RyaW5nIGVuZGluZ3MgPSAidHJhbnNwYXJlbnQiOworCisgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPiAxICYmIGFyZ3NbMV0tPklzT2JqZWN0KCkpIHsKKyAgICAgICAgRGljdGlvbmFyeSBk
aWN0aW9uYXJ5KGFyZ3NbMV0pOworICAgICAgICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUp
OworICAgICAgICBpZiAoZGljdGlvbmFyeS5nZXQoImVuZGluZ3MiLCBlbmRpbmdzKSkgeworICAg
ICAgICAgICAgaWYgKGVuZGluZ3MgIT0gInRyYW5zcGFyZW50IiAmJiBlbmRpbmdzICE9ICJuYXRp
dmUiKSB7CisgICAgICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKElOVkFMSURf
U1RBVEVfRVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKGVuZGluZ3MgPT0gInRy
YW5zcGFyZW50IiB8fCBlbmRpbmdzID09ICJuYXRpdmUiKTsKKworICAgIFJlZlB0cjxXZWJLaXRC
bG9iQnVpbGRlcj4gYmxvYkJ1aWxkZXIgPSBXZWJLaXRCbG9iQnVpbGRlcjo6Y3JlYXRlKCk7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGJsb2JQYXJ0cy0+TGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpdGVtID0gYmxvYlBhcnRzLT5HZXQodjg6OlVp
bnQzMjo6TmV3KGkpKTsKKyAgICAgICAgQVNTRVJUKCFpdGVtLklzRW1wdHkoKSk7CisjaWYgRU5B
QkxFKEJMT0IpCisgICAgICAgIGlmIChWOEFycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShpdGVtKSkg
eworICAgICAgICAgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gVjhBcnJheUJ1ZmZlcjo6
dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChpdGVtKSk7CisgICAgICAgICAg
ICBBU1NFUlQoYXJyYXlCdWZmZXIpOworICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChh
cnJheUJ1ZmZlcik7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChWOEJsb2I6
Okhhc0luc3RhbmNlKGl0ZW0pKSB7CisgICAgICAgICAgICBCbG9iKiBibG9iID0gVjhCbG9iOjp0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGl0ZW0pKTsKKyAgICAgICAgICAg
IEFTU0VSVChibG9iKTsKKyAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQoYmxvYik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFWENFUFRJT05fQkxPQ0soU3RyaW5nLCBzdHJp
bmdWYWx1ZSwgdG9XZWJDb3JlU3RyaW5nKGl0ZW0tPlRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAg
IGJsb2JCdWlsZGVyLT5hcHBlbmQoc3RyaW5nVmFsdWUsIGVuZGluZ3MsIEFTU0VSVF9OT19FWENF
UFRJT04pOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBibG9i
QnVpbGRlci0+Z2V0QmxvYih0eXBlKTsKKyAgICByZXR1cm4gdG9WOChibG9iLmdldCgpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9CbG9iLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwKaW5kZXggMjlj
NTE0MS4uNmI3ZTU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaWRsCkBAIC0zMyw3ICszMyw5IEBA
IG1vZHVsZSBodG1sIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBKU0dlbmVyYXRlSXNSZWFj
aGFibGU9SW1wbCwKICAgICAgICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICAgICAgSlNOb1N0YXRp
Y1RhYmxlcworICAgICAgICBKU05vU3RhdGljVGFibGVzLAorICAgICAgICBDdXN0b21Db25zdHJ1
Y3RvciwKKyAgICAgICAgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPTIKICAgICBdIEJsb2IgewogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckNvbnRleHQuaWRsCmluZGV4IGJlOWU2YzAuLjU1YjNhNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbApAQCAtODQsNiArODQsNyBAQCBtb2R1bGUgdGhy
ZWFkcyB7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9CTE9CKSAmJiBFTkFCTEVfQkxPQgogICAgICAg
ICBhdHRyaWJ1dGUgV2ViS2l0QmxvYkJ1aWxkZXJDb25zdHJ1Y3RvciBXZWJLaXRCbG9iQnVpbGRl
cjsKKyAgICAgICAgYXR0cmlidXRlIEJsb2JDb25zdHJ1Y3RvciBCbG9iOwogICAgICAgICBhdHRy
aWJ1dGUgRmlsZVJlYWRlckNvbnN0cnVjdG9yIEZpbGVSZWFkZXI7CiAgICAgICAgIGF0dHJpYnV0
ZSBGaWxlUmVhZGVyU3luY0NvbnN0cnVjdG9yIEZpbGVSZWFkZXJTeW5jOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139124</attachid>
            <date>2012-04-26 19:56:14 -0700</date>
            <delta_ts>2012-04-27 10:43:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84555-20120426195656.patch</filename>
            <type>text/plain</type>
            <size>52822</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU4NTVhYWMzYmFjNjAy
N2FjMzdiMzEyYzQxN2IwOTJjZjg0MzgzMy4uZWFiMWIzZmM3Njg4YWFiMDcyMGFmYTdhYzNjNTcy
MjJlMGJmNDlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA0LTI2ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBC
bG9iIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDU1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rvci5odG1sCisKKyAgICAgICAg
VGhpcyBhZGRzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBCbG9iIGNvbnN0cnVjdG9yIHRoYXQg
d2lsbGZ1bGx5CisgICAgICAgIHZpb2xhdGVzIHRoZSBXM0MgRWRpdG9y4oCZcyBEcmFmdCAyOSBG
ZWJydWFyeSAyMDEyIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBFbGVtZW50cyBp
biB0aGUgcGFydHMgYXJyYXkgYXJlIGNvZXJjZWQgdG8gRE9NU3RyaW5ncyBodHRwczovL3d3dy53
My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzIxIAorICAgICAgICAtIERvbid0
IHRocm93IGZvciBpbnZhbGlkIGtleSBpbiB0aGUgZGljdGlvbmFyeSBodHRwczovL3d3dy53My5v
cmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzI3CisgICAgICAgIC0gVmFsdWVzIGZv
ciB0aGUgZW5kaW5ncyBwcm9wZXJ0eSBhcmUgdHJlYXRlZCBhcyBlbnVtcyBodHRwczovL3d3dy53
My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzI5IAorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQmxvYkNvbnN0
cnVjdG9yOjpjb25zdHJ1Y3RKU0Jsb2IpOgorICAgICAgICBJbXBsZW1lbnQgYmxvYiBjb25zdHJ1
Y3Rvci4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhCbG9iOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAg
SW1wbGVtZW50IGJsb2IgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuaWRs
OgorICAgICAgICBBZGQgY29uc3RydWN0b3IgdG8gSURMLgorCisgICAgICAgICogd29ya2Vycy9X
b3JrZXJDb250ZXh0LmlkbDoKKyAgICAgICAgQWRkIEJsb2IgY29uc3RydWN0b3IgdG8gdGhlIHdv
cmtlciBnbG9iYWwgb2JqZWN0LgorCiAyMDEyLTA0LTI2ICBKZWZmcmV5IFBmYXUgIDxqcGZhdUBh
cHBsZS5jb20+CiAKICAgICAgICAgSW52YWxpZCBjYXN0IGluIFdlYkNvcmU6OkhUTUxDb2xsZWN0
aW9uOjppc0FjY2VwdGFibGVFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAppbmRleCAwNDk0NTYwNDM4YzMzMjI2ZDEwNzljOWIwOGNlM2YyZWJhZThl
MDM1Li5hZTQ5ODM2NGUyYmUyMTg3NmNmNzFkODBiYWY0OGNlMzAxYzFiMTVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKQEAgLTMyLDggKzMyLDE1IEBA
CiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAKICNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRCbG9iQnVpbGRlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwpAQCAtNTEsNCArNTgsNzkgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmxvYiogYmxvYikKICAgICBy
ZXR1cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgQmxvYiwgYmxvYik7
CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCbG9iQ29uc3RydWN0b3I6OmNv
bnN0cnVjdEpTQmxvYihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNCbG9iQ29uc3RydWN0b3Iq
IGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNCbG9iQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUo
KSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3It
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIkJsb2Ig
Y29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsKKworICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CisgICAgICAgIFJlZlB0cjxCbG9iPiBibG9i
ID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRF
X0RPTV9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBCbG9iLCBi
bG9iLmdldCgpKSk7CisgICAgfQorCisgICAgSlNWYWx1ZSBmaXJzdEFyZyA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOworICAgIGlmICghaXNKU0FycmF5KGZpcnN0QXJnKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IG9m
IHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBBcnJheSIpKTsKKworICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheShmaXJzdEFyZyk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXkt
Pmxlbmd0aCgpOworCisgICAgU3RyaW5nIHR5cGU7CisgICAgU3RyaW5nIGVuZGluZ3MgPSAidHJh
bnNwYXJlbnQiOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsKKyAgICAg
ICAgSlNWYWx1ZSBibG9iUHJvcGVydHlCYWdWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworCisg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgaWYgdGhlIGJsb2JQcm9wZXJ0eUJhZyBp
cyBub3QgYW4gb2JqZWN0PworCisgICAgICAgIGlmICghYmxvYlByb3BlcnR5QmFnVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3Qs
IHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgorICAgICAgICAgICAgSlNPYmplY3Qq
IGJsb2JQcm9wZXJ0eUJhZ09iamVjdCA9IGJsb2JQcm9wZXJ0eUJhZ1ZhbHVlLnRvT2JqZWN0KGV4
ZWMpOworCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9t
IHRoZSBpbml0aWFsaXplciBvYmplY3QuCisgICAgICAgICAgICBKU0RpY3Rpb25hcnkgZGljdGlv
bmFyeShleGVjLCBibG9iUHJvcGVydHlCYWdPYmplY3QpOworCisgICAgICAgICAgICAvLyBBdHRl
bXB0IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIGRpY3Rpb25hcnkuZ2V0
KCJ0eXBlIiwgdHlwZSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwor
ICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIGVuZGluZ3MgcHJvcGVydHkgYW5kIHZh
bGlkYXRlIGl0LgorICAgICAgICAgICAgYm9vbCBjb250YWluc0VuZGluZ3MgPSBkaWN0aW9uYXJ5
LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisKKyAgICAgICAgICAgIGlmIChjb250YWluc0VuZGluZ3MpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZW5kaW5ncyAhPSAidHJhbnNwYXJlbnQiICYmIGVuZGluZ3MgIT0gIm5hdGl2ZSIp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOVkFMSURfU1RB
VEVfRVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBBU1NFUlQoZW5kaW5ncyA9PSAidHJhbnNwYXJlbnQiIHx8IGVuZGluZ3Mg
PT0gIm5hdGl2ZSIpOworCisgICAgLy8gRklYTUU6IHRoaXMgd291bGQgYmUgYmV0dGVyIGlmIHRo
ZSBXZWJLaXRCbG9iQnVpbGRlciB3ZXJlIGEgc3RhY2sgb2JqZWN0IHRvIGF2b2lkIHRoZSBhbGxv
Y2F0aW9uLgorICAgIFJlZlB0cjxXZWJLaXRCbG9iQnVpbGRlcj4gYmxvYkJ1aWxkZXIgPSBXZWJL
aXRCbG9iQnVpbGRlcjo6Y3JlYXRlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleChpKTsK
KyAgICAgICAgaWYgKGl0ZW0uaW5oZXJpdHMoJkpTQXJyYXlCdWZmZXI6OnNfaW5mbykpCisgICAg
ICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5kKHRvQXJyYXlCdWZmZXIoaXRlbSkpOworICAgICAg
ICBlbHNlIGlmIChpdGVtLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpCisgICAgICAgICAgICBi
bG9iQnVpbGRlci0+YXBwZW5kKHRvQmxvYihpdGVtKSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgU3RyaW5nIHN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhpdGVtLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAg
ICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChzdHJpbmcsIGVuZGluZ3MsIEFTU0VSVF9OT19FWENF
UFRJT04pOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBibG9i
QnVpbGRlci0+Z2V0QmxvYih0eXBlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKENSRUFU
RV9ET01fV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgQmxvYiwg
YmxvYi5nZXQoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCmluZGV4IGM0YzQ3
ZWQyOTJiM2YzNzg3ZTE2MDZkMWIwZDkyZjlkMGVhOWU2YmUuLjY3NDQxY2U3OGIwM2Q5NzgwOTQ5
Y2Q4NTM2ZDZmNzNmZWM4OWZjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCkBAIC00OSw0ICs0OSw3MSBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChCbG9iKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKICAgICBy
ZXR1cm4gVjhCbG9iOjp3cmFwKGltcGwsIGlzb2xhdGUpOwogfQogCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhCbG9iOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uQmxvYi5Db25zdHJ1Y3RvciIpOworCisgICAgaWYg
KCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9N
IG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQ
cm94eTo6VHlwZUVycm9yKTsKKworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9
PSBDb25zdHJ1Y3Rvck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFy
Z3MuSG9sZGVyKCk7CisKKyAgICAvLyBHZXQgdGhlIHNjcmlwdCBleGVjdXRpb24gY29udGV4dC4K
KyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
IkJsb2IgY29uc3RydWN0b3IncyBhc3NvY2lhdGVkIGZyYW1lIGlzIG5vdCBhdmFpbGFibGUiLCBW
OFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CisKKyAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpCisgICAg
ICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiB0
b1Y4KGJsb2IuZ2V0KCkpOworICAgIH0KKworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGZpcnN0
QXJnID0gYXJnc1swXTsKKyAgICBpZiAoIWZpcnN0QXJnLT5Jc0FycmF5KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKCJGaXJzdCBhcmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMgbm90
IG9mIHR5cGUgQXJyYXkiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgRVhDRVBUSU9OX0JM
T0NLKHY4OjpMb2NhbDx2ODo6QXJyYXk+LCBibG9iUGFydHMsIHY4OjpMb2NhbDx2ODo6QXJyYXk+
OjpDYXN0KGZpcnN0QXJnKSk7CisKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBTdHJpbmcgZW5kaW5n
cyA9ICJ0cmFuc3BhcmVudCI7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sx
XS0+SXNPYmplY3QoKSkgeworICAgICAgICBEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoYXJnc1sxXSk7
CisgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJ0eXBlIiwgdHlwZSk7CisgICAgICAgIGlmIChkaWN0
aW9uYXJ5LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpKSB7CisgICAgICAgICAgICBpZiAoZW5kaW5n
cyAhPSAidHJhbnNwYXJlbnQiICYmIGVuZGluZ3MgIT0gIm5hdGl2ZSIpIHsKKyAgICAgICAgICAg
ICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAg
ICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBBU1NFUlQoZW5kaW5ncyA9PSAidHJhbnNwYXJlbnQiIHx8IGVuZGlu
Z3MgPT0gIm5hdGl2ZSIpOworCisgICAgUmVmUHRyPFdlYktpdEJsb2JCdWlsZGVyPiBibG9iQnVp
bGRlciA9IFdlYktpdEJsb2JCdWlsZGVyOjpjcmVhdGUoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgYmxvYlBhcnRzLT5MZW5ndGgoKTsgKytpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IGl0ZW0gPSBibG9iUGFydHMtPkdldCh2ODo6VWludDMyOjpOZXcoaSkpOworICAg
ICAgICBBU1NFUlQoIWl0ZW0uSXNFbXB0eSgpKTsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAgICAg
aWYgKFY4QXJyYXlCdWZmZXI6Okhhc0luc3RhbmNlKGl0ZW0pKSB7CisgICAgICAgICAgICBBcnJh
eUJ1ZmZlciogYXJyYXlCdWZmZXIgPSBWOEFycmF5QnVmZmVyOjp0b05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KGl0ZW0pKTsKKyAgICAgICAgICAgIEFTU0VSVChhcnJheUJ1ZmZl
cik7CisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5kKGFycmF5QnVmZmVyKTsKKyAgICAg
ICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgaWYgKFY4QmxvYjo6SGFzSW5zdGFuY2UoaXRlbSkp
IHsKKyAgICAgICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRvTmF0aXZlKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoaXRlbSkpOworICAgICAgICAgICAgQVNTRVJUKGJsb2IpOworICAg
ICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChibG9iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhTdHJpbmcsIHN0cmluZ1ZhbHVlLCB0b1dlYkNvcmVT
dHJpbmcoaXRlbS0+VG9TdHJpbmcoKSkpOworICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVu
ZChzdHJpbmdWYWx1ZSwgZW5kaW5ncywgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGJsb2JCdWlsZGVyLT5nZXRCbG9iKHR5
cGUpOworICAgIHJldHVybiB0b1Y4KGJsb2IuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAppbmRleCAzYjMzY2Q2NmRlOGRiYTc5MWQ2ZmQ1
YzkzNDUxZDNjMGRmN2VlZDJkLi4xOTdhMjYxOGZkYTMxOGIwNjNlYzNiYjI3MWM2NGZiNWQ3MzQ1
YmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKQEAgLTM3LDYgKzM3LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorQmxvYjo6QmxvYigpCisgICAgOiBtX3NpemUoMCkKK3sKKyAgICBP
d25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworCisgICAgLy8g
Q3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgcHJvdmlk
ZWQgYmxvYiBkYXRhLgorICAgIG1faW50ZXJuYWxVUkwgPSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5h
bFVSTCgpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2lu
dGVybmFsVVJMLCBibG9iRGF0YS5yZWxlYXNlKCkpOworfQorCiBCbG9iOjpCbG9iKFBhc3NPd25Q
dHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKICAgICA6IG1fdHlwZShibG9i
RGF0YS0+Y29udGVudFR5cGUoKSkKICAgICAsIG1fc2l6ZShzaXplKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
aAppbmRleCBiY2E5Mzk4MjM2ZDg2ZWI0YThkNDM0ODYxMjc4MDMyZWM1MDJiZGM2Li5mNWYxODUy
ZjhkNTI3NGJjNGM3MGFhZDE3OTE5OWRlNjQ4MmYyNzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0Jsb2IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaApA
QCAtNDMsNiArNDMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iIDogcHVi
bGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJs
b2I+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IpOwor
ICAgIH0KKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShQYXNzT3duUHRyPEJs
b2JEYXRhPiBibG9iRGF0YSwgbG9uZyBsb25nIHNpemUpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJsb2IoYmxvYkRhdGEsIHNpemUpKTsKQEAgLTY3LDYgKzcyLDcgQEAgcHVi
bGljOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKKyAgICBCbG9iKCk7CiAgICAgQmxvYihQYXNzT3du
UHRyPEJsb2JEYXRhPiwgbG9uZyBsb25nIHNpemUpOwogCiAgICAgLy8gRm9yIGRlc2VyaWFsaXph
dGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaWRsCmluZGV4IDI5YzUxNDFkMjZjNDNiMDAxNGE1OGM0
YzhiMDdmMWQ1MzJlNmNlYTMuLjZiN2U1OWQyMmY5NzRlNzNkZTA3MTZiNGMzODc0YmIzOGM2MDNj
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmlkbApAQCAtMzMsNyArMzMsOSBAQCBtb2R1bGUgaHRt
bCB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgSlNHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGws
CiAgICAgICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKKyAg
ICAgICAgSlNOb1N0YXRpY1RhYmxlcywKKyAgICAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCisgICAg
ICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycz0yCiAgICAgXSBCbG9iIHsKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmlkbAppbmRleCBiZTllNmMwMDBiOGI0NzYxM2RhYzc4YTNkZjBkOGQxNzA1MzA5ZjZlLi41
NWIzYTQwNDI0YTdhMWEwYjVmZjMzODZlYTRhMmMyMmI3Njg4NjEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTg0LDYgKzg0LDcgQEAgbW9kdWxlIHRocmVh
ZHMgewogCiAjaWYgZGVmaW5lZChFTkFCTEVfQkxPQikgJiYgRU5BQkxFX0JMT0IKICAgICAgICAg
YXR0cmlidXRlIFdlYktpdEJsb2JCdWlsZGVyQ29uc3RydWN0b3IgV2ViS2l0QmxvYkJ1aWxkZXI7
CisgICAgICAgIGF0dHJpYnV0ZSBCbG9iQ29uc3RydWN0b3IgQmxvYjsKICAgICAgICAgYXR0cmli
dXRlIEZpbGVSZWFkZXJDb25zdHJ1Y3RvciBGaWxlUmVhZGVyOwogICAgICAgICBhdHRyaWJ1dGUg
RmlsZVJlYWRlclN5bmNDb25zdHJ1Y3RvciBGaWxlUmVhZGVyU3luYzsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDUwNWIwZGE0Nzg2NzI3YTgxMjYyNTI2ZmU2OGJiMWY4NTI0YTNjMDguLjUxNTg2MTAyN2FkYzMw
MDVlYTIwNzdkZWQ4NjgxNjI2Y2M1YWRmNGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMi0w
NC0yNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciB0aGUgQmxvYiBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODQ1NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTd2l0Y2ggdGVzdHMgdGhhdCB3ZXJlIG5vdCBkaXJlY3RseSB0ZXN0
aW5nIEJsb2JCdWlsZGVyIG92ZXIgdG8KKyAgICAgICAgdXNpbmcgdGhlIEJsb2IgY29uc3RydWN0
b3IsIHRvIGdldCB0ZXN0IGNvdmVyYWdlIG9mIHN0YW5kYXJkIHdheQorICAgICAgICBjb25zdHJ1
Y3RpbmcgYmxvYnMuCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3IuaHRt
bDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGZhc3QvZmlsZXMvc2NyaXB0LXRlc3RzL2Jsb2ItY29uc3RydWN0b3IuanM6Cisg
ICAgICAgIE5ldyB0ZXN0LgorCisgICAgICAgICogZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQv
YW5jaG9yLWRvd25sb2FkLXVuc2V0Lmh0bWw6CisgICAgICAgICogZmFzdC9kb20vSFRNTEFuY2hv
ckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLmh0bWw6CisgICAgICAgICogZmFzdC9kb20vSFRNTEFu
Y2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0Lmh0bWw6CisgICAgICAgICogZmFzdC9k
b20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQuaHRtbDoKKyAgICAgICAgKiBm
YXN0L2RvbS93aW5kb3ctZG9tdXJsLWNyYXNoLmh0bWw6CisgICAgICAgICogZmFzdC9maWxlcy9i
bG9iLWJ1aWxkZXItY3Jhc2gtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qv
ZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNoLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9m
aWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWw6CisgICAgICAgICogZmFzdC9maWxlcy9ibG9i
LXNsaWNlLXRlc3QuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQu
aHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL25vdC1lbm91Z2gtYXJndW1lbnRzLmh0bWw6Cisg
ICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1ibG9iLXRlc3QtY2FzZXMuanM6Cisg
ICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanM6CisgICAgICAgICog
ZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13b3JrZXItdmlhLWJsb2ItdXJsLmh0bWw6CisgICAg
ICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51
ZS5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFi
b3J0LWRlcHRoLmpzOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItYWJvcnQuanM6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1ldmVudHMuanM6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9m
aWxlLXdyaXRlci1nYy1ibG9iLmpzOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS13cml0ZXItc3luYy10cnVuY2F0ZS1leHRlbmQuanM6CisgICAgICAgICogZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanM6
CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5q
czoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2ZpbGVhcGkvY3JlYXRlLWJsb2ItdXJsLWZyb20tZGF0
YS11cmwuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmls
ZXN5c3RlbS11cmwuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL2Jsb2IvcmVzb3Vy
Y2VzL2h5YnJpZC1ibG9iLXV0aWwuanM6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9y
ZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sOgorICAgICAgICAqIGh0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbDoKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3Nl
LWluLWJ1c3kuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2IuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbDoKKyAgICAgICAg
KiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWw6Cisg
ICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNl
cy9zZW5kLWJsb2IuanM6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRvdy93
aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvbm9ibG9icy5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQt
Y2xvbmUuaHRtbDoKKwogMjAxMi0wNC0yNiAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29t
PgogCiAgICAgICAgIEludmFsaWQgY2FzdCBpbiBXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aXNB
Y2NlcHRhYmxlRWxlbWVudApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFu
Y2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLXVuc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQtdW5zZXQuaHRtbAppbmRleCA2
MzIxYjljNTA1ODhmOThhYTkxN2EzMThiNTg2YWM1NThjMmQzZDY4Li40M2EyY2RmMTMyNmFhYzg3
OTI4YmZlNDkzNjYwMjM5NWEzYjBiZDdiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQtdW5zZXQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQtdW5zZXQu
aHRtbApAQCAtMjQsOSArMjQsOCBAQCBmdW5jdGlvbiBjbGljayhlbG10KQogCiBmdW5jdGlvbiBy
dW5UZXN0KCkKIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBi
Yi5hcHBlbmQoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+
PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+
PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7Ci0gICAgdmFyIGJsb2Ig
PSBiYi5nZXRCbG9iKCJ0ZXh0L2h0bWwiLCAiaW5saW5lIik7CisgICAgdmFyIHN0cmluZyA9ICI8
IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiIpOyAgICAKKyAgICB2YXIgYmxvYiA9IG5ldyBC
bG9iKFtzdHJpbmddLCB7dHlwZTogInRleHQvaHRtbCJ9KTsKICAgICB2YXIgbGluayA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJibG9iLXVybCIpOwogICAgIGxpbmsuaHJlZiA9IHdpbmRvdy53
ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgIGxpbmsucmVtb3ZlQXR0cmlidXRl
KCdkb3dubG9hZCcpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hv
ckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1M
QW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQuaHRtbAppbmRleCBjODM3N2Y5Mjk4YTE5OTlh
NGFlYzBiNjVjNTFkZDE5Yzc1ZjU4MmEyLi45MDYxMDE0NjQzMmU3MTdmNThhZDcyNDk4NTg2Mjdh
YTc1MTlhMWIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxl
bWVudC9hbmNob3ItZG93bmxvYWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1M
QW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQuaHRtbApAQCAtMjQsOSArMjQsOCBAQCBmdW5j
dGlvbiBjbGljayhlbG10KQogCiBmdW5jdGlvbiBydW5UZXN0KCkKIHsKLSAgICB2YXIgYmIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoIjwhZG9jdHlwZSBodG1sPjxo
dG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJz
Y3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsg
ImlwdD48L2h0bWw+Iik7Ci0gICAgdmFyIGJsb2IgPSBiYi5nZXRCbG9iKCJ0ZXh0L2h0bWwiLCAi
aW5saW5lIik7CisgICAgdmFyIHN0cmluZyA9ICI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48
dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVh
ZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1s
PiI7CisgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbc3RyaW5nXSwge3R5cGU6ICJ0ZXh0L2h0bWwi
fSk7CiAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmxvYi11cmwiKTsK
ICAgICBsaW5rLmhyZWYgPSB3aW5kb3cud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsK
ICAgICBjbGljayhsaW5rKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxB
bmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLXNldC5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0Lmh0bWwKaW5kZXgg
ZDBiNDJhZjBiNWFiNzBhNDgzYTBhNmM3ZDcyMjlmNzdkNzE5YWJlNS4uNTQ1MmEyY2RhMmY0YWE4
MmViNmFkMDI3ZDRjYzFjMDk1ODU4MDllMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0Lmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQtc2V0
Lmh0bWwKQEAgLTI0LDkgKzI0LDggQEAgZnVuY3Rpb24gY2xpY2soZWxtdCkKIAogZnVuY3Rpb24g
cnVuVGVzdCgpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAg
YmIuYXBwZW5kKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxl
PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5
PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiIpOwotICAgIHZhciBibG9i
ID0gYmIuZ2V0QmxvYigidGV4dC9odG1sIiwgImlubGluZSIpOworICAgIHZhciBzdHJpbmcgPSAi
PCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0Pmlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0Pmlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iOworICAgIHZhciBibG9iID0gbmV3IEJsb2Io
W3N0cmluZ10sIHt0eXBlOiAidGV4dC9odG1sIn0pOwogICAgIHZhciBsaW5rID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImJsb2ItdXJsIik7CiAgICAgbGluay5ocmVmID0gd2luZG93LndlYmtp
dFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25s
b2FkJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVu
dC9hbmNob3Itbm9kb3dubG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hv
ckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQuaHRtbAppbmRleCBmOTFlZGMxZmNkODIzNmI4MjQ5
NDA2OWVkMDMzMTI3M2MwMDY0NjAzLi5kY2QxMDA5OTNhYzEwODAzMDUyZDE3OGZlMTU3ZjBjYjI4
MDdkNzE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVu
dC9hbmNob3Itbm9kb3dubG9hZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxB
bmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLmh0bWwKQEAgLTI0LDkgKzI0LDggQEAgZnVu
Y3Rpb24gY2xpY2soZWxtdCkKIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7Ci0gICAgdmFyIGJiID0g
bmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCI8IWRvY3R5cGUgaHRtbD48
aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAi
c2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiAr
ICJpcHQ+PC9odG1sPiIpOwotICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigidGV4dC9odG1sIiwg
ImlubGluZSIpOworICAgIHZhciBzdHJpbmcgPSAiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+
PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hl
YWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRt
bD4iOworICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAidGV4dC9odG1s
In0pOwogICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsb2ItdXJsIik7
CiAgICAgbGluay5ocmVmID0gd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7
CiAgICAgY2xpY2sobGluayk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS93aW5k
b3ctZG9tdXJsLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS93aW5kb3ctZG9tdXJs
LWNyYXNoLmh0bWwKaW5kZXggN2Q1YzA0YzM5Y2I4YmViODlhOGJmNWQwMGNkNDJhZTIzNDVmMDlh
YS4uM2I4ZmQ3NTUzNzE2MjRmNTkwNWViN2EwYzQwNWE2ODk3MTk3MzhiMyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vd2luZG93LWRvbXVybC1jcmFzaC5odG1sCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbApAQCAtMSw3ICsxLDcgQEAK
IDxodG1sPg0KIDxoZWFkPg0KIDxzY3JpcHQ+DQotdmFyIGJsb2IgPSAobmV3IFdlYktpdEJsb2JC
dWlsZGVyKS5nZXRCbG9iKCk7DQordmFyIGJsb2IgPSBuZXcgQmxvYihbXSk7DQogdmFyIHVybCA9
IG51bGw7DQogdmFyIGNvdW50ID0gMDsNCiANCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9ibG9iLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjQ0MzkyMjM5
MjcxN2E5ZThhNmRlMzc0NzdkOTVkODk4MDcxNDdiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9maWxlcy9ibG9iLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDM3IEBACitUZXN0IHRoZSBCbG9iIGNvbnN0cnVjdG9yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyAobmV3IEJsb2IoKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0
cnVlCitQQVNTIChuZXcgQmxvYihbXSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQor
UEFTUyAobmV3IEJsb2IoWydoZWxsbyddKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVl
CitQQVNTIChuZXcgQmxvYihbJ2hlbGxvJ10sIHt9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBp
cyB0cnVlCitQQVNTIChuZXcgQmxvYihbJ2hlbGxvJ10sIHt0eXBlOid0ZXh0L2h0bWwnfSkpIGlu
c3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoWydoZWxsbyddLCB7
dHlwZTondGV4dC9odG1sJywgZW5kaW5nczonbmF0aXZlJ30pKSBpbnN0YW5jZW9mIHdpbmRvdy5C
bG9iIGlzIHRydWUKK1BBU1MgKG5ldyBCbG9iKFsnaGVsbG8nXSwge3R5cGU6J3RleHQvaHRtbCcs
IGVuZGluZ3M6J3RyYW5zcGFyZW50J30pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUK
K1BBU1MgbmV3IEJsb2IoJ2hlbGxvJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmlyc3Qg
YXJndW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yIGlzIG5vdCBvZiB0eXBlIEFycmF5LgorUEFTUyBu
ZXcgQmxvYigwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBvZiB0
aGUgY29uc3RydWN0b3IgaXMgbm90IG9mIHR5cGUgQXJyYXkuCitQQVNTIChuZXcgQmxvYihbXSkp
IGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoW25ldyBBcnJh
eUJ1ZmZlcig4KV0pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgKG5ldyBC
bG9iKFsnc3RyaW5nUHJpbWl0aXZlJ10pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUK
K1BBU1MgKG5ldyBCbG9iKFtTdHJpbmcoJ3N0cmluZ09iamVjdCcpXSkpIGluc3RhbmNlb2Ygd2lu
ZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoW25ldyBCbG9iXSkpIGluc3RhbmNlb2Yg
d2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoW25ldyBCbG9iKFtuZXcgQmxvYl0p
XSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoWzEyXSkp
LnNpemUgaXMgMgorUEFTUyAobmV3IEJsb2IoW1tdXSkpLnNpemUgaXMgMAorUEFTUyAobmV3IEJs
b2IoW3t9XSkpLnNpemUgaXMgMTUKK1BBU1MgKG5ldyBCbG9iKFtkb2N1bWVudF0pKS5zaXplIGlz
IDIxCitQQVNTIChuZXcgQmxvYihbdG9TdHJpbmdpbmdPYmpdKSkuc2l6ZSBpcyA4CitQQVNTIG5l
dyBCbG9iKFt0aHJvd2luZ09ial0pIHRocmV3IGV4Y2VwdGlvbiBlcnJvci4KK1BBU1MgKG5ldyBC
bG9iKFtdLCB7dW5rbm93bktleTondmFsdWUnfSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMg
dHJ1ZQorUEFTUyBuZXcgQmxvYihbXSwge2VuZGluZ3M6J2lsbGVnYWxWYWx1ZSd9KSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IElOVkFMSURfU1RBVEVfRVJSOiBET00gRXhjZXB0aW9uIDExLgorUEFT
UyBuZXcgQmxvYihbXSwge2VuZGluZ3M6dGhyb3dpbmdPYmp9KSB0aHJldyBleGNlcHRpb24gZXJy
b3IuCitQQVNTIG5ldyBCbG9iKFtdLCB7dHlwZTp0aHJvd2luZ09ian0pIHRocmV3IGV4Y2VwdGlv
biBlcnJvci4KK1BBU1MgKG5ldyBCbG9iKFtdLCB7dHlwZTondGV4dC9odG1sJ30pKS50eXBlIGlz
ICd0ZXh0L2h0bWwnCitQQVNTIChuZXcgQmxvYihbXSwge3R5cGU6J3RleHQvaHRtbCd9KSkuc2l6
ZSBpcyAwCitQQVNTIHdpbmRvdy5CbG9iLmxlbmd0aCBpcyAyCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy9ibG9iLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L2Jsb2ItY29uc3RydWN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMmViMGVmNzRmOWE4NGY2MzBlZjEy
MzA0YjYxNmNkMTgzNTU2ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9ibG9iLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Jsb2ItY29uc3RydWN0b3IuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbAppbmRleCBlYzhmYThjZDg3OTBhZWFkMzY5ZTQ2YTBj
OTZhY2FhYmZjMDk3MDBhLi5hM2VlN2M0YzNlMzI2NjVhYTZjZTc4ZWY5ZDg3MDdhOGExZjllMTA1
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRt
bApAQCAtNSwxOSArNSwyMiBAQCBhIHRydW5jYXRlZCBzbGljZSBiZWluZyByZXR1cm5lZC4KIDxw
cmUgaWQ9J2NvbnNvbGUnPjwvcHJlPgogPHNjcmlwdD4KIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKLSAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCkKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
CiB9Ci12YXIgYnVpbGRlciA9ICBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKwogdmFyIHRleHQg
PSAnJzsKLWZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDsgKytpKSB0ZXh0ICs9ICdBJzsKLWJ1aWxk
ZXIuYXBwZW5kKHRleHQpOwotYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpOworZm9yICh2YXIgaSA9
IDA7IGkgPCAyMDAwOyArK2kpCisgICAgdGV4dCArPSAnQSc7CisKK2Jsb2IgPSBuZXcgQmxvYihb
dGV4dF0pOwogc2xpY2VkQmxvYiA9IGJsb2Iud2Via2l0U2xpY2UoMTk5OSwgOTIyMzM3MjAzNjg1
NDc3NTAwMCk7CisKIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0Jsb2Igc2xpY2UgbGVuZ3RoOiAnICsgc2xpY2Vk
QmxvYi5zaXplKSk7CiBpZiAoc2xpY2VkQmxvYi5zaXplICE9IDEpIHsKLSAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgnRkFJTCcpKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdGQUlMJykpOwogfQorCiBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS10
ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2UtdGVzdC5odG1sCmlu
ZGV4IDU2MDQ4ZGEwNjJhNTFhNDNjZmM2NmU3MTQ5YzliYzkxMWY5MTFlOGQuLjBjOGNkMTY2MDc5
NThhZDkxMDhiNTIxOGI3MDgwNWIwZTFkMDI2NTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvYmxvYi1zbGljZS10ZXN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
cy9ibG9iLXNsaWNlLXRlc3QuaHRtbApAQCAtODIsOSArODIsNyBAQCBmdW5jdGlvbiBydW5OZXh0
VGVzdCgpCiAKIGZ1bmN0aW9uIHJ1blRlc3RzKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBX
ZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCIwMTIzNDU2Nzg5Iik7Ci0g
ICAgYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIGJsb2IgPSBuZXcgQmxvYihbIjAxMjM0
NTY3ODkiXSk7CiAKICAgICBydW5OZXh0VGVzdCgpOwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1mZmZkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbAppbmRleCAwYjRmZjFhYjE5MWZmOThlY2YyMDQ0ZGJm
MzdiNDU2YmQ2MjQzMDVkLi5lYWNhMjRlYmE2MDA4ZDIyNjFjYzVkNTNkMWZlMTBhMzllNDM5ZGZl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbApAQCAt
MTAsOSArMTAsOCBAQAogPHNjcmlwdD4KIGRlc2NyaXB0aW9uKCJUaHJvdyB2YXJpb3VzIGJhZCBi
eXRlcyBhdCBmaWxlIHJlYWRlci4iKTsKIAotYmIgPSBldmFsQW5kTG9nKCJiYiA9IG5ldyBXZWJL
aXRCbG9iQnVpbGRlcigpOyIpOwogYXJyYXkgPSBldmFsQW5kTG9nKCJhcnJheSA9IG5ldyBVaW50
OEFycmF5KFs2NSwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1Mywg
MjU0LCAyNTUsIDY2XSk7Iik7Ci1ibG9iID0gZXZhbEFuZExvZygiYmxvYiA9IGJ1aWxkQmxvYihb
YXJyYXkuYnVmZmVyXSk7Iik7CitibG9iID0gZXZhbEFuZExvZygiYmxvYiA9IG5ldyBCbG9iKFth
cnJheS5idWZmZXJdKTsiKTsKIHJlYWRlciA9IGV2YWxBbmRMb2coInJlYWRlciA9IG5ldyBGaWxl
UmVhZGVyKCk7Iik7CiByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgZmlsZVN0
cmluZyA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL25vdC1lbm91Z2gtYXJndW1lbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L25vdC1lbm91Z2gtYXJndW1lbnRzLmh0bWwKaW5kZXggMDE5YTlmMWM1ZWE0MWExYTQ2ZTk1NTIy
M2ZkMzg1MzA3ODA5NTJkMi4uNTkxNTUzZjFhZTQzOTFhZGNiYmI2YmFiNzlhZmNhYjFmMDhhMDk2
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50
cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMu
aHRtbApAQCAtMTUsOSArMTUsNyBAQCBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc0JpbmFyeVN0
cmluZygpJyk7CiBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc1RleHQoKScpOwogc2hvdWxkVGhy
b3coJ3JlYWRlci5yZWFkQXNEYXRhVVJMKCknKTsKIAotdmFyIGJsb2JCdWlsZGVyID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7Ci0KLXNob3VsZFRocm93KCdibG9iQnVpbGRlci5hcHBlbmQoKScp
Oworc2hvdWxkVGhyb3coJ25ldyBCbG9iKCknKTsKIAogdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdOwogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWJsb2ItdGVzdC1jYXNlcy5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCmluZGV4
IDgxOWNhMDBiYzBhNjE1ODQ3ZGQwMDcxNWY2ZWZhZWUxY2YwYzJiYjMuLmZmMGY0ODExZTRkNTg2
NzA0ODg0ODAxMTU2ZTg0NTMzNWU5Y2U1ZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCkBAIC0xNzAsMTEg
KzE3MCwxMSBAQCBmdW5jdGlvbiB0ZXN0UmVhZGluZ1NsaWNlZEh5YnJpZEJsb2IodGVzdEZpbGVz
KQogZnVuY3Rpb24gdGVzdFJlYWRpbmdUcmlwbGVTbGljZWRIeWJyaWRCbG9iKHRlc3RGaWxlcykK
IHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhIHRyaXBsZS1zbGljZWQgaHlicmlkIGJsb2IiKTsK
LSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwogICAgIHZhciBhcnJh
eSA9IG5ldyBVaW50OEFycmF5KFs0OCwgNDksIDUwXSk7Ci0gICAgdmFyIGJsb2IgPSBidWlsZEJs
b2IoWydGaXJzdCcsIHRlc3RGaWxlc1snZmlsZTEnXS53ZWJraXRTbGljZSgxLCAxMSksIHRlc3RG
aWxlc1snZW1wdHktZmlsZSddLCAnU2Vjb25kJywgdGVzdEZpbGVzWydmaWxlMiddLCB0ZXN0Rmls
ZXNbJ2ZpbGUzJ10sICdUaGlyZCcsIGFycmF5LmJ1ZmZlcl0sIHVuZGVmaW5lZCwgYnVpbGRlcik7
CisgICAgdmFyIGl0ZW1zID0gWydGaXJzdCcsIHRlc3RGaWxlc1snZmlsZTEnXS53ZWJraXRTbGlj
ZSgxLCAxMSksIHRlc3RGaWxlc1snZW1wdHktZmlsZSddLCAnU2Vjb25kJywgdGVzdEZpbGVzWydm
aWxlMiddLCB0ZXN0RmlsZXNbJ2ZpbGUzJ10sICdUaGlyZCcsIGFycmF5LmJ1ZmZlcl07CisgICAg
dmFyIGJsb2IgPSBidWlsZEJsb2IoaXRlbXMpOwogICAgIHZhciBibG9iID0gYmxvYi53ZWJraXRT
bGljZSg3LCAxOSk7Ci0gICAgdmFyIGJsb2IyID0gYnVpbGRCbG9iKFsnRm9vJywgYmxvYiwgJ0Jh
ciddLCB1bmRlZmluZWQsIGJ1aWxkZXIpOworICAgIHZhciBibG9iMiA9IGJ1aWxkQmxvYihpdGVt
cy5jb25jYXQoWydGb28nLCBibG9iLCAnQmFyJ10pKTsKICAgICB2YXIgYmxvYjIgPSBibG9iMi53
ZWJraXRTbGljZSgxMiwgNDIpOwogICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVz
LCBibG9iMik7CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNl
cy9yZWFkLWNvbW1vbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQt
Y29tbW9uLmpzCmluZGV4IDA3MTI1YTU5ZmYwYjI2MTM5NjMyMzVjOWU0ZDM4NWQwODUzOWMyM2Eu
LmJhYzc5OWMxMzJkYzM1NGViZDhmZjU4NmEyZGQ5MjliNzA4OWZjNWQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCkBAIC0xLDEzICsxLDEx
IEBACiAvLyBCdWlsZHMgYSBibG9iIGZyb20gYSBsaXN0IG9mIGl0ZW1zLgogLy8gVGhlICdjb250
ZW50VHlwZScgYXJndW1lbnQgaXMgb3B0aW9uYWwuCiAvLyBJZiB0aGUgJ2J1aWxkZXInIGFyZ3Vt
ZW50IGlzIG5vdCBwcm92aWRlZCwgY3JlYXRlIGEgbmV3IG9uZS4KLWZ1bmN0aW9uIGJ1aWxkQmxv
YihpdGVtcywgY29udGVudFR5cGUsIGJ1aWxkZXIpCitmdW5jdGlvbiBidWlsZEJsb2IoaXRlbXMs
IGNvbnRlbnRUeXBlKQogewotICAgIGlmIChidWlsZGVyID09PSB1bmRlZmluZWQpCi0gICAgICAg
IGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGl0ZW1zLmxlbmd0aDsgaSsrKQotICAgICAgICBidWlsZGVyLmFwcGVuZChpdGVtc1tpXSk7
Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYihjb250ZW50VHlwZSk7CisgICAgaWYgKGNvbnRl
bnRUeXBlID09PSB1bmRlZmluZWQpCisgICAgICAgIHJldHVybiBuZXcgQmxvYihpdGVtcyk7Cisg
ICAgcmV0dXJuIG5ldyBCbG9iKGl0ZW1zLCB7dHlwZTpjb250ZW50VHlwZX0pOwogfQogCiAvLyBS
ZWFkcyBhIGJsb2IgZWl0aGVyIGFzeW5jaHJvbm91c2x5IG9yIHN5bmNocm9ub3VzbHkuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3NjcmlwdC10ZXN0cy9ibG9iLWNvbnN0cnVj
dG9yLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9zY3JpcHQtdGVzdHMvYmxvYi1jb25zdHJ1
Y3Rvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lZjYwMDc5ODA0ZTljMGU4OGNkZTMyMDMyMWU2NTU4NmIzMjNh
ZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9zY3JpcHQtdGVz
dHMvYmxvYi1jb25zdHJ1Y3Rvci5qcwpAQCAtMCwwICsxLDQ4IEBACitkZXNjcmlwdGlvbigiVGVz
dCB0aGUgQmxvYiBjb25zdHJ1Y3Rvci4iKTsKKworLy8gVGVzdCB0aGUgZGlmZnJlbnQgd2F5cyB5
b3UgY2FuIGNvbnN0cnVjdCBhIEJsb2IuCitzaG91bGRCZVRydWUoIihuZXcgQmxvYigpKSBpbnN0
YW5jZW9mIHdpbmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUoIihuZXcgQmxvYihbXSkpIGluc3Rh
bmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFsnaGVsbG8nXSkp
IGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFsnaGVs
bG8nXSwge30pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUoIihuZXcg
QmxvYihbJ2hlbGxvJ10sIHt0eXBlOid0ZXh0L2h0bWwnfSkpIGluc3RhbmNlb2Ygd2luZG93LkJs
b2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFsnaGVsbG8nXSwge3R5cGU6J3RleHQvaHRt
bCcsIGVuZGluZ3M6J25hdGl2ZSd9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxk
QmVUcnVlKCIobmV3IEJsb2IoWydoZWxsbyddLCB7dHlwZTondGV4dC9odG1sJywgZW5kaW5nczon
dHJhbnNwYXJlbnQnfSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKKworLy8gVGVzdCBzb21l
IGVycm9yIGNhc2VzCitzaG91bGRUaHJvdygibmV3IEJsb2IoJ2hlbGxvJykiKTsKK3Nob3VsZFRo
cm93KCJuZXcgQmxvYigwKSIpOworCisvLyBUZXN0IHZhbGlkIGJsb2IgcGFydHMuCitzaG91bGRC
ZVRydWUoIihuZXcgQmxvYihbXSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJl
VHJ1ZSgiKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoOCldKSkgaW5zdGFuY2VvZiB3aW5kb3cu
QmxvYiIpOworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoWydzdHJpbmdQcmltaXRpdmUnXSkpIGlu
c3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtTdHJpbmco
J3N0cmluZ09iamVjdCcpXSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1
ZSgiKG5ldyBCbG9iKFtuZXcgQmxvYl0pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CitzaG91
bGRCZVRydWUoIihuZXcgQmxvYihbbmV3IEJsb2IoW25ldyBCbG9iXSldKSkgaW5zdGFuY2VvZiB3
aW5kb3cuQmxvYiIpOworCisvLyBUZXN0IHNvbWUgY29udmVyc2lvbnMgdG8gc3RyaW5nIGluIHRo
ZSBwYXJ0cyBhcnJheS4KK3Nob3VsZEJlKCIobmV3IEJsb2IoWzEyXSkpLnNpemUiLCAiMiIpOwor
c2hvdWxkQmUoIihuZXcgQmxvYihbW11dKSkuc2l6ZSIsICIwIik7ICAgICAgICAgLy8gW10udG9T
dHJpbmcoKSBpcyB0aGUgZW1wdHkgc3RyaW5nCitzaG91bGRCZSgiKG5ldyBCbG9iKFt7fV0pKS5z
aXplIiwgIjE1Iik7OyAgICAgICAvLyB7fS50b1N0cmluZygpIGlzIHRoZSBzdHJpbmcgIltvYmpl
Y3QgT2JqZWN0XSIKK3Nob3VsZEJlKCIobmV3IEJsb2IoW2RvY3VtZW50XSkpLnNpemUiLCAiMjEi
KTsgIC8vIGRvY3VtZW50LnRvU3RyaW5nKCkgaXMgdGhlIHN0cmluZyAiW29iamVjdCBIVE1MRG9j
dW1lbnRdIiAKKwordmFyIHRvU3RyaW5naW5nT2JqID0geyB0b1N0cmluZzogZnVuY3Rpb24oKSB7
IHJldHVybiAiQSBzdHJpbmciOyB9IH07CitzaG91bGRCZSgiKG5ldyBCbG9iKFt0b1N0cmluZ2lu
Z09ial0pKS5zaXplIiwgIjgiKTsKKwordmFyIHRocm93aW5nT2JqID0geyB0b1N0cmluZzogZnVu
Y3Rpb24oKSB7IHRocm93ICJlcnJvciI7IH0gfTsKK3Nob3VsZFRocm93KCJuZXcgQmxvYihbdGhy
b3dpbmdPYmpdKSIpOworCisKKy8vIFRlc3Qgc29tZSBpbnZhbGlkIHByb3BlcnR5IGJhZ3MKK3No
b3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdLCB7dW5rbm93bktleTondmFsdWUnfSkpIGluc3RhbmNl
b2Ygd2luZG93LkJsb2IiKTsgICAgLy8gSWdub3JlIGludmFsaWQga2V5cworc2hvdWxkVGhyb3co
Im5ldyBCbG9iKFtdLCB7ZW5kaW5nczonaWxsZWdhbFZhbHVlJ30pIik7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaHJvdyBmb3IgaW52YWxpZCB2YWx1ZSB0byBlbmRpbmdzCitzaG91bGRU
aHJvdygibmV3IEJsb2IoW10sIHtlbmRpbmdzOnRocm93aW5nT2JqfSkiKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRocm93cyBkdXJpbmcgdG9TdHJpbmcKK3Nob3VsZFRocm93KCJu
ZXcgQmxvYihbXSwge3R5cGU6dGhyb3dpbmdPYmp9KSIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhyb3dzIGR1cmluZyB0b1N0cmluZworCisvLyBUZXN0IHRoYXQgdGhlIHR5
cGUvc2l6ZSBpcyBjb3JyZWN0bHkgYWRkZWQgdG8gdGhlIEJsb2IKK3Nob3VsZEJlKCIobmV3IEJs
b2IoW10sIHt0eXBlOid0ZXh0L2h0bWwnfSkpLnR5cGUiLCAiJ3RleHQvaHRtbCciKTsKK3Nob3Vs
ZEJlKCIobmV3IEJsb2IoW10sIHt0eXBlOid0ZXh0L2h0bWwnfSkpLnNpemUiLCAiMCIpOworCisv
LyBPZGRzIGFuZCBlbmRzCitzaG91bGRCZSgid2luZG93LkJsb2IubGVuZ3RoIiwgIjIiKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZp
YS1ibG9iLXVybC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13
b3JrZXItdmlhLWJsb2ItdXJsLmh0bWwKaW5kZXggM2JhY2NkYTI3NzQwMDNhNzAzNGIyMjA0Zjg5
MDdmMTE2YmY4NThlZS4uMDRiZDA4Y2Y2MDJjMGY3NDAwNTViODk0MDQyMzVjYWM2YjFkMTJmMSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13b3JrZXIt
dmlhLWJsb2ItdXJsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL2lu
bGluZS13b3JrZXItdmlhLWJsb2ItdXJsLmh0bWwKQEAgLTEwLDEzICsxMCwxMiBAQCBmdW5jdGlv
biBsb2cobWVzc2FnZSkKIGZ1bmN0aW9uIHJ1blRlc3QoKQogewogICAgIGxvZygiVGVzdCBpbmxp
bmUgd2ViIHdvcmtlciB2aWEgYmxvYiBVUkwuIik7Ci0gICAgdmFyIGJsb2JCdWlsZGVyID0gbmV3
IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmxvYkJ1aWxkZXIuYXBwZW5kKFsKKyAgICB2YXIg
c3RyaW5nID0gWwogICAgICAgICAib25tZXNzYWdlID0gZnVuY3Rpb24oZSkgeyIsCiAgICAgICAg
ICIgICAgcG9zdE1lc3NhZ2UoJ0hlbGxvIGZyb20gd29ya2VyJyk7IiwKICAgICAgICAgIn07Igog
ICAgIF0uam9pbignXG4nKSk7Ci0gICAgdmFyIGJsb2JVUkwgPSB3ZWJraXRVUkwuY3JlYXRlT2Jq
ZWN0VVJMKGJsb2JCdWlsZGVyLmdldEJsb2IoKSk7CisgICAgdmFyIGJsb2JVUkwgPSB3ZWJraXRV
UkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtzdHJpbmddKSk7CiAgICAgdmFyIHdvcmtlciA9
IG5ldyBXb3JrZXIoYmxvYlVSTCk7CiAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2
ZW50KSB7CiAgICAgICAgIGxvZyhldmVudC5kYXRhKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0
LWNvbnRpbnVlLmpzCmluZGV4IGI1Y2ViNGE4NzMxZTc3MDUyMjUwYWQyODBjYzU0YWEyMDZhMGVl
YmYuLjE3OTE2ZGJiNThjNjlmYjk2MmRkMjgxNWVkMGY4MDFkY2VmOGZiYmEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQt
Y29udGludWUuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9m
aWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcwpAQCAtNTIsMTEgKzUyLDExIEBAIGZ1bmN0aW9u
IG5vcCgpIHsKIH0KIAogZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgewotICAgIHZhciBiYiA9IG5l
dyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIHZhciBiYiA9IFtdOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTA7ICsraSkgewotICAgICAgICBiYi5hcHBlbmQoYmxvYik7CisgICAgICAgIGJi
LnB1c2goYmxvYik7CiAgICAgfQotICAgIHJldHVybiBiYi5nZXRCbG9iKCk7CisgICAgcmV0dXJu
IG5ldyBCbG9iKGJiKTsKIH0KIAogLy8gVGhlc2UgbWV0aG9kcyBzZXQgdXAgYSB3cml0ZSwgYWJv
cnQgaXQgYXMgc29vbiBhcyBpdCBzdGFydHMsIHRoZW4gaW5pdGlhdGUKQEAgLTkxLDkgKzkxLDcg
QEAgZnVuY3Rpb24gY2hlY2tMZW5ndGhBbmRDb21wbGV0ZVRlc3QoZSkgewogCiBmdW5jdGlvbiBz
dGFydFdyaXRlKCkgewogICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4KLSAg
ICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoImxvcmVt
IGlwc3VtIik7Ci0gICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOworICAgIHZh
ciBibG9iID0gdGVuWEJsb2IobmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKSk7CiAgICAgYmxvYiA9
IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0g
dGVuWEJsb2IoYmxvYik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcwppbmRleCBlYThi
NjM4M2E3ZjdlNTk5MmIzNjM2NjBkYzI2YzkyNjFiNTYyNWRjLi45N2IxMjBhZDBmZDM5NGYxMmM4
YTI3MGM4N2U1NmUwMTUwOGYxOGRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanMK
QEAgLTEwLDkgKzEwLDcgQEAgdmFyIHNhd1dyaXRlU3RhcnQ7CiB2YXIgc2F3QWJvcnQ7CiB2YXIg
c2F3V3JpdGVFbmQ7CiB2YXIgd3JpdGVyOwotdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7Ci1iYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci12YXIgYmxvYiA9IGJiLmdldEJsb2IoKTsK
K3ZhciBibG9iID0gbmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKTsKIHZhciByZWN1cnNpb25EZXB0
aCA9IDA7CiB2YXIgbWV0aG9kOwogdmFyIHRlc3RzUnVuID0gMDsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQuanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0Lmpz
CmluZGV4IDJjNDEwN2E5NTc4ZjUxNmM2ZGY0N2I0MGE3MGI1YzRmODU4NTYxZjEuLjQ5OWE3ZGY4
YTM5NTM0MDkwN2ViMWNlZDBhOTFjNzdmNGYzNzc4ZWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQuanMKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcwpA
QCAtMTIsMTEgKzEyLDExIEBAIHZhciBzYXdXcml0ZUVuZDsKIHZhciB3cml0ZXI7CiAKIGZ1bmN0
aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIo
KTsKKyAgICB2YXIgYmIgPSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsK
LSAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICBiYi5wdXNoKGJsb2IpOwogICAgIH0K
LSAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihiYik7CiB9CiAK
IGZ1bmN0aW9uIG9uV3JpdGVTdGFydChlKSB7CkBAIC02Miw5ICs2Miw3IEBAIGZ1bmN0aW9uIG9u
V3JpdGVFbmQoZSkgewogCiBmdW5jdGlvbiBzdGFydFdyaXRlKGZpbGVXcml0ZXIpIHsKICAgICAv
LyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCi0gICAgdmFyIGJiID0gbmV3IFdlYktp
dEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOwotICAgIHZhciBi
bG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKKyAgICB2YXIgYmxvYiA9IHRlblhCbG9iKG5l
dyBCbG9iKFsibG9yZW0gaXBzdW0iXSkpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAg
ICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRl
ci1ldmVudHMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUt
d3JpdGVyLWV2ZW50cy5qcwppbmRleCBjODhlMGZiMjRmZGM1ZWVhNTg4YThhNmQ1N2M1NDJlN2Zm
MGU2OWFiLi5kZjllNmFiZDBhODgyOTAyODZkMTFmOGExZmQzMTlhNzBmMTFjOGY4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2
ZW50cy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUt
d3JpdGVyLWV2ZW50cy5qcwpAQCAtMTYsMTEgKzE2LDExIEBAIHZhciBsYXN0UHJvZ3Jlc3MgPSAw
OwogdmFyIHRvQmVXcml0dGVuOwogCiBmdW5jdGlvbiB0ZW5YQmxvYihibG9iKSB7Ci0gICAgdmFy
IGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgdmFyIGJiID0gW107CiAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgICAgIGJiLmFwcGVuZChibG9iKTsKKyAg
ICAgICAgYmIucHVzaChibG9iKTsKICAgICB9Ci0gICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKKyAg
ICByZXR1cm4gbmV3IEJsb2IoYmIpOwogfQogCiBmdW5jdGlvbiBvbldyaXRlU3RhcnQoZSkgewpA
QCAtNzgsOSArNzgsNyBAQCBmdW5jdGlvbiBvbldyaXRlRW5kKGUpIHsKIAogZnVuY3Rpb24gc3Rh
cnRXcml0ZShmaWxlV3JpdGVyKSB7CiAgICAgLy8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2Fi
eXRlLgotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVu
ZCgibG9yZW0gaXBzdW0iKTsKLSAgICB2YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7
CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihuZXcgQmxvYihbImxvcmVtIGlwc3VtIl0pKTsKICAg
ICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAg
IGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZ2MtYmxvYi5qcwppbmRleCA4NGJi
YWJiOTIwZDRlMGM2MjEyOTc0M2FiZDdhY2FkOGZmNjJmN2ZlLi5lYTFmNmYyMjBhM2VmMmJkNDky
MjNlYjA3ZTY3NTUwYjgzNTRjMjE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCkBAIC0xNCwx
OCArMTQsMTYgQEAgZnVuY3Rpb24gb25UZXN0U3VjY2VzcygpIHsKIH0KIAogZnVuY3Rpb24gdGVu
WEJsb2IoYmxvYikgewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAg
IHZhciBiYiA9IFtdOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAg
ICBiYi5hcHBlbmQoYmxvYik7CisgICAgICAgIGJiLnB1c2goYmxvYik7CiAgICAgfQotICAgIHJl
dHVybiBiYi5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKGJiKTsKIH0KIAogZnVuY3Rp
b24gc3RhcnRXcml0ZSh3cml0ZXIpIHsKICAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVn
YWJ5dGUuCi0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBw
ZW5kKCJsb3JlbSBpcHN1bSIpOwotICAgIHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigp
KTsKKyAgICB2YXIgYmxvYiA9IHRlblhCbG9iKG5ldyBCbG9iWyJsb3JlbSBpcHN1bSJdKTsKICAg
ICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAg
IGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy10cnVuY2F0ZS1leHRlbmQuanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1
bmNhdGUtZXh0ZW5kLmpzCmluZGV4IDNkZjk5MTM3MjNhM2U5Yjc5Zjc2YmNhNGZiN2RhMzhkOTc2
YWZjNjYuLjhmYmIwMTQ3YTAxMjVhYTVjZGMwNDk2YWRiNmNlM2FjMjJkNTNkOTMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3lu
Yy10cnVuY2F0ZS1leHRlbmQuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVuZC5qcwpAQCAtMTUsMTAgKzE1
LDggQEAgcmVtb3ZlQWxsSW5EaXJlY3RvcnlTeW5jKGZpbGVTeXN0ZW0ucm9vdCk7CiB2YXIgZW50
cnkgPSBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSgnYScsIHtjcmVhdGU6dHJ1ZSwgZXhjbHVzaXZl
OnRydWV9KTsKIHZhciB3cml0ZXIgPSBlbnRyeS5jcmVhdGVXcml0ZXIoKTsKIGFzc2VydCghd3Jp
dGVyLnBvc2l0aW9uKTsKLXZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CiB2
YXIgdGVzdERhdGEgPSAidGVzdCBkYXRhIjsKLWJ1aWxkZXIuYXBwZW5kKHRlc3REYXRhKTsKLXdy
aXRlci53cml0ZShidWlsZGVyLmdldEJsb2IoKSk7Cit3cml0ZXIud3JpdGUobmV3IEJsb2IoW3Rl
c3REYXRhXSkpOwogYXNzZXJ0KHdyaXRlci5sZW5ndGggPT0gdGVzdERhdGEubGVuZ3RoKTsKIGFz
c2VydCh3cml0ZXIucG9zaXRpb24gPT0gd3JpdGVyLmxlbmd0aCk7CiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy13cml0
ZS1vdmVybGFwcGVkLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9m
aWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanMKaW5kZXggOGYxZWQ5YTdlODcyYTEz
MGI5YzJjMmE3ZWQxMjE2N2RlYzM2ZjUyYS4uNmUzZDU3YjQ2NTVmZTQ0MmQxYzcwNTE5YjNiNTll
NjAxMDcxMDkyYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanMKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJs
YXBwZWQuanMKQEAgLTE1LDEwICsxNSw4IEBAIHJlbW92ZUFsbEluRGlyZWN0b3J5U3luYyhmaWxl
U3lzdGVtLnJvb3QpOwogdmFyIGVudHJ5ID0gZmlsZVN5c3RlbS5yb290LmdldEZpbGUoJ2EnLCB7
Y3JlYXRlOnRydWUsIGV4Y2x1c2l2ZTp0cnVlfSk7CiB2YXIgd3JpdGVyID0gZW50cnkuY3JlYXRl
V3JpdGVyKCk7CiBhc3NlcnQoIXdyaXRlci5wb3NpdGlvbik7Ci12YXIgYnVpbGRlciA9IG5ldyBX
ZWJLaXRCbG9iQnVpbGRlcigpOwogdmFyIHRlc3REYXRhID0gInRlc3QgZGF0YSI7Ci1idWlsZGVy
LmFwcGVuZCh0ZXN0RGF0YSk7Ci12YXIgYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpOwordmFyIGJs
b2IgPSBuZXcgQmxvYihbdGVzdERhdGFdKTsKIHdyaXRlci53cml0ZShibG9iKTsKIGFzc2VydCh3
cml0ZXIubGVuZ3RoID09IHRlc3REYXRhLmxlbmd0aCk7CiBhc3NlcnQod3JpdGVyLnBvc2l0aW9u
ID09IHdyaXRlci5sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItdXRpbHMuanMKaW5kZXggOWFjODQ0MGIxY2Fj
Nzg5YTU1YTIxMjNlMGU1Zjc3NzRjYTlmODEwOS4uZTI2Y2VhYmQ1YjcxZTQ3MTgwNDc4NzQ5MDM3
MWQ5NjM5YTkwY2I2NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci11dGlscy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzCkBAIC0xMzQsOSArMTM0LDcgQEAg
ZnVuY3Rpb24gY3JlYXRlRW1wdHlGaWxlKGZpbGVTeXN0ZW0sIGZpbGVOYW1lLCBvblN1Y2Nlc3Mp
CiAKIGZ1bmN0aW9uIHdyaXRlU3RyaW5nKGZpbGVFbnRyeSwgZmlsZVdyaXRlciwgb2Zmc2V0LCBk
YXRhLCBvblN1Y2Nlc3MpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7
Ci0gICAgYmIuYXBwZW5kKGRhdGEpOwotICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigpOworICAg
IHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdKTsKICAgICBmaWxlV3JpdGVyLnNlZWsob2Zmc2V0
KTsKICAgICBmaWxlV3JpdGVyLndyaXRlKGJsb2IpOwogICAgIGZpbGVXcml0ZXIub25lcnJvciA9
IG9uRXJyb3I7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVhcGkvY3Jl
YXRlLWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
ZmlsZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCmluZGV4IDA0YzliZTAx
OTE0N2RhNDYyM2NlODI5MWM1M2I2MGYwZDgzOGE1ODcuLjM4MDg1MWM0NzcyODI4NTc5NjJlZmZl
ZWU0NmRlZWEyNmVmMTllYzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmls
ZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZmlsZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sCkBA
IC0yOCw2ICsyOCw2IEBAIHZhciB0ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKIDxib2R5Pgog
PHA+IFRlc3QgY2FzZSBmb3IgY2hlY2tpbmcgYmxvYiBVUkwgbm90IGFsbG93ZWQgdG8gYmUgY3Jl
YXRlZCBmcm9tIHRoZSBjb2RlIHJ1bm5pbmcgZnJvbSBkYXRhIFVSSTwvcD4KIDxwcmUgaWQ9J2Nv
bnNvbGUnPjwvcHJlPgotPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1sLCUzQ3NjcmlwdCUzRXZh
ciUyMGIlMjAlM0QlMjBuZXclMjBXZWJLaXRCbG9iQnVpbGRlcigpJTNCYi5hcHBlbmQoJTIyRm9v
JTIyKSUzQnZhciUyMGJiJTIwJTNEJTIwYi5nZXRCbG9iKCd0ZXh0JTJGaHRtbCcpJTNCdG9wLmxv
Y2F0aW9uJTNEJ2h0dHAlM0ElMkYlMkYxMjcuMC4wLjElM0E4MDAwJTJGZmlsZWFwaSUyRmNyZWF0
ZS1ibG9iLXVybC1mcm9tLWRhdGEtdXJsLmh0bWwlMjMnJTIwJTJCJTIwd2luZG93LndlYmtpdFVS
TC5jcmVhdGVPYmplY3RVUkwoYmIpJTNCJTNDJTJGc2NyaXB0JTNFIj48L2lmcmFtZT4KKzxpZnJh
bWUgc3JjPSJkYXRhOnRleHQvaHRtbCwlM0NzY3JpcHQlM0V2YXIlMjBiYiUyMCUzRCUyMG5ldyUy
MEJsb2IlMjglNUIlMjJGb28lMjIlNUQlMkMlMjAlN0J0eXBlJTNBJTIydGV4dCUyRmh0bWwlMjIl
N0QlMjklM0J0b3AubG9jYXRpb24lM0QlMjdodHRwJTNBJTJGJTJGMTI3LjAuMC4xJTNBODAwMCUy
RmZpbGVhcGklMkZjcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sJTIzJTI3JTIwJTJC
JTIwd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwlMjhiYiUyOSUzQiUzQyUyRnNjcmlw
dCUzRSI+PC9pZnJhbWU+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbCBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5o
dG1sCmluZGV4IGVjMTZhNTQ0ZjNhMWRmYTFkNGJhYmU1ZjFjMDIyMmM3NjYzYmFiMTguLmFkNGFk
ZDYzZGQwYjI5OGU2MjJiZWQ0MzllODUxM2RlZWY1MGU3ODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVt
LXVybC5odG1sCkBAIC0yNCw5ICsyNCw3IEBACiAgICAgICB3cml0ZXIub253cml0ZWVuZCA9IGZ1
bmN0aW9uKCkgewogICAgICAgICBjYWxsYmFjayhyYW5kKTsKICAgICAgIH07Ci0gICAgICB2YXIg
YmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICAgIGJiLmFwcGVuZCgnZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCA9IChleHBlY3RlZCA9PSAnICsgcmFu
ZCArICcpID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiOycpOwotICAgICAgd3JpdGVyLndyaXRlKGJi
LmdldEJsb2IoJ3RleHQvcGxhaW4nKSk7CisgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoWydk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gKGV4cGVjdGVkID09
ICcgKyByYW5kICsgJykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSI7J10sIHt0eXBlOid0ZXh0L3Bs
YWluJ30pKTsKICAgICB9CiAKICAgICBnZXRGaWxlV3JpdGVyKGZ1bmN0aW9uKGZpbGUsIHdyaXRl
cikgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291
cmNlcy9oeWJyaWQtYmxvYi11dGlsLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9i
bG9iL3Jlc291cmNlcy9oeWJyaWQtYmxvYi11dGlsLmpzCmluZGV4IDA2MTU5OTY1ZmM0M2M4NDAw
MmFjOWM4NzA5NzlhZjQyMjU0MGYxZWUuLjZkM2U5ODZjZTgyZjQ4ZmZhMjk3MTRhYjNiYWU1MjE4
NWM5NTYyY2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvYmxvYi9y
ZXNvdXJjZXMvaHlicmlkLWJsb2ItdXRpbC5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvY2FsL2Jsb2IvcmVzb3VyY2VzL2h5YnJpZC1ibG9iLXV0aWwuanMKQEAgLTEzMSwxNiArMTMx
LDE5IEBAIHZhciBIeWJyaWRCbG9iVGVzdFV0aWwgPSBmdW5jdGlvbih0ZXN0RnVuYywgb3B0X2Zp
bGVQYXRocykgewogCiAgICAgdGhpcy5hcHBlbmRBbmRDcmVhdGVCbG9iID0gZnVuY3Rpb24oaXRl
bXMsIG9wdF9lbmRpbmcsIG9wdF90eXBlKQogICAgIHsKLSAgICAgICAgdmFyIGJiID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7CisgICAgICAgIHZhciBidWlsZGVyID0gW107CiAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGlmIChp
dGVtc1tpXSBpbnN0YW5jZW9mIEFycmF5KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBh
biBhcnJheSwgY29tYmluZSBpdHMgZWxlbWVudHMgYW5kIGFwcGVuZCBhcyBhIGJsb2IuCi0gICAg
ICAgICAgICAgICAgYmIuYXBwZW5kKHRoaXMuYXBwZW5kQW5kQ3JlYXRlQmxvYihpdGVtc1tpXSwg
b3B0X2VuZGluZywgb3B0X3R5cGUpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbXNbaV0u
dHlwZSA9PSAiZGF0YSIgJiYgb3B0X2VuZGluZykKLSAgICAgICAgICAgICAgICBiYi5hcHBlbmQo
aXRlbXNbaV0udmFsdWUsIG9wdF9lbmRpbmcpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGJiLmFwcGVuZChpdGVtc1tpXS52YWx1ZSk7CisgICAgICAgICAgICAgICAgYnVpbGRl
ci5wdXNoKHRoaXMuYXBwZW5kQW5kQ3JlYXRlQmxvYihpdGVtc1tpXSwgb3B0X2VuZGluZywgb3B0
X3R5cGUpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJ1aWxkZXIucHVz
aChpdGVtc1tpXS52YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJiLmdldEJsb2Io
b3B0X3R5cGUpOworICAgICAgICB2YXIgb3B0aW9ucyA9IHt9OworICAgICAgICBpZiAob3B0X2Vu
ZGluZykKKyAgICAgICAgICAgIG9wdGlvbnMuZW5kaW5ncyA9IG9wdF9lbmRpbmc7CisgICAgICAg
IGlmIChvcHRfdHlwZSkKKyAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9IG9wdF90eXBlOworICAg
ICAgICByZXR1cm4gbmV3IEJsb2IoYnVpbGRlciwgb3B0aW9ucyk7CiAgICAgfTsKIH07CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUt
ZmlsZXN5c3RlbS1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jl
c291cmNlcy9jcmVhdGUtZmlsZXN5c3RlbS1maWxlLmh0bWwKaW5kZXggMWUzYWUyMWJhZjMwMzNl
ZGI2OTJhZWIxZjNlMmQwODJhYTEyYTZmYy4uY2VkYmIwZGNiZjAwZTgzZDljYjgxMjJlOTRjZjgy
ZWY0ZTA1NzMyNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9y
ZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbApA
QCAtNSwxMiArNSwxMCBAQAogICAgICAgICAgICAgd2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0oVEVN
UE9SQVJZLCAxMDAsIGZ1bmN0aW9uKGZzKSB7CiAgICAgICAgICAgICAgICAgZnMucm9vdC5nZXRG
aWxlKCJwYWdlLmh0bWwiLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihlbnRyeSkgewogICAgICAg
ICAgICAgICAgICAgICBlbnRyeS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24od3JpdGVyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJiLmFwcGVuZCgnPGRpdiBpZD0iaW5uZXJEaXYiPlZpc2li
bGUgQ29udGVudHM8L2Rpdj5cbicpOwogICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm9u
d3JpdGUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZyhlbnRyeS50b1VSTCgpICsgIiBjcmVhdGVkLiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZShiYi5nZXRCbG9iKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKG5ldyBCbG9iKFsnPGRpdiBp
ZD0iaW5uZXJEaXYiPlZpc2libGUgQ29udGVudHM8L2Rpdj5cbiddKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQt
b2JqZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhp
ZTc2L3NlbmQtb2JqZWN0Lmh0bWwKaW5kZXggNjY1NDYyNWE5ZGIzZTIyNDc5MWU0YmFmN2IxMDli
MzM3M2MyMzVlMS4uZjY0YWQ3YWIyM2QzZjQxM2YxMWZmNmY2MGM2MGVkY2UyZjAyODljZiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9z
ZW5kLW9iamVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbApAQCAtMTUsOCArMTUsNyBAQCBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQogCiBmdW5jdGlvbiBjcmVhdGVFbXB0eUJsb2IoKQogewot
ICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgcmV0dXJuIGJ1
aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihbXSk7CiB9CiAKIHZhciB3cyA9
IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2hpeGll
NzYvZWNobyIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS1pbi1idXN5Lmh0bWwgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFm
dGVyLWNsb3NlLWluLWJ1c3kuaHRtbAppbmRleCBhYzE3ZTAxNGNlYTBlM2YzYWI0NDE5OTc4ZTFh
ZTNlZGRkY2NlMjQ1Li4zOTk1MDc5M2NiMmM0NjExMzk1YmUyZDdjYWVkMjRlMzdkMjY0NzVmIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1
ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLWluLWJ1c3kuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3Nl
LWluLWJ1c3kuaHRtbApAQCAtMjMsOSArMjMsNyBAQCBmdW5jdGlvbiBjcmVhdGVTdHJpbmdXaXRo
TGVuZ3RoKGxlbmd0aCkKIAogZnVuY3Rpb24gY3JlYXRlQmxvYldpdGhMZW5ndGgobGVuZ3RoKQog
ewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRl
ci5hcHBlbmQobmV3IEFycmF5QnVmZmVyKGxlbmd0aCkpOwotICAgIHJldHVybiBidWlsZGVyLmdl
dEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcihsZW5ndGgpXSk7
CiB9CiAKIHZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29j
a2V0L3Rlc3RzL2h5YmkvZWNobyIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3Vu
dC1hZnRlci1jbG9zZS5odG1sCmluZGV4IDI3ZjIzODBjM2RiMTZjZTcwOTc3ZTE0ZWEwMWM4NGE3
ODczZDliOTEuLjRiM2QxMGY1MWY3NGIzYzc2M2NjNmZmM2M3NTBmMGY4ODg1ZjA0NGMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVy
ZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwKQEAgLTIz
LDkgKzIzLDcgQEAgZnVuY3Rpb24gY3JlYXRlU3RyaW5nV2l0aExlbmd0aChsZW5ndGgpCiAKIGZ1
bmN0aW9uIGNyZWF0ZUJsb2JXaXRoTGVuZ3RoKGxlbmd0aCkKIHsKLSAgICB2YXIgYnVpbGRlciA9
IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG5ldyBBcnJheUJ1
ZmZlcihsZW5ndGgpKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJu
IG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKV0pOwogfQogCiB2YXIgd3MgPSBuZXcg
V2ViU29ja2V0KCJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NpbXBs
ZSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS9zZW5kLWJsb2IuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwKaW5kZXggMmI4MGZhMmUwYjhkMzA2ZDIzZDQ4ODA3OWU1
ZjBmYzhmY2MxZmU2MC4uNjZiNDQ5MTU4NWZiZWUzYzBjYzhmMDEwNjhiZjIxMWM1NTZiZTJhYyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWJsb2IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL3NlbmQtYmxvYi5odG1sCkBAIC0yMCwxNSArMjAsMTIgQEAgZnVuY3Rpb24gc3RhcnRz
V2l0aCh0YXJnZXQsIHByZWZpeCkKIAogZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxs
b1dvcmxkKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwot
ICAgIGJ1aWxkZXIuYXBwZW5kKCJIZWxsbywgd29ybGQhIik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIu
Z2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihbIkhlbGxvLCB3b3JsZCEiXSk7CiB9CiAK
IGZ1bmN0aW9uIGNyZWF0ZUVtcHR5QmxvYigpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2Vi
S2l0QmxvYkJ1aWxkZXIoKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0
dXJuIG5ldyBCbG9iKFtdKTsKIH0KIAogZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxE
aXN0aW5jdEJ5dGVzKCkKQEAgLTM2LDkgKzMzLDcgQEAgZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRh
aW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkKICAgICB2YXIgYXJyYXkgPSBuZXcgVWludDhBcnJheSgy
NTYpOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpCiAgICAgICAgIGFycmF5W2ld
ID0gaTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1
aWxkZXIuYXBwZW5kKGFycmF5LmJ1ZmZlcik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigp
OworICAgIHJldHVybiBuZXcgQmxvYihbYXJyYXkuYnVmZmVyXSk7CiB9CiAKIHZhciB1cmwgPSAi
d3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9jaGVjay1iaW5hcnktbWVz
c2FnZXMiOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAppbmRleCA2ZGE5
ODNiNmIxNGYzZDg4NGM0MzNjNGUxZDhmOTJiNjBjMWEzYmU0Li4wMWI1NDU1ZWQ4ZWQ2YzIxMzkx
Y2UwODhmMGY2NTg3N2ZiODY3NjlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZh
aWwuaHRtbApAQCAtNTksOSArNTksNyBAQCBmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVyKHdyaXRl
cikKICAgICB9OwogICAgIHdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKQogICAgIHsKLSAgICAg
ICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQobWVzc2FnZVRvV3JpdGUpOwotICAgICAgICB3cml0ZXIud3JpdGUoYnVpbGRlci5n
ZXRCbG9iKCkpOworICAgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoW21lc3NhZ2VUb1dyaXRl
XSkpOwogICAgICAgICB3cml0ZXIub253cml0ZSA9IGRpZFdyaXRlRmlsZTsKICAgICB9OwogfQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWZpbGUtYmxvYi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCmluZGV4IDJhMzQxYmNjMTk1MzVkOTE2MTVjZjQw
NGM0ZTllNTc0MWZmOWMyODYuLjJkM2NkZTg3ZThlNzI1OWE4YWViZWViZDUzYTJmMzA4Y2M1N2U1
ZmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvc2VuZC1maWxlLWJsb2IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwKQEAgLTU5LDkgKzU5LDcgQEAgZnVu
Y3Rpb24gZGlkR2V0RmlsZVdyaXRlcih3cml0ZXIpCiAgICAgfTsKICAgICB3cml0ZXIub253cml0
ZSA9IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJs
b2JCdWlsZGVyKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1lc3NhZ2VUb1dyaXRlKTsKLSAg
ICAgICAgd3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICAgICAgd3JpdGVyLndy
aXRlKG5ldyBCbG9iKFttZXNzYWdlVG9Xcml0ZV0pKTsKICAgICAgICAgd3JpdGVyLm9ud3JpdGUg
PSBkaWRXcml0ZUZpbGU7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpz
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jl
c291cmNlcy9zZW5kLWJsb2IuanMKaW5kZXggYzAxMjBlYjk4YWVhMWNlZThhMzk5OWJlZTQxNjNh
NTQzMTI0MTA2Ni4uMGRiNWNiYWJhMWVjNDZiNDU2MDVkZmM2NzQ1MGNjY2I3MDkzZDIwZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3Jr
ZXJzL3Jlc291cmNlcy9zZW5kLWJsb2IuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2IuanMKQEAgLTEs
MTQgKzEsMTEgQEAKIGZ1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nSGVsbG9Xb3JsZCgpCiB7
Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVy
LmFwcGVuZCgiSGVsbG8sIHdvcmxkISIpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsK
KyAgICByZXR1cm4gbmV3IEJsb2IoWyJIZWxsbywgd29ybGQhIl0pOwogfQogCiBmdW5jdGlvbiBj
cmVhdGVFbXB0eUJsb2IoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWls
ZGVyKCk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxv
YihbXSk7CiB9CiAKIGZ1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRl
cygpCkBAIC0xNiw5ICsxMyw3IEBAIGZ1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlz
dGluY3RCeXRlcygpCiAgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKQogICAgICAgICBhcnJheVtpXSA9IGk7Ci0gICAg
dmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVu
ZChhcnJheS5idWZmZXIpOwotICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1
cm4gbmV3IEJsb2IoW2FycmF5LmJ1ZmZlcl0pOwogfQogCiB2YXIgdXJsID0gIndzOi8vMTI3LjAu
MC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvY2hlY2stYmlu
YXJ5LW1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50
eHQKaW5kZXggNzk4ZGRmNDk1NWM1NDU5MzkwNjMxZTUyZTdiMmFkNTI1ZjY5NTY3Ni4uYjkwZGQ1
ZWNjMDU0ODZkMmE3YTkyZGExYzZjNTQ2NDA0NmU3OWI1YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKQEAgLTE4MCw2ICsxODAsNyBAQCB3aW5kb3cuQmVm
b3JlTG9hZEV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdCBbZnVuY3Rpb25dCiB3aW5kb3cu
QmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gW2Z1bmN0
aW9uXQogd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uIFtm
dW5jdGlvbl0KIHdpbmRvdy5CbG9iIFtvYmplY3QgQmxvYkNvbnN0cnVjdG9yXQord2luZG93LkJs
b2IubGVuZ3RoIFtudW1iZXJdCiB3aW5kb3cuQmxvYi5wcm90b3R5cGUgW29iamVjdCBCbG9iUHJv
dG90eXBlXQogd2luZG93LkJvb2xlYW4gW2Z1bmN0aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbiBb
b2JqZWN0IENEQVRBU2VjdGlvbkNvbnN0cnVjdG9yXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvbm9ibG9icy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvbm9ibG9icy5odG1sCmluZGV4IDRlYzk2YTRlMjBjNjk4NjY1ZjQzNzdkYzA2NzU5NDQz
OGMzNDVlMzkuLmE0ZDczZDJhODA0NmU1ZGY2NDFjMjE5YWE0NTVjZjY0OTkxNDE4ZGQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL25vYmxvYnMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWwKQEAgLTU4LDEzICs1OCw5
IEBAIGZ1bmN0aW9uIHRlc3RCbG9iKCkKICAgICBkZWJ1ZygiIik7CiAgICAgZGVidWcoInRlc3RC
bG9iKCk6Iik7CiAKLSAgICBldmFsQW5kTG9nKCJCbG9iQnVpbGRlciA9IHdpbmRvdy5CbG9iQnVp
bGRlciB8fCB3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXIiKTsKLSAgICBzaG91bGRCZVRydWUoIkJs
b2JCdWlsZGVyICE9IG51bGwiKTsKICAgICBzaG91bGRCZVRydWUoIkZpbGVSZWFkZXIgIT0gbnVs
bCIpOwotICAgIGV2YWxBbmRMb2coImJ1aWxkZXIgPSBuZXcgQmxvYkJ1aWxkZXIoKSIpOwogICAg
IGV2YWxBbmRMb2coInRlc3RfY29udGVudCA9ICdUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyBvbmx5
IGEgdGVzdC4nIik7Ci0gICAgZXZhbEFuZExvZygiYnVpbGRlci5hcHBlbmQodGVzdF9jb250ZW50
KSIpOwotICAgIGV2YWxBbmRMb2coImJsb2IgPSBidWlsZGVyLmdldEJsb2IoKSIpOworICAgIGV2
YWxBbmRMb2coImJsb2IgPSBuZXcgQmxvYihbdGVzdF9jb250ZW50XSkiKTsKICAgICB2YWxpZGF0
ZUV4Y2VwdGlvbnMoImJsb2IiLCB0ZXN0RmlsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUuaHRtbCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUuaHRtbAppbmRleCBmZGE4ZDJiYzhl
OGJiYTc5OGFlMGYwODI2MmUzYjczMzAyOWM2MWIxLi5kMjhhYjdjYzliMjg5NWUxZDMzMTYxMmZk
YjFjNThjMGE3MDZjZDBhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvc3RydWN0dXJlZC1jbG9uZS5odG1sCkBAIC0zNzYsMTMgKzM3Niw5IEBAIGZ1bmN0aW9uIHRl
c3RCbG9iKGNhbGxiYWNrKQogICAgIGNhbGxiYWNrKCk7CiAgICAgcmV0dXJuOwogCi0gICAgZXZh
bEFuZExvZygiQmxvYkJ1aWxkZXIgPSBzZWxmLkJsb2JCdWlsZGVyIHx8IHNlbGYuV2ViS2l0Qmxv
YkJ1aWxkZXIiKTsKLSAgICBzaG91bGRCZVRydWUoIkJsb2JCdWlsZGVyICE9IG51bGwiKTsKICAg
ICBzaG91bGRCZVRydWUoIkZpbGVSZWFkZXIgIT0gbnVsbCIpOwotICAgIGV2YWxBbmRMb2coImJ1
aWxkZXIgPSBuZXcgQmxvYkJ1aWxkZXIoKSIpOwogICAgIGV2YWxBbmRMb2coInRlc3RfY29udGVu
dCA9ICdUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyBvbmx5IGEgdGVzdC4nIik7Ci0gICAgZXZhbEFu
ZExvZygiYnVpbGRlci5hcHBlbmQodGVzdF9jb250ZW50KSIpOwotICAgIGV2YWxBbmRMb2coInRl
c3RfZGF0YSA9IGJ1aWxkZXIuZ2V0QmxvYigpIik7CisgICAgZXZhbEFuZExvZygidGVzdF9kYXRh
ID0gbmV3IEJsb2IoW3Rlc3RfY29udGVudF0pIik7CiAgICAgdGVzdFZhbHVlKHRlc3RfZGF0YSwg
ZnVuY3Rpb24ocmVzdWx0KSB7CiAgICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0OwogICAgICAg
ICBzaG91bGRCZVRydWUoInRlc3RfZGF0YSAhPT0gcmVzdWx0Iik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139226</attachid>
            <date>2012-04-27 10:43:44 -0700</date>
            <delta_ts>2012-04-27 14:58:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84555-20120427104424.patch</filename>
            <type>text/plain</type>
            <size>52857</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU4NTVhYWMzYmFjNjAy
N2FjMzdiMzEyYzQxN2IwOTJjZjg0MzgzMy4uZWFiMWIzZmM3Njg4YWFiMDcyMGFmYTdhYzNjNTcy
MjJlMGJmNDlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA0LTI2ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBC
bG9iIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDU1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rvci5odG1sCisKKyAgICAgICAg
VGhpcyBhZGRzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBCbG9iIGNvbnN0cnVjdG9yIHRoYXQg
d2lsbGZ1bGx5CisgICAgICAgIHZpb2xhdGVzIHRoZSBXM0MgRWRpdG9y4oCZcyBEcmFmdCAyOSBG
ZWJydWFyeSAyMDEyIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBFbGVtZW50cyBp
biB0aGUgcGFydHMgYXJyYXkgYXJlIGNvZXJjZWQgdG8gRE9NU3RyaW5ncyBodHRwczovL3d3dy53
My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzIxIAorICAgICAgICAtIERvbid0
IHRocm93IGZvciBpbnZhbGlkIGtleSBpbiB0aGUgZGljdGlvbmFyeSBodHRwczovL3d3dy53My5v
cmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzI3CisgICAgICAgIC0gVmFsdWVzIGZv
ciB0aGUgZW5kaW5ncyBwcm9wZXJ0eSBhcmUgdHJlYXRlZCBhcyBlbnVtcyBodHRwczovL3d3dy53
My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzI5IAorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQmxvYkNvbnN0
cnVjdG9yOjpjb25zdHJ1Y3RKU0Jsb2IpOgorICAgICAgICBJbXBsZW1lbnQgYmxvYiBjb25zdHJ1
Y3Rvci4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhCbG9iOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAg
SW1wbGVtZW50IGJsb2IgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuaWRs
OgorICAgICAgICBBZGQgY29uc3RydWN0b3IgdG8gSURMLgorCisgICAgICAgICogd29ya2Vycy9X
b3JrZXJDb250ZXh0LmlkbDoKKyAgICAgICAgQWRkIEJsb2IgY29uc3RydWN0b3IgdG8gdGhlIHdv
cmtlciBnbG9iYWwgb2JqZWN0LgorCiAyMDEyLTA0LTI2ICBKZWZmcmV5IFBmYXUgIDxqcGZhdUBh
cHBsZS5jb20+CiAKICAgICAgICAgSW52YWxpZCBjYXN0IGluIFdlYkNvcmU6OkhUTUxDb2xsZWN0
aW9uOjppc0FjY2VwdGFibGVFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAppbmRleCAwNDk0NTYwNDM4YzMzMjI2ZDEwNzljOWIwOGNlM2YyZWJhZThl
MDM1Li4zNzE1Zjc0MGI5OGU0YThmOTQ0Mjk3MTQxNzQ1OTE0MjljMDJjNjFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKQEAgLTMyLDggKzMyLDE1IEBA
CiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAKICNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRCbG9iQnVpbGRlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwpAQCAtNTEsNCArNTgsODIgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmxvYiogYmxvYikKICAgICBy
ZXR1cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgQmxvYiwgYmxvYik7
CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCbG9iQ29uc3RydWN0b3I6OmNv
bnN0cnVjdEpTQmxvYihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNCbG9iQ29uc3RydWN0b3Iq
IGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNCbG9iQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUo
KSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3It
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIkJsb2Ig
Y29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsKKworICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CisgICAgICAgIFJlZlB0cjxCbG9iPiBibG9i
ID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRF
X0RPTV9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBCbG9iLCBi
bG9iLmdldCgpKSk7CisgICAgfQorCisgICAgSlNWYWx1ZSBmaXJzdEFyZyA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOworICAgIGlmICghaXNKU0FycmF5KGZpcnN0QXJnKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IG9m
IHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBBcnJheSIpKTsKKworICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheShmaXJzdEFyZyk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXkt
Pmxlbmd0aCgpOworCisgICAgU3RyaW5nIHR5cGU7CisgICAgU3RyaW5nIGVuZGluZ3MgPSAidHJh
bnNwYXJlbnQiOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsKKyAgICAg
ICAgSlNWYWx1ZSBibG9iUHJvcGVydHlCYWdWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworCisg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgaWYgdGhlIGJsb2JQcm9wZXJ0eUJhZyBp
cyBub3QgYW4gb2JqZWN0PworCisgICAgICAgIGlmICghYmxvYlByb3BlcnR5QmFnVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3Qs
IHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgorICAgICAgICAgICAgSlNPYmplY3Qq
IGJsb2JQcm9wZXJ0eUJhZ09iamVjdCA9IGJsb2JQcm9wZXJ0eUJhZ1ZhbHVlLnRvT2JqZWN0KGV4
ZWMpOworCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9t
IHRoZSBpbml0aWFsaXplciBvYmplY3QuCisgICAgICAgICAgICBKU0RpY3Rpb25hcnkgZGljdGlv
bmFyeShleGVjLCBibG9iUHJvcGVydHlCYWdPYmplY3QpOworCisgICAgICAgICAgICAvLyBBdHRl
bXB0IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIGRpY3Rpb25hcnkuZ2V0
KCJ0eXBlIiwgdHlwZSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwor
ICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIGVuZGluZ3MgcHJvcGVydHkgYW5kIHZh
bGlkYXRlIGl0LgorICAgICAgICAgICAgYm9vbCBjb250YWluc0VuZGluZ3MgPSBkaWN0aW9uYXJ5
LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisKKyAgICAgICAgICAgIGlmIChjb250YWluc0VuZGluZ3MpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZW5kaW5ncyAhPSAidHJhbnNwYXJlbnQiICYmIGVuZGluZ3MgIT0gIm5hdGl2ZSIp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOVkFMSURfU1RB
VEVfRVJSKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBBU1NFUlQoZW5kaW5ncyA9PSAidHJhbnNwYXJlbnQiIHx8IGVuZGluZ3Mg
PT0gIm5hdGl2ZSIpOworCisgICAgLy8gRklYTUU6IHRoaXMgd291bGQgYmUgYmV0dGVyIGlmIHRo
ZSBXZWJLaXRCbG9iQnVpbGRlciB3ZXJlIGEgc3RhY2sgb2JqZWN0IHRvIGF2b2lkIHRoZSBhbGxv
Y2F0aW9uLgorICAgIFJlZlB0cjxXZWJLaXRCbG9iQnVpbGRlcj4gYmxvYkJ1aWxkZXIgPSBXZWJL
aXRCbG9iQnVpbGRlcjo6Y3JlYXRlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleChpKTsK
KyNpZiBFTkFCTEUoQkxPQikKKyAgICAgICAgaWYgKGl0ZW0uaW5oZXJpdHMoJkpTQXJyYXlCdWZm
ZXI6OnNfaW5mbykpCisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5kKHRvQXJyYXlCdWZm
ZXIoaXRlbSkpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgaWYgKGl0ZW0uaW5oZXJp
dHMoJkpTQmxvYjo6c19pbmZvKSkKKyAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQodG9C
bG9iKGl0ZW0pKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0g
dXN0cmluZ1RvU3RyaW5nKGl0ZW0udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBw
ZW5kKHN0cmluZywgZW5kaW5ncywgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGJsb2JCdWlsZGVyLT5nZXRCbG9iKHR5cGUp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGpz
Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBCbG9iLCBibG9iLmdldCgpKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKaW5kZXggYzRjNDdlZDI5MmIzZjM3ODdlMTYwNmQxYjBk
OTJmOWQwZWE5ZTZiZS4uNjc0NDFjZTc4YjAzZDk3ODA5NDljZDg1MzZkNmY3M2ZlYzg5ZmNjZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3Rv
bS5jcHAKQEAgLTQ5LDQgKzQ5LDcxIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEJsb2Iq
IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogICAgIHJldHVybiBWOEJsb2I6OndyYXAoaW1w
bCwgaXNvbGF0ZSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEJsb2I6OmNvbnN0cnVj
dG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5CbG9iLkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNh
bm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisg
ICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3Jh
cEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKworICAgIC8v
IEdldCB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQmxvYiBjb25zdHJ1Y3RvcidzIGFz
c29jaWF0ZWQgZnJhbWUgaXMgbm90IGF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9y
KTsKKworICAgIGlmICghYXJncy5MZW5ndGgoKSkKKyAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2Ig
PSBCbG9iOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoYmxvYi5nZXQoKSk7CisgICAg
fQorCisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZmlyc3RBcmcgPSBhcmdzWzBdOworICAgIGlm
ICghZmlyc3RBcmctPklzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkZpcnN0
IGFyZ3VtZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBBcnJheSIsIFY4UHJv
eHk6OlR5cGVFcnJvcik7CisKKyAgICBFWENFUFRJT05fQkxPQ0sodjg6OkxvY2FsPHY4OjpBcnJh
eT4sIGJsb2JQYXJ0cywgdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoZmlyc3RBcmcpKTsKKwor
ICAgIFN0cmluZyB0eXBlOworICAgIFN0cmluZyBlbmRpbmdzID0gInRyYW5zcGFyZW50IjsKKwor
ICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CisgICAg
ICAgIERpY3Rpb25hcnkgZGljdGlvbmFyeShhcmdzWzFdKTsKKyAgICAgICAgZGljdGlvbmFyeS5n
ZXQoInR5cGUiLCB0eXBlKTsKKyAgICAgICAgaWYgKGRpY3Rpb25hcnkuZ2V0KCJlbmRpbmdzIiwg
ZW5kaW5ncykpIHsKKyAgICAgICAgICAgIGlmIChlbmRpbmdzICE9ICJ0cmFuc3BhcmVudCIgJiYg
ZW5kaW5ncyAhPSAibmF0aXZlIikgeworICAgICAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4
Y2VwdGlvbihJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VS
VChlbmRpbmdzID09ICJ0cmFuc3BhcmVudCIgfHwgZW5kaW5ncyA9PSAibmF0aXZlIik7CisKKyAg
ICBSZWZQdHI8V2ViS2l0QmxvYkJ1aWxkZXI+IGJsb2JCdWlsZGVyID0gV2ViS2l0QmxvYkJ1aWxk
ZXI6OmNyZWF0ZSgpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBibG9iUGFydHMtPkxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaXRlbSA9IGJsb2JQ
YXJ0cy0+R2V0KHY4OjpVaW50MzI6Ok5ldyhpKSk7CisgICAgICAgIEFTU0VSVCghaXRlbS5Jc0Vt
cHR5KCkpOworI2lmIEVOQUJMRShCTE9CKQorICAgICAgICBpZiAoVjhBcnJheUJ1ZmZlcjo6SGFz
SW5zdGFuY2UoaXRlbSkpIHsKKyAgICAgICAgICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9
IFY4QXJyYXlCdWZmZXI6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoaXRl
bSkpOworICAgICAgICAgICAgQVNTRVJUKGFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgIGJsb2JC
dWlsZGVyLT5hcHBlbmQoYXJyYXlCdWZmZXIpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAg
ICAgICBpZiAoVjhCbG9iOjpIYXNJbnN0YW5jZShpdGVtKSkgeworICAgICAgICAgICAgQmxvYiog
YmxvYiA9IFY4QmxvYjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChpdGVt
KSk7CisgICAgICAgICAgICBBU1NFUlQoYmxvYik7CisgICAgICAgICAgICBibG9iQnVpbGRlci0+
YXBwZW5kKGJsb2IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhDRVBUSU9OX0JM
T0NLKFN0cmluZywgc3RyaW5nVmFsdWUsIHRvV2ViQ29yZVN0cmluZyhpdGVtLT5Ub1N0cmluZygp
KSk7CisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5kKHN0cmluZ1ZhbHVlLCBlbmRpbmdz
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0cjxC
bG9iPiBibG9iID0gYmxvYkJ1aWxkZXItPmdldEJsb2IodHlwZSk7CisgICAgcmV0dXJuIHRvVjgo
YmxvYi5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Js
b2IuY3BwCmluZGV4IDNiMzNjZDY2ZGU4ZGJhNzkxZDZmZDVjOTM0NTFkM2MwZGY3ZWVkMmQuLjE5
N2EyNjE4ZmRhMzE4YjA2M2VjM2JiMjcxYzY0ZmI1ZDczNDViZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9C
bG9iLmNwcApAQCAtMzcsNiArMzcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitCbG9i
OjpCbG9iKCkKKyAgICA6IG1fc2l6ZSgwKQoreworICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRh
dGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJuYWwg
VVJMIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBwcm92aWRlZCBibG9iIGRhdGEuCisgICAgbV9p
bnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7CisgICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIGJsb2JEYXRhLnJl
bGVhc2UoKSk7Cit9CisKIEJsb2I6OkJsb2IoUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEs
IGxvbmcgbG9uZyBzaXplKQogICAgIDogbV90eXBlKGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKQog
ICAgICwgbV9zaXplKHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Js
b2IuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCmluZGV4IGJjYTkzOTgyMzZkODZl
YjRhOGQ0MzQ4NjEyNzgwMzJlYzUwMmJkYzYuLmY1ZjE4NTJmOGQ1Mjc0YmM0YzcwYWFkMTc5MTk5
ZGU2NDgyZjI3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCkBAIC00Myw2ICs0MywxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7
CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYik7CisgICAgfQorCiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYj4gY3JlYXRlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25n
IGxvbmcgc2l6ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihibG9i
RGF0YSwgc2l6ZSkpOwpAQCAtNjcsNiArNzIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVj
dGVkOgorICAgIEJsb2IoKTsKICAgICBCbG9iKFBhc3NPd25QdHI8QmxvYkRhdGE+LCBsb25nIGxv
bmcgc2l6ZSk7CiAKICAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxv
Yi5pZGwKaW5kZXggMjljNTE0MWQyNmM0M2IwMDE0YTU4YzRjOGIwN2YxZDUzMmU2Y2VhMy4uNmI3
ZTU5ZDIyZjk3NGU3M2RlMDcxNmI0YzM4NzRiYjM4YzYwM2NhMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Js
b2IuaWRsCkBAIC0zMyw3ICszMyw5IEBAIG1vZHVsZSBodG1sIHsKICAgICBpbnRlcmZhY2UgWwog
ICAgICAgICBKU0dlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKICAgICAgICAgQ3VzdG9tVG9KU09i
amVjdCwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcworICAgICAgICBKU05vU3RhdGljVGFibGVz
LAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RvciwKKyAgICAgICAgQ29uc3RydWN0b3JQYXJhbWV0
ZXJzPTIKICAgICBdIEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBsb25nIHNpemU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlw
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCmluZGV4IGJlOWU2YzAw
MGI4YjQ3NjEzZGFjNzhhM2RmMGQ4ZDE3MDUzMDlmNmUuLjU1YjNhNDA0MjRhN2ExYTBiNWZmMzM4
NmVhNGEyYzIyYjc2ODg2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmlkbApAQCAtODQsNiArODQsNyBAQCBtb2R1bGUgdGhyZWFkcyB7CiAKICNpZiBkZWZpbmVkKEVO
QUJMRV9CTE9CKSAmJiBFTkFCTEVfQkxPQgogICAgICAgICBhdHRyaWJ1dGUgV2ViS2l0QmxvYkJ1
aWxkZXJDb25zdHJ1Y3RvciBXZWJLaXRCbG9iQnVpbGRlcjsKKyAgICAgICAgYXR0cmlidXRlIEJs
b2JDb25zdHJ1Y3RvciBCbG9iOwogICAgICAgICBhdHRyaWJ1dGUgRmlsZVJlYWRlckNvbnN0cnVj
dG9yIEZpbGVSZWFkZXI7CiAgICAgICAgIGF0dHJpYnV0ZSBGaWxlUmVhZGVyU3luY0NvbnN0cnVj
dG9yIEZpbGVSZWFkZXJTeW5jOwogI2VuZGlmCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTA1YjBkYTQ3ODY3MjdhODEyNjI1
MjZmZTY4YmIxZjg1MjRhM2MwOC4uNTE1ODYxMDI3YWRjMzAwNWVhMjA3N2RlZDg2ODE2MjZjYzVh
ZGY0YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA0LTI2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBCbG9iIGNvbnN0cnVj
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU1
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRj
aCB0ZXN0cyB0aGF0IHdlcmUgbm90IGRpcmVjdGx5IHRlc3RpbmcgQmxvYkJ1aWxkZXIgb3ZlciB0
bworICAgICAgICB1c2luZyB0aGUgQmxvYiBjb25zdHJ1Y3RvciwgdG8gZ2V0IHRlc3QgY292ZXJh
Z2Ugb2Ygc3RhbmRhcmQgd2F5CisgICAgICAgIGNvbnN0cnVjdGluZyBibG9icy4KKworICAgICAg
ICAqIGZhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rvci5odG1sOgorICAgICAgICAqIGZhc3QvZmls
ZXMvYmxvYi1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9z
Y3JpcHQtdGVzdHMvYmxvYi1jb25zdHJ1Y3Rvci5qczoKKyAgICAgICAgTmV3IHRlc3QuCisKKyAg
ICAgICAgKiBmYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQtdW5zZXQu
aHRtbDoKKyAgICAgICAgKiBmYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxv
YWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9k
b3dubG9hZC1zZXQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9h
bmNob3Itbm9kb3dubG9hZC5odG1sOgorICAgICAgICAqIGZhc3QvZG9tL3dpbmRvdy1kb211cmwt
Y3Jhc2guaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2ItYnVpbGRlci1jcmFzaC1leHBl
Y3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jh
c2guaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZs
b3cuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2Itc2xpY2UtdGVzdC5odG1sOgorICAg
ICAgICAqIGZhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmZmZC5odG1sOgorICAgICAgICAqIGZhc3Qv
ZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3Jl
c291cmNlcy9yZWFkLWJsb2ItdGVzdC1jYXNlcy5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3Jl
c291cmNlcy9yZWFkLWNvbW1vbi5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3dvcmtlcnMvaW5s
aW5lLXdvcmtlci12aWEtYmxvYi11cmwuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0v
cmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmpzOgorICAgICAgICAqIGZhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanM6CisgICAgICAg
ICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qczoKKyAgICAg
ICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qczoKKyAg
ICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanM6
CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRy
dW5jYXRlLWV4dGVuZC5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2Zp
bGUtd3JpdGVyLXN5bmMtd3JpdGUtb3ZlcmxhcHBlZC5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzOgorICAgICAgICAqIGh0dHAvdGVz
dHMvZmlsZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRhLXVybC5odG1sOgorICAgICAgICAq
IGh0dHAvdGVzdHMvZmlsZXN5c3RlbS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sOgorICAg
ICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvYmxvYi9yZXNvdXJjZXMvaHlicmlkLWJsb2ItdXRpbC5q
czoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5
c3RlbS1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4
aWU3Ni9zZW5kLW9iamVjdC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sOgorICAgICAg
ICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXIt
Y2xvc2UuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtYmxvYi5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1maWxlLWJsb2ItZmFpbC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qczoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWw6CisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0dXJlZC1jbG9uZS5odG1sOgorCiAyMDEyLTA0
LTI2ICBKZWZmcmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CiAKICAgICAgICAgSW52YWxpZCBj
YXN0IGluIFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppc0FjY2VwdGFibGVFbGVtZW50CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93
bmxvYWQtdW5zZXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50
L2FuY2hvci1kb3dubG9hZC11bnNldC5odG1sCmluZGV4IDYzMjFiOWM1MDU4OGY5OGFhOTE3YTMx
OGI1ODZhYzU1OGMyZDNkNjguLjQzYTJjZGYxMzI2YWFjODc5MjhiZmU0OTM2NjAyMzk1YTNiMGJk
N2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2Fu
Y2hvci1kb3dubG9hZC11bnNldC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxB
bmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC11bnNldC5odG1sCkBAIC0yNCw5ICsyNCw4IEBA
IGZ1bmN0aW9uIGNsaWNrKGVsbXQpCiAKIGZ1bmN0aW9uIHJ1blRlc3QoKQogewotICAgIHZhciBi
YiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgiPCFkb2N0eXBlIGh0
bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8i
ICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3Nj
ciIgKyAiaXB0PjwvaHRtbD4iKTsKLSAgICB2YXIgYmxvYiA9IGJiLmdldEJsb2IoInRleHQvaHRt
bCIsICJpbmxpbmUiKTsKKyAgICB2YXIgc3RyaW5nID0gIjwhZG9jdHlwZSBodG1sPjxodG1sPjxo
ZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+
PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48
L2h0bWw+Iik7ICAgIAorICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAi
dGV4dC9odG1sIn0pOwogICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJs
b2ItdXJsIik7CiAgICAgbGluay5ocmVmID0gd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RV
UkwoYmxvYik7CiAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2Rvd25sb2FkJyk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxv
YWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1k
b3dubG9hZC5odG1sCmluZGV4IGM4Mzc3ZjkyOThhMTk5OWE0YWVjMGI2NWM1MWRkMTljNzVmNTgy
YTIuLjkwNjEwMTQ2NDMyZTcxN2Y1OGFkNzI0OTg1ODYyN2FhNzUxOWExYjAgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1k
b3dubG9hZC5odG1sCkBAIC0yNCw5ICsyNCw4IEBAIGZ1bmN0aW9uIGNsaWNrKGVsbXQpCiAKIGZ1
bmN0aW9uIHJ1blRlc3QoKQogewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigp
OwotICAgIGJiLmFwcGVuZCgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxl
PC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFT
UzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iKTsKLSAgICB2
YXIgYmxvYiA9IGJiLmdldEJsb2IoInRleHQvaHRtbCIsICJpbmxpbmUiKTsKKyAgICB2YXIgc3Ry
aW5nID0gIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNj
cmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNj
cmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+IjsKKyAgICB2YXIgYmxvYiA9IG5l
dyBCbG9iKFtzdHJpbmddLCB7dHlwZTogInRleHQvaHRtbCJ9KTsKICAgICB2YXIgbGluayA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJibG9iLXVybCIpOwogICAgIGxpbmsuaHJlZiA9IHdpbmRv
dy53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgIGNsaWNrKGxpbmspOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5v
ZG93bmxvYWQtc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVu
dC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAppbmRleCBkMGI0MmFmMGI1YWI3MGE0ODNhMGE2
YzdkNzIyOWY3N2Q3MTlhYmU1Li41NDUyYTJjZGEyZjRhYTgyZWI2YWQwMjdkNGNjMWMwOTU4NTgw
OWUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9h
bmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1M
QW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbApAQCAtMjQsOSArMjQsOCBA
QCBmdW5jdGlvbiBjbGljayhlbG10KQogCiBmdW5jdGlvbiBydW5UZXN0KCkKIHsKLSAgICB2YXIg
YmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoIjwhZG9jdHlwZSBo
dG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwv
IiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9z
Y3IiICsgImlwdD48L2h0bWw+Iik7Ci0gICAgdmFyIGJsb2IgPSBiYi5nZXRCbG9iKCJ0ZXh0L2h0
bWwiLCAiaW5saW5lIik7CisgICAgdmFyIHN0cmluZyA9ICI8IWRvY3R5cGUgaHRtbD48aHRtbD48
aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0
PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+
PC9odG1sPiI7CisgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbc3RyaW5nXSwge3R5cGU6ICJ0ZXh0
L2h0bWwifSk7CiAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmxvYi11
cmwiKTsKICAgICBsaW5rLmhyZWYgPSB3aW5kb3cud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChi
bG9iKTsKICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3du
bG9hZC5odG1sCmluZGV4IGY5MWVkYzFmY2Q4MjM2YjgyNDk0MDY5ZWQwMzMxMjczYzAwNjQ2MDMu
LmRjZDEwMDk5M2FjMTA4MDMwNTJkMTc4ZmUxNTdmMGNiMjgwN2Q3MTkgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5v
ZG93bmxvYWQuaHRtbApAQCAtMjQsOSArMjQsOCBAQCBmdW5jdGlvbiBjbGljayhlbG10KQogCiBm
dW5jdGlvbiBydW5UZXN0KCkKIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIo
KTsKLSAgICBiYi5hcHBlbmQoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRs
ZTwvdGl0bGU+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBB
U1M8L2JvZHk+PHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7Ci0gICAg
dmFyIGJsb2IgPSBiYi5nZXRCbG9iKCJ0ZXh0L2h0bWwiLCAiaW5saW5lIik7CisgICAgdmFyIHN0
cmluZyA9ICI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxz
Y3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5Pjxz
Y3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiI7CisgICAgdmFyIGJsb2IgPSBu
ZXcgQmxvYihbc3RyaW5nXSwge3R5cGU6ICJ0ZXh0L2h0bWwifSk7CiAgICAgdmFyIGxpbmsgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmxvYi11cmwiKTsKICAgICBsaW5rLmhyZWYgPSB3aW5k
b3cud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICBjbGljayhsaW5rKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3dpbmRvdy1kb211cmwtY3Jhc2guaHRtbAppbmRleCA3ZDVj
MDRjMzljYjhiZWI4OWE4YmY1ZDAwY2Q0MmFlMjM0NWYwOWFhLi4zYjhmZDc1NTM3MTYyNGY1OTA1
ZWI3YTBjNDA1YTY4OTcxOTczOGIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS93
aW5kb3ctZG9tdXJsLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vd2luZG93
LWRvbXVybC1jcmFzaC5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+DQogPGhlYWQ+DQogPHNj
cmlwdD4NCi12YXIgYmxvYiA9IChuZXcgV2ViS2l0QmxvYkJ1aWxkZXIpLmdldEJsb2IoKTsNCit2
YXIgYmxvYiA9IG5ldyBCbG9iKFtdKTsNCiB2YXIgdXJsID0gbnVsbDsNCiB2YXIgY291bnQgPSAw
Ow0KIA0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rv
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3It
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmNDQzOTIyMzkyNzE3YTllOGE2ZGUzNzQ3N2Q5NWQ4
OTgwNzE0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2It
Y29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzcgQEAKK1Rlc3QgdGhlIEJsb2Ig
Y29uc3RydWN0b3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIChuZXcg
QmxvYigpKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgKG5ldyBCbG9iKFtd
KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCitQQVNTIChuZXcgQmxvYihbJ2hlbGxv
J10pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgKG5ldyBCbG9iKFsnaGVs
bG8nXSwge30pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgKG5ldyBCbG9i
KFsnaGVsbG8nXSwge3R5cGU6J3RleHQvaHRtbCd9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBp
cyB0cnVlCitQQVNTIChuZXcgQmxvYihbJ2hlbGxvJ10sIHt0eXBlOid0ZXh0L2h0bWwnLCBlbmRp
bmdzOiduYXRpdmUnfSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3
IEJsb2IoWydoZWxsbyddLCB7dHlwZTondGV4dC9odG1sJywgZW5kaW5nczondHJhbnNwYXJlbnQn
fSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyBuZXcgQmxvYignaGVsbG8n
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBvZiB0aGUgY29uc3Ry
dWN0b3IgaXMgbm90IG9mIHR5cGUgQXJyYXkuCitQQVNTIG5ldyBCbG9iKDApIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qg
b2YgdHlwZSBBcnJheS4KK1BBU1MgKG5ldyBCbG9iKFtdKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxv
YiBpcyB0cnVlCitQQVNTIChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDgpXSkpIGluc3RhbmNl
b2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoWydzdHJpbmdQcmltaXRpdmUn
XSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoW1N0cmlu
Zygnc3RyaW5nT2JqZWN0JyldKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCitQQVNT
IChuZXcgQmxvYihbbmV3IEJsb2JdKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCitQ
QVNTIChuZXcgQmxvYihbbmV3IEJsb2IoW25ldyBCbG9iXSldKSkgaW5zdGFuY2VvZiB3aW5kb3cu
QmxvYiBpcyB0cnVlCitQQVNTIChuZXcgQmxvYihbMTJdKSkuc2l6ZSBpcyAyCitQQVNTIChuZXcg
QmxvYihbW11dKSkuc2l6ZSBpcyAwCitQQVNTIChuZXcgQmxvYihbe31dKSkuc2l6ZSBpcyAxNQor
UEFTUyAobmV3IEJsb2IoW2RvY3VtZW50XSkpLnNpemUgaXMgMjEKK1BBU1MgKG5ldyBCbG9iKFt0
b1N0cmluZ2luZ09ial0pKS5zaXplIGlzIDgKK1BBU1MgbmV3IEJsb2IoW3Rocm93aW5nT2JqXSkg
dGhyZXcgZXhjZXB0aW9uIGVycm9yLgorUEFTUyAobmV3IEJsb2IoW10sIHt1bmtub3duS2V5Oid2
YWx1ZSd9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCitQQVNTIG5ldyBCbG9iKFtd
LCB7ZW5kaW5nczonaWxsZWdhbFZhbHVlJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJ
RF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIG5ldyBCbG9iKFtdLCB7ZW5kaW5n
czp0aHJvd2luZ09ian0pIHRocmV3IGV4Y2VwdGlvbiBlcnJvci4KK1BBU1MgbmV3IEJsb2IoW10s
IHt0eXBlOnRocm93aW5nT2JqfSkgdGhyZXcgZXhjZXB0aW9uIGVycm9yLgorUEFTUyAobmV3IEJs
b2IoW10sIHt0eXBlOid0ZXh0L2h0bWwnfSkpLnR5cGUgaXMgJ3RleHQvaHRtbCcKK1BBU1MgKG5l
dyBCbG9iKFtdLCB7dHlwZTondGV4dC9odG1sJ30pKS5zaXplIGlzIDAKK1BBU1Mgd2luZG93LkJs
b2IubGVuZ3RoIGlzIDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItY29uc3Ry
dWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rvci5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjMyZWIwZWY3NGY5YTg0ZjYzMGVmMTIzMDRiNjE2Y2QxODM1NTZmNTgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3Iu
aHRtbApAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvYmxvYi1jb25zdHJ1Y3Rvci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3Zl
cmZsb3cuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5o
dG1sCmluZGV4IGVjOGZhOGNkODc5MGFlYWQzNjllNDZhMGM5NmFjYWFiZmMwOTcwMGEuLmEzZWU3
YzRjM2UzMjY2NWFhNmNlNzhlZjlkODcwN2E4YTFmOWUxMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sCkBAIC01LDE5ICs1LDIyIEBAIGEg
dHJ1bmNhdGVkIHNsaWNlIGJlaW5nIHJldHVybmVkLgogPHByZSBpZD0nY29uc29sZSc+PC9wcmU+
CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCkKIH0KLXZhciBidWlsZGVyID0gIG5l
dyBXZWJLaXRCbG9iQnVpbGRlcigpOworCiB2YXIgdGV4dCA9ICcnOwotZm9yICh2YXIgaSA9IDA7
IGkgPCAyMDAwOyArK2kpIHRleHQgKz0gJ0EnOwotYnVpbGRlci5hcHBlbmQodGV4dCk7Ci1ibG9i
ID0gYnVpbGRlci5nZXRCbG9iKCk7Citmb3IgKHZhciBpID0gMDsgaSA8IDIwMDA7ICsraSkKKyAg
ICB0ZXh0ICs9ICdBJzsKKworYmxvYiA9IG5ldyBCbG9iKFt0ZXh0XSk7CiBzbGljZWRCbG9iID0g
YmxvYi53ZWJraXRTbGljZSgxOTk5LCA5MjIzMzcyMDM2ODU0Nzc1MDAwKTsKKwogZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgnQmxvYiBzbGljZSBsZW5ndGg6ICcgKyBzbGljZWRCbG9iLnNpemUpKTsKIGlmIChzbGlj
ZWRCbG9iLnNpemUgIT0gMSkgewotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScp
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdGQUlMJykpOworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoJ0ZBSUwnKSk7CiB9CisKIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogfQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLXRlc3QuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvYmxvYi1zbGljZS10ZXN0Lmh0bWwKaW5kZXggNTYwNDhkYTA2MmE1MWE0M2Nm
YzY2ZTcxNDljOWJjOTExZjkxMWU4ZC4uMGM4Y2QxNjYwNzk1OGFkOTEwOGI1MjE4YjcwODA1YjBl
MWQwMjY1OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLXRl
c3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2UtdGVzdC5odG1s
CkBAIC04Miw5ICs4Miw3IEBAIGZ1bmN0aW9uIHJ1bk5leHRUZXN0KCkKIAogZnVuY3Rpb24gcnVu
VGVzdHMoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0g
ICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3ODkiKTsKLSAgICBibG9iID0gYnVpbGRlci5nZXRC
bG9iKCk7CisgICAgYmxvYiA9IG5ldyBCbG9iKFsiMDEyMzQ1Njc4OSJdKTsKIAogICAgIHJ1bk5l
eHRUZXN0KCk7CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVh
ZGVyLWZmZmQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmZmZC5o
dG1sCmluZGV4IDBiNGZmMWFiMTkxZmY5OGVjZjIwNDRkYmYzN2I0NTZiZDYyNDMwNWQuLmVhY2Ey
NGViYTYwMDhkMjI2MWNjNWQ1M2QxZmUxMGEzOWU0MzlkZmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZmZmZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvZmlsZS1yZWFkZXItZmZmZC5odG1sCkBAIC0xMCw5ICsxMCw4IEBACiA8c2NyaXB0
PgogZGVzY3JpcHRpb24oIlRocm93IHZhcmlvdXMgYmFkIGJ5dGVzIGF0IGZpbGUgcmVhZGVyLiIp
OwogCi1iYiA9IGV2YWxBbmRMb2coImJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Iik7CiBh
cnJheSA9IGV2YWxBbmRMb2coImFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoWzY1LCAyNDUsIDI0Niwg
MjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgNjZdKTsiKTsKLWJs
b2IgPSBldmFsQW5kTG9nKCJibG9iID0gYnVpbGRCbG9iKFthcnJheS5idWZmZXJdKTsiKTsKK2Js
b2IgPSBldmFsQW5kTG9nKCJibG9iID0gbmV3IEJsb2IoW2FycmF5LmJ1ZmZlcl0pOyIpOwogcmVh
ZGVyID0gZXZhbEFuZExvZygicmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsiKTsKIHJlYWRlci5v
bmxvYWQgPSBmdW5jdGlvbihldmVudCkgewogICBmaWxlU3RyaW5nID0gZXZlbnQudGFyZ2V0LnJl
c3VsdDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1
bWVudHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMu
aHRtbAppbmRleCAwMTlhOWYxYzVlYTQxYTFhNDZlOTU1MjIzZmQzODUzMDc4MDk1MmQyLi41OTE1
NTNmMWFlNDM5MWFkY2JiYjZiYWI3OWFmY2FiMWYwOGEwOTY1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL25vdC1lbm91Z2gtYXJndW1lbnRzLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy5odG1sCkBAIC0xNSw5ICsxNSw3IEBA
IHNob3VsZFRocm93KCdyZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKCknKTsKIHNob3VsZFRocm93
KCdyZWFkZXIucmVhZEFzVGV4dCgpJyk7CiBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc0RhdGFV
UkwoKScpOwogCi12YXIgYmxvYkJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLQot
c2hvdWxkVGhyb3coJ2Jsb2JCdWlsZGVyLmFwcGVuZCgpJyk7CitzaG91bGRUaHJvdygnbmV3IEJs
b2IoKScpOwogCiB2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2lucHV0JylbMF07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3Vy
Y2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNv
dXJjZXMvcmVhZC1ibG9iLXRlc3QtY2FzZXMuanMKaW5kZXggODE5Y2EwMGJjMGE2MTU4NDdkZDAw
NzE1ZjZlZmFlZTFjZjBjMmJiMy4uZmYwZjQ4MTFlNGQ1ODY3MDQ4ODQ4MDExNTZlODQ1MzM1ZTlj
ZTVkMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1i
bG9iLXRlc3QtY2FzZXMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1ibG9iLXRlc3QtY2FzZXMuanMKQEAgLTE3MCwxMSArMTcwLDExIEBAIGZ1bmN0aW9uIHRl
c3RSZWFkaW5nU2xpY2VkSHlicmlkQmxvYih0ZXN0RmlsZXMpCiBmdW5jdGlvbiB0ZXN0UmVhZGlu
Z1RyaXBsZVNsaWNlZEh5YnJpZEJsb2IodGVzdEZpbGVzKQogewogICAgIGxvZygiVGVzdCByZWFk
aW5nIGEgdHJpcGxlLXNsaWNlZCBoeWJyaWQgYmxvYiIpOwotICAgIHZhciBidWlsZGVyID0gbmV3
IFdlYktpdEJsb2JCdWlsZGVyKCk7CiAgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoWzQ4
LCA0OSwgNTBdKTsKLSAgICB2YXIgYmxvYiA9IGJ1aWxkQmxvYihbJ0ZpcnN0JywgdGVzdEZpbGVz
WydmaWxlMSddLndlYmtpdFNsaWNlKDEsIDExKSwgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10sICdT
ZWNvbmQnLCB0ZXN0RmlsZXNbJ2ZpbGUyJ10sIHRlc3RGaWxlc1snZmlsZTMnXSwgJ1RoaXJkJywg
YXJyYXkuYnVmZmVyXSwgdW5kZWZpbmVkLCBidWlsZGVyKTsKKyAgICB2YXIgaXRlbXMgPSBbJ0Zp
cnN0JywgdGVzdEZpbGVzWydmaWxlMSddLndlYmtpdFNsaWNlKDEsIDExKSwgdGVzdEZpbGVzWydl
bXB0eS1maWxlJ10sICdTZWNvbmQnLCB0ZXN0RmlsZXNbJ2ZpbGUyJ10sIHRlc3RGaWxlc1snZmls
ZTMnXSwgJ1RoaXJkJywgYXJyYXkuYnVmZmVyXTsKKyAgICB2YXIgYmxvYiA9IGJ1aWxkQmxvYihp
dGVtcyk7CiAgICAgdmFyIGJsb2IgPSBibG9iLndlYmtpdFNsaWNlKDcsIDE5KTsKLSAgICB2YXIg
YmxvYjIgPSBidWlsZEJsb2IoWydGb28nLCBibG9iLCAnQmFyJ10sIHVuZGVmaW5lZCwgYnVpbGRl
cik7CisgICAgdmFyIGJsb2IyID0gYnVpbGRCbG9iKGl0ZW1zLmNvbmNhdChbJ0ZvbycsIGJsb2Is
ICdCYXInXSkpOwogICAgIHZhciBibG9iMiA9IGJsb2IyLndlYmtpdFNsaWNlKDEyLCA0Mik7CiAg
ICAgcmVhZEJsb2JBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMsIGJsb2IyKTsKIH0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKaW5kZXggMDcxMjVh
NTlmZjBiMjYxMzk2MzIzNWM5ZTRkMzg1ZDA4NTM5YzIzYS4uYmFjNzk5YzEzMmRjMzU0ZWJkOGZm
NTg2YTJkZDkyOWI3MDg5ZmM1ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9y
ZXNvdXJjZXMvcmVhZC1jb21tb24uanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNv
dXJjZXMvcmVhZC1jb21tb24uanMKQEAgLTEsMTMgKzEsMTEgQEAKIC8vIEJ1aWxkcyBhIGJsb2Ig
ZnJvbSBhIGxpc3Qgb2YgaXRlbXMuCiAvLyBUaGUgJ2NvbnRlbnRUeXBlJyBhcmd1bWVudCBpcyBv
cHRpb25hbC4KIC8vIElmIHRoZSAnYnVpbGRlcicgYXJndW1lbnQgaXMgbm90IHByb3ZpZGVkLCBj
cmVhdGUgYSBuZXcgb25lLgotZnVuY3Rpb24gYnVpbGRCbG9iKGl0ZW1zLCBjb250ZW50VHlwZSwg
YnVpbGRlcikKK2Z1bmN0aW9uIGJ1aWxkQmxvYihpdGVtcywgY29udGVudFR5cGUpCiB7Ci0gICAg
aWYgKGJ1aWxkZXIgPT09IHVuZGVmaW5lZCkKLSAgICAgICAgYnVpbGRlciA9IG5ldyBXZWJLaXRC
bG9iQnVpbGRlcigpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKysp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0ZW1zW2ldKTsKLSAgICByZXR1cm4gYnVpbGRlci5n
ZXRCbG9iKGNvbnRlbnRUeXBlKTsKKyAgICBpZiAoY29udGVudFR5cGUgPT09IHVuZGVmaW5lZCkK
KyAgICAgICAgcmV0dXJuIG5ldyBCbG9iKGl0ZW1zKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoaXRl
bXMsIHt0eXBlOmNvbnRlbnRUeXBlfSk7CiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBlaXRoZXIgYXN5
bmNocm9ub3VzbHkgb3Igc3luY2hyb25vdXNseS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvc2NyaXB0LXRlc3RzL2Jsb2ItY29uc3RydWN0b3IuanMgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3NjcmlwdC10ZXN0cy9ibG9iLWNvbnN0cnVjdG9yLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVm
NjAwNzk4MDRlOWMwZTg4Y2RlMzIwMzIxZTY1NTg2YjMyM2FmMjcKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3NjcmlwdC10ZXN0cy9ibG9iLWNvbnN0cnVjdG9yLmpz
CkBAIC0wLDAgKzEsNDggQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoZSBCbG9iIGNvbnN0cnVjdG9y
LiIpOworCisvLyBUZXN0IHRoZSBkaWZmcmVudCB3YXlzIHlvdSBjYW4gY29uc3RydWN0IGEgQmxv
Yi4KK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKCkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsK
K3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOwor
c2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoWydoZWxsbyddKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxv
YiIpOworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoWydoZWxsbyddLCB7fSkpIGluc3RhbmNlb2Yg
d2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFsnaGVsbG8nXSwge3R5cGU6
J3RleHQvaHRtbCd9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxkQmVUcnVlKCIo
bmV3IEJsb2IoWydoZWxsbyddLCB7dHlwZTondGV4dC9odG1sJywgZW5kaW5nczonbmF0aXZlJ30p
KSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUoIihuZXcgQmxvYihbJ2hl
bGxvJ10sIHt0eXBlOid0ZXh0L2h0bWwnLCBlbmRpbmdzOid0cmFuc3BhcmVudCd9KSkgaW5zdGFu
Y2VvZiB3aW5kb3cuQmxvYiIpOworCisvLyBUZXN0IHNvbWUgZXJyb3IgY2FzZXMKK3Nob3VsZFRo
cm93KCJuZXcgQmxvYignaGVsbG8nKSIpOworc2hvdWxkVGhyb3coIm5ldyBCbG9iKDApIik7CisK
Ky8vIFRlc3QgdmFsaWQgYmxvYiBwYXJ0cy4KK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdKSkg
aW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoW25ldyBB
cnJheUJ1ZmZlcig4KV0pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUo
IihuZXcgQmxvYihbJ3N0cmluZ1ByaW1pdGl2ZSddKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIp
Oworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoW1N0cmluZygnc3RyaW5nT2JqZWN0JyldKSkgaW5z
dGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoW25ldyBCbG9i
XSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtu
ZXcgQmxvYihbbmV3IEJsb2JdKV0pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CisKKy8vIFRl
c3Qgc29tZSBjb252ZXJzaW9ucyB0byBzdHJpbmcgaW4gdGhlIHBhcnRzIGFycmF5Lgorc2hvdWxk
QmUoIihuZXcgQmxvYihbMTJdKSkuc2l6ZSIsICIyIik7CitzaG91bGRCZSgiKG5ldyBCbG9iKFtb
XV0pKS5zaXplIiwgIjAiKTsgICAgICAgICAvLyBbXS50b1N0cmluZygpIGlzIHRoZSBlbXB0eSBz
dHJpbmcKK3Nob3VsZEJlKCIobmV3IEJsb2IoW3t9XSkpLnNpemUiLCAiMTUiKTs7ICAgICAgIC8v
IHt9LnRvU3RyaW5nKCkgaXMgdGhlIHN0cmluZyAiW29iamVjdCBPYmplY3RdIgorc2hvdWxkQmUo
IihuZXcgQmxvYihbZG9jdW1lbnRdKSkuc2l6ZSIsICIyMSIpOyAgLy8gZG9jdW1lbnQudG9TdHJp
bmcoKSBpcyB0aGUgc3RyaW5nICJbb2JqZWN0IEhUTUxEb2N1bWVudF0iIAorCit2YXIgdG9TdHJp
bmdpbmdPYmogPSB7IHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgcmV0dXJuICJBIHN0cmluZyI7IH0g
fTsKK3Nob3VsZEJlKCIobmV3IEJsb2IoW3RvU3RyaW5naW5nT2JqXSkpLnNpemUiLCAiOCIpOwor
Cit2YXIgdGhyb3dpbmdPYmogPSB7IHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgdGhyb3cgImVycm9y
IjsgfSB9Oworc2hvdWxkVGhyb3coIm5ldyBCbG9iKFt0aHJvd2luZ09ial0pIik7CisKKworLy8g
VGVzdCBzb21lIGludmFsaWQgcHJvcGVydHkgYmFncworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2Io
W10sIHt1bmtub3duS2V5Oid2YWx1ZSd9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOyAgICAv
LyBJZ25vcmUgaW52YWxpZCBrZXlzCitzaG91bGRUaHJvdygibmV3IEJsb2IoW10sIHtlbmRpbmdz
OidpbGxlZ2FsVmFsdWUnfSkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGZv
ciBpbnZhbGlkIHZhbHVlIHRvIGVuZGluZ3MKK3Nob3VsZFRocm93KCJuZXcgQmxvYihbXSwge2Vu
ZGluZ3M6dGhyb3dpbmdPYmp9KSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhy
b3dzIGR1cmluZyB0b1N0cmluZworc2hvdWxkVGhyb3coIm5ldyBCbG9iKFtdLCB7dHlwZTp0aHJv
d2luZ09ian0pIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaHJvd3MgZHVy
aW5nIHRvU3RyaW5nCisKKy8vIFRlc3QgdGhhdCB0aGUgdHlwZS9zaXplIGlzIGNvcnJlY3RseSBh
ZGRlZCB0byB0aGUgQmxvYgorc2hvdWxkQmUoIihuZXcgQmxvYihbXSwge3R5cGU6J3RleHQvaHRt
bCd9KSkudHlwZSIsICIndGV4dC9odG1sJyIpOworc2hvdWxkQmUoIihuZXcgQmxvYihbXSwge3R5
cGU6J3RleHQvaHRtbCd9KSkuc2l6ZSIsICIwIik7CisKKy8vIE9kZHMgYW5kIGVuZHMKK3Nob3Vs
ZEJlKCJ3aW5kb3cuQmxvYi5sZW5ndGgiLCAiMiIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13b3JrZXItdmlhLWJsb2ItdXJsLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvaW5saW5lLXdvcmtlci12aWEtYmxvYi11cmwuaHRt
bAppbmRleCAzYmFjY2RhMjc3NDAwM2E3MDM0YjIyMDRmODkwN2YxMTZiZjg1OGVlLi4wNGJkMDhj
ZjYwMmMwZjc0MDA1NWI4OTQwNDIzNWNhYzZiMWQxMmYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzL3dvcmtlcnMvaW5saW5lLXdvcmtlci12aWEtYmxvYi11cmwuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvaW5saW5lLXdvcmtlci12aWEtYmxvYi11
cmwuaHRtbApAQCAtMTAsMTMgKzEwLDEyIEBAIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQogZnVuY3Rp
b24gcnVuVGVzdCgpCiB7CiAgICAgbG9nKCJUZXN0IGlubGluZSB3ZWIgd29ya2VyIHZpYSBibG9i
IFVSTC4iKTsKLSAgICB2YXIgYmxvYkJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsK
LSAgICBibG9iQnVpbGRlci5hcHBlbmQoWworICAgIHZhciBzdHJpbmcgPSBbCiAgICAgICAgICJv
bm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7IiwKICAgICAgICAgIiAgICBwb3N0TWVzc2FnZSgnSGVs
bG8gZnJvbSB3b3JrZXInKTsiLAogICAgICAgICAifTsiCiAgICAgXS5qb2luKCdcbicpKTsKLSAg
ICB2YXIgYmxvYlVSTCA9IHdlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYkJ1aWxkZXIuZ2V0
QmxvYigpKTsKKyAgICB2YXIgYmxvYlVSTCA9IHdlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwobmV3
IEJsb2IoW3N0cmluZ10pKTsKICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iVVJMKTsK
ICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgbG9nKGV2
ZW50LmRhdGEpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQtY29udGludWUuanMKaW5kZXggYjVj
ZWI0YTg3MzFlNzcwNTIyNTBhZDI4MGNjNTRhYTIwNmEwZWViZi4uMTc5MTZkYmI1OGM2OWZiOTYy
ZGQyODE1ZWQwZjgwMWRjZWY4ZmJiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qcworKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRp
bnVlLmpzCkBAIC01MiwxMSArNTIsMTEgQEAgZnVuY3Rpb24gbm9wKCkgewogfQogCiBmdW5jdGlv
biB0ZW5YQmxvYihibG9iKSB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7
CisgICAgdmFyIGJiID0gW107CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0g
ICAgICAgIGJiLmFwcGVuZChibG9iKTsKKyAgICAgICAgYmIucHVzaChibG9iKTsKICAgICB9Ci0g
ICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoYmIpOwogfQogCiAv
LyBUaGVzZSBtZXRob2RzIHNldCB1cCBhIHdyaXRlLCBhYm9ydCBpdCBhcyBzb29uIGFzIGl0IHN0
YXJ0cywgdGhlbiBpbml0aWF0ZQpAQCAtOTEsOSArOTEsNyBAQCBmdW5jdGlvbiBjaGVja0xlbmd0
aEFuZENvbXBsZXRlVGVzdChlKSB7CiAKIGZ1bmN0aW9uIHN0YXJ0V3JpdGUoKSB7CiAgICAgLy8g
TGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRC
bG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgibG9yZW0gaXBzdW0iKTsKLSAgICB2YXIgYmxv
YiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihuZXcg
QmxvYihbImxvcmVtIGlwc3VtIl0pKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAg
YmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXIt
YWJvcnQtZGVwdGguanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2Zp
bGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzCmluZGV4IGVhOGI2MzgzYTdmN2U1OTkyYjM2MzY2MGRj
MjZjOTI2MWI1NjI1ZGMuLjk3YjEyMGFkMGZkMzk0ZjEyYzhhMjcwYzg3ZTU2ZTAxNTA4ZjE4ZGEg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItYWJvcnQtZGVwdGguanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcwpAQCAtMTAsOSArMTAsNyBAQCB2YXIg
c2F3V3JpdGVTdGFydDsKIHZhciBzYXdBYm9ydDsKIHZhciBzYXdXcml0ZUVuZDsKIHZhciB3cml0
ZXI7Ci12YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLWJiLmFwcGVuZCgibG9yZW0g
aXBzdW0iKTsKLXZhciBibG9iID0gYmIuZ2V0QmxvYigpOwordmFyIGJsb2IgPSBuZXcgQmxvYihb
ImxvcmVtIGlwc3VtIl0pOwogdmFyIHJlY3Vyc2lvbkRlcHRoID0gMDsKIHZhciBtZXRob2Q7CiB2
YXIgdGVzdHNSdW4gPSAwOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQuanMKaW5kZXggMmM0MTA3YTk1NzhmNTE2
YzZkZjQ3YjQwYTcwYjVjNGY4NTg1NjFmMS4uNDk5YTdkZjhhMzk1MzQwOTA3ZWIxY2VkMGE5MWM3
N2Y0ZjM3NzhlZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291
cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzCkBAIC0xMiwxMSArMTIsMTEgQEAgdmFy
IHNhd1dyaXRlRW5kOwogdmFyIHdyaXRlcjsKIAogZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgewot
ICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIHZhciBiYiA9IFtdOwog
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAgICBiYi5hcHBlbmQoYmxv
Yik7CisgICAgICAgIGJiLnB1c2goYmxvYik7CiAgICAgfQotICAgIHJldHVybiBiYi5nZXRCbG9i
KCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKGJiKTsKIH0KIAogZnVuY3Rpb24gb25Xcml0ZVN0YXJ0
KGUpIHsKQEAgLTYyLDkgKzYyLDcgQEAgZnVuY3Rpb24gb25Xcml0ZUVuZChlKSB7CiAKIGZ1bmN0
aW9uIHN0YXJ0V3JpdGUoZmlsZVdyaXRlcikgewogICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQg
YSBtZWdhYnl0ZS4KLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBi
Yi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0gICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRC
bG9iKCkpOworICAgIHZhciBibG9iID0gdGVuWEJsb2IobmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJd
KSk7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9i
KTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCmluZGV4
IGM4OGUwZmIyNGZkYzVlZWE1ODhhOGE2ZDU3YzU0MmU3ZmYwZTY5YWIuLmRmOWU2YWJkMGE4ODI5
MDI4NmQxMWY4YTFmZDMxOWE3MGYxMWM4ZjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItZXZlbnRzLmpzCkBAIC0x
NiwxMSArMTYsMTEgQEAgdmFyIGxhc3RQcm9ncmVzcyA9IDA7CiB2YXIgdG9CZVdyaXR0ZW47CiAK
IGZ1bmN0aW9uIHRlblhCbG9iKGJsb2IpIHsKLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1
aWxkZXIoKTsKKyAgICB2YXIgYmIgPSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyAr
K2kpIHsKLSAgICAgICAgYmIuYXBwZW5kKGJsb2IpOworICAgICAgICBiYi5wdXNoKGJsb2IpOwog
ICAgIH0KLSAgICByZXR1cm4gYmIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihiYik7
CiB9CiAKIGZ1bmN0aW9uIG9uV3JpdGVTdGFydChlKSB7CkBAIC03OCw5ICs3OCw3IEBAIGZ1bmN0
aW9uIG9uV3JpdGVFbmQoZSkgewogCiBmdW5jdGlvbiBzdGFydFdyaXRlKGZpbGVXcml0ZXIpIHsK
ICAgICAvLyBMZXQncyBtYWtlIGl0IGFib3V0IGEgbWVnYWJ5dGUuCi0gICAgdmFyIGJiID0gbmV3
IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCJsb3JlbSBpcHN1bSIpOwotICAg
IHZhciBibG9iID0gdGVuWEJsb2IoYmIuZ2V0QmxvYigpKTsKKyAgICB2YXIgYmxvYiA9IHRlblhC
bG9iKG5ldyBCbG9iKFsibG9yZW0gaXBzdW0iXSkpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9i
KTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2Ip
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1nYy1ibG9iLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNl
cy9maWxlLXdyaXRlci1nYy1ibG9iLmpzCmluZGV4IDg0YmJhYmI5MjBkNGUwYzYyMTI5NzQzYWJk
N2FjYWQ4ZmY2MmY3ZmUuLmVhMWY2ZjIyMGEzZWYyYmQ0OTIyM2ViMDdlNjc1NTBiODM1NGMyMTYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItZ2MtYmxvYi5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3Vy
Y2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMKQEAgLTE0LDE4ICsxNCwxNiBAQCBmdW5jdGlvbiBv
blRlc3RTdWNjZXNzKCkgewogfQogCiBmdW5jdGlvbiB0ZW5YQmxvYihibG9iKSB7Ci0gICAgdmFy
IGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgdmFyIGJiID0gW107CiAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Ci0gICAgICAgIGJiLmFwcGVuZChibG9iKTsKKyAg
ICAgICAgYmIucHVzaChibG9iKTsKICAgICB9Ci0gICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKKyAg
ICByZXR1cm4gbmV3IEJsb2IoYmIpOwogfQogCiBmdW5jdGlvbiBzdGFydFdyaXRlKHdyaXRlcikg
ewogICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4KLSAgICB2YXIgYmIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0g
ICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkpOworICAgIHZhciBibG9iID0gdGVu
WEJsb2IobmV3IEJsb2JbImxvcmVtIGlwc3VtIl0pOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9i
KTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2Ip
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVuZC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy10cnVuY2F0ZS1leHRlbmQuanMKaW5kZXgg
M2RmOTkxMzcyM2EzZTliNzlmNzZiY2E0ZmI3ZGEzOGQ5NzZhZmM2Ni4uOGZiYjAxNDdhMDEyNWFh
NWNkYzA0OTZhZGI2Y2UzYWMyMmQ1M2Q5MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVuZC5qcwor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5
bmMtdHJ1bmNhdGUtZXh0ZW5kLmpzCkBAIC0xNSwxMCArMTUsOCBAQCByZW1vdmVBbGxJbkRpcmVj
dG9yeVN5bmMoZmlsZVN5c3RlbS5yb290KTsKIHZhciBlbnRyeSA9IGZpbGVTeXN0ZW0ucm9vdC5n
ZXRGaWxlKCdhJywge2NyZWF0ZTp0cnVlLCBleGNsdXNpdmU6dHJ1ZX0pOwogdmFyIHdyaXRlciA9
IGVudHJ5LmNyZWF0ZVdyaXRlcigpOwogYXNzZXJ0KCF3cml0ZXIucG9zaXRpb24pOwotdmFyIGJ1
aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKIHZhciB0ZXN0RGF0YSA9ICJ0ZXN0IGRh
dGEiOwotYnVpbGRlci5hcHBlbmQodGVzdERhdGEpOwotd3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0
QmxvYigpKTsKK3dyaXRlci53cml0ZShuZXcgQmxvYihbdGVzdERhdGFdKSk7CiBhc3NlcnQod3Jp
dGVyLmxlbmd0aCA9PSB0ZXN0RGF0YS5sZW5ndGgpOwogYXNzZXJ0KHdyaXRlci5wb3NpdGlvbiA9
PSB3cml0ZXIubGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtd3JpdGUt
b3ZlcmxhcHBlZC5qcwppbmRleCA4ZjFlZDlhN2U4NzJhMTMwYjljMmMyYTdlZDEyMTY3ZGVjMzZm
NTJhLi42ZTNkNTdiNDY1NWZlNDQyZDFjNzA1MTliM2I1OWU2MDEwNzEwOTJiIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMt
d3JpdGUtb3ZlcmxhcHBlZC5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtd3JpdGUtb3ZlcmxhcHBlZC5qcwpAQCAtMTUsMTAgKzE1
LDggQEAgcmVtb3ZlQWxsSW5EaXJlY3RvcnlTeW5jKGZpbGVTeXN0ZW0ucm9vdCk7CiB2YXIgZW50
cnkgPSBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSgnYScsIHtjcmVhdGU6dHJ1ZSwgZXhjbHVzaXZl
OnRydWV9KTsKIHZhciB3cml0ZXIgPSBlbnRyeS5jcmVhdGVXcml0ZXIoKTsKIGFzc2VydCghd3Jp
dGVyLnBvc2l0aW9uKTsKLXZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CiB2
YXIgdGVzdERhdGEgPSAidGVzdCBkYXRhIjsKLWJ1aWxkZXIuYXBwZW5kKHRlc3REYXRhKTsKLXZh
ciBibG9iID0gYnVpbGRlci5nZXRCbG9iKCk7Cit2YXIgYmxvYiA9IG5ldyBCbG9iKFt0ZXN0RGF0
YV0pOwogd3JpdGVyLndyaXRlKGJsb2IpOwogYXNzZXJ0KHdyaXRlci5sZW5ndGggPT0gdGVzdERh
dGEubGVuZ3RoKTsKIGFzc2VydCh3cml0ZXIucG9zaXRpb24gPT0gd3JpdGVyLmxlbmd0aCk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLXV0aWxzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci11dGlscy5qcwppbmRleCA5YWM4NDQwYjFjYWM3ODlhNTVhMjEyM2UwZTVmNzc3NGNh
OWY4MTA5Li5lMjZjZWFiZDViNzFlNDcxODA0Nzg3NDkwMzcxZDk2MzlhOTBjYjY1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0
aWxzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13
cml0ZXItdXRpbHMuanMKQEAgLTEzNCw5ICsxMzQsNyBAQCBmdW5jdGlvbiBjcmVhdGVFbXB0eUZp
bGUoZmlsZVN5c3RlbSwgZmlsZU5hbWUsIG9uU3VjY2VzcykKIAogZnVuY3Rpb24gd3JpdGVTdHJp
bmcoZmlsZUVudHJ5LCBmaWxlV3JpdGVyLCBvZmZzZXQsIGRhdGEsIG9uU3VjY2VzcykKIHsKLSAg
ICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBlbmQoZGF0YSk7
Ci0gICAgdmFyIGJsb2IgPSBiYi5nZXRCbG9iKCk7CisgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihb
ZGF0YV0pOwogICAgIGZpbGVXcml0ZXIuc2VlayhvZmZzZXQpOwogICAgIGZpbGVXcml0ZXIud3Jp
dGUoYmxvYik7CiAgICAgZmlsZVdyaXRlci5vbmVycm9yID0gb25FcnJvcjsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRh
LXVybC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlYXBpL2NyZWF0ZS1ibG9iLXVy
bC1mcm9tLWRhdGEtdXJsLmh0bWwKaW5kZXggMDRjOWJlMDE5MTQ3ZGE0NjIzY2U4MjkxYzUzYjYw
ZjBkODM4YTU4Ny4uMzgwODUxYzQ3NzI4Mjg1Nzk2MmVmZmVlZTQ2ZGVlYTI2ZWYxOWVjMiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlYXBpL2NyZWF0ZS1ibG9iLXVybC1m
cm9tLWRhdGEtdXJsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlYXBpL2Ny
ZWF0ZS1ibG9iLXVybC1mcm9tLWRhdGEtdXJsLmh0bWwKQEAgLTI4LDYgKzI4LDYgQEAgdmFyIHQg
PSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogPGJvZHk+CiA8cD4gVGVzdCBjYXNlIGZvciBjaGVj
a2luZyBibG9iIFVSTCBub3QgYWxsb3dlZCB0byBiZSBjcmVhdGVkIGZyb20gdGhlIGNvZGUgcnVu
bmluZyBmcm9tIGRhdGEgVVJJPC9wPgogPHByZSBpZD0nY29uc29sZSc+PC9wcmU+Ci08aWZyYW1l
IHNyYz0iZGF0YTp0ZXh0L2h0bWwsJTNDc2NyaXB0JTNFdmFyJTIwYiUyMCUzRCUyMG5ldyUyMFdl
YktpdEJsb2JCdWlsZGVyKCklM0JiLmFwcGVuZCglMjJGb28lMjIpJTNCdmFyJTIwYmIlMjAlM0Ql
MjBiLmdldEJsb2IoJ3RleHQlMkZodG1sJyklM0J0b3AubG9jYXRpb24lM0QnaHR0cCUzQSUyRiUy
RjEyNy4wLjAuMSUzQTgwMDAlMkZmaWxlYXBpJTJGY3JlYXRlLWJsb2ItdXJsLWZyb20tZGF0YS11
cmwuaHRtbCUyMyclMjAlMkIlMjB3aW5kb3cud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChiYikl
M0IlM0MlMkZzY3JpcHQlM0UiPjwvaWZyYW1lPgorPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1s
LCUzQ3NjcmlwdCUzRXZhciUyMGJiJTIwJTNEJTIwbmV3JTIwQmxvYiUyOCU1QiUyMkZvbyUyMiU1
RCUyQyUyMCU3QnR5cGUlM0ElMjJ0ZXh0JTJGaHRtbCUyMiU3RCUyOSUzQnRvcC5sb2NhdGlvbiUz
RCUyN2h0dHAlM0ElMkYlMkYxMjcuMC4wLjElM0E4MDAwJTJGZmlsZWFwaSUyRmNyZWF0ZS1ibG9i
LXVybC1mcm9tLWRhdGEtdXJsLmh0bWwlMjMlMjclMjAlMkIlMjB3aW5kb3cud2Via2l0VVJMLmNy
ZWF0ZU9iamVjdFVSTCUyOGJiJTI5JTNCJTNDJTJGc2NyaXB0JTNFIj48L2lmcmFtZT4KIDwvYm9k
eT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZXN5c3Rl
bS9uby1jYWNoZS1maWxlc3lzdGVtLXVybC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9m
aWxlc3lzdGVtL25vLWNhY2hlLWZpbGVzeXN0ZW0tdXJsLmh0bWwKaW5kZXggZWMxNmE1NDRmM2Ex
ZGZhMWQ0YmFiZTVmMWMwMjIyYzc2NjNiYWIxOC4uYWQ0YWRkNjNkZDBiMjk4ZTYyMmJlZDQzOWU4
NTEzZGVlZjUwZTc4NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lz
dGVtL25vLWNhY2hlLWZpbGVzeXN0ZW0tdXJsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9maWxlc3lzdGVtL25vLWNhY2hlLWZpbGVzeXN0ZW0tdXJsLmh0bWwKQEAgLTI0LDkgKzI0
LDcgQEAKICAgICAgIHdyaXRlci5vbndyaXRlZW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIGNh
bGxiYWNrKHJhbmQpOwogICAgICAgfTsKLSAgICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVp
bGRlcigpOwotICAgICAgYmIuYXBwZW5kKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0
IikuaW5uZXJIVE1MID0gKGV4cGVjdGVkID09ICcgKyByYW5kICsgJykgPyAiU1VDQ0VTUyIgOiAi
RkFJTFVSRSI7Jyk7Ci0gICAgICB3cml0ZXIud3JpdGUoYmIuZ2V0QmxvYigndGV4dC9wbGFpbicp
KTsKKyAgICAgIHdyaXRlci53cml0ZShuZXcgQmxvYihbJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJyZXN1bHQiKS5pbm5lckhUTUwgPSAoZXhwZWN0ZWQgPT0gJyArIHJhbmQgKyAnKSA/ICJTVUND
RVNTIiA6ICJGQUlMVVJFIjsnXSwge3R5cGU6J3RleHQvcGxhaW4nfSkpOwogICAgIH0KIAogICAg
IGdldEZpbGVXcml0ZXIoZnVuY3Rpb24oZmlsZSwgd3JpdGVyKSB7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Jsb2IvcmVzb3VyY2VzL2h5YnJpZC1ibG9iLXV0aWwu
anMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Jsb2IvcmVzb3VyY2VzL2h5YnJpZC1i
bG9iLXV0aWwuanMKaW5kZXggMDYxNTk5NjVmYzQzYzg0MDAyYWM5Yzg3MDk3OWFmNDIyNTQwZjFl
ZS4uNmQzZTk4NmNlODJmNDhmZmEyOTcxNGFiM2JhZTUyMTg1Yzk1NjJjZSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291cmNlcy9oeWJyaWQtYmxvYi11
dGlsLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvYmxvYi9yZXNvdXJjZXMv
aHlicmlkLWJsb2ItdXRpbC5qcwpAQCAtMTMxLDE2ICsxMzEsMTkgQEAgdmFyIEh5YnJpZEJsb2JU
ZXN0VXRpbCA9IGZ1bmN0aW9uKHRlc3RGdW5jLCBvcHRfZmlsZVBhdGhzKSB7CiAKICAgICB0aGlz
LmFwcGVuZEFuZENyZWF0ZUJsb2IgPSBmdW5jdGlvbihpdGVtcywgb3B0X2VuZGluZywgb3B0X3R5
cGUpCiAgICAgewotICAgICAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVt
cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgaWYgKGl0ZW1zW2ldIGluc3RhbmNlb2YgQXJy
YXkpIHsKICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGFuIGFycmF5LCBjb21iaW5lIGl0cyBl
bGVtZW50cyBhbmQgYXBwZW5kIGFzIGEgYmxvYi4KLSAgICAgICAgICAgICAgICBiYi5hcHBlbmQo
dGhpcy5hcHBlbmRBbmRDcmVhdGVCbG9iKGl0ZW1zW2ldLCBvcHRfZW5kaW5nLCBvcHRfdHlwZSkp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtc1tpXS50eXBlID09ICJkYXRhIiAmJiBvcHRf
ZW5kaW5nKQotICAgICAgICAgICAgICAgIGJiLmFwcGVuZChpdGVtc1tpXS52YWx1ZSwgb3B0X2Vu
ZGluZyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmIuYXBwZW5kKGl0ZW1z
W2ldLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLnB1c2godGhpcy5hcHBlbmRBbmRD
cmVhdGVCbG9iKGl0ZW1zW2ldLCBvcHRfZW5kaW5nLCBvcHRfdHlwZSkpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgYnVpbGRlci5wdXNoKGl0ZW1zW2ldLnZhbHVlKTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gYmIuZ2V0QmxvYihvcHRfdHlwZSk7CisgICAgICAgIHZh
ciBvcHRpb25zID0ge307CisgICAgICAgIGlmIChvcHRfZW5kaW5nKQorICAgICAgICAgICAgb3B0
aW9ucy5lbmRpbmdzID0gb3B0X2VuZGluZzsKKyAgICAgICAgaWYgKG9wdF90eXBlKQorICAgICAg
ICAgICAgb3B0aW9ucy50eXBlID0gb3B0X3R5cGU7CisgICAgICAgIHJldHVybiBuZXcgQmxvYihi
dWlsZGVyLCBvcHRpb25zKTsKICAgICB9OwogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lz
dGVtLWZpbGUuaHRtbAppbmRleCAxZTNhZTIxYmFmMzAzM2VkYjY5MmFlYjFmM2UyZDA4MmFhMTJh
NmZjLi5jZWRiYjBkY2JmMDBlODNkOWNiODEyMmU5NGNmODJlZjRlMDU3MzI3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5
c3RlbS1maWxlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNv
dXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCkBAIC01LDEyICs1LDEwIEBACiAgICAg
ICAgICAgICB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShURU1QT1JBUlksIDEwMCwgZnVuY3Rpb24o
ZnMpIHsKICAgICAgICAgICAgICAgICBmcy5yb290LmdldEZpbGUoInBhZ2UuaHRtbCIsIHtjcmVh
dGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNy
ZWF0ZVdyaXRlcihmdW5jdGlvbih3cml0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YmIuYXBwZW5kKCc8ZGl2IGlkPSJpbm5lckRpdiI+VmlzaWJsZSBDb250ZW50czwvZGl2PlxuJyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIub253cml0ZSA9IGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVudHJ5LnRvVVJMKCkgKyAi
IGNyZWF0ZWQuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLndyaXRlKGJiLmdldEJsb2IoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoWyc8ZGl2IGlkPSJpbm5lckRpdiI+VmlzaWJsZSBD
b250ZW50czwvZGl2PlxuJ10pKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbApp
bmRleCA2NjU0NjI1YTlkYjNlMjI0NzkxZTRiYWY3YjEwOWIzMzczYzIzNWUxLi5mNjRhZDdhYjIz
ZDNmNDEzZjExZmY2ZjYwYzYwZWRjZTJmMDI4OWNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0Lmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9iamVj
dC5odG1sCkBAIC0xNSw4ICsxNSw3IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CiAKIGZ1bmN0aW9uIGNyZWF0ZUVtcHR5QmxvYigpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcg
V2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAg
cmV0dXJuIG5ldyBCbG9iKFtdKTsKIH0KIAogdmFyIHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly8x
MjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9lY2hvIik7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1v
dW50LWFmdGVyLWNsb3NlLWluLWJ1c3kuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1s
CmluZGV4IGFjMTdlMDE0Y2VhMGUzZjNhYjQ0MTk5NzhlMWFlM2VkZGRjY2UyNDUuLjM5OTUwNzkz
Y2IyYzQ2MTEzOTViZTJkN2NhZWQyNGUzN2QyNjQ3NWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xv
c2UtaW4tYnVzeS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sCkBAIC0yMyw5
ICsyMyw3IEBAIGZ1bmN0aW9uIGNyZWF0ZVN0cmluZ1dpdGhMZW5ndGgobGVuZ3RoKQogCiBmdW5j
dGlvbiBjcmVhdGVCbG9iV2l0aExlbmd0aChsZW5ndGgpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZChuZXcgQXJyYXlCdWZm
ZXIobGVuZ3RoKSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBu
ZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKGxlbmd0aCldKTsKIH0KIAogdmFyIHdzID0gbmV3IFdl
YlNvY2tldCgid3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9lY2hvIik7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwKaW5k
ZXggMjdmMjM4MGMzZGIxNmNlNzA5NzdlMTRlYTAxYzg0YTc4NzNkOWI5MS4uNGIzZDEwZjUxZjc0
YjNjNzYzY2M2ZmYzYzc1MGYwZjg4ODVmMDQ0YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVm
ZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbApAQCAtMjMsOSArMjMsNyBAQCBmdW5jdGlvbiBj
cmVhdGVTdHJpbmdXaXRoTGVuZ3RoKGxlbmd0aCkKIAogZnVuY3Rpb24gY3JlYXRlQmxvYldpdGhM
ZW5ndGgobGVuZ3RoKQogewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7Ci0gICAgYnVpbGRlci5hcHBlbmQobmV3IEFycmF5QnVmZmVyKGxlbmd0aCkpOwotICAgIHJl
dHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW25ldyBBcnJheUJ1
ZmZlcihsZW5ndGgpXSk7CiB9CiAKIHZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vbG9jYWxo
b3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2ltcGxlIik7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2IuaHRt
bAppbmRleCAyYjgwZmEyZTBiOGQzMDZkMjNkNDg4MDc5ZTVmMGZjOGZjYzFmZTYwLi42NmI0NDkx
NTg1ZmJlZTNjMGNjOGYwMTA2OGJmMjExYzU1NmJlMmFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwK
QEAgLTIwLDE1ICsyMCwxMiBAQCBmdW5jdGlvbiBzdGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQog
CiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKQogewotICAgIHZhciBi
dWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIkhl
bGxvLCB3b3JsZCEiKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJu
IG5ldyBCbG9iKFsiSGVsbG8sIHdvcmxkISJdKTsKIH0KIAogZnVuY3Rpb24gY3JlYXRlRW1wdHlC
bG9iKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAg
IHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW10pOwogfQog
CiBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQpAQCAtMzYs
OSArMzMsNyBAQCBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMo
KQogICAgIHZhciBhcnJheSA9IG5ldyBVaW50OEFycmF5KDI1Nik7CiAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAyNTY7ICsraSkKICAgICAgICAgYXJyYXlbaV0gPSBpOwotICAgIHZhciBidWlsZGVy
ID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoYXJyYXkuYnVm
ZmVyKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9i
KFthcnJheS5idWZmZXJdKTsKIH0KIAogdmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dl
YnNvY2tldC90ZXN0cy9oeWJpL2NoZWNrLWJpbmFyeS1tZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9i
LWZhaWwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1maWxlLWJsb2ItZmFpbC5odG1sCmluZGV4IDZkYTk4M2I2YjE0ZjNkODg0YzQzM2M0ZTFk
OGY5MmI2MGMxYTNiZTQuLjAxYjU0NTVlZDhlZDZjMjEzOTFjZTA4OGYwZjY1ODc3ZmI4Njc2OWYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1maWxlLWJsb2ItZmFpbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sCkBAIC01OSw5ICs1OSw3
IEBAIGZ1bmN0aW9uIGRpZEdldEZpbGVXcml0ZXIod3JpdGVyKQogICAgIH07CiAgICAgd3JpdGVy
Lm9ud3JpdGUgPSBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBX
ZWJLaXRCbG9iQnVpbGRlcigpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChtZXNzYWdlVG9Xcml0
ZSk7Ci0gICAgICAgIHdyaXRlci53cml0ZShidWlsZGVyLmdldEJsb2IoKSk7CisgICAgICAgIHdy
aXRlci53cml0ZShuZXcgQmxvYihbbWVzc2FnZVRvV3JpdGVdKSk7CiAgICAgICAgIHdyaXRlci5v
bndyaXRlID0gZGlkV3JpdGVGaWxlOwogICAgIH07CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9i
Lmh0bWwKaW5kZXggMmEzNDFiY2MxOTUzNWQ5MTYxNWNmNDA0YzRlOWU1NzQxZmY5YzI4Ni4uMmQz
Y2RlODdlOGU3MjU5YThhZWJlZWJkNTNhMmYzMDhjYzU3ZTVmZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1s
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2IuaHRtbApAQCAtNTksOSArNTksNyBAQCBmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVy
KHdyaXRlcikKICAgICB9OwogICAgIHdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQobWVzc2FnZVRvV3JpdGUpOwotICAgICAgICB3cml0ZXIud3JpdGUoYnVp
bGRlci5nZXRCbG9iKCkpOworICAgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoW21lc3NhZ2VU
b1dyaXRlXSkpOwogICAgICAgICB3cml0ZXIub253cml0ZSA9IGRpZFdyaXRlRmlsZTsKICAgICB9
OwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2IuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qcwpp
bmRleCBjMDEyMGViOThhZWExY2VlOGEzOTk5YmVlNDE2M2E1NDMxMjQxMDY2Li4wZGI1Y2JhYmEx
ZWM0NmI0NTYwNWRmYzY3NDUwY2NjYjcwOTNkMjBkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxv
Yi5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dv
cmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qcwpAQCAtMSwxNCArMSwxMSBAQAogZnVuY3Rpb24g
Y3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxsb1dvcmxkKCkKIHsKLSAgICB2YXIgYnVpbGRlciA9IG5l
dyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJIZWxsbywgd29ybGQh
Iik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihb
IkhlbGxvLCB3b3JsZCEiXSk7CiB9CiAKIGZ1bmN0aW9uIGNyZWF0ZUVtcHR5QmxvYigpCiB7Ci0g
ICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICByZXR1cm4gYnVp
bGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKFtdKTsKIH0KIAogZnVuY3Rpb24g
Y3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkKQEAgLTE2LDkgKzEzLDcgQEAg
ZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkKICAgICB2YXIg
YXJyYXkgPSBuZXcgVWludDhBcnJheSgyNTYpOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2
OyArK2kpCiAgICAgICAgIGFycmF5W2ldID0gaTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJL
aXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGFycmF5LmJ1ZmZlcik7Ci0gICAg
cmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihbYXJyYXkuYnVm
ZmVyXSk7CiB9CiAKIHZhciB1cmwgPSAid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVz
dHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9jaGVjay1iaW5hcnktbWVzc2FnZXMiOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJv
cGVydGllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAppbmRleCA3OThkZGY0OTU1YzU0
NTkzOTA2MzFlNTJlN2IyYWQ1MjVmNjk1Njc2Li5iOTBkZDVlY2MwNTQ4NmQyYTdhOTJkYTFjNmM1
NDY0MDQ2ZTc5YjVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVk
LnR4dApAQCAtMTgwLDYgKzE4MCw3IEBAIHdpbmRvdy5CZWZvcmVMb2FkRXZlbnQucHJvdG90eXBl
LnByZXZlbnREZWZhdWx0IFtmdW5jdGlvbl0KIHdpbmRvdy5CZWZvcmVMb2FkRXZlbnQucHJvdG90
eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBbZnVuY3Rpb25dCiB3aW5kb3cuQmVmb3JlTG9h
ZEV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFnYXRpb24gW2Z1bmN0aW9uXQogd2luZG93LkJsb2Ig
W29iamVjdCBCbG9iQ29uc3RydWN0b3JdCit3aW5kb3cuQmxvYi5sZW5ndGggW251bWJlcl0KIHdp
bmRvdy5CbG9iLnByb3RvdHlwZSBbb2JqZWN0IEJsb2JQcm90b3R5cGVdCiB3aW5kb3cuQm9vbGVh
biBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uIFtvYmplY3QgQ0RBVEFTZWN0aW9uQ29u
c3RydWN0b3JdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9ub2Js
b2JzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWwKaW5k
ZXggNGVjOTZhNGUyMGM2OTg2NjVmNDM3N2RjMDY3NTk0NDM4YzM0NWUzOS4uYTRkNzNkMmE4MDQ2
ZTVkZjY0MWMyMTlhYTQ1NWNmNjQ5OTE0MThkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbm9ibG9icy5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL25vYmxvYnMuaHRtbApAQCAtNTgsMTMgKzU4LDkgQEAgZnVuY3Rpb24gdGVzdEJsb2Io
KQogICAgIGRlYnVnKCIiKTsKICAgICBkZWJ1ZygidGVzdEJsb2IoKToiKTsKIAotICAgIGV2YWxB
bmRMb2coIkJsb2JCdWlsZGVyID0gd2luZG93LkJsb2JCdWlsZGVyIHx8IHdpbmRvdy5XZWJLaXRC
bG9iQnVpbGRlciIpOwotICAgIHNob3VsZEJlVHJ1ZSgiQmxvYkJ1aWxkZXIgIT0gbnVsbCIpOwog
ICAgIHNob3VsZEJlVHJ1ZSgiRmlsZVJlYWRlciAhPSBudWxsIik7Ci0gICAgZXZhbEFuZExvZygi
YnVpbGRlciA9IG5ldyBCbG9iQnVpbGRlcigpIik7CiAgICAgZXZhbEFuZExvZygidGVzdF9jb250
ZW50ID0gJ1RoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIG9ubHkgYSB0ZXN0LiciKTsKLSAgICBldmFs
QW5kTG9nKCJidWlsZGVyLmFwcGVuZCh0ZXN0X2NvbnRlbnQpIik7Ci0gICAgZXZhbEFuZExvZygi
YmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpIik7CisgICAgZXZhbEFuZExvZygiYmxvYiA9IG5ldyBC
bG9iKFt0ZXN0X2NvbnRlbnRdKSIpOwogICAgIHZhbGlkYXRlRXhjZXB0aW9ucygiYmxvYiIsIHRl
c3RGaWxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
c3RydWN0dXJlZC1jbG9uZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc3Ry
dWN0dXJlZC1jbG9uZS5odG1sCmluZGV4IGZkYThkMmJjOGU4YmJhNzk4YWUwZjA4MjYyZTNiNzMz
MDI5YzYxYjEuLmQyOGFiN2NjOWIyODk1ZTFkMzMxNjEyZmRiMWM1OGMwYTcwNmNkMGEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLmh0
bWwKQEAgLTM3NiwxMyArMzc2LDkgQEAgZnVuY3Rpb24gdGVzdEJsb2IoY2FsbGJhY2spCiAgICAg
Y2FsbGJhY2soKTsKICAgICByZXR1cm47CiAKLSAgICBldmFsQW5kTG9nKCJCbG9iQnVpbGRlciA9
IHNlbGYuQmxvYkJ1aWxkZXIgfHwgc2VsZi5XZWJLaXRCbG9iQnVpbGRlciIpOwotICAgIHNob3Vs
ZEJlVHJ1ZSgiQmxvYkJ1aWxkZXIgIT0gbnVsbCIpOwogICAgIHNob3VsZEJlVHJ1ZSgiRmlsZVJl
YWRlciAhPSBudWxsIik7Ci0gICAgZXZhbEFuZExvZygiYnVpbGRlciA9IG5ldyBCbG9iQnVpbGRl
cigpIik7CiAgICAgZXZhbEFuZExvZygidGVzdF9jb250ZW50ID0gJ1RoaXMgaXMgYSB0ZXN0LiBU
aGlzIGlzIG9ubHkgYSB0ZXN0LiciKTsKLSAgICBldmFsQW5kTG9nKCJidWlsZGVyLmFwcGVuZCh0
ZXN0X2NvbnRlbnQpIik7Ci0gICAgZXZhbEFuZExvZygidGVzdF9kYXRhID0gYnVpbGRlci5nZXRC
bG9iKCkiKTsKKyAgICBldmFsQW5kTG9nKCJ0ZXN0X2RhdGEgPSBuZXcgQmxvYihbdGVzdF9jb250
ZW50XSkiKTsKICAgICB0ZXN0VmFsdWUodGVzdF9kYXRhLCBmdW5jdGlvbihyZXN1bHQpIHsKICAg
ICAgICAgc2VsZi5yZXN1bHQgPSByZXN1bHQ7CiAgICAgICAgIHNob3VsZEJlVHJ1ZSgidGVzdF9k
YXRhICE9PSByZXN1bHQiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139283</attachid>
            <date>2012-04-27 14:58:14 -0700</date>
            <delta_ts>2012-04-28 17:21:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84555-20120427145821.patch</filename>
            <type>text/plain</type>
            <size>50768</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTQ5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA0LTI3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBCbG9i
IGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NDU1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rvci5odG1sCisKKyAgICAgICAgVGhp
cyBhZGRzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBCbG9iIGNvbnN0cnVjdG9yIHRoYXQgd2ls
bGZ1bGx5CisgICAgICAgIHZpb2xhdGVzIHRoZSBXM0MgRWRpdG9y4oCZcyBEcmFmdCAyOSBGZWJy
dWFyeSAyMDEyIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgLSBFbGVtZW50cyBpbiB0
aGUgcGFydHMgYXJyYXkgYXJlIGNvZXJjZWQgdG8gRE9NU3RyaW5ncyBodHRwczovL3d3dy53My5v
cmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzIxIAorICAgICAgICAtIERvbid0IHRo
cm93IGZvciBpbnZhbGlkIGtleSBpbiB0aGUgZGljdGlvbmFyeSBodHRwczovL3d3dy53My5vcmcv
QnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzI3CisgICAgICAgIC0gVmFsdWVzIGZvciB0
aGUgZW5kaW5ncyBwcm9wZXJ0eSBhcmUgdHJlYXRlZCBhcyBlbnVtcyBodHRwczovL3d3dy53My5v
cmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE2NzI5IAorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQmxvYkNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0Jsb2IpOgorICAgICAgICBJbXBsZW1lbnQgYmxvYiBjb25zdHJ1Y3Rv
ci4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhCbG9iOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgSW1w
bGVtZW50IGJsb2IgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuaWRsOgor
ICAgICAgICBBZGQgY29uc3RydWN0b3IgdG8gSURMLgorCisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmlkbDoKKyAgICAgICAgQWRkIEJsb2IgY29uc3RydWN0b3IgdG8gdGhlIHdvcmtl
ciBnbG9iYWwgb2JqZWN0LgorCiAyMDEyLTA0LTI2ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFBhc3MgSXNvbGF0ZSB0byBnZXRET01YWFhNYXAo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCShy
ZXZpc2lvbiAxMTU0OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxNSBAQAogI2luY2x1ZGUgIkpTQmxv
Yi5oIgogCiAjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5
LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0QmxvYkJ1aWxkZXIuaCIK
KyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAg
LTUxLDQgKzU4LDgzIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEK
ICAgICByZXR1cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgQmxvYiwg
YmxvYik7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCbG9iQ29uc3RydWN0
b3I6OmNvbnN0cnVjdEpTQmxvYihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNCbG9iQ29uc3Ry
dWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNCbG9iQ29uc3RydWN0b3IqPihleGVjLT5j
YWxsZWUoKSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3Ry
dWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywg
IkJsb2IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsK
KworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CisgICAgICAgIFJlZlB0cjxCbG9i
PiBibG9iID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Q1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBC
bG9iLCBibG9iLmdldCgpKSk7CisgICAgfQorCisgICAgSlNWYWx1ZSBmaXJzdEFyZyA9IGV4ZWMt
PmFyZ3VtZW50KDApOworICAgIGlmICghaXNKU0FycmF5KGZpcnN0QXJnKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3Vt
ZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBBcnJheSIpKTsKKworICAgIFN0
cmluZyB0eXBlOworICAgIFN0cmluZyBlbmRpbmdzID0gInRyYW5zcGFyZW50IjsKKworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CisgICAgICAgIEpTVmFsdWUgYmxvYlByb3Bl
cnR5QmFnVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKworICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIHRocm93IGlmIHRoZSBibG9iUHJvcGVydHlCYWcgaXMgbm90IGFuIG9iamVjdD8KKwor
ICAgICAgICBpZiAoYmxvYlByb3BlcnR5QmFnVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg
ICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2Jq
ZWN0LgorICAgICAgICAgICAgSlNPYmplY3QqIGJsb2JQcm9wZXJ0eUJhZ09iamVjdCA9IGJsb2JQ
cm9wZXJ0eUJhZ1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOworCisgICAgICAgICAgICAvLyBDcmVhdGUg
dGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCisgICAg
ICAgICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeShleGVjLCBibG9iUHJvcGVydHlCYWdPYmpl
Y3QpOworCisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4K
KyAgICAgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJ0eXBlIiwgdHlwZSk7CisgICAgICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQg
dGhlIGVuZGluZ3MgcHJvcGVydHkgYW5kIHZhbGlkYXRlIGl0LgorICAgICAgICAgICAgYm9vbCBj
b250YWluc0VuZGluZ3MgPSBkaWN0aW9uYXJ5LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpOworICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICAgICAgICAgIGlmIChjb250
YWluc0VuZGluZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5kaW5ncyAhPSAidHJhbnNwYXJl
bnQiICYmIGVuZGluZ3MgIT0gIm5hdGl2ZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoZW5kaW5ncyA9
PSAidHJhbnNwYXJlbnQiIHx8IGVuZGluZ3MgPT0gIm5hdGl2ZSIpOworCisgICAgLy8gRklYTUU6
IHRoaXMgd291bGQgYmUgYmV0dGVyIGlmIHRoZSBXZWJLaXRCbG9iQnVpbGRlciB3ZXJlIGEgc3Rh
Y2sgb2JqZWN0IHRvIGF2b2lkIHRoZSBhbGxvY2F0aW9uLgorICAgIFJlZlB0cjxXZWJLaXRCbG9i
QnVpbGRlcj4gYmxvYkJ1aWxkZXIgPSBXZWJLaXRCbG9iQnVpbGRlcjo6Y3JlYXRlKCk7CisKKyAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkoZmlyc3RBcmcpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXgoaSk7Cisj
aWYgRU5BQkxFKEJMT0IpCisgICAgICAgIGlmIChpdGVtLmluaGVyaXRzKCZKU0FycmF5QnVmZmVy
OjpzX2luZm8pKQorICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZCh0b0FycmF5QnVmZmVy
KGl0ZW0pKTsKKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChpdGVtLmluaGVyaXRz
KCZKU0Jsb2I6OnNfaW5mbykpCisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5kKHRvQmxv
YihpdGVtKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHVz
dHJpbmdUb1N0cmluZyhpdGVtLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5h
cHBlbmQoc3RyaW5nLCBlbmRpbmdzLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gYmxvYkJ1aWxkZXItPmdldEJsb2IodHlw
ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShDUkVBVEVfRE9NX1dSQVBQRVIoZXhlYywg
anNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIEJsb2IsIGJsb2IuZ2V0KCkpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAJKHJldmlzaW9uIDExNTQ5NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw5ICszMSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkJsb2IuaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKICNpbmNsdWRlICJWOEJsb2IuaCIKICNpbmNsdWRlICJWOEZpbGUuaCIKICNpbmNsdWRlICJW
OFByb3h5LmgiCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJXZWJLaXRCbG9i
QnVpbGRlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDksNCArNTMsNzEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQmxvYiogaW1w
bCwgdgogICAgIHJldHVybiBWOEJsb2I6OndyYXAoaW1wbCwgaXNvbGF0ZSk7CiB9CiAKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOEJsb2I6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5CbG9iLkNvbnN0cnVjdG9yIik7
CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5j
dGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOworCisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6
Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAg
ICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKKworICAgIC8vIEdldCB0aGUgc2NyaXB0IGV4ZWN1dGlv
biBjb250ZXh0LgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBnZXRTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcigiQmxvYiBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZh
aWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOworCisgICAgaWYgKCFhcmdzLkxlbmd0
aCgpKQorICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZSgpOworICAgICAg
ICByZXR1cm4gdG9WOChibG9iLmdldCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgfQorCisg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZmlyc3RBcmcgPSBhcmdzWzBdOworICAgIGlmICghZmly
c3RBcmctPklzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkZpcnN0IGFyZ3Vt
ZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBBcnJheSIsIFY4UHJveHk6OlR5
cGVFcnJvcik7CisKKyAgICBFWENFUFRJT05fQkxPQ0sodjg6OkxvY2FsPHY4OjpBcnJheT4sIGJs
b2JQYXJ0cywgdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoZmlyc3RBcmcpKTsKKworICAgIFN0
cmluZyB0eXBlOworICAgIFN0cmluZyBlbmRpbmdzID0gInRyYW5zcGFyZW50IjsKKworICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CisgICAgICAgIERp
Y3Rpb25hcnkgZGljdGlvbmFyeShhcmdzWzFdKTsKKyAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5
cGUiLCB0eXBlKTsKKyAgICAgICAgaWYgKGRpY3Rpb25hcnkuZ2V0KCJlbmRpbmdzIiwgZW5kaW5n
cykpIHsKKyAgICAgICAgICAgIGlmIChlbmRpbmdzICE9ICJ0cmFuc3BhcmVudCIgJiYgZW5kaW5n
cyAhPSAibmF0aXZlIikgeworICAgICAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVChlbmRp
bmdzID09ICJ0cmFuc3BhcmVudCIgfHwgZW5kaW5ncyA9PSAibmF0aXZlIik7CisKKyAgICBSZWZQ
dHI8V2ViS2l0QmxvYkJ1aWxkZXI+IGJsb2JCdWlsZGVyID0gV2ViS2l0QmxvYkJ1aWxkZXI6OmNy
ZWF0ZSgpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBibG9iUGFydHMtPkxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaXRlbSA9IGJsb2JQYXJ0cy0+
R2V0KHY4OjpVaW50MzI6Ok5ldyhpKSk7CisgICAgICAgIEFTU0VSVCghaXRlbS5Jc0VtcHR5KCkp
OworI2lmIEVOQUJMRShCTE9CKQorICAgICAgICBpZiAoVjhBcnJheUJ1ZmZlcjo6SGFzSW5zdGFu
Y2UoaXRlbSkpIHsKKyAgICAgICAgICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9IFY4QXJy
YXlCdWZmZXI6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoaXRlbSkpOwor
ICAgICAgICAgICAgQVNTRVJUKGFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgIGJsb2JCdWlsZGVy
LT5hcHBlbmQoYXJyYXlCdWZmZXIpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICBp
ZiAoVjhCbG9iOjpIYXNJbnN0YW5jZShpdGVtKSkgeworICAgICAgICAgICAgQmxvYiogYmxvYiA9
IFY4QmxvYjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChpdGVtKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoYmxvYik7CisgICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5k
KGJsb2IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRVhDRVBUSU9OX0JMT0NLKFN0
cmluZywgc3RyaW5nVmFsdWUsIHRvV2ViQ29yZVN0cmluZyhpdGVtLT5Ub1N0cmluZygpKSk7Cisg
ICAgICAgICAgICBibG9iQnVpbGRlci0+YXBwZW5kKHN0cmluZ1ZhbHVlLCBlbmRpbmdzLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0cjxCbG9iPiBi
bG9iID0gYmxvYkJ1aWxkZXItPmdldEJsb2IodHlwZSk7CisgICAgcmV0dXJuIHRvVjgoYmxvYi5n
ZXQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAJKHJldmlzaW9uIDExNTQ5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDE2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorQmxvYjo6QmxvYigpCisgICAgOiBtX3NpemUoMCkK
K3sKKyAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOwor
CisgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0
aGUgcHJvdmlkZWQgYmxvYiBkYXRhLgorICAgIG1faW50ZXJuYWxVUkwgPSBCbG9iVVJMOjpjcmVh
dGVJbnRlcm5hbFVSTCgpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxv
YlVSTChtX2ludGVybmFsVVJMLCBibG9iRGF0YS5yZWxlYXNlKCkpOworfQorCiBCbG9iOjpCbG9i
KFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKICAgICA6IG1f
dHlwZShibG9iRGF0YS0+Y29udGVudFR5cGUoKSkKICAgICAsIG1fc2l6ZShzaXplKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDExNTQ5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYik7CisgICAgfQorCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmxvYj4gY3JlYXRlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcg
c2l6ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihibG9iRGF0YSwg
c2l6ZSkpOwpAQCAtNjcsNiArNzIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgor
ICAgIEJsb2IoKTsKICAgICBCbG9iKFBhc3NPd25QdHI8QmxvYkRhdGE+LCBsb25nIGxvbmcgc2l6
ZSk7CiAKICAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9CbG9iLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Js
b2IuaWRsCShyZXZpc2lvbiAxMTU0OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBAIG1vZHVsZSBodG1sIHsKICAgICBp
bnRlcmZhY2UgWwogICAgICAgICBKU0dlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKICAgICAgICAg
Q3VzdG9tVG9KU09iamVjdCwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcworICAgICAgICBKU05v
U3RhdGljVGFibGVzLAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RvciwKKyAgICAgICAgQ29uc3Ry
dWN0b3JQYXJhbWV0ZXJzPTIKICAgICBdIEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmlkbAkocmV2aXNpb24gMTE1NDk1KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBtb2R1bGUgdGhyZWFk
cyB7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9CTE9CKSAmJiBFTkFCTEVfQkxPQgogICAgICAgICBh
dHRyaWJ1dGUgV2ViS2l0QmxvYkJ1aWxkZXJDb25zdHJ1Y3RvciBXZWJLaXRCbG9iQnVpbGRlcjsK
KyAgICAgICAgYXR0cmlidXRlIEJsb2JDb25zdHJ1Y3RvciBCbG9iOwogICAgICAgICBhdHRyaWJ1
dGUgRmlsZVJlYWRlckNvbnN0cnVjdG9yIEZpbGVSZWFkZXI7CiAgICAgICAgIGF0dHJpYnV0ZSBG
aWxlUmVhZGVyU3luY0NvbnN0cnVjdG9yIEZpbGVSZWFkZXJTeW5jOwogI2VuZGlmCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw1NiBAQAorMjAxMi0wNC0yNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgQmxvYiBjb25zdHJ1Y3RvcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ1NTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggdGVzdHMg
dGhhdCB3ZXJlIG5vdCBkaXJlY3RseSB0ZXN0aW5nIEJsb2JCdWlsZGVyIG92ZXIgdG8KKyAgICAg
ICAgdXNpbmcgdGhlIEJsb2IgY29uc3RydWN0b3IsIHRvIGdldCB0ZXN0IGNvdmVyYWdlIG9mIHN0
YW5kYXJkIHdheQorICAgICAgICBjb25zdHJ1Y3RpbmcgYmxvYnMuCisKKyAgICAgICAgKiBmYXN0
L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3IuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2It
Y29uc3RydWN0b3ItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZmlsZXMvc2NyaXB0LXRl
c3RzL2Jsb2ItY29uc3RydWN0b3IuanM6CisgICAgICAgIE5ldyB0ZXN0LgorCisgICAgICAgICog
ZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLXVuc2V0Lmh0bWw6Cisg
ICAgICAgICogZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLmh0bWw6
CisgICAgICAgICogZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5vZG93bmxvYWQt
c2V0Lmh0bWw6CisgICAgICAgICogZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLW5v
ZG93bmxvYWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2RvbS93aW5kb3ctZG9tdXJsLWNyYXNoLmh0
bWw6CisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLWJ1aWxkZXItY3Jhc2gtZXhwZWN0ZWQudHh0
OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZmlsZXMvYmxvYi1idWlsZGVyLWNyYXNoLmh0bWw6
IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWw6
CisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLXNsaWNlLXRlc3QuaHRtbDoKKyAgICAgICAgKiBm
YXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL25v
dC1lbm91Z2gtYXJndW1lbnRzLmh0bWw6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1ibG9iLXRlc3QtY2FzZXMuanM6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1jb21tb24uanM6CisgICAgICAgICogZmFzdC9maWxlcy93b3JrZXJzL2lubGluZS13b3Jr
ZXItdmlhLWJsb2ItdXJsLmh0bWw6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNl
cy9maWxlLXdyaXRlci1hYm9ydC1jb250aW51ZS5qczoKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWRlcHRoLmpzOgorICAgICAgICAqIGZhc3Qv
ZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItYWJvcnQuanM6CisgICAgICAgICogZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1ldmVudHMuanM6CisgICAgICAgICog
ZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1nYy1ibG9iLmpzOgorICAgICAg
ICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy10cnVuY2F0ZS1l
eHRlbmQuanM6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRl
ci1zeW5jLXdyaXRlLW92ZXJsYXBwZWQuanM6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci11dGlscy5qczoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2ZpbGVh
cGkvY3JlYXRlLWJsb2ItdXJsLWZyb20tZGF0YS11cmwuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rl
c3RzL2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbDoKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2xvY2FsL2Jsb2IvcmVzb3VyY2VzL2h5YnJpZC1ibG9iLXV0aWwuanM6CisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmls
ZS5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2Vu
ZC1vYmplY3QuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLWluLWJ1c3kuaHRtbDoKKyAgICAgICAgKiBodHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0
bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2Iu
aHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmls
ZS1ibG9iLWZhaWwuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9o
eWJpL3NlbmQtZmlsZS1ibG9iLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2IuanM6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbm9ibG9icy5odG1sOgorICAgICAgICAqIHN0
b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUuaHRtbDoKKwogMjAxMi0wNC0yNyAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxMTU0ODQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS93aW5k
b3ctZG9tdXJsLWNyYXNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
d2luZG93LWRvbXVybC1jcmFzaC5odG1sCShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2RvbS93aW5kb3ctZG9tdXJsLWNyYXNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiA8aHRtbD4NCiA8aGVhZD4NCiA8c2NyaXB0Pg0KLXZhciBibG9iID0gKG5ldyBX
ZWJLaXRCbG9iQnVpbGRlcikuZ2V0QmxvYigpOw0KK3ZhciBibG9iID0gbmV3IEJsb2IoW10pOw0K
IHZhciB1cmwgPSBudWxsOw0KIHZhciBjb3VudCA9IDA7DQogDQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9yLWRvd25sb2FkLXVuc2V0Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9y
LWRvd25sb2FkLXVuc2V0Lmh0bWwJKHJldmlzaW9uIDExNTQ5NSkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1kb3dubG9hZC11bnNldC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw5ICsyNCw4IEBAIGZ1bmN0aW9uIGNsaWNrKGVsbXQpCiAKIGZ1bmN0
aW9uIHJ1blRlc3QoKQogewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwot
ICAgIGJiLmFwcGVuZCgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90
aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwv
Ym9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iKTsKLSAgICB2YXIg
YmxvYiA9IGJiLmdldEJsb2IoInRleHQvaHRtbCIsICJpbmxpbmUiKTsKKyAgICB2YXIgc3RyaW5n
ID0gIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PHNjcmlw
dD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7IDwvIiArICJzY3JpcHQ+PC9oZWFkPjxib2R5PlBBU1M8L2JvZHk+PHNjcmlw
dD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7PC9zY3IiICsgImlwdD48L2h0bWw+Iik7ICAgIAorICAgIHZhciBibG9iID0g
bmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAidGV4dC9odG1sIn0pOwogICAgIHZhciBsaW5rID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsb2ItdXJsIik7CiAgICAgbGluay5ocmVmID0gd2lu
ZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgbGluay5yZW1vdmVBdHRy
aWJ1dGUoJ2Rvd25sb2FkJyk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9y
RWxlbWVudC9hbmNob3ItZG93bmxvYWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQuaHRtbAkocmV2aXNpb24g
MTE1NDk1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQvYW5jaG9y
LWRvd25sb2FkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDggQEAgZnVuY3Rpb24g
Y2xpY2soZWxtdCkKIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48
aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0
PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+
PC9odG1sPiIpOwotICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigidGV4dC9odG1sIiwgImlubGlu
ZSIpOworICAgIHZhciBzdHJpbmcgPSAiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxl
PlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJv
ZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iOwor
ICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAidGV4dC9odG1sIn0pOwog
ICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsb2ItdXJsIik7CiAgICAg
bGluay5ocmVmID0gd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAg
Y2xpY2sobGluayk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVu
dC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC1zZXQuaHRtbAkocmV2
aXNpb24gMTE1NDk1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTEFuY2hvckVsZW1lbnQv
YW5jaG9yLW5vZG93bmxvYWQtc2V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDgg
QEAgZnVuY3Rpb24gY2xpY2soZWxtdCkKIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7Ci0gICAgdmFy
IGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIuYXBwZW5kKCI8IWRvY3R5cGUg
aHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxzY3JpcHQ+aWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOyA8
LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5PjxzY3JpcHQ+aWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOzwv
c2NyIiArICJpcHQ+PC9odG1sPiIpOwotICAgIHZhciBibG9iID0gYmIuZ2V0QmxvYigidGV4dC9o
dG1sIiwgImlubGluZSIpOworICAgIHZhciBzdHJpbmcgPSAiPCFkb2N0eXBlIGh0bWw+PGh0bWw+
PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsgPC8iICsgInNjcmlw
dD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTs8L3NjciIgKyAiaXB0
PjwvaHRtbD4iOworICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3N0cmluZ10sIHt0eXBlOiAidGV4
dC9odG1sIn0pOwogICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsb2It
dXJsIik7CiAgICAgbGluay5ocmVmID0gd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwo
YmxvYik7CiAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJyk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hv
ci1ub2Rvd25sb2FkLmh0bWwJKHJldmlzaW9uIDExNTQ5NSkKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL0hUTUxBbmNob3JFbGVtZW50L2FuY2hvci1ub2Rvd25sb2FkLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDkgKzI0LDggQEAgZnVuY3Rpb24gY2xpY2soZWxtdCkKIAogZnVuY3Rpb24gcnVu
VGVzdCgpCiB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYmIu
YXBwZW5kKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjxz
Y3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOyA8LyIgKyAic2NyaXB0PjwvaGVhZD48Ym9keT5QQVNTPC9ib2R5Pjxz
Y3JpcHQ+aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOzwvc2NyIiArICJpcHQ+PC9odG1sPiIpOwotICAgIHZhciBibG9iID0g
YmIuZ2V0QmxvYigidGV4dC9odG1sIiwgImlubGluZSIpOworICAgIHZhciBzdHJpbmcgPSAiPCFk
b2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48c2NyaXB0PmlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsgPC8iICsgInNjcmlwdD48L2hlYWQ+PGJvZHk+UEFTUzwvYm9keT48c2NyaXB0PmlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTs8L3NjciIgKyAiaXB0PjwvaHRtbD4iOworICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3N0
cmluZ10sIHt0eXBlOiAidGV4dC9odG1sIn0pOwogICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImJsb2ItdXJsIik7CiAgICAgbGluay5ocmVmID0gd2luZG93LndlYmtpdFVS
TC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgY2xpY2sobGluayk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3It
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACitUZXN0IHRoZSBCbG9i
IGNvbnN0cnVjdG9yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAobmV3
IEJsb2IoKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCitQQVNTIChuZXcgQmxvYihb
XSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoWydoZWxs
byddKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCitQQVNTIChuZXcgQmxvYihbJ2hl
bGxvJ10sIHt9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCitQQVNTIChuZXcgQmxv
YihbJ2hlbGxvJ10sIHt0eXBlOid0ZXh0L2h0bWwnfSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2Ig
aXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoWydoZWxsbyddLCB7dHlwZTondGV4dC9odG1sJywgZW5k
aW5nczonbmF0aXZlJ30pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgKG5l
dyBCbG9iKFsnaGVsbG8nXSwge3R5cGU6J3RleHQvaHRtbCcsIGVuZGluZ3M6J3RyYW5zcGFyZW50
J30pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgbmV3IEJsb2IoJ2hlbGxv
JykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmlyc3QgYXJndW1lbnQgb2YgdGhlIGNvbnN0
cnVjdG9yIGlzIG5vdCBvZiB0eXBlIEFycmF5LgorUEFTUyBuZXcgQmxvYigwKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMgbm90
IG9mIHR5cGUgQXJyYXkuCitQQVNTIChuZXcgQmxvYihbXSkpIGluc3RhbmNlb2Ygd2luZG93LkJs
b2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcig4KV0pKSBpbnN0YW5j
ZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgKG5ldyBCbG9iKFsnc3RyaW5nUHJpbWl0aXZl
J10pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgKG5ldyBCbG9iKFtTdHJp
bmcoJ3N0cmluZ09iamVjdCcpXSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFT
UyAobmV3IEJsb2IoW25ldyBCbG9iXSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQor
UEFTUyAobmV3IEJsb2IoW25ldyBCbG9iKFtuZXcgQmxvYl0pXSkpIGluc3RhbmNlb2Ygd2luZG93
LkJsb2IgaXMgdHJ1ZQorUEFTUyAobmV3IEJsb2IoWzEyXSkpLnNpemUgaXMgMgorUEFTUyAobmV3
IEJsb2IoW1tdXSkpLnNpemUgaXMgMAorUEFTUyAobmV3IEJsb2IoW3t9XSkpLnNpemUgaXMgMTUK
K1BBU1MgKG5ldyBCbG9iKFtkb2N1bWVudF0pKS5zaXplIGlzIDIxCitQQVNTIChuZXcgQmxvYihb
dG9TdHJpbmdpbmdPYmpdKSkuc2l6ZSBpcyA4CitQQVNTIG5ldyBCbG9iKFt0aHJvd2luZ09ial0p
IHRocmV3IGV4Y2VwdGlvbiBlcnJvci4KK1BBU1MgKG5ldyBCbG9iKFtdLCB7dW5rbm93bktleTon
dmFsdWUnfSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyBuZXcgQmxvYihb
XSwge2VuZGluZ3M6J2lsbGVnYWxWYWx1ZSd9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOVkFM
SURfU1RBVEVfRVJSOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBuZXcgQmxvYihbXSwge2VuZGlu
Z3M6dGhyb3dpbmdPYmp9KSB0aHJldyBleGNlcHRpb24gZXJyb3IuCitQQVNTIG5ldyBCbG9iKFtd
LCB7dHlwZTp0aHJvd2luZ09ian0pIHRocmV3IGV4Y2VwdGlvbiBlcnJvci4KK1BBU1MgKG5ldyBC
bG9iKFtdLCB7dHlwZTondGV4dC9odG1sJ30pKS50eXBlIGlzICd0ZXh0L2h0bWwnCitQQVNTIChu
ZXcgQmxvYihbXSwge3R5cGU6J3RleHQvaHRtbCd9KSkuc2l6ZSBpcyAwCitQQVNTIHdpbmRvdy5C
bG9iLmxlbmd0aCBpcyAyCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWNvbnN0cnVjdG9y
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLWNvbnN0cnVj
dG9yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItY29u
c3RydWN0b3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Jsb2ItY29uc3RydWN0b3IuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxl
cy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWwJKHJldmlzaW9uIDExNTQ5NSkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC01LDE5ICs1LDIyIEBAIGEgdHJ1bmNhdGVkIHNsaWNlIGJlaW5nIHJldHVybmVkLgog
PHByZSBpZD0nY29uc29sZSc+PC9wcmU+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgewotICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCkKIH0KLXZhciBidWlsZGVyID0gIG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworCiB2YXIgdGV4
dCA9ICcnOwotZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwOyArK2kpIHRleHQgKz0gJ0EnOwotYnVp
bGRlci5hcHBlbmQodGV4dCk7Ci1ibG9iID0gYnVpbGRlci5nZXRCbG9iKCk7Citmb3IgKHZhciBp
ID0gMDsgaSA8IDIwMDA7ICsraSkKKyAgICB0ZXh0ICs9ICdBJzsKKworYmxvYiA9IG5ldyBCbG9i
KFt0ZXh0XSk7CiBzbGljZWRCbG9iID0gYmxvYi53ZWJraXRTbGljZSgxOTk5LCA5MjIzMzcyMDM2
ODU0Nzc1MDAwKTsKKwogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQmxvYiBzbGljZSBsZW5ndGg6ICcgKyBzbGlj
ZWRCbG9iLnNpemUpKTsKIGlmIChzbGljZWRCbG9iLnNpemUgIT0gMSkgewotICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCdGQUlMJykpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0ZBSUwnKSk7CiB9CisKIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwogfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLXRlc3Qu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2UtdGVz
dC5odG1sCShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2It
c2xpY2UtdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04Miw5ICs4Miw3IEBAIGZ1bmN0aW9u
IHJ1bk5leHRUZXN0KCkKIAogZnVuY3Rpb24gcnVuVGVzdHMoKQogewotICAgIHZhciBidWlsZGVy
ID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIjAxMjM0NTY3
ODkiKTsKLSAgICBibG9iID0gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgYmxvYiA9IG5ldyBCbG9i
KFsiMDEyMzQ1Njc4OSJdKTsKIAogICAgIHJ1bk5leHRUZXN0KCk7CiB9CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWZmZmQuaHRtbAkocmV2aXNpb24gMTE1NDk1
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci1mZmZkLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTEwLDkgKzEwLDggQEAKIDxzY3JpcHQ+CiBkZXNjcmlwdGlvbigiVGhyb3cg
dmFyaW91cyBiYWQgYnl0ZXMgYXQgZmlsZSByZWFkZXIuIik7CiAKLWJiID0gZXZhbEFuZExvZygi
YmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsiKTsKIGFycmF5ID0gZXZhbEFuZExvZygiYXJy
YXkgPSBuZXcgVWludDhBcnJheShbNjUsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1
MSwgMjUyLCAyNTMsIDI1NCwgMjU1LCA2Nl0pOyIpOwotYmxvYiA9IGV2YWxBbmRMb2coImJsb2Ig
PSBidWlsZEJsb2IoW2FycmF5LmJ1ZmZlcl0pOyIpOworYmxvYiA9IGV2YWxBbmRMb2coImJsb2Ig
PSBuZXcgQmxvYihbYXJyYXkuYnVmZmVyXSk7Iik7CiByZWFkZXIgPSBldmFsQW5kTG9nKCJyZWFk
ZXIgPSBuZXcgRmlsZVJlYWRlcigpOyIpOwogcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CiAgIGZpbGVTdHJpbmcgPSBldmVudC50YXJnZXQucmVzdWx0OwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvbm90LWVub3VnaC1hcmd1bWVudHMuaHRtbAkocmV2aXNpb24g
MTE1NDk1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ub3QtZW5vdWdoLWFyZ3VtZW50cy5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw5ICsxNSw3IEBAIHNob3VsZFRocm93KCdyZWFkZXIu
cmVhZEFzQmluYXJ5U3RyaW5nKCkKIHNob3VsZFRocm93KCdyZWFkZXIucmVhZEFzVGV4dCgpJyk7
CiBzaG91bGRUaHJvdygncmVhZGVyLnJlYWRBc0RhdGFVUkwoKScpOwogCi12YXIgYmxvYkJ1aWxk
ZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLQotc2hvdWxkVGhyb3coJ2Jsb2JCdWlsZGVy
LmFwcGVuZCgpJyk7CitzaG91bGRUaHJvdygnbmV3IEJsb2IoKScpOwogCiB2YXIgZmlsZUlucHV0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07CiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10ZXN0LWNhc2VzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtYmxvYi10
ZXN0LWNhc2VzLmpzCShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L3Jlc291cmNlcy9yZWFkLWJsb2ItdGVzdC1jYXNlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTcw
LDExICsxNzAsMTEgQEAgZnVuY3Rpb24gdGVzdFJlYWRpbmdTbGljZWRIeWJyaWRCbG9iKHRlcwog
ZnVuY3Rpb24gdGVzdFJlYWRpbmdUcmlwbGVTbGljZWRIeWJyaWRCbG9iKHRlc3RGaWxlcykKIHsK
ICAgICBsb2coIlRlc3QgcmVhZGluZyBhIHRyaXBsZS1zbGljZWQgaHlicmlkIGJsb2IiKTsKLSAg
ICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwogICAgIHZhciBhcnJheSA9
IG5ldyBVaW50OEFycmF5KFs0OCwgNDksIDUwXSk7Ci0gICAgdmFyIGJsb2IgPSBidWlsZEJsb2Io
WydGaXJzdCcsIHRlc3RGaWxlc1snZmlsZTEnXS53ZWJraXRTbGljZSgxLCAxMSksIHRlc3RGaWxl
c1snZW1wdHktZmlsZSddLCAnU2Vjb25kJywgdGVzdEZpbGVzWydmaWxlMiddLCB0ZXN0RmlsZXNb
J2ZpbGUzJ10sICdUaGlyZCcsIGFycmF5LmJ1ZmZlcl0sIHVuZGVmaW5lZCwgYnVpbGRlcik7Cisg
ICAgdmFyIGl0ZW1zID0gWydGaXJzdCcsIHRlc3RGaWxlc1snZmlsZTEnXS53ZWJraXRTbGljZSgx
LCAxMSksIHRlc3RGaWxlc1snZW1wdHktZmlsZSddLCAnU2Vjb25kJywgdGVzdEZpbGVzWydmaWxl
MiddLCB0ZXN0RmlsZXNbJ2ZpbGUzJ10sICdUaGlyZCcsIGFycmF5LmJ1ZmZlcl07CisgICAgdmFy
IGJsb2IgPSBidWlsZEJsb2IoaXRlbXMpOwogICAgIHZhciBibG9iID0gYmxvYi53ZWJraXRTbGlj
ZSg3LCAxOSk7Ci0gICAgdmFyIGJsb2IyID0gYnVpbGRCbG9iKFsnRm9vJywgYmxvYiwgJ0Jhcidd
LCB1bmRlZmluZWQsIGJ1aWxkZXIpOworICAgIHZhciBibG9iMiA9IGJ1aWxkQmxvYihpdGVtcy5j
b25jYXQoWydGb28nLCBibG9iLCAnQmFyJ10pKTsKICAgICB2YXIgYmxvYjIgPSBibG9iMi53ZWJr
aXRTbGljZSgxMiwgNDIpOwogICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCBi
bG9iMik7CiB9CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWNv
bW1vbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9y
ZWFkLWNvbW1vbi5qcwkocmV2aXNpb24gMTE1NDk1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzEsMTEg
QEAKIC8vIEJ1aWxkcyBhIGJsb2IgZnJvbSBhIGxpc3Qgb2YgaXRlbXMuCiAvLyBUaGUgJ2NvbnRl
bnRUeXBlJyBhcmd1bWVudCBpcyBvcHRpb25hbC4KIC8vIElmIHRoZSAnYnVpbGRlcicgYXJndW1l
bnQgaXMgbm90IHByb3ZpZGVkLCBjcmVhdGUgYSBuZXcgb25lLgotZnVuY3Rpb24gYnVpbGRCbG9i
KGl0ZW1zLCBjb250ZW50VHlwZSwgYnVpbGRlcikKK2Z1bmN0aW9uIGJ1aWxkQmxvYihpdGVtcywg
Y29udGVudFR5cGUpCiB7Ci0gICAgaWYgKGJ1aWxkZXIgPT09IHVuZGVmaW5lZCkKLSAgICAgICAg
YnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgaXRlbXMubGVuZ3RoOyBpKyspCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0ZW1zW2ldKTsK
LSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKGNvbnRlbnRUeXBlKTsKKyAgICBpZiAoY29udGVu
dFR5cGUgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9iKGl0ZW1zKTsKKyAg
ICByZXR1cm4gbmV3IEJsb2IoaXRlbXMsIHt0eXBlOmNvbnRlbnRUeXBlfSk7CiB9CiAKIC8vIFJl
YWRzIGEgYmxvYiBlaXRoZXIgYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25vdXNseS4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZmlsZXMvc2NyaXB0LXRlc3RzL2Jsb2ItY29uc3RydWN0b3IuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9zY3JpcHQtdGVzdHMvYmxvYi1j
b25zdHJ1Y3Rvci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvc2Ny
aXB0LXRlc3RzL2Jsb2ItY29uc3RydWN0b3IuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkg
QEAKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoZSBCbG9iIGNvbnN0cnVjdG9yLiIpOworCisvLyBUZXN0
IHRoZSBkaWZmcmVudCB3YXlzIHlvdSBjYW4gY29uc3RydWN0IGEgQmxvYi4KK3Nob3VsZEJlVHJ1
ZSgiKG5ldyBCbG9iKCkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgi
KG5ldyBCbG9iKFtdKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxkQmVUcnVlKCIo
bmV3IEJsb2IoWydoZWxsbyddKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxkQmVU
cnVlKCIobmV3IEJsb2IoWydoZWxsbyddLCB7fSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsK
K3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFsnaGVsbG8nXSwge3R5cGU6J3RleHQvaHRtbCd9KSkg
aW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoWydoZWxs
byddLCB7dHlwZTondGV4dC9odG1sJywgZW5kaW5nczonbmF0aXZlJ30pKSBpbnN0YW5jZW9mIHdp
bmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUoIihuZXcgQmxvYihbJ2hlbGxvJ10sIHt0eXBlOid0
ZXh0L2h0bWwnLCBlbmRpbmdzOid0cmFuc3BhcmVudCd9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxv
YiIpOworCisvLyBUZXN0IHNvbWUgZXJyb3IgY2FzZXMKK3Nob3VsZFRocm93KCJuZXcgQmxvYign
aGVsbG8nKSIpOworc2hvdWxkVGhyb3coIm5ldyBCbG9iKDApIik7CisKKy8vIFRlc3QgdmFsaWQg
YmxvYiBwYXJ0cy4KK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdKSkgaW5zdGFuY2VvZiB3aW5k
b3cuQmxvYiIpOworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcig4KV0p
KSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUoIihuZXcgQmxvYihbJ3N0
cmluZ1ByaW1pdGl2ZSddKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxkQmVUcnVl
KCIobmV3IEJsb2IoW1N0cmluZygnc3RyaW5nT2JqZWN0JyldKSkgaW5zdGFuY2VvZiB3aW5kb3cu
QmxvYiIpOworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoW25ldyBCbG9iXSkpIGluc3RhbmNlb2Yg
d2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtuZXcgQmxvYihbbmV3IEJs
b2JdKV0pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CisKKy8vIFRlc3Qgc29tZSBjb252ZXJz
aW9ucyB0byBzdHJpbmcgaW4gdGhlIHBhcnRzIGFycmF5Lgorc2hvdWxkQmUoIihuZXcgQmxvYihb
MTJdKSkuc2l6ZSIsICIyIik7CitzaG91bGRCZSgiKG5ldyBCbG9iKFtbXV0pKS5zaXplIiwgIjAi
KTsgICAgICAgICAvLyBbXS50b1N0cmluZygpIGlzIHRoZSBlbXB0eSBzdHJpbmcKK3Nob3VsZEJl
KCIobmV3IEJsb2IoW3t9XSkpLnNpemUiLCAiMTUiKTs7ICAgICAgIC8vIHt9LnRvU3RyaW5nKCkg
aXMgdGhlIHN0cmluZyAiW29iamVjdCBPYmplY3RdIgorc2hvdWxkQmUoIihuZXcgQmxvYihbZG9j
dW1lbnRdKSkuc2l6ZSIsICIyMSIpOyAgLy8gZG9jdW1lbnQudG9TdHJpbmcoKSBpcyB0aGUgc3Ry
aW5nICJbb2JqZWN0IEhUTUxEb2N1bWVudF0iIAorCit2YXIgdG9TdHJpbmdpbmdPYmogPSB7IHRv
U3RyaW5nOiBmdW5jdGlvbigpIHsgcmV0dXJuICJBIHN0cmluZyI7IH0gfTsKK3Nob3VsZEJlKCIo
bmV3IEJsb2IoW3RvU3RyaW5naW5nT2JqXSkpLnNpemUiLCAiOCIpOworCit2YXIgdGhyb3dpbmdP
YmogPSB7IHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgdGhyb3cgImVycm9yIjsgfSB9Oworc2hvdWxk
VGhyb3coIm5ldyBCbG9iKFt0aHJvd2luZ09ial0pIik7CisKKworLy8gVGVzdCBzb21lIGludmFs
aWQgcHJvcGVydHkgYmFncworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoW10sIHt1bmtub3duS2V5
Oid2YWx1ZSd9KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOyAgICAvLyBJZ25vcmUgaW52YWxp
ZCBrZXlzCitzaG91bGRUaHJvdygibmV3IEJsb2IoW10sIHtlbmRpbmdzOidpbGxlZ2FsVmFsdWUn
fSkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGZvciBpbnZhbGlkIHZhbHVl
IHRvIGVuZGluZ3MKK3Nob3VsZFRocm93KCJuZXcgQmxvYihbXSwge2VuZGluZ3M6dGhyb3dpbmdP
Ymp9KSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3dzIGR1cmluZyB0b1N0
cmluZworc2hvdWxkVGhyb3coIm5ldyBCbG9iKFtdLCB7dHlwZTp0aHJvd2luZ09ian0pIik7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaHJvd3MgZHVyaW5nIHRvU3RyaW5nCisK
K3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdLCBudWxsKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxv
YiIpOworc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoW10sIHVuZGVmaW5lZCkpIGluc3RhbmNlb2Yg
d2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdLCAxMjMpKSBpbnN0YW5j
ZW9mIHdpbmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUoIihuZXcgQmxvYihbXSwgMTIzLjQpKSBp
bnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUoIihuZXcgQmxvYihbXSwgW10p
KSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CitzaG91bGRCZVRydWUoIihuZXcgQmxvYihbXSwg
dHJ1ZSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5ldyBCbG9i
KFtdLCAnYWJjJykpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1ZSgiKG5l
dyBCbG9iKFtdLCAvYWJjLykpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKK3Nob3VsZEJlVHJ1
ZSgiKG5ldyBCbG9iKFtdLCBmdW5jdGlvbiAoKSB7fSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2Ii
KTsKKworCisvLyBUZXN0IHRoYXQgdGhlIHR5cGUvc2l6ZSBpcyBjb3JyZWN0bHkgYWRkZWQgdG8g
dGhlIEJsb2IKK3Nob3VsZEJlKCIobmV3IEJsb2IoW10sIHt0eXBlOid0ZXh0L2h0bWwnfSkpLnR5
cGUiLCAiJ3RleHQvaHRtbCciKTsKK3Nob3VsZEJlKCIobmV3IEJsb2IoW10sIHt0eXBlOid0ZXh0
L2h0bWwnfSkpLnNpemUiLCAiMCIpOworCisvLyBPZGRzIGFuZCBlbmRzCitzaG91bGRCZSgid2lu
ZG93LkJsb2IubGVuZ3RoIiwgIjIiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29y
a2Vycy9pbmxpbmUtd29ya2VyLXZpYS1ibG9iLXVybC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9pbmxpbmUtd29ya2VyLXZpYS1ibG9iLXVybC5odG1s
CShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvaW5s
aW5lLXdvcmtlci12aWEtYmxvYi11cmwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTMgKzEw
LDEyIEBAIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQogZnVuY3Rpb24gcnVuVGVzdCgpCiB7CiAgICAg
bG9nKCJUZXN0IGlubGluZSB3ZWIgd29ya2VyIHZpYSBibG9iIFVSTC4iKTsKLSAgICB2YXIgYmxv
YkJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBibG9iQnVpbGRlci5hcHBl
bmQoWworICAgIHZhciBzdHJpbmcgPSBbCiAgICAgICAgICJvbm1lc3NhZ2UgPSBmdW5jdGlvbihl
KSB7IiwKICAgICAgICAgIiAgICBwb3N0TWVzc2FnZSgnSGVsbG8gZnJvbSB3b3JrZXInKTsiLAog
ICAgICAgICAifTsiCiAgICAgXS5qb2luKCdcbicpKTsKLSAgICB2YXIgYmxvYlVSTCA9IHdlYmtp
dFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYkJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICB2YXIgYmxv
YlVSTCA9IHdlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3N0cmluZ10pKTsKICAg
ICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iVVJMKTsKICAgICB3b3JrZXIub25tZXNzYWdl
ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgbG9nKGV2ZW50LmRhdGEpOwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1jb250
aW51ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3Vy
Y2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNvbnRpbnVlLmpzCShyZXZpc2lvbiAxMTU0OTUpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LWNv
bnRpbnVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMSArNTIsMTEgQEAgZnVuY3Rpb24gbm9w
KCkgewogfQogCiBmdW5jdGlvbiB0ZW5YQmxvYihibG9iKSB7Ci0gICAgdmFyIGJiID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7CisgICAgdmFyIGJiID0gW107CiAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgKytpKSB7Ci0gICAgICAgIGJiLmFwcGVuZChibG9iKTsKKyAgICAgICAgYmIucHVz
aChibG9iKTsKICAgICB9Ci0gICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3
IEJsb2IoYmIpOwogfQogCiAvLyBUaGVzZSBtZXRob2RzIHNldCB1cCBhIHdyaXRlLCBhYm9ydCBp
dCBhcyBzb29uIGFzIGl0IHN0YXJ0cywgdGhlbiBpbml0aWF0ZQpAQCAtOTEsOSArOTEsNyBAQCBm
dW5jdGlvbiBjaGVja0xlbmd0aEFuZENvbXBsZXRlVGVzdChlKSB7CiAKIGZ1bmN0aW9uIHN0YXJ0
V3JpdGUoKSB7CiAgICAgLy8gTGV0J3MgbWFrZSBpdCBhYm91dCBhIG1lZ2FieXRlLgotICAgIHZh
ciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVuZCgibG9yZW0gaXBz
dW0iKTsKLSAgICB2YXIgYmxvYiA9IHRlblhCbG9iKGJiLmdldEJsb2IoKSk7CisgICAgdmFyIGJs
b2IgPSB0ZW5YQmxvYihuZXcgQmxvYihbImxvcmVtIGlwc3VtIl0pKTsKICAgICBibG9iID0gdGVu
WEJsb2IoYmxvYik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5Y
QmxvYihibG9iKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS13cml0ZXItYWJvcnQtZGVwdGguanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1hYm9ydC1kZXB0aC5qcwkocmV2aXNp
b24gMTE1NDk1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxl
LXdyaXRlci1hYm9ydC1kZXB0aC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAsOSArMTAsNyBAQCB2
YXIgc2F3V3JpdGVTdGFydDsKIHZhciBzYXdBYm9ydDsKIHZhciBzYXdXcml0ZUVuZDsKIHZhciB3
cml0ZXI7Ci12YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLWJiLmFwcGVuZCgibG9y
ZW0gaXBzdW0iKTsKLXZhciBibG9iID0gYmIuZ2V0QmxvYigpOwordmFyIGJsb2IgPSBuZXcgQmxv
YihbImxvcmVtIGlwc3VtIl0pOwogdmFyIHJlY3Vyc2lvbkRlcHRoID0gMDsKIHZhciBtZXRob2Q7
CiB2YXIgdGVzdHNSdW4gPSAwOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLXdyaXRlci1hYm9ydC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWFib3J0LmpzCShyZXZpc2lvbiAx
MTU0OTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3Jp
dGVyLWFib3J0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMiwxMSArMTIsMTEgQEAgdmFyIHNhd1dy
aXRlRW5kOwogdmFyIHdyaXRlcjsKIAogZnVuY3Rpb24gdGVuWEJsb2IoYmxvYikgewotICAgIHZh
ciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIHZhciBiYiA9IFtdOwogICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAgICBiYi5hcHBlbmQoYmxvYik7Cisg
ICAgICAgIGJiLnB1c2goYmxvYik7CiAgICAgfQotICAgIHJldHVybiBiYi5nZXRCbG9iKCk7Cisg
ICAgcmV0dXJuIG5ldyBCbG9iKGJiKTsKIH0KIAogZnVuY3Rpb24gb25Xcml0ZVN0YXJ0KGUpIHsK
QEAgLTYyLDkgKzYyLDcgQEAgZnVuY3Rpb24gb25Xcml0ZUVuZChlKSB7CiAKIGZ1bmN0aW9uIHN0
YXJ0V3JpdGUoZmlsZVdyaXRlcikgewogICAgIC8vIExldCdzIG1ha2UgaXQgYWJvdXQgYSBtZWdh
Ynl0ZS4KLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICBiYi5hcHBl
bmQoImxvcmVtIGlwc3VtIik7Ci0gICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5nZXRCbG9iKCkp
OworICAgIHZhciBibG9iID0gdGVuWEJsb2IobmV3IEJsb2IoWyJsb3JlbSBpcHN1bSJdKSk7CiAg
ICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAg
ICBibG9iID0gdGVuWEJsb2IoYmxvYik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWV2ZW50cy5qcwkocmV2
aXNpb24gMTE1NDk1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9m
aWxlLXdyaXRlci1ldmVudHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTE2LDExICsxNiwxMSBAQCB2
YXIgbGFzdFByb2dyZXNzID0gMDsKIHZhciB0b0JlV3JpdHRlbjsKIAogZnVuY3Rpb24gdGVuWEJs
b2IoYmxvYikgewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIHZh
ciBiYiA9IFtdOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgICAgICBi
Yi5hcHBlbmQoYmxvYik7CisgICAgICAgIGJiLnB1c2goYmxvYik7CiAgICAgfQotICAgIHJldHVy
biBiYi5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBCbG9iKGJiKTsKIH0KIAogZnVuY3Rpb24g
b25Xcml0ZVN0YXJ0KGUpIHsKQEAgLTc4LDkgKzc4LDcgQEAgZnVuY3Rpb24gb25Xcml0ZUVuZChl
KSB7CiAKIGZ1bmN0aW9uIHN0YXJ0V3JpdGUoZmlsZVdyaXRlcikgewogICAgIC8vIExldCdzIG1h
a2UgaXQgYWJvdXQgYSBtZWdhYnl0ZS4KLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxk
ZXIoKTsKLSAgICBiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0gICAgdmFyIGJsb2IgPSB0ZW5Y
QmxvYihiYi5nZXRCbG9iKCkpOworICAgIHZhciBibG9iID0gdGVuWEJsb2IobmV3IEJsb2IoWyJs
b3JlbSBpcHN1bSJdKSk7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwogICAgIGJsb2IgPSB0
ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxvYik7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdy
aXRlci1nYy1ibG9iLmpzCShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLWdjLWJsb2IuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE0LDE4ICsxNCwxNiBAQCBmdW5jdGlvbiBvblRlc3RTdWNjZXNzKCkgewogfQogCiBmdW5j
dGlvbiB0ZW5YQmxvYihibG9iKSB7Ci0gICAgdmFyIGJiID0gbmV3IFdlYktpdEJsb2JCdWlsZGVy
KCk7CisgICAgdmFyIGJiID0gW107CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7
Ci0gICAgICAgIGJiLmFwcGVuZChibG9iKTsKKyAgICAgICAgYmIucHVzaChibG9iKTsKICAgICB9
Ci0gICAgcmV0dXJuIGJiLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoYmIpOwogfQog
CiBmdW5jdGlvbiBzdGFydFdyaXRlKHdyaXRlcikgewogICAgIC8vIExldCdzIG1ha2UgaXQgYWJv
dXQgYSBtZWdhYnl0ZS4KLSAgICB2YXIgYmIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAg
ICBiYi5hcHBlbmQoImxvcmVtIGlwc3VtIik7Ci0gICAgdmFyIGJsb2IgPSB0ZW5YQmxvYihiYi5n
ZXRCbG9iKCkpOworICAgIHZhciBibG9iID0gdGVuWEJsb2IobmV3IEJsb2JbImxvcmVtIGlwc3Vt
Il0pOwogICAgIGJsb2IgPSB0ZW5YQmxvYihibG9iKTsKICAgICBibG9iID0gdGVuWEJsb2IoYmxv
Yik7CiAgICAgYmxvYiA9IHRlblhCbG9iKGJsb2IpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci1zeW5jLXRydW5jYXRlLWV4dGVuZC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUt
d3JpdGVyLXN5bmMtdHJ1bmNhdGUtZXh0ZW5kLmpzCShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtdHJ1bmNh
dGUtZXh0ZW5kLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNSwxMCArMTUsOCBAQCByZW1vdmVBbGxJ
bkRpcmVjdG9yeVN5bmMoZmlsZVN5c3RlbS5yb290CiB2YXIgZW50cnkgPSBmaWxlU3lzdGVtLnJv
b3QuZ2V0RmlsZSgnYScsIHtjcmVhdGU6dHJ1ZSwgZXhjbHVzaXZlOnRydWV9KTsKIHZhciB3cml0
ZXIgPSBlbnRyeS5jcmVhdGVXcml0ZXIoKTsKIGFzc2VydCghd3JpdGVyLnBvc2l0aW9uKTsKLXZh
ciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CiB2YXIgdGVzdERhdGEgPSAidGVz
dCBkYXRhIjsKLWJ1aWxkZXIuYXBwZW5kKHRlc3REYXRhKTsKLXdyaXRlci53cml0ZShidWlsZGVy
LmdldEJsb2IoKSk7Cit3cml0ZXIud3JpdGUobmV3IEJsb2IoW3Rlc3REYXRhXSkpOwogYXNzZXJ0
KHdyaXRlci5sZW5ndGggPT0gdGVzdERhdGEubGVuZ3RoKTsKIGFzc2VydCh3cml0ZXIucG9zaXRp
b24gPT0gd3JpdGVyLmxlbmd0aCk7CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9yZXNvdXJjZXMvZmlsZS13cml0ZXItc3luYy13cml0ZS1vdmVybGFwcGVkLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS13cml0ZXIt
c3luYy13cml0ZS1vdmVybGFwcGVkLmpzCShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXN5bmMtd3JpdGUtb3Zlcmxh
cHBlZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUsMTAgKzE1LDggQEAgcmVtb3ZlQWxsSW5EaXJl
Y3RvcnlTeW5jKGZpbGVTeXN0ZW0ucm9vdAogdmFyIGVudHJ5ID0gZmlsZVN5c3RlbS5yb290Lmdl
dEZpbGUoJ2EnLCB7Y3JlYXRlOnRydWUsIGV4Y2x1c2l2ZTp0cnVlfSk7CiB2YXIgd3JpdGVyID0g
ZW50cnkuY3JlYXRlV3JpdGVyKCk7CiBhc3NlcnQoIXdyaXRlci5wb3NpdGlvbik7Ci12YXIgYnVp
bGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwogdmFyIHRlc3REYXRhID0gInRlc3QgZGF0
YSI7Ci1idWlsZGVyLmFwcGVuZCh0ZXN0RGF0YSk7Ci12YXIgYmxvYiA9IGJ1aWxkZXIuZ2V0Qmxv
YigpOwordmFyIGJsb2IgPSBuZXcgQmxvYihbdGVzdERhdGFdKTsKIHdyaXRlci53cml0ZShibG9i
KTsKIGFzc2VydCh3cml0ZXIubGVuZ3RoID09IHRlc3REYXRhLmxlbmd0aCk7CiBhc3NlcnQod3Jp
dGVyLnBvc2l0aW9uID09IHdyaXRlci5sZW5ndGgpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLXdyaXRlci11dGlscy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpz
CShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3Vy
Y2VzL2ZpbGUtd3JpdGVyLXV0aWxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOSArMTM0LDcg
QEAgZnVuY3Rpb24gY3JlYXRlRW1wdHlGaWxlKGZpbGVTeXN0ZW0sIGZpbAogCiBmdW5jdGlvbiB3
cml0ZVN0cmluZyhmaWxlRW50cnksIGZpbGVXcml0ZXIsIG9mZnNldCwgZGF0YSwgb25TdWNjZXNz
KQogewotICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJiLmFwcGVu
ZChkYXRhKTsKLSAgICB2YXIgYmxvYiA9IGJiLmdldEJsb2IoKTsKKyAgICB2YXIgYmxvYiA9IG5l
dyBCbG9iKFtkYXRhXSk7CiAgICAgZmlsZVdyaXRlci5zZWVrKG9mZnNldCk7CiAgICAgZmlsZVdy
aXRlci53cml0ZShibG9iKTsKICAgICBmaWxlV3JpdGVyLm9uZXJyb3IgPSBvbkVycm9yOwpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlYXBpL2NyZWF0ZS1ibG9iLXVybC1mcm9tLWRh
dGEtdXJsLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlYXBp
L2NyZWF0ZS1ibG9iLXVybC1mcm9tLWRhdGEtdXJsLmh0bWwJKHJldmlzaW9uIDExNTQ5NSkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZmlsZWFwaS9jcmVhdGUtYmxvYi11cmwtZnJvbS1kYXRh
LXVybC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw2IEBAIHZhciB0ID0gc2V0SW50
ZXJ2YWwoZnVuY3Rpb24oKXsKIDxib2R5PgogPHA+IFRlc3QgY2FzZSBmb3IgY2hlY2tpbmcgYmxv
YiBVUkwgbm90IGFsbG93ZWQgdG8gYmUgY3JlYXRlZCBmcm9tIHRoZSBjb2RlIHJ1bm5pbmcgZnJv
bSBkYXRhIFVSSTwvcD4KIDxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJlPgotPGlmcmFtZSBzcmM9ImRh
dGE6dGV4dC9odG1sLCUzQ3NjcmlwdCUzRXZhciUyMGIlMjAlM0QlMjBuZXclMjBXZWJLaXRCbG9i
QnVpbGRlcigpJTNCYi5hcHBlbmQoJTIyRm9vJTIyKSUzQnZhciUyMGJiJTIwJTNEJTIwYi5nZXRC
bG9iKCd0ZXh0JTJGaHRtbCcpJTNCdG9wLmxvY2F0aW9uJTNEJ2h0dHAlM0ElMkYlMkYxMjcuMC4w
LjElM0E4MDAwJTJGZmlsZWFwaSUyRmNyZWF0ZS1ibG9iLXVybC1mcm9tLWRhdGEtdXJsLmh0bWwl
MjMnJTIwJTJCJTIwd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmIpJTNCJTNDJTJG
c2NyaXB0JTNFIj48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSJkYXRhOnRleHQvaHRtbCwlM0NzY3Jp
cHQlM0V2YXIlMjBiYiUyMCUzRCUyMG5ldyUyMEJsb2IlMjglNUIlMjJGb28lMjIlNUQlMkMlMjAl
N0J0eXBlJTNBJTIydGV4dCUyRmh0bWwlMjIlN0QlMjklM0J0b3AubG9jYXRpb24lM0QlMjdodHRw
JTNBJTJGJTJGMTI3LjAuMC4xJTNBODAwMCUyRmZpbGVhcGklMkZjcmVhdGUtYmxvYi11cmwtZnJv
bS1kYXRhLXVybC5odG1sJTIzJTI3JTIwJTJCJTIwd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmpl
Y3RVUkwlMjhiYiUyOSUzQiUzQyUyRnNjcmlwdCUzRSI+PC9pZnJhbWU+CiA8L2JvZHk+CiA8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2ZpbGVzeXN0ZW0vbm8tY2FjaGUtZmls
ZXN5c3RlbS11cmwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Zp
bGVzeXN0ZW0vbm8tY2FjaGUtZmlsZXN5c3RlbS11cmwuaHRtbAkocmV2aXNpb24gMTE1NDk1KQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9maWxlc3lzdGVtL25vLWNhY2hlLWZpbGVzeXN0ZW0t
dXJsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDcgQEAKICAgICAgIHdyaXRlci5v
bndyaXRlZW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKHJhbmQpOwogICAgICAg
fTsKLSAgICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgICAgYmIuYXBw
ZW5kKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gKGV4cGVj
dGVkID09ICcgKyByYW5kICsgJykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSI7Jyk7Ci0gICAgICB3
cml0ZXIud3JpdGUoYmIuZ2V0QmxvYigndGV4dC9wbGFpbicpKTsKKyAgICAgIHdyaXRlci53cml0
ZShuZXcgQmxvYihbJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwg
PSAoZXhwZWN0ZWQgPT0gJyArIHJhbmQgKyAnKSA/ICJTVUNDRVNTIiA6ICJGQUlMVVJFIjsnXSwg
e3R5cGU6J3RleHQvcGxhaW4nfSkpOwogICAgIH0KIAogICAgIGdldEZpbGVXcml0ZXIoZnVuY3Rp
b24oZmlsZSwgd3JpdGVyKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Js
b2IvcmVzb3VyY2VzL2h5YnJpZC1ibG9iLXV0aWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3Jlc291cmNlcy9oeWJyaWQtYmxvYi11dGlsLmpzCShy
ZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2Jsb2IvcmVz
b3VyY2VzL2h5YnJpZC1ibG9iLXV0aWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxNiArMTMx
LDE5IEBAIHZhciBIeWJyaWRCbG9iVGVzdFV0aWwgPSBmdW5jdGlvbih0ZXN0RnUKIAogICAgIHRo
aXMuYXBwZW5kQW5kQ3JlYXRlQmxvYiA9IGZ1bmN0aW9uKGl0ZW1zLCBvcHRfZW5kaW5nLCBvcHRf
dHlwZSkKICAgICB7Ci0gICAgICAgIHZhciBiYiA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwor
ICAgICAgICB2YXIgYnVpbGRlciA9IFtdOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0
ZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaXRlbXNbaV0gaW5zdGFuY2VvZiBB
cnJheSkgewogICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIGNvbWJpbmUgaXRz
IGVsZW1lbnRzIGFuZCBhcHBlbmQgYXMgYSBibG9iLgotICAgICAgICAgICAgICAgIGJiLmFwcGVu
ZCh0aGlzLmFwcGVuZEFuZENyZWF0ZUJsb2IoaXRlbXNbaV0sIG9wdF9lbmRpbmcsIG9wdF90eXBl
KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zW2ldLnR5cGUgPT0gImRhdGEiICYmIG9w
dF9lbmRpbmcpCi0gICAgICAgICAgICAgICAgYmIuYXBwZW5kKGl0ZW1zW2ldLnZhbHVlLCBvcHRf
ZW5kaW5nKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYi5hcHBlbmQoaXRl
bXNbaV0udmFsdWUpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIucHVzaCh0aGlzLmFwcGVuZEFu
ZENyZWF0ZUJsb2IoaXRlbXNbaV0sIG9wdF9lbmRpbmcsIG9wdF90eXBlKSk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBidWlsZGVyLnB1c2goaXRlbXNbaV0udmFsdWUpOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiYi5nZXRCbG9iKG9wdF90eXBlKTsKKyAgICAgICAg
dmFyIG9wdGlvbnMgPSB7fTsKKyAgICAgICAgaWYgKG9wdF9lbmRpbmcpCisgICAgICAgICAgICBv
cHRpb25zLmVuZGluZ3MgPSBvcHRfZW5kaW5nOworICAgICAgICBpZiAob3B0X3R5cGUpCisgICAg
ICAgICAgICBvcHRpb25zLnR5cGUgPSBvcHRfdHlwZTsKKyAgICAgICAgcmV0dXJuIG5ldyBCbG9i
KGJ1aWxkZXIsIG9wdGlvbnMpOwogICAgIH07CiB9OwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0
ZS1maWxlc3lzdGVtLWZpbGUuaHRtbAkocmV2aXNpb24gMTE1NDk1KQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC01LDEyICs1LDEwIEBACiAgICAgICAgICAgICB3ZWJraXRSZXF1
ZXN0RmlsZVN5c3RlbShURU1QT1JBUlksIDEwMCwgZnVuY3Rpb24oZnMpIHsKICAgICAgICAgICAg
ICAgICBmcy5yb290LmdldEZpbGUoInBhZ2UuaHRtbCIsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9u
KGVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNyZWF0ZVdyaXRlcihmdW5jdGlv
bih3cml0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYiA9IG5ldyBXZWJLaXRC
bG9iQnVpbGRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgYmIuYXBwZW5kKCc8ZGl2IGlk
PSJpbm5lckRpdiI+VmlzaWJsZSBDb250ZW50czwvZGl2PlxuJyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIub253cml0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUubG9nKGVudHJ5LnRvVVJMKCkgKyAiIGNyZWF0ZWQuIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndy
aXRlKGJiLmdldEJsb2IoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUo
bmV3IEJsb2IoWyc8ZGl2IGlkPSJpbm5lckRpdiI+VmlzaWJsZSBDb250ZW50czwvZGl2PlxuJ10p
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICB9KTsKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hp
eGllNzYvc2VuZC1vYmplY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0Lmh0bWwJKHJldmlzaW9uIDEx
NTQ5NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYv
c2VuZC1vYmplY3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsOCArMTUsNyBAQCBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogCiBmdW5jdGlvbiBjcmVhdGVFbXB0eUJsb2IoKQog
ewotICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgcmV0dXJu
IGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihbXSk7CiB9CiAKIHZhciB3
cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2hp
eGllNzYvZWNobyIpOwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS1pbi1idXN5Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJl
ZEFtb3VudC1hZnRlci1jbG9zZS1pbi1idXN5Lmh0bWwJKHJldmlzaW9uIDExNTQ5NSkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQt
YWZ0ZXItY2xvc2UtaW4tYnVzeS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw3IEBA
IGZ1bmN0aW9uIGNyZWF0ZVN0cmluZ1dpdGhMZW5ndGgobGVuZ3RoKQogCiBmdW5jdGlvbiBjcmVh
dGVCbG9iV2l0aExlbmd0aChsZW5ndGgpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0
QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZChuZXcgQXJyYXlCdWZmZXIobGVuZ3Ro
KSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworICAgIHJldHVybiBuZXcgQmxvYihb
bmV3IEFycmF5QnVmZmVyKGxlbmd0aCldKTsKIH0KIAogdmFyIHdzID0gbmV3IFdlYlNvY2tldCgi
d3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9lY2hvIik7CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50
LWFmdGVyLWNsb3NlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sCShyZXZp
c2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9o
eWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDkgKzIzLDcgQEAgZnVuY3Rpb24gY3JlYXRlU3RyaW5nV2l0aExlbmd0aChsZW5ndGgpCiAKIGZ1
bmN0aW9uIGNyZWF0ZUJsb2JXaXRoTGVuZ3RoKGxlbmd0aCkKIHsKLSAgICB2YXIgYnVpbGRlciA9
IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG5ldyBBcnJheUJ1
ZmZlcihsZW5ndGgpKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJu
IG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKV0pOwogfQogCiB2YXIgd3MgPSBuZXcg
V2ViU29ja2V0KCJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NpbXBs
ZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWJsb2IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sCShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCwxNSArMjAsMTIgQEAgZnVuY3Rpb24gc3RhcnRzV2l0aCh0YXJn
ZXQsIHByZWZpeCkKIAogZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxsb1dvcmxkKCkK
IHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKCJIZWxsbywgd29ybGQhIik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigp
OworICAgIHJldHVybiBuZXcgQmxvYihbIkhlbGxvLCB3b3JsZCEiXSk7CiB9CiAKIGZ1bmN0aW9u
IGNyZWF0ZUVtcHR5QmxvYigpCiB7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1
aWxkZXIoKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBC
bG9iKFtdKTsKIH0KIAogZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5
dGVzKCkKQEAgLTM2LDkgKzMzLDcgQEAgZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxE
aXN0aW5jdAogICAgIHZhciBhcnJheSA9IG5ldyBVaW50OEFycmF5KDI1Nik7CiAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkKICAgICAgICAgYXJyYXlbaV0gPSBpOwotICAgIHZhciBi
dWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoYXJy
YXkuYnVmZmVyKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5l
dyBCbG9iKFthcnJheS5idWZmZXJdKTsKIH0KIAogdmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4
ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL2NoZWNrLWJpbmFyeS1tZXNzYWdlcyI7CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9i
LWZhaWwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAkocmV2aXNpb24gMTE1NDk1KQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUt
YmxvYi1mYWlsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDcgQEAgZnVuY3Rpb24g
ZGlkR2V0RmlsZVdyaXRlcih3cml0ZXIpCiAgICAgfTsKICAgICB3cml0ZXIub253cml0ZSA9IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWls
ZGVyKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1lc3NhZ2VUb1dyaXRlKTsKLSAgICAgICAg
d3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICAgICAgd3JpdGVyLndyaXRlKG5l
dyBCbG9iKFttZXNzYWdlVG9Xcml0ZV0pKTsKICAgICAgICAgd3JpdGVyLm9ud3JpdGUgPSBkaWRX
cml0ZUZpbGU7CiAgICAgfTsKIH0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwJ
KHJldmlzaW9uIDExNTQ5NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTks
NyBAQCBmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVyKHdyaXRlcikKICAgICB9OwogICAgIHdyaXRl
ci5vbndyaXRlID0gZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
V2ViS2l0QmxvYkJ1aWxkZXIoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobWVzc2FnZVRvV3Jp
dGUpOwotICAgICAgICB3cml0ZXIud3JpdGUoYnVpbGRlci5nZXRCbG9iKCkpOworICAgICAgICB3
cml0ZXIud3JpdGUobmV3IEJsb2IoW21lc3NhZ2VUb1dyaXRlXSkpOwogICAgICAgICB3cml0ZXIu
b253cml0ZSA9IGRpZFdyaXRlRmlsZTsKICAgICB9OwogfQpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2Iu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2IuanMJKHJldmlzaW9uIDExNTQ5NSkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNv
dXJjZXMvc2VuZC1ibG9iLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0ICsxLDExIEBACiBmdW5j
dGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKQogewotICAgIHZhciBidWlsZGVy
ID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIkhlbGxvLCB3
b3JsZCEiKTsKLSAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7CisgICAgcmV0dXJuIG5ldyBC
bG9iKFsiSGVsbG8sIHdvcmxkISJdKTsKIH0KIAogZnVuY3Rpb24gY3JlYXRlRW1wdHlCbG9iKCkK
IHsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOwotICAgIHJldHVy
biBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW10pOwogfQogCiBmdW5j
dGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQpAQCAtMTYsOSArMTMs
NyBAQCBmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0CiAgICAgdmFyIGFy
cmF5ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1Njsg
KytpKQogICAgICAgICBhcnJheVtpXSA9IGk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0
QmxvYkJ1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZChhcnJheS5idWZmZXIpOwotICAgIHJl
dHVybiBidWlsZGVyLmdldEJsb2IoKTsKKyAgICByZXR1cm4gbmV3IEJsb2IoW2FycmF5LmJ1ZmZl
cl0pOwogfQogCiB2YXIgdXJsID0gIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rlc3Rz
L2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvY2hlY2stYmluYXJ5LW1lc3NhZ2VzIjsKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMTU0
OTUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCw3IEBA
IHdpbmRvdy5CZWZvcmVMb2FkRXZlbnQucHJvdG90eXBlLnByZXZlbnQKIHdpbmRvdy5CZWZvcmVM
b2FkRXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBbZnVuY3Rpb25dCiB3
aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFnYXRpb24gW2Z1bmN0aW9u
XQogd2luZG93LkJsb2IgW29iamVjdCBCbG9iQ29uc3RydWN0b3JdCit3aW5kb3cuQmxvYi5sZW5n
dGggW251bWJlcl0KIHdpbmRvdy5CbG9iLnByb3RvdHlwZSBbb2JqZWN0IEJsb2JQcm90b3R5cGVd
CiB3aW5kb3cuQm9vbGVhbiBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uIFtvYmplY3Qg
Q0RBVEFTZWN0aW9uQ29uc3RydWN0b3JdCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9ub2Jsb2JzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvbm9ibG9icy5odG1sCShyZXZpc2lvbiAxMTU0OTUpCisrKyBMYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9ub2Jsb2JzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEzICs1OCw5
IEBAIGZ1bmN0aW9uIHRlc3RCbG9iKCkKICAgICBkZWJ1ZygiIik7CiAgICAgZGVidWcoInRlc3RC
bG9iKCk6Iik7CiAKLSAgICBldmFsQW5kTG9nKCJCbG9iQnVpbGRlciA9IHdpbmRvdy5CbG9iQnVp
bGRlciB8fCB3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXIiKTsKLSAgICBzaG91bGRCZVRydWUoIkJs
b2JCdWlsZGVyICE9IG51bGwiKTsKICAgICBzaG91bGRCZVRydWUoIkZpbGVSZWFkZXIgIT0gbnVs
bCIpOwotICAgIGV2YWxBbmRMb2coImJ1aWxkZXIgPSBuZXcgQmxvYkJ1aWxkZXIoKSIpOwogICAg
IGV2YWxBbmRMb2coInRlc3RfY29udGVudCA9ICdUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyBvbmx5
IGEgdGVzdC4nIik7Ci0gICAgZXZhbEFuZExvZygiYnVpbGRlci5hcHBlbmQodGVzdF9jb250ZW50
KSIpOwotICAgIGV2YWxBbmRMb2coImJsb2IgPSBidWlsZGVyLmdldEJsb2IoKSIpOworICAgIGV2
YWxBbmRMb2coImJsb2IgPSBuZXcgQmxvYihbdGVzdF9jb250ZW50XSkiKTsKICAgICB2YWxpZGF0
ZUV4Y2VwdGlvbnMoImJsb2IiLCB0ZXN0RmlsZSk7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLmh0bWwJKHJldmlzaW9u
IDExNTQ5NSkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xv
bmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDEzICszNzYsOSBAQCBmdW5jdGlvbiB0ZXN0
QmxvYihjYWxsYmFjaykKICAgICBjYWxsYmFjaygpOwogICAgIHJldHVybjsKIAotICAgIGV2YWxB
bmRMb2coIkJsb2JCdWlsZGVyID0gc2VsZi5CbG9iQnVpbGRlciB8fCBzZWxmLldlYktpdEJsb2JC
dWlsZGVyIik7Ci0gICAgc2hvdWxkQmVUcnVlKCJCbG9iQnVpbGRlciAhPSBudWxsIik7CiAgICAg
c2hvdWxkQmVUcnVlKCJGaWxlUmVhZGVyICE9IG51bGwiKTsKLSAgICBldmFsQW5kTG9nKCJidWls
ZGVyID0gbmV3IEJsb2JCdWlsZGVyKCkiKTsKICAgICBldmFsQW5kTG9nKCJ0ZXN0X2NvbnRlbnQg
PSAnVGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgb25seSBhIHRlc3QuJyIpOwotICAgIGV2YWxBbmRM
b2coImJ1aWxkZXIuYXBwZW5kKHRlc3RfY29udGVudCkiKTsKLSAgICBldmFsQW5kTG9nKCJ0ZXN0
X2RhdGEgPSBidWlsZGVyLmdldEJsb2IoKSIpOworICAgIGV2YWxBbmRMb2coInRlc3RfZGF0YSA9
IG5ldyBCbG9iKFt0ZXN0X2NvbnRlbnRdKSIpOwogICAgIHRlc3RWYWx1ZSh0ZXN0X2RhdGEsIGZ1
bmN0aW9uKHJlc3VsdCkgewogICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdDsKICAgICAgICAg
c2hvdWxkQmVUcnVlKCJ0ZXN0X2RhdGEgIT09IHJlc3VsdCIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139379</attachid>
            <date>2012-04-28 17:21:06 -0700</date>
            <delta_ts>2012-04-29 13:07:55 -0700</delta_ts>
            <desc>Patch addressing additional feedback.</desc>
            <filename>bug-84555-20120428172114.patch</filename>
            <type>text/plain</type>
            <size>14399</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTU4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA0LTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBCbG9i
IGNvbnN0cnVjdG9yIChQYXJ0IDIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NDU1NQorCisgICAgICAgIEFkZHJlc3MgYWRkaXRpb25hbCBmZWVkYmFj
ayBvbiBCbG9iIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgLSBBZGQgZXhjZXB0aW9uIHdoZW4gdGhl
IGRpY3Rpb25hcnkgaXMgbm90IGFuIG9iamVjdC4KKyAgICAgICAgLSBFbnN1cmUgdGhlIHByb3Bl
ciBvcmRlcmluZyBvZiBkaWN0aW9uYXJ5IGFjY2Vzcy4gVGVzdGVkIHZpYQorICAgICAgICAgIHRo
cm93aW5nIGV4Y2VwdGlvbnMgaW4gdG9TdHJpbmcsIGFuZCBlbnN1cmluZyBjb3JyZWN0IG9uZSBp
cworICAgICAgICAgIGZpcmVkIGZpcnN0LgorICAgICAgICAtIENoYW5nZWQgdHlwZSBvZiBleGNl
cHRpb24gdGhyb3cgZm9yIGludmFsaWQgZW51bWVyYXRpb24gdG8gYQorICAgICAgICAgIFR5cGVF
cnJvci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cGRhdGVkIGZhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rvci5odG1sIHRvIGJlIG1vcmUgY29tcHJl
aGVuc2l2ZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4QmxvYjo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisKIDIwMTItMDQtMjggIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBbmQgYWdhaW4uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHJldmlzaW9uIDExNTU4MikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDMyICs4MCwyOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
QmxvYkNvbnN0CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsKICAgICAgICAg
SlNWYWx1ZSBibG9iUHJvcGVydHlCYWdWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCi0gICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgaWYgdGhlIGJsb2JQcm9wZXJ0eUJhZyBpcyBu
b3QgYW4gb2JqZWN0PworICAgICAgICBpZiAoIWJsb2JQcm9wZXJ0eUJhZ1ZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiU2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlw
ZSBPYmplY3QiKSk7CiAKLSAgICAgICAgaWYgKGJsb2JQcm9wZXJ0eUJhZ1ZhbHVlLmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3
YXlzIHlpZWxkIGFuIG9iamVjdC4KLSAgICAgICAgICAgIEpTT2JqZWN0KiBibG9iUHJvcGVydHlC
YWdPYmplY3QgPSBibG9iUHJvcGVydHlCYWdWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICAgICAg
Ly8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0
LgorICAgICAgICBKU09iamVjdCogYmxvYlByb3BlcnR5QmFnT2JqZWN0ID0gYmxvYlByb3BlcnR5
QmFnVmFsdWUudG9PYmplY3QoZXhlYyk7CiAKLSAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGlj
dGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KLSAgICAgICAgICAg
IEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIGJsb2JQcm9wZXJ0eUJhZ09iamVjdCk7Cisg
ICAgICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxp
emVyIG9iamVjdC4KKyAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoZXhlYywgYmxvYlBy
b3BlcnR5QmFnT2JqZWN0KTsKIAotICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIHR5
cGUgcHJvcGVydHkuCi0gICAgICAgICAgICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUpOwot
ICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICAgICAgICAgIC8vIEF0
dGVtcHQgdG8gZ2V0IHRoZSBlbmRpbmdzIHByb3BlcnR5IGFuZCB2YWxpZGF0ZSBpdC4KLSAgICAg
ICAgICAgIGJvb2wgY29udGFpbnNFbmRpbmdzID0gZGljdGlvbmFyeS5nZXQoImVuZGluZ3MiLCBl
bmRpbmdzKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgICAg
ICAgICBpZiAoY29udGFpbnNFbmRpbmdzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVuZGluZ3Mg
IT0gInRyYW5zcGFyZW50IiAmJiBlbmRpbmdzICE9ICJuYXRpdmUiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTlZBTElEX1NUQVRFX0VSUik7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0
aGUgZW5kaW5ncyBwcm9wZXJ0eSBhbmQgdmFsaWRhdGUgaXQuCisgICAgICAgIGJvb2wgY29udGFp
bnNFbmRpbmdzID0gZGljdGlvbmFyeS5nZXQoImVuZGluZ3MiLCBlbmRpbmdzKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICBpZiAoY29udGFpbnNFbmRpbmdzKSB7Cisg
ICAgICAgICAgICBpZiAoZW5kaW5ncyAhPSAidHJhbnNwYXJlbnQiICYmIGVuZGluZ3MgIT0gIm5h
dGl2ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIlRoZSBlbmRpbmdzIHByb3BlcnR5IG11c3QgYmUgZWl0aGVyIFwidHJh
bnNwYXJlbnRcIiBvciBcIm5hdGl2ZVwiIikpOwogICAgICAgICB9CisKKyAgICAgICAgLy8gQXR0
ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJvcGVydHkuCisgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJ0
eXBlIiwgdHlwZSk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAg
QVNTRVJUKGVuZGluZ3MgPT0gInRyYW5zcGFyZW50IiB8fCBlbmRpbmdzID09ICJuYXRpdmUiKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JD
dXN0b20uY3BwCShyZXZpc2lvbiAxMTU1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTggKzc5LDE0
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEJsb2I6OmNvbnN0cnVjdG8KICAgICBpZiAoIWZp
cnN0QXJnLT5Jc0FycmF5KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJGaXJzdCBhcmd1
bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMgbm90IG9mIHR5cGUgQXJyYXkiLCBWOFByb3h5OjpU
eXBlRXJyb3IpOwogCi0gICAgRVhDRVBUSU9OX0JMT0NLKHY4OjpMb2NhbDx2ODo6QXJyYXk+LCBi
bG9iUGFydHMsIHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGZpcnN0QXJnKSk7Ci0KICAgICBT
dHJpbmcgdHlwZTsKICAgICBTdHJpbmcgZW5kaW5ncyA9ICJ0cmFuc3BhcmVudCI7CiAKLSAgICBp
ZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNPYmplY3QoKSkgewotICAgICAgICBE
aWN0aW9uYXJ5IGRpY3Rpb25hcnkoYXJnc1sxXSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAx
KSB7CisgICAgICAgIGlmICghYXJnc1sxXS0+SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJTZWNvbmQgYXJndW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yIGlzIG5vdCBv
ZiB0eXBlIE9iamVjdCIsIFY4UHJveHk6OlR5cGVFcnJvcik7CiAKLSAgICAgICAgdjg6OlRyeUNh
dGNoIHRyeUNhdGNoVHlwZTsKLSAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUiLCB0eXBlKTsK
LSAgICAgICAgaWYgKHRyeUNhdGNoVHlwZS5IYXNDYXVnaHQoKSkKLSAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKHRyeUNhdGNoVHlwZS5FeGNlcHRpb24oKSk7CisgICAgICAgIERpY3Rpb25h
cnkgZGljdGlvbmFyeShhcmdzWzFdKTsKIAogICAgICAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2hF
bmRpbmdzOwogICAgICAgICBib29sIGNvbnRhaW5zRW5kaW5ncyA9IGRpY3Rpb25hcnkuZ2V0KCJl
bmRpbmdzIiwgZW5kaW5ncyk7CkBAIC05OCwxNyArOTQsMjQgQEAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4QmxvYjo6Y29uc3RydWN0bwogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IodHJ5
Q2F0Y2hFbmRpbmdzLkV4Y2VwdGlvbigpKTsKIAogICAgICAgICBpZiAoY29udGFpbnNFbmRpbmdz
KSB7Ci0gICAgICAgICAgICBpZiAoZW5kaW5ncyAhPSAidHJhbnNwYXJlbnQiICYmIGVuZGluZ3Mg
IT0gIm5hdGl2ZSIpIHsKLSAgICAgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
SU5WQUxJRF9TVEFURV9FUlIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVu
ZGluZ3MgIT0gInRyYW5zcGFyZW50IiAmJiBlbmRpbmdzICE9ICJuYXRpdmUiKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJUaGUgZW5kaW5ncyBwcm9wZXJ0eSBtdXN0IGJlIGVp
dGhlciBcInRyYW5zcGFyZW50XCIgb3IgXCJuYXRpdmVcIiIsIFY4UHJveHk6OlR5cGVFcnJvcik7
CiAgICAgICAgIH0KKworICAgICAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2hUeXBlOworICAgICAg
ICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUpOworICAgICAgICBpZiAodHJ5Q2F0Y2hUeXBl
Lkhhc0NhdWdodCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IodHJ5Q2F0Y2hUeXBl
LkV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICBBU1NFUlQoZW5kaW5ncyA9PSAidHJhbnNwYXJl
bnQiIHx8IGVuZGluZ3MgPT0gIm5hdGl2ZSIpOwogCiAgICAgUmVmUHRyPFdlYktpdEJsb2JCdWls
ZGVyPiBibG9iQnVpbGRlciA9IFdlYktpdEJsb2JCdWlsZGVyOjpjcmVhdGUoKTsKLSAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgYmxvYlBhcnRzLT5MZW5ndGgoKTsgKytpKSB7CisKKyAgICBF
WENFUFRJT05fQkxPQ0sodjg6OkxvY2FsPHY4OjpBcnJheT4sIGJsb2JQYXJ0cywgdjg6OkxvY2Fs
PHY4OjpBcnJheT46OkNhc3QoZmlyc3RBcmcpKTsKKyAgICB1aW50MzJfdCBsZW5ndGggPSBibG9i
UGFydHMtPkxlbmd0aCgpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGl0ZW0gPSBibG9iUGFydHMtPkdl
dCh2ODo6VWludDMyOjpOZXcoaSkpOwogICAgICAgICBBU1NFUlQoIWl0ZW0uSXNFbXB0eSgpKTsK
ICNpZiBFTkFCTEUoQkxPQikKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTU4NykKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA0LTI4
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHRoZSBCbG9iIGNvbnN0cnVjdG9yIChQYXJ0IDIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU1NQorCisgICAgICAgIEFkZHJlc3MgYWRkaXRpb25h
bCBmZWVkYmFjayBvbiBCbG9iIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgLSBBZGQgZXhjZXB0aW9u
IHdoZW4gdGhlIGRpY3Rpb25hcnkgaXMgbm90IGFuIG9iamVjdC4KKyAgICAgICAgLSBFbnN1cmUg
dGhlIHByb3BlciBvcmRlcmluZyBvZiBkaWN0aW9uYXJ5IGFjY2Vzcy4gVGVzdGVkIHZpYQorICAg
ICAgICAgIHRocm93aW5nIGV4Y2VwdGlvbnMgaW4gdG9TdHJpbmcsIGFuZCBlbnN1cmluZyBjb3Jy
ZWN0IG9uZSBpcworICAgICAgICAgIGZpcmVkIGZpcnN0LgorICAgICAgICAtIENoYW5nZWQgdHlw
ZSBvZiBleGNlcHRpb24gdGhyb3cgZm9yIGludmFsaWQgZW51bWVyYXRpb24gdG8gYQorICAgICAg
ICAgIFR5cGVFcnJvci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvZmlsZXMvYmxvYi1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9maWxlcy9zY3JpcHQtdGVzdHMvYmxvYi1jb25zdHJ1Y3Rvci5qczoKKwogMjAx
Mi0wNC0yOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBzdXBw
b3J0IGZvciB0aGUgQmxvYiBjb25zdHJ1Y3RvcgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9maWxl
cy9ibG9iLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMTU1
ODIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2ItY29uc3RydWN0b3ItZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMywxOCArMjMsMjEgQEAgUEFTUyAobmV3IEJsb2IoW1td
XSkpLnNpemUgaXMgMAogUEFTUyAobmV3IEJsb2IoW3t9XSkpLnNpemUgaXMgMTUKIFBBU1MgKG5l
dyBCbG9iKFtkb2N1bWVudF0pKS5zaXplIGlzIDIxCiBQQVNTIChuZXcgQmxvYihbdG9TdHJpbmdp
bmdPYmpdKSkuc2l6ZSBpcyA4Ci1QQVNTIG5ldyBCbG9iKFt0aHJvd2luZ09ial0pIHRocmV3IGV4
Y2VwdGlvbiBlcnJvci4KK1BBU1MgbmV3IEJsb2IoW3Rocm93aW5nT2JqXSkgdGhyZXcgZXhjZXB0
aW9uIEVycm9yLgogUEFTUyAobmV3IEJsb2IoW10sIHt1bmtub3duS2V5Oid2YWx1ZSd9KSkgaW5z
dGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCi1QQVNTIG5ldyBCbG9iKFtdLCB7ZW5kaW5nczon
aWxsZWdhbFZhbHVlJ30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9TVEFURV9FUlI6
IERPTSBFeGNlcHRpb24gMTEuCi1QQVNTIG5ldyBCbG9iKFtdLCB7ZW5kaW5nczp0aHJvd2luZ09i
an0pIHRocmV3IGV4Y2VwdGlvbiBlcnJvci4KLVBBU1MgbmV3IEJsb2IoW10sIHt0eXBlOnRocm93
aW5nT2JqfSkgdGhyZXcgZXhjZXB0aW9uIGVycm9yLgotUEFTUyAobmV3IEJsb2IoW10sIG51bGwp
KSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKLVBBU1MgKG5ldyBCbG9iKFtdLCB1bmRl
ZmluZWQpKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKLVBBU1MgKG5ldyBCbG9iKFtd
LCAxMjMpKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKLVBBU1MgKG5ldyBCbG9iKFtd
LCAxMjMuNCkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyBuZXcgQmxvYihb
XSwge2VuZGluZ3M6J2lsbGVnYWxWYWx1ZSd9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBU
aGUgZW5kaW5ncyBwcm9wZXJ0eSBtdXN0IGJlIGVpdGhlciAidHJhbnNwYXJlbnQiIG9yICJuYXRp
dmUiLgorUEFTUyBuZXcgQmxvYihbXSwge2VuZGluZ3M6dGhyb3dpbmdPYmp9KSB0aHJldyBleGNl
cHRpb24gRXJyb3IuCitQQVNTIG5ldyBCbG9iKFtdLCB7dHlwZTp0aHJvd2luZ09ian0pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvci4KK1BBU1MgbmV3IEJsb2IoW10sIHtlbmRpbmdzOnRocm93aW5nT2Jq
MSwgdHlwZTp0aHJvd2luZ09iajJ9KSB0aHJldyBleGNlcHRpb24gRXJyb3IgMS4KK1BBU1MgbmV3
IEJsb2IoW10sIHt0eXBlOnRocm93aW5nT2JqMiwgZW5kaW5nczp0aHJvd2luZ09iajF9KSB0aHJl
dyBleGNlcHRpb24gRXJyb3IgMS4KK1BBU1MgbmV3IEJsb2IoW10sIHt0eXBlOnRocm93aW5nT2Jq
MiwgZW5kaW5nczonaWxsZWdhbCd9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgZW5k
aW5ncyBwcm9wZXJ0eSBtdXN0IGJlIGVpdGhlciAidHJhbnNwYXJlbnQiIG9yICJuYXRpdmUiLgor
UEFTUyAobmV3IEJsb2IoW10sIG51bGwpKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IFNlY29uZCBhcmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMg
bm90IG9mIHR5cGUgT2JqZWN0LgorUEFTUyAobmV3IEJsb2IoW10sIHVuZGVmaW5lZCkpIGluc3Rh
bmNlb2Ygd2luZG93LkJsb2IgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogU2Vjb25kIGFyZ3Vt
ZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBPYmplY3QuCitQQVNTIChuZXcg
QmxvYihbXSwgMTIzKSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBTZWNvbmQgYXJndW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yIGlzIG5vdCBvZiB0eXBl
IE9iamVjdC4KK1BBU1MgKG5ldyBCbG9iKFtdLCAxMjMuNCkpIGluc3RhbmNlb2Ygd2luZG93LkJs
b2IgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogU2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBjb25z
dHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBPYmplY3QuCitQQVNTIChuZXcgQmxvYihbXSwgdHJ1ZSkp
IGluc3RhbmNlb2Ygd2luZG93LkJsb2IgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogU2Vjb25k
IGFyZ3VtZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBPYmplY3QuCitQQVNT
IChuZXcgQmxvYihbXSwgJ2FiYycpKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IFNlY29uZCBhcmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMgbm90
IG9mIHR5cGUgT2JqZWN0LgogUEFTUyAobmV3IEJsb2IoW10sIFtdKSkgaW5zdGFuY2VvZiB3aW5k
b3cuQmxvYiBpcyB0cnVlCi1QQVNTIChuZXcgQmxvYihbXSwgdHJ1ZSkpIGluc3RhbmNlb2Ygd2lu
ZG93LkJsb2IgaXMgdHJ1ZQotUEFTUyAobmV3IEJsb2IoW10sICdhYmMnKSkgaW5zdGFuY2VvZiB3
aW5kb3cuQmxvYiBpcyB0cnVlCiBQQVNTIChuZXcgQmxvYihbXSwgL2FiYy8pKSBpbnN0YW5jZW9m
IHdpbmRvdy5CbG9iIGlzIHRydWUKIFBBU1MgKG5ldyBCbG9iKFtdLCBmdW5jdGlvbiAoKSB7fSkp
IGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQogUEFTUyAobmV3IEJsb2IoW10sIHt0eXBl
Oid0ZXh0L2h0bWwnfSkpLnR5cGUgaXMgJ3RleHQvaHRtbCcKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZmlsZXMvc2NyaXB0LXRlc3RzL2Jsb2ItY29uc3RydWN0b3IuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9zY3JpcHQtdGVzdHMvYmxvYi1jb25zdHJ1Y3Rvci5qcwko
cmV2aXNpb24gMTE1NTgyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9zY3JpcHQtdGVzdHMv
YmxvYi1jb25zdHJ1Y3Rvci5qcwkod29ya2luZyBjb3B5KQpAQCAtOSw5ICs5LDkgQEAgc2hvdWxk
QmVUcnVlKCIobmV3IEJsb2IoWydoZWxsbyddLCB7dHlwZQogc2hvdWxkQmVUcnVlKCIobmV3IEJs
b2IoWydoZWxsbyddLCB7dHlwZTondGV4dC9odG1sJywgZW5kaW5nczonbmF0aXZlJ30pKSBpbnN0
YW5jZW9mIHdpbmRvdy5CbG9iIik7CiBzaG91bGRCZVRydWUoIihuZXcgQmxvYihbJ2hlbGxvJ10s
IHt0eXBlOid0ZXh0L2h0bWwnLCBlbmRpbmdzOid0cmFuc3BhcmVudCd9KSkgaW5zdGFuY2VvZiB3
aW5kb3cuQmxvYiIpOwogCi0vLyBUZXN0IHNvbWUgZXJyb3IgY2FzZXMKLXNob3VsZFRocm93KCJu
ZXcgQmxvYignaGVsbG8nKSIpOwotc2hvdWxkVGhyb3coIm5ldyBCbG9iKDApIik7CisvLyBUZXN0
IGludmFsaWQgYmxvYiBwYXJ0cworc2hvdWxkVGhyb3coIm5ldyBCbG9iKCdoZWxsbycpIiwgIidU
eXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlw
ZSBBcnJheSciKTsKK3Nob3VsZFRocm93KCJuZXcgQmxvYigwKSIsICInVHlwZUVycm9yOiBGaXJz
dCBhcmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMgbm90IG9mIHR5cGUgQXJyYXknIik7CiAK
IC8vIFRlc3QgdmFsaWQgYmxvYiBwYXJ0cy4KIHNob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdKSkg
aW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOwpAQCAtMzAsMjcgKzMwLDMzIEBAIHNob3VsZEJlKCIo
bmV3IEJsb2IoW2RvY3VtZW50XSkpLnNpemUiLCAKIHZhciB0b1N0cmluZ2luZ09iaiA9IHsgdG9T
dHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4gIkEgc3RyaW5nIjsgfSB9Owogc2hvdWxkQmUoIihu
ZXcgQmxvYihbdG9TdHJpbmdpbmdPYmpdKSkuc2l6ZSIsICI4Iik7CiAKLXZhciB0aHJvd2luZ09i
aiA9IHsgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyB0aHJvdyAiZXJyb3IiOyB9IH07Ci1zaG91bGRU
aHJvdygibmV3IEJsb2IoW3Rocm93aW5nT2JqXSkiKTsKLQordmFyIHRocm93aW5nT2JqID0geyB0
b1N0cmluZzogZnVuY3Rpb24oKSB7IHRocm93ICJFcnJvciI7IH0gfTsKK3Nob3VsZFRocm93KCJu
ZXcgQmxvYihbdGhyb3dpbmdPYmpdKSIsICInRXJyb3InIik7CiAKIC8vIFRlc3Qgc29tZSBpbnZh
bGlkIHByb3BlcnR5IGJhZ3MKIHNob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdLCB7dW5rbm93bktl
eTondmFsdWUnfSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsgICAgLy8gSWdub3JlIGludmFs
aWQga2V5cwotc2hvdWxkVGhyb3coIm5ldyBCbG9iKFtdLCB7ZW5kaW5nczonaWxsZWdhbFZhbHVl
J30pIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdyBmb3IgaW52YWxpZCB2YWx1
ZSB0byBlbmRpbmdzCi1zaG91bGRUaHJvdygibmV3IEJsb2IoW10sIHtlbmRpbmdzOnRocm93aW5n
T2JqfSkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocm93cyBkdXJpbmcgdG9T
dHJpbmcKLXNob3VsZFRocm93KCJuZXcgQmxvYihbXSwge3R5cGU6dGhyb3dpbmdPYmp9KSIpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3dzIGR1cmluZyB0b1N0cmluZwot
Ci1zaG91bGRCZVRydWUoIihuZXcgQmxvYihbXSwgbnVsbCkpIGluc3RhbmNlb2Ygd2luZG93LkJs
b2IiKTsKLXNob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdLCB1bmRlZmluZWQpKSBpbnN0YW5jZW9m
IHdpbmRvdy5CbG9iIik7Ci1zaG91bGRCZVRydWUoIihuZXcgQmxvYihbXSwgMTIzKSkgaW5zdGFu
Y2VvZiB3aW5kb3cuQmxvYiIpOwotc2hvdWxkQmVUcnVlKCIobmV3IEJsb2IoW10sIDEyMy40KSkg
aW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworc2hvdWxkVGhyb3coIm5ldyBCbG9iKFtdLCB7ZW5k
aW5nczonaWxsZWdhbFZhbHVlJ30pIiwgIidUeXBlRXJyb3I6IFRoZSBlbmRpbmdzIHByb3BlcnR5
IG11c3QgYmUgZWl0aGVyIFwidHJhbnNwYXJlbnRcIiBvciBcIm5hdGl2ZVwiJyIpOworc2hvdWxk
VGhyb3coIm5ldyBCbG9iKFtdLCB7ZW5kaW5nczp0aHJvd2luZ09ian0pIiwgIidFcnJvciciKTsK
K3Nob3VsZFRocm93KCJuZXcgQmxvYihbXSwge3R5cGU6dGhyb3dpbmdPYmp9KSIsICInRXJyb3In
Iik7CisKKy8vIFRlc3QgdGhhdCBvcmRlciBvZiBwcm9wZXJ0eSBiYWcgZXZhbHVhdGlvbiBpcyBs
ZXhpZ3JhcGhpY2FsCit2YXIgdGhyb3dpbmdPYmoxID0geyB0b1N0cmluZzogZnVuY3Rpb24oKSB7
IHRocm93ICJFcnJvciAxIjsgfSB9OwordmFyIHRocm93aW5nT2JqMiA9IHsgdG9TdHJpbmc6IGZ1
bmN0aW9uKCkgeyB0aHJvdyAiRXJyb3IgMiI7IH0gfTsKK3Nob3VsZFRocm93KCJuZXcgQmxvYihb
XSwge2VuZGluZ3M6dGhyb3dpbmdPYmoxLCB0eXBlOnRocm93aW5nT2JqMn0pIiwgIidFcnJvciAx
JyIpOworc2hvdWxkVGhyb3coIm5ldyBCbG9iKFtdLCB7dHlwZTp0aHJvd2luZ09iajIsIGVuZGlu
Z3M6dGhyb3dpbmdPYmoxfSkiLCAiJ0Vycm9yIDEnIik7CitzaG91bGRUaHJvdygibmV3IEJsb2Io
W10sIHt0eXBlOnRocm93aW5nT2JqMiwgZW5kaW5nczonaWxsZWdhbCd9KSIsICInVHlwZUVycm9y
OiBUaGUgZW5kaW5ncyBwcm9wZXJ0eSBtdXN0IGJlIGVpdGhlciBcInRyYW5zcGFyZW50XCIgb3Ig
XCJuYXRpdmVcIiciKTsKKworLy8gVGVzdCB2YXJpb3VzIG5vbi1vYmplY3QgbGl0ZXJhbHMgYmVp
bmcgdXNlZCBhcyBwcm9wZXJ0eSBiYWdzCitzaG91bGRUaHJvdygiKG5ldyBCbG9iKFtdLCBudWxs
KSkgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIsICInVHlwZUVycm9yOiBTZWNvbmQgYXJndW1lbnQg
b2YgdGhlIGNvbnN0cnVjdG9yIGlzIG5vdCBvZiB0eXBlIE9iamVjdCciKTsKK3Nob3VsZFRocm93
KCIobmV3IEJsb2IoW10sIHVuZGVmaW5lZCkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiLCAiJ1R5
cGVFcnJvcjogU2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlw
ZSBPYmplY3QnIik7CitzaG91bGRUaHJvdygiKG5ldyBCbG9iKFtdLCAxMjMpKSBpbnN0YW5jZW9m
IHdpbmRvdy5CbG9iIiwgIidUeXBlRXJyb3I6IFNlY29uZCBhcmd1bWVudCBvZiB0aGUgY29uc3Ry
dWN0b3IgaXMgbm90IG9mIHR5cGUgT2JqZWN0JyIpOworc2hvdWxkVGhyb3coIihuZXcgQmxvYihb
XSwgMTIzLjQpKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIiwgIidUeXBlRXJyb3I6IFNlY29uZCBh
cmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IgaXMgbm90IG9mIHR5cGUgT2JqZWN0JyIpOworc2hv
dWxkVGhyb3coIihuZXcgQmxvYihbXSwgdHJ1ZSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiLCAi
J1R5cGVFcnJvcjogU2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBub3Qgb2Yg
dHlwZSBPYmplY3QnIik7CitzaG91bGRUaHJvdygiKG5ldyBCbG9iKFtdLCAnYWJjJykpIGluc3Rh
bmNlb2Ygd2luZG93LkJsb2IiLCAiJ1R5cGVFcnJvcjogU2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBj
b25zdHJ1Y3RvciBpcyBub3Qgb2YgdHlwZSBPYmplY3QnIik7CiBzaG91bGRCZVRydWUoIihuZXcg
QmxvYihbXSwgW10pKSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7Ci1zaG91bGRCZVRydWUoIihu
ZXcgQmxvYihbXSwgdHJ1ZSkpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKLXNob3VsZEJlVHJ1
ZSgiKG5ldyBCbG9iKFtdLCAnYWJjJykpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKIHNob3Vs
ZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdLCAvYWJjLykpIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsK
IHNob3VsZEJlVHJ1ZSgiKG5ldyBCbG9iKFtdLCBmdW5jdGlvbiAoKSB7fSkpIGluc3RhbmNlb2Yg
d2luZG93LkJsb2IiKTsKIAotCiAvLyBUZXN0IHRoYXQgdGhlIHR5cGUvc2l6ZSBpcyBjb3JyZWN0
bHkgYWRkZWQgdG8gdGhlIEJsb2IKIHNob3VsZEJlKCIobmV3IEJsb2IoW10sIHt0eXBlOid0ZXh0
L2h0bWwnfSkpLnR5cGUiLCAiJ3RleHQvaHRtbCciKTsKIHNob3VsZEJlKCIobmV3IEJsb2IoW10s
IHt0eXBlOid0ZXh0L2h0bWwnfSkpLnNpemUiLCAiMCIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>