<?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>68939</bug_id>
          
          <creation_ts>2011-09-27 14:37:25 -0700</creation_ts>
          <short_desc>Simplify ReplaceSelectionCommand::positionAtStartOfInsertedContent</short_desc>
          <delta_ts>2011-09-27 22:03:17 -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>HTML Editing</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>68874</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>474245</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 14:37:25 -0700</bug_when>
    <thetext>I don&apos;t think we should be calling nextCandidate in positionAtStartOfInsertedContent. We need to simplify this function in order to resolve the bug 68874.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474298</commentid>
    <comment_count>1</comment_count>
      <attachid>108916</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 15:36:46 -0700</bug_when>
    <thetext>Created attachment 108916
Simplified the function with additional fixes and refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474322</commentid>
    <comment_count>2</comment_count>
      <attachid>108916</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 16:07:19 -0700</bug_when>
    <thetext>Comment on attachment 108916
Simplified the function with additional fixes and refactoring

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

&gt; Source/WebCore/rendering/RenderText.cpp:1606
&gt; -unsigned RenderText::caretMaxRenderedOffset() const
&gt; +unsigned RenderText::renderedTextLength() const

Come to think of it, caretMaxOffset should call this function. Will do in a minute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474328</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 16:19:31 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 108916 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108916&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderText.cpp:1606
&gt; &gt; -unsigned RenderText::caretMaxRenderedOffset() const
&gt; &gt; +unsigned RenderText::renderedTextLength() const
&gt; 
&gt; Come to think of it, caretMaxOffset should call this function. Will do in a minute.

Ugh... not really. That won&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474334</commentid>
    <comment_count>4</comment_count>
      <attachid>108926</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 16:24:26 -0700</bug_when>
    <thetext>Created attachment 108926
new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474383</commentid>
    <comment_count>5</comment_count>
      <attachid>108926</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-27 17:15:40 -0700</bug_when>
    <thetext>Comment on attachment 108926
new patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        This change revealed a bug in removeUnrenderedTextNodesAtEnds that text nodes without any visible
&gt; +        text at ends are not removed when it has a render object. Fixed the bug by checking the length of
&gt; +        the rendered text.

Since you fixed a bug we need to add a test case to show that bug in action, or call out which test cases shows us the bug.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:559
&gt; +    return node-&gt;renderer() &amp;&amp; node-&gt;renderer()-&gt;isText() &amp;&amp; toRenderText(node-&gt;renderer())-&gt;renderedTextLength() &gt; 0;

I think that text nodes are guaranteed to have RenderText renderers or no renderer at all, so I don’t think the isText check is needed. If it is needed, we should check in a test case that exercises that code path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474388</commentid>
    <comment_count>6</comment_count>
      <attachid>108926</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 17:22:23 -0700</bug_when>
    <thetext>Comment on attachment 108926
new patch

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

&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt; +        the rendered text.
&gt; 
&gt; Since you fixed a bug we need to add a test case to show that bug in action, or call out which test cases shows us the bug.

It&apos;s editing/pasteboard/pasting-word-in-div-extra-line.html.

&gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:559
&gt;&gt; +    return node-&gt;renderer() &amp;&amp; node-&gt;renderer()-&gt;isText() &amp;&amp; toRenderText(node-&gt;renderer())-&gt;renderedTextLength() &gt; 0;
&gt; 
&gt; I think that text nodes are guaranteed to have RenderText renderers or no renderer at all, so I don’t think the isText check is needed. If it is needed, we should check in a test case that exercises that code path.

On the other hand, I didn&apos;t want to make this function hard to use. I don&apos;t want someone to start calling this function without checking that node is a text node. I guess I can change the argument type to Text*?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474402</commentid>
    <comment_count>7</comment_count>
      <attachid>108943</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 17:38:42 -0700</bug_when>
    <thetext>Created attachment 108943
Addressed comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474416</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 18:12:23 -0700</bug_when>
    <thetext>Thanks for reviewing these patches!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474490</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 22:03:17 -0700</bug_when>
    <thetext>Committed r96187: &lt;http://trac.webkit.org/changeset/96187&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108916</attachid>
            <date>2011-09-27 15:36:46 -0700</date>
            <delta_ts>2011-09-27 16:24:22 -0700</delta_ts>
            <desc>Simplified the function with additional fixes and refactoring</desc>
            <filename>bug-68939-20110927153645.patch</filename>
            <type>text/plain</type>
            <size>12842</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MTYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDktMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODkzOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZpZWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50LgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIHJldmVhbGVkIGEgYnVnIGluIHJlbW92ZVVucmVuZGVyZWRUZXh0Tm9k
