<?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>99248</bug_id>
          
          <creation_ts>2012-10-13 08:05:53 -0700</creation_ts>
          <short_desc>[BlackBerry] Adapt to Platform API changes in string handling</short_desc>
          <delta_ts>2014-01-13 21:43:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="George Staikos">staikos</reporter>
          <assigned_to name="George Staikos">staikos</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mifenton</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>741471</commentid>
    <comment_count>0</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2012-10-13 08:05:53 -0700</bug_when>
    <thetext>String handling has changed to use BlackBerry::Platform::String on BlackBerry.  Update WebKit accordingly, removing char* and std::string usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741472</commentid>
    <comment_count>1</comment_count>
      <attachid>168553</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2012-10-13 08:11:10 -0700</bug_when>
    <thetext>Created attachment 168553
Large patch to fix all API usage and support the new string class

This needs to be done in one shot really, since it&apos;s a complete API change.  Basically makes it compile and function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741473</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-13 08:14:15 -0700</bug_when>
    <thetext>Attachment 168553 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/As...&quot; exit_code: 1
Source/WebKit/blackberry/WebCoreSupport/FrameLoaderClientBlackBerry.cpp:200:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/blackberry/Api/WebPage_p.h:114:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/blackberry/Api/WebPage.cpp:756:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp:151:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit/blackberry/Api/WebPage.h:100:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/blackberry/Api/WebPageClient.h:202:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/WebKit/blackberry/Api/WebPageClient.h:213:  Omit int when using unsigned  [runtime/unsigned] [1]
Total errors found: 7 in 68 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741474</commentid>
    <comment_count>3</comment_count>
      <attachid>168554</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2012-10-13 08:27:02 -0700</bug_when>
    <thetext>Created attachment 168554
Large patch to fix all API usage and support the new string class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741525</commentid>
    <comment_count>4</comment_count>
      <attachid>168554</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-13 15:21:05 -0700</bug_when>
    <thetext>Comment on attachment 168554
Large patch to fix all API usage and support the new string class

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

&gt; Source/WTF/wtf/text/StringImpl.h:49
&gt; +#if PLATFORM(BLACKBERRY)
&gt; +#include &lt;BlackBerryPlatformString.h&gt;
&gt; +#endif
&gt; +

Why? You do not make any related change it that header.

&gt; Source/WebCore/html/track/TextTrack.cpp:103
&gt; -    , m_mode(disabledKeyword())
&gt; +    , m_mode(disabledKeyword().string())

This is unrelated to the change.

It looks like the proper fix is to make m_mode an AtomicString, you are working against that.

Implicit conversion is a perfectly valid pattern in that case, why do you switch to the method string()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741567</commentid>
    <comment_count>5</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2012-10-14 06:53:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 168554 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168554&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:49
&gt; &gt; +#if PLATFORM(BLACKBERRY)
&gt; &gt; +#include &lt;BlackBerryPlatformString.h&gt;
&gt; &gt; +#endif
&gt; &gt; +
&gt; 
&gt; Why? You do not make any related change it that header.

  The conversion operator requires it.  Won&apos;t compile otherwise.

&gt; &gt; Source/WebCore/html/track/TextTrack.cpp:103
&gt; &gt; -    , m_mode(disabledKeyword())
&gt; &gt; +    , m_mode(disabledKeyword().string())
&gt; 
&gt; This is unrelated to the change.
&gt; 
&gt; It looks like the proper fix is to make m_mode an AtomicString, you are working against that.
&gt; 
&gt; Implicit conversion is a perfectly valid pattern in that case, why do you switch to the method string()?

   Yes, sort of unrelated, but fact is we can&apos;t compile with it once we make the change, so sort of related too.  AtomicString sounds like a good choice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741569</commentid>
    <comment_count>6</comment_count>
      <attachid>168583</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2012-10-14 07:20:30 -0700</bug_when>
    <thetext>Created attachment 168583
Follow-on patch to change m_mode to AtomicString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741614</commentid>
    <comment_count>7</comment_count>
      <attachid>168594</attachid>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2012-10-14 14:53:25 -0700</bug_when>
    <thetext>Created attachment 168594
Follow-on patch to fix a function signature that was missed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742157</commentid>
    <comment_count>8</comment_count>
      <attachid>168554</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-15 10:31:42 -0700</bug_when>
    <thetext>Comment on attachment 168554
Large patch to fix all API usage and support the new string class

Clearing flags on attachment: 168554

Committed r131316: &lt;http://trac.webkit.org/changeset/131316&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742203</commentid>
    <comment_count>9</comment_count>
      <attachid>168594</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-15 11:14:28 -0700</bug_when>
    <thetext>Comment on attachment 168594
Follow-on patch to fix a function signature that was missed

Clearing flags on attachment: 168594

Committed r131324: &lt;http://trac.webkit.org/changeset/131324&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744610</commentid>
    <comment_count>10</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2012-10-17 14:19:33 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 168554 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168554&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:49
&gt; &gt; +#if PLATFORM(BLACKBERRY)
&gt; &gt; +#include &lt;BlackBerryPlatformString.h&gt;
&gt; &gt; +#endif
&gt; &gt; +
&gt; 
&gt; Why? You do not make any related change it that header.
&gt; 
&gt; &gt; Source/WebCore/html/track/TextTrack.cpp:103
&gt; &gt; -    , m_mode(disabledKeyword())
&gt; &gt; +    , m_mode(disabledKeyword().string())
&gt; 
&gt; This is unrelated to the change.
&gt; 
&gt; It looks like the proper fix is to make m_mode an AtomicString, you are working against that.
&gt; 
&gt; Implicit conversion is a perfectly valid pattern in that case, why do you switch to the method string()?

The patch is pending your review.....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744639</commentid>
    <comment_count>11</comment_count>
      <attachid>168583</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-17 14:47:14 -0700</bug_when>
    <thetext>Comment on attachment 168583
Follow-on patch to change m_mode to AtomicString

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

You should change setMode() and mode() accordingly.

&gt; Source/WebCore/ChangeLog:4
&gt; +        Conert m_mode to be an AtomicString.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=99248

Conert -&gt; Convert.
This should have its own bug in bugzilla.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168553</attachid>
            <date>2012-10-13 08:11:10 -0700</date>
            <delta_ts>2012-10-13 08:27:02 -0700</delta_ts>
            <desc>Large patch to fix all API usage and support the new string class</desc>
            <filename>99248.patch</filename>
            <type>text/plain</type>
            <size>192146</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzEyNTcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTEwLTEzICBHZW9yZ2UgU3RhaWtvcyAgPHN0
YWlrb3NAd2Via2l0Lm9yZz4KKworICAgICAgICBbQmxhY2tCZXJyeV0gQWRhcHQgdG8gUGxhdGZv
cm0gQVBJIGNoYW5nZXMgaW4gc3RyaW5nIGhhbmRsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTI0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnZlcnQgdXNhZ2Ugb2YgV2ViU3RyaW5nLCBjaGFy
KiBhbmQgc3RkOjpzdHJpbmcgdG8gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZy4KKworICAg
ICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDogVXNlIHByb3BlciBsb2cgZnVuY3Rpb24uCisgICAg
ICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmg6IEFkZCBCbGFja0JlcnJ5IHN1cHBvcnQKKyAg
ICAgICAgKEF0b21pY1N0cmluZyk6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6QXRvbWlj
U3RyaW5nKTogQWRkIEJsYWNrQmVycnkgU3VwcG9ydAorICAgICAgICAoV1RGOjpBdG9taWNTdHJp
bmc6Om9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcpOgorICAgICAgICAqIHd0
Zi90ZXh0L1N0cmluZ0ltcGwuaDogQ29udmVyc2lvbiBzdXBwb3J0LgorICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOiBDb252ZXJzaW9uIHN1cHBvcnQuCisgICAgICAgIChQbGF0Zm9ybSk6
CisgICAgICAgIChTdHJpbmcpOgorCiAyMDEyLTEwLTEyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJv
ZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChTdHJpbmdCdWls
ZGVyJikgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgYml0IHNpemUgb2YgdGhlIGFyZ3Vt
ZW50IHN0cmluZwpJbmRleDogU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysr
IFNvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyAr
MTE1LDcgQEAgc3RhdGljIHZvaWQgdnByaW50Zl9zdGRlcnJfY29tbW9uKGNvbnN0IAogICAgIC8v
IEZhbGwgdGhyb3VnaCB0byB3cml0ZSB0byBzdGRlcnIgaW4gdGhlIHNhbWUgbWFubmVyIGFzIG90
aGVyIHBsYXRmb3Jtcy4KIAogI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6bG9nU3RyZWFtVihmb3JtYXQsIGFyZ3MpOworICAgIEJCTE9HVihCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwgZm9ybWF0LCBhcmdzKTsKICNlbGlm
IE9TKEFORFJPSUQpCiAgICAgX19hbmRyb2lkX2xvZ192cHJpbnQoQU5EUk9JRF9MT0dfV0FSTiwg
IldlYktpdCIsIGZvcm1hdCwgYXJncyk7CiAjZWxpZiBIQVZFKElTREVCVUdHRVJQUkVTRU5UKQpA
QCAtMjE1LDI2ICsyMTUsOCBAQCBzdGF0aWMgdm9pZCBwcmludENhbGxTaXRlKGNvbnN0IGNoYXIq
IGZpCiAjZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi1zdHJ1Y3QgV1RGTG9n
TG9ja2VyIHsKLSAgICBXVEZMb2dMb2NrZXIoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1lc3NhZ2VM
b2dMZXZlbCBsb2dMZXZlbCkKLSAgICB7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjps
b2NrTG9nZ2luZyhsb2dMZXZlbCk7Ci0gICAgfQotCi0gICAgfldURkxvZ0xvY2tlcigpCi0gICAg
ewotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6dW5sb2NrTG9nZ2luZygpOwotICAgIH0K
LX07Ci0jZW5kaWYKLQogdm9pZCBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0IGNoYXIq
IGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogYXNzZXJ0
aW9uKQogewotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgV1RGTG9nTG9ja2VyIGxvY2tl
cihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCk7Ci0jZW5kaWYKLQogICAg
IGlmIChhc3NlcnRpb24pCiAgICAgICAgIHByaW50Zl9zdGRlcnJfY29tbW9uKCJBU1NFUlRJT04g
RkFJTEVEOiAlc1xuIiwgYXNzZXJ0aW9uKTsKICAgICBlbHNlCkBAIC0yNDQsMTAgKzIyNiw2IEBA
IHZvaWQgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShjb25zdCBjaGEKIAogdm9pZCBXVEZSZXBv
cnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24sIGNvbnN0IGNoYXIq
IGZvcm1hdCwgLi4uKQogewotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgV1RGTG9nTG9j
a2VyIGxvY2tlcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCk7Ci0jZW5k
aWYKLQogICAgIHZhX2xpc3QgYXJnczsKICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwogICAg
IHZwcmludGZfc3RkZXJyX3dpdGhfcHJlZml4KCJBU1NFUlRJT04gRkFJTEVEOiAiLCBmb3JtYXQs
IGFyZ3MpOwpAQCAtMjU4LDEwICsyMzYsNiBAQCB2b2lkIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1
cmVXaXRoTWVzc2FnCiAKIHZvaWQgV1RGUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlKGNv
bnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hh
ciogYXJnTmFtZSwgY29uc3QgY2hhciogYXNzZXJ0aW9uKQogewotI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCi0gICAgV1RGTG9nTG9ja2VyIGxvY2tlcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9n
TGV2ZWxDcml0aWNhbCk7Ci0jZW5kaWYKLQogICAgIHByaW50Zl9zdGRlcnJfY29tbW9uKCJBUkdV
TUVOVCBCQUQ6ICVzLCAlc1xuIiwgYXJnTmFtZSwgYXNzZXJ0aW9uKTsKICAgICBwcmludENhbGxT
aXRlKGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKIH0KQEAgLTM5OSwxMCArMzczLDYgQEAgdm9pZCBX
VEZJbnN0YWxsUmVwb3J0QmFja3RyYWNlT25DcmFzaEhvbwogCiB2b2lkIFdURlJlcG9ydEZhdGFs
RXJyb3IoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBj
b25zdCBjaGFyKiBmb3JtYXQsIC4uLikKIHsKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAg
IFdURkxvZ0xvY2tlciBsb2NrZXIoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsQ3JpdGlj
YWwpOwotI2VuZGlmCi0KICAgICB2YV9saXN0IGFyZ3M7CiAgICAgdmFfc3RhcnQoYXJncywgZm9y
bWF0KTsKICAgICB2cHJpbnRmX3N0ZGVycl93aXRoX3ByZWZpeCgiRkFUQUwgRVJST1I6ICIsIGZv
cm1hdCwgYXJncyk7CkBAIC00MTMsMTAgKzM4Myw2IEBAIHZvaWQgV1RGUmVwb3J0RmF0YWxFcnJv
cihjb25zdCBjaGFyKiBmaWwKIAogdm9pZCBXVEZSZXBvcnRFcnJvcihjb25zdCBjaGFyKiBmaWxl
LCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4u
KQogewotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgV1RGTG9nTG9ja2VyIGxvY2tlcihC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuKTsKLSNlbmRpZgotCiAgICAgdmFfbGlz
dCBhcmdzOwogICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CiAgICAgdnByaW50Zl9zdGRlcnJf
d2l0aF9wcmVmaXgoIkVSUk9SOiAiLCBmb3JtYXQsIGFyZ3MpOwpAQCAtNDMwLDEwICszOTYsNiBA
QCB2b2lkIFdURkxvZyhXVEZMb2dDaGFubmVsKiBjaGFubmVsLCBjb25zCiAgICAgaWYgKGNoYW5u
ZWwtPnN0YXRlICE9IFdURkxvZ0NoYW5uZWxPbikKICAgICAgICAgcmV0dXJuOwogCi0jaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBXVEZMb2dMb2NrZXIgbG9ja2VyKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpMb2dMZXZlbEluZm8pOwotI2VuZGlmCi0KICAgICB2YV9saXN0IGFyZ3M7CiAgICAg
dmFfc3RhcnQoYXJncywgZm9ybWF0KTsKICAgICB2cHJpbnRmX3N0ZGVycl93aXRoX3RyYWlsaW5n
X25ld2xpbmUoZm9ybWF0LCBhcmdzKTsKQEAgLTQ0NSwxMCArNDA3LDYgQEAgdm9pZCBXVEZMb2dW
ZXJib3NlKGNvbnN0IGNoYXIqIGZpbGUsIGludAogICAgIGlmIChjaGFubmVsLT5zdGF0ZSAhPSBX
VEZMb2dDaGFubmVsT24pCiAgICAgICAgIHJldHVybjsKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVS
UlkpCi0gICAgV1RGTG9nTG9ja2VyIGxvY2tlcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2
ZWxJbmZvKTsKLSNlbmRpZgotCiAgICAgdmFfbGlzdCBhcmdzOwogICAgIHZhX3N0YXJ0KGFyZ3Ms
IGZvcm1hdCk7CiAgICAgdnByaW50Zl9zdGRlcnJfd2l0aF90cmFpbGluZ19uZXdsaW5lKGZvcm1h
dCwgYXJncyk7CkBAIC00NTksMTAgKzQxNyw2IEBAIHZvaWQgV1RGTG9nVmVyYm9zZShjb25zdCBj
aGFyKiBmaWxlLCBpbnQKIAogdm9pZCBXVEZMb2dBbHdheXMoY29uc3QgY2hhciogZm9ybWF0LCAu
Li4pCiB7Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBXVEZMb2dMb2NrZXIgbG9ja2Vy
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8pOwotI2VuZGlmCi0KICAgICB2YV9s
aXN0IGFyZ3M7CiAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKICAgICB2cHJpbnRmX3N0ZGVy
cl93aXRoX3RyYWlsaW5nX25ld2xpbmUoZm9ybWF0LCBhcmdzKTsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbWljU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4
dC9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSwxMCBAQCBwdWJs
aWM6CiAgICAgQXRvbWljU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKFN0
cmluZyhzKS5pbXBsKCkpKSB7IH0KICAgICBvcGVyYXRvciBRU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmc7IH0KICNlbmRpZgorI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgQXRv
bWljU3RyaW5nKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHMpIDogbV9zdHJp
bmcoYWRkKFN0cmluZyhzKS5pbXBsKCkpKSB7IH0KKyAgICBvcGVyYXRvciBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KKyNlbmRpZgogCiAg
ICAgLy8gQXRvbWljU3RyaW5nOjpmcm9tVVRGOCB3aWxsIHJldHVybiBhIG51bGwgc3RyaW5nIGlm
CiAgICAgLy8gdGhlIGlucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMu
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDEwIEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZTdHJpbmcgKiBDRlN0cmkKIEBjbGFzcyBO
U1N0cmluZzsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KKyNlbmRpZgorCiAvLyBGSVhNRTogVGhpcyBpcyBh
IHRlbXBvcmFyeSBsYXllcmluZyB2aW9sYXRpb24gd2hpbGUgd2UgbW92ZSBzdHJpbmcgY29kZSB0
byBXVEYuCiAvLyBMYW5kaW5nIHRoZSBmaWxlIG1vdmVzIGluIG9uZSBwYXRjaCwgd2lsbCBmb2xs
b3cgb24gd2l0aCBwYXRjaGVzIHRvIGNoYW5nZSB0aGUgbmFtZXNwYWNlcy4KIG5hbWVzcGFjZSBK
U0MgewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0
OSw4IEBAIGNsYXNzIHd4U3RyaW5nOwogCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKIG5hbWVz
cGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIGNsYXNzIFdlYlN0cmlu
ZzsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBTdHJpbmc7CiB9CiB9CiAjZW5kaWYKQEAg
LTQxMCw4ICs0MTAsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVS
UlkpCi0gICAgU3RyaW5nKGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nJik7Ci0g
ICAgb3BlcmF0b3IgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcoKSBjb25zdDsKKyAgICBT
dHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOworICAgIG9wZXJhdG9y
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcoKSBjb25zdDsKICNlbmRpZgogCiAgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgbWFrZThCaXRGcm9tMTZCaXRTb3VyY2Uo
Y29uc3QgVUNoYXIqLCBzaXplX3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMjU3KQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTItMTAtMTMgIEdlb3JnZSBTdGFpa29zICA8c3RhaWtvc0B3ZWJraXQub3JnPgorCisg
ICAgICAgIFtCbGFja0JlcnJ5XSBBZGFwdCB0byBQbGF0Zm9ybSBBUEkgY2hhbmdlcyBpbiBzdHJp
bmcgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5MjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ29udmVydCB1c2FnZSBvZiBXZWJTdHJpbmcsIGNoYXIqIGFuZCBzdGQ6OnN0cmluZyB0byBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nLgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0
VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpUZXh0VHJhY2spOiBGaXgg
dGhlIGJ1aWxkIGZvciBCbGFja0JlcnJ5LgorICAgICAgICAqIHBhZ2UvYmxhY2tiZXJyeS9TZXR0
aW5nc0JsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2JsYWNrYmVycnkvTG9jYWxpemVkU3RyaW5nc0JsYWNrQmVycnkuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvTUlNRVR5cGVSZWdpc3RyeUJsYWNrQmVycnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0
ZW5zaW9uRm9yTUlNRVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvUGFzdGVi
b2FyZEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6cGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OmRvY3VtZW50RnJhZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvUmVh
ZE9ubHlMYXRpbjFTdHJpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldENlcnRpZmljYXRlUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Z2VuZXJhdGVQcm90ZWN0aW9uU3BhY2VGcm9tTU1SQXV0aENoYWxsZW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uQXV0aGVudGljYXRpb25OZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvbkF1dGhlbnRpY2F0aW9uQWNjZXB0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb29rdXBNZWRpYVN0
cmVhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXll
clByaXZhdGVCbGFja0JlcnJ5Lmg6CisgICAgICAgIChNZWRpYVBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjplbmdpbmVEZXNjcmlwdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0ROU0JsYWNrQmVycnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtK
b2I6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0pvYjo6bm90aWZ5U3Rh
dHVzUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0pvYjo6bm90aWZ5SGVhZGVy
c1JlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtKb2I6OmhhbmRsZU5vdGlmeUNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtKb2I6OnNlbmRSZXF1ZXN0V2l0aENyZWRl
bnRpYWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pv
Yi5oOgorICAgICAgICAoTmV0d29ya0pvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L05ldHdvcmtNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtN
YW5hZ2VyOjpzdGFydEpvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlQmxhY2tCZXJyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1N0cmluZ0JsYWNrQmVycnkuY3Bw
OgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZzo6
b3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyk6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9ibGFja2JlcnJ5L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VCbGFja0JlcnJ5
LmNwcDoKKwogMjAxMi0xMC0xMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJlbW92ZSBkZWFkIGNvZGUgaW4gTm9kZS5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEw
MCw3IEBAIFRleHRUcmFjazo6VGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICAsIG1f
bWVkaWFFbGVtZW50KDApCiAgICAgLCBtX2xhYmVsKGxhYmVsKQogICAgICwgbV9sYW5ndWFnZShs
YW5ndWFnZSkKLSAgICAsIG1fbW9kZShkaXNhYmxlZEtleXdvcmQoKSkKKyAgICAsIG1fbW9kZShk
aXNhYmxlZEtleXdvcmQoKS5zdHJpbmcoKSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAs
IG1fdHJhY2tUeXBlKHR5cGUpCiAgICAgLCBtX3JlYWRpbmVzc1N0YXRlKE5vdExvYWRlZCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9TZXR0aW5nc0JsYWNrQmVycnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9TZXR0aW5nc0Js
YWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Js
YWNrYmVycnkvU2V0dGluZ3NCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzkg
KzI1LDU3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGxh
bmd1YWdlc1tdID0gewotICAgICJhciIsCi0gICAgImJuIiwKLSAgICAiZ3UiLAotICAgICJoZSIs
Ci0gICAgImhpIiwKLSAgICAiamEiLAotICAgICJrbiIsCi0gICAgImtvIiwKLSAgICAibWwiLAot
ICAgICJwYSIsCi0gICAgInRhIiwKLSAgICAidGUiLAotICAgICJ0aCIsCi0gICAgInpoLUNOIiwK
LSAgICAiemgtVFciLAotfTsKLQogdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250
RmFtaWxpZXMoKQogewotICAgIHNldEN1cnNpdmVGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1jdXJzaXZlIiwg
IiIpLmNfc3RyKCkpOwotICAgIHNldEZhbnRhc3lGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1mYW50YXN5Iiwg
IiIpLmNfc3RyKCkpOwotICAgIHNldEZpeGVkRm9udEZhbWlseShCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoIi13ZWJraXQtbW9ub3NwYWNlIiwg
IiIpLmNfc3RyKCkpOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KCItd2Via2l0LXNhbnMtc2Vy
aWYiLCAiIikuY19zdHIoKSk7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1zZXJpZiIs
ICIiKS5jX3N0cigpKTsKLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KCItd2Via2l0LXN0YW5kYXJk
IiwgIiIpLmNfc3RyKCkpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrTGFuZ3VhZ2VzW10gPSB7
CisgICAgICAgICJhciIsCisgICAgICAgICJibiIsCisgICAgICAgICJndSIsCisgICAgICAgICJo
ZSIsCisgICAgICAgICJoaSIsCisgICAgICAgICJqYSIsCisgICAgICAgICJrbiIsCisgICAgICAg
ICJrbyIsCisgICAgICAgICJtbCIsCisgICAgICAgICJwYSIsCisgICAgICAgICJ0YSIsCisgICAg
ICAgICJ0ZSIsCisgICAgICAgICJ0aCIsCisgICAgICAgICJ6aC1DTiIsCisgICAgICAgICJ6aC1U
VyIsCisgICAgfTsKKworICAgIHN0YXRpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKiBs
YW5ndWFnZXNbV1RGX0FSUkFZX0xFTkdUSChrTGFuZ3VhZ2VzKV07CisgICAgc3RhdGljIGJvb2wg
aW5pdCA9IGZhbHNlOworICAgIGlmICghaW5pdCkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoa0xhbmd1YWdlcyk7ICsraSkKKyAgICAgICAgICAgIGxh
bmd1YWdlc1tpXSA9IG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKGtMYW5ndWFnZXNb
aV0pOworICAgICAgICBpbml0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBTVEFUSUNfTE9DQUxfU1RS
SU5HKHNfd2Via2l0Q3Vyc2l2ZSwgIi13ZWJraXQtY3Vyc2l2ZSIpOworICAgIFNUQVRJQ19MT0NB
TF9TVFJJTkcoc193ZWJraXRGYW50YXN5LCAiLXdlYmtpdC1mYW50YXN5Iik7CisgICAgU1RBVElD
X0xPQ0FMX1NUUklORyhzX3dlYmtpdE1vbm9zcGFjZSwgIi13ZWJraXQtbW9ub3NwYWNlIik7Cisg
ICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX3dlYmtpdFNhbnNTZXJpZiwgIi13ZWJraXQtc2Fucy1z
ZXJpZiIpOworICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc193ZWJraXRTZXJpZiwgIi13ZWJraXQt
c2VyaWYiKTsKKyAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNfd2Via2l0U3RhbmRhcmQsICItd2Vi
a2l0LXN0YW5kYXJkIik7CisKKyAgICBzZXRDdXJzaXZlRm9udEZhbWlseShCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193ZWJraXRDdXJzaXZl
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpKSk7CisgICAgc2V0
RmFudGFzeUZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5j
ZSgpLT5mb250RmFtaWx5KHNfd2Via2l0RmFudGFzeSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZzo6ZW1wdHlTdHJpbmcoKSkpOworICAgIHNldEZpeGVkRm9udEZhbWlseShCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193ZWJraXRNb25v
c3BhY2UsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCkpKTsKKyAg
ICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6
aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3dlYmtpdFNhbnNTZXJpZiwgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSkpOworICAgIHNldFNlcmlmRm9udEZhbWlseShC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193
ZWJraXRTZXJpZiwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSkp
OworICAgIHNldFN0YW5kYXJkRm9udEZhbWlseShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udElu
Zm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193ZWJraXRTdGFuZGFyZCwgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSkpOwogCisgICAgU1RBVElDX0xPQ0FMX1NU
UklORyhzX21vbm9zcGFjZSwgIm1vbm9zcGFjZSIpOworICAgIFNUQVRJQ19MT0NBTF9TVFJJTkco
c19zZXJpZiwgInNlcmlmIik7CisgICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX3NhbnNTZXJpZiwg
InNhbnMtc2VyaWYiKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5H
VEgobGFuZ3VhZ2VzKTsgKytpKSB7Ci0gICAgICAgIFVTY3JpcHRDb2RlIHNjcmlwdCA9IGxvY2Fs
ZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgc2V0
Rml4ZWRGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2Uo
KS0+Zm9udEZhbWlseSgibW9ub3NwYWNlIiwgbGFuZ3VhZ2VzW2ldKS5jX3N0cigpLCBzY3JpcHQp
OwotICAgICAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
b250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgic2Fucy1zZXJpZiIsIGxhbmd1YWdlc1tp
XSkuY19zdHIoKSwgc2NyaXB0KTsKLSAgICAgICAgc2V0U2VyaWZGb250RmFtaWx5KEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgic2VyaWYiLCBs
YW5ndWFnZXNbaV0pLmNfc3RyKCksIHNjcmlwdCk7Ci0gICAgICAgIHNldFN0YW5kYXJkRm9udEZh
bWlseShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1p
bHkoIiIsIGxhbmd1YWdlc1tpXSkuY19zdHIoKSwgc2NyaXB0KTsKKyAgICAgICAgVVNjcmlwdENv
ZGUgc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbigqbGFuZ3VhZ2Vz
W2ldKTsKKyAgICAgICAgc2V0Rml4ZWRGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
b250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX21vbm9zcGFjZSwgKmxhbmd1YWdlc1tp
XSksIHNjcmlwdCk7CisgICAgICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KHNfc2Fuc1NlcmlmLCAq
bGFuZ3VhZ2VzW2ldKSwgc2NyaXB0KTsKKyAgICAgICAgc2V0U2VyaWZGb250RmFtaWx5KEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3Nlcmlm
LCAqbGFuZ3VhZ2VzW2ldKSwgc2NyaXB0KTsKKyAgICAgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpLCAqbGFuZ3VhZ2VzW2ld
KSwgc2NyaXB0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvTG9jYWxpemVkU3RyaW5nc0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTG9jYWxpemVkU3RyaW5nc0JsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L0xvY2FsaXplZFN0cmluZ3NCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8TG9jYWxlSGFuZGxlci5oPgogI2luY2x1ZGUgPExvY2FsaXplUmVzb3VyY2UuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L01JTUVUeXBlUmVnaXN0cnlCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L01JTUVUeXBlUmVnaXN0cnlCbGFja0JlcnJ5LmNw
cAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJy
eS9NSU1FVHlwZVJlZ2lzdHJ5QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE4
ICszMSwxOSBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1Db21tb25GdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewotICAgIHJldHVybiBTdHJpbmcoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbi5sb3dl
cigpLnV0ZjgoKS5kYXRhKCkpLmNfc3RyKCkpOworICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uLmxvd2VyKCkpOwogfQogCiBT
dHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIHJldHVybiBTdHJpbmcoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKHR5cGUubG93ZXIoKS51dGY4
KCkuZGF0YSgpKS5jX3N0cigpKTsKKyAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06Omdl
dFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKHR5cGUubG93ZXIoKSk7CiB9CiAKIGJvb2wg
TUlNRVR5cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Bhc3RlYm9hcmRC
bGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L1Bhc3RlYm9hcmRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QYXN0ZWJvYXJkQmxhY2tCZXJyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUNs
aXBib2FyZChDbGlwYm9hcgogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdl
KiBzZWxlY3RlZFJhbmdlLCBib29sLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgc3RkOjpzdHJpbmcg
dGV4dCA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpLmRhdGEoKTsKLSAg
ICBzdGQ6OnN0cmluZyBodG1sID0gY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90
YXRlRm9ySW50ZXJjaGFuZ2UpLnV0ZjgoKS5kYXRhKCk7Ci0gICAgc3RkOjpzdHJpbmcgdXJsID0g
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCk7CisgICAgV1RG
OjpTdHJpbmcgdGV4dCA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgV1RG
OjpTdHJpbmcgaHRtbCA9IGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlKTsKKyAgICBXVEY6OlN0cmluZyB1cmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCkuc3RyaW5nKCk7CiAKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjp3
cml0ZSh0ZXh0LCBodG1sLCB1cmwpOwogfQpAQCAtNzMsMTcgKzczLDE3IEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHMKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwo
S1VSTCBjb25zdCYgdXJsLCBTdHJpbmcgY29uc3QmLCBGcmFtZSopCiB7CiAgICAgQVNTRVJUKCF1
cmwuaXNFbXB0eSgpKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjp3cml0
ZVVSTCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkNsaXBib2FyZDo6d3JpdGVVUkwodXJsLnN0cmluZygpKTsKIH0KIAogdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlv
bikKIHsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjp3cml0ZVBsYWluVGV4
dCh0ZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9h
cmQ6OndyaXRlUGxhaW5UZXh0KHRleHQpOwogfQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5U
ZXh0KEZyYW1lKikKIHsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6Q2xpcGJvYXJkOjpyZWFkUGxhaW5UZXh0KCkuY19zdHIoKSk7CisgICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OnJlYWRQbGFpblRleHQoKTsKIH0KIAog
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50
KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxvd1BsYWlu
VGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCkBAIC05MywxMCArOTMsMTAgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgIC8vIE5vdGU6IFdlIGFyZSBhYmxl
IHRvIGNoZWNrIGlmIHRoZSBmb3JtYXQgZXhpc3RzIHByaW9yIHRvIHJlYWRpbmcgYnV0IHRoZSBj
aGVjayAmIHRoZSBlYXJseSByZXR1cm4KICAgICAvLyBwYXRoIG9mIGdldF9jbGlwYm9hcmRfZGF0
YSBhcmUgdGhlIGV4YWN0IHNhbWUsIHNvIGp1c3QgdXNlIGdldF9jbGlwYm9hcmRfZGF0YSBhbmQg
dmFsaWRhdGUgdGhlCiAgICAgLy8gcmV0dXJuIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgZGF0
YSB3YXMgcHJlc2VudC4KLSAgICBTdHJpbmcgaHRtbCA9IFN0cmluZzo6ZnJvbVVURjgoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZEhUTUwoKS5jX3N0cigpKTsKKyAgICBTdHJp
bmcgaHRtbCA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OnJlYWRIVE1MKCk7CiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIGlmICghaHRtbC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgU3RyaW5nIHVybCA9IFN0cmluZzo6ZnJvbVVURjgoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZFVSTCgpLmNfc3RyKCkpOworICAgICAgICBTdHJp
bmcgdXJsID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZFVSTCgpOwogICAg
ICAgICBpZiAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3Vt
ZW50KCksIGh0bWwsIHVybCwgRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KSkKICAgICAgICAgICAg
IHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQpAQCAtMTA0LDcgKzEwNCw3IEBAIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICBpZiAoIWFsbG93UGxh
aW5UZXh0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nOjpm
cm9tVVRGOChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjpyZWFkUGxhaW5UZXh0KCku
Y19zdHIoKSk7CisgICAgU3RyaW5nIHRleHQgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJv
YXJkOjpyZWFkUGxhaW5UZXh0KCk7CiAgICAgaWYgKGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChjb250ZXh0LmdldCgpLCB0ZXh0KSkgewogICAgICAgICBjaG9zZVBsYWluVGV4dCA9
IHRydWU7CiAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1JlYWRPbmx5TGF0aW4xU3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9SZWFkT25seUxhdGlu
MVN0cmluZy5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L1JlYWRPbmx5TGF0aW4xU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVm
IFJlYWRPbmx5TGF0aW4xU3RyaW5nX2gKLSNkZWZpbmUgUmVhZE9ubHlMYXRpbjFTdHJpbmdfaAot
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWRPbmx5TGF0aW4xU3Ry
aW5nIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSZWFkT25seUxhdGluMVN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAg
ICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKTsKLSAgICAgICAgICAgIG1fY3N0cmlu
ZyA9IHN0cmluZy5sYXRpbjEoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGNoYXIq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc051bGwoKSA/IG1fY3N0cmluZy5kYXRh
KCkgOiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX3N0cmluZy5jaGFyYWN0ZXJzOCgp
KTsgfQotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVs
bCgpID8gbV9jc3RyaW5nLmxlbmd0aCgpIDogbV9zdHJpbmcubGVuZ3RoKCk7IH0KLQotcHJpdmF0
ZToKLSAgICBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgQ1N0cmluZyBtX2NzdHJpbmc7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVy
UHJpdmF0ZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAj
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxGcmFtZUxv
YWRlckNsaWVudEJsYWNrQmVycnkuaD4KICNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8c3RyaW5n
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKQEAgLTY3LDE1ICs2NiwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
cmVnaXN0ZXJNZWRpYUVuCiAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMs
IHN1cHBvcnRzVHlwZSwgMCwgMCwgMCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpn
ZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8V1RGOjpTdHJpbmc+JiB0eXBlcykK
IHsKLSAgICBzZXQ8c3RyaW5nPiBzdXBwb3J0ZWQgPSBQbGF0Zm9ybVBsYXllcjo6YWxsU3VwcG9y
dGVkTWltZVR5cGVzKCk7Ci0gICAgc2V0PHN0cmluZz46Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWQu
YmVnaW4oKTsKKyAgICBzZXQ8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4gc3VwcG9ydGVk
ID0gUGxhdGZvcm1QbGF5ZXI6OmFsbFN1cHBvcnRlZE1pbWVUeXBlcygpOworICAgIHNldDxCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPjo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZC5iZWdpbigp
OwogICAgIGZvciAoOyBpICE9IHN1cHBvcnRlZC5lbmQoKTsgaSsrKQotICAgICAgICB0eXBlcy5h
ZGQoaS0+Y19zdHIoKSk7CisgICAgICAgIHR5cGVzLmFkZCgqaSk7CiB9CiAKLU1lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcywgY29uc3QgS1VSTCYpCitNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFdU
Rjo6U3RyaW5nJiB0eXBlLCBjb25zdCBXVEY6OlN0cmluZyYgY29kZWNzLCBjb25zdCBLVVJMJikK
IHsKICAgICBpZiAodHlwZS5pc051bGwoKSB8fCB0eXBlLmlzRW1wdHkoKSkgewogICAgICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllciBkb2VzIG5vdCBzdXBwb3J0IHR5cGU7IHR5cGUgaXMgbnVs
bCBvciBlbXB0eS4iKTsKQEAgLTk2LDkgKzk1LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
Om5vdGlmeUFwcEFjdGl2YQogICAgIFBsYXRmb3JtUGxheWVyOjpub3RpZnlBcHBBY3RpdmF0ZWRF
dmVudChhY3RpdmF0ZWQpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Q2VydGlm
aWNhdGVQYXRoKGNvbnN0IFN0cmluZyYgY2FQYXRoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnNldENlcnRpZmljYXRlUGF0aChjb25zdCBXVEY6OlN0cmluZyYgY2FQYXRoKQogewotICAgIFBs
YXRmb3JtUGxheWVyOjpzZXRDZXJ0aWZpY2F0ZVBhdGgoc3RyaW5nKGNhUGF0aC51dGY4KCkuZGF0
YSgpKSk7CisgICAgUGxhdGZvcm1QbGF5ZXI6OnNldENlcnRpZmljYXRlUGF0aChjYVBhdGgpOwog
fQogCiBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciog
cGxheWVyKQpAQCAtMTM4LDE0ICsxMzcsMTQgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQ
bGF5ZXJQcml2YXRlKAogICAgIGRlbGV0ZUd1YXJkZWRPYmplY3QobV9wbGF0Zm9ybVBsYXllcik7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgV1RGOjpTdHJpbmcmIHVybCkKIHsK
LSAgICBTdHJpbmcgbW9kaWZpZWRVcmwodXJsKTsKKyAgICBXVEY6OlN0cmluZyBtb2RpZmllZFVy
bCh1cmwpOwogCiAgICAgaWYgKG1vZGlmaWVkVXJsLnN0YXJ0c1dpdGgoImxvY2FsOi8vIikpIHsK
ICAgICAgICAgS1VSTCBrdXJsID0gS1VSTChLVVJMKCksIG1vZGlmaWVkVXJsKTsKICAgICAgICAg
a3VybC5zZXRQcm90b2NvbCgiZmlsZSIpOwotICAgICAgICBTdHJpbmcgdGVtcFBhdGgoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5hcHBsaWNhdGlvbkxvY2FsRGly
ZWN0b3J5KCkuY19zdHIoKSk7CisgICAgICAgIFdURjo6U3RyaW5nIHRlbXBQYXRoKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+YXBwbGljYXRpb25Mb2NhbERpcmVj
dG9yeSgpLmNfc3RyKCkpOwogICAgICAgICB0ZW1wUGF0aC5hcHBlbmQoa3VybC5wYXRoKCkpOwog
ICAgICAgICBrdXJsLnNldFBhdGgodGVtcFBhdGgpOwogICAgICAgICBtb2RpZmllZFVybCA9IGt1
cmwuc3RyaW5nKCk7CkBAIC0xNjUsNyArMTY0LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmxvYWQoY29uc3QgU3RyaQogICAgIG1fcGxhdGZvcm1QbGF5ZXIgPSBQbGF0Zm9ybVBsYXllcjo6
Y3JlYXRlKHRoaXMsIHRhYklkLCBmYWxzZSwgbW9kaWZpZWRVcmwudXRmOCgpLmRhdGEoKSk7CiAj
ZW5kaWYKIAotICAgIFN0cmluZyBjb29raWVQYWlyczsKKyAgICBXVEY6OlN0cmluZyBjb29raWVQ
YWlyczsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCiAgICAgICAgIGNvb2tpZVBhaXJzID0gY29v
a2llTWFuYWdlcigpLmdldENvb2tpZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsLnV0ZjgoKS5k
YXRhKCkpLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKICAgICBpZiAoIWNvb2tpZVBhaXJzLmlzRW1w
dHkoKSAmJiBjb29raWVQYWlycy51dGY4KCkuZGF0YSgpKQpAQCAtNjk2LDcgKzY5NSw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkJ1ZmZlcmluZyhib28KIAogc3RhdGljIFByb3RlY3Rp
b25TcGFjZSBnZW5lcmF0ZVByb3RlY3Rpb25TcGFjZUZyb21NTVJBdXRoQ2hhbGxlbmdlKGNvbnN0
IE1NUkF1dGhDaGFsbGVuZ2UmIGF1dGhDaGFsbGVuZ2UpCiB7Ci0gICAgS1VSTCB1cmwoUGFyc2Vk
VVJMU3RyaW5nLCBTdHJpbmcoYXV0aENoYWxsZW5nZS51cmwoKS5jX3N0cigpKSk7CisgICAgS1VS
TCB1cmwoUGFyc2VkVVJMU3RyaW5nLCBXVEY6OlN0cmluZyhhdXRoQ2hhbGxlbmdlLnVybCgpLmNf
c3RyKCkpKTsKICAgICBBU1NFUlQodXJsLmlzVmFsaWQoKSk7CiAKICAgICByZXR1cm4gUHJvdGVj
dGlvblNwYWNlKHVybC5ob3N0KCksIHVybC5wb3J0KCksCkBAIC03MDcsNyArNzA2LDcgQEAgc3Rh
dGljIFByb3RlY3Rpb25TcGFjZSBnZW5lcmF0ZVByb3RlY3RpbwogCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6b25BdXRoZW50aWNhdGlvbk5lZWRlZChNTVJBdXRoQ2hhbGxlbmdlJiBhdXRoQ2hh
bGxlbmdlKQogewotICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgU3RyaW5nKGF1dGhDaGFs
bGVuZ2UudXJsKCkuY19zdHIoKSkpOworICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgV1RG
OjpTdHJpbmcoYXV0aENoYWxsZW5nZS51cmwoKS5jX3N0cigpKSk7CiAgICAgaWYgKCF1cmwuaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc0MCw3ICs3MzksNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6bm90aWZ5Q2hhbGxlbmdlCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpvbkF1dGhlbnRpY2F0aW9uQWNjZXB0ZWQoY29uc3QgTU1SQXV0aENoYWxsZW5nZSYgYXV0aENo
YWxsZW5nZSkgY29uc3QKIHsKLSAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIFN0cmluZyhh
dXRoQ2hhbGxlbmdlLnVybCgpLmNfc3RyKCkpKTsKKyAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJp
bmcsIFdURjo6U3RyaW5nKGF1dGhDaGFsbGVuZ2UudXJsKCkuY19zdHIoKSkpOwogICAgIGlmICgh
dXJsLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04MDUsOSArODA0LDkgQEAgc3Rh
dGljIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciB0b1dlYk1lZAogICAgIHJldHVybiBXZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3IoZC0+bGFiZWwoKS51dGY4KCkuZGF0YSgpLCBhdWRpb1NvdXJjZXMs
IHZpZGVvU291cmNlcyk7CiB9CiAKLVdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciBNZWRpYVBsYXll
clByaXZhdGU6Omxvb2t1cE1lZGlhU3RyZWFtKGNvbnN0IHN0cmluZyYgdXJsKQorV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9va3VwTWVkaWFTdHJlYW0oY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsKQogewotICAgIE1lZGlhU3RyZWFt
RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IE1lZGlhU3RyZWFtUmVnaXN0cnk6OnJlZ2lzdHJ5KCku
bG9va3VwTWVkaWFTdHJlYW1EZXNjcmlwdG9yKFN0cmluZzo6ZnJvbVVURjgodXJsLmNfc3RyKCkp
KTsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBNZWRpYVN0cmVhbVJl
Z2lzdHJ5OjpyZWdpc3RyeSgpLmxvb2t1cE1lZGlhU3RyZWFtRGVzY3JpcHRvcihXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodXJsLmNfc3RyKCkpKTsKICAgICBpZiAoIWRlc2NyaXB0b3IpCiAgICAgICAg
IHJldHVybiBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0Jl
cnJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDEzMTI0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5
ZXJQcml2YXRlQmxhY2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlh
RW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0
ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
S1VSTCYpOworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8V1RGOjpT
dHJpbmc+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBLVVJMJik7
CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5QXBwQWN0aXZhdGVkRXZlbnQoYm9vbCk7Ci0gICAgc3Rh
dGljIHZvaWQgc2V0Q2VydGlmaWNhdGVQYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2
b2lkIHNldENlcnRpZmljYXRlUGF0aChjb25zdCBXVEY6OlN0cmluZyYpOwogCi0gICAgdmlydHVh
bCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNv
bnN0IFdURjo6U3RyaW5nJiB1cmwpOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvUGxheSgpOwpAQCAtMTQzLDE1ICsxNDMsMTUgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1RhYlZpc2libGUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGludCBzaG93RXJyb3JEaWFsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBsYXRmb3JtUGxh
eWVyOjpFcnJvcik7CiAgICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OldpbmRvdyogcGxhdGZvcm1XaW5kb3coKTsKLSAgICB2aXJ0dWFsIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IgbG9va3VwTWVkaWFTdHJlYW0oY29uc3Qgc3Rk
OjpzdHJpbmcmIHVybCk7CisgICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6V2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yIGxvb2t1cE1lZGlhU3RyZWFtKGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcmIHVybCk7CiAKIHByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRl
KE1lZGlhUGxheWVyKik7CiAKICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwotICAgIFN0cmluZyB1
c2VyQWdlbnQoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgV1RGOjpTdHJpbmcgdXNlckFnZW50
KGNvbnN0IFdURjo6U3RyaW5nJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVE
ZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuICJCbGFja0JlcnJ5IjsgfQorICAgIHZpcnR1YWwg
V1RGOjpTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiAiQmxhY2tCZXJy
eSI7IH0KIAogICAgIE1lZGlhUGxheWVyKiBtX3dlYkNvcmVQbGF5ZXI7CiAgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlBsYXRmb3JtUGxheWVyKiBtX3BsYXRmb3JtUGxheWVyOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0ROU0JsYWNrQmVycnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJy
eS9ETlNCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0ROU0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBAIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0
KQogewogICAgIGlmIChob3N0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpwcmVmZXRjaEROUyhob3N0LmxhdGluMSgpLmRhdGEoKSk7CisgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OnByZWZldGNoRE5TKGhvc3QpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L05ldHdvcmtKb2IuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMCwxNCArMTMwLDEyIEBAIGJvb2wgTmV0d29ya0pvYjo6aW5pdGlhbGl6ZShpbnQgcGxheWVy
SWQKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCBub3RpZnlIZWFkZXJS
ZWNlaXZlZCwgYXMgdGhlIENvbnRlbnQtVHlwZQogICAgIC8vIHdpbGwgdWx0aW1hdGVseSBnZXQg
cGFyc2VkIHdoZW4gc2VuZFJlc3BvbnNlSWZOZWVkZWQgZ2V0cyBjYWxsZWQuCiAgICAgaWYgKCFy
ZXF1ZXN0LmdldE92ZXJyaWRlQ29udGVudFR5cGUoKS5lbXB0eSgpKSB7Ci0gICAgICAgIG1fY29u
dGVudFR5cGUgPSBTdHJpbmcocmVxdWVzdC5nZXRPdmVycmlkZUNvbnRlbnRUeXBlKCkuY19zdHIo
KSk7CisgICAgICAgIG1fY29udGVudFR5cGUgPSBTdHJpbmcocmVxdWVzdC5nZXRPdmVycmlkZUNv
bnRlbnRUeXBlKCkpOwogICAgICAgICBtX2lzT3ZlcnJpZGVDb250ZW50VHlwZSA9IHRydWU7CiAg
ICAgfQogCi0gICAgaWYgKCFyZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkuZW1wdHkoKSkg
ewotICAgICAgICBtX2NvbnRlbnREaXNwb3NpdGlvbiA9ICJmaWxlbmFtZT0iOwotICAgICAgICBt
X2NvbnRlbnREaXNwb3NpdGlvbiArPSByZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkuY19z
dHIoKTsKLSAgICB9CisgICAgaWYgKCFyZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkuZW1w
dHkoKSkKKyAgICAgICAgbV9jb250ZW50RGlzcG9zaXRpb24gPSAiZmlsZW5hbWU9IiArIFN0cmlu
ZyhyZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkpOwogCiAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZpbHRlclN0cmVhbSogd3JhcHBlZFN0cmVhbSA9IG1fc3RyZWFtRmFjdG9yeS0+Y3Jl
YXRlTmV0d29ya1N0cmVhbShyZXF1ZXN0LCBtX3BsYXllcklkKTsKICAgICBpZiAoIXdyYXBwZWRT
dHJlYW0pCkBAIC0xNzUsNyArMTczLDcgQEAgdm9pZCBOZXR3b3JrSm9iOjp1cGRhdGVEZWZlckxv
YWRpbmdDb3VudAogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlTdGF0dXNSZWNl
aXZlZChpbnQgc3RhdHVzLCBjb25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBOZXR3b3JrSm9iOjpu
b3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiBtZXNzYWdlKQogewogICAgIGlmIChzaG91bGREZWZlckxvYWRpbmcoKSkKICAg
ICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJPcGVuKHN0YXR1cywgbWVzc2FnZSk7CkBAIC0yMTQs
OSArMjEyLDkgQEAgdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQoQgogICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kSXQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhl
YWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kSXQ7ICsraXQpIHsKICAgICAgICAgaWYgKHNob3VsZERl
ZmVyTG9hZGluZygpKQotICAgICAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJIZWFkZXJSZWNl
aXZlZChpdC0+Zmlyc3QuY19zdHIoKSwgaXQtPnNlY29uZC5jX3N0cigpKTsKKyAgICAgICAgICAg
IG1fZGVmZXJyZWREYXRhLmRlZmVySGVhZGVyUmVjZWl2ZWQoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5U3RyaW5nKGl0LT5maXJz
dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFN0cmluZyBrZXlTdHJpbmcoaXQtPmZpcnN0KTsKICAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKICAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShrZXlTdHJpbmcsICJMb2NhdGlvbiIpKSB7CiAgICAgICAgICAgICAgICAgLy8gTG9j
YXRpb24sIGxpa2UgYWxsIGhlYWRlcnMsIGlzIHN1cHBvc2VkIHRvIGJlIExhdGluLTEuIEJ1dCBz
b21lIHNpdGVzICh3aWtpcGVkaWEpIHNlbmQgaXQgaW4gVVRGLTguCkBAIC0yMjcsMTEgKzIyNSwx
MSBAQCB2b2lkIE5ldHdvcmtKb2I6Om5vdGlmeUhlYWRlcnNSZWNlaXZlZChCCiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IG1heWJlIHdlIHNob3VsZCBkbyB0aGlzIHdpdGggb3RoZXIgaGVhZGVy
cz8KICAgICAgICAgICAgICAgICAvLyBTa2lwIGl0IGZvciBub3cgLSB3ZSBkb24ndCB3YW50IHRv
IHJld3JpdGUgcmFuZG9tIGJ5dGVzIHVubGVzcyB3ZSdyZSBzdXJlLiAoRGVmaW5pdGVseSBkb24n
dCB3YW50IHRvCiAgICAgICAgICAgICAgICAgLy8gcmV3cml0ZSBjb29raWVzLCBmb3IgaW5zdGFu
Y2UuKSBOZWVkcyBtb3JlIGludmVzdGlnYXRpb24uCi0gICAgICAgICAgICAgICAgdmFsdWVTdHJp
bmcgPSBTdHJpbmc6OmZyb21VVEY4KGl0LT5zZWNvbmQuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgdmFsdWVTdHJpbmcgPSBpdC0+c2Vjb25kOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZVN0
cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBpdC0+c2Vj
b25kLmNfc3RyKCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQtPnNlY29u
ZDsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQt
PnNlY29uZC5jX3N0cigpOworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQtPnNlY29u
ZDsKIAogICAgICAgICAgICAgaGFuZGxlTm90aWZ5SGVhZGVyUmVjZWl2ZWQoa2V5U3RyaW5nLCB2
YWx1ZVN0cmluZyk7CiAgICAgICAgIH0KQEAgLTQ5OCw3ICs0OTYsNyBAQCB2b2lkIE5ldHdvcmtK
b2I6OmhhbmRsZU5vdGlmeUNsb3NlKGludCBzCiAgICAgaWYgKCFtX2NhbmNlbGxlZCkgewogICAg
ICAgICBpZiAoIW1fc3RhdHVzUmVjZWl2ZWQpIHsKICAgICAgICAgICAgIC8vIENvbm5lY3Rpb24g
ZmFpbGVkIGJlZm9yZSBzZW5kaW5nIG5vdGlmeVN0YXR1c1JlY2VpdmVkOiB1c2UgZ2VuZXJpYyBO
ZXR3b3JrRXJyb3IuCi0gICAgICAgICAgICBub3RpZnlTdGF0dXNSZWNlaXZlZChCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpTdGF0dXNOZXR3b3JrRXJyb3IsIDApOworICAgICAg
ICAgICAgbm90aWZ5U3RhdHVzUmVjZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0
cmVhbTo6U3RhdHVzTmV0d29ya0Vycm9yLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjpl
bXB0eVN0cmluZygpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzaG91bGRSZWxlYXNlQ2xp
ZW50UmVzb3VyY2UoKSkgewpAQCAtNzUyLDcgKzc1MCw3IEBAIGJvb2wgTmV0d29ya0pvYjo6c2Vu
ZFJlcXVlc3RXaXRoQ3JlZGVudGkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcHJveHlBZGRy
ZXNzLmFwcGVuZCgiaHR0cHM6Ly8iKTsKIAotICAgICAgICBwcm94eUFkZHJlc3MuYXBwZW5kKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+cHJveHlBZGRyZXNzKG5l
d1VSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkuY19zdHIoKSk7CisgICAgICAgIHByb3h5QWRk
cmVzcy5hcHBlbmQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5w
cm94eUFkZHJlc3MobmV3VVJMLnN0cmluZygpKSk7CiAgICAgICAgIEtVUkwgcHJveHlVUkwoS1VS
TCgpLCBwcm94eUFkZHJlc3MudG9TdHJpbmcoKSk7CiAgICAgICAgIGhvc3QgPSBwcm94eVVSTC5o
b3N0KCk7CiAgICAgICAgIHBvcnQgPSBwcm94eVVSTC5wb3J0KCk7CkBAIC03ODcsOCArNzg1LDgg
QEAgYm9vbCBOZXR3b3JrSm9iOjpzZW5kUmVxdWVzdFdpdGhDcmVkZW50aQogICAgICAgICBTdHJp
bmcgcGFzc3dvcmQ7CiAKICAgICAgICAgaWYgKHR5cGUgPT0gUHJvdGVjdGlvblNwYWNlUHJveHlI
VFRQIHx8IHR5cGUgPT0gUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUykgewotICAgICAgICAgICAg
dXNlcm5hbWUgPSBTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5j
ZSgpLT5wcm94eVVzZXJuYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBwYXNzd29yZCA9IFN0
cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPnByb3h5UGFz
c3dvcmQoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHVzZXJuYW1lID0gU3RyaW5nKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+cHJveHlVc2VybmFtZSgpKTsKKyAg
ICAgICAgICAgIHBhc3N3b3JkID0gU3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5n
czo6aW5zdGFuY2UoKS0+cHJveHlQYXNzd29yZCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHVzZXJuYW1lID0gbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fdXNlcjsKICAgICAg
ICAgICAgIHBhc3N3b3JkID0gbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcGFzczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L05ldHdvcmtKb2IuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtKb2IuaAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCBwdWJsaWM6CiAgICAgaW50IGNhbmNlbEpvYigpOwogICAgIGJvb2wgaXNEZWZl
cnJpbmdMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlckxvYWRpbmdDb3VudCA+IDA7IH0K
ICAgICB2b2lkIHVwZGF0ZURlZmVyTG9hZGluZ0NvdW50KGludCBkZWx0YSk7Ci0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBj
b25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtZXNzYWdlKTsKICAgICB2b2lkIGhh
bmRsZU5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUhlYWRlcnNSZWNlaXZlZChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlcnMpOwogICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlNdWx0aXBhcnRIZWFkZXJSZWNlaXZlZChjb25zdCBjaGFyKiBrZXksIGNv
bnN0IGNoYXIqIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9OZXR3b3JrTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L05ldHdvcmtNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtK
b2IuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVhZE9ubHlMYXRpbjFTdHJpbmcu
aCIKICNpZiBFTkFCTEUoQkxBQ0tCRVJSWV9DUkVERU5USUFMX1BFUlNJU1QpCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNlbmRpZgpAQCAtODcsMTIgKzg2LDEwIEBAIGJvb2wg
TmV0d29ya01hbmFnZXI6OnN0YXJ0Sm9iKGludCBwbGF5ZXIKIAogICAgIGNvbnN0IFN0cmluZyYg
ZG9jdW1lbnRVcmwgPSBmcmFtZS5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKICAgICBpZiAo
IWRvY3VtZW50VXJsLmlzRW1wdHkoKSkgewotICAgICAgICBSZWFkT25seUxhdGluMVN0cmluZyBy
ZWZlcnJlcihkb2N1bWVudFVybCk7Ci0gICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRSZWZlcnJl
cihyZWZlcnJlci5kYXRhKCksIHJlZmVycmVyLmxlbmd0aCgpKTsKKyAgICAgICAgcGxhdGZvcm1S
ZXF1ZXN0LnNldFJlZmVycmVyKGRvY3VtZW50VXJsKTsKICAgICB9CiAKLSAgICBSZWFkT25seUxh
dGluMVN0cmluZyBzZWN1cml0eU9yaWdpbihmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT50b1Jhd1N0cmluZygpKTsKLSAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0U2VjdXJpdHlPcmln
aW4oc2VjdXJpdHlPcmlnaW4uZGF0YSgpLCBzZWN1cml0eU9yaWdpbi5sZW5ndGgoKSk7CisgICAg
cGxhdGZvcm1SZXF1ZXN0LnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCktPnRvUmF3U3RyaW5nKCkpOwogCiAgICAgLy8gQXR0YWNoIGFueSBhcHBsaWNh
YmxlIGF1dGggY3JlZGVudGlhbHMgdG8gdGhlIE5ldHdvcmtSZXF1ZXN0LgogICAgIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UgPSBndWFyZEpvYi0+Z2V0SW50ZXJuYWwoKS0+bV9j
dXJyZW50V2ViQ2hhbGxlbmdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVl
c3RCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlICJCbG9iUmVnaXN0cnlJ
bXBsLmgiCiAjaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgIlJlYWRPbmx5TGF0
aW4xU3RyaW5nLmgiCiAjaW5jbHVkZSA8bmV0d29yay9OZXR3b3JrUmVxdWVzdC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMTQ4
LDE2ICsxNDcsMTQgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmluaXRpYWxpemVQbGF0Zm9ybQog
ICAgIGlmIChpc0luaXRpYWwpCiAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRSZXF1ZXN0SW5p
dGlhbCh0aW1lb3V0SW50ZXJ2YWwoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlYWRPbmx5TGF0
aW4xU3RyaW5nIGxhdGluMVVSTCh1cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIFJlYWRPbmx5TGF0
aW4xU3RyaW5nIGxhdGluMUh0dHBNZXRob2QoaHR0cE1ldGhvZCgpKTsKLSAgICAgICAgcGxhdGZv
cm1SZXF1ZXN0LnNldFJlcXVlc3RVcmwobGF0aW4xVVJMLmRhdGEoKSwgbGF0aW4xVVJMLmxlbmd0
aCgpLAotICAgICAgICAgICAgICAgIGxhdGluMUh0dHBNZXRob2QuZGF0YSgpLCBsYXRpbjFIdHRw
TWV0aG9kLmxlbmd0aCgpLAorICAgICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0UmVxdWVzdFVybCh1
cmwoKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICBodHRwTWV0aG9kKCksCiAgICAgICAgICAg
ICAgICAgcGxhdGZvcm1DYWNoZVBvbGljeUZvclJlcXVlc3QoKnRoaXMpLAogICAgICAgICAgICAg
ICAgIHBsYXRmb3JtVGFyZ2V0VHlwZUZvclJlcXVlc3QoKnRoaXMpLAogICAgICAgICAgICAgICAg
IHRpbWVvdXRJbnRlcnZhbCgpKTsKIAogICAgICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0Q29uZGl0
aW9uYWwoaXNDb25kaXRpb25hbCgpKTsKLSAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFN1Z2dl
c3RlZFNhdmVOYW1lKHN1Z2dlc3RlZFNhdmVOYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IHBsYXRmb3JtUmVxdWVzdC5zZXRTdWdnZXN0ZWRTYXZlTmFtZShzdWdnZXN0ZWRTYXZlTmFtZSgp
KTsKIAogICAgICAgICBpZiAoaHR0cEJvZHkoKSAmJiAhaHR0cEJvZHkoKS0+aXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiYgZWxlbWVudHMgPSBo
dHRwQm9keSgpLT5lbGVtZW50cygpOwpAQCAtMjEwLDkgKzIwNyw3IEBAIHZvaWQgUmVzb3VyY2VS
ZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIFJlYWRPbmx5TGF0aW4xU3RyaW5nIGxhdGluMUtleShrZXkpOwotICAgICAgICAgICAg
ICAgIFJlYWRPbmx5TGF0aW4xU3RyaW5nIGxhdGluMVZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBwbGF0Zm9ybVJlcXVlc3QuYWRkSGVhZGVyKGxhdGluMUtleS5kYXRhKCksIGxhdGluMUtl
eS5sZW5ndGgoKSwgbGF0aW4xVmFsdWUuZGF0YSgpLCBsYXRpbjFWYWx1ZS5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZEhlYWRlcihrZXksIHZhbHVlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlQmxhY2tCZXJyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tl
dFN0cmVhbUhhbmRsZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlQmxh
Y2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJsYWNrQmVycnkuaCIKICNpbmNsdWRlICJQYWdl
R3JvdXAuaCIKLSNpbmNsdWRlICJSZWFkT25seUxhdGluMVN0cmluZy5oIgogI2luY2x1ZGUgIlNv
Y2tldFN0cmVhbUVycm9yLmgiCiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Lmgi
CiAKQEAgLTY4LDggKzY3LDcgQEAgU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5k
bGUoYwogCiAgICAgLy8gT3BlbiB0aGUgc29ja2V0CiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
Ok5ldHdvcmtSZXF1ZXN0IHJlcXVlc3Q7Ci0gICAgUmVhZE9ubHlMYXRpbjFTdHJpbmcgbGF0aW4x
VVJMKHVybC5zdHJpbmcoKSk7Ci0gICAgcmVxdWVzdC5zZXRSZXF1ZXN0VXJsKGxhdGluMVVSTC5k
YXRhKCksIGxhdGluMVVSTC5sZW5ndGgoKSwgIkNPTk5FQ1QiLCA3KTsKKyAgICByZXF1ZXN0LnNl
dFJlcXVlc3RVcmwodXJsLnN0cmluZygpLCAiQ09OTkVDVCIpOwogICAgIG1fc29ja2V0U3RyZWFt
ID0gYWRvcHRQdHIoZmFjdG9yeS0+Y3JlYXRlTmV0d29ya1N0cmVhbShyZXF1ZXN0LCBwbGF5ZXJJ
ZCkpOwogICAgIEFTU0VSVChtX3NvY2tldFN0cmVhbSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvYmxhY2tiZXJyeS9TdHJpbmdCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2JsYWNrYmVycnkvU3RyaW5nQmxhY2tC
ZXJyeS5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvYmxhY2tiZXJyeS9TdHJpbmdCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcs
MjMgKzE3LDI3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKLXVzaW5nIEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU3RyaW5nOworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLVN0cmluZzo6U3RyaW5nKGNvbnN0IFdlYlN0cmlu
ZyYgd2ViU3RyaW5nKQotICAgIDogbV9pbXBsKHdlYlN0cmluZy5pbXBsKCkpCitTdHJpbmc6OlN0
cmluZyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB3ZWJTdHJpbmcpCiB7Cisg
ICAgKnRoaXMgPSBTdHJpbmc6OmZyb21VVEY4KHdlYlN0cmluZy5kYXRhKCksIHdlYlN0cmluZy5s
ZW5ndGgoKSk7CiB9CiAKLVN0cmluZzo6b3BlcmF0b3IgV2ViU3RyaW5nKCkgY29uc3QKK1N0cmlu
Zzo6b3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZygpIGNvbnN0CiB7Ci0gICAg
V2ViU3RyaW5nIHdlYlN0cmluZyhtX2ltcGwuZ2V0KCkpOwotICAgIHJldHVybiB3ZWJTdHJpbmc7
CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmc6OmVtcHR5U3RyaW5nKCk7CisKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGNoYXJhY3RlcnM4KCkpLCBsZW5ndGgoKSk7CisKKyAgICByZXR1cm4gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyhjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2JsYWNrYmVy
cnkvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUJsYWNrQmVycnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYmxhY2tiZXJyeS9UZXh0QnJlYWtJdGVy
YXRvckludGVybmFsSUNVQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYmxhY2tiZXJyeS9UZXh0QnJlYWtJdGVyYXRvckludGVy
bmFsSUNVQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYgKzE5LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNV
LmgiCiAKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDxM
b2NhbGVIYW5kbGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzEyNTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDEyLTEwLTEzICBHZW9yZ2UgU3RhaWtvcyAgPHN0YWlrb3NAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBbQmxhY2tCZXJyeV0gQWRhcHQgdG8gUGxhdGZvcm0gQVBJIGNo
YW5nZXMgaW4gc3RyaW5nIGhhbmRsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05OTI0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENvbnZlcnQgdXNhZ2Ugb2YgV2ViU3RyaW5nLCBjaGFyKiBhbmQgc3Rk
OjpzdHJpbmcgdG8gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZy4KKworICAgICAgICAqIFBs
YXRmb3JtQmxhY2tCZXJyeS5jbWFrZToKKwogMjAxMi0xMC0xMyAgSmFrb2IgUGV0c292aXRzICA8
anBldHNvdml0c0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBGZXRjaCBibGl0IHJl
Y3RzIGZyb20gYSB2aWV3cG9ydCBhY2Nlc3NvcgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9y
bUJsYWNrQmVycnkuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybUJs
YWNrQmVycnkuY21ha2UJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm1CbGFja0JlcnJ5LmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw2IEBAIExJU1Qo
QVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNvbXBvc2l0
b3IuY3BwCiAgICAgYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAog
ICAgIGJsYWNrYmVycnkvQXBpL1dlYlNldHRpbmdzLmNwcAotICAgIGJsYWNrYmVycnkvQXBpL1dl
YlN0cmluZy5jcHAKICAgICBibGFja2JlcnJ5L0FwaS9XZWJWaWV3cG9ydEFyZ3VtZW50cy5jcHAK
ICAgICBibGFja2JlcnJ5L0FwaS9KYXZhU2NyaXB0VmFyaWFudC5jcHAKICAgICBibGFja2JlcnJ5
L1dlYkNvcmVTdXBwb3J0L0F1dG9maWxsTWFuYWdlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMjU3KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOCBAQAorMjAxMi0xMC0x
MyAgR2VvcmdlIFN0YWlrb3MgIDxzdGFpa29zQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0JsYWNr
QmVycnldIEFkYXB0IHRvIFBsYXRmb3JtIEFQSSBjaGFuZ2VzIGluIHN0cmluZyBoYW5kbGluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyNDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb252ZXJ0IHVz
YWdlIG9mIFdlYlN0cmluZywgY2hhciogYW5kIHN0ZDo6c3RyaW5nIHRvIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcuCisKKyAgICAgICAgKiBBcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHA6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNsZWFyQXBwQ2FjaGUpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpjbGVhckRhdGFiYXNlKToKKyAgICAgICAgKiBBcGkvQmxhY2tCZXJy
eUdsb2JhbC5oOgorICAgICAgICAoUGxhdGZvcm0pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKiBBcGkvSmF2YVNjcmlwdFZhcmlhbnQuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpKU1ZhbHVlUmVmVG9CbGFja0JlcnJ5SmF2YVNjcmlwdFZhcmlhbnQpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpCbGFja0JlcnJ5SmF2YVNjcmlwdFZhcmlhbnRUb0pTVmFsdWVS
ZWYpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpKYXZhU2NyaXB0VmFyaWFudDo6SmF2
YVNjcmlwdFZhcmlhbnQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6SmF2YVNjcmlwdFZhcmlhbnQ6On5KYXZhU2NyaXB0VmFyaWFudCk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkphdmFTY3JpcHRWYXJpYW50OjpzZXRUeXBlKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SmF2YVNjcmlwdFZhcmlhbnQ6OnNldFN0cmluZyk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkphdmFTY3JpcHRWYXJpYW50OjpzdHJpbmdWYWx1
ZSk6CisgICAgICAgICogQXBpL0phdmFTY3JpcHRWYXJpYW50Lmg6CisgICAgICAgICogQXBpL1dl
YkFuaW1hdGlvbi5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYkFuaW1hdGlv
bjo6ZmFkZUFuaW1hdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYkFuaW1h
dGlvbjo6bmFtZSk6CisgICAgICAgICogQXBpL1dlYkFuaW1hdGlvbi5oOgorICAgICAgICAqIEFw
aS9XZWJDb29raWVKYXIuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJDb29raWVK
YXI6OnNldENvb2tpZXMpOgorICAgICAgICAqIEFwaS9XZWJDb29raWVKYXIuaDoKKyAgICAgICAg
KFBsYXRmb3JtKToKKyAgICAgICAgKEJsYWNrQmVycnkpOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKiBBcGkvV2ViS2l0TUlNRVR5cGVDb252ZXJ0ZXIuY3BwOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpnZXRFeHRlbnNpb25Gb3JNaW1lVHlwZSk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OmdldE1pbWVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKiBBcGkvV2Vi
S2l0TUlNRVR5cGVDb252ZXJ0ZXIuaDoKKyAgICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKEJs
YWNrQmVycnkpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBBcGkvV2ViS2l0VGV4dENv
ZGVjLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6YmFzZTY0RGVjb2RlKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6dW5lc2NhcGVVUkwpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
Ojplc2NhcGVVUkwpOgorICAgICAgICAqIEFwaS9XZWJLaXRUZXh0Q29kZWMuaDoKKyAgICAgICAg
KFBsYXRmb3JtKToKKyAgICAgICAgKEJsYWNrQmVycnkpOgorICAgICAgICAqIEFwaS9XZWJPdmVy
bGF5LmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViT3ZlcmxheTo6cmVtb3Zl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheS5oOgorICAgICAgICAoUGxhdGZv
cm0pOgorICAgICAgICAoQmxhY2tCZXJyeSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAq
IEFwaS9XZWJPdmVybGF5T3ZlcnJpZGUuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJPdmVybGF5T3ZlcnJpZGU6OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgICogQXBpL1dl
Yk92ZXJsYXlPdmVycmlkZS5oOgorICAgICAgICAoUGxhdGZvcm0pOgorICAgICAgICAoQmxhY2tC
ZXJyeSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6YXV0b2ZpbGxUZXh0RmllbGQpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpyZW5kZXJUcmVlQXNUZXh0KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjppbml0KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OmxvYWQpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpsb2FkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViUGFnZTo6bG9hZEZpbGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQ
YWdlOjpkb3dubG9hZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlOjpsb2FkU3RyaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6
bG9hZFN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRl
OjpleGVjdXRlSmF2YVNjcmlwdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBh
Z2U6OmV4ZWN1dGVKYXZhU2NyaXB0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
UGFnZVByaXZhdGU6OmV4ZWN1dGVKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6ZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xhdGVk
V29ybGQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlSmF2
YVNjcmlwdEZ1bmN0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVBy
aXZhdGU6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6cmVtb3ZlT3JpZ2luQWNj
ZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjphdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpzeW5jUHJveHlDcmVkZW50
aWFsKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6Om5vdGlm
eVBvcHVwQXV0b2ZpbGxEaWFsb2cpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQ
YWdlUHJpdmF0ZTo6d2ViQ29udGV4dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2U6OnNldERhdGVUaW1lSW5wdXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlOjpzZXRDb2xvcklucHV0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
UGFnZTo6dGV4dEVuY29kaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFn
ZTo6Zm9yY2VkVGV4dEVuY29kaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
UGFnZTo6c2V0Rm9yY2VkVGV4dEVuY29kaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViUGFnZTo6dGl0bGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
OjpzZWxlY3RlZFRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpj
dXRTZWxlY3RlZFRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpp
bnNlcnRUZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6Z2V0QmFj
a0ZvcndhcmRMaXN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6b25D
ZXJ0aWZpY2F0ZVN0b3JlTG9jYXRpb25TZXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJQYWdlOjpkaXNwYXRjaEluc3BlY3Rvck1lc3NhZ2UpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZGlkQ2hhbmdlU2V0dGluZ3MpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjp0ZXh0SGFzQXR0cmlidXRlKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6c2V0QWxsb3dOb3RpZmljYXRpb24pOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZGVmYXVsdFVzZXJBZ2Vu
dCk6CisgICAgICAgICogQXBpL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBBcGkvV2ViUGFnZUNsaWVu
dC5oOgorICAgICAgICAqIEFwaS9XZWJQYWdlX3AuaDoKKyAgICAgICAgKFdlYlBhZ2VQcml2YXRl
KToKKyAgICAgICAgKiBBcGkvV2ViU2V0dGluZ3MuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJTZXR0aW5nczo6c3RhbmRhcmRTZXR0aW5ncyk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlNldHRpbmdzOjphZGRTdXBwb3J0ZWRPYmplY3RQbHVnaW5NSU1FVHlw
ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNldHRpbmdzOjppc1N1cHBvcnRl
ZE9iamVjdE1JTUVUeXBlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGlu
Z3M6OnNlcmlmRm9udEZhbWlseSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNl
dHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5KToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViU2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseSk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlNldHRpbmdzOjpzYW5zU2VyaWZGb250RmFtaWx5KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OnNldFNhbnNTZXJpZkZvbnRGYW1pbHkp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6c3RhbmRhcmRGb250
RmFtaWx5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OnNldFN0
YW5kYXJkRm9udEZhbWlseSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNldHRp
bmdzOjp1c2VyQWdlbnRTdHJpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJT
ZXR0aW5nczo6c2V0VXNlckFnZW50U3RyaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViU2V0dGluZ3M6OmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OnVzZXJTdHlsZVNoZWV0
U3RyaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OnNldFVz
ZXJTdHlsZVNoZWV0U3RyaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0
dGluZ3M6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJTZXR0aW5nczo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbik6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNldHRpbmdzOjpsb2NhbFN0b3JhZ2VQYXRoKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OnNldExvY2FsU3RvcmFnZVBhdGgp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6aW5kZXhlZERhdGFC
YXNlUGF0aCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNldHRpbmdzOjpzZXRJ
bmRleGVkRGF0YUJhc2VQYXRoKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0
dGluZ3M6OmRhdGFiYXNlUGF0aCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNl
dHRpbmdzOjpzZXREYXRhYmFzZVBhdGgpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJTZXR0aW5nczo6YXBwQ2FjaGVQYXRoKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViU2V0dGluZ3M6OnNldEFwcENhY2hlUGF0aCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlNldHRpbmdzOjpwYWdlR3JvdXBOYW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViU2V0dGluZ3M6OnNldFBhZ2VHcm91cE5hbWUpOgorICAgICAgICAqIEFwaS9XZWJT
ZXR0aW5ncy5oOgorICAgICAgICAqIEFwaS9XZWJTdHJpbmcuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIEFwaS9XZWJTdHJpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVu
dEJsYWNrQmVycnk6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bk9wZW5QYW5lbCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5Lmg6CisgICAg
ICAgIChDaHJvbWVDbGllbnRCbGFja0JlcnJ5KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
bGllbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoY2xpZW50RXh0ZW5zaW9uTWV0aG9kKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db2xvclBpY2tlckNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvclBpY2tlckNsaWVudDo6Q29sb3JQaWNrZXJDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3JQaWNrZXJDbGllbnQ6OmdlbmVyYXRlSFRNTCk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ29sb3JQaWNrZXJDbGllbnQuaDoKKyAgICAgICAgKFBsYXRmb3JtKToKKyAg
ICAgICAgKEJsYWNrQmVycnkpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKENvbG9yUGlj
a2VyQ2xpZW50KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DcmVkZW50aWFsTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsTWFuYWdlcjo6YXV0b2ZpbGxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ3JlZGVudGlhbE1h
bmFnZXIuaDoKKyAgICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKENyZWRlbnRpYWxNYW5hZ2Vy
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGVQaWNrZXJDbGllbnQ6OkRhdGVQaWNrZXJDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0ZVBpY2tlckNsaWVudDo6Z2VuZXJhdGVIVE1MKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50Lmg6CisgICAgICAgIChQbGF0Zm9ybSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChEYXRlUGlj
a2VyQ2xpZW50KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6Y3JlYXRlRG9jdW1lbnRMb2FkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaERpZEZp
bmlzaExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaENyZWF0ZVBhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaFdpbGxTZW5kUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6Omxv
YWRJY29uRXh0ZXJuYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnk6OnN0YXJ0RG93bmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnNob3cpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om9uUGVybWlzc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25DbGlj
a2VkKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
Lmg6CisgICAgICAgIChQbGF0Zm9ybSk6CisgICAgICAgIChOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RQb3B1cENsaWVudDo6U2VsZWN0UG9wdXBDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0UG9wdXBDbGllbnQ6OnVwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5oOgorICAgICAgICAoUGxhdGZvcm0pOgorICAg
ICAgICAoQmxhY2tCZXJyeSk6CisgICAgICAgIChTZWxlY3RQb3B1cENsaWVudCk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvVXNlck1lZGlhQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjp0b01lZGlhU3RyZWFtU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvTWVkaWFTdHJl
YW1EZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZWRpYUNsaWVudEltcGw6OnJl
cXVlc3RVc2VyTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhQ2xpZW50SW1wbDo6
Y2FuY2VsVXNlck1lZGlhUmVxdWVzdCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9BYm91dERh
dGEuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpjYWNoZVBhZ2UpOgorICAgICAg
ICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6Y29udmVydFN0cmluZ1RvV2NoYXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0Ojpjb252ZXJ0U3RyaW5nVG9XY2hhclZlY3Rvcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OmNvbnZlcnRTcGFubmFibGVTdHJpbmdUb1N0cmluZyk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OklucHV0SGFuZGxlcjo6bGVhcm5UZXh0KToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6SW5wdXRIYW5kbGVyOjpzcGVsbENoZWNraW5nUmVxdWVzdFByb2Nlc3NlZCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OklucHV0SGFuZGxlcjo6b3BlbkRhdGVQb3B1
cCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OklucHV0SGFuZGxlcjo6b3BlblNlbGVj
dFBvcHVwKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5wdXRIYW5kbGVyOjpzZXRU
ZXh0KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIuY3BwOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpTZWxlY3Rpb25IYW5kbGVyOjpzZWxlY3RlZFRleHQp
OgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvU2VsZWN0aW9uSGFuZGxlci5oOgorICAgICAgICAo
UGxhdGZvcm0pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNlbGVjdGlvbkhhbmRsZXIp
OgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvU3VyZmFjZVBvb2wuY3BwOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpTdXJmYWNlUG9vbDo6c2hhcmVkUGl4bWFwR3JvdXApOgorICAgICAg
ICAqIFdlYktpdFN1cHBvcnQvU3VyZmFjZVBvb2wuaDoKKyAgICAgICAgKFN1cmZhY2VQb29sKToK
KwogMjAxMi0xMC0xMyAgSmFrb2IgUGV0c292aXRzICA8anBldHNvdml0c0ByaW0uY29tPgogCiAg
ICAgICAgIFtCbGFja0JlcnJ5XSBGZXRjaCBibGl0IHJlY3RzIGZyb20gYSB2aWV3cG9ydCBhY2Nl
c3NvcgpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JsYWNrQmVy
cnlHbG9iYWwuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUs
MTIgQEAKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNp
bmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgotI2luY2x1ZGUgIldlYlN0
cmluZy5oIgogI2luY2x1ZGUgImJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
InJ1bnRpbWUvSlNMb2NrLmgiCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtRXhlY3V0YWJs
ZU1lc3NhZ2UuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NZXNzYWdlQ2xpZW50Lmg+
CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTEzNSwxMiArMTM1LDEyIEBAIHZvaWQgY2xlYXJN
ZW1vcnlDYWNoZXMoKQogICAgIGZvbnRDYWNoZSgpLT5pbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQg
Y2xlYXJBcHBDYWNoZShjb25zdCBXZWJTdHJpbmcmIHBhZ2VHcm91cE5hbWUpCit2b2lkIGNsZWFy
QXBwQ2FjaGUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGFnZUdyb3VwTmFt
ZSkKIHsKICAgICBjYWNoZVN0b3JhZ2UoKS5lbXB0eSgpOwogfQogCi12b2lkIGNsZWFyRGF0YWJh
c2UoY29uc3QgV2ViU3RyaW5nJiBwYWdlR3JvdXBOYW1lKQordm9pZCBjbGVhckRhdGFiYXNlKGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHBhZ2VHcm91cE5hbWUpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2Jh
bC5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0Js
YWNrQmVycnlHbG9iYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTggKzI2LDIwIEBACiAjZW5k
aWYKIAogbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3Bh
Y2UgUGxhdGZvcm0geworY2xhc3MgU3RyaW5nOworfQogCi1jbGFzcyBXZWJTdHJpbmc7CituYW1l
c3BhY2UgV2ViS2l0IHsKIAogQkxBQ0tCRVJSWV9FWFBPUlQgdm9pZCBnbG9iYWxJbml0aWFsaXpl
KCk7CiB2b2lkIGNvbGxlY3RKYXZhc2NyaXB0R2FyYmFnZU5vdygpOwogdm9pZCBjbGVhckNvb2tp
ZUNhY2hlKCk7CiBCTEFDS0JFUlJZX0VYUE9SVCB2b2lkIGNsZWFyTWVtb3J5Q2FjaGVzKCk7Ci12
b2lkIGNsZWFyQXBwQ2FjaGUoY29uc3QgV2ViU3RyaW5nJiBwYWdlR3JvdXBOYW1lKTsKK3ZvaWQg
Y2xlYXJBcHBDYWNoZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYWdlR3Jv
dXBOYW1lKTsKIHZvaWQgcmVvcGVuQWxsQXBwQ2FjaGVzKCk7CiB2b2lkIGNsb3NlQWxsQXBwQ2Fj
aGVzKCk7Ci12b2lkIGNsZWFyRGF0YWJhc2UoY29uc3QgV2ViU3RyaW5nJiBwYWdlR3JvdXBOYW1l
KTsKK3ZvaWQgY2xlYXJEYXRhYmFzZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiBwYWdlR3JvdXBOYW1lKTsKIHZvaWQgcmVvcGVuQWxsVHJhY2tlckRhdGFiYXNlcygpOwogdm9p
ZCBjbG9zZUFsbFRyYWNrZXJEYXRhYmFzZXMoKTsKIHZvaWQgdXBkYXRlT25saW5lU3RhdHVzKGJv
b2wgb25saW5lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSmF2YVNjcmlw
dFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
SmF2YVNjcmlwdFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL0phdmFTY3JpcHRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsMTAgKzQ1LDE1IEBAIEphdmFTY3JpcHRWYXJpYW50IEpTVmFsdWVSZWZUb0JsYWNrQmVycnkK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBrSlNUeXBlU3RyaW5nOiB7CiAgICAgICAgIEpTU3Ry
aW5nUmVmIHN0cmluZ1JlZiA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY3R4LCB2YWx1ZSwgMCk7Cisg
ICAgICAgIGlmICghc3RyaW5nUmVmKSB7CisgICAgICAgICAgICByZXR1cm5WYWx1ZS5zZXRTdHJp
bmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3Ry
aW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmdSZWYpOwogICAgICAgICBXVEY6OlZl
Y3RvcjxjaGFyPiBidWZmZXIoYnVmZmVyU2l6ZSk7Ci0gICAgICAgIEpTU3RyaW5nR2V0VVRGOENT
dHJpbmcoc3RyaW5nUmVmLCBidWZmZXIuZGF0YSgpLCBidWZmZXJTaXplKTsKLSAgICAgICAgcmV0
dXJuVmFsdWUuc2V0U3RyaW5nKFdlYlN0cmluZzo6ZnJvbVV0ZjgoYnVmZmVyLmRhdGEoKSkudXRm
OCgpLmNfc3RyKCkpOworICAgICAgICBzaXplX3QgcmMgPSBKU1N0cmluZ0dldFVURjhDU3RyaW5n
KHN0cmluZ1JlZiwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyU2l6ZSk7CisgICAgICAgIHJldHVyblZh
bHVlLnNldFN0cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKGJ1ZmZlci5kYXRhKCks
IHJjIC0gMSkpOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nUmVmKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2Uga0pTVHlwZU9iamVjdDoKQEAgLTc4LDcgKzgzLDcgQEAg
SlNWYWx1ZVJlZiBCbGFja0JlcnJ5SmF2YVNjcmlwdFZhcmlhbnRUbwogICAgICAgICByZWYgPSBK
U1ZhbHVlTWFrZU51bWJlcihjdHgsIHZhcmlhbnQuZG91YmxlVmFsdWUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSmF2YVNjcmlwdFZhcmlhbnQ6OlN0cmluZzogewotICAgICAgICBKU1N0
cmluZ1JlZiBzdHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh2YXJpYW50LnN0cmlu
Z1ZhbHVlKCkpOworICAgICAgICBKU1N0cmluZ1JlZiBzdHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyh2YXJpYW50LnN0cmluZ1ZhbHVlKCkuY19zdHIoKSk7CiAgICAgICAgIHJlZiA9
IEpTVmFsdWVNYWtlU3RyaW5nKGN0eCwgc3RyKTsKICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHN0
cik7CiAgICAgICAgIGJyZWFrOwpAQCAtOTMsNTYgKzk4LDQxIEBAIEpTVmFsdWVSZWYgQmxhY2tC
ZXJyeUphdmFTY3JpcHRWYXJpYW50VG8KIAogSmF2YVNjcmlwdFZhcmlhbnQ6OkphdmFTY3JpcHRW
YXJpYW50KCkKICAgICA6IG1fdHlwZShVbmRlZmluZWQpCi0gICAgLCBtX3N0cmluZ1ZhbHVlKDAp
CiB7CiB9CiAKIEphdmFTY3JpcHRWYXJpYW50OjpKYXZhU2NyaXB0VmFyaWFudChkb3VibGUgdmFs
dWUpCiAgICAgOiBtX3R5cGUoVW5kZWZpbmVkKQotICAgICwgbV9zdHJpbmdWYWx1ZSgwKQogewog
ICAgIHNldERvdWJsZSh2YWx1ZSk7CiB9CiAKIEphdmFTY3JpcHRWYXJpYW50OjpKYXZhU2NyaXB0
VmFyaWFudChpbnQgdmFsdWUpCiAgICAgOiBtX3R5cGUoVW5kZWZpbmVkKQotICAgICwgbV9zdHJp
bmdWYWx1ZSgwKQogewogICAgIHNldERvdWJsZSh2YWx1ZSk7CiB9CiAKLUphdmFTY3JpcHRWYXJp
YW50OjpKYXZhU2NyaXB0VmFyaWFudChjb25zdCBjaGFyKiB2YWx1ZSkKK0phdmFTY3JpcHRWYXJp
YW50OjpKYXZhU2NyaXB0VmFyaWFudChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiB2YWx1ZSkKICAgICA6IG1fdHlwZShVbmRlZmluZWQpCi0gICAgLCBtX3N0cmluZ1ZhbHVlKDAp
CiB7CiAgICAgc2V0U3RyaW5nKHZhbHVlKTsKIH0KIAotSmF2YVNjcmlwdFZhcmlhbnQ6OkphdmFT
Y3JpcHRWYXJpYW50KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLSAgICA6IG1fdHlwZShVbmRl
ZmluZWQpCi0gICAgLCBtX3N0cmluZ1ZhbHVlKDApCi17Ci0gICAgc2V0U3RyaW5nKHZhbHVlLmNf
c3RyKCkpOwotfQotCiBKYXZhU2NyaXB0VmFyaWFudDo6SmF2YVNjcmlwdFZhcmlhbnQoYm9vbCB2
YWx1ZSkKICAgICA6IG1fdHlwZShVbmRlZmluZWQpCi0gICAgLCBtX3N0cmluZ1ZhbHVlKDApCiB7
CiAgICAgc2V0Qm9vbGVhbih2YWx1ZSk7CiB9CiAKIEphdmFTY3JpcHRWYXJpYW50OjpKYXZhU2Ny
aXB0VmFyaWFudChjb25zdCBKYXZhU2NyaXB0VmFyaWFudCAmdikKICAgICA6IG1fdHlwZShVbmRl
ZmluZWQpCi0gICAgLCBtX3N0cmluZ1ZhbHVlKDApCiB7CiAgICAgdGhpcy0+b3BlcmF0b3I9KHYp
OwogfQogCiBKYXZhU2NyaXB0VmFyaWFudDo6fkphdmFTY3JpcHRWYXJpYW50KCkKIHsKLSAgICAv
LyBQcmV2ZW50IG1lbW9yeSBsZWFrcyBpZiB3ZSBoYXZlIHN0cmluZ3MKLSAgICBzZXRUeXBlKFVu
ZGVmaW5lZCk7CiB9CiAKIEphdmFTY3JpcHRWYXJpYW50JiBKYXZhU2NyaXB0VmFyaWFudDo6b3Bl
cmF0b3I9KGNvbnN0IEphdmFTY3JpcHRWYXJpYW50JiB2KQpAQCAtMTcxLDkgKzE2MSw4IEBAIEph
dmFTY3JpcHRWYXJpYW50JiBKYXZhU2NyaXB0VmFyaWFudDo6b3AKIHZvaWQgSmF2YVNjcmlwdFZh
cmlhbnQ6OnNldFR5cGUoY29uc3QgRGF0YVR5cGUmIHR5cGUpCiB7CiAgICAgaWYgKG1fdHlwZSA9
PSBTdHJpbmcpCi0gICAgICAgIGZyZWUobV9zdHJpbmdWYWx1ZSk7CisgICAgICAgIG1fc3RyaW5n
VmFsdWUgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpOwogICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgbV9zdHJpbmdWYWx1ZSA9IDA7CiB9CiAKIEphdmFTY3JpcHRW
YXJpYW50OjpEYXRhVHlwZSBKYXZhU2NyaXB0VmFyaWFudDo6dHlwZSgpIGNvbnN0CkBAIC0xOTIs
MTMgKzE4MSwxMyBAQCBkb3VibGUgSmF2YVNjcmlwdFZhcmlhbnQ6OmRvdWJsZVZhbHVlKCkgCiAg
ICAgcmV0dXJuIG1fZG91YmxlVmFsdWU7CiB9CiAKLXZvaWQgSmF2YVNjcmlwdFZhcmlhbnQ6OnNl
dFN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkKK3ZvaWQgSmF2YVNjcmlwdFZhcmlhbnQ6OnNldFN0
cmluZyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBz
ZXRUeXBlKFN0cmluZyk7Ci0gICAgbV9zdHJpbmdWYWx1ZSA9IHN0cmR1cCh2YWx1ZSk7CisgICAg
bV9zdHJpbmdWYWx1ZSA9IHZhbHVlOwogfQogCi1jaGFyKiBKYXZhU2NyaXB0VmFyaWFudDo6c3Ry
aW5nVmFsdWUoKSBjb25zdAorY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgSmF2
YVNjcmlwdFZhcmlhbnQ6OnN0cmluZ1ZhbHVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdHJp
bmdWYWx1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSmF2YVNjcmlw
dFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0ph
dmFTY3JpcHRWYXJpYW50LmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvSmF2YVNjcmlwdFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyAr
MjEsNyBAQAogCiAjaW5jbHVkZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgogCi0jaW5jbHVkZSA8c3Ry
aW5nPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
QmxhY2tCZXJyeSB7CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQyLDkgKzQyLDggQEAgcHVibGlj
OgogICAgIEphdmFTY3JpcHRWYXJpYW50KGNvbnN0IEphdmFTY3JpcHRWYXJpYW50Jik7CiAgICAg
SmF2YVNjcmlwdFZhcmlhbnQoZG91YmxlKTsKICAgICBKYXZhU2NyaXB0VmFyaWFudChpbnQpOwot
ICAgIEphdmFTY3JpcHRWYXJpYW50KGNvbnN0IGNoYXIqKTsKLSAgICBKYXZhU2NyaXB0VmFyaWFu
dChib29sKTsKLSAgICBKYXZhU2NyaXB0VmFyaWFudChjb25zdCBzdGQ6OnN0cmluZyYpOworICAg
IGV4cGxpY2l0IEphdmFTY3JpcHRWYXJpYW50KGJvb2wpOworICAgIEphdmFTY3JpcHRWYXJpYW50
KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmKTsKICAgICB+SmF2YVNjcmlwdFZh
cmlhbnQoKTsKIAogICAgIEphdmFTY3JpcHRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgSmF2YVNj
cmlwdFZhcmlhbnQmKTsKQEAgLTU1LDIwICs1NCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
b3VibGUoZG91YmxlKTsKICAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdDsKIAotICAgIHZv
aWQgc2V0U3RyaW5nKGNvbnN0IGNoYXIqKTsKLSAgICBjaGFyKiBzdHJpbmdWYWx1ZSgpIGNvbnN0
OworICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
KTsKKyAgICBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzdHJpbmdWYWx1ZSgp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXRCb29sZWFuKGJvb2wpOwogICAgIGJvb2wgYm9vbGVhblZh
bHVlKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgSmF2YVNjcmlwdFZhcmlhbnQoY29uc3QgY2hh
ciopOwogICAgIERhdGFUeXBlIG1fdHlwZTsKIAogICAgIHVuaW9uIHsKICAgICAgICAgYm9vbCBt
X2Jvb2xlYW5WYWx1ZTsKICAgICAgICAgZG91YmxlIG1fZG91YmxlVmFsdWU7Ci0gICAgICAgIGNo
YXIqIG1fc3RyaW5nVmFsdWU7CiAgICAgfTsKKworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcgbV9zdHJpbmdWYWx1ZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsMTkgKzI1LDE5IEBACiAjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgog
I2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9uX3Au
aCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bU1lc3NhZ2VDbGllbnQuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEJsYWNrQmVycnkgewogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1XZWJBbmltYXRpb24gV2ViQW5pbWF0aW9uOjpmYWRlQW5pbWF0
aW9uKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBk
dXJhdGlvbikKK1dlYkFuaW1hdGlvbiBXZWJBbmltYXRpb246OmZhZGVBbmltYXRpb24oY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbmFtZSwgZmxvYXQgZnJvbSwgZmxvYXQgdG8s
IGRvdWJsZSBkdXJhdGlvbikKIHsKICAgICBXZWJBbmltYXRpb24gdG1wOwotICAgIHRtcC5kLT5u
YW1lID0gU3RyaW5nKG5hbWUuaW1wbCgpKTsKKyAgICB0bXAuZC0+bmFtZSA9IG5hbWU7CiAgICAg
dG1wLmQtPmFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CiAgICAgdG1wLmQtPmFuaW1h
dGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwogICAgIHRtcC5kLT5rZXlmcmFtZXMgPSBLZXlm
cmFtZVZhbHVlTGlzdChBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CkBAIC00Nyw5ICs0Nyw5IEBA
IFdlYkFuaW1hdGlvbiBXZWJBbmltYXRpb246OmZhZGVBbmltYXRpb24KICAgICByZXR1cm4gdG1w
OwogfQogCi1XZWJTdHJpbmcgV2ViQW5pbWF0aW9uOjpuYW1lKCkgY29uc3QKK0JsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcgV2ViQW5pbWF0aW9uOjpuYW1lKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZC0+bmFtZS5pbXBsKCk7CisgICAgcmV0dXJuIGQtPm5hbWU7CiB9CiAKIFdlYkFuaW1hdGlv
bjo6V2ViQW5pbWF0aW9uKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
QW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJBbmltYXRpb24uaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBXZWJBbmltYXRpb25Qcml2YXRlOwogICovCiBjbGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBX
ZWJBbmltYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBXZWJBbmltYXRpb24gZmFkZUFuaW1h
dGlvbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUg
ZHVyYXRpb24pOworICAgIHN0YXRpYyBXZWJBbmltYXRpb24gZmFkZUFuaW1hdGlvbihjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBuYW1lLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywg
ZG91YmxlIGR1cmF0aW9uKTsKIAogICAgIFdlYkFuaW1hdGlvbigpOwogICAgIFdlYkFuaW1hdGlv
bihjb25zdCBXZWJBbmltYXRpb24mKTsKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAg
V2ViQW5pbWF0aW9uJiBvcGVyYXRvcj0oY29uc3QgV2ViQW5pbWF0aW9uJik7CiAKLSAgICBXZWJT
dHJpbmcgbmFtZSgpIGNvbnN0OworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgbmFt
ZSgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFdlYk92ZXJsYXk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkNvb2tpZUphci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJDb29raWVKYXIuY3BwCShy
ZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkNvb2tp
ZUphci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkNv
b2tpZU1hbmFnZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCkBAIC0zMywyNiArMzMsMjYgQEAgV2ViQ29va2llSmFyOjpXZWJDb29raWVK
YXIoKQogewogfQogCi1zdGQ6OnZlY3RvcjxXZWJTdHJpbmc+IFdlYkNvb2tpZUphcjo6Y29va2ll
cyhjb25zdCBjaGFyKiB1cmwpCitzdGQ6OnZlY3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nPiBXZWJDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgdXJsKQogewotICAgIEtVUkwga3VybCA9IEtVUkwoS1VSTCgpLCBTdHJpbmcodXJsKSk7
CisgICAgS1VSTCBrdXJsID0gS1VSTChLVVJMKCksIHVybCk7CiAKICAgICBWZWN0b3I8UGFyc2Vk
Q29va2llKj4gcmF3Q29va2llczsKICAgICBjb29raWVNYW5hZ2VyKCkuZ2V0UmF3Q29va2llcyhy
YXdDb29raWVzLCBrdXJsLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKIAotICAgIHN0ZDo6dmVjdG9y
PFdlYlN0cmluZz4gcmVzdWx0OworICAgIHN0ZDo6dmVjdG9yPEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmc+IHJlc3VsdDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJhd0Nvb2tpZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5wdXNoX2JhY2soV2ViU3RyaW5nKHJhd0Nvb2tp
ZXNbaV0tPnRvTmFtZVZhbHVlUGFpcigpLmltcGwoKSkpOworICAgICAgICByZXN1bHQucHVzaF9i
YWNrKHJhd0Nvb2tpZXNbaV0tPnRvTmFtZVZhbHVlUGFpcigpKTsKIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgV2ViQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IGNoYXIqIHVybCwg
Y29uc3Qgc3RkOjp2ZWN0b3I8V2ViU3RyaW5nPiYgY29va2llcykKK3ZvaWQgV2ViQ29va2llSmFy
OjpzZXRDb29raWVzKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwgY29u
c3Qgc3RkOjp2ZWN0b3I8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4mIGNvb2tpZXMpCiB7
Ci0gICAgS1VSTCBrdXJsID0gS1VSTChLVVJMKCksIFN0cmluZyh1cmwpKTsKKyAgICBLVVJMIGt1
cmwgPSBLVVJMKEtVUkwoKSwgdXJsKTsKICAgICBWZWN0b3I8U3RyaW5nPiBjb3JlQ29va2llczsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvb2tpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGNvcmVDb29raWVzLmFwcGVuZChTdHJpbmcoY29va2llc1tpXS5pbXBsKCkpKTsKKyAgICAgICAg
Y29yZUNvb2tpZXMuYXBwZW5kKGNvb2tpZXNbaV0pOwogICAgIGNvb2tpZU1hbmFnZXIoKS5zZXRD
b29raWVzKGt1cmwsIGNvcmVDb29raWVzLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJDb29raWVKYXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkNvb2tpZUphci5oCShyZXZpc2lv
biAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkNvb2tpZUphci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMCArMjQsMTMgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAK
IG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBTdHJp
bmc7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlOwotY2xhc3MgV2Vi
U3RyaW5nOwogCiAvKioKICAqIFJlcHJlc2VudHMgdGhlIGNvb2tpZSBkYXRhYmFzZS4KQEAgLTQx
LDcgKzQ0LDcgQEAgcHVibGljOgogICAgICAqCiAgICAgICogQWxsIGNvb2tpZXMgd2hvc2UgZG9t
YWluIGFuZCBwYXRoIG1hdGNoIHRoZSBwcm92aWRlZCBVUkwgd2lsbCBiZSByZXR1cm5lZC4KICAg
ICAgKi8KLSAgICBzdGQ6OnZlY3RvcjxXZWJTdHJpbmc+IGNvb2tpZXMoY29uc3QgY2hhciogdXJs
KTsKKyAgICBzdGQ6OnZlY3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiBjb29raWVz
KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCk7CiAKICAgICAvKioKICAg
ICAgKiBUaGlzIHdpbGwgYWRkIHRoZSBjb29raWVzIHByb3ZpZGVkIGluIHRoZSBsaXN0IHRvIHRo
ZSBjb29raWUgZGF0YWJhc2UuCkBAIC01Miw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICAgKiBJZiBu
byBkb21haW4gYW5kL29yIHBhdGggaXMgcHJvdmlkZWQgaW4gYSBjb29raWUsIHRoZSBkb21haW4g
YW5kL29yIHBhdGgKICAgICAgKiB3aWxsIGJlIGluZmVycmVkIGZyb20gdGhlIHByb3ZpZGVkIFVS
TC4KICAgICAgKi8KLSAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgY2hhciogdXJsLCBjb25zdCBz
dGQ6OnZlY3RvcjxXZWJTdHJpbmc+JiBjb29raWVzKTsKKyAgICB2b2lkIHNldENvb2tpZXMoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsLCBjb25zdCBzdGQ6OnZlY3RvcjxC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgY29va2llcyk7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFdlYlBhZ2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L1dlYktpdE1JTUVUeXBlQ29udmVydGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYktpdE1JTUVUeXBlQ29udmVydGVyLmNwcAkocmV2aXNpb24gMTMx
MjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRNSU1FVHlwZUNvbnZl
cnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDM2ICsyMCwyMyBAQAogI2luY2x1ZGUgIldl
YktpdE1JTUVUeXBlQ29udmVydGVyLmgiCiAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgQmxhY2tCZXJyeSB7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotYm9vbCBnZXRFeHRlbnNpb25G
b3JNaW1lVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZSwgc3RkOjpzdHJpbmcmIGV4dGVuc2lv
bikKK2Jvb2wgZ2V0RXh0ZW5zaW9uRm9yTWltZVR5cGUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyYgbWltZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZXh0ZW5zaW9u
KQogewotICAgIFN0cmluZyBtaW1lVHlwZShtaW1lLmRhdGEoKSwgbWltZS5sZW5ndGgoKSk7Ci0g
ICAgU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbiA9IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6
OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBpZiAocHJl
ZmVycmVkRXh0ZW5zaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Q1N0cmluZyB1dGY4ID0gcHJlZmVycmVkRXh0ZW5zaW9uLnV0ZjgoKTsKLSAgICBleHRlbnNpb24u
Y2xlYXIoKTsKLSAgICBleHRlbnNpb24uYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBleHRlbnNpb24gPSBXZWJDb3JlOjpNSU1FVHlwZVJl
Z2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1lKTsKKyAgICByZXR1
cm4gIWV4dGVuc2lvbi5lbXB0eSgpOwogfQogCi1ib29sIGdldE1pbWVUeXBlRm9yRXh0ZW5zaW9u
KGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRlbnNpb24sIHN0ZDo6c3RyaW5nJiBtaW1lVHlwZSkKK2Jv
b2wgZ2V0TWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgZXh0ZW5zaW9uLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtaW1lVHlwZSkK
IHsKLSAgICBTdHJpbmcgZXh0U3RyKGV4dGVuc2lvbi5kYXRhKCksIGV4dGVuc2lvbi5sZW5ndGgo
KSk7Ci0gICAgU3RyaW5nIG1pbWUgPSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNZWRp
YU1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dFN0cik7Ci0gICAgaWYgKG1pbWUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIHV0ZjggPSBtaW1lLnV0ZjgoKTsK
LSAgICBtaW1lVHlwZS5jbGVhcigpOwotICAgIG1pbWVUeXBlLmFwcGVuZCh1dGY4LmRhdGEoKSwg
dXRmOC5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbWltZVR5cGUgPSBXZWJDb3Jl
OjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNZWRpYU1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lv
bik7CisgICAgcmV0dXJuICFtaW1lVHlwZS5lbXB0eSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0TUlNRVR5cGVD
b252ZXJ0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dl
YktpdE1JTUVUeXBlQ29udmVydGVyLmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0TUlNRVR5cGVDb252ZXJ0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjAsMTMgKzIwLDE2IEBACiAjZGVmaW5lIFdlYktpdE1JTUVUeXBlQ29udmVydGVyX2gK
IAogI2luY2x1ZGUgIkJsYWNrQmVycnlHbG9iYWwuaCIKLSNpbmNsdWRlIDxzdHJpbmc+CiAKIG5h
bWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBTdHJpbmc7
Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1CTEFDS0JFUlJZX0VYUE9SVCBib29sIGdldEV4
dGVuc2lvbkZvck1pbWVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lLCBzdGQ6OnN0cmluZyYg
ZXh0ZW5zaW9uKTsKLUJMQUNLQkVSUllfRVhQT1JUIGJvb2wgZ2V0TWltZVR5cGVGb3JFeHRlbnNp
b24oY29uc3Qgc3RkOjpzdHJpbmcmIGV4dGVuc2lvbiwgc3RkOjpzdHJpbmcmIG1pbWVUeXBlKTsK
K0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgZ2V0RXh0ZW5zaW9uRm9yTWltZVR5cGUoY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWltZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgZXh0ZW5zaW9uKTsKK0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgZ2V0TWltZVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZXh0ZW5zaW9uLCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtaW1lVHlwZSk7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQpJbmRleDogU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcAkocmV2aXNpb24gMTMxMjQ4
KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5j
bHVkZSAiVGV4dENvZGVjSUNVLmgiCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTkyLDcgKzkzLDcgQEAgV1RGOjpC
YXNlNjREZWNvZGVQb2xpY3kgYmFzZTY0RGVjb2RlUG9saQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXVEY6OkJhc2U2NERlY29kZVBvbGljeT4ocG9saWN5KTsKIH0KIAotYm9vbCBiYXNlNjREZWNv
ZGUoY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2U2NCwgc3RkOjp2ZWN0b3I8Y2hhcj4mIGJpbmFyeSwg
QmFzZTY0RGVjb2RlUG9saWN5IHBvbGljeSkKK2Jvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGJhc2U2NCwgc3RkOjp2ZWN0b3I8Y2hhcj4mIGJpbmFy
eSwgQmFzZTY0RGVjb2RlUG9saWN5IHBvbGljeSkKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0
OwogICAgIGlmICghV1RGOjpiYXNlNjREZWNvZGUoYmFzZTY0LmNfc3RyKCksIGJhc2U2NC5sZW5n
dGgoKSwgcmVzdWx0LCBiYXNlNjREZWNvZGVQb2xpY3lGb3JXVEYocG9saWN5KSkpCkBAIC0xMTAs
MzcgKzExMSwyNiBAQCBXVEY6OkJhc2U2NERlY29kZVBvbGljeSBiYXNlNjRFbmNvZGVQb2xpCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdURjo6QmFzZTY0RW5jb2RlUG9saWN5Pihwb2xpY3kpOwog
fQogCi1ib29sIGJhc2U2NEVuY29kZShjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiYgYmluYXJ5LCBz
dGQ6OnN0cmluZyYgYmFzZTY0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorYm9vbCBiYXNl
NjRFbmNvZGUoY29uc3Qgc3RkOjp2ZWN0b3I8Y2hhcj4mIGJpbmFyeSwgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyYgYmFzZTY0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQogewogICAg
IFZlY3RvcjxjaGFyPiByZXN1bHQ7CiAgICAgcmVzdWx0LmFwcGVuZCgmYmluYXJ5WzBdLCBiaW5h
cnkuc2l6ZSgpKTsKIAogICAgIFdURjo6YmFzZTY0RW5jb2RlKCZiaW5hcnlbMF0sIGJpbmFyeS5z
aXplKCksIHJlc3VsdCwgYmFzZTY0RW5jb2RlUG9saWN5Rm9yV1RGKHBvbGljeSkpOwogCi0gICAg
YmFzZTY0LmNsZWFyKCk7Ci0gICAgYmFzZTY0LmFwcGVuZCgmcmVzdWx0WzBdLCByZXN1bHQuc2l6
ZSgpKTsKKyAgICBiYXNlNjQgPSBCbGFja2JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKCZyZXN1bHRb
MF0sIHJlc3VsdC5zaXplKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgdW5lc2Nh
cGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIGVzY2FwZWQsIHN0ZDo6c3RyaW5nJiB1cmwpCit2b2lk
IHVuZXNjYXBlVVJMKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGVzY2FwZWQs
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCkKIHsKLSAgICBTdHJpbmcgZXNjYXBl
ZFN0cmluZyhlc2NhcGVkLmRhdGEoKSwgZXNjYXBlZC5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIHVy
bFN0cmluZyA9IFdlYkNvcmU6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhlc2NhcGVkU3RyaW5n
KTsKLSAgICBDU3RyaW5nIHV0ZjggPSB1cmxTdHJpbmcudXRmOCgpOwotCi0gICAgdXJsLmNsZWFy
KCk7Ci0gICAgdXJsLmFwcGVuZCh1dGY4LmRhdGEoKSwgdXRmOC5sZW5ndGgoKSk7CisgICAgdXJs
ID0gV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGVzY2FwZWQpOwogfQogCi12b2lk
IGVzY2FwZVVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBzdGQ6OnN0cmluZyYgZXNjYXBlZCkK
K3ZvaWQgZXNjYXBlVVJMKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZXNjYXBlZCkKIHsKLSAgICBTdHJpbmcgdXJs
U3RyaW5nKHVybC5kYXRhKCksIHVybC5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIGVzY2FwZWRTdHJp
bmcgPSBXZWJDb3JlOjplbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHVybFN0cmluZyk7Ci0g
ICAgQ1N0cmluZyB1dGY4ID0gZXNjYXBlZFN0cmluZy51dGY4KCk7Ci0KLSAgICBlc2NhcGVkLmNs
ZWFyKCk7Ci0gICAgZXNjYXBlZC5hcHBlbmQodXRmOC5kYXRhKCksIHV0ZjgubGVuZ3RoKCkpOwor
ICAgIGVzY2FwZWQgPSBXZWJDb3JlOjplbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHVybCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMCwxMCArMjAsMTMgQEAKICNkZWZpbmUgV2ViS2l0VGV4dENvZGVjX2gKIAogI2luY2x1
ZGUgIkJsYWNrQmVycnlHbG9iYWwuaCIKLSNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVj
dG9yPgogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworY2xh
c3MgU3RyaW5nOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogZW51bSBUcmFuc2NvZGVSZXN1
bHQgewpAQCAtNDksMTEgKzUyLDExIEBAIEJMQUNLQkVSUllfRVhQT1JUIGJvb2wgaXNTYW1lRW5j
b2RpbmcoY28KIEJMQUNLQkVSUllfRVhQT1JUIGJvb2wgaXNBU0NJSUNvbXBhdGlibGVFbmNvZGlu
Zyhjb25zdCBjaGFyKiBlbmNvZGluZyk7CiBCTEFDS0JFUlJZX0VYUE9SVCBUcmFuc2NvZGVSZXN1
bHQgdHJhbnNjb2RlKGNvbnN0IGNoYXIqIHNvdXJjZUVuY29kaW5nLCBjb25zdCBjaGFyKiB0YXJn
ZXRFbmNvZGluZywgY29uc3QgY2hhciomIHNvdXJjZVN0YXJ0LCBpbnQgc291cmNlTGVuZ3RoLCBj
aGFyKiYgdGFyZ2V0U3RhcnQsIHVuc2lnbmVkIHRhcmdldExlbmd0aCk7CiAKLUJMQUNLQkVSUllf
RVhQT1JUIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlNjQsIHN0ZDo6
dmVjdG9yPGNoYXI+JiBiaW5hcnksIEJhc2U2NERlY29kZVBvbGljeSk7Ci1CTEFDS0JFUlJZX0VY
UE9SVCBib29sIGJhc2U2NEVuY29kZShjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiYgYmluYXJ5LCBz
dGQ6OnN0cmluZyYgYmFzZTY0LCBCYXNlNjRFbmNvZGVQb2xpY3kpOworQkxBQ0tCRVJSWV9FWFBP
UlQgYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYg
YmFzZTY0LCBzdGQ6OnZlY3RvcjxjaGFyPiYgYmluYXJ5LCBCYXNlNjREZWNvZGVQb2xpY3kpOwor
QkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBiYXNlNjRFbmNvZGUoY29uc3Qgc3RkOjp2ZWN0b3I8Y2hh
cj4mIGJpbmFyeSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgYmFzZTY0LCBCYXNlNjRF
bmNvZGVQb2xpY3kpOwogCi1CTEFDS0JFUlJZX0VYUE9SVCB2b2lkIHVuZXNjYXBlVVJMKGNvbnN0
IHN0ZDo6c3RyaW5nJiBlc2NhcGVkLCBzdGQ6OnN0cmluZyYgdXJsKTsKLUJMQUNLQkVSUllfRVhQ
T1JUIHZvaWQgZXNjYXBlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwsIHN0ZDo6c3RyaW5nJiBl
c2NhcGVkKTsKK0JMQUNLQkVSUllfRVhQT1JUIHZvaWQgdW5lc2NhcGVVUkwoY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZXNjYXBlZCwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgdXJsKTsKK0JMQUNLQkVSUllfRVhQT1JUIHZvaWQgZXNjYXBlVVJMKGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyYgZXNjYXBlZCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogfSAvLyBuYW1lc3BhY2UgQmxh
Y2tCZXJyeQpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXku
Y3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dl
Yk92ZXJsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSAi
V2ViUGFnZUNvbXBvc2l0b3JDbGllbnQuaCIKICNpbmNsdWRlICJXZWJQYWdlQ29tcG9zaXRvcl9w
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKICNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NZXNzYWdlQ2xpZW50Lmg+CisjaW5jbHVkZSA8Qmxh
Y2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5jbHVk
ZSA8U2tEZXZpY2UuaD4KIApAQCAtMTM3LDkgKzEzNyw5IEBAIHZvaWQgV2ViT3ZlcmxheTo6YWRk
QW5pbWF0aW9uKGNvbnN0IFdlYkEKICAgICBkLT5hZGRBbmltYXRpb24oYW5pbWF0aW9uLmQtPm5h
bWUsIGFuaW1hdGlvbi5kLT5hbmltYXRpb24uZ2V0KCksIGFuaW1hdGlvbi5kLT5rZXlmcmFtZXMp
OwogfQogCi12b2lkIFdlYk92ZXJsYXk6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBXZWJTdHJpbmcm
IG5hbWUpCit2b2lkIFdlYk92ZXJsYXk6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiBuYW1lKQogewotICAgIGQtPnJlbW92ZUFuaW1hdGlvbihTdHJp
bmcoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPihuYW1lLmltcGwoKSkpKTsKKyAgICBkLT5yZW1vdmVB
bmltYXRpb24obmFtZSk7CiB9CiAKIFdlYk92ZXJsYXkqIFdlYk92ZXJsYXk6OnBhcmVudCgpIGNv
bnN0CkBAIC03NTQsNyArNzU0LDcgQEAgdm9pZCBXZWJPdmVybGF5OjphZGRBbmltYXRpb24oY29u
c3QgV2ViQQogewogfQogCi12b2lkIFdlYk92ZXJsYXk6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBX
ZWJTdHJpbmcmKQordm9pZCBXZWJPdmVybGF5OjpyZW1vdmVBbmltYXRpb24oY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksMTAgQEAgY2xhc3MgR3JhcGhpY3NMYXllckNsaWVudDsKIH0KIAogbmFtZXNwYWNlIEJsYWNr
QmVycnkgeworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIFN0cmluZzsKK30KKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkFuaW1hdGlvbjsKQEAgLTM2LDcgKzQwLDYgQEAgY2xh
c3MgV2ViT3ZlcmxheUNsaWVudDsKIGNsYXNzIFdlYk92ZXJsYXlPdmVycmlkZTsKIGNsYXNzIFdl
Yk92ZXJsYXlQcml2YXRlOwogY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlN0cmluZzsKIAogLyoq
CiAgKiBSZXByZXNlbnRzIGFuIG92ZXJsYXkgdGhhdCBpcyByZW5kZXJlZCBzdXBlcmltcG9zZWQg
b24gYSB3ZWIgcGFnZS4KQEAgLTkwLDEwICs5MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRP
cGFjaXR5KGZsb2F0KTsKIAogICAgIC8vIEFkZHMvcmVtb3ZlcyBhbiBhbmltYXRpb24KLSAgICAv
LyBOb3RlIHRoYXQgV2ViQW5pbWF0aW9uIGFuZCBXZWJTdHJpbmcgYXJlIG5vdCB0aHJlYWQgc2Fm
ZSBhbmQgaGF2ZSB0byBiZQorICAgIC8vIE5vdGUgdGhhdCBXZWJBbmltYXRpb24gYW5kIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgYXJlIG5vdCB0aHJlYWQgc2FmZSBhbmQgaGF2ZSB0byBi
ZQogICAgIC8vIGNyZWF0ZWQgb24gdGhlIHRocmVhZCB3aGVyZSB0aGV5J2xsIGJlIHVzZWQuCiAg
ICAgdm9pZCBhZGRBbmltYXRpb24oY29uc3QgV2ViQW5pbWF0aW9uJik7Ci0gICAgdm9pZCByZW1v
dmVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlbW92ZUFuaW1h
dGlvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBuYW1lKTsKIAogICAgIFdl
Yk92ZXJsYXkqIHBhcmVudCgpIGNvbnN0OwogICAgIGJvb2wgYWRkQ2hpbGQoV2ViT3ZlcmxheSop
OwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5T3ZlcnJpZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3Zlcmxh
eU92ZXJyaWRlLmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJPdmVybGF5T3ZlcnJpZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsy
NCw5IEBACiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9u
X3AuaCIKICNpbmNsdWRlICJXZWJPdmVybGF5X3AuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIK
IAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1lc3NhZ2VDbGllbnQuaD4KKyNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KIAogbmFtZXNwYWNlIEJsYWNrQmVycnkgewpAQCAtODYsOSArODYsOSBAQCB2b2lkIFdlYk92
ZXJsYXlPdmVycmlkZTo6YWRkQW5pbWF0aW9uKGNvCiAgICAgZC0+c2NoZWR1bGVDb21wb3NpdGlu
Z1J1bigpOwogfQogCi12b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6cmVtb3ZlQW5pbWF0aW9uKGNv
bnN0IFdlYlN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpyZW1vdmVBbmlt
YXRpb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbmFtZSkKIHsKLSAgICBk
LT5sYXllckNvbXBvc2l0aW5nVGhyZWFkKCktPm92ZXJyaWRlKCktPnJlbW92ZUFuaW1hdGlvbihT
dHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPihuYW1lLmltcGwoKSkpKTsKKyAgICBkLT5sYXll
ckNvbXBvc2l0aW5nVGhyZWFkKCktPm92ZXJyaWRlKCktPnJlbW92ZUFuaW1hdGlvbihuYW1lKTsK
ICAgICBkLT5zY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7CiB9CiAKQEAgLTEzMCw3ICsxMzAsNyBA
QCB2b2lkIFdlYk92ZXJsYXlPdmVycmlkZTo6YWRkQW5pbWF0aW9uKGNvCiB7CiB9CiAKLXZvaWQg
V2ViT3ZlcmxheU92ZXJyaWRlOjpyZW1vdmVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5nJikKK3Zv
aWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpyZW1vdmVBbmltYXRpb24oY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvV2ViT3ZlcmxheU92ZXJyaWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5T3ZlcnJpZGUuaAkocmV2aXNpb24gMTMxMjQ4KQorKysg
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5T3ZlcnJpZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsMTYgKzI0LDE5IEBACiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
UHJpbWl0aXZlcy5oPgogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZv
cm0geworY2xhc3MgU3RyaW5nOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2Vi
QW5pbWF0aW9uOwogY2xhc3MgV2ViT3ZlcmxheVByaXZhdGU7Ci1jbGFzcyBXZWJTdHJpbmc7CiAK
IC8qKgogICogQ29tcG9zaXRpbmcgdGhyZWFkIG9ubHkKICAqCi0gKiBOb3RlIHRoYXQgdGhlIFdl
YkFuaW1hdGlvbiBhbmQgV2ViU3RyaW5nIGNsYXNzZXMgYXJlIG5vdCB0aHJlYWQgc2FmZSwgYnV0
CisgKiBOb3RlIHRoYXQgdGhlIFdlYkFuaW1hdGlvbiBjbGFzcyBpcyBub3QgdGhyZWFkIHNhZmUs
IGJ1dAogICogcmVlbnRyYW50LCBhbmQgaGF2ZSB0byBiZSBjcmVhdGVkIG9uIHRoZSB0aHJlYWQg
d2hlcmUgdGhleSdsbCBiZSB1c2VkLgogICovCiBjbGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJP
dmVybGF5T3ZlcnJpZGUgewpAQCAtNDksNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRP
cGFjaXR5KGZsb2F0KTsKIAogICAgIHZvaWQgYWRkQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlv
biYpOwotICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdlYlN0cmluZyYgbmFtZSk7Cisg
ICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyYgbmFtZSk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYk92ZXJsYXlQcml2YXRl
OwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCShyZXZpc2lv
biAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzIsMTIgKzMzMiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRl
ZiBEZWZlcnJlZFRhc2s8aXNBY3RpdmU+IERlZmVycmVkVGFza1R5cGU7CiB9OwogCi12b2lkIFdl
YlBhZ2U6OmF1dG9maWxsVGV4dEZpZWxkKGNvbnN0IHN0cmluZyYgaXRlbSkKK3ZvaWQgV2ViUGFn
ZTo6YXV0b2ZpbGxUZXh0RmllbGQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYg
aXRlbSkKIHsKICAgICBpZiAoIWQtPm1fd2ViU2V0dGluZ3MtPmlzRm9ybUF1dG9maWxsRW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkLT5tX2F1dG9maWxsTWFuYWdlci0+YXV0b2Zp
bGxUZXh0RmllbGQoaXRlbS5jX3N0cigpKTsKKyAgICBkLT5tX2F1dG9maWxsTWFuYWdlci0+YXV0
b2ZpbGxUZXh0RmllbGQoaXRlbSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZW5hYmxlUW54SmF2YVNj
cmlwdE9iamVjdChib29sIGVuYWJsZWQpCkBAIC0zNDUsMTAgKzM0NSw5IEBAIHZvaWQgV2ViUGFn
ZTo6ZW5hYmxlUW54SmF2YVNjcmlwdE9iamVjdCgKICAgICBkLT5tX2VuYWJsZVFueEphdmFTY3Jp
cHRPYmplY3QgPSBlbmFibGVkOwogfQogCi1XZWJTdHJpbmcgV2ViUGFnZTo6cmVuZGVyVHJlZUFz
VGV4dCgpCitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlBhZ2U6OnJlbmRlclRyZWVB
c1RleHQoKQogewotICAgIFN0cmluZyByZXN1bHQgPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKGQt
Pm1fbWFpbkZyYW1lKTsKLSAgICByZXR1cm4gV2ViU3RyaW5nKHJlc3VsdC5pbXBsKCkpOworICAg
IHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKGQtPm1fbWFpbkZyYW1lKTsKIH0KIAogV2Vi
UGFnZVByaXZhdGU6OldlYlBhZ2VQcml2YXRlKFdlYlBhZ2UqIHdlYlBhZ2UsIFdlYlBhZ2VDbGll
bnQqIGNsaWVudCwgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTQ0MSw3ICs0NDAsNyBAQCBXZWJQ
YWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUoV2ViUGFnZSogCiAgICAgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VNYW5hZ2VyOjppbnN0YW5jZSgpLT5wYWdlQ3JlYXRlZCh0aGlzKTsKIH0KIAotV2Vi
UGFnZTo6V2ViUGFnZShXZWJQYWdlQ2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYlN0cmluZyYgcGFn
ZUdyb3VwTmFtZSwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpCitXZWJQYWdlOjpXZWJQ
YWdlKFdlYlBhZ2VDbGllbnQqIGNsaWVudCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgcGFnZUdyb3VwTmFtZSwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpCiB7CiAg
ICAgZ2xvYmFsSW5pdGlhbGl6ZSgpOwogICAgIGQgPSBuZXcgV2ViUGFnZVByaXZhdGUodGhpcywg
Y2xpZW50LCByZWN0KTsKQEAgLTUwNiw3ICs1MDUsNyBAQCBQYWdlKiBXZWJQYWdlUHJpdmF0ZTo6
Y29yZShjb25zdCBXZWJQYWdlCiAgICAgcmV0dXJuIHdlYlBhZ2UtPmQtPm1fcGFnZTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJpdmF0ZTo6aW5pdChjb25zdCBXZWJTdHJpbmcmIHBhZ2VHcm91cE5hbWUp
Cit2b2lkIFdlYlBhZ2VQcml2YXRlOjppbml0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIHBhZ2VHcm91cE5hbWUpCiB7CiAgICAgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeSogY2hy
b21lQ2xpZW50ID0gbmV3IENocm9tZUNsaWVudEJsYWNrQmVycnkodGhpcyk7CiAgICAgQ29udGV4
dE1lbnVDbGllbnRCbGFja0JlcnJ5KiBjb250ZXh0TWVudUNsaWVudCA9IDA7CkBAIC02NTgsNyAr
NjU3LDcgQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi12b2lkIFdlYlBhZ2VQcml2YXRlOjpsb2Fk
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogbmV0d29ya1Rva2VuLCBjb25zdCBjaGFyKiBt
ZXRob2QsIFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3ks
IGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCBjb25zdCBjaGFyKiBjb25zdCog
aGVhZGVycywgc2l6ZV90IGhlYWRlcnNMZW5ndGgsIGJvb2wgaXNJbml0aWFsLCBib29sIG11c3RI
YW5kbGVJbnRlcm5hbGx5LCBib29sIGZvcmNlRG93bmxvYWQsIGNvbnN0IGNoYXIqIG92ZXJyaWRl
Q29udGVudFR5cGUsIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZFNhdmVOYW1lKQordm9pZCBXZWJQYWdl
UHJpdmF0ZTo6bG9hZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB1cmwsIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG5ldHdvcmtUb2tlbiwgY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWV0aG9kLCBQbGF0Zm9ybTo6TmV0d29ya1JlcXVl
c3Q6OkNhY2hlUG9saWN5IGNhY2hlUG9saWN5LCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0
YUxlbmd0aCwgY29uc3QgY2hhciogY29uc3QqIGhlYWRlcnMsIHNpemVfdCBoZWFkZXJzTGVuZ3Ro
LCBib29sIGlzSW5pdGlhbCwgYm9vbCBtdXN0SGFuZGxlSW50ZXJuYWxseSwgYm9vbCBmb3JjZURv
d25sb2FkLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBvdmVycmlkZUNvbnRl
bnRUeXBlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzdWdnZXN0ZWRTYXZl
TmFtZSkKIHsKICAgICBzdG9wQ3VycmVudExvYWQoKTsKICAgICBEZWZlcnJlZFRhc2tMb2FkTWFu
dWFsU2NyaXB0OjpmaW5pc2hPckNhbmNlbCh0aGlzKTsKQEAgLTY4OSw3ICs2ODgsNyBAQCB2b2lk
IFdlYlBhZ2VQcml2YXRlOjpsb2FkKGNvbnN0IGNoYXIqIHVyCiAgICAgICAgIHJlcXVlc3Quc2V0
TXVzdEhhbmRsZUludGVybmFsbHkodHJ1ZSk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1l
dGhvZCk7CiAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeSh0b1dlYkNvcmVDYWNoZVBvbGljeShj
YWNoZVBvbGljeSkpOwotICAgIGlmIChvdmVycmlkZUNvbnRlbnRUeXBlKQorICAgIGlmICghb3Zl
cnJpZGVDb250ZW50VHlwZS5lbXB0eSgpKQogICAgICAgICByZXF1ZXN0LnNldE92ZXJyaWRlQ29u
dGVudFR5cGUob3ZlcnJpZGVDb250ZW50VHlwZSk7CiAKICAgICBpZiAoZGF0YSkKQEAgLTcwNiw3
ICs3MDUsNyBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpsb2FkKGNvbnN0IGNoYXIqIHVyCiAgICAg
bV9tYWluRnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsICIiIC8qIG5hbWUgKi8sIGZhbHNl
KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpsb2FkKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
bmV0d29ya1Rva2VuLCBib29sIGlzSW5pdGlhbCkKK3ZvaWQgV2ViUGFnZTo6bG9hZChjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB1cmwsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmcmIG5ldHdvcmtUb2tlbiwgYm9vbCBpc0luaXRpYWwpCiB7CiAgICAgZC0+bG9h
ZCh1cmwsIG5ldHdvcmtUb2tlbiwgIkdFVCIsIFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6VXNl
UHJvdG9jb2xDYWNoZVBvbGljeSwgMCwgMCwgMCwgMCwgaXNJbml0aWFsLCBmYWxzZSk7CiB9CkBA
IC03MTYsMTUgKzcxNSwxNSBAQCB2b2lkIFdlYlBhZ2U6OmxvYWRFeHRlbmRlZChjb25zdCBjaGFy
KiB1CiAgICAgZC0+bG9hZCh1cmwsIG5ldHdvcmtUb2tlbiwgbWV0aG9kLCBjYWNoZVBvbGljeSwg
ZGF0YSwgZGF0YUxlbmd0aCwgaGVhZGVycywgaGVhZGVyc0xlbmd0aCwgZmFsc2UsIG11c3RIYW5k
bGVJbnRlcm5hbGx5LCBmYWxzZSwgIiIpOwogfQogCi12b2lkIFdlYlBhZ2U6OmxvYWRGaWxlKGNv
bnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG92ZXJyaWRlQ29udGVudFR5cGUpCit2b2lkIFdl
YlBhZ2U6OmxvYWRGaWxlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHBhdGgs
IGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG92ZXJyaWRlQ29udGVudFR5cGUp
CiB7Ci0gICAgc3RkOjpzdHJpbmcgZmlsZVVybChwYXRoKTsKLSAgICBpZiAoIWZpbGVVcmwuZmlu
ZCgiLyIpKQotICAgICAgICBmaWxlVXJsLmluc2VydCgwLCAiZmlsZTovLyIpOwotICAgIGVsc2Ug
aWYgKGZpbGVVcmwuZmluZCgiZmlsZTovLy8iKSkKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nIGZpbGVVcmwocGF0aCk7CisgICAgaWYgKGZpbGVVcmwuc3RhcnRzV2l0aCgiLyIpKQor
ICAgICAgICBmaWxlVXJsID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZygiZmlsZTovLyIs
IDcpICsgZmlsZVVybDsKKyAgICBlbHNlIGlmICghZmlsZVVybC5zdGFydHNXaXRoKCJmaWxlOi8v
LyIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkLT5sb2FkKGZpbGVVcmwuY19zdHIoKSwgMCwg
IkdFVCIsIFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwg
MCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgb3ZlcnJpZGVDb250ZW50VHlwZSk7Cisg
ICAgZC0+bG9hZChmaWxlVXJsLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0
cmluZygpLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKCJHRVQiLCAzKSwgUGxhdGZvcm06
Ok5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9saWN5LCAwLCAwLCAwLCAwLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBvdmVycmlkZUNvbnRlbnRUeXBlLmNfc3RyKCkpOwogfQogCiB2b2lk
IFdlYlBhZ2U6OmRvd25sb2FkKGNvbnN0IFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdCYgcmVxdWVz
dCkKQEAgLTczNSwzMCArNzM0LDMxIEBAIHZvaWQgV2ViUGFnZTo6ZG93bmxvYWQoY29uc3QgUGxh
dGZvcm06Ok4KICAgICAgICAgaGVhZGVycy5wdXNoX2JhY2sobGlzdFtpXS5maXJzdC5jX3N0cigp
KTsKICAgICAgICAgaGVhZGVycy5wdXNoX2JhY2sobGlzdFtpXS5zZWNvbmQuY19zdHIoKSk7CiAg
ICAgfQotICAgIGQtPmxvYWQocmVxdWVzdC5nZXRVcmxSZWYoKS5jX3N0cigpLCAwLCAiR0VUIiwg
UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9saWN5LCAwLCAwLCBo
ZWFkZXJzLmVtcHR5KCkgPyAwIDogJmhlYWRlcnNbMF0sIGhlYWRlcnMuc2l6ZSgpLCBmYWxzZSwg
ZmFsc2UsIHRydWUsICIiLCByZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkuY19zdHIoKSk7
CisgICAgZC0+bG9hZChyZXF1ZXN0LmdldFVybFJlZigpLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nOjplbXB0eVN0cmluZygpLCAiR0VUIiwgUGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpV
c2VQcm90b2NvbENhY2hlUG9saWN5LCAwLCAwLCBoZWFkZXJzLmVtcHR5KCkgPyAwIDogJmhlYWRl
cnNbMF0sIGhlYWRlcnMuc2l6ZSgpLCBmYWxzZSwgZmFsc2UsIHRydWUsICIiLCByZXF1ZXN0Lmdl
dFN1Z2dlc3RlZFNhdmVOYW1lKCkuY19zdHIoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByaXZhdGU6
OmxvYWRTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nLCBjb25zdCBjaGFyKiBiYXNlVVJMLCBjb25z
dCBjaGFyKiBjb250ZW50VHlwZSwgY29uc3QgY2hhciogZmFpbGluZ1VSTCkKK3ZvaWQgV2ViUGFn
ZVByaXZhdGU6OmxvYWRTdHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYg
c3RyaW5nLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBiYXNlVVJMLCBjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZmFpbGluZ1VSTCkKIHsKICAgICBLVVJMIGt1cmwgPSBw
YXJzZVVybChiYXNlVVJMKTsKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChrdXJsKTsKICAg
ICBXVEY6OlJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcgotICAgICAgICA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKHN0cmluZywgc3RybGVuKHN0cmluZykpOworICAgICAgICA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKHN0cmluZy5jX3N0cigpLCBzdHJpbmcubGVuZ3RoKCkpOwogICAgIFN1YnN0aXR1
dGVEYXRhIHN1YnN0aXR1dGVEYXRhKGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNvbnRlbnRUeXBlKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUo
Y29udGVudFR5cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxpbmdV
UkwgPyBwYXJzZVVybChmYWlsaW5nVVJMKSA6IEtVUkwoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIWZhaWxpbmdVUkwuZW1wdHkoKSA/IHBhcnNlVXJsKGZhaWxpbmdVUkwp
IDogS1VSTCgpKTsKICAgICBtX21haW5GcmFtZS0+bG9hZGVyKCktPmxvYWQocmVxdWVzdCwgc3Vi
c3RpdHV0ZURhdGEsIGZhbHNlKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpsb2FkU3RyaW5nKGNvbnN0
IGNoYXIqIHN0cmluZywgY29uc3QgY2hhciogYmFzZVVSTCwgY29uc3QgY2hhciogbWltZVR5cGUs
IGNvbnN0IGNoYXIqIGZhaWxpbmdVUkwpCit2b2lkIFdlYlBhZ2U6OmxvYWRTdHJpbmcoY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgc3RyaW5nLCBjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nJiBiYXNlVVJMLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiBtaW1lVHlwZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZmFpbGlu
Z1VSTCkKIHsKICAgICBkLT5sb2FkU3RyaW5nKHN0cmluZywgYmFzZVVSTCwgbWltZVR5cGUsIGZh
aWxpbmdVUkwpOwogfQogCi1ib29sIFdlYlBhZ2VQcml2YXRlOjpleGVjdXRlSmF2YVNjcmlwdChj
b25zdCBjaGFyKiBzY3JpcHRVVEY4LCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIFdl
YlN0cmluZyYgcmV0dXJuVmFsdWUpCitib29sIFdlYlBhZ2VQcml2YXRlOjpleGVjdXRlSmF2YVNj
cmlwdChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzY3JpcHRVVEY4LCBKYXZh
U2NyaXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIFdlYlN0cmluZyYgcmV0dXJuVmFsdWUpCiB7Ci0g
ICAgU3RyaW5nIHNjcmlwdCA9IFN0cmluZzo6ZnJvbVVURjgoc2NyaXB0VVRGOCk7CisgICAgQkxB
Q0tCRVJSWV9BU1NFUlQoc2NyaXB0VVRGOC5pc1V0ZjgoKSk7CisgICAgU3RyaW5nIHNjcmlwdCA9
IHNjcmlwdFVURjg7CiAKICAgICBpZiAoc2NyaXB0LmlzTnVsbCgpKSB7CiAgICAgICAgIHJldHVy
blR5cGUgPSBKU0V4Y2VwdGlvbjsKQEAgLTgwNSwyMCArODA1LDE4IEBAIGJvb2wgV2ViUGFnZVBy
aXZhdGU6OmV4ZWN1dGVKYXZhU2NyaXB0KGMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
aWYgKHJldHVyblR5cGUgPT0gSlNCb29sZWFuIHx8IHJldHVyblR5cGUgPT0gSlNOdW1iZXIgfHwg
cmV0dXJuVHlwZSA9PSBKU1N0cmluZyB8fCByZXR1cm5UeXBlID09IEpTT2JqZWN0KSB7Ci0gICAg
ICAgIFN0cmluZyBzdHIgPSByZXN1bHQudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIHJldHVyblZh
bHVlID0gV2ViU3RyaW5nKHN0ci5pbXBsKCkpOwotICAgIH0KKyAgICBpZiAocmV0dXJuVHlwZSA9
PSBKU0Jvb2xlYW4gfHwgcmV0dXJuVHlwZSA9PSBKU051bWJlciB8fCByZXR1cm5UeXBlID09IEpT
U3RyaW5nIHx8IHJldHVyblR5cGUgPT0gSlNPYmplY3QpCisgICAgICAgIHJldHVyblZhbHVlID0g
cmVzdWx0LnRvU3RyaW5nKGV4ZWMpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2Vi
UGFnZTo6ZXhlY3V0ZUphdmFTY3JpcHQoY29uc3QgY2hhciogc2NyaXB0LCBKYXZhU2NyaXB0RGF0
YVR5cGUmIHJldHVyblR5cGUsIFdlYlN0cmluZyYgcmV0dXJuVmFsdWUpCitib29sIFdlYlBhZ2U6
OmV4ZWN1dGVKYXZhU2NyaXB0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHNj
cmlwdCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiByZXR1cm5WYWx1ZSkKIHsKICAgICByZXR1cm4gZC0+ZXhlY3V0ZUphdmFTY3Jp
cHQoc2NyaXB0LCByZXR1cm5UeXBlLCByZXR1cm5WYWx1ZSk7CiB9CiAKLWJvb2wgV2ViUGFnZVBy
aXZhdGU6OmV4ZWN1dGVKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IFNjcmlwdFNvdXJj
ZUNvZGUmIHNvdXJjZUNvZGUsIEphdmFTY3JpcHREYXRhVHlwZSYgcmV0dXJuVHlwZSwgV2ViU3Ry
aW5nJiByZXR1cm5WYWx1ZSkKK2Jvb2wgV2ViUGFnZVByaXZhdGU6OmV4ZWN1dGVKYXZhU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEphdmFT
Y3JpcHREYXRhVHlwZSYgcmV0dXJuVHlwZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYg
cmV0dXJuVmFsdWUpCiB7CiAgICAgaWYgKCFtX2lzb2xhdGVkV29ybGQpCiAgICAgICAgIG1faXNv
bGF0ZWRXb3JsZCA9IG1fbWFpbkZyYW1lLT5zY3JpcHQoKS0+Y3JlYXRlV29ybGQoKTsKQEAgLTg1
OCwxNSArODU2LDEzIEBAIGJvb2wgV2ViUGFnZVByaXZhdGU6OmV4ZWN1dGVKYXZhU2NyaXB0SW4K
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHJldHVyblR5cGUgPT0gSlNCb29sZWFu
IHx8IHJldHVyblR5cGUgPT0gSlNOdW1iZXIgfHwgcmV0dXJuVHlwZSA9PSBKU1N0cmluZyB8fCBy
ZXR1cm5UeXBlID09IEpTT2JqZWN0KSB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSByZXN1bHQudG9T
dHJpbmcoZXhlYyk7Ci0gICAgICAgIHJldHVyblZhbHVlID0gV2ViU3RyaW5nKHN0ci5pbXBsKCkp
OwotICAgIH0KKyAgICBpZiAocmV0dXJuVHlwZSA9PSBKU0Jvb2xlYW4gfHwgcmV0dXJuVHlwZSA9
PSBKU051bWJlciB8fCByZXR1cm5UeXBlID09IEpTU3RyaW5nIHx8IHJldHVyblR5cGUgPT0gSlNP
YmplY3QpCisgICAgICAgIHJldHVyblZhbHVlID0gcmVzdWx0LnRvU3RyaW5nKGV4ZWMpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViUGFnZTo6ZXhlY3V0ZUphdmFTY3JpcHRJbklz
b2xhdGVkV29ybGQoY29uc3Qgc3RkOjp3c3RyaW5nJiBzY3JpcHQsIEphdmFTY3JpcHREYXRhVHlw
ZSYgcmV0dXJuVHlwZSwgV2ViU3RyaW5nJiByZXR1cm5WYWx1ZSkKK2Jvb2wgV2ViUGFnZTo6ZXhl
Y3V0ZUphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3Qgc3RkOjp3c3RyaW5nJiBzY3JpcHQs
IEphdmFTY3JpcHREYXRhVHlwZSYgcmV0dXJuVHlwZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgcmV0dXJuVmFsdWUpCiB7CiAgICAgLy8gT24gb3VyIHBsYXRmb3JtIHdjaGFyX3QgaXMg
dW5zaWduZWQgaW50IGFuZCBVQ2hhciBpcyB1bnNpZ25lZCBzaG9ydAogICAgIC8vIHNvIHdlIGhh
dmUgdG8gY29udmVydCB1c2luZyBJQ1UgY29udmVyc2lvbiBmdW5jdGlvbgpAQCAtODg3LDEzICs4
ODMsMTQgQEAgYm9vbCBXZWJQYWdlOjpleGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZQogICAgIHJl
dHVybiBkLT5leGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZChzb3VyY2VDb2RlLCByZXR1
cm5UeXBlLCByZXR1cm5WYWx1ZSk7CiB9CiAKLWJvb2wgV2ViUGFnZTo6ZXhlY3V0ZUphdmFTY3Jp
cHRJbklzb2xhdGVkV29ybGQoY29uc3QgY2hhciogc2NyaXB0LCBKYXZhU2NyaXB0RGF0YVR5cGUm
IHJldHVyblR5cGUsIFdlYlN0cmluZyYgcmV0dXJuVmFsdWUpCitib29sIFdlYlBhZ2U6OmV4ZWN1
dGVKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIHNjcmlwdFVURjgsIEphdmFTY3JpcHREYXRhVHlwZSYgcmV0dXJuVHlwZSwgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcmV0dXJuVmFsdWUpCiB7Ci0gICAgU2NyaXB0U291cmNl
Q29kZSBzb3VyY2VDb2RlKFN0cmluZzo6ZnJvbVVURjgoc2NyaXB0KSwgS1VSTCgpKTsKKyAgICBC
TEFDS0JFUlJZX0FTU0VSVChzY3JpcHRVVEY4LmlzVXRmOCgpKTsKKyAgICBTY3JpcHRTb3VyY2VD
b2RlIHNvdXJjZUNvZGUoc2NyaXB0VVRGOCwgS1VSTCgpKTsKICAgICByZXR1cm4gZC0+ZXhlY3V0
ZUphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQoc291cmNlQ29kZSwgcmV0dXJuVHlwZSwgcmV0dXJu
VmFsdWUpOwogfQogCi12b2lkIFdlYlBhZ2U6OmV4ZWN1dGVKYXZhU2NyaXB0RnVuY3Rpb24oY29u
c3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZmdW5jdGlvbiwgY29uc3Qgc3RkOjp2ZWN0b3I8
SmF2YVNjcmlwdFZhcmlhbnQ+ICZhcmdzLCBKYXZhU2NyaXB0VmFyaWFudCYgcmV0dXJuVmFsdWUp
Cit2b2lkIFdlYlBhZ2U6OmV4ZWN1dGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3Qgc3RkOjp2ZWN0
b3I8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4gJmZ1bmN0aW9uLCBjb25zdCBzdGQ6OnZl
Y3RvcjxKYXZhU2NyaXB0VmFyaWFudD4gJmFyZ3MsIEphdmFTY3JpcHRWYXJpYW50JiByZXR1cm5W
YWx1ZSkKIHsKICAgICBpZiAoIWQtPm1fbWFpbkZyYW1lKSB7CiAgICAgICAgIHJldHVyblZhbHVl
LnNldFR5cGUoSmF2YVNjcmlwdFZhcmlhbnQ6OkV4Y2VwdGlvbik7CkBAIC0xMDE1LDcgKzEwMTIs
NyBAQCB2b2lkIFdlYlBhZ2U6OmVuYWJsZUNyb3NzU2l0ZVhIUigpCiAgICAgZC0+ZW5hYmxlQ3Jv
c3NTaXRlWEhSKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByaXZhdGU6OmFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KGNvbnN0IGNoYXIqIHNvdXJjZU9yaWdpbiwgY29uc3QgY2hhciogZGVzdGlu
YXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit2b2lkIFdlYlBh
Z2VQcml2YXRlOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmcmIGRlc3RpbmF0aW9uT3JpZ2luLCBib29sIGFsbG93RGVzdGluYXRpb25TdWJk
b21haW5zKQogewogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc291cmNlID0gU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoc291cmNlT3JpZ2luKTsKICAgICBpZiAoc291cmNlLT5p
c1VuaXF1ZSgpKQpAQCAtMTAyNSwxMiArMTAyMiwxMiBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjph
ZGRPcmlnaW5BY2Nlc3NXaGl0CiAgICAgU2VjdXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KCpzb3VyY2UsIGRlc3RpbmF0aW9uLnByb3RvY29sKCksIGRlc3RpbmF0aW9u
Lmhvc3QoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogfQogCi12b2lkIFdlYlBhZ2U6
OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IGNoYXIqIHNvdXJjZU9yaWdpbiwg
Y29uc3QgY2hhciogZGVzdGluYXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpCit2b2lkIFdlYlBhZ2U6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZGVzdGluYXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnMpCiB7CiAgICAgZC0+YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoc291cmNlT3JpZ2luLCBkZXN0aW5hdGlvbk9yaWdpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpOwogfQogCi12b2lkIFdlYlBhZ2VQcml2YXRlOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeShjb25zdCBjaGFyKiBzb3VyY2VPcmlnaW4sIGNvbnN0IGNoYXIqIGRlc3RpbmF0
aW9uT3JpZ2luLCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQordm9pZCBXZWJQYWdl
UHJpdmF0ZTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiBkZXN0aW5hdGlvbk9yaWdpbiwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3Vi
ZG9tYWlucykKIHsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNvdXJjZSA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZU9yaWdpbik7CiAgICAgaWYgKHNvdXJjZS0+
aXNVbmlxdWUoKSkKQEAgLTEwNDAsNyArMTAzNyw3IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OnJl
bW92ZU9yaWdpbkFjY2Vzc1cKICAgICBTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkoKnNvdXJjZSwgZGVzdGluYXRpb24ucHJvdG9jb2woKSwgZGVzdGluYXRp
b24uaG9zdCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAKLXZvaWQgV2ViUGFn
ZTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgY2hhciogc291cmNlT3Jp
Z2luLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbk9yaWdpbiwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucykKK3ZvaWQgV2ViUGFnZTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgc291cmNlT3JpZ2luLCBjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBkZXN0aW5hdGlvbk9yaWdpbiwgYm9vbCBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsKICAgICBkLT5yZW1vdmVPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShzb3VyY2VPcmlnaW4sIGRlc3RpbmF0aW9uT3JpZ2luLCBhbGxvd0Rlc3Rp
bmF0aW9uU3ViZG9tYWlucyk7CiB9CkBAIC0yMTk3LDkgKzIxOTQsOSBAQCBib29sIFdlYlBhZ2VQ
cml2YXRlOjppc0FjdGl2ZSgpIGNvbnN0CiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6OmF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBw
cm90ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwmIGlucHV0Q3JlZGVudGlhbCkKIHsKLSAg
ICBXZWJTdHJpbmcgdXNlcm5hbWU7Ci0gICAgV2ViU3RyaW5nIHBhc3N3b3JkOwogICAgIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlTWFuYWdlciogYXV0aG1nciA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlTWFuYWdlcjo6aW5zdGFuY2UoKTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
IHVzZXJuYW1lOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgcGFzc3dvcmQ7CiAK
ICNpZiAhZGVmaW5lZChQVUJMSUNfQlVJTEQpIHx8ICFQVUJMSUNfQlVJTEQKICAgICBpZiAobV9k
dW1wUmVuZGVyVHJlZSkgewpAQCAtMjI0MCwxNCArMjIzNywxNCBAQCBQYWdlQ2xpZW50QmxhY2tC
ZXJyeTo6U2F2ZUNyZWRlbnRpYWxUeXBlCiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6OnN5bmNQcm94
eUNyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAg
ICBtX2NsaWVudC0+c3luY1Byb3h5Q3JlZGVudGlhbChjcmVkZW50aWFsLnVzZXIoKS51dGY4KCku
ZGF0YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgbV9jbGll
bnQtPnN5bmNQcm94eUNyZWRlbnRpYWwoY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFz
c3dvcmQoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6Om5vdGlmeVBvcHVwQXV0b2ZpbGxE
aWFsb2coY29uc3QgVmVjdG9yPFN0cmluZz4mIGNhbmRpZGF0ZXMsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNjcmVlblJlY3QpCiB7Ci0gICAgdmVjdG9yPHN0cmluZz4gdGV4dEl0ZW1zOworICAg
IHZlY3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiB0ZXh0SXRlbXM7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjYW5kaWRhdGVzLnNpemUoKTsgaSsrKQotICAgICAgICB0ZXh0
SXRlbXMucHVzaF9iYWNrKGNhbmRpZGF0ZXNbaV0udXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHRl
eHRJdGVtcy5wdXNoX2JhY2soY2FuZGlkYXRlc1tpXSk7CiAgICAgbV9jbGllbnQtPm5vdGlmeVBv
cHVwQXV0b2ZpbGxEaWFsb2codGV4dEl0ZW1zLCBzY3JlZW5SZWN0KTsKIH0KIApAQCAtMjI5Niwx
MCArMjI5MywxMCBAQCBQbGF0Zm9ybTo6V2ViQ29udGV4dCBXZWJQYWdlUHJpdmF0ZTo6d2ViCiAK
ICAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBmaW5kUGF0dGVyblN0cmluZ0ZvclVybChocmVmKTsK
ICAgICAgICAgaWYgKCFwYXR0ZXJuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRleHQuc2V0
UGF0dGVybihwYXR0ZXJuLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRQ
YXR0ZXJuKHBhdHRlcm4pOwogCiAgICAgICAgIGlmICghaHJlZi5zdHJpbmcoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0VXJsKGhyZWYuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICBjb250ZXh0LnNldFVybChocmVmLnN0cmluZygpKTsKIAogICAgICAg
ICAgICAgLy8gTGlua3MgYXJlIG5vbi1zZWxlY3RhYmxlIGJ5IGRlZmF1bHQsIGJ1dCBzZWxlY3Rp
b24gc2hvdWxkIGJlIGFsbG93ZWQKICAgICAgICAgICAgIC8vIHByb3ZpZGluZyB0aGUgcGFnZSBp
cyBzZWxlY3RhYmxlLCB1c2UgdGhlIHBhcmVudCB0byBkZXRlcm1pbmUgaXQuCkBAIC0yMzI2LDEy
ICsyMzIzLDEyIEBAIFBsYXRmb3JtOjpXZWJDb250ZXh0IFdlYlBhZ2VQcml2YXRlOjp3ZWIKICAg
ICAgICAgICAgIGlmIChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpbWFnZUVsZW1l
bnQtPmNhY2hlZEltYWdlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2Ut
PmlzTG9hZGVkKCkgJiYgY2FjaGVkUmVzb3VyY2UtPmRhdGEoKSkgewogICAgICAgICAgICAgICAg
ICAgICBTdHJpbmcgdXJsID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGltYWdl
RWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikuc3RyaW5nKCkpOwotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNyYyhub2RlLT5kb2N1bWVudCgpLT5jb21wbGV0
ZVVSTCh1cmwpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnNldFNyYyhub2RlLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLnN0cmluZygp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTdHJpbmcg
YWx0ID0gaW1hZ2VFbGVtZW50LT5hbHRUZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWFsdC5pc051
bGwoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldEFsdChhbHQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBbHQoYWx0KTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChtZWRpYUVsZW1lbnQpIHsKQEAgLTIzNDEsMTQgKzIzMzgsMTQgQEAgUGxhdGZvcm06
OldlYkNvbnRleHQgV2ViUGFnZVByaXZhdGU6OndlYgogICAgICAgICAgICAgICAgIGNvbnRleHQu
c2V0RmxhZyhQbGF0Zm9ybTo6V2ViQ29udGV4dDo6SXNWaWRlbyk7CiAKICAgICAgICAgICAgIFN0
cmluZyBzcmMgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobWVkaWFFbGVtZW50
LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKS5zdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LnNldFNyYyhub2RlLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzcmMpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRTcmMobm9kZS0+ZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoc3JjKS5zdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIFRleHQqIGN1clRleHQgPSB0
b1RleHQobm9kZS5nZXQoKSk7CiAgICAgICAgIGlmICghY3VyVGV4dC0+d2hvbGVUZXh0KCkuaXNF
bXB0eSgpKQotICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0KGN1clRleHQtPndob2xlVGV4dCgp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0KGN1clRleHQtPndo
b2xlVGV4dCgpKTsKICAgICB9CiAKICAgICBib29sIGNhblN0YXJ0U2VsZWN0aW9uID0gbm9kZS0+
Y2FuU3RhcnRTZWxlY3Rpb24oKTsKQEAgLTIzNTksNyArMjM1Niw3IEBAIFBsYXRmb3JtOjpXZWJD
b250ZXh0IFdlYlBhZ2VQcml2YXRlOjp3ZWIKICAgICAgICAgU3RyaW5nIHdlYldvcmtzQ29udGV4
dChET01TdXBwb3J0Ojp3ZWJXb3Jrc0NvbnRleHQoZWxlbWVudCkpOwogICAgICAgICBpZiAoIXdl
YldvcmtzQ29udGV4dC5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGNvbnRleHQuc2V0RmxhZyhQbGF0Zm9ybTo6V2ViQ29udGV4dDo6SXNXZWJXb3Jrc0NvbnRleHQp
OwotICAgICAgICAgICAgY29udGV4dC5zZXRXZWJXb3Jrc0NvbnRleHQod2ViV29ya3NDb250ZXh0
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRXZWJXb3Jrc0NvbnRleHQo
d2ViV29ya3NDb250ZXh0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChET01TdXBwb3J0Ojpp
c1RleHRCYXNlZENvbnRlbnRFZGl0YWJsZUVsZW1lbnQoZWxlbWVudCkpIHsKQEAgLTIzNzgsNyAr
MjM3NSw3IEBAIFBsYXRmb3JtOjpXZWJDb250ZXh0IFdlYlBhZ2VQcml2YXRlOjp3ZWIKIAogICAg
ICAgICAgICAgU3RyaW5nIGVsZW1lbnRUZXh0KERPTVN1cHBvcnQ6OmlucHV0RWxlbWVudFRleHQo
ZWxlbWVudCkpOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50VGV4dC5zdHJpcFdoaXRlU3BhY2Uo
KS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0KGVsZW1lbnRUZXh0
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4dChlbGVtZW50
VGV4dCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMzNDAsNyArMzMzNyw3IEBAIGludCBXZWJQ
YWdlOjppbnB1dENhcmV0UG9zaXRpb24oKSBjb25zdAogCiBjbGFzcyBEZWZlcnJlZFRhc2tQb3B1
cExpc3RTZWxlY3RNdWx0aXBsZTogcHVibGljIERlZmVycmVkVGFzazwmV2ViUGFnZVByaXZhdGU6
Om1fd291bGRQb3B1cExpc3RTZWxlY3RNdWx0aXBsZT4gewogcHVibGljOgotICAgIERlZmVycmVk
VGFza1BvcHVwTGlzdFNlbGVjdE11bHRpcGxlKFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlUHJpdmF0
ZSwgaW50IHNpemUsIGNvbnN0IGJvb2wqIHNlbGVjdGVkcykgCisgICAgRGVmZXJyZWRUYXNrUG9w
dXBMaXN0U2VsZWN0TXVsdGlwbGUoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRlLCBpbnQg
c2l6ZSwgY29uc3QgYm9vbCogc2VsZWN0ZWRzKQogICAgICAgICA6IERlZmVycmVkVGFza1R5cGUo
d2ViUGFnZVByaXZhdGUpCiAgICAgewogICAgICAgICB3ZWJQYWdlUHJpdmF0ZS0+bV9jYWNoZWRQ
b3B1cExpc3RTZWxlY3RlZHMuYXBwZW5kKHNlbGVjdGVkcywgc2l6ZSk7CkBAIC0zMzkwLDcgKzMz
ODcsNyBAQCB2b2lkIFdlYlBhZ2U6OnBvcHVwTGlzdENsb3NlZChpbnQgaW5kZXgpCiAKIGNsYXNz
IERlZmVycmVkVGFza1NldERhdGVUaW1lSW5wdXQ6IHB1YmxpYyBEZWZlcnJlZFRhc2s8JldlYlBh
Z2VQcml2YXRlOjptX3dvdWxkU2V0RGF0ZVRpbWVJbnB1dD4gewogcHVibGljOgotICAgIGV4cGxp
Y2l0IERlZmVycmVkVGFza1NldERhdGVUaW1lSW5wdXQoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQ
cml2YXRlLCBXZWJTdHJpbmcgdmFsdWUpCisgICAgZXhwbGljaXQgRGVmZXJyZWRUYXNrU2V0RGF0
ZVRpbWVJbnB1dChXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZVByaXZhdGUsIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcgdmFsdWUpCiAgICAgICAgIDogRGVmZXJyZWRUYXNrVHlwZSh3ZWJQYWdl
UHJpdmF0ZSkKICAgICB7CiAgICAgICAgIHdlYlBhZ2VQcml2YXRlLT5tX2NhY2hlZERhdGVUaW1l
SW5wdXQgPSB2YWx1ZTsKQEAgLTM0MDIsMTkgKzMzOTksMTkgQEAgcHJpdmF0ZToKICAgICB9CiB9
OwogCi12b2lkIFdlYlBhZ2U6OnNldERhdGVUaW1lSW5wdXQoY29uc3QgV2ViU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgV2ViUGFnZTo6c2V0RGF0ZVRpbWVJbnB1dChjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAoZC0+bV9wYWdlLT5kZWZlcnNMb2FkaW5n
KCkpIHsKICAgICAgICAgZC0+bV9kZWZlcnJlZFRhc2tzLmFwcGVuZChhZG9wdFB0cihuZXcgRGVm
ZXJyZWRUYXNrU2V0RGF0ZVRpbWVJbnB1dChkLCB2YWx1ZSkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBEZWZlcnJlZFRhc2tTZXREYXRlVGltZUlucHV0OjpmaW5pc2hPckNhbmNlbChk
KTsKLSAgICBkLT5tX2lucHV0SGFuZGxlci0+c2V0SW5wdXRWYWx1ZShTdHJpbmcodmFsdWUuaW1w
bCgpKSk7CisgICAgZC0+bV9pbnB1dEhhbmRsZXItPnNldElucHV0VmFsdWUodmFsdWUpOwogfQog
CiBjbGFzcyBEZWZlcnJlZFRhc2tTZXRDb2xvcklucHV0OiBwdWJsaWMgRGVmZXJyZWRUYXNrPCZX
ZWJQYWdlUHJpdmF0ZTo6bV93b3VsZFNldENvbG9ySW5wdXQ+IHsKIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBEZWZlcnJlZFRhc2tTZXRDb2xvcklucHV0KFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlUHJp
dmF0ZSwgV2ViU3RyaW5nIHZhbHVlKQorICAgIGV4cGxpY2l0IERlZmVycmVkVGFza1NldENvbG9y
SW5wdXQoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRlLCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nIHZhbHVlKQogICAgICAgICA6IERlZmVycmVkVGFza1R5cGUod2ViUGFnZVByaXZh
dGUpCiAgICAgewogICAgICAgICB3ZWJQYWdlUHJpdmF0ZS0+bV9jYWNoZWRDb2xvcklucHV0ID0g
dmFsdWU7CkBAIC0zNDI2LDE0ICszNDIzLDE0IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotdm9p
ZCBXZWJQYWdlOjpzZXRDb2xvcklucHV0KGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCit2b2lkIFdl
YlBhZ2U6OnNldENvbG9ySW5wdXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYg
dmFsdWUpCiB7CiAgICAgaWYgKGQtPm1fcGFnZS0+ZGVmZXJzTG9hZGluZygpKSB7CiAgICAgICAg
IGQtPm1fZGVmZXJyZWRUYXNrcy5hcHBlbmQoYWRvcHRQdHIobmV3IERlZmVycmVkVGFza1NldENv
bG9ySW5wdXQoZCwgdmFsdWUpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgRGVmZXJy
ZWRUYXNrU2V0Q29sb3JJbnB1dDo6ZmluaXNoT3JDYW5jZWwoZCk7Ci0gICAgZC0+bV9pbnB1dEhh
bmRsZXItPnNldElucHV0VmFsdWUoU3RyaW5nKHZhbHVlLmltcGwoKSkpOworICAgIGQtPm1faW5w
dXRIYW5kbGVyLT5zZXRJbnB1dFZhbHVlKHZhbHVlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRW
aXJ0dWFsVmlld3BvcnRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKQEAgLTQyNjUsNyArNDI2
Miw3IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmNsZWFyRm9jdXNOb2RlKCkKICAgICAgICAgZnJh
bWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKDAsIGZyYW1lKTsK
IH0KIAotV2ViU3RyaW5nIFdlYlBhZ2U6OnRleHRFbmNvZGluZygpCitCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nIFdlYlBhZ2U6OnRleHRFbmNvZGluZygpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gZC0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTQyNzgsMjIg
KzQyNzUsMjIgQEAgV2ViU3RyaW5nIFdlYlBhZ2U6OnRleHRFbmNvZGluZygpCiAgICAgcmV0dXJu
IGRvY3VtZW50LT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiB9CiAKLVdlYlN0cmlu
ZyBXZWJQYWdlOjpmb3JjZWRUZXh0RW5jb2RpbmcoKQorQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyBXZWJQYWdlOjpmb3JjZWRUZXh0RW5jb2RpbmcoKQogewogICAgIEZyYW1lKiBmcmFtZSA9
IGQtPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biAiIjsKKyAgICAgICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5
U3RyaW5nKCk7CiAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpOwogCiAgICAgcmV0dXJu
IGRvY3VtZW50LT5sb2FkZXIoKS0+b3ZlcnJpZGVFbmNvZGluZygpOwogfQogCi12b2lkIFdlYlBh
Z2U6OnNldEZvcmNlZFRleHRFbmNvZGluZyhjb25zdCBjaGFyKiBlbmNvZGluZykKK3ZvaWQgV2Vi
UGFnZTo6c2V0Rm9yY2VkVGV4dEVuY29kaW5nKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIGVuY29kaW5nKQogewotICAgIGlmIChlbmNvZGluZyAmJiBkLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKSAmJiBkLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+bG9hZGVyKCkgJiYgZC0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCktPmxvYWRlcigpKQorICAgIGlmICghZW5jb2RpbmcuZW1wdHkoKSAmJiBk
LT5mb2N1c2VkT3JNYWluRnJhbWUoKSAmJiBkLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+bG9hZGVy
KCkgJiYgZC0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmxvYWRlcigpKQogICAgICAgICByZXR1cm4g
ZC0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmxvYWRlcigpLT5yZWxvYWRXaXRoT3ZlcnJpZGVFbmNv
ZGluZyhlbmNvZGluZyk7CiB9CiAKQEAgLTQ0NjEsMjcgKzQ0NTgsMjcgQEAgYm9vbCBXZWJQYWdl
OjpzZWxlY3Rpb25Db250YWlucyhjb25zdCBQbAogICAgIHJldHVybiBkLT5tX3NlbGVjdGlvbkhh
bmRsZXItPnNlbGVjdGlvbkNvbnRhaW5zKGQtPm1hcEZyb21UcmFuc2Zvcm1lZChwb2ludCkpOwog
fQogCi1XZWJTdHJpbmcgV2ViUGFnZTo6dGl0bGUoKSBjb25zdAorQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyBXZWJQYWdlOjp0aXRsZSgpIGNvbnN0CiB7CiAgICAgaWYgKGQtPm1fbWFpbkZy
YW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZC0+bV9tYWluRnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnN0cmluZygpOwotICAgIHJldHVybiBXZWJTdHJp
bmcoKTsKKyAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJp
bmcoKTsKIH0KIAotV2ViU3RyaW5nIFdlYlBhZ2U6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CitCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlBhZ2U6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uSGFuZGxlci0+c2VsZWN0ZWRUZXh0KCk7CiB9CiAK
LVdlYlN0cmluZyBXZWJQYWdlOjpjdXRTZWxlY3RlZFRleHQoKQorQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyBXZWJQYWdlOjpjdXRTZWxlY3RlZFRleHQoKQogewotICAgIFdlYlN0cmluZyBz
ZWxlY3RlZFRleHQgPSBkLT5tX3NlbGVjdGlvbkhhbmRsZXItPnNlbGVjdGVkVGV4dCgpOwotICAg
IGlmICghZC0+bV9wYWdlLT5kZWZlcnNMb2FkaW5nKCkgJiYgIXNlbGVjdGVkVGV4dC5pc0VtcHR5
KCkpCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBzZWxlY3RlZFRleHQgPSBkLT5t
X3NlbGVjdGlvbkhhbmRsZXItPnNlbGVjdGVkVGV4dCgpOworICAgIGlmICghZC0+bV9wYWdlLT5k
ZWZlcnNMb2FkaW5nKCkgJiYgIXNlbGVjdGVkVGV4dC5lbXB0eSgpKQogICAgICAgICBkLT5tX2lu
cHV0SGFuZGxlci0+ZGVsZXRlU2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dDsK
IH0KIAotdm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0KGNvbnN0IFdlYlN0cmluZyYgc3RyaW5nKQor
dm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIHN0cmluZykKIHsKICAgICBpZiAoZC0+bV9wYWdlLT5kZWZlcnNMb2FkaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUwNzMsNiArNTA3MCw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QmFja0Zv
cndhcmRMaXN0KFNoYXJlZEEKICAgICAgICAgcmVzdWx0RW50cnkubGFzdFZpc2l0V2FzSFRUUE5v
bkdldCA9IGVudHJ5LT5sYXN0VmlzaXRXYXNIVFRQTm9uR2V0KCk7CiAgICAgICAgIHJlc3VsdEVu
dHJ5LmlkID0gYmFja0ZvcndhcmRJZEZyb21IaXN0b3J5SXRlbShlbnRyeS5nZXQoKSk7CiAKKyAg
ICAgICAgLy8gRklYTUU6IHNlZW1zIHdlIGNhbiByZW1vdmUgdGhpcyBub3c/CiAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGUgSGlzdG9yeUl0ZW0gaXMgbm90IGRpc3Bvc2VkIHdoaWxlIHRoZSByZXN1
bHQgbGlzdCBpcyBzdGlsbCBiZWluZyB1c2VkLCB0byBtYWtlIHN1cmUgdGhlIHBvaW50ZXIgaXMg
bm90IHJldXNlZAogICAgICAgICAvLyB3aWxsIGJlIGJhbGFuY2VkIGJ5IGRlcmVmIGluIHJlbGVh
c2VCYWNrRm9yd2FyZEVudHJ5LgogICAgICAgICBlbnRyeS0+cmVmKCk7CkBAIC01MzgzLDcgKzUz
ODEsNyBAQCB2b2lkIFdlYlBhZ2U6Om9uTmV0d29ya0F2YWlsYWJpbGl0eUNoYW5nCiAgICAgdXBk
YXRlT25saW5lU3RhdHVzKGF2YWlsYWJsZSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6b25DZXJ0aWZp
Y2F0ZVN0b3JlTG9jYXRpb25TZXQoY29uc3QgV2ViU3RyaW5nJiBjYVBhdGgpCit2b2lkIFdlYlBh
Z2U6Om9uQ2VydGlmaWNhdGVTdG9yZUxvY2F0aW9uU2V0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmcmIGNhUGF0aCkKIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZXRDZXJ0aWZpY2F0ZVBhdGgoY2FQYXRoKTsKQEAgLTU0MzUsMTAgKzU0MzMs
OSBAQCB2b2lkIFdlYlBhZ2U6OmRpc2FibGVQYXNzd29yZEVjaG8oKQogICAgIGQtPm1fcGFnZS0+
c2V0dGluZ3MoKS0+c2V0UGFzc3dvcmRFY2hvRW5hYmxlZChmYWxzZSk7CiB9CiAKLXZvaWQgV2Vi
UGFnZTo6ZGlzcGF0Y2hJbnNwZWN0b3JNZXNzYWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdl
KQordm9pZCBXZWJQYWdlOjpkaXNwYXRjaEluc3BlY3Rvck1lc3NhZ2UoY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBTdHJpbmcgc3RyaW5nTWVzc2Fn
ZSA9IFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZS5kYXRhKCksIG1lc3NhZ2UubGVuZ3RoKCkpOwot
ICAgIGQtPm1fcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaXNwYXRjaE1lc3NhZ2VGcm9t
RnJvbnRlbmQoc3RyaW5nTWVzc2FnZSk7CisgICAgZC0+bV9wYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKIH0KIAogdm9pZCBX
ZWJQYWdlOjppbnNwZWN0Q3VycmVudENvbnRleHRFbGVtZW50KCkKQEAgLTYwMTksMjYgKzYwMTYs
MjYgQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6ZGlkQ2hhbmdlU2V0dGluZ3MoVwogICAgIGNvcmVT
ZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUod2ViU2V0dGluZ3MtPmRlZmF1bHRGaXhl
ZEZvbnRTaXplKCkpOwogICAgIGNvcmVTZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKHdlYlNl
dHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKSk7CiAgICAgY29yZVNldHRpbmdzLT5zZXRNaW5pbXVt
TG9naWNhbEZvbnRTaXplKHdlYlNldHRpbmdzLT5taW5pbXVtRm9udFNpemUoKSk7Ci0gICAgaWYg
KCF3ZWJTZXR0aW5ncy0+c2VyaWZGb250RmFtaWx5KCkuaXNFbXB0eSgpKQotICAgICAgICBjb3Jl
U2V0dGluZ3MtPnNldFNlcmlmRm9udEZhbWlseSh3ZWJTZXR0aW5ncy0+c2VyaWZGb250RmFtaWx5
KCkuaW1wbCgpKTsKLSAgICBpZiAoIXdlYlNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKS5pc0Vt
cHR5KCkpCi0gICAgICAgIGNvcmVTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KHdlYlNldHRp
bmdzLT5maXhlZEZvbnRGYW1pbHkoKS5pbXBsKCkpOwotICAgIGlmICghd2ViU2V0dGluZ3MtPnNh
bnNTZXJpZkZvbnRGYW1pbHkoKS5pc0VtcHR5KCkpCi0gICAgICAgIGNvcmVTZXR0aW5ncy0+c2V0
U2Fuc1NlcmlmRm9udEZhbWlseSh3ZWJTZXR0aW5ncy0+c2Fuc1NlcmlmRm9udEZhbWlseSgpLmlt
cGwoKSk7Ci0gICAgaWYgKCF3ZWJTZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCkuaXNFbXB0
eSgpKQotICAgICAgICBjb3JlU2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSh3ZWJTZXR0
aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCkuaW1wbCgpKTsKKyAgICBpZiAoIXdlYlNldHRpbmdz
LT5zZXJpZkZvbnRGYW1pbHkoKS5lbXB0eSgpKQorICAgICAgICBjb3JlU2V0dGluZ3MtPnNldFNl
cmlmRm9udEZhbWlseShTdHJpbmcod2ViU2V0dGluZ3MtPnNlcmlmRm9udEZhbWlseSgpKSk7Cisg
ICAgaWYgKCF3ZWJTZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCkuZW1wdHkoKSkKKyAgICAgICAg
Y29yZVNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoU3RyaW5nKHdlYlNldHRpbmdzLT5maXhl
ZEZvbnRGYW1pbHkoKSkpOworICAgIGlmICghd2ViU2V0dGluZ3MtPnNhbnNTZXJpZkZvbnRGYW1p
bHkoKS5lbXB0eSgpKQorICAgICAgICBjb3JlU2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1p
bHkoU3RyaW5nKHdlYlNldHRpbmdzLT5zYW5zU2VyaWZGb250RmFtaWx5KCkpKTsKKyAgICBpZiAo
IXdlYlNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKS5lbXB0eSgpKQorICAgICAgICBjb3Jl
U2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseShTdHJpbmcod2ViU2V0dGluZ3MtPnN0YW5k
YXJkRm9udEZhbWlseSgpKSk7CiAgICAgY29yZVNldHRpbmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3Bl
bldpbmRvd3NBdXRvbWF0aWNhbGx5KHdlYlNldHRpbmdzLT5jYW5KYXZhU2NyaXB0T3BlbldpbmRv
d3NBdXRvbWF0aWNhbGx5KCkpOwogICAgIGNvcmVTZXR0aW5ncy0+c2V0QWxsb3dTY3JpcHRzVG9D
bG9zZVdpbmRvd3Mod2ViU2V0dGluZ3MtPmNhbkphdmFTY3JpcHRPcGVuV2luZG93c0F1dG9tYXRp
Y2FsbHkoKSk7IC8vIFdoeSBhcmUgd2UgdXNpbmcgdGhlIHNhbWUgdmFsdWUgYXMgc2V0SmF2YVNj
cmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSgpPwogICAgIGNvcmVTZXR0aW5ncy0+c2V0
UGx1Z2luc0VuYWJsZWQod2ViU2V0dGluZ3MtPmFyZVBsdWdpbnNFbmFibGVkKCkpOwotICAgIGNv
cmVTZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUod2ViU2V0dGluZ3MtPmRlZmF1
bHRUZXh0RW5jb2RpbmdOYW1lKCkuaW1wbCgpKTsKKyAgICBjb3JlU2V0dGluZ3MtPnNldERlZmF1
bHRUZXh0RW5jb2RpbmdOYW1lKHdlYlNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgp
KTsKICAgICBjb3JlU2V0dGluZ3MtPnNldERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCh3
ZWJTZXR0aW5ncy0+ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkKCkpOwogICAgIGNvcmVT
ZXR0aW5ncy0+c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKG1fd2ViU2V0dGluZ3MtPmlzU3Bh
dGlhbE5hdmlnYXRpb25FbmFibGVkKCkpOwogICAgIGNvcmVTZXR0aW5ncy0+c2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQobV93ZWJTZXR0aW5ncy0+aXNBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpKTsKIAotICAgIFdlYlN0cmluZyBzdHlsZXNoZWV0VVJMID0gd2Vi
U2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0U3RyaW5nKCk7Ci0gICAgaWYgKHN0eWxlc2hlZXRVUkwu
aXNFbXB0eSgpKQorICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgc3R5bGVzaGVldFVS
TCA9IHdlYlNldHRpbmdzLT51c2VyU3R5bGVTaGVldFN0cmluZygpOworICAgIGlmIChzdHlsZXNo
ZWV0VVJMLmVtcHR5KCkpCiAgICAgICAgIHN0eWxlc2hlZXRVUkwgPSB3ZWJTZXR0aW5ncy0+dXNl
clN0eWxlU2hlZXRMb2NhdGlvbigpOwotICAgIGlmICghc3R5bGVzaGVldFVSTC5pc0VtcHR5KCkp
CisgICAgaWYgKCFzdHlsZXNoZWV0VVJMLmVtcHR5KCkpCiAgICAgICAgIGNvcmVTZXR0aW5ncy0+
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihLVVJMKEtVUkwoKSwgc3R5bGVzaGVldFVSTCkpOwog
CiAgICAgY29yZVNldHRpbmdzLT5zZXRGaXJzdFNjaGVkdWxlZExheW91dERlbGF5KHdlYlNldHRp
bmdzLT5maXJzdFNjaGVkdWxlZExheW91dERlbGF5KCkpOwpAQCAtNjA0OSwxNCArNjA0NiwxNCBA
QCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpkaWRDaGFuZ2VTZXR0aW5ncyhXCiAgICAgLy8gbWFrZSBz
ZW5zZSB0byBjaGFuZ2UgZGF0YWJhc2UgcGF0aCBhZnRlciBEYXRhYmFzZVRyYWNrZXIgaGFzCiAg
ICAgLy8gYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgogICAgIHN0YXRpYyBib29sIGRiaW5pdCA9
IGZhbHNlOwotICAgIGlmICghZGJpbml0ICYmICF3ZWJTZXR0aW5ncy0+ZGF0YWJhc2VQYXRoKCku
aXNFbXB0eSgpKSB7CisgICAgaWYgKCFkYmluaXQgJiYgIXdlYlNldHRpbmdzLT5kYXRhYmFzZVBh
dGgoKS5lbXB0eSgpKSB7CiAgICAgICAgIGRiaW5pdCA9IHRydWU7CiAgICAgICAgIERhdGFiYXNl
VHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIod2ViU2V0dGluZ3MtPmRhdGFiYXNlUGF0aCgpKTsK
ICAgICB9CiAKICAgICAvLyBUaGUgZGlyZWN0b3J5IG9mIGNhY2hlU3RvcmFnZSBmb3Igb25lIHBh
Z2UgZ3JvdXAgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgb25jZS4KICAgICBzdGF0aWMgYm9vbCBh
Y2luaXQgPSBmYWxzZTsKLSAgICBpZiAoIWFjaW5pdCAmJiAhd2ViU2V0dGluZ3MtPmFwcENhY2hl
UGF0aCgpLmlzRW1wdHkoKSkgeworICAgIGlmICghYWNpbml0ICYmICF3ZWJTZXR0aW5ncy0+YXBw
Q2FjaGVQYXRoKCkuZW1wdHkoKSkgewogICAgICAgICBhY2luaXQgPSB0cnVlOwogICAgICAgICBj
YWNoZVN0b3JhZ2UoKS5zZXRDYWNoZURpcmVjdG9yeSh3ZWJTZXR0aW5ncy0+YXBwQ2FjaGVQYXRo
KCkpOwogICAgIH0KQEAgLTYxMTUsNyArNjExMiw3IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmRp
ZENoYW5nZVNldHRpbmdzKFcKICAgICBtX3BhZ2UtPnNldERldmljZVNjYWxlRmFjdG9yKHdlYlNl
dHRpbmdzLT5kZXZpY2VQaXhlbFJhdGlvKCkpOwogfQogCi1XZWJTdHJpbmcgV2ViUGFnZTo6dGV4
dEhhc0F0dHJpYnV0ZShjb25zdCBXZWJTdHJpbmcmIHF1ZXJ5KSBjb25zdAorQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyBXZWJQYWdlOjp0ZXh0SGFzQXR0cmlidXRlKGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIHF1ZXJ5KSBjb25zdAogewogICAgIGlmIChEb2N1bWVudCog
ZG9jID0gZC0+bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkt
PmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBkb2MtPnF1ZXJ5Q29tbWFuZFZhbHVlKHF1ZXJ5
KTsKQEAgLTYxMjMsMTAgKzYxMjAsMTAgQEAgV2ViU3RyaW5nIFdlYlBhZ2U6OnRleHRIYXNBdHRy
aWJ1dGUoY29ucwogICAgIHJldHVybiAiIjsKIH0KIAotdm9pZCBXZWJQYWdlOjpzZXRBbGxvd05v
dGlmaWNhdGlvbihjb25zdCBXZWJTdHJpbmcmIGRvbWFpbiwgYm9vbCBhbGxvdykKK3ZvaWQgV2Vi
UGFnZTo6c2V0QWxsb3dOb3RpZmljYXRpb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgZG9tYWluLCBib29sIGFsbG93KQogewogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8
fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0gICAgc3RhdGljX2Nhc3Q8Tm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbCo+KE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Omluc3RhbmNlKCkp
LT5vblBlcm1pc3Npb24oZG9tYWluLnV0ZjgoKSwgYWxsb3cpOworICAgIHN0YXRpY19jYXN0PE5v
dGlmaWNhdGlvblByZXNlbnRlckltcGwqPihOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjppbnN0
YW5jZSgpKS0+b25QZXJtaXNzaW9uKGRvbWFpbi5jX3N0cigpLCBhbGxvdyk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShkb21haW4pOwogICAgIFVOVVNFRF9QQVJBTShhbGxvdyk7CkBAIC02MTgx
LDEwICs2MTc4LDEwIEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmZyYW1lVW5sb2FkZWQoY29uc3QK
ICAgICBtX2luUGFnZVNlYXJjaE1hbmFnZXItPmZyYW1lVW5sb2FkZWQoZnJhbWUpOwogfQogCi1j
b25zdCBTdHJpbmcmIFdlYlBhZ2VQcml2YXRlOjpkZWZhdWx0VXNlckFnZW50KCkKK2NvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIFdlYlBhZ2VQcml2YXRlOjpkZWZhdWx0VXNlckFn
ZW50KCkKIHsKLSAgICBzdGF0aWMgU3RyaW5nKiBkZWZhdWx0VXNlckFnZW50ID0gbmV3IFN0cmlu
ZzsKLSAgICBpZiAoZGVmYXVsdFVzZXJBZ2VudC0+aXNFbXB0eSgpKSB7CisgICAgc3RhdGljIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcqIGRlZmF1bHRVc2VyQWdlbnQgPSAwOworICAgIGlm
ICghZGVmYXVsdFVzZXJBZ2VudCkgewogICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RGV2
aWNlSW5mbyogaW5mbyA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpEZXZpY2VJbmZvOjppbnN0YW5j
ZSgpOwogICAgICAgICBjaGFyIHVhQnVmZmVyWzI1Nl07CiAgICAgICAgIGludCB1YVNpemUgPSBz
bnByaW50Zih1YUJ1ZmZlciwgMjU2LCAiTW96aWxsYS81LjAgKCVzKSBBcHBsZVdlYktpdC8lZC4l
ZCsgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLyVzICVzU2FmYXJpLyVkLiVkKyIsCkBAIC02
MTk0LDcgKzYxOTEsNyBAQCBjb25zdCBTdHJpbmcmIFdlYlBhZ2VQcml2YXRlOjpkZWZhdWx0VXNl
CiAgICAgICAgIGlmICh1YVNpemUgPD0gMCB8fCB1YVNpemUgPj0gMjU2KQogICAgICAgICAgICAg
QkxBQ0tCRVJSWV9DUkFTSCgpOwogCi0gICAgICAgIGRlZmF1bHRVc2VyQWdlbnQtPmFwcGVuZCh1
YUJ1ZmZlcik7CisgICAgICAgIGRlZmF1bHRVc2VyQWdlbnQgPSBuZXcgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyh1YUJ1ZmZlciwgdWFTaXplKTsKICAgICB9CiAKICAgICByZXR1cm4gKmRl
ZmF1bHRVc2VyQWdlbnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2Uu
aAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwxMCBAQAogCiAjaW5jbHVkZSAiQmxh
Y2tCZXJyeUdsb2JhbC5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRWYXJpYW50LmgiCi0jaW5jbHVk
ZSAiV2ViU3RyaW5nLmgiCiAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HdWFyZGVkUG9p
bnRlci5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUlucHV0RXZlbnRzLmg+CisjaW5j
bHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtV2ViQ29udGV4dC5oPgogI2luY2x1ZGUgPGltZi9pbnB1dF9kYXRhLmg+CiAjaW5jbHVk
ZSA8bmV0d29yay9OZXR3b3JrUmVxdWVzdC5oPgpAQCAtODUsMzAgKzg1LDMwIEBAIGVudW0gVGFy
Z2V0RGV0ZWN0aW9uU3RyYXRlZ3kge1BvaW50QmFzZWQKIAogY2xhc3MgQkxBQ0tCRVJSWV9FWFBP
UlQgV2ViUGFnZSA6IHB1YmxpYyBQbGF0Zm9ybTo6R3VhcmRlZFBvaW50ZXJCYXNlIHsKIHB1Ymxp
YzoKLSAgICBXZWJQYWdlKFdlYlBhZ2VDbGllbnQqLCBjb25zdCBXZWJTdHJpbmcmIHBhZ2VHcm91
cE5hbWUsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0Jik7CisgICAgV2ViUGFnZShXZWJQYWdlQ2xp
ZW50KiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGFnZUdyb3VwTmFtZSwg
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmKTsKICAgICB2b2lkIGRlc3Ryb3koKTsKIAogICAgIFdl
YlBhZ2VDbGllbnQqIGNsaWVudCgpIGNvbnN0OwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogbmV0d29ya1Rva2VuLCBib29sIGlzSW5pdGlhbCA9IGZhbHNlKTsK
KyAgICB2b2lkIGxvYWQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsLCBj
b25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBuZXR3b3JrVG9rZW4sIGJvb2wgaXNJ
bml0aWFsID0gZmFsc2UpOwogCiAgICAgdm9pZCBsb2FkRXh0ZW5kZWQoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiBuZXR3b3JrVG9rZW4sIGNvbnN0IGNoYXIqIG1ldGhvZCwgUGxhdGZvcm06
Ok5ldHdvcmtSZXF1ZXN0OjpDYWNoZVBvbGljeSA9IFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwgY29uc3QgY2hhciogZGF0YSA9IDAsIHNpemVfdCBkYXRh
TGVuZ3RoID0gMCwgY29uc3QgY2hhciogY29uc3QqIGhlYWRlcnMgPSAwLCBzaXplX3QgaGVhZGVy
c0xlbmd0aCA9IDAsIGJvb2wgbXVzdEhhbmRsZUludGVybmFsbHkgPSBmYWxzZSk7CiAKLSAgICB2
b2lkIGxvYWRGaWxlKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG92ZXJyaWRlQ29udGVu
dFR5cGUgPSAiIik7CisgICAgdm9pZCBsb2FkRmlsZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiBwYXRoLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBvdmVy
cmlkZUNvbnRlbnRUeXBlID0gIiIpOwogCi0gICAgdm9pZCBsb2FkU3RyaW5nKGNvbnN0IGNoYXIq
IHN0cmluZywgY29uc3QgY2hhciogYmFzZVVSTCwgY29uc3QgY2hhciogY29udGVudFR5cGUgPSAi
dGV4dC9odG1sIiwgY29uc3QgY2hhciogZmFpbGluZ1VSTCA9IDApOworICAgIHZvaWQgbG9hZFN0
cmluZyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzdHJpbmcsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcmIGNvbnRlbnRUeXBlID0gInRleHQvaHRtbCIsIGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIGZhaWxpbmdVUkwgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nOjplbXB0eVN0cmluZygpKTsKIAogICAgIHZvaWQgZG93bmxvYWQoY29uc3QgUGxhdGZv
cm06Ok5ldHdvcmtSZXF1ZXN0Jik7CiAKLSAgICBib29sIGV4ZWN1dGVKYXZhU2NyaXB0KGNvbnN0
IGNoYXIqIHNjcmlwdCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBXZWJTdHJpbmcm
IHJldHVyblZhbHVlKTsKKyAgICBib29sIGV4ZWN1dGVKYXZhU2NyaXB0KGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIHNjcmlwdCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5U
eXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiByZXR1cm5WYWx1ZSk7CiAKICAgICAv
LyBUaGlzIHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0IGV2ZW4gaWYgaW4tcGFnZSBKYXZhU2NyaXB0
IGlzIGRpc2FibGVkLgotICAgIGJvb2wgZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQo
Y29uc3QgY2hhciogc2NyaXB0LCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIFdlYlN0
cmluZyYgcmV0dXJuVmFsdWUpOworICAgIGJvb2wgZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xhdGVk
V29ybGQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgc2NyaXB0LCBKYXZhU2Ny
aXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHJl
dHVyblZhbHVlKTsKIAogICAgIC8vIFRha2VzIGEgVVRGMTYgZW5jb2RlZCBzY3JpcHQgdGhhdCBp
cyB1c2VkIGV4cGxpY2l0bHkgYnkgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgY29kZQotICAgIGJvb2wg
ZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3Qgc3RkOjp3c3RyaW5nJiBzY3Jp
cHQsIEphdmFTY3JpcHREYXRhVHlwZSYgcmV0dXJuVHlwZSwgV2ViU3RyaW5nJiByZXR1cm5WYWx1
ZSk7CisgICAgYm9vbCBleGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBzdGQ6
OndzdHJpbmcmIHNjcmlwdCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiByZXR1cm5WYWx1ZSk7CiAKLSAgICB2b2lkIGV4ZWN1dGVK
YXZhU2NyaXB0RnVuY3Rpb24oY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZmdW5jdGlv
biwgY29uc3Qgc3RkOjp2ZWN0b3I8SmF2YVNjcmlwdFZhcmlhbnQ+ICZhcmdzLCBKYXZhU2NyaXB0
VmFyaWFudCYgcmV0dXJuVmFsdWUpOworICAgIHZvaWQgZXhlY3V0ZUphdmFTY3JpcHRGdW5jdGlv
bihjb25zdCBzdGQ6OnZlY3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiAmZnVuY3Rp
b24sIGNvbnN0IHN0ZDo6dmVjdG9yPEphdmFTY3JpcHRWYXJpYW50PiAmYXJncywgSmF2YVNjcmlw
dFZhcmlhbnQmIHJldHVyblZhbHVlKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUljb25EYXRhQmFz
ZSgpOwogCkBAIC0xMjAsOCArMTIwLDggQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRvRGVz
dHJveSgpOwogCiAgICAgdm9pZCBlbmFibGVDcm9zc1NpdGVYSFIoKTsKLSAgICB2b2lkIGFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IGNoYXIqIHNvdXJjZU9yaWdpbiwgY29uc3Qg
Y2hhciogZGVzdGluYXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMp
OwotICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgY2hhciog
c291cmNlT3JpZ2luLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbk9yaWdpbiwgYm9vbCBhbGxvd0Rl
c3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzb3VyY2VPcmlnaW4sIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGRlc3RpbmF0aW9uT3JpZ2luLCBib29s
IGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vz
c1doaXRlbGlzdEVudHJ5KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHNvdXJj
ZU9yaWdpbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZGVzdGluYXRpb25P
cmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogCiAgICAgdm9pZCByZWxv
YWQoKTsKICAgICB2b2lkIHJlbG9hZEZyb21DYWNoZSgpOwpAQCAtMTU4LDEwICsxNTgsMTAgQEAg
cHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHN0cm9rZSB3YXMgaGFuZGxl
ZCBieSBXZWJLaXQuCiAgICAgYm9vbCBrZXlFdmVudChjb25zdCBQbGF0Zm9ybTo6S2V5Ym9hcmRF
dmVudCYpOwogCi0gICAgV2ViU3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0gICAgV2ViU3RyaW5nIHNl
bGVjdGVkVGV4dCgpIGNvbnN0OwotICAgIFdlYlN0cmluZyBjdXRTZWxlY3RlZFRleHQoKTsKLSAg
ICB2b2lkIGluc2VydFRleHQoY29uc3QgV2ViU3RyaW5nJik7CisgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyB0aXRsZSgpIGNvbnN0OworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyBjdXRTZWxlY3RlZFRleHQoKTsKKyAgICB2b2lkIGluc2VydFRleHQoY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJDdXJyZW50SW5wdXRGaWVs
ZCgpOwogCiAgICAgdm9pZCBjdXQoKTsKQEAgLTE3MCw5ICsxNzAsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZWxlY3RBbGwoKTsKIAogICAgIC8vIFRleHQgZW5jb2RpbmcuCi0gICAgV2ViU3RyaW5n
IHRleHRFbmNvZGluZygpOwotICAgIFdlYlN0cmluZyBmb3JjZWRUZXh0RW5jb2RpbmcoKTsKLSAg
ICB2b2lkIHNldEZvcmNlZFRleHRFbmNvZGluZyhjb25zdCBjaGFyKik7CisgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyB0ZXh0RW5jb2RpbmcoKTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nIGZvcmNlZFRleHRFbmNvZGluZygpOworICAgIHZvaWQgc2V0Rm9yY2VkVGV4
dEVuY29kaW5nKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmKTsKIAogICAgIC8v
IFNjcm9sbCBwb3NpdGlvbiByZXR1cm5lZCBpcyBpbiB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcy4K
ICAgICBQbGF0Zm9ybTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKQEAgLTI3OSwy
NSArMjc5LDI1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9wdXBMaXN0Q2xvc2VkKGludCBzaXpl
LCBjb25zdCBib29sKiBzZWxlY3RlZHMpOwogICAgIHZvaWQgcG9wdXBMaXN0Q2xvc2VkKGludCBp
bmRleCk7Ci0gICAgdm9pZCBzZXREYXRlVGltZUlucHV0KGNvbnN0IFdlYlN0cmluZyYgdmFsdWUp
OwotICAgIHZvaWQgc2V0Q29sb3JJbnB1dChjb25zdCBXZWJTdHJpbmcmIHZhbHVlKTsKKyAgICB2
b2lkIHNldERhdGVUaW1lSW5wdXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYg
dmFsdWUpOworICAgIHZvaWQgc2V0Q29sb3JJbnB1dChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiB2YWx1ZSk7CiAKICAgICB2b2lkIG9uSW5wdXRMb2NhbGVDaGFuZ2VkKGJvb2wg
aXNSVEwpOwogICAgIHN0YXRpYyB2b2lkIG9uTmV0d29ya0F2YWlsYWJpbGl0eUNoYW5nZWQoYm9v
bCBhdmFpbGFibGUpOwotICAgIHN0YXRpYyB2b2lkIG9uQ2VydGlmaWNhdGVTdG9yZUxvY2F0aW9u
U2V0KGNvbnN0IFdlYlN0cmluZyYgY2FQYXRoKTsKKyAgICBzdGF0aWMgdm9pZCBvbkNlcnRpZmlj
YXRlU3RvcmVMb2NhdGlvblNldChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBj
YVBhdGgpOwogCi0gICAgV2ViU3RyaW5nIHRleHRIYXNBdHRyaWJ1dGUoY29uc3QgV2ViU3RyaW5n
JiBxdWVyeSkgY29uc3Q7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyB0ZXh0SGFz
QXR0cmlidXRlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHF1ZXJ5KSBjb25z
dDsKIAotICAgIHZvaWQgc2V0QWxsb3dOb3RpZmljYXRpb24oY29uc3QgV2ViU3RyaW5nJiBkb21h
aW4sIGJvb2wgYWxsb3cpOworICAgIHZvaWQgc2V0QWxsb3dOb3RpZmljYXRpb24oY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZG9tYWluLCBib29sIGFsbG93KTsKIAogICAgIFBs
YXRmb3JtOjpXZWJDb250ZXh0IHdlYkNvbnRleHQoVGFyZ2V0RGV0ZWN0aW9uU3RyYXRlZ3kpIGNv
bnN0OwogCiAgICAgdHlwZWRlZiBpbnRwdHJfdCBCYWNrRm9yd2FyZElkOwogICAgIHN0cnVjdCBC
YWNrRm9yd2FyZEVudHJ5IHsKLSAgICAgICAgV2ViU3RyaW5nIHVybDsKLSAgICAgICAgV2ViU3Ry
aW5nIG9yaWdpbmFsVXJsOwotICAgICAgICBXZWJTdHJpbmcgdGl0bGU7Ci0gICAgICAgIFdlYlN0
cmluZyBuZXR3b3JrVG9rZW47CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcg
dXJsOworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIG9yaWdpbmFsVXJsOwor
ICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIHRpdGxlOworICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIG5ldHdvcmtUb2tlbjsKICAgICAgICAgQmFja0Zvcndh
cmRJZCBpZDsKICAgICAgICAgYm9vbCBsYXN0VmlzaXRXYXNIVFRQTm9uR2V0OwogICAgIH07CkBA
IC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNXZWJJbnNwZWN0b3JFbmFibGVk
KCk7CiAgICAgdm9pZCBlbmFibGVQYXNzd29yZEVjaG8oKTsKICAgICB2b2lkIGRpc2FibGVQYXNz
d29yZEVjaG8oKTsKLSAgICB2b2lkIGRpc3BhdGNoSW5zcGVjdG9yTWVzc2FnZShjb25zdCBzdGQ6
OnN0cmluZyYgbWVzc2FnZSk7CisgICAgdm9pZCBkaXNwYXRjaEluc3BlY3Rvck1lc3NhZ2UoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWVzc2FnZSk7CiAgICAgdm9pZCBpbnNw
ZWN0Q3VycmVudENvbnRleHRFbGVtZW50KCk7CiAKICAgICAvLyBGSVhNRTogTmVlZHMgQVBJIHJl
dmlldyBvbiB0aGlzIGhlYWRlci4gU2VlIFBSICMxMjA0MDIuCkBAIC0zODMsMTEgKzM4MywxMSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0OwogICAgIFdlYkNvcmU6
OlBhZ2VQb3B1cEJsYWNrQmVycnkqIHBvcHVwKCk7CiAKLSAgICB2b2lkIGF1dG9maWxsVGV4dEZp
ZWxkKGNvbnN0IHN0ZDo6c3RyaW5nJik7CisgICAgdm9pZCBhdXRvZmlsbFRleHRGaWVsZChjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKICAgICB2b2lkIGVuYWJsZVFueEph
dmFTY3JpcHRPYmplY3QoYm9vbCk7CiAKLSAgICBXZWJTdHJpbmcgcmVuZGVyVHJlZUFzVGV4dCgp
OworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgcmVuZGVyVHJlZUFzVGV4dCgpOwog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgfldlYlBhZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNsaWVudC5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjAsMTIgKzIwLDEyIEBACiAjZGVmaW5lIFdlYlBhZ2VDbGllbnRfaAogCiAjaW5jbHVk
ZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogCiAjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtQ3Vyc29yLmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtSW5wdXRFdmVudHMuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1OYXZpZ2F0aW9u
VHlwZS5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMuaD4KKyNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDxpbWYvZXZlbnRzLmg+
CiAjaW5jbHVkZSA8aW50ZXJhY3Rpb24vU2Nyb2xsVmlld0Jhc2UuaD4KICNpbmNsdWRlIDx2ZWN0
b3I+CkBAIC0xMDcsMTQgKzEwNywxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlm
eURvY3VtZW50T25Mb2FkKGJvb2wpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlXaW5k
b3dPYmplY3RDbGVhcmVkKCkgPSAwOwotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGludm9rZUNsaWVu
dEphdmFTY3JpcHRDYWxsYmFjayhjb25zdCBjaGFyKiBjb25zdCogYXJncywgdW5zaWduZWQgbnVt
QXJncykgPSAwOworICAgIHZpcnR1YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBpbnZv
a2VDbGllbnRKYXZhU2NyaXB0Q2FsbGJhY2soY29uc3QgY2hhciogY29uc3QqIGFyZ3MsIHVuc2ln
bmVkIG51bUFyZ3MpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
KGNvbnN0IHVuc2lnbmVkIHNob3J0KiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlTGVuZ3RoLCBj
b25zdCB1bnNpZ25lZCBzaG9ydCogc291cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgsIHVuc2ln
bmVkIGxpbmVOdW1iZXIpID0gMDsKICAgICB2aXJ0dWFsIGludCBzaG93QWxlcnREaWFsb2coQWxl
cnRUeXBlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0
IHVuc2lnbmVkIHNob3J0KiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlTGVuZ3RoLCBjb25zdCBj
aGFyKiBvcmlnaW4sIHVuc2lnbmVkIG9yaWdpbkxlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCB1bnNpZ25lZCBzaG9ydCogbWVzc2FnZSwgdW5z
aWduZWQgbWVzc2FnZUxlbmd0aCwgY29uc3QgY2hhciogb3JpZ2luLCB1bnNpZ25lZCBvcmlnaW5M
ZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdFByb21wdChjb25zdCB1
bnNpZ25lZCBzaG9ydCogbWVzc2FnZSwgdW5zaWduZWQgbWVzc2FnZUxlbmd0aCwgY29uc3QgdW5z
aWduZWQgc2hvcnQqIGRlZmF1bHRWYWx1ZSwgdW5zaWduZWQgZGVmYXVsdFZhbHVlTGVuZ3RoLCBj
b25zdCBjaGFyKiBvcmlnaW4sIHVuc2lnbmVkIG9yaWdpbkxlbmd0aCwgV2ViU3RyaW5nJiByZXN1
bHQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdFByb21wdChjb25zdCB1bnNp
Z25lZCBzaG9ydCogbWVzc2FnZSwgdW5zaWduZWQgbWVzc2FnZUxlbmd0aCwgY29uc3QgdW5zaWdu
ZWQgc2hvcnQqIGRlZmF1bHRWYWx1ZSwgdW5zaWduZWQgZGVmYXVsdFZhbHVlTGVuZ3RoLCBjb25z
dCBjaGFyKiBvcmlnaW4sIHVuc2lnbmVkIG9yaWdpbkxlbmd0aCwgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyYgcmVzdWx0KSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbChjb25zdCB1bnNpZ25lZCBzaG9ydCogbWVzc2FnZSwgdW5zaWduZWQgbWVz
c2FnZUxlbmd0aCwgY29uc3QgY2hhciogb3JpZ2luLCB1bnNpZ25lZCBvcmlnaW5MZW5ndGgpID0g
MDsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkgPSAwOwpA
QCAtMTY1LDEwICsxNjUsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlc2V0QmFj
a0ZvcndhcmRMaXN0KHVuc2lnbmVkIGxpc3RTaXplLCB1bnNpZ25lZCBjdXJyZW50SW5kZXgpID0g
MDsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuUG9wdXBMaXN0KGJvb2wgbXVsdGlwbGUsIGludCBz
aXplLCBjb25zdCBTY29wZUFycmF5PFdlYlN0cmluZz4mIGxhYmVscywgY29uc3QgYm9vbCogZW5h
YmxlZHMsIGNvbnN0IGludCogaXRlbVR5cGUsIGNvbnN0IGJvb2wqIHNlbGVjdGVkcykgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBjaG9vc2VGaWxlbmFtZXMoYm9vbCBhbGxvd011bHRpcGxlLCBjb25z
dCBTaGFyZWRBcnJheTxXZWJTdHJpbmc+JiBhY2NlcHRUeXBlcywgY29uc3QgU2hhcmVkQXJyYXk8
V2ViU3RyaW5nPiYgaW5pdGlhbEZpbGVzLCBjb25zdCBXZWJTdHJpbmcmIGNhcHR1cmUsIFNoYXJl
ZEFycmF5PFdlYlN0cmluZz4mIGNob3NlbkZpbGVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9w
ZW5Qb3B1cExpc3QoYm9vbCBtdWx0aXBsZSwgaW50IHNpemUsIGNvbnN0IFNjb3BlQXJyYXk8Qmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4mIGxhYmVscywgY29uc3QgYm9vbCogZW5hYmxlZHMs
IGNvbnN0IGludCogaXRlbVR5cGUsIGNvbnN0IGJvb2wqIHNlbGVjdGVkcykgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBjaG9vc2VGaWxlbmFtZXMoYm9vbCBhbGxvd011bHRpcGxlLCBjb25zdCBTaGFy
ZWRBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgYWNjZXB0VHlwZXMsIGNvbnN0
IFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBpbml0aWFsRmlsZXMs
IGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGNhcHR1cmUsIFNoYXJlZEFycmF5
PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBjaG9zZW5GaWxlcykgPSAwOwogCi0gICAg
dmlydHVhbCB2b2lkIGxvYWRQbHVnaW5Gb3JNaW1ldHlwZShpbnQsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgY29uc3QgU2hhcmVkQXJyYXk8V2ViU3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgU2hh
cmVkQXJyYXk8V2ViU3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IGNoYXIqIHVybCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUGx1Z2luRm9yTWltZXR5cGUoaW50LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGNvbnN0IFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBTaGFyZWRBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IGNoYXIqIHVybCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlQbHVnaW5SZWN0Q2hhbmdlZChpbnQsIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3RDaGFu
Z2VkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lQbHVnaW4oaW50KSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHBsYXlNZWRpYShpbnQpID0gMDsKQEAgLTE3OCwyNyArMTc4LDI3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGludCwgZmxvYXQpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoaW50LCBib29sKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFdlYlBh
Z2UqIGNyZWF0ZVdpbmRvdyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5z
aWduZWQgZmxhZ3MsIGNvbnN0IFdlYlN0cmluZyYgdXJsLCBjb25zdCBXZWJTdHJpbmcmIHdpbmRv
d05hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFdlYlBhZ2UqIGNyZWF0ZVdpbmRvdyhpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgZmxhZ3MsIGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgd2luZG93TmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ2xvc2VX
aW5kb3coKSA9IDA7CiAKICAgICAvLyBEYXRhYmFzZSBpbnRlcmZhY2UuCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VRdW90YShjb25zdCB1bnNpZ25lZCBzaG9ydCogb3Jp
Z2luLCB1bnNpZ25lZCBvcmlnaW5MZW5ndGgsIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBkYXRhYmFz
ZU5hbWUsIHVuc2lnbmVkIGRhdGFiYXNlTmFtZUxlbmd0aCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBvcmlnaW5Vc2FnZSwgdW5zaWduZWQgbG9uZyBs
b25nIGVzdGltYXRlZFNpemUpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uRm9yVXJs
KGNvbnN0IGNoYXIqIG9yaWdpbmFsUGFnZVVybCwgY29uc3QgY2hhciogZmluYWxQYWdlVXJsLCBj
b25zdCBjaGFyKiBpY29uVXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZhdmljb24oY29u
c3QgY2hhciogZGF0YUluQmFzZTY0LCBjb25zdCBjaGFyKiB1cmwpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TGFyZ2VJY29uKGNvbnN0IGNoYXIqIGljb25VcmwpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SWNvbkZvclVybChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBv
cmlnaW5hbFBhZ2VVcmwsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGZpbmFs
UGFnZVVybCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgaWNvblVybCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRGYXZpY29uKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcmIGRhdGFJbkJhc2U2NCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyYgdXJsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhcmdlSWNvbihjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBpY29uVXJsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFdlYkFwcENhcGFibGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlYXJjaFByb3ZpZGVy
RGV0YWlscyhjb25zdCBjaGFyKiB0aXRsZSwgY29uc3QgY2hhciogZG9jdW1lbnRVcmwpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0QWx0ZXJuYXRlRmVlZERldGFpbHMoY29uc3QgY2hhciogdGl0
bGUsIGNvbnN0IGNoYXIqIGZlZWRVcmwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VhcmNo
UHJvdmlkZXJEZXRhaWxzKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHRpdGxl
LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBkb2N1bWVudFVybCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRBbHRlcm5hdGVGZWVkRGV0YWlscyhjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiB0aXRsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgZmVlZFVybCkgPSAwOwogCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0RXJyb3JQYWdl
KGludCBlcnJvckNvZGUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgY29uc3QgY2hhciogdXJs
KSA9IDA7CisgICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIGdldEVycm9y
UGFnZShpbnQgZXJyb3JDb2RlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCkgPSAw
OwogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZWZlckxvYWRpbmcoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGRpZFJlc3VtZUxvYWRpbmcoKSA9IDA7CiAKICAgICAvLyBIZWFkZXJzIGlzIGEgbGlz
dCBvZiBhbHRlcm5hdGluZyBrZXkgYW5kIHZhbHVlLgotICAgIHZpcnR1YWwgdm9pZCBzZXRNZXRh
SGVhZGVycyhjb25zdCBTY29wZUFycmF5PFdlYlN0cmluZz4mIGhlYWRlcnMsIHVuc2lnbmVkIGlu
dCBoZWFkZXJzU2l6ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNZXRhSGVhZGVycyhjb25z
dCBTY29wZUFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBoZWFkZXJzLCB1bnNp
Z25lZCBpbnQgaGVhZGVyc1NpemUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBuZWVkTW9yZURh
dGEoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdlYkluc3BlY3Rvck1lc3NhZ2VUb0Zy
b250ZW5kKGludCBpZCwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxlbmd0aCkgPSAwOwpAQCAt
MjEwLDEwICsyMTAsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQmxvY2ta
b29tKGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JiBmaW5hbFBvaW50LCBkb3VibGUgZmluYWxT
Y2FsZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFByZXZlbnRzU2NyZWVuSWRsZURpbW1p
bmcoYm9vbCBub0RpbW1pbmcpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoY29uc3QgdW5zaWduZWQgc2hvcnQqIHJlYWxtLCB1bnNpZ25lZCBpbnQgcmVhbG1M
ZW5ndGgsIFdlYlN0cmluZyYgdXNlcm5hbWUsIFdlYlN0cmluZyYgcGFzc3dvcmQpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgdW5zaWduZWQgc2hv
cnQqIHJlYWxtLCB1bnNpZ25lZCBpbnQgcmVhbG1MZW5ndGgsIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcmIHVzZXJuYW1lLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYXNzd29y
ZCkgPSAwOwogICAgIHZpcnR1YWwgU2F2ZUNyZWRlbnRpYWxUeXBlIG5vdGlmeVNob3VsZFNhdmVD
cmVkZW50aWFsKGJvb2wgaXNOZXcpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY1Byb3h5Q3Jl
ZGVudGlhbChjb25zdCBXZWJTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHBhc3N3
b3JkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvcHVwQXV0b2ZpbGxEaWFsb2coY29u
c3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNQcm94eUNyZWRlbnRpYWwoY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBvcHVwQXV0
b2ZpbGxEaWFsb2coY29uc3Qgc3RkOjp2ZWN0b3I8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
Zz4mLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5RGlzbWlzc0F1dG9maWxsRGlhbG9nKCkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFBsdWdpbkVudGVyRnVsbFNjcmVlbigpID0gMDsKQEAgLTIyNSwxNiArMjI1LDE1IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgdW5sb2NrT3JpZW50YXRpb24oKSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGlzQWN0aXZlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RXZWJHTFBlcm1pc3Npb24oY29u
c3QgV2ViU3RyaW5nJikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoV2ViU3Ry
aW5nKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0YXR1cyhXZWJTdHJpbmcpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXMoY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYWNjZXB0TmF2aWdhdGlv
blJlcXVlc3QoY29uc3QgUGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0JiwgUGxhdGZvcm06Ok5hdmln
YXRpb25UeXBlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGN1cnNvckV2ZW50TW9kZUNoYW5nZWQo
UGxhdGZvcm06OkN1cnNvckV2ZW50TW9kZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2
ZW50TW9kZUNoYW5nZWQoUGxhdGZvcm06OlRvdWNoRXZlbnRNb2RlKSA9IDA7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgZG93bmxvYWRBbGxvd2VkKGNvbnN0IGNoYXIqIHVybCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkb3dubG9hZFJlcXVlc3RlZChQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtKiwgY29uc3Qg
V2ViU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkb3du
bG9hZEFsbG93ZWQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkUmVxdWVzdGVkKFBsYXRmb3JtOjpGaWx0ZXJTdHJl
YW0qLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFt
ZSkgPSAwOwogCiAgICAgdmlydHVhbCBpbnQgZnVsbHNjcmVlblN0YXJ0KCkgPSAwOwogICAgIHZp
cnR1YWwgaW50IGZ1bGxzY3JlZW5TdGFydChjb25zdCBjaGFyKiBjb250ZXh0TmFtZSwgUGxhdGZv
cm06OkdyYXBoaWNzOjpXaW5kb3cqLCB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSA9IDA7CkBAIC0yNjMsOSArMjYyLDkgQEAgcHVibGljOgog
ICAgICAgICBQcm90b2NvbEhhbmRsZXJzUmVnaXN0ZXJlZCwKICAgICAgICAgUHJvdG9jb2xIYW5k
bGVyc0RlY2xpbmVkCiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJQcm90b2NvbEhh
bmRsZXIoY29uc3QgV2ViU3RyaW5nJiAvKnNjaGVtZSovLCBjb25zdCBXZWJTdHJpbmcmIC8qYmFz
ZVVSTCovLCBjb25zdCBXZWJTdHJpbmcmIC8qdXJsKi8sIGNvbnN0IFdlYlN0cmluZyYgLyp0aXRs
ZSovKSA9IDA7Ci0gICAgdmlydHVhbCBQcm90b2NvbEhhbmRsZXJzU3RhdGUgaXNQcm90b2NvbEhh
bmRsZXJSZWdpc3RlcmVkKGNvbnN0IFdlYlN0cmluZyYgLypzY2hlbWUqLywgY29uc3QgV2ViU3Ry
aW5nJiAvKmJhc2VVUkwqLywgY29uc3QgV2ViU3RyaW5nJiAvKnVybCovKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHVucmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIoY29uc3QgV2ViU3RyaW5nJiAvKnNj
aGVtZSovLCBjb25zdCBXZWJTdHJpbmcmIC8qYmFzZVVSTCovLCBjb25zdCBXZWJTdHJpbmcmIC8q
dXJsKi8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgLypzY2hlbWUqLywgY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgLypiYXNlVVJMKi8sIGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcmIC8qdXJsKi8sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIC8qdGl0bGUqLykgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2xIYW5kbGVyc1N0YXRlIGlz
UHJvdG9jb2xIYW5kbGVyUmVnaXN0ZXJlZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiAvKnNjaGVtZSovLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiAvKmJh
c2VVUkwqLywgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgLyp1cmwqLykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIC8qc2NoZW1lKi8sIGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcmIC8qYmFzZVVSTCovLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiAvKnVybCovKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFVzZXJNZWRp
YShjb25zdCBQbGF0Zm9ybTo6V2ViVXNlck1lZGlhUmVxdWVzdCYpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsVXNlck1lZGlhUmVxdWVzdChjb25zdCBQbGF0Zm9ybTo6V2ViVXNlck1lZGlh
UmVxdWVzdCYpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdl
X3AuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJQYWdlX3AuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDIxICsxMDUsMjEgQEAgcHVibGljOgog
CiAgICAgV2ViUGFnZUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0K
IAotICAgIHZvaWQgaW5pdChjb25zdCBXZWJTdHJpbmcmIHBhZ2VHcm91cE5hbWUpOworICAgIHZv
aWQgaW5pdChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYWdlR3JvdXBOYW1l
KTsKICAgICBib29sIGhhbmRsZU1vdXNlRXZlbnQoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50
Jik7CiAgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVu
dCYpOwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogbmV0d29y
a1Rva2VuLCBjb25zdCBjaGFyKiBtZXRob2QsIFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6Q2Fj
aGVQb2xpY3ksIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCBjb25zdCBjaGFy
KiBjb25zdCogaGVhZGVycywgc2l6ZV90IGhlYWRlcnNMZW5ndGgsIGJvb2wgaXNJbml0aWFsLCBi
b29sIG11c3RIYW5kbGVJbnRlcm5hbGx5ID0gZmFsc2UsIGJvb2wgZm9yY2VEb3dubG9hZCA9IGZh
bHNlLCBjb25zdCBjaGFyKiBvdmVycmlkZUNvbnRlbnRUeXBlID0gIiIsIGNvbnN0IGNoYXIqIHN1
Z2dlc3RlZFNhdmVOYW1lID0gIiIpOwotICAgIHZvaWQgbG9hZFN0cmluZyhjb25zdCBjaGFyKiBz
dHJpbmcsIGNvbnN0IGNoYXIqIGJhc2VVUkwsIGNvbnN0IGNoYXIqIG1pbWVUeXBlLCBjb25zdCBj
aGFyKiBmYWlsaW5nVVJMID0gMCk7Ci0gICAgYm9vbCBleGVjdXRlSmF2YVNjcmlwdChjb25zdCBj
aGFyKiBzY3JpcHQsIEphdmFTY3JpcHREYXRhVHlwZSYgcmV0dXJuVHlwZSwgV2ViU3RyaW5nJiBy
ZXR1cm5WYWx1ZSk7Ci0gICAgYm9vbCBleGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZChj
b25zdCBXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlJiwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1
cm5UeXBlLCBXZWJTdHJpbmcmIHJldHVyblZhbHVlKTsKKyAgICB2b2lkIGxvYWQoY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiBuZXR3b3JrVG9rZW4sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIG1ldGhvZCwgUGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpDYWNoZVBvbGljeSwgY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIGNvbnN0IGNoYXIqIGNvbnN0KiBoZWFkZXJz
LCBzaXplX3QgaGVhZGVyc0xlbmd0aCwgYm9vbCBpc0luaXRpYWwsIGJvb2wgbXVzdEhhbmRsZUlu
dGVybmFsbHkgPSBmYWxzZSwgYm9vbCBmb3JjZURvd25sb2FkID0gZmFsc2UsIGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG92ZXJyaWRlQ29udGVudFR5cGUgPSBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiBzdWdnZXN0ZWRTYXZlTmFtZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmc6OmVtcHR5U3RyaW5nKCkpOworICAgIHZvaWQgbG9hZFN0cmluZyhjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzdHJpbmcsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBmYWlsaW5nVVJMKTsK
KyAgICBib29sIGV4ZWN1dGVKYXZhU2NyaXB0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIHNjcmlwdCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiByZXR1cm5WYWx1ZSk7CisgICAgYm9vbCBleGVjdXRlSmF2YVNj
cmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlJiwgSmF2
YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiByZXR1cm5WYWx1ZSk7CiAKICAgICB2b2lkIHN0b3BDdXJyZW50TG9hZCgpOwogICAgIHZvaWQg
cHJlcGFyZVRvRGVzdHJveSgpOwogCiAgICAgdm9pZCBlbmFibGVDcm9zc1NpdGVYSFIoKTsKLSAg
ICB2b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IGNoYXIqIHNvdXJjZU9y
aWdpbiwgY29uc3QgY2hhciogZGVzdGluYXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlv
blN1YmRvbWFpbnMpOwotICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgY2hhciogc291cmNlT3JpZ2luLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbk9yaWdpbiwg
Ym9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgdm9pZCBhZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzb3Vy
Y2VPcmlnaW4sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGRlc3RpbmF0aW9u
T3JpZ2luLCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICB2b2lkIHJlbW92
ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYg
ZGVzdGluYXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogCiAg
ICAgTG9hZFN0YXRlIGxvYWRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFN0YXRlOyB9CiAg
ICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2xvYWRTdGF0ZSA9PSBXZWJQYWdl
UHJpdmF0ZTo6UHJvdmlzaW9uYWwgfHwgbV9sb2FkU3RhdGUgPT0gV2ViUGFnZVByaXZhdGU6OkNv
bW1pdHRlZDsgfQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViQ29y
ZTo6UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklmUG9zaXRp
b25lZChXZWJDb3JlOjpSZW5kZXJMYXllciopOwogICAgIHN0YXRpYyBXZWJDb3JlOjpSZW5kZXJM
YXllciogZW5jbG9zaW5nRml4ZWRQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJZkZpeGVkUG9zaXRp
b25lZChXZWJDb3JlOjpSZW5kZXJMYXllciopOwogCi0gICAgc3RhdGljIGNvbnN0IFN0cmluZyYg
ZGVmYXVsdFVzZXJBZ2VudCgpOworICAgIHN0YXRpYyBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiBkZWZhdWx0VXNlckFnZW50KCk7CiAKICAgICB2b2lkIHNldFZpc2libGUoYm9v
bCk7CiAjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCkBAIC02MDEsMTQgKzYwMSwxMyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBtX3dvdWxkTG9hZE1hbnVhbFNjcmlwdDsKICAgICBib29sIG1f
d291bGRTZXRGb2N1c2VkOwogICAgIGJvb2wgbV93b3VsZFNldFBhZ2VWaXNpYmlsaXR5U3RhdGU7
CisgICAgYm9vbCBtX2NhY2hlZEZvY3VzZWQ7CisgICAgYm9vbCBtX2VuYWJsZVFueEphdmFTY3Jp
cHRPYmplY3Q7CiAgICAgVmVjdG9yPGJvb2w+IG1fY2FjaGVkUG9wdXBMaXN0U2VsZWN0ZWRzOwog
ICAgIGludCBtX2NhY2hlZFBvcHVwTGlzdFNlbGVjdGVkSW5kZXg7Ci0gICAgV2ViU3RyaW5nIG1f
Y2FjaGVkRGF0ZVRpbWVJbnB1dDsKLSAgICBXZWJTdHJpbmcgbV9jYWNoZWRDb2xvcklucHV0Owor
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgbV9jYWNoZWREYXRlVGltZUlucHV0Owor
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgbV9jYWNoZWRDb2xvcklucHV0OwogICAg
IFdlYkNvcmU6OktVUkwgbV9jYWNoZWRNYW51YWxTY3JpcHQ7Ci0gICAgYm9vbCBtX2NhY2hlZEZv
Y3VzZWQ7Ci0KLSAgICBib29sIG1fZW5hYmxlUW54SmF2YVNjcmlwdE9iamVjdDsKIAogICAgIGNs
YXNzIERlZmVycmVkVGFza0Jhc2UgewogICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsMTAgKzIyLDEwIEBACiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIldlYlNldHRpbmdzX3AuaCIKIAotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybURldmljZUluZm8uaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5
UGxhdGZvcm1Gb250SW5mby5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNjcmVlbi5o
PgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPENvbG9y
Lmg+CiAjaW5jbHVkZSA8RmxvYXRTaXplLmg+CiAjaW5jbHVkZSA8UGFnZUNhY2hlLmg+CkBAIC0y
MDEsMTUgKzIwMSwxNSBAQCBXZWJTZXR0aW5ncyogV2ViU2V0dGluZ3M6OnN0YW5kYXJkU2V0dGlu
CiAgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0SW50ZWdlcihXZWJLaXRNaW5pbXVtRm9udFNp
emUsIDgpOwogICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0V2ViU29j
a2V0c0VuYWJsZWQsIHRydWUpOwogCi0gICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0U3RyaW5n
KFdlYktpdEZpeGVkRm9udEZhbWlseSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjpp
bnN0YW5jZSgpLT5mb250RmFtaWx5KCItd2Via2l0LW1vbm9zcGFjZSIsICIiKS5jX3N0cigpKTsK
LSAgICBzZXR0aW5ncy0+bV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0U2Fuc1NlcmlmZkZvbnRG
YW1pbHksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZh
bWlseSgiLXdlYmtpdC1zYW5zLXNlcmlmIiwgIiIpLmNfc3RyKCkpOwotICAgIHNldHRpbmdzLT5t
X3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTZXJpZmZGb250RmFtaWx5LCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoIi13ZWJraXQtc2VyaWYi
LCAiIikuY19zdHIoKSk7Ci0gICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktp
dFN0YW5kYXJkRm9udEZhbWlseSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0
YW5jZSgpLT5mb250RmFtaWx5KCItd2Via2l0LXN0YW5kYXJkIiwgIiIpLmNfc3RyKCkpOworICAg
IHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRGaXhlZEZvbnRGYW1pbHksIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdl
YmtpdC1tb25vc3BhY2UiLCAiIikpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmlu
ZyhXZWJLaXRTYW5zU2VyaWZmRm9udEZhbWlseSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJ
bmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KCItd2Via2l0LXNhbnMtc2VyaWYiLCAiIikpOwor
ICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTZXJpZmZGb250RmFtaWx5
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHko
Ii13ZWJraXQtc2VyaWYiLCAiIikpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmlu
ZyhXZWJLaXRTdGFuZGFyZEZvbnRGYW1pbHksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5m
bzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1zdGFuZGFyZCIsICIiKSk7CiAKICAg
ICByZXR1cm4gc2V0dGluZ3M7CiB9CiAKLXZvaWQgV2ViU2V0dGluZ3M6OmFkZFN1cHBvcnRlZE9i
amVjdFBsdWdpbk1JTUVUeXBlKGNvbnN0IGNoYXIqIHR5cGUpCit2b2lkIFdlYlNldHRpbmdzOjph
ZGRTdXBwb3J0ZWRPYmplY3RQbHVnaW5NSU1FVHlwZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiB0eXBlKQogewogICAgIGlmICghc19zdXBwb3J0ZWRPYmplY3RNSU1FVHlwZXMp
CiAgICAgICAgIHNfc3VwcG9ydGVkT2JqZWN0TUlNRVR5cGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5n
PjsKQEAgLTIxNyw5ICsyMTcsOSBAQCB2b2lkIFdlYlNldHRpbmdzOjphZGRTdXBwb3J0ZWRPYmpl
Y3RQbHVnCiAgICAgc19zdXBwb3J0ZWRPYmplY3RNSU1FVHlwZXMtPmFkZCh0eXBlKTsKIH0KIAot
Ym9vbCBXZWJTZXR0aW5nczo6aXNTdXBwb3J0ZWRPYmplY3RNSU1FVHlwZShjb25zdCBXZWJTdHJp
bmcmIG1pbWVUeXBlKQorYm9vbCBXZWJTZXR0aW5nczo6aXNTdXBwb3J0ZWRPYmplY3RNSU1FVHlw
ZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICBp
ZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgIGlmIChtaW1lVHlwZS5lbXB0eSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXNfc3VwcG9ydGVkT2JqZWN0TUlNRVR5cGVzKQpA
QCAtMzI4LDYyICszMjgsNjIgQEAgdm9pZCBXZWJTZXR0aW5nczo6c2V0TWluaW11bUZvbnRTaXpl
KGludAogICAgIG1fcHJpdmF0ZS0+c2V0SW50ZWdlcihXZWJLaXRNaW5pbXVtRm9udFNpemUsIG1p
bmltdW1Gb250U2l6ZSk7CiB9CiAKLVdlYlN0cmluZyBXZWJTZXR0aW5nczo6c2VyaWZGb250RmFt
aWx5KCkgY29uc3QKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViU2V0dGluZ3M6OnNl
cmlmRm9udEZhbWlseSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U3RyaW5n
KFdlYktpdFNlcmlmZkZvbnRGYW1pbHkpOwogfQogCi12b2lkIFdlYlNldHRpbmdzOjpzZXRTZXJp
ZkZvbnRGYW1pbHkoY29uc3QgY2hhciogc2VyaWZmRm9udEZhbWlseSkKK3ZvaWQgV2ViU2V0dGlu
Z3M6OnNldFNlcmlmRm9udEZhbWlseShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiBzZXJpZmZGb250RmFtaWx5KQogewogICAgIG1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdFNl
cmlmZkZvbnRGYW1pbHksIHNlcmlmZkZvbnRGYW1pbHkpOwogfQogCi1XZWJTdHJpbmcgV2ViU2V0
dGluZ3M6OmZpeGVkRm9udEZhbWlseSgpIGNvbnN0CitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nIFdlYlNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHkoKSBjb25zdAogewogICAgIHJldHVybiBt
X3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRGaXhlZEZvbnRGYW1pbHkpOwogfQogCi12b2lkIFdl
YlNldHRpbmdzOjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgY2hhciogZml4ZWRGb250RmFtaWx5
KQordm9pZCBXZWJTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcmIGZpeGVkRm9udEZhbWlseSkKIHsKICAgICBtX3ByaXZhdGUtPnNl
dFN0cmluZyhXZWJLaXRGaXhlZEZvbnRGYW1pbHksIGZpeGVkRm9udEZhbWlseSk7CiB9CiAKLVdl
YlN0cmluZyBXZWJTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0CitCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjpzYW5zU2VyaWZGb250RmFtaWx5KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0U2Fuc1Nlcmlm
ZkZvbnRGYW1pbHkpOwogfQogCi12b2lkIFdlYlNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFt
aWx5KGNvbnN0IGNoYXIqIHNhbnNTZXJpZmZGb250RmFtaWx5KQordm9pZCBXZWJTZXR0aW5nczo6
c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiBzYW5zU2VyaWZmRm9udEZhbWlseSkKIHsKICAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJL
aXRTYW5zU2VyaWZmRm9udEZhbWlseSwgc2Fuc1NlcmlmZkZvbnRGYW1pbHkpOwogfQogCi1XZWJT
dHJpbmcgV2ViU2V0dGluZ3M6OnN0YW5kYXJkRm9udEZhbWlseSgpIGNvbnN0CitCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjpzdGFuZGFyZEZvbnRGYW1pbHkoKSBjb25z
dAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRTdGFuZGFyZEZvbnRG
YW1pbHkpOwogfQogCi12b2lkIFdlYlNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29u
c3QgY2hhciogc3RhbmRhcmRGb250RmFtaWx5KQordm9pZCBXZWJTZXR0aW5nczo6c2V0U3RhbmRh
cmRGb250RmFtaWx5KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHN0YW5kYXJk
Rm9udEZhbWlseSkKIHsKICAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTdGFuZGFyZEZv
bnRGYW1pbHksIHN0YW5kYXJkRm9udEZhbWlseSk7CiB9CiAKLVdlYlN0cmluZyBXZWJTZXR0aW5n
czo6dXNlckFnZW50U3RyaW5nKCkgY29uc3QKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcg
V2ViU2V0dGluZ3M6OnVzZXJBZ2VudFN0cmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Z2V0U3RyaW5nKEJsYWNrQmVycnlVc2VyQWdlbnRTdHJpbmcpOwogfQogCi12b2lkIFdl
YlNldHRpbmdzOjpzZXRVc2VyQWdlbnRTdHJpbmcoY29uc3QgV2ViU3RyaW5nJiB1c2VyQWdlbnRT
dHJpbmcpCit2b2lkIFdlYlNldHRpbmdzOjpzZXRVc2VyQWdlbnRTdHJpbmcoY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXNlckFnZW50U3RyaW5nKQogewogICAgIG1fcHJpdmF0
ZS0+c2V0U3RyaW5nKEJsYWNrQmVycnlVc2VyQWdlbnRTdHJpbmcsIHVzZXJBZ2VudFN0cmluZyk7
CiB9CiAKLVdlYlN0cmluZyBXZWJTZXR0aW5nczo6ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSBj
b25zdAorQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBXZWJTZXR0aW5nczo6ZGVmYXVsdFRl
eHRFbmNvZGluZ05hbWUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmlu
ZyhXZWJLaXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSk7CiB9CiAKLXZvaWQgV2ViU2V0dGluZ3M6
OnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIGRlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lKQordm9pZCBXZWJTZXR0aW5nczo6c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZGVmYXVsdFRleHRFbmNvZGluZ05hbWUp
CiB7CiAgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05h
bWUsIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsKIH0KQEAgLTQ1OCwyMCArNDU4LDE5IEBAIHZv
aWQgV2ViU2V0dGluZ3M6OnNldEdldEZvY3VzTm9kZUNvbnRleHQKICAgICBtX3ByaXZhdGUtPnNl
dEJvb2xlYW4oQmxhY2tCZXJyeUdldEZvY3VzTm9kZUNvbnRleHRFbmFibGVkLCBlbmFibGVkKTsK
IH0KIAotV2ViU3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVldFN0cmluZygpIGNvbnN0
CitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVl
dFN0cmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktp
dFVzZXJTdHlsZVNoZWV0KTsKIH0KIAotdm9pZCBXZWJTZXR0aW5nczo6c2V0VXNlclN0eWxlU2hl
ZXRTdHJpbmcoY29uc3QgY2hhciogdXNlclN0eWxlU2hlZXRTdHJpbmcpCit2b2lkIFdlYlNldHRp
bmdzOjpzZXRVc2VyU3R5bGVTaGVldFN0cmluZyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiB1c2VyU3R5bGVTaGVldFN0cmluZykKIHsKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
bid0IHNlZW0gbGlrZSB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgdG8gZG8gdGhpcyBhcyBXZWJTZXR0
aW5ncyBzaG91bGQgaWRlYWxseSBiZSBhIHN0YXRlIHN0b3JlLgogICAgIC8vIEVpdGhlciB0aGUg
Y2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvIHRoaXMgY29udmVyc2lvbiBvciBjYWxs
ZXIgb2YgdGhlIGdldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZnVuY3Rpb24KICAgICAvLyBz
aG91bGQgZG8gdGhpcyBjb252ZXJzaW9uLgogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbih1
c2VyU3R5bGVTaGVldFN0cmluZyk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAgZGF0YS5h
cHBlbmQodXNlclN0eWxlU2hlZXRTdHJpbmcsIGxlbmd0aCk7CisgICAgZGF0YS5hcHBlbmQodXNl
clN0eWxlU2hlZXRTdHJpbmcuY19zdHIoKSwgdXNlclN0eWxlU2hlZXRTdHJpbmcubGVuZ3RoKCkp
OwogCiAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwogICAgIGJhc2U2NEVuY29kZShkYXRh
LCBlbmNvZGVkRGF0YSk7CkBAIC00ODUsMTIgKzQ4NCwxMiBAQCB2b2lkIFdlYlNldHRpbmdzOjpz
ZXRVc2VyU3R5bGVTaGVldFN0cmluCiAgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0VXNl
clN0eWxlU2hlZXQsIFN0cmluZyhkYXRhVVJMLmRhdGEoKSwgZGF0YVVSTC5zaXplKCkpKTsKIH0K
IAotV2ViU3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkKK0JsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViU2V0dGluZ3M6OnVzZXJTdHlsZVNoZWV0TG9jYXRp
b24oKQogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKTsKIH0KIAotdm9pZCBXZWJTZXR0aW5nczo6c2V0VXNlclN0eWxlU2hlZXRM
b2NhdGlvbihjb25zdCBjaGFyKiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKQordm9pZCBXZWJTZXR0
aW5nczo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKQogewogICAgIG1fcHJpdmF0ZS0+c2V0
U3RyaW5nKFdlYktpdFVzZXJTdHlsZVNoZWV0TG9jYXRpb24sIHVzZXJTdHlsZVNoZWV0TG9jYXRp
b24pOwogfQpAQCAtNjQwLDUyICs2MzksNTIgQEAgdm9pZCBXZWJTZXR0aW5nczo6c2V0TWF4aW11
bVBhZ2VzSW5DYWNoZQogICAgIG1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoV2ViS2l0TWF4aW11bVBh
Z2VzSW5DYWNoZSwgcmVhbFBhZ2VzKTsKIH0KIAotV2ViU3RyaW5nIFdlYlNldHRpbmdzOjpsb2Nh
bFN0b3JhZ2VQYXRoKCkgY29uc3QKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViU2V0
dGluZ3M6OmxvY2FsU3RvcmFnZVBhdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldFN0cmluZyhXZWJLaXRMb2NhbFN0b3JhZ2VQYXRoKTsKIH0KIAotdm9pZCBXZWJTZXR0aW5n
czo6c2V0TG9jYWxTdG9yYWdlUGF0aChjb25zdCBXZWJTdHJpbmcmIHBhdGgpCit2b2lkIFdlYlNl
dHRpbmdzOjpzZXRMb2NhbFN0b3JhZ2VQYXRoKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIHBhdGgpCiB7CiAgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0TG9jYWxTdG9y
YWdlUGF0aCwgcGF0aCk7CiB9CiAKLVdlYlN0cmluZyBXZWJTZXR0aW5nczo6aW5kZXhlZERhdGFC
YXNlUGF0aCgpIGNvbnN0CitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdz
OjppbmRleGVkRGF0YUJhc2VQYXRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5n
ZXRTdHJpbmcoV2ViS2l0SW5kZXhlZERhdGFCYXNlUGF0aCk7CiB9CiAKLXZvaWQgV2ViU2V0dGlu
Z3M6OnNldEluZGV4ZWREYXRhQmFzZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBwYXRoKQordm9pZCBX
ZWJTZXR0aW5nczo6c2V0SW5kZXhlZERhdGFCYXNlUGF0aChjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiBwYXRoKQogewogICAgIG1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdElu
ZGV4ZWREYXRhQmFzZVBhdGgsIHBhdGgpOwogfQogCi1XZWJTdHJpbmcgV2ViU2V0dGluZ3M6OmRh
dGFiYXNlUGF0aCgpIGNvbnN0CitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRp
bmdzOjpkYXRhYmFzZVBhdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0
cmluZyhXZWJLaXREYXRhYmFzZVBhdGgpOwogfQogCi12b2lkIFdlYlNldHRpbmdzOjpzZXREYXRh
YmFzZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBwYXRoKQordm9pZCBXZWJTZXR0aW5nczo6c2V0RGF0
YWJhc2VQYXRoKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHBhdGgpCiB7CiAg
ICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0RGF0YWJhc2VQYXRoLCBwYXRoKTsKIH0KIAot
V2ViU3RyaW5nIFdlYlNldHRpbmdzOjphcHBDYWNoZVBhdGgoKSBjb25zdAorQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyBXZWJTZXR0aW5nczo6YXBwQ2FjaGVQYXRoKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9u
Q2FjaGVQYXRoKTsKIH0KIAotdm9pZCBXZWJTZXR0aW5nczo6c2V0QXBwQ2FjaGVQYXRoKGNvbnN0
IFdlYlN0cmluZyYgcGF0aCkKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldEFwcENhY2hlUGF0aChjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYXRoKQogewogICAgIG1fcHJpdmF0ZS0+
c2V0U3RyaW5nKFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlUGF0aCwgcGF0aCk7CiB9
CiAKLVdlYlN0cmluZyBXZWJTZXR0aW5nczo6cGFnZUdyb3VwTmFtZSgpIGNvbnN0CitCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjpwYWdlR3JvdXBOYW1lKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0UGFnZUdyb3VwTmFtZSk7
CiB9CiAKLXZvaWQgV2ViU2V0dGluZ3M6OnNldFBhZ2VHcm91cE5hbWUoY29uc3QgV2ViU3RyaW5n
JiBwYWdlR3JvdXBOYW1lKQordm9pZCBXZWJTZXR0aW5nczo6c2V0UGFnZUdyb3VwTmFtZShjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYWdlR3JvdXBOYW1lKQogewogICAgIG1f
cHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdFBhZ2VHcm91cE5hbWUsIHBhZ2VHcm91cE5hbWUpOwog
fQpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU2V0dGluZ3MuaAkocmV2
aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5n
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dERlbGVnYXRlKFdlYlNldHRpbmdzRGVsZWdhdGUqKTsKICAgICBXZWJTZXR0aW5nc0RlbGVnYXRl
KiBkZWxlZ2F0ZSgpOwogCi0gICAgc3RhdGljIHZvaWQgYWRkU3VwcG9ydGVkT2JqZWN0UGx1Z2lu
TUlNRVR5cGUoY29uc3QgY2hhciopOwotICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkT2JqZWN0
TUlNRVR5cGUoY29uc3QgV2ViU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgYWRkU3VwcG9ydGVk
T2JqZWN0UGx1Z2luTUlNRVR5cGUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYp
OworICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkT2JqZWN0TUlNRVR5cGUoY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwogCiAgICAgYm9vbCB4c3NBdWRpdG9yRW5hYmxlZCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCk7CkBAIC04NCwyMyAr
ODQsMjMgQEAgcHVibGljOgogICAgIGludCBtaW5pbXVtRm9udFNpemUoKSBjb25zdDsKICAgICB2
b2lkIHNldE1pbmltdW1Gb250U2l6ZShpbnQpOwogCi0gICAgV2ViU3RyaW5nIHNlcmlmRm9udEZh
bWlseSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqKTsK
LSAgICBXZWJTdHJpbmcgZml4ZWRGb250RmFtaWx5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGaXhl
ZEZvbnRGYW1pbHkoY29uc3QgY2hhciopOwotICAgIFdlYlN0cmluZyBzYW5zU2VyaWZGb250RmFt
aWx5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIq
KTsKLSAgICBXZWJTdHJpbmcgc3RhbmRhcmRGb250RmFtaWx5KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgY2hhciopOworICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmcgc2VyaWZGb250RmFtaWx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZXJpZkZv
bnRGYW1pbHkoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOworICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgZml4ZWRGb250RmFtaWx5KCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYp
OworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgc2Fuc1NlcmlmRm9udEZhbWlseSgp
IGNvbnN0OworICAgIHZvaWQgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJik7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBz
dGFuZGFyZEZvbnRGYW1pbHkoKSBjb25zdDsKKyAgICB2b2lkIHNldFN0YW5kYXJkRm9udEZhbWls
eShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKICAgICB2b2lkIHNldERv
d25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZChib29sKTsKICAgICBib29sIGRvd25sb2FkYWJs
ZUJpbmFyeUZvbnRzRW5hYmxlZCgpIGNvbnN0OwogCi0gICAgV2ViU3RyaW5nIHVzZXJBZ2VudFN0
cmluZygpIGNvbnN0OwotICAgIHZvaWQgc2V0VXNlckFnZW50U3RyaW5nKGNvbnN0IFdlYlN0cmlu
ZyYpOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgdXNlckFnZW50U3RyaW5nKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRVc2VyQWdlbnRTdHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyYpOwogCi0gICAgV2ViU3RyaW5nIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1l
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBjaGFy
Kik7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBkZWZhdWx0VGV4dEVuY29kaW5n
TmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwogCiAgICAgYm9vbCBpc1pvb21Ub0ZpdE9u
TG9hZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Wm9vbVRvRml0T25Mb2FkKGJvb2wpOwpAQCAtMTI2
LDExICsxMjYsMTEgQEAgcHVibGljOgogICAgIGJvb2wgZG9lc0dldEZvY3VzTm9kZUNvbnRleHQo
KSBjb25zdDsKICAgICB2b2lkIHNldEdldEZvY3VzTm9kZUNvbnRleHQoYm9vbCk7CiAKLSAgICBX
ZWJTdHJpbmcgdXNlclN0eWxlU2hlZXRTdHJpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNldFVzZXJT
dHlsZVNoZWV0U3RyaW5nKGNvbnN0IGNoYXIqKTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nIHVzZXJTdHlsZVNoZWV0U3RyaW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VyU3R5
bGVTaGVldFN0cmluZyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKLSAg
ICBXZWJTdHJpbmcgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOwotICAgIHZvaWQgc2V0VXNlclN0
eWxlU2hlZXRMb2NhdGlvbihjb25zdCBjaGFyKik7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCk7CisgICAgdm9pZCBzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmKTsKIAogICAg
IC8vIEV4dGVybmFsIGxpbmsgaGFuZGxlcnMKICAgICBib29sIGFyZUxpbmtzSGFuZGxlZEV4dGVy
bmFsbHkoKSBjb25zdDsKQEAgLTE3NSwyMCArMTc1LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dE1heGltdW1QYWdlc0luQ2FjaGUoaW50KTsKICAgICBpbnQgbWF4aW11bVBhZ2VzSW5DYWNoZSgp
IGNvbnN0OwogCi0gICAgV2ViU3RyaW5nIGxvY2FsU3RvcmFnZVBhdGgoKSBjb25zdDsKLSAgICB2
b2lkIHNldExvY2FsU3RvcmFnZVBhdGgoY29uc3QgV2ViU3RyaW5nJik7CisgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyBsb2NhbFN0b3JhZ2VQYXRoKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRMb2NhbFN0b3JhZ2VQYXRoKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmKTsK
IAotICAgIFdlYlN0cmluZyBpbmRleGVkRGF0YUJhc2VQYXRoKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRJbmRleGVkRGF0YUJhc2VQYXRoKGNvbnN0IFdlYlN0cmluZyYpOworICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcgaW5kZXhlZERhdGFCYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQg
c2V0SW5kZXhlZERhdGFCYXNlUGF0aChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
Jik7CiAKLSAgICBXZWJTdHJpbmcgZGF0YWJhc2VQYXRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRE
YXRhYmFzZVBhdGgoY29uc3QgV2ViU3RyaW5nJik7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyBkYXRhYmFzZVBhdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldERhdGFiYXNlUGF0aChj
b25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKLSAgICBXZWJTdHJpbmcgYXBw
Q2FjaGVQYXRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBcHBDYWNoZVBhdGgoY29uc3QgV2ViU3Ry
aW5nJik7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBhcHBDYWNoZVBhdGgoKSBj
b25zdDsKKyAgICB2b2lkIHNldEFwcENhY2hlUGF0aChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJik7CiAKLSAgICBXZWJTdHJpbmcgcGFnZUdyb3VwTmFtZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0UGFnZUdyb3VwTmFtZShjb25zdCBXZWJTdHJpbmcmKTsKKyAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nIHBhZ2VHcm91cE5hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFBh
Z2VHcm91cE5hbWUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwogCiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIGFuIGVtYWlsIG1vZGUuIEluc3RlYWQsIHdlIHNo
b3VsZCBleHBvc2UgYWxsIGVtYWlsLXJlbGF0ZWQgc2V0dGluZ3MKICAgICAvLyBzbyB0aGF0IHRo
ZSBlbWFpbCBjbGllbnQgY2FuIHRvZ2dsZSB0aGVtIGRpcmVjdGx5LgpJbmRleDogU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysg
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEx
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVdlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IGNoYXIqIGxhdGluMSkKLSAgICA6IG1faW1w
bChTdHJpbmdJbXBsOjpjcmVhdGUobGF0aW4xKS5sZWFrUmVmKCkpCi17Ci19Ci0KLVdlYlN0cmlu
Zzo6V2ViU3RyaW5nKGNvbnN0IGNoYXIqIGxhdGluMSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDog
bV9pbXBsKFN0cmluZ0ltcGw6OmNyZWF0ZShsYXRpbjEsIGxlbmd0aCkubGVha1JlZigpKQotewot
fQotCi1XZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCB1bnNpZ25lZCBzaG9ydCogdXRmMTYsIHVu
c2lnbmVkIGxlbmd0aCkKLSAgICA6IG1faW1wbChTdHJpbmdJbXBsOjpjcmVhdGUodXRmMTYsIGxl
bmd0aCkubGVha1JlZigpKQotewotfQotCi1XZWJTdHJpbmc6OldlYlN0cmluZyhTdHJpbmdJbXBs
KiBpbXBsKQotICAgIDogbV9pbXBsKGltcGwpCi17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT5yZWYoKTsKLX0KLQotV2ViU3RyaW5nOjp+V2ViU3RyaW5nKCkKLXsKLSAgICBpZiAo
bV9pbXBsKQotICAgICAgICBtX2ltcGwtPmRlcmVmKCk7Ci19Ci0KLVdlYlN0cmluZzo6V2ViU3Ry
aW5nKGNvbnN0IFdlYlN0cmluZyYgc3RyKQotICAgIDogbV9pbXBsKHN0ci5tX2ltcGwpCi17Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5yZWYoKTsKLX0KLQotV2ViU3RyaW5nIFdl
YlN0cmluZzo6ZnJvbVV0ZjgoY29uc3QgY2hhciogdXRmOCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCh1dGY4KTsKLX0KLQotV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVV0ZjgoY29u
c3QgY2hhciogdXRmOCwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCh1dGY4LCBsZW5ndGgpOwotfQotCi1XZWJTdHJpbmcmIFdlYlN0cmluZzo6b3BlcmF0b3I9
KGNvbnN0IFdlYlN0cmluZyYgc3RyKQotewotICAgIGlmICgmc3RyID09IHRoaXMpCi0gICAgICAg
IHJldHVybiAqdGhpczsKLSAgICBpZiAoc3RyLm1faW1wbCkKLSAgICAgICAgc3RyLm1faW1wbC0+
cmVmKCk7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5kZXJlZigpOwotICAgIG1f
aW1wbCA9IHN0ci5tX2ltcGw7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1zdGQ6OnN0cmluZyBX
ZWJTdHJpbmc6OnV0ZjgoKSBjb25zdAotewotICAgIHN0ZDo6c3RyaW5nIHV0Zjg7Ci0gICAgaWYg
KCFtX2ltcGwpCi0gICAgICAgIHJldHVybiB1dGY4OwotCi0gICAgQ1N0cmluZyBjc3RyID0gU3Ry
aW5nKG1faW1wbCkudXRmOCgpOwotICAgIHV0ZjguYXNzaWduKGNzdHIuZGF0YSgpLCBjc3RyLmxl
bmd0aCgpKTsKLSAgICByZXR1cm4gdXRmODsKLX0KLQotY29uc3QgdW5zaWduZWQgc2hvcnQqIFdl
YlN0cmluZzo6Y2hhcmFjdGVycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1w
bC0+Y2hhcmFjdGVycygpIDogMDsKLX0KLQotdW5zaWduZWQgV2ViU3RyaW5nOjpsZW5ndGgoKSBj
b25zdAotewotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpIDogMDsKLX0KLQot
Ym9vbCBXZWJTdHJpbmc6OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9pbXBsIHx8
ICFtX2ltcGwtPmxlbmd0aCgpOwotfQotCi1ib29sIFdlYlN0cmluZzo6ZXF1YWwoY29uc3QgY2hh
ciogdXRmOCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjplcXVhbChtX2ltcGwsIHV0ZjgpOwot
fQotCi1ib29sIFdlYlN0cmluZzo6ZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogdXRmOCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjplcXVhbElnbm9yaW5nQ2FzZSh1dGY4LCBXVEY6OlN0
cmluZyhtX2ltcGwpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci19IC8vIG5hbWVzcGFj
ZSBCbGFja0JlcnJ5CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlN0cmlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5n
LmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFdlYlN0cmluZ19o
Ci0jZGVmaW5lIFdlYlN0cmluZ19oCi0KLSNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCi0j
aW5jbHVkZSA8c3RyaW5nPgotCi0vLyBOb3QgZm9yIHB1YmxpYyBBUEkgcHVycG9zZS4KLW5hbWVz
cGFjZSBXVEYgewotY2xhc3MgU3RyaW5nSW1wbDsKLX0KLQotbmFtZXNwYWNlIEJsYWNrQmVycnkg
ewotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEJMQUNLQkVSUllfRVhQT1JUIFdlYlN0cmlu
ZyB7Ci1wdWJsaWM6Ci0gICAgV2ViU3RyaW5nKCkgOiBtX2ltcGwoMCkgeyB9Ci0gICAgfldlYlN0
cmluZygpOwotICAgIFdlYlN0cmluZyhjb25zdCBjaGFyKiBsYXRpbjEpOwotICAgIFdlYlN0cmlu
Zyhjb25zdCBjaGFyKiBsYXRpbjEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgV2ViU3RyaW5nKGNv
bnN0IHVuc2lnbmVkIHNob3J0KiB1dGYxNiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXZWJTdHJp
bmcoY29uc3QgV2ViU3RyaW5nJik7Ci0gICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2Vi
U3RyaW5nJik7Ci0gICAgc3RkOjpzdHJpbmcgdXRmOCgpIGNvbnN0OwotICAgIHN0YXRpYyBXZWJT
dHJpbmcgZnJvbVV0ZjgoY29uc3QgY2hhciogdXRmOCk7Ci0gICAgc3RhdGljIFdlYlN0cmluZyBm
cm9tVXRmOChjb25zdCBjaGFyKiB1dGY4LCBzaXplX3QgbGVuZ3RoKTsKLSAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCogY2hhcmFjdGVycygpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0OwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgIGJvb2wgZXF1YWwoY29uc3QgY2hh
ciogdXRmOCkgY29uc3Q7Ci0gICAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiB1
dGY4KSBjb25zdDsKLQotICAgIC8vIE5vdCBmb3IgcHVibGljIEFQSSBwdXJwb3NlLgotICAgIFdl
YlN0cmluZyhXVEY6OlN0cmluZ0ltcGwqKTsKLSAgICBXVEY6OlN0cmluZ0ltcGwqIGltcGwoKSBj
b25zdCB7IHJldHVybiBtX2ltcGw7IH0KLQotcHJpdmF0ZToKLSAgICBXVEY6OlN0cmluZ0ltcGwq
IG1faW1wbDsKLX07Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLX0gLy8gbmFtZXNwYWNlIEJsYWNr
QmVycnkKLQotI2VuZGlmIC8vIFdlYlN0cmluZ19oCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDExICs2MSwxMSBAQAogI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgogI2luY2x1
ZGUgIldlYlBvcHVwVHlwZS5oIgogI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCi0jaW5jbHVkZSAi
V2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAogI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybUxvZy5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNldHRp
bmdzLmg+CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8
QmxhY2tCZXJyeVBsYXRmb3JtV2luZG93Lmg+CiAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CkBAIC0xMzgsNyArMTM4LDcgQEAgYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpydW5K
YXZhU2NyaQogCiAgICAgVGltZXJCYXNlOjpmaXJlVGltZXJzSW5OZXN0ZWRFdmVudExvb3AoKTsK
ICAgICBDU3RyaW5nIGxhdGluT3JpZ2luID0gdG9PcmlnaW5TdHJpbmcoZnJhbWUpOwotICAgIFdl
YlN0cmluZyBjbGllbnRSZXN1bHQ7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBj
bGllbnRSZXN1bHQ7CiAgICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5ydW5KYXZh
U2NyaXB0UHJvbXB0KG1lc3NhZ2UuY2hhcmFjdGVycygpLCBtZXNzYWdlLmxlbmd0aCgpLCBkZWZh
dWx0VmFsdWUuY2hhcmFjdGVycygpLCBkZWZhdWx0VmFsdWUubGVuZ3RoKCksIGxhdGluT3JpZ2lu
LmRhdGEoKSwgbGF0aW5PcmlnaW4ubGVuZ3RoKCksIGNsaWVudFJlc3VsdCkpIHsKICAgICAgICAg
cmVzdWx0ID0gY2xpZW50UmVzdWx0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OCw3ICsy
NDgsNyBAQCBQYWdlKiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVXaW5kCiAgICAgaWYg
KGZlYXR1cmVzLmRpYWxvZykKICAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dp
bmRvd0lzRGlhbG9nOwogCi0gICAgV2ViUGFnZSogd2ViUGFnZSA9IG1fd2ViUGFnZVByaXZhdGUt
Pm1fY2xpZW50LT5jcmVhdGVXaW5kb3coeCwgeSwgd2lkdGgsIGhlaWdodCwgZmxhZ3MsIFdlYlN0
cmluZyhyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLnN0cmluZygpKSwgV2ViU3RyaW5n
KHJlcXVlc3QuZnJhbWVOYW1lKCkpKTsKKyAgICBXZWJQYWdlKiB3ZWJQYWdlID0gbV93ZWJQYWdl
UHJpdmF0ZS0+bV9jbGllbnQtPmNyZWF0ZVdpbmRvdyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmbGFn
cywgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSwgcmVxdWVzdC5mcmFt
ZU5hbWUoKSk7CiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNTA3
LDI2ICs1MDcsMjYgQEAgdm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpleGNlZWRlZERhdAog
CiB2b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NS
ZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIpCiB7Ci0gICAgU2hhcmVkQXJyYXk8V2ViU3RyaW5n
PiBpbml0aWFsRmlsZXM7CisgICAgU2hhcmVkQXJyYXk8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZz4gaW5pdGlhbEZpbGVzOwogICAgIHVuc2lnbmVkIG51bWJlck9mSW5pdGlhbEZpbGVzID0g
Y2hvb3Nlci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVzLnNpemUoKTsKICAgICBpZiAobnVtYmVy
T2ZJbml0aWFsRmlsZXMgPiAwKQotICAgICAgICBpbml0aWFsRmlsZXMucmVzZXQobmV3IFdlYlN0
cmluZ1tudW1iZXJPZkluaXRpYWxGaWxlc10sIG51bWJlck9mSW5pdGlhbEZpbGVzKTsKKyAgICAg
ICAgaW5pdGlhbEZpbGVzLnJlc2V0KG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nW251
bWJlck9mSW5pdGlhbEZpbGVzXSwgbnVtYmVyT2ZJbml0aWFsRmlsZXMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkluaXRpYWxGaWxlczsgKytpKQogICAgICAgICBpbml0
aWFsRmlsZXNbaV0gPSBjaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXNbaV07CiAKLSAg
ICBTaGFyZWRBcnJheTxXZWJTdHJpbmc+IGFjY2VwdE1JTUVUeXBlczsKKyAgICBTaGFyZWRBcnJh
eTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiBhY2NlcHRNSU1FVHlwZXM7CiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZUeXBlcyA9IGNob29zZXItPnNldHRpbmdzKCkuYWNjZXB0TUlNRVR5cGVz
LnNpemUoKTsKICAgICBpZiAobnVtYmVyT2ZUeXBlcyA+IDApCi0gICAgICAgIGFjY2VwdE1JTUVU
eXBlcy5yZXNldChuZXcgV2ViU3RyaW5nW251bWJlck9mVHlwZXNdLCBudW1iZXJPZlR5cGVzKTsK
KyAgICAgICAgYWNjZXB0TUlNRVR5cGVzLnJlc2V0KG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nW251bWJlck9mVHlwZXNdLCBudW1iZXJPZlR5cGVzKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZUeXBlczsgKytpKQogICAgICAgICBhY2NlcHRNSU1FVHlwZXNb
aV0gPSBjaG9vc2VyLT5zZXR0aW5ncygpLmFjY2VwdE1JTUVUeXBlc1tpXTsKIAotICAgIFdlYlN0
cmluZyBjYXB0dXJlOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgY2FwdHVyZTsK
ICNpZiBFTkFCTEUoTUVESUFfQ0FQVFVSRSkKICAgICBjYXB0dXJlID0gY2hvb3Nlci0+c2V0dGlu
Z3MoKS5jYXB0dXJlOwogI2VuZGlmCiAKLSAgICBTaGFyZWRBcnJheTxXZWJTdHJpbmc+IGNob3Nl
bkZpbGVzOworICAgIFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+IGNo
b3NlbkZpbGVzOwogCiAgICAgewogICAgICAgICBQYWdlR3JvdXBMb2FkRGVmZXJyZXIgZGVmZXJy
ZXIobV93ZWJQYWdlUHJpdmF0ZS0+bV9wYWdlLCB0cnVlKTsKQEAgLTc3MywxNiArNzczLDYgQEAg
dm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpmdWxsU2NyZWVuUgogfQogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoV0VCR0wpCi12b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJlcXVlc3RXZWJH
TFBlcm1pc3Npb24oRnJhbWUqIGZyYW1lKQotewotICAgIGlmIChmcmFtZSkgewotICAgICAgICBD
U3RyaW5nIGxhdGluT3JpZ2luID0gdG9PcmlnaW5TdHJpbmcoZnJhbWUpOwotICAgICAgICBtX3dl
YlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+cmVxdWVzdFdlYkdMUGVybWlzc2lvbihsYXRpbk9yaWdp
bi5kYXRhKCkpOwotICAgIH0KLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKFNWRykKIHZvaWQgQ2hy
b21lQ2xpZW50QmxhY2tCZXJyeTo6ZGlkU2V0U1ZHWm9vbUFuZFBhbihGcmFtZSogZnJhbWUsIHVu
c2lnbmVkIHNob3J0IHpvb21BbmRQYW4pCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFj
a0JlcnJ5LmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMSw5ICsxMzEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGZ1bGxTY3JlZW5SZW5kZXJl
ckNoYW5nZWQoUmVuZGVyQm94Kik7CiAjZW5kaWYKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RXZWJHTFBlcm1pc3Npb24oRnJhbWUqKTsKLSNlbmRpZgogCiAjaWYg
RU5BQkxFKFNWRykKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0U1ZHWm9vbUFuZFBhbihGcmFtZSos
IHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJ
KHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9DbGllbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1MCwxMCBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBjbGllbnRFeHRlbnNpb25NZXRob2QoCiAgICAgfQogCiAgICAg
V2ViUGFnZUNsaWVudCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlQ2xpZW50Kj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBzdHJpbmcgcmV0VmFsOworICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgcmV0VmFsOwogICAgIGlmIChjbGllbnQpCi0g
ICAgICAgIHJldFZhbCA9IGNsaWVudC0+aW52b2tlQ2xpZW50SmF2YVNjcmlwdENhbGxiYWNrKHN0
ckFyZ3MsIGFyZ3VtZW50Q291bnQpLnV0ZjgoKTsKKyAgICAgICAgcmV0VmFsID0gY2xpZW50LT5p
bnZva2VDbGllbnRKYXZhU2NyaXB0Q2FsbGJhY2soc3RyQXJncywgYXJndW1lbnRDb3VudCk7Cisg
ICAgLy8gRklYTUU6IGFkZCBhIG1lY2hhbmlzbSB0byBwYXNzIHRoZSBsZW5ndGggb2YgdGhlIHN0
cmluZyBoZXJlCiAgICAgaWYgKCFyZXRWYWwuZW1wdHkoKSkKICAgICAgICAganNSZXRWYWwgPSBK
U1ZhbHVlTWFrZVN0cmluZyhjdHgsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJldFZh
bC5jX3N0cigpKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9Db2xvclBpY2tlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NvbG9yUGlja2VyQ2xpZW50LmNwcAkocmV2aXNpb24g
MTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NvbG9y
UGlja2VyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMjAgKzI5LDIwIEBACiAjaW5j
bHVkZSAiUG9wdXBQaWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJXZWJQYWdlX3AuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAorI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db2xvclBpY2tlckNsaWVudDo6Q29sb3JQaWNr
ZXJDbGllbnQoY29uc3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHZhbHVlLCBCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlLCBIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50KQorQ29sb3JQaWNrZXJDbGllbnQ6OkNvbG9yUGlja2VyQ2xpZW50KGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZhbHVlLCBCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2VQcml2YXRlKiB3ZWJQYWdlLCBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIDog
bV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKIHsKICAgICBnZW5l
cmF0ZUhUTUwodmFsdWUpOwogfQogCi12b2lkIENvbG9yUGlja2VyQ2xpZW50OjpnZW5lcmF0ZUhU
TUwoY29uc3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHZhbHVlKQordm9pZCBDb2xv
clBpY2tlckNsaWVudDo6Z2VuZXJhdGVIVE1MKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIHZhbHVlKQogewogICAgIFN0cmluZ0J1aWxkZXIgc291cmNlOwogICAgIHNvdXJjZS5h
cHBlbmRMaXRlcmFsKCI8c3R5bGU+XG4iKTsKQEAgLTU2LDggKzU2LDggQEAgdm9pZCBDb2xvclBp
Y2tlckNsaWVudDo6Z2VuZXJhdGVIVE1MKGNvbgogICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCI8
c2NyaXB0PlxuIik7CiAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIndpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkgeyIpOwogICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFs
KCJ3aW5kb3cucG9wdXBjb250cm9sLnNob3coIik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHNvdXJjZS5hcHBlbmQoIlwiIiArIFN0cmluZyh2YWx1ZS5pbXBsKCkpICsgIlwi
KTsgXG4gfSk7IFxuIik7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKQorICAgICAgICBzb3VyY2Uu
YXBwZW5kKCJcIiIgKyBTdHJpbmcodmFsdWUpICsgIlwiKTsgXG4gfSk7IFxuIik7CiAgICAgZWxz
ZQogICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiKTsgXG4gfSk7IFxuIik7CiAgICAgc291
cmNlLmFwcGVuZChjb2xvckNvbnRyb2xCbGFja0JlcnJ5SnMsIHNpemVvZihjb2xvckNvbnRyb2xC
bGFja0JlcnJ5SnMpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9Db2xvclBpY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Db2xvclBpY2tlckNsaWVudC5oCShyZXZpc2lvbiAxMzEy
NDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ29sb3JQaWNr
ZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsMTIgQEAKICNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1JbnB1dEV2ZW50cy5oPgogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7
CituYW1lc3BhY2UgUGxhdGZvcm0geworY2xhc3MgU3RyaW5nOworfQorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIFdlYlBhZ2VQcml2YXRlOwotY2xhc3MgV2ViU3RyaW5nOwogfQogfQogCkBA
IC0zNSw5ICszOCw5IEBAIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAKIGNsYXNzIENvbG9yUGlj
a2VyQ2xpZW50IDogcHVibGljIFBhZ2VQb3B1cENsaWVudCB7CiBwdWJsaWM6Ci0gICAgQ29sb3JQ
aWNrZXJDbGllbnQoY29uc3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHZhbHVlLCBC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRNTElucHV0RWxlbWVudCopOwor
ICAgIENvbG9yUGlja2VyQ2xpZW50KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
IHZhbHVlLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRNTElucHV0RWxl
bWVudCopOwogCi0gICAgdm9pZCBnZW5lcmF0ZUhUTUwoY29uc3QgQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIGdlbmVyYXRlSFRNTChjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCB3cml0ZURvY3VtZW50KERv
Y3VtZW50V3JpdGVyJik7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpOwogICAgIFN0cmluZyBo
dG1sU291cmNlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvQ3JlZGVudGlhbE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DcmVkZW50aWFsTWFuYWdlci5jcHAJKHJldmlz
aW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9D
cmVkZW50aWFsTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDggQEAKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2VDbGll
bnRCbGFja0JlcnJ5LmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKLXVzaW5nIEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViU3RyaW5nOworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDcgKzQwLDcgQEAgQ3JlZGVudGlh
bE1hbmFnZXImIGNyZWRlbnRpYWxNYW5hZ2VyKCkKICAgICByZXR1cm4gKmNyZWRlbnRpYWxNYW5h
Z2VyOwogfQogCi12b2lkIENyZWRlbnRpYWxNYW5hZ2VyOjphdXRvZmlsbEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBXZWJTdHJp
bmcmIHVzZXJuYW1lLCBXZWJTdHJpbmcmIHBhc3N3b3JkKQordm9pZCBDcmVkZW50aWFsTWFuYWdl
cjo6YXV0b2ZpbGxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBQcm90ZWN0aW9uU3BhY2Um
IHByb3RlY3Rpb25TcGFjZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXNlcm5hbWUs
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIGlmIChjcmVk
ZW50aWFsQmFja2luZ1N0b3JlKCkuaGFzTmV2ZXJSZW1lbWJlcihwcm90ZWN0aW9uU3BhY2UpKQog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvQ3JlZGVudGlhbE1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ3JlZGVudGlhbE1hbmFnZXIuaAkocmV2aXNpb24gMTMx
MjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NyZWRlbnRp
YWxNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKIGNsYXNzIFBhZ2VD
bGllbnRCbGFja0JlcnJ5OwogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFdlYlN0cmluZzsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBTdHJp
bmc7CiB9CiB9CiAKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgQ3JlZGVudGlhbFRyYW5zZm9ybURh
dGE7CiAKIGNsYXNzIENyZWRlbnRpYWxNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICB2b2lkIGF1dG9m
aWxsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHVzZXJuYW1lLCBCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlN0cmluZyYgcGFzc3dvcmQpOworICAgIHZvaWQgYXV0b2ZpbGxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiB1c2VybmFtZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGFzc3dvcmQpOwogICAg
IHZvaWQgYXV0b2ZpbGxQYXNzd29yZEZvcm1zKFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGRv
Y0Zvcm1zKTsKICAgICB2b2lkIHNhdmVDcmVkZW50aWFsSWZDb25maXJtZWQoUGFnZUNsaWVudEJs
YWNrQmVycnkqLCBjb25zdCBDcmVkZW50aWFsVHJhbnNmb3JtRGF0YSYpOwogICAgIHZvaWQgY2xl
YXJDcmVkZW50aWFscygpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0RhdGVQaWNrZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmNwcAkocmV2aXNpb24g
MTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0RhdGVQ
aWNrZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAKICNpbmNs
dWRlICJQb3B1cFBpY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUg
IldlYlBhZ2VfcC5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogCisjaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGVQaWNrZXJDbGllbnQ6OkRhdGVQaWNrZXJD
bGllbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkJsYWNrQmVycnlJbnB1dFR5cGUgdHlwZSwgY29u
c3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHZhbHVlLCBjb25zdCBCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlN0cmluZyYgbWluLCBjb25zdCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0
cmluZyYgbWF4LCBkb3VibGUgc3RlcCwgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0
ZSogd2ViUGFnZSwgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK0RhdGVQaWNrZXJDbGllbnQ6
OkRhdGVQaWNrZXJDbGllbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkJsYWNrQmVycnlJbnB1dFR5
cGUgdHlwZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUsIGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyYgbWF4LCBkb3VibGUgc3RlcCwgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQ
YWdlUHJpdmF0ZSogd2ViUGFnZSwgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICA6IG1f
dHlwZSh0eXBlKQogICAgICwgbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBtX2VsZW1lbnQoZWxl
bWVudCkKQEAgLTQ3LDcgKzQ3LDcgQEAgRGF0ZVBpY2tlckNsaWVudDo6fkRhdGVQaWNrZXJDbGll
bnQoKQogewogfQogCi12b2lkIERhdGVQaWNrZXJDbGllbnQ6OmdlbmVyYXRlSFRNTChCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6QmxhY2tCZXJyeUlucHV0VHlwZSB0eXBlLCBjb25zdCBCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
U3RyaW5nJiBtaW4sIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nJiBtYXgsIGRv
dWJsZSBzdGVwKQordm9pZCBEYXRlUGlja2VyQ2xpZW50OjpnZW5lcmF0ZUhUTUwoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkJsYWNrQmVycnlJbnB1dFR5cGUgdHlwZSwgY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIG1pbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWF4LCBkb3VibGUg
c3RlcCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHNvdXJjZTsKICAgICBzb3VyY2UuYXBwZW5kTGl0
ZXJhbCgiPHN0eWxlPlxuIik7CkBAIC04MCwxNyArODAsMTcgQEAgdm9pZCBEYXRlUGlja2VyQ2xp
ZW50OjpnZW5lcmF0ZUhUTUwoQmxhYwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgc291cmNlLmFwcGVuZCgiXCIi
ICsgU3RyaW5nKHZhbHVlLmltcGwoKSkgKyAiXCIsICIpOworICAgIGlmICghdmFsdWUuZW1wdHko
KSkKKyAgICAgICAgc291cmNlLmFwcGVuZCgiXCIiICsgU3RyaW5nKHZhbHVlKSArICJcIiwgIik7
CiAgICAgZWxzZQogICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiMCwgIik7CiAKLSAgICBp
ZiAoIW1pbi5pc0VtcHR5KCkpCi0gICAgICAgIHNvdXJjZS5hcHBlbmQoU3RyaW5nKG1pbi5pbXBs
KCkpICsgIiwgIik7CisgICAgaWYgKCFtaW4uZW1wdHkoKSkKKyAgICAgICAgc291cmNlLmFwcGVu
ZChTdHJpbmcobWluKSArICIsICIpOwogICAgIGVsc2UKICAgICAgICAgc291cmNlLmFwcGVuZExp
dGVyYWwoIjAsICIpOwotICAgIGlmICghbWF4LmlzRW1wdHkoKSkKLSAgICAgICAgc291cmNlLmFw
cGVuZChTdHJpbmcobWF4LmltcGwoKSkgKyAiLCAiKTsKKyAgICBpZiAoIW1heC5lbXB0eSgpKQor
ICAgICAgICBzb3VyY2UuYXBwZW5kKFN0cmluZyhtYXgpICsgIiwgIik7CiAgICAgZWxzZQogICAg
ICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiMCwgIik7CiAgICAgc291cmNlLmFwcGVuZChTdHJp
bmc6Om51bWJlcihzdGVwKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvRGF0ZVBpY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmgJKHJldmlzaW9uIDEz
MTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9EYXRlUGlj
a2VyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDEyIEBACiAjaW5jbHVkZSA8
QmxhY2tCZXJyeVBsYXRmb3JtSW5wdXRFdmVudHMuaD4KIAogbmFtZXNwYWNlIEJsYWNrQmVycnkg
eworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIFN0cmluZzsKK30KKwogbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKLWNsYXNzIFdlYlN0cmluZzsKIH0KIH0KIApA
QCAtMzUsMTAgKzM4LDEwIEBAIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAKIGNsYXNzIERhdGVQ
aWNrZXJDbGllbnQgOiBwdWJsaWMgUGFnZVBvcHVwQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBEYXRl
UGlja2VyQ2xpZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpCbGFja0JlcnJ5SW5wdXRUeXBlLCBj
b25zdCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViU3RyaW5nJiBtaW4sIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
U3RyaW5nJiBtYXgsIGRvdWJsZSBzdGVwLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlKiwgSFRNTElucHV0RWxlbWVudCopOworICAgIERhdGVQaWNrZXJDbGllbnQoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkJsYWNrQmVycnlJbnB1dFR5cGUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmcmIHZhbHVlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBt
aW4sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1heCwgZG91YmxlIHN0ZXAs
IEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqLCBIVE1MSW5wdXRFbGVtZW50Kik7
CiAgICAgfkRhdGVQaWNrZXJDbGllbnQoKTsKIAotICAgIHZvaWQgZ2VuZXJhdGVIVE1MKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpCbGFja0JlcnJ5SW5wdXRUeXBlLCBjb25zdCBCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3Ry
aW5nJiBtaW4sIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nJiBtYXgsIGRvdWJs
ZSBzdGVwKTsKKyAgICB2b2lkIGdlbmVyYXRlSFRNTChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Qmxh
Y2tCZXJyeUlucHV0VHlwZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFs
dWUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbiwgY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWF4LCBkb3VibGUgc3RlcCk7CiAKICAgICB2b2lkIHdy
aXRlRG9jdW1lbnQoRG9jdW1lbnRXcml0ZXImKTsKICAgICB2aXJ0dWFsIEludFNpemUgY29udGVu
dFNpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnku
Y3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNw
YXQKICAgICBlbHNlIGlmIChjYW5TaG93TUlNRVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkpCiAg
ICAgICAgIHBvbGljeSA9IFBvbGljeVVzZTsKICAgICBlbHNlIGlmICgoUmVzb3VyY2VSZXF1ZXN0
OjpUYXJnZXRJc01haW5GcmFtZSA9PSByZXF1ZXN0LnRhcmdldFR5cGUoKSkKLSAgICAgICAgICAg
ICAmJiBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+ZG93bmxvYWRBbGxvd2VkKHJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICAgJiYgbV93ZWJQYWdl
UHJpdmF0ZS0+bV9jbGllbnQtPmRvd25sb2FkQWxsb3dlZChyZXF1ZXN0LnVybCgpLnN0cmluZygp
KSkKICAgICAgICAgcG9saWN5ID0gUG9saWN5RG93bmxvYWQ7CiAKICAgICAobV9mcmFtZS0+bG9h
ZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1bmN0aW9uKShwb2xpY3kpOwpAQCAtNDA1LDcgKzQw
NSw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IEZyYW1lTG9hZGVyQ2wKICAgICAgICAg
ICAgIFN0cmluZyBhYm91dFdoYXQgPSByZXF1ZXN0LnVybCgpLnN0cmluZygpLnN1YnN0cmluZyg2
KTsKICAgICAgICAgICAgIHNvdXJjZSA9IGFib3V0RGF0YShhYm91dFdoYXQpOwogICAgICAgICB9
IGVsc2UgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygicnRzcCIpKQotICAgICAgICAgICAg
c291cmNlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06Om1lZGlhRG9jdW1lbnQocmVxdWVzdC51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKS5jX3N0cigpOworICAgICAgICAgICAgc291cmNlID0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06Om1lZGlhRG9jdW1lbnQocmVxdWVzdC51cmwoKS5zdHJpbmco
KSk7CiAKICAgICAgICAgaWYgKCFzb3VyY2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBB
bHdheXMgaWdub3JlIGV4aXN0aW5nIHN1YnN0aXR1dGUgZGF0YSBpZiBhbnkuCkBAIC01OTYsMTAg
KzU5NiwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0CiAgICAg
Ly8gUHJvY2VzcyBkb2N1bWVudCBtZXRhZGF0YS4KICAgICBSZWZQdHI8Tm9kZUxpc3Q+IG5vZGVM
aXN0ID0gaGVhZEVsZW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKEhUTUxOYW1lczo6bWV0YVRh
Zy5sb2NhbE5hbWUoKSk7CiAgICAgdW5zaWduZWQgaW50IHNpemUgPSBub2RlTGlzdC0+bGVuZ3Ro
KCk7Ci0gICAgU2NvcGVBcnJheTxXZWJTdHJpbmc+IGhlYWRlcnM7CisgICAgU2NvcGVBcnJheTxC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiBoZWFkZXJzOwogCiAgICAgLy8gVGhpcyBtYXkg
YWxsb2NhdGUgbW9yZSBzcGFjZSB0aGFuIG5lZWRlZCBzaW5jZSBub3QgYWxsIG1ldGEgZWxlbWVu
dHMgd2lsbCBiZSBodHRwLWVxdWl2LgotICAgIGhlYWRlcnMucmVzZXQobmV3IFdlYlN0cmluZ1sy
ICogc2l6ZV0pOworICAgIGhlYWRlcnMucmVzZXQobmV3IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmdbMiAqIHNpemVdKTsKICAgICB1bnNpZ25lZCBoZWFkZXJzTGVuZ3RoID0gMDsKIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTYzNCwxMSArNjM0LDEx
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXQKICAgICAgICAgICAg
ICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+c2V0TGFyZ2VJY29uKGhyZWYubGF0aW4x
KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKFdURjo6ZXF1YWxJZ25vcmluZ0Nhc2Uo
bGlua0VsZW1lbnQtPnJlbCgpLCAic2VhcmNoIikpIHsKICAgICAgICAgICAgICAgICBpZiAoV1RG
OjplcXVhbElnbm9yaW5nQ2FzZShsaW5rRWxlbWVudC0+dHlwZSgpLCAiYXBwbGljYXRpb24vb3Bl
bnNlYXJjaGRlc2NyaXB0aW9uK3htbCIpKQotICAgICAgICAgICAgICAgICAgICBtX3dlYlBhZ2VQ
cml2YXRlLT5tX2NsaWVudC0+c2V0U2VhcmNoUHJvdmlkZXJEZXRhaWxzKHRpdGxlLnV0ZjgoKS5k
YXRhKCksIGhyZWYudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fd2ViUGFn
ZVByaXZhdGUtPm1fY2xpZW50LT5zZXRTZWFyY2hQcm92aWRlckRldGFpbHModGl0bGUsIGhyZWYp
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChXVEY6OmVxdWFsSWdub3JpbmdDYXNlKGxpbmtFbGVt
ZW50LT5yZWwoKSwgImFsdGVybmF0ZSIpCiAgICAgICAgICAgICAgICAgJiYgKFdURjo6ZXF1YWxJ
Z25vcmluZ0Nhc2UobGlua0VsZW1lbnQtPnR5cGUoKSwgImFwcGxpY2F0aW9uL3Jzcyt4bWwiKQog
ICAgICAgICAgICAgICAgIHx8IFdURjo6ZXF1YWxJZ25vcmluZ0Nhc2UobGlua0VsZW1lbnQtPnR5
cGUoKSwgImFwcGxpY2F0aW9uL2F0b20reG1sIikpKQotICAgICAgICAgICAgICAgIG1fd2ViUGFn
ZVByaXZhdGUtPm1fY2xpZW50LT5zZXRBbHRlcm5hdGVGZWVkRGV0YWlscyh0aXRsZS51dGY4KCku
ZGF0YSgpLCBocmVmLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIG1fd2ViUGFnZVBy
aXZhdGUtPm1fY2xpZW50LT5zZXRBbHRlcm5hdGVGZWVkRGV0YWlscyh0aXRsZSwgaHJlZik7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTcwOCw5ICs3MDgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50QmxhY2tCZXJyeTo6ZGlzcGF0CiAgICAgaWYgKCFpc01haW5GcmFtZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdHJpbmcgZXJyb3JQYWdlID0gbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGll
bnQtPmdldEVycm9yUGFnZShlcnJvci5lcnJvckNvZGUoKQotICAgICAgICAgICAgLCBlcnJvci5s
b2NhbGl6ZWREZXNjcmlwdGlvbigpLmlzRW1wdHkoKSA/ICIiIDogZXJyb3IubG9jYWxpemVkRGVz
Y3JpcHRpb24oKS51dGY4KCkuZGF0YSgpCi0gICAgICAgICAgICAsIGVycm9yLmZhaWxpbmdVUkwo
KS5pc0VtcHR5KCkgPyAiIiA6IGVycm9yLmZhaWxpbmdVUkwoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBTdHJpbmcgZXJyb3JQYWdlID0gbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmdldEVycm9y
UGFnZShlcnJvci5lcnJvckNvZGUoKSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgZXJy
b3IuZmFpbGluZ1VSTCgpKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBzdGlsbCBpbiB0aGUg
cHJvdmlzaW9uYWxMb2FkIHN0YXRlIC0gZ2V0RXJyb3JQYWdlIHJ1bnMgYQogICAgIC8vIG5lc3Rl
ZCBldmVudCBsb29wIHdoaWxlIGl0J3Mgd2FpdGluZyBmb3IgY2xpZW50IHJlc291cmNlcyB0byBs
b2FkIHNvCkBAIC05NDcsNyArOTQ1LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVy
cnk6Om5vdGlmeQogCiBGcmFtZSogRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRj
aENyZWF0ZVBhZ2UoY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlvbikKIHsKLSAgICBX
ZWJQYWdlKiB3ZWJQYWdlID0gbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmNyZWF0ZVdpbmRv
dygwLCAwLCAtMSwgLTEsIFdlYlBhZ2VDbGllbnQ6OkZsYWdXaW5kb3dEZWZhdWx0LCBuYXZpZ2F0
aW9uLnVybCgpLnN0cmluZygpLCBXZWJTdHJpbmcoKSk7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9
IG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5jcmVhdGVXaW5kb3coMCwgMCwgLTEsIC0xLCBX
ZWJQYWdlQ2xpZW50OjpGbGFnV2luZG93RGVmYXVsdCwgbmF2aWdhdGlvbi51cmwoKS5zdHJpbmco
KSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSk7CiAgICAgaWYg
KCF3ZWJQYWdlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtOTg1LDggKzk4Myw4IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXQKICAgICBtX3dlYlBhZ2VQcml2YXRl
LT5tX2NsaWVudC0+cG9wdWxhdGVDdXN0b21IZWFkZXJzKHBsYXRmb3JtUmVxdWVzdCk7CiAgICAg
Y29uc3QgTmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlckxpc3RzID0gcGxhdGZvcm1S
ZXF1ZXN0LmdldEhlYWRlckxpc3RSZWYoKTsKICAgICBmb3IgKE5ldHdvcmtSZXF1ZXN0OjpIZWFk
ZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlckxpc3RzLmJlZ2luKCk7IGl0ICE9IGhl
YWRlckxpc3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhlYWRlclN0cmlu
ZyA9IGl0LT5maXJzdDsKLSAgICAgICAgc3RkOjpzdHJpbmcgaGVhZGVyVmFsdWVTdHJpbmcgPSBp
dC0+c2Vjb25kOworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIGhlYWRlclN0
cmluZyA9IGl0LT5maXJzdDsKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBo
ZWFkZXJWYWx1ZVN0cmluZyA9IGl0LT5zZWNvbmQ7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhl
YWRlckZpZWxkKFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soaGVhZGVyU3RyaW5n
LmRhdGEoKSwgaGVhZGVyU3RyaW5nLmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRp
bjFGYWxsYmFjayhoZWFkZXJWYWx1ZVN0cmluZy5kYXRhKCksIGhlYWRlclZhbHVlU3RyaW5nLmxl
bmd0aCgpKSk7CiAgICAgfQogICAgIGlmICghaXNNYWluUmVzb3VyY2VMb2FkKSB7CkBAIC0xMDMy
LDcgKzEwMzAsNyBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6c2hvdWxkCiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Ojpsb2FkSWNvbkV4dGVybmFsbHkoY29u
c3QgU3RyaW5nJiBvcmlnaW5hbFBhZ2VVcmwsIGNvbnN0IFN0cmluZyYgZmluYWxQYWdlVXJsLCBj
b25zdCBTdHJpbmcmIGljb25VcmwpCiB7Ci0gICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQt
PnNldEljb25Gb3JVcmwob3JpZ2luYWxQYWdlVXJsLnV0ZjgoKS5kYXRhKCksIGZpbmFsUGFnZVVy
bC51dGY4KCkuZGF0YSgpLCBpY29uVXJsLnV0ZjgoKS5kYXRhKCkpOworICAgIG1fd2ViUGFnZVBy
aXZhdGUtPm1fY2xpZW50LT5zZXRJY29uRm9yVXJsKG9yaWdpbmFsUGFnZVVybCwgZmluYWxQYWdl
VXJsLCBpY29uVXJsKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OnNh
dmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCkBAIC0xMTkwLDcgKzExODgsNyBA
QCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IEZyYW1lCiAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnRCbGFja0JlcnJ5OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogewotICAgIG1fd2ViUGFn
ZVByaXZhdGUtPmxvYWQocmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAwLCAi
R0VUIiwgTmV0d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDAsIDAsIDAsIDAs
IGZhbHNlLCBmYWxzZSwgdHJ1ZSwgIiIsIHN1Z2dlc3RlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cisg
ICAgbV93ZWJQYWdlUHJpdmF0ZS0+bG9hZChyZXF1ZXN0LnVybCgpLnN0cmluZygpLCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpLCAiR0VUIiwgTmV0d29ya1JlcXVl
c3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgdHJ1
ZSwgIiIsIHN1Z2dlc3RlZE5hbWUpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tC
ZXJyeTo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikK
QEAgLTEyMTksNyArMTIxNyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Ojpk
aXNwYXQKICAgICBiYXNlNjRFbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEtPmRh
dGEoKSksIGRhdGEtPnNpemUoKSwgb3V0KTsKICAgICBvdXQuYXBwZW5kKCdcMCcpOyAvLyBNYWtl
IGl0IG51bGwtdGVybWluYXRlZC4KICAgICBTdHJpbmcgaWNvblVybCA9IGljb25EYXRhYmFzZSgp
LnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwodXJsKTsKLSAgICBtX3dlYlBhZ2VQcml2YXRl
LT5tX2NsaWVudC0+c2V0RmF2aWNvbihvdXQuZGF0YSgpLCBpY29uVXJsLnV0ZjgoKS5kYXRhKCkp
OworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5zZXRGYXZpY29uKG91dC5kYXRhKCks
IGljb25VcmwpOwogICAgIGRhdGEtPnVucmVmKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRCbGFja0JlcnJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
SWNvbkRhdGFiYXNlQ2xpZW50QmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRC
bGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUg
IkJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRl
ckltcGwuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBs
LmgiCiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklD
QVRJT05TKQorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUg
PEV2ZW50Lmg+CiAjaW5jbHVkZSA8Tm90aWZpY2F0aW9uLmg+CiAjaW5jbHVkZSA8Tm90aWZpY2F0
aW9uUHJlc2VudGVyQmxhY2tCZXJyeS5oPgpAQCAtNjgsNyArNjksNyBAQCBib29sIE5vdGlmaWNh
dGlvblByZXNlbnRlckltcGw6OnNob3coTm90CiAgICAgICAgIG1lc3NhZ2UgPSBuLT5jb250ZW50
cygpLnRpdGxlICsgIjogIiArIG4tPmNvbnRlbnRzKCkuYm9keTsKICAgICB9CiAKLSAgICBtX3Bs
YXRmb3JtUHJlc2VudGVyLT5zaG93KHN0ZDo6c3RyaW5nKHV1aWQudXRmOCgpLmRhdGEoKSksIHN0
ZDo6c3RyaW5nKG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOworICAgIG1fcGxhdGZvcm1QcmVzZW50
ZXItPnNob3codXVpZCwgbWVzc2FnZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTgxLDcg
KzgyLDcgQEAgdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWwoTgogICAgIGlm
IChpdCA9PSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
cGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChzdGQ6OnN0cmluZyhpdC0+dmFsdWUudXRmOCgpLmRh
dGEoKSkpOworICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChpdC0+dmFsdWUpOwogICAg
IG1fbm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogfQogCkBAIC05OSwyMyArMTAwLDIyIEBAIHZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFAKIHsKICAgICBBU1NFUlQoY29u
dGV4dCk7CiAgICAgbV9wZXJtaXNzaW9uUmVxdWVzdHMuYWRkKGNvbnRleHQsIGNhbGxiYWNrKTsK
LSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5yZXF1ZXN0UGVybWlzc2lvbihzdGQ6OnN0cmluZyhj
b250ZXh0LT51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSkpOworICAgIG1fcGxhdGZvcm1QcmVz
ZW50ZXItPnJlcXVlc3RQZXJtaXNzaW9uKGNvbnRleHQtPnVybCgpLmhvc3QoKSk7CiB9CiAKLXZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKQordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjpvblBlcm1pc3Npb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZG9t
YWluLCBib29sIGlzQWxsb3dlZCkKIHsKICAgICBBU1NFUlQoIWRvbWFpbi5lbXB0eSgpKTsKLSAg
ICBTdHJpbmcgZG9tYWluU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChkb21haW4uY19zdHIoKSk7
CiAgICAgUGVybWlzc2lvblJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uUmVx
dWVzdHMuYmVnaW4oKTsKICAgICBmb3IgKDsgaXQgIT0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5rZXktPnVybCgpLmhvc3QoKSAhPSBkb21haW5T
dHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGlzQWxsb3dlZCkgewotICAgICAgICAg
ICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9tYWluU3RyaW5nKTsKKyAgICAgICAgICAgIG1fYWxs
b3dlZERvbWFpbnMuYWRkKGRvbWFpbik7CiAgICAgICAgICAgICBpdC0+dmFsdWUtPmhhbmRsZUV2
ZW50KCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5yZW1v
dmUoZG9tYWluU3RyaW5nKTsKKyAgICAgICAgICAgIG1fYWxsb3dlZERvbWFpbnMucmVtb3ZlKGRv
bWFpbik7CiAKICAgICAgICAgbV9wZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKGl0KTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTM4LDEzICsxMzgsMTIgQEAgTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJt
aXNzaW9uIE5vdGlmaWNhdAogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBwbGF0
Zm9ybSBzaWRlLgotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25D
bGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVy
SW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiBpZCkKIHsKICAgICBBU1NFUlQoIWlkLmVtcHR5KCkpOwotICAgIFN0cmluZyBpZFN0cmlu
ZyA9IFN0cmluZzo6ZnJvbVVURjgoaWQuY19zdHIoKSk7CiAgICAgTm90aWZpY2F0aW9uTWFwOjpp
dGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9ucy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBt
X25vdGlmaWNhdGlvbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBp
ZFN0cmluZyAmJiBpdC0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAg
aWYgKGl0LT52YWx1ZSA9PSBpZCAmJiBpdC0+a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
IHsKICAgICAgICAgICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG5vdGlmaWNhdGlvbiA9IGl0LT5r
ZXk7CiAgICAgICAgICAgICBpdC0+a2V5LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNlLCB0cnVlKSk7CiAgICAgICAgICAgICBtX25vdGlm
aWNhdGlvbnMucmVtb3ZlKG5vdGlmaWNhdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsLmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDEyICsyMywxNyBAQAogI2luY2x1ZGUgPE5vdGlmaWNhdGlvbkFja0xp
c3RlbmVyLmg+CiAjaW5jbHVkZSA8Tm90aWZpY2F0aW9uQ2xpZW50Lmg+CiAjaW5jbHVkZSA8Tm90
aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeS5oPgotI2luY2x1ZGUgPHN0cmluZz4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAorbmFtZXNw
YWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIFN0cmluZzsKK30K
K30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsIDogcHVibGljIFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkNsaWVudCwgcHVibGljIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpOb3RpZmljYXRpb25BY2tMaXN0ZW5lciB7CkBAIC02MSw4ICs2Niw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFBlcm1pc3Npb24gY2hlY2tQZXJtaXNzaW9uKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIC8vIEludGVyZmFjZXMgaW5oZXJpdGVk
IGZyb20gTm90aWZpY2F0aW9uQWNrTGlzdGVuZXIuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmaWNh
dGlvbkNsaWNrZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKTsKLSAgICB2aXJ0dWFsIHZvaWQgb25Q
ZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiBpZCk7CisgICAgdmlydHVhbCB2b2lkIG9uUGVybWlzc2lvbihjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKTsKIAog
cHJpdmF0ZToKICAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9TZWxl
Y3RQb3B1cENsaWVudC5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDEzICszMiwxNCBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1
ZGUgIldlYlBhZ2VfcC5oIgogCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjZGVmaW5lIENFTExfSEVJ
R0hUIDMwCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2VsZWN0UG9wdXBDbGllbnQ6OlNlbGVj
dFBvcHVwQ2xpZW50KGJvb2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEJs
YWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywKK1Nl
bGVjdFBvcHVwQ2xpZW50OjpTZWxlY3RQb3B1cENsaWVudChib29sIG11bHRpcGxlLCBpbnQgc2l6
ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxz
LCBib29sKiBlbmFibGVkcywKICAgICBjb25zdCBpbnQqIGl0ZW1UeXBlLCBib29sKiBzZWxlY3Rl
ZHMsIEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqIHdlYlBhZ2UsIEhUTUxTZWxl
Y3RFbGVtZW50KiBlbGVtZW50KQogICAgIDogbV9tdWx0aXBsZShtdWx0aXBsZSkKICAgICAsIG1f
c2l6ZShzaXplKQpAQCAtNTMsNyArNTQsNyBAQCBTZWxlY3RQb3B1cENsaWVudDo6flNlbGVjdFBv
cHVwQ2xpZW50KCkKIHsKIH0KIAotdm9pZCBTZWxlY3RQb3B1cENsaWVudDo6dXBkYXRlKGJvb2wg
bXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6
V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywKK3ZvaWQgU2VsZWN0UG9wdXBDbGll
bnQ6OnVwZGF0ZShib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywKICAgICBj
b25zdCBpbnQqIGl0ZW1UeXBlLCBib29sKiBzZWxlY3RlZHMsIEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZVByaXZhdGUqLCBIVE1MU2VsZWN0RWxlbWVudCogZWxlbWVudCkKIHsKICAgICBtX211
bHRpcGxlID0gbXVsdGlwbGU7CkBAIC02Miw3ICs2Myw3IEBAIHZvaWQgU2VsZWN0UG9wdXBDbGll
bnQ6OnVwZGF0ZShib29sIG11bHQKICAgICBnZW5lcmF0ZUhUTUwobXVsdGlwbGUsIHNpemUsIGxh
YmVscywgZW5hYmxlZHMsIGl0ZW1UeXBlLCBzZWxlY3RlZHMpOwogfQogCi12b2lkIFNlbGVjdFBv
cHVwQ2xpZW50OjpnZW5lcmF0ZUhUTUwoYm9vbCBtdWx0aXBsZSwgaW50IHNpemUsIGNvbnN0IFNj
b3BlQXJyYXk8QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc+JiBsYWJlbHMsIGJvb2wqIGVu
YWJsZWRzLAordm9pZCBTZWxlY3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKGJvb2wgbXVsdGlw
bGUsIGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmc+JiBsYWJlbHMsIGJvb2wqIGVuYWJsZWRzLAogICAgIGNvbnN0IGludCogaXRlbVR5cGUsIGJv
b2wqIHNlbGVjdGVkcykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHNvdXJjZTsKQEAgLTgzLDcgKzg0
LDcgQEAgdm9pZCBTZWxlY3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKGJvbwogICAgIC8vIEFk
ZCBsYWJlbHMuCiAgICAgc291cmNlLmFwcGVuZCgnWycpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIHNvdXJjZS5hcHBlbmQoIiciICsgU3RyaW5nKGxhYmVs
c1tpXS5pbXBsKCkpLnJlcGxhY2UoJ1xcJywgIlxcXFwiKS5yZXBsYWNlKCdcJycsICJcXCciKSAr
ICInIik7CisgICAgICAgIHNvdXJjZS5hcHBlbmQoIiciICsgU3RyaW5nKGxhYmVsc1tpXSkucmVw
bGFjZSgnXFwnLCAiXFxcXCIpLnJlcGxhY2UoJ1wnJywgIlxcJyIpICsgIiciKTsKICAgICAgICAg
Ly8gRG9uJ3QgYXBwZW5kICcsJyB0byBsYXN0IGVsZW1lbnQuCiAgICAgICAgIGlmIChpICE9IHNp
emUgLSAxKQogICAgICAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIiwgIik7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
U2VsZWN0UG9wdXBDbGllbnQuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDEwICsyMywxMyBAQAogI2luY2x1ZGUgIlBhZ2VQb3B1cENsaWVudC5oIgogI2lu
Y2x1ZGUgIlNjb3BlUG9pbnRlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2Vi
U3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBC
bGFja0JlcnJ5IHsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBTdHJpbmc7Cit9CisKIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViUGFnZVByaXZhdGU7CiB9CkBAIC0zOSwxMiArNDIs
MTIgQEAgY2xhc3MgUGFnZVBvcHVwOwogCiBjbGFzcyBTZWxlY3RQb3B1cENsaWVudCA6IHB1Ymxp
YyBQYWdlUG9wdXBDbGllbnQgewogcHVibGljOgotICAgIFNlbGVjdFBvcHVwQ2xpZW50KGJvb2wg
bXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6
V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwg
Ym9vbCogc2VsZWN0ZWRzLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRN
TFNlbGVjdEVsZW1lbnQqKTsKKyAgICBTZWxlY3RQb3B1cENsaWVudChib29sIG11bHRpcGxlLCBp
bnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYg
bGFiZWxzLCBib29sKiBlbmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0
ZWRzLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRNTFNlbGVjdEVsZW1l
bnQqKTsKICAgICB+U2VsZWN0UG9wdXBDbGllbnQoKTsKIAotICAgIHZvaWQgdXBkYXRlKGJvb2wg
bXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6
V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwg
Ym9vbCogc2VsZWN0ZWRzLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRN
TFNlbGVjdEVsZW1lbnQqKTsKKyAgICB2b2lkIHVwZGF0ZShib29sIG11bHRpcGxlLCBpbnQgc2l6
ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxz
LCBib29sKiBlbmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0ZWRzLCBC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRNTFNlbGVjdEVsZW1lbnQqKTsK
IAotICAgIHZvaWQgZ2VuZXJhdGVIVE1MKGJvb2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBT
Y29wZUFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBl
bmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0ZWRzKTsKKyAgICB2b2lk
IGdlbmVyYXRlSFRNTChib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywgY29u
c3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0ZWRzKTsKICAgICB2b2lkIG5vdGlmeVNlbGVj
dGlvbkNoYW5nZShXZWJDb3JlOjpUaW1lcjxTZWxlY3RQb3B1cENsaWVudD4gKik7CiAKICAgICB2
b2lkIHdyaXRlRG9jdW1lbnQoRG9jdW1lbnRXcml0ZXImKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Vc2VyTWVkaWFDbGllbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvVXNlck1lZGlh
Q2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9Vc2VyTWVkaWFDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgVXNlck1lZGlhUmVxdWVzdHNNYXAmIHVzZXJNZWRp
YVJlCiAKIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiB0b01lZGlhU3RyZWFt
U291cmNlKGNvbnN0IFdlYk1lZGlhU3RyZWFtU291cmNlJiBzcmMpCiB7Ci0gICAgcmV0dXJuIE1l
ZGlhU3RyZWFtU291cmNlOjpjcmVhdGUoU3RyaW5nOjpmcm9tVVRGOChzcmMuaWQoKS5jX3N0cigp
KSwgc3RhdGljX2Nhc3Q8TWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGU+KHNyYy50eXBlKCkpLCBTdHJp
bmc6OmZyb21VVEY4KHNyYy5uYW1lKCkuY19zdHIoKSkpOworICAgIHJldHVybiBNZWRpYVN0cmVh
bVNvdXJjZTo6Y3JlYXRlKFdURjo6U3RyaW5nOjpmcm9tVVRGOChzcmMuaWQoKS5jX3N0cigpKSwg
c3RhdGljX2Nhc3Q8TWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGU+KHNyYy50eXBlKCkpLCBXVEY6OlN0
cmluZzo6ZnJvbVVURjgoc3JjLm5hbWUoKS5jX3N0cigpKSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gdG9NZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3Qg
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiBkKQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+CiAgICAgICAgIHZpZGVvU291cmNlcy5hcHBl
bmQoc3JjLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6Y3JlYXRlKFN0cmluZzo6ZnJvbVVURjgoZC5sYWJlbCgpLmNfc3RyKCkpLCBhdWRpb1Nv
dXJjZXMsIHZpZGVvU291cmNlcyk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6
Y3JlYXRlKFdURjo6U3RyaW5nOjpmcm9tVVRGOChkLmxhYmVsKCkuY19zdHIoKSksIGF1ZGlvU291
cmNlcywgdmlkZW9Tb3VyY2VzKTsKIH0KIAogY2xhc3MgV2ViVXNlck1lZGlhUmVxdWVzdENsaWVu
dEltcGwgOiBwdWJsaWMgV2ViVXNlck1lZGlhUmVxdWVzdENsaWVudCB7CkBAIC0xMTgsNyArMTE4
LDcgQEAgdm9pZCBVc2VyTWVkaWFDbGllbnRJbXBsOjpyZXF1ZXN0VXNlck1lZAogICAgIE93blB0
cjxXZWJVc2VyTWVkaWFSZXF1ZXN0Q2xpZW50SW1wbD4gcmVxdWVzdENsaWVudCA9IGFkb3B0UHRy
KG5ldyBXZWJVc2VyTWVkaWFSZXF1ZXN0Q2xpZW50SW1wbChwcnBSZXF1ZXN0KSk7CiAKICAgICBT
ZWN1cml0eU9yaWdpbiogb3JpZ2luID0gcmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5zZWN1cml0eU9yaWdpbigpOwotICAgIG1fcGFnZS0+Y2xpZW50KCktPnJlcXVlc3RVc2VyTWVk
aWEoV2ViVXNlck1lZGlhUmVxdWVzdChyZXF1ZXN0LT5hdWRpbygpLCByZXF1ZXN0LT52aWRlbygp
LCBvcmlnaW4tPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVxdWVzdENsaWVudC5nZXQoKSkp
OworICAgIG1fcGFnZS0+Y2xpZW50KCktPnJlcXVlc3RVc2VyTWVkaWEoV2ViVXNlck1lZGlhUmVx
dWVzdChyZXF1ZXN0LT5hdWRpbygpLCByZXF1ZXN0LT52aWRlbygpLCBvcmlnaW4tPnRvU3RyaW5n
KCksIHJlcXVlc3RDbGllbnQuZ2V0KCkpKTsKICAgICB1c2VyTWVkaWFSZXF1ZXN0c01hcCgpLmFk
ZChyZXF1ZXN0LCByZXF1ZXN0Q2xpZW50LnJlbGVhc2UoKSk7CiB9CiAKQEAgLTEyOSw3ICsxMjks
NyBAQCB2b2lkIFVzZXJNZWRpYUNsaWVudEltcGw6OmNhbmNlbFVzZXJNZWRpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSByZXF1ZXN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCk7Ci0gICAgbV9wYWdlLT5jbGllbnQoKS0+
Y2FuY2VsVXNlck1lZGlhUmVxdWVzdChXZWJVc2VyTWVkaWFSZXF1ZXN0KHJlcXVlc3QtPmF1ZGlv
KCksIHJlcXVlc3QtPnZpZGVvKCksIG9yaWdpbi0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dC0+dmFsdWUuZ2V0KCkpKTsKKyAgICBtX3BhZ2UtPmNsaWVudCgpLT5jYW5jZWxVc2VyTWVkaWFS
ZXF1ZXN0KFdlYlVzZXJNZWRpYVJlcXVlc3QocmVxdWVzdC0+YXVkaW8oKSwgcmVxdWVzdC0+dmlk
ZW8oKSwgb3JpZ2luLT50b1N0cmluZygpLCBpdC0+dmFsdWUuZ2V0KCkpKTsKICAgICB1c2VyTWVk
aWFSZXF1ZXN0c01hcCgpLnJlbW92ZShpdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcAkocmV2aXNpb24g
MTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDggKzQ2MCw4IEBAIHN0YXRpYyBTdHJpbmcg
Y2FjaGVQYWdlKFN0cmluZyBjYWNoZUNvbW0KICAgICBpZiAoY2FjaGVDb21tYW5kLmlzRW1wdHko
KSkKICAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06Omdl
bmVyYXRlSHRtbEZyYWdtZW50Rm9yQ2FjaGVLZXlzKCkuZGF0YSgpKSk7CiAgICAgZWxzZSBpZiAo
Y2FjaGVDb21tYW5kLnN0YXJ0c1dpdGgoIj9xdWVyeT0iLCBmYWxzZSkpIHsKLSAgICAgICAgc3Rk
OjpzdHJpbmcga2V5KGNhY2hlQ29tbWFuZC5zdWJzdHJpbmcoNykudXRmOCgpLmRhdGEoKSk7IC8v
IDcgaXMgbGVuZ3RoIG9mICJxdWVyeT0iLgotICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZyhr
ZXkuZGF0YSgpKSk7CisgICAgICAgIFN0cmluZyBrZXkoY2FjaGVDb21tYW5kLnN1YnN0cmluZyg3
KS51dGY4KCkuZGF0YSgpKTsgLy8gNyBpcyBsZW5ndGggb2YgInF1ZXJ5PSIuCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoa2V5KTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmcoIjxocj4iKSk7
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpnZW5l
cmF0ZUh0bWxGcmFnbWVudEZvckNhY2hlSGVhZGVycyhrZXkpLmRhdGEoKSkpOwogICAgIH0gZWxz
ZSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhh
bmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1OSw3ICs0NTksNyBAQCB2b2lkIElucHV0SGFuZGxlcjo6c2V0UGx1Z2luRm9jdXNl
ZChFbGVtCiAgICAgbV9jdXJyZW50Rm9jdXNFbGVtZW50ID0gZWxlbWVudDsKIH0KIAotc3RhdGlj
IGJvb2wgY29udmVydFN0cmluZ1RvV2NoYXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHdjaGFyX3Qq
IGRlc3QsIGludCBkZXN0Q2FwYWNpdHksIGludCogZGVzdExlbmd0aCkKK3N0YXRpYyBib29sIGNv
bnZlcnRTdHJpbmdUb1djaGFyKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcsIHdjaGFyX3QqIGRl
c3QsIGludCBkZXN0Q2FwYWNpdHksIGludCogZGVzdExlbmd0aCkKIHsKICAgICBBU1NFUlQoZGVz
dCk7CiAKQEAgLTQ3OSw3ICs0NzksNyBAQCBzdGF0aWMgYm9vbCBjb252ZXJ0U3RyaW5nVG9XY2hh
cihjb25zdCBTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNvbnZlcnRTdHJp
bmdUb1djaGFyVmVjdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBXVEY6OlZlY3Rvcjx3Y2hhcl90
PiYgd2NoYXJTdHJpbmcpCitzdGF0aWMgYm9vbCBjb252ZXJ0U3RyaW5nVG9XY2hhclZlY3Rvcihj
b25zdCBXVEY6OlN0cmluZyYgc3RyaW5nLCBXVEY6OlZlY3Rvcjx3Y2hhcl90PiYgd2NoYXJTdHJp
bmcpCiB7CiAgICAgQVNTRVJUKHdjaGFyU3RyaW5nLmlzRW1wdHkoKSk7CiAKQEAgLTUwMCwxNiAr
NTAwLDE2IEBAIHN0YXRpYyBib29sIGNvbnZlcnRTdHJpbmdUb1djaGFyVmVjdG9yKGMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFN0cmluZyBjb252ZXJ0U3Bhbm5hYmxlU3RyaW5nVG9T
dHJpbmcoc3Bhbm5hYmxlX3N0cmluZ190KiBzcmMpCitzdGF0aWMgV1RGOjpTdHJpbmcgY29udmVy
dFNwYW5uYWJsZVN0cmluZ1RvU3RyaW5nKHNwYW5uYWJsZV9zdHJpbmdfdCogc3JjKQogewogICAg
IGlmICghc3JjIHx8ICFzcmMtPnN0ciB8fCAhc3JjLT5sZW5ndGgpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6U3RyaW5nKCk7CiAKICAgICBXVEY6OlZlY3Rv
cjxVQ2hhcj4gZGVzdDsKICAgICBpbnQgZGVzdENhcGFjaXR5ID0gKHNyYy0+bGVuZ3RoICogMikg
KyAxOwogICAgIGlmICghZGVzdC50cnlSZXNlcnZlQ2FwYWNpdHkoZGVzdENhcGFjaXR5KSkgewog
ICAgICAgICBsb2dBbHdheXMoTG9nTGV2ZWxDcml0aWNhbCwgIklucHV0SGFuZGxlcjo6Y29udmVy
dFNwYW5uYWJsZVN0cmluZ1RvU3RyaW5nIENhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN0cmlu
Zy4iKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4gV1RGOjpTdHJp
bmcoKTsKICAgICB9CiAKICAgICBpbnQgZGVzdExlbmd0aCA9IDA7CkBAIC01MTgsMTAgKzUxOCwx
MCBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTcGFubmFibGVTdHJpbmdUb1N0CiAgICAgdV9zdHJG
cm9tVVRGMzIoZGVzdC5kYXRhKCksIGRlc3RDYXBhY2l0eSwgJmRlc3RMZW5ndGgsIHJlaW50ZXJw
cmV0X2Nhc3Q8VUNoYXIzMio+KHNyYy0+c3RyKSwgc3JjLT5sZW5ndGgsICZlYyk7CiAgICAgaWYg
KGVjKSB7CiAgICAgICAgIGxvZ0Fsd2F5cyhMb2dMZXZlbENyaXRpY2FsLCAiSW5wdXRIYW5kbGVy
Ojpjb252ZXJ0U3Bhbm5hYmxlU3RyaW5nVG9TdHJpbmcgRXJyb3IgY29udmVydGluZyBzdHJpbmcg
ZWMgKCVkKS4iLCBlYyk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6U3RyaW5nKCk7CiAgICAgfQogICAgIGRlc3QucmVzaXplKGRlc3RMZW5ndGgpOwotICAg
IHJldHVybiBTdHJpbmcoZGVzdC5kYXRhKCksIGRlc3RMZW5ndGgpOworICAgIHJldHVybiBXVEY6
OlN0cmluZyhkZXN0LmRhdGEoKSwgZGVzdExlbmd0aCk7CiB9CiAKIHZvaWQgSW5wdXRIYW5kbGVy
OjpzZW5kTGVhcm5UZXh0RGV0YWlscyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQpAQCAtNTQy
LDcgKzU0Miw3IEBAIHZvaWQgSW5wdXRIYW5kbGVyOjpsZWFyblRleHQoKQogICAgIGlmIChtX2N1
cnJlbnRGb2N1c0VsZW1lbnRUZXh0RWRpdE1hc2sgJiBOT19QUkVESUNUSU9OIHx8IG1fY3VycmVu
dEZvY3VzRWxlbWVudFRleHRFZGl0TWFzayAmIE5PX0FVVE9fVEVYVCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RyaW5nIHRleHRJbkZpZWxkKGVsZW1lbnRUZXh0KCkpOworICAgIFdURjo6U3Ry
aW5nIHRleHRJbkZpZWxkKGVsZW1lbnRUZXh0KCkpOwogICAgIHRleHRJbkZpZWxkID0gdGV4dElu
RmllbGQuc3Vic3RyaW5nKHN0ZDo6bWF4KDAsIHN0YXRpY19jYXN0PGludD4odGV4dEluRmllbGQu
bGVuZ3RoKCkgLSBNYXhMZWFyblRleHREYXRhU2l6ZSkpLCB0ZXh0SW5GaWVsZC5sZW5ndGgoKSk7
CiAgICAgdGV4dEluRmllbGQucmVtb3ZlKDAsIHRleHRJbkZpZWxkLmZpbmQoIiAiKSk7CiAKQEAg
LTY0Miw3ICs2NDIsNyBAQCB2b2lkIElucHV0SGFuZGxlcjo6c3BlbGxDaGVja2luZ1JlcXVlc3RQ
CiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKIAogICAgIC8vIENvbnZl
cnQgdGhlIHNwYW5uYWJsZVN0cmluZyB0byBUZXh0Q2hlY2tpbmdSZXN1bHQgdGhlbiBhcHBlbmQg
dG8gcmVzdWx0cyB2ZWN0b3IuCi0gICAgU3RyaW5nIHJlcGxhY2VtZW50OworICAgIFdURjo6U3Ry
aW5nIHJlcGxhY2VtZW50OwogICAgIFRleHRDaGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tpbmdSZXN1
bHQ7CiAgICAgdGV4dENoZWNraW5nUmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmc7CiAgICAgdGV4dENoZWNraW5nUmVzdWx0LnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CkBA
IC05NTksOSArOTU5LDkgQEAgYm9vbCBJbnB1dEhhbmRsZXI6Om9wZW5EYXRlUG9wdXAoSFRNTElu
cAogICAgIGNhc2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OklucHV0VHlwZU1vbnRoOiB7CiAgICAg
ICAgIC8vIENoZWNrIGlmIHBvcHVwIGFscmVhZHkgZXhpc3RzLCBjbG9zZSBpdCBpZiBkb2VzLgog
ICAgICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jbG9zZVBhZ2VQ
b3B1cCgwKTsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+dmFsdWUoKTsKLSAgICAg
ICAgU3RyaW5nIG1pbiA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1pbkF0dHIp
LnN0cmluZygpOwotICAgICAgICBTdHJpbmcgbWF4ID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6bWF4QXR0cikuc3RyaW5nKCk7CisgICAgICAgIFdURjo6U3RyaW5nIHZhbHVlID0g
ZWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAgV1RGOjpTdHJpbmcgbWluID0gZWxlbWVudC0+Z2V0
QXR0cmlidXRlKEhUTUxOYW1lczo6bWluQXR0cikuc3RyaW5nKCk7CisgICAgICAgIFdURjo6U3Ry
aW5nIG1heCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1heEF0dHIpLnN0cmlu
ZygpOwogICAgICAgICBkb3VibGUgc3RlcCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OnN0ZXBBdHRyKS50b0RvdWJsZSgpOwogCiAgICAgICAgIERhdGVQaWNrZXJDbGllbnQqIGNs
aWVudCA9IG5ldyBEYXRlUGlja2VyQ2xpZW50KHR5cGUsIHZhbHVlLCBtaW4sIG1heCwgc3RlcCwg
IG1fd2ViUGFnZSwgZWxlbWVudCk7CkBAIC0xNjQxLDggKzE2NDEsOCBAQCBib29sIElucHV0SGFu
ZGxlcjo6b3BlblNlbGVjdFBvcHVwKEhUTUxTCiAgICAgaW50IHNpemUgPSBsaXN0SXRlbXMuc2l6
ZSgpOwogCiAgICAgYm9vbCBtdWx0aXBsZSA9IHNlbGVjdC0+bXVsdGlwbGUoKTsKLSAgICBTY29w
ZUFycmF5PFdlYlN0cmluZz4gbGFiZWxzOwotICAgIGxhYmVscy5yZXNldChuZXcgV2ViU3RyaW5n
W3NpemVdKTsKKyAgICBTY29wZUFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+IGxh
YmVsczsKKyAgICBsYWJlbHMucmVzZXQobmV3IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmdb
c2l6ZV0pOwogCiAgICAgLy8gQ2hlY2sgaWYgcG9wdXAgYWxyZWFkeSBleGlzdHMsIGNsb3NlIGl0
IGlmIGRvZXMuCiAgICAgbV93ZWJQYWdlLT5tX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Y2xv
c2VQYWdlUG9wdXAoMCk7CkBAIC0yMDUxLDcgKzIwNTEsNyBAQCBib29sIElucHV0SGFuZGxlcjo6
c2V0VGV4dChzcGFubmFibGVfc3RyCiAgICAgLy8gY2hhbmdlcyBzaG91bGQgbm90IGJlIGhhbmRs
ZWQgYXMgbm90aWZpY2F0aW9uIGV2ZW50LgogICAgIG1fd2ViUGFnZS0+bV9zZWxlY3Rpb25IYW5k
bGVyLT5zZXRTZWxlY3Rpb25BY3RpdmUoZmFsc2UpOwogCi0gICAgU3RyaW5nIHRleHRUb0luc2Vy
dCA9IGNvbnZlcnRTcGFubmFibGVTdHJpbmdUb1N0cmluZyhzcGFubmFibGVTdHJpbmcpOworICAg
IFdURjo6U3RyaW5nIHRleHRUb0luc2VydCA9IGNvbnZlcnRTcGFubmFibGVTdHJpbmdUb1N0cmlu
ZyhzcGFubmFibGVTdHJpbmcpOwogICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dFRvSW5zZXJ0Lmxl
bmd0aCgpOwogCiAgICAgSW5wdXRMb2coTG9nTGV2ZWxJbmZvLCAiSW5wdXRIYW5kbGVyOjpzZXRU
ZXh0IHNwYW5uYWJsZVN0cmluZyBpcyAnJXMnLCBvZiBsZW5ndGggJWQiLCB0ZXh0VG9JbnNlcnQu
bGF0aW4xKCkuZGF0YSgpLCB0ZXh0TGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9TZWxlY3Rpb25IYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBA
QCB2b2lkIFNlbGVjdGlvbkhhbmRsZXI6OmNhbmNlbFNlbGVjdGlvbigpCiAgICAgICAgIG1fd2Vi
UGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5jbGVhcigpOwogfQogCi1X
ZWJTdHJpbmcgU2VsZWN0aW9uSGFuZGxlcjo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKK0JsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcgU2VsZWN0aW9uSGFuZGxlcjo6c2VsZWN0ZWRUZXh0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9y
KCktPnNlbGVjdGVkVGV4dCgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvU2VsZWN0aW9uSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIuaAkocmV2aXNpb24g
MTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU2VsZWN0
aW9uSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAgY2xhc3MgVmlz
aWJsZVNlbGVjdGlvbjsKIH0KIAogbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFBs
YXRmb3JtIHsKK2NsYXNzIFN0cmluZzsKK30KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IFdlYlBhZ2VQcml2YXRlOwotY2xhc3MgV2ViU3RyaW5nOwogCiBjbGFzcyBTZWxlY3Rpb25IYW5k
bGVyIHsKIHB1YmxpYzoKQEAgLTU1LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uQWN0aXZlKGJvb2wgYWN0aXZlKSB7IG1fc2VsZWN0aW9uQWN0aXZlID0gYWN0aXZlOyB9
CiAKICAgICB2b2lkIGNhbmNlbFNlbGVjdGlvbigpOwotICAgIFdlYlN0cmluZyBzZWxlY3RlZFRl
eHQoKSBjb25zdDsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIHNlbGVjdGVkVGV4
dCgpIGNvbnN0OwogCiAgICAgYm9vbCBzZWxlY3Rpb25Db250YWlucyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9TdXJmYWNlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvU3VyZmFjZVBvb2wuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBUaWxlQnVmZmVyKiBTdXJmYWNlUG9vbDo6YmFj
a0J1ZmZlcigpIGNvCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGlsZUJ1ZmZlcio+KG1f
YmFja0J1ZmZlcik7CiB9CiAKLXN0ZDo6c3RyaW5nIFN1cmZhY2VQb29sOjpzaGFyZWRQaXhtYXBH
cm91cCgpIGNvbnN0Citjb25zdCBjaGFyICpTdXJmYWNlUG9vbDo6c2hhcmVkUGl4bWFwR3JvdXAo
KSBjb25zdAogewogICAgIHJldHVybiBTSEFSRURfUElYTUFQX0dST1VQOwogfQpJbmRleDogU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU3VyZmFjZVBvb2wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9v
bC5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9TdXJmYWNlUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1
YmxpYzoKICAgICAvLyBiYWNraW5nc3RvcmUuCiAgICAgVGlsZUJ1ZmZlciogYmFja0J1ZmZlcigp
IGNvbnN0OwogCi0gICAgc3RkOjpzdHJpbmcgc2hhcmVkUGl4bWFwR3JvdXAoKSBjb25zdDsKKyAg
ICBjb25zdCBjaGFyICpzaGFyZWRQaXhtYXBHcm91cCgpIGNvbnN0OwogCiAgICAgdm9pZCByZWxl
YXNlQnVmZmVycygpOwogICAgIHZvaWQgY3JlYXRlQnVmZmVycygpOwpJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMjU3KQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTIt
MTAtMTMgIEdlb3JnZSBTdGFpa29zICA8c3RhaWtvc0B3ZWJraXQub3JnPgorCisgICAgICAgIFtC
bGFja0JlcnJ5XSBBZGFwdCB0byBQbGF0Zm9ybSBBUEkgY2hhbmdlcyBpbiBzdHJpbmcgaGFuZGxp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjQ4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVy
dCB1c2FnZSBvZiBXZWJTdHJpbmcsIGNoYXIqIGFuZCBzdGQ6OnN0cmluZyB0byBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJy
eS9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBS
ZW5kZXJUcmVlOjpydW5UZXN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5
L1dvcmtRdWV1ZUl0ZW1CbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKExvYWRIVE1MU3RyaW5nSXRl
bTo6aW52b2tlKToKKyAgICAgICAgKFNjcmlwdEl0ZW06Omludm9rZSk6CisKIDIwMTItMTAtMTIg
IFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBbVGVzdFJl
c3VsdFNlcnZlcl0gQWRkIHN1cHBvcnQgZm9yIG5vbi1DaHJvbWl1bSBUZXN0RXhwZWN0YXRpb25z
IGZpbGVzCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJU
cmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1
bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYmxhY2tiZXJyeS9EdW1wUmVuZGVyVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3
ICsxOTMsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpydW5UZXN0KGNvbnN0IFN0cmluCiAgICAg
RklMRSogY3VycmVudCA9IGZvcGVuKG1fY3VycmVudFRlc3RGaWxlLnV0ZjgoKS5kYXRhKCksICJ3
Iik7CiAgICAgZndyaXRlKG1fY3VycmVudFRlc3QtPnV0ZjgoKS5kYXRhKCksIDEsIG1fY3VycmVu
dFRlc3QtPnV0ZjgoKS5sZW5ndGgoKSwgY3VycmVudCk7CiAgICAgZmNsb3NlKGN1cnJlbnQpOwot
ICAgIG1fcGFnZS0+bG9hZCh1cmwudXRmOCgpLmRhdGEoKSwgMCwgZmFsc2UpOworICAgIG1fcGFn
ZS0+bG9hZCh1cmwsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCks
IGZhbHNlKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZG9uZURydCgpCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1dvcmtRdWV1ZUl0ZW1CbGFja0JlcnJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1dvcmtRdWV1ZUl0
ZW1CbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYmxhY2tiZXJyeS9Xb3JrUXVldWVJdGVtQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBMb2FkSFRNTFN0cmluZ0l0ZW06Omludm9rZSgpIGNvbnN0
CiAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhtX2NvbnRlbnQuZ2V0KCksIGNvbnRlbnQuZ2V0
KCksIGNvbnRlbnRTaXplKTsKICAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKG1fYmFzZVVSTC5n
ZXQoKSwgYmFzZVVSTC5nZXQoKSwgYmFzZVVSTFNpemUpOwogICAgIEpTU3RyaW5nR2V0VVRGOENT
dHJpbmcobV91bnJlYWNoYWJsZVVSTC5nZXQoKSwgdW5yZWFjaGFibGVVUkwuZ2V0KCksIHVucmVh
Y2hhYmxlVVJMU2l6ZSk7Ci0gICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6
Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+bG9hZFN0cmluZyhjb250ZW50LmdldCgpLCBiYXNl
VVJMLmdldCgpLCAidGV4dC9odG1sIiwgdW5yZWFjaGFibGVVUkxTaXplID8gdW5yZWFjaGFibGVV
UkwuZ2V0KCkgOiAwKTsKKyAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpj
dXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5sb2FkU3RyaW5nKGNvbnRlbnQuZ2V0KCksIGJhc2VV
UkwuZ2V0KCksICJ0ZXh0L2h0bWwiLCB1bnJlYWNoYWJsZVVSTFNpemUgPyB1bnJlYWNoYWJsZVVS
TC5nZXQoKSA6ICIiKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNzQsMTEgKzc0LDExIEBA
IGJvb2wgUmVsb2FkSXRlbTo6aW52b2tlKCkgY29uc3QKIGJvb2wgU2NyaXB0SXRlbTo6aW52b2tl
KCkgY29uc3QKIHsKICAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkphdmFTY3JpcHREYXRhVHlwZSB0
eXBlOwotICAgIEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nIHJlc3VsdDsKKyAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIHJlc3VsdDsKICAgICBzaXplX3Qgc2NyaXB0QXJyU2l6
ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShtX3NjcmlwdC5nZXQoKSk7CiAg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gc2NyaXB0ID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltzY3Jp
cHRBcnJTaXplXSk7CiAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhtX3NjcmlwdC5nZXQoKSwg
c2NyaXB0LmdldCgpLCBzY3JpcHRBcnJTaXplKTsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1
bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5leGVjdXRlSmF2YVNjcmlw
dChzY3JpcHQuZ2V0KCksIHR5cGUsIHJlc3VsdCk7CisgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpE
dW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+ZXhlY3V0ZUphdmFTY3Jp
cHQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZnJvbVJhd0RhdGEoc2NyaXB0LmdldCgp
LCBzY3JpcHRBcnJTaXplKSwgdHlwZSwgcmVzdWx0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168554</attachid>
            <date>2012-10-13 08:27:02 -0700</date>
            <delta_ts>2012-10-15 10:31:42 -0700</delta_ts>
            <desc>Large patch to fix all API usage and support the new string class</desc>
            <filename>99248.patch</filename>
            <type>text/plain</type>
            <size>192290</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzEyNTcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTEwLTEzICBHZW9yZ2UgU3RhaWtvcyAgPHN0
YWlrb3NAd2Via2l0Lm9yZz4KKworICAgICAgICBbQmxhY2tCZXJyeV0gQWRhcHQgdG8gUGxhdGZv
cm0gQVBJIGNoYW5nZXMgaW4gc3RyaW5nIGhhbmRsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTI0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnZlcnQgdXNhZ2Ugb2YgV2ViU3RyaW5nLCBjaGFy
KiBhbmQgc3RkOjpzdHJpbmcgdG8gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZy4KKworICAg
ICAgICAqIHd0Zi9Bc3NlcnRpb25zLmNwcDogVXNlIHByb3BlciBsb2cgZnVuY3Rpb24uCisgICAg
ICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmg6IEFkZCBCbGFja0JlcnJ5IHN1cHBvcnQKKyAg
ICAgICAgKEF0b21pY1N0cmluZyk6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6QXRvbWlj
U3RyaW5nKTogQWRkIEJsYWNrQmVycnkgU3VwcG9ydAorICAgICAgICAoV1RGOjpBdG9taWNTdHJp
bmc6Om9wZXJhdG9yIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcpOgorICAgICAgICAqIHd0
Zi90ZXh0L1N0cmluZ0ltcGwuaDogQ29udmVyc2lvbiBzdXBwb3J0LgorICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOiBDb252ZXJzaW9uIHN1cHBvcnQuCisgICAgICAgIChQbGF0Zm9ybSk6
CisgICAgICAgIChTdHJpbmcpOgorCiAyMDEyLTEwLTEyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJv
ZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChTdHJpbmdCdWls
ZGVyJikgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgYml0IHNpemUgb2YgdGhlIGFyZ3Vt
ZW50IHN0cmluZwpJbmRleDogU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysr
IFNvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyAr
MTE1LDcgQEAgc3RhdGljIHZvaWQgdnByaW50Zl9zdGRlcnJfY29tbW9uKGNvbnN0IAogICAgIC8v
IEZhbGwgdGhyb3VnaCB0byB3cml0ZSB0byBzdGRlcnIgaW4gdGhlIHNhbWUgbWFubmVyIGFzIG90
aGVyIHBsYXRmb3Jtcy4KIAogI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6bG9nU3RyZWFtVihmb3JtYXQsIGFyZ3MpOworICAgIEJCTE9HVihCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwgZm9ybWF0LCBhcmdzKTsKICNlbGlm
IE9TKEFORFJPSUQpCiAgICAgX19hbmRyb2lkX2xvZ192cHJpbnQoQU5EUk9JRF9MT0dfV0FSTiwg
IldlYktpdCIsIGZvcm1hdCwgYXJncyk7CiAjZWxpZiBIQVZFKElTREVCVUdHRVJQUkVTRU5UKQpA
QCAtMjE1LDI2ICsyMTUsOCBAQCBzdGF0aWMgdm9pZCBwcmludENhbGxTaXRlKGNvbnN0IGNoYXIq
IGZpCiAjZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi1zdHJ1Y3QgV1RGTG9n
TG9ja2VyIHsKLSAgICBXVEZMb2dMb2NrZXIoQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok1lc3NhZ2VM
b2dMZXZlbCBsb2dMZXZlbCkKLSAgICB7Ci0gICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjps
b2NrTG9nZ2luZyhsb2dMZXZlbCk7Ci0gICAgfQotCi0gICAgfldURkxvZ0xvY2tlcigpCi0gICAg
ewotICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6dW5sb2NrTG9nZ2luZygpOwotICAgIH0K
LX07Ci0jZW5kaWYKLQogdm9pZCBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0IGNoYXIq
IGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogYXNzZXJ0
aW9uKQogewotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgV1RGTG9nTG9ja2VyIGxvY2tl
cihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCk7Ci0jZW5kaWYKLQogICAg
IGlmIChhc3NlcnRpb24pCiAgICAgICAgIHByaW50Zl9zdGRlcnJfY29tbW9uKCJBU1NFUlRJT04g
RkFJTEVEOiAlc1xuIiwgYXNzZXJ0aW9uKTsKICAgICBlbHNlCkBAIC0yNDQsMTAgKzIyNiw2IEBA
IHZvaWQgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShjb25zdCBjaGEKIAogdm9pZCBXVEZSZXBv
cnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24sIGNvbnN0IGNoYXIq
IGZvcm1hdCwgLi4uKQogewotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgV1RGTG9nTG9j
a2VyIGxvY2tlcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCk7Ci0jZW5k
aWYKLQogICAgIHZhX2xpc3QgYXJnczsKICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwogICAg
IHZwcmludGZfc3RkZXJyX3dpdGhfcHJlZml4KCJBU1NFUlRJT04gRkFJTEVEOiAiLCBmb3JtYXQs
IGFyZ3MpOwpAQCAtMjU4LDEwICsyMzYsNiBAQCB2b2lkIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1
cmVXaXRoTWVzc2FnCiAKIHZvaWQgV1RGUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlKGNv
bnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hh
ciogYXJnTmFtZSwgY29uc3QgY2hhciogYXNzZXJ0aW9uKQogewotI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCi0gICAgV1RGTG9nTG9ja2VyIGxvY2tlcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9n
TGV2ZWxDcml0aWNhbCk7Ci0jZW5kaWYKLQogICAgIHByaW50Zl9zdGRlcnJfY29tbW9uKCJBUkdV
TUVOVCBCQUQ6ICVzLCAlc1xuIiwgYXJnTmFtZSwgYXNzZXJ0aW9uKTsKICAgICBwcmludENhbGxT
aXRlKGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKIH0KQEAgLTM5OSwxMCArMzczLDYgQEAgdm9pZCBX
VEZJbnN0YWxsUmVwb3J0QmFja3RyYWNlT25DcmFzaEhvbwogCiB2b2lkIFdURlJlcG9ydEZhdGFs
RXJyb3IoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBj
b25zdCBjaGFyKiBmb3JtYXQsIC4uLikKIHsKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotICAg
IFdURkxvZ0xvY2tlciBsb2NrZXIoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsQ3JpdGlj
YWwpOwotI2VuZGlmCi0KICAgICB2YV9saXN0IGFyZ3M7CiAgICAgdmFfc3RhcnQoYXJncywgZm9y
bWF0KTsKICAgICB2cHJpbnRmX3N0ZGVycl93aXRoX3ByZWZpeCgiRkFUQUwgRVJST1I6ICIsIGZv
cm1hdCwgYXJncyk7CkBAIC00MTMsMTAgKzM4Myw2IEBAIHZvaWQgV1RGUmVwb3J0RmF0YWxFcnJv
cihjb25zdCBjaGFyKiBmaWwKIAogdm9pZCBXVEZSZXBvcnRFcnJvcihjb25zdCBjaGFyKiBmaWxl
LCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4u
KQogewotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgV1RGTG9nTG9ja2VyIGxvY2tlcihC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuKTsKLSNlbmRpZgotCiAgICAgdmFfbGlz
dCBhcmdzOwogICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CiAgICAgdnByaW50Zl9zdGRlcnJf
d2l0aF9wcmVmaXgoIkVSUk9SOiAiLCBmb3JtYXQsIGFyZ3MpOwpAQCAtNDMwLDEwICszOTYsNiBA
QCB2b2lkIFdURkxvZyhXVEZMb2dDaGFubmVsKiBjaGFubmVsLCBjb25zCiAgICAgaWYgKGNoYW5u
ZWwtPnN0YXRlICE9IFdURkxvZ0NoYW5uZWxPbikKICAgICAgICAgcmV0dXJuOwogCi0jaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBXVEZMb2dMb2NrZXIgbG9ja2VyKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpMb2dMZXZlbEluZm8pOwotI2VuZGlmCi0KICAgICB2YV9saXN0IGFyZ3M7CiAgICAg
dmFfc3RhcnQoYXJncywgZm9ybWF0KTsKICAgICB2cHJpbnRmX3N0ZGVycl93aXRoX3RyYWlsaW5n
X25ld2xpbmUoZm9ybWF0LCBhcmdzKTsKQEAgLTQ0NSwxMCArNDA3LDYgQEAgdm9pZCBXVEZMb2dW
ZXJib3NlKGNvbnN0IGNoYXIqIGZpbGUsIGludAogICAgIGlmIChjaGFubmVsLT5zdGF0ZSAhPSBX
VEZMb2dDaGFubmVsT24pCiAgICAgICAgIHJldHVybjsKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVS
UlkpCi0gICAgV1RGTG9nTG9ja2VyIGxvY2tlcihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2
ZWxJbmZvKTsKLSNlbmRpZgotCiAgICAgdmFfbGlzdCBhcmdzOwogICAgIHZhX3N0YXJ0KGFyZ3Ms
IGZvcm1hdCk7CiAgICAgdnByaW50Zl9zdGRlcnJfd2l0aF90cmFpbGluZ19uZXdsaW5lKGZvcm1h
dCwgYXJncyk7CkBAIC00NTksMTAgKzQxNyw2IEBAIHZvaWQgV1RGTG9nVmVyYm9zZShjb25zdCBj
aGFyKiBmaWxlLCBpbnQKIAogdm9pZCBXVEZMb2dBbHdheXMoY29uc3QgY2hhciogZm9ybWF0LCAu
Li4pCiB7Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBXVEZMb2dMb2NrZXIgbG9ja2Vy
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8pOwotI2VuZGlmCi0KICAgICB2YV9s
aXN0IGFyZ3M7CiAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKICAgICB2cHJpbnRmX3N0ZGVy
cl93aXRoX3RyYWlsaW5nX25ld2xpbmUoZm9ybWF0LCBhcmdzKTsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbWljU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4
dC9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSwxMCBAQCBwdWJs
aWM6CiAgICAgQXRvbWljU3RyaW5nKGNvbnN0IFFTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKFN0
cmluZyhzKS5pbXBsKCkpKSB7IH0KICAgICBvcGVyYXRvciBRU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmc7IH0KICNlbmRpZgorI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgQXRv
bWljU3RyaW5nKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHMpIDogbV9zdHJp
bmcoYWRkKFN0cmluZyhzKS5pbXBsKCkpKSB7IH0KKyAgICBvcGVyYXRvciBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KKyNlbmRpZgogCiAg
ICAgLy8gQXRvbWljU3RyaW5nOjpmcm9tVVRGOCB3aWxsIHJldHVybiBhIG51bGwgc3RyaW5nIGlm
CiAgICAgLy8gdGhlIGlucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMu
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDEwIEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZTdHJpbmcgKiBDRlN0cmkKIEBjbGFzcyBO
U1N0cmluZzsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KKyNlbmRpZgorCiAvLyBGSVhNRTogVGhpcyBpcyBh
IHRlbXBvcmFyeSBsYXllcmluZyB2aW9sYXRpb24gd2hpbGUgd2UgbW92ZSBzdHJpbmcgY29kZSB0
byBXVEYuCiAvLyBMYW5kaW5nIHRoZSBmaWxlIG1vdmVzIGluIG9uZSBwYXRjaCwgd2lsbCBmb2xs
b3cgb24gd2l0aCBwYXRjaGVzIHRvIGNoYW5nZSB0aGUgbmFtZXNwYWNlcy4KIG5hbWVzcGFjZSBK
U0MgewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0
OSw4IEBAIGNsYXNzIHd4U3RyaW5nOwogCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKIG5hbWVz
cGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIGNsYXNzIFdlYlN0cmlu
ZzsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBTdHJpbmc7CiB9CiB9CiAjZW5kaWYKQEAg
LTQxMCw4ICs0MTAsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVS
UlkpCi0gICAgU3RyaW5nKGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nJik7Ci0g
ICAgb3BlcmF0b3IgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcoKSBjb25zdDsKKyAgICBT
dHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOworICAgIG9wZXJhdG9y
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcoKSBjb25zdDsKICNlbmRpZgogCiAgICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgbWFrZThCaXRGcm9tMTZCaXRTb3VyY2Uo
Y29uc3QgVUNoYXIqLCBzaXplX3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMjU3KQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTItMTAtMTMgIEdlb3JnZSBTdGFpa29zICA8c3RhaWtvc0B3ZWJraXQub3JnPgorCisg
ICAgICAgIFtCbGFja0JlcnJ5XSBBZGFwdCB0byBQbGF0Zm9ybSBBUEkgY2hhbmdlcyBpbiBzdHJp
bmcgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5MjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ29udmVydCB1c2FnZSBvZiBXZWJTdHJpbmcsIGNoYXIqIGFuZCBzdGQ6OnN0cmluZyB0byBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nLgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0
VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpUZXh0VHJhY2spOiBGaXgg
dGhlIGJ1aWxkIGZvciBCbGFja0JlcnJ5LgorICAgICAgICAqIHBhZ2UvYmxhY2tiZXJyeS9TZXR0
aW5nc0JsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2JsYWNrYmVycnkvTG9jYWxpemVkU3RyaW5nc0JsYWNrQmVycnkuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvTUlNRVR5cGVSZWdpc3RyeUJsYWNrQmVycnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0
ZW5zaW9uRm9yTUlNRVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvUGFzdGVi
b2FyZEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6cGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OmRvY3VtZW50RnJhZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvUmVh
ZE9ubHlMYXRpbjFTdHJpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldENlcnRpZmljYXRlUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Z2VuZXJhdGVQcm90ZWN0aW9uU3BhY2VGcm9tTU1SQXV0aENoYWxsZW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om9uQXV0aGVudGljYXRpb25OZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpvbkF1dGhlbnRpY2F0aW9uQWNjZXB0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb29rdXBNZWRpYVN0
cmVhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXll
clByaXZhdGVCbGFja0JlcnJ5Lmg6CisgICAgICAgIChNZWRpYVBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjplbmdpbmVEZXNjcmlwdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0ROU0JsYWNrQmVycnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtK
b2I6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0pvYjo6bm90aWZ5U3Rh
dHVzUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0pvYjo6bm90aWZ5SGVhZGVy
c1JlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtKb2I6OmhhbmRsZU5vdGlmeUNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtKb2I6OnNlbmRSZXF1ZXN0V2l0aENyZWRl
bnRpYWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pv
Yi5oOgorICAgICAgICAoTmV0d29ya0pvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L05ldHdvcmtNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtN
YW5hZ2VyOjpzdGFydEpvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlQmxhY2tCZXJyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1N0cmluZ0JsYWNrQmVycnkuY3Bw
OgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZzo6
b3BlcmF0b3IgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyk6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9ibGFja2JlcnJ5L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VCbGFja0JlcnJ5
LmNwcDoKKwogMjAxMi0xMC0xMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJlbW92ZSBkZWFkIGNvZGUgaW4gTm9kZS5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEw
MCw3IEBAIFRleHRUcmFjazo6VGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICAsIG1f
bWVkaWFFbGVtZW50KDApCiAgICAgLCBtX2xhYmVsKGxhYmVsKQogICAgICwgbV9sYW5ndWFnZShs
YW5ndWFnZSkKLSAgICAsIG1fbW9kZShkaXNhYmxlZEtleXdvcmQoKSkKKyAgICAsIG1fbW9kZShk
aXNhYmxlZEtleXdvcmQoKS5zdHJpbmcoKSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAs
IG1fdHJhY2tUeXBlKHR5cGUpCiAgICAgLCBtX3JlYWRpbmVzc1N0YXRlKE5vdExvYWRlZCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9TZXR0aW5nc0JsYWNrQmVycnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYmxhY2tiZXJyeS9TZXR0aW5nc0Js
YWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Js
YWNrYmVycnkvU2V0dGluZ3NCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzkg
KzI1LDU3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGxh
bmd1YWdlc1tdID0gewotICAgICJhciIsCi0gICAgImJuIiwKLSAgICAiZ3UiLAotICAgICJoZSIs
Ci0gICAgImhpIiwKLSAgICAiamEiLAotICAgICJrbiIsCi0gICAgImtvIiwKLSAgICAibWwiLAot
ICAgICJwYSIsCi0gICAgInRhIiwKLSAgICAidGUiLAotICAgICJ0aCIsCi0gICAgInpoLUNOIiwK
LSAgICAiemgtVFciLAotfTsKLQogdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250
RmFtaWxpZXMoKQogewotICAgIHNldEN1cnNpdmVGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1jdXJzaXZlIiwg
IiIpLmNfc3RyKCkpOwotICAgIHNldEZhbnRhc3lGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1mYW50YXN5Iiwg
IiIpLmNfc3RyKCkpOwotICAgIHNldEZpeGVkRm9udEZhbWlseShCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoIi13ZWJraXQtbW9ub3NwYWNlIiwg
IiIpLmNfc3RyKCkpOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KCItd2Via2l0LXNhbnMtc2Vy
aWYiLCAiIikuY19zdHIoKSk7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1zZXJpZiIs
ICIiKS5jX3N0cigpKTsKLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KCItd2Via2l0LXN0YW5kYXJk
IiwgIiIpLmNfc3RyKCkpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrTGFuZ3VhZ2VzW10gPSB7
CisgICAgICAgICJhciIsCisgICAgICAgICJibiIsCisgICAgICAgICJndSIsCisgICAgICAgICJo
ZSIsCisgICAgICAgICJoaSIsCisgICAgICAgICJqYSIsCisgICAgICAgICJrbiIsCisgICAgICAg
ICJrbyIsCisgICAgICAgICJtbCIsCisgICAgICAgICJwYSIsCisgICAgICAgICJ0YSIsCisgICAg
ICAgICJ0ZSIsCisgICAgICAgICJ0aCIsCisgICAgICAgICJ6aC1DTiIsCisgICAgICAgICJ6aC1U
VyIsCisgICAgfTsKKworICAgIHN0YXRpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKiBs
YW5ndWFnZXNbV1RGX0FSUkFZX0xFTkdUSChrTGFuZ3VhZ2VzKV07CisgICAgc3RhdGljIGJvb2wg
aW5pdCA9IGZhbHNlOworICAgIGlmICghaW5pdCkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoa0xhbmd1YWdlcyk7ICsraSkKKyAgICAgICAgICAgIGxh
bmd1YWdlc1tpXSA9IG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKGtMYW5ndWFnZXNb
aV0pOworICAgICAgICBpbml0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBTVEFUSUNfTE9DQUxfU1RS
SU5HKHNfd2Via2l0Q3Vyc2l2ZSwgIi13ZWJraXQtY3Vyc2l2ZSIpOworICAgIFNUQVRJQ19MT0NB
TF9TVFJJTkcoc193ZWJraXRGYW50YXN5LCAiLXdlYmtpdC1mYW50YXN5Iik7CisgICAgU1RBVElD
X0xPQ0FMX1NUUklORyhzX3dlYmtpdE1vbm9zcGFjZSwgIi13ZWJraXQtbW9ub3NwYWNlIik7Cisg
ICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX3dlYmtpdFNhbnNTZXJpZiwgIi13ZWJraXQtc2Fucy1z
ZXJpZiIpOworICAgIFNUQVRJQ19MT0NBTF9TVFJJTkcoc193ZWJraXRTZXJpZiwgIi13ZWJraXQt
c2VyaWYiKTsKKyAgICBTVEFUSUNfTE9DQUxfU1RSSU5HKHNfd2Via2l0U3RhbmRhcmQsICItd2Vi
a2l0LXN0YW5kYXJkIik7CisKKyAgICBzZXRDdXJzaXZlRm9udEZhbWlseShCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193ZWJraXRDdXJzaXZl
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpKSk7CisgICAgc2V0
RmFudGFzeUZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5j
ZSgpLT5mb250RmFtaWx5KHNfd2Via2l0RmFudGFzeSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZzo6ZW1wdHlTdHJpbmcoKSkpOworICAgIHNldEZpeGVkRm9udEZhbWlseShCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193ZWJraXRNb25v
c3BhY2UsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCkpKTsKKyAg
ICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6
aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3dlYmtpdFNhbnNTZXJpZiwgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSkpOworICAgIHNldFNlcmlmRm9udEZhbWlseShC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193
ZWJraXRTZXJpZiwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSkp
OworICAgIHNldFN0YW5kYXJkRm9udEZhbWlseShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udElu
Zm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoc193ZWJraXRTdGFuZGFyZCwgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSkpOwogCisgICAgU1RBVElDX0xPQ0FMX1NU
UklORyhzX21vbm9zcGFjZSwgIm1vbm9zcGFjZSIpOworICAgIFNUQVRJQ19MT0NBTF9TVFJJTkco
c19zZXJpZiwgInNlcmlmIik7CisgICAgU1RBVElDX0xPQ0FMX1NUUklORyhzX3NhbnNTZXJpZiwg
InNhbnMtc2VyaWYiKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5H
VEgobGFuZ3VhZ2VzKTsgKytpKSB7Ci0gICAgICAgIFVTY3JpcHRDb2RlIHNjcmlwdCA9IGxvY2Fs
ZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obGFuZ3VhZ2VzW2ldKTsKLSAgICAgICAgc2V0
Rml4ZWRGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2Uo
KS0+Zm9udEZhbWlseSgibW9ub3NwYWNlIiwgbGFuZ3VhZ2VzW2ldKS5jX3N0cigpLCBzY3JpcHQp
OwotICAgICAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
b250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgic2Fucy1zZXJpZiIsIGxhbmd1YWdlc1tp
XSkuY19zdHIoKSwgc2NyaXB0KTsKLSAgICAgICAgc2V0U2VyaWZGb250RmFtaWx5KEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgic2VyaWYiLCBs
YW5ndWFnZXNbaV0pLmNfc3RyKCksIHNjcmlwdCk7Ci0gICAgICAgIHNldFN0YW5kYXJkRm9udEZh
bWlseShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1p
bHkoIiIsIGxhbmd1YWdlc1tpXSkuY19zdHIoKSwgc2NyaXB0KTsKKyAgICAgICAgVVNjcmlwdENv
ZGUgc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbigqbGFuZ3VhZ2Vz
W2ldKTsKKyAgICAgICAgc2V0Rml4ZWRGb250RmFtaWx5KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpG
b250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX21vbm9zcGFjZSwgKmxhbmd1YWdlc1tp
XSksIHNjcmlwdCk7CisgICAgICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgpLT5mb250RmFtaWx5KHNfc2Fuc1NlcmlmLCAq
bGFuZ3VhZ2VzW2ldKSwgc2NyaXB0KTsKKyAgICAgICAgc2V0U2VyaWZGb250RmFtaWx5KEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShzX3Nlcmlm
LCAqbGFuZ3VhZ2VzW2ldKSwgc2NyaXB0KTsKKyAgICAgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseShC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpLCAqbGFuZ3VhZ2VzW2ld
KSwgc2NyaXB0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvTG9jYWxpemVkU3RyaW5nc0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvTG9jYWxpemVkU3RyaW5nc0JsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L0xvY2FsaXplZFN0cmluZ3NCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8TG9jYWxlSGFuZGxlci5oPgogI2luY2x1ZGUgPExvY2FsaXplUmVzb3VyY2UuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L01JTUVUeXBlUmVnaXN0cnlCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L01JTUVUeXBlUmVnaXN0cnlCbGFja0JlcnJ5LmNw
cAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJy
eS9NSU1FVHlwZVJlZ2lzdHJ5QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE4
ICszMSwxOSBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1Db21tb25GdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewotICAgIHJldHVybiBTdHJpbmcoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbi5sb3dl
cigpLnV0ZjgoKS5kYXRhKCkpLmNfc3RyKCkpOworICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uLmxvd2VyKCkpOwogfQogCiBT
dHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIHJldHVybiBTdHJpbmcoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKHR5cGUubG93ZXIoKS51dGY4
KCkuZGF0YSgpKS5jX3N0cigpKTsKKyAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06Omdl
dFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKHR5cGUubG93ZXIoKSk7CiB9CiAKIGJvb2wg
TUlNRVR5cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Bhc3RlYm9hcmRC
bGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L1Bhc3RlYm9hcmRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QYXN0ZWJvYXJkQmxhY2tCZXJyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDkgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUNs
aXBib2FyZChDbGlwYm9hcgogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdl
KiBzZWxlY3RlZFJhbmdlLCBib29sLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgc3RkOjpzdHJpbmcg
dGV4dCA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpLmRhdGEoKTsKLSAg
ICBzdGQ6OnN0cmluZyBodG1sID0gY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90
YXRlRm9ySW50ZXJjaGFuZ2UpLnV0ZjgoKS5kYXRhKCk7Ci0gICAgc3RkOjpzdHJpbmcgdXJsID0g
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCk7CisgICAgV1RG
OjpTdHJpbmcgdGV4dCA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgV1RG
OjpTdHJpbmcgaHRtbCA9IGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlKTsKKyAgICBXVEY6OlN0cmluZyB1cmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCkuc3RyaW5nKCk7CiAKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjp3
cml0ZSh0ZXh0LCBodG1sLCB1cmwpOwogfQpAQCAtNzMsMTcgKzczLDE3IEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHMKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwo
S1VSTCBjb25zdCYgdXJsLCBTdHJpbmcgY29uc3QmLCBGcmFtZSopCiB7CiAgICAgQVNTRVJUKCF1
cmwuaXNFbXB0eSgpKTsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjp3cml0
ZVVSTCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkNsaXBib2FyZDo6d3JpdGVVUkwodXJsLnN0cmluZygpKTsKIH0KIAogdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlv
bikKIHsKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjp3cml0ZVBsYWluVGV4
dCh0ZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9h
cmQ6OndyaXRlUGxhaW5UZXh0KHRleHQpOwogfQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5U
ZXh0KEZyYW1lKikKIHsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6Q2xpcGJvYXJkOjpyZWFkUGxhaW5UZXh0KCkuY19zdHIoKSk7CisgICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OnJlYWRQbGFpblRleHQoKTsKIH0KIAog
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50
KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxvd1BsYWlu
VGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCkBAIC05MywxMCArOTMsMTAgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgIC8vIE5vdGU6IFdlIGFyZSBhYmxl
IHRvIGNoZWNrIGlmIHRoZSBmb3JtYXQgZXhpc3RzIHByaW9yIHRvIHJlYWRpbmcgYnV0IHRoZSBj
aGVjayAmIHRoZSBlYXJseSByZXR1cm4KICAgICAvLyBwYXRoIG9mIGdldF9jbGlwYm9hcmRfZGF0
YSBhcmUgdGhlIGV4YWN0IHNhbWUsIHNvIGp1c3QgdXNlIGdldF9jbGlwYm9hcmRfZGF0YSBhbmQg
dmFsaWRhdGUgdGhlCiAgICAgLy8gcmV0dXJuIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgZGF0
YSB3YXMgcHJlc2VudC4KLSAgICBTdHJpbmcgaHRtbCA9IFN0cmluZzo6ZnJvbVVURjgoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZEhUTUwoKS5jX3N0cigpKTsKKyAgICBTdHJp
bmcgaHRtbCA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpDbGlwYm9hcmQ6OnJlYWRIVE1MKCk7CiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIGlmICghaHRtbC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgU3RyaW5nIHVybCA9IFN0cmluZzo6ZnJvbVVURjgoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZFVSTCgpLmNfc3RyKCkpOworICAgICAgICBTdHJp
bmcgdXJsID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZFVSTCgpOwogICAg
ICAgICBpZiAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3Vt
ZW50KCksIGh0bWwsIHVybCwgRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KSkKICAgICAgICAgICAg
IHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQpAQCAtMTA0LDcgKzEwNCw3IEBAIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICBpZiAoIWFsbG93UGxh
aW5UZXh0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nOjpm
cm9tVVRGOChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJvYXJkOjpyZWFkUGxhaW5UZXh0KCku
Y19zdHIoKSk7CisgICAgU3RyaW5nIHRleHQgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpcGJv
YXJkOjpyZWFkUGxhaW5UZXh0KCk7CiAgICAgaWYgKGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChjb250ZXh0LmdldCgpLCB0ZXh0KSkgewogICAgICAgICBjaG9zZVBsYWluVGV4dCA9
IHRydWU7CiAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1JlYWRPbmx5TGF0aW4xU3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9SZWFkT25seUxhdGlu
MVN0cmluZy5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L1JlYWRPbmx5TGF0aW4xU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVm
IFJlYWRPbmx5TGF0aW4xU3RyaW5nX2gKLSNkZWZpbmUgUmVhZE9ubHlMYXRpbjFTdHJpbmdfaAot
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlYWRPbmx5TGF0aW4xU3Ry
aW5nIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSZWFkT25seUxhdGluMVN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAg
ICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKTsKLSAgICAgICAgICAgIG1fY3N0cmlu
ZyA9IHN0cmluZy5sYXRpbjEoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGNoYXIq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc051bGwoKSA/IG1fY3N0cmluZy5kYXRh
KCkgOiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX3N0cmluZy5jaGFyYWN0ZXJzOCgp
KTsgfQotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVs
bCgpID8gbV9jc3RyaW5nLmxlbmd0aCgpIDogbV9zdHJpbmcubGVuZ3RoKCk7IH0KLQotcHJpdmF0
ZToKLSAgICBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgQ1N0cmluZyBtX2NzdHJpbmc7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVy
UHJpdmF0ZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAj
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxGcmFtZUxv
YWRlckNsaWVudEJsYWNrQmVycnkuaD4KICNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8c3RyaW5n
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKQEAgLTY3LDE1ICs2NiwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
cmVnaXN0ZXJNZWRpYUVuCiAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMs
IHN1cHBvcnRzVHlwZSwgMCwgMCwgMCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpn
ZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8V1RGOjpTdHJpbmc+JiB0eXBlcykK
IHsKLSAgICBzZXQ8c3RyaW5nPiBzdXBwb3J0ZWQgPSBQbGF0Zm9ybVBsYXllcjo6YWxsU3VwcG9y
dGVkTWltZVR5cGVzKCk7Ci0gICAgc2V0PHN0cmluZz46Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWQu
YmVnaW4oKTsKKyAgICBzZXQ8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4gc3VwcG9ydGVk
ID0gUGxhdGZvcm1QbGF5ZXI6OmFsbFN1cHBvcnRlZE1pbWVUeXBlcygpOworICAgIHNldDxCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPjo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZC5iZWdpbigp
OwogICAgIGZvciAoOyBpICE9IHN1cHBvcnRlZC5lbmQoKTsgaSsrKQotICAgICAgICB0eXBlcy5h
ZGQoaS0+Y19zdHIoKSk7CisgICAgICAgIHR5cGVzLmFkZCgqaSk7CiB9CiAKLU1lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcywgY29uc3QgS1VSTCYpCitNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFdU
Rjo6U3RyaW5nJiB0eXBlLCBjb25zdCBXVEY6OlN0cmluZyYgY29kZWNzLCBjb25zdCBLVVJMJikK
IHsKICAgICBpZiAodHlwZS5pc051bGwoKSB8fCB0eXBlLmlzRW1wdHkoKSkgewogICAgICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllciBkb2VzIG5vdCBzdXBwb3J0IHR5cGU7IHR5cGUgaXMgbnVs
bCBvciBlbXB0eS4iKTsKQEAgLTk2LDkgKzk1LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
Om5vdGlmeUFwcEFjdGl2YQogICAgIFBsYXRmb3JtUGxheWVyOjpub3RpZnlBcHBBY3RpdmF0ZWRF
dmVudChhY3RpdmF0ZWQpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Q2VydGlm
aWNhdGVQYXRoKGNvbnN0IFN0cmluZyYgY2FQYXRoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnNldENlcnRpZmljYXRlUGF0aChjb25zdCBXVEY6OlN0cmluZyYgY2FQYXRoKQogewotICAgIFBs
YXRmb3JtUGxheWVyOjpzZXRDZXJ0aWZpY2F0ZVBhdGgoc3RyaW5nKGNhUGF0aC51dGY4KCkuZGF0
YSgpKSk7CisgICAgUGxhdGZvcm1QbGF5ZXI6OnNldENlcnRpZmljYXRlUGF0aChjYVBhdGgpOwog
fQogCiBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciog
cGxheWVyKQpAQCAtMTM4LDE0ICsxMzcsMTQgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQ
bGF5ZXJQcml2YXRlKAogICAgIGRlbGV0ZUd1YXJkZWRPYmplY3QobV9wbGF0Zm9ybVBsYXllcik7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgV1RGOjpTdHJpbmcmIHVybCkKIHsK
LSAgICBTdHJpbmcgbW9kaWZpZWRVcmwodXJsKTsKKyAgICBXVEY6OlN0cmluZyBtb2RpZmllZFVy
bCh1cmwpOwogCiAgICAgaWYgKG1vZGlmaWVkVXJsLnN0YXJ0c1dpdGgoImxvY2FsOi8vIikpIHsK
ICAgICAgICAgS1VSTCBrdXJsID0gS1VSTChLVVJMKCksIG1vZGlmaWVkVXJsKTsKICAgICAgICAg
a3VybC5zZXRQcm90b2NvbCgiZmlsZSIpOwotICAgICAgICBTdHJpbmcgdGVtcFBhdGgoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5hcHBsaWNhdGlvbkxvY2FsRGly
ZWN0b3J5KCkuY19zdHIoKSk7CisgICAgICAgIFdURjo6U3RyaW5nIHRlbXBQYXRoKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+YXBwbGljYXRpb25Mb2NhbERpcmVj
dG9yeSgpLmNfc3RyKCkpOwogICAgICAgICB0ZW1wUGF0aC5hcHBlbmQoa3VybC5wYXRoKCkpOwog
ICAgICAgICBrdXJsLnNldFBhdGgodGVtcFBhdGgpOwogICAgICAgICBtb2RpZmllZFVybCA9IGt1
cmwuc3RyaW5nKCk7CkBAIC0xNjUsNyArMTY0LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmxvYWQoY29uc3QgU3RyaQogICAgIG1fcGxhdGZvcm1QbGF5ZXIgPSBQbGF0Zm9ybVBsYXllcjo6
Y3JlYXRlKHRoaXMsIHRhYklkLCBmYWxzZSwgbW9kaWZpZWRVcmwudXRmOCgpLmRhdGEoKSk7CiAj
ZW5kaWYKIAotICAgIFN0cmluZyBjb29raWVQYWlyczsKKyAgICBXVEY6OlN0cmluZyBjb29raWVQ
YWlyczsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCiAgICAgICAgIGNvb2tpZVBhaXJzID0gY29v
a2llTWFuYWdlcigpLmdldENvb2tpZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsLnV0ZjgoKS5k
YXRhKCkpLCBXaXRoSHR0cE9ubHlDb29raWVzKTsKICAgICBpZiAoIWNvb2tpZVBhaXJzLmlzRW1w
dHkoKSAmJiBjb29raWVQYWlycy51dGY4KCkuZGF0YSgpKQpAQCAtNjk2LDcgKzY5NSw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpvbkJ1ZmZlcmluZyhib28KIAogc3RhdGljIFByb3RlY3Rp
b25TcGFjZSBnZW5lcmF0ZVByb3RlY3Rpb25TcGFjZUZyb21NTVJBdXRoQ2hhbGxlbmdlKGNvbnN0
IE1NUkF1dGhDaGFsbGVuZ2UmIGF1dGhDaGFsbGVuZ2UpCiB7Ci0gICAgS1VSTCB1cmwoUGFyc2Vk
VVJMU3RyaW5nLCBTdHJpbmcoYXV0aENoYWxsZW5nZS51cmwoKS5jX3N0cigpKSk7CisgICAgS1VS
TCB1cmwoUGFyc2VkVVJMU3RyaW5nLCBXVEY6OlN0cmluZyhhdXRoQ2hhbGxlbmdlLnVybCgpLmNf
c3RyKCkpKTsKICAgICBBU1NFUlQodXJsLmlzVmFsaWQoKSk7CiAKICAgICByZXR1cm4gUHJvdGVj
dGlvblNwYWNlKHVybC5ob3N0KCksIHVybC5wb3J0KCksCkBAIC03MDcsNyArNzA2LDcgQEAgc3Rh
dGljIFByb3RlY3Rpb25TcGFjZSBnZW5lcmF0ZVByb3RlY3RpbwogCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6b25BdXRoZW50aWNhdGlvbk5lZWRlZChNTVJBdXRoQ2hhbGxlbmdlJiBhdXRoQ2hh
bGxlbmdlKQogewotICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgU3RyaW5nKGF1dGhDaGFs
bGVuZ2UudXJsKCkuY19zdHIoKSkpOworICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgV1RG
OjpTdHJpbmcoYXV0aENoYWxsZW5nZS51cmwoKS5jX3N0cigpKSk7CiAgICAgaWYgKCF1cmwuaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc0MCw3ICs3MzksNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6bm90aWZ5Q2hhbGxlbmdlCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpvbkF1dGhlbnRpY2F0aW9uQWNjZXB0ZWQoY29uc3QgTU1SQXV0aENoYWxsZW5nZSYgYXV0aENo
YWxsZW5nZSkgY29uc3QKIHsKLSAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIFN0cmluZyhh
dXRoQ2hhbGxlbmdlLnVybCgpLmNfc3RyKCkpKTsKKyAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJp
bmcsIFdURjo6U3RyaW5nKGF1dGhDaGFsbGVuZ2UudXJsKCkuY19zdHIoKSkpOwogICAgIGlmICgh
dXJsLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04MDUsOSArODA0LDkgQEAgc3Rh
dGljIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciB0b1dlYk1lZAogICAgIHJldHVybiBXZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3IoZC0+bGFiZWwoKS51dGY4KCkuZGF0YSgpLCBhdWRpb1NvdXJjZXMs
IHZpZGVvU291cmNlcyk7CiB9CiAKLVdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciBNZWRpYVBsYXll
clByaXZhdGU6Omxvb2t1cE1lZGlhU3RyZWFtKGNvbnN0IHN0cmluZyYgdXJsKQorV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9va3VwTWVkaWFTdHJlYW0oY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsKQogewotICAgIE1lZGlhU3RyZWFt
RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IE1lZGlhU3RyZWFtUmVnaXN0cnk6OnJlZ2lzdHJ5KCku
bG9va3VwTWVkaWFTdHJlYW1EZXNjcmlwdG9yKFN0cmluZzo6ZnJvbVVURjgodXJsLmNfc3RyKCkp
KTsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBNZWRpYVN0cmVhbVJl
Z2lzdHJ5OjpyZWdpc3RyeSgpLmxvb2t1cE1lZGlhU3RyZWFtRGVzY3JpcHRvcihXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodXJsLmNfc3RyKCkpKTsKICAgICBpZiAoIWRlc2NyaXB0b3IpCiAgICAgICAg
IHJldHVybiBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0Jl
cnJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDEzMTI0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5
ZXJQcml2YXRlQmxhY2tCZXJyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlh
RW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0
ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
S1VSTCYpOworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8V1RGOjpT
dHJpbmc+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBLVVJMJik7
CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5QXBwQWN0aXZhdGVkRXZlbnQoYm9vbCk7Ci0gICAgc3Rh
dGljIHZvaWQgc2V0Q2VydGlmaWNhdGVQYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2
b2lkIHNldENlcnRpZmljYXRlUGF0aChjb25zdCBXVEY6OlN0cmluZyYpOwogCi0gICAgdmlydHVh
bCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNv
bnN0IFdURjo6U3RyaW5nJiB1cmwpOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvUGxheSgpOwpAQCAtMTQzLDE1ICsxNDMsMTUgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1RhYlZpc2libGUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGludCBzaG93RXJyb3JEaWFsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OlBsYXRmb3JtUGxh
eWVyOjpFcnJvcik7CiAgICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OldpbmRvdyogcGxhdGZvcm1XaW5kb3coKTsKLSAgICB2aXJ0dWFsIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IgbG9va3VwTWVkaWFTdHJlYW0oY29uc3Qgc3Rk
OjpzdHJpbmcmIHVybCk7CisgICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6V2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yIGxvb2t1cE1lZGlhU3RyZWFtKGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcmIHVybCk7CiAKIHByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRl
KE1lZGlhUGxheWVyKik7CiAKICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwotICAgIFN0cmluZyB1
c2VyQWdlbnQoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgV1RGOjpTdHJpbmcgdXNlckFnZW50
KGNvbnN0IFdURjo6U3RyaW5nJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVE
ZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuICJCbGFja0JlcnJ5IjsgfQorICAgIHZpcnR1YWwg
V1RGOjpTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiAiQmxhY2tCZXJy
eSI7IH0KIAogICAgIE1lZGlhUGxheWVyKiBtX3dlYkNvcmVQbGF5ZXI7CiAgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlBsYXRmb3JtUGxheWVyKiBtX3BsYXRmb3JtUGxheWVyOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0ROU0JsYWNrQmVycnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJy
eS9ETlNCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L0ROU0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBAIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0
KQogewogICAgIGlmIChob3N0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpwcmVmZXRjaEROUyhob3N0LmxhdGluMSgpLmRhdGEoKSk7CisgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OnByZWZldGNoRE5TKGhvc3QpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L05ldHdvcmtKb2IuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvTmV0d29ya0pvYi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMCwxNCArMTMwLDEyIEBAIGJvb2wgTmV0d29ya0pvYjo6aW5pdGlhbGl6ZShpbnQgcGxheWVy
SWQKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCBub3RpZnlIZWFkZXJS
ZWNlaXZlZCwgYXMgdGhlIENvbnRlbnQtVHlwZQogICAgIC8vIHdpbGwgdWx0aW1hdGVseSBnZXQg
cGFyc2VkIHdoZW4gc2VuZFJlc3BvbnNlSWZOZWVkZWQgZ2V0cyBjYWxsZWQuCiAgICAgaWYgKCFy
ZXF1ZXN0LmdldE92ZXJyaWRlQ29udGVudFR5cGUoKS5lbXB0eSgpKSB7Ci0gICAgICAgIG1fY29u
dGVudFR5cGUgPSBTdHJpbmcocmVxdWVzdC5nZXRPdmVycmlkZUNvbnRlbnRUeXBlKCkuY19zdHIo
KSk7CisgICAgICAgIG1fY29udGVudFR5cGUgPSBTdHJpbmcocmVxdWVzdC5nZXRPdmVycmlkZUNv
bnRlbnRUeXBlKCkpOwogICAgICAgICBtX2lzT3ZlcnJpZGVDb250ZW50VHlwZSA9IHRydWU7CiAg
ICAgfQogCi0gICAgaWYgKCFyZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkuZW1wdHkoKSkg
ewotICAgICAgICBtX2NvbnRlbnREaXNwb3NpdGlvbiA9ICJmaWxlbmFtZT0iOwotICAgICAgICBt
X2NvbnRlbnREaXNwb3NpdGlvbiArPSByZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkuY19z
dHIoKTsKLSAgICB9CisgICAgaWYgKCFyZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkuZW1w
dHkoKSkKKyAgICAgICAgbV9jb250ZW50RGlzcG9zaXRpb24gPSAiZmlsZW5hbWU9IiArIFN0cmlu
ZyhyZXF1ZXN0LmdldFN1Z2dlc3RlZFNhdmVOYW1lKCkpOwogCiAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZpbHRlclN0cmVhbSogd3JhcHBlZFN0cmVhbSA9IG1fc3RyZWFtRmFjdG9yeS0+Y3Jl
YXRlTmV0d29ya1N0cmVhbShyZXF1ZXN0LCBtX3BsYXllcklkKTsKICAgICBpZiAoIXdyYXBwZWRT
dHJlYW0pCkBAIC0xNzUsNyArMTczLDcgQEAgdm9pZCBOZXR3b3JrSm9iOjp1cGRhdGVEZWZlckxv
YWRpbmdDb3VudAogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlTdGF0dXNSZWNl
aXZlZChpbnQgc3RhdHVzLCBjb25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBOZXR3b3JrSm9iOjpu
b3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiBtZXNzYWdlKQogewogICAgIGlmIChzaG91bGREZWZlckxvYWRpbmcoKSkKICAg
ICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJPcGVuKHN0YXR1cywgbWVzc2FnZSk7CkBAIC0yMTQs
OSArMjEyLDkgQEAgdm9pZCBOZXR3b3JrSm9iOjpub3RpZnlIZWFkZXJzUmVjZWl2ZWQoQgogICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6SGVhZGVyTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kSXQgPSBoZWFkZXJzLmVuZCgpOwogICAgIGZvciAoQmxhY2tCZXJyeTo6UGxh
dGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhl
YWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kSXQ7ICsraXQpIHsKICAgICAgICAgaWYgKHNob3VsZERl
ZmVyTG9hZGluZygpKQotICAgICAgICAgICAgbV9kZWZlcnJlZERhdGEuZGVmZXJIZWFkZXJSZWNl
aXZlZChpdC0+Zmlyc3QuY19zdHIoKSwgaXQtPnNlY29uZC5jX3N0cigpKTsKKyAgICAgICAgICAg
IG1fZGVmZXJyZWREYXRhLmRlZmVySGVhZGVyUmVjZWl2ZWQoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5U3RyaW5nKGl0LT5maXJz
dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFN0cmluZyBrZXlTdHJpbmcoaXQtPmZpcnN0KTsKICAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKICAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShrZXlTdHJpbmcsICJMb2NhdGlvbiIpKSB7CiAgICAgICAgICAgICAgICAgLy8gTG9j
YXRpb24sIGxpa2UgYWxsIGhlYWRlcnMsIGlzIHN1cHBvc2VkIHRvIGJlIExhdGluLTEuIEJ1dCBz
b21lIHNpdGVzICh3aWtpcGVkaWEpIHNlbmQgaXQgaW4gVVRGLTguCkBAIC0yMjcsMTEgKzIyNSwx
MSBAQCB2b2lkIE5ldHdvcmtKb2I6Om5vdGlmeUhlYWRlcnNSZWNlaXZlZChCCiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IG1heWJlIHdlIHNob3VsZCBkbyB0aGlzIHdpdGggb3RoZXIgaGVhZGVy
cz8KICAgICAgICAgICAgICAgICAvLyBTa2lwIGl0IGZvciBub3cgLSB3ZSBkb24ndCB3YW50IHRv
IHJld3JpdGUgcmFuZG9tIGJ5dGVzIHVubGVzcyB3ZSdyZSBzdXJlLiAoRGVmaW5pdGVseSBkb24n
dCB3YW50IHRvCiAgICAgICAgICAgICAgICAgLy8gcmV3cml0ZSBjb29raWVzLCBmb3IgaW5zdGFu
Y2UuKSBOZWVkcyBtb3JlIGludmVzdGlnYXRpb24uCi0gICAgICAgICAgICAgICAgdmFsdWVTdHJp
bmcgPSBTdHJpbmc6OmZyb21VVEY4KGl0LT5zZWNvbmQuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgdmFsdWVTdHJpbmcgPSBpdC0+c2Vjb25kOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZVN0
cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBpdC0+c2Vj
b25kLmNfc3RyKCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQtPnNlY29u
ZDsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQt
PnNlY29uZC5jX3N0cigpOworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gaXQtPnNlY29u
ZDsKIAogICAgICAgICAgICAgaGFuZGxlTm90aWZ5SGVhZGVyUmVjZWl2ZWQoa2V5U3RyaW5nLCB2
YWx1ZVN0cmluZyk7CiAgICAgICAgIH0KQEAgLTQ5OCw3ICs0OTYsNyBAQCB2b2lkIE5ldHdvcmtK
b2I6OmhhbmRsZU5vdGlmeUNsb3NlKGludCBzCiAgICAgaWYgKCFtX2NhbmNlbGxlZCkgewogICAg
ICAgICBpZiAoIW1fc3RhdHVzUmVjZWl2ZWQpIHsKICAgICAgICAgICAgIC8vIENvbm5lY3Rpb24g
ZmFpbGVkIGJlZm9yZSBzZW5kaW5nIG5vdGlmeVN0YXR1c1JlY2VpdmVkOiB1c2UgZ2VuZXJpYyBO
ZXR3b3JrRXJyb3IuCi0gICAgICAgICAgICBub3RpZnlTdGF0dXNSZWNlaXZlZChCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtOjpTdGF0dXNOZXR3b3JrRXJyb3IsIDApOworICAgICAg
ICAgICAgbm90aWZ5U3RhdHVzUmVjZWl2ZWQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZpbHRlclN0
cmVhbTo6U3RhdHVzTmV0d29ya0Vycm9yLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjpl
bXB0eVN0cmluZygpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzaG91bGRSZWxlYXNlQ2xp
ZW50UmVzb3VyY2UoKSkgewpAQCAtNzUyLDcgKzc1MCw3IEBAIGJvb2wgTmV0d29ya0pvYjo6c2Vu
ZFJlcXVlc3RXaXRoQ3JlZGVudGkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcHJveHlBZGRy
ZXNzLmFwcGVuZCgiaHR0cHM6Ly8iKTsKIAotICAgICAgICBwcm94eUFkZHJlc3MuYXBwZW5kKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+cHJveHlBZGRyZXNzKG5l
d1VSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkuY19zdHIoKSk7CisgICAgICAgIHByb3h5QWRk
cmVzcy5hcHBlbmQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5w
cm94eUFkZHJlc3MobmV3VVJMLnN0cmluZygpKSk7CiAgICAgICAgIEtVUkwgcHJveHlVUkwoS1VS
TCgpLCBwcm94eUFkZHJlc3MudG9TdHJpbmcoKSk7CiAgICAgICAgIGhvc3QgPSBwcm94eVVSTC5o
b3N0KCk7CiAgICAgICAgIHBvcnQgPSBwcm94eVVSTC5wb3J0KCk7CkBAIC03ODcsOCArNzg1LDgg
QEAgYm9vbCBOZXR3b3JrSm9iOjpzZW5kUmVxdWVzdFdpdGhDcmVkZW50aQogICAgICAgICBTdHJp
bmcgcGFzc3dvcmQ7CiAKICAgICAgICAgaWYgKHR5cGUgPT0gUHJvdGVjdGlvblNwYWNlUHJveHlI
VFRQIHx8IHR5cGUgPT0gUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUykgewotICAgICAgICAgICAg
dXNlcm5hbWUgPSBTdHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5j
ZSgpLT5wcm94eVVzZXJuYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBwYXNzd29yZCA9IFN0
cmluZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPnByb3h5UGFz
c3dvcmQoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHVzZXJuYW1lID0gU3RyaW5nKEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+cHJveHlVc2VybmFtZSgpKTsKKyAg
ICAgICAgICAgIHBhc3N3b3JkID0gU3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5n
czo6aW5zdGFuY2UoKS0+cHJveHlQYXNzd29yZCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHVzZXJuYW1lID0gbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fdXNlcjsKICAgICAg
ICAgICAgIHBhc3N3b3JkID0gbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcGFzczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9OZXR3b3JrSm9iLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L05ldHdvcmtKb2IuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtKb2IuaAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCBwdWJsaWM6CiAgICAgaW50IGNhbmNlbEpvYigpOwogICAgIGJvb2wgaXNEZWZl
cnJpbmdMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlckxvYWRpbmdDb3VudCA+IDA7IH0K
ICAgICB2b2lkIHVwZGF0ZURlZmVyTG9hZGluZ0NvdW50KGludCBkZWx0YSk7Ci0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBj
b25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtZXNzYWdlKTsKICAgICB2b2lkIGhh
bmRsZU5vdGlmeVN0YXR1c1JlY2VpdmVkKGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUhlYWRlcnNSZWNlaXZlZChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkhlYWRlckxpc3QmIGhlYWRlcnMpOwogICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlNdWx0aXBhcnRIZWFkZXJSZWNlaXZlZChjb25zdCBjaGFyKiBrZXksIGNv
bnN0IGNoYXIqIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9OZXR3b3JrTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L05ldHdvcmtNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L05ldHdvcmtNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtK
b2IuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVhZE9ubHlMYXRpbjFTdHJpbmcu
aCIKICNpZiBFTkFCTEUoQkxBQ0tCRVJSWV9DUkVERU5USUFMX1BFUlNJU1QpCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNlbmRpZgpAQCAtODcsMTIgKzg2LDEwIEBAIGJvb2wg
TmV0d29ya01hbmFnZXI6OnN0YXJ0Sm9iKGludCBwbGF5ZXIKIAogICAgIGNvbnN0IFN0cmluZyYg
ZG9jdW1lbnRVcmwgPSBmcmFtZS5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKICAgICBpZiAo
IWRvY3VtZW50VXJsLmlzRW1wdHkoKSkgewotICAgICAgICBSZWFkT25seUxhdGluMVN0cmluZyBy
ZWZlcnJlcihkb2N1bWVudFVybCk7Ci0gICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRSZWZlcnJl
cihyZWZlcnJlci5kYXRhKCksIHJlZmVycmVyLmxlbmd0aCgpKTsKKyAgICAgICAgcGxhdGZvcm1S
ZXF1ZXN0LnNldFJlZmVycmVyKGRvY3VtZW50VXJsKTsKICAgICB9CiAKLSAgICBSZWFkT25seUxh
dGluMVN0cmluZyBzZWN1cml0eU9yaWdpbihmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT50b1Jhd1N0cmluZygpKTsKLSAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0U2VjdXJpdHlPcmln
aW4oc2VjdXJpdHlPcmlnaW4uZGF0YSgpLCBzZWN1cml0eU9yaWdpbi5sZW5ndGgoKSk7CisgICAg
cGxhdGZvcm1SZXF1ZXN0LnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCktPnRvUmF3U3RyaW5nKCkpOwogCiAgICAgLy8gQXR0YWNoIGFueSBhcHBsaWNh
YmxlIGF1dGggY3JlZGVudGlhbHMgdG8gdGhlIE5ldHdvcmtSZXF1ZXN0LgogICAgIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UgPSBndWFyZEpvYi0+Z2V0SW50ZXJuYWwoKS0+bV9j
dXJyZW50V2ViQ2hhbGxlbmdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVl
c3RCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlICJCbG9iUmVnaXN0cnlJ
bXBsLmgiCiAjaW5jbHVkZSAiQ29va2llTWFuYWdlci5oIgotI2luY2x1ZGUgIlJlYWRPbmx5TGF0
aW4xU3RyaW5nLmgiCiAjaW5jbHVkZSA8bmV0d29yay9OZXR3b3JrUmVxdWVzdC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMTQ4
LDE2ICsxNDcsMTQgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmluaXRpYWxpemVQbGF0Zm9ybQog
ICAgIGlmIChpc0luaXRpYWwpCiAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRSZXF1ZXN0SW5p
dGlhbCh0aW1lb3V0SW50ZXJ2YWwoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlYWRPbmx5TGF0
aW4xU3RyaW5nIGxhdGluMVVSTCh1cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIFJlYWRPbmx5TGF0
aW4xU3RyaW5nIGxhdGluMUh0dHBNZXRob2QoaHR0cE1ldGhvZCgpKTsKLSAgICAgICAgcGxhdGZv
cm1SZXF1ZXN0LnNldFJlcXVlc3RVcmwobGF0aW4xVVJMLmRhdGEoKSwgbGF0aW4xVVJMLmxlbmd0
aCgpLAotICAgICAgICAgICAgICAgIGxhdGluMUh0dHBNZXRob2QuZGF0YSgpLCBsYXRpbjFIdHRw
TWV0aG9kLmxlbmd0aCgpLAorICAgICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0UmVxdWVzdFVybCh1
cmwoKS5zdHJpbmcoKSwKKyAgICAgICAgICAgIGh0dHBNZXRob2QoKSwKICAgICAgICAgICAgICAg
ICBwbGF0Zm9ybUNhY2hlUG9saWN5Rm9yUmVxdWVzdCgqdGhpcyksCiAgICAgICAgICAgICAgICAg
cGxhdGZvcm1UYXJnZXRUeXBlRm9yUmVxdWVzdCgqdGhpcyksCiAgICAgICAgICAgICAgICAgdGlt
ZW91dEludGVydmFsKCkpOwogCiAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRDb25kaXRpb25h
bChpc0NvbmRpdGlvbmFsKCkpOwotICAgICAgICBwbGF0Zm9ybVJlcXVlc3Quc2V0U3VnZ2VzdGVk
U2F2ZU5hbWUoc3VnZ2VzdGVkU2F2ZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcGxh
dGZvcm1SZXF1ZXN0LnNldFN1Z2dlc3RlZFNhdmVOYW1lKHN1Z2dlc3RlZFNhdmVOYW1lKCkpOwog
CiAgICAgICAgIGlmIChodHRwQm9keSgpICYmICFodHRwQm9keSgpLT5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+JiBlbGVtZW50cyA9IGh0dHBC
b2R5KCktPmVsZW1lbnRzKCk7CkBAIC0yMTAsOSArMjA3LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVl
c3Q6OmluaXRpYWxpemVQbGF0Zm9ybQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgUmVhZE9ubHlMYXRpbjFTdHJpbmcgbGF0aW4xS2V5KGtleSk7Ci0gICAgICAgICAgICAgICAg
UmVhZE9ubHlMYXRpbjFTdHJpbmcgbGF0aW4xVmFsdWUodmFsdWUpOwotICAgICAgICAgICAgICAg
IHBsYXRmb3JtUmVxdWVzdC5hZGRIZWFkZXIobGF0aW4xS2V5LmRhdGEoKSwgbGF0aW4xS2V5Lmxl
bmd0aCgpLCBsYXRpbjFWYWx1ZS5kYXRhKCksIGxhdGluMVZhbHVlLmxlbmd0aCgpKTsKKyAgICAg
ICAgICAgICAgICBwbGF0Zm9ybVJlcXVlc3QuYWRkSGVhZGVyKGtleSwgdmFsdWUpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1IYW5kbGVCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3Ry
ZWFtSGFuZGxlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1IYW5kbGVCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlQ2xpZW50QmxhY2tCZXJyeS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91
cC5oIgotI2luY2x1ZGUgIlJlYWRPbmx5TGF0aW4xU3RyaW5nLmgiCiAjaW5jbHVkZSAiU29ja2V0
U3RyZWFtRXJyb3IuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKIApA
QCAtNjgsOCArNjcsNyBAQCBTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShj
CiAKICAgICAvLyBPcGVuIHRoZSBzb2NrZXQKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0
d29ya1JlcXVlc3QgcmVxdWVzdDsKLSAgICBSZWFkT25seUxhdGluMVN0cmluZyBsYXRpbjFVUkwo
dXJsLnN0cmluZygpKTsKLSAgICByZXF1ZXN0LnNldFJlcXVlc3RVcmwobGF0aW4xVVJMLmRhdGEo
KSwgbGF0aW4xVVJMLmxlbmd0aCgpLCAiQ09OTkVDVCIsIDcpOworICAgIHJlcXVlc3Quc2V0UmVx
dWVzdFVybCh1cmwuc3RyaW5nKCksICJDT05ORUNUIik7CiAgICAgbV9zb2NrZXRTdHJlYW0gPSBh
ZG9wdFB0cihmYWN0b3J5LT5jcmVhdGVOZXR3b3JrU3RyZWFtKHJlcXVlc3QsIHBsYXllcklkKSk7
CiAgICAgQVNTRVJUKG1fc29ja2V0U3RyZWFtKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9ibGFja2JlcnJ5L1N0cmluZ0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYmxhY2tiZXJyeS9TdHJpbmdCbGFja0JlcnJ5
LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9i
bGFja2JlcnJ5L1N0cmluZ0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNywyMyAr
MTcsMjcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAotdXNpbmcgQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJTdHJpbmc7CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgV1RGIHsKIAotU3RyaW5nOjpTdHJpbmcoY29uc3QgV2ViU3RyaW5nJiB3
ZWJTdHJpbmcpCi0gICAgOiBtX2ltcGwod2ViU3RyaW5nLmltcGwoKSkKK1N0cmluZzo6U3RyaW5n
KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHdlYlN0cmluZykKIHsKKyAgICAq
dGhpcyA9IFN0cmluZzo6ZnJvbVVURjgod2ViU3RyaW5nLmRhdGEoKSwgd2ViU3RyaW5nLmxlbmd0
aCgpKTsKIH0KIAotU3RyaW5nOjpvcGVyYXRvciBXZWJTdHJpbmcoKSBjb25zdAorU3RyaW5nOjpv
cGVyYXRvciBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKCkgY29uc3QKIHsKLSAgICBXZWJT
dHJpbmcgd2ViU3RyaW5nKG1faW1wbC5nZXQoKSk7Ci0gICAgcmV0dXJuIHdlYlN0cmluZzsKKyAg
ICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZzo6ZW1wdHlTdHJpbmcoKTsKKworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJu
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oY2hhcmFjdGVyczgoKSksIGxlbmd0aCgpKTsKKworICAgIHJldHVybiBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYmxhY2tiZXJyeS9U
ZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1RleHRCcmVha0l0ZXJhdG9y
SW50ZXJuYWxJQ1VCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9ibGFja2JlcnJ5L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJ
Q1VCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNiArMTksNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIK
IAorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPExvY2Fs
ZUhhbmRsZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEzMTI1NykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTItMTAtMTMgIEdlb3JnZSBTdGFpa29zICA8c3RhaWtvc0B3ZWJraXQu
b3JnPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBBZGFwdCB0byBQbGF0Zm9ybSBBUEkgY2hhbmdl
cyBpbiBzdHJpbmcgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk5MjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ29udmVydCB1c2FnZSBvZiBXZWJTdHJpbmcsIGNoYXIqIGFuZCBzdGQ6OnN0
cmluZyB0byBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nLgorCisgICAgICAgICogUGxhdGZv
cm1CbGFja0JlcnJ5LmNtYWtlOgorCiAyMDEyLTEwLTEzICBKYWtvYiBQZXRzb3ZpdHMgIDxqcGV0
c292aXRzQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEZldGNoIGJsaXQgcmVjdHMg
ZnJvbSBhIHZpZXdwb3J0IGFjY2Vzc29yCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tC
ZXJyeS5jbWFrZQkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybUJs
YWNrQmVycnkuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDYgQEAgTElTVChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKICAgICBibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvci5j
cHAKICAgICBibGFja2JlcnJ5L0FwaS9XZWJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwCiAgICAg
YmxhY2tiZXJyeS9BcGkvV2ViU2V0dGluZ3MuY3BwCi0gICAgYmxhY2tiZXJyeS9BcGkvV2ViU3Ry
aW5nLmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYlZpZXdwb3J0QXJndW1lbnRzLmNwcAogICAg
IGJsYWNrYmVycnkvQXBpL0phdmFTY3JpcHRWYXJpYW50LmNwcAogICAgIGJsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvQXV0b2ZpbGxNYW5hZ2VyLmNwcApJbmRleDogU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxMzEyNTcpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjI4IEBACisyMDEyLTEwLTEzICBH
ZW9yZ2UgU3RhaWtvcyAgPHN0YWlrb3NAd2Via2l0Lm9yZz4KKworICAgICAgICBbQmxhY2tCZXJy
eV0gQWRhcHQgdG8gUGxhdGZvcm0gQVBJIGNoYW5nZXMgaW4gc3RyaW5nIGhhbmRsaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTI0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnZlcnQgdXNhZ2Ug
b2YgV2ViU3RyaW5nLCBjaGFyKiBhbmQgc3RkOjpzdHJpbmcgdG8gQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZy4KKworICAgICAgICAqIEFwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcDoKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6Y2xlYXJBcHBDYWNoZSk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OmNsZWFyRGF0YWJhc2UpOgorICAgICAgICAqIEFwaS9CbGFja0JlcnJ5R2xv
YmFsLmg6CisgICAgICAgIChQbGF0Zm9ybSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAq
IEFwaS9KYXZhU2NyaXB0VmFyaWFudC5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OkpTVmFsdWVSZWZUb0JsYWNrQmVycnlKYXZhU2NyaXB0VmFyaWFudCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkJsYWNrQmVycnlKYXZhU2NyaXB0VmFyaWFudFRvSlNWYWx1ZVJlZik6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkphdmFTY3JpcHRWYXJpYW50OjpKYXZhU2Ny
aXB0VmFyaWFudCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpKYXZhU2NyaXB0VmFyaWFudDo6fkphdmFTY3JpcHRWYXJpYW50KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6SmF2YVNjcmlwdFZhcmlhbnQ6OnNldFR5cGUpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpKYXZhU2NyaXB0VmFyaWFudDo6c2V0U3RyaW5nKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SmF2YVNjcmlwdFZhcmlhbnQ6OnN0cmluZ1ZhbHVlKToK
KyAgICAgICAgKiBBcGkvSmF2YVNjcmlwdFZhcmlhbnQuaDoKKyAgICAgICAgKiBBcGkvV2ViQW5p
bWF0aW9uLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5pbWF0aW9uOjpm
YWRlQW5pbWF0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViQW5pbWF0aW9u
OjpuYW1lKToKKyAgICAgICAgKiBBcGkvV2ViQW5pbWF0aW9uLmg6CisgICAgICAgICogQXBpL1dl
YkNvb2tpZUphci5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYkNvb2tpZUphcjo6
c2V0Q29va2llcyk6CisgICAgICAgICogQXBpL1dlYkNvb2tpZUphci5oOgorICAgICAgICAoUGxh
dGZvcm0pOgorICAgICAgICAoQmxhY2tCZXJyeSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAqIEFwaS9XZWJLaXRNSU1FVHlwZUNvbnZlcnRlci5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OmdldEV4dGVuc2lvbkZvck1pbWVUeXBlKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6Z2V0TWltZVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAgICAqIEFwaS9XZWJLaXRN
SU1FVHlwZUNvbnZlcnRlci5oOgorICAgICAgICAoUGxhdGZvcm0pOgorICAgICAgICAoQmxhY2tC
ZXJyeSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIEFwaS9XZWJLaXRUZXh0Q29kZWMu
Y3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpiYXNlNjREZWNvZGUpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0Ojp1bmVzY2FwZVVSTCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmVz
Y2FwZVVSTCk6CisgICAgICAgICogQXBpL1dlYktpdFRleHRDb2RlYy5oOgorICAgICAgICAoUGxh
dGZvcm0pOgorICAgICAgICAoQmxhY2tCZXJyeSk6CisgICAgICAgICogQXBpL1dlYk92ZXJsYXku
Y3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5OjpyZW1vdmVBbmlt
YXRpb24pOgorICAgICAgICAqIEFwaS9XZWJPdmVybGF5Lmg6CisgICAgICAgIChQbGF0Zm9ybSk6
CisgICAgICAgIChCbGFja0JlcnJ5KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogQXBp
L1dlYk92ZXJsYXlPdmVycmlkZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
Yk92ZXJsYXlPdmVycmlkZTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKiBBcGkvV2ViT3Zl
cmxheU92ZXJyaWRlLmg6CisgICAgICAgIChQbGF0Zm9ybSk6CisgICAgICAgIChCbGFja0JlcnJ5
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogQXBpL1dlYlBhZ2UuY3BwOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjphdXRvZmlsbFRleHRGaWVsZCk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OnJlbmRlclRyZWVBc1RleHQpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OmluaXQpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6bG9hZCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2U6OmxvYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlOjpsb2FkRmlsZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6
OmRvd25sb2FkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6
OmxvYWRTdHJpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpsb2Fk
U3RyaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OmV4
ZWN1dGVKYXZhU2NyaXB0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6
ZXhlY3V0ZUphdmFTY3JpcHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
UHJpdmF0ZTo6ZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OmV4ZWN1dGVKYXZhU2Ny
aXB0RnVuY3Rpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0
ZTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJQYWdlOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpyZW1vdmVPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OnJl
bW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OnN5bmNQcm94eUNyZWRlbnRpYWwp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6bm90aWZ5UG9w
dXBBdXRvZmlsbERpYWxvZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQ
cml2YXRlOjp3ZWJDb250ZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFn
ZTo6c2V0RGF0ZVRpbWVJbnB1dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBh
Z2U6OnNldENvbG9ySW5wdXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
Ojp0ZXh0RW5jb2RpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpm
b3JjZWRUZXh0RW5jb2RpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
OjpzZXRGb3JjZWRUZXh0RW5jb2RpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlOjp0aXRsZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OnNl
bGVjdGVkVGV4dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OmN1dFNl
bGVjdGVkVGV4dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6Omluc2Vy
dFRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpnZXRCYWNrRm9y
d2FyZExpc3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpvbkNlcnRp
ZmljYXRlU3RvcmVMb2NhdGlvblNldCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2U6OmRpc3BhdGNoSW5zcGVjdG9yTWVzc2FnZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpkaWRDaGFuZ2VTZXR0aW5ncyk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OnRleHRIYXNBdHRyaWJ1dGUpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpzZXRBbGxvd05vdGlmaWNhdGlvbik6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpkZWZhdWx0VXNlckFnZW50KToK
KyAgICAgICAgKiBBcGkvV2ViUGFnZS5oOgorICAgICAgICAqIEFwaS9XZWJQYWdlQ2xpZW50Lmg6
CisgICAgICAgICogQXBpL1dlYlBhZ2VfcC5oOgorICAgICAgICAoV2ViUGFnZVByaXZhdGUpOgor
ICAgICAgICAqIEFwaS9XZWJTZXR0aW5ncy5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlNldHRpbmdzOjpzdGFuZGFyZFNldHRpbmdzKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViU2V0dGluZ3M6OmFkZFN1cHBvcnRlZE9iamVjdFBsdWdpbk1JTUVUeXBlKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OmlzU3VwcG9ydGVkT2Jq
ZWN0TUlNRVR5cGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6
c2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGlu
Z3M6OnNldFNlcmlmRm9udEZhbWlseSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViU2V0dGluZ3M6OnNhbnNTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNldHRpbmdzOjpzdGFuZGFyZEZvbnRGYW1p
bHkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6c2V0U3RhbmRh
cmRGb250RmFtaWx5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6
OnVzZXJBZ2VudFN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNldHRp
bmdzOjpzZXRVc2VyQWdlbnRTdHJpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJTZXR0aW5nczo6ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6dXNlclN0eWxlU2hlZXRTdHJp
bmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6c2V0VXNlclN0
eWxlU2hlZXRTdHJpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5n
czo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYlNldHRpbmdzOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OmxvY2FsU3RvcmFnZVBhdGgpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5nczo6c2V0TG9jYWxTdG9yYWdlUGF0aCk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNldHRpbmdzOjppbmRleGVkRGF0YUJhc2VQ
YXRoKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGluZ3M6OnNldEluZGV4
ZWREYXRhQmFzZVBhdGgpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTZXR0aW5n
czo6ZGF0YWJhc2VQYXRoKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU2V0dGlu
Z3M6OnNldERhdGFiYXNlUGF0aCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlNl
dHRpbmdzOjphcHBDYWNoZVBhdGgpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJT
ZXR0aW5nczo6c2V0QXBwQ2FjaGVQYXRoKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViU2V0dGluZ3M6OnBhZ2VHcm91cE5hbWUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJTZXR0aW5nczo6c2V0UGFnZUdyb3VwTmFtZSk6CisgICAgICAgICogQXBpL1dlYlNldHRp
bmdzLmg6CisgICAgICAgICogQXBpL1dlYlN0cmluZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
QXBpL1dlYlN0cmluZy5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Qmxh
Y2tCZXJyeTo6cnVuSmF2YVNjcmlwdFByb21wdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRCbGFja0JlcnJ5OjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21l
Q2xpZW50QmxhY2tCZXJyeTo6cnVuT3BlblBhbmVsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuaDoKKyAgICAgICAg
KENocm9tZUNsaWVudEJsYWNrQmVycnkpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NsaWVu
dEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChjbGllbnRFeHRlbnNpb25NZXRob2QpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0NvbG9yUGlja2VyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yUGlja2VyQ2xpZW50OjpDb2xvclBpY2tlckNsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvclBpY2tlckNsaWVudDo6Z2VuZXJhdGVIVE1MKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9Db2xvclBpY2tlckNsaWVudC5oOgorICAgICAgICAoUGxhdGZvcm0pOgorICAgICAg
ICAoQmxhY2tCZXJyeSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29sb3JQaWNrZXJD
bGllbnQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NyZWRlbnRpYWxNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyZWRlbnRpYWxNYW5hZ2VyOjphdXRvZmlsbEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DcmVkZW50aWFsTWFuYWdl
ci5oOgorICAgICAgICAoUGxhdGZvcm0pOgorICAgICAgICAoQ3JlZGVudGlhbE1hbmFnZXIpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RhdGVQaWNrZXJDbGllbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0ZVBpY2tlckNsaWVudDo6RGF0ZVBpY2tlckNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRlUGlja2VyQ2xpZW50OjpnZW5lcmF0ZUhUTUwpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0RhdGVQaWNrZXJDbGllbnQuaDoKKyAgICAgICAgKFBsYXRmb3JtKToKKyAgICAg
ICAgKEJsYWNrQmVycnkpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKERhdGVQaWNrZXJD
bGllbnQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tC
ZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6
OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVEb2N1bWVudExvYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoRGlkRmluaXNo
TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRp
c3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoQ3JlYXRlUGFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6bG9hZElj
b25FeHRlcm5hbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tC
ZXJyeTo6c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnk6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24pOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ljb25EYXRhYmFzZUNsaWVudEJsYWNrQmVycnkuY3BwOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6Tm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6b25QZXJtaXNzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhdGlvbkNsaWNrZWQp
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaDoK
KyAgICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwp
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdFBvcHVwQ2xpZW50OjpTZWxlY3RQb3B1cENsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RQb3B1cENsaWVudDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdFBvcHVwQ2xpZW50OjpnZW5lcmF0ZUhUTUwpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50Lmg6CisgICAgICAgIChQbGF0Zm9ybSk6CisgICAgICAg
IChCbGFja0JlcnJ5KToKKyAgICAgICAgKFNlbGVjdFBvcHVwQ2xpZW50KToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9Vc2VyTWVkaWFDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvTWVkaWFTdHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9NZWRpYVN0cmVhbURl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhQ2xpZW50SW1wbDo6cmVxdWVz
dFVzZXJNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFDbGllbnRJbXBsOjpjYW5j
ZWxVc2VyTWVkaWFSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Fib3V0RGF0YS5j
cHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNhY2hlUGFnZSk6CisgICAgICAgICog
V2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0Ojpjb252ZXJ0U3RyaW5nVG9XY2hhcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OmNvbnZlcnRTdHJpbmdUb1djaGFyVmVjdG9yKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6Y29udmVydFNwYW5uYWJsZVN0cmluZ1RvU3RyaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6SW5wdXRIYW5kbGVyOjpsZWFyblRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpJbnB1dEhhbmRsZXI6OnNwZWxsQ2hlY2tpbmdSZXF1ZXN0UHJvY2Vzc2VkKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5wdXRIYW5kbGVyOjpvcGVuRGF0ZVBvcHVwKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5wdXRIYW5kbGVyOjpvcGVuU2VsZWN0UG9w
dXApOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OnNldFRleHQp
OgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvU2VsZWN0aW9uSGFuZGxlci5jcHA6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OlNlbGVjdGlvbkhhbmRsZXI6OnNlbGVjdGVkVGV4dCk6Cisg
ICAgICAgICogV2ViS2l0U3VwcG9ydC9TZWxlY3Rpb25IYW5kbGVyLmg6CisgICAgICAgIChQbGF0
Zm9ybSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU2VsZWN0aW9uSGFuZGxlcik6Cisg
ICAgICAgICogV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OlN1cmZhY2VQb29sOjpzaGFyZWRQaXhtYXBHcm91cCk6CisgICAgICAgICog
V2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5oOgorICAgICAgICAoU3VyZmFjZVBvb2wpOgorCiAy
MDEyLTEwLTEzICBKYWtvYiBQZXRzb3ZpdHMgIDxqcGV0c292aXRzQHJpbS5jb20+CiAKICAgICAg
ICAgW0JsYWNrQmVycnldIEZldGNoIGJsaXQgcmVjdHMgZnJvbSBhIHZpZXdwb3J0IGFjY2Vzc29y
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JsYWNrQmVycnlHbG9iYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUds
b2JhbC5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBA
QAogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1
ZGUgIlRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCiAjaW5jbHVkZSAiYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAicnVu
dGltZS9KU0xvY2suaCIKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1FeGVjdXRhYmxlTWVz
c2FnZS5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1lc3NhZ2VDbGllbnQuaD4KICNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgorI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMTM1LDEyICsxMzUsMTIgQEAgdm9pZCBjbGVhck1lbW9y
eUNhY2hlcygpCiAgICAgZm9udENhY2hlKCktPmludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBjbGVh
ckFwcENhY2hlKGNvbnN0IFdlYlN0cmluZyYgcGFnZUdyb3VwTmFtZSkKK3ZvaWQgY2xlYXJBcHBD
YWNoZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYWdlR3JvdXBOYW1lKQog
ewogICAgIGNhY2hlU3RvcmFnZSgpLmVtcHR5KCk7CiB9CiAKLXZvaWQgY2xlYXJEYXRhYmFzZShj
b25zdCBXZWJTdHJpbmcmIHBhZ2VHcm91cE5hbWUpCit2b2lkIGNsZWFyRGF0YWJhc2UoY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGFnZUdyb3VwTmFtZSkKIHsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmgJ
KHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tC
ZXJyeUdsb2JhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxOCArMjYsMjAgQEAKICNlbmRpZgog
CiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBQ
bGF0Zm9ybSB7CitjbGFzcyBTdHJpbmc7Cit9CiAKLWNsYXNzIFdlYlN0cmluZzsKK25hbWVzcGFj
ZSBXZWJLaXQgewogCiBCTEFDS0JFUlJZX0VYUE9SVCB2b2lkIGdsb2JhbEluaXRpYWxpemUoKTsK
IHZvaWQgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CiB2b2lkIGNsZWFyQ29va2llQ2Fj
aGUoKTsKIEJMQUNLQkVSUllfRVhQT1JUIHZvaWQgY2xlYXJNZW1vcnlDYWNoZXMoKTsKLXZvaWQg
Y2xlYXJBcHBDYWNoZShjb25zdCBXZWJTdHJpbmcmIHBhZ2VHcm91cE5hbWUpOwordm9pZCBjbGVh
ckFwcENhY2hlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHBhZ2VHcm91cE5h
bWUpOwogdm9pZCByZW9wZW5BbGxBcHBDYWNoZXMoKTsKIHZvaWQgY2xvc2VBbGxBcHBDYWNoZXMo
KTsKLXZvaWQgY2xlYXJEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIHBhZ2VHcm91cE5hbWUpOwor
dm9pZCBjbGVhckRhdGFiYXNlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHBh
Z2VHcm91cE5hbWUpOwogdm9pZCByZW9wZW5BbGxUcmFja2VyRGF0YWJhc2VzKCk7CiB2b2lkIGNs
b3NlQWxsVHJhY2tlckRhdGFiYXNlcygpOwogdm9pZCB1cGRhdGVPbmxpbmVTdGF0dXMoYm9vbCBv
bmxpbmUpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9KYXZhU2NyaXB0VmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9KYXZh
U2NyaXB0VmFyaWFudC5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvSmF2YVNjcmlwdFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwx
MCArNDUsMTUgQEAgSmF2YVNjcmlwdFZhcmlhbnQgSlNWYWx1ZVJlZlRvQmxhY2tCZXJyeQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIGtKU1R5cGVTdHJpbmc6IHsKICAgICAgICAgSlNTdHJpbmdS
ZWYgc3RyaW5nUmVmID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjdHgsIHZhbHVlLCAwKTsKKyAgICAg
ICAgaWYgKCFzdHJpbmdSZWYpIHsKKyAgICAgICAgICAgIHJldHVyblZhbHVlLnNldFN0cmluZyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZ1JlZik7CiAgICAgICAgIFdURjo6VmVjdG9y
PGNoYXI+IGJ1ZmZlcihidWZmZXJTaXplKTsKLSAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmlu
ZyhzdHJpbmdSZWYsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlclNpemUpOwotICAgICAgICByZXR1cm5W
YWx1ZS5zZXRTdHJpbmcoV2ViU3RyaW5nOjpmcm9tVXRmOChidWZmZXIuZGF0YSgpKS51dGY4KCku
Y19zdHIoKSk7CisgICAgICAgIHNpemVfdCByYyA9IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3Ry
aW5nUmVmLCBidWZmZXIuZGF0YSgpLCBidWZmZXJTaXplKTsKKyAgICAgICAgcmV0dXJuVmFsdWUu
c2V0U3RyaW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcoYnVmZmVyLmRhdGEoKSwgcmMg
LSAxKSk7CisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmdSZWYpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBrSlNUeXBlT2JqZWN0OgpAQCAtNzgsNyArODMsNyBAQCBKU1Zh
bHVlUmVmIEJsYWNrQmVycnlKYXZhU2NyaXB0VmFyaWFudFRvCiAgICAgICAgIHJlZiA9IEpTVmFs
dWVNYWtlTnVtYmVyKGN0eCwgdmFyaWFudC5kb3VibGVWYWx1ZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBKYXZhU2NyaXB0VmFyaWFudDo6U3RyaW5nOiB7Ci0gICAgICAgIEpTU3RyaW5n
UmVmIHN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhcmlhbnQuc3RyaW5nVmFs
dWUoKSk7CisgICAgICAgIEpTU3RyaW5nUmVmIHN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHZhcmlhbnQuc3RyaW5nVmFsdWUoKS5jX3N0cigpKTsKICAgICAgICAgcmVmID0gSlNW
YWx1ZU1ha2VTdHJpbmcoY3R4LCBzdHIpOwogICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyKTsK
ICAgICAgICAgYnJlYWs7CkBAIC05Myw1NiArOTgsNDEgQEAgSlNWYWx1ZVJlZiBCbGFja0JlcnJ5
SmF2YVNjcmlwdFZhcmlhbnRUbwogCiBKYXZhU2NyaXB0VmFyaWFudDo6SmF2YVNjcmlwdFZhcmlh
bnQoKQogICAgIDogbV90eXBlKFVuZGVmaW5lZCkKLSAgICAsIG1fc3RyaW5nVmFsdWUoMCkKIHsK
IH0KIAogSmF2YVNjcmlwdFZhcmlhbnQ6OkphdmFTY3JpcHRWYXJpYW50KGRvdWJsZSB2YWx1ZSkK
ICAgICA6IG1fdHlwZShVbmRlZmluZWQpCi0gICAgLCBtX3N0cmluZ1ZhbHVlKDApCiB7CiAgICAg
c2V0RG91YmxlKHZhbHVlKTsKIH0KIAogSmF2YVNjcmlwdFZhcmlhbnQ6OkphdmFTY3JpcHRWYXJp
YW50KGludCB2YWx1ZSkKICAgICA6IG1fdHlwZShVbmRlZmluZWQpCi0gICAgLCBtX3N0cmluZ1Zh
bHVlKDApCiB7CiAgICAgc2V0RG91YmxlKHZhbHVlKTsKIH0KIAotSmF2YVNjcmlwdFZhcmlhbnQ6
OkphdmFTY3JpcHRWYXJpYW50KGNvbnN0IGNoYXIqIHZhbHVlKQorSmF2YVNjcmlwdFZhcmlhbnQ6
OkphdmFTY3JpcHRWYXJpYW50KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZh
bHVlKQogICAgIDogbV90eXBlKFVuZGVmaW5lZCkKLSAgICAsIG1fc3RyaW5nVmFsdWUoMCkKIHsK
ICAgICBzZXRTdHJpbmcodmFsdWUpOwogfQogCi1KYXZhU2NyaXB0VmFyaWFudDo6SmF2YVNjcmlw
dFZhcmlhbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotICAgIDogbV90eXBlKFVuZGVmaW5l
ZCkKLSAgICAsIG1fc3RyaW5nVmFsdWUoMCkKLXsKLSAgICBzZXRTdHJpbmcodmFsdWUuY19zdHIo
KSk7Ci19Ci0KIEphdmFTY3JpcHRWYXJpYW50OjpKYXZhU2NyaXB0VmFyaWFudChib29sIHZhbHVl
KQogICAgIDogbV90eXBlKFVuZGVmaW5lZCkKLSAgICAsIG1fc3RyaW5nVmFsdWUoMCkKIHsKICAg
ICBzZXRCb29sZWFuKHZhbHVlKTsKIH0KIAogSmF2YVNjcmlwdFZhcmlhbnQ6OkphdmFTY3JpcHRW
YXJpYW50KGNvbnN0IEphdmFTY3JpcHRWYXJpYW50ICZ2KQogICAgIDogbV90eXBlKFVuZGVmaW5l
ZCkKLSAgICAsIG1fc3RyaW5nVmFsdWUoMCkKIHsKICAgICB0aGlzLT5vcGVyYXRvcj0odik7CiB9
CiAKIEphdmFTY3JpcHRWYXJpYW50Ojp+SmF2YVNjcmlwdFZhcmlhbnQoKQogewotICAgIC8vIFBy
ZXZlbnQgbWVtb3J5IGxlYWtzIGlmIHdlIGhhdmUgc3RyaW5ncwotICAgIHNldFR5cGUoVW5kZWZp
bmVkKTsKIH0KIAogSmF2YVNjcmlwdFZhcmlhbnQmIEphdmFTY3JpcHRWYXJpYW50OjpvcGVyYXRv
cj0oY29uc3QgSmF2YVNjcmlwdFZhcmlhbnQmIHYpCkBAIC0xNzEsOSArMTYxLDggQEAgSmF2YVNj
cmlwdFZhcmlhbnQmIEphdmFTY3JpcHRWYXJpYW50OjpvcAogdm9pZCBKYXZhU2NyaXB0VmFyaWFu
dDo6c2V0VHlwZShjb25zdCBEYXRhVHlwZSYgdHlwZSkKIHsKICAgICBpZiAobV90eXBlID09IFN0
cmluZykKLSAgICAgICAgZnJlZShtX3N0cmluZ1ZhbHVlKTsKKyAgICAgICAgbV9zdHJpbmdWYWx1
ZSA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCk7CiAgICAgbV90
eXBlID0gdHlwZTsKLSAgICBtX3N0cmluZ1ZhbHVlID0gMDsKIH0KIAogSmF2YVNjcmlwdFZhcmlh
bnQ6OkRhdGFUeXBlIEphdmFTY3JpcHRWYXJpYW50Ojp0eXBlKCkgY29uc3QKQEAgLTE5MiwxMyAr
MTgxLDEzIEBAIGRvdWJsZSBKYXZhU2NyaXB0VmFyaWFudDo6ZG91YmxlVmFsdWUoKSAKICAgICBy
ZXR1cm4gbV9kb3VibGVWYWx1ZTsKIH0KIAotdm9pZCBKYXZhU2NyaXB0VmFyaWFudDo6c2V0U3Ry
aW5nKGNvbnN0IGNoYXIqIHZhbHVlKQordm9pZCBKYXZhU2NyaXB0VmFyaWFudDo6c2V0U3RyaW5n
KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZhbHVlKQogewogICAgIHNldFR5
cGUoU3RyaW5nKTsKLSAgICBtX3N0cmluZ1ZhbHVlID0gc3RyZHVwKHZhbHVlKTsKKyAgICBtX3N0
cmluZ1ZhbHVlID0gdmFsdWU7CiB9CiAKLWNoYXIqIEphdmFTY3JpcHRWYXJpYW50OjpzdHJpbmdW
YWx1ZSgpIGNvbnN0Citjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBKYXZhU2Ny
aXB0VmFyaWFudDo6c3RyaW5nVmFsdWUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0cmluZ1Zh
bHVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9KYXZhU2NyaXB0VmFy
aWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSmF2YVNj
cmlwdFZhcmlhbnQuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9KYXZhU2NyaXB0VmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3
IEBACiAKICNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCiAKLSNpbmNsdWRlIDxzdHJpbmc+
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBCbGFj
a0JlcnJ5IHsKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDIsOSArNDIsOCBAQCBwdWJsaWM6CiAg
ICAgSmF2YVNjcmlwdFZhcmlhbnQoY29uc3QgSmF2YVNjcmlwdFZhcmlhbnQmKTsKICAgICBKYXZh
U2NyaXB0VmFyaWFudChkb3VibGUpOwogICAgIEphdmFTY3JpcHRWYXJpYW50KGludCk7Ci0gICAg
SmF2YVNjcmlwdFZhcmlhbnQoY29uc3QgY2hhciopOwotICAgIEphdmFTY3JpcHRWYXJpYW50KGJv
b2wpOwotICAgIEphdmFTY3JpcHRWYXJpYW50KGNvbnN0IHN0ZDo6c3RyaW5nJik7CisgICAgZXhw
bGljaXQgSmF2YVNjcmlwdFZhcmlhbnQoYm9vbCk7CisgICAgSmF2YVNjcmlwdFZhcmlhbnQoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwogICAgIH5KYXZhU2NyaXB0VmFyaWFu
dCgpOwogCiAgICAgSmF2YVNjcmlwdFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBKYXZhU2NyaXB0
VmFyaWFudCYpOwpAQCAtNTUsMjAgKzU0LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERvdWJs
ZShkb3VibGUpOwogICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0OwogCi0gICAgdm9pZCBz
ZXRTdHJpbmcoY29uc3QgY2hhciopOwotICAgIGNoYXIqIHN0cmluZ1ZhbHVlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwor
ICAgIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHN0cmluZ1ZhbHVlKCkgY29u
c3Q7CiAKICAgICB2b2lkIHNldEJvb2xlYW4oYm9vbCk7CiAgICAgYm9vbCBib29sZWFuVmFsdWUo
KSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBKYXZhU2NyaXB0VmFyaWFudChjb25zdCBjaGFyKik7
CiAgICAgRGF0YVR5cGUgbV90eXBlOwogCiAgICAgdW5pb24gewogICAgICAgICBib29sIG1fYm9v
bGVhblZhbHVlOwogICAgICAgICBkb3VibGUgbV9kb3VibGVWYWx1ZTsKLSAgICAgICAgY2hhciog
bV9zdHJpbmdWYWx1ZTsKICAgICB9OworCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyBtX3N0cmluZ1ZhbHVlOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxOSArMjUsMTkgQEAKICNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCiAjaW5j
bHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb25fcC5oIgot
I2luY2x1ZGUgIldlYlN0cmluZy5oIgogCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVz
c2FnZUNsaWVudC5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgogCiBu
YW1lc3BhY2UgQmxhY2tCZXJyeSB7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLVdlYkFuaW1hdGlvbiBXZWJBbmltYXRpb246OmZhZGVBbmltYXRpb24o
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIGR1cmF0
aW9uKQorV2ViQW5pbWF0aW9uIFdlYkFuaW1hdGlvbjo6ZmFkZUFuaW1hdGlvbihjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBuYW1lLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91
YmxlIGR1cmF0aW9uKQogewogICAgIFdlYkFuaW1hdGlvbiB0bXA7Ci0gICAgdG1wLmQtPm5hbWUg
PSBTdHJpbmcobmFtZS5pbXBsKCkpOworICAgIHRtcC5kLT5uYW1lID0gbmFtZTsKICAgICB0bXAu
ZC0+YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKICAgICB0bXAuZC0+YW5pbWF0aW9u
LT5zZXREdXJhdGlvbihkdXJhdGlvbik7CiAgICAgdG1wLmQtPmtleWZyYW1lcyA9IEtleWZyYW1l
VmFsdWVMaXN0KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKQEAgLTQ3LDkgKzQ3LDkgQEAgV2Vi
QW5pbWF0aW9uIFdlYkFuaW1hdGlvbjo6ZmFkZUFuaW1hdGlvbgogICAgIHJldHVybiB0bXA7CiB9
CiAKLVdlYlN0cmluZyBXZWJBbmltYXRpb246Om5hbWUoKSBjb25zdAorQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyBXZWJBbmltYXRpb246Om5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBk
LT5uYW1lLmltcGwoKTsKKyAgICByZXR1cm4gZC0+bmFtZTsKIH0KIAogV2ViQW5pbWF0aW9uOjpX
ZWJBbmltYXRpb24oKQpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJBbmlt
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkFu
aW1hdGlvbi5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYkFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNz
IFdlYkFuaW1hdGlvblByaXZhdGU7CiAgKi8KIGNsYXNzIEJMQUNLQkVSUllfRVhQT1JUIFdlYkFu
aW1hdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFdlYkFuaW1hdGlvbiBmYWRlQW5pbWF0aW9u
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBkdXJh
dGlvbik7CisgICAgc3RhdGljIFdlYkFuaW1hdGlvbiBmYWRlQW5pbWF0aW9uKGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG5hbWUsIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3Vi
bGUgZHVyYXRpb24pOwogCiAgICAgV2ViQW5pbWF0aW9uKCk7CiAgICAgV2ViQW5pbWF0aW9uKGNv
bnN0IFdlYkFuaW1hdGlvbiYpOwpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKICAgICBXZWJB
bmltYXRpb24mIG9wZXJhdG9yPShjb25zdCBXZWJBbmltYXRpb24mKTsKIAotICAgIFdlYlN0cmlu
ZyBuYW1lKCkgY29uc3Q7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBuYW1lKCkg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgV2ViT3ZlcmxheTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQ29va2llSmFyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkNvb2tpZUphci5jcHAJKHJldmlz
aW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQ29va2llSmFy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSAiQ29va2ll
TWFuYWdlci5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKQEAgLTMzLDI2ICszMywyNiBAQCBXZWJDb29raWVKYXI6OldlYkNvb2tpZUphcigp
CiB7CiB9CiAKLXN0ZDo6dmVjdG9yPFdlYlN0cmluZz4gV2ViQ29va2llSmFyOjpjb29raWVzKGNv
bnN0IGNoYXIqIHVybCkKK3N0ZDo6dmVjdG9yPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+
IFdlYkNvb2tpZUphcjo6Y29va2llcyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiB1cmwpCiB7Ci0gICAgS1VSTCBrdXJsID0gS1VSTChLVVJMKCksIFN0cmluZyh1cmwpKTsKKyAg
ICBLVVJMIGt1cmwgPSBLVVJMKEtVUkwoKSwgdXJsKTsKIAogICAgIFZlY3RvcjxQYXJzZWRDb29r
aWUqPiByYXdDb29raWVzOwogICAgIGNvb2tpZU1hbmFnZXIoKS5nZXRSYXdDb29raWVzKHJhd0Nv
b2tpZXMsIGt1cmwsIFdpdGhIdHRwT25seUNvb2tpZXMpOwogCi0gICAgc3RkOjp2ZWN0b3I8V2Vi
U3RyaW5nPiByZXN1bHQ7CisgICAgc3RkOjp2ZWN0b3I8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZz4gcmVzdWx0OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmF3Q29va2llcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhXZWJTdHJpbmcocmF3Q29va2llc1tp
XS0+dG9OYW1lVmFsdWVQYWlyKCkuaW1wbCgpKSk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2so
cmF3Q29va2llc1tpXS0+dG9OYW1lVmFsdWVQYWlyKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBXZWJDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgY2hhciogdXJsLCBjb25z
dCBzdGQ6OnZlY3RvcjxXZWJTdHJpbmc+JiBjb29raWVzKQordm9pZCBXZWJDb29raWVKYXI6OnNl
dENvb2tpZXMoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsLCBjb25zdCBz
dGQ6OnZlY3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgY29va2llcykKIHsKLSAg
ICBLVVJMIGt1cmwgPSBLVVJMKEtVUkwoKSwgU3RyaW5nKHVybCkpOworICAgIEtVUkwga3VybCA9
IEtVUkwoS1VSTCgpLCB1cmwpOwogICAgIFZlY3RvcjxTdHJpbmc+IGNvcmVDb29raWVzOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29va2llcy5zaXplKCk7ICsraSkKLSAgICAgICAgY29y
ZUNvb2tpZXMuYXBwZW5kKFN0cmluZyhjb29raWVzW2ldLmltcGwoKSkpOworICAgICAgICBjb3Jl
Q29va2llcy5hcHBlbmQoY29va2llc1tpXSk7CiAgICAgY29va2llTWFuYWdlcigpLnNldENvb2tp
ZXMoa3VybCwgY29yZUNvb2tpZXMsIFdpdGhIdHRwT25seUNvb2tpZXMpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYkNvb2tpZUphci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQ29va2llSmFyLmgJKHJldmlzaW9uIDEz
MTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViQ29va2llSmFyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDEwICsyNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFt
ZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIFN0cmluZzsK
K30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBXZWJTdHJp
bmc7CiAKIC8qKgogICogUmVwcmVzZW50cyB0aGUgY29va2llIGRhdGFiYXNlLgpAQCAtNDEsNyAr
NDQsNyBAQCBwdWJsaWM6CiAgICAgICoKICAgICAgKiBBbGwgY29va2llcyB3aG9zZSBkb21haW4g
YW5kIHBhdGggbWF0Y2ggdGhlIHByb3ZpZGVkIFVSTCB3aWxsIGJlIHJldHVybmVkLgogICAgICAq
LwotICAgIHN0ZDo6dmVjdG9yPFdlYlN0cmluZz4gY29va2llcyhjb25zdCBjaGFyKiB1cmwpOwor
ICAgIHN0ZDo6dmVjdG9yPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+IGNvb2tpZXMoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsKTsKIAogICAgIC8qKgogICAgICAq
IFRoaXMgd2lsbCBhZGQgdGhlIGNvb2tpZXMgcHJvdmlkZWQgaW4gdGhlIGxpc3QgdG8gdGhlIGNv
b2tpZSBkYXRhYmFzZS4KQEAgLTUyLDcgKzU1LDcgQEAgcHVibGljOgogICAgICAqIElmIG5vIGRv
bWFpbiBhbmQvb3IgcGF0aCBpcyBwcm92aWRlZCBpbiBhIGNvb2tpZSwgdGhlIGRvbWFpbiBhbmQv
b3IgcGF0aAogICAgICAqIHdpbGwgYmUgaW5mZXJyZWQgZnJvbSB0aGUgcHJvdmlkZWQgVVJMLgog
ICAgICAqLwotICAgIHZvaWQgc2V0Q29va2llcyhjb25zdCBjaGFyKiB1cmwsIGNvbnN0IHN0ZDo6
dmVjdG9yPFdlYlN0cmluZz4mIGNvb2tpZXMpOworICAgIHZvaWQgc2V0Q29va2llcyhjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB1cmwsIGNvbnN0IHN0ZDo6dmVjdG9yPEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBjb29raWVzKTsKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgV2ViUGFnZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
S2l0TUlNRVR5cGVDb252ZXJ0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViS2l0TUlNRVR5cGVDb252ZXJ0ZXIuY3BwCShyZXZpc2lvbiAxMzEyNDgp
CisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdE1JTUVUeXBlQ29udmVydGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMzYgKzIwLDIzIEBACiAjaW5jbHVkZSAiV2ViS2l0
TUlNRVR5cGVDb252ZXJ0ZXIuaCIKIAogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBC
bGFja0JlcnJ5IHsKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1ib29sIGdldEV4dGVuc2lvbkZvck1p
bWVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lLCBzdGQ6OnN0cmluZyYgZXh0ZW5zaW9uKQor
Ym9vbCBnZXRFeHRlbnNpb25Gb3JNaW1lVHlwZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiBtaW1lLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBleHRlbnNpb24pCiB7
Ci0gICAgU3RyaW5nIG1pbWVUeXBlKG1pbWUuZGF0YSgpLCBtaW1lLmxlbmd0aCgpKTsKLSAgICBT
dHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uID0gV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0
UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUobWltZVR5cGUpOwotICAgIGlmIChwcmVmZXJy
ZWRFeHRlbnNpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3Ry
aW5nIHV0ZjggPSBwcmVmZXJyZWRFeHRlbnNpb24udXRmOCgpOwotICAgIGV4dGVuc2lvbi5jbGVh
cigpOwotICAgIGV4dGVuc2lvbi5hcHBlbmQodXRmOC5kYXRhKCksIHV0ZjgubGVuZ3RoKCkpOwot
ICAgIHJldHVybiB0cnVlOworICAgIGV4dGVuc2lvbiA9IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0
cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKG1pbWUpOworICAgIHJldHVybiAh
ZXh0ZW5zaW9uLmVtcHR5KCk7CiB9CiAKLWJvb2wgZ2V0TWltZVR5cGVGb3JFeHRlbnNpb24oY29u
c3Qgc3RkOjpzdHJpbmcmIGV4dGVuc2lvbiwgc3RkOjpzdHJpbmcmIG1pbWVUeXBlKQorYm9vbCBn
ZXRNaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiBleHRlbnNpb24sIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbWVUeXBlKQogewot
ICAgIFN0cmluZyBleHRTdHIoZXh0ZW5zaW9uLmRhdGEoKSwgZXh0ZW5zaW9uLmxlbmd0aCgpKTsK
LSAgICBTdHJpbmcgbWltZSA9IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldE1lZGlhTUlN
RVR5cGVGb3JFeHRlbnNpb24oZXh0U3RyKTsKLSAgICBpZiAobWltZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgdXRmOCA9IG1pbWUudXRmOCgpOwotICAg
IG1pbWVUeXBlLmNsZWFyKCk7Ci0gICAgbWltZVR5cGUuYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4
Lmxlbmd0aCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtaW1lVHlwZSA9IFdlYkNvcmU6Ok1J
TUVUeXBlUmVnaXN0cnk6OmdldE1lZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsK
KyAgICByZXR1cm4gIW1pbWVUeXBlLmVtcHR5KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRNSU1FVHlwZUNvbnZl
cnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0
TUlNRVR5cGVDb252ZXJ0ZXIuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJLaXRNSU1FVHlwZUNvbnZlcnRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCwxMyArMjAsMTYgQEAKICNkZWZpbmUgV2ViS2l0TUlNRVR5cGVDb252ZXJ0ZXJfaAogCiAj
aW5jbHVkZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgotI2luY2x1ZGUgPHN0cmluZz4KIAogbmFtZXNw
YWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIFN0cmluZzsKK30K
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLUJMQUNLQkVSUllfRVhQT1JUIGJvb2wgZ2V0RXh0ZW5z
aW9uRm9yTWltZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWUsIHN0ZDo6c3RyaW5nJiBleHRl
bnNpb24pOwotQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBnZXRNaW1lVHlwZUZvckV4dGVuc2lvbihj
b25zdCBzdGQ6OnN0cmluZyYgZXh0ZW5zaW9uLCBzdGQ6OnN0cmluZyYgbWltZVR5cGUpOworQkxB
Q0tCRVJSWV9FWFBPUlQgYm9vbCBnZXRFeHRlbnNpb25Gb3JNaW1lVHlwZShjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtaW1lLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiBleHRlbnNpb24pOworQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBnZXRNaW1lVHlwZUZvckV4dGVu
c2lvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBleHRlbnNpb24sIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbWVUeXBlKTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiB9IC8vIG5hbWVzcGFjZSBCbGFja0JlcnJ5CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisr
KyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRl
ICJUZXh0Q29kZWNJQ1UuaCIKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTIsNyArOTMsNyBAQCBXVEY6OkJhc2U2
NERlY29kZVBvbGljeSBiYXNlNjREZWNvZGVQb2xpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdU
Rjo6QmFzZTY0RGVjb2RlUG9saWN5Pihwb2xpY3kpOwogfQogCi1ib29sIGJhc2U2NERlY29kZShj
b25zdCBzdGQ6OnN0cmluZyYgYmFzZTY0LCBzdGQ6OnZlY3RvcjxjaGFyPiYgYmluYXJ5LCBCYXNl
NjREZWNvZGVQb2xpY3kgcG9saWN5KQorYm9vbCBiYXNlNjREZWNvZGUoY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgYmFzZTY0LCBzdGQ6OnZlY3RvcjxjaGFyPiYgYmluYXJ5LCBC
YXNlNjREZWNvZGVQb2xpY3kgcG9saWN5KQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CiAg
ICAgaWYgKCFXVEY6OmJhc2U2NERlY29kZShiYXNlNjQuY19zdHIoKSwgYmFzZTY0Lmxlbmd0aCgp
LCByZXN1bHQsIGJhc2U2NERlY29kZVBvbGljeUZvcldURihwb2xpY3kpKSkKQEAgLTExMCwzNyAr
MTExLDI2IEBAIFdURjo6QmFzZTY0RGVjb2RlUG9saWN5IGJhc2U2NEVuY29kZVBvbGkKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V1RGOjpCYXNlNjRFbmNvZGVQb2xpY3k+KHBvbGljeSk7CiB9CiAK
LWJvb2wgYmFzZTY0RW5jb2RlKGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIHN0ZDo6
c3RyaW5nJiBiYXNlNjQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitib29sIGJhc2U2NEVu
Y29kZShjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiYgYmluYXJ5LCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiBiYXNlNjQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7CiAgICAgVmVj
dG9yPGNoYXI+IHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kKCZiaW5hcnlbMF0sIGJpbmFyeS5z
aXplKCkpOwogCiAgICAgV1RGOjpiYXNlNjRFbmNvZGUoJmJpbmFyeVswXSwgYmluYXJ5LnNpemUo
KSwgcmVzdWx0LCBiYXNlNjRFbmNvZGVQb2xpY3lGb3JXVEYocG9saWN5KSk7CiAKLSAgICBiYXNl
NjQuY2xlYXIoKTsKLSAgICBiYXNlNjQuYXBwZW5kKCZyZXN1bHRbMF0sIHJlc3VsdC5zaXplKCkp
OworICAgIGJhc2U2NCA9IEJsYWNrYmVycnk6OlBsYXRmb3JtOjpTdHJpbmcoJnJlc3VsdFswXSwg
cmVzdWx0LnNpemUoKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCB1bmVzY2FwZVVS
TChjb25zdCBzdGQ6OnN0cmluZyYgZXNjYXBlZCwgc3RkOjpzdHJpbmcmIHVybCkKK3ZvaWQgdW5l
c2NhcGVVUkwoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZXNjYXBlZCwgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsKQogewotICAgIFN0cmluZyBlc2NhcGVkU3Ry
aW5nKGVzY2FwZWQuZGF0YSgpLCBlc2NhcGVkLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgdXJsU3Ry
aW5nID0gV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGVzY2FwZWRTdHJpbmcpOwot
ICAgIENTdHJpbmcgdXRmOCA9IHVybFN0cmluZy51dGY4KCk7Ci0KLSAgICB1cmwuY2xlYXIoKTsK
LSAgICB1cmwuYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpKTsKKyAgICB1cmwgPSBX
ZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZXNjYXBlZCk7CiB9CiAKLXZvaWQgZXNj
YXBlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwsIHN0ZDo6c3RyaW5nJiBlc2NhcGVkKQordm9p
ZCBlc2NhcGVVUkwoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXJsLCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBlc2NhcGVkKQogewotICAgIFN0cmluZyB1cmxTdHJp
bmcodXJsLmRhdGEoKSwgdXJsLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgZXNjYXBlZFN0cmluZyA9
IFdlYkNvcmU6OmVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModXJsU3RyaW5nKTsKLSAgICBD
U3RyaW5nIHV0ZjggPSBlc2NhcGVkU3RyaW5nLnV0ZjgoKTsKLQotICAgIGVzY2FwZWQuY2xlYXIo
KTsKLSAgICBlc2NhcGVkLmFwcGVuZCh1dGY4LmRhdGEoKSwgdXRmOC5sZW5ndGgoKSk7CisgICAg
ZXNjYXBlZCA9IFdlYkNvcmU6OmVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModXJsKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYktpdFRleHRDb2RlYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDEwICsyMCwxMyBAQAogI2RlZmluZSBXZWJLaXRUZXh0Q29kZWNfaAogCiAjaW5jbHVkZSAi
QmxhY2tCZXJyeUdsb2JhbC5oIgotI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+
CiAKIG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBT
dHJpbmc7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBlbnVtIFRyYW5zY29kZVJlc3VsdCB7
CkBAIC00OSwxMSArNTIsMTEgQEAgQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBpc1NhbWVFbmNvZGlu
ZyhjbwogQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBpc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKGNv
bnN0IGNoYXIqIGVuY29kaW5nKTsKIEJMQUNLQkVSUllfRVhQT1JUIFRyYW5zY29kZVJlc3VsdCB0
cmFuc2NvZGUoY29uc3QgY2hhciogc291cmNlRW5jb2RpbmcsIGNvbnN0IGNoYXIqIHRhcmdldEVu
Y29kaW5nLCBjb25zdCBjaGFyKiYgc291cmNlU3RhcnQsIGludCBzb3VyY2VMZW5ndGgsIGNoYXIq
JiB0YXJnZXRTdGFydCwgdW5zaWduZWQgdGFyZ2V0TGVuZ3RoKTsKIAotQkxBQ0tCRVJSWV9FWFBP
UlQgYm9vbCBiYXNlNjREZWNvZGUoY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2U2NCwgc3RkOjp2ZWN0
b3I8Y2hhcj4mIGJpbmFyeSwgQmFzZTY0RGVjb2RlUG9saWN5KTsKLUJMQUNLQkVSUllfRVhQT1JU
IGJvb2wgYmFzZTY0RW5jb2RlKGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIHN0ZDo6
c3RyaW5nJiBiYXNlNjQsIEJhc2U2NEVuY29kZVBvbGljeSk7CitCTEFDS0JFUlJZX0VYUE9SVCBi
b29sIGJhc2U2NERlY29kZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBiYXNl
NjQsIHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIEJhc2U2NERlY29kZVBvbGljeSk7CitCTEFD
S0JFUlJZX0VYUE9SVCBib29sIGJhc2U2NEVuY29kZShjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiYg
YmluYXJ5LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBiYXNlNjQsIEJhc2U2NEVuY29k
ZVBvbGljeSk7CiAKLUJMQUNLQkVSUllfRVhQT1JUIHZvaWQgdW5lc2NhcGVVUkwoY29uc3Qgc3Rk
OjpzdHJpbmcmIGVzY2FwZWQsIHN0ZDo6c3RyaW5nJiB1cmwpOwotQkxBQ0tCRVJSWV9FWFBPUlQg
dm9pZCBlc2NhcGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCwgc3RkOjpzdHJpbmcmIGVzY2Fw
ZWQpOworQkxBQ0tCRVJSWV9FWFBPUlQgdm9pZCB1bmVzY2FwZVVSTChjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiBlc2NhcGVkLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiB1cmwpOworQkxBQ0tCRVJSWV9FWFBPUlQgdm9pZCBlc2NhcGVVUkwoY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgdXJsLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBl
c2NhcGVkKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiB9IC8vIG5hbWVzcGFjZSBCbGFja0Jl
cnJ5CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5jcHAJ
KHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3Zl
cmxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAKICNpbmNsdWRlICJXZWJQ
YWdlQ29tcG9zaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIldlYlBhZ2VDb21wb3NpdG9yX3AuaCIK
ICNpbmNsdWRlICJXZWJQYWdlX3AuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAogI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybU1lc3NhZ2VDbGllbnQuaD4KKyNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNpbmNsdWRlIDxT
a0RldmljZS5oPgogCkBAIC0xMzcsOSArMTM3LDkgQEAgdm9pZCBXZWJPdmVybGF5OjphZGRBbmlt
YXRpb24oY29uc3QgV2ViQQogICAgIGQtPmFkZEFuaW1hdGlvbihhbmltYXRpb24uZC0+bmFtZSwg
YW5pbWF0aW9uLmQtPmFuaW1hdGlvbi5nZXQoKSwgYW5pbWF0aW9uLmQtPmtleWZyYW1lcyk7CiB9
CiAKLXZvaWQgV2ViT3ZlcmxheTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSkKK3ZvaWQgV2ViT3ZlcmxheTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcmIG5hbWUpCiB7Ci0gICAgZC0+cmVtb3ZlQW5pbWF0aW9uKFN0cmluZyhQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+KG5hbWUuaW1wbCgpKSkpOworICAgIGQtPnJlbW92ZUFuaW1h
dGlvbihuYW1lKTsKIH0KIAogV2ViT3ZlcmxheSogV2ViT3ZlcmxheTo6cGFyZW50KCkgY29uc3QK
QEAgLTc1NCw3ICs3NTQsNyBAQCB2b2lkIFdlYk92ZXJsYXk6OmFkZEFuaW1hdGlvbihjb25zdCBX
ZWJBCiB7CiB9CiAKLXZvaWQgV2ViT3ZlcmxheTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFdlYlN0
cmluZyYpCit2b2lkIFdlYk92ZXJsYXk6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJPdmVybGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJPdmVybGF5LmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwx
MCBAQCBjbGFzcyBHcmFwaGljc0xheWVyQ2xpZW50OwogfQogCiBuYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworY2xhc3MgU3RyaW5nOworfQorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgV2ViQW5pbWF0aW9uOwpAQCAtMzYsNyArNDAsNiBAQCBjbGFzcyBX
ZWJPdmVybGF5Q2xpZW50OwogY2xhc3MgV2ViT3ZlcmxheU92ZXJyaWRlOwogY2xhc3MgV2ViT3Zl
cmxheVByaXZhdGU7CiBjbGFzcyBXZWJQYWdlOwotY2xhc3MgV2ViU3RyaW5nOwogCiAvKioKICAq
IFJlcHJlc2VudHMgYW4gb3ZlcmxheSB0aGF0IGlzIHJlbmRlcmVkIHN1cGVyaW1wb3NlZCBvbiBh
IHdlYiBwYWdlLgpAQCAtOTAsMTAgKzkzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wYWNp
dHkoZmxvYXQpOwogCiAgICAgLy8gQWRkcy9yZW1vdmVzIGFuIGFuaW1hdGlvbgotICAgIC8vIE5v
dGUgdGhhdCBXZWJBbmltYXRpb24gYW5kIFdlYlN0cmluZyBhcmUgbm90IHRocmVhZCBzYWZlIGFu
ZCBoYXZlIHRvIGJlCisgICAgLy8gTm90ZSB0aGF0IFdlYkFuaW1hdGlvbiBhbmQgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyBhcmUgbm90IHRocmVhZCBzYWZlIGFuZCBoYXZlIHRvIGJlCiAg
ICAgLy8gY3JlYXRlZCBvbiB0aGUgdGhyZWFkIHdoZXJlIHRoZXknbGwgYmUgdXNlZC4KICAgICB2
b2lkIGFkZEFuaW1hdGlvbihjb25zdCBXZWJBbmltYXRpb24mKTsKLSAgICB2b2lkIHJlbW92ZUFu
aW1hdGlvbihjb25zdCBXZWJTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG5hbWUpOwogCiAgICAgV2ViT3Zl
cmxheSogcGFyZW50KCkgY29uc3Q7CiAgICAgYm9vbCBhZGRDaGlsZChXZWJPdmVybGF5Kik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5T3Zl
cnJpZGUuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYk92ZXJsYXlPdmVycmlkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDkg
QEAKICNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb25fcC5o
IgogI2luY2x1ZGUgIldlYk92ZXJsYXlfcC5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogCiAj
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTWVzc2FnZUNsaWVudC5oPgorI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
CiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CkBAIC04Niw5ICs4Niw5IEBAIHZvaWQgV2ViT3Zlcmxh
eU92ZXJyaWRlOjphZGRBbmltYXRpb24oY28KICAgICBkLT5zY2hlZHVsZUNvbXBvc2l0aW5nUnVu
KCk7CiB9CiAKLXZvaWQgV2ViT3ZlcmxheU92ZXJyaWRlOjpyZW1vdmVBbmltYXRpb24oY29uc3Qg
V2ViU3RyaW5nJiBuYW1lKQordm9pZCBXZWJPdmVybGF5T3ZlcnJpZGU6OnJlbW92ZUFuaW1hdGlv
bihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBuYW1lKQogewotICAgIGQtPmxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+b3ZlcnJpZGUoKS0+cmVtb3ZlQW5pbWF0aW9uKFN0cmlu
ZyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG5hbWUuaW1wbCgpKSkpOworICAgIGQtPmxheWVyQ29t
cG9zaXRpbmdUaHJlYWQoKS0+b3ZlcnJpZGUoKS0+cmVtb3ZlQW5pbWF0aW9uKG5hbWUpOwogICAg
IGQtPnNjaGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKIH0KIApAQCAtMTMwLDcgKzEzMCw3IEBAIHZv
aWQgV2ViT3ZlcmxheU92ZXJyaWRlOjphZGRBbmltYXRpb24oY28KIHsKIH0KIAotdm9pZCBXZWJP
dmVybGF5T3ZlcnJpZGU6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBXZWJTdHJpbmcmKQordm9pZCBX
ZWJPdmVybGF5T3ZlcnJpZGU6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9XZWJPdmVybGF5T3ZlcnJpZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlPdmVycmlkZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxNiArMjQsMTkgQEAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Qcmlt
aXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7
CitjbGFzcyBTdHJpbmc7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJBbmlt
YXRpb247CiBjbGFzcyBXZWJPdmVybGF5UHJpdmF0ZTsKLWNsYXNzIFdlYlN0cmluZzsKIAogLyoq
CiAgKiBDb21wb3NpdGluZyB0aHJlYWQgb25seQogICoKLSAqIE5vdGUgdGhhdCB0aGUgV2ViQW5p
bWF0aW9uIGFuZCBXZWJTdHJpbmcgY2xhc3NlcyBhcmUgbm90IHRocmVhZCBzYWZlLCBidXQKKyAq
IE5vdGUgdGhhdCB0aGUgV2ViQW5pbWF0aW9uIGNsYXNzIGlzIG5vdCB0aHJlYWQgc2FmZSwgYnV0
CiAgKiByZWVudHJhbnQsIGFuZCBoYXZlIHRvIGJlIGNyZWF0ZWQgb24gdGhlIHRocmVhZCB3aGVy
ZSB0aGV5J2xsIGJlIHVzZWQuCiAgKi8KIGNsYXNzIEJMQUNLQkVSUllfRVhQT1JUIFdlYk92ZXJs
YXlPdmVycmlkZSB7CkBAIC00OSw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wYWNp
dHkoZmxvYXQpOwogCiAgICAgdm9pZCBhZGRBbmltYXRpb24oY29uc3QgV2ViQW5pbWF0aW9uJik7
Ci0gICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgV2ViU3RyaW5nJiBuYW1lKTsKKyAgICB2
b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBu
YW1lKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2ViT3ZlcmxheVByaXZhdGU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDEz
MTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzMiwxMiArMzMyLDEyIEBAIHByb3RlY3RlZDoKICAgICB0eXBlZGVmIERl
ZmVycmVkVGFzazxpc0FjdGl2ZT4gRGVmZXJyZWRUYXNrVHlwZTsKIH07CiAKLXZvaWQgV2ViUGFn
ZTo6YXV0b2ZpbGxUZXh0RmllbGQoY29uc3Qgc3RyaW5nJiBpdGVtKQordm9pZCBXZWJQYWdlOjph
dXRvZmlsbFRleHRGaWVsZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBpdGVt
KQogewogICAgIGlmICghZC0+bV93ZWJTZXR0aW5ncy0+aXNGb3JtQXV0b2ZpbGxFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGQtPm1fYXV0b2ZpbGxNYW5hZ2VyLT5hdXRvZmlsbFRl
eHRGaWVsZChpdGVtLmNfc3RyKCkpOworICAgIGQtPm1fYXV0b2ZpbGxNYW5hZ2VyLT5hdXRvZmls
bFRleHRGaWVsZChpdGVtKTsKIH0KIAogdm9pZCBXZWJQYWdlOjplbmFibGVRbnhKYXZhU2NyaXB0
T2JqZWN0KGJvb2wgZW5hYmxlZCkKQEAgLTM0NSwxMCArMzQ1LDkgQEAgdm9pZCBXZWJQYWdlOjpl
bmFibGVRbnhKYXZhU2NyaXB0T2JqZWN0KAogICAgIGQtPm1fZW5hYmxlUW54SmF2YVNjcmlwdE9i
amVjdCA9IGVuYWJsZWQ7CiB9CiAKLVdlYlN0cmluZyBXZWJQYWdlOjpyZW5kZXJUcmVlQXNUZXh0
KCkKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViUGFnZTo6cmVuZGVyVHJlZUFzVGV4
dCgpCiB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IGV4dGVybmFsUmVwcmVzZW50YXRpb24oZC0+bV9t
YWluRnJhbWUpOwotICAgIHJldHVybiBXZWJTdHJpbmcocmVzdWx0LmltcGwoKSk7CisgICAgcmV0
dXJuIGV4dGVybmFsUmVwcmVzZW50YXRpb24oZC0+bV9tYWluRnJhbWUpOwogfQogCiBXZWJQYWdl
UHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUoV2ViUGFnZSogd2ViUGFnZSwgV2ViUGFnZUNsaWVudCog
Y2xpZW50LCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNDQxLDcgKzQ0MCw3IEBAIFdlYlBhZ2VQ
cml2YXRlOjpXZWJQYWdlUHJpdmF0ZShXZWJQYWdlKiAKICAgICBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZU1hbmFnZXI6Omluc3RhbmNlKCktPnBhZ2VDcmVhdGVkKHRoaXMpOwogfQogCi1XZWJQYWdl
OjpXZWJQYWdlKFdlYlBhZ2VDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViU3RyaW5nJiBwYWdlR3Jv
dXBOYW1lLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkKK1dlYlBhZ2U6OldlYlBhZ2Uo
V2ViUGFnZUNsaWVudCogY2xpZW50LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiBwYWdlR3JvdXBOYW1lLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkKIHsKICAgICBn
bG9iYWxJbml0aWFsaXplKCk7CiAgICAgZCA9IG5ldyBXZWJQYWdlUHJpdmF0ZSh0aGlzLCBjbGll
bnQsIHJlY3QpOwpAQCAtNTA2LDcgKzUwNSw3IEBAIFBhZ2UqIFdlYlBhZ2VQcml2YXRlOjpjb3Jl
KGNvbnN0IFdlYlBhZ2UKICAgICByZXR1cm4gd2ViUGFnZS0+ZC0+bV9wYWdlOwogfQogCi12b2lk
IFdlYlBhZ2VQcml2YXRlOjppbml0KGNvbnN0IFdlYlN0cmluZyYgcGFnZUdyb3VwTmFtZSkKK3Zv
aWQgV2ViUGFnZVByaXZhdGU6OmluaXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyYgcGFnZUdyb3VwTmFtZSkKIHsKICAgICBDaHJvbWVDbGllbnRCbGFja0JlcnJ5KiBjaHJvbWVD
bGllbnQgPSBuZXcgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeSh0aGlzKTsKICAgICBDb250ZXh0TWVu
dUNsaWVudEJsYWNrQmVycnkqIGNvbnRleHRNZW51Q2xpZW50ID0gMDsKQEAgLTY1OCw3ICs2NTcs
NyBAQCBwcml2YXRlOgogICAgIH0KIH07CiAKLXZvaWQgV2ViUGFnZVByaXZhdGU6OmxvYWQoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiBuZXR3b3JrVG9rZW4sIGNvbnN0IGNoYXIqIG1ldGhv
ZCwgUGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpDYWNoZVBvbGljeSBjYWNoZVBvbGljeSwgY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIGNvbnN0IGNoYXIqIGNvbnN0KiBoZWFk
ZXJzLCBzaXplX3QgaGVhZGVyc0xlbmd0aCwgYm9vbCBpc0luaXRpYWwsIGJvb2wgbXVzdEhhbmRs
ZUludGVybmFsbHksIGJvb2wgZm9yY2VEb3dubG9hZCwgY29uc3QgY2hhciogb3ZlcnJpZGVDb250
ZW50VHlwZSwgY29uc3QgY2hhciogc3VnZ2VzdGVkU2F2ZU5hbWUpCit2b2lkIFdlYlBhZ2VQcml2
YXRlOjpsb2FkKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwgY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbmV0d29ya1Rva2VuLCBjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtZXRob2QsIFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6
Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3ksIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVu
Z3RoLCBjb25zdCBjaGFyKiBjb25zdCogaGVhZGVycywgc2l6ZV90IGhlYWRlcnNMZW5ndGgsIGJv
b2wgaXNJbml0aWFsLCBib29sIG11c3RIYW5kbGVJbnRlcm5hbGx5LCBib29sIGZvcmNlRG93bmxv
YWQsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG92ZXJyaWRlQ29udGVudFR5
cGUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHN1Z2dlc3RlZFNhdmVOYW1l
KQogewogICAgIHN0b3BDdXJyZW50TG9hZCgpOwogICAgIERlZmVycmVkVGFza0xvYWRNYW51YWxT
Y3JpcHQ6OmZpbmlzaE9yQ2FuY2VsKHRoaXMpOwpAQCAtNjg5LDcgKzY4OCw3IEBAIHZvaWQgV2Vi
UGFnZVByaXZhdGU6OmxvYWQoY29uc3QgY2hhciogdXIKICAgICAgICAgcmVxdWVzdC5zZXRNdXN0
SGFuZGxlSW50ZXJuYWxseSh0cnVlKTsKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QobWV0aG9k
KTsKICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KHRvV2ViQ29yZUNhY2hlUG9saWN5KGNhY2hl
UG9saWN5KSk7Ci0gICAgaWYgKG92ZXJyaWRlQ29udGVudFR5cGUpCisgICAgaWYgKCFvdmVycmlk
ZUNvbnRlbnRUeXBlLmVtcHR5KCkpCiAgICAgICAgIHJlcXVlc3Quc2V0T3ZlcnJpZGVDb250ZW50
VHlwZShvdmVycmlkZUNvbnRlbnRUeXBlKTsKIAogICAgIGlmIChkYXRhKQpAQCAtNzA2LDcgKzcw
NSw3IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmxvYWQoY29uc3QgY2hhciogdXIKICAgICBtX21h
aW5GcmFtZS0+bG9hZGVyKCktPmxvYWQocmVxdWVzdCwgIiIgLyogbmFtZSAqLywgZmFsc2UpOwog
fQogCi12b2lkIFdlYlBhZ2U6OmxvYWQoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiBuZXR3
b3JrVG9rZW4sIGJvb2wgaXNJbml0aWFsKQordm9pZCBXZWJQYWdlOjpsb2FkKGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyYgbmV0d29ya1Rva2VuLCBib29sIGlzSW5pdGlhbCkKIHsKICAgICBkLT5sb2FkKHVy
bCwgbmV0d29ya1Rva2VuLCAiR0VUIiwgUGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90
b2NvbENhY2hlUG9saWN5LCAwLCAwLCAwLCAwLCBpc0luaXRpYWwsIGZhbHNlKTsKIH0KQEAgLTcx
NiwxNSArNzE1LDE1IEBAIHZvaWQgV2ViUGFnZTo6bG9hZEV4dGVuZGVkKGNvbnN0IGNoYXIqIHUK
ICAgICBkLT5sb2FkKHVybCwgbmV0d29ya1Rva2VuLCBtZXRob2QsIGNhY2hlUG9saWN5LCBkYXRh
LCBkYXRhTGVuZ3RoLCBoZWFkZXJzLCBoZWFkZXJzTGVuZ3RoLCBmYWxzZSwgbXVzdEhhbmRsZUlu
dGVybmFsbHksIGZhbHNlLCAiIik7CiB9CiAKLXZvaWQgV2ViUGFnZTo6bG9hZEZpbGUoY29uc3Qg
Y2hhciogcGF0aCwgY29uc3QgY2hhciogb3ZlcnJpZGVDb250ZW50VHlwZSkKK3ZvaWQgV2ViUGFn
ZTo6bG9hZEZpbGUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGF0aCwgY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgb3ZlcnJpZGVDb250ZW50VHlwZSkKIHsK
LSAgICBzdGQ6OnN0cmluZyBmaWxlVXJsKHBhdGgpOwotICAgIGlmICghZmlsZVVybC5maW5kKCIv
IikpCi0gICAgICAgIGZpbGVVcmwuaW5zZXJ0KDAsICJmaWxlOi8vIik7Ci0gICAgZWxzZSBpZiAo
ZmlsZVVybC5maW5kKCJmaWxlOi8vLyIpKQorICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcgZmlsZVVybChwYXRoKTsKKyAgICBpZiAoZmlsZVVybC5zdGFydHNXaXRoKCIvIikpCisgICAg
ICAgIGZpbGVVcmwgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKCJmaWxlOi8vIiwgNykg
KyBmaWxlVXJsOworICAgIGVsc2UgaWYgKCFmaWxlVXJsLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGQtPmxvYWQoZmlsZVVybC5jX3N0cigpLCAwLCAiR0VU
IiwgUGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9saWN5LCAwLCAw
LCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBvdmVycmlkZUNvbnRlbnRUeXBlKTsKKyAgICBk
LT5sb2FkKGZpbGVVcmwsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5n
KCksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcoIkdFVCIsIDMpLCBQbGF0Zm9ybTo6TmV0
d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDAsIDAsIDAsIDAsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIG92ZXJyaWRlQ29udGVudFR5cGUuY19zdHIoKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZTo6ZG93bmxvYWQoY29uc3QgUGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0KQpA
QCAtNzM1LDMwICs3MzQsMzEgQEAgdm9pZCBXZWJQYWdlOjpkb3dubG9hZChjb25zdCBQbGF0Zm9y
bTo6TgogICAgICAgICBoZWFkZXJzLnB1c2hfYmFjayhsaXN0W2ldLmZpcnN0LmNfc3RyKCkpOwog
ICAgICAgICBoZWFkZXJzLnB1c2hfYmFjayhsaXN0W2ldLnNlY29uZC5jX3N0cigpKTsKICAgICB9
Ci0gICAgZC0+bG9hZChyZXF1ZXN0LmdldFVybFJlZigpLmNfc3RyKCksIDAsICJHRVQiLCBQbGF0
Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDAsIDAsIGhlYWRl
cnMuZW1wdHkoKSA/IDAgOiAmaGVhZGVyc1swXSwgaGVhZGVycy5zaXplKCksIGZhbHNlLCBmYWxz
ZSwgdHJ1ZSwgIiIsIHJlcXVlc3QuZ2V0U3VnZ2VzdGVkU2F2ZU5hbWUoKS5jX3N0cigpKTsKKyAg
ICBkLT5sb2FkKHJlcXVlc3QuZ2V0VXJsUmVmKCksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmc6OmVtcHR5U3RyaW5nKCksICJHRVQiLCBQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OlVzZVBy
b3RvY29sQ2FjaGVQb2xpY3ksIDAsIDAsIGhlYWRlcnMuZW1wdHkoKSA/IDAgOiAmaGVhZGVyc1sw
XSwgaGVhZGVycy5zaXplKCksIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgIiIsIHJlcXVlc3QuZ2V0U3Vn
Z2VzdGVkU2F2ZU5hbWUoKS5jX3N0cigpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJpdmF0ZTo6bG9h
ZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsIGNvbnN0IGNoYXIqIGJhc2VVUkwsIGNvbnN0IGNo
YXIqIGNvbnRlbnRUeXBlLCBjb25zdCBjaGFyKiBmYWlsaW5nVVJMKQordm9pZCBXZWJQYWdlUHJp
dmF0ZTo6bG9hZFN0cmluZyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzdHJp
bmcsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiBmYWlsaW5nVVJMKQogewogICAgIEtVUkwga3VybCA9IHBhcnNl
VXJsKGJhc2VVUkwpOwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGt1cmwpOwogICAgIFdU
Rjo6UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyCi0gICAgICAgID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7CisgICAgICAgID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoc3RyaW5nLmNfc3RyKCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgU3Vic3RpdHV0ZURh
dGEgc3Vic3RpdHV0ZURhdGEoYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250
ZW50VHlwZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGluZ1VSTCA/
IHBhcnNlVXJsKGZhaWxpbmdVUkwpIDogS1VSTCgpKTsKKyAgICAgICAgZXh0cmFjdE1JTUVUeXBl
RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSksCisgICAgICAgIGV4dHJhY3RDaGFyc2V0RnJvbU1l
ZGlhVHlwZShjb250ZW50VHlwZSksCisgICAgICAgICFmYWlsaW5nVVJMLmVtcHR5KCkgPyBwYXJz
ZVVybChmYWlsaW5nVVJMKSA6IEtVUkwoKSk7CiAgICAgbV9tYWluRnJhbWUtPmxvYWRlcigpLT5s
b2FkKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhLCBmYWxzZSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6
bG9hZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsIGNvbnN0IGNoYXIqIGJhc2VVUkwsIGNvbnN0
IGNoYXIqIG1pbWVUeXBlLCBjb25zdCBjaGFyKiBmYWlsaW5nVVJMKQordm9pZCBXZWJQYWdlOjps
b2FkU3RyaW5nKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHN0cmluZywgY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgYmFzZVVSTCwgY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcmIGZhaWxpbmdVUkwpCiB7CiAgICAgZC0+bG9hZFN0cmluZyhzdHJpbmcsIGJhc2VV
UkwsIG1pbWVUeXBlLCBmYWlsaW5nVVJMKTsKIH0KIAotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6ZXhl
Y3V0ZUphdmFTY3JpcHQoY29uc3QgY2hhciogc2NyaXB0VVRGOCwgSmF2YVNjcmlwdERhdGFUeXBl
JiByZXR1cm5UeXBlLCBXZWJTdHJpbmcmIHJldHVyblZhbHVlKQorYm9vbCBXZWJQYWdlUHJpdmF0
ZTo6ZXhlY3V0ZUphdmFTY3JpcHQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYg
c2NyaXB0VVRGOCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBXZWJTdHJpbmcmIHJl
dHVyblZhbHVlKQogewotICAgIFN0cmluZyBzY3JpcHQgPSBTdHJpbmc6OmZyb21VVEY4KHNjcmlw
dFVURjgpOworICAgIEJMQUNLQkVSUllfQVNTRVJUKHNjcmlwdFVURjguaXNVdGY4KCkpOworICAg
IFN0cmluZyBzY3JpcHQgPSBzY3JpcHRVVEY4OwogCiAgICAgaWYgKHNjcmlwdC5pc051bGwoKSkg
ewogICAgICAgICByZXR1cm5UeXBlID0gSlNFeGNlcHRpb247CkBAIC04MDUsMjAgKzgwNSwxOCBA
QCBib29sIFdlYlBhZ2VQcml2YXRlOjpleGVjdXRlSmF2YVNjcmlwdChjCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIGlmIChyZXR1cm5UeXBlID09IEpTQm9vbGVhbiB8fCByZXR1cm5UeXBl
ID09IEpTTnVtYmVyIHx8IHJldHVyblR5cGUgPT0gSlNTdHJpbmcgfHwgcmV0dXJuVHlwZSA9PSBK
U09iamVjdCkgewotICAgICAgICBTdHJpbmcgc3RyID0gcmVzdWx0LnRvU3RyaW5nKGV4ZWMpOwot
ICAgICAgICByZXR1cm5WYWx1ZSA9IFdlYlN0cmluZyhzdHIuaW1wbCgpKTsKLSAgICB9CisgICAg
aWYgKHJldHVyblR5cGUgPT0gSlNCb29sZWFuIHx8IHJldHVyblR5cGUgPT0gSlNOdW1iZXIgfHwg
cmV0dXJuVHlwZSA9PSBKU1N0cmluZyB8fCByZXR1cm5UeXBlID09IEpTT2JqZWN0KQorICAgICAg
ICByZXR1cm5WYWx1ZSA9IHJlc3VsdC50b1N0cmluZyhleGVjKTsKIAogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFdlYlBhZ2U6OmV4ZWN1dGVKYXZhU2NyaXB0KGNvbnN0IGNoYXIqIHNjcmlw
dCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBXZWJTdHJpbmcmIHJldHVyblZhbHVl
KQorYm9vbCBXZWJQYWdlOjpleGVjdXRlSmF2YVNjcmlwdChjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiBzY3JpcHQsIEphdmFTY3JpcHREYXRhVHlwZSYgcmV0dXJuVHlwZSwgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcmV0dXJuVmFsdWUpCiB7CiAgICAgcmV0dXJuIGQt
PmV4ZWN1dGVKYXZhU2NyaXB0KHNjcmlwdCwgcmV0dXJuVHlwZSwgcmV0dXJuVmFsdWUpOwogfQog
Ci1ib29sIFdlYlBhZ2VQcml2YXRlOjpleGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZChj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJl
dHVyblR5cGUsIFdlYlN0cmluZyYgcmV0dXJuVmFsdWUpCitib29sIFdlYlBhZ2VQcml2YXRlOjpl
eGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlLCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcmIHJldHVyblZhbHVlKQogewogICAgIGlmICghbV9pc29sYXRlZFdvcmxk
KQogICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBtX21haW5GcmFtZS0+c2NyaXB0KCktPmNyZWF0
ZVdvcmxkKCk7CkBAIC04NTgsMTUgKzg1NiwxMyBAQCBib29sIFdlYlBhZ2VQcml2YXRlOjpleGVj
dXRlSmF2YVNjcmlwdEluCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChyZXR1cm5U
eXBlID09IEpTQm9vbGVhbiB8fCByZXR1cm5UeXBlID09IEpTTnVtYmVyIHx8IHJldHVyblR5cGUg
PT0gSlNTdHJpbmcgfHwgcmV0dXJuVHlwZSA9PSBKU09iamVjdCkgewotICAgICAgICBTdHJpbmcg
c3RyID0gcmVzdWx0LnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICByZXR1cm5WYWx1ZSA9IFdlYlN0
cmluZyhzdHIuaW1wbCgpKTsKLSAgICB9CisgICAgaWYgKHJldHVyblR5cGUgPT0gSlNCb29sZWFu
IHx8IHJldHVyblR5cGUgPT0gSlNOdW1iZXIgfHwgcmV0dXJuVHlwZSA9PSBKU1N0cmluZyB8fCBy
ZXR1cm5UeXBlID09IEpTT2JqZWN0KQorICAgICAgICByZXR1cm5WYWx1ZSA9IHJlc3VsdC50b1N0
cmluZyhleGVjKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYlBhZ2U6OmV4ZWN1
dGVKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IHN0ZDo6d3N0cmluZyYgc2NyaXB0LCBK
YXZhU2NyaXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIFdlYlN0cmluZyYgcmV0dXJuVmFsdWUpCiti
b29sIFdlYlBhZ2U6OmV4ZWN1dGVKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IHN0ZDo6
d3N0cmluZyYgc2NyaXB0LCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIHJldHVyblZhbHVlKQogewogICAgIC8vIE9uIG91ciBwbGF0
Zm9ybSB3Y2hhcl90IGlzIHVuc2lnbmVkIGludCBhbmQgVUNoYXIgaXMgdW5zaWduZWQgc2hvcnQK
ICAgICAvLyBzbyB3ZSBoYXZlIHRvIGNvbnZlcnQgdXNpbmcgSUNVIGNvbnZlcnNpb24gZnVuY3Rp
b24KQEAgLTg4NywxMyArODgzLDE0IEBAIGJvb2wgV2ViUGFnZTo6ZXhlY3V0ZUphdmFTY3JpcHRJ
bklzb2xhdGUKICAgICByZXR1cm4gZC0+ZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQo
c291cmNlQ29kZSwgcmV0dXJuVHlwZSwgcmV0dXJuVmFsdWUpOwogfQogCi1ib29sIFdlYlBhZ2U6
OmV4ZWN1dGVKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IGNoYXIqIHNjcmlwdCwgSmF2
YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBXZWJTdHJpbmcmIHJldHVyblZhbHVlKQorYm9v
bCBXZWJQYWdlOjpleGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzY3JpcHRVVEY4LCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJl
dHVyblR5cGUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHJldHVyblZhbHVlKQogewot
ICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZShTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCks
IEtVUkwoKSk7CisgICAgQkxBQ0tCRVJSWV9BU1NFUlQoc2NyaXB0VVRGOC5pc1V0ZjgoKSk7Cisg
ICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdFVURjgsIEtVUkwoKSk7CiAgICAg
cmV0dXJuIGQtPmV4ZWN1dGVKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHNvdXJjZUNvZGUsIHJl
dHVyblR5cGUsIHJldHVyblZhbHVlKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpleGVjdXRlSmF2YVNj
cmlwdEZ1bmN0aW9uKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmZnVuY3Rpb24sIGNv
bnN0IHN0ZDo6dmVjdG9yPEphdmFTY3JpcHRWYXJpYW50PiAmYXJncywgSmF2YVNjcmlwdFZhcmlh
bnQmIHJldHVyblZhbHVlKQordm9pZCBXZWJQYWdlOjpleGVjdXRlSmF2YVNjcmlwdEZ1bmN0aW9u
KGNvbnN0IHN0ZDo6dmVjdG9yPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+ICZmdW5jdGlv
biwgY29uc3Qgc3RkOjp2ZWN0b3I8SmF2YVNjcmlwdFZhcmlhbnQ+ICZhcmdzLCBKYXZhU2NyaXB0
VmFyaWFudCYgcmV0dXJuVmFsdWUpCiB7CiAgICAgaWYgKCFkLT5tX21haW5GcmFtZSkgewogICAg
ICAgICByZXR1cm5WYWx1ZS5zZXRUeXBlKEphdmFTY3JpcHRWYXJpYW50OjpFeGNlcHRpb24pOwpA
QCAtMTAxNSw3ICsxMDEyLDcgQEAgdm9pZCBXZWJQYWdlOjplbmFibGVDcm9zc1NpdGVYSFIoKQog
ICAgIGQtPmVuYWJsZUNyb3NzU2l0ZVhIUigpOwogfQogCi12b2lkIFdlYlBhZ2VQcml2YXRlOjph
ZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBjaGFyKiBzb3VyY2VPcmlnaW4sIGNv
bnN0IGNoYXIqIGRlc3RpbmF0aW9uT3JpZ2luLCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zKQordm9pZCBXZWJQYWdlUHJpdmF0ZTo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
Y29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgc291cmNlT3JpZ2luLCBjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBkZXN0aW5hdGlvbk9yaWdpbiwgYm9vbCBhbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNv
dXJjZSA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZU9yaWdpbik7CiAg
ICAgaWYgKHNvdXJjZS0+aXNVbmlxdWUoKSkKQEAgLTEwMjUsMTIgKzEwMjIsMTIgQEAgdm9pZCBX
ZWJQYWdlUHJpdmF0ZTo6YWRkT3JpZ2luQWNjZXNzV2hpdAogICAgIFNlY3VyaXR5UG9saWN5Ojph
ZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSgqc291cmNlLCBkZXN0aW5hdGlvbi5wcm90b2Nv
bCgpLCBkZXN0aW5hdGlvbi5ob3N0KCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKIH0K
IAotdm9pZCBXZWJQYWdlOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBjaGFy
KiBzb3VyY2VPcmlnaW4sIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uT3JpZ2luLCBib29sIGFsbG93
RGVzdGluYXRpb25TdWJkb21haW5zKQordm9pZCBXZWJQYWdlOjphZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzb3VyY2VPcmln
aW4sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGRlc3RpbmF0aW9uT3JpZ2lu
LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKQogewogICAgIGQtPmFkZE9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KHNvdXJjZU9yaWdpbiwgZGVzdGluYXRpb25PcmlnaW4sIGFsbG93
RGVzdGluYXRpb25TdWJkb21haW5zKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJpdmF0ZTo6cmVtb3Zl
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgY2hhciogc291cmNlT3JpZ2luLCBjb25z
dCBjaGFyKiBkZXN0aW5hdGlvbk9yaWdpbiwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cykKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5
KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHNvdXJjZU9yaWdpbiwgY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZGVzdGluYXRpb25PcmlnaW4sIGJvb2wgYWxs
b3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBz
b3VyY2UgPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhzb3VyY2VPcmlnaW4pOwog
ICAgIGlmIChzb3VyY2UtPmlzVW5pcXVlKCkpCkBAIC0xMDQwLDcgKzEwMzcsNyBAQCB2b2lkIFdl
YlBhZ2VQcml2YXRlOjpyZW1vdmVPcmlnaW5BY2Nlc3NXCiAgICAgU2VjdXJpdHlQb2xpY3k6OnJl
bW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KCpzb3VyY2UsIGRlc3RpbmF0aW9uLnByb3Rv
Y29sKCksIGRlc3RpbmF0aW9uLmhvc3QoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwog
fQogCi12b2lkIFdlYlBhZ2U6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0
IGNoYXIqIHNvdXJjZU9yaWdpbiwgY29uc3QgY2hhciogZGVzdGluYXRpb25PcmlnaW4sIGJvb2wg
YWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCit2b2lkIFdlYlBhZ2U6OnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHNv
dXJjZU9yaWdpbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZGVzdGluYXRp
b25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7CiAgICAgZC0+cmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoc291cmNlT3JpZ2luLCBkZXN0aW5hdGlvbk9y
aWdpbiwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogfQpAQCAtMjE5Nyw5ICsyMTk0LDkg
QEAgYm9vbCBXZWJQYWdlUHJpdmF0ZTo6aXNBY3RpdmUoKSBjb25zdAogCiB2b2lkIFdlYlBhZ2VQ
cml2YXRlOjphdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCBDcmVkZW50aWFsJiBpbnB1dENy
ZWRlbnRpYWwpCiB7Ci0gICAgV2ViU3RyaW5nIHVzZXJuYW1lOwotICAgIFdlYlN0cmluZyBwYXNz
d29yZDsKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXIqIGF1dGhtZ3IgPSBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZU1hbmFnZXI6Omluc3RhbmNlKCk7CisgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyB1c2VybmFtZTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nIHBhc3N3b3JkOwogCiAjaWYgIWRlZmluZWQoUFVCTElDX0JVSUxEKSB8fCAhUFVCTElDX0JV
SUxECiAgICAgaWYgKG1fZHVtcFJlbmRlclRyZWUpIHsKQEAgLTIyNDAsMTQgKzIyMzcsMTQgQEAg
UGFnZUNsaWVudEJsYWNrQmVycnk6OlNhdmVDcmVkZW50aWFsVHlwZQogCiB2b2lkIFdlYlBhZ2VQ
cml2YXRlOjpzeW5jUHJveHlDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpCiB7Ci0gICAgbV9jbGllbnQtPnN5bmNQcm94eUNyZWRlbnRpYWwoY3JlZGVudGlh
bC51c2VyKCkudXRmOCgpLmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRh
KCkpOworICAgIG1fY2xpZW50LT5zeW5jUHJveHlDcmVkZW50aWFsKGNyZWRlbnRpYWwudXNlcigp
LCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpub3Rp
ZnlQb3B1cEF1dG9maWxsRGlhbG9nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjYW5kaWRhdGVzLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JlZW5SZWN0KQogewotICAgIHZlY3RvcjxzdHJpbmc+
IHRleHRJdGVtczsKKyAgICB2ZWN0b3I8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4gdGV4
dEl0ZW1zOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5zaXplKCk7IGkr
KykKLSAgICAgICAgdGV4dEl0ZW1zLnB1c2hfYmFjayhjYW5kaWRhdGVzW2ldLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICB0ZXh0SXRlbXMucHVzaF9iYWNrKGNhbmRpZGF0ZXNbaV0pOwogICAgIG1f
Y2xpZW50LT5ub3RpZnlQb3B1cEF1dG9maWxsRGlhbG9nKHRleHRJdGVtcywgc2NyZWVuUmVjdCk7
CiB9CiAKQEAgLTIyOTYsMTAgKzIyOTMsMTAgQEAgUGxhdGZvcm06OldlYkNvbnRleHQgV2ViUGFn
ZVByaXZhdGU6OndlYgogCiAgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gZmluZFBhdHRlcm5TdHJp
bmdGb3JVcmwoaHJlZik7CiAgICAgICAgIGlmICghcGF0dGVybi5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250ZXh0LnNldFBhdHRlcm4ocGF0dGVybi51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQuc2V0UGF0dGVybihwYXR0ZXJuKTsKIAogICAgICAgICBpZiAoIWhyZWYuc3Ry
aW5nKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFVybChocmVmLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRVcmwoaHJlZi5zdHJp
bmcoKSk7CiAKICAgICAgICAgICAgIC8vIExpbmtzIGFyZSBub24tc2VsZWN0YWJsZSBieSBkZWZh
dWx0LCBidXQgc2VsZWN0aW9uIHNob3VsZCBiZSBhbGxvd2VkCiAgICAgICAgICAgICAvLyBwcm92
aWRpbmcgdGhlIHBhZ2UgaXMgc2VsZWN0YWJsZSwgdXNlIHRoZSBwYXJlbnQgdG8gZGV0ZXJtaW5l
IGl0LgpAQCAtMjMyNiwxMiArMjMyMywxMiBAQCBQbGF0Zm9ybTo6V2ViQ29udGV4dCBXZWJQYWdl
UHJpdmF0ZTo6d2ViCiAgICAgICAgICAgICBpZiAoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291
cmNlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGNhY2hlZFJlc291cmNlLT5pc0xvYWRlZCgpICYmIGNhY2hlZFJlc291cmNlLT5kYXRhKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVybCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhpbWFnZUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIp
LnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRTcmMobm9kZS0+ZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5zZXRTcmMobm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwodXJsKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgU3RyaW5nIGFsdCA9IGltYWdlRWxlbWVudC0+YWx0VGV4dCgpOwogICAgICAgICAg
ICAgaWYgKCFhbHQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRBbHQoYWx0
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QWx0KGFsdCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAobWVkaWFFbGVtZW50KSB7CkBAIC0yMzQxLDE0ICsyMzM4
LDE0IEBAIFBsYXRmb3JtOjpXZWJDb250ZXh0IFdlYlBhZ2VQcml2YXRlOjp3ZWIKICAgICAgICAg
ICAgICAgICBjb250ZXh0LnNldEZsYWcoUGxhdGZvcm06OldlYkNvbnRleHQ6OklzVmlkZW8pOwog
CiAgICAgICAgICAgICBTdHJpbmcgc3JjID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3Bh
Y2VzKG1lZGlhRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikuc3RyaW5n
KCkpOwotICAgICAgICAgICAgY29udGV4dC5zZXRTcmMobm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoc3JjKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQu
c2V0U3JjKG5vZGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHNyYykuc3RyaW5nKCkpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICBU
ZXh0KiBjdXJUZXh0ID0gdG9UZXh0KG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAoIWN1clRleHQt
Pndob2xlVGV4dCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRleHQuc2V0VGV4dChjdXJU
ZXh0LT53aG9sZVRleHQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0
VGV4dChjdXJUZXh0LT53aG9sZVRleHQoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjYW5TdGFydFNl
bGVjdGlvbiA9IG5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCk7CkBAIC0yMzU5LDcgKzIzNTYsNyBA
QCBQbGF0Zm9ybTo6V2ViQ29udGV4dCBXZWJQYWdlUHJpdmF0ZTo6d2ViCiAgICAgICAgIFN0cmlu
ZyB3ZWJXb3Jrc0NvbnRleHQoRE9NU3VwcG9ydDo6d2ViV29ya3NDb250ZXh0KGVsZW1lbnQpKTsK
ICAgICAgICAgaWYgKCF3ZWJXb3Jrc0NvbnRleHQuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBjb250ZXh0LnNldEZsYWcoUGxhdGZvcm06OldlYkNvbnRleHQ6Oklz
V2ViV29ya3NDb250ZXh0KTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0V2ViV29ya3NDb250ZXh0
KHdlYldvcmtzQ29udGV4dC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0
V2ViV29ya3NDb250ZXh0KHdlYldvcmtzQ29udGV4dCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoRE9NU3VwcG9ydDo6aXNUZXh0QmFzZWRDb250ZW50RWRpdGFibGVFbGVtZW50KGVsZW1lbnQp
KSB7CkBAIC0yMzc4LDcgKzIzNzUsNyBAQCBQbGF0Zm9ybTo6V2ViQ29udGV4dCBXZWJQYWdlUHJp
dmF0ZTo6d2ViCiAKICAgICAgICAgICAgIFN0cmluZyBlbGVtZW50VGV4dChET01TdXBwb3J0Ojpp
bnB1dEVsZW1lbnRUZXh0KGVsZW1lbnQpKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudFRleHQu
c3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0
VGV4dChlbGVtZW50VGV4dC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LnNldFRleHQoZWxlbWVudFRleHQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMzQwLDcgKzMz
MzcsNyBAQCBpbnQgV2ViUGFnZTo6aW5wdXRDYXJldFBvc2l0aW9uKCkgY29uc3QKIAogY2xhc3Mg
RGVmZXJyZWRUYXNrUG9wdXBMaXN0U2VsZWN0TXVsdGlwbGU6IHB1YmxpYyBEZWZlcnJlZFRhc2s8
JldlYlBhZ2VQcml2YXRlOjptX3dvdWxkUG9wdXBMaXN0U2VsZWN0TXVsdGlwbGU+IHsKIHB1Ymxp
YzoKLSAgICBEZWZlcnJlZFRhc2tQb3B1cExpc3RTZWxlY3RNdWx0aXBsZShXZWJQYWdlUHJpdmF0
ZSogd2ViUGFnZVByaXZhdGUsIGludCBzaXplLCBjb25zdCBib29sKiBzZWxlY3RlZHMpIAorICAg
IERlZmVycmVkVGFza1BvcHVwTGlzdFNlbGVjdE11bHRpcGxlKFdlYlBhZ2VQcml2YXRlKiB3ZWJQ
YWdlUHJpdmF0ZSwgaW50IHNpemUsIGNvbnN0IGJvb2wqIHNlbGVjdGVkcykKICAgICAgICAgOiBE
ZWZlcnJlZFRhc2tUeXBlKHdlYlBhZ2VQcml2YXRlKQogICAgIHsKICAgICAgICAgd2ViUGFnZVBy
aXZhdGUtPm1fY2FjaGVkUG9wdXBMaXN0U2VsZWN0ZWRzLmFwcGVuZChzZWxlY3RlZHMsIHNpemUp
OwpAQCAtMzM5MCw3ICszMzg3LDcgQEAgdm9pZCBXZWJQYWdlOjpwb3B1cExpc3RDbG9zZWQoaW50
IGluZGV4KQogCiBjbGFzcyBEZWZlcnJlZFRhc2tTZXREYXRlVGltZUlucHV0OiBwdWJsaWMgRGVm
ZXJyZWRUYXNrPCZXZWJQYWdlUHJpdmF0ZTo6bV93b3VsZFNldERhdGVUaW1lSW5wdXQ+IHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBEZWZlcnJlZFRhc2tTZXREYXRlVGltZUlucHV0KFdlYlBhZ2VQ
cml2YXRlKiB3ZWJQYWdlUHJpdmF0ZSwgV2ViU3RyaW5nIHZhbHVlKQorICAgIGV4cGxpY2l0IERl
ZmVycmVkVGFza1NldERhdGVUaW1lSW5wdXQoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRl
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIHZhbHVlKQogICAgICAgICA6IERlZmVycmVk
VGFza1R5cGUod2ViUGFnZVByaXZhdGUpCiAgICAgewogICAgICAgICB3ZWJQYWdlUHJpdmF0ZS0+
bV9jYWNoZWREYXRlVGltZUlucHV0ID0gdmFsdWU7CkBAIC0zNDAyLDE5ICszMzk5LDE5IEBAIHBy
aXZhdGU6CiAgICAgfQogfTsKIAotdm9pZCBXZWJQYWdlOjpzZXREYXRlVGltZUlucHV0KGNvbnN0
IFdlYlN0cmluZyYgdmFsdWUpCit2b2lkIFdlYlBhZ2U6OnNldERhdGVUaW1lSW5wdXQoY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKGQtPm1fcGFn
ZS0+ZGVmZXJzTG9hZGluZygpKSB7CiAgICAgICAgIGQtPm1fZGVmZXJyZWRUYXNrcy5hcHBlbmQo
YWRvcHRQdHIobmV3IERlZmVycmVkVGFza1NldERhdGVUaW1lSW5wdXQoZCwgdmFsdWUpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgRGVmZXJyZWRUYXNrU2V0RGF0ZVRpbWVJbnB1dDo6
ZmluaXNoT3JDYW5jZWwoZCk7Ci0gICAgZC0+bV9pbnB1dEhhbmRsZXItPnNldElucHV0VmFsdWUo
U3RyaW5nKHZhbHVlLmltcGwoKSkpOworICAgIGQtPm1faW5wdXRIYW5kbGVyLT5zZXRJbnB1dFZh
bHVlKHZhbHVlKTsKIH0KIAogY2xhc3MgRGVmZXJyZWRUYXNrU2V0Q29sb3JJbnB1dDogcHVibGlj
IERlZmVycmVkVGFzazwmV2ViUGFnZVByaXZhdGU6Om1fd291bGRTZXRDb2xvcklucHV0PiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgRGVmZXJyZWRUYXNrU2V0Q29sb3JJbnB1dChXZWJQYWdlUHJp
dmF0ZSogd2ViUGFnZVByaXZhdGUsIFdlYlN0cmluZyB2YWx1ZSkKKyAgICBleHBsaWNpdCBEZWZl
cnJlZFRhc2tTZXRDb2xvcklucHV0KFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlUHJpdmF0ZSwgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyB2YWx1ZSkKICAgICAgICAgOiBEZWZlcnJlZFRhc2tU
eXBlKHdlYlBhZ2VQcml2YXRlKQogICAgIHsKICAgICAgICAgd2ViUGFnZVByaXZhdGUtPm1fY2Fj
aGVkQ29sb3JJbnB1dCA9IHZhbHVlOwpAQCAtMzQyNiwxNCArMzQyMywxNCBAQCBwcml2YXRlOgog
ICAgIH0KIH07CiAKLXZvaWQgV2ViUGFnZTo6c2V0Q29sb3JJbnB1dChjb25zdCBXZWJTdHJpbmcm
IHZhbHVlKQordm9pZCBXZWJQYWdlOjpzZXRDb2xvcklucHV0KGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChkLT5tX3BhZ2UtPmRlZmVyc0xvYWRp
bmcoKSkgewogICAgICAgICBkLT5tX2RlZmVycmVkVGFza3MuYXBwZW5kKGFkb3B0UHRyKG5ldyBE
ZWZlcnJlZFRhc2tTZXRDb2xvcklucHV0KGQsIHZhbHVlKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIERlZmVycmVkVGFza1NldENvbG9ySW5wdXQ6OmZpbmlzaE9yQ2FuY2VsKGQpOwot
ICAgIGQtPm1faW5wdXRIYW5kbGVyLT5zZXRJbnB1dFZhbHVlKFN0cmluZyh2YWx1ZS5pbXBsKCkp
KTsKKyAgICBkLT5tX2lucHV0SGFuZGxlci0+c2V0SW5wdXRWYWx1ZSh2YWx1ZSk7CiB9CiAKIHZv
aWQgV2ViUGFnZTo6c2V0VmlydHVhbFZpZXdwb3J0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
CkBAIC00MjY1LDcgKzQyNjIsNyBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpjbGVhckZvY3VzTm9k
ZSgpCiAgICAgICAgIGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2Vk
Tm9kZSgwLCBmcmFtZSk7CiB9CiAKLVdlYlN0cmluZyBXZWJQYWdlOjp0ZXh0RW5jb2RpbmcoKQor
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBXZWJQYWdlOjp0ZXh0RW5jb2RpbmcoKQogewog
ICAgIEZyYW1lKiBmcmFtZSA9IGQtPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCkBAIC00Mjc4LDIyICs0Mjc1LDIyIEBAIFdlYlN0cmluZyBXZWJQYWdlOjp0ZXh0RW5jb2Rp
bmcoKQogICAgIHJldHVybiBkb2N1bWVudC0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygp
OwogfQogCi1XZWJTdHJpbmcgV2ViUGFnZTo6Zm9yY2VkVGV4dEVuY29kaW5nKCkKK0JsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViUGFnZTo6Zm9yY2VkVGV4dEVuY29kaW5nKCkKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBkLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1l
KQotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nOjplbXB0eVN0cmluZygpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuICIiOwor
ICAgICAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmco
KTsKIAogICAgIHJldHVybiBkb2N1bWVudC0+bG9hZGVyKCktPm92ZXJyaWRlRW5jb2RpbmcoKTsK
IH0KIAotdm9pZCBXZWJQYWdlOjpzZXRGb3JjZWRUZXh0RW5jb2RpbmcoY29uc3QgY2hhciogZW5j
b2RpbmcpCit2b2lkIFdlYlBhZ2U6OnNldEZvcmNlZFRleHRFbmNvZGluZyhjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBlbmNvZGluZykKIHsKLSAgICBpZiAoZW5jb2RpbmcgJiYg
ZC0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkgJiYgZC0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmxvYWRl
cigpICYmIGQtPmZvY3VzZWRPck1haW5GcmFtZSgpLT5sb2FkZXIoKSkKKyAgICBpZiAoIWVuY29k
aW5nLmVtcHR5KCkgJiYgZC0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkgJiYgZC0+Zm9jdXNlZE9yTWFp
bkZyYW1lKCktPmxvYWRlcigpICYmIGQtPmZvY3VzZWRPck1haW5GcmFtZSgpLT5sb2FkZXIoKSkK
ICAgICAgICAgcmV0dXJuIGQtPmZvY3VzZWRPck1haW5GcmFtZSgpLT5sb2FkZXIoKS0+cmVsb2Fk
V2l0aE92ZXJyaWRlRW5jb2RpbmcoZW5jb2RpbmcpOwogfQogCkBAIC00NDYxLDI3ICs0NDU4LDI3
IEBAIGJvb2wgV2ViUGFnZTo6c2VsZWN0aW9uQ29udGFpbnMoY29uc3QgUGwKICAgICByZXR1cm4g
ZC0+bV9zZWxlY3Rpb25IYW5kbGVyLT5zZWxlY3Rpb25Db250YWlucyhkLT5tYXBGcm9tVHJhbnNm
b3JtZWQocG9pbnQpKTsKIH0KIAotV2ViU3RyaW5nIFdlYlBhZ2U6OnRpdGxlKCkgY29uc3QKK0Js
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViUGFnZTo6dGl0bGUoKSBjb25zdAogewogICAg
IGlmIChkLT5tX21haW5GcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGQtPm1fbWFp
bkZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS5zdHJpbmcoKTsKLSAg
ICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmc6OmVtcHR5U3RyaW5nKCk7CiB9CiAKLVdlYlN0cmluZyBXZWJQYWdlOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAorQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBXZWJQYWdlOjpzZWxlY3Rl
ZFRleHQoKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX3NlbGVjdGlvbkhhbmRsZXItPnNlbGVj
dGVkVGV4dCgpOwogfQogCi1XZWJTdHJpbmcgV2ViUGFnZTo6Y3V0U2VsZWN0ZWRUZXh0KCkKK0Js
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViUGFnZTo6Y3V0U2VsZWN0ZWRUZXh0KCkKIHsK
LSAgICBXZWJTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gZC0+bV9zZWxlY3Rpb25IYW5kbGVyLT5zZWxl
Y3RlZFRleHQoKTsKLSAgICBpZiAoIWQtPm1fcGFnZS0+ZGVmZXJzTG9hZGluZygpICYmICFzZWxl
Y3RlZFRleHQuaXNFbXB0eSgpKQorICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgc2Vs
ZWN0ZWRUZXh0ID0gZC0+bV9zZWxlY3Rpb25IYW5kbGVyLT5zZWxlY3RlZFRleHQoKTsKKyAgICBp
ZiAoIWQtPm1fcGFnZS0+ZGVmZXJzTG9hZGluZygpICYmICFzZWxlY3RlZFRleHQuZW1wdHkoKSkK
ICAgICAgICAgZC0+bV9pbnB1dEhhbmRsZXItPmRlbGV0ZVNlbGVjdGlvbigpOwogICAgIHJldHVy
biBzZWxlY3RlZFRleHQ7CiB9CiAKLXZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBXZWJT
dHJpbmcmIHN0cmluZykKK3ZvaWQgV2ViUGFnZTo6aW5zZXJ0VGV4dChjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKGQtPm1fcGFnZS0+ZGVmZXJz
TG9hZGluZygpKQogICAgICAgICByZXR1cm47CkBAIC01MDczLDYgKzUwNzAsNyBAQCB2b2lkIFdl
YlBhZ2U6OmdldEJhY2tGb3J3YXJkTGlzdChTaGFyZWRBCiAgICAgICAgIHJlc3VsdEVudHJ5Lmxh
c3RWaXNpdFdhc0hUVFBOb25HZXQgPSBlbnRyeS0+bGFzdFZpc2l0V2FzSFRUUE5vbkdldCgpOwog
ICAgICAgICByZXN1bHRFbnRyeS5pZCA9IGJhY2tGb3J3YXJkSWRGcm9tSGlzdG9yeUl0ZW0oZW50
cnkuZ2V0KCkpOwogCisgICAgICAgIC8vIEZJWE1FOiBzZWVtcyB3ZSBjYW4gcmVtb3ZlIHRoaXMg
bm93PwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIEhpc3RvcnlJdGVtIGlzIG5vdCBkaXNwb3Nl
ZCB3aGlsZSB0aGUgcmVzdWx0IGxpc3QgaXMgc3RpbGwgYmVpbmcgdXNlZCwgdG8gbWFrZSBzdXJl
IHRoZSBwb2ludGVyIGlzIG5vdCByZXVzZWQKICAgICAgICAgLy8gd2lsbCBiZSBiYWxhbmNlZCBi
eSBkZXJlZiBpbiByZWxlYXNlQmFja0ZvcndhcmRFbnRyeS4KICAgICAgICAgZW50cnktPnJlZigp
OwpAQCAtNTM4Myw3ICs1MzgxLDcgQEAgdm9pZCBXZWJQYWdlOjpvbk5ldHdvcmtBdmFpbGFiaWxp
dHlDaGFuZwogICAgIHVwZGF0ZU9ubGluZVN0YXR1cyhhdmFpbGFibGUpOwogfQogCi12b2lkIFdl
YlBhZ2U6Om9uQ2VydGlmaWNhdGVTdG9yZUxvY2F0aW9uU2V0KGNvbnN0IFdlYlN0cmluZyYgY2FQ
YXRoKQordm9pZCBXZWJQYWdlOjpvbkNlcnRpZmljYXRlU3RvcmVMb2NhdGlvblNldChjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBjYVBhdGgpCiB7CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Q2VydGlmaWNhdGVQYXRoKGNhUGF0aCk7CkBA
IC01NDM1LDEwICs1NDMzLDkgQEAgdm9pZCBXZWJQYWdlOjpkaXNhYmxlUGFzc3dvcmRFY2hvKCkK
ICAgICBkLT5tX3BhZ2UtPnNldHRpbmdzKCktPnNldFBhc3N3b3JkRWNob0VuYWJsZWQoZmFsc2Up
OwogfQogCi12b2lkIFdlYlBhZ2U6OmRpc3BhdGNoSW5zcGVjdG9yTWVzc2FnZShjb25zdCBzdGQ6
OnN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV2ViUGFnZTo6ZGlzcGF0Y2hJbnNwZWN0b3JNZXNzYWdl
KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgU3Ry
aW5nIHN0cmluZ01lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UuZGF0YSgpLCBtZXNz
YWdlLmxlbmd0aCgpKTsKLSAgICBkLT5tX3BhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlz
cGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKHN0cmluZ01lc3NhZ2UpOworICAgIGQtPm1fcGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2Fn
ZSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6aW5zcGVjdEN1cnJlbnRDb250ZXh0RWxlbWVudCgpCkBA
IC02MDE5LDI2ICs2MDE2LDI2IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmRpZENoYW5nZVNldHRp
bmdzKFcKICAgICBjb3JlU2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKHdlYlNldHRp
bmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpKTsKICAgICBjb3JlU2V0dGluZ3MtPnNldERlZmF1
bHRGb250U2l6ZSh3ZWJTZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCkpOwogICAgIGNvcmVTZXR0
aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSh3ZWJTZXR0aW5ncy0+bWluaW11bUZvbnRT
aXplKCkpOwotICAgIGlmICghd2ViU2V0dGluZ3MtPnNlcmlmRm9udEZhbWlseSgpLmlzRW1wdHko
KSkKLSAgICAgICAgY29yZVNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkod2ViU2V0dGluZ3Mt
PnNlcmlmRm9udEZhbWlseSgpLmltcGwoKSk7Ci0gICAgaWYgKCF3ZWJTZXR0aW5ncy0+Zml4ZWRG
b250RmFtaWx5KCkuaXNFbXB0eSgpKQotICAgICAgICBjb3JlU2V0dGluZ3MtPnNldEZpeGVkRm9u
dEZhbWlseSh3ZWJTZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCkuaW1wbCgpKTsKLSAgICBpZiAo
IXdlYlNldHRpbmdzLT5zYW5zU2VyaWZGb250RmFtaWx5KCkuaXNFbXB0eSgpKQotICAgICAgICBj
b3JlU2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkod2ViU2V0dGluZ3MtPnNhbnNTZXJp
ZkZvbnRGYW1pbHkoKS5pbXBsKCkpOwotICAgIGlmICghd2ViU2V0dGluZ3MtPnN0YW5kYXJkRm9u
dEZhbWlseSgpLmlzRW1wdHkoKSkKLSAgICAgICAgY29yZVNldHRpbmdzLT5zZXRTdGFuZGFyZEZv
bnRGYW1pbHkod2ViU2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpLmltcGwoKSk7CisgICAg
aWYgKCF3ZWJTZXR0aW5ncy0+c2VyaWZGb250RmFtaWx5KCkuZW1wdHkoKSkKKyAgICAgICAgY29y
ZVNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoU3RyaW5nKHdlYlNldHRpbmdzLT5zZXJpZkZv
bnRGYW1pbHkoKSkpOworICAgIGlmICghd2ViU2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpLmVt
cHR5KCkpCisgICAgICAgIGNvcmVTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KFN0cmluZyh3
ZWJTZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCkpKTsKKyAgICBpZiAoIXdlYlNldHRpbmdzLT5z
YW5zU2VyaWZGb250RmFtaWx5KCkuZW1wdHkoKSkKKyAgICAgICAgY29yZVNldHRpbmdzLT5zZXRT
YW5zU2VyaWZGb250RmFtaWx5KFN0cmluZyh3ZWJTZXR0aW5ncy0+c2Fuc1NlcmlmRm9udEZhbWls
eSgpKSk7CisgICAgaWYgKCF3ZWJTZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCkuZW1wdHko
KSkKKyAgICAgICAgY29yZVNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoU3RyaW5nKHdl
YlNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKSkpOwogICAgIGNvcmVTZXR0aW5ncy0+c2V0
SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSh3ZWJTZXR0aW5ncy0+Y2FuSmF2
YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21hdGljYWxseSgpKTsKICAgICBjb3JlU2V0dGluZ3MtPnNl
dEFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKHdlYlNldHRpbmdzLT5jYW5KYXZhU2NyaXB0T3Bl
bldpbmRvd3NBdXRvbWF0aWNhbGx5KCkpOyAvLyBXaHkgYXJlIHdlIHVzaW5nIHRoZSBzYW1lIHZh
bHVlIGFzIHNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoKT8KICAgICBj
b3JlU2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHdlYlNldHRpbmdzLT5hcmVQbHVnaW5zRW5h
YmxlZCgpKTsKLSAgICBjb3JlU2V0dGluZ3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKHdl
YlNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLmltcGwoKSk7CisgICAgY29yZVNl
dHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSh3ZWJTZXR0aW5ncy0+ZGVmYXVsdFRl
eHRFbmNvZGluZ05hbWUoKSk7CiAgICAgY29yZVNldHRpbmdzLT5zZXREb3dubG9hZGFibGVCaW5h
cnlGb250c0VuYWJsZWQod2ViU2V0dGluZ3MtPmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxl
ZCgpKTsKICAgICBjb3JlU2V0dGluZ3MtPnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChtX3dl
YlNldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpKTsKICAgICBjb3JlU2V0dGlu
Z3MtPnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKG1fd2ViU2V0dGluZ3MtPmlz
QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSk7CiAKLSAgICBXZWJTdHJpbmcgc3R5
bGVzaGVldFVSTCA9IHdlYlNldHRpbmdzLT51c2VyU3R5bGVTaGVldFN0cmluZygpOwotICAgIGlm
IChzdHlsZXNoZWV0VVJMLmlzRW1wdHkoKSkKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nIHN0eWxlc2hlZXRVUkwgPSB3ZWJTZXR0aW5ncy0+dXNlclN0eWxlU2hlZXRTdHJpbmcoKTsK
KyAgICBpZiAoc3R5bGVzaGVldFVSTC5lbXB0eSgpKQogICAgICAgICBzdHlsZXNoZWV0VVJMID0g
d2ViU2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKLSAgICBpZiAoIXN0eWxlc2hl
ZXRVUkwuaXNFbXB0eSgpKQorICAgIGlmICghc3R5bGVzaGVldFVSTC5lbXB0eSgpKQogICAgICAg
ICBjb3JlU2V0dGluZ3MtPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oS1VSTChLVVJMKCksIHN0
eWxlc2hlZXRVUkwpKTsKIAogICAgIGNvcmVTZXR0aW5ncy0+c2V0Rmlyc3RTY2hlZHVsZWRMYXlv
dXREZWxheSh3ZWJTZXR0aW5ncy0+Zmlyc3RTY2hlZHVsZWRMYXlvdXREZWxheSgpKTsKQEAgLTYw
NDksMTQgKzYwNDYsMTQgQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6ZGlkQ2hhbmdlU2V0dGluZ3Mo
VwogICAgIC8vIG1ha2Ugc2Vuc2UgdG8gY2hhbmdlIGRhdGFiYXNlIHBhdGggYWZ0ZXIgRGF0YWJh
c2VUcmFja2VyIGhhcwogICAgIC8vIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KICAgICBzdGF0
aWMgYm9vbCBkYmluaXQgPSBmYWxzZTsKLSAgICBpZiAoIWRiaW5pdCAmJiAhd2ViU2V0dGluZ3Mt
PmRhdGFiYXNlUGF0aCgpLmlzRW1wdHkoKSkgeworICAgIGlmICghZGJpbml0ICYmICF3ZWJTZXR0
aW5ncy0+ZGF0YWJhc2VQYXRoKCkuZW1wdHkoKSkgewogICAgICAgICBkYmluaXQgPSB0cnVlOwog
ICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKHdlYlNldHRpbmdzLT5k
YXRhYmFzZVBhdGgoKSk7CiAgICAgfQogCiAgICAgLy8gVGhlIGRpcmVjdG9yeSBvZiBjYWNoZVN0
b3JhZ2UgZm9yIG9uZSBwYWdlIGdyb3VwIGNhbiBvbmx5IGJlIGluaXRpYWxpemVkIG9uY2UuCiAg
ICAgc3RhdGljIGJvb2wgYWNpbml0ID0gZmFsc2U7Ci0gICAgaWYgKCFhY2luaXQgJiYgIXdlYlNl
dHRpbmdzLT5hcHBDYWNoZVBhdGgoKS5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWFjaW5pdCAmJiAh
d2ViU2V0dGluZ3MtPmFwcENhY2hlUGF0aCgpLmVtcHR5KCkpIHsKICAgICAgICAgYWNpbml0ID0g
dHJ1ZTsKICAgICAgICAgY2FjaGVTdG9yYWdlKCkuc2V0Q2FjaGVEaXJlY3Rvcnkod2ViU2V0dGlu
Z3MtPmFwcENhY2hlUGF0aCgpKTsKICAgICB9CkBAIC02MTE1LDcgKzYxMTIsNyBAQCB2b2lkIFdl
YlBhZ2VQcml2YXRlOjpkaWRDaGFuZ2VTZXR0aW5ncyhXCiAgICAgbV9wYWdlLT5zZXREZXZpY2VT
Y2FsZUZhY3Rvcih3ZWJTZXR0aW5ncy0+ZGV2aWNlUGl4ZWxSYXRpbygpKTsKIH0KIAotV2ViU3Ry
aW5nIFdlYlBhZ2U6OnRleHRIYXNBdHRyaWJ1dGUoY29uc3QgV2ViU3RyaW5nJiBxdWVyeSkgY29u
c3QKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViUGFnZTo6dGV4dEhhc0F0dHJpYnV0
ZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBxdWVyeSkgY29uc3QKIHsKICAg
ICBpZiAoRG9jdW1lbnQqIGRvYyA9IGQtPm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZG9jLT5xdWVyeUNv
bW1hbmRWYWx1ZShxdWVyeSk7CkBAIC02MTIzLDEwICs2MTIwLDEwIEBAIFdlYlN0cmluZyBXZWJQ
YWdlOjp0ZXh0SGFzQXR0cmlidXRlKGNvbnMKICAgICByZXR1cm4gIiI7CiB9CiAKLXZvaWQgV2Vi
UGFnZTo6c2V0QWxsb3dOb3RpZmljYXRpb24oY29uc3QgV2ViU3RyaW5nJiBkb21haW4sIGJvb2wg
YWxsb3cpCit2b2lkIFdlYlBhZ2U6OnNldEFsbG93Tm90aWZpY2F0aW9uKGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIGRvbWFpbiwgYm9vbCBhbGxvdykKIHsKICNpZiBFTkFCTEUo
Tk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotICAgIHN0YXRp
Y19jYXN0PE5vdGlmaWNhdGlvblByZXNlbnRlckltcGwqPihOb3RpZmljYXRpb25QcmVzZW50ZXJJ
bXBsOjppbnN0YW5jZSgpKS0+b25QZXJtaXNzaW9uKGRvbWFpbi51dGY4KCksIGFsbG93KTsKKyAg
ICBzdGF0aWNfY2FzdDxOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKj4oTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbDo6aW5zdGFuY2UoKSktPm9uUGVybWlzc2lvbihkb21haW4uY19zdHIoKSwgYWxs
b3cpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZG9tYWluKTsKICAgICBVTlVTRURfUEFSQU0o
YWxsb3cpOwpAQCAtNjE4MSwxMCArNjE3OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpmcmFt
ZVVubG9hZGVkKGNvbnN0CiAgICAgbV9pblBhZ2VTZWFyY2hNYW5hZ2VyLT5mcmFtZVVubG9hZGVk
KGZyYW1lKTsKIH0KIAotY29uc3QgU3RyaW5nJiBXZWJQYWdlUHJpdmF0ZTo6ZGVmYXVsdFVzZXJB
Z2VudCgpCitjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBXZWJQYWdlUHJpdmF0
ZTo6ZGVmYXVsdFVzZXJBZ2VudCgpCiB7Ci0gICAgc3RhdGljIFN0cmluZyogZGVmYXVsdFVzZXJB
Z2VudCA9IG5ldyBTdHJpbmc7Ci0gICAgaWYgKGRlZmF1bHRVc2VyQWdlbnQtPmlzRW1wdHkoKSkg
eworICAgIHN0YXRpYyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nKiBkZWZhdWx0VXNlckFn
ZW50ID0gMDsKKyAgICBpZiAoIWRlZmF1bHRVc2VyQWdlbnQpIHsKICAgICAgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkRldmljZUluZm8qIGluZm8gPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RGV2
aWNlSW5mbzo6aW5zdGFuY2UoKTsKICAgICAgICAgY2hhciB1YUJ1ZmZlclsyNTZdOwogICAgICAg
ICBpbnQgdWFTaXplID0gc25wcmludGYodWFCdWZmZXIsIDI1NiwgIk1vemlsbGEvNS4wICglcykg
QXBwbGVXZWJLaXQvJWQuJWQrIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8lcyAlc1NhZmFy
aS8lZC4lZCsiLApAQCAtNjE5NCw3ICs2MTkxLDcgQEAgY29uc3QgU3RyaW5nJiBXZWJQYWdlUHJp
dmF0ZTo6ZGVmYXVsdFVzZQogICAgICAgICBpZiAodWFTaXplIDw9IDAgfHwgdWFTaXplID49IDI1
NikKICAgICAgICAgICAgIEJMQUNLQkVSUllfQ1JBU0goKTsKIAotICAgICAgICBkZWZhdWx0VXNl
ckFnZW50LT5hcHBlbmQodWFCdWZmZXIpOworICAgICAgICBkZWZhdWx0VXNlckFnZW50ID0gbmV3
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcodWFCdWZmZXIsIHVhU2l6ZSk7CiAgICAgfQog
CiAgICAgcmV0dXJuICpkZWZhdWx0VXNlckFnZW50OwpJbmRleDogU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlLmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTAgQEAK
IAogI2luY2x1ZGUgIkJsYWNrQmVycnlHbG9iYWwuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0VmFy
aWFudC5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtR3VhcmRlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1JbnB1
dEV2ZW50cy5oPgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVdlYkNvbnRleHQuaD4KICNpbmNsdWRlIDxpbWYvaW5wdXRf
ZGF0YS5oPgogI2luY2x1ZGUgPG5ldHdvcmsvTmV0d29ya1JlcXVlc3QuaD4KQEAgLTg1LDMwICs4
NSwzMCBAQCBlbnVtIFRhcmdldERldGVjdGlvblN0cmF0ZWd5IHtQb2ludEJhc2VkCiAKIGNsYXNz
IEJMQUNLQkVSUllfRVhQT1JUIFdlYlBhZ2UgOiBwdWJsaWMgUGxhdGZvcm06Okd1YXJkZWRQb2lu
dGVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgV2ViUGFnZShXZWJQYWdlQ2xpZW50KiwgY29uc3QgV2Vi
U3RyaW5nJiBwYWdlR3JvdXBOYW1lLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYpOworICAgIFdl
YlBhZ2UoV2ViUGFnZUNsaWVudCosIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
IHBhZ2VHcm91cE5hbWUsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBkZXN0
cm95KCk7CiAKICAgICBXZWJQYWdlQ2xpZW50KiBjbGllbnQoKSBjb25zdDsKIAotICAgIHZvaWQg
bG9hZChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIG5ldHdvcmtUb2tlbiwgYm9vbCBpc0lu
aXRpYWwgPSBmYWxzZSk7CisgICAgdm9pZCBsb2FkKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcmIHVybCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbmV0d29y
a1Rva2VuLCBib29sIGlzSW5pdGlhbCA9IGZhbHNlKTsKIAogICAgIHZvaWQgbG9hZEV4dGVuZGVk
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogbmV0d29ya1Rva2VuLCBjb25zdCBjaGFyKiBt
ZXRob2QsIFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6Q2FjaGVQb2xpY3kgPSBQbGF0Zm9ybTo6
TmV0d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIGNvbnN0IGNoYXIqIGRhdGEg
PSAwLCBzaXplX3QgZGF0YUxlbmd0aCA9IDAsIGNvbnN0IGNoYXIqIGNvbnN0KiBoZWFkZXJzID0g
MCwgc2l6ZV90IGhlYWRlcnNMZW5ndGggPSAwLCBib29sIG11c3RIYW5kbGVJbnRlcm5hbGx5ID0g
ZmFsc2UpOwogCi0gICAgdm9pZCBsb2FkRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjaGFy
KiBvdmVycmlkZUNvbnRlbnRUeXBlID0gIiIpOworICAgIHZvaWQgbG9hZEZpbGUoY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGF0aCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyYgb3ZlcnJpZGVDb250ZW50VHlwZSA9ICIiKTsKIAotICAgIHZvaWQgbG9hZFN0
cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsIGNvbnN0IGNoYXIqIGJhc2VVUkwsIGNvbnN0IGNoYXIq
IGNvbnRlbnRUeXBlID0gInRleHQvaHRtbCIsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkwgPSAwKTsK
KyAgICB2b2lkIGxvYWRTdHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYs
IGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGNvbnRlbnRUeXBlID0gInRleHQvaHRtbCIsIGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGZhaWxpbmdVUkwgPSBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nOjplbXB0eVN0cmluZygpKTsKIAogICAgIHZvaWQgZG93bmxvYWQoY29u
c3QgUGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0Jik7CiAKLSAgICBib29sIGV4ZWN1dGVKYXZhU2Ny
aXB0KGNvbnN0IGNoYXIqIHNjcmlwdCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBX
ZWJTdHJpbmcmIHJldHVyblZhbHVlKTsKKyAgICBib29sIGV4ZWN1dGVKYXZhU2NyaXB0KGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHNjcmlwdCwgSmF2YVNjcmlwdERhdGFUeXBl
JiByZXR1cm5UeXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiByZXR1cm5WYWx1ZSk7
CiAKICAgICAvLyBUaGlzIHdpbGwgZXhlY3V0ZSB0aGUgc2NyaXB0IGV2ZW4gaWYgaW4tcGFnZSBK
YXZhU2NyaXB0IGlzIGRpc2FibGVkLgotICAgIGJvb2wgZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xh
dGVkV29ybGQoY29uc3QgY2hhciogc2NyaXB0LCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJldHVyblR5
cGUsIFdlYlN0cmluZyYgcmV0dXJuVmFsdWUpOworICAgIGJvb2wgZXhlY3V0ZUphdmFTY3JpcHRJ
bklzb2xhdGVkV29ybGQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgc2NyaXB0
LCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIHJldHVyblZhbHVlKTsKIAogICAgIC8vIFRha2VzIGEgVVRGMTYgZW5jb2RlZCBzY3Jp
cHQgdGhhdCBpcyB1c2VkIGV4cGxpY2l0bHkgYnkgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgY29kZQot
ICAgIGJvb2wgZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3Qgc3RkOjp3c3Ry
aW5nJiBzY3JpcHQsIEphdmFTY3JpcHREYXRhVHlwZSYgcmV0dXJuVHlwZSwgV2ViU3RyaW5nJiBy
ZXR1cm5WYWx1ZSk7CisgICAgYm9vbCBleGVjdXRlSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZChj
b25zdCBzdGQ6OndzdHJpbmcmIHNjcmlwdCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBl
LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiByZXR1cm5WYWx1ZSk7CiAKLSAgICB2b2lk
IGV4ZWN1dGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
ICZmdW5jdGlvbiwgY29uc3Qgc3RkOjp2ZWN0b3I8SmF2YVNjcmlwdFZhcmlhbnQ+ICZhcmdzLCBK
YXZhU2NyaXB0VmFyaWFudCYgcmV0dXJuVmFsdWUpOworICAgIHZvaWQgZXhlY3V0ZUphdmFTY3Jp
cHRGdW5jdGlvbihjb25zdCBzdGQ6OnZlY3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
PiAmZnVuY3Rpb24sIGNvbnN0IHN0ZDo6dmVjdG9yPEphdmFTY3JpcHRWYXJpYW50PiAmYXJncywg
SmF2YVNjcmlwdFZhcmlhbnQmIHJldHVyblZhbHVlKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUlj
b25EYXRhQmFzZSgpOwogCkBAIC0xMjAsOCArMTIwLDggQEAgcHVibGljOgogICAgIHZvaWQgcHJl
cGFyZVRvRGVzdHJveSgpOwogCiAgICAgdm9pZCBlbmFibGVDcm9zc1NpdGVYSFIoKTsKLSAgICB2
b2lkIGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IGNoYXIqIHNvdXJjZU9yaWdp
biwgY29uc3QgY2hhciogZGVzdGluYXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1
YmRvbWFpbnMpOwotICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29u
c3QgY2hhciogc291cmNlT3JpZ2luLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbk9yaWdpbiwgYm9v
bCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzb3VyY2VP
cmlnaW4sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGRlc3RpbmF0aW9uT3Jp
Z2luLCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICB2b2lkIHJlbW92ZU9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIHNvdXJjZU9yaWdpbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZGVz
dGluYXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogCiAgICAg
dm9pZCByZWxvYWQoKTsKICAgICB2b2lkIHJlbG9hZEZyb21DYWNoZSgpOwpAQCAtMTU4LDEwICsx
NTgsMTAgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHN0cm9rZSB3
YXMgaGFuZGxlZCBieSBXZWJLaXQuCiAgICAgYm9vbCBrZXlFdmVudChjb25zdCBQbGF0Zm9ybTo6
S2V5Ym9hcmRFdmVudCYpOwogCi0gICAgV2ViU3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0gICAgV2Vi
U3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0OwotICAgIFdlYlN0cmluZyBjdXRTZWxlY3RlZFRl
eHQoKTsKLSAgICB2b2lkIGluc2VydFRleHQoY29uc3QgV2ViU3RyaW5nJik7CisgICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyB0aXRsZSgpIGNvbnN0OworICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7CisgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyBjdXRTZWxlY3RlZFRleHQoKTsKKyAgICB2b2lkIGluc2VydFRleHQoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJDdXJyZW50
SW5wdXRGaWVsZCgpOwogCiAgICAgdm9pZCBjdXQoKTsKQEAgLTE3MCw5ICsxNzAsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZWxlY3RBbGwoKTsKIAogICAgIC8vIFRleHQgZW5jb2RpbmcuCi0gICAg
V2ViU3RyaW5nIHRleHRFbmNvZGluZygpOwotICAgIFdlYlN0cmluZyBmb3JjZWRUZXh0RW5jb2Rp
bmcoKTsKLSAgICB2b2lkIHNldEZvcmNlZFRleHRFbmNvZGluZyhjb25zdCBjaGFyKik7CisgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyB0ZXh0RW5jb2RpbmcoKTsKKyAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIGZvcmNlZFRleHRFbmNvZGluZygpOworICAgIHZvaWQgc2V0
Rm9yY2VkVGV4dEVuY29kaW5nKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmKTsK
IAogICAgIC8vIFNjcm9sbCBwb3NpdGlvbiByZXR1cm5lZCBpcyBpbiB0cmFuc2Zvcm1lZCBjb29y
ZGluYXRlcy4KICAgICBQbGF0Zm9ybTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdDsK
QEAgLTI3OSwyNSArMjc5LDI1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9wdXBMaXN0Q2xvc2Vk
KGludCBzaXplLCBjb25zdCBib29sKiBzZWxlY3RlZHMpOwogICAgIHZvaWQgcG9wdXBMaXN0Q2xv
c2VkKGludCBpbmRleCk7Ci0gICAgdm9pZCBzZXREYXRlVGltZUlucHV0KGNvbnN0IFdlYlN0cmlu
ZyYgdmFsdWUpOwotICAgIHZvaWQgc2V0Q29sb3JJbnB1dChjb25zdCBXZWJTdHJpbmcmIHZhbHVl
KTsKKyAgICB2b2lkIHNldERhdGVUaW1lSW5wdXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgc2V0Q29sb3JJbnB1dChjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSk7CiAKICAgICB2b2lkIG9uSW5wdXRMb2NhbGVDaGFu
Z2VkKGJvb2wgaXNSVEwpOwogICAgIHN0YXRpYyB2b2lkIG9uTmV0d29ya0F2YWlsYWJpbGl0eUNo
YW5nZWQoYm9vbCBhdmFpbGFibGUpOwotICAgIHN0YXRpYyB2b2lkIG9uQ2VydGlmaWNhdGVTdG9y
ZUxvY2F0aW9uU2V0KGNvbnN0IFdlYlN0cmluZyYgY2FQYXRoKTsKKyAgICBzdGF0aWMgdm9pZCBv
bkNlcnRpZmljYXRlU3RvcmVMb2NhdGlvblNldChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiBjYVBhdGgpOwogCi0gICAgV2ViU3RyaW5nIHRleHRIYXNBdHRyaWJ1dGUoY29uc3Qg
V2ViU3RyaW5nJiBxdWVyeSkgY29uc3Q7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyB0ZXh0SGFzQXR0cmlidXRlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHF1
ZXJ5KSBjb25zdDsKIAotICAgIHZvaWQgc2V0QWxsb3dOb3RpZmljYXRpb24oY29uc3QgV2ViU3Ry
aW5nJiBkb21haW4sIGJvb2wgYWxsb3cpOworICAgIHZvaWQgc2V0QWxsb3dOb3RpZmljYXRpb24o
Y29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZG9tYWluLCBib29sIGFsbG93KTsK
IAogICAgIFBsYXRmb3JtOjpXZWJDb250ZXh0IHdlYkNvbnRleHQoVGFyZ2V0RGV0ZWN0aW9uU3Ry
YXRlZ3kpIGNvbnN0OwogCiAgICAgdHlwZWRlZiBpbnRwdHJfdCBCYWNrRm9yd2FyZElkOwogICAg
IHN0cnVjdCBCYWNrRm9yd2FyZEVudHJ5IHsKLSAgICAgICAgV2ViU3RyaW5nIHVybDsKLSAgICAg
ICAgV2ViU3RyaW5nIG9yaWdpbmFsVXJsOwotICAgICAgICBXZWJTdHJpbmcgdGl0bGU7Ci0gICAg
ICAgIFdlYlN0cmluZyBuZXR3b3JrVG9rZW47CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcgdXJsOworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIG9yaWdp
bmFsVXJsOworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIHRpdGxlOworICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIG5ldHdvcmtUb2tlbjsKICAgICAgICAg
QmFja0ZvcndhcmRJZCBpZDsKICAgICAgICAgYm9vbCBsYXN0VmlzaXRXYXNIVFRQTm9uR2V0Owog
ICAgIH07CkBAIC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNXZWJJbnNwZWN0
b3JFbmFibGVkKCk7CiAgICAgdm9pZCBlbmFibGVQYXNzd29yZEVjaG8oKTsKICAgICB2b2lkIGRp
c2FibGVQYXNzd29yZEVjaG8oKTsKLSAgICB2b2lkIGRpc3BhdGNoSW5zcGVjdG9yTWVzc2FnZShj
b25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSk7CisgICAgdm9pZCBkaXNwYXRjaEluc3BlY3Rvck1l
c3NhZ2UoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWVzc2FnZSk7CiAgICAg
dm9pZCBpbnNwZWN0Q3VycmVudENvbnRleHRFbGVtZW50KCk7CiAKICAgICAvLyBGSVhNRTogTmVl
ZHMgQVBJIHJldmlldyBvbiB0aGlzIGhlYWRlci4gU2VlIFBSICMxMjA0MDIuCkBAIC0zODMsMTEg
KzM4MywxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0OwogICAg
IFdlYkNvcmU6OlBhZ2VQb3B1cEJsYWNrQmVycnkqIHBvcHVwKCk7CiAKLSAgICB2b2lkIGF1dG9m
aWxsVGV4dEZpZWxkKGNvbnN0IHN0ZDo6c3RyaW5nJik7CisgICAgdm9pZCBhdXRvZmlsbFRleHRG
aWVsZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKICAgICB2b2lkIGVu
YWJsZVFueEphdmFTY3JpcHRPYmplY3QoYm9vbCk7CiAKLSAgICBXZWJTdHJpbmcgcmVuZGVyVHJl
ZUFzVGV4dCgpOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgcmVuZGVyVHJlZUFz
VGV4dCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgfldlYlBhZ2UoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNsaWVudC5oCShyZXZpc2lvbiAxMzEy
NDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAsMTIgKzIwLDEyIEBACiAjZGVmaW5lIFdlYlBhZ2VDbGllbnRfaAog
CiAjaW5jbHVkZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgog
CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtQ3Vyc29yLmg+CiAjaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtSW5wdXRFdmVudHMuaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1O
YXZpZ2F0aW9uVHlwZS5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMu
aD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDxpbWYv
ZXZlbnRzLmg+CiAjaW5jbHVkZSA8aW50ZXJhY3Rpb24vU2Nyb2xsVmlld0Jhc2UuaD4KICNpbmNs
dWRlIDx2ZWN0b3I+CkBAIC0xMDcsMTQgKzEwNywxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIG5vdGlmeURvY3VtZW50T25Mb2FkKGJvb2wpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlXaW5kb3dPYmplY3RDbGVhcmVkKCkgPSAwOwotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGlu
dm9rZUNsaWVudEphdmFTY3JpcHRDYWxsYmFjayhjb25zdCBjaGFyKiBjb25zdCogYXJncywgdW5z
aWduZWQgbnVtQXJncykgPSAwOworICAgIHZpcnR1YWwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyBpbnZva2VDbGllbnRKYXZhU2NyaXB0Q2FsbGJhY2soY29uc3QgY2hhciogY29uc3QqIGFy
Z3MsIHVuc2lnbmVkIG51bUFyZ3MpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdl
VG9Db25zb2xlKGNvbnN0IHVuc2lnbmVkIHNob3J0KiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdl
TGVuZ3RoLCBjb25zdCB1bnNpZ25lZCBzaG9ydCogc291cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5n
dGgsIHVuc2lnbmVkIGxpbmVOdW1iZXIpID0gMDsKICAgICB2aXJ0dWFsIGludCBzaG93QWxlcnRE
aWFsb2coQWxlcnRUeXBlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFs
ZXJ0KGNvbnN0IHVuc2lnbmVkIHNob3J0KiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlTGVuZ3Ro
LCBjb25zdCBjaGFyKiBvcmlnaW4sIHVuc2lnbmVkIG9yaWdpbkxlbmd0aCkgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCB1bnNpZ25lZCBzaG9ydCogbWVz
c2FnZSwgdW5zaWduZWQgbWVzc2FnZUxlbmd0aCwgY29uc3QgY2hhciogb3JpZ2luLCB1bnNpZ25l
ZCBvcmlnaW5MZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdFByb21w
dChjb25zdCB1bnNpZ25lZCBzaG9ydCogbWVzc2FnZSwgdW5zaWduZWQgbWVzc2FnZUxlbmd0aCwg
Y29uc3QgdW5zaWduZWQgc2hvcnQqIGRlZmF1bHRWYWx1ZSwgdW5zaWduZWQgZGVmYXVsdFZhbHVl
TGVuZ3RoLCBjb25zdCBjaGFyKiBvcmlnaW4sIHVuc2lnbmVkIG9yaWdpbkxlbmd0aCwgV2ViU3Ry
aW5nJiByZXN1bHQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdFByb21wdChj
b25zdCB1bnNpZ25lZCBzaG9ydCogbWVzc2FnZSwgdW5zaWduZWQgbWVzc2FnZUxlbmd0aCwgY29u
c3QgdW5zaWduZWQgc2hvcnQqIGRlZmF1bHRWYWx1ZSwgdW5zaWduZWQgZGVmYXVsdFZhbHVlTGVu
Z3RoLCBjb25zdCBjaGFyKiBvcmlnaW4sIHVuc2lnbmVkIG9yaWdpbkxlbmd0aCwgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgcmVzdWx0KSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCB1bnNpZ25lZCBzaG9ydCogbWVzc2FnZSwgdW5z
aWduZWQgbWVzc2FnZUxlbmd0aCwgY29uc3QgY2hhciogb3JpZ2luLCB1bnNpZ25lZCBvcmlnaW5M
ZW5ndGgpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0
KCkgPSAwOwpAQCAtMTY1LDEwICsxNjUsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHJlc2V0QmFja0ZvcndhcmRMaXN0KHVuc2lnbmVkIGxpc3RTaXplLCB1bnNpZ25lZCBjdXJyZW50
SW5kZXgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuUG9wdXBMaXN0KGJvb2wgbXVsdGlw
bGUsIGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PFdlYlN0cmluZz4mIGxhYmVscywgY29uc3Qg
Ym9vbCogZW5hYmxlZHMsIGNvbnN0IGludCogaXRlbVR5cGUsIGNvbnN0IGJvb2wqIHNlbGVjdGVk
cykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjaG9vc2VGaWxlbmFtZXMoYm9vbCBhbGxvd011bHRp
cGxlLCBjb25zdCBTaGFyZWRBcnJheTxXZWJTdHJpbmc+JiBhY2NlcHRUeXBlcywgY29uc3QgU2hh
cmVkQXJyYXk8V2ViU3RyaW5nPiYgaW5pdGlhbEZpbGVzLCBjb25zdCBXZWJTdHJpbmcmIGNhcHR1
cmUsIFNoYXJlZEFycmF5PFdlYlN0cmluZz4mIGNob3NlbkZpbGVzKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIG9wZW5Qb3B1cExpc3QoYm9vbCBtdWx0aXBsZSwgaW50IHNpemUsIGNvbnN0IFNjb3Bl
QXJyYXk8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4mIGxhYmVscywgY29uc3QgYm9vbCog
ZW5hYmxlZHMsIGNvbnN0IGludCogaXRlbVR5cGUsIGNvbnN0IGJvb2wqIHNlbGVjdGVkcykgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBjaG9vc2VGaWxlbmFtZXMoYm9vbCBhbGxvd011bHRpcGxlLCBj
b25zdCBTaGFyZWRBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgYWNjZXB0VHlw
ZXMsIGNvbnN0IFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBpbml0
aWFsRmlsZXMsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGNhcHR1cmUsIFNo
YXJlZEFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBjaG9zZW5GaWxlcykgPSAw
OwogCi0gICAgdmlydHVhbCB2b2lkIGxvYWRQbHVnaW5Gb3JNaW1ldHlwZShpbnQsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgY29uc3QgU2hhcmVkQXJyYXk8V2ViU3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgU2hhcmVkQXJyYXk8V2ViU3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IGNoYXIqIHVy
bCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUGx1Z2luRm9yTWltZXR5cGUoaW50LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBTaGFyZWRBcnJheTxCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IGNoYXIqIHVybCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlQbHVnaW5SZWN0Q2hhbmdlZChpbnQsIFBsYXRmb3JtOjpJbnRSZWN0
IHJlY3RDaGFuZ2VkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lQbHVnaW4oaW50KSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHBsYXlNZWRpYShpbnQpID0gMDsKQEAgLTE3OCwyNyArMTc4
LDI3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGludCwgZmxvYXQpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoaW50LCBib29sKSA9IDA7CiAKLSAgICB2aXJ0
dWFsIFdlYlBhZ2UqIGNyZWF0ZVdpbmRvdyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgdW5zaWduZWQgZmxhZ3MsIGNvbnN0IFdlYlN0cmluZyYgdXJsLCBjb25zdCBXZWJTdHJp
bmcmIHdpbmRvd05hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFdlYlBhZ2UqIGNyZWF0ZVdpbmRvdyhp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgZmxhZ3MsIGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwgY29uc3QgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyYgd2luZG93TmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlQ2xvc2VXaW5kb3coKSA9IDA7CiAKICAgICAvLyBEYXRhYmFzZSBpbnRlcmZhY2UuCiAgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VRdW90YShjb25zdCB1bnNpZ25lZCBz
aG9ydCogb3JpZ2luLCB1bnNpZ25lZCBvcmlnaW5MZW5ndGgsIGNvbnN0IHVuc2lnbmVkIHNob3J0
KiBkYXRhYmFzZU5hbWUsIHVuc2lnbmVkIGRhdGFiYXNlTmFtZUxlbmd0aCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBvcmlnaW5Vc2FnZSwgdW5zaWdu
ZWQgbG9uZyBsb25nIGVzdGltYXRlZFNpemUpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRJ
Y29uRm9yVXJsKGNvbnN0IGNoYXIqIG9yaWdpbmFsUGFnZVVybCwgY29uc3QgY2hhciogZmluYWxQ
YWdlVXJsLCBjb25zdCBjaGFyKiBpY29uVXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZh
dmljb24oY29uc3QgY2hhciogZGF0YUluQmFzZTY0LCBjb25zdCBjaGFyKiB1cmwpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGFyZ2VJY29uKGNvbnN0IGNoYXIqIGljb25VcmwpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0SWNvbkZvclVybChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiBvcmlnaW5hbFBhZ2VVcmwsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIGZpbmFsUGFnZVVybCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgaWNv
blVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRGYXZpY29uKGNvbnN0IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcmIGRhdGFJbkJhc2U2NCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyYgdXJsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhcmdlSWNvbihjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBpY29uVXJsKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldFdlYkFwcENhcGFibGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlYXJj
aFByb3ZpZGVyRGV0YWlscyhjb25zdCBjaGFyKiB0aXRsZSwgY29uc3QgY2hhciogZG9jdW1lbnRV
cmwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QWx0ZXJuYXRlRmVlZERldGFpbHMoY29uc3Qg
Y2hhciogdGl0bGUsIGNvbnN0IGNoYXIqIGZlZWRVcmwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2VhcmNoUHJvdmlkZXJEZXRhaWxzKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIHRpdGxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBkb2N1bWVudFVy
bCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbHRlcm5hdGVGZWVkRGV0YWlscyhjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB0aXRsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyYgZmVlZFVybCkgPSAwOwogCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0
RXJyb3JQYWdlKGludCBlcnJvckNvZGUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgY29uc3Qg
Y2hhciogdXJsKSA9IDA7CisgICAgdmlydHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
IGdldEVycm9yUGFnZShpbnQgZXJyb3JDb2RlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
IHVybCkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZWZlckxvYWRpbmcoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlc3VtZUxvYWRpbmcoKSA9IDA7CiAKICAgICAvLyBIZWFkZXJz
IGlzIGEgbGlzdCBvZiBhbHRlcm5hdGluZyBrZXkgYW5kIHZhbHVlLgotICAgIHZpcnR1YWwgdm9p
ZCBzZXRNZXRhSGVhZGVycyhjb25zdCBTY29wZUFycmF5PFdlYlN0cmluZz4mIGhlYWRlcnMsIHVu
c2lnbmVkIGludCBoZWFkZXJzU2l6ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNZXRhSGVh
ZGVycyhjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBoZWFk
ZXJzLCB1bnNpZ25lZCBoZWFkZXJzU2l6ZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIG5lZWRN
b3JlRGF0YSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2ViSW5zcGVjdG9yTWVzc2Fn
ZVRvRnJvbnRlbmQoaW50IGlkLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBpbnQgbGVuZ3RoKSA9IDA7
CkBAIC0yMTAsMTAgKzIxMCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVC
bG9ja1pvb20oY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmIGZpbmFsUG9pbnQsIGRvdWJsZSBm
aW5hbFNjYWxlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJldmVudHNTY3JlZW5JZGxl
RGltbWluZyhib29sIG5vRGltbWluZykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCB1bnNpZ25lZCBzaG9ydCogcmVhbG0sIHVuc2lnbmVkIGludCBy
ZWFsbUxlbmd0aCwgV2ViU3RyaW5nJiB1c2VybmFtZSwgV2ViU3RyaW5nJiBwYXNzd29yZCkgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCB1bnNpZ25l
ZCBzaG9ydCogcmVhbG0sIHVuc2lnbmVkIHJlYWxtTGVuZ3RoLCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiB1c2VybmFtZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGFzc3dv
cmQpID0gMDsKICAgICB2aXJ0dWFsIFNhdmVDcmVkZW50aWFsVHlwZSBub3RpZnlTaG91bGRTYXZl
Q3JlZGVudGlhbChib29sIGlzTmV3KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNQcm94eUNy
ZWRlbnRpYWwoY29uc3QgV2ViU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgV2ViU3RyaW5nJiBwYXNz
d29yZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3B1cEF1dG9maWxsRGlhbG9nKGNv
bnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0Jikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jUHJveHlDcmVkZW50aWFsKGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiBwYXNzd29yZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3B1cEF1
dG9maWxsRGlhbG9nKGNvbnN0IHN0ZDo6dmVjdG9yPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmc+JiwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeURpc21pc3NBdXRvZmlsbERpYWxvZygpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRQbHVnaW5FbnRlckZ1bGxTY3JlZW4oKSA9IDA7CkBAIC0yMjUsMTYgKzIyNSwxNSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHVubG9ja09yaWVudGF0aW9uKCkgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0V2ViR0xQZXJtaXNzaW9uKGNv
bnN0IFdlYlN0cmluZyYpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKFdlYlN0
cmluZykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXMoV2ViU3RyaW5nKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzKGNvbnN0IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGFjY2VwdE5hdmlnYXRp
b25SZXF1ZXN0KGNvbnN0IFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdCYsIFBsYXRmb3JtOjpOYXZp
Z2F0aW9uVHlwZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjdXJzb3JFdmVudE1vZGVDaGFuZ2Vk
KFBsYXRmb3JtOjpDdXJzb3JFdmVudE1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdG91Y2hF
dmVudE1vZGVDaGFuZ2VkKFBsYXRmb3JtOjpUb3VjaEV2ZW50TW9kZSkgPSAwOwogCi0gICAgdmly
dHVhbCBib29sIGRvd25sb2FkQWxsb3dlZChjb25zdCBjaGFyKiB1cmwpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZG93bmxvYWRSZXF1ZXN0ZWQoUGxhdGZvcm06OkZpbHRlclN0cmVhbSosIGNvbnN0
IFdlYlN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZG93
bmxvYWRBbGxvd2VkKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZFJlcXVlc3RlZChQbGF0Zm9ybTo6RmlsdGVyU3Ry
ZWFtKiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUpID0gMDsKIAogICAgIHZpcnR1YWwgaW50IGZ1bGxzY3JlZW5TdGFydCgpID0gMDsKICAgICB2
aXJ0dWFsIGludCBmdWxsc2NyZWVuU3RhcnQoY29uc3QgY2hhciogY29udGV4dE5hbWUsIFBsYXRm
b3JtOjpHcmFwaGljczo6V2luZG93KiwgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgPSAwOwpAQCAtMjYzLDkgKzI2Miw5IEBAIHB1YmxpYzoK
ICAgICAgICAgUHJvdG9jb2xIYW5kbGVyc1JlZ2lzdGVyZWQsCiAgICAgICAgIFByb3RvY29sSGFu
ZGxlcnNEZWNsaW5lZAogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyUHJvdG9jb2xI
YW5kbGVyKGNvbnN0IFdlYlN0cmluZyYgLypzY2hlbWUqLywgY29uc3QgV2ViU3RyaW5nJiAvKmJh
c2VVUkwqLywgY29uc3QgV2ViU3RyaW5nJiAvKnVybCovLCBjb25zdCBXZWJTdHJpbmcmIC8qdGl0
bGUqLykgPSAwOwotICAgIHZpcnR1YWwgUHJvdG9jb2xIYW5kbGVyc1N0YXRlIGlzUHJvdG9jb2xI
YW5kbGVyUmVnaXN0ZXJlZChjb25zdCBXZWJTdHJpbmcmIC8qc2NoZW1lKi8sIGNvbnN0IFdlYlN0
cmluZyYgLypiYXNlVVJMKi8sIGNvbnN0IFdlYlN0cmluZyYgLyp1cmwqLykgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB1bnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKGNvbnN0IFdlYlN0cmluZyYgLypz
Y2hlbWUqLywgY29uc3QgV2ViU3RyaW5nJiAvKmJhc2VVUkwqLywgY29uc3QgV2ViU3RyaW5nJiAv
KnVybCovKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIC8qc2NoZW1lKi8sIGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIC8qYmFzZVVSTCovLCBjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nJiAvKnVybCovLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiAvKnRpdGxlKi8pID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sSGFuZGxlcnNTdGF0ZSBp
c1Byb3RvY29sSGFuZGxlclJlZ2lzdGVyZWQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZyYgLypzY2hlbWUqLywgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgLypi
YXNlVVJMKi8sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIC8qdXJsKi8pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclByb3RvY29sSGFuZGxlcihjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiAvKnNjaGVtZSovLCBjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nJiAvKmJhc2VVUkwqLywgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyYgLyp1cmwqLykgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RVc2VyTWVk
aWEoY29uc3QgUGxhdGZvcm06OldlYlVzZXJNZWRpYVJlcXVlc3QmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGNhbmNlbFVzZXJNZWRpYVJlcXVlc3QoY29uc3QgUGxhdGZvcm06OldlYlVzZXJNZWRp
YVJlcXVlc3QmKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2VfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZV9wLmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
V2ViUGFnZV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwyMSArMTA1LDIxIEBAIHB1YmxpYzoK
IAogICAgIFdlYlBhZ2VDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9
CiAKLSAgICB2b2lkIGluaXQoY29uc3QgV2ViU3RyaW5nJiBwYWdlR3JvdXBOYW1lKTsKKyAgICB2
b2lkIGluaXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGFnZUdyb3VwTmFt
ZSk7CiAgICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVu
dCYpOwogICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnQmKTsKIAotICAgIHZvaWQgbG9hZChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIG5ldHdv
cmtUb2tlbiwgY29uc3QgY2hhciogbWV0aG9kLCBQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q6OkNh
Y2hlUG9saWN5LCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgY29uc3QgY2hh
ciogY29uc3QqIGhlYWRlcnMsIHNpemVfdCBoZWFkZXJzTGVuZ3RoLCBib29sIGlzSW5pdGlhbCwg
Ym9vbCBtdXN0SGFuZGxlSW50ZXJuYWxseSA9IGZhbHNlLCBib29sIGZvcmNlRG93bmxvYWQgPSBm
YWxzZSwgY29uc3QgY2hhciogb3ZlcnJpZGVDb250ZW50VHlwZSA9ICIiLCBjb25zdCBjaGFyKiBz
dWdnZXN0ZWRTYXZlTmFtZSA9ICIiKTsKLSAgICB2b2lkIGxvYWRTdHJpbmcoY29uc3QgY2hhciog
c3RyaW5nLCBjb25zdCBjaGFyKiBiYXNlVVJMLCBjb25zdCBjaGFyKiBtaW1lVHlwZSwgY29uc3Qg
Y2hhciogZmFpbGluZ1VSTCA9IDApOwotICAgIGJvb2wgZXhlY3V0ZUphdmFTY3JpcHQoY29uc3Qg
Y2hhciogc2NyaXB0LCBKYXZhU2NyaXB0RGF0YVR5cGUmIHJldHVyblR5cGUsIFdlYlN0cmluZyYg
cmV0dXJuVmFsdWUpOwotICAgIGJvb2wgZXhlY3V0ZUphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQo
Y29uc3QgV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZSYsIEphdmFTY3JpcHREYXRhVHlwZSYgcmV0
dXJuVHlwZSwgV2ViU3RyaW5nJiByZXR1cm5WYWx1ZSk7CisgICAgdm9pZCBsb2FkKGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyYgbmV0d29ya1Rva2VuLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiBtZXRob2QsIFBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDo6Q2FjaGVQb2xpY3ksIGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCBjb25zdCBjaGFyKiBjb25zdCogaGVhZGVy
cywgc2l6ZV90IGhlYWRlcnNMZW5ndGgsIGJvb2wgaXNJbml0aWFsLCBib29sIG11c3RIYW5kbGVJ
bnRlcm5hbGx5ID0gZmFsc2UsIGJvb2wgZm9yY2VEb3dubG9hZCA9IGZhbHNlLCBjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBvdmVycmlkZUNvbnRlbnRUeXBlID0gQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZzo6ZW1wdHlTdHJpbmcoKSwgY29uc3QgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyYgc3VnZ2VzdGVkU2F2ZU5hbWUgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nOjplbXB0eVN0cmluZygpKTsKKyAgICB2b2lkIGxvYWRTdHJpbmcoY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIGJhc2VVUkwsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBmYWlsaW5nVVJMKTsKKyAgICBi
b29sIGV4ZWN1dGVKYXZhU2NyaXB0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
IHNjcmlwdCwgSmF2YVNjcmlwdERhdGFUeXBlJiByZXR1cm5UeXBlLCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJiByZXR1cm5WYWx1ZSk7CisgICAgYm9vbCBleGVjdXRlSmF2YVNjcmlwdElu
SXNvbGF0ZWRXb3JsZChjb25zdCBXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlJiwgSmF2YVNjcmlw
dERhdGFUeXBlJiByZXR1cm5UeXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiByZXR1
cm5WYWx1ZSk7CiAKICAgICB2b2lkIHN0b3BDdXJyZW50TG9hZCgpOwogICAgIHZvaWQgcHJlcGFy
ZVRvRGVzdHJveSgpOwogCiAgICAgdm9pZCBlbmFibGVDcm9zc1NpdGVYSFIoKTsKLSAgICB2b2lk
IGFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IGNoYXIqIHNvdXJjZU9yaWdpbiwg
Y29uc3QgY2hhciogZGVzdGluYXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpOwotICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3Qg
Y2hhciogc291cmNlT3JpZ2luLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbk9yaWdpbiwgYm9vbCBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgdm9pZCBhZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzb3VyY2VPcmln
aW4sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIGRlc3RpbmF0aW9uT3JpZ2lu
LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICB2b2lkIHJlbW92ZU9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
IHNvdXJjZU9yaWdpbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZGVzdGlu
YXRpb25PcmlnaW4sIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogCiAgICAgTG9h
ZFN0YXRlIGxvYWRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFN0YXRlOyB9CiAgICAgYm9v
bCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2xvYWRTdGF0ZSA9PSBXZWJQYWdlUHJpdmF0
ZTo6UHJvdmlzaW9uYWwgfHwgbV9sb2FkU3RhdGUgPT0gV2ViUGFnZVByaXZhdGU6OkNvbW1pdHRl
ZDsgfQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViQ29yZTo6UmVu
ZGVyTGF5ZXIqIGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklmUG9zaXRpb25lZChX
ZWJDb3JlOjpSZW5kZXJMYXllciopOwogICAgIHN0YXRpYyBXZWJDb3JlOjpSZW5kZXJMYXllciog
ZW5jbG9zaW5nRml4ZWRQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJZkZpeGVkUG9zaXRpb25lZChX
ZWJDb3JlOjpSZW5kZXJMYXllciopOwogCi0gICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVs
dFVzZXJBZ2VudCgpOworICAgIHN0YXRpYyBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiBkZWZhdWx0VXNlckFnZW50KCk7CiAKICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAj
aWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCkBAIC02MDEsMTQgKzYwMSwxMyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBtX3dvdWxkTG9hZE1hbnVhbFNjcmlwdDsKICAgICBib29sIG1fd291bGRT
ZXRGb2N1c2VkOwogICAgIGJvb2wgbV93b3VsZFNldFBhZ2VWaXNpYmlsaXR5U3RhdGU7CisgICAg
Ym9vbCBtX2NhY2hlZEZvY3VzZWQ7CisgICAgYm9vbCBtX2VuYWJsZVFueEphdmFTY3JpcHRPYmpl
Y3Q7CiAgICAgVmVjdG9yPGJvb2w+IG1fY2FjaGVkUG9wdXBMaXN0U2VsZWN0ZWRzOwogICAgIGlu
dCBtX2NhY2hlZFBvcHVwTGlzdFNlbGVjdGVkSW5kZXg7Ci0gICAgV2ViU3RyaW5nIG1fY2FjaGVk
RGF0ZVRpbWVJbnB1dDsKLSAgICBXZWJTdHJpbmcgbV9jYWNoZWRDb2xvcklucHV0OworICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgbV9jYWNoZWREYXRlVGltZUlucHV0OworICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgbV9jYWNoZWRDb2xvcklucHV0OwogICAgIFdlYkNv
cmU6OktVUkwgbV9jYWNoZWRNYW51YWxTY3JpcHQ7Ci0gICAgYm9vbCBtX2NhY2hlZEZvY3VzZWQ7
Ci0KLSAgICBib29sIG1fZW5hYmxlUW54SmF2YVNjcmlwdE9iamVjdDsKIAogICAgIGNsYXNzIERl
ZmVycmVkVGFza0Jhc2UgewogICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsMTAgKzIyLDEwIEBACiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
IldlYlNldHRpbmdzX3AuaCIKIAotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybURldmljZUluZm8uaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZv
cm1Gb250SW5mby5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNjcmVlbi5oPgorI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPENvbG9yLmg+CiAj
aW5jbHVkZSA8RmxvYXRTaXplLmg+CiAjaW5jbHVkZSA8UGFnZUNhY2hlLmg+CkBAIC0yMDEsMTUg
KzIwMSwxNSBAQCBXZWJTZXR0aW5ncyogV2ViU2V0dGluZ3M6OnN0YW5kYXJkU2V0dGluCiAgICAg
c2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0SW50ZWdlcihXZWJLaXRNaW5pbXVtRm9udFNpemUsIDgp
OwogICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0V2ViU29ja2V0c0Vu
YWJsZWQsIHRydWUpOwogCi0gICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktp
dEZpeGVkRm9udEZhbWlseSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5j
ZSgpLT5mb250RmFtaWx5KCItd2Via2l0LW1vbm9zcGFjZSIsICIiKS5jX3N0cigpKTsKLSAgICBz
ZXR0aW5ncy0+bV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0U2Fuc1NlcmlmZkZvbnRGYW1pbHks
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgi
LXdlYmtpdC1zYW5zLXNlcmlmIiwgIiIpLmNfc3RyKCkpOwotICAgIHNldHRpbmdzLT5tX3ByaXZh
dGUtPnNldFN0cmluZyhXZWJLaXRTZXJpZmZGb250RmFtaWx5LCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoIi13ZWJraXQtc2VyaWYiLCAiIiku
Y19zdHIoKSk7Ci0gICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdFN0YW5k
YXJkRm9udEZhbWlseSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjppbnN0YW5jZSgp
LT5mb250RmFtaWx5KCItd2Via2l0LXN0YW5kYXJkIiwgIiIpLmNfc3RyKCkpOworICAgIHNldHRp
bmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRGaXhlZEZvbnRGYW1pbHksIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5zdGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1t
b25vc3BhY2UiLCAiIikpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJL
aXRTYW5zU2VyaWZmRm9udEZhbWlseSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZvbnRJbmZvOjpp
bnN0YW5jZSgpLT5mb250RmFtaWx5KCItd2Via2l0LXNhbnMtc2VyaWYiLCAiIikpOworICAgIHNl
dHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTZXJpZmZGb250RmFtaWx5LCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6Rm9udEluZm86Omluc3RhbmNlKCktPmZvbnRGYW1pbHkoIi13ZWJr
aXQtc2VyaWYiLCAiIikpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJL
aXRTdGFuZGFyZEZvbnRGYW1pbHksIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGb250SW5mbzo6aW5z
dGFuY2UoKS0+Zm9udEZhbWlseSgiLXdlYmtpdC1zdGFuZGFyZCIsICIiKSk7CiAKICAgICByZXR1
cm4gc2V0dGluZ3M7CiB9CiAKLXZvaWQgV2ViU2V0dGluZ3M6OmFkZFN1cHBvcnRlZE9iamVjdFBs
dWdpbk1JTUVUeXBlKGNvbnN0IGNoYXIqIHR5cGUpCit2b2lkIFdlYlNldHRpbmdzOjphZGRTdXBw
b3J0ZWRPYmplY3RQbHVnaW5NSU1FVHlwZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiB0eXBlKQogewogICAgIGlmICghc19zdXBwb3J0ZWRPYmplY3RNSU1FVHlwZXMpCiAgICAg
ICAgIHNfc3VwcG9ydGVkT2JqZWN0TUlNRVR5cGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPjsKQEAg
LTIxNyw5ICsyMTcsOSBAQCB2b2lkIFdlYlNldHRpbmdzOjphZGRTdXBwb3J0ZWRPYmplY3RQbHVn
CiAgICAgc19zdXBwb3J0ZWRPYmplY3RNSU1FVHlwZXMtPmFkZCh0eXBlKTsKIH0KIAotYm9vbCBX
ZWJTZXR0aW5nczo6aXNTdXBwb3J0ZWRPYmplY3RNSU1FVHlwZShjb25zdCBXZWJTdHJpbmcmIG1p
bWVUeXBlKQorYm9vbCBXZWJTZXR0aW5nczo6aXNTdXBwb3J0ZWRPYmplY3RNSU1FVHlwZShjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKQorICAgIGlmIChtaW1lVHlwZS5lbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoIXNfc3VwcG9ydGVkT2JqZWN0TUlNRVR5cGVzKQpAQCAtMzI4
LDYyICszMjgsNjIgQEAgdm9pZCBXZWJTZXR0aW5nczo6c2V0TWluaW11bUZvbnRTaXplKGludAog
ICAgIG1fcHJpdmF0ZS0+c2V0SW50ZWdlcihXZWJLaXRNaW5pbXVtRm9udFNpemUsIG1pbmltdW1G
b250U2l6ZSk7CiB9CiAKLVdlYlN0cmluZyBXZWJTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5KCkg
Y29uc3QKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViU2V0dGluZ3M6OnNlcmlmRm9u
dEZhbWlseSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktp
dFNlcmlmZkZvbnRGYW1pbHkpOwogfQogCi12b2lkIFdlYlNldHRpbmdzOjpzZXRTZXJpZkZvbnRG
YW1pbHkoY29uc3QgY2hhciogc2VyaWZmRm9udEZhbWlseSkKK3ZvaWQgV2ViU2V0dGluZ3M6OnNl
dFNlcmlmRm9udEZhbWlseShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzZXJp
ZmZGb250RmFtaWx5KQogewogICAgIG1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdFNlcmlmZkZv
bnRGYW1pbHksIHNlcmlmZkZvbnRGYW1pbHkpOwogfQogCi1XZWJTdHJpbmcgV2ViU2V0dGluZ3M6
OmZpeGVkRm9udEZhbWlseSgpIGNvbnN0CitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdl
YlNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHkoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldFN0cmluZyhXZWJLaXRGaXhlZEZvbnRGYW1pbHkpOwogfQogCi12b2lkIFdlYlNldHRp
bmdzOjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgY2hhciogZml4ZWRGb250RmFtaWx5KQordm9p
ZCBXZWJTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmcmIGZpeGVkRm9udEZhbWlseSkKIHsKICAgICBtX3ByaXZhdGUtPnNldFN0cmlu
ZyhXZWJLaXRGaXhlZEZvbnRGYW1pbHksIGZpeGVkRm9udEZhbWlseSk7CiB9CiAKLVdlYlN0cmlu
ZyBXZWJTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0CitCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjpzYW5zU2VyaWZGb250RmFtaWx5KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0U2Fuc1NlcmlmZkZvbnRG
YW1pbHkpOwogfQogCi12b2lkIFdlYlNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNv
bnN0IGNoYXIqIHNhbnNTZXJpZmZGb250RmFtaWx5KQordm9pZCBXZWJTZXR0aW5nczo6c2V0U2Fu
c1NlcmlmRm9udEZhbWlseShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBzYW5z
U2VyaWZmRm9udEZhbWlseSkKIHsKICAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTYW5z
U2VyaWZmRm9udEZhbWlseSwgc2Fuc1NlcmlmZkZvbnRGYW1pbHkpOwogfQogCi1XZWJTdHJpbmcg
V2ViU2V0dGluZ3M6OnN0YW5kYXJkRm9udEZhbWlseSgpIGNvbnN0CitCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjpzdGFuZGFyZEZvbnRGYW1pbHkoKSBjb25zdAogewog
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRTdGFuZGFyZEZvbnRGYW1pbHkp
OwogfQogCi12b2lkIFdlYlNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgY2hh
ciogc3RhbmRhcmRGb250RmFtaWx5KQordm9pZCBXZWJTZXR0aW5nczo6c2V0U3RhbmRhcmRGb250
RmFtaWx5KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHN0YW5kYXJkRm9udEZh
bWlseSkKIHsKICAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTdGFuZGFyZEZvbnRGYW1p
bHksIHN0YW5kYXJkRm9udEZhbWlseSk7CiB9CiAKLVdlYlN0cmluZyBXZWJTZXR0aW5nczo6dXNl
ckFnZW50U3RyaW5nKCkgY29uc3QKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViU2V0
dGluZ3M6OnVzZXJBZ2VudFN0cmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Z2V0U3RyaW5nKEJsYWNrQmVycnlVc2VyQWdlbnRTdHJpbmcpOwogfQogCi12b2lkIFdlYlNldHRp
bmdzOjpzZXRVc2VyQWdlbnRTdHJpbmcoY29uc3QgV2ViU3RyaW5nJiB1c2VyQWdlbnRTdHJpbmcp
Cit2b2lkIFdlYlNldHRpbmdzOjpzZXRVc2VyQWdlbnRTdHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyYgdXNlckFnZW50U3RyaW5nKQogewogICAgIG1fcHJpdmF0ZS0+c2V0
U3RyaW5nKEJsYWNrQmVycnlVc2VyQWdlbnRTdHJpbmcsIHVzZXJBZ2VudFN0cmluZyk7CiB9CiAK
LVdlYlN0cmluZyBXZWJTZXR0aW5nczo6ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSBjb25zdAor
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBXZWJTZXR0aW5nczo6ZGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhXZWJL
aXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSk7CiB9CiAKLXZvaWQgV2ViU2V0dGluZ3M6OnNldERl
ZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1l
KQordm9pZCBXZWJTZXR0aW5nczo6c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZGVmYXVsdFRleHRFbmNvZGluZ05hbWUpCiB7CiAg
ICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUsIGRl
ZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsKIH0KQEAgLTQ1OCwyMCArNDU4LDE5IEBAIHZvaWQgV2Vi
U2V0dGluZ3M6OnNldEdldEZvY3VzTm9kZUNvbnRleHQKICAgICBtX3ByaXZhdGUtPnNldEJvb2xl
YW4oQmxhY2tCZXJyeUdldEZvY3VzTm9kZUNvbnRleHRFbmFibGVkLCBlbmFibGVkKTsKIH0KIAot
V2ViU3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVldFN0cmluZygpIGNvbnN0CitCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVldFN0cmlu
ZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktpdFVzZXJT
dHlsZVNoZWV0KTsKIH0KIAotdm9pZCBXZWJTZXR0aW5nczo6c2V0VXNlclN0eWxlU2hlZXRTdHJp
bmcoY29uc3QgY2hhciogdXNlclN0eWxlU2hlZXRTdHJpbmcpCit2b2lkIFdlYlNldHRpbmdzOjpz
ZXRVc2VyU3R5bGVTaGVldFN0cmluZyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiB1c2VyU3R5bGVTaGVldFN0cmluZykKIHsKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHNl
ZW0gbGlrZSB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgdG8gZG8gdGhpcyBhcyBXZWJTZXR0aW5ncyBz
aG91bGQgaWRlYWxseSBiZSBhIHN0YXRlIHN0b3JlLgogICAgIC8vIEVpdGhlciB0aGUgY2FsbGVy
IG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvIHRoaXMgY29udmVyc2lvbiBvciBjYWxsZXIgb2Yg
dGhlIGdldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZnVuY3Rpb24KICAgICAvLyBzaG91bGQg
ZG8gdGhpcyBjb252ZXJzaW9uLgogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbih1c2VyU3R5
bGVTaGVldFN0cmluZyk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQo
dXNlclN0eWxlU2hlZXRTdHJpbmcsIGxlbmd0aCk7CisgICAgZGF0YS5hcHBlbmQodXNlclN0eWxl
U2hlZXRTdHJpbmcuY19zdHIoKSwgdXNlclN0eWxlU2hlZXRTdHJpbmcubGVuZ3RoKCkpOwogCiAg
ICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwogICAgIGJhc2U2NEVuY29kZShkYXRhLCBlbmNv
ZGVkRGF0YSk7CkBAIC00ODUsMTIgKzQ4NCwxMiBAQCB2b2lkIFdlYlNldHRpbmdzOjpzZXRVc2Vy
U3R5bGVTaGVldFN0cmluCiAgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0VXNlclN0eWxl
U2hlZXQsIFN0cmluZyhkYXRhVVJMLmRhdGEoKSwgZGF0YVVSTC5zaXplKCkpKTsKIH0KIAotV2Vi
U3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkKK0JsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcgV2ViU2V0dGluZ3M6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKQog
ewogICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKTsKIH0KIAotdm9pZCBXZWJTZXR0aW5nczo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlv
bihjb25zdCBjaGFyKiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKQordm9pZCBXZWJTZXR0aW5nczo6
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKQogewogICAgIG1fcHJpdmF0ZS0+c2V0U3RyaW5n
KFdlYktpdFVzZXJTdHlsZVNoZWV0TG9jYXRpb24sIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOwog
fQpAQCAtNjQwLDUyICs2MzksNTIgQEAgdm9pZCBXZWJTZXR0aW5nczo6c2V0TWF4aW11bVBhZ2Vz
SW5DYWNoZQogICAgIG1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoV2ViS2l0TWF4aW11bVBhZ2VzSW5D
YWNoZSwgcmVhbFBhZ2VzKTsKIH0KIAotV2ViU3RyaW5nIFdlYlNldHRpbmdzOjpsb2NhbFN0b3Jh
Z2VQYXRoKCkgY29uc3QKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgV2ViU2V0dGluZ3M6
OmxvY2FsU3RvcmFnZVBhdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0
cmluZyhXZWJLaXRMb2NhbFN0b3JhZ2VQYXRoKTsKIH0KIAotdm9pZCBXZWJTZXR0aW5nczo6c2V0
TG9jYWxTdG9yYWdlUGF0aChjb25zdCBXZWJTdHJpbmcmIHBhdGgpCit2b2lkIFdlYlNldHRpbmdz
OjpzZXRMb2NhbFN0b3JhZ2VQYXRoKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
IHBhdGgpCiB7CiAgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0TG9jYWxTdG9yYWdlUGF0
aCwgcGF0aCk7CiB9CiAKLVdlYlN0cmluZyBXZWJTZXR0aW5nczo6aW5kZXhlZERhdGFCYXNlUGF0
aCgpIGNvbnN0CitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjppbmRl
eGVkRGF0YUJhc2VQYXRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJp
bmcoV2ViS2l0SW5kZXhlZERhdGFCYXNlUGF0aCk7CiB9CiAKLXZvaWQgV2ViU2V0dGluZ3M6OnNl
dEluZGV4ZWREYXRhQmFzZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBwYXRoKQordm9pZCBXZWJTZXR0
aW5nczo6c2V0SW5kZXhlZERhdGFCYXNlUGF0aChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
U3RyaW5nJiBwYXRoKQogewogICAgIG1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdEluZGV4ZWRE
YXRhQmFzZVBhdGgsIHBhdGgpOwogfQogCi1XZWJTdHJpbmcgV2ViU2V0dGluZ3M6OmRhdGFiYXNl
UGF0aCgpIGNvbnN0CitCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjpk
YXRhYmFzZVBhdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhX
ZWJLaXREYXRhYmFzZVBhdGgpOwogfQogCi12b2lkIFdlYlNldHRpbmdzOjpzZXREYXRhYmFzZVBh
dGgoY29uc3QgV2ViU3RyaW5nJiBwYXRoKQordm9pZCBXZWJTZXR0aW5nczo6c2V0RGF0YWJhc2VQ
YXRoKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHBhdGgpCiB7CiAgICAgbV9w
cml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0RGF0YWJhc2VQYXRoLCBwYXRoKTsKIH0KIAotV2ViU3Ry
aW5nIFdlYlNldHRpbmdzOjphcHBDYWNoZVBhdGgoKSBjb25zdAorQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyBXZWJTZXR0aW5nczo6YXBwQ2FjaGVQYXRoKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVQ
YXRoKTsKIH0KIAotdm9pZCBXZWJTZXR0aW5nczo6c2V0QXBwQ2FjaGVQYXRoKGNvbnN0IFdlYlN0
cmluZyYgcGF0aCkKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldEFwcENhY2hlUGF0aChjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYXRoKQogewogICAgIG1fcHJpdmF0ZS0+c2V0U3Ry
aW5nKFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlUGF0aCwgcGF0aCk7CiB9CiAKLVdl
YlN0cmluZyBXZWJTZXR0aW5nczo6cGFnZUdyb3VwTmFtZSgpIGNvbnN0CitCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nIFdlYlNldHRpbmdzOjpwYWdlR3JvdXBOYW1lKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0UGFnZUdyb3VwTmFtZSk7CiB9CiAK
LXZvaWQgV2ViU2V0dGluZ3M6OnNldFBhZ2VHcm91cE5hbWUoY29uc3QgV2ViU3RyaW5nJiBwYWdl
R3JvdXBOYW1lKQordm9pZCBXZWJTZXR0aW5nczo6c2V0UGFnZUdyb3VwTmFtZShjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYWdlR3JvdXBOYW1lKQogewogICAgIG1fcHJpdmF0
ZS0+c2V0U3RyaW5nKFdlYktpdFBhZ2VHcm91cE5hbWUsIHBhZ2VHcm91cE5hbWUpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU2V0dGluZ3MuaAkocmV2aXNpb24g
MTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlbGVn
YXRlKFdlYlNldHRpbmdzRGVsZWdhdGUqKTsKICAgICBXZWJTZXR0aW5nc0RlbGVnYXRlKiBkZWxl
Z2F0ZSgpOwogCi0gICAgc3RhdGljIHZvaWQgYWRkU3VwcG9ydGVkT2JqZWN0UGx1Z2luTUlNRVR5
cGUoY29uc3QgY2hhciopOwotICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkT2JqZWN0TUlNRVR5
cGUoY29uc3QgV2ViU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgYWRkU3VwcG9ydGVkT2JqZWN0
UGx1Z2luTUlNRVR5cGUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOworICAg
IHN0YXRpYyBib29sIGlzU3VwcG9ydGVkT2JqZWN0TUlNRVR5cGUoY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyYpOwogCiAgICAgYm9vbCB4c3NBdWRpdG9yRW5hYmxlZCgpIGNvbnN0
OwogICAgIHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCk7CkBAIC04NCwyMyArODQsMjMg
QEAgcHVibGljOgogICAgIGludCBtaW5pbXVtRm9udFNpemUoKSBjb25zdDsKICAgICB2b2lkIHNl
dE1pbmltdW1Gb250U2l6ZShpbnQpOwogCi0gICAgV2ViU3RyaW5nIHNlcmlmRm9udEZhbWlseSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqKTsKLSAgICBX
ZWJTdHJpbmcgZml4ZWRGb250RmFtaWx5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGaXhlZEZvbnRG
YW1pbHkoY29uc3QgY2hhciopOwotICAgIFdlYlN0cmluZyBzYW5zU2VyaWZGb250RmFtaWx5KCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqKTsKLSAg
ICBXZWJTdHJpbmcgc3RhbmRhcmRGb250RmFtaWx5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdGFu
ZGFyZEZvbnRGYW1pbHkoY29uc3QgY2hhciopOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcgc2VyaWZGb250RmFtaWx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZXJpZkZvbnRGYW1p
bHkoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOworICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpTdHJpbmcgZml4ZWRGb250RmFtaWx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRG
aXhlZEZvbnRGYW1pbHkoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOworICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgc2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0
OworICAgIHZvaWQgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nJik7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBzdGFuZGFy
ZEZvbnRGYW1pbHkoKSBjb25zdDsKKyAgICB2b2lkIHNldFN0YW5kYXJkRm9udEZhbWlseShjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKICAgICB2b2lkIHNldERvd25sb2Fk
YWJsZUJpbmFyeUZvbnRzRW5hYmxlZChib29sKTsKICAgICBib29sIGRvd25sb2FkYWJsZUJpbmFy
eUZvbnRzRW5hYmxlZCgpIGNvbnN0OwogCi0gICAgV2ViU3RyaW5nIHVzZXJBZ2VudFN0cmluZygp
IGNvbnN0OwotICAgIHZvaWQgc2V0VXNlckFnZW50U3RyaW5nKGNvbnN0IFdlYlN0cmluZyYpOwor
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgdXNlckFnZW50U3RyaW5nKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRVc2VyQWdlbnRTdHJpbmcoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyYpOwogCi0gICAgV2ViU3RyaW5nIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBjaGFyKik7Cisg
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwogCiAgICAgYm9vbCBpc1pvb21Ub0ZpdE9uTG9hZCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0Wm9vbVRvRml0T25Mb2FkKGJvb2wpOwpAQCAtMTI2LDExICsx
MjYsMTEgQEAgcHVibGljOgogICAgIGJvb2wgZG9lc0dldEZvY3VzTm9kZUNvbnRleHQoKSBjb25z
dDsKICAgICB2b2lkIHNldEdldEZvY3VzTm9kZUNvbnRleHQoYm9vbCk7CiAKLSAgICBXZWJTdHJp
bmcgdXNlclN0eWxlU2hlZXRTdHJpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNldFVzZXJTdHlsZVNo
ZWV0U3RyaW5nKGNvbnN0IGNoYXIqKTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
IHVzZXJTdHlsZVNoZWV0U3RyaW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVl
dFN0cmluZyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKLSAgICBXZWJT
dHJpbmcgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOwotICAgIHZvaWQgc2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihjb25zdCBjaGFyKik7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCk7CisgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmKTsKIAogICAgIC8vIEV4
dGVybmFsIGxpbmsgaGFuZGxlcnMKICAgICBib29sIGFyZUxpbmtzSGFuZGxlZEV4dGVybmFsbHko
KSBjb25zdDsKQEAgLTE3NSwyMCArMTc1LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1heGlt
dW1QYWdlc0luQ2FjaGUoaW50KTsKICAgICBpbnQgbWF4aW11bVBhZ2VzSW5DYWNoZSgpIGNvbnN0
OwogCi0gICAgV2ViU3RyaW5nIGxvY2FsU3RvcmFnZVBhdGgoKSBjb25zdDsKLSAgICB2b2lkIHNl
dExvY2FsU3RvcmFnZVBhdGgoY29uc3QgV2ViU3RyaW5nJik7CisgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyBsb2NhbFN0b3JhZ2VQYXRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMb2Nh
bFN0b3JhZ2VQYXRoKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmKTsKIAotICAg
IFdlYlN0cmluZyBpbmRleGVkRGF0YUJhc2VQYXRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJbmRl
eGVkRGF0YUJhc2VQYXRoKGNvbnN0IFdlYlN0cmluZyYpOworICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmcgaW5kZXhlZERhdGFCYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0SW5k
ZXhlZERhdGFCYXNlUGF0aChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAK
LSAgICBXZWJTdHJpbmcgZGF0YWJhc2VQYXRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREYXRhYmFz
ZVBhdGgoY29uc3QgV2ViU3RyaW5nJik7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmlu
ZyBkYXRhYmFzZVBhdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldERhdGFiYXNlUGF0aChjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKLSAgICBXZWJTdHJpbmcgYXBwQ2FjaGVQ
YXRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBcHBDYWNoZVBhdGgoY29uc3QgV2ViU3RyaW5nJik7
CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBhcHBDYWNoZVBhdGgoKSBjb25zdDsK
KyAgICB2b2lkIHNldEFwcENhY2hlUGF0aChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJik7CiAKLSAgICBXZWJTdHJpbmcgcGFnZUdyb3VwTmFtZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0UGFnZUdyb3VwTmFtZShjb25zdCBXZWJTdHJpbmcmKTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6U3RyaW5nIHBhZ2VHcm91cE5hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFBhZ2VHcm91
cE5hbWUoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYpOwogCiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBoYXZlIGFuIGVtYWlsIG1vZGUuIEluc3RlYWQsIHdlIHNob3VsZCBl
eHBvc2UgYWxsIGVtYWlsLXJlbGF0ZWQgc2V0dGluZ3MKICAgICAvLyBzbyB0aGF0IHRoZSBlbWFp
bCBjbGllbnQgY2FuIHRvZ2dsZSB0aGVtIGRpcmVjdGx5LgpJbmRleDogU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKLQot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdl
YlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IGNoYXIqIGxhdGluMSkKLSAgICA6IG1faW1wbChTdHJp
bmdJbXBsOjpjcmVhdGUobGF0aW4xKS5sZWFrUmVmKCkpCi17Ci19Ci0KLVdlYlN0cmluZzo6V2Vi
U3RyaW5nKGNvbnN0IGNoYXIqIGxhdGluMSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogbV9pbXBs
KFN0cmluZ0ltcGw6OmNyZWF0ZShsYXRpbjEsIGxlbmd0aCkubGVha1JlZigpKQotewotfQotCi1X
ZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCB1bnNpZ25lZCBzaG9ydCogdXRmMTYsIHVuc2lnbmVk
IGxlbmd0aCkKLSAgICA6IG1faW1wbChTdHJpbmdJbXBsOjpjcmVhdGUodXRmMTYsIGxlbmd0aCku
bGVha1JlZigpKQotewotfQotCi1XZWJTdHJpbmc6OldlYlN0cmluZyhTdHJpbmdJbXBsKiBpbXBs
KQotICAgIDogbV9pbXBsKGltcGwpCi17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT5yZWYoKTsKLX0KLQotV2ViU3RyaW5nOjp+V2ViU3RyaW5nKCkKLXsKLSAgICBpZiAobV9pbXBs
KQotICAgICAgICBtX2ltcGwtPmRlcmVmKCk7Ci19Ci0KLVdlYlN0cmluZzo6V2ViU3RyaW5nKGNv
bnN0IFdlYlN0cmluZyYgc3RyKQotICAgIDogbV9pbXBsKHN0ci5tX2ltcGwpCi17Ci0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5yZWYoKTsKLX0KLQotV2ViU3RyaW5nIFdlYlN0cmlu
Zzo6ZnJvbVV0ZjgoY29uc3QgY2hhciogdXRmOCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCh1dGY4KTsKLX0KLQotV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVV0ZjgoY29uc3QgY2hh
ciogdXRmOCwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh1
dGY4LCBsZW5ndGgpOwotfQotCi1XZWJTdHJpbmcmIFdlYlN0cmluZzo6b3BlcmF0b3I9KGNvbnN0
IFdlYlN0cmluZyYgc3RyKQotewotICAgIGlmICgmc3RyID09IHRoaXMpCi0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICBpZiAoc3RyLm1faW1wbCkKLSAgICAgICAgc3RyLm1faW1wbC0+cmVmKCk7
Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5kZXJlZigpOwotICAgIG1faW1wbCA9
IHN0ci5tX2ltcGw7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1zdGQ6OnN0cmluZyBXZWJTdHJp
bmc6OnV0ZjgoKSBjb25zdAotewotICAgIHN0ZDo6c3RyaW5nIHV0Zjg7Ci0gICAgaWYgKCFtX2lt
cGwpCi0gICAgICAgIHJldHVybiB1dGY4OwotCi0gICAgQ1N0cmluZyBjc3RyID0gU3RyaW5nKG1f
aW1wbCkudXRmOCgpOwotICAgIHV0ZjguYXNzaWduKGNzdHIuZGF0YSgpLCBjc3RyLmxlbmd0aCgp
KTsKLSAgICByZXR1cm4gdXRmODsKLX0KLQotY29uc3QgdW5zaWduZWQgc2hvcnQqIFdlYlN0cmlu
Zzo6Y2hhcmFjdGVycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Y2hh
cmFjdGVycygpIDogMDsKLX0KLQotdW5zaWduZWQgV2ViU3RyaW5nOjpsZW5ndGgoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpIDogMDsKLX0KLQotYm9vbCBX
ZWJTdHJpbmc6OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2lt
cGwtPmxlbmd0aCgpOwotfQotCi1ib29sIFdlYlN0cmluZzo6ZXF1YWwoY29uc3QgY2hhciogdXRm
OCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjplcXVhbChtX2ltcGwsIHV0ZjgpOwotfQotCi1i
b29sIFdlYlN0cmluZzo6ZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogdXRmOCkgY29uc3QK
LXsKLSAgICByZXR1cm4gV1RGOjplcXVhbElnbm9yaW5nQ2FzZSh1dGY4LCBXVEY6OlN0cmluZyht
X2ltcGwpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci19IC8vIG5hbWVzcGFjZSBCbGFj
a0JlcnJ5CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmgJKHJl
dmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIFdlYlN0cmluZ19oCi0jZGVm
aW5lIFdlYlN0cmluZ19oCi0KLSNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCi0jaW5jbHVk
ZSA8c3RyaW5nPgotCi0vLyBOb3QgZm9yIHB1YmxpYyBBUEkgcHVycG9zZS4KLW5hbWVzcGFjZSBX
VEYgewotY2xhc3MgU3RyaW5nSW1wbDsKLX0KLQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEJMQUNLQkVSUllfRVhQT1JUIFdlYlN0cmluZyB7Ci1w
dWJsaWM6Ci0gICAgV2ViU3RyaW5nKCkgOiBtX2ltcGwoMCkgeyB9Ci0gICAgfldlYlN0cmluZygp
OwotICAgIFdlYlN0cmluZyhjb25zdCBjaGFyKiBsYXRpbjEpOwotICAgIFdlYlN0cmluZyhjb25z
dCBjaGFyKiBsYXRpbjEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgV2ViU3RyaW5nKGNvbnN0IHVu
c2lnbmVkIHNob3J0KiB1dGYxNiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXZWJTdHJpbmcoY29u
c3QgV2ViU3RyaW5nJik7Ci0gICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViU3RyaW5n
Jik7Ci0gICAgc3RkOjpzdHJpbmcgdXRmOCgpIGNvbnN0OwotICAgIHN0YXRpYyBXZWJTdHJpbmcg
ZnJvbVV0ZjgoY29uc3QgY2hhciogdXRmOCk7Ci0gICAgc3RhdGljIFdlYlN0cmluZyBmcm9tVXRm
OChjb25zdCBjaGFyKiB1dGY4LCBzaXplX3QgbGVuZ3RoKTsKLSAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCogY2hhcmFjdGVycygpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owot
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgIGJvb2wgZXF1YWwoY29uc3QgY2hhciogdXRm
OCkgY29uc3Q7Ci0gICAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiB1dGY4KSBj
b25zdDsKLQotICAgIC8vIE5vdCBmb3IgcHVibGljIEFQSSBwdXJwb3NlLgotICAgIFdlYlN0cmlu
ZyhXVEY6OlN0cmluZ0ltcGwqKTsKLSAgICBXVEY6OlN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7
IHJldHVybiBtX2ltcGw7IH0KLQotcHJpdmF0ZToKLSAgICBXVEY6OlN0cmluZ0ltcGwqIG1faW1w
bDsKLX07Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLX0gLy8gbmFtZXNwYWNlIEJsYWNrQmVycnkK
LQotI2VuZGlmIC8vIFdlYlN0cmluZ19oCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNr
QmVycnkuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDExICs2MSwxMSBAQAogI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgogI2luY2x1ZGUgIldl
YlBvcHVwVHlwZS5oIgogI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybUxvZy5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmg+
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtV2luZG93Lmg+CiAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBA
IC0xMzgsNyArMTM4LDcgQEAgYm9vbCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpydW5KYXZhU2Ny
aQogCiAgICAgVGltZXJCYXNlOjpmaXJlVGltZXJzSW5OZXN0ZWRFdmVudExvb3AoKTsKICAgICBD
U3RyaW5nIGxhdGluT3JpZ2luID0gdG9PcmlnaW5TdHJpbmcoZnJhbWUpOwotICAgIFdlYlN0cmlu
ZyBjbGllbnRSZXN1bHQ7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBjbGllbnRS
ZXN1bHQ7CiAgICAgaWYgKG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5ydW5KYXZhU2NyaXB0
UHJvbXB0KG1lc3NhZ2UuY2hhcmFjdGVycygpLCBtZXNzYWdlLmxlbmd0aCgpLCBkZWZhdWx0VmFs
dWUuY2hhcmFjdGVycygpLCBkZWZhdWx0VmFsdWUubGVuZ3RoKCksIGxhdGluT3JpZ2luLmRhdGEo
KSwgbGF0aW5PcmlnaW4ubGVuZ3RoKCksIGNsaWVudFJlc3VsdCkpIHsKICAgICAgICAgcmVzdWx0
ID0gY2xpZW50UmVzdWx0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OCw3ICsyNDgsNyBA
QCBQYWdlKiBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpjcmVhdGVXaW5kCiAgICAgaWYgKGZlYXR1
cmVzLmRpYWxvZykKICAgICAgICAgZmxhZ3MgfD0gV2ViUGFnZUNsaWVudDo6RmxhZ1dpbmRvd0lz
RGlhbG9nOwogCi0gICAgV2ViUGFnZSogd2ViUGFnZSA9IG1fd2ViUGFnZVByaXZhdGUtPm1fY2xp
ZW50LT5jcmVhdGVXaW5kb3coeCwgeSwgd2lkdGgsIGhlaWdodCwgZmxhZ3MsIFdlYlN0cmluZyhy
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLnN0cmluZygpKSwgV2ViU3RyaW5nKHJlcXVl
c3QuZnJhbWVOYW1lKCkpKTsKKyAgICBXZWJQYWdlKiB3ZWJQYWdlID0gbV93ZWJQYWdlUHJpdmF0
ZS0+bV9jbGllbnQtPmNyZWF0ZVdpbmRvdyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmbGFncywgcmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSwgcmVxdWVzdC5mcmFtZU5hbWUo
KSk7CiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNTA3LDI2ICs1
MDcsMjYgQEAgdm9pZCBDaHJvbWVDbGllbnRCbGFja0JlcnJ5OjpleGNlZWRlZERhdAogCiB2b2lk
IENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8
RmlsZUNob29zZXI+IGNob29zZXIpCiB7Ci0gICAgU2hhcmVkQXJyYXk8V2ViU3RyaW5nPiBpbml0
aWFsRmlsZXM7CisgICAgU2hhcmVkQXJyYXk8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4g
aW5pdGlhbEZpbGVzOwogICAgIHVuc2lnbmVkIG51bWJlck9mSW5pdGlhbEZpbGVzID0gY2hvb3Nl
ci0+c2V0dGluZ3MoKS5zZWxlY3RlZEZpbGVzLnNpemUoKTsKICAgICBpZiAobnVtYmVyT2ZJbml0
aWFsRmlsZXMgPiAwKQotICAgICAgICBpbml0aWFsRmlsZXMucmVzZXQobmV3IFdlYlN0cmluZ1tu
dW1iZXJPZkluaXRpYWxGaWxlc10sIG51bWJlck9mSW5pdGlhbEZpbGVzKTsKKyAgICAgICAgaW5p
dGlhbEZpbGVzLnJlc2V0KG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nW251bWJlck9m
SW5pdGlhbEZpbGVzXSwgbnVtYmVyT2ZJbml0aWFsRmlsZXMpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1iZXJPZkluaXRpYWxGaWxlczsgKytpKQogICAgICAgICBpbml0aWFsRmls
ZXNbaV0gPSBjaG9vc2VyLT5zZXR0aW5ncygpLnNlbGVjdGVkRmlsZXNbaV07CiAKLSAgICBTaGFy
ZWRBcnJheTxXZWJTdHJpbmc+IGFjY2VwdE1JTUVUeXBlczsKKyAgICBTaGFyZWRBcnJheTxCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiBhY2NlcHRNSU1FVHlwZXM7CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZUeXBlcyA9IGNob29zZXItPnNldHRpbmdzKCkuYWNjZXB0TUlNRVR5cGVzLnNpemUo
KTsKICAgICBpZiAobnVtYmVyT2ZUeXBlcyA+IDApCi0gICAgICAgIGFjY2VwdE1JTUVUeXBlcy5y
ZXNldChuZXcgV2ViU3RyaW5nW251bWJlck9mVHlwZXNdLCBudW1iZXJPZlR5cGVzKTsKKyAgICAg
ICAgYWNjZXB0TUlNRVR5cGVzLnJlc2V0KG5ldyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
W251bWJlck9mVHlwZXNdLCBudW1iZXJPZlR5cGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZUeXBlczsgKytpKQogICAgICAgICBhY2NlcHRNSU1FVHlwZXNbaV0gPSBj
aG9vc2VyLT5zZXR0aW5ncygpLmFjY2VwdE1JTUVUeXBlc1tpXTsKIAotICAgIFdlYlN0cmluZyBj
YXB0dXJlOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgY2FwdHVyZTsKICNpZiBF
TkFCTEUoTUVESUFfQ0FQVFVSRSkKICAgICBjYXB0dXJlID0gY2hvb3Nlci0+c2V0dGluZ3MoKS5j
YXB0dXJlOwogI2VuZGlmCiAKLSAgICBTaGFyZWRBcnJheTxXZWJTdHJpbmc+IGNob3NlbkZpbGVz
OworICAgIFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+IGNob3NlbkZp
bGVzOwogCiAgICAgewogICAgICAgICBQYWdlR3JvdXBMb2FkRGVmZXJyZXIgZGVmZXJyZXIobV93
ZWJQYWdlUHJpdmF0ZS0+bV9wYWdlLCB0cnVlKTsKQEAgLTc3MywxNiArNzczLDYgQEAgdm9pZCBD
aHJvbWVDbGllbnRCbGFja0JlcnJ5OjpmdWxsU2NyZWVuUgogfQogI2VuZGlmCiAKLSNpZiBFTkFC
TEUoV0VCR0wpCi12b2lkIENocm9tZUNsaWVudEJsYWNrQmVycnk6OnJlcXVlc3RXZWJHTFBlcm1p
c3Npb24oRnJhbWUqIGZyYW1lKQotewotICAgIGlmIChmcmFtZSkgewotICAgICAgICBDU3RyaW5n
IGxhdGluT3JpZ2luID0gdG9PcmlnaW5TdHJpbmcoZnJhbWUpOwotICAgICAgICBtX3dlYlBhZ2VQ
cml2YXRlLT5tX2NsaWVudC0+cmVxdWVzdFdlYkdMUGVybWlzc2lvbihsYXRpbk9yaWdpbi5kYXRh
KCkpOwotICAgIH0KLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKFNWRykKIHZvaWQgQ2hyb21lQ2xp
ZW50QmxhY2tCZXJyeTo6ZGlkU2V0U1ZHWm9vbUFuZFBhbihGcmFtZSogZnJhbWUsIHVuc2lnbmVk
IHNob3J0IHpvb21BbmRQYW4pCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5
LmgJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5
ICsxMzEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVuRm9yRWxl
bWVudChFbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGZ1bGxTY3JlZW5SZW5kZXJlckNoYW5n
ZWQoUmVuZGVyQm94Kik7CiAjZW5kaWYKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RXZWJHTFBlcm1pc3Npb24oRnJhbWUqKTsKLSNlbmRpZgogCiAjaWYgRU5BQkxF
KFNWRykKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0U1ZHWm9vbUFuZFBhbihGcmFtZSosIHVuc2ln
bmVkIHNob3J0IHpvb21BbmRQYW4pOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHJldmlz
aW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9D
bGllbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1MCwxMCBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBjbGllbnRFeHRlbnNpb25NZXRob2QoCiAgICAgfQogCiAgICAgV2ViUGFn
ZUNsaWVudCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlQ2xpZW50Kj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBzdHJpbmcgcmV0VmFsOworICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgcmV0VmFsOwogICAgIGlmIChjbGllbnQpCi0gICAgICAg
IHJldFZhbCA9IGNsaWVudC0+aW52b2tlQ2xpZW50SmF2YVNjcmlwdENhbGxiYWNrKHN0ckFyZ3Ms
IGFyZ3VtZW50Q291bnQpLnV0ZjgoKTsKKyAgICAgICAgcmV0VmFsID0gY2xpZW50LT5pbnZva2VD
bGllbnRKYXZhU2NyaXB0Q2FsbGJhY2soc3RyQXJncywgYXJndW1lbnRDb3VudCk7CisgICAgLy8g
RklYTUU6IGFkZCBhIG1lY2hhbmlzbSB0byBwYXNzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBo
ZXJlCiAgICAgaWYgKCFyZXRWYWwuZW1wdHkoKSkKICAgICAgICAganNSZXRWYWwgPSBKU1ZhbHVl
TWFrZVN0cmluZyhjdHgsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJldFZhbC5jX3N0
cigpKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9D
b2xvclBpY2tlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L0NvbG9yUGlja2VyQ2xpZW50LmNwcAkocmV2aXNpb24gMTMxMjQ4
KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NvbG9yUGlja2Vy
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMjAgKzI5LDIwIEBACiAjaW5jbHVkZSAi
UG9wdXBQaWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJXZWJQ
YWdlX3AuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAorI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db2xvclBpY2tlckNsaWVudDo6Q29sb3JQaWNrZXJDbGll
bnQoY29uc3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHZhbHVlLCBCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlLCBIVE1MSW5wdXRFbGVtZW50KiBlbGVt
ZW50KQorQ29sb3JQaWNrZXJDbGllbnQ6OkNvbG9yUGlja2VyQ2xpZW50KGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZhbHVlLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQ
cml2YXRlKiB3ZWJQYWdlLCBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogICAgIDogbV93ZWJQ
YWdlKHdlYlBhZ2UpCiAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKIHsKICAgICBnZW5lcmF0ZUhU
TUwodmFsdWUpOwogfQogCi12b2lkIENvbG9yUGlja2VyQ2xpZW50OjpnZW5lcmF0ZUhUTUwoY29u
c3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHZhbHVlKQordm9pZCBDb2xvclBpY2tl
ckNsaWVudDo6Z2VuZXJhdGVIVE1MKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
IHZhbHVlKQogewogICAgIFN0cmluZ0J1aWxkZXIgc291cmNlOwogICAgIHNvdXJjZS5hcHBlbmRM
aXRlcmFsKCI8c3R5bGU+XG4iKTsKQEAgLTU2LDggKzU2LDggQEAgdm9pZCBDb2xvclBpY2tlckNs
aWVudDo6Z2VuZXJhdGVIVE1MKGNvbgogICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCI8c2NyaXB0
PlxuIik7CiAgICAgc291cmNlLmFwcGVuZExpdGVyYWwoIndpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdsb2FkJywgZnVuY3Rpb24gKCkgeyIpOwogICAgIHNvdXJjZS5hcHBlbmRMaXRlcmFsKCJ3aW5k
b3cucG9wdXBjb250cm9sLnNob3coIik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHNvdXJjZS5hcHBlbmQoIlwiIiArIFN0cmluZyh2YWx1ZS5pbXBsKCkpICsgIlwiKTsgXG4g
fSk7IFxuIik7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKQorICAgICAgICBzb3VyY2UuYXBwZW5k
KCJcIiIgKyBTdHJpbmcodmFsdWUpICsgIlwiKTsgXG4gfSk7IFxuIik7CiAgICAgZWxzZQogICAg
ICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiKTsgXG4gfSk7IFxuIik7CiAgICAgc291cmNlLmFw
cGVuZChjb2xvckNvbnRyb2xCbGFja0JlcnJ5SnMsIHNpemVvZihjb2xvckNvbnRyb2xCbGFja0Jl
cnJ5SnMpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9D
b2xvclBpY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJDb3JlU3VwcG9ydC9Db2xvclBpY2tlckNsaWVudC5oCShyZXZpc2lvbiAxMzEyNDgpCisr
KyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ29sb3JQaWNrZXJDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsMTIgQEAKICNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1JbnB1dEV2ZW50cy5oPgogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1l
c3BhY2UgUGxhdGZvcm0geworY2xhc3MgU3RyaW5nOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IGNsYXNzIFdlYlBhZ2VQcml2YXRlOwotY2xhc3MgV2ViU3RyaW5nOwogfQogfQogCkBAIC0zNSw5
ICszOCw5IEBAIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAKIGNsYXNzIENvbG9yUGlja2VyQ2xp
ZW50IDogcHVibGljIFBhZ2VQb3B1cENsaWVudCB7CiBwdWJsaWM6Ci0gICAgQ29sb3JQaWNrZXJD
bGllbnQoY29uc3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHZhbHVlLCBCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRNTElucHV0RWxlbWVudCopOworICAgIENv
bG9yUGlja2VyQ2xpZW50KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHZhbHVl
LCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRNTElucHV0RWxlbWVudCop
OwogCi0gICAgdm9pZCBnZW5lcmF0ZUhUTUwoY29uc3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJT
dHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIGdlbmVyYXRlSFRNTChjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCB3cml0ZURvY3VtZW50KERvY3VtZW50
V3JpdGVyJik7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpOwogICAgIFN0cmluZyBodG1sU291
cmNlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvQ3JlZGVudGlhbE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DcmVkZW50aWFsTWFuYWdlci5jcHAJKHJldmlzaW9uIDEz
MTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DcmVkZW50
aWFsTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDggQEAKICNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCbGFj
a0JlcnJ5LmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKLXVzaW5nIEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViU3RyaW5nOworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDcgKzQwLDcgQEAgQ3JlZGVudGlhbE1hbmFn
ZXImIGNyZWRlbnRpYWxNYW5hZ2VyKCkKICAgICByZXR1cm4gKmNyZWRlbnRpYWxNYW5hZ2VyOwog
fQogCi12b2lkIENyZWRlbnRpYWxNYW5hZ2VyOjphdXRvZmlsbEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBXZWJTdHJpbmcmIHVz
ZXJuYW1lLCBXZWJTdHJpbmcmIHBhc3N3b3JkKQordm9pZCBDcmVkZW50aWFsTWFuYWdlcjo6YXV0
b2ZpbGxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3Rl
Y3Rpb25TcGFjZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdXNlcm5hbWUsIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIGlmIChjcmVkZW50aWFs
QmFja2luZ1N0b3JlKCkuaGFzTmV2ZXJSZW1lbWJlcihwcm90ZWN0aW9uU3BhY2UpKQogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
Q3JlZGVudGlhbE1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvQ3JlZGVudGlhbE1hbmFnZXIuaAkocmV2aXNpb24gMTMxMjQ4KQor
KysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NyZWRlbnRpYWxNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKIGNsYXNzIFBhZ2VDbGllbnRC
bGFja0JlcnJ5OwogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsK
LWNsYXNzIFdlYlN0cmluZzsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBTdHJpbmc7CiB9
CiB9CiAKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgQ3JlZGVudGlhbFRyYW5zZm9ybURhdGE7CiAK
IGNsYXNzIENyZWRlbnRpYWxNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICB2b2lkIGF1dG9maWxsQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJTdHJpbmcmIHVzZXJuYW1lLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmlu
ZyYgcGFzc3dvcmQpOworICAgIHZvaWQgYXV0b2ZpbGxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShj
b25zdCBQcm90ZWN0aW9uU3BhY2UmLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiB1c2Vy
bmFtZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgcGFzc3dvcmQpOwogICAgIHZvaWQg
YXV0b2ZpbGxQYXNzd29yZEZvcm1zKFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGRvY0Zvcm1z
KTsKICAgICB2b2lkIHNhdmVDcmVkZW50aWFsSWZDb25maXJtZWQoUGFnZUNsaWVudEJsYWNrQmVy
cnkqLCBjb25zdCBDcmVkZW50aWFsVHJhbnNmb3JtRGF0YSYpOwogICAgIHZvaWQgY2xlYXJDcmVk
ZW50aWFscygpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0
L0RhdGVQaWNrZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmNwcAkocmV2aXNpb24gMTMxMjQ4
KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0RhdGVQaWNrZXJD
bGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAKICNpbmNsdWRlICJQ
b3B1cFBpY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIldlYlBh
Z2VfcC5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGVQaWNrZXJDbGllbnQ6OkRhdGVQaWNrZXJDbGllbnQo
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkJsYWNrQmVycnlJbnB1dFR5cGUgdHlwZSwgY29uc3QgQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmcmIHZhbHVlLCBjb25zdCBCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlN0cmluZyYgbWluLCBjb25zdCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZyYg
bWF4LCBkb3VibGUgc3RlcCwgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZSogd2Vi
UGFnZSwgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK0RhdGVQaWNrZXJDbGllbnQ6OkRhdGVQ
aWNrZXJDbGllbnQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkJsYWNrQmVycnlJbnB1dFR5cGUgdHlw
ZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyYgbWF4LCBkb3VibGUgc3RlcCwgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJp
dmF0ZSogd2ViUGFnZSwgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICA6IG1fdHlwZSh0
eXBlKQogICAgICwgbV93ZWJQYWdlKHdlYlBhZ2UpCiAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkK
QEAgLTQ3LDcgKzQ3LDcgQEAgRGF0ZVBpY2tlckNsaWVudDo6fkRhdGVQaWNrZXJDbGllbnQoKQog
ewogfQogCi12b2lkIERhdGVQaWNrZXJDbGllbnQ6OmdlbmVyYXRlSFRNTChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6QmxhY2tCZXJyeUlucHV0VHlwZSB0eXBlLCBjb25zdCBCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5n
JiBtaW4sIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nJiBtYXgsIGRvdWJsZSBz
dGVwKQordm9pZCBEYXRlUGlja2VyQ2xpZW50OjpnZW5lcmF0ZUhUTUwoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkJsYWNrQmVycnlJbnB1dFR5cGUgdHlwZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1p
biwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWF4LCBkb3VibGUgc3RlcCkK
IHsKICAgICBTdHJpbmdCdWlsZGVyIHNvdXJjZTsKICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgi
PHN0eWxlPlxuIik7CkBAIC04MCwxNyArODAsMTcgQEAgdm9pZCBEYXRlUGlja2VyQ2xpZW50Ojpn
ZW5lcmF0ZUhUTUwoQmxhYwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgc291cmNlLmFwcGVuZCgiXCIiICsgU3Ry
aW5nKHZhbHVlLmltcGwoKSkgKyAiXCIsICIpOworICAgIGlmICghdmFsdWUuZW1wdHkoKSkKKyAg
ICAgICAgc291cmNlLmFwcGVuZCgiXCIiICsgU3RyaW5nKHZhbHVlKSArICJcIiwgIik7CiAgICAg
ZWxzZQogICAgICAgICBzb3VyY2UuYXBwZW5kTGl0ZXJhbCgiMCwgIik7CiAKLSAgICBpZiAoIW1p
bi5pc0VtcHR5KCkpCi0gICAgICAgIHNvdXJjZS5hcHBlbmQoU3RyaW5nKG1pbi5pbXBsKCkpICsg
IiwgIik7CisgICAgaWYgKCFtaW4uZW1wdHkoKSkKKyAgICAgICAgc291cmNlLmFwcGVuZChTdHJp
bmcobWluKSArICIsICIpOwogICAgIGVsc2UKICAgICAgICAgc291cmNlLmFwcGVuZExpdGVyYWwo
IjAsICIpOwotICAgIGlmICghbWF4LmlzRW1wdHkoKSkKLSAgICAgICAgc291cmNlLmFwcGVuZChT
dHJpbmcobWF4LmltcGwoKSkgKyAiLCAiKTsKKyAgICBpZiAoIW1heC5lbXB0eSgpKQorICAgICAg
ICBzb3VyY2UuYXBwZW5kKFN0cmluZyhtYXgpICsgIiwgIik7CiAgICAgZWxzZQogICAgICAgICBz
b3VyY2UuYXBwZW5kTGl0ZXJhbCgiMCwgIik7CiAgICAgc291cmNlLmFwcGVuZChTdHJpbmc6Om51
bWJlcihzdGVwKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvRGF0ZVBpY2tlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xpZW50LmgJKHJldmlzaW9uIDEzMTI0OCkK
KysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9EYXRlUGlja2VyQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDEyIEBACiAjaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtSW5wdXRFdmVudHMuaD4KIAogbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFt
ZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIFN0cmluZzsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKLWNsYXNzIFdlYlN0cmluZzsKIH0KIH0KIApAQCAtMzUs
MTAgKzM4LDEwIEBAIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiAKIGNsYXNzIERhdGVQaWNrZXJD
bGllbnQgOiBwdWJsaWMgUGFnZVBvcHVwQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBEYXRlUGlja2Vy
Q2xpZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpCbGFja0JlcnJ5SW5wdXRUeXBlLCBjb25zdCBC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViU3RyaW5nJiBtaW4sIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5n
JiBtYXgsIGRvdWJsZSBzdGVwLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwg
SFRNTElucHV0RWxlbWVudCopOworICAgIERhdGVQaWNrZXJDbGllbnQoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkJsYWNrQmVycnlJbnB1dFR5cGUsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpT
dHJpbmcmIHZhbHVlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtaW4sIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1heCwgZG91YmxlIHN0ZXAsIEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqLCBIVE1MSW5wdXRFbGVtZW50Kik7CiAgICAg
fkRhdGVQaWNrZXJDbGllbnQoKTsKIAotICAgIHZvaWQgZ2VuZXJhdGVIVE1MKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpCbGFja0JlcnJ5SW5wdXRUeXBlLCBjb25zdCBCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYlN0cmluZyYgdmFsdWUsIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nJiBt
aW4sIGNvbnN0IEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nJiBtYXgsIGRvdWJsZSBzdGVw
KTsKKyAgICB2b2lkIGdlbmVyYXRlSFRNTChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6QmxhY2tCZXJy
eUlucHV0VHlwZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUsIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG1pbiwgY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyYgbWF4LCBkb3VibGUgc3RlcCk7CiAKICAgICB2b2lkIHdyaXRlRG9j
dW1lbnQoRG9jdW1lbnRXcml0ZXImKTsKICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudFNpemUo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCShy
ZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2
LDggKzE5Niw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXQKICAg
ICAgICAgcG9saWN5ID0gUG9saWN5RG93bmxvYWQ7CiAgICAgZWxzZSBpZiAoY2FuU2hvd01JTUVU
eXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpKQogICAgICAgICBwb2xpY3kgPSBQb2xpY3lVc2U7Ci0g
ICAgZWxzZSBpZiAoKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJhbWUgPT0gcmVxdWVz
dC50YXJnZXRUeXBlKCkpCi0gICAgICAgICAgICAgJiYgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGll
bnQtPmRvd25sb2FkQWxsb3dlZChyZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
KQorICAgIGVsc2UgaWYgKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJhbWUgPT0gcmVx
dWVzdC50YXJnZXRUeXBlKCkgJiYgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmRvd25sb2Fk
QWxsb3dlZChyZXF1ZXN0LnVybCgpLnN0cmluZygpKSkKICAgICAgICAgcG9saWN5ID0gUG9saWN5
RG93bmxvYWQ7CiAKICAgICAobV9mcmFtZS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1
bmN0aW9uKShwb2xpY3kpOwpAQCAtNDA1LDcgKzQwNCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRM
b2FkZXI+IEZyYW1lTG9hZGVyQ2wKICAgICAgICAgICAgIFN0cmluZyBhYm91dFdoYXQgPSByZXF1
ZXN0LnVybCgpLnN0cmluZygpLnN1YnN0cmluZyg2KTsKICAgICAgICAgICAgIHNvdXJjZSA9IGFi
b3V0RGF0YShhYm91dFdoYXQpOwogICAgICAgICB9IGVsc2UgaWYgKHJlcXVlc3QudXJsKCkucHJv
dG9jb2xJcygicnRzcCIpKQotICAgICAgICAgICAgc291cmNlID0gQmxhY2tCZXJyeTo6UGxhdGZv
cm06Om1lZGlhRG9jdW1lbnQocmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKS5j
X3N0cigpOworICAgICAgICAgICAgc291cmNlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06Om1lZGlh
RG9jdW1lbnQocmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7CiAKICAgICAgICAgaWYgKCFzb3VyY2Uu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBBbHdheXMgaWdub3JlIGV4aXN0aW5nIHN1YnN0
aXR1dGUgZGF0YSBpZiBhbnkuCkBAIC01OTYsMTAgKzU5NSwxMCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0CiAgICAgLy8gUHJvY2VzcyBkb2N1bWVudCBtZXRhZGF0
YS4KICAgICBSZWZQdHI8Tm9kZUxpc3Q+IG5vZGVMaXN0ID0gaGVhZEVsZW1lbnQtPmdldEVsZW1l
bnRzQnlUYWdOYW1lKEhUTUxOYW1lczo6bWV0YVRhZy5sb2NhbE5hbWUoKSk7CiAgICAgdW5zaWdu
ZWQgaW50IHNpemUgPSBub2RlTGlzdC0+bGVuZ3RoKCk7Ci0gICAgU2NvcGVBcnJheTxXZWJTdHJp
bmc+IGhlYWRlcnM7CisgICAgU2NvcGVBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
PiBoZWFkZXJzOwogCiAgICAgLy8gVGhpcyBtYXkgYWxsb2NhdGUgbW9yZSBzcGFjZSB0aGFuIG5l
ZWRlZCBzaW5jZSBub3QgYWxsIG1ldGEgZWxlbWVudHMgd2lsbCBiZSBodHRwLWVxdWl2LgotICAg
IGhlYWRlcnMucmVzZXQobmV3IFdlYlN0cmluZ1syICogc2l6ZV0pOworICAgIGhlYWRlcnMucmVz
ZXQobmV3IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmdbMiAqIHNpemVdKTsKICAgICB1bnNp
Z25lZCBoZWFkZXJzTGVuZ3RoID0gMDsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKQEAgLTYzNCwxMSArNjMzLDExIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5OjpkaXNwYXQKICAgICAgICAgICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2Ns
aWVudC0+c2V0TGFyZ2VJY29uKGhyZWYubGF0aW4xKCkuZGF0YSgpKTsKICAgICAgICAgICAgIGVs
c2UgaWYgKFdURjo6ZXF1YWxJZ25vcmluZ0Nhc2UobGlua0VsZW1lbnQtPnJlbCgpLCAic2VhcmNo
IikpIHsKICAgICAgICAgICAgICAgICBpZiAoV1RGOjplcXVhbElnbm9yaW5nQ2FzZShsaW5rRWxl
bWVudC0+dHlwZSgpLCAiYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCIpKQot
ICAgICAgICAgICAgICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+c2V0U2VhcmNo
UHJvdmlkZXJEZXRhaWxzKHRpdGxlLnV0ZjgoKS5kYXRhKCksIGhyZWYudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5zZXRTZWFy
Y2hQcm92aWRlckRldGFpbHModGl0bGUsIGhyZWYpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChX
VEY6OmVxdWFsSWdub3JpbmdDYXNlKGxpbmtFbGVtZW50LT5yZWwoKSwgImFsdGVybmF0ZSIpCiAg
ICAgICAgICAgICAgICAgJiYgKFdURjo6ZXF1YWxJZ25vcmluZ0Nhc2UobGlua0VsZW1lbnQtPnR5
cGUoKSwgImFwcGxpY2F0aW9uL3Jzcyt4bWwiKQogICAgICAgICAgICAgICAgIHx8IFdURjo6ZXF1
YWxJZ25vcmluZ0Nhc2UobGlua0VsZW1lbnQtPnR5cGUoKSwgImFwcGxpY2F0aW9uL2F0b20reG1s
IikpKQotICAgICAgICAgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5zZXRBbHRl
cm5hdGVGZWVkRGV0YWlscyh0aXRsZS51dGY4KCkuZGF0YSgpLCBocmVmLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5zZXRBbHRlcm5h
dGVGZWVkRGV0YWlscyh0aXRsZSwgaHJlZik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTcwOCw5
ICs3MDcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0CiAgICAg
aWYgKCFpc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgZXJyb3JQ
YWdlID0gbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPmdldEVycm9yUGFnZShlcnJvci5lcnJv
ckNvZGUoKQotICAgICAgICAgICAgLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLmlzRW1w
dHkoKSA/ICIiIDogZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpCi0g
ICAgICAgICAgICAsIGVycm9yLmZhaWxpbmdVUkwoKS5pc0VtcHR5KCkgPyAiIiA6IGVycm9yLmZh
aWxpbmdVUkwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBTdHJpbmcgZXJyb3JQYWdlID0gbV93ZWJQ
YWdlUHJpdmF0ZS0+bV9jbGllbnQtPmdldEVycm9yUGFnZShlcnJvci5lcnJvckNvZGUoKSwgZXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgZXJyb3IuZmFpbGluZ1VSTCgpKTsKIAogICAgIC8v
IE1ha2Ugc3VyZSB3ZSdyZSBzdGlsbCBpbiB0aGUgcHJvdmlzaW9uYWxMb2FkIHN0YXRlIC0gZ2V0
RXJyb3JQYWdlIHJ1bnMgYQogICAgIC8vIG5lc3RlZCBldmVudCBsb29wIHdoaWxlIGl0J3Mgd2Fp
dGluZyBmb3IgY2xpZW50IHJlc291cmNlcyB0byBsb2FkIHNvCkBAIC05NDcsNyArOTQ0LDcgQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6Om5vdGlmeQogCiBGcmFtZSogRnJhbWVM
b2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3QgTmF2aWdhdGlv
bkFjdGlvbiYgbmF2aWdhdGlvbikKIHsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gbV93ZWJQYWdl
UHJpdmF0ZS0+bV9jbGllbnQtPmNyZWF0ZVdpbmRvdygwLCAwLCAtMSwgLTEsIFdlYlBhZ2VDbGll
bnQ6OkZsYWdXaW5kb3dEZWZhdWx0LCBuYXZpZ2F0aW9uLnVybCgpLnN0cmluZygpLCBXZWJTdHJp
bmcoKSk7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50
LT5jcmVhdGVXaW5kb3coMCwgMCwgLTEsIC0xLCBXZWJQYWdlQ2xpZW50OjpGbGFnV2luZG93RGVm
YXVsdCwgbmF2aWdhdGlvbi51cmwoKS5zdHJpbmcoKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZzo6ZW1wdHlTdHJpbmcoKSk7CiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm4g
MDsKIApAQCAtOTg1LDggKzk4Miw4IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
OjpkaXNwYXQKICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+cG9wdWxhdGVDdXN0b21I
ZWFkZXJzKHBsYXRmb3JtUmVxdWVzdCk7CiAgICAgY29uc3QgTmV0d29ya1JlcXVlc3Q6OkhlYWRl
ckxpc3QmIGhlYWRlckxpc3RzID0gcGxhdGZvcm1SZXF1ZXN0LmdldEhlYWRlckxpc3RSZWYoKTsK
ICAgICBmb3IgKE5ldHdvcmtSZXF1ZXN0OjpIZWFkZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGhlYWRlckxpc3RzLmJlZ2luKCk7IGl0ICE9IGhlYWRlckxpc3RzLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgIHN0ZDo6c3RyaW5nIGhlYWRlclN0cmluZyA9IGl0LT5maXJzdDsKLSAgICAgICAgc3Rk
OjpzdHJpbmcgaGVhZGVyVmFsdWVTdHJpbmcgPSBpdC0+c2Vjb25kOworICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIGhlYWRlclN0cmluZyA9IGl0LT5maXJzdDsKKyAgICAgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBoZWFkZXJWYWx1ZVN0cmluZyA9IGl0LT5zZWNv
bmQ7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFN0cmluZzo6ZnJvbVVURjhX
aXRoTGF0aW4xRmFsbGJhY2soaGVhZGVyU3RyaW5nLmRhdGEoKSwgaGVhZGVyU3RyaW5nLmxlbmd0
aCgpKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhoZWFkZXJWYWx1ZVN0cmlu
Zy5kYXRhKCksIGhlYWRlclZhbHVlU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgfQogICAgIGlmICgh
aXNNYWluUmVzb3VyY2VMb2FkKSB7CkBAIC0xMDMyLDcgKzEwMjksNyBAQCBib29sIEZyYW1lTG9h
ZGVyQ2xpZW50QmxhY2tCZXJyeTo6c2hvdWxkCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFj
a0JlcnJ5Ojpsb2FkSWNvbkV4dGVybmFsbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFBhZ2VVcmws
IGNvbnN0IFN0cmluZyYgZmluYWxQYWdlVXJsLCBjb25zdCBTdHJpbmcmIGljb25VcmwpCiB7Ci0g
ICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPnNldEljb25Gb3JVcmwob3JpZ2luYWxQYWdl
VXJsLnV0ZjgoKS5kYXRhKCksIGZpbmFsUGFnZVVybC51dGY4KCkuZGF0YSgpLCBpY29uVXJsLnV0
ZjgoKS5kYXRhKCkpOworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5zZXRJY29uRm9y
VXJsKG9yaWdpbmFsUGFnZVVybCwgZmluYWxQYWdlVXJsLCBpY29uVXJsKTsKIH0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OnNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0
ZW0qIGl0ZW0pCkBAIC0xMTkwLDcgKzExODcsNyBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ+IEZyYW1lCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpzdGFy
dERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWROYW1lKQogewotICAgIG1fd2ViUGFnZVByaXZhdGUtPmxvYWQocmVxdWVzdC51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAwLCAiR0VUIiwgTmV0d29ya1JlcXVlc3Q6OlVzZVBy
b3RvY29sQ2FjaGVQb2xpY3ksIDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgIiIsIHN1
Z2dlc3RlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bG9hZChy
ZXF1ZXN0LnVybCgpLnN0cmluZygpLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nOjplbXB0
eVN0cmluZygpLCAiR0VUIiwgTmV0d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3ks
IDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgIiIsIHN1Z2dlc3RlZE5hbWUpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZG93bmxvYWQoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikKQEAgLTEyMTksNyArMTIxNiw3IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXQKICAgICBiYXNlNjRFbmNvZGUoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEtPmRhdGEoKSksIGRhdGEtPnNpemUoKSwgb3V0KTsK
ICAgICBvdXQuYXBwZW5kKCdcMCcpOyAvLyBNYWtlIGl0IG51bGwtdGVybWluYXRlZC4KICAgICBT
dHJpbmcgaWNvblVybCA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VV
UkwodXJsKTsKLSAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+c2V0RmF2aWNvbihvdXQu
ZGF0YSgpLCBpY29uVXJsLnV0ZjgoKS5kYXRhKCkpOworICAgIG1fd2ViUGFnZVByaXZhdGUtPm1f
Y2xpZW50LT5zZXRGYXZpY29uKG91dC5kYXRhKCksIGljb25VcmwpOwogICAgIGRhdGEtPnVucmVm
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9J
Y29uRGF0YWJhc2VDbGllbnRCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvSWNvbkRhdGFiYXNlQ2xpZW50QmxhY2tCZXJy
eS5jcHAJKHJldmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9JY29uRGF0YWJhc2VDbGllbnRCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIK
LSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNv
cmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCShyZXZpc2lvbiAxMzEyNDgp
CisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNs
dWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCiAKICNpZiBFTkFCTEUoTk9USUZJQ0FU
SU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPEV2ZW50Lmg+CiAjaW5jbHVkZSA8Tm90aWZp
Y2F0aW9uLmg+CiAjaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeS5oPgpA
QCAtNjgsNyArNjksNyBAQCBib29sIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OnNob3coTm90
CiAgICAgICAgIG1lc3NhZ2UgPSBuLT5jb250ZW50cygpLnRpdGxlICsgIjogIiArIG4tPmNvbnRl
bnRzKCkuYm9keTsKICAgICB9CiAKLSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5zaG93KHN0ZDo6
c3RyaW5nKHV1aWQudXRmOCgpLmRhdGEoKSksIHN0ZDo6c3RyaW5nKG1lc3NhZ2UudXRmOCgpLmRh
dGEoKSkpOworICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPnNob3codXVpZCwgbWVzc2FnZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTgxLDcgKzgyLDcgQEAgdm9pZCBOb3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsOjpjYW5jZWwoTgogICAgIGlmIChpdCA9PSBtX25vdGlmaWNhdGlvbnMuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChz
dGQ6OnN0cmluZyhpdC0+dmFsdWUudXRmOCgpLmRhdGEoKSkpOworICAgIG1fcGxhdGZvcm1QcmVz
ZW50ZXItPmNhbmNlbChpdC0+dmFsdWUpOwogICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUoaXQp
OwogfQogCkBAIC05OSwyMyArMTAwLDIyIEBAIHZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6cmVxdWVzdFAKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgbV9wZXJtaXNzaW9uUmVx
dWVzdHMuYWRkKGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5y
ZXF1ZXN0UGVybWlzc2lvbihzdGQ6OnN0cmluZyhjb250ZXh0LT51cmwoKS5ob3N0KCkudXRmOCgp
LmRhdGEoKSkpOworICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPnJlcXVlc3RQZXJtaXNzaW9uKGNv
bnRleHQtPnVybCgpLmhvc3QoKSk7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bDo6b25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2Vk
KQordm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24oY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZG9tYWluLCBib29sIGlzQWxsb3dlZCkKIHsKICAg
ICBBU1NFUlQoIWRvbWFpbi5lbXB0eSgpKTsKLSAgICBTdHJpbmcgZG9tYWluU3RyaW5nID0gU3Ry
aW5nOjpmcm9tVVRGOChkb21haW4uY19zdHIoKSk7CiAgICAgUGVybWlzc2lvblJlcXVlc3RNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuYmVnaW4oKTsKICAgICBmb3IgKDsg
aXQgIT0gbV9wZXJtaXNzaW9uUmVxdWVzdHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT5rZXktPnVybCgpLmhvc3QoKSAhPSBkb21haW5TdHJpbmcpCisgICAgICAgIGlmIChpdC0+a2V5
LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgaWYgKGlzQWxsb3dlZCkgewotICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5hZGQoZG9t
YWluU3RyaW5nKTsKKyAgICAgICAgICAgIG1fYWxsb3dlZERvbWFpbnMuYWRkKGRvbWFpbik7CiAg
ICAgICAgICAgICBpdC0+dmFsdWUtPmhhbmRsZUV2ZW50KCk7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWluU3RyaW5nKTsKKyAgICAgICAg
ICAgIG1fYWxsb3dlZERvbWFpbnMucmVtb3ZlKGRvbWFpbik7CiAKICAgICAgICAgbV9wZXJtaXNz
aW9uUmVxdWVzdHMucmVtb3ZlKGl0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTM4LDEzICsxMzgs
MTIgQEAgTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIE5vdGlmaWNhdAogfQogCiAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBwbGF0Zm9ybSBzaWRlLgotdm9pZCBOb3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25DbGlja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBp
ZCkKK3ZvaWQgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6bm90aWZpY2F0aW9uQ2xpY2tlZChj
b25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBpZCkKIHsKICAgICBBU1NFUlQoIWlk
LmVtcHR5KCkpOwotICAgIFN0cmluZyBpZFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaWQuY19z
dHIoKSk7CiAgICAgTm90aWZpY2F0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9u
cy5iZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX25vdGlmaWNhdGlvbnMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZFN0cmluZyAmJiBpdC0+a2V5LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpZCAmJiBpdC0+
a2V5LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxOb3Rp
ZmljYXRpb24+IG5vdGlmaWNhdGlvbiA9IGl0LT5rZXk7CiAgICAgICAgICAgICBpdC0+a2V5LT5k
aXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZhbHNl
LCB0cnVlKSk7CiAgICAgICAgICAgICBtX25vdGlmaWNhdGlvbnMucmVtb3ZlKG5vdGlmaWNhdGlv
bik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgJKHJldmlzaW9u
IDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsyMywxNyBA
QAogI2luY2x1ZGUgPE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLmg+CiAjaW5jbHVkZSA8Tm90aWZp
Y2F0aW9uQ2xpZW50Lmg+CiAjaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJy
eS5oPgotI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAorbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNl
IFBsYXRmb3JtIHsKK2NsYXNzIFN0cmluZzsKK30KK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsIDogcHVibGljIFdlYkNvcmU6Ok5vdGlm
aWNhdGlvbkNsaWVudCwgcHVibGljIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOb3RpZmljYXRpb25B
Y2tMaXN0ZW5lciB7CkBAIC02MSw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBlcm1p
c3Npb24gY2hlY2tQZXJtaXNzaW9uKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
IAogICAgIC8vIEludGVyZmFjZXMgaW5oZXJpdGVkIGZyb20gTm90aWZpY2F0aW9uQWNrTGlzdGVu
ZXIuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvbkNsaWNrZWQoY29uc3Qgc3RkOjpzdHJp
bmcmIGlkKTsKLSAgICB2aXJ0dWFsIHZvaWQgb25QZXJtaXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5n
JiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9u
Q2xpY2tlZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBpZCk7CisgICAgdmly
dHVhbCB2b2lkIG9uUGVybWlzc2lvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKTsKIAogcHJpdmF0ZToKICAgICBOb3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5jcHAJKHJldmlzaW9u
IDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9TZWxl
Y3RQb3B1cENsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICszMiwxNCBAQAogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgogCisjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiAjZGVmaW5lIENFTExfSEVJR0hUIDMwCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU2VsZWN0UG9wdXBDbGllbnQ6OlNlbGVjdFBvcHVwQ2xpZW50KGJvb2wgbXVsdGlwbGUs
IGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5n
PiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywKK1NlbGVjdFBvcHVwQ2xpZW50OjpTZWxlY3RQb3B1
cENsaWVudChib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywKICAgICBjb25z
dCBpbnQqIGl0ZW1UeXBlLCBib29sKiBzZWxlY3RlZHMsIEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
UGFnZVByaXZhdGUqIHdlYlBhZ2UsIEhUTUxTZWxlY3RFbGVtZW50KiBlbGVtZW50KQogICAgIDog
bV9tdWx0aXBsZShtdWx0aXBsZSkKICAgICAsIG1fc2l6ZShzaXplKQpAQCAtNTMsNyArNTQsNyBA
QCBTZWxlY3RQb3B1cENsaWVudDo6flNlbGVjdFBvcHVwQ2xpZW50KCkKIHsKIH0KIAotdm9pZCBT
ZWxlY3RQb3B1cENsaWVudDo6dXBkYXRlKGJvb2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBT
Y29wZUFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBl
bmFibGVkcywKK3ZvaWQgU2VsZWN0UG9wdXBDbGllbnQ6OnVwZGF0ZShib29sIG11bHRpcGxlLCBp
bnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYg
bGFiZWxzLCBib29sKiBlbmFibGVkcywKICAgICBjb25zdCBpbnQqIGl0ZW1UeXBlLCBib29sKiBz
ZWxlY3RlZHMsIEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqLCBIVE1MU2VsZWN0
RWxlbWVudCogZWxlbWVudCkKIHsKICAgICBtX211bHRpcGxlID0gbXVsdGlwbGU7CkBAIC02Miw3
ICs2Myw3IEBAIHZvaWQgU2VsZWN0UG9wdXBDbGllbnQ6OnVwZGF0ZShib29sIG11bHQKICAgICBn
ZW5lcmF0ZUhUTUwobXVsdGlwbGUsIHNpemUsIGxhYmVscywgZW5hYmxlZHMsIGl0ZW1UeXBlLCBz
ZWxlY3RlZHMpOwogfQogCi12b2lkIFNlbGVjdFBvcHVwQ2xpZW50OjpnZW5lcmF0ZUhUTUwoYm9v
bCBtdWx0aXBsZSwgaW50IHNpemUsIGNvbnN0IFNjb3BlQXJyYXk8QmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJTdHJpbmc+JiBsYWJlbHMsIGJvb2wqIGVuYWJsZWRzLAordm9pZCBTZWxlY3RQb3B1cENs
aWVudDo6Z2VuZXJhdGVIVE1MKGJvb2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBTY29wZUFy
cmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBsYWJlbHMsIGJvb2wqIGVuYWJsZWRz
LAogICAgIGNvbnN0IGludCogaXRlbVR5cGUsIGJvb2wqIHNlbGVjdGVkcykKIHsKICAgICBTdHJp
bmdCdWlsZGVyIHNvdXJjZTsKQEAgLTgzLDcgKzg0LDcgQEAgdm9pZCBTZWxlY3RQb3B1cENsaWVu
dDo6Z2VuZXJhdGVIVE1MKGJvbwogICAgIC8vIEFkZCBsYWJlbHMuCiAgICAgc291cmNlLmFwcGVu
ZCgnWycpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIHNv
dXJjZS5hcHBlbmQoIiciICsgU3RyaW5nKGxhYmVsc1tpXS5pbXBsKCkpLnJlcGxhY2UoJ1xcJywg
IlxcXFwiKS5yZXBsYWNlKCdcJycsICJcXCciKSArICInIik7CisgICAgICAgIHNvdXJjZS5hcHBl
bmQoIiciICsgU3RyaW5nKGxhYmVsc1tpXSkucmVwbGFjZSgnXFwnLCAiXFxcXCIpLnJlcGxhY2Uo
J1wnJywgIlxcJyIpICsgIiciKTsKICAgICAgICAgLy8gRG9uJ3QgYXBwZW5kICcsJyB0byBsYXN0
IGVsZW1lbnQuCiAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQogICAgICAgICAgICAgc291cmNl
LmFwcGVuZExpdGVyYWwoIiwgIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuaAkocmV2aXNp
b24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1Nl
bGVjdFBvcHVwQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMyBAQAogI2lu
Y2x1ZGUgIlBhZ2VQb3B1cENsaWVudC5oIgogI2luY2x1ZGUgIlNjb3BlUG9pbnRlci5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBQbGF0
Zm9ybSB7CitjbGFzcyBTdHJpbmc7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2Vi
UGFnZVByaXZhdGU7CiB9CkBAIC0zOSwxMiArNDIsMTIgQEAgY2xhc3MgUGFnZVBvcHVwOwogCiBj
bGFzcyBTZWxlY3RQb3B1cENsaWVudCA6IHB1YmxpYyBQYWdlUG9wdXBDbGllbnQgewogcHVibGlj
OgotICAgIFNlbGVjdFBvcHVwQ2xpZW50KGJvb2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBT
Y29wZUFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBl
bmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0ZWRzLCBCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRNTFNlbGVjdEVsZW1lbnQqKTsKKyAgICBTZWxl
Y3RQb3B1cENsaWVudChib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywgY29u
c3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0ZWRzLCBCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2VQcml2YXRlKiwgSFRNTFNlbGVjdEVsZW1lbnQqKTsKICAgICB+U2VsZWN0UG9wdXBDbGll
bnQoKTsKIAotICAgIHZvaWQgdXBkYXRlKGJvb2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBT
Y29wZUFycmF5PEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBl
bmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0ZWRzLCBCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKiwgSFRNTFNlbGVjdEVsZW1lbnQqKTsKKyAgICB2b2lk
IHVwZGF0ZShib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywgY29uc3QgaW50
KiBpdGVtVHlwZSwgYm9vbCogc2VsZWN0ZWRzLCBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQ
cml2YXRlKiwgSFRNTFNlbGVjdEVsZW1lbnQqKTsKIAotICAgIHZvaWQgZ2VuZXJhdGVIVE1MKGJv
b2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEJsYWNrQmVycnk6OldlYktp
dDo6V2ViU3RyaW5nPiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlw
ZSwgYm9vbCogc2VsZWN0ZWRzKTsKKyAgICB2b2lkIGdlbmVyYXRlSFRNTChib29sIG11bHRpcGxl
LCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
PiYgbGFiZWxzLCBib29sKiBlbmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwgYm9vbCogc2Vs
ZWN0ZWRzKTsKICAgICB2b2lkIG5vdGlmeVNlbGVjdGlvbkNoYW5nZShXZWJDb3JlOjpUaW1lcjxT
ZWxlY3RQb3B1cENsaWVudD4gKik7CiAKICAgICB2b2lkIHdyaXRlRG9jdW1lbnQoRG9jdW1lbnRX
cml0ZXImKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9V
c2VyTWVkaWFDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViQ29yZVN1cHBvcnQvVXNlck1lZGlhQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDEz
MTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Vc2VyTWVk
aWFDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMg
VXNlck1lZGlhUmVxdWVzdHNNYXAmIHVzZXJNZWRpYVJlCiAKIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlPiB0b01lZGlhU3RyZWFtU291cmNlKGNvbnN0IFdlYk1lZGlhU3RyZWFt
U291cmNlJiBzcmMpCiB7Ci0gICAgcmV0dXJuIE1lZGlhU3RyZWFtU291cmNlOjpjcmVhdGUoU3Ry
aW5nOjpmcm9tVVRGOChzcmMuaWQoKS5jX3N0cigpKSwgc3RhdGljX2Nhc3Q8TWVkaWFTdHJlYW1T
b3VyY2U6OlR5cGU+KHNyYy50eXBlKCkpLCBTdHJpbmc6OmZyb21VVEY4KHNyYy5uYW1lKCkuY19z
dHIoKSkpOworICAgIHJldHVybiBNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChzcmMuaWQoKS5jX3N0cigpKSwgc3RhdGljX2Nhc3Q8TWVkaWFTdHJlYW1Tb3Vy
Y2U6OlR5cGU+KHNyYy50eXBlKCkpLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3JjLm5hbWUoKS5j
X3N0cigpKSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4g
dG9NZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiBk
KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0
b3I+CiAgICAgICAgIHZpZGVvU291cmNlcy5hcHBlbmQoc3JjLnJlbGVhc2UoKSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKFN0cmluZzo6ZnJvbVVU
RjgoZC5sYWJlbCgpLmNfc3RyKCkpLCBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcyk7CisgICAg
cmV0dXJuIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKFdURjo6U3RyaW5nOjpmcm9tVVRG
OChkLmxhYmVsKCkuY19zdHIoKSksIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKTsKIH0KIAog
Y2xhc3MgV2ViVXNlck1lZGlhUmVxdWVzdENsaWVudEltcGwgOiBwdWJsaWMgV2ViVXNlck1lZGlh
UmVxdWVzdENsaWVudCB7CkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBVc2VyTWVkaWFDbGllbnRJ
bXBsOjpyZXF1ZXN0VXNlck1lZAogICAgIE93blB0cjxXZWJVc2VyTWVkaWFSZXF1ZXN0Q2xpZW50
SW1wbD4gcmVxdWVzdENsaWVudCA9IGFkb3B0UHRyKG5ldyBXZWJVc2VyTWVkaWFSZXF1ZXN0Q2xp
ZW50SW1wbChwcnBSZXF1ZXN0KSk7CiAKICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gcmVx
dWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpOwotICAgIG1f
cGFnZS0+Y2xpZW50KCktPnJlcXVlc3RVc2VyTWVkaWEoV2ViVXNlck1lZGlhUmVxdWVzdChyZXF1
ZXN0LT5hdWRpbygpLCByZXF1ZXN0LT52aWRlbygpLCBvcmlnaW4tPnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgcmVxdWVzdENsaWVudC5nZXQoKSkpOworICAgIG1fcGFnZS0+Y2xpZW50KCktPnJl
cXVlc3RVc2VyTWVkaWEoV2ViVXNlck1lZGlhUmVxdWVzdChyZXF1ZXN0LT5hdWRpbygpLCByZXF1
ZXN0LT52aWRlbygpLCBvcmlnaW4tPnRvU3RyaW5nKCksIHJlcXVlc3RDbGllbnQuZ2V0KCkpKTsK
ICAgICB1c2VyTWVkaWFSZXF1ZXN0c01hcCgpLmFkZChyZXF1ZXN0LCByZXF1ZXN0Q2xpZW50LnJl
bGVhc2UoKSk7CiB9CiAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFVzZXJNZWRpYUNsaWVudElt
cGw6OmNhbmNlbFVzZXJNZWRpCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4gPSByZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3Jp
Z2luKCk7Ci0gICAgbV9wYWdlLT5jbGllbnQoKS0+Y2FuY2VsVXNlck1lZGlhUmVxdWVzdChXZWJV
c2VyTWVkaWFSZXF1ZXN0KHJlcXVlc3QtPmF1ZGlvKCksIHJlcXVlc3QtPnZpZGVvKCksIG9yaWdp
bi0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+dmFsdWUuZ2V0KCkpKTsKKyAgICBtX3Bh
Z2UtPmNsaWVudCgpLT5jYW5jZWxVc2VyTWVkaWFSZXF1ZXN0KFdlYlVzZXJNZWRpYVJlcXVlc3Qo
cmVxdWVzdC0+YXVkaW8oKSwgcmVxdWVzdC0+dmlkZW8oKSwgb3JpZ2luLT50b1N0cmluZygpLCBp
dC0+dmFsdWUuZ2V0KCkpKTsKICAgICB1c2VyTWVkaWFSZXF1ZXN0c01hcCgpLnJlbW92ZShpdCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Fib3V0
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvQWJvdXREYXRhLmNwcAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQWJvdXREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYwLDggKzQ2MCw4IEBAIHN0YXRpYyBTdHJpbmcgY2FjaGVQYWdlKFN0cmluZyBjYWNoZUNvbW0K
ICAgICBpZiAoY2FjaGVDb21tYW5kLmlzRW1wdHkoKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZChT
dHJpbmcoQmxhY2tCZXJyeTo6UGxhdGZvcm06OmdlbmVyYXRlSHRtbEZyYWdtZW50Rm9yQ2FjaGVL
ZXlzKCkuZGF0YSgpKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVDb21tYW5kLnN0YXJ0c1dpdGgoIj9x
dWVyeT0iLCBmYWxzZSkpIHsKLSAgICAgICAgc3RkOjpzdHJpbmcga2V5KGNhY2hlQ29tbWFuZC5z
dWJzdHJpbmcoNykudXRmOCgpLmRhdGEoKSk7IC8vIDcgaXMgbGVuZ3RoIG9mICJxdWVyeT0iLgot
ICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZyhrZXkuZGF0YSgpKSk7CisgICAgICAgIFN0cmlu
ZyBrZXkoY2FjaGVDb21tYW5kLnN1YnN0cmluZyg3KS51dGY4KCkuZGF0YSgpKTsgLy8gNyBpcyBs
ZW5ndGggb2YgInF1ZXJ5PSIuCisgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsKICAgICAgICAg
cmVzdWx0LmFwcGVuZChTdHJpbmcoIjxocj4iKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3Ry
aW5nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpnZW5lcmF0ZUh0bWxGcmFnbWVudEZvckNhY2hlSGVh
ZGVycyhrZXkpLmRhdGEoKSkpOwogICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAJKHJl
dmlzaW9uIDEzMTI0OCkKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0lucHV0SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw3ICs0NTksNyBAQCB2b2lk
IElucHV0SGFuZGxlcjo6c2V0UGx1Z2luRm9jdXNlZChFbGVtCiAgICAgbV9jdXJyZW50Rm9jdXNF
bGVtZW50ID0gZWxlbWVudDsKIH0KIAotc3RhdGljIGJvb2wgY29udmVydFN0cmluZ1RvV2NoYXIo
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHdjaGFyX3QqIGRlc3QsIGludCBkZXN0Q2FwYWNpdHksIGlu
dCogZGVzdExlbmd0aCkKK3N0YXRpYyBib29sIGNvbnZlcnRTdHJpbmdUb1djaGFyKGNvbnN0IFdU
Rjo6U3RyaW5nJiBzdHJpbmcsIHdjaGFyX3QqIGRlc3QsIGludCBkZXN0Q2FwYWNpdHksIGludCog
ZGVzdExlbmd0aCkKIHsKICAgICBBU1NFUlQoZGVzdCk7CiAKQEAgLTQ3OSw3ICs0NzksNyBAQCBz
dGF0aWMgYm9vbCBjb252ZXJ0U3RyaW5nVG9XY2hhcihjb25zdCBTCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBib29sIGNvbnZlcnRTdHJpbmdUb1djaGFyVmVjdG9yKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBXVEY6OlZlY3Rvcjx3Y2hhcl90PiYgd2NoYXJTdHJpbmcpCitzdGF0aWMgYm9v
bCBjb252ZXJ0U3RyaW5nVG9XY2hhclZlY3Rvcihjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nLCBX
VEY6OlZlY3Rvcjx3Y2hhcl90PiYgd2NoYXJTdHJpbmcpCiB7CiAgICAgQVNTRVJUKHdjaGFyU3Ry
aW5nLmlzRW1wdHkoKSk7CiAKQEAgLTUwMCwxNiArNTAwLDE2IEBAIHN0YXRpYyBib29sIGNvbnZl
cnRTdHJpbmdUb1djaGFyVmVjdG9yKGMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFN0
cmluZyBjb252ZXJ0U3Bhbm5hYmxlU3RyaW5nVG9TdHJpbmcoc3Bhbm5hYmxlX3N0cmluZ190KiBz
cmMpCitzdGF0aWMgV1RGOjpTdHJpbmcgY29udmVydFNwYW5uYWJsZVN0cmluZ1RvU3RyaW5nKHNw
YW5uYWJsZV9zdHJpbmdfdCogc3JjKQogewogICAgIGlmICghc3JjIHx8ICFzcmMtPnN0ciB8fCAh
c3JjLT5sZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6U3RyaW5nKCk7CiAKICAgICBXVEY6OlZlY3RvcjxVQ2hhcj4gZGVzdDsKICAgICBpbnQgZGVz
dENhcGFjaXR5ID0gKHNyYy0+bGVuZ3RoICogMikgKyAxOwogICAgIGlmICghZGVzdC50cnlSZXNl
cnZlQ2FwYWNpdHkoZGVzdENhcGFjaXR5KSkgewogICAgICAgICBsb2dBbHdheXMoTG9nTGV2ZWxD
cml0aWNhbCwgIklucHV0SGFuZGxlcjo6Y29udmVydFNwYW5uYWJsZVN0cmluZ1RvU3RyaW5nIENh
bm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN0cmluZy4iKTsKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICByZXR1cm4gV1RGOjpTdHJpbmcoKTsKICAgICB9CiAKICAgICBpbnQgZGVz
dExlbmd0aCA9IDA7CkBAIC01MTgsMTAgKzUxOCwxMCBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRT
cGFubmFibGVTdHJpbmdUb1N0CiAgICAgdV9zdHJGcm9tVVRGMzIoZGVzdC5kYXRhKCksIGRlc3RD
YXBhY2l0eSwgJmRlc3RMZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIzMio+KHNyYy0+c3Ry
KSwgc3JjLT5sZW5ndGgsICZlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIGxvZ0Fsd2F5cyhM
b2dMZXZlbENyaXRpY2FsLCAiSW5wdXRIYW5kbGVyOjpjb252ZXJ0U3Bhbm5hYmxlU3RyaW5nVG9T
dHJpbmcgRXJyb3IgY29udmVydGluZyBzdHJpbmcgZWMgKCVkKS4iLCBlYyk7Ci0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6U3RyaW5nKCk7CiAgICAgfQogICAg
IGRlc3QucmVzaXplKGRlc3RMZW5ndGgpOwotICAgIHJldHVybiBTdHJpbmcoZGVzdC5kYXRhKCks
IGRlc3RMZW5ndGgpOworICAgIHJldHVybiBXVEY6OlN0cmluZyhkZXN0LmRhdGEoKSwgZGVzdExl
bmd0aCk7CiB9CiAKIHZvaWQgSW5wdXRIYW5kbGVyOjpzZW5kTGVhcm5UZXh0RGV0YWlscyhjb25z
dCBXVEY6OlN0cmluZyYgc3RyaW5nKQpAQCAtNTQyLDcgKzU0Miw3IEBAIHZvaWQgSW5wdXRIYW5k
bGVyOjpsZWFyblRleHQoKQogICAgIGlmIChtX2N1cnJlbnRGb2N1c0VsZW1lbnRUZXh0RWRpdE1h
c2sgJiBOT19QUkVESUNUSU9OIHx8IG1fY3VycmVudEZvY3VzRWxlbWVudFRleHRFZGl0TWFzayAm
IE5PX0FVVE9fVEVYVCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHRleHRJbkZpZWxk
KGVsZW1lbnRUZXh0KCkpOworICAgIFdURjo6U3RyaW5nIHRleHRJbkZpZWxkKGVsZW1lbnRUZXh0
KCkpOwogICAgIHRleHRJbkZpZWxkID0gdGV4dEluRmllbGQuc3Vic3RyaW5nKHN0ZDo6bWF4KDAs
IHN0YXRpY19jYXN0PGludD4odGV4dEluRmllbGQubGVuZ3RoKCkgLSBNYXhMZWFyblRleHREYXRh
U2l6ZSkpLCB0ZXh0SW5GaWVsZC5sZW5ndGgoKSk7CiAgICAgdGV4dEluRmllbGQucmVtb3ZlKDAs
IHRleHRJbkZpZWxkLmZpbmQoIiAiKSk7CiAKQEAgLTY0Miw3ICs2NDIsNyBAQCB2b2lkIElucHV0
SGFuZGxlcjo6c3BlbGxDaGVja2luZ1JlcXVlc3RQCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4gcmVzdWx0czsKIAogICAgIC8vIENvbnZlcnQgdGhlIHNwYW5uYWJsZVN0cmluZyB0byBU
ZXh0Q2hlY2tpbmdSZXN1bHQgdGhlbiBhcHBlbmQgdG8gcmVzdWx0cyB2ZWN0b3IuCi0gICAgU3Ry
aW5nIHJlcGxhY2VtZW50OworICAgIFdURjo6U3RyaW5nIHJlcGxhY2VtZW50OwogICAgIFRleHRD
aGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tpbmdSZXN1bHQ7CiAgICAgdGV4dENoZWNraW5nUmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CiAgICAgdGV4dENoZWNraW5nUmVzdWx0
LnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CkBAIC05NTksOSArOTU5LDkgQEAgYm9vbCBJbnB1
dEhhbmRsZXI6Om9wZW5EYXRlUG9wdXAoSFRNTElucAogICAgIGNhc2UgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OklucHV0VHlwZU1vbnRoOiB7CiAgICAgICAgIC8vIENoZWNrIGlmIHBvcHVwIGFscmVh
ZHkgZXhpc3RzLCBjbG9zZSBpdCBpZiBkb2VzLgogICAgICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5jbG9zZVBhZ2VQb3B1cCgwKTsKLSAgICAgICAgU3RyaW5nIHZh
bHVlID0gZWxlbWVudC0+dmFsdWUoKTsKLSAgICAgICAgU3RyaW5nIG1pbiA9IGVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShIVE1MTmFtZXM6Om1pbkF0dHIpLnN0cmluZygpOwotICAgICAgICBTdHJpbmcg
bWF4ID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWF4QXR0cikuc3RyaW5nKCk7
CisgICAgICAgIFdURjo6U3RyaW5nIHZhbHVlID0gZWxlbWVudC0+dmFsdWUoKTsKKyAgICAgICAg
V1RGOjpTdHJpbmcgbWluID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWluQXR0
cikuc3RyaW5nKCk7CisgICAgICAgIFdURjo6U3RyaW5nIG1heCA9IGVsZW1lbnQtPmdldEF0dHJp
YnV0ZShIVE1MTmFtZXM6Om1heEF0dHIpLnN0cmluZygpOwogICAgICAgICBkb3VibGUgc3RlcCA9
IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0ZXBBdHRyKS50b0RvdWJsZSgpOwog
CiAgICAgICAgIERhdGVQaWNrZXJDbGllbnQqIGNsaWVudCA9IG5ldyBEYXRlUGlja2VyQ2xpZW50
KHR5cGUsIHZhbHVlLCBtaW4sIG1heCwgc3RlcCwgIG1fd2ViUGFnZSwgZWxlbWVudCk7CkBAIC0x
NjQxLDggKzE2NDEsOCBAQCBib29sIElucHV0SGFuZGxlcjo6b3BlblNlbGVjdFBvcHVwKEhUTUxT
CiAgICAgaW50IHNpemUgPSBsaXN0SXRlbXMuc2l6ZSgpOwogCiAgICAgYm9vbCBtdWx0aXBsZSA9
IHNlbGVjdC0+bXVsdGlwbGUoKTsKLSAgICBTY29wZUFycmF5PFdlYlN0cmluZz4gbGFiZWxzOwot
ICAgIGxhYmVscy5yZXNldChuZXcgV2ViU3RyaW5nW3NpemVdKTsKKyAgICBTY29wZUFycmF5PEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+IGxhYmVsczsKKyAgICBsYWJlbHMucmVzZXQobmV3
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmdbc2l6ZV0pOwogCiAgICAgLy8gQ2hlY2sgaWYg
cG9wdXAgYWxyZWFkeSBleGlzdHMsIGNsb3NlIGl0IGlmIGRvZXMuCiAgICAgbV93ZWJQYWdlLT5t
X3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Y2xvc2VQYWdlUG9wdXAoMCk7CkBAIC0yMDUxLDcg
KzIwNTEsNyBAQCBib29sIElucHV0SGFuZGxlcjo6c2V0VGV4dChzcGFubmFibGVfc3RyCiAgICAg
Ly8gY2hhbmdlcyBzaG91bGQgbm90IGJlIGhhbmRsZWQgYXMgbm90aWZpY2F0aW9uIGV2ZW50Lgog
ICAgIG1fd2ViUGFnZS0+bV9zZWxlY3Rpb25IYW5kbGVyLT5zZXRTZWxlY3Rpb25BY3RpdmUoZmFs
c2UpOwogCi0gICAgU3RyaW5nIHRleHRUb0luc2VydCA9IGNvbnZlcnRTcGFubmFibGVTdHJpbmdU
b1N0cmluZyhzcGFubmFibGVTdHJpbmcpOworICAgIFdURjo6U3RyaW5nIHRleHRUb0luc2VydCA9
IGNvbnZlcnRTcGFubmFibGVTdHJpbmdUb1N0cmluZyhzcGFubmFibGVTdHJpbmcpOwogICAgIGlu
dCB0ZXh0TGVuZ3RoID0gdGV4dFRvSW5zZXJ0Lmxlbmd0aCgpOwogCiAgICAgSW5wdXRMb2coTG9n
TGV2ZWxJbmZvLCAiSW5wdXRIYW5kbGVyOjpzZXRUZXh0IHNwYW5uYWJsZVN0cmluZyBpcyAnJXMn
LCBvZiBsZW5ndGggJWQiLCB0ZXh0VG9JbnNlcnQubGF0aW4xKCkuZGF0YSgpLCB0ZXh0TGVuZ3Ro
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlv
bkhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TZWxlY3Rpb25IYW5kbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFNlbGVjdGlvbkhhbmRsZXI6OmNh
bmNlbFNlbGVjdGlvbigpCiAgICAgICAgIG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkt
PnNlbGVjdGlvbigpLT5jbGVhcigpOwogfQogCi1XZWJTdHJpbmcgU2VsZWN0aW9uSGFuZGxlcjo6
c2VsZWN0ZWRUZXh0KCkgY29uc3QKK0JsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcgU2VsZWN0
aW9uSGFuZGxlcjo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV93ZWJQYWdl
LT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU2VsZWN0aW9uSGFuZGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L1NlbGVjdGlvbkhhbmRsZXIuaAkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU2VsZWN0aW9uSGFuZGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxMSArNDAsMTMgQEAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIH0KIAogbmFtZXNw
YWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIFN0cmluZzsKK30K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcml2YXRlOwotY2xhc3MgV2Vi
U3RyaW5nOwogCiBjbGFzcyBTZWxlY3Rpb25IYW5kbGVyIHsKIHB1YmxpYzoKQEAgLTU1LDcgKzU3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2VsZWN0aW9uQWN0aXZlKGJvb2wgYWN0aXZlKSB7
IG1fc2VsZWN0aW9uQWN0aXZlID0gYWN0aXZlOyB9CiAKICAgICB2b2lkIGNhbmNlbFNlbGVjdGlv
bigpOwotICAgIFdlYlN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25zdDsKKyAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0OwogCiAgICAgYm9vbCBzZWxl
Y3Rpb25Db250YWlucyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU3VyZmFjZVBvb2wu
Y3BwCShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9TdXJmYWNlUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBA
QCBUaWxlQnVmZmVyKiBTdXJmYWNlUG9vbDo6YmFja0J1ZmZlcigpIGNvCiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VGlsZUJ1ZmZlcio+KG1fYmFja0J1ZmZlcik7CiB9CiAKLXN0ZDo6c3Ry
aW5nIFN1cmZhY2VQb29sOjpzaGFyZWRQaXhtYXBHcm91cCgpIGNvbnN0Citjb25zdCBjaGFyICpT
dXJmYWNlUG9vbDo6c2hhcmVkUGl4bWFwR3JvdXAoKSBjb25zdAogewogICAgIHJldHVybiBTSEFS
RURfUElYTUFQX0dST1VQOwogfQpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvU3VyZmFjZVBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5oCShyZXZpc2lvbiAxMzEyNDgpCisrKyBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBiYWNraW5nc3RvcmUu
CiAgICAgVGlsZUJ1ZmZlciogYmFja0J1ZmZlcigpIGNvbnN0OwogCi0gICAgc3RkOjpzdHJpbmcg
c2hhcmVkUGl4bWFwR3JvdXAoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyICpzaGFyZWRQaXhtYXBH
cm91cCgpIGNvbnN0OwogCiAgICAgdm9pZCByZWxlYXNlQnVmZmVycygpOwogICAgIHZvaWQgY3Jl
YXRlQnVmZmVycygpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMjU3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMTAtMTMgIEdlb3JnZSBTdGFpa29zICA8c3Rh
aWtvc0B3ZWJraXQub3JnPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBBZGFwdCB0byBQbGF0Zm9y
bSBBUEkgY2hhbmdlcyBpbiBzdHJpbmcgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCB1c2FnZSBvZiBXZWJTdHJpbmcsIGNoYXIq
IGFuZCBzdGQ6OnN0cmluZyB0byBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpydW5UZXN0KToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L1dvcmtRdWV1ZUl0ZW1CbGFja0JlcnJ5LmNw
cDoKKyAgICAgICAgKExvYWRIVE1MU3RyaW5nSXRlbTo6aW52b2tlKToKKyAgICAgICAgKFNjcmlw
dEl0ZW06Omludm9rZSk6CisKIDIwMTItMTAtMTIgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2Vr
QGdtYWlsLmNvbT4KIAogICAgICAgICBbVGVzdFJlc3VsdFNlcnZlcl0gQWRkIHN1cHBvcnQgZm9y
IG5vbi1DaHJvbWl1bSBUZXN0RXhwZWN0YXRpb25zIGZpbGVzCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24g
MTMxMjQ4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9EdW1wUmVuZGVyVHJl
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIER1bXBSZW5kZXJU
cmVlOjpydW5UZXN0KGNvbnN0IFN0cmluCiAgICAgRklMRSogY3VycmVudCA9IGZvcGVuKG1fY3Vy
cmVudFRlc3RGaWxlLnV0ZjgoKS5kYXRhKCksICJ3Iik7CiAgICAgZndyaXRlKG1fY3VycmVudFRl
c3QtPnV0ZjgoKS5kYXRhKCksIDEsIG1fY3VycmVudFRlc3QtPnV0ZjgoKS5sZW5ndGgoKSwgY3Vy
cmVudCk7CiAgICAgZmNsb3NlKGN1cnJlbnQpOwotICAgIG1fcGFnZS0+bG9hZCh1cmwudXRmOCgp
LmRhdGEoKSwgMCwgZmFsc2UpOworICAgIG1fcGFnZS0+bG9hZCh1cmwsIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTdHJpbmc6OmVtcHR5U3RyaW5nKCksIGZhbHNlKTsKIH0KIAogdm9pZCBEdW1wUmVu
ZGVyVHJlZTo6ZG9uZURydCgpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5
L1dvcmtRdWV1ZUl0ZW1CbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9ibGFja2JlcnJ5L1dvcmtRdWV1ZUl0ZW1CbGFja0JlcnJ5LmNwcAkocmV2aXNpb24g
MTMxMjQ4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9Xb3JrUXVldWVJdGVt
QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBMb2Fk
SFRNTFN0cmluZ0l0ZW06Omludm9rZSgpIGNvbnN0CiAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmlu
ZyhtX2NvbnRlbnQuZ2V0KCksIGNvbnRlbnQuZ2V0KCksIGNvbnRlbnRTaXplKTsKICAgICBKU1N0
cmluZ0dldFVURjhDU3RyaW5nKG1fYmFzZVVSTC5nZXQoKSwgYmFzZVVSTC5nZXQoKSwgYmFzZVVS
TFNpemUpOwogICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcobV91bnJlYWNoYWJsZVVSTC5nZXQo
KSwgdW5yZWFjaGFibGVVUkwuZ2V0KCksIHVucmVhY2hhYmxlVVJMU2l6ZSk7Ci0gICAgQmxhY2tC
ZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3RhbmNlKCktPnBhZ2UoKS0+
bG9hZFN0cmluZyhjb250ZW50LmdldCgpLCBiYXNlVVJMLmdldCgpLCAidGV4dC9odG1sIiwgdW5y
ZWFjaGFibGVVUkxTaXplID8gdW5yZWFjaGFibGVVUkwuZ2V0KCkgOiAwKTsKKyAgICBCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFuY2UoKS0+cGFnZSgpLT5s
b2FkU3RyaW5nKGNvbnRlbnQuZ2V0KCksIGJhc2VVUkwuZ2V0KCksICJ0ZXh0L2h0bWwiLCB1bnJl
YWNoYWJsZVVSTFNpemUgPyB1bnJlYWNoYWJsZVVSTC5nZXQoKSA6ICIiKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtNzQsMTEgKzc0LDExIEBAIGJvb2wgUmVsb2FkSXRlbTo6aW52b2tlKCkg
Y29uc3QKIGJvb2wgU2NyaXB0SXRlbTo6aW52b2tlKCkgY29uc3QKIHsKICAgICBCbGFja0JlcnJ5
OjpXZWJLaXQ6OkphdmFTY3JpcHREYXRhVHlwZSB0eXBlOwotICAgIEJsYWNrQmVycnk6OldlYktp
dDo6V2ViU3RyaW5nIHJlc3VsdDsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nIHJl
c3VsdDsKICAgICBzaXplX3Qgc2NyaXB0QXJyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhD
U3RyaW5nU2l6ZShtX3NjcmlwdC5nZXQoKSk7CiAgICAgT3duQXJyYXlQdHI8Y2hhcj4gc2NyaXB0
ID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltzY3JpcHRBcnJTaXplXSk7CiAgICAgSlNTdHJpbmdH
ZXRVVEY4Q1N0cmluZyhtX3NjcmlwdC5nZXQoKSwgc2NyaXB0LmdldCgpLCBzY3JpcHRBcnJTaXpl
KTsKLSAgICBCbGFja0JlcnJ5OjpXZWJLaXQ6OkR1bXBSZW5kZXJUcmVlOjpjdXJyZW50SW5zdGFu
Y2UoKS0+cGFnZSgpLT5leGVjdXRlSmF2YVNjcmlwdChzY3JpcHQuZ2V0KCksIHR5cGUsIHJlc3Vs
dCk7CisgICAgQmxhY2tCZXJyeTo6V2ViS2l0OjpEdW1wUmVuZGVyVHJlZTo6Y3VycmVudEluc3Rh
bmNlKCktPnBhZ2UoKS0+ZXhlY3V0ZUphdmFTY3JpcHQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0
cmluZzo6ZnJvbVJhd0RhdGEoc2NyaXB0LmdldCgpLCBzY3JpcHRBcnJTaXplKSwgdHlwZSwgcmVz
dWx0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168583</attachid>
            <date>2012-10-14 07:20:30 -0700</date>
            <delta_ts>2012-10-17 14:47:14 -0700</delta_ts>
            <desc>Follow-on patch to change m_mode to AtomicString</desc>
            <filename>99248_2.patch</filename>
            <type>text/plain</type>
            <size>1857</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTE0ICBHZW9yZ2Ug
U3RhaWtvcyAgPHN0YWlrb3NAd2Via2l0Lm9yZz4KKworICAgICAgICBDb25lcnQgbV9tb2RlIHRv
IGJlIGFuIEF0b21pY1N0cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk5MjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgbV9tb2RlIHJlcXVpcmVkIGEgY29udmVyc2lvbiBmcm9tIEF0b21pY1N0cmlu
Zy4gIEp1c3QgbWFrZSBpdCBhbiBBdG9taWNTdHJpbmcgaW5zdGVhZCBwZXIgc3VnZ2VzdGlvbiBm
cm9tIEJlbmphbWluLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBjaGFuZ2luZyB0aGUg
dmFyaWFibGUgdHlwZSB0byBtYXRjaC4KKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6VGV4dFRyYWNrKToKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorICAgICAgICAoVGV4dFRyYWNrKToKKwogMjAxMi0x
MC0xMyAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFdlYkF1
ZGlvQnVzIG5lZWRzIHN1cHBvcnQgZm9yIHJlc2l6aW5nIGJ1cyB0byBhIHNtYWxsZXIgc2l6ZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkocmV2aXNpb24gMTMx
MjQ4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgVGV4dFRyYWNrOjpUZXh0VHJhY2soU2NyaXB0RXhl
Y3V0aW9uQ29udAogICAgICwgbV9tZWRpYUVsZW1lbnQoMCkKICAgICAsIG1fbGFiZWwobGFiZWwp
CiAgICAgLCBtX2xhbmd1YWdlKGxhbmd1YWdlKQotICAgICwgbV9tb2RlKGRpc2FibGVkS2V5d29y
ZCgpLnN0cmluZygpKQorICAgICwgbV9tb2RlKGRpc2FibGVkS2V5d29yZCgpKQogICAgICwgbV9j
bGllbnQoY2xpZW50KQogICAgICwgbV90cmFja1R5cGUodHlwZSkKICAgICAsIG1fcmVhZGluZXNz
U3RhdGUoTm90TG9hZGVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5o
CShyZXZpc2lvbiAxMzEyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgcHJpdmF0ZToKICAgICBTdHJp
bmcgbV9raW5kOwogICAgIFN0cmluZyBtX2xhYmVsOwogICAgIFN0cmluZyBtX2xhbmd1YWdlOwot
ICAgIFN0cmluZyBtX21vZGU7CisgICAgQXRvbWljU3RyaW5nIG1fbW9kZTsKICAgICBUZXh0VHJh
Y2tDbGllbnQqIG1fY2xpZW50OwogICAgIFRleHRUcmFja1R5cGUgbV90cmFja1R5cGU7CiAgICAg
UmVhZGluZXNzU3RhdGUgbV9yZWFkaW5lc3NTdGF0ZTsK
</data>
<flag name="review"
          id="181819"
          type_id="1"
          status="-"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="181820"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168594</attachid>
            <date>2012-10-14 14:53:25 -0700</date>
            <delta_ts>2012-10-15 11:14:28 -0700</delta_ts>
            <desc>Follow-on patch to fix a function signature that was missed</desc>
            <filename>0001-BlackBerry-Fix-WebSockets-which-was-disabled-by-rece.patch</filename>
            <type>text/plain</type>
            <size>3673</size>
            <attacher name="Joe Mason">joenotcharles</attacher>
            
              <data encoding="base64">RnJvbSBlZGQ5YmNkOWRkYzJhMDBmYjI0YjExZWMzNzZlNDc0MjZhM2UwY2FkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2UgTWFzb24gPGptYXNvbkByaW0uY29tPgpEYXRlOiBTdW4s
IDE0IE9jdCAyMDEyIDE3OjQyOjE3IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVycnld
IEZpeCBXZWJTb2NrZXRzIHdoaWNoIHdhcyBkaXNhYmxlZCBieSByZWNlbnQKIHN0cmluZyBjaGFu
Z2VzCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyNDgKClJldmll
d2VkIGJ5IEdlb3JnZSBTdGFpa29zCgpQUiAyMjM2ODE6IFRoZSBzaWduYXR1cmUgb2YgRmlsdGVy
U3RyZWFtOjpub3RpZnlTdGF0dXNSZWNlaXZlZCBjaGFuZ2VkIHRvIHRha2UgYQpCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nIGluc3RlYWQgb2YgYSBjaGFyICouIEJ1dCBTb2NrZXRTdHJlYW1I
YW5kbGVCbGFja0JlcnJ5IHdhcyBub3QKdXBkYXRlZCB0byB0aGUgbmV3IHNpZ25hdHVyZSwgc28g
dGhlIHN0YXR1cyBtZXNzYWdlIGlzIG5vdCBnZXR0aW5nIHBhc3NlZCBvbiBiZWNhdXNlIGl0IGlz
Cm5vdCBjYWxsaW5nIHRoZSBjb3JyZWN0IG92ZXJyaWRlLgoKTm8gbmV3IHRlc3RzIGJlY2F1c2Ug
dGhpcyBpcyBmaXhpbmcgYSByZWdyZXNzaW9uLgoKKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvU29ja2V0U3RyZWFtSGFuZGxlLmg6CihTb2NrZXRTdHJlYW1IYW5kbGUpOgoqIHBsYXRmb3Jt
L25ldHdvcmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1IYW5kbGVCbGFja0JlcnJ5LmNwcDoKKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6bm90aWZ5U3RhdHVzUmVjZWl2ZWQpOgoKKiBTb3Vy
Y2UvY21ha2UvT3B0aW9uc0JsYWNrQmVycnkuY21ha2U6Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICsrKysrKysrKysrKysrKysr
KysKIC4uLi9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlLmggICAgICAgIHwg
ICAgMiArLQogLi4uL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlQmxhY2tCZXJyeS5jcHAg
ICAgfCAgICAyICstCiAzIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDIgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJlZjQzZWQuLmRkZWYwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxMi0xMC0xNCAgSm9lIE1hc29uICA8am1hc29uQHJpbS5jb20+CisKKyAg
ICAgICAgW0JsYWNrQmVycnldIEZpeCBXZWJTb2NrZXRzIHdoaWNoIHdhcyBkaXNhYmxlZCBieSBy
ZWNlbnQgc3RyaW5nIGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk5MjQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUFIgMjIzNjgxOiBUaGUgc2lnbmF0dXJlIG9mIEZpbHRlclN0cmVhbTo6bm90
aWZ5U3RhdHVzUmVjZWl2ZWQgY2hhbmdlZCB0byB0YWtlIGEKKyAgICAgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZyBpbnN0ZWFkIG9mIGEgY2hhciAqLiBCdXQgU29ja2V0U3RyZWFtSGFu
ZGxlQmxhY2tCZXJyeSB3YXMgbm90CisgICAgICAgIHVwZGF0ZWQgdG8gdGhlIG5ldyBzaWduYXR1
cmUsIHNvIHRoZSBzdGF0dXMgbWVzc2FnZSBpcyBub3QgZ2V0dGluZyBwYXNzZWQgb24gYmVjYXVz
ZSBpdCBpcworICAgICAgICBub3QgY2FsbGluZyB0aGUgY29ycmVjdCBvdmVycmlkZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIGZpeGluZyBhIHJlZ3Jlc3Npb24uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxl
Lmg6CisgICAgICAgIChTb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1IYW5kbGVCbGFja0JlcnJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6bm90aWZ5U3RhdHVzUmVjZWl2ZWQpOgor
CiAyMDEyLTEwLTExICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgW0NNQUtF
XSBEbyBub3QgYWRkIGluY2x1ZGUgZGlycyB0d2ljZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0cmVhbUhhbmRsZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0cmVhbUhhbmRs
ZS5oCmluZGV4IGZjZTA1ZjEuLjgwZWM0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1IYW5kbGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxl
LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhh
bmRsZSgpOwogCiAgICAgLy8gRmlsdGVyU3RyZWFtIGludGVyZmFjZQotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3RhdHVzUmVjZWl2ZWQoaW50IHN0YXR1cywgY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbWVzc2FnZSk7CiAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeURhdGFSZWNlaXZlZChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya0J1ZmZlciop
OwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlSZWFkeVRvU2VuZERhdGEoKTsKICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5Q2xvc2UoaW50IHN0YXR1cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0U3RyZWFtSGFuZGxlQmxhY2tCZXJy
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvU29ja2V0
U3RyZWFtSGFuZGxlQmxhY2tCZXJyeS5jcHAKaW5kZXggMjkwZjQ1Yi4uMGE5NzE5MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1NvY2tldFN0
cmVhbUhhbmRsZUJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9Tb2NrZXRTdHJlYW1IYW5kbGVCbGFja0JlcnJ5LmNwcApAQCAtMTAy
LDcgKzEwMiw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3NlKCkKIAog
Ly8gRmlsdGVyU3RyZWFtIGludGVyZmFjZQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6bm90
aWZ5U3RhdHVzUmVjZWl2ZWQoaW50IHN0YXR1cywgY29uc3QgY2hhciogbWVzc2FnZSkKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpub3RpZnlTdGF0dXNSZWNlaXZlZChpbnQgc3RhdHVzLCBjb25z
dCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCht
X2NsaWVudCk7CiAKLS0gCjEuNy41LjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>