<?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>55515</bug_id>
          
          <creation_ts>2011-03-01 15:09:08 -0800</creation_ts>
          <short_desc>Implement proper handling of mouseover/mouseout events in regard to shadow DOM boundaries.</short_desc>
          <delta_ts>2011-04-09 19:33:29 -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>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>57045</dependson>
    
    <dependson>57050</dependson>
    
    <dependson>57168</dependson>
    
    <dependson>57247</dependson>
    
    <dependson>57285</dependson>
    
    <dependson>57391</dependson>
    
    <dependson>57402</dependson>
    
    <dependson>57419</dependson>
    
    <dependson>57521</dependson>
    
    <dependson>57562</dependson>
    
    <dependson>57639</dependson>
    
    <dependson>57642</dependson>
    
    <dependson>57655</dependson>
    
    <dependson>58190</dependson>
          <blocked>53020</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>360285</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-01 15:09:08 -0800</bug_when>
    <thetext>Implement proper handling of mouseover/mouseout events in regard to shadow DOM boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360293</commentid>
    <comment_count>1</comment_count>
      <attachid>84307</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-01 15:19:20 -0800</bug_when>
    <thetext>Created attachment 84307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360299</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-01 15:23:53 -0800</bug_when>
    <thetext>I know this patch is _G_narly. I really don&apos;t like digging into the type of the event at this point. All of the abstractions we built so far attempt to insulate dispatch logic from the event type differences.

I&apos;ll keep thinking on better ideas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372533</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-23 16:37:30 -0700</bug_when>
    <thetext>One solution is to move retargeting into the event. Let me see how that works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373074</commentid>
    <comment_count>4</comment_count>
      <attachid>84307</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-24 14:04:22 -0700</bug_when>
    <thetext>Comment on attachment 84307
Patch

removing r? flag for now. Refactoring event code..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378393</commentid>
    <comment_count>5</comment_count>
      <attachid>87975</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-02 08:34:45 -0700</bug_when>
    <thetext>Created attachment 87975
Using EventDispatcher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379746</commentid>
    <comment_count>6</comment_count>
      <attachid>88279</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-05 11:03:16 -0700</bug_when>
    <thetext>Created attachment 88279
Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381424</commentid>
    <comment_count>7</comment_count>
      <attachid>88279</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-07 09:49:25 -0700</bug_when>
    <thetext>Comment on attachment 88279
Ready for review.

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

While I&apos;m not familiar with XBL2.0 enough to r+ this patch, I&apos;m going to leave some general feedback.

&gt; Source/WebCore/dom/EventDispatcher.cpp:174
&gt; +    // Calculate early if the common boundary is even possible by looking at
&gt; +    // ancestors size and if the retargeting has occured (indicating the presence of shadow DOM boundaries).
&gt; +    // If there are no boundaries detected, the target and related target can&apos;t have a common boundary.
&gt; +    bool noCommonBoundary = m_ancestors.isEmpty() || m_ancestors.first().node() == m_ancestors.last().node();

I&apos;d extract a helper inline function for this.

&gt; Source/WebCore/dom/EventDispatcher.cpp:176
&gt; +    // Build the ancestor chain for relatedTarget.

I think it&apos;s self-evident from the code that you&apos;re making a list of ancestors.

&gt; Source/WebCore/dom/EventDispatcher.cpp:221
&gt; +    Vector&lt;EventContext&gt;::iterator targetAncestor = m_ancestors.end();
&gt; +    // Walk down from the top, looking for lowest common ancestor, also monitoring shadow DOM boundaries.
&gt; +    bool diverged = false;
&gt; +    for (Vector&lt;Node*&gt;::iterator i = relatedTargetAncestors.end() - 1; i &gt;= relatedTargetAncestors.begin(); --i) {
&gt; +        if (diverged) {
&gt; +            if ((*i)-&gt;isShadowRoot()) {
&gt; +                firstInnerBoundary = i + 1;
&gt; +                break;
&gt; +            }
&gt; +            continue;
&gt; +        }
&gt; +
&gt; +        if (targetAncestor == m_ancestors.begin()) {
&gt; +            diverged = true;
&gt; +            continue;
&gt; +        }
&gt; +
&gt; +        targetAncestor--;
&gt; +
&gt; +        if ((*i)-&gt;isShadowRoot())
&gt; +            lastCommonBoundary = targetAncestor;
&gt; +
&gt; +        if ((*i) != (*targetAncestor).node()) {
&gt; +            targetAncestor = m_ancestors.begin();
&gt; +            diverged = true;
&gt; +            continue;
&gt; +        }
&gt; +    }

I&apos;d extract this as a function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382383</commentid>
    <comment_count>8</comment_count>
      <attachid>88841</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 10:55:35 -0700</bug_when>
    <thetext>Created attachment 88841
Addressed feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382385</commentid>
    <comment_count>9</comment_count>
      <attachid>88279</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 10:56:31 -0700</bug_when>
    <thetext>Comment on attachment 88279
Ready for review.

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

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:174
&gt;&gt; +    bool noCommonBoundary = m_ancestors.isEmpty() || m_ancestors.first().node() == m_ancestors.last().node();
&gt; 
&gt; I&apos;d extract a helper inline function for this.

Done.

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:176
&gt;&gt; +    // Build the ancestor chain for relatedTarget.
&gt; 
&gt; I think it&apos;s self-evident from the code that you&apos;re making a list of ancestors.

Removed the comment.

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:221
&gt;&gt; +    }
&gt; 
&gt; I&apos;d extract this as a function.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382435</commentid>
    <comment_count>10</comment_count>
      <attachid>88841</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-08 11:59:41 -0700</bug_when>
    <thetext>Comment on attachment 88841
Addressed feedback.

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

&gt; Source/WebCore/dom/EventDispatcher.cpp:128
&gt; +struct BoundaryAdjustments {
&gt; +size_t ancestorSize;
&gt; +Node* relatedTarget;
&gt; +};

Missing indent here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382442</commentid>
    <comment_count>11</comment_count>
      <attachid>88854</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 12:04:36 -0700</bug_when>
    <thetext>Created attachment 88854
Adjusted indent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382703</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 18:47:52 -0700</bug_when>
    <thetext>I wonder if nice folks will take pity on me and review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382716</commentid>
    <comment_count>13</comment_count>
      <attachid>88854</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-04-08 19:54:02 -0700</bug_when>
    <thetext>Comment on attachment 88854
Adjusted indent

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

&gt; LayoutTests/fast/events/shadow-boundary-crossing.html:100
&gt; +        var counter = function()

Nit: functions are usually verbs, no?

&gt; LayoutTests/fast/events/shadow-boundary-crossing.html:112
&gt; +        var count = 0;
&gt; +        var fileInput = document.body.appendChild(document.createElement(&apos;input&apos;));
&gt; +        fileInput.setAttribute(&apos;type&apos;, &apos;file&apos;);
&gt; +        var counter = function()
&gt; +        {
&gt; +            count++;
&gt; +        }
&gt; +        moveOverLeftQuarterOf(fileInput);
&gt; +        document.body.addEventListener(&apos;mouseover&apos;, counter, false);
&gt; +        document.body.addEventListener(&apos;mouseout&apos;, counter, false);
&gt; +        moveOverRightQuarterOf(fileInput);
&gt; +        log(&quot;The mouseover/mouseout event between two elements inside the same shadow subtree should not propagate out of the shadow DOM&quot;, count == 0);
&gt; +        document.body.removeEventListener(&apos;mouseover&apos;, counter, false);
&gt; +        document.body.removeEventListener(&apos;mouseout&apos;, counter, false);
&gt; +        fileInput.parentNode.removeChild(fileInput);
&gt; +    },

This would be easier to read with some more line-breaks.

&gt; Source/WebCore/dom/EventDispatcher.cpp:193
&gt; +PassRefPtr&lt;EventTarget&gt; EventDispatcher::adjustRelatedTarget(Event* event, PassRefPtr&lt;EventTarget&gt; relatedTargetArg)

Not sure this name is accurate anymore since this is also adjusting m_ancestors now.

&gt; Source/WebCore/dom/EventDispatcher.cpp:228
&gt; +    BoundaryAdjustments adjustments = adjustToShadowBoundaries(target, m_ancestors, relatedTargetAncestors);
&gt; +    m_ancestors.shrink(adjustments.ancestorSize);
&gt; +    return adjustments.relatedTarget ? adjustments.relatedTarget : relatedTarget;

Can you make adjustToShadowBoundaries a private method? Then, it can adjust m_ancestors directly instead of returning a BoundayAdjustments object. Also, it can then just return the related target or null as approriate.

I think the BoundaryAdjustments struct makes this code a little harder to make sense of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382717</commentid>
    <comment_count>14</comment_count>
      <attachid>88854</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-04-08 19:58:45 -0700</bug_when>
    <thetext>Comment on attachment 88854
Adjusted indent

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

&gt; Source/WebCore/dom/EventDispatcher.cpp:161
&gt; +            continue;

this continue isn&apos;t needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382718</commentid>
    <comment_count>15</comment_count>
      <attachid>88854</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 20:00:42 -0700</bug_when>
    <thetext>Comment on attachment 88854
Adjusted indent

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

&gt;&gt; LayoutTests/fast/events/shadow-boundary-crossing.html:100
&gt;&gt; +        var counter = function()
&gt; 
&gt; Nit: functions are usually verbs, no?

I am matching the convention elsewhere in this file. Granted, I did write all the tests in this file :)

&gt;&gt; LayoutTests/fast/events/shadow-boundary-crossing.html:112
&gt;&gt; +    },
&gt; 
&gt; This would be easier to read with some more line-breaks.

Sure, I&apos;ll add some.

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:193
&gt;&gt; +PassRefPtr&lt;EventTarget&gt; EventDispatcher::adjustRelatedTarget(Event* event, PassRefPtr&lt;EventTarget&gt; relatedTargetArg)
&gt; 
&gt; Not sure this name is accurate anymore since this is also adjusting m_ancestors now.

Ancestors is private to EventDispatcher, so the user of the function isn&apos;t really aware of what else is happening in the method.

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:228
&gt;&gt; +    return adjustments.relatedTarget ? adjustments.relatedTarget : relatedTarget;
&gt; 
&gt; Can you make adjustToShadowBoundaries a private method? Then, it can adjust m_ancestors directly instead of returning a BoundayAdjustments object. Also, it can then just return the related target or null as approriate.
&gt; 
&gt; I think the BoundaryAdjustments struct makes this code a little harder to make sense of.

Sure, will do. I did like the fact that adjustToShadowBoundaries doesn&apos;t modify any state, but that&apos;s splitting hairs and not very important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382719</commentid>
    <comment_count>16</comment_count>
      <attachid>88854</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 20:01:37 -0700</bug_when>
    <thetext>Comment on attachment 88854
Adjusted indent

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

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:161
&gt;&gt; +            continue;
&gt; 
&gt; this continue isn&apos;t needed

DUH. Thanks, will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382796</commentid>
    <comment_count>17</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-09 15:44:53 -0700</bug_when>
    <thetext>I added a diagram at http://trac.webkit.org/export/83382/trunk/Websites/webkit.org/misc/related-target-and-shadow-dom.svg to illustrate what&apos;s going on.

For events that have a related target (like mouseover/out), we have to make sure that:

1) if both related target and target are part of a shadow DOM subtree, propagation of the event is confined to that shadow DOM subtree.

2) if the related target is itself inside of a shadow DOM subtree, it is adjusted to the node that host this shadow subtree -- to avoid leaking shadow DOM nodes in event dispatch.

To do this, we must find two boundaries:

1) the lowest common boundary, which is the lowest (in tree sense) possible shadow DOM subtree boundary that includes both related target and target nodes.

2) the first divergent boundary, which is the first shadow DOM boundary that includes related target, but not target.

The code in patch does the following:

1) populate target ancestor chain;
2) populate related target ancestor chain;
3) simultaneously walking both chains from the top, look for divergence (ancestors aren&apos;t equal) and keep track of shadow DOM boundaries;
4) once divergence is detected, the last remembered shadow DOM boundary is deemed the lowest common boundary;
5) the walk continues down the related ancestor chain until the next shadow DOM boundary (the first divergent boundary) is found;
6) the target ancestor chain is trimmed up to the lowest common boundary;
7) the related target is changed to the first ancestor outside of the first divergent boundary. 

In addition, there&apos;s some logic to deal with edge cases and short-circuiting of the boundary computation in the case when target ancestor chain does cross any shadow DOM boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382804</commentid>
    <comment_count>18</comment_count>
      <attachid>88935</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-09 16:30:56 -0700</bug_when>
    <thetext>Created attachment 88935
More feedback addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382805</commentid>
    <comment_count>19</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-09 16:31:34 -0700</bug_when>
    <thetext>Feedback addressed, PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382813</commentid>
    <comment_count>20</comment_count>
      <attachid>88935</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-04-09 17:29:42 -0700</bug_when>
    <thetext>Comment on attachment 88935
More feedback addressed.

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

&gt; Source/WebCore/dom/EventDispatcher.cpp:128
&gt; +    // Assume divergent boundary is the relatedTarget itself (in other words, related target ancestor chaing does not cross any shadow DOM boundaries).

typo: chaing

&gt; Source/WebCore/dom/EventDispatcher.cpp:154
&gt; +            targetAncestor = m_ancestors.begin();

Do you need to set this? Once diverged == true, we never care about the valur of targetAncestor anymore, right?

&gt; Source/WebCore/dom/EventDispatcher.cpp:170
&gt; +    } else {
&gt; +        // Since ancestors does not contain target itself, we must account
&gt; +        // for the possibility that target is a shadowHost of relatedTarget
&gt; +        // and thus serves as the lowestCommonBoundary.
&gt; +        // Luckily, in this case the firstDivergentBoundary is target.
&gt; +        if ((*firstDivergentBoundary) == m_node.get())
&gt; +            lowestCommonBoundary = m_ancestors.begin();
&gt; +    }

nit: this could be an else-if. your call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382823</commentid>
    <comment_count>21</comment_count>
      <attachid>88935</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-09 19:26:33 -0700</bug_when>
    <thetext>Comment on attachment 88935
More feedback addressed.

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

Fixing comments and landing now. Thanks Ojan! :)

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:128
&gt;&gt; +    // Assume divergent boundary is the relatedTarget itself (in other words, related target ancestor chaing does not cross any shadow DOM boundaries).
&gt; 
&gt; typo: chaing

Doneg.

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:154
&gt;&gt; +            targetAncestor = m_ancestors.begin();
&gt; 
&gt; Do you need to set this? Once diverged == true, we never care about the valur of targetAncestor anymore, right?

Oh, that&apos;s right! Thanks.

&gt;&gt; Source/WebCore/dom/EventDispatcher.cpp:170
&gt;&gt; +    }
&gt; 
&gt; nit: this could be an else-if. your call.

Ooh, pretty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382827</commentid>
    <comment_count>22</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-09 19:33:29 -0700</bug_when>
    <thetext>Committed r83386: &lt;http://trac.webkit.org/changeset/83386&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84307</attachid>
            <date>2011-03-01 15:19:20 -0800</date>
            <delta_ts>2011-04-02 08:34:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55515-20110301151919.patch</filename>
            <type>text/plain</type>
            <size>12878</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk3MDgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NDRkY2M2MTFjNjAxNzc4ZmNlOGEw