ZXNBdEVuZHMgdGhhdCB0ZXh0IG5vZGVzIHdpdGhvdXQgYW55IHZpc2libGUKKyAgICAgICAgdGV4
dCBhdCBlbmRzIGFyZSBub3QgcmVtb3ZlZCB3aGVuIGl0IGhhcyBhIHJlbmRlciBvYmplY3QuIEZp
eGVkIHRoZSBidWcgYnkgY2hlY2tpbmcgdGhlIGxlbmd0aCBvZgorICAgICAgICB0aGUgcmVuZGVy
ZWQgdGV4dC4KKworICAgICAgICBUaGlzIGZ1cnRoZXIgcmV2ZWFsZWQgdGhhdCBjYXJldE1heFJl
bmRlcmVkT2Zmc2V0IGRvZXNuJ3QgcmV0dXJuIGFuIG9mZnNldCBhbmQgY2FyZXRNYXhSZW5kZXJl
ZE9mZnNldAorICAgICAgICBvbiBJbmxpbmVCb3gsIElubGluZVRleHRCb3gsIFJlbmRlck9iamVj
dCwgUmVuZGVyQlIsIFJlbmRlclBsYWNlZCBhcmUgbmV2ZXIgY2FsbGVkLiBUbyBhZGRyZXNzIHRo
aXMKKyAgICAgICAgaXNzdWUsIHJlbmFtZWQgY2FyZXRNYXhSZW5kZXJlZE9mZnNldCB0byByZW5k
ZXJlZFRleHRMZW5ndGggZm9yIFJlbmRlclRleHQgYW5kIHJlbW92ZWQgdGhlIHJlc3QuCisKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FyZXRNYXhSZW5k
ZXJlZE9mZnNldCk6IENhbGxzIHJlbmRlcmVkVGV4dExlbmd0aC4KKyAgICAgICAgKiBlZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vZGVIYXNW
aXNpYmxlUmVuZGVyVGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMpOiBDYWxscyBub2Rl
SGFzVmlzaWJsZVJlbmRlclRleHQuCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6cG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQpOiBTaW1wbGlmaWVkLgor
ICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
dGFydE9mUGFyYWdyYXBoKTogQ2FsbHMgcmVuZGVyZWRUZXh0TGVuZ3RoLgorICAgICAgICAoV2Vi
Q29yZTo6ZW5kT2ZQYXJhZ3JhcGgpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
Qm94LmNwcDogUmVtb3ZlZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0LgorICAgICAgICAqIHJlbmRl
cmluZy9JbmxpbmVCb3guaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOiBEaXR0
by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQlIuY3BwOiBEaXR0by4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQlIuaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDogRGl0dG8uCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmg6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnJlbmRl
cmVkVGV4dExlbmd0aCk6IFJlbmFtZWQgZnJvbSBjYXJldE1heFJlbmRlcmVkT2Zmc2V0LgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisKIDIwMTEtMDktMjcgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgYSBtZWNoYW5pc20gdG8g
dGVzdCBmb3IgdGhlIGNvbXBvc2l0aW5nIHRyZWUgbXV0YXRlZCBkdXJpbmcgcGFpbnRpbmcKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTksOSArODk5LDExIEBA
IGJvb2wgUG9zaXRpb246OmluUmVuZGVyZWRUZXh0KCkgY29uc3QKIHN0YXRpYyB1bnNpZ25lZCBj
YXJldE1heFJlbmRlcmVkT2Zmc2V0KGNvbnN0IE5vZGUqIG4pCiB7CiAgICAgUmVuZGVyT2JqZWN0
KiByID0gbi0+cmVuZGVyZXIoKTsKKyAgICBpZiAociAmJiByLT5pc1RleHQoKSkKKyAgICAgICAg
cmV0dXJuIHRvUmVuZGVyVGV4dChyKS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCk7CiAgICAgaWYgKHIp
Ci0gICAgICAgIHJldHVybiByLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCk7Ci0gICAgCisgICAg
ICAgIHJldHVybiByLT5jYXJldE1heE9mZnNldCgpIC0gci0+Y2FyZXRNaW5PZmZzZXQoKTsKKwog
ICAgIGlmIChuLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBDaGFyYWN0ZXJEYXRhKj4obiktPmxlbmd0aCgpOwogICAgIHJldHVybiAxOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDk2MTI2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJTbWFy
dFJlcGxhY2UuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJodG1sZWRp
dGluZy5oIgpAQCAtNTUzLDExICs1NTQsMTUgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6cmVtb3ZlUmVkdQogICAgIH0KIH0KIAorc3RhdGljIGlubGluZSBib29sIG5vZGVIYXNWaXNp
YmxlUmVuZGVyVGV4dChOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigp
ICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChub2RlLT5yZW5k
ZXJlcigpKS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkgPiAwOworfQorCiB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRzKCkKIHsKICAgICBk
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBp
ZiAoIW1fbGFzdExlYWZJbnNlcnRlZC0+cmVuZGVyZXIoKQotICAgICAgICAmJiBtX2xhc3RMZWFm
SW5zZXJ0ZWQtPmlzVGV4dE5vZGUoKQorICAgIGlmIChtX2xhc3RMZWFmSW5zZXJ0ZWQtPmlzVGV4
dE5vZGUoKSAmJiAhbm9kZUhhc1Zpc2libGVSZW5kZXJUZXh0KG1fbGFzdExlYWZJbnNlcnRlZC5n
ZXQoKSkKICAgICAgICAgJiYgIWVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShtX2xhc3RMZWFmSW5zZXJ0ZWQuZ2V0KCkpLCBzZWxlY3RUYWcpCiAgICAgICAg
ICYmICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobV9s
YXN0TGVhZkluc2VydGVkLmdldCgpKSwgc2NyaXB0VGFnKSkgewogICAgICAgICBpZiAobV9maXJz
dE5vZGVJbnNlcnRlZCA9PSBtX2xhc3RMZWFmSW5zZXJ0ZWQpIHsKQEAgLTU3Myw4ICs1NzgsNyBA
QCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlCiAgICAgCiAgICAgLy8g
V2UgZG9uJ3QgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBtX2ZpcnN0Tm9kZUluc2VydGVkIGlzbid0
IGluc2lkZSBhIHNlbGVjdCBvciBzY3JpcHQgZWxlbWVudCwgYmVjYXVzZQogICAgIC8vIGl0IGlz
IGEgdG9wIGxldmVsIG5vZGUgaW4gdGhlIGZyYWdtZW50IGFuZCB0aGUgdXNlciBjYW4ndCBpbnNl
cnQgaW50byB0aG9zZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQtPnJl
bmRlcmVyKCkgJiYKLSAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZC0+aXNUZXh0Tm9kZSgpKSB7
CisgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQtPmlzVGV4dE5vZGUoKSAmJiAhbm9kZUhhc1Zp
c2libGVSZW5kZXJUZXh0KG1fZmlyc3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpKSB7CiAgICAgICAgIGlm
IChtX2ZpcnN0Tm9kZUluc2VydGVkID09IG1fbGFzdExlYWZJbnNlcnRlZCkgewogICAgICAgICAg
ICAgcmVtb3ZlTm9kZShtX2ZpcnN0Tm9kZUluc2VydGVkLmdldCgpKTsKICAgICAgICAgICAgIG1f
Zmlyc3ROb2RlSW5zZXJ0ZWQgPSAwOwpAQCAtNjA2LDggKzYxMCw3IEBAIFZpc2libGVQb3NpdGlv
biBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDoKIAogVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpCiB7Ci0gICAg
Ly8gUmV0dXJuIHRoZSBpbnNlcnRlZCBjb250ZW50J3MgZmlyc3QgVmlzaWJsZVBvc2l0aW9uLgot
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obmV4dENhbmRpZGF0ZShwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZShtX2ZpcnN0Tm9kZUluc2VydGVkLmdldCgpKSkpOworICAgIHJldHVybiBmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiB9CiAK
IHN0YXRpYyB2b2lkIHJlbW92ZUhlYWRDb250ZW50cyhSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFn
bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2
aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NjQsNyArNzY0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
T2ZQYXJhZ3JhcGgoY29uc3QgVgogICAgICAgICBpZiAoci0+aXNCUigpIHx8IGlzQmxvY2sobikp
CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBpZiAoci0+aXNUZXh0KCkgJiYgci0+Y2Fy
ZXRNYXhSZW5kZXJlZE9mZnNldCgpID4gMCkgeworICAgICAgICBpZiAoci0+aXNUZXh0KCkgJiYg
dG9SZW5kZXJUZXh0KHIpLT5yZW5kZXJlZFRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAgQVNT
RVJUKG4tPmlzVGV4dE5vZGUoKSk7CiAgICAgICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICAgICAgICAgIGlmIChzdHlsZS0+cHJlc2VydmVOZXds
aW5lKCkpIHsKQEAgLTg0Miw3ICs4NDIsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3Jh
cGgoY29uc3QgVmlzCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvLyBGSVhNRTogV2Ug
YXZvaWQgcmV0dXJuaW5nIGEgcG9zaXRpb24gd2hlcmUgdGhlIHJlbmRlcmVyIGNhbid0IGFjY2Vw
dCB0aGUgY2FyZXQuCi0gICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiByLT5jYXJldE1heFJlbmRl
cmVkT2Zmc2V0KCkgPiAwKSB7CisgICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRl
eHQociktPnJlbmRlcmVkVGV4dExlbmd0aCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobi0+aXNU
ZXh0Tm9kZSgpKTsKICAgICAgICAgICAgIGludCBsZW5ndGggPSB0b1JlbmRlclRleHQociktPnRl
eHRMZW5ndGgoKTsKICAgICAgICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHJl
dmlzaW9uIDk2MTI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NSwxMSArMTU1LDYgQEAgaW50IElubGluZUJveDo6Y2FyZXRN
YXhPZmZzZXQoKSBjb25zdCAKICAgICByZXR1cm4gbV9yZW5kZXJlci0+Y2FyZXRNYXhPZmZzZXQo
KTsgCiB9CiAKLXVuc2lnbmVkIElubGluZUJveDo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNv
bnN0IAoteyAKLSAgICByZXR1cm4gMTsgCi19Ci0KIHZvaWQgSW5saW5lQm94OjpkaXJ0eUxpbmVC
b3hlcygpCiB7CiAgICAgbWFya0RpcnR5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUJveC5oCShyZXZpc2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDcgKzI3OCw2IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1h
eFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgp
IGNvbnN0IHsgcmV0dXJuIG1fYmlkaUVtYmVkZGluZ0xldmVsOyB9CiAgICAgdm9pZCBzZXRCaWRp
TGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkgeyBtX2JpZGlFbWJlZGRpbmdMZXZlbCA9IGxldmVs
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShy
ZXZpc2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwOSwxMSArMTIwOSw2IEBAIGludCBJbmxpbmVUZXh0
Qm94OjpjYXJldE1heE9mZnNldCgpIGNvbnMKICAgICByZXR1cm4gbV9zdGFydCArIG1fbGVuOwog
fQogCi11bnNpZ25lZCBJbmxpbmVUZXh0Qm94OjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9zdGFydCArIG1fbGVuOwotfQotCiBmbG9hdCBJbmxpbmVUZXh0
Qm94Ojp0ZXh0UG9zKCkgY29uc3QKIHsKICAgICAvLyBXaGVuIGNvbXB1dGluZyB0aGUgd2lkdGgg
b2YgYSB0ZXh0IHJ1biwgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlv
bnNGb3JMaW5lKCkgZG9lc24ndCBpbmNsdWRlIHRoZSBhY3R1YWwgb2Zmc2V0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDk2MTI2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpA
QCAtMTQ2LDggKzE0Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjYXJldE1heE9mZnNl
dCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdW5zaWduZWQgY2FyZXRNYXhSZW5k
ZXJlZE9mZnNldCgpIGNvbnN0OwotCiAgICAgZmxvYXQgdGV4dFBvcygpIGNvbnN0OyAvLyByZXR1
cm5zIHRoZSB4IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBsZWZ0IHN0YXJ0IG9mIHRoZSB0ZXh0
IGxpbmUuCiAKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
Ui5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmNw
cAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsNiBAQCBpbnQgUmVuZGVyQlI6OmNhcmV0
TWF4T2Zmc2V0KCkgY29uc3QgCiAgICAgcmV0dXJuIDE7CiB9CiAKLXVuc2lnbmVkIFJlbmRlckJS
OjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMTsKLX0KLQog
VmlzaWJsZVBvc2l0aW9uIFJlbmRlckJSOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JikKIHsKICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0p
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmgJKHJldmlzaW9uIDk2MTI2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgdW5zaWduZWQgY2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0OwogCiAgICAgdmly
dHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2
aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU1MCwxMSArMjU1MCw2IEBAIGludCBSZW5kZXJPYmplY3Q6
OmNhcmV0TWF4T2Zmc2V0KCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgUmVu
ZGVyT2JqZWN0OjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MDsKLX0KLQogaW50IFJlbmRlck9iamVjdDo6cHJldmlvdXNPZmZzZXQoaW50IGN1cnJlbnQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGN1cnJlbnQgLSAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MSw3ICs3OTEsNiBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25l
ZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBwcmV2
aW91c09mZnNldChpbnQgY3VycmVudCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcHJldmlvdXNP
ZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKGludCBjdXJyZW50KSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gOTYxMjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTAsMTEgKzQxMCw2IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQ
cmVmZXJyZWRMb2cKICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwog
fQogCi11bnNpZ25lZCBSZW5kZXJSZXBsYWNlZDo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIDE7IAotfQotCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVwbGFj
ZWQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewogICAgIC8v
IEZJWE1FOiBUaGlzIGNvZGUgaXMgYnVnZ3kgaWYgdGhlIHJlcGxhY2VkIGVsZW1lbnQgaXMgcmVs
YXRpdmUgcG9zaXRpb25lZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5oCShyZXZpc2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw2IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OwogCi0gICAgdmlydHVh
bCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYpOwogICAg
IAogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZp
c2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYwMyw3ICsxNjAzLDcgQEAgaW50IFJlbmRlclRleHQ6OmNhcmV0
TWF4T2Zmc2V0KCkgY29uc3QKICAgICByZXR1cm4gbWF4T2Zmc2V0OwogfQogCi11bnNpZ25lZCBS
ZW5kZXJUZXh0OjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKK3Vuc2lnbmVkIFJlbmRl
clRleHQ6OnJlbmRlcmVkVGV4dExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaW50IGwgPSAwOwogICAg
IGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
CShyZXZpc2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4
T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zm
c2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCByZW5kZXJlZFRleHRMZW5ndGgoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgaW50IHByZXZpb3VzT2Zmc2V0KGludCBjdXJyZW50KSBjb25z
dDsKICAgICB2aXJ0dWFsIGludCBwcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24oaW50
IGN1cnJlbnQpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108926</attachid>
            <date>2011-09-27 16:24:26 -0700</date>
            <delta_ts>2011-09-27 17:38:39 -0700</delta_ts>
            <desc>new patch</desc>
            <filename>bug-68939-20110927162425.patch</filename>
            <type>text/plain</type>
            <size>14753</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MTY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDktMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODkzOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZpZWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50LgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIHJldmVhbGVkIGEgYnVnIGluIHJlbW92ZVVucmVuZGVyZWRUZXh0Tm9k
