<?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>70276</bug_id>
          
          <creation_ts>2011-10-17 15:38:26 -0700</creation_ts>
          <short_desc>Remove OptionElement (first half)</short_desc>
          <delta_ts>2011-10-20 18:26:31 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>70475</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>jonlee</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>485566</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-17 15:38:26 -0700</bug_when>
    <thetext>Remove OptionElement (first half)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485574</commentid>
    <comment_count>1</comment_count>
      <attachid>111336</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-17 15:48:27 -0700</bug_when>
    <thetext>Created attachment 111336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485577</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 15:49:59 -0700</bug_when>
    <thetext>Attachment 111336 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Updating OpenSource
Current branch master is up to date.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485605</commentid>
    <comment_count>3</comment_count>
      <attachid>111336</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-17 16:17:25 -0700</bug_when>
    <thetext>Comment on attachment 111336
Patch

Attachment 111336 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10102320</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485615</commentid>
    <comment_count>4</comment_count>
      <attachid>111336</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-17 16:32:11 -0700</bug_when>
    <thetext>Comment on attachment 111336
Patch

Attachment 111336 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10120022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485629</commentid>
    <comment_count>5</comment_count>
      <attachid>111347</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-17 16:46:30 -0700</bug_when>
    <thetext>Created attachment 111347
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485656</commentid>
    <comment_count>6</comment_count>
      <attachid>111347</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-17 17:21:04 -0700</bug_when>
    <thetext>Comment on attachment 111347
Patch

Attachment 111347 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10124027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485681</commentid>
    <comment_count>7</comment_count>
      <attachid>111347</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-17 17:50:27 -0700</bug_when>
    <thetext>Comment on attachment 111347
Patch

Attachment 111347 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10126035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485764</commentid>
    <comment_count>8</comment_count>
      <attachid>111347</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 20:22:43 -0700</bug_when>
    <thetext>Comment on attachment 111347
Patch

Attachment 111347 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10120088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485945</commentid>
    <comment_count>9</comment_count>
      <attachid>111347</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-18 04:04:06 -0700</bug_when>
    <thetext>Comment on attachment 111347
Patch

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

r- because of build failures.

&gt; Source/WebCore/html/HTMLOptionElement.cpp:42
&gt; +#include &quot;StringBuilder.h&quot;

Should be &lt;wtf/text/StringBuilder.h&gt;

&gt; Source/WebCore/html/HTMLOptionElement.cpp:170
&gt; +    int length = items.size();

nit: length should be size_t.