MWY4YmQ4MjcyNWY3Njg3MjliLi43MmZiMTYxZjYzY2M1NjE2YjI4OWM4NTA1OGI5MDkwOWNlZmU2
MDg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDMtMDEgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcHJvcGVyIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9t
b3VzZW91dCBldmVudHMgaW4gcmVnYXJkIHRvIHNoYWRvdyBET00gYm91bmRhcmllcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTE1CisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0OiBV
cGRhdGVkIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRh
cnktY3Jvc3NpbmcuaHRtbDogQWRkZWQgbmV3IHRlc3QgZm9yIG1vdXNlb3Zlci9tb3VzZW91dCBo
YW5kbGluZy4KKwogMjAxMS0wMi0yNSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEZpeCB0eXBvIGluIENocm9taXVtIHRlc3QgZXhwZWN0YXRpb25zLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3Nz
aW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1ib3VuZGFy
eS1jcm9zc2luZy1leHBlY3RlZC50eHQKaW5kZXggODg4OTE4OTgzYzk4ZjcxODczNTJiNzJiMGE3
NmNmM2E0MGE3ZmVjZi4uYmEyN2FlYjg0MDY5M2ViMWI1ZjI3M2JiYTM4YmJkNTgwZmYxNTg3ZiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3Nz
aW5nLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91
bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0CkBAIC00LDYgKzQsNyBAQCBTZWUgYnVnIDQ2MDE1
IGZvciBkZXRhaWxzLgogCiBNdXRhdGlvbiBldmVudHMgc2hvdWxkIG5vdCBwcm9wYWdhdGUgb3V0
IG9mIHRoZSBzaGFkb3cgRE9NOiBQQVNTCiBUaGUgc2VsZWN0c3RhcnQgZXZlbnQgc2hvdWxkIG5v
dCBwcm9wYWdhdGUgb3V0IG9mIHRoZSBzaGFkb3cgRE9NOiBQQVNTCitUaGUgbW91c2VvdmVyL21v
dXNlb3V0IGV2ZW50IGJldHdlZW4gdHdvIGVsZW1lbnRzIGluc2lkZSB0aGUgc2FtZSBzaGFkb3cg
c3VidHJlZSBzaG91bGQgbm90IHByb3BhZ2F0ZSBvdXQgb2YgdGhlIHNoYWRvdyBET006IFBBU1MK
IExhYmVsIHNob3VsZCBsb29rIGJleW9uZCBzaGFkb3cgYm91bmRhcnkgdG8gZGV0ZWN0IGlmIGl0
IGVuY2xvc2VzIGl0cyBhc3NvY2lhdGVkIGVsZW1lbnQ6IFBBU1MKIEV2ZW50cyBmb3IgZGVmYXVs
dCBldmVudCBoYW5kbGVyIHNob3VsZCBub3QgYmUgcmV0YXJnZXRlZDogUEFTUwogRXZlbnQncyBy
ZWxhdGVkVGFyZ2V0IHNob3VsZCBiZSByZXRhcmdldGVkOiBQQVNTCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmcuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sCmluZGV4IDU4
NGYxYTUxNjEyODdiMTgzMGE3OTIyZTJjZjQ1ZGFlMGE2ZjI0MzguLjdlYTMzMzFkOTNhMmU5Nzk3
MWUzNmJhNGViYmQwMzMwY2M2MDQ4ZDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sCkBAIC0xOSw2ICsxOSwyNiBAQCBm
dW5jdGlvbiBtb3ZlT3ZlcihlbGVtZW50KQogICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgs
IHkpOwogfQogCitmdW5jdGlvbiBtb3ZlT3ZlckxlZnRRdWFydGVyT2YoZWxlbWVudCkKK3sKKyAg
ICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIHgg
PSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gNDsKKyAgICB2YXIg
eSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2
ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworfQorCitmdW5jdGlvbiBtb3ZlT3ZlclJpZ2h0
UXVhcnRlck9mKGVsZW1lbnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5v
ZmZzZXRXaWR0aCAqIDMgLyA0OworICAgIHZhciB5ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVt
ZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7
Cit9CisKIGZ1bmN0aW9uIGNsaWNrT24oZWxlbWVudCkKIHsKICAgICBtb3ZlT3ZlcihlbGVtZW50
KTsKQEAgLTMxLDkgKzUxLDcgQEAgZnVuY3Rpb24gY2xpY2tPbkxlZnRRdWFydGVyT2YoZWxlbWVu
dCkKICAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
dmFyIHggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gNDsKLSAg
ICB2YXIgeSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwot
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworICAgIG1vdmVPdmVyTGVmdFF1YXJ0
ZXJPZihlbGVtZW50KTsKICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKICAgICBldmVudFNl
bmRlci5tb3VzZVVwKCk7CiB9CkBAIC03NCw2ICs5MiwyNCBAQCB2YXIgdGVzdHMgPSB7CiAgICAg
ICAgIHRleHRJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRJbnB1dCk7CiAgICAgICAg
IGRvY3VtZW50LnNlbGVjdHN0YXJ0ID0gbnVsbDsKICAgICB9LAorICAgIG1vdXNlT3ZlckFuZE91
dFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgY291bnQgPSAwOwor
ICAgICAgICB2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICAgICAgZmlsZUlucHV0LnNldEF0dHJpYnV0
ZSgndHlwZScsICdmaWxlJyk7CisgICAgICAgIHZhciBjb3VudGVyID0gZnVuY3Rpb24oKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgIG1vdmVPdmVy
TGVmdFF1YXJ0ZXJPZihmaWxlSW5wdXQpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50
TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGNvdW50ZXIsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQu
Ym9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGNvdW50ZXIsIGZhbHNlKTsKKyAgICAg
ICAgbW92ZU92ZXJSaWdodFF1YXJ0ZXJPZihmaWxlSW5wdXQpOworICAgICAgICBsb2coIlRoZSBt
b3VzZW92ZXIvbW91c2VvdXQgZXZlbnQgYmV0d2VlbiB0d28gZWxlbWVudHMgaW5zaWRlIHRoZSBz
YW1lIHNoYWRvdyBzdWJ0cmVlIHNob3VsZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93
IERPTSIsIGNvdW50ID09IDApOworICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlz
dGVuZXIoJ21vdXNlb3ZlcicsIGNvdW50ZXIsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQuYm9k
eS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGNvdW50ZXIsIGZhbHNlKTsKKyAgICAg
ICAgZmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKKyAgICB9LAog
ICAgIGxhYmVsU3ludGhldGljQ2xpY2s6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBj
b3VudCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRlZmZkZjE3MjBhY2E3YmFmZGMwZWI2ZWMwNDNhMmY0
MTk4MjM3NC4uODIzOGQ3NTk3ZDRlZWYyY2EyOTAxZmE1MDE2ZDliZWYxNDE4MTRjNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTAzLTAxICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IHByb3BlciBoYW5kbGluZyBvZiBtb3VzZW92ZXIvbW91c2Vv
dXQgZXZlbnRzIGluIHJlZ2FyZCB0byBzaGFkb3cgRE9NIGJvdW5kYXJpZXMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTUxNQorCisgICAgICAgIFRo
aXMgaW1wbGVtZW50cyBYQkwgMi4wJ3Mgc3BlY2lmaWVkIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9t
b3VzZW91dCBldmVudHM6CisgICAgICAgIGh0dHA6Ly9kZXYudzMub3JnLzIwMDYveGJsMi9PdmVy
dmlldy5odG1sI3RoZS1tb3VzZW92ZXItYW5kLW1vdXNlb3V0LWV2ZW50cworCisgICAgICAgIFRv
IGRvIHRoaXMsIHdlOgorICAgICAgICAxKSBjYWxjdWxhdGUgbG93ZXN0IGNvbW1vbiBhbmNlc3Rv
ciBiZXR3ZWVuIHJlbGF0ZWRUYXJnZXQgYW5kIHRhcmdldCwgYW5kCisgICAgICAgICAgIHRoZSBu
ZWFyZXN0IGJvdW5kYXJpZXMgYXJvdW5kIHRoZW06IHRoZSBvdXRlciAoY29tbW9uKSBib3VuZGFy
eSwgYW5kIHRoZQorICAgICAgICAgICBpbm5lciAoc3BlY2lmaWMgdG8gcmVsYXRlZFRhcmdldCkg
Ym91bmRhcnkuIFRoZW4sIHdlCisgICAgICAgIDIpIGVuc3VyZSB0aGF0IGV2ZW50cyBvbmx5IHBy
b3BhZ2F0ZSB1cCB0byB0aGUgY29tbW9uIGJvdW5kYXJ5IChvcgorICAgICAgICAgICBhbGwgdGhl
IHdheSBpZiBib3VuZGFyeSBpcyBub3QgZm91bmQpLCB3aGlsZQorICAgICAgICAzKSB1cGRhdGlu
ZyByZWxhdGVkVGFyZ2V0IGJlIHRoZSBpbm5lciBib3VuZGFyeS4KKworICAgICAgICBXZSBhbHNv
IGRldGVjdCB0aGUgbW9zdCBjb21tb24gY2FzZSB3aGVuIG5vIGNvbW1vbiBib3VuZGFyeSBjb3Vs
ZCBleGlzdAorICAgICAgICBhbmQgcHJvdmlkZSBhIGZhc3QgcGF0aCB0byBzaG9ydC1jaXJjdWl0
IG1vc3Qgb2YgdGhlIGJvdW5kYXJ5IGRldGVjdGlvbgorICAgICAgICBsb2dpYy4KKworICAgICAg
ICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50OjpzZXRS
ZWxhdGVkVGFyZ2V0KTogQWRkZWQuCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dXBkYXRlUmVsYXRlZFRhcmdldElmTmVjZXNzYXJ5KTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaEdlbmVyaWNFdmVudCk6IFJlbW92ZWQgcHJldmlvdXMg
aW5jb21wbGV0ZSBzb2x1dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpc3BhdGNoTW91
c2VFdmVudCk6IEFkZGVkIHRoZSB1c2Ugb2YgdXBkYXRlUmVsYXRlZFRhcmdldElmTmVjZXNzYXJ5
LgorCiAyMDExLTAyLTI1ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L01vdXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKaW5kZXggNzQ1
NGIwNDkyZDZiYTc2OWZjZTllNGNhMGJmNjg4ZjQ4MTE4ZGU1YS4uZTc2MmM3MmQyYjQ0ZjEzYTVl
MTc1OWZiZmVmNzQ3ZTg3ZGQ1ZjE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCkBAIC01Niw2
ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0
dG9uKCkgY29uc3QgeyByZXR1cm4gbV9idXR0b247IH0KICAgICAgICAgYm9vbCBidXR0b25Eb3du
KCkgY29uc3QgeyByZXR1cm4gbV9idXR0b25Eb3duOyB9CiAgICAgICAgIEV2ZW50VGFyZ2V0KiBy
ZWxhdGVkVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0LmdldCgpOyB9Cisg
ICAgICAgIHZvaWQgc2V0UmVsYXRlZFRhcmdldChFdmVudFRhcmdldCopOwogCiAgICAgICAgIENs
aXBib2FyZCogY2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQuZ2V0KCk7IH0K
IApAQCAtODEsNiArODIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8
Q2xpcGJvYXJkPiBtX2NsaXBib2FyZDsKICAgICB9OwogCitpbmxpbmUgdm9pZCBNb3VzZUV2ZW50
OjpzZXRSZWxhdGVkVGFyZ2V0KEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KQoreworICAgIG1f
cmVsYXRlZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIE1vdXNlRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDBjMDExN2M2
NGZiYmU5NjZlYmRhYWJkMWIxNmRhZGMwNzQwZGE2M2UuLjU3MTIzM2QxMzI3NmQ3ZDVlNTU4OTAx
OTgwOGIwNjJjNGUwMDEwMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI1NjgsNiArMjU2OCwxMDIg
QEAgc3RhdGljIGlubGluZSBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFy
Z2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm8KICAgICByZXR1cm4gcmVmZXJlbmNlTm9kZTsKIH0K
IAorLy8gRklYTUU6IE9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUyOTYzIGxhbmRzLCB0aGlzIHNob3VsZAorLy8gYmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDAyNS4KK3N0YXRpYyB2b2lk
IHVwZGF0ZVJlbGF0ZWRUYXJnZXRJZk5lY2Vzc2FyeShWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5j
ZXN0b3JzLCBFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworICAgIGlmICghbW91c2VFdmVudC0+cmVsYXRlZFRh
cmdldCgpIHx8IChtb3VzZUV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2
ZW50ICYmIG1vdXNlRXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkp
CisgICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIHJlbGF0ZWRUYXJnZXQgPSBtb3VzZUV2ZW50
LT5yZWxhdGVkVGFyZ2V0KCktPnRvTm9kZSgpOworICAgIGlmICghcmVsYXRlZFRhcmdldCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTm9kZSogdGFyZ2V0ID0gbW91c2VFdmVudC0+dGFyZ2V0KCkt
PnRvTm9kZSgpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBD
YWxjdWxhdGUgZWFybHkgaWYgdGhlIGNvbW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5
IGxvb2tpbmcgYXQKKyAgICAvLyBhbmNlc3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5n
IGhhcyBvY2N1cmVkIChpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5k
YXJpZXMpLgorICAgIC8vIElmIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUg
dGFyZ2V0IGFuZCByZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5Lgor
ICAgIGJvb2wgbm9Db21tb25Cb3VuZGFyeSA9IGFuY2VzdG9ycy5pc0VtcHR5KCkgfHwgYW5jZXN0
b3JzLmZpcnN0KCkubm9kZSgpID09IGFuY2VzdG9ycy5sYXN0KCkubm9kZSgpOworCisgICAgLy8g
QnVpbGQgdGhlIGFuY2VzdG9yIGNoYWluIGZvciByZWxhdGVkVGFyZ2V0LgorICAgIFZlY3RvcjxO
b2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9yczsKKyAgICBOb2RlKiBvdXRlcm1vc3RTaGFkb3dC
b3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXQ7CisgICAgZm9yIChOb2RlKiBuID0gcmVsYXRlZFRhcmdl
dDsgbjsgbiA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKSkgeworICAgICAgICBpZiAobi0+aXNTaGFk
b3dSb290KCkpCisgICAgICAgICAgICBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IG4tPnBhcmVu
dE9ySG9zdE5vZGUoKTsKKyAgICAgICAgaWYgKCFub0NvbW1vbkJvdW5kYXJ5KQorICAgICAgICAg
ICAgcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5hcHBlbmQobik7CisgICAgfQorCisgICAgaWYgKG5v
Q29tbW9uQm91bmRhcnkpIHsKKyAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCB0aGUgZmFzdCBjYXNl
IHdoZW4gd2Uga25vdyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBhIGNvbW1vbiBib3Vu
ZGFyeS4KKyAgICAgICAgbW91c2VFdmVudC0+c2V0UmVsYXRlZFRhcmdldChvdXRlcm1vc3RTaGFk
b3dCb3VuZGFyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8RXZlbnRD
b250ZXh0Pjo6aXRlcmF0b3IgbGFzdENvbW1vbkJvdW5kYXJ5ID0gYW5jZXN0b3JzLmVuZCgpOwor
ICAgIC8vIEFzc3VtZSBpbm5lciBib3VuZGFyeSBpcyB0aGUgcmVsYXRlZFRhcmdldCBpdHNlbGYg
KGluIG90aGVyIHdvcmRzLCB0aGVyZSBhcmUgbm8gc2hhZG93IERPTSBib3VuZGFyaWVzKS4KKyAg
ICBWZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBmaXJzdElubmVyQm91bmRhcnkgPSByZWxhdGVkVGFy
Z2V0QW5jZXN0b3JzLmJlZ2luKCk7CisKKyAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6aXRlcmF0
b3IgdGFyZ2V0QW5jZXN0b3IgPSBhbmNlc3RvcnMuZW5kKCk7CisgICAgLy8gV2FsayBkb3duIGZy
b20gdGhlIHRvcCwgbG9va2luZyBmb3IgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciwgYWxzbyBtb25p
dG9yaW5nIHNoYWRvdyBET00gYm91bmRhcmllcy4KKyAgICBib29sIGRpdmVyZ2VkID0gZmFsc2U7
CisgICAgZm9yIChWZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBpID0gcmVsYXRlZFRhcmdldEFuY2Vz
dG9ycy5lbmQoKSAtIDE7IGkgPj0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpOyAtLWkp
IHsKKyAgICAgICAgaWYgKGRpdmVyZ2VkKSB7CisgICAgICAgICAgICBpZiAoKCppKS0+aXNTaGFk
b3dSb290KCkpIHsKKyAgICAgICAgICAgICAgICBmaXJzdElubmVyQm91bmRhcnkgPSBpICsgMTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRhcmdldEFuY2VzdG9yID09IGFuY2VzdG9y
cy5iZWdpbigpKSB7CisgICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldEFuY2VzdG9yLS07CisKKyAgICAg
ICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgbGFzdENvbW1vbkJvdW5k
YXJ5ID0gdGFyZ2V0QW5jZXN0b3I7CisKKyAgICAgICAgaWYgKCgqaSkgIT0gKCp0YXJnZXRBbmNl
c3Rvcikubm9kZSgpKSB7CisgICAgICAgICAgICB0YXJnZXRBbmNlc3RvciA9IGFuY2VzdG9ycy5i
ZWdpbigpOworICAgICAgICAgICAgZGl2ZXJnZWQgPSB0cnVlOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWRpdmVyZ2VkKSB7CisgICAgICAgIC8v
IFRoZSByZWxhdGVkVGFyZ2V0IGlzIGEgcGFyZW50IG9yIHNoYWRvd0hvc3Qgb2YgdGhlIHRhcmdl
dC4KKyAgICAgICAgaWYgKHRhcmdldC0+aXNTaGFkb3dSb290KCkpCisgICAgICAgICAgICBsYXN0
Q29tbW9uQm91bmRhcnkgPSBhbmNlc3RvcnMuYmVnaW4oKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBTaW5jZSBhbmNlc3RvcnMgZG9lcyBub3QgY29udGFpbiB0YXJnZXQgaXRzZWxmLCB3ZSBt
dXN0IGFjY291bnQKKyAgICAgICAgLy8gZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRhcmdldCBp
cyBhIHNoYWRvd0hvc3Qgb2YgcmVsYXRlZFRhcmdldAorICAgICAgICAvLyBhbmQgdGh1cyBzZXJ2
ZXMgYXMgdGhlIGxhc3RDb21tb25Cb3VuZGFyeS4KKyAgICAgICAgLy8gTHVja2lseSwgaW4gdGhp
cyBjYXNlIHRoZSBmaXJzdElubmVyQm91bmRhcnkgaXMgdGFyZ2V0LgorICAgICAgICBpZiAoKCpm
aXJzdElubmVyQm91bmRhcnkpID09IHRhcmdldCkKKyAgICAgICAgICAgIGxhc3RDb21tb25Cb3Vu
ZGFyeSA9IGFuY2VzdG9ycy5iZWdpbigpOworICAgIH0KKworICAgIGlmIChsYXN0Q29tbW9uQm91
bmRhcnkgIT0gYW5jZXN0b3JzLmVuZCgpKSB7CisgICAgICAgIC8vIFRyaW0gYW5jZXN0b3JzIHRv
IGxhc3RDb21tb25Cb3VuZGFyeSB0byBrZWVwIGV2ZW50cyBpbnNpZGUgb2YgdGhlIGNvbW1vbiBz
aGFkb3cgRE9NIHN1YnRyZWUuCisgICAgICAgIGFuY2VzdG9ycy5zaHJpbmsobGFzdENvbW1vbkJv
dW5kYXJ5IC0gYW5jZXN0b3JzLmJlZ2luKCkpOworICAgIH0KKworICAgIC8vIFNldCBldmVudCdz
IHJlbGF0ZWQgdGFyZ2V0IHRvIHRoZSBmaXJzdCBlbmNvdW50ZXJlZCBzaGFkb3cgRE9NIGJvdW5k
YXJ5IGluIHRoZSBkaXZlcmdlbnQgc3VidHJlZS4KKyAgICBpZiAoZmlyc3RJbm5lckJvdW5kYXJ5
ICE9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKSkKKyAgICAgICAgbW91c2VFdmVudC0+
c2V0UmVsYXRlZFRhcmdldCgoKmZpcnN0SW5uZXJCb3VuZGFyeSkpOworfQorCiB2b2lkIE5vZGU6
OmdldEV2ZW50QW5jZXN0b3JzKFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNlc3RvcnMsIEV2ZW50
VGFyZ2V0KiBvcmlnaW5hbFRhcmdldCwgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGJlaGF2aW9yKQog
ewogICAgIGlmICghaW5Eb2N1bWVudCgpKQpAQCAtMjY1Niw2ICsyNzUyLDcgQEAgYm9vbCBOb2Rl
OjpkaXNwYXRjaEdlbmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBS
ZWZQdHI8RXZlbnRUYXJnZXQ+IG9yaWdpbmFsVGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpOwogICAg
IFZlY3RvcjxFdmVudENvbnRleHQ+IGFuY2VzdG9yczsKICAgICBnZXRFdmVudEFuY2VzdG9ycyhh
bmNlc3RvcnMsIG9yaWdpbmFsVGFyZ2V0LmdldCgpLCBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9y
KGV2ZW50LmdldCgpKSk7CisgICAgdXBkYXRlUmVsYXRlZFRhcmdldElmTmVjZXNzYXJ5KGFuY2Vz
dG9ycywgZXZlbnQuZ2V0KCkpOwogCiAgICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0NvbnRl
eHQoZXZlbnQuZ2V0KCksIHRoaXMsIHRvcEV2ZW50Q29udGV4dChhbmNlc3RvcnMpKTsKIApAQCAt
Mjg0NCwxOCArMjk0MSw2IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBzZW5kTW91c2VFdmVudHMsCiAgICAgZ05vZGVzRGlz
cGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZSh0aGlzKTsKIH0KIAotLy8gRklYTUU6IE9u
Y2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYzIGxhbmRzLCB0
aGlzIHNob3VsZAotLy8gYmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDAyNS4KLXN0YXRpYyBOb2RlKiBwdWxsT3V0T2ZTaGFk
b3coTm9kZSogbm9kZSkKLXsKLSAgICBOb2RlKiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IG5v
ZGU7Ci0gICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbjsgbiA9IG4tPnBhcmVudE9ySG9zdE5vZGUo
KSkgewotICAgICAgICBpZiAobi0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgICAgICBvdXRlcm1v
c3RTaGFkb3dCb3VuZGFyeSA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OwotfQotCiBib29sIE5vZGU6OmRpc3BhdGNoTW91
c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHRvbiwgaW50IGRl
dGFpbCwKICAgICBpbnQgcGFnZVgsIGludCBwYWdlWSwgaW50IHNjcmVlblgsIGludCBzY3JlZW5Z
LAogICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0
YUtleSwgCkBAIC0yODc4LDcgKzI5NjMsNyBAQCBib29sIE5vZGU6OmRpc3BhdGNoTW91c2VFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHRvbiwgaW50IGRldAogICAg
IGJvb2wgc3dhbGxvd0V2ZW50ID0gZmFsc2U7CiAgICAgCiAgICAgLy8gQXR0ZW1wdGluZyB0byBk
aXNwYXRjaCB3aXRoIGEgbm9uLUV2ZW50VGFyZ2V0IHJlbGF0ZWRUYXJnZXQgY2F1c2VzIHRoZSBy
ZWxhdGVkVGFyZ2V0IHRvIGJlIHNpbGVudGx5IGlnbm9yZWQuCi0gICAgUmVmUHRyPE5vZGU+IHJl
bGF0ZWRUYXJnZXQgPSBwdWxsT3V0T2ZTaGFkb3cocmVsYXRlZFRhcmdldEFyZyk7CisgICAgUmVm
UHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0QXJnOwogCiAgICAgaW50IGFk
anVzdGVkUGFnZVggPSBwYWdlWDsKICAgICBpbnQgYWRqdXN0ZWRQYWdlWSA9IHBhZ2VZOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87975</attachid>
            <date>2011-04-02 08:34:45 -0700</date>
            <delta_ts>2011-04-05 11:03:14 -0700</delta_ts>
            <desc>Using EventDispatcher.</desc>
            <filename>bug-55515-20110402083444.patch</filename>
            <type>text/plain</type>
            <size>16208</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI2ODgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxMDA3MTZiMGJjY2EyZGNiOWJhOWI2
