<?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>68955</bug_id>
          
          <creation_ts>2011-09-27 16:35:28 -0700</creation_ts>
          <short_desc>[MutationObservers] Implement WebKitMutationObserver.observe for childList changes</short_desc>
          <delta_ts>2011-10-21 12:21:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          <dependson>68956</dependson>
          <blocked>68729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>rafaelw</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>474345</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-09-27 16:35:28 -0700</bug_when>
    <thetext>[MutationObservers] Implement WebKitMutationObserver.observe for childList changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486448</commentid>
    <comment_count>1</comment_count>
      <attachid>111531</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-18 17:07:53 -0700</bug_when>
    <thetext>Created attachment 111531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486455</commentid>
    <comment_count>2</comment_count>
      <attachid>111531</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-18 17:13:00 -0700</bug_when>
    <thetext>Comment on attachment 111531
Patch

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

&gt; LayoutTests/fast/mutation/observe-childList-expected.txt:1
&gt; +Test the constructor of WebKitMutationObserver

Need to fix this boilerplate

&gt; LayoutTests/fast/mutation/observe-childList.html:251
&gt; +description(&apos;Test the constructor of WebKitMutationObserver&apos;);

This is the corresponding line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486459</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 17:17:39 -0700</bug_when>
    <thetext>Attachment 111531 did not pass style-queue:

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

Source/WebCore/WebCore.vcproj/WebCore.vcproj:25583:  mismatched tag  [xml/syntax] [5]
Source/WebCore/ChangeLog:19:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486461</commentid>
    <comment_count>4</comment_count>
      <attachid>111535</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-18 17:24:28 -0700</bug_when>
    <thetext>Created attachment 111535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486467</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 17:29:57 -0700</bug_when>
    <thetext>Attachment 111535 did not pass style-queue:

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

Source/WebCore/WebCore.vcproj/WebCore.vcproj:25583:  mismatched tag  [xml/syntax] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486483</commentid>
    <comment_count>6</comment_count>
      <attachid>111535</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-18 17:56:05 -0700</bug_when>
    <thetext>Comment on attachment 111535
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Test: fast/mutation/observe-childList.html

Nit: This line should appear after the description.

&gt; Source/WebCore/dom/MutationScope.cpp:46
&gt; +namespace {

We don&apos;t normally use anonymous namespace in WebCore.

&gt; Source/WebCore/dom/MutationScope.cpp:48
&gt; +class ChildListAccumulation {

I&apos;d call this class MutatedChildList.

&gt; Source/WebCore/dom/MutationScope.cpp:73
&gt; +class ChildListAccumulator {

I&apos;d call this class ChildListMutationList.

&gt; Source/WebCore/dom/MutationScope.cpp:112
&gt; +        dispatch();

I don&apos;t think scoping level is guaranteed to be 0 at this point. childAdded could be called inside a mutation, load, unload, beforeunload, etc... event listeners could have modified DOM. event listener. r- because of this.

&gt; Source/WebCore/dom/MutationScope.cpp:118
&gt; +        ASSERT(m_nextSibling == child-&gt;nextSibling()); // Additions must be in-order.

Why is this condition guaranteed?

&gt; Source/WebCore/dom/MutationScope.cpp:131
&gt; +    ASSERT(isEmpty() || m_nextSibling.get() == child); // Removals must be continuous and in-order.

Again, I don&apos;t quite understand what guarantees this condition.

&gt; Source/WebCore/dom/MutationScope.cpp:153
&gt; +    RefPtr&lt;MutationRecord&gt; mutation = MutationRecord::createChildList(m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling, m_nextSibling);

Maybe split it into two lines?

&gt; Source/WebCore/dom/MutationScope.cpp:155
&gt; +    for (Vector&lt;WebKitMutationObserver*&gt;::iterator iter = m_observers.begin(); iter != m_observers.end(); ++iter)
&gt; +        (*iter)-&gt;enqueueMutationRecord(mutation);

Please use size_t i instead.

&gt; Source/WebCore/dom/MutationScope.cpp:182
&gt; +// Can this get called

I don&apos;t think this comment adds any information. Remove?

&gt; Source/WebCore/dom/MutationScope.cpp:193
&gt; +    OwnPtr&lt;ChildListAccumulator&gt; instance = adoptPtr(new ChildListAccumulator);
&gt; +    s_instance = instance.leakPtr();

This can be done in one line:
s_instance = adoptPtr(new ChildListAccumulator).leakPtr().

&gt; Source/WebCore/dom/MutationScope.cpp:207
&gt; +    ASSERT(m_accumulations.contains(target));

Why can we assert that m_accumulations always contain the target?

&gt; Source/WebCore/dom/MutationScope.cpp:215
&gt; +    ASSERT(m_accumulations.contains(target));

Ditto.

&gt; Source/WebCore/dom/MutationScope.cpp:251
&gt; +    if (record)
&gt; +        record-&gt;dispatch();

I&apos;m getting confused about this. Why do we need this scoping object all if we&apos;re implemented the end-of-micro-task timing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486539</commentid>
    <comment_count>7</comment_count>
      <attachid>111559</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-18 21:12:22 -0700</bug_when>
    <thetext>Created attachment 111559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486540</commentid>
    <comment_count>8</comment_count>
      <attachid>111535</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-18 21:13:02 -0700</bug_when>
    <thetext>Comment on attachment 111535
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        Test: fast/mutation/observe-childList.html
&gt; 
&gt; Nit: This line should appear after the description.

done

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:46
&gt;&gt; +namespace {
&gt; 
&gt; We don&apos;t normally use anonymous namespace in WebCore.

Removed.

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:48
&gt;&gt; +class ChildListAccumulation {
&gt; 
&gt; I&apos;d call this class MutatedChildList.

done

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:73
&gt;&gt; +class ChildListAccumulator {
&gt; 
&gt; I&apos;d call this class ChildListMutationList.

done

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:112
&gt;&gt; +        dispatch();
&gt; 
&gt; I don&apos;t think scoping level is guaranteed to be 0 at this point. childAdded could be called inside a mutation, load, unload, beforeunload, etc... event listeners could have modified DOM. event listener. r- because of this.

Scoping level doesn&apos;t need to be zero. The idea here is that this class is making an &quot;attempt&quot; to roll up all adds and removes into a single chidList mutation, but it is tolerant of failing -- at which point it will dispatch() all accumulated adds/removes as a single mutation, clear it&apos;s state, and then restart the accumulation.

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:118
&gt;&gt; +        ASSERT(m_nextSibling == child-&gt;nextSibling()); // Additions must be in-order.
&gt; 
&gt; Why is this condition guaranteed?

It&apos;s not, but as with above, I&apos;ll move this and dispatch if this occurs.

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:131
&gt;&gt; +    ASSERT(isEmpty() || m_nextSibling.get() == child); // Removals must be continuous and in-order.
&gt; 
&gt; Again, I don&apos;t quite understand what guarantees this condition.

This shouldn&apos;t occur based on the current code. If it does, it&apos;s still correct to dispatch() and start another mutation record, but the ASSERT will hopefully alert whomever is making the change that the implementation of the accumulator needs to be tolerant of the new pattern.

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:153
&gt;&gt; +    RefPtr&lt;MutationRecord&gt; mutation = MutationRecord::createChildList(m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling, m_nextSibling);
&gt; 
&gt; Maybe split it into two lines?

done. not sure if this is right. couldn&apos;t find discussion in style guide.

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:155
&gt;&gt; +        (*iter)-&gt;enqueueMutationRecord(mutation);
&gt; 
&gt; Please use size_t i instead.

done

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:182
&gt;&gt; +// Can this get called
&gt; 
&gt; I don&apos;t think this comment adds any information. Remove?

woops. good catch.

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:193
&gt;&gt; +    s_instance = instance.leakPtr();
&gt; 
&gt; This can be done in one line:
&gt; s_instance = adoptPtr(new ChildListAccumulator).leakPtr().

done

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:207
&gt;&gt; +    ASSERT(m_accumulations.contains(target));
&gt; 
&gt; Why can we assert that m_accumulations always contain the target?

Both here and below, the target will have been entered into the map in the ctor of the MutationScope. This assert is guarding against future misuse of this class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486541</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 21:14:43 -0700</bug_when>
    <thetext>Attachment 111559 did not pass style-queue:

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

Source/WebCore/WebCore.vcproj/WebCore.vcproj:25583:  mismatched tag  [xml/syntax] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486542</commentid>
    <comment_count>10</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-18 21:23:15 -0700</bug_when>
    <thetext>Backing up a bit: the design of mutation observers is such that a goal is to minimize the *number* of mutation records which are delivered.

For instance, if an innerHTML assignment destroys 1000 nodes, and create 1000 nodes, we&apos;d like to represent that as 1 childList mutation record -- as opposed to 2000 records.

The need for ChildListMutationScope isn&apos;t related to the timing of the delivery of records, it&apos;s related to our goal to represent DOM operations in as few mutation records as we can.

The current webkit code implements many DOM operations in terms of others. For instance: removeChild and appendChild are directly callable from script. However, both are used by the implementation of innerHTML.

In order to avoid having to pass down the intent of any given call to lower methods (like removeChild) -- i..e should the removeChild dispatch a MutationRecord, or is this call conceptually a part of a larger operation, we need the MutationScope stack-based approach.

As to the questions of how MutationScope (and it&apos;s classes) are designed. The idea is that the general pattern of higher level DOM operations in webkit is:

1) remove any neccessary children - going in childList order
2) add any neccesary children -- going in childList order

The assertions attempt to capture the assumptions in the code right now, and document that if the assertions start failing, it means that we&apos;re likely dispatching more mutation records than necessary.

However, if the assertions fail, the code can still fall back to just dispatching more than one record for each root-level mutation scope.

I realize this is a bit complex. If you care do discuss further, let&apos;s connect online. If you have ideas how to simplify this approach, I&apos;m all ears.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486545</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-18 21:31:16 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111535&amp;action=review
&gt; &gt;&gt; Source/WebCore/dom/MutationScope.cpp:112
&gt; &gt;&gt; +        dispatch();
&gt; &gt; 
&gt; &gt; I don&apos;t think scoping level is guaranteed to be 0 at this point. childAdded could be called inside a mutation, load, unload, beforeunload, etc... event listeners could have modified DOM. event listener. r- because of this.
&gt; 
&gt; Scoping level doesn&apos;t need to be zero. The idea here is that this class is making an &quot;attempt&quot; to roll up all adds and removes into a single chidList mutation, but it is tolerant of failing -- at which point it will dispatch() all accumulated adds/removes as a single mutation, clear it&apos;s state, and then restart the accumulation.

I see. That makes me think that we might want to rename this class to reflect this idea.  How about ChildListMutationAggregator or ChildListMutationAccumulator? Or maybe HeuristicMutationAggregator? Given the term &quot;scope&quot; has been used in WebCore with a connotation of the RAII idiom, the fact this class can invoke observers even when the scoping-level is non-zero might quite misleading.

&gt; &gt;&gt; Source/WebCore/dom/MutationScope.cpp:118
&gt; &gt;&gt; +        ASSERT(m_nextSibling == child-&gt;nextSibling()); // Additions must be in-order.
&gt; &gt; 
&gt; &gt; Why is this condition guaranteed?
&gt; 
&gt; It&apos;s not, but as with above, I&apos;ll move this and dispatch if this occurs.

Okay that makes sense. On somewhat related note, we might want to reconsider the function name &quot;dispatch&quot; since dispatch/fire mean very specific things in DOM event spec. Maybe invokeObservers or notifyObservers?

&gt; &gt;&gt; Source/WebCore/dom/MutationScope.cpp:131
&gt; &gt;&gt; +    ASSERT(isEmpty() || m_nextSibling.get() == child); // Removals must be continuous and in-order.
&gt; &gt; 
&gt; &gt; Again, I don&apos;t quite understand what guarantees this condition.
&gt; 
&gt; This shouldn&apos;t occur based on the current code. If it does, it&apos;s still correct to dispatch() and start another mutation record, but the ASSERT will hopefully alert whomever is making the change that the implementation of the accumulator needs to be tolerant of the new pattern.

I see. Might be nice to add a comment saying why this should never happen referring to call sites of this function.

&gt; &gt;&gt; Source/WebCore/dom/MutationScope.cpp:207
&gt; &gt;&gt; +    ASSERT(m_accumulations.contains(target));
&gt; &gt; 
&gt; &gt; Why can we assert that m_accumulations always contain the target?
&gt; 
&gt; Both here and below, the target will have been entered into the map in the ctor of the MutationScope. This assert is guarding against future misuse of this class

Ah, ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486548</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-18 21:38:57 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Backing up a bit: the design of mutation observers is such that a goal is to minimize the *number* of mutation records which are delivered.
&gt; 
&gt; For instance, if an innerHTML assignment destroys 1000 nodes, and create 1000 nodes, we&apos;d like to represent that as 1 childList mutation record -- as opposed to 2000 records.

I agree that this is a very desirable behavior.

&gt; The need for ChildListMutationScope isn&apos;t related to the timing of the delivery of records, it&apos;s related to our goal to represent DOM operations in as few mutation records as we can.

Okay. I think we want to reconsider the name &quot;Scope&quot; as I suggested in my previous comment to make this semantics clear.

&gt; As to the questions of how MutationScope (and it&apos;s classes) are designed. The idea is that the general pattern of higher level DOM operations in webkit is:
&gt; 
&gt; 1) remove any neccessary children - going in childList order
&gt; 2) add any neccesary children -- going in childList order
&gt; 
&gt; The assertions attempt to capture the assumptions in the code right now, and document that if the assertions start failing, it means that we&apos;re likely dispatching more mutation records than necessary.

That&apos;s good but I think we need some comments indicating why those assertions are true.

&gt; However, if the assertions fail, the code can still fall back to just dispatching more than one record for each root-level mutation scope.

That&apos;s a very nice fallback. Given how much bugs we&apos;ve had around mutation events I wouldn&apos;t be surprised even if we overlooked something. So having a good fallback behavior is very important.

&gt; I realize this is a bit complex. If you care do discuss further, let&apos;s connect online. If you have ideas how to simplify this approach, I&apos;m all ears.

Thanks for the clarification. I think I understand the patch much better now.

I have one question. Is there a way to avoid adding nodes to m_accumulation when they are not observed by anyone?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486810</commentid>
    <comment_count>13</comment_count>
      <attachid>111625</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-19 08:24:49 -0700</bug_when>
    <thetext>Created attachment 111625
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486817</commentid>
    <comment_count>14</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-19 08:32:47 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111535&amp;action=review
&gt; &gt; &gt;&gt; Source/WebCore/dom/MutationScope.cpp:112
&gt; &gt; &gt;&gt; +        dispatch();
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think scoping level is guaranteed to be 0 at this point. childAdded could be called inside a mutation, load, unload, beforeunload, etc... event listeners could have modified DOM. event listener. r- because of this.
&gt; &gt; 
&gt; &gt; Scoping level doesn&apos;t need to be zero. The idea here is that this class is making an &quot;attempt&quot; to roll up all adds and removes into a single chidList mutation, but it is tolerant of failing -- at which point it will dispatch() all accumulated adds/removes as a single mutation, clear it&apos;s state, and then restart the accumulation.
&gt; 
&gt; I see. That makes me think that we might want to rename this class to reflect this idea.  How about ChildListMutationAggregator or ChildListMutationAccumulator? Or maybe HeuristicMutationAggregator? Given the term &quot;scope&quot; has been used in WebCore with a connotation of the RAII idiom, the fact this class can invoke observers even when the scoping-level is non-zero might quite misleading.

I think &quot;scope&quot; is still appropriate. Producing a mutation record prior to the outer-most scope exiting is considering unexpected behavior here. The semantics of &quot;doing something when the outer scope exits&quot; is consistent, at least with the existing scope mechanism for mutation events.

Even if a record is generated prior, a record will always be generated when the outer scope exits, and it is a conceptual boundary point.

&gt; 
&gt; &gt; &gt;&gt; Source/WebCore/dom/MutationScope.cpp:118
&gt; &gt; &gt;&gt; +        ASSERT(m_nextSibling == child-&gt;nextSibling()); // Additions must be in-order.
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this condition guaranteed?
&gt; &gt; 
&gt; &gt; It&apos;s not, but as with above, I&apos;ll move this and dispatch if this occurs.
&gt; 
&gt; Okay that makes sense. On somewhat related note, we might want to reconsider the function name &quot;dispatch&quot; since dispatch/fire mean very specific things in DOM event spec. Maybe invokeObservers or notifyObservers?

Agreed. I&apos;ve renamed it to enqueueMutationRecord. To your point, no script is invoked here and all that is happening is the production of a record and it being enqueued to observers delivery queues.

&gt; 
&gt; &gt; &gt;&gt; Source/WebCore/dom/MutationScope.cpp:131
&gt; &gt; &gt;&gt; +    ASSERT(isEmpty() || m_nextSibling.get() == child); // Removals must be continuous and in-order.
&gt; &gt; &gt; 
&gt; &gt; &gt; Again, I don&apos;t quite understand what guarantees this condition.
&gt; &gt; 
&gt; &gt; This shouldn&apos;t occur based on the current code. If it does, it&apos;s still correct to dispatch() and start another mutation record, but the ASSERT will hopefully alert whomever is making the change that the implementation of the accumulator needs to be tolerant of the new pattern.
&gt; 
&gt; I see. Might be nice to add a comment saying why this should never happen referring to call sites of this function.

I think there are going to be too many call sites for this (more will be coming in another patch). I&apos;ve added comments to the class that hopefully clarify the assumptions.

&gt; 
&gt; &gt; &gt;&gt; Source/WebCore/dom/MutationScope.cpp:207
&gt; &gt; &gt;&gt; +    ASSERT(m_accumulations.contains(target));
&gt; &gt; &gt; 
&gt; &gt; &gt; Why can we assert that m_accumulations always contain the target?
&gt; &gt; 
&gt; &gt; Both here and below, the target will have been entered into the map in the ctor of the MutationScope. This assert is guarding against future misuse of this class
&gt; 
&gt; Ah, ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486818</commentid>
    <comment_count>15</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-19 08:36:44 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; Backing up a bit: the design of mutation observers is such that a goal is to minimize the *number* of mutation records which are delivered.
&gt; &gt; 
&gt; &gt; For instance, if an innerHTML assignment destroys 1000 nodes, and create 1000 nodes, we&apos;d like to represent that as 1 childList mutation record -- as opposed to 2000 records.
&gt; 
&gt; I agree that this is a very desirable behavior.
&gt; 
&gt; &gt; The need for ChildListMutationScope isn&apos;t related to the timing of the delivery of records, it&apos;s related to our goal to represent DOM operations in as few mutation records as we can.
&gt; 
&gt; Okay. I think we want to reconsider the name &quot;Scope&quot; as I suggested in my previous comment to make this semantics clear.
&gt; 
&gt; &gt; As to the questions of how MutationScope (and it&apos;s classes) are designed. The idea is that the general pattern of higher level DOM operations in webkit is:
&gt; &gt; 
&gt; &gt; 1) remove any neccessary children - going in childList order
&gt; &gt; 2) add any neccesary children -- going in childList order
&gt; &gt; 
&gt; &gt; The assertions attempt to capture the assumptions in the code right now, and document that if the assertions start failing, it means that we&apos;re likely dispatching more mutation records than necessary.
&gt; 
&gt; That&apos;s good but I think we need some comments indicating why those assertions are true.
&gt; 
&gt; &gt; However, if the assertions fail, the code can still fall back to just dispatching more than one record for each root-level mutation scope.
&gt; 
&gt; That&apos;s a very nice fallback. Given how much bugs we&apos;ve had around mutation events I wouldn&apos;t be surprised even if we overlooked something. So having a good fallback behavior is very important.
&gt; 
&gt; &gt; I realize this is a bit complex. If you care do discuss further, let&apos;s connect online. If you have ideas how to simplify this approach, I&apos;m all ears.
&gt; 
&gt; Thanks for the clarification. I think I understand the patch much better now.
&gt; 
&gt; I have one question. Is there a way to avoid adding nodes to m_accumulation when they are not observed by anyone?

Yes. This is already happening. When the outer-most scope begins, a check is made to see if there are any observers at that node of type childList, if not m_accumulations has null added as its accumulation, and thus all inner scopes with the same target and child change calls simple exit after a single constant-time lookup for the accumulator.

See line 238.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486894</commentid>
    <comment_count>16</comment_count>
      <attachid>111650</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-19 11:22:57 -0700</bug_when>
    <thetext>Created attachment 111650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486902</commentid>
    <comment_count>17</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-19 11:33:19 -0700</bug_when>
    <thetext>Last patch adds some new tests and catches one place in ContainerNode where MutationScope needed to be used to coalesce mutations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486913</commentid>
    <comment_count>18</comment_count>
      <attachid>111656</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-19 12:17:41 -0700</bug_when>
    <thetext>Created attachment 111656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486914</commentid>
    <comment_count>19</comment_count>
      <attachid>111535</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-19 12:17:52 -0700</bug_when>
    <thetext>Comment on attachment 111535
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/MutationScope.cpp:46
&gt;&gt;&gt; +namespace {
&gt;&gt; 
&gt;&gt; We don&apos;t normally use anonymous namespace in WebCore.
&gt; 
&gt; Removed.

I asked Rafael to put this back in, it&apos;s required to ensure that we don&apos;t violate the One Definition Rule.  By my count, there are already 86 anonymous namespaces in WebCore, so this is far from uncommon.  And it&apos;s the only way to limit a class to file scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486915</commentid>
    <comment_count>20</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-19 12:19:33 -0700</bug_when>
    <thetext>Last patch restores namespace and reduces hash lookups via iterators</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486964</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-19 13:39:33 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt;&gt;&gt; Source/WebCore/dom/MutationScope.cpp:46
&gt; &gt;&gt;&gt; +namespace {
&gt; &gt;&gt; 
&gt; &gt;&gt; We don&apos;t normally use anonymous namespace in WebCore.
&gt; &gt; 
&gt; &gt; Removed.
&gt; 
&gt; I asked Rafael to put this back in, it&apos;s required to ensure that we don&apos;t violate the One Definition Rule.  By my count, there are already 86 anonymous namespaces in WebCore, so this is far from uncommon.  And it&apos;s the only way to limit a class to file scope.

Those 86 anonymous namespaces should probably all go away. The same thing with index / iterator argument :( Maybe we should add that to the style guideline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486996</commentid>
    <comment_count>22</comment_count>
      <attachid>111656</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-19 14:11:46 -0700</bug_when>
    <thetext>Comment on attachment 111656
Patch

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

&gt; Source/WebCore/dom/MutationScope.cpp:52
&gt; +class RecordAccumulator {

I&apos;d prefer a fully qualified name such as MutationRecordAccumulator. I still think it should be called aggregator because it&apos;s not accumulating records. It&apos;s accumulating a list of mutated nodes in order to aggregate mutation records.

&gt; Source/WebCore/dom/MutationScope.cpp:77
&gt; +class AccumulationManager {

I think the name AccumulationManager is too generic. Talking with eseidel to come up with a better name on IRC now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487958</commentid>
    <comment_count>23</comment_count>
      <attachid>111656</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-20 15:56:15 -0700</bug_when>
    <thetext>Comment on attachment 111656
Patch

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

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:52
&gt;&gt; +class RecordAccumulator {
&gt; 
&gt; I&apos;d prefer a fully qualified name such as MutationRecordAccumulator. I still think it should be called aggregator because it&apos;s not accumulating records. It&apos;s accumulating a list of mutated nodes in order to aggregate mutation records.

done

&gt;&gt; Source/WebCore/dom/MutationScope.cpp:77
&gt;&gt; +class AccumulationManager {
&gt; 
&gt; I think the name AccumulationManager is too generic. Talking with eseidel to come up with a better name on IRC now.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487963</commentid>
    <comment_count>24</comment_count>
      <attachid>111864</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-20 16:04:59 -0700</bug_when>
    <thetext>Created attachment 111864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487966</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-20 16:08:35 -0700</bug_when>
    <thetext>Attachment 111864 did not pass style-queue:

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

Source/WebCore/dom/ContainerNode.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487981</commentid>
    <comment_count>26</comment_count>
      <attachid>111869</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-20 16:28:01 -0700</bug_when>
    <thetext>Created attachment 111869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487983</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-20 16:30:56 -0700</bug_when>
    <thetext>Attachment 111869 did not pass style-queue:

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

Source/WebCore/dom/ContainerNode.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487996</commentid>
    <comment_count>28</comment_count>
      <attachid>111864</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-20 16:46:19 -0700</bug_when>
    <thetext>Comment on attachment 111864
Patch

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

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:114
&gt; +bool ChildListMutationAccumulator::isAddedNodeInOrder(Node* child)

I&apos;d add inline keyword here although I&apos;m certain most optimizing compilers will do it automatically.

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:132
&gt; +    m_addedNodes.append(child);
&gt; +    m_lastAdded = child;

If you reverse the order, you don&apos;t need to define a local child and you can do:
m_lastAdded = child;
m_addedNodes.append(m_lastAdded);

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:135
&gt; +bool ChildListMutationAccumulator::isRemovedNodeInOrder(Node* child)

Ditto about the inline keyword.

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:142
&gt; +    RefPtr&lt;Node&gt; child = prpChild;

You don&apos;t need a local child here at all.

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:252
&gt; +        m_accumulations.set(target, new ChildListMutationAccumulator(target, observers));

Oh oops, I didn&apos;t catch this in my previous review but we need to be using HashMap&lt;Node*, OwnPtr&lt;ChildListMutationAccumulator*&gt; &gt; instead for m_accumulations.set. &quot;Raw new&quot; is strictly disallowed in WebCore. Sorry for not noticing this earlier :( r- due to this.

I&apos;m not even sure if HashMap supports having OwnPtr though. I guess we&apos;d have to try it.

&gt; Source/WebCore/dom/ContainerNode.cpp:27
&gt;  #include &quot;MemoryCache.h&quot;

Could you move this line right above where MutationEvent.h is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488010</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-20 17:10:48 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; Source/WebCore/dom/ChildListMutationScope.cpp:252
&gt; &gt; +        m_accumulations.set(target, new ChildListMutationAccumulator(target, observers));
&gt; 
&gt; Oh oops, I didn&apos;t catch this in my previous review but we need to be using HashMap&lt;Node*, OwnPtr&lt;ChildListMutationAccumulator*&gt; &gt; instead for m_accumulations.set. &quot;Raw new&quot; is strictly disallowed in WebCore. Sorry for not noticing this earlier :( r- due to this.
&gt; 
&gt; I&apos;m not even sure if HashMap supports having OwnPtr though. I guess we&apos;d have to try it.

Okay, it apparently doesn&apos;t :( So let&apos;s either make ChildListMutationAccumulator ref-counted or add a comment that m_accumulations should use OwnPtr but we can&apos;t because HashMap doesn&apos;t support OwnPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488504</commentid>
    <comment_count>30</comment_count>
      <attachid>111991</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-21 11:07:54 -0700</bug_when>
    <thetext>Created attachment 111991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488505</commentid>
    <comment_count>31</comment_count>
      <attachid>111864</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-21 11:08:30 -0700</bug_when>
    <thetext>Comment on attachment 111864
Patch

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

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:114
&gt;&gt; +bool ChildListMutationAccumulator::isAddedNodeInOrder(Node* child)
&gt; 
&gt; I&apos;d add inline keyword here although I&apos;m certain most optimizing compilers will do it automatically.

done

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:132
&gt;&gt; +    m_lastAdded = child;
&gt; 
&gt; If you reverse the order, you don&apos;t need to define a local child and you can do:
&gt; m_lastAdded = child;
&gt; m_addedNodes.append(m_lastAdded);

I feel like doing this makes the code less clear. Also it means that the PRP is accessed a bunch via get() which I know is safe, but seems really brittle to me.

From Darin&apos;s discussion: &quot;Unless the use of the argument is very simple, the argument should be transferred to a RefPtr at the start of the function; the argument can be named with a “prp” prefix in such cases.&quot;

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:135
&gt;&gt; +bool ChildListMutationAccumulator::isRemovedNodeInOrder(Node* child)
&gt; 
&gt; Ditto about the inline keyword.

done

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:142
&gt;&gt; +    RefPtr&lt;Node&gt; child = prpChild;
&gt; 
&gt; You don&apos;t need a local child here at all.

ditto response from above

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:252
&gt;&gt; +        m_accumulations.set(target, new ChildListMutationAccumulator(target, observers));
&gt; 
&gt; Oh oops, I didn&apos;t catch this in my previous review but we need to be using HashMap&lt;Node*, OwnPtr&lt;ChildListMutationAccumulator*&gt; &gt; instead for m_accumulations.set. &quot;Raw new&quot; is strictly disallowed in WebCore. Sorry for not noticing this earlier :( r- due to this.
&gt; 
&gt; I&apos;m not even sure if HashMap supports having OwnPtr though. I guess we&apos;d have to try it.

done. using RefPtr

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:28
&gt;&gt; +#include &quot;ChildListMutationScope.h&quot;
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488518</commentid>
    <comment_count>32</comment_count>
      <attachid>111991</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-21 11:22:40 -0700</bug_when>
    <thetext>Comment on attachment 111991
Patch

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

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:53
&gt; +class ChildListMutationAccumulator : public RefCounted&lt;WebKitMutationObserver&gt; {

I&apos;m totally confused. Why is RefCounted templated with WebKitMutationObserver?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488521</commentid>
    <comment_count>33</comment_count>
      <attachid>111991</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-21 11:24:56 -0700</bug_when>
    <thetext>Comment on attachment 111991
Patch

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

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:124
&gt; +    if (!isAddedNodeInOrder(child.get()))

Should we add an assertion here?

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:145
&gt; +    ASSERT(m_addedNodes.isEmpty() &amp;&amp; isRemovedNodeInOrder(child.get()));

you should be calling isRemovedNodeInOrder here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488524</commentid>
    <comment_count>34</comment_count>
      <attachid>111991</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-21 11:28:18 -0700</bug_when>
    <thetext>Comment on attachment 111991
Patch

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

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:169
&gt; +            m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling, m_nextSibling);

Indentation here seems wrong. should be indented by exactly 8 spaces in the total (4 spaces from where RefPtr is)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488525</commentid>
    <comment_count>35</comment_count>
      <attachid>111991</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-21 11:28:28 -0700</bug_when>
    <thetext>Comment on attachment 111991
Patch

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

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:124
&gt;&gt; +    if (!isAddedNodeInOrder(child.get()))
&gt; 
&gt; Should we add an assertion here?

I think there is currently one case where this legitimately happens and it&apos;s fine to dispatch the record.

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:145
&gt;&gt; +    ASSERT(m_addedNodes.isEmpty() &amp;&amp; isRemovedNodeInOrder(child.get()));
&gt; 
&gt; you should be calling isRemovedNodeInOrder here.

it is called. there are two things being asserted here: that no additions have taken place yet, and that the removal is taking place in order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488528</commentid>
    <comment_count>36</comment_count>
      <attachid>111995</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-21 11:32:40 -0700</bug_when>
    <thetext>Created attachment 111995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488531</commentid>
    <comment_count>37</comment_count>
      <attachid>111991</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-21 11:34:35 -0700</bug_when>
    <thetext>Comment on attachment 111991
Patch

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

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:53
&gt;&gt; +class ChildListMutationAccumulator : public RefCounted&lt;WebKitMutationObserver&gt; {
&gt; 
&gt; I&apos;m totally confused. Why is RefCounted templated with WebKitMutationObserver?

Ack. Copy paste error. Why didn&apos;t I get compile errors on this? Fixed.

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:169
&gt;&gt; +            m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling, m_nextSibling);
&gt; 
&gt; Indentation here seems wrong. should be indented by exactly 8 spaces in the total (4 spaces from where RefPtr is)

Now four spaces -- but that seems wrong to me. 4 spaces suggests a new block level. I can&apos;t find anything in the style guide about breaking long lines. The only thing I see is that statements should all be on one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488548</commentid>
    <comment_count>38</comment_count>
      <attachid>112000</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-21 12:10:00 -0700</bug_when>
    <thetext>Created attachment 112000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488553</commentid>
    <comment_count>39</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-21 12:19:01 -0700</bug_when>
    <thetext>Committed r98121: &lt;http://trac.webkit.org/changeset/98121&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488557</commentid>
    <comment_count>40</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-21 12:20:31 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Committed r98121: &lt;http://trac.webkit.org/changeset/98121&gt;

Landed for rafaelw with final changes approved by rniwa.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488558</commentid>
    <comment_count>41</comment_count>
      <attachid>111991</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-21 12:21:04 -0700</bug_when>
    <thetext>Comment on attachment 111991
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:124
&gt;&gt;&gt; +    if (!isAddedNodeInOrder(child.get()))
&gt;&gt; 
&gt;&gt; Should we add an assertion here?
&gt; 
&gt; I think there is currently one case where this legitimately happens and it&apos;s fine to dispatch the record.

I couldn&apos;t find the case. I added the ASSERT back. I&apos;m sure we&apos;ll find the case again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111531</attachid>
            <date>2011-10-18 17:07:53 -0700</date>
            <delta_ts>2011-10-18 17:24:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111018170752.patch</filename>
            <type>text/plain</type>
            <size>43423</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4MDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZmZjNDhkNDlhYzNkYWE2
MDRlN2ZjMDZiMmE1NjNiZmZiYjM0Y2E2Li5kMDk5M2M2NDE3MzhhOTMzMTM1NmRkY2FkODI5OTZj
OTEyNzU5YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdoaWNo
IG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVtb3Zh
bHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hpbGRM
aXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMg
cGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2Ugd2hpY2ggY2FuIGJlIGNvYWxlc2NlZCAo
aXQgb25seQorICAgICAgICBjb3ZlcnMgQ29udGFpbmVyTm9kZS4qLCBhbmQgTm9kZS5pbm5lckhU
TUwvaW5uZXJUZXh0KS4gQSBzZXBhcmF0ZSBidWcsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDM4NSwgaGFzIGJlZW4gb3BlbmVkIHRvIHRyYWNrIHRo
ZQorICAgICAgICByZW1haW5pbmcgY2FzZXMuCisKKwkqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2Rl
OjppbnNlcnRCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVwbGFj
ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OndpbGxSZW1vdmVDaGlsZHJlbik6CisgICAgICAg
IChXZWJDb3JlOjpkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OmRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjplbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKToK
KyAgICAgICAgKiBkb20vTXV0YXRpb25TY29wZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlz
dEFjY3VtdWxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6fkNoaWxkTGlzdEFjY3VtdWxhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNo
aWxkTGlzdEFjY3VtdWxhdGlvbjo6d2lsbFJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpkaXNwYXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9u
OjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2hp
bGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6Q2hpbGRMaXN0QWNjdW11
bGF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExp
c3RBY2N1bXVsYXRvcjo6fkNoaWxkTGlzdEFjY3VtdWxhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1
bXVsYXRvcjo6aW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0
aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp3aWxsUmVtb3Zl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExp
c3RBY2N1bXVsYXRvcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6OmRlY3JlbWVudFNj
b3BpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpD
aGlsZExpc3RNdXRhdGlvblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0
aW9uU2NvcGU6On5DaGlsZExpc3RNdXRhdGlvblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
aWxkTGlzdE11dGF0aW9uU2NvcGU6OmNoaWxkQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hp
bGRMaXN0TXV0YXRpb25TY29wZTo6d2lsbFJlbW92ZUNoaWxkKToKKyAgICAgICAgKiBkb20vTXV0
YXRpb25TY29wZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpzZXRUZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpy
ZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUpOgorICAgICAgICAqIGRvbS9XZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OnJlcGxhY2VDaGlsZHJlbldpdGhUZXh0KToKKwogMjAxMS0xMC0xOCAgQWRhbSBLbGVp
biAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIElt
cGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNoYXJhY3RlckRhdGEg
Y2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlNDk2Y2Y4ODljMGNlOGJhZDE5YTA5OGZm
ZWZiN2E4OTk0NDI2OTcyLi4zODI4MTUwYWRmNzI2NDRkZWU1OWI2NjBjMzVkMjBhZWRiMjY3NDVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTYzLDYgKzU2Myw3IEBAIFNFVChXZWJDb3JlX1NP
VVJDRVMKICAgICBkb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCiAgICAgZG9tL011dGF0aW9uRXZl
bnQuY3BwCiAgICAgZG9tL011dGF0aW9uUmVjb3JkLmNwcAorICAgIGRvbS9NdXRhdGlvblNjb3Bl
LmNwcAogICAgIGRvbS9OYW1lZE5vZGVNYXAuY3BwCiAgICAgZG9tL05hbWVOb2RlTGlzdC5jcHAK
ICAgICBkb20vTm9kZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGNmZmEw
ODNhOTA2NzI1ZjVjMmE2Zjk3ZWU4NjBlMDQ0MTBmZDc5MDEuLmZhOWFjMjBkMTFiYWZmNDU5Y2Y0
ZTFiNjNjODk5Mjg0YjliNjBhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
MTI1Myw2ICsxMjUzLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25FdmVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaCBcCisJU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uU2NvcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25TY29wZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZU5vZGVMaXN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjc0MjI2NTM5ZjgwZWFmNTQzNjU4
ODYxZDIwNmQyMGRmMjZhYTlhMi4uMGFhMTI3OGY5OGQwOTI0NGRhYmJiN2M3ODgyYWRjOGU3MmIw
ZjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTIzNCw2ICs1MjM0LDggQEAKICAgICAgICAgICAg
ICdkb20vTXV0YXRpb25FdmVudC5oJywKICAgICAgICAgICAgICdkb20vTXV0YXRpb25SZWNvcmQu
Y3BwJywKICAgICAgICAgICAgICdkb20vTXV0YXRpb25SZWNvcmQuaCcsCisgICAgICAgICAgICAn
ZG9tL011dGF0aW9uU2NvcGUuY3BwJywKKyAgICAgICAgICAgICdkb20vTXV0YXRpb25TY29wZS5o
JywKICAgICAgICAgICAgICdkb20vTmFtZU5vZGVMaXN0LmNwcCcsCiAgICAgICAgICAgICAnZG9t
L05hbWVOb2RlTGlzdC5oJywKICAgICAgICAgICAgICdkb20vTmFtZWROb2RlTWFwLmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGNhNTk3NDllMGYzMDAzZmE5ZGZiOTc1NDYxNjU3NDNiZGQ4YjExNjMu
LmQ0N2U0YjIzNmNlMWY4NDYxZjMyNTUwMmM4NzcyYTg5MmI2MWQ1MGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CkBAIC01MjIsNiArNTIyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZG9tL01vdXNlUmVsYXRlZEV2
ZW50LmNwcCBcCiAgICAgZG9tL011dGF0aW9uRXZlbnQuY3BwIFwKICAgICBkb20vTXV0YXRpb25S
ZWNvcmQuY3BwIFwKKyAgICBkb20vTXV0YXRpb25TY29wZS5jcHAgXAogICAgIGRvbS9OYW1lZE5v
ZGVNYXAuY3BwIFwKICAgICBkb20vTmFtZU5vZGVMaXN0LmNwcCBcCiAgICAgZG9tL05vZGUuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
NzQ0NmVkNDZhNjE5MTk2OGVkZjgxMjQ1ZTgwYjk3OGRkOTg0YmE5Ni4uODgwZjkwN2I3OTRjZGUw
ZTYzZjM5Y2JlNmJmZmU3MmUwMTcwNmEyZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQ3NDk3LDYgKzQ3NDk3LDYyIEBACiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNdXRhdGlvblNjb3Bl
LmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAor
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
PgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1l
PSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+
CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9
IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+
CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZG9tXE11dGF0aW9uU2NvcGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE5hbWVkTm9kZU1hcC5jcHAiCiAJCQkJPgogCQkJ
PC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDE2YTFmYmJmZDdhYjcwMmI4NmZmN2FkNjY3YWM3Y2I3YjJjZGM2ODEuLmJh
Yjg5YzRjZTE2OTVjMzEzZGEzMTdjMDcwMzA3ZTI5YmYxYWRmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU3ODYsNiArNTc4
Niw4IEBACiAJCUQzQUExMEY0MTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNBQTEwRjIx
MjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggKi87IH07CiAJCUQzRDRFOTcy
MTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNENEU5NzAxMzBDN0NGRTAwN0JBNTQw
IC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi87IH07CiAJCUQzRDRFOTczMTMwQzdDRkUwMDdC
QTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQzRDRFOTcxMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFy
eUVsZW1lbnQuaCAqLzsgfTsKKwkJRDYxOUEzMDcxNDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9u
U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDYxOUEzMDUxNDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUuY3BwICovOyB9OworCQlE
NjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAy
IC8qIE11dGF0aW9uU2NvcGUuaCAqLzsgfTsKIAkJRDcwQUQ2NTcxM0UxMzQyQjAwNUI1MEI0IC8q
IFJlbmRlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCAqLzsg
fTsKIAkJRDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDcwQUQ2NTYxM0UxMzQyQjAw
NUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oICovOyB9OwogCQlEOEI2MTUyRjEwMzI0OTUxMDBDODU1
NEEgLyogQ29va2llLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEOEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzMDkwLDYgKzEzMDkyLDggQEAK
IAkJRDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlNYXRjaGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzRDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3Vt
bWFyeUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRN
TFN1bW1hcnlFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNENEU5
NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRDYxOUEzMDUxNDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRpb25TY29wZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQ2MTlBMzA2MTQ0RTAwQkUwMDRCQzMw
MiAvKiBNdXRhdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11
dGF0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTUxM0Ux
MzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEOEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb2tpZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjExMjIsNiArMjExMjYsOCBAQAogCQkJCUM2RjA4RkI5MTQzMEZFOEYwMDY4
NTg0OSAvKiBNdXRhdGlvblJlY29yZC5jcHAgKi8sCiAJCQkJQzZGMDhGQkExNDMwRkU4RjAwNjg1
ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmggKi8sCiAJCQkJQzZGMDhGQkIxNDMwRkU4RjAwNjg1ODQ5
IC8qIE11dGF0aW9uUmVjb3JkLmlkbCAqLywKKwkJCQlENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIg
LyogTXV0YXRpb25TY29wZS5jcHAgKi8sCisJCQkJRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8q
IE11dGF0aW9uU2NvcGUuaCAqLywKIAkJCQlCQ0YzNEEzNjExQTIzMUNEMDBDNzE4MDQgLyogTmFt
ZWROb2RlTWFwLmNwcCAqLywKIAkJCQlBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWRO
b2RlTWFwLmggKi8sCiAJCQkJODVBQ0E5RjkwQTlCNjMxMDAwNjcxRTkwIC8qIE5hbWVkTm9kZU1h
cC5pZGwgKi8sCkBAIC0yMzYyMSw2ICsyMzYyNyw3IEBACiAJCQkJQzZGMDkwMEExNDMyN0I2MTAw
Njg1ODQ5IC8qIE11dGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjRB
MEE0NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NkYwOEZCRDE0MzBGRThGMDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUQ2MTlBMzA4MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODE4NzIyMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIxRTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTBCOUI2QzBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0
aXZlWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI2Njg2LDYgKzI2NjkzLDcg
QEAKIAkJCQlCMUFENEU2MjEzQTEyQTBCMDA4NDZCMjcgLyogTXV0YWJsZVRleHRUcmFjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NTAzMUI0OTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25F
dmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNkYwOEZCQzE0MzBGRThGMDA2ODU4NDkgLyog
TXV0YXRpb25SZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDYxOUEzMDcxNDRFMDBCRTAw
NEJDMzAyIC8qIE11dGF0aW9uU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGMzRBMzcx
MUEyMzFDRDAwQzcxODA0IC8qIE5hbWVkTm9kZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODE4NzIyNDA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxMEI5QjZEMEI3NDc1OTkwMDNFRDg5MCAvKiBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXgg
M2VhNDk5MzY5MzU3NDliMTMxOTJiNzYzNDFkNTA5YjE1MzhlNGMwYy4uZjAzMzQwZWQ2MDk5ZTE4
NWJiMTg2YjQ4NzkyN2RkN2UzZTcxODRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50
LmgiCisjaW5jbHVkZSAiTXV0YXRpb25TY29wZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFNj
aGVkdWxlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKQEAg
LTE0MSw2ICsxNDIsMTAgQEAgYm9vbCBDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUoUGFzc1Jl
ZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2UKICAgICBpZiAocmVmQ2hp
bGQtPnByZXZpb3VzU2libGluZygpID09IG5ld0NoaWxkIHx8IHJlZkNoaWxkID09IG5ld0NoaWxk
KSAvLyBub3RoaW5nIHRvIGRvCiAgICAgICAgIHJldHVybiB0cnVlOwogCisjaWYgRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKHRo
aXMpOworI2VuZGlmCisKICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IHJlZkNoaWxkOwogICAgIFJl
ZlB0cjxOb2RlPiByZWZDaGlsZFByZXZpb3VzU2libGluZyA9IHJlZkNoaWxkLT5wcmV2aW91c1Np
YmxpbmcoKTsKICAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0
cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyArK2l0KSB7CkBAIC0yNzIsNiArMjc3LDEw
IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3
Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11dGF0aW9u
U2NvcGUgbXV0YXRpb24odGhpcyk7CisjZW5kaWYKKwogICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0g
b2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gb2xk
Q2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKQEAgLTQwMCw2ICs0MDksMTAgQEAgc3RhdGljIHZvaWQg
d2lsbFJlbW92ZUNoaWxkcmVuKENvbnRhaW5lck5vZGUqIGNvbnRhaW5lcikKICAgICBOb2RlVmVj
dG9yIGNoaWxkcmVuOwogICAgIGNvbGxlY3ROb2Rlcyhjb250YWluZXIsIGNoaWxkcmVuKTsKIAor
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZSBtdXRhdGlvbihjb250YWluZXIpOworI2VuZGlmCisKICAgICBmb3IgKE5vZGVWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7
IGl0KyspIHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBpdC0+Z2V0KCk7CiAgICAgICAgIC8vIGZp
cmUgcmVtb3ZlZCBmcm9tIGRvY3VtZW50IG11dGF0aW9uIGV2ZW50cy4KQEAgLTEwOTUsNiArMTEw
OCwxMyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKE5vZGUqIGNo
aWxkKQogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBk
b2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VS
VkVSUykKKyAgICBpZiAoYy0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIENoaWxkTGlzdE11dGF0
aW9uU2NvcGUgbXV0YXRpb24oYy0+cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgbXV0YXRpb24uY2hp
bGRBZGRlZChjKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmIChjLT5wYXJlbnROb2RlKCkgJiYg
ZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVEX0xJU1RF
TkVSKSkKICAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLkRPTU5vZGVJbnNlcnRlZEV2ZW50LCB0cnVlLCBjLT5wYXJlbnROb2Rl
KCkpKTsKIApAQCAtMTExNiw2ICsxMTM2LDEzIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRS
ZW1vdmFsRXZlbnRzKE5vZGUqIGNoaWxkKQogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAg
ICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwogCisjaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBpZiAoYy0+cGFyZW50Tm9kZSgpKSB7Cisg
ICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oYy0+cGFyZW50Tm9kZSgpKTsK
KyAgICAgICAgbXV0YXRpb24ud2lsbFJlbW92ZUNoaWxkKGMpOworICAgIH0KKyNlbmRpZgorCiAg
ICAgLy8gZGlzcGF0Y2ggcHJlLXJlbW92YWwgbXV0YXRpb24gZXZlbnRzCiAgICAgaWYgKGMtPnBh
cmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RF
UkVNT1ZFRF9MSVNURU5FUikpCiAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0YXRp
b25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlUmVtb3ZlZEV2ZW50LCB0cnVlLCBj
LT5wYXJlbnROb2RlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBkNjk5YjE5MTE2ZTgz
MWQ3M2ZkNTUyM2E4NGVhYTJlYjU4NmZlZjU3Li4zM2YzNjU1NDljZDYwNTZhMWRlZTMxMjg3N2Fk
ZGVhOGZkYmY0OTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC02MjUsOCArNjI1LDggQEAg
c3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBRdWFsaWZpZWROYW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPE11
dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVz
KGVsZW1lbnQsIG5hbWUpOwotICAgIGZvciAoVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIq
Pjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5l
bmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0
YXRpb24pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JzZXJ2ZXJzLnNpemUoKTsgKytp
KQorICAgICAgICBvYnNlcnZlcnNbaV0tPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7
CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uU2Nv
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uU2NvcGUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRiYmU2M2E4Yjg4ZjgyYmI3MDBjMmJiYmEyMDYzZGY0OGZkNjFhZDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5jcHAKQEAgLTAsMCArMSwyNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQor
CisjaW5jbHVkZSAiTXV0YXRpb25TY29wZS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVu
dC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlvblJlY29yZC5oIgor
I2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgQ2hpbGRMaXN0QWNjdW11bGF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
aGlsZExpc3RBY2N1bXVsYXRpb24pOworcHVibGljOgorICAgIENoaWxkTGlzdEFjY3VtdWxhdGlv
bihQYXNzUmVmUHRyPE5vZGU+LCBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+Jik7Cisg
ICAgfkNoaWxkTGlzdEFjY3VtdWxhdGlvbigpOworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NS
ZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4p
OworICAgIHZvaWQgZGlzcGF0Y2goKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgYm9vbCBpc0VtcHR5KCk7CisKKyAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9yZW1vdmVkTm9kZXM7CisgICAgVmVjdG9yPFJlZlB0cjxO
b2RlPiA+IG1fYWRkZWROb2RlczsKKyAgICBSZWZQdHI8Tm9kZT4gbV9wcmV2aW91c1NpYmxpbmc7
CisgICAgUmVmUHRyPE5vZGU+IG1fbmV4dFNpYmxpbmc7CisgICAgUmVmUHRyPE5vZGU+IG1fbGFz
dEFkZGVkOworCisgICAgVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiBtX29ic2VydmVy
czsKK307CisKK2NsYXNzIENoaWxkTGlzdEFjY3VtdWxhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDaGlsZExpc3RBY2N1bXVsYXRvcik7CitwdWJsaWM6CisgICAgfkNoaWxkTGlzdEFj
Y3VtdWxhdG9yKCk7CisKKyAgICBzdGF0aWMgQ2hpbGRMaXN0QWNjdW11bGF0b3IqIGluc3RhbmNl
KCk7CisKKyAgICB2b2lkIGluY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7CisgICAgdm9pZCBk
ZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSopOworCisgICAgdm9pZCBjaGlsZEFkZGVkKE5vZGUq
LCBQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKiwgUGFz
c1JlZlB0cjxOb2RlPik7CisKK3ByaXZhdGU6CisgICAgQ2hpbGRMaXN0QWNjdW11bGF0b3IoKTsK
KyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICBIYXNoTWFwPE5vZGUqLCB1bnNp
Z25lZD4gbV9zY29waW5nTGV2ZWxzOworICAgIEhhc2hNYXA8Tm9kZSosIENoaWxkTGlzdEFjY3Vt
dWxhdGlvbio+IG1fYWNjdW11bGF0aW9uczsKKworICAgIHN0YXRpYyBDaGlsZExpc3RBY2N1bXVs
YXRvciogc19pbnN0YW5jZTsKK307CisKK0NoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0
QWNjdW11bGF0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBWZWN0b3I8V2ViS2l0TXV0YXRp
b25PYnNlcnZlcio+JiBvYnNlcnZlcnMpCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCit7CisgICAg
bV9vYnNlcnZlcnMuc3dhcChvYnNlcnZlcnMpOworICAgIGNsZWFyKCk7Cit9CisKK0NoaWxkTGlz
dEFjY3VtdWxhdGlvbjo6fkNoaWxkTGlzdEFjY3VtdWxhdGlvbigpCit7CisgICAgQVNTRVJUKGlz
RW1wdHkoKSk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0QWNjdW11bGF0aW9uOjpjaGlsZEFkZGVkKFBh
c3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQpCit7CisgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJw
Q2hpbGQ7CisgICAgaWYgKCFpc0VtcHR5KCkgJiYgbV9sYXN0QWRkZWQuZ2V0KCkgIT0gY2hpbGQt
PnByZXZpb3VzU2libGluZygpKQorICAgICAgICBkaXNwYXRjaCgpOworCisgICAgaWYgKGlzRW1w
dHkoKSkgeworICAgICAgICBtX3ByZXZpb3VzU2libGluZyA9IGNoaWxkLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAg
IH0gZWxzZQorICAgICAgICBBU1NFUlQobV9uZXh0U2libGluZyA9PSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSk7IC8vIEFkZGl0aW9ucyBtdXN0IGJlIGluLW9yZGVyLgorCisgICAgbV9hZGRlZE5vZGVz
LmFwcGVuZChjaGlsZCk7CisgICAgbV9sYXN0QWRkZWQgPSBjaGlsZDsKK30KKwordm9pZCBDaGls
ZExpc3RBY2N1bXVsYXRpb246OndpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+IHBycENo
aWxkKQoreworICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOworICAgIEFTU0VSVCht
X2FkZGVkTm9kZXMuaXNFbXB0eSgpKTsgLy8gUmVtb3ZhbHMgbXVzdCBwcmVjZWRlIGFkZGl0aW9u
cy4KKyAgICBpZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkpCisgICAgICAgIGRpc3BhdGNoKCk7
CisKKyAgICBBU1NFUlQoaXNFbXB0eSgpIHx8IG1fbmV4dFNpYmxpbmcuZ2V0KCkgPT0gY2hpbGQp
OyAvLyBSZW1vdmFscyBtdXN0IGJlIGNvbnRpbnVvdXMgYW5kIGluLW9yZGVyLgorICAgIGlmICgh
aXNFbXB0eSgpICYmIG1fbmV4dFNpYmxpbmcuZ2V0KCkgIT0gY2hpbGQpCisgICAgICAgIGRpc3Bh
dGNoKCk7CisKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcHJldmlvdXNTaWJsaW5n
ID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpOworICAgICAgICBtX25leHRTaWJsaW5nID0gY2hp
bGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIG1fbGFzdEFkZGVkID0gY2hpbGQtPnByZXZpb3Vz
U2libGluZygpOworICAgIH0gZWxzZQorICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCk7CisKKyAgICBtX3JlbW92ZWROb2Rlcy5hcHBlbmQoY2hpbGQpOworfQorCit2
b2lkIENoaWxkTGlzdEFjY3VtdWxhdGlvbjo6ZGlzcGF0Y2goKQoreworICAgIEFTU0VSVCghaXNF
bXB0eSgpKTsKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0g
TXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdChtX3RhcmdldCwgU3RhdGljTm9kZUxpc3Q6
OmFkb3B0KG1fYWRkZWROb2RlcyksIFN0YXRpY05vZGVMaXN0OjphZG9wdChtX3JlbW92ZWROb2Rl
cyksIG1fcHJldmlvdXNTaWJsaW5nLCBtX25leHRTaWJsaW5nKTsKKyAgICBmb3IgKFZlY3RvcjxX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVycy5iZWdp
bigpOyBpdGVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlcikt
PmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CisKKyAgICBjbGVhcigpOworfQorCit2
b2lkIENoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Y2xlYXIoKQoreworICAgIGlmICghbV9yZW1vdmVk
Tm9kZXMuaXNFbXB0eSgpKQorICAgICAgICBtX3JlbW92ZWROb2Rlcy5jbGVhcigpOworICAgIGlm
ICghbV9hZGRlZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hZGRlZE5vZGVzLmNsZWFyKCk7
CisgICAgbV9wcmV2aW91c1NpYmxpbmcgPSAwOworICAgIG1fbmV4dFNpYmxpbmcgPSAwOworICAg
IG1fbGFzdEFkZGVkID0gMDsKK30KKworYm9vbCBDaGlsZExpc3RBY2N1bXVsYXRpb246OmlzRW1w
dHkoKQoreworICAgIHJldHVybiBtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkgJiYgbV9hZGRlZE5v
ZGVzLmlzRW1wdHkoKTsKK30KKworQ2hpbGRMaXN0QWNjdW11bGF0b3IqIENoaWxkTGlzdEFjY3Vt
dWxhdG9yOjpzX2luc3RhbmNlID0gMDsKKworQ2hpbGRMaXN0QWNjdW11bGF0b3I6OkNoaWxkTGlz
dEFjY3VtdWxhdG9yKCkKK3sKK30KKworLy8gQ2FuIHRoaXMgZ2V0IGNhbGxlZAorQ2hpbGRMaXN0
QWNjdW11bGF0b3I6On5DaGlsZExpc3RBY2N1bXVsYXRvcigpCit7CisgICAgQVNTRVJUKG1fc2Nv
cGluZ0xldmVscy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2FjY3VtdWxhdGlvbnMuaXNFbXB0
eSgpKTsKK30KKwordm9pZCBDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5pdGlhbGl6ZSgpCit7Cisg
ICAgQVNTRVJUKCFzX2luc3RhbmNlKTsKKyAgICBPd25QdHI8Q2hpbGRMaXN0QWNjdW11bGF0b3I+
IGluc3RhbmNlID0gYWRvcHRQdHIobmV3IENoaWxkTGlzdEFjY3VtdWxhdG9yKTsKKyAgICBzX2lu
c3RhbmNlID0gaW5zdGFuY2UubGVha1B0cigpOworfQorCisKK0NoaWxkTGlzdEFjY3VtdWxhdG9y
KiBDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5zdGFuY2UoKQoreworICAgIGlmICghc19pbnN0YW5j
ZSkKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgcmV0dXJuIHNfaW5zdGFuY2U7Cit9CisK
K3ZvaWQgQ2hpbGRMaXN0QWNjdW11bGF0b3I6OmNoaWxkQWRkZWQoTm9kZSogdGFyZ2V0LCBQYXNz
UmVmUHRyPE5vZGU+IGNoaWxkKQoreworICAgIEFTU0VSVChtX2FjY3VtdWxhdGlvbnMuY29udGFp
bnModGFyZ2V0KSk7CisgICAgQ2hpbGRMaXN0QWNjdW11bGF0aW9uKiByZWNvcmQgPSBtX2FjY3Vt
dWxhdGlvbnMuZ2V0KHRhcmdldCk7CisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3JkLT5j
aGlsZEFkZGVkKGNoaWxkKTsKK30KKwordm9pZCBDaGlsZExpc3RBY2N1bXVsYXRvcjo6d2lsbFJl
bW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBB
U1NFUlQobV9hY2N1bXVsYXRpb25zLmNvbnRhaW5zKHRhcmdldCkpOworICAgIENoaWxkTGlzdEFj
Y3VtdWxhdGlvbiogcmVjb3JkID0gbV9hY2N1bXVsYXRpb25zLmdldCh0YXJnZXQpOworICAgIGlm
IChyZWNvcmQpCisgICAgICAgIHJlY29yZC0+d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKK30KKwor
dm9pZCBDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRh
cmdldCkKK3sKKyAgICBpZiAobV9zY29waW5nTGV2ZWxzLmNvbnRhaW5zKHRhcmdldCkpIHsKKyAg
ICAgICAgbV9zY29waW5nTGV2ZWxzLnNldCh0YXJnZXQsIG1fc2NvcGluZ0xldmVscy5nZXQodGFy
Z2V0KSArIDEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zY29waW5nTGV2ZWxz
LnNldCh0YXJnZXQsIDEpOworICAgIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4gb2Jz
ZXJ2ZXJzOworICAgIHRhcmdldC0+cmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9i
c2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hpbGRMaXN0KTsKKyAgICBpZiAob2Jz
ZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIDAp
OworICAgIGVsc2UKKyAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIG5ldyBDaGls
ZExpc3RBY2N1bXVsYXRpb24odGFyZ2V0LCBvYnNlcnZlcnMpKTsKK30KKwordm9pZCBDaGlsZExp
c3RBY2N1bXVsYXRvcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKK3sKKyAg
ICBBU1NFUlQobV9zY29waW5nTGV2ZWxzLmNvbnRhaW5zKHRhcmdldCkpOworICAgIHVuc2lnbmVk
IHNjb3BpbmdMZXZlbCA9IG1fc2NvcGluZ0xldmVscy5nZXQodGFyZ2V0KSAtIDE7CisKKyAgICBp
ZiAoc2NvcGluZ0xldmVsID4gMCkgeworICAgICAgICBtX3Njb3BpbmdMZXZlbHMuc2V0KHRhcmdl
dCwgc2NvcGluZ0xldmVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE93blB0cjxD
aGlsZExpc3RBY2N1bXVsYXRpb24+IHJlY29yZCA9IGFkb3B0UHRyKG1fYWNjdW11bGF0aW9ucy50
YWtlKHRhcmdldCkpOworICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUodGFyZ2V0KTsKKworICAg
IGlmIChyZWNvcmQpCisgICAgICAgIHJlY29yZC0+ZGlzcGF0Y2goKTsKK30KKworfSAvLyBuYW1l
c3BhY2UKKworQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZShQ
YXNzUmVmUHRyPE5vZGU+IHRhcmdldCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKKyAgICBD
aGlsZExpc3RBY2N1bXVsYXRvcjo6aW5zdGFuY2UoKS0+aW5jcmVtZW50U2NvcGluZ0xldmVsKG1f
dGFyZ2V0LmdldCgpKTsKK30KKworQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11
dGF0aW9uU2NvcGUoKQoreworICAgIENoaWxkTGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSgpLT5k
ZWNyZW1lbnRTY29waW5nTGV2ZWwobV90YXJnZXQuZ2V0KCkpOworfQorCit2b2lkIENoaWxkTGlz
dE11dGF0aW9uU2NvcGU6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAg
ICBDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5zdGFuY2UoKS0+Y2hpbGRBZGRlZChtX3RhcmdldC5n
ZXQoKSwgY2hpbGQpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6OndpbGxSZW1v
dmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQoreworICAgIENoaWxkTGlzdEFjY3VtdWxh
dG9yOjppbnN0YW5jZSgpLT53aWxsUmVtb3ZlQ2hpbGQobV90YXJnZXQuZ2V0KCksIGNoaWxkKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3Bl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNjA4
NTZjODNiNmRiYTI2MzhjZDMwN2U3NWQ3N2IyNGFiNjRjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IE11dGF0aW9uU2NvcGVfaAorI2RlZmluZSBNdXRhdGlvblNjb3BlX2gKKworI2lmIEVOQUJMRShN
VVRBVElPTl9PQlNFUlZFUlMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBOb2RlOworCitjbGFzcyBDaGlsZExpc3RNdXRhdGlvblNj
b3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3BlKTsK
K3B1YmxpYzoKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFy
Z2V0KTsKKyAgICB+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSgpOworCisgICAgdm9pZCBjaGlsZEFk
ZGVkKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQ
dHI8Tm9kZT4pOworCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCisKKyNlbmRpZiAvLyBNdXRhdGlvblNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAx
Zjg1ZmQ5MTJlYWRmZDVhNzMxNTlkNmRlZGU5MzBlNjQ4NDljOTQwLi5jNjZkZGNjNzg0ZDIyZWEy
N2IzNWNiZTg4YTQ4YzgzODE0NTVhNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC02Niw2ICs2Niw3
IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNs
dWRlICJNdXRhdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiTXV0YXRpb25TY29wZS5oIgogI2luY2x1
ZGUgIk5hbWVOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUg
Ik5vZGVSYXJlRGF0YS5oIgpAQCAtMjEyNCw2ICsyMTI1LDkgQEAgdm9pZCBOb2RlOjpzZXRUZXh0
Q29udGVudChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBj
YXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CiAgICAgICAgIGNhc2UgU0hBRE9XX1JPT1RfTk9E
RTogewogICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogY29udGFpbmVyID0gdG9Db250YWluZXJO
b2RlKHRoaXMpOworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgICAgICAgICBD
aGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCiAgICAgICAgICAg
ICBjb250YWluZXItPnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgICAgICBpZiAoIXRleHQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQo
KS0+Y3JlYXRlVGV4dE5vZGUodGV4dCksIGVjKTsKQEAgLTI2OTQsOSArMjY5OCw5IEBAIHZvaWQg
Tm9kZTo6cmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJLaXRNdXRh
dGlvbk9ic2VydmVyKj4mIG9iCiAgICAgaWYgKCFvYnNlcnZlckVudHJpZXMgfHwgb2JzZXJ2ZXJF
bnRyaWVzLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoVmVjdG9yPE11
dGF0aW9uT2JzZXJ2ZXJFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlckVudHJpZXMtPmJl
Z2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJFbnRyaWVzLT5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IGlmIChpdGVyLT5tYXRjaGVzKHR5cGUpKQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChp
dGVyLT5vYnNlcnZlci5nZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZl
ckVudHJpZXMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgoKm9ic2VydmVyRW50cmllcylb
aV0ubWF0Y2hlcyh0eXBlKSkKKyAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoKCpvYnNlcnZl
ckVudHJpZXMpW2ldLm9ic2VydmVyLmdldCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA3ZDczNmFlN2JhYzY0YzQ1
ODhmY2JhMmZjM2QzYjc3NTI5N2JkZTE0Li44M2YxNTk5MGVhMmJlY2EzMzliYjBhNzNjYzI5Njli
YTRkZjI5ZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2
ZXIuY3BwCkBAIC02NSw4ICs2NSw4IEBAIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2Jz
ZXJ2ZShOb2RlKiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zCiAKIHZvaWQg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgZm9yIChWZWN0b3I8
Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbV9vYnNlcnZlZE5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0g
IG1fb2JzZXJ2ZWROb2Rlcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT51bnJlZ2lz
dGVyTXV0YXRpb25PYnNlcnZlcih0aGlzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
b2JzZXJ2ZWROb2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlZE5vZGVzW2ldLT51
bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlzKTsKIAogICAgIG1fb2JzZXJ2ZWROb2Rlcy5j
bGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA1OTEyZGEwN2Q3
NmE0OTJjNmQ3MzI4OGExNDM0ZGQxMzFlMzE5ODA0Li41ZDQwY2Q1N2NlNTZiNzg3ZGEzNWYyOTlj
OTk3MjBjM2Y5MzkzNmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1
ZGUgIk11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJSZW5kZXJXb3JkQnJlYWsuaCIKICNpbmNs
dWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTMx
Nyw2ICszMTgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGhhc09uZVRleHRDaGlsZChDb250YWlu
ZXJOb2RlKiBub2RlKQogCiBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQo
SFRNTEVsZW1lbnQqIGVsZW1lbnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
CisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihlbGVtZW50KTsKKyNlbmRpZgor
CiAgICAgaWYgKCFmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPnJl
bW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMzOCw2ICszNDMsMTAgQEAgc3Rh
dGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50
LCBQYXNzUmVmUHRyPERvY3VtZW4KIAogc3RhdGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aFRl
eHQoSFRNTEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RN
dXRhdGlvblNjb3BlIG11dGF0aW9uKGVsZW1lbnQpOworI2VuZGlmCisKICAgICBpZiAoaGFzT25l
VGV4dENoaWxkKGVsZW1lbnQpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50
LT5maXJzdENoaWxkKCkpLT5zZXREYXRhKHRleHQsIGVjKTsKICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGMzMDNlZWQ5M2UyZDIxZDE0YzgyMzFjYjgxYmE3MDZkMWU2ZjQ4M2YuLmE4OTNiNmNjZjY5
MjVkZDAyMTY5MTAwYWYwNWE5MTg5ODZmYmZiOWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
MS0xMC0xOCAgUmFmYWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtNdXRhdGlvbk9ic2VydmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIu
b2JzZXJ2ZSBmb3IgY2hpbGRMaXN0IGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMu
aHRtbDoKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC5o
dG1sOiBBZGRlZC4KKwogMjAxMS0xMC0xOCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyLm9ic2VydmUgZm9yIGNoYXJhY3RlckRhdGEgY2hhbmdlcwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQu
dHh0CmluZGV4IDk4NjlmZTJlZTViMDJjMGU3NzY4ZDgxYTMzMmFhZmQzODY2ZWNjODEuLjJmODU5
OGRmZjdhMDIwZWUzYzcyN2U5ZTM3Zjk4NmE2YTI4MTg2OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQK
QEAgLTIzLDcgKzIzLDcgQEAgUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlz
IG51bGwKIFRlc3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJhdHRyaWJ1
dGVzIiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBhYm91dCBhdHRyaWJ1dGUgY2hhbmdlcy4K
IFBBU1MgbXV0YXRpb25zIGlzIG51bGwKIAotVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUg
c2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5nIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0
dGluZyB0aGUgb3B0aW9ucy4KK1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9k
ZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUg
b3B0aW9ucy4KIFBBU1MgY2FsbHMgaXMgMQogUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKIFBB
U1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAppbmRleCA2NDZlMzkzMWQxNDUw
YzFkY2Q0YWNlNGE3ZWJlNTEwM2Q4OGViM2JlLi44NWVjNjc3NGQ2ZjVjN2ZkMWJhNWI5ZGNiYTdi
YTNiZmY4MzUwMDY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2Vy
dmUtYXR0cmlidXRlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2
ZS1hdHRyaWJ1dGVzLmh0bWwKQEAgLTEyLDggKzEyLDcgQEAKIDxzY3JpcHQ+CiAKIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKLXZhciBtdXRhdGlvbnM7Ci12YXIgbXV0YXRpb25zMjsKK3Zh
ciBtdXRhdGlvbnMsIG11dGF0aW9uczI7CiB2YXIgY2FsbHM7CiAKIGZ1bmN0aW9uIHRlc3RCYXNp
YygpIHsKQEAgLTEwOSw3ICsxMDgsNyBAQCBmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRp
b24oKSB7CiAgICAgdmFyIG9ic2VydmVyOwogCiAgICAgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAg
ICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0
aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25z
LicpOworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBu
b2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRo
ZSBvcHRpb25zLicpOwogICAgIAogCQljYWxscyA9IDA7CiAgICAgICAgIG11dGF0aW9ucyA9IG51
bGw7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRM
aXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGls
ZExpc3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjZWU5ZGIwMTYwYWI3MzQ3ZDk5NjM3OGE1
NDM5MzkwZDM5Mjg5NmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0
aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDU4IEBACitUZXN0
IHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2YgY2hpbGRMaXN0IG9i
c2VydmF0aW9uLgorLi4uY2FuIGNoaWxkTGlzdCBjaGFuZ2VzIGJlIG9ic2VydmVkIGF0IGFsbAor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNo
aWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1Mg
bXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKKy4uLm9ic2VydmVyLmRp
c2Nvbm5lY3QoKSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGRlbGl2ZXJ5IG9mIG11dGF0aW9ucy4K
K1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25uZWN0
IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNb
MF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9k
ZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImNoaWxkTGlz
dCIKK1BBU1MgbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRh
dGlvbnNbMV0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYyCisKK1Rlc3RpbmcgdGhhdCBv
YnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJjaGlsZExpc3QiIGRvZXMgbm90IHJlc3VsdCBp
biBoZWFyaW5nIGFib3V0IGNoaWxkTGlzdCBjaGFuZ2VzLgorUEFTUyBtdXRhdGlvbnMgaXMgbnVs
bAorCitUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2Ft
ZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuCitQQVNT
IGNhbGxzIGlzIDEKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1sw
XS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3Rpbmcg
dGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBub2Rl
IGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEK
K1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zMi5s
ZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKKworVGVz
dGluZyB0aGF0IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1bHQgaW4gYSBzaW5n
bGUgY2hpbGRMaXN0IG11dGF0aW9uLgorLi4uaW5uZXJIVE1MCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWRO
b2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0gaXMg
YWRkZWREaXYyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzJdIGlzIGFkZGVkRGl2Mwor
UEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlc1sxXSBpcyByZW1vdmVkRGl2MgorLi4uaW5uZXJUZXh0CitQQVNTIG11dGF0aW9u
cy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFT
UyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0u
cmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAzCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0
aW9uL29ic2VydmUtY2hpbGRMaXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29i
c2VydmUtY2hpbGRMaXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzhmODI4ZTc3OGM1MmJkNjQwNTg0NzE4
YTg5ZmY5M2FiZTdlOWMyYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbApAQCAtMCwwICsxLDI2MyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
dGl0bGU+PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCit3aW5kb3cuanNUZXN0SXNBc3lu
YyA9IHRydWU7Cit2YXIgbXV0YXRpb25zLCBtdXRhdGlvbnMyOwordmFyIGNhbGxzOwordmFyIGRp
diwgcmVtb3ZlZERpdjEsIHJlbW92ZWREaXYyLCBhZGRlZERpdjEsIGFkZGVkRGl2MiwgYWRkZWRE
aXYzOworCitmdW5jdGlvbiB0ZXN0QmFzaWMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2Jz
ZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcg
YmFzaWMgYXNwZWN0cyBvZiBjaGlsZExpc3Qgb2JzZXJ2YXRpb24uJyk7CisKKyAgICAgICAgbXV0
YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rp
b24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBy
ZW1vdmVkRGl2MSA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KSk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAg
IGRlYnVnKCcuLi5jYW4gY2hpbGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsJyk7CisK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAg
ICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAg
ICAgICAgcmVtb3ZlZERpdjEgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRl
TXVsdGlwbGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrTm90RGVsaXZlcmVkQW5k
TXV0YXRlTXVsdGlwbGUoKSB7CisgICAgICAgIGRlYnVnKCcuLi5vYnNlcnZlci5kaXNjb25uZWN0
KCkgc2hvdWxkIHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuJyk7CisKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLm9i
c2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBk
aXYucmVtb3ZlQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpOworICAgICAgICByZW1vdmVkRGl2MiA9IGRp
di5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNo
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5y
ZS1vYnNlcnZpbmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3JrcyB3aXRoIHRoZSBzYW1lIG9ic2VydmVy
LicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYx
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciY2hpbGRMaXN0Iicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAn
MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlc1swXScsICdy
ZW1vdmVkRGl2MicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOwor
fQorCitmdW5jdGlvbiB0ZXN0V3JvbmdUeXBlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9i
c2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5n
IHRoYXQgb2JzZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiY2hpbGRMaXN0IiBkb2VzIG5vdCBy
ZXN1bHQgaW4gaGVhcmluZyBhYm91dCBjaGlsZExpc3QgY2hhbmdlcy4nKTsKKworICAgICAgICBt
dXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5j
dGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAg
ICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJE
YXRhOiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywgJ251
bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7
CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVu
Y3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgeworICAgIHZhciBkaXY7CisgICAgdmFy
IG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0
aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZl
ciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7CisKKyAgICAgICAg
Y2FsbHMgPSAwOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0
TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBt
OworICAgICAgICAgICAgY2FsbHMrKzsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIu
b2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOwor
ICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAg
ICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAg
ICAgIHNldFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJl
KCdjYWxscycsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7
CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2
LCB7IGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2Jz
ZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGlt
ZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nv
bm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAg
IH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZU9ic2VydmVycygp
IHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgb2JzZXJ2ZXIyOwor
CisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgbXVs
dGlwbGUgb2JzZXJ2ZXJzIGNhbiBiZSByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gbm9kZSBhbmQgYm90
aCByZWNlaXZlIG11dGF0aW9ucy4nKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAg
ICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVy
ID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAg
bXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyMiA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9uczIg
PSBtOworICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRM
aXN0OiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlcjIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0
OiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcs
ICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0
IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zMlswXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAg
IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTsK
KyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAg
IHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbm5lckhUTUxBbmRJbm5lclRleHQoKSB7Cisg
ICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsK
KyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBpbm5lclRleHQgYW5kIGlubmVySFRNTCBhbHdh
eXMgcmVzdWx0IGluIGEgc2luZ2xlIGNoaWxkTGlzdCBtdXRhdGlvbi4nKTsKKworICAgICAgICBt
dXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+PGRpdj5CYXI8
L2Rpdj4nOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5maXJzdENoaWxkOworICAgICAgICBy
ZW1vdmVkRGl2MiA9IHJlbW92ZWREaXYxLm5leHRTaWJsaW5nOworICAgICAgICBvYnNlcnZlciA9
IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11
dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2
LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICdmb288aW1n
IHNyYz0iYmFyLnBuZyI+PHA+QmF6PC9wPic7CisgICAgICAgIGFkZGVkRGl2MSA9IGRpdi5jaGls
ZE5vZGVzWzBdOworICAgICAgICBhZGRlZERpdjIgPSBkaXYuY2hpbGROb2Rlc1sxXTsKKyAgICAg
ICAgYWRkZWREaXYzID0gZGl2LmNoaWxkTm9kZXNbMl07CisgICAgICAgIHNldFRpbWVvdXQoY2hl
Y2tJbm5lckhUTUwsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrSW5uZXJIVE1MKCkg
eworICAgICAgICBkZWJ1ZygnLi4uaW5uZXJIVE1MJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5
cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRl
ZE5vZGVzLmxlbmd0aCcsICczJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRk
ZWROb2Rlc1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5hZGRlZE5vZGVzWzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLmFkZGVkTm9kZXNbMl0nLCAnYWRkZWREaXYzJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzFdJywgJ3JlbW92ZWREaXYyJyk7
CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2LmlubmVyVGV4dCA9ICdm
b28nOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZmluaXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4uaW5uZXJUZXh0Jyk7CisKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICczJyk7CisgICAgICAgIG9ic2VydmVyLmRp
c2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOwor
ICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK3ZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RX
cm9uZ1R5cGUsIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbiwgdGVzdE11bHRpcGxlT2JzZXJ2ZXJz
LCB0ZXN0SW5uZXJIVE1MQW5kSW5uZXJUZXh0XTsKK3ZhciB0ZXN0SW5kZXggPSAwOworIAorZnVu
Y3Rpb24gcnVuTmV4dFRlc3QoKSB7CisgICAgaWYgKHRlc3RJbmRleCA8IHRlc3RzLmxlbmd0aCkK
KyAgICAgICAgdGVzdHNbdGVzdEluZGV4KytdKCk7CisgICAgZWxzZQorICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKK30KKworZGVzY3JpcHRpb24oJ1Rlc3QgdGhlIGNvbnN0cnVjdG9yIG9mIFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXInKTsKKworaWYgKCF3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZl
cikKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUyknKTsKK2Vsc2UKKyAgICBydW5OZXh0VGVzdCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111535</attachid>
            <date>2011-10-18 17:24:28 -0700</date>
            <delta_ts>2011-10-19 12:17:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111018172427.patch</filename>
            <type>text/plain</type>
            <size>43439</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4MDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZmZjNDhkNDlhYzNkYWE2
MDRlN2ZjMDZiMmE1NjNiZmZiYjM0Y2E2Li4wNGY1NjlmMmFkZDU2OWY4YjBhMTIzYWEzOGIzZDA1
NzNlNjIxODIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdoaWNo
IG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVtb3Zh
bHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hpbGRM
aXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMg
cGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNjZWQg
KGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5uZXJI
VE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFjayB0
aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2Rl
OjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25S
ZWNvcmQpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9NdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZSk6CisgICAgICAgICogZG9t
L1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQpOgorCiAyMDExLTEwLTE4ICBB
ZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtNdXRhdGlvbk9ic2Vy
dmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgY2hhcmFj
dGVyRGF0YSBjaGFuZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU0OTZjZjg4OWMwY2U4YmFk
MTlhMDk4ZmZlZmI3YTg5OTQ0MjY5NzIuLjM4MjgxNTBhZGY3MjY0NGRlZTU5YjY2MGMzNWQyMGFl
ZGIyNjc0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01NjMsNiArNTYzLDcgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIGRvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKICAgICBkb20vTXV0
YXRpb25FdmVudC5jcHAKICAgICBkb20vTXV0YXRpb25SZWNvcmQuY3BwCisgICAgZG9tL011dGF0
aW9uU2NvcGUuY3BwCiAgICAgZG9tL05hbWVkTm9kZU1hcC5jcHAKICAgICBkb20vTmFtZU5vZGVM
aXN0LmNwcAogICAgIGRvbS9Ob2RlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggY2ZmYTA4M2E5MDY3MjVmNWMyYTZmOTdlZTg2MGUwNDQxMGZkNzkwMS4uZmE5YWMyMGQxMWJh
ZmY0NTljZjRlMWI2M2M4OTkyODRiOWI2MGFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC0xMjUzLDYgKzEyNTMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
blJlY29yZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvblNjb3BlLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2RvbS9OYW1lTm9kZUxpc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmNzQyMjY1MzlmODBl
YWY1NDM2NTg4NjFkMjA2ZDIwZGYyNmFhOWEyLi4wYWExMjc4Zjk4ZDA5MjQ0ZGFiYmI3Yzc4ODJh
ZGM4ZTcyYjBmOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01MjM0LDYgKzUyMzQsOCBAQAogICAg
ICAgICAgICAgJ2RvbS9NdXRhdGlvbkV2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9NdXRhdGlv
blJlY29yZC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9NdXRhdGlvblJlY29yZC5oJywKKyAgICAg
ICAgICAgICdkb20vTXV0YXRpb25TY29wZS5jcHAnLAorICAgICAgICAgICAgJ2RvbS9NdXRhdGlv
blNjb3BlLmgnLAogICAgICAgICAgICAgJ2RvbS9OYW1lTm9kZUxpc3QuY3BwJywKICAgICAgICAg
ICAgICdkb20vTmFtZU5vZGVMaXN0LmgnLAogICAgICAgICAgICAgJ2RvbS9OYW1lZE5vZGVNYXAu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggY2E1OTc0OWUwZjMwMDNmYTlkZmI5NzU0NjE2NTc0M2Jk
ZDhiMTE2My4uZDQ3ZTRiMjM2Y2UxZjg0NjFmMzI1NTAyYzg3NzJhODkyYjYxZDUwYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTUyMiw2ICs1MjIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vTW91c2VS
ZWxhdGVkRXZlbnQuY3BwIFwKICAgICBkb20vTXV0YXRpb25FdmVudC5jcHAgXAogICAgIGRvbS9N
dXRhdGlvblJlY29yZC5jcHAgXAorICAgIGRvbS9NdXRhdGlvblNjb3BlLmNwcCBcCiAgICAgZG9t
L05hbWVkTm9kZU1hcC5jcHAgXAogICAgIGRvbS9OYW1lTm9kZUxpc3QuY3BwIFwKICAgICBkb20v
Tm9kZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCA3NDQ2ZWQ0NmE2MTkxOTY4ZWRmODEyNDVlODBiOTc4ZGQ5ODRiYTk2Li44ODBmOTA3
Yjc5NGNkZTBlNjNmMzljYmU2YmZmZTcyZTAxNzA2YTJkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDc0OTcsNiArNDc0OTcsNjIgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE11dGF0
aW9uU2NvcGUuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJ
CTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVh
c2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0Nh
aXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
UmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJ
CQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cTXV0YXRpb25TY29wZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTmFtZWROb2RlTWFwLmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMTZhMWZiYmZkN2FiNzAyYjg2ZmY3YWQ2NjdhYzdjYjdiMmNk
YzY4MS4uYmFiODljNGNlMTY5NWMzMTNkYTMxN2MwNzAzMDdlMjliZjFhZGZlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTc4
Niw2ICs1Nzg2LDggQEAKIAkJRDNBQTEwRjQxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlN
YXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
M0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJ
RDNENEU5NzIxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZF
MDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBD
N0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhU
TUxTdW1tYXJ5RWxlbWVudC5oICovOyB9OworCQlENjE5QTMwNzE0NEUwMEJFMDA0QkMzMDIgLyog
TXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5jcHAgKi87
IH07CisJCUQ2MTlBMzA4MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjE5QTMwNjE0NEUwMEJF
MDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5oICovOyB9OwogCQlENzBBRDY1NzEzRTEzNDJCMDA1
QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24u
Y3BwICovOyB9OwogCQlENzBBRDY1ODEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NjEz
RTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggKi87IH07CiAJCUQ4QjYxNTJGMTAzMjQ5
NTEwMEM4NTU0QSAvKiBDb29raWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMwOTAsNiArMTMw
OTIsOCBAQAogCQlEM0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeU1hdGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNENEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8q
IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxTdW1tYXJ5RWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRp
b25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdGlv
blNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDYxOUEzMDYxNDRFMDBC
RTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTXV0YXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENzBB
RDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJlZ2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQ3MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUmVnaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMTEyMiw2ICsyMTEyNiw4IEBACiAJCQkJQzZGMDhGQjkxNDMw
RkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCAqLywKIAkJCQlDNkYwOEZCQTE0MzBG
RThGMDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuaCAqLywKIAkJCQlDNkYwOEZCQjE0MzBGRThG
MDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuaWRsICovLAorCQkJCUQ2MTlBMzA1MTQ0RTAwQkUw
MDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmNwcCAqLywKKwkJCQlENjE5QTMwNjE0NEUwMEJFMDA0
QkMzMDIgLyogTXV0YXRpb25TY29wZS5oICovLAogCQkJCUJDRjM0QTM2MTFBMjMxQ0QwMEM3MTgw
NCAvKiBOYW1lZE5vZGVNYXAuY3BwICovLAogCQkJCUE4MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAv
KiBOYW1lZE5vZGVNYXAuaCAqLywKIAkJCQk4NUFDQTlGOTBBOUI2MzEwMDA2NzFFOTAgLyogTmFt
ZWROb2RlTWFwLmlkbCAqLywKQEAgLTIzNjIxLDYgKzIzNjI3LDcgQEAKIAkJCQlDNkYwOTAwQTE0
MzI3QjYxMDA2ODU4NDkgLyogTXV0YXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODUwMzFCNEEwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM2RjA4RkJEMTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDYxOUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg3MjIzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5v
ZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg3MjFFMDk3N0QzQzAwMDU4MjZEOSAvKiBO
YW1lTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMEI5QjZDMEI3NDc1OTkwMDNFRDg5
MCAvKiBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjY2ODYsNiAr
MjY2OTMsNyBAQAogCQkJCUIxQUQ0RTYyMTNBMTJBMEIwMDg0NkIyNyAvKiBNdXRhYmxlVGV4dFRy
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1MDMxQjQ5MEE0NEVGQzcwMEY5OTJFMCAvKiBN
dXRhdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RjA4RkJDMTQzMEZFOEYwMDY4
NTg0OSAvKiBNdXRhdGlvblJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlENjE5QTMwNzE0
NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0YzNEEzNzExQTIzMUNEMDBDNzE4MDQgLyogTmFtZWROb2RlTWFwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4MTg3MjI0MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTEwQjlCNkQwQjc0NzU5OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNS
ZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAppbmRleCAzZWE0OTkzNjkzNTc0OWIxMzE5MmI3NjM0MWQ1MDliMTUzOGU0YzBjLi5mMDMzNDBl
ZDYwOTllMTg1YmIxODZiNDg3OTI3ZGQ3ZTNlNzE4NGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk11dGF0
aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgpAQCAtMTQxLDYgKzE0MiwxMCBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9y
ZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZQogICAgIGlm
IChyZWZDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgPT0gbmV3Q2hpbGQgfHwgcmVmQ2hpbGQgPT0g
bmV3Q2hpbGQpIC8vIG5vdGhpbmcgdG8gZG8KICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0
YXRpb24odGhpcyk7CisjZW5kaWYKKwogICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gcmVmQ2hpbGQ7
CiAgICAgUmVmUHRyPE5vZGU+IHJlZkNoaWxkUHJldmlvdXNTaWJsaW5nID0gcmVmQ2hpbGQtPnBy
ZXZpb3VzU2libGluZygpOwogICAgIGZvciAoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0YXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRhcmdldHMuZW5kKCk7ICsraXQpIHsKQEAgLTI3Miw2
ICsyNzcsMTAgQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxO
b2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2UKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0
TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlzKTsKKyNlbmRpZgorCiAgICAgUmVmUHRyPE5vZGU+
IHByZXYgPSBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5l
eHQgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKIApAQCAtNDAwLDYgKzQwOSwxMCBAQCBzdGF0
aWMgdm9pZCB3aWxsUmVtb3ZlQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogY29udGFpbmVyKQogICAg
IE5vZGVWZWN0b3IgY2hpbGRyZW47CiAgICAgY29sbGVjdE5vZGVzKGNvbnRhaW5lciwgY2hpbGRy
ZW4pOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRh
dGlvblNjb3BlIG11dGF0aW9uKGNvbnRhaW5lcik7CisjZW5kaWYKKwogICAgIGZvciAoTm9kZVZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJl
bi5lbmQoKTsgaXQrKykgewogICAgICAgICBOb2RlKiBjaGlsZCA9IGl0LT5nZXQoKTsKICAgICAg
ICAgLy8gZmlyZSByZW1vdmVkIGZyb20gZG9jdW1lbnQgbXV0YXRpb24gZXZlbnRzLgpAQCAtMTA5
NSw2ICsxMTA4LDEzIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMo
Tm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsKICAgICBSZWZQdHI8RG9j
dW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKKyNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnROb2RlKCkpOworICAgICAgICBtdXRh
dGlvbi5jaGlsZEFkZGVkKGMpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKGMtPnBhcmVudE5v
ZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFSU5TRVJU
RURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2VydGVkRXZlbnQsIHRydWUsIGMtPnBh
cmVudE5vZGUoKSkpOwogCkBAIC0xMTE2LDYgKzExMzYsMTMgQEAgc3RhdGljIHZvaWQgZGlzcGF0
Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBj
aGlsZDsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7
CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnRO
b2RlKCkpOworICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQoYyk7CisgICAgfQorI2Vu
ZGlmCisKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVudHMKICAgICBp
ZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6
OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkKICAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVu
dChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRXZlbnQs
IHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGQ2OTli
MTkxMTZlODMxZDczZmQ1NTIzYTg0ZWFhMmViNTg2ZmVmNTcuLjMzZjM2NTU0OWNkNjA1NmExZGVl
MzEyODc3YWRkZWE4ZmRiZjQ5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTYyNSw4ICs2
MjUsOCBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbQogICAgICAgICByZXR1cm47CiAKICAgICBS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0
dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7Ci0gICAgZm9yIChWZWN0b3I8V2ViS2l0TXV0YXRpb25P
YnNlcnZlcio+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2Jz
ZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPmVucXVldWVNdXRhdGlvblJl
Y29yZChtdXRhdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11
dGF0aW9uKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGJiZTYzYThiODhmODJiYjcwMGMyYmJiYTIwNjNkZjQ4ZmQ2MWFkMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmNwcApAQCAtMCww
ICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCisKKyNpbmNsdWRlICJNdXRhdGlvblNjb3BlLmgiCisKKyNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uUmVj
b3JkLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgeworCitjbGFzcyBDaGlsZExpc3RBY2N1bXVsYXRpb24geworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENoaWxkTGlzdEFjY3VtdWxhdGlvbik7CitwdWJsaWM6CisgICAgQ2hpbGRMaXN0QWNj
dW11bGF0aW9uKFBhc3NSZWZQdHI8Tm9kZT4sIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVy
Kj4mKTsKKyAgICB+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKCk7CisKKyAgICB2b2lkIGNoaWxkQWRk
ZWQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0
cjxOb2RlPik7CisgICAgdm9pZCBkaXNwYXRjaCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY2xl
YXIoKTsKKyAgICBib29sIGlzRW1wdHkoKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsK
KworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKKyAgICBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4gbV9hZGRlZE5vZGVzOworICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3Vz
U2libGluZzsKKyAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKKyAgICBSZWZQdHI8Tm9k
ZT4gbV9sYXN0QWRkZWQ7CisKKyAgICBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG1f
b2JzZXJ2ZXJzOworfTsKKworY2xhc3MgQ2hpbGRMaXN0QWNjdW11bGF0b3IgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENoaWxkTGlzdEFjY3VtdWxhdG9yKTsKK3B1YmxpYzoKKyAgICB+Q2hp
bGRMaXN0QWNjdW11bGF0b3IoKTsKKworICAgIHN0YXRpYyBDaGlsZExpc3RBY2N1bXVsYXRvciog
aW5zdGFuY2UoKTsKKworICAgIHZvaWQgaW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqKTsKKyAg
ICB2b2lkIGRlY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7CisKKyAgICB2b2lkIGNoaWxkQWRk
ZWQoTm9kZSosIFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5v
ZGUqLCBQYXNzUmVmUHRyPE5vZGU+KTsKKworcHJpdmF0ZToKKyAgICBDaGlsZExpc3RBY2N1bXVs
YXRvcigpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKworICAgIEhhc2hNYXA8Tm9k
ZSosIHVuc2lnbmVkPiBtX3Njb3BpbmdMZXZlbHM7CisgICAgSGFzaE1hcDxOb2RlKiwgQ2hpbGRM
aXN0QWNjdW11bGF0aW9uKj4gbV9hY2N1bXVsYXRpb25zOworCisgICAgc3RhdGljIENoaWxkTGlz
dEFjY3VtdWxhdG9yKiBzX2luc3RhbmNlOworfTsKKworQ2hpbGRMaXN0QWNjdW11bGF0aW9uOjpD
aGlsZExpc3RBY2N1bXVsYXRpb24oUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIFZlY3RvcjxXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKj4mIG9ic2VydmVycykKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkK
K3sKKyAgICBtX29ic2VydmVycy5zd2FwKG9ic2VydmVycyk7CisgICAgY2xlYXIoKTsKK30KKwor
Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKCkKK3sKKyAgICBB
U1NFUlQoaXNFbXB0eSgpKTsKK30KKwordm9pZCBDaGlsZExpc3RBY2N1bXVsYXRpb246OmNoaWxk
QWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3sKKyAgICBSZWZQdHI8Tm9kZT4gY2hp
bGQgPSBwcnBDaGlsZDsKKyAgICBpZiAoIWlzRW1wdHkoKSAmJiBtX2xhc3RBZGRlZC5nZXQoKSAh
PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgIGRpc3BhdGNoKCk7CisKKyAgICBp
ZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcHJldmlvdXNTaWJsaW5nID0gY2hpbGQtPnByZXZp
b3VzU2libGluZygpOworICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVChtX25leHRTaWJsaW5nID09IGNoaWxkLT5u
ZXh0U2libGluZygpKTsgLy8gQWRkaXRpb25zIG11c3QgYmUgaW4tb3JkZXIuCisKKyAgICBtX2Fk
ZGVkTm9kZXMuYXBwZW5kKGNoaWxkKTsKKyAgICBtX2xhc3RBZGRlZCA9IGNoaWxkOworfQorCit2
b2lkIENoaWxkTGlzdEFjY3VtdWxhdGlvbjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9k
ZT4gcHJwQ2hpbGQpCit7CisgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CisgICAg
QVNTRVJUKG1fYWRkZWROb2Rlcy5pc0VtcHR5KCkpOyAvLyBSZW1vdmFscyBtdXN0IHByZWNlZGUg
YWRkaXRpb25zLgorICAgIGlmICghbV9hZGRlZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgZGlz
cGF0Y2goKTsKKworICAgIEFTU0VSVChpc0VtcHR5KCkgfHwgbV9uZXh0U2libGluZy5nZXQoKSA9
PSBjaGlsZCk7IC8vIFJlbW92YWxzIG11c3QgYmUgY29udGludW91cyBhbmQgaW4tb3JkZXIuCisg
ICAgaWYgKCFpc0VtcHR5KCkgJiYgbV9uZXh0U2libGluZy5nZXQoKSAhPSBjaGlsZCkKKyAgICAg
ICAgZGlzcGF0Y2goKTsKKworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wcmV2aW91
c1NpYmxpbmcgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbmV4dFNpYmxp
bmcgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbV9sYXN0QWRkZWQgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKKworICAgIG1fcmVtb3ZlZE5vZGVzLmFwcGVuZChjaGlsZCk7
Cit9CisKK3ZvaWQgQ2hpbGRMaXN0QWNjdW11bGF0aW9uOjpkaXNwYXRjaCgpCit7CisgICAgQVNT
RVJUKCFpc0VtcHR5KCkpOworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0
YXRpb24gPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hpbGRMaXN0KG1fdGFyZ2V0LCBTdGF0aWNO
b2RlTGlzdDo6YWRvcHQobV9hZGRlZE5vZGVzKSwgU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG1fcmVt
b3ZlZE5vZGVzKSwgbV9wcmV2aW91c1NpYmxpbmcsIG1fbmV4dFNpYmxpbmcpOworICAgIGZvciAo
VmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaXRlciA9IG1fb2JzZXJ2
ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAg
KCppdGVyKS0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKworICAgIGNsZWFyKCk7
Cit9CisKK3ZvaWQgQ2hpbGRMaXN0QWNjdW11bGF0aW9uOjpjbGVhcigpCit7CisgICAgaWYgKCFt
X3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVtb3ZlZE5vZGVzLmNsZWFyKCk7
CisgICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2FkZGVkTm9kZXMu
Y2xlYXIoKTsKKyAgICBtX3ByZXZpb3VzU2libGluZyA9IDA7CisgICAgbV9uZXh0U2libGluZyA9
IDA7CisgICAgbV9sYXN0QWRkZWQgPSAwOworfQorCitib29sIENoaWxkTGlzdEFjY3VtdWxhdGlv
bjo6aXNFbXB0eSgpCit7CisgICAgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBt
X2FkZGVkTm9kZXMuaXNFbXB0eSgpOworfQorCitDaGlsZExpc3RBY2N1bXVsYXRvciogQ2hpbGRM
aXN0QWNjdW11bGF0b3I6OnNfaW5zdGFuY2UgPSAwOworCitDaGlsZExpc3RBY2N1bXVsYXRvcjo6
Q2hpbGRMaXN0QWNjdW11bGF0b3IoKQoreworfQorCisvLyBDYW4gdGhpcyBnZXQgY2FsbGVkCitD
aGlsZExpc3RBY2N1bXVsYXRvcjo6fkNoaWxkTGlzdEFjY3VtdWxhdG9yKCkKK3sKKyAgICBBU1NF
UlQobV9zY29waW5nTGV2ZWxzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYWNjdW11bGF0aW9u
cy5pc0VtcHR5KCkpOworfQorCit2b2lkIENoaWxkTGlzdEFjY3VtdWxhdG9yOjppbml0aWFsaXpl
KCkKK3sKKyAgICBBU1NFUlQoIXNfaW5zdGFuY2UpOworICAgIE93blB0cjxDaGlsZExpc3RBY2N1
bXVsYXRvcj4gaW5zdGFuY2UgPSBhZG9wdFB0cihuZXcgQ2hpbGRMaXN0QWNjdW11bGF0b3IpOwor
ICAgIHNfaW5zdGFuY2UgPSBpbnN0YW5jZS5sZWFrUHRyKCk7Cit9CisKKworQ2hpbGRMaXN0QWNj
dW11bGF0b3IqIENoaWxkTGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSgpCit7CisgICAgaWYgKCFz
X2luc3RhbmNlKQorICAgICAgICBpbml0aWFsaXplKCk7CisKKyAgICByZXR1cm4gc19pbnN0YW5j
ZTsKK30KKwordm9pZCBDaGlsZExpc3RBY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChOb2RlKiB0YXJn
ZXQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgQVNTRVJUKG1fYWNjdW11bGF0aW9u
cy5jb250YWlucyh0YXJnZXQpKTsKKyAgICBDaGlsZExpc3RBY2N1bXVsYXRpb24qIHJlY29yZCA9
IG1fYWNjdW11bGF0aW9ucy5nZXQodGFyZ2V0KTsKKyAgICBpZiAocmVjb3JkKQorICAgICAgICBy
ZWNvcmQtPmNoaWxkQWRkZWQoY2hpbGQpOworfQorCit2b2lkIENoaWxkTGlzdEFjY3VtdWxhdG9y
Ojp3aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQor
eworICAgIEFTU0VSVChtX2FjY3VtdWxhdGlvbnMuY29udGFpbnModGFyZ2V0KSk7CisgICAgQ2hp
bGRMaXN0QWNjdW11bGF0aW9uKiByZWNvcmQgPSBtX2FjY3VtdWxhdGlvbnMuZ2V0KHRhcmdldCk7
CisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3JkLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQp
OworfQorCit2b2lkIENoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwo
Tm9kZSogdGFyZ2V0KQoreworICAgIGlmIChtX3Njb3BpbmdMZXZlbHMuY29udGFpbnModGFyZ2V0
KSkgeworICAgICAgICBtX3Njb3BpbmdMZXZlbHMuc2V0KHRhcmdldCwgbV9zY29waW5nTGV2ZWxz
LmdldCh0YXJnZXQpICsgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Njb3Bp
bmdMZXZlbHMuc2V0KHRhcmdldCwgMSk7CisgICAgVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIqPiBvYnNlcnZlcnM7CisgICAgdGFyZ2V0LT5yZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNP
ZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGlsZExpc3QpOworICAg
IGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX2FjY3VtdWxhdGlvbnMuc2V0KHRh
cmdldCwgMCk7CisgICAgZWxzZQorICAgICAgICBtX2FjY3VtdWxhdGlvbnMuc2V0KHRhcmdldCwg
bmV3IENoaWxkTGlzdEFjY3VtdWxhdGlvbih0YXJnZXQsIG9ic2VydmVycykpOworfQorCit2b2lk
IENoaWxkTGlzdEFjY3VtdWxhdG9yOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0
KQoreworICAgIEFTU0VSVChtX3Njb3BpbmdMZXZlbHMuY29udGFpbnModGFyZ2V0KSk7CisgICAg
dW5zaWduZWQgc2NvcGluZ0xldmVsID0gbV9zY29waW5nTGV2ZWxzLmdldCh0YXJnZXQpIC0gMTsK
KworICAgIGlmIChzY29waW5nTGV2ZWwgPiAwKSB7CisgICAgICAgIG1fc2NvcGluZ0xldmVscy5z
ZXQodGFyZ2V0LCBzY29waW5nTGV2ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
T3duUHRyPENoaWxkTGlzdEFjY3VtdWxhdGlvbj4gcmVjb3JkID0gYWRvcHRQdHIobV9hY2N1bXVs
YXRpb25zLnRha2UodGFyZ2V0KSk7CisgICAgbV9zY29waW5nTGV2ZWxzLnJlbW92ZSh0YXJnZXQp
OworCisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3JkLT5kaXNwYXRjaCgpOworfQorCit9
IC8vIG5hbWVzcGFjZQorCitDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpDaGlsZExpc3RNdXRhdGlv
blNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQorICAgIDogbV90YXJnZXQodGFyZ2V0KQor
eworICAgIENoaWxkTGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSgpLT5pbmNyZW1lbnRTY29waW5n
TGV2ZWwobV90YXJnZXQuZ2V0KCkpOworfQorCitDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp+Q2hp
bGRMaXN0TXV0YXRpb25TY29wZSgpCit7CisgICAgQ2hpbGRMaXN0QWNjdW11bGF0b3I6Omluc3Rh
bmNlKCktPmRlY3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldC5nZXQoKSk7Cit9CisKK3ZvaWQg
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxk
KQoreworICAgIENoaWxkTGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSgpLT5jaGlsZEFkZGVkKG1f
dGFyZ2V0LmdldCgpLCBjaGlsZCk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6
d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgQ2hpbGRMaXN0
QWNjdW11bGF0b3I6Omluc3RhbmNlKCktPndpbGxSZW1vdmVDaGlsZChtX3RhcmdldC5nZXQoKSwg
Y2hpbGQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWM2MDg1NmM4M2I2ZGJhMjYzOGNkMzA3ZTc1ZDc3YjI0YWI2NGMzYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgTXV0YXRpb25TY29wZV9oCisjZGVmaW5lIE11dGF0aW9uU2NvcGVfaAorCisjaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE5vZGU7CisKK2NsYXNzIENoaWxkTGlzdE11
dGF0aW9uU2NvcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENoaWxkTGlzdE11dGF0aW9u
U2NvcGUpOworcHVibGljOgorICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUoUGFzc1JlZlB0cjxO
b2RlPiB0YXJnZXQpOworICAgIH5DaGlsZExpc3RNdXRhdGlvblNjb3BlKCk7CisKKyAgICB2b2lk
IGNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQo
UGFzc1JlZlB0cjxOb2RlPik7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKworI2VuZGlmIC8vIE11dGF0aW9uU2NvcGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CmluZGV4IDFmODVmZDkxMmVhZGZkNWE3MzE1OWQ2ZGVkZTkzMGU2NDg0OWM5NDAuLmM2NmRkY2M3
ODRkMjJlYTI3YjM1Y2JlODhhNDhjODM4MTQ1NWE3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTY2
LDYgKzY2LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5o
IgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlvblNjb3BlLmgi
CiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAj
aW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCkBAIC0yMTI0LDYgKzIxMjUsOSBAQCB2b2lkIE5vZGU6
OnNldFRleHRDb250ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgY2FzZSBTSEFET1df
Uk9PVF9OT0RFOiB7CiAgICAgICAgICAgICBDb250YWluZXJOb2RlKiBjb250YWluZXIgPSB0b0Nv
bnRhaW5lck5vZGUodGhpcyk7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICAg
ICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24odGhpcyk7CisjZW5kaWYKICAg
ICAgICAgICAgIGNvbnRhaW5lci0+cmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgICAgIGlmICgh
dGV4dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChk
b2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgZWMpOwpAQCAtMjY5NCw5ICsyNjk4LDkg
QEAgdm9pZCBOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYgb2IKICAgICBpZiAoIW9ic2VydmVyRW50cmllcyB8fCBv
YnNlcnZlckVudHJpZXMtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChW
ZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVyRW50
cmllcy0+YmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlckVudHJpZXMtPmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgaWYgKGl0ZXItPm1hdGNoZXModHlwZSkpCi0gICAgICAgICAgICBvYnNlcnZlcnMu
YXBwZW5kKGl0ZXItPm9ic2VydmVyLmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9ic2VydmVyRW50cmllcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCgqb2JzZXJ2ZXJF
bnRyaWVzKVtpXS5tYXRjaGVzKHR5cGUpKQorICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZCgo
Km9ic2VydmVyRW50cmllcylbaV0ub2JzZXJ2ZXIuZ2V0KCkpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDdkNzM2YWU3
YmFjNjRjNDU4OGZjYmEyZmMzZDNiNzc1Mjk3YmRlMTQuLjgzZjE1OTkwZWEyYmVjYTMzOWJiMGE3
M2NjMjk2OWJhNGRmMjlmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRp
b25PYnNlcnZlci5jcHAKQEAgLTY1LDggKzY1LDggQEAgdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyOjpvYnNlcnZlKE5vZGUqIG5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMK
IAogdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKLSAgICBmb3Ig
KFZlY3RvcjxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVkTm9kZXMuYmVnaW4oKTsg
aXRlciAhPSAgbV9vYnNlcnZlZE5vZGVzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlcikt
PnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9vYnNlcnZlZE5vZGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX29ic2VydmVkTm9k
ZXNbaV0tPnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOwogCiAgICAgbV9vYnNlcnZl
ZE5vZGVzLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IDU5
MTJkYTA3ZDc2YTQ5MmM2ZDczMjg4YTE0MzRkZDEzMWUzMTk4MDQuLjVkNDBjZDU3Y2U1NmI3ODdk
YTM1ZjI5OWM5OTcyMGMzZjkzOTM2ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
CkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRN
TFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmgi
CisjaW5jbHVkZSAiTXV0YXRpb25TY29wZS5oIgogI2luY2x1ZGUgIlJlbmRlcldvcmRCcmVhay5o
IgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgpAQCAtMzE3LDYgKzMxOCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaGFzT25lVGV4dENoaWxk
KENvbnRhaW5lck5vZGUqIG5vZGUpCiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VDaGlsZHJlbldpdGhG
cmFnbWVudChIVE1MRWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKGVsZW1lbnQpOwor
I2VuZGlmCisKICAgICBpZiAoIWZyYWdtZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgZWxl
bWVudC0+cmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDYgKzM0Mywx
MCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoSFRNTEVsZW1lbnQq
IGVsZW1lbnQsIFBhc3NSZWZQdHI8RG9jdW1lbgogCiBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRy
ZW5XaXRoVGV4dChIVE1MRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENo
aWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oZWxlbWVudCk7CisjZW5kaWYKKwogICAgIGlm
IChoYXNPbmVUZXh0Q2hpbGQoZWxlbWVudCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCo+
KGVsZW1lbnQtPmZpcnN0Q2hpbGQoKSktPnNldERhdGEodGV4dCwgZWMpOwogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggYzMwM2VlZDkzZTJkMjFkMTRjODIzMWNiODFiYTcwNmQxZTZmNDgzZi4uYTg5
M2I2Y2NmNjkyNWRkMDIxNjkxMDBhZjA1YTkxODk4NmZiZmI5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDExLTEwLTE4ICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBJbXBsZW1lbnQgV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5vYnNlcnZlIGZvciBjaGlsZExpc3QgY2hhbmdlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRy
aWJ1dGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0
cmlidXRlcy5odG1sOgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3Qt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtY2hp
bGRMaXN0Lmh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTE4ICBBZGFtIEtsZWluICA8YWRhbWtAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtNdXRhdGlvbk9ic2VydmVyc10gSW1wbGVtZW50IFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgY2hhcmFjdGVyRGF0YSBjaGFuZ2VzCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1l
eHBlY3RlZC50eHQKaW5kZXggOTg2OWZlMmVlNWIwMmMwZTc3NjhkODFhMzMyYWFmZDM4NjZlY2M4
MS4uMmY4NTk4ZGZmN2EwMjBlZTNjNzI3ZTllMzdmOTg2YTZhMjgxODY5NSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVj
dGVkLnR4dApAQCAtMjMsNyArMjMsNyBAQCBQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1l
c3BhY2UgaXMgbnVsbAogVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcg
ImF0dHJpYnV0ZXMiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGF0dHJpYnV0ZSBj
aGFuZ2VzLgogUEFTUyBtdXRhdGlvbnMgaXMgbnVsbAogCi1UZXN0aW5nIHRoYXQgcmUtb2JzZXJ2
aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qg
b2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLgorVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUg
c2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0
aW5nIHRoZSBvcHRpb25zLgogUEFTUyBjYWxscyBpcyAxCiBQQVNTIG11dGF0aW9ucy5sZW5ndGgg
aXMgMQogUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCmluZGV4IDY0NmUz
OTMxZDE0NTBjMWRjZDRhY2U0YTdlYmU1MTAzZDg4ZWIzYmUuLjg1ZWM2Nzc0ZDZmNWM3ZmQxYmE1
YjlkY2JhN2JhM2JmZjgzNTAwNjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRp
b24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlv
bi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbApAQCAtMTIsOCArMTIsNyBAQAogPHNjcmlwdD4KIAog
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwotdmFyIG11dGF0aW9uczsKLXZhciBtdXRhdGlv
bnMyOwordmFyIG11dGF0aW9ucywgbXV0YXRpb25zMjsKIHZhciBjYWxsczsKIAogZnVuY3Rpb24g
dGVzdEJhc2ljKCkgewpAQCAtMTA5LDcgKzEwOCw3IEBAIGZ1bmN0aW9uIHRlc3RNdWx0aXBsZVJl
Z2lzdHJhdGlvbigpIHsKICAgICB2YXIgb2JzZXJ2ZXI7CiAKICAgICBmdW5jdGlvbiBzdGFydCgp
IHsKLSAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9k
ZSB3aXRoIHRoZSBzYW1lIG9ic2VydmluZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhl
IG9wdGlvbnMuJyk7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRo
ZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNl
dHRpbmcgdGhlIG9wdGlvbnMuJyk7CiAgICAgCiAJCWNhbGxzID0gMDsKICAgICAgICAgbXV0YXRp
b25zID0gbnVsbDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2
ZS1jaGlsZExpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNl
cnZlLWNoaWxkTGlzdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjdiODJiNzEzZTcxZmEwMTE0
ODIyNTE5OGE0YzVmYWIyMjg1ZThlOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTgg
QEAKK1Rlc3QgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2Yg
Y2hpbGRMaXN0IG9ic2VydmF0aW9uLgorLi4uY2FuIGNoaWxkTGlzdCBjaGFuZ2VzIGJlIG9ic2Vy
dmVkIGF0IGFsbAorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBd
LnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3Ro
IGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKKy4u
Lm9ic2VydmVyLmRpc2Nvbm5lY3QoKSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGRlbGl2ZXJ5IG9m
IG11dGF0aW9ucy4KK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKy4uLnJlLW9ic2VydmluZyBhZnRl
ciBkaXNjb25uZWN0IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuCitQQVNTIG11dGF0aW9u
cy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFT
UyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1sw
XS5yZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUg
aXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMg
MQorUEFTUyBtdXRhdGlvbnNbMV0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYyCisKK1Rl
c3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJjaGlsZExpc3QiIGRvZXMg
bm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGNoaWxkTGlzdCBjaGFuZ2VzLgorUEFTUyBtdXRh
dGlvbnMgaXMgbnVsbAorCitUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUg
d2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9w
dGlvbnMuCitQQVNTIGNhbGxzIGlzIDEKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNT
IG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9ucyBpcyBudWxs
CisKK1Rlc3RpbmcgdGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgdG8g
YSBnaXZlbiBub2RlIGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlvbnMu
bGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1Mg
bXV0YXRpb25zMi5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImNoaWxk
TGlzdCIKKworVGVzdGluZyB0aGF0IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1
bHQgaW4gYSBzaW5nbGUgY2hpbGRMaXN0IG11dGF0aW9uLgorLi4uaW5uZXJIVE1MCitQQVNTIG11
dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0
IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlv
bnNbMF0uYWRkZWROb2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVk
Tm9kZXNbMV0gaXMgYWRkZWREaXYyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzJdIGlz
IGFkZGVkRGl2MworUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAyCitQ
QVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0
YXRpb25zWzBdLnJlbW92ZWROb2Rlc1sxXSBpcyByZW1vdmVkRGl2MgorLi4uaW5uZXJUZXh0CitQ
QVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hp
bGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBt
dXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAzCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjZmOTQyYzFjOGRj
MWI1ZTY4MTU0YTQwMmVkNmU0MDAxZTZlODJkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbApAQCAtMCwwICsxLDI2MyBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8dGl0bGU+PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ZGVzY3Jp
cHRpb24+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCit3aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7Cit2YXIgbXV0YXRpb25zLCBtdXRhdGlvbnMyOwordmFyIGNh
bGxzOwordmFyIGRpdiwgcmVtb3ZlZERpdjEsIHJlbW92ZWREaXYyLCBhZGRlZERpdjEsIGFkZGVk
RGl2MiwgYWRkZWREaXYzOworCitmdW5jdGlvbiB0ZXN0QmFzaWMoKSB7CisgICAgdmFyIGRpdjsK
KyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVi
dWcoJ1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBjaGlsZExpc3Qgb2JzZXJ2YXRpb24uJyk7CisK
KyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0p
OworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0
YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUo
KSB7CisgICAgICAgIGRlYnVnKCcuLi5jYW4gY2hpbGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQg
YXQgYWxsJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdyZW1vdmVkRGl2
MScpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLmRpc2Nv
bm5lY3QoKTsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrTm90RGVsaXZl
cmVkQW5kTXV0YXRlTXVsdGlwbGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrTm90
RGVsaXZlcmVkQW5kTXV0YXRlTXVsdGlwbGUoKSB7CisgICAgICAgIGRlYnVnKCcuLi5vYnNlcnZl
ci5kaXNjb25uZWN0KCkgc2hvdWxkIHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlv
bnMuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAg
IG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgcmVt
b3ZlZERpdjEgPSBkaXYucmVtb3ZlQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpOworICAgICAgICByZW1v
dmVkRGl2MiA9IGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRp
bWVvdXQoZmluaXNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAg
IGRlYnVnKCcuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3JrcyB3aXRoIHRoZSBz
YW1lIG9ic2VydmVyLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywg
JzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3Qi
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcs
ICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywg
J3JlbW92ZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICci
Y2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rl
cy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWRO
b2Rlc1swXScsICdyZW1vdmVkRGl2MicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7
CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAg
ICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0V3JvbmdUeXBlKCkgeworICAgIHZhciBkaXY7
CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRl
YnVnKCdUZXN0aW5nIHRoYXQgb2JzZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiY2hpbGRMaXN0
IiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBhYm91dCBjaGlsZExpc3QgY2hhbmdlcy4nKTsK
KworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAg
ICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVl
LCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAg
ICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQo
KTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgeworICAgIHZhciBk
aXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAg
IGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUg
c2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7
CisKKyAgICAgICAgY2FsbHMgPSAwOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAg
ICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIg
PSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBt
dXRhdGlvbnMgPSBtOworICAgICAgICAgICAgY2FsbHMrKzsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRh
OiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRy
dWUgfSk7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAg
ICAgIHNob3VsZEJlKCdjYWxscycsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMu
bGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJj
aGlsZExpc3QiJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVy
Lm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsK
KyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAg
ICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAg
ICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlz
aCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9i
c2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0
VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBs
ZU9ic2VydmVycygpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIg
b2JzZXJ2ZXIyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0
aW5nIHRoYXQgbXVsdGlwbGUgb2JzZXJ2ZXJzIGNhbiBiZSByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4g
bm9kZSBhbmQgYm90aCByZWNlaXZlIG11dGF0aW9ucy4nKTsKKyAgICAgICAgbXV0YXRpb25zID0g
bnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
ICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgewor
ICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVy
MiA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg
IG11dGF0aW9uczIgPSBtOworICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShk
aXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlcjIub2JzZXJ2ZShkaXYs
IHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAn
MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMlswXS50eXBlJywgJyJjaGlsZExpc3Qi
Jyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRp
c2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOwor
ICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbm5lckhUTUxBbmRJbm5l
clRleHQoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlv
biBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBpbm5lclRleHQgYW5kIGlu
bmVySFRNTCBhbHdheXMgcmVzdWx0IGluIGEgc2luZ2xlIGNoaWxkTGlzdCBtdXRhdGlvbi4nKTsK
KworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3Nw
YW4+PGRpdj5CYXI8L2Rpdj4nOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5maXJzdENoaWxk
OworICAgICAgICByZW1vdmVkRGl2MiA9IHJlbW92ZWREaXYxLm5leHRTaWJsaW5nOworICAgICAg
ICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAg
ICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVy
Lm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmlubmVySFRN
TCA9ICdmb288aW1nIHNyYz0iYmFyLnBuZyI+PHA+QmF6PC9wPic7CisgICAgICAgIGFkZGVkRGl2
MSA9IGRpdi5jaGlsZE5vZGVzWzBdOworICAgICAgICBhZGRlZERpdjIgPSBkaXYuY2hpbGROb2Rl
c1sxXTsKKyAgICAgICAgYWRkZWREaXYzID0gZGl2LmNoaWxkTm9kZXNbMl07CisgICAgICAgIHNl
dFRpbWVvdXQoY2hlY2tJbm5lckhUTUwsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNr
SW5uZXJIVE1MKCkgeworICAgICAgICBkZWJ1ZygnLi4uaW5uZXJIVE1MJyk7CisKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICczJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMl0nLCAnYWRkZWREaXYzJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcyJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYx
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzFdJywgJ3Jl
bW92ZWREaXYyJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2Lmlu
bmVyVGV4dCA9ICdmb28nOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4uaW5uZXJUZXh0Jyk7
CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICczJyk7CisgICAgICAg
IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5O
ZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK3ZhciB0ZXN0cyA9IFt0ZXN0
QmFzaWMsIHRlc3RXcm9uZ1R5cGUsIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbiwgdGVzdE11bHRp
cGxlT2JzZXJ2ZXJzLCB0ZXN0SW5uZXJIVE1MQW5kSW5uZXJUZXh0XTsKK3ZhciB0ZXN0SW5kZXgg
PSAwOworIAorZnVuY3Rpb24gcnVuTmV4dFRlc3QoKSB7CisgICAgaWYgKHRlc3RJbmRleCA8IHRl
c3RzLmxlbmd0aCkKKyAgICAgICAgdGVzdHNbdGVzdEluZGV4KytdKCk7CisgICAgZWxzZQorICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZGVzY3JpcHRpb24oJ1Rlc3QgV2ViS2l0TXV0YXRp
b25PYnNlcnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuJyk7CisKK2lmICghd2luZG93LldlYktp
dE11dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpJyk7CitlbHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111559</attachid>
            <date>2011-10-18 21:12:22 -0700</date>
            <delta_ts>2011-10-19 08:24:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111018211221.patch</filename>
            <type>text/plain</type>
            <size>43479</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4MDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZmZjNDhkNDlhYzNkYWE2
MDRlN2ZjMDZiMmE1NjNiZmZiYjM0Y2E2Li43YzRjZTcyZWE2NjgzZTQzYjM0NjE2Yjc4MmYyNGRi
MjU2MmZiNjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2Rl
OjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25S
ZWNvcmQpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9NdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZSk6CisgICAgICAgICogZG9t
L1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQpOgorCiAyMDExLTEwLTE4ICBB
ZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtNdXRhdGlvbk9ic2Vy
dmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgY2hhcmFj
dGVyRGF0YSBjaGFuZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU0OTZjZjg4OWMwY2U4YmFk
MTlhMDk4ZmZlZmI3YTg5OTQ0MjY5NzIuLjM4MjgxNTBhZGY3MjY0NGRlZTU5YjY2MGMzNWQyMGFl
ZGIyNjc0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01NjMsNiArNTYzLDcgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIGRvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKICAgICBkb20vTXV0
YXRpb25FdmVudC5jcHAKICAgICBkb20vTXV0YXRpb25SZWNvcmQuY3BwCisgICAgZG9tL011dGF0
aW9uU2NvcGUuY3BwCiAgICAgZG9tL05hbWVkTm9kZU1hcC5jcHAKICAgICBkb20vTmFtZU5vZGVM
aXN0LmNwcAogICAgIGRvbS9Ob2RlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggY2ZmYTA4M2E5MDY3MjVmNWMyYTZmOTdlZTg2MGUwNDQxMGZkNzkwMS4uZmE5YWMyMGQxMWJh
ZmY0NTljZjRlMWI2M2M4OTkyODRiOWI2MGFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC0xMjUzLDYgKzEyNTMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
blJlY29yZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvblNjb3BlLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2RvbS9OYW1lTm9kZUxpc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmNzQyMjY1MzlmODBl
YWY1NDM2NTg4NjFkMjA2ZDIwZGYyNmFhOWEyLi4wYWExMjc4Zjk4ZDA5MjQ0ZGFiYmI3Yzc4ODJh
ZGM4ZTcyYjBmOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01MjM0LDYgKzUyMzQsOCBAQAogICAg
ICAgICAgICAgJ2RvbS9NdXRhdGlvbkV2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9NdXRhdGlv
blJlY29yZC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9NdXRhdGlvblJlY29yZC5oJywKKyAgICAg
ICAgICAgICdkb20vTXV0YXRpb25TY29wZS5jcHAnLAorICAgICAgICAgICAgJ2RvbS9NdXRhdGlv
blNjb3BlLmgnLAogICAgICAgICAgICAgJ2RvbS9OYW1lTm9kZUxpc3QuY3BwJywKICAgICAgICAg
ICAgICdkb20vTmFtZU5vZGVMaXN0LmgnLAogICAgICAgICAgICAgJ2RvbS9OYW1lZE5vZGVNYXAu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggY2E1OTc0OWUwZjMwMDNmYTlkZmI5NzU0NjE2NTc0M2Jk
ZDhiMTE2My4uZDQ3ZTRiMjM2Y2UxZjg0NjFmMzI1NTAyYzg3NzJhODkyYjYxZDUwYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTUyMiw2ICs1MjIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vTW91c2VS
ZWxhdGVkRXZlbnQuY3BwIFwKICAgICBkb20vTXV0YXRpb25FdmVudC5jcHAgXAogICAgIGRvbS9N
dXRhdGlvblJlY29yZC5jcHAgXAorICAgIGRvbS9NdXRhdGlvblNjb3BlLmNwcCBcCiAgICAgZG9t
L05hbWVkTm9kZU1hcC5jcHAgXAogICAgIGRvbS9OYW1lTm9kZUxpc3QuY3BwIFwKICAgICBkb20v
Tm9kZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCA3NDQ2ZWQ0NmE2MTkxOTY4ZWRmODEyNDVlODBiOTc4ZGQ5ODRiYTk2Li44ODBmOTA3
Yjc5NGNkZTBlNjNmMzljYmU2YmZmZTcyZTAxNzA2YTJkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDc0OTcsNiArNDc0OTcsNjIgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE11dGF0
aW9uU2NvcGUuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJ
CTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVh
c2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxU
b29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0Nh
aXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
UmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJ
CQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxkb21cTXV0YXRpb25TY29wZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTmFtZWROb2RlTWFwLmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMTZhMWZiYmZkN2FiNzAyYjg2ZmY3YWQ2NjdhYzdjYjdiMmNk
YzY4MS4uYmFiODljNGNlMTY5NWMzMTNkYTMxN2MwNzAzMDdlMjliZjFhZGZlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTc4
Niw2ICs1Nzg2LDggQEAKIAkJRDNBQTEwRjQxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlN
YXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
M0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJ
RDNENEU5NzIxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZF
MDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBD
N0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhU
TUxTdW1tYXJ5RWxlbWVudC5oICovOyB9OworCQlENjE5QTMwNzE0NEUwMEJFMDA0QkMzMDIgLyog
TXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5jcHAgKi87
IH07CisJCUQ2MTlBMzA4MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjE5QTMwNjE0NEUwMEJF
MDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5oICovOyB9OwogCQlENzBBRDY1NzEzRTEzNDJCMDA1
QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24u
Y3BwICovOyB9OwogCQlENzBBRDY1ODEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NjEz
RTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggKi87IH07CiAJCUQ4QjYxNTJGMTAzMjQ5
NTEwMEM4NTU0QSAvKiBDb29raWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMwOTAsNiArMTMw
OTIsOCBAQAogCQlEM0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeU1hdGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNENEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8q
IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxTdW1tYXJ5RWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRp
b25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdGlv
blNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDYxOUEzMDYxNDRFMDBC
RTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTXV0YXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENzBB
RDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJlZ2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQ3MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUmVnaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMTEyMiw2ICsyMTEyNiw4IEBACiAJCQkJQzZGMDhGQjkxNDMw
RkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCAqLywKIAkJCQlDNkYwOEZCQTE0MzBG
RThGMDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuaCAqLywKIAkJCQlDNkYwOEZCQjE0MzBGRThG
MDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuaWRsICovLAorCQkJCUQ2MTlBMzA1MTQ0RTAwQkUw
MDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmNwcCAqLywKKwkJCQlENjE5QTMwNjE0NEUwMEJFMDA0
QkMzMDIgLyogTXV0YXRpb25TY29wZS5oICovLAogCQkJCUJDRjM0QTM2MTFBMjMxQ0QwMEM3MTgw
NCAvKiBOYW1lZE5vZGVNYXAuY3BwICovLAogCQkJCUE4MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAv
KiBOYW1lZE5vZGVNYXAuaCAqLywKIAkJCQk4NUFDQTlGOTBBOUI2MzEwMDA2NzFFOTAgLyogTmFt
ZWROb2RlTWFwLmlkbCAqLywKQEAgLTIzNjIxLDYgKzIzNjI3LDcgQEAKIAkJCQlDNkYwOTAwQTE0
MzI3QjYxMDA2ODU4NDkgLyogTXV0YXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODUwMzFCNEEwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM2RjA4RkJEMTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDYxOUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg3MjIzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5v
ZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg3MjFFMDk3N0QzQzAwMDU4MjZEOSAvKiBO
YW1lTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMEI5QjZDMEI3NDc1OTkwMDNFRDg5
MCAvKiBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjY2ODYsNiAr
MjY2OTMsNyBAQAogCQkJCUIxQUQ0RTYyMTNBMTJBMEIwMDg0NkIyNyAvKiBNdXRhYmxlVGV4dFRy
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1MDMxQjQ5MEE0NEVGQzcwMEY5OTJFMCAvKiBN
dXRhdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RjA4RkJDMTQzMEZFOEYwMDY4
NTg0OSAvKiBNdXRhdGlvblJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlENjE5QTMwNzE0
NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0YzNEEzNzExQTIzMUNEMDBDNzE4MDQgLyogTmFtZWROb2RlTWFwLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4MTg3MjI0MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTEwQjlCNkQwQjc0NzU5OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNS
ZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAppbmRleCAzZWE0OTkzNjkzNTc0OWIxMzE5MmI3NjM0MWQ1MDliMTUzOGU0YzBjLi5mMDMzNDBl
ZDYwOTllMTg1YmIxODZiNDg3OTI3ZGQ3ZTNlNzE4NGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk11dGF0
aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgpAQCAtMTQxLDYgKzE0MiwxMCBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9y
ZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZQogICAgIGlm
IChyZWZDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgPT0gbmV3Q2hpbGQgfHwgcmVmQ2hpbGQgPT0g
bmV3Q2hpbGQpIC8vIG5vdGhpbmcgdG8gZG8KICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0
YXRpb24odGhpcyk7CisjZW5kaWYKKwogICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gcmVmQ2hpbGQ7
CiAgICAgUmVmUHRyPE5vZGU+IHJlZkNoaWxkUHJldmlvdXNTaWJsaW5nID0gcmVmQ2hpbGQtPnBy
ZXZpb3VzU2libGluZygpOwogICAgIGZvciAoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0YXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRhcmdldHMuZW5kKCk7ICsraXQpIHsKQEAgLTI3Miw2
ICsyNzcsMTAgQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxO
b2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2UKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0
TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlzKTsKKyNlbmRpZgorCiAgICAgUmVmUHRyPE5vZGU+
IHByZXYgPSBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5l
eHQgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKIApAQCAtNDAwLDYgKzQwOSwxMCBAQCBzdGF0
aWMgdm9pZCB3aWxsUmVtb3ZlQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogY29udGFpbmVyKQogICAg
IE5vZGVWZWN0b3IgY2hpbGRyZW47CiAgICAgY29sbGVjdE5vZGVzKGNvbnRhaW5lciwgY2hpbGRy
ZW4pOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRh
dGlvblNjb3BlIG11dGF0aW9uKGNvbnRhaW5lcik7CisjZW5kaWYKKwogICAgIGZvciAoTm9kZVZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJl
bi5lbmQoKTsgaXQrKykgewogICAgICAgICBOb2RlKiBjaGlsZCA9IGl0LT5nZXQoKTsKICAgICAg
ICAgLy8gZmlyZSByZW1vdmVkIGZyb20gZG9jdW1lbnQgbXV0YXRpb24gZXZlbnRzLgpAQCAtMTA5
NSw2ICsxMTA4LDEzIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMo
Tm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsKICAgICBSZWZQdHI8RG9j
dW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKKyNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnROb2RlKCkpOworICAgICAgICBtdXRh
dGlvbi5jaGlsZEFkZGVkKGMpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKGMtPnBhcmVudE5v
ZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFSU5TRVJU
RURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2VydGVkRXZlbnQsIHRydWUsIGMtPnBh
cmVudE5vZGUoKSkpOwogCkBAIC0xMTE2LDYgKzExMzYsMTMgQEAgc3RhdGljIHZvaWQgZGlzcGF0
Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBj
aGlsZDsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7
CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnRO
b2RlKCkpOworICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQoYyk7CisgICAgfQorI2Vu
ZGlmCisKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVudHMKICAgICBp
ZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6
OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkKICAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVu
dChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRXZlbnQs
IHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGQ2OTli
MTkxMTZlODMxZDczZmQ1NTIzYTg0ZWFhMmViNTg2ZmVmNTcuLjMzZjM2NTU0OWNkNjA1NmExZGVl
MzEyODc3YWRkZWE4ZmRiZjQ5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTYyNSw4ICs2
MjUsOCBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbQogICAgICAgICByZXR1cm47CiAKICAgICBS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0
dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7Ci0gICAgZm9yIChWZWN0b3I8V2ViS2l0TXV0YXRpb25P
YnNlcnZlcio+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2Jz
ZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPmVucXVldWVNdXRhdGlvblJl
Y29yZChtdXRhdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11
dGF0aW9uKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzM4NjhlZmM0ZWZlYTNkYWYxZWY2ZGViZmFiMmY0M2ZiMjMyM2IzYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmNwcApAQCAtMCww
ICsxLDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCisKKyNpbmNsdWRlICJNdXRhdGlvblNjb3BlLmgiCisKKyNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uUmVj
b3JkLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBN
dXRhdGVkQ2hpbGRMaXN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdGVkQ2hpbGRM
aXN0KTsKK3B1YmxpYzoKKyAgICBNdXRhdGVkQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9kZT4sIFZl
Y3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4mKTsKKyAgICB+TXV0YXRlZENoaWxkTGlzdCgp
OworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2ls
bFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgZGlzcGF0Y2goKTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgYm9vbCBpc0VtcHR5KCk7CisKKyAgICBS
ZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CisKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9yZW1v
dmVkTm9kZXM7CisgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fYWRkZWROb2RlczsKKyAgICBS
ZWZQdHI8Tm9kZT4gbV9wcmV2aW91c1NpYmxpbmc7CisgICAgUmVmUHRyPE5vZGU+IG1fbmV4dFNp
Ymxpbmc7CisgICAgUmVmUHRyPE5vZGU+IG1fbGFzdEFkZGVkOworCisgICAgVmVjdG9yPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIqPiBtX29ic2VydmVyczsKK307CisKK2NsYXNzIENoaWxkTGlzdE11
dGF0aW9uTGlzdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hpbGRMaXN0TXV0YXRpb25M
aXN0KTsKK3B1YmxpYzoKKyAgICB+Q2hpbGRMaXN0TXV0YXRpb25MaXN0KCk7CisKKyAgICBzdGF0
aWMgQ2hpbGRMaXN0TXV0YXRpb25MaXN0KiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBpbmNyZW1l
bnRTY29waW5nTGV2ZWwoTm9kZSopOworICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKE5v
ZGUqKTsKKworICAgIHZvaWQgY2hpbGRBZGRlZChOb2RlKiwgUGFzc1JlZlB0cjxOb2RlPik7Cisg
ICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQoTm9kZSosIFBhc3NSZWZQdHI8Tm9kZT4pOworCitwcml2
YXRlOgorICAgIENoaWxkTGlzdE11dGF0aW9uTGlzdCgpOworICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemUoKTsKKworICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX3Njb3BpbmdMZXZlbHM7
CisgICAgSGFzaE1hcDxOb2RlKiwgTXV0YXRlZENoaWxkTGlzdCo+IG1fYWNjdW11bGF0aW9uczsK
KworICAgIHN0YXRpYyBDaGlsZExpc3RNdXRhdGlvbkxpc3QqIHNfaW5zdGFuY2U7Cit9OworCitN
dXRhdGVkQ2hpbGRMaXN0OjpNdXRhdGVkQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0
LCBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+JiBvYnNlcnZlcnMpCisgICAgOiBtX3Rh
cmdldCh0YXJnZXQpCit7CisgICAgbV9vYnNlcnZlcnMuc3dhcChvYnNlcnZlcnMpOworICAgIGNs
ZWFyKCk7Cit9CisKK011dGF0ZWRDaGlsZExpc3Q6On5NdXRhdGVkQ2hpbGRMaXN0KCkKK3sKKyAg
ICBBU1NFUlQoaXNFbXB0eSgpKTsKK30KKwordm9pZCBNdXRhdGVkQ2hpbGRMaXN0OjpjaGlsZEFk
ZGVkKFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQpCit7CisgICAgUmVmUHRyPE5vZGU+IGNoaWxk
ID0gcHJwQ2hpbGQ7CisKKyAgICAvLyBBZGRpdGlvbnMgbXVzdCBiZSBpbi1vcmRlci4KKyAgICBp
ZiAoIWlzRW1wdHkoKSAmJiAobV9sYXN0QWRkZWQuZ2V0KCkgIT0gY2hpbGQtPnByZXZpb3VzU2li
bGluZygpIHx8IG1fbmV4dFNpYmxpbmcgIT0gY2hpbGQtPm5leHRTaWJsaW5nKCkpKQorICAgICAg
ICBkaXNwYXRjaCgpOworCisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICBtX3ByZXZpb3Vz
U2libGluZyA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgbV9uZXh0U2libGlu
ZyA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgIH0KKworICAgIG1fYWRkZWROb2Rlcy5hcHBl
bmQoY2hpbGQpOworICAgIG1fbGFzdEFkZGVkID0gY2hpbGQ7Cit9CisKK3ZvaWQgTXV0YXRlZENo
aWxkTGlzdDo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQpCit7Cisg
ICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CisgICAgQVNTRVJUKG1fYWRkZWROb2Rl
cy5pc0VtcHR5KCkpOyAvLyBSZW1vdmFscyBtdXN0IHByZWNlZGUgYWRkaXRpb25zLgorICAgIGlm
ICghbV9hZGRlZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgZGlzcGF0Y2goKTsKKworICAgIEFT
U0VSVChpc0VtcHR5KCkgfHwgbV9uZXh0U2libGluZy5nZXQoKSA9PSBjaGlsZCk7IC8vIFJlbW92
YWxzIG11c3QgYmUgY29udGludW91cyBhbmQgaW4tb3JkZXIuCisgICAgaWYgKCFpc0VtcHR5KCkg
JiYgbV9uZXh0U2libGluZy5nZXQoKSAhPSBjaGlsZCkKKyAgICAgICAgZGlzcGF0Y2goKTsKKwor
ICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wcmV2aW91c1NpYmxpbmcgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgbV9sYXN0QWRkZWQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7
CisgICAgfSBlbHNlCisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKKworICAgIG1fcmVtb3ZlZE5vZGVzLmFwcGVuZChjaGlsZCk7Cit9CisKK3ZvaWQgTXV0YXRl
ZENoaWxkTGlzdDo6ZGlzcGF0Y2goKQoreworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICBp
ZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6
OmNyZWF0ZUNoaWxkTGlzdChtX3RhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0aWNOb2RlTGlzdDo6
YWRvcHQobV9hZGRlZE5vZGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0aWNOb2RlTGlzdDo6YWRvcHQo
bV9yZW1vdmVkTm9kZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJldmlvdXNTaWJsaW5nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbmV4dFNpYmxpbmcpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vYnNl
cnZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fb2JzZXJ2ZXJzW2ldLT5lbnF1ZXVlTXV0YXRp
b25SZWNvcmQobXV0YXRpb24pOworCisgICAgY2xlYXIoKTsKK30KKwordm9pZCBNdXRhdGVkQ2hp
bGRMaXN0OjpjbGVhcigpCit7CisgICAgaWYgKCFtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkpCisg
ICAgICAgIG1fcmVtb3ZlZE5vZGVzLmNsZWFyKCk7CisgICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNF
bXB0eSgpKQorICAgICAgICBtX2FkZGVkTm9kZXMuY2xlYXIoKTsKKyAgICBtX3ByZXZpb3VzU2li
bGluZyA9IDA7CisgICAgbV9uZXh0U2libGluZyA9IDA7CisgICAgbV9sYXN0QWRkZWQgPSAwOwor
fQorCitib29sIE11dGF0ZWRDaGlsZExpc3Q6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBtX3Jl
bW92ZWROb2Rlcy5pc0VtcHR5KCkgJiYgbV9hZGRlZE5vZGVzLmlzRW1wdHkoKTsKK30KKworQ2hp
bGRMaXN0TXV0YXRpb25MaXN0KiBDaGlsZExpc3RNdXRhdGlvbkxpc3Q6OnNfaW5zdGFuY2UgPSAw
OworCitDaGlsZExpc3RNdXRhdGlvbkxpc3Q6OkNoaWxkTGlzdE11dGF0aW9uTGlzdCgpCit7Cit9
CisKK0NoaWxkTGlzdE11dGF0aW9uTGlzdDo6fkNoaWxkTGlzdE11dGF0aW9uTGlzdCgpCit7Cisg
ICAgQVNTRVJUKG1fc2NvcGluZ0xldmVscy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2FjY3Vt
dWxhdGlvbnMuaXNFbXB0eSgpKTsKK30KKwordm9pZCBDaGlsZExpc3RNdXRhdGlvbkxpc3Q6Omlu
aXRpYWxpemUoKQoreworICAgIEFTU0VSVCghc19pbnN0YW5jZSk7CisgICAgc19pbnN0YW5jZSA9
IGFkb3B0UHRyKG5ldyBDaGlsZExpc3RNdXRhdGlvbkxpc3QpLmxlYWtQdHIoKTsKK30KKworCitD
aGlsZExpc3RNdXRhdGlvbkxpc3QqIENoaWxkTGlzdE11dGF0aW9uTGlzdDo6aW5zdGFuY2UoKQor
eworICAgIGlmICghc19pbnN0YW5jZSkKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgcmV0
dXJuIHNfaW5zdGFuY2U7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25MaXN0OjpjaGlsZEFk
ZGVkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBBU1NFUlQo
bV9hY2N1bXVsYXRpb25zLmNvbnRhaW5zKHRhcmdldCkpOworICAgIE11dGF0ZWRDaGlsZExpc3Qq
IHJlY29yZCA9IG1fYWNjdW11bGF0aW9ucy5nZXQodGFyZ2V0KTsKKyAgICBpZiAocmVjb3JkKQor
ICAgICAgICByZWNvcmQtPmNoaWxkQWRkZWQoY2hpbGQpOworfQorCit2b2lkIENoaWxkTGlzdE11
dGF0aW9uTGlzdDo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2Rl
PiBjaGlsZCkKK3sKKyAgICBBU1NFUlQobV9hY2N1bXVsYXRpb25zLmNvbnRhaW5zKHRhcmdldCkp
OworICAgIE11dGF0ZWRDaGlsZExpc3QqIHJlY29yZCA9IG1fYWNjdW11bGF0aW9ucy5nZXQodGFy
Z2V0KTsKKyAgICBpZiAocmVjb3JkKQorICAgICAgICByZWNvcmQtPndpbGxSZW1vdmVDaGlsZChj
aGlsZCk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25MaXN0OjppbmNyZW1lbnRTY29waW5n
TGV2ZWwoTm9kZSogdGFyZ2V0KQoreworICAgIGlmIChtX3Njb3BpbmdMZXZlbHMuY29udGFpbnMo
dGFyZ2V0KSkgeworICAgICAgICBtX3Njb3BpbmdMZXZlbHMuc2V0KHRhcmdldCwgbV9zY29waW5n
TGV2ZWxzLmdldCh0YXJnZXQpICsgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X3Njb3BpbmdMZXZlbHMuc2V0KHRhcmdldCwgMSk7CisgICAgVmVjdG9yPFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7CisgICAgdGFyZ2V0LT5yZWdpc3RlcmVkTXV0YXRpb25PYnNl
cnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGlsZExpc3Qp
OworICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX2FjY3VtdWxhdGlvbnMu
c2V0KHRhcmdldCwgMCk7CisgICAgZWxzZQorICAgICAgICBtX2FjY3VtdWxhdGlvbnMuc2V0KHRh
cmdldCwgbmV3IE11dGF0ZWRDaGlsZExpc3QodGFyZ2V0LCBvYnNlcnZlcnMpKTsKK30KKwordm9p
ZCBDaGlsZExpc3RNdXRhdGlvbkxpc3Q6OmRlY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKiB0YXJn
ZXQpCit7CisgICAgQVNTRVJUKG1fc2NvcGluZ0xldmVscy5jb250YWlucyh0YXJnZXQpKTsKKyAg
ICB1bnNpZ25lZCBzY29waW5nTGV2ZWwgPSBtX3Njb3BpbmdMZXZlbHMuZ2V0KHRhcmdldCkgLSAx
OworCisgICAgaWYgKHNjb3BpbmdMZXZlbCA+IDApIHsKKyAgICAgICAgbV9zY29waW5nTGV2ZWxz
LnNldCh0YXJnZXQsIHNjb3BpbmdMZXZlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBPd25QdHI8TXV0YXRlZENoaWxkTGlzdD4gcmVjb3JkID0gYWRvcHRQdHIobV9hY2N1bXVsYXRp
b25zLnRha2UodGFyZ2V0KSk7CisgICAgbV9zY29waW5nTGV2ZWxzLnJlbW92ZSh0YXJnZXQpOwor
CisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3JkLT5kaXNwYXRjaCgpOworfQorCitDaGls
ZExpc3RNdXRhdGlvblNjb3BlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0KQorICAgIDogbV90YXJnZXQodGFyZ2V0KQoreworICAgIENoaWxkTGlzdE11dGF0
aW9uTGlzdDo6aW5zdGFuY2UoKS0+aW5jcmVtZW50U2NvcGluZ0xldmVsKG1fdGFyZ2V0LmdldCgp
KTsKK30KKworQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUo
KQoreworICAgIENoaWxkTGlzdE11dGF0aW9uTGlzdDo6aW5zdGFuY2UoKS0+ZGVjcmVtZW50U2Nv
cGluZ0xldmVsKG1fdGFyZ2V0LmdldCgpKTsKK30KKwordm9pZCBDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgQ2hpbGRMaXN0
TXV0YXRpb25MaXN0OjppbnN0YW5jZSgpLT5jaGlsZEFkZGVkKG1fdGFyZ2V0LmdldCgpLCBjaGls
ZCk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6d2lsbFJlbW92ZUNoaWxkKFBh
c3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgQ2hpbGRMaXN0TXV0YXRpb25MaXN0OjppbnN0
YW5jZSgpLT53aWxsUmVtb3ZlQ2hpbGQobV90YXJnZXQuZ2V0KCksIGNoaWxkKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNjA4NTZjODNiNmRi
YTI2MzhjZDMwN2U3NWQ3N2IyNGFiNjRjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25TY29wZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE11dGF0aW9u
U2NvcGVfaAorI2RlZmluZSBNdXRhdGlvblNjb3BlX2gKKworI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBOb2RlOworCitjbGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3BlKTsKK3B1YmxpYzoK
KyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKKyAg
ICB+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSgpOworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NS
ZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4p
OworCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisK
KyNlbmRpZiAvLyBNdXRhdGlvblNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAxZjg1ZmQ5MTJl
YWRmZDVhNzMxNTlkNmRlZGU5MzBlNjQ4NDljOTQwLi5jNjZkZGNjNzg0ZDIyZWEyN2IzNWNiZTg4
YTQ4YzgzODE0NTVhNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNdXRh
dGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiTXV0YXRpb25TY29wZS5oIgogI2luY2x1ZGUgIk5hbWVO
b2RlTGlzdC5oIgogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgIk5vZGVSYXJl
RGF0YS5oIgpAQCAtMjEyNCw2ICsyMTI1LDkgQEAgdm9pZCBOb2RlOjpzZXRUZXh0Q29udGVudChj
b25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBjYXNlIERPQ1VN
RU5UX0ZSQUdNRU5UX05PREU6CiAgICAgICAgIGNhc2UgU0hBRE9XX1JPT1RfTk9ERTogewogICAg
ICAgICAgICAgQ29udGFpbmVyTm9kZSogY29udGFpbmVyID0gdG9Db250YWluZXJOb2RlKHRoaXMp
OworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgICAgICAgICBDaGlsZExpc3RN
dXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCiAgICAgICAgICAgICBjb250YWlu
ZXItPnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRl
VGV4dE5vZGUodGV4dCksIGVjKTsKQEAgLTI2OTQsOSArMjY5OCw5IEBAIHZvaWQgTm9kZTo6cmVn
aXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKj4mIG9iCiAgICAgaWYgKCFvYnNlcnZlckVudHJpZXMgfHwgb2JzZXJ2ZXJFbnRyaWVzLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoVmVjdG9yPE11dGF0aW9uT2Jz
ZXJ2ZXJFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlckVudHJpZXMtPmJlZ2luKCk7IGl0
ZXIgIT0gb2JzZXJ2ZXJFbnRyaWVzLT5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVy
LT5tYXRjaGVzKHR5cGUpKQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChpdGVyLT5vYnNl
cnZlci5nZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlckVudHJpZXMt
PnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgoKm9ic2VydmVyRW50cmllcylbaV0ubWF0Y2hl
cyh0eXBlKSkKKyAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoKCpvYnNlcnZlckVudHJpZXMp
W2ldLm9ic2VydmVyLmdldCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA3ZDczNmFlN2JhYzY0YzQ1ODhmY2JhMmZj
M2QzYjc3NTI5N2JkZTE0Li44M2YxNTk5MGVhMmJlY2EzMzliYjBhNzNjYzI5NjliYTRkZjI5ZmE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCkBA
IC02NSw4ICs2NSw4IEBAIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2Rl
KiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zCiAKIHZvaWQgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgZm9yIChWZWN0b3I8Tm9kZSo+Ojpp
dGVyYXRvciBpdGVyID0gbV9vYnNlcnZlZE5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gIG1fb2JzZXJ2
ZWROb2Rlcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT51bnJlZ2lzdGVyTXV0YXRp
b25PYnNlcnZlcih0aGlzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb2JzZXJ2ZWRO
b2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlZE5vZGVzW2ldLT51bnJlZ2lzdGVy
TXV0YXRpb25PYnNlcnZlcih0aGlzKTsKIAogICAgIG1fb2JzZXJ2ZWROb2Rlcy5jbGVhcigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA1OTEyZGEwN2Q3NmE0OTJjNmQ3
MzI4OGExNDM0ZGQxMzFlMzE5ODA0Li41ZDQwY2Q1N2NlNTZiNzg3ZGEzNWYyOTljOTk3MjBjM2Y5
MzkzNmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIK
ICNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIk11dGF0
aW9uU2NvcGUuaCIKICNpbmNsdWRlICJSZW5kZXJXb3JkQnJlYWsuaCIKICNpbmNsdWRlICJTY3Jp
cHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTMxNyw2ICszMTgs
MTAgQEAgc3RhdGljIGlubGluZSBib29sIGhhc09uZVRleHRDaGlsZChDb250YWluZXJOb2RlKiBu
b2RlKQogCiBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoSFRNTEVsZW1l
bnQqIGVsZW1lbnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hp
bGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihlbGVtZW50KTsKKyNlbmRpZgorCiAgICAgaWYg
KCFmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPnJlbW92ZUNoaWxk
cmVuKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMzOCw2ICszNDMsMTAgQEAgc3RhdGljIHZvaWQg
cmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVm
UHRyPERvY3VtZW4KIAogc3RhdGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aFRleHQoSFRNTEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNj
b3BlIG11dGF0aW9uKGVsZW1lbnQpOworI2VuZGlmCisKICAgICBpZiAoaGFzT25lVGV4dENoaWxk
KGVsZW1lbnQpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50LT5maXJzdENo
aWxkKCkpLT5zZXREYXRhKHRleHQsIGVjKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMzMDNl
ZWQ5M2UyZDIxZDE0YzgyMzFjYjgxYmE3MDZkMWU2ZjQ4M2YuLmE4OTNiNmNjZjY5MjVkZDAyMTY5
MTAwYWYwNWE5MTg5ODZmYmZiOWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMC0xOCAg
UmFmYWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRh
dGlvbk9ic2VydmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBm
b3IgY2hpbGRMaXN0IGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY4OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbDoKKyAg
ICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC5odG1sOiBBZGRl
ZC4KKwogMjAxMS0xMC0xOCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
Lm9ic2VydmUgZm9yIGNoYXJhY3RlckRhdGEgY2hhbmdlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CmluZGV4
IDk4NjlmZTJlZTViMDJjMGU3NzY4ZDgxYTMzMmFhZmQzODY2ZWNjODEuLjJmODU5OGRmZjdhMDIw
ZWUzYzcyN2U5ZTM3Zjk4NmE2YTI4MTg2OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
bXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKQEAgLTIzLDcg
KzIzLDcgQEAgUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKIFRl
c3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJhdHRyaWJ1dGVzIiBkb2Vz
IG5vdCByZXN1bHQgaW4gaGVhcmluZyBhYm91dCBhdHRyaWJ1dGUgY2hhbmdlcy4KIFBBU1MgbXV0
YXRpb25zIGlzIG51bGwKIAotVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2Rl
IHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5nIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUg
b3B0aW9ucy4KK1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRo
ZSBzYW1lIG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4K
IFBBU1MgY2FsbHMgaXMgMQogUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKIFBBU1MgbXV0YXRp
b25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRh
dGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAppbmRleCA2NDZlMzkzMWQxNDUwYzFkY2Q0YWNl
NGE3ZWJlNTEwM2Q4OGViM2JlLi44NWVjNjc3NGQ2ZjVjN2ZkMWJhNWI5ZGNiYTdiYTNiZmY4MzUw
MDY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmli
dXRlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1
dGVzLmh0bWwKQEAgLTEyLDggKzEyLDcgQEAKIDxzY3JpcHQ+CiAKIHdpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKLXZhciBtdXRhdGlvbnM7Ci12YXIgbXV0YXRpb25zMjsKK3ZhciBtdXRhdGlv
bnMsIG11dGF0aW9uczI7CiB2YXIgY2FsbHM7CiAKIGZ1bmN0aW9uIHRlc3RCYXNpYygpIHsKQEAg
LTEwOSw3ICsxMDgsNyBAQCBmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24oKSB7CiAg
ICAgdmFyIG9ic2VydmVyOwogCiAgICAgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgICAgIGRlYnVn
KCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBv
YnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLicpOworICAg
ICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGgg
dGhlIHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25z
LicpOwogICAgIAogCQljYWxscyA9IDA7CiAgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3YjgyYjcxM2U3MWZhMDExNDgyMjUxOThhNGM1ZmFiMjI4
NWU4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2Vy
dmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDU4IEBACitUZXN0IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBvbiBhdHRyaWJ1dGVzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworVGVzdGluZyBiYXNpYyBhc3BlY3RzIG9mIGNoaWxkTGlzdCBvYnNlcnZh
dGlvbi4KKy4uLmNhbiBjaGlsZExpc3QgY2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwKK1BBU1Mg
bXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExp
c3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0
aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYxCisuLi5vYnNlcnZlci5kaXNjb25u
ZWN0KCkgc2hvdWxkIHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuCitQQVNT
IG11dGF0aW9ucyBpcyBudWxsCisuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3Jr
cyB3aXRoIHRoZSBzYW1lIG9ic2VydmVyLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDIKK1BB
U1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBd
IGlzIHJlbW92ZWREaXYxCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJjaGlsZExpc3QiCitQ
QVNTIG11dGF0aW9uc1sxXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25z
WzFdLnJlbW92ZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MgorCitUZXN0aW5nIHRoYXQgb2JzZXJ2
aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiY2hpbGRMaXN0IiBkb2VzIG5vdCByZXN1bHQgaW4gaGVh
cmluZyBhYm91dCBjaGlsZExpc3QgY2hhbmdlcy4KK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKwor
VGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2Jz
ZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLgorUEFTUyBjYWxs
cyBpcyAxCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlw
ZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnMgaXMgbnVsbAorCitUZXN0aW5nIHRoYXQg
bXVsdGlwbGUgb2JzZXJ2ZXJzIGNhbiBiZSByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gbm9kZSBhbmQg
Ym90aCByZWNlaXZlIG11dGF0aW9ucy4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNT
IG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uczIubGVuZ3Ro
IGlzIDEKK1BBU1MgbXV0YXRpb25zMlswXS50eXBlIGlzICJjaGlsZExpc3QiCisKK1Rlc3Rpbmcg
dGhhdCBpbm5lclRleHQgYW5kIGlubmVySFRNTCBhbHdheXMgcmVzdWx0IGluIGEgc2luZ2xlIGNo
aWxkTGlzdCBtdXRhdGlvbi4KKy4uLmlubmVySFRNTAorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlz
IDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25z
WzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDMKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNb
MF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzFdIGlzIGFkZGVk
RGl2MgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1syXSBpcyBhZGRlZERpdjMKK1BBU1Mg
bXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0u
cmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVk
Tm9kZXNbMV0gaXMgcmVtb3ZlZERpdjIKKy4uLmlubmVyVGV4dAorUEFTUyBtdXRhdGlvbnMubGVu
Z3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0
YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlcy5sZW5ndGggaXMgMworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLWNoaWxkTGlzdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZl
LWNoaWxkTGlzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2Zjk0MmMxYzhkYzFiNWU2ODE1NGE0MDJlZDZl
NDAwMWU2ZTgyZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9u
L29ic2VydmUtY2hpbGRMaXN0Lmh0bWwKQEAgLTAsMCArMSwyNjMgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHRpdGxl
PjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPWRlc2NyaXB0aW9uPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOwordmFyIG11dGF0aW9ucywgbXV0YXRpb25zMjsKK3ZhciBjYWxsczsKK3ZhciBkaXYsIHJl
bW92ZWREaXYxLCByZW1vdmVkRGl2MiwgYWRkZWREaXYxLCBhZGRlZERpdjIsIGFkZGVkRGl2MzsK
KworZnVuY3Rpb24gdGVzdEJhc2ljKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVy
OworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGJhc2lj
IGFzcGVjdHMgb2YgY2hpbGRMaXN0IG9ic2VydmF0aW9uLicpOworCisgICAgICAgIG11dGF0aW9u
cyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0p
IHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9i
c2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgcmVtb3Zl
ZERpdjEgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwor
ICAgICAgICBzZXRUaW1lb3V0KGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSwgMCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlKCkgeworICAgICAgICBkZWJ1
ZygnLi4uY2FuIGNoaWxkTGlzdCBjaGFuZ2VzIGJlIG9ic2VydmVkIGF0IGFsbCcpOworCisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKworICAgICAgICBt
dXRhdGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAg
IHJlbW92ZWREaXYxID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja05vdERlbGl2ZXJlZEFuZE11dGF0ZU11bHRp
cGxlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja05vdERlbGl2ZXJlZEFuZE11dGF0
ZU11bHRpcGxlKCkgeworICAgICAgICBkZWJ1ZygnLi4ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpIHNo
b3VsZCBwcmV2ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0YXRpb25zLicpOworCisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIHJlbW92ZWREaXYxID0gZGl2LnJl
bW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTsKKyAgICAgICAgcmVtb3ZlZERpdjIgPSBkaXYucmVt
b3ZlQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4ucmUtb2Jz
ZXJ2aW5nIGFmdGVyIGRpc2Nvbm5lY3Qgd29ya3Mgd2l0aCB0aGUgc2FtZSBvYnNlcnZlci4nKTsK
KworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3Zl
ZERpdjInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1Zygn
Jyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwor
ZnVuY3Rpb24gdGVzdFdyb25nVHlwZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZl
cjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0
IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImNoaWxkTGlzdCIgZG9lcyBub3QgcmVzdWx0
IGluIGhlYXJpbmcgYWJvdXQgY2hpbGRMaXN0IGNoYW5nZXMuJyk7CisKKyAgICAgICAgbXV0YXRp
b25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24o
bSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
b2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hhcmFjdGVyRGF0YTog
dHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7
CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAg
ICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbigpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNl
cnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0
aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIgaGFz
IHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLicpOworCisgICAgICAgIGNhbGxz
ID0gMDsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAg
ICAgICAgICAgIGNhbGxzKys7CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2Vy
dmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAg
ICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBk
aXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBz
ZXRUaW1lb3V0KGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSwgMCk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlKCkgeworICAgICAgICBzaG91bGRCZSgnY2Fs
bHMnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAg
ICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBj
aGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVy
Lm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIGRpdi5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRpbWVvdXQo
ZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0
KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisK
KyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMoKSB7Cisg
ICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsKKworICAg
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG11bHRpcGxl
IG9ic2VydmVycyBjYW4gYmUgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIG5vZGUgYW5kIGJvdGggcmVj
ZWl2ZSBtdXRhdGlvbnMuJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5l
dyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0
aW9ucyA9IG07CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMyID0gbTsK
KyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDog
dHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1
ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczIubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uczJbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBvYnNl
cnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIG9ic2VydmVyMi5kaXNjb25uZWN0KCk7CisgICAg
ICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFy
dCgpOworfQorCitmdW5jdGlvbiB0ZXN0SW5uZXJIVE1MQW5kSW5uZXJUZXh0KCkgeworICAgIHZh
ciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAg
ICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgaW5uZXJUZXh0IGFuZCBpbm5lckhUTUwgYWx3YXlzIHJl
c3VsdCBpbiBhIHNpbmdsZSBjaGlsZExpc3QgbXV0YXRpb24uJyk7CisKKyAgICAgICAgbXV0YXRp
b25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHNwYW4+Rm9vPC9zcGFuPjxkaXY+QmFyPC9kaXY+
JzsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBkaXYuZmlyc3RDaGlsZDsKKyAgICAgICAgcmVtb3Zl
ZERpdjIgPSByZW1vdmVkRGl2MS5uZXh0U2libGluZzsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlv
bnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBj
aGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAnZm9vPGltZyBzcmM9
ImJhci5wbmciPjxwPkJhejwvcD4nOworICAgICAgICBhZGRlZERpdjEgPSBkaXYuY2hpbGROb2Rl
c1swXTsKKyAgICAgICAgYWRkZWREaXYyID0gZGl2LmNoaWxkTm9kZXNbMV07CisgICAgICAgIGFk
ZGVkRGl2MyA9IGRpdi5jaGlsZE5vZGVzWzJdOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrSW5u
ZXJIVE1MLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0lubmVySFRNTCgpIHsKKyAg
ICAgICAgZGVidWcoJy4uLmlubmVySFRNTCcpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywg
JyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rl
cy5sZW5ndGgnLCAnMycpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9k
ZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRk
ZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5hZGRlZE5vZGVzWzJdJywgJ2FkZGVkRGl2MycpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlc1sxXScsICdyZW1vdmVkRGl2MicpOworCisg
ICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdi5pbm5lclRleHQgPSAnZm9vJzsK
KyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLmlubmVyVGV4dCcpOworCisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0uYWRkZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMycpOworICAgICAgICBvYnNlcnZlci5kaXNjb25u
ZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9
CisKKyAgICBzdGFydCgpOworfQorCit2YXIgdGVzdHMgPSBbdGVzdEJhc2ljLCB0ZXN0V3JvbmdU
eXBlLCB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24sIHRlc3RNdWx0aXBsZU9ic2VydmVycywgdGVz
dElubmVySFRNTEFuZElubmVyVGV4dF07Cit2YXIgdGVzdEluZGV4ID0gMDsKKyAKK2Z1bmN0aW9u
IHJ1bk5leHRUZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAg
ICAgIHRlc3RzW3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7Cit9CisKK2Rlc2NyaXB0aW9uKCdUZXN0IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2
ZSBvbiBhdHRyaWJ1dGVzLicpOworCitpZiAoIXdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVy
KQorICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKScpOworZWxzZQorICAgIHJ1bk5leHRUZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111625</attachid>
            <date>2011-10-19 08:24:49 -0700</date>
            <delta_ts>2011-10-19 11:22:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111019082448.patch</filename>
            <type>text/plain</type>
            <size>43820</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZjNhNzgxMGY5NDNhOTU0
NTAyNWI0MjQ5YzE2NDZkZTM3ZmExNWJkLi43MmUxNzg4ZDE1ZGRiMTNjMDdkM2E4MjYyMmI1ZDc0
M2NlNWEwZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2Rl
OjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25S
ZWNvcmQpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9NdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZSk6CisgICAgICAgICogZG9t
L1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQpOgorCiAyMDExLTEwLTE5ICBS
ZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgbmV3IHJlbmRl
cmVyIGZvciBTVkdSZWN0RWxlbWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGI1MGZmOWY2
OWE2ZTlkMzM5ZjI0YzUxYThjOTllNzFmYzQzZjYyYy4uYjFiNTg5NmRkZDNhMWZhM2RhMmYzZmM4
MjFhOThmODYyMGNhNThhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU2Myw2ICs1NjMsNyBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAogICAg
IGRvbS9NdXRhdGlvbkV2ZW50LmNwcAogICAgIGRvbS9NdXRhdGlvblJlY29yZC5jcHAKKyAgICBk
b20vTXV0YXRpb25TY29wZS5jcHAKICAgICBkb20vTmFtZWROb2RlTWFwLmNwcAogICAgIGRvbS9O
YW1lTm9kZUxpc3QuY3BwCiAgICAgZG9tL05vZGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCA0ODA2Zjk5M2UxYzc1ZTI0Nzc5MDUyZDU1ZDU3ODdiYjVlYmVlOWU5Li45Nzg0
N2NmOGQ0NGRmMjhlYWY0NTQwMzg5ZGJiNjM0YzhiM2RiZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTEyNTMsNiArMTI1Myw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmggXAorCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaCBcCiAJU291cmNl
L1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDkyNzc1
OTYyMDdlZmVlNjAzMTQyMTlmN2YwN2FjZjRjYTYzZjQ2Y2UuLmVmZWRjZjMyNTA1ZDU1ZjJhNDgy
ZTU5MTIzOGEyMTZmZDA3M2FhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUyMzEsNiArNTIzMSw4
IEBACiAgICAgICAgICAgICAnZG9tL011dGF0aW9uRXZlbnQuaCcsCiAgICAgICAgICAgICAnZG9t
L011dGF0aW9uUmVjb3JkLmNwcCcsCiAgICAgICAgICAgICAnZG9tL011dGF0aW9uUmVjb3JkLmgn
LAorICAgICAgICAgICAgJ2RvbS9NdXRhdGlvblNjb3BlLmNwcCcsCisgICAgICAgICAgICAnZG9t
L011dGF0aW9uU2NvcGUuaCcsCiAgICAgICAgICAgICAnZG9tL05hbWVOb2RlTGlzdC5jcHAnLAog
ICAgICAgICAgICAgJ2RvbS9OYW1lTm9kZUxpc3QuaCcsCiAgICAgICAgICAgICAnZG9tL05hbWVk
Tm9kZU1hcC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBkOTQzZTU4YTBmYjRjNjljZTRlNTJmODll
MzI1NGUxOGY1YTZiYTdiLi40MTYxZTQ2NzE4MjU1MTI0YzBjMzQ3Yjg0NmE2YjU2MmRjMThkYzNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwpAQCAtNTIxLDYgKzUyMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRv
bS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAgXAogICAgIGRvbS9NdXRhdGlvbkV2ZW50LmNwcCBcCiAg
ICAgZG9tL011dGF0aW9uUmVjb3JkLmNwcCBcCisgICAgZG9tL011dGF0aW9uU2NvcGUuY3BwIFwK
ICAgICBkb20vTmFtZWROb2RlTWFwLmNwcCBcCiAgICAgZG9tL05hbWVOb2RlTGlzdC5jcHAgXAog
ICAgIGRvbS9Ob2RlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCmluZGV4IDI1ZDZhY2RlYTU4NmY4Mjg1Y2ZmN2Q5ZGJhNDI2YjI2NGRlNWJiNGIu
LjYyNDlmMzIwMjI3ZTIyMzkwOGUxZWY3ODM4YjVhNzQ3NzMyZTEzOTMgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00NzYxMCw2ICs0NzYxMCw2
MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cTXV0YXRpb25TY29wZS5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
Lz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNdXRhdGlvblNjb3BlLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOYW1lZE5vZGVNYXAu
Y3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiOTc2OGFmMzYxZmUzYjZkY2Y0NTA0MDc2M2Nl
NzViMWYyOWZiZDkxLi4zYmQyOWU5MDE4ZDk2Yjc1YTAxNzg3OGUzMzg4NDc1ZWI4NWQzMDNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC01Nzg2LDYgKzU3ODYsOCBAQAogCQlEM0FBMTBGNDEyM0E5OEFBMDA5MjE1MkIgLyogTWVk
aWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oICov
OyB9OwogCQlEM0Q0RTk3MjEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRDRFOTcw
MTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICovOyB9OwogCQlEM0Q0
RTk3MzEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1
NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi87IH07CisJCUQ2MTlBMzA3MTQ0RTAwQkUwMDRC
QzMwMiAvKiBNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3Bl
LmNwcCAqLzsgfTsKKwkJRDYxOUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA2
MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggKi87IH07CiAJCUQ3MEFENjU3MTNF
MTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRl
clJlZ2lvbi5jcHAgKi87IH07CiAJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJS
ZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3
MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCAqLzsgfTsKIAkJRDhCNjE1
MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzA5
MCw2ICsxMzA5Miw4IEBACiAJCUQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5
TWF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TWF0
Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MDEzMEM3Q0ZFMDA3
QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQzRDRFOTcxMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFN1bW1hcnlFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAv
KiBNdXRhdGlvblNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE11dGF0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENjE5QTMw
NjE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNdXRhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUmVnaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTYxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJl
Z2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJSZWdpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8q
IENvb2tpZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTIyLDYgKzIxMTI2LDggQEAKIAkJCQlDNkYw
OEZCOTE0MzBGRThGMDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuY3BwICovLAogCQkJCUM2RjA4
RkJBMTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5oICovLAogCQkJCUM2RjA4RkJC
MTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5pZGwgKi8sCisJCQkJRDYxOUEzMDUx
NDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUuY3BwICovLAorCQkJCUQ2MTlBMzA2MTQ0
RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggKi8sCiAJCQkJQkNGMzRBMzYxMUEyMzFD
RDAwQzcxODA0IC8qIE5hbWVkTm9kZU1hcC5jcHAgKi8sCiAJCQkJQTgxODcyMTgwOTc3RDNDMDAw
NTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oICovLAogCQkJCTg1QUNBOUY5MEE5QjYzMTAwMDY3MUU5
MCAvKiBOYW1lZE5vZGVNYXAuaWRsICovLApAQCAtMjM2MjIsNiArMjM2MjgsNyBAQAogCQkJCUM2
RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NTAzMUI0QTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzZGMDhGQkQxNDMwRkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3Jk
LmggaW4gSGVhZGVycyAqLywKKwkJCQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMjMwOTc3RDNDMDAwNTgyNkQ5IC8q
IE5hbWVkTm9kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUUwOTc3RDNDMDAwNTgy
NkQ5IC8qIE5hbWVOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjlCNkMwQjc0NzU5
OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjY4Niw2ICsyNjY5Myw3IEBACiAJCQkJQjFBRDRFNjIxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFi
bGVUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwMzFCNDkwQTQ0RUZDNzAwRjk5
MkUwIC8qIE11dGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZGMDhGQkMxNDMw
RkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ2
MTlBMzA3MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRjM0QTM3MTFBMjMxQ0QwMEM3MTgwNCAvKiBOYW1lZE5vZGVNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTBCOUI2RDBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZl
WFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuY3BwCmluZGV4IDNlYTQ5OTM2OTM1NzQ5YjEzMTkyYjc2MzQxZDUwOWIxNTM4ZTRjMGMu
LmYwMzM0MGVkNjA5OWUxODViYjE4NmI0ODc5MjdkZDdlM2U3MTg0YjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbmxpbmVU
ZXh0Qm94LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCkBAIC0xNDEsNiArMTQyLDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6aW5z
ZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNl
CiAgICAgaWYgKHJlZkNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA9PSBuZXdDaGlsZCB8fCByZWZD
aGlsZCA9PSBuZXdDaGlsZCkgLy8gbm90aGluZyB0byBkbwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZSBtdXRhdGlvbih0aGlzKTsKKyNlbmRpZgorCiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBy
ZWZDaGlsZDsKICAgICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGRQcmV2aW91c1NpYmxpbmcgPSByZWZD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkgewpA
QCAtMjcyLDYgKzI3NywxMCBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNz
UmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBD
aGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCisKICAgICBSZWZQ
dHI8Tm9kZT4gcHJldiA9IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBSZWZQdHI8
Tm9kZT4gbmV4dCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpOwogCkBAIC00MDAsNiArNDA5LDEw
IEBAIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWlu
ZXIpCiAgICAgTm9kZVZlY3RvciBjaGlsZHJlbjsKICAgICBjb2xsZWN0Tm9kZXMoY29udGFpbmVy
LCBjaGlsZHJlbik7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxk
TGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oY29udGFpbmVyKTsKKyNlbmRpZgorCiAgICAgZm9y
IChOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9
IGNoaWxkcmVuLmVuZCgpOyBpdCsrKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgp
OwogICAgICAgICAvLyBmaXJlIHJlbW92ZWQgZnJvbSBkb2N1bWVudCBtdXRhdGlvbiBldmVudHMu
CkBAIC0xMDk1LDYgKzExMDgsMTMgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlv
bkV2ZW50cyhOb2RlKiBjaGlsZCkKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJl
ZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKIAorI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgaWYgKGMtPnBhcmVudE5vZGUoKSkgeworICAgICAg
ICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKGMtPnBhcmVudE5vZGUoKSk7CisgICAg
ICAgIG11dGF0aW9uLmNoaWxkQWRkZWQoYyk7CisgICAgfQorI2VuZGlmCisKICAgICBpZiAoYy0+
cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5P
REVJTlNFUlRFRF9MSVNURU5FUikpCiAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0
YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRFdmVudCwgdHJ1
ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CiAKQEAgLTExMTYsNiArMTEzNiwxMyBAQCBzdGF0aWMgdm9p
ZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkKICAgICBSZWZQdHI8Tm9k
ZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9j
dW1lbnQoKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgaWYgKGMtPnBh
cmVudE5vZGUoKSkgeworICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKGMt
PnBhcmVudE5vZGUoKSk7CisgICAgICAgIG11dGF0aW9uLndpbGxSZW1vdmVDaGlsZChjKTsKKyAg
ICB9CisjZW5kaWYKKwogICAgIC8vIGRpc3BhdGNoIHByZS1yZW1vdmFsIG11dGF0aW9uIGV2ZW50
cwogICAgIGlmIChjLT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShE
b2N1bWVudDo6RE9NTk9ERVJFTU9WRURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNwYXRjaFNj
b3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92
ZWRFdmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5k
ZXggZDY5OWIxOTExNmU4MzFkNzNmZDU1MjNhODRlYWEyZWI1ODZmZWY1Ny4uMzNmMzY1NTQ5Y2Q2
MDU2YTFkZWUzMTI4NzdhZGRlYThmZGJmNDk4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAt
NjI1LDggKzYyNSw4IEBAIHN0YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNv
cmQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBNdXRhdGlvblJlY29yZDo6
Y3JlYXRlQXR0cmlidXRlcyhlbGVtZW50LCBuYW1lKTsKLSAgICBmb3IgKFZlY3RvcjxXZWJLaXRN
dXRhdGlvbk9ic2VydmVyKj46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlcnMuYmVnaW4oKTsgaXRl
ciAhPSBvYnNlcnZlcnMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+ZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9ic2Vy
dmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgb2JzZXJ2ZXJzW2ldLT5lbnF1ZXVlTXV0YXRpb25S
ZWNvcmQobXV0YXRpb24pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvblNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3Bl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43MzhmYmRlOWEyZjJiZDQwYTgzMDBmNjRhMmIyMDlmM2QwNDAwYjZm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uU2NvcGUuY3Bw
CkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKworI2luY2x1ZGUgIk11dGF0aW9uU2NvcGUuaCIKKworI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTXV0
YXRpb25SZWNvcmQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiU3RhdGljTm9kZUxp
c3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIFJlY29yZEFjY3VtdWxhdG9yIGV4cGVjdHMgdGhhdCBhbGwgcmVtb3ZhbHMgZnJvbSBhIHBh
cmVudCB0YWtlIHBsYWNlIGluIG9yZGVyIGFuZCBwcmVjZWRlCisvLyBhbnkgYWRkaXRpb25zLiBJ
ZiB0aGlzIGlzIHZpb2xhdGVkIChpLmUuIGJlY2F1c2Ugb2YgY29kZSBjaGFuZ2VzIGVsc2V3aGVy
ZSBpbiBXZWJDb3JlKQorLy8gaXQgd2lsbCBsaWtlbHkgcmVzdWx0IGluIGJvdGggKGEpIEFTU0VS
VGlvbnMgZmFpbGluZywgYW5kIChiKSBtdXRhdGlvbiByZWNvcmRzIGJlaW5nCisvLyBlbnF1ZXVl
ZCBmb3IgZGVsaXZlcnkgYmVmb3JlIHRoZSBvdXRlci1tb3N0IHNjb3BlIGNsb3Nlcy4KK2NsYXNz
IFJlY29yZEFjY3VtdWxhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRBY2N1
bXVsYXRvcik7CitwdWJsaWM6CisgICAgUmVjb3JkQWNjdW11bGF0b3IoUGFzc1JlZlB0cjxOb2Rl
PiwgVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYpOworICAgIH5SZWNvcmRBY2N1bXVs
YXRvcigpOworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZv
aWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjbGVhcigpOworICAgIGJvb2wg
aXNFbXB0eSgpOworCisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworCisgICAgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBt
X2FkZGVkTm9kZXM7CisgICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNTaWJsaW5nOworICAgIFJl
ZlB0cjxOb2RlPiBtX25leHRTaWJsaW5nOworICAgIFJlZlB0cjxOb2RlPiBtX2xhc3RBZGRlZDsK
KworICAgIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4gbV9vYnNlcnZlcnM7Cit9Owor
CitjbGFzcyBBY2N1bXVsYXRpb25NYW5hZ2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShB
Y2N1bXVsYXRpb25NYW5hZ2VyKTsKK3B1YmxpYzoKKyAgICB+QWNjdW11bGF0aW9uTWFuYWdlcigp
OworCisgICAgc3RhdGljIEFjY3VtdWxhdGlvbk1hbmFnZXIqIGluc3RhbmNlKCk7CisKKyAgICB2
b2lkIGluY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7CisgICAgdm9pZCBkZWNyZW1lbnRTY29w
aW5nTGV2ZWwoTm9kZSopOworCisgICAgdm9pZCBjaGlsZEFkZGVkKE5vZGUqLCBQYXNzUmVmUHRy
PE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKiwgUGFzc1JlZlB0cjxOb2Rl
Pik7CisKK3ByaXZhdGU6CisgICAgQWNjdW11bGF0aW9uTWFuYWdlcigpOworICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoKTsKKworICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX3Njb3Bp
bmdMZXZlbHM7CisgICAgSGFzaE1hcDxOb2RlKiwgUmVjb3JkQWNjdW11bGF0b3IqPiBtX2FjY3Vt
dWxhdGlvbnM7CisKKyAgICBzdGF0aWMgQWNjdW11bGF0aW9uTWFuYWdlciogc19pbnN0YW5jZTsK
K307CisKK1JlY29yZEFjY3VtdWxhdG9yOjpSZWNvcmRBY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5v
ZGU+IHRhcmdldCwgVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYgb2JzZXJ2ZXJzKQor
ICAgIDogbV90YXJnZXQodGFyZ2V0KQoreworICAgIG1fb2JzZXJ2ZXJzLnN3YXAob2JzZXJ2ZXJz
KTsKKyAgICBjbGVhcigpOworfQorCitSZWNvcmRBY2N1bXVsYXRvcjo6flJlY29yZEFjY3VtdWxh
dG9yKCkKK3sKKyAgICBBU1NFUlQoaXNFbXB0eSgpKTsKK30KKwordm9pZCBSZWNvcmRBY2N1bXVs
YXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQoreworICAgIFJlZlB0
cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOworCisgICAgLy8gQWRkaXRpb25zIG11c3QgYmUgaW4t
b3JkZXIuCisgICAgaWYgKCFpc0VtcHR5KCkgJiYgKG1fbGFzdEFkZGVkLmdldCgpICE9IGNoaWxk
LT5wcmV2aW91c1NpYmxpbmcoKSB8fCBtX25leHRTaWJsaW5nICE9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSkKKyAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CisKKyAgICBpZiAoaXNFbXB0
eSgpKSB7CisgICAgICAgIG1fcHJldmlvdXNTaWJsaW5nID0gY2hpbGQtPnByZXZpb3VzU2libGlu
ZygpOworICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAg
fQorCisgICAgbV9hZGRlZE5vZGVzLmFwcGVuZChjaGlsZCk7CisgICAgbV9sYXN0QWRkZWQgPSBj
aGlsZDsKK30KKworLy8gU2VlIGNvbW1lbnQgb24gdGhlIGNsYXNzIGFib3V0IEFTU0VSVCBhc3N1
bXB0aW9ucy4KK3ZvaWQgUmVjb3JkQWNjdW11bGF0b3I6OndpbGxSZW1vdmVDaGlsZChQYXNzUmVm
UHRyPE5vZGU+IHBycENoaWxkKQoreworICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxk
OworICAgIEFTU0VSVChtX2FkZGVkTm9kZXMuaXNFbXB0eSgpKTsgLy8gUmVtb3ZhbHMgbXVzdCBw
cmVjZWRlIGFkZGl0aW9ucy4KKyAgICBpZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkpCisgICAg
ICAgIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworCisgICAgQVNTRVJUKGlzRW1wdHkoKSB8fCBt
X25leHRTaWJsaW5nLmdldCgpID09IGNoaWxkKTsgLy8gUmVtb3ZhbHMgbXVzdCBiZSBjb250aW51
b3VzIGFuZCBpbi1vcmRlci4KKyAgICBpZiAoIWlzRW1wdHkoKSAmJiBtX25leHRTaWJsaW5nLmdl
dCgpICE9IGNoaWxkKQorICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKKworICAgIGlm
IChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wcmV2aW91c1NpYmxpbmcgPSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCk7CisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKKyAgICAgICAgbV9sYXN0QWRkZWQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKwor
ICAgIG1fcmVtb3ZlZE5vZGVzLmFwcGVuZChjaGlsZCk7Cit9CisKK3ZvaWQgUmVjb3JkQWNjdW11
bGF0b3I6OmVucXVldWVNdXRhdGlvblJlY29yZCgpCit7CisgICAgQVNTRVJUKCFpc0VtcHR5KCkp
OworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBNdXRhdGlv
blJlY29yZDo6Y3JlYXRlQ2hpbGRMaXN0KG1fdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY05v
ZGVMaXN0OjphZG9wdChtX2FkZGVkTm9kZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY05vZGVMaXN0
OjphZG9wdChtX3JlbW92ZWROb2RlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmV2aW91c1NpYmxpbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9uZXh0U2libGluZyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX29ic2VydmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlcnNbaV0tPmVucXVl
dWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CisKKyAgICBjbGVhcigpOworfQorCit2b2lkIFJl
Y29yZEFjY3VtdWxhdG9yOjpjbGVhcigpCit7CisgICAgaWYgKCFtX3JlbW92ZWROb2Rlcy5pc0Vt
cHR5KCkpCisgICAgICAgIG1fcmVtb3ZlZE5vZGVzLmNsZWFyKCk7CisgICAgaWYgKCFtX2FkZGVk
Tm9kZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2FkZGVkTm9kZXMuY2xlYXIoKTsKKyAgICBtX3By
ZXZpb3VzU2libGluZyA9IDA7CisgICAgbV9uZXh0U2libGluZyA9IDA7CisgICAgbV9sYXN0QWRk
ZWQgPSAwOworfQorCitib29sIFJlY29yZEFjY3VtdWxhdG9yOjppc0VtcHR5KCkKK3sKKyAgICBy
ZXR1cm4gbV9yZW1vdmVkTm9kZXMuaXNFbXB0eSgpICYmIG1fYWRkZWROb2Rlcy5pc0VtcHR5KCk7
Cit9CisKK0FjY3VtdWxhdGlvbk1hbmFnZXIqIEFjY3VtdWxhdGlvbk1hbmFnZXI6OnNfaW5zdGFu
Y2UgPSAwOworCitBY2N1bXVsYXRpb25NYW5hZ2VyOjpBY2N1bXVsYXRpb25NYW5hZ2VyKCkKK3sK
K30KKworQWNjdW11bGF0aW9uTWFuYWdlcjo6fkFjY3VtdWxhdGlvbk1hbmFnZXIoKQoreworICAg
IEFTU0VSVChtX3Njb3BpbmdMZXZlbHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9hY2N1bXVs
YXRpb25zLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgQWNjdW11bGF0aW9uTWFuYWdlcjo6aW5pdGlh
bGl6ZSgpCit7CisgICAgQVNTRVJUKCFzX2luc3RhbmNlKTsKKyAgICBzX2luc3RhbmNlID0gYWRv
cHRQdHIobmV3IEFjY3VtdWxhdGlvbk1hbmFnZXIpLmxlYWtQdHIoKTsKK30KKworCitBY2N1bXVs
YXRpb25NYW5hZ2VyKiBBY2N1bXVsYXRpb25NYW5hZ2VyOjppbnN0YW5jZSgpCit7CisgICAgaWYg
KCFzX2luc3RhbmNlKQorICAgICAgICBpbml0aWFsaXplKCk7CisKKyAgICByZXR1cm4gc19pbnN0
YW5jZTsKK30KKwordm9pZCBBY2N1bXVsYXRpb25NYW5hZ2VyOjpjaGlsZEFkZGVkKE5vZGUqIHRh
cmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBBU1NFUlQobV9hY2N1bXVsYXRp
b25zLmNvbnRhaW5zKHRhcmdldCkpOworICAgIFJlY29yZEFjY3VtdWxhdG9yKiByZWNvcmQgPSBt
X2FjY3VtdWxhdGlvbnMuZ2V0KHRhcmdldCk7CisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVj
b3JkLT5jaGlsZEFkZGVkKGNoaWxkKTsKK30KKwordm9pZCBBY2N1bXVsYXRpb25NYW5hZ2VyOjp3
aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQorewor
ICAgIEFTU0VSVChtX2FjY3VtdWxhdGlvbnMuY29udGFpbnModGFyZ2V0KSk7CisgICAgUmVjb3Jk
QWNjdW11bGF0b3IqIHJlY29yZCA9IG1fYWNjdW11bGF0aW9ucy5nZXQodGFyZ2V0KTsKKyAgICBp
ZiAocmVjb3JkKQorICAgICAgICByZWNvcmQtPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7Cit9CisK
K3ZvaWQgQWNjdW11bGF0aW9uTWFuYWdlcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRh
cmdldCkKK3sKKyAgICBpZiAobV9zY29waW5nTGV2ZWxzLmNvbnRhaW5zKHRhcmdldCkpIHsKKyAg
ICAgICAgbV9zY29waW5nTGV2ZWxzLnNldCh0YXJnZXQsIG1fc2NvcGluZ0xldmVscy5nZXQodGFy
Z2V0KSArIDEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zY29waW5nTGV2ZWxz
LnNldCh0YXJnZXQsIDEpOworICAgIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4gb2Jz
ZXJ2ZXJzOworICAgIHRhcmdldC0+cmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9i
c2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hpbGRMaXN0KTsKKyAgICBpZiAob2Jz
ZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIDAp
OworICAgIGVsc2UKKyAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIG5ldyBSZWNv
cmRBY2N1bXVsYXRvcih0YXJnZXQsIG9ic2VydmVycykpOworfQorCit2b2lkIEFjY3VtdWxhdGlv
bk1hbmFnZXI6OmRlY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKiB0YXJnZXQpCit7CisgICAgQVNT
RVJUKG1fc2NvcGluZ0xldmVscy5jb250YWlucyh0YXJnZXQpKTsKKyAgICB1bnNpZ25lZCBzY29w
aW5nTGV2ZWwgPSBtX3Njb3BpbmdMZXZlbHMuZ2V0KHRhcmdldCkgLSAxOworCisgICAgaWYgKHNj
b3BpbmdMZXZlbCA+IDApIHsKKyAgICAgICAgbV9zY29waW5nTGV2ZWxzLnNldCh0YXJnZXQsIHNj
b3BpbmdMZXZlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBPd25QdHI8UmVjb3Jk
QWNjdW11bGF0b3I+IHJlY29yZCA9IGFkb3B0UHRyKG1fYWNjdW11bGF0aW9ucy50YWtlKHRhcmdl
dCkpOworICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUodGFyZ2V0KTsKKworICAgIGlmIChyZWNv
cmQpCisgICAgICAgIHJlY29yZC0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Cit9CisKK0NoaWxk
TGlzdE11dGF0aW9uU2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoUGFzc1JlZlB0cjxOb2Rl
PiB0YXJnZXQpCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCit7CisgICAgQWNjdW11bGF0aW9uTWFu
YWdlcjo6aW5zdGFuY2UoKS0+aW5jcmVtZW50U2NvcGluZ0xldmVsKG1fdGFyZ2V0LmdldCgpKTsK
K30KKworQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoKQor
eworICAgIEFjY3VtdWxhdGlvbk1hbmFnZXI6Omluc3RhbmNlKCktPmRlY3JlbWVudFNjb3BpbmdM
ZXZlbChtX3RhcmdldC5nZXQoKSk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6
Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQoreworICAgIEFjY3VtdWxhdGlvbk1h
bmFnZXI6Omluc3RhbmNlKCktPmNoaWxkQWRkZWQobV90YXJnZXQuZ2V0KCksIGNoaWxkKTsKK30K
Kwordm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0
cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBBY2N1bXVsYXRpb25NYW5hZ2VyOjppbnN0YW5jZSgpLT53
aWxsUmVtb3ZlQ2hpbGQobV90YXJnZXQuZ2V0KCksIGNoaWxkKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25TY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNjA4NTZjODNiNmRiYTI2MzhjZDMw
N2U3NWQ3N2IyNGFiNjRjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25TY29wZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE11dGF0aW9uU2NvcGVfaAor
I2RlZmluZSBNdXRhdGlvblNjb3BlX2gKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
CisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBOb2RlOworCitjbGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3BlKTsKK3B1YmxpYzoKKyAgICBDaGls
ZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKKyAgICB+Q2hpbGRM
aXN0TXV0YXRpb25TY29wZSgpOworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9k
ZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4pOworCitwcml2
YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisKKyNlbmRpZiAv
LyBNdXRhdGlvblNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAxZjg1ZmQ5MTJlYWRmZDVhNzMx
NTlkNmRlZGU5MzBlNjQ4NDljOTQwLi5jNjZkZGNjNzg0ZDIyZWEyN2IzNWNiZTg4YTQ4YzgzODE0
NTVhNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50
LmgiCisjaW5jbHVkZSAiTXV0YXRpb25TY29wZS5oIgogI2luY2x1ZGUgIk5hbWVOb2RlTGlzdC5o
IgogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgpA
QCAtMjEyNCw2ICsyMTI1LDkgQEAgdm9pZCBOb2RlOjpzZXRUZXh0Q29udGVudChjb25zdCBTdHJp
bmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBjYXNlIERPQ1VNRU5UX0ZSQUdN
RU5UX05PREU6CiAgICAgICAgIGNhc2UgU0hBRE9XX1JPT1RfTk9ERTogewogICAgICAgICAgICAg
Q29udGFpbmVyTm9kZSogY29udGFpbmVyID0gdG9Db250YWluZXJOb2RlKHRoaXMpOworI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNj
b3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCiAgICAgICAgICAgICBjb250YWluZXItPnJlbW92
ZUNoaWxkcmVuKCk7CiAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUo
dGV4dCksIGVjKTsKQEAgLTI2OTQsOSArMjY5OCw5IEBAIHZvaWQgTm9kZTo6cmVnaXN0ZXJlZE11
dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4mIG9i
CiAgICAgaWYgKCFvYnNlcnZlckVudHJpZXMgfHwgb2JzZXJ2ZXJFbnRyaWVzLT5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRy
eT46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlckVudHJpZXMtPmJlZ2luKCk7IGl0ZXIgIT0gb2Jz
ZXJ2ZXJFbnRyaWVzLT5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5tYXRjaGVz
KHR5cGUpKQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChpdGVyLT5vYnNlcnZlci5nZXQo
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlckVudHJpZXMtPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmICgoKm9ic2VydmVyRW50cmllcylbaV0ubWF0Y2hlcyh0eXBlKSkK
KyAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoKCpvYnNlcnZlckVudHJpZXMpW2ldLm9ic2Vy
dmVyLmdldCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRh
dGlvbk9ic2VydmVyLmNwcAppbmRleCA3ZDczNmFlN2JhYzY0YzQ1ODhmY2JhMmZjM2QzYjc3NTI5
N2JkZTE0Li44M2YxNTk5MGVhMmJlY2EzMzliYjBhNzNjYzI5NjliYTRkZjI5ZmE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCkBAIC02NSw4ICs2
NSw4IEBAIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2RlLCBN
dXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zCiAKIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgZm9yIChWZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBp
dGVyID0gbV9vYnNlcnZlZE5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gIG1fb2JzZXJ2ZWROb2Rlcy5l
bmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT51bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZl
cih0aGlzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb2JzZXJ2ZWROb2Rlcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlZE5vZGVzW2ldLT51bnJlZ2lzdGVyTXV0YXRpb25P
YnNlcnZlcih0aGlzKTsKIAogICAgIG1fb2JzZXJ2ZWROb2Rlcy5jbGVhcigpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA1OTEyZGEwN2Q3NmE0OTJjNmQ3MzI4OGExNDM0
ZGQxMzFlMzE5ODA0Li41ZDQwY2Q1N2NlNTZiNzg3ZGEzNWYyOTljOTk3MjBjM2Y5MzkzNmRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRl
ICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uU2NvcGUu
aCIKICNpbmNsdWRlICJSZW5kZXJXb3JkQnJlYWsuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTMxNyw2ICszMTgsMTAgQEAgc3Rh
dGljIGlubGluZSBib29sIGhhc09uZVRleHRDaGlsZChDb250YWluZXJOb2RlKiBub2RlKQogCiBz
dGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoSFRNTEVsZW1lbnQqIGVsZW1l
bnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZSBtdXRhdGlvbihlbGVtZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKCFmcmFnbWVu
dC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPnJlbW92ZUNoaWxkcmVuKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMzOCw2ICszNDMsMTAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZUNo
aWxkcmVuV2l0aEZyYWdtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPERvY3Vt
ZW4KIAogc3RhdGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aFRleHQoSFRNTEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYgRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0
aW9uKGVsZW1lbnQpOworI2VuZGlmCisKICAgICBpZiAoaGFzT25lVGV4dENoaWxkKGVsZW1lbnQp
KSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50LT5maXJzdENoaWxkKCkpLT5z
ZXREYXRhKHRleHQsIGVjKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJjODM5OGUzMWE3ZjY5
YzI2MTBlMjJhYWM1NzJmNmQwNGU3NTYzNDguLjQyNWU3Yzc1ZDFiODc4OTNhY2VmNmEzZjdkZDQ3
ZmY4ZTM1YTY2ZmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMC0xOCAgUmFmYWVsIFdl
aW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2Vy
dmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgY2hpbGRM
aXN0IGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbDoKKyAgICAgICAgKiBm
YXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC5odG1sOiBBZGRlZC4KKwogMjAx
MS0xMC0xOSAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRk
IG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKaW5kZXgg
OTg2OWZlMmVlNWIwMmMwZTc3NjhkODFhMzMyYWFmZDM4NjZlY2M4MS4uMmY4NTk4ZGZmN2EwMjBl
ZTNjNzI3ZTllMzdmOTg2YTZhMjgxODY5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApAQCAtMjMsNyAr
MjMsNyBAQCBQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAogVGVz
dGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImF0dHJpYnV0ZXMiIGRvZXMg
bm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGF0dHJpYnV0ZSBjaGFuZ2VzLgogUEFTUyBtdXRh
dGlvbnMgaXMgbnVsbAogCi1UZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUg
d2l0aCB0aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBv
cHRpb25zLgorVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhl
IHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLgog
UEFTUyBjYWxscyBpcyAxCiBQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQogUEFTUyBtdXRhdGlv
bnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0
aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCmluZGV4IDY0NmUzOTMxZDE0NTBjMWRjZDRhY2U0
YTdlYmU1MTAzZDg4ZWIzYmUuLjg1ZWM2Nzc0ZDZmNWM3ZmQxYmE1YjlkY2JhN2JhM2JmZjgzNTAw
NjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1
dGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0
ZXMuaHRtbApAQCAtMTIsOCArMTIsNyBAQAogPHNjcmlwdD4KIAogd2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOwotdmFyIG11dGF0aW9uczsKLXZhciBtdXRhdGlvbnMyOwordmFyIG11dGF0aW9u
cywgbXV0YXRpb25zMjsKIHZhciBjYWxsczsKIAogZnVuY3Rpb24gdGVzdEJhc2ljKCkgewpAQCAt
MTA5LDcgKzEwOCw3IEBAIGZ1bmN0aW9uIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbigpIHsKICAg
ICB2YXIgb2JzZXJ2ZXI7CiAKICAgICBmdW5jdGlvbiBzdGFydCgpIHsKLSAgICAgICAgZGVidWco
J1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9i
c2VydmluZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7CisgICAg
ICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0
aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMu
Jyk7CiAgICAgCiAJCWNhbGxzID0gMDsKICAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjdiODJiNzEzZTcxZmEwMTE0ODIyNTE5OGE0YzVmYWIyMjg1
ZThlOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2
ZS1jaGlsZExpc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTggQEAKK1Rlc3QgV2ViS2l0TXV0
YXRpb25PYnNlcnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2YgY2hpbGRMaXN0IG9ic2VydmF0
aW9uLgorLi4uY2FuIGNoaWxkTGlzdCBjaGFuZ2VzIGJlIG9ic2VydmVkIGF0IGFsbAorUEFTUyBt
dXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlz
dCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRp
b25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKKy4uLm9ic2VydmVyLmRpc2Nvbm5l
Y3QoKSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGRlbGl2ZXJ5IG9mIG11dGF0aW9ucy4KK1BBU1Mg
bXV0YXRpb25zIGlzIG51bGwKKy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25uZWN0IHdvcmtz
IHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgorUEFT
UyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0ucmVt
b3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0g
aXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BB
U1MgbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNb
MV0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYyCisKK1Rlc3RpbmcgdGhhdCBvYnNlcnZp
bmcgd2l0aG91dCBzcGVjaWZ5aW5nICJjaGlsZExpc3QiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFy
aW5nIGFib3V0IGNoaWxkTGlzdCBjaGFuZ2VzLgorUEFTUyBtdXRhdGlvbnMgaXMgbnVsbAorCitU
ZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNl
cnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuCitQQVNTIGNhbGxz
IGlzIDEKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBl
IGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBt
dWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBub2RlIGFuZCBi
b3RoIHJlY2VpdmUgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1Mg
bXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zMi5sZW5ndGgg
aXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKKworVGVzdGluZyB0
aGF0IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1bHQgaW4gYSBzaW5nbGUgY2hp
bGRMaXN0IG11dGF0aW9uLgorLi4uaW5uZXJIVE1MCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNb
MF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sw
XSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0gaXMgYWRkZWRE
aXYyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzJdIGlzIGFkZGVkRGl2MworUEFTUyBt
dXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS5y
ZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWRO
b2Rlc1sxXSBpcyByZW1vdmVkRGl2MgorLi4uaW5uZXJUZXh0CitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3Zl
ZE5vZGVzLmxlbmd0aCBpcyAzCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29i
c2VydmUtY2hpbGRMaXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUt
Y2hpbGRMaXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjZmOTQyYzFjOGRjMWI1ZTY4MTU0YTQwMmVkNmU0
MDAxZTZlODJkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24v
b2JzZXJ2ZS1jaGlsZExpc3QuaHRtbApAQCAtMCwwICsxLDI2MyBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8dGl0bGU+
PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7Cit2YXIgbXV0YXRpb25zLCBtdXRhdGlvbnMyOwordmFyIGNhbGxzOwordmFyIGRpdiwgcmVt
b3ZlZERpdjEsIHJlbW92ZWREaXYyLCBhZGRlZERpdjEsIGFkZGVkRGl2MiwgYWRkZWREaXYzOwor
CitmdW5jdGlvbiB0ZXN0QmFzaWMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7
CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgYmFzaWMg
YXNwZWN0cyBvZiBjaGlsZExpc3Qgb2JzZXJ2YXRpb24uJyk7CisKKyAgICAgICAgbXV0YXRpb25z
ID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Cisg
ICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkg
eworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2Jz
ZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICByZW1vdmVk
RGl2MSA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7Cisg
ICAgICAgIHNldFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIGRlYnVn
KCcuLi5jYW4gY2hpbGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsJyk7CisKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG11
dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAg
cmVtb3ZlZERpdjEgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
JykpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVsdGlw
bGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRl
TXVsdGlwbGUoKSB7CisgICAgICAgIGRlYnVnKCcuLi5vYnNlcnZlci5kaXNjb25uZWN0KCkgc2hv
dWxkIHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuJyk7CisKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
ZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBkaXYucmVt
b3ZlQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpOworICAgICAgICByZW1vdmVkRGl2MiA9IGRpdi5yZW1v
dmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5yZS1vYnNl
cnZpbmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3JrcyB3aXRoIHRoZSBzYW1lIG9ic2VydmVyLicpOwor
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciY2hpbGRMaXN0IicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVk
RGl2MicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcn
KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitm
dW5jdGlvbiB0ZXN0V3JvbmdUeXBlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVy
OworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQg
b2JzZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiY2hpbGRMaXN0IiBkb2VzIG5vdCByZXN1bHQg
aW4gaGVhcmluZyBhYm91dCBjaGlsZExpc3QgY2hhbmdlcy4nKTsKKworICAgICAgICBtdXRhdGlv
bnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiht
KSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBv
YnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0
cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywgJ251bGwnKTsK
KyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24g
dGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2Vy
dmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRo
YXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMg
dGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7CisKKyAgICAgICAgY2FsbHMg
PSAwOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAg
ICAgICAgICAgY2FsbHMrKzsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2
ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAg
ICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRp
di5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNl
dFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJlKCdjYWxs
cycsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAg
ICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNo
aWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIu
b2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChm
aW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3Qo
KTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKwor
ICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZU9ic2VydmVycygpIHsKKyAg
ICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgb2JzZXJ2ZXIyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgbXVsdGlwbGUg
b2JzZXJ2ZXJzIGNhbiBiZSByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gbm9kZSBhbmQgYm90aCByZWNl
aXZlIG11dGF0aW9ucy4nKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRp
b25zID0gbTsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyMiA9IG5ldyBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9uczIgPSBtOwor
ICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0
cnVlIH0pOworICAgICAgICBvYnNlcnZlcjIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVl
IH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zMlswXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIG9ic2Vy
dmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTsKKyAgICAg
ICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0
KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbm5lckhUTUxBbmRJbm5lclRleHQoKSB7CisgICAgdmFy
IGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAg
ICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBpbm5lclRleHQgYW5kIGlubmVySFRNTCBhbHdheXMgcmVz
dWx0IGluIGEgc2luZ2xlIGNoaWxkTGlzdCBtdXRhdGlvbi4nKTsKKworICAgICAgICBtdXRhdGlv
bnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+PGRpdj5CYXI8L2Rpdj4n
OworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5maXJzdENoaWxkOworICAgICAgICByZW1vdmVk
RGl2MiA9IHJlbW92ZWREaXYxLm5leHRTaWJsaW5nOworICAgICAgICBvYnNlcnZlciA9IG5ldyBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9u
cyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNo
aWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICdmb288aW1nIHNyYz0i
YmFyLnBuZyI+PHA+QmF6PC9wPic7CisgICAgICAgIGFkZGVkRGl2MSA9IGRpdi5jaGlsZE5vZGVz
WzBdOworICAgICAgICBhZGRlZERpdjIgPSBkaXYuY2hpbGROb2Rlc1sxXTsKKyAgICAgICAgYWRk
ZWREaXYzID0gZGl2LmNoaWxkTm9kZXNbMl07CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tJbm5l
ckhUTUwsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrSW5uZXJIVE1MKCkgeworICAg
ICAgICBkZWJ1ZygnLi4uaW5uZXJIVE1MJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
Lmxlbmd0aCcsICczJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rl
c1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRl
ZE5vZGVzWzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LmFkZGVkTm9kZXNbMl0nLCAnYWRkZWREaXYzJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzFdJywgJ3JlbW92ZWREaXYyJyk7CisKKyAg
ICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2LmlubmVyVGV4dCA9ICdmb28nOwor
ICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlu
aXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4uaW5uZXJUZXh0Jyk7CisKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5hZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICczJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5l
Y3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0K
KworICAgIHN0YXJ0KCk7Cit9CisKK3ZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RXcm9uZ1R5
cGUsIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbiwgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLCB0ZXN0
SW5uZXJIVE1MQW5kSW5uZXJUZXh0XTsKK3ZhciB0ZXN0SW5kZXggPSAwOworIAorZnVuY3Rpb24g
cnVuTmV4dFRlc3QoKSB7CisgICAgaWYgKHRlc3RJbmRleCA8IHRlc3RzLmxlbmd0aCkKKyAgICAg
ICAgdGVzdHNbdGVzdEluZGV4KytdKCk7CisgICAgZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30KKworZGVzY3JpcHRpb24oJ1Rlc3QgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZl
IG9uIGF0dHJpYnV0ZXMuJyk7CisKK2lmICghd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIp
CisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpJyk7CitlbHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111650</attachid>
            <date>2011-10-19 11:22:57 -0700</date>
            <delta_ts>2011-10-19 12:17:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111019112256.patch</filename>
            <type>text/plain</type>
            <size>50153</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZjNhNzgxMGY5NDNhOTU0
NTAyNWI0MjQ5YzE2NDZkZTM3ZmExNWJkLi43MmUxNzg4ZDE1ZGRiMTNjMDdkM2E4MjYyMmI1ZDc0
M2NlNWEwZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2Rl
OjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25S
ZWNvcmQpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9NdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZSk6CisgICAgICAgICogZG9t
L1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQpOgorCiAyMDExLTEwLTE5ICBS
ZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgbmV3IHJlbmRl
cmVyIGZvciBTVkdSZWN0RWxlbWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGI1MGZmOWY2
OWE2ZTlkMzM5ZjI0YzUxYThjOTllNzFmYzQzZjYyYy4uYjFiNTg5NmRkZDNhMWZhM2RhMmYzZmM4
MjFhOThmODYyMGNhNThhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU2Myw2ICs1NjMsNyBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAogICAg
IGRvbS9NdXRhdGlvbkV2ZW50LmNwcAogICAgIGRvbS9NdXRhdGlvblJlY29yZC5jcHAKKyAgICBk
b20vTXV0YXRpb25TY29wZS5jcHAKICAgICBkb20vTmFtZWROb2RlTWFwLmNwcAogICAgIGRvbS9O
YW1lTm9kZUxpc3QuY3BwCiAgICAgZG9tL05vZGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCA0ODA2Zjk5M2UxYzc1ZTI0Nzc5MDUyZDU1ZDU3ODdiYjVlYmVlOWU5Li45Nzg0
N2NmOGQ0NGRmMjhlYWY0NTQwMzg5ZGJiNjM0YzhiM2RiZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTEyNTMsNiArMTI1Myw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmggXAorCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaCBcCiAJU291cmNl
L1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDkyNzc1
OTYyMDdlZmVlNjAzMTQyMTlmN2YwN2FjZjRjYTYzZjQ2Y2UuLmVmZWRjZjMyNTA1ZDU1ZjJhNDgy
ZTU5MTIzOGEyMTZmZDA3M2FhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUyMzEsNiArNTIzMSw4
IEBACiAgICAgICAgICAgICAnZG9tL011dGF0aW9uRXZlbnQuaCcsCiAgICAgICAgICAgICAnZG9t
L011dGF0aW9uUmVjb3JkLmNwcCcsCiAgICAgICAgICAgICAnZG9tL011dGF0aW9uUmVjb3JkLmgn
LAorICAgICAgICAgICAgJ2RvbS9NdXRhdGlvblNjb3BlLmNwcCcsCisgICAgICAgICAgICAnZG9t
L011dGF0aW9uU2NvcGUuaCcsCiAgICAgICAgICAgICAnZG9tL05hbWVOb2RlTGlzdC5jcHAnLAog
ICAgICAgICAgICAgJ2RvbS9OYW1lTm9kZUxpc3QuaCcsCiAgICAgICAgICAgICAnZG9tL05hbWVk
Tm9kZU1hcC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBkOTQzZTU4YTBmYjRjNjljZTRlNTJmODll
MzI1NGUxOGY1YTZiYTdiLi40MTYxZTQ2NzE4MjU1MTI0YzBjMzQ3Yjg0NmE2YjU2MmRjMThkYzNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwpAQCAtNTIxLDYgKzUyMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRv
bS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAgXAogICAgIGRvbS9NdXRhdGlvbkV2ZW50LmNwcCBcCiAg
ICAgZG9tL011dGF0aW9uUmVjb3JkLmNwcCBcCisgICAgZG9tL011dGF0aW9uU2NvcGUuY3BwIFwK
ICAgICBkb20vTmFtZWROb2RlTWFwLmNwcCBcCiAgICAgZG9tL05hbWVOb2RlTGlzdC5jcHAgXAog
ICAgIGRvbS9Ob2RlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCmluZGV4IDI1ZDZhY2RlYTU4NmY4Mjg1Y2ZmN2Q5ZGJhNDI2YjI2NGRlNWJiNGIu
LjYyNDlmMzIwMjI3ZTIyMzkwOGUxZWY3ODM4YjVhNzQ3NzMyZTEzOTMgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00NzYxMCw2ICs0NzYxMCw2
MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cTXV0YXRpb25TY29wZS5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
Lz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNdXRhdGlvblNjb3BlLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOYW1lZE5vZGVNYXAu
Y3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiOTc2OGFmMzYxZmUzYjZkY2Y0NTA0MDc2M2Nl
NzViMWYyOWZiZDkxLi4zYmQyOWU5MDE4ZDk2Yjc1YTAxNzg3OGUzMzg4NDc1ZWI4NWQzMDNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC01Nzg2LDYgKzU3ODYsOCBAQAogCQlEM0FBMTBGNDEyM0E5OEFBMDA5MjE1MkIgLyogTWVk
aWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oICov
OyB9OwogCQlEM0Q0RTk3MjEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRDRFOTcw
MTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICovOyB9OwogCQlEM0Q0
RTk3MzEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1
NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi87IH07CisJCUQ2MTlBMzA3MTQ0RTAwQkUwMDRC
QzMwMiAvKiBNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3Bl
LmNwcCAqLzsgfTsKKwkJRDYxOUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA2
MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggKi87IH07CiAJCUQ3MEFENjU3MTNF
MTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRl
clJlZ2lvbi5jcHAgKi87IH07CiAJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJS
ZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3
MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCAqLzsgfTsKIAkJRDhCNjE1
MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzA5
MCw2ICsxMzA5Miw4IEBACiAJCUQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5
TWF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TWF0
Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MDEzMEM3Q0ZFMDA3
QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQzRDRFOTcxMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFN1bW1hcnlFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAv
KiBNdXRhdGlvblNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE11dGF0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENjE5QTMw
NjE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNdXRhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUmVnaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTYxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJl
Z2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJSZWdpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8q
IENvb2tpZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTIyLDYgKzIxMTI2LDggQEAKIAkJCQlDNkYw
OEZCOTE0MzBGRThGMDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuY3BwICovLAogCQkJCUM2RjA4
RkJBMTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5oICovLAogCQkJCUM2RjA4RkJC
MTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5pZGwgKi8sCisJCQkJRDYxOUEzMDUx
NDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUuY3BwICovLAorCQkJCUQ2MTlBMzA2MTQ0
RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggKi8sCiAJCQkJQkNGMzRBMzYxMUEyMzFD
RDAwQzcxODA0IC8qIE5hbWVkTm9kZU1hcC5jcHAgKi8sCiAJCQkJQTgxODcyMTgwOTc3RDNDMDAw
NTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oICovLAogCQkJCTg1QUNBOUY5MEE5QjYzMTAwMDY3MUU5
MCAvKiBOYW1lZE5vZGVNYXAuaWRsICovLApAQCAtMjM2MjIsNiArMjM2MjgsNyBAQAogCQkJCUM2
RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NTAzMUI0QTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzZGMDhGQkQxNDMwRkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3Jk
LmggaW4gSGVhZGVycyAqLywKKwkJCQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMjMwOTc3RDNDMDAwNTgyNkQ5IC8q
IE5hbWVkTm9kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUUwOTc3RDNDMDAwNTgy
NkQ5IC8qIE5hbWVOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjlCNkMwQjc0NzU5
OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjY4Niw2ICsyNjY5Myw3IEBACiAJCQkJQjFBRDRFNjIxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFi
bGVUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwMzFCNDkwQTQ0RUZDNzAwRjk5
MkUwIC8qIE11dGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZGMDhGQkMxNDMw
RkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ2
MTlBMzA3MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRjM0QTM3MTFBMjMxQ0QwMEM3MTgwNCAvKiBOYW1lZE5vZGVNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTBCOUI2RDBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZl
WFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuY3BwCmluZGV4IDNlYTQ5OTM2OTM1NzQ5YjEzMTkyYjc2MzQxZDUwOWIxNTM4ZTRjMGMu
LjQxNWFlZWE1YTYzNTI2Mzk3ZjhmZTcwZWU3MzgzY2Y2MzUxYzdhOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbmxpbmVU
ZXh0Qm94LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCkBAIC0xNDEsNiArMTQyLDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6aW5z
ZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNl
CiAgICAgaWYgKHJlZkNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA9PSBuZXdDaGlsZCB8fCByZWZD
aGlsZCA9PSBuZXdDaGlsZCkgLy8gbm90aGluZyB0byBkbwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZSBtdXRhdGlvbih0aGlzKTsKKyNlbmRpZgorCiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBy
ZWZDaGlsZDsKICAgICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGRQcmV2aW91c1NpYmxpbmcgPSByZWZD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkgewpA
QCAtMjcyLDYgKzI3NywxMCBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNz
UmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBD
aGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCisKICAgICBSZWZQ
dHI8Tm9kZT4gcHJldiA9IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBSZWZQdHI8
Tm9kZT4gbmV4dCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpOwogCkBAIC00MDAsNiArNDA5LDEw
IEBAIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWlu
ZXIpCiAgICAgTm9kZVZlY3RvciBjaGlsZHJlbjsKICAgICBjb2xsZWN0Tm9kZXMoY29udGFpbmVy
LCBjaGlsZHJlbik7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxk
TGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oY29udGFpbmVyKTsKKyNlbmRpZgorCiAgICAgZm9y
IChOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9
IGNoaWxkcmVuLmVuZCgpOyBpdCsrKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgp
OwogICAgICAgICAvLyBmaXJlIHJlbW92ZWQgZnJvbSBkb2N1bWVudCBtdXRhdGlvbiBldmVudHMu
CkBAIC02MTEsNiArNjI0LDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFz
c1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvCiAgICAgaWYgKHRh
cmdldHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlz
KTsKKyNlbmRpZgorCiAgICAgLy8gTm93IGFjdHVhbGx5IGFkZCB0aGUgY2hpbGQocmVuKQogICAg
IFJlZlB0cjxOb2RlPiBwcmV2ID0gbGFzdENoaWxkKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsg
KytpdCkgewpAQCAtMTA5NSw2ICsxMTEyLDEzIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJ
bnNlcnRpb25FdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKKyNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5wYXJlbnROb2RlKCkpIHsK
KyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnROb2RlKCkp
OworICAgICAgICBtdXRhdGlvbi5jaGlsZEFkZGVkKGMpOworICAgIH0KKyNlbmRpZgorCiAgICAg
aWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50
OjpET01OT0RFSU5TRVJURURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2
ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2VydGVkRXZl
bnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwogCkBAIC0xMTE2LDYgKzExNDAsMTMgQEAgc3Rh
dGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVm
UHRyPE5vZGU+IGMgPSBjaGlsZDsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hp
bGQtPmRvY3VtZW50KCk7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlm
IChjLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRh
dGlvbihjLT5wYXJlbnROb2RlKCkpOworICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQo
Yyk7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlv
biBldmVudHMKICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5l
clR5cGUoRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkKICAgICAgICAgYy0+ZGlz
cGF0Y2hTY29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5v
ZGVSZW1vdmVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCmluZGV4IGQ2OTliMTkxMTZlODMxZDczZmQ1NTIzYTg0ZWFhMmViNTg2ZmVmNTcuLjMzZjM2
NTU0OWNkNjA1NmExZGVlMzEyODc3YWRkZWE4ZmRiZjQ5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKQEAgLTYyNSw4ICs2MjUsOCBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0
aW9uUmVjb3JkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbQogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25S
ZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7Ci0gICAgZm9yIChWZWN0b3I8
V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2lu
KCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPmVu
cXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYnNlcnZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+ZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25TY29wZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzM4ZmJkZTlhMmYyYmQ0MGE4MzAwZjY0YTJiMjA5ZjNk
MDQwMGI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNj
b3BlLmNwcApAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCisKKyNpbmNsdWRlICJNdXRhdGlvblNjb3BlLmgiCisKKyNp
bmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1
ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0YXRp
Y05vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBSZWNvcmRBY2N1bXVsYXRvciBleHBlY3RzIHRoYXQgYWxsIHJlbW92YWxzIGZy
b20gYSBwYXJlbnQgdGFrZSBwbGFjZSBpbiBvcmRlciBhbmQgcHJlY2VkZQorLy8gYW55IGFkZGl0
aW9ucy4gSWYgdGhpcyBpcyB2aW9sYXRlZCAoaS5lLiBiZWNhdXNlIG9mIGNvZGUgY2hhbmdlcyBl
bHNld2hlcmUgaW4gV2ViQ29yZSkKKy8vIGl0IHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBib3RoIChh
KSBBU1NFUlRpb25zIGZhaWxpbmcsIGFuZCAoYikgbXV0YXRpb24gcmVjb3JkcyBiZWluZworLy8g
ZW5xdWV1ZWQgZm9yIGRlbGl2ZXJ5IGJlZm9yZSB0aGUgb3V0ZXItbW9zdCBzY29wZSBjbG9zZXMu
CitjbGFzcyBSZWNvcmRBY2N1bXVsYXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVj
b3JkQWNjdW11bGF0b3IpOworcHVibGljOgorICAgIFJlY29yZEFjY3VtdWxhdG9yKFBhc3NSZWZQ
dHI8Tm9kZT4sIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4mKTsKKyAgICB+UmVjb3Jk
QWNjdW11bGF0b3IoKTsKKworICAgIHZvaWQgY2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+KTsK
KyAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIGVu
cXVldWVNdXRhdGlvblJlY29yZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXIoKTsKKyAg
ICBib29sIGlzRW1wdHkoKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKKworICAgIFZl
Y3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKKyAgICBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4gbV9hZGRlZE5vZGVzOworICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzU2libGluZzsK
KyAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKKyAgICBSZWZQdHI8Tm9kZT4gbV9sYXN0
QWRkZWQ7CisKKyAgICBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG1fb2JzZXJ2ZXJz
OworfTsKKworY2xhc3MgQWNjdW11bGF0aW9uTWFuYWdlciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQWNjdW11bGF0aW9uTWFuYWdlcik7CitwdWJsaWM6CisgICAgfkFjY3VtdWxhdGlvbk1h
bmFnZXIoKTsKKworICAgIHN0YXRpYyBBY2N1bXVsYXRpb25NYW5hZ2VyKiBpbnN0YW5jZSgpOwor
CisgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSopOworICAgIHZvaWQgZGVjcmVt
ZW50U2NvcGluZ0xldmVsKE5vZGUqKTsKKworICAgIHZvaWQgY2hpbGRBZGRlZChOb2RlKiwgUGFz
c1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQoTm9kZSosIFBhc3NSZWZQ
dHI8Tm9kZT4pOworCitwcml2YXRlOgorICAgIEFjY3VtdWxhdGlvbk1hbmFnZXIoKTsKKyAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4g
bV9zY29waW5nTGV2ZWxzOworICAgIEhhc2hNYXA8Tm9kZSosIFJlY29yZEFjY3VtdWxhdG9yKj4g
bV9hY2N1bXVsYXRpb25zOworCisgICAgc3RhdGljIEFjY3VtdWxhdGlvbk1hbmFnZXIqIHNfaW5z
dGFuY2U7Cit9OworCitSZWNvcmRBY2N1bXVsYXRvcjo6UmVjb3JkQWNjdW11bGF0b3IoUGFzc1Jl
ZlB0cjxOb2RlPiB0YXJnZXQsIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4mIG9ic2Vy
dmVycykKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtX29ic2VydmVycy5zd2FwKG9i
c2VydmVycyk7CisgICAgY2xlYXIoKTsKK30KKworUmVjb3JkQWNjdW11bGF0b3I6On5SZWNvcmRB
Y2N1bXVsYXRvcigpCit7CisgICAgQVNTRVJUKGlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgUmVjb3Jk
QWNjdW11bGF0b3I6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3sKKyAg
ICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBwcnBDaGlsZDsKKworICAgIC8vIEFkZGl0aW9ucyBtdXN0
IGJlIGluLW9yZGVyLgorICAgIGlmICghaXNFbXB0eSgpICYmIChtX2xhc3RBZGRlZC5nZXQoKSAh
PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgfHwgbV9uZXh0U2libGluZyAhPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkpCisgICAgICAgIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworCisgICAgaWYg
KGlzRW1wdHkoKSkgeworICAgICAgICBtX3ByZXZpb3VzU2libGluZyA9IGNoaWxkLT5wcmV2aW91
c1NpYmxpbmcoKTsKKyAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygp
OworICAgIH0KKworICAgIG1fYWRkZWROb2Rlcy5hcHBlbmQoY2hpbGQpOworICAgIG1fbGFzdEFk
ZGVkID0gY2hpbGQ7Cit9CisKKy8vIFNlZSBjb21tZW50IG9uIHRoZSBjbGFzcyBhYm91dCBBU1NF
UlQgYXNzdW1wdGlvbnMuCit2b2lkIFJlY29yZEFjY3VtdWxhdG9yOjp3aWxsUmVtb3ZlQ2hpbGQo
UGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3sKKyAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBw
cnBDaGlsZDsKKyAgICBBU1NFUlQobV9hZGRlZE5vZGVzLmlzRW1wdHkoKSk7IC8vIFJlbW92YWxz
IG11c3QgcHJlY2VkZSBhZGRpdGlvbnMuCisgICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgp
KQorICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKKworICAgIEFTU0VSVChpc0VtcHR5
KCkgfHwgbV9uZXh0U2libGluZy5nZXQoKSA9PSBjaGlsZCk7IC8vIFJlbW92YWxzIG11c3QgYmUg
Y29udGludW91cyBhbmQgaW4tb3JkZXIuCisgICAgaWYgKCFpc0VtcHR5KCkgJiYgbV9uZXh0U2li
bGluZy5nZXQoKSAhPSBjaGlsZCkKKyAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CisK
KyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcHJldmlvdXNTaWJsaW5nID0gY2hpbGQt
PnByZXZpb3VzU2libGluZygpOworICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRT
aWJsaW5nKCk7CisgICAgICAgIG1fbGFzdEFkZGVkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygp
OworICAgIH0gZWxzZQorICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7CisKKyAgICBtX3JlbW92ZWROb2Rlcy5hcHBlbmQoY2hpbGQpOworfQorCit2b2lkIFJlY29y
ZEFjY3VtdWxhdG9yOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoKQoreworICAgIEFTU0VSVCghaXNF
bXB0eSgpKTsKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0g
TXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdChtX3RhcmdldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dGF0aWNOb2RlTGlzdDo6YWRvcHQobV9hZGRlZE5vZGVzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0aWNO
b2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJldmlvdXNT
aWJsaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbmV4dFNpYmxpbmcpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9vYnNlcnZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fb2JzZXJ2ZXJzW2ld
LT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOworCisgICAgY2xlYXIoKTsKK30KKwor
dm9pZCBSZWNvcmRBY2N1bXVsYXRvcjo6Y2xlYXIoKQoreworICAgIGlmICghbV9yZW1vdmVkTm9k
ZXMuaXNFbXB0eSgpKQorICAgICAgICBtX3JlbW92ZWROb2Rlcy5jbGVhcigpOworICAgIGlmICgh
bV9hZGRlZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hZGRlZE5vZGVzLmNsZWFyKCk7Cisg
ICAgbV9wcmV2aW91c1NpYmxpbmcgPSAwOworICAgIG1fbmV4dFNpYmxpbmcgPSAwOworICAgIG1f
bGFzdEFkZGVkID0gMDsKK30KKworYm9vbCBSZWNvcmRBY2N1bXVsYXRvcjo6aXNFbXB0eSgpCit7
CisgICAgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9kZXMuaXNF
bXB0eSgpOworfQorCitBY2N1bXVsYXRpb25NYW5hZ2VyKiBBY2N1bXVsYXRpb25NYW5hZ2VyOjpz
X2luc3RhbmNlID0gMDsKKworQWNjdW11bGF0aW9uTWFuYWdlcjo6QWNjdW11bGF0aW9uTWFuYWdl
cigpCit7Cit9CisKK0FjY3VtdWxhdGlvbk1hbmFnZXI6On5BY2N1bXVsYXRpb25NYW5hZ2VyKCkK
K3sKKyAgICBBU1NFUlQobV9zY29waW5nTGV2ZWxzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1f
YWNjdW11bGF0aW9ucy5pc0VtcHR5KCkpOworfQorCit2b2lkIEFjY3VtdWxhdGlvbk1hbmFnZXI6
OmluaXRpYWxpemUoKQoreworICAgIEFTU0VSVCghc19pbnN0YW5jZSk7CisgICAgc19pbnN0YW5j
ZSA9IGFkb3B0UHRyKG5ldyBBY2N1bXVsYXRpb25NYW5hZ2VyKS5sZWFrUHRyKCk7Cit9CisKKwor
QWNjdW11bGF0aW9uTWFuYWdlciogQWNjdW11bGF0aW9uTWFuYWdlcjo6aW5zdGFuY2UoKQorewor
ICAgIGlmICghc19pbnN0YW5jZSkKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgcmV0dXJu
IHNfaW5zdGFuY2U7Cit9CisKK3ZvaWQgQWNjdW11bGF0aW9uTWFuYWdlcjo6Y2hpbGRBZGRlZChO
b2RlKiB0YXJnZXQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgQVNTRVJUKG1fYWNj
dW11bGF0aW9ucy5jb250YWlucyh0YXJnZXQpKTsKKyAgICBSZWNvcmRBY2N1bXVsYXRvciogcmVj
b3JkID0gbV9hY2N1bXVsYXRpb25zLmdldCh0YXJnZXQpOworICAgIGlmIChyZWNvcmQpCisgICAg
ICAgIHJlY29yZC0+Y2hpbGRBZGRlZChjaGlsZCk7Cit9CisKK3ZvaWQgQWNjdW11bGF0aW9uTWFu
YWdlcjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGls
ZCkKK3sKKyAgICBBU1NFUlQobV9hY2N1bXVsYXRpb25zLmNvbnRhaW5zKHRhcmdldCkpOworICAg
IFJlY29yZEFjY3VtdWxhdG9yKiByZWNvcmQgPSBtX2FjY3VtdWxhdGlvbnMuZ2V0KHRhcmdldCk7
CisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3JkLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQp
OworfQorCit2b2lkIEFjY3VtdWxhdGlvbk1hbmFnZXI6OmluY3JlbWVudFNjb3BpbmdMZXZlbChO
b2RlKiB0YXJnZXQpCit7CisgICAgaWYgKG1fc2NvcGluZ0xldmVscy5jb250YWlucyh0YXJnZXQp
KSB7CisgICAgICAgIG1fc2NvcGluZ0xldmVscy5zZXQodGFyZ2V0LCBtX3Njb3BpbmdMZXZlbHMu
Z2V0KHRhcmdldCkgKyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2NvcGlu
Z0xldmVscy5zZXQodGFyZ2V0LCAxKTsKKyAgICBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZl
cio+IG9ic2VydmVyczsKKyAgICB0YXJnZXQtPnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09m
VHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCk7CisgICAg
aWYgKG9ic2VydmVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFy
Z2V0LCAwKTsKKyAgICBlbHNlCisgICAgICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCBu
ZXcgUmVjb3JkQWNjdW11bGF0b3IodGFyZ2V0LCBvYnNlcnZlcnMpKTsKK30KKwordm9pZCBBY2N1
bXVsYXRpb25NYW5hZ2VyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQorewor
ICAgIEFTU0VSVChtX3Njb3BpbmdMZXZlbHMuY29udGFpbnModGFyZ2V0KSk7CisgICAgdW5zaWdu
ZWQgc2NvcGluZ0xldmVsID0gbV9zY29waW5nTGV2ZWxzLmdldCh0YXJnZXQpIC0gMTsKKworICAg
IGlmIChzY29waW5nTGV2ZWwgPiAwKSB7CisgICAgICAgIG1fc2NvcGluZ0xldmVscy5zZXQodGFy
Z2V0LCBzY29waW5nTGV2ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRy
PFJlY29yZEFjY3VtdWxhdG9yPiByZWNvcmQgPSBhZG9wdFB0cihtX2FjY3VtdWxhdGlvbnMudGFr
ZSh0YXJnZXQpKTsKKyAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3ZlKHRhcmdldCk7CisKKyAgICBp
ZiAocmVjb3JkKQorICAgICAgICByZWNvcmQtPmVucXVldWVNdXRhdGlvblJlY29yZCgpOworfQor
CitDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQ
dHI8Tm9kZT4gdGFyZ2V0KQorICAgIDogbV90YXJnZXQodGFyZ2V0KQoreworICAgIEFjY3VtdWxh
dGlvbk1hbmFnZXI6Omluc3RhbmNlKCktPmluY3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldC5n
ZXQoKSk7Cit9CisKK0NoaWxkTGlzdE11dGF0aW9uU2NvcGU6On5DaGlsZExpc3RNdXRhdGlvblNj
b3BlKCkKK3sKKyAgICBBY2N1bXVsYXRpb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5kZWNyZW1lbnRT
Y29waW5nTGV2ZWwobV90YXJnZXQuZ2V0KCkpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBBY2N1bXVs
YXRpb25NYW5hZ2VyOjppbnN0YW5jZSgpLT5jaGlsZEFkZGVkKG1fdGFyZ2V0LmdldCgpLCBjaGls
ZCk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6d2lsbFJlbW92ZUNoaWxkKFBh
c3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgQWNjdW11bGF0aW9uTWFuYWdlcjo6aW5zdGFu
Y2UoKS0+d2lsbFJlbW92ZUNoaWxkKG1fdGFyZ2V0LmdldCgpLCBjaGlsZCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uU2NvcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzYwODU2YzgzYjZkYmEy
NjM4Y2QzMDdlNzVkNzdiMjRhYjY0YzNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uU2NvcGUuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNdXRhdGlvblNj
b3BlX2gKKyNkZWZpbmUgTXV0YXRpb25TY29wZV9oCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTm9kZTsKKworY2xhc3MgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hpbGRMaXN0TXV0YXRpb25TY29wZSk7CitwdWJsaWM6Cisg
ICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CisgICAg
fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoKTsKKworICAgIHZvaWQgY2hpbGRBZGRlZChQYXNzUmVm
UHRyPE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsK
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCisj
ZW5kaWYgLy8gTXV0YXRpb25TY29wZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMWY4NWZkOTEyZWFk
ZmQ1YTczMTU5ZDZkZWRlOTMwZTY0ODQ5Yzk0MC4uYzY2ZGRjYzc4NGQyMmVhMjdiMzVjYmU4OGE0
OGM4MzgxNDU1YTczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTXV0YXRp
b25FdmVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJOYW1lTm9k
ZUxpc3QuaCIKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlICJOb2RlUmFyZURh
dGEuaCIKQEAgLTIxMjQsNiArMjEyNSw5IEBAIHZvaWQgTm9kZTo6c2V0VGV4dENvbnRlbnQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgY2FzZSBET0NVTUVO
VF9GUkFHTUVOVF9OT0RFOgogICAgICAgICBjYXNlIFNIQURPV19ST09UX05PREU6IHsKICAgICAg
ICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lciA9IHRvQ29udGFpbmVyTm9kZSh0aGlzKTsK
KyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAgICAgICAgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZSBtdXRhdGlvbih0aGlzKTsKKyNlbmRpZgogICAgICAgICAgICAgY29udGFpbmVy
LT5yZW1vdmVDaGlsZHJlbigpOwogICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRl
eHROb2RlKHRleHQpLCBlYyk7CkBAIC0yNjk0LDkgKzI2OTgsOSBAQCB2b2lkIE5vZGU6OnJlZ2lz
dGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZl
cio+JiBvYgogICAgIGlmICghb2JzZXJ2ZXJFbnRyaWVzIHx8IG9ic2VydmVyRW50cmllcy0+aXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKFZlY3RvcjxNdXRhdGlvbk9ic2Vy
dmVyRW50cnk+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJFbnRyaWVzLT5iZWdpbigpOyBpdGVy
ICE9IG9ic2VydmVyRW50cmllcy0+ZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+
bWF0Y2hlcyh0eXBlKSkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoaXRlci0+b2JzZXJ2
ZXIuZ2V0KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JzZXJ2ZXJFbnRyaWVzLT5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAoKCpvYnNlcnZlckVudHJpZXMpW2ldLm1hdGNoZXMo
dHlwZSkpCisgICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKCgqb2JzZXJ2ZXJFbnRyaWVzKVtp
XS5vYnNlcnZlci5nZXQoKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5jcHAKaW5kZXggN2Q3MzZhZTdiYWM2NGM0NTg4ZmNiYTJmYzNk
M2I3NzUyOTdiZGUxNC4uODNmMTU5OTBlYTJiZWNhMzM5YmIwYTczY2MyOTY5YmE0ZGYyOWZhNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcApAQCAt
NjUsOCArNjUsOCBAQCB2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoTm9kZSog
bm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucwogCiB2b2lkIFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6OmRpc2Nvbm5lY3QoKQogewotICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRl
cmF0b3IgaXRlciA9IG1fb2JzZXJ2ZWROb2Rlcy5iZWdpbigpOyBpdGVyICE9ICBtX29ic2VydmVk
Tm9kZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+dW5yZWdpc3Rlck11dGF0aW9u
T2JzZXJ2ZXIodGhpcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29ic2VydmVkTm9k
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fb2JzZXJ2ZWROb2Rlc1tpXS0+dW5yZWdpc3Rlck11
dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CiAKICAgICBtX29ic2VydmVkTm9kZXMuY2xlYXIoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggNTkxMmRhMDdkNzZhNDkyYzZkNzMy
ODhhMTQzNGRkMTMxZTMxOTgwNC4uNWQ0MGNkNTdjZTU2Yjc4N2RhMzVmMjk5Yzk5NzIwYzNmOTM5
MzZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAj
aW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlv
blNjb3BlLmgiCiAjaW5jbHVkZSAiUmVuZGVyV29yZEJyZWFrLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0zMTcsNiArMzE4LDEw
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNPbmVUZXh0Q2hpbGQoQ29udGFpbmVyTm9kZSogbm9k
ZSkKIAogc3RhdGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KEhUTUxFbGVtZW50
KiBlbGVtZW50LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxk
TGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oZWxlbWVudCk7CisjZW5kaWYKKwogICAgIGlmICgh
ZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICBlbGVtZW50LT5yZW1vdmVDaGlsZHJl
bigpOwogICAgICAgICByZXR1cm47CkBAIC0zMzgsNiArMzQzLDEwIEBAIHN0YXRpYyB2b2lkIHJl
cGxhY2VDaGlsZHJlbldpdGhGcmFnbWVudChIVE1MRWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0
cjxEb2N1bWVuCiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VDaGlsZHJlbldpdGhUZXh0KEhUTUxFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewor
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZSBtdXRhdGlvbihlbGVtZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKGhhc09uZVRleHRDaGlsZChl
bGVtZW50KSkgewogICAgICAgICBzdGF0aWNfY2FzdDxUZXh0Kj4oZWxlbWVudC0+Zmlyc3RDaGls
ZCgpKS0+c2V0RGF0YSh0ZXh0LCBlYyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyYzgzOThl
MzFhN2Y2OWMyNjEwZTIyYWFjNTcyZjZkMDRlNzU2MzQ4Li40MjVlN2M3NWQxYjg3ODkzYWNlZjZh
M2Y3ZGQ0N2ZmOGUzNWE2NmZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTAtMTggIFJh
ZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRp
b25PYnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9y
IGNoaWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWw6CisgICAg
ICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbDogQWRkZWQu
CisKIDIwMTEtMTAtMTkgIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEFkZCBuZXcgcmVuZGVyZXIgZm9yIFNWR1JlY3RFbGVtZW50LgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0
CmluZGV4IDk4NjlmZTJlZTViMDJjMGU3NzY4ZDgxYTMzMmFhZmQzODY2ZWNjODEuLjJmODU5OGRm
ZjdhMDIwZWUzYzcyN2U5ZTM3Zjk4NmE2YTI4MTg2OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKQEAg
LTIzLDcgKzIzLDcgQEAgUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51
bGwKIFRlc3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJhdHRyaWJ1dGVz
IiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBhYm91dCBhdHRyaWJ1dGUgY2hhbmdlcy4KIFBB
U1MgbXV0YXRpb25zIGlzIG51bGwKIAotVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2Ft
ZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5nIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGlu
ZyB0aGUgb3B0aW9ucy4KK1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3
aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0
aW9ucy4KIFBBU1MgY2FsbHMgaXMgMQogUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKIFBBU1Mg
bXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAppbmRleCA2NDZlMzkzMWQxNDUwYzFk
Y2Q0YWNlNGE3ZWJlNTEwM2Q4OGViM2JlLi44NWVjNjc3NGQ2ZjVjN2ZkMWJhNWI5ZGNiYTdiYTNi
ZmY4MzUwMDY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUt
YXR0cmlidXRlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1h
dHRyaWJ1dGVzLmh0bWwKQEAgLTEyLDggKzEyLDcgQEAKIDxzY3JpcHQ+CiAKIHdpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKLXZhciBtdXRhdGlvbnM7Ci12YXIgbXV0YXRpb25zMjsKK3ZhciBt
dXRhdGlvbnMsIG11dGF0aW9uczI7CiB2YXIgY2FsbHM7CiAKIGZ1bmN0aW9uIHRlc3RCYXNpYygp
IHsKQEAgLTEwOSw3ICsxMDgsNyBAQCBmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24o
KSB7CiAgICAgdmFyIG9ic2VydmVyOwogCiAgICAgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgICAg
IGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUg
c2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLicp
OworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2Rl
IHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBv
cHRpb25zLicpOwogICAgIAogCQljYWxscyA9IDA7CiAgICAgICAgIG11dGF0aW9ucyA9IG51bGw7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExp
c3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYWQ3MzdmMDcxMmU2M2E2YzNiNDJjMWIyMDIz
YWVlMDE5ZTBmODEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9u
L29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkzIEBACitUZXN0IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBvbiBhdHRyaWJ1dGVzLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworVGVzdGluZyBiYXNpYyBhc3BlY3RzIG9mIGNoaWxkTGlzdCBv
YnNlcnZhdGlvbi4KKy4uLmNhbiBjaGlsZExpc3QgY2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwK
K1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJj
aGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNT
IG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYxCisuLi5vYnNlcnZlci5k
aXNjb25uZWN0KCkgc2hvdWxkIHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMu
CitQQVNTIG11dGF0aW9ucyBpcyBudWxsCisuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIgZGlzY29ubmVj
dCB3b3JrcyB3aXRoIHRoZSBzYW1lIG9ic2VydmVyLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlz
IDIKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25z
WzBdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5v
ZGVzWzBdIGlzIHJlbW92ZWREaXYxCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJjaGlsZExp
c3QiCitQQVNTIG11dGF0aW9uc1sxXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0
YXRpb25zWzFdLnJlbW92ZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MgorCitUZXN0aW5nIHRoYXQg
b2JzZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiY2hpbGRMaXN0IiBkb2VzIG5vdCByZXN1bHQg
aW4gaGVhcmluZyBhYm91dCBjaGlsZExpc3QgY2hhbmdlcy4KK1BBU1MgbXV0YXRpb25zIGlzIG51
bGwKKworVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNh
bWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLgorUEFT
UyBjYWxscyBpcyAxCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNb
MF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnMgaXMgbnVsbAorCitUZXN0aW5n
IHRoYXQgbXVsdGlwbGUgb2JzZXJ2ZXJzIGNhbiBiZSByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gbm9k
ZSBhbmQgYm90aCByZWNlaXZlIG11dGF0aW9ucy4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAx
CitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uczIu
bGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zMlswXS50eXBlIGlzICJjaGlsZExpc3QiCisKK1Rl
c3RpbmcgdGhhdCBpbm5lclRleHQgYW5kIGlubmVySFRNTCBhbHdheXMgcmVzdWx0IGluIGEgc2lu
Z2xlIGNoaWxkTGlzdCBtdXRhdGlvbi4KKy4uLmlubmVySFRNTAorUEFTUyBtdXRhdGlvbnMubGVu
Z3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0
YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDMKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVk
Tm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzFdIGlz
IGFkZGVkRGl2MgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1syXSBpcyBhZGRlZERpdjMK
K1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlv
bnNbMF0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5y
ZW1vdmVkTm9kZXNbMV0gaXMgcmVtb3ZlZERpdjIKKy4uLmlubmVyVGV4dAorUEFTUyBtdXRhdGlv
bnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BB
U1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBd
LnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMworCitUZXN0aW5nIHRoYXQgcmVwbGFjZUNoaWxkIHJl
c3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLgorLi4uaW5uZXJIVE1MCitQQVNT
IG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRM
aXN0IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBd
IGlzIHJlbW92ZWREaXYxCisuLi5pbm5lclRleHQKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAx
CitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1sw
XS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBd
IGlzIGFkZGVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXSBpcyBhZGRlZERp
djIKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRh
dGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYxCisKK1Rlc3RpbmcgdGhhdCBp
bnNlcnRCZWZvcmUgcmVzdWx0cyBpbiBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuCisuLi5p
bm5lclRleHQKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50
eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBp
cyAyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIGFkZGVkRGl2MQorUEFTUyBt
dXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXSBpcyBhZGRlZERpdjIKK1BBU1MgbXV0YXRpb25zWzBd
LnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMAorCitUZXN0aW5nIHRoYXQgYXBwZW5kQ2hpbGQgcmVz
dWx0cyBpbiBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuCisuLi5pbm5lclRleHQKK1BBU1Mg
bXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExp
c3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0
aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIGFkZGVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0uYWRk
ZWROb2Rlc1sxXSBpcyBhZGRlZERpdjIKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5s
ZW5ndGggaXMgMAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNo
aWxkTGlzdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlz
dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZhYjNiOWI4ZDIyMjkzN2M2NDgyYzY5ZWMwZjU3NTRiZmNmZmM2
ODUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUt
Y2hpbGRMaXN0Lmh0bWwKQEAgLTAsMCArMSw0MTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHRpdGxlPjwvdGl0bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPWRlc2NyaXB0aW9uPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdD4KKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwordmFy
IG11dGF0aW9ucywgbXV0YXRpb25zMjsKK3ZhciBjYWxsczsKK3ZhciBkaXYsIHJlbW92ZWREaXYx
LCByZW1vdmVkRGl2MiwgYWRkZWREaXYxLCBhZGRlZERpdjIsIGFkZGVkRGl2MzsKKworZnVuY3Rp
b24gdGVzdEJhc2ljKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGJhc2ljIGFzcGVjdHMg
b2YgY2hpbGRMaXN0IG9ic2VydmF0aW9uLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7
CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBv
YnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAg
ICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9i
c2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBk
aXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBz
ZXRUaW1lb3V0KGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSwgMCk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlKCkgeworICAgICAgICBkZWJ1ZygnLi4uY2Fu
IGNoaWxkTGlzdCBjaGFuZ2VzIGJlIG9ic2VydmVkIGF0IGFsbCcpOworCisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0uYWRkZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLmFkZGVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKworICAgICAgICBtdXRhdGlvbnMg
PSBudWxsOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIHJlbW92ZWRE
aXYxID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAg
ICAgICAgc2V0VGltZW91dChjaGVja05vdERlbGl2ZXJlZEFuZE11dGF0ZU11bHRpcGxlLCAwKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja05vdERlbGl2ZXJlZEFuZE11dGF0ZU11bHRpcGxl
KCkgeworICAgICAgICBkZWJ1ZygnLi4ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpIHNob3VsZCBwcmV2
ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0YXRpb25zLicpOworCisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBj
aGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIHJlbW92ZWREaXYxID0gZGl2LnJlbW92ZUNoaWxk
KGRpdi5maXJzdENoaWxkKTsKKyAgICAgICAgcmVtb3ZlZERpdjIgPSBkaXYucmVtb3ZlQ2hpbGQo
ZGl2LmZpcnN0Q2hpbGQpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4ucmUtb2JzZXJ2aW5nIGFm
dGVyIGRpc2Nvbm5lY3Qgd29ya3Mgd2l0aCB0aGUgc2FtZSBvYnNlcnZlci4nKTsKKworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1sxXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1sxXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjInKTsK
KyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24g
dGVzdFdyb25nVHlwZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAg
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG9ic2Vydmlu
ZyB3aXRob3V0IHNwZWNpZnlpbmcgImNoaWxkTGlzdCIgZG9lcyBub3QgcmVzdWx0IGluIGhlYXJp
bmcgYWJvdXQgY2hpbGRMaXN0IGNoYW5nZXMuJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVs
bDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAg
IG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAg
ICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIu
b2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsK
KyAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsK
KyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAg
IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5O
ZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0
aXBsZVJlZ2lzdHJhdGlvbigpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKwor
ICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IHJlLW9i
c2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZl
Y3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLicpOworCisgICAgICAgIGNhbGxzID0gMDsKKyAg
ICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgICAg
IGNhbGxzKys7CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7
IGNoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0
KGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hl
Y2tEaXNjb25uZWN0QW5kTXV0YXRlKCkgeworICAgICAgICBzaG91bGRCZSgnY2FsbHMnLCAnMScp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBtdXRh
dGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6
IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
ZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAw
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAg
ICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFy
dCgpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMoKSB7CisgICAgdmFyIGRp
djsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsKKworICAgIGZ1bmN0aW9u
IHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IG11bHRpcGxlIG9ic2VydmVy
cyBjYW4gYmUgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIG5vZGUgYW5kIGJvdGggcmVjZWl2ZSBtdXRh
dGlvbnMuJyk7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07
CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMyID0gbTsKKyAgICAgICAg
fSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsK
KyAgICAgICAgb2JzZXJ2ZXIyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAg
ICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAg
ICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlz
aCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uczIubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uczJbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBvYnNlcnZlci5kaXNj
b25uZWN0KCk7CisgICAgICAgIG9ic2VydmVyMi5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVn
KCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQor
CitmdW5jdGlvbiB0ZXN0SW5uZXJIVE1MQW5kSW5uZXJUZXh0KCkgeworICAgIHZhciBkaXY7Cisg
ICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVn
KCdUZXN0aW5nIHRoYXQgaW5uZXJUZXh0IGFuZCBpbm5lckhUTUwgYWx3YXlzIHJlc3VsdCBpbiBh
IHNpbmdsZSBjaGlsZExpc3QgbXV0YXRpb24uJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVs
bDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAg
IGRpdi5pbm5lckhUTUwgPSAnPHNwYW4+Rm9vPC9zcGFuPjxkaXY+QmFyPC9kaXY+JzsKKyAgICAg
ICAgcmVtb3ZlZERpdjEgPSBkaXYuZmlyc3RDaGlsZDsKKyAgICAgICAgcmVtb3ZlZERpdjIgPSBy
ZW1vdmVkRGl2MS5uZXh0U2libGluZzsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOwor
ICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6
IHRydWUgfSk7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAnZm9vPGltZyBzcmM9ImJhci5wbmci
PjxwPkJhejwvcD4nOworICAgICAgICBhZGRlZERpdjEgPSBkaXYuY2hpbGROb2Rlc1swXTsKKyAg
ICAgICAgYWRkZWREaXYyID0gZGl2LmNoaWxkTm9kZXNbMV07CisgICAgICAgIGFkZGVkRGl2MyA9
IGRpdi5jaGlsZE5vZGVzWzJdOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrSW5uZXJIVE1MLCAw
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0lubmVySFRNTCgpIHsKKyAgICAgICAgZGVi
dWcoJy4uLmlubmVySFRNTCcpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3Ro
JywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExp
c3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGgn
LCAnMycpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0nLCAn
YWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sx
XScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5v
ZGVzWzJdJywgJ2FkZGVkRGl2MycpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnJlbW92ZWROb2Rlc1sxXScsICdyZW1vdmVkRGl2MicpOworCisgICAgICAgIG11
dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdi5pbm5lclRleHQgPSAnZm9vJzsKKyAgICAgICAg
c2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsK
KyAgICAgICAgZGVidWcoJy4uLmlubmVyVGV4dCcpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBl
JywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWRO
b2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlcy5sZW5ndGgnLCAnMycpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7Cisg
ICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBz
dGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0UmVwbGFjZUNoaWxkKCkgeworICAgIHZhciBkaXY7
CisgICAgdmFyIG9ic2VydmVyOworICAgIHZhciBmcmFnbWVudDsKKworICAgIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IHJlcGxhY2VDaGlsZCByZXN1bHRz
IGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4nKTsKKworICAgICAgICBtdXRhdGlvbnMg
PSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+PGRpdj5CYXI8L2Rpdj4nOwor
ICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5maXJzdENoaWxkOworCisgICAgICAgIG9ic2VydmVy
ID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAg
bXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShk
aXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBhZGRlZERpdjEgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LnJlcGxhY2VDaGlsZChhZGRlZERpdjEs
IGRpdi5maXJzdENoaWxkKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja1JlcGxhY2VXaXRoTm9k
ZSwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tSZXBsYWNlV2l0aE5vZGUoKSB7Cisg
ICAgICAgIGRlYnVnKCcuLi5pbm5lckhUTUwnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9k
ZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5v
ZGVzWzBdJywgJ2FkZGVkRGl2MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG11dGF0aW9ucyA9
IG51bGw7CisgICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOworICAgICAgICBhZGRlZERpdjEgPSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIGFkZGVkRGl2MiA9IGZyYWdtZW50LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgcmVtb3ZlZERp
djEgPSBkaXYuZmlyc3RDaGlsZDsKKworICAgICAgICBkaXYucmVwbGFjZUNoaWxkKGZyYWdtZW50
LCByZW1vdmVkRGl2MSk7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLmlubmVyVGV4dCcp
OworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVt
b3ZlZERpdjEnKTsKKworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOwor
fQorCitmdW5jdGlvbiB0ZXN0SW5zZXJ0QmVmb3JlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFy
IG9ic2VydmVyOworICAgIHZhciBmcmFnbWVudDsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgewor
ICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGluc2VydEJlZm9yZSByZXN1bHRzIGluIG1pbmlt
YWwgY2hpbGRMaXN0IG11dGF0aW9ucy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2
LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+JzsKKyAgICAgICAgZnJhZ21lbnQgPSBkb2N1
bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIGFkZGVkRGl2MSA9IGZyYWdt
ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAg
YWRkZWREaXYyID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JykpOworCisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIo
ZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAg
ICAgICBkaXYuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LCBkaXYuZmlyc3RDaGlsZCk7CisgICAgICAg
IHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGZpbmlzaCgp
IHsKKyAgICAgICAgZGVidWcoJy4uLmlubmVyVGV4dCcpOworCisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50
eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRk
ZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFk
ZGVkTm9kZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0uYWRkZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzAnKTsKKworICAgICAgICBvYnNlcnZlci5k
aXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsK
KyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0QXBwZW5kQ2hpbGQoKSB7
CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGZyYWdtZW50OworCisg
ICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgYXBwZW5k
Q2hpbGQgcmVzdWx0cyBpbiBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuJyk7CisKKyAgICAg
ICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHNwYW4+Rm9vPC9zcGFuPic7Cisg
ICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAg
ICAgICBhZGRlZERpdjEgPSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKSk7CisgICAgICAgIGFkZGVkRGl2MiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9u
cyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNo
aWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKKyAg
ICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlz
aCgpIHsKKyAgICAgICAgZGVidWcoJy4uLmlubmVyVGV4dCcpOworCisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LmFkZGVkTm9kZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0uYWRkZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzAnKTsKKworICAgICAgICBvYnNlcnZl
ci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3Qo
KTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCit2YXIgdGVzdHMgPSBbdGVzdEJhc2ljLCB0
ZXN0V3JvbmdUeXBlLCB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24sIHRlc3RNdWx0aXBsZU9ic2Vy
dmVycywgdGVzdElubmVySFRNTEFuZElubmVyVGV4dCwgdGVzdFJlcGxhY2VDaGlsZCwgdGVzdElu
c2VydEJlZm9yZSwgdGVzdEFwcGVuZENoaWxkXTsKK3ZhciB0ZXN0SW5kZXggPSAwOworIAorZnVu
Y3Rpb24gcnVuTmV4dFRlc3QoKSB7CisgICAgaWYgKHRlc3RJbmRleCA8IHRlc3RzLmxlbmd0aCkK
KyAgICAgICAgdGVzdHNbdGVzdEluZGV4KytdKCk7CisgICAgZWxzZQorICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKK30KKworZGVzY3JpcHRpb24oJ1Rlc3QgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5v
YnNlcnZlIG9uIGF0dHJpYnV0ZXMuJyk7CisKK2lmICghd2luZG93LldlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIpCisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpJyk7CitlbHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111656</attachid>
            <date>2011-10-19 12:17:41 -0700</date>
            <delta_ts>2011-10-20 16:04:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111019121741.patch</filename>
            <type>text/plain</type>
            <size>49998</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZjNhNzgxMGY5NDNhOTU0
NTAyNWI0MjQ5YzE2NDZkZTM3ZmExNWJkLi43MmUxNzg4ZDE1ZGRiMTNjMDdkM2E4MjYyMmI1ZDc0
M2NlNWEwZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2Rl
OjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25S
ZWNvcmQpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9NdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZSk6CisgICAgICAgICogZG9t
L1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQpOgorCiAyMDExLTEwLTE5ICBS
ZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgbmV3IHJlbmRl
cmVyIGZvciBTVkdSZWN0RWxlbWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGI1MGZmOWY2
OWE2ZTlkMzM5ZjI0YzUxYThjOTllNzFmYzQzZjYyYy4uYjFiNTg5NmRkZDNhMWZhM2RhMmYzZmM4
MjFhOThmODYyMGNhNThhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU2Myw2ICs1NjMsNyBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAogICAg
IGRvbS9NdXRhdGlvbkV2ZW50LmNwcAogICAgIGRvbS9NdXRhdGlvblJlY29yZC5jcHAKKyAgICBk
b20vTXV0YXRpb25TY29wZS5jcHAKICAgICBkb20vTmFtZWROb2RlTWFwLmNwcAogICAgIGRvbS9O
YW1lTm9kZUxpc3QuY3BwCiAgICAgZG9tL05vZGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCA0ODA2Zjk5M2UxYzc1ZTI0Nzc5MDUyZDU1ZDU3ODdiYjVlYmVlOWU5Li45Nzg0
N2NmOGQ0NGRmMjhlYWY0NTQwMzg5ZGJiNjM0YzhiM2RiZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTEyNTMsNiArMTI1Myw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9t
L011dGF0aW9uUmVjb3JkLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmggXAorCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uU2NvcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaCBcCiAJU291cmNl
L1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDkyNzc1
OTYyMDdlZmVlNjAzMTQyMTlmN2YwN2FjZjRjYTYzZjQ2Y2UuLmVmZWRjZjMyNTA1ZDU1ZjJhNDgy
ZTU5MTIzOGEyMTZmZDA3M2FhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUyMzEsNiArNTIzMSw4
IEBACiAgICAgICAgICAgICAnZG9tL011dGF0aW9uRXZlbnQuaCcsCiAgICAgICAgICAgICAnZG9t
L011dGF0aW9uUmVjb3JkLmNwcCcsCiAgICAgICAgICAgICAnZG9tL011dGF0aW9uUmVjb3JkLmgn
LAorICAgICAgICAgICAgJ2RvbS9NdXRhdGlvblNjb3BlLmNwcCcsCisgICAgICAgICAgICAnZG9t
L011dGF0aW9uU2NvcGUuaCcsCiAgICAgICAgICAgICAnZG9tL05hbWVOb2RlTGlzdC5jcHAnLAog
ICAgICAgICAgICAgJ2RvbS9OYW1lTm9kZUxpc3QuaCcsCiAgICAgICAgICAgICAnZG9tL05hbWVk
Tm9kZU1hcC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBkOTQzZTU4YTBmYjRjNjljZTRlNTJmODll
MzI1NGUxOGY1YTZiYTdiLi40MTYxZTQ2NzE4MjU1MTI0YzBjMzQ3Yjg0NmE2YjU2MmRjMThkYzNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwpAQCAtNTIxLDYgKzUyMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRv
bS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAgXAogICAgIGRvbS9NdXRhdGlvbkV2ZW50LmNwcCBcCiAg
ICAgZG9tL011dGF0aW9uUmVjb3JkLmNwcCBcCisgICAgZG9tL011dGF0aW9uU2NvcGUuY3BwIFwK
ICAgICBkb20vTmFtZWROb2RlTWFwLmNwcCBcCiAgICAgZG9tL05hbWVOb2RlTGlzdC5jcHAgXAog
ICAgIGRvbS9Ob2RlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCmluZGV4IDI1ZDZhY2RlYTU4NmY4Mjg1Y2ZmN2Q5ZGJhNDI2YjI2NGRlNWJiNGIu
LjYyNDlmMzIwMjI3ZTIyMzkwOGUxZWY3ODM4YjVhNzQ3NzMyZTEzOTMgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00NzYxMCw2ICs0NzYxMCw2
MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cTXV0YXRpb25TY29wZS5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
Lz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNdXRhdGlvblNjb3BlLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOYW1lZE5vZGVNYXAu
Y3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiOTc2OGFmMzYxZmUzYjZkY2Y0NTA0MDc2M2Nl
NzViMWYyOWZiZDkxLi4zYmQyOWU5MDE4ZDk2Yjc1YTAxNzg3OGUzMzg4NDc1ZWI4NWQzMDNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC01Nzg2LDYgKzU3ODYsOCBAQAogCQlEM0FBMTBGNDEyM0E5OEFBMDA5MjE1MkIgLyogTWVk
aWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oICov
OyB9OwogCQlEM0Q0RTk3MjEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRDRFOTcw
MTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICovOyB9OwogCQlEM0Q0
RTk3MzEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1
NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi87IH07CisJCUQ2MTlBMzA3MTQ0RTAwQkUwMDRC
QzMwMiAvKiBNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3Bl
LmNwcCAqLzsgfTsKKwkJRDYxOUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA2
MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggKi87IH07CiAJCUQ3MEFENjU3MTNF
MTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRl
clJlZ2lvbi5jcHAgKi87IH07CiAJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJS
ZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3
MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCAqLzsgfTsKIAkJRDhCNjE1
MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzA5
MCw2ICsxMzA5Miw4IEBACiAJCUQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5
TWF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TWF0
Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MDEzMEM3Q0ZFMDA3
QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQzRDRFOTcxMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFN1bW1hcnlFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAv
KiBNdXRhdGlvblNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE11dGF0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENjE5QTMw
NjE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNdXRhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUmVnaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTYxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJl
Z2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJSZWdpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8q
IENvb2tpZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTIyLDYgKzIxMTI2LDggQEAKIAkJCQlDNkYw
OEZCOTE0MzBGRThGMDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuY3BwICovLAogCQkJCUM2RjA4
RkJBMTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5oICovLAogCQkJCUM2RjA4RkJC
MTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5pZGwgKi8sCisJCQkJRDYxOUEzMDUx
NDRFMDBCRTAwNEJDMzAyIC8qIE11dGF0aW9uU2NvcGUuY3BwICovLAorCQkJCUQ2MTlBMzA2MTQ0
RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmggKi8sCiAJCQkJQkNGMzRBMzYxMUEyMzFD
RDAwQzcxODA0IC8qIE5hbWVkTm9kZU1hcC5jcHAgKi8sCiAJCQkJQTgxODcyMTgwOTc3RDNDMDAw
NTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oICovLAogCQkJCTg1QUNBOUY5MEE5QjYzMTAwMDY3MUU5
MCAvKiBOYW1lZE5vZGVNYXAuaWRsICovLApAQCAtMjM2MjIsNiArMjM2MjgsNyBAQAogCQkJCUM2
RjA5MDBBMTQzMjdCNjEwMDY4NTg0OSAvKiBNdXRhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NTAzMUI0QTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzZGMDhGQkQxNDMwRkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3Jk
LmggaW4gSGVhZGVycyAqLywKKwkJCQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogTXV0YXRp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMjMwOTc3RDNDMDAwNTgyNkQ5IC8q
IE5hbWVkTm9kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUUwOTc3RDNDMDAwNTgy
NkQ5IC8qIE5hbWVOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjlCNkMwQjc0NzU5
OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjY4Niw2ICsyNjY5Myw3IEBACiAJCQkJQjFBRDRFNjIxM0ExMkEwQjAwODQ2QjI3IC8qIE11dGFi
bGVUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwMzFCNDkwQTQ0RUZDNzAwRjk5
MkUwIC8qIE11dGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZGMDhGQkMxNDMw
RkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ2
MTlBMzA3MTQ0RTAwQkUwMDRCQzMwMiAvKiBNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRjM0QTM3MTFBMjMxQ0QwMEM3MTgwNCAvKiBOYW1lZE5vZGVNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTBCOUI2RDBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZl
WFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuY3BwCmluZGV4IDNlYTQ5OTM2OTM1NzQ5YjEzMTkyYjc2MzQxZDUwOWIxNTM4ZTRjMGMu
LjQxNWFlZWE1YTYzNTI2Mzk3ZjhmZTcwZWU3MzgzY2Y2MzUxYzdhOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbmxpbmVU
ZXh0Qm94LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCkBAIC0xNDEsNiArMTQyLDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6aW5z
ZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNl
CiAgICAgaWYgKHJlZkNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA9PSBuZXdDaGlsZCB8fCByZWZD
aGlsZCA9PSBuZXdDaGlsZCkgLy8gbm90aGluZyB0byBkbwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZSBtdXRhdGlvbih0aGlzKTsKKyNlbmRpZgorCiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBy
ZWZDaGlsZDsKICAgICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGRQcmV2aW91c1NpYmxpbmcgPSByZWZD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkgewpA
QCAtMjcyLDYgKzI3NywxMCBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNz
UmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBD
aGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCisKICAgICBSZWZQ
dHI8Tm9kZT4gcHJldiA9IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBSZWZQdHI8
Tm9kZT4gbmV4dCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpOwogCkBAIC00MDAsNiArNDA5LDEw
IEBAIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWlu
ZXIpCiAgICAgTm9kZVZlY3RvciBjaGlsZHJlbjsKICAgICBjb2xsZWN0Tm9kZXMoY29udGFpbmVy
LCBjaGlsZHJlbik7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxk
TGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oY29udGFpbmVyKTsKKyNlbmRpZgorCiAgICAgZm9y
IChOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9
IGNoaWxkcmVuLmVuZCgpOyBpdCsrKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgp
OwogICAgICAgICAvLyBmaXJlIHJlbW92ZWQgZnJvbSBkb2N1bWVudCBtdXRhdGlvbiBldmVudHMu
CkBAIC02MTEsNiArNjI0LDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFz
c1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvCiAgICAgaWYgKHRh
cmdldHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlz
KTsKKyNlbmRpZgorCiAgICAgLy8gTm93IGFjdHVhbGx5IGFkZCB0aGUgY2hpbGQocmVuKQogICAg
IFJlZlB0cjxOb2RlPiBwcmV2ID0gbGFzdENoaWxkKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsg
KytpdCkgewpAQCAtMTA5NSw2ICsxMTEyLDEzIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJ
bnNlcnRpb25FdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKKyNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5wYXJlbnROb2RlKCkpIHsK
KyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnROb2RlKCkp
OworICAgICAgICBtdXRhdGlvbi5jaGlsZEFkZGVkKGMpOworICAgIH0KKyNlbmRpZgorCiAgICAg
aWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50
OjpET01OT0RFSU5TRVJURURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2
ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2VydGVkRXZl
bnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwogCkBAIC0xMTE2LDYgKzExNDAsMTMgQEAgc3Rh
dGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVm
UHRyPE5vZGU+IGMgPSBjaGlsZDsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hp
bGQtPmRvY3VtZW50KCk7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlm
IChjLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRh
dGlvbihjLT5wYXJlbnROb2RlKCkpOworICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQo
Yyk7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlv
biBldmVudHMKICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5l
clR5cGUoRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkKICAgICAgICAgYy0+ZGlz
cGF0Y2hTY29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5v
ZGVSZW1vdmVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCmluZGV4IGQ2OTliMTkxMTZlODMxZDczZmQ1NTIzYTg0ZWFhMmViNTg2ZmVmNTcuLjMzZjM2
NTU0OWNkNjA1NmExZGVlMzEyODc3YWRkZWE4ZmRiZjQ5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKQEAgLTYyNSw4ICs2MjUsOCBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0
aW9uUmVjb3JkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbQogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25S
ZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7Ci0gICAgZm9yIChWZWN0b3I8
V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2lu
KCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPmVu
cXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYnNlcnZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+ZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25TY29wZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWExMWRlMWMzMThkZmNlMmFmMjM1NzBiZTRkZTcxOGI1
NmIyNjc0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNj
b3BlLmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCisKKyNpbmNsdWRlICJNdXRhdGlvblNjb3BlLmgiCisKKyNp
bmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1
ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0YXRp
Y05vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgeworCisvLyBSZWNvcmRBY2N1bXVsYXRvciBleHBlY3RzIHRoYXQg
YWxsIHJlbW92YWxzIGZyb20gYSBwYXJlbnQgdGFrZSBwbGFjZSBpbiBvcmRlciBhbmQgcHJlY2Vk
ZQorLy8gYW55IGFkZGl0aW9ucy4gSWYgdGhpcyBpcyB2aW9sYXRlZCAoaS5lLiBiZWNhdXNlIG9m
IGNvZGUgY2hhbmdlcyBlbHNld2hlcmUgaW4gV2ViQ29yZSkKKy8vIGl0IHdpbGwgbGlrZWx5IHJl
c3VsdCBpbiBib3RoIChhKSBBU1NFUlRpb25zIGZhaWxpbmcsIGFuZCAoYikgbXV0YXRpb24gcmVj
b3JkcyBiZWluZworLy8gZW5xdWV1ZWQgZm9yIGRlbGl2ZXJ5IGJlZm9yZSB0aGUgb3V0ZXItbW9z
dCBzY29wZSBjbG9zZXMuCitjbGFzcyBSZWNvcmRBY2N1bXVsYXRvciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUmVjb3JkQWNjdW11bGF0b3IpOworcHVibGljOgorICAgIFJlY29yZEFjY3Vt
dWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4m
KTsKKyAgICB+UmVjb3JkQWNjdW11bGF0b3IoKTsKKworICAgIHZvaWQgY2hpbGRBZGRlZChQYXNz
UmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+
KTsKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworCitwcml2YXRlOgorICAgIHZv
aWQgY2xlYXIoKTsKKyAgICBib29sIGlzRW1wdHkoKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX3Rh
cmdldDsKKworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKKyAgICBW
ZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9hZGRlZE5vZGVzOworICAgIFJlZlB0cjxOb2RlPiBtX3By
ZXZpb3VzU2libGluZzsKKyAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKKyAgICBSZWZQ
dHI8Tm9kZT4gbV9sYXN0QWRkZWQ7CisKKyAgICBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZl
cio+IG1fb2JzZXJ2ZXJzOworfTsKKworY2xhc3MgQWNjdW11bGF0aW9uTWFuYWdlciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQWNjdW11bGF0aW9uTWFuYWdlcik7CitwdWJsaWM6CisgICAg
fkFjY3VtdWxhdGlvbk1hbmFnZXIoKTsKKworICAgIHN0YXRpYyBBY2N1bXVsYXRpb25NYW5hZ2Vy
KiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSopOwor
ICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqKTsKKworICAgIHZvaWQgY2hpbGRB
ZGRlZChOb2RlKiwgUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQo
Tm9kZSosIFBhc3NSZWZQdHI8Tm9kZT4pOworCitwcml2YXRlOgorICAgIEFjY3VtdWxhdGlvbk1h
bmFnZXIoKTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICB0eXBlZGVmIEhh
c2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBTY29waW5nTGV2ZWxNYXA7CisgICAgU2NvcGluZ0xldmVs
TWFwIG1fc2NvcGluZ0xldmVsczsKKyAgICBIYXNoTWFwPE5vZGUqLCBSZWNvcmRBY2N1bXVsYXRv
cio+IG1fYWNjdW11bGF0aW9uczsKKworICAgIHN0YXRpYyBBY2N1bXVsYXRpb25NYW5hZ2VyKiBz
X2luc3RhbmNlOworfTsKKworUmVjb3JkQWNjdW11bGF0b3I6OlJlY29yZEFjY3VtdWxhdG9yKFBh
c3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+JiBv
YnNlcnZlcnMpCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCit7CisgICAgbV9vYnNlcnZlcnMuc3dh
cChvYnNlcnZlcnMpOworICAgIGNsZWFyKCk7Cit9CisKK1JlY29yZEFjY3VtdWxhdG9yOjp+UmVj
b3JkQWNjdW11bGF0b3IoKQoreworICAgIEFTU0VSVChpc0VtcHR5KCkpOworfQorCit2b2lkIFJl
Y29yZEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQpCit7
CisgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CisKKyAgICAvLyBBZGRpdGlvbnMg
bXVzdCBiZSBpbi1vcmRlci4KKyAgICBpZiAoIWlzRW1wdHkoKSAmJiAobV9sYXN0QWRkZWQuZ2V0
KCkgIT0gY2hpbGQtPnByZXZpb3VzU2libGluZygpIHx8IG1fbmV4dFNpYmxpbmcgIT0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpKQorICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKKworICAg
IGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wcmV2aW91c1NpYmxpbmcgPSBjaGlsZC0+cHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKTsKKyAgICB9CisKKyAgICBtX2FkZGVkTm9kZXMuYXBwZW5kKGNoaWxkKTsKKyAgICBtX2xh
c3RBZGRlZCA9IGNoaWxkOworfQorCit2b2lkIFJlY29yZEFjY3VtdWxhdG9yOjp3aWxsUmVtb3Zl
Q2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3sKKyAgICBSZWZQdHI8Tm9kZT4gY2hp
bGQgPSBwcnBDaGlsZDsKKyAgICBBU1NFUlQobV9hZGRlZE5vZGVzLmlzRW1wdHkoKSk7IC8vIFJl
bW92YWxzIG11c3QgcHJlY2VkZSBhZGRpdGlvbnMuIFNlZSBjb21tZW50IG9uIHRoZSBjbGFzcy4K
KworICAgIGlmICghbV9hZGRlZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgZW5xdWV1ZU11dGF0
aW9uUmVjb3JkKCk7CisKKyAgICBBU1NFUlQoaXNFbXB0eSgpIHx8IG1fbmV4dFNpYmxpbmcuZ2V0
KCkgPT0gY2hpbGQpOyAvLyBSZW1vdmFscyBtdXN0IGJlIGNvbnRpbnVvdXMgYW5kIGluLW9yZGVy
LgorICAgIGlmICghaXNFbXB0eSgpICYmIG1fbmV4dFNpYmxpbmcuZ2V0KCkgIT0gY2hpbGQpCisg
ICAgICAgIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworCisgICAgaWYgKGlzRW1wdHkoKSkgewor
ICAgICAgICBtX3ByZXZpb3VzU2libGluZyA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAg
ICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICBtX2xh
c3RBZGRlZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOworCisgICAgbV9yZW1vdmVkTm9k
ZXMuYXBwZW5kKGNoaWxkKTsKK30KKwordm9pZCBSZWNvcmRBY2N1bXVsYXRvcjo6ZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKCkKK3sKKyAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgaWYgKGlzRW1w
dHkoKSkgeworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVD
aGlsZExpc3QoCisgICAgICAgICAgICBtX3RhcmdldCwgU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG1f
YWRkZWROb2RlcyksIFN0YXRpY05vZGVMaXN0OjphZG9wdChtX3JlbW92ZWROb2RlcyksIG1fcHJl
dmlvdXNTaWJsaW5nLCBtX25leHRTaWJsaW5nKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9vYnNlcnZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fb2JzZXJ2ZXJzW2ldLT5lbnF1
ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOworCisgICAgY2xlYXIoKTsKK30KKwordm9pZCBS
ZWNvcmRBY2N1bXVsYXRvcjo6Y2xlYXIoKQoreworICAgIGlmICghbV9yZW1vdmVkTm9kZXMuaXNF
bXB0eSgpKQorICAgICAgICBtX3JlbW92ZWROb2Rlcy5jbGVhcigpOworICAgIGlmICghbV9hZGRl
ZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hZGRlZE5vZGVzLmNsZWFyKCk7CisgICAgbV9w
cmV2aW91c1NpYmxpbmcgPSAwOworICAgIG1fbmV4dFNpYmxpbmcgPSAwOworICAgIG1fbGFzdEFk
ZGVkID0gMDsKK30KKworYm9vbCBSZWNvcmRBY2N1bXVsYXRvcjo6aXNFbXB0eSgpCit7CisgICAg
cmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9kZXMuaXNFbXB0eSgp
OworfQorCitBY2N1bXVsYXRpb25NYW5hZ2VyKiBBY2N1bXVsYXRpb25NYW5hZ2VyOjpzX2luc3Rh
bmNlID0gMDsKKworQWNjdW11bGF0aW9uTWFuYWdlcjo6QWNjdW11bGF0aW9uTWFuYWdlcigpCit7
Cit9CisKK0FjY3VtdWxhdGlvbk1hbmFnZXI6On5BY2N1bXVsYXRpb25NYW5hZ2VyKCkKK3sKKyAg
ICBBU1NFUlQobV9zY29waW5nTGV2ZWxzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYWNjdW11
bGF0aW9ucy5pc0VtcHR5KCkpOworfQorCit2b2lkIEFjY3VtdWxhdGlvbk1hbmFnZXI6OmluaXRp
YWxpemUoKQoreworICAgIEFTU0VSVCghc19pbnN0YW5jZSk7CisgICAgc19pbnN0YW5jZSA9IGFk
b3B0UHRyKG5ldyBBY2N1bXVsYXRpb25NYW5hZ2VyKS5sZWFrUHRyKCk7Cit9CisKKworQWNjdW11
bGF0aW9uTWFuYWdlciogQWNjdW11bGF0aW9uTWFuYWdlcjo6aW5zdGFuY2UoKQoreworICAgIGlm
ICghc19pbnN0YW5jZSkKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgcmV0dXJuIHNfaW5z
dGFuY2U7Cit9CisKK3ZvaWQgQWNjdW11bGF0aW9uTWFuYWdlcjo6Y2hpbGRBZGRlZChOb2RlKiB0
YXJnZXQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgSGFzaE1hcDxOb2RlKiwgUmVj
b3JkQWNjdW11bGF0b3IqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRh
cmdldCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKKworICAg
IFJlY29yZEFjY3VtdWxhdG9yKiByZWNvcmQgPSBpdGVyLT5zZWNvbmQ7CisgICAgaWYgKHJlY29y
ZCkKKyAgICAgICAgcmVjb3JkLT5jaGlsZEFkZGVkKGNoaWxkKTsKK30KKwordm9pZCBBY2N1bXVs
YXRpb25NYW5hZ2VyOjp3aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0LCBQYXNzUmVmUHRyPE5v
ZGU+IGNoaWxkKQoreworICAgIEhhc2hNYXA8Tm9kZSosIFJlY29yZEFjY3VtdWxhdG9yKj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOworICAgIEFTU0VSVChp
dGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7CisKKyAgICBSZWNvcmRBY2N1bXVsYXRvciog
cmVjb3JkID0gaXRlci0+c2Vjb25kOworICAgIGlmIChyZWNvcmQpCisgICAgICAgIHJlY29yZC0+
d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKK30KKwordm9pZCBBY2N1bXVsYXRpb25NYW5hZ2VyOjpp
bmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQoreworICAgIHBhaXI8U2NvcGluZ0xl
dmVsTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9zY29waW5nTGV2ZWxzLmFkZCh0YXJn
ZXQsIDEpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICArKyhyZXN1bHQuZmly
c3QtPnNlY29uZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViS2l0
TXV0YXRpb25PYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICB0YXJnZXQtPnJlZ2lzdGVyZWRNdXRh
dGlvbk9ic2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNo
aWxkTGlzdCk7CisgICAgaWYgKG9ic2VydmVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fYWNjdW11
bGF0aW9ucy5zZXQodGFyZ2V0LCAwKTsKKyAgICBlbHNlCisgICAgICAgIG1fYWNjdW11bGF0aW9u
cy5zZXQodGFyZ2V0LCBuZXcgUmVjb3JkQWNjdW11bGF0b3IodGFyZ2V0LCBvYnNlcnZlcnMpKTsK
K30KKwordm9pZCBBY2N1bXVsYXRpb25NYW5hZ2VyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9k
ZSogdGFyZ2V0KQoreworICAgIFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2Nv
cGluZ0xldmVscy5maW5kKHRhcmdldCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2
ZWxzLmVuZCgpKTsKKworICAgIC0tKGl0ZXItPnNlY29uZCk7CisgICAgaWYgKGl0ZXItPnNlY29u
ZCA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIE93blB0cjxSZWNvcmRBY2N1bXVsYXRvcj4g
cmVjb3JkID0gYWRvcHRQdHIobV9hY2N1bXVsYXRpb25zLnRha2UodGFyZ2V0KSk7CisgICAgbV9z
Y29waW5nTGV2ZWxzLnJlbW92ZShpdGVyKTsKKworICAgIGlmIChyZWNvcmQpCisgICAgICAgIHJl
Y29yZC0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK0No
aWxkTGlzdE11dGF0aW9uU2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoUGFzc1JlZlB0cjxO
b2RlPiB0YXJnZXQpCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCit7CisgICAgQWNjdW11bGF0aW9u
TWFuYWdlcjo6aW5zdGFuY2UoKS0+aW5jcmVtZW50U2NvcGluZ0xldmVsKG1fdGFyZ2V0LmdldCgp
KTsKK30KKworQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUo
KQoreworICAgIEFjY3VtdWxhdGlvbk1hbmFnZXI6Omluc3RhbmNlKCktPmRlY3JlbWVudFNjb3Bp
bmdMZXZlbChtX3RhcmdldC5nZXQoKSk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZTo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQoreworICAgIEFjY3VtdWxhdGlv
bk1hbmFnZXI6Omluc3RhbmNlKCktPmNoaWxkQWRkZWQobV90YXJnZXQuZ2V0KCksIGNoaWxkKTsK
K30KKwordm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQoUGFzc1Jl
ZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBBY2N1bXVsYXRpb25NYW5hZ2VyOjppbnN0YW5jZSgp
LT53aWxsUmVtb3ZlQ2hpbGQobV90YXJnZXQuZ2V0KCksIGNoaWxkKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblNjb3BlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25TY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNjA4NTZjODNiNmRiYTI2Mzhj
ZDMwN2U3NWQ3N2IyNGFiNjRjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25TY29wZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE11dGF0aW9uU2NvcGVf
aAorI2RlZmluZSBNdXRhdGlvblNjb3BlX2gKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBOb2RlOworCitjbGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3BlKTsKK3B1YmxpYzoKKyAgICBD
aGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKKyAgICB+Q2hp
bGRMaXN0TXV0YXRpb25TY29wZSgpOworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NSZWZQdHI8
Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4pOworCitw
cml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisKKyNlbmRp
ZiAvLyBNdXRhdGlvblNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAxZjg1ZmQ5MTJlYWRmZDVh
NzMxNTlkNmRlZGU5MzBlNjQ4NDljOTQwLi5jNjZkZGNjNzg0ZDIyZWEyN2IzNWNiZTg4YTQ4Yzgz
ODE0NTVhNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2
ZW50LmgiCisjaW5jbHVkZSAiTXV0YXRpb25TY29wZS5oIgogI2luY2x1ZGUgIk5hbWVOb2RlTGlz
dC5oIgogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5o
IgpAQCAtMjEyNCw2ICsyMTI1LDkgQEAgdm9pZCBOb2RlOjpzZXRUZXh0Q29udGVudChjb25zdCBT
dHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBjYXNlIERPQ1VNRU5UX0ZS
QUdNRU5UX05PREU6CiAgICAgICAgIGNhc2UgU0hBRE9XX1JPT1RfTk9ERTogewogICAgICAgICAg
ICAgQ29udGFpbmVyTm9kZSogY29udGFpbmVyID0gdG9Db250YWluZXJOb2RlKHRoaXMpOworI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgICAgICAgICBDaGlsZExpc3RNdXRhdGlv
blNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCiAgICAgICAgICAgICBjb250YWluZXItPnJl
bW92ZUNoaWxkcmVuKCk7CiAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5v
ZGUodGV4dCksIGVjKTsKQEAgLTI2OTQsOSArMjY5OCw5IEBAIHZvaWQgTm9kZTo6cmVnaXN0ZXJl
ZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4m
IG9iCiAgICAgaWYgKCFvYnNlcnZlckVudHJpZXMgfHwgb2JzZXJ2ZXJFbnRyaWVzLT5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJF
bnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlckVudHJpZXMtPmJlZ2luKCk7IGl0ZXIgIT0g
b2JzZXJ2ZXJFbnRyaWVzLT5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5tYXRj
aGVzKHR5cGUpKQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChpdGVyLT5vYnNlcnZlci5n
ZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlckVudHJpZXMtPnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmICgoKm9ic2VydmVyRW50cmllcylbaV0ubWF0Y2hlcyh0eXBl
KSkKKyAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoKCpvYnNlcnZlckVudHJpZXMpW2ldLm9i
c2VydmVyLmdldCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA3ZDczNmFlN2JhYzY0YzQ1ODhmY2JhMmZjM2QzYjc3
NTI5N2JkZTE0Li44M2YxNTk5MGVhMmJlY2EzMzliYjBhNzNjYzI5NjliYTRkZjI5ZmE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCkBAIC02NSw4
ICs2NSw4IEBAIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2Rl
LCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zCiAKIHZvaWQgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgZm9yIChWZWN0b3I8Tm9kZSo+OjppdGVyYXRv
ciBpdGVyID0gbV9vYnNlcnZlZE5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gIG1fb2JzZXJ2ZWROb2Rl
cy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT51bnJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcih0aGlzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb2JzZXJ2ZWROb2Rlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlZE5vZGVzW2ldLT51bnJlZ2lzdGVyTXV0YXRp
b25PYnNlcnZlcih0aGlzKTsKIAogICAgIG1fb2JzZXJ2ZWROb2Rlcy5jbGVhcigpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA1OTEyZGEwN2Q3NmE0OTJjNmQ3MzI4OGEx
NDM0ZGQxMzFlMzE5ODA0Li41ZDQwY2Q1N2NlNTZiNzg3ZGEzNWYyOTljOTk3MjBjM2Y5MzkzNmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNs
dWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uU2Nv
cGUuaCIKICNpbmNsdWRlICJSZW5kZXJXb3JkQnJlYWsuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTMxNyw2ICszMTgsMTAgQEAg
c3RhdGljIGlubGluZSBib29sIGhhc09uZVRleHRDaGlsZChDb250YWluZXJOb2RlKiBub2RlKQog
CiBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoSFRNTEVsZW1lbnQqIGVs
ZW1lbnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0
TXV0YXRpb25TY29wZSBtdXRhdGlvbihlbGVtZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKCFmcmFn
bWVudC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPnJlbW92ZUNoaWxkcmVuKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTMzOCw2ICszNDMsMTAgQEAgc3RhdGljIHZvaWQgcmVwbGFj
ZUNoaWxkcmVuV2l0aEZyYWdtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPERv
Y3VtZW4KIAogc3RhdGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aFRleHQoSFRNTEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11
dGF0aW9uKGVsZW1lbnQpOworI2VuZGlmCisKICAgICBpZiAoaGFzT25lVGV4dENoaWxkKGVsZW1l
bnQpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50LT5maXJzdENoaWxkKCkp
LT5zZXREYXRhKHRleHQsIGVjKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJjODM5OGUzMWE3
ZjY5YzI2MTBlMjJhYWM1NzJmNmQwNGU3NTYzNDguLjQyNWU3Yzc1ZDFiODc4OTNhY2VmNmEzZjdk
ZDQ3ZmY4ZTM1YTY2ZmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMC0xOCAgUmFmYWVs
IFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9i
c2VydmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgY2hp
bGRMaXN0IGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY4OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbDoKKyAgICAgICAg
KiBmYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC5odG1sOiBBZGRlZC4KKwog
MjAxMS0xMC0xOSAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
QWRkIG5ldyByZW5kZXJlciBmb3IgU1ZHUmVjdEVsZW1lbnQuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKaW5k
ZXggOTg2OWZlMmVlNWIwMmMwZTc3NjhkODFhMzMyYWFmZDM4NjZlY2M4MS4uMmY4NTk4ZGZmN2Ew
MjBlZTNjNzI3ZTllMzdmOTg2YTZhMjgxODY5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApAQCAtMjMs
NyArMjMsNyBAQCBQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAog
VGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImF0dHJpYnV0ZXMiIGRv
ZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGF0dHJpYnV0ZSBjaGFuZ2VzLgogUEFTUyBt
dXRhdGlvbnMgaXMgbnVsbAogCi1UZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5v
ZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRo
ZSBvcHRpb25zLgorVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGgg
dGhlIHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25z
LgogUEFTUyBjYWxscyBpcyAxCiBQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQogUEFTUyBtdXRh
dGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211
dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCmluZGV4IDY0NmUzOTMxZDE0NTBjMWRjZDRh
Y2U0YTdlYmU1MTAzZDg4ZWIzYmUuLjg1ZWM2Nzc0ZDZmNWM3ZmQxYmE1YjlkY2JhN2JhM2JmZjgz
NTAwNjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRy
aWJ1dGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJp
YnV0ZXMuaHRtbApAQCAtMTIsOCArMTIsNyBAQAogPHNjcmlwdD4KIAogd2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOwotdmFyIG11dGF0aW9uczsKLXZhciBtdXRhdGlvbnMyOwordmFyIG11dGF0
aW9ucywgbXV0YXRpb25zMjsKIHZhciBjYWxsczsKIAogZnVuY3Rpb24gdGVzdEJhc2ljKCkgewpA
QCAtMTA5LDcgKzEwOCw3IEBAIGZ1bmN0aW9uIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbigpIHsK
ICAgICB2YXIgb2JzZXJ2ZXI7CiAKICAgICBmdW5jdGlvbiBzdGFydCgpIHsKLSAgICAgICAgZGVi
dWcoJ1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1l
IG9ic2VydmluZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7Cisg
ICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0
aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlv
bnMuJyk7CiAgICAgCiAJCWNhbGxzID0gMDsKICAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBhZDczN2YwNzEyZTYzYTZjM2I0MmMxYjIwMjNhZWUw
MTllMGY4MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1jaGlsZExpc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOTMgQEAKK1Rlc3QgV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2YgY2hpbGRMaXN0IG9ic2Vy
dmF0aW9uLgorLi4uY2FuIGNoaWxkTGlzdCBjaGFuZ2VzIGJlIG9ic2VydmVkIGF0IGFsbAorUEFT
UyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxk
TGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0
YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKKy4uLm9ic2VydmVyLmRpc2Nv
bm5lY3QoKSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGRlbGl2ZXJ5IG9mIG11dGF0aW9ucy4KK1BB
U1MgbXV0YXRpb25zIGlzIG51bGwKKy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25uZWN0IHdv
cmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgor
UEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0u
cmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNb
MF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImNoaWxkTGlzdCIK
K1BBU1MgbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlv
bnNbMV0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYyCisKK1Rlc3RpbmcgdGhhdCBvYnNl
cnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJjaGlsZExpc3QiIGRvZXMgbm90IHJlc3VsdCBpbiBo
ZWFyaW5nIGFib3V0IGNoaWxkTGlzdCBjaGFuZ2VzLgorUEFTUyBtdXRhdGlvbnMgaXMgbnVsbAor
CitUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBv
YnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuCitQQVNTIGNh
bGxzIGlzIDEKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50
eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3RpbmcgdGhh
dCBtdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBub2RlIGFu
ZCBib3RoIHJlY2VpdmUgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BB
U1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zMi5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKKworVGVzdGlu
ZyB0aGF0IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1bHQgaW4gYSBzaW5nbGUg
Y2hpbGRMaXN0IG11dGF0aW9uLgorLi4uaW5uZXJIVE1MCitQQVNTIG11dGF0aW9ucy5sZW5ndGgg
aXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlv
bnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rl
c1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0gaXMgYWRk
ZWREaXYyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzJdIGlzIGFkZGVkRGl2MworUEFT
UyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1sw
XS5yZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlc1sxXSBpcyByZW1vdmVkRGl2MgorLi4uaW5uZXJUZXh0CitQQVNTIG11dGF0aW9ucy5s
ZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBt
dXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVt
b3ZlZE5vZGVzLmxlbmd0aCBpcyAzCisKK1Rlc3RpbmcgdGhhdCByZXBsYWNlQ2hpbGQgcmVzdWx0
cyBpbiBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuCisuLi5pbm5lckhUTUwKK1BBU1MgbXV0
YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3Qi
CitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9u
c1swXS5hZGRlZE5vZGVzWzBdIGlzIGFkZGVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3Zl
ZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0gaXMg
cmVtb3ZlZERpdjEKKy4uLmlubmVyVGV4dAorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BB
U1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFk
ZGVkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMg
YWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzFdIGlzIGFkZGVkRGl2Mgor
UEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKKworVGVzdGluZyB0aGF0IGluc2Vy
dEJlZm9yZSByZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4KKy4uLmlubmVy
VGV4dAorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUg
aXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDIK
K1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0
aW9uc1swXS5hZGRlZE5vZGVzWzFdIGlzIGFkZGVkRGl2MgorUEFTUyBtdXRhdGlvbnNbMF0ucmVt
b3ZlZE5vZGVzLmxlbmd0aCBpcyAwCisKK1Rlc3RpbmcgdGhhdCBhcHBlbmRDaGlsZCByZXN1bHRz
IGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4KKy4uLmlubmVyVGV4dAorUEFTUyBtdXRh
dGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIK
K1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25z
WzBdLmFkZGVkTm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5v
ZGVzWzFdIGlzIGFkZGVkRGl2MgorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0
aCBpcyAwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRM
aXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDE2ZWNiZDhlMzBkYmFmOWE3OTYwYmIyMGMyYzI5NDZiMmViMDRmYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGls
ZExpc3QuaHRtbApAQCAtMCwwICsxLDQwNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8dGl0bGU+PC90aXRsZT4KKzwv
aGVhZD4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0PgorCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit2YXIgbXV0
YXRpb25zLCBtdXRhdGlvbnMyOwordmFyIGNhbGxzOwordmFyIGRpdiwgcmVtb3ZlZERpdjEsIHJl
bW92ZWREaXYyLCBhZGRlZERpdjEsIGFkZGVkRGl2MiwgYWRkZWREaXYzOworCitmdW5jdGlvbiB0
ZXN0QmFzaWMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBj
aGlsZExpc3Qgb2JzZXJ2YXRpb24uJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAg
ICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2Vy
dmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAg
ICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2
ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRp
bWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIGRlYnVnKCcuLi5jYW4gY2hp
bGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsJyk7CisKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5h
ZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51
bGw7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgcmVtb3ZlZERpdjEg
PSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAg
ICBzZXRUaW1lb3V0KGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVsdGlwbGUsIDApOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVsdGlwbGUoKSB7
CisgICAgICAgIGRlYnVnKCcuLi5vYnNlcnZlci5kaXNjb25uZWN0KCkgc2hvdWxkIHByZXZlbnQg
ZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxk
TGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBkaXYucmVtb3ZlQ2hpbGQoZGl2
LmZpcnN0Q2hpbGQpOworICAgICAgICByZW1vdmVkRGl2MiA9IGRpdi5yZW1vdmVDaGlsZChkaXYu
Zmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIg
ZGlzY29ubmVjdCB3b3JrcyB3aXRoIHRoZSBzYW1lIG9ic2VydmVyLicpOworCisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MicpOworICAg
ICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAg
cnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0
V3JvbmdUeXBlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVu
Y3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgb2JzZXJ2aW5nIHdp
dGhvdXQgc3BlY2lmeWluZyAiY2hpbGRMaXN0IiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBh
Ym91dCBjaGlsZExpc3QgY2hhbmdlcy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2Jz
ZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAg
ICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNl
cnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAg
ICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAg
ICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNo
KCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywgJ251bGwnKTsKKyAgICAgICAgb2Jz
ZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRU
ZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxl
UmVnaXN0cmF0aW9uKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2
aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBv
ZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7CisKKyAgICAgICAgY2FsbHMgPSAwOworICAgICAg
ICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihm
dW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICAgICAgY2Fs
bHMrKzsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hp
bGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5v
YnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRpbWVvdXQoY2hl
Y2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0Rp
c2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJlKCdjYWxscycsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIG11dGF0aW9u
cyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1
ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYs
IHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAg
ZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZU9ic2VydmVycygpIHsKKyAgICB2YXIgZGl2Owor
ICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgb2JzZXJ2ZXIyOworCisgICAgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgbXVsdGlwbGUgb2JzZXJ2ZXJzIGNh
biBiZSByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gbm9kZSBhbmQgYm90aCByZWNlaXZlIG11dGF0aW9u
cy4nKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyMiA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
KGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9uczIgPSBtOworICAgICAgICB9KTsK
KyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAg
ICAgICBvYnNlcnZlcjIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAg
ICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAg
ICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkg
eworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zMlswXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5l
Y3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycp
OworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RJbm5lckhUTUxBbmRJbm5lclRleHQoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2
YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rl
c3RpbmcgdGhhdCBpbm5lclRleHQgYW5kIGlubmVySFRNTCBhbHdheXMgcmVzdWx0IGluIGEgc2lu
Z2xlIGNoaWxkTGlzdCBtdXRhdGlvbi4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2
LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+PGRpdj5CYXI8L2Rpdj4nOworICAgICAgICBy
ZW1vdmVkRGl2MSA9IGRpdi5maXJzdENoaWxkOworICAgICAgICByZW1vdmVkRGl2MiA9IHJlbW92
ZWREaXYxLm5leHRTaWJsaW5nOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAg
ICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1
ZSB9KTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICdmb288aW1nIHNyYz0iYmFyLnBuZyI+PHA+
QmF6PC9wPic7CisgICAgICAgIGFkZGVkRGl2MSA9IGRpdi5jaGlsZE5vZGVzWzBdOworICAgICAg
ICBhZGRlZERpdjIgPSBkaXYuY2hpbGROb2Rlc1sxXTsKKyAgICAgICAgYWRkZWREaXYzID0gZGl2
LmNoaWxkTm9kZXNbMl07CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tJbm5lckhUTUwsIDApOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrSW5uZXJIVE1MKCkgeworICAgICAgICBkZWJ1Zygn
Li4uaW5uZXJIVE1MJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAn
MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcz
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdhZGRl
ZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzFdJywg
J2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNb
Ml0nLCAnYWRkZWREaXYzJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3Zl
ZE5vZGVzLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVt
b3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0ucmVtb3ZlZE5vZGVzWzFdJywgJ3JlbW92ZWREaXYyJyk7CisKKyAgICAgICAgbXV0YXRp
b25zID0gbnVsbDsKKyAgICAgICAgZGl2LmlubmVyVGV4dCA9ICdmb28nOworICAgICAgICBzZXRU
aW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAg
ICAgICBkZWJ1ZygnLi4uaW5uZXJUZXh0Jyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
Lmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5v
ZGVzLmxlbmd0aCcsICczJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAg
ICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0
KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZXBsYWNlQ2hpbGQoKSB7CisgICAgdmFyIGRpdjsKKyAg
ICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGZyYWdtZW50OworCisgICAgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmVwbGFjZUNoaWxkIHJlc3VsdHMgaW4g
bWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51
bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAg
ICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj48ZGl2PkJhcjwvZGl2Pic7CisgICAg
ICAgIHJlbW92ZWREaXYxID0gZGl2LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBu
ZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRh
dGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwg
eyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGFkZGVkRGl2MSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYucmVwbGFjZUNoaWxkKGFkZGVkRGl2MSwgZGl2
LmZpcnN0Q2hpbGQpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrUmVwbGFjZVdpdGhOb2RlLCAw
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1JlcGxhY2VXaXRoTm9kZSgpIHsKKyAgICAg
ICAgZGVidWcoJy4uLnNpbXBsZSByZXBsYWNlIGNoaWxkJyk7CisKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5h
ZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKworICAgICAgICBtdXRh
dGlvbnMgPSBudWxsOworICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKTsKKyAgICAgICAgYWRkZWREaXYxID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBhZGRlZERpdjIgPSBmcmFnbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHJl
bW92ZWREaXYxID0gZGl2LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgZGl2LnJlcGxhY2VDaGlsZChm
cmFnbWVudCwgcmVtb3ZlZERpdjEpOworCisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5yZXBs
YWNlIHdpdGggRG9jdW1lbnRGcmFnbWVudCcpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywg
JyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rl
cy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9k
ZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRk
ZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKworICAgICAgICBvYnNlcnZl
ci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3Qo
KTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0SW5zZXJ0QmVmb3Jl
KCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworICAgIHZhciBmcmFnbWVudDsK
KworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGlu
c2VydEJlZm9yZSByZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4nKTsKKwor
ICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+
JzsKKyAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7
CisgICAgICAgIGFkZGVkRGl2MSA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgYWRkZWREaXYyID0gZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIG9ic2VydmVyID0g
bmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0
YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYs
IHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuaW5zZXJ0QmVmb3JlKGZyYWdtZW50
LCBkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9
CisKKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
Lmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rl
c1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRl
ZE5vZGVzWzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMCcpOworCisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5l
Y3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0K
KworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBcHBlbmRDaGlsZCgpIHsKKyAgICB2
YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgZnJhZ21lbnQ7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBhcHBlbmRDaGlsZCBy
ZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4nKTsKKworICAgICAgICBtdXRh
dGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+JzsKKyAgICAgICAg
ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIGFk
ZGVkRGl2MSA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKTsKKyAgICAgICAgYWRkZWREaXYyID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0
OiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAgICBz
ZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgewor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywgJ2FkZGVkRGl2MScpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0nLCAnYWRkZWREaXYyJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcwJyk7CisK
KyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwordmFyIHRlc3Rz
ID0gW3Rlc3RCYXNpYywgdGVzdFdyb25nVHlwZSwgdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uLCB0
ZXN0TXVsdGlwbGVPYnNlcnZlcnMsIHRlc3RJbm5lckhUTUxBbmRJbm5lclRleHQsIHRlc3RSZXBs
YWNlQ2hpbGQsIHRlc3RJbnNlcnRCZWZvcmUsIHRlc3RBcHBlbmRDaGlsZF07Cit2YXIgdGVzdElu
ZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5leHRUZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXgg
PCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3RzW3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UK
KyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Rlc2NyaXB0aW9uKCdUZXN0IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBvbiBhdHRyaWJ1dGVzLicpOworCitpZiAoIXdpbmRvdy5X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKQorICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJl
cyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKScpOworZWxzZQorICAgIHJ1bk5leHRUZXN0KCk7
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111864</attachid>
            <date>2011-10-20 16:04:59 -0700</date>
            <delta_ts>2011-10-21 11:08:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111020160458.patch</filename>
            <type>text/plain</type>
            <size>51641</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgwMzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjYmFiZTI1Y2NjYjlhNTU4
MjBmMGZjMzJmZjMwOTNjNTQ5MjY4ZTc3Li40MzgwYTEyOTg2NGRmYWE0MjY3Mjc0ZGQzZGVkNzBl
NTFiMDkxYmZiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Db250
YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6Omluc2VydEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0
Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlw
ZSk6CisgICAgICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICog
aHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5X
aXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQp
OgorCiAyMDExLTEwLTIwICBSYXltb25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBJbXBsZW1lbnQgU1NFIGRlbm9ybWFsIGRpc2FibGVyIGZvciB3aW5kb3dzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBhMmZjNWJiMGUwMDNiMjFiNzg1YzM2M2IwM2ZjZjc2MzYxYzJjODljLi45
MDc1MzgwYTlkZjgzMDg5YTUyNTc1YzE1NDQ2NGNhYjM4NWFmNWFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtNTEzLDYgKzUxMyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vQ0RB
VEFTZWN0aW9uLmNwcAogICAgIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcAogICAgIGRvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmNwcAorICAgIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcAogICAg
IGRvbS9DaGlsZE5vZGVMaXN0LmNwcAogICAgIGRvbS9DbGFzc05vZGVMaXN0LmNwcAogICAgIGRv
bS9DbGllbnRSZWN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZjFiZmEy
NmU1NTc3ZmJlMDBmNWQzMGNhZjRmZGY1MzRkZDkxM2RjZC4uNjc3ZDE4NzE0MTk0NDE4NzcxMzM3
YmVlZWMzNTQ0NThjYzRiNzAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0x
MTIwLDYgKzExMjAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0
b25zLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaCBcCisJ
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9k
b20vQ2hpbGROb2RlTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0
LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNzc5NDNkODc3NzFjMTJiNzc2YTIyYWYyZTQ1NDdiYWE1MGYzZGY2OC4uN2M0NDli
OWJhYWE4OTU3ZGFmZDNkZTc2YjNjYTliZmMxMDQzNzljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
NTEyNSw2ICs1MTI1LDggQEAKICAgICAgICAgICAgICdkb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVj
bGFyYXRpb24uY3BwJywKICAgICAgICAgICAgICdkb20vQ2hhcmFjdGVyRGF0YS5jcHAnLAogICAg
ICAgICAgICAgJ2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCcsCisgICAgICAgICAgICAnZG9t
L0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwJywKKyAgICAgICAgICAgICdkb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5oJywKICAgICAgICAgICAgICdkb20vQ2hpbGROb2RlTGlzdC5jcHAnLAog
ICAgICAgICAgICAgJ2RvbS9DaGlsZE5vZGVMaXN0LmgnLAogICAgICAgICAgICAgJ2RvbS9DbGFz
c05vZGVMaXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDY1YzIzNGNlNmQ0NDRmNTJjYTVhY2Zj
MWU3NDY1ZTg2NjQ1ZjYzZTUuLjBiMmNmMWI1ZDA1OTRmYjY1YmU1ZmVjYThkZGU3MDZkNjA5MDJj
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCkBAIC00NjUsNiArNDY1LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
ZG9tL0NEQVRBU2VjdGlvbi5jcHAgXAogICAgIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcCBcCiAgICAg
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIFwKKyAgICBkb20vQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZS5jcHAgXAogICAgIGRvbS9DaGlsZE5vZGVMaXN0LmNwcCBcCiAgICAgZG9tL0NsYXNzTm9k
ZUxpc3QuY3BwIFwKICAgICBkb20vQ2xpZW50UmVjdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmM2QwNTk4NmU3NzJiZTBlMjE0ZGMz
MjU5NTcxODJjZDQzNDM0YWFlLi4wZjI5NzExMWQ1YzFkYzk0NzgyNzkwMDM1M2Q4NDk1NTE1MmE0
M2JiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpA
QCAtNDM4NjUsNiArNDM4NjUsNjIgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxDaGVja2Vk
UmFkaW9CdXR0b25zLmgiCiAJCQkJPgogCQkJPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKyAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxDaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmNwcCIKKyAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0
aW9uCisgICAgICAgICAgICAgICAgICAgIE5hbWU9IkRlYnVnfFdpbjMyIgorICAgICAgICAgICAg
ICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgPgor
ICAgICAgICAgICAgICAgICAgICA8VG9vbAorICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAg
ICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlv
bgorICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlfFdpbjMyIgorICAgICAgICAgICAg
ICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgPgor
ICAgICAgICAgICAgICAgICAgICA8VG9vbAorICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAg
ICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlv
bgorICAgICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisg
ICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAg
ICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAg
ICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAvPgorICAg
ICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVD
b25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIE5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KyAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICA8VG9vbAorICAgICAg
ICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAg
ICAgICAgLz4KKyAgICAgICAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAg
ICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1
Z19BbGx8V2luMzIiCisgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAg
ICAgICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAg
ICAgICAgICAvPgorICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAg
ICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIE5hbWU9IlBy
b2R1Y3Rpb258V2luMzIiCisgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisg
ICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAg
ICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAg
ICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgIFJlbGF0
aXZlUGF0aD0iLi5cZG9tXENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCIKKyAgICAgICAgICAgICAg
ICA+CisgICAgICAgICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZG9tXENoaWxkTm9kZUxpc3QuY3BwIgogCQkJCT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNTRiYzBhNzIyNDAxODhjNjExMTI2
Njk5MGJlMGUwNTA5ZWU3ZWU4Li4wMWEzOTEyNmI2ZDM3ZjUzODc3YWQ4NTI5NTBkYjFlNTRlODc1
OTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC01ODA1LDYgKzU4MDUsOCBAQAogCQlEM0FBMTBGNDEyM0E5OEFBMDA5MjE1MkIg
LyogTWVkaWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hl
ci5oICovOyB9OwogCQlEM0Q0RTk3MjEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQz
RDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICovOyB9Owog
CQlEM0Q0RTk3MzEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MTEzMEM3Q0ZF
MDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi87IH07CisJCUQ2MTlBMzA3MTQ0RTAw
QkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAv
KiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCAqLzsgfTsKKwkJRDYxOUEzMDgxNDRFMDBCRTAw
NEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA2MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGls
ZExpc3RNdXRhdGlvblNjb3BlLmggKi87IH07CiAJCUQ3MEFENjU3MTNFMTM0MkIwMDVCNTBCNCAv
KiBSZW5kZXJSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5jcHAgKi87
IH07CiAJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU2MTNFMTM0MkIw
MDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCAqLzsgfTsKIAkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1
NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzEzNSw2ICsxMzEzNyw4IEBA
CiAJCUQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TWF0Y2hlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1
bW1hcnlFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
TUxTdW1tYXJ5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzRDRF
OTcxMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFN1bW1hcnlFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRh
dGlvblNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxk
TGlzdE11dGF0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENjE5
QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5k
ZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
UmVnaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTYxM0UxMzQy
QjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDhCNjE1
MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb29raWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMDA5LDYg
KzIxMDEzLDggQEAKIAkJCQk5M0VFQzFFNjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2hhcmFjdGVyRGF0
YS5pZGwgKi8sCiAJCQkJOTNGOTI1NDIwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1
dHRvbnMuY3BwICovLAogCQkJCTkzRjkyNTQxMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFk
aW9CdXR0b25zLmggKi8sCisJCQkJRDYxOUEzMDUxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlz
dE11dGF0aW9uU2NvcGUuY3BwICovLAorCQkJCUQ2MTlBMzA2MTQ0RTAwQkUwMDRCQzMwMiAvKiBD
aGlsZExpc3RNdXRhdGlvblNjb3BlLmggKi8sCiAJCQkJQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5
IC8qIENoaWxkTm9kZUxpc3QuY3BwICovLAogCQkJCUE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAv
KiBDaGlsZE5vZGVMaXN0LmggKi8sCiAJCQkJQkM5MDRCNzIwRDEwOTk4RjAwNjgwRDMyIC8qIENs
YXNzTm9kZUxpc3QuY3BwICovLApAQCAtMjE4MjQsNiArMjE4MzAsNyBAQAogCQkJCUY1NUIzREIy
MTI1MUYxMkQwMDNFRjI2OSAvKiBDaGVja2JveElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTAwQjcyMUExMURFNjQyODAwOEFCOUZGIC8qIENoZWNrZWRJbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRjkyNTQzMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMjAwOTc3RDNDMDAwNTgy
NkQ5IC8qIENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDgyMzUyMEFGOTJB
NzkwMDA0RjA1NyAvKiBDaHJvbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDgyNDA4MEFGOTNB
RUIwMDA0RjA1NyAvKiBDaHJvbWVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjUxNzIsNiAr
MjUxNzksNyBAQAogCQkJCTkzMjZEQzBDMDlEQUQ1RDYwMEFGQzg0NyAvKiBDaGFyc2V0RGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RCMTEyNTFGMTJEMDAzRUYyNjkgLyogQ2hlY2ti
b3hJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGOTI1NDQwRjdFRjVCODAwN0Uz
N0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDYxOUEz
MDcxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTREODIzOEIwQUY5MkRGNjAwMDRGMDU3IC8qIENocm9tZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBQkFGMjIwODBDMDNCMUM3MDBCMEJDRjAgLyogQ2hyb21l
TWFjLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0
YXRpb25TY29wZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzc5YTkwMzliY2EzMGMzOGJiNTYyYTI0NTcwYWNl
MjNkMmJhYTBlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExp
c3RNdXRhdGlvblNjb3BlLmNwcApAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisKKyNpbmNsdWRlICJDaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTm9k
ZS5oIgorI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCisvLyBDaGlsZExpc3RN
dXRhdGlvbkFjY3VtdWxhdG9yIGV4cGVjdHMgdGhhdCBhbGwgcmVtb3ZhbHMgZnJvbSBhIHBhcmVu
dCB0YWtlIHBsYWNlIGluIG9yZGVyCisvLyBhbmQgcHJlY2VkZSBhbnkgYWRkaXRpb25zLiBJZiB0
aGlzIGlzIHZpb2xhdGVkIChpLmUuIGJlY2F1c2Ugb2YgY29kZSBjaGFuZ2VzIGVsc2V3aGVyZQor
Ly8gaW4gV2ViQ29yZSkgaXQgd2lsbCBsaWtlbHkgcmVzdWx0IGluIGJvdGggKGEpIEFTU0VSVGlv
bnMgZmFpbGluZywgYW5kIChiKSBtdXRhdGlvbiByZWNvcmRzCisvLyBiZWluZyBlbnF1ZXVlZCBm
b3IgZGVsaXZlcnkgYmVmb3JlIHRoZSBvdXRlci1tb3N0IHNjb3BlIGNsb3Nlcy4KK2NsYXNzIENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IpOworcHVibGljOgorICAgIENoaWxkTGlzdE11dGF0
aW9uQWNjdW11bGF0b3IoUGFzc1JlZlB0cjxOb2RlPiwgVmVjdG9yPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIqPiYpOworICAgIH5DaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKCk7CisKKyAgICB2
b2lkIGNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hp
bGQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgYm9vbCBpc0VtcHR5KCk7CisgICAg
Ym9vbCBpc0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOworICAgIGJvb2wgaXNSZW1vdmVkTm9kZUlu
T3JkZXIoTm9kZSopOworICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKKworICAgIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4g
bV9hZGRlZE5vZGVzOworICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzU2libGluZzsKKyAgICBS
ZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKKyAgICBSZWZQdHI8Tm9kZT4gbV9sYXN0QWRkZWQ7
CisKKyAgICBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOworfTsK
KworY2xhc3MgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKTsKK3B1YmxpYzoKKyAgICB+TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXIoKTsKKworICAgIHN0YXRpYyBNdXRhdGlvbkFjY3VtdWxhdGlv
blJvdXRlciogaW5zdGFuY2UoKTsKKworICAgIHZvaWQgaW5jcmVtZW50U2NvcGluZ0xldmVsKE5v
ZGUqKTsKKyAgICB2b2lkIGRlY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7CisKKyAgICB2b2lk
IGNoaWxkQWRkZWQoTm9kZSosIFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92
ZUNoaWxkKE5vZGUqLCBQYXNzUmVmUHRyPE5vZGU+KTsKKworcHJpdmF0ZToKKyAgICBNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcigpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IFNjb3BpbmdMZXZlbE1hcDsKKyAg
ICBTY29waW5nTGV2ZWxNYXAgbV9zY29waW5nTGV2ZWxzOworICAgIEhhc2hNYXA8Tm9kZSosIENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IqPiBtX2FjY3VtdWxhdGlvbnM7CisKKyAgICBzdGF0
aWMgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIHNfaW5zdGFuY2U7Cit9OworCitDaGlsZExp
c3RNdXRhdGlvbkFjY3VtdWxhdG9yOjpDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NS
ZWZQdHI8Tm9kZT4gdGFyZ2V0LCBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+JiBvYnNl
cnZlcnMpCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCit7CisgICAgbV9vYnNlcnZlcnMuc3dhcChv
YnNlcnZlcnMpOworICAgIGNsZWFyKCk7Cit9CisKK0NoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I6On5DaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKCkKK3sKKyAgICBBU1NFUlQoaXNFbXB0
eSgpKTsKK30KKworYm9vbCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjppc0FkZGVkTm9k
ZUluT3JkZXIoTm9kZSogY2hpbGQpCit7CisgICAgcmV0dXJuIGlzRW1wdHkoKSB8fCAobV9sYXN0
QWRkZWQgPT0gY2hpbGQtPnByZXZpb3VzU2libGluZygpICYmIG1fbmV4dFNpYmxpbmcgPT0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3sKKyAgICBSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBwcnBDaGlsZDsKKworICAgIGlmICghaXNBZGRlZE5vZGVJbk9yZGVyKGNo
aWxkLmdldCgpKSkKKyAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CisKKyAgICBpZiAo
aXNFbXB0eSgpKSB7CisgICAgICAgIG1fcHJldmlvdXNTaWJsaW5nID0gY2hpbGQtPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgfQorCisgICAgbV9hZGRlZE5vZGVzLmFwcGVuZChjaGlsZCk7CisgICAgbV9sYXN0QWRk
ZWQgPSBjaGlsZDsKK30KKworYm9vbCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjppc1Jl
bW92ZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKK3sKKyAgICByZXR1cm4gaXNFbXB0eSgpIHx8
IG1fbmV4dFNpYmxpbmcuZ2V0KCkgPT0gY2hpbGQ7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRp
b25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQp
Cit7CisgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CisKKyAgICBBU1NFUlQobV9h
ZGRlZE5vZGVzLmlzRW1wdHkoKSAmJiBpc1JlbW92ZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkp
OworCisgICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgpIHx8ICFpc1JlbW92ZWROb2RlSW5P
cmRlcihjaGlsZC5nZXQoKSkpCisgICAgICAgIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworCisg
ICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICBtX3ByZXZpb3VzU2libGluZyA9IGNoaWxkLT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2li
bGluZygpOworICAgICAgICBtX2xhc3RBZGRlZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygp
OworCisgICAgbV9yZW1vdmVkTm9kZXMuYXBwZW5kKGNoaWxkKTsKK30KKwordm9pZCBDaGlsZExp
c3RNdXRhdGlvbkFjY3VtdWxhdG9yOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoKQoreworICAgIEFT
U0VSVCghaXNFbXB0eSgpKTsKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIGNsZWFyKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11
dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdCgKKyAgICAgICAgICAgIG1f
dGFyZ2V0LCBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9hZGRlZE5vZGVzKSwgU3RhdGljTm9kZUxp
c3Q6OmFkb3B0KG1fcmVtb3ZlZE5vZGVzKSwgbV9wcmV2aW91c1NpYmxpbmcsIG1fbmV4dFNpYmxp
bmcpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29ic2VydmVycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9vYnNlcnZlcnNbaV0tPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlv
bik7CisKKyAgICBjbGVhcigpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I6OmNsZWFyKCkKK3sKKyAgICBpZiAoIW1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV9yZW1vdmVkTm9kZXMuY2xlYXIoKTsKKyAgICBpZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5
KCkpCisgICAgICAgIG1fYWRkZWROb2Rlcy5jbGVhcigpOworICAgIG1fcHJldmlvdXNTaWJsaW5n
ID0gMDsKKyAgICBtX25leHRTaWJsaW5nID0gMDsKKyAgICBtX2xhc3RBZGRlZCA9IDA7Cit9CisK
K2Jvb2wgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNFbXB0eSgpCit7CisgICAgcmV0
dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9kZXMuaXNFbXB0eSgpOwor
fQorCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0
ZXI6OnNfaW5zdGFuY2UgPSAwOworCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXIoKQoreworfQorCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRl
cjo6fk11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkKK3sKKyAgICBBU1NFUlQobV9zY29waW5n
TGV2ZWxzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYWNjdW11bGF0aW9ucy5pc0VtcHR5KCkp
OworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbml0aWFsaXplKCkKK3sK
KyAgICBBU1NFUlQoIXNfaW5zdGFuY2UpOworICAgIHNfaW5zdGFuY2UgPSBhZG9wdFB0cihuZXcg
TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIpLmxlYWtQdHIoKTsKK30KKworCitNdXRhdGlvbkFj
Y3VtdWxhdGlvblJvdXRlciogTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCkK
K3sKKyAgICBpZiAoIXNfaW5zdGFuY2UpCisgICAgICAgIGluaXRpYWxpemUoKTsKKworICAgIHJl
dHVybiBzX2luc3RhbmNlOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpj
aGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBI
YXNoTWFwPE5vZGUqLCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOworICAgIEFTU0VSVChpdGVyICE9IG1f
YWNjdW11bGF0aW9ucy5lbmQoKSk7CisKKyAgICBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9y
KiByZWNvcmQgPSBpdGVyLT5zZWNvbmQ7CisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3Jk
LT5jaGlsZEFkZGVkKGNoaWxkKTsKK30KKwordm9pZCBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRl
cjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkK
K3sKKyAgICBIYXNoTWFwPE5vZGUqLCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOworICAgIEFTU0VSVChp
dGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7CisKKyAgICBDaGlsZExpc3RNdXRhdGlvbkFj
Y3VtdWxhdG9yKiByZWNvcmQgPSBpdGVyLT5zZWNvbmQ7CisgICAgaWYgKHJlY29yZCkKKyAgICAg
ICAgcmVjb3JkLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOworfQorCit2b2lkIE11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQorewor
ICAgIHBhaXI8U2NvcGluZ0xldmVsTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9zY29w
aW5nTGV2ZWxzLmFkZCh0YXJnZXQsIDEpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAg
ICAgICArKyhyZXN1bHQuZmlyc3QtPnNlY29uZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICB0YXJn
ZXQtPnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCk7CisgICAgaWYgKG9ic2VydmVycy5pc0VtcHR5KCkp
CisgICAgICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCAwKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCBuZXcgQ2hpbGRMaXN0TXV0YXRpb25BY2N1
bXVsYXRvcih0YXJnZXQsIG9ic2VydmVycykpOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0
aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQoreworICAgIFNj
b3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5kKHRhcmdl
dCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKKworICAgIC0t
KGl0ZXItPnNlY29uZCk7CisgICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIE93blB0cjxDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yPiByZWNvcmQgPSBh
ZG9wdFB0cihtX2FjY3VtdWxhdGlvbnMudGFrZSh0YXJnZXQpKTsKKyAgICBtX3Njb3BpbmdMZXZl
bHMucmVtb3ZlKGl0ZXIpOworCisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3JkLT5lbnF1
ZXVlTXV0YXRpb25SZWNvcmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworQ2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZShQYXNzUmVmUHRyPE5vZGU+IHRhcmdl
dCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKKyAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6aW5zdGFuY2UoKS0+aW5jcmVtZW50U2NvcGluZ0xldmVsKG1fdGFyZ2V0LmdldCgpKTsK
K30KKworQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoKQor
eworICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT5kZWNyZW1lbnRT
Y29waW5nTGV2ZWwobV90YXJnZXQuZ2V0KCkpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+Y2hpbGRBZGRlZChtX3RhcmdldC5nZXQo
KSwgY2hpbGQpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6OndpbGxSZW1vdmVD
aGlsZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQoreworICAgIE11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyOjppbnN0YW5jZSgpLT53aWxsUmVtb3ZlQ2hpbGQobV90YXJnZXQuZ2V0KCksIGNoaWxk
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFmMmY4YzQ5MWNkNmE4ZGExYzI4NTAwZGE5NGU3ZmQ1OWMwMWVhMzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENoaWxkTGlzdE11dGF0aW9uU2NvcGVfaAor
I2RlZmluZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlX2gKKworI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBOb2RlOworCitjbGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3BlKTsKK3B1YmxpYzoK
KyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKKyAg
ICB+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSgpOworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NS
ZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4p
OworCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisK
KyNlbmRpZiAvLyBDaGlsZExpc3RNdXRhdGlvblNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAppbmRleCAzZWE0OTkzNjkzNTc0OWIxMzE5MmI3NjM0MWQ1MDliMTUzOGU0YzBj
Li5jNjg1NGMzZjkzYTdlMDc0MjFkZTBhMDQyZTMzMTExM2NjNjUxMDkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJCZWZv
cmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIkNoaWxk
TGlzdE11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlQWxnb3JpdGhtcy5o
IgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCkBAIC0xNDEsNiArMTQyLDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6aW5zZXJ0QmVm
b3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlCiAgICAg
aWYgKHJlZkNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA9PSBuZXdDaGlsZCB8fCByZWZDaGlsZCA9
PSBuZXdDaGlsZCkgLy8gbm90aGluZyB0byBkbwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBt
dXRhdGlvbih0aGlzKTsKKyNlbmRpZgorCiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSByZWZDaGls
ZDsKICAgICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGRQcmV2aW91c1NpYmxpbmcgPSByZWZDaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBp
dCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkgewpAQCAtMjcy
LDYgKzI3NywxMCBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNzUmVmUHRy
PE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExp
c3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCisKICAgICBSZWZQdHI8Tm9k
ZT4gcHJldiA9IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBSZWZQdHI8Tm9kZT4g
bmV4dCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpOwogCkBAIC00MDAsNiArNDA5LDEwIEBAIHN0
YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWluZXIpCiAg
ICAgTm9kZVZlY3RvciBjaGlsZHJlbjsKICAgICBjb2xsZWN0Tm9kZXMoY29udGFpbmVyLCBjaGls
ZHJlbik7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11
dGF0aW9uU2NvcGUgbXV0YXRpb24oY29udGFpbmVyKTsKKyNlbmRpZgorCiAgICAgZm9yIChOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxk
cmVuLmVuZCgpOyBpdCsrKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOwogICAg
ICAgICAvLyBmaXJlIHJlbW92ZWQgZnJvbSBkb2N1bWVudCBtdXRhdGlvbiBldmVudHMuCkBAIC02
MTEsNiArNjI0LDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlB0
cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvCiAgICAgaWYgKHRhcmdldHMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlzKTsKKyNl
bmRpZgorCiAgICAgLy8gTm93IGFjdHVhbGx5IGFkZCB0aGUgY2hpbGQocmVuKQogICAgIFJlZlB0
cjxOb2RlPiBwcmV2ID0gbGFzdENoaWxkKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkg
ewpAQCAtMTA5NSw2ICsxMTEyLDEzIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRp
b25FdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsKICAgICBS
ZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKKyNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5wYXJlbnROb2RlKCkpIHsKKyAgICAg
ICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnROb2RlKCkpOworICAg
ICAgICBtdXRhdGlvbi5jaGlsZEFkZGVkKGMpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKGMt
PnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01O
T0RFSU5TRVJURURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11
dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2VydGVkRXZlbnQsIHRy
dWUsIGMtPnBhcmVudE5vZGUoKSkpOwogCkBAIC0xMTE2LDYgKzExNDAsMTMgQEAgc3RhdGljIHZv
aWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5v
ZGU+IGMgPSBjaGlsZDsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRv
Y3VtZW50KCk7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5w
YXJlbnROb2RlKCkpIHsKKyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihj
LT5wYXJlbnROb2RlKCkpOworICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQoYyk7Cisg
ICAgfQorI2VuZGlmCisKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVu
dHMKICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUo
RG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkKICAgICAgICAgYy0+ZGlzcGF0Y2hT
Y29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1v
dmVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmlu
ZGV4IGQ2OTliMTkxMTZlODMxZDczZmQ1NTIzYTg0ZWFhMmViNTg2ZmVmNTcuLjMzZjM2NTU0OWNk
NjA1NmExZGVlMzEyODc3YWRkZWE4ZmRiZjQ5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAg
LTYyNSw4ICs2MjUsOCBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVj
b3JkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbQogICAgICAgICByZXR1cm47
CiAKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6
OmNyZWF0ZUF0dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7Ci0gICAgZm9yIChWZWN0b3I8V2ViS2l0
TXV0YXRpb25PYnNlcnZlcio+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0
ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPmVucXVldWVN
dXRhdGlvblJlY29yZChtdXRhdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNl
cnZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+ZW5xdWV1ZU11dGF0aW9u
UmVjb3JkKG11dGF0aW9uKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMjNmZjdm
ZTIxYTgzZjIzMWViNjhkYzdjYzJmNGE0MTY5ZGQ2Y2M0NS4uOTE1YTVkYzFkYzA5YzY0NTMzZDk1
YWEyNTkzMTBmMjc5YWJhMjhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCisjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIgogI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNTU1Bh
cnNlci5oIgpAQCAtMjEzMCw2ICsyMTMxLDkgQEAgdm9pZCBOb2RlOjpzZXRUZXh0Q29udGVudChj
b25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBjYXNlIERPQ1VN
RU5UX0ZSQUdNRU5UX05PREU6CiAgICAgICAgIGNhc2UgU0hBRE9XX1JPT1RfTk9ERTogewogICAg
ICAgICAgICAgQ29udGFpbmVyTm9kZSogY29udGFpbmVyID0gdG9Db250YWluZXJOb2RlKHRoaXMp
OworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgICAgICAgICBDaGlsZExpc3RN
dXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCiAgICAgICAgICAgICBjb250YWlu
ZXItPnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRl
VGV4dE5vZGUodGV4dCksIGVjKTsKQEAgLTI3MDAsOSArMjcwNCw5IEBAIHZvaWQgTm9kZTo6cmVn
aXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKj4mIG9iCiAgICAgaWYgKCFvYnNlcnZlckVudHJpZXMgfHwgb2JzZXJ2ZXJFbnRyaWVzLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoVmVjdG9yPE11dGF0aW9uT2Jz
ZXJ2ZXJFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlckVudHJpZXMtPmJlZ2luKCk7IGl0
ZXIgIT0gb2JzZXJ2ZXJFbnRyaWVzLT5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVy
LT5tYXRjaGVzKHR5cGUpKQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChpdGVyLT5vYnNl
cnZlci5nZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlckVudHJpZXMt
PnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgoKm9ic2VydmVyRW50cmllcylbaV0ubWF0Y2hl
cyh0eXBlKSkKKyAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoKCpvYnNlcnZlckVudHJpZXMp
W2ldLm9ic2VydmVyLmdldCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA3ZDczNmFlN2JhYzY0YzQ1ODhmY2JhMmZj
M2QzYjc3NTI5N2JkZTE0Li44M2YxNTk5MGVhMmJlY2EzMzliYjBhNzNjYzI5NjliYTRkZjI5ZmE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCkBA
IC02NSw4ICs2NSw4IEBAIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2Rl
KiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zCiAKIHZvaWQgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgZm9yIChWZWN0b3I8Tm9kZSo+Ojpp
dGVyYXRvciBpdGVyID0gbV9vYnNlcnZlZE5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gIG1fb2JzZXJ2
ZWROb2Rlcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT51bnJlZ2lzdGVyTXV0YXRp
b25PYnNlcnZlcih0aGlzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb2JzZXJ2ZWRO
b2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlZE5vZGVzW2ldLT51bnJlZ2lzdGVy
TXV0YXRpb25PYnNlcnZlcih0aGlzKTsKIAogICAgIG1fb2JzZXJ2ZWROb2Rlcy5jbGVhcigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA1OTEyZGEwN2Q3NmE0OTJjNmQ3
MzI4OGExNDM0ZGQxMzFlMzE5ODA0Li4yYzliN2E1YTM1OTZmMTZjMzdkYzJmNTk5MDc1YmQzNDBh
MzU4MjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRp
b25TY29wZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKQEAgLTMxNyw2ICszMTgsMTAgQEAgc3Rh
dGljIGlubGluZSBib29sIGhhc09uZVRleHRDaGlsZChDb250YWluZXJOb2RlKiBub2RlKQogCiBz
dGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoSFRNTEVsZW1lbnQqIGVsZW1l
bnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZSBtdXRhdGlvbihlbGVtZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKCFmcmFnbWVu
dC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPnJlbW92ZUNoaWxkcmVuKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMzOCw2ICszNDMsMTAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZUNo
aWxkcmVuV2l0aEZyYWdtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPERvY3Vt
ZW4KIAogc3RhdGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aFRleHQoSFRNTEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYgRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0
aW9uKGVsZW1lbnQpOworI2VuZGlmCisKICAgICBpZiAoaGFzT25lVGV4dENoaWxkKGVsZW1lbnQp
KSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50LT5maXJzdENoaWxkKCkpLT5z
ZXREYXRhKHRleHQsIGVjKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM5YjUxODI3NDA1ZGMx
NDg4YTFjMzY3NjBkYmNhOTZjNWRhYmU4ODAuLjI0ZjgzMzJmZjkyMGMxNzkwOWE3MmFlMTY4Zjgy
ODQzZDhkYmFkM2MgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMC0xOCAgUmFmYWVsIFdl
aW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2Vy
dmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgY2hpbGRM
aXN0IGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbDoKKyAgICAgICAgKiBm
YXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC5odG1sOiBBZGRlZC4KKwogMjAx
MS0xMC0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIGZpeCBy
ZXBhaW50IGJ1Z3MgaW4gbmV3IGZsZXhib3gKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAppbmRleCA5ODY5ZmUy
ZWU1YjAyYzBlNzc2OGQ4MWEzMzJhYWZkMzg2NmVjYzgxLi4yZjg1OThkZmY3YTAyMGVlM2M3Mjdl
OWUzN2Y5ODZhNmEyODE4Njk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9u
L29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC0yMyw3ICsyMyw3IEBA
IFBBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCiBUZXN0aW5nIHRo
YXQgb2JzZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiYXR0cmlidXRlcyIgZG9lcyBub3QgcmVz
dWx0IGluIGhlYXJpbmcgYWJvdXQgYXR0cmlidXRlIGNoYW5nZXMuCiBQQVNTIG11dGF0aW9ucyBp
cyBudWxsCiAKLVRlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRo
ZSBzYW1lIG9ic2VydmluZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMu
CitUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBv
YnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuCiBQQVNTIGNh
bGxzIGlzIDEKIFBBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCiBQQVNTIG11dGF0aW9uc1swXS50
eXBlIGlzICJhdHRyaWJ1dGVzIgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlv
bi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKaW5kZXggM2NiMjdmMzlhZmI5MzM0NGFkYjEzZjdiOGM1Zjhh
NGVhZTE4ZDY1Mi4uYTA3ZDRiZTVlMWY0NjMzYjE4NTBiZDQwYzVmOTI2NTkxZDQ0ZjkyNiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1s
CkBAIC0xMCw4ICsxMCw3IEBACiA8c2NyaXB0PgogCiB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7Ci12YXIgbXV0YXRpb25zOwotdmFyIG11dGF0aW9uczI7Cit2YXIgbXV0YXRpb25zLCBtdXRh
dGlvbnMyOwogdmFyIGNhbGxzOwogCiBmdW5jdGlvbiB0ZXN0QmFzaWMoKSB7CkBAIC0xMDcsNyAr
MTA2LDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgewogICAgIHZhciBv
YnNlcnZlcjsKIAogICAgIGZ1bmN0aW9uIHN0YXJ0KCkgewotICAgICAgICBkZWJ1ZygnVGVzdGlu
ZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5n
IGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4nKTsKKyAgICAgICAgZGVi
dWcoJ1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1l
IG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4nKTsKICAg
ICAKIAkJY2FsbHMgPSAwOwogICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40MGFkNzM3ZjA3MTJlNjNhNmMzYjQyYzFiMjAyM2FlZTAxOWUwZjgxCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxk
TGlzdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5MyBAQAorVGVzdCBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyLm9ic2VydmUgb24gYXR0cmlidXRlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBjaGlsZExpc3Qgb2JzZXJ2YXRpb24uCisu
Li5jYW4gY2hpbGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsCitQQVNTIG11dGF0aW9u
cy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFT
UyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MQorLi4ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpIHNo
b3VsZCBwcmV2ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlv
bnMgaXMgbnVsbAorLi4ucmUtb2JzZXJ2aW5nIGFmdGVyIGRpc2Nvbm5lY3Qgd29ya3Mgd2l0aCB0
aGUgc2FtZSBvYnNlcnZlci4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0
aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9k
ZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXSBpcyByZW1v
dmVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRh
dGlvbnNbMV0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1sxXS5yZW1v
dmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjIKKworVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRo
b3V0IHNwZWNpZnlpbmcgImNoaWxkTGlzdCIgZG9lcyBub3QgcmVzdWx0IGluIGhlYXJpbmcgYWJv
dXQgY2hpbGRMaXN0IGNoYW5nZXMuCitQQVNTIG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3Rpbmcg
dGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhh
cyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4KK1BBU1MgY2FsbHMgaXMgMQor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNo
aWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKworVGVzdGluZyB0aGF0IG11bHRpcGxl
IG9ic2VydmVycyBjYW4gYmUgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIG5vZGUgYW5kIGJvdGggcmVj
ZWl2ZSBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlv
bnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnMyLmxlbmd0aCBpcyAxCitQ
QVNTIG11dGF0aW9uczJbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorCitUZXN0aW5nIHRoYXQgaW5u
ZXJUZXh0IGFuZCBpbm5lckhUTUwgYWx3YXlzIHJlc3VsdCBpbiBhIHNpbmdsZSBjaGlsZExpc3Qg
bXV0YXRpb24uCisuLi5pbm5lckhUTUwKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNT
IG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRl
ZE5vZGVzLmxlbmd0aCBpcyAzCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIGFk
ZGVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXSBpcyBhZGRlZERpdjIKK1BB
U1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMl0gaXMgYWRkZWREaXYzCitQQVNTIG11dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWRO
b2Rlc1swXSBpcyByZW1vdmVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzFd
IGlzIHJlbW92ZWREaXYyCisuLi5pbm5lclRleHQKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAx
CitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1sw
XS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMu
bGVuZ3RoIGlzIDMKKworVGVzdGluZyB0aGF0IHJlcGxhY2VDaGlsZCByZXN1bHRzIGluIG1pbmlt
YWwgY2hpbGRMaXN0IG11dGF0aW9ucy4KKy4uLmlubmVySFRNTAorUEFTUyBtdXRhdGlvbnMubGVu
Z3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0
YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVk
Tm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVu
Z3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2
MQorLi4uaW5uZXJUZXh0CitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlv
bnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5s
ZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXSBpcyBhZGRlZERpdjEK
K1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0gaXMgYWRkZWREaXYyCitQQVNTIG11dGF0
aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MQorCitUZXN0aW5nIHRoYXQgaW5zZXJ0QmVmb3JlIHJl
c3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLgorLi4uaW5uZXJUZXh0CitQQVNT
IG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRM
aXN0IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMgorUEFTUyBtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFk
ZGVkTm9kZXNbMV0gaXMgYWRkZWREaXYyCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMu
bGVuZ3RoIGlzIDAKKworVGVzdGluZyB0aGF0IGFwcGVuZENoaWxkIHJlc3VsdHMgaW4gbWluaW1h
bCBjaGlsZExpc3QgbXV0YXRpb25zLgorLi4uaW5uZXJUZXh0CitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWRO
b2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0gaXMg
YWRkZWREaXYyCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDAKKwor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kMTZlY2JkOGUzMGRiYWY5YTc5NjBiYjIwYzJjMjk0NmIyZWIwNGZiCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC5odG1s
CkBAIC0wLDAgKzEsNDA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzx0aXRsZT48L3RpdGxlPgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD1kZXNjcmlwdGlvbj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxz
Y3JpcHQ+CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3ZhciBtdXRhdGlvbnMsIG11
dGF0aW9uczI7Cit2YXIgY2FsbHM7Cit2YXIgZGl2LCByZW1vdmVkRGl2MSwgcmVtb3ZlZERpdjIs
IGFkZGVkRGl2MSwgYWRkZWREaXYyLCBhZGRlZERpdjM7CisKK2Z1bmN0aW9uIHRlc3RCYXNpYygp
IHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBiYXNpYyBhc3BlY3RzIG9mIGNoaWxkTGlzdCBv
YnNlcnZhdGlvbi4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlv
bnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBj
aGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIHJlbW92ZWREaXYxID0gZGl2LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVj
a0Rpc2Nvbm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGlz
Y29ubmVjdEFuZE11dGF0ZSgpIHsKKyAgICAgICAgZGVidWcoJy4uLmNhbiBjaGlsZExpc3QgY2hh
bmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
Lmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICci
Y2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMu
bGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
WzBdJywgJ3JlbW92ZWREaXYxJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAg
ICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRpbWVv
dXQoY2hlY2tOb3REZWxpdmVyZWRBbmRNdXRhdGVNdWx0aXBsZSwgMCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gY2hlY2tOb3REZWxpdmVyZWRBbmRNdXRhdGVNdWx0aXBsZSgpIHsKKyAgICAgICAg
ZGVidWcoJy4uLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGRl
bGl2ZXJ5IG9mIG11dGF0aW9ucy4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywg
J251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVl
IH0pOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGls
ZCk7CisgICAgICAgIHJlbW92ZWREaXYyID0gZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxk
KTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25uZWN0
IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5
cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1v
dmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5y
ZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1sxXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMV0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMV0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYyJyk7CisgICAgICAgIG9ic2Vy
dmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVz
dCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RXcm9uZ1R5cGUo
KSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFy
dCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91dCBzcGVj
aWZ5aW5nICJjaGlsZExpc3QiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGNoaWxk
TGlzdCBjaGFuZ2VzLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5l
dyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0
aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7
IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIGRpdi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRp
bWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNj
b25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAg
ICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRp
b24oKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBz
dGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNh
bWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGlu
ZyB0aGUgb3B0aW9ucy4nKTsKKworICAgICAgICBjYWxscyA9IDA7CisgICAgICAgIG11dGF0aW9u
cyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0p
IHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgICAgICBjYWxscysrOworICAg
ICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRy
dWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2
LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja0Rpc2Nvbm5l
Y3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGlzY29ubmVjdEFu
ZE11dGF0ZSgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ2NhbGxzJywgJzEnKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsK
KyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0
ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1
dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywgJ251
bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7
CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVu
Y3Rpb24gdGVzdE11bHRpcGxlT2JzZXJ2ZXJzKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9i
c2VydmVyOworICAgIHZhciBvYnNlcnZlcjI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAg
ICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lz
dGVyZWQgdG8gYSBnaXZlbiBub2RlIGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25zLicpOworICAg
ICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsK
KyAgICAgICAgb2JzZXJ2ZXIyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24o
bSkgeworICAgICAgICAgICAgbXV0YXRpb25zMiA9IG07CisgICAgICAgIH0pOworICAgICAgICBv
YnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIG9ic2Vy
dmVyMi5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRpbWVv
dXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnMyLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMyWzBdLnR5
cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAg
ICAgICBvYnNlcnZlcjIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAg
IHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVz
dElubmVySFRNTEFuZElubmVyVGV4dCgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZl
cjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0
IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1bHQgaW4gYSBzaW5nbGUgY2hpbGRM
aXN0IG11dGF0aW9uLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYuaW5uZXJIVE1M
ID0gJzxzcGFuPkZvbzwvc3Bhbj48ZGl2PkJhcjwvZGl2Pic7CisgICAgICAgIHJlbW92ZWREaXYx
ID0gZGl2LmZpcnN0Q2hpbGQ7CisgICAgICAgIHJlbW92ZWREaXYyID0gcmVtb3ZlZERpdjEubmV4
dFNpYmxpbmc7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIo
ZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAg
ICAgICBkaXYuaW5uZXJIVE1MID0gJ2ZvbzxpbWcgc3JjPSJiYXIucG5nIj48cD5CYXo8L3A+JzsK
KyAgICAgICAgYWRkZWREaXYxID0gZGl2LmNoaWxkTm9kZXNbMF07CisgICAgICAgIGFkZGVkRGl2
MiA9IGRpdi5jaGlsZE5vZGVzWzFdOworICAgICAgICBhZGRlZERpdjMgPSBkaXYuY2hpbGROb2Rl
c1syXTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja0lubmVySFRNTCwgMCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gY2hlY2tJbm5lckhUTUwoKSB7CisgICAgICAgIGRlYnVnKCcuLi5pbm5lckhU
TUwnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywgJzMnKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywgJ2FkZGVkRGl2MScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0nLCAnYWRkZWREaXYy
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1syXScsICdhZGRl
ZERpdjMnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVu
Z3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNb
MF0nLCAncmVtb3ZlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1v
dmVkTm9kZXNbMV0nLCAncmVtb3ZlZERpdjInKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxs
OworICAgICAgICBkaXYuaW5uZXJUZXh0ID0gJ2Zvbyc7CisgICAgICAgIHNldFRpbWVvdXQoZmlu
aXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVn
KCcuLi5pbm5lclRleHQnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcs
ICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0
IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywg
JzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3Ro
JywgJzMnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1Zygn
Jyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwor
ZnVuY3Rpb24gdGVzdFJlcGxhY2VDaGlsZCgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNl
cnZlcjsKKyAgICB2YXIgZnJhZ21lbnQ7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAg
ICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZXBsYWNlQ2hpbGQgcmVzdWx0cyBpbiBtaW5pbWFsIGNo
aWxkTGlzdCBtdXRhdGlvbnMuJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAg
ICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRpdi5pbm5l
ckhUTUwgPSAnPHNwYW4+Rm9vPC9zcGFuPjxkaXY+QmFyPC9kaXY+JzsKKyAgICAgICAgcmVtb3Zl
ZERpdjEgPSBkaXYuZmlyc3RDaGlsZDsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07
CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlz
dDogdHJ1ZSB9KTsKKyAgICAgICAgYWRkZWREaXYxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7CisgICAgICAgIGRpdi5yZXBsYWNlQ2hpbGQoYWRkZWREaXYxLCBkaXYuZmlyc3RDaGls
ZCk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tSZXBsYWNlV2l0aE5vZGUsIDApOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGNoZWNrUmVwbGFjZVdpdGhOb2RlKCkgeworICAgICAgICBkZWJ1Zygn
Li4uc2ltcGxlIHJlcGxhY2UgY2hpbGQnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
Lmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICci
Y2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMu
bGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
WzBdJywgJ2FkZGVkRGl2MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51
bGw7CisgICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
OworICAgICAgICBhZGRlZERpdjEgPSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIGFkZGVkRGl2MiA9IGZyYWdtZW50LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgcmVtb3ZlZERpdjEg
PSBkaXYuZmlyc3RDaGlsZDsKKworICAgICAgICBkaXYucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBy
ZW1vdmVkRGl2MSk7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlcGxhY2Ugd2l0aCBE
b2N1bWVudEZyYWdtZW50Jyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgn
LCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlz
dCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcs
ICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdh
ZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzFd
JywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92ZWRO
b2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5l
Y3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0K
KworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbnNlcnRCZWZvcmUoKSB7CisgICAg
dmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGZyYWdtZW50OworCisgICAgZnVu
Y3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgaW5zZXJ0QmVmb3Jl
IHJlc3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLicpOworCisgICAgICAgIG11
dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj4nOworICAgICAg
ICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAg
YWRkZWREaXYxID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JykpOworICAgICAgICBhZGRlZERpdjIgPSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0
TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBt
OworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExp
c3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIGRpdi5maXJz
dENoaWxkKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworCisgICAg
ZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcs
ICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0
IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywg
JzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywgJ2Fk
ZGVkRGl2MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0n
LCAnYWRkZWREaXYyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5v
ZGVzLmxlbmd0aCcsICcwJyk7CisKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAg
ICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3Rh
cnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEFwcGVuZENoaWxkKCkgeworICAgIHZhciBkaXY7Cisg
ICAgdmFyIG9ic2VydmVyOworICAgIHZhciBmcmFnbWVudDsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGFwcGVuZENoaWxkIHJlc3VsdHMgaW4g
bWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51
bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAg
ICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj4nOworICAgICAgICBmcmFnbWVudCA9
IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgYWRkZWREaXYxID0g
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAg
ICAgICBhZGRlZERpdjIgPSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKSk7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9
KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7
CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisgICAgICAgIHNldFRpbWVvdXQo
ZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0uYWRkZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLmFkZGVkTm9kZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzAnKTsKKworICAgICAgICBv
YnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4
dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCit2YXIgdGVzdHMgPSBbdGVzdEJh
c2ljLCB0ZXN0V3JvbmdUeXBlLCB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24sIHRlc3RNdWx0aXBs
ZU9ic2VydmVycywgdGVzdElubmVySFRNTEFuZElubmVyVGV4dCwgdGVzdFJlcGxhY2VDaGlsZCwg
dGVzdEluc2VydEJlZm9yZSwgdGVzdEFwcGVuZENoaWxkXTsKK3ZhciB0ZXN0SW5kZXggPSAwOwor
IAorZnVuY3Rpb24gcnVuTmV4dFRlc3QoKSB7CisgICAgaWYgKHRlc3RJbmRleCA8IHRlc3RzLmxl
bmd0aCkKKyAgICAgICAgdGVzdHNbdGVzdEluZGV4KytdKCk7CisgICAgZWxzZQorICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKK30KKworZGVzY3JpcHRpb24oJ1Rlc3QgV2ViS2l0TXV0YXRpb25PYnNl
cnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuJyk7CisKK2lmICghd2luZG93LldlYktpdE11dGF0
aW9uT2JzZXJ2ZXIpCisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJMRShN
VVRBVElPTl9PQlNFUlZFUlMpJyk7CitlbHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwordmFyIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111869</attachid>
            <date>2011-10-20 16:28:01 -0700</date>
            <delta_ts>2011-10-21 11:07:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111020162800.patch</filename>
            <type>text/plain</type>
            <size>51644</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgwMzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjYmFiZTI1Y2NjYjlhNTU4
MjBmMGZjMzJmZjMwOTNjNTQ5MjY4ZTc3Li40MzgwYTEyOTg2NGRmYWE0MjY3Mjc0ZGQzZGVkNzBl
NTFiMDkxYmZiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Db250
YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6Omluc2VydEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0
Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlw
ZSk6CisgICAgICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICog
aHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5X
aXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQp
OgorCiAyMDExLTEwLTIwICBSYXltb25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBJbXBsZW1lbnQgU1NFIGRlbm9ybWFsIGRpc2FibGVyIGZvciB3aW5kb3dzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBhMmZjNWJiMGUwMDNiMjFiNzg1YzM2M2IwM2ZjZjc2MzYxYzJjODljLi45
MDc1MzgwYTlkZjgzMDg5YTUyNTc1YzE1NDQ2NGNhYjM4NWFmNWFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtNTEzLDYgKzUxMyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vQ0RB
VEFTZWN0aW9uLmNwcAogICAgIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcAogICAgIGRvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmNwcAorICAgIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcAogICAg
IGRvbS9DaGlsZE5vZGVMaXN0LmNwcAogICAgIGRvbS9DbGFzc05vZGVMaXN0LmNwcAogICAgIGRv
bS9DbGllbnRSZWN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZjFiZmEy
NmU1NTc3ZmJlMDBmNWQzMGNhZjRmZGY1MzRkZDkxM2RjZC4uNjc3ZDE4NzE0MTk0NDE4NzcxMzM3
YmVlZWMzNTQ0NThjYzRiNzAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0x
MTIwLDYgKzExMjAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0
b25zLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaCBcCisJ
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9k
b20vQ2hpbGROb2RlTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0
LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNzc5NDNkODc3NzFjMTJiNzc2YTIyYWYyZTQ1NDdiYWE1MGYzZGY2OC4uN2M0NDli
OWJhYWE4OTU3ZGFmZDNkZTc2YjNjYTliZmMxMDQzNzljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
NTEyNSw2ICs1MTI1LDggQEAKICAgICAgICAgICAgICdkb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVj
bGFyYXRpb24uY3BwJywKICAgICAgICAgICAgICdkb20vQ2hhcmFjdGVyRGF0YS5jcHAnLAogICAg
ICAgICAgICAgJ2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCcsCisgICAgICAgICAgICAnZG9t
L0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwJywKKyAgICAgICAgICAgICdkb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5oJywKICAgICAgICAgICAgICdkb20vQ2hpbGROb2RlTGlzdC5jcHAnLAog
ICAgICAgICAgICAgJ2RvbS9DaGlsZE5vZGVMaXN0LmgnLAogICAgICAgICAgICAgJ2RvbS9DbGFz
c05vZGVMaXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDY1YzIzNGNlNmQ0NDRmNTJjYTVhY2Zj
MWU3NDY1ZTg2NjQ1ZjYzZTUuLjBiMmNmMWI1ZDA1OTRmYjY1YmU1ZmVjYThkZGU3MDZkNjA5MDJj
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCkBAIC00NjUsNiArNDY1LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
ZG9tL0NEQVRBU2VjdGlvbi5jcHAgXAogICAgIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcCBcCiAgICAg
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIFwKKyAgICBkb20vQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZS5jcHAgXAogICAgIGRvbS9DaGlsZE5vZGVMaXN0LmNwcCBcCiAgICAgZG9tL0NsYXNzTm9k
ZUxpc3QuY3BwIFwKICAgICBkb20vQ2xpZW50UmVjdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmM2QwNTk4NmU3NzJiZTBlMjE0ZGMz
MjU5NTcxODJjZDQzNDM0YWFlLi4wZjI5NzExMWQ1YzFkYzk0NzgyNzkwMDM1M2Q4NDk1NTE1MmE0
M2JiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpA
QCAtNDM4NjUsNiArNDM4NjUsNjIgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxDaGVja2Vk
UmFkaW9CdXR0b25zLmgiCiAJCQkJPgogCQkJPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKyAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxDaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmNwcCIKKyAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0
aW9uCisgICAgICAgICAgICAgICAgICAgIE5hbWU9IkRlYnVnfFdpbjMyIgorICAgICAgICAgICAg
ICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgPgor
ICAgICAgICAgICAgICAgICAgICA8VG9vbAorICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAg
ICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlv
bgorICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlfFdpbjMyIgorICAgICAgICAgICAg
ICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgPgor
ICAgICAgICAgICAgICAgICAgICA8VG9vbAorICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAg
ICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlv
bgorICAgICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisg
ICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAg
ICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAg
ICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAvPgorICAg
ICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVD
b25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIE5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KyAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICA8VG9vbAorICAgICAg
ICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAg
ICAgICAgLz4KKyAgICAgICAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAg
ICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1
Z19BbGx8V2luMzIiCisgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAg
ICAgICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAg
ICAgICAgICAvPgorICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAg
ICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIE5hbWU9IlBy
b2R1Y3Rpb258V2luMzIiCisgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisg
ICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAg
ICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAg
ICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgIFJlbGF0
aXZlUGF0aD0iLi5cZG9tXENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCIKKyAgICAgICAgICAgICAg
ICA+CisgICAgICAgICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZG9tXENoaWxkTm9kZUxpc3QuY3BwIgogCQkJCT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNTRiYzBhNzIyNDAxODhjNjExMTI2
Njk5MGJlMGUwNTA5ZWU3ZWU4Li4wMWEzOTEyNmI2ZDM3ZjUzODc3YWQ4NTI5NTBkYjFlNTRlODc1
OTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC01ODA1LDYgKzU4MDUsOCBAQAogCQlEM0FBMTBGNDEyM0E5OEFBMDA5MjE1MkIg
LyogTWVkaWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hl
ci5oICovOyB9OwogCQlEM0Q0RTk3MjEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQz
RDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICovOyB9Owog
CQlEM0Q0RTk3MzEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MTEzMEM3Q0ZF
MDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi87IH07CisJCUQ2MTlBMzA3MTQ0RTAw
QkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAv
KiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCAqLzsgfTsKKwkJRDYxOUEzMDgxNDRFMDBCRTAw
NEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA2MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGls
ZExpc3RNdXRhdGlvblNjb3BlLmggKi87IH07CiAJCUQ3MEFENjU3MTNFMTM0MkIwMDVCNTBCNCAv
KiBSZW5kZXJSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5jcHAgKi87
IH07CiAJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU2MTNFMTM0MkIw
MDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCAqLzsgfTsKIAkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1
NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzEzNSw2ICsxMzEzNyw4IEBA
CiAJCUQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TWF0Y2hlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1
bW1hcnlFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
TUxTdW1tYXJ5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzRDRF
OTcxMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFN1bW1hcnlFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRh
dGlvblNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxk
TGlzdE11dGF0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENjE5
QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5k
ZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
UmVnaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTYxM0UxMzQy
QjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDhCNjE1
MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb29raWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMDA5LDYg
KzIxMDEzLDggQEAKIAkJCQk5M0VFQzFFNjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2hhcmFjdGVyRGF0
YS5pZGwgKi8sCiAJCQkJOTNGOTI1NDIwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1
dHRvbnMuY3BwICovLAogCQkJCTkzRjkyNTQxMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFk
aW9CdXR0b25zLmggKi8sCisJCQkJRDYxOUEzMDUxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlz
dE11dGF0aW9uU2NvcGUuY3BwICovLAorCQkJCUQ2MTlBMzA2MTQ0RTAwQkUwMDRCQzMwMiAvKiBD
aGlsZExpc3RNdXRhdGlvblNjb3BlLmggKi8sCiAJCQkJQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5
IC8qIENoaWxkTm9kZUxpc3QuY3BwICovLAogCQkJCUE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAv
KiBDaGlsZE5vZGVMaXN0LmggKi8sCiAJCQkJQkM5MDRCNzIwRDEwOTk4RjAwNjgwRDMyIC8qIENs
YXNzTm9kZUxpc3QuY3BwICovLApAQCAtMjE4MjQsNiArMjE4MzAsNyBAQAogCQkJCUY1NUIzREIy
MTI1MUYxMkQwMDNFRjI2OSAvKiBDaGVja2JveElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTAwQjcyMUExMURFNjQyODAwOEFCOUZGIC8qIENoZWNrZWRJbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRjkyNTQzMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMjAwOTc3RDNDMDAwNTgy
NkQ5IC8qIENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDgyMzUyMEFGOTJB
NzkwMDA0RjA1NyAvKiBDaHJvbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDgyNDA4MEFGOTNB
RUIwMDA0RjA1NyAvKiBDaHJvbWVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjUxNzIsNiAr
MjUxNzksNyBAQAogCQkJCTkzMjZEQzBDMDlEQUQ1RDYwMEFGQzg0NyAvKiBDaGFyc2V0RGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RCMTEyNTFGMTJEMDAzRUYyNjkgLyogQ2hlY2ti
b3hJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGOTI1NDQwRjdFRjVCODAwN0Uz
N0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDYxOUEz
MDcxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTREODIzOEIwQUY5MkRGNjAwMDRGMDU3IC8qIENocm9tZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBQkFGMjIwODBDMDNCMUM3MDBCMEJDRjAgLyogQ2hyb21l
TWFjLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0
YXRpb25TY29wZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzc5YTkwMzliY2EzMGMzOGJiNTYyYTI0NTcwYWNl
MjNkMmJhYTBlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExp
c3RNdXRhdGlvblNjb3BlLmNwcApAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisKKyNpbmNsdWRlICJDaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTm9k
ZS5oIgorI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCisvLyBDaGlsZExpc3RN
dXRhdGlvbkFjY3VtdWxhdG9yIGV4cGVjdHMgdGhhdCBhbGwgcmVtb3ZhbHMgZnJvbSBhIHBhcmVu
dCB0YWtlIHBsYWNlIGluIG9yZGVyCisvLyBhbmQgcHJlY2VkZSBhbnkgYWRkaXRpb25zLiBJZiB0
aGlzIGlzIHZpb2xhdGVkIChpLmUuIGJlY2F1c2Ugb2YgY29kZSBjaGFuZ2VzIGVsc2V3aGVyZQor
Ly8gaW4gV2ViQ29yZSkgaXQgd2lsbCBsaWtlbHkgcmVzdWx0IGluIGJvdGggKGEpIEFTU0VSVGlv
bnMgZmFpbGluZywgYW5kIChiKSBtdXRhdGlvbiByZWNvcmRzCisvLyBiZWluZyBlbnF1ZXVlZCBm
b3IgZGVsaXZlcnkgYmVmb3JlIHRoZSBvdXRlci1tb3N0IHNjb3BlIGNsb3Nlcy4KK2NsYXNzIENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IpOworcHVibGljOgorICAgIENoaWxkTGlzdE11dGF0
aW9uQWNjdW11bGF0b3IoUGFzc1JlZlB0cjxOb2RlPiwgVmVjdG9yPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIqPiYpOworICAgIH5DaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKCk7CisKKyAgICB2
b2lkIGNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hp
bGQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgYm9vbCBpc0VtcHR5KCk7CisgICAg
Ym9vbCBpc0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOworICAgIGJvb2wgaXNSZW1vdmVkTm9kZUlu
T3JkZXIoTm9kZSopOworICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKKworICAgIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4g
bV9hZGRlZE5vZGVzOworICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzU2libGluZzsKKyAgICBS
ZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKKyAgICBSZWZQdHI8Tm9kZT4gbV9sYXN0QWRkZWQ7
CisKKyAgICBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOworfTsK
KworY2xhc3MgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKTsKK3B1YmxpYzoKKyAgICB+TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXIoKTsKKworICAgIHN0YXRpYyBNdXRhdGlvbkFjY3VtdWxhdGlv
blJvdXRlciogaW5zdGFuY2UoKTsKKworICAgIHZvaWQgaW5jcmVtZW50U2NvcGluZ0xldmVsKE5v
ZGUqKTsKKyAgICB2b2lkIGRlY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7CisKKyAgICB2b2lk
IGNoaWxkQWRkZWQoTm9kZSosIFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92
ZUNoaWxkKE5vZGUqLCBQYXNzUmVmUHRyPE5vZGU+KTsKKworcHJpdmF0ZToKKyAgICBNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcigpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IFNjb3BpbmdMZXZlbE1hcDsKKyAg
ICBTY29waW5nTGV2ZWxNYXAgbV9zY29waW5nTGV2ZWxzOworICAgIEhhc2hNYXA8Tm9kZSosIENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IqPiBtX2FjY3VtdWxhdGlvbnM7CisKKyAgICBzdGF0
aWMgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIHNfaW5zdGFuY2U7Cit9OworCitDaGlsZExp
c3RNdXRhdGlvbkFjY3VtdWxhdG9yOjpDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NS
ZWZQdHI8Tm9kZT4gdGFyZ2V0LCBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+JiBvYnNl
cnZlcnMpCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCit7CisgICAgbV9vYnNlcnZlcnMuc3dhcChv
YnNlcnZlcnMpOworICAgIGNsZWFyKCk7Cit9CisKK0NoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I6On5DaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKCkKK3sKKyAgICBBU1NFUlQoaXNFbXB0
eSgpKTsKK30KKworYm9vbCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjppc0FkZGVkTm9k
ZUluT3JkZXIoTm9kZSogY2hpbGQpCit7CisgICAgcmV0dXJuIGlzRW1wdHkoKSB8fCAobV9sYXN0
QWRkZWQgPT0gY2hpbGQtPnByZXZpb3VzU2libGluZygpICYmIG1fbmV4dFNpYmxpbmcgPT0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3sKKyAgICBSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBwcnBDaGlsZDsKKworICAgIGlmICghaXNBZGRlZE5vZGVJbk9yZGVyKGNo
aWxkLmdldCgpKSkKKyAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CisKKyAgICBpZiAo
aXNFbXB0eSgpKSB7CisgICAgICAgIG1fcHJldmlvdXNTaWJsaW5nID0gY2hpbGQtPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgfQorCisgICAgbV9hZGRlZE5vZGVzLmFwcGVuZChjaGlsZCk7CisgICAgbV9sYXN0QWRk
ZWQgPSBjaGlsZDsKK30KKworYm9vbCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjppc1Jl
bW92ZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKK3sKKyAgICByZXR1cm4gaXNFbXB0eSgpIHx8
IG1fbmV4dFNpYmxpbmcuZ2V0KCkgPT0gY2hpbGQ7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRp
b25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQp
Cit7CisgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CisKKyAgICBBU1NFUlQobV9h
ZGRlZE5vZGVzLmlzRW1wdHkoKSAmJiBpc1JlbW92ZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkp
OworCisgICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgpIHx8ICFpc1JlbW92ZWROb2RlSW5P
cmRlcihjaGlsZC5nZXQoKSkpCisgICAgICAgIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworCisg
ICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICBtX3ByZXZpb3VzU2libGluZyA9IGNoaWxkLT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2li
bGluZygpOworICAgICAgICBtX2xhc3RBZGRlZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygp
OworCisgICAgbV9yZW1vdmVkTm9kZXMuYXBwZW5kKGNoaWxkKTsKK30KKwordm9pZCBDaGlsZExp
c3RNdXRhdGlvbkFjY3VtdWxhdG9yOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoKQoreworICAgIEFT
U0VSVCghaXNFbXB0eSgpKTsKKyAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIGNsZWFyKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11
dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdCgKKyAgICAgICAgICAgIG1f
dGFyZ2V0LCBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9hZGRlZE5vZGVzKSwgU3RhdGljTm9kZUxp
c3Q6OmFkb3B0KG1fcmVtb3ZlZE5vZGVzKSwgbV9wcmV2aW91c1NpYmxpbmcsIG1fbmV4dFNpYmxp
bmcpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29ic2VydmVycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9vYnNlcnZlcnNbaV0tPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlv
bik7CisKKyAgICBjbGVhcigpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I6OmNsZWFyKCkKK3sKKyAgICBpZiAoIW1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV9yZW1vdmVkTm9kZXMuY2xlYXIoKTsKKyAgICBpZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5
KCkpCisgICAgICAgIG1fYWRkZWROb2Rlcy5jbGVhcigpOworICAgIG1fcHJldmlvdXNTaWJsaW5n
ID0gMDsKKyAgICBtX25leHRTaWJsaW5nID0gMDsKKyAgICBtX2xhc3RBZGRlZCA9IDA7Cit9CisK
K2Jvb2wgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNFbXB0eSgpCit7CisgICAgcmV0
dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9kZXMuaXNFbXB0eSgpOwor
fQorCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0
ZXI6OnNfaW5zdGFuY2UgPSAwOworCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXIoKQoreworfQorCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRl
cjo6fk11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkKK3sKKyAgICBBU1NFUlQobV9zY29waW5n
TGV2ZWxzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYWNjdW11bGF0aW9ucy5pc0VtcHR5KCkp
OworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbml0aWFsaXplKCkKK3sK
KyAgICBBU1NFUlQoIXNfaW5zdGFuY2UpOworICAgIHNfaW5zdGFuY2UgPSBhZG9wdFB0cihuZXcg
TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIpLmxlYWtQdHIoKTsKK30KKworCitNdXRhdGlvbkFj
Y3VtdWxhdGlvblJvdXRlciogTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCkK
K3sKKyAgICBpZiAoIXNfaW5zdGFuY2UpCisgICAgICAgIGluaXRpYWxpemUoKTsKKworICAgIHJl
dHVybiBzX2luc3RhbmNlOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpj
aGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBI
YXNoTWFwPE5vZGUqLCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOworICAgIEFTU0VSVChpdGVyICE9IG1f
YWNjdW11bGF0aW9ucy5lbmQoKSk7CisKKyAgICBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9y
KiByZWNvcmQgPSBpdGVyLT5zZWNvbmQ7CisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3Jk
LT5jaGlsZEFkZGVkKGNoaWxkKTsKK30KKwordm9pZCBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRl
cjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkK
K3sKKyAgICBIYXNoTWFwPE5vZGUqLCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOworICAgIEFTU0VSVChp
dGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7CisKKyAgICBDaGlsZExpc3RNdXRhdGlvbkFj
Y3VtdWxhdG9yKiByZWNvcmQgPSBpdGVyLT5zZWNvbmQ7CisgICAgaWYgKHJlY29yZCkKKyAgICAg
ICAgcmVjb3JkLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOworfQorCit2b2lkIE11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQorewor
ICAgIHBhaXI8U2NvcGluZ0xldmVsTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9zY29w
aW5nTGV2ZWxzLmFkZCh0YXJnZXQsIDEpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAg
ICAgICArKyhyZXN1bHQuZmlyc3QtPnNlY29uZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICB0YXJn
ZXQtPnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCk7CisgICAgaWYgKG9ic2VydmVycy5pc0VtcHR5KCkp
CisgICAgICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCAwKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCBuZXcgQ2hpbGRMaXN0TXV0YXRpb25BY2N1
bXVsYXRvcih0YXJnZXQsIG9ic2VydmVycykpOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0
aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQoreworICAgIFNj
b3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5kKHRhcmdl
dCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKKworICAgIC0t
KGl0ZXItPnNlY29uZCk7CisgICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIE93blB0cjxDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yPiByZWNvcmQgPSBh
ZG9wdFB0cihtX2FjY3VtdWxhdGlvbnMudGFrZSh0YXJnZXQpKTsKKyAgICBtX3Njb3BpbmdMZXZl
bHMucmVtb3ZlKGl0ZXIpOworCisgICAgaWYgKHJlY29yZCkKKyAgICAgICAgcmVjb3JkLT5lbnF1
ZXVlTXV0YXRpb25SZWNvcmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworQ2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZShQYXNzUmVmUHRyPE5vZGU+IHRhcmdl
dCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKKyAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6aW5zdGFuY2UoKS0+aW5jcmVtZW50U2NvcGluZ0xldmVsKG1fdGFyZ2V0LmdldCgpKTsK
K30KKworQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoKQor
eworICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT5kZWNyZW1lbnRT
Y29waW5nTGV2ZWwobV90YXJnZXQuZ2V0KCkpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+Y2hpbGRBZGRlZChtX3RhcmdldC5nZXQo
KSwgY2hpbGQpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6OndpbGxSZW1vdmVD
aGlsZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQoreworICAgIE11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyOjppbnN0YW5jZSgpLT53aWxsUmVtb3ZlQ2hpbGQobV90YXJnZXQuZ2V0KCksIGNoaWxk
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFmMmY4YzQ5MWNkNmE4ZGExYzI4NTAwZGE5NGU3ZmQ1OWMwMWVhMzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENoaWxkTGlzdE11dGF0aW9uU2NvcGVfaAor
I2RlZmluZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlX2gKKworI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBOb2RlOworCitjbGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3BlKTsKK3B1YmxpYzoK
KyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKKyAg
ICB+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSgpOworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NS
ZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4p
OworCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisK
KyNlbmRpZiAvLyBDaGlsZExpc3RNdXRhdGlvblNjb3BlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAppbmRleCAzZWE0OTkzNjkzNTc0OWIxMzE5MmI3NjM0MWQ1MDliMTUzOGU0YzBj
Li5jNjg1NGMzZjkzYTdlMDc0MjFkZTBhMDQyZTMzMTExM2NjNjUxMDkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJCZWZv
cmVMb2FkRXZlbnQuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIkNoaWxk
TGlzdE11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlQWxnb3JpdGhtcy5o
IgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCkBAIC0xNDEsNiArMTQyLDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6aW5zZXJ0QmVm
b3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlCiAgICAg
aWYgKHJlZkNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA9PSBuZXdDaGlsZCB8fCByZWZDaGlsZCA9
PSBuZXdDaGlsZCkgLy8gbm90aGluZyB0byBkbwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBt
dXRhdGlvbih0aGlzKTsKKyNlbmRpZgorCiAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSByZWZDaGls
ZDsKICAgICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGRQcmV2aW91c1NpYmxpbmcgPSByZWZDaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBp
dCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkgewpAQCAtMjcy
LDYgKzI3NywxMCBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNzUmVmUHRy
PE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExp
c3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCisKICAgICBSZWZQdHI8Tm9k
ZT4gcHJldiA9IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBSZWZQdHI8Tm9kZT4g
bmV4dCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpOwogCkBAIC00MDAsNiArNDA5LDEwIEBAIHN0
YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWluZXIpCiAg
ICAgTm9kZVZlY3RvciBjaGlsZHJlbjsKICAgICBjb2xsZWN0Tm9kZXMoY29udGFpbmVyLCBjaGls
ZHJlbik7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11
dGF0aW9uU2NvcGUgbXV0YXRpb24oY29udGFpbmVyKTsKKyNlbmRpZgorCiAgICAgZm9yIChOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxk
cmVuLmVuZCgpOyBpdCsrKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOwogICAg
ICAgICAvLyBmaXJlIHJlbW92ZWQgZnJvbSBkb2N1bWVudCBtdXRhdGlvbiBldmVudHMuCkBAIC02
MTEsNiArNjI0LDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlB0
cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvCiAgICAgaWYgKHRhcmdldHMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlzKTsKKyNl
bmRpZgorCiAgICAgLy8gTm93IGFjdHVhbGx5IGFkZCB0aGUgY2hpbGQocmVuKQogICAgIFJlZlB0
cjxOb2RlPiBwcmV2ID0gbGFzdENoaWxkKCk7CiAgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkg
ewpAQCAtMTA5NSw2ICsxMTEyLDEzIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRp
b25FdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsKICAgICBS
ZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKKyNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5wYXJlbnROb2RlKCkpIHsKKyAgICAg
ICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnROb2RlKCkpOworICAg
ICAgICBtdXRhdGlvbi5jaGlsZEFkZGVkKGMpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKGMt
PnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01O
T0RFSU5TRVJURURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11
dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2VydGVkRXZlbnQsIHRy
dWUsIGMtPnBhcmVudE5vZGUoKSkpOwogCkBAIC0xMTE2LDYgKzExNDAsMTMgQEAgc3RhdGljIHZv
aWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5v
ZGU+IGMgPSBjaGlsZDsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRv
Y3VtZW50KCk7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGlmIChjLT5w
YXJlbnROb2RlKCkpIHsKKyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihj
LT5wYXJlbnROb2RlKCkpOworICAgICAgICBtdXRhdGlvbi53aWxsUmVtb3ZlQ2hpbGQoYyk7Cisg
ICAgfQorI2VuZGlmCisKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVu
dHMKICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUo
RG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSKSkKICAgICAgICAgYy0+ZGlzcGF0Y2hT
Y29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1v
dmVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmlu
ZGV4IGQ2OTliMTkxMTZlODMxZDczZmQ1NTIzYTg0ZWFhMmViNTg2ZmVmNTcuLjMzZjM2NTU0OWNk
NjA1NmExZGVlMzEyODc3YWRkZWE4ZmRiZjQ5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAg
LTYyNSw4ICs2MjUsOCBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVj
b3JkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbQogICAgICAgICByZXR1cm47
CiAKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6
OmNyZWF0ZUF0dHJpYnV0ZXMoZWxlbWVudCwgbmFtZSk7Ci0gICAgZm9yIChWZWN0b3I8V2ViS2l0
TXV0YXRpb25PYnNlcnZlcio+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0
ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPmVucXVldWVN
dXRhdGlvblJlY29yZChtdXRhdGlvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNl
cnZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+ZW5xdWV1ZU11dGF0aW9u
UmVjb3JkKG11dGF0aW9uKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMjNmZjdm
ZTIxYTgzZjIzMWViNjhkYzdjYzJmNGE0MTY5ZGQ2Y2M0NS4uOTE1YTVkYzFkYzA5YzY0NTMzZDk1
YWEyNTkzMTBmMjc5YWJhMjhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCisjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIgogI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNTU1Bh
cnNlci5oIgpAQCAtMjEzMCw2ICsyMTMxLDkgQEAgdm9pZCBOb2RlOjpzZXRUZXh0Q29udGVudChj
b25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBjYXNlIERPQ1VN
RU5UX0ZSQUdNRU5UX05PREU6CiAgICAgICAgIGNhc2UgU0hBRE9XX1JPT1RfTk9ERTogewogICAg
ICAgICAgICAgQ29udGFpbmVyTm9kZSogY29udGFpbmVyID0gdG9Db250YWluZXJOb2RlKHRoaXMp
OworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgICAgICAgICBDaGlsZExpc3RN
dXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCiAgICAgICAgICAgICBjb250YWlu
ZXItPnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRl
VGV4dE5vZGUodGV4dCksIGVjKTsKQEAgLTI3MDAsOSArMjcwNCw5IEBAIHZvaWQgTm9kZTo6cmVn
aXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKj4mIG9iCiAgICAgaWYgKCFvYnNlcnZlckVudHJpZXMgfHwgb2JzZXJ2ZXJFbnRyaWVzLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoVmVjdG9yPE11dGF0aW9uT2Jz
ZXJ2ZXJFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlckVudHJpZXMtPmJlZ2luKCk7IGl0
ZXIgIT0gb2JzZXJ2ZXJFbnRyaWVzLT5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVy
LT5tYXRjaGVzKHR5cGUpKQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChpdGVyLT5vYnNl
cnZlci5nZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlckVudHJpZXMt
PnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgoKm9ic2VydmVyRW50cmllcylbaV0ubWF0Y2hl
cyh0eXBlKSkKKyAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoKCpvYnNlcnZlckVudHJpZXMp
W2ldLm9ic2VydmVyLmdldCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA3ZDczNmFlN2JhYzY0YzQ1ODhmY2JhMmZj
M2QzYjc3NTI5N2JkZTE0Li44M2YxNTk5MGVhMmJlY2EzMzliYjBhNzNjYzI5NjliYTRkZjI5ZmE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCkBA
IC02NSw4ICs2NSw4IEBAIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2Rl
KiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zCiAKIHZvaWQgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgZm9yIChWZWN0b3I8Tm9kZSo+Ojpp
dGVyYXRvciBpdGVyID0gbV9vYnNlcnZlZE5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gIG1fb2JzZXJ2
ZWROb2Rlcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT51bnJlZ2lzdGVyTXV0YXRp
b25PYnNlcnZlcih0aGlzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb2JzZXJ2ZWRO
b2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlZE5vZGVzW2ldLT51bnJlZ2lzdGVy
TXV0YXRpb25PYnNlcnZlcih0aGlzKTsKIAogICAgIG1fb2JzZXJ2ZWROb2Rlcy5jbGVhcigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCA1OTEyZGEwN2Q3NmE0OTJjNmQ3
MzI4OGExNDM0ZGQxMzFlMzE5ODA0Li4yYzliN2E1YTM1OTZmMTZjMzdkYzJmNTk5MDc1YmQzNDBh
MzU4MjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRp
b25TY29wZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKQEAgLTMxNyw2ICszMTgsMTAgQEAgc3Rh
dGljIGlubGluZSBib29sIGhhc09uZVRleHRDaGlsZChDb250YWluZXJOb2RlKiBub2RlKQogCiBz
dGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoSFRNTEVsZW1lbnQqIGVsZW1l
bnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZSBtdXRhdGlvbihlbGVtZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKCFmcmFnbWVu
dC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPnJlbW92ZUNoaWxkcmVuKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMzOCw2ICszNDMsMTAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZUNo
aWxkcmVuV2l0aEZyYWdtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPERvY3Vt
ZW4KIAogc3RhdGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aFRleHQoSFRNTEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYgRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0
aW9uKGVsZW1lbnQpOworI2VuZGlmCisKICAgICBpZiAoaGFzT25lVGV4dENoaWxkKGVsZW1lbnQp
KSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50LT5maXJzdENoaWxkKCkpLT5z
ZXREYXRhKHRleHQsIGVjKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM5YjUxODI3NDA1ZGMx
NDg4YTFjMzY3NjBkYmNhOTZjNWRhYmU4ODAuLjI0ZjgzMzJmZjkyMGMxNzkwOWE3MmFlMTY4Zjgy
ODQzZDhkYmFkM2MgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMC0xOCAgUmFmYWVsIFdl
aW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2Vy
dmVyc10gSW1wbGVtZW50IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBmb3IgY2hpbGRM
aXN0IGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbDoKKyAgICAgICAgKiBm
YXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC5odG1sOiBBZGRlZC4KKwogMjAx
MS0xMC0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIGZpeCBy
ZXBhaW50IGJ1Z3MgaW4gbmV3IGZsZXhib3gKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAppbmRleCA5ODY5ZmUy
ZWU1YjAyYzBlNzc2OGQ4MWEzMzJhYWZkMzg2NmVjYzgxLi4yZjg1OThkZmY3YTAyMGVlM2M3Mjdl
OWUzN2Y5ODZhNmEyODE4Njk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9u
L29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC0yMyw3ICsyMyw3IEBA
IFBBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCiBUZXN0aW5nIHRo
YXQgb2JzZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiYXR0cmlidXRlcyIgZG9lcyBub3QgcmVz
dWx0IGluIGhlYXJpbmcgYWJvdXQgYXR0cmlidXRlIGNoYW5nZXMuCiBQQVNTIG11dGF0aW9ucyBp
cyBudWxsCiAKLVRlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRo
ZSBzYW1lIG9ic2VydmluZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMu
CitUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBv
YnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuCiBQQVNTIGNh
bGxzIGlzIDEKIFBBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCiBQQVNTIG11dGF0aW9uc1swXS50
eXBlIGlzICJhdHRyaWJ1dGVzIgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlv
bi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKaW5kZXggM2NiMjdmMzlhZmI5MzM0NGFkYjEzZjdiOGM1Zjhh
NGVhZTE4ZDY1Mi4uYTA3ZDRiZTVlMWY0NjMzYjE4NTBiZDQwYzVmOTI2NTkxZDQ0ZjkyNiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1s
CkBAIC0xMCw4ICsxMCw3IEBACiA8c2NyaXB0PgogCiB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7Ci12YXIgbXV0YXRpb25zOwotdmFyIG11dGF0aW9uczI7Cit2YXIgbXV0YXRpb25zLCBtdXRh
dGlvbnMyOwogdmFyIGNhbGxzOwogCiBmdW5jdGlvbiB0ZXN0QmFzaWMoKSB7CkBAIC0xMDcsNyAr
MTA2LDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgewogICAgIHZhciBv
YnNlcnZlcjsKIAogICAgIGZ1bmN0aW9uIHN0YXJ0KCkgewotICAgICAgICBkZWJ1ZygnVGVzdGlu
ZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhlIHNhbWUgb2JzZXJ2aW5n
IGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4nKTsKKyAgICAgICAgZGVi
dWcoJ1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1l
IG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4nKTsKICAg
ICAKIAkJY2FsbHMgPSAwOwogICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yY2UxMjQxN2Y5Zjk2OTI1MDk4YzQyMmUxNDVmODUzZDdjNDA4N2UxCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxk
TGlzdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5MSBAQAorVGVzdCBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyLm9ic2VydmUgb24gYXR0cmlidXRlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBjaGlsZExpc3Qgb2JzZXJ2YXRpb24uCisu
Li5jYW4gY2hpbGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsCitQQVNTIG11dGF0aW9u
cy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFT
UyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MQorLi4ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpIHNo
b3VsZCBwcmV2ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlv
bnMgaXMgbnVsbAorLi4ucmUtb2JzZXJ2aW5nIGFmdGVyIGRpc2Nvbm5lY3Qgd29ya3Mgd2l0aCB0
aGUgc2FtZSBvYnNlcnZlci4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0
aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9k
ZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXSBpcyByZW1v
dmVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRh
dGlvbnNbMV0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1sxXS5yZW1v
dmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjIKKworVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRo
b3V0IHNwZWNpZnlpbmcgImNoaWxkTGlzdCIgZG9lcyBub3QgcmVzdWx0IGluIGhlYXJpbmcgYWJv
dXQgY2hpbGRMaXN0IGNoYW5nZXMuCitQQVNTIG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3Rpbmcg
dGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhh
cyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4KK1BBU1MgY2FsbHMgaXMgMQor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNo
aWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKworVGVzdGluZyB0aGF0IG11bHRpcGxl
IG9ic2VydmVycyBjYW4gYmUgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIG5vZGUgYW5kIGJvdGggcmVj
ZWl2ZSBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlv
bnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnMyLmxlbmd0aCBpcyAxCitQ
QVNTIG11dGF0aW9uczJbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorCitUZXN0aW5nIHRoYXQgaW5u
ZXJUZXh0IGFuZCBpbm5lckhUTUwgYWx3YXlzIHJlc3VsdCBpbiBhIHNpbmdsZSBjaGlsZExpc3Qg
bXV0YXRpb24uCisuLi5pbm5lckhUTUwKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNT
IG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRl
ZE5vZGVzLmxlbmd0aCBpcyAzCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIGFk
ZGVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXSBpcyBhZGRlZERpdjIKK1BB
U1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMl0gaXMgYWRkZWREaXYzCitQQVNTIG11dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWRO
b2Rlc1swXSBpcyByZW1vdmVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzFd
IGlzIHJlbW92ZWREaXYyCisuLi5pbm5lclRleHQKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAx
CitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1sw
XS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMu
bGVuZ3RoIGlzIDMKKworVGVzdGluZyB0aGF0IHJlcGxhY2VDaGlsZCByZXN1bHRzIGluIG1pbmlt
YWwgY2hpbGRMaXN0IG11dGF0aW9ucy4KKy4uLnNpbXBsZSByZXBsYWNlIGNoaWxkCitQQVNTIG11
dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0
IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlv
bnNbMF0uYWRkZWROb2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdIGlz
IHJlbW92ZWREaXYxCisuLi5yZXBsYWNlIHdpdGggRG9jdW1lbnRGcmFnbWVudAorUEFTUyBtdXRh
dGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIK
K1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25z
WzBdLmFkZGVkTm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5v
ZGVzWzFdIGlzIGFkZGVkRGl2MgorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0
aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEK
KworVGVzdGluZyB0aGF0IGluc2VydEJlZm9yZSByZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0
IG11dGF0aW9ucy4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1sw
XS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0
aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIGFkZGVkRGl2MQorUEFT
UyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXSBpcyBhZGRlZERpdjIKK1BBU1MgbXV0YXRpb25z
WzBdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMAorCitUZXN0aW5nIHRoYXQgYXBwZW5kQ2hpbGQg
cmVzdWx0cyBpbiBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucy5s
ZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBt
dXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0uYWRk
ZWROb2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0g
aXMgYWRkZWREaXYyCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDAK
KworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMTZlY2JkOGUzMGRiYWY5YTc5NjBiYjIwYzJjMjk0NmIyZWIwNGZiCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC5o
dG1sCkBAIC0wLDAgKzEsNDA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzx0aXRsZT48L3RpdGxlPgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD1kZXNjcmlwdGlvbj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQ+CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3ZhciBtdXRhdGlvbnMs
IG11dGF0aW9uczI7Cit2YXIgY2FsbHM7Cit2YXIgZGl2LCByZW1vdmVkRGl2MSwgcmVtb3ZlZERp
djIsIGFkZGVkRGl2MSwgYWRkZWREaXYyLCBhZGRlZERpdjM7CisKK2Z1bmN0aW9uIHRlc3RCYXNp
YygpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBiYXNpYyBhc3BlY3RzIG9mIGNoaWxkTGlz
dCBvYnNlcnZhdGlvbi4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBk
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBu
ZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRh
dGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwg
eyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIHJlbW92ZWREaXYxID0gZGl2LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChj
aGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNr
RGlzY29ubmVjdEFuZE11dGF0ZSgpIHsKKyAgICAgICAgZGVidWcoJy4uLmNhbiBjaGlsZExpc3Qg
Y2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9k
ZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5v
ZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAg
ICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRp
bWVvdXQoY2hlY2tOb3REZWxpdmVyZWRBbmRNdXRhdGVNdWx0aXBsZSwgMCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gY2hlY2tOb3REZWxpdmVyZWRBbmRNdXRhdGVNdWx0aXBsZSgpIHsKKyAgICAg
ICAgZGVidWcoJy4uLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSBzaG91bGQgcHJldmVudCBmdXJ0aGVy
IGRlbGl2ZXJ5IG9mIG11dGF0aW9ucy4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
JywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0
cnVlIH0pOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RD
aGlsZCk7CisgICAgICAgIHJlbW92ZWREaXYyID0gZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENo
aWxkKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25u
ZWN0IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuJyk7CisKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5y
ZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1sxXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMV0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMV0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYyJyk7CisgICAgICAgIG9i
c2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0
VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RXcm9uZ1R5
cGUoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBz
dGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBvYnNlcnZpbmcgd2l0aG91dCBz
cGVjaWZ5aW5nICJjaGlsZExpc3QiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGNo
aWxkTGlzdCBjaGFuZ2VzLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAg
IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9
IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11
dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2
LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIGRp
di5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNl
dFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5k
aXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsK
KyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3Ry
YXRpb24oKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlv
biBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhl
IHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0
dGluZyB0aGUgb3B0aW9ucy4nKTsKKworICAgICAgICBjYWxscyA9IDA7CisgICAgICAgIG11dGF0
aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9u
KG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgICAgICBjYWxscysrOwor
ICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6
IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
ZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja0Rpc2Nv
bm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGlzY29ubmVj
dEFuZE11dGF0ZSgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ2NhbGxzJywgJzEnKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVs
bDsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlLCBjaGFy
YWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRy
aWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywg
J251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1Zygn
Jyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwor
ZnVuY3Rpb24gdGVzdE11bHRpcGxlT2JzZXJ2ZXJzKCkgeworICAgIHZhciBkaXY7CisgICAgdmFy
IG9ic2VydmVyOworICAgIHZhciBvYnNlcnZlcjI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsK
KyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJl
Z2lzdGVyZWQgdG8gYSBnaXZlbiBub2RlIGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25zLicpOwor
ICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9
KTsKKyAgICAgICAgb2JzZXJ2ZXIyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rp
b24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zMiA9IG07CisgICAgICAgIH0pOworICAgICAg
ICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIG9i
c2VydmVyMi5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRp
bWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnMyLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMyWzBd
LnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICBvYnNlcnZlcjIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24g
dGVzdElubmVySFRNTEFuZElubmVyVGV4dCgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNl
cnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0
aGF0IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1bHQgaW4gYSBzaW5nbGUgY2hp
bGRMaXN0IG11dGF0aW9uLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAg
IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYuaW5uZXJI
VE1MID0gJzxzcGFuPkZvbzwvc3Bhbj48ZGl2PkJhcjwvZGl2Pic7CisgICAgICAgIHJlbW92ZWRE
aXYxID0gZGl2LmZpcnN0Q2hpbGQ7CisgICAgICAgIHJlbW92ZWREaXYyID0gcmVtb3ZlZERpdjEu
bmV4dFNpYmxpbmc7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOwor
ICAgICAgICBkaXYuaW5uZXJIVE1MID0gJ2ZvbzxpbWcgc3JjPSJiYXIucG5nIj48cD5CYXo8L3A+
JzsKKyAgICAgICAgYWRkZWREaXYxID0gZGl2LmNoaWxkTm9kZXNbMF07CisgICAgICAgIGFkZGVk
RGl2MiA9IGRpdi5jaGlsZE5vZGVzWzFdOworICAgICAgICBhZGRlZERpdjMgPSBkaXYuY2hpbGRO
b2Rlc1syXTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja0lubmVySFRNTCwgMCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gY2hlY2tJbm5lckhUTUwoKSB7CisgICAgICAgIGRlYnVnKCcuLi5pbm5l
ckhUTUwnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywgJzMnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywgJ2FkZGVkRGl2MScp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0nLCAnYWRkZWRE
aXYyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1syXScsICdh
ZGRlZERpdjMnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMu
bGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9k
ZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5y
ZW1vdmVkTm9kZXNbMV0nLCAncmVtb3ZlZERpdjInKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBu
dWxsOworICAgICAgICBkaXYuaW5uZXJUZXh0ID0gJ2Zvbyc7CisgICAgICAgIHNldFRpbWVvdXQo
ZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRl
YnVnKCcuLi5pbm5lclRleHQnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0
aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRM
aXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3Ro
JywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVu
Z3RoJywgJzMnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1
ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30K
KworZnVuY3Rpb24gdGVzdFJlcGxhY2VDaGlsZCgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBv
YnNlcnZlcjsKKyAgICB2YXIgZnJhZ21lbnQ7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAg
ICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZXBsYWNlQ2hpbGQgcmVzdWx0cyBpbiBtaW5pbWFs
IGNoaWxkTGlzdCBtdXRhdGlvbnMuJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAg
ICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRpdi5p
bm5lckhUTUwgPSAnPHNwYW4+Rm9vPC9zcGFuPjxkaXY+QmFyPC9kaXY+JzsKKyAgICAgICAgcmVt
b3ZlZERpdjEgPSBkaXYuZmlyc3RDaGlsZDsKKworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9
IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxk
TGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgYWRkZWREaXYxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7CisgICAgICAgIGRpdi5yZXBsYWNlQ2hpbGQoYWRkZWREaXYxLCBkaXYuZmlyc3RD
aGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tSZXBsYWNlV2l0aE5vZGUsIDApOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNoZWNrUmVwbGFjZVdpdGhOb2RlKCkgeworICAgICAgICBkZWJ1
ZygnLi4uc2ltcGxlIHJlcGxhY2UgY2hpbGQnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9k
ZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5v
ZGVzWzBdJywgJ2FkZGVkRGl2MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG11dGF0aW9ucyA9
IG51bGw7CisgICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOworICAgICAgICBhZGRlZERpdjEgPSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIGFkZGVkRGl2MiA9IGZyYWdtZW50LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgcmVtb3ZlZERp
djEgPSBkaXYuZmlyc3RDaGlsZDsKKworICAgICAgICBkaXYucmVwbGFjZUNoaWxkKGZyYWdtZW50
LCByZW1vdmVkRGl2MSk7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlcGxhY2Ugd2l0
aCBEb2N1bWVudEZyYWdtZW50Jyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5n
dGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxk
TGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0
aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXScs
ICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
WzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG9ic2VydmVyLmRpc2Nv
bm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAg
IH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbnNlcnRCZWZvcmUoKSB7Cisg
ICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGZyYWdtZW50OworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgaW5zZXJ0QmVm
b3JlIHJlc3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLicpOworCisgICAgICAg
IG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj4nOworICAg
ICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAg
ICAgYWRkZWREaXYxID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpOworICAgICAgICBhZGRlZERpdjIgPSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMg
PSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGls
ZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIGRpdi5m
aXJzdENoaWxkKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworCisg
ICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0
aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRM
aXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3Ro
JywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywg
J2FkZGVkRGl2MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNb
MV0nLCAnYWRkZWREaXYyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3Zl
ZE5vZGVzLmxlbmd0aCcsICcwJyk7CisKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAg
c3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEFwcGVuZENoaWxkKCkgeworICAgIHZhciBkaXY7
CisgICAgdmFyIG9ic2VydmVyOworICAgIHZhciBmcmFnbWVudDsKKworICAgIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGFwcGVuZENoaWxkIHJlc3VsdHMg
aW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLicpOworCisgICAgICAgIG11dGF0aW9ucyA9
IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAg
ICAgICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj4nOworICAgICAgICBmcmFnbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgYWRkZWREaXYx
ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwor
ICAgICAgICBhZGRlZERpdjIgPSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSk7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAg
ICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUg
fSk7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisgICAgICAgIHNldFRpbWVv
dXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzAnKTsKKworICAgICAg
ICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVu
TmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCit2YXIgdGVzdHMgPSBbdGVz
dEJhc2ljLCB0ZXN0V3JvbmdUeXBlLCB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24sIHRlc3RNdWx0
aXBsZU9ic2VydmVycywgdGVzdElubmVySFRNTEFuZElubmVyVGV4dCwgdGVzdFJlcGxhY2VDaGls
ZCwgdGVzdEluc2VydEJlZm9yZSwgdGVzdEFwcGVuZENoaWxkXTsKK3ZhciB0ZXN0SW5kZXggPSAw
OworIAorZnVuY3Rpb24gcnVuTmV4dFRlc3QoKSB7CisgICAgaWYgKHRlc3RJbmRleCA8IHRlc3Rz
Lmxlbmd0aCkKKyAgICAgICAgdGVzdHNbdGVzdEluZGV4KytdKCk7CisgICAgZWxzZQorICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZGVzY3JpcHRpb24oJ1Rlc3QgV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuJyk7CisKK2lmICghd2luZG93LldlYktpdE11
dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpJyk7CitlbHNlCisgICAgcnVuTmV4dFRlc3QoKTsKKwordmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111991</attachid>
            <date>2011-10-21 11:07:54 -0700</date>
            <delta_ts>2011-10-21 12:21:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111021110753.patch</filename>
            <type>text/plain</type>
            <size>51204</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxMTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NjE0MjVkNmE4YzM2MmNk
NWFkYzFmMzlhZTIzNzI4ODQ5MmFiODk0Li4xYjgwMjcxZmE1Y2ZjNDM3NTQ3MjMxYzY0ZjE5N2E3
ZDNlYjVlOWRjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Db250
YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6Omluc2VydEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0
Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlw
ZSk6CisgICAgICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICog
aHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5X
aXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQp
OgorCiAyMDExLTEwLTIxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAg
ICAgQ29sdW1uIHJ1bGVzIHBvc2l0aW9uZWQgaW5jb3JyZWN0bHkgaW4gdmVydGljYWwtcmwgYmxv
Y2sgd2l0aCBob3Jpem9udGFsIGJvcmRlciBvciBwYWRkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDVmYmNhMzJjZmNiODkyNWI3ZjNjOGI5ZTE3ZTMwOWQ3ZGZiNWZiNGMuLjMzNTZkNGNkNzU1
NmQ4MTg5OWUwZjQ3NWFiN2MzNTYyZjE3NjUwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01
MTMsNiArNTEzLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9DREFUQVNlY3Rpb24u
Y3BwCiAgICAgZG9tL0NoYXJhY3RlckRhdGEuY3BwCiAgICAgZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuY3BwCisgICAgZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCiAgICAgZG9tL0NoaWxk
Tm9kZUxpc3QuY3BwCiAgICAgZG9tL0NsYXNzTm9kZUxpc3QuY3BwCiAgICAgZG9tL0NsaWVudFJl
Y3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiMzc2ODU5ZDg4Y2QwMWYy
YzNmMzE0MGIwMzJjYzE1MTQ1NWE3NTdkLi44MmQxYzAwNWEzMzdjZGU3MWZmY2QyODRhZTIxMjBm
MDk1MTY4NTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTExMjIsNiArMTEy
Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3Rl
ckRhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5v
ZGVMaXN0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaCBcCiAJU291
cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAz
NDYxMzM1MmY2ZmYzZDFjNmM0M2RjOTRlNGU0ZWZkNmMxM2U3N2IyLi41NmI2MGNkNWFiMTVmY2Fl
YTg4ZDJkNzI3OTI1YTQ5Y2M2NDgxMWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01MTI3LDYgKzUx
MjcsOCBAQAogICAgICAgICAgICAgJ2RvbS9DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCcsCiAgICAgICAgICAgICAn
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwJywKKyAgICAgICAgICAgICdkb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5jcHAnLAorICAgICAgICAgICAgJ2RvbS9DaGlsZExpc3RNdXRhdGlvblNj
b3BlLmgnLAogICAgICAgICAgICAgJ2RvbS9DaGlsZE5vZGVMaXN0LmNwcCcsCiAgICAgICAgICAg
ICAnZG9tL0NoaWxkTm9kZUxpc3QuaCcsCiAgICAgICAgICAgICAnZG9tL0NsYXNzTm9kZUxpc3Qu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjVjMjM0Y2U2ZDQ0NGY1MmNhNWFjZmMxZTc0NjVlODY2
NDVmNjNlNS4uMGIyY2YxYjVkMDU5NGZiNjViZTVmZWNhOGRkZTcwNmQ2MDkwMmMwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTQ2NSw2ICs0NjUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vQ0RBVEFT
ZWN0aW9uLmNwcCBcCiAgICAgZG9tL0NoYXJhY3RlckRhdGEuY3BwIFwKICAgICBkb20vQ2hlY2tl
ZFJhZGlvQnV0dG9ucy5jcHAgXAorICAgIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBc
CiAgICAgZG9tL0NoaWxkTm9kZUxpc3QuY3BwIFwKICAgICBkb20vQ2xhc3NOb2RlTGlzdC5jcHAg
XAogICAgIGRvbS9DbGllbnRSZWN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDQ0NTc5MGJlODc3MTkyNjU5NDM0NDM0MTc2YmZjN2Vk
NzIzZGUyOTUuLjkwZjllMWU3M2E5NzRhNWNiZmI1MDBhMzY4ZGNlY2M5OThmNzk1ZjUgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Mzg3NCw2
ICs0Mzg3NCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxkb21cQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAiCisJCQkJPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxDaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGRvbVxDaGlsZE5vZGVMaXN0LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjUxNjJkMmYxZTA1NDQ2ZTFlMTY0YzkxNDIzNTRhZGQxMGU0ZjFmMi4uMzdh
OTk4OWE4OTU3NzM2NjRmMTAwNTI0OGNkOGEwZDFiN2M5ZDBlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTgwNyw2ICs1ODA3
LDggQEAKIAkJRDNBQTEwRjQxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0FBMTBGMjEy
M0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJRDNENEU5NzIx
MzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAg
LyogSFRNTFN1bW1hcnlFbGVtZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBDN0NGRTAwN0JB
NTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5
RWxlbWVudC5oICovOyB9OworCQlENjE5QTMwNzE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5jcHAgKi87IH07CisJCUQ2MTlBMzA4MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRh
dGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICov
OyB9OwogCQlENzBBRDY1NzEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU1MTNFMTM0
MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwICovOyB9OwogCQlENzBBRDY1ODEzRTEzNDJC
MDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9u
LmggKi87IH07CiAJCUQ4QjYxNTJGMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ4QjYxNTJFMTAzMjQ5NTEw
MEM4NTU0QSAvKiBDb29raWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTMxMzksNiArMTMxNDEsOCBAQAogCQlEM0FBMTBGMjEyM0E5OEFBMDA5
MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFRdWVyeU1hdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RDNENEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1NDAgLyog
SFRNTFN1bW1hcnlFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhU
TUxTdW1tYXJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENjE5QTMw
NTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8q
IENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJlZ2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQ3MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUmVnaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBD
b29raWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTAxNSw2ICsyMTAxOSw4IEBACiAJCQkJOTNFRUMx
RTYwOUMyODc3NzAwQzUxNUQxIC8qIENoYXJhY3RlckRhdGEuaWRsICovLAogCQkJCTkzRjkyNTQy
MEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmNwcCAqLywKIAkJCQk5M0Y5
MjU0MTBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oICovLAorCQkJCUQ2
MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCAqLywK
KwkJCQlENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5o
ICovLAogCQkJCUE4MTg3MjFBMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAq
LywKIAkJCQlBODE4NzIxNTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5oICovLAog
CQkJCUJDOTA0QjcyMEQxMDk5OEYwMDY4MEQzMiAvKiBDbGFzc05vZGVMaXN0LmNwcCAqLywKQEAg
LTIxODMwLDYgKzIxODM2LDcgQEAKIAkJCQlGNTVCM0RCMjEyNTFGMTJEMDAzRUYyNjkgLyogQ2hl
Y2tib3hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwMEI3MjFBMTFERTY0MjgwMDhB
QjlGRiAvKiBDaGVja2VkSW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y5MjU0MzBGN0VGNUI4
MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDYx
OUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MTg3MjIwMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEQ4MjM1MjBBRjkyQTc5MDAwNEYwNTcgLyogQ2hyb21lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEQ4MjQwODBBRjkzQUVCMDAwNEYwNTcgLyogQ2hyb21lQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MTgwLDYgKzI1MTg3LDcgQEAKIAkJCQk5MzI2REMw
QzA5REFENUQ2MDBBRkM4NDcgLyogQ2hhcnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RjU1QjNEQjExMjUxRjEyRDAwM0VGMjY5IC8qIENoZWNrYm94SW5wdXRUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjkyNTQ0MEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0
b25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ2MTlBMzA3MTQ0RTAwQkUwMDRCQzMwMiAvKiBD
aGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MTg3MjI1MDk3
N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
RDgyMzhCMEFGOTJERjYwMDA0RjA1NyAvKiBDaHJvbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QUJBRjIyMDgwQzAzQjFDNzAwQjBCQ0YwIC8qIENocm9tZU1hYy5tbSBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY1ODQxNzc1N2FmMzBlZDQ1ZjgzZGUwZjg4N2NmMTBjMzE5ODMzNTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKQEAg
LTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQorCisjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIgorCisjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJNdXRhdGlvblJlY29yZC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJTdGF0aWNO
b2RlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCisvLyBDaGls
ZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yIGV4cGVjdHMgdGhhdCBhbGwgcmVtb3ZhbHMgZnJvbSBh
IHBhcmVudCB0YWtlIHBsYWNlIGluIG9yZGVyCisvLyBhbmQgcHJlY2VkZSBhbnkgYWRkaXRpb25z
LiBJZiB0aGlzIGlzIHZpb2xhdGVkIChpLmUuIGJlY2F1c2Ugb2YgY29kZSBjaGFuZ2VzIGVsc2V3
aGVyZQorLy8gaW4gV2ViQ29yZSkgaXQgd2lsbCBsaWtlbHkgcmVzdWx0IGluIGJvdGggKGEpIEFT
U0VSVGlvbnMgZmFpbGluZywgYW5kIChiKSBtdXRhdGlvbiByZWNvcmRzCisvLyBiZWluZyBlbnF1
ZXVlZCBmb3IgZGVsaXZlcnkgYmVmb3JlIHRoZSBvdXRlci1tb3N0IHNjb3BlIGNsb3Nlcy4KK2Ns
YXNzIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJL
aXRNdXRhdGlvbk9ic2VydmVyPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hpbGRMaXN0
TXV0YXRpb25BY2N1bXVsYXRvcik7CitwdWJsaWM6CisgICAgQ2hpbGRMaXN0TXV0YXRpb25BY2N1
bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+LCBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+
Jik7CisgICAgfkNoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IoKTsKKworICAgIHZvaWQgY2hp
bGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChQYXNz
UmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworCitwcml2
YXRlOgorICAgIHZvaWQgY2xlYXIoKTsKKyAgICBib29sIGlzRW1wdHkoKTsKKyAgICBib29sIGlz
QWRkZWROb2RlSW5PcmRlcihOb2RlKik7CisgICAgYm9vbCBpc1JlbW92ZWROb2RlSW5PcmRlcihO
b2RlKik7CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworCisgICAgVmVjdG9yPFJlZlB0cjxO
b2RlPiA+IG1fcmVtb3ZlZE5vZGVzOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX2FkZGVk
Tm9kZXM7CisgICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNTaWJsaW5nOworICAgIFJlZlB0cjxO
b2RlPiBtX25leHRTaWJsaW5nOworICAgIFJlZlB0cjxOb2RlPiBtX2xhc3RBZGRlZDsKKworICAg
IFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4gbV9vYnNlcnZlcnM7Cit9OworCitjbGFz
cyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIpOworcHVibGljOgorICAgIH5NdXRhdGlvbkFjY3Vt
dWxhdGlvblJvdXRlcigpOworCisgICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
KiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSopOwor
ICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqKTsKKworICAgIHZvaWQgY2hpbGRB
ZGRlZChOb2RlKiwgUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQo
Tm9kZSosIFBhc3NSZWZQdHI8Tm9kZT4pOworCitwcml2YXRlOgorICAgIE11dGF0aW9uQWNjdW11
bGF0aW9uUm91dGVyKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgdHlw
ZWRlZiBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gU2NvcGluZ0xldmVsTWFwOworICAgIFNjb3Bp
bmdMZXZlbE1hcCBtX3Njb3BpbmdMZXZlbHM7CisgICAgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I+ID4gbV9hY2N1bXVsYXRpb25zOworCisgICAgc3Rh
dGljIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKiBzX2luc3RhbmNlOworfTsKKworQ2hpbGRM
aXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcihQYXNz
UmVmUHRyPE5vZGU+IHRhcmdldCwgVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYgb2Jz
ZXJ2ZXJzKQorICAgIDogbV90YXJnZXQodGFyZ2V0KQoreworICAgIG1fb2JzZXJ2ZXJzLnN3YXAo
b2JzZXJ2ZXJzKTsKKyAgICBjbGVhcigpOworfQorCitDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxh
dG9yOjp+Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcigpCit7CisgICAgQVNTRVJUKGlzRW1w
dHkoKSk7Cit9CisKK2lubGluZSBib29sIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I6Omlz
QWRkZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKK3sKKyAgICByZXR1cm4gaXNFbXB0eSgpIHx8
IChtX2xhc3RBZGRlZCA9PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgbV9uZXh0U2libGlu
ZyA9PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25B
Y2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQoreworICAg
IFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOworCisgICAgaWYgKCFpc0FkZGVkTm9kZUlu
T3JkZXIoY2hpbGQuZ2V0KCkpKQorICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKKwor
ICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wcmV2aW91c1NpYmxpbmcgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKTsKKyAgICB9CisKKyAgICBtX2FkZGVkTm9kZXMuYXBwZW5kKGNoaWxkKTsKKyAgICBt
X2xhc3RBZGRlZCA9IGNoaWxkOworfQorCitpbmxpbmUgYm9vbCBDaGlsZExpc3RNdXRhdGlvbkFj
Y3VtdWxhdG9yOjppc1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKK3sKKyAgICByZXR1
cm4gaXNFbXB0eSgpIHx8IG1fbmV4dFNpYmxpbmcuZ2V0KCkgPT0gY2hpbGQ7Cit9CisKK3ZvaWQg
Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8
Tm9kZT4gcHJwQ2hpbGQpCit7CisgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CisK
KyAgICBBU1NFUlQobV9hZGRlZE5vZGVzLmlzRW1wdHkoKSAmJiBpc1JlbW92ZWROb2RlSW5PcmRl
cihjaGlsZC5nZXQoKSkpOworCisgICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgpIHx8ICFp
c1JlbW92ZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpCisgICAgICAgIGVucXVldWVNdXRhdGlv
blJlY29yZCgpOworCisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICBtX3ByZXZpb3VzU2li
bGluZyA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgbV9uZXh0U2libGluZyA9
IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICBtX2xhc3RBZGRlZCA9IGNoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxk
LT5uZXh0U2libGluZygpOworCisgICAgbV9yZW1vdmVkTm9kZXMuYXBwZW5kKGNoaWxkKTsKK30K
Kwordm9pZCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjplbnF1ZXVlTXV0YXRpb25SZWNv
cmQoKQoreworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICBpZiAoaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8TXV0
YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdCgK
KyAgICAgICAgICAgIG1fdGFyZ2V0LCBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9hZGRlZE5vZGVz
KSwgU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG1fcmVtb3ZlZE5vZGVzKSwgbV9wcmV2aW91c1NpYmxp
bmcsIG1fbmV4dFNpYmxpbmcpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29ic2Vy
dmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlcnNbaV0tPmVucXVldWVNdXRhdGlv
blJlY29yZChtdXRhdGlvbik7CisKKyAgICBjbGVhcigpOworfQorCit2b2lkIENoaWxkTGlzdE11
dGF0aW9uQWNjdW11bGF0b3I6OmNsZWFyKCkKK3sKKyAgICBpZiAoIW1fcmVtb3ZlZE5vZGVzLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9yZW1vdmVkTm9kZXMuY2xlYXIoKTsKKyAgICBpZiAoIW1fYWRk
ZWROb2Rlcy5pc0VtcHR5KCkpCisgICAgICAgIG1fYWRkZWROb2Rlcy5jbGVhcigpOworICAgIG1f
cHJldmlvdXNTaWJsaW5nID0gMDsKKyAgICBtX25leHRTaWJsaW5nID0gMDsKKyAgICBtX2xhc3RB
ZGRlZCA9IDA7Cit9CisKK2Jvb2wgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNFbXB0
eSgpCit7CisgICAgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9k
ZXMuaXNFbXB0eSgpOworfQorCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogTXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXI6OnNfaW5zdGFuY2UgPSAwOworCitNdXRhdGlvbkFjY3VtdWxhdGlv
blJvdXRlcjo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIoKQoreworfQorCitNdXRhdGlvbkFj
Y3VtdWxhdGlvblJvdXRlcjo6fk11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkKK3sKKyAgICBB
U1NFUlQobV9zY29waW5nTGV2ZWxzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYWNjdW11bGF0
aW9ucy5pc0VtcHR5KCkpOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpp
bml0aWFsaXplKCkKK3sKKyAgICBBU1NFUlQoIXNfaW5zdGFuY2UpOworICAgIHNfaW5zdGFuY2Ug
PSBhZG9wdFB0cihuZXcgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIpLmxlYWtQdHIoKTsKK30K
KworCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0
ZXI6Omluc3RhbmNlKCkKK3sKKyAgICBpZiAoIXNfaW5zdGFuY2UpCisgICAgICAgIGluaXRpYWxp
emUoKTsKKworICAgIHJldHVybiBzX2luc3RhbmNlOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11
bGF0aW9uUm91dGVyOjpjaGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBj
aGlsZCkKK3sKKyAgICBIYXNoTWFwPE5vZGUqLCBSZWZQdHI8Q2hpbGRMaXN0TXV0YXRpb25BY2N1
bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdldCk7
CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKKworICAgIGlmIChp
dGVyLT5zZWNvbmQpCisgICAgICAgIGl0ZXItPnNlY29uZC0+Y2hpbGRBZGRlZChjaGlsZCk7Cit9
CisKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZChOb2Rl
KiB0YXJnZXQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgSGFzaE1hcDxOb2RlKiwg
UmVmUHRyPENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOworICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11
bGF0aW9ucy5lbmQoKSk7CisKKyAgICBpZiAoaXRlci0+c2Vjb25kKQorICAgICAgICBpdGVyLT5z
ZWNvbmQtPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7Cit9CisKK3ZvaWQgTXV0YXRpb25BY2N1bXVs
YXRpb25Sb3V0ZXI6OmluY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKiB0YXJnZXQpCit7CisgICAg
cGFpcjxTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX3Njb3BpbmdM
ZXZlbHMuYWRkKHRhcmdldCwgMSk7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAg
ICsrKHJlc3VsdC5maXJzdC0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4gb2JzZXJ2ZXJzOworICAgIHRhcmdldC0+
cmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6Q2hpbGRMaXN0KTsKKyAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIDApOworICAgIGVsc2UKKyAgICAgICAg
bV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIGFkb3B0UmVmKG5ldyBDaGlsZExpc3RNdXRhdGlv
bkFjY3VtdWxhdG9yKHRhcmdldCwgb2JzZXJ2ZXJzKSkpOworfQorCit2b2lkIE11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQorewor
ICAgIFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5k
KHRhcmdldCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKKwor
ICAgIC0tKGl0ZXItPnNlY29uZCk7CisgICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUoaXRlcik7CisKKyAgICBSZWZQ
dHI8Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcj4gcmVjb3JkID0gbV9hY2N1bXVsYXRpb25z
LnRha2UodGFyZ2V0KTsKKyAgICBpZiAocmVjb3JkKQorICAgICAgICByZWNvcmQtPmVucXVldWVN
dXRhdGlvblJlY29yZCgpOworfQorCit9IC8vIG5hbWVzcGFjZQorCitDaGlsZExpc3RNdXRhdGlv
blNjb3BlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQor
ICAgIDogbV90YXJnZXQodGFyZ2V0KQoreworICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjppbnN0YW5jZSgpLT5pbmNyZW1lbnRTY29waW5nTGV2ZWwobV90YXJnZXQuZ2V0KCkpOworfQor
CitDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSgpCit7Cisg
ICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmRlY3JlbWVudFNjb3Bp
bmdMZXZlbChtX3RhcmdldC5nZXQoKSk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZTo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQoreworICAgIE11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT5jaGlsZEFkZGVkKG1fdGFyZ2V0LmdldCgpLCBj
aGlsZCk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6d2lsbFJlbW92ZUNoaWxk
KFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0
ZXI6Omluc3RhbmNlKCktPndpbGxSZW1vdmVDaGlsZChtX3RhcmdldC5nZXQoKSwgY2hpbGQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0
aW9uU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWYyZjhjNDkxY2Q2YThkYTFjMjg1MDBkYTk0ZTdmZDU5YzAxZWEzNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2hpbGRMaXN0TXV0YXRpb25TY29wZV9oCisjZGVm
aW5lIENoaWxkTGlzdE11dGF0aW9uU2NvcGVfaAorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VS
VkVSUykKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIE5vZGU7CisKK2NsYXNzIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENoaWxkTGlzdE11dGF0aW9uU2NvcGUpOworcHVibGljOgorICAg
IENoaWxkTGlzdE11dGF0aW9uU2NvcGUoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpOworICAgIH5D
aGlsZExpc3RNdXRhdGlvblNjb3BlKCk7CisKKyAgICB2b2lkIGNoaWxkQWRkZWQoUGFzc1JlZlB0
cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7CisK
K3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKworI2Vu
ZGlmIC8vIENoaWxkTGlzdE11dGF0aW9uU2NvcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwCmluZGV4IDNlYTQ5OTM2OTM1NzQ5YjEzMTkyYjc2MzQxZDUwOWIxNTM4ZTRjMGMuLjc0
Yzc5ZDZmNzMxMWI1MDQxZGJmOTU3ZDQzZGUzYzY5ODY0MDZjZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJDb250YWluZXJO
b2RlLmgiCiAKICNpbmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKLSNpbmNsdWRlICJNZW1vcnlD
YWNoZS5oIgorI2luY2x1ZGUgIkNoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJD
b250YWluZXJOb2RlQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5j
bHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTE0MSw2ICsxNDIsMTAgQEAgYm9vbCBDb250YWluZXJO
b2RlOjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hp
bGQsIEV4Y2UKICAgICBpZiAocmVmQ2hpbGQtPnByZXZpb3VzU2libGluZygpID09IG5ld0NoaWxk
IHx8IHJlZkNoaWxkID09IG5ld0NoaWxkKSAvLyBub3RoaW5nIHRvIGRvCiAgICAgICAgIHJldHVy
biB0cnVlOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RN
dXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCisKICAgICBSZWZQdHI8Tm9kZT4g
bmV4dCA9IHJlZkNoaWxkOwogICAgIFJlZlB0cjxOb2RlPiByZWZDaGlsZFByZXZpb3VzU2libGlu
ZyA9IHJlZkNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBmb3IgKE5vZGVWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyAr
K2l0KSB7CkBAIC0yNzIsNiArMjc3LDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNo
aWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQorICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24odGhpcyk7CisjZW5kaWYKKwog
ICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gb2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAg
IFJlZlB0cjxOb2RlPiBuZXh0ID0gb2xkQ2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKQEAgLTQwMCw2
ICs0MDksMTAgQEAgc3RhdGljIHZvaWQgd2lsbFJlbW92ZUNoaWxkcmVuKENvbnRhaW5lck5vZGUq
IGNvbnRhaW5lcikKICAgICBOb2RlVmVjdG9yIGNoaWxkcmVuOwogICAgIGNvbGxlY3ROb2Rlcyhj
b250YWluZXIsIGNoaWxkcmVuKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisg
ICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjb250YWluZXIpOworI2VuZGlmCisK
ICAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW4uYmVnaW4o
KTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7IGl0KyspIHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBp
dC0+Z2V0KCk7CiAgICAgICAgIC8vIGZpcmUgcmVtb3ZlZCBmcm9tIGRvY3VtZW50IG11dGF0aW9u
IGV2ZW50cy4KQEAgLTYxMSw2ICs2MjQsMTAgQEAgYm9vbCBDb250YWluZXJOb2RlOjphcHBlbmRD
aGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm8KICAg
ICBpZiAodGFyZ2V0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCisjaWYgRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0
aW9uKHRoaXMpOworI2VuZGlmCisKICAgICAvLyBOb3cgYWN0dWFsbHkgYWRkIHRoZSBjaGlsZChy
ZW4pCiAgICAgUmVmUHRyPE5vZGU+IHByZXYgPSBsYXN0Q2hpbGQoKTsKICAgICBmb3IgKE5vZGVW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRz
LmVuZCgpOyArK2l0KSB7CkBAIC0xMDk1LDYgKzExMTIsMTMgQEAgc3RhdGljIHZvaWQgZGlzcGF0
Y2hDaGlsZEluc2VydGlvbkV2ZW50cyhOb2RlKiBjaGlsZCkKICAgICBSZWZQdHI8Tm9kZT4gYyA9
IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQo
KTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgaWYgKGMtPnBhcmVudE5v
ZGUoKSkgeworICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKGMtPnBhcmVu
dE5vZGUoKSk7CisgICAgICAgIG11dGF0aW9uLmNoaWxkQWRkZWQoYyk7CisgICAgfQorI2VuZGlm
CisKICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUo
RG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRF9MSVNURU5FUikpCiAgICAgICAgIGMtPmRpc3BhdGNo
U2NvcGVkRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5z
ZXJ0ZWRFdmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CiAKQEAgLTExMTYsNiArMTE0MCwx
MyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkK
ICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1l
bnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
CisgICAgaWYgKGMtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNj
b3BlIG11dGF0aW9uKGMtPnBhcmVudE5vZGUoKSk7CisgICAgICAgIG11dGF0aW9uLndpbGxSZW1v
dmVDaGlsZChjKTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIGRpc3BhdGNoIHByZS1yZW1vdmFs
IG11dGF0aW9uIGV2ZW50cwogICAgIGlmIChjLT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhh
c0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURfTElTVEVORVIpKQogICAgICAg
ICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuRE9NTm9kZVJlbW92ZWRFdmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggZDY5OWIxOTExNmU4MzFkNzNmZDU1MjNhODRlYWEyZWI1ODZmZWY1
Ny4uMzNmMzY1NTQ5Y2Q2MDU2YTFkZWUzMTI4NzdhZGRlYThmZGJmNDk4NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcApAQCAtNjI1LDggKzYyNSw4IEBAIHN0YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1
dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBN
dXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhlbGVtZW50LCBuYW1lKTsKLSAgICBmb3Ig
KFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZl
cnMuYmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlcnMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCpp
dGVyKS0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9ic2VydmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgb2JzZXJ2ZXJzW2ldLT5l
bnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAppbmRleCAyM2ZmN2ZlMjFhODNmMjMxZWI2OGRjN2NjMmY0YTQxNjlkZDZjYzQ1Li45MTVhNWRj
MWRjMDljNjQ1MzNkOTVhYTI1OTMxMGYyNzlhYmEyOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkF0dHIu
aCIKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNj
b3BlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiQ1NTUGFyc2VyLmgiCkBAIC0yMTMwLDYgKzIxMzEsOSBAQCB2b2lkIE5vZGU6OnNl
dFRleHRDb250ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgY2FzZSBTSEFET1dfUk9P
VF9OT0RFOiB7CiAgICAgICAgICAgICBDb250YWluZXJOb2RlKiBjb250YWluZXIgPSB0b0NvbnRh
aW5lck5vZGUodGhpcyk7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICAgICAg
ICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24odGhpcyk7CisjZW5kaWYKICAgICAg
ICAgICAgIGNvbnRhaW5lci0+cmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgICAgIGlmICghdGV4
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChkb2N1
bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgZWMpOwpAQCAtMjcwMCw5ICsyNzA0LDkgQEAg
dm9pZCBOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIqPiYgb2IKICAgICBpZiAoIW9ic2VydmVyRW50cmllcyB8fCBvYnNl
cnZlckVudHJpZXMtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChWZWN0
b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVyRW50cmll
cy0+YmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlckVudHJpZXMtPmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgaWYgKGl0ZXItPm1hdGNoZXModHlwZSkpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBw
ZW5kKGl0ZXItPm9ic2VydmVyLmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
c2VydmVyRW50cmllcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCgqb2JzZXJ2ZXJFbnRy
aWVzKVtpXS5tYXRjaGVzKHR5cGUpKQorICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZCgoKm9i
c2VydmVyRW50cmllcylbaV0ub2JzZXJ2ZXIuZ2V0KCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDdkNzM2YWU3YmFj
NjRjNDU4OGZjYmEyZmMzZDNiNzc1Mjk3YmRlMTQuLjgzZjE1OTkwZWEyYmVjYTMzOWJiMGE3M2Nj
Mjk2OWJhNGRmMjlmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRh
dGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5jcHAKQEAgLTY1LDggKzY1LDggQEAgdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
OjpvYnNlcnZlKE5vZGUqIG5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMKIAog
dm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKLSAgICBmb3IgKFZl
Y3RvcjxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVkTm9kZXMuYmVnaW4oKTsgaXRl
ciAhPSAgbV9vYnNlcnZlZE5vZGVzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnVu
cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9vYnNlcnZlZE5vZGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX29ic2VydmVkTm9kZXNb
aV0tPnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOwogCiAgICAgbV9vYnNlcnZlZE5v
ZGVzLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IDU5MTJk
YTA3ZDc2YTQ5MmM2ZDczMjg4YTE0MzRkZDEzMWUzMTk4MDQuLjJjOWI3YTVhMzU5NmYxNmMzN2Rj
MmY1OTkwNzViZDM0MGEzNTgyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTUHJv
cGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJD
aGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgpAQCAtMzE3LDYg
KzMxOCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaGFzT25lVGV4dENoaWxkKENvbnRhaW5lck5v
ZGUqIG5vZGUpCiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVudChIVE1M
RWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAg
ICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKGVsZW1lbnQpOworI2VuZGlmCisKICAg
ICBpZiAoIWZyYWdtZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgZWxlbWVudC0+cmVtb3Zl
Q2hpbGRyZW4oKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDYgKzM0MywxMCBAQCBzdGF0aWMg
dm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoSFRNTEVsZW1lbnQqIGVsZW1lbnQsIFBh
c3NSZWZQdHI8RG9jdW1lbgogCiBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChI
VE1MRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11dGF0
aW9uU2NvcGUgbXV0YXRpb24oZWxlbWVudCk7CisjZW5kaWYKKwogICAgIGlmIChoYXNPbmVUZXh0
Q2hpbGQoZWxlbWVudCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCo+KGVsZW1lbnQtPmZp
cnN0Q2hpbGQoKSktPnNldERhdGEodGV4dCwgZWMpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
NjE4NGU5NDBlNzk4MWZkYWVmOWUwYThjZmQ3ZGVmYzczZjFiODViNi4uZGZlZGRjZGY1NDhlMmNl
NmQ5NTcwN2RmNjA2NjIxYjc1NzgyMzU2YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEw
LTE4ICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W011dGF0aW9uT2JzZXJ2ZXJzXSBJbXBsZW1lbnQgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNl
cnZlIGZvciBjaGlsZExpc3QgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1s
OgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0Lmh0bWw6
IEFkZGVkLgorCiAyMDExLTEwLTIxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ29sdW1uIHJ1bGVzIHBvc2l0aW9uZWQgaW5jb3JyZWN0bHkgaW4gdmVydGljYWwt
cmwgYmxvY2sgd2l0aCBob3Jpem9udGFsIGJvcmRlciBvciBwYWRkaW5nCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50
eHQKaW5kZXggOTg2OWZlMmVlNWIwMmMwZTc3NjhkODFhMzMyYWFmZDM4NjZlY2M4MS4uMmY4NTk4
ZGZmN2EwMjBlZTNjNzI3ZTllMzdmOTg2YTZhMjgxODY5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApA
QCAtMjMsNyArMjMsNyBAQCBQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMg
bnVsbAogVGVzdGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImF0dHJpYnV0
ZXMiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGF0dHJpYnV0ZSBjaGFuZ2VzLgog
UEFTUyBtdXRhdGlvbnMgaXMgbnVsbAogCi1UZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBz
YW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0
aW5nIHRoZSBvcHRpb25zLgorVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2Rl
IHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBv
cHRpb25zLgogUEFTUyBjYWxscyBpcyAxCiBQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQogUEFT
UyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCmluZGV4IDNjYjI3ZjM5YWZiOTMz
NDRhZGIxM2Y3YjhjNWY4YTRlYWUxOGQ2NTIuLmEwN2Q0YmU1ZTFmNDYzM2IxODUwYmQ0MGM1Zjky
NjU5MWQ0NGY5MjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2
ZS1hdHRyaWJ1dGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZl
LWF0dHJpYnV0ZXMuaHRtbApAQCAtMTAsOCArMTAsNyBAQAogPHNjcmlwdD4KIAogd2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOwotdmFyIG11dGF0aW9uczsKLXZhciBtdXRhdGlvbnMyOwordmFy
IG11dGF0aW9ucywgbXV0YXRpb25zMjsKIHZhciBjYWxsczsKIAogZnVuY3Rpb24gdGVzdEJhc2lj
KCkgewpAQCAtMTA3LDcgKzEwNiw3IEBAIGZ1bmN0aW9uIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlv
bigpIHsKICAgICB2YXIgb2JzZXJ2ZXI7CiAKICAgICBmdW5jdGlvbiBzdGFydCgpIHsKLSAgICAg
ICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRo
ZSBzYW1lIG9ic2VydmluZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMu
Jyk7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5v
ZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhl
IG9wdGlvbnMuJyk7CiAgICAgCiAJCWNhbGxzID0gMDsKICAgICAgICAgbXV0YXRpb25zID0gbnVs
bDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExp
c3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxk
TGlzdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmNlMTI0MTdmOWY5NjkyNTA5OGM0MjJlMTQ1
Zjg1M2Q3YzQwODdlMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRp
b24vb2JzZXJ2ZS1jaGlsZExpc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOTEgQEAKK1Rlc3Qg
V2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2YgY2hpbGRMaXN0
IG9ic2VydmF0aW9uLgorLi4uY2FuIGNoaWxkTGlzdCBjaGFuZ2VzIGJlIG9ic2VydmVkIGF0IGFs
bAorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMg
ImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BB
U1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKKy4uLm9ic2VydmVy
LmRpc2Nvbm5lY3QoKSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGRlbGl2ZXJ5IG9mIG11dGF0aW9u
cy4KK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25u
ZWN0IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuCitQQVNTIG11dGF0aW9ucy5sZW5ndGgg
aXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlv
bnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVk
Tm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImNoaWxk
TGlzdCIKK1BBU1MgbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBt
dXRhdGlvbnNbMV0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYyCisKK1Rlc3RpbmcgdGhh
dCBvYnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJjaGlsZExpc3QiIGRvZXMgbm90IHJlc3Vs
dCBpbiBoZWFyaW5nIGFib3V0IGNoaWxkTGlzdCBjaGFuZ2VzLgorUEFTUyBtdXRhdGlvbnMgaXMg
bnVsbAorCitUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUg
c2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuCitQ
QVNTIGNhbGxzIGlzIDEKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9u
c1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3Rp
bmcgdGhhdCBtdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBu
b2RlIGFuZCBib3RoIHJlY2VpdmUgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlz
IDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25z
Mi5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKKwor
VGVzdGluZyB0aGF0IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1bHQgaW4gYSBz
aW5nbGUgY2hpbGRMaXN0IG11dGF0aW9uLgorLi4uaW5uZXJIVE1MCitQQVNTIG11dGF0aW9ucy5s
ZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBt
dXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0uYWRk
ZWROb2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0g
aXMgYWRkZWREaXYyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzJdIGlzIGFkZGVkRGl2
MworUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0
aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBd
LnJlbW92ZWROb2Rlc1sxXSBpcyByZW1vdmVkRGl2MgorLi4uaW5uZXJUZXh0CitQQVNTIG11dGF0
aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0Igor
UEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNb
MF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAzCisKK1Rlc3RpbmcgdGhhdCByZXBsYWNlQ2hpbGQg
cmVzdWx0cyBpbiBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuCisuLi5zaW1wbGUgcmVwbGFj
ZSBjaGlsZAorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5
cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlz
IDEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11
dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MQorLi4ucmVwbGFjZSB3aXRoIERvY3VtZW50RnJh
Z21lbnQKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBl
IGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAy
CitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIGFkZGVkRGl2MQorUEFTUyBtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlc1sxXSBpcyBhZGRlZERpdjIKK1BBU1MgbXV0YXRpb25zWzBdLnJl
bW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBd
IGlzIHJlbW92ZWREaXYxCisKK1Rlc3RpbmcgdGhhdCBpbnNlcnRCZWZvcmUgcmVzdWx0cyBpbiBt
aW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQor
UEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlcy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXSBp
cyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0gaXMgYWRkZWREaXYy
CitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDAKKworVGVzdGluZyB0
aGF0IGFwcGVuZENoaWxkIHJlc3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLgor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNo
aWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1Mg
bXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1sw
XS5hZGRlZE5vZGVzWzFdIGlzIGFkZGVkRGl2MgorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5v
ZGVzLmxlbmd0aCBpcyAwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2Vy
dmUtY2hpbGRMaXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hp
bGRMaXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE2ZWNiZDhlMzBkYmFmOWE3OTYwYmIyMGMyYzI5NDZi
MmViMDRmYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1jaGlsZExpc3QuaHRtbApAQCAtMCwwICsxLDQwNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8dGl0bGU+PC90
aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
Cit2YXIgbXV0YXRpb25zLCBtdXRhdGlvbnMyOwordmFyIGNhbGxzOwordmFyIGRpdiwgcmVtb3Zl
ZERpdjEsIHJlbW92ZWREaXYyLCBhZGRlZERpdjEsIGFkZGVkRGl2MiwgYWRkZWREaXYzOworCitm
dW5jdGlvbiB0ZXN0QmFzaWMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisK
KyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgYmFzaWMgYXNw
ZWN0cyBvZiBjaGlsZExpc3Qgb2JzZXJ2YXRpb24uJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0g
bnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
ICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgewor
ICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICByZW1vdmVkRGl2
MSA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAg
ICAgIHNldFRpbWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIGRlYnVnKCcu
Li5jYW4gY2hpbGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsJyk7CisKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG11dGF0
aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgcmVt
b3ZlZERpdjEgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykp
OworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVsdGlwbGUs
IDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVs
dGlwbGUoKSB7CisgICAgICAgIGRlYnVnKCcuLi5vYnNlcnZlci5kaXNjb25uZWN0KCkgc2hvdWxk
IHByZXZlbnQgZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuJyk7CisKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2
LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBkaXYucmVtb3Zl
Q2hpbGQoZGl2LmZpcnN0Q2hpbGQpOworICAgICAgICByZW1vdmVkRGl2MiA9IGRpdi5yZW1vdmVD
aGlsZChkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5yZS1vYnNlcnZp
bmcgYWZ0ZXIgZGlzY29ubmVjdCB3b3JrcyB3aXRoIHRoZSBzYW1lIG9ic2VydmVyLicpOworCisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2
MicpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsK
KyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5j
dGlvbiB0ZXN0V3JvbmdUeXBlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOwor
CisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgb2Jz
ZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiY2hpbGRMaXN0IiBkb2VzIG5vdCByZXN1bHQgaW4g
aGVhcmluZyBhYm91dCBjaGlsZExpc3QgY2hhbmdlcy4nKTsKKworICAgICAgICBtdXRhdGlvbnMg
PSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7
CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNl
cnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVl
IH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
JykpOworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywgJ251bGwnKTsKKyAg
ICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAg
IHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVz
dE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVy
OworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQg
cmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhl
IGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7CisKKyAgICAgICAgY2FsbHMgPSAw
OworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAg
ICAgICAgY2FsbHMrKzsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShk
aXYsIHsgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBv
YnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRp
bWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJlKCdjYWxscycs
ICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAg
IG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxk
TGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2Jz
ZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5p
c2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsK
KyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAg
IHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZU9ic2VydmVycygpIHsKKyAgICB2
YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgb2JzZXJ2ZXIyOworCisgICAgZnVu
Y3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgbXVsdGlwbGUgb2Jz
ZXJ2ZXJzIGNhbiBiZSByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gbm9kZSBhbmQgYm90aCByZWNlaXZl
IG11dGF0aW9ucy4nKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25z
ID0gbTsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyMiA9IG5ldyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9uczIgPSBtOworICAg
ICAgICB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVl
IH0pOworICAgICAgICBvYnNlcnZlcjIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0p
OworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykp
OworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZmluaXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zMlswXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIG9ic2VydmVy
LmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAg
ZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RJbm5lckhUTUxBbmRJbm5lclRleHQoKSB7CisgICAgdmFyIGRp
djsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAg
ZGVidWcoJ1Rlc3RpbmcgdGhhdCBpbm5lclRleHQgYW5kIGlubmVySFRNTCBhbHdheXMgcmVzdWx0
IGluIGEgc2luZ2xlIGNoaWxkTGlzdCBtdXRhdGlvbi4nKTsKKworICAgICAgICBtdXRhdGlvbnMg
PSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+PGRpdj5CYXI8L2Rpdj4nOwor
ICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5maXJzdENoaWxkOworICAgICAgICByZW1vdmVkRGl2
MiA9IHJlbW92ZWREaXYxLm5leHRTaWJsaW5nOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9
IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxk
TGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICdmb288aW1nIHNyYz0iYmFy
LnBuZyI+PHA+QmF6PC9wPic7CisgICAgICAgIGFkZGVkRGl2MSA9IGRpdi5jaGlsZE5vZGVzWzBd
OworICAgICAgICBhZGRlZERpdjIgPSBkaXYuY2hpbGROb2Rlc1sxXTsKKyAgICAgICAgYWRkZWRE
aXYzID0gZGl2LmNoaWxkTm9kZXNbMl07CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tJbm5lckhU
TUwsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrSW5uZXJIVE1MKCkgeworICAgICAg
ICBkZWJ1ZygnLi4uaW5uZXJIVE1MJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5s
ZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNo
aWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxl
bmd0aCcsICczJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sw
XScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5v
ZGVzWzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFk
ZGVkTm9kZXNbMl0nLCAnYWRkZWREaXYzJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzFdJywgJ3JlbW92ZWREaXYyJyk7CisKKyAgICAg
ICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2LmlubmVyVGV4dCA9ICdmb28nOworICAg
ICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNo
KCkgeworICAgICAgICBkZWJ1ZygnLi4uaW5uZXJUZXh0Jyk7CisKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5h
ZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
cmVtb3ZlZE5vZGVzLmxlbmd0aCcsICczJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3Qo
KTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKwor
ICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZXBsYWNlQ2hpbGQoKSB7CisgICAgdmFy
IGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGZyYWdtZW50OworCisgICAgZnVuY3Rp
b24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmVwbGFjZUNoaWxkIHJl
c3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLicpOworCisgICAgICAgIG11dGF0
aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj48ZGl2PkJhcjwvZGl2
Pic7CisgICAgICAgIHJlbW92ZWREaXYxID0gZGl2LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgb2Jz
ZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAg
ICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNl
cnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGFkZGVkRGl2MSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYucmVwbGFjZUNoaWxkKGFkZGVk
RGl2MSwgZGl2LmZpcnN0Q2hpbGQpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrUmVwbGFjZVdp
dGhOb2RlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1JlcGxhY2VXaXRoTm9kZSgp
IHsKKyAgICAgICAgZGVidWcoJy4uLnNpbXBsZSByZXBsYWNlIGNoaWxkJyk7CisKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKworICAg
ICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0
ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgYWRkZWREaXYxID0gZnJhZ21lbnQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBhZGRlZERpdjIg
PSBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7Cisg
ICAgICAgIHJlbW92ZWREaXYxID0gZGl2LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgZGl2LnJlcGxh
Y2VDaGlsZChmcmFnbWVudCwgcmVtb3ZlZERpdjEpOworCisgICAgICAgIHNldFRpbWVvdXQoZmlu
aXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVn
KCcuLi5yZXBsYWNlIHdpdGggRG9jdW1lbnRGcmFnbWVudCcpOworCisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LmFkZGVkTm9kZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0uYWRkZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKworICAgICAg
ICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVu
TmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0SW5z
ZXJ0QmVmb3JlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworICAgIHZhciBm
cmFnbWVudDsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGlu
ZyB0aGF0IGluc2VydEJlZm9yZSByZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9u
cy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5G
b288L3NwYW4+JzsKKyAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7CisgICAgICAgIGFkZGVkRGl2MSA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgYWRkZWREaXYyID0gZnJhZ21lbnQu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIG9i
c2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAg
ICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2Jz
ZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuaW5zZXJ0QmVmb3Jl
KGZyYWdtZW50LCBkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAw
KTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5h
ZGRlZE5vZGVzLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS5hZGRlZE5vZGVzWzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMCcpOworCisgICAgICAgIG9ic2VydmVy
LmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgp
OworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBcHBlbmRDaGlsZCgp
IHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgZnJhZ21lbnQ7CisK
KyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBhcHBl
bmRDaGlsZCByZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4nKTsKKworICAg
ICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+JzsK
KyAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Cisg
ICAgICAgIGFkZGVkRGl2MSA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgYWRkZWREaXYyID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIG9ic2VydmVyID0gbmV3
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRp
b25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsg
Y2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwor
ICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlu
aXNoKCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywgJzInKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywgJ2FkZGVkRGl2MScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0nLCAnYWRkZWREaXYy
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcs
ICcwJyk7CisKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1Zygn
Jyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwor
dmFyIHRlc3RzID0gW3Rlc3RCYXNpYywgdGVzdFdyb25nVHlwZSwgdGVzdE11bHRpcGxlUmVnaXN0
cmF0aW9uLCB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMsIHRlc3RJbm5lckhUTUxBbmRJbm5lclRleHQs
IHRlc3RSZXBsYWNlQ2hpbGQsIHRlc3RJbnNlcnRCZWZvcmUsIHRlc3RBcHBlbmRDaGlsZF07Cit2
YXIgdGVzdEluZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5leHRUZXN0KCkgeworICAgIGlmICh0
ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3RzW3Rlc3RJbmRleCsrXSgpOwor
ICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Rlc2NyaXB0aW9uKCdUZXN0
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBvbiBhdHRyaWJ1dGVzLicpOworCitpZiAo
IXdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyKQorICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVz
dCByZXF1aXJlcyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKScpOworZWxzZQorICAgIHJ1bk5l
eHRUZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111995</attachid>
            <date>2011-10-21 11:32:40 -0700</date>
            <delta_ts>2011-10-21 12:09:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111021113239.patch</filename>
            <type>text/plain</type>
            <size>51206</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxMTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NjE0MjVkNmE4YzM2MmNk
NWFkYzFmMzlhZTIzNzI4ODQ5MmFiODk0Li4xYjgwMjcxZmE1Y2ZjNDM3NTQ3MjMxYzY0ZjE5N2E3
ZDNlYjVlOWRjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Db250
YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6Omluc2VydEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0
Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlw
ZSk6CisgICAgICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICog
aHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5X
aXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQp
OgorCiAyMDExLTEwLTIxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAg
ICAgQ29sdW1uIHJ1bGVzIHBvc2l0aW9uZWQgaW5jb3JyZWN0bHkgaW4gdmVydGljYWwtcmwgYmxv
Y2sgd2l0aCBob3Jpem9udGFsIGJvcmRlciBvciBwYWRkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDVmYmNhMzJjZmNiODkyNWI3ZjNjOGI5ZTE3ZTMwOWQ3ZGZiNWZiNGMuLjMzNTZkNGNkNzU1
NmQ4MTg5OWUwZjQ3NWFiN2MzNTYyZjE3NjUwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01
MTMsNiArNTEzLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9DREFUQVNlY3Rpb24u
Y3BwCiAgICAgZG9tL0NoYXJhY3RlckRhdGEuY3BwCiAgICAgZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuY3BwCisgICAgZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCiAgICAgZG9tL0NoaWxk
Tm9kZUxpc3QuY3BwCiAgICAgZG9tL0NsYXNzTm9kZUxpc3QuY3BwCiAgICAgZG9tL0NsaWVudFJl
Y3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiMzc2ODU5ZDg4Y2QwMWYy
YzNmMzE0MGIwMzJjYzE1MTQ1NWE3NTdkLi44MmQxYzAwNWEzMzdjZGU3MWZmY2QyODRhZTIxMjBm
MDk1MTY4NTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTExMjIsNiArMTEy
Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3Rl
ckRhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5v
ZGVMaXN0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaCBcCiAJU291
cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAz
NDYxMzM1MmY2ZmYzZDFjNmM0M2RjOTRlNGU0ZWZkNmMxM2U3N2IyLi41NmI2MGNkNWFiMTVmY2Fl
YTg4ZDJkNzI3OTI1YTQ5Y2M2NDgxMWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01MTI3LDYgKzUx
MjcsOCBAQAogICAgICAgICAgICAgJ2RvbS9DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCcsCiAgICAgICAgICAgICAn
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwJywKKyAgICAgICAgICAgICdkb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5jcHAnLAorICAgICAgICAgICAgJ2RvbS9DaGlsZExpc3RNdXRhdGlvblNj
b3BlLmgnLAogICAgICAgICAgICAgJ2RvbS9DaGlsZE5vZGVMaXN0LmNwcCcsCiAgICAgICAgICAg
ICAnZG9tL0NoaWxkTm9kZUxpc3QuaCcsCiAgICAgICAgICAgICAnZG9tL0NsYXNzTm9kZUxpc3Qu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjVjMjM0Y2U2ZDQ0NGY1MmNhNWFjZmMxZTc0NjVlODY2
NDVmNjNlNS4uMGIyY2YxYjVkMDU5NGZiNjViZTVmZWNhOGRkZTcwNmQ2MDkwMmMwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTQ2NSw2ICs0NjUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vQ0RBVEFT
ZWN0aW9uLmNwcCBcCiAgICAgZG9tL0NoYXJhY3RlckRhdGEuY3BwIFwKICAgICBkb20vQ2hlY2tl
ZFJhZGlvQnV0dG9ucy5jcHAgXAorICAgIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBc
CiAgICAgZG9tL0NoaWxkTm9kZUxpc3QuY3BwIFwKICAgICBkb20vQ2xhc3NOb2RlTGlzdC5jcHAg
XAogICAgIGRvbS9DbGllbnRSZWN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDQ0NTc5MGJlODc3MTkyNjU5NDM0NDM0MTc2YmZjN2Vk
NzIzZGUyOTUuLjkwZjllMWU3M2E5NzRhNWNiZmI1MDBhMzY4ZGNlY2M5OThmNzk1ZjUgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Mzg3NCw2
ICs0Mzg3NCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxkb21cQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAiCisJCQkJPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxDaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGRvbVxDaGlsZE5vZGVMaXN0LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjUxNjJkMmYxZTA1NDQ2ZTFlMTY0YzkxNDIzNTRhZGQxMGU0ZjFmMi4uMzdh
OTk4OWE4OTU3NzM2NjRmMTAwNTI0OGNkOGEwZDFiN2M5ZDBlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTgwNyw2ICs1ODA3
LDggQEAKIAkJRDNBQTEwRjQxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0FBMTBGMjEy
M0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJRDNENEU5NzIx
MzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAg
LyogSFRNTFN1bW1hcnlFbGVtZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBDN0NGRTAwN0JB
NTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5
RWxlbWVudC5oICovOyB9OworCQlENjE5QTMwNzE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5jcHAgKi87IH07CisJCUQ2MTlBMzA4MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRh
dGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICov
OyB9OwogCQlENzBBRDY1NzEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU1MTNFMTM0
MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwICovOyB9OwogCQlENzBBRDY1ODEzRTEzNDJC
MDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9u
LmggKi87IH07CiAJCUQ4QjYxNTJGMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ4QjYxNTJFMTAzMjQ5NTEw
MEM4NTU0QSAvKiBDb29raWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTMxMzksNiArMTMxNDEsOCBAQAogCQlEM0FBMTBGMjEyM0E5OEFBMDA5
MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFRdWVyeU1hdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RDNENEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1NDAgLyog
SFRNTFN1bW1hcnlFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhU
TUxTdW1tYXJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENjE5QTMw
NTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8q
IENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJlZ2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQ3MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUmVnaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBD
b29raWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTAxNSw2ICsyMTAxOSw4IEBACiAJCQkJOTNFRUMx
RTYwOUMyODc3NzAwQzUxNUQxIC8qIENoYXJhY3RlckRhdGEuaWRsICovLAogCQkJCTkzRjkyNTQy
MEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmNwcCAqLywKIAkJCQk5M0Y5
MjU0MTBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oICovLAorCQkJCUQ2
MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCAqLywK
KwkJCQlENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5o
ICovLAogCQkJCUE4MTg3MjFBMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAq
LywKIAkJCQlBODE4NzIxNTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5oICovLAog
CQkJCUJDOTA0QjcyMEQxMDk5OEYwMDY4MEQzMiAvKiBDbGFzc05vZGVMaXN0LmNwcCAqLywKQEAg
LTIxODMwLDYgKzIxODM2LDcgQEAKIAkJCQlGNTVCM0RCMjEyNTFGMTJEMDAzRUYyNjkgLyogQ2hl
Y2tib3hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwMEI3MjFBMTFERTY0MjgwMDhB
QjlGRiAvKiBDaGVja2VkSW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y5MjU0MzBGN0VGNUI4
MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDYx
OUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MTg3MjIwMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEQ4MjM1MjBBRjkyQTc5MDAwNEYwNTcgLyogQ2hyb21lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEQ4MjQwODBBRjkzQUVCMDAwNEYwNTcgLyogQ2hyb21lQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MTgwLDYgKzI1MTg3LDcgQEAKIAkJCQk5MzI2REMw
QzA5REFENUQ2MDBBRkM4NDcgLyogQ2hhcnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RjU1QjNEQjExMjUxRjEyRDAwM0VGMjY5IC8qIENoZWNrYm94SW5wdXRUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjkyNTQ0MEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0
b25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ2MTlBMzA3MTQ0RTAwQkUwMDRCQzMwMiAvKiBD
aGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MTg3MjI1MDk3
N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
RDgyMzhCMEFGOTJERjYwMDA0RjA1NyAvKiBDaHJvbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QUJBRjIyMDgwQzAzQjFDNzAwQjBCQ0YwIC8qIENocm9tZU1hYy5tbSBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ4MDQ1YmJhYjI5Y2FmNmFjMjQzZmFlNDJlMjg1ZjM0OTg3OTZiYTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKQEAg
LTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQorCisjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIgorCisjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJNdXRhdGlvblJlY29yZC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJTdGF0aWNO
b2RlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCisvLyBDaGls
ZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yIGV4cGVjdHMgdGhhdCBhbGwgcmVtb3ZhbHMgZnJvbSBh
IHBhcmVudCB0YWtlIHBsYWNlIGluIG9yZGVyCisvLyBhbmQgcHJlY2VkZSBhbnkgYWRkaXRpb25z
LiBJZiB0aGlzIGlzIHZpb2xhdGVkIChpLmUuIGJlY2F1c2Ugb2YgY29kZSBjaGFuZ2VzIGVsc2V3
aGVyZQorLy8gaW4gV2ViQ29yZSkgaXQgd2lsbCBsaWtlbHkgcmVzdWx0IGluIGJvdGggKGEpIEFT
U0VSVGlvbnMgZmFpbGluZywgYW5kIChiKSBtdXRhdGlvbiByZWNvcmRzCisvLyBiZWluZyBlbnF1
ZXVlZCBmb3IgZGVsaXZlcnkgYmVmb3JlIHRoZSBvdXRlci1tb3N0IHNjb3BlIGNsb3Nlcy4KK2Ns
YXNzIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDaGls
ZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hp
bGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcik7CitwdWJsaWM6CisgICAgQ2hpbGRMaXN0TXV0YXRp
b25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+LCBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNl
cnZlcio+Jik7CisgICAgfkNoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IoKTsKKworICAgIHZv
aWQgY2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGls
ZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpOwor
Citwcml2YXRlOgorICAgIHZvaWQgY2xlYXIoKTsKKyAgICBib29sIGlzRW1wdHkoKTsKKyAgICBi
b29sIGlzQWRkZWROb2RlSW5PcmRlcihOb2RlKik7CisgICAgYm9vbCBpc1JlbW92ZWROb2RlSW5P
cmRlcihOb2RlKik7CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworCisgICAgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBt
X2FkZGVkTm9kZXM7CisgICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNTaWJsaW5nOworICAgIFJl
ZlB0cjxOb2RlPiBtX25leHRTaWJsaW5nOworICAgIFJlZlB0cjxOb2RlPiBtX2xhc3RBZGRlZDsK
KworICAgIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4gbV9vYnNlcnZlcnM7Cit9Owor
CitjbGFzcyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIpOworcHVibGljOgorICAgIH5NdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcigpOworCisgICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyKiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9k
ZSopOworICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqKTsKKworICAgIHZvaWQg
Y2hpbGRBZGRlZChOb2RlKiwgUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3Zl
Q2hpbGQoTm9kZSosIFBhc3NSZWZQdHI8Tm9kZT4pOworCitwcml2YXRlOgorICAgIE11dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworCisg
ICAgdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gU2NvcGluZ0xldmVsTWFwOworICAg
IFNjb3BpbmdMZXZlbE1hcCBtX3Njb3BpbmdMZXZlbHM7CisgICAgSGFzaE1hcDxOb2RlKiwgUmVm
UHRyPENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I+ID4gbV9hY2N1bXVsYXRpb25zOworCisg
ICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKiBzX2luc3RhbmNlOworfTsKKwor
Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRv
cihQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIq
PiYgb2JzZXJ2ZXJzKQorICAgIDogbV90YXJnZXQodGFyZ2V0KQoreworICAgIG1fb2JzZXJ2ZXJz
LnN3YXAob2JzZXJ2ZXJzKTsKKyAgICBjbGVhcigpOworfQorCitDaGlsZExpc3RNdXRhdGlvbkFj
Y3VtdWxhdG9yOjp+Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcigpCit7CisgICAgQVNTRVJU
KGlzRW1wdHkoKSk7Cit9CisKK2lubGluZSBib29sIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I6OmlzQWRkZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKK3sKKyAgICByZXR1cm4gaXNFbXB0
eSgpIHx8IChtX2xhc3RBZGRlZCA9PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgbV9uZXh0
U2libGluZyA9PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0
YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQor
eworICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOworCisgICAgaWYgKCFpc0FkZGVk
Tm9kZUluT3JkZXIoY2hpbGQuZ2V0KCkpKQorICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KTsKKworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wcmV2aW91c1NpYmxpbmcgPSBj
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKTsKKyAgICB9CisKKyAgICBtX2FkZGVkTm9kZXMuYXBwZW5kKGNoaWxkKTsK
KyAgICBtX2xhc3RBZGRlZCA9IGNoaWxkOworfQorCitpbmxpbmUgYm9vbCBDaGlsZExpc3RNdXRh
dGlvbkFjY3VtdWxhdG9yOjppc1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKK3sKKyAg
ICByZXR1cm4gaXNFbXB0eSgpIHx8IG1fbmV4dFNpYmxpbmcuZ2V0KCkgPT0gY2hpbGQ7Cit9CisK
K3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NS
ZWZQdHI8Tm9kZT4gcHJwQ2hpbGQpCit7CisgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hp
bGQ7CisKKyAgICBBU1NFUlQobV9hZGRlZE5vZGVzLmlzRW1wdHkoKSAmJiBpc1JlbW92ZWROb2Rl
SW5PcmRlcihjaGlsZC5nZXQoKSkpOworCisgICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgp
IHx8ICFpc1JlbW92ZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpCisgICAgICAgIGVucXVldWVN
dXRhdGlvblJlY29yZCgpOworCisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICBtX3ByZXZp
b3VzU2libGluZyA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgbV9uZXh0U2li
bGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICBtX2xhc3RBZGRlZCA9IGNoaWxk
LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9uZXh0U2libGluZyA9
IGNoaWxkLT5uZXh0U2libGluZygpOworCisgICAgbV9yZW1vdmVkTm9kZXMuYXBwZW5kKGNoaWxk
KTsKK30KKwordm9pZCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjplbnF1ZXVlTXV0YXRp
b25SZWNvcmQoKQoreworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICBpZiAoaXNFbXB0eSgp
KSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQ
dHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxk
TGlzdCgKKyAgICAgICAgbV90YXJnZXQsIFN0YXRpY05vZGVMaXN0OjphZG9wdChtX2FkZGVkTm9k
ZXMpLCBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpLCBtX3ByZXZpb3VzU2li
bGluZywgbV9uZXh0U2libGluZyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb2Jz
ZXJ2ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX29ic2VydmVyc1tpXS0+ZW5xdWV1ZU11dGF0
aW9uUmVjb3JkKG11dGF0aW9uKTsKKworICAgIGNsZWFyKCk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0
TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2xlYXIoKQoreworICAgIGlmICghbV9yZW1vdmVkTm9kZXMu
aXNFbXB0eSgpKQorICAgICAgICBtX3JlbW92ZWROb2Rlcy5jbGVhcigpOworICAgIGlmICghbV9h
ZGRlZE5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hZGRlZE5vZGVzLmNsZWFyKCk7CisgICAg
bV9wcmV2aW91c1NpYmxpbmcgPSAwOworICAgIG1fbmV4dFNpYmxpbmcgPSAwOworICAgIG1fbGFz
dEFkZGVkID0gMDsKK30KKworYm9vbCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjppc0Vt
cHR5KCkKK3sKKyAgICByZXR1cm4gbV9yZW1vdmVkTm9kZXMuaXNFbXB0eSgpICYmIG1fYWRkZWRO
b2Rlcy5pc0VtcHR5KCk7Cit9CisKK011dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKiBNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6c19pbnN0YW5jZSA9IDA7CisKK011dGF0aW9uQWNjdW11bGF0
aW9uUm91dGVyOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcigpCit7Cit9CisKK011dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyOjp+TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIoKQoreworICAg
IEFTU0VSVChtX3Njb3BpbmdMZXZlbHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9hY2N1bXVs
YXRpb25zLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6
OmluaXRpYWxpemUoKQoreworICAgIEFTU0VSVCghc19pbnN0YW5jZSk7CisgICAgc19pbnN0YW5j
ZSA9IGFkb3B0UHRyKG5ldyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcikubGVha1B0cigpOwor
fQorCisKK011dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKiBNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6aW5zdGFuY2UoKQoreworICAgIGlmICghc19pbnN0YW5jZSkKKyAgICAgICAgaW5pdGlh
bGl6ZSgpOworCisgICAgcmV0dXJuIHNfaW5zdGFuY2U7Cit9CisKK3ZvaWQgTXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXI6OmNoaWxkQWRkZWQoTm9kZSogdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGU+
IGNoaWxkKQoreworICAgIEhhc2hNYXA8Tm9kZSosIFJlZlB0cjxDaGlsZExpc3RNdXRhdGlvbkFj
Y3VtdWxhdG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRpb25zLmZpbmQodGFyZ2V0
KTsKKyAgICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkpOworCisgICAgaWYg
KGl0ZXItPnNlY29uZCkKKyAgICAgICAgaXRlci0+c2Vjb25kLT5jaGlsZEFkZGVkKGNoaWxkKTsK
K30KKwordm9pZCBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKE5v
ZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBIYXNoTWFwPE5vZGUq
LCBSZWZQdHI8Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9
IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdldCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1
bXVsYXRpb25zLmVuZCgpKTsKKworICAgIGlmIChpdGVyLT5zZWNvbmQpCisgICAgICAgIGl0ZXIt
PnNlY29uZC0+d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKK30KKwordm9pZCBNdXRhdGlvbkFjY3Vt
dWxhdGlvblJvdXRlcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKK3sKKyAg
ICBwYWlyPFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fc2NvcGlu
Z0xldmVscy5hZGQodGFyZ2V0LCAxKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAg
ICAgKysocmVzdWx0LmZpcnN0LT5zZWNvbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiBvYnNlcnZlcnM7CisgICAgdGFyZ2V0
LT5yZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpDaGlsZExpc3QpOworICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQor
ICAgICAgICBtX2FjY3VtdWxhdGlvbnMuc2V0KHRhcmdldCwgMCk7CisgICAgZWxzZQorICAgICAg
ICBtX2FjY3VtdWxhdGlvbnMuc2V0KHRhcmdldCwgYWRvcHRSZWYobmV3IENoaWxkTGlzdE11dGF0
aW9uQWNjdW11bGF0b3IodGFyZ2V0LCBvYnNlcnZlcnMpKSk7Cit9CisKK3ZvaWQgTXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXI6OmRlY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKiB0YXJnZXQpCit7
CisgICAgU2NvcGluZ0xldmVsTWFwOjppdGVyYXRvciBpdGVyID0gbV9zY29waW5nTGV2ZWxzLmZp
bmQodGFyZ2V0KTsKKyAgICBBU1NFUlQoaXRlciAhPSBtX3Njb3BpbmdMZXZlbHMuZW5kKCkpOwor
CisgICAgLS0oaXRlci0+c2Vjb25kKTsKKyAgICBpZiAoaXRlci0+c2Vjb25kID4gMCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9zY29waW5nTGV2ZWxzLnJlbW92ZShpdGVyKTsKKworICAgIFJl
ZlB0cjxDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yPiByZWNvcmQgPSBtX2FjY3VtdWxhdGlv
bnMudGFrZSh0YXJnZXQpOworICAgIGlmIChyZWNvcmQpCisgICAgICAgIHJlY29yZC0+ZW5xdWV1
ZU11dGF0aW9uUmVjb3JkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK0NoaWxkTGlzdE11dGF0
aW9uU2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQp
CisgICAgOiBtX3RhcmdldCh0YXJnZXQpCit7CisgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0
ZXI6Omluc3RhbmNlKCktPmluY3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldC5nZXQoKSk7Cit9
CisKK0NoaWxkTGlzdE11dGF0aW9uU2NvcGU6On5DaGlsZExpc3RNdXRhdGlvblNjb3BlKCkKK3sK
KyAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+ZGVjcmVtZW50U2Nv
cGluZ0xldmVsKG1fdGFyZ2V0LmdldCgpKTsKK30KKwordm9pZCBDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgTXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmNoaWxkQWRkZWQobV90YXJnZXQuZ2V0KCks
IGNoaWxkKTsKK30KKwordm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hp
bGQoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sKKyAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6aW5zdGFuY2UoKS0+d2lsbFJlbW92ZUNoaWxkKG1fdGFyZ2V0LmdldCgpLCBjaGlsZCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0
YXRpb25TY29wZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xZjJmOGM0OTFjZDZhOGRhMWMyODUwMGRhOTRlN2ZkNTljMDFlYTM3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2Nv
cGUuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDaGlsZExpc3RNdXRhdGlvblNjb3BlX2gKKyNk
ZWZpbmUgQ2hpbGRMaXN0TXV0YXRpb25TY29wZV9oCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTm9kZTsKKworY2xhc3MgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hpbGRMaXN0TXV0YXRpb25TY29wZSk7CitwdWJsaWM6Cisg
ICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZShQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCk7CisgICAg
fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoKTsKKworICAgIHZvaWQgY2hpbGRBZGRlZChQYXNzUmVm
UHRyPE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsK
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCisj
ZW5kaWYgLy8gQ2hpbGRMaXN0TXV0YXRpb25TY29wZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAKaW5kZXggM2VhNDk5MzY5MzU3NDliMTMxOTJiNzYzNDFkNTA5YjE1MzhlNGMwYy4u
NzRjNzlkNmY3MzExYjUwNDFkYmY5NTdkNDNkZTNjNjk4NjQwNmNlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIkNvbnRhaW5l
ck5vZGUuaCIKIAogI2luY2x1ZGUgIkJlZm9yZUxvYWRFdmVudC5oIgotI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCisjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIgogI2luY2x1ZGUg
IkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNp
bmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtMTQxLDYgKzE0MiwxMCBAQCBib29sIENvbnRhaW5l
ck5vZGU6Omluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZD
aGlsZCwgRXhjZQogICAgIGlmIChyZWZDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgPT0gbmV3Q2hp
bGQgfHwgcmVmQ2hpbGQgPT0gbmV3Q2hpbGQpIC8vIG5vdGhpbmcgdG8gZG8KICAgICAgICAgcmV0
dXJuIHRydWU7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlz
dE11dGF0aW9uU2NvcGUgbXV0YXRpb24odGhpcyk7CisjZW5kaWYKKwogICAgIFJlZlB0cjxOb2Rl
PiBuZXh0ID0gcmVmQ2hpbGQ7CiAgICAgUmVmUHRyPE5vZGU+IHJlZkNoaWxkUHJldmlvdXNTaWJs
aW5nID0gcmVmQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgIGZvciAoTm9kZVZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSB0YXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRhcmdldHMuZW5kKCk7
ICsraXQpIHsKQEAgLTI3Miw2ICsyNzcsMTAgQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZXBsYWNl
Q2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2UKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCisgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlzKTsKKyNlbmRpZgor
CiAgICAgUmVmUHRyPE5vZGU+IHByZXYgPSBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAg
ICAgUmVmUHRyPE5vZGU+IG5leHQgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKIApAQCAtNDAw
LDYgKzQwOSwxMCBAQCBzdGF0aWMgdm9pZCB3aWxsUmVtb3ZlQ2hpbGRyZW4oQ29udGFpbmVyTm9k
ZSogY29udGFpbmVyKQogICAgIE5vZGVWZWN0b3IgY2hpbGRyZW47CiAgICAgY29sbGVjdE5vZGVz
KGNvbnRhaW5lciwgY2hpbGRyZW4pOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
KyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKGNvbnRhaW5lcik7CisjZW5kaWYK
KwogICAgIGZvciAoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdp
bigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgaXQrKykgewogICAgICAgICBOb2RlKiBjaGlsZCA9
IGl0LT5nZXQoKTsKICAgICAgICAgLy8gZmlyZSByZW1vdmVkIGZyb20gZG9jdW1lbnQgbXV0YXRp
b24gZXZlbnRzLgpAQCAtNjExLDYgKzYyNCwxMCBAQCBib29sIENvbnRhaW5lck5vZGU6OmFwcGVu
ZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBibwog
ICAgIGlmICh0YXJnZXRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0
YXRpb24odGhpcyk7CisjZW5kaWYKKwogICAgIC8vIE5vdyBhY3R1YWxseSBhZGQgdGhlIGNoaWxk
KHJlbikKICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IGxhc3RDaGlsZCgpOwogICAgIGZvciAoTm9k
ZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0YXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRhcmdl
dHMuZW5kKCk7ICsraXQpIHsKQEAgLTEwOTUsNiArMTExMiwxMyBAQCBzdGF0aWMgdm9pZCBkaXNw
YXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKE5vZGUqIGNoaWxkKQogICAgIFJlZlB0cjxOb2RlPiBj
ID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1bWVu
dCgpOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBpZiAoYy0+cGFyZW50
Tm9kZSgpKSB7CisgICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oYy0+cGFy
ZW50Tm9kZSgpKTsKKyAgICAgICAgbXV0YXRpb24uY2hpbGRBZGRlZChjKTsKKyAgICB9CisjZW5k
aWYKKwogICAgIGlmIChjLT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlw
ZShEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVEX0xJU1RFTkVSKSkKICAgICAgICAgYy0+ZGlzcGF0
Y2hTY29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVJ
bnNlcnRlZEV2ZW50LCB0cnVlLCBjLT5wYXJlbnROb2RlKCkpKTsKIApAQCAtMTExNiw2ICsxMTQw
LDEzIEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqIGNoaWxk
KQogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1
bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwogCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKKyAgICBpZiAoYy0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIENoaWxkTGlzdE11dGF0aW9u
U2NvcGUgbXV0YXRpb24oYy0+cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgbXV0YXRpb24ud2lsbFJl
bW92ZUNoaWxkKGMpOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gZGlzcGF0Y2ggcHJlLXJlbW92
YWwgbXV0YXRpb24gZXZlbnRzCiAgICAgaWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+
aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFUkVNT1ZFRF9MSVNURU5FUikpCiAgICAg
ICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5ET01Ob2RlUmVtb3ZlZEV2ZW50LCB0cnVlLCBjLT5wYXJlbnROb2RlKCkpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAppbmRleCBkNjk5YjE5MTE2ZTgzMWQ3M2ZkNTUyM2E4NGVhYTJlYjU4NmZl
ZjU3Li4zM2YzNjU1NDljZDYwNTZhMWRlZTMxMjg3N2FkZGVhOGZkYmY0OTg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCkBAIC02MjUsOCArNjI1LDggQEAgc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJp
YnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW0K
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9
IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKGVsZW1lbnQsIG5hbWUpOwotICAgIGZv
ciAoVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaXRlciA9IG9ic2Vy
dmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKQotICAgICAgICAo
Kml0ZXIpLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb2JzZXJ2ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBvYnNlcnZlcnNbaV0t
PmVucXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCmluZGV4IDIzZmY3ZmUyMWE4M2YyMzFlYjY4ZGM3Y2MyZjRhNDE2OWRkNmNjNDUuLjkxNWE1
ZGMxZGMwOWM2NDUzM2Q5NWFhMjU5MzEwZjI3OWFiYTI4YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQXR0
ci5oIgogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkNoaWxkTGlzdE11dGF0aW9u
U2NvcGUuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKQEAgLTIxMzAsNiArMjEzMSw5IEBAIHZvaWQgTm9kZTo6
c2V0VGV4dENvbnRlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICAgICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgogICAgICAgICBjYXNlIFNIQURPV19S
T09UX05PREU6IHsKICAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lciA9IHRvQ29u
dGFpbmVyTm9kZSh0aGlzKTsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgICAg
ICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlzKTsKKyNlbmRpZgogICAg
ICAgICAgICAgY29udGFpbmVyLT5yZW1vdmVDaGlsZHJlbigpOwogICAgICAgICAgICAgaWYgKCF0
ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGRv
Y3VtZW50KCktPmNyZWF0ZVRleHROb2RlKHRleHQpLCBlYyk7CkBAIC0yNzAwLDkgKzI3MDQsOSBA
QCB2b2lkIE5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShWZWN0b3I8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlcio+JiBvYgogICAgIGlmICghb2JzZXJ2ZXJFbnRyaWVzIHx8IG9i
c2VydmVyRW50cmllcy0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKFZl
Y3RvcjxNdXRhdGlvbk9ic2VydmVyRW50cnk+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJFbnRy
aWVzLT5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVyRW50cmllcy0+ZW5kKCk7ICsraXRlcikgewot
ICAgICAgICBpZiAoaXRlci0+bWF0Y2hlcyh0eXBlKSkKLSAgICAgICAgICAgIG9ic2VydmVycy5h
cHBlbmQoaXRlci0+b2JzZXJ2ZXIuZ2V0KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JzZXJ2ZXJFbnRyaWVzLT5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoKCpvYnNlcnZlckVu
dHJpZXMpW2ldLm1hdGNoZXModHlwZSkpCisgICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKCgq
b2JzZXJ2ZXJFbnRyaWVzKVtpXS5vYnNlcnZlci5nZXQoKSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAKaW5kZXggN2Q3MzZhZTdi
YWM2NGM0NTg4ZmNiYTJmYzNkM2I3NzUyOTdiZGUxNC4uODNmMTU5OTBlYTJiZWNhMzM5YmIwYTcz
Y2MyOTY5YmE0ZGYyOWZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11
dGF0aW9uT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlv
bk9ic2VydmVyLmNwcApAQCAtNjUsOCArNjUsOCBAQCB2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI6Om9ic2VydmUoTm9kZSogbm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucwog
CiB2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRpc2Nvbm5lY3QoKQogewotICAgIGZvciAo
VmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fb2JzZXJ2ZWROb2Rlcy5iZWdpbigpOyBp
dGVyICE9ICBtX29ic2VydmVkTm9kZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+
dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX29ic2VydmVkTm9kZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fb2JzZXJ2ZWROb2Rl
c1tpXS0+dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CiAKICAgICBtX29ic2VydmVk
Tm9kZXMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggNTkx
MmRhMDdkNzZhNDkyYzZkNzMyODhhMTQzNGRkMTMxZTMxOTgwNC4uMmM5YjdhNWEzNTk2ZjE2YzM3
ZGMyZjU5OTA3NWJkMzQwYTM1ODI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUg
IkNoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCkBAIC0zMTcs
NiArMzE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNPbmVUZXh0Q2hpbGQoQ29udGFpbmVy
Tm9kZSogbm9kZSkKIAogc3RhdGljIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aEZyYWdtZW50KEhU
TUxFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQor
ICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oZWxlbWVudCk7CisjZW5kaWYKKwog
ICAgIGlmICghZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICBlbGVtZW50LT5yZW1v
dmVDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47CkBAIC0zMzgsNiArMzQzLDEwIEBAIHN0YXRp
YyB2b2lkIHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVudChIVE1MRWxlbWVudCogZWxlbWVudCwg
UGFzc1JlZlB0cjxEb2N1bWVuCiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VDaGlsZHJlbldpdGhUZXh0
KEhUTUxFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZSBtdXRhdGlvbihlbGVtZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKGhhc09uZVRl
eHRDaGlsZChlbGVtZW50KSkgewogICAgICAgICBzdGF0aWNfY2FzdDxUZXh0Kj4oZWxlbWVudC0+
Zmlyc3RDaGlsZCgpKS0+c2V0RGF0YSh0ZXh0LCBlYyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA2MTg0ZTk0MGU3OTgxZmRhZWY5ZTBhOGNmZDdkZWZjNzNmMWI4NWI2Li5kZmVkZGNkZjU0OGUy
Y2U2ZDk1NzA3ZGY2MDY2MjFiNzU3ODIzNTZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEt
MTAtMTggIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9i
c2VydmUgZm9yIGNoaWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0
bWw6CisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRt
bDogQWRkZWQuCisKIDIwMTEtMTAtMjEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
IAogICAgICAgICBDb2x1bW4gcnVsZXMgcG9zaXRpb25lZCBpbmNvcnJlY3RseSBpbiB2ZXJ0aWNh
bC1ybCBibG9jayB3aXRoIGhvcml6b250YWwgYm9yZGVyIG9yIHBhZGRpbmcKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVk
LnR4dAppbmRleCA5ODY5ZmUyZWU1YjAyYzBlNzc2OGQ4MWEzMzJhYWZkMzg2NmVjYzgxLi4yZjg1
OThkZmY3YTAyMGVlM2M3MjdlOWUzN2Y5ODZhNmEyODE4Njk1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0
CkBAIC0yMyw3ICsyMyw3IEBAIFBBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBp
cyBudWxsCiBUZXN0aW5nIHRoYXQgb2JzZXJ2aW5nIHdpdGhvdXQgc3BlY2lmeWluZyAiYXR0cmli
dXRlcyIgZG9lcyBub3QgcmVzdWx0IGluIGhlYXJpbmcgYWJvdXQgYXR0cmlidXRlIGNoYW5nZXMu
CiBQQVNTIG11dGF0aW9ucyBpcyBudWxsCiAKLVRlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhl
IHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmluZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNl
dHRpbmcgdGhlIG9wdGlvbnMuCitUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5v
ZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhl
IG9wdGlvbnMuCiBQQVNTIGNhbGxzIGlzIDEKIFBBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCiBQ
QVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKaW5kZXggM2NiMjdmMzlhZmI5
MzM0NGFkYjEzZjdiOGM1ZjhhNGVhZTE4ZDY1Mi4uYTA3ZDRiZTVlMWY0NjMzYjE4NTBiZDQwYzVm
OTI2NTkxZDQ0ZjkyNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNl
cnZlLWF0dHJpYnV0ZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2Vy
dmUtYXR0cmlidXRlcy5odG1sCkBAIC0xMCw4ICsxMCw3IEBACiA8c2NyaXB0PgogCiB3aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7Ci12YXIgbXV0YXRpb25zOwotdmFyIG11dGF0aW9uczI7Cit2
YXIgbXV0YXRpb25zLCBtdXRhdGlvbnMyOwogdmFyIGNhbGxzOwogCiBmdW5jdGlvbiB0ZXN0QmFz
aWMoKSB7CkBAIC0xMDcsNyArMTA2LDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0
aW9uKCkgewogICAgIHZhciBvYnNlcnZlcjsKIAogICAgIGZ1bmN0aW9uIHN0YXJ0KCkgewotICAg
ICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGgg
dGhlIHNhbWUgb2JzZXJ2aW5nIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9u
cy4nKTsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUg
bm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0
aGUgb3B0aW9ucy4nKTsKICAgICAKIAkJY2FsbHMgPSAwOwogICAgICAgICBtdXRhdGlvbnMgPSBu
dWxsOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxk
TGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hp
bGRMaXN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yY2UxMjQxN2Y5Zjk2OTI1MDk4YzQyMmUx
NDVmODUzZDdjNDA4N2UxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRh
dGlvbi9vYnNlcnZlLWNoaWxkTGlzdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5MSBAQAorVGVz
dCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgb24gYXR0cmlidXRlcy4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBjaGlsZExp
c3Qgb2JzZXJ2YXRpb24uCisuLi5jYW4gY2hpbGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQg
YWxsCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBp
cyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQor
UEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MQorLi4ub2JzZXJ2
ZXIuZGlzY29ubmVjdCgpIHNob3VsZCBwcmV2ZW50IGZ1cnRoZXIgZGVsaXZlcnkgb2YgbXV0YXRp
b25zLgorUEFTUyBtdXRhdGlvbnMgaXMgbnVsbAorLi4ucmUtb2JzZXJ2aW5nIGFmdGVyIGRpc2Nv
bm5lY3Qgd29ya3Mgd2l0aCB0aGUgc2FtZSBvYnNlcnZlci4KK1BBU1MgbXV0YXRpb25zLmxlbmd0
aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0
aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92
ZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiY2hp
bGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMV0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNT
IG11dGF0aW9uc1sxXS5yZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjIKKworVGVzdGluZyB0
aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImNoaWxkTGlzdCIgZG9lcyBub3QgcmVz
dWx0IGluIGhlYXJpbmcgYWJvdXQgY2hpbGRMaXN0IGNoYW5nZXMuCitQQVNTIG11dGF0aW9ucyBp
cyBudWxsCisKK1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRo
ZSBzYW1lIG9ic2VydmVyIGhhcyB0aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4K
K1BBU1MgY2FsbHMgaXMgMQorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRp
b25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zIGlzIG51bGwKKworVGVz
dGluZyB0aGF0IG11bHRpcGxlIG9ic2VydmVycyBjYW4gYmUgcmVnaXN0ZXJlZCB0byBhIGdpdmVu
IG5vZGUgYW5kIGJvdGggcmVjZWl2ZSBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucy5sZW5ndGgg
aXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlv
bnMyLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uczJbMF0udHlwZSBpcyAiY2hpbGRMaXN0Igor
CitUZXN0aW5nIHRoYXQgaW5uZXJUZXh0IGFuZCBpbm5lckhUTUwgYWx3YXlzIHJlc3VsdCBpbiBh
IHNpbmdsZSBjaGlsZExpc3QgbXV0YXRpb24uCisuLi5pbm5lckhUTUwKK1BBU1MgbXV0YXRpb25z
Lmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNT
IG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAzCitQQVNTIG11dGF0aW9uc1swXS5h
ZGRlZE5vZGVzWzBdIGlzIGFkZGVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sx
XSBpcyBhZGRlZERpdjIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMl0gaXMgYWRkZWRE
aXYzCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0
YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXSBpcyByZW1vdmVkRGl2MQorUEFTUyBtdXRhdGlvbnNb
MF0ucmVtb3ZlZE5vZGVzWzFdIGlzIHJlbW92ZWREaXYyCisuLi5pbm5lclRleHQKK1BBU1MgbXV0
YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3Qi
CitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDMKKworVGVzdGluZyB0aGF0IHJlcGxhY2VDaGls
ZCByZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4KKy4uLnNpbXBsZSByZXBs
YWNlIGNoaWxkCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0u
dHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGgg
aXMgMQorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1Mg
bXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0u
cmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYxCisuLi5yZXBsYWNlIHdpdGggRG9jdW1lbnRG
cmFnbWVudAorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5
cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlz
IDIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11
dGF0aW9uc1swXS5hZGRlZE5vZGVzWzFdIGlzIGFkZGVkRGl2MgorUEFTUyBtdXRhdGlvbnNbMF0u
cmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNb
MF0gaXMgcmVtb3ZlZERpdjEKKworVGVzdGluZyB0aGF0IGluc2VydEJlZm9yZSByZXN1bHRzIGlu
IG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAx
CitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9uc1sw
XS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBd
IGlzIGFkZGVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXSBpcyBhZGRlZERp
djIKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMAorCitUZXN0aW5n
IHRoYXQgYXBwZW5kQ2hpbGQgcmVzdWx0cyBpbiBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMu
CitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAi
Y2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMgorUEFT
UyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25z
WzBdLmFkZGVkTm9kZXNbMV0gaXMgYWRkZWREaXYyCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVk
Tm9kZXMubGVuZ3RoIGlzIDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1jaGlsZExpc3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1j
aGlsZExpc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTZlY2JkOGUzMGRiYWY5YTc5NjBiYjIwYzJjMjk0
NmIyZWIwNGZiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLWNoaWxkTGlzdC5odG1sCkBAIC0wLDAgKzEsNDA3IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzx0aXRsZT48
L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD1kZXNjcmlwdGlvbj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKK3ZhciBtdXRhdGlvbnMsIG11dGF0aW9uczI7Cit2YXIgY2FsbHM7Cit2YXIgZGl2LCByZW1v
dmVkRGl2MSwgcmVtb3ZlZERpdjIsIGFkZGVkRGl2MSwgYWRkZWREaXYyLCBhZGRlZERpdjM7CisK
K2Z1bmN0aW9uIHRlc3RCYXNpYygpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsK
KworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBiYXNpYyBh
c3BlY3RzIG9mIGNoaWxkTGlzdCBvYnNlcnZhdGlvbi4nKTsKKworICAgICAgICBtdXRhdGlvbnMg
PSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7
CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNl
cnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIHJlbW92ZWRE
aXYxID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAg
ICAgICAgc2V0VGltZW91dChjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSgpIHsKKyAgICAgICAgZGVidWco
Jy4uLmNhbiBjaGlsZExpc3QgY2hhbmdlcyBiZSBvYnNlcnZlZCBhdCBhbGwnKTsKKworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisKKyAgICAgICAgbXV0
YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBy
ZW1vdmVkRGl2MSA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KSk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tOb3REZWxpdmVyZWRBbmRNdXRhdGVNdWx0aXBs
ZSwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tOb3REZWxpdmVyZWRBbmRNdXRhdGVN
dWx0aXBsZSgpIHsKKyAgICAgICAgZGVidWcoJy4uLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSBzaG91
bGQgcHJldmVudCBmdXJ0aGVyIGRlbGl2ZXJ5IG9mIG11dGF0aW9ucy4nKTsKKworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShk
aXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5yZW1v
dmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHJlbW92ZWREaXYyID0gZGl2LnJlbW92
ZUNoaWxkKGRpdi5maXJzdENoaWxkKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnJlLW9ic2Vy
dmluZyBhZnRlciBkaXNjb25uZWN0IHdvcmtzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuJyk7CisK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWRE
aXYyJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycp
OworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RXcm9uZ1R5cGUoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7
CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBv
YnNlcnZpbmcgd2l0aG91dCBzcGVjaWZ5aW5nICJjaGlsZExpc3QiIGRvZXMgbm90IHJlc3VsdCBp
biBoZWFyaW5nIGFib3V0IGNoaWxkTGlzdCBjaGFuZ2VzLicpOworCisgICAgICAgIG11dGF0aW9u
cyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0p
IHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9i
c2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRy
dWUgfSk7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMnLCAnbnVsbCcpOwor
ICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAg
ICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0
ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24oKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2
ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhh
dCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhhcyB0
aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4nKTsKKworICAgICAgICBjYWxscyA9
IDA7CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAg
ICAgICAgICBjYWxscysrOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGRpdiwgeyBjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisgICAgICAg
IG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgZGl2
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0
VGltZW91dChjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUsIDApOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGNoZWNrRGlzY29ubmVjdEFuZE11dGF0ZSgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ2NhbGxz
JywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAg
ICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hp
bGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5v
YnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBzZXRUaW1lb3V0KGZp
bmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgp
OworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisg
ICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlT2JzZXJ2ZXJzKCkgeworICAg
IHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworICAgIHZhciBvYnNlcnZlcjI7CisKKyAgICBm
dW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBtdWx0aXBsZSBv
YnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBub2RlIGFuZCBib3RoIHJlY2Vp
dmUgbXV0YXRpb25zLicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlv
bnMgPSBtOworICAgICAgICB9KTsKKyAgICAgICAgb2JzZXJ2ZXIyID0gbmV3IFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zMiA9IG07Cisg
ICAgICAgIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRy
dWUgfSk7CisgICAgICAgIG9ic2VydmVyMi5vYnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUg
fSk7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KSk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBmaW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMyLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnMyWzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgb2JzZXJ2
ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBvYnNlcnZlcjIuZGlzY29ubmVjdCgpOworICAgICAg
ICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQo
KTsKK30KKworZnVuY3Rpb24gdGVzdElubmVySFRNTEFuZElubmVyVGV4dCgpIHsKKyAgICB2YXIg
ZGl2OworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAg
ICBkZWJ1ZygnVGVzdGluZyB0aGF0IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1
bHQgaW4gYSBzaW5nbGUgY2hpbGRMaXN0IG11dGF0aW9uLicpOworCisgICAgICAgIG11dGF0aW9u
cyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj48ZGl2PkJhcjwvZGl2Pic7
CisgICAgICAgIHJlbW92ZWREaXYxID0gZGl2LmZpcnN0Q2hpbGQ7CisgICAgICAgIHJlbW92ZWRE
aXYyID0gcmVtb3ZlZERpdjEubmV4dFNpYmxpbmc7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25z
ID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hp
bGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuaW5uZXJIVE1MID0gJ2ZvbzxpbWcgc3JjPSJi
YXIucG5nIj48cD5CYXo8L3A+JzsKKyAgICAgICAgYWRkZWREaXYxID0gZGl2LmNoaWxkTm9kZXNb
MF07CisgICAgICAgIGFkZGVkRGl2MiA9IGRpdi5jaGlsZE5vZGVzWzFdOworICAgICAgICBhZGRl
ZERpdjMgPSBkaXYuY2hpbGROb2Rlc1syXTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja0lubmVy
SFRNTCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tJbm5lckhUTUwoKSB7CisgICAg
ICAgIGRlYnVnKCcuLi5pbm5lckhUTUwnKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
Lmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICci
Y2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMu
bGVuZ3RoJywgJzMnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
WzBdJywgJ2FkZGVkRGl2MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVk
Tm9kZXNbMV0nLCAnYWRkZWREaXYyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1syXScsICdhZGRlZERpdjMnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMV0nLCAncmVtb3ZlZERpdjInKTsKKworICAg
ICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYuaW5uZXJUZXh0ID0gJ2Zvbyc7Cisg
ICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5p
c2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5pbm5lclRleHQnKTsKKworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LmFkZGVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzMnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVj
dCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQor
CisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdFJlcGxhY2VDaGlsZCgpIHsKKyAgICB2
YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgZnJhZ21lbnQ7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZXBsYWNlQ2hpbGQg
cmVzdWx0cyBpbiBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuJyk7CisKKyAgICAgICAgbXV0
YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHNwYW4+Rm9vPC9zcGFuPjxkaXY+QmFyPC9k
aXY+JzsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBkaXYuZmlyc3RDaGlsZDsKKworICAgICAgICBv
YnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAg
ICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9i
c2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgYWRkZWREaXYxID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRpdi5yZXBsYWNlQ2hpbGQoYWRk
ZWREaXYxLCBkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tSZXBsYWNl
V2l0aE5vZGUsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrUmVwbGFjZVdpdGhOb2Rl
KCkgeworICAgICAgICBkZWJ1ZygnLi4uc2ltcGxlIHJlcGxhY2UgY2hpbGQnKTsKKworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywgJ2FkZGVkRGl2MScpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisg
ICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICBhZGRlZERpdjEgPSBmcmFnbWVudC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIGFkZGVkRGl2
MiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsK
KyAgICAgICAgcmVtb3ZlZERpdjEgPSBkaXYuZmlyc3RDaGlsZDsKKworICAgICAgICBkaXYucmVw
bGFjZUNoaWxkKGZyYWdtZW50LCByZW1vdmVkRGl2MSk7CisKKyAgICAgICAgc2V0VGltZW91dChm
aW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVi
dWcoJy4uLnJlcGxhY2Ugd2l0aCBEb2N1bWVudEZyYWdtZW50Jyk7CisKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5hZGRlZE5vZGVzLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0uYWRkZWROb2Rlc1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5hZGRlZE5vZGVzWzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAg
ICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBy
dW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RJ
bnNlcnRCZWZvcmUoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFy
IGZyYWdtZW50OworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0
aW5nIHRoYXQgaW5zZXJ0QmVmb3JlIHJlc3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRp
b25zLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxzcGFu
PkZvbzwvc3Bhbj4nOworICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKTsKKyAgICAgICAgYWRkZWREaXYxID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBhZGRlZERpdjIgPSBmcmFnbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAgICAg
b2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAg
ICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5v
YnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5pbnNlcnRCZWZv
cmUoZnJhZ21lbnQsIGRpdi5maXJzdENoaWxkKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gs
IDApOworICAgIH0KKworCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LmFkZGVkTm9kZXMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5hZGRlZE5vZGVzWzBdJywgJ2FkZGVkRGl2MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLmFkZGVkTm9kZXNbMV0nLCAnYWRkZWREaXYyJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcwJyk7CisKKyAgICAgICAgb2JzZXJ2
ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0
KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEFwcGVuZENoaWxk
KCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworICAgIHZhciBmcmFnbWVudDsK
KworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGFw
cGVuZENoaWxkIHJlc3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLicpOworCisg
ICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj4n
OworICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsK
KyAgICAgICAgYWRkZWREaXYxID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpOworICAgICAgICBhZGRlZERpdjIgPSBmcmFnbWVudC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBu
ZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRh
dGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwg
eyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudCk7
CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBm
aW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGgnLCAnMicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0nLCAnYWRkZWREaXYxJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sxXScsICdhZGRlZERp
djInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3Ro
JywgJzAnKTsKKworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVn
KCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQor
Cit2YXIgdGVzdHMgPSBbdGVzdEJhc2ljLCB0ZXN0V3JvbmdUeXBlLCB0ZXN0TXVsdGlwbGVSZWdp
c3RyYXRpb24sIHRlc3RNdWx0aXBsZU9ic2VydmVycywgdGVzdElubmVySFRNTEFuZElubmVyVGV4
dCwgdGVzdFJlcGxhY2VDaGlsZCwgdGVzdEluc2VydEJlZm9yZSwgdGVzdEFwcGVuZENoaWxkXTsK
K3ZhciB0ZXN0SW5kZXggPSAwOworIAorZnVuY3Rpb24gcnVuTmV4dFRlc3QoKSB7CisgICAgaWYg
KHRlc3RJbmRleCA8IHRlc3RzLmxlbmd0aCkKKyAgICAgICAgdGVzdHNbdGVzdEluZGV4KytdKCk7
CisgICAgZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZGVzY3JpcHRpb24oJ1Rl
c3QgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuJyk7CisKK2lm
ICghd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpCisgICAgdGVzdEZhaWxlZCgnVGhpcyB0
ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpJyk7CitlbHNlCisgICAgcnVu
TmV4dFRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112000</attachid>
            <date>2011-10-21 12:10:00 -0700</date>
            <delta_ts>2011-10-21 12:19:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68955-20111021120959.patch</filename>
            <type>text/plain</type>
            <size>51252</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxMTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NjE0MjVkNmE4YzM2MmNk
NWFkYzFmMzlhZTIzNzI4ODQ5MmFiODk0Li4xYjgwMjcxZmE1Y2ZjNDM3NTQ3MjMxYzY0ZjE5N2E3
ZDNlYjVlOWRjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMTAtMTggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGNo
aWxkTGlzdCBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgb2JqZWN0IHdo
aWNoIG1hbmFnZXMgdGhlIGNvYWxlc2Npbmcgb2YKKyAgICAgICAgbXVsdGlwbGUgY2hpbGQgcmVt
b3ZhbHMgYW5kIGFkZGl0aW9ucyB3aXRoaW4gRE9NIG9wZXJhdGlvbnMgaW50byBzaW5nbGUgY2hp
bGRMaXN0CisgICAgICAgIG11dGF0aW9uIHJlY29yZHMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgcGF0Y2ggZG9lc24ndCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdoaWNoIGNhbiBiZSBjb2FsZXNj
ZWQgKGl0IG9ubHkKKyAgICAgICAgY292ZXJzIENvbnRhaW5lck5vZGUuKiwgYW5kIE5vZGUuaW5u
ZXJIVE1ML2lubmVyVGV4dCkuIEEgc2VwYXJhdGUgYnVnLAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzODUsIGhhcyBiZWVuIG9wZW5lZCB0byB0cmFj
ayB0aGUKKyAgICAgICAgcmVtYWluaW5nIGNhc2VzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6
Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3Vt
dWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp+Q2hpbGRMaXN0QWNjdW11bGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11
bGF0aW9uOjpjaGlsZEFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxh
dGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OmRp
c3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRM
aXN0QWNjdW11bGF0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1
bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpDaGlsZExp
c3RBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjp+Q2hpbGRMaXN0QWNjdW11bGF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246OkNoaWxk
TGlzdEFjY3VtdWxhdG9yOjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RB
Y2N1bXVsYXRpb246OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTGlzdEFjY3VtdWxhdGlvbjo6Q2hpbGRMaXN0QWNjdW11bGF0b3I6Ondp
bGxSZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RBY2N1bXVsYXRpb246
OkNoaWxkTGlzdEFjY3VtdWxhdG9yOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0QWNjdW11bGF0aW9uOjpDaGlsZExpc3RBY2N1bXVsYXRvcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9u
U2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOgorICAgICAgICAq
IGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGRvbS9Db250
YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6Omluc2VydEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0
Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRleHRDb250ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlw
ZSk6CisgICAgICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICog
aHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5X
aXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQp
OgorCiAyMDExLTEwLTIxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAg
ICAgQ29sdW1uIHJ1bGVzIHBvc2l0aW9uZWQgaW5jb3JyZWN0bHkgaW4gdmVydGljYWwtcmwgYmxv
Y2sgd2l0aCBob3Jpem9udGFsIGJvcmRlciBvciBwYWRkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDVmYmNhMzJjZmNiODkyNWI3ZjNjOGI5ZTE3ZTMwOWQ3ZGZiNWZiNGMuLjMzNTZkNGNkNzU1
NmQ4MTg5OWUwZjQ3NWFiN2MzNTYyZjE3NjUwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01
MTMsNiArNTEzLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9DREFUQVNlY3Rpb24u
Y3BwCiAgICAgZG9tL0NoYXJhY3RlckRhdGEuY3BwCiAgICAgZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuY3BwCisgICAgZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCiAgICAgZG9tL0NoaWxk
Tm9kZUxpc3QuY3BwCiAgICAgZG9tL0NsYXNzTm9kZUxpc3QuY3BwCiAgICAgZG9tL0NsaWVudFJl
Y3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiMzc2ODU5ZDg4Y2QwMWYy
YzNmMzE0MGIwMzJjYzE1MTQ1NWE3NTdkLi44MmQxYzAwNWEzMzdjZGU3MWZmY2QyODRhZTIxMjBm
MDk1MTY4NTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTExMjIsNiArMTEy
Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3Rl
ckRhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5v
ZGVMaXN0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaCBcCiAJU291
cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAz
NDYxMzM1MmY2ZmYzZDFjNmM0M2RjOTRlNGU0ZWZkNmMxM2U3N2IyLi41NmI2MGNkNWFiMTVmY2Fl
YTg4ZDJkNzI3OTI1YTQ5Y2M2NDgxMWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01MTI3LDYgKzUx
MjcsOCBAQAogICAgICAgICAgICAgJ2RvbS9DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCcsCiAgICAgICAgICAgICAn
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwJywKKyAgICAgICAgICAgICdkb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5jcHAnLAorICAgICAgICAgICAgJ2RvbS9DaGlsZExpc3RNdXRhdGlvblNj
b3BlLmgnLAogICAgICAgICAgICAgJ2RvbS9DaGlsZE5vZGVMaXN0LmNwcCcsCiAgICAgICAgICAg
ICAnZG9tL0NoaWxkTm9kZUxpc3QuaCcsCiAgICAgICAgICAgICAnZG9tL0NsYXNzTm9kZUxpc3Qu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjVjMjM0Y2U2ZDQ0NGY1MmNhNWFjZmMxZTc0NjVlODY2
NDVmNjNlNS4uMGIyY2YxYjVkMDU5NGZiNjViZTVmZWNhOGRkZTcwNmQ2MDkwMmMwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTQ2NSw2ICs0NjUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vQ0RBVEFT
ZWN0aW9uLmNwcCBcCiAgICAgZG9tL0NoYXJhY3RlckRhdGEuY3BwIFwKICAgICBkb20vQ2hlY2tl
ZFJhZGlvQnV0dG9ucy5jcHAgXAorICAgIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBc
CiAgICAgZG9tL0NoaWxkTm9kZUxpc3QuY3BwIFwKICAgICBkb20vQ2xhc3NOb2RlTGlzdC5jcHAg
XAogICAgIGRvbS9DbGllbnRSZWN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDQ0NTc5MGJlODc3MTkyNjU5NDM0NDM0MTc2YmZjN2Vk
NzIzZGUyOTUuLjkwZjllMWU3M2E5NzRhNWNiZmI1MDBhMzY4ZGNlY2M5OThmNzk1ZjUgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Mzg3NCw2
ICs0Mzg3NCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxkb21cQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAiCisJCQkJPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
KwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxDaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGRvbVxDaGlsZE5vZGVMaXN0LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjUxNjJkMmYxZTA1NDQ2ZTFlMTY0YzkxNDIzNTRhZGQxMGU0ZjFmMi4uMzdh
OTk4OWE4OTU3NzM2NjRmMTAwNTI0OGNkOGEwZDFiN2M5ZDBlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTgwNyw2ICs1ODA3
LDggQEAKIAkJRDNBQTEwRjQxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0FBMTBGMjEy
M0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJRDNENEU5NzIx
MzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAg
LyogSFRNTFN1bW1hcnlFbGVtZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBDN0NGRTAwN0JB
NTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5
RWxlbWVudC5oICovOyB9OworCQlENjE5QTMwNzE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5jcHAgKi87IH07CisJCUQ2MTlBMzA4MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRh
dGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICov
OyB9OwogCQlENzBBRDY1NzEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU1MTNFMTM0
MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwICovOyB9OwogCQlENzBBRDY1ODEzRTEzNDJC
MDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9u
LmggKi87IH07CiAJCUQ4QjYxNTJGMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ4QjYxNTJFMTAzMjQ5NTEw
MEM4NTU0QSAvKiBDb29raWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTMxMzksNiArMTMxNDEsOCBAQAogCQlEM0FBMTBGMjEyM0E5OEFBMDA5
MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFRdWVyeU1hdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RDNENEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1NDAgLyog
SFRNTFN1bW1hcnlFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhU
TUxTdW1tYXJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENjE5QTMw
NTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8q
IENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJlZ2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQ3MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUmVnaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBD
b29raWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTAxNSw2ICsyMTAxOSw4IEBACiAJCQkJOTNFRUMx
RTYwOUMyODc3NzAwQzUxNUQxIC8qIENoYXJhY3RlckRhdGEuaWRsICovLAogCQkJCTkzRjkyNTQy
MEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmNwcCAqLywKIAkJCQk5M0Y5
MjU0MTBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oICovLAorCQkJCUQ2
MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCAqLywK
KwkJCQlENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5o
ICovLAogCQkJCUE4MTg3MjFBMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAq
LywKIAkJCQlBODE4NzIxNTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5oICovLAog
CQkJCUJDOTA0QjcyMEQxMDk5OEYwMDY4MEQzMiAvKiBDbGFzc05vZGVMaXN0LmNwcCAqLywKQEAg
LTIxODMwLDYgKzIxODM2LDcgQEAKIAkJCQlGNTVCM0RCMjEyNTFGMTJEMDAzRUYyNjkgLyogQ2hl
Y2tib3hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwMEI3MjFBMTFERTY0MjgwMDhB
QjlGRiAvKiBDaGVja2VkSW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y5MjU0MzBGN0VGNUI4
MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDYx
OUEzMDgxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MTg3MjIwMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEQ4MjM1MjBBRjkyQTc5MDAwNEYwNTcgLyogQ2hyb21lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEQ4MjQwODBBRjkzQUVCMDAwNEYwNTcgLyogQ2hyb21lQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MTgwLDYgKzI1MTg3LDcgQEAKIAkJCQk5MzI2REMw
QzA5REFENUQ2MDBBRkM4NDcgLyogQ2hhcnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RjU1QjNEQjExMjUxRjEyRDAwM0VGMjY5IC8qIENoZWNrYm94SW5wdXRUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjkyNTQ0MEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0
b25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ2MTlBMzA3MTQ0RTAwQkUwMDRCQzMwMiAvKiBD
aGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MTg3MjI1MDk3
N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
RDgyMzhCMEFGOTJERjYwMDA0RjA1NyAvKiBDaHJvbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QUJBRjIyMDgwQzAzQjFDNzAwQjBCQ0YwIC8qIENocm9tZU1hYy5tbSBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM1MjNmN2QwNTJhOTk3YTcxNGFkNDMyMjUwY2JmYmUxZmUxOGM5YzcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKQEAg
LTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQorCisjaW5jbHVkZSAiQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIgorCisjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJNdXRhdGlvblJlY29yZC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJTdGF0aWNO
b2RlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCisvLyBDaGls
ZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yIGV4cGVjdHMgdGhhdCBhbGwgcmVtb3ZhbHMgZnJvbSBh
IHBhcmVudCB0YWtlIHBsYWNlIGluIG9yZGVyCisvLyBhbmQgcHJlY2VkZSBhbnkgYWRkaXRpb25z
LiBJZiB0aGlzIGlzIHZpb2xhdGVkIChpLmUuIGJlY2F1c2Ugb2YgY29kZSBjaGFuZ2VzIGVsc2V3
aGVyZQorLy8gaW4gV2ViQ29yZSkgaXQgd2lsbCBsaWtlbHkgcmVzdWx0IGluIGJvdGggKGEpIEFT
U0VSVGlvbnMgZmFpbGluZywgYW5kIChiKSBtdXRhdGlvbiByZWNvcmRzCisvLyBiZWluZyBlbnF1
ZXVlZCBmb3IgZGVsaXZlcnkgYmVmb3JlIHRoZSBvdXRlci1tb3N0IHNjb3BlIGNsb3Nlcy4KK2Ns
YXNzIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDaGls
ZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hp
bGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcik7CitwdWJsaWM6CisgICAgQ2hpbGRMaXN0TXV0YXRp
b25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+LCBWZWN0b3I8V2ViS2l0TXV0YXRpb25PYnNl
cnZlcio+Jik7CisgICAgfkNoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IoKTsKKworICAgIHZv
aWQgY2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGls
ZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpOwor
Citwcml2YXRlOgorICAgIHZvaWQgY2xlYXIoKTsKKyAgICBib29sIGlzRW1wdHkoKTsKKyAgICBi
b29sIGlzQWRkZWROb2RlSW5PcmRlcihOb2RlKik7CisgICAgYm9vbCBpc1JlbW92ZWROb2RlSW5P
cmRlcihOb2RlKik7CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworCisgICAgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBt
X2FkZGVkTm9kZXM7CisgICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNTaWJsaW5nOworICAgIFJl
ZlB0cjxOb2RlPiBtX25leHRTaWJsaW5nOworICAgIFJlZlB0cjxOb2RlPiBtX2xhc3RBZGRlZDsK
KworICAgIFZlY3RvcjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4gbV9vYnNlcnZlcnM7Cit9Owor
CitjbGFzcyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIpOworcHVibGljOgorICAgIH5NdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcigpOworCisgICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyKiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9k
ZSopOworICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqKTsKKworICAgIHZvaWQg
Y2hpbGRBZGRlZChOb2RlKiwgUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3Zl
Q2hpbGQoTm9kZSosIFBhc3NSZWZQdHI8Tm9kZT4pOworCitwcml2YXRlOgorICAgIE11dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworCisg
ICAgdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gU2NvcGluZ0xldmVsTWFwOworICAg
IFNjb3BpbmdMZXZlbE1hcCBtX3Njb3BpbmdMZXZlbHM7CisgICAgSGFzaE1hcDxOb2RlKiwgUmVm
UHRyPENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I+ID4gbV9hY2N1bXVsYXRpb25zOworCisg
ICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKiBzX2luc3RhbmNlOworfTsKKwor
Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRv
cihQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgVmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIq
PiYgb2JzZXJ2ZXJzKQorICAgIDogbV90YXJnZXQodGFyZ2V0KQoreworICAgIG1fb2JzZXJ2ZXJz
LnN3YXAob2JzZXJ2ZXJzKTsKKyAgICBjbGVhcigpOworfQorCitDaGlsZExpc3RNdXRhdGlvbkFj
Y3VtdWxhdG9yOjp+Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcigpCit7CisgICAgQVNTRVJU
KGlzRW1wdHkoKSk7Cit9CisKK2lubGluZSBib29sIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0
b3I6OmlzQWRkZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKK3sKKyAgICByZXR1cm4gaXNFbXB0
eSgpIHx8IChtX2xhc3RBZGRlZCA9PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgbV9uZXh0
U2libGluZyA9PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0
YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQor
eworICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOworCisgICAgQVNTRVJUKGlzQWRk
ZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpOworICAgIGlmICghaXNBZGRlZE5vZGVJbk9yZGVy
KGNoaWxkLmdldCgpKSkKKyAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CisKKyAgICBp
ZiAoaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcHJldmlvdXNTaWJsaW5nID0gY2hpbGQtPnByZXZp
b3VzU2libGluZygpOworICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7CisgICAgfQorCisgICAgbV9hZGRlZE5vZGVzLmFwcGVuZChjaGlsZCk7CisgICAgbV9sYXN0
QWRkZWQgPSBjaGlsZDsKK30KKworaW5saW5lIGJvb2wgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVs
YXRvcjo6aXNSZW1vdmVkTm9kZUluT3JkZXIoTm9kZSogY2hpbGQpCit7CisgICAgcmV0dXJuIGlz
RW1wdHkoKSB8fCBtX25leHRTaWJsaW5nLmdldCgpID09IGNoaWxkOworfQorCit2b2lkIENoaWxk
TGlzdE11dGF0aW9uQWNjdW11bGF0b3I6OndpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+
IHBycENoaWxkKQoreworICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOworCisgICAg
QVNTRVJUKG1fYWRkZWROb2Rlcy5pc0VtcHR5KCkgJiYgaXNSZW1vdmVkTm9kZUluT3JkZXIoY2hp
bGQuZ2V0KCkpKTsKKworICAgIGlmICghbV9hZGRlZE5vZGVzLmlzRW1wdHkoKSB8fCAhaXNSZW1v
dmVkTm9kZUluT3JkZXIoY2hpbGQuZ2V0KCkpKQorICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNv
cmQoKTsKKworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wcmV2aW91c1NpYmxpbmcg
PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbV9sYXN0QWRkZWQgPSBjaGlsZC0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKKworICAgIG1fcmVtb3ZlZE5vZGVzLmFwcGVuZChjaGlsZCk7Cit9CisKK3Zv
aWQgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCkK
K3sKKyAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAg
ICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGlsZExpc3QoCisgICAg
ICAgIG1fdGFyZ2V0LCBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9hZGRlZE5vZGVzKSwgU3RhdGlj
Tm9kZUxpc3Q6OmFkb3B0KG1fcmVtb3ZlZE5vZGVzKSwgbV9wcmV2aW91c1NpYmxpbmcsIG1fbmV4
dFNpYmxpbmcpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29ic2VydmVycy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9vYnNlcnZlcnNbaV0tPmVucXVldWVNdXRhdGlvblJlY29yZCht
dXRhdGlvbik7CisKKyAgICBjbGVhcigpOworfQorCit2b2lkIENoaWxkTGlzdE11dGF0aW9uQWNj
dW11bGF0b3I6OmNsZWFyKCkKK3sKKyAgICBpZiAoIW1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgbV9yZW1vdmVkTm9kZXMuY2xlYXIoKTsKKyAgICBpZiAoIW1fYWRkZWROb2Rlcy5p
c0VtcHR5KCkpCisgICAgICAgIG1fYWRkZWROb2Rlcy5jbGVhcigpOworICAgIG1fcHJldmlvdXNT
aWJsaW5nID0gMDsKKyAgICBtX25leHRTaWJsaW5nID0gMDsKKyAgICBtX2xhc3RBZGRlZCA9IDA7
Cit9CisKK2Jvb2wgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNFbXB0eSgpCit7Cisg
ICAgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9kZXMuaXNFbXB0
eSgpOworfQorCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogTXV0YXRpb25BY2N1bXVsYXRp
b25Sb3V0ZXI6OnNfaW5zdGFuY2UgPSAwOworCitNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6
TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIoKQoreworfQorCitNdXRhdGlvbkFjY3VtdWxhdGlv
blJvdXRlcjo6fk11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkKK3sKKyAgICBBU1NFUlQobV9z
Y29waW5nTGV2ZWxzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYWNjdW11bGF0aW9ucy5pc0Vt
cHR5KCkpOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbml0aWFsaXpl
KCkKK3sKKyAgICBBU1NFUlQoIXNfaW5zdGFuY2UpOworICAgIHNfaW5zdGFuY2UgPSBhZG9wdFB0
cihuZXcgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIpLmxlYWtQdHIoKTsKK30KKworCitNdXRh
dGlvbkFjY3VtdWxhdGlvblJvdXRlciogTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3Rh
bmNlKCkKK3sKKyAgICBpZiAoIXNfaW5zdGFuY2UpCisgICAgICAgIGluaXRpYWxpemUoKTsKKwor
ICAgIHJldHVybiBzX2luc3RhbmNlOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9uUm91
dGVyOjpjaGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCkKK3sK
KyAgICBIYXNoTWFwPE5vZGUqLCBSZWZQdHI8Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcj4g
Pjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdldCk7CisgICAgQVNT
RVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKKworICAgIGlmIChpdGVyLT5zZWNv
bmQpCisgICAgICAgIGl0ZXItPnNlY29uZC0+Y2hpbGRBZGRlZChjaGlsZCk7Cit9CisKK3ZvaWQg
TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQs
IFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCit7CisgICAgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxh
dGlvbnMuZmluZCh0YXJnZXQpOworICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5l
bmQoKSk7CisKKyAgICBpZiAoaXRlci0+c2Vjb25kKQorICAgICAgICBpdGVyLT5zZWNvbmQtPndp
bGxSZW1vdmVDaGlsZChjaGlsZCk7Cit9CisKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0
ZXI6OmluY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKiB0YXJnZXQpCit7CisgICAgcGFpcjxTY29w
aW5nTGV2ZWxNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX3Njb3BpbmdMZXZlbHMuYWRk
KHRhcmdldCwgMSk7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICsrKHJlc3Vs
dC5maXJzdC0+c2Vjb25kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4gb2JzZXJ2ZXJzOworICAgIHRhcmdldC0+cmVnaXN0ZXJl
ZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6Q2hpbGRMaXN0KTsKKyAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9h
Y2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIDApOworICAgIGVsc2UKKyAgICAgICAgbV9hY2N1bXVs
YXRpb25zLnNldCh0YXJnZXQsIGFkb3B0UmVmKG5ldyBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxh
dG9yKHRhcmdldCwgb2JzZXJ2ZXJzKSkpOworfQorCit2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQoreworICAgIFNjb3Bp
bmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5kKHRhcmdldCk7
CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKKworICAgIC0tKGl0
ZXItPnNlY29uZCk7CisgICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUoaXRlcik7CisKKyAgICBSZWZQdHI8Q2hpbGRM
aXN0TXV0YXRpb25BY2N1bXVsYXRvcj4gcmVjb3JkID0gbV9hY2N1bXVsYXRpb25zLnRha2UodGFy
Z2V0KTsKKyAgICBpZiAocmVjb3JkKQorICAgICAgICByZWNvcmQtPmVucXVldWVNdXRhdGlvblJl
Y29yZCgpOworfQorCit9IC8vIG5hbWVzcGFjZQorCitDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpD
aGlsZExpc3RNdXRhdGlvblNjb3BlKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQorICAgIDogbV90
YXJnZXQodGFyZ2V0KQoreworICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5j
ZSgpLT5pbmNyZW1lbnRTY29waW5nTGV2ZWwobV90YXJnZXQuZ2V0KCkpOworfQorCitDaGlsZExp
c3RNdXRhdGlvblNjb3BlOjp+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSgpCit7CisgICAgTXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmRlY3JlbWVudFNjb3BpbmdMZXZlbCht
X3RhcmdldC5nZXQoKSk7Cit9CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRB
ZGRlZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQoreworICAgIE11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyOjppbnN0YW5jZSgpLT5jaGlsZEFkZGVkKG1fdGFyZ2V0LmdldCgpLCBjaGlsZCk7Cit9
CisKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQ
dHI8Tm9kZT4gY2hpbGQpCit7CisgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3Rh
bmNlKCktPndpbGxSZW1vdmVDaGlsZChtX3RhcmdldC5nZXQoKSwgY2hpbGQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWYyZjhjNDkxY2Q2YThkYTFjMjg1MDBkYTk0ZTdmZDU5YzAxZWEzNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmgKQEAgLTAs
MCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2hpbGRMaXN0TXV0YXRpb25TY29wZV9oCisjZGVmaW5lIENoaWxk
TGlzdE11dGF0aW9uU2NvcGVfaAorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKwor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IE5vZGU7CisKK2NsYXNzIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENoaWxkTGlzdE11dGF0aW9uU2NvcGUpOworcHVibGljOgorICAgIENoaWxkTGlz
dE11dGF0aW9uU2NvcGUoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpOworICAgIH5DaGlsZExpc3RN
dXRhdGlvblNjb3BlKCk7CisKKyAgICB2b2lkIGNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7
CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7CisKK3ByaXZhdGU6
CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKworI2VuZGlmIC8vIENo
aWxkTGlzdE11dGF0aW9uU2NvcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmlu
ZGV4IDNlYTQ5OTM2OTM1NzQ5YjEzMTkyYjc2MzQxZDUwOWIxNTM4ZTRjMGMuLjc0Yzc5ZDZmNzMx
MWI1MDQxZGJmOTU3ZDQzZGUzYzY5ODY0MDZjZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAK
ICNpbmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgor
I2luY2x1ZGUgIkNoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJDb250YWluZXJO
b2RlQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTXV0
YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKQEAgLTE0MSw2ICsxNDIsMTAgQEAgYm9vbCBDb250YWluZXJOb2RlOjppbnNl
cnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2UK
ICAgICBpZiAocmVmQ2hpbGQtPnByZXZpb3VzU2libGluZygpID09IG5ld0NoaWxkIHx8IHJlZkNo
aWxkID09IG5ld0NoaWxkKSAvLyBub3RoaW5nIHRvIGRvCiAgICAgICAgIHJldHVybiB0cnVlOwog
CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNj
b3BlIG11dGF0aW9uKHRoaXMpOworI2VuZGlmCisKICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IHJl
ZkNoaWxkOwogICAgIFJlZlB0cjxOb2RlPiByZWZDaGlsZFByZXZpb3VzU2libGluZyA9IHJlZkNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyArK2l0KSB7CkBA
IC0yNzIsNiArMjc3LDEwIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NS
ZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENo
aWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24odGhpcyk7CisjZW5kaWYKKwogICAgIFJlZlB0
cjxOb2RlPiBwcmV2ID0gb2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgIFJlZlB0cjxO
b2RlPiBuZXh0ID0gb2xkQ2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKQEAgLTQwMCw2ICs0MDksMTAg
QEAgc3RhdGljIHZvaWQgd2lsbFJlbW92ZUNoaWxkcmVuKENvbnRhaW5lck5vZGUqIGNvbnRhaW5l
cikKICAgICBOb2RlVmVjdG9yIGNoaWxkcmVuOwogICAgIGNvbGxlY3ROb2Rlcyhjb250YWluZXIs
IGNoaWxkcmVuKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjb250YWluZXIpOworI2VuZGlmCisKICAgICBmb3Ig
KE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0g
Y2hpbGRyZW4uZW5kKCk7IGl0KyspIHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBpdC0+Z2V0KCk7
CiAgICAgICAgIC8vIGZpcmUgcmVtb3ZlZCBmcm9tIGRvY3VtZW50IG11dGF0aW9uIGV2ZW50cy4K
QEAgLTYxMSw2ICs2MjQsMTAgQEAgYm9vbCBDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZChQYXNz
UmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm8KICAgICBpZiAodGFy
Z2V0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMp
OworI2VuZGlmCisKICAgICAvLyBOb3cgYWN0dWFsbHkgYWRkIHRoZSBjaGlsZChyZW4pCiAgICAg
UmVmUHRyPE5vZGU+IHByZXYgPSBsYXN0Q2hpbGQoKTsKICAgICBmb3IgKE5vZGVWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyAr
K2l0KSB7CkBAIC0xMDk1LDYgKzExMTIsMTMgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZElu
c2VydGlvbkV2ZW50cyhOb2RlKiBjaGlsZCkKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKIAorI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgaWYgKGMtPnBhcmVudE5vZGUoKSkgewor
ICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKGMtPnBhcmVudE5vZGUoKSk7
CisgICAgICAgIG11dGF0aW9uLmNoaWxkQWRkZWQoYyk7CisgICAgfQorI2VuZGlmCisKICAgICBp
ZiAoYy0+cGFyZW50Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6
OkRPTU5PREVJTlNFUlRFRF9MSVNURU5FUikpCiAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZl
bnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRFdmVu
dCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CiAKQEAgLTExMTYsNiArMTE0MCwxMyBAQCBzdGF0
aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkKICAgICBSZWZQ
dHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGls
ZC0+ZG9jdW1lbnQoKTsKIAorI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgaWYg
KGMtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0
aW9uKGMtPnBhcmVudE5vZGUoKSk7CisgICAgICAgIG11dGF0aW9uLndpbGxSZW1vdmVDaGlsZChj
KTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIGRpc3BhdGNoIHByZS1yZW1vdmFsIG11dGF0aW9u
IGV2ZW50cwogICAgIGlmIChjLT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVy
VHlwZShEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNw
YXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9k
ZVJlbW92ZWRFdmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKaW5kZXggZDY5OWIxOTExNmU4MzFkNzNmZDU1MjNhODRlYWEyZWI1ODZmZWY1Ny4uMzNmMzY1
NTQ5Y2Q2MDU2YTFkZWUzMTI4NzdhZGRlYThmZGJmNDk4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cApAQCAtNjI1LDggKzYyNSw4IEBAIHN0YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRp
b25SZWNvcmQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBNdXRhdGlvblJl
Y29yZDo6Y3JlYXRlQXR0cmlidXRlcyhlbGVtZW50LCBuYW1lKTsKLSAgICBmb3IgKFZlY3RvcjxX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKj46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlcnMuYmVnaW4o
KTsgaXRlciAhPSBvYnNlcnZlcnMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+ZW5x
dWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9ic2VydmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgb2JzZXJ2ZXJzW2ldLT5lbnF1ZXVlTXV0
YXRpb25SZWNvcmQobXV0YXRpb24pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAy
M2ZmN2ZlMjFhODNmMjMxZWI2OGRjN2NjMmY0YTQxNjlkZDZjYzQ1Li45MTVhNWRjMWRjMDljNjQ1
MzNkOTVhYTI1OTMxMGYyNzlhYmEyOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCiAj
aW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCkBAIC0yMTMwLDYgKzIxMzEsOSBAQCB2b2lkIE5vZGU6OnNldFRleHRDb250
ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGNhc2Ug
RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgY2FzZSBTSEFET1dfUk9PVF9OT0RFOiB7
CiAgICAgICAgICAgICBDb250YWluZXJOb2RlKiBjb250YWluZXIgPSB0b0NvbnRhaW5lck5vZGUo
dGhpcyk7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICAgICAgICAgIENoaWxk
TGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24odGhpcyk7CisjZW5kaWYKICAgICAgICAgICAgIGNv
bnRhaW5lci0+cmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5j
cmVhdGVUZXh0Tm9kZSh0ZXh0KSwgZWMpOwpAQCAtMjcwMCw5ICsyNzA0LDkgQEAgdm9pZCBOb2Rl
OjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXIqPiYgb2IKICAgICBpZiAoIW9ic2VydmVyRW50cmllcyB8fCBvYnNlcnZlckVudHJp
ZXMtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChWZWN0b3I8TXV0YXRp
b25PYnNlcnZlckVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVyRW50cmllcy0+YmVnaW4o
KTsgaXRlciAhPSBvYnNlcnZlckVudHJpZXMtPmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYg
KGl0ZXItPm1hdGNoZXModHlwZSkpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKGl0ZXIt
Pm9ic2VydmVyLmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9ic2VydmVyRW50
cmllcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCgqb2JzZXJ2ZXJFbnRyaWVzKVtpXS5t
YXRjaGVzKHR5cGUpKQorICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZCgoKm9ic2VydmVyRW50
cmllcylbaV0ub2JzZXJ2ZXIuZ2V0KCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDdkNzM2YWU3YmFjNjRjNDU4OGZj
YmEyZmMzZDNiNzc1Mjk3YmRlMTQuLjgzZjE1OTkwZWEyYmVjYTMzOWJiMGE3M2NjMjk2OWJhNGRm
MjlmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5j
cHAKQEAgLTY1LDggKzY1LDggQEAgdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZl
KE5vZGUqIG5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMKIAogdm9pZCBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKLSAgICBmb3IgKFZlY3RvcjxOb2Rl
Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX29ic2VydmVkTm9kZXMuYmVnaW4oKTsgaXRlciAhPSAgbV9v
YnNlcnZlZE5vZGVzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnVucmVnaXN0ZXJN
dXRhdGlvbk9ic2VydmVyKHRoaXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vYnNl
cnZlZE5vZGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX29ic2VydmVkTm9kZXNbaV0tPnVucmVn
aXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOwogCiAgICAgbV9vYnNlcnZlZE5vZGVzLmNsZWFy
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IDU5MTJkYTA3ZDc2YTQ5
MmM2ZDczMjg4YTE0MzRkZDEzMWUzMTk4MDQuLjJjOWI3YTVhMzU5NmYxNmMzN2RjMmY1OTkwNzVi
ZDM0MGEzNTgyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUg
IkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgpAQCAtMzE3LDYgKzMxOCwxMCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaGFzT25lVGV4dENoaWxkKENvbnRhaW5lck5vZGUqIG5vZGUp
CiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VDaGlsZHJlbldpdGhGcmFnbWVudChIVE1MRWxlbWVudCog
ZWxlbWVudCwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBDaGlsZExp
c3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKGVsZW1lbnQpOworI2VuZGlmCisKICAgICBpZiAoIWZy
YWdtZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgZWxlbWVudC0+cmVtb3ZlQ2hpbGRyZW4o
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDYgKzM0MywxMCBAQCBzdGF0aWMgdm9pZCByZXBs
YWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoSFRNTEVsZW1lbnQqIGVsZW1lbnQsIFBhc3NSZWZQdHI8
RG9jdW1lbgogCiBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChIVE1MRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUg
bXV0YXRpb24oZWxlbWVudCk7CisjZW5kaWYKKwogICAgIGlmIChoYXNPbmVUZXh0Q2hpbGQoZWxl
bWVudCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCo+KGVsZW1lbnQtPmZpcnN0Q2hpbGQo
KSktPnNldERhdGEodGV4dCwgZWMpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjE4NGU5NDBl
Nzk4MWZkYWVmOWUwYThjZmQ3ZGVmYzczZjFiODViNi4uZGZlZGRjZGY1NDhlMmNlNmQ5NTcwN2Rm
NjA2NjIxYjc1NzgyMzU2YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEwLTE4ICBSYWZh
ZWwgV2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9u
T2JzZXJ2ZXJzXSBJbXBsZW1lbnQgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlIGZvciBj
aGlsZExpc3QgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njg5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sOgorICAgICAg
ICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0Lmh0bWw6IEFkZGVkLgor
CiAyMDExLTEwLTIxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAg
Q29sdW1uIHJ1bGVzIHBvc2l0aW9uZWQgaW5jb3JyZWN0bHkgaW4gdmVydGljYWwtcmwgYmxvY2sg
d2l0aCBob3Jpem9udGFsIGJvcmRlciBvciBwYWRkaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKaW5kZXgg
OTg2OWZlMmVlNWIwMmMwZTc3NjhkODFhMzMyYWFmZDM4NjZlY2M4MS4uMmY4NTk4ZGZmN2EwMjBl
ZTNjNzI3ZTllMzdmOTg2YTZhMjgxODY5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApAQCAtMjMsNyAr
MjMsNyBAQCBQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAogVGVz
dGluZyB0aGF0IG9ic2VydmluZyB3aXRob3V0IHNwZWNpZnlpbmcgImF0dHJpYnV0ZXMiIGRvZXMg
bm90IHJlc3VsdCBpbiBoZWFyaW5nIGFib3V0IGF0dHJpYnV0ZSBjaGFuZ2VzLgogUEFTUyBtdXRh
dGlvbnMgaXMgbnVsbAogCi1UZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUg
d2l0aCB0aGUgc2FtZSBvYnNlcnZpbmcgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBv
cHRpb25zLgorVGVzdGluZyB0aGF0IHJlLW9ic2VydmluZyB0aGUgc2FtZSBub2RlIHdpdGggdGhl
IHNhbWUgb2JzZXJ2ZXIgaGFzIHRoZSBlZmZlY3Qgb2YgcmVzZXR0aW5nIHRoZSBvcHRpb25zLgog
UEFTUyBjYWxscyBpcyAxCiBQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQogUEFTUyBtdXRhdGlv
bnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0
aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCmluZGV4IDNjYjI3ZjM5YWZiOTMzNDRhZGIxM2Y3
YjhjNWY4YTRlYWUxOGQ2NTIuLmEwN2Q0YmU1ZTFmNDYzM2IxODUwYmQ0MGM1ZjkyNjU5MWQ0NGY5
MjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1
dGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0
ZXMuaHRtbApAQCAtMTAsOCArMTAsNyBAQAogPHNjcmlwdD4KIAogd2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOwotdmFyIG11dGF0aW9uczsKLXZhciBtdXRhdGlvbnMyOwordmFyIG11dGF0aW9u
cywgbXV0YXRpb25zMjsKIHZhciBjYWxsczsKIAogZnVuY3Rpb24gdGVzdEJhc2ljKCkgewpAQCAt
MTA3LDcgKzEwNiw3IEBAIGZ1bmN0aW9uIHRlc3RNdWx0aXBsZVJlZ2lzdHJhdGlvbigpIHsKICAg
ICB2YXIgb2JzZXJ2ZXI7CiAKICAgICBmdW5jdGlvbiBzdGFydCgpIHsKLSAgICAgICAgZGVidWco
J1Rlc3RpbmcgdGhhdCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9i
c2VydmluZyBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7CisgICAg
ICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0
aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMu
Jyk7CiAgICAgCiAJCWNhbGxzID0gMDsKICAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGlsZExpc3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoaWxkTGlzdC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmNlMTI0MTdmOWY5NjkyNTA5OGM0MjJlMTQ1Zjg1M2Q3YzQw
ODdlMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2
ZS1jaGlsZExpc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOTEgQEAKK1Rlc3QgV2ViS2l0TXV0
YXRpb25PYnNlcnZlci5vYnNlcnZlIG9uIGF0dHJpYnV0ZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2YgY2hpbGRMaXN0IG9ic2VydmF0
aW9uLgorLi4uY2FuIGNoaWxkTGlzdCBjaGFuZ2VzIGJlIG9ic2VydmVkIGF0IGFsbAorUEFTUyBt
dXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlz
dCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRp
b25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKKy4uLm9ic2VydmVyLmRpc2Nvbm5l
Y3QoKSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGRlbGl2ZXJ5IG9mIG11dGF0aW9ucy4KK1BBU1Mg
bXV0YXRpb25zIGlzIG51bGwKKy4uLnJlLW9ic2VydmluZyBhZnRlciBkaXNjb25uZWN0IHdvcmtz
IHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgorUEFT
UyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0ucmVt
b3ZlZE5vZGVzLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0g
aXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BB
U1MgbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNb
MV0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92ZWREaXYyCisKK1Rlc3RpbmcgdGhhdCBvYnNlcnZp
bmcgd2l0aG91dCBzcGVjaWZ5aW5nICJjaGlsZExpc3QiIGRvZXMgbm90IHJlc3VsdCBpbiBoZWFy
aW5nIGFib3V0IGNoaWxkTGlzdCBjaGFuZ2VzLgorUEFTUyBtdXRhdGlvbnMgaXMgbnVsbAorCitU
ZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNl
cnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuCitQQVNTIGNhbGxz
IGlzIDEKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBl
IGlzICJjaGlsZExpc3QiCitQQVNTIG11dGF0aW9ucyBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBt
dWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBub2RlIGFuZCBi
b3RoIHJlY2VpdmUgbXV0YXRpb25zLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1Mg
bXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zMi5sZW5ndGgg
aXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIKKworVGVzdGluZyB0
aGF0IGlubmVyVGV4dCBhbmQgaW5uZXJIVE1MIGFsd2F5cyByZXN1bHQgaW4gYSBzaW5nbGUgY2hp
bGRMaXN0IG11dGF0aW9uLgorLi4uaW5uZXJIVE1MCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNb
MF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1sw
XSBpcyBhZGRlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0gaXMgYWRkZWRE
aXYyCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzWzJdIGlzIGFkZGVkRGl2MworUEFTUyBt
dXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS5y
ZW1vdmVkTm9kZXNbMF0gaXMgcmVtb3ZlZERpdjEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWRO
b2Rlc1sxXSBpcyByZW1vdmVkRGl2MgorLi4uaW5uZXJUZXh0CitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRh
dGlvbnNbMF0uYWRkZWROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3Zl
ZE5vZGVzLmxlbmd0aCBpcyAzCisKK1Rlc3RpbmcgdGhhdCByZXBsYWNlQ2hpbGQgcmVzdWx0cyBp
biBtaW5pbWFsIGNoaWxkTGlzdCBtdXRhdGlvbnMuCisuLi5zaW1wbGUgcmVwbGFjZSBjaGlsZAor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNo
aWxkTGlzdCIKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1Mg
bXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1sw
XS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rl
c1swXSBpcyByZW1vdmVkRGl2MQorLi4ucmVwbGFjZSB3aXRoIERvY3VtZW50RnJhZ21lbnQKK1BB
U1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGls
ZExpc3QiCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIG11
dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdIGlzIGFkZGVkRGl2MQorUEFTUyBtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1sxXSBpcyBhZGRlZERpdjIKK1BBU1MgbXV0YXRpb25zWzBdLnJlbW92ZWROb2Rl
cy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdIGlzIHJlbW92
ZWREaXYxCisKK1Rlc3RpbmcgdGhhdCBpbnNlcnRCZWZvcmUgcmVzdWx0cyBpbiBtaW5pbWFsIGNo
aWxkTGlzdCBtdXRhdGlvbnMuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRh
dGlvbnNbMF0udHlwZSBpcyAiY2hpbGRMaXN0IgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rl
cy5sZW5ndGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXSBpcyBhZGRlZERp
djEKK1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0gaXMgYWRkZWREaXYyCitQQVNTIG11
dGF0aW9uc1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoIGlzIDAKKworVGVzdGluZyB0aGF0IGFwcGVu
ZENoaWxkIHJlc3VsdHMgaW4gbWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLgorUEFTUyBtdXRh
dGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoaWxkTGlzdCIK
K1BBU1MgbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1MgbXV0YXRpb25z
WzBdLmFkZGVkTm9kZXNbMF0gaXMgYWRkZWREaXYxCitQQVNTIG11dGF0aW9uc1swXS5hZGRlZE5v
ZGVzWzFdIGlzIGFkZGVkRGl2MgorUEFTUyBtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0
aCBpcyAwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRM
aXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hpbGRMaXN0Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDE2ZWNiZDhlMzBkYmFmOWE3OTYwYmIyMGMyYzI5NDZiMmViMDRmYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGls
ZExpc3QuaHRtbApAQCAtMCwwICsxLDQwNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8dGl0bGU+PC90aXRsZT4KKzwv
aGVhZD4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0PgorCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit2YXIgbXV0
YXRpb25zLCBtdXRhdGlvbnMyOwordmFyIGNhbGxzOwordmFyIGRpdiwgcmVtb3ZlZERpdjEsIHJl
bW92ZWREaXYyLCBhZGRlZERpdjEsIGFkZGVkRGl2MiwgYWRkZWREaXYzOworCitmdW5jdGlvbiB0
ZXN0QmFzaWMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBj
aGlsZExpc3Qgb2JzZXJ2YXRpb24uJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAg
ICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2Vy
dmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAg
ICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2
ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICByZW1vdmVkRGl2MSA9IGRpdi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRp
bWVvdXQoY2hlY2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBjaGVja0Rpc2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIGRlYnVnKCcuLi5jYW4gY2hp
bGRMaXN0IGNoYW5nZXMgYmUgb2JzZXJ2ZWQgYXQgYWxsJyk7CisKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5h
ZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MScpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51
bGw7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgcmVtb3ZlZERpdjEg
PSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAg
ICBzZXRUaW1lb3V0KGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVsdGlwbGUsIDApOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNoZWNrTm90RGVsaXZlcmVkQW5kTXV0YXRlTXVsdGlwbGUoKSB7
CisgICAgICAgIGRlYnVnKCcuLi5vYnNlcnZlci5kaXNjb25uZWN0KCkgc2hvdWxkIHByZXZlbnQg
ZnVydGhlciBkZWxpdmVyeSBvZiBtdXRhdGlvbnMuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxk
TGlzdDogdHJ1ZSB9KTsKKyAgICAgICAgcmVtb3ZlZERpdjEgPSBkaXYucmVtb3ZlQ2hpbGQoZGl2
LmZpcnN0Q2hpbGQpOworICAgICAgICByZW1vdmVkRGl2MiA9IGRpdi5yZW1vdmVDaGlsZChkaXYu
Zmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5yZS1vYnNlcnZpbmcgYWZ0ZXIg
ZGlzY29ubmVjdCB3b3JrcyB3aXRoIHRoZSBzYW1lIG9ic2VydmVyLicpOworCisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0ucmVtb3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzFdLnJlbW92ZWROb2Rlc1swXScsICdyZW1vdmVkRGl2MicpOworICAg
ICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAg
cnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0
V3JvbmdUeXBlKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVu
Y3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgb2JzZXJ2aW5nIHdp
dGhvdXQgc3BlY2lmeWluZyAiY2hpbGRMaXN0IiBkb2VzIG5vdCByZXN1bHQgaW4gaGVhcmluZyBh
Ym91dCBjaGlsZExpc3QgY2hhbmdlcy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2Jz
ZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAg
ICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNl
cnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAg
ICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAg
ICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNo
KCkgeworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zJywgJ251bGwnKTsKKyAgICAgICAgb2Jz
ZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRU
ZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxl
UmVnaXN0cmF0aW9uKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2
aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBv
ZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7CisKKyAgICAgICAgY2FsbHMgPSAwOworICAgICAg
ICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihm
dW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICAgICAgY2Fs
bHMrKzsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hp
bGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOworICAgICAgICBvYnNlcnZlci5v
YnNlcnZlKGRpdiwgeyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGRpdi5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHNldFRpbWVvdXQoY2hl
Y2tEaXNjb25uZWN0QW5kTXV0YXRlLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0Rp
c2Nvbm5lY3RBbmRNdXRhdGUoKSB7CisgICAgICAgIHNob3VsZEJlKCdjYWxscycsICcxJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIG11dGF0aW9u
cyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1
ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYs
IHsgYXR0cmlidXRlczogdHJ1ZSB9KTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9ucycsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAg
ZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZU9ic2VydmVycygpIHsKKyAgICB2YXIgZGl2Owor
ICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgb2JzZXJ2ZXIyOworCisgICAgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgbXVsdGlwbGUgb2JzZXJ2ZXJzIGNh
biBiZSByZWdpc3RlcmVkIHRvIGEgZ2l2ZW4gbm9kZSBhbmQgYm90aCByZWNlaXZlIG11dGF0aW9u
cy4nKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyMiA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
KGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9uczIgPSBtOworICAgICAgICB9KTsK
KyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAg
ICAgICBvYnNlcnZlcjIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAg
ICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAg
ICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkg
eworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zMlswXS50eXBlJywgJyJjaGlsZExpc3QiJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5l
Y3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycp
OworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RJbm5lckhUTUxBbmRJbm5lclRleHQoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2
YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rl
c3RpbmcgdGhhdCBpbm5lclRleHQgYW5kIGlubmVySFRNTCBhbHdheXMgcmVzdWx0IGluIGEgc2lu
Z2xlIGNoaWxkTGlzdCBtdXRhdGlvbi4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2
LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+PGRpdj5CYXI8L2Rpdj4nOworICAgICAgICBy
ZW1vdmVkRGl2MSA9IGRpdi5maXJzdENoaWxkOworICAgICAgICByZW1vdmVkRGl2MiA9IHJlbW92
ZWREaXYxLm5leHRTaWJsaW5nOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAg
ICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGNoaWxkTGlzdDogdHJ1
ZSB9KTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICdmb288aW1nIHNyYz0iYmFyLnBuZyI+PHA+
QmF6PC9wPic7CisgICAgICAgIGFkZGVkRGl2MSA9IGRpdi5jaGlsZE5vZGVzWzBdOworICAgICAg
ICBhZGRlZERpdjIgPSBkaXYuY2hpbGROb2Rlc1sxXTsKKyAgICAgICAgYWRkZWREaXYzID0gZGl2
LmNoaWxkTm9kZXNbMl07CisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tJbm5lckhUTUwsIDApOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrSW5uZXJIVE1MKCkgeworICAgICAgICBkZWJ1Zygn
Li4uaW5uZXJIVE1MJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAn
MScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoaWxkTGlzdCIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzLmxlbmd0aCcsICcz
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rlc1swXScsICdhZGRl
ZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzFdJywg
J2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNb
Ml0nLCAnYWRkZWREaXYzJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3Zl
ZE5vZGVzLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVt
b3ZlZE5vZGVzWzBdJywgJ3JlbW92ZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0ucmVtb3ZlZE5vZGVzWzFdJywgJ3JlbW92ZWREaXYyJyk7CisKKyAgICAgICAgbXV0YXRp
b25zID0gbnVsbDsKKyAgICAgICAgZGl2LmlubmVyVGV4dCA9ICdmb28nOworICAgICAgICBzZXRU
aW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAg
ICAgICBkZWJ1ZygnLi4uaW5uZXJUZXh0Jyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
Lmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5v
ZGVzLmxlbmd0aCcsICczJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAg
ICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0
KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZXBsYWNlQ2hpbGQoKSB7CisgICAgdmFyIGRpdjsKKyAg
ICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIGZyYWdtZW50OworCisgICAgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmVwbGFjZUNoaWxkIHJlc3VsdHMgaW4g
bWluaW1hbCBjaGlsZExpc3QgbXV0YXRpb25zLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51
bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAg
ICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPkZvbzwvc3Bhbj48ZGl2PkJhcjwvZGl2Pic7CisgICAg
ICAgIHJlbW92ZWREaXYxID0gZGl2LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgb2JzZXJ2ZXIgPSBu
ZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRh
dGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwg
eyBjaGlsZExpc3Q6IHRydWUgfSk7CisgICAgICAgIGFkZGVkRGl2MSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYucmVwbGFjZUNoaWxkKGFkZGVkRGl2MSwgZGl2
LmZpcnN0Q2hpbGQpOworICAgICAgICBzZXRUaW1lb3V0KGNoZWNrUmVwbGFjZVdpdGhOb2RlLCAw
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1JlcGxhY2VXaXRoTm9kZSgpIHsKKyAgICAg
ICAgZGVidWcoJy4uLnNpbXBsZSByZXBsYWNlIGNoaWxkJyk7CisKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnR5cGUnLCAnImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5h
ZGRlZE5vZGVzLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
YWRkZWROb2Rlc1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKworICAgICAgICBtdXRh
dGlvbnMgPSBudWxsOworICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKTsKKyAgICAgICAgYWRkZWREaXYxID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBhZGRlZERpdjIgPSBmcmFnbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHJl
bW92ZWREaXYxID0gZGl2LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgZGl2LnJlcGxhY2VDaGlsZChm
cmFnbWVudCwgcmVtb3ZlZERpdjEpOworCisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5yZXBs
YWNlIHdpdGggRG9jdW1lbnRGcmFnbWVudCcpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywg
JyJjaGlsZExpc3QiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rl
cy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9k
ZXNbMF0nLCAnYWRkZWREaXYxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRk
ZWROb2Rlc1sxXScsICdhZGRlZERpdjInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5yZW1vdmVkTm9kZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS5yZW1vdmVkTm9kZXNbMF0nLCAncmVtb3ZlZERpdjEnKTsKKworICAgICAgICBvYnNlcnZl
ci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3Qo
KTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0SW5zZXJ0QmVmb3Jl
KCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyOworICAgIHZhciBmcmFnbWVudDsK
KworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGlu
c2VydEJlZm9yZSByZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4nKTsKKwor
ICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+
JzsKKyAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7
CisgICAgICAgIGFkZGVkRGl2MSA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgYWRkZWREaXYyID0gZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIG9ic2VydmVyID0g
bmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0
YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYs
IHsgY2hpbGRMaXN0OiB0cnVlIH0pOworICAgICAgICBkaXYuaW5zZXJ0QmVmb3JlKGZyYWdtZW50
LCBkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9
CisKKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImNoaWxkTGlzdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVz
Lmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYWRkZWROb2Rl
c1swXScsICdhZGRlZERpdjEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hZGRl
ZE5vZGVzWzFdJywgJ2FkZGVkRGl2MicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LnJlbW92ZWROb2Rlcy5sZW5ndGgnLCAnMCcpOworCisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5l
Y3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0K
KworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBcHBlbmRDaGlsZCgpIHsKKyAgICB2
YXIgZGl2OworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgZnJhZ21lbnQ7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCBhcHBlbmRDaGlsZCBy
ZXN1bHRzIGluIG1pbmltYWwgY2hpbGRMaXN0IG11dGF0aW9ucy4nKTsKKworICAgICAgICBtdXRh
dGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj5Gb288L3NwYW4+JzsKKyAgICAgICAg
ZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIGFk
ZGVkRGl2MSA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKTsKKyAgICAgICAgYWRkZWREaXYyID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgY2hpbGRMaXN0
OiB0cnVlIH0pOworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAgICBz
ZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgewor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciY2hpbGRMaXN0IicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5hZGRlZE5vZGVzWzBdJywgJ2FkZGVkRGl2MScpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLmFkZGVkTm9kZXNbMV0nLCAnYWRkZWREaXYyJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ucmVtb3ZlZE5vZGVzLmxlbmd0aCcsICcwJyk7CisK
KyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwordmFyIHRlc3Rz
ID0gW3Rlc3RCYXNpYywgdGVzdFdyb25nVHlwZSwgdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uLCB0
ZXN0TXVsdGlwbGVPYnNlcnZlcnMsIHRlc3RJbm5lckhUTUxBbmRJbm5lclRleHQsIHRlc3RSZXBs
YWNlQ2hpbGQsIHRlc3RJbnNlcnRCZWZvcmUsIHRlc3RBcHBlbmRDaGlsZF07Cit2YXIgdGVzdElu
ZGV4ID0gMDsKKyAKK2Z1bmN0aW9uIHJ1bk5leHRUZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXgg
PCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3RzW3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UK
KyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Rlc2NyaXB0aW9uKCdUZXN0IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBvbiBhdHRyaWJ1dGVzLicpOworCitpZiAoIXdpbmRvdy5X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKQorICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJl
cyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKScpOworZWxzZQorICAgIHJ1bk5leHRUZXN0KCk7
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>