<?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>47735</bug_id>
          
          <creation_ts>2010-10-15 12:59:05 -0700</creation_ts>
          <short_desc>Remove some functions from class Node and make a few others non-virtual</short_desc>
          <delta_ts>2019-02-06 09:04:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>294873</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-15 12:59:05 -0700</bug_when>
    <thetext>Remove some functions from class Node and make a few others non-virtual</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295014</commentid>
    <comment_count>1</comment_count>
      <attachid>70919</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-15 16:51:04 -0700</bug_when>
    <thetext>Created attachment 70919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295015</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-15 16:51:31 -0700</bug_when>
    <thetext>Reported bug 47755 about the false positive style violation found in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295018</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-15 16:53:04 -0700</bug_when>
    <thetext>Attachment 70919 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/dom/Node.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295087</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-15 18:34:10 -0700</bug_when>
    <thetext>Attachment 70919 did not build on chromium:
Build output: http://queues.webkit.org/results/4478010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295172</commentid>
    <comment_count>5</comment_count>
      <attachid>70919</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-16 16:48:18 -0700</bug_when>
    <thetext>Comment on attachment 70919
Patch

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

r=me

&gt; WebCore/ChangeLog:62
&gt; +        (WebCore::enclosingInline): Moved function here from the Node class. Also
&gt; +        fixed an incorrect cast this function did, which assumed the function
&gt; +        result was always an element, which the function does not guarantee.

Does this change observable behavior?

&gt; WebCore/dom/Node.h:370
&gt; +    // see @ref traversePreviousNode()

Is there a reason to keep a part of this comment in Javadoc style?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295173</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-10-16 16:59:48 -0700</bug_when>
    <thetext>Note the cr-linux redness. I think it&apos;s because of the FloatPoint.h include removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295514</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-18 08:21:21 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Note the cr-linux redness. I think it&apos;s because of the FloatPoint.h include removed.

I’ll add an include of MathExtras.h to HistoryItem.cpp to pick up the ceil function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295639</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-18 11:24:52 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; WebCore/ChangeLog:62
&gt; &gt; +        (WebCore::enclosingInline): Moved function here from the Node class. Also
&gt; &gt; +        fixed an incorrect cast this function did, which assumed the function
&gt; &gt; +        result was always an element, which the function does not guarantee.
&gt; 
&gt; Does this change observable behavior?

I don’t think the incorrect cast had yet led to anything that would create incorrect code. I thought of it as a “ticking time bomb”, though.

&gt; &gt; WebCore/dom/Node.h:370
&gt; &gt; +    // see @ref traversePreviousNode()
&gt; 
&gt; Is there a reason to keep a part of this comment in Javadoc style?

I guess I could have gone further and tried to wipe out the half-baked attempt to use Javadoc style. I wasn’t sure whether I should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295641</commentid>
    <comment_count>9</comment_count>
      <attachid>71063</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-18 11:27:09 -0700</bug_when>
    <thetext>Created attachment 71063
Already-reviewed patch: Posted because it’s the only way to get the Early Warning System to test it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295643</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-18 11:28:55 -0700</bug_when>
    <thetext>Attachment 71063 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/dom/Node.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295649</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-18 11:32:26 -0700</bug_when>
    <thetext>&gt; I guess I could have gone further and tried to wipe out the half-baked attempt to use Javadoc style. I wasn’t sure whether I should.

It seems strange to keep them in comments that were modified (this may be the only one, in fact).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295651</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-18 11:33:01 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; I guess I could have gone further and tried to wipe out the half-baked attempt to use Javadoc style. I wasn’t sure whether I should.
&gt; 
&gt; It seems strange to keep them in comments that were modified (this may be the only one, in fact).

Fixed now locally (although not in the patch I uploaded for the early warning system).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295709</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-18 12:52:49 -0700</bug_when>
    <thetext>Committed r69987: &lt;http://trac.webkit.org/changeset/69987&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503100</commentid>
    <comment_count>14</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:04:06 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70919</attachid>
            <date>2010-10-15 16:51:04 -0700</date>
            <delta_ts>2010-10-18 11:27:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47735-20101015165103.patch</filename>
            <type>text/plain</type>
            <size>33903</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTg5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMTAtMTAtMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92