ZTRiNzJjMWI5ODFiODdhNjAyLi5kMWY5ZWRiNGJjMmFjYjJmZTIwOTkwMzg3OWJiODQxM2QzMDg3
OTYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMDIgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcHJvcGVyIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9t
b3VzZW91dCBldmVudHMgaW4gcmVnYXJkIHRvIHNoYWRvdyBET00gYm91bmRhcmllcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTE1CisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0OiBV
cGRhdGVkIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRh
cnktY3Jvc3NpbmcuaHRtbDogQWRkZWQgbmV3IHRlc3QgZm9yIG1vdXNlb3Zlci9tb3VzZW91dCBo
YW5kbGluZy4KKwogMjAxMS0wNC0wMSAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4
cGVjdGVkLnR4dAppbmRleCA4ODg5MTg5ODNjOThmNzE4NzM1MmI3MmIwYTc2Y2YzYTQwYTdmZWNm
Li5iYTI3YWViODQwNjkzZWIxYjVmMjczYmJhMzhiYmQ1ODBmZjE1ODdmIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2lu
Zy1leHBlY3RlZC50eHQKQEAgLTQsNiArNCw3IEBAIFNlZSBidWcgNDYwMTUgZm9yIGRldGFpbHMu
CiAKIE11dGF0aW9uIGV2ZW50cyBzaG91bGQgbm90IHByb3BhZ2F0ZSBvdXQgb2YgdGhlIHNoYWRv
dyBET006IFBBU1MKIFRoZSBzZWxlY3RzdGFydCBldmVudCBzaG91bGQgbm90IHByb3BhZ2F0ZSBv
dXQgb2YgdGhlIHNoYWRvdyBET006IFBBU1MKK1RoZSBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnQg
YmV0d2VlbiB0d28gZWxlbWVudHMgaW5zaWRlIHRoZSBzYW1lIHNoYWRvdyBzdWJ0cmVlIHNob3Vs
ZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93IERPTTogUEFTUwogTGFiZWwgc2hvdWxk
IGxvb2sgYmV5b25kIHNoYWRvdyBib3VuZGFyeSB0byBkZXRlY3QgaWYgaXQgZW5jbG9zZXMgaXRz
IGFzc29jaWF0ZWQgZWxlbWVudDogUEFTUwogRXZlbnRzIGZvciBkZWZhdWx0IGV2ZW50IGhhbmRs
ZXIgc2hvdWxkIG5vdCBiZSByZXRhcmdldGVkOiBQQVNTCiBFdmVudCdzIHJlbGF0ZWRUYXJnZXQg
c2hvdWxkIGJlIHJldGFyZ2V0ZWQ6IFBBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLmh0bWwKaW5kZXggNTg0ZjFhNTE2MTI4N2Ix
ODMwYTc5MjJlMmNmNDVkYWUwYTZmMjQzOC4uN2VhMzMzMWQ5M2EyZTk3OTcxZTM2YmE0ZWJiZDAz
MzBjYzYwNDhkMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJv
dW5kYXJ5LWNyb3NzaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93
LWJvdW5kYXJ5LWNyb3NzaW5nLmh0bWwKQEAgLTE5LDYgKzE5LDI2IEBAIGZ1bmN0aW9uIG1vdmVP
dmVyKGVsZW1lbnQpCiAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7CiB9CiAKK2Z1
bmN0aW9uIG1vdmVPdmVyTGVmdFF1YXJ0ZXJPZihlbGVtZW50KQoreworICAgIGlmICghd2luZG93
LmV2ZW50U2VuZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgeCA9IGVsZW1lbnQub2Zm
c2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyA0OworICAgIHZhciB5ID0gZWxlbWVudC5v
ZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91
c2VNb3ZlVG8oeCwgeSk7Cit9CisKK2Z1bmN0aW9uIG1vdmVPdmVyUmlnaHRRdWFydGVyT2YoZWxl
bWVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdmFyIHggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoICog
MyAvIDQ7CisgICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVp
Z2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKK30KKwogZnVuY3Rp
b24gY2xpY2tPbihlbGVtZW50KQogewogICAgIG1vdmVPdmVyKGVsZW1lbnQpOwpAQCAtMzEsOSAr
NTEsNyBAQCBmdW5jdGlvbiBjbGlja09uTGVmdFF1YXJ0ZXJPZihlbGVtZW50KQogICAgIGlmICgh
d2luZG93LmV2ZW50U2VuZGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICB2YXIgeCA9IGVsZW1l
bnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyA0OwotICAgIHZhciB5ID0gZWxl
bWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7Ci0gICAgZXZlbnRTZW5k
ZXIubW91c2VNb3ZlVG8oeCwgeSk7CisgICAgbW92ZU92ZXJMZWZ0UXVhcnRlck9mKGVsZW1lbnQp
OwogICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwogICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAo
KTsKIH0KQEAgLTc0LDYgKzkyLDI0IEBAIHZhciB0ZXN0cyA9IHsKICAgICAgICAgdGV4dElucHV0
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dElucHV0KTsKICAgICAgICAgZG9jdW1lbnQuc2Vs
ZWN0c3RhcnQgPSBudWxsOwogICAgIH0sCisgICAgbW91c2VPdmVyQW5kT3V0UHJvcGFnYXRpb246
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBjb3VudCA9IDA7CisgICAgICAgIHZhciBm
aWxlSW5wdXQgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2lucHV0JykpOworICAgICAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2Zp
bGUnKTsKKyAgICAgICAgdmFyIGNvdW50ZXIgPSBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgbW92ZU92ZXJMZWZ0UXVhcnRlck9m
KGZpbGVJbnB1dCk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91
c2VvdmVyJywgY291bnRlciwgZmFsc2UpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50
TGlzdGVuZXIoJ21vdXNlb3V0JywgY291bnRlciwgZmFsc2UpOworICAgICAgICBtb3ZlT3ZlclJp
Z2h0UXVhcnRlck9mKGZpbGVJbnB1dCk7CisgICAgICAgIGxvZygiVGhlIG1vdXNlb3Zlci9tb3Vz
ZW91dCBldmVudCBiZXR3ZWVuIHR3byBlbGVtZW50cyBpbnNpZGUgdGhlIHNhbWUgc2hhZG93IHN1
YnRyZWUgc2hvdWxkIG5vdCBwcm9wYWdhdGUgb3V0IG9mIHRoZSBzaGFkb3cgRE9NIiwgY291bnQg
PT0gMCk7CisgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vv
dmVyJywgY291bnRlciwgZmFsc2UpOworICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50
TGlzdGVuZXIoJ21vdXNlb3V0JywgY291bnRlciwgZmFsc2UpOworICAgICAgICBmaWxlSW5wdXQu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpOworICAgIH0sCiAgICAgbGFiZWxTeW50
aGV0aWNDbGljazogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIGNvdW50ID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA2ZjAwNzk2NWMzYjgyM2E1YzNmMDVmYmY4MWQ2YzBhZTllNmYxYzVjLi5hZjM5
NzNhYjBjMDBkNzlhOTgxYjcyNWU3ZWExYjBmNzc1Mzc2YzNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDYgQEAKKzIwMTEtMDQtMDIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgcHJvcGVyIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9tb3VzZW91dCBldmVudHMgaW4g
cmVnYXJkIHRvIHNoYWRvdyBET00gYm91bmRhcmllcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU291cmNlL1dlYkNvcmU6CisKKyAgICAgICAgVGhpcyBp
bXBsZW1lbnRzIFhCTCAyLjAncyBzcGVjaWZpZWQgaGFuZGxpbmcgb2YgbW91c2VvdmVyL21vdXNl
b3V0IGV2ZW50czoKKyAgICAgICAgaHR0cDovL2Rldi53My5vcmcvMjAwNi94YmwyL092ZXJ2aWV3
Lmh0bWwjdGhlLW1vdXNlb3Zlci1hbmQtbW91c2VvdXQtZXZlbnRzCisKKyAgICAgICAgVG8gZG8g
dGhpcywgd2U6CisgICAgICAgIDEpIGNhbGN1bGF0ZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIGJl
dHdlZW4gcmVsYXRlZFRhcmdldCBhbmQgdGFyZ2V0LCBhbmQKKyAgICAgICAgICAgdGhlIG5lYXJl
c3QgYm91bmRhcmllcyBhcm91bmQgdGhlbTogdGhlIG91dGVyIChjb21tb24pIGJvdW5kYXJ5LCBh
bmQgdGhlCisgICAgICAgICAgIGlubmVyIChzcGVjaWZpYyB0byByZWxhdGVkVGFyZ2V0KSBib3Vu
ZGFyeS4gVGhlbiwgd2UKKyAgICAgICAgMikgZW5zdXJlIHRoYXQgZXZlbnRzIG9ubHkgcHJvcGFn
YXRlIHVwIHRvIHRoZSBjb21tb24gYm91bmRhcnkgKG9yCisgICAgICAgICAgIGFsbCB0aGUgd2F5
IGlmIGJvdW5kYXJ5IGlzIG5vdCBmb3VuZCksIHdoaWxlCisgICAgICAgIDMpIHVwZGF0aW5nIHJl
bGF0ZWRUYXJnZXQgYmUgdGhlIGlubmVyIGJvdW5kYXJ5LgorCisgICAgICAgIFdlIGFsc28gZGV0
ZWN0IHRoZSBtb3N0IGNvbW1vbiBjYXNlIHdoZW4gbm8gY29tbW9uIGJvdW5kYXJ5IGNvdWxkIGV4
aXN0CisgICAgICAgIGFuZCBwcm92aWRlIGEgZmFzdCBwYXRoIHRvIHNob3J0LWNpcmN1aXQgbW9z
dCBvZiB0aGUgYm91bmRhcnkgZGV0ZWN0aW9uCisgICAgICAgIGxvZ2ljLgorCisgICAgICAgICog
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNo
ZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQpOiBDaGFuZ2VkIHRvIGNhbGN1bGF0ZQorICAgICAgICAg
ICAgaW5uZXIvb3V0ZXIgc2hhZG93IERPTSBib3VuZGFyaWVzIGFuZCBhZGp1c3QgYW5jZXN0b3Jz
IGNoYWluIGFjY29yZGluZ2x5LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpF
dmVudERpc3BhdGNoZXIpOiBBZGRlZCBmbGFnIGluaXRpYWxpemVyCisgICAgICAgIChXZWJDb3Jl
OjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKTogTWFkZSBpbnRvIGEgc3RhdGljIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudEFuY2VzdG9y
cyk6IFJlbmFtZWQgZnJvbSBnZXRFdmVudEFuY2VzdG9ycywKKyAgICAgICAgICAgIGNvbnZlcnRl
ZCB0byB1c2UgaW5pdGlhbGl6YXRpb24gZmxhZywgcmF0aGVyIHRoYW4gdGVzdGluZyBmb3IgZW1w
dHkuCisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5oOiBBZGp1c3RlZCBkZWNscy4KKyAg
ICAgICAgKiBkb20vTW91c2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50
RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudCk6IENoYW5nZWQgdG8gc2VuZCBldmVudAor
ICAgICAgICAgICAgdG8gYWRqdXN0UmVsYXRlZFRhcmdldC4KKworICAgICAgICBMYXlvdXRUZXN0
czoKKworICAgICAgICAqIGZhc3QvZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy1leHBl
Y3RlZC50eHQ6IFVwZGF0ZWQgZXhwZWN0YXRpb25zLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3No
YWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sOiBBZGRlZCBuZXcgdGVzdCBmb3IgbW91c2VvdmVy
L21vdXNlb3V0IGhhbmRsaW5nLgorCiAyMDExLTA0LTAxICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGQxZTRkNzJlNzU0MDlm
NTQwM2M3MGJjZTlmNDRiNGY3ZmQ5NDQxYTguLmE4YzZjYjIxOWIzNzE5ODYwOTQ1NzZjYzhiZjNi
MzJhNTFiYmI4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC01
MSw2ICs1MSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2VudW0gRXZlbnREaXNwYXRj
aEJlaGF2aW9yIHsKKyAgICBSZXRhcmdldEV2ZW50LAorICAgIFN0YXlJbnNpZGVTaGFkb3dET00K
K307CisKIHN0YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRD
bGlja3MgPSAwOwogCiBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBu
b2RlLCBjb25zdCBFdmVudERpc3BhdGNoTWVkaWF0b3ImIG1lZGlhdG9yKQpAQCAtMTUzLDQwICsx
NTgsMTM2IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnQoTm9kZSog
bm9kZSwgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKIAogLy8gRklYTUU6IE9uY2UgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYzIGxhbmRzLCB0aGlzIHNob3Vs
ZAogLy8gYmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDAyNS4KLVBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IEV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVk
VGFyZ2V0KQorRXZlbnRUYXJnZXQqIEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdl
dChFdmVudCogZXZlbnQsIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0QXJnKQogeworICAgIGlm
ICghcmVsYXRlZFRhcmdldEFyZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOb2RlKiByZWxh
dGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldEFyZy0+dG9Ob2RlKCk7CiAgICAgaWYgKCFyZWxhdGVk
VGFyZ2V0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIE5vZGUqIG5vZGUgPSByZWxhdGVkVGFy
Z2V0LT50b05vZGUoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgTm9kZSogdGFyZ2V0ID0gbV9ub2Rl
LmdldCgpOworICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gcmVsYXRlZFRhcmdldDsK
IAotICAgIE5vZGUqIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbm9kZTsKLSAgICBmb3IgKE5v
ZGUqIG4gPSBub2RlOyBuOyBuID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgZW5zdXJl
RXZlbnRBbmNlc3RvcnMoZXZlbnQpOworCisgICAgLy8gQ2FsY3VsYXRlIGVhcmx5IGlmIHRoZSBj
b21tb24gYm91bmRhcnkgaXMgZXZlbiBwb3NzaWJsZSBieSBsb29raW5nIGF0CisgICAgLy8gYW5j
ZXN0b3JzIHNpemUgYW5kIGlmIHRoZSByZXRhcmdldGluZyBoYXMgb2NjdXJlZCAoaW5kaWNhdGlu
ZyB0aGUgcHJlc2VuY2Ugb2Ygc2hhZG93IERPTSBib3VuZGFyaWVzKS4KKyAgICAvLyBJZiB0aGVy
ZSBhcmUgbm8gYm91bmRhcmllcyBkZXRlY3RlZCwgdGhlIHRhcmdldCBhbmQgcmVsYXRlZCB0YXJn
ZXQgY2FuJ3QgaGF2ZSBhIGNvbW1vbiBib3VuZGFyeS4KKyAgICBib29sIG5vQ29tbW9uQm91bmRh
cnkgPSBtX2FuY2VzdG9ycy5pc0VtcHR5KCkgfHwgbV9hbmNlc3RvcnMuZmlyc3QoKS5ub2RlKCkg
PT0gbV9hbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKKworICAgIC8vIEJ1aWxkIHRoZSBhbmNlc3Rv
ciBjaGFpbiBmb3IgcmVsYXRlZFRhcmdldC4KKyAgICBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJn
ZXRBbmNlc3RvcnM7CisgICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSByZWxhdGVk
VGFyZ2V0OworICAgIGZvciAoTm9kZSogbiA9IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBu
ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3Qo
KSkKICAgICAgICAgICAgIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0
Tm9kZSgpOworICAgICAgICBpZiAoIW5vQ29tbW9uQm91bmRhcnkpCisgICAgICAgICAgICByZWxh
dGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZChuKTsKKyAgICB9CisKKyAgICAvLyBTaG9ydC1jaXJj
dWl0IHRoZSBmYXN0IGNhc2Ugd2hlbiB3ZSBrbm93IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3Vs
YXRlIGEgY29tbW9uIGJvdW5kYXJ5LgorICAgIGlmIChub0NvbW1vbkJvdW5kYXJ5KQorICAgICAg
ICByZXR1cm4gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7CisKKyAgICBWZWN0b3I8RXZlbnRDb250
ZXh0Pjo6aXRlcmF0b3IgbGFzdENvbW1vbkJvdW5kYXJ5ID0gbV9hbmNlc3RvcnMuZW5kKCk7Cisg
ICAgLy8gQXNzdW1lIGlubmVyIGJvdW5kYXJ5IGlzIHRoZSByZWxhdGVkVGFyZ2V0IGl0c2VsZiAo
aW4gb3RoZXIgd29yZHMsIHRoZXJlIGFyZSBubyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMpLgorICAg
IFZlY3RvcjxOb2RlKj46Oml0ZXJhdG9yIGZpcnN0SW5uZXJCb3VuZGFyeSA9IHJlbGF0ZWRUYXJn
ZXRBbmNlc3RvcnMuYmVnaW4oKTsKKworICAgIFZlY3RvcjxFdmVudENvbnRleHQ+OjppdGVyYXRv
ciB0YXJnZXRBbmNlc3RvciA9IG1fYW5jZXN0b3JzLmVuZCgpOworICAgIC8vIFdhbGsgZG93biBm
cm9tIHRoZSB0b3AsIGxvb2tpbmcgZm9yIGxvd2VzdCBjb21tb24gYW5jZXN0b3IsIGFsc28gbW9u
aXRvcmluZyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMuCisgICAgYm9vbCBkaXZlcmdlZCA9IGZhbHNl
OworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaSA9IHJlbGF0ZWRUYXJnZXRBbmNl
c3RvcnMuZW5kKCkgLSAxOyBpID49IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsgLS1p
KSB7CisgICAgICAgIGlmIChkaXZlcmdlZCkgeworICAgICAgICAgICAgaWYgKCgqaSktPmlzU2hh
ZG93Um9vdCgpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RJbm5lckJvdW5kYXJ5ID0gaSArIDE7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0YXJnZXRBbmNlc3RvciA9PSBtX2FuY2Vz
dG9ycy5iZWdpbigpKSB7CisgICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldEFuY2VzdG9yLS07CisKKyAg
ICAgICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgbGFzdENvbW1vbkJv
dW5kYXJ5ID0gdGFyZ2V0QW5jZXN0b3I7CisKKyAgICAgICAgaWYgKCgqaSkgIT0gKCp0YXJnZXRB
bmNlc3Rvcikubm9kZSgpKSB7CisgICAgICAgICAgICB0YXJnZXRBbmNlc3RvciA9IG1fYW5jZXN0
b3JzLmJlZ2luKCk7CisgICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZGl2ZXJnZWQpIHsKKyAgICAg
ICAgLy8gVGhlIHJlbGF0ZWRUYXJnZXQgaXMgYSBwYXJlbnQgb3Igc2hhZG93SG9zdCBvZiB0aGUg
dGFyZ2V0LgorICAgICAgICBpZiAodGFyZ2V0LT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAg
IGxhc3RDb21tb25Cb3VuZGFyeSA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gU2luY2UgYW5jZXN0b3JzIGRvZXMgbm90IGNvbnRhaW4gdGFyZ2V0IGl0c2Vs
Ziwgd2UgbXVzdCBhY2NvdW50CisgICAgICAgIC8vIGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCB0
YXJnZXQgaXMgYSBzaGFkb3dIb3N0IG9mIHJlbGF0ZWRUYXJnZXQKKyAgICAgICAgLy8gYW5kIHRo
dXMgc2VydmVzIGFzIHRoZSBsYXN0Q29tbW9uQm91bmRhcnkuCisgICAgICAgIC8vIEx1Y2tpbHks
IGluIHRoaXMgY2FzZSB0aGUgZmlyc3RJbm5lckJvdW5kYXJ5IGlzIHRhcmdldC4KKyAgICAgICAg
aWYgKCgqZmlyc3RJbm5lckJvdW5kYXJ5KSA9PSB0YXJnZXQpCisgICAgICAgICAgICBsYXN0Q29t
bW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5iZWdpbigpOworICAgIH0KKworICAgIGlmIChsYXN0
Q29tbW9uQm91bmRhcnkgIT0gbV9hbmNlc3RvcnMuZW5kKCkpIHsKKyAgICAgICAgLy8gVHJpbSBh
bmNlc3RvcnMgdG8gbGFzdENvbW1vbkJvdW5kYXJ5IHRvIGtlZXAgZXZlbnRzIGluc2lkZSBvZiB0
aGUgY29tbW9uIHNoYWRvdyBET00gc3VidHJlZS4KKyAgICAgICAgbV9hbmNlc3RvcnMuc2hyaW5r
KGxhc3RDb21tb25Cb3VuZGFyeSAtIG1fYW5jZXN0b3JzLmJlZ2luKCkpOwogICAgIH0KLSAgICBy
ZXR1cm4gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7CisKKyAgICAvLyBTZXQgZXZlbnQncyByZWxh
dGVkIHRhcmdldCB0byB0aGUgZmlyc3QgZW5jb3VudGVyZWQgc2hhZG93IERPTSBib3VuZGFyeSBp
biB0aGUgZGl2ZXJnZW50IHN1YnRyZWUuCisgICAgaWYgKGZpcnN0SW5uZXJCb3VuZGFyeSAhPSBy
ZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkpCisgICAgICAgIHJldHVybiAoKmZpcnN0SW5u
ZXJCb3VuZGFyeSk7CisKKyAgICByZXR1cm4gcmVsYXRlZFRhcmdldDsKIH0KIAogRXZlbnREaXNw
YXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKICAgICA6IG1fbm9kZShub2RlKQor
ICAgICwgbV9hbmNlc3RvcnNJbml0aWFsaXplZChmYWxzZSkKIHsKICAgICBBU1NFUlQobm9kZSk7
CiAgICAgbV92aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpOwogfQogCi12b2lkIEV2ZW50
RGlzcGF0Y2hlcjo6Z2V0RXZlbnRBbmNlc3RvcnMoRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0
LCBFdmVudERpc3BhdGNoQmVoYXZpb3IgYmVoYXZpb3IpCitzdGF0aWMgRXZlbnREaXNwYXRjaEJl
aGF2aW9yIGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50KQoreworICAgIC8v
IFBlciBYQkwgMi4wIHNwZWMsIG11dGF0aW9uIGV2ZW50cyBzaG91bGQgbmV2ZXIgY3Jvc3Mgc2hh
ZG93IERPTSBib3VuZGFyeToKKyAgICAvLyBodHRwOi8vZGV2LnczLm9yZy8yMDA2L3hibDIvI2V2
ZW50LWZsb3ctYW5kLXRhcmdldGluZy1hY3Jvc3Mtc2hhZG93LXMKKyAgICBpZiAoZXZlbnQtPmlz
TXV0YXRpb25FdmVudCgpKQorICAgICAgICByZXR1cm4gU3RheUluc2lkZVNoYWRvd0RPTTsKKwor
ICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3NzIHRo
ZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFrcyBl
eGlzdGluZyBzaXRlcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgorICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KQorICAgICAgICByZXR1cm4gU3RheUluc2lkZVNo
YWRvd0RPTTsKKworICAgIHJldHVybiBSZXRhcmdldEV2ZW50OworfQorCit2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogeworICAgIEV2ZW50
RGlzcGF0Y2hCZWhhdmlvciBiZWhhdmlvciA9IGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZl
bnQpOworCiAgICAgaWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGFuY2VzdG9yc0luaXRpYWxpemVkKCkpCisgICAgaWYgKG1fYW5jZXN0b3JzSW5p
dGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBv
cmlnaW5hbFRhcmdldDsKKyAgICBtX2FuY2VzdG9yc0luaXRpYWxpemVkID0gdHJ1ZTsKKwogICAg
IE5vZGUqIGFuY2VzdG9yID0gbV9ub2RlLmdldCgpOworICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQg
PSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3Rvcik7CiAgICAgYm9v
bCBzaG91bGRTa2lwTmV4dEFuY2VzdG9yID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgaWYgKGFuY2VzdG9yLT5pc1NoYWRvd1Jvb3QoKSkgewpAQCAtMjIxLDcgKzMyMiw3IEBA
IGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQg
Y29kZSBjYW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxs
LgogCiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50LT50YXJn
ZXQoKTsKLSAgICBnZXRFdmVudEFuY2VzdG9ycyhvcmlnaW5hbFRhcmdldC5nZXQoKSwgZGV0ZXJt
aW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudC5nZXQoKSkpOworICAgIGVuc3VyZUV2ZW50QW5jZXN0
b3JzKGV2ZW50LmdldCgpKTsKIAogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dDb250ZXh0
KGV2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKIApAQCAtMzA1
LDMyICs0MDYsMTAgQEAgZG9uZVdpdGhEZWZhdWx0OgogICAgIHJldHVybiAhZXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKTsKIH0KIAotCiBjb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hl
cjo6dG9wRXZlbnRDb250ZXh0KCkKIHsKICAgICByZXR1cm4gbV9hbmNlc3RvcnMuaXNFbXB0eSgp
ID8gMCA6ICZtX2FuY2VzdG9ycy5sYXN0KCk7CiB9CiAKLWJvb2wgRXZlbnREaXNwYXRjaGVyOjph
bmNlc3RvcnNJbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5jZXN0b3JzLnNp
emUoKTsKLX0KLQotRXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJt
aW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gUGVyIFhCTCAyLjAg
c3BlYywgbXV0YXRpb24gZXZlbnRzIHNob3VsZCBuZXZlciBjcm9zcyBzaGFkb3cgRE9NIGJvdW5k
YXJ5OgotICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnLzIwMDYveGJsMi8jZXZlbnQtZmxvdy1hbmQt
dGFyZ2V0aW5nLWFjcm9zcy1zaGFkb3ctcwotICAgIGlmIChldmVudC0+aXNNdXRhdGlvbkV2ZW50
KCkpCi0gICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hhZG93RE9NOwotCi0gICAgLy8gV2ViS2l0
IG5ldmVyIGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cg
RE9NIGJvdW5kYXJ5LgotICAgIC8vIENoYW5naW5nIHRoaXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVz
LgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIx
OTUgZm9yIGRldGFpbHMuCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnNl
bGVjdHN0YXJ0RXZlbnQpCi0gICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hhZG93RE9NOwotCi0g
ICAgcmV0dXJuIFJldGFyZ2V0RXZlbnQ7Ci19Ci0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlz
cGF0Y2hlci5oCmluZGV4IDA3MzQ0MWQyOWM0ZGM2ZDUwNWJmYWI0OWJiMTE2Y2FiYTQxNmRlZmQu
LjE2YWM0N2ExYzgxNTljOTFkOGU0ZGNhMmIyMzBiODNlOWNiZmMxZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTQxLDExICs0MSw2IEBAIGNsYXNzIFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hl
ZWxFdmVudDsKIAotZW51bSBFdmVudERpc3BhdGNoQmVoYXZpb3IgewotICAgIFJldGFyZ2V0RXZl
bnQsCi0gICAgU3RheUluc2lkZVNoYWRvd0RPTQotfTsKLQogY2xhc3MgRXZlbnREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUqLCBjb25zdCBF
dmVudERpc3BhdGNoTWVkaWF0b3ImKTsKQEAgLTU1LDIxICs1MCwyMCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50KE5vZGUqLCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KTsKIAogICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgUGFz
c1JlZlB0cjxFdmVudFRhcmdldD4gYWRqdXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50
VGFyZ2V0Pik7CisgICAgRXZlbnRUYXJnZXQqIGFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqLCBF
dmVudFRhcmdldCopOwogICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBF
dmVudERpc3BhdGNoZXIoTm9kZSopOwogCi0gICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRldGVy
bWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqKTsKLSAgICB2b2lkIGdldEV2ZW50QW5jZXN0b3Jz
KEV2ZW50VGFyZ2V0KiBvcmlnaW5hbFRhcmdldCwgRXZlbnREaXNwYXRjaEJlaGF2aW9yKTsKKyAg
ICB2b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7CiAgICAgY29uc3QgRXZlbnRDb250
ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKLSAgICBib29sIGFuY2VzdG9yc0luaXRpYWxpemVkKCkg
Y29uc3Q7CiAKICAgICBWZWN0b3I8RXZlbnRDb250ZXh0PiBtX2FuY2VzdG9yczsKICAgICBSZWZQ
dHI8Tm9kZT4gbV9ub2RlOwogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9vcmlnaW5hbFRhcmdl
dDsKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBtX3ZpZXc7CisgICAgYm9vbCBtX2FuY2VzdG9yc0lu
aXRpYWxpemVkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNl
RXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCmluZGV4IDMwYTVi
OWY5NjBjMDFlNmY0MDgwOWQwMmJmOTQwOGU2OWY3OGIxMjkuLjM0MDc3MDYyOGQ5NTc1NWU4ZTU3
OGJiYTU4NTcyNjBkYTI0MWQ1ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKQEAgLTE2
Niw3ICsxNjYsNyBAQCBib29sIE1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2
ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29ucwogICAgIGlmIChldmVudCgpLT50
eXBlKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNob3VsZG4ndCBoYXBw
ZW4uCiAKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQgPSBkaXNwYXRjaGVy
LT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCktPnJlbGF0ZWRUYXJnZXQoKSk7CisgICAgUmVm
UHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0ID0gZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRl
ZFRhcmdldChldmVudCgpLCBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkpOwogICAgIGV2ZW50KCkt
PnNldFJlbGF0ZWRUYXJnZXQocmVsYXRlZFRhcmdldCk7CiAKICAgICBkaXNwYXRjaGVyLT5kaXNw
YXRjaEV2ZW50KGV2ZW50KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88279</attachid>
            <date>2011-04-05 11:03:16 -0700</date>
            <delta_ts>2011-04-08 10:56:40 -0700</delta_ts>
            <desc>Ready for review.</desc>
            <filename>bug-55515-20110405110315.patch</filename>
            <type>text/plain</type>
            <size>16352</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI5NTUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3MzBhMDNkNTdiYTRlNDk1NWQ1MDgw
