<?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>77295</bug_id>
          
          <creation_ts>2012-01-29 02:02:08 -0800</creation_ts>
          <short_desc>V8 idl code generator doesn&apos;t handle [CachedAttribute] on SerializedScriptValue attributes.</short_desc>
          <delta_ts>2012-02-02 16:48:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>76035</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Pablo Flouret">pf</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>544724</commentid>
    <comment_count>0</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-29 02:02:08 -0800</bug_when>
    <thetext>Actually, i looks like the SerializedScriptValue attribute case is hackishly handled for just one attribute of the kind, which is deserialized once in the constructor, with no getter generated for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544725</commentid>
    <comment_count>1</comment_count>
      <attachid>124462</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-29 02:14:26 -0800</bug_when>
    <thetext>Created attachment 124462
Proof of concept patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544726</commentid>
    <comment_count>2</comment_count>
      <attachid>124462</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-29 02:19:50 -0800</bug_when>
    <thetext>Comment on attachment 124462
Proof of concept patch

Came up while looking at the history.state stuff, the JSC generator generates code for [CachedAttribute] SerializedScriptValue attributes.

Rough patch as a possible solution, it probably needs more work to handle more [InitializedByConstructor] attributes (and i&apos;m not sure hijacking that extended-attribute is even a good idea), and i haven&apos;t looked into the setters case.

I tried going with ForceSet() instead of using hidden attributes but i didn&apos;t find a way to reset the cached value in that case (would probably need to set the accessor function again, but it&apos;s internal to the v8 generated file), and a way to invalidate the value is needed for the history.state thing.

Ideas/comments welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544727</commentid>
    <comment_count>3</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-29 02:22:33 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 124462 [details])
&gt; [...]
&gt; I tried going with ForceSet() instead of using hidden attributes but i didn&apos;t find a way to reset the cached value in that case (would probably need to set the accessor function again, but it&apos;s internal to the v8 generated file), and a way to invalidate the value is needed for the history.state thing.
&gt; 

s/hidden attributes/hidden values/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544728</commentid>
    <comment_count>4</comment_count>
      <attachid>124462</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-29 02:39:17 -0800</bug_when>
    <thetext>Comment on attachment 124462
Proof of concept patch

Attachment 124462 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11369253</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544788</commentid>
    <comment_count>5</comment_count>
      <attachid>124462</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-29 15:52:04 -0800</bug_when>
    <thetext>Comment on attachment 124462
Proof of concept patch

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

&gt; Source/WebCore/Modules/intents/Intent.idl:34
&gt; +        readonly attribute [InitializedByConstructor] SerializedScriptValue data;

You do not need to add [InitializedByConstructor] here. Sorry, [InitializedByConstructor] is mis-renamed and it should be [InitializedByEventConstructor]. It is used by Event constructors only (i.e. [ConstructorTemplate=Event]). I&apos;ll rename it later.

Would you write a patch, ignoring [InitializedByConstructor] cases? Then, the patch would become much simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544800</commentid>
    <comment_count>6</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-29 17:19:58 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 124462 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124462&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/intents/Intent.idl:34
&gt; &gt; +        readonly attribute [InitializedByConstructor] SerializedScriptValue data;
&gt; 
&gt; You do not need to add [InitializedByConstructor] here. Sorry, [InitializedByConstructor] is mis-renamed and it should be [InitializedByEventConstructor]. It is used by Event constructors only (i.e. [ConstructorTemplate=Event]). I&apos;ll rename it later.
&gt; 
&gt; Would you write a patch, ignoring [InitializedByConstructor] cases? Then, the patch would become much simpler.

Yeah, [InitializedByConstructor] is wrongly used here, that&apos;s what i meant when i said i was hijacking the meaning, but i was somehow trying to preserve the behavior introduced by https://bugs.webkit.org/show_bug.cgi?id=36892 and https://bugs.webkit.org/show_bug.cgi?id=75641

What i&apos;m trying to do is something more akin to what the JSC generator does for SerializedScriptValue attributes. It generates getters/setters that deserialize the value when they&apos;re called (and cache the deserialized value in a member in the object if [CachedAttribute] is specified), which is not done in the v8 generator.
Instead there&apos;s code to deserialize one (and only one) SerializedScriptValue attribute upfront in the constructor and ForceSet:tting it in the object, avoiding the generation and use of getters/setters.
If i understood things correctly this was initially set up like that because MessageEvent needed the data deserialized in the right context (which presumably would not be the correct one if deserialized lazily in a getter?). It looks like the webintents case would be handled correctly.

Do you think we can do something to not special case what MessageEvent needs so that we can generate the getter/setter functions and do everything the same way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544858</commentid>
    <comment_count>7</comment_count>
      <attachid>124462</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-29 20:51:38 -0800</bug_when>
    <thetext>Comment on attachment 124462
Proof of concept patch

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

&gt;&gt;&gt; Source/WebCore/Modules/intents/Intent.idl:34
&gt;&gt;&gt; +        readonly attribute [InitializedByConstructor] SerializedScriptValue data;
&gt;&gt; 
&gt;&gt; You do not need to add [InitializedByConstructor] here. Sorry, [InitializedByConstructor] is mis-renamed and it should be [InitializedByEventConstructor]. It is used by Event constructors only (i.e. [ConstructorTemplate=Event]). I&apos;ll rename it later.
&gt;&gt; 
&gt;&gt; Would you write a patch, ignoring [InitializedByConstructor] cases? Then, the patch would become much simpler.
&gt; 
&gt; Yeah, [InitializedByConstructor] is wrongly used here, that&apos;s what i meant when i said i was hijacking the meaning, but i was somehow trying to preserve the behavior introduced by https://bugs.webkit.org/show_bug.cgi?id=36892 and https://bugs.webkit.org/show_bug.cgi?id=75641
&gt; 
&gt; What i&apos;m trying to do is something more akin to what the JSC generator does for SerializedScriptValue attributes. It generates getters/setters that deserialize the value when they&apos;re called (and cache the deserialized value in a member in the object if [CachedAttribute] is specified), which is not done in the v8 generator.
&gt; Instead there&apos;s code to deserialize one (and only one) SerializedScriptValue attribute upfront in the constructor and ForceSet:tting it in the object, avoiding the generation and use of getters/setters.
&gt; If i understood things correctly this was initially set up like that because MessageEvent needed the data deserialized in the right context (which presumably would not be the correct one if deserialized lazily in a getter?). It looks like the webintents case would be handled correctly.
&gt; 
&gt; Do you think we can do something to not special case what MessageEvent needs so that we can generate the getter/setter functions and do everything the same way?

Ah, I got it. But still I have some questions.

Why is this line not &quot;readonly attribute [CachedAttribute] SerializedScriptValue data&quot;? What you want to do is to make it work, isn&apos;t it?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:869
&gt; +        if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot; &amp;&amp; $attrExt-&gt;{&quot;CachedAttribute&quot;}) {
&gt; +            push(@implContentDecls, &lt;&lt;END);
&gt; +    v8::Handle&lt;v8::String&gt; propertyName = v8::String::NewSymbol(&quot;${attrName}&quot;);
&gt; +    v8::Handle&lt;v8::Value&gt; value = info.Holder()-&gt;GetHiddenValue(propertyName);
&gt; +    if (!value.IsEmpty())
&gt; +        return value;
&gt; +END
&gt; +        }

This looks fine.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1025
&gt; +        if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot; &amp;&amp; $attrExt-&gt;{&quot;CachedAttribute&quot;}) {
&gt; +            my $getterFunc = $codeGenerator-&gt;WK_lcfirst($attribute-&gt;signature-&gt;name);
&gt; +            push(@implContentDecls, &lt;&lt;END);
&gt; +    SerializedScriptValue* serialized = imp-&gt;${getterFunc}();
&gt; +    value = serialized ? serialized-&gt;deserialize() : v8::Handle&lt;v8::Value&gt;(v8::Null());
&gt; +    info.Holder()-&gt;SetHiddenValue(propertyName, value);
&gt; +    return value;
&gt; +END
&gt; +        } else {
&gt; +            push(@implContentDecls, &quot;    &quot; . ReturnNativeToJSValue($attribute-&gt;signature, $result, &quot;    &quot;).&quot;;\n&quot;);
&gt; +        }

This also looks fine.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1962
&gt; -    # Attributes of type SerializedScriptValue are set in the
&gt; +    # Attributes of type SerializedScriptValue marked as [InitializedByConstructor] are set in the
&gt;      # constructor and don&apos;t require callbacks.
&gt; -    return if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot;);
&gt; +    return if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot; &amp;&amp; $attrExt-&gt;{&quot;InitializedByConstructor&quot;});

But I am not still sure why we need these changes about [InitializedByConstructor]. I am expecting that the changes of two &quot;if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot; &amp;&amp; $attrExt-&gt;{&quot;CachedAttribute&quot;}) { ... }&quot; (i.e. line 862 -- 869 and 1015 -- 1025) would be enough to cache attributes. With the two changes, the attribute will be cached when the getter/setter is called at the first time.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2325
&gt; +            if ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;InitializedByConstructor&quot;}) {
&gt; +                die &quot;Only one attribute of type SerializedScriptValue [InitializedByConstructor] supported&quot; if $serializedAttribute;
&gt; +                $serializedAttribute = $attribute;
&gt; +                next;
&gt; +            }

Ditto.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:136
&gt; +    { &quot;serializedScriptValueAttr&quot;, DontDelete | ReadOnly, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjSerializedScriptValueAttr), (intptr_t)0, NoIntrinsic },
&gt; +    { &quot;cachedSerializedScriptValueAttr&quot;, DontDelete | ReadOnly, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCachedSerializedScriptValueAttr), (intptr_t)0, NoIntrinsic },

Would you please make a patch with the &quot;right&quot; run-bindings-tests results? You didn&apos;t touch CodeGeneratorJS.pm and thus JSTestObj.cpp should not be changed. Maybe you need to rebaseline run-bindings-tests before you make a patch. The run-bindings-tests results in WebKit trunk are sometimes wrong, since people are likely to forget to update the results:-) (The run-bindings-tests results are just for reviews and the build bots do not check their failures.)

&gt; Source/WebCore/bindings/scripts/test/TestObj.idl:155
&gt; +
&gt; +        readonly attribute SerializedScriptValue serializedScriptValueAttr;
&gt; +        readonly attribute [CachedAttribute] SerializedScriptValue cachedSerializedScriptValueAttr;

It might be better to put these tests in TestSerializedScriptValueInterface.idl.

Also, please remove &quot;readonly&quot; in order to test its setter.

&gt; Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl:35
&gt; -        readonly attribute SerializedScriptValue value;
&gt; +        readonly attribute [InitializedByConstructor] SerializedScriptValue value;

