<?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>74863</bug_id>
          
          <creation_ts>2011-12-19 07:38:46 -0800</creation_ts>
          <short_desc>Web Inspector: Add CSSStyleSelector instrumentation calls towards implementing a CSS selector profiler</short_desc>
          <delta_ts>2011-12-23 09:43:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>loislo</cc>
    
    <cc>macpherson</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>523907</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-19 07:38:46 -0800</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523957</commentid>
    <comment_count>1</comment_count>
      <attachid>119877</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-19 09:59:50 -0800</bug_when>
    <thetext>Created attachment 119877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524010</commentid>
    <comment_count>2</comment_count>
      <attachid>119877</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-19 10:54:10 -0800</bug_when>
    <thetext>Comment on attachment 119877
Patch

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

r- on perf concerns.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:722
&gt; +        CSSStyleRule* rule = ruleData.rule();
&gt; +        InspectorInstrumentationCookie cookie = InspectorInstrumentation::willMatchRule(document(), rule);
&gt; +        if (canUseFastReject &amp;&amp; m_checker.fastRejectSelector&lt;RuleData::maximumIdentifierCount&gt;(ruleData.descendantSelectorIdentifierHashes())) {
&gt; +            InspectorInstrumentation::didMatchRule(cookie, false);
&gt;              continue;
&gt; +        }

As said before, I don&apos;t think you should put anything on the fastRejectSelector path. You are not measuring anything interesting (the selectors rejected by this loop are not any more relevant than the selectors rejected by earlier hash lookup optimizations which you don&apos;t measure) and very little time is spent here anyway (bloom filter lookup is very fast).

Extra branches here are very likely to regress performance. If you look at the assembly, you will see that this code compiles to a very tight loop. You would need to prove that it doesn&apos;t on ARM where this kind of stuff can really matter.

Other additional checks in this patch are probably fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524526</commentid>
    <comment_count>3</comment_count>
      <attachid>120006</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-20 04:21:31 -0800</bug_when>
    <thetext>Created attachment 120006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524532</commentid>
    <comment_count>4</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-20 04:44:56 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 119877 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119877&amp;action=review
&gt; 
&gt; r- on perf concerns.
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:722
&gt; &gt; +        CSSStyleRule* rule = ruleData.rule();
&gt; &gt; +        InspectorInstrumentationCookie cookie = InspectorInstrumentation::willMatchRule(document(), rule);
&gt; &gt; +        if (canUseFastReject &amp;&amp; m_checker.fastRejectSelector&lt;RuleData::maximumIdentifierCount&gt;(ruleData.descendantSelectorIdentifierHashes())) {
&gt; &gt; +            InspectorInstrumentation::didMatchRule(cookie, false);
&gt; &gt;              continue;
&gt; &gt; +        }
&gt; 
&gt; As said before, I don&apos;t think you should put anything on the fastRejectSelector path. You are not measuring anything interesting (the selectors rejected by this loop are not any more relevant than the selectors rejected by earlier hash lookup optimizations which you don&apos;t measure) and very little time is spent here anyway (bloom filter lookup is very fast).

My concern was profiling the invocation count, but since you say a lot of things have been filtered out by this point, it&apos;s probably okay to omit this check, too.

&gt; Extra branches here are very likely to regress performance. If you look at the assembly, you will see that this code compiles to a very tight loop. You would need to prove that it doesn&apos;t on ARM where this kind of stuff can really matter.

NB: The following paragraph treats the case of a closed Web Inspector.

I&apos;ve trimmed the total footprint down to 28 CPU instructions per loop (on my x86_64) in the latest patch. The original loop totals to around 210 CPU instruction at the top level, all instructions in calls excluded. That said, an rdtsc-based measurement has shown that typically the frontend check takes about 40 CPU cycles (occasionally - 100 to 180 iterations) on the first iteration and then gets cached by the CPU, so subsequent iterations typically evaluate to 0 - 10 cycles, depending on the CPU cache state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524701</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-20 11:18:31 -0800</bug_when>
    <thetext>The UI should probably show the (approximate) time spent matching each selector and the match count but not the rejection count. Every selector that doesn&apos;t match is rejected (only the optimization stage we figure it out varies).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524938</commentid>
    <comment_count>6</comment_count>
      <attachid>120006</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-20 16:22:43 -0800</bug_when>
    <thetext>Comment on attachment 120006
Patch

Attachment 120006 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10987563

