<?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>124381</bug_id>
          
          <creation_ts>2013-11-14 14:46:39 -0800</creation_ts>
          <short_desc>AX: Improve ARIA live region reliability by sending notifications when live regions are created/shown and hidden/destroyed</short_desc>
          <delta_ts>2014-05-28 13:05:22 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Craig">jcraig</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>950855</commentid>
    <comment_count>0</comment_count>
      <attachid>216983</attachid>
    <who name="James Craig">jcraig</who>
    <bug_when>2013-11-14 14:46:39 -0800</bug_when>
    <thetext>Created attachment 216983
test case demonstrating bugs

AX: Improve ARIA live region reliability by sending notifications when live regions are created/shown and hidden/destroyed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950856</commentid>
    <comment_count>1</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2013-11-14 14:46:51 -0800</bug_when>
    <thetext>&lt;rdar://problem/15124143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951838</commentid>
    <comment_count>2</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2013-11-18 15:33:17 -0800</bug_when>
    <thetext>*** Bug 62289 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987530</commentid>
    <comment_count>3</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2014-03-05 20:14:39 -0800</bug_when>
    <thetext>*** Bug 118541 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996541</commentid>
    <comment_count>4</comment_count>
      <attachid>228345</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-04-01 17:35:00 -0700</bug_when>
    <thetext>Created attachment 228345
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996548</commentid>
    <comment_count>5</comment_count>
      <attachid>228348</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-04-01 17:43:35 -0700</bug_when>
    <thetext>Created attachment 228348
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996659</commentid>
    <comment_count>6</comment_count>
      <attachid>228348</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-04-02 04:03:27 -0700</bug_when>
    <thetext>Comment on attachment 228348
patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1486
&gt; +const String AccessibilityObject::defaultLiveRegionStatusForRole(AccessibilityRole role)

Wouldn&apos;t it be better to return a reference to a statically stored AtomicString (&quot;const AtomicString&amp;&quot; return type)?

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1840
&gt; +    return equalIgnoringCase(liveRegionStatus, &quot;polite&quot;) || equalIgnoringCase(liveRegionStatus, &quot;assertive&quot;);