ZXNBdEVuZHMgdGhhdCB0ZXh0IG5vZGVzIHdpdGhvdXQgYW55IHZpc2libGUKKyAgICAgICAgdGV4
dCBhdCBlbmRzIGFyZSBub3QgcmVtb3ZlZCB3aGVuIGl0IGhhcyBhIHJlbmRlciBvYmplY3QuIEZp
eGVkIHRoZSBidWcgYnkgY2hlY2tpbmcgdGhlIGxlbmd0aCBvZgorICAgICAgICB0aGUgcmVuZGVy
ZWQgdGV4dC4KKworICAgICAgICBUaGlzIGZ1cnRoZXIgcmV2ZWFsZWQgdGhhdCBjYXJldE1heFJl
bmRlcmVkT2Zmc2V0IGRvZXNuJ3QgcmV0dXJuIGFuIG9mZnNldCBhbmQgY2FyZXRNYXhSZW5kZXJl
ZE9mZnNldAorICAgICAgICBvbiBJbmxpbmVCb3gsIElubGluZVRleHRCb3gsIFJlbmRlck9iamVj
dCwgUmVuZGVyQlIsIFJlbmRlclBsYWNlZCBhcmUgbmV2ZXIgY2FsbGVkLiBUbyBhZGRyZXNzIHRo
aXMKKyAgICAgICAgaXNzdWUsIHJlbmFtZWQgY2FyZXRNYXhSZW5kZXJlZE9mZnNldCB0byByZW5k
ZXJlZFRleHRMZW5ndGggZm9yIFJlbmRlclRleHQgYW5kIHJlbW92ZWQgdGhlIHJlc3QuCisKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnJl
bmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vZGVIYXNWaXNpYmxlUmVuZGVy
VGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OnJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMpOiBDYWxscyBub2RlSGFzVmlzaWJsZVJl
bmRlclRleHQuCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9z
aXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQpOiBTaW1wbGlmaWVkLgorICAgICAgICAqIGVk
aXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdGFydE9mUGFyYWdy
YXBoKTogQ2FsbHMgcmVuZGVyZWRUZXh0TGVuZ3RoLgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQ
YXJhZ3JhcGgpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDogUmVt
b3ZlZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0LgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVC
b3guaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOiBEaXR0
by4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQlIuY3BwOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQlIuaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6IERp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnJlbmRlcmVkVGV4dExlbmd0
aCk6IFJlbmFtZWQgZnJvbSBjYXJldE1heFJlbmRlcmVkT2Zmc2V0LgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Lmg6CisKIDIwMTEtMDktMjcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gZWxlbWVudC5kYXRhc2V0Lm5vbkV4aXN0aW5nS2V5
IHNob3VsZCByZXR1cm4gdW5kZWZpbmVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShy
ZXZpc2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg5NiwxNyArODk2LDYgQEAgYm9vbCBQb3NpdGlvbjo6aW5SZW5kZXJlZFRl
eHQoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNhcmV0
TWF4UmVuZGVyZWRPZmZzZXQoY29uc3QgTm9kZSogbikKLXsKLSAgICBSZW5kZXJPYmplY3QqIHIg
PSBuLT5yZW5kZXJlcigpOwotICAgIGlmIChyKQotICAgICAgICByZXR1cm4gci0+Y2FyZXRNYXhS
ZW5kZXJlZE9mZnNldCgpOwotICAgIAotICAgIGlmIChuLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkp
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDaGFyYWN0ZXJEYXRhKj4obiktPmxl
bmd0aCgpOwotICAgIHJldHVybiAxOwotfQotCiBib29sIFBvc2l0aW9uOjppc1JlbmRlcmVkQ2hh
cmFjdGVyKCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwgIWRlcHJlY2F0ZWROb2RlKCkt
PmlzVGV4dE5vZGUoKSkKQEAgLTk5Miw4ICs5ODEsOCBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJz
SW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgTE9HKEVkaXRpbmcsICJ0aGlzUmVuZGVyZWRPZmZzZXQ6
ICAgICAgICAgJWRcbiIsIHRoaXNSZW5kZXJlZE9mZnNldCk7CiAgICAgTE9HKEVkaXRpbmcsICJw
b3NSZW5kZXJlcjogICAgICAgICAgICAlcCBbJXBdXG4iLCBwb3NSZW5kZXJlciwgYjIpOwogICAg
IExPRyhFZGl0aW5nLCAicG9zUmVuZGVyZWRPZmZzZXQ6ICAgICAgJWRcbiIsIHBvc1JlbmRlcmVk
T2Zmc2V0KTsKLSAgICBMT0coRWRpdGluZywgIm5vZGUgbWluL21heDogICAgICAgICAgICVkOiVk
XG4iLCBjYXJldE1pbk9mZnNldChkZXByZWNhdGVkTm9kZSgpKSwgY2FyZXRNYXhSZW5kZXJlZE9m
ZnNldChkZXByZWNhdGVkTm9kZSgpKSk7Ci0gICAgTE9HKEVkaXRpbmcsICJwb3Mgbm9kZSBtaW4v
bWF4OiAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQocG9zLmRlcHJlY2F0ZWROb2RlKCkp
LCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KHBvcy5kZXByZWNhdGVkTm9kZSgpKSk7CisgICAgTE9H
KEVkaXRpbmcsICJub2RlIG1pbi9tYXg6ICAgICAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZz
ZXQoZGVwcmVjYXRlZE5vZGUoKSksIGNhcmV0TWF4T2Zmc2V0KGRlcHJlY2F0ZWROb2RlKCkpKTsK
KyAgICBMT0coRWRpdGluZywgInBvcyBub2RlIG1pbi9tYXg6ICAgICAgICVkOiVkXG4iLCBjYXJl
dE1pbk9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSksIGNhcmV0TWF4T2Zmc2V0KHBvcy5kZXBy
ZWNhdGVkTm9kZSgpKSk7CiAgICAgTE9HKEVkaXRpbmcsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAog
ICAgIGlmICghYjEgfHwgIWIyKSB7CkBAIC0xMDA1LDEyICs5OTQsMTIgQEAgYm9vbCBQb3NpdGlv
bjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpbwogICAgIH0KIAogICAgIGlmIChuZXh0UmVuZGVy
ZWRFZGl0YWJsZShkZXByZWNhdGVkTm9kZSgpKSA9PSBwb3MuZGVwcmVjYXRlZE5vZGUoKQotICAg
ICAgICAmJiB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gKGludCljYXJldE1heFJlbmRlcmVkT2Zmc2V0
KGRlcHJlY2F0ZWROb2RlKCkpICYmICFwb3NSZW5kZXJlZE9mZnNldCkgeworICAgICAgICAmJiB0
aGlzUmVuZGVyZWRPZmZzZXQgPT0gY2FyZXRNYXhPZmZzZXQoZGVwcmVjYXRlZE5vZGUoKSkgJiYg
IXBvc1JlbmRlcmVkT2Zmc2V0KSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
CiAgICAgaWYgKHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShkZXByZWNhdGVkTm9kZSgpKSA9PSBw
b3MuZGVwcmVjYXRlZE5vZGUoKQotICAgICAgICAmJiAhdGhpc1JlbmRlcmVkT2Zmc2V0ICYmIHBv
c1JlbmRlcmVkT2Zmc2V0ID09IChpbnQpY2FyZXRNYXhSZW5kZXJlZE9mZnNldChwb3MuZGVwcmVj
YXRlZE5vZGUoKSkpIHsKKyAgICAgICAgJiYgIXRoaXNSZW5kZXJlZE9mZnNldCAmJiBwb3NSZW5k
ZXJlZE9mZnNldCA9PSBjYXJldE1heE9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDk2MTI2KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJTbWFydFJlcGxhY2UuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtNTUzLDExICs1NTQsMTUg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQogICAgIH0KIH0KIAor
c3RhdGljIGlubGluZSBib29sIG5vZGVIYXNWaXNpYmxlUmVuZGVyVGV4dChOb2RlKiBub2RlKQor
eworICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4
dCgpICYmIHRvUmVuZGVyVGV4dChub2RlLT5yZW5kZXJlcigpKS0+cmVuZGVyZWRUZXh0TGVuZ3Ro
KCkgPiAwOworfQorCiB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRl
cmVkVGV4dE5vZGVzQXRFbmRzKCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoIW1fbGFzdExlYWZJbnNlcnRlZC0+cmVu
ZGVyZXIoKQotICAgICAgICAmJiBtX2xhc3RMZWFmSW5zZXJ0ZWQtPmlzVGV4dE5vZGUoKQorICAg
IGlmIChtX2xhc3RMZWFmSW5zZXJ0ZWQtPmlzVGV4dE5vZGUoKSAmJiAhbm9kZUhhc1Zpc2libGVS
ZW5kZXJUZXh0KG1fbGFzdExlYWZJbnNlcnRlZC5nZXQoKSkKICAgICAgICAgJiYgIWVuY2xvc2lu
Z05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShtX2xhc3RMZWFmSW5zZXJ0
ZWQuZ2V0KCkpLCBzZWxlY3RUYWcpCiAgICAgICAgICYmICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobV9sYXN0TGVhZkluc2VydGVkLmdldCgpKSwgc2Ny
aXB0VGFnKSkgewogICAgICAgICBpZiAobV9maXJzdE5vZGVJbnNlcnRlZCA9PSBtX2xhc3RMZWFm
SW5zZXJ0ZWQpIHsKQEAgLTU3Myw4ICs1NzgsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpyZW1vdmVVbnJlCiAgICAgCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYWtlIHN1cmUg
dGhhdCBtX2ZpcnN0Tm9kZUluc2VydGVkIGlzbid0IGluc2lkZSBhIHNlbGVjdCBvciBzY3JpcHQg
ZWxlbWVudCwgYmVjYXVzZQogICAgIC8vIGl0IGlzIGEgdG9wIGxldmVsIG5vZGUgaW4gdGhlIGZy
YWdtZW50IGFuZCB0aGUgdXNlciBjYW4ndCBpbnNlcnQgaW50byB0aG9zZSBlbGVtZW50cy4KLSAg
ICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQtPnJlbmRlcmVyKCkgJiYKLSAgICAgICAgbV9maXJz
dE5vZGVJbnNlcnRlZC0+aXNUZXh0Tm9kZSgpKSB7CisgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0
ZWQtPmlzVGV4dE5vZGUoKSAmJiAhbm9kZUhhc1Zpc2libGVSZW5kZXJUZXh0KG1fZmlyc3ROb2Rl
SW5zZXJ0ZWQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkID09IG1f
bGFzdExlYWZJbnNlcnRlZCkgewogICAgICAgICAgICAgcmVtb3ZlTm9kZShtX2ZpcnN0Tm9kZUlu
c2VydGVkLmdldCgpKTsKICAgICAgICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSAwOwpAQCAt
NjA2LDggKzYxMCw3IEBAIFZpc2libGVQb3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDoK
IAogVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0U3Rh
cnRPZkluc2VydGVkQ29udGVudCgpCiB7Ci0gICAgLy8gUmV0dXJuIHRoZSBpbnNlcnRlZCBjb250
ZW50J3MgZmlyc3QgVmlzaWJsZVBvc2l0aW9uLgotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
bmV4dENhbmRpZGF0ZShwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShtX2ZpcnN0Tm9kZUluc2Vy
dGVkLmdldCgpKSkpOworICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobV9m
aXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZUhlYWRDb250
ZW50cyhSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFnbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjQsNyAr
NzY0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogICAgICAg
ICBpZiAoci0+aXNCUigpIHx8IGlzQmxvY2sobikpCiAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICBpZiAoci0+aXNUZXh0KCkgJiYgci0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpID4gMCkg
eworICAgICAgICBpZiAoci0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KHIpLT5yZW5kZXJlZFRl
eHRMZW5ndGgoKSkgewogICAgICAgICAgICAgQVNTRVJUKG4tPmlzVGV4dE5vZGUoKSk7CiAgICAg
ICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICAg
ICAgICAgIGlmIChzdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKQEAgLTg0Miw3ICs4NDIsNyBA
QCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAvLyBGSVhNRTogV2UgYXZvaWQgcmV0dXJuaW5nIGEgcG9zaXRpb24g
d2hlcmUgdGhlIHJlbmRlcmVyIGNhbid0IGFjY2VwdCB0aGUgY2FyZXQuCi0gICAgICAgIGlmIChy
LT5pc1RleHQoKSAmJiByLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgPiAwKSB7CisgICAgICAg
IGlmIChyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQociktPnJlbmRlcmVkVGV4dExlbmd0aCgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQobi0+aXNUZXh0Tm9kZSgpKTsKICAgICAgICAgICAgIGlu
dCBsZW5ndGggPSB0b1JlbmRlclRleHQociktPnRleHRMZW5ndGgoKTsKICAgICAgICAgICAgIHR5
cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHJldmlzaW9uIDk2MTI2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwxMSAr
MTU1LDYgQEAgaW50IElubGluZUJveDo6Y2FyZXRNYXhPZmZzZXQoKSBjb25zdCAKICAgICByZXR1
cm4gbV9yZW5kZXJlci0+Y2FyZXRNYXhPZmZzZXQoKTsgCiB9CiAKLXVuc2lnbmVkIElubGluZUJv
eDo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0IAoteyAKLSAgICByZXR1cm4gMTsgCi19
Ci0KIHZvaWQgSW5saW5lQm94OjpkaXJ0eUxpbmVCb3hlcygpCiB7CiAgICAgbWFya0RpcnR5KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA5NjEyNikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpA
QCAtMjc4LDcgKzI3OCw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGludCBjYXJldE1p
bk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAK
ICAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmlkaUVtYmVk
ZGluZ0xldmVsOyB9CiAgICAgdm9pZCBzZXRCaWRpTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkg
eyBtX2JpZGlFbWJlZGRpbmdMZXZlbCA9IGxldmVsOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA5NjEyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIw
OSwxMSArMTIwOSw2IEBAIGludCBJbmxpbmVUZXh0Qm94OjpjYXJldE1heE9mZnNldCgpIGNvbnMK
ICAgICByZXR1cm4gbV9zdGFydCArIG1fbGVuOwogfQogCi11bnNpZ25lZCBJbmxpbmVUZXh0Qm94
OjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGFydCAr
IG1fbGVuOwotfQotCiBmbG9hdCBJbmxpbmVUZXh0Qm94Ojp0ZXh0UG9zKCkgY29uc3QKIHsKICAg
ICAvLyBXaGVuIGNvbXB1dGluZyB0aGUgd2lkdGggb2YgYSB0ZXh0IHJ1biwgUmVuZGVyQmxvY2s6
OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKCkgZG9lc24ndCBpbmNsdWRl
IHRoZSBhY3R1YWwgb2Zmc2V0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgJKHJldmlzaW9uIDk2MTI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDggKzE0Niw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IHZpcnR1YWwgdW5zaWduZWQgY2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0OwotCiAgICAg
ZmxvYXQgdGV4dFBvcygpIGNvbnN0OyAvLyByZXR1cm5zIHRoZSB4IHBvc2l0aW9uIHJlbGF0aXZl
IHRvIHRoZSBsZWZ0IHN0YXJ0IG9mIHRoZSB0ZXh0IGxpbmUuCiAKIHB1YmxpYzoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmNwcAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwx
MSArNjgsNiBAQCBpbnQgUmVuZGVyQlI6OmNhcmV0TWF4T2Zmc2V0KCkgY29uc3QgCiAgICAgcmV0
dXJuIDE7CiB9CiAKLXVuc2lnbmVkIFJlbmRlckJSOjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMTsKLX0KLQogVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJSOjpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JikKIHsKICAgICByZXR1cm4gY3JlYXRl
VmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJSLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJSLmgJKHJldmlzaW9uIDk2MTI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJSLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBj
YXJldE1heE9mZnNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgY2FyZXRNYXhSZW5k
ZXJlZE9mZnNldCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1MCwx
MSArMjU1MCw2IEBAIGludCBSZW5kZXJPYmplY3Q6OmNhcmV0TWF4T2Zmc2V0KCkgY29uc3QKICAg
ICByZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgUmVuZGVyT2JqZWN0OjpjYXJldE1heFJlbmRlcmVk
T2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQogaW50IFJlbmRlck9iamVjdDo6
cHJldmlvdXNPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGN1cnJlbnQg
LSAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNp
b24gOTYxMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc5MSw3ICs3OTEsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGlu
dCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBwcmV2aW91c09mZnNldChpbnQgY3VycmVudCkgY29u
c3Q7CiAgICAgdmlydHVhbCBpbnQgcHJldmlvdXNPZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKGlu
dCBjdXJyZW50KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTAsMTEgKzQxMCw2IEBA
IHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQcmVmZXJyZWRMb2cKICAgICBzZXRQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi11bnNpZ25lZCBSZW5kZXJSZXBsYWNl
ZDo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDE7IAotfQot
CiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVwbGFjZWQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYnVnZ3kg
aWYgdGhlIHJlcGxhY2VkIGVsZW1lbnQgaXMgcmVsYXRpdmUgcG9zaXRpb25lZC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCShyZXZpc2lvbiA5NjEyNikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw3ICs3Nyw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIpIGNvbnN0OwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVk
T2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNl
bGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5NSwxNSAr
MTU5NSwxNiBAQCBpbnQgUmVuZGVyVGV4dDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdAogaW50IFJl
bmRlclRleHQ6OmNhcmV0TWF4T2Zmc2V0KCkgY29uc3QKIHsKICAgICBJbmxpbmVUZXh0Qm94KiBi
b3ggPSBsYXN0VGV4dEJveCgpOwotICAgIGlmICghYm94KQorICAgIGlmICghbGFzdFRleHRCb3go
KSkKICAgICAgICAgcmV0dXJuIHRleHRMZW5ndGgoKTsKKwogICAgIGludCBtYXhPZmZzZXQgPSBi
b3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpOwogICAgIGZvciAoYm94ID0gYm94LT5wcmV2VGV4dEJv
eCgpOyBib3g7IGJveCA9IGJveC0+cHJldlRleHRCb3goKSkKICAgICAgICAgbWF4T2Zmc2V0ID0g
bWF4PGludD4obWF4T2Zmc2V0LCBib3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpKTsKICAgICByZXR1
cm4gbWF4T2Zmc2V0OwogfQogCi11bnNpZ25lZCBSZW5kZXJUZXh0OjpjYXJldE1heFJlbmRlcmVk
T2Zmc2V0KCkgY29uc3QKK3Vuc2lnbmVkIFJlbmRlclRleHQ6OnJlbmRlcmVkVGV4dExlbmd0aCgp
IGNvbnN0CiB7CiAgICAgaW50IGwgPSAwOwogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0g
Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiA5NjEyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3
ICsxMDcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCB1
bnNpZ25lZCByZW5kZXJlZFRleHRMZW5ndGgoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IHBy
ZXZpb3VzT2Zmc2V0KGludCBjdXJyZW50KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwcmV2aW91
c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24oaW50IGN1cnJlbnQpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108943</attachid>
            <date>2011-09-27 17:38:42 -0700</date>
            <delta_ts>2011-09-27 18:08:21 -0700</delta_ts>
            <desc>Addressed comments</desc>
            <filename>bug-68939-20110927173841.patch</filename>
            <type>text/plain</type>
            <size>14830</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MTY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDktMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODkzOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZpZWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50LgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIHJldmVhbGVkIGEgYnVnIGluIHJlbW92ZVVucmVuZGVyZWRUZXh0Tm9k
