<?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>39916</bug_id>
          
          <creation_ts>2010-05-28 16:58:48 -0700</creation_ts>
          <short_desc>Make more HTML DOM members private, especially constructors, third and final batch</short_desc>
          <delta_ts>2010-05-31 11:48:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>39937</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>232014</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-28 16:58:48 -0700</bug_when>
    <thetext>Make more HTML DOM members private, especially constructors, third and final batch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232026</commentid>
    <comment_count>1</comment_count>
      <attachid>57396</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-28 17:16:15 -0700</bug_when>
    <thetext>Created attachment 57396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232047</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-28 19:00:08 -0700</bug_when>
    <thetext>Attachment 57396 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2592059</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232073</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-28 23:24:43 -0700</bug_when>
    <thetext>Attachment 57396 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/2657012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232167</commentid>
    <comment_count>4</comment_count>
      <attachid>57396</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-29 21:13:56 -0700</bug_when>
    <thetext>Comment on attachment 57396
Patch

JavaScriptCore/wtf/OwnArrayPtr.h:2
 +   *  Copyright (C) 2006, 2010 Apple Inc. All righs reserved.
Typo: All rights reserved.

WebCore/editing/DeleteButton.cpp:57
 +              return;
Is this a functional change, or just an optimization?  Since it seems quite unrelated, it might make sense to do it in another patch. (We don&apos;t have any DeleteButton tests do we?

WebCore/html/HTMLFrameSetElement.h:91
 +      OwnArrayPtr&lt;Length&gt; m_colLengths;
Where is OwnArrayPtr.h getting pulled in from?

WebCore/rendering/TextControlInnerElements.cpp:183
 +          return;
Same question here about behavior change as the other defaultEventHandler change.  This is in a few more places as well.

r=me. It seems like some of the EWS are not happy, so if you can divine their complaints, that might be helpful before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232208</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-30 11:33:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; JavaScriptCore/wtf/OwnArrayPtr.h:2
&gt;  +   *  Copyright (C) 2006, 2010 Apple Inc. All righs reserved.
&gt; Typo: All rights reserved.

Thanks. I fixed that and landed just this change as &lt;http://trac.webkit.org/changeset/60417&gt;.

&gt; WebCore/editing/DeleteButton.cpp:57
&gt;  +              return;
&gt; Is this a functional change, or just an optimization?  Since it seems quite unrelated, it might make sense to do it in another patch. (We don&apos;t have any DeleteButton tests do we?

I’ll roll that out and replace it with a FIXME. Generally speaking default event handlers should return and not call through to the base class when they handle the default, but clearly I should not mix any changes of that type in with this change.

&gt; WebCore/html/HTMLFrameSetElement.h:91
&gt;  +      OwnArrayPtr&lt;Length&gt; m_colLengths;
&gt; Where is OwnArrayPtr.h getting pulled in from?

Good point. No idea. I’ll add the include.

&gt; WebCore/rendering/TextControlInnerElements.cpp:183
&gt;  +          return;
&gt; Same question here about behavior change as the other defaultEventHandler change.  This is in a few more places as well.

I’ll roll all this out.

&gt; r=me. It seems like some of the EWS are not happy, so if you can divine their complaints, that might be helpful before landing.

Thanks.

The Chromium-Linux failure seems to just be the lack of OwnArrayPtr.h include. The Qt and Windows failures are mysterious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232213</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-30 13:27:05 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; WebCore/rendering/TextControlInnerElements.cpp:183
&gt; &gt;  +          return;
&gt; &gt; Same question here about behavior change as the other defaultEventHandler change.  This is in a few more places as well.
&gt; 
&gt; I’ll roll all this out.

These other changes were not behavior changes. I just made the logic more idiomatic as opposed to the old code which checked defaultHandled explicitly later in the function instead of the usual style.

I&apos;ll keep them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232214</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-30 13:28:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I&apos;ll keep them.

Changed my mind again. I&apos;ll roll them back and do this change later if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232218</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-30 14:23:14 -0700</bug_when>
    <thetext>Committed r60418: &lt;http://trac.webkit.org/changeset/60418&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232220</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-30 14:39:26 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/60418 might have broken Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232223</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-30 15:31:17 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; http://trac.webkit.org/changeset/60418 might have broken Chromium Linux Release

This change broke the Apple Windows bots, all the Qt bots, and all the Chromium bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232226</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-30 15:36:07 -0700</bug_when>
    <thetext>Prepared rollout &lt;https://bugs.webkit.org/show_bug.cgi?id=39937&gt; while I look to see if this is straight forward to repair online.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232229</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-30 16:59:12 -0700</bug_when>
    <thetext>Committed attempt to fix the build in change set 60419 &lt;http://trac.webkit.org/changeset/60419&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232240</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-30 20:33:11 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Committed attempt to fix the build in change set 60419 &lt;http://trac.webkit.org/changeset/60419&gt;.

Thanks very much, Daniel, for fixing this instead of rolling it out!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232484</commentid>
    <comment_count>14</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-31 11:45:04 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Committed attempt to fix the build in change set 60419 &lt;http://trac.webkit.org/changeset/60419&gt;.
&gt; 
&gt; Thanks very much, Daniel, for fixing this instead of rolling it out!

No problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232486</commentid>
    <comment_count>15</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-31 11:48:13 -0700</bug_when>
    <thetext>For historical bookkeeping, I also committed change-set 60420 &lt;http://trac.webkit.org/changeset/60420&gt; to fix the build.

And, committed change-set 60444 &lt;http://trac.webkit.org/changeset/60444&gt; to add my commit messages for r60419, and r60420 to the change logs.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57396</attachid>
            <date>2010-05-28 17:16:15 -0700</date>
            <delta_ts>2010-05-29 21:13:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39916-20100528171613.patch</filename>
            <type>text/plain</type>
            <size>181493</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzgwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUtMjggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1ha2UgbW9yZSBIVE1MIERPTSBtZW1iZXJzIHByaXZhdGUsIGVzcGVj
aWFsbHkgY29uc3RydWN0b3JzLCB0aGlyZCBhbmQgZmluYWwgYmF0Y2gKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5OTE2CisKKyAgICAgICAgKiB3dGYv
T3duQXJyYXlQdHIuaDoKKyAgICAgICAgKFdURjo6T3duQXJyYXlQdHI6OnNldCk6IEZpeCB0aGUg
YXNzZXJ0aW9uIGluIGhlcmUgdG8gbWF0Y2ggdGhlIG9uZSBpbiBPd25QdHIuCisgICAgICAgIEF0
IHNvbWUgcG9pbnQgc29tZW9uZSBmaXhlZCB0aGUgImFzc2VydHMgd2hlbiBhc3NpZ25pbmcgdG8g
MCBhbmQgdGhlIHBvaW50ZXIgaXMKKyAgICAgICAgYWxyZWFkeSAwIiBpc3N1ZSBpbiBPd25QdHIg
YnV0IGZvcmdvdCB0byBkbyBpdCBoZXJlLgorCiAyMDEwLTA1LTI4ICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBH
YXJlbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oCShyZXZpc2lvbiA2MDM3NCkKKysr
IEphdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsNyArMzUsMTQgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAgICAgICAgIFQq
IHJlbGVhc2UoKSB7IFQqIHB0ciA9IG1fcHRyOyBtX3B0ciA9IDA7IHJldHVybiBwdHI7IH0KIAot
ICAgICAgICB2b2lkIHNldChUKiBwdHIpIHsgQVNTRVJUKG1fcHRyICE9IHB0cik7IHNhZmVEZWxl
dGUoKTsgbV9wdHIgPSBwdHI7IH0KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJl
bmFtZWQgdG8gYWRvcHQuIAorICAgICAgICB2b2lkIHNldChUKiBwdHIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghcHRyIHx8IG1fcHRyICE9IHB0cik7CisgICAgICAgICAgICBzYWZl
RGVsZXRlKCk7CisgICAgICAgICAgICBtX3B0ciA9IHB0cjsKKyAgICAgICAgfQorCiAgICAgICAg
IHZvaWQgY2xlYXIoKSB7IHNhZmVEZWxldGUoKTsgbV9wdHIgPSAwOyB9CiAKICAgICAgICAgVCYg
b3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CkluZGV4
OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gNjAzODApCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI3OCBAQAorMjAxMC0wNS0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBtb3Jl
IEhUTUwgRE9NIG1lbWJlcnMgcHJpdmF0ZSwgZXNwZWNpYWxseSBjb25zdHJ1Y3RvcnMsIHRoaXJk
IGFuZCBmaW5hbCBiYXRjaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzk5MTYKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6aW1wbGljaXRDbG9zZSk6CisgICAgICAgICogZWRpdGluZy9EZWxl
dGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXI6OmNyZWF0ZURlbGV0aW9uVUkpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlSW5zZXJ0SG9yaXpvbnRhbFJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUluc2VydEltYWdlKToKKyAgICAgICAgKiBlZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlZmF1bHRQYXJh
Z3JhcGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUxpc3RJdGVtRWxlbWVudCk6
CisgICAgICAgICogaHRtbC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmhlYWRD
cmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmZvcm1DcmVh
dGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmNyZWF0ZUhlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyOjpmaW5pc2hlZCk6CisgICAgICAgICogaHRtbC9IVE1MVmll
d1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9j
dW1lbnQ6OmNyZWF0ZUNvbnRhaW5pbmdUYWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpj
cmVhdGVTdWJ0cmVlSWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjcmVhdGVTdWJ0cmVlSWZOZWVkZWQpOgorICAgICAgICBVc2UgY3JlYXRlIGlu
c3RlYWQgb2YgbmV3IHRvIGNyZWF0ZSBIVE1MIGVsZW1lbnRzLgorCisgICAgICAgICogaHRtbC9I
VE1MRm9ybUNvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0
aW9uOjpmb3JtQ29sbGVjdGlvbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xs
ZWN0aW9uOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6Z2V0
TmFtZWRGb3JtSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVw
ZGF0ZU5hbWVDYWNoZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6
CisgICAgICAgIFVwZGF0ZWQgZm9yIG5hbWUgYW5kIHByaXZhY3kgY2hhbmdlcyBpbiBIVE1MRm9y
bUVsZW1lbnQuCisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ6On5IVE1MRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojpz
dWJtaXRJbXBsaWNpdGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y3Jl
YXRlRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZXNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckltZ0VsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJbWdFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ6OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjphZGRFbGVtZW50QWxpYXMpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZUFjdGl2ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgQWRkZWQgY3JlYXRlIGZ1bmN0
aW9ucy4gTWFkZSBjb25zdHJ1Y3RvcnMgYW5kIG90aGVyIG1lbWJlcnMgcHJpdmF0ZS4KKyAgICAg
ICAgVXNlZCBhbiBPd25QdHIgZm9yIG1fZWxlbWVudEFsaWFzZXMuIFJlbmFtZWQgY29sbGVjdGlv
bkluZm8gdG8KKyAgICAgICAgbV9jb2xsZWN0aW9uQ2FjaGUgYW5kIHVzZWQgYW4gT3duUHRyIGZv
ciBpdC4gUmVuYW1lZCBmb3JtRWxlbWVudHMgdG8KKyAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVu
dHMgKHNpbmNlIGl0cyBjb250ZW50cyBhcmUgd2hhdCBIVE1MNSBjYWxscworICAgICAgICAiZm9y
bS1hc3NvY2lhdGVkIGVsZW1lbnQiLCBub3QgZm9ybSBlbGVtZW50cykuIFJlbmFtZWQgaW1nRWxl
bWVudHMgdG8KKyAgICAgICAgbV9pbWFnZUVsZW1lbnRzLgorCisgICAgICAgICogaHRtbC9IVE1M
RnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1l
bnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0
RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVsZW1l
bnQuaDoKKyAgICAgICAgQWRkZWQgY3JlYXRlIGZ1bmN0aW9ucy4gTWFkZSBjb25zdHJ1Y3RvcnMg
YW5kIG90aGVyIG1lbWJlcnMgcHJpdmF0ZS4KKyAgICAgICAgUmVuYW1lZCBtX3Jvd3MgYW5kIG1f
Y29scyB0byBtX3Jvd0xlbmd0aHMgYW5kIG1fY29sTGVuZ3RocyBhbmQgdXNlZAorICAgICAgICBP
d25BcnJheVB0ciBmb3IgYm90aC4KKworICAgICAgICAqIGh0bWwvSFRNTExhYmVsRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlQXNMYWJlbGFibGVGb3JtQ29udHJvbCk6IE1hZGUg
dGhpcyBjYXN0IHRvIEVsZW1lbnQgaW5zdGVhZAorICAgICAgICBvZiBIVE1MRWxlbWVudCwgc2lu
Y2UgaXNGb3JtQ29udHJvbEVsZW1lbnQgaXMgYXZhaWxhYmxlIG9uIEVsZW1lbnQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50OjpIVE1MTGFiZWxFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1M
TGFiZWxFbGVtZW50Lmg6CisgICAgICAgIEFkZGVkIGNyZWF0ZSBmdW5jdGlvbnMuIE1hZGUgY29u
c3RydWN0b3JzIGFuZCBvdGhlciBtZW1iZXJzIHByaXZhdGUuCisKKyAgICAgICAgKiBodG1sL0hU
TUxMZWdlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50
OjpIVE1MTGVnZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Ojphc3NvY2lh
dGVkQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6Zm9jdXMp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbik6
CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oOgorICAgICAgICBBZGRlZCBjcmVh
dGUgZnVuY3Rpb25zLiBNYWRlIGNvbnN0cnVjdG9ycyBhbmQgb3RoZXIgbWVtYmVycyBwcml2YXRl
LgorICAgICAgICBSZW5hbWVkIGZvcm1FbGVtZW50IHRvIGFzc29jaWF0ZWRDb250cm9sIHNpbmNl
IGh0ZSBjb250cm9sIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCB0aGlzIGxlZ2VuZCBpcyBub3Qg
YSAiZm9ybSBlbGVtZW50Ii4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUJ1dHRvbjo6RGVsZXRlQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlbGV0ZUJ1dHRvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0
ZUJ1dHRvbi5oOgorICAgICAgICAqIGh0bWwvSFRNTERpdkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTERpdkVsZW1lbnQ6OkhUTUxEaXZFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxEaXZFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTERpdkVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb250RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9udEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxIUkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSFJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTEhSRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTEhlYWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxIZWFkRWxlbWVudDo6SFRNTEhlYWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxI
ZWFkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxIZWFkRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTEhlYWRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxIZWFkaW5nRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxIZWFk
aW5nRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEh0bWxFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxI
dG1sRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpIVE1MSW1hZ2VFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9I
VE1MSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNyZWF0ZVRlbXBvcmFyeUZvcm1Gb3JJc0luZGV4KToK
KyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJ
c0luZGV4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSXNJbmRleEVsZW1lbnQ6
OkhUTUxJc0luZGV4RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSXNJbmRleEVsZW1l
bnQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxMSUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExJRWxl
bWVudDo6SFRNTExJRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTElFbGVtZW50Ojpj
cmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTExJRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
SFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6
SFRNTExpbmtFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5oOgorICAgICAgICBBZGRlZCBj
cmVhdGUgZnVuY3Rpb25zLiBNYWRlIGNvbnN0cnVjdG9ycyBhbmQgb3RoZXIgbWVtYmVycyBwcml2
YXRlLgorCisgICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46IFJlbW92ZWQgdGhlIGNyZWF0
ZVdpdGhOZXcgZmxhZyBmcm9tIGFsbCB0aGUKKyAgICAgICAgdGFncyB0aGF0IHdlcmUgc3RpbGwg
dXNpbmcgaXQ6IGRpdiwgZm9udCwgZm9ybSwgZnJhbWVzZXQsIGgxLCBoMiwgaDMsCisgICAgICAg
IGg0LCBoNSwgaDYsIGhlYWQsIGhyLCBodG1sLCBpbWFnZSwgaW1nLCBpbnB1dCwgaW5zLCBpc2lu
ZGV4LCBsYWJlbCwKKyAgICAgICAgbGVnZW5kLCBsaSwgYW5kIGxpbmsuCisKKyAgICAgICAgKiBo
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDogUmVtb3ZlZCB1bm5lZWRlZCBkZWZpbml0aW9uIG9m
IHRoZSByZWFkT25seQorICAgICAgICBmdW5jdGlvbiwgc2luY2UgdGhlIG9uZSBpbiBIVE1MRm9y
bUVsZW1lbnQgZG9lcyB0aGUgc2FtZSB0aGluZy4KKworICAgICAgICAqIGxvYWRlci9JbWFnZURv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnRFbGVtZW50OjpJbWFn
ZURvY3VtZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50RWxlbWVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3Vt
ZW50U3RydWN0dXJlKToKKyAgICAgICAgQWRkZWQgY3JlYXRlIGZ1bmN0aW9ucy4gTWFkZSBjb25z
dHJ1Y3RvcnMgYW5kIG90aGVyIG1lbWJlcnMgcHJpdmF0ZS4KKworICAgICAgICAqIHBhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNs
dWRlRWRpdERyYWcpOiBVc2UgdGhlIG5vbi12aXJ0dWFsIGRpc2FibGVkCisgICAgICAgIGZ1bmN0
aW9uIGluc3RlYWQgb2YgdGhlIHZpcnR1YWwgaXNFbmFibGVkRm9ybUNvbnRyb2wgZnVuY3Rpb24s
IHdoaWNoIGp1c3QKKyAgICAgICAgdHVybnMgYXJvdW5kIGFuZCBjYWxscyB0aGUgZGlzYWJsZWQg
ZnVuY3Rpb24uCisKKyAgICAgICAgKiByZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6Ok1lZGlh
Q29udHJvbFNoYWRvd1Jvb3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFNoYWRvd1Jvb3RFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sRWxlbWVudDo6TWVkaWFDb250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVD
b250YWluZXJFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckNvbnRhaW5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5
RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFN0YXR1c0Rp
c3BsYXlFbGVtZW50Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sU3Rh
dHVzRGlzcGxheUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpzdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0
YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6dXBkYXRl
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6
Ok1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbE11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpN
ZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Ojp1cGRhdGVEaXNwbGF5VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6TWVk
aWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6aXNGb3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpzZWVrVGlt
ZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVt
ZW50OjpNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25F
bGVtZW50OjpNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVC
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6TWVkaWFDb250
cm9sVGltZWxpbmVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRpbWVs
aW5lRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRpbWVs
aW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckVsZW1lbnQ6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRv
bkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRv
bkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVEaXNwbGF5
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1l
bnQ6OmNyZWF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmg6
CisgICAgICAgIEFkZGVkIGNyZWF0ZSBmdW5jdGlvbnMuIE1hZGUgY29uc3RydWN0b3JzIGFuZCBv
dGhlciBtZW1iZXJzIHByaXZhdGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93SW5wdXRFbGVtZW50OjpT
aGFkb3dJbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93SW5wdXRFbGVtZW50
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnVw
ZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgQWRkZWQgY3JlYXRlIGZ1bmN0aW9ucy4gTWFkZSBj
b25zdHJ1Y3RvcnMgYW5kIG90aGVyIG1lbWJlcnMgcHJpdmF0ZS4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6Y3Jl
YXRlQ29udHJvbHNTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpj
cmVhdGVQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6Y3JlYXRlTXV0ZUJ1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6Y3JlYXRlUGxheUJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6Y3JlYXRlU2Vla0JhY2tCdXR0b24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OmNyZWF0ZVNlZWtGb3J3YXJkQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVSZXdpbmRCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OmNyZWF0ZVJldHVyblRvUmVhbHRpbWVCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OmNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVTdGF0dXNE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVUaW1lbGluZUNv
bnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZWxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OmNyZWF0ZVZvbHVtZVNsaWRlckNvbnRh
aW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6Y3JlYXRlVm9sdW1lU2xpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVDdXJyZW50VGltZURpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OmNyZWF0ZVRpbWVSZW1haW5pbmdE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVGdWxsc2NyZWVu
QnV0dG9uKToKKyAgICAgICAgVXNlIGNyZWF0ZSBpbnN0ZWFkIG9mIG5ldy4KKworICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9ncmVz
c1ZhbHVlRWxlbWVudDo6UHJvZ3Jlc3NWYWx1ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UHJvZ3Jlc3NWYWx1ZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQ
cm9ncmVzczo6dXBkYXRlVmFsdWVQYXJ0U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpTbGlk
ZXJUaHVtYkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyVGh1bWJFbGVtZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVu
dCk6CisgICAgICAgIEFkZGVkIGNyZWF0ZSBmdW5jdGlvbnMuIE1hZGUgY29uc3RydWN0b3JzIGFu
ZCBvdGhlciBtZW1iZXJzIHByaXZhdGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJF
bGVtZW50OjpUZXh0Q29udHJvbElubmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29udHJvbElubmVyRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250
cm9sSW5uZXJUZXh0RWxlbWVudDo6VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
OjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6U2VhcmNo
RmllbGRDYW5jZWxCdXR0b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
cGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVy
aW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oOgorICAgICAgICBBZGRlZCBjcmVhdGUgZnVu
Y3Rpb25zLiBNYWRlIGNvbnN0cnVjdG9ycyBhbmQgb3RoZXIgbWVtYmVycyBwcml2YXRlLgorCiAy
MDEwLTA1LTI4ICBBYXJvbiBCb29kbWFuICA8YWFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDYwMzc0KQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2LDcgKzE4
MTYsNyBAQCB2b2lkIERvY3VtZW50OjppbXBsaWNpdENsb3NlKCkKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gVGhlIGltcGxpY2l0IDxoZWFkPiBpc24ndCBleHBlY3RlZCBpbiBvbGRlciB2
ZXJzaW9ucyBvZiBNYWlsIC0gPHJkYXI6Ly9wcm9ibGVtLzY4NjM3OTU+CiAgICAgICAgICAgICBp
ZiAoIWhlYWQoKSAmJiBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQodGhpcykpIHsKLSAgICAgICAg
ICAgICAgICBkb2N1bWVudEVsZW1lbnQtPmFwcGVuZENoaWxkKG5ldyBIVE1MSGVhZEVsZW1lbnQo
aGVhZFRhZywgdGhpcyksIGVjKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQtPmFw
cGVuZENoaWxkKEhUTUxIZWFkRWxlbWVudDo6Y3JlYXRlKHRoaXMpLCBlYyk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFlYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkb2N1bWVudEVs
ZW1lbnQtPmFwcGVuZENoaWxkKEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKHRoaXMpLCBlYyk7Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlQnV0dG9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw5
ICszNiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURlbGV0ZUJ1dHRvbjo6RGVsZXRl
QnV0dG9uKERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IEhUTUxJbWFnZUVsZW1lbnQoSFRNTE5h
bWVzOjppbWdUYWcsIGRvY3VtZW50KQordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworaW5s
aW5lIERlbGV0ZUJ1dHRvbjo6RGVsZXRlQnV0dG9uKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6
IEhUTUxJbWFnZUVsZW1lbnQoaW1nVGFnLCBkb2N1bWVudCkKK3sKK30KKworUGFzc1JlZlB0cjxE
ZWxldGVCdXR0b24+IERlbGV0ZUJ1dHRvbjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKIHsK
KyAgICByZXR1cm4gbmV3IERlbGV0ZUJ1dHRvbihkb2N1bWVudCk7CiB9CiAKIHZvaWQgRGVsZXRl
QnV0dG9uOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKQEAgLTQ3LDYgKzU0LDcg
QEAgdm9pZCBEZWxldGVCdXR0b246OmRlZmF1bHRFdmVudEhhbmRsZXIoRQogICAgICAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+
ZGVsZXRlVGFyZ2V0KCk7CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZUJ1dHRvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxl
dGVCdXR0b24uaAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0
dG9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiArMzIsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERlbGV0ZUJ1dHRvbiA6IHB1YmxpYyBIVE1MSW1hZ2VFbGVtZW50
IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWxldGVCdXR0b24+IGNyZWF0ZShE
b2N1bWVudCopOworCitwcml2YXRlOgogICAgIERlbGV0ZUJ1dHRvbihEb2N1bWVudCopOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDYwMzc0KQor
KysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpyZXNw
b25kVG9DaAogCiB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0aW9uVUko
KQogewotICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gY29udGFpbmVyID0gbmV3IEhUTUxEaXZF
bGVtZW50KGRpdlRhZywgbV90YXJnZXQtPmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxIVE1MRGl2
RWxlbWVudD4gY29udGFpbmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX3RhcmdldC0+ZG9j
dW1lbnQoKSk7CiAgICAgY29udGFpbmVyLT5zZXRBdHRyaWJ1dGUoY29udGFpbmVyLT5pZEF0dHJp
YnV0ZU5hbWUoKSwgY29udGFpbmVyRWxlbWVudElkZW50aWZpZXIpOwogCiAgICAgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gY29udGFpbmVyLT5nZXRJbmxpbmVTdHlsZURlY2wo
KTsKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0
ZURlbGV0CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm90dG9tLCAiMCIpOwog
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsICIwIik7CiAKLSAgICBSZWZQ
dHI8SFRNTERpdkVsZW1lbnQ+IG91dGxpbmUgPSBuZXcgSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBt
X3RhcmdldC0+ZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBvdXRsaW5l
ID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX3RhcmdldC0+ZG9jdW1lbnQoKSk7CiAgICAgb3V0
bGluZS0+c2V0QXR0cmlidXRlKG91dGxpbmUtPmlkQXR0cmlidXRlTmFtZSgpLCBvdXRsaW5lRWxl
bWVudElkZW50aWZpZXIpOwogCiAgICAgY29uc3QgaW50IGJvcmRlcldpZHRoID0gNDsKQEAgLTIy
NCw3ICsyMjQsNyBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0CiAg
ICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8RGVsZXRlQnV0dG9uPiBi
dXR0b24gPSBuZXcgRGVsZXRlQnV0dG9uKG1fdGFyZ2V0LT5kb2N1bWVudCgpKTsKKyAgICBSZWZQ
dHI8RGVsZXRlQnV0dG9uPiBidXR0b24gPSBEZWxldGVCdXR0b246OmNyZWF0ZShtX3RhcmdldC0+
ZG9jdW1lbnQoKSk7CiAgICAgYnV0dG9uLT5zZXRBdHRyaWJ1dGUoYnV0dG9uLT5pZEF0dHJpYnV0
ZU5hbWUoKSwgYnV0dG9uRWxlbWVudElkZW50aWZpZXIpOwogCiAgICAgY29uc3QgaW50IGJ1dHRv
bldpZHRoID0gMzA7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA2
MDM3NCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcyLDEwICs0NzIsMTAgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEJhY2t0YWIo
RnJhbWUqIAogCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0SG9yaXpvbnRhbFJ1bGUoRnJhbWUq
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7Ci0gICAgUmVmUHRyPEhUTUxIUkVsZW1lbnQ+IGhyID0gbmV3IEhUTUxIUkVsZW1lbnQoaHJU
YWcsIGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8SFRNTEhSRWxlbWVudD4gcnVsZSA9
IEhUTUxIUkVsZW1lbnQ6OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgaWYgKCF2YWx1
ZS5pc0VtcHR5KCkpCi0gICAgICAgIGhyLT5zZXRBdHRyaWJ1dGUoaHItPmlkQXR0cmlidXRlTmFt
ZSgpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnROb2RlKGZyYW1lLCBoci5yZWxl
YXNlKCkpOworICAgICAgICBydWxlLT5zZXRBdHRyaWJ1dGUocnVsZS0+aWRBdHRyaWJ1dGVOYW1l
KCksIHZhbHVlKTsKKyAgICByZXR1cm4gZXhlY3V0ZUluc2VydE5vZGUoZnJhbWUsIHJ1bGUucmVs
ZWFzZSgpKTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEhUTUwoRnJhbWUqIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC00
ODYsNyArNDg2LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEhUTUwoRnJhbWUqIGZyYQog
c3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEltYWdlKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIEZJWE1FOiBJ
ZiB1c2VySW50ZXJmYWNlIGlzIHRydWUsIHdlIHNob3VsZCBkaXNwbGF5IGEgZGlhbG9nIGJveCBh
bmQgbGV0IHRoZSB1c2VyIGNob29zZSBhIGxvY2FsIGltYWdlLgotICAgIFJlZlB0cjxIVE1MSW1h
Z2VFbGVtZW50PiBpbWFnZSA9IG5ldyBIVE1MSW1hZ2VFbGVtZW50KGltZ1RhZywgZnJhbWUtPmRv
Y3VtZW50KCkpOworICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IEhUTUxJbWFn
ZUVsZW1lbnQ6OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgaW1hZ2UtPnNldFNyYyh2
YWx1ZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnROb2RlKGZyYW1lLCBpbWFnZS5yZWxlYXNl
KCkpOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysr
IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3NCw3
ICs4NzQsNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkKIAogUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBk
b2N1bWVudCk7CisgICAgcmV0dXJuIEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwog
fQogCiBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVCcmVha0VsZW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50KQpAQCAtODk0LDcgKzg5NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNy
ZWF0ZVVub3JkZXJlZEwKIAogUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlTGlzdEl0ZW1F
bGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxMSUVsZW1l
bnQobGlUYWcsIGRvY3VtZW50KTsKKyAgICByZXR1cm4gSFRNTExJRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnQo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxEaXZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTERpdkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
RGl2RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACi0vKioKKy8qCiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzIsMTQgKzMyLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAotSFRNTERpdkVsZW1lbnQ6OkhUTUxEaXZFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0
YWdOYW1lLCBkb2MpCitIVE1MRGl2RWxlbWVudDo6SFRNTERpdkVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZGl2VGFnKSk7CiB9
CiAKLUhUTUxEaXZFbGVtZW50Ojp+SFRNTERpdkVsZW1lbnQoKQorUGFzc1JlZlB0cjxIVE1MRGl2
RWxlbWVudD4gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiB7Cisg
ICAgcmV0dXJuIG5ldyBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KTsKK30KKworUGFz
c1JlZlB0cjxIVE1MRGl2RWxlbWVudD4gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5l
dyBIVE1MRGl2RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CiB9CiAKIGJvb2wgSFRNTERpdkVs
ZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERpdkVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQuaAkocmV2
aXNpb24gNjAzNzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE3ICsyOSwyMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxEaXZFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRGl2RWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTERpdkVsZW1lbnQ+
IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIFN0cmluZyBh
bGlnbigpIGNvbnN0OworICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7CisKK3Byb3Rl
Y3RlZDoKICAgICBIVE1MRGl2RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKLSAgICB+SFRNTERpdkVsZW1lbnQoKTsKIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1
aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsg
fQogCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsNiArNDAs
MTEgQEAgSFRNTEZvbnRFbGVtZW50OjpIVE1MRm9udEVsZW1lbnQoY29uc3QgUQogICAgIEFTU0VS
VChoYXNUYWdOYW1lKGZvbnRUYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MRm9udEVsZW1lbnQ+
IEhUTUxGb250RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxGb250RWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCk7Cit9CisKIC8vIEFsbG93cyBsZWFkaW5nIHNwYWNlcy4KIC8vIEFsbG93
cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJhY3RlcnMuCiAvLyBSZXR1cm5zIDEwIGZvciBhbnkg
c2l6ZSBncmVhdGVyIHRoYW4gOS4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmgJKHJldmlzaW9u
IDYwMzc0KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSw2ICsyMCw3IEBACiAgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBIVE1MRm9udEVsZW1lbnRf
aAogI2RlZmluZSBIVE1MRm9udEVsZW1lbnRfaAogCkBAIC0yOCwxNCArMzAsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxGb250RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVu
dCB7CiBwdWJsaWM6Ci0gICAgSFRNTEZvbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGb250RWxlbWVudD4gY3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIAotICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwg
TWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0KICAgICBTdHJpbmcgY29sb3IoKSBjb25zdDsKICAg
ICB2b2lkIHNldENvbG9yKGNvbnN0IFN0cmluZyYpOwogCkBAIC00Niw4ICs0MiwxNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIHN0YXRpYyBi
b29sIGNzc1ZhbHVlRnJvbUZvbnRTaXplTnVtYmVyKGNvbnN0IFN0cmluZyYsIGludCYpOworCitw
cml2YXRlOgorICAgIEhUTUxGb250RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCisgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogfTsK
IAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zOCw5ICszOCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGlu
bGluZSBDb2xsZWN0aW9uQ2FjaGUqIEhUTUxGb3JtQ29sbGVjdGlvbjo6Zm9ybUNvbGxlY3Rpb25J
bmZvKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKIHsKLSAgICBpZiAoIWZvcm0tPmNvbGxlY3Rpb25J
bmZvKQotICAgICAgICBmb3JtLT5jb2xsZWN0aW9uSW5mbyA9IG5ldyBDb2xsZWN0aW9uQ2FjaGU7
Ci0gICAgcmV0dXJuIGZvcm0tPmNvbGxlY3Rpb25JbmZvOworICAgIGlmICghZm9ybS0+bV9jb2xs
ZWN0aW9uQ2FjaGUpCisgICAgICAgIGZvcm0tPm1fY29sbGVjdGlvbkNhY2hlLnNldChuZXcgQ29s
bGVjdGlvbkNhY2hlKTsKKyAgICByZXR1cm4gZm9ybS0+bV9jb2xsZWN0aW9uQ2FjaGUuZ2V0KCk7
CiB9CiAKIEhUTUxGb3JtQ29sbGVjdGlvbjo6SFRNTEZvcm1Db2xsZWN0aW9uKFBhc3NSZWZQdHI8
SFRNTEZvcm1FbGVtZW50PiBmb3JtKQpAQCAtNzgsMTYgKzc4LDE3IEBAIE5vZGUqIEhUTUxGb3Jt
Q29sbGVjdGlvbjo6aXRlbSh1bnNpZ25lZCAKICAgICAgICAgaW5mbygpLT5lbGVtZW50c0FycmF5
UG9zaXRpb24gPSAwOwogICAgIH0KIAotICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Kj4mIGwgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihiYXNlKCkpLT5mb3JtRWxlbWVu
dHM7CisgICAgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxlbWVudHNBcnJheSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGJhc2UoKSktPm1fYXNzb2NpYXRlZEVsZW1l
bnRzOwogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IGluZm8oKS0+cG9zaXRpb247CiAgICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gaW5mbygpLT5lbGVtZW50c0FycmF5UG9zaXRpb247IGkg
PCBsLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChsW2ldLT5pc0VudW1lcmF0YWJsZSgpICkg
eworICAgIGZvciAodW5zaWduZWQgaSA9IGluZm8oKS0+ZWxlbWVudHNBcnJheVBvc2l0aW9uOyBp
IDwgZWxlbWVudHNBcnJheS5zaXplKCk7IGkrKykgeworICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBlbGVtZW50ID0gZWxlbWVudHNBcnJheVtpXTsKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmlzRW51bWVyYXRhYmxlKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCA9PSBjdXJyZW50SW5k
ZXgpIHsKICAgICAgICAgICAgICAgICBpbmZvKCktPnBvc2l0aW9uID0gaW5kZXg7Ci0gICAgICAg
ICAgICAgICAgaW5mbygpLT5jdXJyZW50ID0gbFtpXTsKKyAgICAgICAgICAgICAgICBpbmZvKCkt
PmN1cnJlbnQgPSBlbGVtZW50OwogICAgICAgICAgICAgICAgIGluZm8oKS0+ZWxlbWVudHNBcnJh
eVBvc2l0aW9uID0gaTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbFtpXTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY3VycmVu
dEluZGV4Kys7CkBAIC0xMDgsOCArMTA5LDggQEAgRWxlbWVudCogSFRNTEZvcm1Db2xsZWN0aW9u
OjpnZXROYW1lZEZvcgogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IHN0YXRpY19jYXN0PEhU
TUxGb3JtRWxlbWVudCo+KGJhc2UoKSk7CiAKICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9
IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5mb3JtRWxlbWVudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZSA9IGZvcm0t
PmZvcm1FbGVtZW50c1tpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+bV9h
c3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogZSA9IGZvcm0tPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwogICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gKGF0dHJOYW1lID09IGlkQXR0cikgPyBl
LT5pZEF0dHJpYnV0ZU5hbWUoKSA6IGF0dHJOYW1lOwogICAgICAgICBpZiAoZS0+aXNFbnVtZXJh
dGFibGUoKSAmJiBlLT5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgPT0gbmFtZSkgewogICAg
ICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRzID0gdHJ1ZTsKQEAgLTEyMCw4ICsxMjEsOCBAQCBF
bGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rpb246OmdldE5hbWVkRm9yCiAgICAgfQogCiAgICAgaWYg
KCFmb3VuZElucHV0RWxlbWVudHMpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZvcm0tPmltZ0VsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBIVE1MSW1hZ2VF
bGVtZW50KiBlID0gZm9ybS0+aW1nRWxlbWVudHNbaV07CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmb3JtLT5tX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIEhUTUxJbWFnZUVsZW1lbnQqIGUgPSBmb3JtLT5tX2ltYWdlRWxlbWVudHNbaV07CiAgICAg
ICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gKGF0dHJOYW1lID09
IGlkQXR0cikgPyBlLT5pZEF0dHJpYnV0ZU5hbWUoKSA6IGF0dHJOYW1lOwogICAgICAgICAgICAg
aWYgKGUtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PSBuYW1lKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCkBAIC0xOTAsOCArMTkxLDggQEAgdm9pZCBIVE1M
Rm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBm
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgpKTsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmLT5mb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogZSA9IGYtPmZvcm1FbGVtZW50c1tpXTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+bV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZSA9IGYtPm1fYXNzb2NpYXRlZEVs
ZW1lbnRzW2ldOwogICAgICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSkgewogICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoZS0+aWRB
dHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0
clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CkBAIC0yMTgsOCArMjE5LDggQEAgdm9p
ZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmltZ0VsZW1lbnRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGUgPSBmLT5pbWdFbGVtZW50c1tpXTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+bV9pbWFnZUVsZW1lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGUgPSBmLT5tX2ltYWdlRWxlbWVudHNbaV07
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRl
KGUtPmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
QXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRy
VmFsLmlzRW1wdHkoKSAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5p
bXBsKCkpKSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlz
aW9uIDYwMzc0KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM2LDI2ICszNiwxNCBAQCBjbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOwogCiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiwgQ29u
c3RydWN0aW9uVHlwZSA9IENyZWF0ZUhUTUxFbGVtZW50WmVyb1JlZkNvdW50KTsKICAgICB2aXJ0
dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsg
fQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQotCiAg
ICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtOyB9CiAgICAg
VmFsaWRpdHlTdGF0ZSogdmFsaWRpdHkoKTsKIAogICAgIGJvb2wgZm9ybU5vVmFsaWRhdGUoKSBj
b25zdDsKICAgICB2b2lkIHNldEZvcm1Ob1ZhbGlkYXRlKGJvb2wpOwogCi0gICAgdmlydHVhbCBi
b29sIGlzVGV4dEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAhZGlzYWJsZWQo
KTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSop
OwotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJ
bnRvVHJlZShib29sIGRlZXApOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUoYm9v
bCBkZWVwKTsKLQogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHt9CiAKICAgICB2aXJ0dWFsIGJv
b2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVNYXRjaGVzUmVuZGVyZXI7IH0KQEAgLTY2LDEzICs1NCw5IEBAIHB1YmxpYzoKICAgICBib29s
IGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQogICAgIHZvaWQgc2V0RGlz
YWJsZWQoYm9vbCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBp
c0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFk
T25seUZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQogICAgIHZvaWQg
c2V0UmVhZE9ubHkoYm9vbCk7CiAKICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEg
Y29udHJvbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZApAQCAtODIsMTcgKzY2LDExIEBA
IHB1YmxpYzoKICAgICBib29sIHJlcXVpcmVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXF1aXJl
ZChib29sKTsKIAotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7Ci0K
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0
ID0gMDsKLQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZv
cm1Db250cm9sVHlwZSgpOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gZm9ybUNvbnRyb2xOYW1lKCk7IH0KIAogICAgIHZvaWQgc2V0TmFtZShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0
dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuVHJpZ2dl
ckltcGxpY2l0U3VibWlzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAgLTEwNSw4
ICs4Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0ZWRTdWJtaXQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmF0ZWRTdWJt
aXQoYm9vbCkgeyB9CiAKLSAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7Ci0KICAg
ICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZhbGlkYXRp
b25NZXNzYWdlKCk7CiAgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CkBAIC0x
MTksMTkgKzk1LDQ3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9ybURlc3Ryb3llZCgpIHsgbV9m
b3JtID0gMDsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOwotCiAgICAgYm9vbCBpc0xhYmVsYWJs
ZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGxhYmVscygpOwogICAgIAorICAg
IGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CisKIHByb3RlY3Rl
ZDoKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiwgQ29uc3RydWN0aW9uVHlwZSA9IENyZWF0
ZUhUTUxFbGVtZW50WmVyb1JlZkNvdW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisgICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXli
b2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlz
TW91c2VGb2N1c2FibGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShT
dHlsZUNoYW5nZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CisKICAgICB2b2lkIHJlbW92ZUZy
b21Gb3JtKCk7CiAgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhbnkgdGltZSB0aGUgcmVzdWx0
IG9mIHdpbGxWYWxpZGF0ZSgpIGhhcyBjaGFuZ2VkLgogICAgIHZvaWQgc2V0TmVlZHNXaWxsVmFs
aWRhdGVDaGVjaygpOwogICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25z
dDsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gIWRpc2Fi
bGVkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seUZvcm1Db250cm9sKCkgY29uc3Qg
eyByZXR1cm4gcmVhZE9ubHkoKTsgfQorCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKKwogICAgIHZp
cnR1YWwgSFRNTEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
VmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsKQEAgLTE1NCwyNSArMTU4LDI1IEBAIHByaXZhdGU6
CiAKIGNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgOiBwdWJsaWMgSFRNTEZv
cm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3Jt
RWxlbWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUo
KTsKIAorcHJvdGVjdGVkOgorICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsK
KwogICAgIHZpcnR1YWwgYm9vbCBhdXRvQ29tcGxldGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogCi1wcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lk
IGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRT
YXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiB9OwogCiBjbGFzcyBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIHsKIHB1Ymxp
YzoKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKIAogICAgIFN0cmluZyBzdHJp
cHBlZFBsYWNlaG9sZGVyKCkgY29uc3Q7CiAKQEAgLTE4NSwxNCArMTg5LDIyIEBAIHB1YmxpYzoK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgYm9vbCBpc1BsYWNlaG9sZGVyRW1wdHkoKSBjb25zdDsKKyAgICBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1l
bnQqKTsKKwogICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdDsKICAg
ICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29sKTsKLSAgICB2aXJ0dWFsIGlu
dCBjYWNoZWRTZWxlY3Rpb25TdGFydCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBjYWNo
ZWRTZWxlY3Rpb25FbmQoKSBjb25zdCA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAKIHByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRm9jdXNFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgp
OworCisgICAgYm9vbCBpc1BsYWNlaG9sZGVyRW1wdHkoKSBjb25zdDsKKworICAgIHZpcnR1YWwg
aW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGNh
Y2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0ID0gMDsKKwogICAgIC8vIEEgc3ViY2xhc3Mgc2hvdWxk
IHJldHVybiB0cnVlIGlmIHBsYWNlaG9sZGVyIHByb2Nlc3NpbmcgaXMgbmVlZGVkLgogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c1BsYWNlaG9sZGVyKCkgY29uc3QgPSAwOwogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB1c2VyLWVkaXRhYmxlIHZhbHVlIGlzIGVtcHR5LiAgVGhpcyBpcyB1c2VkIHRv
IGNoZWNrIHBsYWNlaG9sZGVyIHZpc2liaWxpdHkuCkBAIC0yMDQsNiArMjE2LDYgQEAgcHJpdmF0
ZToKICAgICBSZW5kZXJUZXh0Q29udHJvbCogdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQo
KTsKIH07CiAKLX0gLy9uYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDYwMzc0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEwICs3Miw4IEBAIHN0
YXRpYyBpbnQ2NF90IGdlbmVyYXRlRm9ybURhdGFJZGVudGlmaWUKICAgICByZXR1cm4gKytuZXh0
SWRlbnRpZmllcjsKIH0KIAotSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9ybUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvYykKLSAgICAsIG1fZWxlbWVudEFsaWFzZXMoMCkKLSAgICAsIGNvbGxlY3Rp
b25JbmZvKDApCitIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIG1fYXV0b2NvbXBsZXRlKHRydWUpCiAgICAgLCBtX2lu
c3VibWl0KGZhbHNlKQogICAgICwgbV9kb2luZ3N1Ym1pdChmYWxzZSkKQEAgLTg2LDE4ICs4NCwy
NSBAQCBIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChjb25zdCBRCiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUoZm9ybVRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4g
SFRNTEZvcm1FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVy
biBuZXcgSFRNTEZvcm1FbGVtZW50KGZvcm1UYWcsIGRvY3VtZW50KTsKK30KKworUGFzc1JlZlB0
cjxIVE1MRm9ybUVsZW1lbnQ+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhU
TUxGb3JtRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7Cit9CisKIEhUTUxGb3JtRWxlbWVudDo6
fkhUTUxGb3JtRWxlbWVudCgpCiB7CiAgICAgaWYgKCFtX2F1dG9jb21wbGV0ZSkKICAgICAgICAg
ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlz
KTsKIAotICAgIGRlbGV0ZSBtX2VsZW1lbnRBbGlhc2VzOwotICAgIGRlbGV0ZSBjb2xsZWN0aW9u
SW5mbzsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGZvcm1FbGVtZW50c1tpXS0+Zm9ybURlc3Ryb3llZCgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbWdFbGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAg
aW1nRWxlbWVudHNbaV0tPm1fZm9ybSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICBtX2Fzc29jaWF0ZWRF
bGVtZW50c1tpXS0+Zm9ybURlc3Ryb3llZCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1faW1hZ2VFbGVtZW50c1tp
XS0+bV9mb3JtID0gMDsKIH0KIAogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1Xb3VsZEhhdmVT
ZWN1cmVTdWJtaXNzaW9uKGNvbnN0IFN0cmluZyYgdXJsKQpAQCAtMTA1LDExICsxMTAsNiBAQCBi
b29sIEhUTUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyCiAgICAgcmV0dXJuIGRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHVybCkucHJvdG9jb2xJcygiaHR0cHMiKTsKIH0KIAotdm9pZCBI
VE1MRm9ybUVsZW1lbnQ6OmF0dGFjaCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwot
fQotCiBib29sIEhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSog
c3R5bGUpCiB7CiAgICAgaWYgKCFpc0RlbW90ZWQoKSkKQEAgLTE2MywxMSArMTYzLDEwIEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50OjpoYW5kbGVMb2NhbEV2ZW50cygKIAogdW5zaWduZWQgSFRNTEZv
cm1FbGVtZW50OjpsZW5ndGgoKSBjb25zdAogewotICAgIGludCBsZW4gPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGlm
IChmb3JtRWxlbWVudHNbaV0tPmlzRW51bWVyYXRhYmxlKCkpCisgICAgdW5zaWduZWQgbGVuID0g
MDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6
ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNFbnVtZXJh
dGFibGUoKSkKICAgICAgICAgICAgICsrbGVuOwotCiAgICAgcmV0dXJuIGxlbjsKIH0KIApAQCAt
MTc5LDggKzE3OCw4IEBAIE5vZGUqIEhUTUxGb3JtRWxlbWVudDo6aXRlbSh1bnNpZ25lZCBpbmQK
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCwgYm9v
bCBmcm9tSW1wbGljaXRTdWJtaXNzaW9uVHJpZ2dlcikKIHsKICAgICBpbnQgc3VibWlzc2lvblRy
aWdnZXJDb3VudCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxl
bWVudCA9IGZvcm1FbGVtZW50c1tpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
c3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogZm9ybUVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKICAgICAgICAg
aWYgKGZvcm1FbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSkgewogICAgICAgICAg
ICAgaWYgKGZvcm1FbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgZm9ybUVs
ZW1lbnQtPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQpOwpAQCAtMjA0LDggKzIwMyw4IEBA
IFRleHRFbmNvZGluZyBIVE1MRm9ybUVsZW1lbnQ6OmRhdGFFbmNvZGkKIFBhc3NSZWZQdHI8Rm9y
bURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEoKQogewogICAgIFJlZlB0cjxE
T01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBET01Gb3JtRGF0YTo6Y3JlYXRlKGRhdGFFbmNvZGlu
ZygpLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ldOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07
CiAgICAgICAgIGlmICghY29udHJvbC0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIGNvbnRyb2wt
PmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBh
cnRGb3JtKCkpOwogICAgIH0KQEAgLTM1NCw4ICszNTMsOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgCiAgICAgVmVjdG9yPHBhaXI8U3RyaW5nLCBTdHJp
bmc+ID4gZm9ybVZhbHVlczsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxl
bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29u
dHJvbCA9IGZvcm1FbGVtZW50c1tpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
c3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogY29udHJvbCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwogICAgICAgICBpZiAo
Y29udHJvbC0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkgewogICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY29udHJvbCk7
CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpIHsKQEAgLTQyNSw4ICs0MjQs
OCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQoKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgZm9ybUVsZW1lbnRzW2ldLT5yZXNldCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9h
c3NvY2lhdGVkRWxlbWVudHNbaV0tPnJlc2V0KCk7CiAKICAgICBtX2lucmVzZXQgPSBmYWxzZTsK
IH0KQEAgLTQ5NiwyMCArNDk1LDIwIEBAIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVs
ZW1lbnRJbmQKICAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIGZvcm1FbGVtZW50cy5zaXplKCk7CisgICAgcmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRz
LnNpemUoKTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQo
SFRNTEZvcm1Db250cm9sRWxlbWVudCogZSkKIHsKICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFk
aW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKGUpOwogICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5h
ZGRCdXR0b24oZSk7Ci0gICAgZm9ybUVsZW1lbnRzLmluc2VydChmb3JtRWxlbWVudEluZGV4KGUp
LCBlKTsKKyAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVsZW1lbnRJbmRleChl
KSwgZSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxlbWVudChIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBlKQogewogICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1v
dmVCdXR0b24oZSk7Ci0gICAgcmVtb3ZlRnJvbVZlY3Rvcihmb3JtRWxlbWVudHMsIGUpOworICAg
IHJlbW92ZUZyb21WZWN0b3IobV9hc3NvY2lhdGVkRWxlbWVudHMsIGUpOwogfQogCiBib29sIEhU
TUxGb3JtRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKSBjb25zdApAQCAt
NTE5LDE0ICs1MTgsMTQgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0
dAogCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVs
ZW1lbnQqIGUpCiB7Ci0gICAgQVNTRVJUKGltZ0VsZW1lbnRzLmZpbmQoZSkgPT0gbm90Rm91bmQp
OwotICAgIGltZ0VsZW1lbnRzLmFwcGVuZChlKTsKKyAgICBBU1NFUlQobV9pbWFnZUVsZW1lbnRz
LmZpbmQoZSkgPT0gbm90Rm91bmQpOworICAgIG1faW1hZ2VFbGVtZW50cy5hcHBlbmQoZSk7CiB9
CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1l
bnQqIGUpCiB7Ci0gICAgQVNTRVJUKGltZ0VsZW1lbnRzLmZpbmQoZSkgIT0gbm90Rm91bmQpOwot
ICAgIHJlbW92ZUZyb21WZWN0b3IoaW1nRWxlbWVudHMsIGUpOworICAgIEFTU0VSVChtX2ltYWdl
RWxlbWVudHMuZmluZChlKSAhPSBub3RGb3VuZCk7CisgICAgcmVtb3ZlRnJvbVZlY3RvcihtX2lt
YWdlRWxlbWVudHMsIGUpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MRm9y
bUVsZW1lbnQ6OmVsZW1lbnRzKCkKQEAgLTU5Niw4ICs1OTUsOCBAQCB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6c2V0VGFyZ2V0KGNvbnN0IFN0CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxG
b3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ldOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgeworICAgICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gbV9hc3NvY2lhdGVkRWxlbWVudHNb
aV07CiAgICAgICAgIGlmIChjb250cm9sLT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSkKICAg
ICAgICAgICAgIHJldHVybiBjb250cm9sOwogICAgIH0KQEAgLTYxNSwxMiArNjE0LDEyIEBAIGJv
b2wgSFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKIHZvaWQgSFRNTEZvcm1FbGVtZW50
Ojpjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4gPiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQogewogICAgIFJlZlB0
cjxIVE1MRm9ybUVsZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsKLSAgICAvLyBDb3B5IGZvcm1FbGVt
ZW50cyBiZWNhdXNlIGV2ZW50IGhhbmRsZXJzIGNhbGxlZCBmcm9tCi0gICAgLy8gSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpIG1pZ2h0IGNoYW5nZSBmb3JtRWxlbWVudHMu
CisgICAgLy8gQ29weSBtX2Fzc29jaWF0ZWRFbGVtZW50cyBiZWNhdXNlIGV2ZW50IGhhbmRsZXJz
IGNhbGxlZCBmcm9tCisgICAgLy8gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0
eSgpIG1pZ2h0IGNoYW5nZSBtX2Fzc29jaWF0ZWRFbGVtZW50cy4KICAgICBWZWN0b3I8UmVmUHRy
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gZWxlbWVudHM7Ci0gICAgZWxlbWVudHMucmVzZXJ2
ZUNhcGFjaXR5KGZvcm1FbGVtZW50cy5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGVsZW1lbnRzLmFwcGVuZChm
b3JtRWxlbWVudHNbaV0pOworICAgIGVsZW1lbnRzLnJlc2VydmVDYXBhY2l0eShtX2Fzc29jaWF0
ZWRFbGVtZW50cy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29j
aWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgZWxlbWVudHMuYXBwZW5kKG1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVu
dHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLT5mb3JtKCkgPT0gdGhp
cykKICAgICAgICAgICAgIGVsZW1lbnRzW2ldLT5jaGVja1ZhbGlkaXR5KCZ1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMpOwpAQCAtNjM5LDcgKzYzOCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojph
ZGRFbGVtZW50QWxpYXMoSFQKICAgICBpZiAoYWxpYXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKCFtX2VsZW1lbnRBbGlhc2VzKQotICAgICAgICBtX2VsZW1lbnRBbGlhc2Vz
ID0gbmV3IEFsaWFzTWFwOworICAgICAgICBtX2VsZW1lbnRBbGlhc2VzLnNldChuZXcgQWxpYXNN
YXApOwogICAgIG1fZWxlbWVudEFsaWFzZXMtPnNldChhbGlhcy5pbXBsKCksIGVsZW1lbnQpOwog
fQogCkBAIC02NzAsOCArNjY5LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRvY3VtZW50RGlk
QmVjb21lQQogewogICAgIEFTU0VSVCghbV9hdXRvY29tcGxldGUpOwogICAgIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZv
cm1FbGVtZW50c1tpXS0+cmVzZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
c3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXNzb2NpYXRlZEVsZW1l
bnRzW2ldLT5yZXNldCgpOwogfQogCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6d2lsbE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gNjAz
NzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCwyMiArNDQsMTMgQEAgc3RydWN0IENv
bGxlY3Rpb25DYWNoZTsKIAogY2xhc3MgSFRNTEZvcm1FbGVtZW50IDogcHVibGljIEhUTUxFbGVt
ZW50IHsgCiBwdWJsaWM6Ci0gICAgSFRNTEZvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gY3Jl
YXRlKERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+SFRN
TEZvcm1FbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
TG9jYWxFdmVudHMoRXZlbnQqKTsKLSAgICAgCiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gZWxlbWVudHMoKTsKICAgICB2b2lkIGdldE5hbWVkRWxlbWVudHMoY29uc3QgQXRvbWljU3Ry
aW5nJiwgVmVjdG9yPFJlZlB0cjxOb2RlPiA+Jik7Ci0gICAgCisKICAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdDsKICAgICBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKIApAQCAtNzEsOCAr
NjIsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXV0b2NvbXBsZXRlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7Ci0KKyAgICAvLyBGSVhNRTogU2hvdWxkIHJlbmFtZSB0aGVzZSB0d28g
ZnVuY3Rpb25zIHRvIHNheSAiZm9ybSBjb250cm9sIgorICAgIC8vIG9yICJmb3JtLWFzc29jaWF0
ZWQgZWxlbWVudCIgaW5zdGVhZCBvZiAiZm9ybSBlbGVtZW50Ii4KICAgICB2b2lkIHJlZ2lzdGVy
Rm9ybUVsZW1lbnQoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlRm9y
bUVsZW1lbnQoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOwogICAgIHZvaWQgcmVnaXN0ZXJJbWdF
bGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKQEAgLTg5LDggKzgwLDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0RGVtb3RlZChib29sIGRlbW90ZWQpIHsgbV9kZW1vdGVkID0gZGVtb3RlZDsgfQog
ICAgIGJvb2wgaXNEZW1vdGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZW1vdGVkOyB9CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0gICAgCiAgICAg
dm9pZCBzdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiwgYm9vbCBmcm9tSW1wbGljaXRTdWJtaXNzaW9u
VHJpZ2dlcik7CiAgICAgYm9vbCBmb3JtV291bGRIYXZlU2VjdXJlU3VibWlzc2lvbihjb25zdCBT
dHJpbmcmIHVybCk7CiAKQEAgLTExOSwxOCArMTA4LDMxIEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IGVsZW1lbnRGb3JBbGlhcyhjb25zdCBBdG9taWNT
dHJpbmcmKTsKICAgICB2b2lkIGFkZEVsZW1lbnRBbGlhcyhIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiwgY29uc3QgQXRvbWljU3RyaW5nJiBhbGlhcyk7CiAKLSAgICAvLyBGSVhNRTogQ2hhbmdlIHRo
aXMgdG8gYmUgcHJpdmF0ZSBhZnRlciBnZXR0aW5nIHJpZCBvZiBhbGwgdGhlIGNsaWVudHMuCi0g
ICAgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiBmb3JtRWxlbWVudHM7Ci0KICAgICBD
aGVja2VkUmFkaW9CdXR0b25zJiBjaGVja2VkUmFkaW9CdXR0b25zKCkgeyByZXR1cm4gbV9jaGVj
a2VkUmFkaW9CdXR0b25zOyB9Ci0gICAgCisKKyAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Fzc29j
aWF0ZWRFbGVtZW50czsgfQorCitwcml2YXRlOgorICAgIEhUTUxGb3JtRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Cisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KCk7CisgCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50
Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CisK
ICAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKTsKIAotcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAKLXByaXZhdGU6CiAgICAg
dm9pZCBzdWJtaXQoRXZlbnQqLCBib29sIGFjdGl2YXRlU3VibWl0QnV0dG9uLCBib29sIGxvY2tI
aXN0b3J5LCBGb3JtU3VibWlzc2lvblRyaWdnZXIpOwogCiAgICAgYm9vbCBpc01haWx0b0Zvcm0o
KSBjb25zdDsKQEAgLTE0OCwxMiArMTUwLDE0IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiwgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+ID4gQWxpYXNNYXA7CiAKICAgICBGb3JtRGF0YUJ1aWxkZXIgbV9mb3JtRGF0YUJ1aWxkZXI7
Ci0gICAgQWxpYXNNYXAqIG1fZWxlbWVudEFsaWFzZXM7Ci0gICAgQ29sbGVjdGlvbkNhY2hlKiBj
b2xsZWN0aW9uSW5mbzsKKyAgICBPd25QdHI8QWxpYXNNYXA+IG1fZWxlbWVudEFsaWFzZXM7Cisg
ICAgT3duUHRyPENvbGxlY3Rpb25DYWNoZT4gbV9jb2xsZWN0aW9uQ2FjaGU7CiAKICAgICBDaGVj
a2VkUmFkaW9CdXR0b25zIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsKICAgICAKLSAgICBWZWN0b3I8
SFRNTEltYWdlRWxlbWVudCo+IGltZ0VsZW1lbnRzOworICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kj4gbV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEhUTUxJbWFnZUVs
ZW1lbnQqPiBtX2ltYWdlRWxlbWVudHM7CisKICAgICBTdHJpbmcgbV91cmw7CiAgICAgU3RyaW5n
IG1fdGFyZ2V0OwogICAgIGJvb2wgbV9hdXRvY29tcGxldGUgOiAxOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw5IEBACi0v
KioKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiAoaGF1c21hbm5Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MCwxMCArNDAs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LUhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUs
IGRvYykKLSAgICAsIG1fcm93cygwKQotICAgICwgbV9jb2xzKDApCitIVE1MRnJhbWVTZXRFbGVt
ZW50OjpIVE1MRnJhbWVTZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQog
ICAgICwgbV90b3RhbFJvd3MoMSkKICAgICAsIG1fdG90YWxDb2xzKDEpCiAgICAgLCBtX2JvcmRl
cig2KQpAQCAtNTYsMTIgKzU0LDkgQEAgSFRNTEZyYW1lU2V0RWxlbWVudDo6SFRNTEZyYW1lU2V0
RWxlbWVudAogICAgIEFTU0VSVChoYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSk7CiB9CiAKLUhUTUxG
cmFtZVNldEVsZW1lbnQ6On5IVE1MRnJhbWVTZXRFbGVtZW50KCkKK1Bhc3NSZWZQdHI8SFRNTEZy
YW1lU2V0RWxlbWVudD4gSFRNTEZyYW1lU2V0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICBpZiAobV9yb3dzKQot
ICAgICAgICBkZWxldGUgW10gbV9yb3dzOwotICAgIGlmIChtX2NvbHMpCi0gICAgICAgIGRlbGV0
ZSBbXSBtX2NvbHM7CisgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KTsKIH0KIAogYm9vbCBIVE1MRnJhbWVTZXRFbGVtZW50OjpjaGVja0RURChjb25z
dCBOb2RlKiBuZXdDaGlsZCkKQEAgLTg3LDE0ICs4MiwxMiBAQCB2b2lkIEhUTUxGcmFtZVNldEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSByb3dzQXR0
cikgewogICAgICAgICBpZiAoIWF0dHItPmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9y
b3dzKSBkZWxldGUgW10gbV9yb3dzOwotICAgICAgICAgICAgbV9yb3dzID0gbmV3TGVuZ3RoQXJy
YXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV90b3RhbFJvd3MpOworICAgICAgICAgICAgbV9y
b3dMZW5ndGhzLnNldChuZXdMZW5ndGhBcnJheShhdHRyLT52YWx1ZSgpLnN0cmluZygpLCBtX3Rv
dGFsUm93cykpOwogICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29sc0F0dHIpIHsKICAgICAgICAgaWYg
KCFhdHRyLT5pc051bGwoKSkgewotICAgICAgICAgICAgZGVsZXRlIFtdIG1fY29sczsKLSAgICAg
ICAgICAgIG1fY29scyA9IG5ld0xlbmd0aEFycmF5KGF0dHItPnZhbHVlKCkuc3RyaW5nKCksIG1f
dG90YWxDb2xzKTsKKyAgICAgICAgICAgIG1fY29sTGVuZ3Rocy5zZXQobmV3TGVuZ3RoQXJyYXko
YXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV90b3RhbENvbHMpKTsKICAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGZyYW1lYm9yZGVyQXR0cikgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5o
CShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVz
bWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNCwyOSArMjQsMTMgQEAKICNpZm5kZWYgSFRNTEZyYW1lU2V0RWxl
bWVudF9oCiAjZGVmaW5lIEhUTUxGcmFtZVNldEVsZW1lbnRfaAogCi0jaW5jbHVkZSAiQ29sb3Iu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEZyYW1lU2V0RWxlbWVudCA6IHB1YmxpYyBI
VE1MRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICB+SFRNTEZyYW1lU2V0RWxlbWVudCgpOwotCi0g
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDEwOyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUq
IG5ld0NoaWxkKTsKLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEZyYW1l
U2V0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAg
ICAgYm9vbCBoYXNGcmFtZUJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIGZyYW1lYm9yZGVyOyB9CiAg
ICAgYm9vbCBub1Jlc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG5vcmVzaXplOyB9CkBAIC01NywxNiAr
NDEsMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNCb3JkZXJDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fYm9yZGVyQ29sb3JTZXQ7IH0KIAotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShT
dHlsZUNoYW5nZSk7Ci0gICAgCiAgICAgU3RyaW5nIGNvbHMoKSBjb25zdDsKICAgICB2b2lkIHNl
dENvbHMoY29uc3QgU3RyaW5nJik7CiAKICAgICBTdHJpbmcgcm93cygpIGNvbnN0OwogICAgIHZv
aWQgc2V0Um93cyhjb25zdCBTdHJpbmcmKTsKIAotICAgIGNvbnN0IExlbmd0aCogcm93TGVuZ3Ro
cygpIGNvbnN0IHsgcmV0dXJuIG1fcm93czsgfQotICAgIGNvbnN0IExlbmd0aCogY29sTGVuZ3Ro
cygpIGNvbnN0IHsgcmV0dXJuIG1fY29sczsgfQorICAgIGNvbnN0IExlbmd0aCogcm93TGVuZ3Ro
cygpIGNvbnN0IHsgcmV0dXJuIG1fcm93TGVuZ3Rocy5nZXQoKTsgfQorICAgIGNvbnN0IExlbmd0
aCogY29sTGVuZ3RocygpIGNvbnN0IHsgcmV0dXJuIG1fY29sTGVuZ3Rocy5nZXQoKTsgfQogCiAg
ICAgLy8gRGVjbGFyZWQgdmlydHVhbCBpbiBFbGVtZW50CiAgICAgREVGSU5FX1dJTkRPV19BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoYmx1cik7CkBAIC04OCw4ICs3MCwyNSBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogcHJpdmF0ZToKLSAgICBMZW5ndGgqIG1fcm93czsKLSAgICBMZW5ndGgqIG1fY29s
czsKKyAgICBIVE1MRnJhbWVTZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGUqIG5ld0NoaWxkKTsKKworICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisgICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAgIAorICAgIHZpcnR1YWwg
dm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
YWxjU3R5bGUoU3R5bGVDaGFuZ2UpOworICAgIAorICAgIE93bkFycmF5UHRyPExlbmd0aD4gbV9y
b3dMZW5ndGhzOworICAgIE93bkFycmF5UHRyPExlbmd0aD4gbV9jb2xMZW5ndGhzOwogCiAgICAg
aW50IG1fdG90YWxSb3dzOwogICAgIGludCBtX3RvdGFsQ29sczsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MSFJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEhSRWxl
bWVudC5jcHAJKHJldmlzaW9uIDYwMzc0KQorKysgV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAotLyoqCisvKgogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDE0
ICszMiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKLUhUTUxIUkVsZW1lbnQ6OkhUTUxIUkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykK
K0hUTUxIUkVsZW1lbnQ6OkhUTUxIUkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoaHJUYWcpKTsKIH0KIAotSFRNTEhSRWxlbWVu
dDo6fkhUTUxIUkVsZW1lbnQoKQorUGFzc1JlZlB0cjxIVE1MSFJFbGVtZW50PiBIVE1MSFJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBuZXcgSFRNTEhS
RWxlbWVudChoclRhZywgZG9jdW1lbnQpOworfQorCitQYXNzUmVmUHRyPEhUTUxIUkVsZW1lbnQ+
IEhUTUxIUkVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MSFJFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KTsKIH0KIAogYm9vbCBIVE1MSFJFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25z
dApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEhSRWxlbWVudC5oCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MSFJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yOCwxNSArMjksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhU
TUxIUkVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxIUkVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxIUkVsZW1l
bnQoKTsKLSAgICAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MSFJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MSFJFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAg
ICAgCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwotCiAgICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKIApAQCAtNDgsNiArNDMsMTUgQEAgcHVibGlj
OgogCiAgICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRXaWR0aChjb25zdCBT
dHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBIVE1MSFJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOworICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIAorICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MSGVhZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
SGVhZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSGVh
ZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsOSBAQAotLyoqCisvKgogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gKGhhdXNtYW5uQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDYgKzIwLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SFRNTEhlYWRFbGVtZW50LmgiCiAKQEAgLTMwLDE0ICszMSwyMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxIZWFkRWxlbWVudDo6SFRN
TEhlYWRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBEb2N1bWVudCogZG9jKQot
ICAgIDogSFRNTEVsZW1lbnQocU5hbWUsIGRvYykKK0hUTUxIZWFkRWxlbWVudDo6SFRNTEhlYWRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkK
KyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKGhlYWRUYWcpKTsKIH0KIAotSFRNTEhlYWRFbGVtZW50Ojp+SFRNTEhlYWRFbGVtZW50
KCkKK1Bhc3NSZWZQdHI8SFRNTEhlYWRFbGVtZW50PiBIVE1MSGVhZEVsZW1lbnQ6OmNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MSGVhZEVsZW1lbnQoaGVh
ZFRhZywgZG9jdW1lbnQpOworfQorCitQYXNzUmVmUHRyPEhUTUxIZWFkRWxlbWVudD4gSFRNTEhl
YWRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvY3VtZW50KQogeworICAgIHJldHVybiBuZXcgSFRNTEhlYWRFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KTsKIH0KIAogU3RyaW5nIEhUTUxIZWFkRWxlbWVudDo6cHJvZmlsZSgpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhlYWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxIZWFkRWxlbWVudC5oCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MSGVhZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zMCwxOCArMzAsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIVE1MSGVhZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxIZWFkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SFRNTEhlYWRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CisKKyAgICBTdHJpbmcgcHJvZmlsZSgpIGNvbnN0OworICAgIHZv
aWQgc2V0UHJvZmlsZShjb25zdCBTdHJpbmcmKTsKKworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0KKworcHJpdmF0ZToKICAgICBIVE1MSGVhZEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxIZWFkRWxlbWVu
dCgpOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9CiAgICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dl
ZChOb2RlKiBuZXdDaGlsZCk7CiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUq
IG5ld0NoaWxkKTsKLQotICAgIFN0cmluZyBwcm9maWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQ
cm9maWxlKGNvbnN0IFN0cmluZyYpOwogfTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3Bh
Y2UKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhlYWRpbmdFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEhlYWRpbmdFbGVtZW50LmNwcAkocmV2aXNp
b24gNjAzNzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEhlYWRpbmdFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKLS8qKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSw2ICsxOSw3IEBACiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkhUTUxIZWFkaW5nRWxlbWVudC5oIgogCkBAIC0yOCw5ICsyOSwxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhU
TUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2Mp
CitpbmxpbmUgSFRNTEhlYWRpbmdFbGVtZW50OjpIVE1MSGVhZGluZ0VsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpCit7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEhlYWRpbmdFbGVt
ZW50PiBIVE1MSGVhZGluZ0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CisgICAgcmV0dXJuIG5ldyBIVE1MSGVhZGluZ0Vs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOwogfQogCiBib29sIEhUTUxIZWFkaW5nRWxlbWVudDo6
Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhl
YWRpbmdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxIZWFkaW5nRWxl
bWVudC5oCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSGVhZGluZ0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4
LDE0ICsyOSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxIZWFkaW5nRWxl
bWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTEhlYWRpbmdFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CisKKyAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKKyAgICB2b2lkIHNldEFsaWduKGNv
bnN0IFN0cmluZyYpOworCitwcml2YXRlOgogICAgIEhUTUxIZWFkaW5nRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CiAg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAgICAgdmly
dHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKLQotICAgIFN0cmluZyBh
bGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkocmV2
aXNpb24gNjAzNzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAKLS8qKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIFNpbW9uIEhh
dXNtYW5uIChoYXVzbWFubkBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw2ICsy
MCw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
Ki8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgog
CkBAIC0zMywxNCArMzQsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1IVE1MSHRtbEVsZW1lbnQ6OkhUTUxIdG1sRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jKQorSFRNTEh0bWxFbGVtZW50OjpIVE1MSHRtbEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoaHRtbFRhZykp
OwogfQogCi1IVE1MSHRtbEVsZW1lbnQ6On5IVE1MSHRtbEVsZW1lbnQoKQorUGFzc1JlZlB0cjxI
VE1MSHRtbEVsZW1lbnQ+IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxIdG1sRWxlbWVudChodG1sVGFnLCBkb2N1bWVudCk7
Cit9CisKK1Bhc3NSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Cisg
ICAgcmV0dXJuIG5ldyBIVE1MSHRtbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOwogfQogCiBT
dHJpbmcgSFRNTEh0bWxFbGVtZW50Ojp2ZXJzaW9uKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MSHRtbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEh0bWxF
bGVtZW50LmgJKHJldmlzaW9uIDYwMzc0KQorKysgV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24g
SGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMw
LDggKzMwLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEh0bWxFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MSHRtbEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxIdG1sRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OworCisgICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldFZlcnNpb24oY29u
c3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CiAgICAgSFRNTEh0bWxFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIH5IVE1MSHRtbEVsZW1lbnQoKTsKIAogICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxMTsgfQpAQCAtNDAsMTEgKzQ2LDggQEAgcHVibGljOgogI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3Vt
ZW50KCk7CiAjZW5kaWYKLQotICAgIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwogfTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1l
c3BhY2UKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lv
biA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsOCArNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50
KiBmb3JtKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRNTEltYWdlRWxlbWVu
dDo6SFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxFbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KQogICAgICwgbV9pbWFnZUxvYWRlcih0aGlzKQogICAgICwgaXNtYXAo
ZmFsc2UpCiAgICAgLCBtX2Zvcm0oZm9ybSkKQEAgLTUzLDYgKzUzLDE2IEBAIEhUTUxJbWFnZUVs
ZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoY29uc3QKICAgICAgICAgZm9ybS0+cmVnaXN0ZXJJbWdF
bGVtZW50KHRoaXMpOwogfQogCitQYXNzUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IEhUTUxJbWFn
ZUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBI
VE1MSW1hZ2VFbGVtZW50KGltZ1RhZywgZG9jdW1lbnQpOworfQorCitQYXNzUmVmUHRyPEhUTUxJ
bWFnZUVsZW1lbnQ+IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKK3sK
KyAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0p
OworfQorCiBIVE1MSW1hZ2VFbGVtZW50Ojp+SFRNTEltYWdlRWxlbWVudCgpCiB7CiAgICAgaWYg
KG1fZm9ybSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gNjAzNzQpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwy
MSArMzUsMTEgQEAgY2xhc3MgSFRNTEZvcm1FbGVtZW50OwogY2xhc3MgSFRNTEltYWdlRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiAgICAgZnJpZW5kIGNsYXNzIEhUTUxGb3JtRWxlbWVu
dDsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBjcmVh
dGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gY3JlYXRlRm9ySlNDb25z
dHJ1Y3RvcihEb2N1bWVudCosIGNvbnN0IGludCogb3B0aW9uYWxXaWR0aCwgY29uc3QgaW50KiBv
cHRpb25hbEhlaWdodCk7CiAKLSAgICBIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKLSAgICB+SFRNTEltYWdlRWxl
bWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9F
bnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgfkhUTUxJbWFnZUVsZW1lbnQoKTsKIAogICAgIGludCB3aWR0aChi
b29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKSBjb25zdDsKICAgICBpbnQgaGVp
Z2h0KGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzID0gZmFsc2UpIGNvbnN0OwpAQCAtNjEs
OCArNTEsNiBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgYWx0VGV4dCgpIGNvbnN0OwogCi0gICAg
dmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotCiAgICAgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBv
c2l0ZU9wZXJhdG9yOyB9CiAKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlTG9hZGVyLmltYWdlKCk7IH0KQEAgLTcyLDggKzYwLDYgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBkcmFnZ2FibGUoKSBjb25zdDsKLQogICAgIHZvaWQgc2V0SGVpZ2h0KGludCk7CiAKICAg
ICBpbnQgaHNwYWNlKCkgY29uc3Q7CkBAIC0xMDMsMTIgKzg5LDI5IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaGF2ZUZpcmVkTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUxvYWRlci5o
YXZlRmlyZWRMb2FkRXZlbnQoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNl
QXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwotCiBwcm90ZWN0ZWQ6Cisg
ICAgSFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1M
Rm9ybUVsZW1lbnQqID0gMCk7CisKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Cisg
ICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVu
ZGVyU3R5bGUqKTsKKworICAgIHZpcnR1YWwgYm9vbCBjYW5TdGFydFNlbGVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgZHJhZ2dhYmxlKCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JikgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw4IEBAIHN0YXRpYyBjb25zdCBk
b3VibGUgd2Vla0RlZmF1bHRTdGVwQmFzZSAKIHN0YXRpYyBjb25zdCBkb3VibGUgbXNlY1Blck1p
bnV0ZSA9IDYwICogMTAwMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgbXNlY1BlclNlY29uZCA9IDEw
MDA7CiAKLUhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQotICAgIDog
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQorSFRNTElucHV0RWxl
bWVudDo6SFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQogICAgICwgbV94UG9zKDAp
CiAgICAgLCBtX3lQb3MoMCkKICAgICAsIG1fbWF4UmVzdWx0cygtMSkKQEAgLTEyMyw2ICsxMjMs
MTEgQEAgSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChjb25zdAogICAgIEFTU0VS
VChoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1lKGlzaW5kZXhUYWcpKTsKIH0KIAor
UGFzc1JlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBIVE1MSW5wdXRFbGVtZW50OjpjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVs
ZW1lbnQqIGZvcm0pCit7CisgICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50LCBmb3JtKTsKK30KKwogSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1l
bnQoKQogewogICAgIGlmIChuZWVkc0FjdGl2YXRpb25DYWxsYmFjaygpKQpAQCAtMjM1Miw3ICsy
MzU3LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogCiBQYXNz
UmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gSFRNTElucHV0RWxlbWVudDo6Y3JlYXRlVGVtcG9yYXJ5
Rm9ybUZvcklzSW5kZXgoKQogewotICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0gPSBu
ZXcgSFRNTEZvcm1FbGVtZW50KGZvcm1UYWcsIGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxIVE1M
Rm9ybUVsZW1lbnQ+IGZvcm0gPSBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsK
ICAgICBmb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwogICAgIGZvcm0tPnNldE1ldGhv
ZCgiR0VUIik7CiAgICAgaWYgKCFkb2N1bWVudCgpLT5iYXNlVVJMKCkuaXNFbXB0eSgpKSB7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDYwMzc0KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY5LDQwICs2
OSwxMSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgY29uc3QgaW50IG51bWJlck9mVHlw
ZXMgPSBXRUVLICsgMTsKIAotICAgIGVudW0gQXV0b0NvbXBsZXRlU2V0dGluZyB7Ci0gICAgICAg
IFVuaW5pdGlhbGl6ZWQsCi0gICAgICAgIE9uLAotICAgICAgICBPZmYKLSAgICB9OwotCi0gICAg
SFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9y
bUVsZW1lbnQqID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCop
OwogICAgIHZpcnR1YWwgfkhUTUxJbnB1dEVsZW1lbnQoKTsKIAotICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJp
ZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsg
fQotCi0gICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaW5wdXRUeXBlKCkg
IT0gSU1BR0U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wg
cmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJvdXRUb1VubG9h
ZCgpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0Owot
IAogICAgIGJvb2wgYXV0b0NvbXBsZXRlKCkgY29uc3Q7CiAKLSAgICAvLyBpc0NoZWNrZWQgaXMg
dXNlZCBieSB0aGUgcmVuZGVyaW5nIHRyZWUvQ1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2VkIGJ5
IEpTIHRvIGRldGVybWluZSBjaGVja2VkIHN0YXRlCi0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tl
ZCgpIGNvbnN0IHsgcmV0dXJuIGNoZWNrZWQoKSAmJiAoaW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1gg
fHwgaW5wdXRUeXBlKCkgPT0gUkFESU8pOyB9Ci0gICAgdmlydHVhbCBib29sIGlzSW5kZXRlcm1p
bmF0ZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV0ZXJtaW5hdGUoKTsgfQotICAgIAotICAgIGJvb2wg
cmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsgfQotCi0g
ICAgdmlydHVhbCBib29sIGlzVGV4dEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0
RmllbGQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIHZhbHVlTWlzc2luZygpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYXR0ZXJuTWlzbWF0Y2goKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
dG9vTG9uZygpIGNvbnN0OwogICAgIC8vIEZvciBWYWxpZGl0eVN0YXRlCiAgICAgYm9vbCByYW5n
ZVVuZGVyZmxvdygpIGNvbnN0OwogICAgIGJvb2wgcmFuZ2VPdmVyZmxvdygpIGNvbnN0OwpAQCAt
MTI5LDI0ICsxMDAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlID09IFNFQVJDSDsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0lucHV0VHlwZUhpZGRlbigp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBISURERU47IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
YXNzd29yZEZpZWxkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFBBU1NXT1JEOyB9Ci0gICAg
dmlydHVhbCBib29sIGhhc1NwaW5CdXR0b24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gTlVN
QkVSIHx8IG1fdHlwZSA9PSBEQVRFIHx8IG1fdHlwZSA9PSBEQVRFVElNRSB8fCBtX3R5cGUgPT0g
REFURVRJTUVMT0NBTCB8fCBtX3R5cGUgPT0gTU9OVEggfHwgbV90eXBlID09IFRJTUUgfHwgbV90
eXBlID09IFdFRUs7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuVHJpZ2dlckltcGxpY2l0U3VibWlz
c2lvbigpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dEZpZWxkKCk7IH0KIAogICAgIGJvb2wgY2hlY2tl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tlZDsgfQogICAgIHZvaWQgc2V0Q2hlY2tlZChib29s
LCBib29sIHNlbmRDaGFuZ2VFdmVudCA9IGZhbHNlKTsKIAogICAgIC8vICdpbmRldGVybWluYXRl
JyBpcyBhIHN0YXRlIGluZGVwZW5kZW50IG9mIHRoZSBjaGVja2VkIHN0YXRlIHRoYXQgY2F1c2Vz
IHRoZSBjb250cm9sIHRvIGRyYXcgaW4gYSB3YXkgdGhhdCBoaWRlcyB0aGUgYWN0dWFsIHN0YXRl
LgotICAgIGJvb2wgYWxsb3dzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlw
ZSgpID09IENIRUNLQk9YIHx8IGlucHV0VHlwZSgpID09IFJBRElPOyB9CiAgICAgYm9vbCBpbmRl
dGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRldGVybWluYXRlOyB9CiAgICAgdm9pZCBz
ZXRJbmRldGVybWluYXRlKGJvb2wpOwogCiAgICAgdmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsK
LSAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkVmFsdWUoKSBjb25zdDsKLSAgICB2b2lkIHNldFN1Z2dlc3RlZFZhbHVl
KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAg
IHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VuZENoYW5nZUV2ZW50ID0gZmFsc2UpOwpAQCAtMTYxLDUy
ICsxMjUsMjIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIHBsYWNlaG9sZGVyKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYpOwogCi0g
ICAgdmlydHVhbCBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0Owot
CiAgICAgU3RyaW5nIHZhbHVlV2l0aERlZmF1bHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEZpbGVM
aXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgc2F2ZUZvcm1Db250cm9sU3RhdGUoU3RyaW5nJiB2YWx1ZSkgY29uc3Q7Ci0gICAgdmlydHVh
bCB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdmly
dHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgCiAgICAgYm9vbCBjYW5I
YXZlU2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdCgpIHsgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWNj
ZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSopOwotCi0gICAgdmlydHVhbCB2b2lkIGNvcHlOb25BdHRyaWJ1dGVQcm9w
ZXJ0aWVzKGNvbnN0IEVsZW1lbnQqIHNvdXJjZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
KCk7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICB2aXJ0dWFsIGJvb2wg
YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQWN0
aXZhdGVkU3VibWl0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFjdGl2YXRlZFN1Ym1p
dChib29sIGZsYWcpOwogCiAgICAgSW5wdXRUeXBlIGlucHV0VHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PElucHV0VHlwZT4obV90eXBlKTsgfQogICAgIHZvaWQgc2V0SW5wdXRUeXBl
KGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgIC8vIFJlcG9ydCBpZiB0aGlzIGlucHV0IHR5cGUg
dXNlcyBoZWlnaHQgJiB3aWR0aCBhdHRyaWJ1dGVzCi0gICAgYm9vbCByZXNwZWN0SGVpZ2h0QW5k
V2lkdGhBdHRycygpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlwZSgpID09IElNQUdFIHx8IGlucHV0
VHlwZSgpID09IEhJRERFTjsgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0gICAgdmlydHVh
bCB2b2lkIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCosIHZvaWQqIGRhdGFGcm9tUHJl
RGlzcGF0Y2gpOwogCiAgICAgU3RyaW5nIGFsdFRleHQoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAKICAgICBpbnQgbWF4
UmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4UmVzdWx0czsgfQogCkBAIC0yMzUsMTEgKzE2
OSw2IEBAIHB1YmxpYzoKICAgICBLVVJMIHNyYygpIGNvbnN0OwogICAgIHZvaWQgc2V0U3JjKGNv
bnN0IFN0cmluZyYpOwogCi0jaWYgRU5BQkxFKERBVEFMSVNUKQotICAgIEhUTUxFbGVtZW50KiBs
aXN0KCkgY29uc3Q7Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGVjdGVkT3B0aW9uKCkgY29u
c3Q7Ci0jZW5kaWYKLQogICAgIGludCBtYXhMZW5ndGgoKSBjb25zdDsKICAgICB2b2lkIHNldE1h
eExlbmd0aChpbnQsIEV4Y2VwdGlvbkNvZGUmKTsKIApAQCAtMjU0LDMyICsxODMsMTAzIEBAIHB1
YmxpYzoKIAogICAgIEZpbGVMaXN0KiBmaWxlcygpOwogCi0gICAgdmlydHVhbCB2b2lkIGNhY2hl
U2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCk7CiAgICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQo
KTsKICAgICB2b2lkIG9uU2VhcmNoKCk7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZh
bHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlk
QmVjb21lQWN0aXZlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1
dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7Ci0gICAgCiAgICAgLy8gUGFyc2VzIHRo
ZSBzcGVjaWZpZWQgc3RyaW5nIGFzIHRoZSBJbnB1dFR5cGUsIGFuZCByZXR1cm5zIHRydWUgaWYg
aXQgaXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KICAgICAvLyBBbiBpbnN0YW5jZSBwb2ludGVkIGJ5
IHRoZSBEYXRlQ29tcG9uZW50cyogcGFyYW1ldGVyIHdpbGwgaGF2ZSBwYXJzZWQgdmFsdWVzIGFu
ZCBiZQogICAgIC8vIG1vZGlmaWVkIGV2ZW4gaWYgdGhlIHBhcnNpbmcgZmFpbHMuICBUaGUgRGF0
ZUNvbXBvbmVudHMqIHBhcmFtZXRlciBtYXkgYmUgMC4KICAgICBzdGF0aWMgYm9vbCBwYXJzZVRv
RGF0ZUNvbXBvbmVudHMoSW5wdXRUeXBlLCBjb25zdCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyop
OwogCi0jaWYgRU5BQkxFKFdDU1MpCi0gICAgdm9pZCBzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcm
IG1hc2spOwotICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50RGF0YSBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CisjaWYgRU5BQkxFKERBVEFMSVNUKQorICAgIEhUTUxFbGVtZW50KiBsaXN0
KCkgY29uc3Q7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGVjdGVkT3B0aW9uKCkgY29uc3Q7
CiAjZW5kaWYKLSAgICAKKwogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRv
TmV3T3duZXJEb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25lckRv
Y3VtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CisKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCopOwogCiBwcml2YXRlOgorICAgIGVudW0gQXV0b0NvbXBsZXRl
U2V0dGluZyB7IFVuaW5pdGlhbGl6ZWQsIE9uLCBPZmYgfTsKKworICAgIHZpcnR1YWwgdm9pZCB3
aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCk7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0Vu
dW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlwZSgpICE9IElNQUdFOyB9CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29sIHJlc3RvcmVQcmV2aW91c1Nl
bGVjdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGFib3V0VG9VbmxvYWQoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdDsKKworICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKKyAKKyAgICAvLyBpc0NoZWNr
ZWQgaXMgdXNlZCBieSB0aGUgcmVuZGVyaW5nIHRyZWUvQ1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1
c2VkIGJ5IEpTIHRvIGRldGVybWluZSBjaGVja2VkIHN0YXRlCisgICAgdmlydHVhbCBib29sIGlz
Q2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGNoZWNrZWQoKSAmJiAoaW5wdXRUeXBlKCkgPT0gQ0hF
Q0tCT1ggfHwgaW5wdXRUeXBlKCkgPT0gUkFESU8pOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5k
ZXRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV0ZXJtaW5hdGUoKTsgfQorICAgIAorICAg
IHZpcnR1YWwgYm9vbCBpc1RleHRGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dEZp
ZWxkKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCB2YWx1ZU1pc3NpbmcoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGF0dGVybk1pc21hdGNoKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHRv
b0xvbmcoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gUEFTU1dPUkQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzU3Bp
bkJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBOVU1CRVIgfHwgbV90eXBlID09IERB
VEUgfHwgbV90eXBlID09IERBVEVUSU1FIHx8IG1fdHlwZSA9PSBEQVRFVElNRUxPQ0FMIHx8IG1f
dHlwZSA9PSBNT05USCB8fCBtX3R5cGUgPT0gVElNRSB8fCBtX3R5cGUgPT0gV0VFSzsgfQorICAg
IHZpcnR1YWwgYm9vbCBjYW5UcmlnZ2VySW1wbGljaXRTdWJtaXNzaW9uKCkgY29uc3QgeyByZXR1
cm4gaXNUZXh0RmllbGQoKTsgfQorCisgICAgYm9vbCBhbGxvd3NJbmRldGVybWluYXRlKCkgY29u
c3QgeyByZXR1cm4gaW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1ggfHwgaW5wdXRUeXBlKCkgPT0gUkFE
SU87IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRWYWx1ZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0U3VnZ2VzdGVkVmFsdWUoY29uc3QgU3RyaW5nJik7CisKKyAgICB2
aXJ0dWFsIGJvb2wgc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgc2F2ZUZvcm1Db250cm9sU3RhdGUoU3RyaW5nJiB2YWx1ZSkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IFN0cmluZyYp
OworCisgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Q7CisgICAgCisg
ICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOwor
CisgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBj
b3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhjb25zdCBFbGVtZW50KiBzb3VyY2UpOworCisgICAg
dmlydHVhbCB2b2lkIGF0dGFjaCgpOworCisgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRh
KEZvcm1EYXRhTGlzdCYsIGJvb2wpOworCisgICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1
Ym1pdEJ1dHRvbigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRlZFN1Ym1pdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmF0ZWRTdWJtaXQoYm9vbCBmbGFnKTsK
KworICAgIC8vIFJlcG9ydCBpZiB0aGlzIGlucHV0IHR5cGUgdXNlcyBoZWlnaHQgJiB3aWR0aCBh
dHRyaWJ1dGVzCisgICAgYm9vbCByZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRycygpIGNvbnN0IHsg
cmV0dXJuIGlucHV0VHlwZSgpID09IElNQUdFIHx8IGlucHV0VHlwZSgpID09IEhJRERFTjsgfQor
CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQqIHByZURpc3Bh
dGNoRXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHBvc3REaXNwYXRjaEV2
ZW50SGFuZGxlcihFdmVudCosIHZvaWQqIGRhdGFGcm9tUHJlRGlzcGF0Y2gpOworCisgICAgdmly
dHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIGNhY2hlU2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCk7CisKKyAgICB2aXJ0dWFs
IFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIGRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CisKICAg
ICBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCkgY29uc3Q7CiAKICAgICBi
b29sIG5lZWRzQWN0aXZhdGlvbkNhbGxiYWNrKCk7CkBAIC0zMjUsNiArMzI1LDExIEBAIHByaXZh
dGU6CiAgICAgSFRNTERhdGFMaXN0RWxlbWVudCogZGF0YUxpc3QoKSBjb25zdDsKICNlbmRpZgog
CisjaWYgRU5BQkxFKFdDU1MpCisgICAgdm9pZCBzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1h
c2spOworICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50RGF0YSBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CisjZW5kaWYKKwogICAgIElucHV0RWxlbWVudERhdGEgbV9kYXRhOwogICAgIGlu
dCBtX3hQb3M7CiAgICAgaW50IG1feVBvczsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRl
eEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTMyLDEzICszMiwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLUhUTUxJc0luZGV4RWxlbWVudDo6SFRNTElzSW5kZXhFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MsIEhUTUxGb3JtRWxlbWVu
dCAqZikKLSAgICA6IEhUTUxJbnB1dEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQorSFRNTElzSW5k
ZXhFbGVtZW50OjpIVE1MSXNJbmRleEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1M
SW5wdXRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKGlzaW5kZXhUYWcpKTsKICAgICBzZXREZWZhdWx0TmFtZShpc2luZGV4VGFnLmxvY2Fs
TmFtZSgpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MSXNJbmRleEVsZW1lbnQ+IEhUTUxJc0luZGV4
RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
KQoreworICAgIHJldHVybiBuZXcgSFRNTElzSW5kZXhFbGVtZW50KGlzaW5kZXhUYWcsIGRvY3Vt
ZW50LCBmb3JtKTsKK30KKworUGFzc1JlZlB0cjxIVE1MSXNJbmRleEVsZW1lbnQ+IEhUTUxJc0lu
ZGV4RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQoreworICAgIHJldHVybiBuZXcgSFRN
TElzSW5kZXhFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKTsKK30KKwogdm9pZCBIVE1M
SXNJbmRleEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHByb21wdEF0dHIpCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTElzSW5kZXhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJc0lu
ZGV4RWxlbWVudC5oCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRl
eEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMCw2ICsyMCw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KICAqCiAgKi8KKwogI2lmbmRlZiBIVE1MSXNJbmRleEVsZW1lbnRfaAogI2RlZmluZSBIVE1M
SXNJbmRleEVsZW1lbnRfaAogCkBAIC0yOSwyMSArMzAsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBIVE1MSXNJbmRleEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCB7
CiBwdWJsaWM6Ci0gICAgSFRNTElzSW5kZXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQgKmYgPSAwKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MSXNJbmRleEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVu
dCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJc0luZGV4RWxlbWVudD4gY3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworCisgICAg
U3RyaW5nIHByb21wdCgpIGNvbnN0OworICAgIHZvaWQgc2V0UHJvbXB0KGNvbnN0IFN0cmluZyYp
OworCitwcml2YXRlOgorICAgIEhUTUxJc0luZGV4RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgYm9vbCBjYW5UcmlnZ2VySW1wbGljaXRTdWJtaXNzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cik7Ci0KLSAgICBTdHJpbmcgcHJvbXB0KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRQcm9tcHQoY29uc3QgU3RyaW5nICYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fcHJv
bXB0OworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsK
IH07CiAKLX0gLy9uYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MTElFbGVtZW50LmNwcAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExJ
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACi0vKioKKy8qCiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMywxMyArMzMsMjMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MTElFbGVtZW50OjpIVE1M
TElFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0g
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCitIVE1MTElFbGVtZW50OjpIVE1MTElFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwgbV9yZXF1ZXN0ZWRWYWx1
ZSgwKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGxpVGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8
SFRNTExJRWxlbWVudD4gSFRNTExJRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkK
K3sKKyAgICByZXR1cm4gbmV3IEhUTUxMSUVsZW1lbnQobGlUYWcsIGRvY3VtZW50KTsKK30KKwor
UGFzc1JlZlB0cjxIVE1MTElFbGVtZW50PiBIVE1MTElFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBu
ZXcgSFRNTExJRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7Cit9CisKIGJvb2wgSFRNTExJRWxl
bWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gdHlwZUF0
dHIpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuaAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTExJRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjgsNiArMjksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIVE1MTElFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MTElFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MTElFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CisKKyAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHlw
ZShjb25zdCBTdHJpbmcmKTsKKworICAgIGludCB2YWx1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0
VmFsdWUoaW50KTsKKworcHJpdmF0ZToKICAgICBIVE1MTElFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KQEAgLTM4LDEz
ICs0OSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKIAotICAgIFN0
cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgaW50IHZhbHVlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZShpbnQpOwotCi1wcml2YXRl
OgogICAgIGludCBtX3JlcXVlc3RlZFZhbHVlOwogfTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxMYWJlbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxF
bGVtZW50LmNwcAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFMbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFw
QG55cG9wLmNvbSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zOCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBub2RlQXNMYWJl
bGFibGVGb3JtQ29udHJvbChOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
aXNIVE1MRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQorICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpIHx8ICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
IGZvcm1Db250cm9sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
Pihub2RlKTsKQEAgLTQ4LDE0ICs0OCwxNSBAQCBzdGF0aWMgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCogbm9kZUFzTGFiCiAgICAgcmV0dXJuIGZvcm1Db250cm9sRWxlbWVudDsKIH0KIAotSFRNTExh
YmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQoraW5saW5l
IEhUTUxMYWJlbEVsZW1lbnQ6OkhUTUxMYWJlbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUobGFiZWxUYWcpKTsKIH0KIAotSFRN
TExhYmVsRWxlbWVudDo6fkhUTUxMYWJlbEVsZW1lbnQoKQorUGFzc1JlZlB0cjxIVE1MTGFiZWxF
bGVtZW50PiBIVE1MTGFiZWxFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBuZXcgSFRNTExhYmVsRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CiB9CiAKIGJvb2wgSFRNTExhYmVsRWxlbWVudDo6aXNG
b2N1c2FibGUoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5oCShyZXZpc2lvbiA2
MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zMSw4ICszMSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhU
TUxMYWJlbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxMYWJlbEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKKworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2woKTsK
KworICAgIFN0cmluZyBhY2Nlc3NLZXkoKSBjb25zdDsKKyAgICB2b2lkIHNldEFjY2Vzc0tleShj
b25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICBTdHJpbmcgaHRtbEZvcigpIGNvbnN0OworICAgIHZv
aWQgc2V0SHRtbEZvcihjb25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToKICAgICBIVE1MTGFiZWxF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIHZpcnR1YWwgfkhU
TUxMYWJlbEVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gNTsgfQogCkBAIC00NywyMCArNTcsOSBAQCBwdWJsaWM6CiAgICAgLy8gT3ZlcnJp
ZGRlbiB0byBlaXRoZXIgY2xpY2soKSBvciBmb2N1cygpIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRy
b2wuCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKIAotICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2woKTsKLQotICAgIFN0cmluZyBhY2Nlc3NL
ZXkoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmKTsKLSAgICAK
LSAgICBTdHJpbmcgaHRtbEZvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0SHRtbEZvcihjb25zdCBT
dHJpbmcmKTsKLQogICAgIHZvaWQgZm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24g
PSB0cnVlKTsKIAotIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5nIG1fZm9ybUVsZW1lbnRJRDsKIH07CiAKIH0g
Ly9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAkocmV2aXNpb24g
NjAzNzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMyLDE0ICszMiwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhU
TUxMZWdlbmRFbGVtZW50OjpIVE1MTGVnZW5kRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQgKmYpCi0gICAgOiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKK2lubGluZSBIVE1MTGVnZW5kRWxlbWVu
dDo6SFRNTExlZ2VuZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQogewogICAgIEFTU0VSVChoYXNUYWdO
YW1lKGxlZ2VuZFRhZykpOwogfQogCi1IVE1MTGVnZW5kRWxlbWVudDo6fkhUTUxMZWdlbmRFbGVt
ZW50KCkKK1Bhc3NSZWZQdHI8SFRNTExlZ2VuZEVsZW1lbnQ+IEhUTUxMZWdlbmRFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBI
VE1MRm9ybUVsZW1lbnQqIGZvcm0pCiB7CisgICAgcmV0dXJuIG5ldyBIVE1MTGVnZW5kRWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSk7CiB9CiAKIGJvb2wgSFRNTExlZ2VuZEVsZW1lbnQ6
OnN1cHBvcnRzRm9jdXMoKSBjb25zdApAQCAtNzMsMjMgKzc0LDIzIEBAIHZvaWQgSFRNTExlZ2Vu
ZEVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFMKICAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2
YWx1ZSk7CiB9CiAKLUVsZW1lbnQgKkhUTUxMZWdlbmRFbGVtZW50Ojpmb3JtRWxlbWVudCgpCitI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENvbnRy
b2woKQogewogICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYSBmaWVsZHNldCBiZWxvbmdpbmcgdG8g
dGhpcyBsZWdlbmQuCi0gICAgTm9kZSAqZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7CisgICAgTm9k
ZSogZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7CiAgICAgd2hpbGUgKGZpZWxkc2V0ICYmICFmaWVs
ZHNldC0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykpCiAgICAgICAgIGZpZWxkc2V0ID0gZmllbGRz
ZXQtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIWZpZWxkc2V0KQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIC8vIEZpbmQgZmlyc3QgZm9ybSBlbGVtZW50IGluc2lkZSB0aGUgZmllbGRzZXQuCi0g
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjYXJlIGFib3V0IHRhYmluZGV4PwotICAgIE5vZGUgKm5v
ZGUgPSBmaWVsZHNldDsKKyAgICAvLyBGaW5kIGZpcnN0IGZvcm0gZWxlbWVudCBpbnNpZGUgdGhl
IGZpZWxkc2V0IHRoYXQgaXMgbm90IGEgbGVnZW5kIGVsZW1lbnQuCisgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBjb25zaWRlciB0YWJpbmRleD8KKyAgICBOb2RlKiBub2RlID0gZmllbGRzZXQ7CiAg
ICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkpKSB7Ci0g
ICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIEhUTUxFbGVt
ZW50ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4obm9kZSk7CisgICAgICAg
IGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoIWVsZW1l
bnQtPmhhc0xvY2FsTmFtZShsZWdlbmRUYWcpICYmIGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTAxLDE1ICsxMDIsMTUgQEAgdm9pZCBIVE1MTGVnZW5kRWxl
bWVudDo6Zm9jdXMoYm9vbCkKICAgICBpZiAoaXNGb2N1c2FibGUoKSkKICAgICAgICAgRWxlbWVu
dDo6Zm9jdXMoKTsKICAgICAgICAgCi0gICAgLy8gdG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMsIG5l
dmVyIHJlc3RvcmUgcHJldmlvdXMgc2VsZWN0aW9uCi0gICAgaWYgKEVsZW1lbnQgKmVsZW1lbnQg
PSBmb3JtRWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7CisgICAgLy8g
VG8gbWF0Y2ggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLCBuZXZlciByZXN0b3JlIHByZXZpb3Vz
IHNlbGVjdGlvbi4KKyAgICBpZiAoSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGFz
c29jaWF0ZWRDb250cm9sKCkpCisgICAgICAgIGNvbnRyb2wtPmZvY3VzKGZhbHNlKTsKIH0KIAog
dm9pZCBIVE1MTGVnZW5kRWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxl
bWVudCkKIHsKLSAgICBpZiAoRWxlbWVudCAqZWxlbWVudCA9IGZvcm1FbGVtZW50KCkpCi0gICAg
ICAgIGVsZW1lbnQtPmFjY2Vzc0tleUFjdGlvbihzZW5kVG9BbnlFbGVtZW50KTsKKyAgICBpZiAo
SFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGFzc29jaWF0ZWRDb250cm9sKCkpCisg
ICAgICAgIGNvbnRyb2wtPmFjY2Vzc0tleUFjdGlvbihzZW5kVG9BbnlFbGVtZW50KTsKIH0KICAg
ICAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAkocmV2aXNp
b24gNjAzNzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxl
ckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwyNSAr
MzAsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTGVnZW5kRWxlbWVudCA6
IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MTGVnZW5k
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQq
ID0gMCk7Ci0gICAgdmlydHVhbCB+SFRNTExlZ2VuZEVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlB
Y3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKLQotICAgIC8qKgotICAgICAqIFRoZSBmaXJz
dCBmb3JtIGVsZW1lbnQgaW4gdGhlIGxlZ2VuZCdzIGZpZWxkc2V0IAotICAgICAqLwotICAgIEVs
ZW1lbnQqIGZvcm1FbGVtZW50KCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTExlZ2VuZEVs
ZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVs
ZW1lbnQqKTsKIAogICAgIFN0cmluZyBhY2Nlc3NLZXkoKSBjb25zdDsKLSAgICB2b2lkIHNldEFj
Y2Vzc0tleShjb25zdCBTdHJpbmcgJik7CisgICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3QgU3Ry
aW5nJik7CiAKICAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNv
bnN0IFN0cmluZyAmKTsKKyAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwogICAgIAot
ICAgIHZvaWQgZm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKTsKK3By
aXZhdGU6CisgICAgSFRNTExlZ2VuZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICAvLyBDb250cm9sIGluIHRoZSBsZWdlbmQn
cyBmaWVsZHNldCB0aGF0IGdldHMgZm9jdXMgYW5kIGFjY2VzcyBrZXkuCisgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogYXNzb2NpYXRlZENvbnRyb2woKTsKKworICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0ZvY3VzKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZv
cm1Db250cm9sVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24o
Ym9vbCBzZW5kVG9BbnlFbGVtZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXMoYm9vbCByZXN0
b3JlUHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTExp
bmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERv
Y3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQotICAgIDogSFRNTEVsZW1lbnQocU5h
bWUsIGRvYykKLSAgICAsIG1fY2FjaGVkU2hlZXQoMCkKK2lubGluZSBIVE1MTGlua0VsZW1lbnQ6
OkhUTUxMaW5rRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpCiAgICAgLCBtX2Rpc2FibGVkU3RhdGUoVW5zZXQpCiAgICAgLCBtX2xvYWRp
bmcoZmFsc2UpCiAgICAgLCBtX2NyZWF0ZWRCeVBhcnNlcihjcmVhdGVkQnlQYXJzZXIpCkBAIC01
Niw2ICs1NSwxMSBAQCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChjb25zdCBRCiAg
ICAgQVNTRVJUKGhhc1RhZ05hbWUobGlua1RhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxMaW5r
RWxlbWVudD4gSFRNTExpbmtFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IEhUTUxMaW5rRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFy
c2VyKTsKK30KKwogSFRNTExpbmtFbGVtZW50Ojp+SFRNTExpbmtFbGVtZW50KCkKIHsKICAgICBp
ZiAobV9jYWNoZWRTaGVldCkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkocmV2aXNpb24g
NjAzNzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDExICs0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgUmVsQXR0cmlidXRlKCkgOiBtX2lz
U3R5bGVTaGVldChmYWxzZSksIG1faXNJY29uKGZhbHNlKSwgbV9pc0FsdGVybmF0ZShmYWxzZSks
IG1faXNETlNQcmVmZXRjaChmYWxzZSkgeyB9CiAgICAgfTsKIAotICAgIEhUTUxMaW5rRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
Ci0gICAgfkhUTUxMaW5rRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0g
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTExpbmtFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHZpcnR1YWwgfkhUTUxM
aW5rRWxlbWVudCgpOwogCiAgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0
RGlzYWJsZWQoYm9vbCk7CkBAIC03OSw3ICs3NiwxNiBAQCBwdWJsaWM6CiAKICAgICBTdHlsZVNo
ZWV0KiBzaGVldCgpIGNvbnN0OwogCi0gICAgLy8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudAor
ICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CisKKyAgICBib29sIGlzRGlzYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gRGlzYWJsZWQ7IH0KKyAgICBib29sIGlzRW5h
YmxlZFZpYVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSBFbmFibGVk
VmlhU2NyaXB0OyB9CisgICAgYm9vbCBpc0ljb24oKSBjb25zdCB7IHJldHVybiBtX3JlbEF0dHJp
YnV0ZS5tX2lzSWNvbjsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQor
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAgICAgdm9p
ZCBwcm9jZXNzKCk7CkBAIC04OSwyNSArOTUsMjUgQEAgcHVibGljOgogCiAgICAgLy8gZnJvbSBD
YWNoZWRSZXNvdXJjZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBzaGVldCk7Ci0gICAgYm9vbCBpc0xvYWRp
bmcoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hlZXRMb2FkZWQoKTsKIAogICAgIGJvb2wg
aXNBbHRlcm5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gVW5zZXQgJiYg
bV9yZWxBdHRyaWJ1dGUubV9pc0FsdGVybmF0ZTsgfQotICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSBEaXNhYmxlZDsgfQotICAgIGJvb2wgaXNF
bmFibGVkVmlhU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IEVuYWJs
ZWRWaWFTY3JpcHQ7IH0KLSAgICBib29sIGlzSWNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVsQXR0
cmlidXRlLm1faXNJY29uOyB9CiAgICAgCiAgICAgdm9pZCBzZXREaXNhYmxlZFN0YXRlKGJvb2wg
X2Rpc2FibGVkKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KSBjb25zdDsKICAgICAKK3B1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB0b2tlbml6ZVJlbEF0dHJp
YnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBSZWxBdHRyaWJ1dGUmKTsKIAorcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNo
U2V0PEtVUkw+JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCk7CiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CisgICAgSFRNTExpbmtFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKwogICAg
IGVudW0gRGlzYWJsZWRTdGF0ZSB7CiAgICAgICAgIFVuc2V0LAogICAgICAgICBFbmFibGVkVmlh
U2NyaXB0LApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw3ICs0MzEsNiBAQCBi
b29sIEhUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZSogbiwgYm9vCiBib29sIEhUTUxQYXJzZXI6
OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUsIGludCB0YWdQcmlvcml0eSkKIHsKICAgICAvLyBFcnJvciBoYW5kbGluZyBjb2RlLiAg
VGhpcyBpcyBqdXN0IGFkIGhvYyBoYW5kbGluZyBvZiBzcGVjaWZpYyBwYXJlbnQvY2hpbGQgY29t
YmluYXRpb25zLgotICAgIEhUTUxFbGVtZW50KiBlOwogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNl
OwogCiAgICAgLy8gMS4gQ2hlY2sgb3V0IHRoZSBlbGVtZW50J3MgdGFnIG5hbWUgdG8gZGVjaWRl
IGhvdyB0byBkZWFsIHdpdGggZXJyb3JzLgpAQCAtNTU5LDcgKzU1OCw3IEBAIGJvb2wgSFRNTFBh
cnNlcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm8KICAgICAgICAgICAgICAgICBlbHQtPmhhc0xv
Y2FsTmFtZSh0aXRsZVRhZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUoaXNpbmRleFRhZykgfHwKICAg
ICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShiYXNlVGFnKSkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIW1faGVhZCkgewotICAgICAgICAgICAgICAgICAgICBtX2hlYWQgPSBuZXcgSFRN
TEhlYWRFbGVtZW50KGhlYWRUYWcsIG1fZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICBt
X2hlYWQgPSBIVE1MSGVhZEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0Tm9kZShtX2hlYWQuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC03MTEsOCArNzEwLDcgQEAgYm9v
bCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBibwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCFtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgZSA9
IG5ldyBIVE1MSHRtbEVsZW1lbnQoaHRtbFRhZywgbV9kb2N1bWVudCk7Ci0gICAgICAgICAgICBp
bnNlcnROb2RlKGUpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1lbnQ6OmNy
ZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTc0Myw3ICs3NDEsNyBAQCBib29sIEhUTUxQYXJzZXI6OmNvbW1l
bnRDcmVhdGVFcnJvckNoZWNrCiBib29sIEhUTUxQYXJzZXI6OmhlYWRDcmVhdGVFcnJvckNoZWNr
KFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgaWYgKCFtX2hlYWQgfHwgbV9j
dXJyZW50LT5sb2NhbE5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgIG1faGVhZCA9IG5ldyBI
VE1MSGVhZEVsZW1lbnQoaGVhZFRhZywgbV9kb2N1bWVudCk7CisgICAgICAgIG1faGVhZCA9IEhU
TUxIZWFkRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwogICAgICAgICByZXN1bHQgPSBtX2hl
YWQ7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRFcnJvcik7
CkBAIC03OTEsNyArNzg5LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpmb3JtQ3JlYXRlRXJyb3JDaGVj
ayhUbwogICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90IGFscmVhZHkg
aW5zaWRlIG9uZS4KICAgICAvLyBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBicm93c2Vy
cycgYmVoYXZpb3IuCiAgICAgaWYgKCFtX2N1cnJlbnRGb3JtRWxlbWVudCkgewotICAgICAgICBt
X2N1cnJlbnRGb3JtRWxlbWVudCA9IG5ldyBIVE1MRm9ybUVsZW1lbnQoZm9ybVRhZywgbV9kb2N1
bWVudCk7CisgICAgICAgIG1fY3VycmVudEZvcm1FbGVtZW50ID0gSFRNTEZvcm1FbGVtZW50Ojpj
cmVhdGUobV9kb2N1bWVudCk7CiAgICAgICAgIHJlc3VsdCA9IG1fY3VycmVudEZvcm1FbGVtZW50
OwogICAgICAgICBwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayh0LCByZXN1bHQpOwogICAgIH0KQEAg
LTE1NjgsMTEgKzE1NjYsMTEgQEAgdm9pZCBIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSAmJiAh
bV9pc1BhcnNpbmdGcmFnbWVudCkgewotICAgICAgICBpbnNlcnROb2RlKG5ldyBIVE1MSHRtbEVs
ZW1lbnQoaHRtbFRhZywgbV9kb2N1bWVudCkpOworICAgICAgICBpbnNlcnROb2RlKEhUTUxIdG1s
RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKICAgICAgICAgQVNTRVJUKG1fZG9j
dW1lbnQtPmRvY3VtZW50RWxlbWVudCgpIHx8IG1faXNQYXJzaW5nRnJhZ21lbnQpOwogICAgIH0K
IAotICAgIG1faGVhZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnQoaGVhZFRhZywgbV9kb2N1bWVudCk7
CisgICAgbV9oZWFkID0gSFRNTEhlYWRFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CiAKICAg
ICBpZiAobV9pc1BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU5MiwxMSAr
MTU5MCwxMSBAQCB2b2lkIEhUTUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQogCiBQYXNzUmVmUHRyPE5v
ZGU+IEhUTUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoVG9rZW4qIHQpCiB7Ci0gICAgUmVmUHRyPE5v
ZGU+IG4gPSBuZXcgSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBtX2RvY3VtZW50KTsKKyAgICBSZWZQ
dHI8Tm9kZT4gbiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CiAKICAgICBO
YW1lZE5vZGVNYXAqIGF0dHJzID0gdC0+YXR0cnMuZ2V0KCk7CiAKLSAgICBSZWZQdHI8SFRNTElz
SW5kZXhFbGVtZW50PiBpc0luZGV4ID0gbmV3IEhUTUxJc0luZGV4RWxlbWVudChpc2luZGV4VGFn
LCBtX2RvY3VtZW50LCBtX2N1cnJlbnRGb3JtRWxlbWVudC5nZXQoKSk7CisgICAgUmVmUHRyPEhU
TUxJc0luZGV4RWxlbWVudD4gaXNJbmRleCA9IEhUTUxJc0luZGV4RWxlbWVudDo6Y3JlYXRlKG1f
ZG9jdW1lbnQsIG1fY3VycmVudEZvcm1FbGVtZW50LmdldCgpKTsKICAgICBpc0luZGV4LT5zZXRB
dHRyaWJ1dGVNYXAoYXR0cnMpOwogICAgIGlzSW5kZXgtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwg
ImtodG1sX2lzaW5kZXgiKTsKIApAQCAtMTYwNywxMCArMTYwNSwxMCBAQCBQYXNzUmVmUHRyPE5v
ZGU+IEhUTUxQYXJzZXI6OmhhbmRsZUlzaW5kCiAgICAgICAgIHQtPmF0dHJzID0gMDsKICAgICB9
CiAKLSAgICBuLT5hZGRDaGlsZChuZXcgSFRNTEhSRWxlbWVudChoclRhZywgbV9kb2N1bWVudCkp
OworICAgIG4tPmFkZENoaWxkKEhUTUxIUkVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KSk7CiAg
ICAgbi0+YWRkQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRleHQpKTsKICAgICBuLT5h
ZGRDaGlsZChpc0luZGV4LnJlbGVhc2UoKSk7Ci0gICAgbi0+YWRkQ2hpbGQobmV3IEhUTUxIUkVs
ZW1lbnQoaHJUYWcsIG1fZG9jdW1lbnQpKTsKKyAgICBuLT5hZGRDaGlsZChIVE1MSFJFbGVtZW50
OjpjcmVhdGUobV9kb2N1bWVudCkpOwogCiAgICAgcmV0dXJuIG4ucmVsZWFzZSgpOwogfQpAQCAt
MTYzMiw3ICsxNjMwLDcgQEAgdm9pZCBIVE1MUGFyc2VyOjpmaW5pc2hlZCgpCiB7CiAgICAgLy8g
SW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3VtZW50LCBoZXJlJ3MgdGhlIHBs
YWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlmIChtX2N1cnJlbnQgJiYgbV9j
dXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KSkKLSAgICAgICAgaW5zZXJ0Tm9kZShuZXcgSFRNTEh0bWxFbGVtZW50KGh0bWxUYWcsIG1fZG9j
dW1lbnQpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShtX2Rv
Y3VtZW50KS5nZXQoKSk7CiAKICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCAiY3VycmVudCIgaXMg
bm90IGxlZnQgcG9pbnRpbmcgdG8gYSBub2RlIHdoZW4gdGhlIGRvY3VtZW50IGlzIGRlc3Ryb3ll
ZC4KICAgICBmcmVlQmxvY2soKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkocmV2aXNpb24gNjAz
NzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw0MiArMzYsNDIgQEAgZGQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogZGVsIGludGVyZmFj
ZU5hbWU9SFRNTE1vZEVsZW1lbnQKIGRmbiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBkaXIg
aW50ZXJmYWNlTmFtZT1IVE1MRGlyZWN0b3J5RWxlbWVudAotZGl2IGNyZWF0ZVdpdGhOZXcKK2Rp
dgogZGwgaW50ZXJmYWNlTmFtZT1IVE1MRExpc3RFbGVtZW50CiBkdCBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50CiBlbSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBlbWJlZAogZmllbGRzZXQg
aW50ZXJmYWNlTmFtZT1IVE1MRmllbGRTZXRFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVs
ZW1lbnQKLWZvbnQgY3JlYXRlV2l0aE5ldworZm9udAogZm9vdGVyIGludGVyZmFjZU5hbWU9SFRN
TEVsZW1lbnQKLWZvcm0gY3JlYXRlV2l0aE5ldworZm9ybQogZnJhbWUKLWZyYW1lc2V0IGludGVy
ZmFjZU5hbWU9SFRNTEZyYW1lU2V0RWxlbWVudCwgY3JlYXRlV2l0aE5ldwotaDEgaW50ZXJmYWNl
TmFtZT1IVE1MSGVhZGluZ0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWgyIGludGVyZmFjZU5hbWU9
SFRNTEhlYWRpbmdFbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1oMyBpbnRlcmZhY2VOYW1lPUhUTUxI
ZWFkaW5nRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotaDQgaW50ZXJmYWNlTmFtZT1IVE1MSGVhZGlu
Z0VsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWg1IGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVt
ZW50LCBjcmVhdGVXaXRoTmV3Ci1oNiBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudCwg
Y3JlYXRlV2l0aE5ldwotaGVhZCBjcmVhdGVXaXRoTmV3CitmcmFtZXNldCBpbnRlcmZhY2VOYW1l
PUhUTUxGcmFtZVNldEVsZW1lbnQKK2gxIGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50
CitoMiBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudAoraDMgaW50ZXJmYWNlTmFtZT1I
VE1MSGVhZGluZ0VsZW1lbnQKK2g0IGludGVyZmFjZU5hbWU9SFRNTEhlYWRpbmdFbGVtZW50Cito
NSBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5nRWxlbWVudAoraDYgaW50ZXJmYWNlTmFtZT1IVE1M
SGVhZGluZ0VsZW1lbnQKK2hlYWQKIGhlYWRlciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBo
Z3JvdXAgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotaHIgaW50ZXJmYWNlTmFtZT1IVE1MSFJF
bGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1odG1sIGNyZWF0ZVdpdGhOZXcKK2hyIGludGVyZmFjZU5h
bWU9SFRNTEhSRWxlbWVudAoraHRtbAogaSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBpZnJh
bWUgaW50ZXJmYWNlTmFtZT1IVE1MSUZyYW1lRWxlbWVudAotaW1hZ2UgbWFwVG9UYWdOYW1lPWlt
ZywgY3JlYXRlV2l0aE5ldwotaW1nIGludGVyZmFjZU5hbWU9SFRNTEltYWdlRWxlbWVudCwgY29u
c3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1pbnB1dCBjb25zdHJ1Y3Rv
ck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWlucyBpbnRlcmZhY2VOYW1lPUhUTUxN
b2RFbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1pc2luZGV4IGludGVyZmFjZU5hbWU9SFRNTElzSW5k
ZXhFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2lt
YWdlIG1hcFRvVGFnTmFtZT1pbWcKK2ltZyBpbnRlcmZhY2VOYW1lPUhUTUxJbWFnZUVsZW1lbnQs
IGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAoraW5wdXQgY29uc3RydWN0b3JOZWVkc0Zvcm1F
bGVtZW50CitpbnMgaW50ZXJmYWNlTmFtZT1IVE1MTW9kRWxlbWVudAoraXNpbmRleCBpbnRlcmZh
Y2VOYW1lPUhUTUxJc0luZGV4RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50CiBr
YmQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAoga2V5Z2VuIEpTSW50ZXJmYWNlTmFtZT1IVE1M
U2VsZWN0RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50Ci1sYWJlbCBjcmVhdGVX
aXRoTmV3CitsYWJlbAogbGF5ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotbGVnZW5kIGNv
bnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotbGkgaW50ZXJmYWNlTmFt
ZT1IVE1MTElFbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1saW5rIGNvbnN0cnVjdG9yTmVlZHNDcmVh
dGVkQnlQYXJzZXIsIGNyZWF0ZVdpdGhOZXcKK2xlZ2VuZCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVs
ZW1lbnQKK2xpIGludGVyZmFjZU5hbWU9SFRNTExJRWxlbWVudAorbGluayBjb25zdHJ1Y3Rvck5l
ZWRzQ3JlYXRlZEJ5UGFyc2VyCiBsaXN0aW5nIGludGVyZmFjZU5hbWU9SFRNTFByZUVsZW1lbnQK
IG1hcAogbWFycXVlZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCShyZXZpc2lv
biA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDggKzQwLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBzaG91bGRXcmFwVGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcCAhPSBOb1dyYXA7IH0KIAotICAgIGJvb2wgcmVhZE9u
bHkoKSBjb25zdCB7IHJldHVybiBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsgfQotCiAgICAgU3Ry
aW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKICAg
ICBTdHJpbmcgZGVmYXVsdFZhbHVlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZp
ZXdTb3VyY2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWV3
U291cmNlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
Vmlld1NvdXJjZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjgsNyArNjgsNyBAQCBUb2tlbml6ZXIqIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNy
ZWF0CiAKIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6Y3JlYXRlQ29udGFpbmluZ1RhYmxl
KCkKIHsKLSAgICBSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBodG1sID0gbmV3IEhUTUxIdG1sRWxl
bWVudChodG1sVGFnLCB0aGlzKTsKKyAgICBSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBodG1sID0g
SFRNTEh0bWxFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgYWRkQ2hpbGQoaHRtbCk7CiAgICAg
aHRtbC0+YXR0YWNoKCk7CiAgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gYm9keSA9IEhUTUxC
b2R5RWxlbWVudDo6Y3JlYXRlKHRoaXMpOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEhUTUxWaWV3
U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhCiAgICAgCiAgICAgLy8gQ3JlYXRlIGEgbGluZSBn
dXR0ZXIgZGl2IHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBzdXJlIHRoZSBndXR0ZXIgZXh0ZW5k
cyBkb3duIHRoZSBoZWlnaHQgb2YgdGhlIHdob2xlCiAgICAgLy8gZG9jdW1lbnQuCi0gICAgUmVm
UHRyPEhUTUxEaXZFbGVtZW50PiBkaXYgPSBuZXcgSFRNTERpdkVsZW1lbnQoZGl2VGFnLCB0aGlz
KTsKKyAgICBSZWZQdHI8SFRNTERpdkVsZW1lbnQ+IGRpdiA9IEhUTUxEaXZFbGVtZW50OjpjcmVh
dGUodGhpcyk7CiAgICAgUmVmUHRyPE5hbWVkTm9kZU1hcD4gYXR0cnMgPSBOYW1lZE5vZGVNYXA6
OmNyZWF0ZSgpOwogICAgIGF0dHJzLT5hZGRBdHRyaWJ1dGUoQXR0cmlidXRlOjpjcmVhdGVNYXBw
ZWQoY2xhc3NBdHRyLCAid2Via2l0LWxpbmUtZ3V0dGVyLWJhY2tkcm9wIikpOwogICAgIGRpdi0+
c2V0QXR0cmlidXRlTWFwKGF0dHJzLnJlbGVhc2UoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9J
bWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3Vt
ZW50LmNwcAkocmV2aXNpb24gNjAzNzQpCisrKyBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsMTkgKzkzLDI2
IEBAIHByaXZhdGU6CiAKIGNsYXNzIEltYWdlRG9jdW1lbnRFbGVtZW50IDogcHVibGljIEhUTUxJ
bWFnZUVsZW1lbnQgewogcHVibGljOgotICAgIEltYWdlRG9jdW1lbnRFbGVtZW50KEltYWdlRG9j
dW1lbnQqIGRvYykKLSAgICAgICAgOiBIVE1MSW1hZ2VFbGVtZW50KGltZ1RhZywgZG9jKQotICAg
ICAgICAsIG1faW1hZ2VEb2N1bWVudChkb2MpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VE
b2N1bWVudEVsZW1lbnQ+IGNyZWF0ZShJbWFnZURvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAg
SW1hZ2VEb2N1bWVudEVsZW1lbnQoSW1hZ2VEb2N1bWVudCogZG9jdW1lbnQpCisgICAgICAgIDog
SFRNTEltYWdlRWxlbWVudChpbWdUYWcsIGRvY3VtZW50KQorICAgICAgICAsIG1faW1hZ2VEb2N1
bWVudChkb2N1bWVudCkKICAgICB7CiAgICAgfQogCiAgICAgdmlydHVhbCB+SW1hZ2VEb2N1bWVu
dEVsZW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KTsKIAotcHJpdmF0ZToKICAgICBJbWFnZURvY3VtZW50KiBtX2ltYWdlRG9jdW1lbnQ7CiB9Owog
CitpbmxpbmUgUGFzc1JlZlB0cjxJbWFnZURvY3VtZW50RWxlbWVudD4gSW1hZ2VEb2N1bWVudEVs
ZW1lbnQ6OmNyZWF0ZShJbWFnZURvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3
IEltYWdlRG9jdW1lbnRFbGVtZW50KGRvY3VtZW50KTsKK30KKwogLy8gLS0tLS0tLS0KIAogc3Rh
dGljIGZsb2F0IHBhZ2Vab29tRmFjdG9yKERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTIwMiw3ICsy
MDksNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0CiAgICAgCiAg
ICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHksIGVjKTsKICAgICAKLSAgICBSZWZQdHI8
SW1hZ2VEb2N1bWVudEVsZW1lbnQ+IGltYWdlRWxlbWVudCA9IG5ldyBJbWFnZURvY3VtZW50RWxl
bWVudCh0aGlzKTsKKyAgICBSZWZQdHI8SW1hZ2VEb2N1bWVudEVsZW1lbnQ+IGltYWdlRWxlbWVu
dCA9IEltYWdlRG9jdW1lbnRFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgCiAgICAgaW1hZ2VF
bGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9u
ZSIpOyAgICAgICAgCiAgICAgaW1hZ2VFbGVtZW50LT5zZXRMb2FkTWFudWFsbHkodHJ1ZSk7Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDYwMzc0KQorKysgV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzk4LDcg
KzM5OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICB9
CiAKICAgICBpZiAoSFRNTElucHV0RWxlbWVudCogZmlsZUlucHV0ID0gYXNGaWxlSW5wdXQoZWxl
bWVudCkpIHsKLSAgICAgICAgaWYgKCFmaWxlSW5wdXQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkp
CisgICAgICAgIGlmIChmaWxlSW5wdXQtPmRpc2FibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgaWYgKCFkcmFnRGF0YS0+Y29udGFpbnNGaWxlcygpKQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkocmV2aXNpb24gNjAz
NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDE5ICs2MiwyOSBAQCBzdGF0aWMgY29uc3QgZmxvYXQg
Y1NlZWtSZXBlYXREZWxheSA9IDAuCiBzdGF0aWMgY29uc3QgZmxvYXQgY1N0ZXBUaW1lID0gMC4w
N2Y7CiBzdGF0aWMgY29uc3QgZmxvYXQgY1NlZWtUaW1lID0gMC4yZjsKIAotTWVkaWFDb250cm9s
U2hhZG93Um9vdEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50KERvY3VtZW50
KiBkb2N1bWVudCwgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotICAgIDogSFRNTERp
dkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKK2lubGluZSBNZWRpYUNvbnRyb2xTaGFkb3dSb290
RWxlbWVudDo6TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50KQorICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBtZWRpYUVsZW1lbnQt
PmRvY3VtZW50KCkpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpIAogeworfQor
CitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBNZWRpYUNvbnRyb2xT
aGFkb3dSb290RWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkK
K3sKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IGVsZW1lbnQgPSBu
ZXcgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQobWVkaWFFbGVtZW50KTsKKwogICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gcm9vdFN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAg
IHJvb3RTdHlsZS0+aW5oZXJpdEZyb20obWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgp
KTsKICAgICByb290U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwogICAgIHJvb3RTdHlsZS0+c2V0
UG9zaXRpb24oUmVsYXRpdmVQb3NpdGlvbik7Ci0gICAgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93
Um9vdCogcmVuZGVyZXIgPSBuZXcgKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+cmVuZGVyQXJl
bmEoKSkgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdCh0aGlzKTsKKworICAgIFJlbmRlck1l
ZGlhQ29udHJvbFNoYWRvd1Jvb3QqIHJlbmRlcmVyID0gbmV3IChtZWRpYUVsZW1lbnQtPnJlbmRl
cmVyKCktPnJlbmRlckFyZW5hKCkpIFJlbmRlck1lZGlhQ29udHJvbFNoYWRvd1Jvb3QoZWxlbWVu
dC5nZXQoKSk7CiAgICAgcmVuZGVyZXItPnNldFN0eWxlKHJvb3RTdHlsZS5yZWxlYXNlKCkpOwot
ICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBzZXRBdHRhY2hlZCgpOwotICAgIHNldElu
RG9jdW1lbnQoKTsKKworICAgIGVsZW1lbnQtPnNldFJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICBl
bGVtZW50LT5zZXRBdHRhY2hlZCgpOworICAgIGVsZW1lbnQtPnNldEluRG9jdW1lbnQoKTsKKwor
ICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xTaGFk
b3dSb290RWxlbWVudDo6dXBkYXRlU3R5bGUoKQpAQCAtODcsOCArOTcsOCBAQCB2b2lkIE1lZGlh
Q29udHJvbFNoYWRvd1Jvb3RFbGVtZW50Ojp1cGRhCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotTWVkaWFDb250cm9sRWxlbWVudDo6TWVkaWFDb250cm9sRWxlbWVudChEb2N1
bWVudCogZG9jdW1lbnQsIFBzZXVkb0lkIHBzZXVkbywgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50KQotICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKK01lZGlhQ29u
dHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50LCBQc2V1ZG9JZCBwc2V1ZG8pCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIG1l
ZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVu
dCkKICAgICAsIG1fcHNldWRvU3R5bGVJZChwc2V1ZG8pCiB7CkBAIC0xMTgsNiArMTI4LDExIEBA
IE1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQKICAgICB9CiB9CiAKK1Bh
c3NSZWZQdHI8TWVkaWFDb250cm9sRWxlbWVudD4gTWVkaWFDb250cm9sRWxlbWVudDo6Y3JlYXRl
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgUHNldWRvSWQgcHNldWRvU3R5bGVJZCkK
K3sKKyAgICByZXR1cm4gbmV3IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50LCBwc2V1
ZG9TdHlsZUlkKTsKK30KKwogdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjphdHRhY2hUb1BhcmVu
dChFbGVtZW50KiBwYXJlbnQpCiB7CiAgICAgcGFyZW50LT5hZGRDaGlsZCh0aGlzKTsKQEAgLTIw
MCw5ICsyMTUsMTQgQEAgdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVTdHlsZSgpCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTWVkaWFDb250cm9sVGltZWxpbmVD
b250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQotICAgIDogTWVkaWFD
b250cm9sRWxlbWVudChkb2N1bWVudCwgTUVESUFfQ09OVFJPTFNfVElNRUxJTkVfQ09OVEFJTkVS
LCBlbGVtZW50KQoraW5saW5lIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6
TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKKyAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50LCBNRURJ
QV9DT05UUk9MU19USU1FTElORV9DT05UQUlORVIpCit7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFD
b250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRh
aW5lckVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiB7Cisg
ICAgcmV0dXJuIG5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQobWVkaWFF
bGVtZW50KTsKIH0KIAogYm9vbCBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6
OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQpAQCAtMjEzLDIzICsyMzMsMjgg
QEAgYm9vbCBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbgogICAgIC8vIFRoaXMg
aXMgZm9yIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYzoKICAgICAvLyBJZiB0aGVyZSBpcyBu
byBzdHlsZSBmb3IgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQgc3R5bGUsIGRvbid0
IGhpZGUKICAgICAvLyB0aGUgdGltZWxpbmUuCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudC0+cmVu
ZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoTUVESUFfQ09OVFJPTFNfU1RBVFVTX0RJU1BM
QVkpKQorICAgIGlmICghbWVkaWFFbGVtZW50KCktPnJlbmRlcmVyKCktPmdldENhY2hlZFBzZXVk
b1N0eWxlKE1FRElBX0NPTlRST0xTX1NUQVRVU19ESVNQTEFZKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwor
ICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7CiAgICAgcmV0
dXJuICFpc25hbihkdXJhdGlvbikgJiYgIWlzaW5mKGR1cmF0aW9uKTsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWlu
ZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KERvY3Vt
ZW50KiBkb2MsIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xF
bGVtZW50KGRvYywgTUVESUFfQ09OVFJPTFNfVk9MVU1FX1NMSURFUl9DT05UQUlORVIsIGVsZW1l
bnQpCitpbmxpbmUgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6TWVk
aWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQpCisgICAgOiBNZWRpYUNvbnRyb2xFbGVtZW50KG1lZGlhRWxlbWVudCwgTUVE
SUFfQ09OVFJPTFNfVk9MVU1FX1NMSURFUl9DT05UQUlORVIpCiAgICAgLCBtX2lzVmlzaWJsZShm
YWxzZSkKICAgICAsIG1feCgwKQogICAgICwgbV95KDApCiB7CiB9CiAKK1Bhc3NSZWZQdHI8TWVk
aWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5l
ckVsZW1lbnQobWVkaWFFbGVtZW50KTsKK30KKwogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gTWVk
aWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6c3R5bGVGb3JFbGVtZW50KCkK
IHsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gTWVkaWFDb250cm9sRWxlbWVudDo6
c3R5bGVGb3JFbGVtZW50KCk7CkBAIC0yNjUsMTIgKzI5MCwxNyBAQCBib29sIE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckNvbnRhaW5lckVsCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFN0YXR1
c0Rpc3BsYXlFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgSFRNTE1lZGlhRWxlbWVudCogZWxl
bWVudCkKLSAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQoZG9jdW1lbnQsIE1FRElBX0NPTlRST0xT
X1NUQVRVU19ESVNQTEFZLCBlbGVtZW50KQoraW5saW5lIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3Bs
YXlFbGVtZW50OjpNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQpCisgICAgOiBNZWRpYUNvbnRyb2xFbGVtZW50KG1lZGlhRWxlbWVu
dCwgTUVESUFfQ09OVFJPTFNfU1RBVFVTX0RJU1BMQVkpCiAgICAgLCBtX3N0YXRlQmVpbmdEaXNw
bGF5ZWQoTm90aGluZykKIHsKIH0KIAorUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudD4gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBNZWRpYUNvbnRy
b2xTdGF0dXNEaXNwbGF5RWxlbWVudChtZWRpYUVsZW1lbnQpOworfQorCiB2b2lkIE1lZGlhQ29u
dHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50Ojp1cGRhdGUoKQogewogICAgIE1lZGlhQ29udHJvbEVs
ZW1lbnQ6OnVwZGF0ZSgpOwpAQCAtMjc4LDkgKzMwOCw5IEBAIHZvaWQgTWVkaWFDb250cm9sU3Rh
dHVzRGlzcGxheUVsZW1lbnQ6OnUKICAgICAvLyBHZXQgdGhlIG5ldyBzdGF0ZSB0aGF0IHdlJ2xs
IGhhdmUgdG8gZGlzcGxheS4KICAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG5ld1N0YXRlVG9EaXNw
bGF5ID0gTm90aGluZzsKIAotICAgIGlmIChtX21lZGlhRWxlbWVudC0+cmVhZHlTdGF0ZSgpICE9
IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVfRU5PVUdIX0RBVEEgJiYgIW1fbWVkaWFFbGVtZW50LT5j
dXJyZW50U3JjKCkuaXNFbXB0eSgpKQorICAgIGlmIChtZWRpYUVsZW1lbnQoKS0+cmVhZHlTdGF0
ZSgpICE9IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVfRU5PVUdIX0RBVEEgJiYgIW1lZGlhRWxlbWVu
dCgpLT5jdXJyZW50U3JjKCkuaXNFbXB0eSgpKQogICAgICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9
IExvYWRpbmc7Ci0gICAgZWxzZSBpZiAobV9tZWRpYUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSA9
PSBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbSkKKyAgICBlbHNlIGlmIChtZWRpYUVsZW1lbnQoKS0+
bW92aWVMb2FkVHlwZSgpID09IE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtKQogICAgICAgICBuZXdT
dGF0ZVRvRGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7CiAKICAgICAvLyBQcm9wYWdhdGUgb25seSBp
ZiBuZWVkZWQuCkBAIC0zMDYsMTQgKzMzNiwxNCBAQCBib29sIE1lZGlhQ29udHJvbFN0YXR1c0Rp
c3BsYXlFbGVtZW50OjpyCiB7CiAgICAgaWYgKCFNZWRpYUNvbnRyb2xFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKHN0eWxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZsb2F0IGR1cmF0
aW9uID0gbV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CisgICAgZmxvYXQgZHVyYXRpb24gPSBt
ZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKTsKICAgICByZXR1cm4gKGlzbmFuKGR1cmF0aW9uKSB8
fCBpc2luZihkdXJhdGlvbikpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAgICAgCi1NZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVu
dChEb2N1bWVudCogZG9jdW1lbnQsIFBzZXVkb0lkIHBzZXVkbywgY29uc3QgU3RyaW5nJiB0eXBl
LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBIVE1MSW5wdXRFbGVtZW50
KGlucHV0VGFnLCBkb2N1bWVudCkKK01lZGlhQ29udHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250
cm9sSW5wdXRFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgUHNldWRvSWQg
cHNldWRvLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBIVE1MSW5wdXRFbGVtZW50KGlucHV0
VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRp
YUVsZW1lbnQpCiAgICAgLCBtX3BzZXVkb1N0eWxlSWQocHNldWRvKQogewpAQCAtMzcyLDcgKzQw
Miw3IEBAIHZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGUoKQogCiBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVu
dCgpCiB7Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5nZXRDYWNoZWRQ
c2V1ZG9TdHlsZShtX3BzZXVkb1N0eWxlSWQpOworICAgIHJldHVybiBtZWRpYUVsZW1lbnQoKS0+
cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9wc2V1ZG9TdHlsZUlkKTsKIH0KIAog
Ym9vbCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUqIHN0eWxlKQpAQCAtMzgwLDcgKzQxMCw3IEBAIGJvb2wgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50OjpyZW5kZXJlckkKICAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKIAogICAgIHJl
dHVybiBIVE1MSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnQo
KSAmJiBwYXJlbnQoKS0+cmVuZGVyZXIoKQotICAgICAgICAmJiAoIXN0eWxlLT5oYXNBcHBlYXJh
bmNlKCkgfHwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRpYUNv
bnRyb2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KSk7CisgICAgICAg
ICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1l
KCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoc3R5bGUtPmFwcGVhcmFuY2UoKSwgbWVk
aWFFbGVtZW50KCkpKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmF0dGFj
aCgpCkBAIC0zOTIsNyArNDIyLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmF0
dGFjaCgpCiAgICAgYm9vbCBuZWVkc1JlbmRlcmVyID0gcmVuZGVyZXJJc05lZWRlZChzdHlsZS5n
ZXQoKSk7CiAgICAgaWYgKCFuZWVkc1JlbmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyKG1fbWVkaWFFbGVtZW50LT5yZW5k
ZXJlcigpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7CisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyKG1lZGlhRWxlbWVudCgpLT5yZW5kZXJlcigpLT5yZW5k
ZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0
dXJuOwogICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CkBAIC00MDksNyArNDM5
LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmF0dGFjaCgpCiAKIHZvaWQgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGVTdHlsZSgpCiB7Ci0gICAgaWYgKCFtX21lZGlh
RWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgaWYgKCFtZWRpYUVs
ZW1lbnQoKSB8fCAhbWVkaWFFbGVtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7
CkBAIC00NDUsMTUgKzQ3NSwyMCBAQCB2b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6c2V0
RGlzcGxhCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTWVkaWFDb250cm9s
TXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KERvY3VtZW50
KiBkb2N1bWVudCwgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKLSAgICA6IE1lZGlhQ29udHJv
bElucHV0RWxlbWVudChkb2N1bWVudCwgTUVESUFfQ09OVFJPTFNfTVVURV9CVVRUT04sICJidXR0
b24iLCBlbGVtZW50KQoraW5saW5lIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQp
CisgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFFbGVtZW50LCBNRURJQV9DT05U
Uk9MU19NVVRFX0JVVFRPTiwgImJ1dHRvbiIpCit7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFDb250
cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpjcmVh
dGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogeworICAgIHJldHVybiBuZXcgTWVk
aWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50KTsKIH0KIAogdm9pZCBNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
IHsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldE11dGVkKCFtX21lZGlhRWxlbWVudC0+bXV0
ZWQoKSk7CisgICAgICAgIG1lZGlhRWxlbWVudCgpLT5zZXRNdXRlZCghbWVkaWFFbGVtZW50KCkt
Pm11dGVkKCkpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAg
ICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CkBAIC00NjEs
MjAgKzQ5NiwyNSBAQCB2b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhCiAK
IHZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkK
IHsKLSAgICBzZXREaXNwbGF5VHlwZShtX21lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IE1lZGlhVW5N
dXRlQnV0dG9uIDogTWVkaWFNdXRlQnV0dG9uKTsKKyAgICBzZXREaXNwbGF5VHlwZShtZWRpYUVs
ZW1lbnQoKS0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVkaWFNdXRlQnV0dG9uKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NZWRpYUNvbnRyb2xQbGF5
QnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5w
dXRFbGVtZW50KGRvY3VtZW50LCBNRURJQV9DT05UUk9MU19QTEFZX0JVVFRPTiwgImJ1dHRvbiIs
IGVsZW1lbnQpCitpbmxpbmUgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKKyAg
ICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQsIE1FRElBX0NPTlRST0xT
X1BMQVlfQlVUVE9OLCAiYnV0dG9uIikKK3sKK30KKworUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQ
bGF5QnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiB7CisgICAgcmV0dXJuIG5ldyBNZWRpYUNv
bnRyb2xQbGF5QnV0dG9uRWxlbWVudChtZWRpYUVsZW1lbnQpOwogfQogCiB2b2lkIE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
IHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewot
ICAgICAgICBtX21lZGlhRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgICAgIG1lZGlh
RWxlbWVudCgpLT50b2dnbGVQbGF5U3RhdGUoKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CiAgICAgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOwpAQCAtNDgyLDIxICs1MjIsMjkgQEAgdm9pZCBNZWRpYUNvbnRyb2xQbGF5QnV0
dG9uRWxlbWVudDo6ZGVmYQogCiB2b2lkIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Ojp1
cGRhdGVEaXNwbGF5VHlwZSgpCiB7Ci0gICAgc2V0RGlzcGxheVR5cGUobV9tZWRpYUVsZW1lbnQt
PmNhblBsYXkoKSA/IE1lZGlhUGxheUJ1dHRvbiA6IE1lZGlhUGF1c2VCdXR0b24pOworICAgIHNl
dERpc3BsYXlUeXBlKG1lZGlhRWxlbWVudCgpLT5jYW5QbGF5KCkgPyBNZWRpYVBsYXlCdXR0b24g
OiBNZWRpYVBhdXNlQnV0dG9uKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1NZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sU2Vla0J1dHRv
bkVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50LCBi
b29sIGZvcndhcmQpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIGZv
cndhcmQgPyBNRURJQV9DT05UUk9MU19TRUVLX0ZPUldBUkRfQlVUVE9OIDogTUVESUFfQ09OVFJP
TFNfU0VFS19CQUNLX0JVVFRPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0
dG9uIiwgZWxlbWVudCkKLSAgICAsIG1fZm9yd2FyZChmb3J3YXJkKQoraW5saW5lIE1lZGlhQ29u
dHJvbFNlZWtCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudChIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIFBzZXVkb0lkIHBzZXVkb0lkKQorICAgIDogTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxlbWVudCwgcHNldWRvSWQsICJidXR0b24iKQog
ICAgICwgbV9zZWVraW5nKGZhbHNlKQogICAgICwgbV9jYXB0dXJpbmcoZmFsc2UpCiAgICAgLCBt
X3NlZWtUaW1lcih0aGlzLCAmTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OnNlZWtUaW1l
ckZpcmVkKQogewogfQogCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50
PiBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQq
IG1lZGlhRWxlbWVudCwgUHNldWRvSWQgcHNldWRvU3R5bGVJZCkKK3sKKyAgICByZXR1cm4gbmV3
IE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCwgcHNldWRvU3R5bGVJ
ZCk7Cit9CisKK2lubGluZSBib29sIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50Ojppc0Zv
cndhcmRCdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiBwc2V1ZG9TdHlsZUlkKCkgPT0gTUVE
SUFfQ09OVFJPTFNfU0VFS19GT1JXQVJEX0JVVFRPTjsKK30KKwogdm9pZCBNZWRpYUNvbnRyb2xT
ZWVrQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CkBA
IC01MDQsNyArNTUyLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6ZGVm
YQogICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSB0cnVlOwogICAgICAgICAgICAgZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUodGhpcyk7CiAgICAgICAg
IH0KLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKGV2ZW50LT5mcm9tVXNlckdlc3R1cmUo
KSk7CisgICAgICAgIG1lZGlhRWxlbWVudCgpLT5wYXVzZShldmVudC0+ZnJvbVVzZXJHZXN0dXJl
KCkpOwogICAgICAgICBtX3NlZWtUaW1lci5zdGFydFJlcGVhdGluZyhjU2Vla1JlcGVhdERlbGF5
KTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfSBlbHNlIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKQEAgLTUxNiw4ICs1
NjQsOCBAQCB2b2lkIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpkZWZhCiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIGlmIChtX3NlZWtpbmcgfHwgbV9zZWVrVGltZXIu
aXNBY3RpdmUoKSkgewogICAgICAgICAgICAgaWYgKCFtX3NlZWtpbmcpIHsKLSAgICAgICAgICAg
ICAgICBmbG9hdCBzdGVwVGltZSA9IG1fZm9yd2FyZCA/IGNTdGVwVGltZSA6IC1jU3RlcFRpbWU7
Ci0gICAgICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKG1fbWVkaWFF
bGVtZW50LT5jdXJyZW50VGltZSgpICsgc3RlcFRpbWUsIGVjKTsKKyAgICAgICAgICAgICAgICBm
bG9hdCBzdGVwVGltZSA9IGlzRm9yd2FyZEJ1dHRvbigpID8gY1N0ZXBUaW1lIDogLWNTdGVwVGlt
ZTsKKyAgICAgICAgICAgICAgICBtZWRpYUVsZW1lbnQoKS0+c2V0Q3VycmVudFRpbWUobWVkaWFF
bGVtZW50KCktPmN1cnJlbnRUaW1lKCkgKyBzdGVwVGltZSwgZWMpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9zZWVrVGltZXIuc3RvcCgpOwogICAgICAgICAgICAgbV9zZWVraW5nID0g
ZmFsc2U7CkBAIC01MzEsOCArNTc5LDggQEAgdm9pZCBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxl
bWVudDo6c2VlawogewogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgbV9zZWVraW5nID0gdHJ1
ZTsKLSAgICBmbG9hdCBzZWVrVGltZSA9IG1fZm9yd2FyZCA/IGNTZWVrVGltZSA6IC1jU2Vla1Rp
bWU7Ci0gICAgbV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKG1fbWVkaWFFbGVtZW50LT5j
dXJyZW50VGltZSgpICsgc2Vla1RpbWUsIGVjKTsKKyAgICBmbG9hdCBzZWVrVGltZSA9IGlzRm9y
d2FyZEJ1dHRvbigpID8gY1NlZWtUaW1lIDogLWNTZWVrVGltZTsKKyAgICBtZWRpYUVsZW1lbnQo
KS0+c2V0Q3VycmVudFRpbWUobWVkaWFFbGVtZW50KCktPmN1cnJlbnRUaW1lKCkgKyBzZWVrVGlt
ZSwgZWMpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpkZXRhY2go
KQpAQCAtNTQ0LDE4ICs1OTIsMjIgQEAgdm9pZCBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVu
dDo6ZGV0YQogICAgIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKLQog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NZWRpYUNvbnRyb2xSZXdpbmRCdXR0
b25FbGVtZW50OjpNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0
RWxlbWVudChkb2N1bWVudCwgTUVESUFfQ09OVFJPTFNfUkVXSU5EX0JVVFRPTiwgImJ1dHRvbiIs
IGVsZW1lbnQpCitpbmxpbmUgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6TWVkaWFD
b250cm9sUmV3aW5kQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQorICAg
IDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KGVsZW1lbnQsIE1FRElBX0NPTlRST0xTX1JFV0lO
RF9CVVRUT04sICJidXR0b24iKQogewogfQogCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFJld2lu
ZEJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBNZWRpYUNv
bnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCk7Cit9CisKIHZvaWQgTWVkaWFD
b250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
IHsKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJld2luZCgzMCk7CisgICAgICAgIG1lZGlhRWxl
bWVudCgpLT5yZXdpbmQoMzApOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICB9ICAgIAogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOwpAQCAtNTY0LDE1ICs2MTYsMjAgQEAgdm9pZCBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25F
bGVtZW50OjpkZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU1lZGlhQ29u
dHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xSZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQq
IGVsZW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1FRElB
X0NPTlRST0xTX1JFVFVSTl9UT19SRUFMVElNRV9CVVRUT04sICJidXR0b24iLCBlbGVtZW50KQor
aW5saW5lIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OjpNZWRpYUNv
bnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQpCisgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFFbGVtZW50LCBN
RURJQV9DT05UUk9MU19SRVRVUk5fVE9fUkVBTFRJTUVfQlVUVE9OLCAiYnV0dG9uIikKIHsKIH0K
IAorUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4g
TWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBNZWRpYUNvbnRyb2xS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChtZWRpYUVsZW1lbnQpOworfQorCiB2b2lkIE1l
ZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewotICAgICAgICBtX21lZGlhRWxlbWVudC0+cmV0dXJuVG9SZWFsdGlt
ZSgpOworICAgICAgICBtZWRpYUVsZW1lbnQoKS0+cmV0dXJuVG9SZWFsdGltZSgpOwogICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAgSFRNTElucHV0RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CkBAIC01ODEsMTYgKzYzOCwyMSBAQCB2b2lk
IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25F
bGVtZW50OjpNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoRG9j
dW1lbnQqIGRvYywgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKLSAgICA6IE1lZGlhQ29udHJv
bElucHV0RWxlbWVudChkb2MsIE1FRElBX0NPTlRST0xTX1RPR0dMRV9DTE9TRURfQ0FQVElPTlNf
QlVUVE9OLCAiYnV0dG9uIiwgZWxlbWVudCkKK2lubGluZSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCisgICAgOiBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFFbGVtZW50LCBNRURJQV9DT05UUk9MU19UT0dHTEVf
Q0xPU0VEX0NBUFRJT05TX0JVVFRPTiwgImJ1dHRvbiIpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8TWVk
aWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xU
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50
KiBtZWRpYUVsZW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50KTsKK30KKwogdm9pZCBNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDbG9zZWRDYXB0aW9u
c1Zpc2libGUoIW1fbWVkaWFFbGVtZW50LT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKSk7Ci0gICAg
ICAgIHNldENoZWNrZWQobV9tZWRpYUVsZW1lbnQtPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsK
KyAgICAgICAgbWVkaWFFbGVtZW50KCktPnNldENsb3NlZENhcHRpb25zVmlzaWJsZSghbWVkaWFF
bGVtZW50KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsKKyAgICAgICAgc2V0Q2hlY2tlZCht
ZWRpYUVsZW1lbnQoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkpOwogICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7CkBAIC01OTgsMTcgKzY2MCwyMSBAQCB2b2lkIE1lZGlhQ29u
dHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0CiAKIHZvaWQgTWVkaWFDb250cm9sVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50Ojp1cGRhdGVEaXNwbGF5VHlwZSgpCiB7Ci0gICAgc2V0
RGlzcGxheVR5cGUobV9tZWRpYUVsZW1lbnQtPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpID8gTWVk
aWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gOiBNZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRv
bik7CisgICAgc2V0RGlzcGxheVR5cGUobWVkaWFFbGVtZW50KCktPmNsb3NlZENhcHRpb25zVmlz
aWJsZSgpID8gTWVkaWFIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gOiBNZWRpYVNob3dDbG9zZWRD
YXB0aW9uc0J1dHRvbik7CiB9CiAKLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1NZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVu
dChEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBN
ZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoZG9jdW1lbnQsIE1FRElBX0NPTlRST0xTX1RJTUVMSU5F
LCAicmFuZ2UiLCBlbGVtZW50KQorTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQorICAg
IDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxlbWVudCwgTUVESUFfQ09OVFJPTFNf
VElNRUxJTkUsICJyYW5nZSIpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxp
bmVFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQobWVkaWFFbGVtZW50KTsKK30KKwogdm9pZCBNZWRpYUNvbnRyb2xUaW1lbGlu
ZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8vIExl
ZnQgYnV0dG9uIGlzIDAuIFJlamVjdHMgbW91c2UgZXZlbnRzIG5vdCBmcm9tIGxlZnQgYnV0dG9u
LgpAQCAtNjE5LDcgKzY4NSw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50Ojpk
ZWZhdWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlZG93bkV2ZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1
YmJpbmcoKTsKKyAgICAgICAgbWVkaWFFbGVtZW50KCktPmJlZ2luU2NydWJiaW5nKCk7CiAKICAg
ICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwog
CkBAIC02MjcsMzQgKzY5MywzOSBAQCB2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6
ZGVmYXVsCiAgICAgICAgIHJldHVybjsKIAogICAgIGZsb2F0IHRpbWUgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KHZhbHVlKCkudG9Eb3VibGUoKSk7Ci0gICAgaWYgKHRpbWUgIT0gbV9tZWRpYUVs
ZW1lbnQtPmN1cnJlbnRUaW1lKCkpIHsKKyAgICBpZiAodGltZSAhPSBtZWRpYUVsZW1lbnQoKS0+
Y3VycmVudFRpbWUoKSkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBtX21l
ZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSwgZWMpOworICAgICAgICBtZWRpYUVsZW1l
bnQoKS0+c2V0Q3VycmVudFRpbWUodGltZSwgZWMpOwogICAgIH0KIAogICAgIFJlbmRlclNsaWRl
ciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKSk7CiAgICAgaWYgKHNsaWRlciAm
JiBzbGlkZXItPmluRHJhZ01vZGUoKSkKLSAgICAgICAgdG9SZW5kZXJNZWRpYShtX21lZGlhRWxl
bWVudC0+cmVuZGVyZXIoKSktPnVwZGF0ZVRpbWVEaXNwbGF5KCk7CisgICAgICAgIHRvUmVuZGVy
TWVkaWEobWVkaWFFbGVtZW50KCktPnJlbmRlcmVyKCkpLT51cGRhdGVUaW1lRGlzcGxheSgpOwog
CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKLSAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOworICAgICAgICBtZWRpYUVsZW1l
bnQoKS0+ZW5kU2NydWJiaW5nKCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50Ojp1cGRhdGUoYm9vbCB1cGRhdGVEdXJhdGlvbikgCiB7CiAgICAgaWYgKHVwZGF0ZUR1cmF0
aW9uKSB7Ci0gICAgICAgIGZsb2F0IGR1ciA9IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwot
ICAgICAgICBzZXRBdHRyaWJ1dGUobWF4QXR0ciwgU3RyaW5nOjpudW1iZXIoaXNmaW5pdGUoZHVy
KSA/IGR1ciA6IDApKTsKKyAgICAgICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQoKS0+
ZHVyYXRpb24oKTsKKyAgICAgICAgc2V0QXR0cmlidXRlKG1heEF0dHIsIFN0cmluZzo6bnVtYmVy
KGlzZmluaXRlKGR1cmF0aW9uKSA/IGR1cmF0aW9uIDogMCkpOwogICAgIH0KLSAgICBzZXRWYWx1
ZShTdHJpbmc6Om51bWJlcihtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSkpOworICAgIHNl
dFZhbHVlKFN0cmluZzo6bnVtYmVyKG1lZGlhRWxlbWVudCgpLT5jdXJyZW50VGltZSgpKSk7CiAg
ICAgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGUoKTsKIH0KIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgSFRNTE1l
ZGlhRWxlbWVudCogZWxlbWVudCkKLSAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChkb2N1
bWVudCwgTUVESUFfQ09OVFJPTFNfVk9MVU1FX1NMSURFUiwgInJhbmdlIiwgZWxlbWVudCkKK2lu
bGluZSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKKyAgICA6IE1lZGlh
Q29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQsIE1FRElBX0NPTlRST0xTX1ZPTFVNRV9T
TElERVIsICJyYW5nZSIpCit7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6Y3JlYXRlKEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKIHsKKyAgICByZXR1cm4gbmV3IE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckVsZW1lbnQobWVkaWFFbGVtZW50KTsKIH0KIAogdm9pZCBNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
QEAgLTY3MiwxNiArNzQzLDE2IEBAIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dDo6ZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgZmxvYXQgdm9sdW1lID0gbmFycm93UHJlY2lz
aW9uVG9GbG9hdCh2YWx1ZSgpLnRvRG91YmxlKCkpOwotICAgIGlmICh2b2x1bWUgIT0gbV9tZWRp
YUVsZW1lbnQtPnZvbHVtZSgpKSB7CisgICAgaWYgKHZvbHVtZSAhPSBtZWRpYUVsZW1lbnQoKS0+
dm9sdW1lKCkpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIG1fbWVk
aWFFbGVtZW50LT5zZXRWb2x1bWUodm9sdW1lLCBlYyk7CisgICAgICAgIG1lZGlhRWxlbWVudCgp
LT5zZXRWb2x1bWUodm9sdW1lLCBlYyk7CiAgICAgICAgIEFTU0VSVCghZWMpOwogICAgIH0KIH0K
IAogdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50Ojp1cGRhdGUoKQogewotICAg
IGZsb2F0IHZvbHVtZSA9IG1fbWVkaWFFbGVtZW50LT52b2x1bWUoKTsKKyAgICBmbG9hdCB2b2x1
bWUgPSBtZWRpYUVsZW1lbnQoKS0+dm9sdW1lKCk7CiAgICAgaWYgKHZhbHVlKCkudG9GbG9hdCgp
ICE9IHZvbHVtZSkKICAgICAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodm9sdW1lKSk7CiAg
ICAgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGUoKTsKQEAgLTY4OSwxNSArNzYwLDIw
IEBAIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6dXAKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxl
bWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQotICAgIDogTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KGRvY3VtZW50LCBNRURJQV9DT05UUk9MU19GVUxMU0NSRUVOX0JVVFRPTiwgImJ1dHRv
biIsIGVsZW1lbnQpCitpbmxpbmUgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6
Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKKyAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQs
IE1FRElBX0NPTlRST0xTX0ZVTExTQ1JFRU5fQlVUVE9OLCAiYnV0dG9uIikKK3sKK30KKworUGFz
c1JlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9s
RnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCiB7CisgICAgcmV0dXJuIG5ldyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxl
bWVudChtZWRpYUVsZW1lbnQpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBtX21l
ZGlhRWxlbWVudC0+ZW50ZXJGdWxsc2NyZWVuKCk7CisgICAgICAgIG1lZGlhRWxlbWVudCgpLT5l
bnRlckZ1bGxzY3JlZW4oKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwpA
QCAtNzA1LDEzICs3ODEsMTggQEAgdm9pZCBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxl
bWVudAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU1lZGlhQ29udHJvbFRp
bWVEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KERvY3VtZW50
KiBkb2N1bWVudCwgUHNldWRvSWQgcHNldWRvLCBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQot
ICAgIDogTWVkaWFDb250cm9sRWxlbWVudChkb2N1bWVudCwgcHNldWRvLCBlbGVtZW50KQoraW5s
aW5lIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sVGltZURpc3Bs
YXlFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgUHNldWRvSWQgcHNldWRv
KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1lbnQsIHBzZXVkbykKICAgICAs
IG1fY3VycmVudFZhbHVlKDApCiAgICAgLCBtX2lzVmlzaWJsZSh0cnVlKQogewogfQogCitQYXNz
UmVmUHRyPE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sVGltZURp
c3BsYXlFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50LCBQc2V1
ZG9JZCBwc2V1ZG9TdHlsZUlkKQoreworICAgIHJldHVybiBuZXcgTWVkaWFDb250cm9sVGltZURp
c3BsYXlFbGVtZW50KG1lZGlhRWxlbWVudCwgcHNldWRvU3R5bGVJZCk7Cit9CisKIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6c3R5bGVGb3JF
bGVtZW50KCkKIHsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gTWVkaWFDb250cm9s
RWxlbWVudDo6c3R5bGVGb3JFbGVtZW50KCk7CkBAIC03NDIsNiArODIzLDYgQEAgdm9pZCBNZWRp
YUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6OnNldAogICAgIG1fY3VycmVudFZhbHVlID0gdGlt
ZTsKIH0KIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19IC8vbmFtZXNwYWNlIFdlYkNvcmUK
LSNlbmRpZiAvLyBlbmFibGUodmlkZW8pCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCShyZXZpc2lvbiA2MDM3NCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTcyLDE0ICs3MiwxNiBAQCBIVE1MTWVkaWFFbGVtZW50KiB0b1BhcmVu
dE1lZGlhRWxlbWVudChSCiAKIGNsYXNzIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50IDog
cHVibGljIEhUTUxEaXZFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xTaGFkb3dS
b290RWxlbWVudChEb2N1bWVudCosIEhUTUxNZWRpYUVsZW1lbnQqKTsKLSAgICAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTaGFkb3dOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgTm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50OyB9Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IGNyZWF0
ZShIVE1MTWVkaWFFbGVtZW50Kik7CiAKICAgICB2b2lkIHVwZGF0ZVN0eWxlKCk7CiAgICAgCiBw
cml2YXRlOgorICAgIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkb3dOb2RlKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgTm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJu
IG1fbWVkaWFFbGVtZW50OyB9CisKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21lZGlhRWxlbWVu
dDsgICAgCiB9OwogCkBAIC04NywyMSArODksMjcgQEAgcHJpdmF0ZToKIAogY2xhc3MgTWVkaWFD
b250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgTWVk
aWFDb250cm9sRWxlbWVudChEb2N1bWVudCosIFBzZXVkb0lkLCBIVE1MTWVkaWFFbGVtZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
RWxlbWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqLCBQc2V1ZG9JZCk7CiAKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudCgpOworICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKICAgICB2b2lkIGF0dGFjaFRvUGFyZW50KEVsZW1lbnQqKTsKICAg
ICB2b2lkIHVwZGF0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZSgpOworICAgIHZv
aWQgdXBkYXRlU3R5bGUoKTsKIAogICAgIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5VHlwZTsgfQogCiAgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQ7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCiBwcm90ZWN0ZWQ6CisgICAgTWVkaWFDb250cm9sRWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50KiwgUHNldWRvSWQpOworCisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUqKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVG
b3JFbGVtZW50KCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzTWVkaWFDb250cm9s
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIEhUTUxNZWRpYUVsZW1lbnQq
IG1fbWVkaWFFbGVtZW50OyAgIAogICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGVJZDsKICAgICBN
ZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBtX2Rpc3BsYXlUeXBlOyAgLy8gc29tZSBlbGVtZW50cyBj
YW4gc2hvdyBtdWx0aXBsZSB0eXBlcyAoZS5nLiBwbGF5L3BhdXNlKQpAQCAtMTExLDcgKzExOSwx
MCBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxl
bWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNv
bnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MTWVkaWFFbGVtZW50
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworCitwcml2YXRlOgorICAgIE1lZGlh
Q29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiAgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKIH07CiAKQEAgLTEx
OSw3ICsxMzAsOCBAQCBwdWJsaWM6CiAKIGNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNv
bnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CiBwdWJsaWM6Ci0g
ICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCosIEhU
TUxNZWRpYUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKICAg
ICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAgICAgYm9vbCBpc1Zpc2libGUoKSB7IHJldHVybiBt
X2lzVmlzaWJsZTsgfQpAQCAtMTI3LDYgKzEzOSw4IEBAIHB1YmxpYzoKICAgICBib29sIGhpdFRl
c3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsKIAogcHJpdmF0ZToKKyAgICBNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKwogICAg
IGJvb2wgbV9pc1Zpc2libGU7CiAgICAgaW50IG1feCwgbV95OwogfTsKQEAgLTEzNSwxMCArMTQ5
LDE1IEBAIHByaXZhdGU6CiAKIGNsYXNzIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50
IDogcHVibGljIE1lZGlhQ29udHJvbEVsZW1lbnQgewogcHVibGljOgotICAgIE1lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXlFbGVtZW50KERvY3VtZW50KiwgSFRNTE1lZGlhRWxlbWVudCopOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFN0YXR1
c0Rpc3BsYXlFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworCisgICAgdm9pZCB1
cGRhdGUoKTsKKwogcHJpdmF0ZToKKyAgICBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVu
dChIVE1MTWVkaWFFbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSopOworCiAgICAgZW51bSBTdGF0ZUJlaW5nRGlzcGxheWVkIHsgTm90aGlu
ZywgTG9hZGluZywgTGl2ZUJyb2FkY2FzdCB9OwogICAgIFN0YXRlQmVpbmdEaXNwbGF5ZWQgbV9z
dGF0ZUJlaW5nRGlzcGxheWVkOwogfTsKQEAgLTE0NywyNSArMTY2LDMzIEBAIHByaXZhdGU6CiAK
IGNsYXNzIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MSW5wdXRFbGVtZW50
IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoRG9jdW1lbnQqLCBQc2V1
ZG9JZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBIVE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlKik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
RWxlbWVudCgpOwogICAgIHZvaWQgYXR0YWNoVG9QYXJlbnQoRWxlbWVudCopOwogICAgIHZvaWQg
dXBkYXRlKCk7CiAgICAgdm9pZCB1cGRhdGVTdHlsZSgpOwogCiAgICAgYm9vbCBoaXRUZXN0KGNv
bnN0IEludFBvaW50JiBhYnNQb2ludCk7CisKICAgICBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBk
aXNwbGF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheVR5cGU7IH0KIAogICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50
OyB9Ci0gICAgdmlydHVhbCBib29sIGlzTWVkaWFDb250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5
VHlwZSgpIHsgfQorICAgIE1lZGlhQ29udHJvbElucHV0RWxlbWVudChIVE1MTWVkaWFFbGVtZW50
KiwgUHNldWRvSWQsIGNvbnN0IFN0cmluZyYgdHlwZSk7CisKICAgICB2b2lkIHNldERpc3BsYXlU
eXBlKE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsKIAorICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxl
SWQoKSBjb25zdCB7IHJldHVybiBtX3BzZXVkb1N0eWxlSWQ7IH0KKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUqKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5
bGVGb3JFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3Bs
YXlUeXBlKCkgeyB9CisKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21lZGlhRWxlbWVudDsgICAK
ICAgICBQc2V1ZG9JZCBtX3BzZXVkb1N0eWxlSWQ7CiAgICAgTWVkaWFDb250cm9sRWxlbWVudFR5
cGUgbV9kaXNwbGF5VHlwZTsKQEAgLTE3NSw4ICsyMDIsMTMgQEAgcHJvdGVjdGVkOgogCiBjbGFz
cyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQgewogcHVibGljOgotICAgIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KERv
Y3VtZW50KiwgSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
Q29udHJvbE11dGVCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworCiAg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKworcHJpdmF0ZToK
KyAgICBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CisK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKIH07CiAKQEAgLTE4NCw4ICsy
MTYsMTMgQEAgcHVibGljOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewogcHVibGljOgotICAgIE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50KERvY3VtZW50KiwgSFRNTE1lZGlhRWxlbWVudCopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBjcmVhdGUo
SFRNTE1lZGlhRWxlbWVudCopOworCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVu
dChIVE1MTWVkaWFFbGVtZW50Kik7CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5
cGUoKTsKIH07CiAKQEAgLTE5MywxMyArMjMwLDE4IEBAIHB1YmxpYzoKIAogY2xhc3MgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudChEb2N1bWVudCos
IEhUTUxNZWRpYUVsZW1lbnQqLCBib29sIGZvcndhcmQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCos
IFBzZXVkb0lkKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Kik7CisKK3ByaXZhdGU6CisgICAgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoSFRNTE1l
ZGlhRWxlbWVudCosIFBzZXVkb0lkKTsKKworICAgIGJvb2wgaXNGb3J3YXJkQnV0dG9uKCkgY29u
c3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBzZWVrVGltZXJGaXJl
ZChUaW1lcjxNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudD4qKTsKIAotcHJpdmF0ZToKLSAg
ICBib29sIG1fZm9yd2FyZDsKICAgICBib29sIG1fc2Vla2luZzsKICAgICBib29sIG1fY2FwdHVy
aW5nOwogICAgIFRpbWVyPE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50PiBtX3NlZWtUaW1l
cjsKQEAgLTIwOSwyNCArMjUxLDM3IEBAIHByaXZhdGU6CiAKIGNsYXNzIE1lZGlhQ29udHJvbFJl
d2luZEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKIHB1
YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KERvY3VtZW50KiwgSFRN
TE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFJld2lu
ZEJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CisKICAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAgIE1lZGlh
Q29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogfTsKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBNZWRpYUNvbnRyb2xSZXR1cm5U
b1JlYWx0aW1lQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQg
ewogcHVibGljOgotICAgIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50
KERvY3VtZW50KiwgSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCopOworCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
KTsKKworcHJpdmF0ZToKKyAgICBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxl
bWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiB9OyAgICAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBjbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRv
bkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKLSAg
ICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQq
LCBIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVu
dCopOworCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKwor
cHJpdmF0ZToKKyAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1l
bnQoSFRNTE1lZGlhRWxlbWVudCopOworCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlU
eXBlKCk7CiB9OyAgICAKIApAQCAtMjM0LDQwICsyODksNTUgQEAgcHVibGljOgogCiBjbGFzcyBN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoRG9jdW1lbnQq
LCBIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
VGltZWxpbmVFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworCiAgICAgdmlydHVh
bCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKICAgICB2b2lkIHVwZGF0ZShib29s
IHVwZGF0ZUR1cmF0aW9uID0gdHJ1ZSk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCA6
IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewogcHVibGljOgotICAgIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MTWVkaWFFbGVtZW50Kik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudD4gY3Jl
YXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZSgpOworICAgIHZvaWQgdXBk
YXRlKCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChI
VE1MTWVkaWFFbGVtZW50Kik7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIGNsYXNzIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50IDogcHVibGljIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgTWVkaWFDb250cm9sRnVsbHNj
cmVlbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IGNyZWF0
ZShIVE1MTWVkaWFFbGVtZW50Kik7CisKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0
b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogY2xhc3MgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50IDogcHVi
bGljIE1lZGlhQ29udHJvbEVsZW1lbnQgewogcHVibGljOgotICAgIE1lZGlhQ29udHJvbFRpbWVE
aXNwbGF5RWxlbWVudChEb2N1bWVudCosIFBzZXVkb0lkLCBIVE1MTWVkaWFFbGVtZW50Kik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50PiBjcmVh
dGUoSFRNTE1lZGlhRWxlbWVudCosIFBzZXVkb0lkKTsKKwogICAgIHZvaWQgc2V0VmlzaWJsZShi
b29sKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVu
dCgpOwogCiAgICAgdm9pZCBzZXRDdXJyZW50VmFsdWUoZmxvYXQpOwogICAgIGZsb2F0IGN1cnJl
bnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9CiAKIHByaXZhdGU6Cisg
ICAgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqLCBQc2V1
ZG9JZCk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxl
bWVudCgpOwogICAgIGZsb2F0IG1fY3VycmVudFZhbHVlOwogICAgIGJvb2wgbV9pc1Zpc2libGU7
CiB9OwpAQCAtMjgyLDcgKzM1Miw4IEBAIHB1YmxpYzoKICAgICAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZiAvLyBlbmFi
bGUodmlkZW8pCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKICNlbmRpZiAvLyBNZWRpYUNv
bnRyb2xFbGVtZW50c19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTcgKzUwLDMw
IEBAIGNvbnN0IGludCBpY29uRmlsZW5hbWVTcGFjaW5nID0gMjsKIGNvbnN0IGludCBkZWZhdWx0
V2lkdGhOdW1DaGFycyA9IDM0OwogY29uc3QgaW50IGJ1dHRvblNoYWRvd0hlaWdodCA9IDI7CiAK
LWNsYXNzIEhUTUxGaWxlVXBsb2FkSW5uZXJCdXR0b25FbGVtZW50IDogcHVibGljIEhUTUxJbnB1
dEVsZW1lbnQgeworY2xhc3MgU2hhZG93SW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVs
ZW1lbnQgewogcHVibGljOgotICAgIEhUTUxGaWxlVXBsb2FkSW5uZXJCdXR0b25FbGVtZW50KERv
Y3VtZW50KiwgTm9kZSogc2hhZG93UGFyZW50KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFk
b3dJbnB1dEVsZW1lbnQ+IGNyZWF0ZShOb2RlKiBzaGFkb3dQYXJlbnQpOworCitwcml2YXRlOgor
ICAgIFNoYWRvd0lucHV0RWxlbWVudChOb2RlKiBzaGFkb3dQYXJlbnQpOwogCiAgICAgdmlydHVh
bCBib29sIGlzU2hhZG93Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IE5vZGUqIHNoYWRvd1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQogCi1w
cml2YXRlOgogICAgIE5vZGUqIG1fc2hhZG93UGFyZW50OyAgICAKIH07CiAKK2lubGluZSBTaGFk
b3dJbnB1dEVsZW1lbnQ6OlNoYWRvd0lucHV0RWxlbWVudChOb2RlKiBzaGFkb3dQYXJlbnQpCisg
ICAgOiBIVE1MSW5wdXRFbGVtZW50KGlucHV0VGFnLCBzaGFkb3dQYXJlbnQtPmRvY3VtZW50KCkp
CisgICAgLCBtX3NoYWRvd1BhcmVudChzaGFkb3dQYXJlbnQpCit7Cit9CisKK2lubGluZSBQYXNz
UmVmUHRyPFNoYWRvd0lucHV0RWxlbWVudD4gU2hhZG93SW5wdXRFbGVtZW50OjpjcmVhdGUoTm9k
ZSogc2hhZG93UGFyZW50KQoreworICAgIHJldHVybiBuZXcgU2hhZG93SW5wdXRFbGVtZW50KHNo
YWRvd1BhcmVudCk7Cit9CisKIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCkKICAgICA6IFJlbmRlckJsb2NrKGlu
cHV0KQogICAgICwgbV9idXR0b24oMCkKQEAgLTE0Myw3ICsxNTYsNyBAQCB2b2lkIFJlbmRlckZp
bGVVcGxvYWRDb250cm9sOjp1cGRhdGVGcm9tCiAgICAgQVNTRVJUKGlucHV0RWxlbWVudC0+aW5w
dXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6RklMRSk7CiAgICAgCiAgICAgaWYgKCFtX2J1
dHRvbikgewotICAgICAgICBtX2J1dHRvbiA9IG5ldyBIVE1MRmlsZVVwbG9hZElubmVyQnV0dG9u
RWxlbWVudChkb2N1bWVudCgpLCBpbnB1dEVsZW1lbnQpOworICAgICAgICBtX2J1dHRvbiA9IFNo
YWRvd0lucHV0RWxlbWVudDo6Y3JlYXRlKGlucHV0RWxlbWVudCk7CiAgICAgICAgIG1fYnV0dG9u
LT5zZXRJbnB1dFR5cGUoImJ1dHRvbiIpOwogICAgICAgICBtX2J1dHRvbi0+c2V0VmFsdWUoZmls
ZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpKTsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBi
dXR0b25TdHlsZSA9IGNyZWF0ZUJ1dHRvblN0eWxlKHN0eWxlKCkpOwpAQCAtMzEzLDEwICszMjYs
NCBAQCBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmZpbGVUZXh0CiAgICAgcmV0dXJu
IG1fZmlsZUNob29zZXItPmJhc2VuYW1lRm9yV2lkdGgoc3R5bGUoKS0+Zm9udCgpLCBtYXhGaWxl
bmFtZVdpZHRoKCkpOwogfQogICAgIAotSFRNTEZpbGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1lbnQ6
OkhUTUxGaWxlVXBsb2FkSW5uZXJCdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2MsIE5vZGUqIHNo
YWRvd1BhcmVudCkKLSAgICA6IEhUTUxJbnB1dEVsZW1lbnQoaW5wdXRUYWcsIGRvYykKLSAgICAs
IG1fc2hhZG93UGFyZW50KHNoYWRvd1BhcmVudCkKLXsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAkocmV2aXNpb24gNjAzNzQpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
MCw4NCArMTcwLDg0IEBAIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91dCgpCiB2b2lkIFJlbmRlck1l
ZGlhOjpjcmVhdGVDb250cm9sc1NoYWRvd1Jvb3QoKQogewogICAgIEFTU0VSVCghbV9jb250cm9s
c1NoYWRvd1Jvb3QpOwotICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gbmV3IE1lZGlhQ29udHJv
bFNoYWRvd1Jvb3RFbGVtZW50KGRvY3VtZW50KCksIG1lZGlhRWxlbWVudCgpKTsKKyAgICBtX2Nv
bnRyb2xzU2hhZG93Um9vdCA9IE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50OjpjcmVhdGUo
bWVkaWFFbGVtZW50KCkpOwogICAgIGFkZENoaWxkKG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5k
ZXJlcigpKTsKIH0KIAogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlUGFuZWwoKQogewogICAgIEFT
U0VSVCghbV9wYW5lbCk7Ci0gICAgbV9wYW5lbCA9IG5ldyBNZWRpYUNvbnRyb2xFbGVtZW50KGRv
Y3VtZW50KCksIE1FRElBX0NPTlRST0xTX1BBTkVMLCBtZWRpYUVsZW1lbnQoKSk7CisgICAgbV9w
YW5lbCA9IE1lZGlhQ29udHJvbEVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQoKSwgTUVESUFf
Q09OVFJPTFNfUEFORUwpOwogICAgIG1fcGFuZWwtPmF0dGFjaFRvUGFyZW50KG1fY29udHJvbHNT
aGFkb3dSb290LmdldCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlTXV0ZUJ1dHRv
bigpCiB7CiAgICAgQVNTRVJUKCFtX211dGVCdXR0b24pOwotICAgIG1fbXV0ZUJ1dHRvbiA9IG5l
dyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChkb2N1bWVudCgpLCBtZWRpYUVsZW1lbnQo
KSk7CisgICAgbV9tdXRlQnV0dG9uID0gTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNy
ZWF0ZShtZWRpYUVsZW1lbnQoKSk7CiAgICAgbV9tdXRlQnV0dG9uLT5hdHRhY2hUb1BhcmVudCht
X3BhbmVsLmdldCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlUGxheUJ1dHRvbigp
CiB7CiAgICAgQVNTRVJUKCFtX3BsYXlCdXR0b24pOwotICAgIG1fcGxheUJ1dHRvbiA9IG5ldyBN
ZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudChkb2N1bWVudCgpLCBtZWRpYUVsZW1lbnQoKSk7
CisgICAgbV9wbGF5QnV0dG9uID0gTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShtZWRpYUVsZW1lbnQoKSk7CiAgICAgbV9wbGF5QnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3Bh
bmVsLmdldCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlU2Vla0JhY2tCdXR0b24o
KQogewogICAgIEFTU0VSVCghbV9zZWVrQmFja0J1dHRvbik7Ci0gICAgbV9zZWVrQmFja0J1dHRv
biA9IG5ldyBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudChkb2N1bWVudCgpLCBtZWRpYUVs
ZW1lbnQoKSwgZmFsc2UpOworICAgIG1fc2Vla0JhY2tCdXR0b24gPSBNZWRpYUNvbnRyb2xTZWVr
QnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpLCBNRURJQV9DT05UUk9MU19TRUVL
X0JBQ0tfQlVUVE9OKTsKICAgICBtX3NlZWtCYWNrQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3Bh
bmVsLmdldCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlU2Vla0ZvcndhcmRCdXR0
b24oKQogewogICAgIEFTU0VSVCghbV9zZWVrRm9yd2FyZEJ1dHRvbik7Ci0gICAgbV9zZWVrRm9y
d2FyZEJ1dHRvbiA9IG5ldyBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudChkb2N1bWVudCgp
LCBtZWRpYUVsZW1lbnQoKSwgdHJ1ZSk7CisgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbiA9IE1lZGlh
Q29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCksIE1FRElBX0NP
TlRST0xTX1NFRUtfRk9SV0FSRF9CVVRUT04pOwogICAgIG1fc2Vla0ZvcndhcmRCdXR0b24tPmF0
dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwogfQogCiB2b2lkIFJlbmRlck1lZGlhOjpjcmVh
dGVSZXdpbmRCdXR0b24oKQogewogICAgIEFTU0VSVCghbV9yZXdpbmRCdXR0b24pOwotICAgIG1f
cmV3aW5kQnV0dG9uID0gbmV3IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQoZG9jdW1l
bnQoKSwgbWVkaWFFbGVtZW50KCkpOworICAgIG1fcmV3aW5kQnV0dG9uID0gTWVkaWFDb250cm9s
UmV3aW5kQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpKTsKICAgICBtX3Jld2lu
ZEJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7CiB9CiAKIHZvaWQgUmVuZGVy
TWVkaWE6OmNyZWF0ZVJldHVyblRvUmVhbHRpbWVCdXR0b24oKQogewogICAgIEFTU0VSVCghbV9y
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKTsKLSAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSBu
ZXcgTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQoKSwg
bWVkaWFFbGVtZW50KCkpOworICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbiA9IE1lZGlhQ29u
dHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCkp
OwogICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5n
ZXQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uKCkKIHsKICAgICBBU1NFUlQoIW1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pOwot
ICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSBuZXcgTWVkaWFDb250cm9sVG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KGRvY3VtZW50KCksIG1lZGlhRWxlbWVudCgpKTsK
KyAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uID0gTWVkaWFDb250cm9sVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KCkpOwogICAgIG1f
dG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkp
OwogfQogCiB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVTdGF0dXNEaXNwbGF5KCkKIHsKICAgICBB
U1NFUlQoIW1fc3RhdHVzRGlzcGxheSk7Ci0gICAgbV9zdGF0dXNEaXNwbGF5ID0gbmV3IE1lZGlh
Q29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KGRvY3VtZW50KCksIG1lZGlhRWxlbWVudCgpKTsK
KyAgICBtX3N0YXR1c0Rpc3BsYXkgPSBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6
Y3JlYXRlKG1lZGlhRWxlbWVudCgpKTsKICAgICBtX3N0YXR1c0Rpc3BsYXktPmF0dGFjaFRvUGFy
ZW50KG1fcGFuZWwuZ2V0KCkpOwogfQogCiB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVUaW1lbGlu
ZUNvbnRhaW5lcigpCiB7CiAgICAgQVNTRVJUKCFtX3RpbWVsaW5lQ29udGFpbmVyKTsKLSAgICBt
X3RpbWVsaW5lQ29udGFpbmVyID0gbmV3IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxl
bWVudChkb2N1bWVudCgpLCBtZWRpYUVsZW1lbnQoKSk7CisgICAgbV90aW1lbGluZUNvbnRhaW5l
ciA9IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxl
bWVudCgpKTsKICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5hdHRhY2hUb1BhcmVudChtX3BhbmVs
LmdldCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZWxpbmUoKQogewogICAg
IEFTU0VSVCghbV90aW1lbGluZSk7Ci0gICAgbV90aW1lbGluZSA9IG5ldyBNZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQoZG9jdW1lbnQoKSwgbWVkaWFFbGVtZW50KCkpOworICAgIG1fdGltZWxp
bmUgPSBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQoKSk7
CiAgICAgbV90aW1lbGluZS0+c2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOwog
ICAgIG1fdGltZWxpbmUtPmF0dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkp
OwogfQpAQCAtMjU1LDE0ICsyNTUsMTQgQEAgdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZWxp
bmUoKQogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKCkKIHsK
ICAgICBBU1NFUlQoIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKTsKLSAgICBtX3ZvbHVtZVNsaWRl
ckNvbnRhaW5lciA9IG5ldyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50
KGRvY3VtZW50KCksIG1lZGlhRWxlbWVudCgpKTsKKyAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5l
ciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtZWRp
YUVsZW1lbnQoKSk7CiAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmF0dGFjaFRvUGFyZW50
KG1fcGFuZWwuZ2V0KCkpOwogfQogCiB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVWb2x1bWVTbGlk
ZXIoKQogewogICAgIEFTU0VSVCghbV92b2x1bWVTbGlkZXIpOwotICAgIG1fdm9sdW1lU2xpZGVy
ID0gbmV3IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoZG9jdW1lbnQoKSwgbWVkaWFF
bGVtZW50KCkpOworICAgIG1fdm9sdW1lU2xpZGVyID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpKTsKICAgICBtX3ZvbHVtZVNsaWRlci0+c2V0
QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOwogICAgIG1fdm9sdW1lU2xpZGVyLT5z
ZXRBdHRyaWJ1dGUobWF4QXR0ciwgIjEiKTsKICAgICBtX3ZvbHVtZVNsaWRlci0+c2V0QXR0cmli
dXRlKHZhbHVlQXR0ciwgU3RyaW5nOjpudW1iZXIobWVkaWFFbGVtZW50KCktPnZvbHVtZSgpKSk7
CkBAIC0yNzIsMjEgKzI3MiwyMSBAQCB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVWb2x1bWVTbGlk
ZXIoKQogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlQ3VycmVudFRpbWVEaXNwbGF5KCkKIHsKICAg
ICBBU1NFUlQoIW1fY3VycmVudFRpbWVEaXNwbGF5KTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxh
eSA9IG5ldyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQoZG9jdW1lbnQoKSwgTUVESUFf
Q09OVFJPTFNfQ1VSUkVOVF9USU1FX0RJU1BMQVksIG1lZGlhRWxlbWVudCgpKTsKKyAgICBtX2N1
cnJlbnRUaW1lRGlzcGxheSA9IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6Y3JlYXRl
KG1lZGlhRWxlbWVudCgpLCBNRURJQV9DT05UUk9MU19DVVJSRU5UX1RJTUVfRElTUExBWSk7CiAg
ICAgbV9jdXJyZW50VGltZURpc3BsYXktPmF0dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWlu
ZXIuZ2V0KCkpOwogfQogCiB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVUaW1lUmVtYWluaW5nRGlz
cGxheSgpCiB7CiAgICAgQVNTRVJUKCFtX3RpbWVSZW1haW5pbmdEaXNwbGF5KTsKLSAgICBtX3Rp
bWVSZW1haW5pbmdEaXNwbGF5ID0gbmV3IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudChk
b2N1bWVudCgpLCBNRURJQV9DT05UUk9MU19USU1FX1JFTUFJTklOR19ESVNQTEFZLCBtZWRpYUVs
ZW1lbnQoKSk7CisgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheSA9IE1lZGlhQ29udHJvbFRpbWVE
aXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCgpLCBNRURJQV9DT05UUk9MU19USU1F
X1JFTUFJTklOR19ESVNQTEFZKTsKICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5hdHRhY2hU
b1BhcmVudChtX3RpbWVsaW5lQ29udGFpbmVyLmdldCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZWRp
YTo6Y3JlYXRlRnVsbHNjcmVlbkJ1dHRvbigpCiB7CiAgICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5C
dXR0b24pOwotICAgIG1fZnVsbHNjcmVlbkJ1dHRvbiA9IG5ldyBNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuQnV0dG9uRWxlbWVudChkb2N1bWVudCgpLCBtZWRpYUVsZW1lbnQoKSk7CisgICAgbV9mdWxs
c2NyZWVuQnV0dG9uID0gTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShtZWRpYUVsZW1lbnQoKSk7CiAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5hdHRhY2hUb1BhcmVu
dChtX3BhbmVsLmdldCgpKTsKIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clByb2dyZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9n
cmVzcy5jcHAJKHJldmlzaW9uIDYwMzc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJv
Z3Jlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKIAogI2luY2x1ZGUgIlJl
bmRlclByb2dyZXNzLmgiCkBAIC0zOCwxOSArMzksMjYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogY2xhc3MgUHJvZ3Jlc3NWYWx1ZUVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1l
bnQgewogcHVibGljOgotICAgIFByb2dyZXNzVmFsdWVFbGVtZW50KERvY3VtZW50KiwgTm9kZSog
c2hhZG93UGFyZW50KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmVzc1ZhbHVlRWxlbWVu
dD4gY3JlYXRlKE5vZGUqIHNoYWRvd1BhcmVudCk7CiAKIHByaXZhdGU6ICAgICAgICAKKyAgICBQ
cm9ncmVzc1ZhbHVlRWxlbWVudChOb2RlKiBzaGFkb3dQYXJlbnQpOworCiAgICAgdmlydHVhbCBi
b29sIGlzU2hhZG93Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIE5v
ZGUqIHNoYWRvd1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQogCiAgICAg
Tm9kZSogbV9zaGFkb3dQYXJlbnQ7CiB9OwogCi1Qcm9ncmVzc1ZhbHVlRWxlbWVudDo6UHJvZ3Jl
c3NWYWx1ZUVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBzaGFkb3dQYXJlbnQpCi06
IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCi0sIG1fc2hhZG93UGFyZW50KHNoYWRv
d1BhcmVudCkKK2lubGluZSBQcm9ncmVzc1ZhbHVlRWxlbWVudDo6UHJvZ3Jlc3NWYWx1ZUVsZW1l
bnQoTm9kZSogc2hhZG93UGFyZW50KQorICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBzaGFk
b3dQYXJlbnQtPmRvY3VtZW50KCkpCisgICAgLCBtX3NoYWRvd1BhcmVudChzaGFkb3dQYXJlbnQp
Cit7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPFByb2dyZXNzVmFsdWVFbGVtZW50PiBQcm9ncmVz
c1ZhbHVlRWxlbWVudDo6Y3JlYXRlKE5vZGUqIHNoYWRvd1BhcmVudCkKIHsKKyAgICByZXR1cm4g
bmV3IFByb2dyZXNzVmFsdWVFbGVtZW50KHNoYWRvd1BhcmVudCk7CiB9CiAKIFJlbmRlclByb2dy
ZXNzOjpSZW5kZXJQcm9ncmVzcyhIVE1MUHJvZ3Jlc3NFbGVtZW50KiBlbGVtZW50KQpAQCAtMTM2
LDcgKzE0NCw3IEBAIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZVZhbHVlUGFydFN0YXQKIHsK
ICAgICBib29sIG5lZWRMYXlvdXQgPSAhc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpIHx8IG1fdmFs
dWVQYXJ0OwogICAgIGlmICghc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpICYmICFtX3ZhbHVlUGFy
dCkgewotICAgICAgICBtX3ZhbHVlUGFydCA9IG5ldyBQcm9ncmVzc1ZhbHVlRWxlbWVudChkb2N1
bWVudCgpLCBub2RlKCkpOworICAgICAgICBtX3ZhbHVlUGFydCA9IFByb2dyZXNzVmFsdWVFbGVt
ZW50OjpjcmVhdGUobm9kZSgpKTsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZv
clZhbHVlUGFydCA9IGNyZWF0ZVN0eWxlRm9yVmFsdWVQYXJ0KHN0eWxlKCkpOwogICAgICAgICBt
X3ZhbHVlUGFydC0+c2V0UmVuZGVyZXIobV92YWx1ZVBhcnQtPmNyZWF0ZVJlbmRlcmVyKHJlbmRl
ckFyZW5hKCksIHN0eWxlRm9yVmFsdWVQYXJ0LmdldCgpKSk7CiAgICAgICAgIG1fdmFsdWVQYXJ0
LT5yZW5kZXJlcigpLT5zZXRTdHlsZShzdHlsZUZvclZhbHVlUGFydC5yZWxlYXNlKCkpOwpAQCAt
MjE1LDQgKzIyMyw1IEBAIEhUTUxQcm9ncmVzc0VsZW1lbnQqIFJlbmRlclByb2dyZXNzOjpwcm8K
IH0gICAgCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNsaWRlci5jcHAJKHJldmlzaW9uIDYwMzc0KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTYgKzU0LDE5IEBAIHN0
YXRpYyBkb3VibGUgc2xpZGVyUG9zaXRpb24oSFRNTElucHV0RWwKICAgICByZXR1cm4gcmFuZ2Uu
cHJvcG9ydGlvbkZyb21WYWx1ZShyYW5nZS52YWx1ZUZyb21FbGVtZW50KGVsZW1lbnQpKTsKIH0K
IAorLy8gRklYTUU6IENvdWxkIHNoYXJlIGNvZGUgd2l0aCB0aGUgU2xpZGVyRGl2RWxlbWVudCBj
bGFzcyBpbiBSZW5kZXJQcm9ncmVzcy4KIGNsYXNzIFNsaWRlclRodW1iRWxlbWVudCA6IHB1Ymxp
YyBIVE1MRGl2RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgU2xpZGVyVGh1bWJFbGVtZW50KERvY3Vt
ZW50KiwgTm9kZSogc2hhZG93UGFyZW50KTsKLSAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
bGlkZXJUaHVtYkVsZW1lbnQ+IGNyZWF0ZShOb2RlKiBzaGFkb3dQYXJlbnQpOworCiAgICAgYm9v
bCBpbkRyYWdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pbkRyYWdNb2RlOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKTsKIAogcHJpdmF0ZTogICAgICAgIAorICAgIFNsaWRlclRodW1iRWxlbWVudChOb2Rl
KiBzaGFkb3dQYXJlbnQpOworICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRvd05vZGUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBOb2RlKiBzaGFkb3dQYXJlbnROb2Rl
KCkgeyByZXR1cm4gbV9zaGFkb3dQYXJlbnQ7IH0KIApAQCAtNzIsMTMgKzc1LDE4IEBAIHByaXZh
dGU6ICAgICAgICAKICAgICBib29sIG1faW5EcmFnTW9kZTsKIH07CiAKLVNsaWRlclRodW1iRWxl
bWVudDo6U2xpZGVyVGh1bWJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgTm9kZSogc2hhZG93
UGFyZW50KQotICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKK2lubGluZSBT
bGlkZXJUaHVtYkVsZW1lbnQ6OlNsaWRlclRodW1iRWxlbWVudChOb2RlKiBzaGFkb3dQYXJlbnQp
CisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIHNoYWRvd1BhcmVudC0+ZG9jdW1lbnQoKSkK
ICAgICAsIG1fc2hhZG93UGFyZW50KHNoYWRvd1BhcmVudCkKICAgICAsIG1faW5EcmFnTW9kZShm
YWxzZSkKIHsKIH0KIAoraW5saW5lIFBhc3NSZWZQdHI8U2xpZGVyVGh1bWJFbGVtZW50PiBTbGlk
ZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShOb2RlKiBzaGFkb3dQYXJlbnQpCit7CisgICAgcmV0dXJu
IG5ldyBTbGlkZXJUaHVtYkVsZW1lbnQoc2hhZG93UGFyZW50KTsKK30KKwogdm9pZCBTbGlkZXJU
aHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlm
ICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CkBAIC0zMDUsNyArMzEzLDcgQEAgdm9pZCBSZW5k
ZXJTbGlkZXI6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKICAgICAvLyBMYXlvdXQgd2lsbCB0YWtl
IGNhcmUgb2YgdGhlIHRodW1iJ3Mgc2l6ZSBhbmQgcG9zaXRpb24uCiAgICAgaWYgKCFtX3RodW1i
KSB7Ci0gICAgICAgIG1fdGh1bWIgPSBuZXcgU2xpZGVyVGh1bWJFbGVtZW50KGRvY3VtZW50KCks
IG5vZGUoKSk7CisgICAgICAgIG1fdGh1bWIgPSBTbGlkZXJUaHVtYkVsZW1lbnQ6OmNyZWF0ZShu
b2RlKCkpOwogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRodW1iU3R5bGUgPSBjcmVhdGVU
aHVtYlN0eWxlKHN0eWxlKCkpOwogICAgICAgICBtX3RodW1iLT5zZXRSZW5kZXJlcihtX3RodW1i
LT5jcmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCB0aHVtYlN0eWxlLmdldCgpKSk7CiAgICAg
ICAgIG1fdGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKHRodW1iU3R5bGUucmVsZWFzZSgpKTsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDYw
Mzc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRl
U3VidHJlZUlmTgogICAgICAgICAvLyBGb3Igbm9uLXNlYXJjaCBmaWVsZHMsIHRoZXJlIGlzIG5v
IGludGVybWVkaWF0ZSBpbm5lckJsb2NrIGFzIHRoZSBzaGFkb3cgbm9kZS4KICAgICAgICAgLy8g
bV9pbm5lclRleHQgd2lsbCBiZSB0aGUgc2hhZG93IG5vZGUgaW4gdGhhdCBjYXNlLiAgICAgICAg
CiAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGlubmVyQmxvY2sgPyBpbm5lckJs
b2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpIDogc3R5bGUoKTsKLSAgICAgICAgbV9pbm5lclRleHQg
PSBuZXcgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KGRvY3VtZW50KCksIGlubmVyQmxvY2sg
PyAwIDogbm9kZSgpKTsKKyAgICAgICAgbV9pbm5lclRleHQgPSBUZXh0Q29udHJvbElubmVyVGV4
dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCBpbm5lckJsb2NrID8gMCA6IG5vZGUoKSk7CiAg
ICAgICAgIG1faW5uZXJUZXh0LT5hdHRhY2hJbm5lckVsZW1lbnQoaW5uZXJCbG9jayA/IGlubmVy
QmxvY2sgOiBub2RlKCksIGNyZWF0ZUlubmVyVGV4dFN0eWxlKHBhcmVudFN0eWxlKSwgcmVuZGVy
QXJlbmEoKSk7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyMSw3ICs1MjEsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3Jl
YXRlCiAgICAgaWYgKCFpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpKSB7CiAgICAgICAg
IFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOZWVkZWQobV9pbm5lckJsb2NrLmdl
dCgpKTsKICAgICAgICAgaWYgKGlucHV0RWxlbWVudCgpLT5oYXNTcGluQnV0dG9uKCkgJiYgIW1f
b3V0ZXJTcGluQnV0dG9uKSB7Ci0gICAgICAgICAgICBtX291dGVyU3BpbkJ1dHRvbiA9IG5ldyBT
cGluQnV0dG9uRWxlbWVudChkb2N1bWVudCgpLCBub2RlKCkpOworICAgICAgICAgICAgbV9vdXRl
clNwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG5vZGUoKSk7CiAgICAgICAg
ICAgICBtX291dGVyU3BpbkJ1dHRvbi0+YXR0YWNoSW5uZXJFbGVtZW50KG5vZGUoKSwgY3JlYXRl
T3V0ZXJTcGluQnV0dG9uU3R5bGUoKSwgcmVuZGVyQXJlbmEoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwpAQCAtNTI5LDEzICs1MjksMTMgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNyZWF0ZQogCiAgICAgaWYgKCFtX2lubmVyQmxvY2spIHsKICAgICAgICAgLy8g
Q3JlYXRlIHRoZSBpbm5lciBibG9jayBlbGVtZW50Ci0gICAgICAgIG1faW5uZXJCbG9jayA9IG5l
dyBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCgpLCBub2RlKCkpOworICAgICAgICBt
X2lubmVyQmxvY2sgPSBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6Y3JlYXRlKG5vZGUoKSk7CiAg
ICAgICAgIG1faW5uZXJCbG9jay0+YXR0YWNoSW5uZXJFbGVtZW50KG5vZGUoKSwgY3JlYXRlSW5u
ZXJCbG9ja1N0eWxlKHN0eWxlKCkpLCByZW5kZXJBcmVuYSgpKTsKICAgICB9CiAKICAgICBpZiAo
IW1fcmVzdWx0c0J1dHRvbikgewogICAgICAgICAvLyBDcmVhdGUgdGhlIHNlYXJjaCByZXN1bHRz
IGJ1dHRvbiBlbGVtZW50Ci0gICAgICAgIG1fcmVzdWx0c0J1dHRvbiA9IG5ldyBTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25FbGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICBtX3Jlc3VsdHNCdXR0
b24gPSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7
CiAgICAgICAgIG1fcmVzdWx0c0J1dHRvbi0+YXR0YWNoSW5uZXJFbGVtZW50KG1faW5uZXJCbG9j
ay5nZXQoKSwgY3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKG1faW5uZXJCbG9jay0+cmVuZGVyZXIo
KS0+c3R5bGUoKSksIHJlbmRlckFyZW5hKCkpOwogICAgIH0KIApAQCAtNTQ0LDcgKzU0NCw3IEBA
IHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGUKIAogICAgIGlmICghbV9j
YW5jZWxCdXR0b24pIHsKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjYW5jZWwgYnV0dG9uIGVsZW1l
bnQKLSAgICAgICAgbV9jYW5jZWxCdXR0b24gPSBuZXcgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25F
bGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICBtX2NhbmNlbEJ1dHRvbiA9IFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgICAgICBtX2NhbmNl
bEJ1dHRvbi0+YXR0YWNoSW5uZXJFbGVtZW50KG1faW5uZXJCbG9jay5nZXQoKSwgY3JlYXRlQ2Fu
Y2VsQnV0dG9uU3R5bGUobV9pbm5lckJsb2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpKSwgcmVuZGVy
QXJlbmEoKSk7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MCwxNCArNDAsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOworCiBjbGFzcyBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sgOiBw
dWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgogICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJC
bG9jayhOb2RlKiBub2RlLCBib29sIGlzTXVsdGlMaW5lKSA6IFJlbmRlckJsb2NrKG5vZGUpLCBt
X211bHRpTGluZShpc011bHRpTGluZSkgeyB9CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLSAgICBwcml2
YXRlOgotICAgICAgICBib29sIG1fbXVsdGlMaW5lOworCisgICAgYm9vbCBtX211bHRpTGluZTsK
IH07CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkBAIC03
NiwxMiArNzksMTkgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sSW5uZXJCbAog
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb250ZW50c1BvaW50KTsK
IH0KIAotVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OlRleHRDb250cm9sSW5uZXJFbGVtZW50KERv
Y3VtZW50KiBkb2MsIE5vZGUqIHNoYWRvd1BhcmVudCkKLSAgICA6IEhUTUxEaXZFbGVtZW50KEhU
TUxOYW1lczo6ZGl2VGFnLCBkb2MpCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K1RleHRDb250cm9sSW5uZXJFbGVtZW50OjpUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1bWVu
dCogZG9jdW1lbnQsIE5vZGUqIHNoYWRvd1BhcmVudCkKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRp
dlRhZywgZG9jdW1lbnQpCiAgICAgLCBtX3NoYWRvd1BhcmVudChzaGFkb3dQYXJlbnQpCiB7CiB9
CiAKK1Bhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IFRleHRDb250cm9sSW5uZXJF
bGVtZW50OjpjcmVhdGUoTm9kZSogc2hhZG93UGFyZW50KQoreworICAgIHJldHVybiBuZXcgVGV4
dENvbnRyb2xJbm5lckVsZW1lbnQoc2hhZG93UGFyZW50LT5kb2N1bWVudCgpLCBzaGFkb3dQYXJl
bnQpOworfQorCiB2b2lkIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjphdHRhY2hJbm5lckVsZW1l
bnQoTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSwgUmVuZGVyQXJl
bmEqIGFyZW5hKQogewogICAgIC8vIFdoZW4gYWRkaW5nIHRoZXNlIGVsZW1lbnRzLCBjcmVhdGUg
dGhlIHJlbmRlcmVyICYgc3R5bGUgZmlyc3QgYmVmb3JlIGFkZGluZyB0byB0aGUgRE9NLgpAQCAt
MTA3LDIxICsxMTcsMzEgQEAgdm9pZCBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6YXR0YWNoSW5u
ZQogICAgICAgICBwYXJlbnQtPnJlbmRlcmVyKCktPmFkZENoaWxkKHJlbmRlcmVyKTsKIH0KIAot
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQo
RG9jdW1lbnQqIGRvYywgTm9kZSogc2hhZG93UGFyZW50KQotICAgIDogVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnQoZG9jLCBzaGFkb3dQYXJlbnQpCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2lubGluZSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OlRleHRDb250cm9sSW5u
ZXJUZXh0RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIE5vZGUqIHNoYWRvd1BhcmVudCkKKyAg
ICA6IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50LCBzaGFkb3dQYXJlbnQpCiB7CiB9
CiAKLXZvaWQgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldnQpCitQYXNzUmVmUHRyPFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gVGV4
dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2Rl
KiBzaGFkb3dQYXJlbnQpCiB7Ci0gICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3Vs
ZCBhZGQgYSB3YXkgdG8gaGF2ZSBkZWZhdWx0IGV2ZW50IGxpc3RlbmVycy4gIFRoZW4gd2Ugd291
bGQgYWRkIG9uZSB0byB0aGUgdGV4dCBmaWVsZCdzIGlubmVyIGRpdiwgYW5kIHdlIHdvdWxkbid0
IG5lZWQgdGhpcyBzdWJjbGFzcy4KLSAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNoYWRvd0Fu
Y2VzdG9yTm9kZSgpOwotICAgIGlmIChzaGFkb3dBbmNlc3RvcikgewotICAgICAgICBpZiAoZXZ0
LT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgfHwgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCkKLSAgICAgICAgICAgIHNoYWRv
d0FuY2VzdG9yLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgcmV0dXJuIG5ldyBUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQoZG9jdW1lbnQsIHNoYWRvd1BhcmVudCk7Cit9CisKK3Zv
aWQgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKK3sKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGFkZCBh
IHdheSB0byBoYXZlIGRlZmF1bHQgZXZlbnQgbGlzdGVuZXJzLgorICAgIC8vIFRoZW4gd2Ugd291
bGQgYWRkIG9uZSB0byB0aGUgdGV4dCBmaWVsZCdzIGlubmVyIGRpdiwgYW5kIHdlIHdvdWxkbid0
IG5lZWQgdGhpcyBzdWJjbGFzcy4KKyAgICAvLyBPciBwb3NzaWJseSB3ZSBjb3VsZCBqdXN0IHVz
ZSBhIG5vcm1hbCBldmVudCBsaXN0ZW5lci4KKyAgICBpZiAoZXZlbnQtPmlzQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQoKSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0
YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQpIHsKKyAgICAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2Vz
dG9yID0gc2hhZG93QW5jZXN0b3JOb2RlKCkpIHsKKyAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9y
LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAgICAgICAgIGlmIChldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9
Ci0gICAgaWYgKCFldnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIEhUTUxEaXZFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwogfQogCiBSZW5kZXJPYmplY3QqIFRleHRDb250cm9sSW5uZXJU
ZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHls
ZSopCkBAIC0xMzUsMTYgKzE1NSwyMyBAQCBSZW5kZXJPYmplY3QqIFRleHRDb250cm9sSW5uZXJU
ZXh0RWxlbWVuCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRleHRDb250cm9sSW5uZXJC
bG9jayh0aGlzLCBtdWx0aUxpbmUpOwogfQogCi1TZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVt
ZW50OjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2MpCi0gICAg
OiBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2MpCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK2lubGluZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IFRleHRD
b250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50KQoreworfQorCitQYXNzUmVmUHRyPFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ+IFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiB7CisgICAgcmV0dXJuIG5ldyBTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25FbGVtZW50KGRvY3VtZW50KTsKIH0KIAotdm9pZCBTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCit2b2lk
IFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogewogICAgIC8vIE9uIG1vdXNlZG93biwgYnJpbmcgdXAgYSBtZW51LCBpZiBu
ZWVkZWQKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihzaGFkb3dBbmNlc3Rvck5vZGUoKSk7Ci0gICAgaWYgKGV2dC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldnQtPmlzTW91c2VFdmVudCgpICYmIHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7Cisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2
ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlucHV0LT5mb2N1cygpOwogICAgICAg
ICBpbnB1dC0+c2VsZWN0KCk7CiAgICAgICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSog
cmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShpbnB1dC0+cmVuZGVyZXIo
KSk7CkBAIC0xNTIsMTggKzE3OSwyNiBAQCB2b2lkIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVs
ZW1lbnQ6OmRlCiAgICAgICAgICAgICByZW5kZXJlci0+aGlkZVBvcHVwKCk7CiAgICAgICAgIGVs
c2UgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPiAwKQogICAgICAgICAgICAgcmVuZGVyZXItPnNo
b3dQb3B1cCgpOwotICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICghZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldnQpOworCisgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOwogfQogCi1TZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OlNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jKQotICAgIDogVGV4dENvbnRy
b2xJbm5lckVsZW1lbnQoZG9jKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitp
bmxpbmUgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2NhcHR1cmluZyhmYWxzZSkKIHsKIH0KIAorUGFzc1Jl
ZlB0cjxTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ+IFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3
IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChkb2N1bWVudCk7Cit9CisKIHZvaWQgU2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZXRhY2goKQogewogICAgIGlmIChtX2NhcHR1
cmluZykgewpAQCAtMTc0LDYwICsyMDksNzAgQEAgdm9pZCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bkVsZW1lbnQ6OmRldAogfQogCiAKLXZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCit2b2lkIFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAg
Ly8gSWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSwgb24gbW91c2V1cCwgY2xlYXIgdGhlIHZhbHVl
LCBhbmQgc2V0IHNlbGVjdGlvbgogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKLSAgICBpZiAo
ZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2dC0+aXNNb3Vz
ZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExl
ZnRCdXR0b24pIHsKLSAgICAgICAgaW5wdXQtPmZvY3VzKCk7Ci0gICAgICAgIGlucHV0LT5zZWxl
Y3QoKTsKLSAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICBpZiAocmVu
ZGVyZXIoKSAmJiByZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpCisgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01v
dXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZp
c2libGVUb0hpdFRlc3RpbmcoKSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKICAgICAgICAgICAgICAgICBt
X2NhcHR1cmluZyA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkg
JiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24p
IHsKKyAgICAgICAgfQorICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKKyAgICAgICAgaW5wdXQtPnNl
bGVjdCgpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1
cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50
Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChtX2NhcHR1
cmluZyAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKSkg
ewotICAgICAgICAgICAgaWYgKGhvdmVyZWQoKSkgewotICAgICAgICAgICAgICAgIGlucHV0LT5z
ZXRWYWx1ZSgiIik7Ci0gICAgICAgICAgICAgICAgaW5wdXQtPm9uU2VhcmNoKCk7Ci0gICAgICAg
ICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAg
ICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9k
ZSgwKTsKICAgICAgICAgICAgICAgICBtX2NhcHR1cmluZyA9IGZhbHNlOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGhvdmVyZWQoKSkgeworICAgICAgICAgICAgICAgIGlucHV0LT5z
ZXRWYWx1ZSgiIik7CisgICAgICAgICAgICAgICAgaW5wdXQtPm9uU2VhcmNoKCk7CisgICAgICAg
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmICghZXZ0LT5kZWZh
dWx0SGFuZGxlZCgpKQotICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldnQpOworCisgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwogfQogCi1TcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRv
YywgTm9kZSogc2hhZG93UGFyZW50KQotICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9j
LCBzaGFkb3dQYXJlbnQpCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lubGlu
ZSBTcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVsZW1lbnQoTm9kZSogc2hhZG93UGFyZW50
KQorICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoc2hhZG93UGFyZW50LT5kb2N1bWVudCgp
LCBzaGFkb3dQYXJlbnQpCiAgICAgLCBtX2NhcHR1cmluZyhmYWxzZSkKICAgICAsIG1fb25VcEJ1
dHRvbihmYWxzZSkKIHsKIH0KIAotdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZ0KQorUGFzc1JlZlB0cjxTcGluQnV0dG9uRWxlbWVudD4gU3BpbkJ1
dHRvbkVsZW1lbnQ6OmNyZWF0ZShOb2RlKiBzaGFkb3dQYXJlbnQpCiB7Ci0gICAgaWYgKCFldnQt
PmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAgIGlmICghZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQot
ICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKKyAg
ICByZXR1cm4gbmV3IFNwaW5CdXR0b25FbGVtZW50KHNoYWRvd1BhcmVudCk7Cit9CisKK3ZvaWQg
U3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQorewor
ICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgIEhUTUxEaXZFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBjb25zdCBNb3VzZUV2ZW50KiBtZXZ0ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCk7
Ci0gICAgaWYgKG1ldnQtPmJ1dHRvbigpICE9IExlZnRCdXR0b24pIHsKLSAgICAgICAgaWYgKCFl
dnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldnQpOworCisgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CisgICAgaWYgKG1vdXNlRXZlbnQtPmJ1dHRvbigp
ICE9IExlZnRCdXR0b24pIHsKKyAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0
b3JOb2RlKCkpOwotICAgIEludFBvaW50IGxvY2FsID0gcm91bmRlZEludFBvaW50KHJlbmRlckJv
eCgpLT5hYnNvbHV0ZVRvTG9jYWwobWV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1
ZSkpOwotICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewor
ICAgIEludFBvaW50IGxvY2FsID0gcm91bmRlZEludFBvaW50KHJlbmRlckJveCgpLT5hYnNvbHV0
ZVRvTG9jYWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkpOwor
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAg
ICAgIGlmIChyZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgewog
ICAgICAgICAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgICAgICBpbnB1dC0+c2VsZWN0KCk7
CkBAIC0yMzUsOSArMjgwLDEwIEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmQKICAgICAgICAgICAgICAgICBpbnB1dC0+c3RlcFVwRnJvbVJlbmRlcmVyKDEpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlucHV0LT5zdGVwVXBGcm9tUmVuZGVyZXIo
LTEpOwotICAgICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVF
dmVudCkgeworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpIHsKICAgICAgICAgaWYgKHJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCku
Y29udGFpbnMobG9jYWwpKSB7CiAgICAgICAgICAgICBpZiAoIW1fY2FwdHVyaW5nKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKQEAg
LTI1OCw4ICszMDQsOCBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFldnQtPmRlZmF1bHRI
YW5kbGVkKCkpCi0gICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2
dCk7CisKKyAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5oCShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNTUgKzM0LDc2IEBA
IGNsYXNzIFN0cmluZzsKIAogY2xhc3MgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgOiBwdWJsaWMg
SFRNTERpdkVsZW1lbnQgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRDb250
cm9sSW5uZXJFbGVtZW50PiBjcmVhdGUoTm9kZSogc2hhZG93UGFyZW50KTsKKworICAgIHZvaWQg
YXR0YWNoSW5uZXJFbGVtZW50KE5vZGUqLCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiwgUmVuZGVy
QXJlbmEqKTsKKworcHJvdGVjdGVkOgogICAgIFRleHRDb250cm9sSW5uZXJFbGVtZW50KERvY3Vt
ZW50KiwgTm9kZSogc2hhZG93UGFyZW50ID0gMCk7Ci0gICAgCisKK3ByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaGFkb3dOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dQYXJl
bnQ7IH0KICAgICB2aXJ0dWFsIE5vZGUqIHNoYWRvd1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3No
YWRvd1BhcmVudDsgfQogICAgIHZvaWQgc2V0U2hhZG93UGFyZW50Tm9kZShOb2RlKiBub2RlKSB7
IG1fc2hhZG93UGFyZW50ID0gbm9kZTsgfQotICAgIHZvaWQgYXR0YWNoSW5uZXJFbGVtZW50KE5v
ZGUqLCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiwgUmVuZGVyQXJlbmEqKTsKLSAgICAKLXByaXZh
dGU6CisKICAgICBOb2RlKiBtX3NoYWRvd1BhcmVudDsKIH07CiAKIGNsYXNzIFRleHRDb250cm9s
SW5uZXJUZXh0RWxlbWVudCA6IHB1YmxpYyBUZXh0Q29udHJvbElubmVyRWxlbWVudCB7CiBwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQqLCBOb2RlKiBzaGFkb3dQYXJlbnQpOworCisgICAgdmlydHVhbCB2b2lk
IGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKworcHJpdmF0ZToKICAgICBUZXh0Q29udHJv
bElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQqLCBOb2RlKiBzaGFkb3dQYXJlbnQpOwogICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0
eWxlKik7ICAKLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwog
fTsKIAogY2xhc3MgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBUZXh0
Q29udHJvbElubmVyRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgU2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uRWxlbWVudChEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOworCiAgICAgdmlydHVhbCB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKworcHJpdmF0ZToKKyAgICBTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50Kik7CiB9OwogCiBjbGFzcyBTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQg
ewogcHVibGljOgotICAgIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChEb2N1bWVudCop
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7CisKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKKwogcHJpdmF0ZToKKyAgICBT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2goKTsKKwogICAgIGJvb2wgbV9jYXB0dXJpbmc7CiB9OwogCiBjbGFzcyBTcGlu
QnV0dG9uRWxlbWVudCA6IHB1YmxpYyBUZXh0Q29udHJvbElubmVyRWxlbWVudCB7CiBwdWJsaWM6
Ci0gICAgU3BpbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqLCBOb2RlKik7Ci0gICAgdmlydHVhbCBi
b29sIGlzU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShOb2RlKik7CiAKKyAgICAvLyBG
SVhNRTogIlNwaW4gYnV0dG9uIG9uIHVwIGJ1dHRvbiIgaXMgbm90IGEgcGhyYXNlIHdpdGggYSBz
aW5nbGUgY2xlYXIgbWVhbmluZy4KKyAgICAvLyBOZWVkIGEgbmFtZSBmb3IgdGhpcyB0aGF0IG1h
a2VzIGl0IGNsZWFyZXIuCiAgICAgYm9vbCBvblVwQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gbV9v
blVwQnV0dG9uOyB9Ci0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc3BpbkJ1dHRvbk5v
ZGVOYW1lKCk7CiAKIHByaXZhdGU6CisgICAgU3BpbkJ1dHRvbkVsZW1lbnQoTm9kZSopOworCisg
ICAgdmlydHVhbCBib29sIGlzU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKS0+aXNFbmFibGVkRm9ybUNv
bnRyb2woKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7
CisKICAgICBib29sIG1fY2FwdHVyaW5nOwogICAgIGJvb2wgbV9vblVwQnV0dG9uOwogfTsKIAot
fSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBXZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
NjAzODApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDEwLTA1LTI4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIG1vcmUgSFRN
TCBET00gbWVtYmVycyBwcml2YXRlLCBlc3BlY2lhbGx5IGNvbnN0cnVjdG9ycywgdGhpcmQgYW5k
IGZpbmFsIGJhdGNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zOTkxNgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06
CisgICAgICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBlbGVtZW50V2l0aE5hbWU6aW5Gb3Jt
Ol0pOiBVc2UgdGhlIG5ldyBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgZnVuY3Rpb24sIGFzc29j
aWF0ZWRFbGVtZW50cywgcmF0aGVyIHRoYW4gZ2V0dGluZyBkaXJlY3RseSBhdCBhIGRhdGEgbWVt
YmVyCisgICAgICAgIG5hbWVkIGZvcm1FbGVtZW50cy4KKyAgICAgICAgKC1bV2ViSFRNTFJlcHJl
c2VudGF0aW9uIGNvbnRyb2xzSW5Gb3JtOl0pOiBEaXR0by4KKwogMjAxMC0wNS0yNyAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJh
c2VyLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1t
CShyZXZpc2lvbiA2MDM3NCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50
YXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4MiwxMSArMjgyLDExIEBAIC0gKERPTUVsZW1l
bnQgKillbGVtZW50V2l0aE5hbWU6KE5TU3RyaW4KICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm1F
bGVtZW50ID0gZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChmb3JtKTsKICAgICBpZiAoIWZvcm1F
bGVtZW50KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmZvcm1FbGVtZW50czsKKyAgICBjb25z
dCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50
LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSA9IG5h
bWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7
CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOwotICAg
ICAgICBpZiAoZWx0LT5mb3JtQ29udHJvbE5hbWUoKSA9PSB0YXJnZXROYW1lKQorICAgICAgICBp
ZiAoZWx0LT5uYW1lKCkgPT0gdGFyZ2V0TmFtZSkKICAgICAgICAgICAgIHJldHVybiBraXQoZWx0
KTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTMzMSw3ICszMzEsNyBAQCAtIChOU0FycmF5
ICopY29udHJvbHNJbkZvcm06KERPTUVsZW1lbnQgCiAgICAgaWYgKCFmb3JtRWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICBOU011dGFibGVBcnJheSAqcmVzdWx0cyA9IG5pbDsKLSAg
ICBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50
LT5mb3JtRWxlbWVudHM7CisgICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
PiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlm
IChlbGVtZW50c1tpXS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBTa2lwIG9wdGlvbiBlbGVtZW50
cywgb3RoZXIgZHVkcwogICAgICAgICAgICAgRE9NRWxlbWVudCogZGUgPSBraXQoZWxlbWVudHNb
aV0pOwo=
</data>
<flag name="review"
          id="41965"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>