MjlkNGJhZDUwY2E4YTE0MGY2Li40NDc0NzVhMjAxYjAzODJlM2I3NWU3OWY0YzBhNGVjYjI2N2Mz
NWEyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMDIgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcHJvcGVyIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9t
b3VzZW91dCBldmVudHMgaW4gcmVnYXJkIHRvIHNoYWRvdyBET00gYm91bmRhcmllcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTE1CisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0OiBV
cGRhdGVkIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRh
cnktY3Jvc3NpbmcuaHRtbDogQWRkZWQgbmV3IHRlc3QgZm9yIG1vdXNlb3Zlci9tb3VzZW91dCBo
YW5kbGluZy4KKwogMjAxMS0wNC0wNSAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29t
PgogCiAgICAgICAgVW5yZXZpZXdlZCwgdGVtcG9yYXJpbHkgc3VwcHJlc3MgQ2hyb21pdW0gZmFp
bHVyZXMgZm9yIHRlc3RzIGluIHI4Mjk0Ny4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0CmluZGV4
IDg4ODkxODk4M2M5OGY3MTg3MzUyYjcyYjBhNzZjZjNhNDBhN2ZlY2YuLmJhMjdhZWI4NDA2OTNl
YjFiNWYyNzNiYmEzOGJiZDU4MGZmMTU4N2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4cGVjdGVkLnR4dApA
QCAtNCw2ICs0LDcgQEAgU2VlIGJ1ZyA0NjAxNSBmb3IgZGV0YWlscy4KIAogTXV0YXRpb24gZXZl
bnRzIHNob3VsZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93IERPTTogUEFTUwogVGhl
IHNlbGVjdHN0YXJ0IGV2ZW50IHNob3VsZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93
IERPTTogUEFTUworVGhlIG1vdXNlb3Zlci9tb3VzZW91dCBldmVudCBiZXR3ZWVuIHR3byBlbGVt
ZW50cyBpbnNpZGUgdGhlIHNhbWUgc2hhZG93IHN1YnRyZWUgc2hvdWxkIG5vdCBwcm9wYWdhdGUg
b3V0IG9mIHRoZSBzaGFkb3cgRE9NOiBQQVNTCiBMYWJlbCBzaG91bGQgbG9vayBiZXlvbmQgc2hh
ZG93IGJvdW5kYXJ5IHRvIGRldGVjdCBpZiBpdCBlbmNsb3NlcyBpdHMgYXNzb2NpYXRlZCBlbGVt
ZW50OiBQQVNTCiBFdmVudHMgZm9yIGRlZmF1bHQgZXZlbnQgaGFuZGxlciBzaG91bGQgbm90IGJl
IHJldGFyZ2V0ZWQ6IFBBU1MKIEV2ZW50J3MgcmVsYXRlZFRhcmdldCBzaG91bGQgYmUgcmV0YXJn
ZXRlZDogUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJv
dW5kYXJ5LWNyb3NzaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91
bmRhcnktY3Jvc3NpbmcuaHRtbAppbmRleCA1ODRmMWE1MTYxMjg3YjE4MzBhNzkyMmUyY2Y0NWRh
ZTBhNmYyNDM4Li43ZWEzMzMxZDkzYTJlOTc5NzFlMzZiYTRlYmJkMDMzMGNjNjA0OGQyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3Npbmcu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3Np
bmcuaHRtbApAQCAtMTksNiArMTksMjYgQEAgZnVuY3Rpb24gbW92ZU92ZXIoZWxlbWVudCkKICAg
ICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKIH0KIAorZnVuY3Rpb24gbW92ZU92ZXJM
ZWZ0UXVhcnRlck9mKGVsZW1lbnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVu
dC5vZmZzZXRXaWR0aCAvIDQ7CisgICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1l
bnQub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsK
K30KKworZnVuY3Rpb24gbW92ZU92ZXJSaWdodFF1YXJ0ZXJPZihlbGVtZW50KQoreworICAgIGlm
ICghd2luZG93LmV2ZW50U2VuZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgeCA9IGVs
ZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggKiAzIC8gNDsKKyAgICB2YXIg
eSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2
ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworfQorCiBmdW5jdGlvbiBjbGlja09uKGVsZW1l
bnQpCiB7CiAgICAgbW92ZU92ZXIoZWxlbWVudCk7CkBAIC0zMSw5ICs1MSw3IEBAIGZ1bmN0aW9u
IGNsaWNrT25MZWZ0UXVhcnRlck9mKGVsZW1lbnQpCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5k
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsg
ZWxlbWVudC5vZmZzZXRXaWR0aCAvIDQ7Ci0gICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCAr
IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4
LCB5KTsKKyAgICBtb3ZlT3ZlckxlZnRRdWFydGVyT2YoZWxlbWVudCk7CiAgICAgZXZlbnRTZW5k
ZXIubW91c2VEb3duKCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwogfQpAQCAtNzQsNiAr
OTIsMjQgQEAgdmFyIHRlc3RzID0gewogICAgICAgICB0ZXh0SW5wdXQucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZCh0ZXh0SW5wdXQpOwogICAgICAgICBkb2N1bWVudC5zZWxlY3RzdGFydCA9IG51bGw7
CiAgICAgfSwKKyAgICBtb3VzZU92ZXJBbmRPdXRQcm9wYWdhdGlvbjogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgdmFyIGZpbGVJbnB1dCA9IGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7Cisg
ICAgICAgIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnZmlsZScpOworICAgICAgICB2
YXIgY291bnRlciA9IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsK
KyAgICAgICAgfQorICAgICAgICBtb3ZlT3ZlckxlZnRRdWFydGVyT2YoZmlsZUlucHV0KTsKKyAg
ICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBjb3VudGVy
LCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vv
dXQnLCBjb3VudGVyLCBmYWxzZSk7CisgICAgICAgIG1vdmVPdmVyUmlnaHRRdWFydGVyT2YoZmls
ZUlucHV0KTsKKyAgICAgICAgbG9nKCJUaGUgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50IGJldHdl
ZW4gdHdvIGVsZW1lbnRzIGluc2lkZSB0aGUgc2FtZSBzaGFkb3cgc3VidHJlZSBzaG91bGQgbm90
IHByb3BhZ2F0ZSBvdXQgb2YgdGhlIHNoYWRvdyBET00iLCBjb3VudCA9PSAwKTsKKyAgICAgICAg
ZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBjb3VudGVyLCBm
YWxzZSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vv
dXQnLCBjb3VudGVyLCBmYWxzZSk7CisgICAgICAgIGZpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKGZpbGVJbnB1dCk7CisgICAgfSwKICAgICBsYWJlbFN5bnRoZXRpY0NsaWNrOiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICB2YXIgY291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRkYzMy
NmE1ZWM4NDc0ODY5MmI3OGEwYmQyNWE0YmEwNTBmOWYxYWEuLjRhNGZkMWM3NjQyMWRkMmUwOTJm
NDk1MWE3MWQ1MGFiZGY4NDU4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMS0w
NC0wMiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBwcm9wZXIg
aGFuZGxpbmcgb2YgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50cyBpbiByZWdhcmQgdG8gc2hhZG93
IERPTSBib3VuZGFyaWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU1MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTb3VyY2UvV2ViQ29yZToKKworICAgICAgICBUaGlzIGltcGxlbWVudHMgWEJMIDIu
MCdzIHNwZWNpZmllZCBoYW5kbGluZyBvZiBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnRzOgorICAg
ICAgICBodHRwOi8vZGV2LnczLm9yZy8yMDA2L3hibDIvT3ZlcnZpZXcuaHRtbCN0aGUtbW91c2Vv
dmVyLWFuZC1tb3VzZW91dC1ldmVudHMKKworICAgICAgICBUbyBkbyB0aGlzLCB3ZToKKyAgICAg
ICAgMSkgY2FsY3VsYXRlIGxvd2VzdCBjb21tb24gYW5jZXN0b3IgYmV0d2VlbiByZWxhdGVkVGFy
Z2V0IGFuZCB0YXJnZXQsIGFuZAorICAgICAgICAgICB0aGUgbmVhcmVzdCBib3VuZGFyaWVzIGFy
b3VuZCB0aGVtOiB0aGUgb3V0ZXIgKGNvbW1vbikgYm91bmRhcnksIGFuZCB0aGUKKyAgICAgICAg
ICAgaW5uZXIgKHNwZWNpZmljIHRvIHJlbGF0ZWRUYXJnZXQpIGJvdW5kYXJ5LiBUaGVuLCB3ZQor
ICAgICAgICAyKSBlbnN1cmUgdGhhdCBldmVudHMgb25seSBwcm9wYWdhdGUgdXAgdG8gdGhlIGNv
bW1vbiBib3VuZGFyeSAob3IKKyAgICAgICAgICAgYWxsIHRoZSB3YXkgaWYgYm91bmRhcnkgaXMg
bm90IGZvdW5kKSwgd2hpbGUKKyAgICAgICAgMykgdXBkYXRpbmcgcmVsYXRlZFRhcmdldCBiZSB0
aGUgaW5uZXIgYm91bmRhcnkuCisKKyAgICAgICAgV2UgYWxzbyBkZXRlY3QgdGhlIG1vc3QgY29t
bW9uIGNhc2Ugd2hlbiBubyBjb21tb24gYm91bmRhcnkgY291bGQgZXhpc3QKKyAgICAgICAgYW5k
IHByb3ZpZGUgYSBmYXN0IHBhdGggdG8gc2hvcnQtY2lyY3VpdCBtb3N0IG9mIHRoZSBib3VuZGFy
eSBkZXRlY3Rpb24KKyAgICAgICAgbG9naWMuCisKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRj
aGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRl
ZFRhcmdldCk6IENoYW5nZWQgdG8gY2FsY3VsYXRlCisgICAgICAgICAgICBpbm5lci9vdXRlciBz
aGFkb3cgRE9NIGJvdW5kYXJpZXMgYW5kIGFkanVzdCBhbmNlc3RvcnMgY2hhaW4gYWNjb3JkaW5n
bHkuCisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcik6
IEFkZGVkIGZsYWcgaW5pdGlhbGl6ZXIKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZURpc3Bh
dGNoQmVoYXZpb3IpOiBNYWRlIGludG8gYSBzdGF0aWMgZnVuY3Rpb24uCisgICAgICAgIChXZWJD
b3JlOjpFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKTogUmVuYW1lZCBmcm9t
IGdldEV2ZW50QW5jZXN0b3JzLAorICAgICAgICAgICAgY29udmVydGVkIHRvIHVzZSBpbml0aWFs
aXphdGlvbiBmbGFnLCByYXRoZXIgdGhhbiB0ZXN0aW5nIGZvciBlbXB0eS4KKyAgICAgICAgKiBk
b20vRXZlbnREaXNwYXRjaGVyLmg6IEFkanVzdGVkIGRlY2xzLgorICAgICAgICAqIGRvbS9Nb3Vz
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9y
OjpkaXNwYXRjaEV2ZW50KTogQ2hhbmdlZCB0byBzZW5kIGV2ZW50CisgICAgICAgICAgICB0byBh
ZGp1c3RSZWxhdGVkVGFyZ2V0LgorCisgICAgICAgIExheW91dFRlc3RzOgorCisgICAgICAgICog
ZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4cGVjdGVkLnR4dDogVXBkYXRl
ZCBleHBlY3RhdGlvbnMuCisgICAgICAgICogZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNy
b3NzaW5nLmh0bWw6IEFkZGVkIG5ldyB0ZXN0IGZvciBtb3VzZW92ZXIvbW91c2VvdXQgaGFuZGxp
bmcuCisKIDIwMTEtMDQtMDUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCA4ZjVjZjkxNGNmMWIyNjBkZjdhYjljODY4ZWJiNWIz
YzUwMmQ2MjVmLi45Nzk4YmQxYWYyNDliZDc0NmUzZGEyMjM2MmZhYmJmZDQ1MTFmMTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtNTEsNiArNTEsMTEgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7CisgICAg
UmV0YXJnZXRFdmVudCwKKyAgICBTdGF5SW5zaWRlU2hhZG93RE9NCit9OworCiBzdGF0aWMgSGFz
aFNldDxOb2RlKj4qIGdOb2Rlc0Rpc3BhdGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsKIAogYm9v
bCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgY29uc3QgRXZlbnRE
aXNwYXRjaE1lZGlhdG9yJiBtZWRpYXRvcikKQEAgLTE0OCw0MCArMTUzLDEzNiBAQCB2b2lkIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KE5vZGUqIG5vZGUsIFBsYXRmb3JtV2hl
ZWxFdmVudCYgZXZlbnQpCiAKIC8vIEZJWE1FOiBPbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01Mjk2MyBsYW5kcywgdGhpcyBzaG91bGQKIC8vIGJlIGdyZWF0bHkg
aW1wcm92ZWQuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQw
MjUuCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0
ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCkKK1Bhc3NSZWZQ
dHI8RXZlbnRUYXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVu
dCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXRBcmcpCiB7Cisg
ICAgaWYgKCFyZWxhdGVkVGFyZ2V0QXJnKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0
cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldEFyZy0+dG9Ob2RlKCk7CiAgICAg
aWYgKCFyZWxhdGVkVGFyZ2V0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIE5vZGUqIG5vZGUg
PSByZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgTm9kZSogdGFy
Z2V0ID0gbV9ub2RlLmdldCgpOworICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gcmVs
YXRlZFRhcmdldDsKIAotICAgIE5vZGUqIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbm9kZTsK
LSAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuOyBuID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7
CisgICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQpOworCisgICAgLy8gQ2FsY3VsYXRlIGVh
cmx5IGlmIHRoZSBjb21tb24gYm91bmRhcnkgaXMgZXZlbiBwb3NzaWJsZSBieSBsb29raW5nIGF0
CisgICAgLy8gYW5jZXN0b3JzIHNpemUgYW5kIGlmIHRoZSByZXRhcmdldGluZyBoYXMgb2NjdXJl
ZCAoaW5kaWNhdGluZyB0aGUgcHJlc2VuY2Ugb2Ygc2hhZG93IERPTSBib3VuZGFyaWVzKS4KKyAg
ICAvLyBJZiB0aGVyZSBhcmUgbm8gYm91bmRhcmllcyBkZXRlY3RlZCwgdGhlIHRhcmdldCBhbmQg
cmVsYXRlZCB0YXJnZXQgY2FuJ3QgaGF2ZSBhIGNvbW1vbiBib3VuZGFyeS4KKyAgICBib29sIG5v
Q29tbW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5pc0VtcHR5KCkgfHwgbV9hbmNlc3RvcnMuZmly
c3QoKS5ub2RlKCkgPT0gbV9hbmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKKworICAgIC8vIEJ1aWxk
IHRoZSBhbmNlc3RvciBjaGFpbiBmb3IgcmVsYXRlZFRhcmdldC4KKyAgICBWZWN0b3I8Tm9kZSo+
IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnM7CisgICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRh
cnkgPSByZWxhdGVkVGFyZ2V0LmdldCgpOworICAgIGZvciAoTm9kZSogbiA9IG91dGVybW9zdFNo
YWRvd0JvdW5kYXJ5OyBuOyBuID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CiAgICAgICAgIGlm
IChuLT5pc1NoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5
ID0gbi0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgICAgICBpZiAoIW5vQ29tbW9uQm91bmRhcnkp
CisgICAgICAgICAgICByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmFwcGVuZChuKTsKKyAgICB9CisK
KyAgICAvLyBTaG9ydC1jaXJjdWl0IHRoZSBmYXN0IGNhc2Ugd2hlbiB3ZSBrbm93IHRoZXJlIGlz
IG5vIG5lZWQgdG8gY2FsY3VsYXRlIGEgY29tbW9uIGJvdW5kYXJ5LgorICAgIGlmIChub0NvbW1v
bkJvdW5kYXJ5KQorICAgICAgICByZXR1cm4gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7CisKKyAg
ICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6aXRlcmF0b3IgbGFzdENvbW1vbkJvdW5kYXJ5ID0gbV9h
bmNlc3RvcnMuZW5kKCk7CisgICAgLy8gQXNzdW1lIGlubmVyIGJvdW5kYXJ5IGlzIHRoZSByZWxh
dGVkVGFyZ2V0IGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIHRoZXJlIGFyZSBubyBzaGFkb3cgRE9N
IGJvdW5kYXJpZXMpLgorICAgIFZlY3RvcjxOb2RlKj46Oml0ZXJhdG9yIGZpcnN0SW5uZXJCb3Vu
ZGFyeSA9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsKKworICAgIFZlY3RvcjxFdmVu
dENvbnRleHQ+OjppdGVyYXRvciB0YXJnZXRBbmNlc3RvciA9IG1fYW5jZXN0b3JzLmVuZCgpOwor
ICAgIC8vIFdhbGsgZG93biBmcm9tIHRoZSB0b3AsIGxvb2tpbmcgZm9yIGxvd2VzdCBjb21tb24g
YW5jZXN0b3IsIGFsc28gbW9uaXRvcmluZyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMuCisgICAgYm9v
bCBkaXZlcmdlZCA9IGZhbHNlOworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaSA9
IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuZW5kKCkgLSAxOyBpID49IHJlbGF0ZWRUYXJnZXRBbmNl
c3RvcnMuYmVnaW4oKTsgLS1pKSB7CisgICAgICAgIGlmIChkaXZlcmdlZCkgeworICAgICAgICAg
ICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RJbm5l
ckJvdW5kYXJ5ID0gaSArIDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0YXJnZXRB
bmNlc3RvciA9PSBtX2FuY2VzdG9ycy5iZWdpbigpKSB7CisgICAgICAgICAgICBkaXZlcmdlZCA9
IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdl
dEFuY2VzdG9yLS07CisKKyAgICAgICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKQorICAgICAg
ICAgICAgbGFzdENvbW1vbkJvdW5kYXJ5ID0gdGFyZ2V0QW5jZXN0b3I7CisKKyAgICAgICAgaWYg
KCgqaSkgIT0gKCp0YXJnZXRBbmNlc3Rvcikubm9kZSgpKSB7CisgICAgICAgICAgICB0YXJnZXRB
bmNlc3RvciA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7CisgICAgICAgICAgICBkaXZlcmdlZCA9IHRy
dWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
ZGl2ZXJnZWQpIHsKKyAgICAgICAgLy8gVGhlIHJlbGF0ZWRUYXJnZXQgaXMgYSBwYXJlbnQgb3Ig
c2hhZG93SG9zdCBvZiB0aGUgdGFyZ2V0LgorICAgICAgICBpZiAodGFyZ2V0LT5pc1NoYWRvd1Jv
b3QoKSkKKyAgICAgICAgICAgIGxhc3RDb21tb25Cb3VuZGFyeSA9IG1fYW5jZXN0b3JzLmJlZ2lu
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2luY2UgYW5jZXN0b3JzIGRvZXMgbm90IGNv
bnRhaW4gdGFyZ2V0IGl0c2VsZiwgd2UgbXVzdCBhY2NvdW50CisgICAgICAgIC8vIGZvciB0aGUg
cG9zc2liaWxpdHkgdGhhdCB0YXJnZXQgaXMgYSBzaGFkb3dIb3N0IG9mIHJlbGF0ZWRUYXJnZXQK
KyAgICAgICAgLy8gYW5kIHRodXMgc2VydmVzIGFzIHRoZSBsYXN0Q29tbW9uQm91bmRhcnkuCisg
ICAgICAgIC8vIEx1Y2tpbHksIGluIHRoaXMgY2FzZSB0aGUgZmlyc3RJbm5lckJvdW5kYXJ5IGlz
IHRhcmdldC4KKyAgICAgICAgaWYgKCgqZmlyc3RJbm5lckJvdW5kYXJ5KSA9PSB0YXJnZXQpCisg
ICAgICAgICAgICBsYXN0Q29tbW9uQm91bmRhcnkgPSBtX2FuY2VzdG9ycy5iZWdpbigpOworICAg
IH0KKworICAgIGlmIChsYXN0Q29tbW9uQm91bmRhcnkgIT0gbV9hbmNlc3RvcnMuZW5kKCkpIHsK
KyAgICAgICAgLy8gVHJpbSBhbmNlc3RvcnMgdG8gbGFzdENvbW1vbkJvdW5kYXJ5IHRvIGtlZXAg
ZXZlbnRzIGluc2lkZSBvZiB0aGUgY29tbW9uIHNoYWRvdyBET00gc3VidHJlZS4KKyAgICAgICAg
bV9hbmNlc3RvcnMuc2hyaW5rKGxhc3RDb21tb25Cb3VuZGFyeSAtIG1fYW5jZXN0b3JzLmJlZ2lu
KCkpOwogICAgIH0KLSAgICByZXR1cm4gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7CisKKyAgICAv
LyBTZXQgZXZlbnQncyByZWxhdGVkIHRhcmdldCB0byB0aGUgZmlyc3QgZW5jb3VudGVyZWQgc2hh
ZG93IERPTSBib3VuZGFyeSBpbiB0aGUgZGl2ZXJnZW50IHN1YnRyZWUuCisgICAgaWYgKGZpcnN0
SW5uZXJCb3VuZGFyeSAhPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkpCisgICAgICAg
IHJldHVybiAoKmZpcnN0SW5uZXJCb3VuZGFyeSk7CisKKyAgICByZXR1cm4gcmVsYXRlZFRhcmdl
dC5nZXQoKTsKIH0KIAogRXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9k
ZSkKICAgICA6IG1fbm9kZShub2RlKQorICAgICwgbV9hbmNlc3RvcnNJbml0aWFsaXplZChmYWxz
ZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgbV92aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+
dmlldygpOwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6Z2V0RXZlbnRBbmNlc3RvcnMoRXZl
bnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0LCBFdmVudERpc3BhdGNoQmVoYXZpb3IgYmVoYXZpb3Ip
CitzdGF0aWMgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRldGVybWluZURpc3BhdGNoQmVoYXZpb3Io
RXZlbnQqIGV2ZW50KQoreworICAgIC8vIFBlciBYQkwgMi4wIHNwZWMsIG11dGF0aW9uIGV2ZW50
cyBzaG91bGQgbmV2ZXIgY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyeToKKyAgICAvLyBodHRwOi8v
ZGV2LnczLm9yZy8yMDA2L3hibDIvI2V2ZW50LWZsb3ctYW5kLXRhcmdldGluZy1hY3Jvc3Mtc2hh
ZG93LXMKKyAgICBpZiAoZXZlbnQtPmlzTXV0YXRpb25FdmVudCgpKQorICAgICAgICByZXR1cm4g
U3RheUluc2lkZVNoYWRvd0RPTTsKKworICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVj
dHN0YXJ0IGV2ZW50IHRvIGNyb3NzIHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICAv
LyBDaGFuZ2luZyB0aGlzIGJyZWFrcyBleGlzdGluZyBzaXRlcy4KKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgorICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KQorICAg
ICAgICByZXR1cm4gU3RheUluc2lkZVNoYWRvd0RPTTsKKworICAgIHJldHVybiBSZXRhcmdldEV2
ZW50OworfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZl
bnQqIGV2ZW50KQogeworICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBiZWhhdmlvciA9IGRldGVy
bWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQpOworCiAgICAgaWYgKCFtX25vZGUtPmluRG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGFuY2VzdG9yc0luaXRpYWxpemVkKCkp
CisgICAgaWYgKG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBvcmlnaW5hbFRhcmdldDsKKyAgICBtX2FuY2VzdG9yc0lu
aXRpYWxpemVkID0gdHJ1ZTsKKwogICAgIE5vZGUqIGFuY2VzdG9yID0gbV9ub2RlLmdldCgpOwor
ICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRS
dWxlcyhhbmNlc3Rvcik7CiAgICAgYm9vbCBzaG91bGRTa2lwTmV4dEFuY2VzdG9yID0gZmFsc2U7
CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1NoYWRvd1Jvb3Qo
KSkgewpAQCAtMjE2LDcgKzMxNyw3IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5p
c051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjYW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4g
ZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgogCiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBvcmln
aW5hbFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsKLSAgICBnZXRFdmVudEFuY2VzdG9ycyhvcmln
aW5hbFRhcmdldC5nZXQoKSwgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudC5nZXQoKSkp
OworICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50LmdldCgpKTsKIAogICAgIFdpbmRvd0V2
ZW50Q29udGV4dCB3aW5kb3dDb250ZXh0KGV2ZW50LmdldCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2
ZW50Q29udGV4dCgpKTsKIApAQCAtMzAwLDMyICs0MDEsMTAgQEAgZG9uZVdpdGhEZWZhdWx0Ogog
ICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAotCiBjb25zdCBFdmVu
dENvbnRleHQqIEV2ZW50RGlzcGF0Y2hlcjo6dG9wRXZlbnRDb250ZXh0KCkKIHsKICAgICByZXR1
cm4gbV9hbmNlc3RvcnMuaXNFbXB0eSgpID8gMCA6ICZtX2FuY2VzdG9ycy5sYXN0KCk7CiB9CiAK
LWJvb2wgRXZlbnREaXNwYXRjaGVyOjphbmNlc3RvcnNJbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fYW5jZXN0b3JzLnNpemUoKTsKLX0KLQotRXZlbnREaXNwYXRjaEJlaGF2aW9y
IEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCogZXZlbnQp
Ci17Ci0gICAgLy8gUGVyIFhCTCAyLjAgc3BlYywgbXV0YXRpb24gZXZlbnRzIHNob3VsZCBuZXZl
ciBjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJ5OgotICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnLzIw
MDYveGJsMi8jZXZlbnQtZmxvdy1hbmQtdGFyZ2V0aW5nLWFjcm9zcy1zaGFkb3ctcwotICAgIGlm
IChldmVudC0+aXNNdXRhdGlvbkV2ZW50KCkpCi0gICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hh
ZG93RE9NOwotCi0gICAgLy8gV2ViS2l0IG5ldmVyIGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQg
dG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJvdW5kYXJ5LgotICAgIC8vIENoYW5naW5nIHRo
aXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9yIGRldGFpbHMuCi0gICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQpCi0gICAgICAgIHJldHVybiBT
dGF5SW5zaWRlU2hhZG93RE9NOwotCi0gICAgcmV0dXJuIFJldGFyZ2V0RXZlbnQ7Ci19Ci0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDE0NmMwZDkzMGE4NmJhMDI2
YzcwYWFjOTBmY2JiYjQ2OWQ5YWVjNjEuLjU3MmU1ZTVjYWMxM2I0ZGZiOGI5NWE4NGRkNDQ0NGRl
MTI2YTYwZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTQxLDExICs0
MSw2IEBAIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFBsYXRmb3JtTW91c2VF
dmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIAotZW51bSBFdmVudERpc3BhdGNoQmVo
YXZpb3IgewotICAgIFJldGFyZ2V0RXZlbnQsCi0gICAgU3RheUluc2lkZVNoYWRvd0RPTQotfTsK
LQogY2xhc3MgRXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkaXNw
YXRjaEV2ZW50KE5vZGUqLCBjb25zdCBFdmVudERpc3BhdGNoTWVkaWF0b3ImKTsKQEAgLTU1LDIx
ICs1MCwyMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50KE5v
ZGUqLCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKIAogICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50Pik7Ci0gICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gYWRqdXN0UmVsYXRl
ZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgUGFzc1JlZlB0cjxFdmVudFRh
cmdldD4gYWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+
KTsKICAgICBOb2RlKiBub2RlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRXZlbnREaXNwYXRj
aGVyKE5vZGUqKTsKIAotICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBkZXRlcm1pbmVEaXNwYXRj
aEJlaGF2aW9yKEV2ZW50Kik7Ci0gICAgdm9pZCBnZXRFdmVudEFuY2VzdG9ycyhFdmVudFRhcmdl
dCogb3JpZ2luYWxUYXJnZXQsIEV2ZW50RGlzcGF0Y2hCZWhhdmlvcik7CisgICAgdm9pZCBlbnN1
cmVFdmVudEFuY2VzdG9ycyhFdmVudCopOwogICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZl
bnRDb250ZXh0KCk7Ci0gICAgYm9vbCBhbmNlc3RvcnNJbml0aWFsaXplZCgpIGNvbnN0OwogCiAg
ICAgVmVjdG9yPEV2ZW50Q29udGV4dD4gbV9hbmNlc3RvcnM7CiAgICAgUmVmUHRyPE5vZGU+IG1f
bm9kZTsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IG1fb3JpZ2luYWxUYXJnZXQ7CiAgICAgUmVm
UHRyPEZyYW1lVmlldz4gbV92aWV3OworICAgIGJvb2wgbV9hbmNlc3RvcnNJbml0aWFsaXplZDsK
IH07CiAKIGlubGluZSBOb2RlKiBFdmVudERpc3BhdGNoZXI6Om5vZGUoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL01vdXNlRXZlbnQuY3BwCmluZGV4IDZlNDhkNDA5MmIzOTg4Mjc5MTg0YTZlMmQ4ZjE3NzBi
ZWI2YjdjMDUuLjEzNGU1ZjY2NmZlN2RmYzE5ZjE1NmJjMzRjODRkOTQzYjQ1NzM0YTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIE1vdXNlRXZl
bnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0
Y2hlcikgY29ucwogICAgIGlmIChldmVudCgpLT50eXBlKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIFNob3VsZG4ndCBoYXBwZW4uCiAKLSAgICBSZWZQdHI8RXZlbnRUYXJn
ZXQ+IHJlbGF0ZWRUYXJnZXQgPSBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50
KCktPnJlbGF0ZWRUYXJnZXQoKSk7CisgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFy
Z2V0ID0gZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBldmVudCgpLT5y
ZWxhdGVkVGFyZ2V0KCkpOwogICAgIGV2ZW50KCktPnNldFJlbGF0ZWRUYXJnZXQocmVsYXRlZFRh
cmdldCk7CiAKICAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88841</attachid>
            <date>2011-04-08 10:55:35 -0700</date>
            <delta_ts>2011-04-08 12:04:34 -0700</delta_ts>
            <desc>Addressed feedback.</desc>
            <filename>bug-55515-20110408105534.patch</filename>
            <type>text/plain</type>
            <size>15718</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzMTQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NjMwNjNjYzM3N2E4MTdjZjc1NDJj
