<?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>68956</bug_id>
          
          <creation_ts>2011-09-27 16:36:10 -0700</creation_ts>
          <short_desc>[MutationObservers] Implement WebKitMutationObserver.observe for attributes</short_desc>
          <delta_ts>2011-10-17 16:57:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>68729</blocked>
    
    <blocked>68955</blocked>
    
    <blocked>68957</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Rafael Weinstein">rafaelw</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamk</cc>
    
    <cc>arv</cc>
    
    <cc>darin</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>474347</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-09-27 16:36:10 -0700</bug_when>
    <thetext>[MutationObservers] Implement WebKitMutationObserver.observe for attributes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480327</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-07 14:51:47 -0700</bug_when>
    <thetext>As discussed, this patch is expected to include registration of observers and delivery at end of outermost script exit, so as to expose the new functionality to layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483264</commentid>
    <comment_count>2</comment_count>
      <attachid>110865</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-13 10:12:28 -0700</bug_when>
    <thetext>Created attachment 110865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483266</commentid>
    <comment_count>3</comment_count>
      <attachid>110865</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-13 10:14:02 -0700</bug_when>
    <thetext>Comment on attachment 110865
Patch

Initial work -- Not yet ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483497</commentid>
    <comment_count>4</comment_count>
      <attachid>110906</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-13 14:33:57 -0700</bug_when>
    <thetext>Created attachment 110906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483500</commentid>
    <comment_count>5</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-13 14:35:43 -0700</bug_when>
    <thetext>Now ready for review. This is my first webkit feature work (earlier patchers were chromium plumbing) -- please do *NOT* be gentle =-).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483532</commentid>
    <comment_count>6</comment_count>
      <attachid>110906</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-13 15:02:43 -0700</bug_when>
    <thetext>Comment on attachment 110906
Patch

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

I&apos;d be interested in seeing a test case where attribute is added by HTML5 parser.

&gt; LayoutTests/fast/mutation/observe-attributes-expected.txt:11
&gt; +PASS mutations.length is 1
&gt; +PASS mutations[0].type is &quot;attributes&quot;
&gt; +PASS mutations[0].attributeName is &quot;foo&quot;
&gt; +PASS mutations[0].attributeNamespace is null
&gt; +PASS mutations is null
&gt; +PASS mutations.length is 2

These results aren&apos;t informative. They don&apos;t tell us why we expect these results. You probably need to use debug or include some function calls inside the first argument of shouldBe to print out some description on what happened before checking these values.

&gt; LayoutTests/fast/mutation/observe-attributes.html:16
&gt; +var mutations;
&gt; +var mutations2;

Do they really need to be in the global scope?

&gt; LayoutTests/fast/mutation/observe-attributes.html:31
&gt; +        observer.observe(div, { attributes: true, characterData: true });
&gt; +        div.setAttribute(&apos;foo&apos;, &apos;bar&apos;);

It&apos;ll be nice to print something here by debug so that we can see what the test is doing in the expected result.

&gt; LayoutTests/fast/mutation/observe-attributes.html:237
&gt; +    var div, div2, subDiv;
&gt; +    var observer;
&gt; +    var listener;
&gt; +    var hit; 

It seems like only variables that need to be accessed finish are div and listener.
The rest should be declared inside start.

&gt; Source/WebCore/ChangeLog:9
&gt; +        on nodes, delivering mutation records at the end of the outer-most

Seems like we can fit &quot;on nodes&quot; on the previous line to avoid awkward line wrapping?

