<?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>80705</bug_id>
          
          <creation_ts>2012-03-09 08:51:28 -0800</creation_ts>
          <short_desc>Simplify memory usage tracking in CopiedSpace</short_desc>
          <delta_ts>2012-03-23 10:19:42 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>hojong.han</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>574919</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-09 08:51:28 -0800</bug_when>
    <thetext>Currently we have a complex and bug-riddled way of keeping track of the amount of memory allocated/utilized in CopiedSpace. We should rip this junk out and replace it with a simple, verifiably correct alternative because getting it wrong can cause big problems with respect to collection. For example, since our utilization is an unsigned number, if our book keeping causes it to wrap around, we will never do any more non-berserker GCs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574958</commentid>
    <comment_count>1</comment_count>
      <attachid>131048</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-09 09:39:41 -0800</bug_when>
    <thetext>Created attachment 131048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575095</commentid>
    <comment_count>2</comment_count>
      <attachid>131048</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-09 12:46:47 -0800</bug_when>
    <thetext>Comment on attachment 131048
Patch

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

&gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:245
&gt; +size_t CopiedSpace::totalMemoryAllocated()

Is this function used anywhere? I don&apos;t see its use inside JavaScriptCore.

&gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:268
&gt; +    for (CopiedBlock* block = static_cast&lt;CopiedBlock*&gt;(m_fromSpace-&gt;head()); block; block = static_cast&lt;CopiedBlock*&gt;(block-&gt;next()))

I don&apos;t think it&apos;s right to count from space toward utilization. Only to space contains utilized memory.

&gt; Source/JavaScriptCore/heap/CopiedSpace.h:69
&gt; +    size_t totalMemoryAllocated();
&gt; +    size_t totalMemoryUtilized();

Our typical names for these concepts are &quot;size&quot; and &quot;capacity&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575127</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-09 13:04:18 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 131048 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131048&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:245
&gt; &gt; +size_t CopiedSpace::totalMemoryAllocated()
&gt; 
&gt; Is this function used anywhere? I don&apos;t see its use inside JavaScriptCore.

I was using it to get an overall picture of our memory utilization (e.g. blocks are 95% full), and I meant to remove it, will do.

&gt; &gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:268
&gt; &gt; +    for (CopiedBlock* block = static_cast&lt;CopiedBlock*&gt;(m_fromSpace-&gt;head()); block; block = static_cast&lt;CopiedBlock*&gt;(block-&gt;next()))
&gt; 
&gt; I don&apos;t think it&apos;s right to count from space toward utilization. Only to space contains utilized memory.

From-space should always be empty when we&apos;re running this function anyways, so I&apos;ll get rid of that loop and add an assertion for that condition.

&gt; &gt; Source/JavaScriptCore/heap/CopiedSpace.h:69
&gt; &gt; +    size_t totalMemoryAllocated();
&gt; &gt; +    size_t totalMemoryUtilized();
&gt; 
&gt; Our typical names for these concepts are &quot;size&quot; and &quot;capacity&quot;.

Will change.

This patch also resulted in a performance regression due to the fact that we iterate all blocks every time we run out of room in the current block. I&apos;ll work on a patch that does the book keeping in the simple cases until we hit a GC, which will then check all blocks to get a full picture. The complexity in the old code mostly came from the copying phase, so I think it should still be able to keep it simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575236</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-09 14:34:22 -0800</bug_when>
    <thetext>&gt; This patch also resulted in a performance regression due to the fact that we iterate all blocks every time we run out of room in the current block.

A design I&apos;d suggest is to use the watermark strategy used by MarkedSpace:
    - Calculate size once, right after GC, to determine a &quot;high water mark&quot;
    - After running out of room in a block, add the block to the &quot;water mark&quot;
    - Before allocating a new block, check &quot;water mark&quot; against &quot;high water mark&quot;, and collect if exceeded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575240</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-09 14:36:53 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; This patch also resulted in a performance regression due to the fact that we iterate all blocks every time we run out of room in the current block.
&gt; 
&gt; A design I&apos;d suggest is to use the watermark strategy used by MarkedSpace:
&gt;     - Calculate size once, right after GC, to determine a &quot;high water mark&quot;
&gt;     - After running out of room in a block, add the block to the &quot;water mark&quot;
&gt;     - Before allocating a new block, check &quot;water mark&quot; against &quot;high water mark&quot;, and collect if exceeded

This is essentially what I was planning on, although it&apos;s good to have a common terminology :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576310</commentid>
    <comment_count>6</comment_count>
      <attachid>131362</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-12 11:25:37 -0700</bug_when>
    <thetext>Created attachment 131362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578639</commentid>
    <comment_count>7</comment_count>
      <attachid>131362</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-14 12:22:24 -0700</bug_when>
    <thetext>Comment on attachment 131362
Patch

A few notes here:

- Please change Heap::size() and Heap::capacity() to include CopiedSpace, and remove code that manually adds in CopiedSpace.

- I don&apos;t think we want an explicit CopiedSpace::calculateWaterMark(). Rather, any allocation should automatically add to the watermark, and the start of GC should clear the watermark. In cases where that&apos;s inefficient, you should defer adding to the watermark until the allocate slow case. You can copy the design of MarkedSpace here.

- You should add capacity() to the watermark, not size().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580847</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-16 13:08:46 -0700</bug_when>
    <thetext>*** Bug 81321 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581260</commentid>
    <comment_count>9</comment_count>
      <attachid>132444</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-16 22:28:10 -0700</bug_when>
    <thetext>Created attachment 132444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586459</commentid>
    <comment_count>10</comment_count>
      <attachid>132444</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-23 10:19:36 -0700</bug_when>
    <thetext>Comment on attachment 132444
Patch

Clearing flags on attachment: 132444

Committed r111877: &lt;http://trac.webkit.org/changeset/111877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586460</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-23 10:19:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131048</attachid>
            <date>2012-03-09 09:39:41 -0800</date>
            <delta_ts>2012-03-12 11:25:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80705-20120309093940.patch</filename>
            <type>text/plain</type>
            <size>10675</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MjAwMDg5MTIwNzRjYmVhYWE3M2JlYjFmNmZmNTJiZDRjMGRmNGZjLi5lZjU2ODNmNjM4ODhmNDFk