Y2JlMjZhYmYwY2E2MDU0OTFiLi5jYjFlNjk0OWFhMDhlMTVmZTYxMDE2N2RhZDEyMmJkMTE3OTIw
NWIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMDIgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcHJvcGVyIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9t
b3VzZW91dCBldmVudHMgaW4gcmVnYXJkIHRvIHNoYWRvdyBET00gYm91bmRhcmllcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTE1CisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0OiBV
cGRhdGVkIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRh
cnktY3Jvc3NpbmcuaHRtbDogQWRkZWQgbmV3IHRlc3QgZm9yIG1vdXNlb3Zlci9tb3VzZW91dCBo
YW5kbGluZy4KKwogMjAxMS0wNC0wOCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgYWRkZWQgZmFpbGVkIHRlc3RzIHRvIHRlc3QgZXhwZWN0YXRp
b24gbGlzdCBpbiBjaHJvbWl1bS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0CmluZGV4IDg4ODkx
ODk4M2M5OGY3MTg3MzUyYjcyYjBhNzZjZjNhNDBhN2ZlY2YuLmJhMjdhZWI4NDA2OTNlYjFiNWYy
NzNiYmEzOGJiZDU4MGZmMTU4N2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4cGVjdGVkLnR4dApAQCAtNCw2
ICs0LDcgQEAgU2VlIGJ1ZyA0NjAxNSBmb3IgZGV0YWlscy4KIAogTXV0YXRpb24gZXZlbnRzIHNo
b3VsZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93IERPTTogUEFTUwogVGhlIHNlbGVj
dHN0YXJ0IGV2ZW50IHNob3VsZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93IERPTTog
UEFTUworVGhlIG1vdXNlb3Zlci9tb3VzZW91dCBldmVudCBiZXR3ZWVuIHR3byBlbGVtZW50cyBp
bnNpZGUgdGhlIHNhbWUgc2hhZG93IHN1YnRyZWUgc2hvdWxkIG5vdCBwcm9wYWdhdGUgb3V0IG9m
IHRoZSBzaGFkb3cgRE9NOiBQQVNTCiBMYWJlbCBzaG91bGQgbG9vayBiZXlvbmQgc2hhZG93IGJv
dW5kYXJ5IHRvIGRldGVjdCBpZiBpdCBlbmNsb3NlcyBpdHMgYXNzb2NpYXRlZCBlbGVtZW50OiBQ
QVNTCiBFdmVudHMgZm9yIGRlZmF1bHQgZXZlbnQgaGFuZGxlciBzaG91bGQgbm90IGJlIHJldGFy
Z2V0ZWQ6IFBBU1MKIEV2ZW50J3MgcmVsYXRlZFRhcmdldCBzaG91bGQgYmUgcmV0YXJnZXRlZDog
UEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5
LWNyb3NzaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnkt
Y3Jvc3NpbmcuaHRtbAppbmRleCA1ODRmMWE1MTYxMjg3YjE4MzBhNzkyMmUyY2Y0NWRhZTBhNmYy
NDM4Li43ZWEzMzMxZDkzYTJlOTc5NzFlMzZiYTRlYmJkMDMzMGNjNjA0OGQyIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmcuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmcuaHRt
bApAQCAtMTksNiArMTksMjYgQEAgZnVuY3Rpb24gbW92ZU92ZXIoZWxlbWVudCkKICAgICBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKIH0KIAorZnVuY3Rpb24gbW92ZU92ZXJMZWZ0UXVh
cnRlck9mKGVsZW1lbnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZz
ZXRXaWR0aCAvIDQ7CisgICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zm
c2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKK30KKwor
ZnVuY3Rpb24gbW92ZU92ZXJSaWdodFF1YXJ0ZXJPZihlbGVtZW50KQoreworICAgIGlmICghd2lu
ZG93LmV2ZW50U2VuZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgeCA9IGVsZW1lbnQu
b2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggKiAzIC8gNDsKKyAgICB2YXIgeSA9IGVs
ZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworfQorCiBmdW5jdGlvbiBjbGlja09uKGVsZW1lbnQpCiB7
CiAgICAgbW92ZU92ZXIoZWxlbWVudCk7CkBAIC0zMSw5ICs1MSw3IEBAIGZ1bmN0aW9uIGNsaWNr
T25MZWZ0UXVhcnRlck9mKGVsZW1lbnQpCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVu
dC5vZmZzZXRXaWR0aCAvIDQ7Ci0gICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1l
bnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsK
KyAgICBtb3ZlT3ZlckxlZnRRdWFydGVyT2YoZWxlbWVudCk7CiAgICAgZXZlbnRTZW5kZXIubW91
c2VEb3duKCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwogfQpAQCAtNzQsNiArOTIsMjQg
QEAgdmFyIHRlc3RzID0gewogICAgICAgICB0ZXh0SW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZCh0ZXh0SW5wdXQpOwogICAgICAgICBkb2N1bWVudC5zZWxlY3RzdGFydCA9IG51bGw7CiAgICAg
fSwKKyAgICBtb3VzZU92ZXJBbmRPdXRQcm9wYWdhdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7CisgICAgICAg
IGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnZmlsZScpOworICAgICAgICB2YXIgY291
bnRlciA9IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgfQorICAgICAgICBtb3ZlT3ZlckxlZnRRdWFydGVyT2YoZmlsZUlucHV0KTsKKyAgICAgICAg
ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBjb3VudGVyLCBmYWxz
ZSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBj
b3VudGVyLCBmYWxzZSk7CisgICAgICAgIG1vdmVPdmVyUmlnaHRRdWFydGVyT2YoZmlsZUlucHV0
KTsKKyAgICAgICAgbG9nKCJUaGUgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50IGJldHdlZW4gdHdv
IGVsZW1lbnRzIGluc2lkZSB0aGUgc2FtZSBzaGFkb3cgc3VidHJlZSBzaG91bGQgbm90IHByb3Bh
Z2F0ZSBvdXQgb2YgdGhlIHNoYWRvdyBET00iLCBjb3VudCA9PSAwKTsKKyAgICAgICAgZG9jdW1l
bnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBjb3VudGVyLCBmYWxzZSk7
CisgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBj
b3VudGVyLCBmYWxzZSk7CisgICAgICAgIGZpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KGZpbGVJbnB1dCk7CisgICAgfSwKICAgICBsYWJlbFN5bnRoZXRpY0NsaWNrOiBmdW5jdGlvbigp
CiAgICAgewogICAgICAgICB2YXIgY291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJjZmZiYTQ2ODg5
YjM4YTQwOTM0ZDdiMjI3ODg0OGRiODYxNjM1OWUuLmUzMGFlNzczZjY3Y2YwZTc1M2FhOWNkZmQx
Mzg5MzU5Y2M5ZWQ0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMS0wNC0wOCAg
RGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBwcm9wZXIgaGFuZGxp
bmcgb2YgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50cyBpbiByZWdhcmQgdG8gc2hhZG93IERPTSBi
b3VuZGFyaWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU1MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTb3VyY2UvV2ViQ29yZToKKworICAgICAgICBUaGlzIGltcGxlbWVudHMgWEJMIDIuMCdzIHNw
ZWNpZmllZCBoYW5kbGluZyBvZiBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnRzOgorICAgICAgICBo
dHRwOi8vZGV2LnczLm9yZy8yMDA2L3hibDIvT3ZlcnZpZXcuaHRtbCN0aGUtbW91c2VvdmVyLWFu
ZC1tb3VzZW91dC1ldmVudHMKKworICAgICAgICBUbyBkbyB0aGlzLCB3ZToKKyAgICAgICAgMSkg
Y2FsY3VsYXRlIGxvd2VzdCBjb21tb24gYW5jZXN0b3IgYmV0d2VlbiByZWxhdGVkVGFyZ2V0IGFu
ZCB0YXJnZXQsIGFuZAorICAgICAgICAgICB0aGUgbmVhcmVzdCBib3VuZGFyaWVzIGFyb3VuZCB0
aGVtOiB0aGUgb3V0ZXIgKGNvbW1vbikgYm91bmRhcnksIGFuZCB0aGUKKyAgICAgICAgICAgaW5u
ZXIgKHNwZWNpZmljIHRvIHJlbGF0ZWRUYXJnZXQpIGJvdW5kYXJ5LiBUaGVuLCB3ZQorICAgICAg
ICAyKSBlbnN1cmUgdGhhdCBldmVudHMgb25seSBwcm9wYWdhdGUgdXAgdG8gdGhlIGNvbW1vbiBi
b3VuZGFyeSAob3IKKyAgICAgICAgICAgYWxsIHRoZSB3YXkgaWYgYm91bmRhcnkgaXMgbm90IGZv
dW5kKSwgd2hpbGUKKyAgICAgICAgMykgdXBkYXRpbmcgcmVsYXRlZFRhcmdldCBiZSB0aGUgaW5u
ZXIgYm91bmRhcnkuCisKKyAgICAgICAgV2UgYWxzbyBkZXRlY3QgdGhlIG1vc3QgY29tbW9uIGNh
c2Ugd2hlbiBubyBjb21tb24gYm91bmRhcnkgY291bGQgZXhpc3QKKyAgICAgICAgYW5kIHByb3Zp
ZGUgYSBmYXN0IHBhdGggdG8gc2hvcnQtY2lyY3VpdCBtb3N0IG9mIHRoZSBib3VuZGFyeSBkZXRl
Y3Rpb24KKyAgICAgICAgbG9naWMuCisKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyk6IEFkZGVkIGEg
aGVscGVyIHRvIGRldGVybWluZSBsb3dlc3QKKyAgICAgICAgICAgIGNvbW1vbiBhbmNlc3Rvciwg
dGhlIGJvdW5kYXJpZXMgYXJvdW5kIGl0LCBhbmQgY29tcHV0ZSBhZGp1c3RtZW50cworICAgICAg
ICAgICAgdG8gcmVsYXRlZFRhcmdldCBhbmQgZXZlbnQgdGFyZ2V0IGFuY2VzdG9yIGNoYWluLgor
ICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JzQ3Jvc3NTaGFkb3dCb3VuZGFyaWVzKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQp
OiBDaGFuZ2VkIHRvIGNhbGN1bGF0ZQorICAgICAgICAgICAgaW5uZXIvb3V0ZXIgc2hhZG93IERP
TSBib3VuZGFyaWVzIGFuZCBhZGp1c3QgYW5jZXN0b3JzIGNoYWluIGFjY29yZGluZ2x5LgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOiBBZGRlZCBm
bGFnIGluaXRpYWxpemVyCisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmVuc3Vy
ZUV2ZW50QW5jZXN0b3JzKTogUmVuYW1lZCBmcm9tIGdldEV2ZW50QW5jZXN0b3JzLAorICAgICAg
ICAgICAgY29udmVydGVkIHRvIHVzZSBpbml0aWFsaXphdGlvbiBmbGFnLCByYXRoZXIgdGhhbiB0
ZXN0aW5nIGZvciBlbXB0eS4KKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmg6IEFkanVz
dGVkIGRlY2xzLgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTogQ2hhbmdlZCB0
byBzZW5kIGV2ZW50CisgICAgICAgICAgICB0byBhZGp1c3RSZWxhdGVkVGFyZ2V0LgorCisgICAg
ICAgIExheW91dFRlc3RzOgorCisgICAgICAgICogZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5
LWNyb3NzaW5nLWV4cGVjdGVkLnR4dDogVXBkYXRlZCBleHBlY3RhdGlvbnMuCisgICAgICAgICog
ZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLmh0bWw6IEFkZGVkIG5ldyB0ZXN0
IGZvciBtb3VzZW92ZXIvbW91c2VvdXQgaGFuZGxpbmcuCisKIDIwMTEtMDQtMDggIEFiaGlzaGVr
IEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZW1v
dmUgYWNjaWRlbnRhbCBwcmludGYgYWRkZWQgaW4gcjgzMzA2LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnREaXNwYXRjaGVyLmNwcAppbmRleCBhOTYxMWU3ZTkxMGFiMzg4OWY1YWM1NDczZTBlZTVlN2E0
NmYwNDZjLi5jM2JkMWZmNmM5ODBhZjYwNThhMzk0YTdiZjkyOTQ2ODc2NzMxODVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMTIyLDQyICsxMjIsMTM0IEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8RXZlbnQ+IHVuZGVyCiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlj
a3MtPnJlbW92ZShub2RlKTsKIH0KIAorc3RydWN0IEJvdW5kYXJ5QWRqdXN0bWVudHMgeworc2l6
ZV90IGFuY2VzdG9yU2l6ZTsKK05vZGUqIHJlbGF0ZWRUYXJnZXQ7Cit9OworCitzdGF0aWMgQm91
bmRhcnlBZGp1c3RtZW50cyBhZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoTm9kZSogdGFyZ2V0LCBj
b25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgdGFyZ2V0QW5jZXN0b3JzLCBjb25zdCBWZWN0b3I8
Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMpCit7CisgICAgVmVjdG9yPEV2ZW50Q29udGV4
dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2VzdENvbW1vbkJvdW5kYXJ5ID0gdGFyZ2V0QW5jZXN0b3Jz
LmVuZCgpOworICAgIC8vIEFzc3VtZSBkaXZlcmdlbnQgYm91bmRhcnkgaXMgdGhlIHJlbGF0ZWRU
YXJnZXQgaXRzZWxmIChpbiBvdGhlciB3b3JkcywgdGhlcmUgYXJlIG5vIHNoYWRvdyBET00gYm91
bmRhcmllcykuCisgICAgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgZmlyc3REaXZlcmdl
bnRCb3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsKKworICAgIFZlY3Rv
cjxFdmVudENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciB0YXJnZXRBbmNlc3RvciA9IHRhcmdldEFu
Y2VzdG9ycy5lbmQoKTsKKyAgICAvLyBXYWxrIGRvd24gZnJvbSB0aGUgdG9wLCBsb29raW5nIGZv
ciBsb3dlc3QgY29tbW9uIGFuY2VzdG9yLCBhbHNvIG1vbml0b3Jpbmcgc2hhZG93IERPTSBib3Vu
ZGFyaWVzLgorICAgIGJvb2wgZGl2ZXJnZWQgPSBmYWxzZTsKKyAgICBmb3IgKFZlY3RvcjxOb2Rl
Kj46OmNvbnN0X2l0ZXJhdG9yIGkgPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmVuZCgpIC0gMTsg
aSA+PSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7IC0taSkgeworICAgICAgICBpZiAo
ZGl2ZXJnZWQpIHsKKyAgICAgICAgICAgIGlmICgoKmkpLT5pc1NoYWRvd1Jvb3QoKSkgeworICAg
ICAgICAgICAgICAgIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgPSBpICsgMTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHRhcmdldEFuY2VzdG9yID09IHRhcmdldEFuY2VzdG9ycy5iZWdp
bigpKSB7CisgICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldEFuY2VzdG9yLS07CisKKyAgICAgICAgaWYg
KCgqaSktPmlzU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkg
PSB0YXJnZXRBbmNlc3RvcjsKKworICAgICAgICBpZiAoKCppKSAhPSAoKnRhcmdldEFuY2VzdG9y
KS5ub2RlKCkpIHsKKyAgICAgICAgICAgIHRhcmdldEFuY2VzdG9yID0gdGFyZ2V0QW5jZXN0b3Jz
LmJlZ2luKCk7CisgICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZGl2ZXJnZWQpIHsKKyAgICAgICAg
Ly8gVGhlIHJlbGF0ZWRUYXJnZXQgaXMgYSBwYXJlbnQgb3Igc2hhZG93SG9zdCBvZiB0aGUgdGFy
Z2V0LgorICAgICAgICBpZiAodGFyZ2V0LT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIGxv
d2VzdENvbW1vbkJvdW5kYXJ5ID0gdGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gU2luY2UgYW5jZXN0b3JzIGRvZXMgbm90IGNvbnRhaW4gdGFyZ2V0IGl0
c2VsZiwgd2UgbXVzdCBhY2NvdW50CisgICAgICAgIC8vIGZvciB0aGUgcG9zc2liaWxpdHkgdGhh
dCB0YXJnZXQgaXMgYSBzaGFkb3dIb3N0IG9mIHJlbGF0ZWRUYXJnZXQKKyAgICAgICAgLy8gYW5k
IHRodXMgc2VydmVzIGFzIHRoZSBsb3dlc3RDb21tb25Cb3VuZGFyeS4KKyAgICAgICAgLy8gTHVj
a2lseSwgaW4gdGhpcyBjYXNlIHRoZSBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5IGlzIHRhcmdldC4K
KyAgICAgICAgaWYgKCgqZmlyc3REaXZlcmdlbnRCb3VuZGFyeSkgPT0gdGFyZ2V0KQorICAgICAg
ICAgICAgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSB0YXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsKKyAg
ICB9CisKKyAgICBCb3VuZGFyeUFkanVzdG1lbnRzIHJlc3VsdDsKKyAgICAvLyBUcmltIGFuY2Vz
dG9ycyB0byBsb3dlc3RDb21tb25Cb3VuZGFyeSB0byBrZWVwIGV2ZW50cyBpbnNpZGUgb2YgdGhl
IGNvbW1vbiBzaGFkb3cgRE9NIHN1YnRyZWUuCisgICAgcmVzdWx0LmFuY2VzdG9yU2l6ZSA9IGxv
d2VzdENvbW1vbkJvdW5kYXJ5ID09IHRhcmdldEFuY2VzdG9ycy5lbmQoKSA/IHRhcmdldEFuY2Vz
dG9ycy5zaXplKCkgOiBsb3dlc3RDb21tb25Cb3VuZGFyeSAtIHRhcmdldEFuY2VzdG9ycy5iZWdp
bigpOworICAgIC8vIFNldCBldmVudCdzIHJlbGF0ZWQgdGFyZ2V0IHRvIHRoZSBmaXJzdCBlbmNv
dW50ZXJlZCBzaGFkb3cgRE9NIGJvdW5kYXJ5IGluIHRoZSBkaXZlcmdlbnQgc3VidHJlZS4KKyAg
ICByZXN1bHQucmVsYXRlZFRhcmdldCA9IGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgIT0gcmVsYXRl
ZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpID8gKmZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgOiAwOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBzdGF0aWMgYm9vbCBhbmNlc3RvcnNDcm9z
c1NoYWRvd0JvdW5kYXJpZXMoY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4mIGFuY2VzdG9ycykK
K3sKKyAgICByZXR1cm4gYW5jZXN0b3JzLmlzRW1wdHkoKSB8fCBhbmNlc3RvcnMuZmlyc3QoKS5u
b2RlKCkgPT0gYW5jZXN0b3JzLmxhc3QoKS5ub2RlKCk7Cit9CisKIC8vIEZJWE1FOiBPbmNlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk2MyBsYW5kcywgdGhpcyBz
aG91bGQKIC8vIGJlIGdyZWF0bHkgaW1wcm92ZWQuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQwMjUuCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERp
c3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVs
YXRlZFRhcmdldCkKK1Bhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6YWRq
dXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJl
bGF0ZWRUYXJnZXRBcmcpCiB7CisgICAgaWYgKCFyZWxhdGVkVGFyZ2V0QXJnKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFJlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdl
dEFyZy0+dG9Ob2RlKCk7CiAgICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIE5vZGUqIG5vZGUgPSByZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKLSAgICBpZiAo
IW5vZGUpCisgICAgTm9kZSogdGFyZ2V0ID0gbV9ub2RlLmdldCgpOworICAgIGlmICghdGFyZ2V0
KQogICAgICAgICByZXR1cm4gcmVsYXRlZFRhcmdldDsKIAotICAgIE5vZGUqIG91dGVybW9zdFNo
YWRvd0JvdW5kYXJ5ID0gbm9kZTsKLSAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuOyBuID0gbi0+
cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQpOwor
CisgICAgLy8gQ2FsY3VsYXRlIGVhcmx5IGlmIHRoZSBjb21tb24gYm91bmRhcnkgaXMgZXZlbiBw
b3NzaWJsZSBieSBsb29raW5nIGF0CisgICAgLy8gYW5jZXN0b3JzIHNpemUgYW5kIGlmIHRoZSBy
ZXRhcmdldGluZyBoYXMgb2NjdXJlZCAoaW5kaWNhdGluZyB0aGUgcHJlc2VuY2Ugb2Ygc2hhZG93
IERPTSBib3VuZGFyaWVzKS4KKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gYm91bmRhcmllcyBkZXRl
Y3RlZCwgdGhlIHRhcmdldCBhbmQgcmVsYXRlZCB0YXJnZXQgY2FuJ3QgaGF2ZSBhIGNvbW1vbiBi
b3VuZGFyeS4KKyAgICBib29sIG5vQ29tbW9uQm91bmRhcnkgPSBhbmNlc3RvcnNDcm9zc1NoYWRv
d0JvdW5kYXJpZXMobV9hbmNlc3RvcnMpOworCisgICAgVmVjdG9yPE5vZGUqPiByZWxhdGVkVGFy
Z2V0QW5jZXN0b3JzOworICAgIE5vZGUqIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gcmVsYXRl
ZFRhcmdldC5nZXQoKTsKKyAgICBmb3IgKE5vZGUqIG4gPSBvdXRlcm1vc3RTaGFkb3dCb3VuZGFy
eTsgbjsgbiA9IG4tPnBhcmVudE9ySG9zdE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aXNTaGFk
b3dSb290KCkpCiAgICAgICAgICAgICBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IG4tPnBhcmVu
dE9ySG9zdE5vZGUoKTsKKyAgICAgICAgaWYgKCFub0NvbW1vbkJvdW5kYXJ5KQorICAgICAgICAg
ICAgcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5hcHBlbmQobik7CiAgICAgfQotICAgIHJldHVybiBv
dXRlcm1vc3RTaGFkb3dCb3VuZGFyeTsKKworICAgIC8vIFNob3J0LWNpcmN1aXQgdGhlIGZhc3Qg
Y2FzZSB3aGVuIHdlIGtub3cgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgYSBjb21tb24g
Ym91bmRhcnkuCisgICAgaWYgKG5vQ29tbW9uQm91bmRhcnkpCisgICAgICAgIHJldHVybiBvdXRl
cm1vc3RTaGFkb3dCb3VuZGFyeTsKKworICAgIEJvdW5kYXJ5QWRqdXN0bWVudHMgYWRqdXN0bWVu
dHMgPSBhZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXModGFyZ2V0LCBtX2FuY2VzdG9ycywgcmVsYXRl
ZFRhcmdldEFuY2VzdG9ycyk7CisgICAgbV9hbmNlc3RvcnMuc2hyaW5rKGFkanVzdG1lbnRzLmFu
Y2VzdG9yU2l6ZSk7CisgICAgcmV0dXJuIGFkanVzdG1lbnRzLnJlbGF0ZWRUYXJnZXQgPyBhZGp1
c3RtZW50cy5yZWxhdGVkVGFyZ2V0IDogcmVsYXRlZFRhcmdldDsKIH0KIAogRXZlbnREaXNwYXRj
aGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKICAgICA6IG1fbm9kZShub2RlKQorICAg
ICwgbV9hbmNlc3RvcnNJbml0aWFsaXplZChmYWxzZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAg
ICAgbV92aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpOwogfQogCi12b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6Z2V0RXZlbnRBbmNlc3RvcnMoRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0LCBF
dmVudERpc3BhdGNoQmVoYXZpb3IgYmVoYXZpb3IpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5z
dXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogeworICAgIEV2ZW50RGlzcGF0Y2hCZWhh
dmlvciBiZWhhdmlvciA9IGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQpOworCiAgICAg
aWYgKCFtX25vZGUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGFu
Y2VzdG9yc0luaXRpYWxpemVkKCkpCisgICAgaWYgKG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBvcmlnaW5hbFRhcmdl
dDsKKyAgICBtX2FuY2VzdG9yc0luaXRpYWxpemVkID0gdHJ1ZTsKKwogICAgIE5vZGUqIGFuY2Vz
dG9yID0gbV9ub2RlLmdldCgpOworICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudFRhcmdl
dFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3Rvcik7CiAgICAgYm9vbCBzaG91bGRTa2lw
TmV4dEFuY2VzdG9yID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKGFu
Y2VzdG9yLT5pc1NoYWRvd1Jvb3QoKSkgewpAQCAtMTkyLDcgKzI4NCw3IEBAIGJvb2wgRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFT
U0VSVCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjYW4gY3Jl
YXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgogCiAgICAgUmVm
UHRyPEV2ZW50VGFyZ2V0PiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsKLSAgICBn
ZXRFdmVudEFuY2VzdG9ycyhvcmlnaW5hbFRhcmdldC5nZXQoKSwgZGV0ZXJtaW5lRGlzcGF0Y2hC
ZWhhdmlvcihldmVudC5nZXQoKSkpOworICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50Lmdl
dCgpKTsKIAogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dDb250ZXh0KGV2ZW50LmdldCgp
LCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKIApAQCAtMjc2LDE3ICszNjgsMTEg
QEAgZG9uZVdpdGhEZWZhdWx0OgogICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKIH0KIAotCiBjb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hlcjo6dG9wRXZlbnRD
b250ZXh0KCkKIHsKICAgICByZXR1cm4gbV9hbmNlc3RvcnMuaXNFbXB0eSgpID8gMCA6ICZtX2Fu
Y2VzdG9ycy5sYXN0KCk7CiB9CiAKLWJvb2wgRXZlbnREaXNwYXRjaGVyOjphbmNlc3RvcnNJbml0
aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5jZXN0b3JzLnNpemUoKTsKLX0KLQog
RXZlbnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hC
ZWhhdmlvcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gUGVyIFhCTCAyLjAgc3BlYywgbXV0YXRp
b24gZXZlbnRzIHNob3VsZCBuZXZlciBjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJ5OgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDJkYmI5ODU0NmNjNWQwOWFiNjkxNWEwZmQ2
NzkxMzVjMjAwMDU0MGEuLjIyNWVlNzVjMmJkNTExZjlkMWU0MjkwNjZkYTBmZDhkY2I2Njc1N2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTU0LDIxICs1NCwyMSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiwgUGFz
c1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9v
bCBzaG93UHJlc3NlZExvb2spOwogCiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KTsKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBhZGp1c3RSZWxhdGVkVGFyZ2V0
KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKKyAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBh
ZGp1c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOwogICAg
IE5vZGUqIG5vZGUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9k
ZSopOwogCiAgICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRldGVybWluZURpc3BhdGNoQmVoYXZp
b3IoRXZlbnQqKTsKLSAgICB2b2lkIGdldEV2ZW50QW5jZXN0b3JzKEV2ZW50VGFyZ2V0KiBvcmln
aW5hbFRhcmdldCwgRXZlbnREaXNwYXRjaEJlaGF2aW9yKTsKKyAgICB2b2lkIGVuc3VyZUV2ZW50
QW5jZXN0b3JzKEV2ZW50Kik7CiAgICAgY29uc3QgRXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRl
eHQoKTsKLSAgICBib29sIGFuY2VzdG9yc0luaXRpYWxpemVkKCkgY29uc3Q7CiAKICAgICBWZWN0
b3I8RXZlbnRDb250ZXh0PiBtX2FuY2VzdG9yczsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwog
ICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9vcmlnaW5hbFRhcmdldDsKICAgICBSZWZQdHI8RnJh
bWVWaWV3PiBtX3ZpZXc7CisgICAgYm9vbCBtX2FuY2VzdG9yc0luaXRpYWxpemVkOwogfTsKIAog
aW5saW5lIE5vZGUqIEV2ZW50RGlzcGF0Y2hlcjo6bm9kZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5jcHAKaW5kZXggNmU0OGQ0MDkyYjM5ODgyNzkxODRhNmUyZDhmMTc3MGJlYjZiN2Mw
NS4uMTM0ZTVmNjY2ZmU3ZGZjMTlmMTU2YmMzNGM4NGQ5NDNiNDU3MzRhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Nb3VzZUV2ZW50LmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIGJvb2wgTW91c2VFdmVudERpc3Bh
dGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBj
b25zCiAgICAgaWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gU2hvdWxkbid0IGhhcHBlbi4KIAotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVs
YXRlZFRhcmdldCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKS0+cmVs
YXRlZFRhcmdldCgpKTsKKyAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQgPSBk
aXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIGV2ZW50KCktPnJlbGF0ZWRU
YXJnZXQoKSk7CiAgICAgZXZlbnQoKS0+c2V0UmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0KTsK
IAogICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZlbnQoZXZlbnQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88854</attachid>
            <date>2011-04-08 12:04:36 -0700</date>
            <delta_ts>2011-04-09 16:30:53 -0700</delta_ts>
            <desc>Adjusted indent</desc>
            <filename>bug-55515-20110408120435.patch</filename>
            <type>text/plain</type>
            <size>15708</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzMTYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NjMwNjNjYzM3N2E4MTdjZjc1NDJj