New failing tests:
http/tests/inspector/extensions-headers.html
http/tests/inspector/extensions-useragent.html
http/tests/inspector/resource-har-headers.html
http/tests/inspector/console-xhr-logging.html
http/tests/inspector/console-cd.html
http/tests/inspector/console-cd-completions.html
http/tests/inspector/injected-script-for-origin.html
http/tests/inspector/extensions-network-redirect.html
http/tests/inspector/console-websocket-error.html
http/tests/inspector/compiler-source-mapping.html
http/tests/inspector/extensions-ignore-cache.html
http/tests/inspector/change-iframe-src.html
http/tests/inspector/inspect-iframe-from-different-domain.html
http/tests/inspector/compiler-source-mapping-debug.html
http/tests/inspector/resource-har-conversion.html
http/tests/inspector/console-resource-errors.html
http/tests/inspector/resource-parameters.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525113</commentid>
    <comment_count>7</comment_count>
      <attachid>120006</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-20 22:47:00 -0800</bug_when>
    <thetext>Comment on attachment 120006
Patch

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

r=me, with some comments

&gt; Source/WebCore/css/CSSStyleSelector.cpp:725
&gt; +        InspectorInstrumentationCookie cookie;
&gt; +#if ENABLE(INSPECTOR)
&gt; +        if (InspectorInstrumentation::hasFrontends())
&gt; +            cookie = InspectorInstrumentation::willMatchRule(document(), rule);
&gt; +#endif

It would be cleaner to inline the front end and enable checks inside the InspectorInstrumentation call. Returning a null cookie probably doesn&apos;t have meaningful cost.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2187
&gt; +    InspectorInstrumentationCookie cookie;
&gt; +#if ENABLE(INSPECTOR)
&gt; +    if (InspectorInstrumentation::hasFrontends())
&gt; +        cookie = InspectorInstrumentation::willProcessRule(document(), styleDeclaration-&gt;parentRule());
&gt; +#endif

Same comment as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525237</commentid>
    <comment_count>8</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-21 06:10:50 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 120006 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120006&amp;action=review
&gt; 
&gt; r=me, with some comments
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:725
&gt; &gt; +        InspectorInstrumentationCookie cookie;
&gt; &gt; +#if ENABLE(INSPECTOR)
&gt; &gt; +        if (InspectorInstrumentation::hasFrontends())
&gt; &gt; +            cookie = InspectorInstrumentation::willMatchRule(document(), rule);
&gt; &gt; +#endif
&gt; 
&gt; It would be cleaner to inline the front end and enable checks inside the InspectorInstrumentation call. Returning a null cookie probably doesn&apos;t have meaningful cost.

So, it looks like your only concern in the previous patch was the will... call _before_ the fast rejection path, and returning an empty cookie is fine, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526780</commentid>
    <comment_count>9</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-23 02:07:19 -0800</bug_when>
    <thetext>Committed r103615: &lt;http://trac.webkit.org/changeset/103615&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526878</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-23 09:20:05 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; So, it looks like your only concern in the previous patch was the will... call _before_ the fast rejection path, and returning an empty cookie is fine, right?

Right, fastReject can throw out &gt;90% of candidates so things are much hotter before it. Also, as I said I dont think measuring it is particularly interesting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526884</commentid>
    <comment_count>11</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-23 09:43:32 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; So, it looks like your only concern in the previous patch was the will... call _before_ the fast rejection path, and returning an empty cookie is fine, right?
&gt; 
&gt; Right, fastReject can throw out &gt;90% of candidates so things are much hotter before it. Also, as I said I dont think measuring it is particularly interesting.

Thanks for the clarification, Antti. The landed patch excludes fastReject from the measurement.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119877</attachid>
            <date>2011-12-19 09:59:50 -0800</date>
            <delta_ts>2011-12-20 04:21:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74863-20111219215948.patch</filename>
            <type>text/plain</type>
            <size>12554</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI0ZTUwNzJmOWVlOGU0
