<?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>94751</bug_id>
          
          <creation_ts>2012-08-22 15:09:56 -0700</creation_ts>
          <short_desc>[chromium] Use an opaque type for texture priority</short_desc>
          <delta_ts>2012-10-08 16:13:37 -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>New Bugs</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Christopher Cameron">ccameron</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ccameron</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>peter+ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>702397</commentid>
    <comment_count>0</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-22 15:09:56 -0700</bug_when>
    <thetext>[chromium] Use an opaque type for texture priority</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702401</commentid>
    <comment_count>1</comment_count>
      <attachid>160018</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-22 15:15:09 -0700</bug_when>
    <thetext>Created attachment 160018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702402</commentid>
    <comment_count>2</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-22 15:17:08 -0700</bug_when>
    <thetext>Adding epenner to review prioritized texture manager changes.

Adding enne as reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702427</commentid>
    <comment_count>3</comment_count>
      <attachid>160018</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 15:28:09 -0700</bug_when>
    <thetext>Comment on attachment 160018
Patch

Attachment 160018 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13558459</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702507</commentid>
    <comment_count>4</comment_count>
      <attachid>160018</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-08-22 16:31:14 -0700</bug_when>
    <thetext>Comment on attachment 160018
Patch

Attachment 160018 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13574153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702511</commentid>
    <comment_count>5</comment_count>
      <attachid>160031</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-22 16:35:43 -0700</bug_when>
    <thetext>Created attachment 160031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702519</commentid>
    <comment_count>6</comment_count>
      <attachid>160031</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 16:47:05 -0700</bug_when>
    <thetext>Comment on attachment 160031
Patch

Attachment 160031 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13570434</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702550</commentid>
    <comment_count>7</comment_count>
      <attachid>160031</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-08-22 17:34:01 -0700</bug_when>
    <thetext>Comment on attachment 160031
Patch

Attachment 160031 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13568432</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702592</commentid>
    <comment_count>8</comment_count>
      <attachid>160056</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-22 18:10:08 -0700</bug_when>
    <thetext>Created attachment 160056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702614</commentid>
    <comment_count>9</comment_count>
      <attachid>160056</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-22 18:40:07 -0700</bug_when>
    <thetext>Comment on attachment 160056
Patch

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

LGTM in general. Although I&apos;m curious what else will go inside the CCPriority.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.h:-131
&gt; -    size_t m_priority;

Yikes, I&apos;m surprised there isn&apos;t a warning somewhere for this. Should have all been changed to int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702709</commentid>
    <comment_count>10</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-22 22:48:56 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 160056 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160056&amp;action=review
&gt; 
&gt; Although I&apos;m curious what else will go inside the CCPriority.

In the short term, I plan to store information about &quot;this is a known distance away from the viewport&quot;, so I can evict those textures that are &gt;2-3 screens away from the viewport, without evicting the lingering textures first (but not otherwise altering the scoring scheme).  

Long term, when we have known distances for everything, this can probably go back to just having an int in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703118</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-23 10:23:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 160056 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160056&amp;action=review
&gt; &gt; 
&gt; &gt; Although I&apos;m curious what else will go inside the CCPriority.
&gt; 
&gt; In the short term, I plan to store information about &quot;this is a known distance away from the viewport&quot;, so I can evict those textures that are &gt;2-3 screens away from the viewport, without evicting the lingering textures first (but not otherwise altering the scoring scheme).

Evicting textures that are 2-3 screens away seems like it could already be done by issuing a smaller texture budget and leaning on the prioritized texture manager to make the decision about which textures should be thrown away or not.

Why do you need a separate mechanism for this?  It seem like if you add additional information that can be used to prioritize textures, then the texture manager should be the one using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703256</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-23 12:32:25 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (From update of attachment 160056 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160056&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Although I&apos;m curious what else will go inside the CCPriority.
&gt; &gt; 
&gt; &gt; In the short term, I plan to store information about &quot;this is a known distance away from the viewport&quot;, so I can evict those textures that are &gt;2-3 screens away from the viewport, without evicting the lingering textures first (but not otherwise altering the scoring scheme).
&gt; 
&gt; Evicting textures that are 2-3 screens away seems like it could already be done by issuing a smaller texture budget and leaning on the prioritized texture manager to make the decision about which textures should be thrown away or not.
&gt; 
&gt; Why do you need a separate mechanism for this?  It seem like if you add additional information that can be used to prioritize textures, then the texture manager should be the one using it.

Is this perhaps in the context of the impl thread doing some management, since that&apos;s where GPU memory manager limits arrive via the graphics context on that thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703347</commentid>
    <comment_count>13</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-23 14:13:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)

&gt; &gt; Why do you need a separate mechanism for this?  It seem like if you add additional information that can be used to prioritize textures, then the texture manager should be the one using it.
&gt; 
&gt; Is this perhaps in the context of the impl thread doing some management, since that&apos;s where GPU memory manager limits arrive via the graphics context on that thread?

That&apos;s exactly it.  This is so that the impl thread can evict &quot;some but not all&quot; textures.  The impl thread will need to guess which textures the main thread would have deleted (were the main thread to have made the choice), since it doesn&apos;t have direct access to the prioritized texture manager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703356</commentid>
    <comment_count>14</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-23 14:18:25 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; 
&gt; &gt; &gt; Why do you need a separate mechanism for this?  It seem like if you add additional information that can be used to prioritize textures, then the texture manager should be the one using it.
&gt; &gt; 
&gt; &gt; Is this perhaps in the context of the impl thread doing some management, since that&apos;s where GPU memory manager limits arrive via the graphics context on that thread?
&gt; 
&gt; That&apos;s exactly it.  This is so that the impl thread can evict &quot;some but not all&quot; textures.  The impl thread will need to guess which textures the main thread would have deleted (were the main thread to have made the choice), since it doesn&apos;t have direct access to the prioritized texture manager.

Adding additional data to priority isn&apos;t going to help the compositor thread.  Priority is a main-thread only concept, at this point.