ZWFhNjk0M2ZhOTE0OGEyYTdjNWE4MDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxMi0wMy0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIFNpbXBsaWZ5IG1lbW9yeSB1c2FnZSB0cmFja2luZyBpbiBDb3Bp
ZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA3MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGhlYXAvQ29waWVkQWxsb2NhdG9yLmg6IFJlbW92ZWQgY3VycmVudFV0aWxpemF0aW9uIGJlY2F1
c2Ugd2UgZG9uJ3QgbmVlZCBpdCAKKyAgICAgICAgYW55IG1vcmUuCisgICAgICAgIChDb3BpZWRB
bGxvY2F0b3IpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAgICAgKENvcGll
ZEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnBheWxvYWQpOiBNb3ZlZCBvdXQg
b2YgdGhlIGNsYXNzIGRlY2xhcmF0aW9uIHRvIG1ha2UgaXQgCisgICAgICAgIGNsZWFuZXIgbG9v
a2luZy4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp1dGlsaXph
dGlvbik6IEFkZGVkIGEgZnVuY3Rpb24gdG8gZG8gdGhlIHV0aWxpemF0aW9uIGNhbGN1bGF0aW9u
IAorICAgICAgICBmb3IgdXMgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbGwgdGhhdCB1Z2x5IGNh
c3RpbmcgZXZlcnl3aGVyZS4KKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDogUmVtb3Zl
ZCBhbGwgdHJhY2VzIG9mIG1fdG90YWxNZW1vcnlBbGxvY2F0ZWQvVXRpbGl6ZWQuCisgICAgICAg
IChKU0M6OkNvcGllZFNwYWNlOjpDb3BpZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNw
YWNlOjppbml0KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVPdmVyc2l6ZSk6Cisg
ICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6
Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGVPdmVyc2l6ZSk6CisgICAgICAgIChKU0M6OkNvcGll
ZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRv
bmVDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRvdGFsTWVtb3J5QWxsb2Nh
dGVkKTogTmV3IGZ1bmN0aW9uIHRoYXQgY2FsY3VsYXRlcyBtZW1vcnkgCisgICAgICAgIGFsbG9j
YXRpb24gYmFzZWQgb24gYSBzY2FuIG9mIHRoZSBhbGwgb2Ygb3VyIGJsb2NrIGxpc3RzLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRvdGFsTWVtb3J5VXRpbGl6
ZWQpOiBEaXR0bywgYnV0IGZvciB1dGlsaXphdGlvbiByYXRoZXIgdGhhbiAKKyAgICAgICAgYWxs
b2NhdGlvbiBhbW91bnRzLgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAg
KENvcGllZFNwYWNlKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5o
OgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOgorICAgICAgICAo
SlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVOZXdCbG9jayk6CisKIDIwMTItMDMtMDggIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFjIGJ1aWxkIGZpeCBmb3Ig
bWljcm8gZGF0YSBBUEkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRBbGxvY2F0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9j
YXRvci5oCmluZGV4IGRjM2M1ZGZlZDc0OTkwZWFjNTdiZWNkNzI1N2I4NmJiYzAzNzMyZTYuLjdl
ZmY0NmJlMjQ2YzgyNDZmMTJlM2U2ZjYwNDBlYWZmNDljZmJjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRvci5oCkBAIC00MCw3ICs0MCw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHN0YXJ0ZWRDb3B5aW5nKCk7CiAgICAgdm9pZCByZXNldEN1cnJlbnRCbG9j
ayhDb3BpZWRCbG9jayopOwogICAgIHZvaWQgcmVzZXRMYXN0QWxsb2NhdGlvbih2b2lkKik7Ci0g
ICAgc2l6ZV90IGN1cnJlbnRVdGlsaXphdGlvbigpOwogCiBwcml2YXRlOgogICAgIENvcGllZEJs
b2NrKiBjdXJyZW50QmxvY2soKSB7IHJldHVybiBtX2N1cnJlbnRCbG9jazsgfQpAQCAtOTIsMTEg
KzkxLDYgQEAgaW5saW5lIHZvaWQgQ29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayhD
b3BpZWRCbG9jayogbmV3QmxvY2spCiAgICAgbV9jdXJyZW50T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KG5ld0Jsb2NrLT5tX29mZnNldCk7CiB9CiAKLWlubGluZSBzaXplX3QgQ29waWVkQWxs
b2NhdG9yOjpjdXJyZW50VXRpbGl6YXRpb24oKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fY3VycmVudE9mZnNldCAtIG1fY3VycmVudEJsb2NrLT5wYXlsb2FkKCkpOwotfQot
CiBpbmxpbmUgdm9pZCBDb3BpZWRBbGxvY2F0b3I6OnJlc2V0TGFzdEFsbG9jYXRpb24odm9pZCog
cHRyKQogewogICAgIG1fY3VycmVudE9mZnNldCA9IHN0YXRpY19jYXN0PGNoYXIqPihwdHIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKaW5kZXggMzg3YjJkZGFiNmIy
MTMwNWQ5YTgxOTI3Yjg3YTYyNjhkZTJjNGU0OS4uMWQ0NmQ4MTAwZDIyZGM1ZTg4MWNhODZkNTg3
OWIxOTExMTllNjg1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5o
CkBAIC01NSwxNiArNTUsMjQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgY2hhciog
cGF5bG9hZCgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dGhpcykgKyAoKHNpemVvZihDb3BpZWRCbG9jaykgKyA3KSAmIH43KTsKLSAgICB9CisgICAgY2hh
ciogcGF5bG9hZCgpOworICAgIHNpemVfdCB1dGlsaXphdGlvbigpOwogCiBwcml2YXRlOgogICAg
IHZvaWQqIG1fb2Zmc2V0OwogICAgIHVpbnRwdHJfdCBtX2lzUGlubmVkOwogfTsKIAoraW5saW5l
IGNoYXIqIENvcGllZEJsb2NrOjpwYXlsb2FkKCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4odGhpcykgKyAoKHNpemVvZihDb3BpZWRCbG9jaykgKyA3KSAmIH43KTsKK30K
KworaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6dXRpbGl6YXRpb24oKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRpY19jYXN0PGNoYXIqPihtX29mZnNldCkgLSBwYXls
b2FkKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKaW5kZXggYzg0NzAxMjBmNjUyM2JiODc0ZTcw
MjYzZjZiYWE2ODA5N2VlNzJiNi4uZGNkZTM0MzNiZTY2YWQ1NDRlOWQxNGQ1ZGRlMjMzN2EzYzc5
N2FkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcApAQCAt
MzQsOCArMzQsNiBAQCBDb3BpZWRTcGFjZTo6Q29waWVkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6
IG1faGVhcChoZWFwKQogICAgICwgbV90b1NwYWNlKDApCiAgICAgLCBtX2Zyb21TcGFjZSgwKQot
ICAgICwgbV90b3RhbE1lbW9yeUFsbG9jYXRlZCgwKQotICAgICwgbV90b3RhbE1lbW9yeVV0aWxp
emVkKDApCiAgICAgLCBtX2luQ29weWluZ1BoYXNlKGZhbHNlKQogICAgICwgbV9udW1iZXJPZkxv
YW5lZEJsb2NrcygwKQogewpAQCAtNDYsOCArNDQsNiBAQCB2b2lkIENvcGllZFNwYWNlOjppbml0
KCkKICAgICBtX3RvU3BhY2UgPSAmbV9ibG9ja3MxOwogICAgIG1fZnJvbVNwYWNlID0gJm1fYmxv
Y2tzMjsKICAgICAKLSAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkICs9IEhlYXBCbG9jazo6c19i
bG9ja1NpemUgKiBzX2luaXRpYWxCbG9ja051bTsKLQogICAgIGlmICghYWRkTmV3QmxvY2soKSkK
ICAgICAgICAgQ1JBU0goKTsKIH0gICAKQEAgLTU3LDcgKzUzLDYgQEAgQ2hlY2tlZEJvb2xlYW4g
Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0
UHRyKQogICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9j
YXRlT3ZlcnNpemUoYnl0ZXMsIG91dFB0cik7CiAgICAgCi0gICAgbV90b3RhbE1lbW9yeVV0aWxp
emVkICs9IG1fYWxsb2NhdG9yLmN1cnJlbnRVdGlsaXphdGlvbigpOwogICAgIGlmICghYWRkTmV3
QmxvY2soKSkgewogICAgICAgICAqb3V0UHRyID0gMDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtODMsMTAgKzc4LDggQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRl
T3ZlcnNpemUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogCiAgICAgbV9vdmVyc2l6ZUZp
bHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwogICAgIAotICAgIG1fdG90
YWxNZW1vcnlBbGxvY2F0ZWQgKz0gYmxvY2tTaXplOwotICAgIG1fdG90YWxNZW1vcnlVdGlsaXpl
ZCArPSBieXRlczsKLQogICAgICpvdXRQdHIgPSBibG9jay0+bV9vZmZzZXQ7CisgICAgYmxvY2st
Pm1fb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNoYXIqPihibG9jay0+
bV9vZmZzZXQpICsgYnl0ZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDQsMTEgKzk3
LDkgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGUodm9pZCoqIHB0
ciwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXcKICAgICBpZiAobV9hbGxvY2F0b3Iud2FzTGFz
dEFsbG9jYXRpb24ob2xkUHRyLCBvbGRTaXplKSkgewogICAgICAgICBtX2FsbG9jYXRvci5yZXNl
dExhc3RBbGxvY2F0aW9uKG9sZFB0cik7CiAgICAgICAgIGlmIChtX2FsbG9jYXRvci5maXRzSW5D
dXJyZW50QmxvY2sobmV3U2l6ZSkpIHsKLSAgICAgICAgICAgIG1fdG90YWxNZW1vcnlVdGlsaXpl
ZCArPSBuZXdTaXplIC0gb2xkU2l6ZTsKICAgICAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5h
bGxvY2F0ZShuZXdTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBtX3RvdGFsTWVtb3J5VXRp
bGl6ZWQgLT0gb2xkU2l6ZTsKIAogICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICAgaWYgKCF0cnlB
bGxvY2F0ZShuZXdTaXplLCAmcmVzdWx0KSkgewpAQCAtMTM4LDExICsxMjksOCBAQCBDaGVja2Vk
Qm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHZvaWQqKiBwdHIsIHNp
emVfdCBvbGRTaXplLCBzaQogICAgICAgICBDb3BpZWRCbG9jayogb2xkQmxvY2sgPSBvdmVyc2l6
ZUJsb2NrRm9yKG9sZFB0cik7CiAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKG9sZEJs
b2NrKTsKICAgICAgICAgb2xkQmxvY2stPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7Ci0gICAg
ICAgIG1fdG90YWxNZW1vcnlBbGxvY2F0ZWQgLT0gb2xkU2l6ZSArIHNpemVvZihDb3BpZWRCbG9j
ayk7CiAgICAgfQogICAgIAotICAgIG1fdG90YWxNZW1vcnlVdGlsaXplZCAtPSBvbGRTaXplOwot
CiAgICAgKnB0ciA9IG5ld1B0cjsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2NiwxMSArMTU0
LDYgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayogYmxv
Y2spCiAgICAgfQogCiAgICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tZW1vcnlT
dGF0c0xvY2spOwotICAgICAgICBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQgKz0gc3RhdGljX2Nhc3Q8
c2l6ZV90PihzdGF0aWNfY2FzdDxjaGFyKj4oYmxvY2stPm1fb2Zmc2V0KSAtIGJsb2NrLT5wYXls
b2FkKCkpOwotICAgIH0KLQotICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9h
bmVkQmxvY2tzTG9jayk7CiAgICAgICAgIEFTU0VSVChtX251bWJlck9mTG9hbmVkQmxvY2tzID4g
MCk7CiAgICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MtLTsKQEAgLTIxMCw4ICsxOTMsNiBA
QCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgICAgIENvcGllZEJsb2NrKiBu
ZXh0ID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihjdXJyLT5uZXh0KCkpOwogICAgICAgICBp
ZiAoIWN1cnItPm1faXNQaW5uZWQpIHsKICAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVt
b3ZlKGN1cnIpOwotICAgICAgICAgICAgbV90b3RhbE1lbW9yeUFsbG9jYXRlZCAtPSBjdXJyLT5t
X2FsbG9jYXRpb24uc2l6ZSgpOwotICAgICAgICAgICAgbV90b3RhbE1lbW9yeVV0aWxpemVkIC09
IGN1cnItPm1fYWxsb2NhdGlvbi5zaXplKCkgLSBzaXplb2YoQ29waWVkQmxvY2spOwogICAgICAg
ICAgICAgY3Vyci0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBjdXJyLT5tX2lzUGlubmVkID0gZmFsc2U7CkBAIC0yNjEsNCArMjQyLDM2IEBA
IENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjpnZXRGcmVzaEJsb2NrKEFsbG9jYXRpb25FZmZv
cnQgYWxsb2NhdGlvbkVmZm9ydCwgQ29wCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3NpemVfdCBD
b3BpZWRTcGFjZTo6dG90YWxNZW1vcnlBbGxvY2F0ZWQoKQoreworICAgIHNpemVfdCBjYWxjdWxh
dGVkQWxsb2NhdGlvbiA9IDA7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IHN0YXRp
Y19jYXN0PENvcGllZEJsb2NrKj4obV90b1NwYWNlLT5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBz
dGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQorICAgICAgICBjYWxjdWxh
dGVkQWxsb2NhdGlvbiArPSBibG9jay0+bV9hbGxvY2F0aW9uLnNpemUoKTsKKworICAgIGZvciAo
Q29waWVkQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihtX2Zyb21TcGFj
ZS0+aGVhZCgpKTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihibG9j
ay0+bmV4dCgpKSkKKyAgICAgICAgY2FsY3VsYXRlZEFsbG9jYXRpb24gKz0gYmxvY2stPm1fYWxs
b2NhdGlvbi5zaXplKCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IHN0YXRpY19j
YXN0PENvcGllZEJsb2NrKj4obV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sg
PSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQorICAgICAgICBjYWxj
dWxhdGVkQWxsb2NhdGlvbiArPSBibG9jay0+bV9hbGxvY2F0aW9uLnNpemUoKTsKKworICAgIHJl
dHVybiBjYWxjdWxhdGVkQWxsb2NhdGlvbjsKK30KKworc2l6ZV90IENvcGllZFNwYWNlOjp0b3Rh
bE1lbW9yeVV0aWxpemVkKCkKK3sKKyAgICBzaXplX3QgY2FsY3VsYXRlZFV0aWxpemF0aW9uID0g
MDsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxv
Y2sqPihtX3RvU3BhY2UtPmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IHN0YXRpY19jYXN0PENvcGll
ZEJsb2NrKj4oYmxvY2stPm5leHQoKSkpCisgICAgICAgIGNhbGN1bGF0ZWRVdGlsaXphdGlvbiAr
PSBibG9jay0+dXRpbGl6YXRpb24oKTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0g
c3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihtX2Zyb21TcGFjZS0+aGVhZCgpKTsgYmxvY2s7IGJs
b2NrID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihibG9jay0+bmV4dCgpKSkKKyAgICAgICAg
Y2FsY3VsYXRlZFV0aWxpemF0aW9uICs9IGJsb2NrLT51dGlsaXphdGlvbigpOworCisgICAgZm9y
IChDb3BpZWRCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KG1fb3ZlcnNp
emVCbG9ja3MuaGVhZCgpKTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sq
PihibG9jay0+bmV4dCgpKSkKKyAgICAgICAgY2FsY3VsYXRlZFV0aWxpemF0aW9uICs9IGJsb2Nr
LT51dGlsaXphdGlvbigpOworCisgICAgcmV0dXJuIGNhbGN1bGF0ZWRVdGlsaXphdGlvbjsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuaAppbmRleCBlOGZhODAwNTU5MGM4MzYyMzkzM2Y2NDA5MDhhMmViMTQzZDJjZjc1Li4wOTA4
YzBmZjZjZTVmNDU1MzVhOWNiOWUwYjkxNjg0NDI5MWFiNDk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKQEAgLTY1LDggKzY1LDggQEAgcHVibGljOgogCiAgICAg
Ym9vbCBjb250YWlucyh2b2lkKiwgQ29waWVkQmxvY2sqJik7CiAKLSAgICBzaXplX3QgdG90YWxN
ZW1vcnlBbGxvY2F0ZWQoKSB7IHJldHVybiBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkOyB9Ci0gICAg
c2l6ZV90IHRvdGFsTWVtb3J5VXRpbGl6ZWQoKSB7IHJldHVybiBtX3RvdGFsTWVtb3J5VXRpbGl6
ZWQ7IH0KKyAgICBzaXplX3QgdG90YWxNZW1vcnlBbGxvY2F0ZWQoKTsKKyAgICBzaXplX3QgdG90
YWxNZW1vcnlVdGlsaXplZCgpOwogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBibG9ja0Zvcih2
b2lkKik7CiAKQEAgLTk3LDcgKzk3LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PENvcGllZEJs
b2NrKj4gbV90b1NwYWNlU2V0OwogCiAgICAgTXV0ZXggbV90b1NwYWNlTG9jazsKLSAgICBNdXRl
eCBtX21lbW9yeVN0YXRzTG9jazsKIAogICAgIERvdWJseUxpbmtlZExpc3Q8SGVhcEJsb2NrPiog
bV90b1NwYWNlOwogICAgIERvdWJseUxpbmtlZExpc3Q8SGVhcEJsb2NrPiogbV9mcm9tU3BhY2U7
CkBAIC0xMDYsOSArMTA1LDYgQEAgcHJpdmF0ZToKICAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBC
bG9jaz4gbV9ibG9ja3MyOwogICAgIERvdWJseUxpbmtlZExpc3Q8SGVhcEJsb2NrPiBtX292ZXJz
aXplQmxvY2tzOwogICAgCi0gICAgc2l6ZV90IG1fdG90YWxNZW1vcnlBbGxvY2F0ZWQ7Ci0gICAg
c2l6ZV90IG1fdG90YWxNZW1vcnlVdGlsaXplZDsKLQogICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFz
ZTsKIAogICAgIE11dGV4IG1fbG9hbmVkQmxvY2tzTG9jazsgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCmluZGV4IDBiMWIz
OGQzMjYzYjg1NDIwODJhODllYjc4NTMzZDdkMjM4NWFlYzEuLmYwYWNkOWY1MGE1ZWUwMTZlNzUy
Zjg2ZDk1MTY4NDgzMjZkZTc0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCkBAIC01Niw4ICs1Niw2IEBAIGlubGlu
ZSB2b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZygpCiAgICAgbV90b1NwYWNlRmlsdGVy
LnJlc2V0KCk7CiAgICAgbV9hbGxvY2F0b3Iuc3RhcnRlZENvcHlpbmcoKTsKIAotICAgIG1fdG90
YWxNZW1vcnlVdGlsaXplZCA9IDA7Ci0KICAgICBBU1NFUlQoIW1faW5Db3B5aW5nUGhhc2UpOwog
ICAgIEFTU0VSVCghbV9udW1iZXJPZkxvYW5lZEJsb2Nrcyk7CiAgICAgbV9pbkNvcHlpbmdQaGFz
ZSA9IHRydWU7CkBAIC0xMTgsMTEgKzExNiw2IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3Bp
ZWRTcGFjZTo6YWxsb2NhdGVOZXdCbG9jayhDb3BpZWRCbG9jayoqIG91dEJsb2NrKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9tZW1vcnlTdGF0c0xvY2spOwotICAgICAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkICs9
IEhlYXBCbG9jazo6c19ibG9ja1NpemU7Ci0gICAgfQotCiAgICAgKm91dEJsb2NrID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0aW9uLmJhc2UoKSkgQ29waWVkQmxvY2soYWxsb2NhdGlvbik7CiAgICAg
cmV0dXJuIHRydWU7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131362</attachid>
            <date>2012-03-12 11:25:37 -0700</date>
            <delta_ts>2012-03-16 22:28:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80705-20120312112536.patch</filename>
            <type>text/plain</type>
            <size>16134</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NmY5ODEwZDBlMWI3MzRhZWNhZDBjMjY1OWNiMjQ3MmFjMWM5M2NhLi4xNThhYTQ2NjY2YWFiOWFh