You could check instead for !liveRegionStatus.isNull() &amp;&amp; !equalIgnoringCase(liveRegionStatus, &quot;off&quot;, although the end result would be the same of course (http://www.w3.org/TR/wai-aria/states_and_properties#aria-live). Just commenting it because in my mind sounds better to exclude the negatives than include all the positive, but I&apos;d rather leave it up to you :)

&gt; Source/WebCore/accessibility/AccessibilityObject.h:839
&gt; -    virtual const AtomicString&amp; ariaLiveRegionStatus() const { return nullAtom; }
&gt; +    virtual const String ariaLiveRegionStatus() const { return String(); }

Following the same reasoning than in my previous comment: is there any specific reason why you&apos;re changing the return type from AtomicString&amp; to String? By checking the new code I still get the feeling that returning a reference to a statically stored AtomicString would still be a good idea

&gt; LayoutTests/platform/mac/accessibility/live-region-creation-notification.html:38
&gt; +    window.setTimeout(function() { appendLiveRegion(&apos;third&apos;); }, t*1);
&gt; +    
&gt; +    // add fourth live region (hidden), then show later
&gt; +    window.setTimeout(function() { appendLiveRegion(&apos;fourth&apos;, HIDE); }, t*2);
&gt; +    window.setTimeout(function() { unhide(&apos;fourth&apos;); }, t*3);
&gt; +    window.setTimeout(function() { appendDiv(&apos;fifth&apos;); }, t*4);
&gt; +    
&gt; +    // update them sequentially after all have been loaded
&gt; +    window.setTimeout(updateAll, t*5);

I&apos;m a bit concerned about chaining the executions of this functions using timeouts (and so small ones), in terms of whether this could cause some flakiness.

Will it be possible to chaining them using a continuation passing style pattern, instead of the timeouts?

&gt; LayoutTests/platform/mac/accessibility/live-region-creation-notification.html:51
&gt; +    window.setTimeout(function() { updateLiveRegion(&apos;first&apos;); }, t*1);
&gt; +    window.setTimeout(function() { updateLiveRegion(&apos;second&apos;); }, t*2);
&gt; +    window.setTimeout(function() { updateLiveRegion(&apos;third&apos;); }, t*3);
&gt; +    window.setTimeout(function() { updateLiveRegion(&apos;fourth&apos;); }, t*4);
&gt; +    window.setTimeout(function() { endTest(); }, t*5);

Same comment here: if possible, I&apos;d say that using CPS here would be safer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996728</commentid>
    <comment_count>7</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-04-02 09:18:08 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 228348 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=228348&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1486
&gt; &gt; +const String AccessibilityObject::defaultLiveRegionStatusForRole(AccessibilityRole role)
&gt; 
&gt; Wouldn&apos;t it be better to return a reference to a statically stored AtomicString (&quot;const AtomicString&amp;&quot; return type)?

I removed the static strings in ariaLiveRegionStatus (for off, assertive, polite) because of the desire made by others in WebKit that we don&apos;t use NeverDestroyed strings in areas where performance is not super critical. By removing that I no longer had a reference I could pass back (instead I was used ASCIILiteral), so a few of these methods had to change to String() as a result.

I think that&apos;s the direction that people want these static strings to go in, so it seemed to make sense to me to change it here.

&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1840
&gt; &gt; +    return equalIgnoringCase(liveRegionStatus, &quot;polite&quot;) || equalIgnoringCase(liveRegionStatus, &quot;assertive&quot;);
&gt; 
&gt; You could check instead for !liveRegionStatus.isNull() &amp;&amp; !equalIgnoringCase(liveRegionStatus, &quot;off&quot;, although the end result would be the same of course (http://www.w3.org/TR/wai-aria/states_and_properties#aria-live). Just commenting it because in my mind sounds better to exclude the negatives than include all the positive, but I&apos;d rather leave it up to you :)

I think it might be better to check for positives here because if you set your aria-live=&quot;blah&quot; we don&apos;t want that to register as a live region enabled.

&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityObject.h:839
&gt; &gt; -    virtual const AtomicString&amp; ariaLiveRegionStatus() const { return nullAtom; }
&gt; &gt; +    virtual const String ariaLiveRegionStatus() const { return String(); }
&gt; 
&gt; Following the same reasoning than in my previous comment: is there any specific reason why you&apos;re changing the return type from AtomicString&amp; to String? By checking the new code I still get the feeling that returning a reference to a statically stored AtomicString would still be a good idea
&gt; 
&gt; &gt; LayoutTests/platform/mac/accessibility/live-region-creation-notification.html:38
&gt; &gt; +    window.setTimeout(function() { appendLiveRegion(&apos;third&apos;); }, t*1);
&gt; &gt; +    
&gt; &gt; +    // add fourth live region (hidden), then show later
&gt; &gt; +    window.setTimeout(function() { appendLiveRegion(&apos;fourth&apos;, HIDE); }, t*2);
&gt; &gt; +    window.setTimeout(function() { unhide(&apos;fourth&apos;); }, t*3);
&gt; &gt; +    window.setTimeout(function() { appendDiv(&apos;fifth&apos;); }, t*4);
&gt; &gt; +    
&gt; &gt; +    // update them sequentially after all have been loaded
&gt; &gt; +    window.setTimeout(updateAll, t*5);
&gt; 
&gt; I&apos;m a bit concerned about chaining the executions of this functions using timeouts (and so small ones), in terms of whether this could cause some flakiness.
&gt; 
&gt; Will it be possible to chaining them using a continuation passing style pattern, instead of the timeouts?
&gt; 
&gt; &gt; LayoutTests/platform/mac/accessibility/live-region-creation-notification.html:51
&gt; &gt; +    window.setTimeout(function() { updateLiveRegion(&apos;first&apos;); }, t*1);
&gt; &gt; +    window.setTimeout(function() { updateLiveRegion(&apos;second&apos;); }, t*2);
&gt; &gt; +    window.setTimeout(function() { updateLiveRegion(&apos;third&apos;); }, t*3);
&gt; &gt; +    window.setTimeout(function() { updateLiveRegion(&apos;fourth&apos;); }, t*4);
&gt; &gt; +    window.setTimeout(function() { endTest(); }, t*5);
&gt; 
&gt; Same comment here: if possible, I&apos;d say that using CPS here would be safer

Will do</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996730</commentid>
    <comment_count>8</comment_count>
      <attachid>228348</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-04-02 09:26:03 -0700</bug_when>
    <thetext>Comment on attachment 228348
patch

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

Setting r+ after your comments, but please consider the comments

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1486
&gt;&gt;&gt; +const String AccessibilityObject::defaultLiveRegionStatusForRole(AccessibilityRole role)
&gt;&gt; 
&gt;&gt; Wouldn&apos;t it be better to return a reference to a statically stored AtomicString (&quot;const AtomicString&amp;&quot; return type)?
&gt; 
&gt; I removed the static strings in ariaLiveRegionStatus (for off, assertive, polite) because of the desire made by others in WebKit that we don&apos;t use NeverDestroyed strings in areas where performance is not super critical. By removing that I no longer had a reference I could pass back (instead I was used ASCIILiteral), so a few of these methods had to change to String() as a result.
&gt; 
&gt; I think that&apos;s the direction that people want these static strings to go in, so it seemed to make sense to me to change it here.

Fair enough :)

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1840
&gt;&gt;&gt; +    return equalIgnoringCase(liveRegionStatus, &quot;polite&quot;) || equalIgnoringCase(liveRegionStatus, &quot;assertive&quot;);
&gt;&gt; 
&gt;&gt; You could check instead for !liveRegionStatus.isNull() &amp;&amp; !equalIgnoringCase(liveRegionStatus, &quot;off&quot;, although the end result would be the same of course (http://www.w3.org/TR/wai-aria/states_and_properties#aria-live). Just commenting it because in my mind sounds better to exclude the negatives than include all the positive, but I&apos;d rather leave it up to you :)
&gt; 
&gt; I think it might be better to check for positives here because if you set your aria-live=&quot;blah&quot; we don&apos;t want that to register as a live region enabled.

Fair enough too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996735</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-04-02 09:35:57 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/166649

Made the changes for the layout test. Thanks Mario</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996873</commentid>
    <comment_count>10</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-04-02 15:30:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; http://trac.webkit.org/changeset/166649
&gt; 
&gt; Made the changes for the layout test. Thanks Mario

I think test results may be missing for LayoutTests/platform/mac/accessibility/live-region-creation-notification.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996874</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-04-02 15:33:29 -0700</bug_when>
    <thetext>Checked in
http://trac.webkit.org/changeset/166671</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997101</commentid>
    <comment_count>12</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2014-04-03 02:24:31 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; http://trac.webkit.org/changeset/166649
&gt; 
&gt; Made the changes for the layout test. Thanks Mario

No problem, and sorry for the noisy review :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012274</commentid>
    <comment_count>13</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2014-05-28 13:05:22 -0700</bug_when>
    <thetext>*** Bug 132662 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>216983</attachid>
            <date>2013-11-14 14:46:39 -0800</date>
            <delta_ts>2013-11-14 14:46:39 -0800</delta_ts>
            <desc>test case demonstrating bugs</desc>
            <filename>live-region-creation-tests.html</filename>
            <type>text/html</type>
            <size>2027</size>
            <attacher name="James Craig">jcraig</attacher>
            
              <data encoding="base64">PGh0bWwgbGFuZz0iZW4iPgoJPGhlYWQ+CgkJPHRpdGxlPlBhZ2UgVGl0bGU8L3RpdGxlPgoJCTxt
ZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0
PXV0Zi04Ij4KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJCgkJCXdpbmRvdy5v
bmxvYWQgPSBmdW5jdGlvbigpIHsKCQkJCQoJCQkJdmFyIEhJREUgPSB0cnVlOwoJCQkJdmFyIHQg
PSAxMDAwOwoJCQkJCgkJCQkvLyBhZGQgc2Vjb25kIGxpdmUgcmVnaW9uIGltbWVkaWF0ZWx5CgkJ
CQlhcHBlbmRMaXZlUmVnaW9uKCdzZWNvbmQnKTsKCQkJCQoJCQkJLy8gYWRkIHRoaXJkIGxpdmUg
cmVnaW9uIGxhdGVyCgkJCQl3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgYXBwZW5kTGl2
ZVJlZ2lvbigndGhpcmQnKTsgfSwgdCoxKTsKCQkJCQoJCQkJLy8gYWRkIGZvdXJ0aCBsaXZlIHJl
Z2lvbiAoaGlkZGVuKSwgdGhlbiBzaG93IGxhdGVyCgkJCQl3aW5kb3cuc2V0VGltZW91dChmdW5j
dGlvbigpIHsgYXBwZW5kTGl2ZVJlZ2lvbignZm91cnRoJywgSElERSk7IH0sIHQqMik7CgkJCQl3
aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgdW5oaWRlKCdmb3VydGgnKTsgfSwgdCozKTsK
CQkJCQoJCQkJLy8gdXBkYXRlIHRoZW0gc2VxdWVudGlhbGx5IGFmdGVyIGFsbCBoYXZlIGJlZW4g
bG9hZGVkCgkJCQl3aW5kb3cuc2V0VGltZW91dCh1cGRhdGVBbGwsIHQqNCk7CgkJCQkKCQkJfQoJ
CQl2YXIgJCA9IGZ1bmN0aW9uKGlkKSB7CgkJCQlyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQpOwoJCQl9CgkJCXZhciB1cGRhdGVBbGwgPSBmdW5jdGlvbigpIHsKCQkJCXZhciB0ID0g
MTAwMDsKCQkJCXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB1cGRhdGVMaXZlUmVnaW9u
KCdmaXJzdCcpOyB9LCB0KjEpOwoJCQkJd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHVw
ZGF0ZUxpdmVSZWdpb24oJ3NlY29uZCcpOyB9LCB0KjIpOwoJCQkJd2luZG93LnNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7IHVwZGF0ZUxpdmVSZWdpb24oJ3RoaXJkJyk7IH0sIHQqMyk7CgkJCQl3aW5k
b3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgdXBkYXRlTGl2ZVJlZ2lvbignZm91cnRoJyk7IH0s
IHQqNCk7CgkJCX0KCQkJdmFyIHVwZGF0ZUxpdmVSZWdpb24gPSBmdW5jdGlvbihpZCkgewoJCQkJ
dmFyIGxyID0gJChpZCk7CgkJCQlsci5pbm5lckhUTUwgPSBpZDsKCQkJfQoJCQl2YXIgYXBwZW5k
TGl2ZVJlZ2lvbiA9IGZ1bmN0aW9uKGlkLCBvcHRIaWRlKSB7CgkJCQl2YXIgbHIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJCWxyLmlkID0gaWQ7CgkJCQlsci5zZXRBdHRyaWJ1
dGUoJ3JvbGUnLCAnbG9nJyk7CgkJCQlpZiAob3B0SGlkZSkgewoJCQkJCWxyLmhpZGRlbiA9IHRy
dWU7CgkJCQl9CgkJCQlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxyKTsKCQkJfQoJCQl2YXIg
dW5oaWRlID0gZnVuY3Rpb24oaWQpewoJCQkJJChpZCkuaGlkZGVuID0gZmFsc2U7CgkJCX0KCQkJ
CgkJPC9zY3JpcHQ+Cgk8L2hlYWQ+Cgk8Ym9keT4KCQk8cD5Wb2ljZU92ZXIgZG9lcyBub3Qgc3Bl
YWsgc29tZSBsaXZlIHJlZ2lvbiB1cGRhdGVzLjwvcD4KCQk8dWw+CgkJCTxsaT5GaXJzdCBsaXZl
IHJlZ2lvbiBpcyBzdGF0aWMgaW4gdGhlIERPTS48L2xpPgoJCQk8bGk+U2Vjb25kIGxpdmUgcmVn
aW9uIGlzIGFkZGVkIG9uIGxvYWQuPC9saT4KCQkJPGxpPlRoaXJkIGlzIGFkZGVkIDFzIGFmdGVy
IGxvYWQuPC9saT4KCQkJPGxpPkZvdXJ0aCBpcyBhZGRlZCAoYnV0IGhpZGRlbikgMnMgYWZ0ZXIg
bG9hZCwgYW5kIHNob3duIDNzIGFmdGVyIGxvYWQuPC9saT4KCQk8L3VsPgoJCTxwPkFsbCBhcmUg
dXBkYXRlZCBzZXF1ZW50aWFsbHkgYWZ0ZXIgdGhlIGxhc3QgaXMgbG9hZGVkL3Nob3duIChzdGFy
dGluZyBhYm91dCA1cyBhZnRlciBwYWdlIGxvYWQpLjwvcD4KCQk8ZGl2IGlkPSJmaXJzdCIgcm9s
ZT0ibG9nIj48L2Rpdj4KCTwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228345</attachid>
            <date>2014-04-01 17:35:00 -0700</date>
            <delta_ts>2014-04-01 17:43:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17708</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjYyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTA0LTAxICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcHJvdmUgQVJJ
QSBsaXZlIHJlZ2lvbiByZWxpYWJpbGl0eSBieSBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgd2hlbiBs
aXZlIHJlZ2lvbnMgYXJlIGNyZWF0ZWQvc2hvd24gYW5kIGhpZGRlbi9kZXN0cm95ZWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDM4MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlLW9yZ2FuaXplIHNv
bWUgY29kZSBzbyB0aGF0IHdoZW4gd2UgZGV0ZWN0IGEgbmV3IG5vZGUgaGFzIGJlZW4gY3JlYXRl
ZCwgd2UgY2FuIHNhZmVseSBkZXRlcm1pbmUgaXRzIGxpdmUgcmVnaW9uIHN0YXR1cy4KKyAgICAg
ICAgSWYgaXQgaXMgYSBsaXZlIHJlZ2lvbiwgd2UgZmlyZSBvZmYgYSBsaXZlIHJlZ2lvbiBjcmVh
dGVkIG5vdGlmaWNhdGlvbi4KKworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9saXZlLXJlZ2lvbi1jcmVhdGlvbi1ub3RpZmljYXRpb24uaHRtbAorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OmhhbmRsZUxpdmVSZWdpb25DcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoaWxk
cmVuQ2hhbmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlZmF1bHRMaXZl
UmVnaW9uU3RhdHVzRm9yUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpsaXZlUmVnaW9uU3RhdHVzSXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJQUxpdmVSZWdpb24pOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YXJpYUxpdmVSZWdpb25TdGF0dXMpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhTGl2ZVJlZ2lvblN0YXR1cyk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbik6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaDoKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9zdExpdmVSZWdp
b25DcmVhdGVkTm90aWZpY2F0aW9uXSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhP
YmplY3RDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RQ
bGF0Zm9ybU5vdGlmaWNhdGlvbik6CisKIDIwMTQtMDQtMDEgIFRpbW90aHkgSGF0Y2hlciAgPHRp
bW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBIZWFwUHJvZmlsZXIgZnJvbSB0aGUg
V2ViIEluc3BlY3RvciBwcm90b2NvbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMTY2MTk0KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMxLDggKzYzMSwzMCBAQAogICAgIHBvc3ROb3RpZmljYXRpb24oZ2V0T3JDcmVhdGUobm9kZSks
ICZkb2N1bWVudCgpLCBBWE1lbnVPcGVuZWQpOwogfQogICAgIAotdm9pZCBBWE9iamVjdENhY2hl
OjpjaGlsZHJlbkNoYW5nZWQoTm9kZSogbm9kZSkKK3ZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxl
TGl2ZVJlZ2lvbkNyZWF0ZWQoTm9kZSogbm9kZSkKIHsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgU3RyaW5n
IGxpdmVSZWdpb25TdGF0dXMgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGl2ZUF0
dHIpOworICAgIGlmIChsaXZlUmVnaW9uU3RhdHVzLmlzRW1wdHkoKSkgeworICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGFyaWFSb2xlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyb2xl
QXR0cik7CisgICAgICAgIGlmICghYXJpYVJvbGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbGl2
ZVJlZ2lvblN0YXR1cyA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlZmF1bHRMaXZlUmVnaW9uU3Rh
dHVzRm9yUm9sZShBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhUm9sZVRvV2ViQ29yZVJvbGUoYXJp
YVJvbGUpKTsKKyAgICB9CisgICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpdmVS
ZWdpb25TdGF0dXNJc0VuYWJsZWQobGl2ZVJlZ2lvblN0YXR1cykpCisgICAgICAgIHBvc3ROb3Rp
ZmljYXRpb24oZ2V0T3JDcmVhdGUobm9kZSksICZkb2N1bWVudCgpLCBBWExpdmVSZWdpb25DcmVh
dGVkKTsKK30KKyAgICAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6Y2hpbGRyZW5DaGFuZ2VkKE5vZGUq
IG5vZGUsIE5vZGUqIG5ld0NoaWxkKQoreworICAgIGlmIChuZXdDaGlsZCkgeworICAgICAgICBo
YW5kbGVNZW51T3BlbmVkKG5ld0NoaWxkKTsKKyAgICAgICAgaGFuZGxlTGl2ZVJlZ2lvbkNyZWF0
ZWQobmV3Q2hpbGQpOworICAgIH0KKyAgICAKICAgICBjaGlsZHJlbkNoYW5nZWQoZ2V0KG5vZGUp
KTsKIH0KIApAQCAtNjQwLDggKzY2MiwxMSBAQAogewogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobmV3Q2hpbGQpCisgICAgCisgICAgaWYgKG5ld0NoaWxkKSB7
CiAgICAgICAgIGhhbmRsZU1lbnVPcGVuZWQobmV3Q2hpbGQtPm5vZGUoKSk7CisgICAgICAgIGhh
bmRsZUxpdmVSZWdpb25DcmVhdGVkKG5ld0NoaWxkLT5ub2RlKCkpOworICAgIH0KICAgICAKICAg
ICBjaGlsZHJlbkNoYW5nZWQoZ2V0KHJlbmRlcmVyKSk7CiB9CkBAIC04OTQsNyArOTE5LDcgQEAK
ICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBhcmlhX2V4cGFuZGVkQXR0cikKICAgICAgICAgaGFu
ZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IGFyaWFfaGlkZGVuQXR0cikKLSAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKGVsZW1lbnQtPnBhcmVu
dE5vZGUoKSk7CisgICAgICAgIGNoaWxkcmVuQ2hhbmdlZChlbGVtZW50LT5wYXJlbnROb2RlKCks
IGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFyaWFfaW52YWxpZEF0dHIpCiAg
ICAgICAgIHBvc3ROb3RpZmljYXRpb24oZWxlbWVudCwgQVhPYmplY3RDYWNoZTo6QVhJbnZhbGlk
U3RhdHVzQ2hhbmdlZCk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQs
NyArMTA0LDcgQEAKIAogICAgIHZvaWQgZGV0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0
KiwgQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKTsKICAgICB2b2lkIGF0dGFjaFdyYXBwZXIo
QWNjZXNzaWJpbGl0eU9iamVjdCopOwotICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKE5vZGUqKTsK
KyAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChOb2RlKiwgTm9kZSogbmV3Q2hpbGQgPSBudWxscHRy
KTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoQWNjZXNzaWJp
bGl0eU9iamVjdCopOwogICAgIHZvaWQgY2hlY2tlZFN0YXRlQ2hhbmdlZChOb2RlKik7CkBAIC0x
NjksNiArMTY5LDcgQEAKICAgICAgICAgQVhTZWxlY3RlZFRleHRDaGFuZ2VkLAogICAgICAgICBB
WFZhbHVlQ2hhbmdlZCwKICAgICAgICAgQVhTY3JvbGxlZFRvQW5jaG9yLAorICAgICAgICBBWExp
dmVSZWdpb25DcmVhdGVkLAogICAgICAgICBBWExpdmVSZWdpb25DaGFuZ2VkLAogICAgICAgICBB
WE1lbnVMaXN0SXRlbVNlbGVjdGVkLAogICAgICAgICBBWE1lbnVMaXN0VmFsdWVDaGFuZ2VkLApA
QCAtMjQzLDYgKzI0NCw3IEBACiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4sIEFYTm90aWZpY2F0aW9uPj4gbV9ub3RpZmljYXRpb25zVG9Qb3N0OwogICAg
IHZvaWQgbm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQoVGltZXI8QVhPYmplY3RDYWNoZT4mKTsK
ICAgICB2b2lkIGhhbmRsZU1lbnVPcGVuZWQoTm9kZSopOworICAgIHZvaWQgaGFuZGxlTGl2ZVJl
Z2lvbkNyZWF0ZWQoTm9kZSopOwogICAgIHZvaWQgaGFuZGxlTWVudUl0ZW1TZWxlY3RlZChOb2Rl
Kik7CiAgICAgCiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRJbWFnZU1h
cFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqKTsKQEAgLTI4OCw3ICsyOTAsNyBAQAogaW5saW5l
IHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0Kikg
eyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpjaGVja2VkU3RhdGVDaGFuZ2VkKE5vZGUq
KSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmNoaWxkcmVuQ2hhbmdlZChSZW5kZXJP
YmplY3QqLCBSZW5kZXJPYmplY3QqKSB7IH0KLWlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmNo
aWxkcmVuQ2hhbmdlZChOb2RlKikgeyB9CitpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpjaGls
ZHJlbkNoYW5nZWQoTm9kZSosIE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
OmNoaWxkcmVuQ2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjp0ZXh0Q2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGluZSB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnRleHRDaGFuZ2VkKE5vZGUqKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2
aXNpb24gMTY2MTk0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Miw3ICsxNDgyLDI0IEBACiAgICAg
ICAgICAgICBvYmotPmFyaWFUcmVlUm93cyhyZXN1bHQpOwogICAgIH0gICAgCiB9Ci0KKyAgICAK
K2NvbnN0IFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZWZhdWx0TGl2ZVJlZ2lvblN0YXR1
c0ZvclJvbGUoQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSkKK3sKKyAgICBzd2l0Y2ggKHJvbGUpIHsK
KyAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlOgorICAgIGNhc2UgQXBwbGljYXRp
b25BbGVydFJvbGU6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImFzc2VydGl2ZSIpOwor
ICAgIGNhc2UgQXBwbGljYXRpb25Mb2dSb2xlOgorICAgIGNhc2UgQXBwbGljYXRpb25TdGF0dXNS
b2xlOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJwb2xpdGUiKTsKKyAgICBjYXNlIEFw
cGxpY2F0aW9uVGltZXJSb2xlOgorICAgIGNhc2UgQXBwbGljYXRpb25NYXJxdWVlUm9sZToKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgib2ZmIik7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIG51bGxBdG9tOworICAgIH0KK30KKyAgICAKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkp
CiBjb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjdGlvblZlcmIoKSBjb25zdAog
ewpAQCAtMTgxOCwxMCArMTgzNSwxNCBAQAogICAgICAgICB8fCBoYXNBdHRyaWJ1dGUoYXJpYV9y
ZWxldmFudEF0dHIpOwogfQogICAgIAorYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaXZlUmVn
aW9uU3RhdHVzSXNFbmFibGVkKGNvbnN0IEF0b21pY1N0cmluZyYgbGl2ZVJlZ2lvblN0YXR1cykK
K3sKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobGl2ZVJlZ2lvblN0YXR1cywgInBvbGl0
ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGxpdmVSZWdpb25TdGF0dXMsICJhc3NlcnRpdmUiKTsK
K30KKyAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNBUklBTGl2ZVJlZ2lv
bigpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBsaXZlUmVnaW9uID0gYXJpYUxp
dmVSZWdpb25TdGF0dXMoKTsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobGl2ZVJlZ2lv
biwgInBvbGl0ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGxpdmVSZWdpb24sICJhc3NlcnRpdmUi
KTsKKyAgICByZXR1cm4gbGl2ZVJlZ2lvblN0YXR1c0lzRW5hYmxlZChhcmlhTGl2ZVJlZ2lvblN0
YXR1cygpKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCShyZXZpc2lvbiAxNjYxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODM2LDEwICs4MzYs
MTIgQEAKICAgICAvLyBBUklBIGxpdmUtcmVnaW9uIGZlYXR1cmVzLgogICAgIGJvb2wgc3VwcG9y
dHNBUklBTGl2ZVJlZ2lvbigpIGNvbnN0OwogICAgIGJvb2wgaXNJbnNpZGVBUklBTGl2ZVJlZ2lv
bigpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGl2ZVJlZ2lv
blN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG51bGxBdG9tOyB9CisgICAgdmlydHVhbCBjb25zdCBT
dHJpbmcgYXJpYUxpdmVSZWdpb25TdGF0dXMoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQog
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGl2ZVJlZ2lvblJlbGV2YW50KCkg
Y29uc3QgeyByZXR1cm4gbnVsbEF0b207IH0KICAgICB2aXJ0dWFsIGJvb2wgYXJpYUxpdmVSZWdp
b25BdG9taWMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBhcmlh
TGl2ZVJlZ2lvbkJ1c3koKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBjb25z
dCBTdHJpbmcgZGVmYXVsdExpdmVSZWdpb25TdGF0dXNGb3JSb2xlKEFjY2Vzc2liaWxpdHlSb2xl
KTsKKyAgICBzdGF0aWMgYm9vbCBsaXZlUmVnaW9uU3RhdHVzSXNFbmFibGVkKGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogICAgIAogICAgIGJvb2wgc3VwcG9ydHNBUklBQXR0cmlidXRlcygpIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNjYxOTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDQ5LDI5ICszMDQ5LDEyIEBACiAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4oKTsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhTGl2ZVJlZ2lvblN0YXR1cygp
IGNvbnN0Citjb25zdCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYUxpdmVS
ZWdpb25TdGF0dXMoKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9taWNTdHJpbmc+IGxpdmVSZWdpb25TdGF0dXNBc3NlcnRpdmUoImFzc2VydGl2ZSIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9taWNTdHJpbmc+IGxpdmVSZWdpb25TdGF0dXNQb2xpdGUoInBvbGl0ZSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGxpdmVSZWdpb25TdGF0dXNPZmYoIm9mZiIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIAogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgbGl2ZVJlZ2lvblN0YXR1cyA9IGdldEF0dHJpYnV0ZShhcmlhX2xpdmVBdHRyKTsKICAg
ICAvLyBUaGVzZSByb2xlcyBoYXZlIGltcGxpY2l0IGxpdmUgcmVnaW9uIHN0YXR1cy4KLSAgICBp
ZiAobGl2ZVJlZ2lvblN0YXR1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3dpdGNoIChyb2xlVmFs
dWUoKSkgewotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlOgotICAgICAg
ICBjYXNlIEFwcGxpY2F0aW9uQWxlcnRSb2xlOgotICAgICAgICAgICAgcmV0dXJuIGxpdmVSZWdp
b25TdGF0dXNBc3NlcnRpdmU7Ci0gICAgICAgIGNhc2UgQXBwbGljYXRpb25Mb2dSb2xlOgotICAg
ICAgICBjYXNlIEFwcGxpY2F0aW9uU3RhdHVzUm9sZToKLSAgICAgICAgICAgIHJldHVybiBsaXZl
UmVnaW9uU3RhdHVzUG9saXRlOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uVGltZXJSb2xlOgot
ICAgICAgICBjYXNlIEFwcGxpY2F0aW9uTWFycXVlZVJvbGU6Ci0gICAgICAgICAgICByZXR1cm4g
bGl2ZVJlZ2lvblN0YXR1c09mZjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChsaXZlUmVnaW9uU3RhdHVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGRlZmF1bHRMaXZlUmVnaW9uU3RhdHVzRm9yUm9sZShyb2xlVmFsdWUo
KSk7CiAKICAgICByZXR1cm4gbGl2ZVJlZ2lvblN0YXR1czsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oCShyZXZpc2lvbiAxNjYxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDcgKzI3OCw3
IEBACiAgICAgCiAgICAgdmlydHVhbCBFU3BlYWsgc3BlYWtQcm9wZXJ0eSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGl2ZVJlZ2lv
blN0YXR1cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nIGFyaWFM
aXZlUmVnaW9uU3RhdHVzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGFyaWFMaXZlUmVnaW9uUmVsZXZhbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgYXJpYUxpdmVSZWdpb25BdG9taWMoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgYXJpYUxpdmVSZWdpb25CdXN5KCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJ
T1MubW0JKHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDkgQEAK
ICAgICAgICAgY2FzZSBBWExpdmVSZWdpb25DaGFuZ2VkOgogICAgICAgICAgICAgW29iai0+d3Jh
cHBlcigpIHBvc3RMaXZlUmVnaW9uQ2hhbmdlTm90aWZpY2F0aW9uXTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFYTGl2ZVJlZ2lvbkNyZWF0ZWQ6CisgICAgICAgICAgICBbb2Jq
LT53cmFwcGVyKCkgcG9zdExpdmVSZWdpb25DcmVhdGVkTm90aWZpY2F0aW9uXTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFYQ2hpbGRyZW5DaGFuZ2VkOgogICAgICAgICAgICAg
W29iai0+d3JhcHBlcigpIHBvc3RDaGlsZHJlbkNoYW5nZWROb3RpZmljYXRpb25dOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgJ
KHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYg
KzYwLDcgQEAKIC0gKHZvaWQpcG9zdExvYWRDb21wbGV0ZU5vdGlmaWNhdGlvbjsKIC0gKHZvaWQp
cG9zdENoaWxkcmVuQ2hhbmdlZE5vdGlmaWNhdGlvbjsKIC0gKHZvaWQpcG9zdEludmFsaWRTdGF0
dXNDaGFuZ2VkTm90aWZpY2F0aW9uOworLSAodm9pZClwb3N0TGl2ZVJlZ2lvbkNyZWF0ZWROb3Rp
ZmljYXRpb247CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0JKHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzY3LDYgKzEzNjcsMTEgQEAKICAgICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3
cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uLiAg
ICAKIH0KIAorLSAodm9pZClwb3N0TGl2ZVJlZ2lvbkNyZWF0ZWROb3RpZmljYXRpb24KK3sKKyAg
ICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBv
c3QgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uLiAgICAKK30KKwogLSAodm9pZClwb3N0TG9hZENv
bXBsZXRlTm90aWZpY2F0aW9uCiB7CiAgICAgLy8gVGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3Jh
cHBlciB3aWxsIG92ZXJyaWRlIGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5vdGlmaWNhdGlvbi4gICAg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDEwIEBACiAjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUxpdmVSZWdpb25DaGFuZ2VkTm90aWZp
Y2F0aW9uIEAiQVhMaXZlUmVnaW9uQ2hhbmdlZCIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eUxpdmVSZWdpb25DcmVhdGVkTm90aWZpY2F0aW9uIAorI2RlZmluZSBOU0FjY2Vzc2li
aWxpdHlMaXZlUmVnaW9uQ3JlYXRlZE5vdGlmaWNhdGlvbiBAIkFYTGl2ZVJlZ2lvbkNyZWF0ZWQi
CisjZW5kaWYKKwogLy8gVGhlIHNpbXBsZSBDb2NvYSBjYWxscyBpbiB0aGlzIGZpbGUgZG9uJ3Qg
dGhyb3cgZXhjZXB0aW9ucy4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTAzLDYgKzEwNyw5
IEBACiAgICAgICAgIGNhc2UgQVhWYWx1ZUNoYW5nZWQ6CiAgICAgICAgICAgICBtYWNOb3RpZmlj
YXRpb24gPSBOU0FjY2Vzc2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb247CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBWExpdmVSZWdpb25DcmVhdGVkOgorICAgICAgICAg
ICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbkNyZWF0ZWROb3Rp
ZmljYXRpb247CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBWExpdmVSZWdpb25D
aGFuZ2VkOgogICAgICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nlc3NpYmlsaXR5TGl2
ZVJlZ2lvbkNoYW5nZWROb3RpZmljYXRpb247CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE2NjYyNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA0LTAxICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFj
aEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcHJvdmUgQVJJQSBsaXZlIHJlZ2lvbiByZWxp
YWJpbGl0eSBieSBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgd2hlbiBsaXZlIHJlZ2lvbnMgYXJlIGNy
ZWF0ZWQvc2hvd24gYW5kIGhpZGRlbi9kZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDM4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvbGl2
ZS1yZWdpb24tY3JlYXRpb24tbm90aWZpY2F0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDE0LTA0LTAx
ICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDU1MgRXhj
bHVzaW9uc10gUmVtb3ZlIGV4Y2x1c2lvbnMgcGFyc2luZyBzdXBwb3J0CkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9saXZlLXJlZ2lvbi1jcmVhdGlvbi1ub3Rp
ZmljYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNj
ZXNzaWJpbGl0eS9saXZlLXJlZ2lvbi1jcmVhdGlvbi1ub3RpZmljYXRpb24uaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2xpdmUtcmVn
aW9uLWNyZWF0aW9uLW5vdGlmaWNhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisgICAgCis8ZGl2IGlk
PSJjb250ZW50Ij4KKzxkaXYgaWQ9ImZpcnN0IiByb2xlPSJsb2ciPjwvZGl2PgorPC9kaXY+CisK
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxz
Y3JpcHQ+CisgICAgCitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRoZSBBWExpdmVSZWdp
b25DcmVhdGVkIG5vdGlmaWNhdGlvbiBnZXRzIGZpcmVkIHdoZW4gbGl2ZSByZWdpb25zIGFwcGVh
ci4iKTsKK3ZhciBub3RpZmljYXRpb24gPSAwOwordmFyIGVsZW1lbnQgPSAwOworCitmdW5jdGlv
biBzdGFydFRlc3QoKSB7CisgICAgCisgICAgdmFyIEhJREUgPSB0cnVlOworICAgIHZhciB0ID0g
MTsKKyAgICAKKyAgICAvLyBhZGQgc2Vjb25kIGxpdmUgcmVnaW9uIGltbWVkaWF0ZWx5CisgICAg
YXBwZW5kTGl2ZVJlZ2lvbignc2Vjb25kJyk7CisgICAgCisgICAgLy8gYWRkIHRoaXJkIGxpdmUg
cmVnaW9uIGxhdGVyCisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGFwcGVuZExp
dmVSZWdpb24oJ3RoaXJkJyk7IH0sIHQqMSk7CisgICAgCisgICAgLy8gYWRkIGZvdXJ0aCBsaXZl
IHJlZ2lvbiAoaGlkZGVuKSwgdGhlbiBzaG93IGxhdGVyCisgICAgd2luZG93LnNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7IGFwcGVuZExpdmVSZWdpb24oJ2ZvdXJ0aCcsIEhJREUpOyB9LCB0KjIpOwor
ICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB1bmhpZGUoJ2ZvdXJ0aCcpOyB9LCB0
KjMpOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBhcHBlbmREaXYoJ2ZpZnRo
Jyk7IH0sIHQqNCk7CisgICAgCisgICAgLy8gdXBkYXRlIHRoZW0gc2VxdWVudGlhbGx5IGFmdGVy
IGFsbCBoYXZlIGJlZW4gbG9hZGVkCisgICAgd2luZG93LnNldFRpbWVvdXQodXBkYXRlQWxsLCB0
KjUpOworfQorCit2YXIgJCA9IGZ1bmN0aW9uKGlkKSB7CisgICAgcmV0dXJuIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGlkKTsKK30KKwordmFyIHVwZGF0ZUFsbCA9IGZ1bmN0aW9uKCkgeworICAg
IHZhciB0ID0gMTsKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgdXBkYXRlTGl2
ZVJlZ2lvbignZmlyc3QnKTsgfSwgdCoxKTsKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlv
bigpIHsgdXBkYXRlTGl2ZVJlZ2lvbignc2Vjb25kJyk7IH0sIHQqMik7CisgICAgd2luZG93LnNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7IHVwZGF0ZUxpdmVSZWdpb24oJ3RoaXJkJyk7IH0sIHQqMyk7
CisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHVwZGF0ZUxpdmVSZWdpb24oJ2Zv
dXJ0aCcpOyB9LCB0KjQpOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBlbmRU
ZXN0KCk7IH0sIHQqNSk7CisgICAgCit9Cit2YXIgdXBkYXRlTGl2ZVJlZ2lvbiA9IGZ1bmN0aW9u
KGlkKSB7CisgICAgdmFyIGxyID0gJChpZCk7CisgICAgbHIuaW5uZXJIVE1MID0gaWQ7Cit9Cit2
YXIgYXBwZW5kTGl2ZVJlZ2lvbiA9IGZ1bmN0aW9uKGlkLCBvcHRIaWRlKSB7CisgICAgdmFyIGxy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgbHIuaWQgPSBpZDsKKyAgICBs
ci5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbG9nJyk7CisgICAgaWYgKG9wdEhpZGUpIHsKKyAgICAg
ICAgbHIuaGlkZGVuID0gdHJ1ZTsKKyAgICB9CisgICAgJCgiY29udGVudCIpLmFwcGVuZENoaWxk
KGxyKTsKK30KK3ZhciBhcHBlbmREaXYgPSBmdW5jdGlvbihpZCkgeworICAgIHZhciBsciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGxyLmlkID0gaWQ7CisgICAgbHIuc2V0
QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7CisgICAgJCgiY29udGVudCIpLmFwcGVuZENoaWxk
KGxyKTsKK30KK3ZhciB1bmhpZGUgPSBmdW5jdGlvbihpZCl7CisgICAgJChpZCkuaGlkZGVuID0g
ZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGFyaWFDYWxsYmFjayhlbGVtZW50LCBub3RpZmljYXRpb24p
IHsKKyAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DcmVhdGVkIikgeworICAg
ICAgIGRlYnVnKCJQQVNTIFJlY2VpdmVkIGxpdmUgcmVnaW9uIGNyZWF0ZWQgbm90aWZpY2F0aW9u
OiAiICsgbm90aWZpY2F0aW9uICsgIjogIiArIGVsZW1lbnQuc3RyaW5nQXR0cmlidXRlVmFsdWUo
J0FYRE9NSWRlbnRpZmllcicpKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3QoKSB7Cisg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLnN0eWxlLmRpc3BsYXkgPSAnbm9u
ZSc7CisgICBmaW5pc2hKU1Rlc3QoKTsKK30KKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIHZhciBhZGRlZE5v
dGlmaWNhdGlvbiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyKGFyaWFDYWxsYmFjayk7CisKKyAgICAvLyBNYWtlIHN1cmUgQVggaXMgZW5hYmxlZCBieSBh
Y2Nlc3Npbmcgcm9vdCBlbGVtZW50LgorICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJvb3RF
bGVtZW50OworCisgICAgc3RhcnRUZXN0KCk7Cit9CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228348</attachid>
            <date>2014-04-01 17:43:35 -0700</date>
            <delta_ts>2014-04-02 09:26:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17708</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjYyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTA0LTAxICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcHJvdmUgQVJJ
QSBsaXZlIHJlZ2lvbiByZWxpYWJpbGl0eSBieSBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgd2hlbiBs
aXZlIHJlZ2lvbnMgYXJlIGNyZWF0ZWQvc2hvd24gYW5kIGhpZGRlbi9kZXN0cm95ZWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDM4MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlLW9yZ2FuaXplIHNv
bWUgY29kZSBzbyB0aGF0IHdoZW4gd2UgZGV0ZWN0IGEgbmV3IG5vZGUgaGFzIGJlZW4gY3JlYXRl
ZCwgd2UgY2FuIHNhZmVseSBkZXRlcm1pbmUgaXRzIGxpdmUgcmVnaW9uIHN0YXR1cy4KKyAgICAg
ICAgSWYgaXQgaXMgYSBsaXZlIHJlZ2lvbiwgd2UgZmlyZSBvZmYgYSBsaXZlIHJlZ2lvbiBjcmVh
dGVkIG5vdGlmaWNhdGlvbi4KKworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9saXZlLXJlZ2lvbi1jcmVhdGlvbi1ub3RpZmljYXRpb24uaHRtbAorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OmhhbmRsZUxpdmVSZWdpb25DcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoaWxk
cmVuQ2hhbmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlZmF1bHRMaXZl
UmVnaW9uU3RhdHVzRm9yUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpsaXZlUmVnaW9uU3RhdHVzSXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJQUxpdmVSZWdpb24pOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YXJpYUxpdmVSZWdpb25TdGF0dXMpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhTGl2ZVJlZ2lvblN0YXR1cyk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbik6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaDoKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcG9zdExpdmVSZWdp
b25DcmVhdGVkTm90aWZpY2F0aW9uXSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhP
YmplY3RDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RQ
bGF0Zm9ybU5vdGlmaWNhdGlvbik6CisKIDIwMTQtMDQtMDEgIFRpbW90aHkgSGF0Y2hlciAgPHRp
bW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBIZWFwUHJvZmlsZXIgZnJvbSB0aGUg
V2ViIEluc3BlY3RvciBwcm90b2NvbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMTY2MTk0KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMxLDggKzYzMSwzMCBAQAogICAgIHBvc3ROb3RpZmljYXRpb24oZ2V0T3JDcmVhdGUobm9kZSks
ICZkb2N1bWVudCgpLCBBWE1lbnVPcGVuZWQpOwogfQogICAgIAotdm9pZCBBWE9iamVjdENhY2hl
OjpjaGlsZHJlbkNoYW5nZWQoTm9kZSogbm9kZSkKK3ZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxl
TGl2ZVJlZ2lvbkNyZWF0ZWQoTm9kZSogbm9kZSkKIHsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgU3RyaW5n
IGxpdmVSZWdpb25TdGF0dXMgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGl2ZUF0
dHIpOworICAgIGlmIChsaXZlUmVnaW9uU3RhdHVzLmlzRW1wdHkoKSkgeworICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGFyaWFSb2xlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyb2xl
QXR0cik7CisgICAgICAgIGlmICghYXJpYVJvbGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbGl2
ZVJlZ2lvblN0YXR1cyA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlZmF1bHRMaXZlUmVnaW9uU3Rh
dHVzRm9yUm9sZShBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhUm9sZVRvV2ViQ29yZVJvbGUoYXJp
YVJvbGUpKTsKKyAgICB9CisgICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpdmVS
ZWdpb25TdGF0dXNJc0VuYWJsZWQobGl2ZVJlZ2lvblN0YXR1cykpCisgICAgICAgIHBvc3ROb3Rp
ZmljYXRpb24oZ2V0T3JDcmVhdGUobm9kZSksICZkb2N1bWVudCgpLCBBWExpdmVSZWdpb25DcmVh
dGVkKTsKK30KKyAgICAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6Y2hpbGRyZW5DaGFuZ2VkKE5vZGUq
IG5vZGUsIE5vZGUqIG5ld0NoaWxkKQoreworICAgIGlmIChuZXdDaGlsZCkgeworICAgICAgICBo
YW5kbGVNZW51T3BlbmVkKG5ld0NoaWxkKTsKKyAgICAgICAgaGFuZGxlTGl2ZVJlZ2lvbkNyZWF0
ZWQobmV3Q2hpbGQpOworICAgIH0KKyAgICAKICAgICBjaGlsZHJlbkNoYW5nZWQoZ2V0KG5vZGUp
KTsKIH0KIApAQCAtNjQwLDggKzY2MiwxMSBAQAogewogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobmV3Q2hpbGQpCisgICAgCisgICAgaWYgKG5ld0NoaWxkKSB7
CiAgICAgICAgIGhhbmRsZU1lbnVPcGVuZWQobmV3Q2hpbGQtPm5vZGUoKSk7CisgICAgICAgIGhh
bmRsZUxpdmVSZWdpb25DcmVhdGVkKG5ld0NoaWxkLT5ub2RlKCkpOworICAgIH0KICAgICAKICAg
ICBjaGlsZHJlbkNoYW5nZWQoZ2V0KHJlbmRlcmVyKSk7CiB9CkBAIC04OTQsNyArOTE5LDcgQEAK
ICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBhcmlhX2V4cGFuZGVkQXR0cikKICAgICAgICAgaGFu
ZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IGFyaWFfaGlkZGVuQXR0cikKLSAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKGVsZW1lbnQtPnBhcmVu
dE5vZGUoKSk7CisgICAgICAgIGNoaWxkcmVuQ2hhbmdlZChlbGVtZW50LT5wYXJlbnROb2RlKCks
IGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFyaWFfaW52YWxpZEF0dHIpCiAg
ICAgICAgIHBvc3ROb3RpZmljYXRpb24oZWxlbWVudCwgQVhPYmplY3RDYWNoZTo6QVhJbnZhbGlk
U3RhdHVzQ2hhbmdlZCk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQs
NyArMTA0LDcgQEAKIAogICAgIHZvaWQgZGV0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0
KiwgQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKTsKICAgICB2b2lkIGF0dGFjaFdyYXBwZXIo
QWNjZXNzaWJpbGl0eU9iamVjdCopOwotICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKE5vZGUqKTsK
KyAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChOb2RlKiwgTm9kZSogbmV3Q2hpbGQgPSBudWxscHRy
KTsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoQWNjZXNzaWJp
bGl0eU9iamVjdCopOwogICAgIHZvaWQgY2hlY2tlZFN0YXRlQ2hhbmdlZChOb2RlKik7CkBAIC0x
NjksNiArMTY5LDcgQEAKICAgICAgICAgQVhTZWxlY3RlZFRleHRDaGFuZ2VkLAogICAgICAgICBB
WFZhbHVlQ2hhbmdlZCwKICAgICAgICAgQVhTY3JvbGxlZFRvQW5jaG9yLAorICAgICAgICBBWExp
dmVSZWdpb25DcmVhdGVkLAogICAgICAgICBBWExpdmVSZWdpb25DaGFuZ2VkLAogICAgICAgICBB
WE1lbnVMaXN0SXRlbVNlbGVjdGVkLAogICAgICAgICBBWE1lbnVMaXN0VmFsdWVDaGFuZ2VkLApA
QCAtMjQzLDYgKzI0NCw3IEBACiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4sIEFYTm90aWZpY2F0aW9uPj4gbV9ub3RpZmljYXRpb25zVG9Qb3N0OwogICAg
IHZvaWQgbm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQoVGltZXI8QVhPYmplY3RDYWNoZT4mKTsK
ICAgICB2b2lkIGhhbmRsZU1lbnVPcGVuZWQoTm9kZSopOworICAgIHZvaWQgaGFuZGxlTGl2ZVJl
Z2lvbkNyZWF0ZWQoTm9kZSopOwogICAgIHZvaWQgaGFuZGxlTWVudUl0ZW1TZWxlY3RlZChOb2Rl
Kik7CiAgICAgCiAgICAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRJbWFnZU1h
cFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqKTsKQEAgLTI4OCw3ICsyOTAsNyBAQAogaW5saW5l
IHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0Kikg
eyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpjaGVja2VkU3RhdGVDaGFuZ2VkKE5vZGUq
KSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmNoaWxkcmVuQ2hhbmdlZChSZW5kZXJP
YmplY3QqLCBSZW5kZXJPYmplY3QqKSB7IH0KLWlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmNo
aWxkcmVuQ2hhbmdlZChOb2RlKikgeyB9CitpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpjaGls
ZHJlbkNoYW5nZWQoTm9kZSosIE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
OmNoaWxkcmVuQ2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjp0ZXh0Q2hhbmdlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGluZSB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnRleHRDaGFuZ2VkKE5vZGUqKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2
aXNpb24gMTY2MTk0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Miw3ICsxNDgyLDI0IEBACiAgICAg
ICAgICAgICBvYmotPmFyaWFUcmVlUm93cyhyZXN1bHQpOwogICAgIH0gICAgCiB9Ci0KKyAgICAK
K2NvbnN0IFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZWZhdWx0TGl2ZVJlZ2lvblN0YXR1
c0ZvclJvbGUoQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSkKK3sKKyAgICBzd2l0Y2ggKHJvbGUpIHsK
KyAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlOgorICAgIGNhc2UgQXBwbGljYXRp
b25BbGVydFJvbGU6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImFzc2VydGl2ZSIpOwor
ICAgIGNhc2UgQXBwbGljYXRpb25Mb2dSb2xlOgorICAgIGNhc2UgQXBwbGljYXRpb25TdGF0dXNS
b2xlOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJwb2xpdGUiKTsKKyAgICBjYXNlIEFw
cGxpY2F0aW9uVGltZXJSb2xlOgorICAgIGNhc2UgQXBwbGljYXRpb25NYXJxdWVlUm9sZToKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgib2ZmIik7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIG51bGxBdG9tOworICAgIH0KK30KKyAgICAKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkp
CiBjb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjdGlvblZlcmIoKSBjb25zdAog
ewpAQCAtMTgxOCwxMCArMTgzNSwxNCBAQAogICAgICAgICB8fCBoYXNBdHRyaWJ1dGUoYXJpYV9y
ZWxldmFudEF0dHIpOwogfQogICAgIAorYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaXZlUmVn
aW9uU3RhdHVzSXNFbmFibGVkKGNvbnN0IEF0b21pY1N0cmluZyYgbGl2ZVJlZ2lvblN0YXR1cykK
K3sKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobGl2ZVJlZ2lvblN0YXR1cywgInBvbGl0
ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGxpdmVSZWdpb25TdGF0dXMsICJhc3NlcnRpdmUiKTsK
K30KKyAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNBUklBTGl2ZVJlZ2lv
bigpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBsaXZlUmVnaW9uID0gYXJpYUxp
dmVSZWdpb25TdGF0dXMoKTsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobGl2ZVJlZ2lv
biwgInBvbGl0ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGxpdmVSZWdpb24sICJhc3NlcnRpdmUi
KTsKKyAgICByZXR1cm4gbGl2ZVJlZ2lvblN0YXR1c0lzRW5hYmxlZChhcmlhTGl2ZVJlZ2lvblN0
YXR1cygpKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCShyZXZpc2lvbiAxNjYxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODM2LDEwICs4MzYs
MTIgQEAKICAgICAvLyBBUklBIGxpdmUtcmVnaW9uIGZlYXR1cmVzLgogICAgIGJvb2wgc3VwcG9y
dHNBUklBTGl2ZVJlZ2lvbigpIGNvbnN0OwogICAgIGJvb2wgaXNJbnNpZGVBUklBTGl2ZVJlZ2lv
bigpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGl2ZVJlZ2lv
blN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG51bGxBdG9tOyB9CisgICAgdmlydHVhbCBjb25zdCBT
dHJpbmcgYXJpYUxpdmVSZWdpb25TdGF0dXMoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQog
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGl2ZVJlZ2lvblJlbGV2YW50KCkg
Y29uc3QgeyByZXR1cm4gbnVsbEF0b207IH0KICAgICB2aXJ0dWFsIGJvb2wgYXJpYUxpdmVSZWdp
b25BdG9taWMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBhcmlh
TGl2ZVJlZ2lvbkJ1c3koKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBjb25z
dCBTdHJpbmcgZGVmYXVsdExpdmVSZWdpb25TdGF0dXNGb3JSb2xlKEFjY2Vzc2liaWxpdHlSb2xl
KTsKKyAgICBzdGF0aWMgYm9vbCBsaXZlUmVnaW9uU3RhdHVzSXNFbmFibGVkKGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogICAgIAogICAgIGJvb2wgc3VwcG9ydHNBUklBQXR0cmlidXRlcygpIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNjYxOTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDQ5LDI5ICszMDQ5LDEyIEBACiAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4oKTsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhTGl2ZVJlZ2lvblN0YXR1cygp
IGNvbnN0Citjb25zdCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYUxpdmVS
ZWdpb25TdGF0dXMoKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9taWNTdHJpbmc+IGxpdmVSZWdpb25TdGF0dXNBc3NlcnRpdmUoImFzc2VydGl2ZSIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9taWNTdHJpbmc+IGxpdmVSZWdpb25TdGF0dXNQb2xpdGUoInBvbGl0ZSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGxpdmVSZWdpb25TdGF0dXNPZmYoIm9mZiIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIAogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgbGl2ZVJlZ2lvblN0YXR1cyA9IGdldEF0dHJpYnV0ZShhcmlhX2xpdmVBdHRyKTsKICAg
ICAvLyBUaGVzZSByb2xlcyBoYXZlIGltcGxpY2l0IGxpdmUgcmVnaW9uIHN0YXR1cy4KLSAgICBp
ZiAobGl2ZVJlZ2lvblN0YXR1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3dpdGNoIChyb2xlVmFs
dWUoKSkgewotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQWxlcnREaWFsb2dSb2xlOgotICAgICAg
ICBjYXNlIEFwcGxpY2F0aW9uQWxlcnRSb2xlOgotICAgICAgICAgICAgcmV0dXJuIGxpdmVSZWdp
b25TdGF0dXNBc3NlcnRpdmU7Ci0gICAgICAgIGNhc2UgQXBwbGljYXRpb25Mb2dSb2xlOgotICAg
ICAgICBjYXNlIEFwcGxpY2F0aW9uU3RhdHVzUm9sZToKLSAgICAgICAgICAgIHJldHVybiBsaXZl
UmVnaW9uU3RhdHVzUG9saXRlOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uVGltZXJSb2xlOgot
ICAgICAgICBjYXNlIEFwcGxpY2F0aW9uTWFycXVlZVJvbGU6Ci0gICAgICAgICAgICByZXR1cm4g
bGl2ZVJlZ2lvblN0YXR1c09mZjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChsaXZlUmVnaW9uU3RhdHVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGRlZmF1bHRMaXZlUmVnaW9uU3RhdHVzRm9yUm9sZShyb2xlVmFsdWUo
KSk7CiAKICAgICByZXR1cm4gbGl2ZVJlZ2lvblN0YXR1czsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oCShyZXZpc2lvbiAxNjYxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDcgKzI3OCw3
IEBACiAgICAgCiAgICAgdmlydHVhbCBFU3BlYWsgc3BlYWtQcm9wZXJ0eSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIAotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGl2ZVJlZ2lv
blN0YXR1cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nIGFyaWFM
aXZlUmVnaW9uU3RhdHVzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGFyaWFMaXZlUmVnaW9uUmVsZXZhbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgYXJpYUxpdmVSZWdpb25BdG9taWMoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgYXJpYUxpdmVSZWdpb25CdXN5KCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJ
T1MubW0JKHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDkgQEAK
ICAgICAgICAgY2FzZSBBWExpdmVSZWdpb25DaGFuZ2VkOgogICAgICAgICAgICAgW29iai0+d3Jh
cHBlcigpIHBvc3RMaXZlUmVnaW9uQ2hhbmdlTm90aWZpY2F0aW9uXTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFYTGl2ZVJlZ2lvbkNyZWF0ZWQ6CisgICAgICAgICAgICBbb2Jq
LT53cmFwcGVyKCkgcG9zdExpdmVSZWdpb25DcmVhdGVkTm90aWZpY2F0aW9uXTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFYQ2hpbGRyZW5DaGFuZ2VkOgogICAgICAgICAgICAg
W29iai0+d3JhcHBlcigpIHBvc3RDaGlsZHJlbkNoYW5nZWROb3RpZmljYXRpb25dOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgJ
KHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYg
KzYwLDcgQEAKIC0gKHZvaWQpcG9zdExvYWRDb21wbGV0ZU5vdGlmaWNhdGlvbjsKIC0gKHZvaWQp
cG9zdENoaWxkcmVuQ2hhbmdlZE5vdGlmaWNhdGlvbjsKIC0gKHZvaWQpcG9zdEludmFsaWRTdGF0
dXNDaGFuZ2VkTm90aWZpY2F0aW9uOworLSAodm9pZClwb3N0TGl2ZVJlZ2lvbkNyZWF0ZWROb3Rp
ZmljYXRpb247CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0JKHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzY3LDYgKzEzNjcsMTEgQEAKICAgICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3
cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uLiAg
ICAKIH0KIAorLSAodm9pZClwb3N0TGl2ZVJlZ2lvbkNyZWF0ZWROb3RpZmljYXRpb24KK3sKKyAg
ICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBv
c3QgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uLiAgICAKK30KKwogLSAodm9pZClwb3N0TG9hZENv
bXBsZXRlTm90aWZpY2F0aW9uCiB7CiAgICAgLy8gVGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3Jh
cHBlciB3aWxsIG92ZXJyaWRlIGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5vdGlmaWNhdGlvbi4gICAg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE2NjE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDEwIEBACiAjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUxpdmVSZWdpb25DaGFuZ2VkTm90aWZp
Y2F0aW9uIEAiQVhMaXZlUmVnaW9uQ2hhbmdlZCIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eUxpdmVSZWdpb25DcmVhdGVkTm90aWZpY2F0aW9uIAorI2RlZmluZSBOU0FjY2Vzc2li
aWxpdHlMaXZlUmVnaW9uQ3JlYXRlZE5vdGlmaWNhdGlvbiBAIkFYTGl2ZVJlZ2lvbkNyZWF0ZWQi
CisjZW5kaWYKKwogLy8gVGhlIHNpbXBsZSBDb2NvYSBjYWxscyBpbiB0aGlzIGZpbGUgZG9uJ3Qg
dGhyb3cgZXhjZXB0aW9ucy4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTAzLDYgKzEwNyw5
IEBACiAgICAgICAgIGNhc2UgQVhWYWx1ZUNoYW5nZWQ6CiAgICAgICAgICAgICBtYWNOb3RpZmlj
YXRpb24gPSBOU0FjY2Vzc2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb247CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBWExpdmVSZWdpb25DcmVhdGVkOgorICAgICAgICAg
ICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbkNyZWF0ZWROb3Rp
ZmljYXRpb247CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBWExpdmVSZWdpb25D
aGFuZ2VkOgogICAgICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gTlNBY2Nlc3NpYmlsaXR5TGl2
ZVJlZ2lvbkNoYW5nZWROb3RpZmljYXRpb247CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE2NjYyNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA0LTAxICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFj
aEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcHJvdmUgQVJJQSBsaXZlIHJlZ2lvbiByZWxp
YWJpbGl0eSBieSBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgd2hlbiBsaXZlIHJlZ2lvbnMgYXJlIGNy
ZWF0ZWQvc2hvd24gYW5kIGhpZGRlbi9kZXN0cm95ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDM4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvbGl2
ZS1yZWdpb24tY3JlYXRpb24tbm90aWZpY2F0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDE0LTA0LTAx
ICBab2x0YW4gSG9ydmF0aCAgPHpvbHRhbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDU1MgRXhj
bHVzaW9uc10gUmVtb3ZlIGV4Y2x1c2lvbnMgcGFyc2luZyBzdXBwb3J0CkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9saXZlLXJlZ2lvbi1jcmVhdGlvbi1ub3Rp
ZmljYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNj
ZXNzaWJpbGl0eS9saXZlLXJlZ2lvbi1jcmVhdGlvbi1ub3RpZmljYXRpb24uaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2xpdmUtcmVn
aW9uLWNyZWF0aW9uLW5vdGlmaWNhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisgICAgCis8ZGl2IGlk
PSJjb250ZW50Ij4KKzxkaXYgaWQ9ImZpcnN0IiByb2xlPSJsb2ciPjwvZGl2PgorPC9kaXY+CisK
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxz
Y3JpcHQ+CisgICAgCitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRoZSBBWExpdmVSZWdp
b25DcmVhdGVkIG5vdGlmaWNhdGlvbiBnZXRzIGZpcmVkIHdoZW4gbGl2ZSByZWdpb25zIGFwcGVh
ci4iKTsKK3ZhciBub3RpZmljYXRpb24gPSAwOwordmFyIGVsZW1lbnQgPSAwOworCitmdW5jdGlv
biBzdGFydFRlc3QoKSB7CisgICAgCisgICAgdmFyIEhJREUgPSB0cnVlOworICAgIHZhciB0ID0g
MTsKKyAgICAKKyAgICAvLyBhZGQgc2Vjb25kIGxpdmUgcmVnaW9uIGltbWVkaWF0ZWx5CisgICAg
YXBwZW5kTGl2ZVJlZ2lvbignc2Vjb25kJyk7CisgICAgCisgICAgLy8gYWRkIHRoaXJkIGxpdmUg
cmVnaW9uIGxhdGVyCisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGFwcGVuZExp
dmVSZWdpb24oJ3RoaXJkJyk7IH0sIHQqMSk7CisgICAgCisgICAgLy8gYWRkIGZvdXJ0aCBsaXZl
IHJlZ2lvbiAoaGlkZGVuKSwgdGhlbiBzaG93IGxhdGVyCisgICAgd2luZG93LnNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7IGFwcGVuZExpdmVSZWdpb24oJ2ZvdXJ0aCcsIEhJREUpOyB9LCB0KjIpOwor
ICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB1bmhpZGUoJ2ZvdXJ0aCcpOyB9LCB0
KjMpOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBhcHBlbmREaXYoJ2ZpZnRo
Jyk7IH0sIHQqNCk7CisgICAgCisgICAgLy8gdXBkYXRlIHRoZW0gc2VxdWVudGlhbGx5IGFmdGVy
IGFsbCBoYXZlIGJlZW4gbG9hZGVkCisgICAgd2luZG93LnNldFRpbWVvdXQodXBkYXRlQWxsLCB0
KjUpOworfQorCit2YXIgJCA9IGZ1bmN0aW9uKGlkKSB7CisgICAgcmV0dXJuIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGlkKTsKK30KKwordmFyIHVwZGF0ZUFsbCA9IGZ1bmN0aW9uKCkgeworICAg
IHZhciB0ID0gMTsKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgdXBkYXRlTGl2
ZVJlZ2lvbignZmlyc3QnKTsgfSwgdCoxKTsKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlv
bigpIHsgdXBkYXRlTGl2ZVJlZ2lvbignc2Vjb25kJyk7IH0sIHQqMik7CisgICAgd2luZG93LnNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7IHVwZGF0ZUxpdmVSZWdpb24oJ3RoaXJkJyk7IH0sIHQqMyk7
CisgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHVwZGF0ZUxpdmVSZWdpb24oJ2Zv
dXJ0aCcpOyB9LCB0KjQpOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBlbmRU
ZXN0KCk7IH0sIHQqNSk7CisgICAgCit9Cit2YXIgdXBkYXRlTGl2ZVJlZ2lvbiA9IGZ1bmN0aW9u
KGlkKSB7CisgICAgdmFyIGxyID0gJChpZCk7CisgICAgbHIuaW5uZXJIVE1MID0gaWQ7Cit9Cit2
YXIgYXBwZW5kTGl2ZVJlZ2lvbiA9IGZ1bmN0aW9uKGlkLCBvcHRIaWRlKSB7CisgICAgdmFyIGxy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgbHIuaWQgPSBpZDsKKyAgICBs
ci5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbG9nJyk7CisgICAgaWYgKG9wdEhpZGUpIHsKKyAgICAg
ICAgbHIuaGlkZGVuID0gdHJ1ZTsKKyAgICB9CisgICAgJCgiY29udGVudCIpLmFwcGVuZENoaWxk
KGxyKTsKK30KK3ZhciBhcHBlbmREaXYgPSBmdW5jdGlvbihpZCkgeworICAgIHZhciBsciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGxyLmlkID0gaWQ7CisgICAgbHIuc2V0
QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7CisgICAgJCgiY29udGVudCIpLmFwcGVuZENoaWxk
KGxyKTsKK30KK3ZhciB1bmhpZGUgPSBmdW5jdGlvbihpZCl7CisgICAgJChpZCkuaGlkZGVuID0g
ZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGFyaWFDYWxsYmFjayhlbGVtZW50LCBub3RpZmljYXRpb24p
IHsKKyAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DcmVhdGVkIikgeworICAg
ICAgIGRlYnVnKCJQQVNTIFJlY2VpdmVkIGxpdmUgcmVnaW9uIGNyZWF0ZWQgbm90aWZpY2F0aW9u
OiAiICsgbm90aWZpY2F0aW9uICsgIjogIiArIGVsZW1lbnQuc3RyaW5nQXR0cmlidXRlVmFsdWUo
J0FYRE9NSWRlbnRpZmllcicpKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3QoKSB7Cisg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLnN0eWxlLmRpc3BsYXkgPSAnbm9u
ZSc7CisgICBmaW5pc2hKU1Rlc3QoKTsKK30KKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIHZhciBhZGRlZE5v
dGlmaWNhdGlvbiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyKGFyaWFDYWxsYmFjayk7CisKKyAgICAvLyBNYWtlIHN1cmUgQVggaXMgZW5hYmxlZCBieSBh
Y2Nlc3Npbmcgcm9vdCBlbGVtZW50LgorICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJvb3RF
bGVtZW50OworCisgICAgc3RhcnRUZXN0KCk7Cit9CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="252635"
          type_id="1"
          status="+"
          setter="mario"
    />
          </attachment>
      

    </bug>

</bugzilla>