<?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>97825</bug_id>
          
          <creation_ts>2012-09-27 15:46:41 -0700</creation_ts>
          <short_desc>AX: labelForElement is slow when there are a lot of DOM elements</short_desc>
          <delta_ts>2012-10-25 11:08:55 -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>Accessibility</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>99126</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominic Mazzoni">dmazzoni</reporter>
          <assigned_to name="Dominic Mazzoni">dmazzoni</assigned_to>
          <cc>abarth</cc>
    
    <cc>aboxhall</cc>
    
    <cc>adamk</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dtseng</cc>
    
    <cc>mifenton</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>roger_fong</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>729944</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-27 15:46:41 -0700</bug_when>
    <thetext>See related bug: https://bugs.webkit.org/show_bug.cgi?id=33253

Currently AccessibilityNodeObject::labelForElement, which is used to find the &lt;label&gt; associated with a focusable control, scans all of the nodes in the DOM tree to find possible labels, which can be inefficient. This function shows up as a bottleneck when I run various Chrome benchmarks with accessibility enabled.

Proposed alternative: AXObjectCache should maintain a hash map from label id to label element. It should be generated lazily the first time it&apos;s needed, then updated every time a label is modified or deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730365</commentid>
    <comment_count>1</comment_count>
      <attachid>166175</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-28 01:56:22 -0700</bug_when>
    <thetext>Created attachment 166175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730790</commentid>
    <comment_count>2</comment_count>
      <attachid>166275</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-28 10:37:09 -0700</bug_when>
    <thetext>Created attachment 166275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730795</commentid>
    <comment_count>3</comment_count>
      <attachid>166275</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-09-28 10:46:08 -0700</bug_when>
    <thetext>Comment on attachment 166275
Patch

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

If the &lt;label&gt; element itself is removed from the tree, how is the m_idToLabelMapping being updated? i couldn&apos;t find where that&apos;s happening

&gt; Source/WebCore/accessibility/AXObjectCache.h:213
&gt; +    HashMap&lt;Document*, HashMap&lt;String, HTMLLabelElement*&gt;* &gt; m_idToLabelMapping;

Can we make HashMap a RefPtr&lt;&gt; so we don&apos;t have to worry about deleting it after removing from the cache

&gt; Source/WebCore/dom/Document.cpp:635
&gt;      clearAXObjectCache();

i think we should try to leverage just one AX method when Document is destroyed to do all the necessary cleanup

&gt; Source/WebCore/html/HTMLLabelElement.cpp:174
&gt; +        document()-&gt;axObjectCache()-&gt;updateLabelElementForId(document(), attribute.value(), this);

it seems that we will update the cache twice when a forAttr is added (once in willModify with the newValue, then once in attributedChanged)
Is it possible to do all the updating in attributeChanged, at the cost of perhaps searching the label cache for the correct label element.
that way, willModify won&apos;t have to be come virtual</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730801</commentid>
    <comment_count>4</comment_count>
      <attachid>166275</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-28 10:57:42 -0700</bug_when>
    <thetext>Comment on attachment 166275
Patch

Attachment 166275 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14060402</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730806</commentid>
    <comment_count>5</comment_count>
      <attachid>166275</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-28 11:01:44 -0700</bug_when>
    <thetext>Comment on attachment 166275
Patch

Attachment 166275 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14059420</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730820</commentid>
    <comment_count>6</comment_count>
      <attachid>166275</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-28 11:13:49 -0700</bug_when>
    <thetext>Comment on attachment 166275
Patch

Attachment 166275 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14056481</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730831</commentid>
    <comment_count>7</comment_count>
      <attachid>166275</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-09-28 11:27:29 -0700</bug_when>
    <thetext>Comment on attachment 166275
Patch

Attachment 166275 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14061412</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731005</commentid>
    <comment_count>8</comment_count>
      <attachid>166314</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-28 14:49:35 -0700</bug_when>
    <thetext>Created attachment 166314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731006</commentid>
    <comment_count>9</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-28 14:49:55 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 166275 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166275&amp;action=review
&gt; 
&gt; If the &lt;label&gt; element itself is removed from the tree, how is the m_idToLabelMapping being updated? i couldn&apos;t find where that&apos;s happening

Ah, you&apos;re right - it wasn&apos;t. The test was still passing because the AccessibilityObject that was returned was detached. Fixed.

&gt; &gt; Source/WebCore/accessibility/AXObjectCache.h:213
&gt; &gt; +    HashMap&lt;Document*, HashMap&lt;String, HTMLLabelElement*&gt;* &gt; m_idToLabelMapping;
&gt; 
&gt; Can we make HashMap a RefPtr&lt;&gt; so we don&apos;t have to worry about deleting it after removing from the cache

Unfortunately no - RefPtr can only be used with classes that have ref() and deref() methods. 

&gt; &gt; Source/WebCore/dom/Document.cpp:635
&gt; &gt;      clearAXObjectCache();
&gt; 
&gt; i think we should try to leverage just one AX method when Document is destroyed to do all the necessary cleanup

The problem is that there&apos;s only one ax cache but in a page with iframes, there are lots of Documents. We need to handle the case where an iframe is deleted but the main frame is still there.

&gt; &gt; Source/WebCore/html/HTMLLabelElement.cpp:174
&gt; &gt; +        document()-&gt;axObjectCache()-&gt;updateLabelElementForId(document(), attribute.value(), this);
&gt; 
&gt; it seems that we will update the cache twice when a forAttr is added (once in willModify with the newValue, then once in attributedChanged)
&gt; Is it possible to do all the updating in attributeChanged, at the cost of perhaps searching the label cache for the correct label element.
&gt; that way, willModify won&apos;t have to be come virtual

I can&apos;t figure out an easy way to do it in attributeChanged, because attributeChanged doesn&apos;t have access to the old value. Instead I was able to get rid of attributeChanged and only handle willModify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731015</commentid>
    <comment_count>10</comment_count>
      <attachid>166314</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-28 15:03:00 -0700</bug_when>
    <thetext>Comment on attachment 166314
Patch

Attachment 166314 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14070390</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731019</commentid>
    <comment_count>11</comment_count>
      <attachid>166314</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-28 15:09:54 -0700</bug_when>
    <thetext>Comment on attachment 166314
Patch

Attachment 166314 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14071303</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731022</commentid>
    <comment_count>12</comment_count>
      <attachid>166314</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-09-28 15:16:55 -0700</bug_when>
    <thetext>Comment on attachment 166314
Patch

Attachment 166314 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14068381</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731407</commentid>
    <comment_count>13</comment_count>
      <attachid>166411</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-30 23:43:44 -0700</bug_when>
    <thetext>Created attachment 166411
Fix compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731753</commentid>
    <comment_count>14</comment_count>
      <attachid>166411</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-01 09:38:45 -0700</bug_when>
    <thetext>Comment on attachment 166411
Fix compile

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

I think it looks good from an accessibility perspective. We might want to get someone more familiar with DOM code to ensure that there aren&apos;t any other edge cases missed and that virtualizing willModifyAttribute is OK

&gt; Source/WebCore/ChangeLog:19
&gt; +        (WebCore):

remove extraneous (WebCore): lines

&gt; Source/WebCore/dom/Document.cpp:633
&gt; +        topDocument()-&gt;m_axObjectCache-&gt;documentDestroyed(this);

can we put these two lines into a method like &quot;cleanupAccessibility()&quot; and put clearAXObjectCache() logic in that too

&gt; Source/WebCore/dom/Element.h:320
&gt; +    virtual void willModifyAttribute(const QualifiedName&amp;, const AtomicString&amp; oldValue, const AtomicString&amp; newValue);

we should confirm that making this virtual won&apos;t have terrible performance implications</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731969</commentid>
    <comment_count>15</comment_count>
      <attachid>166411</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-01 14:12:13 -0700</bug_when>
    <thetext>Comment on attachment 166411
Fix compile

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

Sorry, I don&apos;t want to be a pain but I don&apos;t think we should land the patch as is.

&gt; Source/WebCore/ChangeLog:12
&gt; +        Adds a new accessibility cache that maps ids to label elements
&gt; +        that label that id. The cache is built the first time it&apos;s
&gt; +        queried (per document), and then updated every time a label
&gt; +        element on the page is created, deleted, or modified.
&gt; +        This allows for very fast lookup of the label for any element.

We don&apos;t normally add new code that&apos;s unused. Where is this code used? Or where will it be used?
It seems like we don&apos;t need this hash map at all if we had used LabelsNodeList and then made it cache named ids like we do for HTMLCollection.

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:687
&gt; +        HashMap&lt;String, HTMLLabelElement*&gt;* documentMapping = new HashMap&lt;String, HTMLLabelElement*&gt;();

Please use OwnPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731970</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-01 14:12:48 -0700</bug_when>
    <thetext>Oops, ignore the following line:
&gt; We don&apos;t normally add new code that&apos;s unused. Where is this code used? Or where will it be used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731987</commentid>
    <comment_count>17</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-01 14:29:41 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Sorry, I don&apos;t want to be a pain but I don&apos;t think we should land the patch as is.

Not a pain. Sorry, I didn&apos;t know about LabelsNodeList, I&apos;d be happy to reuse it.

&gt; It seems like we don&apos;t need this hash map at all if we had used LabelsNodeList and then made it cache named ids like we do for HTMLCollection.

Agreed. Let me try it and measure the performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731999</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-01 14:34:33 -0700</bug_when>
    <thetext>For your reference, you can take a look at HTMLCollection::updateNameCache in WebCore/html/HTMLCollection.cpp and DynamicNodeList::itemWithName in WebCore/dom/DynamicNodeList.cpp.

Right now, LabelsNodeList uses DynamicNodeList, which doesn&apos;t cache all the labels by id but it&apos;s still fast when each id is unique (i.e. there are no elements with the same id) so that might be acceptable for your use case. If not, then we can always transition DynamicNodeList to use the model HTMLCollection uses where we cache the list of all elements with ids/names with a label.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732375</commentid>
    <comment_count>19</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-02 00:43:35 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; For your reference, you can take a look at HTMLCollection::updateNameCache in WebCore/html/HTMLCollection.cpp and DynamicNodeList::itemWithName in WebCore/dom/DynamicNodeList.cpp.
&gt; 
&gt; Right now, LabelsNodeList uses DynamicNodeList, which doesn&apos;t cache all the labels by id but it&apos;s still fast when each id is unique (i.e. there are no elements with the same id) so that might be acceptable for your use case. If not, then we can always transition DynamicNodeList to use the model HTMLCollection uses where we cache the list of all elements with ids/names with a label.

I just tried it, it isn&apos;t fast enough.

The case I need to optimize is the m x n case: when the document first loads, every form control needs to find its corresponding label - and then keep it updated as the document mutates.

Caching labels by id (or rather, by the value of the for attr) would work, but the question is, is there any reason that this belongs in DynamicNodeList? Is there any other use inside WebCore for this functionality? If it&apos;s only needed for accessibility, I still wonder if it wouldn&apos;t be of more use there.

At first glance, HTMLCollection&apos;s name cache doesn&apos;t look to be as efficient as the hash map in this patch - it only seems to cache from one call to the next, it doesn&apos;t maintain a persistent hash map that updates quickly as the document mutates. The solution I built is closer to the cache used in TreeScope::getElementById - it scans the document for all labels once and then updates the map in O(1) time every time a node is attached, detached, or modifies its attributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732404</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-02 01:11:10 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Caching labels by id (or rather, by the value of the for attr) would work, but the question is, is there any reason that this belongs in DynamicNodeList? Is there any other use inside WebCore for this functionality? If it&apos;s only needed for accessibility, I still wonder if it wouldn&apos;t be of more use there.
&gt; 
&gt; At first glance, HTMLCollection&apos;s name cache doesn&apos;t look to be as efficient as the hash map in this patch - it only seems to cache from one call to the next, it doesn&apos;t maintain a persistent hash map that updates quickly as the document mutates.

It maintains a persistent map. It clears all the cache and re-populates lazily when the document changes.

&gt; The solution I built is closer to the cache used in TreeScope::getElementById - it scans the document for all labels once and then updates the map in O(1) time every time a node is attached, detached, or modifies its attributes.

I see. Sounds like what you want is DocumentOrderedMap then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733262</commentid>
    <comment_count>21</comment_count>
      <attachid>166786</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-02 17:33:53 -0700</bug_when>
    <thetext>Created attachment 166786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733822</commentid>
    <comment_count>22</comment_count>
      <attachid>166786</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-03 10:31:10 -0700</bug_when>
    <thetext>Comment on attachment 166786
Patch

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

looks ok from an ax perspective

&gt; Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:744
&gt; +

extraneous newline</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736753</commentid>
    <comment_count>23</comment_count>
      <attachid>166786</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-08 10:06:14 -0700</bug_when>
    <thetext>Comment on attachment 166786
Patch

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

This approach looks much better! There are quite few nits but it looks very promising.

&gt; Source/WebCore/dom/Element.cpp:2139
&gt; +    else if (hasTagName(labelTag) &amp;&amp; name == HTMLNames::forAttr) {

I would check &quot;name == HTMLNames::forAttr&quot; first to avoid the unnecessary function call to hasTagName.

&gt; Source/WebCore/dom/Element.h:319
&gt; +    void updateForAttr(TreeScope*, const AtomicString&amp; oldForAttr, const AtomicString&amp; newForAttr);

I would have named this function updateLabel.

Also, please don&apos;t use the abbreviation &quot;attr&quot; for attribute. &quot;Attr&quot; is a special object in DOM:
http://trac.webkit.org/browser/trunk/Source/WebCore/dom/Attr.idl

&gt; Source/WebCore/dom/TreeScope.cpp:164
&gt; +        RefPtr&lt;NodeList&gt; list = rootNode()-&gt;getElementsByTagName(&quot;label&quot;);

This is very inefficient way of finding label elements. There is a lot of overhead for creating NodeList, etc..
We should traverse nodes directly.

&gt; Source/WebCore/dom/TreeScope.cpp:165
&gt; +        unsigned len = list-&gt;length();

In particular, this forces NodeList to iterate through the entire document.

&gt; Source/WebCore/dom/TreeScope.cpp:167
&gt; +            HTMLLabelElement* label = static_cast&lt;HTMLLabelElement*&gt;(list-&gt;item(i));

And this second calls to item will traverse the document for the second time.

&gt; Source/WebCore/dom/TreeScope.h:105
&gt; +    // Look up a label element by the id in its &quot;for&quot; attribute, for accessibility.

It seems redundant to put the same comment at two places. Please remove either one.

&gt; LayoutTests/accessibility/title-ui-element-correctness-expected.txt:12
&gt; +PASS control1.titleUIElement().isEqual(label1) is true
&gt; +PASS control2.titleUIElement().isEqual(label2) is true

It&apos;s not great that these outputs don&apos;t make obvious what we&apos;re testing here.

&gt; LayoutTests/accessibility/title-ui-element-correctness.html:10
&gt; +    &lt;label id=&quot;l1&quot; for=&quot;c1&quot;&gt;Label 1&lt;/label&gt;
&gt; +    &lt;input id=&quot;c1&quot; type=&quot;text&quot;&gt;

Please don&apos;t use one letter ids.

&gt; LayoutTests/accessibility/title-ui-element-correctness.html:54
&gt; +    shouldBe(&quot;control1.titleUIElement().isEqual(label1)&quot;, &quot;true&quot;);

Instead of creating a local variables like this, we can do:
shouldBe(&apos;accessibilityController.accessibleElementById(&quot;input1&quot;).titleUIElement().isEqual(accessibilityController.accessibleElementById(&quot;labelForInput1&quot;))&apos;, &apos;true&apos;);
so that the expected result is self-explanatory.
Maybe you can make a local helper function for accessibilityController.accessibleElementById; e.g. control().

&gt; LayoutTests/accessibility/title-ui-element-correctness.html:65
&gt; +    document.getElementById(&quot;l3&quot;).setAttribute(&quot;for&quot;, &quot;c3&quot;);
&gt; +    shouldBe(&quot;control3.titleUIElement().isEqual(label3)&quot;, &quot;true&quot;);

Similarly, it&apos;ll be better if you had included the both lines in shouldBe as in:
shouldBe(&quot;document.getElementById(&quot;l3&quot;).setAttribute(&quot;for&quot;, &quot;c3&quot;); control3.titleUIElement().isEqual(label3)&quot;, &quot;true&quot;);
(with more descriptive ids for label and input elements).
so that we can see what&apos;s happening between two shouldBe.

&gt; LayoutTests/accessibility/title-ui-element-correctness.html:72
&gt; +    var label4Element = document.createElement(&quot;label&quot;);
&gt; +    label4Element.id = &quot;l4&quot;;
&gt; +    label4Element.setAttribute(&quot;for&quot;, &quot;c4&quot;);
&gt; +    label4Element.innerText = &quot;Label 4&quot;;

Ditto about putting this in shouldBe. Here, you probably want to create a descriptive helper function like createLabelForInput4WithForAttribute().

&gt; LayoutTests/accessibility/title-ui-element-speed.html:36
&gt; +    // Create a bunch of labels, each of the form:
&gt; +    //   &lt;label for=&apos;c0&apos;&gt;Label 0&lt;/label&gt;
&gt; +    // Create corresponding controls, each of this form:
&gt; +    //   &lt;input id=&apos;c0&apos; type=&apos;text&apos;&gt;

This comment repeats what the code tells us. In general, the WebKit community prefers only adding &quot;why&quot; comments.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:62
&gt; +    // Now add more junk to the page. This is to make sure that titleUIElement doesn&apos;t take
&gt; +    // time proportional to the number of DOM elements on the page anymore.
&gt; +    for (i = 0; i &lt; 10000; i++) {
&gt; +      var div = document.createElement(&apos;div&apos;);
&gt; +      div.innerHTML = &quot;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&quot;;
&gt; +      junkContainer.appendChild(div);
&gt; +    }

It seems like we want to add a test in LayoutTests/perf/ using magnitude-perf.js.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:64
&gt; +    // Save the total time to build the DOM.

This is also obvious from the code.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:65
&gt; +    var midTime = new Date();

It&apos;s better to do Date.now() since creating Date object incurs a high runtime cost.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:68
&gt; +    // Now call titleUIElement on each control, and check the correctness of the result.

This comment also repeats the code.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:73
&gt; +            debug(&quot;FAIL: control &quot; + i + &quot; has no titleUIElement.&quot;);

Please use testFailed.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:78
&gt; +            debug(&quot;FAIL: control &quot; + i + &quot; titleUIElement value is &apos;&quot; +

Ditto.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:79
&gt; +                  title + &quot;&apos; , expecting it to end with &apos;Label &quot; + i + &quot;&apos;&quot;);

Wrong indentation. We don&apos;t align subsequent lines like this. &quot;title +&quot; should be exactly 4 spaces to the right of &quot;debug(&quot;.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:94
&gt; +    if (titleUIElementTime &lt; buildTime) {
&gt; +      debug(&quot;PASS Queried titleUIElement in less time than it took to build the DOM.&quot;);
&gt; +    } else {

No curly brackets around single statements.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:96
&gt; +            titleUIElementTime + &quot; ms to query titleUIElement on each control.&quot;);

Ditto about wrong indentation.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:99
&gt; +    // Remove the labels from the page so the text dump of the page isn&apos;t gigantic.

This is also obvious from the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738269</commentid>
    <comment_count>24</comment_count>
      <attachid>166786</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 15:41:19 -0700</bug_when>
    <thetext>Comment on attachment 166786
Patch

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

&gt;&gt; Source/WebCore/dom/Element.cpp:2139
&gt;&gt; +    else if (hasTagName(labelTag) &amp;&amp; name == HTMLNames::forAttr) {
&gt; 
&gt; I would check &quot;name == HTMLNames::forAttr&quot; first to avoid the unnecessary function call to hasTagName.

Good idea, done.

&gt;&gt; Source/WebCore/dom/Element.h:319
&gt;&gt; +    void updateForAttr(TreeScope*, const AtomicString&amp; oldForAttr, const AtomicString&amp; newForAttr);
&gt; 
&gt; I would have named this function updateLabel.
&gt; 
&gt; Also, please don&apos;t use the abbreviation &quot;attr&quot; for attribute. &quot;Attr&quot; is a special object in DOM:
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/dom/Attr.idl

Sure, changed.

&gt;&gt; Source/WebCore/dom/TreeScope.cpp:164
&gt;&gt; +        RefPtr&lt;NodeList&gt; list = rootNode()-&gt;getElementsByTagName(&quot;label&quot;);
&gt; 
&gt; This is very inefficient way of finding label elements. There is a lot of overhead for creating NodeList, etc..
&gt; We should traverse nodes directly.

Fixed.

&gt;&gt; Source/WebCore/dom/TreeScope.h:105
&gt;&gt; +    // Look up a label element by the id in its &quot;for&quot; attribute, for accessibility.
&gt; 
&gt; It seems redundant to put the same comment at two places. Please remove either one.

Kept it by the methods.

&gt;&gt; Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:744
&gt;&gt; +
&gt; 
&gt; extraneous newline

Fixed.

&gt;&gt; LayoutTests/accessibility/title-ui-element-correctness-expected.txt:12
&gt;&gt; +PASS control2.titleUIElement().isEqual(label2) is true
&gt; 
&gt; It&apos;s not great that these outputs don&apos;t make obvious what we&apos;re testing here.

titleUIElement() returns an object. This is asserting that it returns the object actually corresponding to the correct label element.

There are a lot of platform-specific differences in accessibility, so at the moment there&apos;s no easy way to print the string value of control2.titleUIElement() and assert that it&apos;s equal to &quot;Label 1&quot; in a cross-platform way. Chris and I are working on changing that, but for now I think this is the least brittle solution.

&gt;&gt; LayoutTests/accessibility/title-ui-element-correctness.html:10
&gt;&gt; +    &lt;input id=&quot;c1&quot; type=&quot;text&quot;&gt;
&gt; 
&gt; Please don&apos;t use one letter ids.

Changed to &quot;label1&quot;, &quot;control1&quot;, etc.

&gt;&gt; LayoutTests/accessibility/title-ui-element-correctness.html:54
&gt;&gt; +    shouldBe(&quot;control1.titleUIElement().isEqual(label1)&quot;, &quot;true&quot;);
&gt; 
&gt; Instead of creating a local variables like this, we can do:
&gt; shouldBe(&apos;accessibilityController.accessibleElementById(&quot;input1&quot;).titleUIElement().isEqual(accessibilityController.accessibleElementById(&quot;labelForInput1&quot;))&apos;, &apos;true&apos;);
&gt; so that the expected result is self-explanatory.
&gt; Maybe you can make a local helper function for accessibilityController.accessibleElementById; e.g. control().

Changed throughout.

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:36
&gt;&gt; +    //   &lt;input id=&apos;c0&apos; type=&apos;text&apos;&gt;
&gt; 
&gt; This comment repeats what the code tells us. In general, the WebKit community prefers only adding &quot;why&quot; comments.

Deleted all extraneous comments

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:62
&gt;&gt; +    }
&gt; 
&gt; It seems like we want to add a test in LayoutTests/perf/ using magnitude-perf.js.

Neat, I hadn&apos;t tried writing one of those before. Added a complementary test.

I&apos;m a little hesitant to use that test instead, because I&apos;m finding the perf tests to be flaky - not just the one I added, but others are failing a small fraction of the time.

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:65
&gt;&gt; +    var midTime = new Date();
&gt; 
&gt; It&apos;s better to do Date.now() since creating Date object incurs a high runtime cost.

Fixed throughout

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:73
&gt;&gt; +            debug(&quot;FAIL: control &quot; + i + &quot; has no titleUIElement.&quot;);
&gt; 
&gt; Please use testFailed.

Fixed throughout

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:79
&gt;&gt; +                  title + &quot;&apos; , expecting it to end with &apos;Label &quot; + i + &quot;&apos;&quot;);
&gt; 
&gt; Wrong indentation. We don&apos;t align subsequent lines like this. &quot;title +&quot; should be exactly 4 spaces to the right of &quot;debug(&quot;.

Fixed.

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:94
&gt;&gt; +    } else {
&gt; 
&gt; No curly brackets around single statements.

Fixed

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:96
&gt;&gt; +            titleUIElementTime + &quot; ms to query titleUIElement on each control.&quot;);
&gt; 
&gt; Ditto about wrong indentation.

Fixed

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:99
&gt;&gt; +    // Remove the labels from the page so the text dump of the page isn&apos;t gigantic.
&gt; 
&gt; This is also obvious from the code.

I think this comment is a &quot;why&quot; comment, ok to leave it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738270</commentid>
    <comment_count>25</comment_count>
      <attachid>167864</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 15:41:35 -0700</bug_when>
    <thetext>Created attachment 167864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738297</commentid>
    <comment_count>26</comment_count>
      <attachid>167864</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-09 16:10:12 -0700</bug_when>
    <thetext>Comment on attachment 167864
Patch

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

&gt; Source/WebCore/dom/Element.cpp:2125
&gt; +    if (!inDocument())
&gt; +        return;

I forgot to comment on the previous patch but why does it need to be in the document?
Surely, you can remove a TreeScope that used to be in the document and has the map?
If we stop updating the map at the point, it may go stale and introduce a subtle security bug down the road.
For that reason, I would prefer checking the existence of m_labelsByForAttr instead.

&gt; Source/WebCore/dom/TreeScope.cpp:159
&gt; +HTMLLabelElement* TreeScope::getLabel(const AtomicString&amp; forAttrValue)

&quot;get&quot; prefix is used only for functions with out arguments: http://www.webkit.org/coding/coding-style.html#names-out-argument
I would call this function labelElementForId.

&gt; Source/WebCore/dom/TreeScope.cpp:164
&gt; +        for (Node* node = root; node; node = node-&gt;traverseNextNode(root)) {

You shouldn&apos;t need to pass in root to traverseNextNode since traverseNextNode doesn&apos;t cross shadow boundary by default.

&gt; Source/WebCore/dom/TreeScope.h:66
&gt; +    // Look up a label element by the id in its &quot;for&quot; attribute, for accessibility.

I would just say it&apos;s for accessibility because the fact it looks up a label element by an id is obvious from the code.

&gt; Source/WebCore/dom/TreeScope.h:70
&gt; +    // m_shouldCacheLabelsByForAttr is set to true when this method is called the first time.

This comment repeats an implementation detail that&apos;s obvious from the code. Please remove it.

&gt; LayoutTests/accessibility/title-ui-element-correctness.html:34
&gt; +  &lt;/div&gt;

Please add a test case where there are multiple label elements with the same &quot;for&quot; value.
And make sure that adding and removing such elements update the map correctly.

&gt; LayoutTests/accessibility/title-ui-element-speed.html:17
&gt; +if (window.testRunner &amp;&amp; window.accessibilityController) {

I still think we should just use magnitude-perf.js. Granted, some tests are flaky but that&apos;s a problem with the tests, not the framework itself.
If the framework is making some tests flaky, then we should fix the framework instead of re-implementing it in each test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738360</commentid>
    <comment_count>27</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 17:31:58 -0700</bug_when>
    <thetext>&gt; Please add a test case where there are multiple label elements with the same &quot;for&quot; value.
&gt; And make sure that adding and removing such elements update the map correctly.

I just realized the spec allows multiple label elements to point to the same form control. It looks like I need to modify DocumentOrderedMap to return all matching nodes.

- Dominic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738384</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-09 17:59:39 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; Please add a test case where there are multiple label elements with the same &quot;for&quot; value.
&gt; &gt; And make sure that adding and removing such elements update the map correctly.
&gt; 
&gt; I just realized the spec allows multiple label elements to point to the same form control. It looks like I need to modify DocumentOrderedMap to return all matching nodes.

Is that what spec says? As far as I know, the first label element with the matching &quot;for&quot; attribute supersedes other label elements with the same for attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738458</commentid>
    <comment_count>29</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 19:47:35 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; &gt; Please add a test case where there are multiple label elements with the same &quot;for&quot; value.
&gt; &gt; &gt; And make sure that adding and removing such elements update the map correctly.
&gt; &gt; 
&gt; &gt; I just realized the spec allows multiple label elements to point to the same form control. It looks like I need to modify DocumentOrderedMap to return all matching nodes.
&gt; 
&gt; Is that what spec says? As far as I know, the first label element with the matching &quot;for&quot; attribute supersedes other label elements with the same for attribute.

w3c says: More than one LABEL may be associated with the same control by creating multiple references via the for attribute.
http://www.w3.org/TR/html401/interact/forms.html#h-17.9.1

The html5 accessibility pages notes that it&apos;s conforming, and Firefox supports multiple labels, concatenating their strings for accessibility - but they recommend against authors using it because some assistive technology and other user agents don&apos;t support it:
http://www.html5accessibility.com/tests/mulitple-labels.html

There&apos;s also the &quot;labels&quot; attribute of a labelable element, which returns *all* labels associated with a given control.

I guess it&apos;s fine to just use the first one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738460</commentid>
    <comment_count>30</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 19:51:00 -0700</bug_when>
    <thetext>&gt; I guess it&apos;s fine to just use the first one.

To clarify, I&apos;m mostly swayed by the fact that Firefox has implemented its interpretation of the spec but authors are still discouraged from using the feature because it could make things worse rather than better.
http://www.html5accessibility.com/tests/mulitple-labels.html

In addition, the platform accessibility implementation guide is noticeably silent on it, as far as I can tell - it only mentions one label:
http://dvcs.w3.org/hg/html-api-map/raw-file/tip/Overview.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738624</commentid>
    <comment_count>31</comment_count>
      <attachid>167935</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 23:42:29 -0700</bug_when>
    <thetext>Created attachment 167935
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738634</commentid>
    <comment_count>32</comment_count>
      <attachid>167936</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 23:49:06 -0700</bug_when>
    <thetext>Created attachment 167936
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738636</commentid>
    <comment_count>33</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 23:49:43 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=167864&amp;action=review

&gt;&gt; Source/WebCore/dom/Element.cpp:2125
&gt;&gt; +        return;
&gt; 
&gt; I forgot to comment on the previous patch but why does it need to be in the document?
&gt; Surely, you can remove a TreeScope that used to be in the document and has the map?
&gt; If we stop updating the map at the point, it may go stale and introduce a subtle security bug down the road.
&gt; For that reason, I would prefer checking the existence of m_labelsByForAttr instead.

Good point. I removed the inDocument check here and added it to getLabel (now labelElementForId).

I don&apos;t think there&apos;s a need to check m_labelsByForAttr again, it&apos;s checked in the callers - which seems more efficient.

&gt;&gt; Source/WebCore/dom/TreeScope.cpp:159
&gt;&gt; +HTMLLabelElement* TreeScope::getLabel(const AtomicString&amp; forAttrValue)
&gt; 
&gt; &quot;get&quot; prefix is used only for functions with out arguments: http://www.webkit.org/coding/coding-style.html#names-out-argument
&gt; I would call this function labelElementForId.

Fixed.

&gt;&gt; Source/WebCore/dom/TreeScope.cpp:164
&gt;&gt; +        for (Node* node = root; node; node = node-&gt;traverseNextNode(root)) {
&gt; 
&gt; You shouldn&apos;t need to pass in root to traverseNextNode since traverseNextNode doesn&apos;t cross shadow boundary by default.

Fixed.

&gt;&gt; Source/WebCore/dom/TreeScope.h:66
&gt;&gt; +    // Look up a label element by the id in its &quot;for&quot; attribute, for accessibility.
&gt; 
&gt; I would just say it&apos;s for accessibility because the fact it looks up a label element by an id is obvious from the code.

Done.

&gt;&gt; Source/WebCore/dom/TreeScope.h:70
&gt;&gt; +    // m_shouldCacheLabelsByForAttr is set to true when this method is called the first time.
&gt; 
&gt; This comment repeats an implementation detail that&apos;s obvious from the code. Please remove it.

You don&apos;t think it&apos;s useful to mention that there&apos;s an added performance cost from then on if this method is called?

&gt;&gt; LayoutTests/accessibility/title-ui-element-correctness.html:34
&gt;&gt; +  &lt;/div&gt;
&gt; 
&gt; Please add a test case where there are multiple label elements with the same &quot;for&quot; value.
&gt; And make sure that adding and removing such elements update the map correctly.

Done. That was a good catch, I needed to make changes to DocumetOrderedMap.

&gt;&gt; LayoutTests/accessibility/title-ui-element-speed.html:17
&gt;&gt; +if (window.testRunner &amp;&amp; window.accessibilityController) {
&gt; 
&gt; I still think we should just use magnitude-perf.js. Granted, some tests are flaky but that&apos;s a problem with the tests, not the framework itself.
&gt; If the framework is making some tests flaky, then we should fix the framework instead of re-implementing it in each test.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740194</commentid>
    <comment_count>34</comment_count>
      <attachid>167936</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-11 13:13:59 -0700</bug_when>
    <thetext>Comment on attachment 167936
Patch

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

&gt; LayoutTests/accessibility/title-ui-element-correctness-expected.txt:6
&gt; +Label 1  
&gt; +Label 2  
&gt; +Label 3  
&gt; +
&gt; +Label 5  
&gt; +Label 6b Label 6c  

Please hide these once the test is done to avoid cluttering the test output.
Namely, you can set display: none on #container or clear its innerHTML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740228</commentid>
    <comment_count>35</comment_count>
      <attachid>168269</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-11 13:41:11 -0700</bug_when>
    <thetext>Created attachment 168269
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740236</commentid>
    <comment_count>36</comment_count>
      <attachid>168269</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 13:44:10 -0700</bug_when>
    <thetext>Comment on attachment 168269
Patch for landing

Rejecting attachment 168269 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
i.html
patching file LayoutTests/accessibility/title-ui-element-correctness-expected.txt
patching file LayoutTests/accessibility/title-ui-element-correctness.html
patching file LayoutTests/perf/accessibility-title-ui-element-expected.txt
patching file LayoutTests/perf/accessibility-title-ui-element.html
patching file LayoutTests/platform/chromium/TestExpectations

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/14250839</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740270</commentid>
    <comment_count>37</comment_count>
      <attachid>168278</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-11 14:25:38 -0700</bug_when>
    <thetext>Created attachment 168278
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740379</commentid>
    <comment_count>38</comment_count>
      <attachid>168278</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 16:13:23 -0700</bug_when>
    <thetext>Comment on attachment 168278
Patch for landing

Clearing flags on attachment: 168278

Committed r131107: &lt;http://trac.webkit.org/changeset/131107&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740380</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 16:13:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740519</commentid>
    <comment_count>40</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-11 19:02:30 -0700</bug_when>
    <thetext>This patch causes an ASSERT.

crash log for DumpRenderTree (pid 13686):
STDOUT: &lt;empty&gt;
STDERR: SHOULD NEVER BE REACHED
STDERR: third_party/WebKit/Source/WebCore/dom/DocumentOrderedMap.cpp(136) : WebCore::Element* WebCore::DocumentOrderedMap::get(WTF::AtomicStringImpl*, const WebCore::TreeScope*) const [with bool (* keyMatches)(WTF::AtomicStringImpl*, WebCore::Element*) = WebCore::keyMatchesLabelForAttribute]
STDERR: 1   0x7f41298b1aa1
STDERR: 2   0x7f41298b0c7f
STDERR: 3   0x7f412996bac6
STDERR: 4   0x7f4129fd9de8
STDERR: 5   0x7f4129fe8a54
STDERR: 6   0x7f4128f5efba WebKit::WebAccessibilityObject::titleUIElement() const
STDERR: 7   0x4ed593
STDERR: 8   0x4ef528
STDERR: 9   0x4effc4
STDERR: 10  0x4ef6a3
STDERR: 11  0x7f412a052d73
STDERR: 12  0x7f412a052f1a
STDERR: 13  0x7f4126f0680e
STDERR: 14  0x7f4126f01429
STDERR: 15  0x7f4126f013fa
STDERR: 16  0x1eec34c0618e
STDERR: [13686:13686:17469496058466:ERROR:process_util_posix.cc(144)] Received signal 11
STDERR: 	base::debug::StackTrace::StackTrace() [0x7f4126a81ff2]
STDERR: 	base::(anonymous namespace)::StackDumpSignalHandler() [0x7f4126aec4d1]
STDERR: 	0x7f411fd09af0
STDERR: 	WebCore::DocumentOrderedMap::get&lt;&gt;() [0x7f41298b1aab]
STDERR: 	WebCore::DocumentOrderedMap::getElementByLabelForAttribute() [0x7f41298b0c7f]
STDERR: 	WebCore::TreeScope::labelElementForId() [0x7f412996bac6]
STDERR: 	WebCore::AccessibilityNodeObject::labelForElement() [0x7f4129fd9de8]
STDERR: 	WebCore::AccessibilityRenderObject::titleUIElement() [0x7f4129fe8a54]
STDERR: 	WebKit::WebAccessibilityObject::titleUIElement() [0x7f4128f5efba]
STDERR: 	AccessibilityUIElement::titleUIElementCallback() [0x4ed593]
STDERR: 	CppBoundClass::MemberCallback&lt;&gt;::run() [0x4ef528]
STDERR: 	CppBoundClass::invoke() [0x4effc4]
STDERR: 	CppNPObject::invoke() [0x4ef6a3]
STDERR: 	WebCore::npObjectInvokeImpl() [0x7f412a052d73]
STDERR: 	WebCore::npObjectMethodHandler() [0x7f412a052f1a]
STDERR: 	v8::internal::HandleApiCallHelper&lt;&gt;() [0x7f4126f0680e]
STDERR: 	v8::internal::Builtin_Impl_HandleApiCall() [0x7f4126f01429]
STDERR: 	v8::internal::Builtin_HandleApiCall() [0x7f4126f013fa]
STDERR: 	0x1eec34c0618e</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740521</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 19:04:15 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 99126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743660</commentid>
    <comment_count>42</comment_count>
      <attachid>169046</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-16 16:06:06 -0700</bug_when>
    <thetext>Created attachment 169046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743664</commentid>
    <comment_count>43</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-16 16:08:52 -0700</bug_when>
    <thetext>Ryosuke, could you take another look?

You suggested that I update the label map whether or not an element is in the document or not, but that breaks a DocumentOrderedMap assertion, and I don&apos;t think DocumentOrderedMap is intended to be used that way. It should only keep track of elements actually in the document.

I put the code basically back the way I had it, and I think it&apos;s correct. The label gets added to the map when the element is inserted into the tree, it gets updated when an attribute changes (but only if it&apos;s in the document at that time), and it gets removed from the map when the element is removed from the tree.

The test covers these cases, it fails if I take any of these out.

What do you think?

- Dominic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743687</commentid>
    <comment_count>44</comment_count>
      <attachid>169046</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-16 16:33:25 -0700</bug_when>
    <thetext>Comment on attachment 169046
Patch

Attachment 169046 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14392328</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743759</commentid>
    <comment_count>45</comment_count>
      <attachid>169046</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-16 18:13:43 -0700</bug_when>
    <thetext>Comment on attachment 169046
Patch

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

&gt; Tools/ChangeLog:883
&gt; +=======
&gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; 97825 merged

Something is wrong with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743805</commentid>
    <comment_count>46</comment_count>
      <attachid>169074</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-16 19:42:54 -0700</bug_when>
    <thetext>Created attachment 169074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743808</commentid>
    <comment_count>47</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-16 19:45:19 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; &gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; 97825 merged
&gt; Something is wrong with this patch.

Argh, sorry about that. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745894</commentid>
    <comment_count>48</comment_count>
      <attachid>169074</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 19:14:00 -0700</bug_when>
    <thetext>Comment on attachment 169074
Patch

Rejecting attachment 169074 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ibility/title-ui-element-correctness.html
patching file LayoutTests/perf/accessibility-title-ui-element-expected.txt
patching file LayoutTests/perf/accessibility-title-ui-element.html
patching file LayoutTests/platform/chromium/TestExpectations
Hunk #1 succeeded at 1402 (offset -5 lines).
Hunk #2 succeeded at 1415 (offset -5 lines).

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Ryosuke Ni...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/14412827</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746064</commentid>
    <comment_count>49</comment_count>
      <attachid>169562</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-18 23:53:24 -0700</bug_when>
    <thetext>Created attachment 169562
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746067</commentid>
    <comment_count>50</comment_count>
      <attachid>169562</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 23:55:01 -0700</bug_when>
    <thetext>Comment on attachment 169562
Patch for landing

Rejecting attachment 169562 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
mpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp.rej
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/accessibility/secure-textfield-title-ui.html
patching file LayoutTests/platform/chromium/TestExpectations
Hunk #1 succeeded at 1402 (offset -5 lines).
Hunk #2 succeeded at 1415 (offset -5 lines).

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/14456378</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746092</commentid>
    <comment_count>51</comment_count>
      <attachid>169566</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-19 00:29:38 -0700</bug_when>
    <thetext>Created attachment 169566
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746097</commentid>
    <comment_count>52</comment_count>
      <attachid>169566</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-19 00:33:35 -0700</bug_when>
    <thetext>Comment on attachment 169566
Patch for landing

Rejecting attachment 169566 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebKit/chromium/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/14424863</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746108</commentid>
    <comment_count>53</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-19 01:01:18 -0700</bug_when>
    <thetext>Committed r131871: &lt;http://trac.webkit.org/changeset/131871&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751025</commentid>
    <comment_count>54</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2012-10-25 11:02:32 -0700</bug_when>
    <thetext>Still crashes on Windows.
See http://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r132381%20(29225)/results.html.

Is this another one of those should be skipped on Windows accessibility tests? I&apos;m wondering if we should have some sort of accessibility feature so we can disable these things on Windows since I don&apos;t think anyone is working on accessibility support for that port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751033</commentid>
    <comment_count>55</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-25 11:08:55 -0700</bug_when>
    <thetext>Since there&apos;s no owner, I think it might make sense to skip all of the accessibility tests on Windows.

If a non-accessibility test crashes as a result of accessibility code (definitely possible), that should obviously be fixed. But actually running the accessibility tests doesn&apos;t make much sense anymore.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166175</attachid>
            <date>2012-09-28 01:56:22 -0700</date>
            <delta_ts>2012-09-28 10:37:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20120928015540.patch</filename>
            <type>text/plain</type>
            <size>29429</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBiODBkNDBiMDJjNjFj
ZGFlYTFhZDNjYjdiN2JiNzhmYTVmMzJkMy4uNDYwMWU5ZmJmNjI0YWFmYTRiZDdhZDhhODIxMTM1
YjQ0NzFlZjk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA5LTI4ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG5ldyBh
Y2Nlc3NpYmlsaXR5IGNhY2hlIHRoYXQgbWFwcyBpZHMgdG8gbGFiZWwgZWxlbWVudHMKKyAgICAg
ICAgdGhhdCBsYWJlbCB0aGF0IGlkLiBUaGUgY2FjaGUgaXMgYnVpbHQgdGhlIGZpcnN0IHRpbWUg
aXQncworICAgICAgICBxdWVyaWVkIChwZXIgZG9jdW1lbnQpLCBhbmQgdGhlbiB1cGRhdGVkIGV2
ZXJ5IHRpbWUgYSBsYWJlbAorICAgICAgICBlbGVtZW50IG9uIHRoZSBwYWdlIGlzIGNyZWF0ZWQs
IGRlbGV0ZWQsIG9yIG1vZGlmaWVkLgorICAgICAgICBUaGlzIGFsbG93cyBmb3IgdmVyeSBmYXN0
IGxvb2t1cCBvZiB0aGUgbGFiZWwgZm9yIGFueSBlbGVtZW50LgorCisgICAgICAgIFRlc3RzOiBh
Y2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAg
ICAgICAgYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGFi
ZWxFbGVtZW50Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjp1cGRhdGVMYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpkb2N1bWVudERlc3Ryb3llZCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEFYT2Jq
ZWN0Q2FjaGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVs
Rm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAg
ICAgIChFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTExhYmVsRWxlbWVudC5oOgorICAg
ICAgICAoSFRNTExhYmVsRWxlbWVudCk6CisKIDIwMTItMDktMjEgIEtlbm5ldGggUnVzc2VsbCAg
PGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFtWOF0gQXJyYXlCdWZmZXIgY29kZSBzaG91bGQg
bm90IHBhc3MgYSBuZWdhdGl2ZSBsZW5ndGggdG8gU2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVy
bmFsQXJyYXlEYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCmluZGV4IDZjMDhiZTIxZjBlMzE2NzEyN2FiM2YyYjRiOTU3ZjliNGViY2Y4MjMu
LjZiYWI5ZTNiYjc4Y2VjYzNkZTI1YTY1M2ZiODc5ZjFiODdkODg4M2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtNjAsMTAgKzYwLDEy
IEBACiAjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFi
ZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaWYgRU5BQkxFKFZJREVPKQog
I2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJOb2Rl
TGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKQEAgLTc2LDYgKzc4LDcgQEAKICNpbmNsdWRlICJT
Y3JvbGxWaWV3LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzAsNyAr
MTczLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KFdpZGdldCog
d2lkZ2V0KQogICAgIGlmICghYXhJRCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0
dXJuIG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7ICAgIAorICAgIHJldHVybiBtX29iamVjdHMu
Z2V0KGF4SUQpLmdldCgpOwogfQogICAgIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RD
YWNoZTo6Z2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC0xODMsNyArMTg2LDcgQEAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiAgICAgaWYgKCFheElEKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtX29i
amVjdHMuZ2V0KGF4SUQpLmdldCgpOyAgICAKKyAgICByZXR1cm4gbV9vYmplY3RzLmdldChheElE
KS5nZXQoKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KE5v
ZGUqIG5vZGUpCkBAIC02NzYsNiArNjc5LDQzIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVM
b2FkaW5nRXZlbnROb3RpZmljYXRpb24oRnJhbWUqIGZyYW1lLCBBWExvYWRpbmdFdmVudCBsCiAg
ICAgZnJhbWVMb2FkaW5nRXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmosIGxvYWRpbmdFdmVu
dCk7CiB9CiAKK0hUTUxMYWJlbEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OmxhYmVsRWxlbWVudEZv
cklkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKK3sKKyAgICBp
ZiAoIW1faWRUb0xhYmVsTWFwcGluZy5jb250YWlucyhkb2N1bWVudCkpIHsKKyAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIEhUTUxMYWJlbEVsZW1lbnQqPiogZG9jdW1lbnRNYXBwaW5nID0gbmV3IEhh
c2hNYXA8U3RyaW5nLCBIVE1MTGFiZWxFbGVtZW50Kj4oKTsKKyAgICAgICAgUmVmUHRyPE5vZGVM
aXN0PiBsaXN0ID0gZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpOworICAg
ICAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+
aGFzVGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50
KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKTsK
KyAgICAgICAgICAgICAgICBpZiAobGFiZWwtPmhhc0F0dHJpYnV0ZShmb3JBdHRyKSkgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbnRyb2xJZCA9IGxhYmVsLT5n
ZXRBdHRyaWJ1dGUoZm9yQXR0cik7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50TWFwcGlu
Zy0+c2V0KGNvbnRyb2xJZC5zdHJpbmcoKSwgbGFiZWwpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX2lkVG9MYWJlbE1hcHBpbmcuYWRkKGRv
Y3VtZW50LCBkb2N1bWVudE1hcHBpbmcpOworICAgIH0KKworICAgIHJldHVybiBtX2lkVG9MYWJl
bE1hcHBpbmcuZ2V0KGRvY3VtZW50KS0+Z2V0KGlkKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hl
Ojp1cGRhdGVMYWJlbEVsZW1lbnRGb3JJZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQsIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsRWxlbWVudCkKK3sKKyAgICBpZiAo
IW1faWRUb0xhYmVsTWFwcGluZy5jb250YWlucyhkb2N1bWVudCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faWRUb0xhYmVsTWFwcGluZy5nZXQoZG9jdW1lbnQpLT5zZXQoaWQsIGxhYmVsRWxl
bWVudCk7Cit9CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6ZG9jdW1lbnREZXN0cm95ZWQoRG9jdW1l
bnQqIGRvY3VtZW50KQoreworICAgIGlmIChtX2lkVG9MYWJlbE1hcHBpbmcuY29udGFpbnMoZG9j
dW1lbnQpKSB7CisgICAgICAgIGRlbGV0ZSBtX2lkVG9MYWJlbE1hcHBpbmcuZ2V0KGRvY3VtZW50
KTsKKyAgICAgICAgbV9pZFRvTGFiZWxNYXBwaW5nLnJlbW92ZShkb2N1bWVudCk7CisgICAgfQor
fQorCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3
KiB2aWV3KQogewogICAgIGlmICghdmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmgKaW5kZXggOGYwZjc2NTY3OTlkMzEwNzllYTYxODIzZmY1NmY1MTEw
ZTJjMjdlNy4uZWI5MDQwNjlhNGZmNWMzNzMyNWEwZjY0ZDVkODRjM2Y5M2MwZDhlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTM4LDYgKzM4
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxB
cmVhRWxlbWVudDsKK2NsYXNzIEhUTUxMYWJlbEVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3Mg
UGFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTE3Niw2ICsxNzcsMTMgQEAgcHVibGljOgog
CiAgICAgYm9vbCBub2RlSGFzUm9sZShOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiByb2xlKTsK
IAorICAgIC8vIFRoZSBmaXJzdCB0aW1lIGxhYmVsRWxlbWVudEZvcklkIGlzIGNhbGxlZCwgYSBj
YWNoZSBmcm9tIGlkIHRvCisgICAgLy8gbGFiZWwgZWxlbWVudCBpcyBidWlsdC4gVGhpcyBjYWNo
ZSBpcyB1cGRhdGVkIGV2ZXJ5IHRpbWUgYSBMYWJlbAorICAgIC8vIGVsZW1lbnQgaXMgY3JlYXRl
ZCwgZGVsZXRlZCwgb3IgbW9kaWZpZWQuCisgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWxFbGVt
ZW50Rm9ySWQoRG9jdW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHVwZGF0
ZUxhYmVsRWxlbWVudEZvcklkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSFRN
TExhYmVsRWxlbWVudCopOworICAgIHZvaWQgZG9jdW1lbnREZXN0cm95ZWQoRG9jdW1lbnQqKTsK
KwogcHJvdGVjdGVkOgogICAgIHZvaWQgcG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2li
aWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlvbik7CiAgICAgdm9pZCBub2RlVGV4dENoYW5nZVBs
YXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRDaGFuZ2UsIHVu
c2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJik7CkBAIC0xOTgsNiArMjA2LDEyIEBAIHByaXZh
dGU6CiAgICAgCiAgICAgSGFzaFNldDxBWElEPiBtX2lkc0luVXNlOwogICAgIAorICAgIC8vIFRo
aXMgbWFwcGluZyBlbmFibGVzIGZhc3QgbG9va3VwcyBvZiA8bGFiZWwgZm9yPSJpZCI+IGdpdmVu
IHRoZSBpZCBvZiB0aGUKKyAgICAvLyBub2RlIGl0IHJlZmVyZW5jZXMgaW4gaXRzICJmb3IiIGF0
dHJpYnV0ZS4gVGhlIG1hcHBpbmcgaXMgaW5pdGlhbGl6ZWQKKyAgICAvLyBmb3IgZWFjaCBkb2N1
bWVudCB3aGVuIGxhYmVsRWxlbWVudEZvcklkIGlzIGNhbGxlZCwgdGhlbiB1cGRhdGVkCisgICAg
Ly8gZXZlcnkgdGltZSBhIGxhYmVsIGVsZW1lbnQgaXMgYWRkZWQgb3IgY2hhbmdlZCBmcm9tIHRo
ZW4gb24uCisgICAgSGFzaE1hcDxEb2N1bWVudCosIEhhc2hNYXA8U3RyaW5nLCBIVE1MTGFiZWxF
bGVtZW50Kj4qID4gbV9pZFRvTGFiZWxNYXBwaW5nOworCiAgICAgVGltZXI8QVhPYmplY3RDYWNo
ZT4gbV9ub3RpZmljYXRpb25Qb3N0VGltZXI7CiAgICAgVmVjdG9yPHBhaXI8UmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+LCBBWE5vdGlmaWNhdGlvbj4gPiBtX25vdGlmaWNhdGlvbnNUb1Bvc3Q7
CiAgICAgdm9pZCBub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZChUaW1lcjxBWE9iamVjdENhY2hl
PiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCAwZjk0ODM4ZTdlYzU1YTk2OWVkYjFlODA1MDAwMzk3
NWQ3ZWVjYzEzLi5hZmUxZjc1YzRhODNiN2NmYTQ1YjYwZDgzOGIyMDljOWU3ZmZiNjExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcApAQCAtMTAwMSwxNCArMTAwMSwxNCBAQCBib29sIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Ojppc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkgY29uc3QKIAogSFRNTExhYmVs
RWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAogewotICAgIFJlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IGVsZW1lbnQt
PmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpOwotICAgIHVuc2lnbmVk
IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47
IGkrKykgewotICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+aGFzVGFnTmFtZShsYWJlbFRhZykp
IHsKLSAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gc3RhdGljX2Nhc3Q8SFRN
TExhYmVsRWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpOwotICAgICAgICAgICAgaWYgKGxhYmVsLT5j
b250cm9sKCkgPT0gZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWw7Ci0gICAg
ICAgIH0KKyAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlKGlkQXR0cikpIHsKKyAgICAgICAg
aWYgKEhUTUxMYWJlbEVsZW1lbnQqIHJlc3VsdCA9IGF4T2JqZWN0Q2FjaGUoKS0+bGFiZWxFbGVt
ZW50Rm9ySWQoZWxlbWVudC0+ZG9jdW1lbnQoKSwgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGlkQXR0
cikpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBmb3IgKEVsZW1l
bnQqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsgcGFyZW50OyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1l
KGxhYmVsVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVt
ZW50Kj4ocGFyZW50KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IGI5ZmVlZGQ5YTI5YTM1ZGU3MzY4MjMyZDk0Mjc0YTlmZGMyZDY5OWYuLjBjMjg3
ZDMyNzU0MDdiYmMxOTQzZDgwMzA4OTNiNjJlNTY4YzU1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtNjI2LDYgKzYyNiw5IEBAIERvY3VtZW50Ojp+RG9jdW1lbnQoKQogCiAgICAgbV9y
ZW5kZXJBcmVuYS5jbGVhcigpOwogCisgICAgaWYgKHRvcERvY3VtZW50KCkgIT0gdGhpcyAmJiB0
b3BEb2N1bWVudCgpLT5tX2F4T2JqZWN0Q2FjaGUpCisgICAgICAgIHRvcERvY3VtZW50KCktPm1f
YXhPYmplY3RDYWNoZS0+ZG9jdW1lbnREZXN0cm95ZWQodGhpcyk7CisKICAgICBjbGVhckFYT2Jq
ZWN0Q2FjaGUoKTsKIAogICAgIG1fZGVjb2RlciA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCAw
Y2QyMDlkZjgyZDA3NDYzMjZiYTk2NDdkZTJjNDI0ODA2YjZmMGU1Li5lMTkzZDI4ZTJjOGJjOWY2
NWM4ZDM0YTA0Njc5YmM3MDVhYTgzYTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTMxNSw3ICsz
MTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVJZChUcmVlU2NvcGUqLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKTsKICAgICB2b2lkIHVw
ZGF0ZU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld05hbWUpOwogCi0gICAgdm9pZCB3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld1ZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuZXdWYWx1ZSk7CiAgICAgdm9pZCB3aWxsUmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIGRpZEFk
ZEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmKTsKICAgICB2b2lkIGRpZE1vZGlmeUF0dHJpYnV0
ZShjb25zdCBBdHRyaWJ1dGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExhYmVsRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQu
Y3BwCmluZGV4IDI0MmZiMGNiZDM2ZTY3Y2I2YmZhODU0N2M5N2Y1OWU3NzQ4ZTMxZGYuLmQ5MTdk
OTRhMDU4NmM3YTBlMjFiYTFjZDQxMzljZmNlMjBhMjE2OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTGFiZWxFbGVtZW50LmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtMTU1LDYgKzE1NiwyNCBAQCBib29sIEhUTUxMYWJlbEVs
ZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKICAgICByZXR1cm4gSFRNTEVs
ZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCk7CiB9CiAKK3ZvaWQgSFRNTExh
YmVsRWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1Zh
bHVlKQoreworICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYm
IG5hbWUgPT0gZm9yQXR0cikgeworICAgICAgICBpZiAoIW9sZFZhbHVlLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+dXBkYXRlTGFiZWxFbGVtZW50
Rm9ySWQoZG9jdW1lbnQoKSwgb2xkVmFsdWUsIDApOworICAgICAgICBpZiAoIW5ld1ZhbHVlLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+dXBkYXRl
TGFiZWxFbGVtZW50Rm9ySWQoZG9jdW1lbnQoKSwgbmV3VmFsdWUsIHRoaXMpOworICAgIH0KKyAg
ICBIVE1MRWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShuYW1lLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworfQorCit2b2lkIEhUTUxMYWJlbEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
QXR0cmlidXRlJiBhdHRyaWJ1dGUpCit7CisgICAgSFRNTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQoYXR0cmlidXRlKTsKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKSAmJiBhdHRyaWJ1dGUubmFtZSgpID09IGZvckF0dHIgJiYgIWF0dHJpYnV0ZS52YWx1ZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT51cGRhdGVM
YWJlbEVsZW1lbnRGb3JJZChkb2N1bWVudCgpLCBhdHRyaWJ1dGUudmFsdWUoKSwgdGhpcyk7Cit9
CisKIHZvaWQgSFRNTExhYmVsRWxlbWVudDo6Zm9jdXMoYm9vbCkKIHsKICAgICAvLyB0byBtYXRj
aCBvdGhlciBicm93c2VycywgYWx3YXlzIHJlc3RvcmUgcHJldmlvdXMgc2VsZWN0aW9uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5oCmluZGV4IGY0OGM2ODA1ZTQ5MWFkNmU4MDQ5
OTRmNmI2Y2U3OTZiOGE5NmZlZmEuLmMwYmJjYWZlYmI4ZWNmYzNkYWFhMzc0ZTQ1MTNjNmQxZjQ5
NmZmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5oCkBAIC0zOCw2ICsz
OCw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlj
a0V2ZW50cygpIE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIHdpbGxNb2RpZnlBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBh
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IEF0dHJpYnV0ZSYpIE9WRVJSSURFOworCiBwcml2YXRlOgog
ICAgIEhUTUxMYWJlbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3MzI4
NjhlMmIzMDkwN2I3ZDFiYThjNzA1OWM0OTk5Y2QyY2U5OWM2Li41ZjVkM2NmYTA4MjM2MTU0MzMz
ZWYwOTk2YmM0MjEyZDNmMmJkYzVkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDktMjggIERvbWluaWMgTWF6
em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IGxhYmVsRm9yRWxlbWVu
dCBpcyBzbG93IHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIERPTSBlbGVtZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc4MjUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgdGl0bGVVSUVs
ZW1lbnQgaW4gdGhlIGNocm9taXVtIHBvcnQgb2YgRFJULCBhbmQKKyAgICAgICAgZml4IGdldEFj
Y2Vzc2libGVFbGVtZW50QnlJZCBzbyB0aGF0IGl0IGVuc3VyZXMgdGhlIGJhY2tpbmcgc3RvcmUK
KyAgICAgICAgaXMgdXAtdG8tZGF0ZS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRDaHJvbWl1bS5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKToKKwogMjAxMi0wOS0yNCAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjEyOTM0My4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
Q2hyb21pdW0uY3BwCmluZGV4IDg5ZDVkNTg3NzBjNjFkMWFhZTkxNjBiYTM0ZTQzNjc2NTE2YjA3
YzIuLjBmZTRjMWY5OWU0NTk2ZDJkOGQ3NDc4YjIxMWYzOWU2NWJmZjM3NjggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcApAQCAtMTE3LDYg
KzExNyw5IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQoY29uc3QKICAgICBpZiAobV9yb290RWxlbWVudC5p
c051bGwoKSkKICAgICAgICAgbV9yb290RWxlbWVudCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0
eU9iamVjdCgpOwogCisgICAgaWYgKCFtX3Jvb3RFbGVtZW50LnVwZGF0ZUJhY2tpbmdTdG9yZUFu
ZENoZWNrVmFsaWRpdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZmluZEFj
Y2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShtX3Jvb3RFbGVtZW50LCBXZWJTdHJpbmc6OmZy
b21VVEY4KGlkLmNfc3RyKCkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Q2hyb21pdW0uY3BwCmluZGV4IGMwMjc4Y2Q1NzYwMWNjMWFmNzFiZmJjZGVkZWRk
MGYyZGM0NGVmZTIuLjQzMmI3NmYxM2M4OGNlZDA3NzU1Y2E4MDFhZDk1MmY3YTBlM2IzZGUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKQEAg
LTcxNiw3ICs3MTYsMTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29s
dW1uQW5kUm93Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwKIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKKyAg
ICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG9iaiA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS50aXRs
ZVVJRWxlbWVudCgpOworICAgIGlmIChvYmouaXNOdWxsKCkpIHsKKyAgICAgICAgcmVzdWx0LT5z
ZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXN1bHQtPnNldCgqKG1f
ZmFjdG9yeS0+Z2V0T3JDcmVhdGUob2JqKS0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKKwogfQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDMxMTYw
ZTRlZWQ5NjFjODYzOTU3MjgzZmNhNDkwZWJmOTRmN2I0MTQuLjY4MGNlNmQ2NTU5YmYwY2I0ZTUw
OTFkNmNjZTI0OTA5ODYyMzQxYjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wOS0yOCAg
RG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbGFi
ZWxGb3JFbGVtZW50IGlzIHNsb3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1lbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgyNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdHdv
IG5ldyB0ZXN0cyBmb3IgdGl0bGVVSUVsZW1lbnQgdGhhdCBydW4gb24gYm90aCBNYWMgYW5kCisg
ICAgICAgIENocm9taXVtLiBPbmUgdGVzdHMgY29ycmVjdG5lc3MsIHRoZSBvdGhlciB0ZXN0cyBz
cGVlZC4KKworICAgICAgICBUaGUgdGVzdCBmb3IgdGl0bGVVSUVsZW1lbnQgc3BlZWQgaXMgY2Fy
ZWZ1bGx5IGRlc2lnbmVkIHNvIHRoYXQKKyAgICAgICAgaXQgZmFpbHMgd2l0aG91dCB0aGlzIHBh
dGNoIGFuZCBwYXNzZXMgd2l0aCBpdCwgd2hpbGUgc3RpbGwKKyAgICAgICAgYmVpbmcgcm9idXN0
IHRvIGRpZmZlcmVuY2VzIGluIGNwdSBzcGVlZCwgcGxhdGZvcm0sIGV0Yy4gLSBlc3NlbnRpYWxs
eQorICAgICAgICBpdCBjb21wYXJlcyB0aGUgc3BlZWQgb2YgZG9pbmcgYSBsYXJnZSBudW1iZXIg
b2YgY2FsbHMgdG8gdGl0bGVVSUVsZW1lbnQKKyAgICAgICAgdG8gdGhlIHRpbWUgaXQgdGFrZXMg
dG8gYnVpbGQgdGhlIERPTSBvZiBhIHBhZ2UsIGZvciBhIHJlbGF0aXZlbHkKKyAgICAgICAgbGFy
Z2UgcGFnZSB3aXRoIGxvdHMgb2YgRE9NIGVsZW1lbnRzLiBJdCBlbnN1cmVzIHRoYXQgdGl0bGVV
SUVsZW1lbnQKKyAgICAgICAgZG9lc24ndCBuZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBET00gdG8g
bG9vayBmb3IgbGFiZWwgZWxlbWVudHMuCisKKyAgICAgICAgRml4ZXMgb25lIHRlc3Qgc28gdGhh
dCBpdCBwYXNzZXMgb24gQ2hyb21pdW0uCisgICAgICAgIEVuYWJsZXMgb3RoZXIgdGVzdHMgdGhh
dCBub3cgcGFzcyBvbiBDaHJvbWl1bS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2VjdXJl
LXRleHRmaWVsZC10aXRsZS11aS5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUt
dWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQu
aHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
czoKKwogMjAxMi0wOS0yNCAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuIE1hcmsgaHR0cC90ZXN0cy9zZWN1cml0eS9pbmFjdGl2ZS1kb2N1
bWVudC13aXRoLWVtcHR5LXNlY3VyaXR5LW9yaWdpbi5odG1sIHdoaWxlIEdlb2ZmIEdhcmVuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0
bGUtdWkuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10
aXRsZS11aS5odG1sCmluZGV4IDE3MGU1NzAxYTA0NTg1ZGMwMWU4NmFjNjc5YjFlMzQzMDgxNjNm
MTkuLjEyZjgxZTMzOGRjYThiNWYxNGYwMWI4ODI2OGNkZjZiMjlmZjIxNWIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1s
CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11
aS5odG1sCkBAIC0yMSw4ICsyMSw3IEBACiAgICAgICAgICAgICBwYXNzLmZvY3VzKCk7CiAgICAg
ICAgICAgICB2YXIgdGl0bGVVSUVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1
c2VkRWxlbWVudC50aXRsZVVJRWxlbWVudCgpOwogICAgICAgICAgICAgdmFyIHRpdGxlVGV4dCA9
IHRpdGxlVUlFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJu
ID0gIkFYVmFsdWU6IFBhc3N3b3JkIjsKLSAgICAgICAgICAgIGlmICh0aXRsZVRleHQuYWxsQXR0
cmlidXRlcygpLmluZGV4T2YocGF0dGVybikgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmICh0aXRs
ZVRleHQuc3RyaW5nVmFsdWUgPT0gIkFYVmFsdWU6IFBhc3N3b3JkIikgewogICAgICAgICAgICAg
ICAgIHJlc3VsdC5pbm5lclRleHQgKz0gIlRlc3QgcGFzc2VkXG4iOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NGFiNmI1ODI3ZWVhOTZjNTAyY2EzZDAyODFiMzQ3ZDU2OTAwNzAzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50
LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI1IEBACitMYWJlbCAxICAKK0xh
YmVsIDIgIAorTGFiZWwgMyAgCisKK0xhYmVsIDUgIAorVGhpcyB0ZXN0cyB0aGF0IHRpdGxlVUlF
bGVtZW50IHdvcmtzIGNvcnJlY3RseSBldmVuIHdoZW4gdGhpbmdzIGNoYW5nZSBkeW5hbWljYWxs
eS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgY29udHJvbDEudGl0bGVV
SUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsMSkgaXMgdHJ1ZQorUEFTUyBjb250cm9sMi50aXRsZVVJ
RWxlbWVudCgpLmlzRXF1YWwobGFiZWwyKSBpcyB0cnVlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50
KGNvbnRyb2wzKSBpcyBmYWxzZQorUEFTUyBjb250cm9sMy50aXRsZVVJRWxlbWVudCgpLmlzRXF1
YWwobGFiZWwzKSBpcyB0cnVlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w0KSBpcyBm
YWxzZQorUEFTUyBoYXNUaXRsZVVJRWxlbWVudChjb250cm9sNCkgaXMgdHJ1ZQorUEFTUyBjb250
cm9sNC50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWw0KSBpcyB0cnVlCitQQVNTIGhhc1Rp
dGxlVUlFbGVtZW50KGNvbnRyb2w0KSBpcyBmYWxzZQorUEFTUyBoYXNUaXRsZVVJRWxlbWVudChj
b250cm9sNSkgaXMgZmFsc2UKK1BBU1MgY29udHJvbDUudGl0bGVVSUVsZW1lbnQoKSAhPSBudWxs
IGlzIHRydWUKK1BBU1MgY29udHJvbDUudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsNSkg
aXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVu
dC1jb3JyZWN0bmVzcy5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJjNDRkMjFjNjBmNjY5MjM4NzEz
OTNlMGQ1MGQ0YWNjZDZjMWJjZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCkBAIC0wLDAgKzEsMTAy
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJjb250
YWluZXIiPgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsMSIgZm9yPSJjMSI+TGFiZWwgMTwv
bGFiZWw+CisgICAgPGlucHV0IGlkPSJjMSIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorCisgIDxk
aXY+CisgICAgPGxhYmVsIGlkPSJsMiI+CisgICAgICBMYWJlbCAyCisgICAgICA8aW5wdXQgaWQ9
ImMyIiB0eXBlPSJ0ZXh0Ij4KKyAgICA8L2xhYmVsPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAg
IDxsYWJlbCBpZD0ibDMiPkxhYmVsIDM8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iYzMiIHR5cGU9
InRleHQiPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxpbnB1dCBpZD0iYzQiIHR5cGU9InRl
eHQiPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibDUiPgorICAgICAgTGFi
ZWwgNQorICAgIDwvbGFiZWw+CisgICAgPGlucHV0IGlkPSJjNSIgdHlwZT0idGV4dCI+CisgIDwv
ZGl2PgorPC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2Ny
aXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3MgY29ycmVjdGx5IGV2
ZW4gd2hlbiB0aGluZ3MgY2hhbmdlIGR5bmFtaWNhbGx5LiIpOworCitpZiAod2luZG93LnRlc3RS
dW5uZXIgJiYgd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CisKKyAgICBmdW5jdGlvbiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1l
bnQpIHsKKyAgICAgICAgdmFyIGxhYmVsMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgibDEiKTsKKyAgICAgICAgdmFyIHRpdGxlVUlFbGVtZW50ID0gYXhF
bGVtZW50LnRpdGxlVUlFbGVtZW50KCk7CisgICAgICAgIGlmICh0aXRsZVVJRWxlbWVudCA9PSBu
dWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdGl0bGVVSUVs
ZW1lbnQucm9sZSA9PSBsYWJlbDEucm9sZTsKKyAgICB9CisKKyAgICB2YXIgbGFiZWwxID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsMSIpOworICAgIHZh
ciBjb250cm9sMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJ
ZCgiYzEiKTsKKyAgICBzaG91bGRCZSgiY29udHJvbDEudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFs
KGxhYmVsMSkiLCAidHJ1ZSIpOworCisgICAgdmFyIGxhYmVsMiA9IGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgibDIiKTsKKyAgICB2YXIgY29udHJvbDIgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImMyIik7CisgICAg
c2hvdWxkQmUoImNvbnRyb2wyLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDIpIiwgInRy
dWUiKTsKKworICAgIC8vIFRlc3QgY2hhbmdpbmcgdGhlICJmb3IiIGF0dHJpYnV0ZSBkeW5hbWlj
YWxseS4KKyAgICB2YXIgbGFiZWwzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKCJsMyIpOworICAgIHZhciBjb250cm9sMyA9IGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiYzMiKTsKKyAgICBzaG91bGRCZSgiaGFzVGl0
bGVVSUVsZW1lbnQoY29udHJvbDMpIiwgImZhbHNlIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImwzIikuc2V0QXR0cmlidXRlKCJmb3IiLCAiYzMiKTsKKyAgICBzaG91bGRCZSgiY29u
dHJvbDMudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsMykiLCAidHJ1ZSIpOworCisgICAg
Ly8gVGVzdCB1bmF0dGFjaGVkIGxhYmVsIGVsZW1lbnQgdGhhdCdzIHN1YnNlcXVlbnRseSBhdHRh
Y2hlZC4KKyAgICB2YXIgY29udHJvbDQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoImM0Iik7CisgICAgdmFyIGxhYmVsNEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJsYWJlbCIpOworICAgIGxhYmVsNEVsZW1lbnQuaWQgPSAibDQiOworICAg
IGxhYmVsNEVsZW1lbnQuc2V0QXR0cmlidXRlKCJmb3IiLCAiYzQiKTsKKyAgICBsYWJlbDRFbGVt
ZW50LmlubmVyVGV4dCA9ICJMYWJlbCA0IjsKKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1l
bnQoY29udHJvbDQpIiwgImZhbHNlIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNv
bnRhaW5lciIpLmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQpOworICAgIHZhciBsYWJlbDQgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImw0Iik7CisgICAg
c2hvdWxkQmUoImhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w0KSIsICJ0cnVlIik7CisgICAgc2hv
dWxkQmUoImNvbnRyb2w0LnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDQpIiwgInRydWUi
KTsKKworICAgIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGxhYmVsIGlzIGRldGFjaGVk
LgorICAgIGxhYmVsNEVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsYWJlbDRFbGVt
ZW50KTsKKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDQpIiwgImZhbHNl
Iik7CisKKyAgICAvLyBUZXN0IGxhYmVsIHRoYXQgZ2V0cyBhIGNvbnRyb2wgcmVwYXJlbnRlZCBp
bnRvIGl0LgorICAgIHZhciBjb250cm9sNSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgiYzUiKTsKKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQo
Y29udHJvbDUpIiwgImZhbHNlIik7CisKKyAgICB2YXIgY29udHJvbDVFbGVtZW50ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImM1Iik7CisgICAgdmFyIGxhYmVsNUVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibDUiKTsKKyAgICBjb250cm9sNUVsZW1lbnQucGFyZW50RWxlbWVu
dC5yZW1vdmVDaGlsZChjb250cm9sNUVsZW1lbnQpOworICAgIGxhYmVsNUVsZW1lbnQuYXBwZW5k
Q2hpbGQoY29udHJvbDVFbGVtZW50KTsKKworICAgIGNvbnRyb2w1ID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjNSIpOworICAgIHNob3VsZEJlKCJjb250
cm9sNS50aXRsZVVJRWxlbWVudCgpICE9IG51bGwiLCAidHJ1ZSIpOworICAgIHZhciBsYWJlbDUg
PSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImw1Iik7Cisg
ICAgc2hvdWxkQmUoImNvbnRyb2w1LnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDUpIiwg
InRydWUiKTsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1z
cGVlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUyMDlhZjk0MWQwNWZiZTJhNzI3YTM1MDY5
OGNhNTc3OGIwODlhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAor
CitUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgZG9lc24ndCB0YWtlIGEgcmlkaWN1bG91
c2x5IGxvbmcgdGltZSB0byBydW4gd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgbGFiZWwgZWxlbWVu
dHMgb24gYSBwYWdlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBheENv
bnRyb2xDb250YWluZXIuY2hpbGRyZW5Db3VudCBpcyA1MDAKK1BBU1MgUXVlcmllZCB0aXRsZVVJ
RWxlbWVudCBpbiBsZXNzIHRpbWUgdGhhbiBpdCB0b29rIHRvIGJ1aWxkIHRoZSBET00uCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zNGRlZWFhMjYxZjE4ODk0NGE4NDk0ZTcwMDcxMTNiMjI4NzU1NzZkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50
LXNwZWVkLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+CisKKzxkaXYgaWQ9ImxhYmVsQ29udGFpbmVyIj4KKzwvZGl2PgorPGRpdiBpZD0i
Y29udHJvbENvbnRhaW5lciIgYXJpYS1sYWJlbD0iY29udHJvbCBjb250YWluZXIiPgorPC9kaXY+
Cis8ZGl2IGlkPSJqdW5rQ29udGFpbmVyIiBoaWRkZW4+Cis8L2Rpdj4KKworPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB0aXRs
ZVVJRWxlbWVudCBkb2Vzbid0IHRha2UgYSByaWRpY3Vsb3VzbHkgbG9uZyB0aW1lIHRvIHJ1biB3
aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBsYWJlbCBlbGVtZW50cyBvbiBhIHBhZ2UuIik7CisKK2lm
ICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsK
KyAgICB3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKKyAgICBmdW5jdGlvbiBlbmRz
V2l0aChzdHIsIHN1ZmZpeCkgeworICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdHIubGVuZ3Ro
IC0gc3VmZml4Lmxlbmd0aCkgPT0gc3VmZml4OworICAgIH0KKworICAgIHZhciBsYWJlbENvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbENvbnRhaW5lcicpOworICAgIHZh
ciBjb250cm9sQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyb2xDb250
YWluZXInKTsKKyAgICB2YXIganVua0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdqdW5rQ29udGFpbmVyJyk7CisKKyAgICB2YXIgbGFiZWxzID0gW107CisgICAgdmFyIGNvbnRy
b2xzID0gW107CisKKyAgICB2YXIgc3RhcnRUaW1lID0gbmV3IERhdGUoKTsKKworICAgIC8vIENy
ZWF0ZSBhIGJ1bmNoIG9mIGxhYmVscywgZWFjaCBvZiB0aGUgZm9ybToKKyAgICAvLyAgIDxsYWJl
bCBmb3I9J2MwJz5MYWJlbCAwPC9sYWJlbD4KKyAgICAvLyBDcmVhdGUgY29ycmVzcG9uZGluZyBj
b250cm9scywgZWFjaCBvZiB0aGlzIGZvcm06CisgICAgLy8gICA8aW5wdXQgaWQ9J2MwJyB0eXBl
PSd0ZXh0Jz4KKyAgICB2YXIgY291bnQgPSA1MDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKSB7CisgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2xhYmVsJyk7CisgICAgICAgIGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2MnICsgaSk7Cisg
ICAgICAgIGxhYmVsLmlubmVyVGV4dCA9ICdMYWJlbCAnICsgaTsKKyAgICAgICAgbGFiZWxzLnB1
c2gobGFiZWwpOworICAgICAgICBsYWJlbENvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CisK
KyAgICAgICAgdmFyIGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwor
ICAgICAgICBjb250cm9sLnR5cGUgPSAndGV4dCc7CisgICAgICAgIGNvbnRyb2wuaWQgPSAnYycg
KyBpOworICAgICAgICBjb250cm9scy5wdXNoKGNvbnRyb2wpOworICAgICAgICBjb250cm9sQ29u
dGFpbmVyLmFwcGVuZENoaWxkKGNvbnRyb2wpOworICAgIH0KKworICAgIC8vIEdldCB0aGUgYWNj
ZXNzaWJpbGl0eSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgY29udHJvbCBjb250YWluZXIu
CisgICAgdmFyIGF4Q29udHJvbENvbnRhaW5lciA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFj
Y2Vzc2libGVFbGVtZW50QnlJZCgnY29udHJvbENvbnRhaW5lcicpOworICAgIHNob3VsZEJlKCJh
eENvbnRyb2xDb250YWluZXIuY2hpbGRyZW5Db3VudCIsICIiICsgY291bnQpOworCisgICAgLy8g
Tm93IGFkZCBtb3JlIGp1bmsgdG8gdGhlIHBhZ2UuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQg
dGl0bGVVSUVsZW1lbnQgZG9lc24ndCB0YWtlCisgICAgLy8gdGltZSBwcm9wb3J0aW9uYWwgdG8g
dGhlIG51bWJlciBvZiBET00gZWxlbWVudHMgb24gdGhlIHBhZ2UgYW55bW9yZS4KKyAgICBmb3Ig
KGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworICAgICAgZGl2LmlubmVySFRNTCA9ICI8cD48L3A+PHA+PC9wPjxw
PjwvcD48cD48L3A+PHA+PC9wPiI7CisgICAgICBqdW5rQ29udGFpbmVyLmFwcGVuZENoaWxkKGRp
dik7CisgICAgfQorCisgICAgLy8gU2F2ZSB0aGUgdG90YWwgdGltZSB0byBidWlsZCB0aGUgRE9N
LgorICAgIHZhciBtaWRUaW1lID0gbmV3IERhdGUoKTsKKyAgICB2YXIgYnVpbGRUaW1lID0gbWlk
VGltZSAtIHN0YXJ0VGltZTsKKworICAgIC8vIE5vdyBjYWxsIHRpdGxlVUlFbGVtZW50IG9uIGVh
Y2ggY29udHJvbCwgYW5kIGNoZWNrIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcmVzdWx0LgorICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICB2YXIgYXhDb250cm9s
ID0gYXhDb250cm9sQ29udGFpbmVyLmNoaWxkQXRJbmRleChpKTsKKyAgICAgICAgdmFyIGF4VGl0
bGVVSUVsZW1lbnQgPSBheENvbnRyb2wudGl0bGVVSUVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFh
eFRpdGxlVUlFbGVtZW50KSB7CisgICAgICAgICAgICBkZWJ1ZygiRkFJTDogY29udHJvbCAiICsg
aSArICIgaGFzIG5vIHRpdGxlVUlFbGVtZW50LiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHRpdGxlID0gYXhUaXRsZVVJRWxlbWVudC5jaGlsZEF0SW5kZXgo
MCkuc3RyaW5nVmFsdWU7CisgICAgICAgIGlmICghZW5kc1dpdGgodGl0bGUsICJMYWJlbCAiICsg
aSkpIHsKKyAgICAgICAgICAgIGRlYnVnKCJGQUlMOiBjb250cm9sICIgKyBpICsgIiB0aXRsZVVJ
RWxlbWVudCB2YWx1ZSBpcyAnIiArCisgICAgICAgICAgICAgICAgICB0aXRsZSArICInICwgZXhw
ZWN0aW5nIGl0IHRvIGVuZCB3aXRoICdMYWJlbCAiICsgaSArICInIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE1lYXN1cmUgdGhlIHRpbWUgaXQgdG9v
ayB0byBjYWxsIHRpdGxlVUlFbGVtZW50IG9uIGVhY2ggY29udHJvbAorICAgIHZhciBlbmRUaW1l
ID0gbmV3IERhdGUoKTsKKyAgICB2YXIgdGl0bGVVSUVsZW1lbnRUaW1lID0gZW5kVGltZSAtIG1p
ZFRpbWU7CisKKyAgICAvLyBJZiB0aGlzIGlzIHdvcmtpbmcgY29ycmVjdGx5LCBpdCBzaG91bGQg
dGFrZSAoc2lnbmlmaWNhbnRseSkgbGVzcworICAgIC8vIHRpbWUgdG8gcXVlcnkgdGl0bGVVSUVs
ZW1lbnQgb24gYWxsIG9mIHRoZSBjb250cm9scyB0aGFuIHRoZSB0aW1lCisgICAgLy8gdG8gYnVp
bGQgdGhlIHBhZ2UgRE9NLiBXaXRoIHRoZSBwcmV2aW91cyBPKG4pIGFsZ29yaXRobSBmb3IKKyAg
ICAvLyB0aXRsZVVJRWxlbWVudCwgaXQgdG9vayBzaWduaWZpY2FudGx5IGxvbmdlci4KKyAgICBp
ZiAodGl0bGVVSUVsZW1lbnRUaW1lIDwgYnVpbGRUaW1lKSB7CisgICAgICBkZWJ1ZygiUEFTUyBR
dWVyaWVkIHRpdGxlVUlFbGVtZW50IGluIGxlc3MgdGltZSB0aGFuIGl0IHRvb2sgdG8gYnVpbGQg
dGhlIERPTS4iKTsKKyAgICB9IGVsc2UgeworICAgICAgZGVidWcoIkZBSUwgVG9vayAiICsgYnVp
bGRUaW1lICsgIiBtcyB0byBidWlsZCB0aGUgRE9NIGFuZCAiICsKKyAgICAgICAgICAgIHRpdGxl
VUlFbGVtZW50VGltZSArICIgbXMgdG8gcXVlcnkgdGl0bGVVSUVsZW1lbnQgb24gZWFjaCBjb250
cm9sLiIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgbGFiZWxzIGZyb20gdGhlIHBhZ2Ug
c28gdGhlIHRleHQgZHVtcCBvZiB0aGUgcGFnZSBpc24ndCBnaWdhbnRpYy4KKyAgICBsYWJlbENv
bnRhaW5lci5pbm5lckhUTUwgPSAiIjsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlv
bnMKaW5kZXggOTQ5NzMwNWViNTNhYTMwOTJkYTM1OWZmMzVjMWQxZTBjZTJmMTVlNy4uY2VlOGM4
NWFjNmE0OTAyYzJhNjlmMDEwNjljY2UyODcwYTEzOTBkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMzQzLDcgKzEzNDMsNiBAQCBj
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWFjdGl2ZWRlc2NlbmRhbnQtY3Jhc2gu
aHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1jb21ib2Jv
eC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWNvbnRy
b2xzLXdpdGgtdGFicy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0
eS9hcmlhLWZhbGxiYWNrLXJvbGVzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nl
c3NpYmlsaXR5L2FyaWEtaGlkZGVuLXVwZGF0ZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS9hcmlhLWludmFsaWQuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1sYWJlbGxlZGJ5LW92ZXJyaWRlcy1sYWJlbC5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWxpbmstc3VwcG9ydHMt
cHJlc3MuaHRtbCBbIFNraXAgXQpAQCAtMTM2OCwxNCArMTM2NywxMSBAQCBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbCBbIFNraXAgXQogY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbGVnZW5kLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8x
MDMyMiBhY2Nlc3NpYmlsaXR5L2xpc3RzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L21lZGlhLWVsZW1lbnQuaHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvbm9uLWRhdGEtdGFibGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L29uY2xpY2staGFuZGxlcnMu
aHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIu
aHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGx1Z2luLmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1jaGVj
a2JveC1zaXplLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3Jh
ZGlvLWJ1dHRvbi1ncm91cC1tZW1iZXJzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi10aXRsZS1sYWJlbC5odG1sIFsgU2tpcCBdCi1jcmJ1
Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWF0dHJpYnV0ZXMu
aHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbC1z
cGFucy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1j
ZWxscy5odG1sIFsgU2tpcCBdCkBAIC0xMzg4LDcgKzEzODQsNiBAQCBjcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS90ZXh0YXJlYS1pbnNlcnRpb24tcG9pbnQtbGluZS1udW1iZXIuaHRtbCBb
IFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGV4dGFyZWEtbGluZS1mb3It
aW5kZXguaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGV4dGFy
ZWEtc2VsZWN0ZWQtdGV4dC1yYW5nZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS90ZXh0Ym94LXJvbGUtcmVwb3J0cy1zZWxlY3Rpb24uaHRtbCBbIFNraXAgXQot
Y3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGgtYXMtdGl0bGUtdWkuaHRtbCBbIFNraXAg
XQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdHJhbnNmb3JtZWQtZWxlbWVudC5odG1s
IFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS92aXNpYmxlLWVsZW1lbnRz
Lmh0bWwgWyBTa2lwIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166275</attachid>
            <date>2012-09-28 10:37:09 -0700</date>
            <delta_ts>2012-09-28 14:49:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20120928103626.patch</filename>
            <type>text/plain</type>
            <size>28740</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5ODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTM5ZDcwZDg5Yzk5NTkz
YzYxZjVmN2ZjMTM4OTc5MDNjZjNkMTljYS4uY2VkYmZmOWQ0ZGZiNWY2NTliZGYwNDEzZDI4ODM1
YWZkOGI0NDdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA5LTI4ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG5ldyBh
Y2Nlc3NpYmlsaXR5IGNhY2hlIHRoYXQgbWFwcyBpZHMgdG8gbGFiZWwgZWxlbWVudHMKKyAgICAg
ICAgdGhhdCBsYWJlbCB0aGF0IGlkLiBUaGUgY2FjaGUgaXMgYnVpbHQgdGhlIGZpcnN0IHRpbWUg
aXQncworICAgICAgICBxdWVyaWVkIChwZXIgZG9jdW1lbnQpLCBhbmQgdGhlbiB1cGRhdGVkIGV2
ZXJ5IHRpbWUgYSBsYWJlbAorICAgICAgICBlbGVtZW50IG9uIHRoZSBwYWdlIGlzIGNyZWF0ZWQs
IGRlbGV0ZWQsIG9yIG1vZGlmaWVkLgorICAgICAgICBUaGlzIGFsbG93cyBmb3IgdmVyeSBmYXN0
IGxvb2t1cCBvZiB0aGUgbGFiZWwgZm9yIGFueSBlbGVtZW50LgorCisgICAgICAgIFRlc3RzOiBh
Y2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAg
ICAgICAgYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGFi
ZWxFbGVtZW50Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjp1cGRhdGVMYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpkb2N1bWVudERlc3Ryb3llZCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEFYT2Jq
ZWN0Q2FjaGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVs
Rm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAg
ICAgIChFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTExhYmVsRWxlbWVudC5oOgorICAg
ICAgICAoSFRNTExhYmVsRWxlbWVudCk6CisKIDIwMTItMDktMjcgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxMjk4MDYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcAppbmRleCA2YzA4YmUyMWYwZTMxNjcxMjdhYjNmMmI0Yjk1N2Y5YjRlYmNmODIzLi4y
Yzk3NDFmNDc2NzUzNDhhYzdjZTRjMmE0MGQxYzdjMDhjNjhmOTAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTYwLDEwICs2MCwxMiBA
QAogI2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExhYmVs
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lmIEVOQUJMRShWSURFTykKICNp
bmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2VuZGlmCisjaW5jbHVkZSAiTm9kZUxp
c3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2lu
Y2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC03Niw2ICs3OCw3IEBACiAjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjc2LDYgKzY3
OSw0MyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50Tm90aWZpY2F0aW9u
KEZyYW1lKiBmcmFtZSwgQVhMb2FkaW5nRXZlbnQgbAogICAgIGZyYW1lTG9hZGluZ0V2ZW50UGxh
dGZvcm1Ob3RpZmljYXRpb24ob2JqLCBsb2FkaW5nRXZlbnQpOwogfQogCitIVE1MTGFiZWxFbGVt
ZW50KiBBWE9iamVjdENhY2hlOjpsYWJlbEVsZW1lbnRGb3JJZChEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCit7CisgICAgaWYgKCFtX2lkVG9MYWJlbE1hcHBpbmcu
Y29udGFpbnMoZG9jdW1lbnQpKSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIVE1MTGFiZWxF
bGVtZW50Kj4qIGRvY3VtZW50TWFwcGluZyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSFRNTExhYmVs
RWxlbWVudCo+KCk7CisgICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IGRvY3VtZW50LT5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKTsKKyAgICAgICAgdW5zaWduZWQgbGVuID0gbGlz
dC0+bGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykg
eworICAgICAgICAgICAgaWYgKGxpc3QtPml0ZW0oaSktPmhhc1RhZ05hbWUobGFiZWxUYWcpKSB7
CisgICAgICAgICAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxI
VE1MTGFiZWxFbGVtZW50Kj4obGlzdC0+aXRlbShpKSk7CisgICAgICAgICAgICAgICAgaWYgKGxh
YmVsLT5oYXNBdHRyaWJ1dGUoZm9yQXR0cikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBjb250cm9sSWQgPSBsYWJlbC0+Z2V0QXR0cmlidXRlKGZvckF0dHIpOwor
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudE1hcHBpbmctPnNldChjb250cm9sSWQuc3RyaW5n
KCksIGxhYmVsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgbV9pZFRvTGFiZWxNYXBwaW5nLmFkZChkb2N1bWVudCwgZG9jdW1lbnRNYXBwaW5n
KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9pZFRvTGFiZWxNYXBwaW5nLmdldChkb2N1bWVudCkt
PmdldChpZCk7Cit9CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlTGFiZWxFbGVtZW50Rm9y
SWQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBIVE1MTGFiZWxF
bGVtZW50KiBsYWJlbEVsZW1lbnQpCit7CisgICAgaWYgKCFtX2lkVG9MYWJlbE1hcHBpbmcuY29u
dGFpbnMoZG9jdW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lkVG9MYWJlbE1hcHBp
bmcuZ2V0KGRvY3VtZW50KS0+c2V0KGlkLCBsYWJlbEVsZW1lbnQpOworfQorCit2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmRvY3VtZW50RGVzdHJveWVkKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBp
ZiAobV9pZFRvTGFiZWxNYXBwaW5nLmNvbnRhaW5zKGRvY3VtZW50KSkgeworICAgICAgICBkZWxl
dGUgbV9pZFRvTGFiZWxNYXBwaW5nLmdldChkb2N1bWVudCk7CisgICAgICAgIG1faWRUb0xhYmVs
TWFwcGluZy5yZW1vdmUoZG9jdW1lbnQpOworICAgIH0KK30KKwogdm9pZCBBWE9iamVjdENhY2hl
OjpoYW5kbGVTY3JvbGxiYXJVcGRhdGUoU2Nyb2xsVmlldyogdmlldykKIHsKICAgICBpZiAoIXZp
ZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4
IDhmMGY3NjU2Nzk5ZDMxMDc5ZWE2MTgyM2ZmNTZmNTExMGUyYzI3ZTcuLmViOTA0MDY5YTRmZjVj
MzczMjVhMGY2NGQ1ZDg0YzNmOTNjMGQ4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQ7CitjbGFzcyBIVE1M
TGFiZWxFbGVtZW50OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJPYmpl
Y3Q7CkBAIC0xNzYsNiArMTc3LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbm9kZUhhc1JvbGUo
Tm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgcm9sZSk7CiAKKyAgICAvLyBUaGUgZmlyc3QgdGlt
ZSBsYWJlbEVsZW1lbnRGb3JJZCBpcyBjYWxsZWQsIGEgY2FjaGUgZnJvbSBpZCB0bworICAgIC8v
IGxhYmVsIGVsZW1lbnQgaXMgYnVpbHQuIFRoaXMgY2FjaGUgaXMgdXBkYXRlZCBldmVyeSB0aW1l
IGEgTGFiZWwKKyAgICAvLyBlbGVtZW50IGlzIGNyZWF0ZWQsIGRlbGV0ZWQsIG9yIG1vZGlmaWVk
LgorICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsRWxlbWVudEZvcklkKERvY3VtZW50KiwgY29u
c3QgQXRvbWljU3RyaW5nJik7CisgICAgdm9pZCB1cGRhdGVMYWJlbEVsZW1lbnRGb3JJZChEb2N1
bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAgICB2
b2lkIGRvY3VtZW50RGVzdHJveWVkKERvY3VtZW50Kik7CisKIHByb3RlY3RlZDoKICAgICB2b2lk
IHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhOb3RpZmlj
YXRpb24pOwogICAgIHZvaWQgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nl
c3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0Q2hhbmdlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0
cmluZyYpOwpAQCAtMTk4LDYgKzIwNiwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIEhhc2hTZXQ8
QVhJRD4gbV9pZHNJblVzZTsKICAgICAKKyAgICAvLyBUaGlzIG1hcHBpbmcgZW5hYmxlcyBmYXN0
IGxvb2t1cHMgb2YgPGxhYmVsIGZvcj0iaWQiPiBnaXZlbiB0aGUgaWQgb2YgdGhlCisgICAgLy8g
bm9kZSBpdCByZWZlcmVuY2VzIGluIGl0cyAiZm9yIiBhdHRyaWJ1dGUuIFRoZSBtYXBwaW5nIGlz
IGluaXRpYWxpemVkCisgICAgLy8gZm9yIGVhY2ggZG9jdW1lbnQgd2hlbiBsYWJlbEVsZW1lbnRG
b3JJZCBpcyBjYWxsZWQsIHRoZW4gdXBkYXRlZAorICAgIC8vIGV2ZXJ5IHRpbWUgYSBsYWJlbCBl
bGVtZW50IGlzIGFkZGVkIG9yIGNoYW5nZWQgZnJvbSB0aGVuIG9uLgorICAgIEhhc2hNYXA8RG9j
dW1lbnQqLCBIYXNoTWFwPFN0cmluZywgSFRNTExhYmVsRWxlbWVudCo+KiA+IG1faWRUb0xhYmVs
TWFwcGluZzsKKwogICAgIFRpbWVyPEFYT2JqZWN0Q2FjaGU+IG1fbm90aWZpY2F0aW9uUG9zdFRp
bWVyOwogICAgIFZlY3RvcjxwYWlyPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiwgQVhOb3Rp
ZmljYXRpb24+ID4gbV9ub3RpZmljYXRpb25zVG9Qb3N0OwogICAgIHZvaWQgbm90aWZpY2F0aW9u
UG9zdFRpbWVyRmlyZWQoVGltZXI8QVhPYmplY3RDYWNoZT4qKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5k
ZXggMGY5NDgzOGU3ZWM1NWE5NjllZGIxZTgwNTAwMDM5NzVkN2VlY2MxMy4uYWZlMWY3NWM0YTgz
YjdjZmE0NWI2MGQ4MzhiMjA5YzllN2ZmYjYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTEwMDEs
MTQgKzEwMDEsMTQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNHZW5lcmljRm9j
dXNhYmxlRWxlbWVudCgpIGNvbnN0CiAKIEhUTUxMYWJlbEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjpsYWJlbEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5nZXRFbGVtZW50
c0J5VGFnTmFtZSgibGFiZWwiKTsKLSAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgaWYgKGxp
c3QtPml0ZW0oaSktPmhhc1RhZ05hbWUobGFiZWxUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MTGFi
ZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihsaXN0LT5p
dGVtKGkpKTsKLSAgICAgICAgICAgIGlmIChsYWJlbC0+Y29udHJvbCgpID09IGVsZW1lbnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsOwotICAgICAgICB9CisgICAgaWYgKGVsZW1lbnQt
Pmhhc0F0dHJpYnV0ZShpZEF0dHIpKSB7CisgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBy
ZXN1bHQgPSBheE9iamVjdENhY2hlKCktPmxhYmVsRWxlbWVudEZvcklkKGVsZW1lbnQtPmRvY3Vt
ZW50KCksIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShpZEF0dHIpKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgZm9yIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5w
YXJlbnRFbGVtZW50KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKKyAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShsYWJlbFRhZykpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHBhcmVudCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAwMGRlMGU3NjgzODhl
YzkzODAwYjRmN2FlNjg4NDU4MzNiYTIyMWU3Li5kNjM2OWFiMDkzMjJkMWE0NDljNzAyNDZkNzFj
NzVjZmY2MDRmZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTYyOSw2ICs2MjksOSBA
QCBEb2N1bWVudDo6fkRvY3VtZW50KCkKIAogICAgIG1fcmVuZGVyQXJlbmEuY2xlYXIoKTsKIAor
ICAgIGlmICh0b3BEb2N1bWVudCgpICE9IHRoaXMgJiYgdG9wRG9jdW1lbnQoKS0+bV9heE9iamVj
dENhY2hlKQorICAgICAgICB0b3BEb2N1bWVudCgpLT5tX2F4T2JqZWN0Q2FjaGUtPmRvY3VtZW50
RGVzdHJveWVkKHRoaXMpOworCiAgICAgY2xlYXJBWE9iamVjdENhY2hlKCk7CiAKICAgICBtX2Rl
Y29kZXIgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggMGNkMjA5ZGY4MmQwNzQ2MzI2YmE5NjQ3
ZGUyYzQyNDgwNmI2ZjBlNS4uZTE5M2QyOGUyYzhiYzlmNjVjOGQzNGEwNDY3OWJjNzA1YWE4M2Ez
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0zMTUsNyArMzE1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgdXBkYXRlSWQoVHJlZVNjb3BlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuZXdJZCk7CiAgICAgdm9pZCB1cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKTsKIAotICAgIHZvaWQg
d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CisgICAgdmlydHVh
bCB2b2lkIHdpbGxNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOwogICAg
IHZvaWQgd2lsbFJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCBkaWRBZGRBdHRyaWJ1dGUoY29uc3QgQXR0cmli
dXRlJik7CiAgICAgdm9pZCBkaWRNb2RpZnlBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAppbmRleCAyNDJmYjBjYmQzNmU2
N2NiNmJmYTg1NDdjOTdmNTllNzc0OGUzMWRmLi5kOTE3ZDk0YTA1ODZjN2EwZTIxYmExY2Q0MTM5
Y2ZjZTIwYTIxNjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAK
QEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MTGFi
ZWxFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAg
LTE1NSw2ICsxNTYsMjQgQEAgYm9vbCBIVE1MTGFiZWxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91
c2VDbGlja0V2ZW50cygpCiAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91
c2VDbGlja0V2ZW50cygpOwogfQogCit2b2lkIEhUTUxMYWJlbEVsZW1lbnQ6OndpbGxNb2RpZnlB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKK3sKKyAgICBpZiAoQVhPYmpl
Y3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBuYW1lID09IGZvckF0dHIpIHsKKyAg
ICAgICAgaWYgKCFvbGRWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5h
eE9iamVjdENhY2hlKCktPnVwZGF0ZUxhYmVsRWxlbWVudEZvcklkKGRvY3VtZW50KCksIG9sZFZh
bHVlLCAwKTsKKyAgICAgICAgaWYgKCFuZXdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBk
b2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnVwZGF0ZUxhYmVsRWxlbWVudEZvcklkKGRvY3Vt
ZW50KCksIG5ld1ZhbHVlLCB0aGlzKTsKKyAgICB9CisgICAgSFRNTEVsZW1lbnQ6OndpbGxNb2Rp
ZnlBdHRyaWJ1dGUobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKK30KKwordm9pZCBIVE1MTGFi
ZWxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQor
eworICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZSk7CisgICAgaWYg
KEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgYXR0cmlidXRlLm5hbWUo
KSA9PSBmb3JBdHRyICYmICFhdHRyaWJ1dGUudmFsdWUoKS5pc0VtcHR5KCkpCisgICAgICAgIGRv
Y3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+dXBkYXRlTGFiZWxFbGVtZW50Rm9ySWQoZG9jdW1l
bnQoKSwgYXR0cmlidXRlLnZhbHVlKCksIHRoaXMpOworfQorCiB2b2lkIEhUTUxMYWJlbEVsZW1l
bnQ6OmZvY3VzKGJvb2wpCiB7CiAgICAgLy8gdG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMsIGFsd2F5
cyByZXN0b3JlIHByZXZpb3VzIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGFiZWxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVs
ZW1lbnQuaAppbmRleCBmNDhjNjgwNWU0OTFhZDZlODA0OTk0ZjZiNmNlNzk2YjhhOTZmZWZhLi5j
MGJiY2FmZWJiOGVjZmMzZGFhYTM3NGU0NTEzYzZkMWY0OTZmZmJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxMYWJlbEVsZW1lbnQuaApAQCAtMzgsNiArMzgsOSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBPVkVSUklERTsKIAor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1Zh
bHVlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChjb25zdCBB
dHRyaWJ1dGUmKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICBIVE1MTGFiZWxFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjdiMzQ4OGFkNmQ2MWIxOTBhZGZhOWZiMThk
YTg1ODdjNmJhMGZiMy4uNTY4NjQ0ZTVkODRlZDg3ZDc1NDI1ZDg4NzQwMzc2ZTVjMTJkOGE2ZiAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDEyLTA5LTI4ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUu
Y29tPgorCisgICAgICAgIEFYOiBsYWJlbEZvckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFy
ZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRpdGxlVUlFbGVtZW50IGluIHRoZSBjaHJvbWl1bSBw
b3J0IG9mIERSVCwgYW5kCisgICAgICAgIGZpeCBnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQgc28g
dGhhdCBpdCBlbnN1cmVzIHRoZSBiYWNraW5nIHN0b3JlCisgICAgICAgIGlzIHVwLXRvLWRhdGUu
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmdldEFjY2Vzc2libGVFbGVtZW50QnlJZCk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3Bw
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFj
ayk6CisKIDIwMTItMDktMjcgIE5hc2tvIE9za292ICA8bmFza29AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIE1vdmUgRHVtcFJlbmRlclRyZWUgdG8gdXNlIG5ld2VyIHZlcnNpb24gb2YgdGhlIG5h
bWUgbWV0aG9kIG9mCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNo
cm9taXVtLmNwcAppbmRleCA4OWQ1ZDU4NzcwYzYxZDFhYWU5MTYwYmEzNGU0MzY3NjUxNmIwN2My
Li4wZmU0YzFmOTllNDU5NmQyZDhkNzQ3OGIyMTFmMzllNjViZmYzNzY4IDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyQ2hyb21pdW0uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKQEAgLTExNyw2ICsx
MTcsOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKGNvbnN0CiAgICAgaWYgKG1fcm9vdEVsZW1lbnQuaXNO
dWxsKCkpCiAgICAgICAgIG1fcm9vdEVsZW1lbnQgPSBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlP
YmplY3QoKTsKIAorICAgIGlmICghbV9yb290RWxlbWVudC51cGRhdGVCYWNraW5nU3RvcmVBbmRD
aGVja1ZhbGlkaXR5KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGZpbmRBY2Nl
c3NpYmxlRWxlbWVudEJ5SWRSZWN1cnNpdmUobV9yb290RWxlbWVudCwgV2ViU3RyaW5nOjpmcm9t
VVRGOChpZC5jX3N0cigpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudENocm9taXVtLmNwcAppbmRleCBiNzk1YWViODM3NDA0YzRlNTg4YmRiYWUzNjNlNTgy
OTYwOTlhNDI1Li5lZjlmYTUwYzcwNzRlZWM3ZGQxMWY0ZjU1OTc1YTdjM2U4NmNmOGU3IDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCkBAIC03
MzQsNyArNzM0LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVt
bkFuZFJvd0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsCiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAg
V2ViQWNjZXNzaWJpbGl0eU9iamVjdCBvYmogPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkudGl0bGVV
SUVsZW1lbnQoKTsKKyAgICBpZiAob2JqLmlzTnVsbCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzdWx0LT5zZXQoKihtX2Zh
Y3RvcnktPmdldE9yQ3JlYXRlKG9iaiktPmdldEFzQ3BwVmFyaWFudCgpKSk7CisKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCZhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCBjZGZjMWVjMzU4MmFhZTM5YTBhMDk4YjA1NDBhZmU3Y2ZkNGEzMzE5Li5lOWU2MDdiNzdmMjEw
ZDUxZmM4MDgwNDMyYTVlMWJhMDhkNTBjMWUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTIt
MDktMjggIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAg
QVg6IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIERPTSBl
bGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTc4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRzIHR3byBuZXcgdGVzdHMgZm9yIHRpdGxlVUlFbGVtZW50IHRoYXQgcnVuIG9uIGJvdGggTWFj
IGFuZAorICAgICAgICBDaHJvbWl1bS4gT25lIHRlc3RzIGNvcnJlY3RuZXNzLCB0aGUgb3RoZXIg
dGVzdHMgc3BlZWQuCisKKyAgICAgICAgVGhlIHRlc3QgZm9yIHRpdGxlVUlFbGVtZW50IHNwZWVk
IGlzIGNhcmVmdWxseSBkZXNpZ25lZCBzbyB0aGF0CisgICAgICAgIGl0IGZhaWxzIHdpdGhvdXQg
dGhpcyBwYXRjaCBhbmQgcGFzc2VzIHdpdGggaXQsIHdoaWxlIHN0aWxsCisgICAgICAgIGJlaW5n
IHJvYnVzdCB0byBkaWZmZXJlbmNlcyBpbiBjcHUgc3BlZWQsIHBsYXRmb3JtLCBldGMuIC0gZXNz
ZW50aWFsbHkKKyAgICAgICAgaXQgY29tcGFyZXMgdGhlIHNwZWVkIG9mIGRvaW5nIGEgbGFyZ2Ug
bnVtYmVyIG9mIGNhbGxzIHRvIHRpdGxlVUlFbGVtZW50CisgICAgICAgIHRvIHRoZSB0aW1lIGl0
IHRha2VzIHRvIGJ1aWxkIHRoZSBET00gb2YgYSBwYWdlLCBmb3IgYSByZWxhdGl2ZWx5CisgICAg
ICAgIGxhcmdlIHBhZ2Ugd2l0aCBsb3RzIG9mIERPTSBlbGVtZW50cy4gSXQgZW5zdXJlcyB0aGF0
IHRpdGxlVUlFbGVtZW50CisgICAgICAgIGRvZXNuJ3QgbmVlZCB0byBzY2FuIHRoZSBlbnRpcmUg
RE9NIHRvIGxvb2sgZm9yIGxhYmVsIGVsZW1lbnRzLgorCisgICAgICAgIEZpeGVzIG9uZSB0ZXN0
IHNvIHRoYXQgaXQgcGFzc2VzIG9uIENocm9taXVtLgorICAgICAgICBFbmFibGVzIG90aGVyIHRl
c3RzIHRoYXQgbm93IHBhc3Mgb24gQ2hyb21pdW0uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRtbDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbDogQWRk
ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50
LXNwZWVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBl
Y3RhdGlvbnM6CisKIDIwMTItMDktMjcgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBEZWxldGUgdGVzdCB0aGF0IG5vIGxvbmdlciBleGlzdHMuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRt
bCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5o
dG1sCmluZGV4IDE3MGU1NzAxYTA0NTg1ZGMwMWU4NmFjNjc5YjFlMzQzMDgxNjNmMTkuLjEyZjgx
ZTMzOGRjYThiNWYxNGYwMWI4ODI2OGNkZjZiMjlmZjIxNWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCkBA
IC0yMSw4ICsyMSw3IEBACiAgICAgICAgICAgICBwYXNzLmZvY3VzKCk7CiAgICAgICAgICAgICB2
YXIgdGl0bGVVSUVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVu
dC50aXRsZVVJRWxlbWVudCgpOwogICAgICAgICAgICAgdmFyIHRpdGxlVGV4dCA9IHRpdGxlVUlF
bGVtZW50LmNoaWxkQXRJbmRleCgwKTsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gIkFYVmFs
dWU6IFBhc3N3b3JkIjsKLSAgICAgICAgICAgIGlmICh0aXRsZVRleHQuYWxsQXR0cmlidXRlcygp
LmluZGV4T2YocGF0dGVybikgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmICh0aXRsZVRleHQuc3Ry
aW5nVmFsdWUgPT0gIkFYVmFsdWU6IFBhc3N3b3JkIikgewogICAgICAgICAgICAgICAgIHJlc3Vs
dC5pbm5lclRleHQgKz0gIlRlc3QgcGFzc2VkXG4iOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZWxzZSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NGFiNmI1ODI3ZWVhOTZjNTAyY2EzZDAyODFiMzQ3ZDU2OTAwNzAzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3Ru
ZXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI1IEBACitMYWJlbCAxICAKK0xhYmVsIDIgIAor
TGFiZWwgMyAgCisKK0xhYmVsIDUgIAorVGhpcyB0ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IHdv
cmtzIGNvcnJlY3RseSBldmVuIHdoZW4gdGhpbmdzIGNoYW5nZSBkeW5hbWljYWxseS4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgY29udHJvbDEudGl0bGVVSUVsZW1lbnQo
KS5pc0VxdWFsKGxhYmVsMSkgaXMgdHJ1ZQorUEFTUyBjb250cm9sMi50aXRsZVVJRWxlbWVudCgp
LmlzRXF1YWwobGFiZWwyKSBpcyB0cnVlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2wz
KSBpcyBmYWxzZQorUEFTUyBjb250cm9sMy50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWwz
KSBpcyB0cnVlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w0KSBpcyBmYWxzZQorUEFT
UyBoYXNUaXRsZVVJRWxlbWVudChjb250cm9sNCkgaXMgdHJ1ZQorUEFTUyBjb250cm9sNC50aXRs
ZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWw0KSBpcyB0cnVlCitQQVNTIGhhc1RpdGxlVUlFbGVt
ZW50KGNvbnRyb2w0KSBpcyBmYWxzZQorUEFTUyBoYXNUaXRsZVVJRWxlbWVudChjb250cm9sNSkg
aXMgZmFsc2UKK1BBU1MgY29udHJvbDUudGl0bGVVSUVsZW1lbnQoKSAhPSBudWxsIGlzIHRydWUK
K1BBU1MgY29udHJvbDUudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsNSkgaXMgdHJ1ZQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0
bmVzcy5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNv
cnJlY3RuZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJjNDRkMjFjNjBmNjY5MjM4NzEzOTNlMGQ1MGQ0
YWNjZDZjMWJjZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
dGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCkBAIC0wLDAgKzEsMTAyIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJjb250YWluZXIiPgor
CisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsMSIgZm9yPSJjMSI+TGFiZWwgMTwvbGFiZWw+Cisg
ICAgPGlucHV0IGlkPSJjMSIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorCisgIDxkaXY+CisgICAg
PGxhYmVsIGlkPSJsMiI+CisgICAgICBMYWJlbCAyCisgICAgICA8aW5wdXQgaWQ9ImMyIiB0eXBl
PSJ0ZXh0Ij4KKyAgICA8L2xhYmVsPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBp
ZD0ibDMiPkxhYmVsIDM8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iYzMiIHR5cGU9InRleHQiPgor
ICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxpbnB1dCBpZD0iYzQiIHR5cGU9InRleHQiPgorICA8
L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibDUiPgorICAgICAgTGFiZWwgNQorICAg
IDwvbGFiZWw+CisgICAgPGlucHV0IGlkPSJjNSIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorPC9k
aXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
aGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3MgY29ycmVjdGx5IGV2ZW4gd2hlbiB0
aGluZ3MgY2hhbmdlIGR5bmFtaWNhbGx5LiIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIgJiYg
d2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7CisKKyAgICBmdW5jdGlvbiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQpIHsKKyAg
ICAgICAgdmFyIGxhYmVsMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVt
ZW50QnlJZCgibDEiKTsKKyAgICAgICAgdmFyIHRpdGxlVUlFbGVtZW50ID0gYXhFbGVtZW50LnRp
dGxlVUlFbGVtZW50KCk7CisgICAgICAgIGlmICh0aXRsZVVJRWxlbWVudCA9PSBudWxsKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdGl0bGVVSUVsZW1lbnQucm9s
ZSA9PSBsYWJlbDEucm9sZTsKKyAgICB9CisKKyAgICB2YXIgbGFiZWwxID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsMSIpOworICAgIHZhciBjb250cm9s
MSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiYzEiKTsK
KyAgICBzaG91bGRCZSgiY29udHJvbDEudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsMSki
LCAidHJ1ZSIpOworCisgICAgdmFyIGxhYmVsMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFj
Y2Vzc2libGVFbGVtZW50QnlJZCgibDIiKTsKKyAgICB2YXIgY29udHJvbDIgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImMyIik7CisgICAgc2hvdWxkQmUo
ImNvbnRyb2wyLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDIpIiwgInRydWUiKTsKKwor
ICAgIC8vIFRlc3QgY2hhbmdpbmcgdGhlICJmb3IiIGF0dHJpYnV0ZSBkeW5hbWljYWxseS4KKyAg
ICB2YXIgbGFiZWwzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJsMyIpOworICAgIHZhciBjb250cm9sMyA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFj
Y2Vzc2libGVFbGVtZW50QnlJZCgiYzMiKTsKKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1l
bnQoY29udHJvbDMpIiwgImZhbHNlIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImwz
Iikuc2V0QXR0cmlidXRlKCJmb3IiLCAiYzMiKTsKKyAgICBzaG91bGRCZSgiY29udHJvbDMudGl0
bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsMykiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCB1
bmF0dGFjaGVkIGxhYmVsIGVsZW1lbnQgdGhhdCdzIHN1YnNlcXVlbnRseSBhdHRhY2hlZC4KKyAg
ICB2YXIgY29udHJvbDQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVu
dEJ5SWQoImM0Iik7CisgICAgdmFyIGxhYmVsNEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJsYWJlbCIpOworICAgIGxhYmVsNEVsZW1lbnQuaWQgPSAibDQiOworICAgIGxhYmVsNEVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJmb3IiLCAiYzQiKTsKKyAgICBsYWJlbDRFbGVtZW50LmlubmVy
VGV4dCA9ICJMYWJlbCA0IjsKKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQoY29udHJv
bDQpIiwgImZhbHNlIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIp
LmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQpOworICAgIHZhciBsYWJlbDQgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImw0Iik7CisgICAgc2hvdWxkQmUo
Imhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w0KSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNv
bnRyb2w0LnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDQpIiwgInRydWUiKTsKKworICAg
IC8vIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGxhYmVsIGlzIGRldGFjaGVkLgorICAgIGxh
YmVsNEVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsYWJlbDRFbGVtZW50KTsKKyAg
ICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDQpIiwgImZhbHNlIik7CisKKyAg
ICAvLyBUZXN0IGxhYmVsIHRoYXQgZ2V0cyBhIGNvbnRyb2wgcmVwYXJlbnRlZCBpbnRvIGl0Lgor
ICAgIHZhciBjb250cm9sNSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVt
ZW50QnlJZCgiYzUiKTsKKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDUp
IiwgImZhbHNlIik7CisKKyAgICB2YXIgY29udHJvbDVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImM1Iik7CisgICAgdmFyIGxhYmVsNUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibDUiKTsKKyAgICBjb250cm9sNUVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVD
aGlsZChjb250cm9sNUVsZW1lbnQpOworICAgIGxhYmVsNUVsZW1lbnQuYXBwZW5kQ2hpbGQoY29u
dHJvbDVFbGVtZW50KTsKKworICAgIGNvbnRyb2w1ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjNSIpOworICAgIHNob3VsZEJlKCJjb250cm9sNS50aXRs
ZVVJRWxlbWVudCgpICE9IG51bGwiLCAidHJ1ZSIpOworICAgIHZhciBsYWJlbDUgPSBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImw1Iik7CisgICAgc2hvdWxk
QmUoImNvbnRyb2w1LnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDUpIiwgInRydWUiKTsK
K30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUyMDlhZjk0MWQwNWZiZTJhNzI3YTM1MDY5OGNhNTc3OGIw
ODlhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUt
dWktZWxlbWVudC1zcGVlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorCitUaGlzIHRl
c3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgZG9lc24ndCB0YWtlIGEgcmlkaWN1bG91c2x5IGxvbmcg
dGltZSB0byBydW4gd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgbGFiZWwgZWxlbWVudHMgb24gYSBw
YWdlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBheENvbnRyb2xDb250
YWluZXIuY2hpbGRyZW5Db3VudCBpcyA1MDAKK1BBU1MgUXVlcmllZCB0aXRsZVVJRWxlbWVudCBp
biBsZXNzIHRpbWUgdGhhbiBpdCB0b29rIHRvIGJ1aWxkIHRoZSBET00uCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zNGRlZWFhMjYxZjE4ODk0NGE4NDk0ZTcwMDcxMTNiMjI4NzU1NzZkCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0
bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
CisKKzxkaXYgaWQ9ImxhYmVsQ29udGFpbmVyIj4KKzwvZGl2PgorPGRpdiBpZD0iY29udHJvbENv
bnRhaW5lciIgYXJpYS1sYWJlbD0iY29udHJvbCBjb250YWluZXIiPgorPC9kaXY+Cis8ZGl2IGlk
PSJqdW5rQ29udGFpbmVyIiBoaWRkZW4+Cis8L2Rpdj4KKworPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVu
dCBkb2Vzbid0IHRha2UgYSByaWRpY3Vsb3VzbHkgbG9uZyB0aW1lIHRvIHJ1biB3aGVuIHRoZXJl
IGFyZSBhIGxvdCBvZiBsYWJlbCBlbGVtZW50cyBvbiBhIHBhZ2UuIik7CisKK2lmICh3aW5kb3cu
dGVzdFJ1bm5lciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5k
b3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKKyAgICBmdW5jdGlvbiBlbmRzV2l0aChzdHIs
IHN1ZmZpeCkgeworICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gc3VmZml4
Lmxlbmd0aCkgPT0gc3VmZml4OworICAgIH0KKworICAgIHZhciBsYWJlbENvbnRhaW5lciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbENvbnRhaW5lcicpOworICAgIHZhciBjb250cm9s
Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyb2xDb250YWluZXInKTsK
KyAgICB2YXIganVua0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqdW5rQ29u
dGFpbmVyJyk7CisKKyAgICB2YXIgbGFiZWxzID0gW107CisgICAgdmFyIGNvbnRyb2xzID0gW107
CisKKyAgICB2YXIgc3RhcnRUaW1lID0gbmV3IERhdGUoKTsKKworICAgIC8vIENyZWF0ZSBhIGJ1
bmNoIG9mIGxhYmVscywgZWFjaCBvZiB0aGUgZm9ybToKKyAgICAvLyAgIDxsYWJlbCBmb3I9J2Mw
Jz5MYWJlbCAwPC9sYWJlbD4KKyAgICAvLyBDcmVhdGUgY29ycmVzcG9uZGluZyBjb250cm9scywg
ZWFjaCBvZiB0aGlzIGZvcm06CisgICAgLy8gICA8aW5wdXQgaWQ9J2MwJyB0eXBlPSd0ZXh0Jz4K
KyAgICB2YXIgY291bnQgPSA1MDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7
CisgICAgICAgIGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2MnICsgaSk7CisgICAgICAgIGxh
YmVsLmlubmVyVGV4dCA9ICdMYWJlbCAnICsgaTsKKyAgICAgICAgbGFiZWxzLnB1c2gobGFiZWwp
OworICAgICAgICBsYWJlbENvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CisKKyAgICAgICAg
dmFyIGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgICAgICBj
b250cm9sLnR5cGUgPSAndGV4dCc7CisgICAgICAgIGNvbnRyb2wuaWQgPSAnYycgKyBpOworICAg
ICAgICBjb250cm9scy5wdXNoKGNvbnRyb2wpOworICAgICAgICBjb250cm9sQ29udGFpbmVyLmFw
cGVuZENoaWxkKGNvbnRyb2wpOworICAgIH0KKworICAgIC8vIEdldCB0aGUgYWNjZXNzaWJpbGl0
eSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgY29udHJvbCBjb250YWluZXIuCisgICAgdmFy
IGF4Q29udHJvbENvbnRhaW5lciA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVF
bGVtZW50QnlJZCgnY29udHJvbENvbnRhaW5lcicpOworICAgIHNob3VsZEJlKCJheENvbnRyb2xD
b250YWluZXIuY2hpbGRyZW5Db3VudCIsICIiICsgY291bnQpOworCisgICAgLy8gTm93IGFkZCBt
b3JlIGp1bmsgdG8gdGhlIHBhZ2UuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGl0bGVVSUVs
ZW1lbnQgZG9lc24ndCB0YWtlCisgICAgLy8gdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJl
ciBvZiBET00gZWxlbWVudHMgb24gdGhlIHBhZ2UgYW55bW9yZS4KKyAgICBmb3IgKGkgPSAwOyBp
IDwgMTAwMDA7IGkrKykgeworICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworICAgICAgZGl2LmlubmVySFRNTCA9ICI8cD48L3A+PHA+PC9wPjxwPjwvcD48cD48
L3A+PHA+PC9wPiI7CisgICAgICBqdW5rQ29udGFpbmVyLmFwcGVuZENoaWxkKGRpdik7CisgICAg
fQorCisgICAgLy8gU2F2ZSB0aGUgdG90YWwgdGltZSB0byBidWlsZCB0aGUgRE9NLgorICAgIHZh
ciBtaWRUaW1lID0gbmV3IERhdGUoKTsKKyAgICB2YXIgYnVpbGRUaW1lID0gbWlkVGltZSAtIHN0
YXJ0VGltZTsKKworICAgIC8vIE5vdyBjYWxsIHRpdGxlVUlFbGVtZW50IG9uIGVhY2ggY29udHJv
bCwgYW5kIGNoZWNrIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcmVzdWx0LgorICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICB2YXIgYXhDb250cm9sID0gYXhDb250
cm9sQ29udGFpbmVyLmNoaWxkQXRJbmRleChpKTsKKyAgICAgICAgdmFyIGF4VGl0bGVVSUVsZW1l
bnQgPSBheENvbnRyb2wudGl0bGVVSUVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFheFRpdGxlVUlF
bGVtZW50KSB7CisgICAgICAgICAgICBkZWJ1ZygiRkFJTDogY29udHJvbCAiICsgaSArICIgaGFz
IG5vIHRpdGxlVUlFbGVtZW50LiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIHRpdGxlID0gYXhUaXRsZVVJRWxlbWVudC5jaGlsZEF0SW5kZXgoMCkuc3RyaW5n
VmFsdWU7CisgICAgICAgIGlmICghZW5kc1dpdGgodGl0bGUsICJMYWJlbCAiICsgaSkpIHsKKyAg
ICAgICAgICAgIGRlYnVnKCJGQUlMOiBjb250cm9sICIgKyBpICsgIiB0aXRsZVVJRWxlbWVudCB2
YWx1ZSBpcyAnIiArCisgICAgICAgICAgICAgICAgICB0aXRsZSArICInICwgZXhwZWN0aW5nIGl0
IHRvIGVuZCB3aXRoICdMYWJlbCAiICsgaSArICInIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIE1lYXN1cmUgdGhlIHRpbWUgaXQgdG9vayB0byBjYWxs
IHRpdGxlVUlFbGVtZW50IG9uIGVhY2ggY29udHJvbAorICAgIHZhciBlbmRUaW1lID0gbmV3IERh
dGUoKTsKKyAgICB2YXIgdGl0bGVVSUVsZW1lbnRUaW1lID0gZW5kVGltZSAtIG1pZFRpbWU7CisK
KyAgICAvLyBJZiB0aGlzIGlzIHdvcmtpbmcgY29ycmVjdGx5LCBpdCBzaG91bGQgdGFrZSAoc2ln
bmlmaWNhbnRseSkgbGVzcworICAgIC8vIHRpbWUgdG8gcXVlcnkgdGl0bGVVSUVsZW1lbnQgb24g
YWxsIG9mIHRoZSBjb250cm9scyB0aGFuIHRoZSB0aW1lCisgICAgLy8gdG8gYnVpbGQgdGhlIHBh
Z2UgRE9NLiBXaXRoIHRoZSBwcmV2aW91cyBPKG4pIGFsZ29yaXRobSBmb3IKKyAgICAvLyB0aXRs
ZVVJRWxlbWVudCwgaXQgdG9vayBzaWduaWZpY2FudGx5IGxvbmdlci4KKyAgICBpZiAodGl0bGVV
SUVsZW1lbnRUaW1lIDwgYnVpbGRUaW1lKSB7CisgICAgICBkZWJ1ZygiUEFTUyBRdWVyaWVkIHRp
dGxlVUlFbGVtZW50IGluIGxlc3MgdGltZSB0aGFuIGl0IHRvb2sgdG8gYnVpbGQgdGhlIERPTS4i
KTsKKyAgICB9IGVsc2UgeworICAgICAgZGVidWcoIkZBSUwgVG9vayAiICsgYnVpbGRUaW1lICsg
IiBtcyB0byBidWlsZCB0aGUgRE9NIGFuZCAiICsKKyAgICAgICAgICAgIHRpdGxlVUlFbGVtZW50
VGltZSArICIgbXMgdG8gcXVlcnkgdGl0bGVVSUVsZW1lbnQgb24gZWFjaCBjb250cm9sLiIpOwor
ICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgbGFiZWxzIGZyb20gdGhlIHBhZ2Ugc28gdGhlIHRl
eHQgZHVtcCBvZiB0aGUgcGFnZSBpc24ndCBnaWdhbnRpYy4KKyAgICBsYWJlbENvbnRhaW5lci5p
bm5lckhUTUwgPSAiIjsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
N2RhYWJkYmNmZWNlNGE4YzI5YWU2MjBmZjI5MzRiYmIyZDY3YmI0NS4uYzA4M2M0YmM3MGE2ODQy
NTE2NDI0M2NmN2QzMjMwNzY1ZThmNDY1MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMzQ1LDcgKzEzNDUsNiBAQCBjcmJ1Zy5jb20v
MTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWFjdGl2ZWRlc2NlbmRhbnQtY3Jhc2guaHRtbCBbIFNr
aXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1jb21ib2JveC5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWNvbnRyb2xzLXdpdGgt
dGFicy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWZh
bGxiYWNrLXJvbGVzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5
L2FyaWEtaGlkZGVuLXVwZGF0ZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNz
aWJpbGl0eS9hcmlhLWludmFsaWQuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vz
c2liaWxpdHkvYXJpYS1sYWJlbGxlZGJ5LW92ZXJyaWRlcy1sYWJlbC5odG1sIFsgU2tpcCBdCiBj
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWxpbmstc3VwcG9ydHMtcHJlc3MuaHRt
bCBbIFNraXAgXQpAQCAtMTM3MCwxNCArMTM2OSwxMSBAQCBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNz
aWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvbGVnZW5kLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nl
c3NpYmlsaXR5L2xpc3RzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmls
aXR5L21lZGlhLWVsZW1lbnQuaHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIyIGFjY2Vzc2li
aWxpdHkvbm9uLWRhdGEtdGFibGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwgWyBTa2lwIF0K
IGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRtbCBbIFNr
aXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbCBbIFNr
aXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGx1Z2luLmh0bWwgWyBTa2lwIF0K
IGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1jaGVja2JveC1zaXpl
Lmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRv
bi1ncm91cC1tZW1iZXJzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmls
aXR5L3JhZGlvLWJ1dHRvbi10aXRsZS1sYWJlbC5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwgWyBTa2lwIF0K
IGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWF0dHJpYnV0ZXMuaHRtbCBbIFNr
aXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbC1zcGFucy5odG1s
IFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1jZWxscy5odG1s
IFsgU2tpcCBdCkBAIC0xMzg2LDcgKzEzODIsNiBAQCBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJp
bGl0eS90YWJsZS1vbmUtY2VsbC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNz
aWJpbGl0eS90YWJsZS1zZWN0aW9ucy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS90YWJsZS13aXRoLWFyaWEtcm9sZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20v
MTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS13aXRoLXJ1bGVzLmh0bWwgWyBTa2lwIF0KLWNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RoLWFzLXRpdGxlLXVpLmh0bWwgWyBTa2lwIF0KIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RyYW5zZm9ybWVkLWVsZW1lbnQuaHRtbCBbIFNr
aXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdmlzaWJsZS1lbGVtZW50cy5odG1s
IFsgU2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166314</attachid>
            <date>2012-09-28 14:49:35 -0700</date>
            <delta_ts>2012-09-30 23:43:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20120928144851.patch</filename>
            <type>text/plain</type>
            <size>30505</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5ODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTM5ZDcwZDg5Yzk5NTkz
YzYxZjVmN2ZjMTM4OTc5MDNjZjNkMTljYS4uMDZmOWYzMzYxYWFiYjM3ZjAxMGNlNmU5MzYwYWI4
MDkwY2UxMTM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA5LTI4ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG5ldyBh
Y2Nlc3NpYmlsaXR5IGNhY2hlIHRoYXQgbWFwcyBpZHMgdG8gbGFiZWwgZWxlbWVudHMKKyAgICAg
ICAgdGhhdCBsYWJlbCB0aGF0IGlkLiBUaGUgY2FjaGUgaXMgYnVpbHQgdGhlIGZpcnN0IHRpbWUg
aXQncworICAgICAgICBxdWVyaWVkIChwZXIgZG9jdW1lbnQpLCBhbmQgdGhlbiB1cGRhdGVkIGV2
ZXJ5IHRpbWUgYSBsYWJlbAorICAgICAgICBlbGVtZW50IG9uIHRoZSBwYWdlIGlzIGNyZWF0ZWQs
IGRlbGV0ZWQsIG9yIG1vZGlmaWVkLgorICAgICAgICBUaGlzIGFsbG93cyBmb3IgdmVyeSBmYXN0
IGxvb2t1cCBvZiB0aGUgbGFiZWwgZm9yIGFueSBlbGVtZW50LgorCisgICAgICAgIFRlc3RzOiBh
Y2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAg
ICAgICAgYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUxhYmVsRWxlbWVudEZvcklkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmRvY3VtZW50RGVzdHJveWVkKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
Ojp1cGRhdGVMYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpkb2N1bWVudERlc3Ryb3llZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuaDoKKyAgICAgICAgKEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTExhYmVsRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50Ojp3aWxsTW9kaWZ5
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExh
YmVsRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMYWJlbEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuaDoK
KyAgICAgICAgKEhUTUxMYWJlbEVsZW1lbnQpOgorCiAyMDEyLTA5LTI3ICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMTI5ODA2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKaW5kZXggNmMwOGJlMjFmMGUzMTY3MTI3YWIzZjJiNGI5NTdmOWI0ZWJjZjgy
My4uODFjNzhjNDBjODZhZWI2OGVjZWQ0MDM5OGYwYTcwNjNiMGQ1N2NjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC02MCwxMCArNjAs
MTIgQEAKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxM
YWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpZiBFTkFCTEUoVklERU8p
CiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNlbmRpZgorI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIK
ICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtNzYsNiArNzgsNyBAQAogI2luY2x1ZGUg
IlNjcm9sbFZpZXcuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk5LDYg
KzEwMiw4IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKICAgICAgICAgb2JqLT5k
ZXRhY2goKTsKICAgICAgICAgcmVtb3ZlQVhJRChvYmopOwogICAgIH0KKyAgICBmb3IgKEhhc2hN
YXA8RG9jdW1lbnQqLCBIYXNoTWFwPFN0cmluZywgSFRNTExhYmVsRWxlbWVudCo+KiA+OjppdGVy
YXRvciBpdCA9IG1faWRUb0xhYmVsTWFwcGluZy5iZWdpbigpOyBpdCAhPSBtX2lkVG9MYWJlbE1h
cHBpbmcuZW5kKCk7ICsraXQpCisgICAgICAgIGRlbGV0ZSAoKml0KS5zZWNvbmQ7CiB9CiAKIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVu
dChIVE1MQXJlYUVsZW1lbnQqIGFyZWFFbGVtZW50KQpAQCAtNjc2LDYgKzY4MSw0MyBAQCB2b2lk
IEFYT2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50Tm90aWZpY2F0aW9uKEZyYW1lKiBmcmFt
ZSwgQVhMb2FkaW5nRXZlbnQgbAogICAgIGZyYW1lTG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmlj
YXRpb24ob2JqLCBsb2FkaW5nRXZlbnQpOwogfQogCitIVE1MTGFiZWxFbGVtZW50KiBBWE9iamVj
dENhY2hlOjpsYWJlbEVsZW1lbnRGb3JJZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQpCit7CisgICAgaWYgKCFtX2lkVG9MYWJlbE1hcHBpbmcuY29udGFpbnMoZG9j
dW1lbnQpKSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIVE1MTGFiZWxFbGVtZW50Kj4qIGRv
Y3VtZW50TWFwcGluZyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSFRNTExhYmVsRWxlbWVudCo+KCk7
CisgICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IGRvY3VtZW50LT5nZXRFbGVtZW50c0J5
VGFnTmFtZSgibGFiZWwiKTsKKyAgICAgICAgdW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAg
ICAgaWYgKGxpc3QtPml0ZW0oaSktPmhhc1RhZ05hbWUobGFiZWxUYWcpKSB7CisgICAgICAgICAg
ICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVt
ZW50Kj4obGlzdC0+aXRlbShpKSk7CisgICAgICAgICAgICAgICAgaWYgKGxhYmVsLT5oYXNBdHRy
aWJ1dGUoZm9yQXR0cikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBjb250cm9sSWQgPSBsYWJlbC0+Z2V0QXR0cmlidXRlKGZvckF0dHIpOworICAgICAgICAgICAg
ICAgICAgICBkb2N1bWVudE1hcHBpbmctPnNldChjb250cm9sSWQuc3RyaW5nKCksIGxhYmVsKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9p
ZFRvTGFiZWxNYXBwaW5nLmFkZChkb2N1bWVudCwgZG9jdW1lbnRNYXBwaW5nKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbV9pZFRvTGFiZWxNYXBwaW5nLmdldChkb2N1bWVudCktPmdldChpZCk7Cit9
CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlTGFiZWxFbGVtZW50Rm9ySWQoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBIVE1MTGFiZWxFbGVtZW50KiBsYWJl
bEVsZW1lbnQpCit7CisgICAgaWYgKCFtX2lkVG9MYWJlbE1hcHBpbmcuY29udGFpbnMoZG9jdW1l
bnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lkVG9MYWJlbE1hcHBpbmcuZ2V0KGRvY3Vt
ZW50KS0+c2V0KGlkLCBsYWJlbEVsZW1lbnQpOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmRv
Y3VtZW50RGVzdHJveWVkKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAobV9pZFRvTGFi
ZWxNYXBwaW5nLmNvbnRhaW5zKGRvY3VtZW50KSkgeworICAgICAgICBkZWxldGUgbV9pZFRvTGFi
ZWxNYXBwaW5nLmdldChkb2N1bWVudCk7CisgICAgICAgIG1faWRUb0xhYmVsTWFwcGluZy5yZW1v
dmUoZG9jdW1lbnQpOworICAgIH0KK30KKwogdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVTY3Jv
bGxiYXJVcGRhdGUoU2Nyb2xsVmlldyogdmlldykKIHsKICAgICBpZiAoIXZpZXcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IDhmMGY3NjU2Nzk5
ZDMxMDc5ZWE2MTgyM2ZmNTZmNTExMGUyYzI3ZTcuLmNkOTk4ZTUzMTVhMTlmZTYxZjU2NzJiNTlk
MGQ3YmY5Mzk0M2EzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RG9jdW1lbnQ7CiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQ7CitjbGFzcyBIVE1MTGFiZWxFbGVtZW50
OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CkBAIC0xNzYs
NiArMTc3LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0
IEF0b21pY1N0cmluZyYgcm9sZSk7CiAKKyAgICAvLyBUaGUgZmlyc3QgdGltZSBsYWJlbEVsZW1l
bnRGb3JJZCBpcyBjYWxsZWQsIGEgY2FjaGUgZnJvbSBpZCB0bworICAgIC8vIGxhYmVsIGVsZW1l
bnQgaXMgYnVpbHQuIFRoaXMgY2FjaGUgaXMgdXBkYXRlZCBldmVyeSB0aW1lIGEgTGFiZWwKKyAg
ICAvLyBlbGVtZW50IGlzIGNyZWF0ZWQsIGRlbGV0ZWQsIG9yIG1vZGlmaWVkLgorICAgIEhUTUxM
YWJlbEVsZW1lbnQqIGxhYmVsRWxlbWVudEZvcklkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3Ry
aW5nJik7CisgICAgdm9pZCB1cGRhdGVMYWJlbEVsZW1lbnRGb3JJZChEb2N1bWVudCosIGNvbnN0
IEF0b21pY1N0cmluZyYgaWQsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAgICB2b2lkIGRvY3VtZW50
RGVzdHJveWVkKERvY3VtZW50Kik7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHBvc3RQbGF0Zm9y
bU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhOb3RpZmljYXRpb24pOwogICAg
IHZvaWQgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiwgQVhUZXh0Q2hhbmdlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYpOwpAQCAt
MTk4LDYgKzIwNiwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIEhhc2hTZXQ8QVhJRD4gbV9pZHNJ
blVzZTsKICAgICAKKyAgICAvLyBUaGlzIG1hcHBpbmcgZW5hYmxlcyBmYXN0IGxvb2t1cHMgb2Yg
PGxhYmVsIGZvcj0iaWQiPiBnaXZlbiB0aGUgaWQgb2YgdGhlCisgICAgLy8gbm9kZSBpdCByZWZl
cmVuY2VzIGluIGl0cyAiZm9yIiBhdHRyaWJ1dGUuIFRoZSBtYXBwaW5nIGlzIGluaXRpYWxpemVk
CisgICAgLy8gZm9yIGVhY2ggZG9jdW1lbnQgd2hlbiBsYWJlbEVsZW1lbnRGb3JJZCBpcyBjYWxs
ZWQsIHRoZW4gdXBkYXRlZAorICAgIC8vIGV2ZXJ5IHRpbWUgYSBsYWJlbCBlbGVtZW50IGlzIGFk
ZGVkIG9yIGNoYW5nZWQgZnJvbSB0aGVuIG9uLgorICAgIEhhc2hNYXA8RG9jdW1lbnQqLCBIYXNo
TWFwPFN0cmluZywgSFRNTExhYmVsRWxlbWVudCo+KiA+IG1faWRUb0xhYmVsTWFwcGluZzsKKwog
ICAgIFRpbWVyPEFYT2JqZWN0Q2FjaGU+IG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyOwogICAgIFZl
Y3RvcjxwYWlyPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiwgQVhOb3RpZmljYXRpb24+ID4g
bV9ub3RpZmljYXRpb25zVG9Qb3N0OwogICAgIHZvaWQgbm90aWZpY2F0aW9uUG9zdFRpbWVyRmly
ZWQoVGltZXI8QVhPYmplY3RDYWNoZT4qKTsKQEAgLTIzNSw2ICsyNDksOSBAQCBpbmxpbmUgdm9p
ZCBBWE9iamVjdENhY2hlOjp1cGRhdGVDYWNoZUFmdGVyTm9kZUlzQXR0YWNoZWQoTm9kZSopIHsg
fQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGV0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5
T2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdFdmVu
dE5vdGlmaWNhdGlvbihGcmFtZSosIEFYTG9hZGluZ0V2ZW50KSB7IH0KIGlubGluZSB2b2lkIEFY
T2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNz
aWJpbGl0eU9iamVjdCosIEFYTG9hZGluZ0V2ZW50KSB7IH0KK2lubGluZSBIVE1MTGFiZWxFbGVt
ZW50KiBBWE9iamVjdENhY2hlOjpsYWJlbEVsZW1lbnRGb3JJZChEb2N1bWVudCosIGNvbnN0IEF0
b21pY1N0cmluZyYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlTGFiZWxF
bGVtZW50Rm9ySWQoRG9jdW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBIVE1MTGFiZWxF
bGVtZW50KikgeyB9CitpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkb2N1bWVudERlc3Ryb3ll
ZChEb2N1bWVudCopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQWN0aXZl
RGVzY2VuZGFudENoYW5nZWQoTm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUFyaWFSb2xlQ2hhbmdlZChOb2RlKikgeyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCmlu
ZGV4IDBmOTQ4MzhlN2VjNTVhOTY5ZWRiMWU4MDUwMDAzOTc1ZDdlZWNjMTMuLmFmZTFmNzVjNGE4
M2I3Y2ZhNDViNjBkODM4YjIwOWM5ZTdmZmI2MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCkBAIC0xMDAx
LDE0ICsxMDAxLDE0IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzR2VuZXJpY0Zv
Y3VzYWJsZUVsZW1lbnQoKSBjb25zdAogCiBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0g
ICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dHNCeVRhZ05hbWUoImxhYmVsIik7Ci0gICAgdW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChs
aXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgewotICAgICAgICAgICAgSFRNTExh
YmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obGlzdC0+
aXRlbShpKSk7Ci0gICAgICAgICAgICBpZiAobGFiZWwtPmNvbnRyb2woKSA9PSBlbGVtZW50KQot
ICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbDsKLSAgICAgICAgfQorICAgIGlmIChlbGVtZW50
LT5oYXNBdHRyaWJ1dGUoaWRBdHRyKSkgeworICAgICAgICBpZiAoSFRNTExhYmVsRWxlbWVudCog
cmVzdWx0ID0gYXhPYmplY3RDYWNoZSgpLT5sYWJlbEVsZW1lbnRGb3JJZChlbGVtZW50LT5kb2N1
bWVudCgpLCBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSkpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGZvciAoRWxlbWVudCogcGFyZW50ID0gZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgp
KSB7CisgICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUobGFiZWxUYWcpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihwYXJlbnQpOwogICAgIH0K
IAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMDBkZTBlNzY4Mzg4
ZWM5MzgwMGI0ZjdhZTY4ODQ1ODMzYmEyMjFlNy4uZDYzNjlhYjA5MzIyZDFhNDQ5YzcwMjQ2ZDcx
Yzc1Y2ZmNjA0ZmUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02MjksNiArNjI5LDkg
QEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAKICAgICBtX3JlbmRlckFyZW5hLmNsZWFyKCk7CiAK
KyAgICBpZiAodG9wRG9jdW1lbnQoKSAhPSB0aGlzICYmIHRvcERvY3VtZW50KCktPm1fYXhPYmpl
Y3RDYWNoZSkKKyAgICAgICAgdG9wRG9jdW1lbnQoKS0+bV9heE9iamVjdENhY2hlLT5kb2N1bWVu
dERlc3Ryb3llZCh0aGlzKTsKKwogICAgIGNsZWFyQVhPYmplY3RDYWNoZSgpOwogCiAgICAgbV9k
ZWNvZGVyID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDBjZDIwOWRmODJkMDc0NjMyNmJhOTY0
N2RlMmM0MjQ4MDZiNmYwZTUuLmUxOTNkMjhlMmM4YmM5ZjY1YzhkMzRhMDQ2NzliYzcwNWFhODNh
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMzE1LDcgKzMxNSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHVwZGF0ZUlkKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmV3SWQpOwogICAgIHZvaWQgdXBkYXRlTmFtZShjb25zdCBBdG9taWNT
dHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSk7CiAKLSAgICB2b2lk
IHdpbGxNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOworICAgIHZpcnR1
YWwgdm9pZCB3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBB
dG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKICAg
ICB2b2lkIHdpbGxSZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgZGlkQWRkQXR0cmlidXRlKGNvbnN0IEF0dHJp
YnV0ZSYpOwogICAgIHZvaWQgZGlkTW9kaWZ5QXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKaW5kZXggMjQyZmIwY2JkMzZl
NjdjYjZiZmE4NTQ3Yzk3ZjU5ZTc3NDhlMzFkZi4uYTY1MmFlMDI5NzUyYjM4MTZhZGRiNGUyNzYw
NzAwZGI0YjZiN2IwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3Bw
CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTExh
YmVsRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBA
IC0xNTUsNiArMTU2LDMxIEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudDo6d2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKQogICAgIHJldHVybiBIVE1MRWxlbWVudDo6d2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKTsKIH0KIAordm9pZCBIVE1MTGFiZWxFbGVtZW50Ojp3aWxsTW9kaWZ5
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
b2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCit7CisgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgbmFtZSA9PSBmb3JBdHRyICYmIGF0
dGFjaGVkKCkpIHsKKyAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnVwZGF0ZUxhYmVsRWxlbWVudEZvcklkKGRv
Y3VtZW50KCksIG9sZFZhbHVlLCAwKTsKKyAgICAgICAgaWYgKCFuZXdWYWx1ZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnVwZGF0ZUxhYmVsRWxl
bWVudEZvcklkKGRvY3VtZW50KCksIG5ld1ZhbHVlLCB0aGlzKTsKKyAgICB9CisgICAgSFRNTEVs
ZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKK30K
KworTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MTGFiZWxFbGVtZW50Ojpp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCit7CisgICAgaWYgKEFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgaGFzQXR0cmlidXRlKGZvckF0
dHIpKQorICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnVwZGF0ZUxhYmVsRWxl
bWVudEZvcklkKGRvY3VtZW50KCksIGdldEF0dHJpYnV0ZShmb3JBdHRyKSwgdGhpcyk7CisgICAg
cmV0dXJuIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworfQorCit2
b2lkIEhUTUxMYWJlbEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlv
blBvaW50KQoreworICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
ICYmIGhhc0F0dHJpYnV0ZShmb3JBdHRyKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RD
YWNoZSgpLT51cGRhdGVMYWJlbEVsZW1lbnRGb3JJZChkb2N1bWVudCgpLCBnZXRBdHRyaWJ1dGUo
Zm9yQXR0ciksIDApOworICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2lu
dCk7Cit9CisKIHZvaWQgSFRNTExhYmVsRWxlbWVudDo6Zm9jdXMoYm9vbCkKIHsKICAgICAvLyB0
byBtYXRjaCBvdGhlciBicm93c2VycywgYWx3YXlzIHJlc3RvcmUgcHJldmlvdXMgc2VsZWN0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5oCmluZGV4IGY0OGM2ODA1ZTQ5MWFk
NmU4MDQ5OTRmNmI2Y2U3OTZiOGE5NmZlZmEuLjZmZTg1MjQzZWQzN2FmNjY2MThmZjYyOGMyOGY0
M2ViYWU0OGNlYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5oCkBAIC0z
OCw2ICszOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01v
dXNlQ2xpY2tFdmVudHMoKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW9kaWZ5
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZh
bHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5l
ck5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVy
Tm9kZSopIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIEhUTUxMYWJlbEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyN2IzNDg4YWQ2ZDYxYjE5MGFkZmE5ZmIxOGRhODU4
N2M2YmEwZmIzLi41Njg2NDRlNWQ4NGVkODdkNzU0MjVkODg3NDAzNzZlNWMxMmQ4YTZmIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMTItMDktMjggIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+
CisKKyAgICAgICAgQVg6IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdoZW4gdGhlcmUgYXJlIGEg
bG90IG9mIERPTSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTc4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnQgdGl0bGVVSUVsZW1lbnQgaW4gdGhlIGNocm9taXVtIHBvcnQg
b2YgRFJULCBhbmQKKyAgICAgICAgZml4IGdldEFjY2Vzc2libGVFbGVtZW50QnlJZCBzbyB0aGF0
IGl0IGVuc3VyZXMgdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaXMgdXAtdG8tZGF0ZS4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKToK
KwogMjAxMi0wOS0yNyAgTmFza28gT3Nrb3YgIDxuYXNrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgTW92ZSBEdW1wUmVuZGVyVHJlZSB0byB1c2UgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgbmFtZSBt
ZXRob2Qgb2YKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21p
dW0uY3BwCmluZGV4IDg5ZDVkNTg3NzBjNjFkMWFhZTkxNjBiYTM0ZTQzNjc2NTE2YjA3YzIuLjBm
ZTRjMWY5OWU0NTk2ZDJkOGQ3NDc4YjIxMWYzOWU2NWJmZjM3NjggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcApAQCAtMTE3LDYgKzExNyw5
IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRB
Y2Nlc3NpYmxlRWxlbWVudEJ5SWQoY29uc3QKICAgICBpZiAobV9yb290RWxlbWVudC5pc051bGwo
KSkKICAgICAgICAgbV9yb290RWxlbWVudCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVj
dCgpOwogCisgICAgaWYgKCFtX3Jvb3RFbGVtZW50LnVwZGF0ZUJhY2tpbmdTdG9yZUFuZENoZWNr
VmFsaWRpdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZmluZEFjY2Vzc2li
bGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShtX3Jvb3RFbGVtZW50LCBXZWJTdHJpbmc6OmZyb21VVEY4
KGlkLmNfc3RyKCkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Q2hyb21pdW0uY3BwCmluZGV4IGI3OTVhZWI4Mzc0MDRjNGU1ODhiZGJhZTM2M2U1ODI5NjA5
OWE0MjUuLmVmOWZhNTBjNzA3NGVlYzdkZDExZjRmNTU5NzVhN2MzZTg2Y2Y4ZTcgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudENocm9taXVtLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKQEAgLTczNCw3
ICs3MzQsMTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5k
Um93Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwKIAogdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0IG9iaiA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS50aXRsZVVJRWxl
bWVudCgpOworICAgIGlmIChvYmouaXNOdWxsKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXN1bHQtPnNldCgqKG1fZmFjdG9y
eS0+Z2V0T3JDcmVhdGUob2JqKS0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKKwogfQogCiB2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JmFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGNk
ZmMxZWMzNTgyYWFlMzlhMGEwOThiMDU0MGFmZTdjZmQ0YTMzMTkuLmU5ZTYwN2I3N2YyMTBkNTFm
YzgwODA0MzJhNWUxYmEwOGQ1MGMxZTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wOS0y
OCAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDog
bGFiZWxGb3JFbGVtZW50IGlzIHNsb3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1l
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzgy
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMg
dHdvIG5ldyB0ZXN0cyBmb3IgdGl0bGVVSUVsZW1lbnQgdGhhdCBydW4gb24gYm90aCBNYWMgYW5k
CisgICAgICAgIENocm9taXVtLiBPbmUgdGVzdHMgY29ycmVjdG5lc3MsIHRoZSBvdGhlciB0ZXN0
cyBzcGVlZC4KKworICAgICAgICBUaGUgdGVzdCBmb3IgdGl0bGVVSUVsZW1lbnQgc3BlZWQgaXMg
Y2FyZWZ1bGx5IGRlc2lnbmVkIHNvIHRoYXQKKyAgICAgICAgaXQgZmFpbHMgd2l0aG91dCB0aGlz
IHBhdGNoIGFuZCBwYXNzZXMgd2l0aCBpdCwgd2hpbGUgc3RpbGwKKyAgICAgICAgYmVpbmcgcm9i
dXN0IHRvIGRpZmZlcmVuY2VzIGluIGNwdSBzcGVlZCwgcGxhdGZvcm0sIGV0Yy4gLSBlc3NlbnRp
YWxseQorICAgICAgICBpdCBjb21wYXJlcyB0aGUgc3BlZWQgb2YgZG9pbmcgYSBsYXJnZSBudW1i
ZXIgb2YgY2FsbHMgdG8gdGl0bGVVSUVsZW1lbnQKKyAgICAgICAgdG8gdGhlIHRpbWUgaXQgdGFr
ZXMgdG8gYnVpbGQgdGhlIERPTSBvZiBhIHBhZ2UsIGZvciBhIHJlbGF0aXZlbHkKKyAgICAgICAg
bGFyZ2UgcGFnZSB3aXRoIGxvdHMgb2YgRE9NIGVsZW1lbnRzLiBJdCBlbnN1cmVzIHRoYXQgdGl0
bGVVSUVsZW1lbnQKKyAgICAgICAgZG9lc24ndCBuZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBET00g
dG8gbG9vayBmb3IgbGFiZWwgZWxlbWVudHMuCisKKyAgICAgICAgRml4ZXMgb25lIHRlc3Qgc28g
dGhhdCBpdCBwYXNzZXMgb24gQ2hyb21pdW0uCisgICAgICAgIEVuYWJsZXMgb3RoZXIgdGVzdHMg
dGhhdCBub3cgcGFzcyBvbiBDaHJvbWl1bS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Vj
dXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0
bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3Bl
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0
aW9uczoKKwogMjAxMi0wOS0yNyAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIERlbGV0ZSB0ZXN0IHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIGIv
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwK
aW5kZXggMTcwZTU3MDFhMDQ1ODVkYzAxZTg2YWM2NzliMWUzNDMwODE2M2YxOS4uMTJmODFlMzM4
ZGNhOGI1ZjE0ZjAxYjg4MjY4Y2RmNmIyOWZmMjE1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKQEAgLTIx
LDggKzIxLDcgQEAKICAgICAgICAgICAgIHBhc3MuZm9jdXMoKTsKICAgICAgICAgICAgIHZhciB0
aXRsZVVJRWxlbWVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnRp
dGxlVUlFbGVtZW50KCk7CiAgICAgICAgICAgICB2YXIgdGl0bGVUZXh0ID0gdGl0bGVVSUVsZW1l
bnQuY2hpbGRBdEluZGV4KDApOwotICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSAiQVhWYWx1ZTog
UGFzc3dvcmQiOwotICAgICAgICAgICAgaWYgKHRpdGxlVGV4dC5hbGxBdHRyaWJ1dGVzKCkuaW5k
ZXhPZihwYXR0ZXJuKSAhPSAtMSkgeworICAgICAgICAgICAgaWYgKHRpdGxlVGV4dC5zdHJpbmdW
YWx1ZSA9PSAiQVhWYWx1ZTogUGFzc3dvcmQiKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lmlu
bmVyVGV4dCArPSAiVGVzdCBwYXNzZWRcbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBl
bHNlIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxl
bWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0
YWI2YjU4MjdlZWE5NmM1MDJjYTNkMDI4MWIzNDdkNTY5MDA3MDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3Mt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0xhYmVsIDEgIAorTGFiZWwgMiAgCitMYWJl
bCAzICAKKworTGFiZWwgNSAgCitUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3Mg
Y29ycmVjdGx5IGV2ZW4gd2hlbiB0aGluZ3MgY2hhbmdlIGR5bmFtaWNhbGx5LgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBjb250cm9sMS50aXRsZVVJRWxlbWVudCgpLmlz
RXF1YWwobGFiZWwxKSBpcyB0cnVlCitQQVNTIGNvbnRyb2wyLnRpdGxlVUlFbGVtZW50KCkuaXNF
cXVhbChsYWJlbDIpIGlzIHRydWUKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDMpIGlz
IGZhbHNlCitQQVNTIGNvbnRyb2wzLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDMpIGlz
IHRydWUKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDQpIGlzIGZhbHNlCitQQVNTIGhh
c1RpdGxlVUlFbGVtZW50KGNvbnRyb2w0KSBpcyB0cnVlCitQQVNTIGNvbnRyb2w0LnRpdGxlVUlF
bGVtZW50KCkuaXNFcXVhbChsYWJlbDQpIGlzIHRydWUKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQo
Y29udHJvbDQpIGlzIGZhbHNlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w1KSBpcyBm
YWxzZQorUEFTUyBjb250cm9sNS50aXRsZVVJRWxlbWVudCgpICE9IG51bGwgaXMgdHJ1ZQorUEFT
UyBjb250cm9sNS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWw1KSBpcyB0cnVlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVj
dG5lc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTQ4ZDA1NDVhNTA1ZGVjZDZiMjk3MGU5YjBjZWVjNzRm
YmU5ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRs
ZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9ImNvbnRhaW5lciI+CisKKyAg
PGRpdj4KKyAgICA8bGFiZWwgaWQ9ImwxIiBmb3I9ImMxIj5MYWJlbCAxPC9sYWJlbD4KKyAgICA8
aW5wdXQgaWQ9ImMxIiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8bGFi
ZWwgaWQ9ImwyIj4KKyAgICAgIExhYmVsIDIKKyAgICAgIDxpbnB1dCBpZD0iYzIiIHR5cGU9InRl
eHQiPgorICAgIDwvbGFiZWw+CisgIDwvZGl2PgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJs
MyI+TGFiZWwgMzwvbGFiZWw+CisgICAgPGlucHV0IGlkPSJjMyIgdHlwZT0idGV4dCI+CisgIDwv
ZGl2PgorCisgIDxkaXY+CisgICAgPGlucHV0IGlkPSJjNCIgdHlwZT0idGV4dCI+CisgIDwvZGl2
PgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsNSI+CisgICAgICBMYWJlbCA1CisgICAgPC9s
YWJlbD4KKyAgICA8aW5wdXQgaWQ9ImM1IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+Cis8L2Rpdj4K
KworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMg
dGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5n
cyBjaGFuZ2UgZHluYW1pY2FsbHkuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKworICAgIGZ1bmN0aW9uIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCkgeworICAgICAg
ICB2YXIgbGFiZWwxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJsMSIpOworICAgICAgICB2YXIgdGl0bGVVSUVsZW1lbnQgPSBheEVsZW1lbnQudGl0bGVV
SUVsZW1lbnQoKTsKKyAgICAgICAgaWYgKHRpdGxlVUlFbGVtZW50ID09IG51bGwpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0aXRsZVVJRWxlbWVudC5yb2xlID09
IGxhYmVsMS5yb2xlOworICAgIH0KKworICAgIHZhciBsYWJlbDEgPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImwxIik7CisgICAgdmFyIGNvbnRyb2wxID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjMSIpOworICAg
IHNob3VsZEJlKCJjb250cm9sMS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWwxKSIsICJ0
cnVlIik7CisKKyAgICB2YXIgbGFiZWwyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJsMiIpOworICAgIHZhciBjb250cm9sMiA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiYzIiKTsKKyAgICBzaG91bGRCZSgiY29u
dHJvbDIudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsMikiLCAidHJ1ZSIpOworCisgICAg
Ly8gVGVzdCBjaGFuZ2luZyB0aGUgImZvciIgYXR0cmlidXRlIGR5bmFtaWNhbGx5LgorICAgIHZh
ciBsYWJlbDMgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQo
ImwzIik7CisgICAgdmFyIGNvbnRyb2wzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJjMyIpOworICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChj
b250cm9sMykiLCAiZmFsc2UiKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibDMiKS5z
ZXRBdHRyaWJ1dGUoImZvciIsICJjMyIpOworICAgIHNob3VsZEJlKCJjb250cm9sMy50aXRsZVVJ
RWxlbWVudCgpLmlzRXF1YWwobGFiZWwzKSIsICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IHVuYXR0
YWNoZWQgbGFiZWwgZWxlbWVudCB0aGF0J3Mgc3Vic2VxdWVudGx5IGF0dGFjaGVkLgorICAgIHZh
ciBjb250cm9sNCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJ
ZCgiYzQiKTsKKyAgICB2YXIgbGFiZWw0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImxhYmVsIik7CisgICAgbGFiZWw0RWxlbWVudC5pZCA9ICJsNCI7CisgICAgbGFiZWw0RWxlbWVu
dC5zZXRBdHRyaWJ1dGUoImZvciIsICJjNCIpOworICAgIGxhYmVsNEVsZW1lbnQuaW5uZXJUZXh0
ID0gIkxhYmVsIDQiOworICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChjb250cm9sNCki
LCAiZmFsc2UiKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGFpbmVyIikuYXBw
ZW5kQ2hpbGQobGFiZWw0RWxlbWVudCk7CisKKyAgICB2YXIgbGFiZWw0ID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsNCIpOworICAgIHNob3VsZEJlKCJo
YXNUaXRsZVVJRWxlbWVudChjb250cm9sNCkiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJjb250
cm9sNC50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWw0KSIsICJ0cnVlIik7CisKKyAgICAv
LyBUZXN0IHdoYXQgaGFwcGVucyB3aGVuIHRoZSBsYWJlbCBpcyBkZXRhY2hlZC4KKyAgICBsYWJl
bDRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWw0RWxlbWVudCk7CisgICAg
c2hvdWxkQmUoImhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w0KSIsICJmYWxzZSIpOworCisgICAg
Ly8gVGVzdCBsYWJlbCB0aGF0IGdldHMgYSBjb250cm9sIHJlcGFyZW50ZWQgaW50byBpdC4KKyAg
ICB2YXIgY29udHJvbDUgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVu
dEJ5SWQoImM1Iik7CisgICAgc2hvdWxkQmUoImhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w1KSIs
ICJmYWxzZSIpOworCisgICAgdmFyIGNvbnRyb2w1RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjNSIpOworICAgIHZhciBsYWJlbDVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImw1Iik7CisgICAgY29udHJvbDVFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hp
bGQoY29udHJvbDVFbGVtZW50KTsKKyAgICBsYWJlbDVFbGVtZW50LmFwcGVuZENoaWxkKGNvbnRy
b2w1RWxlbWVudCk7CisKKyAgICBjb250cm9sNSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFj
Y2Vzc2libGVFbGVtZW50QnlJZCgiYzUiKTsKKyAgICBzaG91bGRCZSgiY29udHJvbDUudGl0bGVV
SUVsZW1lbnQoKSAhPSBudWxsIiwgInRydWUiKTsKKyAgICB2YXIgbGFiZWw1ID0gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsNSIpOworICAgIHNob3VsZEJl
KCJjb250cm9sNS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWw1KSIsICJ0cnVlIik7Cit9
CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI1MjA5YWY5NDFkMDVmYmUyYTcyN2EzNTA2OThjYTU3NzhiMDg5
YTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtc3BlZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKKworVGhpcyB0ZXN0
cyB0aGF0IHRpdGxlVUlFbGVtZW50IGRvZXNuJ3QgdGFrZSBhIHJpZGljdWxvdXNseSBsb25nIHRp
bWUgdG8gcnVuIHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIGxhYmVsIGVsZW1lbnRzIG9uIGEgcGFn
ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYXhDb250cm9sQ29udGFp
bmVyLmNoaWxkcmVuQ291bnQgaXMgNTAwCitQQVNTIFF1ZXJpZWQgdGl0bGVVSUVsZW1lbnQgaW4g
bGVzcyB0aW1lIHRoYW4gaXQgdG9vayB0byBidWlsZCB0aGUgRE9NLgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC5odG1sIGIvTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzRkZWVhYTI2MWYxODg5NDRhODQ5NGU3MDA3MTEzYjIyODc1NTc2ZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC5odG1s
CkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
Cis8ZGl2IGlkPSJsYWJlbENvbnRhaW5lciI+Cis8L2Rpdj4KKzxkaXYgaWQ9ImNvbnRyb2xDb250
YWluZXIiIGFyaWEtbGFiZWw9ImNvbnRyb2wgY29udGFpbmVyIj4KKzwvZGl2PgorPGRpdiBpZD0i
anVua0NvbnRhaW5lciIgaGlkZGVuPgorPC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQg
ZG9lc24ndCB0YWtlIGEgcmlkaWN1bG91c2x5IGxvbmcgdGltZSB0byBydW4gd2hlbiB0aGVyZSBh
cmUgYSBsb3Qgb2YgbGFiZWwgZWxlbWVudHMgb24gYSBwYWdlLiIpOworCitpZiAod2luZG93LnRl
c3RSdW5uZXIgJiYgd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgd2luZG93
LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCisgICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBz
dWZmaXgpIHsKKyAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIHN1ZmZpeC5s
ZW5ndGgpID09IHN1ZmZpeDsKKyAgICB9CisKKyAgICB2YXIgbGFiZWxDb250YWluZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWxDb250YWluZXInKTsKKyAgICB2YXIgY29udHJvbENv
bnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sQ29udGFpbmVyJyk7Cisg
ICAgdmFyIGp1bmtDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnanVua0NvbnRh
aW5lcicpOworCisgICAgdmFyIGxhYmVscyA9IFtdOworICAgIHZhciBjb250cm9scyA9IFtdOwor
CisgICAgdmFyIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBidW5j
aCBvZiBsYWJlbHMsIGVhY2ggb2YgdGhlIGZvcm06CisgICAgLy8gICA8bGFiZWwgZm9yPSdjMCc+
TGFiZWwgMDwvbGFiZWw+CisgICAgLy8gQ3JlYXRlIGNvcnJlc3BvbmRpbmcgY29udHJvbHMsIGVh
Y2ggb2YgdGhpcyBmb3JtOgorICAgIC8vICAgPGlucHV0IGlkPSdjMCcgdHlwZT0ndGV4dCc+Cisg
ICAgdmFyIGNvdW50ID0gNTAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
eworICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpOwor
ICAgICAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjJyArIGkpOworICAgICAgICBsYWJl
bC5pbm5lclRleHQgPSAnTGFiZWwgJyArIGk7CisgICAgICAgIGxhYmVscy5wdXNoKGxhYmVsKTsK
KyAgICAgICAgbGFiZWxDb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWwpOworCisgICAgICAgIHZh
ciBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICAgICAgY29u
dHJvbC50eXBlID0gJ3RleHQnOworICAgICAgICBjb250cm9sLmlkID0gJ2MnICsgaTsKKyAgICAg
ICAgY29udHJvbHMucHVzaChjb250cm9sKTsKKyAgICAgICAgY29udHJvbENvbnRhaW5lci5hcHBl
bmRDaGlsZChjb250cm9sKTsKKyAgICB9CisKKyAgICAvLyBHZXQgdGhlIGFjY2Vzc2liaWxpdHkg
b2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbnRyb2wgY29udGFpbmVyLgorICAgIHZhciBh
eENvbnRyb2xDb250YWluZXIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoJ2NvbnRyb2xDb250YWluZXInKTsKKyAgICBzaG91bGRCZSgiYXhDb250cm9sQ29u
dGFpbmVyLmNoaWxkcmVuQ291bnQiLCAiIiArIGNvdW50KTsKKworICAgIC8vIE5vdyBhZGQgbW9y
ZSBqdW5rIHRvIHRoZSBwYWdlLiBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHRpdGxlVUlFbGVt
ZW50IGRvZXNuJ3QgdGFrZQorICAgIC8vIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIg
b2YgRE9NIGVsZW1lbnRzIG9uIHRoZSBwYWdlIGFueW1vcmUuCisgICAgZm9yIChpID0gMDsgaSA8
IDEwMDAwOyBpKyspIHsKKyAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKKyAgICAgIGRpdi5pbm5lckhUTUwgPSAiPHA+PC9wPjxwPjwvcD48cD48L3A+PHA+PC9w
PjxwPjwvcD4iOworICAgICAganVua0NvbnRhaW5lci5hcHBlbmRDaGlsZChkaXYpOworICAgIH0K
KworICAgIC8vIFNhdmUgdGhlIHRvdGFsIHRpbWUgdG8gYnVpbGQgdGhlIERPTS4KKyAgICB2YXIg
bWlkVGltZSA9IG5ldyBEYXRlKCk7CisgICAgdmFyIGJ1aWxkVGltZSA9IG1pZFRpbWUgLSBzdGFy
dFRpbWU7CisKKyAgICAvLyBOb3cgY2FsbCB0aXRsZVVJRWxlbWVudCBvbiBlYWNoIGNvbnRyb2ws
IGFuZCBjaGVjayB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHJlc3VsdC4KKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgdmFyIGF4Q29udHJvbCA9IGF4Q29udHJv
bENvbnRhaW5lci5jaGlsZEF0SW5kZXgoaSk7CisgICAgICAgIHZhciBheFRpdGxlVUlFbGVtZW50
ID0gYXhDb250cm9sLnRpdGxlVUlFbGVtZW50KCk7CisgICAgICAgIGlmICghYXhUaXRsZVVJRWxl
bWVudCkgeworICAgICAgICAgICAgZGVidWcoIkZBSUw6IGNvbnRyb2wgIiArIGkgKyAiIGhhcyBu
byB0aXRsZVVJRWxlbWVudC4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHZhciB0aXRsZSA9IGF4VGl0bGVVSUVsZW1lbnQuY2hpbGRBdEluZGV4KDApLnN0cmluZ1Zh
bHVlOworICAgICAgICBpZiAoIWVuZHNXaXRoKHRpdGxlLCAiTGFiZWwgIiArIGkpKSB7CisgICAg
ICAgICAgICBkZWJ1ZygiRkFJTDogY29udHJvbCAiICsgaSArICIgdGl0bGVVSUVsZW1lbnQgdmFs
dWUgaXMgJyIgKworICAgICAgICAgICAgICAgICAgdGl0bGUgKyAiJyAsIGV4cGVjdGluZyBpdCB0
byBlbmQgd2l0aCAnTGFiZWwgIiArIGkgKyAiJyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBNZWFzdXJlIHRoZSB0aW1lIGl0IHRvb2sgdG8gY2FsbCB0
aXRsZVVJRWxlbWVudCBvbiBlYWNoIGNvbnRyb2wKKyAgICB2YXIgZW5kVGltZSA9IG5ldyBEYXRl
KCk7CisgICAgdmFyIHRpdGxlVUlFbGVtZW50VGltZSA9IGVuZFRpbWUgLSBtaWRUaW1lOworCisg
ICAgLy8gSWYgdGhpcyBpcyB3b3JraW5nIGNvcnJlY3RseSwgaXQgc2hvdWxkIHRha2UgKHNpZ25p
ZmljYW50bHkpIGxlc3MKKyAgICAvLyB0aW1lIHRvIHF1ZXJ5IHRpdGxlVUlFbGVtZW50IG9uIGFs
bCBvZiB0aGUgY29udHJvbHMgdGhhbiB0aGUgdGltZQorICAgIC8vIHRvIGJ1aWxkIHRoZSBwYWdl
IERPTS4gV2l0aCB0aGUgcHJldmlvdXMgTyhuKSBhbGdvcml0aG0gZm9yCisgICAgLy8gdGl0bGVV
SUVsZW1lbnQsIGl0IHRvb2sgc2lnbmlmaWNhbnRseSBsb25nZXIuCisgICAgaWYgKHRpdGxlVUlF
bGVtZW50VGltZSA8IGJ1aWxkVGltZSkgeworICAgICAgZGVidWcoIlBBU1MgUXVlcmllZCB0aXRs
ZVVJRWxlbWVudCBpbiBsZXNzIHRpbWUgdGhhbiBpdCB0b29rIHRvIGJ1aWxkIHRoZSBET00uIik7
CisgICAgfSBlbHNlIHsKKyAgICAgIGRlYnVnKCJGQUlMIFRvb2sgIiArIGJ1aWxkVGltZSArICIg
bXMgdG8gYnVpbGQgdGhlIERPTSBhbmQgIiArCisgICAgICAgICAgICB0aXRsZVVJRWxlbWVudFRp
bWUgKyAiIG1zIHRvIHF1ZXJ5IHRpdGxlVUlFbGVtZW50IG9uIGVhY2ggY29udHJvbC4iKTsKKyAg
ICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIGxhYmVscyBmcm9tIHRoZSBwYWdlIHNvIHRoZSB0ZXh0
IGR1bXAgb2YgdGhlIHBhZ2UgaXNuJ3QgZ2lnYW50aWMuCisgICAgbGFiZWxDb250YWluZXIuaW5u
ZXJIVE1MID0gIiI7Cit9CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDdk
YWFiZGJjZmVjZTRhOGMyOWFlNjIwZmYyOTM0YmJiMmQ2N2JiNDUuLmMwODNjNGJjNzBhNjg0MjUx
NjQyNDNjZjdkMzIzMDc2NWU4ZjQ2NTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTM0NSw3ICsxMzQ1LDYgQEAgY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1hY3RpdmVkZXNjZW5kYW50LWNyYXNoLmh0bWwgWyBTa2lw
IF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY29tYm9ib3guaHRtbCBbIFNr
aXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1jb250cm9scy13aXRoLXRh
YnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1mYWxs
YmFjay1yb2xlcy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9h
cmlhLWhpZGRlbi11cGRhdGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2li
aWxpdHkvYXJpYS1pbnZhbGlkLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3Np
YmlsaXR5L2FyaWEtbGFiZWxsZWRieS1vdmVycmlkZXMtbGFiZWwuaHRtbCBbIFNraXAgXQogY3Ji
dWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1saW5rLXN1cHBvcnRzLXByZXNzLmh0bWwg
WyBTa2lwIF0KQEAgLTEzNzAsMTQgKzEzNjksMTEgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2li
aWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L2xlZ2VuZC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNz
aWJpbGl0eS9saXN0cy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0
eS9tZWRpYS1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmls
aXR5L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sIFsgU2tpcCBdCiBj
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwgWyBTa2lw
IF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsYWNlaG9sZGVyLmh0bWwgWyBTa2lw
IF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsdWdpbi5odG1sIFsgU2tpcCBdCiBj
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tY2hlY2tib3gtc2l6ZS5o
dG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24t
Z3JvdXAtbWVtYmVycy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0
eS9yYWRpby1idXR0b24tdGl0bGUtbGFiZWwuaHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIFsgU2tpcCBdCiBj
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1hdHRyaWJ1dGVzLmh0bWwgWyBTa2lw
IF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWNlbGwtc3BhbnMuaHRtbCBb
IFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbHMuaHRtbCBb
IFNraXAgXQpAQCAtMTM4Niw3ICsxMzgyLDYgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxp
dHkvdGFibGUtb25lLWNlbGwuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2li
aWxpdHkvdGFibGUtc2VjdGlvbnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vz
c2liaWxpdHkvdGFibGUtd2l0aC1hcmlhLXJvbGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtd2l0aC1ydWxlcy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5j
b20vMTAzMjIgYWNjZXNzaWJpbGl0eS90aC1hcy10aXRsZS11aS5odG1sIFsgU2tpcCBdCiBjcmJ1
Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90cmFuc2Zvcm1lZC1lbGVtZW50Lmh0bWwgWyBTa2lw
IF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3Zpc2libGUtZWxlbWVudHMuaHRtbCBb
IFNraXAgXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166411</attachid>
            <date>2012-09-30 23:43:44 -0700</date>
            <delta_ts>2012-10-02 17:33:50 -0700</delta_ts>
            <desc>Fix compile</desc>
            <filename>bug-97825-20120930234258.patch</filename>
            <type>text/plain</type>
            <size>30550</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRlMWJmZTcwMzljOGM1
NzljNTNjNGQwYzEwMmY2NzM3NWI3ODAyMS4uMDM3NzJiYTJiNDBjYzU1MTlmZGU0MzNmZTVmODlm
N2RhOTkwY2RhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA5LTI4ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG5ldyBh
Y2Nlc3NpYmlsaXR5IGNhY2hlIHRoYXQgbWFwcyBpZHMgdG8gbGFiZWwgZWxlbWVudHMKKyAgICAg
ICAgdGhhdCBsYWJlbCB0aGF0IGlkLiBUaGUgY2FjaGUgaXMgYnVpbHQgdGhlIGZpcnN0IHRpbWUg
aXQncworICAgICAgICBxdWVyaWVkIChwZXIgZG9jdW1lbnQpLCBhbmQgdGhlbiB1cGRhdGVkIGV2
ZXJ5IHRpbWUgYSBsYWJlbAorICAgICAgICBlbGVtZW50IG9uIHRoZSBwYWdlIGlzIGNyZWF0ZWQs
IGRlbGV0ZWQsIG9yIG1vZGlmaWVkLgorICAgICAgICBUaGlzIGFsbG93cyBmb3IgdmVyeSBmYXN0
IGxvb2t1cCBvZiB0aGUgbGFiZWwgZm9yIGFueSBlbGVtZW50LgorCisgICAgICAgIFRlc3RzOiBh
Y2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAg
ICAgICAgYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUxhYmVsRWxlbWVudEZvcklkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmRvY3VtZW50RGVzdHJveWVkKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoQVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
Ojp1cGRhdGVMYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpkb2N1bWVudERlc3Ryb3llZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuaDoKKyAgICAgICAgKEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTExhYmVsRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50Ojp3aWxsTW9kaWZ5
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExh
YmVsRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMYWJlbEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuaDoK
KyAgICAgICAgKEhUTUxMYWJlbEVsZW1lbnQpOgorCiAyMDEyLTA5LTI4ICBFbWlsIEEgRWtsdW5k
ICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbXByb3ZlIHNhdHVyYXRpb24gYXJpdGht
ZXRpYyBzdXBwb3J0IGluIEZyYWN0aW9uYWxMYXlvdXRVbml0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA2YzA4YmUyMWYwZTMxNjcxMjdh
YjNmMmI0Yjk1N2Y5YjRlYmNmODIzLi44MWM3OGM0MGM4NmFlYjY4ZWNlZDQwMzk4ZjBhNzA2M2Iw
ZDU3Y2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKQEAgLTYwLDEwICs2MCwxMiBAQAogI2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgog
I2VuZGlmCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC03Niw2
ICs3OCw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtOTksNiArMTAyLDggQEAgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2Fj
aGUoKQogICAgICAgICBvYmotPmRldGFjaCgpOwogICAgICAgICByZW1vdmVBWElEKG9iaik7CiAg
ICAgfQorICAgIGZvciAoSGFzaE1hcDxEb2N1bWVudCosIEhhc2hNYXA8U3RyaW5nLCBIVE1MTGFi
ZWxFbGVtZW50Kj4qID46Oml0ZXJhdG9yIGl0ID0gbV9pZFRvTGFiZWxNYXBwaW5nLmJlZ2luKCk7
IGl0ICE9IG1faWRUb0xhYmVsTWFwcGluZy5lbmQoKTsgKytpdCkKKyAgICAgICAgZGVsZXRlICgq
aXQpLnNlY29uZDsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9j
dXNlZEltYWdlTWFwVUlFbGVtZW50KEhUTUxBcmVhRWxlbWVudCogYXJlYUVsZW1lbnQpCkBAIC02
NzYsNiArNjgxLDQzIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnROb3Rp
ZmljYXRpb24oRnJhbWUqIGZyYW1lLCBBWExvYWRpbmdFdmVudCBsCiAgICAgZnJhbWVMb2FkaW5n
RXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmosIGxvYWRpbmdFdmVudCk7CiB9CiAKK0hUTUxM
YWJlbEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OmxhYmVsRWxlbWVudEZvcklkKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKK3sKKyAgICBpZiAoIW1faWRUb0xhYmVs
TWFwcGluZy5jb250YWlucyhkb2N1bWVudCkpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhU
TUxMYWJlbEVsZW1lbnQqPiogZG9jdW1lbnRNYXBwaW5nID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBI
VE1MTGFiZWxFbGVtZW50Kj4oKTsKKyAgICAgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZG9j
dW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpOworICAgICAgICB1bnNpZ25lZCBs
ZW4gPSBsaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgaSsrKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+aGFzVGFnTmFtZShsYWJl
bFRhZykpIHsKKyAgICAgICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRp
Y19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKTsKKyAgICAgICAgICAgICAg
ICBpZiAobGFiZWwtPmhhc0F0dHJpYnV0ZShmb3JBdHRyKSkgeworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbnRyb2xJZCA9IGxhYmVsLT5nZXRBdHRyaWJ1dGUoZm9y
QXR0cik7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50TWFwcGluZy0+c2V0KGNvbnRyb2xJ
ZC5zdHJpbmcoKSwgbGFiZWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBtX2lkVG9MYWJlbE1hcHBpbmcuYWRkKGRvY3VtZW50LCBkb2N1bWVu
dE1hcHBpbmcpOworICAgIH0KKworICAgIHJldHVybiBtX2lkVG9MYWJlbE1hcHBpbmcuZ2V0KGRv
Y3VtZW50KS0+Z2V0KGlkKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjp1cGRhdGVMYWJlbEVs
ZW1lbnRGb3JJZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEhU
TUxMYWJlbEVsZW1lbnQqIGxhYmVsRWxlbWVudCkKK3sKKyAgICBpZiAoIW1faWRUb0xhYmVsTWFw
cGluZy5jb250YWlucyhkb2N1bWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faWRUb0xh
YmVsTWFwcGluZy5nZXQoZG9jdW1lbnQpLT5zZXQoaWQsIGxhYmVsRWxlbWVudCk7Cit9CisKK3Zv
aWQgQVhPYmplY3RDYWNoZTo6ZG9jdW1lbnREZXN0cm95ZWQoRG9jdW1lbnQqIGRvY3VtZW50KQor
eworICAgIGlmIChtX2lkVG9MYWJlbE1hcHBpbmcuY29udGFpbnMoZG9jdW1lbnQpKSB7CisgICAg
ICAgIGRlbGV0ZSBtX2lkVG9MYWJlbE1hcHBpbmcuZ2V0KGRvY3VtZW50KTsKKyAgICAgICAgbV9p
ZFRvTGFiZWxNYXBwaW5nLnJlbW92ZShkb2N1bWVudCk7CisgICAgfQorfQorCiB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQogewogICAg
IGlmICghdmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmgKaW5kZXggOGYwZjc2NTY3OTlkMzEwNzllYTYxODIzZmY1NmY1MTEwZTJjMjdlNy4uZGFlZTll
ZjM0MTVlNmY1NjZiZjAyN2Y5OGQ3ZDAwY2IyMmE3OWQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxBcmVhRWxlbWVudDsKK2Ns
YXNzIEhUTUxMYWJlbEVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJl
bmRlck9iamVjdDsKQEAgLTE3Niw2ICsxNzcsMTMgQEAgcHVibGljOgogCiAgICAgYm9vbCBub2Rl
SGFzUm9sZShOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiByb2xlKTsKIAorICAgIC8vIFRoZSBm
aXJzdCB0aW1lIGxhYmVsRWxlbWVudEZvcklkIGlzIGNhbGxlZCwgYSBjYWNoZSBmcm9tIGlkIHRv
CisgICAgLy8gbGFiZWwgZWxlbWVudCBpcyBidWlsdC4gVGhpcyBjYWNoZSBpcyB1cGRhdGVkIGV2
ZXJ5IHRpbWUgYSBMYWJlbAorICAgIC8vIGVsZW1lbnQgaXMgY3JlYXRlZCwgZGVsZXRlZCwgb3Ig
bW9kaWZpZWQuCisgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWxFbGVtZW50Rm9ySWQoRG9jdW1l
bnQqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHVwZGF0ZUxhYmVsRWxlbWVudEZv
cklkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgSFRNTExhYmVsRWxlbWVudCop
OworICAgIHZvaWQgZG9jdW1lbnREZXN0cm95ZWQoRG9jdW1lbnQqKTsKKwogcHJvdGVjdGVkOgog
ICAgIHZvaWQgcG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBB
WE5vdGlmaWNhdGlvbik7CiAgICAgdm9pZCBub2RlVGV4dENoYW5nZVBsYXRmb3JtTm90aWZpY2F0
aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRDaGFuZ2UsIHVuc2lnbmVkIG9mZnNldCwg
Y29uc3QgU3RyaW5nJik7CkBAIC0xOTgsNiArMjA2LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
SGFzaFNldDxBWElEPiBtX2lkc0luVXNlOwogICAgIAorICAgIC8vIFRoaXMgbWFwcGluZyBlbmFi
bGVzIGZhc3QgbG9va3VwcyBvZiA8bGFiZWwgZm9yPSJpZCI+IGdpdmVuIHRoZSBpZCBvZiB0aGUK
KyAgICAvLyBub2RlIGl0IHJlZmVyZW5jZXMgaW4gaXRzICJmb3IiIGF0dHJpYnV0ZS4gVGhlIG1h
cHBpbmcgaXMgaW5pdGlhbGl6ZWQKKyAgICAvLyBmb3IgZWFjaCBkb2N1bWVudCB3aGVuIGxhYmVs
RWxlbWVudEZvcklkIGlzIGNhbGxlZCwgdGhlbiB1cGRhdGVkCisgICAgLy8gZXZlcnkgdGltZSBh
IGxhYmVsIGVsZW1lbnQgaXMgYWRkZWQgb3IgY2hhbmdlZCBmcm9tIHRoZW4gb24uCisgICAgSGFz
aE1hcDxEb2N1bWVudCosIEhhc2hNYXA8U3RyaW5nLCBIVE1MTGFiZWxFbGVtZW50Kj4qID4gbV9p
ZFRvTGFiZWxNYXBwaW5nOworCiAgICAgVGltZXI8QVhPYmplY3RDYWNoZT4gbV9ub3RpZmljYXRp
b25Qb3N0VGltZXI7CiAgICAgVmVjdG9yPHBhaXI8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
LCBBWE5vdGlmaWNhdGlvbj4gPiBtX25vdGlmaWNhdGlvbnNUb1Bvc3Q7CiAgICAgdm9pZCBub3Rp
ZmljYXRpb25Qb3N0VGltZXJGaXJlZChUaW1lcjxBWE9iamVjdENhY2hlPiopOwpAQCAtMjM1LDYg
KzI0OSw5IEBAIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUNhY2hlQWZ0ZXJOb2Rl
SXNBdHRhY2hlZChOb2RlKikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hX
cmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2Fj
aGU6OmZyYW1lTG9hZGluZ0V2ZW50Tm90aWZpY2F0aW9uKEZyYW1lKiwgQVhMb2FkaW5nRXZlbnQp
IHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0Zm9y
bU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhMb2FkaW5nRXZlbnQpIHsgfQor
aW5saW5lIEhUTUxMYWJlbEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OmxhYmVsRWxlbWVudEZvcklk
KERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJikgeyByZXR1cm4gMDsgfQoraW5saW5lIHZv
aWQgQVhPYmplY3RDYWNoZTo6dXBkYXRlTGFiZWxFbGVtZW50Rm9ySWQoRG9jdW1lbnQqLCBjb25z
dCBBdG9taWNTdHJpbmcmIGlkLCBIVE1MTGFiZWxFbGVtZW50KikgeyB9CitpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjpkb2N1bWVudERlc3Ryb3llZChEb2N1bWVudCopIHsgfQogaW5saW5lIHZv
aWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoTm9kZSopIHsg
fQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKE5v
ZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFSb2xlQ2hhbmdl
ZChOb2RlKikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCmluZGV4IDBmOTQ4MzhlN2VjNTVhOTY5ZWRiMWU4
MDUwMDAzOTc1ZDdlZWNjMTMuLmFmZTFmNzVjNGE4M2I3Y2ZhNDViNjBkODM4YjIwOWM5ZTdmZmI2
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCkBAIC0xMDAxLDE0ICsxMDAxLDE0IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmlzR2VuZXJpY0ZvY3VzYWJsZUVsZW1lbnQoKSBjb25zdAogCiBI
VE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0g
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxhYmVsIik7Ci0gICAg
dW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1lKGxh
YmVsVGFnKSkgewotICAgICAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNf
Y2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obGlzdC0+aXRlbShpKSk7Ci0gICAgICAgICAgICBpZiAo
bGFiZWwtPmNvbnRyb2woKSA9PSBlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBsYWJl
bDsKLSAgICAgICAgfQorICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGUoaWRBdHRyKSkgewor
ICAgICAgICBpZiAoSFRNTExhYmVsRWxlbWVudCogcmVzdWx0ID0gYXhPYmplY3RDYWNoZSgpLT5s
YWJlbEVsZW1lbnRGb3JJZChlbGVtZW50LT5kb2N1bWVudCgpLCBlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoaWRBdHRyKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGZv
ciAoRWxlbWVudCogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOyBwYXJlbnQ7IHBh
cmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChwYXJlbnQtPmhh
c1RhZ05hbWUobGFiZWxUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxM
YWJlbEVsZW1lbnQqPihwYXJlbnQpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggNGM4NjkwNDhlZDBkMWNmNDdmMDFhOTg3Njg4MGQ2NWNhZDk3Yjg5
MS4uYzkzYzA0ZTYwZjdjZjhjOWQ5ODA3ODBiMzQzOGY4MTA0ODEwMzI4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC02MjksNiArNjI5LDkgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAK
ICAgICBtX3JlbmRlckFyZW5hLmNsZWFyKCk7CiAKKyAgICBpZiAodG9wRG9jdW1lbnQoKSAhPSB0
aGlzICYmIHRvcERvY3VtZW50KCktPm1fYXhPYmplY3RDYWNoZSkKKyAgICAgICAgdG9wRG9jdW1l
bnQoKS0+bV9heE9iamVjdENhY2hlLT5kb2N1bWVudERlc3Ryb3llZCh0aGlzKTsKKwogICAgIGNs
ZWFyQVhPYmplY3RDYWNoZSgpOwogCiAgICAgbV9kZWNvZGVyID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
CmluZGV4IGM3MDg3NzViYTM2OGNlZjc3ZTE3ZmEyZmI3Mjk2YzUzMTQxYmU4NmIuLjgzZjI3ZGJl
NTE2ZTFhYWJkYWMzN2Q2MmZkMWY5MmYxYjEwNDIyMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAt
MzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUlkKFRyZWVTY29wZSosIGNv
bnN0IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpOwogICAg
IHZvaWQgdXBkYXRlTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmV3TmFtZSk7CiAKLSAgICB2b2lkIHdpbGxNb2RpZnlBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmV3VmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsTW9kaWZ5QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKICAgICB2b2lkIHdpbGxSZW1vdmVBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogICAgIHZv
aWQgZGlkQWRkQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYpOwogICAgIHZvaWQgZGlkTW9kaWZ5
QXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVs
RWxlbWVudC5jcHAKaW5kZXggMjQyZmIwY2JkMzZlNjdjYjZiZmE4NTQ3Yzk3ZjU5ZTc3NDhlMzFk
Zi4uYTY1MmFlMDI5NzUyYjM4MTZhZGRiNGUyNzYwNzAwZGI0YjZiN2IwMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgogCisjaW5jbHVkZSAi
QVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC0xNTUsNiArMTU2LDMxIEBAIGJvb2wgSFRN
TExhYmVsRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKQogICAgIHJldHVy
biBIVE1MRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKTsKIH0KIAordm9p
ZCBIVE1MTGFiZWxFbGVtZW50Ojp3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3VmFsdWUpCit7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkgJiYgbmFtZSA9PSBmb3JBdHRyICYmIGF0dGFjaGVkKCkpIHsKKyAgICAgICAgaWYgKCFv
bGRWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hl
KCktPnVwZGF0ZUxhYmVsRWxlbWVudEZvcklkKGRvY3VtZW50KCksIG9sZFZhbHVlLCAwKTsKKyAg
ICAgICAgaWYgKCFuZXdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5h
eE9iamVjdENhY2hlKCktPnVwZGF0ZUxhYmVsRWxlbWVudEZvcklkKGRvY3VtZW50KCksIG5ld1Zh
bHVlLCB0aGlzKTsKKyAgICB9CisgICAgSFRNTEVsZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUo
bmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKK30KKworTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0
aW9uUmVxdWVzdCBIVE1MTGFiZWxFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSog
aW5zZXJ0aW9uUG9pbnQpCit7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkgJiYgaGFzQXR0cmlidXRlKGZvckF0dHIpKQorICAgICAgICBkb2N1bWVudCgpLT5h
eE9iamVjdENhY2hlKCktPnVwZGF0ZUxhYmVsRWxlbWVudEZvcklkKGRvY3VtZW50KCksIGdldEF0
dHJpYnV0ZShmb3JBdHRyKSwgdGhpcyk7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjppbnNlcnRl
ZEludG8oaW5zZXJ0aW9uUG9pbnQpOworfQorCit2b2lkIEhUTUxMYWJlbEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQoreworICAgIGlmIChBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGhhc0F0dHJpYnV0ZShmb3JBdHRyKSkK
KyAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT51cGRhdGVMYWJlbEVsZW1lbnRG
b3JJZChkb2N1bWVudCgpLCBnZXRBdHRyaWJ1dGUoZm9yQXR0ciksIDApOworICAgIEhUTUxFbGVt
ZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7Cit9CisKIHZvaWQgSFRNTExhYmVsRWxl
bWVudDo6Zm9jdXMoYm9vbCkKIHsKICAgICAvLyB0byBtYXRjaCBvdGhlciBicm93c2VycywgYWx3
YXlzIHJlc3RvcmUgcHJldmlvdXMgc2VsZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVs
RWxlbWVudC5oCmluZGV4IGY0OGM2ODA1ZTQ5MWFkNmU4MDQ5OTRmNmI2Y2U3OTZiOGE5NmZlZmEu
LjZmZTg1MjQzZWQzN2FmNjY2MThmZjYyOGMyOGY0M2ViYWU0OGNlYTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExhYmVsRWxlbWVudC5oCkBAIC0zOCw2ICszOCwxMCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBPVkVSUklERTsK
IAorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5l
d1ZhbHVlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlv
blJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSopIE9WRVJSSURFOworCiBwcml2YXRl
OgogICAgIEhUTUxMYWJlbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4
ZDc0YzI5N2E3NzE4YTIzYTU5YzRhNGY2ZTZjYjM5OGI1MjdmYjVjLi42ZmViZWI3ZTQ1YmExYjFh
MzFiZmFhMmVhYzNlM2YxZGFmNGMzOWMzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDktMjggIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IGxhYmVsRm9yRWxl
bWVudCBpcyBzbG93IHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIERPTSBlbGVtZW50cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc4MjUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgdGl0bGVV
SUVsZW1lbnQgaW4gdGhlIGNocm9taXVtIHBvcnQgb2YgRFJULCBhbmQKKyAgICAgICAgZml4IGdl
dEFjY2Vzc2libGVFbGVtZW50QnlJZCBzbyB0aGF0IGl0IGVuc3VyZXMgdGhlIGJhY2tpbmcgc3Rv
cmUKKyAgICAgICAgaXMgdXAtdG8tZGF0ZS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlk
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKToKKwogMjAxMi0wOS0yOCAgRGlyayBQcmFua2Ug
IDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICB3ZWJraXQtcGF0Y2ggcmViYXNlbGlu
ZS1leHBlY3RhdGlvbnMgaXMgYnJva2VuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckNocm9taXVtLmNwcAppbmRleCA4OWQ1ZDU4NzcwYzYxZDFhYWU5MTYwYmEzNGU0
MzY3NjUxNmIwN2MyLi4wZmU0YzFmOTllNDU5NmQyZDhkNzQ3OGIyMTFmMzllNjViZmYzNzY4IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAK
QEAgLTExNyw2ICsxMTcsOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKGNvbnN0CiAgICAgaWYgKG1fcm9v
dEVsZW1lbnQuaXNOdWxsKCkpCiAgICAgICAgIG1fcm9vdEVsZW1lbnQgPSBtX3dlYlZpZXctPmFj
Y2Vzc2liaWxpdHlPYmplY3QoKTsKIAorICAgIGlmICghbV9yb290RWxlbWVudC51cGRhdGVCYWNr
aW5nU3RvcmVBbmRDaGVja1ZhbGlkaXR5KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0
dXJuIGZpbmRBY2Nlc3NpYmxlRWxlbWVudEJ5SWRSZWN1cnNpdmUobV9yb290RWxlbWVudCwgV2Vi
U3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENo
cm9taXVtLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcAppbmRleCBiNzk1YWViODM3NDA0YzRlNTg4
YmRiYWUzNjNlNTgyOTYwOTlhNDI1Li5lZjlmYTUwYzcwNzRlZWM3ZGQxMWY0ZjU1OTc1YTdjM2U4
NmNmOGU3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21p
dW0uY3BwCkBAIC03MzQsNyArNzM0LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsCiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7CisgICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBvYmogPSBhY2Nlc3NpYmlsaXR5T2Jq
ZWN0KCkudGl0bGVVSUVsZW1lbnQoKTsKKyAgICBpZiAob2JqLmlzTnVsbCgpKSB7CisgICAgICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzdWx0
LT5zZXQoKihtX2ZhY3RvcnktPmdldE9yQ3JlYXRlKG9iaiktPmdldEFzQ3BwVmFyaWFudCgpKSk7
CisKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5n
ZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCZhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBjZDliNmViNWU3YzBiODlhZmNmMjdhM2NhYzk4Yjk5YWY0NDM5MGZhLi42
YTlkMzdmMWFmMzMxYjcyZDBjZTE2NmU4ODY5NGFjZTM5NmFjMzYwIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzEgQEAKKzIwMTItMDktMjggIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+
CisKKyAgICAgICAgQVg6IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdoZW4gdGhlcmUgYXJlIGEg
bG90IG9mIERPTSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTc4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIHR3byBuZXcgdGVzdHMgZm9yIHRpdGxlVUlFbGVtZW50IHRoYXQgcnVu
IG9uIGJvdGggTWFjIGFuZAorICAgICAgICBDaHJvbWl1bS4gT25lIHRlc3RzIGNvcnJlY3RuZXNz
LCB0aGUgb3RoZXIgdGVzdHMgc3BlZWQuCisKKyAgICAgICAgVGhlIHRlc3QgZm9yIHRpdGxlVUlF
bGVtZW50IHNwZWVkIGlzIGNhcmVmdWxseSBkZXNpZ25lZCBzbyB0aGF0CisgICAgICAgIGl0IGZh
aWxzIHdpdGhvdXQgdGhpcyBwYXRjaCBhbmQgcGFzc2VzIHdpdGggaXQsIHdoaWxlIHN0aWxsCisg
ICAgICAgIGJlaW5nIHJvYnVzdCB0byBkaWZmZXJlbmNlcyBpbiBjcHUgc3BlZWQsIHBsYXRmb3Jt
LCBldGMuIC0gZXNzZW50aWFsbHkKKyAgICAgICAgaXQgY29tcGFyZXMgdGhlIHNwZWVkIG9mIGRv
aW5nIGEgbGFyZ2UgbnVtYmVyIG9mIGNhbGxzIHRvIHRpdGxlVUlFbGVtZW50CisgICAgICAgIHRv
IHRoZSB0aW1lIGl0IHRha2VzIHRvIGJ1aWxkIHRoZSBET00gb2YgYSBwYWdlLCBmb3IgYSByZWxh
dGl2ZWx5CisgICAgICAgIGxhcmdlIHBhZ2Ugd2l0aCBsb3RzIG9mIERPTSBlbGVtZW50cy4gSXQg
ZW5zdXJlcyB0aGF0IHRpdGxlVUlFbGVtZW50CisgICAgICAgIGRvZXNuJ3QgbmVlZCB0byBzY2Fu
IHRoZSBlbnRpcmUgRE9NIHRvIGxvb2sgZm9yIGxhYmVsIGVsZW1lbnRzLgorCisgICAgICAgIEZp
eGVzIG9uZSB0ZXN0IHNvIHRoYXQgaXQgcGFzc2VzIG9uIENocm9taXVtLgorICAgICAgICBFbmFi
bGVzIG90aGVyIHRlc3RzIHRoYXQgbm93IHBhc3Mgb24gQ2hyb21pdW0uCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRtbDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5l
c3MuaHRtbDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50
LXNwZWVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS90aXRs
ZS11aS1lbGVtZW50LXNwZWVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMDktMjggIEVtaWwgQSBFa2x1bmQgIDxlYWVA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIEltcHJvdmUgc2F0dXJhdGlvbiBhcml0aG1ldGljIHN1
cHBvcnQgaW4gRnJhY3Rpb25hbExheW91dFVuaXQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIGIvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKaW5kZXggMTcwZTU3
MDFhMDQ1ODVkYzAxZTg2YWM2NzliMWUzNDMwODE2M2YxOS4uMTJmODFlMzM4ZGNhOGI1ZjE0ZjAx
Yjg4MjY4Y2RmNmIyOWZmMjE1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKQEAgLTIxLDggKzIxLDcgQEAK
ICAgICAgICAgICAgIHBhc3MuZm9jdXMoKTsKICAgICAgICAgICAgIHZhciB0aXRsZVVJRWxlbWVu
dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnRpdGxlVUlFbGVtZW50
KCk7CiAgICAgICAgICAgICB2YXIgdGl0bGVUZXh0ID0gdGl0bGVVSUVsZW1lbnQuY2hpbGRBdElu
ZGV4KDApOwotICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSAiQVhWYWx1ZTogUGFzc3dvcmQiOwot
ICAgICAgICAgICAgaWYgKHRpdGxlVGV4dC5hbGxBdHRyaWJ1dGVzKCkuaW5kZXhPZihwYXR0ZXJu
KSAhPSAtMSkgeworICAgICAgICAgICAgaWYgKHRpdGxlVGV4dC5zdHJpbmdWYWx1ZSA9PSAiQVhW
YWx1ZTogUGFzc3dvcmQiKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0LmlubmVyVGV4dCArPSAi
VGVzdCBwYXNzZWRcbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0
bmVzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVs
ZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0YWI2YjU4MjdlZWE5
NmM1MDJjYTNkMDI4MWIzNDdkNTY5MDA3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMjUgQEAKK0xhYmVsIDEgIAorTGFiZWwgMiAgCitMYWJlbCAzICAKKworTGFi
ZWwgNSAgCitUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3MgY29ycmVjdGx5IGV2
ZW4gd2hlbiB0aGluZ3MgY2hhbmdlIGR5bmFtaWNhbGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBjb250cm9sMS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWwx
KSBpcyB0cnVlCitQQVNTIGNvbnRyb2wyLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDIp
IGlzIHRydWUKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDMpIGlzIGZhbHNlCitQQVNT
IGNvbnRyb2wzLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJlbDMpIGlzIHRydWUKK1BBU1Mg
aGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDQpIGlzIGZhbHNlCitQQVNTIGhhc1RpdGxlVUlFbGVt
ZW50KGNvbnRyb2w0KSBpcyB0cnVlCitQQVNTIGNvbnRyb2w0LnRpdGxlVUlFbGVtZW50KCkuaXNF
cXVhbChsYWJlbDQpIGlzIHRydWUKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDQpIGlz
IGZhbHNlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w1KSBpcyBmYWxzZQorUEFTUyBj
b250cm9sNS50aXRsZVVJRWxlbWVudCgpICE9IG51bGwgaXMgdHJ1ZQorUEFTUyBjb250cm9sNS50
aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWw1KSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWwgYi9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40NTQ4ZDA1NDVhNTA1ZGVjZDZiMjk3MGU5YjBjZWVjNzRmYmU5ZjQxCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50
LWNvcnJlY3RuZXNzLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9ImNvbnRhaW5lciI+CisKKyAgPGRpdj4KKyAgICA8
bGFiZWwgaWQ9ImwxIiBmb3I9ImMxIj5MYWJlbCAxPC9sYWJlbD4KKyAgICA8aW5wdXQgaWQ9ImMx
IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8bGFiZWwgaWQ9ImwyIj4K
KyAgICAgIExhYmVsIDIKKyAgICAgIDxpbnB1dCBpZD0iYzIiIHR5cGU9InRleHQiPgorICAgIDwv
bGFiZWw+CisgIDwvZGl2PgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsMyI+TGFiZWwgMzwv
bGFiZWw+CisgICAgPGlucHV0IGlkPSJjMyIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorCisgIDxk
aXY+CisgICAgPGlucHV0IGlkPSJjNCIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorCisgIDxkaXY+
CisgICAgPGxhYmVsIGlkPSJsNSI+CisgICAgICBMYWJlbCA1CisgICAgPC9sYWJlbD4KKyAgICA8
aW5wdXQgaWQ9ImM1IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB0
aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5ncyBjaGFuZ2UgZHlu
YW1pY2FsbHkuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworICAgIGZ1
bmN0aW9uIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCkgeworICAgICAgICB2YXIgbGFiZWwx
ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsMSIpOwor
ICAgICAgICB2YXIgdGl0bGVVSUVsZW1lbnQgPSBheEVsZW1lbnQudGl0bGVVSUVsZW1lbnQoKTsK
KyAgICAgICAgaWYgKHRpdGxlVUlFbGVtZW50ID09IG51bGwpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiB0aXRsZVVJRWxlbWVudC5yb2xlID09IGxhYmVsMS5yb2xl
OworICAgIH0KKworICAgIHZhciBsYWJlbDEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nl
c3NpYmxlRWxlbWVudEJ5SWQoImwxIik7CisgICAgdmFyIGNvbnRyb2wxID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjMSIpOworICAgIHNob3VsZEJlKCJj
b250cm9sMS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWwxKSIsICJ0cnVlIik7CisKKyAg
ICB2YXIgbGFiZWwyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJsMiIpOworICAgIHZhciBjb250cm9sMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFj
Y2Vzc2libGVFbGVtZW50QnlJZCgiYzIiKTsKKyAgICBzaG91bGRCZSgiY29udHJvbDIudGl0bGVV
SUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsMikiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCBjaGFu
Z2luZyB0aGUgImZvciIgYXR0cmlidXRlIGR5bmFtaWNhbGx5LgorICAgIHZhciBsYWJlbDMgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImwzIik7CisgICAg
dmFyIGNvbnRyb2wzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJjMyIpOworICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChjb250cm9sMykiLCAi
ZmFsc2UiKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibDMiKS5zZXRBdHRyaWJ1dGUo
ImZvciIsICJjMyIpOworICAgIHNob3VsZEJlKCJjb250cm9sMy50aXRsZVVJRWxlbWVudCgpLmlz
RXF1YWwobGFiZWwzKSIsICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IHVuYXR0YWNoZWQgbGFiZWwg
ZWxlbWVudCB0aGF0J3Mgc3Vic2VxdWVudGx5IGF0dGFjaGVkLgorICAgIHZhciBjb250cm9sNCA9
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiYzQiKTsKKyAg
ICB2YXIgbGFiZWw0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7Cisg
ICAgbGFiZWw0RWxlbWVudC5pZCA9ICJsNCI7CisgICAgbGFiZWw0RWxlbWVudC5zZXRBdHRyaWJ1
dGUoImZvciIsICJjNCIpOworICAgIGxhYmVsNEVsZW1lbnQuaW5uZXJUZXh0ID0gIkxhYmVsIDQi
OworICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChjb250cm9sNCkiLCAiZmFsc2UiKTsK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGFpbmVyIikuYXBwZW5kQ2hpbGQobGFi
ZWw0RWxlbWVudCk7CisKKyAgICB2YXIgbGFiZWw0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsNCIpOworICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxl
bWVudChjb250cm9sNCkiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJjb250cm9sNC50aXRsZVVJ
RWxlbWVudCgpLmlzRXF1YWwobGFiZWw0KSIsICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IHdoYXQg
aGFwcGVucyB3aGVuIHRoZSBsYWJlbCBpcyBkZXRhY2hlZC4KKyAgICBsYWJlbDRFbGVtZW50LnBh
cmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWw0RWxlbWVudCk7CisgICAgc2hvdWxkQmUoImhh
c1RpdGxlVUlFbGVtZW50KGNvbnRyb2w0KSIsICJmYWxzZSIpOworCisgICAgLy8gVGVzdCBsYWJl
bCB0aGF0IGdldHMgYSBjb250cm9sIHJlcGFyZW50ZWQgaW50byBpdC4KKyAgICB2YXIgY29udHJv
bDUgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImM1Iik7
CisgICAgc2hvdWxkQmUoImhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w1KSIsICJmYWxzZSIpOwor
CisgICAgdmFyIGNvbnRyb2w1RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjNSIp
OworICAgIHZhciBsYWJlbDVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImw1Iik7
CisgICAgY29udHJvbDVFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoY29udHJvbDVF
bGVtZW50KTsKKyAgICBsYWJlbDVFbGVtZW50LmFwcGVuZENoaWxkKGNvbnRyb2w1RWxlbWVudCk7
CisKKyAgICBjb250cm9sNSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVt
ZW50QnlJZCgiYzUiKTsKKyAgICBzaG91bGRCZSgiY29udHJvbDUudGl0bGVVSUVsZW1lbnQoKSAh
PSBudWxsIiwgInRydWUiKTsKKyAgICB2YXIgbGFiZWw1ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsNSIpOworICAgIHNob3VsZEJlKCJjb250cm9sNS50
aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWw1KSIsICJ0cnVlIik7Cit9CisKKzwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI1MjA5YWY5NDFkMDVmYmUyYTcyN2EzNTA2OThjYTU3NzhiMDg5YTAKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3Bl
ZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKKworVGhpcyB0ZXN0cyB0aGF0IHRpdGxl
VUlFbGVtZW50IGRvZXNuJ3QgdGFrZSBhIHJpZGljdWxvdXNseSBsb25nIHRpbWUgdG8gcnVuIHdo
ZW4gdGhlcmUgYXJlIGEgbG90IG9mIGxhYmVsIGVsZW1lbnRzIG9uIGEgcGFnZS4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYXhDb250cm9sQ29udGFpbmVyLmNoaWxkcmVu
Q291bnQgaXMgNTAwCitQQVNTIFF1ZXJpZWQgdGl0bGVVSUVsZW1lbnQgaW4gbGVzcyB0aW1lIHRo
YW4gaXQgdG9vayB0byBidWlsZCB0aGUgRE9NLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRkZWVhYTI2MWYx
ODg5NDRhODQ5NGU3MDA3MTEzYjIyODc1NTc2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC5odG1sCkBAIC0wLDAgKzEs
MTA3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJs
YWJlbENvbnRhaW5lciI+Cis8L2Rpdj4KKzxkaXYgaWQ9ImNvbnRyb2xDb250YWluZXIiIGFyaWEt
bGFiZWw9ImNvbnRyb2wgY29udGFpbmVyIj4KKzwvZGl2PgorPGRpdiBpZD0ianVua0NvbnRhaW5l
ciIgaGlkZGVuPgorPC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgZG9lc24ndCB0YWtl
IGEgcmlkaWN1bG91c2x5IGxvbmcgdGltZSB0byBydW4gd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2Yg
bGFiZWwgZWxlbWVudHMgb24gYSBwYWdlLiIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIgJiYg
d2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgd2luZG93LnRlc3RSdW5uZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzdWZmaXgpIHsKKyAg
ICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpID09IHN1
ZmZpeDsKKyAgICB9CisKKyAgICB2YXIgbGFiZWxDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbGFiZWxDb250YWluZXInKTsKKyAgICB2YXIgY29udHJvbENvbnRhaW5lciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sQ29udGFpbmVyJyk7CisgICAgdmFyIGp1bmtD
b250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnanVua0NvbnRhaW5lcicpOworCisg
ICAgdmFyIGxhYmVscyA9IFtdOworICAgIHZhciBjb250cm9scyA9IFtdOworCisgICAgdmFyIHN0
YXJ0VGltZSA9IG5ldyBEYXRlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBidW5jaCBvZiBsYWJlbHMs
IGVhY2ggb2YgdGhlIGZvcm06CisgICAgLy8gICA8bGFiZWwgZm9yPSdjMCc+TGFiZWwgMDwvbGFi
ZWw+CisgICAgLy8gQ3JlYXRlIGNvcnJlc3BvbmRpbmcgY29udHJvbHMsIGVhY2ggb2YgdGhpcyBm
b3JtOgorICAgIC8vICAgPGlucHV0IGlkPSdjMCcgdHlwZT0ndGV4dCc+CisgICAgdmFyIGNvdW50
ID0gNTAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICB2
YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpOworICAgICAgICBsYWJl
bC5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjJyArIGkpOworICAgICAgICBsYWJlbC5pbm5lclRleHQg
PSAnTGFiZWwgJyArIGk7CisgICAgICAgIGxhYmVscy5wdXNoKGxhYmVsKTsKKyAgICAgICAgbGFi
ZWxDb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWwpOworCisgICAgICAgIHZhciBjb250cm9sID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICAgICAgY29udHJvbC50eXBlID0g
J3RleHQnOworICAgICAgICBjb250cm9sLmlkID0gJ2MnICsgaTsKKyAgICAgICAgY29udHJvbHMu
cHVzaChjb250cm9sKTsKKyAgICAgICAgY29udHJvbENvbnRhaW5lci5hcHBlbmRDaGlsZChjb250
cm9sKTsKKyAgICB9CisKKyAgICAvLyBHZXQgdGhlIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGNvbnRyb2wgY29udGFpbmVyLgorICAgIHZhciBheENvbnRyb2xDb250
YWluZXIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoJ2Nv
bnRyb2xDb250YWluZXInKTsKKyAgICBzaG91bGRCZSgiYXhDb250cm9sQ29udGFpbmVyLmNoaWxk
cmVuQ291bnQiLCAiIiArIGNvdW50KTsKKworICAgIC8vIE5vdyBhZGQgbW9yZSBqdW5rIHRvIHRo
ZSBwYWdlLiBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHRpdGxlVUlFbGVtZW50IGRvZXNuJ3Qg
dGFrZQorICAgIC8vIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgRE9NIGVsZW1l
bnRzIG9uIHRoZSBwYWdlIGFueW1vcmUuCisgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKysp
IHsKKyAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAg
IGRpdi5pbm5lckhUTUwgPSAiPHA+PC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPjxwPjwvcD4iOwor
ICAgICAganVua0NvbnRhaW5lci5hcHBlbmRDaGlsZChkaXYpOworICAgIH0KKworICAgIC8vIFNh
dmUgdGhlIHRvdGFsIHRpbWUgdG8gYnVpbGQgdGhlIERPTS4KKyAgICB2YXIgbWlkVGltZSA9IG5l
dyBEYXRlKCk7CisgICAgdmFyIGJ1aWxkVGltZSA9IG1pZFRpbWUgLSBzdGFydFRpbWU7CisKKyAg
ICAvLyBOb3cgY2FsbCB0aXRsZVVJRWxlbWVudCBvbiBlYWNoIGNvbnRyb2wsIGFuZCBjaGVjayB0
aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHJlc3VsdC4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKKyAgICAgICAgdmFyIGF4Q29udHJvbCA9IGF4Q29udHJvbENvbnRhaW5lci5j
aGlsZEF0SW5kZXgoaSk7CisgICAgICAgIHZhciBheFRpdGxlVUlFbGVtZW50ID0gYXhDb250cm9s
LnRpdGxlVUlFbGVtZW50KCk7CisgICAgICAgIGlmICghYXhUaXRsZVVJRWxlbWVudCkgeworICAg
ICAgICAgICAgZGVidWcoIkZBSUw6IGNvbnRyb2wgIiArIGkgKyAiIGhhcyBubyB0aXRsZVVJRWxl
bWVudC4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHZhciB0aXRs
ZSA9IGF4VGl0bGVVSUVsZW1lbnQuY2hpbGRBdEluZGV4KDApLnN0cmluZ1ZhbHVlOworICAgICAg
ICBpZiAoIWVuZHNXaXRoKHRpdGxlLCAiTGFiZWwgIiArIGkpKSB7CisgICAgICAgICAgICBkZWJ1
ZygiRkFJTDogY29udHJvbCAiICsgaSArICIgdGl0bGVVSUVsZW1lbnQgdmFsdWUgaXMgJyIgKwor
ICAgICAgICAgICAgICAgICAgdGl0bGUgKyAiJyAsIGV4cGVjdGluZyBpdCB0byBlbmQgd2l0aCAn
TGFiZWwgIiArIGkgKyAiJyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBNZWFzdXJlIHRoZSB0aW1lIGl0IHRvb2sgdG8gY2FsbCB0aXRsZVVJRWxlbWVu
dCBvbiBlYWNoIGNvbnRyb2wKKyAgICB2YXIgZW5kVGltZSA9IG5ldyBEYXRlKCk7CisgICAgdmFy
IHRpdGxlVUlFbGVtZW50VGltZSA9IGVuZFRpbWUgLSBtaWRUaW1lOworCisgICAgLy8gSWYgdGhp
cyBpcyB3b3JraW5nIGNvcnJlY3RseSwgaXQgc2hvdWxkIHRha2UgKHNpZ25pZmljYW50bHkpIGxl
c3MKKyAgICAvLyB0aW1lIHRvIHF1ZXJ5IHRpdGxlVUlFbGVtZW50IG9uIGFsbCBvZiB0aGUgY29u
dHJvbHMgdGhhbiB0aGUgdGltZQorICAgIC8vIHRvIGJ1aWxkIHRoZSBwYWdlIERPTS4gV2l0aCB0
aGUgcHJldmlvdXMgTyhuKSBhbGdvcml0aG0gZm9yCisgICAgLy8gdGl0bGVVSUVsZW1lbnQsIGl0
IHRvb2sgc2lnbmlmaWNhbnRseSBsb25nZXIuCisgICAgaWYgKHRpdGxlVUlFbGVtZW50VGltZSA8
IGJ1aWxkVGltZSkgeworICAgICAgZGVidWcoIlBBU1MgUXVlcmllZCB0aXRsZVVJRWxlbWVudCBp
biBsZXNzIHRpbWUgdGhhbiBpdCB0b29rIHRvIGJ1aWxkIHRoZSBET00uIik7CisgICAgfSBlbHNl
IHsKKyAgICAgIGRlYnVnKCJGQUlMIFRvb2sgIiArIGJ1aWxkVGltZSArICIgbXMgdG8gYnVpbGQg
dGhlIERPTSBhbmQgIiArCisgICAgICAgICAgICB0aXRsZVVJRWxlbWVudFRpbWUgKyAiIG1zIHRv
IHF1ZXJ5IHRpdGxlVUlFbGVtZW50IG9uIGVhY2ggY29udHJvbC4iKTsKKyAgICB9CisKKyAgICAv
LyBSZW1vdmUgdGhlIGxhYmVscyBmcm9tIHRoZSBwYWdlIHNvIHRoZSB0ZXh0IGR1bXAgb2YgdGhl
IHBhZ2UgaXNuJ3QgZ2lnYW50aWMuCisgICAgbGFiZWxDb250YWluZXIuaW5uZXJIVE1MID0gIiI7
Cit9CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDdhZDY1M2VhZDllMGJj
ZTFmMDYwNjI2ZjQxOGY0NjY5MDU3YmViYzguLmQzZDc0NzkyOWFmYWM1NGY2MmM2NWFhMTk0NTU1
YzExYjg0ODU2YTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4
cGVjdGF0aW9ucwpAQCAtMTM1MSw3ICsxMzUxLDYgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2li
aWxpdHkvYXJpYS1hY3RpdmVkZXNjZW5kYW50LWNyYXNoLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY29tYm9ib3guaHRtbCBbIFNraXAgXQogY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1jb250cm9scy13aXRoLXRhYnMuaHRtbCBbIFNr
aXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1mYWxsYmFjay1yb2xlcy5o
dG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi11
cGRhdGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1p
bnZhbGlkLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2FyaWEt
bGFiZWxsZWRieS1vdmVycmlkZXMtbGFiZWwuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvYXJpYS1saW5rLXN1cHBvcnRzLXByZXNzLmh0bWwgWyBTa2lwIF0KQEAg
LTEzNzYsMTQgKzEzNzUsMTEgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbGFuZ3Vh
Z2UtYXR0cmlidXRlLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5
L2xlZ2VuZC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9saXN0
cy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9tZWRpYS1lbGVt
ZW50Lmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L25vbi1kYXRh
LXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsYWNlaG9sZGVyLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsdWdpbi5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tY2hlY2tib3gtc2l6ZS5odG1sIFsgU2tpcCBd
CiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tZ3JvdXAtbWVtYmVy
cy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0
b24tdGl0bGUtbGFiZWwuaHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxp
dHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS90YWJsZS1hdHRyaWJ1dGVzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWNlbGwtc3BhbnMuaHRtbCBbIFNraXAgXQogY3Ji
dWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbHMuaHRtbCBbIFNraXAgXQpAQCAt
MTM5Miw3ICsxMzg4LDYgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtb25l
LWNlbGwuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUt
c2VjdGlvbnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFi
bGUtd2l0aC1hcmlhLXJvbGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2li
aWxpdHkvdGFibGUtd2l0aC1ydWxlcy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS90aC1hcy10aXRsZS11aS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS90cmFuc2Zvcm1lZC1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3Zpc2libGUtZWxlbWVudHMuaHRtbCBbIFNraXAgXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166786</attachid>
            <date>2012-10-02 17:33:53 -0700</date>
            <delta_ts>2012-10-09 15:41:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20121002173306.patch</filename>
            <type>text/plain</type>
            <size>28475</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTA1OGRlZDcxNTUxMDJi
ODk1MjBlM2M1ZDFjOTg4ZGM0YTljZTRiYy4uMDNlYzkxYmRiOGJlZGU2ODFhZTA3ZGJjMWYwNWU2
OGIxN2ZkYzc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTEwLTAyICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIERvY3Vt
ZW50T3JkZXJlZE1hcCB0byBUcmVlU2NvcGUgdGhhdCBhbGxvd3MgYWNjZXNzaWJpbGl0eSB0bwor
ICAgICAgICBxdWlja2x5IG1hcCBmcm9tIGFuIGlkIHRvIHRoZSBsYWJlbCBmb3IgdGhhdCBpZC4g
VGhpcyBzcGVlZHMgdXAKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGU6OmxhYmVsRm9yRWxlbWVu
dCwgd2hpY2ggd2FzIGEgYm90dGxlbmVjayBpbiBDaHJvbWl1bQorICAgICAgICB3aGVuIGFjY2Vz
c2liaWxpdHkgd2FzIG9uLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eS90
aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnVwZGF0ZUZvckF0dHIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojp3aWxsTW9kaWZ5QXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgor
ICAgICAgICAoRWxlbWVudCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlU2NvcGU6OlRyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U2NvcGU6OmFkZExhYmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlOjpyZW1vdmVMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Omdl
dExhYmVsKToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFRyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OnNob3Vs
ZENhY2hlTGFiZWxzQnlGb3JBdHRyKToKKwogMjAxMi0xMC0wMiAgT2phbiBWYWZhaSAgPG9qYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIGlzTWFpblRocmVhZCgpIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBieSBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gaW4gZGVidWcgYnVpbGRzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuY3BwCmluZGV4IDBmOTQ4MzhlN2VjNTVhOTY5ZWRiMWU4MDUwMDAzOTc1ZDdlZWNjMTMuLmI1
YzQyZWY2MjU5NWZkNDc4MGU5Y2JjY2JiZDU4ZDU1MjMyODg4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
CkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKKyNpbmNsdWRlICJMYWJlbGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3Ry
aW5ncy5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
QEAgLTEwMDEsMTQgKzEwMDIsMTggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNH
ZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpIGNvbnN0CiAKIEhUTUxMYWJlbEVsZW1lbnQqIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29u
c3QKIHsKLSAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKTsKLSAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5s
ZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAg
ICAgaWYgKGxpc3QtPml0ZW0oaSktPmhhc1RhZ05hbWUobGFiZWxUYWcpKSB7Ci0gICAgICAgICAg
ICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQq
PihsaXN0LT5pdGVtKGkpKTsKLSAgICAgICAgICAgIGlmIChsYWJlbC0+Y29udHJvbCgpID09IGVs
ZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsOwotICAgICAgICB9CisgICAgaWYg
KCFlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgfHwgIXRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmlz
TGFiZWxhYmxlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBpZCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgaWYgKCFpZC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgaWYgKEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gZWxlbWVudC0+dHJlZVNj
b3BlKCktPmdldExhYmVsKGlkKSkKKyAgICAgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisK
KyAgICBmb3IgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsgcGFy
ZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocGFy
ZW50LT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MTGFiZWxFbGVtZW50Kj4ocGFyZW50KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAppbmRleCAzZjBlZGU1NjgwYTVhMThjNmQ1ODUxNjQzNzdmYmQzZDcx
MzA5ZTRmLi4wZTliMDk5NWQ0Y2EyNDk4OTFmMmQ2OGVkYzcwZmNjOWY4YTNiNzI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRnJhbWVP
d25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSFRNTFBhcnNlcklkaW9tcy5oIgpAQCAtOTU5LDYgKzk2MCwxMiBAQCBOb2RlOjpJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2Rl
KiBpbnNlcnRpbwogICAgIGlmICghbmFtZVZhbHVlLmlzTnVsbCgpKQogICAgICAgICB1cGRhdGVO
YW1lKG51bGxBdG9tLCBuYW1lVmFsdWUpOwogCisgICAgaWYgKGhhc1RhZ05hbWUobGFiZWxUYWcp
KSB7CisgICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSB0cmVlU2NvcGUoKTsKKyAgICAgICAgaWYg
KHNjb3BlLT5zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cigpKQorICAgICAgICAgICAgdXBkYXRl
Rm9yQXR0cihzY29wZSwgbnVsbEF0b20sIGZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cikpOworICAg
IH0KKwogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQogCkBAIC05OTEsNiArOTk4LDEyIEBA
IHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQp
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZVZhbHVlID0gZ2V0TmFtZUF0dHJpYnV0
ZSgpOwogICAgICAgICBpZiAoIW5hbWVWYWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgIHVwZGF0
ZU5hbWUobmFtZVZhbHVlLCBudWxsQXRvbSk7CisKKyAgICAgICAgaWYgKGhhc1RhZ05hbWUobGFi
ZWxUYWcpKSB7CisgICAgICAgICAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IHRyZWVTY29wZU9m
UGFyZW50KHRoaXMsIGluc2VydGlvblBvaW50KTsKKyAgICAgICAgICAgIGlmICh0cmVlU2NvcGUt
PnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyKCkpCisgICAgICAgICAgICAgICAgdXBkYXRlRm9y
QXR0cih0cmVlU2NvcGUsIGZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0ciksIG51bGxBdG9tKTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tKGluc2VydGlv
blBvaW50KTsKQEAgLTIxMDEsMTIgKzIxMTQsMzMgQEAgYm9vbCBFbGVtZW50OjpoYXNOYW1lZE5v
ZGVNYXAoKSBjb25zdAogfQogI2VuZGlmCiAKK3ZvaWQgRWxlbWVudDo6dXBkYXRlRm9yQXR0cihU
cmVlU2NvcGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHIsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmV3Rm9yQXR0cikKK3sKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShsYWJlbFRh
ZykpOworCisgICAgaWYgKCFpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChvbGRGb3JBdHRyID09IG5ld0ZvckF0dHIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
b2xkRm9yQXR0ci5pc0VtcHR5KCkpCisgICAgICAgIHNjb3BlLT5yZW1vdmVMYWJlbChvbGRGb3JB
dHRyLCBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4odGhpcykpOworICAgIGlmICghbmV3
Rm9yQXR0ci5pc0VtcHR5KCkpCisgICAgICAgIHNjb3BlLT5hZGRMYWJlbChuZXdGb3JBdHRyLCBz
dGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4odGhpcykpOworfQorCiB2b2lkIEVsZW1lbnQ6
OndpbGxNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKIHsKICAg
ICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpCiAgICAgICAgIHVwZGF0ZUlkKG9sZFZhbHVl
LCBuZXdWYWx1ZSk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6Om5hbWVBdHRyKQog
ICAgICAgICB1cGRhdGVOYW1lKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgZWxzZSBpZiAoaGFz
VGFnTmFtZShsYWJlbFRhZykgJiYgbmFtZSA9PSBIVE1MTmFtZXM6OmZvckF0dHIpIHsKKyAgICAg
ICAgVHJlZVNjb3BlKiBzY29wZSA9IHRyZWVTY29wZSgpOworICAgICAgICBpZiAoc2NvcGUtPnNo
b3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyKCkpCisgICAgICAgICAgICB1cGRhdGVGb3JBdHRyKHNj
b3BlLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIH0KIAogI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCiAgICAgaWYgKE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4g
cmVjaXBpZW50cyA9IE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JBdHRy
aWJ1dGVzTXV0YXRpb24odGhpcywgbmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBjNzA4Nzc1
YmEzNjhjZWY3N2UxN2ZhMmZiNzI5NmM1MzE0MWJlODZiLi5kZGUwZmFjN2M2OWIwMDViZTMxYmQy
YzMzMWM2YzEyZTVlY2Y5NjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTMxNiw2ICszMTYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVJZChjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKTsKICAgICB2b2lkIHVwZGF0ZUlkKFRyZWVTY29wZSos
IGNvbnN0IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpOwog
ICAgIHZvaWQgdXBkYXRlTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmV3TmFtZSk7CisgICAgdm9pZCB1cGRhdGVGb3JBdHRyKFRyZWVTY29wZSos
IGNvbnN0IEF0b21pY1N0cmluZyYgb2xkRm9yQXR0ciwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdG
b3JBdHRyKTsKIAogICAgIHZvaWQgd2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXdWYWx1ZSk7CiAgICAgdm9pZCB3aWxsUmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAK
aW5kZXggMjQ1M2E4ZjM0NTI2M2U1ODFmN2E0NzY2YjE5MDNlMTAzMmFmY2FiOC4uYjIyY2MzOTZi
YjczMGMwYzQ1MGVkZjAyMmIwNWMwYmJlZmVjZTFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1RyZWVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5j
cHAKQEAgLTM3LDEwICszNywxMiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRN
TEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJZFRhcmdldE9ic2VydmVyUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgorI2luY2x1ZGUgIk5vZGVMaXN0Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJU
cmVlU2NvcGVBZG9wdGVyLmgiCkBAIC01NSw2ICs1Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiBUcmVlU2NvcGU6OlRyZWVTY29wZShDb250YWluZXJOb2RlKiByb290Tm9kZSkKICAg
ICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCiAgICAgLCBtX3BhcmVudFRyZWVTY29wZSgwKQorICAg
ICwgbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cihmYWxzZSkKICAgICAsIG1faWRUYXJnZXRP
YnNlcnZlclJlZ2lzdHJ5KElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6Y3JlYXRlKCkpCiB7CiAg
ICAgQVNTRVJUKHJvb3ROb2RlKTsKQEAgLTE0NCw2ICsxNDcsMzUgQEAgSFRNTE1hcEVsZW1lbnQq
IFRyZWVTY29wZTo6Z2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50Kj4obV9pbWFnZU1hcHNCeU5hbWUuZ2V0RWxl
bWVudEJ5TWFwTmFtZShBdG9taWNTdHJpbmcobmFtZSkuaW1wbCgpLCB0aGlzKSk7CiB9CiAKK3Zv
aWQgVHJlZVNjb3BlOjphZGRMYWJlbChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHIsIEhUTUxM
YWJlbEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9sYWJlbHNCeUZvckF0dHIuYWRkKGZvckF0
dHIuaW1wbCgpLCBlbGVtZW50KTsKK30KKwordm9pZCBUcmVlU2NvcGU6OnJlbW92ZUxhYmVsKGNv
bnN0IEF0b21pY1N0cmluZyYgZm9yQXR0ciwgSFRNTExhYmVsRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICBtX2xhYmVsc0J5Rm9yQXR0ci5yZW1vdmUoZm9yQXR0ci5pbXBsKCksIGVsZW1lbnQpOwor
fQorCitIVE1MTGFiZWxFbGVtZW50KiBUcmVlU2NvcGU6OmdldExhYmVsKGNvbnN0IEF0b21pY1N0
cmluZyYgZm9yQXR0clZhbHVlKQoreworICAgIGlmICghbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9y
QXR0cikgeworICAgICAgICBtX3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyID0gdHJ1ZTsKKyAg
ICAgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gcm9vdE5vZGUoKS0+Z2V0RWxlbWVudHNCeVRh
Z05hbWUoImxhYmVsIik7CisgICAgICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAg
IEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+
KGxpc3QtPml0ZW0oaSkpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JWYWx1
ZSA9IGxhYmVsLT5mYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpOworICAgICAgICAgICAgaWYgKCFm
b3JWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYWRkTGFiZWwoZm9yVmFsdWUsIGxh
YmVsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmb3JBdHRyVmFsdWUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxl
bWVudCo+KG1fbGFiZWxzQnlGb3JBdHRyLmdldEVsZW1lbnRCeUlkKGZvckF0dHJWYWx1ZS5pbXBs
KCksIHRoaXMpKTsKK30KKwogRE9NU2VsZWN0aW9uKiBUcmVlU2NvcGU6OmdldFNlbGVjdGlvbigp
IGNvbnN0CiB7CiAgICAgaWYgKCFyb290Tm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKQpAQCAt
MjgzLDQgKzMxNSwzIEBAIFRyZWVTY29wZSogY29tbW9uVHJlZVNjb3BlKE5vZGUqIG5vZGVBLCBO
b2RlKiBub2RlQikKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmgKaW5kZXggZDk3NThiMDI4ZTRkNDU2Nzg0ZjQ1OTBlMDkwZTVhMjU3ZDI5NDVmMy4uMzNm
ODIyN2Q2OGZkMjE0NTgxY2NjM2UzMmQyODFmNDUxZTMwNDFiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2Nv
cGUuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250YWlu
ZXJOb2RlOwogY2xhc3MgRE9NU2VsZWN0aW9uOwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIEhUTUxM
YWJlbEVsZW1lbnQ7CiBjbGFzcyBIVE1MTWFwRWxlbWVudDsKIGNsYXNzIElkVGFyZ2V0T2JzZXJ2
ZXJSZWdpc3RyeTsKIGNsYXNzIE5vZGU7CkBAIC02Miw2ICs2MywxMyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOwogICAgIEhUTUxNYXBFbGVtZW50
KiBnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKKyAgICAvLyBMb29rIHVw
IGEgbGFiZWwgZWxlbWVudCBieSB0aGUgaWQgaW4gaXRzICJmb3IiIGF0dHJpYnV0ZSwgZm9yIGFj
Y2Vzc2liaWxpdHkuCisgICAgYm9vbCBzaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cigpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHI7IH0KKyAgICB2b2lkIGFkZExh
YmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0ciwgSFRNTExhYmVsRWxlbWVudCopOworICAg
IHZvaWQgcmVtb3ZlTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyLCBIVE1MTGFiZWxF
bGVtZW50Kik7CisgICAgLy8gbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0ciBpcyBzZXQgdG8g
dHJ1ZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZS4KKyAgICBIVE1M
TGFiZWxFbGVtZW50KiBnZXRMYWJlbChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHJWYWx1ZSk7
CisKICAgICBET01TZWxlY3Rpb24qIGdldFNlbGVjdGlvbigpIGNvbnN0OwogCiAgICAgLy8gRmlu
ZCBmaXJzdCBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KQEAgLTk0LDYgKzEwMiwxMCBAQCBw
cml2YXRlOgogICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBEb2N1
bWVudE9yZGVyZWRNYXAgbV9pbWFnZU1hcHNCeU5hbWU7CiAKKyAgICAvLyBMb29rIHVwIGEgbGFi
ZWwgZWxlbWVudCBieSB0aGUgaWQgaW4gaXRzICJmb3IiIGF0dHJpYnV0ZSwgZm9yIGFjY2Vzc2li
aWxpdHkuCisgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1fbGFiZWxzQnlGb3JBdHRyOworICAgIGJv
b2wgbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cjsKKwogICAgIE93blB0cjxJZFRhcmdldE9i
c2VydmVyUmVnaXN0cnk+IG1faWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OwogCiAgICAgbXV0YWJs
ZSBSZWZQdHI8RE9NU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxNTNiODI4MzM1NGI1NjlmYWQ4OWUyODdj
ZDBjYTc1ZWQ4MDRlZTQxLi5lYzdjNzBiZGVlNWI2M2IwZDQ0MmIyYWE1YWQwYThlYTUyMDMzMTA4
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTItMTAtMDIgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQVg6IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdoZW4gdGhlcmUg
YXJlIGEgbG90IG9mIERPTSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTc4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgdGl0bGVVSUVsZW1lbnQgaW4gdGhlIGNocm9taXVt
IHBvcnQgb2YgRFJULCBhbmQKKyAgICAgICAgZml4IGdldEFjY2Vzc2libGVFbGVtZW50QnlJZCBz
byB0aGF0IGl0IGVuc3VyZXMgdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaXMgdXAtdG8tZGF0
ZS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5j
cHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxi
YWNrKToKKwogMjAxMi0xMC0wMiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8cmFwaGFlbC5rdWJv
LmRhLmNvc3RhQGludGVsLmNvbT4KIAogICAgICAgICBSZW1vdmUgTVNZUy1yZWxhdGVkIGNoYW5n
ZXMgdG8gdGhlIGh0dHAgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4KZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCmluZGV4IDg5ZDVkNTg3NzBjNjFk
MWFhZTkxNjBiYTM0ZTQzNjc2NTE2YjA3YzIuLjBmZTRjMWY5OWU0NTk2ZDJkOGQ3NDc4YjIxMWYz
OWU2NWJmZjM3NjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ckNocm9taXVtLmNwcApAQCAtMTE3LDYgKzExNyw5IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQoY29uc3QK
ICAgICBpZiAobV9yb290RWxlbWVudC5pc051bGwoKSkKICAgICAgICAgbV9yb290RWxlbWVudCA9
IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpOwogCisgICAgaWYgKCFtX3Jvb3RFbGVt
ZW50LnVwZGF0ZUJhY2tpbmdTdG9yZUFuZENoZWNrVmFsaWRpdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKICAgICByZXR1cm4gZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShtX3Jv
b3RFbGVtZW50LCBXZWJTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCmluZGV4IGI3OTVh
ZWI4Mzc0MDRjNGU1ODhiZGJhZTM2M2U1ODI5NjA5OWE0MjUuLmVmOWZhNTBjNzA3NGVlYzdkZDEx
ZjRmNTU5NzVhN2MzZTg2Y2Y4ZTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRDaHJvbWl1bS5jcHAKQEAgLTczNCw3ICs3MzQsMTQgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG9iaiA9IGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS50aXRsZVVJRWxlbWVudCgpOworICAgIGlmIChvYmouaXNOdWxs
KCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICByZXN1bHQtPnNldCgqKG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUob2JqKS0+Z2V0QXND
cHBWYXJpYW50KCkpKTsKKwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNl
bGVjdGVkVGV4dFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JmFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJlNzBjMmM4MGJjNWI4NDkxMGViZmEzNmUyODlk
NWNiNDZiZDdjNWIuLmIyNDE0NjZlYjk0MzU3ZmYxM2RiMzU2NDY0MGVhNmFlMDk0NTJiMzggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0xMC0wMiAgRG9taW5pYyBNYXp6b25pICA8ZG1henpv
bmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbGFiZWxGb3JFbGVtZW50IGlzIHNsb3cgd2hl
biB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdHdvIG5ldyB0ZXN0cyBmb3IgdGl0bGVVSUVs
ZW1lbnQgdGhhdCBydW4gb24gYm90aCBNYWMgYW5kCisgICAgICAgIENocm9taXVtLiBPbmUgdGVz
dHMgY29ycmVjdG5lc3MsIHRoZSBvdGhlciB0ZXN0cyBzcGVlZC4KKworICAgICAgICBUaGUgdGVz
dCBmb3IgdGl0bGVVSUVsZW1lbnQgc3BlZWQgaXMgY2FyZWZ1bGx5IGRlc2lnbmVkIHNvIHRoYXQK
KyAgICAgICAgaXQgZmFpbHMgd2l0aG91dCB0aGlzIHBhdGNoIGFuZCBwYXNzZXMgd2l0aCBpdCwg
d2hpbGUgc3RpbGwKKyAgICAgICAgYmVpbmcgcm9idXN0IHRvIGRpZmZlcmVuY2VzIGluIGNwdSBz
cGVlZCwgcGxhdGZvcm0sIGV0Yy4gLSBlc3NlbnRpYWxseQorICAgICAgICBpdCBjb21wYXJlcyB0
aGUgc3BlZWQgb2YgZG9pbmcgYSBsYXJnZSBudW1iZXIgb2YgY2FsbHMgdG8gdGl0bGVVSUVsZW1l
bnQKKyAgICAgICAgdG8gdGhlIHRpbWUgaXQgdGFrZXMgdG8gYnVpbGQgdGhlIERPTSBvZiBhIHBh
Z2UsIGZvciBhIHJlbGF0aXZlbHkKKyAgICAgICAgbGFyZ2UgcGFnZSB3aXRoIGxvdHMgb2YgRE9N
IGVsZW1lbnRzLiBJdCBlbnN1cmVzIHRoYXQgdGl0bGVVSUVsZW1lbnQKKyAgICAgICAgZG9lc24n
dCBuZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBET00gdG8gbG9vayBmb3IgbGFiZWwgZWxlbWVudHMu
CisKKyAgICAgICAgRml4ZXMgb25lIHRlc3Qgc28gdGhhdCBpdCBwYXNzZXMgb24gQ2hyb21pdW0u
CisgICAgICAgIEVuYWJsZXMgb3RoZXIgdGVzdHMgdGhhdCBub3cgcGFzcyBvbiBDaHJvbWl1bS4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1s
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxl
bWVudC1jb3JyZWN0bmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Rp
dGxlLXVpLWVsZW1lbnQtc3BlZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxMi0xMC0wMiAgT2phbiBW
YWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBzb21lIG1vcmUgZmxha3kg
dGVzdHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0
ZmllbGQtdGl0bGUtdWkuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRl
eHRmaWVsZC10aXRsZS11aS5odG1sCmluZGV4IDE3MGU1NzAxYTA0NTg1ZGMwMWU4NmFjNjc5YjFl
MzQzMDgxNjNmMTkuLjEyZjgxZTMzOGRjYThiNWYxNGYwMWI4ODI2OGNkZjZiMjlmZjIxNWIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRs
ZS11aS5odG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVs
ZC10aXRsZS11aS5odG1sCkBAIC0yMSw4ICsyMSw3IEBACiAgICAgICAgICAgICBwYXNzLmZvY3Vz
KCk7CiAgICAgICAgICAgICB2YXIgdGl0bGVVSUVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5mb2N1c2VkRWxlbWVudC50aXRsZVVJRWxlbWVudCgpOwogICAgICAgICAgICAgdmFyIHRp
dGxlVGV4dCA9IHRpdGxlVUlFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsKLSAgICAgICAgICAgIHZh
ciBwYXR0ZXJuID0gIkFYVmFsdWU6IFBhc3N3b3JkIjsKLSAgICAgICAgICAgIGlmICh0aXRsZVRl
eHQuYWxsQXR0cmlidXRlcygpLmluZGV4T2YocGF0dGVybikgIT0gLTEpIHsKKyAgICAgICAgICAg
IGlmICh0aXRsZVRleHQuc3RyaW5nVmFsdWUgPT0gIkFYVmFsdWU6IFBhc3N3b3JkIikgewogICAg
ICAgICAgICAgICAgIHJlc3VsdC5pbm5lclRleHQgKz0gIlRlc3QgcGFzc2VkXG4iOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43NGFiNmI1ODI3ZWVhOTZjNTAyY2EzZDAyODFiMzQ3ZDU2OTAw
NzAzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11
aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI1IEBACitMYWJl
bCAxICAKK0xhYmVsIDIgIAorTGFiZWwgMyAgCisKK0xhYmVsIDUgIAorVGhpcyB0ZXN0cyB0aGF0
IHRpdGxlVUlFbGVtZW50IHdvcmtzIGNvcnJlY3RseSBldmVuIHdoZW4gdGhpbmdzIGNoYW5nZSBk
eW5hbWljYWxseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgY29udHJv
bDEudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsMSkgaXMgdHJ1ZQorUEFTUyBjb250cm9s
Mi50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWwyKSBpcyB0cnVlCitQQVNTIGhhc1RpdGxl
VUlFbGVtZW50KGNvbnRyb2wzKSBpcyBmYWxzZQorUEFTUyBjb250cm9sMy50aXRsZVVJRWxlbWVu
dCgpLmlzRXF1YWwobGFiZWwzKSBpcyB0cnVlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGNvbnRy
b2w0KSBpcyBmYWxzZQorUEFTUyBoYXNUaXRsZVVJRWxlbWVudChjb250cm9sNCkgaXMgdHJ1ZQor
UEFTUyBjb250cm9sNC50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwobGFiZWw0KSBpcyB0cnVlCitQ
QVNTIGhhc1RpdGxlVUlFbGVtZW50KGNvbnRyb2w0KSBpcyBmYWxzZQorUEFTUyBoYXNUaXRsZVVJ
RWxlbWVudChjb250cm9sNSkgaXMgZmFsc2UKK1BBU1MgY29udHJvbDUudGl0bGVVSUVsZW1lbnQo
KSAhPSBudWxsIGlzIHRydWUKK1BBU1MgY29udHJvbDUudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFs
KGxhYmVsNSkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUt
dWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90
aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDU0OGQwNTQ1YTUw
NWRlY2Q2YjI5NzBlOWIwY2VlYzc0ZmJlOWY0MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCkBAIC0w
LDAgKzEsMTAzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8ZGl2
IGlkPSJjb250YWluZXIiPgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsMSIgZm9yPSJjMSI+
TGFiZWwgMTwvbGFiZWw+CisgICAgPGlucHV0IGlkPSJjMSIgdHlwZT0idGV4dCI+CisgIDwvZGl2
PgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsMiI+CisgICAgICBMYWJlbCAyCisgICAgICA8
aW5wdXQgaWQ9ImMyIiB0eXBlPSJ0ZXh0Ij4KKyAgICA8L2xhYmVsPgorICA8L2Rpdj4KKworICA8
ZGl2PgorICAgIDxsYWJlbCBpZD0ibDMiPkxhYmVsIDM8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0i
YzMiIHR5cGU9InRleHQiPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxpbnB1dCBpZD0iYzQi
IHR5cGU9InRleHQiPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibDUiPgor
ICAgICAgTGFiZWwgNQorICAgIDwvbGFiZWw+CisgICAgPGlucHV0IGlkPSJjNSIgdHlwZT0idGV4
dCI+CisgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3MgY29y
cmVjdGx5IGV2ZW4gd2hlbiB0aGluZ3MgY2hhbmdlIGR5bmFtaWNhbGx5LiIpOworCitpZiAod2lu
ZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAg
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKKyAgICBmdW5jdGlvbiBoYXNUaXRsZVVJRWxlbWVu
dChheEVsZW1lbnQpIHsKKyAgICAgICAgdmFyIGxhYmVsMSA9IGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgibDEiKTsKKyAgICAgICAgdmFyIHRpdGxlVUlFbGVt
ZW50ID0gYXhFbGVtZW50LnRpdGxlVUlFbGVtZW50KCk7CisgICAgICAgIGlmICh0aXRsZVVJRWxl
bWVudCA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
dGl0bGVVSUVsZW1lbnQucm9sZSA9PSBsYWJlbDEucm9sZTsKKyAgICB9CisKKyAgICB2YXIgbGFi
ZWwxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsMSIp
OworICAgIHZhciBjb250cm9sMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVF
bGVtZW50QnlJZCgiYzEiKTsKKyAgICBzaG91bGRCZSgiY29udHJvbDEudGl0bGVVSUVsZW1lbnQo
KS5pc0VxdWFsKGxhYmVsMSkiLCAidHJ1ZSIpOworCisgICAgdmFyIGxhYmVsMiA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgibDIiKTsKKyAgICB2YXIgY29u
dHJvbDIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImMy
Iik7CisgICAgc2hvdWxkQmUoImNvbnRyb2wyLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChsYWJl
bDIpIiwgInRydWUiKTsKKworICAgIC8vIFRlc3QgY2hhbmdpbmcgdGhlICJmb3IiIGF0dHJpYnV0
ZSBkeW5hbWljYWxseS4KKyAgICB2YXIgbGFiZWwzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsMyIpOworICAgIHZhciBjb250cm9sMyA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiYzMiKTsKKyAgICBzaG91bGRC
ZSgiaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDMpIiwgImZhbHNlIik7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImwzIikuc2V0QXR0cmlidXRlKCJmb3IiLCAiYzMiKTsKKyAgICBzaG91
bGRCZSgiY29udHJvbDMudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVsMykiLCAidHJ1ZSIp
OworCisgICAgLy8gVGVzdCB1bmF0dGFjaGVkIGxhYmVsIGVsZW1lbnQgdGhhdCdzIHN1YnNlcXVl
bnRseSBhdHRhY2hlZC4KKyAgICB2YXIgY29udHJvbDQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImM0Iik7CisgICAgdmFyIGxhYmVsNEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOworICAgIGxhYmVsNEVsZW1lbnQuaWQgPSAi
bDQiOworICAgIGxhYmVsNEVsZW1lbnQuc2V0QXR0cmlidXRlKCJmb3IiLCAiYzQiKTsKKyAgICBs
YWJlbDRFbGVtZW50LmlubmVyVGV4dCA9ICJMYWJlbCA0IjsKKyAgICBzaG91bGRCZSgiaGFzVGl0
bGVVSUVsZW1lbnQoY29udHJvbDQpIiwgImZhbHNlIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNvbnRhaW5lciIpLmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQpOworCisgICAgdmFy
IGxhYmVsNCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgi
bDQiKTsKKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQoY29udHJvbDQpIiwgInRydWUi
KTsKKyAgICBzaG91bGRCZSgiY29udHJvbDQudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGxhYmVs
NCkiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgbGFiZWwg
aXMgZGV0YWNoZWQuCisgICAgbGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxk
KGxhYmVsNEVsZW1lbnQpOworICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChjb250cm9s
NCkiLCAiZmFsc2UiKTsKKworICAgIC8vIFRlc3QgbGFiZWwgdGhhdCBnZXRzIGEgY29udHJvbCBy
ZXBhcmVudGVkIGludG8gaXQuCisgICAgdmFyIGNvbnRyb2w1ID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjNSIpOworICAgIHNob3VsZEJlKCJoYXNUaXRs
ZVVJRWxlbWVudChjb250cm9sNSkiLCAiZmFsc2UiKTsKKworICAgIHZhciBjb250cm9sNUVsZW1l
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYzUiKTsKKyAgICB2YXIgbGFiZWw1RWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsNSIpOworICAgIGNvbnRyb2w1RWxlbWVudC5w
YXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGNvbnRyb2w1RWxlbWVudCk7CisgICAgbGFiZWw1RWxl
bWVudC5hcHBlbmRDaGlsZChjb250cm9sNUVsZW1lbnQpOworCisgICAgY29udHJvbDUgPSBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImM1Iik7CisgICAgc2hv
dWxkQmUoImNvbnRyb2w1LnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCIsICJ0cnVlIik7CisgICAg
dmFyIGxhYmVsNSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJ
ZCgibDUiKTsKKyAgICBzaG91bGRCZSgiY29udHJvbDUudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFs
KGxhYmVsNSkiLCAidHJ1ZSIpOworfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1l
bnQtc3BlZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11
aS1lbGVtZW50LXNwZWVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTIwOWFmOTQxZDA1ZmJl
MmE3MjdhMzUwNjk4Y2E1Nzc4YjA4OWEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDEyIEBACisKK1RoaXMgdGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCBkb2Vzbid0IHRha2Ug
YSByaWRpY3Vsb3VzbHkgbG9uZyB0aW1lIHRvIHJ1biB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBs
YWJlbCBlbGVtZW50cyBvbiBhIHBhZ2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIGF4Q29udHJvbENvbnRhaW5lci5jaGlsZHJlbkNvdW50IGlzIDUwMAorUEFTUyBRdWVy
aWVkIHRpdGxlVUlFbGVtZW50IGluIGxlc3MgdGltZSB0aGFuIGl0IHRvb2sgdG8gYnVpbGQgdGhl
IERPTS4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQt
c3BlZWQuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1z
cGVlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0ZGVlYWEyNjFmMTg4OTQ0YTg0OTRlNzAwNzExM2IyMjg3
NTU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxl
LXVpLWVsZW1lbnQtc3BlZWQuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKworPGRpdiBpZD0ibGFiZWxDb250YWluZXIiPgorPC9kaXY+
Cis8ZGl2IGlkPSJjb250cm9sQ29udGFpbmVyIiBhcmlhLWxhYmVsPSJjb250cm9sIGNvbnRhaW5l
ciI+Cis8L2Rpdj4KKzxkaXYgaWQ9Imp1bmtDb250YWluZXIiIGhpZGRlbj4KKzwvZGl2PgorCis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
cyB0aGF0IHRpdGxlVUlFbGVtZW50IGRvZXNuJ3QgdGFrZSBhIHJpZGljdWxvdXNseSBsb25nIHRp
bWUgdG8gcnVuIHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIGxhYmVsIGVsZW1lbnRzIG9uIGEgcGFn
ZS4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcikgeworICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworICAgIGZ1
bmN0aW9uIGVuZHNXaXRoKHN0ciwgc3VmZml4KSB7CisgICAgICAgIHJldHVybiBzdHIuc3Vic3Ry
KHN0ci5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSA9PSBzdWZmaXg7CisgICAgfQorCisgICAgdmFy
IGxhYmVsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsQ29udGFpbmVy
Jyk7CisgICAgdmFyIGNvbnRyb2xDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29udHJvbENvbnRhaW5lcicpOworICAgIHZhciBqdW5rQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2p1bmtDb250YWluZXInKTsKKworICAgIHZhciBsYWJlbHMgPSBbXTsKKyAg
ICB2YXIgY29udHJvbHMgPSBbXTsKKworICAgIHZhciBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpOwor
CisgICAgLy8gQ3JlYXRlIGEgYnVuY2ggb2YgbGFiZWxzLCBlYWNoIG9mIHRoZSBmb3JtOgorICAg
IC8vICAgPGxhYmVsIGZvcj0nYzAnPkxhYmVsIDA8L2xhYmVsPgorICAgIC8vIENyZWF0ZSBjb3Jy
ZXNwb25kaW5nIGNvbnRyb2xzLCBlYWNoIG9mIHRoaXMgZm9ybToKKyAgICAvLyAgIDxpbnB1dCBp
ZD0nYzAnIHR5cGU9J3RleHQnPgorICAgIHZhciBjb3VudCA9IDUwMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnbGFiZWwnKTsKKyAgICAgICAgbGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCAn
YycgKyBpKTsKKyAgICAgICAgbGFiZWwuaW5uZXJUZXh0ID0gJ0xhYmVsICcgKyBpOworICAgICAg
ICBsYWJlbHMucHVzaChsYWJlbCk7CisgICAgICAgIGxhYmVsQ29udGFpbmVyLmFwcGVuZENoaWxk
KGxhYmVsKTsKKworICAgICAgICB2YXIgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2lucHV0Jyk7CisgICAgICAgIGNvbnRyb2wudHlwZSA9ICd0ZXh0JzsKKyAgICAgICAgY29udHJv
bC5pZCA9ICdjJyArIGk7CisgICAgICAgIGNvbnRyb2xzLnB1c2goY29udHJvbCk7CisgICAgICAg
IGNvbnRyb2xDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbCk7CisgICAgfQorCisgICAgLy8g
R2V0IHRoZSBhY2Nlc3NpYmlsaXR5IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb250cm9s
IGNvbnRhaW5lci4KKyAgICB2YXIgYXhDb250cm9sQ29udGFpbmVyID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCdjb250cm9sQ29udGFpbmVyJyk7CisgICAg
c2hvdWxkQmUoImF4Q29udHJvbENvbnRhaW5lci5jaGlsZHJlbkNvdW50IiwgIiIgKyBjb3VudCk7
CisKKyAgICAvLyBOb3cgYWRkIG1vcmUganVuayB0byB0aGUgcGFnZS4gVGhpcyBpcyB0byBtYWtl
IHN1cmUgdGhhdCB0aXRsZVVJRWxlbWVudCBkb2Vzbid0IHRha2UKKyAgICAvLyB0aW1lIHByb3Bv
cnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIERPTSBlbGVtZW50cyBvbiB0aGUgcGFnZSBhbnltb3Jl
LgorICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICB2YXIgZGl2ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICBkaXYuaW5uZXJIVE1MID0gIjxwPjwv
cD48cD48L3A+PHA+PC9wPjxwPjwvcD48cD48L3A+IjsKKyAgICAgIGp1bmtDb250YWluZXIuYXBw
ZW5kQ2hpbGQoZGl2KTsKKyAgICB9CisKKyAgICAvLyBTYXZlIHRoZSB0b3RhbCB0aW1lIHRvIGJ1
aWxkIHRoZSBET00uCisgICAgdmFyIG1pZFRpbWUgPSBuZXcgRGF0ZSgpOworICAgIHZhciBidWls
ZFRpbWUgPSBtaWRUaW1lIC0gc3RhcnRUaW1lOworCisgICAgLy8gTm93IGNhbGwgdGl0bGVVSUVs
ZW1lbnQgb24gZWFjaCBjb250cm9sLCBhbmQgY2hlY2sgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBy
ZXN1bHQuCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHZh
ciBheENvbnRyb2wgPSBheENvbnRyb2xDb250YWluZXIuY2hpbGRBdEluZGV4KGkpOworICAgICAg
ICB2YXIgYXhUaXRsZVVJRWxlbWVudCA9IGF4Q29udHJvbC50aXRsZVVJRWxlbWVudCgpOworICAg
ICAgICBpZiAoIWF4VGl0bGVVSUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGRlYnVnKCJGQUlMOiBj
b250cm9sICIgKyBpICsgIiBoYXMgbm8gdGl0bGVVSUVsZW1lbnQuIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGl0bGUgPSBheFRpdGxlVUlFbGVtZW50LmNo
aWxkQXRJbmRleCgwKS5zdHJpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCFlbmRzV2l0aCh0aXRsZSwg
IkxhYmVsICIgKyBpKSkgeworICAgICAgICAgICAgZGVidWcoIkZBSUw6IGNvbnRyb2wgIiArIGkg
KyAiIHRpdGxlVUlFbGVtZW50IHZhbHVlIGlzICciICsKKyAgICAgICAgICAgICAgICAgIHRpdGxl
ICsgIicgLCBleHBlY3RpbmcgaXQgdG8gZW5kIHdpdGggJ0xhYmVsICIgKyBpICsgIiciKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTWVhc3VyZSB0aGUg
dGltZSBpdCB0b29rIHRvIGNhbGwgdGl0bGVVSUVsZW1lbnQgb24gZWFjaCBjb250cm9sCisgICAg
dmFyIGVuZFRpbWUgPSBuZXcgRGF0ZSgpOworICAgIHZhciB0aXRsZVVJRWxlbWVudFRpbWUgPSBl
bmRUaW1lIC0gbWlkVGltZTsKKworICAgIC8vIElmIHRoaXMgaXMgd29ya2luZyBjb3JyZWN0bHks
IGl0IHNob3VsZCB0YWtlIChzaWduaWZpY2FudGx5KSBsZXNzCisgICAgLy8gdGltZSB0byBxdWVy
eSB0aXRsZVVJRWxlbWVudCBvbiBhbGwgb2YgdGhlIGNvbnRyb2xzIHRoYW4gdGhlIHRpbWUKKyAg
ICAvLyB0byBidWlsZCB0aGUgcGFnZSBET00uIFdpdGggdGhlIHByZXZpb3VzIE8obikgYWxnb3Jp
dGhtIGZvcgorICAgIC8vIHRpdGxlVUlFbGVtZW50LCBpdCB0b29rIHNpZ25pZmljYW50bHkgbG9u
Z2VyLgorICAgIGlmICh0aXRsZVVJRWxlbWVudFRpbWUgPCBidWlsZFRpbWUpIHsKKyAgICAgIGRl
YnVnKCJQQVNTIFF1ZXJpZWQgdGl0bGVVSUVsZW1lbnQgaW4gbGVzcyB0aW1lIHRoYW4gaXQgdG9v
ayB0byBidWlsZCB0aGUgRE9NLiIpOworICAgIH0gZWxzZSB7CisgICAgICBkZWJ1ZygiRkFJTCBU
b29rICIgKyBidWlsZFRpbWUgKyAiIG1zIHRvIGJ1aWxkIHRoZSBET00gYW5kICIgKworICAgICAg
ICAgICAgdGl0bGVVSUVsZW1lbnRUaW1lICsgIiBtcyB0byBxdWVyeSB0aXRsZVVJRWxlbWVudCBv
biBlYWNoIGNvbnRyb2wuIik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBsYWJlbHMgZnJv
bSB0aGUgcGFnZSBzbyB0aGUgdGV4dCBkdW1wIG9mIHRoZSBwYWdlIGlzbid0IGdpZ2FudGljLgor
ICAgIGxhYmVsQ29udGFpbmVyLmlubmVySFRNTCA9ICIiOworfQorCis8L3NjcmlwdD4KKworPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucwppbmRleCAxYTIyNWY2MmY0MjdlMzQzZGVlODllNmExYjQwOTcxYjYxZjU3
MzhmLi4wN2RkZDc1OTgyOTc0MTJlYTA3MjdkMzg1NGQ0MDU1YTk1MTZlMTA3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEzNDQsNyAr
MTM0NCw2IEBAIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2FyaWEtYWN0aXZlZGVzY2Vu
ZGFudC1jcmFzaC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9h
cmlhLWNvbWJvYm94Lmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5
L2FyaWEtY29udHJvbHMtd2l0aC10YWJzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L2FyaWEtZmFsbGJhY2stcm9sZXMuaHRtbCBbIFNraXAgXQotY3JidWcuY29t
LzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tdXBkYXRlLmh0bWwgWyBTa2lwIF0KIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2FyaWEtaW52YWxpZC5odG1sIFsgU2tpcCBdCiBj
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWxhYmVsbGVkYnktb3ZlcnJpZGVzLWxh
YmVsLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2FyaWEtbGlu
ay1zdXBwb3J0cy1wcmVzcy5odG1sIFsgU2tpcCBdCkBAIC0xMzY5LDE0ICsxMzY4LDExIEBAIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2xhbmd1YWdlLWF0dHJpYnV0ZS5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9sZWdlbmQuaHRtbCBbIFNraXAgXQog
Y3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbGlzdHMuaHRtbCBbIFNraXAgXQogY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbWVkaWEtZWxlbWVudC5odG1sIFsgU2tpcCBdCi1jcmJ1
Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9ub24tZGF0YS10YWJsZS1jZWxsLXRpdGxlLXVpLWVs
ZW1lbnQuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvb25jbGlj
ay1oYW5kbGVycy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9w
bGFjZWhvbGRlci5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9w
bHVnaW4uaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcmFkaW8t
YnV0dG9uLWNoZWNrYm94LXNpemUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vz
c2liaWxpdHkvcmFkaW8tYnV0dG9uLWdyb3VwLW1lbWJlcnMuaHRtbCBbIFNraXAgXQotY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcmFkaW8tYnV0dG9uLXRpdGxlLWxhYmVsLmh0bWwgWyBT
a2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0
bGUtdWkuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUt
YXR0cmlidXRlcy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90
YWJsZS1jZWxsLXNwYW5zLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmls
aXR5L3RhYmxlLWNlbGxzLmh0bWwgWyBTa2lwIF0KQEAgLTEzODUsNyArMTM4MSw2IEBAIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLW9uZS1jZWxsLmh0bWwgWyBTa2lwIF0KIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLXNlY3Rpb25zLmh0bWwgWyBTa2lwIF0K
IGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLXdpdGgtYXJpYS1yb2xlLmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLXdpdGgtcnVsZXMu
aHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGgtYXMtdGl0bGUt
dWkuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdHJhbnNmb3Jt
ZWQtZWxlbWVudC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS92
aXNpYmxlLWVsZW1lbnRzLmh0bWwgWyBTa2lwIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167864</attachid>
            <date>2012-10-09 15:41:35 -0700</date>
            <delta_ts>2012-10-09 23:42:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20121009154035.patch</filename>
            <type>text/plain</type>
            <size>30732</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTIwYmQzOWY3NGY0NDY0
NmQ1NTM1Mzk4OWM2ZmEwZDBlNWY1ZjZhYS4uYWY5ZWRhYWYxOTRkZTZlNTExZjNlYzE4ZDEyYzEz
ODI5Y2RiNmU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTEwLTAyICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIERvY3Vt
ZW50T3JkZXJlZE1hcCB0byBUcmVlU2NvcGUgdGhhdCBhbGxvd3MgYWNjZXNzaWJpbGl0eSB0bwor
ICAgICAgICBxdWlja2x5IG1hcCBmcm9tIGFuIGlkIHRvIHRoZSBsYWJlbCBmb3IgdGhhdCBpZC4g
VGhpcyBzcGVlZHMgdXAKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGU6OmxhYmVsRm9yRWxlbWVu
dCwgd2hpY2ggd2FzIGEgYm90dGxlbmVjayBpbiBDaHJvbWl1bQorICAgICAgICB3aGVuIGFjY2Vz
c2liaWxpdHkgd2FzIG9uLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eS90
aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnVwZGF0ZUxhYmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAg
ICAgICAgKEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNj
b3BlOjphZGRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVTY29wZTo6cmVtb3ZlTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpnZXRM
YWJlbCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpzaG91bGRD
YWNoZUxhYmVsc0J5Rm9yQXR0cik6CisKIDIwMTItMTAtMDggIEVyaWMgU2VpZGVsICA8ZXJpY0B3
ZWJraXQub3JnPgogCiAgICAgICAgIElubGluZSBsb2dpY2FsSGVpZ2h0Rm9yUm93U2l6aW5nIHRv
IHNoYXZlIGFub3RoZXIgMi0zJSBvZmYgcm9ib2hvcm5ldCdzIHJlc2l6ZWNvbC5odG1sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCmluZGV4IDBmOTQ4MzhlN2VjNTVhOTY5ZWRiMWU4MDUwMDAzOTc1ZDdlZWNjMTMu
LmI1YzQyZWY2MjU5NWZkNDc4MGU5Y2JjY2JiZDU4ZDU1MjMyODg4MzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKKyNpbmNsdWRlICJMYWJlbGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKQEAgLTEwMDEsMTQgKzEwMDIsMTggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
aXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpIGNvbnN0CiAKIEhUTUxMYWJlbEVsZW1lbnQqIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKIHsKLSAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBlbGVtZW50LT5kb2N1bWVudCgp
LT5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKTsKLSAgICB1bnNpZ25lZCBsZW4gPSBsaXN0
LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAg
ICAgICAgaWYgKGxpc3QtPml0ZW0oaSktPmhhc1RhZ05hbWUobGFiZWxUYWcpKSB7Ci0gICAgICAg
ICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1l
bnQqPihsaXN0LT5pdGVtKGkpKTsKLSAgICAgICAgICAgIGlmIChsYWJlbC0+Y29udHJvbCgpID09
IGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsOwotICAgICAgICB9CisgICAg
aWYgKCFlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgfHwgIXRvSFRNTEVsZW1lbnQoZWxlbWVudCkt
PmlzTGFiZWxhYmxlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgaWYgKCFpZC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgaWYgKEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gZWxlbWVudC0+dHJl
ZVNjb3BlKCktPmdldExhYmVsKGlkKSkKKyAgICAgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9
CisKKyAgICBmb3IgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsg
cGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBpZiAo
cGFyZW50LT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4ocGFyZW50KTsKICAgICB9CiAKICAgICByZXR1cm4gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBkZDEzMTY4ZDljNmQyNTk0ZWY3ODRlYzdjMzJiY2Y0
ZTNhMzg4N2ZjLi5kMzdmMjZjYTg3MGViYTYxYzNiYzc5NTc2YWQxYTNhYjBiNjBkZTUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgpAQCAtOTU5LDYgKzk2MCwxMiBAQCBOb2RlOjpJbnNl
cnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJO
b2RlKiBpbnNlcnRpbwogICAgIGlmICghbmFtZVZhbHVlLmlzTnVsbCgpKQogICAgICAgICB1cGRh
dGVOYW1lKG51bGxBdG9tLCBuYW1lVmFsdWUpOwogCisgICAgaWYgKGhhc1RhZ05hbWUobGFiZWxU
YWcpKSB7CisgICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSB0cmVlU2NvcGUoKTsKKyAgICAgICAg
aWYgKHNjb3BlLT5zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cigpKQorICAgICAgICAgICAgdXBk
YXRlTGFiZWwoc2NvcGUsIG51bGxBdG9tLCBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpKTsKKyAg
ICB9CisKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KIApAQCAtOTkxLDYgKzk5OCwxMiBA
QCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50
KQogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVWYWx1ZSA9IGdldE5hbWVBdHRyaWJ1
dGUoKTsKICAgICAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICB1cGRh
dGVOYW1lKG5hbWVWYWx1ZSwgbnVsbEF0b20pOworCisgICAgICAgIGlmIChoYXNUYWdOYW1lKGxh
YmVsVGFnKSkgeworICAgICAgICAgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSB0cmVlU2NvcGVP
ZlBhcmVudCh0aGlzLCBpbnNlcnRpb25Qb2ludCk7CisgICAgICAgICAgICBpZiAodHJlZVNjb3Bl
LT5zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cigpKQorICAgICAgICAgICAgICAgIHVwZGF0ZUxh
YmVsKHRyZWVTY29wZSwgZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKSwgbnVsbEF0b20pOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9u
UG9pbnQpOwpAQCAtMjEwNCwxMiArMjExNywzMyBAQCBib29sIEVsZW1lbnQ6Omhhc05hbWVkTm9k
ZU1hcCgpIGNvbnN0CiB9CiAjZW5kaWYKIAordm9pZCBFbGVtZW50Ojp1cGRhdGVMYWJlbChUcmVl
U2NvcGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVZhbHVlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5ld0ZvckF0dHJpYnV0ZVZhbHVlKQoreworICAgIEFTU0VSVCho
YXNUYWdOYW1lKGxhYmVsVGFnKSk7CisKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG9sZEZvckF0dHJpYnV0ZVZhbHVlID09IG5ld0ZvckF0dHJpYnV0
ZVZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW9sZEZvckF0dHJpYnV0ZVZhbHVl
LmlzRW1wdHkoKSkKKyAgICAgICAgc2NvcGUtPnJlbW92ZUxhYmVsKG9sZEZvckF0dHJpYnV0ZVZh
bHVlLCBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4odGhpcykpOworICAgIGlmICghbmV3
Rm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBzY29wZS0+YWRkTGFiZWwobmV3
Rm9yQXR0cmlidXRlVmFsdWUsIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPih0aGlzKSk7
Cit9CisKIHZvaWQgRWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5ld1ZhbHVlKQogewogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkKICAgICAg
ICAgdXBkYXRlSWQob2xkVmFsdWUsIG5ld1ZhbHVlKTsKICAgICBlbHNlIGlmIChuYW1lID09IEhU
TUxOYW1lczo6bmFtZUF0dHIpCiAgICAgICAgIHVwZGF0ZU5hbWUob2xkVmFsdWUsIG5ld1ZhbHVl
KTsKKyAgICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6Zm9yQXR0ciAmJiBoYXNUYWdOYW1l
KGxhYmVsVGFnKSkgeworICAgICAgICBUcmVlU2NvcGUqIHNjb3BlID0gdHJlZVNjb3BlKCk7Cisg
ICAgICAgIGlmIChzY29wZS0+c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHIoKSkKKyAgICAgICAg
ICAgIHVwZGF0ZUxhYmVsKHNjb3BlLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIH0KIAogI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgaWYgKE93blB0cjxNdXRhdGlvbk9ic2Vy
dmVySW50ZXJlc3RHcm91cD4gcmVjaXBpZW50cyA9IE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdy
b3VwOjpjcmVhdGVGb3JBdHRyaWJ1dGVzTXV0YXRpb24odGhpcywgbmFtZSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAppbmRleCBjNzA4Nzc1YmEzNjhjZWY3N2UxN2ZhMmZiNzI5NmM1MzE0MWJlODZiLi5iZWJl
NDY1M2I4MTY4MWZkMDE4ZmUxZDVmMGUzZjRlOWI4ODQ3YjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
QEAgLTMxNiw2ICszMTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVJZChjb25zdCBBdG9t
aWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKTsKICAgICB2b2lkIHVw
ZGF0ZUlkKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmV3SWQpOwogICAgIHZvaWQgdXBkYXRlTmFtZShjb25zdCBBdG9taWNTdHJpbmcm
IG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSk7CisgICAgdm9pZCB1cGRhdGVM
YWJlbChUcmVlU2NvcGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVZhbHVl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0ZvckF0dHJpYnV0ZVZhbHVlKTsKIAogICAgIHZvaWQg
d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CiAgICAgdm9pZCB3
aWxsUmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKaW5kZXggMjQ1M2E4ZjM0NTI2M2U1
ODFmN2E0NzY2YjE5MDNlMTAzMmFmY2FiOC4uODBmOWRmMjg2Mzk0MWU2ZTQ5NzRiMTFkZmU4ZTVm
ODBjZjUyN2M2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmgiCkBAIC01NSw2ICs1Niw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBUcmVlU2NvcGU6OlRyZWVTY29wZShDb250YWlu
ZXJOb2RlKiByb290Tm9kZSkKICAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCiAgICAgLCBtX3Bh
cmVudFRyZWVTY29wZSgwKQorICAgICwgbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cihmYWxz
ZSkKICAgICAsIG1faWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5KElkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeTo6Y3JlYXRlKCkpCiB7CiAgICAgQVNTRVJUKHJvb3ROb2RlKTsKQEAgLTE0NCw2ICsxNDYs
MzYgQEAgSFRNTE1hcEVsZW1lbnQqIFRyZWVTY29wZTo6Z2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5n
JiB1cmwpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50Kj4obV9p
bWFnZU1hcHNCeU5hbWUuZ2V0RWxlbWVudEJ5TWFwTmFtZShBdG9taWNTdHJpbmcobmFtZSkuaW1w
bCgpLCB0aGlzKSk7CiB9CiAKK3ZvaWQgVHJlZVNjb3BlOjphZGRMYWJlbChjb25zdCBBdG9taWNT
dHJpbmcmIGZvckF0dHIsIEhUTUxMYWJlbEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9sYWJl
bHNCeUZvckF0dHIuYWRkKGZvckF0dHIuaW1wbCgpLCBlbGVtZW50KTsKK30KKwordm9pZCBUcmVl
U2NvcGU6OnJlbW92ZUxhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0ciwgSFRNTExhYmVs
RWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX2xhYmVsc0J5Rm9yQXR0ci5yZW1vdmUoZm9yQXR0
ci5pbXBsKCksIGVsZW1lbnQpOworfQorCitIVE1MTGFiZWxFbGVtZW50KiBUcmVlU2NvcGU6Omdl
dExhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0clZhbHVlKQoreworICAgIGlmICghbV9z
aG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cikgeworICAgICAgICBtX3Nob3VsZENhY2hlTGFiZWxz
QnlGb3JBdHRyID0gdHJ1ZTsKKyAgICAgICAgTm9kZSogcm9vdCA9IHJvb3ROb2RlKCk7CisgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKHJvb3QpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShsYWJlbFRh
ZykpIHsKKyAgICAgICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19j
YXN0PEhUTUxMYWJlbEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGZvclZhbHVlID0gbGFiZWwtPmZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cik7Cisg
ICAgICAgICAgICAgICAgaWYgKCFmb3JWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIGFkZExhYmVsKGZvclZhbHVlLCBsYWJlbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoZm9yQXR0clZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihtX2xhYmVsc0J5
Rm9yQXR0ci5nZXRFbGVtZW50QnlJZChmb3JBdHRyVmFsdWUuaW1wbCgpLCB0aGlzKSk7Cit9CisK
IERPTVNlbGVjdGlvbiogVHJlZVNjb3BlOjpnZXRTZWxlY3Rpb24oKSBjb25zdAogewogICAgIGlm
ICghcm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKQEAgLTI4Myw0ICszMTUsMyBAQCBU
cmVlU2NvcGUqIGNvbW1vblRyZWVTY29wZShOb2RlKiBub2RlQSwgTm9kZSogbm9kZUIpCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCmluZGV4IGQ5NzU4
YjAyOGU0ZDQ1Njc4NGY0NTkwZTA5MGU1YTI1N2QyOTQ1ZjMuLmE1YzQ5NjFkYjRkMjQ0NmYxMWUz
M2M1ZjQ4ZDkwNTkyNzU5ZTg2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVl
U2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKQEAgLTM1LDYgKzM1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIERP
TVNlbGVjdGlvbjsKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBIVE1MTGFiZWxFbGVtZW50OwogY2xh
c3MgSFRNTE1hcEVsZW1lbnQ7CiBjbGFzcyBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk7CiBjbGFz
cyBOb2RlOwpAQCAtNjIsNiArNjMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSW1hZ2VN
YXAoSFRNTE1hcEVsZW1lbnQqKTsKICAgICBIVE1MTWFwRWxlbWVudCogZ2V0SW1hZ2VNYXAoY29u
c3QgU3RyaW5nJiB1cmwpIGNvbnN0OwogCisgICAgLy8gTG9vayB1cCBhIGxhYmVsIGVsZW1lbnQg
YnkgdGhlIGlkIGluIGl0cyAiZm9yIiBhdHRyaWJ1dGUsIGZvciBhY2Nlc3NpYmlsaXR5LgorICAg
IGJvb2wgc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHIoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZENhY2hlTGFiZWxzQnlGb3JBdHRyOyB9CisgICAgdm9pZCBhZGRMYWJlbChjb25zdCBBdG9taWNT
dHJpbmcmIGZvckF0dHIsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUxhYmVs
KGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0ciwgSFRNTExhYmVsRWxlbWVudCopOworICAgIC8v
IG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHIgaXMgc2V0IHRvIHRydWUgd2hlbiB0aGlzIG1l
dGhvZCBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuCisgICAgSFRNTExhYmVsRWxlbWVudCogZ2V0
TGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyVmFsdWUpOworCiAgICAgRE9NU2VsZWN0
aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIC8vIEZpbmQgZmlyc3QgYW5jaG9yIHdp
dGggdGhlIGdpdmVuIG5hbWUuCkBAIC05NCw2ICsxMDIsOSBAQCBwcml2YXRlOgogICAgIERvY3Vt
ZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9p
bWFnZU1hcHNCeU5hbWU7CiAKKyAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9sYWJlbHNCeUZvckF0
dHI7CisgICAgYm9vbCBtX3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyOworCiAgICAgT3duUHRy
PElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeT4gbV9pZFRhcmdldE9ic2VydmVyUmVnaXN0cnk7CiAK
ICAgICBtdXRhYmxlIFJlZlB0cjxET01TZWxlY3Rpb24+IG1fc2VsZWN0aW9uOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDkzZDYwNzE0NjI3OTJk
MjFiZDJlZWRiYTFhZGY5NDM2MjI1NjA1YzIuLjk5MTRjYjJiYTc0Yzc2NTQzYTA1YTExMDM2MTFm
NWVjNGNkMTQ0NDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMC0wMiAgRG9taW5pYyBNYXp6b25pICA8ZG1h
enpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbGFiZWxGb3JFbGVtZW50IGlzIHNsb3cg
d2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgyNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0aXRsZVVJRWxlbWVudCBpbiB0
aGUgY2hyb21pdW0gcG9ydCBvZiBEUlQsIGFuZAorICAgICAgICBmaXggZ2V0QWNjZXNzaWJsZUVs
ZW1lbnRCeUlkIHNvIHRoYXQgaXQgZW5zdXJlcyB0aGUgYmFja2luZyBzdG9yZQorICAgICAgICBp
cyB1cC10by1kYXRlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dENocm9taXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlF
bGVtZW50Q2FsbGJhY2spOgorCiAyMDEyLTEwLTA4ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIHJlc3VsdHMuaHRtbCBhbmQgZ2FyZGVuLW8tbWF0aWMgYXJl
IGlnbm9yaW5nIElNQUdFIGZhaWx1cmVzIHdoZW4gZXhwZWN0ZWQgdG8gRkFJTApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckNocm9taXVtLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKaW5kZXggODlkNWQ1
ODc3MGM2MWQxYWFlOTE2MGJhMzRlNDM2NzY1MTZiMDdjMi4uMGZlNGMxZjk5ZTQ1OTZkMmQ4ZDc0
NzhiMjExZjM5ZTY1YmZmMzc2OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQ2hyb21pdW0uY3BwCkBAIC0xMTcsNiArMTE3LDkgQEAgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEFjY2Vzc2libGVFbGVtZW50QnlJ
ZChjb25zdAogICAgIGlmIChtX3Jvb3RFbGVtZW50LmlzTnVsbCgpKQogICAgICAgICBtX3Jvb3RF
bGVtZW50ID0gbV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CiAKKyAgICBpZiAoIW1f
cm9vdEVsZW1lbnQudXBkYXRlQmFja2luZ1N0b3JlQW5kQ2hlY2tWYWxpZGl0eSgpKQorICAgICAg
ICByZXR1cm4gMDsKKwogICAgIHJldHVybiBmaW5kQWNjZXNzaWJsZUVsZW1lbnRCeUlkUmVjdXJz
aXZlKG1fcm9vdEVsZW1lbnQsIFdlYlN0cmluZzo6ZnJvbVVURjgoaWQuY19zdHIoKSkpOwogfQog
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKaW5k
ZXggYjc5NWFlYjgzNzQwNGM0ZTU4OGJkYmFlMzYzZTU4Mjk2MDk5YTQyNS4uYjI5ZGIxMjdjNGVj
OWI3MmY4ZTgxNzc5MGY5NjMwZTk3ZmRiNzM2MyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0u
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcApAQCAtNzM0LDcgKzczNCwxMyBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3dDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlF
bGVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQogewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qg
b2JqID0gYWNjZXNzaWJpbGl0eU9iamVjdCgpLnRpdGxlVUlFbGVtZW50KCk7CisgICAgaWYgKG9i
ai5pc051bGwoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHJlc3VsdC0+c2V0KCoobV9mYWN0b3J5LT5nZXRPckNyZWF0ZShvYmop
LT5nZXRBc0NwcFZhcmlhbnQoKSkpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNldFNlbGVjdGVkVGV4dFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JmFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFjYzg4MzUxZTc2ZWViYzZlZDlmMzMx
OWFmNjUzOWM3MGI1MGIxMWYuLmZlNzA4ZWQ5ZGIzNjAyZjkwYjNhYmY5M2UyODA4OGI4ZjM5NjRm
MjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0xMC0wMiAgRG9taW5pYyBNYXp6b25pICA8
ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbGFiZWxGb3JFbGVtZW50IGlzIHNs
b3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgyNQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdHdvIG5ldyB0ZXN0cyBmb3IgdGl0
bGVVSUVsZW1lbnQgdGhhdCBydW4gb24gYm90aCBNYWMgYW5kCisgICAgICAgIENocm9taXVtLiBP
bmUgdGVzdHMgY29ycmVjdG5lc3MsIHRoZSBvdGhlciB0ZXN0cyBzcGVlZC4KKworICAgICAgICBU
aGUgdGVzdCBmb3IgdGl0bGVVSUVsZW1lbnQgc3BlZWQgaXMgY2FyZWZ1bGx5IGRlc2lnbmVkIHNv
IHRoYXQKKyAgICAgICAgaXQgZmFpbHMgd2l0aG91dCB0aGlzIHBhdGNoIGFuZCBwYXNzZXMgd2l0
aCBpdCwgd2hpbGUgc3RpbGwKKyAgICAgICAgYmVpbmcgcm9idXN0IHRvIGRpZmZlcmVuY2VzIGlu
IGNwdSBzcGVlZCwgcGxhdGZvcm0sIGV0Yy4gLSBlc3NlbnRpYWxseQorICAgICAgICBpdCBjb21w
YXJlcyB0aGUgc3BlZWQgb2YgZG9pbmcgYSBsYXJnZSBudW1iZXIgb2YgY2FsbHMgdG8gdGl0bGVV
SUVsZW1lbnQKKyAgICAgICAgdG8gdGhlIHRpbWUgaXQgdGFrZXMgdG8gYnVpbGQgdGhlIERPTSBv
ZiBhIHBhZ2UsIGZvciBhIHJlbGF0aXZlbHkKKyAgICAgICAgbGFyZ2UgcGFnZSB3aXRoIGxvdHMg
b2YgRE9NIGVsZW1lbnRzLiBJdCBlbnN1cmVzIHRoYXQgdGl0bGVVSUVsZW1lbnQKKyAgICAgICAg
ZG9lc24ndCBuZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBET00gdG8gbG9vayBmb3IgbGFiZWwgZWxl
bWVudHMuCisKKyAgICAgICAgRml4ZXMgb25lIHRlc3Qgc28gdGhhdCBpdCBwYXNzZXMgb24gQ2hy
b21pdW0uCisgICAgICAgIEVuYWJsZXMgb3RoZXIgdGVzdHMgdGhhdCBub3cgcGFzcyBvbiBDaHJv
bWl1bS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11
aS5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0
bmVzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUt
dWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtc3BlZWQuaHRtbDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxMi0xMC0wOCAg
RGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICByZXN1bHRzLmh0
bWwgYW5kIGdhcmRlbi1vLW1hdGljIGFyZSBpZ25vcmluZyBJTUFHRSBmYWlsdXJlcyB3aGVuIGV4
cGVjdGVkIHRvIEZBSUwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Vj
dXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9z
ZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKaW5kZXggMTcwZTU3MDFhMDQ1ODVkYzAxZTg2
YWM2NzliMWUzNDMwODE2M2YxOS4uMTJmODFlMzM4ZGNhOGI1ZjE0ZjAxYjg4MjY4Y2RmNmIyOWZm
MjE1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZp
ZWxkLXRpdGxlLXVpLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUt
dGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKQEAgLTIxLDggKzIxLDcgQEAKICAgICAgICAgICAgIHBh
c3MuZm9jdXMoKTsKICAgICAgICAgICAgIHZhciB0aXRsZVVJRWxlbWVudCA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnRpdGxlVUlFbGVtZW50KCk7CiAgICAgICAgICAg
ICB2YXIgdGl0bGVUZXh0ID0gdGl0bGVVSUVsZW1lbnQuY2hpbGRBdEluZGV4KDApOwotICAgICAg
ICAgICAgdmFyIHBhdHRlcm4gPSAiQVhWYWx1ZTogUGFzc3dvcmQiOwotICAgICAgICAgICAgaWYg
KHRpdGxlVGV4dC5hbGxBdHRyaWJ1dGVzKCkuaW5kZXhPZihwYXR0ZXJuKSAhPSAtMSkgeworICAg
ICAgICAgICAgaWYgKHRpdGxlVGV4dC5zdHJpbmdWYWx1ZSA9PSAiQVhWYWx1ZTogUGFzc3dvcmQi
KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0LmlubmVyVGV4dCArPSAiVGVzdCBwYXNzZWRcbiI7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5l
c3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2YzhkZjJlY2E5ZWQyMDAyNjZlYjRhZDUyYWM2
NDBhMjMzYjlkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUg
QEAKK0xhYmVsIDEgIAorTGFiZWwgMiAgCitMYWJlbCAzICAKKworTGFiZWwgNSAgCitUaGlzIHRl
c3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3MgY29ycmVjdGx5IGV2ZW4gd2hlbiB0aGluZ3Mg
Y2hhbmdlIGR5bmFtaWNhbGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBheEVsZW1lbnQoJ2NvbnRyb2wxJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVu
dCgnbGFiZWwxJykpIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxlVUlF
bGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMicpKSBpcyB0cnVlCitQQVNTIGhhc1Rp
dGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDMnKSkgaXMgZmFsc2UKK1BBU1MgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycpLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2NvbnRyb2wz
Jyk7IGF4RWxlbWVudCgnY29udHJvbDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVt
ZW50KCdsYWJlbDMnKSkgaXMgdHJ1ZQorUEFTUyB2YXIgbGFiZWw0RWxlbWVudCA9IGNyZWF0ZUxh
YmVsV2l0aEZvckF0dHJpYnV0ZSgnY29udHJvbDQnKTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVt
ZW50KCdjb250cm9sNCcpKSBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29udGFpbmVyJykuYXBwZW5kQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlFbGVtZW50
KGF4RWxlbWVudCgnY29udHJvbDQnKSkgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2w0
JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw0JykpIGlzIHRydWUK
K1BBU1MgbGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVsNEVsZW1l
bnQpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIGlzIGZhbHNlCitQ
QVNTIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDUnKSkgaXMgZmFsc2UKK1BB
U1MgcmVwYXJlbnROb2RlSW50b0NvbnRhaW5lcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
dHJvbDUnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNScpKTsgYXhFbGVtZW50KCdj
b250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCBpcyB0cnVlCitQQVNTIGF4RWxlbWVu
dCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDUn
KSkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxl
bWVudC1jb3JyZWN0bmVzcy5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11
aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2ZlYzAyZDM1MzlkZDM2MDQ5
YWU1ZGNlZDIyNGFiMTZjYTg5MGZhNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCkBAIC0wLDAgKzEs
OTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9ImNv
bnRhaW5lciI+CisKKyAgPGRpdj4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsMSIgZm9yPSJjb250cm9s
MSI+TGFiZWwgMTwvbGFiZWw+CisgICAgPGlucHV0IGlkPSJjb250cm9sMSIgdHlwZT0idGV4dCI+
CisgIDwvZGl2PgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDIiPgorICAgICAgTGFi
ZWwgMgorICAgICAgPGlucHV0IGlkPSJjb250cm9sMiIgdHlwZT0idGV4dCI+CisgICAgPC9sYWJl
bD4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsMyI+TGFiZWwgMzwv
bGFiZWw+CisgICAgPGlucHV0IGlkPSJjb250cm9sMyIgdHlwZT0idGV4dCI+CisgIDwvZGl2Pgor
CisgIDxkaXY+CisgICAgPGlucHV0IGlkPSJjb250cm9sNCIgdHlwZT0idGV4dCI+CisgIDwvZGl2
PgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDUiPgorICAgICAgTGFiZWwgNQorICAg
IDwvbGFiZWw+CisgICAgPGlucHV0IGlkPSJjb250cm9sNSIgdHlwZT0idGV4dCI+CisgIDwvZGl2
PgorPC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0
aW9uKCJUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3MgY29ycmVjdGx5IGV2ZW4g
d2hlbiB0aGluZ3MgY2hhbmdlIGR5bmFtaWNhbGx5LiIpOworCitpZiAod2luZG93LnRlc3RSdW5u
ZXIgJiYgd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7CisKKyAgICBmdW5jdGlvbiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQp
IHsKKyAgICAgICAgdmFyIGxhYmVsMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2li
bGVFbGVtZW50QnlJZCgibGFiZWwxIik7CisgICAgICAgIHZhciB0aXRsZVVJRWxlbWVudCA9IGF4
RWxlbWVudC50aXRsZVVJRWxlbWVudCgpOworICAgICAgICBpZiAodGl0bGVVSUVsZW1lbnQgPT0g
bnVsbCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRpdGxlVUlF
bGVtZW50LnJvbGUgPT0gbGFiZWwxLnJvbGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gY3JlYXRl
TGFiZWxXaXRoRm9yQXR0cmlidXRlKGZvckF0dHJpYnV0ZVZhbHVlKSB7CisgICAgICAgIHZhciBs
YWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOworICAgICAgICBs
YWJlbEVsZW1lbnQuc2V0QXR0cmlidXRlKCJmb3IiLCBmb3JBdHRyaWJ1dGVWYWx1ZSk7CisgICAg
ICAgIGxhYmVsRWxlbWVudC5pbm5lclRleHQgPSAiTGFiZWwgZm9yICIgKyBmb3JBdHRyaWJ1dGVW
YWx1ZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsRWxlbWVudDsKKyAgICB9CisKKyAgICBmdW5jdGlv
biByZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGNvbnRhaW5lcikgeworICAgICAgICBu
b2RlLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgICAgIGNvbnRhaW5lci5h
cHBlbmRDaGlsZChub2RlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBheEVsZW1lbnQoaWQpIHsK
KyAgICAgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50
QnlJZChpZCk7CisgICAgfQorCisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDEnKS50
aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkiLCAidHJ1ZSIpOwor
CisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDInKS50aXRsZVVJRWxlbWVudCgpLmlz
RXF1YWwoYXhFbGVtZW50KCdsYWJlbDInKSkiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCBjaGFu
Z2luZyB0aGUgImZvciIgYXR0cmlidXRlIGR5bmFtaWNhbGx5LgorICAgIHNob3VsZEJlKCJoYXNU
aXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2wzJykpIiwgImZhbHNlIik7CisgICAgc2hv
dWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDMnKS5zZXRBdHRyaWJ1dGUoJ2Zv
cicsICdjb250cm9sMycpOyBheEVsZW1lbnQoJ2NvbnRyb2wzJykudGl0bGVVSUVsZW1lbnQoKS5p
c0VxdWFsKGF4RWxlbWVudCgnbGFiZWwzJykpIiwgInRydWUiKTsKKworICAgIC8vIFRlc3QgdW5h
dHRhY2hlZCBsYWJlbCBlbGVtZW50IHRoYXQncyBzdWJzZXF1ZW50bHkgYXR0YWNoZWQuCisgICAg
dmFyIGxhYmVsNEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOworICAg
IGxhYmVsNEVsZW1lbnQuaWQgPSAibGFiZWw0IjsKKyAgICBsYWJlbDRFbGVtZW50LnNldEF0dHJp
YnV0ZSgiZm9yIiwgImNvbnRyb2w0Iik7CisgICAgbGFiZWw0RWxlbWVudC5pbm5lclRleHQgPSAi
TGFiZWwgNCI7CisgICAgc2hvdWxkQmUoInZhciBsYWJlbDRFbGVtZW50ID0gY3JlYXRlTGFiZWxX
aXRoRm9yQXR0cmlidXRlKCdjb250cm9sNCcpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQo
J2NvbnRyb2w0JykpIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVV
SUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUo
ImF4RWxlbWVudCgnY29udHJvbDQnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDQnKSkiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB0
aGUgbGFiZWwgaXMgZGV0YWNoZWQuCisgICAgc2hvdWxkQmUoImxhYmVsNEVsZW1lbnQucGFyZW50
RWxlbWVudC5yZW1vdmVDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhF
bGVtZW50KCdjb250cm9sNCcpKSIsICJmYWxzZSIpOworCisgICAgLy8gVGVzdCBsYWJlbCB0aGF0
IGdldHMgYSBjb250cm9sIHJlcGFyZW50ZWQgaW50byBpdC4KKyAgICBzaG91bGRCZSgiaGFzVGl0
bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNScpKSIsICJmYWxzZSIpOworCisgICAgc2hv
dWxkQmUoInJlcGFyZW50Tm9kZUludG9Db250YWluZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnRyb2w1JyksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDUnKSk7IGF4RWxlbWVu
dCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpICE9IG51bGwiLCAidHJ1ZSIpOworICAgIHNo
b3VsZEJlKCJheEVsZW1lbnQoJ2NvbnRyb2w1JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4
RWxlbWVudCgnbGFiZWw1JykpIiwgInRydWUiKTsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRs
ZS11aS1lbGVtZW50LXNwZWVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUyMDlh
Zjk0MWQwNWZiZTJhNzI3YTM1MDY5OGNhNTc3OGIwODlhMAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1zcGVlZC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMiBAQAorCitUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgZG9l
c24ndCB0YWtlIGEgcmlkaWN1bG91c2x5IGxvbmcgdGltZSB0byBydW4gd2hlbiB0aGVyZSBhcmUg
YSBsb3Qgb2YgbGFiZWwgZWxlbWVudHMgb24gYSBwYWdlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBheENvbnRyb2xDb250YWluZXIuY2hpbGRyZW5Db3VudCBpcyA1MDAK
K1BBU1MgUXVlcmllZCB0aXRsZVVJRWxlbWVudCBpbiBsZXNzIHRpbWUgdGhhbiBpdCB0b29rIHRv
IGJ1aWxkIHRoZSBET00uCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11
aS1lbGVtZW50LXNwZWVkLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtc3BlZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Yjg3ZDcxM2QyYWM5Mzc5ODMxYmYxODU1
ZmEwZTY0YTM5ZTNiNzIyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS90aXRsZS11aS1lbGVtZW50LXNwZWVkLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPGRpdiBpZD0ibGFiZWxDb250YWluZXIi
PgorPC9kaXY+Cis8ZGl2IGlkPSJjb250cm9sQ29udGFpbmVyIiBhcmlhLWxhYmVsPSJjb250cm9s
IGNvbnRhaW5lciI+Cis8L2Rpdj4KKzxkaXYgaWQ9Imp1bmtDb250YWluZXIiIGhpZGRlbj4KKzwv
ZGl2PgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigi
VGhpcyB0ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IGRvZXNuJ3QgdGFrZSBhIHJpZGljdWxvdXNs
eSBsb25nIHRpbWUgdG8gcnVuIHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIGxhYmVsIGVsZW1lbnRz
IG9uIGEgcGFnZS4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsK
KworICAgIGZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc3VmZml4KSB7CisgICAgICAgIHJldHVybiBz
dHIuc3Vic3RyKHN0ci5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSA9PSBzdWZmaXg7CisgICAgfQor
CisgICAgdmFyIGxhYmVsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVs
Q29udGFpbmVyJyk7CisgICAgdmFyIGNvbnRyb2xDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29udHJvbENvbnRhaW5lcicpOworICAgIHZhciBqdW5rQ29udGFpbmVyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2p1bmtDb250YWluZXInKTsKKworICAgIHZhciBzdGFydFRp
bWUgPSBEYXRlLm5vdygpOworCisgICAgdmFyIGNvdW50ID0gNTAwOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdsYWJlbCcpOworICAgICAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdj
JyArIGkpOworICAgICAgICBsYWJlbC5pbm5lclRleHQgPSAnTGFiZWwgJyArIGk7CisgICAgICAg
IGxhYmVsQ29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKKworICAgICAgICB2YXIgY29udHJv
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgICAgIGNvbnRyb2wudHlw
ZSA9ICd0ZXh0JzsKKyAgICAgICAgY29udHJvbC5pZCA9ICdjJyArIGk7CisgICAgICAgIGNvbnRy
b2xDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbCk7CisgICAgfQorCisgICAgLy8gR2V0IHRo
ZSBhY2Nlc3NpYmlsaXR5IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb250cm9sIGNvbnRh
aW5lci4KKyAgICB2YXIgYXhDb250cm9sQ29udGFpbmVyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCdjb250cm9sQ29udGFpbmVyJyk7CisgICAgc2hvdWxk
QmUoImF4Q29udHJvbENvbnRhaW5lci5jaGlsZHJlbkNvdW50IiwgIiIgKyBjb3VudCk7CisKKyAg
ICAvLyBOb3cgYWRkIG1vcmUganVuayB0byB0aGUgcGFnZS4gVGhpcyBpcyB0byBtYWtlIHN1cmUg
dGhhdCB0aXRsZVVJRWxlbWVudCBkb2Vzbid0IHRha2UKKyAgICAvLyB0aW1lIHByb3BvcnRpb25h
bCB0byB0aGUgbnVtYmVyIG9mIERPTSBlbGVtZW50cyBvbiB0aGUgcGFnZSBhbnltb3JlLgorICAg
IGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICBkaXYuaW5uZXJIVE1MID0gIjxwPjwvcD48cD48
L3A+PHA+PC9wPjxwPjwvcD48cD48L3A+IjsKKyAgICAgIGp1bmtDb250YWluZXIuYXBwZW5kQ2hp
bGQoZGl2KTsKKyAgICB9CisKKyAgICB2YXIgbWlkVGltZSA9IERhdGUubm93KCk7CisgICAgdmFy
IGJ1aWxkVGltZSA9IG1pZFRpbWUgLSBzdGFydFRpbWU7CisKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgdmFyIGF4Q29udHJvbCA9IGF4Q29udHJvbENvbnRh
aW5lci5jaGlsZEF0SW5kZXgoaSk7CisgICAgICAgIHZhciBheFRpdGxlVUlFbGVtZW50ID0gYXhD
b250cm9sLnRpdGxlVUlFbGVtZW50KCk7CisgICAgICAgIGlmICghYXhUaXRsZVVJRWxlbWVudCkg
eworICAgICAgICAgICAgdGVzdEZhaWxlZCgiY29udHJvbCAiICsgaSArICIgaGFzIG5vIHRpdGxl
VUlFbGVtZW50LiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHRpdGxlID0gYXhUaXRsZVVJRWxlbWVudC5jaGlsZEF0SW5kZXgoMCkuc3RyaW5nVmFsdWU7Cisg
ICAgICAgIGlmICghZW5kc1dpdGgodGl0bGUsICJMYWJlbCAiICsgaSkpIHsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoImNvbnRyb2wgIiArIGkgKyAiIHRpdGxlVUlFbGVtZW50IHZhbHVlIGlzICci
ICsKKyAgICAgICAgICAgICAgICB0aXRsZSArICInICwgZXhwZWN0aW5nIGl0IHRvIGVuZCB3aXRo
ICdMYWJlbCAiICsgaSArICInIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZhciBlbmRUaW1lID0gRGF0ZS5ub3coKTsKKyAgICB2YXIgdGl0bGVVSUVsZW1l
bnRUaW1lID0gZW5kVGltZSAtIG1pZFRpbWU7CisKKyAgICAvLyBJZiB0aGlzIGlzIHdvcmtpbmcg
Y29ycmVjdGx5LCBpdCBzaG91bGQgdGFrZSAoc2lnbmlmaWNhbnRseSkgbGVzcworICAgIC8vIHRp
bWUgdG8gcXVlcnkgdGl0bGVVSUVsZW1lbnQgb24gYWxsIG9mIHRoZSBjb250cm9scyB0aGFuIHRo
ZSB0aW1lCisgICAgLy8gdG8gYnVpbGQgdGhlIHBhZ2UgRE9NLiBXaXRoIHRoZSBwcmV2aW91cyBP
KG4pIGFsZ29yaXRobSBmb3IKKyAgICAvLyB0aXRsZVVJRWxlbWVudCwgaXQgdG9vayBzaWduaWZp
Y2FudGx5IGxvbmdlci4KKyAgICBpZiAodGl0bGVVSUVsZW1lbnRUaW1lIDwgYnVpbGRUaW1lKSB7
CisgICAgICAgIGRlYnVnKCJQQVNTIFF1ZXJpZWQgdGl0bGVVSUVsZW1lbnQgaW4gbGVzcyB0aW1l
IHRoYW4gaXQgdG9vayB0byBidWlsZCB0aGUgRE9NLiIpOworICAgIH0gZWxzZQorICAgICAgICB0
ZXN0RmFpbGVkKCJUb29rICIgKyBidWlsZFRpbWUgKyAiIG1zIHRvIGJ1aWxkIHRoZSBET00gYW5k
ICIgKworICAgICAgICAgICAgdGl0bGVVSUVsZW1lbnRUaW1lICsgIiBtcyB0byBxdWVyeSB0aXRs
ZVVJRWxlbWVudCBvbiBlYWNoIGNvbnRyb2wuIik7CisKKyAgICAvLyBSZW1vdmUgdGhlIGxhYmVs
cyBmcm9tIHRoZSBwYWdlIHNvIHRoZSB0ZXh0IGR1bXAgb2YgdGhlIHBhZ2UgaXNuJ3QgZ2lnYW50
aWMuCisgICAgbGFiZWxDb250YWluZXIuaW5uZXJIVE1MID0gIiI7Cit9CisKKzwvc2NyaXB0Pgor
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BlcmYvYWNj
ZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bl
cmYvYWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NmQ5ODY5OTVlNTlkMzc3MWUwMzM0NmJjODdlNTAzM2FhNGExNzY4Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorVGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCBvbiBh
biBhY2Nlc3NpYmlsaXR5IGVsZW1lbnQgcnVucyBpbiBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4K
K1BBU1MKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxl
LXVpLWVsZW1lbnQuaHRtbCBiL0xheW91dFRlc3RzL3BlcmYvYWNjZXNzaWJpbGl0eS10aXRsZS11
aS1lbGVtZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTc5YjkwMDdjZmFmMWIyMDZlOTZlYWUyYWQyMmJk
MDNiOTRmZTg3OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BlcmYvYWNjZXNzaWJp
bGl0eS10aXRsZS11aS1lbGVtZW50Lmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9tYWduaXR1ZGUt
cGVyZi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit2YXIgcGFyZW50Q29udGFpbmVyOwordmFy
IGF4Q29udHJvbDsKKworZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzdWZmaXgpIHsKKyAgICByZXR1
cm4gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCkgPT0gc3VmZml4OworfQor
CitmdW5jdGlvbiBzZXR1cChtYWduaXR1ZGUpIHsKKyAgICBpZiAocGFyZW50Q29udGFpbmVyKQor
ICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHBhcmVudENvbnRhaW5lcik7CisgICAg
cGFyZW50Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYXJlbnRDb250YWluZXIpOworCisgICAgdmFyIGp1bmtD
b250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBwYXJlbnRDb250
YWluZXIuYXBwZW5kQ2hpbGQoanVua0NvbnRhaW5lcik7CisKKyAgICB2YXIgbGFiZWwgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpOworICAgIGxhYmVsLnNldEF0dHJpYnV0ZSgnZm9y
JywgJ2NvbnRyb2wnKTsKKyAgICBsYWJlbC5pbm5lclRleHQgPSAnTGFiZWwnOworICAgIHBhcmVu
dENvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CisKKyAgICB2YXIgY29udHJvbCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgY29udHJvbC50eXBlID0gJ3RleHQnOwor
ICAgIGNvbnRyb2wuaWQgPSAnY29udHJvbCc7CisgICAgcGFyZW50Q29udGFpbmVyLmFwcGVuZENo
aWxkKGNvbnRyb2wpOworCisgICAgcGFyZW50Q29udGFpbmVyLm9mZnNldExlZnQ7CisgICAgYXhD
b250cm9sID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCdj
b250cm9sJyk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwICogbWFnbml0dWRlOyArK2kp
IHsKKyAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAg
ICAgICBkaXYuaW5uZXJIVE1MID0gIjxwPjwvcD48cD48L3A+PHA+PC9wPjxwPjwvcD48cD48L3A+
IjsKKyAgICAgICAganVua0NvbnRhaW5lci5hcHBlbmRDaGlsZChkaXYpOworICAgIH0KKyAgICBw
YXJlbnRDb250YWluZXIub2Zmc2V0TGVmdDsKK30KKworZnVuY3Rpb24gdGVzdChtYWduaXR1ZGUp
IHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIGF4Q29udHJv
bC50aXRsZVVJRWxlbWVudCgpOworICAgIH0KK30KKworTWFnbml0dWRlLmRlc2NyaXB0aW9uKCJU
ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IG9uIGFuIGFjY2Vzc2liaWxpdHkgZWxlbWVudCBydW5z
IGluIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLiIpOworTWFnbml0dWRlLnJ1bihzZXR1cCwgdGVz
dCwgTWFnbml0dWRlLkNPTlNUQU5UKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMDkz
YTIyNGJmNTlmMWY4YTZiOWFiM2QyMzM4ODY2OGJhYWI5ZDliZS4uZWQxYzU1MDBhNTM5MDQzYzQw
YTdhNzQzYzBkYzE5MmE0ZjY1YjYwOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMzc1LDcgKzEzNzUsNiBAQCBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS9hcmlhLWFjdGl2ZWRlc2NlbmRhbnQtY3Jhc2guaHRtbCBbIFNraXAg
XQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvYXJpYS1jb21ib2JveC5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWNvbnRyb2xzLXdpdGgtdGFi
cy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWZhbGxi
YWNrLXJvbGVzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2Fy
aWEtaGlkZGVuLXVwZGF0ZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJp
bGl0eS9hcmlhLWludmFsaWQuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2li
aWxpdHkvYXJpYS1sYWJlbGxlZGJ5LW92ZXJyaWRlcy1sYWJlbC5odG1sIFsgU2tpcCBdCiBjcmJ1
Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9hcmlhLWxpbmstc3VwcG9ydHMtcHJlc3MuaHRtbCBb
IFNraXAgXQpAQCAtMTQwMCwxNCArMTM5OSwxMSBAQCBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJp
bGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFj
Y2Vzc2liaWxpdHkvbGVnZW5kLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3Np
YmlsaXR5L2xpc3RzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5
L21lZGlhLWVsZW1lbnQuaHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxp
dHkvbm9uLWRhdGEtdGFibGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRtbCBbIFNraXAg
XQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbCBbIFNraXAg
XQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGx1Z2luLmh0bWwgWyBTa2lwIF0KIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1jaGVja2JveC1zaXplLmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1n
cm91cC1tZW1iZXJzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5
L3JhZGlvLWJ1dHRvbi10aXRsZS1sYWJlbC5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwgWyBTa2lwIF0KIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWF0dHJpYnV0ZXMuaHRtbCBbIFNraXAg
XQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbC1zcGFucy5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1jZWxscy5odG1sIFsg
U2tpcCBdCkBAIC0xNDE2LDcgKzE0MTIsNiBAQCBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0
eS90YWJsZS1vbmUtY2VsbC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJp
bGl0eS90YWJsZS1zZWN0aW9ucy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNz
aWJpbGl0eS90YWJsZS13aXRoLWFyaWEtcm9sZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS90YWJsZS13aXRoLXJ1bGVzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RoLWFzLXRpdGxlLXVpLmh0bWwgWyBTa2lwIF0KIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RyYW5zZm9ybWVkLWVsZW1lbnQuaHRtbCBbIFNraXAg
XQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdmlzaWJsZS1lbGVtZW50cy5odG1sIFsg
U2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167935</attachid>
            <date>2012-10-09 23:42:29 -0700</date>
            <delta_ts>2012-10-09 23:49:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20121009234129.patch</filename>
            <type>text/plain</type>
            <size>28095</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwODMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzYwYTA1M2ExNjUyZDZi
Yjc2ZmU0N2M2YjQzZGE3NDUwYzE2NmVmMy4uNTc5MTgyNGE0NzUwY2JlYjQyNWQxMGU0NDRmODYz
YTZiOWNlNjIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTEwLTA5ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIERvY3Vt
ZW50T3JkZXJlZE1hcCB0byBUcmVlU2NvcGUgdGhhdCBhbGxvd3MgYWNjZXNzaWJpbGl0eSB0bwor
ICAgICAgICBxdWlja2x5IG1hcCBmcm9tIGFuIGlkIHRvIHRoZSBsYWJlbCBmb3IgdGhhdCBpZC4g
VGhpcyBzcGVlZHMgdXAKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGU6OmxhYmVsRm9yRWxlbWVu
dCwgd2hpY2ggd2FzIGEgYm90dGxlbmVjayBpbiBDaHJvbWl1bQorICAgICAgICB3aGVuIGFjY2Vz
c2liaWxpdHkgd2FzIG9uLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAgICAgICAgcGVyZi9hY2Nlc3NpYmls
aXR5LXRpdGxlLXVpLWVsZW1lbnQuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmtleU1hdGNoZXNMYWJlbEZvckF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJl
ZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudE9yZGVyZWRNYXAuaDoKKyAgICAgICAgKERvY3VtZW50T3JkZXJlZE1hcCk6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUxhYmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZSk6CisgICAgICAgICog
ZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlU2Nv
cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpUcmVlU2NvcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVNjb3BlOjphZGRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6cmVtb3ZlTGFiZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgICogZG9tL1RyZWVTY29w
ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUcmVlU2NvcGUpOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpzaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKToKKwog
MjAxMi0xMC0wOSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXBk
YXRlIHRoZSBDU1MgcHJvcGVydHkgdXNlZCB0byBzdXBwb3J0IGRyYWdnYWJsZSByZWdpb25zLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcAppbmRleCAwZjk0ODM4ZTdlYzU1YTk2OWVkYjFlODA1MDAwMzk3NWQ3ZWVj
YzEzLi4yYjVmODVjNGQ2YjZhNDIxNjQwMTIzNjg0OGU0Y2EzNDExYTE2MTVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCisjaW5jbHVkZSAiTGFiZWxhYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvY2Fs
aXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCkBAIC0xMDAxLDE0ICsxMDAyLDE4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmlzR2VuZXJpY0ZvY3VzYWJsZUVsZW1lbnQoKSBjb25zdAogCiBIVE1MTGFiZWxFbGVtZW50
KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxhYmVsIik7Ci0gICAgdW5zaWduZWQgbGVuID0g
bGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgewotICAg
ICAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxF
bGVtZW50Kj4obGlzdC0+aXRlbShpKSk7Ci0gICAgICAgICAgICBpZiAobGFiZWwtPmNvbnRyb2wo
KSA9PSBlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbDsKLSAgICAgICAgfQor
ICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpIHx8ICF0b0hUTUxFbGVtZW50KGVsZW1l
bnQpLT5pc0xhYmVsYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgIGlmICghaWQuaXNF
bXB0eSgpKSB7CisgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGVsZW1lbnQt
PnRyZWVTY29wZSgpLT5sYWJlbEVsZW1lbnRGb3JJZChpZCkpCisgICAgICAgICAgICByZXR1cm4g
bGFiZWw7CisgICAgfQorCisgICAgZm9yIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsK
KyAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShsYWJlbFRhZykpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHBhcmVudCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmlu
ZGV4IDEyOTdlNTEwMmZiNGU3OWNlM2RiMTEyMzU3MDIxZTNkZDA1NTRhNTEuLmJiZDhiM2IxNmVh
ZjQ5ZTAxNmVkMDQ3NmIwYmI0YTllNzYwNjA0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE9yZGVyZWRNYXAuY3BwCkBAIC01NSw2ICs1NSwxMSBAQCBpbmxpbmUgYm9vbCBrZXlNYXRj
aGVzTG93ZXJjYXNlZE1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBFbGVtZW50KiBlbGVt
ZW50KQogICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKG1hcFRhZykgJiYgc3RhdGljX2Nh
c3Q8SFRNTE1hcEVsZW1lbnQqPihlbGVtZW50KS0+Z2V0TmFtZSgpLmxvd2VyKCkuaW1wbCgpID09
IGtleTsKIH0KIAoraW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKEF0b21p
Y1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVu
dC0+aGFzVGFnTmFtZShsYWJlbFRhZykgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGZvckF0dHIp
LmltcGwoKSA9PSBrZXk7Cit9CisKIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpjbGVhcigpCiB7
CiAgICAgbV9tYXAuY2xlYXIoKTsKQEAgLTE0OSw1ICsxNTQsOSBAQCBFbGVtZW50KiBEb2N1bWVu
dE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZ0lt
cGwqIGtleQogICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXks
IHNjb3BlKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorRWxlbWVudCogRG9jdW1lbnRP
cmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBs
KiBrZXksIGNvbnN0IFRyZWVTY29wZSogc2NvcGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldDxr
ZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGU+KGtleSwgc2NvcGUpOworfQogCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKaW5kZXgg
N2QxMjY4NmMzMzZhZDhmMGE2MTc0MzlmMTY4NDlmNjRjYzNiOWIxZC4uMWY5MDM5ZTYxNDNkMzg2
MjhkZmEzMDBhZTk4NmEwMWVlMzIzYzdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50T3JkZXJlZE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxl
bWVudEJ5SWQoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwogICAg
IEVsZW1lbnQqIGdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRy
ZWVTY29wZSopIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBO
YW1lKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKKyAgICBFbGVt
ZW50KiBnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBsKiwgY29u
c3QgVHJlZVNjb3BlKikgY29uc3Q7CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25z
dDsKIApAQCAtODAsNCArODEsMyBAQCBpbmxpbmUgYm9vbCBEb2N1bWVudE9yZGVyZWRNYXA6OmNv
bnRhaW5zTXVsdGlwbGUoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBEb2N1bWVudE9yZGVyZWRNYXBfaAotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggZGQxMzE2OGQ5YzZkMjU5NGVmNzg0ZWM3YzMyYmNmNGUzYTM4ODdmYy4u
NzAzNTM0NDQwNzZlNzM1ZDk1YTYzZmE5MWQ3ZThhY2VmMDBiYjNkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEZvcm1Db2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxQ
YXJzZXJJZGlvbXMuaCIKQEAgLTk1OSw2ICs5NjAsMTIgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uUmVxdWVzdCBFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0
aW8KICAgICBpZiAoIW5hbWVWYWx1ZS5pc051bGwoKSkKICAgICAgICAgdXBkYXRlTmFtZShudWxs
QXRvbSwgbmFtZVZhbHVlKTsKIAorICAgIGlmIChoYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAg
ICAgICBUcmVlU2NvcGUqIHNjb3BlID0gdHJlZVNjb3BlKCk7CisgICAgICAgIGlmIChzY29wZS0+
c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgdXBkYXRlTGFi
ZWwoc2NvcGUsIG51bGxBdG9tLCBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpKTsKKyAgICB9CisK
ICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KIApAQCAtOTkxLDYgKzk5OCwxMiBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQogICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVWYWx1ZSA9IGdldE5hbWVBdHRyaWJ1dGUoKTsK
ICAgICAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICB1cGRhdGVOYW1l
KG5hbWVWYWx1ZSwgbnVsbEF0b20pOworCisgICAgICAgIGlmIChoYXNUYWdOYW1lKGxhYmVsVGFn
KSkgeworICAgICAgICAgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSB0cmVlU2NvcGVPZlBhcmVu
dCh0aGlzLCBpbnNlcnRpb25Qb2ludCk7CisgICAgICAgICAgICBpZiAodHJlZVNjb3BlLT5zaG91
bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkpCisgICAgICAgICAgICAgICAgdXBkYXRlTGFi
ZWwodHJlZVNjb3BlLCBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpLCBudWxsQXRvbSk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBDb250YWluZXJOb2RlOjpyZW1vdmVkRnJvbShpbnNlcnRpb25Q
b2ludCk7CkBAIC0yMTA0LDEyICsyMTE3LDMwIEBAIGJvb2wgRWxlbWVudDo6aGFzTmFtZWROb2Rl
TWFwKCkgY29uc3QKIH0KICNlbmRpZgogCit2b2lkIEVsZW1lbnQ6OnVwZGF0ZUxhYmVsKFRyZWVT
Y29wZSogc2NvcGUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkRm9yQXR0cmlidXRlVmFsdWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmV3Rm9yQXR0cmlidXRlVmFsdWUpCit7CisgICAgQVNTRVJUKGhh
c1RhZ05hbWUobGFiZWxUYWcpKTsKKworICAgIGlmIChvbGRGb3JBdHRyaWJ1dGVWYWx1ZSA9PSBu
ZXdGb3JBdHRyaWJ1dGVWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFvbGRGb3JB
dHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHNjb3BlLT5yZW1vdmVMYWJlbChvbGRG
b3JBdHRyaWJ1dGVWYWx1ZSwgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHRoaXMpKTsK
KyAgICBpZiAoIW5ld0ZvckF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgc2NvcGUt
PmFkZExhYmVsKG5ld0ZvckF0dHJpYnV0ZVZhbHVlLCBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVt
ZW50Kj4odGhpcykpOworfQorCiB2b2lkIEVsZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKIHsKICAgICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUo
bmFtZSkpCiAgICAgICAgIHVwZGF0ZUlkKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CiAgICAgZWxzZSBp
ZiAobmFtZSA9PSBIVE1MTmFtZXM6Om5hbWVBdHRyKQogICAgICAgICB1cGRhdGVOYW1lKG9sZFZh
bHVlLCBuZXdWYWx1ZSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OmZvckF0dHIg
JiYgaGFzVGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IHRy
ZWVTY29wZSgpOworICAgICAgICBpZiAoc2NvcGUtPnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRy
aWJ1dGUoKSkKKyAgICAgICAgICAgIHVwZGF0ZUxhYmVsKHNjb3BlLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgIH0KIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgaWYgKE93
blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gcmVjaXBpZW50cyA9IE11dGF0aW9u
T2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JBdHRyaWJ1dGVzTXV0YXRpb24odGhpcywg
bmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBjNzA4Nzc1YmEzNjhjZWY3N2UxN2ZhMmZiNzI5
NmM1MzE0MWJlODZiLi5iZWJlNDY1M2I4MTY4MWZkMDE4ZmUxZDVmMGUzZjRlOWI4ODQ3YjQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKQEAgLTMxNiw2ICszMTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1
cGRhdGVJZChjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5l
d0lkKTsKICAgICB2b2lkIHVwZGF0ZUlkKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYg
b2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpOwogICAgIHZvaWQgdXBkYXRlTmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSk7
CisgICAgdm9pZCB1cGRhdGVMYWJlbChUcmVlU2NvcGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9s
ZEZvckF0dHJpYnV0ZVZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0ZvckF0dHJpYnV0ZVZh
bHVlKTsKIAogICAgIHZvaWQgd2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdW
YWx1ZSk7CiAgICAgdm9pZCB3aWxsUmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKaW5k
ZXggMjQ1M2E4ZjM0NTI2M2U1ODFmN2E0NzY2YjE5MDNlMTAzMmFmY2FiOC4uYjE4NGJmMDg5MjVi
ZWNhODkzODM0OTUzM2IwNThkZTFiY2JmNTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1RyZWVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAK
QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbmNo
b3JFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5Lmgi
CkBAIC01NSw2ICs1Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBUcmVlU2NvcGU6
OlRyZWVTY29wZShDb250YWluZXJOb2RlKiByb290Tm9kZSkKICAgICA6IG1fcm9vdE5vZGUocm9v
dE5vZGUpCiAgICAgLCBtX3BhcmVudFRyZWVTY29wZSgwKQorICAgICwgbV9zaG91bGRDYWNoZUxh
YmVsc0J5Rm9yQXR0cmlidXRlKGZhbHNlKQogICAgICwgbV9pZFRhcmdldE9ic2VydmVyUmVnaXN0
cnkoSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpjcmVhdGUoKSkKIHsKICAgICBBU1NFUlQocm9v
dE5vZGUpOwpAQCAtMTQ0LDYgKzE0NiwzNyBAQCBIVE1MTWFwRWxlbWVudCogVHJlZVNjb3BlOjpn
ZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTE1hcEVsZW1lbnQqPihtX2ltYWdlTWFwc0J5TmFtZS5nZXRFbGVtZW50QnlNYXBOYW1l
KEF0b21pY1N0cmluZyhuYW1lKS5pbXBsKCksIHRoaXMpKTsKIH0KIAordm9pZCBUcmVlU2NvcGU6
OmFkZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJl
bEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5hZGQoZm9y
QXR0cmlidXRlVmFsdWUuaW1wbCgpLCBlbGVtZW50KTsKK30KKwordm9pZCBUcmVlU2NvcGU6OnJl
bW92ZUxhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJl
bEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5yZW1vdmUo
Zm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCBlbGVtZW50KTsKK30KKworSFRNTExhYmVsRWxlbWVu
dCogVHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0
dHJpYnV0ZVZhbHVlKQoreworICAgIGlmICghbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmli
dXRlKSB7CisgICAgICAgIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSA9IHRydWU7
CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGxhYmVsVGFnKSkgeworICAgICAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0g
c3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZm9yVmFsdWUgPSBsYWJlbC0+ZmFzdEdldEF0dHJpYnV0ZShmb3JB
dHRyKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYWRkTGFiZWwoZm9yVmFsdWUsIGxhYmVsKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChmb3JBdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgSFRNTExhYmVsRWxlbWVudCogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUuZ2V0RWxlbWVu
dEJ5TGFiZWxGb3JBdHRyaWJ1dGUoZm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCB0aGlzKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQtPmluRG9jdW1lbnQoKSA/IHJlc3VsdCA6IDA7Cit9
CisKIERPTVNlbGVjdGlvbiogVHJlZVNjb3BlOjpnZXRTZWxlY3Rpb24oKSBjb25zdAogewogICAg
IGlmICghcm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKQEAgLTI4Myw0ICszMTYsMyBA
QCBUcmVlU2NvcGUqIGNvbW1vblRyZWVTY29wZShOb2RlKiBub2RlQSwgTm9kZSogbm9kZUIpCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1RyZWVTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCmluZGV4IGQ5
NzU4YjAyOGU0ZDQ1Njc4NGY0NTkwZTA5MGU1YTI1N2QyOTQ1ZjMuLjljYWU1NGRlOGRmNzc2MjA0
OTczNDU1MTI0NDdkZjQyMmVkNDk0YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKQEAgLTM1LDYg
KzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNz
IERPTVNlbGVjdGlvbjsKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBIVE1MTGFiZWxFbGVtZW50Owog
Y2xhc3MgSFRNTE1hcEVsZW1lbnQ7CiBjbGFzcyBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk7CiBj
bGFzcyBOb2RlOwpAQCAtNjIsNiArNjMsMTIgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSW1h
Z2VNYXAoSFRNTE1hcEVsZW1lbnQqKTsKICAgICBIVE1MTWFwRWxlbWVudCogZ2V0SW1hZ2VNYXAo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OwogCisgICAgLy8gRm9yIGFjY2Vzc2liaWxpdHkuCisg
ICAgYm9vbCBzaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlOyB9CisgICAgdm9pZCBhZGRMYWJlbChj
b25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHJpYnV0ZVZhbHVlLCBIVE1MTGFiZWxFbGVtZW50Kik7
CisgICAgdm9pZCByZW1vdmVMYWJlbChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHJpYnV0ZVZh
bHVlLCBIVE1MTGFiZWxFbGVtZW50Kik7CisgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWxFbGVt
ZW50Rm9ySWQoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSk7CisKICAgICBE
T01TZWxlY3Rpb24qIGdldFNlbGVjdGlvbigpIGNvbnN0OwogCiAgICAgLy8gRmluZCBmaXJzdCBh
bmNob3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KQEAgLTk0LDYgKzEwMSw5IEBAIHByaXZhdGU6CiAg
ICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1fZWxlbWVudHNCeUlkOwogICAgIERvY3VtZW50T3JkZXJl
ZE1hcCBtX2ltYWdlTWFwc0J5TmFtZTsKIAorICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2xhYmVs
c0J5Rm9yQXR0cmlidXRlOworICAgIGJvb2wgbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmli
dXRlOworCiAgICAgT3duUHRyPElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeT4gbV9pZFRhcmdldE9i
c2VydmVyUmVnaXN0cnk7CiAKICAgICBtdXRhYmxlIFJlZlB0cjxET01TZWxlY3Rpb24+IG1fc2Vs
ZWN0aW9uOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IGU4ODhiNGZmZDczOTdlYWM2MzIzZTNhMjVmZmE1Mjg5MjRhYzU4MTguLjIxMDcyY2NlYzc5
NTc1ZWExZTVhMmYyOGQ3YmNlOTJiZDljYzMwOTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMC0wOSAgRG9t
aW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbGFiZWxG
b3JFbGVtZW50IGlzIHNsb3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1lbnRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgyNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0
aXRsZVVJRWxlbWVudCBpbiB0aGUgY2hyb21pdW0gcG9ydCBvZiBEUlQsIGFuZAorICAgICAgICBm
aXggZ2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkIHNvIHRoYXQgaXQgZW5zdXJlcyB0aGUgYmFja2lu
ZyBzdG9yZQorICAgICAgICBpcyB1cC10by1kYXRlLgorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVu
dEJ5SWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50Q2FsbGJhY2spOgorCiAyMDEyLTEwLTA5ICBKdWxpZW4g
Q2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
Q2hyb21pdW0gV2luZG93cyBidWlsZCBmaXggYWZ0ZXIgcjEzMDgyMy4KZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCmluZGV4IDg5ZDVkNTg3NzBj
NjFkMWFhZTkxNjBiYTM0ZTQzNjc2NTE2YjA3YzIuLjBmZTRjMWY5OWU0NTk2ZDJkOGQ3NDc4YjIx
MWYzOWU2NWJmZjM3NjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckNocm9taXVtLmNwcApAQCAtMTE3LDYgKzExNyw5IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQoY29u
c3QKICAgICBpZiAobV9yb290RWxlbWVudC5pc051bGwoKSkKICAgICAgICAgbV9yb290RWxlbWVu
dCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpOwogCisgICAgaWYgKCFtX3Jvb3RF
bGVtZW50LnVwZGF0ZUJhY2tpbmdTdG9yZUFuZENoZWNrVmFsaWRpdHkoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKICAgICByZXR1cm4gZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZSht
X3Jvb3RFbGVtZW50LCBXZWJTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCmluZGV4IGQ2
MDgyMmJlOGYyM2YxMGUzYmM3NmEzY2FlMWRlZGE4YTg4ZDY2MWYuLjIxNTdkZGI2OWQ4MDIzYTY0
ODE5YmYxNWIwOTc4Yjk2ZTliNzA4NGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKQEAgLTc3NCw3ICs3NzQsMTMgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93Q2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVu
dENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG9iaiA9
IGFjY2Vzc2liaWxpdHlPYmplY3QoKS50aXRsZVVJRWxlbWVudCgpOworICAgIGlmIChvYmouaXNO
dWxsKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICByZXN1bHQtPnNldCgqKG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUob2JqKS0+Z2V0
QXNDcHBWYXJpYW50KCkpKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRT
ZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCZhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiZWY5NmRiNDJhOTAxYmM2ZWM5MmU5MDQzMTkx
YjBkMjc5MmZlZWI4Li4wMDJlNjYwZjc2ZGYyNTUzZTEyNDhkNTllZDlhYmE3YjcwYmE5YmQyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMTAtMDkgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6
b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdo
ZW4gdGhlcmUgYXJlIGEgbG90IG9mIERPTSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHR3byBuZXcgdGVzdHMgZm9yIHRpdGxlVUlF
bGVtZW50IHRoYXQgcnVuIG9uIGJvdGggTWFjIGFuZAorICAgICAgICBDaHJvbWl1bS4gT25lIHRl
c3RzIGNvcnJlY3RuZXNzLCB0aGUgb3RoZXIgdGVzdHMgc3BlZWQuCisKKyAgICAgICAgRml4ZXMg
b25lIHRlc3Qgc28gdGhhdCBpdCBwYXNzZXMgb24gQ2hyb21pdW0uCisgICAgICAgIEVuYWJsZXMg
b3RoZXIgdGVzdHMgdGhhdCBub3cgcGFzcyBvbiBDaHJvbWl1bS4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBwZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVu
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBlcmYvYWNjZXNzaWJpbGl0eS10aXRs
ZS11aS1lbGVtZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rl
c3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMTAtMDkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KIAogICAgICAgICBmaWxlc3lzdGVtLXVybC1pbi1pZnJhbWUgdGVzdCBpcyBmbGFreQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRp
dGxlLXVpLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQt
dGl0bGUtdWkuaHRtbAppbmRleCAxNzBlNTcwMWEwNDU4NWRjMDFlODZhYzY3OWIxZTM0MzA4MTYz
ZjE5Li4xMmY4MWUzMzhkY2E4YjVmMTRmMDFiODgyNjhjZGY2YjI5ZmYyMTViIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUt
dWkuaHRtbApAQCAtMjEsOCArMjEsNyBAQAogICAgICAgICAgICAgcGFzcy5mb2N1cygpOwogICAg
ICAgICAgICAgdmFyIHRpdGxlVUlFbGVtZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9j
dXNlZEVsZW1lbnQudGl0bGVVSUVsZW1lbnQoKTsKICAgICAgICAgICAgIHZhciB0aXRsZVRleHQg
PSB0aXRsZVVJRWxlbWVudC5jaGlsZEF0SW5kZXgoMCk7Ci0gICAgICAgICAgICB2YXIgcGF0dGVy
biA9ICJBWFZhbHVlOiBQYXNzd29yZCI7Ci0gICAgICAgICAgICBpZiAodGl0bGVUZXh0LmFsbEF0
dHJpYnV0ZXMoKS5pbmRleE9mKHBhdHRlcm4pICE9IC0xKSB7CisgICAgICAgICAgICBpZiAodGl0
bGVUZXh0LnN0cmluZ1ZhbHVlID09ICJBWFZhbHVlOiBQYXNzd29yZCIpIHsKICAgICAgICAgICAg
ICAgICByZXN1bHQuaW5uZXJUZXh0ICs9ICJUZXN0IHBhc3NlZFxuIjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDZjOGRmMmVjYTllZDIwMDI2NmViNGFkNTJhYzY0MGEyMzNiOWQxYgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVu
dC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNSBAQAorTGFiZWwgMSAgCitM
YWJlbCAyICAKK0xhYmVsIDMgIAorCitMYWJlbCA1ICAKK1RoaXMgdGVzdHMgdGhhdCB0aXRsZVVJ
RWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5ncyBjaGFuZ2UgZHluYW1pY2Fs
bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGF4RWxlbWVudCgnY29u
dHJvbDEnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkgaXMg
dHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2wyJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFs
KGF4RWxlbWVudCgnbGFiZWwyJykpIGlzIHRydWUKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQoYXhF
bGVtZW50KCdjb250cm9sMycpKSBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbGFiZWwzJykuc2V0QXR0cmlidXRlKCdmb3InLCAnY29udHJvbDMnKTsgYXhFbGVtZW50KCdj
b250cm9sMycpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMycpKSBp
cyB0cnVlCitQQVNTIHZhciBsYWJlbDRFbGVtZW50ID0gY3JlYXRlTGFiZWxXaXRoRm9yQXR0cmli
dXRlKCdjb250cm9sNCcpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0Jykp
IGlzIGZhbHNlCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBl
bmRDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250
cm9sNCcpKSBpcyB0cnVlCitQQVNTIGF4RWxlbWVudCgnY29udHJvbDQnKS50aXRsZVVJRWxlbWVu
dCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDQnKSkgaXMgdHJ1ZQorUEFTUyBsYWJlbDRFbGVt
ZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlF
bGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSkgaXMgZmFsc2UKK1BBU1MgaGFzVGl0bGVVSUVs
ZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNScpKSBpcyBmYWxzZQorUEFTUyByZXBhcmVudE5vZGVJ
bnRvQ29udGFpbmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sNScpLCBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbGFiZWw1JykpOyBheEVsZW1lbnQoJ2NvbnRyb2w1JykudGl0bGVV
SUVsZW1lbnQoKSAhPSBudWxsIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50KCdjb250cm9sNScpLnRp
dGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNScpKSBpcyB0cnVlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVj
dG5lc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjI0ODc0ZDYwMmE3ZTE3ZTZlYWZmOWEzOTEyYjVmNDE4
OWJmNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRs
ZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9ImNvbnRhaW5lciI+CisKKyAg
PGRpdj4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsMSIgZm9yPSJjb250cm9sMSI+TGFiZWwgMTwvbGFi
ZWw+CisgICAgPGlucHV0IGlkPSJjb250cm9sMSIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorCisg
IDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDIiPgorICAgICAgTGFiZWwgMgorICAgICAgPGlu
cHV0IGlkPSJjb250cm9sMiIgdHlwZT0idGV4dCI+CisgICAgPC9sYWJlbD4KKyAgPC9kaXY+CisK
KyAgPGRpdj4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsMyI+TGFiZWwgMzwvbGFiZWw+CisgICAgPGlu
cHV0IGlkPSJjb250cm9sMyIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorCisgIDxkaXY+CisgICAg
PGlucHV0IGlkPSJjb250cm9sNCIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorCisgIDxkaXY+Cisg
ICAgPGxhYmVsIGlkPSJsYWJlbDUiPgorICAgICAgTGFiZWwgNQorICAgIDwvbGFiZWw+CisgICAg
PGlucHV0IGlkPSJjb250cm9sNSIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorCisgIDxkaXY+Cisg
ICAgPGxhYmVsIGlkPSJsYWJlbDZiIiBmb3I9ImNvbnRyb2w2Ij5MYWJlbCA2YjwvbGFiZWw+Cisg
ICAgPGxhYmVsIGlkPSJsYWJlbDZjIiBmb3I9ImNvbnRyb2w2Ij5MYWJlbCA2YzwvbGFiZWw+Cisg
ICAgPGlucHV0IGlkPSJjb250cm9sNiIgdHlwZT0idGV4dCI+CisgIDwvZGl2PgorPC9kaXY+CisK
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRl
c3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3MgY29ycmVjdGx5IGV2ZW4gd2hlbiB0aGluZ3Mg
Y2hhbmdlIGR5bmFtaWNhbGx5LiIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93
LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisKKyAgICBmdW5jdGlvbiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQpIHsKKyAgICAgICAg
dmFyIGxhYmVsMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJ
ZCgibGFiZWwxIik7CisgICAgICAgIHZhciB0aXRsZVVJRWxlbWVudCA9IGF4RWxlbWVudC50aXRs
ZVVJRWxlbWVudCgpOworICAgICAgICBpZiAodGl0bGVVSUVsZW1lbnQgPT0gbnVsbCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRpdGxlVUlFbGVtZW50LnJvbGUg
PT0gbGFiZWwxLnJvbGU7CisgICAgfQorCisgICAgZnVuY3Rpb24gY3JlYXRlTGFiZWxXaXRoSWRB
bmRGb3JBdHRyaWJ1dGUoaWQsIGZvckF0dHJpYnV0ZVZhbHVlKSB7CisgICAgICAgIHZhciBsYWJl
bEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOworICAgICAgICBsYWJl
bEVsZW1lbnQuaWQgPSBpZDsKKyAgICAgICAgbGFiZWxFbGVtZW50LnNldEF0dHJpYnV0ZSgiZm9y
IiwgZm9yQXR0cmlidXRlVmFsdWUpOworICAgICAgICBsYWJlbEVsZW1lbnQuaW5uZXJUZXh0ID0g
IkxhYmVsIGZvciAiICsgZm9yQXR0cmlidXRlVmFsdWU7CisgICAgICAgIHJldHVybiBsYWJlbEVs
ZW1lbnQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVwYXJlbnROb2RlSW50b0NvbnRhaW5lcihu
b2RlLCBjb250YWluZXIpIHsKKyAgICAgICAgbm9kZS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxk
KG5vZGUpOworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gYXhFbGVtZW50KGlkKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoaWQpOworICAgIH0KKworICAgIHNob3Vs
ZEJlKCJheEVsZW1lbnQoJ2NvbnRyb2wxJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxl
bWVudCgnbGFiZWwxJykpIiwgInRydWUiKTsKKworICAgIHNob3VsZEJlKCJheEVsZW1lbnQoJ2Nv
bnRyb2wyJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWwyJykpIiwg
InRydWUiKTsKKworICAgIC8vIFRlc3QgY2hhbmdpbmcgdGhlICJmb3IiIGF0dHJpYnV0ZSBkeW5h
bWljYWxseS4KKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250
cm9sMycpKSIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbGFiZWwzJykuc2V0QXR0cmlidXRlKCdmb3InLCAnY29udHJvbDMnKTsgYXhFbGVtZW50KCdj
b250cm9sMycpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMycpKSIs
ICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IHVuYXR0YWNoZWQgbGFiZWwgZWxlbWVudCB0aGF0J3Mg
c3Vic2VxdWVudGx5IGF0dGFjaGVkLgorICAgIHZhciBsYWJlbDRFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgibGFiZWwiKTsKKyAgICBsYWJlbDRFbGVtZW50LmlkID0gImxhYmVsNCI7
CisgICAgbGFiZWw0RWxlbWVudC5zZXRBdHRyaWJ1dGUoImZvciIsICJjb250cm9sNCIpOworICAg
IGxhYmVsNEVsZW1lbnQuaW5uZXJUZXh0ID0gIkxhYmVsIDQiOworICAgIHNob3VsZEJlKCJ2YXIg
bGFiZWw0RWxlbWVudCA9IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRlKCdsYWJlbDQn
LCAnY29udHJvbDQnKTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSIs
ICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFp
bmVyJykuYXBwZW5kQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxl
bWVudCgnY29udHJvbDQnKSkiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJheEVsZW1lbnQoJ2Nv
bnRyb2w0JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw0JykpIiwg
InRydWUiKTsKKworICAgIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGxhYmVsIGlzIGRl
dGFjaGVkLgorICAgIHNob3VsZEJlKCJsYWJlbDRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3Zl
Q2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJv
bDQnKSkiLCAiZmFsc2UiKTsKKworICAgIC8vIFRlc3QgbGFiZWwgdGhhdCBnZXRzIGEgY29udHJv
bCByZXBhcmVudGVkIGludG8gaXQuCisgICAgc2hvdWxkQmUoImhhc1RpdGxlVUlFbGVtZW50KGF4
RWxlbWVudCgnY29udHJvbDUnKSkiLCAiZmFsc2UiKTsKKworICAgIHNob3VsZEJlKCJyZXBhcmVu
dE5vZGVJbnRvQ29udGFpbmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sNScpLCBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWw1JykpOyBheEVsZW1lbnQoJ2NvbnRyb2w1Jyku
dGl0bGVVSUVsZW1lbnQoKSAhPSBudWxsIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgiYXhFbGVt
ZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVs
NScpKSIsICJ0cnVlIik7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGZpcnN0IGxhYmVsIGlzIHJl
dHVybmVkLCBldmVuIGFzIGxhYmVscyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQuCisgICAgc2hvdWxk
QmUoImF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVt
ZW50KCdsYWJlbDZiJykpIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgibmV3TGFiZWw2RWxlbWVu
dCA9IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRlKCdsYWJlbDZhJywgJ2NvbnRyb2w2
Jyk7IGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKG5ld0xhYmVsNkVsZW1lbnQsIGRvY3VtZW50
LmJvZHkuZmlyc3RDaGlsZCk7IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgp
LmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZhJykpIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgi
ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuZXdMYWJlbDZFbGVtZW50KTsgYXhFbGVtZW50KCdj
b250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNmInKSki
LCAidHJ1ZSIpOworfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxl
bWVudC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZkOTg2OTk1ZTU5ZDM3NzFlMDMzNDZiYzg3
ZTUwMzNhYTRhMTc2OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BlcmYvYWNjZXNz
aWJpbGl0eS10aXRsZS11aS1lbGVtZW50LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1Rl
c3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgb24gYW4gYWNjZXNzaWJpbGl0eSBlbGVtZW50IHJ1bnMg
aW4gYW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCitQQVNTCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BlcmYvYWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50Lmh0bWwgYi9MYXlvdXRUZXN0
cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3
OWI5MDA3Y2ZhZjFiMjA2ZTk2ZWFlMmFkMjJiZDAzYjk0ZmU4NzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC5odG1sCkBA
IC0wLDAgKzEsNTQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvbWFnbml0dWRlLXBlcmYuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KwordmFyIHBhcmVudENvbnRhaW5lcjsKK3ZhciBheENvbnRyb2w7CisKK2Z1bmN0aW9uIGVuZHNX
aXRoKHN0ciwgc3VmZml4KSB7CisgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIHN1
ZmZpeC5sZW5ndGgpID09IHN1ZmZpeDsKK30KKworZnVuY3Rpb24gc2V0dXAobWFnbml0dWRlKSB7
CisgICAgaWYgKHBhcmVudENvbnRhaW5lcikKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVD
aGlsZChwYXJlbnRDb250YWluZXIpOworICAgIHBhcmVudENvbnRhaW5lciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFyZW50
Q29udGFpbmVyKTsKKworICAgIHZhciBqdW5rQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7CisgICAgcGFyZW50Q29udGFpbmVyLmFwcGVuZENoaWxkKGp1bmtDb250YWlu
ZXIpOworCisgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTsK
KyAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjb250cm9sJyk7CisgICAgbGFiZWwuaW5u
ZXJUZXh0ID0gJ0xhYmVsJzsKKyAgICBwYXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWwp
OworCisgICAgdmFyIGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwor
ICAgIGNvbnRyb2wudHlwZSA9ICd0ZXh0JzsKKyAgICBjb250cm9sLmlkID0gJ2NvbnRyb2wnOwor
ICAgIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChjb250cm9sKTsKKworICAgIHBhcmVudENv
bnRhaW5lci5vZmZzZXRMZWZ0OworICAgIGF4Q29udHJvbCA9IGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgnY29udHJvbCcpOworCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMCAqIG1hZ25pdHVkZTsgKytpKSB7CisgICAgICAgIHZhciBkaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8cD48L3A+
PHA+PC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPiI7CisgICAgICAgIGp1bmtDb250YWluZXIuYXBw
ZW5kQ2hpbGQoZGl2KTsKKyAgICB9CisgICAgcGFyZW50Q29udGFpbmVyLm9mZnNldExlZnQ7Cit9
CisKK2Z1bmN0aW9uIHRlc3QobWFnbml0dWRlKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7IGkrKykgeworICAgICAgICBheENvbnRyb2wudGl0bGVVSUVsZW1lbnQoKTsKKyAgICB9Cit9
CisKK01hZ25pdHVkZS5kZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCBvbiBh
biBhY2Nlc3NpYmlsaXR5IGVsZW1lbnQgcnVucyBpbiBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4i
KTsKK01hZ25pdHVkZS5ydW4oc2V0dXAsIHRlc3QsIE1hZ25pdHVkZS5DT05TVEFOVCk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGU2YjQ5ZjUzOTk5YjY5NGFlNDI0MjA5M2FlMDBlNmY0
NjgyMDQ3MTAuLjFlODYzNDhjOWRkZGJjNzNjYTFkYjk0ODExY2Q5MjY0ODA1ZjExMTYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTQw
MCwxNCArMTQwMCwxMSBAQCBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9sYW5ndWFnZS1h
dHRyaWJ1dGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbGVn
ZW5kLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2xpc3RzLmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L21lZGlhLWVsZW1lbnQu
aHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbm9uLWRhdGEtdGFi
bGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvcGx1Z2luLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1jaGVja2JveC1zaXplLmh0bWwgWyBTa2lwIF0KIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1ncm91cC1tZW1iZXJzLmh0
bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi10
aXRsZS1sYWJlbC5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9z
ZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L3RhYmxlLWF0dHJpYnV0ZXMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbC1zcGFucy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5j
b20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1jZWxscy5odG1sIFsgU2tpcCBdCkBAIC0xNDE2
LDcgKzE0MTMsNiBAQCBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1vbmUtY2Vs
bC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1zZWN0
aW9ucy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS13
aXRoLWFyaWEtcm9sZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0
eS90YWJsZS13aXRoLXJ1bGVzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3Np
YmlsaXR5L3RoLWFzLXRpdGxlLXVpLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nl
c3NpYmlsaXR5L3RyYW5zZm9ybWVkLWVsZW1lbnQuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvdmlzaWJsZS1lbGVtZW50cy5odG1sIFsgU2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167936</attachid>
            <date>2012-10-09 23:49:06 -0700</date>
            <delta_ts>2012-10-11 13:41:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20121009234806.patch</filename>
            <type>text/plain</type>
            <size>28573</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwODMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzYwYTA1M2ExNjUyZDZi
Yjc2ZmU0N2M2YjQzZGE3NDUwYzE2NmVmMy4uNTc5MTgyNGE0NzUwY2JlYjQyNWQxMGU0NDRmODYz
YTZiOWNlNjIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTEwLTA5ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIERvY3Vt
ZW50T3JkZXJlZE1hcCB0byBUcmVlU2NvcGUgdGhhdCBhbGxvd3MgYWNjZXNzaWJpbGl0eSB0bwor
ICAgICAgICBxdWlja2x5IG1hcCBmcm9tIGFuIGlkIHRvIHRoZSBsYWJlbCBmb3IgdGhhdCBpZC4g
VGhpcyBzcGVlZHMgdXAKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGU6OmxhYmVsRm9yRWxlbWVu
dCwgd2hpY2ggd2FzIGEgYm90dGxlbmVjayBpbiBDaHJvbWl1bQorICAgICAgICB3aGVuIGFjY2Vz
c2liaWxpdHkgd2FzIG9uLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAgICAgICAgcGVyZi9hY2Nlc3NpYmls
aXR5LXRpdGxlLXVpLWVsZW1lbnQuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmtleU1hdGNoZXNMYWJlbEZvckF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJl
ZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudE9yZGVyZWRNYXAuaDoKKyAgICAgICAgKERvY3VtZW50T3JkZXJlZE1hcCk6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUxhYmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZSk6CisgICAgICAgICog
ZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlU2Nv
cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpUcmVlU2NvcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVNjb3BlOjphZGRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6cmVtb3ZlTGFiZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgICogZG9tL1RyZWVTY29w
ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUcmVlU2NvcGUpOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpzaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKToKKwog
MjAxMi0xMC0wOSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXBk
YXRlIHRoZSBDU1MgcHJvcGVydHkgdXNlZCB0byBzdXBwb3J0IGRyYWdnYWJsZSByZWdpb25zLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcAppbmRleCAwZjk0ODM4ZTdlYzU1YTk2OWVkYjFlODA1MDAwMzk3NWQ3ZWVj
YzEzLi4yYjVmODVjNGQ2YjZhNDIxNjQwMTIzNjg0OGU0Y2EzNDExYTE2MTVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCisjaW5jbHVkZSAiTGFiZWxhYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvY2Fs
aXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCkBAIC0xMDAxLDE0ICsxMDAyLDE4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmlzR2VuZXJpY0ZvY3VzYWJsZUVsZW1lbnQoKSBjb25zdAogCiBIVE1MTGFiZWxFbGVtZW50
KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxhYmVsIik7Ci0gICAgdW5zaWduZWQgbGVuID0g
bGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgewotICAg
ICAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxF
bGVtZW50Kj4obGlzdC0+aXRlbShpKSk7Ci0gICAgICAgICAgICBpZiAobGFiZWwtPmNvbnRyb2wo
KSA9PSBlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbDsKLSAgICAgICAgfQor
ICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpIHx8ICF0b0hUTUxFbGVtZW50KGVsZW1l
bnQpLT5pc0xhYmVsYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgIGlmICghaWQuaXNF
bXB0eSgpKSB7CisgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGVsZW1lbnQt
PnRyZWVTY29wZSgpLT5sYWJlbEVsZW1lbnRGb3JJZChpZCkpCisgICAgICAgICAgICByZXR1cm4g
bGFiZWw7CisgICAgfQorCisgICAgZm9yIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsK
KyAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShsYWJlbFRhZykpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHBhcmVudCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmlu
ZGV4IDEyOTdlNTEwMmZiNGU3OWNlM2RiMTEyMzU3MDIxZTNkZDA1NTRhNTEuLmJiZDhiM2IxNmVh
ZjQ5ZTAxNmVkMDQ3NmIwYmI0YTllNzYwNjA0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE9yZGVyZWRNYXAuY3BwCkBAIC01NSw2ICs1NSwxMSBAQCBpbmxpbmUgYm9vbCBrZXlNYXRj
aGVzTG93ZXJjYXNlZE1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBFbGVtZW50KiBlbGVt
ZW50KQogICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKG1hcFRhZykgJiYgc3RhdGljX2Nh
c3Q8SFRNTE1hcEVsZW1lbnQqPihlbGVtZW50KS0+Z2V0TmFtZSgpLmxvd2VyKCkuaW1wbCgpID09
IGtleTsKIH0KIAoraW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKEF0b21p
Y1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVu
dC0+aGFzVGFnTmFtZShsYWJlbFRhZykgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGZvckF0dHIp
LmltcGwoKSA9PSBrZXk7Cit9CisKIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpjbGVhcigpCiB7
CiAgICAgbV9tYXAuY2xlYXIoKTsKQEAgLTE0OSw1ICsxNTQsOSBAQCBFbGVtZW50KiBEb2N1bWVu
dE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZ0lt
cGwqIGtleQogICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXks
IHNjb3BlKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorRWxlbWVudCogRG9jdW1lbnRP
cmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBs
KiBrZXksIGNvbnN0IFRyZWVTY29wZSogc2NvcGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldDxr
ZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGU+KGtleSwgc2NvcGUpOworfQogCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKaW5kZXgg
N2QxMjY4NmMzMzZhZDhmMGE2MTc0MzlmMTY4NDlmNjRjYzNiOWIxZC4uMWY5MDM5ZTYxNDNkMzg2
MjhkZmEzMDBhZTk4NmEwMWVlMzIzYzdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50T3JkZXJlZE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxl
bWVudEJ5SWQoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwogICAg
IEVsZW1lbnQqIGdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRy
ZWVTY29wZSopIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBO
YW1lKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKKyAgICBFbGVt
ZW50KiBnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBsKiwgY29u
c3QgVHJlZVNjb3BlKikgY29uc3Q7CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25z
dDsKIApAQCAtODAsNCArODEsMyBAQCBpbmxpbmUgYm9vbCBEb2N1bWVudE9yZGVyZWRNYXA6OmNv
bnRhaW5zTXVsdGlwbGUoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBEb2N1bWVudE9yZGVyZWRNYXBfaAotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggZGQxMzE2OGQ5YzZkMjU5NGVmNzg0ZWM3YzMyYmNmNGUzYTM4ODdmYy4u
NzAzNTM0NDQwNzZlNzM1ZDk1YTYzZmE5MWQ3ZThhY2VmMDBiYjNkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEZvcm1Db2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxQ
YXJzZXJJZGlvbXMuaCIKQEAgLTk1OSw2ICs5NjAsMTIgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uUmVxdWVzdCBFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0
aW8KICAgICBpZiAoIW5hbWVWYWx1ZS5pc051bGwoKSkKICAgICAgICAgdXBkYXRlTmFtZShudWxs
QXRvbSwgbmFtZVZhbHVlKTsKIAorICAgIGlmIChoYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAg
ICAgICBUcmVlU2NvcGUqIHNjb3BlID0gdHJlZVNjb3BlKCk7CisgICAgICAgIGlmIChzY29wZS0+
c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgdXBkYXRlTGFi
ZWwoc2NvcGUsIG51bGxBdG9tLCBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpKTsKKyAgICB9CisK
ICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KIApAQCAtOTkxLDYgKzk5OCwxMiBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQogICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVWYWx1ZSA9IGdldE5hbWVBdHRyaWJ1dGUoKTsK
ICAgICAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICB1cGRhdGVOYW1l
KG5hbWVWYWx1ZSwgbnVsbEF0b20pOworCisgICAgICAgIGlmIChoYXNUYWdOYW1lKGxhYmVsVGFn
KSkgeworICAgICAgICAgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSB0cmVlU2NvcGVPZlBhcmVu
dCh0aGlzLCBpbnNlcnRpb25Qb2ludCk7CisgICAgICAgICAgICBpZiAodHJlZVNjb3BlLT5zaG91
bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkpCisgICAgICAgICAgICAgICAgdXBkYXRlTGFi
ZWwodHJlZVNjb3BlLCBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpLCBudWxsQXRvbSk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBDb250YWluZXJOb2RlOjpyZW1vdmVkRnJvbShpbnNlcnRpb25Q
b2ludCk7CkBAIC0yMTA0LDEyICsyMTE3LDMwIEBAIGJvb2wgRWxlbWVudDo6aGFzTmFtZWROb2Rl
TWFwKCkgY29uc3QKIH0KICNlbmRpZgogCit2b2lkIEVsZW1lbnQ6OnVwZGF0ZUxhYmVsKFRyZWVT
Y29wZSogc2NvcGUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkRm9yQXR0cmlidXRlVmFsdWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmV3Rm9yQXR0cmlidXRlVmFsdWUpCit7CisgICAgQVNTRVJUKGhh
c1RhZ05hbWUobGFiZWxUYWcpKTsKKworICAgIGlmIChvbGRGb3JBdHRyaWJ1dGVWYWx1ZSA9PSBu
ZXdGb3JBdHRyaWJ1dGVWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFvbGRGb3JB
dHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHNjb3BlLT5yZW1vdmVMYWJlbChvbGRG
b3JBdHRyaWJ1dGVWYWx1ZSwgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHRoaXMpKTsK
KyAgICBpZiAoIW5ld0ZvckF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgc2NvcGUt
PmFkZExhYmVsKG5ld0ZvckF0dHJpYnV0ZVZhbHVlLCBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVt
ZW50Kj4odGhpcykpOworfQorCiB2b2lkIEVsZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKIHsKICAgICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUo
bmFtZSkpCiAgICAgICAgIHVwZGF0ZUlkKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CiAgICAgZWxzZSBp
ZiAobmFtZSA9PSBIVE1MTmFtZXM6Om5hbWVBdHRyKQogICAgICAgICB1cGRhdGVOYW1lKG9sZFZh
bHVlLCBuZXdWYWx1ZSk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OmZvckF0dHIg
JiYgaGFzVGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IHRy
ZWVTY29wZSgpOworICAgICAgICBpZiAoc2NvcGUtPnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRy
aWJ1dGUoKSkKKyAgICAgICAgICAgIHVwZGF0ZUxhYmVsKHNjb3BlLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgIH0KIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgaWYgKE93
blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gcmVjaXBpZW50cyA9IE11dGF0aW9u
T2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JBdHRyaWJ1dGVzTXV0YXRpb24odGhpcywg
bmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBjNzA4Nzc1YmEzNjhjZWY3N2UxN2ZhMmZiNzI5
NmM1MzE0MWJlODZiLi5iZWJlNDY1M2I4MTY4MWZkMDE4ZmUxZDVmMGUzZjRlOWI4ODQ3YjQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKQEAgLTMxNiw2ICszMTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1
cGRhdGVJZChjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5l
d0lkKTsKICAgICB2b2lkIHVwZGF0ZUlkKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYg
b2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpOwogICAgIHZvaWQgdXBkYXRlTmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSk7
CisgICAgdm9pZCB1cGRhdGVMYWJlbChUcmVlU2NvcGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9s
ZEZvckF0dHJpYnV0ZVZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0ZvckF0dHJpYnV0ZVZh
bHVlKTsKIAogICAgIHZvaWQgd2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdW
YWx1ZSk7CiAgICAgdm9pZCB3aWxsUmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKaW5k
ZXggMjQ1M2E4ZjM0NTI2M2U1ODFmN2E0NzY2YjE5MDNlMTAzMmFmY2FiOC4uYjE4NGJmMDg5MjVi
ZWNhODkzODM0OTUzM2IwNThkZTFiY2JmNTRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1RyZWVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAK
QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbmNo
b3JFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5Lmgi
CkBAIC01NSw2ICs1Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBUcmVlU2NvcGU6
OlRyZWVTY29wZShDb250YWluZXJOb2RlKiByb290Tm9kZSkKICAgICA6IG1fcm9vdE5vZGUocm9v
dE5vZGUpCiAgICAgLCBtX3BhcmVudFRyZWVTY29wZSgwKQorICAgICwgbV9zaG91bGRDYWNoZUxh
YmVsc0J5Rm9yQXR0cmlidXRlKGZhbHNlKQogICAgICwgbV9pZFRhcmdldE9ic2VydmVyUmVnaXN0
cnkoSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpjcmVhdGUoKSkKIHsKICAgICBBU1NFUlQocm9v
dE5vZGUpOwpAQCAtMTQ0LDYgKzE0NiwzNyBAQCBIVE1MTWFwRWxlbWVudCogVHJlZVNjb3BlOjpn
ZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTE1hcEVsZW1lbnQqPihtX2ltYWdlTWFwc0J5TmFtZS5nZXRFbGVtZW50QnlNYXBOYW1l
KEF0b21pY1N0cmluZyhuYW1lKS5pbXBsKCksIHRoaXMpKTsKIH0KIAordm9pZCBUcmVlU2NvcGU6
OmFkZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJl
bEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5hZGQoZm9y
QXR0cmlidXRlVmFsdWUuaW1wbCgpLCBlbGVtZW50KTsKK30KKwordm9pZCBUcmVlU2NvcGU6OnJl
bW92ZUxhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJl
bEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5yZW1vdmUo
Zm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCBlbGVtZW50KTsKK30KKworSFRNTExhYmVsRWxlbWVu
dCogVHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0
dHJpYnV0ZVZhbHVlKQoreworICAgIGlmICghbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmli
dXRlKSB7CisgICAgICAgIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSA9IHRydWU7
CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGxhYmVsVGFnKSkgeworICAgICAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0g
c3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZm9yVmFsdWUgPSBsYWJlbC0+ZmFzdEdldEF0dHJpYnV0ZShmb3JB
dHRyKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYWRkTGFiZWwoZm9yVmFsdWUsIGxhYmVsKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChmb3JBdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgSFRNTExhYmVsRWxlbWVudCogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUuZ2V0RWxlbWVu
dEJ5TGFiZWxGb3JBdHRyaWJ1dGUoZm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCB0aGlzKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQtPmluRG9jdW1lbnQoKSA/IHJlc3VsdCA6IDA7Cit9
CisKIERPTVNlbGVjdGlvbiogVHJlZVNjb3BlOjpnZXRTZWxlY3Rpb24oKSBjb25zdAogewogICAg
IGlmICghcm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKQEAgLTI4Myw0ICszMTYsMyBA
QCBUcmVlU2NvcGUqIGNvbW1vblRyZWVTY29wZShOb2RlKiBub2RlQSwgTm9kZSogbm9kZUIpCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1RyZWVTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCmluZGV4IGQ5
NzU4YjAyOGU0ZDQ1Njc4NGY0NTkwZTA5MGU1YTI1N2QyOTQ1ZjMuLjljYWU1NGRlOGRmNzc2MjA0
OTczNDU1MTI0NDdkZjQyMmVkNDk0YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKQEAgLTM1LDYg
KzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNz
IERPTVNlbGVjdGlvbjsKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBIVE1MTGFiZWxFbGVtZW50Owog
Y2xhc3MgSFRNTE1hcEVsZW1lbnQ7CiBjbGFzcyBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk7CiBj
bGFzcyBOb2RlOwpAQCAtNjIsNiArNjMsMTIgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSW1h
Z2VNYXAoSFRNTE1hcEVsZW1lbnQqKTsKICAgICBIVE1MTWFwRWxlbWVudCogZ2V0SW1hZ2VNYXAo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OwogCisgICAgLy8gRm9yIGFjY2Vzc2liaWxpdHkuCisg
ICAgYm9vbCBzaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlOyB9CisgICAgdm9pZCBhZGRMYWJlbChj
b25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHJpYnV0ZVZhbHVlLCBIVE1MTGFiZWxFbGVtZW50Kik7
CisgICAgdm9pZCByZW1vdmVMYWJlbChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHJpYnV0ZVZh
bHVlLCBIVE1MTGFiZWxFbGVtZW50Kik7CisgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWxFbGVt
ZW50Rm9ySWQoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSk7CisKICAgICBE
T01TZWxlY3Rpb24qIGdldFNlbGVjdGlvbigpIGNvbnN0OwogCiAgICAgLy8gRmluZCBmaXJzdCBh
bmNob3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KQEAgLTk0LDYgKzEwMSw5IEBAIHByaXZhdGU6CiAg
ICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1fZWxlbWVudHNCeUlkOwogICAgIERvY3VtZW50T3JkZXJl
ZE1hcCBtX2ltYWdlTWFwc0J5TmFtZTsKIAorICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2xhYmVs
c0J5Rm9yQXR0cmlidXRlOworICAgIGJvb2wgbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmli
dXRlOworCiAgICAgT3duUHRyPElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeT4gbV9pZFRhcmdldE9i
c2VydmVyUmVnaXN0cnk7CiAKICAgICBtdXRhYmxlIFJlZlB0cjxET01TZWxlY3Rpb24+IG1fc2Vs
ZWN0aW9uOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IGU4ODhiNGZmZDczOTdlYWM2MzIzZTNhMjVmZmE1Mjg5MjRhYzU4MTguLjIxMDcyY2NlYzc5
NTc1ZWExZTVhMmYyOGQ3YmNlOTJiZDljYzMwOTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMC0wOSAgRG9t
aW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbGFiZWxG
b3JFbGVtZW50IGlzIHNsb3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1lbnRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgyNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0
aXRsZVVJRWxlbWVudCBpbiB0aGUgY2hyb21pdW0gcG9ydCBvZiBEUlQsIGFuZAorICAgICAgICBm
aXggZ2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkIHNvIHRoYXQgaXQgZW5zdXJlcyB0aGUgYmFja2lu
ZyBzdG9yZQorICAgICAgICBpcyB1cC10by1kYXRlLgorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVu
dEJ5SWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50Q2FsbGJhY2spOgorCiAyMDEyLTEwLTA5ICBKdWxpZW4g
Q2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
Q2hyb21pdW0gV2luZG93cyBidWlsZCBmaXggYWZ0ZXIgcjEzMDgyMy4KZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCmluZGV4IDg5ZDVkNTg3NzBj
NjFkMWFhZTkxNjBiYTM0ZTQzNjc2NTE2YjA3YzIuLjBmZTRjMWY5OWU0NTk2ZDJkOGQ3NDc4YjIx
MWYzOWU2NWJmZjM3NjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckNocm9taXVtLmNwcApAQCAtMTE3LDYgKzExNyw5IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQoY29u
c3QKICAgICBpZiAobV9yb290RWxlbWVudC5pc051bGwoKSkKICAgICAgICAgbV9yb290RWxlbWVu
dCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpOwogCisgICAgaWYgKCFtX3Jvb3RF
bGVtZW50LnVwZGF0ZUJhY2tpbmdTdG9yZUFuZENoZWNrVmFsaWRpdHkoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKICAgICByZXR1cm4gZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZSht
X3Jvb3RFbGVtZW50LCBXZWJTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCmluZGV4IGQ2
MDgyMmJlOGYyM2YxMGUzYmM3NmEzY2FlMWRlZGE4YTg4ZDY2MWYuLjIxNTdkZGI2OWQ4MDIzYTY0
ODE5YmYxNWIwOTc4Yjk2ZTliNzA4NGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKQEAgLTc3NCw3ICs3NzQsMTMgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93Q2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVu
dENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG9iaiA9
IGFjY2Vzc2liaWxpdHlPYmplY3QoKS50aXRsZVVJRWxlbWVudCgpOworICAgIGlmIChvYmouaXNO
dWxsKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICByZXN1bHQtPnNldCgqKG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUob2JqKS0+Z2V0
QXNDcHBWYXJpYW50KCkpKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRT
ZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCZhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiZWY5NmRiNDJhOTAxYmM2ZWM5MmU5MDQzMTkx
YjBkMjc5MmZlZWI4Li4wMDJlNjYwZjc2ZGYyNTUzZTEyNDhkNTllZDlhYmE3YjcwYmE5YmQyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMTAtMDkgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6
b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdo
ZW4gdGhlcmUgYXJlIGEgbG90IG9mIERPTSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHR3byBuZXcgdGVzdHMgZm9yIHRpdGxlVUlF
bGVtZW50IHRoYXQgcnVuIG9uIGJvdGggTWFjIGFuZAorICAgICAgICBDaHJvbWl1bS4gT25lIHRl
c3RzIGNvcnJlY3RuZXNzLCB0aGUgb3RoZXIgdGVzdHMgc3BlZWQuCisKKyAgICAgICAgRml4ZXMg
b25lIHRlc3Qgc28gdGhhdCBpdCBwYXNzZXMgb24gQ2hyb21pdW0uCisgICAgICAgIEVuYWJsZXMg
b3RoZXIgdGVzdHMgdGhhdCBub3cgcGFzcyBvbiBDaHJvbWl1bS4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBwZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVu
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBlcmYvYWNjZXNzaWJpbGl0eS10aXRs
ZS11aS1lbGVtZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rl
c3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMTAtMDkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KIAogICAgICAgICBmaWxlc3lzdGVtLXVybC1pbi1pZnJhbWUgdGVzdCBpcyBmbGFreQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRp
dGxlLXVpLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQt
dGl0bGUtdWkuaHRtbAppbmRleCAxNzBlNTcwMWEwNDU4NWRjMDFlODZhYzY3OWIxZTM0MzA4MTYz
ZjE5Li4xMmY4MWUzMzhkY2E4YjVmMTRmMDFiODgyNjhjZGY2YjI5ZmYyMTViIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUt
dWkuaHRtbApAQCAtMjEsOCArMjEsNyBAQAogICAgICAgICAgICAgcGFzcy5mb2N1cygpOwogICAg
ICAgICAgICAgdmFyIHRpdGxlVUlFbGVtZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9j
dXNlZEVsZW1lbnQudGl0bGVVSUVsZW1lbnQoKTsKICAgICAgICAgICAgIHZhciB0aXRsZVRleHQg
PSB0aXRsZVVJRWxlbWVudC5jaGlsZEF0SW5kZXgoMCk7Ci0gICAgICAgICAgICB2YXIgcGF0dGVy
biA9ICJBWFZhbHVlOiBQYXNzd29yZCI7Ci0gICAgICAgICAgICBpZiAodGl0bGVUZXh0LmFsbEF0
dHJpYnV0ZXMoKS5pbmRleE9mKHBhdHRlcm4pICE9IC0xKSB7CisgICAgICAgICAgICBpZiAodGl0
bGVUZXh0LnN0cmluZ1ZhbHVlID09ICJBWFZhbHVlOiBQYXNzd29yZCIpIHsKICAgICAgICAgICAg
ICAgICByZXN1bHQuaW5uZXJUZXh0ICs9ICJUZXN0IHBhc3NlZFxuIjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDhjNTIwM2RjNjZhMzU3YmY5MmMyNjc3ZjJlOGVhNzcwOTRmYjU2NAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVu
dC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAorTGFiZWwgMSAgCitM
YWJlbCAyICAKK0xhYmVsIDMgIAorCitMYWJlbCA1ICAKK0xhYmVsIDZiIExhYmVsIDZjICAKK1Ro
aXMgdGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRo
aW5ncyBjaGFuZ2UgZHluYW1pY2FsbHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIGF4RWxlbWVudCgnY29udHJvbDEnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhF
bGVtZW50KCdsYWJlbDEnKSkgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2wyJykudGl0
bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWwyJykpIGlzIHRydWUKK1BBU1Mg
aGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sMycpKSBpcyBmYWxzZQorUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWwzJykuc2V0QXR0cmlidXRlKCdmb3InLCAnY29u
dHJvbDMnKTsgYXhFbGVtZW50KCdjb250cm9sMycpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChh
eEVsZW1lbnQoJ2xhYmVsMycpKSBpcyB0cnVlCitQQVNTIHZhciBsYWJlbDRFbGVtZW50ID0gY3Jl
YXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVsNCcsICdjb250cm9sNCcpOyBoYXNU
aXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIGlzIGZhbHNlCitQQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChsYWJlbDRFbGVtZW50
KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSBpcyB0cnVlCitQQVNT
IGF4RWxlbWVudCgnY29udHJvbDQnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDQnKSkgaXMgdHJ1ZQorUEFTUyBsYWJlbDRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVt
b3ZlQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29u
dHJvbDQnKSkgaXMgZmFsc2UKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250
cm9sNScpKSBpcyBmYWxzZQorUEFTUyByZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb250cm9sNScpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFi
ZWw1JykpOyBheEVsZW1lbnQoJ2NvbnRyb2w1JykudGl0bGVVSUVsZW1lbnQoKSAhPSBudWxsIGlz
IHRydWUKK1BBU1MgYXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVh
bChheEVsZW1lbnQoJ2xhYmVsNScpKSBpcyB0cnVlCitQQVNTIGF4RWxlbWVudCgnY29udHJvbDYn
KS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpIGlzIHRydWUK
K1BBU1MgbmV3TGFiZWw2RWxlbWVudCA9IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRl
KCdsYWJlbDZhJywgJ2NvbnRyb2w2Jyk7IGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKG5ld0xh
YmVsNkVsZW1lbnQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7IGF4RWxlbWVudCgnY29udHJv
bDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZhJykpIGlzIHRy
dWUKK1BBU1MgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuZXdMYWJlbDZFbGVtZW50KTsgYXhF
bGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xh
YmVsNmInKSkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUt
dWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90
aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIyNDg3NGQ2MDJh
N2UxN2U2ZWFmZjlhMzkxMmI1ZjQxODliZjVhNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCkBAIC0w
LDAgKzEsMTExIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8ZGl2
IGlkPSJjb250YWluZXIiPgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDEiIGZvcj0i
Y29udHJvbDEiPkxhYmVsIDE8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDEiIHR5cGU9
InRleHQiPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWwyIj4KKyAg
ICAgIExhYmVsIDIKKyAgICAgIDxpbnB1dCBpZD0iY29udHJvbDIiIHR5cGU9InRleHQiPgorICAg
IDwvbGFiZWw+CisgIDwvZGl2PgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDMiPkxh
YmVsIDM8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDMiIHR5cGU9InRleHQiPgorICA8
L2Rpdj4KKworICA8ZGl2PgorICAgIDxpbnB1dCBpZD0iY29udHJvbDQiIHR5cGU9InRleHQiPgor
ICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWw1Ij4KKyAgICAgIExhYmVs
IDUKKyAgICA8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDUiIHR5cGU9InRleHQiPgor
ICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWw2YiIgZm9yPSJjb250cm9s
NiI+TGFiZWwgNmI8L2xhYmVsPgorICAgIDxsYWJlbCBpZD0ibGFiZWw2YyIgZm9yPSJjb250cm9s
NiI+TGFiZWwgNmM8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDYiIHR5cGU9InRleHQi
PgorICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IHdvcmtzIGNvcnJl
Y3RseSBldmVuIHdoZW4gdGhpbmdzIGNoYW5nZSBkeW5hbWljYWxseS4iKTsKKworaWYgKHdpbmRv
dy50ZXN0UnVubmVyICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIHRl
c3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCisgICAgZnVuY3Rpb24gaGFzVGl0bGVVSUVsZW1lbnQo
YXhFbGVtZW50KSB7CisgICAgICAgIHZhciBsYWJlbDEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImxhYmVsMSIpOworICAgICAgICB2YXIgdGl0bGVVSUVs
ZW1lbnQgPSBheEVsZW1lbnQudGl0bGVVSUVsZW1lbnQoKTsKKyAgICAgICAgaWYgKHRpdGxlVUlF
bGVtZW50ID09IG51bGwpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biB0aXRsZVVJRWxlbWVudC5yb2xlID09IGxhYmVsMS5yb2xlOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRlKGlkLCBmb3JBdHRyaWJ1dGVWYWx1
ZSkgeworICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
bGFiZWwiKTsKKyAgICAgICAgbGFiZWxFbGVtZW50LmlkID0gaWQ7CisgICAgICAgIGxhYmVsRWxl
bWVudC5zZXRBdHRyaWJ1dGUoImZvciIsIGZvckF0dHJpYnV0ZVZhbHVlKTsKKyAgICAgICAgbGFi
ZWxFbGVtZW50LmlubmVyVGV4dCA9ICJMYWJlbCBmb3IgIiArIGZvckF0dHJpYnV0ZVZhbHVlOwor
ICAgICAgICByZXR1cm4gbGFiZWxFbGVtZW50OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlcGFy
ZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgY29udGFpbmVyKSB7CisgICAgICAgIG5vZGUucGFy
ZW50RWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENo
aWxkKG5vZGUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGF4RWxlbWVudChpZCkgeworICAgICAg
ICByZXR1cm4gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKGlk
KTsKKyAgICB9CisKKyAgICBzaG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sMScpLnRpdGxlVUlF
bGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMScpKSIsICJ0cnVlIik7CisKKyAgICBz
aG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChh
eEVsZW1lbnQoJ2xhYmVsMicpKSIsICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IGNoYW5naW5nIHRo
ZSAiZm9yIiBhdHRyaWJ1dGUgZHluYW1pY2FsbHkuCisgICAgc2hvdWxkQmUoImhhc1RpdGxlVUlF
bGVtZW50KGF4RWxlbWVudCgnY29udHJvbDMnKSkiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgi
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycpLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2Nv
bnRyb2wzJyk7IGF4RWxlbWVudCgnY29udHJvbDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwo
YXhFbGVtZW50KCdsYWJlbDMnKSkiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCB1bmF0dGFjaGVk
IGxhYmVsIGVsZW1lbnQgdGhhdCdzIHN1YnNlcXVlbnRseSBhdHRhY2hlZC4KKyAgICB2YXIgbGFi
ZWw0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CisgICAgbGFiZWw0
RWxlbWVudC5pZCA9ICJsYWJlbDQiOworICAgIGxhYmVsNEVsZW1lbnQuc2V0QXR0cmlidXRlKCJm
b3IiLCAiY29udHJvbDQiKTsKKyAgICBsYWJlbDRFbGVtZW50LmlubmVyVGV4dCA9ICJMYWJlbCA0
IjsKKyAgICBzaG91bGRCZSgidmFyIGxhYmVsNEVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFu
ZEZvckF0dHJpYnV0ZSgnbGFiZWw0JywgJ2NvbnRyb2w0Jyk7IGhhc1RpdGxlVUlFbGVtZW50KGF4
RWxlbWVudCgnY29udHJvbDQnKSkiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQpOyBo
YXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIiwgInRydWUiKTsKKyAgICBz
aG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sNCcpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChh
eEVsZW1lbnQoJ2xhYmVsNCcpKSIsICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IHdoYXQgaGFwcGVu
cyB3aGVuIHRoZSBsYWJlbCBpcyBkZXRhY2hlZC4KKyAgICBzaG91bGRCZSgibGFiZWw0RWxlbWVu
dC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVsNEVsZW1lbnQpOyBoYXNUaXRsZVVJRWxl
bWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIiwgImZhbHNlIik7CisKKyAgICAvLyBUZXN0IGxh
YmVsIHRoYXQgZ2V0cyBhIGNvbnRyb2wgcmVwYXJlbnRlZCBpbnRvIGl0LgorICAgIHNob3VsZEJl
KCJoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w1JykpIiwgImZhbHNlIik7CisK
KyAgICBzaG91bGRCZSgicmVwYXJlbnROb2RlSW50b0NvbnRhaW5lcihkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29udHJvbDUnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNScpKTsg
YXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCIsICJ0cnVlIik7
CisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpLmlz
RXF1YWwoYXhFbGVtZW50KCdsYWJlbDUnKSkiLCAidHJ1ZSIpOworCisgICAgLy8gTWFrZSBzdXJl
IHRoZSBmaXJzdCBsYWJlbCBpcyByZXR1cm5lZCwgZXZlbiBhcyBsYWJlbHMgYXJlIGFkZGVkIGFu
ZCByZW1vdmVkLgorICAgIHNob3VsZEJlKCJheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVs
ZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YicpKSIsICJ0cnVlIik7CisgICAgc2hv
dWxkQmUoIm5ld0xhYmVsNkVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0
ZSgnbGFiZWw2YScsICdjb250cm9sNicpOyBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShuZXdM
YWJlbDZFbGVtZW50LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOyBheEVsZW1lbnQoJ2NvbnRy
b2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YScpKSIsICJ0
cnVlIik7CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobmV3TGFiZWw2
RWxlbWVudCk7IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwo
YXhFbGVtZW50KCdsYWJlbDZiJykpIiwgInRydWUiKTsKK30KKworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmls
aXR5LXRpdGxlLXVpLWVsZW1lbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nl
c3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2ZDk4
Njk5NWU1OWQzNzcxZTAzMzQ2YmM4N2U1MDMzYWE0YTE3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzIEBACitUZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IG9uIGFuIGFjY2Vz
c2liaWxpdHkgZWxlbWVudCBydW5zIGluIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLgorUEFTUwor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxl
bWVudC5odG1sIGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1l
bnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNzliOTAwN2NmYWYxYjIwNmU5NmVhZTJhZDIyYmQwM2I5NGZl
ODc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRp
dGxlLXVpLWVsZW1lbnQuaHRtbApAQCAtMCwwICsxLDU0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL21hZ25pdHVkZS1wZXJmLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBwYXJlbnRDb250YWluZXI7Cit2YXIgYXhDb250
cm9sOworCitmdW5jdGlvbiBlbmRzV2l0aChzdHIsIHN1ZmZpeCkgeworICAgIHJldHVybiBzdHIu
c3Vic3RyKHN0ci5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSA9PSBzdWZmaXg7Cit9CisKK2Z1bmN0
aW9uIHNldHVwKG1hZ25pdHVkZSkgeworICAgIGlmIChwYXJlbnRDb250YWluZXIpCisgICAgICAg
IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocGFyZW50Q29udGFpbmVyKTsKKyAgICBwYXJlbnRD
b250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKHBhcmVudENvbnRhaW5lcik7CisKKyAgICB2YXIganVua0NvbnRhaW5l
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIHBhcmVudENvbnRhaW5lci5h
cHBlbmRDaGlsZChqdW5rQ29udGFpbmVyKTsKKworICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CisgICAgbGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCAnY29u
dHJvbCcpOworICAgIGxhYmVsLmlubmVyVGV4dCA9ICdMYWJlbCc7CisgICAgcGFyZW50Q29udGFp
bmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKKworICAgIHZhciBjb250cm9sID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBjb250cm9sLnR5cGUgPSAndGV4dCc7CisgICAgY29u
dHJvbC5pZCA9ICdjb250cm9sJzsKKyAgICBwYXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQoY29u
dHJvbCk7CisKKyAgICBwYXJlbnRDb250YWluZXIub2Zmc2V0TGVmdDsKKyAgICBheENvbnRyb2wg
PSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoJ2NvbnRyb2wn
KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAgKiBtYWduaXR1ZGU7ICsraSkgeworICAg
ICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRp
di5pbm5lckhUTUwgPSAiPHA+PC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPjxwPjwvcD4iOworICAg
ICAgICBqdW5rQ29udGFpbmVyLmFwcGVuZENoaWxkKGRpdik7CisgICAgfQorICAgIHBhcmVudENv
bnRhaW5lci5vZmZzZXRMZWZ0OworfQorCitmdW5jdGlvbiB0ZXN0KG1hZ25pdHVkZSkgeworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgYXhDb250cm9sLnRpdGxl
VUlFbGVtZW50KCk7CisgICAgfQorfQorCitNYWduaXR1ZGUuZGVzY3JpcHRpb24oIlRlc3RzIHRo
YXQgdGl0bGVVSUVsZW1lbnQgb24gYW4gYWNjZXNzaWJpbGl0eSBlbGVtZW50IHJ1bnMgaW4gYW1v
cnRpemVkIGNvbnN0YW50IHRpbWUuIik7CitNYWduaXR1ZGUucnVuKHNldHVwLCB0ZXN0LCBNYWdu
aXR1ZGUuQ09OU1RBTlQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCBlNmI0OWY1Mzk5
OWI2OTRhZTQyNDIwOTNhZTAwZTZmNDY4MjA0NzEwLi4xZTg2MzQ4YzlkZGRiYzczY2ExZGI5NDgx
MWNkOTI2NDgwNWYxMTE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTE0MDAsMTQgKzE0MDAsMTEgQEAgY3JidWcuY29tLzEwMzIyIGFj
Y2Vzc2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8x
MDMyMiBhY2Nlc3NpYmlsaXR5L2xlZ2VuZC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS9saXN0cy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNz
aWJpbGl0eS9tZWRpYS1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nl
c3NpYmlsaXR5L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsYWNlaG9sZGVyLmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsdWdpbi5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tY2hlY2tib3gt
c2l6ZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1i
dXR0b24tZ3JvdXAtbWVtYmVycy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNz
aWJpbGl0eS9yYWRpby1idXR0b24tdGl0bGUtbGFiZWwuaHRtbCBbIFNraXAgXQotY3JidWcuY29t
LzEwMzIyIGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1hdHRyaWJ1dGVzLmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWNlbGwtc3BhbnMu
aHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbHMu
aHRtbCBbIFNraXAgXQpAQCAtMTQxNiw3ICsxNDEzLDYgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vz
c2liaWxpdHkvdGFibGUtb25lLWNlbGwuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFj
Y2Vzc2liaWxpdHkvdGFibGUtc2VjdGlvbnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvdGFibGUtd2l0aC1hcmlhLXJvbGUuaHRtbCBbIFNraXAgXQogY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtd2l0aC1ydWxlcy5odG1sIFsgU2tpcCBdCi1j
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90aC1hcy10aXRsZS11aS5odG1sIFsgU2tpcCBd
CiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90cmFuc2Zvcm1lZC1lbGVtZW50Lmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3Zpc2libGUtZWxlbWVudHMu
aHRtbCBbIFNraXAgXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168269</attachid>
            <date>2012-10-11 13:41:11 -0700</date>
            <delta_ts>2012-10-11 14:25:34 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-97825-20121011134008.patch</filename>
            <type>text/plain</type>
            <size>28615</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDE4MTZkMzNkZDY0Y2Jk
OGVjYTA5N2U5ZWYyOTg0NTk0NTE2NjVlNi4uNWIzN2ZkNDE0ZGZhZTg2MjA4MGM2M2Q0OTEzNjk1
Mjc4NTI3ZmRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTEwLTA5ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIEFkZHMgYSBEb2N1bWVu
dE9yZGVyZWRNYXAgdG8gVHJlZVNjb3BlIHRoYXQgYWxsb3dzIGFjY2Vzc2liaWxpdHkgdG8KKyAg
ICAgICAgcXVpY2tseSBtYXAgZnJvbSBhbiBpZCB0byB0aGUgbGFiZWwgZm9yIHRoYXQgaWQuIFRo
aXMgc3BlZWRzIHVwCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlOjpsYWJlbEZvckVsZW1lbnQs
IHdoaWNoIHdhcyBhIGJvdHRsZW5lY2sgaW4gQ2hyb21pdW0KKyAgICAgICAgd2hlbiBhY2Nlc3Np
YmlsaXR5IHdhcyBvbi4KKworICAgICAgICBUZXN0czogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKKyAgICAgICAgICAgICAgIHBlcmYvYWNjZXNzaWJpbGl0
eS10aXRsZS11aS1lbGVtZW50Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRN
YXA6OmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmg6CisgICAgICAgIChEb2N1bWVudE9yZGVyZWRNYXApOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50
byk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUpOgorICAgICAgICAqIGRv
bS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKiBkb20vVHJlZVNjb3Bl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6VHJlZVNjb3BlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRyZWVTY29wZTo6YWRkTGFiZWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OnJlbW92ZUxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OlRyZWVTY29wZTo6bGFiZWxFbGVtZW50Rm9ySWQpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVHJlZVNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTY29wZTo6c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSk6CisKIDIw
MTItMTAtMTAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgY29tcG9zaXRpbmcvdGlsaW5nL2NyYXNoLXJlcGFyZW50LXRpbGVkLWxheWVyLmh0bWwgaXMg
Zmxha2V5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCmluZGV4IDBmOTQ4MzhlN2VjNTVhOTY5ZWRiMWU4MDUwMDAz
OTc1ZDdlZWNjMTMuLjJiNWY4NWM0ZDZiNmE0MjE2NDAxMjM2ODQ4ZTRjYTM0MTFhMTYxNWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYWJlbGFibGVFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiTm9kZUxpc3QuaCIKQEAgLTEwMDEsMTQgKzEwMDIsMTggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpIGNvbnN0CiAKIEhUTUxMYWJl
bEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKIHsKLSAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBlbGVtZW50
LT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKTsKLSAgICB1bnNpZ25l
ZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKLSAgICAgICAgaWYgKGxpc3QtPml0ZW0oaSktPmhhc1RhZ05hbWUobGFiZWxUYWcp
KSB7Ci0gICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKTsKLSAgICAgICAgICAgIGlmIChsYWJlbC0+
Y29udHJvbCgpID09IGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsOwotICAg
ICAgICB9CisgICAgaWYgKCFlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgfHwgIXRvSFRNTEVsZW1l
bnQoZWxlbWVudCktPmlzTGFiZWxhYmxlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpZCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgaWYg
KCFpZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0g
ZWxlbWVudC0+dHJlZVNjb3BlKCktPmxhYmVsRWxlbWVudEZvcklkKGlkKSkKKyAgICAgICAgICAg
IHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBmb3IgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudEVsZW1l
bnQoKSkgeworICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4ocGFyZW50KTsKICAg
ICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE9yZGVyZWRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1h
cC5jcHAKaW5kZXggMTI5N2U1MTAyZmI0ZTc5Y2UzZGIxMTIzNTcwMjFlM2RkMDU1NGE1MS4uYmJk
OGIzYjE2ZWFmNDllMDE2ZWQwNDc2YjBiYjRhOWU3NjA2MDQ1MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKQEAgLTU1LDYgKzU1LDExIEBAIGlubGluZSBib29s
IGtleU1hdGNoZXNMb3dlcmNhc2VkTWFwTmFtZShBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1l
bnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUobWFwVGFnKSAmJiBz
dGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudCo+KGVsZW1lbnQpLT5nZXROYW1lKCkubG93ZXIoKS5p
bXBsKCkgPT0ga2V5OwogfQogCitpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1
dGUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIHJldHVy
biBlbGVtZW50LT5oYXNUYWdOYW1lKGxhYmVsVGFnKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
Zm9yQXR0cikuaW1wbCgpID09IGtleTsKK30KKwogdm9pZCBEb2N1bWVudE9yZGVyZWRNYXA6OmNs
ZWFyKCkKIHsKICAgICBtX21hcC5jbGVhcigpOwpAQCAtMTQ5LDUgKzE1NCw5IEBAIEVsZW1lbnQq
IERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoQXRvbWlj
U3RyaW5nSW1wbCoga2V5CiAgICAgcmV0dXJuIGdldDxrZXlNYXRjaGVzTG93ZXJjYXNlZE1hcE5h
bWU+KGtleSwgc2NvcGUpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCitFbGVtZW50KiBE
b2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKEF0b21pY1N0
cmluZ0ltcGwqIGtleSwgY29uc3QgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gZ2V0PGtleU1hdGNoZXNMYWJlbEZvckF0dHJpYnV0ZT4oa2V5LCBzY29wZSk7Cit9CiAKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE9yZGVyZWRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAu
aAppbmRleCA3ZDEyNjg2YzMzNmFkOGYwYTYxNzQzOWYxNjg0OWY2NGNjM2I5YjFkLi4xZjkwMzll
NjE0M2QzODYyOGRmYTMwMGFlOTg2YTAxZWUzMjNjN2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50T3JkZXJlZE1hcC5oCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50
KiBnZXRFbGVtZW50QnlJZChBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikgY29u
c3Q7CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5TWFwTmFtZShBdG9taWNTdHJpbmdJbXBsKiwg
Y29uc3QgVHJlZVNjb3BlKikgY29uc3Q7CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5TG93ZXJj
YXNlZE1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0Owor
ICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKEF0b21pY1N0cmluZ0lt
cGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKIAogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5j
eSgpIGNvbnN0OwogCkBAIC04MCw0ICs4MSwzIEBAIGlubGluZSBib29sIERvY3VtZW50T3JkZXJl
ZE1hcDo6Y29udGFpbnNNdWx0aXBsZShBdG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIERvY3VtZW50T3JkZXJlZE1hcF9oCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAppbmRleCA1OWRmZTZkNjM5ZTM3M2ZhMWI3N2IzOTU4YTljN2VlMjg2
OGJjNGYyLi5kYzY2MjYzY2FmOTYzZDA3MDY1ODY4YzBmZDI1YzM5MTE5ZTEyYzNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRnJhbWVP
d25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSFRNTFBhcnNlcklkaW9tcy5oIgpAQCAtOTYwLDYgKzk2MSwxMiBAQCBOb2RlOjpJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2Rl
KiBpbnNlcnRpbwogICAgIGlmICghbmFtZVZhbHVlLmlzTnVsbCgpKQogICAgICAgICB1cGRhdGVO
YW1lKG51bGxBdG9tLCBuYW1lVmFsdWUpOwogCisgICAgaWYgKGhhc1RhZ05hbWUobGFiZWxUYWcp
KSB7CisgICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSB0cmVlU2NvcGUoKTsKKyAgICAgICAgaWYg
KHNjb3BlLT5zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkpCisgICAgICAgICAgICB1
cGRhdGVMYWJlbChzY29wZSwgbnVsbEF0b20sIGZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cikpOwor
ICAgIH0KKwogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQogCkBAIC05OTIsNiArOTk5LDEy
IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9p
bnQpCiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZVZhbHVlID0gZ2V0TmFtZUF0dHJp
YnV0ZSgpOwogICAgICAgICBpZiAoIW5hbWVWYWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgIHVw
ZGF0ZU5hbWUobmFtZVZhbHVlLCBudWxsQXRvbSk7CisKKyAgICAgICAgaWYgKGhhc1RhZ05hbWUo
bGFiZWxUYWcpKSB7CisgICAgICAgICAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IHRyZWVTY29w
ZU9mUGFyZW50KHRoaXMsIGluc2VydGlvblBvaW50KTsKKyAgICAgICAgICAgIGlmICh0cmVlU2Nv
cGUtPnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSkKKyAgICAgICAgICAgICAgICB1
cGRhdGVMYWJlbCh0cmVlU2NvcGUsIGZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0ciksIG51bGxBdG9t
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tKGlu
c2VydGlvblBvaW50KTsKQEAgLTIxNTQsMTIgKzIxNjcsMzAgQEAgYm9vbCBFbGVtZW50OjpoYXNO
YW1lZE5vZGVNYXAoKSBjb25zdAogfQogI2VuZGlmCiAKK3ZvaWQgRWxlbWVudDo6dXBkYXRlTGFi
ZWwoVHJlZVNjb3BlKiBzY29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVW
YWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdGb3JBdHRyaWJ1dGVWYWx1ZSkKK3sKKyAgICBB
U1NFUlQoaGFzVGFnTmFtZShsYWJlbFRhZykpOworCisgICAgaWYgKG9sZEZvckF0dHJpYnV0ZVZh
bHVlID09IG5ld0ZvckF0dHJpYnV0ZVZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW9sZEZvckF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgc2NvcGUtPnJlbW92ZUxh
YmVsKG9sZEZvckF0dHJpYnV0ZVZhbHVlLCBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4o
dGhpcykpOworICAgIGlmICghbmV3Rm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAg
ICBzY29wZS0+YWRkTGFiZWwobmV3Rm9yQXR0cmlidXRlVmFsdWUsIHN0YXRpY19jYXN0PEhUTUxM
YWJlbEVsZW1lbnQqPih0aGlzKSk7Cit9CisKIHZvaWQgRWxlbWVudDo6d2lsbE1vZGlmeUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZh
bHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQogewogICAgIGlmIChpc0lkQXR0cmli
dXRlTmFtZShuYW1lKSkKICAgICAgICAgdXBkYXRlSWQob2xkVmFsdWUsIG5ld1ZhbHVlKTsKICAg
ICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6bmFtZUF0dHIpCiAgICAgICAgIHVwZGF0ZU5h
bWUob2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6
Zm9yQXR0ciAmJiBoYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAgICAgICBUcmVlU2NvcGUqIHNj
b3BlID0gdHJlZVNjb3BlKCk7CisgICAgICAgIGlmIChzY29wZS0+c2hvdWxkQ2FjaGVMYWJlbHNC
eUZvckF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgdXBkYXRlTGFiZWwoc2NvcGUsIG9sZFZhbHVl
LCBuZXdWYWx1ZSk7CisgICAgfQogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAg
ICBpZiAoT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiByZWNpcGllbnRzID0g
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0ZUZvckF0dHJpYnV0ZXNNdXRhdGlv
bih0aGlzLCBuYW1lKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IGQ5YjhjNDlkOTk5ODg4YTllN2Zm
YjI2MDM3ZTdkMzdmMThjY2EyNGQuLmU5ZDI4Mzk2MzE2N2YyMjkwMTdiOGVhMWFjZTlkN2I1YzEx
NDU5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMzE3LDYgKzMxNyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHVwZGF0ZUlkKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmV3SWQpOwogICAgIHZvaWQgdXBkYXRlSWQoVHJlZVNjb3BlKiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCk7CiAgICAgdm9pZCB1cGRh
dGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXdOYW1lKTsKKyAgICB2b2lkIHVwZGF0ZUxhYmVsKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkRm9yQXR0cmlidXRlVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3Rm9yQXR0
cmlidXRlVmFsdWUpOwogCiAgICAgdm9pZCB3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5ld1ZhbHVlKTsKICAgICB2b2lkIHdpbGxSZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
LmNwcAppbmRleCAyNDUzYThmMzQ1MjYzZTU4MWY3YTQ3NjZiMTkwM2UxMDMyYWZjYWI4Li5iMTg0
YmYwODkyNWJlY2E4OTM4MzQ5NTMzYjA1OGRlMWJjYmY1NGFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
SFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJZFRhcmdldE9ic2VydmVyUmVn
aXN0cnkuaCIKQEAgLTU1LDYgKzU2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFRy
ZWVTY29wZTo6VHJlZVNjb3BlKENvbnRhaW5lck5vZGUqIHJvb3ROb2RlKQogICAgIDogbV9yb290
Tm9kZShyb290Tm9kZSkKICAgICAsIG1fcGFyZW50VHJlZVNjb3BlKDApCisgICAgLCBtX3Nob3Vs
ZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoZmFsc2UpCiAgICAgLCBtX2lkVGFyZ2V0T2JzZXJ2
ZXJSZWdpc3RyeShJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmNyZWF0ZSgpKQogewogICAgIEFT
U0VSVChyb290Tm9kZSk7CkBAIC0xNDQsNiArMTQ2LDM3IEBAIEhUTUxNYXBFbGVtZW50KiBUcmVl
U2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudCo+KG1faW1hZ2VNYXBzQnlOYW1lLmdldEVsZW1lbnRC
eU1hcE5hbWUoQXRvbWljU3RyaW5nKG5hbWUpLmltcGwoKSwgdGhpcykpOwogfQogCit2b2lkIFRy
ZWVTY29wZTo6YWRkTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSwg
SFRNTExhYmVsRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX2xhYmVsc0J5Rm9yQXR0cmlidXRl
LmFkZChmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIGVsZW1lbnQpOworfQorCit2b2lkIFRyZWVT
Y29wZTo6cmVtb3ZlTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSwg
SFRNTExhYmVsRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX2xhYmVsc0J5Rm9yQXR0cmlidXRl
LnJlbW92ZShmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIGVsZW1lbnQpOworfQorCitIVE1MTGFi
ZWxFbGVtZW50KiBUcmVlU2NvcGU6OmxhYmVsRWxlbWVudEZvcklkKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZm9yQXR0cmlidXRlVmFsdWUpCit7CisgICAgaWYgKCFtX3Nob3VsZENhY2hlTGFiZWxzQnlG
b3JBdHRyaWJ1dGUpIHsKKyAgICAgICAgbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRl
ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGUoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUobGFiZWxUYWcpKSB7CisgICAgICAgICAgICAgICAgSFRNTExhYmVsRWxlbWVudCog
bGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JWYWx1ZSA9IGxhYmVsLT5mYXN0R2V0QXR0cmli
dXRlKGZvckF0dHIpOworICAgICAgICAgICAgICAgIGlmICghZm9yVmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICBhZGRMYWJlbChmb3JWYWx1ZSwgbGFiZWwpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZvckF0dHJpYnV0ZVZhbHVlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1MTGFiZWxFbGVtZW50KiByZXN1bHQg
PSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5n
ZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIHRo
aXMpKTsKKyAgICByZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC0+aW5Eb2N1bWVudCgpID8gcmVzdWx0
IDogMDsKK30KKwogRE9NU2VsZWN0aW9uKiBUcmVlU2NvcGU6OmdldFNlbGVjdGlvbigpIGNvbnN0
CiB7CiAgICAgaWYgKCFyb290Tm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKQpAQCAtMjgzLDQg
KzMxNiwzIEBAIFRyZWVTY29wZSogY29tbW9uVHJlZVNjb3BlKE5vZGUqIG5vZGVBLCBOb2RlKiBu
b2RlQikKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgK
aW5kZXggZDk3NThiMDI4ZTRkNDU2Nzg0ZjQ1OTBlMDkwZTVhMjU3ZDI5NDVmMy4uOWNhZTU0ZGU4
ZGY3NzYyMDQ5NzM0NTUxMjQ0N2RmNDIyZWQ0OTRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1RyZWVTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaApA
QCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250YWluZXJOb2Rl
OwogY2xhc3MgRE9NU2VsZWN0aW9uOwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIEhUTUxMYWJlbEVs
ZW1lbnQ7CiBjbGFzcyBIVE1MTWFwRWxlbWVudDsKIGNsYXNzIElkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeTsKIGNsYXNzIE5vZGU7CkBAIC02Miw2ICs2MywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOwogICAgIEhUTUxNYXBFbGVtZW50KiBnZXRJ
bWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKKyAgICAvLyBGb3IgYWNjZXNzaWJp
bGl0eS4KKyAgICBib29sIHNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSBjb25zdCB7
IHJldHVybiBtX3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGU7IH0KKyAgICB2b2lkIGFk
ZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVs
ZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUxhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0
cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAgICBIVE1MTGFiZWxFbGVtZW50KiBs
YWJlbEVsZW1lbnRGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHJpYnV0ZVZhbHVlKTsK
KwogICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBGaW5k
IGZpcnN0IGFuY2hvciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpAQCAtOTQsNiArMTAxLDkgQEAgcHJp
dmF0ZToKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9lbGVtZW50c0J5SWQ7CiAgICAgRG9jdW1l
bnRPcmRlcmVkTWFwIG1faW1hZ2VNYXBzQnlOYW1lOwogCisgICAgRG9jdW1lbnRPcmRlcmVkTWFw
IG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGU7CisgICAgYm9vbCBtX3Nob3VsZENhY2hlTGFiZWxzQnlG
b3JBdHRyaWJ1dGU7CisKICAgICBPd25QdHI8SWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5PiBtX2lk
VGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTsKIAogICAgIG11dGFibGUgUmVmUHRyPERPTVNlbGVjdGlv
bj4gbV9zZWxlY3Rpb247CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggMTE0ZGI0ZDQ0ZTU4NDdjNzgyYzYyYThlOTc4ODU1ODI0Nzk0Y2I4ZC4uZTk5
NDkyNzM5OGZjOWIwNGUyYWYwMDFlZmQ2ZDFkMzQyNjgzYjAzMCAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEw
LTA5ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFY
OiBsYWJlbEZvckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxl
bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3
ODI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIEltcGxl
bWVudCB0aXRsZVVJRWxlbWVudCBpbiB0aGUgY2hyb21pdW0gcG9ydCBvZiBEUlQsIGFuZAorICAg
ICAgICBmaXggZ2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkIHNvIHRoYXQgaXQgZW5zdXJlcyB0aGUg
YmFja2luZyBzdG9yZQorICAgICAgICBpcyB1cC10by1kYXRlLgorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxl
RWxlbWVudEJ5SWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50Q2FsbGJhY2spOgorCiAyMDEyLTEwLTEwICBM
dWNhcyBGb3JzY2hsZXIgIDxsZm9yc2NobGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
QXBwbGUgTWFjIFNub3cgTGVvcGFyZCBib3RzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVt
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKaW5kZXggODlkNWQ1ODc3MGM2MWQxYWFlOTE2MGJh
MzRlNDM2NzY1MTZiMDdjMi4uMGZlNGMxZjk5ZTQ1OTZkMmQ4ZDc0NzhiMjExZjM5ZTY1YmZmMzc2
OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0u
Y3BwCkBAIC0xMTcsNiArMTE3LDkgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OmdldEFjY2Vzc2libGVFbGVtZW50QnlJZChjb25zdAogICAgIGlmICht
X3Jvb3RFbGVtZW50LmlzTnVsbCgpKQogICAgICAgICBtX3Jvb3RFbGVtZW50ID0gbV93ZWJWaWV3
LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CiAKKyAgICBpZiAoIW1fcm9vdEVsZW1lbnQudXBkYXRl
QmFja2luZ1N0b3JlQW5kQ2hlY2tWYWxpZGl0eSgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAg
IHJldHVybiBmaW5kQWNjZXNzaWJsZUVsZW1lbnRCeUlkUmVjdXJzaXZlKG1fcm9vdEVsZW1lbnQs
IFdlYlN0cmluZzo6ZnJvbVVURjgoaWQuY19zdHIoKSkpOwogfQogCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKaW5kZXggZDYwODIyYmU4ZjIzZjEw
ZTNiYzc2YTNjYWUxZGVkYThhODhkNjYxZi4uMjE1N2RkYjY5ZDgwMjNhNjQ4MTliZjE1YjA5Nzhi
OTZlOWI3MDg0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENo
cm9taXVtLmNwcApAQCAtNzc0LDcgKzc3NCwxMyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3dDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLAog
CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50Q2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qgb2JqID0gYWNjZXNzaWJpbGl0
eU9iamVjdCgpLnRpdGxlVUlFbGVtZW50KCk7CisgICAgaWYgKG9iai5pc051bGwoKSkgeworICAg
ICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJl
c3VsdC0+c2V0KCoobV9mYWN0b3J5LT5nZXRPckNyZWF0ZShvYmopLT5nZXRBc0NwcFZhcmlhbnQo
KSkpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJh
bmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JmFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDdkOTZkNDhlMmQxZDhmYjg0Mjc3NjFmZjE5M2JlMTI1MTYzZDcyNDIu
LmVjODc2Mzk4NzMzMTE4MTdhZDkxZDJmN2U1YzMzN2YwNjIzNzFjMGMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMyBAQAorMjAxMi0xMC0wOSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNv
bT4KKworICAgICAgICBBWDogbGFiZWxGb3JFbGVtZW50IGlzIHNsb3cgd2hlbiB0aGVyZSBhcmUg
YSBsb3Qgb2YgRE9NIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NzgyNQorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4K
KworICAgICAgICBBZGRzIHR3byBuZXcgdGVzdHMgZm9yIHRpdGxlVUlFbGVtZW50IHRoYXQgcnVu
IG9uIGJvdGggTWFjIGFuZAorICAgICAgICBDaHJvbWl1bS4gT25lIHRlc3RzIGNvcnJlY3RuZXNz
LCB0aGUgb3RoZXIgdGVzdHMgc3BlZWQuCisKKyAgICAgICAgRml4ZXMgb25lIHRlc3Qgc28gdGhh
dCBpdCBwYXNzZXMgb24gQ2hyb21pdW0uCisgICAgICAgIEVuYWJsZXMgb3RoZXIgdGVzdHMgdGhh
dCBub3cgcGFzcyBvbiBDaHJvbWl1bS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2VjdXJl
LXRleHRmaWVsZC10aXRsZS11aS5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUt
dWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBwZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBlcmYvYWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50Lmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6
CisKIDIwMTItMTAtMTAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgY29tcG9zaXRpbmcvaW1hZ2VzL3RydW5jYXRlZC1kaXJlY3QtcG5nLWltYWdlLmh0
bWwgaGFzIGJlZW4gZmFpbGluZyBvbiBNYWMgc2luY2UgaXQgd2FzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRtbCBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCmlu
ZGV4IDE3MGU1NzAxYTA0NTg1ZGMwMWU4NmFjNjc5YjFlMzQzMDgxNjNmMTkuLjEyZjgxZTMzOGRj
YThiNWYxNGYwMWI4ODI2OGNkZjZiMjlmZjIxNWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCisrKyBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCkBAIC0yMSw4
ICsyMSw3IEBACiAgICAgICAgICAgICBwYXNzLmZvY3VzKCk7CiAgICAgICAgICAgICB2YXIgdGl0
bGVVSUVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC50aXRs
ZVVJRWxlbWVudCgpOwogICAgICAgICAgICAgdmFyIHRpdGxlVGV4dCA9IHRpdGxlVUlFbGVtZW50
LmNoaWxkQXRJbmRleCgwKTsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gIkFYVmFsdWU6IFBh
c3N3b3JkIjsKLSAgICAgICAgICAgIGlmICh0aXRsZVRleHQuYWxsQXR0cmlidXRlcygpLmluZGV4
T2YocGF0dGVybikgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmICh0aXRsZVRleHQuc3RyaW5nVmFs
dWUgPT0gIkFYVmFsdWU6IFBhc3N3b3JkIikgewogICAgICAgICAgICAgICAgIHJlc3VsdC5pbm5l
clRleHQgKz0gIlRlc3QgcGFzc2VkXG4iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxz
ZSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1l
bnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90
aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDgy
YTMzYThlZWMzMzNhMzBhNmEwOTA2OWFlOTNhMWZjMGIxZDdlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDIzIEBACitUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1l
bnQgd29ya3MgY29ycmVjdGx5IGV2ZW4gd2hlbiB0aGluZ3MgY2hhbmdlIGR5bmFtaWNhbGx5Lgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2wx
JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWwxJykpIGlzIHRydWUK
K1BBU1MgYXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVs
ZW1lbnQoJ2xhYmVsMicpKSBpcyB0cnVlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVu
dCgnY29udHJvbDMnKSkgaXMgZmFsc2UKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xh
YmVsMycpLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2NvbnRyb2wzJyk7IGF4RWxlbWVudCgnY29udHJv
bDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDMnKSkgaXMgdHJ1
ZQorUEFTUyB2YXIgbGFiZWw0RWxlbWVudCA9IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmli
dXRlKCdsYWJlbDQnLCAnY29udHJvbDQnKTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdj
b250cm9sNCcpKSBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFp
bmVyJykuYXBwZW5kQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxl
bWVudCgnY29udHJvbDQnKSkgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2w0JykudGl0
bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw0JykpIGlzIHRydWUKK1BBU1Mg
bGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVsNEVsZW1lbnQpOyBo
YXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIGlzIGZhbHNlCitQQVNTIGhh
c1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDUnKSkgaXMgZmFsc2UKK1BBU1MgcmVw
YXJlbnROb2RlSW50b0NvbnRhaW5lcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJvbDUn
KSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNScpKTsgYXhFbGVtZW50KCdjb250cm9s
NScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCBpcyB0cnVlCitQQVNTIGF4RWxlbWVudCgnY29u
dHJvbDUnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDUnKSkgaXMg
dHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFs
KGF4RWxlbWVudCgnbGFiZWw2YicpKSBpcyB0cnVlCitQQVNTIG5ld0xhYmVsNkVsZW1lbnQgPSBj
cmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw2YScsICdjb250cm9sNicpOyBk
b2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShuZXdMYWJlbDZFbGVtZW50LCBkb2N1bWVudC5ib2R5
LmZpcnN0Q2hpbGQpOyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0Vx
dWFsKGF4RWxlbWVudCgnbGFiZWw2YScpKSBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmJvZHkucmVt
b3ZlQ2hpbGQobmV3TGFiZWw2RWxlbWVudCk7IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJ
RWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpIGlzIHRydWUKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRt
bCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVz
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBhOTZmZGY1OWQyNjhiNDI0NWNkODdlZjg5ZDU1YmUyYzc5ZTBj
NTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbApAQCAtMCwwICsxLDExMyBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPGRpdiBpZD0iY29udGFpbmVyIj4KKworICA8ZGl2
PgorICAgIDxsYWJlbCBpZD0ibGFiZWwxIiBmb3I9ImNvbnRyb2wxIj5MYWJlbCAxPC9sYWJlbD4K
KyAgICA8aW5wdXQgaWQ9ImNvbnRyb2wxIiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRp
dj4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsMiI+CisgICAgICBMYWJlbCAyCisgICAgICA8aW5wdXQg
aWQ9ImNvbnRyb2wyIiB0eXBlPSJ0ZXh0Ij4KKyAgICA8L2xhYmVsPgorICA8L2Rpdj4KKworICA8
ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWwzIj5MYWJlbCAzPC9sYWJlbD4KKyAgICA8aW5wdXQg
aWQ9ImNvbnRyb2wzIiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8aW5w
dXQgaWQ9ImNvbnRyb2w0IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8
bGFiZWwgaWQ9ImxhYmVsNSI+CisgICAgICBMYWJlbCA1CisgICAgPC9sYWJlbD4KKyAgICA8aW5w
dXQgaWQ9ImNvbnRyb2w1IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8
bGFiZWwgaWQ9ImxhYmVsNmIiIGZvcj0iY29udHJvbDYiPkxhYmVsIDZiPC9sYWJlbD4KKyAgICA8
bGFiZWwgaWQ9ImxhYmVsNmMiIGZvcj0iY29udHJvbDYiPkxhYmVsIDZjPC9sYWJlbD4KKyAgICA8
aW5wdXQgaWQ9ImNvbnRyb2w2IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMg
dGhhdCB0aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5ncyBjaGFu
Z2UgZHluYW1pY2FsbHkuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKwor
ICAgIGZ1bmN0aW9uIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCkgeworICAgICAgICB2YXIg
bGFiZWwxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJs
YWJlbDEiKTsKKyAgICAgICAgdmFyIHRpdGxlVUlFbGVtZW50ID0gYXhFbGVtZW50LnRpdGxlVUlF
bGVtZW50KCk7CisgICAgICAgIGlmICh0aXRsZVVJRWxlbWVudCA9PSBudWxsKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdGl0bGVVSUVsZW1lbnQucm9sZSA9PSBs
YWJlbDEucm9sZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjcmVhdGVMYWJlbFdpdGhJZEFuZEZv
ckF0dHJpYnV0ZShpZCwgZm9yQXR0cmlidXRlVmFsdWUpIHsKKyAgICAgICAgdmFyIGxhYmVsRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CisgICAgICAgIGxhYmVsRWxl
bWVudC5pZCA9IGlkOworICAgICAgICBsYWJlbEVsZW1lbnQuc2V0QXR0cmlidXRlKCJmb3IiLCBm
b3JBdHRyaWJ1dGVWYWx1ZSk7CisgICAgICAgIGxhYmVsRWxlbWVudC5pbm5lclRleHQgPSAiTGFi
ZWwgZm9yICIgKyBmb3JBdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsRWxlbWVu
dDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUs
IGNvbnRhaW5lcikgeworICAgICAgICBub2RlLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobm9k
ZSk7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChub2RlKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBheEVsZW1lbnQoaWQpIHsKKyAgICAgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZChpZCk7CisgICAgfQorCisgICAgc2hvdWxkQmUo
ImF4RWxlbWVudCgnY29udHJvbDEnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDEnKSkiLCAidHJ1ZSIpOworCisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJv
bDInKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDInKSkiLCAidHJ1
ZSIpOworCisgICAgLy8gVGVzdCBjaGFuZ2luZyB0aGUgImZvciIgYXR0cmlidXRlIGR5bmFtaWNh
bGx5LgorICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2wz
JykpIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCds
YWJlbDMnKS5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjb250cm9sMycpOyBheEVsZW1lbnQoJ2NvbnRy
b2wzJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWwzJykpIiwgInRy
dWUiKTsKKworICAgIC8vIFRlc3QgdW5hdHRhY2hlZCBsYWJlbCBlbGVtZW50IHRoYXQncyBzdWJz
ZXF1ZW50bHkgYXR0YWNoZWQuCisgICAgdmFyIGxhYmVsNEVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJsYWJlbCIpOworICAgIGxhYmVsNEVsZW1lbnQuaWQgPSAibGFiZWw0IjsKKyAg
ICBsYWJlbDRFbGVtZW50LnNldEF0dHJpYnV0ZSgiZm9yIiwgImNvbnRyb2w0Iik7CisgICAgbGFi
ZWw0RWxlbWVudC5pbm5lclRleHQgPSAiTGFiZWwgNCI7CisgICAgc2hvdWxkQmUoInZhciBsYWJl
bDRFbGVtZW50ID0gY3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVsNCcsICdj
b250cm9sNCcpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIiwgImZh
bHNlIik7CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXIn
KS5hcHBlbmRDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50
KCdjb250cm9sNCcpKSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJv
bDQnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDQnKSkiLCAidHJ1
ZSIpOworCisgICAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgbGFiZWwgaXMgZGV0YWNo
ZWQuCisgICAgc2hvdWxkQmUoImxhYmVsNEVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGls
ZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcp
KSIsICJmYWxzZSIpOworCisgICAgLy8gVGVzdCBsYWJlbCB0aGF0IGdldHMgYSBjb250cm9sIHJl
cGFyZW50ZWQgaW50byBpdC4KKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVt
ZW50KCdjb250cm9sNScpKSIsICJmYWxzZSIpOworCisgICAgc2hvdWxkQmUoInJlcGFyZW50Tm9k
ZUludG9Db250YWluZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyb2w1JyksIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDUnKSk7IGF4RWxlbWVudCgnY29udHJvbDUnKS50aXRs
ZVVJRWxlbWVudCgpICE9IG51bGwiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJheEVsZW1lbnQo
J2NvbnRyb2w1JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw1Jykp
IiwgInRydWUiKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlyc3QgbGFiZWwgaXMgcmV0dXJu
ZWQsIGV2ZW4gYXMgbGFiZWxzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZC4KKyAgICBzaG91bGRCZSgi
YXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQo
J2xhYmVsNmInKSkiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJuZXdMYWJlbDZFbGVtZW50ID0g
Y3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVsNmEnLCAnY29udHJvbDYnKTsg
ZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUobmV3TGFiZWw2RWxlbWVudCwgZG9jdW1lbnQuYm9k
eS5maXJzdENoaWxkKTsgYXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNF
cXVhbChheEVsZW1lbnQoJ2xhYmVsNmEnKSkiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJkb2N1
bWVudC5ib2R5LnJlbW92ZUNoaWxkKG5ld0xhYmVsNkVsZW1lbnQpOyBheEVsZW1lbnQoJ2NvbnRy
b2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YicpKSIsICJ0
cnVlIik7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUu
ZGlzcGxheSA9ICdub25lJzsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVs
ZW1lbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxl
LXVpLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2ZDk4Njk5NWU1OWQzNzcxZTAz
MzQ2YmM4N2U1MDMzYWE0YTE3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wZXJm
L2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwz
IEBACitUZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IG9uIGFuIGFjY2Vzc2liaWxpdHkgZWxlbWVu
dCBydW5zIGluIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLgorUEFTUworCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC5odG1sIGIvTGF5
b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNzliOTAwN2NmYWYxYjIwNmU5NmVhZTJhZDIyYmQwM2I5NGZlODc5Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQu
aHRtbApAQCAtMCwwICsxLDU0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL21hZ25pdHVkZS1wZXJmLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CisKK3ZhciBwYXJlbnRDb250YWluZXI7Cit2YXIgYXhDb250cm9sOworCitmdW5jdGlv
biBlbmRzV2l0aChzdHIsIHN1ZmZpeCkgeworICAgIHJldHVybiBzdHIuc3Vic3RyKHN0ci5sZW5n
dGggLSBzdWZmaXgubGVuZ3RoKSA9PSBzdWZmaXg7Cit9CisKK2Z1bmN0aW9uIHNldHVwKG1hZ25p
dHVkZSkgeworICAgIGlmIChwYXJlbnRDb250YWluZXIpCisgICAgICAgIGRvY3VtZW50LmJvZHku
cmVtb3ZlQ2hpbGQocGFyZW50Q29udGFpbmVyKTsKKyAgICBwYXJlbnRDb250YWluZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHBhcmVudENvbnRhaW5lcik7CisKKyAgICB2YXIganVua0NvbnRhaW5lciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChqdW5r
Q29udGFpbmVyKTsKKworICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xh
YmVsJyk7CisgICAgbGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCAnY29udHJvbCcpOworICAgIGxh
YmVsLmlubmVyVGV4dCA9ICdMYWJlbCc7CisgICAgcGFyZW50Q29udGFpbmVyLmFwcGVuZENoaWxk
KGxhYmVsKTsKKworICAgIHZhciBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5w
dXQnKTsKKyAgICBjb250cm9sLnR5cGUgPSAndGV4dCc7CisgICAgY29udHJvbC5pZCA9ICdjb250
cm9sJzsKKyAgICBwYXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbCk7CisKKyAgICBw
YXJlbnRDb250YWluZXIub2Zmc2V0TGVmdDsKKyAgICBheENvbnRyb2wgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoJ2NvbnRyb2wnKTsKKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAgKiBtYWduaXR1ZGU7ICsraSkgeworICAgICAgICB2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAi
PHA+PC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPjxwPjwvcD4iOworICAgICAgICBqdW5rQ29udGFp
bmVyLmFwcGVuZENoaWxkKGRpdik7CisgICAgfQorICAgIHBhcmVudENvbnRhaW5lci5vZmZzZXRM
ZWZ0OworfQorCitmdW5jdGlvbiB0ZXN0KG1hZ25pdHVkZSkgeworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgYXhDb250cm9sLnRpdGxlVUlFbGVtZW50KCk7Cisg
ICAgfQorfQorCitNYWduaXR1ZGUuZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGl0bGVVSUVsZW1l
bnQgb24gYW4gYWNjZXNzaWJpbGl0eSBlbGVtZW50IHJ1bnMgaW4gYW1vcnRpemVkIGNvbnN0YW50
IHRpbWUuIik7CitNYWduaXR1ZGUucnVuKHNldHVwLCB0ZXN0LCBNYWduaXR1ZGUuQ09OU1RBTlQp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCBkM2Q3NWVhN2RkZGUzMTMyZjZmMmM1NjUw
NDg1ZTk4ZDg2ZWZmMGFjLi5iNjYxMjMxZjE0MWVhOWZkN2RhMjlkZDVjMjQ4ZTMzMzQxYTBmZjli
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTEzOTgsMTQgKzEzOTgsMTEgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbGFu
Z3VhZ2UtYXR0cmlidXRlLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmls
aXR5L2xlZ2VuZC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9s
aXN0cy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9tZWRpYS1l
bGVtZW50Lmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L25vbi1k
YXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20v
MTAzMjIgYWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwgWyBTa2lwIF0KIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsYWNlaG9sZGVyLmh0bWwgWyBTa2lwIF0KIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsdWdpbi5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20v
MTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tY2hlY2tib3gtc2l6ZS5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tZ3JvdXAtbWVt
YmVycy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1i
dXR0b24tdGl0bGUtbGFiZWwuaHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIyIGFjY2Vzc2li
aWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20v
MTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1hdHRyaWJ1dGVzLmh0bWwgWyBTa2lwIF0KIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWNlbGwtc3BhbnMuaHRtbCBbIFNraXAgXQog
Y3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbHMuaHRtbCBbIFNraXAgXQpA
QCAtMTQxNCw3ICsxNDExLDYgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUt
b25lLWNlbGwuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFi
bGUtc2VjdGlvbnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkv
dGFibGUtd2l0aC1hcmlhLXJvbGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vz
c2liaWxpdHkvdGFibGUtd2l0aC1ydWxlcy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS90aC1hcy10aXRsZS11aS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS90cmFuc2Zvcm1lZC1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3Zpc2libGUtZWxlbWVudHMuaHRtbCBbIFNraXAgXQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168278</attachid>
            <date>2012-10-11 14:25:38 -0700</date>
            <delta_ts>2012-10-16 16:06:00 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-97825-20121011142436.patch</filename>
            <type>text/plain</type>
            <size>28519</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFmNGExYzdlYmM1ZmM2
MTIzNGY1M2M1NmUyN2MwM2RmYTIyYjg4Yi4uNTc4MzdlMWM3M2ExZTFmOWM3NTM5YzI5MmUxODM1
MGI5ZDY2M2Y1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTEwLTExICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIEFkZHMgYSBEb2N1bWVu
dE9yZGVyZWRNYXAgdG8gVHJlZVNjb3BlIHRoYXQgYWxsb3dzIGFjY2Vzc2liaWxpdHkgdG8KKyAg
ICAgICAgcXVpY2tseSBtYXAgZnJvbSBhbiBpZCB0byB0aGUgbGFiZWwgZm9yIHRoYXQgaWQuIFRo
aXMgc3BlZWRzIHVwCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlOjpsYWJlbEZvckVsZW1lbnQs
IHdoaWNoIHdhcyBhIGJvdHRsZW5lY2sgaW4gQ2hyb21pdW0KKyAgICAgICAgd2hlbiBhY2Nlc3Np
YmlsaXR5IHdhcyBvbi4KKworICAgICAgICBUZXN0czogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKKyAgICAgICAgICAgICAgIHBlcmYvYWNjZXNzaWJpbGl0
eS10aXRsZS11aS1lbGVtZW50Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRN
YXA6OmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmg6CisgICAgICAgIChEb2N1bWVudE9yZGVyZWRNYXApOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50
byk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUpOgorICAgICAgICAqIGRv
bS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKiBkb20vVHJlZVNjb3Bl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6VHJlZVNjb3BlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRyZWVTY29wZTo6YWRkTGFiZWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OnJlbW92ZUxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OlRyZWVTY29wZTo6bGFiZWxFbGVtZW50Rm9ySWQpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVHJlZVNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTY29wZTo6c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSk6CisKIDIw
MTItMTAtMTEgIE90dG8gRGVyZWsgQ2hldW5nICA8b3RjaGV1bmdAcmltLmNvbT4KIAogICAgICAg
ICBbQmxhY2tCZXJyeV0gQ3JlZGVudGlhbHMgZm9yIEhUVFBTIHVybHMgYXJlIHNhdmVkIGluIHRo
ZSBIVFRQIHByb3RlY3Rpb24gc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggMGY5NDgzOGU3ZWM1
NWE5NjllZGIxZTgwNTAwMDM5NzVkN2VlY2MxMy4uMmI1Zjg1YzRkNmI2YTQyMTY0MDEyMzY4NDhl
NGNhMzQxMWExNjE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNs
dWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkxhYmVsYWJsZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTWF0aE1M
TmFtZXMuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgpAQCAtMTAwMSwxNCArMTAwMiwxOCBAQCBi
b29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkg
Y29uc3QKIAogSFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVs
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIFJlZlB0cjxOb2RlTGlz
dD4gbGlzdCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJl
bCIpOwotICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+aGFz
VGFnTmFtZShsYWJlbFRhZykpIHsKLSAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVs
ID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpOwotICAgICAg
ICAgICAgaWYgKGxhYmVsLT5jb250cm9sKCkgPT0gZWxlbWVudCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbGFiZWw7Ci0gICAgICAgIH0KKyAgICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSB8fCAhdG9IVE1MRWxlbWVudChlbGVtZW50KS0+aXNMYWJlbGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZWxlbWVudC0+Z2V0SWRBdHRy
aWJ1dGUoKTsKKyAgICBpZiAoIWlkLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoSFRNTExhYmVs
RWxlbWVudCogbGFiZWwgPSBlbGVtZW50LT50cmVlU2NvcGUoKS0+bGFiZWxFbGVtZW50Rm9ySWQo
aWQpKQorICAgICAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIGZvciAoRWxlbWVu
dCogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBh
cmVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUo
bGFiZWxUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1l
bnQqPihwYXJlbnQpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRPcmRlcmVkTWFwLmNwcAppbmRleCAxMjk3ZTUxMDJmYjRlNzljZTNkYjExMjM1NzAy
MWUzZGQwNTU0YTUxLi5iYmQ4YjNiMTZlYWY0OWUwMTZlZDA0NzZiMGJiNGE5ZTc2MDYwNDUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcApAQCAtNTUsNiArNTUs
MTEgQEAgaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmlu
Z0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFn
TmFtZShtYXBUYWcpICYmIHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50Kj4oZWxlbWVudCktPmdl
dE5hbWUoKS5sb3dlcigpLmltcGwoKSA9PSBrZXk7CiB9CiAKK2lubGluZSBib29sIGtleU1hdGNo
ZXNMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1lbnQqIGVsZW1l
bnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUobGFiZWxUYWcpICYmIGVsZW1l
bnQtPmdldEF0dHJpYnV0ZShmb3JBdHRyKS5pbXBsKCkgPT0ga2V5OworfQorCiB2b2lkIERvY3Vt
ZW50T3JkZXJlZE1hcDo6Y2xlYXIoKQogewogICAgIG1fbWFwLmNsZWFyKCk7CkBAIC0xNDksNSAr
MTU0LDkgQEAgRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNh
c2VkTWFwTmFtZShBdG9taWNTdHJpbmdJbXBsKiBrZXkKICAgICByZXR1cm4gZ2V0PGtleU1hdGNo
ZXNMb3dlcmNhc2VkTWFwTmFtZT4oa2V5LCBzY29wZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKK0VsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JB
dHRyaWJ1dGUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBjb25zdCBUcmVlU2NvcGUqIHNjb3BlKSBj
b25zdAoreworICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXks
IHNjb3BlKTsKK30KIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50T3JkZXJlZE1hcC5oCmluZGV4IDdkMTI2ODZjMzM2YWQ4ZjBhNjE3NDM5ZjE2ODQ5ZjY0
Y2MzYjliMWQuLjFmOTAzOWU2MTQzZDM4NjI4ZGZhMzAwYWU5ODZhMDFlZTMyM2M3ZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVi
bGljOgogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUlkKEF0b21pY1N0cmluZ0ltcGwqLCBjb25z
dCBUcmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlNYXBOYW1lKEF0
b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50KiBn
ZXRFbGVtZW50QnlMb3dlcmNhc2VkTWFwTmFtZShBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJl
ZVNjb3BlKikgY29uc3Q7CisgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1
dGUoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwogCiAgICAgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CiAKQEAgLTgwLDQgKzgxLDMgQEAgaW5saW5lIGJv
b2wgRG9jdW1lbnRPcmRlcmVkTWFwOjpjb250YWluc011bHRpcGxlKEF0b21pY1N0cmluZ0ltcGwq
IGlkKSBjb25zdAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRG9jdW1lbnRP
cmRlcmVkTWFwX2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGRkMTMxNjhkOWM2ZDI1OTRl
Zjc4NGVjN2MzMmJjZjRlM2EzODg3ZmMuLjcwMzUzNDQ0MDc2ZTczNWQ5NWE2M2ZhOTFkN2U4YWNl
ZjAwYmIzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtQ29sbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCkBAIC05NTksNiArOTYwLDEy
IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUqIGluc2VydGlvCiAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkp
CiAgICAgICAgIHVwZGF0ZU5hbWUobnVsbEF0b20sIG5hbWVWYWx1ZSk7CiAKKyAgICBpZiAoaGFz
VGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IHRyZWVTY29w
ZSgpOworICAgICAgICBpZiAoc2NvcGUtPnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUo
KSkKKyAgICAgICAgICAgIHVwZGF0ZUxhYmVsKHNjb3BlLCBudWxsQXRvbSwgZmFzdEdldEF0dHJp
YnV0ZShmb3JBdHRyKSk7CisgICAgfQorCiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiB9CiAK
QEAgLTk5MSw2ICs5OTgsMTIgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJO
b2RlKiBpbnNlcnRpb25Qb2ludCkKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lVmFs
dWUgPSBnZXROYW1lQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghbmFtZVZhbHVlLmlzTnVsbCgp
KQogICAgICAgICAgICAgdXBkYXRlTmFtZShuYW1lVmFsdWUsIG51bGxBdG9tKTsKKworICAgICAg
ICBpZiAoaGFzVGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgICAgIFRyZWVTY29wZSogdHJl
ZVNjb3BlID0gdHJlZVNjb3BlT2ZQYXJlbnQodGhpcywgaW5zZXJ0aW9uUG9pbnQpOworICAgICAg
ICAgICAgaWYgKHRyZWVTY29wZS0+c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpKQor
ICAgICAgICAgICAgICAgIHVwZGF0ZUxhYmVsKHRyZWVTY29wZSwgZmFzdEdldEF0dHJpYnV0ZShm
b3JBdHRyKSwgbnVsbEF0b20pOworICAgICAgICB9CiAgICAgfQogCiAgICAgQ29udGFpbmVyTm9k
ZTo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwpAQCAtMjEwNCwxMiArMjExNywzMCBAQCBi
b29sIEVsZW1lbnQ6Omhhc05hbWVkTm9kZU1hcCgpIGNvbnN0CiB9CiAjZW5kaWYKIAordm9pZCBF
bGVtZW50Ojp1cGRhdGVMYWJlbChUcmVlU2NvcGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG9sZEZvckF0dHJpYnV0ZVZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0ZvckF0dHJpYnV0
ZVZhbHVlKQoreworICAgIEFTU0VSVChoYXNUYWdOYW1lKGxhYmVsVGFnKSk7CisKKyAgICBpZiAo
b2xkRm9yQXR0cmlidXRlVmFsdWUgPT0gbmV3Rm9yQXR0cmlidXRlVmFsdWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghb2xkRm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAg
ICBzY29wZS0+cmVtb3ZlTGFiZWwob2xkRm9yQXR0cmlidXRlVmFsdWUsIHN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnQqPih0aGlzKSk7CisgICAgaWYgKCFuZXdGb3JBdHRyaWJ1dGVWYWx1ZS5p
c0VtcHR5KCkpCisgICAgICAgIHNjb3BlLT5hZGRMYWJlbChuZXdGb3JBdHRyaWJ1dGVWYWx1ZSwg
c3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHRoaXMpKTsKK30KKwogdm9pZCBFbGVtZW50
Ojp3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCiB7CiAg
ICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG5hbWUpKQogICAgICAgICB1cGRhdGVJZChvbGRWYWx1
ZSwgbmV3VmFsdWUpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpuYW1lQXR0cikK
ICAgICAgICAgdXBkYXRlTmFtZShvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIGVsc2UgaWYgKG5h
bWUgPT0gSFRNTE5hbWVzOjpmb3JBdHRyICYmIGhhc1RhZ05hbWUobGFiZWxUYWcpKSB7CisgICAg
ICAgIFRyZWVTY29wZSogc2NvcGUgPSB0cmVlU2NvcGUoKTsKKyAgICAgICAgaWYgKHNjb3BlLT5z
aG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkpCisgICAgICAgICAgICB1cGRhdGVMYWJl
bChzY29wZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQogICAgIGlmIChPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXA+IHJlY2lwaWVudHMgPSBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRlRm9y
QXR0cmlidXRlc011dGF0aW9uKHRoaXMsIG5hbWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggYzcw
ODc3NWJhMzY4Y2VmNzdlMTdmYTJmYjcyOTZjNTMxNDFiZTg2Yi4uYmViZTQ2NTNiODE2ODFmZDAx
OGZlMWQ1ZjBlM2Y0ZTliODg0N2I0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0zMTYsNiArMzE2
LDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlSWQoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJ
ZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCk7CiAgICAgdm9pZCB1cGRhdGVJZChUcmVlU2Nv
cGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lk
KTsKICAgICB2b2lkIHVwZGF0ZU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5ld05hbWUpOworICAgIHZvaWQgdXBkYXRlTGFiZWwoVHJlZVNjb3Bl
KiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVWYWx1ZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuZXdGb3JBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICB2b2lkIHdpbGxNb2RpZnlBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOwogICAgIHZvaWQgd2lsbFJlbW92ZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGUuY3BwCmluZGV4IGFhZDFkZmY2ZGMxNDk3NzA0ZDMwZThkYmRmMDk3
YjdjNDcyOWU1MzkuLmM5ZWRjNjAwMmFlMWY3NGJhM2ZiYzRhZjdlMGVkMjNhODQyZGUzNjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFt
ZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklk
VGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oIgpAQCAtNTUsNiArNTYsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogVHJlZVNjb3BlOjpUcmVlU2NvcGUoQ29udGFpbmVyTm9kZSogcm9vdE5v
ZGUpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwgbV9wYXJlbnRUcmVlU2NvcGUo
MCkKKyAgICAsIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZShmYWxzZSkKICAgICAs
IG1faWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5KElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6Y3Jl
YXRlKCkpCiB7CiAgICAgQVNTRVJUKHJvb3ROb2RlKTsKQEAgLTE0NCw2ICsxNDYsMzcgQEAgSFRN
TE1hcEVsZW1lbnQqIFRyZWVTY29wZTo6Z2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNv
bnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50Kj4obV9pbWFnZU1hcHNC
eU5hbWUuZ2V0RWxlbWVudEJ5TWFwTmFtZShBdG9taWNTdHJpbmcobmFtZSkuaW1wbCgpLCB0aGlz
KSk7CiB9CiAKK3ZvaWQgVHJlZVNjb3BlOjphZGRMYWJlbChjb25zdCBBdG9taWNTdHJpbmcmIGZv
ckF0dHJpYnV0ZVZhbHVlLCBIVE1MTGFiZWxFbGVtZW50KiBlbGVtZW50KQoreworICAgIG1fbGFi
ZWxzQnlGb3JBdHRyaWJ1dGUuYWRkKGZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgZWxlbWVudCk7
Cit9CisKK3ZvaWQgVHJlZVNjb3BlOjpyZW1vdmVMYWJlbChjb25zdCBBdG9taWNTdHJpbmcmIGZv
ckF0dHJpYnV0ZVZhbHVlLCBIVE1MTGFiZWxFbGVtZW50KiBlbGVtZW50KQoreworICAgIG1fbGFi
ZWxzQnlGb3JBdHRyaWJ1dGUucmVtb3ZlKGZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgZWxlbWVu
dCk7Cit9CisKK0hUTUxMYWJlbEVsZW1lbnQqIFRyZWVTY29wZTo6bGFiZWxFbGVtZW50Rm9ySWQo
Y29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSkKK3sKKyAgICBpZiAoIW1fc2hv
dWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSkgeworICAgICAgICBtX3Nob3VsZENhY2hlTGFi
ZWxzQnlGb3JBdHRyaWJ1dGUgPSB0cnVlOworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290
Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgICAgICAgICBI
VE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihu
b2RlKTsKKyAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvclZhbHVlID0gbGFi
ZWwtPmZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cik7CisgICAgICAgICAgICAgICAgaWYgKCFmb3JW
YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGFkZExhYmVsKGZvclZhbHVlLCBs
YWJlbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZm9yQXR0
cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhUTUxMYWJl
bEVsZW1lbnQqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihtX2xhYmVs
c0J5Rm9yQXR0cmlidXRlLmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKGZvckF0dHJpYnV0
ZVZhbHVlLmltcGwoKSwgdGhpcykpOworICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LT5pbkRv
Y3VtZW50KCkgPyByZXN1bHQgOiAwOworfQorCiBET01TZWxlY3Rpb24qIFRyZWVTY29wZTo6Z2V0
U2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIXJvb3ROb2RlKCktPmRvY3VtZW50KCktPmZy
YW1lKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKaW5kZXggZDk3NThiMDI4ZTRkNDU2Nzg0ZjQ1OTBl
MDkwZTVhMjU3ZDI5NDVmMy4uOWNhZTU0ZGU4ZGY3NzYyMDQ5NzM0NTUxMjQ0N2RmNDIyZWQ0OTRi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRE9NU2VsZWN0aW9uOwogY2xhc3Mg
RWxlbWVudDsKK2NsYXNzIEhUTUxMYWJlbEVsZW1lbnQ7CiBjbGFzcyBIVE1MTWFwRWxlbWVudDsK
IGNsYXNzIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTsKIGNsYXNzIE5vZGU7CkBAIC02Miw2ICs2
MywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCop
OwogICAgIEhUTUxNYXBFbGVtZW50KiBnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29u
c3Q7CiAKKyAgICAvLyBGb3IgYWNjZXNzaWJpbGl0eS4KKyAgICBib29sIHNob3VsZENhY2hlTGFi
ZWxzQnlGb3JBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENhY2hlTGFiZWxzQnlG
b3JBdHRyaWJ1dGU7IH0KKyAgICB2b2lkIGFkZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
QXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUxhYmVs
KGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQq
KTsKKyAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbEVsZW1lbnRGb3JJZChjb25zdCBBdG9taWNT
dHJpbmcmIGZvckF0dHJpYnV0ZVZhbHVlKTsKKwogICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0
aW9uKCkgY29uc3Q7CiAKICAgICAvLyBGaW5kIGZpcnN0IGFuY2hvciB3aXRoIHRoZSBnaXZlbiBu
YW1lLgpAQCAtOTQsNiArMTAxLDkgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE9yZGVyZWRNYXAg
bV9lbGVtZW50c0J5SWQ7CiAgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1faW1hZ2VNYXBzQnlOYW1l
OwogCisgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGU7CisgICAg
Ym9vbCBtX3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGU7CisKICAgICBPd25QdHI8SWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5PiBtX2lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTsKIAogICAg
IG11dGFibGUgUmVmUHRyPERPTVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDg4OTljZDZmMjkzOWY4MjIz
YzIwMTkwZWJkZGMwNGE4NTNjOWIxYS4uNWRjYmVkZjYyZDdhODVkODRiOGRmYmQwNTNiYTBhZmVk
MmRlYTAzNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTExICBEb21pbmljIE1henpvbmkgIDxkbWF6em9u
aUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZvckVsZW1lbnQgaXMgc2xvdyB3aGVu
IHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlv
c3VrZSBOaXdhLgorCisgICAgICAgIEltcGxlbWVudCB0aXRsZVVJRWxlbWVudCBpbiB0aGUgY2hy
b21pdW0gcG9ydCBvZiBEUlQsIGFuZAorICAgICAgICBmaXggZ2V0QWNjZXNzaWJsZUVsZW1lbnRC
eUlkIHNvIHRoYXQgaXQgZW5zdXJlcyB0aGUgYmFja2luZyBzdG9yZQorICAgICAgICBpcyB1cC10
by1kYXRlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9t
aXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50
Q2FsbGJhY2spOgorCiAyMDEyLTEwLTExICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBSRUdSRVNTSU9OKHIxMzEwMzMpOiBGYXZpY29u
cyBkb24ndCB3b3JrIGluIE1pbmlCcm93c2VyCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0u
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckNocm9taXVtLmNwcAppbmRleCA4OWQ1ZDU4NzcwYzYxZDFhYWU5MTYwYmEz
NGU0MzY3NjUxNmIwN2MyLi4wZmU0YzFmOTllNDU5NmQyZDhkNzQ3OGIyMTFmMzllNjViZmYzNzY4
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5j
cHAKQEAgLTExNyw2ICsxMTcsOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKGNvbnN0CiAgICAgaWYgKG1f
cm9vdEVsZW1lbnQuaXNOdWxsKCkpCiAgICAgICAgIG1fcm9vdEVsZW1lbnQgPSBtX3dlYlZpZXct
PmFjY2Vzc2liaWxpdHlPYmplY3QoKTsKIAorICAgIGlmICghbV9yb290RWxlbWVudC51cGRhdGVC
YWNraW5nU3RvcmVBbmRDaGVja1ZhbGlkaXR5KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAg
cmV0dXJuIGZpbmRBY2Nlc3NpYmxlRWxlbWVudEJ5SWRSZWN1cnNpdmUobV9yb290RWxlbWVudCwg
V2ViU3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dENocm9taXVtLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcAppbmRleCBkNjA4MjJiZThmMjNmMTBl
M2JjNzZhM2NhZTFkZWRhOGE4OGQ2NjFmLi4yMTU3ZGRiNjlkODAyM2E2NDgxOWJmMTViMDk3OGI5
NmU5YjcwODRkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hy
b21pdW0uY3BwCkBAIC03NzQsNyArNzc0LDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsCiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7CisgICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBvYmogPSBhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkudGl0bGVVSUVsZW1lbnQoKTsKKyAgICBpZiAob2JqLmlzTnVsbCgpKSB7CisgICAg
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVz
dWx0LT5zZXQoKihtX2ZhY3RvcnktPmdldE9yQ3JlYXRlKG9iaiktPmdldEFzQ3BwVmFyaWFudCgp
KSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFu
Z2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMDNhYzMxNWM5NDY2M2EyZTE4MDU3MmFjNTUzZDgzMzRhMmQ1ODU4Zi4u
OGY2OGIyYmUxZmRkOTQ2ODkwMDM2YmFkMTEyNzg2ZTc3YjQ2M2ExNiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDEyLTEwLTExICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29t
PgorCisgICAgICAgIEFYOiBsYWJlbEZvckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBh
IGxvdCBvZiBET00gZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk3ODI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgor
CisgICAgICAgIEFkZHMgdHdvIG5ldyB0ZXN0cyBmb3IgdGl0bGVVSUVsZW1lbnQgdGhhdCBydW4g
b24gYm90aCBNYWMgYW5kCisgICAgICAgIENocm9taXVtLiBPbmUgdGVzdHMgY29ycmVjdG5lc3Ms
IHRoZSBvdGhlciB0ZXN0cyBzcGVlZC4KKworICAgICAgICBGaXhlcyBvbmUgdGVzdCBzbyB0aGF0
IGl0IHBhc3NlcyBvbiBDaHJvbWl1bS4KKyAgICAgICAgRW5hYmxlcyBvdGhlciB0ZXN0cyB0aGF0
IG5vdyBwYXNzIG9uIENocm9taXVtLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zZWN1cmUt
dGV4dGZpZWxkLXRpdGxlLXVpLmh0bWw6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS90aXRsZS11
aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHBlcmYvYWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQuaHRt
bDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczoK
KwogMjAxMi0xMC0xMSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcsIHNraXAgbmV3IGZhaWxpbmcgdGVzdHMu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQt
dGl0bGUtdWkuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVs
ZC10aXRsZS11aS5odG1sCmluZGV4IDE3MGU1NzAxYTA0NTg1ZGMwMWU4NmFjNjc5YjFlMzQzMDgx
NjNmMTkuLjEyZjgxZTMzOGRjYThiNWYxNGYwMWI4ODI2OGNkZjZiMjlmZjIxNWIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRs
ZS11aS5odG1sCkBAIC0yMSw4ICsyMSw3IEBACiAgICAgICAgICAgICBwYXNzLmZvY3VzKCk7CiAg
ICAgICAgICAgICB2YXIgdGl0bGVVSUVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5m
b2N1c2VkRWxlbWVudC50aXRsZVVJRWxlbWVudCgpOwogICAgICAgICAgICAgdmFyIHRpdGxlVGV4
dCA9IHRpdGxlVUlFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsKLSAgICAgICAgICAgIHZhciBwYXR0
ZXJuID0gIkFYVmFsdWU6IFBhc3N3b3JkIjsKLSAgICAgICAgICAgIGlmICh0aXRsZVRleHQuYWxs
QXR0cmlidXRlcygpLmluZGV4T2YocGF0dGVybikgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmICh0
aXRsZVRleHQuc3RyaW5nVmFsdWUgPT0gIkFYVmFsdWU6IFBhc3N3b3JkIikgewogICAgICAgICAg
ICAgICAgIHJlc3VsdC5pbm5lclRleHQgKz0gIlRlc3QgcGFzc2VkXG4iOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iZDgyYTMzYThlZWMzMzNhMzBhNmEwOTA2OWFlOTNhMWZjMGIxZDdlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVt
ZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIzIEBACitUaGlzIHRlc3Rz
IHRoYXQgdGl0bGVVSUVsZW1lbnQgd29ya3MgY29ycmVjdGx5IGV2ZW4gd2hlbiB0aGluZ3MgY2hh
bmdlIGR5bmFtaWNhbGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBh
eEVsZW1lbnQoJ2NvbnRyb2wxJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgn
bGFiZWwxJykpIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxlVUlFbGVt
ZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMicpKSBpcyB0cnVlCitQQVNTIGhhc1RpdGxl
VUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDMnKSkgaXMgZmFsc2UKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycpLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2NvbnRyb2wzJyk7
IGF4RWxlbWVudCgnY29udHJvbDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDMnKSkgaXMgdHJ1ZQorUEFTUyB2YXIgbGFiZWw0RWxlbWVudCA9IGNyZWF0ZUxhYmVs
V2l0aElkQW5kRm9yQXR0cmlidXRlKCdsYWJlbDQnLCAnY29udHJvbDQnKTsgaGFzVGl0bGVVSUVs
ZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1Rp
dGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSkgaXMgdHJ1ZQorUEFTUyBheEVsZW1l
bnQoJ2NvbnRyb2w0JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw0
JykpIGlzIHRydWUKK1BBU1MgbGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxk
KGxhYmVsNEVsZW1lbnQpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0Jykp
IGlzIGZhbHNlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDUnKSkg
aXMgZmFsc2UKK1BBU1MgcmVwYXJlbnROb2RlSW50b0NvbnRhaW5lcihkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29udHJvbDUnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNScpKTsg
YXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCBpcyB0cnVlCitQ
QVNTIGF4RWxlbWVudCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVt
ZW50KCdsYWJlbDUnKSkgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVV
SUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YicpKSBpcyB0cnVlCitQQVNTIG5l
d0xhYmVsNkVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw2
YScsICdjb250cm9sNicpOyBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShuZXdMYWJlbDZFbGVt
ZW50LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0
bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YScpKSBpcyB0cnVlCitQQVNT
IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobmV3TGFiZWw2RWxlbWVudCk7IGF4RWxlbWVudCgn
Y29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykp
IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1l
bnQtY29ycmVjdG5lc3MuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWkt
ZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhOTZmZGY1OWQyNjhiNDI0NWNk
ODdlZjg5ZDU1YmUyYzc5ZTBjNTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbApAQCAtMCwwICsxLDEx
MyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPGRpdiBpZD0iY29u
dGFpbmVyIj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWwxIiBmb3I9ImNvbnRyb2wx
Ij5MYWJlbCAxPC9sYWJlbD4KKyAgICA8aW5wdXQgaWQ9ImNvbnRyb2wxIiB0eXBlPSJ0ZXh0Ij4K
KyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsMiI+CisgICAgICBMYWJl
bCAyCisgICAgICA8aW5wdXQgaWQ9ImNvbnRyb2wyIiB0eXBlPSJ0ZXh0Ij4KKyAgICA8L2xhYmVs
PgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWwzIj5MYWJlbCAzPC9s
YWJlbD4KKyAgICA8aW5wdXQgaWQ9ImNvbnRyb2wzIiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisK
KyAgPGRpdj4KKyAgICA8aW5wdXQgaWQ9ImNvbnRyb2w0IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+
CisKKyAgPGRpdj4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsNSI+CisgICAgICBMYWJlbCA1CisgICAg
PC9sYWJlbD4KKyAgICA8aW5wdXQgaWQ9ImNvbnRyb2w1IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+
CisKKyAgPGRpdj4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsNmIiIGZvcj0iY29udHJvbDYiPkxhYmVs
IDZiPC9sYWJlbD4KKyAgICA8bGFiZWwgaWQ9ImxhYmVsNmMiIGZvcj0iY29udHJvbDYiPkxhYmVs
IDZjPC9sYWJlbD4KKyAgICA8aW5wdXQgaWQ9ImNvbnRyb2w2IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9k
aXY+Cis8L2Rpdj4KKworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oIlRoaXMgdGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZl
biB3aGVuIHRoaW5ncyBjaGFuZ2UgZHluYW1pY2FsbHkuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1
bm5lciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB0ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKKworICAgIGZ1bmN0aW9uIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVu
dCkgeworICAgICAgICB2YXIgbGFiZWwxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJsYWJlbDEiKTsKKyAgICAgICAgdmFyIHRpdGxlVUlFbGVtZW50ID0g
YXhFbGVtZW50LnRpdGxlVUlFbGVtZW50KCk7CisgICAgICAgIGlmICh0aXRsZVVJRWxlbWVudCA9
PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdGl0bGVV
SUVsZW1lbnQucm9sZSA9PSBsYWJlbDEucm9sZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjcmVh
dGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZShpZCwgZm9yQXR0cmlidXRlVmFsdWUpIHsKKyAg
ICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7
CisgICAgICAgIGxhYmVsRWxlbWVudC5pZCA9IGlkOworICAgICAgICBsYWJlbEVsZW1lbnQuc2V0
QXR0cmlidXRlKCJmb3IiLCBmb3JBdHRyaWJ1dGVWYWx1ZSk7CisgICAgICAgIGxhYmVsRWxlbWVu
dC5pbm5lclRleHQgPSAiTGFiZWwgZm9yICIgKyBmb3JBdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAg
cmV0dXJuIGxhYmVsRWxlbWVudDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZXBhcmVudE5vZGVJ
bnRvQ29udGFpbmVyKG5vZGUsIGNvbnRhaW5lcikgeworICAgICAgICBub2RlLnBhcmVudEVsZW1l
bnQucmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChub2Rl
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBheEVsZW1lbnQoaWQpIHsKKyAgICAgICAgcmV0dXJu
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZChpZCk7CisgICAg
fQorCisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDEnKS50aXRsZVVJRWxlbWVudCgp
LmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkiLCAidHJ1ZSIpOworCisgICAgc2hvdWxkQmUo
ImF4RWxlbWVudCgnY29udHJvbDInKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDInKSkiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCBjaGFuZ2luZyB0aGUgImZvciIg
YXR0cmlidXRlIGR5bmFtaWNhbGx5LgorICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChh
eEVsZW1lbnQoJ2NvbnRyb2wzJykpIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdsYWJlbDMnKS5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjb250cm9sMycp
OyBheEVsZW1lbnQoJ2NvbnRyb2wzJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVu
dCgnbGFiZWwzJykpIiwgInRydWUiKTsKKworICAgIC8vIFRlc3QgdW5hdHRhY2hlZCBsYWJlbCBl
bGVtZW50IHRoYXQncyBzdWJzZXF1ZW50bHkgYXR0YWNoZWQuCisgICAgdmFyIGxhYmVsNEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOworICAgIGxhYmVsNEVsZW1lbnQu
aWQgPSAibGFiZWw0IjsKKyAgICBsYWJlbDRFbGVtZW50LnNldEF0dHJpYnV0ZSgiZm9yIiwgImNv
bnRyb2w0Iik7CisgICAgbGFiZWw0RWxlbWVudC5pbm5lclRleHQgPSAiTGFiZWwgNCI7CisgICAg
c2hvdWxkQmUoInZhciBsYWJlbDRFbGVtZW50ID0gY3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRy
aWJ1dGUoJ2xhYmVsNCcsICdjb250cm9sNCcpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQo
J2NvbnRyb2w0JykpIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVV
SUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUo
ImF4RWxlbWVudCgnY29udHJvbDQnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDQnKSkiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB0
aGUgbGFiZWwgaXMgZGV0YWNoZWQuCisgICAgc2hvdWxkQmUoImxhYmVsNEVsZW1lbnQucGFyZW50
RWxlbWVudC5yZW1vdmVDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhF
bGVtZW50KCdjb250cm9sNCcpKSIsICJmYWxzZSIpOworCisgICAgLy8gVGVzdCBsYWJlbCB0aGF0
IGdldHMgYSBjb250cm9sIHJlcGFyZW50ZWQgaW50byBpdC4KKyAgICBzaG91bGRCZSgiaGFzVGl0
bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNScpKSIsICJmYWxzZSIpOworCisgICAgc2hv
dWxkQmUoInJlcGFyZW50Tm9kZUludG9Db250YWluZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnRyb2w1JyksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDUnKSk7IGF4RWxlbWVu
dCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpICE9IG51bGwiLCAidHJ1ZSIpOworICAgIHNo
b3VsZEJlKCJheEVsZW1lbnQoJ2NvbnRyb2w1JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4
RWxlbWVudCgnbGFiZWw1JykpIiwgInRydWUiKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmly
c3QgbGFiZWwgaXMgcmV0dXJuZWQsIGV2ZW4gYXMgbGFiZWxzIGFyZSBhZGRlZCBhbmQgcmVtb3Zl
ZC4KKyAgICBzaG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCku
aXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNmInKSkiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJu
ZXdMYWJlbDZFbGVtZW50ID0gY3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVs
NmEnLCAnY29udHJvbDYnKTsgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUobmV3TGFiZWw2RWxl
bWVudCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsgYXhFbGVtZW50KCdjb250cm9sNicpLnRp
dGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNmEnKSkiLCAidHJ1ZSIpOwor
ICAgIHNob3VsZEJlKCJkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG5ld0xhYmVsNkVsZW1lbnQp
OyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVu
dCgnbGFiZWw2YicpKSIsICJ0cnVlIik7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKK30KKworPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3Np
YmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGVyZi9h
Y2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2
ZDk4Njk5NWU1OWQzNzcxZTAzMzQ2YmM4N2U1MDMzYWE0YTE3NjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwzIEBACitUZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IG9uIGFuIGFj
Y2Vzc2liaWxpdHkgZWxlbWVudCBydW5zIGluIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLgorUEFT
UworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWkt
ZWxlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVs
ZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzliOTAwN2NmYWYxYjIwNmU5NmVhZTJhZDIyYmQwM2I5
NGZlODc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5
LXRpdGxlLXVpLWVsZW1lbnQuaHRtbApAQCAtMCwwICsxLDU0IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL21hZ25pdHVkZS1wZXJm
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBwYXJlbnRDb250YWluZXI7Cit2YXIgYXhD
b250cm9sOworCitmdW5jdGlvbiBlbmRzV2l0aChzdHIsIHN1ZmZpeCkgeworICAgIHJldHVybiBz
dHIuc3Vic3RyKHN0ci5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSA9PSBzdWZmaXg7Cit9CisKK2Z1
bmN0aW9uIHNldHVwKG1hZ25pdHVkZSkgeworICAgIGlmIChwYXJlbnRDb250YWluZXIpCisgICAg
ICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocGFyZW50Q29udGFpbmVyKTsKKyAgICBwYXJl
bnRDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudENvbnRhaW5lcik7CisKKyAgICB2YXIganVua0NvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIHBhcmVudENvbnRhaW5l
ci5hcHBlbmRDaGlsZChqdW5rQ29udGFpbmVyKTsKKworICAgIHZhciBsYWJlbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CisgICAgbGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCAn
Y29udHJvbCcpOworICAgIGxhYmVsLmlubmVyVGV4dCA9ICdMYWJlbCc7CisgICAgcGFyZW50Q29u
dGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKKworICAgIHZhciBjb250cm9sID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBjb250cm9sLnR5cGUgPSAndGV4dCc7CisgICAg
Y29udHJvbC5pZCA9ICdjb250cm9sJzsKKyAgICBwYXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQo
Y29udHJvbCk7CisKKyAgICBwYXJlbnRDb250YWluZXIub2Zmc2V0TGVmdDsKKyAgICBheENvbnRy
b2wgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoJ2NvbnRy
b2wnKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAgKiBtYWduaXR1ZGU7ICsraSkgewor
ICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAg
IGRpdi5pbm5lckhUTUwgPSAiPHA+PC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPjxwPjwvcD4iOwor
ICAgICAgICBqdW5rQ29udGFpbmVyLmFwcGVuZENoaWxkKGRpdik7CisgICAgfQorICAgIHBhcmVu
dENvbnRhaW5lci5vZmZzZXRMZWZ0OworfQorCitmdW5jdGlvbiB0ZXN0KG1hZ25pdHVkZSkgewor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgYXhDb250cm9sLnRp
dGxlVUlFbGVtZW50KCk7CisgICAgfQorfQorCitNYWduaXR1ZGUuZGVzY3JpcHRpb24oIlRlc3Rz
IHRoYXQgdGl0bGVVSUVsZW1lbnQgb24gYW4gYWNjZXNzaWJpbGl0eSBlbGVtZW50IHJ1bnMgaW4g
YW1vcnRpemVkIGNvbnN0YW50IHRpbWUuIik7CitNYWduaXR1ZGUucnVuKHNldHVwLCB0ZXN0LCBN
YWduaXR1ZGUuQ09OU1RBTlQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCAyMjZlM2E1
YWJmNWE3MjJlODU3ODM1MzUxNTMzNDQxN2I0MWEzMzQzLi5mM2UwM2UxMzQ4NGZhMWVhYmNjYmM0
ZTkxMjhjNDgxNzA0NjYzMWQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEzOTgsMTQgKzEzOTgsMTEgQEAgY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2xlZ2VuZC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS9saXN0cy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS9tZWRpYS1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsYWNlaG9sZGVyLmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsdWdpbi5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tY2hlY2ti
b3gtc2l6ZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRp
by1idXR0b24tZ3JvdXAtbWVtYmVycy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS9yYWRpby1idXR0b24tdGl0bGUtbGFiZWwuaHRtbCBbIFNraXAgXQotY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1hdHRyaWJ1dGVzLmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWNlbGwtc3Bh
bnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2Vs
bHMuaHRtbCBbIFNraXAgXQpAQCAtMTQxNCw3ICsxNDExLDYgQEAgY3JidWcuY29tLzEwMzIyIGFj
Y2Vzc2liaWxpdHkvdGFibGUtb25lLWNlbGwuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvdGFibGUtc2VjdGlvbnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtd2l0aC1hcmlhLXJvbGUuaHRtbCBbIFNraXAgXQogY3Ji
dWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtd2l0aC1ydWxlcy5odG1sIFsgU2tpcCBd
Ci1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90aC1hcy10aXRsZS11aS5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90cmFuc2Zvcm1lZC1lbGVtZW50Lmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3Zpc2libGUtZWxlbWVu
dHMuaHRtbCBbIFNraXAgXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169046</attachid>
            <date>2012-10-16 16:06:06 -0700</date>
            <delta_ts>2012-10-16 19:42:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20121016160455.patch</filename>
            <type>text/plain</type>
            <size>33546</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2NjOWU1Y2U4YmRhNDdj
OTAzOTY0MWJlMjkwMGEzOTE0NDYxNTdhNi4uOTI1OTY2NjFiNjJlZTM2ODIyZDM5NWMyN2NhYmNk
YjE4NmUwZGM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTEwLTE2ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIEFkZHMgYSBEb2N1bWVu
dE9yZGVyZWRNYXAgdG8gVHJlZVNjb3BlIHRoYXQgYWxsb3dzIGFjY2Vzc2liaWxpdHkgdG8KKyAg
ICAgICAgcXVpY2tseSBtYXAgZnJvbSBhbiBpZCB0byB0aGUgbGFiZWwgZm9yIHRoYXQgaWQuIFRo
aXMgc3BlZWRzIHVwCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlOjpsYWJlbEZvckVsZW1lbnQs
IHdoaWNoIHdhcyBhIGJvdHRsZW5lY2sgaW4gQ2hyb21pdW0KKyAgICAgICAgd2hlbiBhY2Nlc3Np
YmlsaXR5IHdhcyBvbi4KKworICAgICAgICBUZXN0czogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKKyAgICAgICAgICAgICAgIHBlcmYvYWNjZXNzaWJpbGl0
eS10aXRsZS11aS1lbGVtZW50Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRN
YXA6OmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmg6CisgICAgICAgIChEb2N1bWVudE9yZGVyZWRNYXApOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50
byk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUpOgorICAgICAgICAqIGRv
bS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKiBkb20vVHJlZVNjb3Bl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6VHJlZVNjb3BlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRyZWVTY29wZTo6YWRkTGFiZWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OnJlbW92ZUxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OlRyZWVTY29wZTo6bGFiZWxFbGVtZW50Rm9ySWQpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVHJlZVNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTY29wZTo6c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSk6CisKIDIw
MTItMTAtMTYgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAg
ICBbR1N0cmVhbWVyXSBHc3RCdWZmZXIgcmVmIHJhY2UgaW4gV2ViS2l0V2ViQXVkaW9TcmNMb29w
CkBAIC00OTkzLDQ4ICs1MDM1LDYgQEAKICAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVy
OjpzaGFwZUhhcmZCdXp6UnVucyk6CiAgICAgICAgIENhbGwgc2V0U2NyaXB0Rm9yVmVydGljYWxH
bHlwaFN1YnN0aXR1dGlvbigpIHdoZW4gb3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbC4KIAotMjAx
Mi0xMC0xMSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KLQotICAgICAg
ICBBWDogbGFiZWxGb3JFbGVtZW50IGlzIHNsb3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9N
IGVsZW1lbnRzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NzgyNQotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICBB
ZGRzIGEgRG9jdW1lbnRPcmRlcmVkTWFwIHRvIFRyZWVTY29wZSB0aGF0IGFsbG93cyBhY2Nlc3Np
YmlsaXR5IHRvCi0gICAgICAgIHF1aWNrbHkgbWFwIGZyb20gYW4gaWQgdG8gdGhlIGxhYmVsIGZv
ciB0aGF0IGlkLiBUaGlzIHNwZWVkcyB1cAotICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZTo6bGFi
ZWxGb3JFbGVtZW50LCB3aGljaCB3YXMgYSBib3R0bGVuZWNrIGluIENocm9taXVtCi0gICAgICAg
IHdoZW4gYWNjZXNzaWJpbGl0eSB3YXMgb24uCi0KLSAgICAgICAgVGVzdHM6IGFjY2Vzc2liaWxp
dHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCi0gICAgICAgICAgICAgICBwZXJm
L2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC5odG1sCi0KLSAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEZvckVsZW1lbnQpOgotICAgICAgICAqIGRvbS9E
b2N1bWVudE9yZGVyZWRNYXAuY3BwOgotICAgICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc0xhYmVs
Rm9yQXR0cmlidXRlKToKLSAgICAgICAgKFdlYkNvcmUpOgotICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZSk6Ci0gICAgICAg
ICogZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5oOgotICAgICAgICAoRG9jdW1lbnRPcmRlcmVkTWFw
KToKLSAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjppbnNlcnRlZEludG8pOgotICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZyb20p
OgotICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXBkYXRlTGFiZWwpOgotICAgICAgICAoV2Vi
Q29yZSk6Ci0gICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp3aWxsTW9kaWZ5QXR0cmlidXRlKToK
LSAgICAgICAgKiBkb20vRWxlbWVudC5oOgotICAgICAgICAoRWxlbWVudCk6Ci0gICAgICAgICog
ZG9tL1RyZWVTY29wZS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OlRyZWVTY29w
ZSk6Ci0gICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmFkZExhYmVsKToKLSAgICAgICAgKFdl
YkNvcmUpOgotICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpyZW1vdmVMYWJlbCk6Ci0gICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmxhYmVsRWxlbWVudEZvcklkKToKLSAgICAgICAgKiBk
b20vVHJlZVNjb3BlLmg6Ci0gICAgICAgIChXZWJDb3JlKToKLSAgICAgICAgKFRyZWVTY29wZSk6
Ci0gICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRy
aWJ1dGUpOgotCiAyMDEyLTEwLTExICBKYW1lcyBTaW1vbnNlbiAgPHNpbW9uamFtQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICB1bnByZWZpeCB3aW5kb3cucGVyZm9ybWFuY2Uud2Via2l0Tm93KCkK
QEAgLTUyOTIsNiArNTI5Miw4IEBACiAgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgog
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKIAorPT09
PT09PQorPj4+Pj4+PiA5NzgyNSBtZXJnZWQKIDIwMTItMTAtMTEgIE90dG8gRGVyZWsgQ2hldW5n
ICA8b3RjaGV1bmdAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQ3JlZGVudGlhbHMg
Zm9yIEhUVFBTIHVybHMgYXJlIHNhdmVkIGluIHRoZSBIVFRQIHByb3RlY3Rpb24gc3BhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAKaW5kZXggMGY5NDgzOGU3ZWM1NWE5NjllZGIxZTgwNTAwMDM5NzVkN2VlY2Mx
My4uMmI1Zjg1YzRkNmI2YTQyMTY0MDEyMzY4NDhlNGNhMzQxMWExNjE1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkxhYmVsYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6
ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb2RlTGlz
dC5oIgpAQCAtMTAwMSwxNCArMTAwMiwxOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojppc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkgY29uc3QKIAogSFRNTExhYmVsRWxlbWVudCog
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogewotICAgIFJlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IGVsZW1lbnQtPmRvY3VtZW50
KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpOwotICAgIHVuc2lnbmVkIGxlbiA9IGxp
c3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgewot
ICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+aGFzVGFnTmFtZShsYWJlbFRhZykpIHsKLSAgICAg
ICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxl
bWVudCo+KGxpc3QtPml0ZW0oaSkpOwotICAgICAgICAgICAgaWYgKGxhYmVsLT5jb250cm9sKCkg
PT0gZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWw7Ci0gICAgICAgIH0KKyAg
ICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSB8fCAhdG9IVE1MRWxlbWVudChlbGVtZW50
KS0+aXNMYWJlbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGlkID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICBpZiAoIWlkLmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBlbGVtZW50LT50
cmVlU2NvcGUoKS0+bGFiZWxFbGVtZW50Rm9ySWQoaWQpKQorICAgICAgICAgICAgcmV0dXJuIGxh
YmVsOworICAgIH0KKworICAgIGZvciAoRWxlbWVudCogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50
RWxlbWVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgpKSB7Cisg
ICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUobGFiZWxUYWcpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihwYXJlbnQpOwogICAgIH0KIAogICAg
IHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAppbmRl
eCAxMjk3ZTUxMDJmYjRlNzljZTNkYjExMjM1NzAyMWUzZGQwNTU0YTUxLi5iYWQ2MTY0OTg4Mjdj
MGRlMDcxNWJhYzYzZWI5ZTA0MGYwZmYwMTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcApAQCAtNTUsNiArNTUsMTEgQEAgaW5saW5lIGJvb2wga2V5TWF0Y2hl
c0xvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVu
dCkKICAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShtYXBUYWcpICYmIHN0YXRpY19jYXN0
PEhUTUxNYXBFbGVtZW50Kj4oZWxlbWVudCktPmdldE5hbWUoKS5sb3dlcigpLmltcGwoKSA9PSBr
ZXk7CiB9CiAKK2lubGluZSBib29sIGtleU1hdGNoZXNMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNT
dHJpbmdJbXBsKiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQt
Pmhhc1RhZ05hbWUobGFiZWxUYWcpICYmIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShmb3JBdHRyKS5p
bXBsKCkgPT0ga2V5OworfQorCiB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6Y2xlYXIoKQogewog
ICAgIG1fbWFwLmNsZWFyKCk7CkBAIC0xMjgsNiArMTMzLDkgQEAgaW5saW5lIEVsZW1lbnQqIERv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgY29uc3QgVHJlZVNj
b3BlKgogICAgICAgICAgICAgbV9tYXAuc2V0KGtleSwgZWxlbWVudCk7CiAgICAgICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkFzc2Vy
dCByZWFjaGVkLiBrZXk9JyVzJ1xuIiwgU3RyaW5nKGtleSkuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgZXhpdCgwKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogCkBAIC0xNDksNSArMTU3LDkgQEAgRWxlbWVudCogRG9jdW1l
bnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNhc2VkTWFwTmFtZShBdG9taWNTdHJpbmdJ
bXBsKiBrZXkKICAgICByZXR1cm4gZ2V0PGtleU1hdGNoZXNMb3dlcmNhc2VkTWFwTmFtZT4oa2V5
LCBzY29wZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK0VsZW1lbnQqIERvY3VtZW50
T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoQXRvbWljU3RyaW5nSW1w
bCoga2V5LCBjb25zdCBUcmVlU2NvcGUqIHNjb3BlKSBjb25zdAoreworICAgIHJldHVybiBnZXQ8
a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXksIHNjb3BlKTsKK30KIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5oCmluZGV4
IDdkMTI2ODZjMzM2YWQ4ZjBhNjE3NDM5ZjE2ODQ5ZjY0Y2MzYjliMWQuLjFmOTAzOWU2MTQzZDM4
NjI4ZGZhMzAwYWU5ODZhMDFlZTMyM2M3ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE9yZGVyZWRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRP
cmRlcmVkTWFwLmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGdldEVs
ZW1lbnRCeUlkKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKICAg
ICBFbGVtZW50KiBnZXRFbGVtZW50QnlNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBU
cmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlMb3dlcmNhc2VkTWFw
TmFtZShBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikgY29uc3Q7CisgICAgRWxl
bWVudCogZ2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoQXRvbWljU3RyaW5nSW1wbCosIGNv
bnN0IFRyZWVTY29wZSopIGNvbnN0OwogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29u
c3Q7CiAKQEAgLTgwLDQgKzgxLDMgQEAgaW5saW5lIGJvb2wgRG9jdW1lbnRPcmRlcmVkTWFwOjpj
b250YWluc011bHRpcGxlKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRG9jdW1lbnRPcmRlcmVkTWFwX2gKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCmluZGV4IDdjYmE1MWYwZGY4YzIwNGVlNjk1NzQ1OTA1ODU2N2Y2YmExMWE0Nzcu
LjMzODY5NWM5N2Y1YTBmNGI1ODliNDRmOTRmY2EyZjFjZGM1MDkxOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxGb3JtQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCkBAIC05NTksNiArOTYwLDEyIEBAIE5vZGU6Okluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGluc2Vy
dGlvCiAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHVwZGF0ZU5hbWUobnVs
bEF0b20sIG5hbWVWYWx1ZSk7CiAKKyAgICBpZiAoaGFzVGFnTmFtZShsYWJlbFRhZykpIHsKKyAg
ICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IHRyZWVTY29wZSgpOworICAgICAgICBpZiAoc2NvcGUt
PnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSkKKyAgICAgICAgICAgIHVwZGF0ZUxh
YmVsKHNjb3BlLCBudWxsQXRvbSwgZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKSk7CisgICAgfQor
CiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiB9CiAKQEAgLTk5MSw2ICs5OTgsMTIgQEAgdm9p
ZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2ludCkKICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lVmFsdWUgPSBnZXROYW1lQXR0cmlidXRlKCk7
CiAgICAgICAgIGlmICghbmFtZVZhbHVlLmlzTnVsbCgpKQogICAgICAgICAgICAgdXBkYXRlTmFt
ZShuYW1lVmFsdWUsIG51bGxBdG9tKTsKKworICAgICAgICBpZiAoaGFzVGFnTmFtZShsYWJlbFRh
ZykpIHsKKyAgICAgICAgICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0gdHJlZVNjb3BlT2ZQYXJl
bnQodGhpcywgaW5zZXJ0aW9uUG9pbnQpOworICAgICAgICAgICAgaWYgKHRyZWVTY29wZS0+c2hv
dWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIHVwZGF0ZUxh
YmVsKHRyZWVTY29wZSwgZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKSwgbnVsbEF0b20pOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9u
UG9pbnQpOwpAQCAtMjEzMywxMiArMjE0NiwzMyBAQCBib29sIEVsZW1lbnQ6Omhhc05hbWVkTm9k
ZU1hcCgpIGNvbnN0CiB9CiAjZW5kaWYKIAordm9pZCBFbGVtZW50Ojp1cGRhdGVMYWJlbChUcmVl
U2NvcGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVZhbHVlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5ld0ZvckF0dHJpYnV0ZVZhbHVlKQoreworICAgIEFTU0VSVCho
YXNUYWdOYW1lKGxhYmVsVGFnKSk7CisKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG9sZEZvckF0dHJpYnV0ZVZhbHVlID09IG5ld0ZvckF0dHJpYnV0
ZVZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW9sZEZvckF0dHJpYnV0ZVZhbHVl
LmlzRW1wdHkoKSkKKyAgICAgICAgc2NvcGUtPnJlbW92ZUxhYmVsKG9sZEZvckF0dHJpYnV0ZVZh
bHVlLCBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4odGhpcykpOworICAgIGlmICghbmV3
Rm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBzY29wZS0+YWRkTGFiZWwobmV3
Rm9yQXR0cmlidXRlVmFsdWUsIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPih0aGlzKSk7
Cit9CisKIHZvaWQgRWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5ld1ZhbHVlKQogewogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkKICAgICAg
ICAgdXBkYXRlSWQob2xkVmFsdWUsIG5ld1ZhbHVlKTsKICAgICBlbHNlIGlmIChuYW1lID09IEhU
TUxOYW1lczo6bmFtZUF0dHIpCiAgICAgICAgIHVwZGF0ZU5hbWUob2xkVmFsdWUsIG5ld1ZhbHVl
KTsKKyAgICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6Zm9yQXR0ciAmJiBoYXNUYWdOYW1l
KGxhYmVsVGFnKSkgeworICAgICAgICBUcmVlU2NvcGUqIHNjb3BlID0gdHJlZVNjb3BlKCk7Cisg
ICAgICAgIGlmIChzY29wZS0+c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpKQorICAg
ICAgICAgICAgdXBkYXRlTGFiZWwoc2NvcGUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgfQog
CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBpZiAoT3duUHRyPE11dGF0aW9u
T2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiByZWNpcGllbnRzID0gTXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA6OmNyZWF0ZUZvckF0dHJpYnV0ZXNNdXRhdGlvbih0aGlzLCBuYW1lKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCmluZGV4IDU4ZTI5N2QxNTc0NDU5NWNhMThiOTliNDUzZjZlMzA0YTAxNGRhMjEu
LjUxOWM1MGQ3Nzg5MzE1MTZmYWY4ODMwYzQ2M2IyNTAyMDE1YjZkZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaApAQCAtMzE1LDYgKzMxNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUlkKGNvbnN0
IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpOwogICAgIHZv
aWQgdXBkYXRlSWQoVHJlZVNjb3BlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuZXdJZCk7CiAgICAgdm9pZCB1cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKTsKKyAgICB2b2lkIHVw
ZGF0ZUxhYmVsKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkRm9yQXR0cmlidXRl
VmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3Rm9yQXR0cmlidXRlVmFsdWUpOwogCiAgICAg
dm9pZCByZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiosIENvbGxlY3Rp
b25UeXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAppbmRleCBhYWQxZGZmNmRjMTQ5Nzcw
NGQzMGU4ZGJkZjA5N2I3YzQ3MjllNTM5Li43OTNlNWNkYjNmMTU5NTk1MzcyODg1YTZmOGVhYWQ2
NDc0YzlhNDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJJZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaCIKQEAgLTU1LDYgKzU2LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFRyZWVTY29wZTo6VHJlZVNjb3BlKENvbnRhaW5l
ck5vZGUqIHJvb3ROb2RlKQogICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKICAgICAsIG1fcGFy
ZW50VHJlZVNjb3BlKDApCisgICAgLCBtX3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUo
ZmFsc2UpCiAgICAgLCBtX2lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeShJZFRhcmdldE9ic2VydmVy
UmVnaXN0cnk6OmNyZWF0ZSgpKQogewogICAgIEFTU0VSVChyb290Tm9kZSk7CkBAIC03Miw2ICs3
NCw3IEBAIHZvaWQgVHJlZVNjb3BlOjpkZXN0cm95VHJlZVNjb3BlRGF0YSgpCiB7CiAgICAgbV9l
bGVtZW50c0J5SWQuY2xlYXIoKTsKICAgICBtX2ltYWdlTWFwc0J5TmFtZS5jbGVhcigpOworICAg
IG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUuY2xlYXIoKTsKIH0KIAogdm9pZCBUcmVlU2NvcGU6OnNl
dFBhcmVudFRyZWVTY29wZShUcmVlU2NvcGUqIG5ld1BhcmVudFNjb3BlKQpAQCAtMTQ0LDYgKzE0
NywzNiBAQCBIVE1MTWFwRWxlbWVudCogVHJlZVNjb3BlOjpnZXRJbWFnZU1hcChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnQqPiht
X2ltYWdlTWFwc0J5TmFtZS5nZXRFbGVtZW50QnlNYXBOYW1lKEF0b21pY1N0cmluZyhuYW1lKS5p
bXBsKCksIHRoaXMpKTsKIH0KIAordm9pZCBUcmVlU2NvcGU6OmFkZExhYmVsKGNvbnN0IEF0b21p
Y1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqIGVsZW1lbnQpCit7
CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5hZGQoZm9yQXR0cmlidXRlVmFsdWUuaW1wbCgp
LCBlbGVtZW50KTsKK30KKwordm9pZCBUcmVlU2NvcGU6OnJlbW92ZUxhYmVsKGNvbnN0IEF0b21p
Y1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqIGVsZW1lbnQpCit7
CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5yZW1vdmUoZm9yQXR0cmlidXRlVmFsdWUuaW1w
bCgpLCBlbGVtZW50KTsKK30KKworSFRNTExhYmVsRWxlbWVudCogVHJlZVNjb3BlOjpsYWJlbEVs
ZW1lbnRGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHJpYnV0ZVZhbHVlKQoreworICAg
IGlmICghbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKSB7CisgICAgICAgIG1fc2hv
dWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSA9IHRydWU7CisgICAgICAgIGZvciAoTm9kZSog
bm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAgICAg
ICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVs
RWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
VmFsdWUgPSBsYWJlbC0+ZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWZvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkTGFiZWwo
Zm9yVmFsdWUsIGxhYmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChmb3JBdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihtX2xhYmVsc0J5Rm9yQXR0
cmlidXRlLmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKGZvckF0dHJpYnV0ZVZhbHVlLmlt
cGwoKSwgdGhpcykpOworfQorCiBET01TZWxlY3Rpb24qIFRyZWVTY29wZTo6Z2V0U2VsZWN0aW9u
KCkgY29uc3QKIHsKICAgICBpZiAoIXJvb3ROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlLmgKaW5kZXggZDk3NThiMDI4ZTRkNDU2Nzg0ZjQ1OTBlMDkwZTVhMjU3
ZDI5NDVmMy4uOWNhZTU0ZGU4ZGY3NzYyMDQ5NzM0NTUxMjQ0N2RmNDIyZWQ0OTRiMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRE9NU2VsZWN0aW9uOwogY2xhc3MgRWxlbWVudDsK
K2NsYXNzIEhUTUxMYWJlbEVsZW1lbnQ7CiBjbGFzcyBIVE1MTWFwRWxlbWVudDsKIGNsYXNzIElk
VGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTsKIGNsYXNzIE5vZGU7CkBAIC02Miw2ICs2MywxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOwogICAgIEhU
TUxNYXBFbGVtZW50KiBnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKKyAg
ICAvLyBGb3IgYWNjZXNzaWJpbGl0eS4KKyAgICBib29sIHNob3VsZENhY2hlTGFiZWxzQnlGb3JB
dHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1
dGU7IH0KKyAgICB2b2lkIGFkZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRl
VmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUxhYmVsKGNvbnN0IEF0
b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAgICBI
VE1MTGFiZWxFbGVtZW50KiBsYWJlbEVsZW1lbnRGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmIGZv
ckF0dHJpYnV0ZVZhbHVlKTsKKwogICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCkgY29u
c3Q7CiAKICAgICAvLyBGaW5kIGZpcnN0IGFuY2hvciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpAQCAt
OTQsNiArMTAxLDkgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9lbGVtZW50
c0J5SWQ7CiAgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1faW1hZ2VNYXBzQnlOYW1lOwogCisgICAg
RG9jdW1lbnRPcmRlcmVkTWFwIG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGU7CisgICAgYm9vbCBtX3No
b3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGU7CisKICAgICBPd25QdHI8SWRUYXJnZXRPYnNl
cnZlclJlZ2lzdHJ5PiBtX2lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTsKIAogICAgIG11dGFibGUg
UmVmUHRyPERPTVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmU3MDI3MzMxZjY5NmJmYzFlNzUzODIxYzQw
NWIwZDU4YTUyZTJkMC4uZGE5ZTQ5NjY3OTU5MTg3ZjIwZGMwOWJjMWEwMjY1NDZlZTA1OGI2YSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDEyLTEwLTE2ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUu
Y29tPgorCisgICAgICAgIEFYOiBsYWJlbEZvckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFy
ZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdh
LgorCisgICAgICAgIEltcGxlbWVudCB0aXRsZVVJRWxlbWVudCBpbiB0aGUgY2hyb21pdW0gcG9y
dCBvZiBEUlQsIGFuZAorICAgICAgICBmaXggZ2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkIHNvIHRo
YXQgaXQgZW5zdXJlcyB0aGUgYmFja2luZyBzdG9yZQorICAgICAgICBpcyB1cC10by1kYXRlLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcDoK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50Q2FsbGJhY2sp
OgorCiAyMDEyLTEwLTE2ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8uZGEu
Y29zdGFAaW50ZWwuY29tPgogCiAgICAgICAgIEltcGxlbWVudCB0ZXN0UnVubmVyLmR1bXBTZWxl
Y3Rpb25SZWN0KCkgaW4gV2ViS2l0VGVzdFJ1bm5lcgpAQCAtODMyLDIyICs4NDgsNiBAQAogCiAg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL3dhdGNobGlzdDoKIAotMjAx
Mi0xMC0xMSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KLQotICAgICAg
ICBBWDogbGFiZWxGb3JFbGVtZW50IGlzIHNsb3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9N
IGVsZW1lbnRzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NzgyNQotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICBJ
bXBsZW1lbnQgdGl0bGVVSUVsZW1lbnQgaW4gdGhlIGNocm9taXVtIHBvcnQgb2YgRFJULCBhbmQK
LSAgICAgICAgZml4IGdldEFjY2Vzc2libGVFbGVtZW50QnlJZCBzbyB0aGF0IGl0IGVuc3VyZXMg
dGhlIGJhY2tpbmcgc3RvcmUKLSAgICAgICAgaXMgdXAtdG8tZGF0ZS4KLQotICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJD
aHJvbWl1bS5jcHA6Ci0gICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0QWNjZXNz
aWJsZUVsZW1lbnRCeUlkKToKLSAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHA6Ci0gICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKToKLQogMjAxMi0xMC0x
MSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICB0ZXN0LXdl
YmtpdHB5IHJ1bnMgaW5kaXZpZHVhbCB0ZXN0cyB0d2ljZQpAQCAtODc5LDYgKzg3OSw4IEBACiAg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vz
cy5weToKICAgICAgICAgKFNlcnZlclByb2Nlc3Muc3RvcCk6IERvbid0IHJlYWQgZGF0YSBhZnRl
ciB0aGUgcHJvY2VzcyBpcyBraWxsZWQuCiAKKz09PT09PT0KKz4+Pj4+Pj4gOTc4MjUgbWVyZ2Vk
CiAyMDEyLTEwLTExICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbR1RLXSBSRUdSRVNTSU9OKHIxMzEwMzMpOiBGYXZpY29ucyBkb24ndCB3b3Jr
IGluIE1pbmlCcm93c2VyCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ckNocm9taXVtLmNwcAppbmRleCA4OWQ1ZDU4NzcwYzYxZDFhYWU5MTYwYmEzNGU0MzY3NjUxNmIw
N2MyLi4wZmU0YzFmOTllNDU5NmQyZDhkNzQ3OGIyMTFmMzllNjViZmYzNzY4IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQ2hyb21pdW0uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKQEAgLTExNyw2
ICsxMTcsOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKGNvbnN0CiAgICAgaWYgKG1fcm9vdEVsZW1lbnQu
aXNOdWxsKCkpCiAgICAgICAgIG1fcm9vdEVsZW1lbnQgPSBtX3dlYlZpZXctPmFjY2Vzc2liaWxp
dHlPYmplY3QoKTsKIAorICAgIGlmICghbV9yb290RWxlbWVudC51cGRhdGVCYWNraW5nU3RvcmVB
bmRDaGVja1ZhbGlkaXR5KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGZpbmRB
Y2Nlc3NpYmxlRWxlbWVudEJ5SWRSZWN1cnNpdmUobV9yb290RWxlbWVudCwgV2ViU3RyaW5nOjpm
cm9tVVRGOChpZC5jX3N0cigpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudENocm9taXVtLmNwcAppbmRleCBkNjA4MjJiZThmMjNmMTBlM2JjNzZhM2NhZTFk
ZWRhOGE4OGQ2NjFmLi4yMTU3ZGRiNjlkODAyM2E2NDgxOWJmMTViMDk3OGI5NmU5YjcwODRkIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCkBA
IC03NzQsNyArNzc0LDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNv
bHVtbkFuZFJvd0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsCiAKIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Cisg
ICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBvYmogPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkudGl0
bGVVSUVsZW1lbnQoKTsKKyAgICBpZiAob2JqLmlzTnVsbCgpKSB7CisgICAgICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzdWx0LT5zZXQoKiht
X2ZhY3RvcnktPmdldE9yQ3JlYXRlKG9iaiktPmdldEFzQ3BwVmFyaWFudCgpKSk7CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggYWVkZTVmNTI0OTc1MTc3NWVhOTU1YjkyMGI3OTNhYWRlOTM3MjUwYy4uMTdiMGYzZTEzOGIw
MGM2YzRjZDBlYjgxMTA4ZGJiMTZkNWI5YWFlYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEy
LTEwLTE2ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAg
IEFYOiBsYWJlbEZvckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00g
ZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk3ODI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIEFk
ZHMgdHdvIG5ldyB0ZXN0cyBmb3IgdGl0bGVVSUVsZW1lbnQgdGhhdCBydW4gb24gYm90aCBNYWMg
YW5kCisgICAgICAgIENocm9taXVtLiBPbmUgdGVzdHMgY29ycmVjdG5lc3MsIHRoZSBvdGhlciB0
ZXN0cyBzcGVlZC4KKworICAgICAgICBGaXhlcyBvbmUgdGVzdCBzbyB0aGF0IGl0IHBhc3NlcyBv
biBDaHJvbWl1bS4KKyAgICAgICAgRW5hYmxlcyBvdGhlciB0ZXN0cyB0aGF0IG5vdyBwYXNzIG9u
IENocm9taXVtLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRp
dGxlLXVpLmh0bWw6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNv
cnJlY3RuZXNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS90
aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBlcmYv
YWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxMi0xMC0x
NiAgTWlrZSBSZWVkICA8cmVlZEBnb29nbGUuY29tPgogCiAgICAgICAgIHVwZGF0ZSBleHBlY3Rh
dGlvbnMgcHJlcGFyaW5nIGZvciBza2lhIG9wdGltaXphdGlvbgpAQCAtMjYwNSwyNiArMjYyNSw2
IEBACiAgICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKICAgICAg
ICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9uczoKIAotMjAxMi0xMC0xMSAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KLQotICAgICAgICBBWDogbGFiZWxGb3JF
bGVtZW50IGlzIHNsb3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1lbnRzCi0gICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgyNQotCi0gICAg
ICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KLQotICAgICAgICBBZGRzIHR3byBuZXcgdGVz
dHMgZm9yIHRpdGxlVUlFbGVtZW50IHRoYXQgcnVuIG9uIGJvdGggTWFjIGFuZAotICAgICAgICBD
aHJvbWl1bS4gT25lIHRlc3RzIGNvcnJlY3RuZXNzLCB0aGUgb3RoZXIgdGVzdHMgc3BlZWQuCi0K
LSAgICAgICAgRml4ZXMgb25lIHRlc3Qgc28gdGhhdCBpdCBwYXNzZXMgb24gQ2hyb21pdW0uCi0g
ICAgICAgIEVuYWJsZXMgb3RoZXIgdGVzdHMgdGhhdCBub3cgcGFzcyBvbiBDaHJvbWl1bS4KLQot
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sOgot
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgotICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVu
dC1jb3JyZWN0bmVzcy5odG1sOiBBZGRlZC4KLSAgICAgICAgKiBwZXJmL2FjY2Vzc2liaWxpdHkt
dGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgotICAgICAgICAqIHBlcmYvYWNj
ZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50Lmh0bWw6IEFkZGVkLgotICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6Ci0KIDIwMTItMTAtMTEgIEphbWVzIFNpbW9u
c2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHVucHJlZml4IHdpbmRvdy5w
ZXJmb3JtYW5jZS53ZWJraXROb3coKQpAQCAtMjc0MSw2ICsyNzQxLDggQEAKIAogICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6CiAKKz09PT09PT0KKz4+Pj4+Pj4g
OTc4MjUgbWVyZ2VkCiAyMDEyLTEwLTExICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW1F0XSBVbnJldmlld2VkIGdhcmRlbmluZywgc2tpcCBuZXcgZmFp
bGluZyB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJl
LXRleHRmaWVsZC10aXRsZS11aS5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1
cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKaW5kZXggMTcwZTU3MDFhMDQ1ODVkYzAxZTg2YWM2
NzliMWUzNDMwODE2M2YxOS4uMTJmODFlMzM4ZGNhOGI1ZjE0ZjAxYjg4MjY4Y2RmNmIyOWZmMjE1
YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxk
LXRpdGxlLXVpLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4
dGZpZWxkLXRpdGxlLXVpLmh0bWwKQEAgLTIxLDggKzIxLDcgQEAKICAgICAgICAgICAgIHBhc3Mu
Zm9jdXMoKTsKICAgICAgICAgICAgIHZhciB0aXRsZVVJRWxlbWVudCA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmZvY3VzZWRFbGVtZW50LnRpdGxlVUlFbGVtZW50KCk7CiAgICAgICAgICAgICB2
YXIgdGl0bGVUZXh0ID0gdGl0bGVVSUVsZW1lbnQuY2hpbGRBdEluZGV4KDApOwotICAgICAgICAg
ICAgdmFyIHBhdHRlcm4gPSAiQVhWYWx1ZTogUGFzc3dvcmQiOwotICAgICAgICAgICAgaWYgKHRp
dGxlVGV4dC5hbGxBdHRyaWJ1dGVzKCkuaW5kZXhPZihwYXR0ZXJuKSAhPSAtMSkgeworICAgICAg
ICAgICAgaWYgKHRpdGxlVGV4dC5zdHJpbmdWYWx1ZSA9PSAiQVhWYWx1ZTogUGFzc3dvcmQiKSB7
CiAgICAgICAgICAgICAgICAgcmVzdWx0LmlubmVyVGV4dCArPSAiVGVzdCBwYXNzZWRcbiI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3Mt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkODJhMzNhOGVlYzMzM2EzMGE2YTA5MDY5YWU5M2Ex
ZmMwYjFkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Rp
dGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAK
K1RoaXMgdGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVu
IHRoaW5ncyBjaGFuZ2UgZHluYW1pY2FsbHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIGF4RWxlbWVudCgnY29udHJvbDEnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwo
YXhFbGVtZW50KCdsYWJlbDEnKSkgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2wyJyku
dGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWwyJykpIGlzIHRydWUKK1BB
U1MgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sMycpKSBpcyBmYWxzZQorUEFT
UyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWwzJykuc2V0QXR0cmlidXRlKCdmb3InLCAn
Y29udHJvbDMnKTsgYXhFbGVtZW50KCdjb250cm9sMycpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVh
bChheEVsZW1lbnQoJ2xhYmVsMycpKSBpcyB0cnVlCitQQVNTIHZhciBsYWJlbDRFbGVtZW50ID0g
Y3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVsNCcsICdjb250cm9sNCcpOyBo
YXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIGlzIGZhbHNlCitQQVNTIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChsYWJlbDRFbGVt
ZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSBpcyB0cnVlCitQ
QVNTIGF4RWxlbWVudCgnY29udHJvbDQnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVt
ZW50KCdsYWJlbDQnKSkgaXMgdHJ1ZQorUEFTUyBsYWJlbDRFbGVtZW50LnBhcmVudEVsZW1lbnQu
cmVtb3ZlQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgn
Y29udHJvbDQnKSkgaXMgZmFsc2UKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdj
b250cm9sNScpKSBpcyBmYWxzZQorUEFTUyByZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sNScpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bGFiZWw1JykpOyBheEVsZW1lbnQoJ2NvbnRyb2w1JykudGl0bGVVSUVsZW1lbnQoKSAhPSBudWxs
IGlzIHRydWUKK1BBU1MgYXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkuaXNF
cXVhbChheEVsZW1lbnQoJ2xhYmVsNScpKSBpcyB0cnVlCitQQVNTIGF4RWxlbWVudCgnY29udHJv
bDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpIGlzIHRy
dWUKK1BBU1MgbmV3TGFiZWw2RWxlbWVudCA9IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmli
dXRlKCdsYWJlbDZhJywgJ2NvbnRyb2w2Jyk7IGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKG5l
d0xhYmVsNkVsZW1lbnQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7IGF4RWxlbWVudCgnY29u
dHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZhJykpIGlz
IHRydWUKK1BBU1MgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuZXdMYWJlbDZFbGVtZW50KTsg
YXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQo
J2xhYmVsNmInKSkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0
bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE5NmZkZjU5
ZDI2OGI0MjQ1Y2Q4N2VmODlkNTViZTJjNzllMGM1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCkBA
IC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8
ZGl2IGlkPSJjb250YWluZXIiPgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDEiIGZv
cj0iY29udHJvbDEiPkxhYmVsIDE8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDEiIHR5
cGU9InRleHQiPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWwyIj4K
KyAgICAgIExhYmVsIDIKKyAgICAgIDxpbnB1dCBpZD0iY29udHJvbDIiIHR5cGU9InRleHQiPgor
ICAgIDwvbGFiZWw+CisgIDwvZGl2PgorCisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDMi
PkxhYmVsIDM8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDMiIHR5cGU9InRleHQiPgor
ICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxpbnB1dCBpZD0iY29udHJvbDQiIHR5cGU9InRleHQi
PgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWw1Ij4KKyAgICAgIExh
YmVsIDUKKyAgICA8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDUiIHR5cGU9InRleHQi
PgorICA8L2Rpdj4KKworICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWw2YiIgZm9yPSJjb250
cm9sNiI+TGFiZWwgNmI8L2xhYmVsPgorICAgIDxsYWJlbCBpZD0ibGFiZWw2YyIgZm9yPSJjb250
cm9sNiI+TGFiZWwgNmM8L2xhYmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDYiIHR5cGU9InRl
eHQiPgorICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IHdvcmtzIGNv
cnJlY3RseSBldmVuIHdoZW4gdGhpbmdzIGNoYW5nZSBkeW5hbWljYWxseS4iKTsKKworaWYgKHdp
bmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAg
IHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCisgICAgZnVuY3Rpb24gaGFzVGl0bGVVSUVsZW1l
bnQoYXhFbGVtZW50KSB7CisgICAgICAgIHZhciBsYWJlbDEgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImxhYmVsMSIpOworICAgICAgICB2YXIgdGl0bGVV
SUVsZW1lbnQgPSBheEVsZW1lbnQudGl0bGVVSUVsZW1lbnQoKTsKKyAgICAgICAgaWYgKHRpdGxl
VUlFbGVtZW50ID09IG51bGwpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0aXRsZVVJRWxlbWVudC5yb2xlID09IGxhYmVsMS5yb2xlOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRlKGlkLCBmb3JBdHRyaWJ1dGVW
YWx1ZSkgeworICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgibGFiZWwiKTsKKyAgICAgICAgbGFiZWxFbGVtZW50LmlkID0gaWQ7CisgICAgICAgIGxhYmVs
RWxlbWVudC5zZXRBdHRyaWJ1dGUoImZvciIsIGZvckF0dHJpYnV0ZVZhbHVlKTsKKyAgICAgICAg
bGFiZWxFbGVtZW50LmlubmVyVGV4dCA9ICJMYWJlbCBmb3IgIiArIGZvckF0dHJpYnV0ZVZhbHVl
OworICAgICAgICByZXR1cm4gbGFiZWxFbGVtZW50OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJl
cGFyZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgY29udGFpbmVyKSB7CisgICAgICAgIG5vZGUu
cGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKG5vZGUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGF4RWxlbWVudChpZCkgeworICAg
ICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlk
KGlkKTsKKyAgICB9CisKKyAgICBzaG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sMScpLnRpdGxl
VUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMScpKSIsICJ0cnVlIik7CisKKyAg
ICBzaG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVh
bChheEVsZW1lbnQoJ2xhYmVsMicpKSIsICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IGNoYW5naW5n
IHRoZSAiZm9yIiBhdHRyaWJ1dGUgZHluYW1pY2FsbHkuCisgICAgc2hvdWxkQmUoImhhc1RpdGxl
VUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDMnKSkiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRC
ZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycpLnNldEF0dHJpYnV0ZSgnZm9yJywg
J2NvbnRyb2wzJyk7IGF4RWxlbWVudCgnY29udHJvbDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1
YWwoYXhFbGVtZW50KCdsYWJlbDMnKSkiLCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCB1bmF0dGFj
aGVkIGxhYmVsIGVsZW1lbnQgdGhhdCdzIHN1YnNlcXVlbnRseSBhdHRhY2hlZC4KKyAgICB2YXIg
bGFiZWw0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CisgICAgbGFi
ZWw0RWxlbWVudC5pZCA9ICJsYWJlbDQiOworICAgIGxhYmVsNEVsZW1lbnQuc2V0QXR0cmlidXRl
KCJmb3IiLCAiY29udHJvbDQiKTsKKyAgICBsYWJlbDRFbGVtZW50LmlubmVyVGV4dCA9ICJMYWJl
bCA0IjsKKyAgICBzaG91bGRCZSgidmFyIGxhYmVsNEVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJ
ZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw0JywgJ2NvbnRyb2w0Jyk7IGhhc1RpdGxlVUlFbGVtZW50
KGF4RWxlbWVudCgnY29udHJvbDQnKSkiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQp
OyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIiwgInRydWUiKTsKKyAg
ICBzaG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sNCcpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVh
bChheEVsZW1lbnQoJ2xhYmVsNCcpKSIsICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IHdoYXQgaGFw
cGVucyB3aGVuIHRoZSBsYWJlbCBpcyBkZXRhY2hlZC4KKyAgICBzaG91bGRCZSgibGFiZWw0RWxl
bWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVsNEVsZW1lbnQpOyBoYXNUaXRsZVVJ
RWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIiwgImZhbHNlIik7CisKKyAgICAvLyBUZXN0
IGxhYmVsIHRoYXQgZ2V0cyBhIGNvbnRyb2wgcmVwYXJlbnRlZCBpbnRvIGl0LgorICAgIHNob3Vs
ZEJlKCJoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w1JykpIiwgImZhbHNlIik7
CisKKyAgICBzaG91bGRCZSgicmVwYXJlbnROb2RlSW50b0NvbnRhaW5lcihkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29udHJvbDUnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNScp
KTsgYXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCIsICJ0cnVl
Iik7CisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgp
LmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDUnKSkiLCAidHJ1ZSIpOworCisgICAgLy8gTWFrZSBz
dXJlIHRoZSBmaXJzdCBsYWJlbCBpcyByZXR1cm5lZCwgZXZlbiBhcyBsYWJlbHMgYXJlIGFkZGVk
IGFuZCByZW1vdmVkLgorICAgIHNob3VsZEJlKCJheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVV
SUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YicpKSIsICJ0cnVlIik7CisgICAg
c2hvdWxkQmUoIm5ld0xhYmVsNkVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJp
YnV0ZSgnbGFiZWw2YScsICdjb250cm9sNicpOyBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShu
ZXdMYWJlbDZFbGVtZW50LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOyBheEVsZW1lbnQoJ2Nv
bnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YScpKSIs
ICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobmV3TGFi
ZWw2RWxlbWVudCk7IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1
YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpIiwgInRydWUiKTsKKworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworfQorCis8L3Nj
cmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
ZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjZkOTg2OTk1ZTU5ZDM3NzFlMDMzNDZiYzg3ZTUwMzNhYTRhMTc2OAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3BlcmYvYWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVt
ZW50LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1Rlc3RzIHRoYXQgdGl0bGVVSUVsZW1l
bnQgb24gYW4gYWNjZXNzaWJpbGl0eSBlbGVtZW50IHJ1bnMgaW4gYW1vcnRpemVkIGNvbnN0YW50
IHRpbWUuCitQQVNTCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BlcmYvYWNjZXNzaWJpbGl0
eS10aXRsZS11aS1lbGVtZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHkt
dGl0bGUtdWktZWxlbWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3OWI5MDA3Y2ZhZjFiMjA2ZTk2ZWFl
MmFkMjJiZDAzYjk0ZmU4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wZXJmL2Fj
Y2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC5odG1sCkBAIC0wLDAgKzEsNTQgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvbWFn
bml0dWRlLXBlcmYuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordmFyIHBhcmVudENvbnRhaW5l
cjsKK3ZhciBheENvbnRyb2w7CisKK2Z1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc3VmZml4KSB7Cisg
ICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpID09IHN1ZmZp
eDsKK30KKworZnVuY3Rpb24gc2V0dXAobWFnbml0dWRlKSB7CisgICAgaWYgKHBhcmVudENvbnRh
aW5lcikKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwYXJlbnRDb250YWluZXIp
OworICAgIHBhcmVudENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFyZW50Q29udGFpbmVyKTsKKworICAgIHZh
ciBqdW5rQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgcGFy
ZW50Q29udGFpbmVyLmFwcGVuZENoaWxkKGp1bmtDb250YWluZXIpOworCisgICAgdmFyIGxhYmVs
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTsKKyAgICBsYWJlbC5zZXRBdHRyaWJ1
dGUoJ2ZvcicsICdjb250cm9sJyk7CisgICAgbGFiZWwuaW5uZXJUZXh0ID0gJ0xhYmVsJzsKKyAg
ICBwYXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWwpOworCisgICAgdmFyIGNvbnRyb2wg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgIGNvbnRyb2wudHlwZSA9ICd0
ZXh0JzsKKyAgICBjb250cm9sLmlkID0gJ2NvbnRyb2wnOworICAgIHBhcmVudENvbnRhaW5lci5h
cHBlbmRDaGlsZChjb250cm9sKTsKKworICAgIHBhcmVudENvbnRhaW5lci5vZmZzZXRMZWZ0Owor
ICAgIGF4Q29udHJvbCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50
QnlJZCgnY29udHJvbCcpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMCAqIG1hZ25pdHVk
ZTsgKytpKSB7CisgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8cD48L3A+PHA+PC9wPjxwPjwvcD48cD48L3A+
PHA+PC9wPiI7CisgICAgICAgIGp1bmtDb250YWluZXIuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB9
CisgICAgcGFyZW50Q29udGFpbmVyLm9mZnNldExlZnQ7Cit9CisKK2Z1bmN0aW9uIHRlc3QobWFn
bml0dWRlKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAgICAgICBh
eENvbnRyb2wudGl0bGVVSUVsZW1lbnQoKTsKKyAgICB9Cit9CisKK01hZ25pdHVkZS5kZXNjcmlw
dGlvbigiVGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCBvbiBhbiBhY2Nlc3NpYmlsaXR5IGVsZW1l
bnQgcnVucyBpbiBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4iKTsKK01hZ25pdHVkZS5ydW4oc2V0
dXAsIHRlc3QsIE1hZ25pdHVkZS5DT05TVEFOVCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IDVmYWI2YWI1OGQ2NTk0YTVkZGQ3YmYyODg5ZTkxNTk1MGYyNzUxOWUuLmI5ZTM2MWFkZWNj
NDNjM2EzYjcwZTFlMjU3Y2MzZjE4ZjYxMmNjNmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTQwNywxNCArMTQwNywxMSBAQCBjcmJ1
Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbCBbIFNraXAg
XQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbGVnZW5kLmh0bWwgWyBTa2lwIF0KIGNy
YnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2xpc3RzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L21lZGlhLWVsZW1lbnQuaHRtbCBbIFNraXAgXQotY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbm9uLWRhdGEtdGFibGUtY2VsbC10aXRsZS11aS1lbGVt
ZW50Lmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L29uY2xpY2st
aGFuZGxlcnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGxh
Y2Vob2xkZXIuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGx1
Z2luLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1
dHRvbi1jaGVja2JveC1zaXplLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3Np
YmlsaXR5L3JhZGlvLWJ1dHRvbi1ncm91cC1tZW1iZXJzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi10aXRsZS1sYWJlbC5odG1sIFsgU2tp
cCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxl
LXVpLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWF0
dHJpYnV0ZXMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFi
bGUtY2VsbC1zcGFucy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0
eS90YWJsZS1jZWxscy5odG1sIFsgU2tpcCBdCkBAIC0xNDIzLDcgKzE0MjAsNiBAQCBjcmJ1Zy5j
b20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1vbmUtY2VsbC5odG1sIFsgU2tpcCBdCiBjcmJ1
Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1zZWN0aW9ucy5odG1sIFsgU2tpcCBdCiBj
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS13aXRoLWFyaWEtcm9sZS5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS13aXRoLXJ1bGVzLmh0
bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RoLWFzLXRpdGxlLXVp
Lmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RyYW5zZm9ybWVk
LWVsZW1lbnQuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdmlz
aWJsZS1lbGVtZW50cy5odG1sIFsgU2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169074</attachid>
            <date>2012-10-16 19:42:54 -0700</date>
            <delta_ts>2012-10-18 23:53:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97825-20121016194143.patch</filename>
            <type>text/plain</type>
            <size>28677</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2NjOWU1Y2U4YmRhNDdj
OTAzOTY0MWJlMjkwMGEzOTE0NDYxNTdhNi4uOGRlZmNmZGMwNjBkOWM2MTJhM2M1ZDk2ZDlhMGQ2
ZGNmYmUxZDk1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTEwLTE2ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIERvY3Vt
ZW50T3JkZXJlZE1hcCB0byBUcmVlU2NvcGUgdGhhdCBhbGxvd3MgYWNjZXNzaWJpbGl0eSB0bwor
ICAgICAgICBxdWlja2x5IG1hcCBmcm9tIGFuIGlkIHRvIHRoZSBsYWJlbCBmb3IgdGhhdCBpZC4g
VGhpcyBzcGVlZHMgdXAKKyAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGU6OmxhYmVsRm9yRWxlbWVu
dCwgd2hpY2ggd2FzIGEgYm90dGxlbmVjayBpbiBDaHJvbWl1bQorICAgICAgICB3aGVuIGFjY2Vz
c2liaWxpdHkgd2FzIG9uLgorCisgICAgICAgIFRlc3RzOiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorICAgICAgICAgICAgICAgcGVyZi9hY2Nlc3NpYmls
aXR5LXRpdGxlLXVpLWVsZW1lbnQuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmtleU1hdGNoZXNMYWJlbEZvckF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJl
ZE1hcDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxl
bWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9yZGVyZWRN
YXAuaDoKKyAgICAgICAgKERvY3VtZW50T3JkZXJlZE1hcCk6CisgICAgICAgICogZG9tL0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnVwZGF0ZUxhYmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQu
aDoKKyAgICAgICAgKEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlOjpkZXN0cm95VHJlZVNjb3BlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U2NvcGU6OmFkZExhYmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlOjpyZW1vdmVMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Omxh
YmVsRWxlbWVudEZvcklkKToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFRyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2Nv
cGU6OnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUpOgorCiAyMDEyLTEwLTE2ICBaYW4g
RG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0g
R3N0QnVmZmVyIHJlZiByYWNlIGluIFdlYktpdFdlYkF1ZGlvU3JjTG9vcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNw
cAppbmRleCAwZjk0ODM4ZTdlYzU1YTk2OWVkYjFlODA1MDAwMzk3NWQ3ZWVjYzEzLi4yYjVmODVj
NGQ2YjZhNDIxNjQwMTIzNjg0OGU0Y2EzNDExYTE2MTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcApAQCAt
NTksNiArNTksNyBAQAogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisj
aW5jbHVkZSAiTGFiZWxhYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3Mu
aCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCkBAIC0x
MDAxLDE0ICsxMDAyLDE4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzR2VuZXJp
Y0ZvY3VzYWJsZUVsZW1lbnQoKSBjb25zdAogCiBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7
Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxl
bWVudHNCeVRhZ05hbWUoImxhYmVsIik7Ci0gICAgdW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3Ro
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlm
IChsaXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgewotICAgICAgICAgICAgSFRN
TExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obGlz
dC0+aXRlbShpKSk7Ci0gICAgICAgICAgICBpZiAobGFiZWwtPmNvbnRyb2woKSA9PSBlbGVtZW50
KQotICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbDsKLSAgICAgICAgfQorICAgIGlmICghZWxl
bWVudC0+aXNIVE1MRWxlbWVudCgpIHx8ICF0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5pc0xhYmVs
YWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWQg
PSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgIGlmICghaWQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGVsZW1lbnQtPnRyZWVTY29wZSgp
LT5sYWJlbEVsZW1lbnRGb3JJZChpZCkpCisgICAgICAgICAgICByZXR1cm4gbGFiZWw7CisgICAg
fQorCisgICAgZm9yIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7
IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgaWYg
KHBhcmVudC0+aGFzVGFnTmFtZShsYWJlbFRhZykpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHBhcmVudCk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDEyOTdlNTEw
MmZiNGU3OWNlM2RiMTEyMzU3MDIxZTNkZDA1NTRhNTEuLmJiZDhiM2IxNmVhZjQ5ZTAxNmVkMDQ3
NmIwYmI0YTllNzYwNjA0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRN
YXAuY3BwCkBAIC01NSw2ICs1NSwxMSBAQCBpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTG93ZXJjYXNl
ZE1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBFbGVtZW50KiBlbGVtZW50KQogICAgIHJl
dHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKG1hcFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE1hcEVs
ZW1lbnQqPihlbGVtZW50KS0+Z2V0TmFtZSgpLmxvd2VyKCkuaW1wbCgpID09IGtleTsKIH0KIAor
aW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKEF0b21pY1N0cmluZ0ltcGwq
IGtleSwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFt
ZShsYWJlbFRhZykgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGZvckF0dHIpLmltcGwoKSA9PSBr
ZXk7Cit9CisKIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpjbGVhcigpCiB7CiAgICAgbV9tYXAu
Y2xlYXIoKTsKQEAgLTE0OSw1ICsxNTQsOSBAQCBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6
OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqIGtleQogICAg
IHJldHVybiBnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXksIHNjb3BlKTsKIH0K
IAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpn
ZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNvbnN0
IFRyZWVTY29wZSogc2NvcGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldDxrZXlNYXRjaGVzTGFi
ZWxGb3JBdHRyaWJ1dGU+KGtleSwgc2NvcGUpOworfQogCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKaW5kZXggN2QxMjY4NmMzMzZh
ZDhmMGE2MTc0MzlmMTY4NDlmNjRjYzNiOWIxZC4uMWY5MDM5ZTYxNDNkMzg2MjhkZmEzMDBhZTk4
NmEwMWVlMzIzYzdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaApA
QCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5SWQoQXRv
bWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwogICAgIEVsZW1lbnQqIGdl
dEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNv
bnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0
cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKKyAgICBFbGVtZW50KiBnZXRFbGVt
ZW50QnlMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3Bl
KikgY29uc3Q7CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKIApAQCAtODAs
NCArODEsMyBAQCBpbmxpbmUgYm9vbCBEb2N1bWVudE9yZGVyZWRNYXA6OmNvbnRhaW5zTXVsdGlw
bGUoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBEb2N1bWVudE9yZGVyZWRNYXBfaAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5k
ZXggN2NiYTUxZjBkZjhjMjA0ZWU2OTU3NDU5MDU4NTY3ZjZiYTExYTQ3Ny4uMzM4Njk1Yzk3ZjVh
MGY0YjU4OWI0NGY5NGZjYTJmMWNkYzUwOTE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAt
NDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZv
cm1Db2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMu
aCIKQEAgLTk1OSw2ICs5NjAsMTIgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVz
dCBFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW8KICAgICBpZiAo
IW5hbWVWYWx1ZS5pc051bGwoKSkKICAgICAgICAgdXBkYXRlTmFtZShudWxsQXRvbSwgbmFtZVZh
bHVlKTsKIAorICAgIGlmIChoYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAgICAgICBUcmVlU2Nv
cGUqIHNjb3BlID0gdHJlZVNjb3BlKCk7CisgICAgICAgIGlmIChzY29wZS0+c2hvdWxkQ2FjaGVM
YWJlbHNCeUZvckF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgdXBkYXRlTGFiZWwoc2NvcGUsIG51
bGxBdG9tLCBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpKTsKKyAgICB9CisKICAgICByZXR1cm4g
SW5zZXJ0aW9uRG9uZTsKIH0KIApAQCAtOTkxLDYgKzk5OCwxMiBAQCB2b2lkIEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQogICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVWYWx1ZSA9IGdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYg
KCFuYW1lVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICB1cGRhdGVOYW1lKG5hbWVWYWx1ZSwg
bnVsbEF0b20pOworCisgICAgICAgIGlmIChoYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAgICAg
ICAgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSB0cmVlU2NvcGVPZlBhcmVudCh0aGlzLCBpbnNl
cnRpb25Qb2ludCk7CisgICAgICAgICAgICBpZiAodHJlZVNjb3BlLT5zaG91bGRDYWNoZUxhYmVs
c0J5Rm9yQXR0cmlidXRlKCkpCisgICAgICAgICAgICAgICAgdXBkYXRlTGFiZWwodHJlZVNjb3Bl
LCBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpLCBudWxsQXRvbSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBDb250YWluZXJOb2RlOjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CkBAIC0y
MTMzLDEyICsyMTQ2LDMzIEBAIGJvb2wgRWxlbWVudDo6aGFzTmFtZWROb2RlTWFwKCkgY29uc3QK
IH0KICNlbmRpZgogCit2b2lkIEVsZW1lbnQ6OnVwZGF0ZUxhYmVsKFRyZWVTY29wZSogc2NvcGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgb2xkRm9yQXR0cmlidXRlVmFsdWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmV3Rm9yQXR0cmlidXRlVmFsdWUpCit7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUobGFi
ZWxUYWcpKTsKKworICAgIGlmICghaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAob2xkRm9yQXR0cmlidXRlVmFsdWUgPT0gbmV3Rm9yQXR0cmlidXRlVmFsdWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghb2xkRm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICBzY29wZS0+cmVtb3ZlTGFiZWwob2xkRm9yQXR0cmlidXRlVmFsdWUsIHN0YXRpY19j
YXN0PEhUTUxMYWJlbEVsZW1lbnQqPih0aGlzKSk7CisgICAgaWYgKCFuZXdGb3JBdHRyaWJ1dGVW
YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHNjb3BlLT5hZGRMYWJlbChuZXdGb3JBdHRyaWJ1dGVW
YWx1ZSwgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHRoaXMpKTsKK30KKwogdm9pZCBF
bGVtZW50Ojp3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUp
CiB7CiAgICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG5hbWUpKQogICAgICAgICB1cGRhdGVJZChv
bGRWYWx1ZSwgbmV3VmFsdWUpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpuYW1l
QXR0cikKICAgICAgICAgdXBkYXRlTmFtZShvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIGVsc2Ug
aWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpmb3JBdHRyICYmIGhhc1RhZ05hbWUobGFiZWxUYWcpKSB7
CisgICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSB0cmVlU2NvcGUoKTsKKyAgICAgICAgaWYgKHNj
b3BlLT5zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkpCisgICAgICAgICAgICB1cGRh
dGVMYWJlbChzY29wZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICB9CiAKICNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQogICAgIGlmIChPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA+IHJlY2lwaWVudHMgPSBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3Jl
YXRlRm9yQXR0cmlidXRlc011dGF0aW9uKHRoaXMsIG5hbWUpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5k
ZXggNThlMjk3ZDE1NzQ0NTk1Y2ExOGI5OWI0NTNmNmUzMDRhMDE0ZGEyMS4uNTE5YzUwZDc3ODkz
MTUxNmZhZjg4MzBjNDYzYjI1MDIwMTViNmRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0zMTUs
NiArMzE1LDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlSWQoY29uc3QgQXRvbWljU3RyaW5n
JiBvbGRJZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCk7CiAgICAgdm9pZCB1cGRhdGVJZChU
cmVlU2NvcGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0lkKTsKICAgICB2b2lkIHVwZGF0ZU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1l
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpOworICAgIHZvaWQgdXBkYXRlTGFiZWwoVHJl
ZVNjb3BlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVWYWx1ZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuZXdGb3JBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICB2b2lkIHJlbW92ZUNh
Y2hlZEhUTUxDb2xsZWN0aW9uKEhUTUxDb2xsZWN0aW9uKiwgQ29sbGVjdGlvblR5cGUpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGUuY3BwCmluZGV4IGFhZDFkZmY2ZGMxNDk3NzA0ZDMwZThkYmRmMDk3
YjdjNDcyOWU1MzkuLjc5M2U1Y2RiM2YxNTk1OTUzNzI4ODVhNmY4ZWFhZDY0NzRjOWE0NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFt
ZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklk
VGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oIgpAQCAtNTUsNiArNTYsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogVHJlZVNjb3BlOjpUcmVlU2NvcGUoQ29udGFpbmVyTm9kZSogcm9vdE5v
ZGUpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwgbV9wYXJlbnRUcmVlU2NvcGUo
MCkKKyAgICAsIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZShmYWxzZSkKICAgICAs
IG1faWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5KElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6Y3Jl
YXRlKCkpCiB7CiAgICAgQVNTRVJUKHJvb3ROb2RlKTsKQEAgLTcyLDYgKzc0LDcgQEAgdm9pZCBU
cmVlU2NvcGU6OmRlc3Ryb3lUcmVlU2NvcGVEYXRhKCkKIHsKICAgICBtX2VsZW1lbnRzQnlJZC5j
bGVhcigpOwogICAgIG1faW1hZ2VNYXBzQnlOYW1lLmNsZWFyKCk7CisgICAgbV9sYWJlbHNCeUZv
ckF0dHJpYnV0ZS5jbGVhcigpOwogfQogCiB2b2lkIFRyZWVTY29wZTo6c2V0UGFyZW50VHJlZVNj
b3BlKFRyZWVTY29wZSogbmV3UGFyZW50U2NvcGUpCkBAIC0xNDQsNiArMTQ3LDM2IEBAIEhUTUxN
YXBFbGVtZW50KiBUcmVlU2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25z
dAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudCo+KG1faW1hZ2VNYXBzQnlO
YW1lLmdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5nKG5hbWUpLmltcGwoKSwgdGhpcykp
OwogfQogCit2b2lkIFRyZWVTY29wZTo6YWRkTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JB
dHRyaWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX2xhYmVs
c0J5Rm9yQXR0cmlidXRlLmFkZChmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIGVsZW1lbnQpOwor
fQorCit2b2lkIFRyZWVTY29wZTo6cmVtb3ZlTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JB
dHRyaWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX2xhYmVs
c0J5Rm9yQXR0cmlidXRlLnJlbW92ZShmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIGVsZW1lbnQp
OworfQorCitIVE1MTGFiZWxFbGVtZW50KiBUcmVlU2NvcGU6OmxhYmVsRWxlbWVudEZvcklkKGNv
bnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUpCit7CisgICAgaWYgKCFtX3Nob3Vs
ZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUpIHsKKyAgICAgICAgbV9zaG91bGRDYWNoZUxhYmVs
c0J5Rm9yQXR0cmlidXRlID0gdHJ1ZTsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5v
ZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUobGFiZWxUYWcpKSB7CisgICAgICAgICAgICAgICAgSFRN
TExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obm9k
ZSk7CisgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JWYWx1ZSA9IGxhYmVs
LT5mYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpOworICAgICAgICAgICAgICAgIGlmICghZm9yVmFs
dWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBhZGRMYWJlbChmb3JWYWx1ZSwgbGFi
ZWwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZvckF0dHJp
YnV0ZVZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUuZ2V0RWxl
bWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoZm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCB0aGlzKSk7
Cit9CisKIERPTVNlbGVjdGlvbiogVHJlZVNjb3BlOjpnZXRTZWxlY3Rpb24oKSBjb25zdAogewog
ICAgIGlmICghcm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2Nv
cGUuaAppbmRleCBkOTc1OGIwMjhlNGQ0NTY3ODRmNDU5MGUwOTBlNWEyNTdkMjk0NWYzLi45Y2Fl
NTRkZThkZjc3NjIwNDk3MzQ1NTEyNDQ3ZGY0MjJlZDQ5NGIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29w
ZS5oCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRhaW5l
ck5vZGU7CiBjbGFzcyBET01TZWxlY3Rpb247CiBjbGFzcyBFbGVtZW50OworY2xhc3MgSFRNTExh
YmVsRWxlbWVudDsKIGNsYXNzIEhUTUxNYXBFbGVtZW50OwogY2xhc3MgSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5OwogY2xhc3MgTm9kZTsKQEAgLTYyLDYgKzYzLDEyIEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50Kik7CiAgICAgSFRNTE1hcEVsZW1lbnQq
IGdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdDsKIAorICAgIC8vIEZvciBhY2Nl
c3NpYmlsaXR5LgorICAgIGJvb2wgc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZTsgfQorICAgIHZv
aWQgYWRkTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSwgSFRNTExh
YmVsRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBm
b3JBdHRyaWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCopOworICAgIEhUTUxMYWJlbEVsZW1l
bnQqIGxhYmVsRWxlbWVudEZvcklkKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFs
dWUpOworCiAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIC8v
IEZpbmQgZmlyc3QgYW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuCkBAIC05NCw2ICsxMDEsOSBA
QCBwcml2YXRlOgogICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBE
b2N1bWVudE9yZGVyZWRNYXAgbV9pbWFnZU1hcHNCeU5hbWU7CiAKKyAgICBEb2N1bWVudE9yZGVy
ZWRNYXAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZTsKKyAgICBib29sIG1fc2hvdWxkQ2FjaGVMYWJl
bHNCeUZvckF0dHJpYnV0ZTsKKwogICAgIE93blB0cjxJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk+
IG1faWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OwogCiAgICAgbXV0YWJsZSBSZWZQdHI8RE9NU2Vs
ZWN0aW9uPiBtX3NlbGVjdGlvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAyZTcwMjczMzFmNjk2YmZjMWU3NTM4MjFjNDA1YjBkNThhNTJlMmQw
Li45OTdmNDNlNjIyNDBhMmM4ZDk1ZmY5OTY2Nzc5MmUwMDUwMjQ2OTY4IDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTItMTAtMTYgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgQVg6IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIERP
TSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTc4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnQgdGl0bGVVSUVsZW1lbnQgaW4gdGhlIGNocm9taXVtIHBvcnQgb2YgRFJULCBh
bmQKKyAgICAgICAgZml4IGdldEFjY2Vzc2libGVFbGVtZW50QnlJZCBzbyB0aGF0IGl0IGVuc3Vy
ZXMgdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaXMgdXAtdG8tZGF0ZS4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0QWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHA6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKToKKwogMjAxMi0x
MC0xNiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8cmFwaGFlbC5rdWJvLmRhLmNvc3RhQGludGVs
LmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgdGVzdFJ1bm5lci5kdW1wU2VsZWN0aW9uUmVjdCgp
IGluIFdlYktpdFRlc3RSdW5uZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyQ2hyb21pdW0uY3BwCmluZGV4IDg5ZDVkNTg3NzBjNjFkMWFhZTkxNjBiYTM0ZTQzNjc2
NTE2YjA3YzIuLjBmZTRjMWY5OWU0NTk2ZDJkOGQ3NDc4YjIxMWYzOWU2NWJmZjM3NjggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcApAQCAt
MTE3LDYgKzExNyw5IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQoY29uc3QKICAgICBpZiAobV9yb290RWxl
bWVudC5pc051bGwoKSkKICAgICAgICAgbV9yb290RWxlbWVudCA9IG1fd2ViVmlldy0+YWNjZXNz
aWJpbGl0eU9iamVjdCgpOwogCisgICAgaWYgKCFtX3Jvb3RFbGVtZW50LnVwZGF0ZUJhY2tpbmdT
dG9yZUFuZENoZWNrVmFsaWRpdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4g
ZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShtX3Jvb3RFbGVtZW50LCBXZWJTdHJp
bmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21p
dW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCmluZGV4IGQ2MDgyMmJlOGYyM2YxMGUzYmM3NmEz
Y2FlMWRlZGE4YTg4ZDY2MWYuLjIxNTdkZGI2OWQ4MDIzYTY0ODE5YmYxNWIwOTc4Yjk2ZTliNzA4
NGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5j
cHAKQEAgLTc3NCw3ICs3NzQsMTMgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxs
Rm9yQ29sdW1uQW5kUm93Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwKIAogdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG9iaiA9IGFjY2Vzc2liaWxpdHlPYmplY3Qo
KS50aXRsZVVJRWxlbWVudCgpOworICAgIGlmIChvYmouaXNOdWxsKCkpIHsKKyAgICAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXN1bHQtPnNl
dCgqKG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUob2JqKS0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKIH0K
IAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCZhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhZWRlNWY1MjQ5NzUxNzc1ZWE5NTViOTIwYjc5M2FhZGU5MzcyNTBjLi4xMDIxMTU2
NGE5MmU2NGFhODBlYzk5NDJhNjY4MjJmZTI4NDBlY2E0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTItMTAtMTYgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgQVg6IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdoZW4gdGhlcmUgYXJlIGEgbG90IG9m
IERPTSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTc4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRzIHR3byBuZXcgdGVzdHMgZm9yIHRpdGxlVUlFbGVtZW50IHRoYXQgcnVuIG9uIGJv
dGggTWFjIGFuZAorICAgICAgICBDaHJvbWl1bS4gT25lIHRlc3RzIGNvcnJlY3RuZXNzLCB0aGUg
b3RoZXIgdGVzdHMgc3BlZWQuCisKKyAgICAgICAgRml4ZXMgb25lIHRlc3Qgc28gdGhhdCBpdCBw
YXNzZXMgb24gQ2hyb21pdW0uCisgICAgICAgIEVuYWJsZXMgb3RoZXIgdGVzdHMgdGhhdCBub3cg
cGFzcyBvbiBDaHJvbWl1bS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRm
aWVsZC10aXRsZS11aS5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxl
bWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBwZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHBlcmYvYWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIw
MTItMTAtMTYgIE1pa2UgUmVlZCAgPHJlZWRAZ29vZ2xlLmNvbT4KIAogICAgICAgICB1cGRhdGUg
ZXhwZWN0YXRpb25zIHByZXBhcmluZyBmb3Igc2tpYSBvcHRpbWl6YXRpb24KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1s
IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0
bWwKaW5kZXggMTcwZTU3MDFhMDQ1ODVkYzAxZTg2YWM2NzliMWUzNDMwODE2M2YxOS4uMTJmODFl
MzM4ZGNhOGI1ZjE0ZjAxYjg4MjY4Y2RmNmIyOWZmMjE1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKQEAg
LTIxLDggKzIxLDcgQEAKICAgICAgICAgICAgIHBhc3MuZm9jdXMoKTsKICAgICAgICAgICAgIHZh
ciB0aXRsZVVJRWxlbWVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50
LnRpdGxlVUlFbGVtZW50KCk7CiAgICAgICAgICAgICB2YXIgdGl0bGVUZXh0ID0gdGl0bGVVSUVs
ZW1lbnQuY2hpbGRBdEluZGV4KDApOwotICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSAiQVhWYWx1
ZTogUGFzc3dvcmQiOwotICAgICAgICAgICAgaWYgKHRpdGxlVGV4dC5hbGxBdHRyaWJ1dGVzKCku
aW5kZXhPZihwYXR0ZXJuKSAhPSAtMSkgeworICAgICAgICAgICAgaWYgKHRpdGxlVGV4dC5zdHJp
bmdWYWx1ZSA9PSAiQVhWYWx1ZTogUGFzc3dvcmQiKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0
LmlubmVyVGV4dCArPSAiVGVzdCBwYXNzZWRcbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWkt
ZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJkODJhMzNhOGVlYzMzM2EzMGE2YTA5MDY5YWU5M2ExZmMwYjFkN2UKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5l
c3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1RoaXMgdGVzdHMgdGhhdCB0aXRsZVVJ
RWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5ncyBjaGFuZ2UgZHluYW1pY2Fs
bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGF4RWxlbWVudCgnY29u
dHJvbDEnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkgaXMg
dHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2wyJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFs
KGF4RWxlbWVudCgnbGFiZWwyJykpIGlzIHRydWUKK1BBU1MgaGFzVGl0bGVVSUVsZW1lbnQoYXhF
bGVtZW50KCdjb250cm9sMycpKSBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbGFiZWwzJykuc2V0QXR0cmlidXRlKCdmb3InLCAnY29udHJvbDMnKTsgYXhFbGVtZW50KCdj
b250cm9sMycpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMycpKSBp
cyB0cnVlCitQQVNTIHZhciBsYWJlbDRFbGVtZW50ID0gY3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JB
dHRyaWJ1dGUoJ2xhYmVsNCcsICdjb250cm9sNCcpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1l
bnQoJ2NvbnRyb2w0JykpIGlzIGZhbHNlCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b250YWluZXInKS5hcHBlbmRDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQo
YXhFbGVtZW50KCdjb250cm9sNCcpKSBpcyB0cnVlCitQQVNTIGF4RWxlbWVudCgnY29udHJvbDQn
KS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDQnKSkgaXMgdHJ1ZQor
UEFTUyBsYWJlbDRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWw0RWxlbWVu
dCk7IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSkgaXMgZmFsc2UKK1BB
U1MgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNScpKSBpcyBmYWxzZQorUEFT
UyByZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250
cm9sNScpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWw1JykpOyBheEVsZW1lbnQoJ2Nv
bnRyb2w1JykudGl0bGVVSUVsZW1lbnQoKSAhPSBudWxsIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50
KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNScp
KSBpcyB0cnVlCitQQVNTIGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlz
RXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpIGlzIHRydWUKK1BBU1MgbmV3TGFiZWw2RWxlbWVu
dCA9IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRlKCdsYWJlbDZhJywgJ2NvbnRyb2w2
Jyk7IGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKG5ld0xhYmVsNkVsZW1lbnQsIGRvY3VtZW50
LmJvZHkuZmlyc3RDaGlsZCk7IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgp
LmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZhJykpIGlzIHRydWUKK1BBU1MgZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZChuZXdMYWJlbDZFbGVtZW50KTsgYXhFbGVtZW50KCdjb250cm9sNicpLnRp
dGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNmInKSkgaXMgdHJ1ZQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVz
cy5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJl
Y3RuZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE5NmZkZjU5ZDI2OGI0MjQ1Y2Q4N2VmODlkNTViZTJj
NzllMGM1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0
bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJjb250YWluZXIiPgorCisg
IDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDEiIGZvcj0iY29udHJvbDEiPkxhYmVsIDE8L2xh
YmVsPgorICAgIDxpbnB1dCBpZD0iY29udHJvbDEiIHR5cGU9InRleHQiPgorICA8L2Rpdj4KKwor
ICA8ZGl2PgorICAgIDxsYWJlbCBpZD0ibGFiZWwyIj4KKyAgICAgIExhYmVsIDIKKyAgICAgIDxp
bnB1dCBpZD0iY29udHJvbDIiIHR5cGU9InRleHQiPgorICAgIDwvbGFiZWw+CisgIDwvZGl2Pgor
CisgIDxkaXY+CisgICAgPGxhYmVsIGlkPSJsYWJlbDMiPkxhYmVsIDM8L2xhYmVsPgorICAgIDxp
bnB1dCBpZD0iY29udHJvbDMiIHR5cGU9InRleHQiPgorICA8L2Rpdj4KKworICA8ZGl2PgorICAg
IDxpbnB1dCBpZD0iY29udHJvbDQiIHR5cGU9InRleHQiPgorICA8L2Rpdj4KKworICA8ZGl2Pgor
ICAgIDxsYWJlbCBpZD0ibGFiZWw1Ij4KKyAgICAgIExhYmVsIDUKKyAgICA8L2xhYmVsPgorICAg
IDxpbnB1dCBpZD0iY29udHJvbDUiIHR5cGU9InRleHQiPgorICA8L2Rpdj4KKworICA8ZGl2Pgor
ICAgIDxsYWJlbCBpZD0ibGFiZWw2YiIgZm9yPSJjb250cm9sNiI+TGFiZWwgNmI8L2xhYmVsPgor
ICAgIDxsYWJlbCBpZD0ibGFiZWw2YyIgZm9yPSJjb250cm9sNiI+TGFiZWwgNmM8L2xhYmVsPgor
ICAgIDxpbnB1dCBpZD0iY29udHJvbDYiIHR5cGU9InRleHQiPgorICA8L2Rpdj4KKzwvZGl2Pgor
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0
ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IHdvcmtzIGNvcnJlY3RseSBldmVuIHdoZW4gdGhpbmdz
IGNoYW5nZSBkeW5hbWljYWxseS4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRv
dy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OworCisgICAgZnVuY3Rpb24gaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KSB7CisgICAgICAg
IHZhciBsYWJlbDEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5
SWQoImxhYmVsMSIpOworICAgICAgICB2YXIgdGl0bGVVSUVsZW1lbnQgPSBheEVsZW1lbnQudGl0
bGVVSUVsZW1lbnQoKTsKKyAgICAgICAgaWYgKHRpdGxlVUlFbGVtZW50ID09IG51bGwpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0aXRsZVVJRWxlbWVudC5yb2xl
ID09IGxhYmVsMS5yb2xlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZUxhYmVsV2l0aElk
QW5kRm9yQXR0cmlidXRlKGlkLCBmb3JBdHRyaWJ1dGVWYWx1ZSkgeworICAgICAgICB2YXIgbGFi
ZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKKyAgICAgICAgbGFi
ZWxFbGVtZW50LmlkID0gaWQ7CisgICAgICAgIGxhYmVsRWxlbWVudC5zZXRBdHRyaWJ1dGUoImZv
ciIsIGZvckF0dHJpYnV0ZVZhbHVlKTsKKyAgICAgICAgbGFiZWxFbGVtZW50LmlubmVyVGV4dCA9
ICJMYWJlbCBmb3IgIiArIGZvckF0dHJpYnV0ZVZhbHVlOworICAgICAgICByZXR1cm4gbGFiZWxF
bGVtZW50OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlcGFyZW50Tm9kZUludG9Db250YWluZXIo
bm9kZSwgY29udGFpbmVyKSB7CisgICAgICAgIG5vZGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGls
ZChub2RlKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGF4RWxlbWVudChpZCkgeworICAgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKGlkKTsKKyAgICB9CisKKyAgICBzaG91
bGRCZSgiYXhFbGVtZW50KCdjb250cm9sMScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVs
ZW1lbnQoJ2xhYmVsMScpKSIsICJ0cnVlIik7CisKKyAgICBzaG91bGRCZSgiYXhFbGVtZW50KCdj
b250cm9sMicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMicpKSIs
ICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IGNoYW5naW5nIHRoZSAiZm9yIiBhdHRyaWJ1dGUgZHlu
YW1pY2FsbHkuCisgICAgc2hvdWxkQmUoImhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29u
dHJvbDMnKSkiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2xhYmVsMycpLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2NvbnRyb2wzJyk7IGF4RWxlbWVudCgn
Y29udHJvbDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDMnKSki
LCAidHJ1ZSIpOworCisgICAgLy8gVGVzdCB1bmF0dGFjaGVkIGxhYmVsIGVsZW1lbnQgdGhhdCdz
IHN1YnNlcXVlbnRseSBhdHRhY2hlZC4KKyAgICB2YXIgbGFiZWw0RWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CisgICAgbGFiZWw0RWxlbWVudC5pZCA9ICJsYWJlbDQi
OworICAgIGxhYmVsNEVsZW1lbnQuc2V0QXR0cmlidXRlKCJmb3IiLCAiY29udHJvbDQiKTsKKyAg
ICBsYWJlbDRFbGVtZW50LmlubmVyVGV4dCA9ICJMYWJlbCA0IjsKKyAgICBzaG91bGRCZSgidmFy
IGxhYmVsNEVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw0
JywgJ2NvbnRyb2w0Jyk7IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSki
LCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRh
aW5lcicpLmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQpOyBoYXNUaXRsZVVJRWxlbWVudChheEVs
ZW1lbnQoJ2NvbnRyb2w0JykpIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgiYXhFbGVtZW50KCdj
b250cm9sNCcpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNCcpKSIs
ICJ0cnVlIik7CisKKyAgICAvLyBUZXN0IHdoYXQgaGFwcGVucyB3aGVuIHRoZSBsYWJlbCBpcyBk
ZXRhY2hlZC4KKyAgICBzaG91bGRCZSgibGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92
ZUNoaWxkKGxhYmVsNEVsZW1lbnQpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRy
b2w0JykpIiwgImZhbHNlIik7CisKKyAgICAvLyBUZXN0IGxhYmVsIHRoYXQgZ2V0cyBhIGNvbnRy
b2wgcmVwYXJlbnRlZCBpbnRvIGl0LgorICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChh
eEVsZW1lbnQoJ2NvbnRyb2w1JykpIiwgImZhbHNlIik7CisKKyAgICBzaG91bGRCZSgicmVwYXJl
bnROb2RlSW50b0NvbnRhaW5lcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJvbDUnKSwg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNScpKTsgYXhFbGVtZW50KCdjb250cm9sNScp
LnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImF4RWxl
bWVudCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJl
bDUnKSkiLCAidHJ1ZSIpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBmaXJzdCBsYWJlbCBpcyBy
ZXR1cm5lZCwgZXZlbiBhcyBsYWJlbHMgYXJlIGFkZGVkIGFuZCByZW1vdmVkLgorICAgIHNob3Vs
ZEJlKCJheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxl
bWVudCgnbGFiZWw2YicpKSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoIm5ld0xhYmVsNkVsZW1l
bnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw2YScsICdjb250cm9s
NicpOyBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShuZXdMYWJlbDZFbGVtZW50LCBkb2N1bWVu
dC5ib2R5LmZpcnN0Q2hpbGQpOyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQo
KS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YScpKSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUo
ImRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobmV3TGFiZWw2RWxlbWVudCk7IGF4RWxlbWVudCgn
Y29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykp
IiwgInRydWUiKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5z
dHlsZS5kaXNwbGF5ID0gJ25vbmUnOworfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUt
dWktZWxlbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHkt
dGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZkOTg2OTk1ZTU5ZDM3
NzFlMDMzNDZiYzg3ZTUwMzNhYTRhMTc2OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3BlcmYvYWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDMgQEAKK1Rlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgb24gYW4gYWNjZXNzaWJpbGl0eSBl
bGVtZW50IHJ1bnMgaW4gYW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCitQQVNTCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BlcmYvYWNjZXNzaWJpbGl0eS10aXRsZS11aS1lbGVtZW50Lmh0bWwg
Yi9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE3OWI5MDA3Y2ZhZjFiMjA2ZTk2ZWFlMmFkMjJiZDAzYjk0ZmU4NzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxl
bWVudC5odG1sCkBAIC0wLDAgKzEsNTQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvbWFnbml0dWRlLXBlcmYuanMiPjwvc2NyaXB0
PgorPHNjcmlwdD4KKwordmFyIHBhcmVudENvbnRhaW5lcjsKK3ZhciBheENvbnRyb2w7CisKK2Z1
bmN0aW9uIGVuZHNXaXRoKHN0ciwgc3VmZml4KSB7CisgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3Ry
Lmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpID09IHN1ZmZpeDsKK30KKworZnVuY3Rpb24gc2V0dXAo
bWFnbml0dWRlKSB7CisgICAgaWYgKHBhcmVudENvbnRhaW5lcikKKyAgICAgICAgZG9jdW1lbnQu
Ym9keS5yZW1vdmVDaGlsZChwYXJlbnRDb250YWluZXIpOworICAgIHBhcmVudENvbnRhaW5lciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQocGFyZW50Q29udGFpbmVyKTsKKworICAgIHZhciBqdW5rQ29udGFpbmVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgcGFyZW50Q29udGFpbmVyLmFwcGVuZENoaWxk
KGp1bmtDb250YWluZXIpOworCisgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnbGFiZWwnKTsKKyAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjb250cm9sJyk7Cisg
ICAgbGFiZWwuaW5uZXJUZXh0ID0gJ0xhYmVsJzsKKyAgICBwYXJlbnRDb250YWluZXIuYXBwZW5k
Q2hpbGQobGFiZWwpOworCisgICAgdmFyIGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdpbnB1dCcpOworICAgIGNvbnRyb2wudHlwZSA9ICd0ZXh0JzsKKyAgICBjb250cm9sLmlkID0g
J2NvbnRyb2wnOworICAgIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChjb250cm9sKTsKKwor
ICAgIHBhcmVudENvbnRhaW5lci5vZmZzZXRMZWZ0OworICAgIGF4Q29udHJvbCA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgnY29udHJvbCcpOworCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMCAqIG1hZ25pdHVkZTsgKytpKSB7CisgICAgICAgIHZhciBk
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZGl2LmlubmVySFRN
TCA9ICI8cD48L3A+PHA+PC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPiI7CisgICAgICAgIGp1bmtD
b250YWluZXIuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICB9CisgICAgcGFyZW50Q29udGFpbmVyLm9m
ZnNldExlZnQ7Cit9CisKK2Z1bmN0aW9uIHRlc3QobWFnbml0dWRlKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAgICAgICBheENvbnRyb2wudGl0bGVVSUVsZW1lbnQo
KTsKKyAgICB9Cit9CisKK01hZ25pdHVkZS5kZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0aXRsZVVJ
RWxlbWVudCBvbiBhbiBhY2Nlc3NpYmlsaXR5IGVsZW1lbnQgcnVucyBpbiBhbW9ydGl6ZWQgY29u
c3RhbnQgdGltZS4iKTsKK01hZ25pdHVkZS5ydW4oc2V0dXAsIHRlc3QsIE1hZ25pdHVkZS5DT05T
VEFOVCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDVmYWI2YWI1OGQ2NTk0YTVkZGQ3
YmYyODg5ZTkxNTk1MGYyNzUxOWUuLmI5ZTM2MWFkZWNjNDNjM2EzYjcwZTFlMjU3Y2MzZjE4ZjYx
MmNjNmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBl
Y3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0
aW9ucwpAQCAtMTQwNywxNCArMTQwNywxMSBAQCBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0
eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vz
c2liaWxpdHkvbGVnZW5kLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmls
aXR5L2xpc3RzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L21l
ZGlhLWVsZW1lbnQuaHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkv
bm9uLWRhdGEtdGFibGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRtbCBbIFNraXAgXQog
Y3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbCBbIFNraXAgXQog
Y3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvcGx1Z2luLmh0bWwgWyBTa2lwIF0KIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1jaGVja2JveC1zaXplLmh0bWwg
WyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1ncm91
cC1tZW1iZXJzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3Jh
ZGlvLWJ1dHRvbi10aXRsZS1sYWJlbC5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwgWyBTa2lwIF0KIGNyYnVn
LmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWF0dHJpYnV0ZXMuaHRtbCBbIFNraXAgXQog
Y3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbC1zcGFucy5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1jZWxscy5odG1sIFsgU2tp
cCBdCkBAIC0xNDIzLDcgKzE0MjAsNiBAQCBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90
YWJsZS1vbmUtY2VsbC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0
eS90YWJsZS1zZWN0aW9ucy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJp
bGl0eS90YWJsZS13aXRoLWFyaWEtcm9sZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS90YWJsZS13aXRoLXJ1bGVzLmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8x
MDMyMiBhY2Nlc3NpYmlsaXR5L3RoLWFzLXRpdGxlLXVpLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RyYW5zZm9ybWVkLWVsZW1lbnQuaHRtbCBbIFNraXAgXQog
Y3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdmlzaWJsZS1lbGVtZW50cy5odG1sIFsgU2tp
cCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169562</attachid>
            <date>2012-10-18 23:53:24 -0700</date>
            <delta_ts>2012-10-19 00:29:34 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-97825-20121018235208.patch</filename>
            <type>text/plain</type>
            <size>19570</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxODIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI5NTYxYmVlYjczYjRj
ZGNlY2ZmMDFmZTIyNzExNzJjNzQ1ODQ1NS4uMjkzM2E5NWU1NTE4NzVlYWZmYWY1N2FmZGIwODQw
NThhYWJiNjk5ZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTEwLTE4ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIEFkZHMgYSBEb2N1bWVu
dE9yZGVyZWRNYXAgdG8gVHJlZVNjb3BlIHRoYXQgYWxsb3dzIGFjY2Vzc2liaWxpdHkgdG8KKyAg
ICAgICAgcXVpY2tseSBtYXAgZnJvbSBhbiBpZCB0byB0aGUgbGFiZWwgZm9yIHRoYXQgaWQuIFRo
aXMgc3BlZWRzIHVwCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlOjpsYWJlbEZvckVsZW1lbnQs
IHdoaWNoIHdhcyBhIGJvdHRsZW5lY2sgaW4gQ2hyb21pdW0KKyAgICAgICAgd2hlbiBhY2Nlc3Np
YmlsaXR5IHdhcyBvbi4KKworICAgICAgICBUZXN0czogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKKyAgICAgICAgICAgICAgIHBlcmYvYWNjZXNzaWJpbGl0
eS10aXRsZS11aS1lbGVtZW50Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRN
YXA6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1l
bnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFw
Lmg6CisgICAgICAgIChEb2N1bWVudE9yZGVyZWRNYXApOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1cGRhdGVMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6
CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6VHJlZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVTY29wZTo6ZGVzdHJveVRyZWVTY29wZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNj
b3BlOjphZGRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVTY29wZTo6cmVtb3ZlTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpsYWJl
bEVsZW1lbnRGb3JJZCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3Bl
OjpzaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKToKKwogMjAxMi0xMC0xOCAgQ2xhdWRp
byBTYWF2ZWRyYSAgPGNzYWF2ZWRyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEludmFs
aWQgcmVhZCBmcm9tIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmNsZWFyQnlGcmFtZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcAppbmRleCAwZjk0ODM4ZTdlYzU1YTk2OWVkYjFlODA1MDAwMzk3NWQ3ZWVjYzEzLi4y
YjVmODVjNGQ2YjZhNDIxNjQwMTIzNjg0OGU0Y2EzNDExYTE2MTVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNw
cApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCisjaW5jbHVkZSAiTGFiZWxhYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0
cmluZ3MuaCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0Lmgi
CkBAIC0xMDAxLDE0ICsxMDAyLDE4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omlz
R2VuZXJpY0ZvY3VzYWJsZUVsZW1lbnQoKSBjb25zdAogCiBIVE1MTGFiZWxFbGVtZW50KiBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0CiB7Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxhYmVsIik7Ci0gICAgdW5zaWduZWQgbGVuID0gbGlzdC0+
bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAg
ICAgIGlmIChsaXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgewotICAgICAgICAg
ICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50
Kj4obGlzdC0+aXRlbShpKSk7Ci0gICAgICAgICAgICBpZiAobGFiZWwtPmNvbnRyb2woKSA9PSBl
bGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbDsKLSAgICAgICAgfQorICAgIGlm
ICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpIHx8ICF0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5p
c0xhYmVsYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgIGlmICghaWQuaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGVsZW1lbnQtPnRyZWVT
Y29wZSgpLT5sYWJlbEVsZW1lbnRGb3JJZChpZCkpCisgICAgICAgICAgICByZXR1cm4gbGFiZWw7
CisgICAgfQorCisgICAgZm9yIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAg
ICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShsYWJlbFRhZykpCisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHBhcmVudCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCmluZGV4IDEy
OTdlNTEwMmZiNGU3OWNlM2RiMTEyMzU3MDIxZTNkZDA1NTRhNTEuLmJiZDhiM2IxNmVhZjQ5ZTAx
NmVkMDQ3NmIwYmI0YTllNzYwNjA0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwCkBAIC01NSw2ICs1NSwxMSBAQCBpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTG93
ZXJjYXNlZE1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBFbGVtZW50KiBlbGVtZW50KQog
ICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKG1hcFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRN
TE1hcEVsZW1lbnQqPihlbGVtZW50KS0+Z2V0TmFtZSgpLmxvd2VyKCkuaW1wbCgpID09IGtleTsK
IH0KIAoraW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKEF0b21pY1N0cmlu
Z0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFz
VGFnTmFtZShsYWJlbFRhZykgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGZvckF0dHIpLmltcGwo
KSA9PSBrZXk7Cit9CisKIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpjbGVhcigpCiB7CiAgICAg
bV9tYXAuY2xlYXIoKTsKQEAgLTE0OSw1ICsxNTQsOSBAQCBFbGVtZW50KiBEb2N1bWVudE9yZGVy
ZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqIGtl
eQogICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXksIHNjb3Bl
KTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorRWxlbWVudCogRG9jdW1lbnRPcmRlcmVk
TWFwOjpnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBsKiBrZXks
IGNvbnN0IFRyZWVTY29wZSogc2NvcGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldDxrZXlNYXRj
aGVzTGFiZWxGb3JBdHRyaWJ1dGU+KGtleSwgc2NvcGUpOworfQogCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFw
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKaW5kZXggN2QxMjY4
NmMzMzZhZDhmMGE2MTc0MzlmMTY4NDlmNjRjYzNiOWIxZC4uMWY5MDM5ZTYxNDNkMzg2MjhkZmEz
MDBhZTk4NmEwMWVlMzIzYzdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50T3JkZXJlZE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRN
YXAuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5
SWQoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwogICAgIEVsZW1l
bnQqIGdldEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29w
ZSopIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKEF0
b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKKyAgICBFbGVtZW50KiBn
ZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJl
ZVNjb3BlKikgY29uc3Q7CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKIApA
QCAtODAsNCArODEsMyBAQCBpbmxpbmUgYm9vbCBEb2N1bWVudE9yZGVyZWRNYXA6OmNvbnRhaW5z
TXVsdGlwbGUoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBEb2N1bWVudE9yZGVyZWRNYXBfaAotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKaW5kZXggMmFiY2VhZTliMzdiMmY1ODA1MDhkOTA4OTNhN2Y0MDVlMDYyOTgyMC4uNjlmNjY2
NmE1MDZhNDIyNTMwYTQxMTU1MTA4YWM0MDc2YTRlMzA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZvcm1Db2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKQEAgLTk1OSw2ICs5NjAsMTIgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9u
UmVxdWVzdCBFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW8KICAg
ICBpZiAoIW5hbWVWYWx1ZS5pc051bGwoKSkKICAgICAgICAgdXBkYXRlTmFtZShudWxsQXRvbSwg
bmFtZVZhbHVlKTsKIAorICAgIGlmIChoYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAgICAgICBU
cmVlU2NvcGUqIHNjb3BlID0gdHJlZVNjb3BlKCk7CisgICAgICAgIGlmIChzY29wZS0+c2hvdWxk
Q2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgdXBkYXRlTGFiZWwoc2Nv
cGUsIG51bGxBdG9tLCBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpKTsKKyAgICB9CisKICAgICBy
ZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KIApAQCAtOTgzLDYgKzk5MCwxMiBAQCB2b2lkIEVsZW1l
bnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQogICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVWYWx1ZSA9IGdldE5hbWVBdHRyaWJ1dGUoKTsKICAgICAg
ICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICB1cGRhdGVOYW1lKG5hbWVW
YWx1ZSwgbnVsbEF0b20pOworCisgICAgICAgIGlmIChoYXNUYWdOYW1lKGxhYmVsVGFnKSkgewor
ICAgICAgICAgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBpbnNlcnRpb25Qb2ludC0+dHJlZVNj
b3BlKCk7CisgICAgICAgICAgICBpZiAodHJlZVNjb3BlLT5zaG91bGRDYWNoZUxhYmVsc0J5Rm9y
QXR0cmlidXRlKCkpCisgICAgICAgICAgICAgICAgdXBkYXRlTGFiZWwodHJlZVNjb3BlLCBmYXN0
R2V0QXR0cmlidXRlKGZvckF0dHIpLCBudWxsQXRvbSk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBDb250YWluZXJOb2RlOjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CkBAIC0yMTI1LDEy
ICsyMTM4LDMzIEBAIGJvb2wgRWxlbWVudDo6aGFzTmFtZWROb2RlTWFwKCkgY29uc3QKIH0KICNl
bmRpZgogCit2b2lkIEVsZW1lbnQ6OnVwZGF0ZUxhYmVsKFRyZWVTY29wZSogc2NvcGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgb2xkRm9yQXR0cmlidXRlVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmV3Rm9yQXR0cmlidXRlVmFsdWUpCit7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUobGFiZWxUYWcp
KTsKKworICAgIGlmICghaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
b2xkRm9yQXR0cmlidXRlVmFsdWUgPT0gbmV3Rm9yQXR0cmlidXRlVmFsdWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghb2xkRm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAg
ICBzY29wZS0+cmVtb3ZlTGFiZWwob2xkRm9yQXR0cmlidXRlVmFsdWUsIHN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnQqPih0aGlzKSk7CisgICAgaWYgKCFuZXdGb3JBdHRyaWJ1dGVWYWx1ZS5p
c0VtcHR5KCkpCisgICAgICAgIHNjb3BlLT5hZGRMYWJlbChuZXdGb3JBdHRyaWJ1dGVWYWx1ZSwg
c3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHRoaXMpKTsKK30KKwogdm9pZCBFbGVtZW50
Ojp3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCiB7CiAg
ICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG5hbWUpKQogICAgICAgICB1cGRhdGVJZChvbGRWYWx1
ZSwgbmV3VmFsdWUpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpuYW1lQXR0cikK
ICAgICAgICAgdXBkYXRlTmFtZShvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIGVsc2UgaWYgKG5h
bWUgPT0gSFRNTE5hbWVzOjpmb3JBdHRyICYmIGhhc1RhZ05hbWUobGFiZWxUYWcpKSB7CisgICAg
ICAgIFRyZWVTY29wZSogc2NvcGUgPSB0cmVlU2NvcGUoKTsKKyAgICAgICAgaWYgKHNjb3BlLT5z
aG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkpCisgICAgICAgICAgICB1cGRhdGVMYWJl
bChzY29wZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQogICAgIGlmIChPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXA+IHJlY2lwaWVudHMgPSBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRlRm9y
QXR0cmlidXRlc011dGF0aW9uKHRoaXMsIG5hbWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggNThl
Mjk3ZDE1NzQ0NTk1Y2ExOGI5OWI0NTNmNmUzMDRhMDE0ZGEyMS4uNTE5YzUwZDc3ODkzMTUxNmZh
Zjg4MzBjNDYzYjI1MDIwMTViNmRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0zMTUsNiArMzE1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlSWQoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJ
ZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCk7CiAgICAgdm9pZCB1cGRhdGVJZChUcmVlU2Nv
cGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lk
KTsKICAgICB2b2lkIHVwZGF0ZU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5ld05hbWUpOworICAgIHZvaWQgdXBkYXRlTGFiZWwoVHJlZVNjb3Bl
KiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRGb3JBdHRyaWJ1dGVWYWx1ZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuZXdGb3JBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICB2b2lkIHJlbW92ZUNhY2hlZEhU
TUxDb2xsZWN0aW9uKEhUTUxDb2xsZWN0aW9uKiwgQ29sbGVjdGlvblR5cGUpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9UcmVlU2NvcGUuY3BwCmluZGV4IGFmZDM0M2ZiNjRjMWZkMzk1ZDBlN2UxMmJiMGQ3ZGU1MTBm
Y2NiYzAuLmVjNzIzZDNkYWQ3YTA4NThiYTBiMmQ3MDRiZjliYTJjODBhNmNhM2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVy
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklkVGFyZ2V0
T2JzZXJ2ZXJSZWdpc3RyeS5oIgpAQCAtNTUsNiArNTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogVHJlZVNjb3BlOjpUcmVlU2NvcGUoQ29udGFpbmVyTm9kZSogcm9vdE5vZGUpCiAg
ICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwgbV9wYXJlbnRUcmVlU2NvcGUoMCkKKyAg
ICAsIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZShmYWxzZSkKICAgICAsIG1faWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5KElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6Y3JlYXRlKCkp
CiB7CiAgICAgQVNTRVJUKHJvb3ROb2RlKTsKQEAgLTcyLDYgKzc0LDcgQEAgdm9pZCBUcmVlU2Nv
cGU6OmRlc3Ryb3lUcmVlU2NvcGVEYXRhKCkKIHsKICAgICBtX2VsZW1lbnRzQnlJZC5jbGVhcigp
OwogICAgIG1faW1hZ2VNYXBzQnlOYW1lLmNsZWFyKCk7CisgICAgbV9sYWJlbHNCeUZvckF0dHJp
YnV0ZS5jbGVhcigpOwogfQogCiB2b2lkIFRyZWVTY29wZTo6c2V0UGFyZW50VHJlZVNjb3BlKFRy
ZWVTY29wZSogbmV3UGFyZW50U2NvcGUpCkBAIC0xNDQsNiArMTQ3LDM2IEBAIEhUTUxNYXBFbGVt
ZW50KiBUcmVlU2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudCo+KG1faW1hZ2VNYXBzQnlOYW1lLmdl
dEVsZW1lbnRCeU1hcE5hbWUoQXRvbWljU3RyaW5nKG5hbWUpLmltcGwoKSwgdGhpcykpOwogfQog
Cit2b2lkIFRyZWVTY29wZTo6YWRkTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1
dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX2xhYmVsc0J5Rm9y
QXR0cmlidXRlLmFkZChmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIGVsZW1lbnQpOworfQorCit2
b2lkIFRyZWVTY29wZTo6cmVtb3ZlTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1
dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX2xhYmVsc0J5Rm9y
QXR0cmlidXRlLnJlbW92ZShmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIGVsZW1lbnQpOworfQor
CitIVE1MTGFiZWxFbGVtZW50KiBUcmVlU2NvcGU6OmxhYmVsRWxlbWVudEZvcklkKGNvbnN0IEF0
b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUpCit7CisgICAgaWYgKCFtX3Nob3VsZENhY2hl
TGFiZWxzQnlGb3JBdHRyaWJ1dGUpIHsKKyAgICAgICAgbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9y
QXR0cmlidXRlID0gdHJ1ZTsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGUoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICAgICAgaWYg
KG5vZGUtPmhhc1RhZ05hbWUobGFiZWxUYWcpKSB7CisgICAgICAgICAgICAgICAgSFRNTExhYmVs
RWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obm9kZSk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JWYWx1ZSA9IGxhYmVsLT5mYXN0
R2V0QXR0cmlidXRlKGZvckF0dHIpOworICAgICAgICAgICAgICAgIGlmICghZm9yVmFsdWUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBhZGRMYWJlbChmb3JWYWx1ZSwgbGFiZWwpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZvckF0dHJpYnV0ZVZh
bHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTExhYmVsRWxlbWVudCo+KG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUuZ2V0RWxlbWVudEJ5
TGFiZWxGb3JBdHRyaWJ1dGUoZm9yQXR0cmlidXRlVmFsdWUuaW1wbCgpLCB0aGlzKSk7Cit9CisK
IERPTVNlbGVjdGlvbiogVHJlZVNjb3BlOjpnZXRTZWxlY3Rpb24oKSBjb25zdAogewogICAgIGlm
ICghcm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UcmVlU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaApp
bmRleCBkOTc1OGIwMjhlNGQ0NTY3ODRmNDU5MGUwOTBlNWEyNTdkMjk0NWYzLi45Y2FlNTRkZThk
Zjc3NjIwNDk3MzQ1NTEyNDQ3ZGY0MjJlZDQ5NGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCkBA
IC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRhaW5lck5vZGU7
CiBjbGFzcyBET01TZWxlY3Rpb247CiBjbGFzcyBFbGVtZW50OworY2xhc3MgSFRNTExhYmVsRWxl
bWVudDsKIGNsYXNzIEhUTUxNYXBFbGVtZW50OwogY2xhc3MgSWRUYXJnZXRPYnNlcnZlclJlZ2lz
dHJ5OwogY2xhc3MgTm9kZTsKQEAgLTYyLDYgKzYzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
bW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50Kik7CiAgICAgSFRNTE1hcEVsZW1lbnQqIGdldElt
YWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdDsKIAorICAgIC8vIEZvciBhY2Nlc3NpYmls
aXR5LgorICAgIGJvb2wgc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZTsgfQorICAgIHZvaWQgYWRk
TGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxl
bWVudCopOworICAgIHZvaWQgcmVtb3ZlTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRy
aWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCopOworICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxh
YmVsRWxlbWVudEZvcklkKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUpOwor
CiAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIC8vIEZpbmQg
Zmlyc3QgYW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuCkBAIC05NCw2ICsxMDEsOSBAQCBwcml2
YXRlOgogICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBEb2N1bWVu
dE9yZGVyZWRNYXAgbV9pbWFnZU1hcHNCeU5hbWU7CiAKKyAgICBEb2N1bWVudE9yZGVyZWRNYXAg
bV9sYWJlbHNCeUZvckF0dHJpYnV0ZTsKKyAgICBib29sIG1fc2hvdWxkQ2FjaGVMYWJlbHNCeUZv
ckF0dHJpYnV0ZTsKKwogICAgIE93blB0cjxJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk+IG1faWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5OwogCiAgICAgbXV0YWJsZSBSZWZQdHI8RE9NU2VsZWN0aW9u
PiBtX3NlbGVjdGlvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCBjNGNmMjdkNWM1NTBmMTM2MGI2ODhiMGMzNzc1ODI0M2I5NjRjOTYzLi40Yjdl
ZTJkYmRkZmQyOTE0NjdkYzk2YmFhNTFmYTUyY2M2NzIxNjUzIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTAt
MTggIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6
IGxhYmVsRm9yRWxlbWVudCBpcyBzbG93IHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIERPTSBlbGVt
ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc4
MjUKKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgSW1wbGVt
ZW50IHRpdGxlVUlFbGVtZW50IGluIHRoZSBjaHJvbWl1bSBwb3J0IG9mIERSVCwgYW5kCisgICAg
ICAgIGZpeCBnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQgc28gdGhhdCBpdCBlbnN1cmVzIHRoZSBi
YWNraW5nIHN0b3JlCisgICAgICAgIGlzIHVwLXRvLWRhdGUuCisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEFjY2Vzc2libGVF
bGVtZW50QnlJZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayk6CisKIDIwMTItMTAtMTggIEpv
Y2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBTaW1wbGlmeSBUZXN0SW50ZXJmYWNlcywgYXMgdGhpcyBjbGFzcyB3b24ndCBiZSBkaXJlY3Rs
eSBleHBvc2VkIGluIHRoZSBUZXN0UnVubmVyIGxpYnJhcnkncyBpbnRlcmZhY2UKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCmluZGV4IDg5ZDVk
NTg3NzBjNjFkMWFhZTkxNjBiYTM0ZTQzNjc2NTE2YjA3YzIuLjBmZTRjMWY5OWU0NTk2ZDJkOGQ3
NDc4YjIxMWYzOWU2NWJmZjM3NjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckNocm9taXVtLmNwcApAQCAtMTE3LDYgKzExNyw5IEBAIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5
SWQoY29uc3QKICAgICBpZiAobV9yb290RWxlbWVudC5pc051bGwoKSkKICAgICAgICAgbV9yb290
RWxlbWVudCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpOwogCisgICAgaWYgKCFt
X3Jvb3RFbGVtZW50LnVwZGF0ZUJhY2tpbmdTdG9yZUFuZENoZWNrVmFsaWRpdHkoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vy
c2l2ZShtX3Jvb3RFbGVtZW50LCBXZWJTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCmlu
ZGV4IGQ2MDgyMmJlOGYyM2YxMGUzYmM3NmEzY2FlMWRlZGE4YTg4ZDY2MWYuLjIxNTdkZGI2OWQ4
MDIzYTY0ODE5YmYxNWIwOTc4Yjk2ZTliNzA4NGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVt
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKQEAgLTc3NCw3ICs3NzQsMTMgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93Q2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJ
RWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
IG9iaiA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS50aXRsZVVJRWxlbWVudCgpOworICAgIGlmIChv
YmouaXNOdWxsKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICByZXN1bHQtPnNldCgqKG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUob2Jq
KS0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCZhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2ZjNkZDg2NzkyNjExYmM1MTgyNGY2
OTBmZjQ5YzA0ZWY1OGRhMjUyLi42ZTIxODNhZDY1MjRiMTNjYmY1Njg3NGRjZDlhMTI1ZTEzNTA2
YzE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMTAtMTggIERvbWluaWMgTWF6em9uaSAg
PGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IGxhYmVsRm9yRWxlbWVudCBpcyBz
bG93IHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIERPTSBlbGVtZW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc4MjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgQWRkcyB0d28gbmV3IHRlc3RzIGZvciB0aXRs
ZVVJRWxlbWVudCB0aGF0IHJ1biBvbiBib3RoIE1hYyBhbmQKKyAgICAgICAgQ2hyb21pdW0uIE9u
ZSB0ZXN0cyBjb3JyZWN0bmVzcywgdGhlIG90aGVyIHRlc3RzIHNwZWVkLgorCisgICAgICAgIEZp
eGVzIG9uZSB0ZXN0IHNvIHRoYXQgaXQgcGFzc2VzIG9uIENocm9taXVtLgorICAgICAgICBFbmFi
bGVzIG90aGVyIHRlc3RzIHRoYXQgbm93IHBhc3Mgb24gQ2hyb21pdW0uCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRtbDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5l
c3MuaHRtbDogQWRkZWQuCisgICAgICAgICogcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVs
ZW1lbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwZXJmL2FjY2Vzc2liaWxpdHkt
dGl0bGUtdWktZWxlbWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEyLTEwLTE4ICBEaXJrIFByYW5rZSAgPGRwcmFua2VA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gZml4IGxpbnQgZXJyb3JzL2NvbmZs
aWN0cyBpbiBNTCBUZXN0RXhwZWN0YXRpb25zCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRtbCBiL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCmluZGV4IDE3MGU1NzAx
YTA0NTg1ZGMwMWU4NmFjNjc5YjFlMzQzMDgxNjNmMTkuLjEyZjgxZTMzOGRjYThiNWYxNGYwMWI4
ODI2OGNkZjZiMjlmZjIxNWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
c2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCkBAIC0yMSw4ICsyMSw3IEBACiAg
ICAgICAgICAgICBwYXNzLmZvY3VzKCk7CiAgICAgICAgICAgICB2YXIgdGl0bGVVSUVsZW1lbnQg
PSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC50aXRsZVVJRWxlbWVudCgp
OwogICAgICAgICAgICAgdmFyIHRpdGxlVGV4dCA9IHRpdGxlVUlFbGVtZW50LmNoaWxkQXRJbmRl
eCgwKTsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gIkFYVmFsdWU6IFBhc3N3b3JkIjsKLSAg
ICAgICAgICAgIGlmICh0aXRsZVRleHQuYWxsQXR0cmlidXRlcygpLmluZGV4T2YocGF0dGVybikg
IT0gLTEpIHsKKyAgICAgICAgICAgIGlmICh0aXRsZVRleHQuc3RyaW5nVmFsdWUgPT0gIkFYVmFs
dWU6IFBhc3N3b3JkIikgewogICAgICAgICAgICAgICAgIHJlc3VsdC5pbm5lclRleHQgKz0gIlRl
c3QgcGFzc2VkXG4iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCAwZmMyYjQ0
M2RmZjBjZTU0Zjc3MzI1Yjc3NDY0NzM3ZjdiYzM2Yzg4Li5kY2E5OThmNTBkMjFkY2UxMjdkZDAx
MTg5ZjE2YzY0MzQwOTRiMDVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE0MDcsMTQgKzE0MDcsMTEgQEAgY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNv
bS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2xlZ2VuZC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAz
MjIgYWNjZXNzaWJpbGl0eS9saXN0cy5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS9tZWRpYS1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBh
Y2Nlc3NpYmlsaXR5L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsYWNlaG9sZGVyLmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3BsdWdpbi5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tY2hlY2ti
b3gtc2l6ZS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRp
by1idXR0b24tZ3JvdXAtbWVtYmVycy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS9yYWRpby1idXR0b24tdGl0bGUtbGFiZWwuaHRtbCBbIFNraXAgXQotY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIFsg
U2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90YWJsZS1hdHRyaWJ1dGVzLmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWNlbGwtc3Bh
bnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2Vs
bHMuaHRtbCBbIFNraXAgXQpAQCAtMTQyMyw3ICsxNDIwLDYgQEAgY3JidWcuY29tLzEwMzIyIGFj
Y2Vzc2liaWxpdHkvdGFibGUtb25lLWNlbGwuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIy
IGFjY2Vzc2liaWxpdHkvdGFibGUtc2VjdGlvbnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEw
MzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtd2l0aC1hcmlhLXJvbGUuaHRtbCBbIFNraXAgXQogY3Ji
dWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtd2l0aC1ydWxlcy5odG1sIFsgU2tpcCBd
Ci1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90aC1hcy10aXRsZS11aS5odG1sIFsgU2tp
cCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS90cmFuc2Zvcm1lZC1lbGVtZW50Lmh0
bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L3Zpc2libGUtZWxlbWVu
dHMuaHRtbCBbIFNraXAgXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169566</attachid>
            <date>2012-10-19 00:29:38 -0700</date>
            <delta_ts>2012-10-19 00:33:35 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-97825-20121019002822.patch</filename>
            <type>text/plain</type>
            <size>28723</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxODY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjc4NTM5YzVhOGZlOGM2
YzBiNjFmMjIzMTc2YWE2OWRmZTUxYWYyYy4uN2E4ZmU4NGJiZDU3ZmQ0OWIwYWY5ZTg0YjFkZTQ2
Yjc0N2QxMTYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTEwLTE4ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZv
ckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIEFkZHMgYSBEb2N1bWVu
dE9yZGVyZWRNYXAgdG8gVHJlZVNjb3BlIHRoYXQgYWxsb3dzIGFjY2Vzc2liaWxpdHkgdG8KKyAg
ICAgICAgcXVpY2tseSBtYXAgZnJvbSBhbiBpZCB0byB0aGUgbGFiZWwgZm9yIHRoYXQgaWQuIFRo
aXMgc3BlZWRzIHVwCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlOjpsYWJlbEZvckVsZW1lbnQs
IHdoaWNoIHdhcyBhIGJvdHRsZW5lY2sgaW4gQ2hyb21pdW0KKyAgICAgICAgd2hlbiBhY2Nlc3Np
YmlsaXR5IHdhcyBvbi4KKworICAgICAgICBUZXN0czogYWNjZXNzaWJpbGl0eS90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwKKyAgICAgICAgICAgICAgIHBlcmYvYWNjZXNzaWJpbGl0
eS10aXRsZS11aS1lbGVtZW50Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRN
YXA6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1l
bnRCeUxhYmVsRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFw
Lmg6CisgICAgICAgIChEb2N1bWVudE9yZGVyZWRNYXApOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1cGRhdGVMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OndpbGxNb2RpZnlBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6
CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6VHJlZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVTY29wZTo6ZGVzdHJveVRyZWVTY29wZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNj
b3BlOjphZGRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVTY29wZTo6cmVtb3ZlTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpsYWJl
bEVsZW1lbnRGb3JJZCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3Bl
OjpzaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKToKKwogMjAxMi0xMC0xOSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtWOF0gRE9NT2JqZWN0VmlzaXRv
ciBkb2VzIG5vdGhpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggMGY5NDgzOGU3ZWM1NWE5NjllZGIx
ZTgwNTAwMDM5NzVkN2VlY2MxMy4uMmI1Zjg1YzRkNmI2YTQyMTY0MDEyMzY4NDhlNGNhMzQxMWEx
NjE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkxhYmVsYWJsZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJOb2RlTGlzdC5oIgpAQCAtMTAwMSwxNCArMTAwMiwxOCBAQCBib29sIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojppc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkgY29uc3QKIAog
SFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIFJlZlB0cjxOb2RlTGlzdD4gbGlzdCA9
IGVsZW1lbnQtPmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpOwotICAg
IHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW47IGkrKykgewotICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+aGFzVGFnTmFtZShs
YWJlbFRhZykpIHsKLSAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gc3RhdGlj
X2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpOwotICAgICAgICAgICAgaWYg
KGxhYmVsLT5jb250cm9sKCkgPT0gZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFi
ZWw7Ci0gICAgICAgIH0KKyAgICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSB8fCAhdG9I
VE1MRWxlbWVudChlbGVtZW50KS0+aXNMYWJlbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsK
KyAgICBpZiAoIWlkLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoSFRNTExhYmVsRWxlbWVudCog
bGFiZWwgPSBlbGVtZW50LT50cmVlU2NvcGUoKS0+bGFiZWxFbGVtZW50Rm9ySWQoaWQpKQorICAg
ICAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIGZvciAoRWxlbWVudCogcGFyZW50
ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUobGFiZWxUYWcp
KQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihwYXJl
bnQpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRP
cmRlcmVkTWFwLmNwcAppbmRleCAxMjk3ZTUxMDJmYjRlNzljZTNkYjExMjM1NzAyMWUzZGQwNTU0
YTUxLi5iYmQ4YjNiMTZlYWY0OWUwMTZlZDA0NzZiMGJiNGE5ZTc2MDYwNDUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcApAQCAtNTUsNiArNTUsMTEgQEAgaW5s
aW5lIGJvb2wga2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKEF0b21pY1N0cmluZ0ltcGwqIGtl
eSwgRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShtYXBU
YWcpICYmIHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50Kj4oZWxlbWVudCktPmdldE5hbWUoKS5s
b3dlcigpLmltcGwoKSA9PSBrZXk7CiB9CiAKK2lubGluZSBib29sIGtleU1hdGNoZXNMYWJlbEZv
ckF0dHJpYnV0ZShBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUobGFiZWxUYWcpICYmIGVsZW1lbnQtPmdldEF0
dHJpYnV0ZShmb3JBdHRyKS5pbXBsKCkgPT0ga2V5OworfQorCiB2b2lkIERvY3VtZW50T3JkZXJl
ZE1hcDo6Y2xlYXIoKQogewogICAgIG1fbWFwLmNsZWFyKCk7CkBAIC0xNDksNSArMTU0LDkgQEAg
RWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNhc2VkTWFwTmFt
ZShBdG9taWNTdHJpbmdJbXBsKiBrZXkKICAgICByZXR1cm4gZ2V0PGtleU1hdGNoZXNMb3dlcmNh
c2VkTWFwTmFtZT4oa2V5LCBzY29wZSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK0Vs
ZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUo
QXRvbWljU3RyaW5nSW1wbCoga2V5LCBjb25zdCBUcmVlU2NvcGUqIHNjb3BlKSBjb25zdAorewor
ICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXksIHNjb3BlKTsK
K30KIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5oCmluZGV4IDdkMTI2ODZjMzM2YWQ4ZjBhNjE3NDM5ZjE2ODQ5ZjY0Y2MzYjliMWQu
LjFmOTAzOWU2MTQzZDM4NjI4ZGZhMzAwYWU5ODZhMDFlZTMyM2M3ZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAg
IEVsZW1lbnQqIGdldEVsZW1lbnRCeUlkKEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2Nv
cGUqKSBjb25zdDsKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlNYXBOYW1lKEF0b21pY1N0cmlu
Z0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50KiBnZXRFbGVtZW50
QnlMb3dlcmNhc2VkTWFwTmFtZShBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikg
Y29uc3Q7CisgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoQXRvbWlj
U3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwogCiAgICAgdm9pZCBjaGVja0Nv
bnNpc3RlbmN5KCkgY29uc3Q7CiAKQEAgLTgwLDQgKzgxLDMgQEAgaW5saW5lIGJvb2wgRG9jdW1l
bnRPcmRlcmVkTWFwOjpjb250YWluc011bHRpcGxlKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25z
dAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRG9jdW1lbnRPcmRlcmVkTWFw
X2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDJhYmNlYWU5YjM3YjJmNTgwNTA4ZDkwODkz
YTdmNDA1ZTA2Mjk4MjAuLjY5ZjY2NjZhNTA2YTQyMjUzMGE0MTE1NTEwOGFjNDA3NmE0ZTMwNzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhU
TUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCkBAIC05NTksNiArOTYwLDEyIEBAIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRh
aW5lck5vZGUqIGluc2VydGlvCiAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpCiAgICAgICAg
IHVwZGF0ZU5hbWUobnVsbEF0b20sIG5hbWVWYWx1ZSk7CiAKKyAgICBpZiAoaGFzVGFnTmFtZShs
YWJlbFRhZykpIHsKKyAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IHRyZWVTY29wZSgpOworICAg
ICAgICBpZiAoc2NvcGUtPnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSkKKyAgICAg
ICAgICAgIHVwZGF0ZUxhYmVsKHNjb3BlLCBudWxsQXRvbSwgZmFzdEdldEF0dHJpYnV0ZShmb3JB
dHRyKSk7CisgICAgfQorCiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiB9CiAKQEAgLTk4Myw2
ICs5OTAsMTIgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBpbnNl
cnRpb25Qb2ludCkKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lVmFsdWUgPSBnZXRO
YW1lQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghbmFtZVZhbHVlLmlzTnVsbCgpKQogICAgICAg
ICAgICAgdXBkYXRlTmFtZShuYW1lVmFsdWUsIG51bGxBdG9tKTsKKworICAgICAgICBpZiAoaGFz
VGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0g
aW5zZXJ0aW9uUG9pbnQtPnRyZWVTY29wZSgpOworICAgICAgICAgICAgaWYgKHRyZWVTY29wZS0+
c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIHVwZGF0
ZUxhYmVsKHRyZWVTY29wZSwgZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKSwgbnVsbEF0b20pOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb20oaW5zZXJ0
aW9uUG9pbnQpOwpAQCAtMjEyNSwxMiArMjEzOCwzMyBAQCBib29sIEVsZW1lbnQ6Omhhc05hbWVk
Tm9kZU1hcCgpIGNvbnN0CiB9CiAjZW5kaWYKIAordm9pZCBFbGVtZW50Ojp1cGRhdGVMYWJlbChU
cmVlU2NvcGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJpYnV0ZVZhbHVl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0ZvckF0dHJpYnV0ZVZhbHVlKQoreworICAgIEFTU0VS
VChoYXNUYWdOYW1lKGxhYmVsVGFnKSk7CisKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG9sZEZvckF0dHJpYnV0ZVZhbHVlID09IG5ld0ZvckF0dHJp
YnV0ZVZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW9sZEZvckF0dHJpYnV0ZVZh
bHVlLmlzRW1wdHkoKSkKKyAgICAgICAgc2NvcGUtPnJlbW92ZUxhYmVsKG9sZEZvckF0dHJpYnV0
ZVZhbHVlLCBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4odGhpcykpOworICAgIGlmICgh
bmV3Rm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBzY29wZS0+YWRkTGFiZWwo
bmV3Rm9yQXR0cmlidXRlVmFsdWUsIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPih0aGlz
KSk7Cit9CisKIHZvaWQgRWxlbWVudDo6d2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5ld1ZhbHVlKQogewogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkKICAg
ICAgICAgdXBkYXRlSWQob2xkVmFsdWUsIG5ld1ZhbHVlKTsKICAgICBlbHNlIGlmIChuYW1lID09
IEhUTUxOYW1lczo6bmFtZUF0dHIpCiAgICAgICAgIHVwZGF0ZU5hbWUob2xkVmFsdWUsIG5ld1Zh
bHVlKTsKKyAgICBlbHNlIGlmIChuYW1lID09IEhUTUxOYW1lczo6Zm9yQXR0ciAmJiBoYXNUYWdO
YW1lKGxhYmVsVGFnKSkgeworICAgICAgICBUcmVlU2NvcGUqIHNjb3BlID0gdHJlZVNjb3BlKCk7
CisgICAgICAgIGlmIChzY29wZS0+c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpKQor
ICAgICAgICAgICAgdXBkYXRlTGFiZWwoc2NvcGUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAg
fQogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBpZiAoT3duUHRyPE11dGF0
aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiByZWNpcGllbnRzID0gTXV0YXRpb25PYnNlcnZlcklu
dGVyZXN0R3JvdXA6OmNyZWF0ZUZvckF0dHJpYnV0ZXNNdXRhdGlvbih0aGlzLCBuYW1lKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCmluZGV4IDU4ZTI5N2QxNTc0NDU5NWNhMThiOTliNDUzZjZlMzA0YTAxNGRh
MjEuLjUxOWM1MGQ3Nzg5MzE1MTZmYWY4ODMwYzQ2M2IyNTAyMDE1YjZkZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaApAQCAtMzE1LDYgKzMxNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUlkKGNv
bnN0IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpOwogICAg
IHZvaWQgdXBkYXRlSWQoVHJlZVNjb3BlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29u
c3QgQXRvbWljU3RyaW5nJiBuZXdJZCk7CiAgICAgdm9pZCB1cGRhdGVOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKTsKKyAgICB2b2lk
IHVwZGF0ZUxhYmVsKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkRm9yQXR0cmli
dXRlVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3Rm9yQXR0cmlidXRlVmFsdWUpOwogCiAg
ICAgdm9pZCByZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiosIENvbGxl
Y3Rpb25UeXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAppbmRleCBhZmQzNDNmYjY0YzFm
ZDM5NWQwZTdlMTJiYjBkN2RlNTEwZmNjYmMwLi5lYzcyM2QzZGFkN2EwODU4YmEwYjJkNzA0YmY5
YmEyYzgwYTZjYTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJJZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaCIKQEAgLTU1LDYgKzU2LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFRyZWVTY29wZTo6VHJlZVNjb3BlKENvbnRh
aW5lck5vZGUqIHJvb3ROb2RlKQogICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKICAgICAsIG1f
cGFyZW50VHJlZVNjb3BlKDApCisgICAgLCBtX3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1
dGUoZmFsc2UpCiAgICAgLCBtX2lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeShJZFRhcmdldE9ic2Vy
dmVyUmVnaXN0cnk6OmNyZWF0ZSgpKQogewogICAgIEFTU0VSVChyb290Tm9kZSk7CkBAIC03Miw2
ICs3NCw3IEBAIHZvaWQgVHJlZVNjb3BlOjpkZXN0cm95VHJlZVNjb3BlRGF0YSgpCiB7CiAgICAg
bV9lbGVtZW50c0J5SWQuY2xlYXIoKTsKICAgICBtX2ltYWdlTWFwc0J5TmFtZS5jbGVhcigpOwor
ICAgIG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUuY2xlYXIoKTsKIH0KIAogdm9pZCBUcmVlU2NvcGU6
OnNldFBhcmVudFRyZWVTY29wZShUcmVlU2NvcGUqIG5ld1BhcmVudFNjb3BlKQpAQCAtMTQ0LDYg
KzE0NywzNiBAQCBIVE1MTWFwRWxlbWVudCogVHJlZVNjb3BlOjpnZXRJbWFnZU1hcChjb25zdCBT
dHJpbmcmIHVybCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnQq
PihtX2ltYWdlTWFwc0J5TmFtZS5nZXRFbGVtZW50QnlNYXBOYW1lKEF0b21pY1N0cmluZyhuYW1l
KS5pbXBsKCksIHRoaXMpKTsKIH0KIAordm9pZCBUcmVlU2NvcGU6OmFkZExhYmVsKGNvbnN0IEF0
b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqIGVsZW1lbnQp
Cit7CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5hZGQoZm9yQXR0cmlidXRlVmFsdWUuaW1w
bCgpLCBlbGVtZW50KTsKK30KKwordm9pZCBUcmVlU2NvcGU6OnJlbW92ZUxhYmVsKGNvbnN0IEF0
b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqIGVsZW1lbnQp
Cit7CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS5yZW1vdmUoZm9yQXR0cmlidXRlVmFsdWUu
aW1wbCgpLCBlbGVtZW50KTsKK30KKworSFRNTExhYmVsRWxlbWVudCogVHJlZVNjb3BlOjpsYWJl
bEVsZW1lbnRGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmIGZvckF0dHJpYnV0ZVZhbHVlKQorewor
ICAgIGlmICghbV9zaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKSB7CisgICAgICAgIG1f
c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSA9IHRydWU7CisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAg
ICAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExh
YmVsRWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Zm9yVmFsdWUgPSBsYWJlbC0+ZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWZvclZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkTGFi
ZWwoZm9yVmFsdWUsIGxhYmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChmb3JBdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihtX2xhYmVsc0J5Rm9y
QXR0cmlidXRlLmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKGZvckF0dHJpYnV0ZVZhbHVl
LmltcGwoKSwgdGhpcykpOworfQorCiBET01TZWxlY3Rpb24qIFRyZWVTY29wZTo6Z2V0U2VsZWN0
aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIXJvb3ROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlLmgKaW5kZXggZDk3NThiMDI4ZTRkNDU2Nzg0ZjQ1OTBlMDkwZTVh
MjU3ZDI5NDVmMy4uOWNhZTU0ZGU4ZGY3NzYyMDQ5NzM0NTUxMjQ0N2RmNDIyZWQ0OTRiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGUuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRE9NU2VsZWN0aW9uOwogY2xhc3MgRWxlbWVu
dDsKK2NsYXNzIEhUTUxMYWJlbEVsZW1lbnQ7CiBjbGFzcyBIVE1MTWFwRWxlbWVudDsKIGNsYXNz
IElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTsKIGNsYXNzIE5vZGU7CkBAIC02Miw2ICs2MywxMiBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOwogICAg
IEhUTUxNYXBFbGVtZW50KiBnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAK
KyAgICAvLyBGb3IgYWNjZXNzaWJpbGl0eS4KKyAgICBib29sIHNob3VsZENhY2hlTGFiZWxzQnlG
b3JBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRy
aWJ1dGU7IH0KKyAgICB2b2lkIGFkZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmli
dXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUxhYmVsKGNvbnN0
IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqKTsKKyAg
ICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbEVsZW1lbnRGb3JJZChjb25zdCBBdG9taWNTdHJpbmcm
IGZvckF0dHJpYnV0ZVZhbHVlKTsKKwogICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCkg
Y29uc3Q7CiAKICAgICAvLyBGaW5kIGZpcnN0IGFuY2hvciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpA
QCAtOTQsNiArMTAxLDkgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9lbGVt
ZW50c0J5SWQ7CiAgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1faW1hZ2VNYXBzQnlOYW1lOwogCisg
ICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGU7CisgICAgYm9vbCBt
X3Nob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGU7CisKICAgICBPd25QdHI8SWRUYXJnZXRP
YnNlcnZlclJlZ2lzdHJ5PiBtX2lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTsKIAogICAgIG11dGFi
bGUgUmVmUHRyPERPTVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDZiZGQ5OTM3NTg0MTY4NTc4YzgxODUy
ZTJmNjUwNzRkN2ZiNGY0OC4uZDI0ODhjYjY5MjMwN2Y3ZTMzZTk2ODBjMGIxNzYyMGVjMGQ4MmY0
MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE5IEBACisyMDEyLTEwLTE4ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29n
bGUuY29tPgorCisgICAgICAgIEFYOiBsYWJlbEZvckVsZW1lbnQgaXMgc2xvdyB3aGVuIHRoZXJl
IGFyZSBhIGxvdCBvZiBET00gZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk3ODI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBO
aXdhLgorCisgICAgICAgIEltcGxlbWVudCB0aXRsZVVJRWxlbWVudCBpbiB0aGUgY2hyb21pdW0g
cG9ydCBvZiBEUlQsIGFuZAorICAgICAgICBmaXggZ2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkIHNv
IHRoYXQgaXQgZW5zdXJlcyB0aGUgYmFja2luZyBzdG9yZQorICAgICAgICBpcyB1cC10by1kYXRl
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNw
cDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50Q2FsbGJh
Y2spOgorCiAyMDEyLTEwLTE4ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIG1ha2UgbW92ZV9vdmVyd3JpdHRlbl9iYXNlbGluZXNfdG8gd29yayBhZ2FpbiB3
aGlsZSByZWJhc2VsaW5pbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKaW5kZXggODlkNWQ1ODc3MGM2MWQxYWFlOTE2MGJhMzRl
NDM2NzY1MTZiMDdjMi4uMGZlNGMxZjk5ZTQ1OTZkMmQ4ZDc0NzhiMjExZjM5ZTY1YmZmMzc2OCAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJv
bWl1bS5jcHAKQEAgLTExNyw2ICsxMTcsOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKGNvbnN0CiAgICAg
aWYgKG1fcm9vdEVsZW1lbnQuaXNOdWxsKCkpCiAgICAgICAgIG1fcm9vdEVsZW1lbnQgPSBtX3dl
YlZpZXctPmFjY2Vzc2liaWxpdHlPYmplY3QoKTsKIAorICAgIGlmICghbV9yb290RWxlbWVudC51
cGRhdGVCYWNraW5nU3RvcmVBbmRDaGVja1ZhbGlkaXR5KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgcmV0dXJuIGZpbmRBY2Nlc3NpYmxlRWxlbWVudEJ5SWRSZWN1cnNpdmUobV9yb290RWxl
bWVudCwgV2ViU3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigpKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCmluZGV4IGQ2
MDgyMmJlOGYyM2YxMGUzYmM3NmEzY2FlMWRlZGE4YTg4ZDY2MWYuLjIxNTdkZGI2OWQ4MDIzYTY0
ODE5YmYxNWIwOTc4Yjk2ZTliNzA4NGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5j
cHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcApAQCAtNzc0LDcgKzc3NCwxMyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3dDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
VUlFbGVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQogewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Qgb2JqID0gYWNjZXNzaWJpbGl0eU9iamVjdCgpLnRpdGxlVUlFbGVtZW50KCk7CisgICAgaWYg
KG9iai5pc051bGwoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHJlc3VsdC0+c2V0KCoobV9mYWN0b3J5LT5nZXRPckNyZWF0ZShv
YmopLT5nZXRBc0NwcFZhcmlhbnQoKSkpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JmFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDNlMzU3MmQ4YmUwMzE4NDM4MGNi
OTI5MjczMWZiNDUwOTk3NzRhM2UuLjZhZDYzN2JhYmYxMDllODYzNWFiYTQ4ZGQzOTMyNDYwNzhh
Nzk0ZGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0xMC0xOCAgRG9taW5pYyBNYXp6b25p
ICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbGFiZWxGb3JFbGVtZW50IGlz
IHNsb3cgd2hlbiB0aGVyZSBhcmUgYSBsb3Qgb2YgRE9NIGVsZW1lbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgyNQorCisgICAgICAgIFJldmll
d2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBBZGRzIHR3byBuZXcgdGVzdHMgZm9yIHRp
dGxlVUlFbGVtZW50IHRoYXQgcnVuIG9uIGJvdGggTWFjIGFuZAorICAgICAgICBDaHJvbWl1bS4g
T25lIHRlc3RzIGNvcnJlY3RuZXNzLCB0aGUgb3RoZXIgdGVzdHMgc3BlZWQuCisKKyAgICAgICAg
Rml4ZXMgb25lIHRlc3Qgc28gdGhhdCBpdCBwYXNzZXMgb24gQ2hyb21pdW0uCisgICAgICAgIEVu
YWJsZXMgb3RoZXIgdGVzdHMgdGhhdCBub3cgcGFzcyBvbiBDaHJvbWl1bS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0
bmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWkt
ZWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBlcmYvYWNjZXNzaWJpbGl0
eS10aXRsZS11aS1lbGVtZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMTAtMTggIEFsZXhhbmRlciBQYXZsb3YgIDxh
cGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbU3R5bGVzXSBQ
cm9wZXJ0eSBjb25zaWRlcmVkIG92ZXJyaWRkZW4gaWYgaXQgaXMgbm9uLWluaGVyaXRlZCBpbXBv
cnRhbnQgcHJvcGVydHkgaW4gaW5oZXJpdGVkIHN0eWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRtbCBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCmluZGV4IDE3
MGU1NzAxYTA0NTg1ZGMwMWU4NmFjNjc5YjFlMzQzMDgxNjNmMTkuLjEyZjgxZTMzOGRjYThiNWYx
NGYwMWI4ODI2OGNkZjZiMjlmZjIxNWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCkBAIC0yMSw4ICsyMSw3
IEBACiAgICAgICAgICAgICBwYXNzLmZvY3VzKCk7CiAgICAgICAgICAgICB2YXIgdGl0bGVVSUVs
ZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudC50aXRsZVVJRWxl
bWVudCgpOwogICAgICAgICAgICAgdmFyIHRpdGxlVGV4dCA9IHRpdGxlVUlFbGVtZW50LmNoaWxk
QXRJbmRleCgwKTsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gIkFYVmFsdWU6IFBhc3N3b3Jk
IjsKLSAgICAgICAgICAgIGlmICh0aXRsZVRleHQuYWxsQXR0cmlidXRlcygpLmluZGV4T2YocGF0
dGVybikgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmICh0aXRsZVRleHQuc3RyaW5nVmFsdWUgPT0g
IkFYVmFsdWU6IFBhc3N3b3JkIikgewogICAgICAgICAgICAgICAgIHJlc3VsdC5pbm5lclRleHQg
Kz0gIlRlc3QgcGFzc2VkXG4iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29y
cmVjdG5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11
aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDgyYTMzYThl
ZWMzMzNhMzBhNmEwOTA2OWFlOTNhMWZjMGIxZDdlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDIzIEBACitUaGlzIHRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgd29y
a3MgY29ycmVjdGx5IGV2ZW4gd2hlbiB0aGluZ3MgY2hhbmdlIGR5bmFtaWNhbGx5LgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2wxJykudGl0
bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWwxJykpIGlzIHRydWUKK1BBU1Mg
YXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQo
J2xhYmVsMicpKSBpcyB0cnVlCitQQVNTIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29u
dHJvbDMnKSkgaXMgZmFsc2UKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycp
LnNldEF0dHJpYnV0ZSgnZm9yJywgJ2NvbnRyb2wzJyk7IGF4RWxlbWVudCgnY29udHJvbDMnKS50
aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDMnKSkgaXMgdHJ1ZQorUEFT
UyB2YXIgbGFiZWw0RWxlbWVudCA9IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRlKCds
YWJlbDQnLCAnY29udHJvbDQnKTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9s
NCcpKSBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyku
YXBwZW5kQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgn
Y29udHJvbDQnKSkgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2w0JykudGl0bGVVSUVs
ZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw0JykpIGlzIHRydWUKK1BBU1MgbGFiZWw0
RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVsNEVsZW1lbnQpOyBoYXNUaXRs
ZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIGlzIGZhbHNlCitQQVNTIGhhc1RpdGxl
VUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDUnKSkgaXMgZmFsc2UKK1BBU1MgcmVwYXJlbnRO
b2RlSW50b0NvbnRhaW5lcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJvbDUnKSwgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNScpKTsgYXhFbGVtZW50KCdjb250cm9sNScpLnRp
dGxlVUlFbGVtZW50KCkgIT0gbnVsbCBpcyB0cnVlCitQQVNTIGF4RWxlbWVudCgnY29udHJvbDUn
KS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDUnKSkgaXMgdHJ1ZQor
UEFTUyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxl
bWVudCgnbGFiZWw2YicpKSBpcyB0cnVlCitQQVNTIG5ld0xhYmVsNkVsZW1lbnQgPSBjcmVhdGVM
YWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw2YScsICdjb250cm9sNicpOyBkb2N1bWVu
dC5ib2R5Lmluc2VydEJlZm9yZShuZXdMYWJlbDZFbGVtZW50LCBkb2N1bWVudC5ib2R5LmZpcnN0
Q2hpbGQpOyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4
RWxlbWVudCgnbGFiZWw2YScpKSBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hp
bGQobmV3TGFiZWw2RWxlbWVudCk7IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVu
dCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbCBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBhOTZmZGY1OWQyNjhiNDI0NWNkODdlZjg5ZDU1YmUyYzc5ZTBjNTAKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1l
bnQtY29ycmVjdG5lc3MuaHRtbApAQCAtMCwwICsxLDExMyBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKworPGRpdiBpZD0iY29udGFpbmVyIj4KKworICA8ZGl2PgorICAg
IDxsYWJlbCBpZD0ibGFiZWwxIiBmb3I9ImNvbnRyb2wxIj5MYWJlbCAxPC9sYWJlbD4KKyAgICA8
aW5wdXQgaWQ9ImNvbnRyb2wxIiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAg
ICA8bGFiZWwgaWQ9ImxhYmVsMiI+CisgICAgICBMYWJlbCAyCisgICAgICA8aW5wdXQgaWQ9ImNv
bnRyb2wyIiB0eXBlPSJ0ZXh0Ij4KKyAgICA8L2xhYmVsPgorICA8L2Rpdj4KKworICA8ZGl2Pgor
ICAgIDxsYWJlbCBpZD0ibGFiZWwzIj5MYWJlbCAzPC9sYWJlbD4KKyAgICA8aW5wdXQgaWQ9ImNv
bnRyb2wzIiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8aW5wdXQgaWQ9
ImNvbnRyb2w0IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8bGFiZWwg
aWQ9ImxhYmVsNSI+CisgICAgICBMYWJlbCA1CisgICAgPC9sYWJlbD4KKyAgICA8aW5wdXQgaWQ9
ImNvbnRyb2w1IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+CisKKyAgPGRpdj4KKyAgICA8bGFiZWwg
aWQ9ImxhYmVsNmIiIGZvcj0iY29udHJvbDYiPkxhYmVsIDZiPC9sYWJlbD4KKyAgICA8bGFiZWwg
aWQ9ImxhYmVsNmMiIGZvcj0iY29udHJvbDYiPkxhYmVsIDZjPC9sYWJlbD4KKyAgICA8aW5wdXQg
aWQ9ImNvbnRyb2w2IiB0eXBlPSJ0ZXh0Ij4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB0
aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5ncyBjaGFuZ2UgZHlu
YW1pY2FsbHkuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworICAgIGZ1
bmN0aW9uIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCkgeworICAgICAgICB2YXIgbGFiZWwx
ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsYWJlbDEi
KTsKKyAgICAgICAgdmFyIHRpdGxlVUlFbGVtZW50ID0gYXhFbGVtZW50LnRpdGxlVUlFbGVtZW50
KCk7CisgICAgICAgIGlmICh0aXRsZVVJRWxlbWVudCA9PSBudWxsKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdGl0bGVVSUVsZW1lbnQucm9sZSA9PSBsYWJlbDEu
cm9sZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJp
YnV0ZShpZCwgZm9yQXR0cmlidXRlVmFsdWUpIHsKKyAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CisgICAgICAgIGxhYmVsRWxlbWVudC5p
ZCA9IGlkOworICAgICAgICBsYWJlbEVsZW1lbnQuc2V0QXR0cmlidXRlKCJmb3IiLCBmb3JBdHRy
aWJ1dGVWYWx1ZSk7CisgICAgICAgIGxhYmVsRWxlbWVudC5pbm5lclRleHQgPSAiTGFiZWwgZm9y
ICIgKyBmb3JBdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgcmV0dXJuIGxhYmVsRWxlbWVudDsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiByZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGNvbnRh
aW5lcikgeworICAgICAgICBub2RlLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7Cisg
ICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChub2RlKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBheEVsZW1lbnQoaWQpIHsKKyAgICAgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmFjY2Vzc2libGVFbGVtZW50QnlJZChpZCk7CisgICAgfQorCisgICAgc2hvdWxkQmUoImF4RWxl
bWVudCgnY29udHJvbDEnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJl
bDEnKSkiLCAidHJ1ZSIpOworCisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDInKS50
aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDInKSkiLCAidHJ1ZSIpOwor
CisgICAgLy8gVGVzdCBjaGFuZ2luZyB0aGUgImZvciIgYXR0cmlidXRlIGR5bmFtaWNhbGx5Lgor
ICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2wzJykpIiwg
ImZhbHNlIik7CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDMn
KS5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjb250cm9sMycpOyBheEVsZW1lbnQoJ2NvbnRyb2wzJyku
dGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWwzJykpIiwgInRydWUiKTsK
KworICAgIC8vIFRlc3QgdW5hdHRhY2hlZCBsYWJlbCBlbGVtZW50IHRoYXQncyBzdWJzZXF1ZW50
bHkgYXR0YWNoZWQuCisgICAgdmFyIGxhYmVsNEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJsYWJlbCIpOworICAgIGxhYmVsNEVsZW1lbnQuaWQgPSAibGFiZWw0IjsKKyAgICBsYWJl
bDRFbGVtZW50LnNldEF0dHJpYnV0ZSgiZm9yIiwgImNvbnRyb2w0Iik7CisgICAgbGFiZWw0RWxl
bWVudC5pbm5lclRleHQgPSAiTGFiZWwgNCI7CisgICAgc2hvdWxkQmUoInZhciBsYWJlbDRFbGVt
ZW50ID0gY3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVsNCcsICdjb250cm9s
NCcpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIiwgImZhbHNlIik7
CisgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBl
bmRDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250
cm9sNCcpKSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDQnKS50
aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDQnKSkiLCAidHJ1ZSIpOwor
CisgICAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgbGFiZWwgaXMgZGV0YWNoZWQuCisg
ICAgc2hvdWxkQmUoImxhYmVsNEVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsYWJl
bDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSIsICJm
YWxzZSIpOworCisgICAgLy8gVGVzdCBsYWJlbCB0aGF0IGdldHMgYSBjb250cm9sIHJlcGFyZW50
ZWQgaW50byBpdC4KKyAgICBzaG91bGRCZSgiaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdj
b250cm9sNScpKSIsICJmYWxzZSIpOworCisgICAgc2hvdWxkQmUoInJlcGFyZW50Tm9kZUludG9D
b250YWluZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyb2w1JyksIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsYWJlbDUnKSk7IGF4RWxlbWVudCgnY29udHJvbDUnKS50aXRsZVVJRWxl
bWVudCgpICE9IG51bGwiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJheEVsZW1lbnQoJ2NvbnRy
b2w1JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw1JykpIiwgInRy
dWUiKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlyc3QgbGFiZWwgaXMgcmV0dXJuZWQsIGV2
ZW4gYXMgbGFiZWxzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZC4KKyAgICBzaG91bGRCZSgiYXhFbGVt
ZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVs
NmInKSkiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJuZXdMYWJlbDZFbGVtZW50ID0gY3JlYXRl
TGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVsNmEnLCAnY29udHJvbDYnKTsgZG9jdW1l
bnQuYm9keS5pbnNlcnRCZWZvcmUobmV3TGFiZWw2RWxlbWVudCwgZG9jdW1lbnQuYm9keS5maXJz
dENoaWxkKTsgYXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChh
eEVsZW1lbnQoJ2xhYmVsNmEnKSkiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJkb2N1bWVudC5i
b2R5LnJlbW92ZUNoaWxkKG5ld0xhYmVsNkVsZW1lbnQpOyBheEVsZW1lbnQoJ2NvbnRyb2w2Jyku
dGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YicpKSIsICJ0cnVlIik7
CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUuZGlzcGxh
eSA9ICdub25lJzsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVs
ZW1lbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2ZDk4Njk5NWU1OWQzNzcxZTAzMzQ2YmM4
N2U1MDMzYWE0YTE3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wZXJmL2FjY2Vz
c2liaWxpdHktdGl0bGUtdWktZWxlbWVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitU
ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IG9uIGFuIGFjY2Vzc2liaWxpdHkgZWxlbWVudCBydW5z
IGluIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLgorUEFTUworCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wZXJmL2FjY2Vzc2liaWxpdHktdGl0bGUtdWktZWxlbWVudC5odG1sIGIvTGF5b3V0VGVz
dHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NzliOTAwN2NmYWYxYjIwNmU5NmVhZTJhZDIyYmQwM2I5NGZlODc5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvcGVyZi9hY2Nlc3NpYmlsaXR5LXRpdGxlLXVpLWVsZW1lbnQuaHRtbApA
QCAtMCwwICsxLDU0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL21hZ25pdHVkZS1wZXJmLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
CisKK3ZhciBwYXJlbnRDb250YWluZXI7Cit2YXIgYXhDb250cm9sOworCitmdW5jdGlvbiBlbmRz
V2l0aChzdHIsIHN1ZmZpeCkgeworICAgIHJldHVybiBzdHIuc3Vic3RyKHN0ci5sZW5ndGggLSBz
dWZmaXgubGVuZ3RoKSA9PSBzdWZmaXg7Cit9CisKK2Z1bmN0aW9uIHNldHVwKG1hZ25pdHVkZSkg
eworICAgIGlmIChwYXJlbnRDb250YWluZXIpCisgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3Zl
Q2hpbGQocGFyZW50Q29udGFpbmVyKTsKKyAgICBwYXJlbnRDb250YWluZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVu
dENvbnRhaW5lcik7CisKKyAgICB2YXIganVua0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworICAgIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChqdW5rQ29udGFp
bmVyKTsKKworICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7
CisgICAgbGFiZWwuc2V0QXR0cmlidXRlKCdmb3InLCAnY29udHJvbCcpOworICAgIGxhYmVsLmlu
bmVyVGV4dCA9ICdMYWJlbCc7CisgICAgcGFyZW50Q29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVs
KTsKKworICAgIHZhciBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsK
KyAgICBjb250cm9sLnR5cGUgPSAndGV4dCc7CisgICAgY29udHJvbC5pZCA9ICdjb250cm9sJzsK
KyAgICBwYXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbCk7CisKKyAgICBwYXJlbnRD
b250YWluZXIub2Zmc2V0TGVmdDsKKyAgICBheENvbnRyb2wgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoJ2NvbnRyb2wnKTsKKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAgKiBtYWduaXR1ZGU7ICsraSkgeworICAgICAgICB2YXIgZGl2ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPHA+PC9w
PjxwPjwvcD48cD48L3A+PHA+PC9wPjxwPjwvcD4iOworICAgICAgICBqdW5rQ29udGFpbmVyLmFw
cGVuZENoaWxkKGRpdik7CisgICAgfQorICAgIHBhcmVudENvbnRhaW5lci5vZmZzZXRMZWZ0Owor
fQorCitmdW5jdGlvbiB0ZXN0KG1hZ25pdHVkZSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwOyBpKyspIHsKKyAgICAgICAgYXhDb250cm9sLnRpdGxlVUlFbGVtZW50KCk7CisgICAgfQor
fQorCitNYWduaXR1ZGUuZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGl0bGVVSUVsZW1lbnQgb24g
YW4gYWNjZXNzaWJpbGl0eSBlbGVtZW50IHJ1bnMgaW4gYW1vcnRpemVkIGNvbnN0YW50IHRpbWUu
Iik7CitNYWduaXR1ZGUucnVuKHNldHVwLCB0ZXN0LCBNYWduaXR1ZGUuQ09OU1RBTlQpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA2OGE1MWMxZjNhZGZiNjVjYWU5ODM0MTg3MzhiZDY0
NmVlNDFkZjEzLi42MmEzYzdkMzIyNTRjMDllMzhhZTIxMTkzMzdlMzg4Mzk3MTUyNTY0IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE0
MDIsMTQgKzE0MDIsMTEgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvbGFuZ3VhZ2Ut
YXR0cmlidXRlLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L2xl
Z2VuZC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9saXN0cy5o
dG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9tZWRpYS1lbGVtZW50
Lmh0bWwgWyBTa2lwIF0KLWNyYnVnLmNvbS8xMDMyMiBhY2Nlc3NpYmlsaXR5L25vbi1kYXRhLXRh
YmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8x
MDMyMiBhY2Nlc3NpYmlsaXR5L3BsYWNlaG9sZGVyLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8x
MDMyMiBhY2Nlc3NpYmlsaXR5L3BsdWdpbi5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tY2hlY2tib3gtc2l6ZS5odG1sIFsgU2tpcCBdCiBj
cmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tZ3JvdXAtbWVtYmVycy5o
dG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24t
dGl0bGUtbGFiZWwuaHRtbCBbIFNraXAgXQotY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkv
c2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIg
YWNjZXNzaWJpbGl0eS90YWJsZS1hdHRyaWJ1dGVzLmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8x
MDMyMiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWNlbGwtc3BhbnMuaHRtbCBbIFNraXAgXQogY3JidWcu
Y29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbHMuaHRtbCBbIFNraXAgXQpAQCAtMTQx
OCw3ICsxNDE1LDYgQEAgY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtb25lLWNl
bGwuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUtc2Vj
dGlvbnMuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxpdHkvdGFibGUt
d2l0aC1hcmlhLXJvbGUuaHRtbCBbIFNraXAgXQogY3JidWcuY29tLzEwMzIyIGFjY2Vzc2liaWxp
dHkvdGFibGUtd2l0aC1ydWxlcy5odG1sIFsgU2tpcCBdCi1jcmJ1Zy5jb20vMTAzMjIgYWNjZXNz
aWJpbGl0eS90aC1hcy10aXRsZS11aS5odG1sIFsgU2tpcCBdCiBjcmJ1Zy5jb20vMTAzMjIgYWNj
ZXNzaWJpbGl0eS90cmFuc2Zvcm1lZC1lbGVtZW50Lmh0bWwgWyBTa2lwIF0KIGNyYnVnLmNvbS8x
MDMyMiBhY2Nlc3NpYmlsaXR5L3Zpc2libGUtZWxlbWVudHMuaHRtbCBbIFNraXAgXQogCg==
</data>
<flag name="commit-queue"
          id="182917"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>