ZTQ5YjU1ZTc4MGIyNzQ1YjM0MGVkYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxMi0wMy0xMiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIFNpbXBsaWZ5IG1lbW9yeSB1c2FnZSB0cmFja2luZyBpbiBDb3Bp
ZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA3MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGhlYXAvQ29waWVkQWxsb2NhdG9yLmg6CisgICAgICAgIChDb3BpZWRBbGxvY2F0b3IpOiBSZW5h
bWUgY3VycmVudFV0aWxpemF0aW9uIHRvIGN1cnJlbnRTaXplLgorICAgICAgICAoSlNDOjpDb3Bp
ZWRBbGxvY2F0b3I6OmN1cnJlbnRTaXplKToKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrLmg6
CisgICAgICAgIChDb3BpZWRCbG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpwYXls
b2FkKTogTW92ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgcGF5bG9hZCgpIG91dCBvZiB0aGUgY2xh
c3MKKyAgICAgICAgZGVjbGFyYXRpb24uCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpD
b3BpZWRCbG9jazo6c2l6ZSk6IEFkZCBuZXcgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBibG9j
aydzIHNpemUuCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpjYXBhY2l0eSk6IERpdHRvIGZv
ciBjYXBhY2l0eS4KKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29waWVkU3BhY2U6OkNvcGllZFNwYWNlKTogUmVtb3ZlIG9sZCBib2d1cyBtZW1vcnkgc3Rh
dHMgZmllbGRzIGFuZCBhZGQgYSBuZXcKKyAgICAgICAgZmllbGQgZm9yIHRoZSB3YXRlciBtYXJr
LgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6aW5pdCk6CisgICAgICAgIChKU0M6OkNvcGll
ZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKTogV2hlbiB3ZSBmYWlsIHRvIGFsbG9jYXRlIGZy
b20gdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLCB3ZSBuZWVkIHRvIHVwZGF0ZSBvdXIgY3Vy
cmVudCB3YXRlciBtYXJrIHdpdGggdGhlIHNpemUgb2YgdGhlIGJsb2NrLgorICAgICAgICAoSlND
OjpDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVPdmVyc2l6ZSk6IFdoZW4gd2UgYWxsb2NhdGUgYSBu
ZXcgb3ZlcnNpemUgYmxvY2ssIHdlIAorICAgICAgICBuZWVkIHRvIHVwZGF0ZSBvdXIgY3VycmVu
dCB3YXRlciBtYXJrIHdpdGggdGhlIHNpemUgb2YgdGhlIHVzZWQgcG9ydGlvbiBvZiB0aGUgYmxv
Y2suCisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXRlKTogV2UgZG9uJ3Qg
bmVlZCB0byB1cGRhdGUgdGhlIHdhdGVyIG1hcmsgd2hlbiAKKyAgICAgICAgcmVhbGxvY2F0aW5n
IGJlY2F1c2UgaXQgd2lsbCBlaXRoZXIgZ2V0IGFjY291bnRlZCBmb3Igd2hlbiB3ZSBmaWxsIHVw
IHRoZSBibG9jayBsYXRlciAKKyAgICAgICAgaW4gdGhlIGNhc2Ugb2YgYmVpbmcgYWJsZSB0byBy
ZWFsbG9jYXRlIGluIHRoZSBjdXJyZW50IGJsb2NrIG9yIGl0IHdpbGwgZ2V0IHBpY2tlZCB1cCAK
KyAgICAgICAgaW1tZWRpYXRlbHkgYmVjYXVzZSB3ZSdsbCBoYXZlIHRvIGdldCBhIG5ldyBibG9j
ay4KKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGVPdmVyc2l6ZSk6IFdl
IGRvLCBob3dldmVyLCBuZWVkIHRvIHVwZGF0ZSBpbiB3aGVuIAorICAgICAgICByZWFsbG9jLWlu
ZyBhbiBvdmVyc2l6ZSBibG9jayBiZWNhdXNlIHdlIGRlYWxsb2NhdGUgdGhlIG9sZCBibG9jayBh
bmQgYWxsb2NhdGUgYSBicmFuZCAKKyAgICAgICAgbmV3IG9uZS4KKyAgICAgICAgKEpTQzo6Q29w
aWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2spOiBHZXQgcmlkIG9mIG9sZCBjcnVmdC4KKyAgICAg
ICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKTogR2V0IGFuIGFjY3VyYXRlIGNhbGN1
bGF0aW9uIG9mIHRoZSBjdXJyZW50IHdhdGVyIG1hcmsgCisgICAgICAgIGFmdGVyIHdlJ3JlIGRv
bmUgY29weWluZyBkdXJpbmcgYSBjb2xsZWN0aW9uLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFj
ZTo6Z2V0RnJlc2hCbG9jayk6IFdlIHVzZSB0aGUgSGVhcCdzIG5ldyBmdW5jdGlvbiB0byB0ZWxs
IHVzIHdoZXRoZXIgb3IgCisgICAgICAgIG5vdCB3ZSBzaG91bGQgY29sbGVjdCBub3cgaW5zdGVh
ZCBvZiBkb2luZyB0aGUgY2FsY3VsYXRpb24gb3Vyc2VsZi4KKyAgICAgICAgKEpTQzo6Q29waWVk
U3BhY2U6OmNhbGN1bGF0ZVdhdGVyTWFyayk6IEl0ZXJhdGUgb3ZlciBhbGwgYmxvY2tzIHRoYXQg
d2UgY3VycmVudGx5IGhhdmUgCisgICAgICAgIHRvIGNhbGN1bGF0ZSBvdXIgY3VycmVudCB3YXRl
ciBtYXJrIChpLmUuIHNpemUpLiBXZSBzaG91bGRuJ3QgaGF2ZSBhbnkgYmxvY2tzIGluIAorICAg
ICAgICBmcm9tLXNwYWNlIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHNvIHdlIGFzc2Vy
dCB0aGF0LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmg6IFJl
bW92ZSBvbGQgbWVtb3J5IHN0YXRzIGNydWZ0LgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6
d2F0ZXJNYXJrKTogQWRkIG5ldyB3YXRlciBtYXJrLgorICAgICAgICAoQ29waWVkU3BhY2UpOgor
ICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg6IAorICAgICAgICAoSlND
OjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBSZXNldCB3YXRlciBtYXJrIHRvIDAgd2hl
biB3ZSBzdGFydCBjb3B5aW5nIGR1cmluZyBhIAorICAgICAgICBjb2xsZWN0aW9uLgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVOZXdCbG9jayk6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6IFVzZSBuZXcgd2F0ZXIgbWFy
ayB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZXcgaGlnaCB3YXRlciBtYXJrIGZvciAKKyAgICAgICAg
dGhlIHdob2xlIEhlYXAgYWZ0ZXIgY29tcGxldGluZyBhIGNvbGxlY3Rpb24uCisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2hvdWxk
Q29sbGVjdCk6IE5ldyBmdW5jdGlvbiBmb3Igb3RoZXIgc3ViLXBhcnRzIG9mIHRoZSBIZWFwIHRv
IHVzZSB0byAKKyAgICAgICAgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBzaG91bGQgaW5pdGlhdGUg
YSBjb2xsZWN0aW9uIG9yIGNvbnRpbnVlIHRvIGFsbG9jYXRlIG5ldyBibG9ja3MuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwOjp3YXRlck1hcmspOiBOb3cgaXMgdGhlIHN1bSBv
ZiB0aGUgd2F0ZXIgbWFya3Mgb2YgdGhlIHR3byBzdWItcGFydHMgb2YgdGhlCisgICAgICAgIEhl
YXAgKE1hcmtlZFNwYWNlIGFuZCBDb3BpZWRTcGFjZSkuCisgICAgICAgICogaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UpOiBDaGFuZ2VkIHRvIHVzZSB0aGUgSGVhcCdzIG5ldyBzaG91bGRDb2xsZWN0KCkgZnVu
Y3Rpb24uCisKIDIwMTItMDMtMTIgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgW1F0XVtNYWNdIEJ1aWxkIGZhaWxzIGFmdGVyIGVuYWJsaW5nIExMSU5UIHdoZW4g
SklUIGlzIGRpc2FibGVkIChyMTA5ODYzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRBbGxvY2F0b3IuaAppbmRleCBkYzNjNWRmZWQ3NDk5MGVhYzU3YmVjZDcyNTdiODZiYmMw
MzczMmU2Li40ZGRhOGI4YTM3YzQ0MTMyYWIzMjNkYjkwMTBiMTViNjc2NjQ5OWRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaApAQCAtNDAsNyArNDAs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydGVkQ29weWluZygpOwogICAgIHZvaWQgcmVzZXRD
dXJyZW50QmxvY2soQ29waWVkQmxvY2sqKTsKICAgICB2b2lkIHJlc2V0TGFzdEFsbG9jYXRpb24o
dm9pZCopOwotICAgIHNpemVfdCBjdXJyZW50VXRpbGl6YXRpb24oKTsKKyAgICBzaXplX3QgY3Vy
cmVudFNpemUoKTsKIAogcHJpdmF0ZToKICAgICBDb3BpZWRCbG9jayogY3VycmVudEJsb2NrKCkg
eyByZXR1cm4gbV9jdXJyZW50QmxvY2s7IH0KQEAgLTkyLDcgKzkyLDcgQEAgaW5saW5lIHZvaWQg
Q29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayhDb3BpZWRCbG9jayogbmV3QmxvY2sp
CiAgICAgbV9jdXJyZW50T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld0Jsb2NrLT5tX29m
ZnNldCk7CiB9CiAKLWlubGluZSBzaXplX3QgQ29waWVkQWxsb2NhdG9yOjpjdXJyZW50VXRpbGl6
YXRpb24oKQoraW5saW5lIHNpemVfdCBDb3BpZWRBbGxvY2F0b3I6OmN1cnJlbnRTaXplKCkKIHsK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2N1cnJlbnRPZmZzZXQgLSBtX2N1cnJl
bnRCbG9jay0+cGF5bG9hZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRC
bG9jay5oCmluZGV4IDM4N2IyZGRhYjZiMjEzMDVkOWE4MTkyN2I4N2E2MjY4ZGUyYzRlNDkuLjQz
MWI4NmMzODhlYmM4ZDA0YTBkMDk3MzMxOTFjYmQzZDFmY2E5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaApAQCAtNTUsMTYgKzU1LDMwIEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIH0KIAotICAgIGNoYXIqIHBheWxvYWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgKChzaXplb2YoQ29waWVkQmxvY2spICsg
NykgJiB+Nyk7Ci0gICAgfQorICAgIGNoYXIqIHBheWxvYWQoKTsKKyAgICBzaXplX3Qgc2l6ZSgp
OworICAgIHNpemVfdCBjYXBhY2l0eSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQqIG1fb2Zmc2V0
OwogICAgIHVpbnRwdHJfdCBtX2lzUGlubmVkOwogfTsKIAoraW5saW5lIGNoYXIqIENvcGllZEJs
b2NrOjpwYXlsb2FkKCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhp
cykgKyAoKHNpemVvZihDb3BpZWRCbG9jaykgKyA3KSAmIH43KTsKK30KKworaW5saW5lIHNpemVf
dCBDb3BpZWRCbG9jazo6c2l6ZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4o
c3RhdGljX2Nhc3Q8Y2hhcio+KG1fb2Zmc2V0KSAtIHBheWxvYWQoKSk7Cit9CisKK2lubGluZSBz
aXplX3QgQ29waWVkQmxvY2s6OmNhcGFjaXR5KCkKK3sKKyAgICByZXR1cm4gbV9hbGxvY2F0aW9u
LnNpemUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCmluZGV4IGM4NDcwMTIwZjY1MjNiYjg3NGU3
MDI2M2Y2YmFhNjgwOTdlZTcyYjYuLmY0OWE1YjE3ODIxNGQxZTcwNjg1MDNkOGEwOGJiNDIyZTYy
OGQ3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKQEAg
LTM0LDEwICszNCw5IEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQogICAg
IDogbV9oZWFwKGhlYXApCiAgICAgLCBtX3RvU3BhY2UoMCkKICAgICAsIG1fZnJvbVNwYWNlKDAp
Ci0gICAgLCBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkKDApCi0gICAgLCBtX3RvdGFsTWVtb3J5VXRp
bGl6ZWQoMCkKICAgICAsIG1faW5Db3B5aW5nUGhhc2UoZmFsc2UpCiAgICAgLCBtX251bWJlck9m
TG9hbmVkQmxvY2tzKDApCisgICAgLCBtX3dhdGVyTWFyaygwKQogewogfQogCkBAIC00Niw4ICs0
NSw2IEBAIHZvaWQgQ29waWVkU3BhY2U6OmluaXQoKQogICAgIG1fdG9TcGFjZSA9ICZtX2Jsb2Nr
czE7CiAgICAgbV9mcm9tU3BhY2UgPSAmbV9ibG9ja3MyOwogICAgIAotICAgIG1fdG90YWxNZW1v
cnlBbGxvY2F0ZWQgKz0gSGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZSAqIHNfaW5pdGlhbEJsb2NrTnVt
OwotCiAgICAgaWYgKCFhZGROZXdCbG9jaygpKQogICAgICAgICBDUkFTSCgpOwogfSAgIApAQCAt
NTcsNyArNTQsOCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93
Q2FzZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiAgICAgaWYgKGlzT3ZlcnNpemUoYnl0
ZXMpKQogICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVPdmVyc2l6ZShieXRlcywgb3V0UHRyKTsK
ICAgICAKLSAgICBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQgKz0gbV9hbGxvY2F0b3IuY3VycmVudFV0
aWxpemF0aW9uKCk7CisgICAgbV93YXRlck1hcmsgKz0gbV9hbGxvY2F0b3IuY3VycmVudFNpemUo
KTsKKwogICAgIGlmICghYWRkTmV3QmxvY2soKSkgewogICAgICAgICAqb3V0UHRyID0gMDsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODIsMTEgKzgwLDExIEBAIENoZWNrZWRCb29sZWFuIENv
cGllZFNwYWNlOjp0cnlBbGxvY2F0ZU92ZXJzaXplKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0
cikKICAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQoYmxvY2stPm1fb2Zmc2V0KSk7CiAKICAgICBt
X292ZXJzaXplRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAg
Ci0gICAgbV90b3RhbE1lbW9yeUFsbG9jYXRlZCArPSBibG9ja1NpemU7Ci0gICAgbV90b3RhbE1l
bW9yeVV0aWxpemVkICs9IGJ5dGVzOwogCisgICAgbV93YXRlck1hcmsgKz0gYnl0ZXM7CisgICAg
CiAgICAgKm91dFB0ciA9IGJsb2NrLT5tX29mZnNldDsKKyAgICBibG9jay0+bV9vZmZzZXQgPSBz
dGF0aWNfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJsb2NrLT5tX29mZnNldCkgKyBi
eXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMywxMiArMTAxLDkgQEAgQ2hlY2tl
ZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGUodm9pZCoqIHB0ciwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXcKIAogICAgIGlmIChtX2FsbG9jYXRvci53YXNMYXN0QWxsb2NhdGlv
bihvbGRQdHIsIG9sZFNpemUpKSB7CiAgICAgICAgIG1fYWxsb2NhdG9yLnJlc2V0TGFzdEFsbG9j
YXRpb24ob2xkUHRyKTsKLSAgICAgICAgaWYgKG1fYWxsb2NhdG9yLmZpdHNJbkN1cnJlbnRCbG9j
ayhuZXdTaXplKSkgewotICAgICAgICAgICAgbV90b3RhbE1lbW9yeVV0aWxpemVkICs9IG5ld1Np
emUgLSBvbGRTaXplOworICAgICAgICBpZiAobV9hbGxvY2F0b3IuZml0c0luQ3VycmVudEJsb2Nr
KG5ld1NpemUpKQogICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmFsbG9jYXRlKG5ld1Np
emUpOwotICAgICAgICB9CiAgICAgfQotICAgIG1fdG90YWxNZW1vcnlVdGlsaXplZCAtPSBvbGRT
aXplOwogCiAgICAgdm9pZCogcmVzdWx0ID0gMDsKICAgICBpZiAoIXRyeUFsbG9jYXRlKG5ld1Np
emUsICZyZXN1bHQpKSB7CkBAIC0xMzIsMTcgKzEyNywxNyBAQCBDaGVja2VkQm9vbGVhbiBDb3Bp
ZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHZvaWQqKiBwdHIsIHNpemVfdCBvbGRTaXpl
LCBzaQogICAgICAgICAqcHRyID0gMDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKwor
ICAgIG1fd2F0ZXJNYXJrICs9IG5ld1NpemUgLSBvbGRTaXplOworCiAgICAgbWVtY3B5KG5ld1B0
ciwgb2xkUHRyLCBvbGRTaXplKTsKIAogICAgIGlmIChpc092ZXJzaXplKG9sZFNpemUpKSB7CiAg
ICAgICAgIENvcGllZEJsb2NrKiBvbGRCbG9jayA9IG92ZXJzaXplQmxvY2tGb3Iob2xkUHRyKTsK
ICAgICAgICAgbV9vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUob2xkQmxvY2spOwogICAgICAgICBvbGRC
bG9jay0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKLSAgICAgICAgbV90b3RhbE1lbW9yeUFs
bG9jYXRlZCAtPSBvbGRTaXplICsgc2l6ZW9mKENvcGllZEJsb2NrKTsKICAgICB9CiAgICAgCi0g
ICAgbV90b3RhbE1lbW9yeVV0aWxpemVkIC09IG9sZFNpemU7Ci0KICAgICAqcHRyID0gbmV3UHRy
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTY2LDExICsxNjEsNiBAQCB2b2lkIENvcGllZFNw
YWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKiBibG9jaykKICAgICB9CiAKICAgICB7
Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX21lbW9yeVN0YXRzTG9jayk7Ci0gICAgICAg
IG1fdG90YWxNZW1vcnlVdGlsaXplZCArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRpY19jYXN0
PGNoYXIqPihibG9jay0+bV9vZmZzZXQpIC0gYmxvY2stPnBheWxvYWQoKSk7Ci0gICAgfQotCi0g
ICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2NrKTsKICAg
ICAgICAgQVNTRVJUKG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MgPiAwKTsKICAgICAgICAgbV9udW1i
ZXJPZkxvYW5lZEJsb2Nrcy0tOwpAQCAtMjEwLDE0ICsyMDAsMTQgQEAgdm9pZCBDb3BpZWRTcGFj
ZTo6ZG9uZUNvcHlpbmcoKQogICAgICAgICBDb3BpZWRCbG9jayogbmV4dCA9IHN0YXRpY19jYXN0
PENvcGllZEJsb2NrKj4oY3Vyci0+bmV4dCgpKTsKICAgICAgICAgaWYgKCFjdXJyLT5tX2lzUGlu
bmVkKSB7CiAgICAgICAgICAgICBtX292ZXJzaXplQmxvY2tzLnJlbW92ZShjdXJyKTsKLSAgICAg
ICAgICAgIG1fdG90YWxNZW1vcnlBbGxvY2F0ZWQgLT0gY3Vyci0+bV9hbGxvY2F0aW9uLnNpemUo
KTsKLSAgICAgICAgICAgIG1fdG90YWxNZW1vcnlVdGlsaXplZCAtPSBjdXJyLT5tX2FsbG9jYXRp
b24uc2l6ZSgpIC0gc2l6ZW9mKENvcGllZEJsb2NrKTsKICAgICAgICAgICAgIGN1cnItPm1fYWxs
b2NhdGlvbi5kZWFsbG9jYXRlKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY3Vyci0+
bV9pc1Bpbm5lZCA9IGZhbHNlOwogICAgICAgICBjdXJyID0gbmV4dDsKICAgICB9CiAKKyAgICBt
X3dhdGVyTWFyayA9IGNhbGN1bGF0ZVdhdGVyTWFyaygpOworCiAgICAgaWYgKCFtX3RvU3BhY2Ut
PmhlYWQoKSkgewogICAgICAgICBpZiAoIWFkZE5ld0Jsb2NrKCkpCiAgICAgICAgICAgICBDUkFT
SCgpOwpAQCAtMjQ2LDcgKzIzNiw3IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjpnZXRG
cmVzaEJsb2NrKEFsbG9jYXRpb25FZmZvcnQgYWxsb2NhdGlvbkVmZm9ydCwgQ29wCiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoYWxsb2NhdGlvbkVmZm9ydCA9PSBBbGxv
Y2F0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlmIChtX2hlYXAtPndhdGVyTWFyaygpID49IG1faGVh
cC0+aGlnaFdhdGVyTWFyaygpICYmIG1faGVhcC0+bV9pc1NhZmVUb0NvbGxlY3QpCisgICAgICAg
IGlmIChtX2hlYXAtPnNob3VsZENvbGxlY3QoKSkKICAgICAgICAgICAgIG1faGVhcC0+Y29sbGVj
dChIZWFwOjpEb05vdFN3ZWVwKTsKICAgICAgICAgCiAgICAgICAgIGlmICghZ2V0RnJlc2hCbG9j
ayhBbGxvY2F0aW9uTXVzdFN1Y2NlZWQsICZibG9jaykpIHsKQEAgLTI2MSw0ICsyNTEsMTkgQEAg
Q2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OmdldEZyZXNoQmxvY2soQWxsb2NhdGlvbkVmZm9y
dCBhbGxvY2F0aW9uRWZmb3J0LCBDb3AKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIHNp
emVfdCBDb3BpZWRTcGFjZTo6Y2FsY3VsYXRlV2F0ZXJNYXJrKCkKK3sKKyAgICBzaXplX3QgY2Fs
Y3VsYXRlZFNpemUgPSAwOworCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBzdGF0aWNf
Y2FzdDxDb3BpZWRCbG9jayo+KG1fdG9TcGFjZS0+aGVhZCgpKTsgYmxvY2s7IGJsb2NrID0gc3Rh
dGljX2Nhc3Q8Q29waWVkQmxvY2sqPihibG9jay0+bmV4dCgpKSkKKyAgICAgICAgY2FsY3VsYXRl
ZFNpemUgKz0gYmxvY2stPnNpemUoKTsKKworICAgIEFTU0VSVCghbV9mcm9tU3BhY2UtPmhlYWQo
KSk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PENvcGllZEJs
b2NrKj4obV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBzdGF0aWNfY2Fz
dDxDb3BpZWRCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQorICAgICAgICBjYWxjdWxhdGVkU2l6ZSAr
PSBibG9jay0+c2l6ZSgpOworCisgICAgcmV0dXJuIGNhbGN1bGF0ZWRTaXplOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCmlu
ZGV4IGU4ZmE4MDA1NTkwYzgzNjIzOTMzZjY0MDkwOGEyZWIxNDNkMmNmNzUuLjc4YzZhNGNlZmMz
YjBmYWQ5MmE2OGU1MmQ5NDM0NzQxNjA1YTczZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaApAQCAtNjUsOCArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNv
bnRhaW5zKHZvaWQqLCBDb3BpZWRCbG9jayomKTsKIAotICAgIHNpemVfdCB0b3RhbE1lbW9yeUFs
bG9jYXRlZCgpIHsgcmV0dXJuIG1fdG90YWxNZW1vcnlBbGxvY2F0ZWQ7IH0KLSAgICBzaXplX3Qg
dG90YWxNZW1vcnlVdGlsaXplZCgpIHsgcmV0dXJuIG1fdG90YWxNZW1vcnlVdGlsaXplZDsgfQor
ICAgIHNpemVfdCB3YXRlck1hcmsoKSB7IHJldHVybiBtX3dhdGVyTWFyazsgfQogCiAgICAgc3Rh
dGljIENvcGllZEJsb2NrKiBibG9ja0Zvcih2b2lkKik7CiAKQEAgLTg4LDYgKzg3LDggQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgYm9vbCBmaXRzSW5CbG9jayhDb3BpZWRCbG9jayosIHNpemVfdCk7
CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBvdmVyc2l6ZUJsb2NrRm9yKHZvaWQqIHB0cik7CiAK
KyAgICBzaXplX3QgY2FsY3VsYXRlV2F0ZXJNYXJrKCk7CisKICAgICBIZWFwKiBtX2hlYXA7CiAK
ICAgICBDb3BpZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CkBAIC05Nyw3ICs5OCw2IEBAIHByaXZh
dGU6CiAgICAgSGFzaFNldDxDb3BpZWRCbG9jayo+IG1fdG9TcGFjZVNldDsKIAogICAgIE11dGV4
IG1fdG9TcGFjZUxvY2s7Ci0gICAgTXV0ZXggbV9tZW1vcnlTdGF0c0xvY2s7CiAKICAgICBEb3Vi
bHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4qIG1fdG9TcGFjZTsKICAgICBEb3VibHlMaW5rZWRMaXN0
PEhlYXBCbG9jaz4qIG1fZnJvbVNwYWNlOwpAQCAtMTA2LDE1ICsxMDYsMTQgQEAgcHJpdmF0ZToK
ICAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9ibG9ja3MyOwogICAgIERvdWJseUxp
bmtlZExpc3Q8SGVhcEJsb2NrPiBtX292ZXJzaXplQmxvY2tzOwogICAgCi0gICAgc2l6ZV90IG1f
dG90YWxNZW1vcnlBbGxvY2F0ZWQ7Ci0gICAgc2l6ZV90IG1fdG90YWxNZW1vcnlVdGlsaXplZDsK
LQogICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsKIAogICAgIE11dGV4IG1fbG9hbmVkQmxvY2tz
TG9jazsgCiAgICAgVGhyZWFkQ29uZGl0aW9uIG1fbG9hbmVkQmxvY2tzQ29uZGl0aW9uOwogICAg
IHNpemVfdCBtX251bWJlck9mTG9hbmVkQmxvY2tzOwogCisgICAgc2l6ZV90IG1fd2F0ZXJNYXJr
OworCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX21heEFsbG9jYXRpb25TaXplID0gMzIgKiBL
QjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfcGFnZVNpemUgPSA0ICogS0I7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzX3BhZ2VNYXNrID0gfihzX3BhZ2VTaXplIC0gMSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5o
CmluZGV4IDBiMWIzOGQzMjYzYjg1NDIwODJhODllYjc4NTMzZDdkMjM4NWFlYzEuLmIzOWJhYTYx
YjVkMTlmZGFkYTkwYTVmNjMxMzE1MWMzNzRhZmNjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCkBAIC01Niw3ICs1
Niw3IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZygpCiAgICAgbV90
b1NwYWNlRmlsdGVyLnJlc2V0KCk7CiAgICAgbV9hbGxvY2F0b3Iuc3RhcnRlZENvcHlpbmcoKTsK
IAotICAgIG1fdG90YWxNZW1vcnlVdGlsaXplZCA9IDA7CisgICAgbV93YXRlck1hcmsgPSAwOwog
CiAgICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKICAgICBBU1NFUlQoIW1fbnVtYmVyT2ZM
b2FuZWRCbG9ja3MpOwpAQCAtMTE4LDExICsxMTgsNiBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4g
Q29waWVkU3BhY2U6OmFsbG9jYXRlTmV3QmxvY2soQ29waWVkQmxvY2sqKiBvdXRCbG9jaykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbWVtb3J5U3RhdHNMb2NrKTsKLSAgICAgICAgbV90b3RhbE1lbW9yeUFsbG9jYXRl
ZCArPSBIZWFwQmxvY2s6OnNfYmxvY2tTaXplOwotICAgIH0KLQogICAgICpvdXRCbG9jayA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGlvbi5iYXNlKCkpIENvcGllZEJsb2NrKGFsbG9jYXRpb24pOwog
ICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCBh
NWQ0YTA2M2ZiMWIxZWVkZmU2Y2ZkNjU4NjBmMTFhZGU3MzZiZjA0Li43ZDI0YzcyNTg1MGIxMmJj
MWUzNTRiMWE2Yzk3Y2NjZWVhZjg4NGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cApAQCAtODMxLDcgKzgzMSw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2Vl
cFRvZ2dsZSkKICAgICAvLyB3YXRlciBtYXJrIHRvIGJlIHByb3BvcnRpb25hbCB0byB0aGUgY3Vy
cmVudCBzaXplIG9mIHRoZSBoZWFwLiBUaGUgZXhhY3QKICAgICAvLyBwcm9wb3J0aW9uIGlzIGEg
Yml0IGFyYml0cmFyeS4gQSAyWCBtdWx0aXBsaWVyIGdpdmVzIGEgMToxIChoZWFwIHNpemUgOgog
ICAgIC8vIG5ldyBieXRlcyBhbGxvY2F0ZWQpIHByb3BvcnRpb24sIGFuZCBzZWVtcyB0byB3b3Jr
IHdlbGwgaW4gYmVuY2htYXJrcy4KLSAgICBzaXplX3QgbmV3U2l6ZSA9IHNpemUoKSArIG1fc3Rv
cmFnZVNwYWNlLnRvdGFsTWVtb3J5VXRpbGl6ZWQoKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHNp
emUoKSArIG1fc3RvcmFnZVNwYWNlLndhdGVyTWFyaygpOwogICAgIHNpemVfdCBwcm9wb3J0aW9u
YWxCeXRlcyA9IDIgKiBuZXdTaXplOwogICAgIGlmIChmdWxsR0MpIHsKICAgICAgICAgbV9sYXN0
RnVsbEdDU2l6ZSA9IG5ld1NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggMDlh
OTU4ODJiOGU2N2YxMjk2ODFiZmVhZGFiMWNiMDczZDk2YTQyNy4uMDIzNGYyNzRkNWUwN2UxOGE0
MTE2NDU2MzhlOTg5ZmE5YTE0OWQyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAt
MTU2LDYgKzE1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3Qgd2F0ZXJNYXJr
KCk7CiAgICAgICAgIHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7CiAgICAgICAgIHZvaWQgc2V0SGln
aFdhdGVyTWFyayhzaXplX3QpOworICAgICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKIAogICAg
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9IDI1NjsKICAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBtYXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKQEAgLTI0MSw2ICsy
NDIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RHQ0xlbmd0aDsK
ICAgICB9OwogCisgICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCisgICAgewor
I2lmIEVOQUJMRShHR0MpCisgICAgICAgIHJldHVybiBtX29iamVjdFNwYWNlLm51cnNlcnlXYXRl
ck1hcmsoKSA+PSBtX21pbkJ5dGVzUGVyQ3ljbGUgJiYgbV9pc1NhZmVUb0NvbGxlY3Q7CisjZWxz
ZQorICAgICAgICByZXR1cm4gd2F0ZXJNYXJrKCkgPj0gaGlnaFdhdGVyTWFyaygpICYmIG1faXNT
YWZlVG9Db2xsZWN0OworI2VuZGlmCisgICAgfQorCiAgICAgYm9vbCBIZWFwOjppc0J1c3koKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlv
bjsKQEAgLTI3NSw3ICsyODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBzaXpl
X3QgSGVhcDo6d2F0ZXJNYXJrKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX29iamVjdFNwYWNl
LndhdGVyTWFyaygpICsgbV9zdG9yYWdlU3BhY2UudG90YWxNZW1vcnlVdGlsaXplZCgpOworICAg
ICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS53YXRlck1hcmsoKSArIG1fc3RvcmFnZVNwYWNlLndh
dGVyTWFyaygpOwogICAgIH0KIAogICAgIGlubGluZSBzaXplX3QgSGVhcDo6aGlnaFdhdGVyTWFy
aygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcApp
bmRleCBlYjZkMmM2OTE1NWNjZWViYjkxMDkyNGE4ZDlhMjE5ODlkNzA2ZTM0Li4wNzFkNDViZmNk
NTQ1NWQ4MWI2ZTA0ZTk5NzQzNjI3ZTEzNjY0MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKQEAgLTQ4LDE2ICs0OCwxMCBAQCB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoKQogICAgIAogICAgIEFsbG9jYXRpb25F
ZmZvcnQgYWxsb2NhdGlvbkVmZm9ydDsKICAgICAKLSAgICBpZiAoKAotI2lmIEVOQUJMRShHR0Mp
Ci0gICAgICAgICBudXJzZXJ5V2F0ZXJNYXJrKCkgPCBtX2hlYXAtPm1fbWluQnl0ZXNQZXJDeWNs
ZQotI2Vsc2UKLSAgICAgICAgIG1faGVhcC0+d2F0ZXJNYXJrKCkgPCBtX2hlYXAtPmhpZ2hXYXRl
ck1hcmsoKQotI2VuZGlmCi0gICAgICAgICApIHx8ICFtX2hlYXAtPm1faXNTYWZlVG9Db2xsZWN0
KQotICAgICAgICBhbGxvY2F0aW9uRWZmb3J0ID0gQWxsb2NhdGlvbk11c3RTdWNjZWVkOwotICAg
IGVsc2UKKyAgICBpZiAobV9oZWFwLT5zaG91bGRDb2xsZWN0KCkpCiAgICAgICAgIGFsbG9jYXRp
b25FZmZvcnQgPSBBbGxvY2F0aW9uQ2FuRmFpbDsKKyAgICBlbHNlCisgICAgICAgIGFsbG9jYXRp
b25FZmZvcnQgPSBBbGxvY2F0aW9uTXVzdFN1Y2NlZWQ7CiAgICAgCiAgICAgTWFya2VkQmxvY2sq
IGJsb2NrID0gYWxsb2NhdGVCbG9jayhhbGxvY2F0aW9uRWZmb3J0KTsKICAgICBpZiAoYmxvY2sp
IHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132444</attachid>
            <date>2012-03-16 22:28:10 -0700</date>
            <delta_ts>2012-03-23 10:19:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80705-20120316222809.patch</filename>
            <type>text/plain</type>
            <size>19665</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