Y2JlMjZhYmYwY2E2MDU0OTFiLi5jYjFlNjk0OWFhMDhlMTVmZTYxMDE2N2RhZDEyMmJkMTE3OTIw
NWIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMDIgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcHJvcGVyIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9t
b3VzZW91dCBldmVudHMgaW4gcmVnYXJkIHRvIHNoYWRvdyBET00gYm91bmRhcmllcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTE1CisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0OiBV
cGRhdGVkIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRh
cnktY3Jvc3NpbmcuaHRtbDogQWRkZWQgbmV3IHRlc3QgZm9yIG1vdXNlb3Zlci9tb3VzZW91dCBo
YW5kbGluZy4KKwogMjAxMS0wNC0wOCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgYWRkZWQgZmFpbGVkIHRlc3RzIHRvIHRlc3QgZXhwZWN0YXRp
b24gbGlzdCBpbiBjaHJvbWl1bS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0CmluZGV4IDg4ODkx
ODk4M2M5OGY3MTg3MzUyYjcyYjBhNzZjZjNhNDBhN2ZlY2YuLmJhMjdhZWI4NDA2OTNlYjFiNWYy
NzNiYmEzOGJiZDU4MGZmMTU4N2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4cGVjdGVkLnR4dApAQCAtNCw2
ICs0LDcgQEAgU2VlIGJ1ZyA0NjAxNSBmb3IgZGV0YWlscy4KIAogTXV0YXRpb24gZXZlbnRzIHNo
b3VsZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93IERPTTogUEFTUwogVGhlIHNlbGVj
dHN0YXJ0IGV2ZW50IHNob3VsZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93IERPTTog
UEFTUworVGhlIG1vdXNlb3Zlci9tb3VzZW91dCBldmVudCBiZXR3ZWVuIHR3byBlbGVtZW50cyBp
bnNpZGUgdGhlIHNhbWUgc2hhZG93IHN1YnRyZWUgc2hvdWxkIG5vdCBwcm9wYWdhdGUgb3V0IG9m
IHRoZSBzaGFkb3cgRE9NOiBQQVNTCiBMYWJlbCBzaG91bGQgbG9vayBiZXlvbmQgc2hhZG93IGJv
dW5kYXJ5IHRvIGRldGVjdCBpZiBpdCBlbmNsb3NlcyBpdHMgYXNzb2NpYXRlZCBlbGVtZW50OiBQ
QVNTCiBFdmVudHMgZm9yIGRlZmF1bHQgZXZlbnQgaGFuZGxlciBzaG91bGQgbm90IGJlIHJldGFy
Z2V0ZWQ6IFBBU1MKIEV2ZW50J3MgcmVsYXRlZFRhcmdldCBzaG91bGQgYmUgcmV0YXJnZXRlZDog
UEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5
LWNyb3NzaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnkt
Y3Jvc3NpbmcuaHRtbAppbmRleCA1ODRmMWE1MTYxMjg3YjE4MzBhNzkyMmUyY2Y0NWRhZTBhNmYy
NDM4Li43ZWEzMzMxZDkzYTJlOTc5NzFlMzZiYTRlYmJkMDMzMGNjNjA0OGQyIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmcuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmcuaHRt
bApAQCAtMTksNiArMTksMjYgQEAgZnVuY3Rpb24gbW92ZU92ZXIoZWxlbWVudCkKICAgICBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKIH0KIAorZnVuY3Rpb24gbW92ZU92ZXJMZWZ0UXVh
cnRlck9mKGVsZW1lbnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZz
ZXRXaWR0aCAvIDQ7CisgICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zm
c2V0SGVpZ2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKK30KKwor
ZnVuY3Rpb24gbW92ZU92ZXJSaWdodFF1YXJ0ZXJPZihlbGVtZW50KQoreworICAgIGlmICghd2lu
ZG93LmV2ZW50U2VuZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgeCA9IGVsZW1lbnQu
b2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggKiAzIC8gNDsKKyAgICB2YXIgeSA9IGVs
ZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworfQorCiBmdW5jdGlvbiBjbGlja09uKGVsZW1lbnQpCiB7
CiAgICAgbW92ZU92ZXIoZWxlbWVudCk7CkBAIC0zMSw5ICs1MSw3IEBAIGZ1bmN0aW9uIGNsaWNr
T25MZWZ0UXVhcnRlck9mKGVsZW1lbnQpCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVu
dC5vZmZzZXRXaWR0aCAvIDQ7Ci0gICAgdmFyIHkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1l
bnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsK
KyAgICBtb3ZlT3ZlckxlZnRRdWFydGVyT2YoZWxlbWVudCk7CiAgICAgZXZlbnRTZW5kZXIubW91
c2VEb3duKCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwogfQpAQCAtNzQsNiArOTIsMjQg
QEAgdmFyIHRlc3RzID0gewogICAgICAgICB0ZXh0SW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZCh0ZXh0SW5wdXQpOwogICAgICAgICBkb2N1bWVudC5zZWxlY3RzdGFydCA9IG51bGw7CiAgICAg
fSwKKyAgICBtb3VzZU92ZXJBbmRPdXRQcm9wYWdhdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7CisgICAgICAg
IGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnZmlsZScpOworICAgICAgICB2YXIgY291
bnRlciA9IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgfQorICAgICAgICBtb3ZlT3ZlckxlZnRRdWFydGVyT2YoZmlsZUlucHV0KTsKKyAgICAgICAg
ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBjb3VudGVyLCBmYWxz
ZSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBj
b3VudGVyLCBmYWxzZSk7CisgICAgICAgIG1vdmVPdmVyUmlnaHRRdWFydGVyT2YoZmlsZUlucHV0
KTsKKyAgICAgICAgbG9nKCJUaGUgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50IGJldHdlZW4gdHdv
IGVsZW1lbnRzIGluc2lkZSB0aGUgc2FtZSBzaGFkb3cgc3VidHJlZSBzaG91bGQgbm90IHByb3Bh
Z2F0ZSBvdXQgb2YgdGhlIHNoYWRvdyBET00iLCBjb3VudCA9PSAwKTsKKyAgICAgICAgZG9jdW1l
bnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBjb3VudGVyLCBmYWxzZSk7
CisgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBj
b3VudGVyLCBmYWxzZSk7CisgICAgICAgIGZpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KGZpbGVJbnB1dCk7CisgICAgfSwKICAgICBsYWJlbFN5bnRoZXRpY0NsaWNrOiBmdW5jdGlvbigp
CiAgICAgewogICAgICAgICB2YXIgY291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVhOTIyMDk2MDY2
NTNjNThiYTkwM2Q2YzE4MmQxNGQxZjhmZjkzYjcuLjQ5MWI3MzQxNWJiYTIxNWRlMThhZTYzZjQx
MjIyM2YxNTA0ZDEyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMS0wNC0wOCAg
RGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBwcm9wZXIgaGFuZGxp
bmcgb2YgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50cyBpbiByZWdhcmQgdG8gc2hhZG93IERPTSBi
b3VuZGFyaWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU1MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTb3VyY2UvV2ViQ29yZToKKworICAgICAgICBUaGlzIGltcGxlbWVudHMgWEJMIDIuMCdzIHNw
ZWNpZmllZCBoYW5kbGluZyBvZiBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnRzOgorICAgICAgICBo
dHRwOi8vZGV2LnczLm9yZy8yMDA2L3hibDIvT3ZlcnZpZXcuaHRtbCN0aGUtbW91c2VvdmVyLWFu
ZC1tb3VzZW91dC1ldmVudHMKKworICAgICAgICBUbyBkbyB0aGlzLCB3ZToKKyAgICAgICAgMSkg
Y2FsY3VsYXRlIGxvd2VzdCBjb21tb24gYW5jZXN0b3IgYmV0d2VlbiByZWxhdGVkVGFyZ2V0IGFu
ZCB0YXJnZXQsIGFuZAorICAgICAgICAgICB0aGUgbmVhcmVzdCBib3VuZGFyaWVzIGFyb3VuZCB0
aGVtOiB0aGUgb3V0ZXIgKGNvbW1vbikgYm91bmRhcnksIGFuZCB0aGUKKyAgICAgICAgICAgaW5u
ZXIgKHNwZWNpZmljIHRvIHJlbGF0ZWRUYXJnZXQpIGJvdW5kYXJ5LiBUaGVuLCB3ZQorICAgICAg
ICAyKSBlbnN1cmUgdGhhdCBldmVudHMgb25seSBwcm9wYWdhdGUgdXAgdG8gdGhlIGNvbW1vbiBi
b3VuZGFyeSAob3IKKyAgICAgICAgICAgYWxsIHRoZSB3YXkgaWYgYm91bmRhcnkgaXMgbm90IGZv
dW5kKSwgd2hpbGUKKyAgICAgICAgMykgdXBkYXRpbmcgcmVsYXRlZFRhcmdldCBiZSB0aGUgaW5u
ZXIgYm91bmRhcnkuCisKKyAgICAgICAgV2UgYWxzbyBkZXRlY3QgdGhlIG1vc3QgY29tbW9uIGNh
c2Ugd2hlbiBubyBjb21tb24gYm91bmRhcnkgY291bGQgZXhpc3QKKyAgICAgICAgYW5kIHByb3Zp
ZGUgYSBmYXN0IHBhdGggdG8gc2hvcnQtY2lyY3VpdCBtb3N0IG9mIHRoZSBib3VuZGFyeSBkZXRl
Y3Rpb24KKyAgICAgICAgbG9naWMuCisKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyk6IEFkZGVkIGEg
aGVscGVyIHRvIGRldGVybWluZSBsb3dlc3QKKyAgICAgICAgICAgIGNvbW1vbiBhbmNlc3Rvciwg
dGhlIGJvdW5kYXJpZXMgYXJvdW5kIGl0LCBhbmQgY29tcHV0ZSBhZGp1c3RtZW50cworICAgICAg
ICAgICAgdG8gcmVsYXRlZFRhcmdldCBhbmQgZXZlbnQgdGFyZ2V0IGFuY2VzdG9yIGNoYWluLgor
ICAgICAgICAoV2ViQ29yZTo6YW5jZXN0b3JzQ3Jvc3NTaGFkb3dCb3VuZGFyaWVzKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQp
OiBDaGFuZ2VkIHRvIGNhbGN1bGF0ZQorICAgICAgICAgICAgaW5uZXIvb3V0ZXIgc2hhZG93IERP
TSBib3VuZGFyaWVzIGFuZCBhZGp1c3QgYW5jZXN0b3JzIGNoYWluIGFjY29yZGluZ2x5LgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOiBBZGRlZCBm
bGFnIGluaXRpYWxpemVyCisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmVuc3Vy
ZUV2ZW50QW5jZXN0b3JzKTogUmVuYW1lZCBmcm9tIGdldEV2ZW50QW5jZXN0b3JzLAorICAgICAg
ICAgICAgY29udmVydGVkIHRvIHVzZSBpbml0aWFsaXphdGlvbiBmbGFnLCByYXRoZXIgdGhhbiB0
ZXN0aW5nIGZvciBlbXB0eS4KKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmg6IEFkanVz
dGVkIGRlY2xzLgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTogQ2hhbmdlZCB0
byBzZW5kIGV2ZW50CisgICAgICAgICAgICB0byBhZGp1c3RSZWxhdGVkVGFyZ2V0LgorCisgICAg
ICAgIExheW91dFRlc3RzOgorCisgICAgICAgICogZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5
LWNyb3NzaW5nLWV4cGVjdGVkLnR4dDogVXBkYXRlZCBleHBlY3RhdGlvbnMuCisgICAgICAgICog
ZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLmh0bWw6IEFkZGVkIG5ldyB0ZXN0
IGZvciBtb3VzZW92ZXIvbW91c2VvdXQgaGFuZGxpbmcuCisKIDIwMTEtMDQtMDggIE1pc2hhIFR5
dXR5dW5payAgPG1pY2hhZWwudHl1dHl1bmlrQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBMYXN6bG8gR29tYm9zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApp
bmRleCBhOTYxMWU3ZTkxMGFiMzg4OWY1YWM1NDczZTBlZTVlN2E0NmYwNDZjLi40ZjkyMGI4NmFl
ZjI2MWUwNjJiZmNiYTBkNzc5MTQ1ZGY1MjVjMTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRE
aXNwYXRjaGVyLmNwcApAQCAtMTIyLDQyICsxMjIsMTM0IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IHVu
ZGVyCiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsK
IH0KIAorc3RydWN0IEJvdW5kYXJ5QWRqdXN0bWVudHMgeworICAgIHNpemVfdCBhbmNlc3RvclNp
emU7CisgICAgTm9kZSogcmVsYXRlZFRhcmdldDsKK307CisKK3N0YXRpYyBCb3VuZGFyeUFkanVz
dG1lbnRzIGFkanVzdFRvU2hhZG93Qm91bmRhcmllcyhOb2RlKiB0YXJnZXQsIGNvbnN0IFZlY3Rv
cjxFdmVudENvbnRleHQ+JiB0YXJnZXRBbmNlc3RvcnMsIGNvbnN0IFZlY3RvcjxOb2RlKj4gcmVs
YXRlZFRhcmdldEFuY2VzdG9ycykKK3sKKyAgICBWZWN0b3I8RXZlbnRDb250ZXh0Pjo6Y29uc3Rf
aXRlcmF0b3IgbG93ZXN0Q29tbW9uQm91bmRhcnkgPSB0YXJnZXRBbmNlc3RvcnMuZW5kKCk7Cisg
ICAgLy8gQXNzdW1lIGRpdmVyZ2VudCBib3VuZGFyeSBpcyB0aGUgcmVsYXRlZFRhcmdldCBpdHNl
bGYgKGluIG90aGVyIHdvcmRzLCB0aGVyZSBhcmUgbm8gc2hhZG93IERPTSBib3VuZGFyaWVzKS4K
KyAgICBWZWN0b3I8Tm9kZSo+Ojpjb25zdF9pdGVyYXRvciBmaXJzdERpdmVyZ2VudEJvdW5kYXJ5
ID0gcmVsYXRlZFRhcmdldEFuY2VzdG9ycy5iZWdpbigpOworCisgICAgVmVjdG9yPEV2ZW50Q29u
dGV4dD46OmNvbnN0X2l0ZXJhdG9yIHRhcmdldEFuY2VzdG9yID0gdGFyZ2V0QW5jZXN0b3JzLmVu
ZCgpOworICAgIC8vIFdhbGsgZG93biBmcm9tIHRoZSB0b3AsIGxvb2tpbmcgZm9yIGxvd2VzdCBj
b21tb24gYW5jZXN0b3IsIGFsc28gbW9uaXRvcmluZyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMuCisg
ICAgYm9vbCBkaXZlcmdlZCA9IGZhbHNlOworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6Y29uc3Rf
aXRlcmF0b3IgaSA9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuZW5kKCkgLSAxOyBpID49IHJlbGF0
ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsgLS1pKSB7CisgICAgICAgIGlmIChkaXZlcmdlZCkg
eworICAgICAgICAgICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICAg
ICAgZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA9IGkgKyAxOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodGFyZ2V0QW5jZXN0b3IgPT0gdGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkpIHsKKyAg
ICAgICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgdGFyZ2V0QW5jZXN0b3ItLTsKKworICAgICAgICBpZiAoKCppKS0+aXNT
aGFkb3dSb290KCkpCisgICAgICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEFu
Y2VzdG9yOworCisgICAgICAgIGlmICgoKmkpICE9ICgqdGFyZ2V0QW5jZXN0b3IpLm5vZGUoKSkg
eworICAgICAgICAgICAgdGFyZ2V0QW5jZXN0b3IgPSB0YXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsK
KyAgICAgICAgICAgIGRpdmVyZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFkaXZlcmdlZCkgeworICAgICAgICAvLyBUaGUgcmVs
YXRlZFRhcmdldCBpcyBhIHBhcmVudCBvciBzaGFkb3dIb3N0IG9mIHRoZSB0YXJnZXQuCisgICAg
ICAgIGlmICh0YXJnZXQtPmlzU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgbG93ZXN0Q29tbW9u
Qm91bmRhcnkgPSB0YXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBTaW5jZSBhbmNlc3RvcnMgZG9lcyBub3QgY29udGFpbiB0YXJnZXQgaXRzZWxmLCB3ZSBt
dXN0IGFjY291bnQKKyAgICAgICAgLy8gZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRhcmdldCBp
cyBhIHNoYWRvd0hvc3Qgb2YgcmVsYXRlZFRhcmdldAorICAgICAgICAvLyBhbmQgdGh1cyBzZXJ2
ZXMgYXMgdGhlIGxvd2VzdENvbW1vbkJvdW5kYXJ5LgorICAgICAgICAvLyBMdWNraWx5LCBpbiB0
aGlzIGNhc2UgdGhlIGZpcnN0RGl2ZXJnZW50Qm91bmRhcnkgaXMgdGFyZ2V0LgorICAgICAgICBp
ZiAoKCpmaXJzdERpdmVyZ2VudEJvdW5kYXJ5KSA9PSB0YXJnZXQpCisgICAgICAgICAgICBsb3dl
c3RDb21tb25Cb3VuZGFyeSA9IHRhcmdldEFuY2VzdG9ycy5iZWdpbigpOworICAgIH0KKworICAg
IEJvdW5kYXJ5QWRqdXN0bWVudHMgcmVzdWx0OworICAgIC8vIFRyaW0gYW5jZXN0b3JzIHRvIGxv
d2VzdENvbW1vbkJvdW5kYXJ5IHRvIGtlZXAgZXZlbnRzIGluc2lkZSBvZiB0aGUgY29tbW9uIHNo
YWRvdyBET00gc3VidHJlZS4KKyAgICByZXN1bHQuYW5jZXN0b3JTaXplID0gbG93ZXN0Q29tbW9u
Qm91bmRhcnkgPT0gdGFyZ2V0QW5jZXN0b3JzLmVuZCgpID8gdGFyZ2V0QW5jZXN0b3JzLnNpemUo
KSA6IGxvd2VzdENvbW1vbkJvdW5kYXJ5IC0gdGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCk7CisgICAg
Ly8gU2V0IGV2ZW50J3MgcmVsYXRlZCB0YXJnZXQgdG8gdGhlIGZpcnN0IGVuY291bnRlcmVkIHNo
YWRvdyBET00gYm91bmRhcnkgaW4gdGhlIGRpdmVyZ2VudCBzdWJ0cmVlLgorICAgIHJlc3VsdC5y
ZWxhdGVkVGFyZ2V0ID0gZmlyc3REaXZlcmdlbnRCb3VuZGFyeSAhPSByZWxhdGVkVGFyZ2V0QW5j
ZXN0b3JzLmJlZ2luKCkgPyAqZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA6IDA7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworaW5saW5lIHN0YXRpYyBib29sIGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91
bmRhcmllcyhjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQoreworICAgIHJl
dHVybiBhbmNlc3RvcnMuaXNFbXB0eSgpIHx8IGFuY2VzdG9ycy5maXJzdCgpLm5vZGUoKSA9PSBh
bmNlc3RvcnMubGFzdCgpLm5vZGUoKTsKK30KKwogLy8gRklYTUU6IE9uY2UgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTYzIGxhbmRzLCB0aGlzIHNob3VsZAogLy8g
YmUgZ3JlYXRseSBpbXByb3ZlZC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDAyNS4KLVBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IEV2ZW50RGlzcGF0Y2hlcjo6
YWRqdXN0UmVsYXRlZFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0
KQorUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gRXZlbnREaXNwYXRjaGVyOjphZGp1c3RSZWxhdGVk
VGFyZ2V0KEV2ZW50KiBldmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdl
dEFyZykKIHsKKyAgICBpZiAoIXJlbGF0ZWRUYXJnZXRBcmcpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0QXJnLT50b05v
ZGUoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
Tm9kZSogbm9kZSA9IHJlbGF0ZWRUYXJnZXQtPnRvTm9kZSgpOwotICAgIGlmICghbm9kZSkKKyAg
ICBOb2RlKiB0YXJnZXQgPSBtX25vZGUuZ2V0KCk7CisgICAgaWYgKCF0YXJnZXQpCiAgICAgICAg
IHJldHVybiByZWxhdGVkVGFyZ2V0OwogCi0gICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRh
cnkgPSBub2RlOwotICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG47IG4gPSBuLT5wYXJlbnRPckhv
c3ROb2RlKCkpIHsKKyAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7CisKKyAgICAvLyBD
YWxjdWxhdGUgZWFybHkgaWYgdGhlIGNvbW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3NpYmxlIGJ5
IGxvb2tpbmcgYXQKKyAgICAvLyBhbmNlc3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFyZ2V0aW5n
IGhhcyBvY2N1cmVkIChpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9NIGJvdW5k
YXJpZXMpLgorICAgIC8vIElmIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVkLCB0aGUg
dGFyZ2V0IGFuZCByZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5kYXJ5Lgor
ICAgIGJvb2wgbm9Db21tb25Cb3VuZGFyeSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91bmRhcmll
cyhtX2FuY2VzdG9ycyk7CisKKyAgICBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNlc3Rv
cnM7CisgICAgTm9kZSogb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSByZWxhdGVkVGFyZ2V0Lmdl
dCgpOworICAgIGZvciAoTm9kZSogbiA9IG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5OyBuOyBuID0g
bi0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkK
ICAgICAgICAgICAgIG91dGVybW9zdFNoYWRvd0JvdW5kYXJ5ID0gbi0+cGFyZW50T3JIb3N0Tm9k
ZSgpOworICAgICAgICBpZiAoIW5vQ29tbW9uQm91bmRhcnkpCisgICAgICAgICAgICByZWxhdGVk
VGFyZ2V0QW5jZXN0b3JzLmFwcGVuZChuKTsKICAgICB9Ci0gICAgcmV0dXJuIG91dGVybW9zdFNo
YWRvd0JvdW5kYXJ5OworCisgICAgLy8gU2hvcnQtY2lyY3VpdCB0aGUgZmFzdCBjYXNlIHdoZW4g
d2Uga25vdyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBhIGNvbW1vbiBib3VuZGFyeS4K
KyAgICBpZiAobm9Db21tb25Cb3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIG91dGVybW9zdFNoYWRv
d0JvdW5kYXJ5OworCisgICAgQm91bmRhcnlBZGp1c3RtZW50cyBhZGp1c3RtZW50cyA9IGFkanVz
dFRvU2hhZG93Qm91bmRhcmllcyh0YXJnZXQsIG1fYW5jZXN0b3JzLCByZWxhdGVkVGFyZ2V0QW5j
ZXN0b3JzKTsKKyAgICBtX2FuY2VzdG9ycy5zaHJpbmsoYWRqdXN0bWVudHMuYW5jZXN0b3JTaXpl
KTsKKyAgICByZXR1cm4gYWRqdXN0bWVudHMucmVsYXRlZFRhcmdldCA/IGFkanVzdG1lbnRzLnJl
bGF0ZWRUYXJnZXQgOiByZWxhdGVkVGFyZ2V0OwogfQogCiBFdmVudERpc3BhdGNoZXI6OkV2ZW50
RGlzcGF0Y2hlcihOb2RlKiBub2RlKQogICAgIDogbV9ub2RlKG5vZGUpCisgICAgLCBtX2FuY2Vz
dG9yc0luaXRpYWxpemVkKGZhbHNlKQogewogICAgIEFTU0VSVChub2RlKTsKICAgICBtX3ZpZXcg
PSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjpn
ZXRFdmVudEFuY2VzdG9ycyhFdmVudFRhcmdldCogb3JpZ2luYWxUYXJnZXQsIEV2ZW50RGlzcGF0
Y2hCZWhhdmlvciBiZWhhdmlvcikKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudEFu
Y2VzdG9ycyhFdmVudCogZXZlbnQpCiB7CisgICAgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGJlaGF2
aW9yID0gZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCk7CisKICAgICBpZiAoIW1fbm9k
ZS0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYW5jZXN0b3JzSW5p
dGlhbGl6ZWQoKSkKKyAgICBpZiAobV9hbmNlc3RvcnNJbml0aWFsaXplZCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IG9yaWdpbmFsVGFyZ2V0OworICAgIG1f
YW5jZXN0b3JzSW5pdGlhbGl6ZWQgPSB0cnVlOworCiAgICAgTm9kZSogYW5jZXN0b3IgPSBtX25v
ZGUuZ2V0KCk7CisgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGlu
Z1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKTsKICAgICBib29sIHNob3VsZFNraXBOZXh0QW5jZXN0
b3IgPSBmYWxzZTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoYW5jZXN0b3ItPmlz
U2hhZG93Um9vdCgpKSB7CkBAIC0xOTIsNyArMjg0LDcgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgQVNTRVJUKCFldmVu
dC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNhbiBjcmVhdGUgYW4gZXZl
bnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwuCiAKICAgICBSZWZQdHI8RXZlbnRU
YXJnZXQ+IG9yaWdpbmFsVGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpOwotICAgIGdldEV2ZW50QW5j
ZXN0b3JzKG9yaWdpbmFsVGFyZ2V0LmdldCgpLCBkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKGV2
ZW50LmdldCgpKSk7CisgICAgZW5zdXJlRXZlbnRBbmNlc3RvcnMoZXZlbnQuZ2V0KCkpOwogCiAg
ICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0NvbnRleHQoZXZlbnQuZ2V0KCksIG1fbm9kZS5n
ZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOwogCkBAIC0yNzYsMTcgKzM2OCwxMSBAQCBkb25lV2l0
aERlZmF1bHQ6CiAgICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCi0K
IGNvbnN0IEV2ZW50Q29udGV4dCogRXZlbnREaXNwYXRjaGVyOjp0b3BFdmVudENvbnRleHQoKQog
ewogICAgIHJldHVybiBtX2FuY2VzdG9ycy5pc0VtcHR5KCkgPyAwIDogJm1fYW5jZXN0b3JzLmxh
c3QoKTsKIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmFuY2VzdG9yc0luaXRpYWxpemVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9hbmNlc3RvcnMuc2l6ZSgpOwotfQotCiBFdmVudERpc3Bh
dGNoQmVoYXZpb3IgRXZlbnREaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2
ZW50KiBldmVudCkKIHsKICAgICAvLyBQZXIgWEJMIDIuMCBzcGVjLCBtdXRhdGlvbiBldmVudHMg
c2hvdWxkIG5ldmVyIGNyb3NzIHNoYWRvdyBET00gYm91bmRhcnk6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnREaXNwYXRjaGVyLmgKaW5kZXggMmRiYjk4NTQ2Y2M1ZDA5YWI2OTE1YTBmZDY3OTEzNWMyMDAw
NTQwYS4uMjI1ZWU3NWMyYmQ1MTFmOWQxZTQyOTA2NmRhMGZkOGRjYjY2NzU3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtNTQsMjEgKzU0LDIxIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5vZGUqLCBQYXNzUmVmUHRyPEV2
ZW50PiB1bmRlcmx5aW5nRXZlbnQsIGJvb2wgc2VuZE1vdXNlRXZlbnRzLCBib29sIHNob3dQcmVz
c2VkTG9vayk7CiAKICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwot
ICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0
cjxFdmVudFRhcmdldD4pOworICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGFkanVzdFJlbGF0
ZWRUYXJnZXQoRXZlbnQqLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CiAgICAgTm9kZSogbm9k
ZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEV2ZW50RGlzcGF0Y2hlcihOb2RlKik7CiAKICAg
ICBFdmVudERpc3BhdGNoQmVoYXZpb3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihFdmVudCop
OwotICAgIHZvaWQgZ2V0RXZlbnRBbmNlc3RvcnMoRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0
LCBFdmVudERpc3BhdGNoQmVoYXZpb3IpOworICAgIHZvaWQgZW5zdXJlRXZlbnRBbmNlc3RvcnMo
RXZlbnQqKTsKICAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29udGV4dCgpOwotICAg
IGJvb2wgYW5jZXN0b3JzSW5pdGlhbGl6ZWQoKSBjb25zdDsKIAogICAgIFZlY3RvcjxFdmVudENv
bnRleHQ+IG1fYW5jZXN0b3JzOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRy
PEV2ZW50VGFyZ2V0PiBtX29yaWdpbmFsVGFyZ2V0OwogICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1f
dmlldzsKKyAgICBib29sIG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQ7CiB9OwogCiBpbmxpbmUgTm9k
ZSogRXZlbnREaXNwYXRjaGVyOjpub2RlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNw
cAppbmRleCA2ZTQ4ZDQwOTJiMzk4ODI3OTE4NGE2ZTJkOGYxNzcwYmViNmI3YzA1Li4xMzRlNWY2
NjZmZTdkZmMxOWYxNTZiYzM0Yzg0ZDk0M2I0NTczNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZl
bnQuY3BwCkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRv
cjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnMKICAgICBp
ZiAoZXZlbnQoKS0+dHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBT
aG91bGRuJ3QgaGFwcGVuLgogCi0gICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0
ID0gZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLT5yZWxhdGVkVGFyZ2V0
KCkpOworICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCA9IGRpc3BhdGNoZXIt
PmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZlbnQoKS0+cmVsYXRlZFRhcmdldCgpKTsK
ICAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJnZXQpOwogCiAgICAgZGlz
cGF0Y2hlci0+ZGlzcGF0Y2hFdmVudChldmVudCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88935</attachid>
            <date>2011-04-09 16:30:56 -0700</date>
            <delta_ts>2011-04-09 19:26:33 -0700</delta_ts>
            <desc>More feedback addressed.</desc>
            <filename>bug-55515-20110409163055.patch</filename>
            <type>text/plain</type>
            <size>15333</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzNzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2MGY1NjFhMmI4N2RmZWUxNWZlMWNm