&gt; Source/WebCore/html/HTMLOptionElement.cpp:315
&gt; +    for (Node* n = firstChild(); n; ) {

nit: One-letter variable name is not good.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:78
&gt; +static inline HTMLOptionElement* toOptionElement(Element* element)

This function name is confusing.  This looks like toClassName() which we use for many classes, but there is no OptionElement class and toClassName() usually returns no 0.
Do you have a plan to remove/rename this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486119</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-18 09:58:21 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; Source/WebCore/html/HTMLOptionElement.cpp:315
&gt; &gt; +    for (Node* n = firstChild(); n; ) {
&gt; 
&gt; nit: One-letter variable name is not good.

I just moved that code, but I would be happy to give it a better name.

&gt; &gt; Source/WebCore/html/HTMLSelectElement.cpp:78
&gt; &gt; +static inline HTMLOptionElement* toOptionElement(Element* element)
&gt; 
&gt; This function name is confusing.  This looks like toClassName() which we use for many classes, but there is no OptionElement class and toClassName() usually returns no 0.
&gt; Do you have a plan to remove/rename this?

Yes. I’ll do that in the second half.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486128</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-18 10:09:53 -0700</bug_when>
    <thetext>Thanks for the review, by the way. I’ll try to upload a new cut at this soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486356</commentid>
    <comment_count>12</comment_count>
      <attachid>111510</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-18 15:34:25 -0700</bug_when>
    <thetext>Created attachment 111510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486386</commentid>
    <comment_count>13</comment_count>
      <attachid>111510</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-18 16:01:34 -0700</bug_when>
    <thetext>Comment on attachment 111510
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486430</commentid>
    <comment_count>14</comment_count>
      <attachid>111510</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 16:45:09 -0700</bug_when>
    <thetext>Comment on attachment 111510
Patch

Rejecting attachment 111510 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
omium/src/WebOptionElement.cpp: In member function &apos;void WebKit::WebOptionElement::setDefaultSelected(bool)&apos;:
Source/WebKit/chromium/src/WebOptionElement.cpp:71: error: &apos;class WebCore::HTMLOptionElement&apos; has no member named &apos;setDefaultSelected&apos;
Source/WebKit/chromium/src/WebOptionElement.cpp:71: error: return-statement with a value, in function returning &apos;void&apos;
make: *** [out/Debug/obj.target/webkit/Source/WebKit/chromium/src/WebOptionElement.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/10138144</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486441</commentid>
    <comment_count>15</comment_count>
      <attachid>111510</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 17:00:19 -0700</bug_when>
    <thetext>Comment on attachment 111510
Patch

Attachment 111510 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10138163</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486476</commentid>
    <comment_count>16</comment_count>
      <attachid>111540</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-18 17:47:09 -0700</bug_when>
    <thetext>Created attachment 111540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486512</commentid>
    <comment_count>17</comment_count>
      <attachid>111540</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 18:43:15 -0700</bug_when>
    <thetext>Comment on attachment 111540
Patch

Attachment 111540 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10143189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486917</commentid>
    <comment_count>18</comment_count>
      <attachid>111657</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-19 12:22:48 -0700</bug_when>
    <thetext>Created attachment 111657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487071</commentid>
    <comment_count>19</comment_count>
      <attachid>111657</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-19 15:47:21 -0700</bug_when>
    <thetext>Comment on attachment 111657
Patch

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

&gt; Source/WebKit/chromium/src/WebOptionElement.cpp:72
&gt; -    return unwrap&lt;HTMLOptionElement&gt;()-&gt;setDefaultSelected(newSelected);
&gt; +    return unwrap&lt;HTMLOptionElement&gt;()-&gt;setAttribute(selectedAttr, newSelected ? &quot;&quot; : 0);

Probably we can use setBooleanAttribute().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487074</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-19 15:49:25 -0700</bug_when>
    <thetext>setBooleanAttribute is a good idea. I had forgotten it existed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487221</commentid>
    <comment_count>21</comment_count>
      <attachid>111657</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 19:07:21 -0700</bug_when>
    <thetext>Comment on attachment 111657
Patch

Clearing flags on attachment: 111657

Committed r97917: &lt;http://trac.webkit.org/changeset/97917&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487222</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 19:07:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487441</commentid>
    <comment_count>23</comment_count>
      <attachid>111657</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-20 02:59:23 -0700</bug_when>
    <thetext>Comment on attachment 111657
Patch

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

&gt; Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:190
&gt; -    RetainPtr&lt;CGImageRef&gt; image = copyNativeImage(copyBehavior);
&gt; +    RetainPtr&lt;CGImageRef&gt; image(AdoptCF, copyNativeImage(copyBehavior));

Wow, this is unrelated to this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487442</commentid>
    <comment_count>24</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-20 03:00:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/97917 was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488052</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-20 18:00:39 -0700</bug_when>
    <thetext>Would have been much better to roll out that one unrelated line rather than rolling out the whole patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488068</commentid>
    <comment_count>26</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-20 18:26:31 -0700</bug_when>
    <thetext>Committed r98053: &lt;http://trac.webkit.org/changeset/98053&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111336</attachid>
            <date>2011-10-17 15:48:27 -0700</date>
            <delta_ts>2011-10-17 16:46:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70276-20111017154826.patch</filename>
            <type>text/plain</type>
            <size>43057</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NjYwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMTAtMTcgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBPcHRpb25FbGVtZW50IChm
aXJzdCBoYWxmKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzAyNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvcmluZyB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbmV3IHRlc3RzLgorCisgICAgICAg
ICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBVc2UgaGFzVGFnTmFtZQorICAgICAgICBhbmQgdG9I
VE1MT3B0aW9uRWxlbWVudCBpbnN0ZWFkIG9mIHRvT3B0aW9uRWxlbWVudC4KKworICAgICAgICAq
IGRvbS9PcHRpb25FbGVtZW50LmNwcDogRGVsZXRlZCBjb250ZW50cy4gUmVtb3ZlIGZpbGUgbGF0
ZXIuCisgICAgICAgICogZG9tL09wdGlvbkVsZW1lbnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudCk6IEluaXRpYWxpemUgbV9pc1NlbGVjdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3Ip
OiBJbml0aWFsaXplIHRoZQorICAgICAgICBzZWxlY3RlZCBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4g
Y2FsbGluZyBzZXREZWZhdWx0U2VsZWN0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6dGV4dCk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBPcHRpb25F
bGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRleHQuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudDo6aW5kZXgpOiBNb3ZlZCB0aGUgY29kZSBoZXJlIGZyb20KKyAgICAgICAg
T3B0aW9uRWxlbWVudDo6b3B0aW9uSW5kZXguCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAg
IGNvZGUgdG8gY2FsbCBzZXRWYWx1ZSBhbmQgc2V0TGFiZWwuIENoYW5nZWQgdGhlIGNvZGUgdGhh
dCBjYWxsZWQKKyAgICAgICAgc2V0U2VsZWN0ZWQgdG8gaW5zdGVhZCBzZXQgbV9pc1NlbGVjdGVk
IGFuZCBhZGRlZCBhIEZJWE1FIGFib3V0IHdoeQorICAgICAgICB0aGF0J3MgcHJvYmFibHkgd3Jv
bmcsIGJ1dCBzYW1lIGJlaGF2aW9yIGFzIGJlZm9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50Ojp2YWx1ZSk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uVmFsdWUuIEFkZGVkIGEgRklYTUUgYWJvdXQgaW5j
b3JyZWN0CisgICAgICAgIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKTogVXNlIG1faXNTZWxlY3RlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZCk6IFVzZSBtX2lzU2VsZWN0
ZWQgYW5kCisgICAgICAgIGNhbGwgc2V0U2VsZWN0ZWRTdGF0ZSBpbnN0ZWFkIG9mIE9wdGlvbkVs
ZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6IE1vdmVkIHRoZSBjb2RlCisgICAgICAgIGhlcmUgZnJv
bSBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6OmxhYmVsKTogU3RyZWFtbGluZWQgdGhlIGNvZGUuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJl
bCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbSBPcHRpb25FbGVtZW50Ojpjb2xs
ZWN0T3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOiBVc2UgbV9pc1NlbGVjdGVkCisgICAg
ICAgIGFuZCByZXdyb3RlIGNvbW1lbnQgZm9yIGNsYXJpdHkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6IE1vdmVkIHRoaXMKKyAg
ICAgICAgaGVyZSBmcm9tIE9wdGlvbkVsZW1lbnQsIGFuZCBjaGFuZ2VkIHRvIHVzZSBTdHJpbmdC
dWlsZGVyLgorICAgICAgICAoV2ViQ29yZTo6dG9IVE1MT3B0aW9uRWxlbWVudCk6IEFkZGVkLgor
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOiBSZW1vdmVkIE9wdGlvbkVsZW1l
bnQuaCBpbmNsdWRlLgorICAgICAgICBSZW1vdmVkIE9wdGlvbkVsZW1lbnQgYmFzZSBjbGFzcy4g
UmVtb3ZlZCB1bm5lZWRlZCBmcmllbmQgZGVjbGFyYXRpb25zLgorICAgICAgICBNYWRlIHZhbHVl
IGFuZCBzZWxlY3RlZCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuIFJlbW92ZWQgdW5uZWVkZWQKKyAg
ICAgICAgZGVmYXVsdFNlbGVjdGVkIGFuZCBzZXREZWZhdWx0U2VsZWN0ZWQgZnVuY3Rpb25zLiBN
YWRlIHRoZQorICAgICAgICB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsIGFuZCBzZXRT
ZWxlY3RlZFN0YXRlIGZ1bmN0aW9ucworICAgICAgICBiZSBub24tdmlydHVhbCBhbmQgcHVibGlj
LiBBZGRlZCBhIGNvbGxlY3RPcHRpb25Jbm5lclRleHQgZnVuY3Rpb24uCisgICAgICAgIFJlcGxh
Y2VkIG1fZGF0YSB3aXRoIG1fdmFsdWUsIG1fbGFiZWwsIGFuZCBtX3NlbGVjdGVkLgorCisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b09w
dGlvbkVsZW1lbnQpOiBBZGRlZC4gSGVscGVyIHRvIGtlZXAgZXhpc3RpbmcgY29kZQorICAgICAg
ICBjbG9zZSB0byB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpuZXh0VmFsaWRJbmRleCk6IFVzZSBoYXNUYWdOYW1lCisgICAgICAgIGluc3RlYWQgb2YgaXNP
cHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVM
YXN0U2VsZWN0aW9uKTogVXNlIEhUTUxPcHRpb25FbGVtZW50CisgICAgICAgIHR5cGUgaW5zdGVh
ZCBvZiBPcHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5k
ZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxl
Y3RlZEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
b3B0aW9uVG9MaXN0SW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZv
cm1Db250cm9sU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjphcHBlbmRGb3JtRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKTog
RGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6IFVzZSBIVE1MT3B0
aW9uRWxlbWVudCwKKyAgICAgICAgaGFzVGFnTmFtZSwgYW5kIHRvSFRNTE9wdGlvbkVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFj
a2dyb3VuZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVk
KTogRGl0dG8uCisKIDIwMTEtMTAtMTcgIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiA5NzY0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcs
MTAgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MT3B0
aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTExNCw5ICsx
MTE0LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQwogICAgICAg
ICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVt
ZW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQt
PnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICBP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGUpOwotICAgICAg
ICAgICAgICAgIGlmIChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkp
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSAmJiB0b0hUTUxP
cHRpb25FbGVtZW50KGUpLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDk3NjQwKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MCArMSBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk9wdGlvbkVsZW1lbnQuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgot
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiT3B0aW9uR3JvdXBFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBPcHRpb25FbGVtZW50OjpzZXRT
ZWxlY3RlZFN0YXRlKE9wdGlvbkVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBi
b29sIHNlbGVjdGVkKQotewotICAgIGlmIChkYXRhLnNlbGVjdGVkKCkgPT0gc2VsZWN0ZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGRhdGEuc2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOwotICAgIGVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLX0KLQotaW50IE9wdGlvbkVsZW1lbnQ6Om9w
dGlvbkluZGV4KEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50LCBjb25zdCBFbGVtZW50
KiBlbGVtZW50KQotewotICAgIGlmICghc2VsZWN0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAvLyBMZXQncyBkbyB0aGlzIGR5bmFtaWNhbGx5LiBNaWdodCBiZSBhIGJpdCBzbG93
LCBidXQgd2UncmUgc3VyZQotICAgIC8vIHdlIHdvbid0IGZvcmdldCB0byB1cGRhdGUgYSBtZW1i
ZXIgdmFyaWFibGUgaW4gc29tZSBjYXNlcy4uLgotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+JiBpdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJdGVtcygpOwotICAgIGludCBsZW5ndGgg
PSBpdGVtcy5zaXplKCk7Ci0gICAgaW50IG9wdGlvbkluZGV4ID0gMDsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNPcHRpb25FbGVtZW50KGl0
ZW1zW2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXRlbXNbaV0gPT0g
ZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBvcHRpb25JbmRleDsKLSAgICAgICAgKytvcHRp
b25JbmRleDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotU3RyaW5nIE9wdGlvbkVsZW1l
bnQ6OmNvbGxlY3RPcHRpb25MYWJlbE9yVGV4dChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYgZGF0
YSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBl
bGVtZW50LT5kb2N1bWVudCgpOwotICAgIFN0cmluZyB0ZXh0OwotCi0gICAgLy8gV2luSUUgZG9l
cyBub3QgdXNlIHRoZSBsYWJlbCBhdHRyaWJ1dGUsIHNvIGFzIGEgcXVpcmssIHdlIGlnbm9yZSBp
dC4KLSAgICBpZiAoIWRvY3VtZW50LT5pblF1aXJrc01vZGUoKSkKLSAgICAgICAgdGV4dCA9IGRh
dGEubGFiZWwoKTsKLSAgICBpZiAodGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIHRleHQgPSBjb2xs
ZWN0T3B0aW9uSW5uZXJUZXh0KGVsZW1lbnQpOwotICAgIHJldHVybiBub3JtYWxpemVUZXh0KGRv
Y3VtZW50LCB0ZXh0KTsKLX0KLQotU3RyaW5nIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25J
bm5lclRleHQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBTdHJpbmcgdGV4dDsKLSAg
ICBOb2RlKiBuID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChuKSB7Ci0gICAg
ICAgIGlmIChuLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fCBuLT5ub2RlVHlwZSgp
ID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSkKLSAgICAgICAgICAgIHRleHQgKz0gbi0+bm9k
ZVZhbHVlKCk7Ci0KLSAgICAgICAgLy8gc2tpcCBzY3JpcHQgY29udGVudAotICAgICAgICBpZiAo
bi0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obikpKQotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcoZWxlbWVudCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGVsZW1l
bnQpOwotICAgIH0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotU3RyaW5nIE9wdGlvbkVsZW1lbnQ6
Om5vcm1hbGl6ZVRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHNy
YykKLXsKLSAgICBTdHJpbmcgdGV4dCA9IGRvY3VtZW50LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRC
eUVuY29kaW5nKHNyYyk7Ci0KLSAgICAvLyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJhaWxpbmcg
d2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMgYW5kIG9wdGdyb3Vwcy4gV2UgbWF0Y2gg
dGhpcyBiZWhhdmlvci4KLSAgICB0ZXh0ID0gdGV4dC5zdHJpcFdoaXRlU3BhY2UoaXNIVE1MU3Bh
Y2UpOwotCi0gICAgLy8gV2Ugd2FudCB0byBjb2xsYXBzZSBvdXIgd2hpdGVzcGFjZSB0b28uIFRo
aXMgd2lsbCBtYXRjaCBvdGhlciBicm93c2Vycy4KLSAgICB0ZXh0ID0gdGV4dC5zaW1wbGlmeVdo
aXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotCi0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLVN0cmluZyBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsKGNvbnN0
IE9wdGlvbkVsZW1lbnREYXRhJiBkYXRhLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAg
IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZWxlbWVudC0+
cGFyZW50Tm9kZSgpKTsKLSAgICBpZiAocGFyZW50RWxlbWVudCAmJiB0b09wdGlvbkdyb3VwRWxl
bWVudChwYXJlbnRFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuICIgICAgIiArIGNvbGxlY3RPcHRp
b25MYWJlbE9yVGV4dChkYXRhLCBlbGVtZW50KTsKLQotICAgIHJldHVybiBjb2xsZWN0T3B0aW9u
TGFiZWxPclRleHQoZGF0YSwgZWxlbWVudCk7Ci19Ci0KLVN0cmluZyBPcHRpb25FbGVtZW50Ojpj
b2xsZWN0T3B0aW9uVmFsdWUoY29uc3QgT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgU3RyaW5nIHZhbHVlID0gZGF0YS52YWx1ZSgpOwotICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotICAgIC8vIFVz
ZSB0aGUgdGV4dCBpZiB0aGUgdmFsdWUgd2Fzbid0IHNldC4KLSAgICByZXR1cm4gY29sbGVjdE9w
dGlvbklubmVyVGV4dChlbGVtZW50KS5zdHJpcFdoaXRlU3BhY2UoKTsKLX0KLQotLy8gT3B0aW9u
RWxlbWVudERhdGEKLU9wdGlvbkVsZW1lbnREYXRhOjpPcHRpb25FbGVtZW50RGF0YSgpCi0gICAg
OiBtX3NlbGVjdGVkKGZhbHNlKQotewotfQotCi1PcHRpb25FbGVtZW50RGF0YTo6fk9wdGlvbkVs
ZW1lbnREYXRhKCkKLXsKLX0KLQotT3B0aW9uRWxlbWVudCogdG9PcHRpb25FbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiBlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uVGFnKSkKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWJvb2wgaXNPcHRpb25FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZyk7Ci19Ci0KLX0KKy8v
IERlbGV0ZSB0aGlzIGZpbGUgYWZ0ZXIgdXBkYXRpbmcgYWxsIHRoZSBwcm9qZWN0IGZpbGVzLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA5NzY0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODMg
KzEsMiBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRl
ZiBPcHRpb25FbGVtZW50X2gKLSNkZWZpbmUgT3B0aW9uRWxlbWVudF9oCi0KLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEVsZW1lbnQ7
Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEhUTUxTZWxlY3RFbGVtZW50OwotY2xhc3MgT3B0aW9u
RWxlbWVudERhdGE7Ci0KLWNsYXNzIE9wdGlvbkVsZW1lbnQgewotcHVibGljOgotICAgIHZpcnR1
YWwgfk9wdGlvbkVsZW1lbnQoKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0ZWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFNlbGVjdGVkU3RhdGUoYm9vbCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgdGV4
dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RH
cm91cExhYmVsKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3Qg
PSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShPcHRp
b25FbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBib29sIHNlbGVjdGVkKTsKLSAgICBzdGF0aWMgaW50
IG9wdGlvbkluZGV4KEhUTUxTZWxlY3RFbGVtZW50KiwgY29uc3QgRWxlbWVudCopOwotICAgIHN0
YXRpYyBTdHJpbmcgY29sbGVjdE9wdGlvbkxhYmVsT3JUZXh0KGNvbnN0IE9wdGlvbkVsZW1lbnRE
YXRhJiwgY29uc3QgRWxlbWVudCopOwotICAgIHN0YXRpYyBTdHJpbmcgY29sbGVjdE9wdGlvblRl
eHRSZXNwZWN0aW5nR3JvdXBMYWJlbChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYsIGNvbnN0IEVs
ZW1lbnQqKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RPcHRpb25WYWx1ZShjb25zdCBPcHRp
b25FbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxl
Y3RPcHRpb25Jbm5lclRleHQoY29uc3QgRWxlbWVudCopOwotcHJpdmF0ZToKLSAgICBzdGF0aWMg
U3RyaW5nIG5vcm1hbGl6ZVRleHQoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKLX07
Ci0KLS8vIEhUTUxPcHRpb25FbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZhcmlh
YmxlCi0vLyBhbmQgcGFzcyBpdCB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaW4gT3B0
aW9uRWxlbWVudAotY2xhc3MgT3B0aW9uRWxlbWVudERhdGEgewotcHVibGljOgotICAgIE9wdGlv
bkVsZW1lbnREYXRhKCk7Ci0gICAgfk9wdGlvbkVsZW1lbnREYXRhKCk7Ci0KLSAgICBTdHJpbmcg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQotCi0gICAgU3RyaW5nIGxhYmVs
KCkgY29uc3QgeyByZXR1cm4gbV9sYWJlbDsgfQotICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgU3Ry
aW5nJiBsYWJlbCkgeyBtX2xhYmVsID0gbGFiZWw7IH0KLQotICAgIGJvb2wgc2VsZWN0ZWQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGVkOyB9Ci0gICAgdm9pZCBzZXRTZWxlY3RlZChib29sIHNl
bGVjdGVkKSB7IG1fc2VsZWN0ZWQgPSBzZWxlY3RlZDsgfQotCi1wcml2YXRlOgotICAgIFN0cmlu
ZyBtX3ZhbHVlOwotICAgIFN0cmluZyBtX2xhYmVsOwotICAgIGJvb2wgbV9zZWxlY3RlZDsKLX07
Ci0KLU9wdGlvbkVsZW1lbnQqIHRvT3B0aW9uRWxlbWVudChFbGVtZW50Kik7Ci1ib29sIGlzT3B0
aW9uRWxlbWVudChFbGVtZW50Kik7Ci0KLX0KLQotI2VuZGlmCisjZXJyb3IKKy8vIERlbGV0ZSB0
aGlzIGZpbGUgYWZ0ZXIgdXBkYXRpbmcgYWxsIHRoZSBwcm9qZWN0IGZpbGVzLgpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDk3NjQwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDkgQEAKICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiT3B0aW9uR3JvdXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVu
dUxpc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC00Nyw2ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxPcHRpb25F
bGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCisgICAgLCBtX2lzU2VsZWN0
ZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob3B0aW9uVGFnKSk7CiB9CkBAIC03
NSw3ICs3OCw4IEBAIFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IEhUTUxPcHRpb24KIAog
ICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIGVsZW1lbnQtPnNldFZhbHVlKHZhbHVl
KTsKLSAgICBlbGVtZW50LT5zZXREZWZhdWx0U2VsZWN0ZWQoZGVmYXVsdFNlbGVjdGVkKTsKKyAg
ICBpZiAoZGVmYXVsdFNlbGVjdGVkKQorICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoc2Vs
ZWN0ZWRBdHRyLCBlbXB0eUF0b20pOwogICAgIGVsZW1lbnQtPnNldFNlbGVjdGVkKHNlbGVjdGVk
KTsKIAogICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKQEAgLTExMyw3ICsxMTcsMjQgQEAg
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT3B0aW9uRWxlbWVudDo6ZgogCiBTdHJpbmcgSFRNTE9w
dGlvbkVsZW1lbnQ6OnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBPcHRpb25FbGVtZW50Ojpj
b2xsZWN0T3B0aW9uTGFiZWxPclRleHQobV9kYXRhLCB0aGlzKTsKKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIFN0cmluZyB0ZXh0OworCisgICAgLy8gV2lu
SUUgZG9lcyBub3QgdXNlIHRoZSBsYWJlbCBhdHRyaWJ1dGUsIHNvIGFzIGEgcXVpcmssIHdlIGln
bm9yZSBpdC4KKyAgICBpZiAoIWRvY3VtZW50LT5pblF1aXJrc01vZGUoKSkKKyAgICAgICAgdGV4
dCA9IGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKKyAgICBpZiAodGV4dC5pc0VtcHR5KCkp
CisgICAgICAgIHRleHQgPSBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KCk7CisKKyAgICB0ZXh0ID0g
ZG9jdW1lbnQtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcodGV4dCk7CisKKyAgICAv
LyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIGlu
IG9wdGlvbnMgYW5kIG9wdGdyb3Vwcy4gV2UgbWF0Y2ggdGhpcyBiZWhhdmlvci4KKyAgICB0ZXh0
ID0gdGV4dC5zdHJpcFdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOworCisgICAgLy8gV2Ugd2FudCB0
byBjb2xsYXBzZSBvdXIgd2hpdGVzcGFjZSB0b28uIFRoaXMgd2lsbCBtYXRjaCBvdGhlciBicm93
c2Vycy4KKyAgICB0ZXh0ID0gdGV4dC5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwor
CisgICAgcmV0dXJuIHRleHQ7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFRleHQo
Y29uc3QgU3RyaW5nICZ0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTEzOCwyNCArMTU5LDQ5
IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbigKIAogaW50IEhUTUxP
cHRpb25FbGVtZW50OjppbmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIE9wdGlvbkVsZW1lbnQ6
Om9wdGlvbkluZGV4KG93bmVyU2VsZWN0RWxlbWVudCgpLCB0aGlzKTsKKyAgICBIVE1MU2VsZWN0
RWxlbWVudCogc2VsZWN0RWxlbWVudCA9IG93bmVyU2VsZWN0RWxlbWVudCgpOworICAgIGlmICgh
c2VsZWN0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBMZXQncyBkbyB0aGlz
IGR5bmFtaWNhbGx5LiBNaWdodCBiZSBhIGJpdCBzbG93LCBidXQgd2UncmUgc3VyZQorICAgIC8v
IHdlIHdvbid0IGZvcmdldCB0byB1cGRhdGUgYSBtZW1iZXIgdmFyaWFibGUgaW4gc29tZSBjYXNl
cy4KKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBzZWxlY3RFbGVtZW50
LT5saXN0SXRlbXMoKTsKKyAgICBpbnQgbGVuZ3RoID0gaXRlbXMuc2l6ZSgpOworICAgIGludCBv
cHRpb25JbmRleCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoIWl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGl0ZW1zW2ldID09IHRoaXMpCisgICAgICAgICAgICBy
ZXR1cm4gb3B0aW9uSW5kZXg7CisgICAgICAgICsrb3B0aW9uSW5kZXg7CisgICAgfQorCisgICAg
cmV0dXJuIDA7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHNlbGVjdGVk
QXR0cikKLSAgICAgICAgbV9kYXRhLnNldFNlbGVjdGVkKCFhdHRyLT5pc051bGwoKSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikKLSAgICAgICAgbV9kYXRhLnNldFZh
bHVlKGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBsYWJlbEF0
dHIpCi0gICAgICAgIG1fZGF0YS5zZXRMYWJlbChhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlCisg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzZWxlY3RlZEF0dHIpIHsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRoZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KKyAg
ICAgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaW1wbGllcyB0aGF0IHJlbW92aW5nIHRoZSBzZWxl
Y3RlZCBhdHRyaWJ1dGUgb3IKKyAgICAgICAgLy8gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIGEgc2Vs
ZWN0ZWQgYXR0cmlidXRlIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50CisgICAgICAgIC8vIGhhcyBu
byBlZmZlY3Qgb24gd2hldGhlciB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZC4gRnVydGhlciwgaXQg
c2VlbXMKKyAgICAgICAgLy8gdGhhdCB3ZSBuZWVkIHRvIGRvIG1vcmUgdGhhbiBqdXN0IHNldCBt
X2lzU2VsZWN0ZWQgdG8gc2VsZWN0IGluIHRoYXQKKyAgICAgICAgLy8gY2FzZTsgd2UnZCBuZWVk
IHRvIGRvIHRoZSBvdGhlciB3b3JrIGZyb20gdGhlIHNldFNlbGVjdGVkIGZ1bmN0aW9uLgorICAg
ICAgICBtX2lzU2VsZWN0ZWQgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgfSBlbHNlCiAgICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQog
CiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
T3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvblZhbHVlKG1fZGF0YSwgdGhpcyk7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAg
ICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgLy8gVXNl
IHRoZSB0ZXh0IGlmIHRoZSB2YWx1ZSB3YXNuJ3Qgc2V0LgorICAgIC8vIEZJWE1FOiBUaGlzIGxv
b2tzIGxpa2UgdGhlIHdyb25nIGtpbmQgb2Ygd2hpdGVzcGFjZSBzdHJpcHBpbmcuCisgICAgLy8g
SXQgc2hvdWxkIHVzZSB0aGUgSFRNTCBkZWZpbml0aW9uIG9mIHdoaXRlc3BhY2UuCisgICAgcmV0
dXJuIGNvbGxlY3RPcHRpb25Jbm5lclRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIH0KIAogdm9p
ZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTE2
NywxNSArMjEzLDE1IEBAIGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKCkKIHsKICAg
ICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0RWxlbWVudCgpKQog
ICAgICAgICBzZWxlY3QtPnVwZGF0ZUxpc3RJdGVtU2VsZWN0ZWRTdGF0ZXMoKTsKLSAgICByZXR1
cm4gbV9kYXRhLnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIG1faXNTZWxlY3RlZDsKIH0KIAogdm9p
ZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWQoYm9vbCBzZWxlY3RlZCkKIHsKLSAgICBp
ZiAobV9kYXRhLnNlbGVjdGVkKCkgPT0gc2VsZWN0ZWQpCisgICAgaWYgKG1faXNTZWxlY3RlZCA9
PSBzZWxlY3RlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3B0aW9uRWxlbWVudDo6c2V0U2Vs
ZWN0ZWRTdGF0ZShtX2RhdGEsIHRoaXMsIHNlbGVjdGVkKTsKKyAgICBzZXRTZWxlY3RlZFN0YXRl
KHNlbGVjdGVkKTsKIAogICAgIGlmIChIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJT
ZWxlY3RFbGVtZW50KCkpCiAgICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleChzZWxlY3Rl
ZCA/IGluZGV4KCkgOiAtMSwgZmFsc2UpOwpAQCAtMTgzLDcgKzIyOSwxMSBAQCB2b2lkIEhUTUxP
cHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZChib29sCiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6
OnNldFNlbGVjdGVkU3RhdGUoYm9vbCBzZWxlY3RlZCkKIHsKLSAgICBPcHRpb25FbGVtZW50Ojpz
ZXRTZWxlY3RlZFN0YXRlKG1fZGF0YSwgdGhpcywgc2VsZWN0ZWQpOworICAgIGlmIChtX2lzU2Vs
ZWN0ZWQgPT0gc2VsZWN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNTZWxlY3RlZCA9
IHNlbGVjdGVkOworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBi
ZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQpAQCAt
MjA1LDI2ICsyNTUsMTIgQEAgSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRpb25FbGVtZW50Ojpv
dwogICAgIHJldHVybiB0b0hUTUxTZWxlY3RFbGVtZW50KHNlbGVjdCk7CiB9CiAKLWJvb2wgSFRN
TE9wdGlvbkVsZW1lbnQ6OmRlZmF1bHRTZWxlY3RlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
c3RIYXNBdHRyaWJ1dGUoc2VsZWN0ZWRBdHRyKTsKLX0KLQotdm9pZCBIVE1MT3B0aW9uRWxlbWVu
dDo6c2V0RGVmYXVsdFNlbGVjdGVkKGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2VsZWN0
ZWRBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50OjpsYWJl
bCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIGxhYmVsID0gbV9kYXRhLmxhYmVsKCk7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBsYWJlbCA9IGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKICAg
ICBpZiAoIWxhYmVsLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbGFiZWw7Ci0gCi0gICAgbGFi
ZWwgPSBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KHRoaXMpLnN0cmlwV2hpdGVTcGFjZShpc0hUTUxT
cGFjZSk7Ci0gICAgbGFiZWwgPSBsYWJlbC5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2Up
OwotCi0gICAgcmV0dXJuIGxhYmVsOworICAgICAgICByZXR1cm4gbGFiZWw7IAorICAgIHJldHVy
biBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKS5z
aW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVt
ZW50OjpzZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQpAQCAtMjQ3LDcgKzI4MywxMCBAQCBS
ZW5kZXJTdHlsZSogSFRNTE9wdGlvbkVsZW1lbnQ6Om5vblJlbmRlCiAKIFN0cmluZyBIVE1MT3B0
aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25UZXh0UmVzcGVjdGluZ0dyb3Vw
TGFiZWwobV9kYXRhLCB0aGlzKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnRO
b2RlKCk7CisgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcp
KQorICAgICAgICByZXR1cm4gIiAgICAiICsgdGV4dCgpOworICAgIHJldHVybiB0ZXh0KCk7CiB9
CiAKIGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKQEAgLTI1OSw4ICsy
OTgsOSBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZEludG9UcmVlCiB7CiAgICAg
aWYgKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkgewog
ICAgICAgICBzZWxlY3QtPnNldFJlY2FsY0xpc3RJdGVtcygpOwotICAgICAgICAvLyBBdm9pZCBv
dXIgc2VsZWN0ZWQoKSBnZXR0ZXIgc2luY2UgaXQgd2lsbCByZWNhbGN1bGF0ZSBsaXN0IGl0ZW1z
IGluY29ycmVjdGx5IGZvciB1cy4KLSAgICAgICAgaWYgKG1fZGF0YS5zZWxlY3RlZCgpKQorICAg
ICAgICAvLyBEbyBub3QgY2FsbCBzZWxlY3RlZCgpIHNpbmNlIGNhbGxpbmcgdXBkYXRlTGlzdEl0
ZW1TZWxlY3RlZFN0YXRlcygpCisgICAgICAgIC8vIGF0IHRoaXMgdGltZSB3b24ndCBkbyB0aGUg
cmlnaHQgdGhpbmcuIChXaHksIGV4YWN0bHk/KQorICAgICAgICBpZiAobV9pc1NlbGVjdGVkKQog
ICAgICAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KCksIGZhbHNlKTsKICAg
ICAgICAgc2VsZWN0LT5zY3JvbGxUb1NlbGVjdGlvbigpOwogICAgIH0KQEAgLTI2OCw0ICszMDgs
MzUgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZQogICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CiB9CiAKK1N0cmluZyBI
VE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNvbnN0Cit7CisgICAg
U3RyaW5nQnVpbGRlciB0ZXh0OworICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbjsg
KSB7CisgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICB0ZXh0LmFwcGVu
ZChuLT5ub2RlVmFsdWUoKSk7CisgICAgICAgIC8vIFNraXAgc2NyaXB0IGNvbnRlbnQuCisgICAg
ICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHRvRWxlbWVudChu
KSkpCisgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUodGhpcyk7CisgICAg
fQorICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisKK0hU
TUxPcHRpb25FbGVtZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAg
QVNTRVJUKCFub2RlIHx8IG5vZGUtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4obm9kZSk7Cit9CisKK2NvbnN0IEhUTUxP
cHRpb25FbGVtZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7Cisg
ICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxPcHRpb25FbGVtZW50Kj4obm9kZSk7Cit9CisKKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuaAkocmV2aXNpb24gOTc2NDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjEsMjAgKzIxLDE3IEBACiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBIVE1MT3B0aW9uRWxl
bWVudF9oCiAjZGVmaW5lIEhUTUxPcHRpb25FbGVtZW50X2gKIAogI2luY2x1ZGUgIkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJPcHRpb25FbGVtZW50LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQ7CiAKLWNsYXNzIEhUTUxPcHRp
b25FbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQsIHB1YmxpYyBPcHRpb25F
bGVtZW50IHsKLSAgICBmcmllbmQgY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQ7Ci0gICAgZnJpZW5k
IGNsYXNzIFJlbmRlck1lbnVMaXN0OwotCitjbGFzcyBIVE1MT3B0aW9uRWxlbWVudCA6IHB1Ymxp
YyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MT3B0aW9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKQEAgLTQ2LDE3ICs0
MywxNCBAQCBwdWJsaWM6CiAKICAgICBpbnQgaW5kZXgoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
U3RyaW5nIHZhbHVlKCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RlZCgp
OworICAgIGJvb2wgc2VsZWN0ZWQoKTsKICAgICB2b2lkIHNldFNlbGVjdGVkKGJvb2wpOwogCiAg
ICAgSFRNTFNlbGVjdEVsZW1lbnQqIG93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0OwogCi0gICAg
Ym9vbCBkZWZhdWx0U2VsZWN0ZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldERlZmF1bHRTZWxlY3Rl
ZChib29sKTsKLQogICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TGFiZWwo
Y29uc3QgU3RyaW5nJik7CiAKQEAgLTY0LDYgKzU4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwogCisgICAgU3RyaW5nIHRleHRJbmRlbnRlZFRvUmVz
cGVjdEdyb3VwTGFiZWwoKSBjb25zdDsKKworICAgIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShib29s
KTsKKwogcHJpdmF0ZToKICAgICBIVE1MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CiAKQEAgLTc4LDEwICs3Niw2IEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShib29sKTsKLQotICAg
IHZpcnR1YWwgU3RyaW5nIHRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSBjb25zdDsK
LQogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCk7CiAKQEAgLTg5LDEwICs4MywzNCBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSogbm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNv
bnN0OwogCi0gICAgT3B0aW9uRWxlbWVudERhdGEgbV9kYXRhOworICAgIFN0cmluZyBjb2xsZWN0
T3B0aW9uSW5uZXJUZXh0KCkgY29uc3Q7CisKKyAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBTdHJp
bmcgbV9sYWJlbDsKKyAgICBib29sIG1faXNTZWxlY3RlZDsKICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG1fc3R5bGU7CiB9OwogCitIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVu
dChOb2RlKik7Citjb25zdCBIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChj
b25zdCBOb2RlKik7Cit2b2lkIHRvSFRNTE9wdGlvbkVsZW1lbnQoY29uc3QgSFRNTE9wdGlvbkVs
ZW1lbnQqKTsgLy8gVGhpcyBvdmVybG9hZCB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5l
Y2Vzc2FyeSBjYXN0LgorCisjaWZkZWYgTkRFQlVHCisKKy8vIFRoZSBkZWJ1ZyB2ZXJzaW9ucyBv
ZiB0aGVzZSwgd2l0aCBhc3NlcnRpb25zLCBhcmUgbm90IGlubGluZWQuCisKK2lubGluZSBIVE1M
T3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChOb2RlKiBub2RlKQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KG5vZGUpOworfQorCitpbmxpbmUg
Y29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoY29uc3QgTm9kZSog
bm9kZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9wdGlvbkVsZW1lbnQq
Pihub2RlKTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDk3NjQw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDYgKzc1LDExIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhTZWxlY3RJ
dGVtcyA9IDEKIAogc3RhdGljIGNvbnN0IERPTVRpbWVTdGFtcCB0eXBlQWhlYWRUaW1lb3V0ID0g
MTAwMDsKIAorc3RhdGljIGlubGluZSBIVE1MT3B0aW9uRWxlbWVudCogdG9PcHRpb25FbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0
aW9uVGFnKSA/IHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgOiAwOworfQorCiBIVE1MU2Vs
ZWN0RWxlbWVudDo6SFRNTFNlbGVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiAgICAgOiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQogICAg
ICwgbV9sYXN0Q2hhclRpbWUoMCkKQEAgLTQ0NSw3ICs0NTAsNyBAQCBpbnQgSFRNTFNlbGVjdEVs
ZW1lbnQ6Om5leHRWYWxpZEluZGV4KGluCiAgICAgaW50IHNpemUgPSBsaXN0SXRlbXMuc2l6ZSgp
OwogICAgIGZvciAobGlzdEluZGV4ICs9IGRpcmVjdGlvbjsgbGlzdEluZGV4ID49IDAgJiYgbGlz
dEluZGV4IDwgc2l6ZTsgbGlzdEluZGV4ICs9IGRpcmVjdGlvbikgewogICAgICAgICAtLXNraXA7
Ci0gICAgICAgIGlmICghbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmRpc2FibGVkKCkgJiYgaXNPcHRp
b25FbGVtZW50KGxpc3RJdGVtc1tsaXN0SW5kZXhdKSkgeworICAgICAgICBpZiAoIWxpc3RJdGVt
c1tsaXN0SW5kZXhdLT5kaXNhYmxlZCgpICYmIGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5oYXNUYWdO
YW1lKG9wdGlvblRhZykpIHsKICAgICAgICAgICAgIGxhc3RHb29kSW5kZXggPSBsaXN0SW5kZXg7
CiAgICAgICAgICAgICBpZiAoc2tpcCA8PSAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NTI2LDcgKzUzMSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW8K
ICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5jbGVhcigpOwogICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBPcHRpb25FbGVtZW50KiBvcHRp
b25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKKyAgICAgICAgSFRNTE9wdGlv
bkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOwogICAg
ICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQob3B0aW9uRWxlbWVudCAmJiBvcHRp
b25FbGVtZW50LT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CkBAIC01NDEsNyArNTQ2LDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aQogCiAgICAgY29uc3QgVmVjdG9y
PEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9w
dGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0
aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAg
ICAgICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKG9wdGlvbkVsZW1l
bnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSk7CiAgICAgfQogfQpAQCAtNTYxLDcgKzU2
Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWwKIAogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBPcHRpb25F
bGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKKyAgICAg
ICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRl
bXNbaV0pOwogICAgICAgICBpZiAoIW9wdGlvbkVsZW1lbnQgfHwgaXRlbXNbaV0tPmRpc2FibGVk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtNTkzLDcgKzU5OCw3IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSgKICAgICAvLyBVcGRhdGUgbV9sYXN0T25D
aGFuZ2VTZWxlY3Rpb24gYW5kIGZpcmUgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50Lgog
ICAgIGJvb2wgZmlyZU9uQ2hhbmdlID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVs
ZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAg
IGJvb2wgc2VsZWN0ZWQgPSBvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVk
KCk7CiAgICAgICAgIGlmIChzZWxlY3RlZCAhPSBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbltpXSkK
ICAgICAgICAgICAgIGZpcmVPbkNoYW5nZSA9IHRydWU7CkBAIC02NjcsNyArNjcyLDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKAogCiAgICAgbV9zaG91bGRSZWNh
bGNMaXN0SXRlbXMgPSBmYWxzZTsKIAotICAgIE9wdGlvbkVsZW1lbnQqIGZvdW5kU2VsZWN0ZWQg
PSAwOworICAgIEhUTUxPcHRpb25FbGVtZW50KiBmb3VuZFNlbGVjdGVkID0gMDsKICAgICBmb3Ig
KE5vZGUqIGN1cnJlbnROb2RlID0gdGhpcy0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50Tm9kZTspIHsK
ICAgICAgICAgaWYgKCFjdXJyZW50Tm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAg
ICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHRoaXMpOwpA
QCAtNjg3LDcgKzY5Miw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVt
cygKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChPcHRpb25FbGVtZW50
KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGN1cnJlbnQpKSB7CisgICAgICAgIGlm
IChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChjdXJy
ZW50KSkgewogICAgICAgICAgICAgbV9saXN0SXRlbXMuYXBwZW5kKGN1cnJlbnQpOwogCiAgICAg
ICAgICAgICBpZiAodXBkYXRlU2VsZWN0ZWRTdGF0ZXMgJiYgIW1fbXVsdGlwbGUpIHsKQEAgLTcy
MSw3ICs3MjYsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgoKSBjCiAg
ICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IG9wdGlvbiBzZWxlY3RlZC4KICAg
ICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkg
eworICAgICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlv
bkVsZW1lbnQoaXRlbXNbaV0pKSB7CiAgICAgICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2Vs
ZWN0ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICArK2lu
ZGV4OwpAQCAtNzQyLDcgKzc0Nyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVj
dGVkSW5kZXgKICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgob3B0aW9uSW5k
ZXgpOwogCiAgICAgRWxlbWVudCogZXhjbHVkZUVsZW1lbnQgPSAwOwotICAgIGlmIChPcHRpb25F
bGVtZW50KiBvcHRpb25FbGVtZW50ID0gKGxpc3RJbmRleCA+PSAwID8gdG9PcHRpb25FbGVtZW50
KGl0ZW1zW2xpc3RJbmRleF0pIDogMCkpIHsKKyAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9w
dGlvbkVsZW1lbnQgPSAobGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlz
dEluZGV4XSkgOiAwKSkgewogICAgICAgICBleGNsdWRlRWxlbWVudCA9IGl0ZW1zW2xpc3RJbmRl
eF07CiAgICAgICAgIGlmIChtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4IDwgMCB8fCBkZXNl
bGVjdCkKICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRl
eCk7CkBAIC03ODgsNyArNzkzLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25Ub0xp
c3RJbmRleAogCiAgICAgaW50IG9wdGlvbkluZGV4MiA9IC0xOwogICAgIGZvciAoaW50IGxpc3RJ
bmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3RTaXplOyArK2xpc3RJbmRleCkgewotICAgICAgICBp
ZiAoaXNPcHRpb25FbGVtZW50KGl0ZW1zW2xpc3RJbmRleF0pKSB7CisgICAgICAgIGlmIChpdGVt
c1tsaXN0SW5kZXhdLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsKICAgICAgICAgICAgICsrb3B0
aW9uSW5kZXgyOwogICAgICAgICAgICAgaWYgKG9wdGlvbkluZGV4MiA9PSBvcHRpb25JbmRleCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdEluZGV4OwpAQCAtODAxLDEzICs4MDYsMTMgQEAg
aW50IEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25Ub0xpc3RJbmRleAogaW50IEhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleChpbnQgbGlzdEluZGV4KSBjb25zdAogewogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwotICAgIGlmIChs
aXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUo
KSkgfHwgIWlzT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSkKKyAgICBpZiAobGlzdElu
ZGV4IDwgMCB8fCBsaXN0SW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihpdGVtcy5zaXplKCkpIHx8
ICFpdGVtc1tsaXN0SW5kZXhdLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCiAgICAgICAgIHJldHVy
biAtMTsKIAogICAgIC8vIEFjdHVhbCBpbmRleCBvZiBvcHRpb24gbm90IGNvdW50aW5nIE9QVEdS
T1VQIGVudHJpZXMgdGhhdCBtYXkgYmUgaW4gbGlzdC4KICAgICBpbnQgb3B0aW9uSW5kZXggPSAw
OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdEluZGV4OyArK2kpIHsKLSAgICAgICAgaWYg
KGlzT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzVGFn
TmFtZShvcHRpb25UYWcpKQogICAgICAgICAgICAgKytvcHRpb25JbmRleDsKICAgICB9CiAKQEAg
LTg0MCw3ICs4NDUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zV2l0
CiAgICAgICAgIGlmIChpdGVtc1tpXSA9PSBleGNsdWRlRWxlbWVudCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9P
cHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKICAgICAgICAgICAgIG9w
dGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgIH0KIH0KQEAgLTg1Miw3
ICs4NTcsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTCiAgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0p
OworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxl
bWVudChpdGVtc1tpXSk7CiAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBvcHRpb25FbGVtZW50ICYm
IG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHNlbGVj
dGVkID8gJ1gnIDogJy4nKTsKICAgICB9CkBAIC04NjgsNyArODczLDcgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cgogICAgIHNpemVfdCBsZW5ndGggPSBpdGVtcy5z
aXplKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQo
aXRlbXNbaV0pKQorICAgICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQg
PSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVudC0+
c2V0U2VsZWN0ZWRTdGF0ZShzdGF0ZVtpXSA9PSAnWCcpOwogICAgIH0KIApAQCAtODk1LDcgKzkw
MCw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEYKICAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBPcHRpb25F
bGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKKyAgICAg
ICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRl
bXNbaV0pOwogICAgICAgICBpZiAob3B0aW9uRWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxl
Y3RlZCgpICYmICFvcHRpb25FbGVtZW50LT5kaXNhYmxlZCgpKSB7CiAgICAgICAgICAgICBsaXN0
LmFwcGVuZERhdGEobmFtZSwgb3B0aW9uRWxlbWVudC0+dmFsdWUoKSk7CiAgICAgICAgICAgICBz
dWNjZXNzZnVsID0gdHJ1ZTsKQEAgLTkxMCwxMiArOTE1LDEyIEBAIGJvb2wgSFRNTFNlbGVjdEVs
ZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEYKIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQo
KQogewotICAgIE9wdGlvbkVsZW1lbnQqIGZpcnN0T3B0aW9uID0gMDsKLSAgICBPcHRpb25FbGVt
ZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGZpcnN0T3B0
aW9uID0gMDsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogc2VsZWN0ZWRPcHRpb24gPSAwOwogCiAg
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9w
dGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOwor
ICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChpdGVtc1tpXSk7CiAgICAgICAgIGlmICghb3B0aW9uRWxlbWVudCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCkBAIC0xMTE2LDcgKzExMjEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1
cGRhdGVTZWxlY3RlZFN0CiAgICAgYm9vbCBtdWx0aVNlbGVjdCA9IG1fbXVsdGlwbGUgJiYgbXVs
dGkgJiYgIXNoaWZ0OwogCiAgICAgRWxlbWVudCogY2xpY2tlZEVsZW1lbnQgPSBsaXN0SXRlbXMo
KVtsaXN0SW5kZXhdOwotICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvT3B0aW9uRWxlbWVu
dChjbGlja2VkRWxlbWVudCk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvT3B0
aW9uRWxlbWVudChjbGlja2VkRWxlbWVudCk7CiAgICAgaWYgKG9wdGlvbikgewogICAgICAgICAv
LyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgYW4gYWN0aXZlIHNlbGVjdGlvbiAobGlrZSBkdXJpbmcg
ZHJhZwogICAgICAgICAvLyBzZWxlY3Rpb24pLCBzaG91bGQgc2VsZWN0IG9yIGRlc2VsZWN0LgpA
QCAtMTMxMiw3ICsxMzE3LDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0ZWRM
aXN0SQogewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVt
cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSBpdGVtcy5zaXplKCk7IGk7KSB7Ci0gICAgICAgIGlm
IChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zWy0t
aV0pKSB7CisgICAgICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRv
T3B0aW9uRWxlbWVudChpdGVtc1stLWldKSkgewogICAgICAgICAgICAgaWYgKG9wdGlvbkVsZW1l
bnQtPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAg
LTEzNzgsNyArMTM4Myw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQo
S2UKICAgICAvLyB0byB1c2Ugc3RhcnRXaXRoIG9uY2UgdGhhdCBpcyBmaXhlZC4KICAgICBTdHJp
bmcgcHJlZml4V2l0aENhc2VGb2xkZWQocHJlZml4LmZvbGRDYXNlKCkpOwogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgaXRlbUNvdW50OyArK2ksIGluZGV4ID0gKGluZGV4ICsgMSkgJSBpdGVtQ291
bnQpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxl
bWVudChpdGVtc1tpbmRleF0pOworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxl
bWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpbmRleF0pOwogICAgICAgICBpZiAoIW9wdGlv
bkVsZW1lbnQgfHwgaXRlbXNbaW5kZXhdLT5kaXNhYmxlZCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKQEAgLTE0MTQsNyArMTQxOSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmFjY2Vz
c0tleVNldFNlbGUKICAgICAvLyBJZiB0aGlzIGluZGV4IGlzIGFscmVhZHkgc2VsZWN0ZWQsIHVu
c2VsZWN0LiBvdGhlcndpc2UgdXBkYXRlIHRoZSBzZWxlY3RlZCBpbmRleC4KICAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdElu
ZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoaW5kZXgpOwotICAgIGlmIChPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gKGxpc3RJbmRleCA+PSAwID8gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2xp
c3RJbmRleF0pIDogMCkpIHsKKyAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1l
bnQgPSAobGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkg
OiAwKSkgewogICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkKICAgICAgICAg
ICAgIG9wdGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgICAgICBlbHNl
CkBAIC0xNDM1LDcgKzE0NDAsNyBAQCB1bnNpZ25lZCBIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3Ro
KCkgY29uCiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRl
bXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKGlzT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCisgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQogICAgICAgICAgICAgKytvcHRpb25zOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAko
cmV2aXNpb24gOTc2NDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMSBAQAogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVj
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTm9kZVJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiT3B0aW9uR3JvdXBFbGVtZW50LmgiCi0jaW5jbHVkZSAi
T3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8u
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgpAQCAtMTExLDExICsxMTEsMTEgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIAogICAgICAgICBmbG9h
dCB3aWR0aCA9IDA7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAgICAgICAgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07CiAgICAgICAgICAgICBTdHJpbmcg
dGV4dDsKICAgICAgICAgICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAg
ICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChlbGVtZW50KSkKLSAgICAgICAgICAgICAgICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dElu
ZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUob3B0aW9uVGFnKSkKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdG9IVE1MT3B0aW9u
RWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAg
ICAgICAgICAgZWxzZSBpZiAoT3B0aW9uR3JvdXBFbGVtZW50KiBvcHRpb25Hcm91cEVsZW1lbnQg
PSB0b09wdGlvbkdyb3VwRWxlbWVudChlbGVtZW50KSkgewogICAgICAgICAgICAgICAgIHRleHQg
PSBvcHRpb25Hcm91cEVsZW1lbnQtPmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKQEAgLTMyNyw4
ICszMjcsOCBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlCiAgICAg
aW50IHNpemUgPSBudW1JdGVtcygpOwogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBs
aXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09w
dGlvbkVsZW1lbnQobGlzdEl0ZW1zW2ldKTsKLSAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQgJiYg
IW9wdGlvbkVsZW1lbnQtPmRpc2FibGVkKCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1l
bnQgPSBsaXN0SXRlbXNbaV07CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlv
blRhZykgJiYgIXRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPmRpc2FibGVkKCkpIHsKICAg
ICAgICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KGFkZGl0aW9uYWxPZmZz
ZXQsIGkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzcxLDggKzM3MSw3
IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICBGb250Q2Fj
aGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKIAogICAgIGNvbnN0IFZl
Y3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUo
KSktPmxpc3RJdGVtcygpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdElu
ZGV4XTsKLSAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50
KGVsZW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRl
eF07CiAKICAgICBSZW5kZXJTdHlsZSogaXRlbVN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKICAgICBpZiAoIWl0ZW1TdHlsZSkKQEAgLTM4MiwxNCArMzgxLDE1IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3Ry
aW5nIGl0ZW1UZXh0OwotICAgIGlmIChvcHRpb25FbGVtZW50KQotICAgICAgICBpdGVtVGV4dCA9
IG9wdGlvbkVsZW1lbnQtPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKKyAgICBi
b29sIGlzT3B0aW9uRWxlbWVudCA9IGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKTsKKyAg
ICBpZiAoaXNPcHRpb25FbGVtZW50KQorICAgICAgICBpdGVtVGV4dCA9IHRvSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCktPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICBl
bHNlIGlmIChPcHRpb25Hcm91cEVsZW1lbnQqIG9wdGlvbkdyb3VwRWxlbWVudCA9IHRvT3B0aW9u
R3JvdXBFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICBpdGVtVGV4dCA9IG9wdGlvbkdyb3VwRWxl
bWVudC0+Z3JvdXBMYWJlbFRleHQoKTsKICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwg
aXRlbVRleHQsICcgJyk7CiAKICAgICBDb2xvciB0ZXh0Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJT
dHlsZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpIDogc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Q29sb3IpOwotICAgIGlmIChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVj
dGVkKCkpIHsKKyAgICBpZiAoaXNPcHRpb25FbGVtZW50ICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCktPnNlbGVjdGVkKCkpIHsKICAgICAgICAgaWYgKGZyYW1lKCktPnNlbGVjdGlvbigp
LT5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IG5v
ZGUoKSkKICAgICAgICAgICAgIHRleHRDb2xvciA9IHRoZW1lKCktPmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKICAgICAgICAgLy8gSG9ub3IgdGhlIGZvcmVncm91bmQg
Y29sb3IgZm9yIGRpc2FibGVkIGl0ZW1zCkBAIC00MjIsMTEgKzQyMiwxMCBAQCB2b2lkIFJlbmRl
ckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50
SXRlbUJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCwgaW50IGxpc3RJbmRleCkKIHsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRlbXMo
KTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgT3B0
aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KTsKKyAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgQ29s
b3IgYmFja0NvbG9yOwotICAgIGlmIChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNl
bGVjdGVkKCkpIHsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmIHRv
SFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCkpIHsKICAgICAgICAgaWYgKGZy
YW1lKCktPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudCgpLT5m
b2N1c2VkTm9kZSgpID09IG5vZGUoKSkKICAgICAgICAgICAgIGJhY2tDb2xvciA9IHRoZW1lKCkt
PmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKICAgICAgICAgZWxzZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZp
c2lvbiA5NzY0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5
bGUuaCIKLSNpbmNsdWRlICJPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlJlbmRlckJSLmgiCkBAIC0xNTEsMTIgKzE1
MSwxMSBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgRm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0g
bGlzdEl0ZW1zW2ldOwotICAgICAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9P
cHRpb25FbGVtZW50KGVsZW1lbnQpOwotICAgICAgICBpZiAoIW9wdGlvbkVsZW1lbnQpCisgICAg
ICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAgICAgICBpZiAoIWVs
ZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIFN0cmluZyB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpOworICAgICAgICBTdHJpbmcgdGV4dCA9IHRvSFRNTE9wdGlvbkVsZW1lbnQo
ZWxlbWVudCktPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICAgICAgYXBw
bHlUZXh0VHJhbnNmb3JtKHN0eWxlKCksIHRleHQsICcgJyk7CiAgICAgICAgIGlmICh0aGVtZSgp
LT5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAgICAgICAvLyBBZGQg
aW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3VsYXRlIHBlcmNlbnRh
Z2UgdmFsdWVzIGZvciBub3cuCkBAIC0yMDIsOCArMjAxLDggQEAgdm9pZCBSZW5kZXJNZW51TGlz
dDo6c2V0VGV4dEZyb21PcHRpb24oaQogICAgIFN0cmluZyB0ZXh0ID0gIiI7CiAgICAgaWYgKGkg
Pj0gMCAmJiBpIDwgc2l6ZSkgewogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1z
W2ldOwotICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9u
RWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgdGV4dCA9IG9wdGlvbkVsZW1lbnQtPnRl
eHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUob3B0aW9uVGFnKSkgeworICAgICAgICAgICAgdGV4dCA9IHRvSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCktPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICAg
ICAgICAgIG1fb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMzc3LDggKzM3Niw4IEBAIFN0cmluZyBSZW5kZXJNZW51TGlzdDo6aXRlbVRl
eHQodW5zaWduZWQKICAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07
CiAgICAgaWYgKE9wdGlvbkdyb3VwRWxlbWVudCogb3B0aW9uR3JvdXBFbGVtZW50ID0gdG9PcHRp
b25Hcm91cEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIGl0ZW1TdHJpbmcgPSBvcHRpb25Hcm91
cEVsZW1lbnQtPmdyb3VwTGFiZWxUZXh0KCk7Ci0gICAgZWxzZSBpZiAoT3B0aW9uRWxlbWVudCog
b3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgaXRlbVN0
cmluZyA9IG9wdGlvbkVsZW1lbnQtPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsK
KyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCisgICAgICAgIGl0
ZW1TdHJpbmcgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRUb1Jl
c3BlY3RHcm91cExhYmVsKCk7CiAKICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgaXRl
bVN0cmluZywgJyAnKTsKICAgICByZXR1cm4gaXRlbVN0cmluZzsKQEAgLTU1Nyw5ICs1NTYsOCBA
QCBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3RlZCh1bnNpCiAgICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgp
KS0+bGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSBsaXN0SXRlbXMuc2l6ZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1l
bnQgPSB0b09wdGlvbkVsZW1lbnQobGlzdEl0ZW1zW2xpc3RJbmRleF0pKQotICAgICAgICByZXR1
cm4gb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgSFRN
TEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKKyAgICByZXR1cm4gZWxl
bWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVu
dCktPnNlbGVjdGVkKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRl
bSh1bnNpZ25lZCBsaXN0SW5kZXgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111347</attachid>
            <date>2011-10-17 16:46:30 -0700</date>
            <delta_ts>2011-10-18 15:34:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70276-20111017164629.patch</filename>
            <type>text/plain</type>
            <size>43086</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NjYwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMTAtMTcgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBPcHRpb25FbGVtZW50IChm
aXJzdCBoYWxmKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzAyNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvcmluZyB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbmV3IHRlc3RzLgorCisgICAgICAg
ICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBVc2UgaGFzVGFnTmFtZQorICAgICAgICBhbmQgdG9I
VE1MT3B0aW9uRWxlbWVudCBpbnN0ZWFkIG9mIHRvT3B0aW9uRWxlbWVudC4KKworICAgICAgICAq
IGRvbS9PcHRpb25FbGVtZW50LmNwcDogRGVsZXRlZCBjb250ZW50cy4gUmVtb3ZlIGZpbGUgbGF0
ZXIuCisgICAgICAgICogZG9tL09wdGlvbkVsZW1lbnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudCk6IEluaXRpYWxpemUgbV9pc1NlbGVjdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3Ip
OiBJbml0aWFsaXplIHRoZQorICAgICAgICBzZWxlY3RlZCBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4g
Y2FsbGluZyBzZXREZWZhdWx0U2VsZWN0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6dGV4dCk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBPcHRpb25F
bGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRleHQuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudDo6aW5kZXgpOiBNb3ZlZCB0aGUgY29kZSBoZXJlIGZyb20KKyAgICAgICAg
T3B0aW9uRWxlbWVudDo6b3B0aW9uSW5kZXguCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAg
IGNvZGUgdG8gY2FsbCBzZXRWYWx1ZSBhbmQgc2V0TGFiZWwuIENoYW5nZWQgdGhlIGNvZGUgdGhh
dCBjYWxsZWQKKyAgICAgICAgc2V0U2VsZWN0ZWQgdG8gaW5zdGVhZCBzZXQgbV9pc1NlbGVjdGVk
IGFuZCBhZGRlZCBhIEZJWE1FIGFib3V0IHdoeQorICAgICAgICB0aGF0J3MgcHJvYmFibHkgd3Jv
bmcsIGJ1dCBzYW1lIGJlaGF2aW9yIGFzIGJlZm9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50Ojp2YWx1ZSk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uVmFsdWUuIEFkZGVkIGEgRklYTUUgYWJvdXQgaW5j
b3JyZWN0CisgICAgICAgIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKTogVXNlIG1faXNTZWxlY3RlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZCk6IFVzZSBtX2lzU2VsZWN0
ZWQgYW5kCisgICAgICAgIGNhbGwgc2V0U2VsZWN0ZWRTdGF0ZSBpbnN0ZWFkIG9mIE9wdGlvbkVs
ZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6IE1vdmVkIHRoZSBjb2RlCisgICAgICAgIGhlcmUgZnJv
bSBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6OmxhYmVsKTogU3RyZWFtbGluZWQgdGhlIGNvZGUuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJl
bCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbSBPcHRpb25FbGVtZW50Ojpjb2xs
ZWN0T3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOiBVc2UgbV9pc1NlbGVjdGVkCisgICAg
ICAgIGFuZCByZXdyb3RlIGNvbW1lbnQgZm9yIGNsYXJpdHkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6IE1vdmVkIHRoaXMKKyAg
ICAgICAgaGVyZSBmcm9tIE9wdGlvbkVsZW1lbnQsIGFuZCBjaGFuZ2VkIHRvIHVzZSBTdHJpbmdC
dWlsZGVyLgorICAgICAgICAoV2ViQ29yZTo6dG9IVE1MT3B0aW9uRWxlbWVudCk6IEFkZGVkLgor
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOiBSZW1vdmVkIE9wdGlvbkVsZW1l
bnQuaCBpbmNsdWRlLgorICAgICAgICBSZW1vdmVkIE9wdGlvbkVsZW1lbnQgYmFzZSBjbGFzcy4g
UmVtb3ZlZCB1bm5lZWRlZCBmcmllbmQgZGVjbGFyYXRpb25zLgorICAgICAgICBNYWRlIHZhbHVl
IGFuZCBzZWxlY3RlZCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuIFJlbW92ZWQgdW5uZWVkZWQKKyAg
ICAgICAgZGVmYXVsdFNlbGVjdGVkIGFuZCBzZXREZWZhdWx0U2VsZWN0ZWQgZnVuY3Rpb25zLiBN
YWRlIHRoZQorICAgICAgICB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsIGFuZCBzZXRT
ZWxlY3RlZFN0YXRlIGZ1bmN0aW9ucworICAgICAgICBiZSBub24tdmlydHVhbCBhbmQgcHVibGlj
LiBBZGRlZCBhIGNvbGxlY3RPcHRpb25Jbm5lclRleHQgZnVuY3Rpb24uCisgICAgICAgIFJlcGxh
Y2VkIG1fZGF0YSB3aXRoIG1fdmFsdWUsIG1fbGFiZWwsIGFuZCBtX3NlbGVjdGVkLgorCisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b09w
dGlvbkVsZW1lbnQpOiBBZGRlZC4gSGVscGVyIHRvIGtlZXAgZXhpc3RpbmcgY29kZQorICAgICAg
ICBjbG9zZSB0byB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpuZXh0VmFsaWRJbmRleCk6IFVzZSBoYXNUYWdOYW1lCisgICAgICAgIGluc3RlYWQgb2YgaXNP
cHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVM
YXN0U2VsZWN0aW9uKTogVXNlIEhUTUxPcHRpb25FbGVtZW50CisgICAgICAgIHR5cGUgaW5zdGVh
ZCBvZiBPcHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5k
ZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxl
Y3RlZEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
b3B0aW9uVG9MaXN0SW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZv
cm1Db250cm9sU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjphcHBlbmRGb3JtRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKTog
RGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6IFVzZSBIVE1MT3B0
aW9uRWxlbWVudCwKKyAgICAgICAgaGFzVGFnTmFtZSwgYW5kIHRvSFRNTE9wdGlvbkVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFj
a2dyb3VuZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVk
KTogRGl0dG8uCisKIDIwMTEtMTAtMTcgIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyLm9ic2VydmUgZm9yIGF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiA5NzY0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcs
MTAgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MT3B0
aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTExNCw5ICsx
MTE0LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQwogICAgICAg
ICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVt
ZW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQt
PnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICBP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGUpOwotICAgICAg
ICAgICAgICAgIGlmIChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkp
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSAmJiB0b0hUTUxP
cHRpb25FbGVtZW50KGUpLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDk3NjQwKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MCArMSBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk9wdGlvbkVsZW1lbnQuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgot
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiT3B0aW9uR3JvdXBFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBPcHRpb25FbGVtZW50OjpzZXRT
ZWxlY3RlZFN0YXRlKE9wdGlvbkVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBi
b29sIHNlbGVjdGVkKQotewotICAgIGlmIChkYXRhLnNlbGVjdGVkKCkgPT0gc2VsZWN0ZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGRhdGEuc2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOwotICAgIGVs
ZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLX0KLQotaW50IE9wdGlvbkVsZW1lbnQ6Om9w
dGlvbkluZGV4KEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50LCBjb25zdCBFbGVtZW50
KiBlbGVtZW50KQotewotICAgIGlmICghc2VsZWN0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAvLyBMZXQncyBkbyB0aGlzIGR5bmFtaWNhbGx5LiBNaWdodCBiZSBhIGJpdCBzbG93
LCBidXQgd2UncmUgc3VyZQotICAgIC8vIHdlIHdvbid0IGZvcmdldCB0byB1cGRhdGUgYSBtZW1i
ZXIgdmFyaWFibGUgaW4gc29tZSBjYXNlcy4uLgotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+JiBpdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJdGVtcygpOwotICAgIGludCBsZW5ndGgg
PSBpdGVtcy5zaXplKCk7Ci0gICAgaW50IG9wdGlvbkluZGV4ID0gMDsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNPcHRpb25FbGVtZW50KGl0
ZW1zW2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXRlbXNbaV0gPT0g
ZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBvcHRpb25JbmRleDsKLSAgICAgICAgKytvcHRp
b25JbmRleDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotU3RyaW5nIE9wdGlvbkVsZW1l
bnQ6OmNvbGxlY3RPcHRpb25MYWJlbE9yVGV4dChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYgZGF0
YSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBl
bGVtZW50LT5kb2N1bWVudCgpOwotICAgIFN0cmluZyB0ZXh0OwotCi0gICAgLy8gV2luSUUgZG9l
cyBub3QgdXNlIHRoZSBsYWJlbCBhdHRyaWJ1dGUsIHNvIGFzIGEgcXVpcmssIHdlIGlnbm9yZSBp
dC4KLSAgICBpZiAoIWRvY3VtZW50LT5pblF1aXJrc01vZGUoKSkKLSAgICAgICAgdGV4dCA9IGRh
dGEubGFiZWwoKTsKLSAgICBpZiAodGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIHRleHQgPSBjb2xs
ZWN0T3B0aW9uSW5uZXJUZXh0KGVsZW1lbnQpOwotICAgIHJldHVybiBub3JtYWxpemVUZXh0KGRv
Y3VtZW50LCB0ZXh0KTsKLX0KLQotU3RyaW5nIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25J
bm5lclRleHQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBTdHJpbmcgdGV4dDsKLSAg
ICBOb2RlKiBuID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChuKSB7Ci0gICAg
ICAgIGlmIChuLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fCBuLT5ub2RlVHlwZSgp
ID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSkKLSAgICAgICAgICAgIHRleHQgKz0gbi0+bm9k
ZVZhbHVlKCk7Ci0KLSAgICAgICAgLy8gc2tpcCBzY3JpcHQgY29udGVudAotICAgICAgICBpZiAo
bi0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obikpKQotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcoZWxlbWVudCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGVsZW1l
bnQpOwotICAgIH0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotU3RyaW5nIE9wdGlvbkVsZW1lbnQ6
Om5vcm1hbGl6ZVRleHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHNy
YykKLXsKLSAgICBTdHJpbmcgdGV4dCA9IGRvY3VtZW50LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRC
eUVuY29kaW5nKHNyYyk7Ci0KLSAgICAvLyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJhaWxpbmcg
d2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMgYW5kIG9wdGdyb3Vwcy4gV2UgbWF0Y2gg
dGhpcyBiZWhhdmlvci4KLSAgICB0ZXh0ID0gdGV4dC5zdHJpcFdoaXRlU3BhY2UoaXNIVE1MU3Bh
Y2UpOwotCi0gICAgLy8gV2Ugd2FudCB0byBjb2xsYXBzZSBvdXIgd2hpdGVzcGFjZSB0b28uIFRo
aXMgd2lsbCBtYXRjaCBvdGhlciBicm93c2Vycy4KLSAgICB0ZXh0ID0gdGV4dC5zaW1wbGlmeVdo
aXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotCi0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLVN0cmluZyBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsKGNvbnN0
IE9wdGlvbkVsZW1lbnREYXRhJiBkYXRhLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAg
IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZWxlbWVudC0+
cGFyZW50Tm9kZSgpKTsKLSAgICBpZiAocGFyZW50RWxlbWVudCAmJiB0b09wdGlvbkdyb3VwRWxl
bWVudChwYXJlbnRFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuICIgICAgIiArIGNvbGxlY3RPcHRp
b25MYWJlbE9yVGV4dChkYXRhLCBlbGVtZW50KTsKLQotICAgIHJldHVybiBjb2xsZWN0T3B0aW9u
TGFiZWxPclRleHQoZGF0YSwgZWxlbWVudCk7Ci19Ci0KLVN0cmluZyBPcHRpb25FbGVtZW50Ojpj
b2xsZWN0T3B0aW9uVmFsdWUoY29uc3QgT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgU3RyaW5nIHZhbHVlID0gZGF0YS52YWx1ZSgpOwotICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotICAgIC8vIFVz
ZSB0aGUgdGV4dCBpZiB0aGUgdmFsdWUgd2Fzbid0IHNldC4KLSAgICByZXR1cm4gY29sbGVjdE9w
dGlvbklubmVyVGV4dChlbGVtZW50KS5zdHJpcFdoaXRlU3BhY2UoKTsKLX0KLQotLy8gT3B0aW9u
RWxlbWVudERhdGEKLU9wdGlvbkVsZW1lbnREYXRhOjpPcHRpb25FbGVtZW50RGF0YSgpCi0gICAg
OiBtX3NlbGVjdGVkKGZhbHNlKQotewotfQotCi1PcHRpb25FbGVtZW50RGF0YTo6fk9wdGlvbkVs
ZW1lbnREYXRhKCkKLXsKLX0KLQotT3B0aW9uRWxlbWVudCogdG9PcHRpb25FbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiBlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uVGFnKSkKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWJvb2wgaXNPcHRpb25FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZyk7Ci19Ci0KLX0KKy8v
IERlbGV0ZSB0aGlzIGZpbGUgYWZ0ZXIgdXBkYXRpbmcgYWxsIHRoZSBwcm9qZWN0IGZpbGVzLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA5NzY0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODMg
KzEsMiBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRl
ZiBPcHRpb25FbGVtZW50X2gKLSNkZWZpbmUgT3B0aW9uRWxlbWVudF9oCi0KLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEVsZW1lbnQ7
Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEhUTUxTZWxlY3RFbGVtZW50OwotY2xhc3MgT3B0aW9u
RWxlbWVudERhdGE7Ci0KLWNsYXNzIE9wdGlvbkVsZW1lbnQgewotcHVibGljOgotICAgIHZpcnR1
YWwgfk9wdGlvbkVsZW1lbnQoKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0ZWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFNlbGVjdGVkU3RhdGUoYm9vbCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgdGV4
dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RH
cm91cExhYmVsKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3Qg
PSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShPcHRp
b25FbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBib29sIHNlbGVjdGVkKTsKLSAgICBzdGF0aWMgaW50
IG9wdGlvbkluZGV4KEhUTUxTZWxlY3RFbGVtZW50KiwgY29uc3QgRWxlbWVudCopOwotICAgIHN0
YXRpYyBTdHJpbmcgY29sbGVjdE9wdGlvbkxhYmVsT3JUZXh0KGNvbnN0IE9wdGlvbkVsZW1lbnRE
YXRhJiwgY29uc3QgRWxlbWVudCopOwotICAgIHN0YXRpYyBTdHJpbmcgY29sbGVjdE9wdGlvblRl
eHRSZXNwZWN0aW5nR3JvdXBMYWJlbChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYsIGNvbnN0IEVs
ZW1lbnQqKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RPcHRpb25WYWx1ZShjb25zdCBPcHRp
b25FbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxl
Y3RPcHRpb25Jbm5lclRleHQoY29uc3QgRWxlbWVudCopOwotcHJpdmF0ZToKLSAgICBzdGF0aWMg
U3RyaW5nIG5vcm1hbGl6ZVRleHQoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKLX07
Ci0KLS8vIEhUTUxPcHRpb25FbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZhcmlh
YmxlCi0vLyBhbmQgcGFzcyBpdCB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaW4gT3B0
aW9uRWxlbWVudAotY2xhc3MgT3B0aW9uRWxlbWVudERhdGEgewotcHVibGljOgotICAgIE9wdGlv
bkVsZW1lbnREYXRhKCk7Ci0gICAgfk9wdGlvbkVsZW1lbnREYXRhKCk7Ci0KLSAgICBTdHJpbmcg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQotCi0gICAgU3RyaW5nIGxhYmVs
KCkgY29uc3QgeyByZXR1cm4gbV9sYWJlbDsgfQotICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgU3Ry
aW5nJiBsYWJlbCkgeyBtX2xhYmVsID0gbGFiZWw7IH0KLQotICAgIGJvb2wgc2VsZWN0ZWQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGVkOyB9Ci0gICAgdm9pZCBzZXRTZWxlY3RlZChib29sIHNl
bGVjdGVkKSB7IG1fc2VsZWN0ZWQgPSBzZWxlY3RlZDsgfQotCi1wcml2YXRlOgotICAgIFN0cmlu
ZyBtX3ZhbHVlOwotICAgIFN0cmluZyBtX2xhYmVsOwotICAgIGJvb2wgbV9zZWxlY3RlZDsKLX07
Ci0KLU9wdGlvbkVsZW1lbnQqIHRvT3B0aW9uRWxlbWVudChFbGVtZW50Kik7Ci1ib29sIGlzT3B0
aW9uRWxlbWVudChFbGVtZW50Kik7Ci0KLX0KLQotI2VuZGlmCisjZXJyb3IKKy8vIERlbGV0ZSB0
aGlzIGZpbGUgYWZ0ZXIgdXBkYXRpbmcgYWxsIHRoZSBwcm9qZWN0IGZpbGVzLgpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDk3NjQwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDEwIEBACiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIk9wdGlvbkdyb3VwRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck1l
bnVMaXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIlN0cmluZ0J1
aWxkZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ3LDYgKzUwLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogSFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1F
bGVtZW50KiBmb3JtKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCwgZm9ybSkKKyAgICAsIG1faXNTZWxlY3RlZChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFz
VGFnTmFtZShvcHRpb25UYWcpKTsKIH0KQEAgLTc1LDcgKzc5LDggQEAgUGFzc1JlZlB0cjxIVE1M
T3B0aW9uRWxlbWVudD4gSFRNTE9wdGlvbgogCiAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKICAg
ICAgICAgZWxlbWVudC0+c2V0VmFsdWUodmFsdWUpOwotICAgIGVsZW1lbnQtPnNldERlZmF1bHRT
ZWxlY3RlZChkZWZhdWx0U2VsZWN0ZWQpOworICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQpCisgICAg
ICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShzZWxlY3RlZEF0dHIsIGVtcHR5QXRvbSk7CiAgICAg
ZWxlbWVudC0+c2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOwogCiAgICAgcmV0dXJuIGVsZW1lbnQucmVs
ZWFzZSgpOwpAQCAtMTEzLDcgKzExOCwyNCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxPcHRp
b25FbGVtZW50OjpmCiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6dGV4dCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25MYWJlbE9yVGV4dChtX2Rh
dGEsIHRoaXMpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7Cisg
ICAgU3RyaW5nIHRleHQ7CisKKyAgICAvLyBXaW5JRSBkb2VzIG5vdCB1c2UgdGhlIGxhYmVsIGF0
dHJpYnV0ZSwgc28gYXMgYSBxdWlyaywgd2UgaWdub3JlIGl0LgorICAgIGlmICghZG9jdW1lbnQt
PmluUXVpcmtzTW9kZSgpKQorICAgICAgICB0ZXh0ID0gZmFzdEdldEF0dHJpYnV0ZShsYWJlbEF0
dHIpOworICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgdGV4dCA9IGNvbGxlY3RPcHRp
b25Jbm5lclRleHQoKTsKKworICAgIHRleHQgPSBkb2N1bWVudC0+ZGlzcGxheVN0cmluZ01vZGlm
aWVkQnlFbmNvZGluZyh0ZXh0KTsKKworICAgIC8vIEluIFdpbklFLCBsZWFkaW5nIGFuZCB0cmFp
bGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucyBhbmQgb3B0Z3JvdXBzLiBXZSBt
YXRjaCB0aGlzIGJlaGF2aW9yLgorICAgIHRleHQgPSB0ZXh0LnN0cmlwV2hpdGVTcGFjZShpc0hU
TUxTcGFjZSk7CisKKyAgICAvLyBXZSB3YW50IHRvIGNvbGxhcHNlIG91ciB3aGl0ZXNwYWNlIHRv
by4gVGhpcyB3aWxsIG1hdGNoIG90aGVyIGJyb3dzZXJzLgorICAgIHRleHQgPSB0ZXh0LnNpbXBs
aWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7CisKKyAgICByZXR1cm4gdGV4dDsKIH0KIAogdm9p
ZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHJpbmcgJnRleHQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTM4LDI0ICsxNjAsNDkgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6
YWNjZXNzS2V5QWN0aW9uKAogCiBpbnQgSFRNTE9wdGlvbkVsZW1lbnQ6OmluZGV4KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gT3B0aW9uRWxlbWVudDo6b3B0aW9uSW5kZXgob3duZXJTZWxlY3RFbGVt
ZW50KCksIHRoaXMpOworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gb3du
ZXJTZWxlY3RFbGVtZW50KCk7CisgICAgaWYgKCFzZWxlY3RFbGVtZW50KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIC8vIExldCdzIGRvIHRoaXMgZHluYW1pY2FsbHkuIE1pZ2h0IGJlIGEgYml0
IHNsb3csIGJ1dCB3ZSdyZSBzdXJlCisgICAgLy8gd2Ugd29uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSBh
IG1lbWJlciB2YXJpYWJsZSBpbiBzb21lIGNhc2VzLgorICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxl
bWVudCo+JiBpdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJdGVtcygpOworICAgIGludCBsZW5n
dGggPSBpdGVtcy5zaXplKCk7CisgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICghaXRlbXNbaV0tPmhhc1Rh
Z05hbWUob3B0aW9uVGFnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoaXRl
bXNbaV0gPT0gdGhpcykKKyAgICAgICAgICAgIHJldHVybiBvcHRpb25JbmRleDsKKyAgICAgICAg
KytvcHRpb25JbmRleDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewotICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gc2VsZWN0ZWRBdHRyKQotICAgICAgICBtX2RhdGEuc2V0U2Vs
ZWN0ZWQoIWF0dHItPmlzTnVsbCgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFs
dWVBdHRyKQotICAgICAgICBtX2RhdGEuc2V0VmFsdWUoYXR0ci0+dmFsdWUoKSk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGxhYmVsQXR0cikKLSAgICAgICAgbV9kYXRhLnNldExhYmVs
KGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IHNlbGVj
dGVkQXR0cikgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IG1hdGNoIHdoYXQgdGhl
IEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzLgorICAgICAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBp
bXBsaWVzIHRoYXQgcmVtb3ZpbmcgdGhlIHNlbGVjdGVkIGF0dHJpYnV0ZSBvcgorICAgICAgICAv
LyBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgYSBzZWxlY3RlZCBhdHRyaWJ1dGUgdGhhdCBpcyBhbHJl
YWR5IHByZXNlbnQKKyAgICAgICAgLy8gaGFzIG5vIGVmZmVjdCBvbiB3aGV0aGVyIHRoZSBlbGVt
ZW50IGlzIHNlbGVjdGVkLiBGdXJ0aGVyLCBpdCBzZWVtcworICAgICAgICAvLyB0aGF0IHdlIG5l
ZWQgdG8gZG8gbW9yZSB0aGFuIGp1c3Qgc2V0IG1faXNTZWxlY3RlZCB0byBzZWxlY3QgaW4gdGhh
dAorICAgICAgICAvLyBjYXNlOyB3ZSdkIG5lZWQgdG8gZG8gdGhlIG90aGVyIHdvcmsgZnJvbSB0
aGUgc2V0U2VsZWN0ZWQgZnVuY3Rpb24uCisgICAgICAgIG1faXNTZWxlY3RlZCA9ICFhdHRyLT5p
c051bGwoKTsKKyAgICB9IGVsc2UKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6
dmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBPcHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9u
VmFsdWUobV9kYXRhLCB0aGlzKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZmFz
dEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOworICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAvLyBVc2UgdGhlIHRleHQgaWYgdGhlIHZhbHVlIHdhc24n
dCBzZXQuCisgICAgLy8gRklYTUU6IFRoaXMgbG9va3MgbGlrZSB0aGUgd3Jvbmcga2luZCBvZiB3
aGl0ZXNwYWNlIHN0cmlwcGluZy4KKyAgICAvLyBJdCBzaG91bGQgdXNlIHRoZSBIVE1MIGRlZmlu
aXRpb24gb2Ygd2hpdGVzcGFjZS4KKyAgICByZXR1cm4gY29sbGVjdE9wdGlvbklubmVyVGV4dCgp
LnN0cmlwV2hpdGVTcGFjZSgpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMTY3LDE1ICsyMTQsMTUgQEAgYm9vbCBIVE1MT3B0
aW9uRWxlbWVudDo6c2VsZWN0ZWQoKQogewogICAgIGlmIChIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpCiAgICAgICAgIHNlbGVjdC0+dXBkYXRlTGlzdEl0
ZW1TZWxlY3RlZFN0YXRlcygpOwotICAgIHJldHVybiBtX2RhdGEuc2VsZWN0ZWQoKTsKKyAgICBy
ZXR1cm4gbV9pc1NlbGVjdGVkOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxl
Y3RlZChib29sIHNlbGVjdGVkKQogewotICAgIGlmIChtX2RhdGEuc2VsZWN0ZWQoKSA9PSBzZWxl
Y3RlZCkKKyAgICBpZiAobV9pc1NlbGVjdGVkID09IHNlbGVjdGVkKQogICAgICAgICByZXR1cm47
CiAKLSAgICBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlKG1fZGF0YSwgdGhpcywgc2Vs
ZWN0ZWQpOworICAgIHNldFNlbGVjdGVkU3RhdGUoc2VsZWN0ZWQpOwogCiAgICAgaWYgKEhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgc2Vs
ZWN0LT5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkID8gaW5kZXgoKSA6IC0xLCBmYWxzZSk7CkBA
IC0xODMsNyArMjMwLDExIEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkKGJv
b2wKIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0ZShib29sIHNlbGVj
dGVkKQogewotICAgIE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUobV9kYXRhLCB0aGlz
LCBzZWxlY3RlZCk7CisgICAgaWYgKG1faXNTZWxlY3RlZCA9PSBzZWxlY3RlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9pc1NlbGVjdGVkID0gc2VsZWN0ZWQ7CisgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
Ym9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFu
Z2UsIGludCBjaGlsZENvdW50RGVsdGEpCkBAIC0yMDUsMjYgKzI1NiwxMiBAQCBIVE1MU2VsZWN0
RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93CiAgICAgcmV0dXJuIHRvSFRNTFNlbGVjdEVs
ZW1lbnQoc2VsZWN0KTsKIH0KIAotYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6ZGVmYXVsdFNlbGVj
dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShzZWxlY3RlZEF0dHIp
OwotfQotCi12b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXREZWZhdWx0U2VsZWN0ZWQoYm9vbCBi
KQotewotICAgIHNldEF0dHJpYnV0ZShzZWxlY3RlZEF0dHIsIGIgPyAiIiA6IDApOwotfQotCiBT
dHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OmxhYmVsKCkgY29uc3QKIHsKLSAgICBTdHJpbmcgbGFi
ZWwgPSBtX2RhdGEubGFiZWwoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxhYmVsID0gZmFz
dEdldEF0dHJpYnV0ZShsYWJlbEF0dHIpOwogICAgIGlmICghbGFiZWwuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBsYWJlbDsKLSAKLSAgICBsYWJlbCA9IGNvbGxlY3RPcHRpb25Jbm5lclRleHQo
dGhpcykuc3RyaXBXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKTsKLSAgICBsYWJlbCA9IGxhYmVsLnNp
bXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Ci0KLSAgICByZXR1cm4gbGFiZWw7CisgICAg
ICAgIHJldHVybiBsYWJlbDsgCisgICAgcmV0dXJuIGNvbGxlY3RPcHRpb25Jbm5lclRleHQoKS5z
dHJpcFdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpLnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFj
ZSk7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldExhYmVsKGNvbnN0IFN0cmluZyYg
bGFiZWwpCkBAIC0yNDcsNyArMjg0LDEwIEBAIFJlbmRlclN0eWxlKiBIVE1MT3B0aW9uRWxlbWVu
dDo6bm9uUmVuZGUKIAogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50Ojp0ZXh0SW5kZW50ZWRUb1Jl
c3BlY3RHcm91cExhYmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gT3B0aW9uRWxlbWVudDo6Y29s
bGVjdE9wdGlvblRleHRSZXNwZWN0aW5nR3JvdXBMYWJlbChtX2RhdGEsIHRoaXMpOworICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICBpZiAocGFyZW50ICYmIHBh
cmVudC0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpCisgICAgICAgIHJldHVybiAiICAgICIgKyB0
ZXh0KCk7CisgICAgcmV0dXJuIHRleHQoKTsKIH0KIAogYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6
ZGlzYWJsZWQoKSBjb25zdApAQCAtMjU5LDggKzI5OSw5IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1l
bnQ6Omluc2VydGVkSW50b1RyZWUKIHsKICAgICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVj
dCA9IG93bmVyU2VsZWN0RWxlbWVudCgpKSB7CiAgICAgICAgIHNlbGVjdC0+c2V0UmVjYWxjTGlz
dEl0ZW1zKCk7Ci0gICAgICAgIC8vIEF2b2lkIG91ciBzZWxlY3RlZCgpIGdldHRlciBzaW5jZSBp
dCB3aWxsIHJlY2FsY3VsYXRlIGxpc3QgaXRlbXMgaW5jb3JyZWN0bHkgZm9yIHVzLgotICAgICAg
ICBpZiAobV9kYXRhLnNlbGVjdGVkKCkpCisgICAgICAgIC8vIERvIG5vdCBjYWxsIHNlbGVjdGVk
KCkgc2luY2UgY2FsbGluZyB1cGRhdGVMaXN0SXRlbVNlbGVjdGVkU3RhdGVzKCkKKyAgICAgICAg
Ly8gYXQgdGhpcyB0aW1lIHdvbid0IGRvIHRoZSByaWdodCB0aGluZy4gKFdoeSwgZXhhY3RseT8p
CisgICAgICAgIGlmIChtX2lzU2VsZWN0ZWQpCiAgICAgICAgICAgICBzZWxlY3QtPnNldFNlbGVj
dGVkSW5kZXgoaW5kZXgoKSwgZmFsc2UpOwogICAgICAgICBzZWxlY3QtPnNjcm9sbFRvU2VsZWN0
aW9uKCk7CiAgICAgfQpAQCAtMjY4LDQgKzMwOSwzNSBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50
OjppbnNlcnRlZEludG9UcmVlCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvVHJlZShkZWVwKTsKIH0KIAorU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0
aW9uSW5uZXJUZXh0KCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHRleHQ7CisgICAgZm9y
IChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuOyApIHsKKyAgICAgICAgaWYgKG4tPmlzVGV4dE5v
ZGUoKSkKKyAgICAgICAgICAgIHRleHQuYXBwZW5kKG4tPm5vZGVWYWx1ZSgpKTsKKyAgICAgICAg
Ly8gU2tpcCBzY3JpcHQgY29udGVudC4KKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAm
JiB0b1NjcmlwdEVsZW1lbnQodG9FbGVtZW50KG4pKSkKKyAgICAgICAgICAgIG4gPSBuLT50cmF2
ZXJzZU5leHRTaWJsaW5nKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmco
KTsKK30KKworI2lmbmRlZiBOREVCVUcKKworSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlv
bkVsZW1lbnQoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwgbm9kZS0+aGFzVGFn
TmFtZShvcHRpb25UYWcpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQqPihub2RlKTsKK30KKworY29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVs
ZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwgbm9kZS0+aGFz
VGFnTmFtZShvcHRpb25UYWcpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9w
dGlvbkVsZW1lbnQqPihub2RlKTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA5NzY0MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CkBAIC0yMSwyMCArMjEsMTcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoK
ICAqLworCiAjaWZuZGVmIEhUTUxPcHRpb25FbGVtZW50X2gKICNkZWZpbmUgSFRNTE9wdGlvbkVs
ZW1lbnRfaAogCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgotI2luY2x1ZGUg
Ik9wdGlvbkVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MU2Vs
ZWN0RWxlbWVudDsKIAotY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1D
b250cm9sRWxlbWVudCwgcHVibGljIE9wdGlvbkVsZW1lbnQgewotICAgIGZyaWVuZCBjbGFzcyBI
VE1MU2VsZWN0RWxlbWVudDsKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyTWVudUxpc3Q7Ci0KK2Ns
YXNzIEhUTUxPcHRpb25FbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBjcmVhdGUo
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
T3B0aW9uRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhU
TUxGb3JtRWxlbWVudCopOwpAQCAtNDYsMTcgKzQzLDE0IEBAIHB1YmxpYzoKIAogICAgIGludCBp
bmRleCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdDsKKyAgICBT
dHJpbmcgdmFsdWUoKSBjb25zdDsKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgdmlydHVhbCBib29sIHNlbGVjdGVkKCk7CisgICAgYm9vbCBzZWxlY3RlZCgpOwogICAg
IHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCk7CiAKICAgICBIVE1MU2VsZWN0RWxlbWVudCogb3duZXJT
ZWxlY3RFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBib29sIGRlZmF1bHRTZWxlY3RlZCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0RGVmYXVsdFNlbGVjdGVkKGJvb2wpOwotCiAgICAgU3RyaW5nIGxhYmVs
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKIApAQCAtNjQsNiAr
NTgsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3Q7CiAK
KyAgICBTdHJpbmcgdGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0OworCisg
ICAgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wpOworCiBwcml2YXRlOgogICAgIEhUTUxPcHRp
b25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVu
dCogPSAwKTsKIApAQCAtNzgsMTAgKzc2LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBz
ZXRTZWxlY3RlZFN0YXRlKGJvb2wpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgdGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVk
SW50b1RyZWUoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sKTsK
IApAQCAtODksMTAgKzgzLDM0IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIFJlbmRlclN0eWxl
KiBub25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3Q7CiAKLSAgICBPcHRpb25FbGVtZW50RGF0
YSBtX2RhdGE7CisgICAgU3RyaW5nIGNvbGxlY3RPcHRpb25Jbm5lclRleHQoKSBjb25zdDsKKwor
ICAgIFN0cmluZyBtX3ZhbHVlOworICAgIFN0cmluZyBtX2xhYmVsOworICAgIGJvb2wgbV9pc1Nl
bGVjdGVkOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKIH07CiAKK0hUTUxPcHRp
b25FbGVtZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KE5vZGUqKTsKK2NvbnN0IEhUTUxPcHRpb25F
bGVtZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KGNvbnN0IE5vZGUqKTsKK3ZvaWQgdG9IVE1MT3B0
aW9uRWxlbWVudChjb25zdCBIVE1MT3B0aW9uRWxlbWVudCopOyAvLyBUaGlzIG92ZXJsb2FkIHdp
bGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCisKKyNpZmRlZiBOREVC
VUcKKworLy8gVGhlIGRlYnVnIHZlcnNpb25zIG9mIHRoZXNlLCB3aXRoIGFzc2VydGlvbnMsIGFy
ZSBub3QgaW5saW5lZC4KKworaW5saW5lIEhUTUxPcHRpb25FbGVtZW50KiB0b0hUTUxPcHRpb25F
bGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRpb25F
bGVtZW50Kj4obm9kZSk7Cit9CisKK2lubGluZSBjb25zdCBIVE1MT3B0aW9uRWxlbWVudCogdG9I
VE1MT3B0aW9uRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MT3B0aW9uRWxlbWVudCo+KG5vZGUpOworfQorCisjZW5kaWYKKwogfSAv
LyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcAkocmV2aXNpb24gOTc2NDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsMTEgQEAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heFNlbGVjdEl0ZW1zID0gMQogCiBzdGF0aWMgY29uc3QgRE9N
VGltZVN0YW1wIHR5cGVBaGVhZFRpbWVvdXQgPSAxMDAwOwogCitzdGF0aWMgaW5saW5lIEhUTUxP
cHRpb25FbGVtZW50KiB0b09wdGlvbkVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpID8gdG9IVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KSA6IDA7Cit9CisKIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxG
b3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUo
dGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCiAgICAgLCBtX2xhc3RDaGFyVGltZSgwKQpAQCAtNDQ1
LDcgKzQ1MCw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFZhbGlkSW5kZXgoaW4KICAg
ICBpbnQgc2l6ZSA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgZm9yIChsaXN0SW5kZXggKz0gZGly
ZWN0aW9uOyBsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplOyBsaXN0SW5kZXggKz0g
ZGlyZWN0aW9uKSB7CiAgICAgICAgIC0tc2tpcDsKLSAgICAgICAgaWYgKCFsaXN0SXRlbXNbbGlz
dEluZGV4XS0+ZGlzYWJsZWQoKSAmJiBpc09wdGlvbkVsZW1lbnQobGlzdEl0ZW1zW2xpc3RJbmRl
eF0pKSB7CisgICAgICAgIGlmICghbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmRpc2FibGVkKCkgJiYg
bGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewogICAgICAgICAg
ICAgbGFzdEdvb2RJbmRleCA9IGxpc3RJbmRleDsKICAgICAgICAgICAgIGlmIChza2lwIDw9IDAp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MjYsNyArNTMxLDcgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3RpbwogICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9u
LmNsZWFyKCk7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQo
aXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRv
T3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9u
LmFwcGVuZChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkpOwogICAg
IH0KIH0KQEAgLTU0MSw3ICs1NDYsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3Rp
dmVTZWxlY3RpCiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0g
dG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2
ZVNlbGVjdGlvbi5hcHBlbmQob3B0aW9uRWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxlY3Rl
ZCgpKTsKICAgICB9CiB9CkBAIC01NjEsNyArNTY2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6dXBkYXRlTGlzdEJveFNlbAogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09w
dGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9u
RWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAgIGlmICghb3B0aW9u
RWxlbWVudCB8fCBpdGVtc1tpXS0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CkBAIC01OTMsNyArNTk4LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveE9uQ2hh
bmdlKAogICAgIC8vIFVwZGF0ZSBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbiBhbmQgZmlyZSBkaXNw
YXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQuCiAgICAgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxz
ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVt
c1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRp
b25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IG9wdGlvbkVsZW1l
bnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsKICAgICAgICAgaWYgKHNlbGVjdGVkICE9
IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uW2ldKQogICAgICAgICAgICAgZmlyZU9uQ2hhbmdlID0g
dHJ1ZTsKQEAgLTY2Nyw3ICs2NzIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNM
aXN0SXRlbXMoCiAKICAgICBtX3Nob3VsZFJlY2FsY0xpc3RJdGVtcyA9IGZhbHNlOwogCi0gICAg
T3B0aW9uRWxlbWVudCogZm91bmRTZWxlY3RlZCA9IDA7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQq
IGZvdW5kU2VsZWN0ZWQgPSAwOwogICAgIGZvciAoTm9kZSogY3VycmVudE5vZGUgPSB0aGlzLT5m
aXJzdENoaWxkKCk7IGN1cnJlbnROb2RlOykgewogICAgICAgICBpZiAoIWN1cnJlbnROb2RlLT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUt
PnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CkBAIC02ODcsNyArNjkyLDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKAogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVs
ZW1lbnQoY3VycmVudCkpIHsKKyAgICAgICAgaWYgKEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25F
bGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGN1cnJlbnQpKSB7CiAgICAgICAgICAgICBtX2xpc3RJ
dGVtcy5hcHBlbmQoY3VycmVudCk7CiAKICAgICAgICAgICAgIGlmICh1cGRhdGVTZWxlY3RlZFN0
YXRlcyAmJiAhbV9tdWx0aXBsZSkgewpAQCAtNzIxLDcgKzcyNiw3IEBAIGludCBIVE1MU2VsZWN0
RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgpIGMKICAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB0
aGUgZmlyc3Qgb3B0aW9uIHNlbGVjdGVkLgogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+
JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQg
PSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKSB7CisgICAgICAgIGlmIChIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpIHsKICAgICAg
ICAgICAgIGlmIChvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBpbmRleDsKICAgICAgICAgICAgICsraW5kZXg7CkBAIC03NDIsNyArNzQ3LDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleAogICAgIGludCBsaXN0SW5kZXgg
PSBvcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCk7CiAKICAgICBFbGVtZW50KiBleGNsdWRl
RWxlbWVudCA9IDA7Ci0gICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSAobGlz
dEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkgOiAwKSkgewor
ICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IChsaXN0SW5kZXggPj0g
MCA/IHRvT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSA6IDApKSB7CiAgICAgICAgIGV4
Y2x1ZGVFbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsKICAgICAgICAgaWYgKG1fYWN0aXZlU2Vs
ZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8IGRlc2VsZWN0KQogICAgICAgICAgICAgc2V0QWN0aXZl
U2VsZWN0aW9uQW5jaG9ySW5kZXgobGlzdEluZGV4KTsKQEAgLTc4OCw3ICs3OTMsNyBAQCBpbnQg
SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4CiAKICAgICBpbnQgb3B0aW9uSW5k
ZXgyID0gLTE7CiAgICAgZm9yIChpbnQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdFNp
emU7ICsrbGlzdEluZGV4KSB7Ci0gICAgICAgIGlmIChpc09wdGlvbkVsZW1lbnQoaXRlbXNbbGlz
dEluZGV4XSkpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUob3B0
aW9uVGFnKSkgewogICAgICAgICAgICAgKytvcHRpb25JbmRleDI7CiAgICAgICAgICAgICBpZiAo
b3B0aW9uSW5kZXgyID09IG9wdGlvbkluZGV4KQogICAgICAgICAgICAgICAgIHJldHVybiBsaXN0
SW5kZXg7CkBAIC04MDEsMTMgKzgwNiwxMyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlv
blRvTGlzdEluZGV4CiBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RUb09wdGlvbkluZGV4KGlu
dCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7Ci0gICAgaWYgKGxpc3RJbmRleCA8IDAgfHwgbGlzdEluZGV4ID49
IHN0YXRpY19jYXN0PGludD4oaXRlbXMuc2l6ZSgpKSB8fCAhaXNPcHRpb25FbGVtZW50KGl0ZW1z
W2xpc3RJbmRleF0pKQorICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBzdGF0
aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkgfHwgIWl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05h
bWUob3B0aW9uVGFnKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLy8gQWN0dWFsIGluZGV4
IG9mIG9wdGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmllcyB0aGF0IG1heSBiZSBpbiBs
aXN0LgogICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
aXN0SW5kZXg7ICsraSkgewotICAgICAgICBpZiAoaXNPcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkK
KyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCiAgICAgICAgICAg
ICArK29wdGlvbkluZGV4OwogICAgIH0KIApAQCAtODQwLDcgKzg0NSw3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXQKICAgICAgICAgaWYgKGl0ZW1zW2ldID09IGV4
Y2x1ZGVFbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKE9wdGlv
bkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQorICAg
ICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1l
bnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0
ZShmYWxzZSk7CiAgICAgfQogfQpAQCAtODUyLDcgKzg1Nyw3IEBAIGJvb2wgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFMKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAg
YnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVu
dCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50
KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgYm9v
bCBzZWxlY3RlZCA9IG9wdGlvbkVsZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsK
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoc2VsZWN0ZWQgPyAnWCcgOiAnLicpOwogICAgIH0KQEAg
LTg2OCw3ICs4NzMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNvbnRy
CiAgICAgc2l6ZV90IGxlbmd0aCA9IGl0ZW1zLnNpemUoKTsKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCisgICAgICAgIGlmIChIVE1M
T3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSkp
CiAgICAgICAgICAgICBvcHRpb25FbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRlKHN0YXRlW2ldID09
ICdYJyk7CiAgICAgfQogCkBAIC04OTUsNyArOTAwLDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVu
dDo6YXBwZW5kRm9ybURhdGEoRgogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09w
dGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9u
RWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAgIGlmIChvcHRpb25F
bGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkgJiYgIW9wdGlvbkVsZW1lbnQtPmRp
c2FibGVkKCkpIHsKICAgICAgICAgICAgIGxpc3QuYXBwZW5kRGF0YShuYW1lLCBvcHRpb25FbGVt
ZW50LT52YWx1ZSgpKTsKICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgPSB0cnVlOwpAQCAtOTEwLDEy
ICs5MTUsMTIgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgogCiB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiB7Ci0gICAgT3B0aW9uRWxlbWVudCogZmly
c3RPcHRpb24gPSAwOwotICAgIE9wdGlvbkVsZW1lbnQqIHNlbGVjdGVkT3B0aW9uID0gMDsKKyAg
ICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOworICAgIEhUTUxPcHRpb25FbGVt
ZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7CiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQq
PiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9
IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgaWYgKCFv
cHRpb25FbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTExMTYsNyArMTEyMSw3
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3QKICAgICBib29sIG11
bHRpU2VsZWN0ID0gbV9tdWx0aXBsZSAmJiBtdWx0aSAmJiAhc2hpZnQ7CiAKICAgICBFbGVtZW50
KiBjbGlja2VkRWxlbWVudCA9IGxpc3RJdGVtcygpW2xpc3RJbmRleF07Ci0gICAgT3B0aW9uRWxl
bWVudCogb3B0aW9uID0gdG9PcHRpb25FbGVtZW50KGNsaWNrZWRFbGVtZW50KTsKKyAgICBIVE1M
T3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9PcHRpb25FbGVtZW50KGNsaWNrZWRFbGVtZW50KTsK
ICAgICBpZiAob3B0aW9uKSB7CiAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hldGhlciBhbiBh
Y3RpdmUgc2VsZWN0aW9uIChsaWtlIGR1cmluZyBkcmFnCiAgICAgICAgIC8vIHNlbGVjdGlvbiks
IHNob3VsZCBzZWxlY3Qgb3IgZGVzZWxlY3QuCkBAIC0xMzEyLDcgKzEzMTcsNyBAQCBpbnQgSFRN
TFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJCiB7CiAgICAgY29uc3QgVmVjdG9yPEhU
TUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IGl0
ZW1zLnNpemUoKTsgaTspIHsKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1l
bnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbLS1pXSkpIHsKKyAgICAgICAgaWYgKEhUTUxPcHRp
b25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zWy0taV0pKSB7
CiAgICAgICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gaTsKICAgICAgICAgfQpAQCAtMTM3OCw3ICsxMzgzLDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZQogICAgIC8vIHRvIHVzZSBzdGFydFdpdGgg
b25jZSB0aGF0IGlzIGZpeGVkLgogICAgIFN0cmluZyBwcmVmaXhXaXRoQ2FzZUZvbGRlZChwcmVm
aXguZm9sZENhc2UoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtQ291bnQ7ICsraSwg
aW5kZXggPSAoaW5kZXggKyAxKSAlIGl0ZW1Db3VudCkgewotICAgICAgICBPcHRpb25FbGVtZW50
KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2luZGV4XSk7CisgICAgICAg
IEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1z
W2luZGV4XSk7CiAgICAgICAgIGlmICghb3B0aW9uRWxlbWVudCB8fCBpdGVtc1tpbmRleF0tPmRp
c2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTQxNCw3ICsxNDE5LDcgQEAg
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZQogICAgIC8vIElmIHRoaXMg
aW5kZXggaXMgYWxyZWFkeSBzZWxlY3RlZCwgdW5zZWxlY3QuIG90aGVyd2lzZSB1cGRhdGUgdGhl
IHNlbGVjdGVkIGluZGV4LgogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChpbmRl
eCk7Ci0gICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSAobGlzdEluZGV4ID49
IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkgOiAwKSkgeworICAgIGlmIChI
VE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IChsaXN0SW5kZXggPj0gMCA/IHRvT3B0
aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSA6IDApKSB7CiAgICAgICAgIGlmIChvcHRpb25F
bGVtZW50LT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVudC0+c2V0U2VsZWN0
ZWRTdGF0ZShmYWxzZSk7CiAgICAgICAgIGVsc2UKQEAgLTE0MzUsNyArMTQ0MCw3IEBAIHVuc2ln
bmVkIEhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgoKSBjb24KIAogICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXNPcHRpb25FbGVtZW50
KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRhZykp
CiAgICAgICAgICAgICArK29wdGlvbnM7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5NzY0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
MTEgKzQzLDExIEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJPcHRp
b25Hcm91cEVsZW1lbnQuaCIKLSNpbmNsdWRlICJPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CkBAIC0xMTEsMTEgKzExMSwxMSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKICAgICAgICAgCiAgICAgICAgIGZsb2F0IHdpZHRoID0gMDsKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBsaXN0SXRlbXNbaV07CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJ
dGVtc1tpXTsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0OwogICAgICAgICAgICAgRm9udCBpdGVt
Rm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAgICAgICAgIGlmIChPcHRpb25FbGVtZW50KiBv
cHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgICAg
IHRleHQgPSBvcHRpb25FbGVtZW50LT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7
CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQorICAgICAg
ICAgICAgICAgIHRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50
ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChPcHRpb25Hcm91
cEVsZW1lbnQqIG9wdGlvbkdyb3VwRWxlbWVudCA9IHRvT3B0aW9uR3JvdXBFbGVtZW50KGVsZW1l
bnQpKSB7CiAgICAgICAgICAgICAgICAgdGV4dCA9IG9wdGlvbkdyb3VwRWxlbWVudC0+Z3JvdXBM
YWJlbFRleHQoKTsKICAgICAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250
LmZvbnREZXNjcmlwdGlvbigpOwpAQCAtMzI3LDggKzMyNyw4IEBAIHZvaWQgUmVuZGVyTGlzdEJv
eDo6YWRkRm9jdXNSaW5nUmVjdHMoVmUKICAgICBpbnQgc2l6ZSA9IG51bUl0ZW1zKCk7CiAgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1z
KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgT3B0aW9u
RWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChsaXN0SXRlbXNbaV0pOwot
ICAgICAgICBpZiAob3B0aW9uRWxlbWVudCAmJiAhb3B0aW9uRWxlbWVudC0+ZGlzYWJsZWQoKSkg
eworICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKKyAgICAgICAg
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSAmJiAhdG9IVE1MT3B0aW9uRWxlbWVu
dChlbGVtZW50KS0+ZGlzYWJsZWQoKSkgewogICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGl0ZW1C
b3VuZGluZ0JveFJlY3QoYWRkaXRpb25hbE9mZnNldCwgaSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0zNzEsOCArMzcxLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWlu
dEl0ZW1Gb3JlZ3JvdW5kKAogICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1
cmdlUHJldmVudGVyOwogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVt
cyA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKS0+bGlzdEl0ZW1zKCk7Ci0gICAgRWxlbWVu
dCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwotICAgIE9wdGlvbkVsZW1lbnQqIG9w
dGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoZWxlbWVudCk7CisgICAgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKIAogICAgIFJlbmRlclN0eWxlKiBpdGVt
U3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgIGlmICghaXRlbVN0eWxlKQpAQCAt
MzgyLDE0ICszODEsMTUgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5k
KAogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaXRlbVRleHQ7Ci0gICAgaWYgKG9wdGlv
bkVsZW1lbnQpCi0gICAgICAgIGl0ZW1UZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCgpOworICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0gZWxlbWVu
dC0+aGFzVGFnTmFtZShvcHRpb25UYWcpOworICAgIGlmIChpc09wdGlvbkVsZW1lbnQpCisgICAg
ICAgIGl0ZW1UZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgIGVsc2UgaWYgKE9wdGlvbkdyb3VwRWxlbWVudCog
b3B0aW9uR3JvdXBFbGVtZW50ID0gdG9PcHRpb25Hcm91cEVsZW1lbnQoZWxlbWVudCkpCiAgICAg
ICAgIGl0ZW1UZXh0ID0gb3B0aW9uR3JvdXBFbGVtZW50LT5ncm91cExhYmVsVGV4dCgpOwogICAg
IGFwcGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9y
IHRleHRDb2xvciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgOiBzdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKG9wdGlvbkVs
ZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgeworICAgIGlmIChpc09wdGlvbkVs
ZW1lbnQgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSkgewogICAg
ICAgICBpZiAoZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRv
Y3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpKQogICAgICAgICAgICAgdGV4dENvbG9y
ID0gdGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwogICAg
ICAgICAvLyBIb25vciB0aGUgZm9yZWdyb3VuZCBjb2xvciBmb3IgZGlzYWJsZWQgaXRlbXMKQEAg
LTQyMiwxMSArNDIyLDEwIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCgKIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgbGlzdEluZGV4KQog
ewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUoKSktPmxpc3RJdGVtcygpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBs
aXN0SXRlbXNbbGlzdEluZGV4XTsKLSAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0g
dG9PcHRpb25FbGVtZW50KGVsZW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlz
dEl0ZW1zW2xpc3RJbmRleF07CiAKICAgICBDb2xvciBiYWNrQ29sb3I7Ci0gICAgaWYgKG9wdGlv
bkVsZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgeworICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+
c2VsZWN0ZWQoKSkgewogICAgICAgICBpZiAoZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNl
ZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpKQogICAg
ICAgICAgICAgYmFja0NvbG9yID0gdGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDk3NjQwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAg
KzM0LDEwIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIk9wdGlvbkVsZW1l
bnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQlIuaCIKQEAgLTE1MSwxMiArMTUxLDExIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6
OnVwZGF0ZU9wdGlvbnNXaWR0aCgKICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2Fj
aGVQdXJnZVByZXZlbnRlcjsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIE9wdGlv
bkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoZWxlbWVudCk7Ci0gICAg
ICAgIGlmICghb3B0aW9uRWxlbWVudCkKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBs
aXN0SXRlbXNbaV07CisgICAgICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSBvcHRpb25F
bGVtZW50LT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgIFN0cmlu
ZyB0ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVkVG9SZXNw
ZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgdGV4
dCwgJyAnKTsKICAgICAgICAgaWYgKHRoZW1lKCktPnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5k
ZW50KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUgb3B0aW9uJ3MgdGV4dCBpbmRlbnQu
ICBXZSBjYW4ndCBjYWxjdWxhdGUgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIG5vdy4KQEAgLTIwMiw4
ICsyMDEsOCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpCiAgICAg
U3RyaW5nIHRleHQgPSAiIjsKICAgICBpZiAoaSA+PSAwICYmIGkgPCBzaXplKSB7CiAgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIGlmIChPcHRpb25FbGVt
ZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAg
ICAgICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJl
bCgpOworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CisgICAg
ICAgICAgICB0ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgbV9vcHRpb25TdHlsZSA9IGVsZW1l
bnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzcsOCArMzc2LDggQEAg
U3RyaW5nIFJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCh1bnNpZ25lZAogICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAgICBpZiAoT3B0aW9uR3JvdXBFbGVtZW50
KiBvcHRpb25Hcm91cEVsZW1lbnQgPSB0b09wdGlvbkdyb3VwRWxlbWVudChlbGVtZW50KSkKICAg
ICAgICAgaXRlbVN0cmluZyA9IG9wdGlvbkdyb3VwRWxlbWVudC0+Z3JvdXBMYWJlbFRleHQoKTsK
LSAgICBlbHNlIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVt
ZW50KGVsZW1lbnQpKQotICAgICAgICBpdGVtU3RyaW5nID0gb3B0aW9uRWxlbWVudC0+dGV4dElu
ZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOworICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUob3B0aW9uVGFnKSkKKyAgICAgICAgaXRlbVN0cmluZyA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQoZWxlbWVudCktPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKIAogICAgIGFw
cGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCBpdGVtU3RyaW5nLCAnICcpOwogICAgIHJldHVybiBp
dGVtU3RyaW5nOwpAQCAtNTU3LDkgKzU1Niw4IEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1J
c1NlbGVjdGVkKHVuc2kKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1z
ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRlbXMoKTsKICAgICBpZiAobGlz
dEluZGV4ID49IGxpc3RJdGVtcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChsaXN0SXRl
bXNbbGlzdEluZGV4XSkpCi0gICAgICAgIHJldHVybiBvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVt
c1tsaXN0SW5kZXhdOworICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykg
JiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKTsKIH0KIAogdm9pZCBS
ZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111510</attachid>
            <date>2011-10-18 15:34:25 -0700</date>
            <delta_ts>2011-10-18 17:47:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70276-20111018153425.patch</filename>
            <type>text/plain</type>
            <size>43018</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NzkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMTAtMTcgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBPcHRpb25FbGVtZW50IChm
aXJzdCBoYWxmKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzAyNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvcmluZyB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbmV3IHRlc3RzLgorCisgICAgICAg
ICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBVc2UgaGFzVGFnTmFtZQorICAgICAgICBhbmQgdG9I
VE1MT3B0aW9uRWxlbWVudCBpbnN0ZWFkIG9mIHRvT3B0aW9uRWxlbWVudC4KKworICAgICAgICAq
IGRvbS9PcHRpb25FbGVtZW50LmNwcDogRGVsZXRlZCBjb250ZW50cy4gUmVtb3ZlIGZpbGUgbGF0
ZXIuCisgICAgICAgICogZG9tL09wdGlvbkVsZW1lbnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudCk6IEluaXRpYWxpemUgbV9pc1NlbGVjdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3Ip
OiBJbml0aWFsaXplIHRoZQorICAgICAgICBzZWxlY3RlZCBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4g
Y2FsbGluZyBzZXREZWZhdWx0U2VsZWN0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6dGV4dCk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBPcHRpb25F
bGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRleHQuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudDo6aW5kZXgpOiBNb3ZlZCB0aGUgY29kZSBoZXJlIGZyb20KKyAgICAgICAg
T3B0aW9uRWxlbWVudDo6b3B0aW9uSW5kZXguCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAg
IGNvZGUgdG8gY2FsbCBzZXRWYWx1ZSBhbmQgc2V0TGFiZWwuIENoYW5nZWQgdGhlIGNvZGUgdGhh
dCBjYWxsZWQKKyAgICAgICAgc2V0U2VsZWN0ZWQgdG8gaW5zdGVhZCBzZXQgbV9pc1NlbGVjdGVk
IGFuZCBhZGRlZCBhIEZJWE1FIGFib3V0IHdoeQorICAgICAgICB0aGF0J3MgcHJvYmFibHkgd3Jv
bmcsIGJ1dCBzYW1lIGJlaGF2aW9yIGFzIGJlZm9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50Ojp2YWx1ZSk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uVmFsdWUuIEFkZGVkIGEgRklYTUUgYWJvdXQgaW5j
b3JyZWN0CisgICAgICAgIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKTogVXNlIG1faXNTZWxlY3RlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZCk6IFVzZSBtX2lzU2VsZWN0
ZWQgYW5kCisgICAgICAgIGNhbGwgc2V0U2VsZWN0ZWRTdGF0ZSBpbnN0ZWFkIG9mIE9wdGlvbkVs
ZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6IE1vdmVkIHRoZSBjb2RlCisgICAgICAgIGhlcmUgZnJv
bSBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6OmxhYmVsKTogU3RyZWFtbGluZWQgdGhlIGNvZGUuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJl
bCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbSBPcHRpb25FbGVtZW50Ojpjb2xs
ZWN0T3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOiBVc2UgbV9pc1NlbGVjdGVkCisgICAg
ICAgIGFuZCByZXdyb3RlIGNvbW1lbnQgZm9yIGNsYXJpdHkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6IE1vdmVkIHRoaXMKKyAg
ICAgICAgaGVyZSBmcm9tIE9wdGlvbkVsZW1lbnQsIGFuZCBjaGFuZ2VkIHRvIHVzZSBTdHJpbmdC
dWlsZGVyLgorICAgICAgICAoV2ViQ29yZTo6dG9IVE1MT3B0aW9uRWxlbWVudCk6IEFkZGVkLgor
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOiBSZW1vdmVkIE9wdGlvbkVsZW1l
bnQuaCBpbmNsdWRlLgorICAgICAgICBSZW1vdmVkIE9wdGlvbkVsZW1lbnQgYmFzZSBjbGFzcy4g
UmVtb3ZlZCB1bm5lZWRlZCBmcmllbmQgZGVjbGFyYXRpb25zLgorICAgICAgICBNYWRlIHZhbHVl
IGFuZCBzZWxlY3RlZCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuIFJlbW92ZWQgdW5uZWVkZWQKKyAg
ICAgICAgZGVmYXVsdFNlbGVjdGVkIGFuZCBzZXREZWZhdWx0U2VsZWN0ZWQgZnVuY3Rpb25zLiBN
YWRlIHRoZQorICAgICAgICB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsIGFuZCBzZXRT
ZWxlY3RlZFN0YXRlIGZ1bmN0aW9ucworICAgICAgICBiZSBub24tdmlydHVhbCBhbmQgcHVibGlj
LiBBZGRlZCBhIGNvbGxlY3RPcHRpb25Jbm5lclRleHQgZnVuY3Rpb24uCisgICAgICAgIFJlcGxh
Y2VkIG1fZGF0YSB3aXRoIG1fdmFsdWUsIG1fbGFiZWwsIGFuZCBtX3NlbGVjdGVkLgorCisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b09w
dGlvbkVsZW1lbnQpOiBBZGRlZC4gSGVscGVyIHRvIGtlZXAgZXhpc3RpbmcgY29kZQorICAgICAg
ICBjbG9zZSB0byB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpuZXh0VmFsaWRJbmRleCk6IFVzZSBoYXNUYWdOYW1lCisgICAgICAgIGluc3RlYWQgb2YgaXNP
cHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVM
YXN0U2VsZWN0aW9uKTogVXNlIEhUTUxPcHRpb25FbGVtZW50CisgICAgICAgIHR5cGUgaW5zdGVh
ZCBvZiBPcHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5k
ZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxl
Y3RlZEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
b3B0aW9uVG9MaXN0SW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZv
cm1Db250cm9sU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjphcHBlbmRGb3JtRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKTog
RGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6IFVzZSBIVE1MT3B0
aW9uRWxlbWVudCwKKyAgICAgICAgaGFzVGFnTmFtZSwgYW5kIHRvSFRNTE9wdGlvbkVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFj
a2dyb3VuZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVk
KTogRGl0dG8uCisKIDIwMTEtMTAtMTggIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
OjpsYXlvdXRIb3Jpem9udGFsQm94CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAkocmV2aXNpb24gOTc3OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBACiAjaW5jbHVkZSAi
SFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiT3B0
aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTExMTQsOSArMTExNCw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKEMKICAgICAgICAgICAgICAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICAg
ICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVj
a2VkKCkgJiYgIWlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlKTsKLSAgICAgICAgICAgICAgICBpZiAob3B0
aW9uRWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKQorICAgICAgICAgICAgICAg
IGlmIChlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlKS0+
c2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vT3B0
aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA5Nzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9PcHRpb25F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDIgKzEgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJPcHRpb25FbGVtZW50LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MT3B0R3JvdXBF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi12b2lkIE9wdGlv
bkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIEVsZW1l
bnQqIGVsZW1lbnQsIGJvb2wgc2VsZWN0ZWQpCi17Ci0gICAgaWYgKGRhdGEuc2VsZWN0ZWQoKSA9
PSBzZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YS5zZXRTZWxlY3RlZChzZWxl
Y3RlZCk7Ci0gICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwotfQotCi1pbnQgT3B0
aW9uRWxlbWVudDo6b3B0aW9uSW5kZXgoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQs
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFzZWxlY3RFbGVtZW50KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIC8vIExldCdzIGRvIHRoaXMgZHluYW1pY2FsbHkuIE1pZ2h0
IGJlIGEgYml0IHNsb3csIGJ1dCB3ZSdyZSBzdXJlCi0gICAgLy8gd2Ugd29uJ3QgZm9yZ2V0IHRv
IHVwZGF0ZSBhIG1lbWJlciB2YXJpYWJsZSBpbiBzb21lIGNhc2VzLi4uCi0gICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gc2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7Ci0g
ICAgaW50IGxlbmd0aCA9IGl0ZW1zLnNpemUoKTsKLSAgICBpbnQgb3B0aW9uSW5kZXggPSAwOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc09w
dGlvbkVsZW1lbnQoaXRlbXNbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChpdGVtc1tpXSA9PSBlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4Owot
ICAgICAgICArK29wdGlvbkluZGV4OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1TdHJp
bmcgT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbkxhYmVsT3JUZXh0KGNvbnN0IE9wdGlvbkVs
ZW1lbnREYXRhJiBkYXRhLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgU3RyaW5nIHRleHQ7Ci0KLSAg
ICAvLyBXaW5JRSBkb2VzIG5vdCB1c2UgdGhlIGxhYmVsIGF0dHJpYnV0ZSwgc28gYXMgYSBxdWly
aywgd2UgaWdub3JlIGl0LgotICAgIGlmICghZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKQotICAg
ICAgICB0ZXh0ID0gZGF0YS5sYWJlbCgpOwotICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKLSAgICAg
ICAgdGV4dCA9IGNvbGxlY3RPcHRpb25Jbm5lclRleHQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIG5v
cm1hbGl6ZVRleHQoZG9jdW1lbnQsIHRleHQpOwotfQotCi1TdHJpbmcgT3B0aW9uRWxlbWVudDo6
Y29sbGVjdE9wdGlvbklubmVyVGV4dChjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIFN0
cmluZyB0ZXh0OwotICAgIE5vZGUqIG4gPSBlbGVtZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hp
bGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8
IG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKQotICAgICAgICAgICAg
dGV4dCArPSBuLT5ub2RlVmFsdWUoKTsKLQotICAgICAgICAvLyBza2lwIHNjcmlwdCBjb250ZW50
Ci0gICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuKSkpCi0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0U2li
bGluZyhlbGVtZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoZWxlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiB0ZXh0OwotfQotCi1TdHJpbmcg
T3B0aW9uRWxlbWVudDo6bm9ybWFsaXplVGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYgc3JjKQotewotICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQtPmRpc3BsYXlT
dHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc3JjKTsKLQotICAgIC8vIEluIFdpbklFLCBsZWFkaW5n
IGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucyBhbmQgb3B0Z3Jv
dXBzLiBXZSBtYXRjaCB0aGlzIGJlaGF2aW9yLgotICAgIHRleHQgPSB0ZXh0LnN0cmlwV2hpdGVT
cGFjZShpc0hUTUxTcGFjZSk7Ci0KLSAgICAvLyBXZSB3YW50IHRvIGNvbGxhcHNlIG91ciB3aGl0
ZXNwYWNlIHRvby4gVGhpcyB3aWxsIG1hdGNoIG90aGVyIGJyb3dzZXJzLgotICAgIHRleHQgPSB0
ZXh0LnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Ci0KLSAgICByZXR1cm4gdGV4dDsK
LX0KLQotU3RyaW5nIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25UZXh0UmVzcGVjdGluZ0dy
b3VwTGFiZWwoY29uc3QgT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpCi17Ci0gICAgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihlbGVtZW50LT5wYXJlbnROb2RlKCkpOwotICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBh
cmVudEVsZW1lbnQtPmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcpKQotICAgICAgICByZXR1cm4gIiAg
ICAiICsgY29sbGVjdE9wdGlvbkxhYmVsT3JUZXh0KGRhdGEsIGVsZW1lbnQpOwotCi0gICAgcmV0
dXJuIGNvbGxlY3RPcHRpb25MYWJlbE9yVGV4dChkYXRhLCBlbGVtZW50KTsKLX0KLQotLy8gT3B0
aW9uRWxlbWVudERhdGEKLU9wdGlvbkVsZW1lbnREYXRhOjpPcHRpb25FbGVtZW50RGF0YSgpCi0g
ICAgOiBtX3NlbGVjdGVkKGZhbHNlKQotewotfQotCi1PcHRpb25FbGVtZW50RGF0YTo6fk9wdGlv
bkVsZW1lbnREYXRhKCkKLXsKLX0KLQotT3B0aW9uRWxlbWVudCogdG9PcHRpb25FbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiBl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uVGFnKSkKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWJvb2wgaXNPcHRpb25FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0
dXJuIGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZyk7Ci19Ci0KLX0K
Ky8vIEZJWE1FOiBEZWxldGUgdGhpcyBmaWxlIGFmdGVyIHVwZGF0aW5nIGFsbCB0aGUgcHJvamVj
dCBmaWxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gOTc3
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDgzICsxLDIgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpZm5kZWYgT3B0aW9uRWxlbWVudF9oCi0jZGVmaW5lIE9wdGlvbkVsZW1lbnRfaAotCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBFbGVtZW50OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKLWNs
YXNzIE9wdGlvbkVsZW1lbnREYXRhOwotCi1jbGFzcyBPcHRpb25FbGVtZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5PcHRpb25FbGVtZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGlz
YWJsZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNlbGVjdGVkKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wpID0gMDsKLQotICAgIHZpcnR1YWwg
U3RyaW5nIHRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgdGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1
ZSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHNldFNlbGVjdGVk
U3RhdGUoT3B0aW9uRWxlbWVudERhdGEmLCBFbGVtZW50KiwgYm9vbCBzZWxlY3RlZCk7Ci0gICAg
c3RhdGljIGludCBvcHRpb25JbmRleChIVE1MU2VsZWN0RWxlbWVudCosIGNvbnN0IEVsZW1lbnQq
KTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RPcHRpb25MYWJlbE9yVGV4dChjb25zdCBPcHRp
b25FbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxl
Y3RPcHRpb25UZXh0UmVzcGVjdGluZ0dyb3VwTGFiZWwoY29uc3QgT3B0aW9uRWxlbWVudERhdGEm
LCBjb25zdCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIFN0cmluZyBjb2xsZWN0T3B0aW9uVmFsdWUo
Y29uc3QgT3B0aW9uRWxlbWVudERhdGEmLCBjb25zdCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIFN0
cmluZyBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KGNvbnN0IEVsZW1lbnQqKTsKLXByaXZhdGU6Ci0g
ICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVUZXh0KGNvbnN0IERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJik7Ci19OwotCi0vLyBIVE1MT3B0aW9uRWxlbWVudCBob2xkIHRoaXMgc3RydWN0IGFzIG1l
bWJlciB2YXJpYWJsZQotLy8gYW5kIHBhc3MgaXQgdG8gdGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rp
b25zIGluIE9wdGlvbkVsZW1lbnQKLWNsYXNzIE9wdGlvbkVsZW1lbnREYXRhIHsKLXB1YmxpYzoK
LSAgICBPcHRpb25FbGVtZW50RGF0YSgpOwotICAgIH5PcHRpb25FbGVtZW50RGF0YSgpOwotCi0g
ICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KLQotICAgIFN0
cmluZyBsYWJlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWw7IH0KLSAgICB2b2lkIHNldExhYmVs
KGNvbnN0IFN0cmluZyYgbGFiZWwpIHsgbV9sYWJlbCA9IGxhYmVsOyB9Ci0KLSAgICBib29sIHNl
bGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZDsgfQotICAgIHZvaWQgc2V0U2VsZWN0
ZWQoYm9vbCBzZWxlY3RlZCkgeyBtX3NlbGVjdGVkID0gc2VsZWN0ZWQ7IH0KLQotcHJpdmF0ZToK
LSAgICBTdHJpbmcgbV92YWx1ZTsKLSAgICBTdHJpbmcgbV9sYWJlbDsKLSAgICBib29sIG1fc2Vs
ZWN0ZWQ7Ci19OwotCi1PcHRpb25FbGVtZW50KiB0b09wdGlvbkVsZW1lbnQoRWxlbWVudCopOwot
Ym9vbCBpc09wdGlvbkVsZW1lbnQoRWxlbWVudCopOwotCi19Ci0KLSNlbmRpZgorLy8gRklYTUU6
IERlbGV0ZSB0aGlzIGZpbGUgYWZ0ZXIgdXBkYXRpbmcgYWxsIHRoZSBwcm9qZWN0IGZpbGVzLgor
I2Vycm9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAko
cmV2aXNpb24gOTc3OTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsMTEgQEAKICNpbmNsdWRlICJOb2RlUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlck1lbnVMaXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Nyw2ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKIEhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkK
ICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCisg
ICAgLCBtX2lzU2VsZWN0ZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob3B0aW9u
VGFnKSk7CiB9CkBAIC03NSw3ICs3OCw4IEBAIFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+
IEhUTUxPcHRpb24KIAogICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIGVsZW1lbnQt
PnNldFZhbHVlKHZhbHVlKTsKLSAgICBlbGVtZW50LT5zZXREZWZhdWx0U2VsZWN0ZWQoZGVmYXVs
dFNlbGVjdGVkKTsKKyAgICBpZiAoZGVmYXVsdFNlbGVjdGVkKQorICAgICAgICBlbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoc2VsZWN0ZWRBdHRyLCBlbXB0eUF0b20pOwogICAgIGVsZW1lbnQtPnNldFNl
bGVjdGVkKHNlbGVjdGVkKTsKIAogICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKQEAgLTEx
Myw3ICsxMTcsMjIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT3B0aW9uRWxlbWVudDo6Zgog
CiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRleHQobV9kYXRhLCB0aGlzKTsKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIFN0cmluZyB0ZXh0
OworCisgICAgLy8gV2luSUUgZG9lcyBub3QgdXNlIHRoZSBsYWJlbCBhdHRyaWJ1dGUsIHNvIGFz
IGEgcXVpcmssIHdlIGlnbm9yZSBpdC4KKyAgICBpZiAoIWRvY3VtZW50LT5pblF1aXJrc01vZGUo
KSkKKyAgICAgICAgdGV4dCA9IGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKKworICAgIC8v
IEZJWE1FOiBUaGUgZm9sbG93aW5nIHRyZWF0cyBhbiBlbGVtZW50IHdpdGggdGhlIGxhYmVsIGF0
dHJpYnV0ZSBzZXQgdG8KKyAgICAvLyB0aGUgZW1wdHkgc3RyaW5nIHRoZSBzYW1lIGFzIGFuIGVs
ZW1lbnQgd2l0aCBubyBsYWJlbCBhdHRyaWJ1dGUgYXQgYWxsLgorICAgIC8vIElzIHRoYXQgY29y
cmVjdD8gSWYgaXQgaXMsIHRoZW4gc2hvdWxkIHRoZSBsYWJlbCBmdW5jdGlvbiB3b3JrIHRoZSBz
YW1lIHdheT8KKyAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHRleHQgPSBjb2xsZWN0
T3B0aW9uSW5uZXJUZXh0KCk7CisKKyAgICAvLyBGSVhNRTogSXMgZGlzcGxheVN0cmluZ01vZGlm
aWVkQnlFbmNvZGluZyBoZWxwZnVsIGhlcmU/CisgICAgLy8gSWYgaXQncyBjb3JyZWN0IGhlcmUs
IHRoZW4gaXNuJ3QgaXQgbmVlZGVkIGluIHRoZSB2YWx1ZSBhbmQgbGFiZWwgZnVuY3Rpb25zIHRv
bz8KKyAgICByZXR1cm4gZG9jdW1lbnQtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmco
dGV4dCkuc3RyaXBXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNI
VE1MU3BhY2UpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0
cmluZyAmdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMzgsMjggKzE1Nyw0NyBAQCB2b2lk
IEhUTUxPcHRpb25FbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oCiAKIGludCBIVE1MT3B0aW9uRWxl
bWVudDo6aW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBPcHRpb25FbGVtZW50OjpvcHRpb25J
bmRleChvd25lclNlbGVjdEVsZW1lbnQoKSwgdGhpcyk7CisgICAgLy8gSXQgd291bGQgYmUgZmFz
dGVyIHRvIGNhY2hlIHRoZSBpbmRleCwgYnV0IGhhcmRlciB0byBnZXQgaXQgcmlnaHQgaW4gYWxs
IGNhc2VzLgorCisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSBvd25lclNl
bGVjdEVsZW1lbnQoKTsKKyAgICBpZiAoIXNlbGVjdEVsZW1lbnQpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKKworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxl
bWVudCo+JiBpdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJdGVtcygpOworICAgIHNpemVfdCBs
ZW5ndGggPSBpdGVtcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICBpZiAoIWl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGl0ZW1zW2ldID09IHRoaXMpCisgICAg
ICAgICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CisgICAgICAgICsrb3B0aW9uSW5kZXg7CisgICAg
fQorCisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09
IHNlbGVjdGVkQXR0cikKLSAgICAgICAgbV9kYXRhLnNldFNlbGVjdGVkKCFhdHRyLT5pc051bGwo
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikKLSAgICAgICAgbV9k
YXRhLnNldFZhbHVlKGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBsYWJlbEF0dHIpCi0gICAgICAgIG1fZGF0YS5zZXRMYWJlbChhdHRyLT52YWx1ZSgpKTsKLSAg
ICBlbHNlCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzZWxlY3RlZEF0dHIpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRoZSBIVE1MIHNwZWNpZmljYXRpb24g
c2F5cy4KKyAgICAgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaW1wbGllcyB0aGF0IHJlbW92aW5n
IHRoZSBzZWxlY3RlZCBhdHRyaWJ1dGUgb3IKKyAgICAgICAgLy8gY2hhbmdpbmcgdGhlIHZhbHVl
IG9mIGEgc2VsZWN0ZWQgYXR0cmlidXRlIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50CisgICAgICAg
IC8vIGhhcyBubyBlZmZlY3Qgb24gd2hldGhlciB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZC4gRnVy
dGhlciwgaXQgc2VlbXMKKyAgICAgICAgLy8gdGhhdCB3ZSBuZWVkIHRvIGRvIG1vcmUgdGhhbiBq
dXN0IHNldCBtX2lzU2VsZWN0ZWQgdG8gc2VsZWN0IGluIHRoYXQKKyAgICAgICAgLy8gY2FzZTsg
d2UnZCBuZWVkIHRvIGRvIHRoZSBvdGhlciB3b3JrIGZyb20gdGhlIHNldFNlbGVjdGVkIGZ1bmN0
aW9uLgorICAgICAgICBtX2lzU2VsZWN0ZWQgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgfSBlbHNl
CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwogfQogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fZGF0YS52YWx1ZSgpLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV9kYXRhLnZh
bHVlKCk7Ci0KLSAgICByZXR1cm4gY29sbGVjdE9wdGlvbklubmVyVGV4dCh0aGlzKS5zdHJpcFdo
aXRlU3BhY2UoaXNIVE1MU3BhY2UpLnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Ci0K
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIpOworICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICByZXR1cm4gY29sbGVjdE9wdGlvbklubmVyVGV4dCgpLnN0cmlwV2hpdGVTcGFjZShpc0hUTUxT
cGFjZSkuc2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKTsKIH0KIAogdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTE3MSwxNSArMjA5
LDE1IEBAIGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKCkKIHsKICAgICBpZiAoSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0RWxlbWVudCgpKQogICAgICAgICBz
ZWxlY3QtPnVwZGF0ZUxpc3RJdGVtU2VsZWN0ZWRTdGF0ZXMoKTsKLSAgICByZXR1cm4gbV9kYXRh
LnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIG1faXNTZWxlY3RlZDsKIH0KIAogdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWQoYm9vbCBzZWxlY3RlZCkKIHsKLSAgICBpZiAobV9kYXRh
LnNlbGVjdGVkKCkgPT0gc2VsZWN0ZWQpCisgICAgaWYgKG1faXNTZWxlY3RlZCA9PSBzZWxlY3Rl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0
ZShtX2RhdGEsIHRoaXMsIHNlbGVjdGVkKTsKKyAgICBzZXRTZWxlY3RlZFN0YXRlKHNlbGVjdGVk
KTsKIAogICAgIGlmIChIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVt
ZW50KCkpCiAgICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleChzZWxlY3RlZCA/IGluZGV4
KCkgOiAtMSwgZmFsc2UpOwpAQCAtMTg3LDcgKzIyNSwxMSBAQCB2b2lkIEhUTUxPcHRpb25FbGVt
ZW50OjpzZXRTZWxlY3RlZChib29sCiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVj
dGVkU3RhdGUoYm9vbCBzZWxlY3RlZCkKIHsKLSAgICBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3Rl
ZFN0YXRlKG1fZGF0YSwgdGhpcywgc2VsZWN0ZWQpOworICAgIGlmIChtX2lzU2VsZWN0ZWQgPT0g
c2VsZWN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNTZWxlY3RlZCA9IHNlbGVjdGVk
OworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVu
dDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFu
Z2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQpAQCAtMjA5LDI2ICsy
NTEsMTIgQEAgSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRpb25FbGVtZW50OjpvdwogICAgIHJl
dHVybiB0b0hUTUxTZWxlY3RFbGVtZW50KHNlbGVjdCk7CiB9CiAKLWJvb2wgSFRNTE9wdGlvbkVs
ZW1lbnQ6OmRlZmF1bHRTZWxlY3RlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhc3RIYXNBdHRy
aWJ1dGUoc2VsZWN0ZWRBdHRyKTsKLX0KLQotdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0RGVm
YXVsdFNlbGVjdGVkKGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2VsZWN0ZWRBdHRyLCBi
ID8gIiIgOiAwKTsKLX0KLQogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50OjpsYWJlbCgpIGNvbnN0
CiB7Ci0gICAgU3RyaW5nIGxhYmVsID0gbV9kYXRhLmxhYmVsKCk7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBsYWJlbCA9IGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKICAgICBpZiAoIWxh
YmVsLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbGFiZWw7Ci0gCi0gICAgbGFiZWwgPSBjb2xs
ZWN0T3B0aW9uSW5uZXJUZXh0KHRoaXMpLnN0cmlwV2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Ci0g
ICAgbGFiZWwgPSBsYWJlbC5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotCi0gICAg
cmV0dXJuIGxhYmVsOworICAgICAgICByZXR1cm4gbGFiZWw7IAorICAgIHJldHVybiBjb2xsZWN0
T3B0aW9uSW5uZXJUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKS5zaW1wbGlmeVdo
aXRlU3BhY2UoaXNIVE1MU3BhY2UpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRM
YWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQpAQCAtMjUxLDcgKzI3OSwxMCBAQCBSZW5kZXJTdHls
ZSogSFRNTE9wdGlvbkVsZW1lbnQ6Om5vblJlbmRlCiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVu
dDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25UZXh0UmVzcGVjdGluZ0dyb3VwTGFiZWwobV9k
YXRhLCB0aGlzKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7Cisg
ICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcpKQorICAgICAg
ICByZXR1cm4gIiAgICAiICsgdGV4dCgpOworICAgIHJldHVybiB0ZXh0KCk7CiB9CiAKIGJvb2wg
SFRNTE9wdGlvbkVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKQEAgLTI2Myw4ICsyOTQsOSBAQCB2
b2lkIEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZEludG9UcmVlCiB7CiAgICAgaWYgKEhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkgewogICAgICAgICBz
ZWxlY3QtPnNldFJlY2FsY0xpc3RJdGVtcygpOwotICAgICAgICAvLyBBdm9pZCBvdXIgc2VsZWN0
ZWQoKSBnZXR0ZXIgc2luY2UgaXQgd2lsbCByZWNhbGN1bGF0ZSBsaXN0IGl0ZW1zIGluY29ycmVj
dGx5IGZvciB1cy4KLSAgICAgICAgaWYgKG1fZGF0YS5zZWxlY3RlZCgpKQorICAgICAgICAvLyBE
byBub3QgY2FsbCBzZWxlY3RlZCgpIHNpbmNlIGNhbGxpbmcgdXBkYXRlTGlzdEl0ZW1TZWxlY3Rl
ZFN0YXRlcygpCisgICAgICAgIC8vIGF0IHRoaXMgdGltZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhp
bmcuIChXaHksIGV4YWN0bHk/KQorICAgICAgICBpZiAobV9pc1NlbGVjdGVkKQogICAgICAgICAg
ICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KCksIGZhbHNlKTsKICAgICAgICAgc2Vs
ZWN0LT5zY3JvbGxUb1NlbGVjdGlvbigpOwogICAgIH0KQEAgLTI3Miw0ICszMDQsMzUgQEAgdm9p
ZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZQogICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CiB9CiAKK1N0cmluZyBIVE1MT3B0aW9u
RWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVp
bGRlciB0ZXh0OworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgKSB7
CisgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICB0ZXh0LmFwcGVu
ZChub2RlLT5ub2RlVmFsdWUoKSk7CisgICAgICAgIC8vIFRleHQgbm9kZXMgaW5zaWRlIHNjcmlw
dCBlbGVtZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIG9wdGlvbiB0ZXh0LgorICAgICAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVudCh0b0VsZW1lbnQobm9kZSkp
KQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRo
aXMpOworICAgIH0KKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpOworfQorCisjaWZuZGVmIE5E
RUJVRworCitIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChOb2RlKiBub2Rl
KQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KG5vZGUpOworfQorCitj
b25zdCBIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChjb25zdCBOb2RlKiBu
b2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT3B0aW9uRWxlbWVudCo+KG5vZGUp
OworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDk3NzkwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDIwICsyMSwxNyBA
QAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgSFRN
TE9wdGlvbkVsZW1lbnRfaAogI2RlZmluZSBIVE1MT3B0aW9uRWxlbWVudF9oCiAKICNpbmNsdWRl
ICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCi0jaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50OwogCi1jbGFz
cyBIVE1MT3B0aW9uRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LCBwdWJs
aWMgT3B0aW9uRWxlbWVudCB7Ci0gICAgZnJpZW5kIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50Owot
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJNZW51TGlzdDsKLQorY2xhc3MgSFRNTE9wdGlvbkVsZW1l
bnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEhUTUxGb3Jt
RWxlbWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CkBA
IC00NiwxNyArNDMsMTQgQEAgcHVibGljOgogCiAgICAgaW50IGluZGV4KCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0OworICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
c2VsZWN0ZWQoKTsKKyAgICBib29sIHNlbGVjdGVkKCk7CiAgICAgdm9pZCBzZXRTZWxlY3RlZChi
b29sKTsKIAogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBvd25lclNlbGVjdEVsZW1lbnQoKSBjb25z
dDsKIAotICAgIGJvb2wgZGVmYXVsdFNlbGVjdGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWZh
dWx0U2VsZWN0ZWQoYm9vbCk7Ci0KICAgICBTdHJpbmcgbGFiZWwoKSBjb25zdDsKICAgICB2b2lk
IHNldExhYmVsKGNvbnN0IFN0cmluZyYpOwogCkBAIC02NCw2ICs1OCwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKIAorICAgIFN0cmluZyB0ZXh0SW5k
ZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNlbGVjdGVk
U3RhdGUoYm9vbCk7CisKIHByaXZhdGU6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwogCkBAIC03OCwx
MCArNzYsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSopOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkU3RhdGUoYm9v
bCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wpOwogCkBAIC04OSwxMCArODMsMzQg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIG5vblJlbmRlcmVyUmVuZGVy
U3R5bGUoKSBjb25zdDsKIAotICAgIE9wdGlvbkVsZW1lbnREYXRhIG1fZGF0YTsKKyAgICBTdHJp
bmcgY29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNvbnN0OworCisgICAgU3RyaW5nIG1fdmFsdWU7
CisgICAgU3RyaW5nIG1fbGFiZWw7CisgICAgYm9vbCBtX2lzU2VsZWN0ZWQ7CiAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBtX3N0eWxlOwogfTsKIAorSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9w
dGlvbkVsZW1lbnQoTm9kZSopOworY29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlv
bkVsZW1lbnQoY29uc3QgTm9kZSopOwordm9pZCB0b0hUTUxPcHRpb25FbGVtZW50KGNvbnN0IEhU
TUxPcHRpb25FbGVtZW50Kik7IC8vIFRoaXMgb3ZlcmxvYWQgd2lsbCBjYXRjaCBhbnlvbmUgZG9p
bmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KKworI2lmZGVmIE5ERUJVRworCisvLyBUaGUgZGVidWcg
dmVyc2lvbnMgb2YgdGhlc2UsIHdpdGggYXNzZXJ0aW9ucywgYXJlIG5vdCBpbmxpbmVkLgorCitp
bmxpbmUgSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoTm9kZSogbm9kZSkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihub2RlKTsKK30K
KworaW5saW5lIGNvbnN0IEhUTUxPcHRpb25FbGVtZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KGNv
bnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxPcHRp
b25FbGVtZW50Kj4obm9kZSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA5Nzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMiBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4U2VsZWN0SXRlbXMgPSAxCiAKIHN0YXRpYyBjb25zdCBET01UaW1lU3RhbXAgdHlwZUFoZWFk
VGltZW91dCA9IDEwMDA7CiAKKy8vIEZJWE1FOiBDaGFuZ2UgYWxsIHRoZSBjYWxsIHNpdGVzIHRv
IHVzZSBoYXNUYWdOYW1lIGFuZCB0b0hUTUxPcHRpb25FbGVtZW50IGluc3RlYWQuCitzdGF0aWMg
aW5saW5lIEhUTUxPcHRpb25FbGVtZW50KiB0b09wdGlvbkVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpID8gdG9IVE1M
T3B0aW9uRWxlbWVudChlbGVtZW50KSA6IDA7Cit9CisKIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1M
U2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCiAgICAgLCBtX2xhc3RDaGFyVGlt
ZSgwKQpAQCAtNDQ1LDcgKzQ1MSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFZhbGlk
SW5kZXgoaW4KICAgICBpbnQgc2l6ZSA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgZm9yIChsaXN0
SW5kZXggKz0gZGlyZWN0aW9uOyBsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplOyBs
aXN0SW5kZXggKz0gZGlyZWN0aW9uKSB7CiAgICAgICAgIC0tc2tpcDsKLSAgICAgICAgaWYgKCFs
aXN0SXRlbXNbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSAmJiBpc09wdGlvbkVsZW1lbnQobGlzdEl0
ZW1zW2xpc3RJbmRleF0pKSB7CisgICAgICAgIGlmICghbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmRp
c2FibGVkKCkgJiYgbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkg
ewogICAgICAgICAgICAgbGFzdEdvb2RJbmRleCA9IGxpc3RJbmRleDsKICAgICAgICAgICAgIGlm
IChza2lwIDw9IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MjYsNyArNTMyLDcgQEAg
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3RpbwogICAgIG1fbGFzdE9uQ2hh
bmdlU2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09w
dGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9u
RWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAgIG1fbGFzdE9uQ2hh
bmdlU2VsZWN0aW9uLmFwcGVuZChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVj
dGVkKCkpOwogICAgIH0KIH0KQEAgLTU0MSw3ICs1NDcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpzZXRBY3RpdmVTZWxlY3RpCiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
aXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRv
T3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRp
b25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgbV9jYWNoZWRT
dGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQob3B0aW9uRWxlbWVudCAmJiBvcHRpb25FbGVt
ZW50LT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CkBAIC01NjEsNyArNTY3LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbAogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxF
bGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVs
ZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAg
IGlmICghb3B0aW9uRWxlbWVudCB8fCBpdGVtc1tpXS0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCkBAIC01OTMsNyArNTk5LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
bGlzdEJveE9uQ2hhbmdlKAogICAgIC8vIFVwZGF0ZSBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbiBh
bmQgZmlyZSBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQuCiAgICAgYm9vbCBmaXJlT25D
aGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9u
RWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVt
ZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9
IG9wdGlvbkVsZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsKICAgICAgICAgaWYg
KHNlbGVjdGVkICE9IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uW2ldKQogICAgICAgICAgICAgZmly
ZU9uQ2hhbmdlID0gdHJ1ZTsKQEAgLTY2Nyw3ICs2NzMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpyZWNhbGNMaXN0SXRlbXMoCiAKICAgICBtX3Nob3VsZFJlY2FsY0xpc3RJdGVtcyA9IGZh
bHNlOwogCi0gICAgT3B0aW9uRWxlbWVudCogZm91bmRTZWxlY3RlZCA9IDA7CisgICAgSFRNTE9w
dGlvbkVsZW1lbnQqIGZvdW5kU2VsZWN0ZWQgPSAwOwogICAgIGZvciAoTm9kZSogY3VycmVudE5v
ZGUgPSB0aGlzLT5maXJzdENoaWxkKCk7IGN1cnJlbnROb2RlOykgewogICAgICAgICBpZiAoIWN1
cnJlbnROb2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGN1cnJlbnROb2RlID0g
Y3VycmVudE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CkBAIC02ODcsNyArNjkzLDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQg
PSB0b09wdGlvbkVsZW1lbnQoY3VycmVudCkpIHsKKyAgICAgICAgaWYgKEhUTUxPcHRpb25FbGVt
ZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGN1cnJlbnQpKSB7CiAgICAgICAg
ICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7CiAKICAgICAgICAgICAgIGlmICh1cGRh
dGVTZWxlY3RlZFN0YXRlcyAmJiAhbV9tdWx0aXBsZSkgewpAQCAtNzIxLDcgKzcyNyw3IEBAIGlu
dCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgpIGMKICAgICAvLyBSZXR1cm4gdGhl
IG51bWJlciBvZiB0aGUgZmlyc3Qgb3B0aW9uIHNlbGVjdGVkLgogICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9w
dGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKSB7CisgICAgICAgIGlmIChI
VE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tp
XSkpIHsKICAgICAgICAgICAgIGlmIChvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICsraW5kZXg7CkBAIC03NDIsNyAr
NzQ4LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleAogICAgIGlu
dCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCk7CiAKICAgICBFbGVt
ZW50KiBleGNsdWRlRWxlbWVudCA9IDA7Ci0gICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVs
ZW1lbnQgPSAobGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4
XSkgOiAwKSkgeworICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IChs
aXN0SW5kZXggPj0gMCA/IHRvT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSA6IDApKSB7
CiAgICAgICAgIGV4Y2x1ZGVFbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsKICAgICAgICAgaWYg
KG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8IGRlc2VsZWN0KQogICAgICAgICAg
ICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgobGlzdEluZGV4KTsKQEAgLTc4OCw3ICs3
OTQsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4CiAKICAgICBp
bnQgb3B0aW9uSW5kZXgyID0gLTE7CiAgICAgZm9yIChpbnQgbGlzdEluZGV4ID0gMDsgbGlzdElu
ZGV4IDwgbGlzdFNpemU7ICsrbGlzdEluZGV4KSB7Ci0gICAgICAgIGlmIChpc09wdGlvbkVsZW1l
bnQoaXRlbXNbbGlzdEluZGV4XSkpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhh
c1RhZ05hbWUob3B0aW9uVGFnKSkgewogICAgICAgICAgICAgKytvcHRpb25JbmRleDI7CiAgICAg
ICAgICAgICBpZiAob3B0aW9uSW5kZXgyID09IG9wdGlvbkluZGV4KQogICAgICAgICAgICAgICAg
IHJldHVybiBsaXN0SW5kZXg7CkBAIC04MDEsMTMgKzgwNywxMyBAQCBpbnQgSFRNTFNlbGVjdEVs
ZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4CiBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RUb09w
dGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxF
bGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Ci0gICAgaWYgKGxpc3RJbmRleCA8IDAgfHwg
bGlzdEluZGV4ID49IHN0YXRpY19jYXN0PGludD4oaXRlbXMuc2l6ZSgpKSB8fCAhaXNPcHRpb25F
bGVtZW50KGl0ZW1zW2xpc3RJbmRleF0pKQorICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJ
bmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkgfHwgIWl0ZW1zW2xpc3RJbmRl
eF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLy8g
QWN0dWFsIGluZGV4IG9mIG9wdGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmllcyB0aGF0
IG1heSBiZSBpbiBsaXN0LgogICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsaXN0SW5kZXg7ICsraSkgewotICAgICAgICBpZiAoaXNPcHRpb25FbGVtZW50
KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRhZykp
CiAgICAgICAgICAgICArK29wdGlvbkluZGV4OwogICAgIH0KIApAQCAtODQwLDcgKzg0Niw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXQKICAgICAgICAgaWYgKGl0
ZW1zW2ldID09IGV4Y2x1ZGVFbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRl
bXNbaV0pKQorICAgICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0
b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVudC0+c2V0
U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogfQpAQCAtODUyLDcgKzg1OCw3IEBAIGJvb2wg
SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFMKICAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CiAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCog
b3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsK
ICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IG9wdGlvbkVsZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+
c2VsZWN0ZWQoKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoc2VsZWN0ZWQgPyAnWCcgOiAnLicp
OwogICAgIH0KQEAgLTg2OCw3ICs4NzQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0
b3JlRm9ybUNvbnRyCiAgICAgc2l6ZV90IGxlbmd0aCA9IGl0ZW1zLnNpemUoKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoT3B0aW9u
RWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCisgICAg
ICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChpdGVtc1tpXSkpCiAgICAgICAgICAgICBvcHRpb25FbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRl
KHN0YXRlW2ldID09ICdYJyk7CiAgICAgfQogCkBAIC04OTUsNyArOTAxLDcgQEAgYm9vbCBIVE1M
U2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxl
bWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVs
ZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAg
IGlmIChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkgJiYgIW9wdGlv
bkVsZW1lbnQtPmRpc2FibGVkKCkpIHsKICAgICAgICAgICAgIGxpc3QuYXBwZW5kRGF0YShuYW1l
LCBvcHRpb25FbGVtZW50LT52YWx1ZSgpKTsKICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgPSB0cnVl
OwpAQCAtOTEwLDEyICs5MTYsMTIgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9y
bURhdGEoRgogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiB7Ci0gICAgT3B0aW9u
RWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwotICAgIE9wdGlvbkVsZW1lbnQqIHNlbGVjdGVkT3B0
aW9uID0gMDsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOworICAgIEhU
TUxPcHRpb25FbGVtZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7CiAKICAgICBjb25zdCBWZWN0b3I8
SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRp
b25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAg
ICAgICAgaWYgKCFvcHRpb25FbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEx
MTYsNyArMTEyMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3QK
ICAgICBib29sIG11bHRpU2VsZWN0ID0gbV9tdWx0aXBsZSAmJiBtdWx0aSAmJiAhc2hpZnQ7CiAK
ICAgICBFbGVtZW50KiBjbGlja2VkRWxlbWVudCA9IGxpc3RJdGVtcygpW2xpc3RJbmRleF07Ci0g
ICAgT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9PcHRpb25FbGVtZW50KGNsaWNrZWRFbGVtZW50
KTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9PcHRpb25FbGVtZW50KGNsaWNr
ZWRFbGVtZW50KTsKICAgICBpZiAob3B0aW9uKSB7CiAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Yg
d2hldGhlciBhbiBhY3RpdmUgc2VsZWN0aW9uIChsaWtlIGR1cmluZyBkcmFnCiAgICAgICAgIC8v
IHNlbGVjdGlvbiksIHNob3VsZCBzZWxlY3Qgb3IgZGVzZWxlY3QuCkBAIC0xMzEyLDcgKzEzMTgs
NyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJCiB7CiAgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IGl0ZW1zLnNpemUoKTsgaTspIHsKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQq
IG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbLS1pXSkpIHsKKyAgICAgICAg
aWYgKEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0
ZW1zWy0taV0pKSB7CiAgICAgICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgfQpAQCAtMTM3OCw3ICsxMzg0LDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZQogICAgIC8vIHRvIHVz
ZSBzdGFydFdpdGggb25jZSB0aGF0IGlzIGZpeGVkLgogICAgIFN0cmluZyBwcmVmaXhXaXRoQ2Fz
ZUZvbGRlZChwcmVmaXguZm9sZENhc2UoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVt
Q291bnQ7ICsraSwgaW5kZXggPSAoaW5kZXggKyAxKSAlIGl0ZW1Db3VudCkgewotICAgICAgICBP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2luZGV4
XSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25F
bGVtZW50KGl0ZW1zW2luZGV4XSk7CiAgICAgICAgIGlmICghb3B0aW9uRWxlbWVudCB8fCBpdGVt
c1tpbmRleF0tPmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTQxNCw3
ICsxNDIwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZQogICAg
IC8vIElmIHRoaXMgaW5kZXggaXMgYWxyZWFkeSBzZWxlY3RlZCwgdW5zZWxlY3QuIG90aGVyd2lz
ZSB1cGRhdGUgdGhlIHNlbGVjdGVkIGluZGV4LgogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xp
c3RJbmRleChpbmRleCk7Ci0gICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSAo
bGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkgOiAwKSkg
eworICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IChsaXN0SW5kZXgg
Pj0gMCA/IHRvT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSA6IDApKSB7CiAgICAgICAg
IGlmIChvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVu
dC0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgICAgIGVsc2UKQEAgLTE0MzUsNyArMTQ0
MSw3IEBAIHVuc2lnbmVkIEhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgoKSBjb24KIAogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXNP
cHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNUYWdOYW1l
KG9wdGlvblRhZykpCiAgICAgICAgICAgICArK29wdGlvbnM7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5Nzc5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMsMTEgKzQzLDExIEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgpAQCAtMTExLDExICsxMTEsMTEgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1
cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIAogICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSBsaXN0SXRlbXNbaV07CiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAg
ICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgICAgICAgICBpZiAoT3B0
aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkKLSAg
ICAgICAgICAgICAgICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9u
VGFnKSkKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50
KS0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsKICAgICAgICAgICAgICAgICB0
ZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9wdEdyb3VwRWxlbWVudCo+KGVsZW1lbnQpLT5n
cm91cExhYmVsVGV4dCgpOwogICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRl
bUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CkBAIC0zMjcsOCArMzI3LDggQEAgdm9pZCBSZW5kZXJM
aXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyhWZQogICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsK
ICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0
SXRlbXMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGxpc3RJdGVtc1tp
XSk7Ci0gICAgICAgIGlmIChvcHRpb25FbGVtZW50ICYmICFvcHRpb25FbGVtZW50LT5kaXNhYmxl
ZCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmICF0b0hUTUxPcHRpb25F
bGVtZW50KGVsZW1lbnQpLT5kaXNhYmxlZCgpKSB7CiAgICAgICAgICAgICByZWN0cy5hcHBlbmQo
aXRlbUJvdW5kaW5nQm94UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KQEAgLTM3MSw4ICszNzEsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENh
Y2hlUHVyZ2VQcmV2ZW50ZXI7CiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlz
dEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRlbXMoKTsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgT3B0aW9uRWxlbWVu
dCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KTsKKyAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgUmVuZGVyU3R5bGUq
IGl0ZW1TdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgaWYgKCFpdGVtU3R5bGUp
CkBAIC0zODIsMTQgKzM4MSwxNSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVn
cm91bmQoCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpdGVtVGV4dDsKLSAgICBpZiAo
b3B0aW9uRWxlbWVudCkKLSAgICAgICAgaXRlbVRleHQgPSBvcHRpb25FbGVtZW50LT50ZXh0SW5k
ZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgYm9vbCBpc09wdGlvbkVsZW1lbnQgPSBl
bGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZyk7CisgICAgaWYgKGlzT3B0aW9uRWxlbWVudCkK
KyAgICAgICAgaXRlbVRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5k
ZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShvcHRncm91cFRhZykpCiAgICAgICAgIGl0ZW1UZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
SFRNTE9wdEdyb3VwRWxlbWVudCo+KGVsZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOwogICAgIGFw
cGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9yIHRl
eHRDb2xvciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgOiBzdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKG9wdGlvbkVsZW1l
bnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgeworICAgIGlmIChpc09wdGlvbkVsZW1l
bnQgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSkgewogICAgICAg
ICBpZiAoZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3Vt
ZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpKQogICAgICAgICAgICAgdGV4dENvbG9yID0g
dGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwogICAgICAg
ICAvLyBIb25vciB0aGUgZm9yZWdyb3VuZCBjb2xvciBmb3IgZGlzYWJsZWQgaXRlbXMKQEAgLTQy
MiwxMSArNDIyLDEwIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgK
IHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgbGlzdEluZGV4KQogewog
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b0hUTUxTZWxlY3RF
bGVtZW50KG5vZGUoKSktPmxpc3RJdGVtcygpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0
SXRlbXNbbGlzdEluZGV4XTsKLSAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9P
cHRpb25FbGVtZW50KGVsZW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0
ZW1zW2xpc3RJbmRleF07CiAKICAgICBDb2xvciBiYWNrQ29sb3I7Ci0gICAgaWYgKG9wdGlvbkVs
ZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgeworICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2Vs
ZWN0ZWQoKSkgewogICAgICAgICBpZiAoZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFu
ZEFjdGl2ZSgpICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpKQogICAgICAg
ICAgICAgYmFja0NvbG9yID0gdGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDk3NzkwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0
LDEwIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5o
IgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIk9wdGlvbkVsZW1lbnQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAi
UmVuZGVyQlIuaCIKQEAgLTE1MSwxMiArMTUxLDExIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVw
ZGF0ZU9wdGlvbnNXaWR0aCgKICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQ
dXJnZVByZXZlbnRlcjsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAg
IGlmICghb3B0aW9uRWxlbWVudCkKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0
SXRlbXNbaV07CisgICAgICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSBvcHRpb25FbGVt
ZW50LT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgIFN0cmluZyB0
ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpOwogICAgICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgdGV4dCwg
JyAnKTsKICAgICAgICAgaWYgKHRoZW1lKCktPnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50
KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUgb3B0aW9uJ3MgdGV4dCBpbmRlbnQuICBX
ZSBjYW4ndCBjYWxjdWxhdGUgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIG5vdy4KQEAgLTIwMiw4ICsy
MDEsOCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpCiAgICAgU3Ry
aW5nIHRleHQgPSAiIjsKICAgICBpZiAoaSA+PSAwICYmIGkgPCBzaXplKSB7CiAgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIGlmIChPcHRpb25FbGVtZW50
KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAg
ICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgp
OworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CisgICAgICAg
ICAgICB0ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVkVG9S
ZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgbV9vcHRpb25TdHlsZSA9IGVsZW1lbnQt
PnJlbmRlclN0eWxlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzcsOCArMzc2LDggQEAgU3Ry
aW5nIFJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCh1bnNpZ25lZAogICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShv
cHRncm91cFRhZykpCiAgICAgICAgIGl0ZW1TdHJpbmcgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
T3B0R3JvdXBFbGVtZW50Kj4oZWxlbWVudCktPmdyb3VwTGFiZWxUZXh0KCk7Ci0gICAgZWxzZSBp
ZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50
KSkKLSAgICAgICAgaXRlbVN0cmluZyA9IG9wdGlvbkVsZW1lbnQtPnRleHRJbmRlbnRlZFRvUmVz
cGVjdEdyb3VwTGFiZWwoKTsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlv
blRhZykpCisgICAgICAgIGl0ZW1TdHJpbmcgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQp
LT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAKICAgICBhcHBseVRleHRUcmFu
c2Zvcm0oc3R5bGUoKSwgaXRlbVN0cmluZywgJyAnKTsKICAgICByZXR1cm4gaXRlbVN0cmluZzsK
QEAgLTU1Nyw5ICs1NTYsOCBAQCBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3RlZCh1
bnNpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNl
bGVjdEVsZW1lbnQobm9kZSgpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSBs
aXN0SXRlbXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQobGlzdEl0ZW1zW2xpc3RJbmRl
eF0pKQotICAgICAgICByZXR1cm4gb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4
XTsKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmIHRvSFRNTE9w
dGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxp
c3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111540</attachid>
            <date>2011-10-18 17:47:09 -0700</date>
            <delta_ts>2011-10-19 12:22:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70276-20111018174708.patch</filename>
            <type>text/plain</type>
            <size>44817</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NzkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMTAtMTcgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBPcHRpb25FbGVtZW50IChm
aXJzdCBoYWxmKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzAyNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvcmluZyB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbmV3IHRlc3RzLgorCisgICAgICAg
ICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBVc2UgaGFzVGFnTmFtZQorICAgICAgICBhbmQgdG9I
VE1MT3B0aW9uRWxlbWVudCBpbnN0ZWFkIG9mIHRvT3B0aW9uRWxlbWVudC4KKworICAgICAgICAq
IGRvbS9PcHRpb25FbGVtZW50LmNwcDogRGVsZXRlZCBjb250ZW50cy4gUmVtb3ZlIGZpbGUgbGF0
ZXIuCisgICAgICAgICogZG9tL09wdGlvbkVsZW1lbnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudCk6IEluaXRpYWxpemUgbV9pc1NlbGVjdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3Ip
OiBJbml0aWFsaXplIHRoZQorICAgICAgICBzZWxlY3RlZCBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4g
Y2FsbGluZyBzZXREZWZhdWx0U2VsZWN0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6dGV4dCk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBPcHRpb25F
bGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRleHQuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudDo6aW5kZXgpOiBNb3ZlZCB0aGUgY29kZSBoZXJlIGZyb20KKyAgICAgICAg
T3B0aW9uRWxlbWVudDo6b3B0aW9uSW5kZXguCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAg
IGNvZGUgdG8gY2FsbCBzZXRWYWx1ZSBhbmQgc2V0TGFiZWwuIENoYW5nZWQgdGhlIGNvZGUgdGhh
dCBjYWxsZWQKKyAgICAgICAgc2V0U2VsZWN0ZWQgdG8gaW5zdGVhZCBzZXQgbV9pc1NlbGVjdGVk
IGFuZCBhZGRlZCBhIEZJWE1FIGFib3V0IHdoeQorICAgICAgICB0aGF0J3MgcHJvYmFibHkgd3Jv
bmcsIGJ1dCBzYW1lIGJlaGF2aW9yIGFzIGJlZm9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50Ojp2YWx1ZSk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uVmFsdWUuIEFkZGVkIGEgRklYTUUgYWJvdXQgaW5j
b3JyZWN0CisgICAgICAgIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKTogVXNlIG1faXNTZWxlY3RlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZCk6IFVzZSBtX2lzU2VsZWN0
ZWQgYW5kCisgICAgICAgIGNhbGwgc2V0U2VsZWN0ZWRTdGF0ZSBpbnN0ZWFkIG9mIE9wdGlvbkVs
ZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6IE1vdmVkIHRoZSBjb2RlCisgICAgICAgIGhlcmUgZnJv
bSBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6OmxhYmVsKTogU3RyZWFtbGluZWQgdGhlIGNvZGUuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJl
bCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbSBPcHRpb25FbGVtZW50Ojpjb2xs
ZWN0T3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOiBVc2UgbV9pc1NlbGVjdGVkCisgICAg
ICAgIGFuZCByZXdyb3RlIGNvbW1lbnQgZm9yIGNsYXJpdHkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6IE1vdmVkIHRoaXMKKyAg
ICAgICAgaGVyZSBmcm9tIE9wdGlvbkVsZW1lbnQsIGFuZCBjaGFuZ2VkIHRvIHVzZSBTdHJpbmdC
dWlsZGVyLgorICAgICAgICAoV2ViQ29yZTo6dG9IVE1MT3B0aW9uRWxlbWVudCk6IEFkZGVkLgor
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOiBSZW1vdmVkIE9wdGlvbkVsZW1l
bnQuaCBpbmNsdWRlLgorICAgICAgICBSZW1vdmVkIE9wdGlvbkVsZW1lbnQgYmFzZSBjbGFzcy4g
UmVtb3ZlZCB1bm5lZWRlZCBmcmllbmQgZGVjbGFyYXRpb25zLgorICAgICAgICBNYWRlIHZhbHVl
IGFuZCBzZWxlY3RlZCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuIFJlbW92ZWQgdW5uZWVkZWQKKyAg
ICAgICAgZGVmYXVsdFNlbGVjdGVkIGFuZCBzZXREZWZhdWx0U2VsZWN0ZWQgZnVuY3Rpb25zLiBN
YWRlIHRoZQorICAgICAgICB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsIGFuZCBzZXRT
ZWxlY3RlZFN0YXRlIGZ1bmN0aW9ucworICAgICAgICBiZSBub24tdmlydHVhbCBhbmQgcHVibGlj
LiBBZGRlZCBhIGNvbGxlY3RPcHRpb25Jbm5lclRleHQgZnVuY3Rpb24uCisgICAgICAgIFJlcGxh
Y2VkIG1fZGF0YSB3aXRoIG1fdmFsdWUsIG1fbGFiZWwsIGFuZCBtX3NlbGVjdGVkLgorCisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b09w
dGlvbkVsZW1lbnQpOiBBZGRlZC4gSGVscGVyIHRvIGtlZXAgZXhpc3RpbmcgY29kZQorICAgICAg
ICBjbG9zZSB0byB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpuZXh0VmFsaWRJbmRleCk6IFVzZSBoYXNUYWdOYW1lCisgICAgICAgIGluc3RlYWQgb2YgaXNP
cHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVM
YXN0U2VsZWN0aW9uKTogVXNlIEhUTUxPcHRpb25FbGVtZW50CisgICAgICAgIHR5cGUgaW5zdGVh
ZCBvZiBPcHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5k
ZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxl
Y3RlZEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
b3B0aW9uVG9MaXN0SW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZv
cm1Db250cm9sU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjphcHBlbmRGb3JtRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKTog
RGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6IFVzZSBIVE1MT3B0
aW9uRWxlbWVudCwKKyAgICAgICAgaGFzVGFnTmFtZSwgYW5kIHRvSFRNTE9wdGlvbkVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFj
a2dyb3VuZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVk
KTogRGl0dG8uCisKIDIwMTEtMTAtMTggIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
OjpsYXlvdXRIb3Jpem9udGFsQm94CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAkocmV2aXNpb24gOTc3OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBACiAjaW5jbHVkZSAi
SFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiT3B0
aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTExMTQsOSArMTExNCw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKEMKICAgICAgICAgICAgICAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICAg
ICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVj
a2VkKCkgJiYgIWlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlKTsKLSAgICAgICAgICAgICAgICBpZiAob3B0
aW9uRWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKQorICAgICAgICAgICAgICAg
IGlmIChlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlKS0+
c2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vT3B0
aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA5Nzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9PcHRpb25F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDIgKzEgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJPcHRpb25FbGVtZW50LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MT3B0R3JvdXBF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi12b2lkIE9wdGlv
bkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIEVsZW1l
bnQqIGVsZW1lbnQsIGJvb2wgc2VsZWN0ZWQpCi17Ci0gICAgaWYgKGRhdGEuc2VsZWN0ZWQoKSA9
PSBzZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YS5zZXRTZWxlY3RlZChzZWxl
Y3RlZCk7Ci0gICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwotfQotCi1pbnQgT3B0
aW9uRWxlbWVudDo6b3B0aW9uSW5kZXgoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQs
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFzZWxlY3RFbGVtZW50KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIC8vIExldCdzIGRvIHRoaXMgZHluYW1pY2FsbHkuIE1pZ2h0
IGJlIGEgYml0IHNsb3csIGJ1dCB3ZSdyZSBzdXJlCi0gICAgLy8gd2Ugd29uJ3QgZm9yZ2V0IHRv
IHVwZGF0ZSBhIG1lbWJlciB2YXJpYWJsZSBpbiBzb21lIGNhc2VzLi4uCi0gICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gc2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7Ci0g
ICAgaW50IGxlbmd0aCA9IGl0ZW1zLnNpemUoKTsKLSAgICBpbnQgb3B0aW9uSW5kZXggPSAwOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc09w
dGlvbkVsZW1lbnQoaXRlbXNbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChpdGVtc1tpXSA9PSBlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4Owot
ICAgICAgICArK29wdGlvbkluZGV4OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1TdHJp
bmcgT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbkxhYmVsT3JUZXh0KGNvbnN0IE9wdGlvbkVs
ZW1lbnREYXRhJiBkYXRhLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgU3RyaW5nIHRleHQ7Ci0KLSAg
ICAvLyBXaW5JRSBkb2VzIG5vdCB1c2UgdGhlIGxhYmVsIGF0dHJpYnV0ZSwgc28gYXMgYSBxdWly
aywgd2UgaWdub3JlIGl0LgotICAgIGlmICghZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKQotICAg
ICAgICB0ZXh0ID0gZGF0YS5sYWJlbCgpOwotICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKLSAgICAg
ICAgdGV4dCA9IGNvbGxlY3RPcHRpb25Jbm5lclRleHQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIG5v
cm1hbGl6ZVRleHQoZG9jdW1lbnQsIHRleHQpOwotfQotCi1TdHJpbmcgT3B0aW9uRWxlbWVudDo6
Y29sbGVjdE9wdGlvbklubmVyVGV4dChjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIFN0
cmluZyB0ZXh0OwotICAgIE5vZGUqIG4gPSBlbGVtZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hp
bGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8
IG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKQotICAgICAgICAgICAg
dGV4dCArPSBuLT5ub2RlVmFsdWUoKTsKLQotICAgICAgICAvLyBza2lwIHNjcmlwdCBjb250ZW50
Ci0gICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuKSkpCi0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0U2li
bGluZyhlbGVtZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoZWxlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiB0ZXh0OwotfQotCi1TdHJpbmcg
T3B0aW9uRWxlbWVudDo6bm9ybWFsaXplVGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYgc3JjKQotewotICAgIFN0cmluZyB0ZXh0ID0gZG9jdW1lbnQtPmRpc3BsYXlT
dHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc3JjKTsKLQotICAgIC8vIEluIFdpbklFLCBsZWFkaW5n
IGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucyBhbmQgb3B0Z3Jv
dXBzLiBXZSBtYXRjaCB0aGlzIGJlaGF2aW9yLgotICAgIHRleHQgPSB0ZXh0LnN0cmlwV2hpdGVT
cGFjZShpc0hUTUxTcGFjZSk7Ci0KLSAgICAvLyBXZSB3YW50IHRvIGNvbGxhcHNlIG91ciB3aGl0
ZXNwYWNlIHRvby4gVGhpcyB3aWxsIG1hdGNoIG90aGVyIGJyb3dzZXJzLgotICAgIHRleHQgPSB0
ZXh0LnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Ci0KLSAgICByZXR1cm4gdGV4dDsK
LX0KLQotU3RyaW5nIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25UZXh0UmVzcGVjdGluZ0dy
b3VwTGFiZWwoY29uc3QgT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpCi17Ci0gICAgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihlbGVtZW50LT5wYXJlbnROb2RlKCkpOwotICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBh
cmVudEVsZW1lbnQtPmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcpKQotICAgICAgICByZXR1cm4gIiAg
ICAiICsgY29sbGVjdE9wdGlvbkxhYmVsT3JUZXh0KGRhdGEsIGVsZW1lbnQpOwotCi0gICAgcmV0
dXJuIGNvbGxlY3RPcHRpb25MYWJlbE9yVGV4dChkYXRhLCBlbGVtZW50KTsKLX0KLQotLy8gT3B0
aW9uRWxlbWVudERhdGEKLU9wdGlvbkVsZW1lbnREYXRhOjpPcHRpb25FbGVtZW50RGF0YSgpCi0g
ICAgOiBtX3NlbGVjdGVkKGZhbHNlKQotewotfQotCi1PcHRpb25FbGVtZW50RGF0YTo6fk9wdGlv
bkVsZW1lbnREYXRhKCkKLXsKLX0KLQotT3B0aW9uRWxlbWVudCogdG9PcHRpb25FbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiBl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uVGFnKSkKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWJvb2wgaXNPcHRpb25FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0
dXJuIGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZyk7Ci19Ci0KLX0K
Ky8vIEZJWE1FOiBEZWxldGUgdGhpcyBmaWxlIGFmdGVyIHVwZGF0aW5nIGFsbCB0aGUgcHJvamVj
dCBmaWxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gOTc3
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDgzICsxLDIgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpZm5kZWYgT3B0aW9uRWxlbWVudF9oCi0jZGVmaW5lIE9wdGlvbkVsZW1lbnRfaAotCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBFbGVtZW50OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKLWNs
YXNzIE9wdGlvbkVsZW1lbnREYXRhOwotCi1jbGFzcyBPcHRpb25FbGVtZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5PcHRpb25FbGVtZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGlz
YWJsZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNlbGVjdGVkKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wpID0gMDsKLQotICAgIHZpcnR1YWwg
U3RyaW5nIHRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgdGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1
ZSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIHNldFNlbGVjdGVk
U3RhdGUoT3B0aW9uRWxlbWVudERhdGEmLCBFbGVtZW50KiwgYm9vbCBzZWxlY3RlZCk7Ci0gICAg
c3RhdGljIGludCBvcHRpb25JbmRleChIVE1MU2VsZWN0RWxlbWVudCosIGNvbnN0IEVsZW1lbnQq
KTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RPcHRpb25MYWJlbE9yVGV4dChjb25zdCBPcHRp
b25FbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxl
Y3RPcHRpb25UZXh0UmVzcGVjdGluZ0dyb3VwTGFiZWwoY29uc3QgT3B0aW9uRWxlbWVudERhdGEm
LCBjb25zdCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIFN0cmluZyBjb2xsZWN0T3B0aW9uVmFsdWUo
Y29uc3QgT3B0aW9uRWxlbWVudERhdGEmLCBjb25zdCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIFN0
cmluZyBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KGNvbnN0IEVsZW1lbnQqKTsKLXByaXZhdGU6Ci0g
ICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVUZXh0KGNvbnN0IERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJik7Ci19OwotCi0vLyBIVE1MT3B0aW9uRWxlbWVudCBob2xkIHRoaXMgc3RydWN0IGFzIG1l
bWJlciB2YXJpYWJsZQotLy8gYW5kIHBhc3MgaXQgdG8gdGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rp
b25zIGluIE9wdGlvbkVsZW1lbnQKLWNsYXNzIE9wdGlvbkVsZW1lbnREYXRhIHsKLXB1YmxpYzoK
LSAgICBPcHRpb25FbGVtZW50RGF0YSgpOwotICAgIH5PcHRpb25FbGVtZW50RGF0YSgpOwotCi0g
ICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KLQotICAgIFN0
cmluZyBsYWJlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWw7IH0KLSAgICB2b2lkIHNldExhYmVs
KGNvbnN0IFN0cmluZyYgbGFiZWwpIHsgbV9sYWJlbCA9IGxhYmVsOyB9Ci0KLSAgICBib29sIHNl
bGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZDsgfQotICAgIHZvaWQgc2V0U2VsZWN0
ZWQoYm9vbCBzZWxlY3RlZCkgeyBtX3NlbGVjdGVkID0gc2VsZWN0ZWQ7IH0KLQotcHJpdmF0ZToK
LSAgICBTdHJpbmcgbV92YWx1ZTsKLSAgICBTdHJpbmcgbV9sYWJlbDsKLSAgICBib29sIG1fc2Vs
ZWN0ZWQ7Ci19OwotCi1PcHRpb25FbGVtZW50KiB0b09wdGlvbkVsZW1lbnQoRWxlbWVudCopOwot
Ym9vbCBpc09wdGlvbkVsZW1lbnQoRWxlbWVudCopOwotCi19Ci0KLSNlbmRpZgorLy8gRklYTUU6
IERlbGV0ZSB0aGlzIGZpbGUgYWZ0ZXIgdXBkYXRpbmcgYWxsIHRoZSBwcm9qZWN0IGZpbGVzLgor
I2Vycm9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAko
cmV2aXNpb24gOTc3OTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsMTEgQEAKICNpbmNsdWRlICJOb2RlUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlck1lbnVMaXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Nyw2ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKIEhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkK
ICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCisg
ICAgLCBtX2lzU2VsZWN0ZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob3B0aW9u
VGFnKSk7CiB9CkBAIC03NSw3ICs3OCw4IEBAIFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+
IEhUTUxPcHRpb24KIAogICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIGVsZW1lbnQt
PnNldFZhbHVlKHZhbHVlKTsKLSAgICBlbGVtZW50LT5zZXREZWZhdWx0U2VsZWN0ZWQoZGVmYXVs
dFNlbGVjdGVkKTsKKyAgICBpZiAoZGVmYXVsdFNlbGVjdGVkKQorICAgICAgICBlbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoc2VsZWN0ZWRBdHRyLCBlbXB0eUF0b20pOwogICAgIGVsZW1lbnQtPnNldFNl
bGVjdGVkKHNlbGVjdGVkKTsKIAogICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKQEAgLTEx
Myw3ICsxMTcsMjIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT3B0aW9uRWxlbWVudDo6Zgog
CiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRleHQobV9kYXRhLCB0aGlzKTsKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIFN0cmluZyB0ZXh0
OworCisgICAgLy8gV2luSUUgZG9lcyBub3QgdXNlIHRoZSBsYWJlbCBhdHRyaWJ1dGUsIHNvIGFz
IGEgcXVpcmssIHdlIGlnbm9yZSBpdC4KKyAgICBpZiAoIWRvY3VtZW50LT5pblF1aXJrc01vZGUo
KSkKKyAgICAgICAgdGV4dCA9IGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKKworICAgIC8v
IEZJWE1FOiBUaGUgZm9sbG93aW5nIHRyZWF0cyBhbiBlbGVtZW50IHdpdGggdGhlIGxhYmVsIGF0
dHJpYnV0ZSBzZXQgdG8KKyAgICAvLyB0aGUgZW1wdHkgc3RyaW5nIHRoZSBzYW1lIGFzIGFuIGVs
ZW1lbnQgd2l0aCBubyBsYWJlbCBhdHRyaWJ1dGUgYXQgYWxsLgorICAgIC8vIElzIHRoYXQgY29y
cmVjdD8gSWYgaXQgaXMsIHRoZW4gc2hvdWxkIHRoZSBsYWJlbCBmdW5jdGlvbiB3b3JrIHRoZSBz
YW1lIHdheT8KKyAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHRleHQgPSBjb2xsZWN0
T3B0aW9uSW5uZXJUZXh0KCk7CisKKyAgICAvLyBGSVhNRTogSXMgZGlzcGxheVN0cmluZ01vZGlm
aWVkQnlFbmNvZGluZyBoZWxwZnVsIGhlcmU/CisgICAgLy8gSWYgaXQncyBjb3JyZWN0IGhlcmUs
IHRoZW4gaXNuJ3QgaXQgbmVlZGVkIGluIHRoZSB2YWx1ZSBhbmQgbGFiZWwgZnVuY3Rpb25zIHRv
bz8KKyAgICByZXR1cm4gZG9jdW1lbnQtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmco
dGV4dCkuc3RyaXBXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNI
VE1MU3BhY2UpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0
cmluZyAmdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMzgsMjggKzE1Nyw0NyBAQCB2b2lk
IEhUTUxPcHRpb25FbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oCiAKIGludCBIVE1MT3B0aW9uRWxl
bWVudDo6aW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBPcHRpb25FbGVtZW50OjpvcHRpb25J
bmRleChvd25lclNlbGVjdEVsZW1lbnQoKSwgdGhpcyk7CisgICAgLy8gSXQgd291bGQgYmUgZmFz
dGVyIHRvIGNhY2hlIHRoZSBpbmRleCwgYnV0IGhhcmRlciB0byBnZXQgaXQgcmlnaHQgaW4gYWxs
IGNhc2VzLgorCisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSBvd25lclNl
bGVjdEVsZW1lbnQoKTsKKyAgICBpZiAoIXNlbGVjdEVsZW1lbnQpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKKworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxl
bWVudCo+JiBpdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJdGVtcygpOworICAgIHNpemVfdCBs
ZW5ndGggPSBpdGVtcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICBpZiAoIWl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGl0ZW1zW2ldID09IHRoaXMpCisgICAg
ICAgICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CisgICAgICAgICsrb3B0aW9uSW5kZXg7CisgICAg
fQorCisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09
IHNlbGVjdGVkQXR0cikKLSAgICAgICAgbV9kYXRhLnNldFNlbGVjdGVkKCFhdHRyLT5pc051bGwo
KSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikKLSAgICAgICAgbV9k
YXRhLnNldFZhbHVlKGF0dHItPnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBsYWJlbEF0dHIpCi0gICAgICAgIG1fZGF0YS5zZXRMYWJlbChhdHRyLT52YWx1ZSgpKTsKLSAg
ICBlbHNlCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzZWxlY3RlZEF0dHIpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRoZSBIVE1MIHNwZWNpZmljYXRpb24g
c2F5cy4KKyAgICAgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaW1wbGllcyB0aGF0IHJlbW92aW5n
IHRoZSBzZWxlY3RlZCBhdHRyaWJ1dGUgb3IKKyAgICAgICAgLy8gY2hhbmdpbmcgdGhlIHZhbHVl
IG9mIGEgc2VsZWN0ZWQgYXR0cmlidXRlIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50CisgICAgICAg
IC8vIGhhcyBubyBlZmZlY3Qgb24gd2hldGhlciB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZC4gRnVy
dGhlciwgaXQgc2VlbXMKKyAgICAgICAgLy8gdGhhdCB3ZSBuZWVkIHRvIGRvIG1vcmUgdGhhbiBq
dXN0IHNldCBtX2lzU2VsZWN0ZWQgdG8gc2VsZWN0IGluIHRoYXQKKyAgICAgICAgLy8gY2FzZTsg
d2UnZCBuZWVkIHRvIGRvIHRoZSBvdGhlciB3b3JrIGZyb20gdGhlIHNldFNlbGVjdGVkIGZ1bmN0
aW9uLgorICAgICAgICBtX2lzU2VsZWN0ZWQgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgfSBlbHNl
CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwogfQogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fZGF0YS52YWx1ZSgpLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV9kYXRhLnZh
bHVlKCk7Ci0KLSAgICByZXR1cm4gY29sbGVjdE9wdGlvbklubmVyVGV4dCh0aGlzKS5zdHJpcFdo
aXRlU3BhY2UoaXNIVE1MU3BhY2UpLnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Ci0K
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIpOworICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICByZXR1cm4gY29sbGVjdE9wdGlvbklubmVyVGV4dCgpLnN0cmlwV2hpdGVTcGFjZShpc0hUTUxT
cGFjZSkuc2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKTsKIH0KIAogdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTE3MSwxNSArMjA5
LDE1IEBAIGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKCkKIHsKICAgICBpZiAoSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0RWxlbWVudCgpKQogICAgICAgICBz
ZWxlY3QtPnVwZGF0ZUxpc3RJdGVtU2VsZWN0ZWRTdGF0ZXMoKTsKLSAgICByZXR1cm4gbV9kYXRh
LnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIG1faXNTZWxlY3RlZDsKIH0KIAogdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWQoYm9vbCBzZWxlY3RlZCkKIHsKLSAgICBpZiAobV9kYXRh
LnNlbGVjdGVkKCkgPT0gc2VsZWN0ZWQpCisgICAgaWYgKG1faXNTZWxlY3RlZCA9PSBzZWxlY3Rl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0
ZShtX2RhdGEsIHRoaXMsIHNlbGVjdGVkKTsKKyAgICBzZXRTZWxlY3RlZFN0YXRlKHNlbGVjdGVk
KTsKIAogICAgIGlmIChIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVt
ZW50KCkpCiAgICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleChzZWxlY3RlZCA/IGluZGV4
KCkgOiAtMSwgZmFsc2UpOwpAQCAtMTg3LDcgKzIyNSwxMSBAQCB2b2lkIEhUTUxPcHRpb25FbGVt
ZW50OjpzZXRTZWxlY3RlZChib29sCiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVj
dGVkU3RhdGUoYm9vbCBzZWxlY3RlZCkKIHsKLSAgICBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3Rl
ZFN0YXRlKG1fZGF0YSwgdGhpcywgc2VsZWN0ZWQpOworICAgIGlmIChtX2lzU2VsZWN0ZWQgPT0g
c2VsZWN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNTZWxlY3RlZCA9IHNlbGVjdGVk
OworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVu
dDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFu
Z2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQpAQCAtMjA5LDI2ICsy
NTEsMTIgQEAgSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRpb25FbGVtZW50OjpvdwogICAgIHJl
dHVybiB0b0hUTUxTZWxlY3RFbGVtZW50KHNlbGVjdCk7CiB9CiAKLWJvb2wgSFRNTE9wdGlvbkVs
ZW1lbnQ6OmRlZmF1bHRTZWxlY3RlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhc3RIYXNBdHRy
aWJ1dGUoc2VsZWN0ZWRBdHRyKTsKLX0KLQotdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0RGVm
YXVsdFNlbGVjdGVkKGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2VsZWN0ZWRBdHRyLCBi
ID8gIiIgOiAwKTsKLX0KLQogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50OjpsYWJlbCgpIGNvbnN0
CiB7Ci0gICAgU3RyaW5nIGxhYmVsID0gbV9kYXRhLmxhYmVsKCk7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBsYWJlbCA9IGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKICAgICBpZiAoIWxh
YmVsLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbGFiZWw7Ci0gCi0gICAgbGFiZWwgPSBjb2xs
ZWN0T3B0aW9uSW5uZXJUZXh0KHRoaXMpLnN0cmlwV2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Ci0g
ICAgbGFiZWwgPSBsYWJlbC5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotCi0gICAg
cmV0dXJuIGxhYmVsOworICAgICAgICByZXR1cm4gbGFiZWw7IAorICAgIHJldHVybiBjb2xsZWN0
T3B0aW9uSW5uZXJUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKS5zaW1wbGlmeVdo
aXRlU3BhY2UoaXNIVE1MU3BhY2UpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRM
YWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQpAQCAtMjUxLDcgKzI3OSwxMCBAQCBSZW5kZXJTdHls
ZSogSFRNTE9wdGlvbkVsZW1lbnQ6Om5vblJlbmRlCiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVu
dDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25UZXh0UmVzcGVjdGluZ0dyb3VwTGFiZWwobV9k
YXRhLCB0aGlzKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7Cisg
ICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcpKQorICAgICAg
ICByZXR1cm4gIiAgICAiICsgdGV4dCgpOworICAgIHJldHVybiB0ZXh0KCk7CiB9CiAKIGJvb2wg
SFRNTE9wdGlvbkVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKQEAgLTI2Myw4ICsyOTQsOSBAQCB2
b2lkIEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZEludG9UcmVlCiB7CiAgICAgaWYgKEhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkgewogICAgICAgICBz
ZWxlY3QtPnNldFJlY2FsY0xpc3RJdGVtcygpOwotICAgICAgICAvLyBBdm9pZCBvdXIgc2VsZWN0
ZWQoKSBnZXR0ZXIgc2luY2UgaXQgd2lsbCByZWNhbGN1bGF0ZSBsaXN0IGl0ZW1zIGluY29ycmVj
dGx5IGZvciB1cy4KLSAgICAgICAgaWYgKG1fZGF0YS5zZWxlY3RlZCgpKQorICAgICAgICAvLyBE
byBub3QgY2FsbCBzZWxlY3RlZCgpIHNpbmNlIGNhbGxpbmcgdXBkYXRlTGlzdEl0ZW1TZWxlY3Rl
ZFN0YXRlcygpCisgICAgICAgIC8vIGF0IHRoaXMgdGltZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhp
bmcuIChXaHksIGV4YWN0bHk/KQorICAgICAgICBpZiAobV9pc1NlbGVjdGVkKQogICAgICAgICAg
ICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KCksIGZhbHNlKTsKICAgICAgICAgc2Vs
ZWN0LT5zY3JvbGxUb1NlbGVjdGlvbigpOwogICAgIH0KQEAgLTI3Miw0ICszMDQsMzUgQEAgdm9p
ZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZQogICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CiB9CiAKK1N0cmluZyBIVE1MT3B0aW9u
RWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVp
bGRlciB0ZXh0OworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgKSB7
CisgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICB0ZXh0LmFwcGVu
ZChub2RlLT5ub2RlVmFsdWUoKSk7CisgICAgICAgIC8vIFRleHQgbm9kZXMgaW5zaWRlIHNjcmlw
dCBlbGVtZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIG9wdGlvbiB0ZXh0LgorICAgICAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVudCh0b0VsZW1lbnQobm9kZSkp
KQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRo
aXMpOworICAgIH0KKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpOworfQorCisjaWZuZGVmIE5E
RUJVRworCitIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChOb2RlKiBub2Rl
KQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KG5vZGUpOworfQorCitj
b25zdCBIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9uRWxlbWVudChjb25zdCBOb2RlKiBu
b2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT3B0aW9uRWxlbWVudCo+KG5vZGUp
OworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDk3NzkwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDIwICsyMSwxNyBA
QAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgSFRN
TE9wdGlvbkVsZW1lbnRfaAogI2RlZmluZSBIVE1MT3B0aW9uRWxlbWVudF9oCiAKICNpbmNsdWRl
ICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCi0jaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50OwogCi1jbGFz
cyBIVE1MT3B0aW9uRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LCBwdWJs
aWMgT3B0aW9uRWxlbWVudCB7Ci0gICAgZnJpZW5kIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50Owot
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJNZW51TGlzdDsKLQorY2xhc3MgSFRNTE9wdGlvbkVsZW1l
bnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEhUTUxGb3Jt
RWxlbWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CkBA
IC00NiwxNyArNDMsMTQgQEAgcHVibGljOgogCiAgICAgaW50IGluZGV4KCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0OworICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
c2VsZWN0ZWQoKTsKKyAgICBib29sIHNlbGVjdGVkKCk7CiAgICAgdm9pZCBzZXRTZWxlY3RlZChi
b29sKTsKIAogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBvd25lclNlbGVjdEVsZW1lbnQoKSBjb25z
dDsKIAotICAgIGJvb2wgZGVmYXVsdFNlbGVjdGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWZh
dWx0U2VsZWN0ZWQoYm9vbCk7Ci0KICAgICBTdHJpbmcgbGFiZWwoKSBjb25zdDsKICAgICB2b2lk
IHNldExhYmVsKGNvbnN0IFN0cmluZyYpOwogCkBAIC02NCw2ICs1OCwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKIAorICAgIFN0cmluZyB0ZXh0SW5k
ZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNlbGVjdGVk
U3RhdGUoYm9vbCk7CisKIHByaXZhdGU6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwogCkBAIC03OCwx
MCArNzYsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSopOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkU3RhdGUoYm9v
bCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wpOwogCkBAIC04OSwxMCArODMsMzQg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIG5vblJlbmRlcmVyUmVuZGVy
U3R5bGUoKSBjb25zdDsKIAotICAgIE9wdGlvbkVsZW1lbnREYXRhIG1fZGF0YTsKKyAgICBTdHJp
bmcgY29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNvbnN0OworCisgICAgU3RyaW5nIG1fdmFsdWU7
CisgICAgU3RyaW5nIG1fbGFiZWw7CisgICAgYm9vbCBtX2lzU2VsZWN0ZWQ7CiAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBtX3N0eWxlOwogfTsKIAorSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9w
dGlvbkVsZW1lbnQoTm9kZSopOworY29uc3QgSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlv
bkVsZW1lbnQoY29uc3QgTm9kZSopOwordm9pZCB0b0hUTUxPcHRpb25FbGVtZW50KGNvbnN0IEhU
TUxPcHRpb25FbGVtZW50Kik7IC8vIFRoaXMgb3ZlcmxvYWQgd2lsbCBjYXRjaCBhbnlvbmUgZG9p
bmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KKworI2lmZGVmIE5ERUJVRworCisvLyBUaGUgZGVidWcg
dmVyc2lvbnMgb2YgdGhlc2UsIHdpdGggYXNzZXJ0aW9ucywgYXJlIG5vdCBpbmxpbmVkLgorCitp
bmxpbmUgSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoTm9kZSogbm9kZSkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihub2RlKTsKK30K
KworaW5saW5lIGNvbnN0IEhUTUxPcHRpb25FbGVtZW50KiB0b0hUTUxPcHRpb25FbGVtZW50KGNv
bnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxPcHRp
b25FbGVtZW50Kj4obm9kZSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA5Nzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMiBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4U2VsZWN0SXRlbXMgPSAxCiAKIHN0YXRpYyBjb25zdCBET01UaW1lU3RhbXAgdHlwZUFoZWFk
VGltZW91dCA9IDEwMDA7CiAKKy8vIEZJWE1FOiBDaGFuZ2UgYWxsIHRoZSBjYWxsIHNpdGVzIHRv
IHVzZSBoYXNUYWdOYW1lIGFuZCB0b0hUTUxPcHRpb25FbGVtZW50IGluc3RlYWQuCitzdGF0aWMg
aW5saW5lIEhUTUxPcHRpb25FbGVtZW50KiB0b09wdGlvbkVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpID8gdG9IVE1M
T3B0aW9uRWxlbWVudChlbGVtZW50KSA6IDA7Cit9CisKIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1M
U2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCiAgICAgLCBtX2xhc3RDaGFyVGlt
ZSgwKQpAQCAtNDQ1LDcgKzQ1MSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFZhbGlk
SW5kZXgoaW4KICAgICBpbnQgc2l6ZSA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgZm9yIChsaXN0
SW5kZXggKz0gZGlyZWN0aW9uOyBsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplOyBs
aXN0SW5kZXggKz0gZGlyZWN0aW9uKSB7CiAgICAgICAgIC0tc2tpcDsKLSAgICAgICAgaWYgKCFs
aXN0SXRlbXNbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSAmJiBpc09wdGlvbkVsZW1lbnQobGlzdEl0
ZW1zW2xpc3RJbmRleF0pKSB7CisgICAgICAgIGlmICghbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmRp
c2FibGVkKCkgJiYgbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkg
ewogICAgICAgICAgICAgbGFzdEdvb2RJbmRleCA9IGxpc3RJbmRleDsKICAgICAgICAgICAgIGlm
IChza2lwIDw9IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MjYsNyArNTMyLDcgQEAg
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3RpbwogICAgIG1fbGFzdE9uQ2hh
bmdlU2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09w
dGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9u
RWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAgIG1fbGFzdE9uQ2hh
bmdlU2VsZWN0aW9uLmFwcGVuZChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVj
dGVkKCkpOwogICAgIH0KIH0KQEAgLTU0MSw3ICs1NDcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpzZXRBY3RpdmVTZWxlY3RpCiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
aXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRv
T3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRp
b25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgbV9jYWNoZWRT
dGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQob3B0aW9uRWxlbWVudCAmJiBvcHRpb25FbGVt
ZW50LT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CkBAIC01NjEsNyArNTY3LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbAogCiAgICAgY29uc3QgVmVjdG9yPEhUTUxF
bGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVs
ZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAg
IGlmICghb3B0aW9uRWxlbWVudCB8fCBpdGVtc1tpXS0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCkBAIC01OTMsNyArNTk5LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
bGlzdEJveE9uQ2hhbmdlKAogICAgIC8vIFVwZGF0ZSBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbiBh
bmQgZmlyZSBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQuCiAgICAgYm9vbCBmaXJlT25D
aGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9u
RWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVt
ZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9
IG9wdGlvbkVsZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsKICAgICAgICAgaWYg
KHNlbGVjdGVkICE9IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uW2ldKQogICAgICAgICAgICAgZmly
ZU9uQ2hhbmdlID0gdHJ1ZTsKQEAgLTY2Nyw3ICs2NzMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpyZWNhbGNMaXN0SXRlbXMoCiAKICAgICBtX3Nob3VsZFJlY2FsY0xpc3RJdGVtcyA9IGZh
bHNlOwogCi0gICAgT3B0aW9uRWxlbWVudCogZm91bmRTZWxlY3RlZCA9IDA7CisgICAgSFRNTE9w
dGlvbkVsZW1lbnQqIGZvdW5kU2VsZWN0ZWQgPSAwOwogICAgIGZvciAoTm9kZSogY3VycmVudE5v
ZGUgPSB0aGlzLT5maXJzdENoaWxkKCk7IGN1cnJlbnROb2RlOykgewogICAgICAgICBpZiAoIWN1
cnJlbnROb2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGN1cnJlbnROb2RlID0g
Y3VycmVudE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CkBAIC02ODcsNyArNjkzLDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQg
PSB0b09wdGlvbkVsZW1lbnQoY3VycmVudCkpIHsKKyAgICAgICAgaWYgKEhUTUxPcHRpb25FbGVt
ZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGN1cnJlbnQpKSB7CiAgICAgICAg
ICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7CiAKICAgICAgICAgICAgIGlmICh1cGRh
dGVTZWxlY3RlZFN0YXRlcyAmJiAhbV9tdWx0aXBsZSkgewpAQCAtNzIxLDcgKzcyNyw3IEBAIGlu
dCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgpIGMKICAgICAvLyBSZXR1cm4gdGhl
IG51bWJlciBvZiB0aGUgZmlyc3Qgb3B0aW9uIHNlbGVjdGVkLgogICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9w
dGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKSB7CisgICAgICAgIGlmIChI
VE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tp
XSkpIHsKICAgICAgICAgICAgIGlmIChvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICsraW5kZXg7CkBAIC03NDIsNyAr
NzQ4LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleAogICAgIGlu
dCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCk7CiAKICAgICBFbGVt
ZW50KiBleGNsdWRlRWxlbWVudCA9IDA7Ci0gICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVs
ZW1lbnQgPSAobGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4
XSkgOiAwKSkgeworICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IChs
aXN0SW5kZXggPj0gMCA/IHRvT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSA6IDApKSB7
CiAgICAgICAgIGV4Y2x1ZGVFbGVtZW50ID0gaXRlbXNbbGlzdEluZGV4XTsKICAgICAgICAgaWYg
KG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8IGRlc2VsZWN0KQogICAgICAgICAg
ICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgobGlzdEluZGV4KTsKQEAgLTc4OCw3ICs3
OTQsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4CiAKICAgICBp
bnQgb3B0aW9uSW5kZXgyID0gLTE7CiAgICAgZm9yIChpbnQgbGlzdEluZGV4ID0gMDsgbGlzdElu
ZGV4IDwgbGlzdFNpemU7ICsrbGlzdEluZGV4KSB7Ci0gICAgICAgIGlmIChpc09wdGlvbkVsZW1l
bnQoaXRlbXNbbGlzdEluZGV4XSkpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhh
c1RhZ05hbWUob3B0aW9uVGFnKSkgewogICAgICAgICAgICAgKytvcHRpb25JbmRleDI7CiAgICAg
ICAgICAgICBpZiAob3B0aW9uSW5kZXgyID09IG9wdGlvbkluZGV4KQogICAgICAgICAgICAgICAg
IHJldHVybiBsaXN0SW5kZXg7CkBAIC04MDEsMTMgKzgwNywxMyBAQCBpbnQgSFRNTFNlbGVjdEVs
ZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4CiBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RUb09w
dGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxF
bGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Ci0gICAgaWYgKGxpc3RJbmRleCA8IDAgfHwg
bGlzdEluZGV4ID49IHN0YXRpY19jYXN0PGludD4oaXRlbXMuc2l6ZSgpKSB8fCAhaXNPcHRpb25F
bGVtZW50KGl0ZW1zW2xpc3RJbmRleF0pKQorICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJ
bmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkgfHwgIWl0ZW1zW2xpc3RJbmRl
eF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLy8g
QWN0dWFsIGluZGV4IG9mIG9wdGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmllcyB0aGF0
IG1heSBiZSBpbiBsaXN0LgogICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsaXN0SW5kZXg7ICsraSkgewotICAgICAgICBpZiAoaXNPcHRpb25FbGVtZW50
KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRhZykp
CiAgICAgICAgICAgICArK29wdGlvbkluZGV4OwogICAgIH0KIApAQCAtODQwLDcgKzg0Niw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXQKICAgICAgICAgaWYgKGl0
ZW1zW2ldID09IGV4Y2x1ZGVFbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRl
bXNbaV0pKQorICAgICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0
b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVudC0+c2V0
U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogfQpAQCAtODUyLDcgKzg1OCw3IEBAIGJvb2wg
SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFMKICAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CiAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCog
b3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsK
ICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IG9wdGlvbkVsZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+
c2VsZWN0ZWQoKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoc2VsZWN0ZWQgPyAnWCcgOiAnLicp
OwogICAgIH0KQEAgLTg2OCw3ICs4NzQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0
b3JlRm9ybUNvbnRyCiAgICAgc2l6ZV90IGxlbmd0aCA9IGl0ZW1zLnNpemUoKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoT3B0aW9u
RWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCisgICAg
ICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChpdGVtc1tpXSkpCiAgICAgICAgICAgICBvcHRpb25FbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRl
KHN0YXRlW2ldID09ICdYJyk7CiAgICAgfQogCkBAIC04OTUsNyArOTAxLDcgQEAgYm9vbCBIVE1M
U2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxl
bWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVs
ZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAg
IGlmIChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkgJiYgIW9wdGlv
bkVsZW1lbnQtPmRpc2FibGVkKCkpIHsKICAgICAgICAgICAgIGxpc3QuYXBwZW5kRGF0YShuYW1l
LCBvcHRpb25FbGVtZW50LT52YWx1ZSgpKTsKICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgPSB0cnVl
OwpAQCAtOTEwLDEyICs5MTYsMTIgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9y
bURhdGEoRgogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiB7Ci0gICAgT3B0aW9u
RWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwotICAgIE9wdGlvbkVsZW1lbnQqIHNlbGVjdGVkT3B0
aW9uID0gMDsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOworICAgIEhU
TUxPcHRpb25FbGVtZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7CiAKICAgICBjb25zdCBWZWN0b3I8
SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRp
b25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAg
ICAgICAgaWYgKCFvcHRpb25FbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEx
MTYsNyArMTEyMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3QK
ICAgICBib29sIG11bHRpU2VsZWN0ID0gbV9tdWx0aXBsZSAmJiBtdWx0aSAmJiAhc2hpZnQ7CiAK
ICAgICBFbGVtZW50KiBjbGlja2VkRWxlbWVudCA9IGxpc3RJdGVtcygpW2xpc3RJbmRleF07Ci0g
ICAgT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9PcHRpb25FbGVtZW50KGNsaWNrZWRFbGVtZW50
KTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9PcHRpb25FbGVtZW50KGNsaWNr
ZWRFbGVtZW50KTsKICAgICBpZiAob3B0aW9uKSB7CiAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Yg
d2hldGhlciBhbiBhY3RpdmUgc2VsZWN0aW9uIChsaWtlIGR1cmluZyBkcmFnCiAgICAgICAgIC8v
IHNlbGVjdGlvbiksIHNob3VsZCBzZWxlY3Qgb3IgZGVzZWxlY3QuCkBAIC0xMzEyLDcgKzEzMTgs
NyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJCiB7CiAgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IGl0ZW1zLnNpemUoKTsgaTspIHsKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQq
IG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbLS1pXSkpIHsKKyAgICAgICAg
aWYgKEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0
ZW1zWy0taV0pKSB7CiAgICAgICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgfQpAQCAtMTM3OCw3ICsxMzg0LDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZQogICAgIC8vIHRvIHVz
ZSBzdGFydFdpdGggb25jZSB0aGF0IGlzIGZpeGVkLgogICAgIFN0cmluZyBwcmVmaXhXaXRoQ2Fz
ZUZvbGRlZChwcmVmaXguZm9sZENhc2UoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVt
Q291bnQ7ICsraSwgaW5kZXggPSAoaW5kZXggKyAxKSAlIGl0ZW1Db3VudCkgewotICAgICAgICBP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2luZGV4
XSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25F
bGVtZW50KGl0ZW1zW2luZGV4XSk7CiAgICAgICAgIGlmICghb3B0aW9uRWxlbWVudCB8fCBpdGVt
c1tpbmRleF0tPmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTQxNCw3
ICsxNDIwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZQogICAg
IC8vIElmIHRoaXMgaW5kZXggaXMgYWxyZWFkeSBzZWxlY3RlZCwgdW5zZWxlY3QuIG90aGVyd2lz
ZSB1cGRhdGUgdGhlIHNlbGVjdGVkIGluZGV4LgogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xp
c3RJbmRleChpbmRleCk7Ci0gICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSAo
bGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkgOiAwKSkg
eworICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IChsaXN0SW5kZXgg
Pj0gMCA/IHRvT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5kZXhdKSA6IDApKSB7CiAgICAgICAg
IGlmIChvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVu
dC0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgICAgIGVsc2UKQEAgLTE0MzUsNyArMTQ0
MSw3IEBAIHVuc2lnbmVkIEhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgoKSBjb24KIAogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXNP
cHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNUYWdOYW1l
KG9wdGlvblRhZykpCiAgICAgICAgICAgICArK29wdGlvbnM7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5Nzc5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMsMTEgKzQzLDExIEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgpAQCAtMTExLDExICsxMTEsMTEgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1
cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIAogICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSBsaXN0SXRlbXNbaV07CiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAg
ICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgICAgICAgICBpZiAoT3B0
aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkKLSAg
ICAgICAgICAgICAgICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9u
VGFnKSkKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50
KS0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsKICAgICAgICAgICAgICAgICB0
ZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9wdEdyb3VwRWxlbWVudCo+KGVsZW1lbnQpLT5n
cm91cExhYmVsVGV4dCgpOwogICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRl
bUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CkBAIC0zMjcsOCArMzI3LDggQEAgdm9pZCBSZW5kZXJM
aXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyhWZQogICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsK
ICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0
SXRlbXMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBP
cHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGxpc3RJdGVtc1tp
XSk7Ci0gICAgICAgIGlmIChvcHRpb25FbGVtZW50ICYmICFvcHRpb25FbGVtZW50LT5kaXNhYmxl
ZCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmICF0b0hUTUxPcHRpb25F
bGVtZW50KGVsZW1lbnQpLT5kaXNhYmxlZCgpKSB7CiAgICAgICAgICAgICByZWN0cy5hcHBlbmQo
aXRlbUJvdW5kaW5nQm94UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KQEAgLTM3MSw4ICszNzEsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENh
Y2hlUHVyZ2VQcmV2ZW50ZXI7CiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlz
dEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRlbXMoKTsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgT3B0aW9uRWxlbWVu
dCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KTsKKyAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgUmVuZGVyU3R5bGUq
IGl0ZW1TdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgaWYgKCFpdGVtU3R5bGUp
CkBAIC0zODIsMTQgKzM4MSwxNSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVn
cm91bmQoCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpdGVtVGV4dDsKLSAgICBpZiAo
b3B0aW9uRWxlbWVudCkKLSAgICAgICAgaXRlbVRleHQgPSBvcHRpb25FbGVtZW50LT50ZXh0SW5k
ZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgYm9vbCBpc09wdGlvbkVsZW1lbnQgPSBl
bGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZyk7CisgICAgaWYgKGlzT3B0aW9uRWxlbWVudCkK
KyAgICAgICAgaXRlbVRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5k
ZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShvcHRncm91cFRhZykpCiAgICAgICAgIGl0ZW1UZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
SFRNTE9wdEdyb3VwRWxlbWVudCo+KGVsZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOwogICAgIGFw
cGx5VGV4dFRyYW5zZm9ybShzdHlsZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9yIHRl
eHRDb2xvciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgOiBzdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKG9wdGlvbkVsZW1l
bnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgeworICAgIGlmIChpc09wdGlvbkVsZW1l
bnQgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSkgewogICAgICAg
ICBpZiAoZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3Vt
ZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpKQogICAgICAgICAgICAgdGV4dENvbG9yID0g
dGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwogICAgICAg
ICAvLyBIb25vciB0aGUgZm9yZWdyb3VuZCBjb2xvciBmb3IgZGlzYWJsZWQgaXRlbXMKQEAgLTQy
MiwxMSArNDIyLDEwIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgK
IHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgbGlzdEluZGV4KQogewog
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b0hUTUxTZWxlY3RF
bGVtZW50KG5vZGUoKSktPmxpc3RJdGVtcygpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0
SXRlbXNbbGlzdEluZGV4XTsKLSAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9P
cHRpb25FbGVtZW50KGVsZW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0
ZW1zW2xpc3RJbmRleF07CiAKICAgICBDb2xvciBiYWNrQ29sb3I7Ci0gICAgaWYgKG9wdGlvbkVs
ZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgeworICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2Vs
ZWN0ZWQoKSkgewogICAgICAgICBpZiAoZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFu
ZEFjdGl2ZSgpICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpKQogICAgICAg
ICAgICAgYmFja0NvbG9yID0gdGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDk3NzkwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0
LDEwIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5o
IgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIk9wdGlvbkVsZW1lbnQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAi
UmVuZGVyQlIuaCIKQEAgLTE1MSwxMiArMTUxLDExIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVw
ZGF0ZU9wdGlvbnNXaWR0aCgKICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQ
dXJnZVByZXZlbnRlcjsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAg
IGlmICghb3B0aW9uRWxlbWVudCkKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0
SXRlbXNbaV07CisgICAgICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSBvcHRpb25FbGVt
ZW50LT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgIFN0cmluZyB0
ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpOwogICAgICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgdGV4dCwg
JyAnKTsKICAgICAgICAgaWYgKHRoZW1lKCktPnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50
KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUgb3B0aW9uJ3MgdGV4dCBpbmRlbnQuICBX
ZSBjYW4ndCBjYWxjdWxhdGUgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIG5vdy4KQEAgLTIwMiw4ICsy
MDEsOCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpCiAgICAgU3Ry
aW5nIHRleHQgPSAiIjsKICAgICBpZiAoaSA+PSAwICYmIGkgPCBzaXplKSB7CiAgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIGlmIChPcHRpb25FbGVtZW50
KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAg
ICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgp
OworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CisgICAgICAg
ICAgICB0ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVkVG9S
ZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgbV9vcHRpb25TdHlsZSA9IGVsZW1lbnQt
PnJlbmRlclN0eWxlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzcsOCArMzc2LDggQEAgU3Ry
aW5nIFJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCh1bnNpZ25lZAogICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShv
cHRncm91cFRhZykpCiAgICAgICAgIGl0ZW1TdHJpbmcgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
T3B0R3JvdXBFbGVtZW50Kj4oZWxlbWVudCktPmdyb3VwTGFiZWxUZXh0KCk7Ci0gICAgZWxzZSBp
ZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50
KSkKLSAgICAgICAgaXRlbVN0cmluZyA9IG9wdGlvbkVsZW1lbnQtPnRleHRJbmRlbnRlZFRvUmVz
cGVjdEdyb3VwTGFiZWwoKTsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlv
blRhZykpCisgICAgICAgIGl0ZW1TdHJpbmcgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQp
LT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAKICAgICBhcHBseVRleHRUcmFu
c2Zvcm0oc3R5bGUoKSwgaXRlbVN0cmluZywgJyAnKTsKICAgICByZXR1cm4gaXRlbVN0cmluZzsK
QEAgLTU1Nyw5ICs1NTYsOCBAQCBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3RlZCh1
bnNpCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNl
bGVjdEVsZW1lbnQobm9kZSgpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSBs
aXN0SXRlbXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQobGlzdEl0ZW1zW2xpc3RJbmRl
eF0pKQotICAgICAgICByZXR1cm4gb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4
XTsKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmIHRvSFRNTE9w
dGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxp
c3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTc4MTkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTEwLTE4ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgT3B0aW9uRWxl
bWVudCAoZmlyc3QgaGFsZikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcwMjc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlIGhhbmQtd3JpdHRlbiBiaW5kaW5nIGZvciBvcHRpb24gZWxlbWVudCBz
byBpdCBkb2VzIG5vdCBkZXBlbmQgb24gb3RoZXJ3aXNlLXVubmVlZGVkIGZ1bmN0aW9ucy4KKwor
ICAgICAgICAqIHNyYy9XZWJPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
T3B0aW9uRWxlbWVudDo6ZGVmYXVsdFNlbGVjdGVkKTogQ2FsbCBoYXNBdHRyaWJ1dGUuCisgICAg
ICAgIChXZWJLaXQ6OldlYk9wdGlvbkVsZW1lbnQ6OnNldERlZmF1bHRTZWxlY3RlZCk6IENhbGwg
c2V0QXR0cmlidXRlLgorCiAyMDExLTEwLTE4ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZW1vdmUgVVNFKFRIUkVBREVEX0NPTVBP
U0lUSU5HKSBmcm9tIHRoZSB0cmVlLCB0aGlzIGlzIGNvbnRyb2xsZWQgYnkgYSBydW50aW1lIHNl
dHRpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk9wdGlvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk9wdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA5Nzc5MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYk9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjMs
MTIgKzY0LDEyIEBAIFdlYlN0cmluZyBXZWJPcHRpb25FbGVtZW50Ojp0ZXh0KCkgY29uc3QKIAog
Ym9vbCBXZWJPcHRpb25FbGVtZW50OjpkZWZhdWx0U2VsZWN0ZWQoKSBjb25zdAogewotICAgIHJl
dHVybiBjb25zdFVud3JhcDxIVE1MT3B0aW9uRWxlbWVudD4oKS0+ZGVmYXVsdFNlbGVjdGVkKCk7
CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPEhUTUxPcHRpb25FbGVtZW50PigpLT5oYXNBdHRyaWJ1
dGUoc2VsZWN0ZWRBdHRyKTsKIH0KIAogdm9pZCBXZWJPcHRpb25FbGVtZW50OjpzZXREZWZhdWx0
U2VsZWN0ZWQoYm9vbCBuZXdTZWxlY3RlZCkKIHsKLSAgICByZXR1cm4gdW53cmFwPEhUTUxPcHRp
b25FbGVtZW50PigpLT5zZXREZWZhdWx0U2VsZWN0ZWQobmV3U2VsZWN0ZWQpOworICAgIHJldHVy
biB1bndyYXA8SFRNTE9wdGlvbkVsZW1lbnQ+KCktPnNldEF0dHJpYnV0ZShzZWxlY3RlZEF0dHIs
IG5ld1NlbGVjdGVkID8gIiIgOiAwKTsKIH0KIAogV2ViU3RyaW5nIFdlYk9wdGlvbkVsZW1lbnQ6
OmxhYmVsKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111657</attachid>
            <date>2011-10-19 12:22:48 -0700</date>
            <delta_ts>2011-10-20 02:59:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70276-20111019122246.patch</filename>
            <type>text/plain</type>
            <size>46635</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3ODcwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMTAtMTkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBPcHRpb25FbGVtZW50IChm
aXJzdCBoYWxmKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzAyNzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvcmluZyB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbmV3IHRlc3RzLgorCisgICAgICAg
ICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBVc2UgaGFzVGFnTmFtZQorICAgICAgICBhbmQgdG9I
VE1MT3B0aW9uRWxlbWVudCBpbnN0ZWFkIG9mIHRvT3B0aW9uRWxlbWVudC4KKworICAgICAgICAq
IGRvbS9PcHRpb25FbGVtZW50LmNwcDogRGVsZXRlZCBjb250ZW50cy4gUmVtb3ZlIGZpbGUgbGF0
ZXIuCisgICAgICAgICogZG9tL09wdGlvbkVsZW1lbnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudCk6IEluaXRpYWxpemUgbV9pc1NlbGVjdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3Ip
OiBJbml0aWFsaXplIHRoZQorICAgICAgICBzZWxlY3RlZCBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4g
Y2FsbGluZyBzZXREZWZhdWx0U2VsZWN0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6dGV4dCk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBPcHRpb25F
bGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRleHQuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudDo6aW5kZXgpOiBNb3ZlZCB0aGUgY29kZSBoZXJlIGZyb20KKyAgICAgICAg
T3B0aW9uRWxlbWVudDo6b3B0aW9uSW5kZXguCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAg
IGNvZGUgdG8gY2FsbCBzZXRWYWx1ZSBhbmQgc2V0TGFiZWwuIENoYW5nZWQgdGhlIGNvZGUgdGhh
dCBjYWxsZWQKKyAgICAgICAgc2V0U2VsZWN0ZWQgdG8gaW5zdGVhZCBzZXQgbV9pc1NlbGVjdGVk
IGFuZCBhZGRlZCBhIEZJWE1FIGFib3V0IHdoeQorICAgICAgICB0aGF0J3MgcHJvYmFibHkgd3Jv
bmcsIGJ1dCBzYW1lIGJlaGF2aW9yIGFzIGJlZm9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50Ojp2YWx1ZSk6IE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbQorICAgICAgICBP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uVmFsdWUuIEFkZGVkIGEgRklYTUUgYWJvdXQgaW5j
b3JyZWN0CisgICAgICAgIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKTogVXNlIG1faXNTZWxlY3RlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZCk6IFVzZSBtX2lzU2VsZWN0
ZWQgYW5kCisgICAgICAgIGNhbGwgc2V0U2VsZWN0ZWRTdGF0ZSBpbnN0ZWFkIG9mIE9wdGlvbkVs
ZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6IE1vdmVkIHRoZSBjb2RlCisgICAgICAgIGhlcmUgZnJv
bSBPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6OmxhYmVsKTogU3RyZWFtbGluZWQgdGhlIGNvZGUuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJl
bCk6CisgICAgICAgIE1vdmVkIHRoZSBjb2RlIGhlcmUgZnJvbSBPcHRpb25FbGVtZW50Ojpjb2xs
ZWN0T3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOiBVc2UgbV9pc1NlbGVjdGVkCisgICAg
ICAgIGFuZCByZXdyb3RlIGNvbW1lbnQgZm9yIGNsYXJpdHkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6IE1vdmVkIHRoaXMKKyAg
ICAgICAgaGVyZSBmcm9tIE9wdGlvbkVsZW1lbnQsIGFuZCBjaGFuZ2VkIHRvIHVzZSBTdHJpbmdC
dWlsZGVyLgorICAgICAgICAoV2ViQ29yZTo6dG9IVE1MT3B0aW9uRWxlbWVudCk6IEFkZGVkLgor
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOiBSZW1vdmVkIE9wdGlvbkVsZW1l
bnQuaCBpbmNsdWRlLgorICAgICAgICBSZW1vdmVkIE9wdGlvbkVsZW1lbnQgYmFzZSBjbGFzcy4g
UmVtb3ZlZCB1bm5lZWRlZCBmcmllbmQgZGVjbGFyYXRpb25zLgorICAgICAgICBNYWRlIHZhbHVl
IGFuZCBzZWxlY3RlZCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuIFJlbW92ZWQgdW5uZWVkZWQKKyAg
ICAgICAgZGVmYXVsdFNlbGVjdGVkIGFuZCBzZXREZWZhdWx0U2VsZWN0ZWQgZnVuY3Rpb25zLiBN
YWRlIHRoZQorICAgICAgICB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsIGFuZCBzZXRT
ZWxlY3RlZFN0YXRlIGZ1bmN0aW9ucworICAgICAgICBiZSBub24tdmlydHVhbCBhbmQgcHVibGlj
LiBBZGRlZCBhIGNvbGxlY3RPcHRpb25Jbm5lclRleHQgZnVuY3Rpb24uCisgICAgICAgIFJlcGxh
Y2VkIG1fZGF0YSB3aXRoIG1fdmFsdWUsIG1fbGFiZWwsIGFuZCBtX3NlbGVjdGVkLgorCisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b09w
dGlvbkVsZW1lbnQpOiBBZGRlZC4gSGVscGVyIHRvIGtlZXAgZXhpc3RpbmcgY29kZQorICAgICAg
ICBjbG9zZSB0byB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpuZXh0VmFsaWRJbmRleCk6IFVzZSBoYXNUYWdOYW1lCisgICAgICAgIGluc3RlYWQgb2YgaXNP
cHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVM
YXN0U2VsZWN0aW9uKTogVXNlIEhUTUxPcHRpb25FbGVtZW50CisgICAgICAgIHR5cGUgaW5zdGVh
ZCBvZiBPcHRpb25FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5k
ZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxl
Y3RlZEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
b3B0aW9uVG9MaXN0SW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZv
cm1Db250cm9sU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjphcHBlbmRGb3JtRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnJlc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKTog
RGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6IFVzZSBIVE1MT3B0
aW9uRWxlbWVudCwKKyAgICAgICAgaGFzVGFnTmFtZSwgYW5kIHRvSFRNTE9wdGlvbkVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFj
a2dyb3VuZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVk
KTogRGl0dG8uCisKIDIwMTEtMTAtMTkgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTc4NjMuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAkocmV2aXNpb24gOTc4NzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAg
KzM3LDEwIEBACiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRN
TE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0
eWxlLmgiCi0jaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTExMTQs
OSArMTExNCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKEMKICAg
ICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0
RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVt
ZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkgJiYgIWlucHV0RWxlbWVudC0+aXNJbmRldGVybWlu
YXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICAg
ICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlKTsKLSAg
ICAgICAgICAgICAgICBpZiAob3B0aW9uRWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxlY3Rl
ZCgpKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9I
VE1MT3B0aW9uRWxlbWVudChlKS0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL09wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA5Nzg3MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9PcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDIg
KzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJPcHRpb25FbGVtZW50LmgiCi0KLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVj
dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwotCi12b2lkIE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoT3B0aW9uRWxl
bWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgc2VsZWN0ZWQpCi17Ci0gICAg
aWYgKGRhdGEuc2VsZWN0ZWQoKSA9PSBzZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZGF0YS5zZXRTZWxlY3RlZChzZWxlY3RlZCk7Ci0gICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwotfQotCi1pbnQgT3B0aW9uRWxlbWVudDo6b3B0aW9uSW5kZXgoSFRNTFNlbGVjdEVs
ZW1lbnQqIHNlbGVjdEVsZW1lbnQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYg
KCFzZWxlY3RFbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIExldCdzIGRvIHRo
aXMgZHluYW1pY2FsbHkuIE1pZ2h0IGJlIGEgYml0IHNsb3csIGJ1dCB3ZSdyZSBzdXJlCi0gICAg
Ly8gd2Ugd29uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSBhIG1lbWJlciB2YXJpYWJsZSBpbiBzb21lIGNh
c2VzLi4uCi0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gc2VsZWN0RWxl
bWVudC0+bGlzdEl0ZW1zKCk7Ci0gICAgaW50IGxlbmd0aCA9IGl0ZW1zLnNpemUoKTsKLSAgICBp
bnQgb3B0aW9uSW5kZXggPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgaWYgKCFpc09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChpdGVtc1tpXSA9PSBlbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuIG9wdGlvbkluZGV4OwotICAgICAgICArK29wdGlvbkluZGV4OwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi1TdHJpbmcgT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbkxhYmVs
T3JUZXh0KGNvbnN0IE9wdGlvbkVsZW1lbnREYXRhJiBkYXRhLCBjb25zdCBFbGVtZW50KiBlbGVt
ZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0g
ICAgU3RyaW5nIHRleHQ7Ci0KLSAgICAvLyBXaW5JRSBkb2VzIG5vdCB1c2UgdGhlIGxhYmVsIGF0
dHJpYnV0ZSwgc28gYXMgYSBxdWlyaywgd2UgaWdub3JlIGl0LgotICAgIGlmICghZG9jdW1lbnQt
PmluUXVpcmtzTW9kZSgpKQotICAgICAgICB0ZXh0ID0gZGF0YS5sYWJlbCgpOwotICAgIGlmICh0
ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgdGV4dCA9IGNvbGxlY3RPcHRpb25Jbm5lclRleHQoZWxl
bWVudCk7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZVRleHQoZG9jdW1lbnQsIHRleHQpOwotfQotCi1T
dHJpbmcgT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dChjb25zdCBFbGVtZW50
KiBlbGVtZW50KQotewotICAgIFN0cmluZyB0ZXh0OwotICAgIE5vZGUqIG4gPSBlbGVtZW50LT5m
aXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkg
PT0gTm9kZTo6VEVYVF9OT0RFIHx8IG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElP
Tl9OT0RFKQotICAgICAgICAgICAgdGV4dCArPSBuLT5ub2RlVmFsdWUoKTsKLQotICAgICAgICAv
LyBza2lwIHNjcmlwdCBjb250ZW50Ci0gICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYg
dG9TY3JpcHRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSkpCi0gICAgICAgICAgICBu
ID0gbi0+dHJhdmVyc2VOZXh0U2libGluZyhlbGVtZW50KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVudCk7Ci0gICAgfQotICAgIHJldHVy
biB0ZXh0OwotfQotCi1TdHJpbmcgT3B0aW9uRWxlbWVudDo6bm9ybWFsaXplVGV4dChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgc3JjKQotewotICAgIFN0cmluZyB0ZXh0
ID0gZG9jdW1lbnQtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc3JjKTsKLQotICAg
IC8vIEluIFdpbklFLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQg
aW4gb3B0aW9ucyBhbmQgb3B0Z3JvdXBzLiBXZSBtYXRjaCB0aGlzIGJlaGF2aW9yLgotICAgIHRl
eHQgPSB0ZXh0LnN0cmlwV2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Ci0KLSAgICAvLyBXZSB3YW50
IHRvIGNvbGxhcHNlIG91ciB3aGl0ZXNwYWNlIHRvby4gVGhpcyB3aWxsIG1hdGNoIG90aGVyIGJy
b3dzZXJzLgotICAgIHRleHQgPSB0ZXh0LnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7
Ci0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotU3RyaW5nIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RP
cHRpb25UZXh0UmVzcGVjdGluZ0dyb3VwTGFiZWwoY29uc3QgT3B0aW9uRWxlbWVudERhdGEmIGRh
dGEsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgRWxlbWVudCogcGFyZW50RWxlbWVu
dCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbGVtZW50LT5wYXJlbnROb2RlKCkpOwotICAgIGlm
IChwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQtPmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcp
KQotICAgICAgICByZXR1cm4gIiAgICAiICsgY29sbGVjdE9wdGlvbkxhYmVsT3JUZXh0KGRhdGEs
IGVsZW1lbnQpOwotCi0gICAgcmV0dXJuIGNvbGxlY3RPcHRpb25MYWJlbE9yVGV4dChkYXRhLCBl
bGVtZW50KTsKLX0KLQotLy8gT3B0aW9uRWxlbWVudERhdGEKLU9wdGlvbkVsZW1lbnREYXRhOjpP
cHRpb25FbGVtZW50RGF0YSgpCi0gICAgOiBtX3NlbGVjdGVkKGZhbHNlKQotewotfQotCi1PcHRp
b25FbGVtZW50RGF0YTo6fk9wdGlvbkVsZW1lbnREYXRhKCkKLXsKLX0KLQotT3B0aW9uRWxlbWVu
dCogdG9PcHRpb25FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKGVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9u
VGFnKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oZWxl
bWVudCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgaXNPcHRpb25FbGVtZW50KEVsZW1lbnQq
IGVsZW1lbnQpCi17Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
Om9wdGlvblRhZyk7Ci19Ci0KLX0KKy8vIEZJWE1FOiBEZWxldGUgdGhpcyBmaWxlIGFmdGVyIHVw
ZGF0aW5nIGFsbCB0aGUgcHJvamVjdCBmaWxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9P
cHRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL09wdGlvbkVs
ZW1lbnQuaAkocmV2aXNpb24gOTc4NzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vT3B0aW9uRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICsxLDIgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgT3B0aW9uRWxlbWVudF9oCi0jZGVmaW5l
IE9wdGlvbkVsZW1lbnRfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBFbGVtZW50OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBI
VE1MU2VsZWN0RWxlbWVudDsKLWNsYXNzIE9wdGlvbkVsZW1lbnREYXRhOwotCi1jbGFzcyBPcHRp
b25FbGVtZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5PcHRpb25FbGVtZW50KCkgeyB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHNlbGVjdGVkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wp
ID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIHRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBTdHJpbmcgdGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIHN0
YXRpYyB2b2lkIHNldFNlbGVjdGVkU3RhdGUoT3B0aW9uRWxlbWVudERhdGEmLCBFbGVtZW50Kiwg
Ym9vbCBzZWxlY3RlZCk7Ci0gICAgc3RhdGljIGludCBvcHRpb25JbmRleChIVE1MU2VsZWN0RWxl
bWVudCosIGNvbnN0IEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RPcHRpb25M
YWJlbE9yVGV4dChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RPcHRpb25UZXh0UmVzcGVjdGluZ0dyb3VwTGFiZWwoY29u
c3QgT3B0aW9uRWxlbWVudERhdGEmLCBjb25zdCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIFN0cmlu
ZyBjb2xsZWN0T3B0aW9uVmFsdWUoY29uc3QgT3B0aW9uRWxlbWVudERhdGEmLCBjb25zdCBFbGVt
ZW50Kik7Ci0gICAgc3RhdGljIFN0cmluZyBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KGNvbnN0IEVs
ZW1lbnQqKTsKLXByaXZhdGU6Ci0gICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVUZXh0KGNvbnN0
IERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyBIVE1MT3B0aW9uRWxlbWVudCBo
b2xkIHRoaXMgc3RydWN0IGFzIG1lbWJlciB2YXJpYWJsZQotLy8gYW5kIHBhc3MgaXQgdG8gdGhl
IHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGluIE9wdGlvbkVsZW1lbnQKLWNsYXNzIE9wdGlvbkVs
ZW1lbnREYXRhIHsKLXB1YmxpYzoKLSAgICBPcHRpb25FbGVtZW50RGF0YSgpOwotICAgIH5PcHRp
b25FbGVtZW50RGF0YSgpOwotCi0gICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX3ZhbHVl
ID0gdmFsdWU7IH0KLQotICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWw7
IH0KLSAgICB2b2lkIHNldExhYmVsKGNvbnN0IFN0cmluZyYgbGFiZWwpIHsgbV9sYWJlbCA9IGxh
YmVsOyB9Ci0KLSAgICBib29sIHNlbGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZDsg
fQotICAgIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCBzZWxlY3RlZCkgeyBtX3NlbGVjdGVkID0gc2Vs
ZWN0ZWQ7IH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV92YWx1ZTsKLSAgICBTdHJpbmcgbV9s
YWJlbDsKLSAgICBib29sIG1fc2VsZWN0ZWQ7Ci19OwotCi1PcHRpb25FbGVtZW50KiB0b09wdGlv
bkVsZW1lbnQoRWxlbWVudCopOwotYm9vbCBpc09wdGlvbkVsZW1lbnQoRWxlbWVudCopOwotCi19
Ci0KLSNlbmRpZgorLy8gRklYTUU6IERlbGV0ZSB0aGlzIGZpbGUgYWZ0ZXIgdXBkYXRpbmcgYWxs
IHRoZSBwcm9qZWN0IGZpbGVzLgorI2Vycm9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gOTc4NzApCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsMTEg
QEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0
RWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw2ICs0OSw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhU
TUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQsIGZvcm0pCisgICAgLCBtX2lzU2VsZWN0ZWQoZmFsc2UpCiB7CiAgICAgQVNT
RVJUKGhhc1RhZ05hbWUob3B0aW9uVGFnKSk7CiB9CkBAIC03NSw3ICs3OCw4IEBAIFBhc3NSZWZQ
dHI8SFRNTE9wdGlvbkVsZW1lbnQ+IEhUTUxPcHRpb24KIAogICAgIGlmICghdmFsdWUuaXNOdWxs
KCkpCiAgICAgICAgIGVsZW1lbnQtPnNldFZhbHVlKHZhbHVlKTsKLSAgICBlbGVtZW50LT5zZXRE
ZWZhdWx0U2VsZWN0ZWQoZGVmYXVsdFNlbGVjdGVkKTsKKyAgICBpZiAoZGVmYXVsdFNlbGVjdGVk
KQorICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoc2VsZWN0ZWRBdHRyLCBlbXB0eUF0b20p
OwogICAgIGVsZW1lbnQtPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKIAogICAgIHJldHVybiBlbGVt
ZW50LnJlbGVhc2UoKTsKQEAgLTExMyw3ICsxMTcsMjIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MT3B0aW9uRWxlbWVudDo6ZgogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnRleHQoKSBj
b25zdAogewotICAgIHJldHVybiBPcHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uTGFiZWxPclRl
eHQobV9kYXRhLCB0aGlzKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVu
dCgpOworICAgIFN0cmluZyB0ZXh0OworCisgICAgLy8gV2luSUUgZG9lcyBub3QgdXNlIHRoZSBs
YWJlbCBhdHRyaWJ1dGUsIHNvIGFzIGEgcXVpcmssIHdlIGlnbm9yZSBpdC4KKyAgICBpZiAoIWRv
Y3VtZW50LT5pblF1aXJrc01vZGUoKSkKKyAgICAgICAgdGV4dCA9IGZhc3RHZXRBdHRyaWJ1dGUo
bGFiZWxBdHRyKTsKKworICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIHRyZWF0cyBhbiBlbGVt
ZW50IHdpdGggdGhlIGxhYmVsIGF0dHJpYnV0ZSBzZXQgdG8KKyAgICAvLyB0aGUgZW1wdHkgc3Ry
aW5nIHRoZSBzYW1lIGFzIGFuIGVsZW1lbnQgd2l0aCBubyBsYWJlbCBhdHRyaWJ1dGUgYXQgYWxs
LgorICAgIC8vIElzIHRoYXQgY29ycmVjdD8gSWYgaXQgaXMsIHRoZW4gc2hvdWxkIHRoZSBsYWJl
bCBmdW5jdGlvbiB3b3JrIHRoZSBzYW1lIHdheT8KKyAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisg
ICAgICAgIHRleHQgPSBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KCk7CisKKyAgICAvLyBGSVhNRTog
SXMgZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyBoZWxwZnVsIGhlcmU/CisgICAgLy8g
SWYgaXQncyBjb3JyZWN0IGhlcmUsIHRoZW4gaXNuJ3QgaXQgbmVlZGVkIGluIHRoZSB2YWx1ZSBh
bmQgbGFiZWwgZnVuY3Rpb25zIHRvbz8KKyAgICByZXR1cm4gZG9jdW1lbnQtPmRpc3BsYXlTdHJp
bmdNb2RpZmllZEJ5RW5jb2RpbmcodGV4dCkuc3RyaXBXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKS5z
aW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVt
ZW50OjpzZXRUZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0x
MzgsMjggKzE1Nyw0NyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24o
CiAKIGludCBIVE1MT3B0aW9uRWxlbWVudDo6aW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBP
cHRpb25FbGVtZW50OjpvcHRpb25JbmRleChvd25lclNlbGVjdEVsZW1lbnQoKSwgdGhpcyk7Cisg
ICAgLy8gSXQgd291bGQgYmUgZmFzdGVyIHRvIGNhY2hlIHRoZSBpbmRleCwgYnV0IGhhcmRlciB0
byBnZXQgaXQgcmlnaHQgaW4gYWxsIGNhc2VzLgorCisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdEVsZW1lbnQgPSBvd25lclNlbGVjdEVsZW1lbnQoKTsKKyAgICBpZiAoIXNlbGVjdEVsZW1l
bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKKworICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJ
dGVtcygpOworICAgIHNpemVfdCBsZW5ndGggPSBpdGVtcy5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIWl0ZW1zW2ldLT5oYXNU
YWdOYW1lKG9wdGlvblRhZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGl0
ZW1zW2ldID09IHRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CisgICAgICAg
ICsrb3B0aW9uSW5kZXg7CisgICAgfQorCisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgSFRNTE9w
dGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IHNlbGVjdGVkQXR0cikKLSAgICAgICAgbV9kYXRhLnNldFNl
bGVjdGVkKCFhdHRyLT5pc051bGwoKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZh
bHVlQXR0cikKLSAgICAgICAgbV9kYXRhLnNldFZhbHVlKGF0dHItPnZhbHVlKCkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBsYWJlbEF0dHIpCi0gICAgICAgIG1fZGF0YS5zZXRMYWJl
bChhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzZWxl
Y3RlZEF0dHIpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IHRo
ZSBIVE1MIHNwZWNpZmljYXRpb24gc2F5cy4KKyAgICAgICAgLy8gVGhlIHNwZWNpZmljYXRpb24g
aW1wbGllcyB0aGF0IHJlbW92aW5nIHRoZSBzZWxlY3RlZCBhdHRyaWJ1dGUgb3IKKyAgICAgICAg
Ly8gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIGEgc2VsZWN0ZWQgYXR0cmlidXRlIHRoYXQgaXMgYWxy
ZWFkeSBwcmVzZW50CisgICAgICAgIC8vIGhhcyBubyBlZmZlY3Qgb24gd2hldGhlciB0aGUgZWxl
bWVudCBpcyBzZWxlY3RlZC4gRnVydGhlciwgaXQgc2VlbXMKKyAgICAgICAgLy8gdGhhdCB3ZSBu
ZWVkIHRvIGRvIG1vcmUgdGhhbiBqdXN0IHNldCBtX2lzU2VsZWN0ZWQgdG8gc2VsZWN0IGluIHRo
YXQKKyAgICAgICAgLy8gY2FzZTsgd2UnZCBuZWVkIHRvIGRvIHRoZSBvdGhlciB3b3JrIGZyb20g
dGhlIHNldFNlbGVjdGVkIGZ1bmN0aW9uLgorICAgICAgICBtX2lzU2VsZWN0ZWQgPSAhYXR0ci0+
aXNOdWxsKCk7CisgICAgfSBlbHNlCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6
OnZhbHVlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGF0YS52YWx1ZSgpLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gbV9kYXRhLnZhbHVlKCk7Ci0KLSAgICByZXR1cm4gY29sbGVjdE9wdGlvbklu
bmVyVGV4dCh0aGlzKS5zdHJpcFdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpLnNpbXBsaWZ5V2hpdGVT
cGFjZShpc0hUTUxTcGFjZSk7Ci0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZmFz
dEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOworICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gY29sbGVjdE9wdGlvbklubmVyVGV4dCgpLnN0
cmlwV2hpdGVTcGFjZShpc0hUTUxTcGFjZSkuc2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNl
KTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKQEAgLTE3MSwxNSArMjA5LDE1IEBAIGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVj
dGVkKCkKIHsKICAgICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0
RWxlbWVudCgpKQogICAgICAgICBzZWxlY3QtPnVwZGF0ZUxpc3RJdGVtU2VsZWN0ZWRTdGF0ZXMo
KTsKLSAgICByZXR1cm4gbV9kYXRhLnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIG1faXNTZWxlY3Rl
ZDsKIH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWQoYm9vbCBzZWxlY3Rl
ZCkKIHsKLSAgICBpZiAobV9kYXRhLnNlbGVjdGVkKCkgPT0gc2VsZWN0ZWQpCisgICAgaWYgKG1f
aXNTZWxlY3RlZCA9PSBzZWxlY3RlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3B0aW9uRWxl
bWVudDo6c2V0U2VsZWN0ZWRTdGF0ZShtX2RhdGEsIHRoaXMsIHNlbGVjdGVkKTsKKyAgICBzZXRT
ZWxlY3RlZFN0YXRlKHNlbGVjdGVkKTsKIAogICAgIGlmIChIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpCiAgICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJ
bmRleChzZWxlY3RlZCA/IGluZGV4KCkgOiAtMSwgZmFsc2UpOwpAQCAtMTg3LDcgKzIyNSwxMSBA
QCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZChib29sCiAKIHZvaWQgSFRNTE9w
dGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoYm9vbCBzZWxlY3RlZCkKIHsKLSAgICBPcHRp
b25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlKG1fZGF0YSwgdGhpcywgc2VsZWN0ZWQpOworICAg
IGlmIChtX2lzU2VsZWN0ZWQgPT0gc2VsZWN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aXNTZWxlY3RlZCA9IHNlbGVjdGVkOworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAog
dm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFy
c2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3Vu
dERlbHRhKQpAQCAtMjA5LDI2ICsyNTEsMTIgQEAgSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRp
b25FbGVtZW50OjpvdwogICAgIHJldHVybiB0b0hUTUxTZWxlY3RFbGVtZW50KHNlbGVjdCk7CiB9
CiAKLWJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OmRlZmF1bHRTZWxlY3RlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoc2VsZWN0ZWRBdHRyKTsKLX0KLQotdm9pZCBIVE1M
T3B0aW9uRWxlbWVudDo6c2V0RGVmYXVsdFNlbGVjdGVkKGJvb2wgYikKLXsKLSAgICBzZXRBdHRy
aWJ1dGUoc2VsZWN0ZWRBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQogU3RyaW5nIEhUTUxPcHRpb25F
bGVtZW50OjpsYWJlbCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIGxhYmVsID0gbV9kYXRhLmxhYmVs
KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsYWJlbCA9IGZhc3RHZXRBdHRyaWJ1dGUobGFi
ZWxBdHRyKTsKICAgICBpZiAoIWxhYmVsLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbGFiZWw7
Ci0gCi0gICAgbGFiZWwgPSBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KHRoaXMpLnN0cmlwV2hpdGVT
cGFjZShpc0hUTUxTcGFjZSk7Ci0gICAgbGFiZWwgPSBsYWJlbC5zaW1wbGlmeVdoaXRlU3BhY2Uo
aXNIVE1MU3BhY2UpOwotCi0gICAgcmV0dXJuIGxhYmVsOworICAgICAgICByZXR1cm4gbGFiZWw7
IAorICAgIHJldHVybiBjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKGlz
SFRNTFNwYWNlKS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwogfQogCiB2b2lkIEhU
TUxPcHRpb25FbGVtZW50OjpzZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQpAQCAtMjUxLDcg
KzI3OSwxMCBAQCBSZW5kZXJTdHlsZSogSFRNTE9wdGlvbkVsZW1lbnQ6Om5vblJlbmRlCiAKIFN0
cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25UZXh0UmVz
cGVjdGluZ0dyb3VwTGFiZWwobV9kYXRhLCB0aGlzKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJl
bnQgPSBwYXJlbnROb2RlKCk7CisgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmhhc1RhZ05hbWUo
b3B0Z3JvdXBUYWcpKQorICAgICAgICByZXR1cm4gIiAgICAiICsgdGV4dCgpOworICAgIHJldHVy
biB0ZXh0KCk7CiB9CiAKIGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QK
QEAgLTI2Myw4ICsyOTQsOSBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZEludG9U
cmVlCiB7CiAgICAgaWYgKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVs
ZW1lbnQoKSkgewogICAgICAgICBzZWxlY3QtPnNldFJlY2FsY0xpc3RJdGVtcygpOwotICAgICAg
ICAvLyBBdm9pZCBvdXIgc2VsZWN0ZWQoKSBnZXR0ZXIgc2luY2UgaXQgd2lsbCByZWNhbGN1bGF0
ZSBsaXN0IGl0ZW1zIGluY29ycmVjdGx5IGZvciB1cy4KLSAgICAgICAgaWYgKG1fZGF0YS5zZWxl
Y3RlZCgpKQorICAgICAgICAvLyBEbyBub3QgY2FsbCBzZWxlY3RlZCgpIHNpbmNlIGNhbGxpbmcg
dXBkYXRlTGlzdEl0ZW1TZWxlY3RlZFN0YXRlcygpCisgICAgICAgIC8vIGF0IHRoaXMgdGltZSB3
b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuIChXaHksIGV4YWN0bHk/KQorICAgICAgICBpZiAobV9p
c1NlbGVjdGVkKQogICAgICAgICAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KCks
IGZhbHNlKTsKICAgICAgICAgc2VsZWN0LT5zY3JvbGxUb1NlbGVjdGlvbigpOwogICAgIH0KQEAg
LTI3Miw0ICszMDQsMzUgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJl
ZQogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CiB9
CiAKK1N0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNv
bnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciB0ZXh0OworICAgIGZvciAoTm9kZSogbm9kZSA9IGZp
cnN0Q2hpbGQoKTsgbm9kZTsgKSB7CisgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisg
ICAgICAgICAgICB0ZXh0LmFwcGVuZChub2RlLT5ub2RlVmFsdWUoKSk7CisgICAgICAgIC8vIFRl
eHQgbm9kZXMgaW5zaWRlIHNjcmlwdCBlbGVtZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIG9wdGlv
biB0ZXh0LgorICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxl
bWVudCh0b0VsZW1lbnQobm9kZSkpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gdGV4dC50b1N0cmlu
ZygpOworfQorCisjaWZuZGVmIE5ERUJVRworCitIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0
aW9uRWxlbWVudChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5oYXNU
YWdOYW1lKG9wdGlvblRhZykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudCo+KG5vZGUpOworfQorCitjb25zdCBIVE1MT3B0aW9uRWxlbWVudCogdG9IVE1MT3B0aW9u
RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5o
YXNUYWdOYW1lKG9wdGlvblRhZykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
T3B0aW9uRWxlbWVudCo+KG5vZGUpOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDk3ODcw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTIxLDIwICsyMSwxNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
KgogICovCisKICNpZm5kZWYgSFRNTE9wdGlvbkVsZW1lbnRfaAogI2RlZmluZSBIVE1MT3B0aW9u
RWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiT3B0aW9uRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50OwogCi1jbGFzcyBIVE1MT3B0aW9uRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgT3B0aW9uRWxlbWVudCB7Ci0gICAgZnJpZW5kIGNsYXNz
IEhUTUxTZWxlY3RFbGVtZW50OwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJNZW51TGlzdDsKLQor
Y2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGNyZWF0
ZShEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxPcHRpb25FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kiwg
SFRNTEZvcm1FbGVtZW50Kik7CkBAIC00NiwxNyArNDMsMTQgQEAgcHVibGljOgogCiAgICAgaW50
IGluZGV4KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0OworICAg
IFN0cmluZyB2YWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0ZWQoKTsKKyAgICBib29sIHNlbGVjdGVkKCk7CiAg
ICAgdm9pZCBzZXRTZWxlY3RlZChib29sKTsKIAogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBvd25l
clNlbGVjdEVsZW1lbnQoKSBjb25zdDsKIAotICAgIGJvb2wgZGVmYXVsdFNlbGVjdGVkKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXREZWZhdWx0U2VsZWN0ZWQoYm9vbCk7Ci0KICAgICBTdHJpbmcgbGFi
ZWwoKSBjb25zdDsKICAgICB2b2lkIHNldExhYmVsKGNvbnN0IFN0cmluZyYpOwogCkBAIC02NCw2
ICs1OCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsK
IAorICAgIFN0cmluZyB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCkgY29uc3Q7CisK
KyAgICB2b2lkIHNldFNlbGVjdGVkU3RhdGUoYm9vbCk7CisKIHByaXZhdGU6CiAgICAgSFRNTE9w
dGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVt
ZW50KiA9IDApOwogCkBAIC03OCwxMCArNzYsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCi0gICAgdmlydHVhbCB2b2lk
IHNldFNlbGVjdGVkU3RhdGUoYm9vbCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0SW5kZW50
ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvVHJlZShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wp
OwogCkBAIC04OSwxMCArODMsMzQgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgUmVuZGVyU3R5
bGUqIG5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdDsKIAotICAgIE9wdGlvbkVsZW1lbnRE
YXRhIG1fZGF0YTsKKyAgICBTdHJpbmcgY29sbGVjdE9wdGlvbklubmVyVGV4dCgpIGNvbnN0Owor
CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAgU3RyaW5nIG1fbGFiZWw7CisgICAgYm9vbCBtX2lz
U2VsZWN0ZWQ7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwogfTsKIAorSFRNTE9w
dGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoTm9kZSopOworY29uc3QgSFRNTE9wdGlv
bkVsZW1lbnQqIHRvSFRNTE9wdGlvbkVsZW1lbnQoY29uc3QgTm9kZSopOwordm9pZCB0b0hUTUxP
cHRpb25FbGVtZW50KGNvbnN0IEhUTUxPcHRpb25FbGVtZW50Kik7IC8vIFRoaXMgb3ZlcmxvYWQg
d2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KKworI2lmZGVmIE5E
RUJVRworCisvLyBUaGUgZGVidWcgdmVyc2lvbnMgb2YgdGhlc2UsIHdpdGggYXNzZXJ0aW9ucywg
YXJlIG5vdCBpbmxpbmVkLgorCitpbmxpbmUgSFRNTE9wdGlvbkVsZW1lbnQqIHRvSFRNTE9wdGlv
bkVsZW1lbnQoTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQqPihub2RlKTsKK30KKworaW5saW5lIGNvbnN0IEhUTUxPcHRpb25FbGVtZW50KiB0
b0hUTUxPcHRpb25FbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IEhUTUxPcHRpb25FbGVtZW50Kj4obm9kZSk7Cit9CisKKyNlbmRpZgorCiB9
IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5Nzg3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMiBAQCBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U2VsZWN0SXRlbXMgPSAxCiAKIHN0YXRpYyBjb25zdCBE
T01UaW1lU3RhbXAgdHlwZUFoZWFkVGltZW91dCA9IDEwMDA7CiAKKy8vIEZJWE1FOiBDaGFuZ2Ug
YWxsIHRoZSBjYWxsIHNpdGVzIHRvIHVzZSBoYXNUYWdOYW1lIGFuZCB0b0hUTUxPcHRpb25FbGVt
ZW50IGluc3RlYWQuCitzdGF0aWMgaW5saW5lIEhUTUxPcHRpb25FbGVtZW50KiB0b09wdGlvbkVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFt
ZShvcHRpb25UYWcpID8gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSA6IDA7Cit9CisKIEhU
TUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0p
CiAgICAgLCBtX2xhc3RDaGFyVGltZSgwKQpAQCAtNDQ1LDcgKzQ1MSw3IEBAIGludCBIVE1MU2Vs
ZWN0RWxlbWVudDo6bmV4dFZhbGlkSW5kZXgoaW4KICAgICBpbnQgc2l6ZSA9IGxpc3RJdGVtcy5z
aXplKCk7CiAgICAgZm9yIChsaXN0SW5kZXggKz0gZGlyZWN0aW9uOyBsaXN0SW5kZXggPj0gMCAm
JiBsaXN0SW5kZXggPCBzaXplOyBsaXN0SW5kZXggKz0gZGlyZWN0aW9uKSB7CiAgICAgICAgIC0t
c2tpcDsKLSAgICAgICAgaWYgKCFsaXN0SXRlbXNbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSAmJiBp
c09wdGlvbkVsZW1lbnQobGlzdEl0ZW1zW2xpc3RJbmRleF0pKSB7CisgICAgICAgIGlmICghbGlz
dEl0ZW1zW2xpc3RJbmRleF0tPmRpc2FibGVkKCkgJiYgbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhh
c1RhZ05hbWUob3B0aW9uVGFnKSkgewogICAgICAgICAgICAgbGFzdEdvb2RJbmRleCA9IGxpc3RJ
bmRleDsKICAgICAgICAgICAgIGlmIChza2lwIDw9IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC01MjYsNyArNTMyLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxl
Y3RpbwogICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQq
IG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOworICAgICAgICBIVE1M
T3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7
CiAgICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChvcHRpb25FbGVtZW50ICYm
IG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkpOwogICAgIH0KIH0KQEAgLTU0MSw3ICs1NDcsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3RpCiAKICAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVu
dCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhU
TUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ld
KTsKICAgICAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQob3B0aW9u
RWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CkBAIC01NjEs
NyArNTY3LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbAogCiAg
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9w
dGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOwor
ICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChpdGVtc1tpXSk7CiAgICAgICAgIGlmICghb3B0aW9uRWxlbWVudCB8fCBpdGVtc1tpXS0+ZGlz
YWJsZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC01OTMsNyArNTk5LDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveE9uQ2hhbmdlKAogICAgIC8vIFVwZGF0ZSBtX2xh
c3RPbkNoYW5nZVNlbGVjdGlvbiBhbmQgZmlyZSBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZl
bnQuCiAgICAgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CisgICAgICAgIEhUTUxPcHRp
b25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAg
ICAgICAgYm9vbCBzZWxlY3RlZCA9IG9wdGlvbkVsZW1lbnQgJiYgb3B0aW9uRWxlbWVudC0+c2Vs
ZWN0ZWQoKTsKICAgICAgICAgaWYgKHNlbGVjdGVkICE9IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9u
W2ldKQogICAgICAgICAgICAgZmlyZU9uQ2hhbmdlID0gdHJ1ZTsKQEAgLTY2Nyw3ICs2NzMsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoCiAKICAgICBtX3Nob3Vs
ZFJlY2FsY0xpc3RJdGVtcyA9IGZhbHNlOwogCi0gICAgT3B0aW9uRWxlbWVudCogZm91bmRTZWxl
Y3RlZCA9IDA7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGZvdW5kU2VsZWN0ZWQgPSAwOwogICAg
IGZvciAoTm9kZSogY3VycmVudE5vZGUgPSB0aGlzLT5maXJzdENoaWxkKCk7IGN1cnJlbnROb2Rl
OykgewogICAgICAgICBpZiAoIWN1cnJlbnROb2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhp
cyk7CkBAIC02ODcsNyArNjkzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlz
dEl0ZW1zKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoY3VycmVudCkpIHsKKyAgICAg
ICAgaWYgKEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50
KGN1cnJlbnQpKSB7CiAgICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoY3VycmVudCk7CiAK
ICAgICAgICAgICAgIGlmICh1cGRhdGVTZWxlY3RlZFN0YXRlcyAmJiAhbV9tdWx0aXBsZSkgewpA
QCAtNzIxLDcgKzcyNyw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgp
IGMKICAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgZmlyc3Qgb3B0aW9uIHNlbGVjdGVk
LgogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNb
aV0pKSB7CisgICAgICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRv
T3B0aW9uRWxlbWVudChpdGVtc1tpXSkpIHsKICAgICAgICAgICAgIGlmIChvcHRpb25FbGVtZW50
LT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAg
ICsraW5kZXg7CkBAIC03NDIsNyArNzQ4LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0
U2VsZWN0ZWRJbmRleAogICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRp
b25JbmRleCk7CiAKICAgICBFbGVtZW50KiBleGNsdWRlRWxlbWVudCA9IDA7Ci0gICAgaWYgKE9w
dGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSAobGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVs
ZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkgOiAwKSkgeworICAgIGlmIChIVE1MT3B0aW9uRWxlbWVu
dCogb3B0aW9uRWxlbWVudCA9IChsaXN0SW5kZXggPj0gMCA/IHRvT3B0aW9uRWxlbWVudChpdGVt
c1tsaXN0SW5kZXhdKSA6IDApKSB7CiAgICAgICAgIGV4Y2x1ZGVFbGVtZW50ID0gaXRlbXNbbGlz
dEluZGV4XTsKICAgICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8
IGRlc2VsZWN0KQogICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgobGlz
dEluZGV4KTsKQEAgLTc4OCw3ICs3OTQsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlv
blRvTGlzdEluZGV4CiAKICAgICBpbnQgb3B0aW9uSW5kZXgyID0gLTE7CiAgICAgZm9yIChpbnQg
bGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdFNpemU7ICsrbGlzdEluZGV4KSB7Ci0gICAg
ICAgIGlmIChpc09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkpIHsKKyAgICAgICAgaWYg
KGl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewogICAgICAgICAgICAg
KytvcHRpb25JbmRleDI7CiAgICAgICAgICAgICBpZiAob3B0aW9uSW5kZXgyID09IG9wdGlvbklu
ZGV4KQogICAgICAgICAgICAgICAgIHJldHVybiBsaXN0SW5kZXg7CkBAIC04MDEsMTMgKzgwNywx
MyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4CiBpbnQgSFRNTFNl
bGVjdEVsZW1lbnQ6Omxpc3RUb09wdGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAg
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Ci0gICAg
aWYgKGxpc3RJbmRleCA8IDAgfHwgbGlzdEluZGV4ID49IHN0YXRpY19jYXN0PGludD4oaXRlbXMu
c2l6ZSgpKSB8fCAhaXNPcHRpb25FbGVtZW50KGl0ZW1zW2xpc3RJbmRleF0pKQorICAgIGlmIChs
aXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUo
KSkgfHwgIWl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkKICAgICAgICAg
cmV0dXJuIC0xOwogCiAgICAgLy8gQWN0dWFsIGluZGV4IG9mIG9wdGlvbiBub3QgY291bnRpbmcg
T1BUR1JPVVAgZW50cmllcyB0aGF0IG1heSBiZSBpbiBsaXN0LgogICAgIGludCBvcHRpb25JbmRl
eCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0SW5kZXg7ICsraSkgewotICAgICAg
ICBpZiAoaXNPcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5o
YXNUYWdOYW1lKG9wdGlvblRhZykpCiAgICAgICAgICAgICArK29wdGlvbkluZGV4OwogICAgIH0K
IApAQCAtODQwLDcgKzg0Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRl
bXNXaXQKICAgICAgICAgaWYgKGl0ZW1zW2ldID09IGV4Y2x1ZGVFbGVtZW50KQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQg
PSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQorICAgICAgICBpZiAoSFRNTE9wdGlvbkVsZW1l
bnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKQogICAgICAgICAg
ICAgb3B0aW9uRWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogfQpAQCAt
ODUyLDcgKzg1OCw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFMK
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVt
c1tpXSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRp
b25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IG9wdGlvbkVsZW1l
bnQgJiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQo
c2VsZWN0ZWQgPyAnWCcgOiAnLicpOwogICAgIH0KQEAgLTg2OCw3ICs4NzQsNyBAQCB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNvbnRyCiAgICAgc2l6ZV90IGxlbmd0aCA9IGl0
ZW1zLnNpemUoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxl
bWVudChpdGVtc1tpXSkpCisgICAgICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxl
bWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSkpCiAgICAgICAgICAgICBvcHRpb25FbGVt
ZW50LT5zZXRTZWxlY3RlZFN0YXRlKHN0YXRlW2ldID09ICdYJyk7CiAgICAgfQogCkBAIC04OTUs
NyArOTAxLDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgogICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9w
dGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOwor
ICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChpdGVtc1tpXSk7CiAgICAgICAgIGlmIChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQt
PnNlbGVjdGVkKCkgJiYgIW9wdGlvbkVsZW1lbnQtPmRpc2FibGVkKCkpIHsKICAgICAgICAgICAg
IGxpc3QuYXBwZW5kRGF0YShuYW1lLCBvcHRpb25FbGVtZW50LT52YWx1ZSgpKTsKICAgICAgICAg
ICAgIHN1Y2Nlc3NmdWwgPSB0cnVlOwpAQCAtOTEwLDEyICs5MTYsMTIgQEAgYm9vbCBIVE1MU2Vs
ZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpy
ZXNldCgpCiB7Ci0gICAgT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwotICAgIE9wdGlv
bkVsZW1lbnQqIHNlbGVjdGVkT3B0aW9uID0gMDsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogZmly
c3RPcHRpb24gPSAwOworICAgIEhUTUxPcHRpb25FbGVtZW50KiBzZWxlY3RlZE9wdGlvbiA9IDA7
CiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tp
XSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25F
bGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgaWYgKCFvcHRpb25FbGVtZW50KQogICAgICAgICAg
ICAgY29udGludWU7CiAKQEAgLTExMTYsNyArMTEyMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnVwZGF0ZVNlbGVjdGVkU3QKICAgICBib29sIG11bHRpU2VsZWN0ID0gbV9tdWx0aXBsZSAm
JiBtdWx0aSAmJiAhc2hpZnQ7CiAKICAgICBFbGVtZW50KiBjbGlja2VkRWxlbWVudCA9IGxpc3RJ
dGVtcygpW2xpc3RJbmRleF07Ci0gICAgT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9PcHRpb25F
bGVtZW50KGNsaWNrZWRFbGVtZW50KTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0g
dG9PcHRpb25FbGVtZW50KGNsaWNrZWRFbGVtZW50KTsKICAgICBpZiAob3B0aW9uKSB7CiAgICAg
ICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hldGhlciBhbiBhY3RpdmUgc2VsZWN0aW9uIChsaWtlIGR1
cmluZyBkcmFnCiAgICAgICAgIC8vIHNlbGVjdGlvbiksIHNob3VsZCBzZWxlY3Qgb3IgZGVzZWxl
Y3QuCkBAIC0xMzEyLDcgKzEzMTgsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxl
Y3RlZExpc3RJCiB7CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlz
dEl0ZW1zKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IGl0ZW1zLnNpemUoKTsgaTspIHsKLSAgICAg
ICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRl
bXNbLS1pXSkpIHsKKyAgICAgICAgaWYgKEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50
ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zWy0taV0pKSB7CiAgICAgICAgICAgICBpZiAob3B0aW9u
RWxlbWVudC0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAg
fQpAQCAtMTM3OCw3ICsxMzg0LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFk
RmluZChLZQogICAgIC8vIHRvIHVzZSBzdGFydFdpdGggb25jZSB0aGF0IGlzIGZpeGVkLgogICAg
IFN0cmluZyBwcmVmaXhXaXRoQ2FzZUZvbGRlZChwcmVmaXguZm9sZENhc2UoKSk7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBpdGVtQ291bnQ7ICsraSwgaW5kZXggPSAoaW5kZXggKyAxKSAlIGl0
ZW1Db3VudCkgewotICAgICAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRp
b25FbGVtZW50KGl0ZW1zW2luZGV4XSk7CisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRp
b25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2luZGV4XSk7CiAgICAgICAgIGlmICgh
b3B0aW9uRWxlbWVudCB8fCBpdGVtc1tpbmRleF0tPmRpc2FibGVkKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIApAQCAtMTQxNCw3ICsxNDIwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
YWNjZXNzS2V5U2V0U2VsZQogICAgIC8vIElmIHRoaXMgaW5kZXggaXMgYWxyZWFkeSBzZWxlY3Rl
ZCwgdW5zZWxlY3QuIG90aGVyd2lzZSB1cGRhdGUgdGhlIHNlbGVjdGVkIGluZGV4LgogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBs
aXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChpbmRleCk7Ci0gICAgaWYgKE9wdGlvbkVsZW1l
bnQqIG9wdGlvbkVsZW1lbnQgPSAobGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRl
bXNbbGlzdEluZGV4XSkgOiAwKSkgeworICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9u
RWxlbWVudCA9IChsaXN0SW5kZXggPj0gMCA/IHRvT3B0aW9uRWxlbWVudChpdGVtc1tsaXN0SW5k
ZXhdKSA6IDApKSB7CiAgICAgICAgIGlmIChvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpKQogICAg
ICAgICAgICAgb3B0aW9uRWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgICAg
IGVsc2UKQEAgLTE0MzUsNyArMTQ0MSw3IEBAIHVuc2lnbmVkIEhUTUxTZWxlY3RFbGVtZW50Ojps
ZW5ndGgoKSBjb24KIAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxp
c3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAoaXNPcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkKKyAgICAgICAgaWYg
KGl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCiAgICAgICAgICAgICArK29wdGlvbnM7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gOTc4NzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSAKIAogUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikp
OwogCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5Nzg3MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTEgKzQzLDExIEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9w
dGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgpAQCAtMTExLDExICsxMTEsMTEgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVG
cm9tRWxlbWVudCgpCiAgICAgICAgIAogICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFbGVtZW50KiBl
bGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQg
PSBsaXN0SXRlbXNbaV07CiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgICAgIEZv
bnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAg
ICAgICAgICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBM
YWJlbCgpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkK
KyAgICAgICAgICAgICAgICB0ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4
dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsKICAgICAgICAgICAgICAgICB0ZXh0ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9wdEdyb3VwRWxlbWVudCo+KGVsZW1lbnQpLT5ncm91cExh
YmVsVGV4dCgpOwogICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQu
Zm9udERlc2NyaXB0aW9uKCk7CkBAIC0zMjcsOCArMzI3LDggQEAgdm9pZCBSZW5kZXJMaXN0Qm94
OjphZGRGb2N1c1JpbmdSZWN0cyhWZQogICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsKICAgICBj
b25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMo
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBPcHRpb25F
bGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSk7Ci0g
ICAgICAgIGlmIChvcHRpb25FbGVtZW50ICYmICFvcHRpb25FbGVtZW50LT5kaXNhYmxlZCgpKSB7
CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmICF0b0hUTUxPcHRpb25FbGVtZW50
KGVsZW1lbnQpLT5kaXNhYmxlZCgpKSB7CiAgICAgICAgICAgICByZWN0cy5hcHBlbmQoaXRlbUJv
dW5kaW5nQm94UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTM3MSw4ICszNzEsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50
SXRlbUZvcmVncm91bmQoCiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVy
Z2VQcmV2ZW50ZXI7CiAKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1z
ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRlbXMoKTsKLSAgICBFbGVtZW50
KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KTsKKyAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgUmVuZGVyU3R5bGUqIGl0ZW1T
dHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgaWYgKCFpdGVtU3R5bGUpCkBAIC0z
ODIsMTQgKzM4MSwxNSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQo
CiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpdGVtVGV4dDsKLSAgICBpZiAob3B0aW9u
RWxlbWVudCkKLSAgICAgICAgaXRlbVRleHQgPSBvcHRpb25FbGVtZW50LT50ZXh0SW5kZW50ZWRU
b1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgYm9vbCBpc09wdGlvbkVsZW1lbnQgPSBlbGVtZW50
LT5oYXNUYWdOYW1lKG9wdGlvblRhZyk7CisgICAgaWYgKGlzT3B0aW9uRWxlbWVudCkKKyAgICAg
ICAgaXRlbVRleHQgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0SW5kZW50ZWRU
b1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShv
cHRncm91cFRhZykpCiAgICAgICAgIGl0ZW1UZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9w
dEdyb3VwRWxlbWVudCo+KGVsZW1lbnQpLT5ncm91cExhYmVsVGV4dCgpOwogICAgIGFwcGx5VGV4
dFRyYW5zZm9ybShzdHlsZSgpLCBpdGVtVGV4dCwgJyAnKTsKIAogICAgIENvbG9yIHRleHRDb2xv
ciA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgOiBzdHlsZSgpLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKG9wdGlvbkVsZW1lbnQgJiYg
b3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgeworICAgIGlmIChpc09wdGlvbkVsZW1lbnQgJiYg
dG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSkgewogICAgICAgICBpZiAo
ZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50KCkt
PmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpKQogICAgICAgICAgICAgdGV4dENvbG9yID0gdGhlbWUo
KS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwogICAgICAgICAvLyBI
b25vciB0aGUgZm9yZWdyb3VuZCBjb2xvciBmb3IgZGlzYWJsZWQgaXRlbXMKQEAgLTQyMiwxMSAr
NDIyLDEwIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKIHZvaWQg
UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgbGlzdEluZGV4KQogewogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b0hUTUxTZWxlY3RFbGVtZW50
KG5vZGUoKSktPmxpc3RJdGVtcygpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNb
bGlzdEluZGV4XTsKLSAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25F
bGVtZW50KGVsZW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xp
c3RJbmRleF07CiAKICAgICBDb2xvciBiYWNrQ29sb3I7Ci0gICAgaWYgKG9wdGlvbkVsZW1lbnQg
JiYgb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgeworICAgIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQo
KSkgewogICAgICAgICBpZiAoZnJhbWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2
ZSgpICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpKQogICAgICAgICAgICAg
YmFja0NvbG9yID0gdGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDk3ODcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIk9wdGlvbkVsZW1lbnQuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiUmVuZGVy
QlIuaCIKQEAgLTE1MSwxMiArMTUxLDExIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9w
dGlvbnNXaWR0aCgKICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVBy
ZXZlbnRlcjsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIE9wdGlvbkVsZW1lbnQq
IG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgIGlmICgh
b3B0aW9uRWxlbWVudCkKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNb
aV07CisgICAgICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSBvcHRpb25FbGVtZW50LT50
ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0g
dG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBM
YWJlbCgpOwogICAgICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgdGV4dCwgJyAnKTsK
ICAgICAgICAgaWYgKHRoZW1lKCktPnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkpIHsK
ICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUgb3B0aW9uJ3MgdGV4dCBpbmRlbnQuICBXZSBjYW4n
dCBjYWxjdWxhdGUgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIG5vdy4KQEAgLTIwMiw4ICsyMDEsOCBA
QCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpCiAgICAgU3RyaW5nIHRl
eHQgPSAiIjsKICAgICBpZiAoaSA+PSAwICYmIGkgPCBzaXplKSB7CiAgICAgICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07Ci0gICAgICAgIGlmIChPcHRpb25FbGVtZW50KiBvcHRp
b25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICB0ZXh0
ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOworICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CisgICAgICAgICAgICB0
ZXh0ID0gdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+dGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgbV9vcHRpb25TdHlsZSA9IGVsZW1lbnQtPnJlbmRl
clN0eWxlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzcsOCArMzc2LDggQEAgU3RyaW5nIFJl
bmRlck1lbnVMaXN0OjppdGVtVGV4dCh1bnNpZ25lZAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBs
aXN0SXRlbXNbbGlzdEluZGV4XTsKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRncm91
cFRhZykpCiAgICAgICAgIGl0ZW1TdHJpbmcgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT3B0R3Jv
dXBFbGVtZW50Kj4oZWxlbWVudCktPmdyb3VwTGFiZWxUZXh0KCk7Ci0gICAgZWxzZSBpZiAoT3B0
aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkKLSAg
ICAgICAgaXRlbVN0cmluZyA9IG9wdGlvbkVsZW1lbnQtPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdy
b3VwTGFiZWwoKTsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykp
CisgICAgICAgIGl0ZW1TdHJpbmcgPSB0b0hUTUxPcHRpb25FbGVtZW50KGVsZW1lbnQpLT50ZXh0
SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAKICAgICBhcHBseVRleHRUcmFuc2Zvcm0o
c3R5bGUoKSwgaXRlbVN0cmluZywgJyAnKTsKICAgICByZXR1cm4gaXRlbVN0cmluZzsKQEAgLTU1
Nyw5ICs1NTYsOCBAQCBib29sIFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3RlZCh1bnNpCiAg
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNlbGVjdEVs
ZW1lbnQobm9kZSgpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSBsaXN0SXRl
bXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKE9wdGlvbkVsZW1lbnQq
IG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQobGlzdEl0ZW1zW2xpc3RJbmRleF0pKQot
ICAgICAgICByZXR1cm4gb3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKKyAg
ICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmIHRvSFRNTE9wdGlvbkVs
ZW1lbnQoZWxlbWVudCktPnNlbGVjdGVkKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNl
dFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gOTc4NzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTEwLTE5ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgT3B0aW9uRWxlbWVudCAo
Zmlyc3QgaGFsZikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcwMjc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXBkYXRlIGhhbmQtd3JpdHRlbiBiaW5kaW5nIGZvciBvcHRpb24gZWxlbWVudCBzbyBpdCBk
b2VzIG5vdCBkZXBlbmQgb24gb3RoZXJ3aXNlLXVubmVlZGVkIGZ1bmN0aW9ucy4KKworICAgICAg
ICAqIHNyYy9XZWJPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViT3B0aW9u
RWxlbWVudDo6ZGVmYXVsdFNlbGVjdGVkKTogQ2FsbCBoYXNBdHRyaWJ1dGUuCisgICAgICAgIChX
ZWJLaXQ6OldlYk9wdGlvbkVsZW1lbnQ6OnNldERlZmF1bHRTZWxlY3RlZCk6IENhbGwgc2V0QXR0
cmlidXRlLgorCisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAg
ICAgIChIVE1MTmFtZXM6OklzU2VsZWN0SW5EZWZhdWx0U3RhdGUpOiBDYWxsIGhhc0F0dHJpYnV0
ZS4KKwogMjAxMS0xMC0xOSAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1ha2UgZXh0ZW5zaW9uIHRlc3RzIHBhc3Mgb24gY2hy
b21pdW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk9wdGlvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk9wdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA5Nzg3MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYk9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjMs
MTIgKzY0LDEyIEBAIFdlYlN0cmluZyBXZWJPcHRpb25FbGVtZW50Ojp0ZXh0KCkgY29uc3QKIAog
Ym9vbCBXZWJPcHRpb25FbGVtZW50OjpkZWZhdWx0U2VsZWN0ZWQoKSBjb25zdAogewotICAgIHJl
dHVybiBjb25zdFVud3JhcDxIVE1MT3B0aW9uRWxlbWVudD4oKS0+ZGVmYXVsdFNlbGVjdGVkKCk7
CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPEhUTUxPcHRpb25FbGVtZW50PigpLT5oYXNBdHRyaWJ1
dGUoc2VsZWN0ZWRBdHRyKTsKIH0KIAogdm9pZCBXZWJPcHRpb25FbGVtZW50OjpzZXREZWZhdWx0
U2VsZWN0ZWQoYm9vbCBuZXdTZWxlY3RlZCkKIHsKLSAgICByZXR1cm4gdW53cmFwPEhUTUxPcHRp
b25FbGVtZW50PigpLT5zZXREZWZhdWx0U2VsZWN0ZWQobmV3U2VsZWN0ZWQpOworICAgIHJldHVy
biB1bndyYXA8SFRNTE9wdGlvbkVsZW1lbnQ+KCktPnNldEF0dHJpYnV0ZShzZWxlY3RlZEF0dHIs
IG5ld1NlbGVjdGVkID8gIiIgOiAwKTsKIH0KIAogV2ViU3RyaW5nIFdlYk9wdGlvbkVsZW1lbnQ6
OmxhYmVsKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJj
aGFibGVGb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkocmV2aXNpb24gOTc4NzApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgYm9vbCBJc1NlbGVjdEluRGVmYXVsdFN0YXRlKEhUTUxT
ZWxlY3RFbAogICAgICAgICAgICAgaWYgKCEoKmkpLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpv
cHRpb25UYWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgSFRNTE9w
dGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dCo+KCppKTsKLSAgICAgICAgICAgIGlmIChvcHRpb25FbGVtZW50LT5zZWxlY3RlZCgpICE9IG9w
dGlvbkVsZW1lbnQtPmRlZmF1bHRTZWxlY3RlZCgpKQorICAgICAgICAgICAgaWYgKG9wdGlvbkVs
ZW1lbnQtPnNlbGVjdGVkKCkgIT0gb3B0aW9uRWxlbWVudC0+aGFzQXR0cmlidXRlKHNlbGVjdGVk
QXR0cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGJvb2wgSXNTZWxlY3RJbkRlZmF1bHRT
dGF0ZShIVE1MU2VsZWN0RWwKICAgICAgICAgaWYgKCEoKmkpLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpvcHRpb25UYWcpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEhUTUxPcHRp
b25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQq
PigqaSk7Ci0gICAgICAgIGlmIChvcHRpb25FbGVtZW50LT5kZWZhdWx0U2VsZWN0ZWQoKSkgewor
ICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+aGFzQXR0cmlidXRlKHNlbGVjdGVkQXR0cikpIHsK
ICAgICAgICAgICAgIC8vIFRoZSBwYWdlIHNwZWNpZmllZCB0aGUgb3B0aW9uIHRvIHNlbGVjdC4K
ICAgICAgICAgICAgIGluaXRpYWxTZWxlY3RlZCA9IG9wdGlvbkVsZW1lbnQ7CiAgICAgICAgICAg
ICBicmVhazsK
</data>

          </attachment>
      

    </bug>

</bugzilla>