OGE5YTNhODMwMDFiODc5Yzc5ODI2OTc1MGMyNDU1NTA3YmJkNjQ2Li5lZDBlZGQzMzJjNDc5NDg4
NjUzZDY5MzBiNmIyYzg0YzMwMzkwZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OCBAQAorMjAxMi0wMy0xNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIFNpbXBsaWZ5IG1lbW9yeSB1c2FnZSB0cmFja2luZyBpbiBDb3Bp
ZWRTcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA3MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGhlYXAvQ29waWVkQWxsb2NhdG9yLmg6CisgICAgICAgIChDb3BpZWRBbGxvY2F0b3IpOiBSZW5h
bWUgY3VycmVudFV0aWxpemF0aW9uIHRvIGN1cnJlbnRTaXplLgorICAgICAgICAoSlNDOjpDb3Bp
ZWRBbGxvY2F0b3I6OmN1cnJlbnRDYXBhY2l0eSk6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9j
ay5oOgorICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6
cGF5bG9hZCk6IE1vdmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHBheWxvYWQoKSBvdXQgb2YgdGhl
IGNsYXNzCisgICAgICAgIGRlY2xhcmF0aW9uLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OnNpemUpOiBBZGQgbmV3IGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUg
YmxvY2sncyBzaXplLgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Y2FwYWNpdHkpOiBEaXR0
byBmb3IgY2FwYWNpdHkuCisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6OkNvcGllZFNwYWNlOjpDb3BpZWRTcGFjZSk6IFJlbW92ZSBvbGQgYm9ndXMgbWVtb3J5
IHN0YXRzIGZpZWxkcyBhbmQgYWRkIGEgbmV3CisgICAgICAgIGZpZWxkIGZvciB0aGUgd2F0ZXIg
bWFyay4KKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmluaXQpOgorICAgICAgICAoSlNDOjpD
b3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6IFdoZW4gd2UgZmFpbCB0byBhbGxvY2F0
ZSBmcm9tIHRoZSBjdXJyZW50IAorICAgICAgICBibG9jaywgd2UgbmVlZCB0byB1cGRhdGUgb3Vy
IGN1cnJlbnQgd2F0ZXIgbWFyayB3aXRoIHRoZSBzaXplIG9mIHRoZSBibG9jay4KKyAgICAgICAg
KEpTQzo6Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOiBXaGVuIHdlIGFsbG9jYXRl
IGEgbmV3IG92ZXJzaXplIGJsb2NrLCB3ZSAKKyAgICAgICAgbmVlZCB0byB1cGRhdGUgb3VyIGN1
cnJlbnQgd2F0ZXIgbWFyayB3aXRoIHRoZSBzaXplIG9mIHRoZSB1c2VkIHBvcnRpb24gb2YgdGhl
IGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZSk6IFdlIGRv
bid0IG5lZWQgdG8gdXBkYXRlIHRoZSB3YXRlciBtYXJrIHdoZW4gCisgICAgICAgIHJlYWxsb2Nh
dGluZyBiZWNhdXNlIGl0IHdpbGwgZWl0aGVyIGdldCBhY2NvdW50ZWQgZm9yIHdoZW4gd2UgZmls
bCB1cCB0aGUgYmxvY2sgbGF0ZXIgCisgICAgICAgIGluIHRoZSBjYXNlIG9mIGJlaW5nIGFibGUg
dG8gcmVhbGxvY2F0ZSBpbiB0aGUgY3VycmVudCBibG9jayBvciBpdCB3aWxsIGdldCBwaWNrZWQg
dXAgCisgICAgICAgIGltbWVkaWF0ZWx5IGJlY2F1c2Ugd2UnbGwgaGF2ZSB0byBnZXQgYSBuZXcg
YmxvY2suCisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXRlT3ZlcnNpemUp
OiBXZSBkbywgaG93ZXZlciwgbmVlZCB0byB1cGRhdGUgaW4gd2hlbiAKKyAgICAgICAgcmVhbGxv
Yy1pbmcgYW4gb3ZlcnNpemUgYmxvY2sgYmVjYXVzZSB3ZSBkZWFsbG9jYXRlIHRoZSBvbGQgYmxv
Y2sgYW5kIGFsbG9jYXRlIGEgYnJhbmQgCisgICAgICAgIG5ldyBvbmUuCisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTogVXBkYXRlIHRoZSB3YXRlciBtYXJrIGFz
IGJsb2NrcyBhcmUgcmV0dXJuZWQgdG8gCisgICAgICAgIHRoZSBDb3BpZWRTcGFjZSBieSB0aGUg
U2xvdFZpc2l0b3JzLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcpOiBB
ZGQgaW4gYW55IHBpbm5lZCBibG9ja3MgdG8gdGhlIHdhdGVyIG1hcmsuCisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjpnZXRGcmVzaEJsb2NrKTogV2UgdXNlIHRoZSBIZWFwJ3MgbmV3IGZ1bmN0
aW9uIHRvIHRlbGwgdXMgd2hldGhlciBvciAKKyAgICAgICAgbm90IHdlIHNob3VsZCBjb2xsZWN0
IG5vdyBpbnN0ZWFkIG9mIGRvaW5nIHRoZSBjYWxjdWxhdGlvbiBvdXJzZWxmLgorICAgICAgICAo
SlNDOjpDb3BpZWRTcGFjZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpDb3BpZWRTcGFjZTo6c2l6ZSk6IE1hbnVhbGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUg
Q29waWVkU3BhY2UsIHNpbWlsYXIgdG8gaG93IAorICAgICAgICBNYXJrZWRTcGFjZSBkb2VzLgor
ICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6Y2FwYWNpdHkpOiBEaXR0byBmb3IgY2FwYWNpdHku
CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFj
ZTo6d2F0ZXJNYXJrKToKKyAgICAgICAgKENvcGllZFNwYWNlKToKKyAgICAgICAgKiBoZWFwL0Nv
cGllZFNwYWNlSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3Rh
cnRlZENvcHlpbmcpOiBSZXNldCB3YXRlciBtYXJrIHRvIDAgd2hlbiB3ZSBzdGFydCBjb3B5aW5n
IGR1cmluZyBhIAorICAgICAgICBjb2xsZWN0aW9uLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFj
ZTo6YWxsb2NhdGVOZXdCbG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpmaXRzSW5C
bG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjphbGxvY2F0ZUZyb21CbG9jayk6Cisg
ICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6ZSk6IEluY29y
cG9yYXRlIHNpemUgb2YgQ29waWVkU3BhY2UgaW50byB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgSGVh
cC4KKyAgICAgICAgKEpTQzo6SGVhcDo6Y2FwYWNpdHkpOiBEaXR0byBmb3IgY2FwYWNpdHkuCisg
ICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAg
ICAgICAoSGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OnNob3VsZENvbGxlY3QpOiBOZXcgZnVu
Y3Rpb24gZm9yIG90aGVyIHN1Yi1wYXJ0cyBvZiB0aGUgSGVhcCB0byB1c2UgdG8gCisgICAgICAg
IGRldGVybWluZSB3aGV0aGVyIHRoZXkgc2hvdWxkIGluaXRpYXRlIGEgY29sbGVjdGlvbiBvciBj
b250aW51ZSB0byBhbGxvY2F0ZSBuZXcgYmxvY2tzLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6d2F0ZXJNYXJrKTogTm93IGlzIHRoZSBzdW0gb2YgdGhlIHdhdGVyIG1hcmtz
IG9mIHRoZSB0d28gc3ViLXBhcnRzIG9mIHRoZQorICAgICAgICBIZWFwIChNYXJrZWRTcGFjZSBh
bmQgQ29waWVkU3BhY2UpLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKTogQ2hhbmdlZCB0
byB1c2UgdGhlIEhlYXAncyBuZXcgc2hvdWxkQ29sbGVjdCgpIGZ1bmN0aW9uLgorCiAyMDEyLTAz
LTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJv
dmUgZGlhZ25vc3RpYyBiZW5lZml0IG9mIEpTR2xvYmFsRGF0YTo6bV9pc0luaXRpYWxpemluZ09i
amVjdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2Nh
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAppbmRl
eCBkYzNjNWRmZWQ3NDk5MGVhYzU3YmVjZDcyNTdiODZiYmMwMzczMmU2Li5mYjBhMDI4MTQyNzdi
NWIwZWJjYmI1YjJiZThhYzk4YTUxODJkNGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRBbGxvY2F0b3IuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydGVkQ29weWluZygpOwogICAgIHZvaWQgcmVzZXRDdXJyZW50QmxvY2soQ29waWVkQmxv
Y2sqKTsKICAgICB2b2lkIHJlc2V0TGFzdEFsbG9jYXRpb24odm9pZCopOwotICAgIHNpemVfdCBj
dXJyZW50VXRpbGl6YXRpb24oKTsKKyAgICBzaXplX3QgY3VycmVudENhcGFjaXR5KCk7CiAKIHBy
aXZhdGU6CiAgICAgQ29waWVkQmxvY2sqIGN1cnJlbnRCbG9jaygpIHsgcmV0dXJuIG1fY3VycmVu
dEJsb2NrOyB9CkBAIC05Miw5ICs5Miw5IEBAIGlubGluZSB2b2lkIENvcGllZEFsbG9jYXRvcjo6
cmVzZXRDdXJyZW50QmxvY2soQ29waWVkQmxvY2sqIG5ld0Jsb2NrKQogICAgIG1fY3VycmVudE9m
ZnNldCA9IHN0YXRpY19jYXN0PGNoYXIqPihuZXdCbG9jay0+bV9vZmZzZXQpOwogfQogCi1pbmxp
bmUgc2l6ZV90IENvcGllZEFsbG9jYXRvcjo6Y3VycmVudFV0aWxpemF0aW9uKCkKK2lubGluZSBz
aXplX3QgQ29waWVkQWxsb2NhdG9yOjpjdXJyZW50Q2FwYWNpdHkoKQogewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fY3VycmVudE9mZnNldCAtIG1fY3VycmVudEJsb2NrLT5wYXls
b2FkKCkpOworICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+Y2FwYWNpdHkoKTsKIH0KIAogaW5s
aW5lIHZvaWQgQ29waWVkQWxsb2NhdG9yOjpyZXNldExhc3RBbGxvY2F0aW9uKHZvaWQqIHB0cikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCmluZGV4IDM4N2IyZGRhYjZi
MjEzMDVkOWE4MTkyN2I4N2E2MjY4ZGUyYzRlNDkuLjQzMWI4NmMzODhlYmM4ZDA0YTBkMDk3MzMx
OTFjYmQzZDFmY2E5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2su
aApAQCAtNTUsMTYgKzU1LDMwIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIGNoYXIq
IHBheWxvYWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHRoaXMpICsgKChzaXplb2YoQ29waWVkQmxvY2spICsgNykgJiB+Nyk7Ci0gICAgfQorICAgIGNo
YXIqIHBheWxvYWQoKTsKKyAgICBzaXplX3Qgc2l6ZSgpOworICAgIHNpemVfdCBjYXBhY2l0eSgp
OwogCiBwcml2YXRlOgogICAgIHZvaWQqIG1fb2Zmc2V0OwogICAgIHVpbnRwdHJfdCBtX2lzUGlu
bmVkOwogfTsKIAoraW5saW5lIGNoYXIqIENvcGllZEJsb2NrOjpwYXlsb2FkKCkKK3sKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyAoKHNpemVvZihDb3BpZWRCbG9j
aykgKyA3KSAmIH43KTsKK30KKworaW5saW5lIHNpemVfdCBDb3BpZWRCbG9jazo6c2l6ZSgpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8Y2hhcio+KG1fb2Zm
c2V0KSAtIHBheWxvYWQoKSk7Cit9CisKK2lubGluZSBzaXplX3QgQ29waWVkQmxvY2s6OmNhcGFj
aXR5KCkKK3sKKyAgICByZXR1cm4gbV9hbGxvY2F0aW9uLnNpemUoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuY3BwCmluZGV4IDAwZmZiMWYwNTk4NTY5ZTc0YTcxNTk4ODJhMzE1OWU2ZDc1OThmMzIuLjc4
NDQxOThhOGQ1ZWZkZGZhMDZhOTEzN2UyYjVhNzZkMWI5ODE1ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKQEAgLTM0LDEwICszNCw5IEBAIENvcGllZFNw
YWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQogICAgIDogbV9oZWFwKGhlYXApCiAgICAgLCBt
X3RvU3BhY2UoMCkKICAgICAsIG1fZnJvbVNwYWNlKDApCi0gICAgLCBtX3RvdGFsTWVtb3J5QWxs
b2NhdGVkKDApCi0gICAgLCBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQoMCkKICAgICAsIG1faW5Db3B5
aW5nUGhhc2UoZmFsc2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tzKDApCisgICAgLCBt
X3dhdGVyTWFyaygwKQogewogfQogCkBAIC00Niw4ICs0NSw2IEBAIHZvaWQgQ29waWVkU3BhY2U6
OmluaXQoKQogICAgIG1fdG9TcGFjZSA9ICZtX2Jsb2NrczE7CiAgICAgbV9mcm9tU3BhY2UgPSAm
bV9ibG9ja3MyOwogICAgIAotICAgIG1fdG90YWxNZW1vcnlBbGxvY2F0ZWQgKz0gSGVhcEJsb2Nr
OjpzX2Jsb2NrU2l6ZSAqIHNfaW5pdGlhbEJsb2NrTnVtOwotCiAgICAgaWYgKCFhZGROZXdCbG9j
aygpKQogICAgICAgICBDUkFTSCgpOwogfSAgIApAQCAtNTcsNyArNTQsOCBAQCBDaGVja2VkQm9v
bGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMsIHZvaWQq
KiBvdXRQdHIpCiAgICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMpKQogICAgICAgICByZXR1cm4gdHJ5
QWxsb2NhdGVPdmVyc2l6ZShieXRlcywgb3V0UHRyKTsKICAgICAKLSAgICBtX3RvdGFsTWVtb3J5
VXRpbGl6ZWQgKz0gbV9hbGxvY2F0b3IuY3VycmVudFV0aWxpemF0aW9uKCk7CisgICAgbV93YXRl
ck1hcmsgKz0gbV9hbGxvY2F0b3IuY3VycmVudENhcGFjaXR5KCk7CisKICAgICBpZiAoIWFkZE5l
d0Jsb2NrKCkpIHsKICAgICAgICAgKm91dFB0ciA9IDA7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTcyLDIxICs3MCwyMSBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2Nh
dGVPdmVyc2l6ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCiAgICAgQVNTRVJUKGlzT3Zl
cnNpemUoYnl0ZXMpKTsKICAgICAKICAgICBzaXplX3QgYmxvY2tTaXplID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKFdURjo6cGFnZVNpemUoKSwgc2l6ZW9mKENvcGllZEJsb2NrKSArIGJ5dGVz
KTsKKwogICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRp
b25BbGlnbmVkOjphbGxvY2F0ZShibG9ja1NpemUsIFdURjo6cGFnZVNpemUoKSwgT1NBbGxvY2F0
b3I6OkpTR0NIZWFwUGFnZXMpOwogICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oYWxsb2NhdGlv
bikpIHsKICAgICAgICAgKm91dFB0ciA9IDA7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CisKICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRpb24uYmFz
ZSgpKSBDb3BpZWRCbG9jayhhbGxvY2F0aW9uKTsKICAgICBtX292ZXJzaXplQmxvY2tzLnB1c2go
YmxvY2spOwotICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChibG9jay0+bV9vZmZzZXQpKTsKLQog
ICAgIG1fb3ZlcnNpemVGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsK
ICAgICAKLSAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkICs9IGJsb2NrU2l6ZTsKLSAgICBtX3Rv
dGFsTWVtb3J5VXRpbGl6ZWQgKz0gYnl0ZXM7CisgICAgKm91dFB0ciA9IGFsbG9jYXRlRnJvbUJs
b2NrKGJsb2NrLCBieXRlcyk7CisKKyAgICBtX3dhdGVyTWFyayArPSBibG9jay0+Y2FwYWNpdHko
KTsKIAotICAgICpvdXRQdHIgPSBibG9jay0+bV9vZmZzZXQ7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTEwMywxMiArMTAxLDkgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeVJl
YWxsb2NhdGUodm9pZCoqIHB0ciwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXcKIAogICAgIGlm
IChtX2FsbG9jYXRvci53YXNMYXN0QWxsb2NhdGlvbihvbGRQdHIsIG9sZFNpemUpKSB7CiAgICAg
ICAgIG1fYWxsb2NhdG9yLnJlc2V0TGFzdEFsbG9jYXRpb24ob2xkUHRyKTsKLSAgICAgICAgaWYg
KG1fYWxsb2NhdG9yLmZpdHNJbkN1cnJlbnRCbG9jayhuZXdTaXplKSkgewotICAgICAgICAgICAg
bV90b3RhbE1lbW9yeVV0aWxpemVkICs9IG5ld1NpemUgLSBvbGRTaXplOworICAgICAgICBpZiAo
bV9hbGxvY2F0b3IuZml0c0luQ3VycmVudEJsb2NrKG5ld1NpemUpKQogICAgICAgICAgICAgcmV0
dXJuIG1fYWxsb2NhdG9yLmFsbG9jYXRlKG5ld1NpemUpOwotICAgICAgICB9CiAgICAgfQotICAg
IG1fdG90YWxNZW1vcnlVdGlsaXplZCAtPSBvbGRTaXplOwogCiAgICAgdm9pZCogcmVzdWx0ID0g
MDsKICAgICBpZiAoIXRyeUFsbG9jYXRlKG5ld1NpemUsICZyZXN1bHQpKSB7CkBAIC0xMzIsMTcg
KzEyNywxNiBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJz
aXplKHZvaWQqKiBwdHIsIHNpemVfdCBvbGRTaXplLCBzaQogICAgICAgICAqcHRyID0gMDsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKwogICAgIG1lbWNweShuZXdQdHIsIG9sZFB0ciwg
b2xkU2l6ZSk7CiAKICAgICBpZiAoaXNPdmVyc2l6ZShvbGRTaXplKSkgewogICAgICAgICBDb3Bp
ZWRCbG9jayogb2xkQmxvY2sgPSBvdmVyc2l6ZUJsb2NrRm9yKG9sZFB0cik7CiAgICAgICAgIG1f
b3ZlcnNpemVCbG9ja3MucmVtb3ZlKG9sZEJsb2NrKTsKKyAgICAgICAgbV93YXRlck1hcmsgLT0g
b2xkQmxvY2stPmNhcGFjaXR5KCk7CiAgICAgICAgIG9sZEJsb2NrLT5tX2FsbG9jYXRpb24uZGVh
bGxvY2F0ZSgpOwotICAgICAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkIC09IG9sZFNpemUgKyBz
aXplb2YoQ29waWVkQmxvY2spOwogICAgIH0KICAgICAKLSAgICBtX3RvdGFsTWVtb3J5VXRpbGl6
ZWQgLT0gb2xkU2l6ZTsKLQogICAgICpwdHIgPSBuZXdQdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0xNjcsNyArMTYxLDcgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhD
b3BpZWRCbG9jayogYmxvY2spCiAKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X21lbW9yeVN0YXRzTG9jayk7Ci0gICAgICAgIG1fdG90YWxNZW1vcnlVdGlsaXplZCArPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHN0YXRpY19jYXN0PGNoYXIqPihibG9jay0+bV9vZmZzZXQpIC0gYmxv
Y2stPnBheWxvYWQoKSk7CisgICAgICAgIG1fd2F0ZXJNYXJrICs9IGJsb2NrLT5jYXBhY2l0eSgp
OwogICAgIH0KIAogICAgIHsKQEAgLTE5NCw2ICsxODgsNyBAQCB2b2lkIENvcGllZFNwYWNlOjpk
b25lQ29weWluZygpCiAgICAgICAgIGlmIChibG9jay0+bV9pc1Bpbm5lZCkgewogICAgICAgICAg
ICAgYmxvY2stPm1faXNQaW5uZWQgPSBmYWxzZTsKICAgICAgICAgICAgIG1fdG9TcGFjZS0+cHVz
aChibG9jayk7CisgICAgICAgICAgICBtX3dhdGVyTWFyayArPSBibG9jay0+Y2FwYWNpdHkoKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTIxMCwxMSArMjA1LDExIEBA
IHZvaWQgQ29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkKICAgICAgICAgQ29waWVkQmxvY2sqIG5l
eHQgPSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KGN1cnItPm5leHQoKSk7CiAgICAgICAgIGlm
ICghY3Vyci0+bV9pc1Bpbm5lZCkgewogICAgICAgICAgICAgbV9vdmVyc2l6ZUJsb2Nrcy5yZW1v
dmUoY3Vycik7Ci0gICAgICAgICAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkIC09IGN1cnItPm1f
YWxsb2NhdGlvbi5zaXplKCk7Ci0gICAgICAgICAgICBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQgLT0g
Y3Vyci0+bV9hbGxvY2F0aW9uLnNpemUoKSAtIHNpemVvZihDb3BpZWRCbG9jayk7CiAgICAgICAg
ICAgICBjdXJyLT5tX2FsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOwotICAgICAgICB9IGVsc2UKKyAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGN1cnItPm1faXNQaW5uZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIG1fd2F0ZXJNYXJrICs9IGN1cnItPmNhcGFjaXR5KCk7CisgICAgICAgIH0KICAg
ICAgICAgY3VyciA9IG5leHQ7CiAgICAgfQogCkBAIC0yNDYsNyArMjQxLDcgQEAgQ2hlY2tlZEJv
b2xlYW4gQ29waWVkU3BhY2U6OmdldEZyZXNoQmxvY2soQWxsb2NhdGlvbkVmZm9ydCBhbGxvY2F0
aW9uRWZmb3J0LCBDb3AKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChh
bGxvY2F0aW9uRWZmb3J0ID09IEFsbG9jYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKG1faGVh
cC0+d2F0ZXJNYXJrKCkgPj0gbV9oZWFwLT5oaWdoV2F0ZXJNYXJrKCkgJiYgbV9oZWFwLT5tX2lz
U2FmZVRvQ29sbGVjdCkKKyAgICAgICAgaWYgKG1faGVhcC0+c2hvdWxkQ29sbGVjdCgpKQogICAg
ICAgICAgICAgbV9oZWFwLT5jb2xsZWN0KEhlYXA6OkRvTm90U3dlZXApOwogICAgICAgICAKICAg
ICAgICAgaWYgKCFnZXRGcmVzaEJsb2NrKEFsbG9jYXRpb25NdXN0U3VjY2VlZCwgJmJsb2NrKSkg
ewpAQCAtMjgxLDYgKzI3Niw0MCBAQCB2b2lkIENvcGllZFNwYWNlOjpkZXN0cm95KCkKICAgICAg
ICAgQ29waWVkQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihtX292ZXJz
aXplQmxvY2tzLnJlbW92ZUhlYWQoKSk7CiAgICAgICAgIGJsb2NrLT5tX2FsbG9jYXRpb24uZGVh
bGxvY2F0ZSgpOwogICAgIH0KKworICAgIG1fd2F0ZXJNYXJrID0gMDsKK30KKworc2l6ZV90IENv
cGllZFNwYWNlOjpzaXplKCkKK3sKKyAgICBzaXplX3QgY2FsY3VsYXRlZFNpemUgPSAwOworCisg
ICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KG1f
dG9TcGFjZS0+aGVhZCgpKTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sq
PihibG9jay0+bmV4dCgpKSkKKyAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUo
KTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29waWVkQmxv
Y2sqPihtX2Zyb21TcGFjZS0+aGVhZCgpKTsgYmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29w
aWVkQmxvY2sqPihibG9jay0+bmV4dCgpKSkKKyAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxv
Y2stPnNpemUoKTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8
Q29waWVkQmxvY2sqPihtX292ZXJzaXplQmxvY2tzLmhlYWQoKSk7IGJsb2NrOyBibG9jayA9IHN0
YXRpY19jYXN0PENvcGllZEJsb2NrKj4oYmxvY2stPm5leHQoKSkpCisgICAgICAgIGNhbGN1bGF0
ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7CisKKyAgICByZXR1cm4gY2FsY3VsYXRlZFNpemU7Cit9
CisKK3NpemVfdCBDb3BpZWRTcGFjZTo6Y2FwYWNpdHkoKQoreworICAgIHNpemVfdCBjYWxjdWxh
dGVkQ2FwYWNpdHkgPSAwOworCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBzdGF0aWNf
Y2FzdDxDb3BpZWRCbG9jayo+KG1fdG9TcGFjZS0+aGVhZCgpKTsgYmxvY2s7IGJsb2NrID0gc3Rh
dGljX2Nhc3Q8Q29waWVkQmxvY2sqPihibG9jay0+bmV4dCgpKSkKKyAgICAgICAgY2FsY3VsYXRl
ZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOworCisgICAgZm9yIChDb3BpZWRCbG9jayog
YmxvY2sgPSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KG1fZnJvbVNwYWNlLT5oZWFkKCkpOyBi
bG9jazsgYmxvY2sgPSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KGJsb2NrLT5uZXh0KCkpKQor
ICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisKKyAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PENvcGllZEJsb2NrKj4obV9vdmVy
c2l6ZUJsb2Nrcy5oZWFkKCkpOyBibG9jazsgYmxvY2sgPSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9j
ayo+KGJsb2NrLT5uZXh0KCkpKQorICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2st
PmNhcGFjaXR5KCk7CisKKyAgICByZXR1cm4gY2FsY3VsYXRlZENhcGFjaXR5OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCmlu
ZGV4IGQxZWQ5YmUxZGFmNDNlZDcyM2VlNDg4OTUwYmE3NDI5ZTIzMzcyOGYuLmNjNTRiY2VhNjI4
OTVlNzgxMDgwMDQwYjZmZDE5M2YxZWNmNzIzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaApAQCAtNjYsOCArNjYsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIGNv
bnRhaW5zKHZvaWQqLCBDb3BpZWRCbG9jayomKTsKIAotICAgIHNpemVfdCB0b3RhbE1lbW9yeUFs
bG9jYXRlZCgpIHsgcmV0dXJuIG1fdG90YWxNZW1vcnlBbGxvY2F0ZWQ7IH0KLSAgICBzaXplX3Qg
dG90YWxNZW1vcnlVdGlsaXplZCgpIHsgcmV0dXJuIG1fdG90YWxNZW1vcnlVdGlsaXplZDsgfQor
ICAgIHNpemVfdCB3YXRlck1hcmsoKSB7IHJldHVybiBtX3dhdGVyTWFyazsgfQorICAgIHNpemVf
dCBzaXplKCk7CisgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKICAgICB2b2lkIGRlc3Ryb3koKTsK
IApAQCAtOTEsNiArOTIsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGZpdHNJbkJsb2Nr
KENvcGllZEJsb2NrKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIG92ZXJzaXpl
QmxvY2tGb3Iodm9pZCogcHRyKTsKIAorICAgIHNpemVfdCBjYWxjdWxhdGVXYXRlck1hcmsoKTsK
KwogICAgIEhlYXAqIG1faGVhcDsKIAogICAgIENvcGllZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsK
QEAgLTEwMCw3ICsxMDMsNiBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8Q29waWVkQmxvY2sqPiBt
X3RvU3BhY2VTZXQ7CiAKICAgICBNdXRleCBtX3RvU3BhY2VMb2NrOwotICAgIE11dGV4IG1fbWVt
b3J5U3RhdHNMb2NrOwogCiAgICAgRG91Ymx5TGlua2VkTGlzdDxIZWFwQmxvY2s+KiBtX3RvU3Bh
Y2U7CiAgICAgRG91Ymx5TGlua2VkTGlzdDxIZWFwQmxvY2s+KiBtX2Zyb21TcGFjZTsKQEAgLTEw
OSwxNSArMTExLDE1IEBAIHByaXZhdGU6CiAgICAgRG91Ymx5TGlua2VkTGlzdDxIZWFwQmxvY2s+
IG1fYmxvY2tzMjsKICAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9vdmVyc2l6ZUJs
b2NrczsKICAgIAotICAgIHNpemVfdCBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkOwotICAgIHNpemVf
dCBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQ7Ci0KICAgICBib29sIG1faW5Db3B5aW5nUGhhc2U7CiAK
ICAgICBNdXRleCBtX2xvYW5lZEJsb2Nrc0xvY2s7IAogICAgIFRocmVhZENvbmRpdGlvbiBtX2xv
YW5lZEJsb2Nrc0NvbmRpdGlvbjsKICAgICBzaXplX3QgbV9udW1iZXJPZkxvYW5lZEJsb2NrczsK
IAorICAgIE11dGV4IG1fbWVtb3J5U3RhdHNMb2NrOworICAgIHNpemVfdCBtX3dhdGVyTWFyazsK
KwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19tYXhBbGxvY2F0aW9uU2l6ZSA9IDMyICogS0I7
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2luaXRpYWxCbG9ja051bSA9IDE2OwogICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja01hc2sgPSB+KEhlYXBCbG9jazo6c19ibG9ja1NpemUg
LSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJ
bmxpbmVNZXRob2RzLmgKaW5kZXggYmE3ZTg1OWZiMzNkYzFlOGM1YWE1M2RkNDA4ODE2Yjg5OGFm
MmE4Ni4uOWZlYzFmZGM4Zjc0YmJlN2ZkNDZhYjFiMGRlM2NiNTJmOGJlMWRkNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgKQEAgLTU2LDcgKzU2LDcgQEAgaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5
aW5nKCkKICAgICBtX3RvU3BhY2VGaWx0ZXIucmVzZXQoKTsKICAgICBtX2FsbG9jYXRvci5zdGFy
dGVkQ29weWluZygpOwogCi0gICAgbV90b3RhbE1lbW9yeVV0aWxpemVkID0gMDsKKyAgICBtX3dh
dGVyTWFyayA9IDA7CiAKICAgICBBU1NFUlQoIW1faW5Db3B5aW5nUGhhc2UpOwogICAgIEFTU0VS
VCghbV9udW1iZXJPZkxvYW5lZEJsb2Nrcyk7CkBAIC0xMTgsMTggKzExOCwxMyBAQCBpbmxpbmUg
Q2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OmFsbG9jYXRlTmV3QmxvY2soQ29waWVkQmxvY2sq
KiBvdXRCbG9jaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbWVtb3J5U3RhdHNMb2NrKTsKLSAgICAgICAgbV90b3Rh
bE1lbW9yeUFsbG9jYXRlZCArPSBIZWFwQmxvY2s6OnNfYmxvY2tTaXplOwotICAgIH0KLQogICAg
ICpvdXRCbG9jayA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGlvbi5iYXNlKCkpIENvcGllZEJsb2Nr
KGFsbG9jYXRpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCiBpbmxpbmUgYm9vbCBDb3BpZWRT
cGFjZTo6Zml0c0luQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrLCBzaXplX3QgYnl0ZXMpCiB7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihibG9jay0+bV9vZmZzZXQpICsgYnl0ZXMgPCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplICYm
IHN0YXRpY19jYXN0PGNoYXIqPihibG9jay0+bV9vZmZzZXQpICsgYnl0ZXMgPiBibG9jay0+bV9v
ZmZzZXQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihibG9jay0+bV9vZmZzZXQpICsg
Ynl0ZXMgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBibG9jay0+Y2FwYWNpdHko
KSAmJiBzdGF0aWNfY2FzdDxjaGFyKj4oYmxvY2stPm1fb2Zmc2V0KSArIGJ5dGVzID4gYmxvY2st
Pm1fb2Zmc2V0OwogfQogCiBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFs
bG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKQEAgLTE0NiwxNCArMTQxLDEzIEBA
IGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5
dGVzLCB2b2lkKiogb3V0UHRyKQogCiBpbmxpbmUgdm9pZCogQ29waWVkU3BhY2U6OmFsbG9jYXRl
RnJvbUJsb2NrKENvcGllZEJsb2NrKiBibG9jaywgc2l6ZV90IGJ5dGVzKQogewotICAgIEFTU0VS
VCghaXNPdmVyc2l6ZShieXRlcykpOwogICAgIEFTU0VSVChmaXRzSW5CbG9jayhibG9jaywgYnl0
ZXMpKTsKICAgICBBU1NFUlQoaXM4Qnl0ZUFsaWduZWQoYmxvY2stPm1fb2Zmc2V0KSk7CiAgICAg
CiAgICAgdm9pZCogcHRyID0gYmxvY2stPm1fb2Zmc2V0OwotICAgIEFTU0VSVChibG9jay0+bV9v
ZmZzZXQgPj0gYmxvY2stPnBheWxvYWQoKSAmJiBibG9jay0+bV9vZmZzZXQgPCByZWludGVycHJl
dF9jYXN0PGNoYXIqPihibG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplKTsKKyAgICBBU1NF
UlQoYmxvY2stPm1fb2Zmc2V0ID49IGJsb2NrLT5wYXlsb2FkKCkgJiYgYmxvY2stPm1fb2Zmc2V0
IDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgYmxvY2stPmNhcGFjaXR5KCkpOwog
ICAgIGJsb2NrLT5tX29mZnNldCA9IHN0YXRpY19jYXN0PHZvaWQqPigoc3RhdGljX2Nhc3Q8Y2hh
cio+KHB0cikgKyBieXRlcykpOwotICAgIEFTU0VSVChibG9jay0+bV9vZmZzZXQgPj0gYmxvY2st
PnBheWxvYWQoKSAmJiBibG9jay0+bV9vZmZzZXQgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihi
bG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplKTsKKyAgICBBU1NFUlQoYmxvY2stPm1fb2Zm
c2V0ID49IGJsb2NrLT5wYXlsb2FkKCkgJiYgYmxvY2stPm1fb2Zmc2V0IDwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oYmxvY2spICsgYmxvY2stPmNhcGFjaXR5KCkpOwogCiAgICAgQVNTRVJUKGlz
OEJ5dGVBbGlnbmVkKHB0cikpOwogICAgIHJldHVybiBwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCmluZGV4IGRhNzIzMWNkYmM0ODZjMmYyYjg5OGMwOGQyYmMxNzJlOGI4MzJlYmQu
LjYyNDFmYjNkZjNiMzFlOTgyNTRmYmJiZTA0MDRmNWM2MGYwYTMxNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC03MzIsMTIgKzczMiwxMiBAQCBzaXplX3QgSGVhcDo6b2Jq
ZWN0Q291bnQoKQogCiBzaXplX3QgSGVhcDo6c2l6ZSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0
U3BhY2UuZm9yRWFjaEJsb2NrPFNpemU+KCk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZm9y
RWFjaEJsb2NrPFNpemU+KCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCk7CiB9CiAKIHNpemVfdCBI
ZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2Nr
PENhcGFjaXR5PigpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmZvckVhY2hCbG9jazxDYXBh
Y2l0eT4oKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7CiB9CiAKIHNpemVfdCBIZWFwOjpw
cm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCkBAIC04MzIsNyArODMyLDcgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZ2xlKQogICAgIC8vIHdhdGVyIG1hcmsgdG8g
YmUgcHJvcG9ydGlvbmFsIHRvIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAuIFRoZSBleGFj
dAogICAgIC8vIHByb3BvcnRpb24gaXMgYSBiaXQgYXJiaXRyYXJ5LiBBIDJYIG11bHRpcGxpZXIg
Z2l2ZXMgYSAxOjEgKGhlYXAgc2l6ZSA6CiAgICAgLy8gbmV3IGJ5dGVzIGFsbG9jYXRlZCkgcHJv
cG9ydGlvbiwgYW5kIHNlZW1zIHRvIHdvcmsgd2VsbCBpbiBiZW5jaG1hcmtzLgotICAgIHNpemVf
dCBuZXdTaXplID0gc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2UudG90YWxNZW1vcnlVdGlsaXplZCgp
OworICAgIHNpemVfdCBuZXdTaXplID0gc2l6ZSgpOwogICAgIHNpemVfdCBwcm9wb3J0aW9uYWxC
eXRlcyA9IDIgKiBuZXdTaXplOwogICAgIGlmIChmdWxsR0MpIHsKICAgICAgICAgbV9sYXN0RnVs
bEdDU2l6ZSA9IG5ld1NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggMDlhOTU4
ODJiOGU2N2YxMjk2ODFiZmVhZGFiMWNiMDczZDk2YTQyNy4uMDIzNGYyNzRkNWUwN2UxOGE0MTE2
NDU2MzhlOTg5ZmE5YTE0OWQyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtMTU2
LDYgKzE1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3Qgd2F0ZXJNYXJrKCk7
CiAgICAgICAgIHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7CiAgICAgICAgIHZvaWQgc2V0SGlnaFdh
dGVyTWFyayhzaXplX3QpOworICAgICAgICBib29sIHNob3VsZENvbGxlY3QoKTsKIAogICAgICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9IDI1NjsKICAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBtYXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKQEAgLTI0MSw2ICsyNDIs
MTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RHQ0xlbmd0aDsKICAg
ICB9OwogCisgICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCisgICAgeworI2lm
IEVOQUJMRShHR0MpCisgICAgICAgIHJldHVybiBtX29iamVjdFNwYWNlLm51cnNlcnlXYXRlck1h
cmsoKSA+PSBtX21pbkJ5dGVzUGVyQ3ljbGUgJiYgbV9pc1NhZmVUb0NvbGxlY3Q7CisjZWxzZQor
ICAgICAgICByZXR1cm4gd2F0ZXJNYXJrKCkgPj0gaGlnaFdhdGVyTWFyaygpICYmIG1faXNTYWZl
VG9Db2xsZWN0OworI2VuZGlmCisgICAgfQorCiAgICAgYm9vbCBIZWFwOjppc0J1c3koKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbjsK
QEAgLTI3NSw3ICsyODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBzaXplX3Qg
SGVhcDo6d2F0ZXJNYXJrKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX29iamVjdFNwYWNlLndh
dGVyTWFyaygpICsgbV9zdG9yYWdlU3BhY2UudG90YWxNZW1vcnlVdGlsaXplZCgpOworICAgICAg
ICByZXR1cm4gbV9vYmplY3RTcGFjZS53YXRlck1hcmsoKSArIG1fc3RvcmFnZVNwYWNlLndhdGVy
TWFyaygpOwogICAgIH0KIAogICAgIGlubGluZSBzaXplX3QgSGVhcDo6aGlnaFdhdGVyTWFyaygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAppbmRl
eCBlYjZkMmM2OTE1NWNjZWViYjkxMDkyNGE4ZDlhMjE5ODlkNzA2ZTM0Li4wNzFkNDViZmNkNTQ1
NWQ4MWI2ZTA0ZTk5NzQzNjI3ZTEzNjY0MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKQEAgLTQ4LDE2ICs0OCwxMCBAQCB2b2lkKiBNYXJr
ZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoKQogICAgIAogICAgIEFsbG9jYXRpb25FZmZv
cnQgYWxsb2NhdGlvbkVmZm9ydDsKICAgICAKLSAgICBpZiAoKAotI2lmIEVOQUJMRShHR0MpCi0g
ICAgICAgICBudXJzZXJ5V2F0ZXJNYXJrKCkgPCBtX2hlYXAtPm1fbWluQnl0ZXNQZXJDeWNsZQot
I2Vsc2UKLSAgICAgICAgIG1faGVhcC0+d2F0ZXJNYXJrKCkgPCBtX2hlYXAtPmhpZ2hXYXRlck1h
cmsoKQotI2VuZGlmCi0gICAgICAgICApIHx8ICFtX2hlYXAtPm1faXNTYWZlVG9Db2xsZWN0KQot
ICAgICAgICBhbGxvY2F0aW9uRWZmb3J0ID0gQWxsb2NhdGlvbk11c3RTdWNjZWVkOwotICAgIGVs
c2UKKyAgICBpZiAobV9oZWFwLT5zaG91bGRDb2xsZWN0KCkpCiAgICAgICAgIGFsbG9jYXRpb25F
ZmZvcnQgPSBBbGxvY2F0aW9uQ2FuRmFpbDsKKyAgICBlbHNlCisgICAgICAgIGFsbG9jYXRpb25F
ZmZvcnQgPSBBbGxvY2F0aW9uTXVzdFN1Y2NlZWQ7CiAgICAgCiAgICAgTWFya2VkQmxvY2sqIGJs
b2NrID0gYWxsb2NhdGVCbG9jayhhbGxvY2F0aW9uRWZmb3J0KTsKICAgICBpZiAoYmxvY2spIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>