ZSBzb21lIGZ1bmN0aW9ucyBmcm9tIGNsYXNzIE5vZGUgYW5kIG1ha2UgYSBmZXcgb3RoZXJzIG5v
bi12aXJ0dWFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NzczNQorCisgICAgICAgIFJlZmFjdG9yaW5nLiBObyBuZXcgdGVzdHMuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2Rl
OjptYXJrQ2hpbGRyZW4pOiBBZGRlZCBhIEZJWE1FIGFib3V0IHRoZSB1c2Ugb2YgdGhlIHZpcnR1
YWwKKyAgICAgICAgb3duZXJEb2N1bWVudCBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9Db250
YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJlbW92ZUNo
aWxkcmVuKTogUmVtb3ZlZCB0aGUgdW51c2VkIHJldHVybiB2YWx1ZS4KKworICAgICAgICAqIGRv
bS9Db250YWluZXJOb2RlLmg6IE1hZGUgaW5zZXJ0QmVmb3JlLCByZXBsYWNlQ2hpbGQsIHJlbW92
ZUNoaWxkLCBhbmQKKyAgICAgICAgYXBwZW5kQ2hpbGQgbm9uLXZpcnR1YWwgZm9yIGNsYXJpdHkg
YW5kIHBlcmZvcm1hbmNlLiBNYWRlIHJlbW92ZUNoaWxkcmVuCisgICAgICAgIG5vbi12aXJ0dWFs
IGFuZCByZW1vdmVkIGl0cyByZXR1cm4gdmFsdWUuIE1vdmVkIHRoZSBpbmxpbmUgTm9kZSBmdW5j
dGlvbnMKKyAgICAgICAgdGhhdCBjYWxsIHRocm91Z2ggdG8gQ29udGFpbmVyTm9kZSBpbnRvIHRo
aXMgZmlsZSBzaW5jZSB0aGUgb2xkIHdheSBpbnZvbHZlZAorICAgICAgICBhbiBleHRyYSBsZXZl
bCBvZiBpbmxpbmUgZnVuY3Rpb24gYnV0IG90aGVyd2lzZSBoYWQgbm8gYWR2YW50YWdlcy4KKwor
ICAgICAgICAqIGRvbS9FbGVtZW50Lmg6IE1vdmVkIGlzTWF0aE1MRWxlbWVudCBoZXJlIGJlY2F1
c2UgdGhlcmUgaXMgbm8gY2FsbCBzaXRlCisgICAgICAgIHRoYXQgbmVlZHMgdG8gY2FsbCBpdCBv
biBhIE5vZGUqLiBXZSBjYW4gYWx3YXlzIG1vdmUgaXQgYmFjayBpZiB3ZSBuZWVkIHRvLAorICAg
ICAgICBidXQgaXQncyBiZXR0ZXIgdG8gaGF2ZSBsZXNzIGluIHRoZSBOb2RlIGNsYXNzLgorCisg
ICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5zZXJ0QmVm
b3JlKTogQWRkZWQgYW4gaXNDb250YWluZXJOb2RlIGNoZWNrIHNvIHRoaXMgY2FuCisgICAgICAg
IGJlIG5vbi12aXJ0dWFsLiBUaGVyZSBhcmUgdmVyeSBmZXcgY2FsbGVycyB3aG8gY2FsbCB0aGlz
IGZ1bmN0aW9uIG9uIE5vZGUuCisgICAgICAgIElmIHdlIHdhbnQgdG8gb3B0aW1pemUgdGhlbSBm
dXJ0aGVyIHdlIGNhbiBtYWtlIHRoZSBpc0NvbnRhaW5lck5vZGUgY2hlY2sKKyAgICAgICAgaW5s
aW5lIGluIHRoZSBmdXR1cmUuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlQ2hpbGQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbW92ZUNoaWxkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjphcHBlbmRDaGlsZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6cmVtb3ZlKTogUmVtb3ZlZCB1bm5lZWRlZCByZWYvdW5yZWYgYmVjYXVzZQor
ICAgICAgICBDb250YWluZXJOb2RlOjpyZW1vdmVDaGlsZCBhbHJlYWR5IGRvZXMgdGhpcy4KKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOiBSZW1vdmVkICNp
ZiBhcm91bmQgY2FsbCB0bworICAgICAgICBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyIHNpbmNl
IGl0J3MgbmVlZGVkIGV2ZW4gd2l0aG91dCBTVkcgYW5kIFhIVE1MTVAuCisKKyAgICAgICAgKiBk
b20vTm9kZS5oOiBNb3ZlZCBkZWZpbml0aW9ucyBvZiBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgZGVw
ZW5kIG9uCisgICAgICAgIENvbnRhaW5lck5vZGUgdG8gdGhlIENvbnRhaW5lck5vZGUuaCBoZWFk
ZXIuIFRoZXkgYWxyZWFkeSByZXF1aXJlZCBpbmNsdXNpb24KKyAgICAgICAgb2YgdGhhdCBoZWFk
ZXIsIHNvIHRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiBNYWRlIGluc2VydEJlZm9yZSwK
KyAgICAgICAgcmVwbGFjZUNoaWxkLCByZW1vdmVDaGlsZCwgYW5kIGFwcGVuZENoaWxkIG5vbi12
aXJ0dWFsLiBUaGVyZSBhcmUgdmVyeSBmZXcKKyAgICAgICAgY2FsbGVycyBvZiB0aGVzZSBmdW5j
dGlvbnMgb24gdGhpcyBjbGFzcy4gTW92ZWQgaXNNYXRoTUxFbGVtZW50IHRvIEVsZW1lbnQuCisg
ICAgICAgIEFkZGVkIGEgRklYTUUgYWJvdXQgdGhlIG5hbWUgb2YgZXZlbnRBbmNlc3RvcnMuIEZp
eGVkIGNvbW1lbnQgZm9ybWF0dGluZy4KKyAgICAgICAgRWxpbWluYXRlZCB1bnVzZWQgaXNFZGl0
YWJsZUJsb2NrIGZ1bmN0aW9uLiBNb3ZlZCB0aGUgYm9keSBvZiB0aGUKKyAgICAgICAgZW5jbG9z
aW5nSW5saW5lRWxlbWVudCBmdW5jdGlvbiB0byB0aGUgZWRpdGluZyBmaWxlIHRoYXQgd2FzIHRo
ZSBvbmx5CisgICAgICAgIGNhbGwgc2l0ZS4gUmVtb3ZlZCB0aGUgcHJldmlvdXNFZGl0YWJsZSBh
bmQgbmV4dEVkaXRhYmxlIGZ1bmN0aW9ucywKKyAgICAgICAgaW5jb3Jwb3JhdGluZyB0aGVpciBi
b2RpZXMgaW50byB0aGUgb25lIHBsYWNlIHRoZXkgd2VyZSBjYWxsZWQuCisgICAgICAgIFRvb2sg
dGhlIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIgZnVuY3Rpb24gb3V0IG9mICNpZiBzaW5jZSBp
dCdzCisgICAgICAgIG5vdyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPG5vc2Ny
aXB0PiBlbGVtZW50LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om5leHRSZW5kZXJlZEVkaXRhYmxlKTogUmV3cm90ZSB0aGUgZnVuY3Rpb24gdG8gdXNl
IG5leHRMZWFmTm9kZQorICAgICAgICBpbnN0ZWFkIG9mIG5leHRFZGl0YWJsZS4KKyAgICAgICAg
KFdlYkNvcmU6OnByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZSk6IFJld3JvdGUgdGhlIGZ1bmN0aW9u
IHRvIHVzZQorICAgICAgICBwcmV2aW91c0xlYWZOb2RlIGluc3RlYWQgb2YgcHJldmlvdXNFZGl0
YWJsZS4KKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nSW5saW5lKTogTW92ZWQgZnVuY3Rpb24gaGVyZSBm
cm9tIHRoZSBOb2RlIGNsYXNzLiBBbHNvCisgICAgICAgIGZpeGVkIGFuIGluY29ycmVjdCBjYXN0
IHRoaXMgZnVuY3Rpb24gZGlkLCB3aGljaCBhc3N1bWVkIHRoZSBmdW5jdGlvbgorICAgICAgICBy
ZXN1bHQgd2FzIGFsd2F5cyBhbiBlbGVtZW50LCB3aGljaCB0aGUgZnVuY3Rpb24gZG9lcyBub3Qg
Z3VhcmFudGVlLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkpOiBDYWxsIHRoZSBmdW5jdGlvbiBhYm92ZS4KKwogMjAxMC0xMC0xNSAgRGFuIEJlcm5z
dGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVy
c29uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gNjk4
OTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw2ICsxMjcsOCBAQCB2b2lkIEpTTm9kZTo6bWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYgbWFyCiAgICAgLy8gdGhlIGRvY3VtZW50LCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGRvY3VtZW50
LCBidXQgd2UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5CiAgICAgLy8gbWFyayBhbnkgb3RoZXIg
bm9kZXMuCiAgICAgaWYgKG5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTog
RG8gd2UgcmVhbGx5IHdhbnQgdG8gY2FsbCBhIHZpcnR1YWwgZnVuY3Rpb24sIG93bmVyRG9jdW1l
bnQgaGVyZSwKKyAgICAgICAgLy8gd2hlbiB0aGUgbm9uLXZpcnR1YWwgaW5saW5lIGZ1bmN0aW9u
LCBkb2N1bWVudCwgaXMgc28gbXVjaCBmYXN0ZXI/IQogICAgICAgICBpZiAoRG9jdW1lbnQqIGRv
YyA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgICAgIG1hcmtET01Ob2RlV3JhcHBl
cihtYXJrU3RhY2ssIGRvYywgZG9jKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAJKHJldmlzaW9uIDY5ODk0KQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSwxMCArNDg5LDEwIEBAIHZvaWQgQ29udGFpbmVyTm9k
ZTo6cGFyc2VyUmVtb3ZlQ2hpbGQoTm8KIAogLy8gdGhpcyBkaWZmZXJzIGZyb20gb3RoZXIgcmVt
b3ZlIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IGZvcmNpYmx5IHJlbW92ZXMgYWxsIHRoZSBjaGlsZHJl
biwKIC8vIHJlZ2FyZGxlc3Mgb2YgcmVhZC1vbmx5IHN0YXR1cyBvciBldmVudCBleGNlcHRpb25z
LCBlLmcuCi1ib29sIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkKK3ZvaWQgQ29udGFp
bmVyTm9kZTo6cmVtb3ZlQ2hpbGRyZW4oKQogewogICAgIGlmICghbV9maXJzdENoaWxkKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBjb250YWlu
ZXIgbm9kZSBjYW4gYmUgcmVtb3ZlZCBmcm9tIGV2ZW50IGhhbmRsZXJzLgogICAgIFJlZlB0cjxD
b250YWluZXJOb2RlPiBwcm90ZWN0KHRoaXMpOwpAQCAtNTQxLDggKzU0MSw2IEBAIGJvb2wgQ29u
dGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGRyZW4oKQogICAgICAgICAvLyBkb2N1bWVudC4gVGhlcmUg
aXMgbm8gZXhwbGFuYXRpb24gZm9yIHRoaXMgZGlzY3JlcGFuY3kgYmV0d2VlbiByZW1vdmVDaGls
ZCgpCiAgICAgICAgIC8vIGFuZCBpdHMgb3B0aW1pemVkIHZlcnNpb24gcmVtb3ZlQ2hpbGRyZW4o
KS4KICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBDb250YWluZXJOb2RlOjph
cHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywg
Ym9vbCBzaG91bGRMYXp5QXR0YWNoKQpJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkocmV2aXNpb24gNjk4
OTQpCisrKyBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIs
NyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNSw5ICsyNSwxMCBAQAogI2RlZmluZSBDb250YWluZXJOb2RlX2gK
IAogI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKICAgICAKIHR5cGVkZWYgdm9pZCAoKk5v
ZGVDYWxsYmFjaykoTm9kZSopOwogCkBAIC00MywxMCArNDQsMTAgQEAgcHVibGljOgogICAgIE5v
ZGUqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KICAgICBOb2Rl
KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQogCi0gICAgdmlydHVh
bCBib29sIGluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZD
aGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5v
ZGUqIG9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFs
c2UpOwotICAgIHZpcnR1YWwgYm9vbCByZW1vdmVDaGlsZChOb2RlKiBjaGlsZCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5l
d0NoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwor
ICAgIGJvb2wgaW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJl
ZkNoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwor
ICAgIGJvb2wgcmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9s
ZENoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwor
ICAgIGJvb2wgcmVtb3ZlQ2hpbGQoTm9kZSogY2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBi
b29sIGFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUm
LCBib29sIHNob3VsZExhenlBdHRhY2ggPSBmYWxzZSk7CiAKICAgICAvLyBUaGVzZSBtZXRob2Rz
IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHBhcnNpbmcuCiAgICAgLy8gVGhleSBkb24ndCBzZW5kIERP
TSBtdXRhdGlvbiBldmVudHMgb3IgaGFuZGxlIHJlcGFyZW50aW5nLgpAQCAtNzIsOCArNzMsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOwog
ICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjcmVhdGVkQnlQYXJzZXIgPSBm
YWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQg
Y2hpbGRDb3VudERlbHRhID0gMCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlQ2hpbGRyZW4o
KTsKLQorICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBnb29kIHRvIGhhdmUgdHdvIGZ1bmN0aW9ucyB3
aXRoIHN1Y2ggc2ltaWxhciBuYW1lcywgZXNwZWNpYWxseSBwdWJsaWMgZnVuY3Rpb25zLgorICAg
IC8vIEhvdyBkbyByZW1vdmVDaGlsZHJlbiBhbmQgcmVtb3ZlQWxsQ2hpbGRyZW4gZGlmZmVyPwor
ICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW4oKTsKICAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7
CiAgICAgdm9pZCB0YWtlQWxsQ2hpbGRyZW5Gcm9tKENvbnRhaW5lck5vZGUqKTsKIApAQCAtMTQw
LDIzICsxNDIsMzEgQEAgaW5saW5lIENvbnRhaW5lck5vZGU6OkNvbnRhaW5lck5vZGUoRG9jdQog
ewogfQogCi1pbmxpbmUgdW5zaWduZWQgTm9kZTo6Y29udGFpbmVyQ2hpbGROb2RlQ291bnQoKSBj
b25zdAoraW5saW5lIHVuc2lnbmVkIE5vZGU6OmNoaWxkTm9kZUNvdW50KCkgY29uc3QKIHsKKyAg
ICBpZiAoIWlzQ29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4g
dG9Db250YWluZXJOb2RlKHRoaXMpLT5jaGlsZE5vZGVDb3VudCgpOwogfQogCi1pbmxpbmUgTm9k
ZSogTm9kZTo6Y29udGFpbmVyQ2hpbGROb2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdAoraW5saW5l
IE5vZGUqIE5vZGU6OmNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKKyAgICBpZiAo
IWlzQ29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gdG9Db250
YWluZXJOb2RlKHRoaXMpLT5jaGlsZE5vZGUoaW5kZXgpOwogfQogCi1pbmxpbmUgTm9kZSogTm9k
ZTo6Y29udGFpbmVyRmlyc3RDaGlsZCgpIGNvbnN0CitpbmxpbmUgTm9kZSogTm9kZTo6Zmlyc3RD
aGlsZCgpIGNvbnN0CiB7CisgICAgaWYgKCFpc0NvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIHRvQ29udGFpbmVyTm9kZSh0aGlzKS0+Zmlyc3RDaGlsZCgpOwog
fQogCi1pbmxpbmUgTm9kZSogTm9kZTo6Y29udGFpbmVyTGFzdENoaWxkKCkgY29uc3QKK2lubGlu
ZSBOb2RlKiBOb2RlOjpsYXN0Q2hpbGQoKSBjb25zdAogeworICAgIGlmICghaXNDb250YWluZXJO
b2RlKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB0b0NvbnRhaW5lck5vZGUodGhp
cyktPmxhc3RDaGlsZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA2OTg5NCkKKysrIFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDYgKzI3NiwxMiBAQCBwdWJs
aWM6CiAgICAgRE9NU3RyaW5nTWFwKiBkYXRhc2V0KCk7CiAgICAgRE9NU3RyaW5nTWFwKiBvcHRp
b25hbERhdGFzZXQoKSBjb25zdDsKIAorI2lmIEVOQUJMRShNQVRITUwpCisgICAgdmlydHVhbCBi
b29sIGlzTWF0aE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZWxzZQorICAg
IHN0YXRpYyBib29sIGlzTWF0aE1MRWxlbWVudCgpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYK
KwogICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5Rm9ybUNvbnRyb2wo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDY5ODk0KQorKysgV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCwzOCArNTMwLDQ4IEBAIE5v
ZGUqIE5vZGU6OmZpcnN0RGVzY2VuZGFudCgpIGNvbnN0CiAgICAgcmV0dXJuIG47CiB9CiAKLWJv
b2wgTm9kZTo6aW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4sIE5vZGUqLCBFeGNlcHRpb25D
b2RlJiBlYywgYm9vbCkKK2Jvb2wgTm9kZTo6aW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4g
bmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCBzaG91bGRM
YXp5QXR0YWNoKQogewotICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWlzQ29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVjID0gSElF
UkFSQ0hZX1JFUVVFU1RfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0b0NvbnRhaW5lck5vZGUodGhpcyktPmluc2VydEJlZm9yZShuZXdDaGlsZCwgcmVmQ2hp
bGQsIGVjLCBzaG91bGRMYXp5QXR0YWNoKTsKIH0KIAotYm9vbCBOb2RlOjpyZXBsYWNlQ2hpbGQo
UGFzc1JlZlB0cjxOb2RlPiwgTm9kZSosIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29sKQorYm9vbCBO
b2RlOjpyZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hp
bGQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29sIHNob3VsZExhenlBdHRhY2gpCiB7Ci0gICAgZWMg
PSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXND
b250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRvQ29udGFpbmVyTm9kZSh0
aGlzKS0+cmVwbGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRDaGlsZCwgZWMsIHNob3VsZExhenlBdHRh
Y2gpOwogfQogCi1ib29sIE5vZGU6OnJlbW92ZUNoaWxkKE5vZGUqLCBFeGNlcHRpb25Db2RlJiBl
YykKK2Jvb2wgTm9kZTo6cmVtb3ZlQ2hpbGQoTm9kZSogb2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFpc0NvbnRhaW5lck5vZGUoKSkgeworICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRvQ29udGFpbmVyTm9kZSh0
aGlzKS0+cmVtb3ZlQ2hpbGQob2xkQ2hpbGQsIGVjKTsKIH0KIAotYm9vbCBOb2RlOjphcHBlbmRD
aGlsZChQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCkKK2Jvb2wgTm9k
ZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYg
ZWMsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCkKIHsKLSAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNU
X0VSUjsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0NvbnRhaW5lck5vZGUoKSkgewor
ICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdG9Db250YWluZXJOb2RlKHRoaXMpLT5hcHBlbmRDaGlsZChu
ZXdDaGlsZCwgZWMsIHNob3VsZExhenlBdHRhY2gpOwogfQogCiB2b2lkIE5vZGU6OnJlbW92ZShF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICByZWYoKTsKLSAgICBpZiAoTm9kZSAqcCA9IHBhcmVu
dE5vZGUoKSkKLSAgICAgICAgcC0+cmVtb3ZlQ2hpbGQodGhpcywgZWMpOworICAgIGlmIChDb250
YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCkpCisgICAgICAgIHBhcmVudC0+cmVtb3Zl
Q2hpbGQodGhpcywgZWMpOwogICAgIGVsc2UKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7Ci0gICAgZGVyZWYoKTsKIH0KIAogdm9pZCBOb2RlOjpub3JtYWxpemUoKQpAQCAtMTIy
OCwyOCArMTIzOCw2IEBAIHZvaWQgTm9kZTo6ZGV0YWNoKCkKICAgICBjbGVhckZsYWcoSW5EZXRh
Y2hGbGFnKTsKIH0KIAotTm9kZSAqTm9kZTo6cHJldmlvdXNFZGl0YWJsZSgpIGNvbnN0Ci17Ci0g
ICAgTm9kZSAqbm9kZSA9IHByZXZpb3VzTGVhZk5vZGUoKTsKLSAgICB3aGlsZSAobm9kZSkgewot
ICAgICAgICBpZiAobm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgICAgIHJldHVy
biBub2RlOwotICAgICAgICBub2RlID0gbm9kZS0+cHJldmlvdXNMZWFmTm9kZSgpOwotICAgIH0K
LSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSAqTm9kZTo6bmV4dEVkaXRhYmxlKCkgY29uc3QKLXsK
LSAgICBOb2RlICpub2RlID0gbmV4dExlYWZOb2RlKCk7Ci0gICAgd2hpbGUgKG5vZGUpIHsKLSAg
ICAgICAgaWYgKG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
bm9kZTsKLSAgICAgICAgbm9kZSA9IG5vZGUtPm5leHRMZWFmTm9kZSgpOwotICAgIH0KLSAgICBy
ZXR1cm4gMDsKLX0KLQogUmVuZGVyT2JqZWN0ICogTm9kZTo6cHJldmlvdXNSZW5kZXJlcigpCiB7
CiAgICAgZm9yIChOb2RlICpuID0gcHJldmlvdXNTaWJsaW5nKCk7IG47IG4gPSBuLT5wcmV2aW91
c1NpYmxpbmcoKSkgewpAQCAtMTMzNywxMSArMTMyNSw3IEBAIHZvaWQgTm9kZTo6Y3JlYXRlUmVu
ZGVyZXJJZk5lZWRlZCgpCiAgICAgQVNTRVJUKHBhcmVudCk7CiAgICAgCiAgICAgUmVuZGVyT2Jq
ZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocGFyZW50
UmVuZGVyZXIgJiYgcGFyZW50UmVuZGVyZXItPmNhbkhhdmVDaGlsZHJlbigpCi0jaWYgRU5BQkxF
KFNWRykgfHwgRU5BQkxFKFhIVE1MTVApCi0gICAgICAgICYmIHBhcmVudC0+Y2hpbGRTaG91bGRD
cmVhdGVSZW5kZXJlcih0aGlzKQotI2VuZGlmCi0gICAgICAgICkgeworICAgIGlmIChwYXJlbnRS
ZW5kZXJlciAmJiBwYXJlbnRSZW5kZXJlci0+Y2FuSGF2ZUNoaWxkcmVuKCkgJiYgcGFyZW50LT5j
aGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKHRoaXMpKSB7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChyZW5kZXJlcklz
TmVlZGVkKHN0eWxlLmdldCgpKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9
IGNyZWF0ZVJlbmRlcmVyKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCksIHN0eWxlLmdldCgpKSkg
ewpAQCAtMTQ2NiwxMSArMTQ1MCw2IEBAIGJvb2wgTm9kZTo6aXNCbG9ja0Zsb3dPckJsb2NrVGFi
bGUoKSBjb24KICAgICByZXR1cm4gcmVuZGVyZXIoKSAmJiAocmVuZGVyZXIoKS0+aXNCbG9ja0Zs
b3coKSB8fCAocmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmICFyZW5kZXJlcigpLT5pc0lubGluZSgp
KSk7CiB9CiAKLWJvb2wgTm9kZTo6aXNFZGl0YWJsZUJsb2NrKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gaXNDb250ZW50RWRpdGFibGUoKSAmJiBpc0Jsb2NrRmxvdygpOwotfQotCiBFbGVtZW50ICpO
b2RlOjplbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgY29uc3QKIHsKICAgICBOb2RlICpuID0g
Y29uc3RfY2FzdDxOb2RlICo+KHRoaXMpOwpAQCAtMTQ4NywyNiArMTQ2Niw2IEBAIEVsZW1lbnQg
Kk5vZGU6OmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIAotRWxl
bWVudCAqTm9kZTo6ZW5jbG9zaW5nSW5saW5lRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgTm9kZSAq
biA9IGNvbnN0X2Nhc3Q8Tm9kZSAqPih0aGlzKTsKLSAgICBOb2RlICpwOwotCi0gICAgd2hpbGUg
KDEpIHsKLSAgICAgICAgcCA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYgKCFwIHx8IHAt
PmlzQmxvY2tGbG93KCkgfHwgcC0+aGFzVGFnTmFtZShib2R5VGFnKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KG4pOwotICAgICAgICAvLyBBbHNvIHN0b3AgaWYg
YW55IHByZXZpb3VzIHNpYmxpbmcgaXMgYSBibG9jawotICAgICAgICBmb3IgKE5vZGUgKnNpYmxp
bmcgPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnBy
ZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoc2libGluZy0+aXNCbG9ja0Zsb3co
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihuKTsKLSAg
ICAgICAgfQotICAgICAgICBuID0gcDsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEVsZW1lbnQqIE5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSBjb25zdAogewogICAgIEVsZW1lbnQqIHJlc3VsdCA9IDA7CkluZGV4OiBXZWJDb3JlL2RvbS9O
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA2OTg5NCkK
KysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zNSw4ICsz
NSw4IEBACiAKICNpZiBVU0UoSlNDKQogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBKU0dsb2JhbERh
dGE7Ci1jbGFzcyBNYXJrU3RhY2s7CisgICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNz
IE1hcmtTdGFjazsKIH0KICNlbmRpZgogCkBAIC0xMzcsOCArMTM3LDggQEAgcHVibGljOgogICAg
IE5vZGUqIHByZXZpb3VzU2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXM7IH0KICAg
ICBOb2RlKiBuZXh0U2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogICAgIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMoKTsKLSAgICBOb2RlKiBmaXJzdENoaWxkKCkgY29u
c3QgeyByZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBjb250YWluZXJGaXJzdENoaWxkKCkgOiAw
OyB9Ci0gICAgTm9kZSogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gaXNDb250YWluZXJOb2Rl
KCkgPyBjb250YWluZXJMYXN0Q2hpbGQoKSA6IDA7IH0KKyAgICBOb2RlKiBmaXJzdENoaWxkKCkg
Y29uc3Q7CisgICAgTm9kZSogbGFzdENoaWxkKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNBdHRyaWJ1
dGVzKCkgY29uc3Q7CiAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAKQEAg
LTE0OSwxMCArMTQ5LDEwIEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBzaG91bGQgYWxsIGFjdHVh
bGx5IHJldHVybiBhIG5vZGUsIGJ1dCB0aGlzIGlzIG9ubHkgaW1wb3J0YW50IGZvciBsYW5ndWFn
ZSBiaW5kaW5ncywKICAgICAvLyB3aGljaCB3aWxsIGFscmVhZHkga25vdyBhbmQgaG9sZCBhIHJl
ZiBvbiB0aGUgcmlnaHQgbm9kZSB0byByZXR1cm4uIFJldHVybmluZyBib29sIGFsbG93cwogICAg
IC8vIHRoZXNlIG1ldGhvZHMgdG8gYmUgbW9yZSBlZmZpY2llbnQgc2luY2UgdGhleSBkb24ndCBu
ZWVkIHRvIHJldHVybiBhIHJlZgotICAgIHZpcnR1YWwgYm9vbCBpbnNlcnRCZWZvcmUoUGFzc1Jl
ZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmLCBib29s
IHNob3VsZExhenlBdHRhY2ggPSBmYWxzZSk7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGls
ZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29k
ZSYsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVt
b3ZlQ2hpbGQoTm9kZSogY2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
YXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJv
b2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKKyAgICBib29sIGluc2VydEJlZm9yZShQYXNz
UmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJv
b2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKKyAgICBib29sIHJlcGxhY2VDaGlsZChQYXNz
UmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJv
b2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKKyAgICBib29sIHJlbW92ZUNoaWxkKE5vZGUq
IGNoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBhcHBlbmRDaGlsZChQYXNzUmVmUHRy
PE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0g
ZmFsc2UpOwogCiAgICAgdm9pZCByZW1vdmUoRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgaGFz
Q2hpbGROb2RlcygpIGNvbnN0IHsgcmV0dXJuIGZpcnN0Q2hpbGQoKTsgfQpAQCAtMTkyLDEzICsx
OTIsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNXTUxFbGVtZW50KCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKE1BVEhNTCkKLSAgICB2aXJ0dWFsIGJvb2wg
aXNNYXRoTUxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSNlbHNlCi0gICAgc3Rh
dGljIGJvb2wgaXNNYXRoTUxFbGVtZW50KCkgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCi0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGdldEZs
YWcoSXNTdHlsZWRFbGVtZW50RmxhZyk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZU93bmVy
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yMTgsNyArMjExLDggQEAgcHVi
bGljOgogICAgIC8vIFJldHVybnMgdGhlIGVuY2xvc2luZyBldmVudCBwYXJlbnQgbm9kZSAob3Ig
c2VsZikgdGhhdCwgd2hlbiBjbGlja2VkLCB3b3VsZCB0cmlnZ2VyIGEgbmF2aWdhdGlvbi4KICAg
ICBOb2RlKiBlbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKTsKIAotICAgIC8vIE5vZGUg
YW5jZXN0b3JzIHdoZW4gY29uY2VybmVkIGFib3V0IGV2ZW50IGZsb3cKKyAgICAvLyBOb2RlIGFu
Y2VzdG9ycyB3aGVuIGNvbmNlcm5lZCBhYm91dCBldmVudCBmbG93LgorICAgIC8vIEZJWE1FOiBT
aG91bGQgYmUgbmFtZWQgZ2V0RXZlbnRBbmNlc3RvcnMuCiAgICAgdm9pZCBldmVudEFuY2VzdG9y
cyhWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4gJmFuY2VzdG9ycyk7CiAKICAgICBib29s
IGlzQmxvY2tGbG93KCkgY29uc3Q7CkBAIC0yMzIsMjggKzIyNiwyMSBAQCBwdWJsaWM6CiAgICAg
Tm9kZSogcHJldmlvdXNOb2RlQ29uc2lkZXJpbmdBdG9taWNOb2RlcygpIGNvbnN0OwogICAgIE5v
ZGUqIG5leHROb2RlQ29uc2lkZXJpbmdBdG9taWNOb2RlcygpIGNvbnN0OwogICAgIAotICAgIC8q
KiAoTm90IHBhcnQgb2YgdGhlIG9mZmljaWFsIERPTSkKLSAgICAgKiBSZXR1cm5zIHRoZSBuZXh0
IGxlYWYgbm9kZS4KLSAgICAgKgotICAgICAqIFVzaW5nIHRoaXMgZnVuY3Rpb24gZGVsaXZlcnMg
bGVhZiBub2RlcyBhcyBpZiB0aGUgd2hvbGUgRE9NIHRyZWUgd2VyZSBhIGxpbmVhciBjaGFpbiBv
ZiBpdHMgbGVhZiBub2Rlcy4KLSAgICAgKiBAcmV0dXJuIG5leHQgbGVhZiBub2RlIG9yIDAgaWYg
dGhlcmUgYXJlIG5vIG1vcmUuCi0gICAgICovCisgICAgLy8gUmV0dXJucyB0aGUgbmV4dCBsZWFm
IG5vZGUgb3IgMCBpZiB0aGVyZSBhcmUgbm8gbW9yZS4KKyAgICAvLyBEZWxpdmVycyBsZWFmIG5v
ZGVzIGFzIGlmIHRoZSB3aG9sZSBET00gdHJlZSB3ZXJlIGEgbGluZWFyIGNoYWluIG9mIGl0cyBs
ZWFmIG5vZGVzLgorICAgIC8vIFVzZXMgYW4gZWRpdGluZy1zcGVjaWZpYyBjb25jZXB0IG9mIHdo
YXQgYSBsZWFmIG5vZGUgaXMsIGFuZCBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQKKyAgICAvLyBv
dXQgb2YgdGhlIE5vZGUgY2xhc3MgaW50byBhbiBlZGl0aW5nLXNwZWNpZmljIHNvdXJjZSBmaWxl
LgogICAgIE5vZGUqIG5leHRMZWFmTm9kZSgpIGNvbnN0OwogCi0gICAgLyoqIChOb3QgcGFydCBv
ZiB0aGUgb2ZmaWNpYWwgRE9NKQotICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIGxlYWYgbm9k
ZS4KLSAgICAgKgotICAgICAqIFVzaW5nIHRoaXMgZnVuY3Rpb24gZGVsaXZlcnMgbGVhZiBub2Rl
cyBhcyBpZiB0aGUgd2hvbGUgRE9NIHRyZWUgd2VyZSBhIGxpbmVhciBjaGFpbiBvZiBpdHMgbGVh
ZiBub2Rlcy4KLSAgICAgKiBAcmV0dXJuIHByZXZpb3VzIGxlYWYgbm9kZSBvciAwIGlmIHRoZXJl
IGFyZSBubyBtb3JlLgotICAgICAqLworICAgIC8vIFJldHVybnMgdGhlIHByZXZpb3VzIGxlYWYg
bm9kZSBvciAwIGlmIHRoZXJlIGFyZSBubyBtb3JlLgorICAgIC8vIERlbGl2ZXJzIGxlYWYgbm9k
ZXMgYXMgaWYgdGhlIHdob2xlIERPTSB0cmVlIHdlcmUgYSBsaW5lYXIgY2hhaW4gb2YgaXRzIGxl
YWYgbm9kZXMuCisgICAgLy8gVXNlcyBhbiBlZGl0aW5nLXNwZWNpZmljIGNvbmNlcHQgb2Ygd2hh
dCBhIGxlYWYgbm9kZSBpcywgYW5kIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZAorICAgIC8vIG91
dCBvZiB0aGUgTm9kZSBjbGFzcyBpbnRvIGFuIGVkaXRpbmctc3BlY2lmaWMgc291cmNlIGZpbGUu
CiAgICAgTm9kZSogcHJldmlvdXNMZWFmTm9kZSgpIGNvbnN0OwogCi0gICAgYm9vbCBpc0VkaXRh
YmxlQmxvY2soKSBjb25zdDsKLSAgICAKLSAgICAvLyBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KCkgaXMgZGVwcmVjYXRlZC4gIFVzZSBlbmNsb3NpbmdCbG9jayBpbnN0ZWFkLgorICAgIC8vIGVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSBpcyBkZXByZWNhdGVkLiBVc2UgZW5jbG9zaW5nQmxv
Y2sgaW5zdGVhZC4KICAgICBFbGVtZW50KiBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgY29u
c3Q7CiAgICAgCi0gICAgRWxlbWVudCogZW5jbG9zaW5nSW5saW5lRWxlbWVudCgpIGNvbnN0Owog
ICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdDsKICAgICAKICAgICBib29s
IGluU2FtZUNvbnRhaW5pbmdCbG9ja0Zsb3dFbGVtZW50KE5vZGUqKTsKQEAgLTI3MCw5ICsyNTcs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhcnNpbmdDaGlsZHJlbigpIHsgfQogCi0gICAgLy8g
Q2FsbGVkIGJ5IHRoZSBmcmFtZSByaWdodCBiZWZvcmUgZGlzcGF0Y2hpbmcgYW4gdW5sb2FkRXZl
bnQuIFtSYWRhciA0NTMyMTEzXQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBIVE1MSW5wdXRF
bGVtZW50cyB0byB0ZWxsIHRoZSBmcmFtZSB0aGF0IGl0IGlzIGRvbmUgZWRpdGluZyAKLSAgICAv
LyAoc2VuZHMgdGV4dEZpZWxkRGlkRW5kRWRpdGluZyBub3RpZmljYXRpb24pCisgICAgLy8gQ2Fs
bGVkIG9uIHRoZSBmb2N1c2VkIG5vZGUgcmlnaHQgYmVmb3JlIGRpc3BhdGNoaW5nIGFuIHVubG9h
ZCBldmVudC4KICAgICB2aXJ0dWFsIHZvaWQgYWJvdXRUb1VubG9hZCgpIHsgfQogCiAgICAgLy8g
Rm9yIDxsaW5rPiBhbmQgPHN0eWxlPiBlbGVtZW50cy4KQEAgLTMxNSwxNCArMzAwLDE0IEBAIHB1
YmxpYzoKICAgICB9OwogICAgIHZvaWQgbGF6eUF0dGFjaChTaG91bGRTZXRBdHRhY2hlZCA9IFNl
dEF0dGFjaGVkKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sIGIgPSB0cnVlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRBY3RpdmUoYm9vbCBmID0gdHJ1ZSwgYm9vbCAvKnBhdXNlKi8gPSBmYWxzZSkgeyBzZXRG
bGFnKGYsIElzQWN0aXZlRmxhZyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29s
IGYgPSB0cnVlKSB7IHNldEZsYWcoZiwgSXNIb3ZlcmVkRmxhZyk7IH0KIAogICAgIHZpcnR1YWwg
c2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKIAogICAgIC8vIFdoZXRoZXIgdGhpcyBraW5kIG9mIG5v
ZGUgY2FuIHJlY2VpdmUgZm9jdXMgYnkgZGVmYXVsdC4gTW9zdCBub2RlcyBhcmUKLSAgICAvLyBu
b3QgZm9jdXNhYmxlIGJ1dCBzb21lIGVsZW1lbnRzLCBzdWNoIGFzIGZvcm0gY29udHJvbHMgYW5k
IGxpbmtzIGFyZS4KKyAgICAvLyBub3QgZm9jdXNhYmxlIGJ1dCBzb21lIGVsZW1lbnRzLCBzdWNo
IGFzIGZvcm0gY29udHJvbHMgYW5kIGxpbmtzLCBhcmUuCiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzRm9jdXMoKSBjb25zdDsKICAgICAvLyBXaGV0aGVyIHRoZSBub2RlIGNhbiBhY3R1YWxseSBi
ZSBmb2N1c2VkLgogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwpAQCAtMzcx
LDUzICszNTYsMzIgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1JlYWRPbmx5Tm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG5vZGVUeXBlKCkgPT0gRU5USVRZX1JFRkVSRU5DRV9OT0RFOyB9CiAgICAgdmly
dHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5v
ZGUoKSA/IGNvbnRhaW5lckNoaWxkTm9kZUNvdW50KCkgOiAwOyB9Ci0gICAgTm9kZSogY2hpbGRO
b2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5vZGUoKSA/IGNv
bnRhaW5lckNoaWxkTm9kZShpbmRleCkgOiAwOyB9CisgICAgdW5zaWduZWQgY2hpbGROb2RlQ291
bnQoKSBjb25zdDsKKyAgICBOb2RlKiBjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0Owog
Ci0gICAgLyoqCi0gICAgICogRG9lcyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHRyZWUg
dG8gZmluZCB0aGUgbm9kZSBuZXh0IG5vZGUgYWZ0ZXIgdGhpcyBvbmUuIFRoaXMgdXNlcyB0aGUg
c2FtZSBvcmRlciB0aGF0Ci0gICAgICogdGhlIHRhZ3MgYXBwZWFyIGluIHRoZSBzb3VyY2UgZmls
ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzdGF5V2l0aGluIElmIG5vdCBudWxsLCB0aGUgdHJh
dmVyc2FsIHdpbGwgc3RvcCBvbmNlIHRoZSBzcGVjaWZpZWQgbm9kZSBpcyByZWFjaGVkLiBUaGlz
IGNhbiBiZSB1c2VkIHRvCi0gICAgICogcmVzdHJpY3QgdHJhdmVyc2FsIHRvIGEgcGFydGljdWxh
ciBzdWItdHJlZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5leHQgbm9kZSwgaW4gZG9j
dW1lbnQgb3JkZXIKLSAgICAgKgotICAgICAqIHNlZSBAcmVmIHRyYXZlcnNlUHJldmlvdXNOb2Rl
KCkKLSAgICAgKi8KKyAgICAvLyBEb2VzIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgdHJl
ZSB0byBmaW5kIHRoZSBub2RlIG5leHQgbm9kZSBhZnRlciB0aGlzIG9uZS4gVGhpcyB1c2VzIHRo
ZSBzYW1lIG9yZGVyIHRoYXQKKyAgICAvLyB0YWdzIGFwcGVhciBpbiB0aGUgc291cmNlIGZpbGUu
CisgICAgLy8KKyAgICAvLyBAcGFyYW0gc3RheVdpdGhpbiBJZiBub3QgbnVsbCwgdGhlIHRyYXZl
cnNhbCB3aWxsIHN0b3Agb25jZSB0aGUgc3BlY2lmaWVkIG5vZGUgaXMgcmVhY2hlZC4gVGhpcyBj
YW4gYmUgdXNlZCB0bworICAgIC8vIHJlc3RyaWN0IHRyYXZlcnNhbCB0byBhIHBhcnRpY3VsYXIg
c3ViLXRyZWUuCisgICAgLy8KKyAgICAvLyBAcmV0dXJuIFRoZSBuZXh0IG5vZGUsIGluIGRvY3Vt
ZW50IG9yZGVyCisgICAgLy8KKyAgICAvLyBzZWUgQHJlZiB0cmF2ZXJzZVByZXZpb3VzTm9kZSgp
CiAgICAgTm9kZSogdHJhdmVyc2VOZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCkg
Y29uc3Q7CiAgICAgCiAgICAgLy8gTGlrZSB0cmF2ZXJzZU5leHROb2RlLCBidXQgc2tpcHMgY2hp
bGRyZW4gYW5kIHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHNpYmxpbmcuCiAgICAgTm9kZSogdHJhdmVy
c2VOZXh0U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7CiAKLSAgICAv
KioKLSAgICAgKiBEb2VzIGEgcmV2ZXJzZSBwcmUtb3JkZXIgdHJhdmVyc2FsIHRvIGZpbmQgdGhl
IG5vZGUgdGhhdCBjb21lcyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIGluIGRvY3VtZW50IG9yZGVy
Ci0gICAgICoKLSAgICAgKiBzZWUgQHJlZiB0cmF2ZXJzZU5leHROb2RlKCkKLSAgICAgKi8KLSAg
ICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzTm9kZShjb25zdCBOb2RlICogc3RheVdpdGhpbiA9IDAp
IGNvbnN0OworICAgIC8vIERvZXMgYSByZXZlcnNlIHByZS1vcmRlciB0cmF2ZXJzYWwgdG8gZmlu
ZCB0aGUgbm9kZSB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgaW4gZG9jdW1lbnQg
b3JkZXIKKyAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzTm9kZShjb25zdCBOb2RlKiBzdGF5V2l0
aGluID0gMCkgY29uc3Q7CiAKICAgICAvLyBMaWtlIHRyYXZlcnNlTmV4dE5vZGUsIGJ1dCB2aXNp
dHMgcGFyZW50cyBhZnRlciB0aGVpciBjaGlsZHJlbi4KICAgICBOb2RlKiB0cmF2ZXJzZU5leHRO
b2RlUG9zdE9yZGVyKCkgY29uc3Q7CiAKICAgICAvLyBMaWtlIHRyYXZlcnNlUHJldmlvdXNOb2Rl
LCBidXQgdmlzaXRzIHBhcmVudHMgYmVmb3JlIHRoZWlyIGNoaWxkcmVuLgotICAgIE5vZGUqIHRy
YXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKGNvbnN0IE5vZGUgKnN0YXlXaXRoaW4gPSAwKSBj
b25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzU2libGluZ1Bvc3RPcmRlcihjb25zdCBO
b2RlICpzdGF5V2l0aGluID0gMCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBGaW5kcyBwcmV2
aW91cyBvciBuZXh0IGVkaXRhYmxlIGxlYWYgbm9kZS4KLSAgICAgKi8KLSAgICBOb2RlKiBwcmV2
aW91c0VkaXRhYmxlKCkgY29uc3Q7Ci0gICAgTm9kZSogbmV4dEVkaXRhYmxlKCkgY29uc3Q7Ci0K
LSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsg
fQotICAgIFJlbmRlck9iamVjdCogbmV4dFJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBw
cmV2aW91c1JlbmRlcmVyKCk7Ci0gICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKSB7IG1fcmVuZGVyZXIgPSByZW5kZXJlcjsgfQotICAgIAotICAgIC8vIFVzZSB0aGVz
ZSB0d28gbWV0aG9kcyB3aXRoIGNhdXRpb24uCi0gICAgUmVuZGVyQm94KiByZW5kZXJCb3goKSBj
b25zdDsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxPYmplY3QoKSBj
b25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihjb25zdCBOb2Rl
KiBzdGF5V2l0aGluID0gMCkgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VQcmV2aW91c1NpYmxp
bmdQb3N0T3JkZXIoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwogCiAgICAgdm9p
ZCBjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIGJvb2wgaXNEZXNjZW5kYW50T2YoY29uc3QgTm9kZSopIGNvbnN0OwpAQCAtNDQ0
LDMyICs0MDgsMzUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5TdGFydFNlbGVjdGlv
bigpIGNvbnN0OwogCiAgICAgLy8gR2V0dGluZyBwb2ludHMgaW50byBhbmQgb3V0IG9mIHNjcmVl
biBzcGFjZQotICAgIEZsb2F0UG9pbnQgY29udmVydFRvUGFnZShjb25zdCBGbG9hdFBvaW50JiBw
KSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGNvbnZlcnRGcm9tUGFnZShjb25zdCBGbG9hdFBvaW50
JiBwKSBjb25zdDsKKyAgICBGbG9hdFBvaW50IGNvbnZlcnRUb1BhZ2UoY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0OworICAgIEZsb2F0UG9pbnQgY29udmVydEZyb21QYWdlKGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gSW50ZWdy
YXRpb24gd2l0aCByZW5kZXJpbmcgdHJlZQogCi0gICAgLyoqCi0gICAgICogQXR0YWNoZXMgdGhp
cyBub2RlIHRvIHRoZSByZW5kZXJpbmcgdHJlZS4gVGhpcyBjYWxjdWxhdGVzIHRoZSBzdHlsZSB0
byBiZSBhcHBsaWVkIHRvIHRoZSBub2RlIGFuZCBjcmVhdGVzIGFuCi0gICAgICogYXBwcm9wcmlh
dGUgUmVuZGVyT2JqZWN0IHdoaWNoIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSAoZXhj
ZXB0IHdoZW4gdGhlIHN0eWxlIGhhcyBkaXNwbGF5OiBub25lKS4gVGhpcwotICAgICAqIG1ha2Vz
IHRoZSBub2RlIHZpc2libGUgaW4gdGhlIEZyYW1lVmlldy4KLSAgICAgKi8KKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQorICAgIFJlbmRl
ck9iamVjdCogbmV4dFJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91c1JlbmRl
cmVyKCk7CisgICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1f
cmVuZGVyZXIgPSByZW5kZXJlcjsgfQorICAgIAorICAgIC8vIFVzZSB0aGVzZSB0d28gbWV0aG9k
cyB3aXRoIGNhdXRpb24uCisgICAgUmVuZGVyQm94KiByZW5kZXJCb3goKSBjb25zdDsKKyAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxPYmplY3QoKSBjb25zdDsKKworICAg
IC8vIEF0dGFjaGVzIHRoaXMgbm9kZSB0byB0aGUgcmVuZGVyaW5nIHRyZWUuIFRoaXMgY2FsY3Vs
YXRlcyB0aGUgc3R5bGUgdG8gYmUgYXBwbGllZCB0byB0aGUgbm9kZSBhbmQgY3JlYXRlcyBhbgor
ICAgIC8vIGFwcHJvcHJpYXRlIFJlbmRlck9iamVjdCB3aGljaCB3aWxsIGJlIGluc2VydGVkIGlu
dG8gdGhlIHRyZWUgKGV4Y2VwdCB3aGVuIHRoZSBzdHlsZSBoYXMgZGlzcGxheTogbm9uZSkuIFRo
aXMKKyAgICAvLyBtYWtlcyB0aGUgbm9kZSB2aXNpYmxlIGluIHRoZSBGcmFtZVZpZXcuCiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaCgpOwogCi0gICAgLyoqCi0gICAgICogRGV0YWNoZXMgdGhlIG5v
ZGUgZnJvbSB0aGUgcmVuZGVyaW5nIHRyZWUsIG1ha2luZyBpdCBpbnZpc2libGUgaW4gdGhlIHJl
bmRlcmVkIHZpZXcuIFRoaXMgbWV0aG9kIHdpbGwgcmVtb3ZlCi0gICAgICogdGhlIG5vZGUncyBy
ZW5kZXJpbmcgb2JqZWN0IGZyb20gdGhlIHJlbmRlcmluZyB0cmVlIGFuZCBkZWxldGUgaXQuCi0g
ICAgICovCisgICAgLy8gRGV0YWNoZXMgdGhlIG5vZGUgZnJvbSB0aGUgcmVuZGVyaW5nIHRyZWUs
IG1ha2luZyBpdCBpbnZpc2libGUgaW4gdGhlIHJlbmRlcmVkIHZpZXcuIFRoaXMgbWV0aG9kIHdp
bGwgcmVtb3ZlCisgICAgLy8gdGhlIG5vZGUncyByZW5kZXJpbmcgb2JqZWN0IGZyb20gdGhlIHJl
bmRlcmluZyB0cmVlIGFuZCBkZWxldGUgaXQuCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwog
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAgICB2b2lkIGNyZWF0ZVJlbmRlcmVy
SWZOZWVkZWQoKTsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclJlbmRlcmVy
KCk7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKLSNp
ZiBFTkFCTEUoU1ZHKSB8fCBFTkFCTEUoWEhUTUxNUCkKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRT
aG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlm
CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwg
UmVuZGVyU3R5bGUqKTsKICAgICAKICAgICAvLyBXcmFwcGVyIGZvciBub2RlcyB0aGF0IGRvbid0
IGhhdmUgYSByZW5kZXJlciwgYnV0IHN0aWxsIGNhY2hlIHRoZSBzdHlsZSAobGlrZSBIVE1MT3B0
aW9uRWxlbWVudCkuCkBAIC00ODEsMjQgKzQ0OCwyMCBAQCBwdWJsaWM6CiAgICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICAgICAvLyBOb3RpZmljYXRpb24gb2YgZG9jdW1lbnQgc3RydWN0dXJl
IGNoYW5nZXMKIAotICAgIC8qKgotICAgICAqIE5vdGlmaWVzIHRoZSBub2RlIHRoYXQgaXQgaGFz
IGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgZG9jdW1lbnQuIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBk
b2N1bWVudCBwYXJzaW5nLCBhbmQgYWxzbwotICAgICAqIHdoZW4gYSBub2RlIGlzIGFkZGVkIHRo
cm91Z2ggdGhlIERPTSBtZXRob2RzIGluc2VydEJlZm9yZSgpLCBhcHBlbmRDaGlsZCgpIG9yIHJl
cGxhY2VDaGlsZCgpLiBOb3RlIHRoYXQgdGhpcyBvbmx5Ci0gICAgICogaGFwcGVucyB3aGVuIHRo
ZSBub2RlIGJlY29tZXMgcGFydCBvZiB0aGUgZG9jdW1lbnQgdHJlZSwgaS5lLiBvbmx5IHdoZW4g
dGhlIGRvY3VtZW50IGlzIGFjdHVhbGx5IGFuIGFuY2VzdG9yIG9mCi0gICAgICogdGhlIG5vZGUu
IFRoZSBjYWxsIGhhcHBlbnMgX2FmdGVyXyB0aGUgbm9kZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUg
dHJlZS4KLSAgICAgKgotICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgRE9NTm9kZUluc2Vy
dGVkSW50b0RvY3VtZW50IERPTSBldmVudCwgYnV0IGRvZXMgbm90IHJlcXVpcmUgdGhlIG92ZXJo
ZWFkIG9mIGV2ZW50Ci0gICAgICogZGlzcGF0Y2hpbmcuCi0gICAgICovCisgICAgLy8gTm90aWZp
ZXMgdGhlIG5vZGUgdGhhdCBpdCBoYXMgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBkb2N1bWVudC4g
VGhpcyBpcyBjYWxsZWQgZHVyaW5nIGRvY3VtZW50IHBhcnNpbmcsIGFuZCBhbHNvCisgICAgLy8g
d2hlbiBhIG5vZGUgaXMgYWRkZWQgdGhyb3VnaCB0aGUgRE9NIG1ldGhvZHMgaW5zZXJ0QmVmb3Jl
KCksIGFwcGVuZENoaWxkKCkgb3IgcmVwbGFjZUNoaWxkKCkuIE5vdGUgdGhhdCB0aGlzIG9ubHkK
KyAgICAvLyBoYXBwZW5zIHdoZW4gdGhlIG5vZGUgYmVjb21lcyBwYXJ0IG9mIHRoZSBkb2N1bWVu
dCB0cmVlLCBpLmUuIG9ubHkgd2hlbiB0aGUgZG9jdW1lbnQgaXMgYWN0dWFsbHkgYW4gYW5jZXN0
b3Igb2YKKyAgICAvLyB0aGUgbm9kZS4gVGhlIGNhbGwgaGFwcGVucyBfYWZ0ZXJfIHRoZSBub2Rl
IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSB0cmVlLgorICAgIC8vCisgICAgLy8gVGhpcyBpcyBzaW1p
bGFyIHRvIHRoZSBET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQgRE9NIGV2ZW50LCBidXQgZG9l
cyBub3QgcmVxdWlyZSB0aGUgb3ZlcmhlYWQgb2YgZXZlbnQKKyAgICAvLyBkaXNwYXRjaGluZy4K
ICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIAotICAgIC8qKgotICAg
ICAqIE5vdGlmaWVzIHRoZSBub2RlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIGRv
Y3VtZW50IHRyZWUsIGkuZS4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm8gbG9uZ2VyIGFuIGFuY2Vz
dG9yCi0gICAgICogbm9kZS4KLSAgICAgKgotICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUg
RE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQgRE9NIGV2ZW50LCBidXQgZG9lcyBub3QgcmVxdWly
ZSB0aGUgb3ZlcmhlYWQgb2YgZXZlbnQKLSAgICAgKiBkaXNwYXRjaGluZywgYW5kIGlzIGNhbGxl
ZCBfYWZ0ZXJfIHRoZSBub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS4KLSAgICAgKi8KKyAg
ICAvLyBOb3RpZmllcyB0aGUgbm9kZSB0aGF0IGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSBk
b2N1bWVudCB0cmVlLCBpLmUuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vIGxvbmdlciBhbiBhbmNl
c3RvcgorICAgIC8vIG5vZGUuCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhl
IERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50IERPTSBldmVudCwgYnV0IGRvZXMgbm90IHJlcXVp
cmUgdGhlIG92ZXJoZWFkIG9mIGV2ZW50CisgICAgLy8gZGlzcGF0Y2hpbmcsIGFuZCBpcyBjYWxs
ZWQgX2FmdGVyXyB0aGUgbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuCiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgY2FsbGVkIHdoZW5ldmVyIHlvdSBhcmUgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCBmcm9t
IGEgdHJlZS4gIFRoYXQgdHJlZSBtYXkgYmUgdGhlIG1haW4KQEAgLTUwNywxMCArNDcwLDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgLypkZWVwKi8p
IHsgfQogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUoYm9vbCAvKmRlZXAqLykgeyB9
CiAKLSAgICAvKioKLSAgICAgKiBOb3RpZmllcyB0aGUgbm9kZSB0aGF0IGl0J3MgbGlzdCBvZiBj
aGlsZHJlbiBoYXZlIGNoYW5nZWQgKGVpdGhlciBieSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGQg
bm9kZXMpLCBvciBhIGNoaWxkCi0gICAgICogbm9kZSB0aGF0IGlzIG9mIHRoZSB0eXBlIENEQVRB
X1NFQ1RJT05fTk9ERSwgVEVYVF9OT0RFIG9yIENPTU1FTlRfTk9ERSBoYXMgY2hhbmdlZCBpdHMg
dmFsdWUuCi0gICAgICovCisgICAgLy8gTm90aWZpZXMgdGhlIG5vZGUgdGhhdCBpdCdzIGxpc3Qg
b2YgY2hpbGRyZW4gaGF2ZSBjaGFuZ2VkIChlaXRoZXIgYnkgYWRkaW5nIG9yIHJlbW92aW5nIGNo
aWxkIG5vZGVzKSwgb3IgYSBjaGlsZAorICAgIC8vIG5vZGUgdGhhdCBpcyBvZiB0aGUgdHlwZSBD
REFUQV9TRUNUSU9OX05PREUsIFRFWFRfTk9ERSBvciBDT01NRU5UX05PREUgaGFzIGNoYW5nZWQg
aXRzIHZhbHVlLgogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCAvKmNoYW5n
ZWRCeVBhcnNlciovID0gZmFsc2UsIE5vZGUqIC8qYmVmb3JlQ2hhbmdlKi8gPSAwLCBOb2RlKiAv
KmFmdGVyQ2hhbmdlKi8gPSAwLCBpbnQgLypjaGlsZENvdW50RGVsdGEqLyA9IDApIHsgfQogCiAj
aWZuZGVmIE5ERUJVRwpAQCAtNTY1LDggKzUyNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3Bh
dGNoVUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGRldGFpbCwgUGFz
c1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KTsKICAgICBib29sIGRpc3BhdGNoS2V5RXZl
bnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7CiAgICAgdm9pZCBkaXNwYXRjaFdoZWVs
RXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
Ci0gICAgICAgIGludCBjbGlja0NvdW50ID0gMCwgTm9kZSogcmVsYXRlZFRhcmdldCA9IDApOwor
ICAgIGJvb2wgZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgY2xpY2tDb3VudCA9IDAsIE5vZGUqIHJl
bGF0ZWRUYXJnZXQgPSAwKTsKICAgICBib29sIGRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGJ1dHRvbiwgaW50IGNsaWNrQ291bnQsCiAgICAgICAg
IGludCBwYWdlWCwgaW50IHBhZ2VZLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksCiAgICAgICAg
IGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwK
QEAgLTU3NywxNSArNTM3LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hG
b2N1c0V2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAKLSAg
ICAvKioKLSAgICAgKiBQZXJmb3JtIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYW4gZXZlbnQgZS5n
LiBzdWJtaXR0aW5nIGEgZm9ybQotICAgICAqLworICAgIC8vIFBlcmZvcm0gdGhlIGRlZmF1bHQg
YWN0aW9uIGZvciBhbiBldmVudC4KICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOwogCi0gICAgLyoqCi0gICAgICogVXNlZCBmb3IgZGlzYWJsZWQgZm9ybSBlbGVt
ZW50czsgaWYgdHJ1ZSwgcHJldmVudHMgbW91c2UgZXZlbnRzIGZyb20gYmVpbmcgZGlzcGF0Y2hl
ZAotICAgICAqIHRvIGV2ZW50IGxpc3RlbmVycywgYW5kIHByZXZlbnRzIERPTUFjdGl2YXRlIGV2
ZW50cyBmcm9tIGJlaW5nIHNlbnQgYXQgYWxsLgotICAgICAqLworICAgIC8vIFVzZWQgZm9yIGRp
c2FibGVkIGZvcm0gZWxlbWVudHM7IGlmIHRydWUsIHByZXZlbnRzIG1vdXNlIGV2ZW50cyBmcm9t
IGJlaW5nIGRpc3BhdGNoZWQKKyAgICAvLyB0byBldmVudCBsaXN0ZW5lcnMsIGFuZCBwcmV2ZW50
cyBET01BY3RpdmF0ZSBldmVudHMgZnJvbSBiZWluZyBzZW50IGF0IGFsbC4KICAgICB2aXJ0dWFs
IGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKIAogICAgIHVzaW5nIFRyZWVTaGFyZWQ8Q29udGFpbmVy
Tm9kZT46OnJlZjsKQEAgLTY5MCwxMCArNjQ2LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpOwogCiAgICAgdmlydHVhbCBOb2RlUmFyZURhdGEqIGNyZWF0
ZVJhcmVEYXRhKCk7Ci0gICAgTm9kZSogY29udGFpbmVyQ2hpbGROb2RlKHVuc2lnbmVkIGluZGV4
KSBjb25zdDsKLSAgICB1bnNpZ25lZCBjb250YWluZXJDaGlsZE5vZGVDb3VudCgpIGNvbnN0Owot
ICAgIE5vZGUqIGNvbnRhaW5lckZpcnN0Q2hpbGQoKSBjb25zdDsKLSAgICBOb2RlKiBjb250YWlu
ZXJMYXN0Q2hpbGQoKSBjb25zdDsKICAgICBib29sIHJhcmVEYXRhRm9jdXNlZCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSogbm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0
OwpAQCAtNzEzLDcgKzY2NSw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRl
cmVyOwogICAgIG11dGFibGUgdWludDMyX3QgbV9ub2RlRmxhZ3M7CiAKLSBwcm90ZWN0ZWQ6Citw
cm90ZWN0ZWQ6CiAgICAgYm9vbCBpc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkgY29uc3QgeyBy
ZXR1cm4gZ2V0RmxhZyhJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyk7IH0KICAgICB2b2lk
IHNldElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSB7IHNldEZsYWcoSXNQYXJzaW5nQ2hpbGRy
ZW5GaW5pc2hlZEZsYWcpOyB9CiAgICAgdm9pZCBjbGVhcklzUGFyc2luZ0NoaWxkcmVuRmluaXNo
ZWQoKSB7IGNsZWFyRmxhZyhJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyk7IH0KSW5kZXg6
IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3Np
dGlvbi5jcHAJKHJldmlzaW9uIDY5ODk0KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUsOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCiBzdGF0aWMgTm9kZSogbmV4dFJlbmRlcmVkRWRpdGFibGUoTm9kZSogbm9kZSkKIHsKLSAg
ICB3aGlsZSAoMSkgewotICAgICAgICBub2RlID0gbm9kZS0+bmV4dEVkaXRhYmxlKCk7Ci0gICAg
ICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIHdoaWxlICgobm9kZSA9
IG5vZGUtPm5leHRMZWFmTm9kZSgpKSkgeworICAgICAgICBpZiAoIW5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTYwLDEwICs1OSw5IEBAIHN0YXRpYyBOb2RlKiBuZXh0UmVu
ZGVyZWRFZGl0YWJsZShOb2RlKiAKIAogc3RhdGljIE5vZGUqIHByZXZpb3VzUmVuZGVyZWRFZGl0
YWJsZShOb2RlKiBub2RlKQogewotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIG5vZGUgPSBub2Rl
LT5wcmV2aW91c0VkaXRhYmxlKCk7Ci0gICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJl
dHVybiAwOworICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnByZXZpb3VzTGVhZk5vZGUoKSkpIHsK
KyAgICAgICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigp
OwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY5
ODk0KQorKysgV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzc5LDYgKzc3OSwyMSBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjptZXJnZUVuZElmCiAgICAgfQogfQogCitzdGF0aWMgTm9kZSogZW5jbG9zaW5nSW5saW5l
KE5vZGUqIG5vZGUpCit7CisgICAgd2hpbGUgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAocGFyZW50LT5pc0Jsb2NrRmxvdygpIHx8IHBh
cmVudC0+aGFzVGFnTmFtZShib2R5VGFnKSkKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICAvLyBTdG9wIGlmIGFueSBwcmV2aW91cyBzaWJsaW5nIGlzIGEgYmxvY2suCisgICAgICAg
IGZvciAoTm9kZSogc2libGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOyBzaWJsaW5nOyBz
aWJsaW5nID0gc2libGluZy0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChz
aWJsaW5nLT5pc0Jsb2NrRmxvdygpKQorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICB9CisgICAgICAgIG5vZGUgPSBwYXJlbnQ7CisgICAgfQorICAgIHJldHVybiBub2RlOwor
fQorCiB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOwpAQCAtOTk4LDcgKzEw
MTMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAg
Ly8gYnV0IG91ciBkZXN0aW5hdGlvbiBub2RlIGlzIGluc2lkZSBhbiBpbmxpbmUgdGhhdCBpcyB0
aGUgbGFzdCBpbiB0aGUgYmxvY2suCiAgICAgICAgIC8vIFdlIGluc2VydCBhIHBsYWNlaG9sZGVy
IGJlZm9yZSB0aGUgbmV3bHkgaW5zZXJ0ZWQgY29udGVudCB0byBhdm9pZCBiZWluZyBtZXJnZWQg
aW50byB0aGUgaW5saW5lLgogICAgICAgICBOb2RlKiBkZXN0aW5hdGlvbk5vZGUgPSBkZXN0aW5h
dGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkTWVyZ2VF
bmQgJiYgZGVzdGluYXRpb25Ob2RlICE9IGRlc3RpbmF0aW9uTm9kZS0+ZW5jbG9zaW5nSW5saW5l
RWxlbWVudCgpICYmIGRlc3RpbmF0aW9uTm9kZS0+ZW5jbG9zaW5nSW5saW5lRWxlbWVudCgpLT5u
ZXh0U2libGluZygpKQorICAgICAgICBpZiAobV9zaG91bGRNZXJnZUVuZCAmJiBkZXN0aW5hdGlv
bk5vZGUgIT0gZW5jbG9zaW5nSW5saW5lKGRlc3RpbmF0aW9uTm9kZSkgJiYgZW5jbG9zaW5nSW5s
aW5lKGRlc3RpbmF0aW9uTm9kZSktPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwgcmVmTm9kZS5nZXQoKSk7
CiAgICAgICAgIAogICAgICAgICAvLyBNZXJnaW5nIHRoZSB0aGUgZmlyc3QgcGFyYWdyYXBoIG9m
IGluc2VydGVkIGNvbnRlbnQgd2l0aCB0aGUgY29udGVudCB0aGF0IGNhbWUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71063</attachid>
            <date>2010-10-18 11:27:09 -0700</date>
            <delta_ts>2010-10-18 12:32:45 -0700</delta_ts>
            <desc>Already-reviewed patch: Posted because it’s the only way to get the Early Warning System to test it</desc>
            <filename>bug-47735-20101018112708.patch</filename>
            <type>text/plain</type>
            <size>34437</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTk3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjkgQEAKKzIwMTAtMTAtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAg
UmVtb3ZlIHNvbWUgZnVuY3Rpb25zIGZyb20gY2xhc3MgTm9kZSBhbmQgbWFrZSBhIGZldyBvdGhl
cnMgbm9uLXZpcnR1YWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3NzM1CisKKyAgICAgICAgUmVmYWN0b3JpbmcuIE5vIG5ldyB0ZXN0cy4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U05vZGU6Om1hcmtDaGlsZHJlbik6IEFkZGVkIGEgRklYTUUgYWJvdXQgdGhlIHVzZSBvZiB0aGUg
dmlydHVhbAorICAgICAgICBvd25lckRvY3VtZW50IGZ1bmN0aW9uLgorCisgICAgICAgICogZG9t
L0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVt
b3ZlQ2hpbGRyZW4pOiBSZW1vdmVkIHRoZSB1bnVzZWQgcmV0dXJuIHZhbHVlLgorCisgICAgICAg
ICogZG9tL0NvbnRhaW5lck5vZGUuaDogTWFkZSBpbnNlcnRCZWZvcmUsIHJlcGxhY2VDaGlsZCwg
cmVtb3ZlQ2hpbGQsIGFuZAorICAgICAgICBhcHBlbmRDaGlsZCBub24tdmlydHVhbCBmb3IgY2xh
cml0eSBhbmQgcGVyZm9ybWFuY2UuIE1hZGUgcmVtb3ZlQ2hpbGRyZW4KKyAgICAgICAgbm9uLXZp
cnR1YWwgYW5kIHJlbW92ZWQgaXRzIHJldHVybiB2YWx1ZS4gTW92ZWQgdGhlIGlubGluZSBOb2Rl
IGZ1bmN0aW9ucworICAgICAgICB0aGF0IGNhbGwgdGhyb3VnaCB0byBDb250YWluZXJOb2RlIGlu
dG8gdGhpcyBmaWxlIHNpbmNlIHRoZSBvbGQgd2F5IGludm9sdmVkCisgICAgICAgIGFuIGV4dHJh
IGxldmVsIG9mIGlubGluZSBmdW5jdGlvbiBidXQgb3RoZXJ3aXNlIGhhZCBubyBhZHZhbnRhZ2Vz
LgorCisgICAgICAgICogZG9tL0VsZW1lbnQuaDogTW92ZWQgaXNNYXRoTUxFbGVtZW50IGhlcmUg
YmVjYXVzZSB0aGVyZSBpcyBubyBjYWxsIHNpdGUKKyAgICAgICAgdGhhdCBuZWVkcyB0byBjYWxs
IGl0IG9uIGEgTm9kZSouIFdlIGNhbiBhbHdheXMgbW92ZSBpdCBiYWNrIGlmIHdlIG5lZWQgdG8s
CisgICAgICAgIGJ1dCBpdCdzIGJldHRlciB0byBoYXZlIGxlc3MgaW4gdGhlIE5vZGUgY2xhc3Mu
CisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnNl
cnRCZWZvcmUpOiBBZGRlZCBhbiBpc0NvbnRhaW5lck5vZGUgY2hlY2sgc28gdGhpcyBjYW4KKyAg
ICAgICAgYmUgbm9uLXZpcnR1YWwuIFRoZXJlIGFyZSB2ZXJ5IGZldyBjYWxsZXJzIHdobyBjYWxs
IHRoaXMgZnVuY3Rpb24gb24gTm9kZS4KKyAgICAgICAgSWYgd2Ugd2FudCB0byBvcHRpbWl6ZSB0
aGVtIGZ1cnRoZXIgd2UgY2FuIG1ha2UgdGhlIGlzQ29udGFpbmVyTm9kZSBjaGVjaworICAgICAg
ICBpbmxpbmUgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlcGxhY2VD
aGlsZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVtb3ZlQ2hpbGQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmFwcGVuZENoaWxkKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpyZW1vdmUpOiBSZW1vdmVkIHVubmVlZGVkIHJlZi91bnJlZiBiZWNh
dXNlCisgICAgICAgIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkIGFscmVhZHkgZG9lcyB0aGlz
LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCk6IFJlbW92
ZWQgI2lmIGFyb3VuZCBjYWxsIHRvCisgICAgICAgIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIg
c2luY2UgaXQncyBuZWVkZWQgZXZlbiB3aXRob3V0IFNWRyBhbmQgWEhUTUxNUC4KKworICAgICAg
ICAqIGRvbS9Ob2RlLmg6IE1vdmVkIGRlZmluaXRpb25zIG9mIGlubGluZSBmdW5jdGlvbnMgdGhh
dCBkZXBlbmQgb24KKyAgICAgICAgQ29udGFpbmVyTm9kZSB0byB0aGUgQ29udGFpbmVyTm9kZS5o
IGhlYWRlci4gVGhleSBhbHJlYWR5IHJlcXVpcmVkIGluY2x1c2lvbgorICAgICAgICBvZiB0aGF0
IGhlYWRlciwgc28gdGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuIE1hZGUgaW5zZXJ0QmVm
b3JlLAorICAgICAgICByZXBsYWNlQ2hpbGQsIHJlbW92ZUNoaWxkLCBhbmQgYXBwZW5kQ2hpbGQg
bm9uLXZpcnR1YWwuIFRoZXJlIGFyZSB2ZXJ5IGZldworICAgICAgICBjYWxsZXJzIG9mIHRoZXNl
IGZ1bmN0aW9ucyBvbiB0aGlzIGNsYXNzLiBNb3ZlZCBpc01hdGhNTEVsZW1lbnQgdG8gRWxlbWVu
dC4KKyAgICAgICAgQWRkZWQgYSBGSVhNRSBhYm91dCB0aGUgbmFtZSBvZiBldmVudEFuY2VzdG9y
cy4gRml4ZWQgY29tbWVudCBmb3JtYXR0aW5nLgorICAgICAgICBFbGltaW5hdGVkIHVudXNlZCBp
c0VkaXRhYmxlQmxvY2sgZnVuY3Rpb24uIE1vdmVkIHRoZSBib2R5IG9mIHRoZQorICAgICAgICBl
bmNsb3NpbmdJbmxpbmVFbGVtZW50IGZ1bmN0aW9uIHRvIHRoZSBlZGl0aW5nIGZpbGUgdGhhdCB3
YXMgdGhlIG9ubHkKKyAgICAgICAgY2FsbCBzaXRlLiBSZW1vdmVkIHRoZSBwcmV2aW91c0VkaXRh
YmxlIGFuZCBuZXh0RWRpdGFibGUgZnVuY3Rpb25zLAorICAgICAgICBpbmNvcnBvcmF0aW5nIHRo
ZWlyIGJvZGllcyBpbnRvIHRoZSBvbmUgcGxhY2UgdGhleSB3ZXJlIGNhbGxlZC4KKyAgICAgICAg
VG9vayB0aGUgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlciBmdW5jdGlvbiBvdXQgb2YgI2lmIHNp
bmNlIGl0J3MKKyAgICAgICAgbm93IHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8
bm9zY3JpcHQ+IGVsZW1lbnQuCisKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bmV4dFJlbmRlcmVkRWRpdGFibGUpOiBSZXdyb3RlIHRoZSBmdW5jdGlvbiB0
byB1c2UgbmV4dExlYWZOb2RlCisgICAgICAgIGluc3RlYWQgb2YgbmV4dEVkaXRhYmxlLgorICAg
ICAgICAoV2ViQ29yZTo6cHJldmlvdXNSZW5kZXJlZEVkaXRhYmxlKTogUmV3cm90ZSB0aGUgZnVu
Y3Rpb24gdG8gdXNlCisgICAgICAgIHByZXZpb3VzTGVhZk5vZGUgaW5zdGVhZCBvZiBwcmV2aW91
c0VkaXRhYmxlLgorCisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdJbmxpbmUpOiBNb3ZlZCBmdW5jdGlvbiBo
ZXJlIGZyb20gdGhlIE5vZGUgY2xhc3MuIEFsc28KKyAgICAgICAgZml4ZWQgYW4gaW5jb3JyZWN0
IGNhc3QgdGhpcyBmdW5jdGlvbiBkaWQsIHdoaWNoIGFzc3VtZWQgdGhlIGZ1bmN0aW9uCisgICAg
ICAgIHJlc3VsdCB3YXMgYWx3YXlzIGFuIGVsZW1lbnQsIHdoaWNoIHRoZSBmdW5jdGlvbiBkb2Vz
IG5vdCBndWFyYW50ZWUuCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSk6IENhbGwgdGhlIGZ1bmN0aW9uIGFib3ZlLgorCisgICAgICAgICogaGlzdG9y
eS9IaXN0b3J5SXRlbS5jcHA6IEFkZGVkIGluY2x1ZGUgb2YgTWF0aEV4dHJhcy5oLgorCiAyMDEw
LTEwLTE4ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDY5OTcxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDggQEAgdm9pZCBK
U05vZGU6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcgogICAgIC8vIHRoZSBkb2N1bWVudCwg
d2UgbmVlZCB0byBtYXJrIHRoZSBkb2N1bWVudCwgYnV0IHdlIGRvbid0IG5lZWQgdG8gZXhwbGlj
aXRseQogICAgIC8vIG1hcmsgYW55IG90aGVyIG5vZGVzLgogICAgIGlmIChub2RlLT5pbkRvY3Vt
ZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSB3YW50IHRvIGNhbGwgYSB2
aXJ0dWFsIGZ1bmN0aW9uLCBvd25lckRvY3VtZW50IGhlcmUsCisgICAgICAgIC8vIHdoZW4gdGhl
IG5vbi12aXJ0dWFsIGlubGluZSBmdW5jdGlvbiwgZG9jdW1lbnQsIGlzIHNvIG11Y2ggZmFzdGVy
PyEKICAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBub2RlLT5vd25lckRvY3VtZW50KCkpCiAg
ICAgICAgICAgICBtYXJrRE9NTm9kZVdyYXBwZXIobWFya1N0YWNrLCBkb2MsIGRvYyk7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiA2OTk3MSkKKysr
IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODksMTAg
KzQ4OSwxMCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlclJlbW92ZUNoaWxkKE5vCiAKIC8v
IHRoaXMgZGlmZmVycyBmcm9tIG90aGVyIHJlbW92ZSBmdW5jdGlvbnMgYmVjYXVzZSBpdCBmb3Jj
aWJseSByZW1vdmVzIGFsbCB0aGUgY2hpbGRyZW4sCiAvLyByZWdhcmRsZXNzIG9mIHJlYWQtb25s
eSBzdGF0dXMgb3IgZXZlbnQgZXhjZXB0aW9ucywgZS5nLgotYm9vbCBDb250YWluZXJOb2RlOjpy
ZW1vdmVDaGlsZHJlbigpCit2b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkKIHsK
ICAgICBpZiAoIW1fZmlyc3RDaGlsZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBUaGUgY29udGFpbmVyIG5vZGUgY2FuIGJlIHJlbW92ZWQgZnJvbSBl
dmVudCBoYW5kbGVycy4KICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcHJvdGVjdCh0aGlzKTsK
QEAgLTU0MSw4ICs1NDEsNiBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkK
ICAgICAgICAgLy8gZG9jdW1lbnQuIFRoZXJlIGlzIG5vIGV4cGxhbmF0aW9uIGZvciB0aGlzIGRp
c2NyZXBhbmN5IGJldHdlZW4gcmVtb3ZlQ2hpbGQoKQogICAgICAgICAvLyBhbmQgaXRzIG9wdGlt
aXplZCB2ZXJzaW9uIHJlbW92ZUNoaWxkcmVuKCkuCiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7
CiB9CiAKIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBu
ZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCkKSW5kZXg6
IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmgJKHJldmlzaW9uIDY5OTcxKQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsOSArMjUsMTAg
QEAKICNkZWZpbmUgQ29udGFpbmVyTm9kZV9oCiAKICNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UG9p
bnQ7CiAgICAgCiB0eXBlZGVmIHZvaWQgKCpOb2RlQ2FsbGJhY2spKE5vZGUqKTsKIApAQCAtNDMs
MTAgKzQ0LDEwIEBAIHB1YmxpYzoKICAgICBOb2RlKiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1
cm4gbV9maXJzdENoaWxkOyB9CiAgICAgTm9kZSogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0Q2hpbGQ7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpbnNlcnRCZWZvcmUoUGFzc1JlZlB0
cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHNo
b3VsZExhenlBdHRhY2ggPSBmYWxzZSk7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZChQ
YXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYs
IGJvb2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVtb3Zl
Q2hpbGQoTm9kZSogY2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBw
ZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJvb2wg
c2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKKyAgICBib29sIGluc2VydEJlZm9yZShQYXNzUmVm
UHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJvb2wg
c2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKKyAgICBib29sIHJlcGxhY2VDaGlsZChQYXNzUmVm
UHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJvb2wg
c2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKKyAgICBib29sIHJlbW92ZUNoaWxkKE5vZGUqIGNo
aWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBhcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5v
ZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFs
c2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgb25seSB1c2VkIGR1cmluZyBwYXJzaW5n
LgogICAgIC8vIFRoZXkgZG9uJ3Qgc2VuZCBET00gbXV0YXRpb24gZXZlbnRzIG9yIGhhbmRsZSBy
ZXBhcmVudGluZy4KQEAgLTcyLDggKzczLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFu
Z2VkKGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAs
IE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCi0gICAg
dmlydHVhbCBib29sIHJlbW92ZUNoaWxkcmVuKCk7Ci0KKyAgICAvLyBGSVhNRTogSXQncyBub3Qg
Z29vZCB0byBoYXZlIHR3byBmdW5jdGlvbnMgd2l0aCBzdWNoIHNpbWlsYXIgbmFtZXMsIGVzcGVj
aWFsbHkgcHVibGljIGZ1bmN0aW9ucy4KKyAgICAvLyBIb3cgZG8gcmVtb3ZlQ2hpbGRyZW4gYW5k
IHJlbW92ZUFsbENoaWxkcmVuIGRpZmZlcj8KKyAgICB2b2lkIHJlbW92ZUNoaWxkcmVuKCk7CiAg
ICAgdm9pZCByZW1vdmVBbGxDaGlsZHJlbigpOwogICAgIHZvaWQgdGFrZUFsbENoaWxkcmVuRnJv
bShDb250YWluZXJOb2RlKik7CiAKQEAgLTE0MCwyMyArMTQyLDMxIEBAIGlubGluZSBDb250YWlu
ZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3UKIHsKIH0KIAotaW5saW5lIHVuc2lnbmVkIE5vZGU6
OmNvbnRhaW5lckNoaWxkTm9kZUNvdW50KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBOb2RlOjpj
aGlsZE5vZGVDb3VudCgpIGNvbnN0CiB7CisgICAgaWYgKCFpc0NvbnRhaW5lck5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHRvQ29udGFpbmVyTm9kZSh0aGlzKS0+Y2hpbGRO
b2RlQ291bnQoKTsKIH0KIAotaW5saW5lIE5vZGUqIE5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZSh1
bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBOb2RlKiBOb2RlOjpjaGlsZE5vZGUodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiB7CisgICAgaWYgKCFpc0NvbnRhaW5lck5vZGUoKSkKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIHRvQ29udGFpbmVyTm9kZSh0aGlzKS0+Y2hpbGROb2RlKGlu
ZGV4KTsKIH0KIAotaW5saW5lIE5vZGUqIE5vZGU6OmNvbnRhaW5lckZpcnN0Q2hpbGQoKSBjb25z
dAoraW5saW5lIE5vZGUqIE5vZGU6OmZpcnN0Q2hpbGQoKSBjb25zdAogeworICAgIGlmICghaXND
b250YWluZXJOb2RlKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB0b0NvbnRhaW5l
ck5vZGUodGhpcyktPmZpcnN0Q2hpbGQoKTsKIH0KIAotaW5saW5lIE5vZGUqIE5vZGU6OmNvbnRh
aW5lckxhc3RDaGlsZCgpIGNvbnN0CitpbmxpbmUgTm9kZSogTm9kZTo6bGFzdENoaWxkKCkgY29u
c3QKIHsKKyAgICBpZiAoIWlzQ29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gdG9Db250YWluZXJOb2RlKHRoaXMpLT5sYXN0Q2hpbGQoKTsKIH0KIApJbmRleDog
V2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQu
aAkocmV2aXNpb24gNjk5NzEpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Niw2ICsyNzYsMTIgQEAgcHVibGljOgogICAgIERPTVN0cmluZ01hcCogZGF0YXNl
dCgpOwogICAgIERPTVN0cmluZ01hcCogb3B0aW9uYWxEYXRhc2V0KCkgY29uc3Q7CiAKKyNpZiBF
TkFCTEUoTUFUSE1MKQorICAgIHZpcnR1YWwgYm9vbCBpc01hdGhNTEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorI2Vsc2UKKyAgICBzdGF0aWMgYm9vbCBpc01hdGhNTEVsZW1lbnQo
KSB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0VuYWJsZWRGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNSZWFkT25seUZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5k
ZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUu
Y3BwCShyZXZpc2lvbiA2OTk3MSkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MzAsMzggKzUzMCw0OCBAQCBOb2RlKiBOb2RlOjpmaXJzdERlc2NlbmRhbnQoKSBj
b25zdAogICAgIHJldHVybiBuOwogfQogCi1ib29sIE5vZGU6Omluc2VydEJlZm9yZShQYXNzUmVm
UHRyPE5vZGU+LCBOb2RlKiwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvb2wpCitib29sIE5vZGU6Omlu
c2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhj
ZXB0aW9uQ29kZSYgZWMsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCkKIHsKLSAgICBlYyA9IEhJRVJB
UkNIWV9SRVFVRVNUX0VSUjsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0NvbnRhaW5l
ck5vZGUoKSkgeworICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdG9Db250YWluZXJOb2RlKHRoaXMpLT5p
bnNlcnRCZWZvcmUobmV3Q2hpbGQsIHJlZkNoaWxkLCBlYywgc2hvdWxkTGF6eUF0dGFjaCk7CiB9
CiAKLWJvb2wgTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4sIE5vZGUqLCBFeGNl
cHRpb25Db2RlJiBlYywgYm9vbCkKK2Jvb2wgTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8
Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCBz
aG91bGRMYXp5QXR0YWNoKQogewotICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwotICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWlzQ29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVj
ID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0b0NvbnRhaW5lck5vZGUodGhpcyktPnJlcGxhY2VDaGlsZChuZXdDaGlsZCwg
b2xkQ2hpbGQsIGVjLCBzaG91bGRMYXp5QXR0YWNoKTsKIH0KIAotYm9vbCBOb2RlOjpyZW1vdmVD
aGlsZChOb2RlKiwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIE5vZGU6OnJlbW92ZUNoaWxkKE5v
ZGUqIG9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBlYyA9IE5PVF9GT1VORF9F
UlI7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXNDb250YWluZXJOb2RlKCkpIHsKKyAg
ICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0b0NvbnRhaW5lck5vZGUodGhpcyktPnJlbW92ZUNoaWxkKG9sZENoaWxkLCBl
Yyk7CiB9CiAKLWJvb2wgTm9kZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiwgRXhjZXB0
aW9uQ29kZSYgZWMsIGJvb2wpCitib29sIE5vZGU6OmFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9k
ZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29sIHNob3VsZExhenlBdHRhY2gpCiB7
Ci0gICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghaXNDb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRvQ29udGFp
bmVyTm9kZSh0aGlzKS0+YXBwZW5kQ2hpbGQobmV3Q2hpbGQsIGVjLCBzaG91bGRMYXp5QXR0YWNo
KTsKIH0KIAogdm9pZCBOb2RlOjpyZW1vdmUoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgcmVm
KCk7Ci0gICAgaWYgKE5vZGUgKnAgPSBwYXJlbnROb2RlKCkpCi0gICAgICAgIHAtPnJlbW92ZUNo
aWxkKHRoaXMsIGVjKTsKKyAgICBpZiAoQ29udGFpbmVyTm9kZSogcGFyZW50ID0gcGFyZW50Tm9k
ZSgpKQorICAgICAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKHRoaXMsIGVjKTsKICAgICBlbHNlCiAg
ICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwotICAgIGRlcmVmKCk7CiB9CiAKIHZv
aWQgTm9kZTo6bm9ybWFsaXplKCkKQEAgLTEyMjgsMjggKzEyMzgsNiBAQCB2b2lkIE5vZGU6OmRl
dGFjaCgpCiAgICAgY2xlYXJGbGFnKEluRGV0YWNoRmxhZyk7CiB9CiAKLU5vZGUgKk5vZGU6OnBy
ZXZpb3VzRWRpdGFibGUoKSBjb25zdAotewotICAgIE5vZGUgKm5vZGUgPSBwcmV2aW91c0xlYWZO
b2RlKCk7Ci0gICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgbm9kZSA9IG5vZGUt
PnByZXZpb3VzTGVhZk5vZGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgKk5v
ZGU6Om5leHRFZGl0YWJsZSgpIGNvbnN0Ci17Ci0gICAgTm9kZSAqbm9kZSA9IG5leHRMZWFmTm9k
ZSgpOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0NvbnRlbnRFZGl0
YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgIG5vZGUgPSBub2RlLT5u
ZXh0TGVhZk5vZGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIFJlbmRlck9iamVjdCAq
IE5vZGU6OnByZXZpb3VzUmVuZGVyZXIoKQogewogICAgIGZvciAoTm9kZSAqbiA9IHByZXZpb3Vz
U2libGluZygpOyBuOyBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkpIHsKQEAgLTEzMzcsMTEgKzEz
MjUsNyBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKQogICAgIEFTU0VSVChw
YXJlbnQpOwogICAgIAogICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKHBhcmVudFJlbmRlcmVyICYmIHBhcmVudFJlbmRlcmVyLT5j
YW5IYXZlQ2hpbGRyZW4oKQotI2lmIEVOQUJMRShTVkcpIHx8IEVOQUJMRShYSFRNTE1QKQotICAg
ICAgICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhpcykKLSNlbmRpZgot
ICAgICAgICApIHsKKyAgICBpZiAocGFyZW50UmVuZGVyZXIgJiYgcGFyZW50UmVuZGVyZXItPmNh
bkhhdmVDaGlsZHJlbigpICYmIHBhcmVudC0+Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcih0aGlz
KSkgewogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gc3R5bGVGb3JSZW5kZXJl
cigpOwogICAgICAgICBpZiAocmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQoKSkpIHsKICAgICAg
ICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSBjcmVhdGVSZW5kZXJlcihkb2N1bWVudCgpLT5y
ZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSkpIHsKQEAgLTE0NjYsMTEgKzE0NTAsNiBAQCBib29s
IE5vZGU6OmlzQmxvY2tGbG93T3JCbG9ja1RhYmxlKCkgY29uCiAgICAgcmV0dXJuIHJlbmRlcmVy
KCkgJiYgKHJlbmRlcmVyKCktPmlzQmxvY2tGbG93KCkgfHwgKHJlbmRlcmVyKCktPmlzVGFibGUo
KSAmJiAhcmVuZGVyZXIoKS0+aXNJbmxpbmUoKSkpOwogfQogCi1ib29sIE5vZGU6OmlzRWRpdGFi
bGVCbG9jaygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCkgJiYgaXNC
bG9ja0Zsb3coKTsKLX0KLQogRWxlbWVudCAqTm9kZTo6ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpIGNvbnN0CiB7CiAgICAgTm9kZSAqbiA9IGNvbnN0X2Nhc3Q8Tm9kZSAqPih0aGlzKTsKQEAg
LTE0ODcsMjYgKzE0NjYsNiBAQCBFbGVtZW50ICpOb2RlOjplbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLUVsZW1lbnQgKk5vZGU6OmVuY2xvc2luZ0lubGluZUVs
ZW1lbnQoKSBjb25zdAotewotICAgIE5vZGUgKm4gPSBjb25zdF9jYXN0PE5vZGUgKj4odGhpcyk7
Ci0gICAgTm9kZSAqcDsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIHAgPSBuLT5wYXJlbnRO
b2RlKCk7Ci0gICAgICAgIGlmICghcCB8fCBwLT5pc0Jsb2NrRmxvdygpIHx8IHAtPmhhc1RhZ05h
bWUoYm9keVRhZykpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihu
KTsKLSAgICAgICAgLy8gQWxzbyBzdG9wIGlmIGFueSBwcmV2aW91cyBzaWJsaW5nIGlzIGEgYmxv
Y2sKLSAgICAgICAgZm9yIChOb2RlICpzaWJsaW5nID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7IHNp
Ymxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAg
ICAgaWYgKHNpYmxpbmctPmlzQmxvY2tGbG93KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEVsZW1lbnQgKj4obik7Ci0gICAgICAgIH0KLSAgICAgICAgbiA9IHA7Ci0gICAg
fQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiBFbGVtZW50
KiBOb2RlOjpyb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiByZXN1
bHQgPSAwOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL05vZGUuaAkocmV2aXNpb24gNjk5NzEpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgpAQCAtMzUsOCArMzUsOCBAQAogCiAjaWYgVVNFKEpTQykKIG5hbWVz
cGFjZSBKU0MgewotY2xhc3MgSlNHbG9iYWxEYXRhOwotY2xhc3MgTWFya1N0YWNrOworICAgIGNs
YXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBNYXJrU3RhY2s7CiB9CiAjZW5kaWYKIApAQCAt
MTM3LDggKzEzNyw4IEBAIHB1YmxpYzoKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBjb25z
dCB7IHJldHVybiBtX3ByZXZpb3VzOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBjb25zdCB7
IHJldHVybiBtX25leHQ7IH0KICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBjaGlsZE5vZGVzKCk7
Ci0gICAgTm9kZSogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIGlzQ29udGFpbmVyTm9kZSgp
ID8gY29udGFpbmVyRmlyc3RDaGlsZCgpIDogMDsgfQotICAgIE5vZGUqIGxhc3RDaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIGlzQ29udGFpbmVyTm9kZSgpID8gY29udGFpbmVyTGFzdENoaWxkKCkgOiAw
OyB9CisgICAgTm9kZSogZmlyc3RDaGlsZCgpIGNvbnN0OworICAgIE5vZGUqIGxhc3RDaGlsZCgp
IGNvbnN0OwogICAgIGJvb2wgaGFzQXR0cmlidXRlcygpIGNvbnN0OwogICAgIE5hbWVkTm9kZU1h
cCogYXR0cmlidXRlcygpIGNvbnN0OwogCkBAIC0xNDksMTAgKzE0OSwxMCBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhlc2Ugc2hvdWxkIGFsbCBhY3R1YWxseSByZXR1cm4gYSBub2RlLCBidXQgdGhpcyBp
cyBvbmx5IGltcG9ydGFudCBmb3IgbGFuZ3VhZ2UgYmluZGluZ3MsCiAgICAgLy8gd2hpY2ggd2ls
bCBhbHJlYWR5IGtub3cgYW5kIGhvbGQgYSByZWYgb24gdGhlIHJpZ2h0IG5vZGUgdG8gcmV0dXJu
LiBSZXR1cm5pbmcgYm9vbCBhbGxvd3MKICAgICAvLyB0aGVzZSBtZXRob2RzIHRvIGJlIG1vcmUg
ZWZmaWNpZW50IHNpbmNlIHRoZXkgZG9uJ3QgbmVlZCB0byByZXR1cm4gYSByZWYKLSAgICB2aXJ0
dWFsIGJvb2wgaW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJl
ZkNoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwot
ICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwg
Tm9kZSogb2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHNob3VsZExhenlBdHRhY2ggPSBm
YWxzZSk7Ci0gICAgdmlydHVhbCBib29sIHJlbW92ZUNoaWxkKE5vZGUqIGNoaWxkLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdmlydHVhbCBib29sIGFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4g
bmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHNob3VsZExhenlBdHRhY2ggPSBmYWxzZSk7
CisgICAgYm9vbCBpbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSog
cmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHNob3VsZExhenlBdHRhY2ggPSBmYWxzZSk7
CisgICAgYm9vbCByZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSog
b2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHNob3VsZExhenlBdHRhY2ggPSBmYWxzZSk7
CisgICAgYm9vbCByZW1vdmVDaGlsZChOb2RlKiBjaGlsZCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IGJvb2wgYXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29k
ZSYsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKIAogICAgIHZvaWQgcmVtb3ZlKEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGhhc0NoaWxkTm9kZXMoKSBjb25zdCB7IHJldHVybiBm
aXJzdENoaWxkKCk7IH0KQEAgLTE5MiwxMyArMTkyLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBi
b29sIGlzV01MRWxlbWVudCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShNQVRITUwpCi0gICAgdmlydHVhbCBib29sIGlzTWF0aE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIHN0YXRpYyBib29sIGlzTWF0aE1MRWxlbWVudCgpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLQotCiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFDb250
cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc1N0eWxlZEVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzU3R5bGVkRWxlbWVudEZsYWcpOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzRnJhbWVPd25lckVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMjE4LDcgKzIxMSw4IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSBlbmNs
b3NpbmcgZXZlbnQgcGFyZW50IG5vZGUgKG9yIHNlbGYpIHRoYXQsIHdoZW4gY2xpY2tlZCwgd291
bGQgdHJpZ2dlciBhIG5hdmlnYXRpb24uCiAgICAgTm9kZSogZW5jbG9zaW5nTGlua0V2ZW50UGFy
ZW50T3JTZWxmKCk7CiAKLSAgICAvLyBOb2RlIGFuY2VzdG9ycyB3aGVuIGNvbmNlcm5lZCBhYm91
dCBldmVudCBmbG93CisgICAgLy8gTm9kZSBhbmNlc3RvcnMgd2hlbiBjb25jZXJuZWQgYWJvdXQg
ZXZlbnQgZmxvdy4KKyAgICAvLyBGSVhNRTogU2hvdWxkIGJlIG5hbWVkIGdldEV2ZW50QW5jZXN0
b3JzLgogICAgIHZvaWQgZXZlbnRBbmNlc3RvcnMoVmVjdG9yPFJlZlB0cjxDb250YWluZXJOb2Rl
PiA+ICZhbmNlc3RvcnMpOwogCiAgICAgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0OwpAQCAtMjMy
LDI4ICsyMjYsMjEgQEAgcHVibGljOgogICAgIE5vZGUqIHByZXZpb3VzTm9kZUNvbnNpZGVyaW5n
QXRvbWljTm9kZXMoKSBjb25zdDsKICAgICBOb2RlKiBuZXh0Tm9kZUNvbnNpZGVyaW5nQXRvbWlj
Tm9kZXMoKSBjb25zdDsKICAgICAKLSAgICAvKiogKE5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBE
T00pCi0gICAgICogUmV0dXJucyB0aGUgbmV4dCBsZWFmIG5vZGUuCi0gICAgICoKLSAgICAgKiBV
c2luZyB0aGlzIGZ1bmN0aW9uIGRlbGl2ZXJzIGxlYWYgbm9kZXMgYXMgaWYgdGhlIHdob2xlIERP
TSB0cmVlIHdlcmUgYSBsaW5lYXIgY2hhaW4gb2YgaXRzIGxlYWYgbm9kZXMuCi0gICAgICogQHJl
dHVybiBuZXh0IGxlYWYgbm9kZSBvciAwIGlmIHRoZXJlIGFyZSBubyBtb3JlLgotICAgICAqLwor
ICAgIC8vIFJldHVybnMgdGhlIG5leHQgbGVhZiBub2RlIG9yIDAgaWYgdGhlcmUgYXJlIG5vIG1v
cmUuCisgICAgLy8gRGVsaXZlcnMgbGVhZiBub2RlcyBhcyBpZiB0aGUgd2hvbGUgRE9NIHRyZWUg
d2VyZSBhIGxpbmVhciBjaGFpbiBvZiBpdHMgbGVhZiBub2Rlcy4KKyAgICAvLyBVc2VzIGFuIGVk
aXRpbmctc3BlY2lmaWMgY29uY2VwdCBvZiB3aGF0IGEgbGVhZiBub2RlIGlzLCBhbmQgc2hvdWxk
IHByb2JhYmx5IGJlIG1vdmVkCisgICAgLy8gb3V0IG9mIHRoZSBOb2RlIGNsYXNzIGludG8gYW4g
ZWRpdGluZy1zcGVjaWZpYyBzb3VyY2UgZmlsZS4KICAgICBOb2RlKiBuZXh0TGVhZk5vZGUoKSBj
b25zdDsKIAotICAgIC8qKiAoTm90IHBhcnQgb2YgdGhlIG9mZmljaWFsIERPTSkKLSAgICAgKiBS
ZXR1cm5zIHRoZSBwcmV2aW91cyBsZWFmIG5vZGUuCi0gICAgICoKLSAgICAgKiBVc2luZyB0aGlz
IGZ1bmN0aW9uIGRlbGl2ZXJzIGxlYWYgbm9kZXMgYXMgaWYgdGhlIHdob2xlIERPTSB0cmVlIHdl
cmUgYSBsaW5lYXIgY2hhaW4gb2YgaXRzIGxlYWYgbm9kZXMuCi0gICAgICogQHJldHVybiBwcmV2
aW91cyBsZWFmIG5vZGUgb3IgMCBpZiB0aGVyZSBhcmUgbm8gbW9yZS4KLSAgICAgKi8KKyAgICAv
LyBSZXR1cm5zIHRoZSBwcmV2aW91cyBsZWFmIG5vZGUgb3IgMCBpZiB0aGVyZSBhcmUgbm8gbW9y
ZS4KKyAgICAvLyBEZWxpdmVycyBsZWFmIG5vZGVzIGFzIGlmIHRoZSB3aG9sZSBET00gdHJlZSB3
ZXJlIGEgbGluZWFyIGNoYWluIG9mIGl0cyBsZWFmIG5vZGVzLgorICAgIC8vIFVzZXMgYW4gZWRp
dGluZy1zcGVjaWZpYyBjb25jZXB0IG9mIHdoYXQgYSBsZWFmIG5vZGUgaXMsIGFuZCBzaG91bGQg
cHJvYmFibHkgYmUgbW92ZWQKKyAgICAvLyBvdXQgb2YgdGhlIE5vZGUgY2xhc3MgaW50byBhbiBl
ZGl0aW5nLXNwZWNpZmljIHNvdXJjZSBmaWxlLgogICAgIE5vZGUqIHByZXZpb3VzTGVhZk5vZGUo
KSBjb25zdDsKIAotICAgIGJvb2wgaXNFZGl0YWJsZUJsb2NrKCkgY29uc3Q7Ci0gICAgCi0gICAg
Ly8gZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpIGlzIGRlcHJlY2F0ZWQuICBVc2UgZW5jbG9z
aW5nQmxvY2sgaW5zdGVhZC4KKyAgICAvLyBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgaXMg
ZGVwcmVjYXRlZC4gVXNlIGVuY2xvc2luZ0Jsb2NrIGluc3RlYWQuCiAgICAgRWxlbWVudCogZW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudCgpIGNvbnN0OwogICAgIAotICAgIEVsZW1lbnQqIGVuY2xv
c2luZ0lubGluZUVsZW1lbnQoKSBjb25zdDsKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVt
ZW50KCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBpblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxl
bWVudChOb2RlKik7CkBAIC0yNzAsOSArMjU3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5QYXJz
aW5nQ2hpbGRyZW4oKSB7IH0KIAotICAgIC8vIENhbGxlZCBieSB0aGUgZnJhbWUgcmlnaHQgYmVm
b3JlIGRpc3BhdGNoaW5nIGFuIHVubG9hZEV2ZW50LiBbUmFkYXIgNDUzMjExM10KLSAgICAvLyBU
aGlzIGlzIG5lZWRlZCBmb3IgSFRNTElucHV0RWxlbWVudHMgdG8gdGVsbCB0aGUgZnJhbWUgdGhh
dCBpdCBpcyBkb25lIGVkaXRpbmcgCi0gICAgLy8gKHNlbmRzIHRleHRGaWVsZERpZEVuZEVkaXRp
bmcgbm90aWZpY2F0aW9uKQorICAgIC8vIENhbGxlZCBvbiB0aGUgZm9jdXNlZCBub2RlIHJpZ2h0
IGJlZm9yZSBkaXNwYXRjaGluZyBhbiB1bmxvYWQgZXZlbnQuCiAgICAgdmlydHVhbCB2b2lkIGFi
b3V0VG9VbmxvYWQoKSB7IH0KIAogICAgIC8vIEZvciA8bGluaz4gYW5kIDxzdHlsZT4gZWxlbWVu
dHMuCkBAIC0zMTUsMTQgKzMwMCwxNCBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2b2lkIGxhenlB
dHRhY2goU2hvdWxkU2V0QXR0YWNoZWQgPSBTZXRBdHRhY2hlZCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Rm9jdXMoYm9vbCBiID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJv
b2wgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wgZiA9IHRydWUsIGJv
b2wgLypwYXVzZSovID0gZmFsc2UpIHsgc2V0RmxhZyhmLCBJc0FjdGl2ZUZsYWcpOyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldEhvdmVyZWQoYm9vbCBmID0gdHJ1ZSkgeyBzZXRGbGFnKGYsIElzSG92
ZXJlZEZsYWcpOyB9CiAKICAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CiAKICAg
ICAvLyBXaGV0aGVyIHRoaXMga2luZCBvZiBub2RlIGNhbiByZWNlaXZlIGZvY3VzIGJ5IGRlZmF1
bHQuIE1vc3Qgbm9kZXMgYXJlCi0gICAgLy8gbm90IGZvY3VzYWJsZSBidXQgc29tZSBlbGVtZW50
cywgc3VjaCBhcyBmb3JtIGNvbnRyb2xzIGFuZCBsaW5rcyBhcmUuCisgICAgLy8gbm90IGZvY3Vz
YWJsZSBidXQgc29tZSBlbGVtZW50cywgc3VjaCBhcyBmb3JtIGNvbnRyb2xzIGFuZCBsaW5rcywg
YXJlLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgLy8gV2hl
dGhlciB0aGUgbm9kZSBjYW4gYWN0dWFsbHkgYmUgZm9jdXNlZC4KICAgICB2aXJ0dWFsIGJvb2wg
aXNGb2N1c2FibGUoKSBjb25zdDsKQEAgLTM3MSw1MyArMzU2LDMyIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNSZWFkT25seU5vZGUoKSBjb25zdCB7IHJldHVybiBub2RlVHlwZSgpID09IEVOVElU
WV9SRUZFUkVOQ0VfTk9ERTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5v
ZGVUeXBlKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHVuc2lnbmVkIGNoaWxkTm9kZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBjb250YWluZXJDaGlsZE5vZGVDb3Vu
dCgpIDogMDsgfQotICAgIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBjb250YWluZXJDaGlsZE5vZGUoaW5kZXgpIDogMDsg
fQorICAgIHVuc2lnbmVkIGNoaWxkTm9kZUNvdW50KCkgY29uc3Q7CisgICAgTm9kZSogY2hpbGRO
b2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAotICAgIC8qKgotICAgICAqIERvZXMgYSBwcmUt
b3JkZXIgdHJhdmVyc2FsIG9mIHRoZSB0cmVlIHRvIGZpbmQgdGhlIG5vZGUgbmV4dCBub2RlIGFm
dGVyIHRoaXMgb25lLiBUaGlzIHVzZXMgdGhlIHNhbWUgb3JkZXIgdGhhdAotICAgICAqIHRoZSB0
YWdzIGFwcGVhciBpbiB0aGUgc291cmNlIGZpbGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3Rh
eVdpdGhpbiBJZiBub3QgbnVsbCwgdGhlIHRyYXZlcnNhbCB3aWxsIHN0b3Agb25jZSB0aGUgc3Bl
Y2lmaWVkIG5vZGUgaXMgcmVhY2hlZC4gVGhpcyBjYW4gYmUgdXNlZCB0bwotICAgICAqIHJlc3Ry
aWN0IHRyYXZlcnNhbCB0byBhIHBhcnRpY3VsYXIgc3ViLXRyZWUuCi0gICAgICoKLSAgICAgKiBA
cmV0dXJuIFRoZSBuZXh0IG5vZGUsIGluIGRvY3VtZW50IG9yZGVyCi0gICAgICoKLSAgICAgKiBz
ZWUgQHJlZiB0cmF2ZXJzZVByZXZpb3VzTm9kZSgpCi0gICAgICovCisgICAgLy8gRG9lcyBhIHBy
ZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHRyZWUgdG8gZmluZCB0aGUgbm9kZSBuZXh0IG5vZGUg
YWZ0ZXIgdGhpcyBvbmUuIFRoaXMgdXNlcyB0aGUgc2FtZSBvcmRlciB0aGF0CisgICAgLy8gdGFn
cyBhcHBlYXIgaW4gdGhlIHNvdXJjZSBmaWxlLgorICAgIC8vCisgICAgLy8gQHBhcmFtIHN0YXlX
aXRoaW4gSWYgbm90IG51bGwsIHRoZSB0cmF2ZXJzYWwgd2lsbCBzdG9wIG9uY2UgdGhlIHNwZWNp
ZmllZCBub2RlIGlzIHJlYWNoZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8KKyAgICAvLyByZXN0cmlj
dCB0cmF2ZXJzYWwgdG8gYSBwYXJ0aWN1bGFyIHN1Yi10cmVlLgorICAgIC8vCisgICAgLy8gQHJl
dHVybiBUaGUgbmV4dCBub2RlLCBpbiBkb2N1bWVudCBvcmRlcgorICAgIC8vCisgICAgLy8gc2Vl
IEByZWYgdHJhdmVyc2VQcmV2aW91c05vZGUoKQogICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUo
Y29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwogICAgIAogICAgIC8vIExpa2UgdHJh
dmVyc2VOZXh0Tm9kZSwgYnV0IHNraXBzIGNoaWxkcmVuIGFuZCBzdGFydHMgd2l0aCB0aGUgbmV4
dCBzaWJsaW5nLgogICAgIE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSogc3Rh
eVdpdGhpbiA9IDApIGNvbnN0OwogCi0gICAgLyoqCi0gICAgICogRG9lcyBhIHJldmVyc2UgcHJl
LW9yZGVyIHRyYXZlcnNhbCB0byBmaW5kIHRoZSBub2RlIHRoYXQgY29tZXMgYmVmb3JlIHRoZSBj
dXJyZW50IG9uZSBpbiBkb2N1bWVudCBvcmRlcgotICAgICAqCi0gICAgICogc2VlIEByZWYgdHJh
dmVyc2VOZXh0Tm9kZSgpCi0gICAgICovCi0gICAgTm9kZSogdHJhdmVyc2VQcmV2aW91c05vZGUo
Y29uc3QgTm9kZSAqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKKyAgICAvLyBEb2VzIGEgcmV2ZXJz
ZSBwcmUtb3JkZXIgdHJhdmVyc2FsIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBjb21lcyBiZWZvcmUg
dGhlIGN1cnJlbnQgb25lIGluIGRvY3VtZW50IG9yZGVyCisgICAgTm9kZSogdHJhdmVyc2VQcmV2
aW91c05vZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwogCiAgICAgLy8gTGlr
ZSB0cmF2ZXJzZU5leHROb2RlLCBidXQgdmlzaXRzIHBhcmVudHMgYWZ0ZXIgdGhlaXIgY2hpbGRy
ZW4uCiAgICAgTm9kZSogdHJhdmVyc2VOZXh0Tm9kZVBvc3RPcmRlcigpIGNvbnN0OwogCiAgICAg
Ly8gTGlrZSB0cmF2ZXJzZVByZXZpb3VzTm9kZSwgYnV0IHZpc2l0cyBwYXJlbnRzIGJlZm9yZSB0
aGVpciBjaGlsZHJlbi4KLSAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihj
b25zdCBOb2RlICpzdGF5V2l0aGluID0gMCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VQcmV2
aW91c1NpYmxpbmdQb3N0T3JkZXIoY29uc3QgTm9kZSAqc3RheVdpdGhpbiA9IDApIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogRmluZHMgcHJldmlvdXMgb3IgbmV4dCBlZGl0YWJsZSBsZWFmIG5v
ZGUuCi0gICAgICovCi0gICAgTm9kZSogcHJldmlvdXNFZGl0YWJsZSgpIGNvbnN0OwotICAgIE5v
ZGUqIG5leHRFZGl0YWJsZSgpIGNvbnN0OwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KLSAgICBSZW5kZXJPYmplY3QqIG5leHRSZW5k
ZXJlcigpOwotICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNSZW5kZXJlcigpOwotICAgIHZvaWQg
c2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVy
ZXI7IH0KLSAgICAKLSAgICAvLyBVc2UgdGhlc2UgdHdvIG1ldGhvZHMgd2l0aCBjYXV0aW9uLgot
ICAgIFJlbmRlckJveCogcmVuZGVyQm94KCkgY29uc3Q7Ci0gICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VQcmV2
aW91c05vZGVQb3N0T3JkZXIoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OworICAg
IE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nUG9zdE9yZGVyKGNvbnN0IE5vZGUqIHN0YXlX
aXRoaW4gPSAwKSBjb25zdDsKIAogICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGlzRGVzY2VuZGFudE9m
KGNvbnN0IE5vZGUqKSBjb25zdDsKQEAgLTQ0NCwzMiArNDA4LDM1IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIC8vIEdldHRpbmcg
cG9pbnRzIGludG8gYW5kIG91dCBvZiBzY3JlZW4gc3BhY2UKLSAgICBGbG9hdFBvaW50IGNvbnZl
cnRUb1BhZ2UoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBjb252
ZXJ0RnJvbVBhZ2UoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBj
b252ZXJ0VG9QYWdlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBGbG9hdFBvaW50IGNv
bnZlcnRGcm9tUGFnZShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAKICAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogICAgIC8vIEludGVncmF0aW9uIHdpdGggcmVuZGVyaW5nIHRyZWUKIAot
ICAgIC8qKgotICAgICAqIEF0dGFjaGVzIHRoaXMgbm9kZSB0byB0aGUgcmVuZGVyaW5nIHRyZWUu
IFRoaXMgY2FsY3VsYXRlcyB0aGUgc3R5bGUgdG8gYmUgYXBwbGllZCB0byB0aGUgbm9kZSBhbmQg
Y3JlYXRlcyBhbgotICAgICAqIGFwcHJvcHJpYXRlIFJlbmRlck9iamVjdCB3aGljaCB3aWxsIGJl
IGluc2VydGVkIGludG8gdGhlIHRyZWUgKGV4Y2VwdCB3aGVuIHRoZSBzdHlsZSBoYXMgZGlzcGxh
eTogbm9uZSkuIFRoaXMKLSAgICAgKiBtYWtlcyB0aGUgbm9kZSB2aXNpYmxlIGluIHRoZSBGcmFt
ZVZpZXcuCi0gICAgICovCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcmVuZGVyZXI7IH0KKyAgICBSZW5kZXJPYmplY3QqIG5leHRSZW5kZXJlcigpOworICAg
IFJlbmRlck9iamVjdCogcHJldmlvdXNSZW5kZXJlcigpOworICAgIHZvaWQgc2V0UmVuZGVyZXIo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVyZXI7IH0KKyAgICAK
KyAgICAvLyBVc2UgdGhlc2UgdHdvIG1ldGhvZHMgd2l0aCBjYXV0aW9uLgorICAgIFJlbmRlckJv
eCogcmVuZGVyQm94KCkgY29uc3Q7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJv
eE1vZGVsT2JqZWN0KCkgY29uc3Q7CisKKyAgICAvLyBBdHRhY2hlcyB0aGlzIG5vZGUgdG8gdGhl
IHJlbmRlcmluZyB0cmVlLiBUaGlzIGNhbGN1bGF0ZXMgdGhlIHN0eWxlIHRvIGJlIGFwcGxpZWQg
dG8gdGhlIG5vZGUgYW5kIGNyZWF0ZXMgYW4KKyAgICAvLyBhcHByb3ByaWF0ZSBSZW5kZXJPYmpl
Y3Qgd2hpY2ggd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlIChleGNlcHQgd2hlbiB0aGUg
c3R5bGUgaGFzIGRpc3BsYXk6IG5vbmUpLiBUaGlzCisgICAgLy8gbWFrZXMgdGhlIG5vZGUgdmlz
aWJsZSBpbiB0aGUgRnJhbWVWaWV3LgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKIAotICAg
IC8qKgotICAgICAqIERldGFjaGVzIHRoZSBub2RlIGZyb20gdGhlIHJlbmRlcmluZyB0cmVlLCBt
YWtpbmcgaXQgaW52aXNpYmxlIGluIHRoZSByZW5kZXJlZCB2aWV3LiBUaGlzIG1ldGhvZCB3aWxs
IHJlbW92ZQotICAgICAqIHRoZSBub2RlJ3MgcmVuZGVyaW5nIG9iamVjdCBmcm9tIHRoZSByZW5k
ZXJpbmcgdHJlZSBhbmQgZGVsZXRlIGl0LgotICAgICAqLworICAgIC8vIERldGFjaGVzIHRoZSBu
b2RlIGZyb20gdGhlIHJlbmRlcmluZyB0cmVlLCBtYWtpbmcgaXQgaW52aXNpYmxlIGluIHRoZSBy
ZW5kZXJlZCB2aWV3LiBUaGlzIG1ldGhvZCB3aWxsIHJlbW92ZQorICAgIC8vIHRoZSBub2RlJ3Mg
cmVuZGVyaW5nIG9iamVjdCBmcm9tIHRoZSByZW5kZXJpbmcgdHJlZSBhbmQgZGVsZXRlIGl0Lgog
ICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3Zl
KCk7CiAgICAgdm9pZCBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CiAgICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5kZXJlcigpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlKik7Ci0jaWYgRU5BQkxFKFNWRykgfHwgRU5BQkxFKFhIVE1M
TVApCiAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAgCiAgICAgLy8g
V3JhcHBlciBmb3Igbm9kZXMgdGhhdCBkb24ndCBoYXZlIGEgcmVuZGVyZXIsIGJ1dCBzdGlsbCBj
YWNoZSB0aGUgc3R5bGUgKGxpa2UgSFRNTE9wdGlvbkVsZW1lbnQpLgpAQCAtNDgxLDI0ICs0NDgs
MjAgQEAgcHVibGljOgogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gTm90aWZp
Y2F0aW9uIG9mIGRvY3VtZW50IHN0cnVjdHVyZSBjaGFuZ2VzCiAKLSAgICAvKioKLSAgICAgKiBO
b3RpZmllcyB0aGUgbm9kZSB0aGF0IGl0IGhhcyBiZWVuIGluc2VydGVkIGludG8gdGhlIGRvY3Vt
ZW50LiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgZG9jdW1lbnQgcGFyc2luZywgYW5kIGFsc28KLSAg
ICAgKiB3aGVuIGEgbm9kZSBpcyBhZGRlZCB0aHJvdWdoIHRoZSBET00gbWV0aG9kcyBpbnNlcnRC
ZWZvcmUoKSwgYXBwZW5kQ2hpbGQoKSBvciByZXBsYWNlQ2hpbGQoKS4gTm90ZSB0aGF0IHRoaXMg
b25seQotICAgICAqIGhhcHBlbnMgd2hlbiB0aGUgbm9kZSBiZWNvbWVzIHBhcnQgb2YgdGhlIGRv
Y3VtZW50IHRyZWUsIGkuZS4gb25seSB3aGVuIHRoZSBkb2N1bWVudCBpcyBhY3R1YWxseSBhbiBh
bmNlc3RvciBvZgotICAgICAqIHRoZSBub2RlLiBUaGUgY2FsbCBoYXBwZW5zIF9hZnRlcl8gdGhl
IG5vZGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHRyZWUuCi0gICAgICoKLSAgICAgKiBUaGlzIGlz
IHNpbWlsYXIgdG8gdGhlIERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCBET00gZXZlbnQsIGJ1
dCBkb2VzIG5vdCByZXF1aXJlIHRoZSBvdmVyaGVhZCBvZiBldmVudAotICAgICAqIGRpc3BhdGNo
aW5nLgotICAgICAqLworICAgIC8vIE5vdGlmaWVzIHRoZSBub2RlIHRoYXQgaXQgaGFzIGJlZW4g
aW5zZXJ0ZWQgaW50byB0aGUgZG9jdW1lbnQuIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBkb2N1bWVu
dCBwYXJzaW5nLCBhbmQgYWxzbworICAgIC8vIHdoZW4gYSBub2RlIGlzIGFkZGVkIHRocm91Z2gg
dGhlIERPTSBtZXRob2RzIGluc2VydEJlZm9yZSgpLCBhcHBlbmRDaGlsZCgpIG9yIHJlcGxhY2VD
aGlsZCgpLiBOb3RlIHRoYXQgdGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHRoZSBub2Rl
IGJlY29tZXMgcGFydCBvZiB0aGUgZG9jdW1lbnQgdHJlZSwgaS5lLiBvbmx5IHdoZW4gdGhlIGRv
Y3VtZW50IGlzIGFjdHVhbGx5IGFuIGFuY2VzdG9yIG9mCisgICAgLy8gdGhlIG5vZGUuIFRoZSBj
YWxsIGhhcHBlbnMgX2FmdGVyXyB0aGUgbm9kZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgdHJlZS4K
KyAgICAvLworICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgRE9NTm9kZUluc2VydGVkSW50
b0RvY3VtZW50IERPTSBldmVudCwgYnV0IGRvZXMgbm90IHJlcXVpcmUgdGhlIG92ZXJoZWFkIG9m
IGV2ZW50CisgICAgLy8gZGlzcGF0Y2hpbmcuCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b0RvY3VtZW50KCk7CiAKLSAgICAvKioKLSAgICAgKiBOb3RpZmllcyB0aGUgbm9kZSB0aGF0IGl0
IGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSBkb2N1bWVudCB0cmVlLCBpLmUuIHdoZW4gdGhlIGRv
Y3VtZW50IGlzIG5vIGxvbmdlciBhbiBhbmNlc3RvcgotICAgICAqIG5vZGUuCi0gICAgICoKLSAg
ICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50IERP
TSBldmVudCwgYnV0IGRvZXMgbm90IHJlcXVpcmUgdGhlIG92ZXJoZWFkIG9mIGV2ZW50Ci0gICAg
ICogZGlzcGF0Y2hpbmcsIGFuZCBpcyBjYWxsZWQgX2FmdGVyXyB0aGUgbm9kZSBpcyByZW1vdmVk
IGZyb20gdGhlIHRyZWUuCi0gICAgICovCisgICAgLy8gTm90aWZpZXMgdGhlIG5vZGUgdGhhdCBp
dCBpcyBubyBsb25nZXIgcGFydCBvZiB0aGUgZG9jdW1lbnQgdHJlZSwgaS5lLiB3aGVuIHRoZSBk
b2N1bWVudCBpcyBubyBsb25nZXIgYW4gYW5jZXN0b3IKKyAgICAvLyBub2RlLgorICAgIC8vCisg
ICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCBE
T00gZXZlbnQsIGJ1dCBkb2VzIG5vdCByZXF1aXJlIHRoZSBvdmVyaGVhZCBvZiBldmVudAorICAg
IC8vIGRpc3BhdGNoaW5nLCBhbmQgaXMgY2FsbGVkIF9hZnRlcl8gdGhlIG5vZGUgaXMgcmVtb3Zl
ZCBmcm9tIHRoZSB0cmVlLgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7
CiAKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aGVuZXZlciB5b3UgYXJlIGNv
bm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgZnJvbSBhIHRyZWUuICBUaGF0IHRyZWUgbWF5IGJlIHRo
ZSBtYWluCkBAIC01MDcsMTAgKzQ3MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvVHJlZShib29sIC8qZGVlcCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
ZEZyb21UcmVlKGJvb2wgLypkZWVwKi8pIHsgfQogCi0gICAgLyoqCi0gICAgICogTm90aWZpZXMg
dGhlIG5vZGUgdGhhdCBpdCdzIGxpc3Qgb2YgY2hpbGRyZW4gaGF2ZSBjaGFuZ2VkIChlaXRoZXIg
YnkgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkIG5vZGVzKSwgb3IgYSBjaGlsZAotICAgICAqIG5v
ZGUgdGhhdCBpcyBvZiB0aGUgdHlwZSBDREFUQV9TRUNUSU9OX05PREUsIFRFWFRfTk9ERSBvciBD
T01NRU5UX05PREUgaGFzIGNoYW5nZWQgaXRzIHZhbHVlLgotICAgICAqLworICAgIC8vIE5vdGlm
aWVzIHRoZSBub2RlIHRoYXQgaXQncyBsaXN0IG9mIGNoaWxkcmVuIGhhdmUgY2hhbmdlZCAoZWl0
aGVyIGJ5IGFkZGluZyBvciByZW1vdmluZyBjaGlsZCBub2RlcyksIG9yIGEgY2hpbGQKKyAgICAv
LyBub2RlIHRoYXQgaXMgb2YgdGhlIHR5cGUgQ0RBVEFfU0VDVElPTl9OT0RFLCBURVhUX05PREUg
b3IgQ09NTUVOVF9OT0RFIGhhcyBjaGFuZ2VkIGl0cyB2YWx1ZS4KICAgICB2aXJ0dWFsIHZvaWQg
Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgLypjaGFuZ2VkQnlQYXJzZXIqLyA9IGZhbHNlLCBOb2RlKiAv
KmJlZm9yZUNoYW5nZSovID0gMCwgTm9kZSogLyphZnRlckNoYW5nZSovID0gMCwgaW50IC8qY2hp
bGRDb3VudERlbHRhKi8gPSAwKSB7IH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTU2NSw4ICs1MjYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwYXRjaFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIGludCBkZXRhaWwsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVu
dCk7CiAgICAgYm9vbCBkaXNwYXRjaEtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCYpOwogICAgIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpOwot
ICAgIGJvb2wgZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLAotICAgICAgICBpbnQgY2xpY2tDb3VudCA9IDAs
IE5vZGUqIHJlbGF0ZWRUYXJnZXQgPSAwKTsKKyAgICBib29sIGRpc3BhdGNoTW91c2VFdmVudChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
aW50IGNsaWNrQ291bnQgPSAwLCBOb2RlKiByZWxhdGVkVGFyZ2V0ID0gMCk7CiAgICAgYm9vbCBk
aXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBidXR0
b24sIGludCBjbGlja0NvdW50LAogICAgICAgICBpbnQgcGFnZVgsIGludCBwYWdlWSwgaW50IHNj
cmVlblgsIGludCBzY3JlZW5ZLAogICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBi
b29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksCkBAIC01NzcsMTUgKzUzNywxMSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaEJsdXJFdmVudCgpOwogCi0gICAgLyoqCi0gICAgICogUGVyZm9ybSB0aGUgZGVm
YXVsdCBhY3Rpb24gZm9yIGFuIGV2ZW50IGUuZy4gc3VibWl0dGluZyBhIGZvcm0KLSAgICAgKi8K
KyAgICAvLyBQZXJmb3JtIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYW4gZXZlbnQuCiAgICAgdmly
dHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKIAotICAgIC8qKgotICAgICAq
IFVzZWQgZm9yIGRpc2FibGVkIGZvcm0gZWxlbWVudHM7IGlmIHRydWUsIHByZXZlbnRzIG1vdXNl
IGV2ZW50cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQKLSAgICAgKiB0byBldmVudCBsaXN0ZW5lcnMs
IGFuZCBwcmV2ZW50cyBET01BY3RpdmF0ZSBldmVudHMgZnJvbSBiZWluZyBzZW50IGF0IGFsbC4K
LSAgICAgKi8KKyAgICAvLyBVc2VkIGZvciBkaXNhYmxlZCBmb3JtIGVsZW1lbnRzOyBpZiB0cnVl
LCBwcmV2ZW50cyBtb3VzZSBldmVudHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkCisgICAgLy8gdG8g
ZXZlbnQgbGlzdGVuZXJzLCBhbmQgcHJldmVudHMgRE9NQWN0aXZhdGUgZXZlbnRzIGZyb20gYmVp
bmcgc2VudCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3Q7CiAKICAg
ICB1c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpyZWY7CkBAIC02OTAsMTAgKzY0Niw2
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKTsKIAogICAg
IHZpcnR1YWwgTm9kZVJhcmVEYXRhKiBjcmVhdGVSYXJlRGF0YSgpOwotICAgIE5vZGUqIGNvbnRh
aW5lckNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgY29udGFp
bmVyQ2hpbGROb2RlQ291bnQoKSBjb25zdDsKLSAgICBOb2RlKiBjb250YWluZXJGaXJzdENoaWxk
KCkgY29uc3Q7Ci0gICAgTm9kZSogY29udGFpbmVyTGFzdENoaWxkKCkgY29uc3Q7CiAgICAgYm9v
bCByYXJlRGF0YUZvY3VzZWQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIG5v
blJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdDsKQEAgLTcxMyw3ICs2NjUsNyBAQCBwcml2YXRl
OgogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKICAgICBtdXRhYmxlIHVpbnQzMl90IG1f
bm9kZUZsYWdzOwogCi0gcHJvdGVjdGVkOgorcHJvdGVjdGVkOgogICAgIGJvb2wgaXNQYXJzaW5n
Q2hpbGRyZW5GaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSXNQYXJzaW5nQ2hpbGRy
ZW5GaW5pc2hlZEZsYWcpOyB9CiAgICAgdm9pZCBzZXRJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVk
KCkgeyBzZXRGbGFnKElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWRGbGFnKTsgfQogICAgIHZvaWQg
Y2xlYXJJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkgeyBjbGVhckZsYWcoSXNQYXJzaW5nQ2hp
bGRyZW5GaW5pc2hlZEZsYWcpOyB9CkluZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiA2OTk3MSkKKysr
IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDkg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIE5vZGUqIG5leHRSZW5kZXJl
ZEVkaXRhYmxlKE5vZGUqIG5vZGUpCiB7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgbm9kZSA9
IG5vZGUtPm5leHRFZGl0YWJsZSgpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5uZXh0TGVhZk5vZGUoKSkpIHsKKyAg
ICAgICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwog
ICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7CkBAIC02MCwxMCAr
NTksOSBAQCBzdGF0aWMgTm9kZSogbmV4dFJlbmRlcmVkRWRpdGFibGUoTm9kZSogCiAKIHN0YXRp
YyBOb2RlKiBwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoTm9kZSogbm9kZSkKIHsKLSAgICB3aGls
ZSAoMSkgewotICAgICAgICBub2RlID0gbm9kZS0+cHJldmlvdXNFZGl0YWJsZSgpOwotICAgICAg
ICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAoKG5vZGUgPSBu
b2RlLT5wcmV2aW91c0xlYWZOb2RlKCkpKSB7CisgICAgICAgIGlmICghbm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA2OTk3MSkKKysrIFdlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3OSw2ICs3NzksMjEg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZgogICAgIH0KIH0KIAor
c3RhdGljIE5vZGUqIGVuY2xvc2luZ0lubGluZShOb2RlKiBub2RlKQoreworICAgIHdoaWxlIChD
b250YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYg
KHBhcmVudC0+aXNCbG9ja0Zsb3coKSB8fCBwYXJlbnQtPmhhc1RhZ05hbWUoYm9keVRhZykpCisg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgLy8gU3RvcCBpZiBhbnkgcHJldmlvdXMg
c2libGluZyBpcyBhIGJsb2NrLgorICAgICAgICBmb3IgKE5vZGUqIHNpYmxpbmcgPSBub2RlLT5w
cmV2aW91c1NpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzU2li
bGluZygpKSB7CisgICAgICAgICAgICBpZiAoc2libGluZy0+aXNCbG9ja0Zsb3coKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorICAgICAgICBub2RlID0gcGFyZW50
OworICAgIH0KKyAgICByZXR1cm4gbm9kZTsKK30KKwogdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRp
bmdTZWxlY3Rpb24oKTsKQEAgLTk5OCw3ICsxMDEzLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGJ1dCBvdXIgZGVzdGluYXRpb24gbm9kZSBp
cyBpbnNpZGUgYW4gaW5saW5lIHRoYXQgaXMgdGhlIGxhc3QgaW4gdGhlIGJsb2NrLgogICAgICAg
ICAvLyBXZSBpbnNlcnQgYSBwbGFjZWhvbGRlciBiZWZvcmUgdGhlIG5ld2x5IGluc2VydGVkIGNv
bnRlbnQgdG8gYXZvaWQgYmVpbmcgbWVyZ2VkIGludG8gdGhlIGlubGluZS4KICAgICAgICAgTm9k
ZSogZGVzdGluYXRpb25Ob2RlID0gZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7
Ci0gICAgICAgIGlmIChtX3Nob3VsZE1lcmdlRW5kICYmIGRlc3RpbmF0aW9uTm9kZSAhPSBkZXN0
aW5hdGlvbk5vZGUtPmVuY2xvc2luZ0lubGluZUVsZW1lbnQoKSAmJiBkZXN0aW5hdGlvbk5vZGUt
PmVuY2xvc2luZ0lubGluZUVsZW1lbnQoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgaWYgKG1f
c2hvdWxkTWVyZ2VFbmQgJiYgZGVzdGluYXRpb25Ob2RlICE9IGVuY2xvc2luZ0lubGluZShkZXN0
aW5hdGlvbk5vZGUpICYmIGVuY2xvc2luZ0lubGluZShkZXN0aW5hdGlvbk5vZGUpLT5uZXh0U2li
bGluZygpKQogICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShjcmVhdGVCcmVha0VsZW1lbnQo
ZG9jdW1lbnQoKSksIHJlZk5vZGUuZ2V0KCkpOwogICAgICAgICAKICAgICAgICAgLy8gTWVyZ2lu
ZyB0aGUgdGhlIGZpcnN0IHBhcmFncmFwaCBvZiBpbnNlcnRlZCBjb250ZW50IHdpdGggdGhlIGNv
bnRlbnQgdGhhdCBjYW1lCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHJldmlzaW9uIDY5
OTcxKQorKysgV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsOCArMzIsOSBAQAogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>