Yzk3ZGU4MDQ2YzBmMmU5MjUzNGI3OGJiOC4uZWNlY2Y3NjBmOTVkMTc4N2M4ODY4MzljODliNTE0
Mjc4MmM3MjE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMyIEBACiAyMDExLTEyLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQWRkIENTU1N0eWxlU2VsZWN0b3IgaW5zdHJ1bWVudGF0aW9uIGNhbGxzIHRvd2FyZHMg
aW1wbGVtZW50aW5nIGEgQ1NTIHNlbGVjdG9yIHByb2ZpbGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg2MworCisgICAgICAgIFBlcmZvcm1hbmNl
IGNoZWNrcyBydW4gb24gUGVyZm9ybWFuY2VUZXN0L1BhcnNlci9odG1sNS1mdWxsLXJlbmRlci5o
dG1sIGRpZCBub3QgcmVzdWx0IGluIGFueSBub3RpY2VhYmxlCisgICAgICAgIHBlcmYgcmVncmVz
c2lvbiwgYXMgdGhlIGluc3RydW1lbnRhdGlvbiBjYWxscyBhcmUgaW5saW5lIGFuZCBiYWlsIG91
dCBlYXJseSBpZiB0aGVyZSBhcmUgbm8KKyAgICAgICAgV2ViIEluc3BlY3RvciBmcm9udGVuZHMg
b3Blbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIGFzIHRoZSBmdW5jdGlvbmFsaXR5IGlzIG5vdCBib3VuZCB0byBhbnkgdXNl
ci12aXNpYmxlIG91dHB1dHMuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9uKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZUltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1
bGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFByb2Nlc3NSdWxlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFByb2Nlc3NSdWxlSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsTWF0Y2hSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vzc1J1bGUpOgorCisyMDExLTEyLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IENTUyBzZWxlY3RvciBwcm9maWxlciBiYWNrZW5kCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDYwMwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggYzk2OWQwZTdlN2QyODUwN2Q4N2M1ZjIx
MDM3ZDBlN2ZjZGYzOTBmNy4uZDQ4MWNkYjc4ODk3N2VmNTFhNWNjNWE1ZTQ5OTczZDdlOTg5ZGVk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNjYsNiArNjYs
NyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVk
ZSAiTGlua0hhc2guaCIKICNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKQEAgLTcx
MywyMyArNzE0LDM0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3Qo
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyCiAgICAgdW5zaWduZWQgc2l6
ZSA9IHJ1bGVzLT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewogICAgICAgICBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEgPSBydWxlcy0+YXQoaSk7Ci0g
ICAgICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIG1fY2hlY2tlci5mYXN0UmVqZWN0U2VsZWN0
b3I8UnVsZURhdGE6Om1heGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRT
ZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSkpCisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9
IHJ1bGVEYXRhLnJ1bGUoKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1bWVu
dCgpLCBydWxlKTsKKyAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYgbV9jaGVja2VyLmZh
c3RSZWplY3RTZWxlY3RvcjxSdWxlRGF0YTo6bWF4aW11bUlkZW50aWZpZXJDb3VudD4ocnVsZURh
dGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcygpKSkgeworICAgICAgICAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoY2hlY2tTZWxlY3Rv
cihydWxlRGF0YSkpIHsKLSAgICAgICAgICAgIGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxl
bWVudC0+dHJlZVNjb3BlKCksIG1fY2hlY2tlci5oYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSkp
CisgICAgICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29wZShtX2VsZW1lbnQtPnRyZWVTY29w
ZSgpLCBtX2NoZWNrZXIuaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkpKSB7CisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxz
ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUg
aXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgotICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxl
ID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIGRlY2wgPSBydWxlLT5kZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgaWYgKCFkZWNsIHx8
ICghZGVjbC0+bGVuZ3RoKCkgJiYgIWluY2x1ZGVFbXB0eVJ1bGVzKSkKKyAgICAgICAgICAgIGlm
ICghZGVjbCB8fCAoIWRlY2wtPmxlbmd0aCgpICYmICFpbmNsdWRlRW1wdHlSdWxlcykpIHsKKyAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29r
aWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICht
X3NhbWVPcmlnaW5Pbmx5ICYmICFtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuUmVxdWVzdChydWxlLT5iYXNlVVJMKCkpKQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIW1fY2hlY2tlci5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJ1bGUtPmJhc2VVUkwoKSkpIHsKKyAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8v
IElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1hbCBydWxlcywgc2V0IGEgcHNldWRvIGJpdCBpZgogICAg
ICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBhIHBzZXVkby1lbGVtZW50LgogICAg
ICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNl
dWRvU3R5bGUoKSA9PSBOT1BTRVVETykgewotICAgICAgICAgICAgICAgIGlmIChtX2NoZWNrZXIu
aXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpCisgICAgICAgICAgICAgICAgaWYgKG1fY2hlY2tlci5p
c0NvbGxlY3RpbmdSdWxlc09ubHkoKSkgeworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlm
IChtX2R5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKICAgICAgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CkBAIC03NDAsOCArNzUyLDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGlu
dCYgZmlyCiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9m
IG1hdGNoZWQgcnVsZXMuCiAgICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVs
ZShjb29raWUsIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgIH0K
IH0KIApAQCAtMjE2Miw2ICsyMTc2LDcgQEAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExl
bmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0eWwKIHRlbXBs
YXRlIDxib29sIGFwcGx5Rmlyc3Q+CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFy
YXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24sIGJvb2wg
aXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSkKIHsKKyAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUHJv
Y2Vzc1J1bGUoZG9jdW1lbnQoKSwgc3R5bGVEZWNsYXJhdGlvbi0+cGFyZW50UnVsZSgpKTsKICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGVE
ZWNsYXJhdGlvbi0+ZW5kKCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZURlY2xhcmF0aW9uLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGN1cnJlbnQgPSAqaXQ7CkBAIC0y
MTkzLDYgKzIyMDgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24o
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYQogICAgICAgICBpZiAocHJv
cGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCiAgICAgICAgICAgICBhcHBseVByb3BlcnR5
KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICB9CisgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOwogfQogCiB0ZW1wbGF0ZSA8Ym9v
bCBhcHBseUZpcnN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBjYjFhNjhmZGM0OGYyNzdlNjg4NDI4OWU0MjFk
NmU1MDU2YWEyOTRlLi41NmY0NmVlZWZlNDRjNDljNmEwYTEyMzk2MjBiMGM5N2I4NWI0YmIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcApAQCAtMzMsNiArMzMsOCBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAor
I2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRl
ICJET01GaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2UuaCIKQEAgLTQzOCw2ICs0NDAsNTAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uSW1wbChJbnN0cnVtZW50aW5nQWcKICAg
ICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oZG9jdW1l
bnQpOwogfQogCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBjb25zdCBDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFpbnN0
cnVtZW50aW5nQWdlbnRzKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llKCk7CisKKyAgICBjb25zdCBzdGF0aWMgaW50IGNzc0FnZW50SWQgPSAxOworICAgIElu
c3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
ckNTU0FnZW50KCk7CisgICAgaWYgKGNzc0FnZW50KSB7CisgICAgICAgIGNzc0FnZW50LT53aWxs
TWF0Y2hSdWxlKHJ1bGUpOworICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIGNzc0FnZW50SWQpOworICAgIH0KKworICAgIHJl
dHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKK30KKwordm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJiBjb29raWUsIGJvb2wgbWF0Y2hlZCkKK3sKKyAgICBJbnNwZWN0b3JD
U1NBZ2VudCogY3NzQWdlbnQgPSBjb29raWUuZmlyc3QtPmluc3BlY3RvckNTU0FnZW50KCk7Cisg
ICAgaWYgKGNzc0FnZW50KQorICAgICAgICBjc3NBZ2VudC0+ZGlkTWF0Y2hSdWxlKG1hdGNoZWQp
OworfQorCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIGNvbnN0IENTU1J1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFpbnN0cnVtZW50
aW5nQWdlbnRzIHx8ICFydWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICByZXR1cm4gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CisKKyAgICBjb25zdCBzdGF0aWMgaW50IGNzc0Fn
ZW50SWQgPSAxOworICAgIEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvckNTU0FnZW50KCk7CisgICAgaWYgKGNzc0FnZW50KSB7CisgICAg
ICAgIGNzc0FnZW50LT53aWxsUHJvY2Vzc1J1bGUoc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTU3R5bGVS
dWxlKj4ocnVsZSkpOworICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llKGluc3RydW1lbnRpbmdBZ2VudHMsIGNzc0FnZW50SWQpOworICAgIH0KKworICAgIHJldHVy
biBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUmIGNvb2tpZSkKK3sKKyAgICBJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdl
bnQgPSBjb29raWUuZmlyc3QtPmluc3BlY3RvckNTU0FnZW50KCk7CisgICAgaWYgKGNzc0FnZW50
KQorICAgICAgICBjc3NBZ2VudC0+ZGlkUHJvY2Vzc1J1bGUoKTsKK30KKwogdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFN0cmluZyogdXNlckFnZW50KQogewogICAg
IGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IDgwN2NiMzZiZGI0
MTY0MmU2YmU3OGFlYjJhNTQ0N2ZiZGNjMjcxZmMuLjVlMGU1OGMwYzNmN2Q3MDQ0MDUyMzgyZWE5
ZmI5ZjU0ODEzMGNkN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTQxLDYgKzQxLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBDU1NSdWxlOworY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ2hh
cmFjdGVyRGF0YTsKIGNsYXNzIERPTUZpbGVTeXN0ZW07CiBjbGFzcyBET01XaW5kb3c7CkBAIC0x
MTksNiArMTIxLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIHdpbGxSZWNhbGN1bGF0ZVN0eWxlKERvY3VtZW50Kik7CiAgICAgc3RhdGljIHZv
aWQgZGlkUmVjYWxjdWxhdGVTdHlsZShjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUmKTsKICAgICBzdGF0aWMgdm9pZCBkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1
bWVudCopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbE1h
dGNoUnVsZShEb2N1bWVudCosIGNvbnN0IENTU1N0eWxlUnVsZSopOworICAgIHN0YXRpYyB2b2lk
IGRpZE1hdGNoUnVsZShjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmLCBib29s
IG1hdGNoZWQpOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2ls
bFByb2Nlc3NSdWxlKERvY3VtZW50KiwgY29uc3QgQ1NTUnVsZSopOworICAgIHN0YXRpYyB2b2lk
IGRpZFByb2Nlc3NSdWxlKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwog
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlVc2VyQWdlbnRPdmVycmlkZShGcmFtZSosIFN0cmluZyop
OwogICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKQEAgLTI2MCw2ICsyNjYsMTAgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxSZWNh
bGN1bGF0ZVN0eWxlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIHZvaWQg
ZGlkUmVjYWxjdWxhdGVTdHlsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJik7CiAgICAgc3RhdGljIHZvaWQgZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb25JbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgd2lsbE1hdGNoUnVsZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyosIGNvbnN0IENTU1N0eWxlUnVsZSopOworICAgIHN0YXRpYyB2b2lkIGRpZE1hdGNoUnVsZUlt
cGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgYm9vbCBtYXRjaGVkKTsK
KyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxQcm9jZXNzUnVs
ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGNvbnN0IENTU1J1bGUqKTsKKyAgICBzdGF0aWMg
dm9pZCBkaWRQcm9jZXNzUnVsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgU3RyaW5nKik7CiAgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1
ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBE
b2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpOwpAQCAtNzE5LDYgKzcyOSw0NiBAQCBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3Vt
ZW50KiBkbwogI2VuZGlmCiB9CiAKK2lubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxlKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAg
IHJldHVybiB3aWxsTWF0Y2hSdWxlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBydWxlKTsKKyNl
bmRpZgorICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKK30KKwor
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUsIGJvb2wgbWF0Y2hlZCkKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2
b2lkKCkpOworICAgIGlmIChjb29raWUuZmlyc3QgJiYgY29va2llLnNlY29uZCkKKyAgICAgICAg
ZGlkTWF0Y2hSdWxlSW1wbChjb29raWUsIG1hdGNoZWQpOworI2VuZGlmCit9CisKK2lubGluZSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUHJvY2Vzc1J1bGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBDU1NSdWxlKiBydWxlKQor
eworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpKTsKKyAgICBpZiAoIXJ1bGUpCisgICAg
ICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIHJldHVybiB3aWxsUHJvY2Vzc1J1bGVJ
bXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHJ1bGUpOworI2VuZGlmCisgICAgcmV0dXJuIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYgY29va2llKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKGNvb2tpZS5maXJzdCAmJiBj
b29raWUuc2Vjb25kKQorICAgICAgICBkaWRQcm9jZXNzUnVsZUltcGwoY29va2llKTsKKyNlbmRp
ZgorfQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFn
ZW50T3ZlcnJpZGUoRnJhbWUqIGZyYW1lLCBTdHJpbmcqIHVzZXJBZ2VudCkKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120006</attachid>
            <date>2011-12-20 04:21:31 -0800</date>
            <delta_ts>2011-12-20 22:47:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74863-20111220162128.patch</filename>
            <type>text/plain</type>
            <size>12516</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTRlMjRkZTNjZTk1NjA0
ZjdhODkzNTZmMTY2OTI2MGIxZjZjYjZjMy4uYWQ5ZGM3NzY5YWUyODE4OWJiZDMwYmNlNDAxYjUx
ZWU2ODA3MmUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQWRkIENTU1N0eWxlU2VsZWN0b3IgaW5zdHJ1bWVudGF0aW9uIGNhbGxzIHRvd2FyZHMg
aW1wbGVtZW50aW5nIGEgQ1NTIHNlbGVjdG9yIHByb2ZpbGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg2MworCisgICAgICAgIFBlcmZvcm1hbmNl
IGNoZWNrcyBydW4gb24gUGVyZm9ybWFuY2VUZXN0L1BhcnNlci9odG1sNS1mdWxsLXJlbmRlci5o
dG1sIGRpZCBub3QgcmVzdWx0IGluIGFueSBub3RpY2VhYmxlCisgICAgICAgIHBlcmYgcmVncmVz
c2lvbiwgYXMgdGhlIGluc3RydW1lbnRhdGlvbiBjYWxscyBhcmUgaW5saW5lIGFuZCBiYWlsIG91
dCBlYXJseSBpZiB0aGVyZSBhcmUgbm8KKyAgICAgICAgV2ViIEluc3BlY3RvciBmcm9udGVuZHMg
b3Blbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIGFzIHRoZSBmdW5jdGlvbmFsaXR5IGlzIG5vdCBib3VuZCB0byBhbnkgdXNl
ci12aXNpYmxlIG91dHB1dHMuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9uKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZUltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1
bGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFByb2Nlc3NSdWxlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFByb2Nlc3NSdWxlSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsTWF0Y2hSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vzc1J1bGUpOgorCiAyMDExLTEyLTIwICBBbG9r
IFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
Y29tcG9zaXRpbmcvc2hhZG93cyB0ZXN0cyBmYWlsIHdpdGggYWNjZWxlcmF0ZWQgcGFpbnRpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBjOTY5ZDBlN2U3ZDI4
NTA3ZDg3YzVmMjEwMzdkMGU3ZmNkZjM5MGY3Li4yMjBkYTEzNTBlOGMzNjc4YTZiNDdmYzg1NTEz
NTcwNjkyZGQ1MmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBA
IC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBy
b2dyZXNzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJLZXlmcmFtZUxpc3Qu
aCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGlu
Zy5oIgpAQCAtNzE1LDIxICs3MTYsMzUgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1
bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXIKICAgICAg
ICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwogICAgICAgICBpZiAo
Y2FuVXNlRmFzdFJlamVjdCAmJiBtX2NoZWNrZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRh
OjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVu
dGlmaWVySGFzaGVzKCkpKQogICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ1NTU3R5
bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOworICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgY29va2llOworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgIGlm
IChJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQorICAgICAgICAgICAg
Y29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50
KCksIHJ1bGUpOworI2VuZGlmCiAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhKSkg
ewotICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2Nv
cGUoKSwgbV9jaGVja2VyLmhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpKSkKKyAgICAgICAgICAg
IGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVudC0+dHJlZVNjb3BlKCksIG1fY2hlY2tl
ci5oYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSkpIHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIElmIHRoZSBy
dWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9u
LWRlYnVnIG1vZGUuCi0gICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5y
dWxlKCk7CiAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9IHJ1
bGUtPmRlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIWRlY2wgfHwgKCFkZWNsLT5sZW5n
dGgoKSAmJiAhaW5jbHVkZUVtcHR5UnVsZXMpKQorICAgICAgICAgICAgaWYgKCFkZWNsIHx8ICgh
ZGVjbC0+bGVuZ3RoKCkgJiYgIWluY2x1ZGVFbXB0eVJ1bGVzKSkgeworICAgICAgICAgICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9u
bHkgJiYgIW1fY2hlY2tlci5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0
KHJ1bGUtPmJhc2VVUkwoKSkpCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9zYW1l
T3JpZ2luT25seSAmJiAhbV9jaGVja2VyLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
blJlcXVlc3QocnVsZS0+YmFzZVVSTCgpKSkgeworICAgICAgICAgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0
Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmCiAgICAgICAgICAgICAvLyB3
ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRvLWVsZW1lbnQuCiAgICAgICAgICAgICBpZiAo
bV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpID09
IE5PUFNFVURPKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY2hlY2tlci5pc0NvbGxlY3RpbmdS
dWxlc09ubHkoKSkKKyAgICAgICAgICAgICAgICBpZiAobV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1
bGVzT25seSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG1fZHluYW1pY1Bz
ZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQogICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShtX2R5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgfSBl
bHNlIHsKQEAgLTc0MCw4ICs3NTUsMTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1
bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXIKIAogICAg
ICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBydWxl
cy4KICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOworICAgICAgICAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
KyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBm
YWxzZSk7CiAgICAgfQogfQogCkBAIC0yMTYyLDYgKzIxODAsMTEgQEAgc3RhdGljIExlbmd0aCBj
b252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJl
bmRlclN0eWwKIHRlbXBsYXRlIDxib29sIGFwcGx5Rmlyc3Q+CiB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVj
bGFyYXRpb24sIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSkKIHsKKyAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llOworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisgICAgaWYgKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkpCisg
ICAgICAgIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxl
KGRvY3VtZW50KCksIHN0eWxlRGVjbGFyYXRpb24tPnBhcmVudFJ1bGUoKSk7CisjZW5kaWYKICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGVE
ZWNsYXJhdGlvbi0+ZW5kKCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZURlY2xhcmF0aW9uLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGN1cnJlbnQgPSAqaXQ7CkBAIC0y
MTkzLDYgKzIyMTYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24o
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYQogICAgICAgICBpZiAocHJv
cGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCiAgICAgICAgICAgICBhcHBseVByb3BlcnR5
KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICB9CisgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOwogfQogCiB0ZW1wbGF0ZSA8Ym9v
bCBhcHBseUZpcnN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBjYjFhNjhmZGM0OGYyNzdlNjg4NDI4OWU0MjFk
NmU1MDU2YWEyOTRlLi41NmY0NmVlZWZlNDRjNDljNmEwYTEyMzk2MjBiMGM5N2I4NWI0YmIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcApAQCAtMzMsNiArMzMsOCBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAor
I2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRl
ICJET01GaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2UuaCIKQEAgLTQzOCw2ICs0NDAsNTAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uSW1wbChJbnN0cnVtZW50aW5nQWcKICAg
ICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oZG9jdW1l
bnQpOwogfQogCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBjb25zdCBDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFpbnN0
cnVtZW50aW5nQWdlbnRzKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llKCk7CisKKyAgICBjb25zdCBzdGF0aWMgaW50IGNzc0FnZW50SWQgPSAxOworICAgIElu
c3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
ckNTU0FnZW50KCk7CisgICAgaWYgKGNzc0FnZW50KSB7CisgICAgICAgIGNzc0FnZW50LT53aWxs
TWF0Y2hSdWxlKHJ1bGUpOworICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIGNzc0FnZW50SWQpOworICAgIH0KKworICAgIHJl
dHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKK30KKwordm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJiBjb29raWUsIGJvb2wgbWF0Y2hlZCkKK3sKKyAgICBJbnNwZWN0b3JD
U1NBZ2VudCogY3NzQWdlbnQgPSBjb29raWUuZmlyc3QtPmluc3BlY3RvckNTU0FnZW50KCk7Cisg
ICAgaWYgKGNzc0FnZW50KQorICAgICAgICBjc3NBZ2VudC0+ZGlkTWF0Y2hSdWxlKG1hdGNoZWQp
OworfQorCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIGNvbnN0IENTU1J1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFpbnN0cnVtZW50
aW5nQWdlbnRzIHx8ICFydWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICByZXR1cm4gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CisKKyAgICBjb25zdCBzdGF0aWMgaW50IGNzc0Fn
ZW50SWQgPSAxOworICAgIEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvckNTU0FnZW50KCk7CisgICAgaWYgKGNzc0FnZW50KSB7CisgICAg
ICAgIGNzc0FnZW50LT53aWxsUHJvY2Vzc1J1bGUoc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTU3R5bGVS
dWxlKj4ocnVsZSkpOworICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llKGluc3RydW1lbnRpbmdBZ2VudHMsIGNzc0FnZW50SWQpOworICAgIH0KKworICAgIHJldHVy
biBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUmIGNvb2tpZSkKK3sKKyAgICBJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdl
bnQgPSBjb29raWUuZmlyc3QtPmluc3BlY3RvckNTU0FnZW50KCk7CisgICAgaWYgKGNzc0FnZW50
KQorICAgICAgICBjc3NBZ2VudC0+ZGlkUHJvY2Vzc1J1bGUoKTsKK30KKwogdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFN0cmluZyogdXNlckFnZW50KQogewogICAg
IGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IDgwN2NiMzZiZGI0
MTY0MmU2YmU3OGFlYjJhNTQ0N2ZiZGNjMjcxZmMuLmY2YTgzNzA0ZTBmYWViZDk5MjhmNjhhNDRl
YmI0ZTNjN2RjYjMxNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTQxLDYgKzQxLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBDU1NSdWxlOworY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ2hh
cmFjdGVyRGF0YTsKIGNsYXNzIERPTUZpbGVTeXN0ZW07CiBjbGFzcyBET01XaW5kb3c7CkBAIC0x
MTksNiArMTIxLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIHdpbGxSZWNhbGN1bGF0ZVN0eWxlKERvY3VtZW50Kik7CiAgICAgc3RhdGljIHZv
aWQgZGlkUmVjYWxjdWxhdGVTdHlsZShjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUmKTsKICAgICBzdGF0aWMgdm9pZCBkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1
bWVudCopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbE1h
dGNoUnVsZShEb2N1bWVudCosIGNvbnN0IENTU1N0eWxlUnVsZSopOworICAgIHN0YXRpYyB2b2lk
IGRpZE1hdGNoUnVsZShjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmLCBib29s
IG1hdGNoZWQpOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2ls
bFByb2Nlc3NSdWxlKERvY3VtZW50KiwgY29uc3QgQ1NTUnVsZSopOworICAgIHN0YXRpYyB2b2lk
IGRpZFByb2Nlc3NSdWxlKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwog
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlVc2VyQWdlbnRPdmVycmlkZShGcmFtZSosIFN0cmluZyop
OwogICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKQEAgLTI2MCw2ICsyNjYsMTAgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxSZWNh
bGN1bGF0ZVN0eWxlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIHZvaWQg
ZGlkUmVjYWxjdWxhdGVTdHlsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJik7CiAgICAgc3RhdGljIHZvaWQgZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb25JbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgd2lsbE1hdGNoUnVsZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyosIGNvbnN0IENTU1N0eWxlUnVsZSopOworICAgIHN0YXRpYyB2b2lkIGRpZE1hdGNoUnVsZUlt
cGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgYm9vbCBtYXRjaGVkKTsK
KyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxQcm9jZXNzUnVs
ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGNvbnN0IENTU1J1bGUqKTsKKyAgICBzdGF0aWMg
dm9pZCBkaWRQcm9jZXNzUnVsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgU3RyaW5nKik7CiAgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1
ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBE
b2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpOwpAQCAtNzE5LDYgKzcyOSw0NiBAQCBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3Vt
ZW50KiBkbwogI2VuZGlmCiB9CiAKK2lubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxlKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgLy8gVGhpcyBtZXRob2QncyBjYWxsIHNpdGVzIE1VU1QgYmUgZ3VhcmRlZCB3aXRoIGEg
Y2FsbCB0byBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpLgorICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIHdpbGxNYXRjaFJ1
bGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHJ1bGUpOworI2VuZGlmCisgICAgcmV0dXJuIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUmIGNvb2tpZSwgYm9vbCBtYXRjaGVkKQoreworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKGNv
b2tpZS5maXJzdCAmJiBjb29raWUuc2Vjb25kKQorICAgICAgICBkaWRNYXRjaFJ1bGVJbXBsKGNv
b2tpZSwgbWF0Y2hlZCk7CisjZW5kaWYKK30KKworaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IENTU1J1bGUqIHJ1bGUpCit7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICAvLyBUaGlzIG1ldGhvZCdzIGNhbGwgc2l0ZXMgTVVTVCBiZSBndWFyZGVkIHdp
dGggYSBjYWxsIHRvIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkuCisg
ICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llKCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgICAgICByZXR1
cm4gd2lsbFByb2Nlc3NSdWxlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBydWxlKTsKKyNlbmRp
ZgorICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKK30KKworaW5s
aW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb25zdCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKK3sKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlm
IChjb29raWUuZmlyc3QgJiYgY29va2llLnNlY29uZCkKKyAgICAgICAgZGlkUHJvY2Vzc1J1bGVJ
bXBsKGNvb2tpZSk7CisjZW5kaWYKK30KKwogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKEZyYW1lKiBmcmFtZSwgU3RyaW5nKiB1c2Vy
QWdlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
</data>
<flag name="review"
          id="120159"
          type_id="1"
          status="+"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="120290"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>