<?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>94596</bug_id>
          
          <creation_ts>2012-08-21 06:49:43 -0700</creation_ts>
          <short_desc>[V8] Move matchesCurrentContext() from V8Proxy to ScriptController</short_desc>
          <delta_ts>2012-08-23 04:18:21 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>85330</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>700712</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 06:49:43 -0700</bug_when>
    <thetext>To kill V8Proxy:

- We can move matchesCurrentContext() from V8Proxy to ScriptController.
- We can remove V8Proxy::isolatedWorldContext() since it is not used by anybody.
- We can remove V8Proxy::finishedWithEvent() since it is empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700714</commentid>
    <comment_count>1</comment_count>
      <attachid>159681</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 06:52:07 -0700</bug_when>
    <thetext>Created attachment 159681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700796</commentid>
    <comment_count>2</comment_count>
      <attachid>159681</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-21 08:34:36 -0700</bug_when>
    <thetext>Comment on attachment 159681
Patch

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

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:392
&gt; +bool ScriptController::matchesCurrentContext()

How is this different from v8::Context::GetCurrent() == contextForCurrentWorld() or I guess v8::Context::GetCurrent() == m_proxy-&gt;context() since the other patch hasn&apos;t landed yet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700798</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-21 08:35:52 -0700</bug_when>
    <thetext>Sorry to be asking all these questions, but we&apos;re getting to the really yucky functions in V8Proxy.  We can move them around without changing them, but this is a good opportunity to understand them and clean them up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700804</commentid>
    <comment_count>4</comment_count>
      <attachid>159681</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 08:46:17 -0700</bug_when>
    <thetext>Comment on attachment 159681
Patch

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

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:392
&gt;&gt; +bool ScriptController::matchesCurrentContext()
&gt; 
&gt; How is this different from v8::Context::GetCurrent() == contextForCurrentWorld() or I guess v8::Context::GetCurrent() == m_proxy-&gt;context() since the other patch hasn&apos;t landed yet?

This is the code I wrote:) I introduced it in https://bugs.webkit.org/show_bug.cgi?id=82201 for perf optimization. Let me take a detailed look tomorrow. Thanks for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700805</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-21 08:51:23 -0700</bug_when>
    <thetext>&gt; This is the code I wrote:)

Sorry, I didn&apos;t mean to impune your code!  I just meant that it&apos;s using a pattern I introduced sometime around http://trac.webkit.org/changeset/46523 that I&apos;m not proud of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701550</commentid>
    <comment_count>6</comment_count>
      <attachid>159681</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 21:08:08 -0700</bug_when>
    <thetext>Comment on attachment 159681
Patch

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

&gt;&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:392
&gt;&gt;&gt; +bool ScriptController::matchesCurrentContext()
&gt;&gt; 
&gt;&gt; How is this different from v8::Context::GetCurrent() == contextForCurrentWorld() or I guess v8::Context::GetCurrent() == m_proxy-&gt;context() since the other patch hasn&apos;t landed yet?
&gt; 
&gt; This is the code I wrote:) I introduced it in https://bugs.webkit.org/show_bug.cgi?id=82201 for perf optimization. Let me take a detailed look tomorrow. Thanks for review!

v8::Context::GetCurrent() == contextForCurrentWorld() works correctly, but it will be slow because contextForCurrentWorld() creates a new local context.

As discussed in bug 82201, this is a hot call path of creating DOM object constructor. So it might make sense to leave the current matchesCurrentContext() as is. I&apos;ll add a comment that explains this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701553</commentid>
    <comment_count>7</comment_count>
      <attachid>159855</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 21:14:32 -0700</bug_when>
    <thetext>Created attachment 159855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702139</commentid>
    <comment_count>8</comment_count>
      <attachid>159855</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-22 11:59:30 -0700</bug_when>
    <thetext>Comment on attachment 159855
Patch

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

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:397
&gt; +    // This method is equivalent to &apos;return v8::Context::GetCurrent() == contextForCurrentWorld()&apos;,
&gt; +    // but is written without using contextForCurrentWorld().
&gt; +    // Given that this method is used by a hot call path of DOM object constructor,
&gt; +    // we want to avoid the overhead of contextForCurrentWorld() creating Local&lt;Context&gt; every time.