What about making the texture manager thread-safe and accessible by both threads? I feel like this need has come up before (removing just some textures without a commit) and I suspect impl-side painting is going to need to touch on this as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703366</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-23 14:22:17 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (In reply to comment #11)
&gt; &gt; 
&gt; &gt; &gt; &gt; Why do you need a separate mechanism for this?  It seem like if you add additional information that can be used to prioritize textures, then the texture manager should be the one using it.
&gt; &gt; &gt; 
&gt; &gt; &gt; Is this perhaps in the context of the impl thread doing some management, since that&apos;s where GPU memory manager limits arrive via the graphics context on that thread?
&gt; &gt; 
&gt; &gt; That&apos;s exactly it.  This is so that the impl thread can evict &quot;some but not all&quot; textures.  The impl thread will need to guess which textures the main thread would have deleted (were the main thread to have made the choice), since it doesn&apos;t have direct access to the prioritized texture manager.
&gt; 
&gt; Adding additional data to priority isn&apos;t going to help the compositor thread.  Priority is a main-thread only concept, at this point.
&gt; 
&gt; What about making the texture manager thread-safe and accessible by both threads? I feel like this need has come up before (removing just some textures without a commit) and I suspect impl-side painting is going to need to touch on this as well.

Main thread is blocked when the PTM sorts all the textures by priority. This sorted list shouldn&apos;t be modified when the main thread isn&apos;t blocked, IIRC? So impl should be able to just read that list and drop the top textures from it until satisfied. And main thread should be able to do the same later and make the same choices?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703378</commentid>
    <comment_count>16</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-23 14:31:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt;
&gt; &gt; What about making the texture manager thread-safe and accessible by both threads? I feel like this need has come up before (removing just some textures without a commit) and I suspect impl-side painting is going to need to touch on this as well.
&gt; 
&gt; Main thread is blocked when the PTM sorts all the textures by priority. This sorted list shouldn&apos;t be modified when the main thread isn&apos;t blocked, IIRC? So impl should be able to just read that list and drop the top textures from it until satisfied. And main thread should be able to do the same later and make the same choices?

Well, it&apos;s more than that, though.  I think the impl thread is eventually going to need to be able to reprioritize on its own somehow.  What if you&apos;ve scrolled a whole bunch while the main thread was churning on Javascript and you suddenly need to toss out some textures?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703389</commentid>
    <comment_count>17</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-23 14:38:10 -0700</bug_when>
    <thetext>(In reply to comment #16)

&gt; Well, it&apos;s more than that, though.  I think the impl thread is eventually going to need to be able to reprioritize on its own somehow.  What if you&apos;ve scrolled a whole bunch while the main thread was churning on Javascript and you suddenly need to toss out some textures?

I agree with this, and would say that the main thread should eventually have no interaction with the PTM at all.

At the moment, the main thread&apos;s interaction with the PTM is that it
1. Sets priorities based on the viewport
2. Decides what it needs to re-paint (it checks to see if the backing has been destroyed).

For (1), the main thread isn&apos;t competent to do this (as enne pointed out)
For (2), I&apos;d imagine that impl-side painting would move this off of the main thread (and of course, then, it doesn&apos;t have to worry about not knowing what textures the impl thread has destroyed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703397</commentid>
    <comment_count>18</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-23 14:43:34 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; For (2), I&apos;d imagine that impl-side painting would move this off of the main thread (and of course, then, it doesn&apos;t have to worry about not knowing what textures the impl thread has destroyed).

Well, then it will be an update thread instead of main thread, there are the same/similar cross thread issues to deal with though?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703407</commentid>
    <comment_count>19</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-23 14:46:48 -0700</bug_when>
    <thetext>All of that said, my plan here was to make it be the case that when the state of a tab is changed, this changes the actual priorities of the various textures.

&gt; In the short term, I plan to store information about &quot;this is a known distance away from the viewport&quot;, so I can evict those textures that are &gt;2-3 screens away from the viewport, without evicting the lingering textures first (but not otherwise altering the scoring scheme).  

To think about this more... that isn&apos;t a good idea -- I should change the scoring scheme now (in particular, make lingering resources be more-important-priority than all offscreen resources, so that I can just adjust the cutoff to effect changes in policy).

So I&apos;ll just abandon this patch (unless having an opaque type is considered good for its own sake, which maybe it is...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703418</commentid>
    <comment_count>20</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-23 14:53:51 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; For (2), I&apos;d imagine that impl-side painting would move this off of the main thread (and of course, then, it doesn&apos;t have to worry about not knowing what textures the impl thread has destroyed).
&gt; 
&gt; Well, then it will be an update thread instead of main thread, there are the same/similar cross thread issues to deal with though?

The big difficulty is in issue (1), where the priorities can be changed by the main thread.

True, issue (2) still exists, but it is not nearly as hard a problem as (1) -- the amount of state that needs to be shared is fairly simple and localized (the impl thread needs to know &quot;what things are other threads currently painting&quot;, and the update thread needs to know &quot;don&apos;t grab more work for just a second because a reprioritization is in progress&quot;).

This all comes with the caveat that I&apos;m not up to speed on impl-side painting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703441</commentid>
    <comment_count>21</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-08-23 15:10:50 -0700</bug_when>
    <thetext>(In reply to comment #20)

If we have to make a priority call beteween doing things an impl-side-painting sort of way and alternatives that dont enable it, I think we should favor impl-side painting. Its very important that we make that happen.

If I understand right, this work is to allow memory limits be adjustable. This is a feature-level goal, but since we&apos;ve got a good solution shipping now, it may be that moving impl-side painting is higher priority than making memory limits adjustable in an already working system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703454</commentid>
    <comment_count>22</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-23 15:23:24 -0700</bug_when>
    <thetext>Closing this out, since I&apos;ll go about this a different way.  Thanks for the feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703535</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-08-23 16:42:02 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Closing this out, since I&apos;ll go about this a different way.  Thanks for the feedback!

Since I already wrote this, here goes:

I think the only case where multi-threading might help impl-side painting would be when we have many paint jobs in queue, and don&apos;t want to pre-allocate textures for all those jobs. So we might want a way to do &apos;acquireTexture()&apos; and steal textures as late as possible on a paint thread (this also requires zero-copy multi-threaded access to write to the textures). I think ideally though most of it should stay on the impl thread. It gets very confusing if, for example, priorities are set or textures are prioritized on other threads, or something like that.

For partially managing textures on impl thread, that&apos;s tricky and not sure what the best solution is there... Best I can think of would be to have flags on each texture (eg &apos;visible&apos;) that are pushed to the impl thread, such that we can delete some textures instead of all of them (and then notify similar to what we do now via &apos;allBackingTexturesWereDeleted&apos;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703592</commentid>
    <comment_count>24</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-23 17:40:21 -0700</bug_when>
    <thetext>(In reply to comment #23)

&gt; For partially managing textures on impl thread, that&apos;s tricky and not sure what the best solution is there... Best I can think of would be to have flags on each texture (eg &apos;visible&apos;) that are pushed to the impl thread

This was what I was thinking with this patch -- the flag would be stored somewhere in the opaque structure and then sent to the impl thread.

Then Dana pointed out that the priorities are only updated and sorted when the main and impl threads are at their sync-point.  Because this is the case, I can safely read through the priority list in the impl thread to decide what to kill.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737179</commentid>
    <comment_count>25</comment_count>
      <attachid>160056</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-08 16:13:37 -0700</bug_when>
    <thetext>Comment on attachment 160056
Patch

Cleared review? from attachment 160056 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160018</attachid>
            <date>2012-08-22 15:15:09 -0700</date>
            <delta_ts>2012-08-22 16:35:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94751-20120822151507.patch</filename>
            <type>text/plain</type>
            <size>13492</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY4OTBlNTI4ZGI2ZmM5
Y2ZkNzJhMzc0ZTVlZjM0MmY5MTdjMDFlZS4uZTdhODc0NmIzZGY2YjI1YzM2Y2Y0MmJjODQ1MzBj
ZGMyZThhNmE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA4LTIyICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gVXNlIGFuIG9wYXF1ZSB0eXBlIGZvciB0ZXh0dXJlIHByaW9yaXR5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDc1MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBhbiBvcHFhdWUgdHlwZSBm
b3IgcHJpb3JpdHkuICBXZSB1c2VkIHNpemVfdCAoaW4KKyAgICAgICAgQ0NQcmlvcml0aXplZFRl
eHR1cmUpIGFuZCBpbnQgKGV2ZXJ5d2hlcmUgZWxzZSkgYmVmb3JlLiAgV2Ugd2lsbCB3YW50Cisg
ICAgICAgIHRvIGluY2x1ZGUgbW9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgcHJpb3JpdHkgdmFsdWUg
c28gdGhhdCB3ZSBjYW4KKyAgICAgICAgZGlzY2FyZCBvbmx5LXNvbWUgdGV4dHVyZXMgZnJvbSB0
aGUgaW1wbCB0aHJlYWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlOjpzZXRSZXF1ZXN0UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlv
cml0aXplZFRleHR1cmU6OnJlcXVlc3RQcmlvcml0eSk6CisgICAgICAgIChDQ1ByaW9yaXRpemVk
VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y29tcGFyZVRleHR1
cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y29t
cGFyZUJhY2tpbmdzKToKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnJlbmRlclN1cmZh
Y2VQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bGlu
Z2VyaW5nUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmg6CisgICAg
ICAgIChDQ1ByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHk6OkNDUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ1ByaW9yaXR5Q2FsY3VsYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6aGlnaGVzdFByaW9yaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0
eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xv
d2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlz
SGlnaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0
eUlzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6Om1heFBy
aW9yaXR5KToKKwogMjAxMi0wOC0yMCAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENvbnZlcnQgc2NyZWVuIHNwYWNlIHNjcm9sbCBn
ZXN0dXJlcyB0byBsYXllciBzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggY2NlMTYzNTIyYmIyZDdjMjQyZGRjNDM5NzVhNGM5MjM5Y2Y5Y2FhYi4uNDUwMzcxNjM1Mzk2
ZmU5MjEwNjllOWM1MTkwYmY3YjgxMjVhZmFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC01ODIsMTIgKzU4MiwxMyBAQCB2b2lkIHNldFByaW9yaXR5Rm9yVGV4dHVyZShj
b25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpb3JpdHlDYWxjLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc1NtYWxsQW5pbWF0ZWRMYXllciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIGludCBwcmlv
cml0eSA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpOworCisgICAgQ0NQ
cmlvcml0eSBwcmlvcml0eSA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgp
OwogICAgIGlmICghdmlzaWJsZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICBwcmlvcml0eSA9IHBy
aW9yaXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5jZSh2aXNpYmxlUmVjdCwgdGlsZVJlY3QsIGRy
YXdzVG9Sb290KTsKICAgICBpZiAoaXNTbWFsbEFuaW1hdGVkTGF5ZXIpCiAgICAgICAgIHByaW9y
aXR5ID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Om1heFByaW9yaXR5KHByaW9yaXR5LCBwcmlvcml0
eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2UoNTEyLCBkcmF3c1RvUm9vdCkpOwotICAgIGlmIChw
cmlvcml0eSAhPSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKKyAgICBp
ZiAoIUNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzRXF1YWwocHJpb3JpdHksIENDUHJp
b3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpKSkKICAgICAgICAgdGV4dHVyZS0+c2V0
UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5KTsKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRp
emVkVGV4dHVyZS5oCmluZGV4IDM3ODlkN2YyNjlhM2Q3ZTUxOTVhODkyZGRkMzc2ZGFlNjE4ZDJi
MGUuLjcyM2IyNzcyNWQ3MDNkZDRhOGMyYjM3YWIxMjRiMzYwMDM4Mzc1MjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaApAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlczsgfQogCiAgICAgLy8gU2V0
IHByaW9yaXR5IGZvciB0aGUgcmVxdWVzdGVkIHRleHR1cmUuIAotICAgIHZvaWQgc2V0UmVxdWVz
dFByaW9yaXR5KGludCBwcmlvcml0eSkgeyBtX3ByaW9yaXR5ID0gcHJpb3JpdHk7IH0KLSAgICBp
bnQgcmVxdWVzdFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9wcmlvcml0eTsgfQorICAgIHZv
aWQgc2V0UmVxdWVzdFByaW9yaXR5KGNvbnN0IENDUHJpb3JpdHkmIHByaW9yaXR5KSB7IG1fcHJp
b3JpdHkgPSBwcmlvcml0eTsgfQorICAgIGNvbnN0IENDUHJpb3JpdHkmIHJlcXVlc3RQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHk7IH0KIAogICAgIC8vIEFmdGVyIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlOjpwcmlvcml0aXplVGV4dHVyZXMoKSBpcyBjYWxsZWQsIHRoaXMgcmV0dXJu
cwogICAgIC8vIGlmIHRoZSB0aGUgcmVxdWVzdCBzdWNjZWVkZWQgYW5kIHRoaXMgdGV4dHVyZSBj
YW4gYmUgYWNxdWlyZWQgZm9yIHVzZS4KQEAgLTEyOCw3ICsxMjgsNyBAQCBwcml2YXRlOgogICAg
IEdDM0RlbnVtIG1fZm9ybWF0OwogICAgIHNpemVfdCBtX2J5dGVzOwogCi0gICAgc2l6ZV90IG1f
cHJpb3JpdHk7CisgICAgQ0NQcmlvcml0eSBtX3ByaW9yaXR5OwogICAgIGJvb2wgbV9pc0Fib3Zl
UHJpb3JpdHlDdXRvZmY7CiAgICAgYm9vbCBtX2lzU2VsZk1hbmFnZWQ7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDRhMjQxNzlj
NTc4MGE2ODJjNGVkNGFkODMzYzE2YTI3ZTZkMGQ4ZDcuLmY4MzMzMTQ2NWJmMzc1NDE3Mjk3NDg0
Mzc2ZTViOWJiNWZmMzkyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyLmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICBtX3ByaW9yaXR5Q3V0b2Zm
ID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7CiAgICAgc2l6ZV90IG1l
bW9yeUJ5dGVzID0gMDsKICAgICBmb3IgKFRleHR1cmVWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29y
dGVkVGV4dHVyZXMuYmVnaW4oKTsgaXQgIT0gc29ydGVkVGV4dHVyZXMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgaWYgKCgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKSA9PSBDQ1ByaW9yaXR5Q2FsY3Vs
YXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKKyAgICAgICAgaWYgKENDUHJpb3JpdHlDYWxjdWxhdG9y
Ojpwcmlvcml0eUlzRXF1YWwoKCppdCktPnJlcXVlc3RQcmlvcml0eSgpLCBDQ1ByaW9yaXR5Q2Fs
Y3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBpZiAoKCppdCktPmlzU2VsZk1hbmFnZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAppbmRleCAxM2RiYzUxNzZiY2Q3OGVlMjk3MDkwYTY3
NjUxMjQ1ZjliZDc2NGNhLi5iMWUzMjg5NmE5ZGU1MjhmM2UyNzBiY2JkYjJlMmQ3ZTY4ZjlkYmQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaApA
QCAtOTQsMTYgKzk0LDE2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29tcGFyZSB0ZXh0dXJlcy4gSGln
aGVzdCBwcmlvcml0eSBmaXJzdC4KICAgICBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVRleHR1
cmVzKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBhLCBDQ1ByaW9yaXRpemVkVGV4dHVyZSogYikKICAg
ICB7Ci0gICAgICAgIGlmIChhLT5yZXF1ZXN0UHJpb3JpdHkoKSA9PSBiLT5yZXF1ZXN0UHJpb3Jp
dHkoKSkKKyAgICAgICAgaWYgKENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzRXF1YWwo
YS0+cmVxdWVzdFByaW9yaXR5KCksIGItPnJlcXVlc3RQcmlvcml0eSgpKSkKICAgICAgICAgICAg
IHJldHVybiBhIDwgYjsKICAgICAgICAgcmV0dXJuIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlv
cml0eUlzSGlnaGVyKGEtPnJlcXVlc3RQcmlvcml0eSgpLCBiLT5yZXF1ZXN0UHJpb3JpdHkoKSk7
CiAgICAgfQogICAgIC8vIENvbXBhcmUgYmFja2luZ3MuIExvd2VzdCBwcmlvcml0eSBmaXJzdC4K
ICAgICBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUJhY2tpbmdzKENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpCYWNraW5nKiBhLCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYikKICAgICB7
Ci0gICAgICAgIGludCBwcmlvcml0eUEgPSBhLT5vd25lcigpID8gYS0+b3duZXIoKS0+cmVxdWVz
dFByaW9yaXR5KCkgOiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKLSAg
ICAgICAgaW50IHByaW9yaXR5QiA9IGItPm93bmVyKCkgPyBiLT5vd25lcigpLT5yZXF1ZXN0UHJp
b3JpdHkoKSA6IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpOwotICAgICAg
ICBpZiAocHJpb3JpdHlBID09IHByaW9yaXR5QikKKyAgICAgICAgQ0NQcmlvcml0eSBwcmlvcml0
eUEgPSBhLT5vd25lcigpID8gYS0+b3duZXIoKS0+cmVxdWVzdFByaW9yaXR5KCkgOiBDQ1ByaW9y
aXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKKyAgICAgICAgQ0NQcmlvcml0eSBwcmlv
cml0eUIgPSBiLT5vd25lcigpID8gYi0+b3duZXIoKS0+cmVxdWVzdFByaW9yaXR5KCkgOiBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKKyAgICAgICAgaWYgKENDUHJpb3Jp
dHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzRXF1YWwocHJpb3JpdHlBLCBwcmlvcml0eUIpKQogICAg
ICAgICAgICAgcmV0dXJuIGEgPCBiOwogICAgICAgICByZXR1cm4gQ0NQcmlvcml0eUNhbGN1bGF0
b3I6OnByaW9yaXR5SXNMb3dlcihwcmlvcml0eUEsIHByaW9yaXR5Qik7CiAgICAgfQpAQCAtMTE2
LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95QmFja2luZyhDQ1ByaW9yaXRp
emVkVGV4dHVyZTo6QmFja2luZyosIENDUmVzb3VyY2VQcm92aWRlciopOwogCiAgICAgc2l6ZV90
IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKLSAgICB1bnNpZ25lZCBtX3ByaW9yaXR5Q3V0b2ZmOwor
ICAgIENDUHJpb3JpdHkgbV9wcmlvcml0eUN1dG9mZjsKICAgICBzaXplX3QgbV9tZW1vcnlVc2VC
eXRlczsKICAgICBzaXplX3QgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzOwogICAgIHNpemVfdCBt
X21lbW9yeUF2YWlsYWJsZUJ5dGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0
b3IuY3BwCmluZGV4IDkwMDg0MDQzZDk3MTk4NDBhOWVjYjIzNDU4Y2U3NWZiMzAxMjk2MTguLmFh
YmE1ZGVlZjM2M2FjZmM2ODNlNzdkYWZmMTBiODNiN2VmMmEzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5jcHAKQEAgLTMzLDkgKzMzLDkgQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gc3RhdGljCi1pbnQgQ0NQcmlvcml0
eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpCitDQ1ByaW9y
aXR5IENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJm
YWNlKQogewotICAgIHJldHVybiBkcmF3c1RvUm9vdFN1cmZhY2UgPyAtMSA6IDI7CisgICAgcmV0
dXJuIENDUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlID8gLTEgOiAyKTsKIH0KIAogLy8gc3Rh
dGljCkBAIC00NSwyMCArNDUsMjAgQEAgaW50IENDUHJpb3JpdHlDYWxjdWxhdG9yOjp2aXNpYmxl
UHJpb3JpdHkoYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpCiB9CiAKIC8vIHN0YXRpYwotaW50IEND
UHJpb3JpdHlDYWxjdWxhdG9yOjpyZW5kZXJTdXJmYWNlUHJpb3JpdHkoKQorQ0NQcmlvcml0eSBD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6cmVuZGVyU3VyZmFjZVByaW9yaXR5KCkKIHsKLSAgICByZXR1
cm4gMTsKKyAgICByZXR1cm4gQ0NQcmlvcml0eSgxKTsKIH0KIAogLy8gc3RhdGljCi1pbnQgQ0NQ
cmlvcml0eUNhbGN1bGF0b3I6OmxpbmdlcmluZ1ByaW9yaXR5KGludCBwcmV2aW91c1ByaW9yaXR5
KQorQ0NQcmlvcml0eSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bGluZ2VyaW5nUHJpb3JpdHkoY29u
c3QgQ0NQcmlvcml0eSYgcHJldmlvdXNQcmlvcml0eSkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgaGF2ZSBwcmlvcml0aWVzIGZvciBhbGwKICAgICAvLyAg
ICAgICAgdGV4dHVyZXMgKHdlIGNhbid0IGN1cnJlbnRseSBjYWxjdWxhdGUgZGlzdGFuY2VzIGZv
cgogICAgIC8vICAgICAgICBvZmYtc2NyZWVuIHRleHR1cmVzKS4KICAgICBpbnQgbGluZ2VyaW5n
UHJpb3JpdHkgPSAxMDAwMDAwOwotICAgIHJldHVybiBtaW4obnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkgLSAxLAotICAgICAgICAgICAgICAgbWF4KGxpbmdlcmluZ1ByaW9yaXR5LCBwcmV2aW91
c1ByaW9yaXR5KSkgKyAxOworICAgIHJldHVybiBDQ1ByaW9yaXR5KG1pbihudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1heChsaW5nZXJp
bmdQcmlvcml0eSwgcHJldmlvdXNQcmlvcml0eS5tX3ZhbHVlKSkgKyAxKTsKIH0KIAogbmFtZXNw
YWNlIHsKQEAgLTcxLDI0ICs3MSwxOSBAQCB1bnNpZ25lZCBtYW5oYXR0YW5EaXN0YW5jZShjb25z
dCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogfQogfQogCi1pbnQgQ0NQcmlvcml0eUNh
bGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0
LCBjb25zdCBJbnRSZWN0JiB0ZXh0dXJlUmVjdCwgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNv
bnN0CitDQ1ByaW9yaXR5IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5j
ZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgdGV4dHVyZVJlY3Qs
IGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdAogewogICAgIHVuc2lnbmVkIGRpc3RhbmNl
ID0gbWFuaGF0dGFuRGlzdGFuY2UodmlzaWJsZVJlY3QsIHRleHR1cmVSZWN0KTsKICAgICBpZiAo
IWRpc3RhbmNlKQotICAgICAgICByZXR1cm4gdmlzaWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3Vy
ZmFjZSk7Ci0gICAgcmV0dXJuIHZpc2libGVQcmlvcml0eShmYWxzZSkgKyBkaXN0YW5jZTsKKyAg
ICAgICAgcmV0dXJuIENDUHJpb3JpdHkodmlzaWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFj
ZSkpOworICAgIHJldHVybiBDQ1ByaW9yaXR5KHZpc2libGVQcmlvcml0eShmYWxzZSkgKyBkaXN0
YW5jZSk7CiB9CiAKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFu
Y2UodW5zaWduZWQgcGl4ZWxzLCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3QKK0NDUHJp
b3JpdHkgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVk
IHBpeGVscywgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFwaXhl
bHMpCi0gICAgICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKTsK
LSAgICByZXR1cm4gdmlzaWJsZVByaW9yaXR5KGZhbHNlKSArIHBpeGVsczsKLX0KLQotaW50IEND
UHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21WaXNpYmlsaXR5KGJvb2wgdmlzaWJsZSwg
Ym9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZpc2libGUgPyB2
aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKSA6IGxvd2VzdFByaW9yaXR5KCk7Cisg
ICAgICAgIHJldHVybiBDQ1ByaW9yaXR5KHZpc2libGVQcmlvcml0eShkcmF3c1RvUm9vdFN1cmZh
Y2UpKTsKKyAgICByZXR1cm4gQ0NQcmlvcml0eSh2aXNpYmxlUHJpb3JpdHkoZmFsc2UpICsgcGl4
ZWxzKTsKIH0KIAogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0
b3IuaAppbmRleCA3YzJjOGNkYTJlMTNiNWRjNmMzMTU1NzkyZmRjNGRjMWQ1MTI5YzIzLi44YzNh
YWVjODM4YzdhZTQ4ZDkxYjg5N2FhYTRmNDlhNzM0OGUxNDM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdHlDYWxjdWxhdG9yLmgKQEAgLTMxLDIxICszMSwzMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIENDUHJpb3JpdHkgeworcHVibGljOgorICAgIENDUHJpb3JpdHkoKSA6
IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkgeyB9CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdHlDYWxjdWxhdG9yOworICAgIENDUHJpb3JpdHko
aW50IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHsgfQorICAgIGludCBtX3ZhbHVlOworfTsKKwog
Y2xhc3MgQ0NQcmlvcml0eUNhbGN1bGF0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBpbnQgdWlQ
cmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgc3RhdGljIENDUHJpb3JpdHkg
dWlQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSk7CisgICAgc3RhdGljIENDUHJpb3Jp
dHkgcmVuZGVyU3VyZmFjZVByaW9yaXR5KCk7CisgICAgc3RhdGljIENDUHJpb3JpdHkgbGluZ2Vy
aW5nUHJpb3JpdHkoY29uc3QgQ0NQcmlvcml0eSYgcHJldmlvdXNQcmlvcml0eSk7CisgICAgQ0NQ
cmlvcml0eSBwcmlvcml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Y29uc3QgSW50UmVjdCYgdGV4dHVyZVJlY3QsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25z
dDsKKyAgICBDQ1ByaW9yaXR5IHByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscywg
Ym9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0OworCisgICAgc3RhdGljIGlubGluZSBDQ1By
aW9yaXR5IGhpZ2hlc3RQcmlvcml0eSgpIHsgcmV0dXJuIENDUHJpb3JpdHkoc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKSk7IH0KKyAgICBzdGF0aWMgaW5saW5lIENDUHJpb3JpdHkgbG93
ZXN0UHJpb3JpdHkoKSB7IHJldHVybiBDQ1ByaW9yaXR5KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpOyB9CisgICAgc3RhdGljIGlubGluZSBib29sIHByaW9yaXR5SXNMb3dlcihjb25z
dCBDQ1ByaW9yaXR5JiBhLCBjb25zdCBDQ1ByaW9yaXR5JiBiKSB7IHJldHVybiBhLm1fdmFsdWUg
PiBiLm1fdmFsdWU7IH0KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgcHJpb3JpdHlJc0hpZ2hlcihj
b25zdCBDQ1ByaW9yaXR5JiBhLCBjb25zdCBDQ1ByaW9yaXR5JiBiKSB7IHJldHVybiBhLm1fdmFs
dWUgPCBiLm1fdmFsdWU7IH0KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgcHJpb3JpdHlJc0VxdWFs
KGNvbnN0IENDUHJpb3JpdHkmIGEsIGNvbnN0IENDUHJpb3JpdHkmIGIpIHsgcmV0dXJuIGEubV92
YWx1ZSA9PSBiLm1fdmFsdWU7IH0KKyAgICBzdGF0aWMgaW5saW5lIENDUHJpb3JpdHkgbWF4UHJp
b3JpdHkoY29uc3QgQ0NQcmlvcml0eSYgYSwgY29uc3QgQ0NQcmlvcml0eSYgYikgeyByZXR1cm4g
cHJpb3JpdHlJc0hpZ2hlcihhLCBiKSA/IGEgOiBiOyB9CisKK3ByaXZhdGU6CiAgICAgc3RhdGlj
IGludCB2aXNpYmxlUHJpb3JpdHkoYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpOwotICAgIHN0YXRp
YyBpbnQgcmVuZGVyU3VyZmFjZVByaW9yaXR5KCk7Ci0gICAgc3RhdGljIGludCBsaW5nZXJpbmdQ
cmlvcml0eShpbnQgcHJldmlvdXNQcmlvcml0eSk7Ci0gICAgaW50IHByaW9yaXR5RnJvbURpc3Rh
bmNlKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0ZXh0dXJlUmVj
dCwgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0OwotICAgIGludCBwcmlvcml0eUZyb21E
aXN0YW5jZSh1bnNpZ25lZCBwaXhlbHMsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdDsK
LSAgICBpbnQgcHJpb3JpdHlGcm9tVmlzaWJpbGl0eShib29sIHZpc2libGUsIGJvb2wgZHJhd3NU
b1Jvb3RTdXJmYWNlKSBjb25zdDsKLQotICAgIHN0YXRpYyBpbmxpbmUgaW50IGhpZ2hlc3RQcmlv
cml0eSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7IH0KLSAgICBz
dGF0aWMgaW5saW5lIGludCBsb3dlc3RQcmlvcml0eSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCk7IH0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgcHJpb3JpdHlJc0xv
d2VyKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+IGI7IH0KLSAgICBzdGF0aWMgaW5saW5lIGJv
b2wgcHJpb3JpdHlJc0hpZ2hlcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPCBiOyB9Ci0gICAg
c3RhdGljIGlubGluZSBib29sIG1heFByaW9yaXR5KGludCBhLCBpbnQgYikgeyByZXR1cm4gcHJp
b3JpdHlJc0hpZ2hlcihhLCBiKSA/IGEgOiBiOyB9CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160031</attachid>
            <date>2012-08-22 16:35:43 -0700</date>
            <delta_ts>2012-08-22 18:10:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94751-20120822163540.patch</filename>
            <type>text/plain</type>
            <size>13584</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY4OTBlNTI4ZGI2ZmM5
Y2ZkNzJhMzc0ZTVlZjM0MmY5MTdjMDFlZS4uZTdhODc0NmIzZGY2YjI1YzM2Y2Y0MmJjODQ1MzBj
ZGMyZThhNmE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA4LTIyICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gVXNlIGFuIG9wYXF1ZSB0eXBlIGZvciB0ZXh0dXJlIHByaW9yaXR5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDc1MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBhbiBvcHFhdWUgdHlwZSBm
b3IgcHJpb3JpdHkuICBXZSB1c2VkIHNpemVfdCAoaW4KKyAgICAgICAgQ0NQcmlvcml0aXplZFRl
eHR1cmUpIGFuZCBpbnQgKGV2ZXJ5d2hlcmUgZWxzZSkgYmVmb3JlLiAgV2Ugd2lsbCB3YW50Cisg
ICAgICAgIHRvIGluY2x1ZGUgbW9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgcHJpb3JpdHkgdmFsdWUg
c28gdGhhdCB3ZSBjYW4KKyAgICAgICAgZGlzY2FyZCBvbmx5LXNvbWUgdGV4dHVyZXMgZnJvbSB0
aGUgaW1wbCB0aHJlYWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlOjpzZXRSZXF1ZXN0UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlv
cml0aXplZFRleHR1cmU6OnJlcXVlc3RQcmlvcml0eSk6CisgICAgICAgIChDQ1ByaW9yaXRpemVk
VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y29tcGFyZVRleHR1
cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y29t
cGFyZUJhY2tpbmdzKToKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnJlbmRlclN1cmZh
Y2VQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bGlu
Z2VyaW5nUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmg6CisgICAg
ICAgIChDQ1ByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHk6OkNDUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ1ByaW9yaXR5Q2FsY3VsYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6aGlnaGVzdFByaW9yaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0
eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xv
d2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlz
SGlnaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0
eUlzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6Om1heFBy
aW9yaXR5KToKKwogMjAxMi0wOC0yMCAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENvbnZlcnQgc2NyZWVuIHNwYWNlIHNjcm9sbCBn
ZXN0dXJlcyB0byBsYXllciBzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggY2NlMTYzNTIyYmIyZDdjMjQyZGRjNDM5NzVhNGM5MjM5Y2Y5Y2FhYi4uNDUwMzcxNjM1Mzk2
ZmU5MjEwNjllOWM1MTkwYmY3YjgxMjVhZmFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC01ODIsMTIgKzU4MiwxMyBAQCB2b2lkIHNldFByaW9yaXR5Rm9yVGV4dHVyZShj
b25zdCBDQ1ByaW9yaXR5Q2FsY3VsYXRvciYgcHJpb3JpdHlDYWxjLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc1NtYWxsQW5pbWF0ZWRMYXllciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIGludCBwcmlv
cml0eSA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpOworCisgICAgQ0NQ
cmlvcml0eSBwcmlvcml0eSA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgp
OwogICAgIGlmICghdmlzaWJsZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICBwcmlvcml0eSA9IHBy
aW9yaXR5Q2FsYy5wcmlvcml0eUZyb21EaXN0YW5jZSh2aXNpYmxlUmVjdCwgdGlsZVJlY3QsIGRy
YXdzVG9Sb290KTsKICAgICBpZiAoaXNTbWFsbEFuaW1hdGVkTGF5ZXIpCiAgICAgICAgIHByaW9y
aXR5ID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Om1heFByaW9yaXR5KHByaW9yaXR5LCBwcmlvcml0
eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2UoNTEyLCBkcmF3c1RvUm9vdCkpOwotICAgIGlmIChw
cmlvcml0eSAhPSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKKyAgICBp
ZiAoIUNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzRXF1YWwocHJpb3JpdHksIENDUHJp
b3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpKSkKICAgICAgICAgdGV4dHVyZS0+c2V0
UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5KTsKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRp
emVkVGV4dHVyZS5oCmluZGV4IDM3ODlkN2YyNjlhM2Q3ZTUxOTVhODkyZGRkMzc2ZGFlNjE4ZDJi
MGUuLjcyM2IyNzcyNWQ3MDNkZDRhOGMyYjM3YWIxMjRiMzYwMDM4Mzc1MjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaApAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlczsgfQogCiAgICAgLy8gU2V0
IHByaW9yaXR5IGZvciB0aGUgcmVxdWVzdGVkIHRleHR1cmUuIAotICAgIHZvaWQgc2V0UmVxdWVz
dFByaW9yaXR5KGludCBwcmlvcml0eSkgeyBtX3ByaW9yaXR5ID0gcHJpb3JpdHk7IH0KLSAgICBp
bnQgcmVxdWVzdFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9wcmlvcml0eTsgfQorICAgIHZv
aWQgc2V0UmVxdWVzdFByaW9yaXR5KGNvbnN0IENDUHJpb3JpdHkmIHByaW9yaXR5KSB7IG1fcHJp
b3JpdHkgPSBwcmlvcml0eTsgfQorICAgIGNvbnN0IENDUHJpb3JpdHkmIHJlcXVlc3RQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHk7IH0KIAogICAgIC8vIEFmdGVyIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlOjpwcmlvcml0aXplVGV4dHVyZXMoKSBpcyBjYWxsZWQsIHRoaXMgcmV0dXJu
cwogICAgIC8vIGlmIHRoZSB0aGUgcmVxdWVzdCBzdWNjZWVkZWQgYW5kIHRoaXMgdGV4dHVyZSBj
YW4gYmUgYWNxdWlyZWQgZm9yIHVzZS4KQEAgLTEyOCw3ICsxMjgsNyBAQCBwcml2YXRlOgogICAg
IEdDM0RlbnVtIG1fZm9ybWF0OwogICAgIHNpemVfdCBtX2J5dGVzOwogCi0gICAgc2l6ZV90IG1f
cHJpb3JpdHk7CisgICAgQ0NQcmlvcml0eSBtX3ByaW9yaXR5OwogICAgIGJvb2wgbV9pc0Fib3Zl
UHJpb3JpdHlDdXRvZmY7CiAgICAgYm9vbCBtX2lzU2VsZk1hbmFnZWQ7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDRhMjQxNzlj
NTc4MGE2ODJjNGVkNGFkODMzYzE2YTI3ZTZkMGQ4ZDcuLmY4MzMzMTQ2NWJmMzc1NDE3Mjk3NDg0
Mzc2ZTViOWJiNWZmMzkyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyLmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICBtX3ByaW9yaXR5Q3V0b2Zm
ID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7CiAgICAgc2l6ZV90IG1l
bW9yeUJ5dGVzID0gMDsKICAgICBmb3IgKFRleHR1cmVWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29y
dGVkVGV4dHVyZXMuYmVnaW4oKTsgaXQgIT0gc29ydGVkVGV4dHVyZXMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgaWYgKCgqaXQpLT5yZXF1ZXN0UHJpb3JpdHkoKSA9PSBDQ1ByaW9yaXR5Q2FsY3Vs
YXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKKyAgICAgICAgaWYgKENDUHJpb3JpdHlDYWxjdWxhdG9y
Ojpwcmlvcml0eUlzRXF1YWwoKCppdCktPnJlcXVlc3RQcmlvcml0eSgpLCBDQ1ByaW9yaXR5Q2Fs
Y3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBpZiAoKCppdCktPmlzU2VsZk1hbmFnZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAppbmRleCAxM2RiYzUxNzZiY2Q3OGVlMjk3MDkwYTY3
NjUxMjQ1ZjliZDc2NGNhLi5iMWUzMjg5NmE5ZGU1MjhmM2UyNzBiY2JkYjJlMmQ3ZTY4ZjlkYmQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaApA
QCAtOTQsMTYgKzk0LDE2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29tcGFyZSB0ZXh0dXJlcy4gSGln
aGVzdCBwcmlvcml0eSBmaXJzdC4KICAgICBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVRleHR1
cmVzKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBhLCBDQ1ByaW9yaXRpemVkVGV4dHVyZSogYikKICAg
ICB7Ci0gICAgICAgIGlmIChhLT5yZXF1ZXN0UHJpb3JpdHkoKSA9PSBiLT5yZXF1ZXN0UHJpb3Jp
dHkoKSkKKyAgICAgICAgaWYgKENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzRXF1YWwo
YS0+cmVxdWVzdFByaW9yaXR5KCksIGItPnJlcXVlc3RQcmlvcml0eSgpKSkKICAgICAgICAgICAg
IHJldHVybiBhIDwgYjsKICAgICAgICAgcmV0dXJuIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlv
cml0eUlzSGlnaGVyKGEtPnJlcXVlc3RQcmlvcml0eSgpLCBiLT5yZXF1ZXN0UHJpb3JpdHkoKSk7
CiAgICAgfQogICAgIC8vIENvbXBhcmUgYmFja2luZ3MuIExvd2VzdCBwcmlvcml0eSBmaXJzdC4K
ICAgICBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUJhY2tpbmdzKENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpCYWNraW5nKiBhLCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYikKICAgICB7
Ci0gICAgICAgIGludCBwcmlvcml0eUEgPSBhLT5vd25lcigpID8gYS0+b3duZXIoKS0+cmVxdWVz
dFByaW9yaXR5KCkgOiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKLSAg
ICAgICAgaW50IHByaW9yaXR5QiA9IGItPm93bmVyKCkgPyBiLT5vd25lcigpLT5yZXF1ZXN0UHJp
b3JpdHkoKSA6IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0eSgpOwotICAgICAg
ICBpZiAocHJpb3JpdHlBID09IHByaW9yaXR5QikKKyAgICAgICAgQ0NQcmlvcml0eSBwcmlvcml0
eUEgPSBhLT5vd25lcigpID8gYS0+b3duZXIoKS0+cmVxdWVzdFByaW9yaXR5KCkgOiBDQ1ByaW9y
aXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKKyAgICAgICAgQ0NQcmlvcml0eSBwcmlv
cml0eUIgPSBiLT5vd25lcigpID8gYi0+b3duZXIoKS0+cmVxdWVzdFByaW9yaXR5KCkgOiBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKKyAgICAgICAgaWYgKENDUHJpb3Jp
dHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzRXF1YWwocHJpb3JpdHlBLCBwcmlvcml0eUIpKQogICAg
ICAgICAgICAgcmV0dXJuIGEgPCBiOwogICAgICAgICByZXR1cm4gQ0NQcmlvcml0eUNhbGN1bGF0
b3I6OnByaW9yaXR5SXNMb3dlcihwcmlvcml0eUEsIHByaW9yaXR5Qik7CiAgICAgfQpAQCAtMTE2
LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95QmFja2luZyhDQ1ByaW9yaXRp
emVkVGV4dHVyZTo6QmFja2luZyosIENDUmVzb3VyY2VQcm92aWRlciopOwogCiAgICAgc2l6ZV90
IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKLSAgICB1bnNpZ25lZCBtX3ByaW9yaXR5Q3V0b2ZmOwor
ICAgIENDUHJpb3JpdHkgbV9wcmlvcml0eUN1dG9mZjsKICAgICBzaXplX3QgbV9tZW1vcnlVc2VC
eXRlczsKICAgICBzaXplX3QgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzOwogICAgIHNpemVfdCBt
X21lbW9yeUF2YWlsYWJsZUJ5dGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0
b3IuY3BwCmluZGV4IDkwMDg0MDQzZDk3MTk4NDBhOWVjYjIzNDU4Y2U3NWZiMzAxMjk2MTguLjcw
MDU5NTU3MGRjMjRjZjQ5YTljNjhlNTE3ZTIyN2Y5ZTUyNjEzZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5jcHAKQEAgLTMzLDMyICszMywzMiBAQCB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBzdGF0aWMKLWludCBDQ1ByaW9y
aXR5Q2FsY3VsYXRvcjo6dWlQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSkKK0NDUHJp
b3JpdHkgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoYm9vbCBkcmF3c1RvUm9vdFN1
cmZhY2UpCiB7Ci0gICAgcmV0dXJuIGRyYXdzVG9Sb290U3VyZmFjZSA/IC0xIDogMjsKKyAgICBy
ZXR1cm4gQ0NQcmlvcml0eShkcmF3c1RvUm9vdFN1cmZhY2UgPyAtMSA6IDIpOwogfQogCiAvLyBz
dGF0aWMKLWludCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5KGJvb2wgZHJh
d3NUb1Jvb3RTdXJmYWNlKQorQ0NQcmlvcml0eSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJs
ZVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKQogewotICAgIHJldHVybiBkcmF3c1Rv
Um9vdFN1cmZhY2UgPyAwIDogMzsKKyAgICByZXR1cm4gQ0NQcmlvcml0eShkcmF3c1RvUm9vdFN1
cmZhY2UgPyAwIDogMyk7CiB9CiAKIC8vIHN0YXRpYwotaW50IENDUHJpb3JpdHlDYWxjdWxhdG9y
OjpyZW5kZXJTdXJmYWNlUHJpb3JpdHkoKQorQ0NQcmlvcml0eSBDQ1ByaW9yaXR5Q2FsY3VsYXRv
cjo6cmVuZGVyU3VyZmFjZVByaW9yaXR5KCkKIHsKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4g
Q0NQcmlvcml0eSgxKTsKIH0KIAogLy8gc3RhdGljCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6
OmxpbmdlcmluZ1ByaW9yaXR5KGludCBwcmV2aW91c1ByaW9yaXR5KQorQ0NQcmlvcml0eSBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6bGluZ2VyaW5nUHJpb3JpdHkoY29uc3QgQ0NQcmlvcml0eSYgcHJl
dmlvdXNQcmlvcml0eSkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9u
Y2Ugd2UgaGF2ZSBwcmlvcml0aWVzIGZvciBhbGwKICAgICAvLyAgICAgICAgdGV4dHVyZXMgKHdl
IGNhbid0IGN1cnJlbnRseSBjYWxjdWxhdGUgZGlzdGFuY2VzIGZvcgogICAgIC8vICAgICAgICBv
ZmYtc2NyZWVuIHRleHR1cmVzKS4KICAgICBpbnQgbGluZ2VyaW5nUHJpb3JpdHkgPSAxMDAwMDAw
OwotICAgIHJldHVybiBtaW4obnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLSAxLAotICAgICAg
ICAgICAgICAgbWF4KGxpbmdlcmluZ1ByaW9yaXR5LCBwcmV2aW91c1ByaW9yaXR5KSkgKyAxOwor
ICAgIHJldHVybiBDQ1ByaW9yaXR5KG1pbihudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAtIDEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1heChsaW5nZXJpbmdQcmlvcml0eSwgcHJldmlv
dXNQcmlvcml0eS5tX3ZhbHVlKSkgKyAxKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTcxLDI0ICs3
MSwxOSBAQCB1bnNpZ25lZCBtYW5oYXR0YW5EaXN0YW5jZShjb25zdCBJbnRSZWN0JiBhLCBjb25z
dCBJbnRSZWN0JiBiKQogfQogfQogCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5
RnJvbURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0
ZXh0dXJlUmVjdCwgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0CitDQ1ByaW9yaXR5IEND
UHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2
aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgdGV4dHVyZVJlY3QsIGJvb2wgZHJhd3NUb1Jvb3RT
dXJmYWNlKSBjb25zdAogewogICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gbWFuaGF0dGFuRGlzdGFu
Y2UodmlzaWJsZVJlY3QsIHRleHR1cmVSZWN0KTsKICAgICBpZiAoIWRpc3RhbmNlKQogICAgICAg
ICByZXR1cm4gdmlzaWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSk7Ci0gICAgcmV0dXJu
IHZpc2libGVQcmlvcml0eShmYWxzZSkgKyBkaXN0YW5jZTsKKyAgICByZXR1cm4gQ0NQcmlvcml0
eSh2aXNpYmxlUHJpb3JpdHkoZmFsc2UpLm1fdmFsdWUgKyBkaXN0YW5jZSk7CiB9CiAKLWludCBD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UodW5zaWduZWQgcGl4ZWxz
LCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3QKK0NDUHJpb3JpdHkgQ0NQcmlvcml0eUNh
bGN1bGF0b3I6OnByaW9yaXR5RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscywgYm9vbCBkcmF3
c1RvUm9vdFN1cmZhY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVy
biB2aXNpYmxlUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlKTsKLSAgICByZXR1cm4gdmlzaWJs
ZVByaW9yaXR5KGZhbHNlKSArIHBpeGVsczsKLX0KLQotaW50IENDUHJpb3JpdHlDYWxjdWxhdG9y
Ojpwcmlvcml0eUZyb21WaXNpYmlsaXR5KGJvb2wgdmlzaWJsZSwgYm9vbCBkcmF3c1RvUm9vdFN1
cmZhY2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZpc2libGUgPyB2aXNpYmxlUHJpb3JpdHkoZHJh
d3NUb1Jvb3RTdXJmYWNlKSA6IGxvd2VzdFByaW9yaXR5KCk7CisgICAgcmV0dXJuIENDUHJpb3Jp
dHkodmlzaWJsZVByaW9yaXR5KGZhbHNlKS5tX3ZhbHVlICsgcGl4ZWxzKTsKIH0KIAogfSAvLyBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuaAppbmRleCA3YzJjOGNk
YTJlMTNiNWRjNmMzMTU1NzkyZmRjNGRjMWQ1MTI5YzIzLi4wYzU0YzhkODQwZWJkOGEwNGM1ODAx
NTU5ZWI1Nzk5OTI0MDMxNDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9y
LmgKQEAgLTMxLDIxICszMSwzMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEND
UHJpb3JpdHkgeworcHVibGljOgorICAgIENDUHJpb3JpdHkoKSA6IG1fdmFsdWUoc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkgeyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IENDUHJpb3JpdHlDYWxjdWxhdG9yOworICAgIENDUHJpb3JpdHkoaW50IHZhbHVlKSA6IG1fdmFs
dWUodmFsdWUpIHsgfQorICAgIGludCBtX3ZhbHVlOworfTsKKwogY2xhc3MgQ0NQcmlvcml0eUNh
bGN1bGF0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBpbnQgdWlQcmlvcml0eShib29sIGRyYXdz
VG9Sb290U3VyZmFjZSk7Ci0gICAgc3RhdGljIGludCB2aXNpYmxlUHJpb3JpdHkoYm9vbCBkcmF3
c1RvUm9vdFN1cmZhY2UpOwotICAgIHN0YXRpYyBpbnQgcmVuZGVyU3VyZmFjZVByaW9yaXR5KCk7
Ci0gICAgc3RhdGljIGludCBsaW5nZXJpbmdQcmlvcml0eShpbnQgcHJldmlvdXNQcmlvcml0eSk7
Ci0gICAgaW50IHByaW9yaXR5RnJvbURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0
LCBjb25zdCBJbnRSZWN0JiB0ZXh0dXJlUmVjdCwgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNv
bnN0OwotICAgIGludCBwcmlvcml0eUZyb21EaXN0YW5jZSh1bnNpZ25lZCBwaXhlbHMsIGJvb2wg
ZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdDsKLSAgICBpbnQgcHJpb3JpdHlGcm9tVmlzaWJpbGl0
eShib29sIHZpc2libGUsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdDsKLQotICAgIHN0
YXRpYyBpbmxpbmUgaW50IGhpZ2hlc3RQcmlvcml0eSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWluKCk7IH0KLSAgICBzdGF0aWMgaW5saW5lIGludCBsb3dlc3RQcmlvcml0
eSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KLSAgICBzdGF0
aWMgaW5saW5lIGJvb2wgcHJpb3JpdHlJc0xvd2VyKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+
IGI7IH0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgcHJpb3JpdHlJc0hpZ2hlcihpbnQgYSwgaW50
IGIpIHsgcmV0dXJuIGEgPCBiOyB9Ci0gICAgc3RhdGljIGlubGluZSBib29sIG1heFByaW9yaXR5
KGludCBhLCBpbnQgYikgeyByZXR1cm4gcHJpb3JpdHlJc0hpZ2hlcihhLCBiKSA/IGEgOiBiOyB9
CisgICAgc3RhdGljIENDUHJpb3JpdHkgdWlQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFj
ZSk7CisgICAgc3RhdGljIENDUHJpb3JpdHkgdmlzaWJsZVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jv
b3RTdXJmYWNlKTsKKyAgICBzdGF0aWMgQ0NQcmlvcml0eSByZW5kZXJTdXJmYWNlUHJpb3JpdHko
KTsKKyAgICBzdGF0aWMgQ0NQcmlvcml0eSBsaW5nZXJpbmdQcmlvcml0eShjb25zdCBDQ1ByaW9y
aXR5JiBwcmV2aW91c1ByaW9yaXR5KTsKKyAgICBDQ1ByaW9yaXR5IHByaW9yaXR5RnJvbURpc3Rh
bmNlKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiB0ZXh0dXJlUmVj
dCwgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0OworICAgIENDUHJpb3JpdHkgcHJpb3Jp
dHlGcm9tRGlzdGFuY2UodW5zaWduZWQgcGl4ZWxzLCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkg
Y29uc3Q7CisKKyAgICBzdGF0aWMgaW5saW5lIENDUHJpb3JpdHkgaGlnaGVzdFByaW9yaXR5KCkg
eyByZXR1cm4gQ0NQcmlvcml0eShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsgfQor
ICAgIHN0YXRpYyBpbmxpbmUgQ0NQcmlvcml0eSBsb3dlc3RQcmlvcml0eSgpIHsgcmV0dXJuIEND
UHJpb3JpdHkoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7IH0KKyAgICBzdGF0aWMg
aW5saW5lIGJvb2wgcHJpb3JpdHlJc0xvd2VyKGNvbnN0IENDUHJpb3JpdHkmIGEsIGNvbnN0IEND
UHJpb3JpdHkmIGIpIHsgcmV0dXJuIGEubV92YWx1ZSA+IGIubV92YWx1ZTsgfQorICAgIHN0YXRp
YyBpbmxpbmUgYm9vbCBwcmlvcml0eUlzSGlnaGVyKGNvbnN0IENDUHJpb3JpdHkmIGEsIGNvbnN0
IENDUHJpb3JpdHkmIGIpIHsgcmV0dXJuIGEubV92YWx1ZSA8IGIubV92YWx1ZTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgYm9vbCBwcmlvcml0eUlzRXF1YWwoY29uc3QgQ0NQcmlvcml0eSYgYSwgY29u
c3QgQ0NQcmlvcml0eSYgYikgeyByZXR1cm4gYS5tX3ZhbHVlID09IGIubV92YWx1ZTsgfQorICAg
IHN0YXRpYyBpbmxpbmUgQ0NQcmlvcml0eSBtYXhQcmlvcml0eShjb25zdCBDQ1ByaW9yaXR5JiBh
LCBjb25zdCBDQ1ByaW9yaXR5JiBiKSB7IHJldHVybiBwcmlvcml0eUlzSGlnaGVyKGEsIGIpID8g
YSA6IGI7IH0KIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160056</attachid>
            <date>2012-08-22 18:10:08 -0700</date>
            <delta_ts>2012-10-08 16:13:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94751-20120822181006.patch</filename>
            <type>text/plain</type>
            <size>19379</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThlYTUyNjMyYjFlYTZk
N2MyYTAxYmExYjI5ZDk0MDdiZjZmMWYzOS4uMzM4M2Q5ZTkwNmMwNzQwOWM3ODE2NzMxOGFmYzI3
ZTA2YzMwYzZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA4LTIyICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gVXNlIGFuIG9wYXF1ZSB0eXBlIGZvciB0ZXh0dXJlIHByaW9yaXR5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDc1MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBhbiBvcHFhdWUgdHlwZSBm
b3IgcHJpb3JpdHkuICBXZSB1c2VkIHNpemVfdCAoaW4KKyAgICAgICAgQ0NQcmlvcml0aXplZFRl
eHR1cmUpIGFuZCBpbnQgKGV2ZXJ5d2hlcmUgZWxzZSkgYmVmb3JlLiAgV2Ugd2lsbCB3YW50Cisg
ICAgICAgIHRvIGluY2x1ZGUgbW9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgcHJpb3JpdHkgdmFsdWUg
c28gdGhhdCB3ZSBjYW4KKyAgICAgICAgZGlzY2FyZCBvbmx5LXNvbWUgdGV4dHVyZXMgZnJvbSB0
aGUgaW1wbCB0aHJlYWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlOjpzZXRSZXF1ZXN0UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlv
cml0aXplZFRleHR1cmU6OnJlcXVlc3RQcmlvcml0eSk6CisgICAgICAgIChDQ1ByaW9yaXRpemVk
VGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y29tcGFyZVRleHR1
cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y29t
cGFyZUJhY2tpbmdzKToKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnJlbmRlclN1cmZh
Y2VQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bGlu
Z2VyaW5nUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlzdGFuY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmg6CisgICAg
ICAgIChDQ1ByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHk6OkNDUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ1ByaW9yaXR5Q2FsY3VsYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6aGlnaGVzdFByaW9yaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlvcml0
eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xv
d2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlz
SGlnaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0
eUlzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0eUNhbGN1bGF0b3I6Om1heFBy
aW9yaXR5KToKKwogMjAxMi0wOC0yMiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyNjMxOS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNjZTE2MzUyMmJiMmQ3YzI0MmRkYzQzOTc1YTRjOTIz
OWNmOWNhYWIuLjQ1MDM3MTYzNTM5NmZlOTIxMDY5ZTljNTE5MGJmN2I4MTI1YWZhZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNTgyLDEyICs1ODIsMTMgQEAgdm9pZCBz
ZXRQcmlvcml0eUZvclRleHR1cmUoY29uc3QgQ0NQcmlvcml0eUNhbGN1bGF0b3ImIHByaW9yaXR5
Q2FsYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTbWFsbEFuaW1hdGVkTGF5
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4
dHVyZSkKIHsKLSAgICBpbnQgcHJpb3JpdHkgPSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0
UHJpb3JpdHkoKTsKKworICAgIENDUHJpb3JpdHkgcHJpb3JpdHkgPSBDQ1ByaW9yaXR5Q2FsY3Vs
YXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKICAgICBpZiAoIXZpc2libGVSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcHJpb3JpdHkgPSBwcmlvcml0eUNhbGMucHJpb3JpdHlGcm9tRGlzdGFuY2Uodmlz
aWJsZVJlY3QsIHRpbGVSZWN0LCBkcmF3c1RvUm9vdCk7CiAgICAgaWYgKGlzU21hbGxBbmltYXRl
ZExheWVyKQogICAgICAgICBwcmlvcml0eSA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjptYXhQcmlv
cml0eShwcmlvcml0eSwgcHJpb3JpdHlDYWxjLnByaW9yaXR5RnJvbURpc3RhbmNlKDUxMiwgZHJh
d3NUb1Jvb3QpKTsKLSAgICBpZiAocHJpb3JpdHkgIT0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxv
d2VzdFByaW9yaXR5KCkpCisgICAgaWYgKCFDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJ
c0VxdWFsKHByaW9yaXR5LCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkp
CiAgICAgICAgIHRleHR1cmUtPnNldFJlcXVlc3RQcmlvcml0eShwcmlvcml0eSk7CiB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaAppbmRleCAzNzg5ZDdmMjY5YTNkN2U1
MTk1YTg5MmRkZDM3NmRhZTYxOGQyYjBlLi43MjNiMjc3MjVkNzAzZGQ0YThjMmIzN2FiMTI0YjM2
MDAzODM3NTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKQEAgLTU5
LDggKzU5LDggQEAgcHVibGljOgogICAgIHNpemVfdCBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZXM7IH0KIAogICAgIC8vIFNldCBwcmlvcml0eSBmb3IgdGhlIHJlcXVlc3RlZCB0ZXh0dXJl
LiAKLSAgICB2b2lkIHNldFJlcXVlc3RQcmlvcml0eShpbnQgcHJpb3JpdHkpIHsgbV9wcmlvcml0
eSA9IHByaW9yaXR5OyB9Ci0gICAgaW50IHJlcXVlc3RQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJpb3JpdHk7IH0KKyAgICB2b2lkIHNldFJlcXVlc3RQcmlvcml0eShjb25zdCBDQ1ByaW9y
aXR5JiBwcmlvcml0eSkgeyBtX3ByaW9yaXR5ID0gcHJpb3JpdHk7IH0KKyAgICBjb25zdCBDQ1By
aW9yaXR5JiByZXF1ZXN0UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBtX3ByaW9yaXR5OyB9CiAK
ICAgICAvLyBBZnRlciBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6cHJpb3JpdGl6ZVRleHR1cmVzKCkg
aXMgY2FsbGVkLCB0aGlzIHJldHVybnMKICAgICAvLyBpZiB0aGUgdGhlIHJlcXVlc3Qgc3VjY2Vl
ZGVkIGFuZCB0aGlzIHRleHR1cmUgY2FuIGJlIGFjcXVpcmVkIGZvciB1c2UuCkBAIC0xMjgsNyAr
MTI4LDcgQEAgcHJpdmF0ZToKICAgICBHQzNEZW51bSBtX2Zvcm1hdDsKICAgICBzaXplX3QgbV9i
eXRlczsKIAotICAgIHNpemVfdCBtX3ByaW9yaXR5OworICAgIENDUHJpb3JpdHkgbV9wcmlvcml0
eTsKICAgICBib29sIG1faXNBYm92ZVByaW9yaXR5Q3V0b2ZmOwogICAgIGJvb2wgbV9pc1NlbGZN
YW5hZ2VkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyLmNwcAppbmRleCA0YTI0MTc5YzU3ODBhNjgyYzRlZDRhZDgzM2MxNmEyN2U2ZDBkOGQ3Li5m
ODMzMzE0NjViZjM3NTQxNzI5NzQ4NDM3NmU1YjliYjVmZjM5MmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKQEAgLTgyLDcgKzgyLDcg
QEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygp
CiAgICAgbV9wcmlvcml0eUN1dG9mZiA9IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlv
cml0eSgpOwogICAgIHNpemVfdCBtZW1vcnlCeXRlcyA9IDA7CiAgICAgZm9yIChUZXh0dXJlVmVj
dG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZFRleHR1cmVzLmJlZ2luKCk7IGl0ICE9IHNvcnRlZFRl
eHR1cmVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+cmVxdWVzdFByaW9yaXR5
KCkgPT0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCkpCisgICAgICAgIGlm
IChDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0VxdWFsKCgqaXQpLT5yZXF1ZXN0UHJp
b3JpdHkoKSwgQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCkpKQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgaWYgKCgqaXQpLT5pc1NlbGZNYW5hZ2VkKCkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKaW5kZXggMTNk
YmM1MTc2YmNkNzhlZTI5NzA5MGE2NzY1MTI0NWY5YmQ3NjRjYS4uYjFlMzI4OTZhOWRlNTI4ZjNl
MjcwYmNiZGIyZTJkN2U2OGY5ZGJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyLmgKQEAgLTk0LDE2ICs5NCwxNiBAQCBwcml2YXRlOgogICAgIC8v
IENvbXBhcmUgdGV4dHVyZXMuIEhpZ2hlc3QgcHJpb3JpdHkgZmlyc3QuCiAgICAgc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVUZXh0dXJlcyhDQ1ByaW9yaXRpemVkVGV4dHVyZSogYSwgQ0NQcmlv
cml0aXplZFRleHR1cmUqIGIpCiAgICAgewotICAgICAgICBpZiAoYS0+cmVxdWVzdFByaW9yaXR5
KCkgPT0gYi0+cmVxdWVzdFByaW9yaXR5KCkpCisgICAgICAgIGlmIChDQ1ByaW9yaXR5Q2FsY3Vs
YXRvcjo6cHJpb3JpdHlJc0VxdWFsKGEtPnJlcXVlc3RQcmlvcml0eSgpLCBiLT5yZXF1ZXN0UHJp
b3JpdHkoKSkpCiAgICAgICAgICAgICByZXR1cm4gYSA8IGI7CiAgICAgICAgIHJldHVybiBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0hpZ2hlcihhLT5yZXF1ZXN0UHJpb3JpdHkoKSwg
Yi0+cmVxdWVzdFByaW9yaXR5KCkpOwogICAgIH0KICAgICAvLyBDb21wYXJlIGJhY2tpbmdzLiBM
b3dlc3QgcHJpb3JpdHkgZmlyc3QuCiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVCYWNr
aW5ncyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYSwgQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmcqIGIpCiAgICAgewotICAgICAgICBpbnQgcHJpb3JpdHlBID0gYS0+b3duZXIo
KSA/IGEtPm93bmVyKCktPnJlcXVlc3RQcmlvcml0eSgpIDogQ0NQcmlvcml0eUNhbGN1bGF0b3I6
Omxvd2VzdFByaW9yaXR5KCk7Ci0gICAgICAgIGludCBwcmlvcml0eUIgPSBiLT5vd25lcigpID8g
Yi0+b3duZXIoKS0+cmVxdWVzdFByaW9yaXR5KCkgOiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93
ZXN0UHJpb3JpdHkoKTsKLSAgICAgICAgaWYgKHByaW9yaXR5QSA9PSBwcmlvcml0eUIpCisgICAg
ICAgIENDUHJpb3JpdHkgcHJpb3JpdHlBID0gYS0+b3duZXIoKSA/IGEtPm93bmVyKCktPnJlcXVl
c3RQcmlvcml0eSgpIDogQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7Cisg
ICAgICAgIENDUHJpb3JpdHkgcHJpb3JpdHlCID0gYi0+b3duZXIoKSA/IGItPm93bmVyKCktPnJl
cXVlc3RQcmlvcml0eSgpIDogQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7
CisgICAgICAgIGlmIChDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0VxdWFsKHByaW9y
aXR5QSwgcHJpb3JpdHlCKSkKICAgICAgICAgICAgIHJldHVybiBhIDwgYjsKICAgICAgICAgcmV0
dXJuIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUlzTG93ZXIocHJpb3JpdHlBLCBwcmlv
cml0eUIpOwogICAgIH0KQEAgLTExNiw3ICsxMTYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVz
dHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqLCBDQ1Jlc291cmNlUHJv
dmlkZXIqKTsKIAogICAgIHNpemVfdCBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7Ci0gICAgdW5zaWdu
ZWQgbV9wcmlvcml0eUN1dG9mZjsKKyAgICBDQ1ByaW9yaXR5IG1fcHJpb3JpdHlDdXRvZmY7CiAg
ICAgc2l6ZV90IG1fbWVtb3J5VXNlQnl0ZXM7CiAgICAgc2l6ZV90IG1fbWVtb3J5QWJvdmVDdXRv
ZmZCeXRlczsKICAgICBzaXplX3QgbV9tZW1vcnlBdmFpbGFibGVCeXRlczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlD
YWxjdWxhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdHlDYWxjdWxhdG9yLmNwcAppbmRleCA5MDA4NDA0M2Q5NzE5ODQwYTllY2Iy
MzQ1OGNlNzVmYjMwMTI5NjE4Li43MDA1OTU1NzBkYzI0Y2Y0OWE5YzY4ZTUxN2UyMjdmOWU1MjYx
M2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuY3BwCkBAIC0zMywz
MiArMzMsMzIgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ly8gc3RhdGljCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnVpUHJpb3JpdHkoYm9vbCBkcmF3
c1RvUm9vdFN1cmZhY2UpCitDQ1ByaW9yaXR5IENDUHJpb3JpdHlDYWxjdWxhdG9yOjp1aVByaW9y
aXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKQogewotICAgIHJldHVybiBkcmF3c1RvUm9vdFN1
cmZhY2UgPyAtMSA6IDI7CisgICAgcmV0dXJuIENDUHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNl
ID8gLTEgOiAyKTsKIH0KIAogLy8gc3RhdGljCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZp
c2libGVQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSkKK0NDUHJpb3JpdHkgQ0NQcmlv
cml0eUNhbGN1bGF0b3I6OnZpc2libGVQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSkK
IHsKLSAgICByZXR1cm4gZHJhd3NUb1Jvb3RTdXJmYWNlID8gMCA6IDM7CisgICAgcmV0dXJuIEND
UHJpb3JpdHkoZHJhd3NUb1Jvb3RTdXJmYWNlID8gMCA6IDMpOwogfQogCiAvLyBzdGF0aWMKLWlu
dCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cmVuZGVyU3VyZmFjZVByaW9yaXR5KCkKK0NDUHJpb3Jp
dHkgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnJlbmRlclN1cmZhY2VQcmlvcml0eSgpCiB7Ci0gICAg
cmV0dXJuIDE7CisgICAgcmV0dXJuIENDUHJpb3JpdHkoMSk7CiB9CiAKIC8vIHN0YXRpYwotaW50
IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsaW5nZXJpbmdQcmlvcml0eShpbnQgcHJldmlvdXNQcmlv
cml0eSkKK0NDUHJpb3JpdHkgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OmxpbmdlcmluZ1ByaW9yaXR5
KGNvbnN0IENDUHJpb3JpdHkmIHByZXZpb3VzUHJpb3JpdHkpCiB7CiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgcHJpb3JpdGllcyBmb3IgYWxsCiAgICAg
Ly8gICAgICAgIHRleHR1cmVzICh3ZSBjYW4ndCBjdXJyZW50bHkgY2FsY3VsYXRlIGRpc3RhbmNl
cyBmb3IKICAgICAvLyAgICAgICAgb2ZmLXNjcmVlbiB0ZXh0dXJlcykuCiAgICAgaW50IGxpbmdl
cmluZ1ByaW9yaXR5ID0gMTAwMDAwMDsKLSAgICByZXR1cm4gbWluKG51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpIC0gMSwKLSAgICAgICAgICAgICAgIG1heChsaW5nZXJpbmdQcmlvcml0eSwgcHJl
dmlvdXNQcmlvcml0eSkpICsgMTsKKyAgICByZXR1cm4gQ0NQcmlvcml0eShtaW4obnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgobGlu
Z2VyaW5nUHJpb3JpdHksIHByZXZpb3VzUHJpb3JpdHkubV92YWx1ZSkpICsgMSk7CiB9CiAKIG5h
bWVzcGFjZSB7CkBAIC03MSwyNCArNzEsMTkgQEAgdW5zaWduZWQgbWFuaGF0dGFuRGlzdGFuY2Uo
Y29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50UmVjdCYgYikKIH0KIH0KIAotaW50IENDUHJpb3Jp
dHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aXNpYmxl
UmVjdCwgY29uc3QgSW50UmVjdCYgdGV4dHVyZVJlY3QsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNl
KSBjb25zdAorQ0NQcmlvcml0eSBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tRGlz
dGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRleHR1cmVS
ZWN0LCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBkaXN0
YW5jZSA9IG1hbmhhdHRhbkRpc3RhbmNlKHZpc2libGVSZWN0LCB0ZXh0dXJlUmVjdCk7CiAgICAg
aWYgKCFkaXN0YW5jZSkKICAgICAgICAgcmV0dXJuIHZpc2libGVQcmlvcml0eShkcmF3c1RvUm9v
dFN1cmZhY2UpOwotICAgIHJldHVybiB2aXNpYmxlUHJpb3JpdHkoZmFsc2UpICsgZGlzdGFuY2U7
CisgICAgcmV0dXJuIENDUHJpb3JpdHkodmlzaWJsZVByaW9yaXR5KGZhbHNlKS5tX3ZhbHVlICsg
ZGlzdGFuY2UpOwogfQogCi1pbnQgQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5RnJvbURp
c3RhbmNlKHVuc2lnbmVkIHBpeGVscywgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0CitD
Q1ByaW9yaXR5IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpwcmlvcml0eUZyb21EaXN0YW5jZSh1bnNp
Z25lZCBwaXhlbHMsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdAogewogICAgIGlmICgh
cGl4ZWxzKQogICAgICAgICByZXR1cm4gdmlzaWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFj
ZSk7Ci0gICAgcmV0dXJuIHZpc2libGVQcmlvcml0eShmYWxzZSkgKyBwaXhlbHM7Ci19Ci0KLWlu
dCBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlGcm9tVmlzaWJpbGl0eShib29sIHZpc2li
bGUsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdAotewotICAgIHJldHVybiB2aXNpYmxl
ID8gdmlzaWJsZVByaW9yaXR5KGRyYXdzVG9Sb290U3VyZmFjZSkgOiBsb3dlc3RQcmlvcml0eSgp
OworICAgIHJldHVybiBDQ1ByaW9yaXR5KHZpc2libGVQcmlvcml0eShmYWxzZSkubV92YWx1ZSAr
IHBpeGVscyk7CiB9CiAKIH0gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1bGF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdHlDYWxj
dWxhdG9yLmgKaW5kZXggN2MyYzhjZGEyZTEzYjVkYzZjMzE1NTc5MmZkYzRkYzFkNTEyOWMyMy4u
YmIwY2E1YmI4YWUwYWJmZWY4YjJlZmY4NTUzMDE1YzY0OGI1M2U4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0eUNhbGN1
bGF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXR5Q2FsY3VsYXRvci5oCkBAIC0yOSwyMyArMjksMzcgQEAKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCitjbGFzcyBDQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3Q7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NQcmlvcml0eSB7Citw
dWJsaWM6CisgICAgQ0NQcmlvcml0eSgpIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKSB7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ0NQcmlvcml0eUNh
bGN1bGF0b3I7CisgICAgZnJpZW5kIGNsYXNzIDo6Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0Owor
CisgICAgQ0NQcmlvcml0eShpbnQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9CisgICAgaW50
IG1fdmFsdWU7Cit9OworCiBjbGFzcyBDQ1ByaW9yaXR5Q2FsY3VsYXRvciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIGludCB1aVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKTsKLSAgICBz
dGF0aWMgaW50IHZpc2libGVQcmlvcml0eShib29sIGRyYXdzVG9Sb290U3VyZmFjZSk7Ci0gICAg
c3RhdGljIGludCByZW5kZXJTdXJmYWNlUHJpb3JpdHkoKTsKLSAgICBzdGF0aWMgaW50IGxpbmdl
cmluZ1ByaW9yaXR5KGludCBwcmV2aW91c1ByaW9yaXR5KTsKLSAgICBpbnQgcHJpb3JpdHlGcm9t
RGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRleHR1
cmVSZWN0LCBib29sIGRyYXdzVG9Sb290U3VyZmFjZSkgY29uc3Q7Ci0gICAgaW50IHByaW9yaXR5
RnJvbURpc3RhbmNlKHVuc2lnbmVkIHBpeGVscywgYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpIGNv
bnN0OwotICAgIGludCBwcmlvcml0eUZyb21WaXNpYmlsaXR5KGJvb2wgdmlzaWJsZSwgYm9vbCBk
cmF3c1RvUm9vdFN1cmZhY2UpIGNvbnN0OwotCi0gICAgc3RhdGljIGlubGluZSBpbnQgaGlnaGVz
dFByaW9yaXR5KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsgfQot
ICAgIHN0YXRpYyBpbmxpbmUgaW50IGxvd2VzdFByaW9yaXR5KCkgeyByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvcml0
eUlzTG93ZXIoaW50IGEsIGludCBiKSB7IHJldHVybiBhID4gYjsgfQotICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBwcmlvcml0eUlzSGlnaGVyKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8IGI7IH0K
LSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbWF4UHJpb3JpdHkoaW50IGEsIGludCBiKSB7IHJldHVy
biBwcmlvcml0eUlzSGlnaGVyKGEsIGIpID8gYSA6IGI7IH0KKyAgICBzdGF0aWMgQ0NQcmlvcml0
eSB1aVByaW9yaXR5KGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKTsKKyAgICBzdGF0aWMgQ0NQcmlv
cml0eSB2aXNpYmxlUHJpb3JpdHkoYm9vbCBkcmF3c1RvUm9vdFN1cmZhY2UpOworICAgIHN0YXRp
YyBDQ1ByaW9yaXR5IHJlbmRlclN1cmZhY2VQcmlvcml0eSgpOworICAgIHN0YXRpYyBDQ1ByaW9y
aXR5IGxpbmdlcmluZ1ByaW9yaXR5KGNvbnN0IENDUHJpb3JpdHkmIHByZXZpb3VzUHJpb3JpdHkp
OworICAgIENDUHJpb3JpdHkgcHJpb3JpdHlGcm9tRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRleHR1cmVSZWN0LCBib29sIGRyYXdzVG9Sb290U3Vy
ZmFjZSkgY29uc3Q7CisgICAgQ0NQcmlvcml0eSBwcmlvcml0eUZyb21EaXN0YW5jZSh1bnNpZ25l
ZCBwaXhlbHMsIGJvb2wgZHJhd3NUb1Jvb3RTdXJmYWNlKSBjb25zdDsKKworICAgIHN0YXRpYyBp
bmxpbmUgQ0NQcmlvcml0eSBoaWdoZXN0UHJpb3JpdHkoKSB7IHJldHVybiBDQ1ByaW9yaXR5KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpOyB9CisgICAgc3RhdGljIGlubGluZSBDQ1By
aW9yaXR5IGxvd2VzdFByaW9yaXR5KCkgeyByZXR1cm4gQ0NQcmlvcml0eShzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvcml0eUlz
TG93ZXIoY29uc3QgQ0NQcmlvcml0eSYgYSwgY29uc3QgQ0NQcmlvcml0eSYgYikgeyByZXR1cm4g
YS5tX3ZhbHVlID4gYi5tX3ZhbHVlOyB9CisgICAgc3RhdGljIGlubGluZSBib29sIHByaW9yaXR5
SXNIaWdoZXIoY29uc3QgQ0NQcmlvcml0eSYgYSwgY29uc3QgQ0NQcmlvcml0eSYgYikgeyByZXR1
cm4gYS5tX3ZhbHVlIDwgYi5tX3ZhbHVlOyB9CisgICAgc3RhdGljIGlubGluZSBib29sIHByaW9y
aXR5SXNFcXVhbChjb25zdCBDQ1ByaW9yaXR5JiBhLCBjb25zdCBDQ1ByaW9yaXR5JiBiKSB7IHJl
dHVybiBhLm1fdmFsdWUgPT0gYi5tX3ZhbHVlOyB9CisgICAgc3RhdGljIGlubGluZSBDQ1ByaW9y
aXR5IG1heFByaW9yaXR5KGNvbnN0IENDUHJpb3JpdHkmIGEsIGNvbnN0IENDUHJpb3JpdHkmIGIp
IHsgcmV0dXJuIHByaW9yaXR5SXNIaWdoZXIoYSwgYikgPyBhIDogYjsgfQogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QuY3BwCmluZGV4IDRiY2FjY2RjM2E5YTA3OGZmYjhkZGYwZTE2ZThlZDQ3ZDRiMzc0
ZjcuLjJmZDZjNGNhYTU0ZmQ1MjhmYjZmNjQyNmQ3NWQyOTdiMzc5YjUzZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJl
VGVzdC5jcHAKQEAgLTM3LDggKzM3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCi1uYW1lc3Bh
Y2UgewotCiBjbGFzcyBDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6
VGVzdCB7CiBwdWJsaWM6CiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0KCkKQEAgLTg1LDYg
KzgzLDExIEBAIHB1YmxpYzoKICAgICAgICByZXR1cm4gbV9yZXNvdXJjZVByb3ZpZGVyLmdldCgp
OwogICAgIH0KIAorICAgIHN0YXRpYyBDQ1ByaW9yaXR5IHByaW9yaXR5RnJvbUludChpbnQgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gQ0NQcmlvcml0eSh2YWx1ZSk7CisgICAgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgY29uc3QgSW50U2l6ZSBtX3RleHR1cmVTaXplOwogICAgIGNvbnN0IEdD
M0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKQEAgLTkyLDYgKzk1LDggQEAgcHJvdGVjdGVkOgogICAg
IE93blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI+IG1fcmVzb3VyY2VQcm92aWRlcjsKIH07CiAKK25h
bWVzcGFjZSB7CisKIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0
dXJlRXhjZWVkaW5nTWF4TGltaXQpCiB7CiAgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0g
ODsKQEAgLTEwNSw3ICsxMTAsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBy
ZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogCiAgICAgLy8gU2V0IGRlY3JlYXNpbmcg
cHJpb3JpdGllcwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXMqMjsgKytp
KQotICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOworICAg
ICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5RnJvbUludCgxMDAg
KyBpKSk7CiAKICAgICAvLyBPbmx5IGxvd2VyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KICAg
ICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CkBAIC0xMTYsNyArMTIxLDcg
QEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1cmVFeGNlZWRp
bmdNYXhMaW1pdCkKIAogICAgIC8vIFNldCBpbmNyZWFzaW5nIHByaW9yaXRpZXMKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzKjI7ICsraSkKLSAgICAgICAgdGV4dHVyZXNb
aV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBpKTsKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNl
dFJlcXVlc3RQcmlvcml0eShwcmlvcml0eUZyb21JbnQoMTAwIC0gaSkpOwogCiAgICAgLy8gT25s
eSB1cHBlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFibGUuCiAgICAgdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygpOwpAQCAtMTQxLDcgKzE0Niw3IEBAIFRFU1RfRihDQ1ByaW9yaXRp
emVkVGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1h
bmFnZXItPmNyZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCi0gICAgICAgIHRleHR1
cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwICsgaSk7CisgICAgICAgIHRleHR1cmVzW2ld
LT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlGcm9tSW50KDEwMCArIGkpKTsKIAogICAgIC8v
IFNldCBtYXggbGltaXQgdG8gOCB0ZXh0dXJlcwogICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhN
ZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZSg4KSk7CkBAIC0yMDAsNyArMjA1LDcg
QEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJQYXJ0aWFs
VXBkYXRlVGV4dHVyZXMpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1U
ZXh0dXJlczsgKytpKQotICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDIw
MCArIGkpOworICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KHByaW9yaXR5
RnJvbUludCgyMDAgKyBpKSk7CiAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOwogCiAgICAgLy8gQWxsb2NhdGUgdGV4dHVyZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBoaWdo
IHByaW9yaXR5LgpAQCAtMjE1LDcgKzIyMCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFydGlhbFVwZGF0ZVRleHR1cmVzKQogICAgIEVYUEVDVF9U
UlVFKHRleHR1cmVzWzNdLT5oYXZlQmFja2luZ1RleHR1cmUoKSk7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bVRleHR1cmVzOyArK2kpCi0gICAgICAgIG1vcmVUZXh0dXJlc1tpXS0+
c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOworICAgICAgICBtb3JlVGV4dHVyZXNbaV0tPnNl
dFJlcXVlc3RQcmlvcml0eShwcmlvcml0eUZyb21JbnQoMTAwICsgaSkpOwogICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKIAogICAgIC8vIFRleHR1cmVzIGFyZSBub3cg
YmVsb3cgY3V0b2ZmLgpAQCAtMjU3LDkgKzI2Miw5IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQogCiAgICAgLy8gQWxs
IDE2IHRleHR1cmVzIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkgZXhjZXB0IDIgaGlnaGVyIHByaW9y
aXR5LgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKLSAgICAg
ICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOwotICAgIHRleHR1cmVzWzBd
LT5zZXRSZXF1ZXN0UHJpb3JpdHkoOTkpOwotICAgIHRleHR1cmVzWzFdLT5zZXRSZXF1ZXN0UHJp
b3JpdHkoOTkpOworICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KHByaW9y
aXR5RnJvbUludCgxMDApKTsKKyAgICB0ZXh0dXJlc1swXS0+c2V0UmVxdWVzdFByaW9yaXR5KHBy
aW9yaXR5RnJvbUludCg5OSkpOworICAgIHRleHR1cmVzWzFdLT5zZXRSZXF1ZXN0UHJpb3JpdHko
cHJpb3JpdHlGcm9tSW50KDk5KSk7CiAKICAgICAvLyBTZXQgbWF4IGxpbWl0IHRvIDggdGV4dHVy
ZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01l
bW9yeVNpemUoOCkpOwpAQCAtMjk0LDcgKzI5OSw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyRGVzdHJveWVkRmlyc3QpCiAgICAgLy8gVGV4dHVyZSBp
cyBpbml0aWFsbHkgaW52YWxpZCwgYnV0IGl0IHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KICAgICBF
WFBFQ1RfRkFMU0UodGV4dHVyZS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCi0gICAgdGV4dHVy
ZS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCk7CisgICAgdGV4dHVyZS0+c2V0UmVxdWVzdFByaW9y
aXR5KHByaW9yaXR5RnJvbUludCgxMDApKTsKICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CiAKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwg
ZmFsc2UpKTsKQEAgLTMyMCw3ICszMjUsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LCB0ZXh0dXJlTW92ZWRUb05ld01hbmFnZXIpCiAgICAgLy8gVGV4dHVyZSBpcyBpbml0aWFs
bHkgaW52YWxpZCwgYnV0IGl0IHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KICAgICBFWFBFQ1RfRkFM
U0UodGV4dHVyZS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCi0gICAgdGV4dHVyZS0+c2V0UmVx
dWVzdFByaW9yaXR5KDEwMCk7CisgICAgdGV4dHVyZS0+c2V0UmVxdWVzdFByaW9yaXR5KHByaW9y
aXR5RnJvbUludCgxMDApKTsKICAgICB0ZXh0dXJlTWFuYWdlck9uZS0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7CiAKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2Up
KTsKQEAgLTM2OCw3ICszNzMsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBy
ZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9yeUF2YWlsYWJsZU91dHNpZGVSb290UwogCiAgICAgLy8g
U2V0IGRlY3JlYXNpbmcgbm9uLXZpc2libGUgcHJpb3JpdGllcyBvdXRzaWRlIHJvb3Qgc3VyZmFj
ZS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCi0gICAgICAg
IHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwICsgaSk7CisgICAgICAgIHRleHR1
cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlGcm9tSW50KDEwMCArIGkpKTsKIAog
ICAgIC8vIE9ubHkgbG93ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgogICAgIHRleHR1cmVN
YW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKQEAgLTM3OSw3ICszODQsNyBAQCBURVNUX0Yo
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9yeUF2YWls
YWJsZU91dHNpZGVSb290UwogCiAgICAgLy8gU2V0IGluY3JlYXNpbmcgbm9uLXZpc2libGUgcHJp
b3JpdGllcyBvdXRzaWRlIHJvb3Qgc3VyZmFjZS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1heFRleHR1cmVzOyArK2kpCi0gICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3Jp
dHkoMTAwIC0gaSk7CisgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJp
b3JpdHlGcm9tSW50KDEwMCAtIGkpKTsKIAogICAgIC8vIE9ubHkgdXBwZXIgaGFsZiBzaG91bGQg
YmUgYXZhaWxhYmxlLgogICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
QEAgLTQxNCw3ICs0MTksNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZW5k
ZXJTdXJmYWNlc1JlZHVjZU1lbW9yeUF2YWlsYWJsZUZvclJlcXVlc3RMYQogCiAgICAgLy8gU2V0
IGVxdWFsIHByaW9yaXRpZXMuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJl
czsgKytpKQotICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCk7Cisg
ICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkocHJpb3JpdHlGcm9tSW50KDEw
MCkpOwogCiAgICAgLy8gVGhlIGZpcnN0IGZvdXIgdG8gYmUgcmVxdWVzdGVkIGxhdGUgd2lsbCBi
ZSBhdmFpbGFibGUuCiAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>