MDVjZmQwYzNjNWRmOTkwZmM3Li41OWMxMjdjNjA0MjZmZTRhMTFiNjQwNWUyM2JhY2YwMmI1MjM2
ZmJmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMDIgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcHJvcGVyIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9t
b3VzZW91dCBldmVudHMgaW4gcmVnYXJkIHRvIHNoYWRvdyBET00gYm91bmRhcmllcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NTE1CisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0OiBV
cGRhdGVkIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRh
cnktY3Jvc3NpbmcuaHRtbDogQWRkZWQgbmV3IHRlc3QgZm9yIG1vdXNlb3Zlci9tb3VzZW91dCBo
YW5kbGluZy4KKwogMjAxMS0wNC0wOCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjgzMzQ4LgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy1leHBl
Y3RlZC50eHQKaW5kZXggODg4OTE4OTgzYzk4ZjcxODczNTJiNzJiMGE3NmNmM2E0MGE3ZmVjZi4u
YmEyN2FlYjg0MDY5M2ViMWI1ZjI3M2JiYTM4YmJkNTgwZmYxNTg3ZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3Npbmct
ZXhwZWN0ZWQudHh0CkBAIC00LDYgKzQsNyBAQCBTZWUgYnVnIDQ2MDE1IGZvciBkZXRhaWxzLgog
CiBNdXRhdGlvbiBldmVudHMgc2hvdWxkIG5vdCBwcm9wYWdhdGUgb3V0IG9mIHRoZSBzaGFkb3cg
RE9NOiBQQVNTCiBUaGUgc2VsZWN0c3RhcnQgZXZlbnQgc2hvdWxkIG5vdCBwcm9wYWdhdGUgb3V0
IG9mIHRoZSBzaGFkb3cgRE9NOiBQQVNTCitUaGUgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50IGJl
dHdlZW4gdHdvIGVsZW1lbnRzIGluc2lkZSB0aGUgc2FtZSBzaGFkb3cgc3VidHJlZSBzaG91bGQg
bm90IHByb3BhZ2F0ZSBvdXQgb2YgdGhlIHNoYWRvdyBET006IFBBU1MKIExhYmVsIHNob3VsZCBs
b29rIGJleW9uZCBzaGFkb3cgYm91bmRhcnkgdG8gZGV0ZWN0IGlmIGl0IGVuY2xvc2VzIGl0cyBh
c3NvY2lhdGVkIGVsZW1lbnQ6IFBBU1MKIEV2ZW50cyBmb3IgZGVmYXVsdCBldmVudCBoYW5kbGVy
IHNob3VsZCBub3QgYmUgcmV0YXJnZXRlZDogUEFTUwogRXZlbnQncyByZWxhdGVkVGFyZ2V0IHNo
b3VsZCBiZSByZXRhcmdldGVkOiBQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmcuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sCmluZGV4IDU4NGYxYTUxNjEyODdiMTgz
MGE3OTIyZTJjZjQ1ZGFlMGE2ZjI0MzguLmE2OTBkOWFmNDIxMGMzZWEzZDA5YjRlMTgwZjg5YTEx
ZDg1M2NhNjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1ib3Vu
ZGFyeS1jcm9zc2luZy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1i
b3VuZGFyeS1jcm9zc2luZy5odG1sCkBAIC0xOSw2ICsxOSwyNiBAQCBmdW5jdGlvbiBtb3ZlT3Zl
cihlbGVtZW50KQogICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOwogfQogCitmdW5j
dGlvbiBtb3ZlT3ZlckxlZnRRdWFydGVyT2YoZWxlbWVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5l
dmVudFNlbmRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIHggPSBlbGVtZW50Lm9mZnNl
dExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gNDsKKyAgICB2YXIgeSA9IGVsZW1lbnQub2Zm
c2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVyLm1vdXNl
TW92ZVRvKHgsIHkpOworfQorCitmdW5jdGlvbiBtb3ZlT3ZlclJpZ2h0UXVhcnRlck9mKGVsZW1l
bnQpCit7CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHZhciB4ID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZzZXRXaWR0aCAqIDMg
LyA0OworICAgIHZhciB5ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdo
dCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Cit9CisKIGZ1bmN0aW9u
IGNsaWNrT24oZWxlbWVudCkKIHsKICAgICBtb3ZlT3ZlcihlbGVtZW50KTsKQEAgLTMxLDkgKzUx
LDcgQEAgZnVuY3Rpb24gY2xpY2tPbkxlZnRRdWFydGVyT2YoZWxlbWVudCkKICAgICBpZiAoIXdp
bmRvdy5ldmVudFNlbmRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgdmFyIHggPSBlbGVtZW50
Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gNDsKLSAgICB2YXIgeSA9IGVsZW1l
bnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKHgsIHkpOworICAgIG1vdmVPdmVyTGVmdFF1YXJ0ZXJPZihlbGVtZW50KTsK
ICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7
CiB9CkBAIC03NCw2ICs5MiwyOCBAQCB2YXIgdGVzdHMgPSB7CiAgICAgICAgIHRleHRJbnB1dC5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRJbnB1dCk7CiAgICAgICAgIGRvY3VtZW50LnNlbGVj
dHN0YXJ0ID0gbnVsbDsKICAgICB9LAorICAgIG1vdXNlT3ZlckFuZE91dFByb3BhZ2F0aW9uOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgY291bnQgPSAwOworICAgICAgICB2YXIgZmls
ZUlucHV0ID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdpbnB1dCcpKTsKKyAgICAgICAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdmaWxl
Jyk7CisgICAgICAgIHZhciBjb3VudEV2ZW50RGlzcGF0Y2ggPSBmdW5jdGlvbigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgbW92ZU92ZXJMZWZ0
UXVhcnRlck9mKGZpbGVJbnB1dCk7CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExp
c3RlbmVyKCdtb3VzZW92ZXInLCBjb3VudEV2ZW50RGlzcGF0Y2gsIGZhbHNlKTsKKyAgICAgICAg
ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGNvdW50RXZlbnREaXNw
YXRjaCwgZmFsc2UpOworCisgICAgICAgIG1vdmVPdmVyUmlnaHRRdWFydGVyT2YoZmlsZUlucHV0
KTsKKworICAgICAgICBsb2coIlRoZSBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnQgYmV0d2VlbiB0
d28gZWxlbWVudHMgaW5zaWRlIHRoZSBzYW1lIHNoYWRvdyBzdWJ0cmVlIHNob3VsZCBub3QgcHJv
cGFnYXRlIG91dCBvZiB0aGUgc2hhZG93IERPTSIsIGNvdW50ID09IDApOworCisgICAgICAgIGRv
Y3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgY291bnRFdmVudERp
c3BhdGNoLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5l
cignbW91c2VvdXQnLCBjb3VudEV2ZW50RGlzcGF0Y2gsIGZhbHNlKTsKKyAgICAgICAgZmlsZUlu
cHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKKyAgICB9LAogICAgIGxhYmVs
U3ludGhldGljQ2xpY2s6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBjb3VudCA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNmU2OWY3OTYyYzhkODMwNWE0Zjg5ZTUxOGQwN2MyZTJjMjgwODM5YS4u
NWVkMzhjNzYwZWZmMWRjNDg0ZWUwMjFhNTYwODBmNWI2ZTExNjEwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQyIEBACisyMDExLTA0LTA4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50IHByb3BlciBoYW5kbGluZyBvZiBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnRz
IGluIHJlZ2FyZCB0byBzaGFkb3cgRE9NIGJvdW5kYXJpZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTUxNQorCisgICAgICAgIFRoaXMgaW1wbGVt
ZW50cyBYQkwgMi4wJ3Mgc3BlY2lmaWVkIGhhbmRsaW5nIG9mIG1vdXNlb3Zlci9tb3VzZW91dCBl
dmVudHM6CisgICAgICAgIGh0dHA6Ly9kZXYudzMub3JnLzIwMDYveGJsMi9PdmVydmlldy5odG1s
I3RoZS1tb3VzZW92ZXItYW5kLW1vdXNlb3V0LWV2ZW50cworCisgICAgICAgIFRvIGRvIHRoaXMs
IHdlOgorICAgICAgICAxKSBjYWxjdWxhdGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBiZXR3ZWVu
IHJlbGF0ZWRUYXJnZXQgYW5kIHRhcmdldCwgYW5kCisgICAgICAgICAgIHRoZSBuZWFyZXN0IGJv
dW5kYXJpZXMgYXJvdW5kIHRoZW06IHRoZSBvdXRlciAoY29tbW9uKSBib3VuZGFyeSwgYW5kIHRo
ZQorICAgICAgICAgICBpbm5lciAoc3BlY2lmaWMgdG8gcmVsYXRlZFRhcmdldCkgYm91bmRhcnku
IFRoZW4sIHdlCisgICAgICAgIDIpIGVuc3VyZSB0aGF0IGV2ZW50cyBvbmx5IHByb3BhZ2F0ZSB1
cCB0byB0aGUgY29tbW9uIGJvdW5kYXJ5IChvcgorICAgICAgICAgICBhbGwgdGhlIHdheSBpZiBi
b3VuZGFyeSBpcyBub3QgZm91bmQpLCB3aGlsZQorICAgICAgICAzKSB1cGRhdGluZyByZWxhdGVk
VGFyZ2V0IGJlIHRoZSBpbm5lciBib3VuZGFyeS4KKworICAgICAgICBXZSBhbHNvIGRldGVjdCB0
aGUgbW9zdCBjb21tb24gY2FzZSB3aGVuIG5vIGNvbW1vbiBib3VuZGFyeSBjb3VsZCBleGlzdAor
ICAgICAgICBhbmQgcHJvdmlkZSBhIGZhc3QgcGF0aCB0byBzaG9ydC1jaXJjdWl0IG1vc3Qgb2Yg
dGhlIGJvdW5kYXJ5IGRldGVjdGlvbgorICAgICAgICBsb2dpYy4KKworICAgICAgICBUZXN0OiBm
YXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmcuaHRtbAorCisgICAgICAgICogZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6
OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyk6IEFkZGVkIGEgaGVscGVyIHRvIGRldGVybWluZSBs
b3dlc3QKKyAgICAgICAgICAgIGNvbW1vbiBhbmNlc3RvciwgdGhlIGJvdW5kYXJpZXMgYXJvdW5k
IGl0LCBhbmQgY29tcHV0ZSBhZGp1c3RtZW50cworICAgICAgICAgICAgdG8gcmVsYXRlZFRhcmdl
dCBhbmQgZXZlbnQgdGFyZ2V0IGFuY2VzdG9yIGNoYWluLgorICAgICAgICAoV2ViQ29yZTo6YW5j
ZXN0b3JzQ3Jvc3NTaGFkb3dCb3VuZGFyaWVzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
dmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQpOiBDaGFuZ2VkIHRvIGNhbGN1bGF0
ZQorICAgICAgICAgICAgaW5uZXIvb3V0ZXIgc2hhZG93IERPTSBib3VuZGFyaWVzIGFuZCBhZGp1
c3QgYW5jZXN0b3JzIGNoYWluIGFjY29yZGluZ2x5LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRE
aXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOiBBZGRlZCBmbGFnIGluaXRpYWxpemVyCisgICAg
ICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmVuc3VyZUV2ZW50QW5jZXN0b3JzKTogUmVu
YW1lZCBmcm9tIGdldEV2ZW50QW5jZXN0b3JzLAorICAgICAgICAgICAgY29udmVydGVkIHRvIHVz
ZSBpbml0aWFsaXphdGlvbiBmbGFnLCByYXRoZXIgdGhhbiB0ZXN0aW5nIGZvciBlbXB0eS4KKyAg
ICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVyLmg6IEFkanVzdGVkIGRlY2xzLgorICAgICAgICAq
IGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnREaXNwYXRj
aE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTogQ2hhbmdlZCB0byBzZW5kIGV2ZW50CisgICAgICAg
ICAgICB0byBhZGp1c3RSZWxhdGVkVGFyZ2V0LgorCiAyMDExLTA0LTA5ICBKb24gTGVlICA8am9u
bGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBhOTYxMWU3ZTkxMGFiMzg4OWY1YWM1
NDczZTBlZTVlN2E0NmYwNDZjLi5iZTljYjdkZTE3ODU2YmRhMDVlNDVmNTIwMGIxYjAxZTVhODc4
NjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMTIyLDQyICsx
MjIsMTI1IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKE5v
ZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVyCiAgICAgZ05vZGVzRGlzcGF0Y2hpbmdT
aW11bGF0ZWRDbGlja3MtPnJlbW92ZShub2RlKTsKIH0KIAorUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gRXZlbnREaXNwYXRjaGVyOjphZGp1c3RUb1NoYWRvd0JvdW5kYXJpZXMoUGFzc1JlZlB0cjxO
b2RlPiByZWxhdGVkVGFyZ2V0LCBjb25zdCBWZWN0b3I8Tm9kZSo+IHJlbGF0ZWRUYXJnZXRBbmNl
c3RvcnMpCit7CisgICAgVmVjdG9yPEV2ZW50Q29udGV4dD46OmNvbnN0X2l0ZXJhdG9yIGxvd2Vz
dENvbW1vbkJvdW5kYXJ5ID0gbV9hbmNlc3RvcnMuZW5kKCk7CisgICAgLy8gQXNzdW1lIGRpdmVy
Z2VudCBib3VuZGFyeSBpcyB0aGUgcmVsYXRlZFRhcmdldCBpdHNlbGYgKGluIG90aGVyIHdvcmRz
LCByZWxhdGVkIHRhcmdldCBhbmNlc3RvciBjaGFpbmcgZG9lcyBub3QgY3Jvc3MgYW55IHNoYWRv
dyBET00gYm91bmRhcmllcykuCisgICAgVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgZmly
c3REaXZlcmdlbnRCb3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsKKwor
ICAgIFZlY3RvcjxFdmVudENvbnRleHQ+Ojpjb25zdF9pdGVyYXRvciB0YXJnZXRBbmNlc3RvciA9
IG1fYW5jZXN0b3JzLmVuZCgpOworICAgIC8vIFdhbGsgZG93biBmcm9tIHRoZSB0b3AsIGxvb2tp
bmcgZm9yIGxvd2VzdCBjb21tb24gYW5jZXN0b3IsIGFsc28gbW9uaXRvcmluZyBzaGFkb3cgRE9N
IGJvdW5kYXJpZXMuCisgICAgYm9vbCBkaXZlcmdlZCA9IGZhbHNlOworICAgIGZvciAoVmVjdG9y
PE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaSA9IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuZW5kKCkg
LSAxOyBpID49IHJlbGF0ZWRUYXJnZXRBbmNlc3RvcnMuYmVnaW4oKTsgLS1pKSB7CisgICAgICAg
IGlmIChkaXZlcmdlZCkgeworICAgICAgICAgICAgaWYgKCgqaSktPmlzU2hhZG93Um9vdCgpKSB7
CisgICAgICAgICAgICAgICAgZmlyc3REaXZlcmdlbnRCb3VuZGFyeSA9IGkgKyAxOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodGFyZ2V0QW5jZXN0b3IgPT0gbV9hbmNlc3RvcnMuYmVn
aW4oKSkgeworICAgICAgICAgICAgZGl2ZXJnZWQgPSB0cnVlOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICB0YXJnZXRBbmNlc3Rvci0tOworCisgICAgICAgIGlm
ICgoKmkpLT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIGxvd2VzdENvbW1vbkJvdW5kYXJ5
ID0gdGFyZ2V0QW5jZXN0b3I7CisKKyAgICAgICAgaWYgKCgqaSkgIT0gKCp0YXJnZXRBbmNlc3Rv
cikubm9kZSgpKSB7CisgICAgICAgICAgICB0YXJnZXRBbmNlc3RvciA9IG1fYW5jZXN0b3JzLmJl
Z2luKCk7CisgICAgICAgICAgICBkaXZlcmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIWRpdmVyZ2VkKSB7CisgICAgICAgIC8vIFRoZSByZWxhdGVkVGFyZ2V0IGlzIGEg
cGFyZW50IG9yIHNoYWRvd0hvc3Qgb2YgdGhlIHRhcmdldC4KKyAgICAgICAgaWYgKG1fbm9kZS0+
aXNTaGFkb3dSb290KCkpCisgICAgICAgICAgICBsb3dlc3RDb21tb25Cb3VuZGFyeSA9IG1fYW5j
ZXN0b3JzLmJlZ2luKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2luY2UgYW5jZXN0b3Jz
IGRvZXMgbm90IGNvbnRhaW4gdGFyZ2V0IGl0c2VsZiwgd2UgbXVzdCBhY2NvdW50CisgICAgICAg
IC8vIGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCB0YXJnZXQgaXMgYSBzaGFkb3dIb3N0IG9mIHJl
bGF0ZWRUYXJnZXQKKyAgICAgICAgLy8gYW5kIHRodXMgc2VydmVzIGFzIHRoZSBsb3dlc3RDb21t
b25Cb3VuZGFyeS4KKyAgICAgICAgLy8gTHVja2lseSwgaW4gdGhpcyBjYXNlIHRoZSBmaXJzdERp
dmVyZ2VudEJvdW5kYXJ5IGlzIHRhcmdldC4KKyAgICAgICAgaWYgKCgqZmlyc3REaXZlcmdlbnRC
b3VuZGFyeSkgPT0gbV9ub2RlLmdldCgpKQorICAgICAgICAgICAgbG93ZXN0Q29tbW9uQm91bmRh
cnkgPSBtX2FuY2VzdG9ycy5iZWdpbigpOworICAgIH0KKworICAgIC8vIFRyaW0gYW5jZXN0b3Jz
IHRvIGxvd2VzdENvbW1vbkJvdW5kYXJ5IHRvIGtlZXAgZXZlbnRzIGluc2lkZSBvZiB0aGUgY29t
bW9uIHNoYWRvdyBET00gc3VidHJlZS4KKyAgICBpZiAobG93ZXN0Q29tbW9uQm91bmRhcnkgIT0g
bV9hbmNlc3RvcnMuZW5kKCkpCisgICAgICAgIG1fYW5jZXN0b3JzLnNocmluayhsb3dlc3RDb21t
b25Cb3VuZGFyeSAtIG1fYW5jZXN0b3JzLmJlZ2luKCkpOworICAgIC8vIFNldCBldmVudCdzIHJl
bGF0ZWQgdGFyZ2V0IHRvIHRoZSBmaXJzdCBlbmNvdW50ZXJlZCBzaGFkb3cgRE9NIGJvdW5kYXJ5
IGluIHRoZSBkaXZlcmdlbnQgc3VidHJlZS4KKyAgICByZXR1cm4gZmlyc3REaXZlcmdlbnRCb3Vu
ZGFyeSAhPSByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzLmJlZ2luKCkgPyAqZmlyc3REaXZlcmdlbnRC
b3VuZGFyeSA6IHJlbGF0ZWRUYXJnZXQ7Cit9CisKK2lubGluZSBzdGF0aWMgYm9vbCBhbmNlc3Rv
cnNDcm9zc1NoYWRvd0JvdW5kYXJpZXMoY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4mIGFuY2Vz
dG9ycykKK3sKKyAgICByZXR1cm4gYW5jZXN0b3JzLmlzRW1wdHkoKSB8fCBhbmNlc3RvcnMuZmly
c3QoKS5ub2RlKCkgPT0gYW5jZXN0b3JzLmxhc3QoKS5ub2RlKCk7Cit9CisKIC8vIEZJWE1FOiBP
bmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk2MyBsYW5kcywg
dGhpcyBzaG91bGQKIC8vIGJlIGdyZWF0bHkgaW1wcm92ZWQuIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwMjUuCi1QYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBF
dmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gcmVsYXRlZFRhcmdldCkKK1Bhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IEV2ZW50RGlzcGF0Y2hl
cjo6YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJn
ZXQ+IHBycFJlbGF0ZWRUYXJnZXQpCiB7CisgICAgaWYgKCFwcnBSZWxhdGVkVGFyZ2V0KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcHJwUmVs
YXRlZFRhcmdldC0+dG9Ob2RlKCk7CiAgICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIE5vZGUqIG5vZGUgPSByZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKLSAg
ICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiByZWxhdGVkVGFyZ2V0OworICAgIE5vZGUqIHRh
cmdldCA9IG1fbm9kZS5nZXQoKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIHBy
cFJlbGF0ZWRUYXJnZXQ7CisKKyAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7CisKKyAg
ICAvLyBDYWxjdWxhdGUgZWFybHkgaWYgdGhlIGNvbW1vbiBib3VuZGFyeSBpcyBldmVuIHBvc3Np
YmxlIGJ5IGxvb2tpbmcgYXQKKyAgICAvLyBhbmNlc3RvcnMgc2l6ZSBhbmQgaWYgdGhlIHJldGFy
Z2V0aW5nIGhhcyBvY2N1cmVkIChpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBzaGFkb3cgRE9N
IGJvdW5kYXJpZXMpLgorICAgIC8vIElmIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzIGRldGVjdGVk
LCB0aGUgdGFyZ2V0IGFuZCByZWxhdGVkIHRhcmdldCBjYW4ndCBoYXZlIGEgY29tbW9uIGJvdW5k
YXJ5LgorICAgIGJvb2wgbm9Db21tb25Cb3VuZGFyeSA9IGFuY2VzdG9yc0Nyb3NzU2hhZG93Qm91
bmRhcmllcyhtX2FuY2VzdG9ycyk7CiAKLSAgICBOb2RlKiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFy
eSA9IG5vZGU7Ci0gICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbjsgbiA9IG4tPnBhcmVudE9ySG9z
dE5vZGUoKSkgeworICAgIFZlY3RvcjxOb2RlKj4gcmVsYXRlZFRhcmdldEFuY2VzdG9yczsKKyAg
ICBOb2RlKiBvdXRlcm1vc3RTaGFkb3dCb3VuZGFyeSA9IHJlbGF0ZWRUYXJnZXQuZ2V0KCk7Cisg
ICAgZm9yIChOb2RlKiBuID0gb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnk7IG47IG4gPSBuLT5wYXJl
bnRPckhvc3ROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmlzU2hhZG93Um9vdCgpKQogICAgICAg
ICAgICAgb3V0ZXJtb3N0U2hhZG93Qm91bmRhcnkgPSBuLT5wYXJlbnRPckhvc3ROb2RlKCk7Cisg
ICAgICAgIGlmICghbm9Db21tb25Cb3VuZGFyeSkKKyAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXRB
bmNlc3RvcnMuYXBwZW5kKG4pOwogICAgIH0KLSAgICByZXR1cm4gb3V0ZXJtb3N0U2hhZG93Qm91
bmRhcnk7CisKKyAgICAvLyBTaG9ydC1jaXJjdWl0IHRoZSBmYXN0IGNhc2Ugd2hlbiB3ZSBrbm93
IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRlIGEgY29tbW9uIGJvdW5kYXJ5LgorICAgIGlm
IChub0NvbW1vbkJvdW5kYXJ5KQorICAgICAgICByZXR1cm4gb3V0ZXJtb3N0U2hhZG93Qm91bmRh
cnk7CisKKyAgICByZXR1cm4gYWRqdXN0VG9TaGFkb3dCb3VuZGFyaWVzKHJlbGF0ZWRUYXJnZXQu
cmVsZWFzZSgpLCByZWxhdGVkVGFyZ2V0QW5jZXN0b3JzKTsKIH0KIAogRXZlbnREaXNwYXRjaGVy
OjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKICAgICA6IG1fbm9kZShub2RlKQorICAgICwg
bV9hbmNlc3RvcnNJbml0aWFsaXplZChmYWxzZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAg
bV92aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpOwogfQogCi12b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6Z2V0RXZlbnRBbmNlc3RvcnMoRXZlbnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0LCBFdmVu
dERpc3BhdGNoQmVoYXZpb3IgYmVoYXZpb3IpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJl
RXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogeworICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlv
ciBiZWhhdmlvciA9IGRldGVybWluZURpc3BhdGNoQmVoYXZpb3IoZXZlbnQpOworCiAgICAgaWYg
KCFtX25vZGUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGFuY2Vz
dG9yc0luaXRpYWxpemVkKCkpCisgICAgaWYgKG1fYW5jZXN0b3JzSW5pdGlhbGl6ZWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBvcmlnaW5hbFRhcmdldDsK
KyAgICBtX2FuY2VzdG9yc0luaXRpYWxpemVkID0gdHJ1ZTsKKwogICAgIE5vZGUqIGFuY2VzdG9y
ID0gbV9ub2RlLmdldCgpOworICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudFRhcmdldFJl
c3BlY3RpbmdTVkdUYXJnZXRSdWxlcyhhbmNlc3Rvcik7CiAgICAgYm9vbCBzaG91bGRTa2lwTmV4
dEFuY2VzdG9yID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKGFuY2Vz
dG9yLT5pc1NoYWRvd1Jvb3QoKSkgewpAQCAtMTkyLDcgKzI3NSw3IEBAIGJvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VS
VCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjYW4gY3JlYXRl
IGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgogCiAgICAgUmVmUHRy
PEV2ZW50VGFyZ2V0PiBvcmlnaW5hbFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsKLSAgICBnZXRF
dmVudEFuY2VzdG9ycyhvcmlnaW5hbFRhcmdldC5nZXQoKSwgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhh
dmlvcihldmVudC5nZXQoKSkpOworICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50LmdldCgp
KTsKIAogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5kb3dDb250ZXh0KGV2ZW50LmdldCgpLCBt
X25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKIApAQCAtMjc2LDE3ICszNTksMTEgQEAg
ZG9uZVdpdGhEZWZhdWx0OgogICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsK
IH0KIAotCiBjb25zdCBFdmVudENvbnRleHQqIEV2ZW50RGlzcGF0Y2hlcjo6dG9wRXZlbnRDb250
ZXh0KCkKIHsKICAgICByZXR1cm4gbV9hbmNlc3RvcnMuaXNFbXB0eSgpID8gMCA6ICZtX2FuY2Vz
dG9ycy5sYXN0KCk7CiB9CiAKLWJvb2wgRXZlbnREaXNwYXRjaGVyOjphbmNlc3RvcnNJbml0aWFs
aXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5jZXN0b3JzLnNpemUoKTsKLX0KLQogRXZl
bnREaXNwYXRjaEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6ZGV0ZXJtaW5lRGlzcGF0Y2hCZWhh
dmlvcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gUGVyIFhCTCAyLjAgc3BlYywgbXV0YXRpb24g
ZXZlbnRzIHNob3VsZCBuZXZlciBjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJ5OgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDJkYmI5ODU0NmNjNWQwOWFiNjkxNWEwZmQ2Nzkx
MzVjMjAwMDU0MGEuLjg4ZTk3NTY0ZTE4OGNhY2QwZDc4OGQ0YWFiZWZjZDZhZmJiNTNmNmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTU0LDIxICs1NCwyMiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhOb2RlKiwgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBz
aG93UHJlc3NlZExvb2spOwogCiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KTsKLSAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBhZGp1c3RSZWxhdGVkVGFyZ2V0KFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKKyAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBhZGp1
c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4pOwogICAgIE5v
ZGUqIG5vZGUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoTm9kZSop
OwogCisgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gYWRqdXN0VG9TaGFkb3dCb3VuZGFyaWVz
KFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCwgY29uc3QgVmVjdG9yPE5vZGUqPiByZWxh
dGVkVGFyZ2V0QW5jZXN0b3JzKTsKICAgICBFdmVudERpc3BhdGNoQmVoYXZpb3IgZGV0ZXJtaW5l
RGlzcGF0Y2hCZWhhdmlvcihFdmVudCopOwotICAgIHZvaWQgZ2V0RXZlbnRBbmNlc3RvcnMoRXZl
bnRUYXJnZXQqIG9yaWdpbmFsVGFyZ2V0LCBFdmVudERpc3BhdGNoQmVoYXZpb3IpOworICAgIHZv
aWQgZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqKTsKICAgICBjb25zdCBFdmVudENvbnRleHQq
IHRvcEV2ZW50Q29udGV4dCgpOwotICAgIGJvb2wgYW5jZXN0b3JzSW5pdGlhbGl6ZWQoKSBjb25z
dDsKIAogICAgIFZlY3RvcjxFdmVudENvbnRleHQ+IG1fYW5jZXN0b3JzOwogICAgIFJlZlB0cjxO
b2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX29yaWdpbmFsVGFyZ2V0Owog
ICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsKKyAgICBib29sIG1fYW5jZXN0b3JzSW5pdGlh
bGl6ZWQ7CiB9OwogCiBpbmxpbmUgTm9kZSogRXZlbnREaXNwYXRjaGVyOjpub2RlKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAppbmRleCA2ZTQ4ZDQwOTJiMzk4ODI3OTE4NGE2ZTJk
OGYxNzcwYmViNmI3YzA1Li4xMzRlNWY2NjZmZTdkZmMxOWYxNTZiYzM0Yzg0ZDk0M2I0NTczNGEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBN
b3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIq
IGRpc3BhdGNoZXIpIGNvbnMKICAgICBpZiAoZXZlbnQoKS0+dHlwZSgpLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTaG91bGRuJ3QgaGFwcGVuLgogCi0gICAgUmVmUHRyPEV2
ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0ID0gZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdl
dChldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkpOworICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVs
YXRlZFRhcmdldCA9IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZl
bnQoKS0+cmVsYXRlZFRhcmdldCgpKTsKICAgICBldmVudCgpLT5zZXRSZWxhdGVkVGFyZ2V0KHJl
bGF0ZWRUYXJnZXQpOwogCiAgICAgZGlzcGF0Y2hlci0+ZGlzcGF0Y2hFdmVudChldmVudCgpKTsK
</data>
<flag name="review"
          id="81539"
          type_id="1"
          status="+"
          setter="ojan"
    />
    <flag name="commit-queue"
          id="81540"
          type_id="3"
          status="-"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>