ZXNBdEVuZHMgdGhhdCB0ZXh0IG5vZGVzIHdpdGhvdXQgYW55IHZpc2libGUKKyAgICAgICAgdGV4
dCBhdCBlbmRzIGFyZSBub3QgcmVtb3ZlZCB3aGVuIGl0IGhhcyBhIHJlbmRlciBvYmplY3QuIEZp
eGVkIHRoZSBidWcgYnkgY2hlY2tpbmcgdGhlIGxlbmd0aCBvZgorICAgICAgICB0aGUgcmVuZGVy
ZWQgdGV4dC4gKFRlc3RlZCBieSBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGluZy13b3JkLWluLWRp
di1leHRyYS1saW5lLmh0bWwpCisKKyAgICAgICAgVGhpcyBmdXJ0aGVyIHJldmVhbGVkIHRoYXQg
Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCBkb2Vzbid0IHJldHVybiBhbiBvZmZzZXQgYW5kIGNhcmV0
TWF4UmVuZGVyZWRPZmZzZXQKKyAgICAgICAgb24gSW5saW5lQm94LCBJbmxpbmVUZXh0Qm94LCBS
ZW5kZXJPYmplY3QsIFJlbmRlckJSLCBSZW5kZXJQbGFjZWQgYXJlIG5ldmVyIGNhbGxlZC4gVG8g
YWRkcmVzcyB0aGlzCisgICAgICAgIGlzc3VlLCByZW5hbWVkIGNhcmV0TWF4UmVuZGVyZWRPZmZz
ZXQgdG8gcmVuZGVyZWRUZXh0TGVuZ3RoIGZvciBSZW5kZXJUZXh0IGFuZCByZW1vdmVkIHRoZSBy
ZXN0LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlSGFzVmlz
aWJsZVJlbmRlclRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRzKTogQ2FsbHMgbm9kZUhh
c1Zpc2libGVSZW5kZXJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KTogU2ltcGxpZmllZC4KKyAg
ICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3Rh
cnRPZlBhcmFncmFwaCk6IENhbGxzIHJlbmRlcmVkVGV4dExlbmd0aC4KKyAgICAgICAgKFdlYkNv
cmU6OmVuZE9mUGFyYWdyYXBoKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJv
eC5jcHA6IFJlbW92ZWQgY2FyZXRNYXhSZW5kZXJlZE9mZnNldC4KKyAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lQm94Lmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJSLmNwcDogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJSLmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpyZW5kZXJl
ZFRleHRMZW5ndGgpOiBSZW5hbWVkIGZyb20gY2FyZXRNYXhSZW5kZXJlZE9mZnNldC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorCiAyMDExLTA5LTI3ICBLZW50IFRhbXVyYSAg
PHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIGVsZW1lbnQuZGF0YXNldC5ub25F
eGlzdGluZ0tleSBzaG91bGQgcmV0dXJuIHVuZGVmaW5lZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTYsMTcgKzg5Niw2IEBAIGJvb2wgUG9zaXRpb246Omlu
UmVuZGVyZWRUZXh0KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB1bnNp
Z25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KGNvbnN0IE5vZGUqIG4pCi17Ci0gICAgUmVuZGVy
T2JqZWN0KiByID0gbi0+cmVuZGVyZXIoKTsKLSAgICBpZiAocikKLSAgICAgICAgcmV0dXJuIHIt
PmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKTsKLSAgICAKLSAgICBpZiAobi0+aXNDaGFyYWN0ZXJE
YXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ2hhcmFjdGVyRGF0
YSo+KG4pLT5sZW5ndGgoKTsKLSAgICByZXR1cm4gMTsKLX0KLQogYm9vbCBQb3NpdGlvbjo6aXNS
ZW5kZXJlZENoYXJhY3RlcigpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpIHx8ICFkZXByZWNh
dGVkTm9kZSgpLT5pc1RleHROb2RlKCkpCkBAIC05OTIsOCArOTgxLDggQEAgYm9vbCBQb3NpdGlv
bjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpbwogICAgIExPRyhFZGl0aW5nLCAidGhpc1JlbmRl
cmVkT2Zmc2V0OiAgICAgICAgICVkXG4iLCB0aGlzUmVuZGVyZWRPZmZzZXQpOwogICAgIExPRyhF
ZGl0aW5nLCAicG9zUmVuZGVyZXI6ICAgICAgICAgICAgJXAgWyVwXVxuIiwgcG9zUmVuZGVyZXIs
IGIyKTsKICAgICBMT0coRWRpdGluZywgInBvc1JlbmRlcmVkT2Zmc2V0OiAgICAgICVkXG4iLCBw
b3NSZW5kZXJlZE9mZnNldCk7Ci0gICAgTE9HKEVkaXRpbmcsICJub2RlIG1pbi9tYXg6ICAgICAg
ICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQoZGVwcmVjYXRlZE5vZGUoKSksIGNhcmV0TWF4
UmVuZGVyZWRPZmZzZXQoZGVwcmVjYXRlZE5vZGUoKSkpOwotICAgIExPRyhFZGl0aW5nLCAicG9z
IG5vZGUgbWluL21heDogICAgICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KHBvcy5kZXByZWNh
dGVkTm9kZSgpKSwgY2FyZXRNYXhSZW5kZXJlZE9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkp
OworICAgIExPRyhFZGl0aW5nLCAibm9kZSBtaW4vbWF4OiAgICAgICAgICAgJWQ6JWRcbiIsIGNh
cmV0TWluT2Zmc2V0KGRlcHJlY2F0ZWROb2RlKCkpLCBjYXJldE1heE9mZnNldChkZXByZWNhdGVk
Tm9kZSgpKSk7CisgICAgTE9HKEVkaXRpbmcsICJwb3Mgbm9kZSBtaW4vbWF4OiAgICAgICAlZDol
ZFxuIiwgY2FyZXRNaW5PZmZzZXQocG9zLmRlcHJlY2F0ZWROb2RlKCkpLCBjYXJldE1heE9mZnNl
dChwb3MuZGVwcmVjYXRlZE5vZGUoKSkpOwogICAgIExPRyhFZGl0aW5nLCAiLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIik7CiAKICAgICBpZiAoIWIxIHx8ICFiMikgewpAQCAtMTAwNSwxMiArOTk0LDEyIEBAIGJv
b2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW8KICAgICB9CiAKICAgICBpZiAo
bmV4dFJlbmRlcmVkRWRpdGFibGUoZGVwcmVjYXRlZE5vZGUoKSkgPT0gcG9zLmRlcHJlY2F0ZWRO
b2RlKCkKLSAgICAgICAgJiYgdGhpc1JlbmRlcmVkT2Zmc2V0ID09IChpbnQpY2FyZXRNYXhSZW5k
ZXJlZE9mZnNldChkZXByZWNhdGVkTm9kZSgpKSAmJiAhcG9zUmVuZGVyZWRPZmZzZXQpIHsKKyAg
ICAgICAgJiYgdGhpc1JlbmRlcmVkT2Zmc2V0ID09IGNhcmV0TWF4T2Zmc2V0KGRlcHJlY2F0ZWRO
b2RlKCkpICYmICFwb3NSZW5kZXJlZE9mZnNldCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAogICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoZGVwcmVjYXRlZE5v
ZGUoKSkgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkKLSAgICAgICAgJiYgIXRoaXNSZW5kZXJlZE9m
ZnNldCAmJiBwb3NSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQo
cG9zLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgICYmICF0aGlzUmVuZGVyZWRPZmZzZXQg
JiYgcG9zUmVuZGVyZWRPZmZzZXQgPT0gY2FyZXRNYXhPZmZzZXQocG9zLmRlcHJlY2F0ZWROb2Rl
KCkpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lv
biA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiU21hcnRSZXBsYWNlLmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTU1Mywx
MSArNTU0LDE1IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHUKICAg
ICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlSGFzVmlzaWJsZVJlbmRlclRleHQoVGV4
dCogdGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC0+cmVuZGVyZXIoKSAmJiB0b1JlbmRlclRleHQo
dGV4dC0+cmVuZGVyZXIoKSktPnJlbmRlcmVkVGV4dExlbmd0aCgpID4gMDsKK30KKwogdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5kcygp
CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7Ci0gICAgaWYgKCFtX2xhc3RMZWFmSW5zZXJ0ZWQtPnJlbmRlcmVyKCkKLSAgICAgICAgJiYg
bV9sYXN0TGVhZkluc2VydGVkLT5pc1RleHROb2RlKCkKKyAgICBpZiAobV9sYXN0TGVhZkluc2Vy
dGVkLT5pc1RleHROb2RlKCkgJiYgIW5vZGVIYXNWaXNpYmxlUmVuZGVyVGV4dChzdGF0aWNfY2Fz
dDxUZXh0Kj4obV9sYXN0TGVhZkluc2VydGVkLmdldCgpKSkKICAgICAgICAgJiYgIWVuY2xvc2lu
Z05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShtX2xhc3RMZWFmSW5zZXJ0
ZWQuZ2V0KCkpLCBzZWxlY3RUYWcpCiAgICAgICAgICYmICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobV9sYXN0TGVhZkluc2VydGVkLmdldCgpKSwgc2Ny
aXB0VGFnKSkgewogICAgICAgICBpZiAobV9maXJzdE5vZGVJbnNlcnRlZCA9PSBtX2xhc3RMZWFm
SW5zZXJ0ZWQpIHsKQEAgLTU3Myw4ICs1NzgsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpyZW1vdmVVbnJlCiAgICAgCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYWtlIHN1cmUg
dGhhdCBtX2ZpcnN0Tm9kZUluc2VydGVkIGlzbid0IGluc2lkZSBhIHNlbGVjdCBvciBzY3JpcHQg
ZWxlbWVudCwgYmVjYXVzZQogICAgIC8vIGl0IGlzIGEgdG9wIGxldmVsIG5vZGUgaW4gdGhlIGZy
YWdtZW50IGFuZCB0aGUgdXNlciBjYW4ndCBpbnNlcnQgaW50byB0aG9zZSBlbGVtZW50cy4KLSAg
ICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQtPnJlbmRlcmVyKCkgJiYKLSAgICAgICAgbV9maXJz
dE5vZGVJbnNlcnRlZC0+aXNUZXh0Tm9kZSgpKSB7CisgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0
ZWQtPmlzVGV4dE5vZGUoKSAmJiAhbm9kZUhhc1Zpc2libGVSZW5kZXJUZXh0KHN0YXRpY19jYXN0
PFRleHQqPihtX2ZpcnN0Tm9kZUluc2VydGVkLmdldCgpKSkpIHsKICAgICAgICAgaWYgKG1fZmly
c3ROb2RlSW5zZXJ0ZWQgPT0gbV9sYXN0TGVhZkluc2VydGVkKSB7CiAgICAgICAgICAgICByZW1v
dmVOb2RlKG1fZmlyc3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpOwogICAgICAgICAgICAgbV9maXJzdE5v
ZGVJbnNlcnRlZCA9IDA7CkBAIC02MDYsOCArNjEwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOgogCiBWaXNpYmxlUG9zaXRpb24gUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkKIHsKLSAgICAvLyBSZXR1
cm4gdGhlIGluc2VydGVkIGNvbnRlbnQncyBmaXJzdCBWaXNpYmxlUG9zaXRpb24uCi0gICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihuZXh0Q2FuZGlkYXRlKHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVO
b2RlKG1fZmlyc3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpKSk7CisgICAgcmV0dXJuIGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShtX2ZpcnN0Tm9kZUluc2VydGVkLmdldCgpKTsKIH0KIAogc3RhdGlj
IHZvaWQgcmVtb3ZlSGVhZENvbnRlbnRzKFJlcGxhY2VtZW50RnJhZ21lbnQmIGZyYWdtZW50KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA5
NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc2NCw3ICs3NjQsNyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFn
cmFwaChjb25zdCBWCiAgICAgICAgIGlmIChyLT5pc0JSKCkgfHwgaXNCbG9jayhuKSkKICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiByLT5jYXJldE1heFJl
bmRlcmVkT2Zmc2V0KCkgPiAwKSB7CisgICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiB0b1JlbmRl
clRleHQociktPnJlbmRlcmVkVGV4dExlbmd0aCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobi0+
aXNUZXh0Tm9kZSgpKTsKICAgICAgICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yOwogICAgICAgICAgICAgaWYgKHN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSkg
ewpAQCAtODQyLDcgKzg0Miw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25z
dCBWaXMKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBhdm9pZCBy
ZXR1cm5pbmcgYSBwb3NpdGlvbiB3aGVyZSB0aGUgcmVuZGVyZXIgY2FuJ3QgYWNjZXB0IHRoZSBj
YXJldC4KLSAgICAgICAgaWYgKHItPmlzVGV4dCgpICYmIHItPmNhcmV0TWF4UmVuZGVyZWRPZmZz
ZXQoKSA+IDApIHsKKyAgICAgICAgaWYgKHItPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChyKS0+
cmVuZGVyZWRUZXh0TGVuZ3RoKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChuLT5pc1RleHROb2Rl
KCkpOwogICAgICAgICAgICAgaW50IGxlbmd0aCA9IHRvUmVuZGVyVGV4dChyKS0+dGV4dExlbmd0
aCgpOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24g
OTYxMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1LDExICsxNTUsNiBAQCBpbnQgSW5saW5lQm94OjpjYXJldE1heE9mZnNl
dCgpIGNvbnN0IAogICAgIHJldHVybiBtX3JlbmRlcmVyLT5jYXJldE1heE9mZnNldCgpOyAKIH0K
IAotdW5zaWduZWQgSW5saW5lQm94OjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QgCi17
IAotICAgIHJldHVybiAxOyAKLX0KLQogdm9pZCBJbmxpbmVCb3g6OmRpcnR5TGluZUJveGVzKCkK
IHsKICAgICBtYXJrRGlydHkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmgJKHJldmlzaW9uIDk2MTI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNyArMjc4LDYgQEAgcHVibGljOgogICAgIAogICAg
IHZpcnR1YWwgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2Fy
ZXRNYXhPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVy
ZWRPZmZzZXQoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsKCkgY29uc3Qg
eyByZXR1cm4gbV9iaWRpRW1iZWRkaW5nTGV2ZWw7IH0KICAgICB2b2lkIHNldEJpZGlMZXZlbCh1
bnNpZ25lZCBjaGFyIGxldmVsKSB7IG1fYmlkaUVtYmVkZGluZ0xldmVsID0gbGV2ZWw7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9u
IDk2MTI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjA5LDExICsxMjA5LDYgQEAgaW50IElubGluZVRleHRCb3g6OmNh
cmV0TWF4T2Zmc2V0KCkgY29ucwogICAgIHJldHVybiBtX3N0YXJ0ICsgbV9sZW47CiB9CiAKLXVu
c2lnbmVkIElubGluZVRleHRCb3g6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3N0YXJ0ICsgbV9sZW47Ci19Ci0KIGZsb2F0IElubGluZVRleHRCb3g6OnRl
eHRQb3MoKSBjb25zdAogewogICAgIC8vIFdoZW4gY29tcHV0aW5nIHRoZSB3aWR0aCBvZiBhIHRl
eHQgcnVuLCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0Zvckxp
bmUoKSBkb2Vzbid0IGluY2x1ZGUgdGhlIGFjdHVhbCBvZmZzZXQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYs
OCArMTQ2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29u
c3Q7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zm
c2V0KCkgY29uc3Q7Ci0KICAgICBmbG9hdCB0ZXh0UG9zKCkgY29uc3Q7IC8vIHJldHVybnMgdGhl
IHggcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGxlZnQgc3RhcnQgb2YgdGhlIHRleHQgbGluZS4K
IAogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuY3BwCShyZXZp
c2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDExICs2OCw2IEBAIGludCBSZW5kZXJCUjo6Y2FyZXRNYXhPZmZz
ZXQoKSBjb25zdCAKICAgICByZXR1cm4gMTsKIH0KIAotdW5zaWduZWQgUmVuZGVyQlI6OmNhcmV0
TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiAxOwotfQotCiBWaXNpYmxl
UG9zaXRpb24gUmVuZGVyQlI6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKQog
ewogICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9XTlNUUkVBTSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAkocmV2aXNpb24gOTYxMjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1
bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA5
NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTUwLDExICsyNTUwLDYgQEAgaW50IFJlbmRlck9iamVjdDo6Y2FyZXRN
YXhPZmZzZXQoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBSZW5kZXJPYmpl
Y3Q6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQot
CiBpbnQgUmVuZGVyT2JqZWN0OjpwcmV2aW91c09mZnNldChpbnQgY3VycmVudCkgY29uc3QKIHsK
ICAgICByZXR1cm4gY3VycmVudCAtIDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCShyZXZpc2lvbiA5NjEyNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzkxLDcgKzc5MSw2IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0
TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IHByZXZpb3VzT2Zm
c2V0KGludCBjdXJyZW50KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwcmV2aW91c09mZnNldEZv
ckJhY2t3YXJkRGVsZXRpb24oaW50IGN1cnJlbnQpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA5NjEyNikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxMCwxMSArNDEwLDYgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVByZWZlcnJl
ZExvZwogICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKLXVu
c2lnbmVkIFJlbmRlclJlcGxhY2VkOjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gMTsgCi19Ci0KIFZpc2libGVQb3NpdGlvbiBSZW5kZXJSZXBsYWNlZDo6cG9z
aXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiAgICAgLy8gRklYTUU6
IFRoaXMgY29kZSBpcyBidWdneSBpZiB0aGUgcmVwbGFjZWQgZWxlbWVudCBpcyByZWxhdGl2ZSBw
b3NpdGlvbmVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmgJKHJldmlzaW9uIDk2MTI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
cGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgCiAgICAg
dmlydHVhbCBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDk2
MTI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTk1LDE1ICsxNTk1LDE2IEBAIGludCBSZW5kZXJUZXh0OjpjYXJldE1pbk9m
ZnNldCgpIGNvbnN0CiBpbnQgUmVuZGVyVGV4dDo6Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAogewog
ICAgIElubGluZVRleHRCb3gqIGJveCA9IGxhc3RUZXh0Qm94KCk7Ci0gICAgaWYgKCFib3gpCisg
ICAgaWYgKCFsYXN0VGV4dEJveCgpKQogICAgICAgICByZXR1cm4gdGV4dExlbmd0aCgpOworCiAg
ICAgaW50IG1heE9mZnNldCA9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCk7CiAgICAgZm9yIChi
b3ggPSBib3gtPnByZXZUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5wcmV2VGV4dEJveCgpKQog
ICAgICAgICBtYXhPZmZzZXQgPSBtYXg8aW50PihtYXhPZmZzZXQsIGJveC0+c3RhcnQoKSArIGJv
eC0+bGVuKCkpOwogICAgIHJldHVybiBtYXhPZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIFJlbmRlclRl
eHQ6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAordW5zaWduZWQgUmVuZGVyVGV4dDo6
cmVuZGVyZWRUZXh0TGVuZ3RoKCkgY29uc3QKIHsKICAgICBpbnQgbCA9IDA7CiAgICAgZm9yIChJ
bmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRU
ZXh0Qm94KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlz
aW9uIDk2MTI2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgaW50
IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHJlbmRlcmVkVGV4dExlbmd0aCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBpbnQgcHJldmlvdXNPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0OwogICAg
IHZpcnR1YWwgaW50IHByZXZpb3VzT2Zmc2V0Rm9yQmFja3dhcmREZWxldGlvbihpbnQgY3VycmVu
dCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="106035"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>