Where are the test results (i.e. test/V8/V8TestSerializedScriptValueInterface.cpp)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544862</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-29 20:55:54 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 124462 [details])
&gt; I tried going with ForceSet() instead of using hidden attributes but i didn&apos;t find a way to reset the cached value in that case (would probably need to set the accessor function again, but it&apos;s internal to the v8 generated file), and a way to invalidate the value is needed for the history.state thing.
&gt; 
&gt; Ideas/comments welcome.

Using GetHiddenValue()/SetHiddenValue() makes sense to me.

(FYI: Rather, I would object to use ForceSet() here. We are planning to move DOM attributes from a DOM object to a JS prototype chain (https://bugs.webkit.org/show_bug.cgi?id=75297), but ForceSet() makes it difficult (or impossible?). I cannot move MessageEvent.data from a DOM object to a JS prototype chain because it uses ForceSet()...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545371</commentid>
    <comment_count>9</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-30 13:39:21 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 124462 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124462&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/intents/Intent.idl:34
&gt; &gt;&gt;&gt; +        readonly attribute [InitializedByConstructor] SerializedScriptValue data;
&gt; &gt;&gt; 
&gt; &gt;&gt; You do not need to add [InitializedByConstructor] here. Sorry, [InitializedByConstructor] is mis-renamed and it should be [InitializedByEventConstructor]. It is used by Event constructors only (i.e. [ConstructorTemplate=Event]). I&apos;ll rename it later.
&gt; &gt;&gt; 
&gt; &gt;&gt; Would you write a patch, ignoring [InitializedByConstructor] cases? Then, the patch would become much simpler.
&gt; &gt; 
&gt; &gt; Yeah, [InitializedByConstructor] is wrongly used here, that&apos;s what i meant when i said i was hijacking the meaning, but i was somehow trying to preserve the behavior introduced by https://bugs.webkit.org/show_bug.cgi?id=36892 and https://bugs.webkit.org/show_bug.cgi?id=75641
&gt; &gt; 
&gt; &gt; What i&apos;m trying to do is something more akin to what the JSC generator does for SerializedScriptValue attributes. It generates getters/setters that deserialize the value when they&apos;re called (and cache the deserialized value in a member in the object if [CachedAttribute] is specified), which is not done in the v8 generator.
&gt; &gt; Instead there&apos;s code to deserialize one (and only one) SerializedScriptValue attribute upfront in the constructor and ForceSet:tting it in the object, avoiding the generation and use of getters/setters.
&gt; &gt; If i understood things correctly this was initially set up like that because MessageEvent needed the data deserialized in the right context (which presumably would not be the correct one if deserialized lazily in a getter?). It looks like the webintents case would be handled correctly.
&gt; &gt; 
&gt; &gt; Do you think we can do something to not special case what MessageEvent needs so that we can generate the getter/setter functions and do everything the same way?
&gt; 
&gt; Ah, I got it. But still I have some questions.
&gt; 
&gt; Why is this line not &quot;readonly attribute [CachedAttribute] SerializedScriptValue data&quot;? What you want to do is to make it work, isn&apos;t it?

I was trying to preserve a behavior that i thought was introduced just for MessageEvent, but that one is actually using custom getter/setters so i&apos;ll just get rid of the whole [InitializedByConstructor] faux handling and make a proper patch. Sorry for the misunderstanding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545471</commentid>
    <comment_count>10</comment_count>
      <attachid>124611</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-30 15:17:16 -0800</bug_when>
    <thetext>Created attachment 124611
Better patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545477</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 15:21:35 -0800</bug_when>
    <thetext>Attachment 124611 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:76:  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/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:89:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:100:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:113:  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/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:126:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 5 in 12 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>548218</commentid>
    <comment_count>12</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-02 16:02:54 -0800</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548228</commentid>
    <comment_count>13</comment_count>
      <attachid>124611</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-02 16:18:35 -0800</bug_when>
    <thetext>Comment on attachment 124611
Better patch

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

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:88
&gt; +    info.Holder()-&gt;DeleteHiddenValue(v8::String::NewSymbol(&quot;cachedValue&quot;)); // Invalidate the cached value.

Why don&apos;t you set the new value by SetHiddenValue(), instead of invalidating the current value?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548246</commentid>
    <comment_count>14</comment_count>
      <attachid>124611</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-02 16:34:01 -0800</bug_when>
    <thetext>Comment on attachment 124611
Better patch

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

&gt;&gt; Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:88
&gt;&gt; +    info.Holder()-&gt;DeleteHiddenValue(v8::String::NewSymbol(&quot;cachedValue&quot;)); // Invalidate the cached value.
&gt; 
&gt; Why don&apos;t you set the new value by SetHiddenValue(), instead of invalidating the current value?

We&apos;d need to deserialize it, i figured it would be better to do that lazily when it&apos;s requested (i think the JSC generator does it like this as well). Also, (using this case as an example) we&apos;d need to assume that v == imp-&gt;getCachedValue(), otherwise we&apos;d need to call imp-&gt;getCachedValue() before deserializing, and by that point we might as well just let the getter do its job.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548247</commentid>
    <comment_count>15</comment_count>
      <attachid>124611</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-02 16:38:26 -0800</bug_when>
    <thetext>Comment on attachment 124611
Better patch

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

Feel free to ping me if I am missing a review.

&gt;&gt;&gt; Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:88
&gt;&gt;&gt; +    info.Holder()-&gt;DeleteHiddenValue(v8::String::NewSymbol(&quot;cachedValue&quot;)); // Invalidate the cached value.
&gt;&gt; 
&gt;&gt; Why don&apos;t you set the new value by SetHiddenValue(), instead of invalidating the current value?
&gt; 
&gt; We&apos;d need to deserialize it, i figured it would be better to do that lazily when it&apos;s requested (i think the JSC generator does it like this as well). Also, (using this case as an example) we&apos;d need to assume that v == imp-&gt;getCachedValue(), otherwise we&apos;d need to call imp-&gt;getCachedValue() before deserializing, and by that point we might as well just let the getter do its job.

Makes sense!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548248</commentid>
    <comment_count>16</comment_count>
      <attachid>124611</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-02 16:39:31 -0800</bug_when>
    <thetext>Comment on attachment 124611
Better patch

Let me land this patch manually, to avoid style check errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548250</commentid>
    <comment_count>17</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-02 16:40:21 -0800</bug_when>
    <thetext>Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548254</commentid>
    <comment_count>18</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-02 16:48:09 -0800</bug_when>
    <thetext>Committed r106605: &lt;http://trac.webkit.org/changeset/106605&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124462</attachid>
            <date>2012-01-29 02:14:26 -0800</date>
            <delta_ts>2012-01-30 15:17:11 -0800</delta_ts>
            <desc>Proof of concept patch</desc>
            <filename>bug-77295-20120129021425.patch</filename>
            <type>text/plain</type>
            <size>17173</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI2NzY3MGZjMjU3YjEx
ODczOTc1M2RlNDNhOTk3NDQ5MWMyMjRhMC4uYmNiOWVjYjk0OWYwYzg0MDM3NzE5NWQ5YTJhNjg4
ZjQ5NDViYTdiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAxLTI5ICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBWOCBpZGwgY29kZSBn
ZW5lcmF0b3IgZG9lc24ndCBoYW5kbGUgW0NhY2hlZEF0dHJpYnV0ZV0gb24gU2VyaWFsaXplZFNj
cmlwdFZhbHVlIGF0dHJpYnV0ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NzI5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEhpLWphY2sgW0luaXRpYWxpemVkQnlDb25zdHJ1Y3Rvcl0gdG8gZWFnZXJs
eSBkZXNlcmlhbGl6ZQorICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgYXR0cmlidXRlcyBh
cyB3YXMgZG9uZSB1bnRpbCBub3cgYW5kIGdlbmVyYXRlCisgICAgICAgIGdldHRlcnMgYXMgdXN1
YWwgZm9yIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBkZWNsYXJlIGl0LiBBbHNvIGhhbmRsZSB0aGUK
KyAgICAgICAgY2FzZSBvZiBTU1YgYXR0cmlidXRlcyB3aXRoIFtDYWNoZWRBdHRyaWJ1dGVdIGRl
Y2xhcmF0aW9uLCBjYWNoaW5nIHRoZQorICAgICAgICBkZXNlcmlhbGl6ZWQgdmFsdWUgaW4gYSBo
aWRkZW4gYXR0cmlidXRlIG9uIHRoZSBvYmplY3QuCisKKyAgICAgICAgKiBNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbToKKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0ckdldHRlcik6CisgICAgICAgIChHZW5l
cmF0ZVNpbmdsZUJhdGNoZWRBdHRyaWJ1dGUpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbik6CisgICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDYWNoZWRTZXJpYWxpemVkU2NyaXB0VmFs
dWVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOgorICAgICAgICAo
SlNUZXN0T2JqKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T2JqLmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5pZGw6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
SW50ZXJuYWw6OnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAg
KFRlc3RPYmpJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmNh
Y2hlZFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKCk6CisK
IDIwMTItMDEtMjUgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBGaXggQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZW5hbWUgdG8g
YWN0dWFsbHkgb3BlcmF0ZSBvbiBleHRlbnNpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuaWRsCmluZGV4IDMzNjU3ZjRjODM3ZmRmMWZkNzFmMTY4NTU1ZmUwZTRmMTQz
NjE5NWQuLjU4ZTNhZDQ0NWFkNDgzZWE5ZWJhZWUxN2M3NWQ1ODA1ZjVjMzY0MWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCkBAIC0zMSw2ICszMSw2IEBAIG1v
ZHVsZSB3aW5kb3cgewogICBdIEludGVudCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgYWN0aW9uOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5
cGU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGF0
YTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtJbml0aWFsaXplZEJ5Q29uc3RydWN0b3Jd
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhOwogICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA4ZTA0Y2ZjYjRj
NGQ1NTUzYTg5MmNlYTIyMjRjMzM0YTU4NDU3MjBlLi5jMGJkY2Q4NDhmNmY0ZWM4N2M0NjA3MDE5
YWQ4NjJhMDVlYjEwOGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtODU5LDYgKzg1OSwxNCBAQCBFTkQKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICMgU2tpcCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24h
CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkYXR0ckV4dC0+eyJDYWNoZWRBdHRyaWJ1dGUifSkg
eworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOworICAgIHY4OjpI
YW5kbGU8djg6OlN0cmluZz4gcHJvcGVydHlOYW1lID0gdjg6OlN0cmluZzo6TmV3U3ltYm9sKCIk
e2F0dHJOYW1lfSIpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IGluZm8uSG9s
ZGVyKCktPkdldEhpZGRlblZhbHVlKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCF2YWx1ZS5Jc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKK0VORAorICAgICAgICB9CiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAgICAke2ltcGxDbGFzc05hbWV9KiBpbXAg
PSBWOCR7aW1wbENsYXNzTmFtZX06OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogRU5ECkBAIC0x
MDA0LDcgKzEwMTIsMTcgQEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoJHJl
c3VsdCkpKTtcbiIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICAiIC4gUmV0dXJuTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgJHJlc3VsdCwgIiAgICAiKS4iO1xuIik7CisgICAgICAgIGlmICgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgJiYgJGF0dHJF
eHQtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKKyAgICAgICAgICAgIG15ICRnZXR0ZXJGdW5jID0g
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICBTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWQgPSBpbXAtPiR7Z2V0dGVyRnVuY30oKTsKKyAgICB2
YWx1ZSA9IHNlcmlhbGl6ZWQgPyBzZXJpYWxpemVkLT5kZXNlcmlhbGl6ZSgpIDogdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KHY4OjpOdWxsKCkpOworICAgIGluZm8uSG9sZGVyKCktPlNldEhpZGRlblZh
bHVlKHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK0VORAorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAiIC4g
UmV0dXJuTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJHJlc3VsdCwgIiAg
ICAiKS4iO1xuIik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAifVxuXG4iKTsgICMgZW5kIG9mIGdldHRlcgpAQCAtMTkzOSw5ICsxOTU3LDkgQEAgc3Vi
IEdlbmVyYXRlU2luZ2xlQmF0Y2hlZEF0dHJpYnV0ZQogICAgIG15ICRhdHRyTmFtZSA9ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKICAgICBteSAkYXR0ckV4dCA9ICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzOwogCi0gICAgIyBBdHRyaWJ1dGVzIG9mIHR5cGUg
U2VyaWFsaXplZFNjcmlwdFZhbHVlIGFyZSBzZXQgaW4gdGhlCisgICAgIyBBdHRyaWJ1dGVzIG9m
IHR5cGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlIG1hcmtlZCBhcyBbSW5pdGlhbGl6ZWRCeUNvbnN0
cnVjdG9yXSBhcmUgc2V0IGluIHRoZQogICAgICMgY29uc3RydWN0b3IgYW5kIGRvbid0IHJlcXVp
cmUgY2FsbGJhY2tzLgotICAgIHJldHVybiBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBl
IGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKKyAgICByZXR1cm4gaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkYXR0ckV4dC0+
eyJJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IifSk7CiAKICAgICBteSAkYWNjZXNzQ29udHJvbCA9
ICJ2ODo6REVGQVVMVCI7CiAgICAgaWYgKCRhdHRyRXh0LT57IkRvTm90Q2hlY2tEb21haW5TZWN1
cml0eU9uR2V0In0pIHsKQEAgLTIyOTksMTAgKzIzMTcsMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgIyBBdHRyaWJ1dGVzIG9mIHR5cGUgU2VyaWFsaXplZFNjcmlwdFZh
bHVlIGFyZSBzZXQgaW4gdGhlCiAgICAgICAgICMgY29uc3RydWN0b3IgYW5kIGRvbid0IHJlcXVp
cmUgY2FsbGJhY2tzLgogICAgICAgICBpZiAoJGF0dHJUeXBlIGVxICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUiKSB7Ci0gICAgICAgICAgICBkaWUgIk9ubHkgb25lIGF0dHJpYnV0ZSBvZiB0eXBlIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSBzdXBwb3J0ZWQiIGlmICRzZXJpYWxpemVkQXR0cmlidXRlOwog
ICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIik7
Ci0gICAgICAgICAgICAkc2VyaWFsaXplZEF0dHJpYnV0ZSA9ICRhdHRyaWJ1dGU7Ci0gICAgICAg
ICAgICBuZXh0OworICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkluaXRpYWxpemVkQnlDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAg
ICAgICAgZGllICJPbmx5IG9uZSBhdHRyaWJ1dGUgb2YgdHlwZSBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgW0luaXRpYWxpemVkQnlDb25zdHJ1Y3Rvcl0gc3VwcG9ydGVkIiBpZiAkc2VyaWFsaXplZEF0
dHJpYnV0ZTsKKyAgICAgICAgICAgICAgICAkc2VyaWFsaXplZEF0dHJpYnV0ZSA9ICRhdHRyaWJ1
dGU7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgICMgRG8gbm90IGdlbmVyYXRlIGFjY2Vzc29yIGlmIHRoaXMgaXMgYSBjdXN0b20gYXR0
cmlidXRlLiAgVGhlCkBAIC0yMzg4LDggKzI0MDgsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn07XG5cbiIpOwogICAgIH0KIAorICAg
ICMgRklYTUU6IEJlIGFibGUgdG8gaGFuZGxlIG11bHRpcGxlIFtJbml0aWFsaXplZEJ5Q29uc3Ry
dWN0b3JdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBhdHRyaWJ1dGVzIGFuZCBnZXQgcmlkIG9mIHRo
aXMgc3BlY2lhbCBjYXNlLgogICAgIG15ICRoYXNfYXR0cmlidXRlcyA9IDA7Ci0gICAgaWYgKEAk
YXR0cmlidXRlcyAmJiAoQCRhdHRyaWJ1dGVzID4gMSB8fCAkJGF0dHJpYnV0ZXNbMF0tPnNpZ25h
dHVyZS0+dHlwZSBuZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikpIHsKKyAgICBpZiAoQCRhdHRy
aWJ1dGVzICYmIChAJGF0dHJpYnV0ZXMgPiAxIHx8ICgkJGF0dHJpYnV0ZXNbMF0tPnNpZ25hdHVy
ZS0+dHlwZSBuZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAhJCRhdHRyaWJ1dGVzWzBdLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbml0aWFsaXplZEJ5Q29uc3RydWN0b3Ii
fSkpKSB7CiAgICAgICAgICRoYXNfYXR0cmlidXRlcyA9IDE7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAic3RhdGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgJHtpbnRlcmZhY2VOYW1lfUF0
dHJzW10gPSB7XG4iKTsKICAgICAgICAgR2VuZXJhdGVCYXRjaGVkQXR0cmlidXRlRGF0YSgkZGF0
YU5vZGUsICRhdHRyaWJ1dGVzKTsKQEAgLTM3NzMsNyArMzc5NCw3IEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKIAogICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewogICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJHR5cGUuaCIpOwotICAgICAgICByZXR1cm4gIiR2YWx1
ZS0+ZGVzZXJpYWxpemUoKSI7CisgICAgICAgIHJldHVybiAiJHZhbHVlID8gJHZhbHVlLT5kZXNl
cmlhbGl6ZSgpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpOdWxsKCkpIjsKICAgICB9CiAK
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygid3RmL1JlZkNvdW50ZWQuaCIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRl
eCAwM2Y1NjI1MDMxYTNhY2ZiYzFmMzg5YmRkZTQxMTllMGE0OGM1MDVjLi42NjFlZGQ0ZmQ4ZWMy
MDRhNWJmMTI5NGY4Mjk1YWVmNDVmY2FhY2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMTMyLDYgKzEzMiw4
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpUYWJsZVZhbHVlc1tdID0K
ICNlbmRpZgogICAgIHsgImNhY2hlZEF0dHJpYnV0ZTEiLCBEb250RGVsZXRlIHwgUmVhZE9ubHks
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
T2JqQ2FjaGVkQXR0cmlidXRlMSksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9LAogICAgIHsg
ImNhY2hlZEF0dHJpYnV0ZTIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ2FjaGVkQXR0cmli
dXRlMiksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9LAorICAgIHsgInNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUF0dHIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqU2VyaWFsaXplZFNjcmlwdFZh
bHVlQXR0ciksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9LAorICAgIHsgImNhY2hlZFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUF0dHIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ2FjaGVkU2Vy
aWFsaXplZFNjcmlwdFZhbHVlQXR0ciksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9LAogICAg
IHsgImNvbnRlbnREb2N1bWVudCIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDb250ZW50RG9j
dW1lbnQpLCAoaW50cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJtdXRhYmxlUG9pbnQi
LCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdE9iak11dGFibGVQb2ludCksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpNdXRh
YmxlUG9pbnQsIE5vSW50cmluc2ljIH0sCiAgICAgeyAiaW1tdXRhYmxlUG9pbnQiLCBEb250RGVs
ZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdE9iakltbXV0YWJsZVBvaW50KSwgKGludHB0cl90KXNldEpTVGVzdE9iakltbXV0YWJsZVBv
aW50LCBOb0ludHJpbnNpYyB9LApAQCAtMTQzLDcgKzE0NSw3IEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RPYmpUYWJsZVZhbHVlc1tdID0KICAgICB7IDAsIDAsIDAsIDAsIE5v
SW50cmluc2ljIH0KIH07CiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T2JqVGFibGUg
PSB7IDEzNywgMTI3LCBKU1Rlc3RPYmpUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIGNvbnN0IEhh
c2hUYWJsZSBKU1Rlc3RPYmpUYWJsZSA9IHsgMTM4LCAxMjcsIEpTVGVzdE9ialRhYmxlVmFsdWVz
LCAwIH07CiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KQEAgLTc4
MCw2ICs3ODIsMjkgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnQKIH0KIAogCitKU1ZhbHVlIGpz
VGVzdE9ialNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLT5zZXJp
YWxpemVkU2NyaXB0VmFsdWVBdHRyKCkgPyBpbXBsLT5zZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRy
KCktPmRlc2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpz
TnVsbCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpDYWNo
ZWRTZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90
QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
c3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5t
X2NhY2hlZFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHIuZ2V0KCkpCisgICAgICAgIHJldHVybiBj
YWNoZWRWYWx1ZTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLT5jYWNoZWRTZXJp
YWxpemVkU2NyaXB0VmFsdWVBdHRyKCkgPyBpbXBsLT5jYWNoZWRTZXJpYWxpemVkU2NyaXB0VmFs
dWVBdHRyKCktPmRlc2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAw
KSA6IGpzTnVsbCgpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkU2VyaWFsaXplZFNjcmlwdFZh
bHVlQXR0ci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKwogSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKIHsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09i
amVjdChzbG90QmFzZSkpOwpAQCAtMjE0Nyw2ICsyMTcyLDggQEAgdm9pZCBKU1Rlc3RPYmo6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMSk7CiAgICAgaWYg
KHRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMikKICAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMik7CisgICAgaWYgKHRoaXNPYmplY3QtPm1f
Y2FjaGVkU2VyaWFsaXplZFNjcmlwdFZhbHVlQXR0cikKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fY2FjaGVkU2VyaWFsaXplZFNjcmlwdFZhbHVlQXR0cik7CiB9CiAKIC8v
IENvbnN0YW50IGdldHRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCA0NWY5ZmI3MzE3Y2IzZjUxMjM3NWRkNzNhMzIw
ZDgxMWM5MTVhMmY4Li41NGY1NTliMTYxNmJlNjIzMTkwNmYxZTY0NDQxOGJhZTkyYmM0OTg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwog
ICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUxOwog
ICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUyOwor
ICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRTZXJpYWxpemVkU2Ny
aXB0VmFsdWVBdHRyOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpOwogCiAKQEAgLTI3Miw2ICsyNzMsOCBAQCBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLAogdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRB
dHRyaWJ1dGUyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50
aWZpZXImKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
K0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRTZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKIEpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9i
ak11dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7CiB2b2lkIHNldEpTVGVzdE9iak11dGFibGVQb2ludChKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDczZmQxOWI3YmMwYmI3MjA0
YWZiMDk4ZTlhMDNiZjg4NzA1MWNlODkuLmNiMTBjMTQyNTBkNmEzZjdjNzI2NWU3ZWNhMmFmNGUz
MzRlZDhiY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE9iai5pZGwKQEAgLTE1MCw2ICsxNTAsOSBAQCBtb2R1bGUgdGVzdCB7CiAjaWYgZGVmaW5l
ZChURVNUSU5HX1Y4KSB8fCBkZWZpbmVkKFRFU1RJTkdfSlMpCiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBbQ2FjaGVkQXR0cmlidXRlXSBhbnkgY2FjaGVkQXR0cmlidXRlMTsKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIFtDYWNoZWRBdHRyaWJ1dGVdIGFueSBjYWNoZWRBdHRyaWJ1dGUy
OworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2Vy
aWFsaXplZFNjcmlwdFZhbHVlQXR0cjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDYWNo
ZWRBdHRyaWJ1dGVdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBjYWNoZWRTZXJpYWxpemVkU2NyaXB0
VmFsdWVBdHRyOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFRFU1RJTkdfVjgpIHx8IGRlZmluZWQo
VEVTVElOR19KUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmlkbAppbmRleCBlZTE3ODdlNDhhY2QwYTI1ZDcyNTQ4MmJjN2RjYmQ3MTkxOGNjNjY5Li43
NzQwZDYyZTJkNWUwODRkYjE1MzYyMDYwOTg3ZDM3YjkzYWFmODllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsCkBAIC0zMiw2ICszMiw2IEBA
IG1vZHVsZSB0ZXN0IHsKICAgICBdIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Ug
ewogICAgICAgICAvLyBUaGUgY2FzZSBvZiBhIHNpbmdsZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
YXR0cmlidXRlIGlzIGEgYml0IG9mIGEKICAgICAgICAgLy8gc3BlY2lhbCBjYXNlLgotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlOworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgW0luaXRpYWxpemVkQnlDb25zdHJ1Y3Rvcl0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIHZhbHVlOwogICAgIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDYzMzZkZTQ2MzE5
YWMyZDlmZmMzZDVlY2VlZWUzNzNiYjE3NDZhZGMuLmZiZmU5MjlkYjFlNWI5NmIzYmI0MDM0N2Rl
NjgyZTJlZDM2N2QwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC03MzMsNiArNzMzLDI3IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FjaGVkQXR0cmlidXRlMkF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hCiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlQXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkU2NyaXB0VmFsdWVBdHRyLl9nZXQi
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OworICAgIHJldHVybiBpbXAtPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHIoKSA/IGltcC0+c2Vy
aWFsaXplZFNjcmlwdFZhbHVlQXR0cigpLT5kZXNlcmlhbGl6ZSgpIDogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KHY4OjpOdWxsKCkpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNh
Y2hlZFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmouY2FjaGVkU2VyaWFsaXplZFNjcmlwdFZhbHVlQXR0ci5fZ2V0Iik7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBwcm9wZXJ0eU5hbWUgPSB2ODo6U3RyaW5nOjpOZXdT
eW1ib2woImNhY2hlZFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHIiKTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmFsdWUgPSBpbmZvLkhvbGRlcigpLT5HZXRIaWRkZW5WYWx1ZShwcm9wZXJ0
eU5hbWUpOworICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
KyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWQgPSBpbXAtPmNhY2hlZFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUF0dHIoKTsKKyAgICB2YWx1ZSA9IHNlcmlhbGl6ZWQgPyBzZXJpYWxp
emVkLT5kZXNlcmlhbGl6ZSgpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpOdWxsKCkpOwor
ICAgIGluZm8uSG9sZGVyKCktPlNldEhpZGRlblZhbHVlKHByb3BlcnR5TmFtZSwgdmFsdWUpOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFi
bGVkQXRSdW50aW1lQXR0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
YmouZW5hYmxlZEF0UnVudGltZUF0dHIxLl9nZXQiKTsKQEAgLTE2NzIsNiArMTY5MywxMCBAQCBz
dGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0T2JqQXR0cnNbXSA9IHsKICAgICB7ImNh
Y2hlZEF0dHJpYnV0ZTEiLCBUZXN0T2JqSW50ZXJuYWw6OmNhY2hlZEF0dHJpYnV0ZTFBdHRyR2V0
dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2
ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUp
LCAwIC8qIG9uIGluc3RhbmNlICovfSwKICAgICAvLyBBdHRyaWJ1dGUgJ2NhY2hlZEF0dHJpYnV0
ZTInIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnQ2FjaGVkQXR0cmlidXRl
JykKICAgICB7ImNhY2hlZEF0dHJpYnV0ZTIiLCBUZXN0T2JqSW50ZXJuYWw6OmNhY2hlZEF0dHJp
YnV0ZTJBdHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nl
c3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0
ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ3Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHInIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRB
dHRyOiAnJykKKyAgICB7InNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHIiLCBUZXN0T2JqSW50ZXJu
YWw6OnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHJBdHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEg
Ki8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19j
YXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICov
fSwKKyAgICAvLyBBdHRyaWJ1dGUgJ2NhY2hlZFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHInIChU
eXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnQ2FjaGVkQXR0cmlidXRlJykKKyAg
ICB7ImNhY2hlZFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OmNh
Y2hlZFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUF0dHJBdHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEg
Ki8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19j
YXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICov
fSwKICAgICAvLyBBdHRyaWJ1dGUgJ2Zsb2F0QXJyYXknIChUeXBlOiAnYXR0cmlidXRlJyBFeHRB
dHRyOiAnJykKICAgICB7ImZsb2F0QXJyYXkiLCBUZXN0T2JqSW50ZXJuYWw6OmZsb2F0QXJyYXlB
dHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6OmZsb2F0QXJyYXlBdHRyU2V0dGVyLCAwIC8qIG5v
IGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0
YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3Rh
bmNlICovfSwKICAgICAvLyBBdHRyaWJ1dGUgJ2RvdWJsZUFycmF5JyAoVHlwZTogJ2F0dHJpYnV0
ZScgRXh0QXR0cjogJycpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124611</attachid>
            <date>2012-01-30 15:17:16 -0800</date>
            <delta_ts>2012-02-02 16:48:46 -0800</delta_ts>
            <desc>Better patch</desc>
            <filename>bug-77295-20120130151715.patch</filename>
            <type>text/plain</type>
            <size>47289</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI2NzY3MGZjMjU3YjEx
ODczOTc1M2RlNDNhOTk3NDQ5MWMyMjRhMC4uYTBhY2RhYjZlZjk1OThlZWU4ODM1ZmI0Mjk5YTZj
ZDdiYTE2MWYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEyLTAxLTI5ICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBWOCBpZGwgY29kZSBn
ZW5lcmF0b3IgZG9lc24ndCBoYW5kbGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGF0dHJpYnV0ZXMg
cHJvcGVybHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NzI5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE9ubHkgdGhlIGNhc2Ugb2Ygb25lIChhbmQgb25seSBvbmUpIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSBhdHRyaWJ1dGUgd2FzCisgICAgICAgIGhhbmRsZWQsIGFuZCBpdCB3YXMgZGVzZXJpYWxpemVk
IGVhZ2VybHkgaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YKKyAgICAgICAgZ2VuZXJhdGlu
ZyBnZXR0ZXJzL3NldHRlcnMuIFRoaXMgcGF0Y2ggZ2V0cyByaWQgb2YgdGhhdCBiZWhhdmlvciBh
bmQKKyAgICAgICAgZ2VuZXJhdGVzIHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGluc3RlYWQgKHNp
bWlsYXIgdG8gd2hhdCB0aGUgSlNDCisgICAgICAgIGdlbmVyYXRvciBkb2VzKS4KKyAgICAgICAg
QWxzbyBoYW5kbGUgdGhlIGNhc2Ugb2YgU1NWIGF0dHJpYnV0ZXMgd2l0aCBbQ2FjaGVkQXR0cmli
dXRlXQorICAgICAgICBkZWNsYXJhdGlvbiwgY2FjaGluZyB0aGUgZGVzZXJpYWxpemVkIHZhbHVl
IGluIGEgaGlkZGVuIGF0dHJpYnV0ZSBvbiB0aGUKKyAgICAgICAgb2JqZWN0LgorCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0
ZU5vcm1hbEF0dHJHZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVOb3JtYWxBdHRyU2V0dGVyKToK
KyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIChHZW5lcmF0
ZU5hbWVkQ29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIChHZW5lcmF0ZVNpbmdsZUJhdGNo
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAg
IChHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzKToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6Cisg
ICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzZXRWYWx1ZSk6
CisgICAgICAgIChXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpyZWFk
b25seVZhbHVlKToKKyAgICAgICAgKFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2U6OmNhY2hlZFZhbHVlKToKKyAgICAgICAgKFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6OnNldENhY2hlZFZhbHVlKToKKyAgICAgICAgKFdlYkRPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNhY2hlZFJlYWRvbmx5VmFsdWUpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5oOgorICAgICAgICAoV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF92YWx1
ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50
ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfdmFsdWUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9zZXRf
Y2FjaGVkX3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF9yZWFkb25seV92YWx1ZSk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9wcm9w
ZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVf
aW50ZXJmYWNlX2NsYXNzX2luaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnB1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
YWNoZWRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oOgorICAgICAgICAoSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKToKKyAgICAgICAgKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5tbToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSBzZXRWYWx1ZTpdKToKKyAgICAgICAgKC1bRE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSByZWFkb25seVZhbHVlXSk6CisgICAgICAg
ICgtW0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgY2FjaGVkVmFsdWVdKToK
KyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSBzZXRDYWNo
ZWRWYWx1ZTpdKToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSBjYWNoZWRSZWFkb25seVZhbHVlXSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUludGVybmFsOjp2YWx1ZUF0dHJHZXR0ZXIpOgorICAgICAgICAoVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6dmFsdWVBdHRyU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5h
bDo6cmVhZG9ubHlWYWx1ZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsOjpjYWNoZWRWYWx1ZUF0dHJHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUlu
dGVybmFsOjpjYWNoZWRWYWx1ZUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsOjpjYWNoZWRSZWFkb25seVZhbHVl
QXR0ckdldHRlcik6CisgICAgICAgICgpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRl
bXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6d3JhcFNsb3cpOgorCiAyMDEyLTAxLTI1ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRml4IENsaXBib2FyZENocm9taXVt
Ojp2YWxpZGF0ZUZpbGVuYW1lIHRvIGFjdHVhbGx5IG9wZXJhdGUgb24gZXh0ZW5zaW9ucwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpp
bmRleCA4ZTA0Y2ZjYjRjNGQ1NTUzYTg5MmNlYTIyMjRjMzM0YTU4NDU3MjBlLi4yMTVhZTA4ODJi
ZWQyZDI2ZGE1YmRjMTBmOTk0ZTRhZGNiZWQ0YWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMTkyLDI2ICsxOTIsNiBA
QCBzdWIgR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZwogICAgIH0KIH0KIAotc3ViIEdlbmVyYXRl
RWFnZXJEZXNlcmlhbGl6YXRpb24KLXsKLSAgICBteSAkc2VyaWFsaXplZEF0dHJpYnV0ZSA9IHNo
aWZ0OwotCi0gICAgIyBFYWdlcmx5IGRlc2VyaWFsaXplIGF0dHJpYnV0ZXMgb2YgdHlwZSBTZXJp
YWxpemVkU2NyaXB0VmFsdWUgd2hpbGUgd2UncmUKLSAgICAjIGluIHRoZSByaWdodCBjb250ZXh0
LgotCi0gICAgZGllICJBdHRyaWJ1dGUgb2YgdHlwZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZXhw
ZWN0ZWQiIGlmICRzZXJpYWxpemVkQXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgbmUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSI7Ci0gICAgbXkgJGF0dHJOYW1lID0gJHNlcmlhbGl6ZWRBdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+bmFtZTsKLSAgICBteSAkYXR0ckF0dHIgPSAidjg6OkRvbnREZWxldGUi
OwotICAgIGlmICgkc2VyaWFsaXplZEF0dHJpYnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5Lykgewot
ICAgICAgICAkYXR0ckF0dHIgLj0gIiB8IHY4OjpSZWFkT25seSI7Ci0gICAgfQotICAgICRhdHRy
QXR0ciA9ICJzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KCRhdHRyQXR0cikiOwot
ICAgIG15ICRnZXR0ZXJGdW5jID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJOYW1l
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6ZGVzZXJpYWxpemVBbmRTZXRQcm9wZXJ0eSh3cmFwcGVyLCAiJHthdHRyTmFtZX0iLCAk
e2F0dHJBdHRyfSwgaW1wbC0+JHtnZXR0ZXJGdW5jfSgpKTsKLUVORAotfQotCiBzdWIgR2V0U1ZH
UHJvcGVydHlUeXBlcwogewogICAgIG15ICRpbXBsVHlwZSA9IHNoaWZ0OwpAQCAtODU5LDYgKzgz
OSwxNCBAQCBFTkQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICMgU2tpcCB0aGUg
cmVzdCBvZiB0aGUgZnVuY3Rpb24hCiAgICAgICAgIH0KKyAgICAgICAgaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkYXR0ckV4dC0+
eyJDYWNoZWRBdHRyaWJ1dGUifSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgPDxFTkQpOworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gcHJvcGVydHlOYW1lID0gdjg6
OlN0cmluZzo6TmV3U3ltYm9sKCIke2F0dHJOYW1lfSIpOworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSA9IGluZm8uSG9sZGVyKCktPkdldEhpZGRlblZhbHVlKHByb3BlcnR5TmFtZSk7
CisgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKK0VORAor
ICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAgICAk
e2ltcGxDbGFzc05hbWV9KiBpbXAgPSBWOCR7aW1wbENsYXNzTmFtZX06OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOwogRU5ECkBAIC0xMDA0LDcgKzk5MiwxNyBAQCBFTkQKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHt0ZWFy
T2ZmVHlwZX06OmNyZWF0ZSgkcmVzdWx0KSkpO1xuIik7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5OYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAiICAgICIpLiI7XG4iKTsK
KyAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlIiAmJiAkYXR0ckV4dC0+eyJDYWNoZWRBdHRyaWJ1dGUifSkgeworICAgICAgICAg
ICAgbXkgJGdldHRlckZ1bmMgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPm5hbWUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
PDxFTkQpOworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZCA9IGltcC0+JHtn
ZXR0ZXJGdW5jfSgpOworICAgIHZhbHVlID0gc2VyaWFsaXplZCA/IHNlcmlhbGl6ZWQtPmRlc2Vy
aWFsaXplKCkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSk7CisgICAgaW5mby5I
b2xkZXIoKS0+U2V0SGlkZGVuVmFsdWUocHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJu
IHZhbHVlOworRU5ECisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAkcmVzdWx0LCAiICAgICIpLiI7XG4iKTsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ9XG5cbiIpOyAgIyBlbmQgb2YgZ2V0dGVyCkBAIC0x
MTg5LDYgKzExODcsMTIgQEAgRU5ECiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiICYmICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9
KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICBpbmZvLkhv
bGRlcigpLT5EZWxldGVIaWRkZW5WYWx1ZSh2ODo6U3RyaW5nOjpOZXdTeW1ib2woIiR7YXR0ck5h
bWV9IikpOyAvLyBJbnZhbGlkYXRlIHRoZSBjYWNoZWQgdmFsdWUuCitFTkQKKyAgICB9CisKICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybjtcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICJ9XG5cbiIpOyAgIyBlbmQgb2Ygc2V0dGVyCiAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7CkBAIC0xNjE3LDcgKzE2MjEsNiBAQCBzdWIgR2VuZXJhdGVDb25z
dHJ1Y3RvckNhbGxiYWNrCiAgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CiAgICAgbXkgJGRhdGFO
b2RlID0gc2hpZnQ7CiAgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKLSAgICBteSAkc2Vy
aWFsaXplZEF0dHJpYnV0ZSA9IHNoaWZ0OwogCiAgICAgbXkgJHJhaXNlc0V4Y2VwdGlvbnMgPSBA
eyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc307CiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsKQEAgLTE2OTMs
MTEgKzE2OTYsNiBAQCBFTkQKIAogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFw
cGVyLCAmaW5mbywgaW1wbC5nZXQoKSk7CiAgICAgaW1wbC0+cmVmKCk7Ci1FTkQKLSAgICBpZiAo
JHNlcmlhbGl6ZWRBdHRyaWJ1dGUpIHsKLSAgICAgICAgR2VuZXJhdGVFYWdlckRlc2VyaWFsaXph
dGlvbigkc2VyaWFsaXplZEF0dHJpYnV0ZSk7Ci0gICAgfQotICAgIHB1c2goQGltcGxDb250ZW50
LCA8PEVORCk7CiAgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3Ike0RPTU9iamVjdH0o
aW1wbC5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CiAg
ICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiBFTkQKQEAgLTE3NzgsNyArMTc3Niw2IEBAIHN1YiBH
ZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JDYWxsYmFjawogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0
OwogICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hp
ZnQ7Ci0gICAgbXkgJHNlcmlhbGl6ZWRBdHRyaWJ1dGUgPSBzaGlmdDsKIAogICAgIG15ICRyYWlz
ZXNFeGNlcHRpb25zID0gQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9OwogICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlv
biJ9KSB7CkBAIC0xODc3LDExICsxODc0LDYgQEAgRU5ECiAKICAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIod3JhcHBlciwgJlY4JHtpbXBsQ2xhc3NOYW1lfUNvbnN0cnVjdG9yOjppbmZv
LCBpbXBsLmdldCgpKTsKICAgICBpbXBsLT5yZWYoKTsKLUVORAotICAgIGlmICgkc2VyaWFsaXpl
ZEF0dHJpYnV0ZSkgewotICAgICAgICBHZW5lcmF0ZUVhZ2VyRGVzZXJpYWxpemF0aW9uKCRzZXJp
YWxpemVkQXR0cmlidXRlKTsKLSAgICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsK
ICAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvciR7RE9NT2JqZWN0fShpbXBsLmdldCgp
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKICAgICByZXR1cm4g
YXJncy5Ib2xkZXIoKTsKIEVORApAQCAtMTkzOSwxMCArMTkzMSw2IEBAIHN1YiBHZW5lcmF0ZVNp
bmdsZUJhdGNoZWRBdHRyaWJ1dGUKICAgICBteSAkYXR0ck5hbWUgPSAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPm5hbWU7CiAgICAgbXkgJGF0dHJFeHQgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlczsKIAotICAgICMgQXR0cmlidXRlcyBvZiB0eXBlIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSBhcmUgc2V0IGluIHRoZQotICAgICMgY29uc3RydWN0b3IgYW5kIGRvbid0IHJl
cXVpcmUgY2FsbGJhY2tzLgotICAgIHJldHVybiBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50
eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKLQogICAgIG15ICRhY2Nlc3NDb250cm9s
ID0gInY4OjpERUZBVUxUIjsKICAgICBpZiAoJGF0dHJFeHQtPnsiRG9Ob3RDaGVja0RvbWFpblNl
Y3VyaXR5T25HZXQifSkgewogICAgICAgICAkYWNjZXNzQ29udHJvbCA9ICJ2ODo6QUxMX0NBTl9S
RUFEIjsKQEAgLTIyNzcsNyArMjI2NSw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgInRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4
X1VTRShUKSB7IH1cblxuIik7CiAKICAgICBteSAkaGFzQ29uc3RydWN0b3JzID0gMDsKLSAgICBt
eSAkc2VyaWFsaXplZEF0dHJpYnV0ZTsKICAgICAjIEdlbmVyYXRlIHByb3BlcnR5IGFjY2Vzc29y
cyBmb3IgYXR0cmlidXRlcy4KICAgICBmb3IgKG15ICRpbmRleCA9IDA7ICRpbmRleCA8IEB7JGRh
dGFOb2RlLT5hdHRyaWJ1dGVzfTsgJGluZGV4KyspIHsKICAgICAgICAgbXkgJGF0dHJpYnV0ZSA9
IEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfVskaW5kZXhdOwpAQCAtMjI5NiwxMyArMjI4Myw4IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJ2OE9uUHJvdG8ifSA9IDE7CiAgICAgICAgIH0K
IAotICAgICAgICAjIEF0dHJpYnV0ZXMgb2YgdHlwZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgYXJl
IHNldCBpbiB0aGUKLSAgICAgICAgIyBjb25zdHJ1Y3RvciBhbmQgZG9uJ3QgcmVxdWlyZSBjYWxs
YmFja3MuCiAgICAgICAgIGlmICgkYXR0clR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIp
IHsKLSAgICAgICAgICAgIGRpZSAiT25seSBvbmUgYXR0cmlidXRlIG9mIHR5cGUgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIHN1cHBvcnRlZCIgaWYgJHNlcmlhbGl6ZWRBdHRyaWJ1dGU7CiAgICAgICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiKTsKLSAgICAg
ICAgICAgICRzZXJpYWxpemVkQXR0cmlidXRlID0gJGF0dHJpYnV0ZTsKLSAgICAgICAgICAgIG5l
eHQ7CiAgICAgICAgIH0KIAogICAgICAgICAjIERvIG5vdCBnZW5lcmF0ZSBhY2Nlc3NvciBpZiB0
aGlzIGlzIGEgY3VzdG9tIGF0dHJpYnV0ZS4gIFRoZQpAQCAtMjM4OSw3ICsyMzcxLDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBteSAkaGFzX2F0dHJpYnV0ZXMg
PSAwOwotICAgIGlmIChAJGF0dHJpYnV0ZXMgJiYgKEAkYXR0cmlidXRlcyA+IDEgfHwgJCRhdHRy
aWJ1dGVzWzBdLT5zaWduYXR1cmUtPnR5cGUgbmUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpKSB7
CisgICAgaWYgKEAkYXR0cmlidXRlcykgewogICAgICAgICAkaGFzX2F0dHJpYnV0ZXMgPSAxOwog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBjb25zdCBCYXRjaGVkQXR0cmlidXRl
ICR7aW50ZXJmYWNlTmFtZX1BdHRyc1tdID0ge1xuIik7CiAgICAgICAgIEdlbmVyYXRlQmF0Y2hl
ZEF0dHJpYnV0ZURhdGEoJGRhdGFOb2RlLCAkYXR0cmlidXRlcyk7CkBAIC0yNDczLDkgKzI0NTUs
OSBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAifSAvLyBuYW1lc3BhY2UgJHtp
bnRlcmZhY2VOYW1lfUludGVybmFsXG5cbiIpOwogCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSAmJiAhKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlY4Q3VzdG9tQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9KSkgewotICAgICAgICBHZW5lcmF0
ZU5hbWVkQ29uc3RydWN0b3JDYWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAkZGF0YU5v
ZGUsICRpbnRlcmZhY2VOYW1lLCAkc2VyaWFsaXplZEF0dHJpYnV0ZSk7CisgICAgICAgIEdlbmVy
YXRlTmFtZWRDb25zdHJ1Y3RvckNhbGxiYWNrKCRkYXRhTm9kZS0+Y29uc3RydWN0b3IsICRkYXRh
Tm9kZSwgJGludGVyZmFjZU5hbWUpOwogICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0gJiYgISgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJWOEN1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkpIHsKLSAgICAgICAgR2VuZXJhdGVDb25zdHJ1
Y3RvckNhbGxiYWNrKCRkYXRhTm9kZS0+Y29uc3RydWN0b3IsICRkYXRhTm9kZSwgJGludGVyZmFj
ZU5hbWUsICRzZXJpYWxpemVkQXR0cmlidXRlKTsKKyAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3Rv
ckNhbGxiYWNrKCRkYXRhTm9kZS0+Y29uc3RydWN0b3IsICRkYXRhTm9kZSwgJGludGVyZmFjZU5h
bWUpOwogICAgIH0gZWxzaWYgKElzQ29uc3RydWN0b3JUZW1wbGF0ZSgkZGF0YU5vZGUsICJFdmVu
dCIpKSB7CiAgICAgICAgIEdlbmVyYXRlRXZlbnRDb25zdHJ1Y3RvckNhbGxiYWNrKCRkYXRhTm9k
ZSwgJGludGVyZmFjZU5hbWUpOwogICAgIH0KQEAgLTI4MDQsNyArMjc4Niw3IEBAIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4gVjhET01XaW5kb3c6OkdldFNoYWRvd09iamVjdFRl
bXBsYXRlKCkKIEVORAogICAgIH0KIAotICAgIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMoJGRhdGFO
b2RlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG5hdGl2ZVR5cGUsICRzZXJpYWxpemVk
QXR0cmlidXRlKTsKKyAgICBHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzKCRkYXRhTm9kZSwgJGludGVy
ZmFjZU5hbWUsICRjbGFzc05hbWUsICRuYXRpdmVUeXBlKTsKIAogICAgIHB1c2goQGltcGxDb250
ZW50LCA8PEVORCk7CiAKQEAgLTMwMzYsNyArMzAxOCw2IEBAIHN1YiBHZW5lcmF0ZVRvVjhDb252
ZXJ0ZXJzCiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKICAgICBteSAkY2xhc3NOYW1l
ID0gc2hpZnQ7CiAgICAgbXkgJG5hdGl2ZVR5cGUgPSBzaGlmdDsKLSAgICBteSAkc2VyaWFsaXpl
ZEF0dHJpYnV0ZSA9IHNoaWZ0OwogCiAgICAgbXkgJGRvbU1hcEZ1bmN0aW9uID0gR2V0RG9tTWFw
RnVuY3Rpb24oJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSk7CiAgICAgbXkgJGZvcmNlTmV3T2Jq
ZWN0SW5wdXQgPSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIsIGJvb2wgZm9yY2VO
ZXdPYmplY3QiIDogIiI7CkBAIC0zMTA4LDEwICszMDg5LDYgQEAgRU5ECiBFTkQKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuICAgIGltcGwtPnJlZigpO1xuIikgaWYgSXNSZWZQdHJUeXBlKCRp
bnRlcmZhY2VOYW1lKTsKIAotICAgIGlmICgkc2VyaWFsaXplZEF0dHJpYnV0ZSkgewotICAgICAg
ICBHZW5lcmF0ZUVhZ2VyRGVzZXJpYWxpemF0aW9uKCRzZXJpYWxpemVkQXR0cmlidXRlKTsKLSAg
ICB9Ci0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6
TmV3KHdyYXBwZXIpOwogCkBAIC0zNTAxLDcgKzM0NzgsMTAgQEAgc3ViIEpTVmFsdWVUb05hdGl2
ZQogICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgIH0KIAotICAgIGRpZSAiVW5leHBlY3RlZCBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUiIGlmICR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUi
OworICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgeworICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiKTsKKyAgICAgICAgcmV0
dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgkdmFsdWUpIjsKKyAgICB9CiAKICAg
ICBpZiAoJHR5cGUgZXEgIklEQktleSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIklE
QkJpbmRpbmdVdGlsaXRpZXMuaCIpOwpAQCAtMzc3Myw3ICszNzUzLDcgQEAgc3ViIE5hdGl2ZVRv
SlNWYWx1ZQogCiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CiAg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlwZS5oIik7Ci0gICAgICAgIHJldHVybiAiJHZh
bHVlLT5kZXNlcmlhbGl6ZSgpIjsKKyAgICAgICAgcmV0dXJuICIkdmFsdWUgPyAkdmFsdWUtPmRl
c2VyaWFsaXplKCkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSkiOwogICAgIH0K
IAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJ3dGYvUmVmQ291bnRlZC5oIik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAppbmRleCBlZGFlOGFkM2NjMGM3MGQ1OGNmYzM2YzAyM2YwNzYzYWQ3MjY5N2JjLi41NDE1
NDY0NTBhNThkMzI3MzZkYWNjNzU1YjgzYjYyOGRlMDg1ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
QEAgLTgzLDYgKzgzLDQ2IEBAIFdlYkRPTVN0cmluZyBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGltcGwoKS0+dmFsdWUo
KS0+dG9TdHJpbmcoKTsKIH0KIAordm9pZCBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpzZXRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIG5ld1ZhbHVlKQoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFZhbHVlKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5nKG5ld1ZhbHVl
KSkpOworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6cmVhZG9ubHlWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAg
ICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAgIHJldHVybiBpbXBsKCktPnJlYWRvbmx5
VmFsdWUoKS0+dG9TdHJpbmcoKTsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNhY2hlZFZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAo
IWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIGlt
cGwoKS0+Y2FjaGVkVmFsdWUoKS0+dG9TdHJpbmcoKTsKK30KKwordm9pZCBXZWJET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzZXRDYWNoZWRWYWx1ZShjb25zdCBXZWJET01T
dHJpbmcmIG5ld0NhY2hlZFZhbHVlKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbXBsKCktPnNldENhY2hlZFZhbHVlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5nKG5ld0NhY2hlZFZhbHVlKSkpOworfQorCitXZWJE
T01TdHJpbmcgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y2FjaGVk
UmVhZG9ubHlWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVy
biBXZWJET01TdHJpbmcoKTsKKworICAgIHJldHVybiBpbXBsKCktPmNhY2hlZFJlYWRvbmx5VmFs
dWUoKS0+dG9TdHJpbmcoKTsKK30KKwogV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UmIHdyYXBwZXIpCiB7CiAgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaAppbmRleCBmMGRhZjU1MmI3YTVmZTJlZTE2NTZkODk3NGRiNzVmMGUxOTc5Y2M0Li5k
MDNiNzVlNmE3NjdmMjJjZmNmYmY5YTVkNTU4MjJkZTcxYjI0Mzk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApA
QCAtNDMsNiArNDMsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYkRPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKTsKIAogICAgIFdlYkRPTVN0cmluZyB2YWx1ZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgV2ViRE9NU3RyaW5nJik7CisgICAgV2ViRE9N
U3RyaW5nIHJlYWRvbmx5VmFsdWUoKSBjb25zdDsKKyAgICBXZWJET01TdHJpbmcgY2FjaGVkVmFs
dWUoKSBjb25zdDsKKyAgICB2b2lkIHNldENhY2hlZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYp
OworICAgIFdlYkRPTVN0cmluZyBjYWNoZWRSZWFkb25seVZhbHVlKCkgY29uc3Q7CiAKICAgICBX
ZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsKCkgY29uc3Q7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggNzU5MmIwMjEyZTQ2OWYwZmZk
NDg5MjU1YTA0NzdhZDhhNmYyNzRmYy4uOTYxYzRiM2E1YzJmOTJkNDczNjQ0NTYxNjBjOGZiNTgw
NmRhMzc0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTY1LDYgKzY1LDY5
IEBAIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0
X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpCiAgICAgcmV0dXJuIHJlczsKIH0KIAordm9pZAor
d2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9zZXRfdmFs
dWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAg
IGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6
Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsK
KyAgICB9CisgICAgaXRlbS0+c2V0VmFsdWUoY29udmVydGVkX3ZhbHVlKTsKK30KKworV2ViS2l0
RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKgord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2Ny
aXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVhZG9ubHlWYWx1ZSgpKTsK
KyAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0KGdf
cmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitXZWJLaXRET01TZXJpYWxpemVkU2Ny
aXB0VmFsdWUqCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2dldF9jYWNoZWRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2FjaGVkVmFsdWUoKSk7CisgICAgV2ViS2l0RE9NU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0
dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3Zh
bHVlX2ludGVyZmFjZV9zZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
dmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICog
Y29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAg
ICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldENhY2hlZFZh
bHVlKGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSoKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0
X2NhY2hlZF9yZWFkb25seV92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19y
ZXMgPSBXVEY6OmdldFB0cihpdGVtLT5jYWNoZWRSZWFkb25seVZhbHVlKCkpOworICAgIFdlYktp
dERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkp
OworICAgIHJldHVybiByZXM7Cit9CisKIAogR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfaW50ZXJmYWNlLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQogCkBAIC04NCw2
ICsxNDcsOSBAQCBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBj
b3JlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VgogZW51bSB7CiAgICAgUFJPUF8wLAog
ICAgIFBST1BfVkFMVUUsCisgICAgUFJPUF9SRUFET05MWV9WQUxVRSwKKyAgICBQUk9QX0NBQ0hF
RF9WQUxVRSwKKyAgICBQUk9QX0NBQ0hFRF9SRUFET05MWV9WQUxVRSwKIH07CiAKIApAQCAtMTI2
LDYgKzE5MiwyNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3Jp
cHRfdmFsdWVfaW50ZXJmYWNlX2dldF9wcm9wZXJ0eShHT2JqZQogICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwogICAgICAgICBicmVhazsK
ICAgICB9CisgICAgY2FzZSBQUk9QX1JFQURPTkxZX1ZBTFVFOgorICAgIHsKKyAgICAgICAgUmVm
UHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHRyID0gY29yZVNlbGYtPnJlYWRv
bmx5VmFsdWUoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6Omtp
dChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9DQUNI
RURfVkFMVUU6CisgICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBwdHIgPSBjb3JlU2VsZi0+Y2FjaGVkVmFsdWUoKTsKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgUFJPUF9DQUNIRURfUkVBRE9OTFlfVkFMVUU6CisgICAgeworICAg
ICAgICBSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwdHIgPSBjb3JlU2Vs
Zi0+Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOwogICAgICAgICBicmVhazsKQEAgLTE1Miw3ICsyMzYsMjggQEAg
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVy
ZmFjZV9jbGFzc19pbml0KFdlYktpdEQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfVkFMVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KCJ2YWx1ZSIsIC8qIG5hbWUgKi8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfaW50ZXJmYWNlX3ZhbHVlIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InJlYWQtb25seSAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLnZhbHVlIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBz
b21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBXZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UudmFs
dWUiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUg
Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1RZUEVfRE9NX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFLCAvKiBnb2JqZWN0
IHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9SRUFET05MWV9WQUxVRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInJlYWRvbmx5LXZhbHVlIiwgLyogbmFt
ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfcmVhZG9ubHkt
dmFsdWUiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBXZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUqIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
cmVhZG9ubHktdmFsdWUiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9j
IHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1NFUklBTElaRURfU0NSSVBUX1ZBTFVF
LCAvKiBnb2JqZWN0IHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NBQ0hFRF9WQUxVRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImNhY2hlZC12YWx1ZSIs
IC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2Nh
Y2hlZC12YWx1ZSIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBXZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY2FjaGVkLXZhbHVlIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJh
IGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9TRVJJQUxJWkVEX1NDUklQVF9W
QUxVRSwgLyogZ29iamVjdCB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ0FDSEVEX1JFQURPTkxZX1ZBTFVFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgi
Y2FjaGVkLXJlYWRvbmx5LXZhbHVlIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9zZXJpYWxpemVkX3Nj
cmlwdF92YWx1ZV9pbnRlcmZhY2VfY2FjaGVkLXJlYWRvbmx5LXZhbHVlIiwgLyogc2hvcnQgZGVz
Y3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWQtb25seSAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNhY2hlZC1yZWFkb25seS12YWx1
ZSIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAq
LwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9ET01fU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUUsIC8qIGdvYmplY3Qg
dHlwZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5oCmluZGV4IDdlNzEyNjJkN2UwNjlhMzFiYjdlNDYyZThjMzAzODEyNzZiODc2NWEuLjUx
NjE0MTg1OWNlM2U1M2NiNTRlNGJlYmYzZTQ5MjNjYzllNGYzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgKQEAgLTU2LDYgKzU2LDU4IEBAIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3R5cGUgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKTsKIAorLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF92YWx1ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlCisgKiBAdmFsdWU6IEEg
I1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKToKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9zZXRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2Ny
aXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfcmVhZG9ubHlfdmFsdWU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKToKKyAqCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKgord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2lu
dGVyZmFjZV9nZXRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6
ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVkX3ZhbHVlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6CisgKgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSoKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFs
aXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF9jYWNoZWRfdmFsdWU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQorICogQHZhbHVl
OiBBICNXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9z
ZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRE
T01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9ubHlfdmFsdWU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToKKyAqCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKgord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6
ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVkX3JlYWRvbmx5X3ZhbHVlKFdlYktp
dERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpOworCiBHX0VORF9E
RUNMUwogCiAjZW5kaWYgLyogV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCmluZGV4IGZiMmYyMWQ3MWJhYjM0YmExMWZhMWNiZDY0YzI2YTU2NTcy
NDFlNDguLjAyZGVlZGE2ZmViMjIzOWE2MjU3NmI0ZjExZmNkMzg0MGRkMGMyZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
CkBAIC00MiwxMiArNDIsMTUgQEAgQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKIAogc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRhYmxlVmFsdWVzW10g
PQogewotICAgIHsgInZhbHVlIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVZhbHVlKSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCisgICAg
eyAidmFsdWUiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVl
KSwgKGludHB0cl90KXNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVl
LCBOb0ludHJpbnNpYyB9LAorICAgIHsgInJlYWRvbmx5VmFsdWUiLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZSksIChpbnRw
dHJfdCkwLCBOb0ludHJpbnNpYyB9LAorICAgIHsgImNhY2hlZFZhbHVlIiwgRG9udERlbGV0ZSwg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZSksIChpbnRwdHJfdClzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZSwgTm9JbnRyaW5z
aWMgfSwKKyAgICB7ICJjYWNoZWRSZWFkb25seVZhbHVlIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUpLCAoaW50
cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwg
UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IpLCAoaW50
cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwKICAgICB7IDAsIDAsIDAsIDAsIE5vSW50cmluc2ljIH0K
IH07CiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlVGFibGUgPSB7IDQsIDMsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVRhYmxlVmFsdWVzLCAwIH07CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRhYmxlID0geyAxNywgMTUsIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRhYmxlVmFsdWVzLCAwIH07CiAvKiBIYXNoIHRhYmxlIGZv
ciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KQEAg
LTE2NywxMiArMTcwLDcxIEBAIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCCiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oYXNPYmplY3Qoc2xv
dEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gaW1wbC0+cmVhZG9ubHlWYWx1ZSgpID8gaW1wbC0+cmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlh
bGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCisKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNl
LCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fY2FjaGVk
VmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBpbXBsLT5jYWNoZWRWYWx1ZSgpID8gaW1wbC0+Y2FjaGVkVmFsdWUoKS0+ZGVz
ZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7
CisgICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRWYWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBj
YXN0ZWRUaGlzLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7Cisg
ICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oYXNPYmplY3Qo
c2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgaWYgKEpTVmFsdWUgY2Fj
aGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLT5j
YWNoZWRSZWFkb25seVZhbHVlKCkgPyBpbXBsLT5jYWNoZWRSZWFkb25seVZhbHVlKCktPmRlc2Vy
aWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwor
ICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQogewogICAg
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogZG9tT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oYXNPYmplY3Qoc2xv
dEJhc2UpKTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OjpnZXRDb25zdHJ1Y3RvcihleGVjLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAor
dm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgbG9va3VwUHV0PEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSwgQmFzZT4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
JkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRhYmxlLCB0aGlzT2JqZWN0LCBz
bG90KTsKK30KKwordm9pZCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhp
cyA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KHRo
aXNPYmplY3QpOworICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwg
PSBzdGF0aWNfY2FzdDxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKKyAgICBpbXBsLT5zZXRWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShleGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1wbC0+c2V0Q2Fj
aGVkVmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUpKTsKK30K
KworCiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRleCBlMWUyNTVmYmJjMzdhYjllOGEzNTlkYTdlOTMw
ZTNmN2Y3YjI2MmIxLi4zNjNmYzg1ZTBlN2M4NTVkYmE5ZTA5OGIyMDY2OGViNTllZDMxYjNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5oCkBAIC00NCw2ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
Y3JlYXRlUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvIHNfaW5mbzsKIApAQCAtNTMsNiArNTQsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBt
X2NhY2hlZFZhbHVlOworICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNo
ZWRSZWFkb25seVZhbHVlOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpOworCiAgICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbDsgfQogICAgIHZvaWQgcmVsZWFzZUlt
cGwoKSB7IG1faW1wbC0+ZGVyZWYoKTsgbV9pbXBsID0gMDsgfQogCkBAIC02Myw3ICs2OCw3IEBA
IHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6SlNHbG9iYWxEYXRhJik7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
ewpAQCAtMTA1LDcgKzExMCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKSB7IH0KIHByb3Rl
Y3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07
CiAKIGNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKQEAgLTEzOCw2ICsxNDMsMTEgQEAgcHJv
dGVjdGVkOgogLy8gQXR0cmlidXRlcwogCiBKU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
VmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVJlYWRvbmx5VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNhY2hlZFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBK
U0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDYWNoZWRSZWFkb25seVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImKTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aAppbmRleCBmZjk4MTMzZGJhODA2ZGJjNjJkNjQ2YTY0ODA4ZmYwYWFkNWFiNGU5Li5iNWYzYTE3
Yzk1YjI1MTEyMWI1OTUxZGI3YmNhNWJlZDQ0OTliN2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCkBAIC0zMiw2ICsz
MiwxMSBAQAogCiBAaW50ZXJmYWNlIERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UgOiBET01PYmplY3QKIC0gKE5TU3RyaW5nICopdmFsdWU7CistICh2b2lkKXNldFZhbHVlOihO
U1N0cmluZyAqKW5ld1ZhbHVlOworLSAoTlNTdHJpbmcgKilyZWFkb25seVZhbHVlOworLSAoTlNT
dHJpbmcgKiljYWNoZWRWYWx1ZTsKKy0gKHZvaWQpc2V0Q2FjaGVkVmFsdWU6KE5TU3RyaW5nICop
bmV3Q2FjaGVkVmFsdWU7CistIChOU1N0cmluZyAqKWNhY2hlZFJlYWRvbmx5VmFsdWU7CiBAZW5k
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UubW0KaW5kZXggMWEwZmM3YjExYTc5OGQxMWZkZDVjMTY3MmMwMzc0
MWY5YmM2NjJjYy4uMzg4ZjFjNTZkN2NiMjgyZTc5ZGUzMGM5NzFmOGNjMDU1N2FmZjExMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLm1tCkBAIC03NSw2ICs3NSw0MCBAQAogICAgIHJldHVybiBJTVBMLT52YWx1ZSgpLT50
b1N0cmluZygpOwogfQogCistICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKW5ld1ZhbHVlCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIEFTU0VSVChu
ZXdWYWx1ZSk7CisKKyAgICBJTVBMLT5zZXRWYWx1ZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmluZyhuZXdWYWx1ZSkpKTsKK30KKworLSAoTlNTdHJpbmcg
KilyZWFkb25seVZhbHVlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIHJldHVybiBJTVBMLT5yZWFkb25seVZhbHVlKCktPnRvU3RyaW5nKCk7Cit9CisK
Ky0gKE5TU3RyaW5nICopY2FjaGVkVmFsdWUKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPmNhY2hlZFZhbHVlKCktPnRvU3RyaW5n
KCk7Cit9CisKKy0gKHZvaWQpc2V0Q2FjaGVkVmFsdWU6KE5TU3RyaW5nICopbmV3Q2FjaGVkVmFs
dWUKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgQVNT
RVJUKG5ld0NhY2hlZFZhbHVlKTsKKworICAgIElNUEwtPnNldENhY2hlZFZhbHVlKFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5nKG5ld0NhY2hlZFZhbHVl
KSkpOworfQorCistIChOU1N0cmluZyAqKWNhY2hlZFJlYWRvbmx5VmFsdWUKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPmNhY2hl
ZFJlYWRvbmx5VmFsdWUoKS0+dG9TdHJpbmcoKTsKK30KKwogQGVuZAogCiBXZWJDb3JlOjpUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlKERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UgKndyYXBwZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5pZGwKaW5kZXggZWUxNzg3ZTQ4YWNkMGEyNWQ3MjU0ODJiYzdk
Y2JkNzE5MThjYzY2OS4uZGRkZWU5ZmFlNjRkZWMzZjA5NjkyNzIwYjczMDYzMmFhMTY5NGM5NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmlkbApA
QCAtMzAsOCArMzAsOSBAQCBtb2R1bGUgdGVzdCB7CiAgICAgICAgIENvbmRpdGlvbmFsPUNvbmRp
dGlvbjF8Q29uZGl0aW9uMiwKICAgICAgICAgQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5nIGhlbGxv
LCBpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUpLAogICAgIF0gVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSB7Ci0gICAgICAgIC8vIFRoZSBjYXNlIG9mIGEgc2luZ2xlIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSBhdHRyaWJ1dGUgaXMgYSBiaXQgb2YgYQotICAgICAgICAvLyBz
cGVjaWFsIGNhc2UuCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTZXJpYWxpemVkU2NyaXB0
VmFsdWUgdmFsdWU7CisgICAgICAgIGF0dHJpYnV0ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFs
dWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgcmVh
ZG9ubHlWYWx1ZTsKKyAgICAgICAgYXR0cmlidXRlIFtDYWNoZWRBdHRyaWJ1dGVdIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSBjYWNoZWRWYWx1ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtD
YWNoZWRBdHRyaWJ1dGVdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBjYWNoZWRSZWFkb25seVZhbHVl
OwogICAgIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDNkMzU4MWJjNmY3ODUxMjY1YTU5N2Y5NzhlZTQ4YWU1
ZjQ1OTI0ZjMuLjI3ZTUxYjIzMDdiNDg5ZjE3ZDgwZDYyYzQzZGU4N2FmMmUyZTQ4ODMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCkBAIC00Miw4ICs0Miw4MCBAQCBuYW1lc3BhY2UgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUludGVybmFsIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgVjhfVVNF
KFQpIHsgfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlQXR0ckdldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LnZhbHVlLl9nZXQiKTsKKyAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBp
bXAgPSBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOworICAgIHJldHVybiBpbXAtPnZhbHVlKCkgPyBpbXAtPnZhbHVlKCktPmRlc2Vy
aWFsaXplKCkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHZhbHVlQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS52YWx1
ZS5fc2V0Iik7CisgICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wID0g
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2ID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUodmFsdWUpOworICAgIGltcC0+c2V0VmFsdWUoV1RGOjpnZXRQdHIo
dikpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFk
b25seVZhbHVlQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLnJlYWRvbmx5VmFsdWUuX2dldCIpOworICAgIFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcCA9IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGltcC0+
cmVhZG9ubHlWYWx1ZSgpID8gaW1wLT5yZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKCkgOiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY2FjaGVkVmFsdWVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9N
LlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY2FjaGVkVmFsdWUuX2dldCIpOwor
ICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gcHJvcGVydHlOYW1lID0gdjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJjYWNoZWRWYWx1ZSIpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9
IGluZm8uSG9sZGVyKCktPkdldEhpZGRlblZhbHVlKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCF2
YWx1ZS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSogc2VyaWFsaXplZCA9IGltcC0+Y2FjaGVkVmFsdWUoKTsKKyAgICB2YWx1ZSA9IHNlcmlh
bGl6ZWQgPyBzZXJpYWxpemVkLT5kZXNlcmlhbGl6ZSgpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KHY4OjpOdWxsKCkpOworICAgIGluZm8uSG9sZGVyKCktPlNldEhpZGRlblZhbHVlKHByb3BlcnR5
TmFtZSwgdmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgY2FjaGVk
VmFsdWVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNhY2hlZFZhbHVl
Ll9zZXQiKTsKKyAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXAgPSBW
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHYgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZSh2YWx1ZSk7CisgICAgaW1wLT5zZXRDYWNoZWRWYWx1ZShXVEY6Omdl
dFB0cih2KSk7CisgICAgaW5mby5Ib2xkZXIoKS0+RGVsZXRlSGlkZGVuVmFsdWUodjg6OlN0cmlu
Zzo6TmV3U3ltYm9sKCJjYWNoZWRWYWx1ZSIpKTsgLy8gSW52YWxpZGF0ZSB0aGUgY2FjaGVkIHZh
bHVlLgorICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjYWNo
ZWRSZWFkb25seVZhbHVlQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNhY2hlZFJlYWRvbmx5VmFsdWUuX2dldCIpOwor
ICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gcHJvcGVydHlOYW1lID0gdjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJjYWNoZWRSZWFkb25seVZhbHVlIik7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlID0gaW5mby5Ib2xkZXIoKS0+R2V0SGlkZGVuVmFsdWUocHJvcGVydHlOYW1lKTsKKyAg
ICBpZiAoIXZhbHVlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcCA9IFY4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiBzZXJpYWxpemVkID0gaW1wLT5jYWNoZWRSZWFkb25seVZhbHVlKCk7Cisg
ICAgdmFsdWUgPSBzZXJpYWxpemVkID8gc2VyaWFsaXplZC0+ZGVzZXJpYWxpemUoKSA6IHY4OjpI
YW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgpKTsKKyAgICBpbmZvLkhvbGRlcigpLT5TZXRIaWRk
ZW5WYWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbAog
CitzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQXR0cnNbXSA9IHsKKyAgICAvLyBBdHRyaWJ1dGUgJ3ZhbHVlJyAoVHlwZTogJ2F0
dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJ2YWx1ZSIsIFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6dmFsdWVBdHRyR2V0dGVyLCBUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlSW50ZXJuYWw6OnZhbHVlQXR0clNldHRlciwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCisgICAgLy8gQXR0cmlidXRlICdyZWFkb25seVZhbHVlJyAoVHlwZTogJ3JlYWRvbmx5IGF0
dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJyZWFkb25seVZhbHVlIiwgVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsOjpyZWFkb25seVZhbHVlQXR0ckdldHRlciwg
MCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRF
RkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAv
KiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICdjYWNoZWRWYWx1ZScgKFR5cGU6
ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDYWNoZWRBdHRyaWJ1dGUnKQorICAgIHsiY2FjaGVkVmFs
dWUiLCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlSW50ZXJuYWw6OmNhY2hlZFZh
bHVlQXR0ckdldHRlciwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFs
OjpjYWNoZWRWYWx1ZUF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6
OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0
cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0
ZSAnY2FjaGVkUmVhZG9ubHlWYWx1ZScgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0
dHI6ICdDYWNoZWRBdHRyaWJ1dGUnKQorICAgIHsiY2FjaGVkUmVhZG9ubHlWYWx1ZSIsIFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6Y2FjaGVkUmVhZG9ubHlWYWx1
ZUF0dHJHZXR0ZXIsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0Nv
bnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2
ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorfTsKKwogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y29uc3RydWN0b3JDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuQ29uc3RydWN0b3IiKTsKQEAgLTY2LDcg
KzEzOCw2IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJhY2soCiAKICAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIGltcGwuZ2V0KCkpOwogICAgIGltcGwtPnJlZigp
OwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVBbmRTZXRQcm9wZXJ0eSh3
cmFwcGVyLCAidmFsdWUiLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpE
b250RGVsZXRlIHwgdjg6OlJlYWRPbmx5KSwgaW1wbC0+dmFsdWUoKSk7CiAgICAgVjhET01XcmFw
cGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbC5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CiAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiB9
CkBAIC03Nyw3ICsxNDgsNyBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IENvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQogCiAgICAgdjg6Okxv
Y2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmU7CiAgICAgZGVmYXVsdFNpZ25hdHVy
ZSA9IGNvbmZpZ3VyZVRlbXBsYXRlKGRlc2MsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6aW50ZXJuYWxGaWVsZENvdW50LAotICAgICAg
ICAwLCAwLAorICAgICAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQXR0cnMs
IFdURl9BUlJBWV9MRU5HVEgoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUF0dHJz
KSwKICAgICAgICAgMCwgMCk7CiAgICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRTaWduYXR1cmUpOyAv
LyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgogICAgIGRlc2MtPlNldENhbGxI
YW5kbGVyKFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y29uc3RydWN0b3JD
YWxsYmFjayk7CkBAIC0xMzAsNyArMjAxLDYgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OndyYXBTbG93KFRlc3RTZXJpYWwKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBpbXBsLT5yZWYoKTsKLSAgICBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplQW5kU2V0UHJvcGVydHkod3JhcHBlciwgInZhbHVlIiwg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6RG9udERlbGV0ZSB8IHY4OjpS
ZWFkT25seSksIGltcGwtPnZhbHVlKCkpOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IHdyYXBwZXJIYW5kbGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIp
OwogCiAgICAgaWYgKCFoYXNEZXBlbmRlbnRMaWZldGltZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>