&gt; Source/WebCore/dom/Element.cpp:627
&gt; +    OwnPtr&lt;ObserverPtrVector&gt; observers = element-&gt;interestedMutationObservers(WebKitMutationObserver::Attributes);
&gt; +    if (observers) {

Please declare observers inside the if statement as in:
if (OwnPtr&lt;...&gt; observers = ...)
or early exit as in:
if (!observers)
    return;

&gt; Source/WebCore/dom/Element.cpp:657
&gt; +    // The call to attributeChanged below may dispatch DOMSubtreeModified, so it&apos;s important to enqueue a MutationRecord now.
&gt; +    enqueueAttributesMutationRecord(this, attributeName);

Are you certain that new attribute value is always set? I bet there are cases where setting attribute value is ignored.

&gt; Source/WebCore/dom/Node.cpp:558
&gt; +    MutationObserverData* d = mutationObserverData();

Please don&apos;t use an abbreviation like d.

&gt; Source/WebCore/dom/Node.cpp:559
&gt; +    if (d) {

Please declare the variable inside if.

&gt; Source/WebCore/dom/Node.cpp:2669
&gt; +PassOwnPtr&lt;ObserverPtrVector&gt; Node::interestedMutationObservers(WebKitMutationObserver::Type type)

I&apos;m not sure if &quot;interested&quot; MutationObservers is a particularly good name. I personally prefer filterMutationObservers if any.

&gt; Source/WebCore/dom/Node.cpp:2671
&gt; +    MutationObserverData* d = mutationObserverData();

Please don&apos;t use abbreviations like d.

&gt; Source/WebCore/dom/Node.cpp:2675
&gt; +    OwnPtr&lt;ObserverPtrVector&gt; interestedObservers = adoptPtr(new Vector&lt;WebKitMutationObserver*&gt;);

More conventional approach is for this function to get a mutable reference of a Vector and fill that up. r- because of this conventional interface.

&gt; Source/WebCore/dom/Node.cpp:2686
&gt; +    MutationObserverData* d = ensureMutationObserverData();

Ditto about one letter variable name.

&gt; Source/WebCore/dom/Node.cpp:2701
&gt; +    MutationObserverData* d = mutationObserverData();

Ditto.

&gt; Source/WebCore/dom/Node.h:97
&gt; +#if ENABLE(MUTATION_OBSERVERS)
&gt; +typedef Vector&lt;WebKitMutationObserver*&gt; ObserverPtrVector;
&gt; +#endif

Please make the suggested interface change above so that we can get rid of this typedef.

&gt; Source/WebCore/dom/Node.h:604
&gt; +    // Returns true if the observer wasn&apos;t already registered on this node.
&gt; +    bool registerMutationObserver(PassRefPtr&lt;WebKitMutationObserver&gt;, uint8_t options);

Instead of adding a comment, can we use an enum e.g. ObserverRegistrationStatus { ObserverIsNewlyRegistered, ObserverWasAlreadyRegistered } ?

&gt; Source/WebCore/dom/NodeRareData.h:82
&gt; +    MutationObserverRegistration(PassRefPtr&lt;WebKitMutationObserver&gt; observer, uint8_t options)

I don&apos;t think we normally use uint8_t. Please use unsigned or unsigned char instead. You can even typedef something if you&apos;d like.

&gt; Source/WebCore/dom/NodeRareData.h:83
&gt; +        : observer(observer),

, should be on the next line.

&gt; Source/WebCore/dom/NodeRareData.h:84
&gt; +          options(options) { }

I think { } needs to be on a separate line.

&gt; Source/WebCore/dom/NodeRareData.h:92
&gt; +    uint8_t options;

Ditto about uint8_t.

&gt; Source/WebCore/dom/WebKitMutationObserver.h:50
&gt; +    enum Type {

Type sounds too generic. How about MutationType?

&gt; Source/WebCore/dom/WebKitMutationObserver.h:51
&gt; +        ChildList = (1 &lt;&lt; 0),

We don&apos;t normally wrap these values by parenthesis.

&gt; Source/WebCore/dom/WebKitMutationObserver.h:56
&gt; +    enum Flags {

Flags sounds too generic too. How about MutationObservationFilter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483735</commentid>
    <comment_count>7</comment_count>
      <attachid>110906</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-13 20:01:41 -0700</bug_when>
    <thetext>Comment on attachment 110906
Patch

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

&gt;&gt; LayoutTests/fast/mutation/observe-attributes.html:16
&gt;&gt; +var mutations2;
&gt; 
&gt; Do they really need to be in the global scope?

Yes. otherwise they are not visible to shouldBe() which evals in the global scope.

&gt;&gt; LayoutTests/fast/mutation/observe-attributes.html:31
&gt;&gt; +        div.setAttribute(&apos;foo&apos;, &apos;bar&apos;);
&gt; 
&gt; It&apos;ll be nice to print something here by debug so that we can see what the test is doing in the expected result.

Debug output added

&gt;&gt; LayoutTests/fast/mutation/observe-attributes.html:237
&gt;&gt; +    var hit; 
&gt; 
&gt; It seems like only variables that need to be accessed finish are div and listener.
&gt; The rest should be declared inside start.

hit removed. Only div2 &amp; subDiv aren&apos;t used in finish() for cleanup. These are all scope inside this subtest. Doesn&apos;t seem to buy very much to move them into start().

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        on nodes, delivering mutation records at the end of the outer-most
&gt; 
&gt; Seems like we can fit &quot;on nodes&quot; on the previous line to avoid awkward line wrapping?

done.

&gt;&gt; Source/WebCore/dom/Element.cpp:627
&gt;&gt; +    if (observers) {
&gt; 
&gt; Please declare observers inside the if statement as in:
&gt; if (OwnPtr&lt;...&gt; observers = ...)
&gt; or early exit as in:
&gt; if (!observers)
&gt;     return;

Done. now exiting early.

&gt;&gt; Source/WebCore/dom/Element.cpp:657
&gt;&gt; +    enqueueAttributesMutationRecord(this, attributeName);
&gt; 
&gt; Are you certain that new attribute value is always set? I bet there are cases where setting attribute value is ignored.

I don&apos;t see how that can happen. If someone sees something I&apos;m missing, please point it out.

&gt;&gt; Source/WebCore/dom/Node.cpp:558
&gt;&gt; +    MutationObserverData* d = mutationObserverData();
&gt; 
&gt; Please don&apos;t use an abbreviation like d.

done.

&gt;&gt; Source/WebCore/dom/Node.cpp:559
&gt;&gt; +    if (d) {
&gt; 
&gt; Please declare the variable inside if.

done

&gt;&gt; Source/WebCore/dom/Node.cpp:2669
&gt;&gt; +PassOwnPtr&lt;ObserverPtrVector&gt; Node::interestedMutationObservers(WebKitMutationObserver::Type type)
&gt; 
&gt; I&apos;m not sure if &quot;interested&quot; MutationObservers is a particularly good name. I personally prefer filterMutationObservers if any.

The point here is to retrieve the observers that *will* need to receive the given mutation type. I&apos;ve tried a new name. Let me know if this works for you.

&gt;&gt; Source/WebCore/dom/Node.cpp:2671
&gt;&gt; +    MutationObserverData* d = mutationObserverData();
&gt; 
&gt; Please don&apos;t use abbreviations like d.

Done.

&gt;&gt; Source/WebCore/dom/Node.cpp:2675
&gt;&gt; +    OwnPtr&lt;ObserverPtrVector&gt; interestedObservers = adoptPtr(new Vector&lt;WebKitMutationObserver*&gt;);
&gt; 
&gt; More conventional approach is for this function to get a mutable reference of a Vector and fill that up. r- because of this conventional interface.

Done

&gt;&gt; Source/WebCore/dom/Node.cpp:2686
&gt;&gt; +    MutationObserverData* d = ensureMutationObserverData();
&gt; 
&gt; Ditto about one letter variable name.

Done.

&gt;&gt; Source/WebCore/dom/Node.cpp:2701
&gt;&gt; +    MutationObserverData* d = mutationObserverData();
&gt; 
&gt; Ditto.

Done

&gt;&gt; Source/WebCore/dom/Node.h:97
&gt;&gt; +#endif
&gt; 
&gt; Please make the suggested interface change above so that we can get rid of this typedef.

done

&gt;&gt; Source/WebCore/dom/Node.h:604
&gt;&gt; +    bool registerMutationObserver(PassRefPtr&lt;WebKitMutationObserver&gt;, uint8_t options);
&gt; 
&gt; Instead of adding a comment, can we use an enum e.g. ObserverRegistrationStatus { ObserverIsNewlyRegistered, ObserverWasAlreadyRegistered } ?

Done.

&gt;&gt; Source/WebCore/dom/NodeRareData.h:82
&gt;&gt; +    MutationObserverRegistration(PassRefPtr&lt;WebKitMutationObserver&gt; observer, uint8_t options)
&gt; 
&gt; I don&apos;t think we normally use uint8_t. Please use unsigned or unsigned char instead. You can even typedef something if you&apos;d like.

Done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:83
&gt;&gt; +        : observer(observer),
&gt; 
&gt; , should be on the next line.

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:84
&gt;&gt; +          options(options) { }
&gt; 
&gt; I think { } needs to be on a separate line.

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:92
&gt;&gt; +    uint8_t options;
&gt; 
&gt; Ditto about uint8_t.

done.

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.h:50
&gt;&gt; +    enum Type {
&gt; 
&gt; Type sounds too generic. How about MutationType?

done

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.h:56
&gt;&gt; +    enum Flags {
&gt; 
&gt; Flags sounds too generic too. How about MutationObservationFilter?

These aren&apos;t filter values. Using more descriptive name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483740</commentid>
    <comment_count>8</comment_count>
      <attachid>110952</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-13 20:33:35 -0700</bug_when>
    <thetext>Created attachment 110952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484139</commentid>
    <comment_count>9</comment_count>
      <attachid>110952</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-14 11:50:02 -0700</bug_when>
    <thetext>Comment on attachment 110952
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        delivering mutation records at the end of the outer-most script invokation and

Please add a note that the outermost script invokation stuff only works in V8.

&gt; Source/WebCore/bindings/v8/V8Proxy.cpp:69
&gt; +#if ENABLE(MUTATION_OBSERVERS)

This guard isn&apos;t necessary, as the include file will be empty of the flag isn&apos;t enabled.

&gt; Source/WebCore/dom/Element.cpp:52
&gt; +#if ENABLE(MUTATION_OBSERVERS)

Another unnecessary guard.

&gt; Source/WebCore/dom/Node.h:35
&gt; +#if ENABLE(MUTATION_OBSERVERS)

Another unnecessary guard.

&gt; Source/WebCore/dom/Node.h:606
&gt; +

nit: Remove one line of whitespace here

&gt; Source/WebCore/dom/NodeRareData.h:31
&gt; +#if ENABLE(MUTATION_OBSERVERS)

Another unnecessary guard.

&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:61
&gt; +    uint8_t optionFlags = 0;

unsigned char</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484149</commentid>
    <comment_count>10</comment_count>
      <attachid>110952</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-14 12:02:01 -0700</bug_when>
    <thetext>Comment on attachment 110952
Patch

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

&gt; Source/WebCore/dom/Node.h:67
&gt; +#if ENABLE(MUTATION_OBSERVERS)

This guard may not be worth the noise either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484158</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 12:13:07 -0700</bug_when>
    <thetext>Sam, Maciej, Darin, do you have any comments on this patch? If not, I&apos;m going to r+ it by this coming Monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484171</commentid>
    <comment_count>12</comment_count>
      <attachid>111047</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-14 12:21:13 -0700</bug_when>
    <thetext>Created attachment 111047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484229</commentid>
    <comment_count>13</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-14 13:18:35 -0700</bug_when>
    <thetext>Sorry -- learning the tools. Apparently I need to reply to review comments before uploading the new patch.

Adam, the new patch addresses all of your comments (i.e. ALL DONE).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484231</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 13:20:20 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Sorry -- learning the tools. Apparently I need to reply to review comments before uploading the new 
patch.

Comments are still visible on the old patch. You can reply there instead :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484234</commentid>
    <comment_count>15</comment_count>
      <attachid>110952</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-14 13:24:32 -0700</bug_when>
    <thetext>Comment on attachment 110952
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        delivering mutation records at the end of the outer-most script invokation and
&gt; 
&gt; Please add a note that the outermost script invokation stuff only works in V8.

done

&gt;&gt; Source/WebCore/bindings/v8/V8Proxy.cpp:69
&gt;&gt; +#if ENABLE(MUTATION_OBSERVERS)
&gt; 
&gt; This guard isn&apos;t necessary, as the include file will be empty of the flag isn&apos;t enabled.

done

&gt;&gt; Source/WebCore/dom/Element.cpp:52
&gt;&gt; +#if ENABLE(MUTATION_OBSERVERS)
&gt; 
&gt; Another unnecessary guard.

done

&gt;&gt; Source/WebCore/dom/Node.h:35
&gt;&gt; +#if ENABLE(MUTATION_OBSERVERS)
&gt; 
&gt; Another unnecessary guard.

done

&gt;&gt; Source/WebCore/dom/Node.h:67
&gt;&gt; +#if ENABLE(MUTATION_OBSERVERS)
&gt; 
&gt; This guard may not be worth the noise either.

done

&gt;&gt; Source/WebCore/dom/Node.h:606
&gt;&gt; +
&gt; 
&gt; nit: Remove one line of whitespace here

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:31
&gt;&gt; +#if ENABLE(MUTATION_OBSERVERS)
&gt; 
&gt; Another unnecessary guard.

done

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:61
&gt;&gt; +    uint8_t optionFlags = 0;
&gt; 
&gt; unsigned char

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485387</commentid>
    <comment_count>16</comment_count>
      <attachid>111301</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-17 12:26:42 -0700</bug_when>
    <thetext>Created attachment 111301
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485388</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 12:28:31 -0700</bug_when>
    <thetext>Attachment 111301 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Updating OpenSource
Current branch master is up to date.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485455</commentid>
    <comment_count>18</comment_count>
      <attachid>111301</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-17 13:29:06 -0700</bug_when>
    <thetext>Comment on attachment 111301
Patch

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

&gt; Source/WebCore/dom/Element.cpp:64
&gt; +#if ENABLE(MUTATION_OBSERVERS)

One more unnecessary #if

&gt; Source/WebCore/dom/Node.h:34
&gt; +#include &quot;WebKitMutationObserver.h&quot;

Unfortunately, this will fail on Mac, I think.  WebKitMutationObserver.h needs to be made &quot;Private&quot; in WebCore.xcodeproj.  This may be possible without running Xcode by adding

&quot;settings = {ATTRIBUTES = (Private, ); };&quot;

to the first line for WebKitMutationObserver.h in WebCore.xcodeproj/project.pbxproj (around line 5469).  But safest is to actually do that from Xcode.  Too bad the EWS didn&apos;t try to build this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485470</commentid>
    <comment_count>19</comment_count>
      <attachid>111301</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-17 13:45:48 -0700</bug_when>
    <thetext>Comment on attachment 111301
Patch

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

Some nits.

&gt; Source/WebCore/dom/Node.cpp:2708
&gt; +Node::MutationRegistrationResult Node::registerMutationObserver(PassRefPtr&lt;WebKitMutationObserver&gt; observer, unsigned char options)

We should probably typedef unsigned char.

&gt; Source/WebCore/dom/Node.cpp:2723
&gt; +void Node::deregisterMutationObserver(PassRefPtr&lt;WebKitMutationObserver&gt; observer)

Nit: s/deregister/unregister/

&gt; Source/WebCore/dom/NodeRareData.h:93
&gt; +struct MutationObserverRegistration {
&gt; +    MutationObserverRegistration(PassRefPtr&lt;WebKitMutationObserver&gt; observer, unsigned char options)

Nit: I&apos;d prefer calling an entry so MutationObserverEntry.

&gt; Source/WebCore/dom/NodeRareData.h:105
&gt; +    RefPtr&lt;WebKitMutationObserver&gt; observer;
&gt; +    unsigned char options;

It&apos;ll be nice if these members were private and this class instead provided methods like matches(WebKitMutationObserver:: MutationType).

&gt; Source/WebCore/dom/NodeRareData.h:108
&gt; +typedef Vector&lt;MutationObserverRegistration&gt; MutationObserverRegistrationVector;

I&apos;m not sure typedef-ing this vector is that helpful. It only saves to characters.

&gt; Source/WebCore/dom/NodeRareData.h:109
&gt; +struct MutationObserverData {

I don&apos;t think MutationObserverData is a descriptive name. I&apos;d call it MutationObserverRegistry or MutationObserverList.

&gt; Source/WebCore/dom/NodeRareData.h:112
&gt; +public:

No need. The default visibility for struct is public.

&gt; Source/WebCore/dom/NodeRareData.h:114
&gt; +    ~MutationObserverData() { }

No need. Compiler-generated d&apos;tor should do the work.

&gt; Source/WebCore/dom/NodeRareData.h:197
&gt; +    OwnPtr&lt;MutationObserverData&gt; m_mutationObserverData;

I&apos;d declare OwnPtr to Vector&lt;MutationObserverRegistration&gt; if I were you as in:
OwnPtr&lt;Vector&lt;MutationObserverRegistration&gt; &gt; m_mutationObservers;

&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:78
&gt; +    for (Vector&lt;Node*&gt;::iterator iter = m_registrations.begin(); iter !=  m_registrations.end(); ++iter)

Since it&apos;s a vector, you can iterate through them using a size_t index.

&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:84
&gt; +void WebKitMutationObserver::wasDeregistered(Node* node)

Nit: unregistered.

&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:113
&gt; +        MutationObserverSet::iterator iter = activeMutationObservers().begin();
&gt; +        RefPtr&lt;WebKitMutationObserver&gt; observer = *iter;
&gt; +        activeMutationObservers().remove(iter);

ListHashSet has removeLast() and last(). We should use that here.

&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:118
&gt; +void WebKitMutationObserver::deliver()

I&apos;d put this function above deliverAllMutations since enqueueMutationRecord and deliver are both non-static.

&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:122
&gt; +    m_callback-&gt;handleEvent(&amp;records, this);

Really? We call it handleEvent? That&apos;s awfully misleading. We should use some other name for this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485534</commentid>
    <comment_count>20</comment_count>
      <attachid>111301</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-17 14:56:42 -0700</bug_when>
    <thetext>Comment on attachment 111301
Patch

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

&gt;&gt; Source/WebCore/dom/Element.cpp:64
&gt;&gt; +#if ENABLE(MUTATION_OBSERVERS)
&gt; 
&gt; One more unnecessary #if

done

&gt;&gt; Source/WebCore/dom/Node.cpp:2708
&gt;&gt; +Node::MutationRegistrationResult Node::registerMutationObserver(PassRefPtr&lt;WebKitMutationObserver&gt; observer, unsigned char options)
&gt; 
&gt; We should probably typedef unsigned char.

coming in adam&apos;s pending patch.

&gt;&gt; Source/WebCore/dom/Node.cpp:2723
&gt;&gt; +void Node::deregisterMutationObserver(PassRefPtr&lt;WebKitMutationObserver&gt; observer)
&gt; 
&gt; Nit: s/deregister/unregister/

done

&gt;&gt; Source/WebCore/dom/Node.h:34
&gt;&gt; +#include &quot;WebKitMutationObserver.h&quot;
&gt; 
&gt; Unfortunately, this will fail on Mac, I think.  WebKitMutationObserver.h needs to be made &quot;Private&quot; in WebCore.xcodeproj.  This may be possible without running Xcode by adding
&gt; 
&gt; &quot;settings = {ATTRIBUTES = (Private, ); };&quot;
&gt; 
&gt; to the first line for WebKitMutationObserver.h in WebCore.xcodeproj/project.pbxproj (around line 5469).  But safest is to actually do that from Xcode.  Too bad the EWS didn&apos;t try to build this patch.

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:93
&gt;&gt; +    MutationObserverRegistration(PassRefPtr&lt;WebKitMutationObserver&gt; observer, unsigned char options)
&gt; 
&gt; Nit: I&apos;d prefer calling an entry so MutationObserverEntry.

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:105
&gt;&gt; +    unsigned char options;
&gt; 
&gt; It&apos;ll be nice if these members were private and this class instead provided methods like matches(WebKitMutationObserver:: MutationType).

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:108
&gt;&gt; +typedef Vector&lt;MutationObserverRegistration&gt; MutationObserverRegistrationVector;
&gt; 
&gt; I&apos;m not sure typedef-ing this vector is that helpful. It only saves to characters.

removed

&gt;&gt; Source/WebCore/dom/NodeRareData.h:109
&gt;&gt; +struct MutationObserverData {
&gt; 
&gt; I don&apos;t think MutationObserverData is a descriptive name. I&apos;d call it MutationObserverRegistry or MutationObserverList.

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:112
&gt;&gt; +public:
&gt; 
&gt; No need. The default visibility for struct is public.

removed

&gt;&gt; Source/WebCore/dom/NodeRareData.h:114
&gt;&gt; +    ~MutationObserverData() { }
&gt; 
&gt; No need. Compiler-generated d&apos;tor should do the work.

removed

&gt;&gt; Source/WebCore/dom/NodeRareData.h:197
&gt;&gt; +    OwnPtr&lt;MutationObserverData&gt; m_mutationObserverData;
&gt; 
&gt; I&apos;d declare OwnPtr to Vector&lt;MutationObserverRegistration&gt; if I were you as in:
&gt; OwnPtr&lt;Vector&lt;MutationObserverRegistration&gt; &gt; m_mutationObservers;

done

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:78
&gt;&gt; +    for (Vector&lt;Node*&gt;::iterator iter = m_registrations.begin(); iter !=  m_registrations.end(); ++iter)
&gt; 
&gt; Since it&apos;s a vector, you can iterate through them using a size_t index.

kept. per discussion

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:84
&gt;&gt; +void WebKitMutationObserver::wasDeregistered(Node* node)
&gt; 
&gt; Nit: unregistered.

done

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:113
&gt;&gt; +        activeMutationObservers().remove(iter);
&gt; 
&gt; ListHashSet has removeLast() and last(). We should use that here.

kept. per discussion

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:118
&gt;&gt; +void WebKitMutationObserver::deliver()
&gt; 
&gt; I&apos;d put this function above deliverAllMutations since enqueueMutationRecord and deliver are both non-static.

done

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:122
&gt;&gt; +    m_callback-&gt;handleEvent(&amp;records, this);
&gt; 
&gt; Really? We call it handleEvent? That&apos;s awfully misleading. We should use some other name for this method.

kept for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485535</commentid>
    <comment_count>21</comment_count>
      <attachid>111326</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-17 14:57:07 -0700</bug_when>
    <thetext>Created attachment 111326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485537</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 15:00:18 -0700</bug_when>
    <thetext>Attachment 111326 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Updating OpenSource
From git://git.webkit.org/WebKit
   665fcc3..1bcef7b  master     -&gt; origin/master
	M	LayoutTests/platform/chromium/test_expectations.txt
	M	LayoutTests/ChangeLog
r97656 = 1bcef7b0ecfb0a4e2c1f14cb2804f00466599154 (refs/remotes/trunk)
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/trunk.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485540</commentid>
    <comment_count>23</comment_count>
      <attachid>111326</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-17 15:08:32 -0700</bug_when>
    <thetext>Comment on attachment 111326
Patch

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

&gt; Source/WebCore/dom/WebKitMutationObserver.h:80
&gt; +    Vector&lt;Node*&gt; m_registrations; // NodeRareData has a RefPtr to this, so use a weak pointer to avoid a cycle.

Sorry I must have missed this in my previous review. I&apos;d prefer giving it a more descriptive name like observedNodes.

&gt; Source/WebCore/dom/WebKitMutationObserver.h:84
&gt; +void ensureMutationQueued(PassRefPtr&lt;WebKitMutationObserver&gt; , PassRefPtr&lt;MutationRecord&gt;);
&gt; +

Where is this function defined or called?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485553</commentid>
    <comment_count>24</comment_count>
      <attachid>111330</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-17 15:22:50 -0700</bug_when>
    <thetext>Created attachment 111330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485555</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 15:24:38 -0700</bug_when>
    <thetext>Attachment 111330 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Updating OpenSource
Current branch master is up to date.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485560</commentid>
    <comment_count>26</comment_count>
      <attachid>111330</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-17 15:30:26 -0700</bug_when>
    <thetext>Comment on attachment 111330
Patch

Clearing flags on attachment: 111330

Committed r97659: &lt;http://trac.webkit.org/changeset/97659&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485561</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-17 15:30:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485563</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-17 15:31:42 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 111330 [details])
&gt; Clearing flags on attachment: 111330
&gt; 
&gt; Committed r97659: &lt;http://trac.webkit.org/changeset/97659&gt;

Landed for rafaelw to avoid bot bustage.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110865</attachid>
            <date>2011-10-13 10:12:28 -0700</date>
            <delta_ts>2011-10-13 14:33:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68956-20111013101227.patch</filename>
            <type>text/plain</type>
            <size>24451</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcxNjQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
M2U2Yzk2YTQ2MTM5NjgzNTA4ZGUzZTljYzZhZjA4NzhiM2RjNmJjCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMzcgQEAKK1Rlc3QgdGhlIGNvbnN0cnVjdG9yIG9mIFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgbXV0YXRp
b25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgor
UEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnNb
MF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKK1BB
U1MgbXV0YXRpb25zLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRy
aWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBt
dXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzFd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlz
ICJiYXIiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFT
UyBtdXRhdGlvbnMgaXMgbnVsbAorUEFTUyBjYWxscyBpcyAxCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zIGlzIG51bGwK
K1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJh
dHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFT
UyBtdXRhdGlvbnMyLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uczJbMF0udHlwZSBpcyAiYXR0
cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zMlswXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNT
IG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmli
dXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyAiaHR0cDovL3d3dy5mb28uY29tL2JhciIK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zN2Y5YTM4YTZkNjZmMGQ5MGE2YTA1MGIwMmJmNTcxY2Q2OGZjZGEzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMu
aHRtbApAQCAtMCwwICsxLDIyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8dGl0bGU+PC90aXRsZT4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0PgorCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit2YXIgbXV0YXRpb25z
OwordmFyIG11dGF0aW9uczI7Cit2YXIgY2FsbHM7CisKK2Z1bmN0aW9uIHRlc3RCYXNpYygpIHsK
KyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkg
eworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAg
ICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVl
LCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdmb28n
LCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAw
KTsgICAgCisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlKCkg
eworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAg
ICAgCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5l
Y3QoKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JheicpOworICAgICAgICBz
ZXRUaW1lb3V0KGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVsdGlwbGUsIDApOworICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBjaGVja05vdERlbGl2ZXJlZEFuZE11dGF0ZU11bHRpcGxlKCkg
eworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0
dHJpYnV0ZSgnZm9vJywgJ2JhdCcpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdiYXInLCAn
Zm9vJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoKTsKKyAgICB9CisgICAgCisgICAgZnVu
Y3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcy
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28i
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywg
J251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1
dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAn
ImJhciInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIHJ1
bk5leHRUZXN0KCk7CisgICAgfSAKKyAgICAKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0
ZXN0V3JvbmdUeXBlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5l
dyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0
aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7
IGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LnNl
dEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7
ICAgIAorICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7
CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfSAKKyAgICAKKyAgICBzdGFydCgpOworfQor
CitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24oKSB7CisgICAgdmFyIGRpdjsKKyAg
ICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKwkJY2FsbHMgPSAwOwor
ICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworCQkJY2FsbHMr
KzsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmli
dXRlczogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2Jz
ZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0
ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrRGlzY29ubmVjdEFuZE11
dGF0ZSwgMCk7ICAgIAorICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGlzY29ubmVjdEFuZE11
dGF0ZSgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ2NhbGxzJywgJzEnKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0
ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExp
c3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXonKTsKKyAg
ICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBm
aW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAg
ICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfSAK
KyAgICAKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMo
KSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsK
KworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAg
ICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2
ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAg
ICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2ZXIyID0gbmV3IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25z
MiA9IG07CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRy
aWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlcjIub2JzZXJ2ZShkaXYsIHsgYXR0cmli
dXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOwor
ICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7ICAgIAorICAgIH0KKworICAgIGZ1bmN0aW9u
IGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zMlswXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zMlswXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7ICAgICAgICAKKyAg
ICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBvYnNlcnZlcjIuZGlzY29ubmVj
dCgpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0gCisgICAgCisgICAgc3RhcnQoKTsK
K30KKyAKK2Z1bmN0aW9uIHRlc3ROYW1lc3BhY2VVUkkoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2
YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgbXV0YXRpb25z
ID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Cisg
ICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkg
eworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2Jz
ZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlIH0p
OworICAgICAgICBkaXYuc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cuZm9vLmNvbS9iYXInLCAn
Zm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7ICAgIAorICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5s
ZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0
dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFt
ZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWVzcGFjZScsICciaHR0cDovL3d3dy5mb28uY29tL2JhciInKTsgICAgICAgIAorICAgICAgICBv
YnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfSAKKyAg
ICAKKyAgICBzdGFydCgpOworfQorCit2YXIgdGVzdHMgPSBbdGVzdEJhc2ljLCB0ZXN0V3JvbmdU
eXBlLCB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24sIHRlc3RNdWx0aXBsZU9ic2VydmVycywgdGVz
dE5hbWVzcGFjZVVSSV07Cit2YXIgdGVzdEluZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5leHRU
ZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3Rz
W3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisK
K2Rlc2NyaXB0aW9uKCdUZXN0IHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyJyk7CisKK2lmICghd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVzdEZh
aWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpJyk7Citl
bHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmNwcAppbmRleCBhYjFkZjRmMjg1NWEwZmQ5NTRjNWRlYTllNjMyNjUzYzEzNjk2M2Uw
Li4yYjFjODYxZjU5ZmUwMDdhOTYzOTlkMmFlOWIxYzZkMDJkYmY3YzkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcApAQCAtNjUsNiArNjUsMTEgQEAKICNpbmNsdWRlICJW
OFNRTEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJWOFhQYXRoRXhjZXB0aW9uLmgiCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQorI2luY2x1ZGUgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKKyNlbmRpZgorCiAj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eS5oIgogCkBAIC02MTksNiArNjI0LDEwIEBAIHZvaWQgVjhQcm94eTo6ZGlkTGVhdmVT
Y3JpcHRDb250ZXh0KCkKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBp
ZiAocGFnZS0+Z3JvdXAoKS5oYXNMb2NhbFN0b3JhZ2UoKSkKICAgICAgICAgcGFnZS0+Z3JvdXAo
KS5sb2NhbFN0b3JhZ2UoKS0+dW5sb2NrKCk7CisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQorICAgIFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRh
dGlvbnMoKTsKKyNlbmRpZgogfQogCiB2b2lkIFY4UHJveHk6OnJlc2V0SXNvbGF0ZWRXb3JsZHMo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGU4MDMzZTM1MmQzN2FmM2I3YjAwYzIyN2VlNzMy
Y2I0ZDBiZGY0MmUuLjgzMTQ3Mzg5N2NlNGU4NTFlOTA0ZWNmNWZkYWMxOWJlNmQ3Y2I2MjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4LDYgKzQ4LDExIEBACiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyNp
bmNsdWRlICJNdXRhdGlvblJlY29yZC5oIgorI2VuZGlmCisKICNpbmNsdWRlICJOb2RlTGlzdC5o
IgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdD
b250ZXh0LmgiCkBAIC01OSw2ICs2NCwxMSBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQorI2luY2x1ZGUgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIK
KyNlbmRpZgorCiAjaW5jbHVkZSAiV2ViS2l0QW5pbWF0aW9uTGlzdC5oIgogI2luY2x1ZGUgIlhN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTY0OSw2ICs2NTksMTUgQEAg
dm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlLAogICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRy
aWJ1dGUoKSkKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNb2RpZnlET01B
dHRyKGRvY3VtZW50KCksIHRoaXMsIG5hbWUsIHZhbHVlKTsKICNlbmRpZgorCisjaWYgRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBPd25QdHI8T2JzZXJ2ZXJQdHJWZWN0b3I+IG9ic2Vy
dmVycyA9IGludGVyZXN0ZWRNdXRhdGlvbk9ic2VydmVycyhXZWJLaXRNdXRhdGlvbk9ic2VydmVy
OjpBdHRyaWJ1dGVzKTsKKyAgICBpZiAob2JzZXJ2ZXJzKSB7CisgICAgICAgIFJlZlB0cjxNdXRh
dGlvblJlY29yZD4gbXV0YXRpb24gPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyh0
aGlzLCBsb2NhbE5hbWUsIG51bGxBdG9tKTsKKyAgICAgICAgZm9yIChPYnNlcnZlclB0clZlY3Rv
cjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy0+YmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlcnMt
PmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAoKml0ZXIpLT5lbnF1ZXVlTXV0YXRpb25SZWNv
cmQobXV0YXRpb24pOworICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIEVsZW1lbnQ6OnNldEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
LCBFeGNlcHRpb25Db2RlJikKQEAgLTY4Miw2ICs3MDEsMTUgQEAgdm9pZCBFbGVtZW50OjpzZXRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwKICAgICBpZiAoIWlzU3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCkpCiAgICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTW9kaWZ5RE9NQXR0cihkb2N1bWVudCgpLCB0
aGlzLCBuYW1lLmxvY2FsTmFtZSgpLCB2YWx1ZSk7CiAjZW5kaWYKKworI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCisgICAgT3duUHRyPE9ic2VydmVyUHRyVmVjdG9yPiBvYnNlcnZlcnMg
PSBpbnRlcmVzdGVkTXV0YXRpb25PYnNlcnZlcnMoV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0
cmlidXRlcyk7CisgICAgaWYgKG9ic2VydmVycykgeworICAgICAgICBSZWZQdHI8TXV0YXRpb25S
ZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXModGhpcywg
bmFtZS5sb2NhbE5hbWUoKSwgbmFtZS5uYW1lc3BhY2VVUkkoKSk7CisgICAgICAgIGZvciAoT2Jz
ZXJ2ZXJQdHJWZWN0b3I6Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlcnMtPmJlZ2luKCk7IGl0ZXIg
IT0gb2JzZXJ2ZXJzLT5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgKCppdGVyKS0+ZW5xdWV1
ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAgICB9CisjZW5kaWYKIH0KIAogUGFzc1JlZlB0
cjxBdHRyaWJ1dGU+IEVsZW1lbnQ6OmNyZWF0ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
blJlY29yZC5jcHAKaW5kZXggODRiMjk4YjBmNzkzOTQ2NjdjZjQ5MjZkZTY2OWEzNGMwZDgyODJi
NS4uYzkxMzQxYzE0NWE0NDBlZTFiZWFlMDFmNzgyZjg3ZTVmODhmY2QwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRl
TmFtZTsgfQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3Bh
Y2UoKSB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1lc3Bh
Y2U7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T2xkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBt
X29sZFZhbHVlID0gdmFsdWU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uUmVjb3JkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5pZGwK
aW5kZXggNDZlN2EyOWJiYjg0NTI2YjQyOTBkOTA0NjY4MDAzOGNlMGNjNWIyOS4uYzE5YjQxZjIx
NmU0YTUyYzQ2ZjIxODQ3ODVjMzZmODgwMmZkMmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uUmVjb3JkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25SZWNvcmQuaWRsCkBAIC00MSw4ICs0MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIE5vZGUgbmV4dFNpYmxpbmc7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBhdHRyaWJ1dGVOYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGF0dHJpYnV0ZU5hbWVzcGFjZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBhdHRyaWJ1dGVOYW1lc3Bh
Y2U7CiAKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBvbGRWYWx1ZTsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0
cmluZyBvbGRWYWx1ZTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGZhNzZjNDM2NjRh
NGUyNjFmNmE4YTIzZjc4MmM0NTk2MWNmMzcxZTMuLmI4ZmMyNzUxMTUyN2QyMWIxYTY2OGMzYmQw
NzBiOTc1NWVkOTAxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTk5LDYgKzk5LDcgQEAKICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIApAQCAtNTUzLDYgKzU1NCwxNCBAQCB2b2lkIE5vZGU6OmNsZWFyUmFy
ZURhdGEoKQogICAgIGlmICh0cmVlU2NvcGUoKSAmJiByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkK
ICAgICAgICAgdHJlZVNjb3BlKCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKIAorI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIGQgPSBtdXRh
dGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmIChkKSB7CisgICAgICAgIGZvciAoTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvblZlY3Rvcjo6aXRlcmF0b3IgaXRlciA9IGQtPm9ic2VydmVycy5i
ZWdpbigpOyBpdGVyICE9IGQtPm9ic2VydmVycy5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAg
aXRlci0+b2JzZXJ2ZXItPndhc0RlcmVnaXN0ZXJlZCh0aGlzKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwJiBkYXRhTWFwID0gTm9kZVJhcmVEYXRh
OjpyYXJlRGF0YU1hcCgpOwogICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwOjppdGVy
YXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICBBU1NFUlQoaXQgIT0gZGF0YU1hcC5l
bmQoKSk7CkBAIC0yNjQ2LDYgKzI2NTUsNjUgQEAgRXZlbnRUYXJnZXREYXRhKiBOb2RlOjplbnN1
cmVFdmVudFRhcmdldERhdGEoKQogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVF
dmVudFRhcmdldERhdGEoKTsKIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCitN
dXRhdGlvbk9ic2VydmVyRGF0YSogTm9kZTo6bXV0YXRpb25PYnNlcnZlckRhdGEoKQoreworICAg
IHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bXV0YXRpb25PYnNlcnZlckRhdGEo
KSA6IDA7Cit9CisKK011dGF0aW9uT2JzZXJ2ZXJEYXRhKiBOb2RlOjplbnN1cmVNdXRhdGlvbk9i
c2VydmVyRGF0YSgpCit7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU11dGF0
aW9uT2JzZXJ2ZXJEYXRhKCk7Cit9CisKK1Bhc3NPd25QdHI8T2JzZXJ2ZXJQdHJWZWN0b3I+IE5v
ZGU6OmludGVyZXN0ZWRNdXRhdGlvbk9ic2VydmVycyhXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpU
eXBlIHR5cGUpCit7CisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIGQgPSBtdXRhdGlvbk9ic2Vy
dmVyRGF0YSgpOworICAgIGlmICghZCB8fCBkLT5vYnNlcnZlcnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIE93blB0cjxPYnNlcnZlclB0clZlY3Rvcj4gaW50ZXJl
c3RlZE9ic2VydmVycyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZl
cio+KTsKKyAgICBmb3IgKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb25WZWN0b3I6Oml0ZXJh
dG9yIGl0ZXIgPSBkLT5vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBkLT5vYnNlcnZlcnMuZW5k
KCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci0+b3B0aW9ucyAmIHR5cGUpCisgICAgICAg
ICAgICBpbnRlcmVzdGVkT2JzZXJ2ZXJzLT5hcHBlbmQoaXRlci0+b2JzZXJ2ZXIuZ2V0KCkpOwor
ICAgIH0KKworICAgIHJldHVybiBpbnRlcmVzdGVkT2JzZXJ2ZXJzLnJlbGVhc2UoKTsKK30KKwor
Ym9vbCBOb2RlOjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRh
dGlvbk9ic2VydmVyPiBvYnNlcnZlciwgdWludDhfdCBvcHRpb25zKQoreworICAgIE11dGF0aW9u
T2JzZXJ2ZXJEYXRhKiBkID0gZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKyAgICBNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHJlZ2lzdHJhdGlvbihvYnNlcnZlciwgb3B0aW9ucyk7
CisKKyAgICBzaXplX3QgaW5kZXggPSBkLT5vYnNlcnZlcnMuZmluZChyZWdpc3RyYXRpb24pOwor
ICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgeworICAgICAgICBkLT5vYnNlcnZlcnMuYXBwZW5k
KHJlZ2lzdHJhdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGQtPm9i
c2VydmVyc1tpbmRleF0ub3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi5vcHRpb25zOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBOb2RlOjpkZXJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNz
UmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyKQoreworICAgIE11dGF0aW9u
T2JzZXJ2ZXJEYXRhKiBkID0gbXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKyAgICBBU1NFUlQoZCk7
CisgICAgaWYgKCFkKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uIHJlZ2lzdHJhdGlvbihvYnNlcnZlciwgMCk7CisgICAgc2l6ZV90IGluZGV4ID0g
ZC0+b2JzZXJ2ZXJzLmZpbmQocmVnaXN0cmF0aW9uKTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90
Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZC0+b2JzZXJ2ZXJzLnJlbW92ZShpbmRleCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKworCiB2b2lkIE5vZGU6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBl
dmVudCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkgfHwgIXJhcmVEYXRhKCktPmV2ZW50VGFy
Z2V0RGF0YSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNmIwYTY2ZDk5MzE5NjA4MGVmMjA0OTgzOTljODNj
OGUxOGM3ODY2Yy4uZjE4NjhiYjcwMmNiMmM0OGY5YWZjZDc0ZDBlY2E1YTM4MmRhNTM5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCkBAIC0zMSw2ICszMSwxMSBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3Rh
bnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSAiVHJlZVNoYXJl
ZC5oIgorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyNpbmNsdWRlICJXZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKQEAgLTU4LDYgKzYzLDExIEBAIGNsYXNzIEZy
YW1lOwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBLZXli
b2FyZEV2ZW50OworCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK2NsYXNzIE11dGF0
aW9uT2JzZXJ2ZXJEYXRhOworI2VuZGlmCisKIGNsYXNzIE5TUmVzb2x2ZXI7CiBjbGFzcyBOYW1l
ZE5vZGVNYXA7CiBjbGFzcyBOYW1lTm9kZUxpc3Q7CkBAIC04Miw2ICs5MiwxMCBAQCBjbGFzcyBU
cmVlU2NvcGU7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKKyNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQordHlwZWRlZiBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+
IE9ic2VydmVyUHRyVmVjdG9yOworI2VuZGlmCisKIGNvbnN0IGludCBub2RlU3R5bGVDaGFuZ2VT
aGlmdCA9IDI1OwogCiAvLyBTeW50aGV0aWNTdHlsZUNoYW5nZSBtZWFucyB0aGF0IHdlIG5lZWQg
dG8gZ28gdGhyb3VnaCB0aGUgZW50aXJlIHN0eWxlIGNoYW5nZSBsb2dpYyBldmVuIHRob3VnaApA
QCAtNTgwLDYgKzU5NCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEq
IGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVF
dmVudFRhcmdldERhdGEoKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAg
TXV0YXRpb25PYnNlcnZlckRhdGEqIG11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7CisgICAgTXV0YXRp
b25PYnNlcnZlckRhdGEqIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7CisKKyAgICBQYXNz
T3duUHRyPE9ic2VydmVyUHRyVmVjdG9yPiBpbnRlcmVzdGVkTXV0YXRpb25PYnNlcnZlcnMoV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcjo6VHlwZSk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IG9ic2VydmVyIHdhc24ndCBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gdGhpcyBub2RlLgorICAgIGJv
b2wgcmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNl
cnZlcj4sIHVpbnQ4X3Qgb3B0aW9ucyk7CisgICAgdm9pZCBkZXJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+KTsKKyNlbmRpZiAvLyBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCiBwcml2YXRlOgogICAgIGVudW0gTm9kZUZsYWdzIHsK
ICAgICAgICAgSXNUZXh0RmxhZyA9IDEsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXgg
YjkyMWEyM2EyMzdmMmM0N2Y2NzQ2NWJlZGNjZjQxNzY0ZjllOTNjOS4uYzFjYzU1YTVhZGQ5MTc0
MTA1YTQ5MzRmMmYxNWI1MjQwZWI1N2Y1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaApA
QCAtMjcsNiArMjcsMTEgQEAKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNpbmNsdWRlICJR
dWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKKworI2lmIEVOQUJMRShN
VVRBVElPTl9PQlNFUlZFUlMpCisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgor
I2VuZGlmCisKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNzEsNyArNzYsMzQgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBOb2RlTGlzdHNOb2RlRGF0YSgpIDogbV9sYWJlbHNOb2RlTGlzdENh
Y2hlKDApIHt9CiB9OwotICAgIAorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK3N0
cnVjdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHsKKyAgICBNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIs
IHVpbnQ4X3Qgb3B0aW9ucykKKyAgICAgICAgOiBvYnNlcnZlcihvYnNlcnZlciksCisgICAgICAg
ICAgb3B0aW9ucyhvcHRpb25zKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBvYnNlcnZlciA9PSBvdGhlci5vYnNlcnZlcjsKKyAgICB9CisKKyAgICBSZWZQdHI8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXI7CisgICAgdWludDhfdCBvcHRpb25zOworfTsK
KwordHlwZWRlZiBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvblZlY3RvcjsKK3N0cnVjdCBNdXRhdGlvbk9ic2VydmVyRGF0YSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRpb25PYnNlcnZlckRhdGEpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE11dGF0aW9uT2JzZXJ2ZXJEYXRh
KCkgeyB9CisgICAgfk11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgeyB9CisKKyAgICBNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uVmVjdG9yIG9ic2VydmVyczsKK307CisjZW5kaWYgLy8gRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKKwogY2xhc3MgTm9kZVJhcmVEYXRhIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShOb2RlUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzogICAgCkBAIC0xMjEsNiArMTUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
ZXZlbnRUYXJnZXREYXRhLmdldCgpOwogICAgIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIG11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkg
eyByZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YS5nZXQoKTsgfQorICAgIE11dGF0aW9uT2Jz
ZXJ2ZXJEYXRhKiBlbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSgpCisgICAgeworICAgICAgICBp
ZiAoIW1fbXV0YXRpb25PYnNlcnZlckRhdGEpCisgICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2
ZXJEYXRhID0gYWRvcHRQdHIobmV3IE11dGF0aW9uT2JzZXJ2ZXJEYXRhKTsKKyAgICAgICAgcmV0
dXJuIG1fbXV0YXRpb25PYnNlcnZlckRhdGEuZ2V0KCk7CisgICAgfQorI2VuZGlmCisKICAgICBi
b29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb2N1c2VkOyB9CiAgICAgdm9pZCBz
ZXRGb2N1c2VkKGJvb2wgZm9jdXNlZCkgeyBtX2lzRm9jdXNlZCA9IGZvY3VzZWQ7IH0KIApAQCAt
MTM3LDYgKzE3OSwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV90YWJJbmRleFdhc1NldEV4cGxp
Y2l0bHkgOiAxOwogICAgIGJvb2wgbV9pc0ZvY3VzZWQgOiAxOwogICAgIGJvb2wgbV9uZWVkc0Zv
Y3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA6IDE7CisKKyNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQorICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVyRGF0YT4gbV9tdXRh
dGlvbk9ic2VydmVyRGF0YTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDE0
ODczNjRjODE4Mjk0YjY2ZTRmZTY1NmMwY2E5MGJhODQ1NjkzNjYuLjY3MDdlZGI0ZTNiNzBkNzMw
Nzc1MmUxYjlmYTNkZjk5MDQ2ZmU4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5jcHAKQEAgLTM0LDggKzM0LDExIEBACiAKICNpbmNsdWRlICJXZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmgiCiAKKyNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cy5oIgogI2luY2x1ZGUgIk11dGF0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTm9kZS5oIgor
I2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDE0ICs1Niw3MCBAQCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp+V2ViS2l0TXV0YXRpb25P
YnNlcnZlcigpCiB7CiB9CiAKLXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShO
b2RlKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMqKQordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyOjpvYnNlcnZlKE5vZGUqIG5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zKiBvcHRpb25z
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgdWludDhfdCBvcHRpb25GbGFncyA9IDA7
CisKKyAgICAvLyBGSVhNRTogUHVzaCBjb21wb3NpdGlvbiBvZiB0aGUgb3B0aW9uRmxhZ3MgaW50
byB0aGUgY3VzdG9tIGJpbmRpbmcuCisgICAgaWYgKG9wdGlvbnMtPmNoaWxkTGlzdCgpKQorICAg
ICAgICBvcHRpb25GbGFncyB8PSBDaGlsZExpc3Q7CisgICAgaWYgKG9wdGlvbnMtPmF0dHJpYnV0
ZXMoKSkKKyAgICAgICAgb3B0aW9uRmxhZ3MgfD0gQXR0cmlidXRlczsKKyAgICBpZiAob3B0aW9u
cy0+Y2hhcmFjdGVyRGF0YSgpKQorICAgICAgICBvcHRpb25GbGFncyB8PSBDaGFyYWN0ZXJEYXRh
OworICAgIC8vIEZJWE1FOiBNb3JlIG9wdGlvbnMgY29tcG9zaXRpb24gd29yayBuZWVkcyB0byBi
ZSBkb25lIGhlcmUuCisKKyAgICBpZiAobm9kZS0+cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRo
aXMsIG9wdGlvbkZsYWdzKSkKKyAgICAgICAgbV9yZWdpc3RyYXRpb25zLmFwcGVuZChub2RlKTsK
IH0KIAogdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9
IG1fcmVnaXN0cmF0aW9ucy5iZWdpbigpOyBpdGVyICE9ICBtX3JlZ2lzdHJhdGlvbnMuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+ZGVyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhp
cyk7CisKKyAgICBtX3JlZ2lzdHJhdGlvbnMuY2xlYXIoKTsKK30KKwordm9pZCBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjp3YXNEZXJlZ2lzdGVyZWQoTm9kZSogbm9kZSkKK3sKKyAgICBzaXplX3Qg
aW5kZXggPSBtX3JlZ2lzdHJhdGlvbnMuZmluZChub2RlKTsKKyAgICBBU1NFUlQoaW5kZXggIT0g
bm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9yZWdpc3RyYXRpb25zLnJlbW92ZShpbmRleCk7Cit9CisKK3R5cGVkZWYgTGlzdEhh
c2hTZXQ8UmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+ID4gTXV0YXRpb25PYnNlcnZlclNl
dDsKKworc3RhdGljIE11dGF0aW9uT2JzZXJ2ZXJTZXQmIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJz
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGF0aW9uT2JzZXJ2ZXJTZXQsIGFjdGl2
ZU9ic2VydmVycywgKCkpOworICAgIHJldHVybiBhY3RpdmVPYnNlcnZlcnM7Cit9CisKK3ZvaWQg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8
TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uKQoreworICAgIG1fcmVjb3Jkcy5hcHBlbmQobXV0YXRp
b24pOworICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMpOworfQorCit2b2lk
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMoKQoreworICAgIHdo
aWxlICghYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTXV0
YXRpb25PYnNlcnZlclNldDo6aXRlcmF0b3IgaXRlciA9IGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJz
KCkuYmVnaW4oKTsKKyAgICAgICAgUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2Vy
dmVyID0gKml0ZXI7CisgICAgICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkucmVtb3ZlKGl0
ZXIpOworICAgICAgICBvYnNlcnZlci0+ZGVsaXZlcigpOworICAgIH0KK30KKwordm9pZCBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKCkKK3sKKyAgICBNdXRhdGlvblJlY29yZEFycmF5
IHJlY29yZHM7CisgICAgcmVjb3Jkcy5zd2FwKG1fcmVjb3Jkcyk7CisgICAgbV9jYWxsYmFjay0+
aGFuZGxlRXZlbnQoJnJlY29yZHMsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaAppbmRleCAwODc5
NDQ3NTZiMmZjMjZkMTQ0YmFmYTA0M2FjN2U4MmQ1MDBiMGRiLi40YmI0MzA2OGQ5ZThmMjU4NTNk
ZjFiZTMxODRkZDNmYmU5NTBlMDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRh
dGlvbk9ic2VydmVyLmgKQEAgLTM2LDI4ICszNiw1MiBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIE11dGF0aW9uQ2FsbGJhY2s7CiBjbGFzcyBNdXRhdGlvbk9ic2VydmVyT3B0aW9uczsKK2Ns
YXNzIE11dGF0aW9uUmVjb3JkOwogY2xhc3MgTm9kZTsKIAogY2xhc3MgV2ViS2l0TXV0YXRpb25P
YnNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IHsKIHB1
YmxpYzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBDaGlsZExpc3QgPSAoMSA8PCAwKSwKKyAg
ICAgICAgQXR0cmlidXRlcyA9ICgxIDw8IDEpLAorICAgICAgICBDaGFyYWN0ZXJEYXRhID0gKDEg
PDwgMikKKyAgICB9OworCisgICAgZW51bSBGbGFncyB7CisgICAgICAgIFN1YnRyZWUgPSAoMSA8
PCAzKSwKKyAgICAgICAgQXR0cmlidXRlT2xkVmFsdWUgPSAoMSA8PCA0KSwKKyAgICAgICAgQ2hh
cmFjdGVyRGF0YU9sZFZhbHVlID0gKDEgPDwgNSksCisgICAgICAgIEF0dHJpYnV0ZUZpbHRlciA9
ICgxIDw8IDYpCisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI+IGNyZWF0ZShQYXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+KTsKKyAgICBzdGF0
aWMgdm9pZCBkZWxpdmVyQWxsTXV0YXRpb25zKCk7CiAKICAgICB+V2ViS2l0TXV0YXRpb25PYnNl
cnZlcigpOwogCiAgICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cyopOwogICAgIHZvaWQgZGlzY29ubmVjdCgpOworICAgIHZvaWQgd2FzRGVyZWdpc3RlcmVkKE5v
ZGUqKTsKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPik7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihQYXNzUmVm
UHRyPE11dGF0aW9uQ2FsbGJhY2s+KTsKIAorICAgIHZvaWQgZGVsaXZlcigpOworCiAgICAgUmVm
UHRyPE11dGF0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPFJlZlB0cjxNdXRh
dGlvblJlY29yZD4gPiBtX3JlY29yZHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX3JlZ2lzdHJhdGlv
bnM7IC8vIE5vZGVSYXJlRGF0YSBoYXMgYSBSZWZQdHIgdG8gdGhpcywgc28gdXNlIGEgd2VhayBw
b2ludGVyIHRvIGF2b2lkIGEgY3ljbGUuCiB9OwogCit2b2lkIGVuc3VyZU11dGF0aW9uUXVldWVk
KFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gLCBQYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPik7CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110906</attachid>
            <date>2011-10-13 14:33:57 -0700</date>
            <delta_ts>2011-10-13 20:33:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68956-20111013143356.patch</filename>
            <type>text/plain</type>
            <size>33181</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcxNjQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkNDAzOGQ4NDhkY2UxNDZkMjI2NDJj
OWUyZmJlMGJiNzA3YWEzYWY3Li45NDFkMTVkY2ZhZjJiMWVkMzRjNGM4ODBjMDYzN2FlOTk4MjVi
M2RmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMTMgIFJhZmFlbCBXZWluc3RlaW4g
IDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIElt
cGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGF0dHJpYnV0ZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTU2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0
aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTEx
ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gRml4IGV4cGVjdGF0aW9ucyBmb3IgdHdvIGFjY2Vzc2liaWxpdHkgdGVzdHMuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWI0YTA3ZTU3MzgwOTMzMTRkNDU0NmVlYTVmMjUxMTU2
NDliNzQ4MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ3IEBACitUZXN0IHRoZSBj
b25zdHJ1Y3RvciBvZiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNb
MF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUg
aXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQ
QVNTIG11dGF0aW9ucyBpcyBudWxsCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgorUEFTUyBt
dXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJp
YnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBp
cyBudWxsCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRh
dGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiYmFyIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmli
dXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKK1BBU1MgY2FsbHMg
aXMgMQorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUg
aXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28i
CitQQVNTIG11dGF0aW9ucyBpcyBudWxsCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFT
UyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0
dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zMi5sZW5ndGggaXMgMQorUEFTUyBt
dXRhdGlvbnMyWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uczJbMF0uYXR0
cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0
YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMg
Imh0dHA6Ly93d3cuZm9vLmNvbS9iYXIiCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgorUEFT
UyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0
dHJpYnV0ZU5hbWUgaXMgInNyYyIKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0
ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJocmVmIgorUEFTUyBtdXRh
dGlvbnMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMi
CitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9u
c1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFt
ZSBpcyAiYmF6IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRy
aWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRl
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJhYzg1YzU4MGU4YjczNWVmZmU4MzgyOGNhNDE0NTUxYjM3N2Fh
MTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUt
YXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsMjk4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzx0aXRsZT48L3RpdGxl
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD1kZXNjcmlwdGlvbj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3Zh
ciBtdXRhdGlvbnM7Cit2YXIgbXV0YXRpb25zMjsKK3ZhciBjYWxsczsKKworZnVuY3Rpb24gdGVz
dEJhc2ljKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rp
b24gc3RhcnQoKSB7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9
IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJp
YnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRy
aWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja0Rpc2Nvbm5lY3RB
bmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGlzY29ubmVjdEFuZE11
dGF0ZSgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7
CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVj
dCgpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmF6Jyk7CisgICAgICAgIHNl
dFRpbWVvdXQoY2hlY2tOb3REZWxpdmVyZWRBbmRNdXRhdGVNdWx0aXBsZSwgMCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gY2hlY2tOb3REZWxpdmVyZWRBbmRNdXRhdGVNdWx0aXBsZSgpIHsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLm9i
c2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1
dGUoJ2ZvbycsICdiYXQnKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYmFyJywgJ2Zvbycp
OworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlu
aXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcyJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImJhciInKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVs
bCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIHJ1bk5leHRUZXN0
KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdFdyb25nVHlwZSgp
IHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAg
ICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRy
dWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2Zv
bycsICdiYXInKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxs
Jyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgcnVuTmV4dFRlc3Qo
KTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdp
c3RyYXRpb24oKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKwkJY2FsbHMgPSAwOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2Jz
ZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAg
ICAgICBtdXRhdGlvbnMgPSBtOworCQkJY2FsbHMrKzsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
b2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hhcmFjdGVyRGF0YTog
dHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1
ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBz
ZXRUaW1lb3V0KGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSwgMCk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlKCkgeworICAgICAgICBzaG91bGRCZSgnY2Fs
bHMnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7Cisg
ICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7
IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIG9ic2Vy
dmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0
dHJpYnV0ZSgnZm9vJywgJ2JheicpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBy
dW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RN
dWx0aXBsZU9ic2VydmVycygpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAg
ICB2YXIgb2JzZXJ2ZXIyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIG11dGF0
aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9u
KG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworICAgICAgICBv
YnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAg
ICAgICAgICBtdXRhdGlvbnMyID0gbTsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9i
c2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyMi5vYnNl
cnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRl
KCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVu
Z3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRy
aWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUn
LCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczIubGVuZ3RoJywgJzEnKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicp
OworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIG9ic2VydmVyMi5kaXNj
b25uZWN0KCk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsK
K30KKworZnVuY3Rpb24gdGVzdE5hbWVzcGFjZVVSSSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZh
ciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBtdXRhdGlvbnMg
PSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7
CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNl
cnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUgfSk7
CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy5mb28uY29tL2JhcicsICdm
b28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsgICAgCisgICAgfQor
CisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxl
bmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0
cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1l
JywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFt
ZXNwYWNlJywgJyJodHRwOi8vd3d3LmZvby5jb20vYmFyIicpOyAgICAgICAgCisgICAgICAgIG9i
c2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAg
ICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0UHJvcGVydHlBY2Nlc3MoKSB7CisgICAgdmFy
IGltZywgYTsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAg
ICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnaW1nJyk7CisgICAgICAgIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CisK
KyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiht
KSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBv
YnNlcnZlci5vYnNlcnZlKGltZywgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBvYnNl
cnZlci5vYnNlcnZlKGEsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKworICAgICAgICBpbWcuc3Jj
ID0gJ2Jhei5wbmcnOworICAgICAgICBhLmhyZWYgPSAnZm9vLmh0bWwnOworCisgICAgICAgIHNl
dFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnInNyYyInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImhyZWYiJyk7CisgICAgICAgIG9ic2Vy
dmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBz
dGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZpZWQo
KSB7CisgICAgdmFyIGRpdiwgZGl2Miwgc3ViRGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2
YXIgbGlzdGVuZXI7CisgICAgdmFyIGhpdDsgCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAg
ICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBkaXYyID0gZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisK
KyAgICAgICAgc3ViRGl2ID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpKTsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
KGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOwor
CisgICAgICAgIGxpc3RlbmVyID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgZGl2Mi5zZXRB
dHRyaWJ1dGUoJ2JheicsICdiYXQnKTsKKyAgICAgICAgfQorCisgICAgICAgIGRpdi5hZGRFdmVu
dExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCBsaXN0ZW5lcik7CisgICAgICAgIG9ic2Vy
dmVyLm9ic2VydmUoc3ViRGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIG9ic2Vy
dmVyLm9ic2VydmUoZGl2MiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworCisgICAgICAgIHN1YkRp
di5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKworICAgICAgICBzZXRUaW1lb3V0KGZpbmlz
aCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MV0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sx
XS5hdHRyaWJ1dGVOYW1lJywgJyJiYXoiJyk7CisgICAgICAgIGRpdi5yZW1vdmVFdmVudExpc3Rl
bmVyKGxpc3RlbmVyKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOwor
ICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7Cisg
ICAgfQorCisgICAgc3RhcnQoKTsKK30KK3ZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RXcm9u
Z1R5cGUsIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbiwgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLCB0
ZXN0TmFtZXNwYWNlVVJJLCB0ZXN0UHJvcGVydHlBY2Nlc3MsIHRlc3RPcmRlcmluZ1dydERPTVN1
YnRyZWVNb2RpZmllZF07Cit2YXIgdGVzdEluZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5leHRU
ZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3Rz
W3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisK
K2Rlc2NyaXB0aW9uKCdUZXN0IHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyJyk7CisKK2lmICghd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVzdEZh
aWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpJyk7Citl
bHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU1ZWJhNDc4MzAw
NGEwMzZlZjhiMWQ2Y2JhY2ZjM2Q2MmI2NTIxMTYuLmU1YzExNGM1YzMyYTQyNjczMGE5Mjk5Mzcy
Zjk1MDRiNjFlYTFjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMS0xMC0xMyAg
UmFmYWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRh
dGlvbk9ic2VydmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBm
b3IgYXR0cmlidXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njg5NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGFkZHMgYW4gaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBmb3IgcmVnaXN0ZXJpbmcg
bXV0YXRpb24gb2JzZXJ2ZXJzCisgICAgICAgIG9uIG5vZGVzLCBkZWxpdmVyaW5nIG11dGF0aW9u
IHJlY29yZHMgYXQgdGhlIGVuZCBvZiB0aGUgb3V0ZXItbW9zdAorICAgICAgICBzY3JpcHQgaW52
b2thdGlvbiBhbmQgb2JzZXJ2aW5nIG11dGF0aW9ucyB0byBlbGVtZW50IGF0dHJpYnV0ZXMuCisK
KyAgICAgICAgTm90ZSB0aGF0IHN1cHBvcnQgZm9yIG9ic2VydmluZyBjaGFuZ2VzIHRvIHRoZSBz
dHlsZSBhdHRyaWJ1dGUgd2hlbgorICAgICAgICB1cGRhdGVkIHZpYSB0aGUgc3R5bGUgcHJvcGVy
dHkgaXMgbm90IGltcGxlbWVudGVkIGhlcmUuCisKKyAgICAgICAgVGVzdDogZmFzdC9tdXRhdGlv
bi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpkaWRMZWF2ZVNjcmlwdENvbnRleHQp
OgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVB
dHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0
QXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25SZWNvcmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGRv
bS9NdXRhdGlvblJlY29yZC5oOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5pZGw6Cisg
ICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJSYXJl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptdXRhdGlvbk9ic2VydmVyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjppbnRlcmVzdGVkTXV0YXRpb25PYnNlcnZlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmRlcmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKiBkb20v
Tm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyRGF0YTo6TXV0YXRp
b25PYnNlcnZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlckRhdGE6
On5NdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6
Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6
ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAgICAqIGRvbS9XZWJLaXRNdXRhdGlv
bk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6
Om9ic2VydmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlz
Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp3YXNE
ZXJlZ2lzdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0
aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRl
bGl2ZXJBbGxNdXRhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6ZGVsaXZlcik6CisgICAgICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaDoK
KwogMjAxMS0xMC0xMSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29t
PgogCiAgICAgICAgIFtRdF1bV0syXSBTeW5jaHJvbml6ZSB0aWxpbmcgd2l0aCBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRleCBh
YjFkZjRmMjg1NWEwZmQ5NTRjNWRlYTllNjMyNjUzYzEzNjk2M2UwLi4yYjFjODYxZjU5ZmUwMDdh
OTYzOTlkMmFlOWIxYzZkMDJkYmY3YzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcApAQCAtNjUsNiArNjUsMTEgQEAKICNpbmNsdWRlICJWOFNRTEV4Y2VwdGlvbi5oIgog
I2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCIKICNpbmNsdWRlICJWOFhQYXRo
RXhjZXB0aW9uLmgiCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorI2luY2x1ZGUg
IldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiV29ya2VyQ29u
dGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCkBAIC02
MTksNiArNjI0LDEwIEBAIHZvaWQgVjhQcm94eTo6ZGlkTGVhdmVTY3JpcHRDb250ZXh0KCkKICNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBpZiAocGFnZS0+Z3JvdXAoKS5o
YXNMb2NhbFN0b3JhZ2UoKSkKICAgICAgICAgcGFnZS0+Z3JvdXAoKS5sb2NhbFN0b3JhZ2UoKS0+
dW5sb2NrKCk7CisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIFdlYkNvcmU6
OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMoKTsKKyNlbmRpZgog
fQogCiB2b2lkIFY4UHJveHk6OnJlc2V0SXNvbGF0ZWRXb3JsZHMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCmluZGV4IGU4MDMzZTM1MmQzN2FmM2I3YjAwYzIyN2VlNzMyY2I0ZDBiZGY0MmUuLjgzNDll
YjNlMTYxYTM1YmYxNThlZDNjNTVmNmVkMjRhNjNhM2Y5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKQEAgLTQ4LDYgKzQ4LDExIEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyNpbmNsdWRlICJNdXRhdGlvblJl
Y29yZC5oIgorI2VuZGlmCisKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCkBAIC01OSw2
ICs2NCwxMSBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQorI2luY2x1ZGUgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVk
ZSAiV2ViS2l0QW5pbWF0aW9uTGlzdC5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTYxMCw2ICs2MjAsMTggQEAgY29uc3QgQXRvbWljU3RyaW5n
JiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29u
c3QgU3QKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxv
Y2FsTmFtZSwgbmFtZXNwYWNlVVJJKSk7CiB9CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQorc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIE93blB0cjxPYnNl
cnZlclB0clZlY3Rvcj4gb2JzZXJ2ZXJzID0gZWxlbWVudC0+aW50ZXJlc3RlZE11dGF0aW9uT2Jz
ZXJ2ZXJzKFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZXMpOworICAgIGlmIChvYnNl
cnZlcnMpIHsKKyAgICAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0
aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUpOworICAgICAgICBmb3Ig
KE9ic2VydmVyUHRyVmVjdG9yOjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLT5iZWdpbigpOyBp
dGVyICE9IG9ic2VydmVycy0+ZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICgqaXRlciktPmVu
cXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQg
RWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFEb2N1bWVu
dDo6aXNWYWxpZE5hbWUobmFtZSkpIHsKQEAgLTYzMCw2ICs2NTIsMTEgQEAgdm9pZCBFbGVtZW50
OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlLAogCiAgICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAorI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRl
Q2hhbmdlZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGlt
cG9ydGFudCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRy
aWJ1dGVzTXV0YXRpb25SZWNvcmQodGhpcywgYXR0cmlidXRlTmFtZSk7CisjZW5kaWYKKwogICAg
IGlmIChpc0lkQXR0cmlidXRlTmFtZShvbGQgPyBvbGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUp
KQogICAgICAgICB1cGRhdGVJZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgdmFsdWUp
OwogCkBAIC02NjMsNiArNjkwLDExIEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgLy8g
QWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCiAgICAgQXR0cmlidXRlKiBvbGQg
PSBhdHRyaWJ1dGVzKGZhbHNlKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIAorI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRlQ2hhbmdl
ZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGltcG9ydGFu
dCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRyaWJ1dGVz
TXV0YXRpb25SZWNvcmQodGhpcywgbmFtZSk7CisjZW5kaWYKKwogICAgIGlmIChpc0lkQXR0cmli
dXRlTmFtZShuYW1lKSkKICAgICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVs
bEF0b20sIHZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
UmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKaW5kZXgg
ODRiMjk4YjBmNzkzOTQ2NjdjZjQ5MjZkZTY2OWEzNGMwZDgyODJiNS4uYzM2ZWNhNmRkZTcxZGVl
ZTljZDJjZmQyNGM4ODRmNThiYTdiYmZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTY5LDE3ICs3
MCwxNyBAQCBwcml2YXRlOgogCiBjbGFzcyBBdHRyaWJ1dGVzUmVjb3JkIDogcHVibGljIE11dGF0
aW9uUmVjb3JkIHsKIHB1YmxpYzoKLSAgICBBdHRyaWJ1dGVzUmVjb3JkKFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKQorICAgIEF0dHJpYnV0ZXNSZWNvcmQoUGFzc1Jl
ZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiAgICAgICAgIDog
TXV0YXRpb25SZWNvcmQodGFyZ2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZShhdHRyaWJ1
dGVOYW1lKQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZXNwYWNlKGF0dHJpYnV0ZU5hbWVzcGFj
ZSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZU5hbWUobmFtZS5sb2NhbE5hbWUoKSkKKyAgICAgICAg
LCBtX2F0dHJpYnV0ZU5hbWVzcGFjZShuYW1lLm5hbWVzcGFjZVVSSSgpKQogICAgIHsKICAgICB9
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIG1f
YXR0cmlidXRlTmFtZTsgfQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVOYW1lc3BhY2UoKSB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKCkgeyByZXR1cm4gbV9hdHRyaWJ1
dGVOYW1lc3BhY2U7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1f
b2xkVmFsdWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T2xkVmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkgeyBtX29sZFZhbHVlID0gdmFsdWU7IH0KIApAQCAtMTI4LDkgKzEyOSw5IEBAIFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGlsZExpc3QoUGFz
c1JlZlB0cjxOb2RlPiB0YXJnCiAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0
aW9uUmVjb3JkKj4obmV3IENoaWxkTGlzdFJlY29yZCh0YXJnZXQsIGFkZGVkLCByZW1vdmVkLCBw
cmV2aW91c1NpYmxpbmcsIG5leHRTaWJsaW5nKSkpOwogfQogCi1QYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+
IHRhcmdldCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11
dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNf
Y2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgYXR0cmli
dXRlTmFtZSwgYXR0cmlidXRlTmFtZXNwYWNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0
aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgbmFt
ZSkpKTsKIH0KIAogUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNy
ZWF0ZUNoYXJhY3RlckRhdGEoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5oCmluZGV4IGYwY2VjNjA2Njg3ZGVmYTIxNWVkZWNjNDhmMzJlNWRjZGQ1
NzJlOTkuLjI1YWY0ZDNlYTNhMTc5OWRmYTBlMzQxODZlMTg4ODE1ODIyMzYxNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCkBAIC00MiwxMSArNDIsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBOb2RlOwogY2xhc3MgTm9kZUxpc3Q7CitjbGFzcyBRdWFsaWZpZWRO
YW1lOwogCiBjbGFzcyBNdXRhdGlvblJlY29yZCA6IHB1YmxpYyBSZWZDb3VudGVkPE11dGF0aW9u
UmVjb3JkPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+
IGNyZWF0ZUNoaWxkTGlzdChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gYWRkZWQsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHJlbW92ZWQsIFBhc3NSZWZQdHI8Tm9k
ZT4gcHJldmlvdXNTaWJsaW5nLCBQYXNzUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQXR0cmlidXRlcyhQYXNzUmVm
UHRyPE5vZGU+IHRhcmdldCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJn
ZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlv
blJlY29yZD4gY3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CiAK
ICAgICB2aXJ0dWFsIH5NdXRhdGlvblJlY29yZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uUmVjb3JkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5pZGwKaW5kZXggNDZlN2EyOWJiYjg0NTI2YjQyOTBkOTA0NjY4MDAzOGNlMGNjNWIyOS4u
YzE5YjQxZjIxNmU0YTUyYzQ2ZjIxODQ3ODVjMzZmODgwMmZkMmI1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuaWRsCkBAIC00MSw4ICs0MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgbmV4dFNpYmxpbmc7CiAKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBhdHRyaWJ1dGVOYW1lOwotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGF0dHJpYnV0ZU5hbWVzcGFjZTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBhdHRyaWJ1
dGVOYW1lc3BhY2U7CiAKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBvbGRW
YWx1ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51
bGxdIERPTVN0cmluZyBvbGRWYWx1ZTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGZh
NzZjNDM2NjRhNGUyNjFmNmE4YTIzZjc4MmM0NTk2MWNmMzcxZTMuLmI4ZmMyNzUxMTUyN2QyMWIx
YTY2OGMzYmQwNzBiOTc1NWVkOTAxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTk5LDYgKzk5LDcg
QEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
TGVha0NvdW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtNTUzLDYgKzU1NCwxNCBAQCB2b2lkIE5vZGU6
OmNsZWFyUmFyZURhdGEoKQogICAgIGlmICh0cmVlU2NvcGUoKSAmJiByYXJlRGF0YSgpLT5ub2Rl
TGlzdHMoKSkKICAgICAgICAgdHJlZVNjb3BlKCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKIAor
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEq
IGQgPSBtdXRhdGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmIChkKSB7CisgICAgICAgIGZvciAo
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvblZlY3Rvcjo6aXRlcmF0b3IgaXRlciA9IGQtPm9i
c2VydmVycy5iZWdpbigpOyBpdGVyICE9IGQtPm9ic2VydmVycy5lbmQoKTsgKytpdGVyKQorICAg
ICAgICAgICAgaXRlci0+b2JzZXJ2ZXItPndhc0RlcmVnaXN0ZXJlZCh0aGlzKTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwJiBkYXRhTWFwID0gTm9k
ZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCgpOwogICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRh
TWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICBBU1NFUlQoaXQgIT0g
ZGF0YU1hcC5lbmQoKSk7CkBAIC0yNjQ2LDYgKzI2NTUsNjUgQEAgRXZlbnRUYXJnZXREYXRhKiBO
b2RlOjplbnN1cmVFdmVudFRhcmdldERhdGEoKQogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgp
LT5lbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCitNdXRhdGlvbk9ic2VydmVyRGF0YSogTm9kZTo6bXV0YXRpb25PYnNlcnZlckRhdGEo
KQoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bXV0YXRpb25PYnNl
cnZlckRhdGEoKSA6IDA7Cit9CisKK011dGF0aW9uT2JzZXJ2ZXJEYXRhKiBOb2RlOjplbnN1cmVN
dXRhdGlvbk9ic2VydmVyRGF0YSgpCit7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVu
c3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7Cit9CisKK1Bhc3NPd25QdHI8T2JzZXJ2ZXJQdHJW
ZWN0b3I+IE5vZGU6OmludGVyZXN0ZWRNdXRhdGlvbk9ic2VydmVycyhXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpUeXBlIHR5cGUpCit7CisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIGQgPSBtdXRh
dGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmICghZCB8fCBkLT5vYnNlcnZlcnMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE93blB0cjxPYnNlcnZlclB0clZlY3Rv
cj4gaW50ZXJlc3RlZE9ic2VydmVycyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8V2ViS2l0TXV0YXRp
b25PYnNlcnZlcio+KTsKKyAgICBmb3IgKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb25WZWN0
b3I6Oml0ZXJhdG9yIGl0ZXIgPSBkLT5vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBkLT5vYnNl
cnZlcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci0+b3B0aW9ucyAmIHR5cGUp
CisgICAgICAgICAgICBpbnRlcmVzdGVkT2JzZXJ2ZXJzLT5hcHBlbmQoaXRlci0+b2JzZXJ2ZXIu
Z2V0KCkpOworICAgIH0KKworICAgIHJldHVybiBpbnRlcmVzdGVkT2JzZXJ2ZXJzLnJlbGVhc2Uo
KTsKK30KKworYm9vbCBOb2RlOjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlciwgdWludDhfdCBvcHRpb25zKQoreworICAg
IE11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBkID0gZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKTsK
KyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHJlZ2lzdHJhdGlvbihvYnNlcnZlciwg
b3B0aW9ucyk7CisKKyAgICBzaXplX3QgaW5kZXggPSBkLT5vYnNlcnZlcnMuZmluZChyZWdpc3Ry
YXRpb24pOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgeworICAgICAgICBkLT5vYnNlcnZl
cnMuYXBwZW5kKHJlZ2lzdHJhdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGQtPm9ic2VydmVyc1tpbmRleF0ub3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi5vcHRpb25zOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBOb2RlOjpkZXJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyKQoreworICAg
IE11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBkID0gbXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKyAgICBB
U1NFUlQoZCk7CisgICAgaWYgKCFkKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uIHJlZ2lzdHJhdGlvbihvYnNlcnZlciwgMCk7CisgICAgc2l6ZV90
IGluZGV4ID0gZC0+b2JzZXJ2ZXJzLmZpbmQocmVnaXN0cmF0aW9uKTsKKyAgICBBU1NFUlQoaW5k
ZXggIT0gbm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZC0+b2JzZXJ2ZXJzLnJlbW92ZShpbmRleCk7Cit9CisjZW5kaWYgLy8gRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKworCiB2b2lkIE5vZGU6OmhhbmRsZUxvY2FsRXZlbnRz
KEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkgfHwgIXJhcmVEYXRhKCkt
PmV2ZW50VGFyZ2V0RGF0YSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNmIwYTY2ZDk5MzE5NjA4MGVmMjA0
OTgzOTljODNjOGUxOGM3ODY2Yy4uZjE4NjhiYjcwMmNiMmM0OGY5YWZjZDc0ZDBlY2E1YTM4MmRh
NTM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCkBAIC0zMSw2ICszMSwxMSBAQAogI2luY2x1ZGUgIlJlbmRlclN0
eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSAi
VHJlZVNoYXJlZC5oIgorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyNpbmNsdWRl
ICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKQEAgLTU4LDYgKzYzLDExIEBA
IGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEludFJlY3Q7CiBj
bGFzcyBLZXlib2FyZEV2ZW50OworCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK2Ns
YXNzIE11dGF0aW9uT2JzZXJ2ZXJEYXRhOworI2VuZGlmCisKIGNsYXNzIE5TUmVzb2x2ZXI7CiBj
bGFzcyBOYW1lZE5vZGVNYXA7CiBjbGFzcyBOYW1lTm9kZUxpc3Q7CkBAIC04Miw2ICs5MiwxMCBA
QCBjbGFzcyBUcmVlU2NvcGU7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKKyNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQordHlwZWRlZiBWZWN0b3I8V2ViS2l0TXV0YXRpb25P
YnNlcnZlcio+IE9ic2VydmVyUHRyVmVjdG9yOworI2VuZGlmCisKIGNvbnN0IGludCBub2RlU3R5
bGVDaGFuZ2VTaGlmdCA9IDI1OwogCiAvLyBTeW50aGV0aWNTdHlsZUNoYW5nZSBtZWFucyB0aGF0
IHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgZW50aXJlIHN0eWxlIGNoYW5nZSBsb2dpYyBldmVu
IHRob3VnaApAQCAtNTgwLDYgKzU5NCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRh
KiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIG11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7Cisg
ICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7CisK
KyAgICBQYXNzT3duUHRyPE9ic2VydmVyUHRyVmVjdG9yPiBpbnRlcmVzdGVkTXV0YXRpb25PYnNl
cnZlcnMoV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6VHlwZSk7CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIG9ic2VydmVyIHdhc24ndCBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gdGhpcyBub2Rl
LgorICAgIGJvb2wgcmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0
YXRpb25PYnNlcnZlcj4sIHVpbnQ4X3Qgb3B0aW9ucyk7CisgICAgdm9pZCBkZXJlZ2lzdGVyTXV0
YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+KTsKKyNlbmRp
ZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCiBwcml2YXRlOgogICAgIGVudW0gTm9k
ZUZsYWdzIHsKICAgICAgICAgSXNUZXh0RmxhZyA9IDEsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRh
LmgKaW5kZXggYjkyMWEyM2EyMzdmMmM0N2Y2NzQ2NWJlZGNjZjQxNzY0ZjllOTNjOS4uYzFjYzU1
YTVhZGQ5MTc0MTA1YTQ5MzRmMmYxNWI1MjQwZWI1N2Y1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFy
ZURhdGEuaApAQCAtMjcsNiArMjcsMTEgQEAKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKKworI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNl
cnZlci5oIgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNzEsNyArNzYsMzQg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBOb2RlTGlzdHNOb2RlRGF0YSgpIDogbV9sYWJlbHNO
b2RlTGlzdENhY2hlKDApIHt9CiB9OwotICAgIAorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VS
VkVSUykKK3N0cnVjdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHsKKyAgICBNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4g
b2JzZXJ2ZXIsIHVpbnQ4X3Qgb3B0aW9ucykKKyAgICAgICAgOiBvYnNlcnZlcihvYnNlcnZlciks
CisgICAgICAgICAgb3B0aW9ucyhvcHRpb25zKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBvYnNlcnZlciA9PSBvdGhlci5vYnNlcnZlcjsKKyAgICB9CisKKyAgICBS
ZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXI7CisgICAgdWludDhfdCBvcHRp
b25zOworfTsKKwordHlwZWRlZiBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4g
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvblZlY3RvcjsKK3N0cnVjdCBNdXRhdGlvbk9ic2Vy
dmVyRGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRpb25PYnNlcnZlckRhdGEp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE11dGF0aW9uT2Jz
ZXJ2ZXJEYXRhKCkgeyB9CisgICAgfk11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgeyB9CisKKyAgICBN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uVmVjdG9yIG9ic2VydmVyczsKK307CisjZW5kaWYg
Ly8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKwogY2xhc3MgTm9kZVJhcmVEYXRhIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb2RlUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzogICAgCkBAIC0xMjEsNiArMTUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fZXZlbnRUYXJnZXREYXRhLmdldCgpOwogICAgIH0KIAorI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIG11dGF0aW9uT2JzZXJ2
ZXJEYXRhKCkgeyByZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YS5nZXQoKTsgfQorICAgIE11
dGF0aW9uT2JzZXJ2ZXJEYXRhKiBlbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSgpCisgICAgewor
ICAgICAgICBpZiAoIW1fbXV0YXRpb25PYnNlcnZlckRhdGEpCisgICAgICAgICAgICBtX211dGF0
aW9uT2JzZXJ2ZXJEYXRhID0gYWRvcHRQdHIobmV3IE11dGF0aW9uT2JzZXJ2ZXJEYXRhKTsKKyAg
ICAgICAgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlckRhdGEuZ2V0KCk7CisgICAgfQorI2VuZGlm
CisKICAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb2N1c2VkOyB9CiAg
ICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wgZm9jdXNlZCkgeyBtX2lzRm9jdXNlZCA9IGZvY3VzZWQ7
IH0KIApAQCAtMTM3LDYgKzE3OSwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV90YWJJbmRleFdh
c1NldEV4cGxpY2l0bHkgOiAxOwogICAgIGJvb2wgbV9pc0ZvY3VzZWQgOiAxOwogICAgIGJvb2wg
bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA6IDE7CisKKyNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVyRGF0
YT4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3Bw
CmluZGV4IDE0ODczNjRjODE4Mjk0YjY2ZTRmZTY1NmMwY2E5MGJhODQ1NjkzNjYuLjY3MDdlZGI0
ZTNiNzBkNzMwNzc1MmUxYjlmYTNkZjk5MDQ2ZmU4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAKQEAgLTM0LDggKzM0LDExIEBACiAKICNpbmNs
dWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCiAKKyNpbmNsdWRlICJNdXRhdGlvbk9ic2Vy
dmVyT3B0aW9ucy5oIgogI2luY2x1ZGUgIk11dGF0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTUzLDE0ICs1Niw3MCBAQCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp+V2ViS2l0
TXV0YXRpb25PYnNlcnZlcigpCiB7CiB9CiAKLXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6
b2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMqKQordm9pZCBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpvYnNlcnZlKE5vZGUqIG5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
KiBvcHRpb25zKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgdWludDhfdCBvcHRpb25G
bGFncyA9IDA7CisKKyAgICAvLyBGSVhNRTogUHVzaCBjb21wb3NpdGlvbiBvZiB0aGUgb3B0aW9u
RmxhZ3MgaW50byB0aGUgY3VzdG9tIGJpbmRpbmcuCisgICAgaWYgKG9wdGlvbnMtPmNoaWxkTGlz
dCgpKQorICAgICAgICBvcHRpb25GbGFncyB8PSBDaGlsZExpc3Q7CisgICAgaWYgKG9wdGlvbnMt
PmF0dHJpYnV0ZXMoKSkKKyAgICAgICAgb3B0aW9uRmxhZ3MgfD0gQXR0cmlidXRlczsKKyAgICBp
ZiAob3B0aW9ucy0+Y2hhcmFjdGVyRGF0YSgpKQorICAgICAgICBvcHRpb25GbGFncyB8PSBDaGFy
YWN0ZXJEYXRhOworICAgIC8vIEZJWE1FOiBNb3JlIG9wdGlvbnMgY29tcG9zaXRpb24gd29yayBu
ZWVkcyB0byBiZSBkb25lIGhlcmUuCisKKyAgICBpZiAobm9kZS0+cmVnaXN0ZXJNdXRhdGlvbk9i
c2VydmVyKHRoaXMsIG9wdGlvbkZsYWdzKSkKKyAgICAgICAgbV9yZWdpc3RyYXRpb25zLmFwcGVu
ZChub2RlKTsKIH0KIAogdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0
b3IgaXRlciA9IG1fcmVnaXN0cmF0aW9ucy5iZWdpbigpOyBpdGVyICE9ICBtX3JlZ2lzdHJhdGlv
bnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+ZGVyZWdpc3Rlck11dGF0aW9uT2Jz
ZXJ2ZXIodGhpcyk7CisKKyAgICBtX3JlZ2lzdHJhdGlvbnMuY2xlYXIoKTsKK30KKwordm9pZCBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp3YXNEZXJlZ2lzdGVyZWQoTm9kZSogbm9kZSkKK3sKKyAg
ICBzaXplX3QgaW5kZXggPSBtX3JlZ2lzdHJhdGlvbnMuZmluZChub2RlKTsKKyAgICBBU1NFUlQo
aW5kZXggIT0gbm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9yZWdpc3RyYXRpb25zLnJlbW92ZShpbmRleCk7Cit9CisKK3R5cGVk
ZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+ID4gTXV0YXRpb25P
YnNlcnZlclNldDsKKworc3RhdGljIE11dGF0aW9uT2JzZXJ2ZXJTZXQmIGFjdGl2ZU11dGF0aW9u
T2JzZXJ2ZXJzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGF0aW9uT2JzZXJ2ZXJT
ZXQsIGFjdGl2ZU9ic2VydmVycywgKCkpOworICAgIHJldHVybiBhY3RpdmVPYnNlcnZlcnM7Cit9
CisKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBh
c3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uKQoreworICAgIG1fcmVjb3Jkcy5hcHBl
bmQobXV0YXRpb24pOworICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMpOwor
fQorCit2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMoKQor
eworICAgIHdoaWxlICghYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgTXV0YXRpb25PYnNlcnZlclNldDo6aXRlcmF0b3IgaXRlciA9IGFjdGl2ZU11dGF0aW9u
T2JzZXJ2ZXJzKCkuYmVnaW4oKTsKKyAgICAgICAgUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI+IG9ic2VydmVyID0gKml0ZXI7CisgICAgICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCku
cmVtb3ZlKGl0ZXIpOworICAgICAgICBvYnNlcnZlci0+ZGVsaXZlcigpOworICAgIH0KK30KKwor
dm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKCkKK3sKKyAgICBNdXRhdGlvblJl
Y29yZEFycmF5IHJlY29yZHM7CisgICAgcmVjb3Jkcy5zd2FwKG1fcmVjb3Jkcyk7CisgICAgbV9j
YWxsYmFjay0+aGFuZGxlRXZlbnQoJnJlY29yZHMsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaApp
bmRleCAwODc5NDQ3NTZiMmZjMjZkMTQ0YmFmYTA0M2FjN2U4MmQ1MDBiMGRiLi40YmI0MzA2OGQ5
ZThmMjU4NTNkZjFiZTMxODRkZDNmYmU5NTBlMDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKQEAgLTM2LDI4ICszNiw1MiBAQAogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIE11dGF0aW9uQ2FsbGJhY2s7CiBjbGFzcyBNdXRhdGlvbk9ic2VydmVyT3B0
aW9uczsKK2NsYXNzIE11dGF0aW9uUmVjb3JkOwogY2xhc3MgTm9kZTsKIAogY2xhc3MgV2ViS2l0
TXV0YXRpb25PYnNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI+IHsKIHB1YmxpYzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBDaGlsZExpc3QgPSAoMSA8
PCAwKSwKKyAgICAgICAgQXR0cmlidXRlcyA9ICgxIDw8IDEpLAorICAgICAgICBDaGFyYWN0ZXJE
YXRhID0gKDEgPDwgMikKKyAgICB9OworCisgICAgZW51bSBGbGFncyB7CisgICAgICAgIFN1YnRy
ZWUgPSAoMSA8PCAzKSwKKyAgICAgICAgQXR0cmlidXRlT2xkVmFsdWUgPSAoMSA8PCA0KSwKKyAg
ICAgICAgQ2hhcmFjdGVyRGF0YU9sZFZhbHVlID0gKDEgPDwgNSksCisgICAgICAgIEF0dHJpYnV0
ZUZpbHRlciA9ICgxIDw8IDYpCisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI+IGNyZWF0ZShQYXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+KTsK
KyAgICBzdGF0aWMgdm9pZCBkZWxpdmVyQWxsTXV0YXRpb25zKCk7CiAKICAgICB+V2ViS2l0TXV0
YXRpb25PYnNlcnZlcigpOwogCiAgICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9ic2Vy
dmVyT3B0aW9ucyopOwogICAgIHZvaWQgZGlzY29ubmVjdCgpOworICAgIHZvaWQgd2FzRGVyZWdp
c3RlcmVkKE5vZGUqKTsKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRy
PE11dGF0aW9uUmVjb3JkPik7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cihQYXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+KTsKIAorICAgIHZvaWQgZGVsaXZlcigpOwor
CiAgICAgUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPFJl
ZlB0cjxNdXRhdGlvblJlY29yZD4gPiBtX3JlY29yZHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX3Jl
Z2lzdHJhdGlvbnM7IC8vIE5vZGVSYXJlRGF0YSBoYXMgYSBSZWZQdHIgdG8gdGhpcywgc28gdXNl
IGEgd2VhayBwb2ludGVyIHRvIGF2b2lkIGEgY3ljbGUuCiB9OwogCit2b2lkIGVuc3VyZU11dGF0
aW9uUXVldWVkKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gLCBQYXNzUmVmUHRy
PE11dGF0aW9uUmVjb3JkPik7CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110952</attachid>
            <date>2011-10-13 20:33:35 -0700</date>
            <delta_ts>2011-10-14 13:24:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68956-20111013203334.patch</filename>
            <type>text/plain</type>
            <size>35236</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc0MzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiZTY0ZmNjNmU1OWRlYmUxMTZiNGQ0
OTYyZDMzOWY0Y2JjYmE3ZGRjLi44M2MyM2M0MjFhM2YwZGY0ZjE3MzVjNDBlOGRjMjE5ODNiZDc0
YzEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMTMgIFJhZmFlbCBXZWluc3RlaW4g
IDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIElt
cGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGF0dHJpYnV0ZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTU2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0
aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTEz
ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbXBsZW1l
bnQgYW4gT3ZlcmZsb3dFdmVudCBjb25zdHJ1Y3RvciBmb3IgVjgKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jOGIyZjY4M2Y5Y2ZiNzFhZTk0ODk2ODQwMTEyOWYyOTVkMmNkYzI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0
ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjQgQEAKK1Rlc3QgdGhlIGNvbnN0cnVjdG9yIG9m
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBhdHRyaWJ1dGUgb2JzZXJ2YXRpb24uCisuLi5jYW4g
YXR0cmlidXRlIGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJp
YnV0ZU5hbWVzcGFjZSBpcyBudWxsCisuLi5vYnNlcnZlci5kaXNjb25uZWN0KCkgc2hvdWxkIHBy
ZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucyBpcyBu
dWxsCisuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3JrcyB3aXRoIHRoZSBzYW1l
IG9ic2VydmVyLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlz
ICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFT
UyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFj
ZSBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJh
dHRyaWJ1dGVzIiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBhYm91dCBhdHRyaWJ1dGUgY2hh
bmdlcy4KK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKworVGVzdGluZyB0aGF0IHJlLW9ic2Vydmlu
ZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5nIGhhcyB0aGUgZWZmZWN0IG9m
IHJlc2V0dGluZyB0aGUgb3B0aW9ucy4KK1BBU1MgY2FsbHMgaXMgMQorUEFTUyBtdXRhdGlvbnMu
bGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNT
IG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9ucyBpcyBu
dWxsCisKK1Rlc3RpbmcgdGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQg
dG8gYSBnaXZlbiBub2RlIGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlv
bnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQ
QVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uczIu
bGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zMlswXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFT
UyBtdXRhdGlvbnMyWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKKworVGVzdGluZyB0aGF0ICJh
dHRyaWJ1dGVOYW1lc3BhY2UiIHZhbHVlIGlzIGRlbGl2ZXJlZCBwcm9wZXJseS4KK1BBU1MgbXV0
YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVz
IgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlv
bnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8vd3d3LmZvby5jb20vYmFyIgorCitU
ZXN0aW5nIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBub2RlIHByb3BlcnRpZXMgd2hpY2ggZGVsZWdh
dGUgdG8gYXR0cmlidXRlIHN0b3JhZ2UgZGVsaXZlciBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9u
cy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BB
U1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgInNyYyIKK1BBU1MgbXV0YXRpb25zWzFd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlz
ICJocmVmIgorCitUZXN0aW5nIG11dGF0aW9uIHJlY29yZHMgYXJlIGVucXVldWVkIGZvciBhdHRy
aWJ1dGVzIGJlZm9yZSBET01TdWJ0cmVlTW9kaWZpZWQgaXMgZGlzcGF0Y2hlZC4KK1BBU1MgbXV0
YXRpb25zLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVz
IgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlv
bnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5h
bWUgaXMgImJheiIKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1h
dHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmli
dXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4ZWFiODE4ZTg4MTc2YWRmZjNiYjViYTI3ZWM4MDVkNWU5
ZmVmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2Vy
dmUtYXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsMzIyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzx0aXRsZT48L3Rp
dGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD1kZXNjcmlwdGlvbj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K3ZhciBtdXRhdGlvbnM7Cit2YXIgbXV0YXRpb25zMjsKK3ZhciBjYWxsczsKKworZnVuY3Rpb24g
dGVzdEJhc2ljKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVu
Y3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2Yg
YXR0cmlidXRlIG9ic2VydmF0aW9uLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7Cisg
ICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNl
cnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg
ICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2Vy
dmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAg
ICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgc2V0VGltZW91dChj
aGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNr
RGlzY29ubmVjdEFuZE11dGF0ZSgpIHsKKyAgICAgICAgZGVidWcoJy4uLmNhbiBhdHRyaWJ1dGUg
Y2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmli
dXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAg
ICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2Zv
bycsICdiYXonKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja05vdERlbGl2ZXJlZEFuZE11dGF0
ZU11bHRpcGxlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja05vdERlbGl2ZXJlZEFu
ZE11dGF0ZU11bHRpcGxlKCkgeworICAgICAgICBkZWJ1ZygnLi4ub2JzZXJ2ZXIuZGlzY29ubmVj
dCgpIHNob3VsZCBwcmV2ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0YXRpb25zLicpOworCisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5v
YnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmli
dXRlKCdmb28nLCAnYmF0Jyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2JhcicsICdmb28n
KTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25uZWN0
IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5
cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0
cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0
dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MV0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sx
XS5hdHRyaWJ1dGVOYW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MV0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29u
bmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAg
fQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdFdyb25nVHlwZSgpIHsKKyAgICB2
YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAg
ICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImF0
dHJpYnV0ZXMiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGF0dHJpYnV0ZSBjaGFu
Z2VzLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07
CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlz
dDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0
ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywg
J251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1Zygn
Jyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwor
ZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgeworICAgIHZhciBkaXY7CisgICAg
dmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdU
ZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNl
cnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLicpOworICAgIAor
CQljYWxscyA9IDA7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9
IG07CisJCQljYWxscysrOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAg
ICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBk
aXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tE
aXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0Rpc2Nv
bm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJlKCdjYWxscycsICcxJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgbXV0YXRpb25z
ID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1
ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYs
IHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAn
YmF6Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOwor
ICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAg
ICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0
ZXN0TXVsdGlwbGVPYnNlcnZlcnMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7
CisgICAgdmFyIG9ic2VydmVyMjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBk
ZWJ1ZygnVGVzdGluZyB0aGF0IG11bHRpcGxlIG9ic2VydmVycyBjYW4gYmUgcmVnaXN0ZXJlZCB0
byBhIGdpdmVuIG5vZGUgYW5kIGJvdGggcmVjZWl2ZSBtdXRhdGlvbnMuJyk7CisgICAgICAgIG11
dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0
aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworICAgICAg
ICBvYnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7Cisg
ICAgICAgICAgICBtdXRhdGlvbnMyID0gbTsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVy
Lm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyMi5v
YnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmli
dXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMu
bGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJh
dHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczIubGVuZ3RoJywgJzEn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0uYXR0cmlidXRlTmFtZScsICciZm9v
IicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIG9ic2VydmVyMi5k
aXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsK
KyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0TmFtZXNwYWNlVVJJKCkg
eworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgImF0dHJpYnV0ZU5hbWVzcGFjZSIgdmFs
dWUgaXMgZGVsaXZlcmVkIHByb3Blcmx5LicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2Jz
ZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAg
ICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNl
cnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAg
IGRpdi5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy5mb28uY29tL2JhcicsICdmb28nLCAnYmFy
Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsgICAgCisgICAgfQorCisgICAgZnVu
Y3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcx
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28i
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywg
JyJodHRwOi8vd3d3LmZvby5jb20vYmFyIicpOyAgICAgICAgCisgICAgICAgIG9ic2VydmVyLmRp
c2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOwor
ICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQcm9wZXJ0eUFjY2Vzcygp
IHsKKyAgICB2YXIgaW1nLCBhOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gbm9k
ZSBwcm9wZXJ0aWVzIHdoaWNoIGRlbGVnYXRlIHRvIGF0dHJpYnV0ZSBzdG9yYWdlIGRlbGl2ZXIg
bXV0YXRpb25zLicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBpbWcgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKKyAgICAgICAgYSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2EnKTsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAg
IH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW1nLCB7IGF0dHJpYnV0ZXM6IHRydWUg
fSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoYSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOwor
CisgICAgICAgIGltZy5zcmMgPSAnYmF6LnBuZyc7CisgICAgICAgIGEuaHJlZiA9ICdmb28uaHRt
bCc7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICcic3JjIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciaHJlZiIn
KTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7Cisg
ICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rp
b24gdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkKCkgeworICAgIHZhciBkaXYsIGRp
djIsIHN1YkRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGxpc3RlbmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIG11dGF0aW9uIHJlY29y
ZHMgYXJlIGVucXVldWVkIGZvciBhdHRyaWJ1dGVzIGJlZm9yZSBET01TdWJ0cmVlTW9kaWZpZWQg
aXMgZGlzcGF0Y2hlZC4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBk
aXYgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKTsKKyAgICAgICAgZGl2MiA9IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIHN1YkRpdiA9IGRpdi5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBu
ZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRh
dGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBsaXN0ZW5lciA9IGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgICAgIGRpdjIuc2V0QXR0cmlidXRlKCdiYXonLCAnYmF0Jyk7CisgICAgICAg
IH0KKworICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywg
bGlzdGVuZXIpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHN1YkRpdiwgeyBhdHRyaWJ1dGVz
OiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdjIsIHsgYXR0cmlidXRlczog
dHJ1ZSB9KTsKKworICAgICAgICBzdWJEaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisK
KyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciYmF6IicpOworICAg
ICAgICBkaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIGRvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAg
c3RhcnQoKTsKK30KK3ZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RXcm9uZ1R5cGUsIHRlc3RN
dWx0aXBsZVJlZ2lzdHJhdGlvbiwgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLCB0ZXN0TmFtZXNwYWNl
VVJJLCB0ZXN0UHJvcGVydHlBY2Nlc3MsIHRlc3RPcmRlcmluZ1dydERPTVN1YnRyZWVNb2RpZmll
ZF07Cit2YXIgdGVzdEluZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5leHRUZXN0KCkgeworICAg
IGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3RzW3Rlc3RJbmRleCsr
XSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Rlc2NyaXB0aW9u
KCdUZXN0IHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyJyk7CisKK2lm
ICghd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVzdEZhaWxlZCgnVGhpcyB0
ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpJyk7CitlbHNlCisgICAgcnVu
TmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJkZmNlMzMyMjk2YWYxNjUzMTg2OTgw
NjdiNGIxMzc0ZDg3NzU0NjYuLjdlODBmZmY5NWQ4MTE3Mjc0MzEwYjEwNGZhMTY5OWY3NTAwZDFk
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMS0xMC0xMyAgUmFmYWVsIFdlaW5z
dGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVy
c10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgYXR0cmlidXRl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBm
YXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCisKKyAgICAgICAgVGhpcyBhZGRz
IGFuIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9yIHJlZ2lzdGVyaW5nIG11dGF0aW9uIG9ic2Vy
dmVycyBvbiBub2RlcywKKyAgICAgICAgZGVsaXZlcmluZyBtdXRhdGlvbiByZWNvcmRzIGF0IHRo
ZSBlbmQgb2YgdGhlIG91dGVyLW1vc3Qgc2NyaXB0IGludm9rYXRpb24gYW5kCisgICAgICAgIG9i
c2VydmluZyBtdXRhdGlvbnMgdG8gZWxlbWVudCBhdHRyaWJ1dGVzLgorCisgICAgICAgIE5vdGUg
dGhhdCBzdXBwb3J0IGZvciBvYnNlcnZpbmcgY2hhbmdlcyB0byB0aGUgc3R5bGUgYXR0cmlidXRl
IHdoZW4gdXBkYXRlZCB2aWEKKyAgICAgICAgdGhlIHN0eWxlIHByb3BlcnR5IGlzIG5vdCBpbXBs
ZW1lbnRlZCBoZXJlLgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOFByb3h5OjpkaWRMZWF2ZVNjcmlwdENvbnRleHQpOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0
YXRpb25SZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToK
KyAgICAgICAgKiBkb20vTXV0YXRpb25SZWNvcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0
YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJl
Y29yZC5oOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5pZGw6CisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJSYXJlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjptdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjplbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmRlcmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKiBkb20vTm9kZS5o
OgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyRGF0YTo6TXV0YXRpb25PYnNl
cnZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlckRhdGE6On5NdXRh
dGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6Om11dGF0
aW9uT2JzZXJ2ZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJl
TXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAgICAqIGRvbS9XZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2Vy
dmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp3YXNEZXJlZ2lz
dGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVj
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJB
bGxNdXRhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6
ZGVsaXZlcik6CisgICAgICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaDoKKwogMjAx
MS0xMC0xMyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbmFtZSB2aXJ0dWFsIGdldENvbnN0cnVjdERhdGEgdG8gZ2V0Q29uc3RydWN0RGF0YVZp
cnR1YWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggMGJmNDhlODM0
MWQwNGI1NTUzNmZmYjYzNjc2NmM3MDUwZTIwYzA2Ni4uMzlkNWViMjRhNGQ0MzJjZjM5MzRiNzc4
MGIxYWM2MWE5YmQwYmRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAK
QEAgLTY1LDYgKzY1LDExIEBACiAjaW5jbHVkZSAiVjhTUUxFeGNlcHRpb24uaCIKICNpbmNsdWRl
ICJWOFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiVjhYUGF0aEV4Y2VwdGlv
bi5oIgorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyNpbmNsdWRlICJXZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIK
ICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApAQCAtNjIwLDYgKzYy
NSwxMCBAQCB2b2lkIFY4UHJveHk6OmRpZExlYXZlU2NyaXB0Q29udGV4dCgpCiAjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgaWYgKHBhZ2UtPmdyb3VwKCkuaGFzTG9jYWxT
dG9yYWdlKCkpCiAgICAgICAgIHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCktPnVubG9jaygp
OworCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBXZWJDb3JlOjpXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyQWxsTXV0YXRpb25zKCk7CisjZW5kaWYKIH0KIAogdm9p
ZCBWOFByb3h5OjpyZXNldElzb2xhdGVkV29ybGRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRl
eCBlODAzM2UzNTJkMzdhZjNiN2IwMGMyMjdlZTczMmNiNGQwYmRmNDJlLi5jOTEyMmJlMzA0MjA0
MmUzMjc5YzA1ODUzMDc2OTE1ZDdiMTk5NWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC00
OCw2ICs0OCwxMSBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJz
ZXJJZGlvbXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKworI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisjaW5jbHVkZSAiTXV0YXRpb25SZWNvcmQuaCIK
KyNlbmRpZgorCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgpAQCAtNTksNiArNjQsMTEg
QEAKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyNpbmNs
dWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIldlYktp
dEFuaW1hdGlvbkxpc3QuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCkBAIC02MTAsNiArNjIwLDIwIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVu
dDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUs
IG5hbWVzcGFjZVVSSSkpOwogfQogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK3N0
YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICBWZWN0b3I8V2ViS2l0TXV0YXRp
b25PYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICBlbGVtZW50LT5yZWdpc3RlcmVkTXV0YXRpb25P
YnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1
dGVzKTsKKyAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVh
dGVBdHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUpOworICAgIGZvciAoVmVjdG9yPFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9
IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT5lbnF1ZXVlTXV0YXRp
b25SZWNvcmQobXV0YXRpb24pOworfQorI2VuZGlmCisKIHZvaWQgRWxlbWVudDo6c2V0QXR0cmli
dXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFEb2N1bWVudDo6aXNWYWxpZE5hbWUobmFt
ZSkpIHsKQEAgLTYzMCw2ICs2NTQsMTEgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogCiAgICAg
ZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRlQ2hhbmdlZCBiZWxvdyBtYXkg
ZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGltcG9ydGFudCB0byBlbnF1ZXVl
IGEgTXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNv
cmQodGhpcywgYXR0cmlidXRlTmFtZSk7CisjZW5kaWYKKwogICAgIGlmIChpc0lkQXR0cmlidXRl
TmFtZShvbGQgPyBvbGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUpKQogICAgICAgICB1cGRhdGVJ
ZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgdmFsdWUpOwogCkBAIC02NjMsNiArNjky
LDExIEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgLy8gQWxsb2NhdGUgYXR0cmlidXRl
IG1hcCBpZiBuZWNlc3NhcnkuCiAgICAgQXR0cmlidXRlKiBvbGQgPSBhdHRyaWJ1dGVzKGZhbHNl
KS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRlQ2hhbmdlZCBiZWxvdyBtYXkgZGlzcGF0
Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGltcG9ydGFudCB0byBlbnF1ZXVlIGEgTXV0
YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQodGhp
cywgbmFtZSk7CisjZW5kaWYKKwogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkKICAg
ICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIHZhbHVlKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKaW5kZXggODRiMjk4YjBmNzkzOTQ2Njdj
ZjQ5MjZkZTY2OWEzNGMwZDgyODJiNS4uYzM2ZWNhNmRkZTcxZGVlZTljZDJjZmQyNGM4ODRmNThi
YTdiYmZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCkBAIC0zNiw2ICsz
Niw3IEBACiAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNs
dWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTY5LDE3ICs3MCwxNyBAQCBwcml2YXRlOgog
CiBjbGFzcyBBdHRyaWJ1dGVzUmVjb3JkIDogcHVibGljIE11dGF0aW9uUmVjb3JkIHsKIHB1Ymxp
YzoKLSAgICBBdHRyaWJ1dGVzUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBB
dG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRl
TmFtZXNwYWNlKQorICAgIEF0dHJpYnV0ZXNSZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiAgICAgICAgIDogTXV0YXRpb25SZWNvcmQodGFy
Z2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKQotICAgICAgICAs
IG1fYXR0cmlidXRlTmFtZXNwYWNlKGF0dHJpYnV0ZU5hbWVzcGFjZSkKKyAgICAgICAgLCBtX2F0
dHJpYnV0ZU5hbWUobmFtZS5sb2NhbE5hbWUoKSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZU5hbWVz
cGFjZShuYW1lLm5hbWVzcGFjZVVSSSgpKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6CiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZTsgfQot
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSB7IHJl
dHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0cmlidXRlTmFtZXNwYWNlKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1lc3BhY2U7IH0KICAg
ICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0T2xkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX29sZFZhbHVl
ID0gdmFsdWU7IH0KIApAQCAtMTI4LDkgKzEyOSw5IEBAIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNv
cmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGlsZExpc3QoUGFzc1JlZlB0cjxOb2RlPiB0YXJn
CiAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IENo
aWxkTGlzdFJlY29yZCh0YXJnZXQsIGFkZGVkLCByZW1vdmVkLCBwcmV2aW91c1NpYmxpbmcsIG5l
eHRTaWJsaW5nKSkpOwogfQogCi1QYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBNdXRhdGlvblJl
Y29yZDo6Y3JlYXRlQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgQXRv
bWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5h
bWVzcGFjZSkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVh
dGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKQogewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlvblJlY29y
ZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRl
TmFtZXNwYWNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlvblJl
Y29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgbmFtZSkpKTsKIH0KIAogUGFzc1Jl
ZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoYXJhY3RlckRhdGEo
UGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25SZWNvcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCmlu
ZGV4IGYwY2VjNjA2Njg3ZGVmYTIxNWVkZWNjNDhmMzJlNWRjZGQ1NzJlOTkuLjI1YWY0ZDNlYTNh
MTc5OWRmYTBlMzQxODZlMTg4ODE1ODIyMzYxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvblJlY29yZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5oCkBAIC00MiwxMSArNDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBO
b2RlOwogY2xhc3MgTm9kZUxpc3Q7CitjbGFzcyBRdWFsaWZpZWROYW1lOwogCiBjbGFzcyBNdXRh
dGlvblJlY29yZCA6IHB1YmxpYyBSZWZDb3VudGVkPE11dGF0aW9uUmVjb3JkPiB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUNoaWxkTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gYWRkZWQsIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IHJlbW92ZWQsIFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5n
LCBQYXNzUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxN
dXRhdGlvblJlY29yZD4gY3JlYXRlQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZU5hbWVzcGFjZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+
IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQ2hh
cmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CiAKICAgICB2aXJ0dWFsIH5NdXRh
dGlvblJlY29yZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVj
b3JkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5pZGwKaW5kZXggNDZl
N2EyOWJiYjg0NTI2YjQyOTBkOTA0NjY4MDAzOGNlMGNjNWIyOS4uYzE5YjQxZjIxNmU0YTUyYzQ2
ZjIxODQ3ODVjMzZmODgwMmZkMmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uUmVjb3JkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQu
aWRsCkBAIC00MSw4ICs0MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIE5vZGUgbmV4dFNpYmxpbmc7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyBhdHRyaWJ1dGVOYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGF0dHJpYnV0ZU5hbWVzcGFjZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBhdHRyaWJ1dGVOYW1lc3BhY2U7CiAKLSAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBvbGRWYWx1ZTsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBvbGRW
YWx1ZTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDg2YjM5NTZlMWY5ZjI0ZWQ3MzA3
NzNmMmExODc4MjFjZWU2M2I3YTAuLjMzZDQ3ZTQxZWVkZDA1MWM1MTlhN2I5MzAwMTlhYTU5ZjJm
MDJmNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTk5LDYgKzk5LDcgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIApAQCAtNTQ5LDYgKzU1MCwxNCBAQCB2b2lkIE5vZGU6OmNsZWFyUmFyZURhdGEoKQog
ICAgIGlmICh0cmVlU2NvcGUoKSAmJiByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKICAgICAgICAg
dHJlZVNjb3BlKCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKIAorI2lmIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIG9ic2VydmVyRGF0YSA9IG11
dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7CisgICAgaWYgKG9ic2VydmVyRGF0YSkgeworICAgICAgICBm
b3IgKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb25WZWN0b3I6Oml0ZXJhdG9yIGl0ZXIgPSBv
YnNlcnZlckRhdGEtPm9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVyRGF0YS0+b2Jz
ZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBpdGVyLT5vYnNlcnZlci0+d2FzRGVy
ZWdpc3RlcmVkKHRoaXMpOworICAgIH0KKyNlbmRpZgorCiAgICAgTm9kZVJhcmVEYXRhOjpOb2Rl
UmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFwKCk7CiAgICAg
Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZGF0YU1hcC5maW5k
KHRoaXMpOwogICAgIEFTU0VSVChpdCAhPSBkYXRhTWFwLmVuZCgpKTsKQEAgLTI2NDIsNiArMjY1
MSw2MiBAQCBFdmVudFRhcmdldERhdGEqIE5vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCiAg
ICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogfQog
CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK011dGF0aW9uT2JzZXJ2ZXJEYXRhKiBO
b2RlOjptdXRhdGlvbk9ic2VydmVyRGF0YSgpCit7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkg
PyByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVyRGF0YSgpIDogMDsKK30KKworTXV0YXRpb25P
YnNlcnZlckRhdGEqIE5vZGU6OmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkKK3sKKyAgICBy
ZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKTsKK30K
Kwordm9pZCBOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYgb2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
OjpNdXRhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBNdXRhdGlvbk9ic2VydmVyRGF0YSogb2JzZXJ2
ZXJEYXRhID0gbXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKyAgICBpZiAoIW9ic2VydmVyRGF0YSB8
fCBvYnNlcnZlckRhdGEtPm9ic2VydmVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvblZlY3Rvcjo6aXRlcmF0b3IgaXRl
ciA9IG9ic2VydmVyRGF0YS0+b2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJEYXRh
LT5vYnNlcnZlcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci0+b3B0aW9ucyAm
IHR5cGUpCisgICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKGl0ZXItPm9ic2VydmVyLmdldCgp
KTsKKyAgICB9Cit9CisKK05vZGU6Ok11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IE5vZGU6OnJl
Z2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+
IG9ic2VydmVyLCB1bnNpZ25lZCBjaGFyIG9wdGlvbnMpCit7CisgICAgTXV0YXRpb25PYnNlcnZl
ckRhdGEqIG9ic2VydmVyRGF0YSA9IGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7CisgICAg
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiByZWdpc3RyYXRpb24ob2JzZXJ2ZXIsIG9wdGlv
bnMpOworCisgICAgc2l6ZV90IGluZGV4ID0gb2JzZXJ2ZXJEYXRhLT5vYnNlcnZlcnMuZmluZChy
ZWdpc3RyYXRpb24pOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgeworICAgICAgICBvYnNl
cnZlckRhdGEtPm9ic2VydmVycy5hcHBlbmQocmVnaXN0cmF0aW9uKTsKKyAgICAgICAgcmV0dXJu
IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RlcmVkOworICAgIH0KKworICAgIG9ic2VydmVyRGF0YS0+
b2JzZXJ2ZXJzW2luZGV4XS5vcHRpb25zID0gcmVnaXN0cmF0aW9uLm9wdGlvbnM7CisgICAgcmV0
dXJuIE11dGF0aW9uUmVnaXN0cmF0aW9uT3B0aW9uc1Jlc2V0OworfQorCit2b2lkIE5vZGU6OmRl
cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZl
cj4gb2JzZXJ2ZXIpCit7CisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIG9ic2VydmVyRGF0YSA9
IG11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7CisgICAgQVNTRVJUKG9ic2VydmVyRGF0YSk7CisgICAg
aWYgKCFvYnNlcnZlckRhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24gcmVnaXN0cmF0aW9uKG9ic2VydmVyLCAwKTsKKyAgICBzaXplX3QgaW5k
ZXggPSBvYnNlcnZlckRhdGEtPm9ic2VydmVycy5maW5kKHJlZ2lzdHJhdGlvbik7CisgICAgQVNT
RVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG9ic2VydmVyRGF0YS0+b2JzZXJ2ZXJzLnJlbW92ZShpbmRleCk7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKworCiB2b2lkIE5vZGU6
OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRh
KCkgfHwgIXJhcmVEYXRhKCktPmV2ZW50VGFyZ2V0RGF0YSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNmIw
YTY2ZDk5MzE5NjA4MGVmMjA0OTgzOTljODNjOGUxOGM3ODY2Yy4uMTAyOTg4MDUwMzg1ZjM5ZDhi
NThiNWM1NmY4ZmQzNGZlNTE5ZDgyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0zMSw2ICszMSwxMSBAQAog
I2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBh
YmxlLmgiCiAjaW5jbHVkZSAiVHJlZVNoYXJlZC5oIgorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKKyNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCisjZW5kaWYKKwog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAK
QEAgLTU4LDYgKzYzLDExIEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsK
IGNsYXNzIEludFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50OworCisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKK2NsYXNzIE11dGF0aW9uT2JzZXJ2ZXJEYXRhOworI2VuZGlmCisKIGNs
YXNzIE5TUmVzb2x2ZXI7CiBjbGFzcyBOYW1lZE5vZGVNYXA7CiBjbGFzcyBOYW1lTm9kZUxpc3Q7
CkBAIC01ODAsNiArNTkwLDIzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0
YSogZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3Vy
ZUV2ZW50VGFyZ2V0RGF0YSgpOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAg
ICBNdXRhdGlvbk9ic2VydmVyRGF0YSogbXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKyAgICBNdXRh
dGlvbk9ic2VydmVyRGF0YSogZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKworICAgIHZv
aWQgcmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKj4mLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUpOworCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBvYnNlcnZlciB3YXNuJ3QgYWxyZWFkeSByZWdpc3Rl
cmVkIG9uIHRoaXMgbm9kZS4KKyAgICBlbnVtIE11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IHsK
KyAgICAgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdGVyZWQsCisgICAgICAgIE11dGF0aW9uUmVn
aXN0cmF0aW9uT3B0aW9uc1Jlc2V0CisgICAgfTsKKyAgICBNdXRhdGlvblJlZ2lzdHJhdGlvblJl
c3VsdCByZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyPiwgdW5zaWduZWQgY2hhciBvcHRpb25zKTsKKworCisgICAgdm9pZCBkZXJlZ2lzdGVy
TXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+KTsKKyNl
bmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCiBwcml2YXRlOgogICAgIGVudW0g
Tm9kZUZsYWdzIHsKICAgICAgICAgSXNUZXh0RmxhZyA9IDEsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmgKaW5kZXggYjkyMWEyM2EyMzdmMmM0N2Y2NzQ2NWJlZGNjZjQxNzY0ZjllOTNjOS4uMGNh
Yzc2MDczNTJkZmY1YWZlOWUyMTRkOWNlZTY2MDUwODg1MGVmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
UmFyZURhdGEuaApAQCAtMjcsNiArMjcsMTEgQEAKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIK
ICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKKwor
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5oIgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNzEsNyArNzYs
MzYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBOb2RlTGlzdHNOb2RlRGF0YSgpIDogbV9sYWJl
bHNOb2RlTGlzdENhY2hlKDApIHt9CiB9OwotICAgIAorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKK3N0cnVjdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHsKKyAgICBNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZl
cj4gb2JzZXJ2ZXIsIHVuc2lnbmVkIGNoYXIgb3B0aW9ucykKKyAgICAgICAgOiBvYnNlcnZlcihv
YnNlcnZlcikKKyAgICAgICAgLCBvcHRpb25zKG9wdGlvbnMpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvYnNlcnZlciA9PSBvdGhlci5vYnNlcnZl
cjsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXI7
CisgICAgdW5zaWduZWQgY2hhciBvcHRpb25zOworfTsKKwordHlwZWRlZiBWZWN0b3I8TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvblZlY3Rv
cjsKK3N0cnVjdCBNdXRhdGlvbk9ic2VydmVyRGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTXV0YXRpb25PYnNlcnZlckRhdGEpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIE11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgeyB9CisgICAgfk11dGF0aW9uT2Jz
ZXJ2ZXJEYXRhKCkgeyB9CisKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uVmVjdG9y
IG9ic2VydmVyczsKK307CisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKwog
Y2xhc3MgTm9kZVJhcmVEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb2RlUmFyZURh
dGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzogICAgCkBAIC0xMjEsNiArMTU1
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXZlbnRUYXJnZXREYXRhLmdldCgpOwog
ICAgIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgTXV0YXRpb25PYnNl
cnZlckRhdGEqIG11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgeyByZXR1cm4gbV9tdXRhdGlvbk9ic2Vy
dmVyRGF0YS5nZXQoKTsgfQorICAgIE11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBlbnN1cmVNdXRhdGlv
bk9ic2VydmVyRGF0YSgpCisgICAgeworICAgICAgICBpZiAoIW1fbXV0YXRpb25PYnNlcnZlckRh
dGEpCisgICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhID0gYWRvcHRQdHIobmV3IE11
dGF0aW9uT2JzZXJ2ZXJEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlckRh
dGEuZ2V0KCk7CisgICAgfQorI2VuZGlmCisKICAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNGb2N1c2VkOyB9CiAgICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wgZm9jdXNlZCkg
eyBtX2lzRm9jdXNlZCA9IGZvY3VzZWQ7IH0KIApAQCAtMTM3LDYgKzE4MSwxMCBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgOiAxOwogICAgIGJvb2wgbV9p
c0ZvY3VzZWQgOiAxOwogICAgIGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25B
ZnRlckF0dGFjaCA6IDE7CisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIE93
blB0cjxNdXRhdGlvbk9ic2VydmVyRGF0YT4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YTsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1dl
YktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDE0ODczNjRjODE4Mjk0YjY2ZTRmZTY1NmMw
Y2E5MGJhODQ1NjkzNjYuLmE5ZDhiYTU4ZmExNDlkNTJhZGY4N2JlMWU2ZDgxNzgxMDc4NjY3NjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAKQEAg
LTM0LDggKzM0LDExIEBACiAKICNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCiAK
KyNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyT3B0aW9ucy5oIgogI2luY2x1ZGUgIk11dGF0aW9u
Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk11dGF0
aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDE0ICs1Niw3MCBAQCBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjp+V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpCiB7CiB9CiAKLXZvaWQg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnMqKQordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKE5vZGUqIG5vZGUs
IE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zKiBvcHRpb25zKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgdWludDhfdCBvcHRpb25GbGFncyA9IDA7CisKKyAgICAvLyBGSVhNRTogUHVzaCBj
b21wb3NpdGlvbiBvZiB0aGUgb3B0aW9uRmxhZ3MgaW50byB0aGUgY3VzdG9tIGJpbmRpbmcuCisg
ICAgaWYgKG9wdGlvbnMtPmNoaWxkTGlzdCgpKQorICAgICAgICBvcHRpb25GbGFncyB8PSBDaGls
ZExpc3Q7CisgICAgaWYgKG9wdGlvbnMtPmF0dHJpYnV0ZXMoKSkKKyAgICAgICAgb3B0aW9uRmxh
Z3MgfD0gQXR0cmlidXRlczsKKyAgICBpZiAob3B0aW9ucy0+Y2hhcmFjdGVyRGF0YSgpKQorICAg
ICAgICBvcHRpb25GbGFncyB8PSBDaGFyYWN0ZXJEYXRhOworICAgIC8vIEZJWE1FOiBNb3JlIG9w
dGlvbnMgY29tcG9zaXRpb24gd29yayBuZWVkcyB0byBiZSBkb25lIGhlcmUuCisKKyAgICBpZiAo
bm9kZS0+cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMsIG9wdGlvbkZsYWdzKSA9PSBOb2Rl
OjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZCkKKyAgICAgICAgbV9yZWdpc3RyYXRpb25zLmFw
cGVuZChub2RlKTsKIH0KIAogdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0
KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRl
cmF0b3IgaXRlciA9IG1fcmVnaXN0cmF0aW9ucy5iZWdpbigpOyBpdGVyICE9ICBtX3JlZ2lzdHJh
dGlvbnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+ZGVyZWdpc3Rlck11dGF0aW9u
T2JzZXJ2ZXIodGhpcyk7CisKKyAgICBtX3JlZ2lzdHJhdGlvbnMuY2xlYXIoKTsKK30KKwordm9p
ZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp3YXNEZXJlZ2lzdGVyZWQoTm9kZSogbm9kZSkKK3sK
KyAgICBzaXplX3QgaW5kZXggPSBtX3JlZ2lzdHJhdGlvbnMuZmluZChub2RlKTsKKyAgICBBU1NF
UlQoaW5kZXggIT0gbm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9yZWdpc3RyYXRpb25zLnJlbW92ZShpbmRleCk7Cit9CisKK3R5
cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+ID4gTXV0YXRp
b25PYnNlcnZlclNldDsKKworc3RhdGljIE11dGF0aW9uT2JzZXJ2ZXJTZXQmIGFjdGl2ZU11dGF0
aW9uT2JzZXJ2ZXJzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGF0aW9uT2JzZXJ2
ZXJTZXQsIGFjdGl2ZU9ic2VydmVycywgKCkpOworICAgIHJldHVybiBhY3RpdmVPYnNlcnZlcnM7
Cit9CisKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3Jk
KFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uKQoreworICAgIG1fcmVjb3Jkcy5h
cHBlbmQobXV0YXRpb24pOworICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMp
OworfQorCit2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMo
KQoreworICAgIHdoaWxlICghYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgTXV0YXRpb25PYnNlcnZlclNldDo6aXRlcmF0b3IgaXRlciA9IGFjdGl2ZU11dGF0
aW9uT2JzZXJ2ZXJzKCkuYmVnaW4oKTsKKyAgICAgICAgUmVmUHRyPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI+IG9ic2VydmVyID0gKml0ZXI7CisgICAgICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJz
KCkucmVtb3ZlKGl0ZXIpOworICAgICAgICBvYnNlcnZlci0+ZGVsaXZlcigpOworICAgIH0KK30K
Kwordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKCkKK3sKKyAgICBNdXRhdGlv
blJlY29yZEFycmF5IHJlY29yZHM7CisgICAgcmVjb3Jkcy5zd2FwKG1fcmVjb3Jkcyk7CisgICAg
bV9jYWxsYmFjay0+aGFuZGxlRXZlbnQoJnJlY29yZHMsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRp
b25PYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIu
aAppbmRleCAwODc5NDQ3NTZiMmZjMjZkMTQ0YmFmYTA0M2FjN2U4MmQ1MDBiMGRiLi40NjcwMjli
OTY5NTRlNzQyNWU3ODAzZjk3NmM1YTcxYTM0ZmI0NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKQEAgLTM2LDI4ICszNiw1MiBAQAogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIE11dGF0aW9uQ2FsbGJhY2s7CiBjbGFzcyBNdXRhdGlvbk9ic2VydmVy
T3B0aW9uczsKK2NsYXNzIE11dGF0aW9uUmVjb3JkOwogY2xhc3MgTm9kZTsKIAogY2xhc3MgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI+IHsKIHB1YmxpYzoKKyAgICBlbnVtIE11dGF0aW9uVHlwZSB7CisgICAgICAgIENoaWxk
TGlzdCA9IDEgPDwgMCwKKyAgICAgICAgQXR0cmlidXRlcyA9IDEgPDwgMSwKKyAgICAgICAgQ2hh
cmFjdGVyRGF0YSA9IDEgPDwgMgorICAgIH07CisKKyAgICBlbnVtIE9wdGlvbkZsYWdzIHsKKyAg
ICAgICAgU3VidHJlZSA9IDEgPDwgMywKKyAgICAgICAgQXR0cmlidXRlT2xkVmFsdWUgPSAxIDw8
IDQsCisgICAgICAgIENoYXJhY3RlckRhdGFPbGRWYWx1ZSA9IDEgPDwgNSwKKyAgICAgICAgQXR0
cmlidXRlRmlsdGVyID0gMSA8PCA2CisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI+IGNyZWF0ZShQYXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+
KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxpdmVyQWxsTXV0YXRpb25zKCk7CiAKICAgICB+V2ViS2l0
TXV0YXRpb25PYnNlcnZlcigpOwogCiAgICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9i
c2VydmVyT3B0aW9ucyopOwogICAgIHZvaWQgZGlzY29ubmVjdCgpOworICAgIHZvaWQgd2FzRGVy
ZWdpc3RlcmVkKE5vZGUqKTsKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVm
UHRyPE11dGF0aW9uUmVjb3JkPik7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcihQYXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+KTsKIAorICAgIHZvaWQgZGVsaXZlcigp
OworCiAgICAgUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CisgICAgVmVjdG9y
PFJlZlB0cjxNdXRhdGlvblJlY29yZD4gPiBtX3JlY29yZHM7CisgICAgVmVjdG9yPE5vZGUqPiBt
X3JlZ2lzdHJhdGlvbnM7IC8vIE5vZGVSYXJlRGF0YSBoYXMgYSBSZWZQdHIgdG8gdGhpcywgc28g
dXNlIGEgd2VhayBwb2ludGVyIHRvIGF2b2lkIGEgY3ljbGUuCiB9OwogCit2b2lkIGVuc3VyZU11
dGF0aW9uUXVldWVkKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gLCBQYXNzUmVm
UHRyPE11dGF0aW9uUmVjb3JkPik7CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111047</attachid>
            <date>2011-10-14 12:21:13 -0700</date>
            <delta_ts>2011-10-17 12:26:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68956-20111014122112.patch</filename>
            <type>text/plain</type>
            <size>35092</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc0MzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiZTY0ZmNjNmU1OWRlYmUxMTZiNGQ0
OTYyZDMzOWY0Y2JjYmE3ZGRjLi44M2MyM2M0MjFhM2YwZGY0ZjE3MzVjNDBlOGRjMjE5ODNiZDc0
YzEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMTMgIFJhZmFlbCBXZWluc3RlaW4g
IDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIElt
cGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGF0dHJpYnV0ZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTU2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0
aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTEz
ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbXBsZW1l
bnQgYW4gT3ZlcmZsb3dFdmVudCBjb25zdHJ1Y3RvciBmb3IgVjgKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jOGIyZjY4M2Y5Y2ZiNzFhZTk0ODk2ODQwMTEyOWYyOTVkMmNkYzI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0
ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjQgQEAKK1Rlc3QgdGhlIGNvbnN0cnVjdG9yIG9m
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBhdHRyaWJ1dGUgb2JzZXJ2YXRpb24uCisuLi5jYW4g
YXR0cmlidXRlIGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJp
YnV0ZU5hbWVzcGFjZSBpcyBudWxsCisuLi5vYnNlcnZlci5kaXNjb25uZWN0KCkgc2hvdWxkIHBy
ZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucyBpcyBu
dWxsCisuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3JrcyB3aXRoIHRoZSBzYW1l
IG9ic2VydmVyLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlz
ICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFT
UyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFj
ZSBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJh
dHRyaWJ1dGVzIiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBhYm91dCBhdHRyaWJ1dGUgY2hh
bmdlcy4KK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKworVGVzdGluZyB0aGF0IHJlLW9ic2Vydmlu
ZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5nIGhhcyB0aGUgZWZmZWN0IG9m
IHJlc2V0dGluZyB0aGUgb3B0aW9ucy4KK1BBU1MgY2FsbHMgaXMgMQorUEFTUyBtdXRhdGlvbnMu
bGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNT
IG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9ucyBpcyBu
dWxsCisKK1Rlc3RpbmcgdGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQg
dG8gYSBnaXZlbiBub2RlIGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlv
bnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQ
QVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uczIu
bGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zMlswXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFT
UyBtdXRhdGlvbnMyWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKKworVGVzdGluZyB0aGF0ICJh
dHRyaWJ1dGVOYW1lc3BhY2UiIHZhbHVlIGlzIGRlbGl2ZXJlZCBwcm9wZXJseS4KK1BBU1MgbXV0
YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVz
IgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlv
bnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8vd3d3LmZvby5jb20vYmFyIgorCitU
ZXN0aW5nIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBub2RlIHByb3BlcnRpZXMgd2hpY2ggZGVsZWdh
dGUgdG8gYXR0cmlidXRlIHN0b3JhZ2UgZGVsaXZlciBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9u
cy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BB
U1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgInNyYyIKK1BBU1MgbXV0YXRpb25zWzFd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlz
ICJocmVmIgorCitUZXN0aW5nIG11dGF0aW9uIHJlY29yZHMgYXJlIGVucXVldWVkIGZvciBhdHRy
aWJ1dGVzIGJlZm9yZSBET01TdWJ0cmVlTW9kaWZpZWQgaXMgZGlzcGF0Y2hlZC4KK1BBU1MgbXV0
YXRpb25zLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVz
IgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlv
bnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5h
bWUgaXMgImJheiIKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1h
dHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmli
dXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4ZWFiODE4ZTg4MTc2YWRmZjNiYjViYTI3ZWM4MDVkNWU5
ZmVmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2Vy
dmUtYXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsMzIyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzx0aXRsZT48L3Rp
dGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD1kZXNjcmlwdGlvbj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K3ZhciBtdXRhdGlvbnM7Cit2YXIgbXV0YXRpb25zMjsKK3ZhciBjYWxsczsKKworZnVuY3Rpb24g
dGVzdEJhc2ljKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVu
Y3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2Yg
YXR0cmlidXRlIG9ic2VydmF0aW9uLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7Cisg
ICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNl
cnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg
ICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2Vy
dmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAg
ICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgc2V0VGltZW91dChj
aGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNr
RGlzY29ubmVjdEFuZE11dGF0ZSgpIHsKKyAgICAgICAgZGVidWcoJy4uLmNhbiBhdHRyaWJ1dGUg
Y2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmli
dXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAg
ICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2Zv
bycsICdiYXonKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja05vdERlbGl2ZXJlZEFuZE11dGF0
ZU11bHRpcGxlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja05vdERlbGl2ZXJlZEFu
ZE11dGF0ZU11bHRpcGxlKCkgeworICAgICAgICBkZWJ1ZygnLi4ub2JzZXJ2ZXIuZGlzY29ubmVj
dCgpIHNob3VsZCBwcmV2ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0YXRpb25zLicpOworCisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5v
YnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmli
dXRlKCdmb28nLCAnYmF0Jyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2JhcicsICdmb28n
KTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25uZWN0
IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5
cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0
cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0
dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MV0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sx
XS5hdHRyaWJ1dGVOYW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MV0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29u
bmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAg
fQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdFdyb25nVHlwZSgpIHsKKyAgICB2
YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAg
ICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImF0
dHJpYnV0ZXMiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGF0dHJpYnV0ZSBjaGFu
Z2VzLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07
CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlz
dDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0
ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywg
J251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1Zygn
Jyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwor
ZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgeworICAgIHZhciBkaXY7CisgICAg
dmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdU
ZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNl
cnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLicpOworICAgIAor
CQljYWxscyA9IDA7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9
IG07CisJCQljYWxscysrOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAg
ICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBk
aXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tE
aXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0Rpc2Nv
bm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJlKCdjYWxscycsICcxJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgbXV0YXRpb25z
ID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1
ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYs
IHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAn
YmF6Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOwor
ICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAg
ICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0
ZXN0TXVsdGlwbGVPYnNlcnZlcnMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7
CisgICAgdmFyIG9ic2VydmVyMjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBk
ZWJ1ZygnVGVzdGluZyB0aGF0IG11bHRpcGxlIG9ic2VydmVycyBjYW4gYmUgcmVnaXN0ZXJlZCB0
byBhIGdpdmVuIG5vZGUgYW5kIGJvdGggcmVjZWl2ZSBtdXRhdGlvbnMuJyk7CisgICAgICAgIG11
dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0
aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworICAgICAg
ICBvYnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7Cisg
ICAgICAgICAgICBtdXRhdGlvbnMyID0gbTsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVy
Lm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyMi5v
YnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmli
dXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMu
bGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJh
dHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczIubGVuZ3RoJywgJzEn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0uYXR0cmlidXRlTmFtZScsICciZm9v
IicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIG9ic2VydmVyMi5k
aXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsK
KyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0TmFtZXNwYWNlVVJJKCkg
eworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgImF0dHJpYnV0ZU5hbWVzcGFjZSIgdmFs
dWUgaXMgZGVsaXZlcmVkIHByb3Blcmx5LicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2Jz
ZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAg
ICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNl
cnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAg
IGRpdi5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy5mb28uY29tL2JhcicsICdmb28nLCAnYmFy
Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsgICAgCisgICAgfQorCisgICAgZnVu
Y3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcx
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28i
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywg
JyJodHRwOi8vd3d3LmZvby5jb20vYmFyIicpOyAgICAgICAgCisgICAgICAgIG9ic2VydmVyLmRp
c2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOwor
ICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQcm9wZXJ0eUFjY2Vzcygp
IHsKKyAgICB2YXIgaW1nLCBhOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gbm9k
ZSBwcm9wZXJ0aWVzIHdoaWNoIGRlbGVnYXRlIHRvIGF0dHJpYnV0ZSBzdG9yYWdlIGRlbGl2ZXIg
bXV0YXRpb25zLicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBpbWcgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKKyAgICAgICAgYSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2EnKTsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAg
IH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW1nLCB7IGF0dHJpYnV0ZXM6IHRydWUg
fSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoYSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOwor
CisgICAgICAgIGltZy5zcmMgPSAnYmF6LnBuZyc7CisgICAgICAgIGEuaHJlZiA9ICdmb28uaHRt
bCc7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICcic3JjIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciaHJlZiIn
KTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7Cisg
ICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rp
b24gdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkKCkgeworICAgIHZhciBkaXYsIGRp
djIsIHN1YkRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGxpc3RlbmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIG11dGF0aW9uIHJlY29y
ZHMgYXJlIGVucXVldWVkIGZvciBhdHRyaWJ1dGVzIGJlZm9yZSBET01TdWJ0cmVlTW9kaWZpZWQg
aXMgZGlzcGF0Y2hlZC4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBk
aXYgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKTsKKyAgICAgICAgZGl2MiA9IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIHN1YkRpdiA9IGRpdi5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBu
ZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRh
dGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBsaXN0ZW5lciA9IGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgICAgIGRpdjIuc2V0QXR0cmlidXRlKCdiYXonLCAnYmF0Jyk7CisgICAgICAg
IH0KKworICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywg
bGlzdGVuZXIpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHN1YkRpdiwgeyBhdHRyaWJ1dGVz
OiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdjIsIHsgYXR0cmlidXRlczog
dHJ1ZSB9KTsKKworICAgICAgICBzdWJEaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisK
KyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciYmF6IicpOworICAg
ICAgICBkaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIGRvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAg
c3RhcnQoKTsKK30KK3ZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RXcm9uZ1R5cGUsIHRlc3RN
dWx0aXBsZVJlZ2lzdHJhdGlvbiwgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLCB0ZXN0TmFtZXNwYWNl
VVJJLCB0ZXN0UHJvcGVydHlBY2Nlc3MsIHRlc3RPcmRlcmluZ1dydERPTVN1YnRyZWVNb2RpZmll
ZF07Cit2YXIgdGVzdEluZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5leHRUZXN0KCkgeworICAg
IGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3RzW3Rlc3RJbmRleCsr
XSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Rlc2NyaXB0aW9u
KCdUZXN0IHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyJyk7CisKK2lm
ICghd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVzdEZhaWxlZCgnVGhpcyB0
ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpJyk7CitlbHNlCisgICAgcnVu
TmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJkZmNlMzMyMjk2YWYxNjUzMTg2OTgw
NjdiNGIxMzc0ZDg3NzU0NjYuLmEwZWY1MTE0ZDc3NjQ0YmU5YmQ5YTcwOGFkZTU1YWYwMTJhOGVm
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMS0xMC0xMyAgUmFmYWVsIFdlaW5z
dGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVy
c10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgYXR0cmlidXRl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBm
YXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCisKKyAgICAgICAgVGhpcyBhZGRz
IGFuIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9yIHJlZ2lzdGVyaW5nIG11dGF0aW9uIG9ic2Vy
dmVycyBvbiBub2RlcywKKyAgICAgICAgZGVsaXZlcmluZyBtdXRhdGlvbiByZWNvcmRzIGF0IHRo
ZSBlbmQgb2YgdGhlIG91dGVyLW1vc3Qgc2NyaXB0IGludm9rYXRpb24gYW5kCisgICAgICAgIG9i
c2VydmluZyBtdXRhdGlvbnMgdG8gZWxlbWVudCBhdHRyaWJ1dGVzLgorCisgICAgICAgIE5vdGUg
dGhhdCB0aGUgb3V0ZXItbW9zdCBzY3JpcHQgaW52b2thdGlvbiBvbmx5IHdvcmtzIGluIFY4Lgor
CisgICAgICAgIE5vdGUgYWxzbyB0aGF0IHN1cHBvcnQgZm9yIG9ic2VydmluZyBjaGFuZ2VzIHRv
IHRoZSBzdHlsZSBhdHRyaWJ1dGUgd2hlbiB1cGRhdGVkCisgICAgICAgIHZpYSB0aGUgc3R5bGUg
cHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkIGhlcmUuCisKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmRpZExlYXZlU2NyaXB0
Q29udGV4dCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyk6CisgICAg
ICAgICogZG9tL011dGF0aW9uUmVjb3JkLmg6CisgICAgICAgICogZG9tL011dGF0aW9uUmVjb3Jk
LmlkbDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpj
bGVhclJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09m
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIpOgor
ICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOgorICAg
ICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2
ZXJEYXRhOjpNdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlv
bk9ic2VydmVyRGF0YTo6fk11dGF0aW9uT2JzZXJ2ZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVSYXJlRGF0YTo6bXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZVJhcmVEYXRhOjplbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgICogZG9t
L1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6Ondhc0RlcmVnaXN0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjphY3RpdmVNdXRh
dGlvbk9ic2VydmVycyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRNdXRhdGlvbk9ic2VydmVy
OjplbnF1ZXVlTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXRNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKToKKyAgICAgICAgKiBkb20vV2ViS2l0TXV0YXRp
b25PYnNlcnZlci5oOgorCiAyMDExLTEwLTEzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIHZpcnR1YWwgZ2V0Q29uc3RydWN0RGF0YSB0
byBnZXRDb25zdHJ1Y3REYXRhVmlydHVhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmNwcAppbmRleCAwYmY0OGU4MzQxZDA0YjU1NTM2ZmZiNjM2NzY2YzcwNTBlMjBjMDY2Li44MGEy
MWEwZmYwYzJkNzI1YTRjODg3YzNiNjBmMDNhNGMxYTVkZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcApAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgIlY4U1FMRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiVjhYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIlY4WFBhdGhFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVy
LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oIgogCkBAIC02MjAsNiArNjIxLDEwIEBAIHZvaWQgVjhQcm94eTo6ZGlk
TGVhdmVTY3JpcHRDb250ZXh0KCkKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ICAgICBpZiAocGFnZS0+Z3JvdXAoKS5oYXNMb2NhbFN0b3JhZ2UoKSkKICAgICAgICAgcGFnZS0+
Z3JvdXAoKS5sb2NhbFN0b3JhZ2UoKS0+dW5sb2NrKCk7CisKKyNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQorICAgIFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJB
bGxNdXRhdGlvbnMoKTsKKyNlbmRpZgogfQogCiB2b2lkIFY4UHJveHk6OnJlc2V0SXNvbGF0ZWRX
b3JsZHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGU4MDMzZTM1MmQzN2FmM2I3YjAwYzIy
N2VlNzMyY2I0ZDBiZGY0MmUuLjU4YWFkYjMzOWI2MTFkMTQ5OWIxYTJjNTk0YTUyMmM5MmMxZjM5
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTXV0YXRpb25SZWNvcmQuaCIKICNp
bmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCkBAIC01OSw2ICs2MCwxMSBAQAogI2luY2x1ZGUg
IlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorI2luY2x1ZGUgIldlYktpdE11
dGF0aW9uT2JzZXJ2ZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiV2ViS2l0QW5pbWF0aW9uTGlz
dC5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAg
LTYxMCw2ICs2MTYsMjAgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpnZXRBdHRyaWJ1
dGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3QKICAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJ
KSk7CiB9CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorc3RhdGljIHZvaWQgZW5x
dWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKQoreworICAgIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4g
b2JzZXJ2ZXJzOworICAgIGVsZW1lbnQtPnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlw
ZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZXMpOworICAgIGlm
IChvYnNlcnZlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8TXV0
YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMo
ZWxlbWVudCwgbmFtZSk7CisgICAgZm9yIChWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+
OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVu
ZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRh
dGlvbik7Cit9CisjZW5kaWYKKwogdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBpZiAoIURvY3VtZW50Ojppc1ZhbGlkTmFtZShuYW1lKSkgewpAQCAtNjMw
LDYgKzY1MCwxMSBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAKICAgICBkb2N1bWVudCgpLT5p
bmNET01UcmVlVmVyc2lvbigpOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAg
ICAvLyBUaGUgY2FsbCB0byBhdHRyaWJ1dGVDaGFuZ2VkIGJlbG93IG1heSBkaXNwYXRjaCBET01T
dWJ0cmVlTW9kaWZpZWQsIHNvIGl0J3MgaW1wb3J0YW50IHRvIGVucXVldWUgYSBNdXRhdGlvblJl
Y29yZCBub3cuCisgICAgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZCh0aGlzLCBhdHRy
aWJ1dGVOYW1lKTsKKyNlbmRpZgorCiAgICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG9sZCA/IG9s
ZC0+bmFtZSgpIDogYXR0cmlidXRlTmFtZSkpCiAgICAgICAgIHVwZGF0ZUlkKG9sZCA/IG9sZC0+
dmFsdWUoKSA6IG51bGxBdG9tLCB2YWx1ZSk7CiAKQEAgLTY2Myw2ICs2ODgsMTEgQEAgdm9pZCBF
bGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwKICAgICAvLyBBbGxvY2F0ZSBhdHRyaWJ1dGUgbWFwIGlmIG5lY2Vz
c2FyeS4KICAgICBBdHRyaWJ1dGUqIG9sZCA9IGF0dHJpYnV0ZXMoZmFsc2UpLT5nZXRBdHRyaWJ1
dGVJdGVtKG5hbWUpOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICAvLyBU
aGUgY2FsbCB0byBhdHRyaWJ1dGVDaGFuZ2VkIGJlbG93IG1heSBkaXNwYXRjaCBET01TdWJ0cmVl
TW9kaWZpZWQsIHNvIGl0J3MgaW1wb3J0YW50IHRvIGVucXVldWUgYSBNdXRhdGlvblJlY29yZCBu
b3cuCisgICAgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZCh0aGlzLCBuYW1lKTsKKyNl
bmRpZgorCiAgICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG5hbWUpKQogICAgICAgICB1cGRhdGVJ
ZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgdmFsdWUpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcAppbmRleCA4NGIyOThiMGY3OTM5NDY2N2NmNDkyNmRlNjY5YTM0
YzBkODI4MmI1Li5jMzZlY2E2ZGRlNzFkZWVlOWNkMmNmZDI0Yzg4NGY1OGJhN2JiZmI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2lu
Y2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlF1YWxpZmll
ZE5hbWUuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIApAQCAtNjksMTcgKzcwLDE3IEBAIHByaXZhdGU6CiAKIGNsYXNzIEF0dHJp
YnV0ZXNSZWNvcmQgOiBwdWJsaWMgTXV0YXRpb25SZWNvcmQgewogcHVibGljOgotICAgIEF0dHJp
YnV0ZXNSZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0cmlidXRlTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UpCisg
ICAgQXR0cmlidXRlc1JlY29yZChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSkKICAgICAgICAgOiBNdXRhdGlvblJlY29yZCh0YXJnZXQpCi0gICAgICAg
ICwgbV9hdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICwgbV9hdHRyaWJ1dGVO
YW1lc3BhY2UoYXR0cmlidXRlTmFtZXNwYWNlKQorICAgICAgICAsIG1fYXR0cmlidXRlTmFtZShu
YW1lLmxvY2FsTmFtZSgpKQorICAgICAgICAsIG1fYXR0cmlidXRlTmFtZXNwYWNlKG5hbWUubmFt
ZXNwYWNlVVJJKCkpCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSgpOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBh
dHRyaWJ1dGVOYW1lKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1lOyB9Ci0gICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSgpIHsgcmV0dXJuIG1fYXR0cmli
dXRlTmFtZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1l
c3BhY2UoKSB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWVzcGFjZTsgfQogICAgIHZpcnR1YWwgU3Ry
aW5nIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRPbGRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fb2xkVmFsdWUgPSB2YWx1ZTsgfQog
CkBAIC0xMjgsOSArMTI5LDkgQEAgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25S
ZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdChQYXNzUmVmUHRyPE5vZGU+IHRhcmcKICAgICByZXR1cm4g
YWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQ2hpbGRMaXN0UmVjb3Jk
KHRhcmdldCwgYWRkZWQsIHJlbW92ZWQsIHByZXZpb3VzU2libGluZywgbmV4dFNpYmxpbmcpKSk7
CiB9CiAKLVBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVB
dHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKQorUGFz
c1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMo
UGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IEF0dHJp
YnV0ZXNSZWNvcmQodGFyZ2V0LCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVOYW1lc3BhY2UpKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IEF0
dHJpYnV0ZXNSZWNvcmQodGFyZ2V0LCBuYW1lKSkpOwogfQogCiBQYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5v
ZGU+IHRhcmdldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29y
ZC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKaW5kZXggZjBjZWM2MDY2
ODdkZWZhMjE1ZWRlY2M0OGYzMmU1ZGNkZDU3MmU5OS4uMjVhZjRkM2VhM2ExNzk5ZGZhMGUzNDE4
NmUxODg4MTU4MjIzNjE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
UmVjb3JkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKQEAgLTQy
LDExICs0MiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5vZGU7CiBjbGFzcyBO
b2RlTGlzdDsKK2NsYXNzIFF1YWxpZmllZE5hbWU7CiAKIGNsYXNzIE11dGF0aW9uUmVjb3JkIDog
cHVibGljIFJlZkNvdW50ZWQ8TXV0YXRpb25SZWNvcmQ+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBhZGRlZCwgUGFzc1JlZlB0cjxOb2RlTGlz
dD4gcmVtb3ZlZCwgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcsIFBhc3NSZWZQdHI8
Tm9kZT4gbmV4dFNpYmxpbmcpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3Jk
PiBjcmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZXNw
YWNlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQXR0cmli
dXRlcyhQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVDaGFyYWN0ZXJEYXRhKFBh
c3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKIAogICAgIHZpcnR1YWwgfk11dGF0aW9uUmVjb3JkKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaWRsIGIvU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmlkbAppbmRleCA0NmU3YTI5YmJiODQ1MjZi
NDI5MGQ5MDQ2NjgwMDM4Y2UwY2M1YjI5Li5jMTliNDFmMjE2ZTRhNTJjNDZmMjE4NDc4NWMzNmY4
ODAyZmQyYjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5pZGwKQEAgLTQxLDgg
KzQxLDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSBu
ZXh0U2libGluZzsKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGF0dHJp
YnV0ZU5hbWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYXR0cmlidXRl
TmFtZXNwYWNlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5n
VG89TnVsbF0gRE9NU3RyaW5nIGF0dHJpYnV0ZU5hbWVzcGFjZTsKIAotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG9sZFZhbHVlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89TnVsbF0gRE9NU3RyaW5nIG9sZFZhbHVlOwogICAgIH07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKaW5kZXggODZiMzk1NmUxZjlmMjRlZDczMDc3M2YyYTE4NzgyMWNl
ZTYzYjdhMC4uMzNkNDdlNDFlZWRkMDUxYzUxOWE3YjkzMDAxOWFhNTlmMmYwMmY1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcApAQCAtOTksNiArOTksNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC01
NDksNiArNTUwLDE0IEBAIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0YSgpCiAgICAgaWYgKHRyZWVT
Y29wZSgpICYmIHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQogICAgICAgICB0cmVlU2NvcGUoKS0+
cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
KyAgICBNdXRhdGlvbk9ic2VydmVyRGF0YSogb2JzZXJ2ZXJEYXRhID0gbXV0YXRpb25PYnNlcnZl
ckRhdGEoKTsKKyAgICBpZiAob2JzZXJ2ZXJEYXRhKSB7CisgICAgICAgIGZvciAoTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvblZlY3Rvcjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVyRGF0YS0+
b2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJEYXRhLT5vYnNlcnZlcnMuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgICAgIGl0ZXItPm9ic2VydmVyLT53YXNEZXJlZ2lzdGVyZWQodGhp
cyk7CisgICAgfQorI2VuZGlmCisKICAgICBOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcCYg
ZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKTsKICAgICBOb2RlUmFyZURhdGE6
Ok5vZGVSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBkYXRhTWFwLmZpbmQodGhpcyk7CiAgICAg
QVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkpOwpAQCAtMjY0Miw2ICsyNjUxLDYyIEBAIEV2ZW50
VGFyZ2V0RGF0YSogTm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKICAgICByZXR1cm4gZW5z
dXJlUmFyZURhdGEoKS0+ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiB9CiAKKyNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQorTXV0YXRpb25PYnNlcnZlckRhdGEqIE5vZGU6Om11dGF0aW9u
T2JzZXJ2ZXJEYXRhKCkKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCkt
Pm11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgOiAwOworfQorCitNdXRhdGlvbk9ic2VydmVyRGF0YSog
Tm9kZTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKQoreworICAgIHJldHVybiBlbnN1cmVS
YXJlRGF0YSgpLT5lbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSgpOworfQorCit2b2lkIE5vZGU6
OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShWZWN0b3I8V2ViS2l0TXV0YXRpb25P
YnNlcnZlcio+JiBvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlw
ZSB0eXBlKQoreworICAgIE11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBvYnNlcnZlckRhdGEgPSBtdXRh
dGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmICghb2JzZXJ2ZXJEYXRhIHx8IG9ic2VydmVyRGF0
YS0+b2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uVmVjdG9yOjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJE
YXRhLT5vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlckRhdGEtPm9ic2VydmVycy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5vcHRpb25zICYgdHlwZSkKKyAgICAg
ICAgICAgIG9ic2VydmVycy5hcHBlbmQoaXRlci0+b2JzZXJ2ZXIuZ2V0KCkpOworICAgIH0KK30K
KworTm9kZTo6TXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgTm9kZTo6cmVnaXN0ZXJNdXRhdGlv
bk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIHVu
c2lnbmVkIGNoYXIgb3B0aW9ucykKK3sKKyAgICBNdXRhdGlvbk9ic2VydmVyRGF0YSogb2JzZXJ2
ZXJEYXRhID0gZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKyAgICBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uIHJlZ2lzdHJhdGlvbihvYnNlcnZlciwgb3B0aW9ucyk7CisKKyAgICBz
aXplX3QgaW5kZXggPSBvYnNlcnZlckRhdGEtPm9ic2VydmVycy5maW5kKHJlZ2lzdHJhdGlvbik7
CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgIG9ic2VydmVyRGF0YS0+b2Jz
ZXJ2ZXJzLmFwcGVuZChyZWdpc3RyYXRpb24pOworICAgICAgICByZXR1cm4gTXV0YXRpb25PYnNl
cnZlclJlZ2lzdGVyZWQ7CisgICAgfQorCisgICAgb2JzZXJ2ZXJEYXRhLT5vYnNlcnZlcnNbaW5k
ZXhdLm9wdGlvbnMgPSByZWdpc3RyYXRpb24ub3B0aW9uczsKKyAgICByZXR1cm4gTXV0YXRpb25S
ZWdpc3RyYXRpb25PcHRpb25zUmVzZXQ7Cit9CisKK3ZvaWQgTm9kZTo6ZGVyZWdpc3Rlck11dGF0
aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlcikK
K3sKKyAgICBNdXRhdGlvbk9ic2VydmVyRGF0YSogb2JzZXJ2ZXJEYXRhID0gbXV0YXRpb25PYnNl
cnZlckRhdGEoKTsKKyAgICBBU1NFUlQob2JzZXJ2ZXJEYXRhKTsKKyAgICBpZiAoIW9ic2VydmVy
RGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
biByZWdpc3RyYXRpb24ob2JzZXJ2ZXIsIDApOworICAgIHNpemVfdCBpbmRleCA9IG9ic2VydmVy
RGF0YS0+b2JzZXJ2ZXJzLmZpbmQocmVnaXN0cmF0aW9uKTsKKyAgICBBU1NFUlQoaW5kZXggIT0g
bm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgb2JzZXJ2ZXJEYXRhLT5vYnNlcnZlcnMucmVtb3ZlKGluZGV4KTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCisKIHZvaWQgTm9kZTo6aGFuZGxlTG9jYWxF
dmVudHMoRXZlbnQqIGV2ZW50KQogewogICAgIGlmICghaGFzUmFyZURhdGEoKSB8fCAhcmFyZURh
dGEoKS0+ZXZlbnRUYXJnZXREYXRhKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA2YjBhNjZkOTkzMTk2MDgw
ZWYyMDQ5ODM5OWM4M2M4ZTE4Yzc4NjZjLi4wMmFlNjQ4MmM4YTMwNWE2OGZmYmMzYjYyYzBlZjky
ZTZiNWY4MWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1
ZGUgIlRyZWVTaGFyZWQuaCIKKyNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIApA
QCAtNTgsNiArNTksNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBj
bGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNzIE11dGF0aW9uT2JzZXJ2
ZXJEYXRhOwogY2xhc3MgTlNSZXNvbHZlcjsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5h
bWVOb2RlTGlzdDsKQEAgLTU4MCw2ICs1ODIsMjIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRXZl
bnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0
RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQorICAgIE11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBtdXRhdGlvbk9ic2VydmVyRGF0YSgp
OworICAgIE11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBlbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSgp
OworCisgICAgdm9pZCByZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9u
VHlwZSk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG9ic2VydmVyIHdhc24ndCBhbHJl
YWR5IHJlZ2lzdGVyZWQgb24gdGhpcyBub2RlLgorICAgIGVudW0gTXV0YXRpb25SZWdpc3RyYXRp
b25SZXN1bHQgeworICAgICAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZCwKKyAgICAgICAg
TXV0YXRpb25SZWdpc3RyYXRpb25PcHRpb25zUmVzZXQKKyAgICB9OworICAgIE11dGF0aW9uUmVn
aXN0cmF0aW9uUmVzdWx0IHJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI+LCB1bnNpZ25lZCBjaGFyIG9wdGlvbnMpOworCisgICAgdm9pZCBk
ZXJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI+KTsKKyNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCiBwcml2YXRlOgog
ICAgIGVudW0gTm9kZUZsYWdzIHsKICAgICAgICAgSXNUZXh0RmxhZyA9IDEsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmgKaW5kZXggYjkyMWEyM2EyMzdmMmM0N2Y2NzQ2NWJlZGNjZjQxNzY0Zjll
OTNjOS4uZTliNjc1MDY5MjEzYjE2ZDZiYjA4Njg4ZGJhOGUwZDZlOGFmYzQzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIk5hbWVOb2Rl
TGlzdC5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJUYWdOb2RlTGlz
dC5oIgorI2luY2x1ZGUgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgpAQCAtNzEsNyArNzIsMzYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBOb2RlTGlz
dHNOb2RlRGF0YSgpIDogbV9sYWJlbHNOb2RlTGlzdENhY2hlKDApIHt9CiB9OwotICAgIAorCisj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK3N0cnVjdCBNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uIHsKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8
V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIHVuc2lnbmVkIGNoYXIgb3B0aW9ucykK
KyAgICAgICAgOiBvYnNlcnZlcihvYnNlcnZlcikKKyAgICAgICAgLCBvcHRpb25zKG9wdGlvbnMp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvYnNl
cnZlciA9PSBvdGhlci5vYnNlcnZlcjsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViS2l0TXV0YXRp
b25PYnNlcnZlcj4gb2JzZXJ2ZXI7CisgICAgdW5zaWduZWQgY2hhciBvcHRpb25zOworfTsKKwor
dHlwZWRlZiBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvblZlY3RvcjsKK3N0cnVjdCBNdXRhdGlvbk9ic2VydmVyRGF0YSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRpb25PYnNlcnZlckRhdGEpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkg
eyB9CisgICAgfk11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgeyB9CisKKyAgICBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uVmVjdG9yIG9ic2VydmVyczsKK307CisjZW5kaWYgLy8gRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKKwogY2xhc3MgTm9kZVJhcmVEYXRhIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShOb2RlUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzogICAgCkBAIC0xMjEsNiArMTUxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXZl
bnRUYXJnZXREYXRhLmdldCgpOwogICAgIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIG11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgeyBy
ZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YS5nZXQoKTsgfQorICAgIE11dGF0aW9uT2JzZXJ2
ZXJEYXRhKiBlbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSgpCisgICAgeworICAgICAgICBpZiAo
IW1fbXV0YXRpb25PYnNlcnZlckRhdGEpCisgICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2ZXJE
YXRhID0gYWRvcHRQdHIobmV3IE11dGF0aW9uT2JzZXJ2ZXJEYXRhKTsKKyAgICAgICAgcmV0dXJu
IG1fbXV0YXRpb25PYnNlcnZlckRhdGEuZ2V0KCk7CisgICAgfQorI2VuZGlmCisKICAgICBib29s
IGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb2N1c2VkOyB9CiAgICAgdm9pZCBzZXRG
b2N1c2VkKGJvb2wgZm9jdXNlZCkgeyBtX2lzRm9jdXNlZCA9IGZvY3VzZWQ7IH0KIApAQCAtMTM3
LDYgKzE3NywxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0
bHkgOiAxOwogICAgIGJvb2wgbV9pc0ZvY3VzZWQgOiAxOwogICAgIGJvb2wgbV9uZWVkc0ZvY3Vz
QXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA6IDE7CisKKyNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQorICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVyRGF0YT4gbV9tdXRhdGlv
bk9ic2VydmVyRGF0YTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDE0ODcz
NjRjODE4Mjk0YjY2ZTRmZTY1NmMwY2E5MGJhODQ1NjkzNjYuLmU3N2YwMWFjYWNlYjRhOTU1ZDlj
ZjlkNTllZjI5YzEyYjFjNmMwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0
YXRpb25PYnNlcnZlci5jcHAKQEAgLTM0LDggKzM0LDExIEBACiAKICNpbmNsdWRlICJXZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmgiCiAKKyNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyT3B0aW9ucy5o
IgogI2luY2x1ZGUgIk11dGF0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUz
LDE0ICs1Niw3MCBAQCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp+V2ViS2l0TXV0YXRpb25PYnNl
cnZlcigpCiB7CiB9CiAKLXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2Rl
KiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMqKQordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
OjpvYnNlcnZlKE5vZGUqIG5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zKiBvcHRpb25zKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgdW5zaWduZWQgY2hhciBvcHRpb25GbGFncyA9
IDA7CisKKyAgICAvLyBGSVhNRTogUHVzaCBjb21wb3NpdGlvbiBvZiB0aGUgb3B0aW9uRmxhZ3Mg
aW50byB0aGUgY3VzdG9tIGJpbmRpbmcuCisgICAgaWYgKG9wdGlvbnMtPmNoaWxkTGlzdCgpKQor
ICAgICAgICBvcHRpb25GbGFncyB8PSBDaGlsZExpc3Q7CisgICAgaWYgKG9wdGlvbnMtPmF0dHJp
YnV0ZXMoKSkKKyAgICAgICAgb3B0aW9uRmxhZ3MgfD0gQXR0cmlidXRlczsKKyAgICBpZiAob3B0
aW9ucy0+Y2hhcmFjdGVyRGF0YSgpKQorICAgICAgICBvcHRpb25GbGFncyB8PSBDaGFyYWN0ZXJE
YXRhOworICAgIC8vIEZJWE1FOiBNb3JlIG9wdGlvbnMgY29tcG9zaXRpb24gd29yayBuZWVkcyB0
byBiZSBkb25lIGhlcmUuCisKKyAgICBpZiAobm9kZS0+cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVy
KHRoaXMsIG9wdGlvbkZsYWdzKSA9PSBOb2RlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZCkK
KyAgICAgICAgbV9yZWdpc3RyYXRpb25zLmFwcGVuZChub2RlKTsKIH0KIAogdm9pZCBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaXN0cmF0aW9ucy5i
ZWdpbigpOyBpdGVyICE9ICBtX3JlZ2lzdHJhdGlvbnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAg
KCppdGVyKS0+ZGVyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisKKyAgICBtX3JlZ2lz
dHJhdGlvbnMuY2xlYXIoKTsKK30KKwordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp3YXNE
ZXJlZ2lzdGVyZWQoTm9kZSogbm9kZSkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBtX3JlZ2lzdHJh
dGlvbnMuZmluZChub2RlKTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworICAgIGlm
IChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWdpc3RyYXRp
b25zLnJlbW92ZShpbmRleCk7Cit9CisKK3R5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI+ID4gTXV0YXRpb25PYnNlcnZlclNldDsKKworc3RhdGljIE11dGF0
aW9uT2JzZXJ2ZXJTZXQmIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKE11dGF0aW9uT2JzZXJ2ZXJTZXQsIGFjdGl2ZU9ic2VydmVycywgKCkpOwor
ICAgIHJldHVybiBhY3RpdmVPYnNlcnZlcnM7Cit9CisKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11
dGF0aW9uKQoreworICAgIG1fcmVjb3Jkcy5hcHBlbmQobXV0YXRpb24pOworICAgIGFjdGl2ZU11
dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMpOworfQorCit2b2lkIFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMoKQoreworICAgIHdoaWxlICghYWN0aXZlTXV0YXRp
b25PYnNlcnZlcnMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlclNldDo6
aXRlcmF0b3IgaXRlciA9IGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYmVnaW4oKTsKKyAgICAg
ICAgUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyID0gKml0ZXI7CisgICAg
ICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkucmVtb3ZlKGl0ZXIpOworICAgICAgICBvYnNl
cnZlci0+ZGVsaXZlcigpOworICAgIH0KK30KKwordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
OjpkZWxpdmVyKCkKK3sKKyAgICBNdXRhdGlvblJlY29yZEFycmF5IHJlY29yZHM7CisgICAgcmVj
b3Jkcy5zd2FwKG1fcmVjb3Jkcyk7CisgICAgbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQoJnJlY29y
ZHMsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaAppbmRleCAwODc5NDQ3NTZiMmZjMjZkMTQ0YmFm
YTA0M2FjN2U4MmQ1MDBiMGRiLi40NjcwMjliOTY5NTRlNzQyNWU3ODAzZjk3NmM1YTcxYTM0ZmI0
NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKQEAg
LTM2LDI4ICszNiw1MiBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE11dGF0aW9uQ2FsbGJh
Y2s7CiBjbGFzcyBNdXRhdGlvbk9ic2VydmVyT3B0aW9uczsKK2NsYXNzIE11dGF0aW9uUmVjb3Jk
OwogY2xhc3MgTm9kZTsKIAogY2xhc3MgV2ViS2l0TXV0YXRpb25PYnNlcnZlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IHsKIHB1YmxpYzoKKyAgICBlbnVtIE11
dGF0aW9uVHlwZSB7CisgICAgICAgIENoaWxkTGlzdCA9IDEgPDwgMCwKKyAgICAgICAgQXR0cmli
dXRlcyA9IDEgPDwgMSwKKyAgICAgICAgQ2hhcmFjdGVyRGF0YSA9IDEgPDwgMgorICAgIH07CisK
KyAgICBlbnVtIE9wdGlvbkZsYWdzIHsKKyAgICAgICAgU3VidHJlZSA9IDEgPDwgMywKKyAgICAg
ICAgQXR0cmlidXRlT2xkVmFsdWUgPSAxIDw8IDQsCisgICAgICAgIENoYXJhY3RlckRhdGFPbGRW
YWx1ZSA9IDEgPDwgNSwKKyAgICAgICAgQXR0cmlidXRlRmlsdGVyID0gMSA8PCA2CisgICAgfTsK
KwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IGNyZWF0ZShQ
YXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxpdmVyQWxs
TXV0YXRpb25zKCk7CiAKICAgICB+V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpOwogCiAgICAgdm9p
ZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyopOwogICAgIHZvaWQgZGlz
Y29ubmVjdCgpOworICAgIHZvaWQgd2FzRGVyZWdpc3RlcmVkKE5vZGUqKTsKKyAgICB2b2lkIGVu
cXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPik7CiAKIHByaXZh
dGU6CiAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJh
Y2s+KTsKIAorICAgIHZvaWQgZGVsaXZlcigpOworCiAgICAgUmVmUHRyPE11dGF0aW9uQ2FsbGJh
Y2s+IG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPFJlZlB0cjxNdXRhdGlvblJlY29yZD4gPiBtX3Jl
Y29yZHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX3JlZ2lzdHJhdGlvbnM7IC8vIE5vZGVSYXJlRGF0
YSBoYXMgYSBSZWZQdHIgdG8gdGhpcywgc28gdXNlIGEgd2VhayBwb2ludGVyIHRvIGF2b2lkIGEg
Y3ljbGUuCiB9OwogCit2b2lkIGVuc3VyZU11dGF0aW9uUXVldWVkKFBhc3NSZWZQdHI8V2ViS2l0
TXV0YXRpb25PYnNlcnZlcj4gLCBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPik7CisKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111301</attachid>
            <date>2011-10-17 12:26:42 -0700</date>
            <delta_ts>2011-10-17 14:57:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68956-20111017122641.patch</filename>
            <type>text/plain</type>
            <size>35185</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2MzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiYWZkNGM5NDg0N2NkZmYw
ZmFhNjYwYjQxNDczNmIwNDZjODQ4MzY0Li5jMTQ2OGEzM2RiMjQzNmYxMjIwNWZmNDRlY2I2MzU5
YWE5YjkwMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMTAtMTMgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGF0
dHJpYnV0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY4OTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdDogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAorCisgICAgICAgIFRo
aXMgYWRkcyBhbiBpbml0aWFsIGltcGxlbWVudGF0aW9uIGZvciByZWdpc3RlcmluZyBtdXRhdGlv
biBvYnNlcnZlcnMgb24gbm9kZXMsCisgICAgICAgIGRlbGl2ZXJpbmcgbXV0YXRpb24gcmVjb3Jk
cyBhdCB0aGUgZW5kIG9mIHRoZSBvdXRlci1tb3N0IHNjcmlwdCBpbnZva2F0aW9uIGFuZAorICAg
ICAgICBvYnNlcnZpbmcgbXV0YXRpb25zIHRvIGVsZW1lbnQgYXR0cmlidXRlcy4KKworICAgICAg
ICBOb3RlIHRoYXQgdGhlIG91dGVyLW1vc3Qgc2NyaXB0IGludm9rYXRpb24gb25seSB3b3JrcyBp
biBWOC4KKworICAgICAgICBOb3RlIGFsc28gdGhhdCBzdXBwb3J0IGZvciBvYnNlcnZpbmcgY2hh
bmdlcyB0byB0aGUgc3R5bGUgYXR0cmlidXRlIHdoZW4gdXBkYXRlZAorICAgICAgICB2aWEgdGhl
IHN0eWxlIHByb3BlcnR5IGlzIG5vdCBpbXBsZW1lbnRlZCBoZXJlLgorCisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpkaWRMZWF2
ZVNjcmlwdENvbnRleHQpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25SZWNvcmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMp
OgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5oOgorICAgICAgICAqIGRvbS9NdXRhdGlv
blJlY29yZC5pZGw6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6Y2xlYXJSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptdXRhdGlvbk9i
c2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVNdXRhdGlvbk9ic2Vy
dmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNl
cnZlcnNPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9i
c2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlcmVnaXN0ZXJNdXRhdGlvbk9ic2Vy
dmVyKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Ok11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlv
bk9ic2VydmVyRGF0YTo6TXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
TXV0YXRpb25PYnNlcnZlckRhdGE6On5NdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAg
ICAqIGRvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjp3YXNEZXJlZ2lzdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6YWN0
aXZlTXV0YXRpb25PYnNlcnZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlcik6CisgICAgICAgICogZG9tL1dlYktp
dE11dGF0aW9uT2JzZXJ2ZXIuaDoKKwogMjAxMS0xMC0xNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDI5MzkyOT4gUkVHUkVTU0lP
TiAocjk3NTI1KTogaUNoYXQgdHJhbnNjcmlwdCBoYXMgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIHdo
ZW4gdGhlIGNvbnZlcnNhdGlvbiBpbmNsdWRlcyBhIHdpZGUgaW1hZ2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggMGJmNDhlODM0MWQwNGI1NTUzNmZmYjYzNjc2NmM3
MDUwZTIwYzA2Ni4uODBhMjFhMGZmMGMyZDcyNWE0Yzg4N2MzYjYwZjAzYTRjMWE1ZGZlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNp
bmNsdWRlICJWOFNRTEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3RFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJWOFhQYXRoRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApAQCAtNjIwLDYgKzYyMSwxMCBAQCB2
b2lkIFY4UHJveHk6OmRpZExlYXZlU2NyaXB0Q29udGV4dCgpCiAjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgaWYgKHBhZ2UtPmdyb3VwKCkuaGFzTG9jYWxTdG9yYWdlKCkp
CiAgICAgICAgIHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCktPnVubG9jaygpOworCisjaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBXZWJDb3JlOjpXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpkZWxpdmVyQWxsTXV0YXRpb25zKCk7CisjZW5kaWYKIH0KIAogdm9pZCBWOFByb3h5
OjpyZXNldElzb2xhdGVkV29ybGRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBlODAzM2Uz
NTJkMzdhZjNiN2IwMGMyMjdlZTczMmNiNGQwYmRmNDJlLi41OGFhZGIzMzliNjExZDE0OTliMWEy
YzU5NGE1MjJjOTJjMWYzOWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC00OCw2ICs0OCw3
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5o
IgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk11dGF0
aW9uUmVjb3JkLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgpAQCAtNTksNiArNjAs
MTEgQEAKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1
ZGUgIlRleHRJdGVyYXRvci5oIgorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyNp
bmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIldl
YktpdEFuaW1hdGlvbkxpc3QuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCkBAIC02MTAsNiArNjE2LDIwIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxl
bWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0
CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5h
bWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
K3N0YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxl
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICBWZWN0b3I8V2ViS2l0TXV0
YXRpb25PYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICBlbGVtZW50LT5yZWdpc3RlcmVkTXV0YXRp
b25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRy
aWJ1dGVzKTsKKyAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpj
cmVhdGVBdHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUpOworICAgIGZvciAoVmVjdG9yPFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVy
ICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT5lbnF1ZXVlTXV0
YXRpb25SZWNvcmQobXV0YXRpb24pOworfQorI2VuZGlmCisKIHZvaWQgRWxlbWVudDo6c2V0QXR0
cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFEb2N1bWVudDo6aXNWYWxpZE5hbWUo
bmFtZSkpIHsKQEAgLTYzMCw2ICs2NTAsMTEgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogCiAg
ICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAorI2lmIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRlQ2hhbmdlZCBiZWxvdyBt
YXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGltcG9ydGFudCB0byBlbnF1
ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25S
ZWNvcmQodGhpcywgYXR0cmlidXRlTmFtZSk7CisjZW5kaWYKKwogICAgIGlmIChpc0lkQXR0cmli
dXRlTmFtZShvbGQgPyBvbGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUpKQogICAgICAgICB1cGRh
dGVJZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgdmFsdWUpOwogCkBAIC02NjMsNiAr
Njg4LDExIEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgLy8gQWxsb2NhdGUgYXR0cmli
dXRlIG1hcCBpZiBuZWNlc3NhcnkuCiAgICAgQXR0cmlidXRlKiBvbGQgPSBhdHRyaWJ1dGVzKGZh
bHNlKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRlQ2hhbmdlZCBiZWxvdyBtYXkgZGlz
cGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGltcG9ydGFudCB0byBlbnF1ZXVlIGEg
TXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQo
dGhpcywgbmFtZSk7CisjZW5kaWYKKwogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkK
ICAgICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVsbEF0b20sIHZhbHVlKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKaW5kZXggODRiMjk4YjBmNzkzOTQ2
NjdjZjQ5MjZkZTY2OWEzNGMwZDgyODJiNS4uYzM2ZWNhNmRkZTcxZGVlZTljZDJjZmQyNGM4ODRm
NThiYTdiYmZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCkBAIC0zNiw2
ICszNiw3IEBACiAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNp
bmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTY5LDE3ICs3MCwxNyBAQCBwcml2YXRl
OgogCiBjbGFzcyBBdHRyaWJ1dGVzUmVjb3JkIDogcHVibGljIE11dGF0aW9uUmVjb3JkIHsKIHB1
YmxpYzoKLSAgICBBdHRyaWJ1dGVzUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmli
dXRlTmFtZXNwYWNlKQorICAgIEF0dHJpYnV0ZXNSZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJn
ZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiAgICAgICAgIDogTXV0YXRpb25SZWNvcmQo
dGFyZ2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKQotICAgICAg
ICAsIG1fYXR0cmlidXRlTmFtZXNwYWNlKGF0dHJpYnV0ZU5hbWVzcGFjZSkKKyAgICAgICAgLCBt
X2F0dHJpYnV0ZU5hbWUobmFtZS5sb2NhbE5hbWUoKSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZU5h
bWVzcGFjZShuYW1lLm5hbWVzcGFjZVVSSSgpKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZTsg
fQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lc3BhY2UoKSB7
IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXR0cmlidXRlTmFtZXNwYWNlKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1lc3BhY2U7IH0K
ICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0T2xkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX29sZFZh
bHVlID0gdmFsdWU7IH0KIApAQCAtMTI4LDkgKzEyOSw5IEBAIFBhc3NSZWZQdHI8TXV0YXRpb25S
ZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGlsZExpc3QoUGFzc1JlZlB0cjxOb2RlPiB0
YXJnCiAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3
IENoaWxkTGlzdFJlY29yZCh0YXJnZXQsIGFkZGVkLCByZW1vdmVkLCBwcmV2aW91c1NpYmxpbmcs
IG5leHRTaWJsaW5nKSkpOwogfQogCi1QYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBNdXRhdGlv
blJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0
ZU5hbWVzcGFjZSkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpj
cmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKQogewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlvblJl
Y29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgYXR0cmlidXRlTmFtZSwgYXR0cmli
dXRlTmFtZXNwYWNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlv
blJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgbmFtZSkpKTsKIH0KIAogUGFz
c1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoYXJhY3RlckRh
dGEoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5o
CmluZGV4IGYwY2VjNjA2Njg3ZGVmYTIxNWVkZWNjNDhmMzJlNWRjZGQ1NzJlOTkuLjI1YWY0ZDNl
YTNhMTc5OWRmYTBlMzQxODZlMTg4ODE1ODIyMzYxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
blJlY29yZC5oCkBAIC00MiwxMSArNDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBOb2RlOwogY2xhc3MgTm9kZUxpc3Q7CitjbGFzcyBRdWFsaWZpZWROYW1lOwogCiBjbGFzcyBN
dXRhdGlvblJlY29yZCA6IHB1YmxpYyBSZWZDb3VudGVkPE11dGF0aW9uUmVjb3JkPiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUNoaWxkTGlz
dChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gYWRkZWQsIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IHJlbW92ZWQsIFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJs
aW5nLCBQYXNzUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+IHRhcmdl
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJpYnV0ZU5hbWVzcGFjZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNv
cmQ+IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRl
Q2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CiAKICAgICB2aXJ0dWFsIH5N
dXRhdGlvblJlY29yZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
UmVjb3JkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5pZGwKaW5kZXgg
NDZlN2EyOWJiYjg0NTI2YjQyOTBkOTA0NjY4MDAzOGNlMGNjNWIyOS4uYzE5YjQxZjIxNmU0YTUy
YzQ2ZjIxODQ3ODVjMzZmODgwMmZkMmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuaWRsCkBAIC00MSw4ICs0MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIE5vZGUgbmV4dFNpYmxpbmc7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBhdHRyaWJ1dGVOYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIGF0dHJpYnV0ZU5hbWVzcGFjZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtD
b252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBhdHRyaWJ1dGVOYW1lc3BhY2U7CiAK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBvbGRWYWx1ZTsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBv
bGRWYWx1ZTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGY1ZTQ3ZjRkODhiYjI3YjE1
MzIwOTExN2Q2NzY2YWI4MmE4MThhM2MuLjY5YTNhYTc4ZTY4OGIyNDBjN2JlMjVjZjc4MzI5ZmIy
ZDkyODdkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTEwMCw2ICsxMDAsNyBAQAogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5o
PgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCkBAIC01NDYsNiArNTQ3LDE0IEBAIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0
YSgpCiAgICAgaWYgKHRyZWVTY29wZSgpICYmIHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQogICAg
ICAgICB0cmVlU2NvcGUoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogCisjaWYgRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKKyAgICBNdXRhdGlvbk9ic2VydmVyRGF0YSogb2JzZXJ2ZXJEYXRh
ID0gbXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKyAgICBpZiAob2JzZXJ2ZXJEYXRhKSB7CisgICAg
ICAgIGZvciAoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvblZlY3Rvcjo6aXRlcmF0b3IgaXRl
ciA9IG9ic2VydmVyRGF0YS0+b2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJEYXRh
LT5vYnNlcnZlcnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIGl0ZXItPm9ic2VydmVyLT53
YXNEZXJlZ2lzdGVyZWQodGhpcyk7CisgICAgfQorI2VuZGlmCisKICAgICBOb2RlUmFyZURhdGE6
Ok5vZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKTsK
ICAgICBOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBkYXRhTWFw
LmZpbmQodGhpcyk7CiAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkpOwpAQCAtMjY3Myw2
ICsyNjgyLDYyIEBAIEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRh
KCkKICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7
CiB9CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorTXV0YXRpb25PYnNlcnZlckRh
dGEqIE5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkKK3sKKyAgICByZXR1cm4gaGFzUmFyZURh
dGEoKSA/IHJhcmVEYXRhKCktPm11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgOiAwOworfQorCitNdXRh
dGlvbk9ic2VydmVyRGF0YSogTm9kZTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKQorewor
ICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSgp
OworfQorCit2b2lkIE5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShWZWN0
b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+JiBvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlKQoreworICAgIE11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBv
YnNlcnZlckRhdGEgPSBtdXRhdGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmICghb2JzZXJ2ZXJE
YXRhIHx8IG9ic2VydmVyRGF0YS0+b2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uVmVjdG9yOjppdGVyYXRv
ciBpdGVyID0gb2JzZXJ2ZXJEYXRhLT5vYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBvYnNlcnZl
ckRhdGEtPm9ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5vcHRp
b25zICYgdHlwZSkKKyAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoaXRlci0+b2JzZXJ2ZXIu
Z2V0KCkpOworICAgIH0KK30KKworTm9kZTo6TXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgTm9k
ZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNl
cnZlcj4gb2JzZXJ2ZXIsIHVuc2lnbmVkIGNoYXIgb3B0aW9ucykKK3sKKyAgICBNdXRhdGlvbk9i
c2VydmVyRGF0YSogb2JzZXJ2ZXJEYXRhID0gZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKTsK
KyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHJlZ2lzdHJhdGlvbihvYnNlcnZlciwg
b3B0aW9ucyk7CisKKyAgICBzaXplX3QgaW5kZXggPSBvYnNlcnZlckRhdGEtPm9ic2VydmVycy5m
aW5kKHJlZ2lzdHJhdGlvbik7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAg
IG9ic2VydmVyRGF0YS0+b2JzZXJ2ZXJzLmFwcGVuZChyZWdpc3RyYXRpb24pOworICAgICAgICBy
ZXR1cm4gTXV0YXRpb25PYnNlcnZlclJlZ2lzdGVyZWQ7CisgICAgfQorCisgICAgb2JzZXJ2ZXJE
YXRhLT5vYnNlcnZlcnNbaW5kZXhdLm9wdGlvbnMgPSByZWdpc3RyYXRpb24ub3B0aW9uczsKKyAg
ICByZXR1cm4gTXV0YXRpb25SZWdpc3RyYXRpb25PcHRpb25zUmVzZXQ7Cit9CisKK3ZvaWQgTm9k
ZTo6ZGVyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyPiBvYnNlcnZlcikKK3sKKyAgICBNdXRhdGlvbk9ic2VydmVyRGF0YSogb2JzZXJ2ZXJE
YXRhID0gbXV0YXRpb25PYnNlcnZlckRhdGEoKTsKKyAgICBBU1NFUlQob2JzZXJ2ZXJEYXRhKTsK
KyAgICBpZiAoIW9ic2VydmVyRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbiByZWdpc3RyYXRpb24ob2JzZXJ2ZXIsIDApOworICAgIHNpemVf
dCBpbmRleCA9IG9ic2VydmVyRGF0YS0+b2JzZXJ2ZXJzLmZpbmQocmVnaXN0cmF0aW9uKTsKKyAg
ICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgb2JzZXJ2ZXJEYXRhLT5vYnNlcnZlcnMucmVtb3ZlKGlu
ZGV4KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCisKIHZvaWQg
Tm9kZTo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50KQogewogICAgIGlmICghaGFzUmFy
ZURhdGEoKSB8fCAhcmFyZURhdGEoKS0+ZXZlbnRUYXJnZXREYXRhKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRl
eCAxNjNjYWVlYTQwMzg1Mzc5YjEzNGY5OWRiYmU0NGU1ZWJiZTNiOGUwLi41Y2NkMDFhODBlZGE4
Mjc2MWEyOWZjMmY0MDIzZmFhYzc0MjE4ZmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdFdy
YXBwYWJsZS5oIgogI2luY2x1ZGUgIlRyZWVTaGFyZWQuaCIKKyNpbmNsdWRlICJXZWJLaXRNdXRh
dGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
TGlzdEhhc2hTZXQuaD4KIApAQCAtNTgsNiArNTksNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhU
TUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2Ns
YXNzIE11dGF0aW9uT2JzZXJ2ZXJEYXRhOwogY2xhc3MgTlNSZXNvbHZlcjsKIGNsYXNzIE5hbWVk
Tm9kZU1hcDsKIGNsYXNzIE5hbWVOb2RlTGlzdDsKQEAgLTU4NSw2ICs1ODcsMjIgQEAgcHVibGlj
OgogICAgIHZvaWQgaXRlbVR5cGVBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIG11dGF0
aW9uT2JzZXJ2ZXJEYXRhKCk7CisgICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIGVuc3VyZU11dGF0
aW9uT2JzZXJ2ZXJEYXRhKCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVy
c09mVHlwZShWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+JiwgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6TXV0YXRpb25UeXBlKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2Jz
ZXJ2ZXIgd2Fzbid0IGFscmVhZHkgcmVnaXN0ZXJlZCBvbiB0aGlzIG5vZGUuCisgICAgZW51bSBN
dXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCB7CisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RlcmVkLAorICAgICAgICBNdXRhdGlvblJlZ2lzdHJhdGlvbk9wdGlvbnNSZXNldAorICAgIH07
CisgICAgTXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgcmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVy
KFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4sIHVuc2lnbmVkIGNoYXIgb3B0aW9u
cyk7CisKKyAgICB2b2lkIGRlcmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlcj4pOworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisKIHByaXZhdGU6CiAgICAgZW51bSBOb2RlRmxhZ3MgewogICAgICAgICBJc1RleHRGbGFn
ID0gMSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCA0Y2Y1Yjk5NmQ5M2M2NDBmNmE3
ODEzMjFhYjg0Y2M3Zjk0OGYyMGIyLi5lY2QzNDY0OWI3ZjNkM2Q4YjQ0NTgyNDYzZjgwMDM4MjJh
N2M2NWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2lu
Y2x1ZGUgIlRhZ05vZGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04Niw3ICs4NywzNiBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIE5vZGVMaXN0c05vZGVEYXRhKCkgOiBtX2xhYmVsc05vZGVMaXN0Q2FjaGUoMCkg
e30KIH07Ci0gICAgCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorc3RydWN0IE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24geworICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24oUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlciwgdW5zaWdu
ZWQgY2hhciBvcHRpb25zKQorICAgICAgICA6IG9ic2VydmVyKG9ic2VydmVyKQorICAgICAgICAs
IG9wdGlvbnMob3B0aW9ucykKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG9ic2VydmVyID09IG90aGVyLm9ic2VydmVyOworICAgIH0KKworICAgIFJl
ZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlcjsKKyAgICB1bnNpZ25lZCBjaGFy
IG9wdGlvbnM7Cit9OworCit0eXBlZGVmIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uPiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uVmVjdG9yOworc3RydWN0IE11dGF0aW9u
T2JzZXJ2ZXJEYXRhIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdGlvbk9ic2VydmVy
RGF0YSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTXV0YXRp
b25PYnNlcnZlckRhdGEoKSB7IH0KKyAgICB+TXV0YXRpb25PYnNlcnZlckRhdGEoKSB7IH0KKwor
ICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb25WZWN0b3Igb2JzZXJ2ZXJzOworfTsKKyNl
bmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCiBjbGFzcyBOb2RlUmFyZURhdGEg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vZGVSYXJlRGF0YSk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOiAgICAKQEAgLTEzNiw2ICsxNjYsMTYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9ldmVudFRhcmdldERhdGEuZ2V0KCk7CiAgICAgfQogCisjaWYgRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBNdXRhdGlvbk9ic2VydmVyRGF0YSogbXV0YXRpb25P
YnNlcnZlckRhdGEoKSB7IHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLmdldCgpOyB9Cisg
ICAgTXV0YXRpb25PYnNlcnZlckRhdGEqIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9tdXRhdGlvbk9ic2VydmVyRGF0YSkKKyAgICAgICAgICAgIG1f
bXV0YXRpb25PYnNlcnZlckRhdGEgPSBhZG9wdFB0cihuZXcgTXV0YXRpb25PYnNlcnZlckRhdGEp
OworICAgICAgICByZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YS5nZXQoKTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvY3VzZWQ7
IH0KICAgICB2b2lkIHNldEZvY3VzZWQoYm9vbCBmb2N1c2VkKSB7IG1faXNGb2N1c2VkID0gZm9j
dXNlZDsgfQogCkBAIC0xNTIsNiArMTkyLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RhYklu
ZGV4V2FzU2V0RXhwbGljaXRseSA6IDE7CiAgICAgYm9vbCBtX2lzRm9jdXNlZCA6IDE7CiAgICAg
Ym9vbCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoIDogMTsKKwor
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgT3duUHRyPE11dGF0aW9uT2JzZXJ2
ZXJEYXRhPiBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRp
b25PYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZl
ci5jcHAKaW5kZXggMTQ4NzM2NGM4MTgyOTRiNjZlNGZlNjU2YzBjYTkwYmE4NDU2OTM2Ni4uZTc3
ZjAxYWNhY2ViNGE5NTVkOWNmOWQ1OWVmMjljMTJiMWM2YzA0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcApAQCAtMzQsOCArMzQsMTEgQEAKIAog
I2luY2x1ZGUgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKIAorI2luY2x1ZGUgIk11dGF0aW9u
T2JzZXJ2ZXJPcHRpb25zLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25DYWxsYmFjay5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiTXV0YXRpb25SZWNvcmQuaCIKKyNpbmNs
dWRlICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTMsMTQgKzU2LDcwIEBAIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6On5X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKCkKIHsKIH0KIAotdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyOjpvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyopCit2b2lkIFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoTm9kZSogbm9kZSwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnMqIG9wdGlvbnMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB1bnNpZ25lZCBj
aGFyIG9wdGlvbkZsYWdzID0gMDsKKworICAgIC8vIEZJWE1FOiBQdXNoIGNvbXBvc2l0aW9uIG9m
IHRoZSBvcHRpb25GbGFncyBpbnRvIHRoZSBjdXN0b20gYmluZGluZy4KKyAgICBpZiAob3B0aW9u
cy0+Y2hpbGRMaXN0KCkpCisgICAgICAgIG9wdGlvbkZsYWdzIHw9IENoaWxkTGlzdDsKKyAgICBp
ZiAob3B0aW9ucy0+YXR0cmlidXRlcygpKQorICAgICAgICBvcHRpb25GbGFncyB8PSBBdHRyaWJ1
dGVzOworICAgIGlmIChvcHRpb25zLT5jaGFyYWN0ZXJEYXRhKCkpCisgICAgICAgIG9wdGlvbkZs
YWdzIHw9IENoYXJhY3RlckRhdGE7CisgICAgLy8gRklYTUU6IE1vcmUgb3B0aW9ucyBjb21wb3Np
dGlvbiB3b3JrIG5lZWRzIHRvIGJlIGRvbmUgaGVyZS4KKworICAgIGlmIChub2RlLT5yZWdpc3Rl
ck11dGF0aW9uT2JzZXJ2ZXIodGhpcywgb3B0aW9uRmxhZ3MpID09IE5vZGU6Ok11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RlcmVkKQorICAgICAgICBtX3JlZ2lzdHJhdGlvbnMuYXBwZW5kKG5vZGUpOwog
fQogCiB2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRpc2Nvbm5lY3QoKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgZm9yIChWZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
bV9yZWdpc3RyYXRpb25zLmJlZ2luKCk7IGl0ZXIgIT0gIG1fcmVnaXN0cmF0aW9ucy5lbmQoKTsg
KytpdGVyKQorICAgICAgICAoKml0ZXIpLT5kZXJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlz
KTsKKworICAgIG1fcmVnaXN0cmF0aW9ucy5jbGVhcigpOworfQorCit2b2lkIFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6Ondhc0RlcmVnaXN0ZXJlZChOb2RlKiBub2RlKQoreworICAgIHNpemVfdCBp
bmRleCA9IG1fcmVnaXN0cmF0aW9ucy5maW5kKG5vZGUpOworICAgIEFTU0VSVChpbmRleCAhPSBu
b3RGb3VuZCk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3JlZ2lzdHJhdGlvbnMucmVtb3ZlKGluZGV4KTsKK30KKwordHlwZWRlZiBMaXN0SGFz
aFNldDxSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gPiBNdXRhdGlvbk9ic2VydmVyU2V0
OworCitzdGF0aWMgTXV0YXRpb25PYnNlcnZlclNldCYgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMo
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0YXRpb25PYnNlcnZlclNldCwgYWN0aXZl
T2JzZXJ2ZXJzLCAoKSk7CisgICAgcmV0dXJuIGFjdGl2ZU9ic2VydmVyczsKK30KKwordm9pZCBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxN
dXRhdGlvblJlY29yZD4gbXV0YXRpb24pCit7CisgICAgbV9yZWNvcmRzLmFwcGVuZChtdXRhdGlv
bik7CisgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQodGhpcyk7Cit9CisKK3ZvaWQg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucygpCit7CisgICAgd2hp
bGUgKCFhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmlzRW1wdHkoKSkgeworICAgICAgICBNdXRh
dGlvbk9ic2VydmVyU2V0OjppdGVyYXRvciBpdGVyID0gYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMo
KS5iZWdpbigpOworICAgICAgICBSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2
ZXIgPSAqaXRlcjsKKyAgICAgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5yZW1vdmUoaXRl
cik7CisgICAgICAgIG9ic2VydmVyLT5kZWxpdmVyKCk7CisgICAgfQorfQorCit2b2lkIFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXIoKQoreworICAgIE11dGF0aW9uUmVjb3JkQXJyYXkg
cmVjb3JkczsKKyAgICByZWNvcmRzLnN3YXAobV9yZWNvcmRzKTsKKyAgICBtX2NhbGxiYWNrLT5o
YW5kbGVFdmVudCgmcmVjb3JkcywgdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oCmluZGV4IDA4Nzk0
NDc1NmIyZmMyNmQxNDRiYWZhMDQzYWM3ZTgyZDUwMGIwZGIuLjQ2NzAyOWI5Njk1NGU3NDI1ZTc4
MDNmOTc2YzVhNzFhMzRmYjQ1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0
aW9uT2JzZXJ2ZXIuaApAQCAtMzYsMjggKzM2LDUyIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgTXV0YXRpb25DYWxsYmFjazsKIGNsYXNzIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zOworY2xh
c3MgTXV0YXRpb25SZWNvcmQ7CiBjbGFzcyBOb2RlOwogCiBjbGFzcyBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gewogcHVi
bGljOgorICAgIGVudW0gTXV0YXRpb25UeXBlIHsKKyAgICAgICAgQ2hpbGRMaXN0ID0gMSA8PCAw
LAorICAgICAgICBBdHRyaWJ1dGVzID0gMSA8PCAxLAorICAgICAgICBDaGFyYWN0ZXJEYXRhID0g
MSA8PCAyCisgICAgfTsKKworICAgIGVudW0gT3B0aW9uRmxhZ3MgeworICAgICAgICBTdWJ0cmVl
ID0gMSA8PCAzLAorICAgICAgICBBdHRyaWJ1dGVPbGRWYWx1ZSA9IDEgPDwgNCwKKyAgICAgICAg
Q2hhcmFjdGVyRGF0YU9sZFZhbHVlID0gMSA8PCA1LAorICAgICAgICBBdHRyaWJ1dGVGaWx0ZXIg
PSAxIDw8IDYKKyAgICB9OworCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25P
YnNlcnZlcj4gY3JlYXRlKFBhc3NSZWZQdHI8TXV0YXRpb25DYWxsYmFjaz4pOworICAgIHN0YXRp
YyB2b2lkIGRlbGl2ZXJBbGxNdXRhdGlvbnMoKTsKIAogICAgIH5XZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKCk7CiAKICAgICB2b2lkIG9ic2VydmUoTm9kZSosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
Kik7CiAgICAgdm9pZCBkaXNjb25uZWN0KCk7CisgICAgdm9pZCB3YXNEZXJlZ2lzdGVyZWQoTm9k
ZSopOworICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25S
ZWNvcmQ+KTsKIAogcHJpdmF0ZToKICAgICBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQ
dHI8TXV0YXRpb25DYWxsYmFjaz4pOwogCisgICAgdm9pZCBkZWxpdmVyKCk7CisKICAgICBSZWZQ
dHI8TXV0YXRpb25DYWxsYmFjaz4gbV9jYWxsYmFjazsKKyAgICBWZWN0b3I8UmVmUHRyPE11dGF0
aW9uUmVjb3JkPiA+IG1fcmVjb3JkczsKKyAgICBWZWN0b3I8Tm9kZSo+IG1fcmVnaXN0cmF0aW9u
czsgLy8gTm9kZVJhcmVEYXRhIGhhcyBhIFJlZlB0ciB0byB0aGlzLCBzbyB1c2UgYSB3ZWFrIHBv
aW50ZXIgdG8gYXZvaWQgYSBjeWNsZS4KIH07CiAKK3ZvaWQgZW5zdXJlTXV0YXRpb25RdWV1ZWQo
UGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiAsIFBhc3NSZWZQdHI8TXV0YXRpb25S
ZWNvcmQ+KTsKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBmODg0OGVhYWJlMGViYjZjZDRhZWM0MjJkNTU0OWNhZjhkM2E1ZjBmLi4zZTMyNmQ3MmRh
NWZjNjM1N2E4MDk1OWQxZGIzYzdjMjVjZDA3YzQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTEtMTAtMTMgIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
Lm9ic2VydmUgZm9yIGF0dHJpYnV0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY4OTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVz
Lmh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTE3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMjkzOTI5PiBSRUdSRVNTSU9OIChyOTc1
MjUpOiBpQ2hhdCB0cmFuc2NyaXB0IGhhcyBob3Jpem9udGFsIHNjcm9sbCBiYXIgd2hlbiB0aGUg
Y29udmVyc2F0aW9uIGluY2x1ZGVzIGEgd2lkZSBpbWFnZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM4YjJmNjgzZjljZmI3MWFlOTQ4OTY4NDAxMTI5ZjI5NWQyY2RjMjYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw2NCBAQAorVGVzdCB0aGUgY29uc3RydWN0b3Igb2YgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVz
dGluZyBiYXNpYyBhc3BlY3RzIG9mIGF0dHJpYnV0ZSBvYnNlcnZhdGlvbi4KKy4uLmNhbiBhdHRy
aWJ1dGUgY2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBp
cyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlv
bnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRl
TmFtZXNwYWNlIGlzIG51bGwKKy4uLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSBzaG91bGQgcHJldmVu
dCBmdXJ0aGVyIGRlbGl2ZXJ5IG9mIG11dGF0aW9ucy4KK1BBU1MgbXV0YXRpb25zIGlzIG51bGwK
Ky4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25uZWN0IHdvcmtzIHdpdGggdGhlIHNhbWUgb2Jz
ZXJ2ZXIuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlw
ZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZv
byIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11
dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmli
dXRlTmFtZSBpcyAiYmFyIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlz
IG51bGwKKworVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImF0dHJp
YnV0ZXMiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGF0dHJpYnV0ZSBjaGFuZ2Vz
LgorUEFTUyBtdXRhdGlvbnMgaXMgbnVsbAorCitUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRo
ZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVz
ZXR0aW5nIHRoZSBvcHRpb25zLgorUEFTUyBjYWxscyBpcyAxCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zIGlzIG51bGwK
KworVGVzdGluZyB0aGF0IG11bHRpcGxlIG9ic2VydmVycyBjYW4gYmUgcmVnaXN0ZXJlZCB0byBh
IGdpdmVuIG5vZGUgYW5kIGJvdGggcmVjZWl2ZSBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucy5s
ZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1Mg
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zMi5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11
dGF0aW9uczJbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorCitUZXN0aW5nIHRoYXQgImF0dHJp
YnV0ZU5hbWVzcGFjZSIgdmFsdWUgaXMgZGVsaXZlcmVkIHByb3Blcmx5LgorUEFTUyBtdXRhdGlv
bnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQ
QVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1sw
XS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgImh0dHA6Ly93d3cuZm9vLmNvbS9iYXIiCisKK1Rlc3Rp
bmcgdGhhdCBtb2RpZmljYXRpb25zIHRvIG5vZGUgcHJvcGVydGllcyB3aGljaCBkZWxlZ2F0ZSB0
byBhdHRyaWJ1dGUgc3RvcmFnZSBkZWxpdmVyIG11dGF0aW9ucy4KK1BBU1MgbXV0YXRpb25zLmxl
bmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBt
dXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAic3JjIgorUEFTUyBtdXRhdGlvbnNbMV0udHlw
ZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImhy
ZWYiCisKK1Rlc3RpbmcgbXV0YXRpb24gcmVjb3JkcyBhcmUgZW5xdWV1ZWQgZm9yIGF0dHJpYnV0
ZXMgYmVmb3JlIERPTVN1YnRyZWVNb2RpZmllZCBpcyBkaXNwYXRjaGVkLgorUEFTUyBtdXRhdGlv
bnMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQ
QVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1sx
XS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBp
cyAiYmF6IgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJp
YnV0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNThlYWI4MThlODgxNzZhZGZmM2JiNWJhMjdlYzgwNWQ1ZTlmZWY1
YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1h
dHRyaWJ1dGVzLmh0bWwKQEAgLTAsMCArMSwzMjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHRpdGxlPjwvdGl0bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPWRlc2NyaXB0aW9uPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdD4KKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwordmFy
IG11dGF0aW9uczsKK3ZhciBtdXRhdGlvbnMyOwordmFyIGNhbGxzOworCitmdW5jdGlvbiB0ZXN0
QmFzaWMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlv
biBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBhdHRy
aWJ1dGUgb2JzZXJ2YXRpb24uJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAg
ICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVy
ID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAg
bXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShk
aXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAg
ZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNr
RGlzY29ubmVjdEFuZE11dGF0ZSwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tEaXNj
b25uZWN0QW5kTXV0YXRlKCkgeworICAgICAgICBkZWJ1ZygnLi4uY2FuIGF0dHJpYnV0ZSBjaGFu
Z2VzIGJlIG9ic2VydmVkIGF0IGFsbCcpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMu
bGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJh
dHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVO
YW1lc3BhY2UnLCAnbnVsbCcpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAg
IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywg
J2JheicpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVs
dGlwbGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0
YXRlTXVsdGlwbGUoKSB7CisgICAgICAgIGRlYnVnKCcuLi5vYnNlcnZlci5kaXNjb25uZWN0KCkg
c2hvdWxkIHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuJyk7CisKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2Vy
dmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUo
J2ZvbycsICdiYXQnKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYmFyJywgJ2ZvbycpOwor
ICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNo
KCkgeworICAgICAgICBkZWJ1ZygnLi4ucmUtb2JzZXJ2aW5nIGFmdGVyIGRpc2Nvbm5lY3Qgd29y
a3Mgd2l0aCB0aGUgc2FtZSBvYnNlcnZlci4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmli
dXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50
eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWUnLCAnImJhciInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5h
dHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0
KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisK
KyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0V3JvbmdUeXBlKCkgeworICAgIHZhciBk
aXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAg
IGRlYnVnKCdUZXN0aW5nIHRoYXQgb2JzZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiYXR0cmli
dXRlcyIgZG9lcyBub3QgcmVzdWx0IGluIGhlYXJpbmcgYWJvdXQgYXR0cmlidXRlIGNoYW5nZXMu
Jyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0
cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdm
b28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVs
bCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsK
KyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5j
dGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24oKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIg
b2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rp
bmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2Vydmlu
ZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7CisgICAgCisJCWNh
bGxzID0gMDsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsK
KwkJCWNhbGxzKys7CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2
LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIG9i
c2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIGRpdi5z
ZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja0Rpc2Nv
bm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGlzY29ubmVj
dEFuZE11dGF0ZSgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ2NhbGxzJywgJzEnKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBtdXRhdGlvbnMgPSBu
dWxsOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBj
aGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBj
aGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXon
KTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAg
ICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBy
dW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RN
dWx0aXBsZU9ic2VydmVycygpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAg
ICB2YXIgb2JzZXJ2ZXIyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVn
KCdUZXN0aW5nIHRoYXQgbXVsdGlwbGUgb2JzZXJ2ZXJzIGNhbiBiZSByZWdpc3RlcmVkIHRvIGEg
Z2l2ZW4gbm9kZSBhbmQgYm90aCByZWNlaXZlIG11dGF0aW9ucy4nKTsKKyAgICAgICAgbXV0YXRp
b25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24o
bSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisgICAgICAgIG9i
c2VydmVyMiA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAg
ICAgICAgIG11dGF0aW9uczIgPSBtOworICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2Jz
ZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIyLm9ic2Vy
dmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUo
J2ZvbycsICdiYXInKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5n
dGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJp
YnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScs
ICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMlswXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMlswXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7
CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRpc2Nv
bm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAg
IH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROYW1lc3BhY2VVUkkoKSB7Cisg
ICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsK
KyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCAiYXR0cmlidXRlTmFtZXNwYWNlIiB2YWx1ZSBp
cyBkZWxpdmVyZWQgcHJvcGVybHkuJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAg
ICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZl
ciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg
IG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
ZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2
LnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LmZvby5jb20vYmFyJywgJ2ZvbycsICdiYXInKTsK
KyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOyAgICAKKyAgICB9CisKKyAgICBmdW5jdGlv
biBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnImh0
dHA6Ly93d3cuZm9vLmNvbS9iYXIiJyk7ICAgICAgICAKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29u
bmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAg
fQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdFByb3BlcnR5QWNjZXNzKCkgewor
ICAgIHZhciBpbWcsIGE7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBub2RlIHBy
b3BlcnRpZXMgd2hpY2ggZGVsZWdhdGUgdG8gYXR0cmlidXRlIHN0b3JhZ2UgZGVsaXZlciBtdXRh
dGlvbnMuJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGltZyA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOworICAgICAgICBhID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnYScpOworCisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShpbWcsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsK
KyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShhLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisKKyAg
ICAgICAgaW1nLnNyYyA9ICdiYXoucG5nJzsKKyAgICAgICAgYS5ocmVmID0gJ2Zvby5odG1sJzsK
KworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcyJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJzcmMiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lJywgJyJocmVmIicpOwor
ICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAg
ICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0
ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZpZWQoKSB7CisgICAgdmFyIGRpdiwgZGl2Miwg
c3ViRGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgbGlzdGVuZXI7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgbXV0YXRpb24gcmVjb3JkcyBh
cmUgZW5xdWV1ZWQgZm9yIGF0dHJpYnV0ZXMgYmVmb3JlIERPTVN1YnRyZWVNb2RpZmllZCBpcyBk
aXNwYXRjaGVkLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykp
OworICAgICAgICBkaXYyID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAgICAgc3ViRGl2ID0gZGl2LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9u
cyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIGxpc3RlbmVyID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICAgICAgZGl2Mi5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXQnKTsKKyAgICAgICAgfQor
CisgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCBsaXN0
ZW5lcik7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoc3ViRGl2LCB7IGF0dHJpYnV0ZXM6IHRy
dWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2MiwgeyBhdHRyaWJ1dGVzOiB0cnVl
IH0pOworCisgICAgICAgIHN1YkRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKworICAg
ICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNo
KCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcyJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXoiJyk7CisgICAgICAg
IGRpdi5yZW1vdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICAgICAgZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZChkaXYpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAg
ICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFy
dCgpOworfQordmFyIHRlc3RzID0gW3Rlc3RCYXNpYywgdGVzdFdyb25nVHlwZSwgdGVzdE11bHRp
cGxlUmVnaXN0cmF0aW9uLCB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMsIHRlc3ROYW1lc3BhY2VVUkks
IHRlc3RQcm9wZXJ0eUFjY2VzcywgdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkXTsK
K3ZhciB0ZXN0SW5kZXggPSAwOworIAorZnVuY3Rpb24gcnVuTmV4dFRlc3QoKSB7CisgICAgaWYg
KHRlc3RJbmRleCA8IHRlc3RzLmxlbmd0aCkKKyAgICAgICAgdGVzdHNbdGVzdEluZGV4KytdKCk7
CisgICAgZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZGVzY3JpcHRpb24oJ1Rl
c3QgdGhlIGNvbnN0cnVjdG9yIG9mIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXInKTsKKworaWYgKCF3
aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcikKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3Qg
cmVxdWlyZXMgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUyknKTsKK2Vsc2UKKyAgICBydW5OZXh0
VGVzdCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111326</attachid>
            <date>2011-10-17 14:57:07 -0700</date>
            <delta_ts>2011-10-17 15:22:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68956-20111017145706.patch</filename>
            <type>text/plain</type>
            <size>36572</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2MzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiYWZkNGM5NDg0N2NkZmYw
ZmFhNjYwYjQxNDczNmIwNDZjODQ4MzY0Li5jMTQ2OGEzM2RiMjQzNmYxMjIwNWZmNDRlY2I2MzU5
YWE5YjkwMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMTAtMTMgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGF0
dHJpYnV0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY4OTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdDogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAorCisgICAgICAgIFRo
aXMgYWRkcyBhbiBpbml0aWFsIGltcGxlbWVudGF0aW9uIGZvciByZWdpc3RlcmluZyBtdXRhdGlv
biBvYnNlcnZlcnMgb24gbm9kZXMsCisgICAgICAgIGRlbGl2ZXJpbmcgbXV0YXRpb24gcmVjb3Jk
cyBhdCB0aGUgZW5kIG9mIHRoZSBvdXRlci1tb3N0IHNjcmlwdCBpbnZva2F0aW9uIGFuZAorICAg
ICAgICBvYnNlcnZpbmcgbXV0YXRpb25zIHRvIGVsZW1lbnQgYXR0cmlidXRlcy4KKworICAgICAg
ICBOb3RlIHRoYXQgdGhlIG91dGVyLW1vc3Qgc2NyaXB0IGludm9rYXRpb24gb25seSB3b3JrcyBp
biBWOC4KKworICAgICAgICBOb3RlIGFsc28gdGhhdCBzdXBwb3J0IGZvciBvYnNlcnZpbmcgY2hh
bmdlcyB0byB0aGUgc3R5bGUgYXR0cmlidXRlIHdoZW4gdXBkYXRlZAorICAgICAgICB2aWEgdGhl
IHN0eWxlIHByb3BlcnR5IGlzIG5vdCBpbXBsZW1lbnRlZCBoZXJlLgorCisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpkaWRMZWF2
ZVNjcmlwdENvbnRleHQpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25SZWNvcmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMp
OgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5oOgorICAgICAgICAqIGRvbS9NdXRhdGlv
blJlY29yZC5pZGw6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6Y2xlYXJSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptdXRhdGlvbk9i
c2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVNdXRhdGlvbk9ic2Vy
dmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNl
cnZlcnNPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9i
c2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlcmVnaXN0ZXJNdXRhdGlvbk9ic2Vy
dmVyKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Ok11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlv
bk9ic2VydmVyRGF0YTo6TXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
TXV0YXRpb25PYnNlcnZlckRhdGE6On5NdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAg
ICAqIGRvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjp3YXNEZXJlZ2lzdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6YWN0
aXZlTXV0YXRpb25PYnNlcnZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlcik6CisgICAgICAgICogZG9tL1dlYktp
dE11dGF0aW9uT2JzZXJ2ZXIuaDoKKwogMjAxMS0xMC0xNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDI5MzkyOT4gUkVHUkVTU0lP
TiAocjk3NTI1KTogaUNoYXQgdHJhbnNjcmlwdCBoYXMgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIHdo
ZW4gdGhlIGNvbnZlcnNhdGlvbiBpbmNsdWRlcyBhIHdpZGUgaW1hZ2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NzgyMTgyZDhh
NzJhOTA4YTQwNDA0OTNlZWYyMWY2NjY5MDAwNDQyLi44MTRiZTRjYjFiNTM5NWY5NGNlMTQzZTg4
N2JiMjhmM2IyMDA5ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NDY0LDcgKzU0NjQsNyBAQAogCQlDNkYwOEZDQTE0MzEw
MDBEMDA2ODU4NDkgLyogSlNNdXRhdGlvblJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZGMDhGQzgxNDMxMDAwRDAwNjg1ODQ5IC8qIEpTTXV0
YXRpb25SZWNvcmQuaCAqLzsgfTsKIAkJQzZGMDkwMEExNDMyN0I2MTAwNjg1ODQ5IC8qIE11dGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM2RjA5MDAxMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggKi87IH07
CiAJCUM2RjA5MDBFMTQzMjdCNjEwMDY4NTg0OSAvKiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RjA5MDA1
MTQzMjdCNjEwMDY4NTg0OSAvKiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCAqLzsgfTsKLQkJ
QzZGMDkwMEYxNDMyN0I2MTAwNjg1ODQ5IC8qIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RjA5MDA2MTQzMjdC
NjEwMDY4NTg0OSAvKiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmggKi87IH07CisJCUM2RjA5MDBG
MTQzMjdCNjEwMDY4NTg0OSAvKiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkYwOTAwNjE0MzI3QjYxMDA2ODU4
NDkgLyogV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM2RjA5MDExMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRh
dGlvbk9ic2VydmVyT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzZGMDkwMDgxNDMyN0I2MTAwNjg1ODQ5IC8qIE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zLmggKi87IH07CiAJCUM2RjA5MDI4MTQzMjdENEYwMDY4NTg0OSAvKiBKU011dGF0aW9u
Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzZGMDkwMjAxNDMyN0Q0RjAwNjg1ODQ5IC8qIEpTTXV0YXRpb25DYWxsYmFjay5jcHAgKi87
IH07CiAJCUM2RjA5MDI5MTQzMjdENEYwMDY4NTg0OSAvKiBKU011dGF0aW9uQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RjA5MDIxMTQz
MjdENEYwMDY4NTg0OSAvKiBKU011dGF0aW9uQ2FsbGJhY2suaCAqLzsgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggMGJmNDhlODM0MWQwNGI1NTUzNmZmYjYzNjc2
NmM3MDUwZTIwYzA2Ni4uODBhMjFhMGZmMGMyZDcyNWE0Yzg4N2MzYjYwZjAzYTRjMWE1ZGZlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTY1LDYgKzY1LDcgQEAK
ICNpbmNsdWRlICJWOFNRTEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3RF
eGNlcHRpb24uaCIKICNpbmNsdWRlICJWOFhQYXRoRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApAQCAtNjIwLDYgKzYyMSwxMCBA
QCB2b2lkIFY4UHJveHk6OmRpZExlYXZlU2NyaXB0Q29udGV4dCgpCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAgICAgaWYgKHBhZ2UtPmdyb3VwKCkuaGFzTG9jYWxTdG9yYWdl
KCkpCiAgICAgICAgIHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCktPnVubG9jaygpOworCisj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBXZWJDb3JlOjpXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpkZWxpdmVyQWxsTXV0YXRpb25zKCk7CisjZW5kaWYKIH0KIAogdm9pZCBWOFBy
b3h5OjpyZXNldElzb2xhdGVkV29ybGRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBlODAz
M2UzNTJkMzdhZjNiN2IwMGMyMjdlZTczMmNiNGQwYmRmNDJlLi5kZGRlNTE5MDRjOTEwZjBiNGJh
MTE5NjYyZDY4ZTZlZGRhNmEyNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC00OCw2ICs0
OCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9t
cy5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk11
dGF0aW9uUmVjb3JkLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgpAQCAtNTksNiAr
NjAsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5o
IgogI2luY2x1ZGUgIldlYktpdEFuaW1hdGlvbkxpc3QuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5o
IgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCkBAIC02MTAsNiArNjEyLDIwIEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IFN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKK3N0YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNv
cmQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICBW
ZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICBlbGVtZW50LT5y
ZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpBdHRyaWJ1dGVzKTsKKyAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11
dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUpOworICAgIGZvciAo
VmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVy
cy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKQorICAgICAgICAoKml0
ZXIpLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOworfQorI2VuZGlmCisKIHZvaWQg
RWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFEb2N1bWVu
dDo6aXNWYWxpZE5hbWUobmFtZSkpIHsKQEAgLTYzMCw2ICs2NDYsMTEgQEAgdm9pZCBFbGVtZW50
OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlLAogCiAgICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAorI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRl
Q2hhbmdlZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGlt
cG9ydGFudCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRy
aWJ1dGVzTXV0YXRpb25SZWNvcmQodGhpcywgYXR0cmlidXRlTmFtZSk7CisjZW5kaWYKKwogICAg
IGlmIChpc0lkQXR0cmlidXRlTmFtZShvbGQgPyBvbGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUp
KQogICAgICAgICB1cGRhdGVJZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgdmFsdWUp
OwogCkBAIC02NjMsNiArNjg0LDExIEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgLy8g
QWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCiAgICAgQXR0cmlidXRlKiBvbGQg
PSBhdHRyaWJ1dGVzKGZhbHNlKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIAorI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRlQ2hhbmdl
ZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGltcG9ydGFu
dCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRyaWJ1dGVz
TXV0YXRpb25SZWNvcmQodGhpcywgbmFtZSk7CisjZW5kaWYKKwogICAgIGlmIChpc0lkQXR0cmli
dXRlTmFtZShuYW1lKSkKICAgICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVs
bEF0b20sIHZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
UmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKaW5kZXgg
ODRiMjk4YjBmNzkzOTQ2NjdjZjQ5MjZkZTY2OWEzNGMwZDgyODJiNS4uYzM2ZWNhNmRkZTcxZGVl
ZTljZDJjZmQyNGM4ODRmNThiYTdiYmZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTY5LDE3ICs3
MCwxNyBAQCBwcml2YXRlOgogCiBjbGFzcyBBdHRyaWJ1dGVzUmVjb3JkIDogcHVibGljIE11dGF0
aW9uUmVjb3JkIHsKIHB1YmxpYzoKLSAgICBBdHRyaWJ1dGVzUmVjb3JkKFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKQorICAgIEF0dHJpYnV0ZXNSZWNvcmQoUGFzc1Jl
ZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiAgICAgICAgIDog
TXV0YXRpb25SZWNvcmQodGFyZ2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZShhdHRyaWJ1
dGVOYW1lKQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZXNwYWNlKGF0dHJpYnV0ZU5hbWVzcGFj
ZSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZU5hbWUobmFtZS5sb2NhbE5hbWUoKSkKKyAgICAgICAg
LCBtX2F0dHJpYnV0ZU5hbWVzcGFjZShuYW1lLm5hbWVzcGFjZVVSSSgpKQogICAgIHsKICAgICB9
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIG1f
YXR0cmlidXRlTmFtZTsgfQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVOYW1lc3BhY2UoKSB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKCkgeyByZXR1cm4gbV9hdHRyaWJ1
dGVOYW1lc3BhY2U7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1f
b2xkVmFsdWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T2xkVmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkgeyBtX29sZFZhbHVlID0gdmFsdWU7IH0KIApAQCAtMTI4LDkgKzEyOSw5IEBAIFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGlsZExpc3QoUGFz
c1JlZlB0cjxOb2RlPiB0YXJnCiAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0
aW9uUmVjb3JkKj4obmV3IENoaWxkTGlzdFJlY29yZCh0YXJnZXQsIGFkZGVkLCByZW1vdmVkLCBw
cmV2aW91c1NpYmxpbmcsIG5leHRTaWJsaW5nKSkpOwogfQogCi1QYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+
IHRhcmdldCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11
dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNf
Y2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgYXR0cmli
dXRlTmFtZSwgYXR0cmlidXRlTmFtZXNwYWNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0
aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgbmFt
ZSkpKTsKIH0KIAogUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNy
ZWF0ZUNoYXJhY3RlckRhdGEoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5oCmluZGV4IGYwY2VjNjA2Njg3ZGVmYTIxNWVkZWNjNDhmMzJlNWRjZGQ1
NzJlOTkuLjI1YWY0ZDNlYTNhMTc5OWRmYTBlMzQxODZlMTg4ODE1ODIyMzYxNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCkBAIC00MiwxMSArNDIsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBOb2RlOwogY2xhc3MgTm9kZUxpc3Q7CitjbGFzcyBRdWFsaWZpZWRO
YW1lOwogCiBjbGFzcyBNdXRhdGlvblJlY29yZCA6IHB1YmxpYyBSZWZDb3VudGVkPE11dGF0aW9u
UmVjb3JkPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+
IGNyZWF0ZUNoaWxkTGlzdChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gYWRkZWQsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHJlbW92ZWQsIFBhc3NSZWZQdHI8Tm9k
ZT4gcHJldmlvdXNTaWJsaW5nLCBQYXNzUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQXR0cmlidXRlcyhQYXNzUmVm
UHRyPE5vZGU+IHRhcmdldCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJn
ZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlv
blJlY29yZD4gY3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CiAK
ICAgICB2aXJ0dWFsIH5NdXRhdGlvblJlY29yZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uUmVjb3JkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5pZGwKaW5kZXggNDZlN2EyOWJiYjg0NTI2YjQyOTBkOTA0NjY4MDAzOGNlMGNjNWIyOS4u
YzE5YjQxZjIxNmU0YTUyYzQ2ZjIxODQ3ODVjMzZmODgwMmZkMmI1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuaWRsCkBAIC00MSw4ICs0MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgbmV4dFNpYmxpbmc7CiAKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBhdHRyaWJ1dGVOYW1lOwotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGF0dHJpYnV0ZU5hbWVzcGFjZTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBhdHRyaWJ1
dGVOYW1lc3BhY2U7CiAKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBvbGRW
YWx1ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51
bGxdIERPTVN0cmluZyBvbGRWYWx1ZTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGY1
ZTQ3ZjRkODhiYjI3YjE1MzIwOTExN2Q2NzY2YWI4MmE4MThhM2MuLjg0MjgyNGVhZTY2MDAwNGFm
ZmVjZWNiNWRjNWI5YmNkYzBhMmFhNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTEwMCw2ICsxMDAs
NyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWRMZWFrQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC01NDYsNiArNTQ3LDE0IEBAIHZvaWQgTm9k
ZTo6Y2xlYXJSYXJlRGF0YSgpCiAgICAgaWYgKHRyZWVTY29wZSgpICYmIHJhcmVEYXRhKCktPm5v
ZGVMaXN0cygpKQogICAgICAgICB0cmVlU2NvcGUoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwog
CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBWZWN0b3I8TXV0YXRpb25PYnNl
cnZlckVudHJ5Piogb2JzZXJ2ZXJFbnRpZXMgPSBtdXRhdGlvbk9ic2VydmVyRW50cmllcygpOwor
ICAgIGlmIChvYnNlcnZlckVudGllcykgeworICAgICAgICBmb3IgKFZlY3RvcjxNdXRhdGlvbk9i
c2VydmVyRW50cnk+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJFbnRpZXMtPmJlZ2luKCk7IGl0
ZXIgIT0gb2JzZXJ2ZXJFbnRpZXMtPmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBpdGVyLT5v
YnNlcnZlci0+d2FzVW5yZWdpc3RlcmVkKHRoaXMpOworICAgIH0KKyNlbmRpZgorCiAgICAgTm9k
ZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJhcmVE
YXRhTWFwKCk7CiAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0
ID0gZGF0YU1hcC5maW5kKHRoaXMpOwogICAgIEFTU0VSVChpdCAhPSBkYXRhTWFwLmVuZCgpKTsK
QEAgLTI2NzMsNiArMjY4Miw2MiBAQCBFdmVudFRhcmdldERhdGEqIE5vZGU6OmVuc3VyZUV2ZW50
VGFyZ2V0RGF0YSgpCiAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpOwogfQogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK1ZlY3RvcjxN
dXRhdGlvbk9ic2VydmVyRW50cnk+KiBOb2RlOjptdXRhdGlvbk9ic2VydmVyRW50cmllcygpCit7
CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVy
RW50cmllcygpIDogMDsKK30KKworVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIE5vZGU6
OmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCkKK3sKKyAgICByZXR1cm4gZW5zdXJlUmFy
ZURhdGEoKS0+ZW5zdXJlTXV0YXRpb25PYnNlcnZlckVudHJpZXMoKTsKK30KKwordm9pZCBOb2Rl
OjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXIqPiYgb2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5
cGUgdHlwZSkKK3sKKyAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5Piogb2JzZXJ2ZXJF
bnRyaWVzID0gbXV0YXRpb25PYnNlcnZlckVudHJpZXMoKTsKKyAgICBpZiAoIW9ic2VydmVyRW50
cmllcyB8fCBvYnNlcnZlckVudHJpZXMtPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm9yIChWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG9i
c2VydmVyRW50cmllcy0+YmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlckVudHJpZXMtPmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPm1hdGNoZXModHlwZSkpCisgICAgICAgICAgICBv
YnNlcnZlcnMuYXBwZW5kKGl0ZXItPm9ic2VydmVyLmdldCgpKTsKKyAgICB9Cit9CisKK05vZGU6
Ok11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IE5vZGU6OnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZl
cihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCB1bnNpZ25lZCBj
aGFyIG9wdGlvbnMpCit7CisgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIG9ic2Vy
dmVyRW50cmllcyA9IGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCk7CisgICAgTXV0YXRp
b25PYnNlcnZlckVudHJ5IGVudHJ5KG9ic2VydmVyLCBvcHRpb25zKTsKKworICAgIHNpemVfdCBp
bmRleCA9IG9ic2VydmVyRW50cmllcy0+ZmluZChlbnRyeSk7CisgICAgaWYgKGluZGV4ID09IG5v
dEZvdW5kKSB7CisgICAgICAgIG9ic2VydmVyRW50cmllcy0+YXBwZW5kKGVudHJ5KTsKKyAgICAg
ICAgcmV0dXJuIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RlcmVkOworICAgIH0KKworICAgICgqb2Jz
ZXJ2ZXJFbnRyaWVzKVtpbmRleF0ub3B0aW9ucyA9IGVudHJ5Lm9wdGlvbnM7CisgICAgcmV0dXJu
IE11dGF0aW9uUmVnaXN0cmF0aW9uT3B0aW9uc1Jlc2V0OworfQorCit2b2lkIE5vZGU6OnVucmVn
aXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4g
b2JzZXJ2ZXIpCit7CisgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIG9ic2VydmVy
RW50cmllcyA9IG11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCk7CisgICAgQVNTRVJUKG9ic2VydmVy
RW50cmllcyk7CisgICAgaWYgKCFvYnNlcnZlckVudHJpZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE11dGF0aW9uT2JzZXJ2ZXJFbnRyeSBlbnRyeShvYnNlcnZlciwgMCk7CisgICAgc2l6ZV90
IGluZGV4ID0gb2JzZXJ2ZXJFbnRyaWVzLT5maW5kKGVudHJ5KTsKKyAgICBBU1NFUlQoaW5kZXgg
IT0gbm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgb2JzZXJ2ZXJFbnRyaWVzLT5yZW1vdmUoaW5kZXgpOworfQorI2VuZGlmIC8vIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisKKwogdm9pZCBOb2RlOjpoYW5kbGVMb2NhbEV2ZW50
cyhFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpIHx8ICFyYXJlRGF0YSgp
LT5ldmVudFRhcmdldERhdGEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDE2M2NhZWVhNDAzODUzNzliMTM0
Zjk5ZGJiZTQ0ZTVlYmJlM2I4ZTAuLmVkYzAwZTFiNjdkMWZlOTA0MTkyOTY4YThiODA3YjYyNjdm
NDI2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0
eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSAi
VHJlZVNoYXJlZC5oIgorI2luY2x1ZGUgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCkBAIC01
OCw2ICs1OSw3IEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNz
IEludFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTXV0YXRpb25PYnNlcnZlckVu
dHJ5OwogY2xhc3MgTlNSZXNvbHZlcjsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5hbWVO
b2RlTGlzdDsKQEAgLTU4NSw2ICs1ODcsMjIgQEAgcHVibGljOgogICAgIHZvaWQgaXRlbVR5cGVB
dHRyaWJ1dGVDaGFuZ2VkKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIG11dGF0aW9uT2JzZXJ2ZXJF
bnRyaWVzKCk7CisgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIGVuc3VyZU11dGF0
aW9uT2JzZXJ2ZXJFbnRyaWVzKCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyZWRNdXRhdGlvbk9ic2Vy
dmVyc09mVHlwZShWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+JiwgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6TXV0YXRpb25UeXBlKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
b2JzZXJ2ZXIgd2Fzbid0IGFscmVhZHkgcmVnaXN0ZXJlZCBvbiB0aGlzIG5vZGUuCisgICAgZW51
bSBNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCB7CisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RlcmVkLAorICAgICAgICBNdXRhdGlvblJlZ2lzdHJhdGlvbk9wdGlvbnNSZXNldAorICAg
IH07CisgICAgTXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgcmVnaXN0ZXJNdXRhdGlvbk9ic2Vy
dmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4sIHVuc2lnbmVkIGNoYXIgb3B0
aW9ucyk7CisKKyAgICB2b2lkIHVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8
V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4pOworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCisKIHByaXZhdGU6CiAgICAgZW51bSBOb2RlRmxhZ3MgewogICAgICAgICBJc1RleHRG
bGFnID0gMSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCA0Y2Y1Yjk5NmQ5M2M2NDBm
NmE3ODEzMjFhYjg0Y2M3Zjk0OGYyMGIyLi42OTA4ZDgxY2FhOWE2ZDE2Njg2NDVlNTc5ZTg1OWZi
ODJjMGNjMjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgog
I2luY2x1ZGUgIlRhZ05vZGVMaXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZl
ci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04Niw3ICs4NywzMSBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIE5vZGVMaXN0c05vZGVEYXRhKCkgOiBtX2xhYmVsc05vZGVMaXN0Q2FjaGUo
MCkge30KIH07Ci0gICAgCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorc3RydWN0
IE11dGF0aW9uT2JzZXJ2ZXJFbnRyeSB7CisgICAgTXV0YXRpb25PYnNlcnZlckVudHJ5KFBhc3NS
ZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIHVuc2lnbmVkIGNoYXIgb3B0
aW9ucykKKyAgICAgICAgOiBvYnNlcnZlcihvYnNlcnZlcikKKyAgICAgICAgLCBvcHRpb25zKG9w
dGlvbnMpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNdXRhdGlv
bk9ic2VydmVyRW50cnkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9ic2Vy
dmVyID09IG90aGVyLm9ic2VydmVyOworICAgIH0KKworICAgIGJvb2wgbWF0Y2hlcyh1bnNpZ25l
ZCBjaGFyIG9wdGlvbnMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy0+b3B0aW9u
cyAmIG9wdGlvbnM7CisgICAgfQorCisgICAgUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+
IG9ic2VydmVyOworICAgIHVuc2lnbmVkIGNoYXIgb3B0aW9uczsKK307CisKKyNlbmRpZiAvLyBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCiBjbGFzcyBOb2RlUmFyZURhdGEgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE5vZGVSYXJlRGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOiAgICAKQEAgLTEzNiw2ICsxNjEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9ldmVudFRhcmdldERhdGEuZ2V0KCk7CiAgICAgfQogCisjaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKKyAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5PiogbXV0YXRpb25P
YnNlcnZlckVudHJpZXMoKSB7IHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJzLmdldCgpOyB9Cisg
ICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJF
bnRyaWVzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9tdXRhdGlvbk9ic2VydmVycykKKyAgICAg
ICAgICAgIG1fbXV0YXRpb25PYnNlcnZlcnMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPE11dGF0aW9u
T2JzZXJ2ZXJFbnRyeT4pOworICAgICAgICByZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVycy5nZXQo
KTsKKyAgICB9CisjZW5kaWYKKwogICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3QgeyByZXR1cm4g
bV9pc0ZvY3VzZWQ7IH0KICAgICB2b2lkIHNldEZvY3VzZWQoYm9vbCBmb2N1c2VkKSB7IG1faXNG
b2N1c2VkID0gZm9jdXNlZDsgfQogCkBAIC0xNTIsNiArMTg3LDEwIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseSA6IDE7CiAgICAgYm9vbCBtX2lzRm9jdXNl
ZCA6IDE7CiAgICAgYm9vbCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0
YWNoIDogMTsKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgT3duUHRyPFZl
Y3RvcjxNdXRhdGlvbk9ic2VydmVyRW50cnk+ID4gbV9tdXRhdGlvbk9ic2VydmVyczsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1dl
YktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDE0ODczNjRjODE4Mjk0YjY2ZTRmZTY1NmMw
Y2E5MGJhODQ1NjkzNjYuLmQzMGFkYWMxNjBlMzNkOTkwODBkZThiZjcwZjE1NDc5NGUzZGRhYjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAKQEAg
LTM0LDggKzM0LDExIEBACiAKICNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCiAK
KyNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyT3B0aW9ucy5oIgogI2luY2x1ZGUgIk11dGF0aW9u
Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk11dGF0
aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDE0ICs1Niw3MCBAQCBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjp+V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpCiB7CiB9CiAKLXZvaWQg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnMqKQordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKE5vZGUqIG5vZGUs
IE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zKiBvcHRpb25zKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgdW5zaWduZWQgY2hhciBvcHRpb25GbGFncyA9IDA7CisKKyAgICAvLyBGSVhNRTog
UHVzaCBjb21wb3NpdGlvbiBvZiB0aGUgb3B0aW9uRmxhZ3MgaW50byB0aGUgY3VzdG9tIGJpbmRp
bmcuCisgICAgaWYgKG9wdGlvbnMtPmNoaWxkTGlzdCgpKQorICAgICAgICBvcHRpb25GbGFncyB8
PSBDaGlsZExpc3Q7CisgICAgaWYgKG9wdGlvbnMtPmF0dHJpYnV0ZXMoKSkKKyAgICAgICAgb3B0
aW9uRmxhZ3MgfD0gQXR0cmlidXRlczsKKyAgICBpZiAob3B0aW9ucy0+Y2hhcmFjdGVyRGF0YSgp
KQorICAgICAgICBvcHRpb25GbGFncyB8PSBDaGFyYWN0ZXJEYXRhOworICAgIC8vIEZJWE1FOiBN
b3JlIG9wdGlvbnMgY29tcG9zaXRpb24gd29yayBuZWVkcyB0byBiZSBkb25lIGhlcmUuCisKKyAg
ICBpZiAobm9kZS0+cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMsIG9wdGlvbkZsYWdzKSA9
PSBOb2RlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZCkKKyAgICAgICAgbV9yZWdpc3RyYXRp
b25zLmFwcGVuZChub2RlKTsKIH0KIAogdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkaXNj
b25uZWN0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGZvciAoVmVjdG9yPE5vZGUq
Pjo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaXN0cmF0aW9ucy5iZWdpbigpOyBpdGVyICE9ICBtX3Jl
Z2lzdHJhdGlvbnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+dW5yZWdpc3Rlck11
dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisKKyAgICBtX3JlZ2lzdHJhdGlvbnMuY2xlYXIoKTsKK30K
Kwordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjp3YXNVbnJlZ2lzdGVyZWQoTm9kZSogbm9k
ZSkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBtX3JlZ2lzdHJhdGlvbnMuZmluZChub2RlKTsKKyAg
ICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWdpc3RyYXRpb25zLnJlbW92ZShpbmRleCk7Cit9
CisKK3R5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+ID4g
TXV0YXRpb25PYnNlcnZlclNldDsKKworc3RhdGljIE11dGF0aW9uT2JzZXJ2ZXJTZXQmIGFjdGl2
ZU11dGF0aW9uT2JzZXJ2ZXJzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGF0aW9u
T2JzZXJ2ZXJTZXQsIGFjdGl2ZU9ic2VydmVycywgKCkpOworICAgIHJldHVybiBhY3RpdmVPYnNl
cnZlcnM7Cit9CisKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9u
UmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uKQoreworICAgIG1fcmVj
b3Jkcy5hcHBlbmQobXV0YXRpb24pOworICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRk
KHRoaXMpOworfQorCit2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXIoKQorewor
ICAgIE11dGF0aW9uUmVjb3JkQXJyYXkgcmVjb3JkczsKKyAgICByZWNvcmRzLnN3YXAobV9yZWNv
cmRzKTsKKyAgICBtX2NhbGxiYWNrLT5oYW5kbGVFdmVudCgmcmVjb3JkcywgdGhpcyk7Cit9CisK
K3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucygpCit7Cisg
ICAgd2hpbGUgKCFhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmlzRW1wdHkoKSkgeworICAgICAg
ICBNdXRhdGlvbk9ic2VydmVyU2V0OjppdGVyYXRvciBpdGVyID0gYWN0aXZlTXV0YXRpb25PYnNl
cnZlcnMoKS5iZWdpbigpOworICAgICAgICBSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4g
b2JzZXJ2ZXIgPSAqaXRlcjsKKyAgICAgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5yZW1v
dmUoaXRlcik7CisgICAgICAgIG9ic2VydmVyLT5kZWxpdmVyKCk7CisgICAgfQogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIuaAppbmRleCAwODc5NDQ3NTZiMmZjMjZkMTQ0YmFmYTA0M2FjN2U4MmQ1MDBiMGRiLi44
MWMyZmRlYWI4NWNkMmYyZDJmOWJjOTZlYzJjMDE1ZjEzYTg5NTc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKQEAgLTM2LDI4ICszNiw1MiBAQAogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIE11dGF0aW9uQ2FsbGJhY2s7CiBjbGFzcyBNdXRhdGlvbk9i
c2VydmVyT3B0aW9uczsKK2NsYXNzIE11dGF0aW9uUmVjb3JkOwogY2xhc3MgTm9kZTsKIAogY2xh
c3MgV2ViS2l0TXV0YXRpb25PYnNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI+IHsKIHB1YmxpYzoKKyAgICBlbnVtIE11dGF0aW9uVHlwZSB7CisgICAgICAg
IENoaWxkTGlzdCA9IDEgPDwgMCwKKyAgICAgICAgQXR0cmlidXRlcyA9IDEgPDwgMSwKKyAgICAg
ICAgQ2hhcmFjdGVyRGF0YSA9IDEgPDwgMgorICAgIH07CisKKyAgICBlbnVtIE9wdGlvbkZsYWdz
IHsKKyAgICAgICAgU3VidHJlZSA9IDEgPDwgMywKKyAgICAgICAgQXR0cmlidXRlT2xkVmFsdWUg
PSAxIDw8IDQsCisgICAgICAgIENoYXJhY3RlckRhdGFPbGRWYWx1ZSA9IDEgPDwgNSwKKyAgICAg
ICAgQXR0cmlidXRlRmlsdGVyID0gMSA8PCA2CisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IGNyZWF0ZShQYXNzUmVmUHRyPE11dGF0aW9uQ2Fs
bGJhY2s+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxpdmVyQWxsTXV0YXRpb25zKCk7CiAKICAgICB+
V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpOwogCiAgICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRh
dGlvbk9ic2VydmVyT3B0aW9ucyopOwogICAgIHZvaWQgZGlzY29ubmVjdCgpOworICAgIHZvaWQg
d2FzVW5yZWdpc3RlcmVkKE5vZGUqKTsKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZChQ
YXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPik7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcihQYXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+KTsKIAorICAgIHZvaWQgZGVs
aXZlcigpOworCiAgICAgUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CisgICAg
VmVjdG9yPFJlZlB0cjxNdXRhdGlvblJlY29yZD4gPiBtX3JlY29yZHM7CisgICAgVmVjdG9yPE5v
ZGUqPiBtX3JlZ2lzdHJhdGlvbnM7IC8vIE5vZGVSYXJlRGF0YSBoYXMgYSBSZWZQdHIgdG8gdGhp
cywgc28gdXNlIGEgd2VhayBwb2ludGVyIHRvIGF2b2lkIGEgY3ljbGUuCiB9OwogCit2b2lkIGVu
c3VyZU11dGF0aW9uUXVldWVkKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gLCBQ
YXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPik7CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjg4NDhlYWFiZTBlYmI2Y2Q0YWVjNDIyZDU1NDljYWY4
ZDNhNWYwZi4uM2UzMjZkNzJkYTVmYzYzNTdhODA5NTlkMWRiM2M3YzI1Y2QwN2M0MSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDExLTEwLTEzICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVsd0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBJbXBsZW1lbnQgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlIGZvciBhdHRyaWJ1dGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODk1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZl
LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211dGF0aW9u
L29ic2VydmUtYXR0cmlidXRlcy5odG1sOiBBZGRlZC4KKwogMjAxMS0xMC0xNyAgRGFuIEJlcm5z
dGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDI5Mzky
OT4gUkVHUkVTU0lPTiAocjk3NTI1KTogaUNoYXQgdHJhbnNjcmlwdCBoYXMgaG9yaXpvbnRhbCBz
Y3JvbGwgYmFyIHdoZW4gdGhlIGNvbnZlcnNhdGlvbiBpbmNsdWRlcyBhIHdpZGUgaW1hZ2UKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVz
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGIyZjY4M2Y5Y2ZiNzFhZTk0ODk2ODQwMTEyOWYy
OTVkMmNkYzI2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjQgQEAKK1Rlc3QgdGhl
IGNvbnN0cnVjdG9yIG9mIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBhdHRyaWJ1dGUgb2JzZXJ2
YXRpb24uCisuLi5jYW4gYXR0cmlidXRlIGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsCitQQVNT
IG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmli
dXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisuLi5vYnNlcnZlci5kaXNjb25u
ZWN0KCkgc2hvdWxkIHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuCitQQVNT
IG11dGF0aW9ucyBpcyBudWxsCisuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3Jr
cyB3aXRoIHRoZSBzYW1lIG9ic2VydmVyLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDIKK1BB
U1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5h
dHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1Mg
bXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91
dCBzcGVjaWZ5aW5nICJhdHRyaWJ1dGVzIiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBhYm91
dCBhdHRyaWJ1dGUgY2hhbmdlcy4KK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKworVGVzdGluZyB0
aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5nIGhh
cyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4KK1BBU1MgY2FsbHMgaXMgMQor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0
dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNT
IG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2Fu
IGJlIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBub2RlIGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25z
LgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMg
ImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQ
QVNTIG11dGF0aW9uczIubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zMlswXS50eXBlIGlzICJh
dHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnMyWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKKwor
VGVzdGluZyB0aGF0ICJhdHRyaWJ1dGVOYW1lc3BhY2UiIHZhbHVlIGlzIGRlbGl2ZXJlZCBwcm9w
ZXJseS4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBl
IGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9v
IgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8vd3d3LmZv
by5jb20vYmFyIgorCitUZXN0aW5nIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBub2RlIHByb3BlcnRp
ZXMgd2hpY2ggZGVsZWdhdGUgdG8gYXR0cmlidXRlIHN0b3JhZ2UgZGVsaXZlciBtdXRhdGlvbnMu
CitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAi
YXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgInNyYyIKK1BB
U1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5h
dHRyaWJ1dGVOYW1lIGlzICJocmVmIgorCitUZXN0aW5nIG11dGF0aW9uIHJlY29yZHMgYXJlIGVu
cXVldWVkIGZvciBhdHRyaWJ1dGVzIGJlZm9yZSBET01TdWJ0cmVlTW9kaWZpZWQgaXMgZGlzcGF0
Y2hlZC4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBl
IGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9v
IgorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25z
WzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJheiIKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9u
L29ic2VydmUtYXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4ZWFiODE4ZTg4MTc2YWRmZjNi
YjViYTI3ZWM4MDVkNWU5ZmVmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsMzIyIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzx0aXRsZT48L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD1kZXNjcmlwdGlvbj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3dpbmRvdy5qc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKK3ZhciBtdXRhdGlvbnM7Cit2YXIgbXV0YXRpb25zMjsKK3ZhciBjYWxs
czsKKworZnVuY3Rpb24gdGVzdEJhc2ljKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2Vy
dmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGJh
c2ljIGFzcGVjdHMgb2YgYXR0cmlidXRlIG9ic2VydmF0aW9uLicpOworCisgICAgICAgIG11dGF0
aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9u
KG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAg
IG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6
IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAg
ICAgc2V0VGltZW91dChjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSgpIHsKKyAgICAgICAgZGVidWcoJy4u
LmNhbiBhdHRyaWJ1dGUgY2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwnKTsKKworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKworICAgICAgICBtdXRhdGlv
bnMgPSBudWxsOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRpdi5z
ZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXonKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja05vdERl
bGl2ZXJlZEFuZE11dGF0ZU11bHRpcGxlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVj
a05vdERlbGl2ZXJlZEFuZE11dGF0ZU11bHRpcGxlKCkgeworICAgICAgICBkZWJ1ZygnLi4ub2Jz
ZXJ2ZXIuZGlzY29ubmVjdCgpIHNob3VsZCBwcmV2ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0
YXRpb25zLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAg
ICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAg
ICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmF0Jyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1
dGUoJ2JhcicsICdmb28nKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlLW9ic2VydmluZyBh
ZnRlciBkaXNjb25uZWN0IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuJyk7CisKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAg
b2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5l
eHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdFdyb25n
VHlwZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9u
IHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0
IHNwZWNpZnlpbmcgImF0dHJpYnV0ZXMiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0
IGF0dHJpYnV0ZSBjaGFuZ2VzLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAg
ICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZl
ciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg
IG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
ZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAg
ZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlz
aCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAg
c3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgeworICAg
IHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7Cisg
ICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0
aCB0aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRp
b25zLicpOworICAgIAorCQljYWxscyA9IDA7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7Cisg
ICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNl
cnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg
ICAgIG11dGF0aW9ucyA9IG07CisJCQljYWxscysrOworICAgICAgICB9KTsKKworICAgICAgICBv
YnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0
cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVl
IH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNl
dFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJlKCdjYWxs
cycsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAg
ICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsg
YXR0cmlidXRlczogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0
cmlidXRlKCdmb28nLCAnYmF6Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOwor
fQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMoKSB7CisgICAgdmFyIGRpdjsKKyAg
ICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG11bHRpcGxlIG9ic2VydmVycyBjYW4g
YmUgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIG5vZGUgYW5kIGJvdGggcmVjZWl2ZSBtdXRhdGlvbnMu
Jyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAg
ICAgIH0pOworICAgICAgICBvYnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihm
dW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMyID0gbTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAg
ICAgIG9ic2VydmVyMi5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAg
ICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmlu
aXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
czIubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0uYXR0cmli
dXRlTmFtZScsICciZm9vIicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAg
ICAgIG9ic2VydmVyMi5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAg
cnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0
TmFtZXNwYWNlVVJJKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgImF0dHJpYnV0
ZU5hbWVzcGFjZSIgdmFsdWUgaXMgZGVsaXZlcmVkIHByb3Blcmx5LicpOworICAgICAgICBtdXRh
dGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlv
bihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAg
ICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRy
dWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy5mb28uY29tL2Jh
cicsICdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsgICAgCisg
ICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmli
dXRlTmFtZXNwYWNlJywgJyJodHRwOi8vd3d3LmZvby5jb20vYmFyIicpOyAgICAgICAgCisgICAg
ICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBy
dW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQ
cm9wZXJ0eUFjY2VzcygpIHsKKyAgICB2YXIgaW1nLCBhOworICAgIHZhciBvYnNlcnZlcjsKKwor
ICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG1vZGlm
aWNhdGlvbnMgdG8gbm9kZSBwcm9wZXJ0aWVzIHdoaWNoIGRlbGVnYXRlIHRvIGF0dHJpYnV0ZSBz
dG9yYWdlIGRlbGl2ZXIgbXV0YXRpb25zLicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKKyAgICAgICAgYSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9u
cyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW1nLCB7IGF0
dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoYSwgeyBhdHRyaWJ1
dGVzOiB0cnVlIH0pOworCisgICAgICAgIGltZy5zcmMgPSAnYmF6LnBuZyc7CisgICAgICAgIGEu
aHJlZiA9ICdmb28uaHRtbCc7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRl
TmFtZScsICcic3JjIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAn
ImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRl
TmFtZScsICciaHJlZiInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAg
ICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQo
KTsKK30KKworZnVuY3Rpb24gdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkKCkgewor
ICAgIHZhciBkaXYsIGRpdjIsIHN1YkRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGxp
c3RlbmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5n
IG11dGF0aW9uIHJlY29yZHMgYXJlIGVucXVldWVkIGZvciBhdHRyaWJ1dGVzIGJlZm9yZSBET01T
dWJ0cmVlTW9kaWZpZWQgaXMgZGlzcGF0Y2hlZC4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBu
dWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgZGl2MiA9IGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIHN1YkRpdiA9
IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAg
ICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7Cisg
ICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBsaXN0ZW5l
ciA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGRpdjIuc2V0QXR0cmlidXRlKCdiYXonLCAn
YmF0Jyk7CisgICAgICAgIH0KKworICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignRE9NU3Vi
dHJlZU1vZGlmaWVkJywgbGlzdGVuZXIpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHN1YkRp
diwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdjIs
IHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKworICAgICAgICBzdWJEaXYuc2V0QXR0cmlidXRlKCdm
b28nLCAnYmFyJyk7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5n
dGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJp
YnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScs
ICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJp
YnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScs
ICciYmF6IicpOworICAgICAgICBkaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7Cisg
ICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKKyAgICAgICAgb2JzZXJ2ZXIu
ZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7
CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KK3ZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RX
cm9uZ1R5cGUsIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbiwgdGVzdE11bHRpcGxlT2JzZXJ2ZXJz
LCB0ZXN0TmFtZXNwYWNlVVJJLCB0ZXN0UHJvcGVydHlBY2Nlc3MsIHRlc3RPcmRlcmluZ1dydERP
TVN1YnRyZWVNb2RpZmllZF07Cit2YXIgdGVzdEluZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5l
eHRUZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRl
c3RzW3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9
CisKK2Rlc2NyaXB0aW9uKCdUZXN0IHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyJyk7CisKK2lmICghd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVz
dEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpJyk7
CitlbHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111330</attachid>
            <date>2011-10-17 15:22:50 -0700</date>
            <delta_ts>2011-10-17 15:30:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68956-20111017152249.patch</filename>
            <type>text/plain</type>
            <size>36458</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2MzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiYWZkNGM5NDg0N2NkZmYw
ZmFhNjYwYjQxNDczNmIwNDZjODQ4MzY0Li5jMTQ2OGEzM2RiMjQzNmYxMjIwNWZmNDRlY2I2MzU5
YWE5YjkwMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMTAtMTMgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGF0
dHJpYnV0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY4OTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdDogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAorCisgICAgICAgIFRo
aXMgYWRkcyBhbiBpbml0aWFsIGltcGxlbWVudGF0aW9uIGZvciByZWdpc3RlcmluZyBtdXRhdGlv
biBvYnNlcnZlcnMgb24gbm9kZXMsCisgICAgICAgIGRlbGl2ZXJpbmcgbXV0YXRpb24gcmVjb3Jk
cyBhdCB0aGUgZW5kIG9mIHRoZSBvdXRlci1tb3N0IHNjcmlwdCBpbnZva2F0aW9uIGFuZAorICAg
ICAgICBvYnNlcnZpbmcgbXV0YXRpb25zIHRvIGVsZW1lbnQgYXR0cmlidXRlcy4KKworICAgICAg
ICBOb3RlIHRoYXQgdGhlIG91dGVyLW1vc3Qgc2NyaXB0IGludm9rYXRpb24gb25seSB3b3JrcyBp
biBWOC4KKworICAgICAgICBOb3RlIGFsc28gdGhhdCBzdXBwb3J0IGZvciBvYnNlcnZpbmcgY2hh
bmdlcyB0byB0aGUgc3R5bGUgYXR0cmlidXRlIHdoZW4gdXBkYXRlZAorICAgICAgICB2aWEgdGhl
IHN0eWxlIHByb3BlcnR5IGlzIG5vdCBpbXBsZW1lbnRlZCBoZXJlLgorCisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpkaWRMZWF2
ZVNjcmlwdENvbnRleHQpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25SZWNvcmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMp
OgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5oOgorICAgICAgICAqIGRvbS9NdXRhdGlv
blJlY29yZC5pZGw6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6Y2xlYXJSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptdXRhdGlvbk9i
c2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbnN1cmVNdXRhdGlvbk9ic2Vy
dmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNl
cnZlcnNPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9i
c2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlcmVnaXN0ZXJNdXRhdGlvbk9ic2Vy
dmVyKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Ok11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlv
bk9ic2VydmVyRGF0YTo6TXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
TXV0YXRpb25PYnNlcnZlckRhdGE6On5NdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAgICAg
ICAqIGRvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjp3YXNEZXJlZ2lzdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6YWN0
aXZlTXV0YXRpb25PYnNlcnZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlcik6CisgICAgICAgICogZG9tL1dlYktp
dE11dGF0aW9uT2JzZXJ2ZXIuaDoKKwogMjAxMS0xMC0xNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDI5MzkyOT4gUkVHUkVTU0lP
TiAocjk3NTI1KTogaUNoYXQgdHJhbnNjcmlwdCBoYXMgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIHdo
ZW4gdGhlIGNvbnZlcnNhdGlvbiBpbmNsdWRlcyBhIHdpZGUgaW1hZ2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NzgyMTgyZDhh
NzJhOTA4YTQwNDA0OTNlZWYyMWY2NjY5MDAwNDQyLi44MTRiZTRjYjFiNTM5NWY5NGNlMTQzZTg4
N2JiMjhmM2IyMDA5ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NDY0LDcgKzU0NjQsNyBAQAogCQlDNkYwOEZDQTE0MzEw
MDBEMDA2ODU4NDkgLyogSlNNdXRhdGlvblJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZGMDhGQzgxNDMxMDAwRDAwNjg1ODQ5IC8qIEpTTXV0
YXRpb25SZWNvcmQuaCAqLzsgfTsKIAkJQzZGMDkwMEExNDMyN0I2MTAwNjg1ODQ5IC8qIE11dGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM2RjA5MDAxMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggKi87IH07
CiAJCUM2RjA5MDBFMTQzMjdCNjEwMDY4NTg0OSAvKiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RjA5MDA1
MTQzMjdCNjEwMDY4NTg0OSAvKiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCAqLzsgfTsKLQkJ
QzZGMDkwMEYxNDMyN0I2MTAwNjg1ODQ5IC8qIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RjA5MDA2MTQzMjdC
NjEwMDY4NTg0OSAvKiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmggKi87IH07CisJCUM2RjA5MDBG
MTQzMjdCNjEwMDY4NTg0OSAvKiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkYwOTAwNjE0MzI3QjYxMDA2ODU4
NDkgLyogV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM2RjA5MDExMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRh
dGlvbk9ic2VydmVyT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzZGMDkwMDgxNDMyN0I2MTAwNjg1ODQ5IC8qIE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zLmggKi87IH07CiAJCUM2RjA5MDI4MTQzMjdENEYwMDY4NTg0OSAvKiBKU011dGF0aW9u
Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzZGMDkwMjAxNDMyN0Q0RjAwNjg1ODQ5IC8qIEpTTXV0YXRpb25DYWxsYmFjay5jcHAgKi87
IH07CiAJCUM2RjA5MDI5MTQzMjdENEYwMDY4NTg0OSAvKiBKU011dGF0aW9uQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RjA5MDIxMTQz
MjdENEYwMDY4NTg0OSAvKiBKU011dGF0aW9uQ2FsbGJhY2suaCAqLzsgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAKaW5kZXggMGJmNDhlODM0MWQwNGI1NTUzNmZmYjYzNjc2
NmM3MDUwZTIwYzA2Ni4uODBhMjFhMGZmMGMyZDcyNWE0Yzg4N2MzYjYwZjAzYTRjMWE1ZGZlMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTY1LDYgKzY1LDcgQEAK
ICNpbmNsdWRlICJWOFNRTEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3RF
eGNlcHRpb24uaCIKICNpbmNsdWRlICJWOFhQYXRoRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApAQCAtNjIwLDYgKzYyMSwxMCBA
QCB2b2lkIFY4UHJveHk6OmRpZExlYXZlU2NyaXB0Q29udGV4dCgpCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAgICAgaWYgKHBhZ2UtPmdyb3VwKCkuaGFzTG9jYWxTdG9yYWdl
KCkpCiAgICAgICAgIHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCktPnVubG9jaygpOworCisj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBXZWJDb3JlOjpXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpkZWxpdmVyQWxsTXV0YXRpb25zKCk7CisjZW5kaWYKIH0KIAogdm9pZCBWOFBy
b3h5OjpyZXNldElzb2xhdGVkV29ybGRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBlODAz
M2UzNTJkMzdhZjNiN2IwMGMyMjdlZTczMmNiNGQwYmRmNDJlLi5kZGRlNTE5MDRjOTEwZjBiNGJh
MTE5NjYyZDY4ZTZlZGRhNmEyNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC00OCw2ICs0
OCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9t
cy5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk11
dGF0aW9uUmVjb3JkLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgpAQCAtNTksNiAr
NjAsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5o
IgogI2luY2x1ZGUgIldlYktpdEFuaW1hdGlvbkxpc3QuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5o
IgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCkBAIC02MTAsNiArNjEyLDIwIEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IFN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKK3N0YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNv
cmQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAgICBW
ZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICBlbGVtZW50LT5y
ZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpBdHRyaWJ1dGVzKTsKKyAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11
dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUpOworICAgIGZvciAo
VmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVy
cy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKQorICAgICAgICAoKml0
ZXIpLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOworfQorI2VuZGlmCisKIHZvaWQg
RWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFEb2N1bWVu
dDo6aXNWYWxpZE5hbWUobmFtZSkpIHsKQEAgLTYzMCw2ICs2NDYsMTEgQEAgdm9pZCBFbGVtZW50
OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlLAogCiAgICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAorI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRl
Q2hhbmdlZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGlt
cG9ydGFudCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRy
aWJ1dGVzTXV0YXRpb25SZWNvcmQodGhpcywgYXR0cmlidXRlTmFtZSk7CisjZW5kaWYKKwogICAg
IGlmIChpc0lkQXR0cmlidXRlTmFtZShvbGQgPyBvbGQtPm5hbWUoKSA6IGF0dHJpYnV0ZU5hbWUp
KQogICAgICAgICB1cGRhdGVJZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgdmFsdWUp
OwogCkBAIC02NjMsNiArNjg0LDExIEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgLy8g
QWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCiAgICAgQXR0cmlidXRlKiBvbGQg
PSBhdHRyaWJ1dGVzKGZhbHNlKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIAorI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgLy8gVGhlIGNhbGwgdG8gYXR0cmlidXRlQ2hhbmdl
ZCBiZWxvdyBtYXkgZGlzcGF0Y2ggRE9NU3VidHJlZU1vZGlmaWVkLCBzbyBpdCdzIGltcG9ydGFu
dCB0byBlbnF1ZXVlIGEgTXV0YXRpb25SZWNvcmQgbm93LgorICAgIGVucXVldWVBdHRyaWJ1dGVz
TXV0YXRpb25SZWNvcmQodGhpcywgbmFtZSk7CisjZW5kaWYKKwogICAgIGlmIChpc0lkQXR0cmli
dXRlTmFtZShuYW1lKSkKICAgICAgICAgdXBkYXRlSWQob2xkID8gb2xkLT52YWx1ZSgpIDogbnVs
bEF0b20sIHZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
UmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKaW5kZXgg
ODRiMjk4YjBmNzkzOTQ2NjdjZjQ5MjZkZTY2OWEzNGMwZDgyODJiNS4uYzM2ZWNhNmRkZTcxZGVl
ZTljZDJjZmQyNGM4ODRmNThiYTdiYmZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNv
cmQuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTY5LDE3ICs3
MCwxNyBAQCBwcml2YXRlOgogCiBjbGFzcyBBdHRyaWJ1dGVzUmVjb3JkIDogcHVibGljIE11dGF0
aW9uUmVjb3JkIHsKIHB1YmxpYzoKLSAgICBBdHRyaWJ1dGVzUmVjb3JkKFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKQorICAgIEF0dHJpYnV0ZXNSZWNvcmQoUGFzc1Jl
ZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiAgICAgICAgIDog
TXV0YXRpb25SZWNvcmQodGFyZ2V0KQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZShhdHRyaWJ1
dGVOYW1lKQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZXNwYWNlKGF0dHJpYnV0ZU5hbWVzcGFj
ZSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZU5hbWUobmFtZS5sb2NhbE5hbWUoKSkKKyAgICAgICAg
LCBtX2F0dHJpYnV0ZU5hbWVzcGFjZShuYW1lLm5hbWVzcGFjZVVSSSgpKQogICAgIHsKICAgICB9
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIG1f
YXR0cmlidXRlTmFtZTsgfQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVOYW1lc3BhY2UoKSB7IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZXNwYWNlKCkgeyByZXR1cm4gbV9hdHRyaWJ1
dGVOYW1lc3BhY2U7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1f
b2xkVmFsdWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T2xkVmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkgeyBtX29sZFZhbHVlID0gdmFsdWU7IH0KIApAQCAtMTI4LDkgKzEyOSw5IEBAIFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGlsZExpc3QoUGFz
c1JlZlB0cjxOb2RlPiB0YXJnCiAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0
aW9uUmVjb3JkKj4obmV3IENoaWxkTGlzdFJlY29yZCh0YXJnZXQsIGFkZGVkLCByZW1vdmVkLCBw
cmV2aW91c1NpYmxpbmcsIG5leHRTaWJsaW5nKSkpOwogfQogCi1QYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+
IHRhcmdldCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11
dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNf
Y2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgYXR0cmli
dXRlTmFtZSwgYXR0cmlidXRlTmFtZXNwYWNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0
aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+KG5ldyBBdHRyaWJ1dGVzUmVjb3JkKHRhcmdldCwgbmFt
ZSkpKTsKIH0KIAogUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNy
ZWF0ZUNoYXJhY3RlckRhdGEoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5oCmluZGV4IGYwY2VjNjA2Njg3ZGVmYTIxNWVkZWNjNDhmMzJlNWRjZGQ1
NzJlOTkuLjI1YWY0ZDNlYTNhMTc5OWRmYTBlMzQxODZlMTg4ODE1ODIyMzYxNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCkBAIC00MiwxMSArNDIsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBOb2RlOwogY2xhc3MgTm9kZUxpc3Q7CitjbGFzcyBRdWFsaWZpZWRO
YW1lOwogCiBjbGFzcyBNdXRhdGlvblJlY29yZCA6IHB1YmxpYyBSZWZDb3VudGVkPE11dGF0aW9u
UmVjb3JkPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+
IGNyZWF0ZUNoaWxkTGlzdChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gYWRkZWQsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHJlbW92ZWQsIFBhc3NSZWZQdHI8Tm9k
ZT4gcHJldmlvdXNTaWJsaW5nLCBQYXNzUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQXR0cmlidXRlcyhQYXNzUmVm
UHRyPE5vZGU+IHRhcmdldCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWVzcGFjZSk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJn
ZXQsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlv
blJlY29yZD4gY3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CiAK
ICAgICB2aXJ0dWFsIH5NdXRhdGlvblJlY29yZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uUmVjb3JkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJl
Y29yZC5pZGwKaW5kZXggNDZlN2EyOWJiYjg0NTI2YjQyOTBkOTA0NjY4MDAzOGNlMGNjNWIyOS4u
YzE5YjQxZjIxNmU0YTUyYzQ2ZjIxODQ3ODVjMzZmODgwMmZkMmI1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuaWRsCkBAIC00MSw4ICs0MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgbmV4dFNpYmxpbmc7CiAKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBhdHRyaWJ1dGVOYW1lOwotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGF0dHJpYnV0ZU5hbWVzcGFjZTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBhdHRyaWJ1
dGVOYW1lc3BhY2U7CiAKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBvbGRW
YWx1ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51
bGxdIERPTVN0cmluZyBvbGRWYWx1ZTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGY1
ZTQ3ZjRkODhiYjI3YjE1MzIwOTExN2Q2NzY2YWI4MmE4MThhM2MuLmQwMjEwZDlkZjJiYzI2MTNk
M2EzNjc4NDhkYjRiOGY0MGQ1NjRhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTEwMCw2ICsxMDAs
NyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWRMZWFrQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC01NDYsNiArNTQ3LDE0IEBAIHZvaWQgTm9k
ZTo6Y2xlYXJSYXJlRGF0YSgpCiAgICAgaWYgKHRyZWVTY29wZSgpICYmIHJhcmVEYXRhKCktPm5v
ZGVMaXN0cygpKQogICAgICAgICB0cmVlU2NvcGUoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwog
CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBWZWN0b3I8TXV0YXRpb25PYnNl
cnZlckVudHJ5Piogb2JzZXJ2ZXJFbnRpZXMgPSBtdXRhdGlvbk9ic2VydmVyRW50cmllcygpOwor
ICAgIGlmIChvYnNlcnZlckVudGllcykgeworICAgICAgICBmb3IgKFZlY3RvcjxNdXRhdGlvbk9i
c2VydmVyRW50cnk+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJFbnRpZXMtPmJlZ2luKCk7IGl0
ZXIgIT0gb2JzZXJ2ZXJFbnRpZXMtPmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBpdGVyLT5v
YnNlcnZlci0+b2JzZXJ2ZWROb2RlRGVzdHJ1Y3RlZCh0aGlzKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwJiBkYXRhTWFwID0gTm9kZVJhcmVEYXRh
OjpyYXJlRGF0YU1hcCgpOwogICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwOjppdGVy
YXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKICAgICBBU1NFUlQoaXQgIT0gZGF0YU1hcC5l
bmQoKSk7CkBAIC0yNjczLDYgKzI2ODIsNjIgQEAgRXZlbnRUYXJnZXREYXRhKiBOb2RlOjplbnN1
cmVFdmVudFRhcmdldERhdGEoKQogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVF
dmVudFRhcmdldERhdGEoKTsKIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCitW
ZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5PiogTm9kZTo6bXV0YXRpb25PYnNlcnZlckVudHJp
ZXMoKQoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bXV0YXRpb25P
YnNlcnZlckVudHJpZXMoKSA6IDA7Cit9CisKK1ZlY3RvcjxNdXRhdGlvbk9ic2VydmVyRW50cnk+
KiBOb2RlOjplbnN1cmVNdXRhdGlvbk9ic2VydmVyRW50cmllcygpCit7CisgICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCktPmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCk7Cit9CisKK3Zv
aWQgTm9kZTo6cmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJLaXRN
dXRhdGlvbk9ic2VydmVyKj4mIG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0
YXRpb25UeXBlIHR5cGUpCit7CisgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIG9i
c2VydmVyRW50cmllcyA9IG11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCk7CisgICAgaWYgKCFvYnNl
cnZlckVudHJpZXMgfHwgb2JzZXJ2ZXJFbnRyaWVzLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZvciAoVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT46Oml0ZXJhdG9yIGl0
ZXIgPSBvYnNlcnZlckVudHJpZXMtPmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJFbnRyaWVzLT5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5tYXRjaGVzKHR5cGUpKQorICAgICAg
ICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChpdGVyLT5vYnNlcnZlci5nZXQoKSk7CisgICAgfQorfQor
CitOb2RlOjpNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCBOb2RlOjpyZWdpc3Rlck11dGF0aW9u
T2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlciwgdW5z
aWduZWQgY2hhciBvcHRpb25zKQoreworICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyRW50cnk+
KiBvYnNlcnZlckVudHJpZXMgPSBlbnN1cmVNdXRhdGlvbk9ic2VydmVyRW50cmllcygpOworICAg
IE11dGF0aW9uT2JzZXJ2ZXJFbnRyeSBlbnRyeShvYnNlcnZlciwgb3B0aW9ucyk7CisKKyAgICBz
aXplX3QgaW5kZXggPSBvYnNlcnZlckVudHJpZXMtPmZpbmQoZW50cnkpOworICAgIGlmIChpbmRl
eCA9PSBub3RGb3VuZCkgeworICAgICAgICBvYnNlcnZlckVudHJpZXMtPmFwcGVuZChlbnRyeSk7
CisgICAgICAgIHJldHVybiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZDsKKyAgICB9CisKKyAg
ICAoKm9ic2VydmVyRW50cmllcylbaW5kZXhdLm9wdGlvbnMgPSBlbnRyeS5vcHRpb25zOworICAg
IHJldHVybiBNdXRhdGlvblJlZ2lzdHJhdGlvbk9wdGlvbnNSZXNldDsKK30KKwordm9pZCBOb2Rl
Ojp1bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI+IG9ic2VydmVyKQoreworICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyRW50cnk+KiBv
YnNlcnZlckVudHJpZXMgPSBtdXRhdGlvbk9ic2VydmVyRW50cmllcygpOworICAgIEFTU0VSVChv
YnNlcnZlckVudHJpZXMpOworICAgIGlmICghb2JzZXJ2ZXJFbnRyaWVzKQorICAgICAgICByZXR1
cm47CisKKyAgICBNdXRhdGlvbk9ic2VydmVyRW50cnkgZW50cnkob2JzZXJ2ZXIsIDApOworICAg
IHNpemVfdCBpbmRleCA9IG9ic2VydmVyRW50cmllcy0+ZmluZChlbnRyeSk7CisgICAgQVNTRVJU
KGluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAgICAg
IHJldHVybjsKKworICAgIG9ic2VydmVyRW50cmllcy0+cmVtb3ZlKGluZGV4KTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCisKIHZvaWQgTm9kZTo6aGFuZGxlTG9j
YWxFdmVudHMoRXZlbnQqIGV2ZW50KQogewogICAgIGlmICghaGFzUmFyZURhdGEoKSB8fCAhcmFy
ZURhdGEoKS0+ZXZlbnRUYXJnZXREYXRhKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCAxNjNjYWVlYTQwMzg1
Mzc5YjEzNGY5OWRiYmU0NGU1ZWJiZTNiOGUwLi5lZGMwMGUxYjY3ZDFmZTkwNDE5Mjk2OGE4Yjgw
N2I2MjY3ZjQyNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2lu
Y2x1ZGUgIlRyZWVTaGFyZWQuaCIKKyNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
IApAQCAtNTgsNiArNTksNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7
CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNzIE11dGF0aW9uT2Jz
ZXJ2ZXJFbnRyeTsKIGNsYXNzIE5TUmVzb2x2ZXI7CiBjbGFzcyBOYW1lZE5vZGVNYXA7CiBjbGFz
cyBOYW1lTm9kZUxpc3Q7CkBAIC01ODUsNiArNTg3LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIGl0
ZW1UeXBlQXR0cmlidXRlQ2hhbmdlZCgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQorICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyRW50cnk+KiBtdXRhdGlvbk9i
c2VydmVyRW50cmllcygpOworICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyRW50cnk+KiBlbnN1
cmVNdXRhdGlvbk9ic2VydmVyRW50cmllcygpOworCisgICAgdm9pZCByZWdpc3RlcmVkTXV0YXRp
b25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYsIFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIG9ic2VydmVyIHdhc24ndCBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gdGhpcyBub2RlLgor
ICAgIGVudW0gTXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgeworICAgICAgICBNdXRhdGlvbk9i
c2VydmVyUmVnaXN0ZXJlZCwKKyAgICAgICAgTXV0YXRpb25SZWdpc3RyYXRpb25PcHRpb25zUmVz
ZXQKKyAgICB9OworICAgIE11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IHJlZ2lzdGVyTXV0YXRp
b25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+LCB1bnNpZ25lZCBj
aGFyIG9wdGlvbnMpOworCisgICAgdm9pZCB1bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNz
UmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+KTsKKyNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQorCiBwcml2YXRlOgogICAgIGVudW0gTm9kZUZsYWdzIHsKICAgICAgICAg
SXNUZXh0RmxhZyA9IDEsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggNGNmNWI5OTZk
OTNjNjQwZjZhNzgxMzIxYWI4NGNjN2Y5NDhmMjBiMi4uNjkwOGQ4MWNhYTlhNmQxNjY4NjQ1ZTU3
OWU4NTlmYjgyYzBjYzI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJl
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIk5hbWVOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5h
bWUuaCIKICNpbmNsdWRlICJUYWdOb2RlTGlzdC5oIgorI2luY2x1ZGUgIldlYktpdE11dGF0aW9u
T2JzZXJ2ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtODYsNyArODcsMzEgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBOb2RlTGlzdHNOb2RlRGF0YSgpIDogbV9sYWJlbHNOb2RlTGlz
dENhY2hlKDApIHt9CiB9OwotICAgIAorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
K3N0cnVjdCBNdXRhdGlvbk9ic2VydmVyRW50cnkgeworICAgIE11dGF0aW9uT2JzZXJ2ZXJFbnRy
eShQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCB1bnNpZ25lZCBj
aGFyIG9wdGlvbnMpCisgICAgICAgIDogb2JzZXJ2ZXIob2JzZXJ2ZXIpCisgICAgICAgICwgb3B0
aW9ucyhvcHRpb25zKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
TXV0YXRpb25PYnNlcnZlckVudHJ5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBvYnNlcnZlciA9PSBvdGhlci5vYnNlcnZlcjsKKyAgICB9CisKKyAgICBib29sIG1hdGNoZXMo
dW5zaWduZWQgY2hhciBvcHRpb25zKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMt
Pm9wdGlvbnMgJiBvcHRpb25zOworICAgIH0KKworICAgIFJlZlB0cjxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyPiBvYnNlcnZlcjsKKyAgICB1bnNpZ25lZCBjaGFyIG9wdGlvbnM7Cit9OworCisjZW5k
aWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKwogY2xhc3MgTm9kZVJhcmVEYXRhIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb2RlUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzogICAgCkBAIC0xMzYsNiArMTYxLDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fZXZlbnRUYXJnZXREYXRhLmdldCgpOwogICAgIH0KIAorI2lmIEVOQUJMRShN
VVRBVElPTl9PQlNFUlZFUlMpCisgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIG11
dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCkgeyByZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVycy5nZXQo
KTsgfQorICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyRW50cnk+KiBlbnN1cmVNdXRhdGlvbk9i
c2VydmVyRW50cmllcygpCisgICAgeworICAgICAgICBpZiAoIW1fbXV0YXRpb25PYnNlcnZlcnMp
CisgICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2ZXJzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxN
dXRhdGlvbk9ic2VydmVyRW50cnk+KTsKKyAgICAgICAgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZl
cnMuZ2V0KCk7CisgICAgfQorI2VuZGlmCisKICAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNGb2N1c2VkOyB9CiAgICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wgZm9jdXNlZCkg
eyBtX2lzRm9jdXNlZCA9IGZvY3VzZWQ7IH0KIApAQCAtMTUyLDYgKzE4NywxMCBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgOiAxOwogICAgIGJvb2wgbV9p
c0ZvY3VzZWQgOiAxOwogICAgIGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25B
ZnRlckF0dGFjaCA6IDE7CisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIE93
blB0cjxWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5PiA+IG1fbXV0YXRpb25PYnNlcnZlcnM7
CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCAxNDg3MzY0YzgxODI5NGI2NmU0
ZmU2NTZjMGNhOTBiYTg0NTY5MzY2Li5iYmZlNGNiOWY0YTlhY2JkMzkyN2ZjNTgyM2Y4NTZmM2Mx
NDI3NDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNl
cnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIu
Y3BwCkBAIC0zNCw4ICszNCwxMSBAQAogCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZl
ci5oIgogCisjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlck9wdGlvbnMuaCIKICNpbmNsdWRlICJN
dXRhdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJNdXRhdGlvblJlY29yZC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MywxNCArNTYsNzAgQEAg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6fldlYktpdE11dGF0aW9uT2JzZXJ2ZXIoKQogewogfQog
Ci12b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoTm9kZSosIE11dGF0aW9uT2Jz
ZXJ2ZXJPcHRpb25zKikKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2Rl
KiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyogb3B0aW9ucykKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHVuc2lnbmVkIGNoYXIgb3B0aW9uRmxhZ3MgPSAwOworCisgICAgLy8g
RklYTUU6IFB1c2ggY29tcG9zaXRpb24gb2YgdGhlIG9wdGlvbkZsYWdzIGludG8gdGhlIGN1c3Rv
bSBiaW5kaW5nLgorICAgIGlmIChvcHRpb25zLT5jaGlsZExpc3QoKSkKKyAgICAgICAgb3B0aW9u
RmxhZ3MgfD0gQ2hpbGRMaXN0OworICAgIGlmIChvcHRpb25zLT5hdHRyaWJ1dGVzKCkpCisgICAg
ICAgIG9wdGlvbkZsYWdzIHw9IEF0dHJpYnV0ZXM7CisgICAgaWYgKG9wdGlvbnMtPmNoYXJhY3Rl
ckRhdGEoKSkKKyAgICAgICAgb3B0aW9uRmxhZ3MgfD0gQ2hhcmFjdGVyRGF0YTsKKyAgICAvLyBG
SVhNRTogTW9yZSBvcHRpb25zIGNvbXBvc2l0aW9uIHdvcmsgbmVlZHMgdG8gYmUgZG9uZSBoZXJl
LgorCisgICAgaWYgKG5vZGUtPnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlzLCBvcHRpb25G
bGFncykgPT0gTm9kZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdGVyZWQpCisgICAgICAgIG1fb2Jz
ZXJ2ZWROb2Rlcy5hcHBlbmQobm9kZSk7CiB9CiAKIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBmb3IgKFZlY3Rv
cjxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVkTm9kZXMuYmVnaW4oKTsgaXRlciAh
PSAgbV9vYnNlcnZlZE5vZGVzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnVucmVn
aXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOworCisgICAgbV9vYnNlcnZlZE5vZGVzLmNsZWFy
KCk7Cit9CisKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZWROb2RlRGVzdHJ1
Y3RlZChOb2RlKiBub2RlKQoreworICAgIHNpemVfdCBpbmRleCA9IG1fb2JzZXJ2ZWROb2Rlcy5m
aW5kKG5vZGUpOworICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CisgICAgaWYgKGluZGV4
ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBtX29ic2VydmVkTm9kZXMucmVt
b3ZlKGluZGV4KTsKK30KKwordHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8V2ViS2l0TXV0YXRp
b25PYnNlcnZlcj4gPiBNdXRhdGlvbk9ic2VydmVyU2V0OworCitzdGF0aWMgTXV0YXRpb25PYnNl
cnZlclNldCYgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoTXV0YXRpb25PYnNlcnZlclNldCwgYWN0aXZlT2JzZXJ2ZXJzLCAoKSk7CisgICAgcmV0
dXJuIGFjdGl2ZU9ic2VydmVyczsKK30KKwordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpl
bnF1ZXVlTXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24p
Cit7CisgICAgbV9yZWNvcmRzLmFwcGVuZChtdXRhdGlvbik7CisgICAgYWN0aXZlTXV0YXRpb25P
YnNlcnZlcnMoKS5hZGQodGhpcyk7Cit9CisKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6
ZGVsaXZlcigpCit7CisgICAgTXV0YXRpb25SZWNvcmRBcnJheSByZWNvcmRzOworICAgIHJlY29y
ZHMuc3dhcChtX3JlY29yZHMpOworICAgIG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KCZyZWNvcmRz
LCB0aGlzKTsKK30KKwordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyQWxsTXV0
YXRpb25zKCkKK3sKKyAgICB3aGlsZSAoIWFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuaXNFbXB0
eSgpKSB7CisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBhY3Rp
dmVNdXRhdGlvbk9ic2VydmVycygpLmJlZ2luKCk7CisgICAgICAgIFJlZlB0cjxXZWJLaXRNdXRh
dGlvbk9ic2VydmVyPiBvYnNlcnZlciA9ICppdGVyOworICAgICAgICBhY3RpdmVNdXRhdGlvbk9i
c2VydmVycygpLnJlbW92ZShpdGVyKTsKKyAgICAgICAgb2JzZXJ2ZXItPmRlbGl2ZXIoKTsKKyAg
ICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5oCmluZGV4IDA4Nzk0NDc1NmIyZmMyNmQxNDRiYWZhMDQzYWM3
ZTgyZDUwMGIwZGIuLjZjMTk1ZmVjY2VjZjdmMmYxMmI4ZWJlZTIyZjEzYzNlNjg4OTM5ZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaApAQCAtMzYsMjYg
KzM2LDQ4IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTXV0YXRpb25DYWxsYmFjazsKIGNs
YXNzIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zOworY2xhc3MgTXV0YXRpb25SZWNvcmQ7CiBjbGFz
cyBOb2RlOwogCiBjbGFzcyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gewogcHVibGljOgorICAgIGVudW0gTXV0YXRpb25U
eXBlIHsKKyAgICAgICAgQ2hpbGRMaXN0ID0gMSA8PCAwLAorICAgICAgICBBdHRyaWJ1dGVzID0g
MSA8PCAxLAorICAgICAgICBDaGFyYWN0ZXJEYXRhID0gMSA8PCAyCisgICAgfTsKKworICAgIGVu
dW0gT3B0aW9uRmxhZ3MgeworICAgICAgICBTdWJ0cmVlID0gMSA8PCAzLAorICAgICAgICBBdHRy
aWJ1dGVPbGRWYWx1ZSA9IDEgPDwgNCwKKyAgICAgICAgQ2hhcmFjdGVyRGF0YU9sZFZhbHVlID0g
MSA8PCA1LAorICAgICAgICBBdHRyaWJ1dGVGaWx0ZXIgPSAxIDw8IDYKKyAgICB9OworCiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gY3JlYXRlKFBhc3NSZWZQ
dHI8TXV0YXRpb25DYWxsYmFjaz4pOworICAgIHN0YXRpYyB2b2lkIGRlbGl2ZXJBbGxNdXRhdGlv
bnMoKTsKIAogICAgIH5XZWJLaXRNdXRhdGlvbk9ic2VydmVyKCk7CiAKICAgICB2b2lkIG9ic2Vy
dmUoTm9kZSosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zKik7CiAgICAgdm9pZCBkaXNjb25uZWN0
KCk7CisgICAgdm9pZCBvYnNlcnZlZE5vZGVEZXN0cnVjdGVkKE5vZGUqKTsKKyAgICB2b2lkIGVu
cXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPik7CiAKIHByaXZh
dGU6CiAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPE11dGF0aW9uQ2FsbGJh
Y2s+KTsKIAorICAgIHZvaWQgZGVsaXZlcigpOworCiAgICAgUmVmUHRyPE11dGF0aW9uQ2FsbGJh
Y2s+IG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPFJlZlB0cjxNdXRhdGlvblJlY29yZD4gPiBtX3Jl
Y29yZHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX29ic2VydmVkTm9kZXM7IC8vIE5vZGVSYXJlRGF0
YSBoYXMgYSBSZWZQdHIgdG8gdGhpcywgc28gdXNlIGEgd2VhayBwb2ludGVyIHRvIGF2b2lkIGEg
Y3ljbGUuCiB9OwogCiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjg4NDhlYWFiZTBlYmI2Y2Q0YWVjNDIyZDU1NDljYWY4
ZDNhNWYwZi4uM2UzMjZkNzJkYTVmYzYzNTdhODA5NTlkMWRiM2M3YzI1Y2QwN2M0MSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDExLTEwLTEzICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVsd0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBJbXBsZW1lbnQgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlIGZvciBhdHRyaWJ1dGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODk1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZl
LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211dGF0aW9u
L29ic2VydmUtYXR0cmlidXRlcy5odG1sOiBBZGRlZC4KKwogMjAxMS0xMC0xNyAgRGFuIEJlcm5z
dGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDI5Mzky
OT4gUkVHUkVTU0lPTiAocjk3NTI1KTogaUNoYXQgdHJhbnNjcmlwdCBoYXMgaG9yaXpvbnRhbCBz
Y3JvbGwgYmFyIHdoZW4gdGhlIGNvbnZlcnNhdGlvbiBpbmNsdWRlcyBhIHdpZGUgaW1hZ2UKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVz
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGIyZjY4M2Y5Y2ZiNzFhZTk0ODk2ODQwMTEyOWYy
OTVkMmNkYzI2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjQgQEAKK1Rlc3QgdGhl
IGNvbnN0cnVjdG9yIG9mIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBhdHRyaWJ1dGUgb2JzZXJ2
YXRpb24uCisuLi5jYW4gYXR0cmlidXRlIGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsCitQQVNT
IG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmli
dXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisuLi5vYnNlcnZlci5kaXNjb25u
ZWN0KCkgc2hvdWxkIHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuCitQQVNT
IG11dGF0aW9ucyBpcyBudWxsCisuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3Jr
cyB3aXRoIHRoZSBzYW1lIG9ic2VydmVyLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDIKK1BB
U1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5h
dHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1Mg
bXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91
dCBzcGVjaWZ5aW5nICJhdHRyaWJ1dGVzIiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBhYm91
dCBhdHRyaWJ1dGUgY2hhbmdlcy4KK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKworVGVzdGluZyB0
aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5nIGhh
cyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4KK1BBU1MgY2FsbHMgaXMgMQor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0
dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNT
IG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2Fu
IGJlIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBub2RlIGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25z
LgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMg
ImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQ
QVNTIG11dGF0aW9uczIubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zMlswXS50eXBlIGlzICJh
dHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnMyWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKKwor
VGVzdGluZyB0aGF0ICJhdHRyaWJ1dGVOYW1lc3BhY2UiIHZhbHVlIGlzIGRlbGl2ZXJlZCBwcm9w
ZXJseS4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBl
IGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9v
IgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8vd3d3LmZv
by5jb20vYmFyIgorCitUZXN0aW5nIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBub2RlIHByb3BlcnRp
ZXMgd2hpY2ggZGVsZWdhdGUgdG8gYXR0cmlidXRlIHN0b3JhZ2UgZGVsaXZlciBtdXRhdGlvbnMu
CitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAi
YXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgInNyYyIKK1BB
U1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5h
dHRyaWJ1dGVOYW1lIGlzICJocmVmIgorCitUZXN0aW5nIG11dGF0aW9uIHJlY29yZHMgYXJlIGVu
cXVldWVkIGZvciBhdHRyaWJ1dGVzIGJlZm9yZSBET01TdWJ0cmVlTW9kaWZpZWQgaXMgZGlzcGF0
Y2hlZC4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBl
IGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9v
IgorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25z
WzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJheiIKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9u
L29ic2VydmUtYXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4ZWFiODE4ZTg4MTc2YWRmZjNi
YjViYTI3ZWM4MDVkNWU5ZmVmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsMzIyIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzx0aXRsZT48L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD1kZXNjcmlwdGlvbj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3dpbmRvdy5qc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKK3ZhciBtdXRhdGlvbnM7Cit2YXIgbXV0YXRpb25zMjsKK3ZhciBjYWxs
czsKKworZnVuY3Rpb24gdGVzdEJhc2ljKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2Vy
dmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGJh
c2ljIGFzcGVjdHMgb2YgYXR0cmlidXRlIG9ic2VydmF0aW9uLicpOworCisgICAgICAgIG11dGF0
aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9u
KG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAg
IG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6
IHRydWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAg
ICAgc2V0VGltZW91dChjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSgpIHsKKyAgICAgICAgZGVidWcoJy4u
LmNhbiBhdHRyaWJ1dGUgY2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwnKTsKKworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKworICAgICAgICBtdXRhdGlv
bnMgPSBudWxsOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRpdi5z
ZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXonKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja05vdERl
bGl2ZXJlZEFuZE11dGF0ZU11bHRpcGxlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVj
a05vdERlbGl2ZXJlZEFuZE11dGF0ZU11bHRpcGxlKCkgeworICAgICAgICBkZWJ1ZygnLi4ub2Jz
ZXJ2ZXIuZGlzY29ubmVjdCgpIHNob3VsZCBwcmV2ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0
YXRpb25zLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAg
ICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAg
ICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmF0Jyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1
dGUoJ2JhcicsICdmb28nKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlLW9ic2VydmluZyBh
ZnRlciBkaXNjb25uZWN0IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuJyk7CisKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAg
b2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5l
eHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdFdyb25n
VHlwZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9u
IHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0
IHNwZWNpZnlpbmcgImF0dHJpYnV0ZXMiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0
IGF0dHJpYnV0ZSBjaGFuZ2VzLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAg
ICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZl
ciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg
IG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
ZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAg
ZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlz
aCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAg
c3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgeworICAg
IHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7Cisg
ICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0
aCB0aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRp
b25zLicpOworICAgIAorCQljYWxscyA9IDA7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7Cisg
ICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNl
cnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg
ICAgIG11dGF0aW9ucyA9IG07CisJCQljYWxscysrOworICAgICAgICB9KTsKKworICAgICAgICBv
YnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0
cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVl
IH0pOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNl
dFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJlKCdjYWxs
cycsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAg
ICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsg
YXR0cmlidXRlczogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuc2V0QXR0
cmlidXRlKCdmb28nLCAnYmF6Jyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOwor
fQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMoKSB7CisgICAgdmFyIGRpdjsKKyAg
ICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG11bHRpcGxlIG9ic2VydmVycyBjYW4g
YmUgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIG5vZGUgYW5kIGJvdGggcmVjZWl2ZSBtdXRhdGlvbnMu
Jyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAg
ICAgIH0pOworICAgICAgICBvYnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihm
dW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMyID0gbTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAg
ICAgIG9ic2VydmVyMi5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAg
ICBkaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmlu
aXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
czIubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0uYXR0cmli
dXRlTmFtZScsICciZm9vIicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAg
ICAgIG9ic2VydmVyMi5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAg
cnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0
TmFtZXNwYWNlVVJJKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgImF0dHJpYnV0
ZU5hbWVzcGFjZSIgdmFsdWUgaXMgZGVsaXZlcmVkIHByb3Blcmx5LicpOworICAgICAgICBtdXRh
dGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlv
bihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAg
ICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRy
dWUgfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy5mb28uY29tL2Jh
cicsICdmb28nLCAnYmFyJyk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsgICAgCisg
ICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmli
dXRlTmFtZXNwYWNlJywgJyJodHRwOi8vd3d3LmZvby5jb20vYmFyIicpOyAgICAgICAgCisgICAg
ICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBy
dW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQ
cm9wZXJ0eUFjY2VzcygpIHsKKyAgICB2YXIgaW1nLCBhOworICAgIHZhciBvYnNlcnZlcjsKKwor
ICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG1vZGlm
aWNhdGlvbnMgdG8gbm9kZSBwcm9wZXJ0aWVzIHdoaWNoIGRlbGVnYXRlIHRvIGF0dHJpYnV0ZSBz
dG9yYWdlIGRlbGl2ZXIgbXV0YXRpb25zLicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKKyAgICAgICAgYSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9u
cyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW1nLCB7IGF0
dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoYSwgeyBhdHRyaWJ1
dGVzOiB0cnVlIH0pOworCisgICAgICAgIGltZy5zcmMgPSAnYmF6LnBuZyc7CisgICAgICAgIGEu
aHJlZiA9ICdmb28uaHRtbCc7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRl
TmFtZScsICcic3JjIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAn
ImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRl
TmFtZScsICciaHJlZiInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAg
ICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQo
KTsKK30KKworZnVuY3Rpb24gdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkKCkgewor
ICAgIHZhciBkaXYsIGRpdjIsIHN1YkRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGxp
c3RlbmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5n
IG11dGF0aW9uIHJlY29yZHMgYXJlIGVucXVldWVkIGZvciBhdHRyaWJ1dGVzIGJlZm9yZSBET01T
dWJ0cmVlTW9kaWZpZWQgaXMgZGlzcGF0Y2hlZC4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBu
dWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgZGl2MiA9IGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIHN1YkRpdiA9
IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAg
ICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7Cisg
ICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBsaXN0ZW5l
ciA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGRpdjIuc2V0QXR0cmlidXRlKCdiYXonLCAn
YmF0Jyk7CisgICAgICAgIH0KKworICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignRE9NU3Vi
dHJlZU1vZGlmaWVkJywgbGlzdGVuZXIpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHN1YkRp
diwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdjIs
IHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKworICAgICAgICBzdWJEaXYuc2V0QXR0cmlidXRlKCdm
b28nLCAnYmFyJyk7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5n
dGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJp
YnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScs
ICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJp
YnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScs
ICciYmF6IicpOworICAgICAgICBkaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7Cisg
ICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKKyAgICAgICAgb2JzZXJ2ZXIu
ZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7
CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KK3ZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RX
cm9uZ1R5cGUsIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbiwgdGVzdE11bHRpcGxlT2JzZXJ2ZXJz
LCB0ZXN0TmFtZXNwYWNlVVJJLCB0ZXN0UHJvcGVydHlBY2Nlc3MsIHRlc3RPcmRlcmluZ1dydERP
TVN1YnRyZWVNb2RpZmllZF07Cit2YXIgdGVzdEluZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5l
eHRUZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRl
c3RzW3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9
CisKK2Rlc2NyaXB0aW9uKCdUZXN0IHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyJyk7CisKK2lmICghd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVz
dEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpJyk7
CitlbHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>