Ok.  One option is to split contextForCurrentWorld() into two pieces: a private piece that returns the underlying persistent handle and a second pieces that returns a new local handle to the object.  This function could then share the first piece with currentWorldContext.  We don&apos;t need to do that in this patch if you&apos;d rather get this one landed first.

nit: contextForCurrentWorld -&gt; currentWorldContext

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:407
&gt; +    return context == context-&gt;GetCurrent();

Can we change context-&gt;GetCurrent() to v8::Context::GetCurrent()?  (It&apos;s a static function right?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702548</commentid>
    <comment_count>9</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-22 17:30:52 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Ok.  One option is to split contextForCurrentWorld() into two pieces: a private piece that returns the underlying persistent handle and a second pieces that returns a new local handle to the object.  This function could then share the first piece with currentWorldContext.  We don&apos;t need to do that in this patch if you&apos;d rather get this one landed first.

OK, let me fix it in a later patch.

&gt; nit: contextForCurrentWorld -&gt; currentWorldContext

Done.

&gt; &gt; Source/WebCore/bindings/v8/ScriptController.cpp:407
&gt; &gt; +    return context == context-&gt;GetCurrent();
&gt; 
&gt; Can we change context-&gt;GetCurrent() to v8::Context::GetCurrent()?  (It&apos;s a static function right?)

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702560</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-22 17:38:08 -0700</bug_when>
    <thetext>Committed r126370: &lt;http://trac.webkit.org/changeset/126370&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159681</attachid>
            <date>2012-08-21 06:52:07 -0700</date>
            <delta_ts>2012-08-21 21:14:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94596-20120821225205.patch</filename>
            <type>text/plain</type>
            <size>8564</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFhNTc1ZmE1OGUzOWM3
NmZjZjNmOTY1Y2ZhMmYwZTM3ZDY5ZWM0NC4uYjA1MjJlMThhMmFhNmJkOGI3OWZjYWM2ZDUwNGQ0
M2Q4MzNjY2JhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA4LTIxICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE1vdmUgbWF0
Y2hlc0N1cnJlbnRDb250ZXh0KCkgZnJvbSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0NTk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG8ga2lsbCBWOFBy
b3h5OgorCisgICAgICAgIC0gV2UgY2FuIG1vdmUgbWF0Y2hlc0N1cnJlbnRDb250ZXh0KCkgZnJv
bSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIuCisgICAgICAgIC0gV2UgY2FuIHJlbW92ZSBW
OFByb3h5Ojppc29sYXRlZFdvcmxkQ29udGV4dCgpIHNpbmNlIGl0IGlzIG5vdCB1c2VkIGJ5IGFu
eWJvZHkuCisgICAgICAgIC0gV2UgY2FuIHJlbW92ZSBWOFByb3h5OjpmaW5pc2hlZFdpdGhFdmVu
dCgpIHNpbmNlIGl0IGlzIGVtcHR5LgorCisgICAgICAgIE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKEdlbmVyYXRlVG9WOENvbnZlcnRlcnMpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwU2xvdyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Tm9kZTo6d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZmluaXNoZWRXaXRo
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bWF0Y2hlc0N1cnJl
bnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHku
aDoKKyAgICAgICAgKFY4UHJveHkpOgorCiAyMDEyLTA4LTE3ICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJFR1JFU1NJT04ocjEyNTQy
OCk6IGZhc3QvcHJvZmlsZXIvbmVzdGVkLXN0YXJ0LWFuZC1zdG9wLXByb2ZpbGVyLmh0bWwgZmFp
bHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KaW5kZXggMmMxNzBlMmM5MjQwODVjMDYwNjQzNmYyMDdmMDkyNmFiYmEwMzZmYS4uMDg2
YTJkMDE3NDc2NDk0OWIzZjMwZjczYTAzNTFhNzE1YTAzZDJhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTMzOTQsNyAr
MzM5NCw3IEBAIEVORAogCiAgICAgLy8gRW50ZXIgdGhlIG5vZGUncyBjb250ZXh0IGFuZCBjcmVh
dGUgdGhlIHdyYXBwZXIgaW4gdGhhdCBjb250ZXh0LgogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNvbnRleHQ7Ci0gICAgaWYgKHByb3h5ICYmICFwcm94eS0+bWF0Y2hlc0N1cnJlbnRDb250
ZXh0KCkpIHsKKyAgICBpZiAocHJveHkgJiYgIXByb3h5LT5mcmFtZSgpLT5zY3JpcHQoKS0+bWF0
Y2hlc0N1cnJlbnRDb250ZXh0KCkpIHsKICAgICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlLCB3ZSBl
bnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0CiAg
ICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRoYXQgd2UgYXJlIGFib3V0
IHRvIGVudGVyLgogICAgICAgICBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVE
T01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggODZiMWZkMmM4NjMxNmM2OGNmNDhiY2I5NTgy
MzM3MDZjZjNiMzY5NC4uMmE4MjFkMjE3ZDJmZDBiODgyMTcxM2EzNjQ2Njc5NTI5ZDM3YjVkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6d3JhcFNsb3coUGFz
c1JlZlB0cjxUZXN0QWN0aXZlRE9NTwogCiAgICAgLy8gRW50ZXIgdGhlIG5vZGUncyBjb250ZXh0
IGFuZCBjcmVhdGUgdGhlIHdyYXBwZXIgaW4gdGhhdCBjb250ZXh0LgogICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQ7Ci0gICAgaWYgKHByb3h5ICYmICFwcm94eS0+bWF0Y2hlc0N1
cnJlbnRDb250ZXh0KCkpIHsKKyAgICBpZiAocHJveHkgJiYgIXByb3h5LT5mcmFtZSgpLT5zY3Jp
cHQoKS0+bWF0Y2hlc0N1cnJlbnRDb250ZXh0KCkpIHsKICAgICAgICAgLy8gRm9yIHBlcmZvcm1h
bmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBj
b250ZXh0CiAgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRoYXQgd2Ug
YXJlIGFib3V0IHRvIGVudGVyLgogICAgICAgICBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcAppbmRleCA3YjM4MGEwMGE3MDkxOTYwMDAyYWFjOGE5NjI5ZjgzYjQ0M2NmZTli
Li5jNzlmM2Y3NGFhNzAzM2IwMTYxMDRlYzRkODFjNTJiZTZkOGI1MzQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
CkBAIC0xMTgsNyArMTE4LDcgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROb2RlOjp3
cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3ROb2RlPiBpbXBsLCB2ODo6SXNvbGEKIAogICAgIC8vIEVu
dGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRlIHRoZSB3cmFwcGVyIGluIHRoYXQgY29u
dGV4dC4KICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OwotICAgIGlmIChwcm94
eSAmJiAhcHJveHktPm1hdGNoZXNDdXJyZW50Q29udGV4dCgpKSB7CisgICAgaWYgKHByb3h5ICYm
ICFwcm94eS0+ZnJhbWUoKS0+c2NyaXB0KCktPm1hdGNoZXNDdXJyZW50Q29udGV4dCgpKSB7CiAg
ICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0
aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAogICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJv
bSB0aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4KICAgICAgICAgY29udGV4
dCA9IHByb3h5LT5jb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDk5NTVjYTkwNzBmMTMwYjgyNGJjMzMzODRkOWY0Zjhi
YjI0ZDcxZDIuLmMzOWM0NDYyZWU1MzZlOWM3MDAzY2Y5MDlmNDdmYzA0ZDY0NzBlMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0z
NzMsNyArMzczLDYgQEAgVGV4dFBvc2l0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxl
clBvc2l0aW9uKCkgY29uc3QKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpmaW5pc2hlZFdpdGhF
dmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgbV9wcm94eS0+ZmluaXNoZWRXaXRoRXZlbnQoZXZl
bnQpOwogfQogCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFNjcmlwdENvbnRyb2xsZXI6Om1haW5X
b3JsZENvbnRleHQoKQpAQCAtMzkwLDYgKzM4OSwyMCBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IFNjcmlwdENvbnRyb2xsZXI6Om1haW5Xb3JsZENvbnRleHQoRnJhbWUqIGZyYW1lKQogICAgIHJl
dHVybiBmcmFtZS0+c2NyaXB0KCktPm1haW5Xb3JsZENvbnRleHQoKTsKIH0KIAorYm9vbCBTY3Jp
cHRDb250cm9sbGVyOjptYXRjaGVzQ3VycmVudENvbnRleHQoKQoreworICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQ7CisgICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRl
ZENvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CisgICAgICAgIGNv
bnRleHQgPSBpc29sYXRlZENvbnRleHQtPnNoYXJlZENvbnRleHQoKS0+Z2V0KCk7CisgICAgICAg
IGlmIChtX2ZyYW1lICE9IHRvRnJhbWVJZk5vdERldGFjaGVkKGNvbnRleHQpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvd1NoZWxsKCktPmlu
aXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICAgICAgY29udGV4dCA9IHdpbmRvd1NoZWxsKCktPmNv
bnRleHQoKTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRleHQgPT0gY29udGV4dC0+R2V0Q3VycmVu
dCgpOworfQorCiAvLyBDcmVhdGUgYSBWOCBvYmplY3Qgd2l0aCBhbiBpbnRlcmNlcHRvciBvZiBO
UE9iamVjdFByb3BlcnR5R2V0dGVyLgogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpiaW5kVG9XaW5k
b3dPYmplY3QoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmplY3QqIG9iamVj
dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaApp
bmRleCBkYTZlZjkyZGJmYzQ3ODgwYTQ2Yzk1Y2IzZjk4ZTM3NTJjODdmMzI2Li4yZThjYTA3NWM0
MTBmNzQxNzY0OGQzMWJlNTExMGEzNTE5NjlmNzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCkBAIC0xNjEsNiArMTYxLDggQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IG1haW5Xb3JsZENvbnRleHQoRnJhbWUq
KTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IG1haW5Xb3JsZENvbnRleHQoKTsKIAorICAg
IGJvb2wgbWF0Y2hlc0N1cnJlbnRDb250ZXh0KCk7CisKICAgICAvLyBQYXNzIGNvbW1hbmQtbGlu
ZSBmbGFncyB0byB0aGUgSlMgZW5naW5lLgogICAgIHN0YXRpYyB2b2lkIHNldEZsYWdzKGNvbnN0
IGNoYXIqIHN0cmluZywgaW50IGxlbmd0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5jcHAKaW5kZXggYjFhMGZhMGE0MDAwZTU0YmE0NWFiZDBiYzJiOTRlN2Q3YzNmNjRiNC4u
YTIxMzQyMGYxMTFkODQyM2Q2MTBjYzE2YmUwMjI5ZmQ4YWQ4ZmM2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTI2NCwyOCArMjY0LDYgQEAgdjg6OkxvY2FsPHY4
OjpDb250ZXh0PiBWOFByb3h5Ojpjb250ZXh0KCkKICAgICByZXR1cm4gZnJhbWUoKS0+c2NyaXB0
KCktPm1haW5Xb3JsZENvbnRleHQoKTsKIH0KIAotdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBWOFBy
b3h5Ojppc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCkKLXsKLSAgICBJc29sYXRlZFdv
cmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSWQpOwot
ICAgIGlmIChpdGVyID09IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAgIHJldHVybiB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+KCk7Ci0gICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4
dD46Ok5ldyhpdGVyLT5zZWNvbmQtPmNvbnRleHQoKSk7Ci19Ci0KLWJvb2wgVjhQcm94eTo6bWF0
Y2hlc0N1cnJlbnRDb250ZXh0KCkKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0OwotICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29s
YXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewotICAgICAgICBjb250ZXh0ID0gaXNvbGF0ZWRD
b250ZXh0LT5zaGFyZWRDb250ZXh0KCktPmdldCgpOwotICAgICAgICBpZiAobV9mcmFtZSAhPSB0
b0ZyYW1lSWZOb3REZXRhY2hlZChjb250ZXh0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9IGVsc2UgewotICAgICAgICB3aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4dElmTmVlZGVk
KCk7Ci0gICAgICAgIGNvbnRleHQgPSB3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7Ci0gICAgfQot
ICAgIHJldHVybiBjb250ZXh0ID09IGNvbnRleHQtPkdldEN1cnJlbnQoKTsKLX0KLQogdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiB0b1Y4Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKIHsKICAgICBpZiAo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgK
aW5kZXggMWUzZDY3YjQ2ODdlZDYwMmFlYmYyYmJjYjk5NzhlYmQzOTgxZGNlYi4uMmVkYjU3MDEz
NTVmYTZlYTNjN2Q3ZTY5ODNkOWQ4NTg0NjY1YTRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4UHJveHkuaApAQCAtODcsOCArODcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgICAgIHZv
aWQgZmluaXNoZWRXaXRoRXZlbnQoRXZlbnQqKSB7IH0KLQogICAgICAgICAvLyBFdmFsdWF0ZSBh
IHNjcmlwdCBmaWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KICAgICAg
ICAgLy8gVGhlIGNhbGxlciBtdXN0IGhvbGQgYW4gZXhlY3V0aW9uIGNvbnRleHQuCiAgICAgICAg
IC8vIElmIGNhbm5vdCBldmFsdXRlIHRoZSBzY3JpcHQsIGl0IHJldHVybnMgYW4gZXJyb3IuCkBA
IC0xMDcsOCArMTA1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4g
Y29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRT
dGFydFBvc2l0aW9uLCB2ODo6U2NyaXB0RGF0YSogPSAwKTsKIAogICAgICAgICB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IGNvbnRleHQoKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBp
c29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCk7Ci0gICAgICAgIGJvb2wgbWF0Y2hlc0N1
cnJlbnRDb250ZXh0KCk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGV2ZW50dWFs
bHkgdGFrZSBET01XcmFwcGVyV29ybGQgYXJndW1lbnQhCiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCB3aWxsIGJlIHNvb24gcmVtb3ZlZCwgYXMgYWxsIG1ldGhvZHMgdGhhdCBhY2Nlc3Mg
d2luZG93U2hlbGwoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159855</attachid>
            <date>2012-08-21 21:14:32 -0700</date>
            <delta_ts>2012-08-23 04:18:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94596-20120822131430.patch</filename>
            <type>text/plain</type>
            <size>8915</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFhNTc1ZmE1OGUzOWM3
NmZjZjNmOTY1Y2ZhMmYwZTM3ZDY5ZWM0NC4uYjA1MjJlMThhMmFhNmJkOGI3OWZjYWM2ZDUwNGQ0
M2Q4MzNjY2JhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA4LTIxICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE1vdmUgbWF0
Y2hlc0N1cnJlbnRDb250ZXh0KCkgZnJvbSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0NTk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG8ga2lsbCBWOFBy
b3h5OgorCisgICAgICAgIC0gV2UgY2FuIG1vdmUgbWF0Y2hlc0N1cnJlbnRDb250ZXh0KCkgZnJv
bSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIuCisgICAgICAgIC0gV2UgY2FuIHJlbW92ZSBW
OFByb3h5Ojppc29sYXRlZFdvcmxkQ29udGV4dCgpIHNpbmNlIGl0IGlzIG5vdCB1c2VkIGJ5IGFu
eWJvZHkuCisgICAgICAgIC0gV2UgY2FuIHJlbW92ZSBWOFByb3h5OjpmaW5pc2hlZFdpdGhFdmVu
dCgpIHNpbmNlIGl0IGlzIGVtcHR5LgorCisgICAgICAgIE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKEdlbmVyYXRlVG9WOENvbnZlcnRlcnMpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwU2xvdyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Tm9kZTo6d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZmluaXNoZWRXaXRo
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bWF0Y2hlc0N1cnJl
bnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHku
aDoKKyAgICAgICAgKFY4UHJveHkpOgorCiAyMDEyLTA4LTE3ICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJFR1JFU1NJT04ocjEyNTQy
OCk6IGZhc3QvcHJvZmlsZXIvbmVzdGVkLXN0YXJ0LWFuZC1zdG9wLXByb2ZpbGVyLmh0bWwgZmFp
bHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KaW5kZXggMmMxNzBlMmM5MjQwODVjMDYwNjQzNmYyMDdmMDkyNmFiYmEwMzZmYS4uMDg2
YTJkMDE3NDc2NDk0OWIzZjMwZjczYTAzNTFhNzE1YTAzZDJhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTMzOTQsNyAr
MzM5NCw3IEBAIEVORAogCiAgICAgLy8gRW50ZXIgdGhlIG5vZGUncyBjb250ZXh0IGFuZCBjcmVh
dGUgdGhlIHdyYXBwZXIgaW4gdGhhdCBjb250ZXh0LgogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNvbnRleHQ7Ci0gICAgaWYgKHByb3h5ICYmICFwcm94eS0+bWF0Y2hlc0N1cnJlbnRDb250
ZXh0KCkpIHsKKyAgICBpZiAocHJveHkgJiYgIXByb3h5LT5mcmFtZSgpLT5zY3JpcHQoKS0+bWF0
Y2hlc0N1cnJlbnRDb250ZXh0KCkpIHsKICAgICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlLCB3ZSBl
bnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0CiAg
ICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRoYXQgd2UgYXJlIGFib3V0
IHRvIGVudGVyLgogICAgICAgICBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVE
T01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggODZiMWZkMmM4NjMxNmM2OGNmNDhiY2I5NTgy
MzM3MDZjZjNiMzY5NC4uMmE4MjFkMjE3ZDJmZDBiODgyMTcxM2EzNjQ2Njc5NTI5ZDM3YjVkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6d3JhcFNsb3coUGFz
c1JlZlB0cjxUZXN0QWN0aXZlRE9NTwogCiAgICAgLy8gRW50ZXIgdGhlIG5vZGUncyBjb250ZXh0
IGFuZCBjcmVhdGUgdGhlIHdyYXBwZXIgaW4gdGhhdCBjb250ZXh0LgogICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQ7Ci0gICAgaWYgKHByb3h5ICYmICFwcm94eS0+bWF0Y2hlc0N1
cnJlbnRDb250ZXh0KCkpIHsKKyAgICBpZiAocHJveHkgJiYgIXByb3h5LT5mcmFtZSgpLT5zY3Jp
cHQoKS0+bWF0Y2hlc0N1cnJlbnRDb250ZXh0KCkpIHsKICAgICAgICAgLy8gRm9yIHBlcmZvcm1h
bmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBj
b250ZXh0CiAgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRoYXQgd2Ug
YXJlIGFib3V0IHRvIGVudGVyLgogICAgICAgICBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmNwcAppbmRleCA3YjM4MGEwMGE3MDkxOTYwMDAyYWFjOGE5NjI5ZjgzYjQ0M2NmZTli
Li5jNzlmM2Y3NGFhNzAzM2IwMTYxMDRlYzRkODFjNTJiZTZkOGI1MzQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
CkBAIC0xMTgsNyArMTE4LDcgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROb2RlOjp3
cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3ROb2RlPiBpbXBsLCB2ODo6SXNvbGEKIAogICAgIC8vIEVu
dGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRlIHRoZSB3cmFwcGVyIGluIHRoYXQgY29u
dGV4dC4KICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OwotICAgIGlmIChwcm94
eSAmJiAhcHJveHktPm1hdGNoZXNDdXJyZW50Q29udGV4dCgpKSB7CisgICAgaWYgKHByb3h5ICYm
ICFwcm94eS0+ZnJhbWUoKS0+c2NyaXB0KCktPm1hdGNoZXNDdXJyZW50Q29udGV4dCgpKSB7CiAg
ICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0
aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAogICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJv
bSB0aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4KICAgICAgICAgY29udGV4
dCA9IHByb3h5LT5jb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDk5NTVjYTkwNzBmMTMwYjgyNGJjMzMzODRkOWY0Zjhi
YjI0ZDcxZDIuLmE4NmNhYjk5YmQwMjBhM2JiYjdhYTlkZDg5ZWQ3N2ZjYmM0NDNkMDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0z
NzMsNyArMzczLDYgQEAgVGV4dFBvc2l0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxl
clBvc2l0aW9uKCkgY29uc3QKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpmaW5pc2hlZFdpdGhF
dmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgbV9wcm94eS0+ZmluaXNoZWRXaXRoRXZlbnQoZXZl
bnQpOwogfQogCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFNjcmlwdENvbnRyb2xsZXI6Om1haW5X
b3JsZENvbnRleHQoKQpAQCAtMzkwLDYgKzM4OSwyNCBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IFNjcmlwdENvbnRyb2xsZXI6Om1haW5Xb3JsZENvbnRleHQoRnJhbWUqIGZyYW1lKQogICAgIHJl
dHVybiBmcmFtZS0+c2NyaXB0KCktPm1haW5Xb3JsZENvbnRleHQoKTsKIH0KIAorYm9vbCBTY3Jp
cHRDb250cm9sbGVyOjptYXRjaGVzQ3VycmVudENvbnRleHQoKQoreworICAgIC8vIFRoaXMgbWV0
aG9kIGlzIGVxdWl2YWxlbnQgdG8gJ3JldHVybiB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpID09
IGNvbnRleHRGb3JDdXJyZW50V29ybGQoKScsCisgICAgLy8gYnV0IGlzIHdyaXR0ZW4gd2l0aG91
dCB1c2luZyBjb250ZXh0Rm9yQ3VycmVudFdvcmxkKCkuCisgICAgLy8gR2l2ZW4gdGhhdCB0aGlz
IG1ldGhvZCBpcyB1c2VkIGJ5IGEgaG90IGNhbGwgcGF0aCBvZiBET00gb2JqZWN0IGNvbnN0cnVj
dG9yLAorICAgIC8vIHdlIHdhbnQgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGNvbnRleHRGb3JD
dXJyZW50V29ybGQoKSBjcmVhdGluZyBMb2NhbDxDb250ZXh0PiBldmVyeSB0aW1lLgorICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7CisgICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0
KiBpc29sYXRlZENvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7Cisg
ICAgICAgIGNvbnRleHQgPSBpc29sYXRlZENvbnRleHQtPnNoYXJlZENvbnRleHQoKS0+Z2V0KCk7
CisgICAgICAgIGlmIChtX2ZyYW1lICE9IHRvRnJhbWVJZk5vdERldGFjaGVkKGNvbnRleHQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvd1No
ZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICAgICAgY29udGV4dCA9IHdpbmRvd1No
ZWxsKCktPmNvbnRleHQoKTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRleHQgPT0gY29udGV4dC0+
R2V0Q3VycmVudCgpOworfQorCiAvLyBDcmVhdGUgYSBWOCBvYmplY3Qgd2l0aCBhbiBpbnRlcmNl
cHRvciBvZiBOUE9iamVjdFByb3BlcnR5R2V0dGVyLgogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpi
aW5kVG9XaW5kb3dPYmplY3QoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmpl
Y3QqIG9iamVjdCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaAppbmRleCBkYTZlZjkyZGJmYzQ3ODgwYTQ2Yzk1Y2IzZjk4ZTM3NTJjODdmMzI2Li4y
ZThjYTA3NWM0MTBmNzQxNzY0OGQzMWJlNTExMGEzNTE5NjlmNzdjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCkBAIC0xNjEsNiArMTYxLDggQEAg
cHVibGljOgogICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IG1haW5Xb3JsZENvbnRl
eHQoRnJhbWUqKTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IG1haW5Xb3JsZENvbnRleHQo
KTsKIAorICAgIGJvb2wgbWF0Y2hlc0N1cnJlbnRDb250ZXh0KCk7CisKICAgICAvLyBQYXNzIGNv
bW1hbmQtbGluZSBmbGFncyB0byB0aGUgSlMgZW5naW5lLgogICAgIHN0YXRpYyB2b2lkIHNldEZs
YWdzKGNvbnN0IGNoYXIqIHN0cmluZywgaW50IGxlbmd0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHAKaW5kZXggYjFhMGZhMGE0MDAwZTU0YmE0NWFiZDBiYzJiOTRlN2Q3
YzNmNjRiNC4uYTIxMzQyMGYxMTFkODQyM2Q2MTBjYzE2YmUwMjI5ZmQ4YWQ4ZmM2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTI2NCwyOCArMjY0LDYgQEAgdjg6
OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5Ojpjb250ZXh0KCkKICAgICByZXR1cm4gZnJhbWUo
KS0+c2NyaXB0KCktPm1haW5Xb3JsZENvbnRleHQoKTsKIH0KIAotdjg6OkxvY2FsPHY4OjpDb250
ZXh0PiBWOFByb3h5Ojppc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCkKLXsKLSAgICBJ
c29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdv
cmxkSWQpOwotICAgIGlmIChpdGVyID09IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCi0gICAgICAg
IHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+KCk7Ci0gICAgcmV0dXJuIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD46Ok5ldyhpdGVyLT5zZWNvbmQtPmNvbnRleHQoKSk7Ci19Ci0KLWJvb2wgVjhQ
cm94eTo6bWF0Y2hlc0N1cnJlbnRDb250ZXh0KCkKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0OwotICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0
ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewotICAgICAgICBjb250ZXh0ID0g
aXNvbGF0ZWRDb250ZXh0LT5zaGFyZWRDb250ZXh0KCktPmdldCgpOwotICAgICAgICBpZiAobV9m
cmFtZSAhPSB0b0ZyYW1lSWZOb3REZXRhY2hlZChjb250ZXh0KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICB3aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4
dElmTmVlZGVkKCk7Ci0gICAgICAgIGNvbnRleHQgPSB3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7
Ci0gICAgfQotICAgIHJldHVybiBjb250ZXh0ID09IGNvbnRleHQtPkdldEN1cnJlbnQoKTsKLX0K
LQogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiB0b1Y4Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKIHsK
ICAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmgKaW5kZXggMWUzZDY3YjQ2ODdlZDYwMmFlYmYyYmJjYjk5NzhlYmQzOTgxZGNlYi4u
MmVkYjU3MDEzNTVmYTZlYTNjN2Q3ZTY5ODNkOWQ4NTg0NjY1YTRmMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAtODcsOCArODcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCi0g
ICAgICAgIHZvaWQgZmluaXNoZWRXaXRoRXZlbnQoRXZlbnQqKSB7IH0KLQogICAgICAgICAvLyBF
dmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVu
dC4KICAgICAgICAgLy8gVGhlIGNhbGxlciBtdXN0IGhvbGQgYW4gZXhlY3V0aW9uIGNvbnRleHQu
CiAgICAgICAgIC8vIElmIGNhbm5vdCBldmFsdXRlIHRoZSBzY3JpcHQsIGl0IHJldHVybnMgYW4g
ZXJyb3IuCkBAIC0xMDcsOCArMTA1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6
OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9u
JiBzY3JpcHRTdGFydFBvc2l0aW9uLCB2ODo6U2NyaXB0RGF0YSogPSAwKTsKIAogICAgICAgICB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBpc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCk7Ci0gICAgICAgIGJvb2wg
bWF0Y2hlc0N1cnJlbnRDb250ZXh0KCk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGV2ZW50dWFsbHkgdGFrZSBET01XcmFwcGVyV29ybGQgYXJndW1lbnQhCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCB3aWxsIGJlIHNvb24gcmVtb3ZlZCwgYXMgYWxsIG1ldGhvZHMgdGhh
dCBhY2Nlc3Mgd2luZG93U2hlbGwoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>