<?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>196428</bug_id>
          
          <creation_ts>2019-03-30 12:38:06 -0700</creation_ts>
          <short_desc>Consider removing Optional&lt;bool&gt;::operator bool</short_desc>
          <delta_ts>2019-03-30 13:06:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>ews-watchlist</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1522782</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-30 12:38:06 -0700</bug_when>
    <thetext>Consider removing Optional&lt;bool&gt;::operator bool</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522784</commentid>
    <comment_count>1</comment_count>
      <attachid>366366</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-30 12:41:40 -0700</bug_when>
    <thetext>Created attachment 366366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522786</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-30 12:44:20 -0700</bug_when>
    <thetext>Attachment 366366 did not pass style-queue:


ERROR: Source/WTF/wtf/Optional.h:508:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:671:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:700:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:710:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:732:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:737:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:742:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:747:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:757:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:762:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:772:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:787:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:795:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:800:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:805:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:810:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:815:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:820:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:825:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:830:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:835:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:840:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:845:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:850:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:857:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:862:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:867:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:872:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:877:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:882:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:887:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:892:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:897:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:902:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:907:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:912:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:918:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:923:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:928:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:933:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:938:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:943:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:948:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:953:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:958:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:963:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:968:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:973:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 48 in 92 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>1522787</commentid>
    <comment_count>3</comment_count>
      <attachid>366367</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-30 13:03:53 -0700</bug_when>
    <thetext>Created attachment 366367
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522788</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-30 13:06:55 -0700</bug_when>
    <thetext>Attachment 366367 did not pass style-queue:


ERROR: Source/WTF/wtf/Optional.h:508:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:671:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:700:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:710:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:732:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:737:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:742:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:747:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:757:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:762:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:772:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:787:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:795:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:800:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:805:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:810:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:815:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:820:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:825:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:830:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:835:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:840:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:845:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:850:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:857:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:862:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:867:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:872:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:877:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:882:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:887:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:892:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:897:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:902:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:907:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:912:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:918:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:923:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:928:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:933:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:938:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:943:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:948:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:953:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:958:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:963:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:968:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Optional.h:973:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 48 in 91 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366366</attachid>
            <date>2019-03-30 12:41:40 -0700</date>
            <delta_ts>2019-03-30 13:03:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196428-20190330124139.patch</filename>
            <type>text/plain</type>
            <size>118019</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE5LTAzLTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQ29uc2lkZXIgcmVtb3ZpbmcgT3B0aW9uYWw8Ym9vbD46Om9wZXJhdG9yIGJv
b2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjQy
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNI
YXNPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoK
KyAgICAgICAgKEpTQzo6dG9Qcm9wZXJ0eURlc2NyaXB0b3IpOgorCiAyMDE5LTAzLTI3ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gT3duZXIgb2Yg
d2F0Y2hwb2ludHMgc2hvdWxkIHZhbGlkYXRlIGF0IEdDIGZpbmFsaXppbmcgcGhhc2UKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwogICAgIEhhc093blByb3BlcnR5
Q2FjaGUqIGhhc093blByb3BlcnR5Q2FjaGUgPSB2bS5lbnN1cmVIYXNPd25Qcm9wZXJ0eUNhY2hl
KCk7Ci0gICAgaWYgKE9wdGlvbmFsPGJvb2w+IHJlc3VsdCA9IGhhc093blByb3BlcnR5Q2FjaGUt
PmdldChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgQVNTRVJUKCpyZXN1bHQg
PT0gdGhpc09iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSk7Ci0gICAg
ICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKCpyZXN1bHQpKTsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPGJvb2w+
IHJlc3VsdCA9IGhhc093blByb3BlcnR5Q2FjaGUtPmdldChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgIGlmIChyZXN1bHQuaGFzVmFsdWUoKSkgeworICAgICAgICAgICAgQVNTRVJU
KCpyZXN1bHQgPT0gdGhpc09iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1l
KSk7CisgICAgICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oKnJlc3VsdCkpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAy
NDM1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTYgKzk4LDE5IEBAIGlubGluZSBQcm9wZXJ0eURl
c2NyaXB0b3IgdG9Qcm9wZXJ0eURlc2MKICAgICAvLyBXZSBhc3N1bWUgdGhhdCB2YWxpZGF0aW9u
IGlzIGFscmVhZHkgZG9uZS4KICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKIAotICAgIGlm
IChPcHRpb25hbDxib29sPiBlbnVtZXJhYmxlID0gYXR0cmlidXRlcy5lbnVtZXJhYmxlKCkpCisg
ICAgT3B0aW9uYWw8Ym9vbD4gZW51bWVyYWJsZSA9IGF0dHJpYnV0ZXMuZW51bWVyYWJsZSgpOwor
ICAgIGlmIChlbnVtZXJhYmxlLmhhc1ZhbHVlKCkpCiAgICAgICAgIGRlc2Muc2V0RW51bWVyYWJs
ZShlbnVtZXJhYmxlLnZhbHVlKCkpOwogCi0gICAgaWYgKE9wdGlvbmFsPGJvb2w+IGNvbmZpZ3Vy
YWJsZSA9IGF0dHJpYnV0ZXMuY29uZmlndXJhYmxlKCkpCisgICAgT3B0aW9uYWw8Ym9vbD4gY29u
ZmlndXJhYmxlID0gYXR0cmlidXRlcy5jb25maWd1cmFibGUoKTsKKyAgICBpZiAoY29uZmlndXJh
YmxlLmhhc1ZhbHVlKCkpCiAgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGNvbmZpZ3VyYWJs
ZS52YWx1ZSgpKTsKIAogICAgIGlmIChhdHRyaWJ1dGVzLmhhc1ZhbHVlKCkpCiAgICAgICAgIGRl
c2Muc2V0VmFsdWUodmFsdWUpOwogCi0gICAgaWYgKE9wdGlvbmFsPGJvb2w+IHdyaXRhYmxlID0g
YXR0cmlidXRlcy53cml0YWJsZSgpKQorICAgIE9wdGlvbmFsPGJvb2w+IHdyaXRhYmxlID0gYXR0
cmlidXRlcy53cml0YWJsZSgpOworICAgIGlmICh3cml0YWJsZS5oYXNWYWx1ZSgpKQogICAgICAg
ICBkZXNjLnNldFdyaXRhYmxlKHdyaXRhYmxlLnZhbHVlKCkpOwogCiAgICAgaWYgKGF0dHJpYnV0
ZXMuaGFzR2V0KCkpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxOS0wMy0zMCAgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIENvbnNpZGVyIHJlbW92
aW5nIE9wdGlvbmFsPGJvb2w+OjpvcGVyYXRvciBib29sCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9hYnNlaWwtY3Bw
L2Fic2wvdHlwZXMvb3B0aW9uYWwuaDoKKyAgICAgICAgKGFic2w6Om9wdGlvbmFsOjp2YWx1ZSBj
b25zdCk6CisgICAgICAgIChhYnNsOjpvcHRpb25hbDo6dmFsdWUpOgorICAgICAgICAoYWJzbDo6
b3B0aW9uYWw6OnZhbHVlX29yIGNvbnN0KToKKyAgICAgICAgKGFic2w6Om9wdGlvbmFsOjp2YWx1
ZV9vcik6CisgICAgICAgIChhYnNsOjpvcGVyYXRvcj09KToKKyAgICAgICAgKGFic2w6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoYWJzbDo6b3BlcmF0b3I8KToKKyAgICAgICAgKGFic2w6Om9wZXJh
dG9yPD0pOgorICAgICAgICAoYWJzbDo6b3BlcmF0b3I+KToKKyAgICAgICAgKGFic2w6Om9wZXJh
dG9yPj0pOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2F1ZGlvX29wdGlvbnMuY2M6Cisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9tZWRpYS9iYXNlL21lZGlhY2hhbm5lbC5oOgorICAgICAg
ICAoY3JpY2tldDo6VG9TdHJpbmdJZlNldCk6CisgICAgICAgIChjcmlja2V0OjpWaWRlb09wdGlv
bnM6OlNldEZyb20pOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0
Y3ZpZGVvZW5naW5lLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbWVkaWEvZW5naW5lL3dl
YnJ0Y3ZvaWNlZW5naW5lLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19jb2RpbmcvYXVkaW9fbmV0d29ya19hZGFwdG9yL2RlYnVnX2R1bXBfd3JpdGVyLmNjOgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19jb2RpbmcvYXVkaW9fbmV0d29ya19h
ZGFwdG9yL2R0eF9jb250cm9sbGVyLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19jb2RpbmcvYXVkaW9fbmV0d29ya19hZGFwdG9yL2ZlY19jb250cm9sbGVyX3JwbHJf
YmFzZWQuY2M6CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2NvZGluZy9j
b2RlY3Mvb3B1cy9hdWRpb19lbmNvZGVyX29wdXMuY2M6CisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9wYy9qc2VwdHJhbnNwb3J0Y29udHJvbGxlci5oOgorICAgICAgICAod2VicnRjOjpKc2VwVHJh
bnNwb3J0Q29udHJvbGxlcjo6aW5pdGlhbF9vZmZlcmVyIGNvbnN0KToKKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL3BjL3BlZXJjb25uZWN0aW9uLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMv
cnRjX2Jhc2UvZXhwZXJpbWVudHMvZmllbGRfdHJpYWxfcGFyc2VyLmNjOgorICAgICAgICAqIFNv
dXJjZS93ZWJydGMvdmlkZW8vcXVhbGl0eV90aHJlc2hvbGQuY2M6CisgICAgICAgICogU291cmNl
L3dlYnJ0Yy92aWRlby9yZWNlaXZlX3N0YXRpc3RpY3NfcHJveHkuY2M6CisKIDIwMTktMDMtMjIg
IEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBUaGlu
TFRPIHN1cHBvcnQgaW4gUHJvZHVjdGlvbiBidWlsZHMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYWJzZWlsLWNwcC9hYnNsL3R5cGVzL29wdGlv
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9hYnNlaWwtY3BwL2Fic2wvdHlwZXMvb3B0aW9uYWwuaAkocmV2aXNpb24gMjQz
NTY2KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9h
YnNlaWwtY3BwL2Fic2wvdHlwZXMvb3B0aW9uYWwuaAkod29ya2luZyBjb3B5KQpAQCAtODEzLDcg
KzgxMyw3IEBAIGNsYXNzIG9wdGlvbmFsIDogcHJpdmF0ZSBvcHRpb25hbF9pbnRlcm4KICAgLy8g
ICAgIC8vIG9wdCBpcyBlbXB0eS4KICAgLy8gICB9CiAgIC8vCi0gIGNvbnN0ZXhwciBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdGhpcy0+ZW5nYWdlZF87
IH0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgWCA9IFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8
IXN0ZDo6aXNfc2FtZTxib29sLCBYPjo6dmFsdWU+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdGhpcy0+ZW5nYWdl
ZF87IH0KIAogICAvLyBvcHRpb25hbDo6aGFzX3ZhbHVlKCkKICAgLy8KQEAgLTgzNCwyNCArODM0
LDI0IEBAIGNsYXNzIG9wdGlvbmFsIDogcHJpdmF0ZSBvcHRpb25hbF9pbnRlcm4KICAgLy8gdGhl
IGBUYCBzdWItb2JqZWN0LiBUaHJvd3MgYGFic2w6OmJhZF9vcHRpb25hbF9hY2Nlc3NgIHdoZW4g
dGhlIGBvcHRpb25hbGAKICAgLy8gaXMgZW1wdHkuCiAgIGNvbnN0ZXhwciBjb25zdCBUJiB2YWx1
ZSgpIGNvbnN0ICYgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPigqdGhpcykKKyAgICBy
ZXR1cm4gdGhpcy0+aGFzX3ZhbHVlKCkKICAgICAgICAgICAgICAgID8gcmVmZXJlbmNlKCkKICAg
ICAgICAgICAgICAgIDogKG9wdGlvbmFsX2ludGVybmFsOjp0aHJvd19iYWRfb3B0aW9uYWxfYWNj
ZXNzKCksIHJlZmVyZW5jZSgpKTsKICAgfQogICBUJiB2YWx1ZSgpICYgewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxib29sPigqdGhpcykKKyAgICByZXR1cm4gdGhpcy0+aGFzX3ZhbHVlKCkKICAg
ICAgICAgICAgICAgID8gcmVmZXJlbmNlKCkKICAgICAgICAgICAgICAgIDogKG9wdGlvbmFsX2lu
dGVybmFsOjp0aHJvd19iYWRfb3B0aW9uYWxfYWNjZXNzKCksIHJlZmVyZW5jZSgpKTsKICAgfQog
ICBUJiYgdmFsdWUoKSAmJiB7ICAvLyBOT0xJTlQoYnVpbGQvYysrMTEpCiAgICAgcmV0dXJuIHN0
ZDo6bW92ZSgKLSAgICAgICAgc3RhdGljX2Nhc3Q8Ym9vbD4oKnRoaXMpCisgICAgICAgIHRoaXMt
Pmhhc192YWx1ZSgpCiAgICAgICAgICAgICA/IHJlZmVyZW5jZSgpCiAgICAgICAgICAgICA6IChv
cHRpb25hbF9pbnRlcm5hbDo6dGhyb3dfYmFkX29wdGlvbmFsX2FjY2VzcygpLCByZWZlcmVuY2Uo
KSkpOwogICB9CiAgIGNvbnN0ZXhwciBjb25zdCBUJiYgdmFsdWUoKSBjb25zdCAmJiB7ICAvLyBO
T0xJTlQoYnVpbGQvYysrMTEpCiAgICAgcmV0dXJuIGFic2w6Om1vdmUoCi0gICAgICAgIHN0YXRp
Y19jYXN0PGJvb2w+KCp0aGlzKQorICAgICAgICB0aGlzLT5oYXNfdmFsdWUoKQogICAgICAgICAg
ICAgPyByZWZlcmVuY2UoKQogICAgICAgICAgICAgOiAob3B0aW9uYWxfaW50ZXJuYWw6OnRocm93
X2JhZF9vcHRpb25hbF9hY2Nlc3MoKSwgcmVmZXJlbmNlKCkpKTsKICAgfQpAQCAtODY5LDcgKzg2
OSw3IEBAIGNsYXNzIG9wdGlvbmFsIDogcHJpdmF0ZSBvcHRpb25hbF9pbnRlcm4KICAgICAgICAg
ICAgICAgICAgICJvcHRpb25hbDxUPjo6dmFsdWVfb3I6IFQgbXVzdCBieSBjb3B5IGNvbnN0cnVj
dGlibGUiKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29udmVydGlibGU8VSYmLCB2YWx1
ZV90eXBlPjo6dmFsdWUsCiAgICAgICAgICAgICAgICAgICAib3B0aW9uYWw8VD46OnZhbHVlX29y
OiBVIG11c3QgYmUgY29udmVydGlibGUgdG8gVCIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxi
b29sPigqdGhpcykKKyAgICByZXR1cm4gdGhpcy0+aGFzX3ZhbHVlKCkKICAgICAgICAgICAgICAg
ID8gKip0aGlzCiAgICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PFQ+KGFic2w6OmZvcndhcmQ8
VT4odikpOwogICB9CkBAIC04NzksNyArODc5LDcgQEAgY2xhc3Mgb3B0aW9uYWwgOiBwcml2YXRl
IG9wdGlvbmFsX2ludGVybgogICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsPFQ+Ojp2YWx1ZV9v
cjogVCBtdXN0IGJ5IGNvcHkgY29uc3RydWN0aWJsZSIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19jb252ZXJ0aWJsZTxVJiYsIHZhbHVlX3R5cGU+Ojp2YWx1ZSwKICAgICAgICAgICAgICAg
ICAgICJvcHRpb25hbDxUPjo6dmFsdWVfb3I6IFUgbXVzdCBiZSBjb252ZXJ0aWJsZSB0byBUIik7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KCp0aGlzKSA/IHN0ZDo6bW92ZSgqKnRoaXMp
CisgICAgcmV0dXJuIHRoaXMtPmhhc192YWx1ZSgpID8gc3RkOjptb3ZlKCoqdGhpcykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8VD4oc3RkOjpmb3J3
YXJkPFU+KHYpKTsKICAgfQogCkBAIC05NjUsOSArOTY1LDkgQEAgY29uc3RleHByIG9wdGlvbmFs
PFQ+IG1ha2Vfb3B0aW9uYWwoc3RkOgogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
CiBjb25zdGV4cHIgYXV0byBvcGVyYXRvcj09KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBv
cHRpb25hbDxVPiYgeSkKICAgICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVy
dGlibGVfdG9fYm9vbCgqeCA9PSAqeSkpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHgp
ICE9IHN0YXRpY19jYXN0PGJvb2w+KHkpCisgIHJldHVybiB4Lmhhc192YWx1ZSgpICE9IHkuaGFz
X3ZhbHVlKCkKICAgICAgICAgICAgICA/IGZhbHNlCi0gICAgICAgICAgICAgOiBzdGF0aWNfY2Fz
dDxib29sPih4KSA9PSBmYWxzZSA/IHRydWUKKyAgICAgICAgICAgICA6IHguaGFzX3ZhbHVlKCkg
PT0gZmFsc2UgPyB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IHN0YXRpY19jYXN0PGJvb2w+KCp4ID09ICp5KTsKIH0KIApAQCAtOTc2LDkgKzk3Niw5
IEBAIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yPT0oY29uc3Qgb3B0aW9uYWwKIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogY29uc3RleHByIGF1dG8gb3BlcmF0b3IhPShjb25zdCBv
cHRpb25hbDxUPiYgeCwgY29uc3Qgb3B0aW9uYWw8VT4mIHkpCiAgICAgLT4gZGVjbHR5cGUob3B0
aW9uYWxfaW50ZXJuYWw6OmNvbnZlcnRpYmxlX3RvX2Jvb2woKnggIT0gKnkpKSB7Ci0gIHJldHVy
biBzdGF0aWNfY2FzdDxib29sPih4KSAhPSBzdGF0aWNfY2FzdDxib29sPih5KQorICByZXR1cm4g
eC5oYXNfdmFsdWUoKSAhPSB5Lmhhc192YWx1ZSgpCiAgICAgICAgICAgICAgPyB0cnVlCi0gICAg
ICAgICAgICAgOiBzdGF0aWNfY2FzdDxib29sPih4KSA9PSBmYWxzZSA/IGZhbHNlCisgICAgICAg
ICAgICAgOiB4Lmhhc192YWx1ZSgpID09IGZhbHNlID8gZmFsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8Ym9vbD4oKnggIT0gKnkp
OwogfQogLy8gUmV0dXJuczogSWYgIXksIGZhbHNlOyBvdGhlcndpc2UsIGlmICF4LCB0cnVlOyBv
dGhlcndpc2UgKnggPCAqeS4KQEAgLTEwMTgsMTEgKzEwMTgsMTEgQEAgY29uc3RleHByIGJvb2wg
b3BlcmF0b3I9PShudWxsb3B0X3QsIGNvbgogfQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIG5v
ZXhjZXB0IHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHgpOworICByZXR1cm4geC5oYXNf
dmFsdWUoKTsKIH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHByIGJvb2wgb3BlcmF0
b3IhPShudWxsb3B0X3QsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KSBub2V4Y2VwdCB7Ci0gIHJldHVy
biBzdGF0aWNfY2FzdDxib29sPih4KTsKKyAgcmV0dXJuIHguaGFzX3ZhbHVlKCk7CiB9CiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBvcHRpb25h
bDxUPiYsIG51bGxvcHRfdCkgbm9leGNlcHQgewpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG9wdGlvbmFsPAogfQogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwobnVsbG9wdF90LCBjb25zdCBvcHRpb25hbDxU
PiYgeCkgbm9leGNlcHQgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oeCk7CisgIHJldHVy
biB4Lmhhc192YWx1ZSgpOwogfQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIG5vZXhjZXB0IHsK
QEAgLTEwNDIsNyArMTA0Miw3IEBAIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0obnVsbG9wdF90
LCBjb24KIH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KHgpOworICByZXR1cm4geC5oYXNfdmFsdWUoKTsKIH0KIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgogY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG51bGxvcHRfdCwgY29uc3Qg
b3B0aW9uYWw8VD4mKSBub2V4Y2VwdCB7CkBAIC0xMDY1LDYyICsxMDY1LDYyIEBAIGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0obnVsbG9wdF90LCBjb24KIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPgogY29uc3RleHByIGF1dG8gb3BlcmF0b3I9PShjb25zdCBvcHRpb25hbDxUPiYg
eCwgY29uc3QgVSYgdikKICAgICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVy
dGlibGVfdG9fYm9vbCgqeCA9PSB2KSkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oeCkg
PyBzdGF0aWNfY2FzdDxib29sPigqeCA9PSB2KSA6IGZhbHNlOworICByZXR1cm4geC5oYXNfdmFs
dWUoKSA/IHN0YXRpY19jYXN0PGJvb2w+KCp4ID09IHYpIDogZmFsc2U7CiB9CiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yPT0oY29uc3Qg
VSYgdiwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpCiAgICAgLT4gZGVjbHR5cGUob3B0aW9uYWxfaW50
ZXJuYWw6OmNvbnZlcnRpYmxlX3RvX2Jvb2wodiA9PSAqeCkpIHsKLSAgcmV0dXJuIHN0YXRpY19j
YXN0PGJvb2w+KHgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4odiA9PSAqeCkgOiBmYWxzZTsKKyAgcmV0
dXJuIHguaGFzX3ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxib29sPih2ID09ICp4KSA6IGZhbHNlOwog
fQogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiBjb25zdGV4cHIgYXV0byBvcGVy
YXRvciE9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBVJiB2KQogICAgIC0+IGRlY2x0eXBl
KG9wdGlvbmFsX2ludGVybmFsOjpjb252ZXJ0aWJsZV90b19ib29sKCp4ICE9IHYpKSB7Ci0gIHJl
dHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0YXRpY19jYXN0PGJvb2w+KCp4ICE9IHYpIDog
dHJ1ZTsKKyAgcmV0dXJuIHguaGFzX3ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxib29sPigqeCAhPSB2
KSA6IHRydWU7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0ZXhw
ciBhdXRvIG9wZXJhdG9yIT0oY29uc3QgVSYgdiwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpCiAgICAg
LT4gZGVjbHR5cGUob3B0aW9uYWxfaW50ZXJuYWw6OmNvbnZlcnRpYmxlX3RvX2Jvb2wodiAhPSAq
eCkpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4o
diAhPSAqeCkgOiB0cnVlOworICByZXR1cm4geC5oYXNfdmFsdWUoKSA/IHN0YXRpY19jYXN0PGJv
b2w+KHYgIT0gKngpIDogdHJ1ZTsKIH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PgogY29uc3RleHByIGF1dG8gb3BlcmF0b3I8KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBV
JiB2KQogICAgIC0+IGRlY2x0eXBlKG9wdGlvbmFsX2ludGVybmFsOjpjb252ZXJ0aWJsZV90b19i
b29sKCp4IDwgdikpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHgpID8gc3RhdGljX2Nh
c3Q8Ym9vbD4oKnggPCB2KSA6IHRydWU7CisgIHJldHVybiB4Lmhhc192YWx1ZSgpID8gc3RhdGlj
X2Nhc3Q8Ym9vbD4oKnggPCB2KSA6IHRydWU7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yPChjb25zdCBVJiB2LCBjb25zdCBvcHRp
b25hbDxUPiYgeCkKICAgICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVydGli
bGVfdG9fYm9vbCh2IDwgKngpKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0
YXRpY19jYXN0PGJvb2w+KHYgPCAqeCkgOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzX3ZhbHVlKCkg
PyBzdGF0aWNfY2FzdDxib29sPih2IDwgKngpIDogZmFsc2U7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yPD0oY29uc3Qgb3B0aW9u
YWw8VD4mIHgsIGNvbnN0IFUmIHYpCiAgICAgLT4gZGVjbHR5cGUob3B0aW9uYWxfaW50ZXJuYWw6
OmNvbnZlcnRpYmxlX3RvX2Jvb2woKnggPD0gdikpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJv
b2w+KHgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4oKnggPD0gdikgOiB0cnVlOworICByZXR1cm4geC5o
YXNfdmFsdWUoKSA/IHN0YXRpY19jYXN0PGJvb2w+KCp4IDw9IHYpIDogdHJ1ZTsKIH0KIHRlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogY29uc3RleHByIGF1dG8gb3BlcmF0b3I8PShj
b25zdCBVJiB2LCBjb25zdCBvcHRpb25hbDxUPiYgeCkKICAgICAtPiBkZWNsdHlwZShvcHRpb25h
bF9pbnRlcm5hbDo6Y29udmVydGlibGVfdG9fYm9vbCh2IDw9ICp4KSkgewotICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4oeCkgPyBzdGF0aWNfY2FzdDxib29sPih2IDw9ICp4KSA6IGZhbHNlOwor
ICByZXR1cm4geC5oYXNfdmFsdWUoKSA/IHN0YXRpY19jYXN0PGJvb2w+KHYgPD0gKngpIDogZmFs
c2U7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0ZXhwciBhdXRv
IG9wZXJhdG9yPihjb25zdCBvcHRpb25hbDxUPiYgeCwgY29uc3QgVSYgdikKICAgICAtPiBkZWNs
dHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVydGlibGVfdG9fYm9vbCgqeCA+IHYpKSB7Ci0g
IHJldHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0YXRpY19jYXN0PGJvb2w+KCp4ID4gdikg
OiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzX3ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxib29sPigqeCA+
IHYpIDogZmFsc2U7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0
ZXhwciBhdXRvIG9wZXJhdG9yPihjb25zdCBVJiB2LCBjb25zdCBvcHRpb25hbDxUPiYgeCkKICAg
ICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVydGlibGVfdG9fYm9vbCh2ID4g
KngpKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0YXRpY19jYXN0PGJvb2w+
KHYgPiAqeCkgOiB0cnVlOworICByZXR1cm4geC5oYXNfdmFsdWUoKSA/IHN0YXRpY19jYXN0PGJv
b2w+KHYgPiAqeCkgOiB0cnVlOwogfQogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
CiBjb25zdGV4cHIgYXV0byBvcGVyYXRvcj49KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBV
JiB2KQogICAgIC0+IGRlY2x0eXBlKG9wdGlvbmFsX2ludGVybmFsOjpjb252ZXJ0aWJsZV90b19i
b29sKCp4ID49IHYpKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0YXRpY19j
YXN0PGJvb2w+KCp4ID49IHYpIDogZmFsc2U7CisgIHJldHVybiB4Lmhhc192YWx1ZSgpID8gc3Rh
dGljX2Nhc3Q8Ym9vbD4oKnggPj0gdikgOiBmYWxzZTsKIH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgogY29uc3RleHByIGF1dG8gb3BlcmF0b3I+PShjb25zdCBVJiB2LCBjb25z
dCBvcHRpb25hbDxUPiYgeCkKICAgICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29u
dmVydGlibGVfdG9fYm9vbCh2ID49ICp4KSkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4o
eCkgPyBzdGF0aWNfY2FzdDxib29sPih2ID49ICp4KSA6IHRydWU7CisgIHJldHVybiB4Lmhhc192
YWx1ZSgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4odiA+PSAqeCkgOiB0cnVlOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgYWJzbApJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2F1ZGlvX29wdGlvbnMuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2F1ZGlvX29wdGlvbnMuY2MJKHJldmlzaW9u
IDI0MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hdWRpb19vcHRpb25zLmNjCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxNCArMTksMTQgQEAgdGVt
cGxhdGUgPGNsYXNzIFQ+CiB2b2lkIFRvU3RyaW5nSWZTZXQocnRjOjpTaW1wbGVTdHJpbmdCdWls
ZGVyKiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioga2V5LAogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGFic2w6Om9wdGlvbmFsPFQ+JiB2YWwpIHsKLSAgaWYgKHZhbCkg
eworICBpZiAodmFsLmhhc192YWx1ZSgpKSB7CiAgICAgKCpyZXN1bHQpIDw8IGtleSA8PCAiOiAi
IDw8ICp2YWwgPDwgIiwgIjsKICAgfQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHZvaWQg
U2V0RnJvbShhYnNsOjpvcHRpb25hbDxUPiogcywgY29uc3QgYWJzbDo6b3B0aW9uYWw8VD4mIG8p
IHsKLSAgaWYgKG8pIHsKKyAgaWYgKG8uaGFzX3ZhbHVlKCkpIHsKICAgICAqcyA9IG87CiAgIH0K
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21lZGlh
L2Jhc2UvbWVkaWFjaGFubmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbWVkaWEvYmFzZS9tZWRpYWNoYW5uZWwuaAkocmV2aXNpb24g
MjQzNTY2KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbWVk
aWEvYmFzZS9tZWRpYWNoYW5uZWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjksMTAgKzY5LDEwIEBA
IHRlbXBsYXRlIDxjbGFzcyBUPgogc3RhdGljIHN0ZDo6c3RyaW5nIFRvU3RyaW5nSWZTZXQoY29u
c3QgY2hhcioga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJz
bDo6b3B0aW9uYWw8VD4mIHZhbCkgewogICBzdGQ6OnN0cmluZyBzdHI7Ci0gIGlmICh2YWwpIHsK
KyAgaWYgKHZhbC5oYXNfdmFsdWUoKSkgewogICAgIHN0ciA9IGtleTsKICAgICBzdHIgKz0gIjog
IjsKLSAgICBzdHIgKz0gdmFsID8gcnRjOjpUb1N0cmluZygqdmFsKSA6ICIiOworICAgIHN0ciAr
PSB2YWwuaGFzX3ZhbHVlKCkgPyBydGM6OlRvU3RyaW5nKCp2YWwpIDogIiI7CiAgICAgc3RyICs9
ICIsICI7CiAgIH0KICAgcmV0dXJuIHN0cjsKQEAgLTE0MSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmlk
ZW9PcHRpb25zIHsKICBwcml2YXRlOgogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgc3RhdGlj
IHZvaWQgU2V0RnJvbShhYnNsOjpvcHRpb25hbDxUPiogcywgY29uc3QgYWJzbDo6b3B0aW9uYWw8
VD4mIG8pIHsKLSAgICBpZiAobykgeworICAgIGlmIChvLmhhc192YWx1ZSgpKSB7CiAgICAgICAq
cyA9IG87CiAgICAgfQogICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9lbmdpbmUuY2MKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbWVkaWEvZW5naW5l
L3dlYnJ0Y3ZpZGVvZW5naW5lLmNjCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9lbmdp
bmUuY2MJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw3ICszMzQsNyBAQCBXZWJSdGNWaWRlb0NoYW5u
ZWw6OldlYlJ0Y1ZpZGVvU2VuZFN0cmVhCiAgICAgZGVub2lzaW5nID0gZmFsc2U7CiAgIH0gZWxz
ZSB7CiAgICAgLy8gVXNlIGNvZGVjIGRlZmF1bHQgaWYgdmlkZW9fbm9pc2VfcmVkdWN0aW9uIGlz
IHVuc2V0LgotICAgIGNvZGVjX2RlZmF1bHRfZGVub2lzaW5nID0gIXBhcmFtZXRlcnNfLm9wdGlv
bnMudmlkZW9fbm9pc2VfcmVkdWN0aW9uOworICAgIGNvZGVjX2RlZmF1bHRfZGVub2lzaW5nID0g
IXBhcmFtZXRlcnNfLm9wdGlvbnMudmlkZW9fbm9pc2VfcmVkdWN0aW9uLmhhc192YWx1ZSgpOwog
ICAgIGRlbm9pc2luZyA9IHBhcmFtZXRlcnNfLm9wdGlvbnMudmlkZW9fbm9pc2VfcmVkdWN0aW9u
LnZhbHVlX29yKGZhbHNlKTsKICAgfQogCkBAIC02OTIsNyArNjkyLDcgQEAgYm9vbCBXZWJSdGNW
aWRlb0NoYW5uZWw6OlNldFNlbmRQYXJhbWV0ZQogICAgIFJUQ19MT0coTFNfSU5GTykgPDwgIlVz
aW5nIGNvZGVjOiAiIDw8IGNvZGVjX3NldHRpbmdzLmNvZGVjLlRvU3RyaW5nKCk7CiAgIH0KIAot
ICBpZiAoY2hhbmdlZF9wYXJhbXMuZXh0bWFwX2FsbG93X21peGVkKSB7CisgIGlmIChjaGFuZ2Vk
X3BhcmFtcy5leHRtYXBfYWxsb3dfbWl4ZWQuaGFzX3ZhbHVlKCkpIHsKICAgICBTZXRFeHRtYXBB
bGxvd01peGVkKCpjaGFuZ2VkX3BhcmFtcy5leHRtYXBfYWxsb3dfbWl4ZWQpOwogICB9CiAgIGlm
IChjaGFuZ2VkX3BhcmFtcy5ydHBfaGVhZGVyX2V4dGVuc2lvbnMpIHsKQEAgLTE3ODAsNyArMTc4
MCw3IEBAIHZvaWQgV2ViUnRjVmlkZW9DaGFubmVsOjpXZWJSdGNWaWRlb1NlbmQKICAgICAgICAg
cGFyYW1ldGVyc18uY29uZmlnLnJ0cC5ydGNwX21vZGUgPT0gd2VicnRjOjpSdGNwTW9kZTo6a1Jl
ZHVjZWRTaXplOwogICAgIHJlY3JlYXRlX3N0cmVhbSA9IHRydWU7CiAgIH0KLSAgaWYgKHBhcmFt
cy5leHRtYXBfYWxsb3dfbWl4ZWQpIHsKKyAgaWYgKHBhcmFtcy5leHRtYXBfYWxsb3dfbWl4ZWQu
aGFzX3ZhbHVlKCkpIHsKICAgICBwYXJhbWV0ZXJzXy5jb25maWcucnRwLmV4dG1hcF9hbGxvd19t
aXhlZCA9ICpwYXJhbXMuZXh0bWFwX2FsbG93X21peGVkOwogICAgIHJlY3JlYXRlX3N0cmVhbSA9
IHRydWU7CiAgIH0KQEAgLTE3OTcsNyArMTc5Nyw3IEBAIHZvaWQgV2ViUnRjVmlkZW9DaGFubmVs
OjpXZWJSdGNWaWRlb1NlbmQKICAgICBwYXJhbWV0ZXJzXy5tYXhfYml0cmF0ZV9icHMgPSAqcGFy
YW1zLm1heF9iYW5kd2lkdGhfYnBzOwogICAgIFJlY29uZmlndXJlRW5jb2RlcigpOwogICB9Ci0g
IGlmIChwYXJhbXMuY29uZmVyZW5jZV9tb2RlKSB7CisgIGlmIChwYXJhbXMuY29uZmVyZW5jZV9t
b2RlLmhhc192YWx1ZSgpKSB7CiAgICAgcGFyYW1ldGVyc18uY29uZmVyZW5jZV9tb2RlID0gKnBh
cmFtcy5jb25mZXJlbmNlX21vZGU7CiAgIH0KIApAQCAtMTgwNSw3ICsxODA1LDcgQEAgdm9pZCBX
ZWJSdGNWaWRlb0NoYW5uZWw6OldlYlJ0Y1ZpZGVvU2VuZAogICBpZiAocGFyYW1zLmNvZGVjKSB7
CiAgICAgU2V0Q29kZWMoKnBhcmFtcy5jb2RlYyk7CiAgICAgcmVjcmVhdGVfc3RyZWFtID0gZmFs
c2U7ICAvLyBTZXRDb2RlYyBoYXMgYWxyZWFkeSByZWNyZWF0ZWQgdGhlIHN0cmVhbS4KLSAgfSBl
bHNlIGlmIChwYXJhbXMuY29uZmVyZW5jZV9tb2RlICYmIHBhcmFtZXRlcnNfLmNvZGVjX3NldHRp
bmdzKSB7CisgIH0gZWxzZSBpZiAocGFyYW1zLmNvbmZlcmVuY2VfbW9kZS5oYXNfdmFsdWUoKSAm
JiBwYXJhbWV0ZXJzXy5jb2RlY19zZXR0aW5ncy5oYXNfdmFsdWUoKSkgewogICAgIFNldENvZGVj
KCpwYXJhbWV0ZXJzXy5jb2RlY19zZXR0aW5ncyk7CiAgICAgcmVjcmVhdGVfc3RyZWFtID0gZmFs
c2U7ICAvLyBTZXRDb2RlYyBoYXMgYWxyZWFkeSByZWNyZWF0ZWQgdGhlIHN0cmVhbS4KICAgfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbWVkaWEvZW5n
aW5lL3dlYnJ0Y3ZvaWNlZW5naW5lLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21lZGlhL2VuZ2luZS93ZWJydGN2b2ljZWVuZ2luZS5j
YwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0Y3ZvaWNlZW5naW5lLmNjCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBWZXJpZnlVbmlxdWVQYXlsb2FkVHlwZXMoY29uc3Qg
c3RkOgogCiBhYnNsOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gR2V0QXVkaW9OZXR3b3JrQWRhcHRv
ckNvbmZpZygKICAgICBjb25zdCBBdWRpb09wdGlvbnMmIG9wdGlvbnMpIHsKLSAgaWYgKG9wdGlv
bnMuYXVkaW9fbmV0d29ya19hZGFwdG9yICYmICpvcHRpb25zLmF1ZGlvX25ldHdvcmtfYWRhcHRv
ciAmJgorICBpZiAob3B0aW9ucy5hdWRpb19uZXR3b3JrX2FkYXB0b3IuaGFzX3ZhbHVlKCkgJiYg
Km9wdGlvbnMuYXVkaW9fbmV0d29ya19hZGFwdG9yICYmCiAgICAgICBvcHRpb25zLmF1ZGlvX25l
dHdvcmtfYWRhcHRvcl9jb25maWcpIHsKICAgICAvLyBUdXJuIG9uIGF1ZGlvIG5ldHdvcmsgYWRh
cHRvciBvbmx5IHdoZW4gfG9wdGlvbnNfLmF1ZGlvX25ldHdvcmtfYWRhcHRvcnwKICAgICAvLyBl
cXVhbHMgdHJ1ZSBhbmQgfG9wdGlvbnNfLmF1ZGlvX25ldHdvcmtfYWRhcHRvcl9jb25maWd8IGhh
cyBhIHZhbHVlLgpAQCAtMzQzLDcgKzM0Myw3IEBAIGJvb2wgV2ViUnRjVm9pY2VFbmdpbmU6OkFw
cGx5T3B0aW9ucyhjb24KICAgLy8gd2hlcmUgdGhlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZC4K
ICAgYm9vbCB1c2VfZGVsYXlfYWdub3N0aWNfYWVjID0gZmFsc2U7CiAjaWYgIWRlZmluZWQoV0VC
UlRDX0lPUykKLSAgaWYgKG9wdGlvbnMuZGVsYXlfYWdub3N0aWNfYWVjKSB7CisgIGlmIChvcHRp
b25zLmRlbGF5X2Fnbm9zdGljX2FlYy5oYXNfdmFsdWUoKSkgewogICAgIHVzZV9kZWxheV9hZ25v
c3RpY19hZWMgPSAqb3B0aW9ucy5kZWxheV9hZ25vc3RpY19hZWM7CiAgICAgaWYgKHVzZV9kZWxh
eV9hZ25vc3RpY19hZWMpIHsKICAgICAgIG9wdGlvbnMuZWNob19jYW5jZWxsYXRpb24gPSB0cnVl
OwpAQCAtMzk1LDcgKzM5NSw3IEBAIGJvb2wgV2ViUnRjVm9pY2VFbmdpbmU6OkFwcGx5T3B0aW9u
cyhjb24KICAgfQogI2VuZGlmCiAKLSAgaWYgKG9wdGlvbnMuZWNob19jYW5jZWxsYXRpb24pIHsK
KyAgaWYgKG9wdGlvbnMuZWNob19jYW5jZWxsYXRpb24uaGFzX3ZhbHVlKCkpIHsKICAgICAvLyBD
aGVjayBpZiBwbGF0Zm9ybSBzdXBwb3J0cyBidWlsdC1pbiBFQy4gQ3VycmVudGx5IG9ubHkgc3Vw
cG9ydGVkIG9uCiAgICAgLy8gQW5kcm9pZCBhbmQgaW4gY29tYmluYXRpb24gd2l0aCBKYXZhIGJh
c2VkIGF1ZGlvIGxheWVyLgogICAgIC8vIFRPRE8oaGVucmlrYSk6IGludmVzdGlnYXRlIHBvc3Np
YmlsaXR5IHRvIHN1cHBvcnQgYnVpbHQtaW4gRUMgYWxzbwpAQCAtNDIwLDcgKzQyMCw3IEBAIGJv
b2wgV2ViUnRjVm9pY2VFbmdpbmU6OkFwcGx5T3B0aW9ucyhjb24KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlY19tb2RlKTsKICAgfQogCi0gIGlmIChvcHRpb25zLmF1dG9f
Z2Fpbl9jb250cm9sKSB7CisgIGlmIChvcHRpb25zLmF1dG9fZ2Fpbl9jb250cm9sLmhhc192YWx1
ZSgpKSB7CiAgICAgYm9vbCBidWlsdF9pbl9hZ2NfYXZhbGlhYmxlID0gYWRtKCktPkJ1aWx0SW5B
R0NJc0F2YWlsYWJsZSgpOwogICAgIGlmIChidWlsdF9pbl9hZ2NfYXZhbGlhYmxlKSB7CiAgICAg
ICBpZiAoYWRtKCktPkVuYWJsZUJ1aWx0SW5BR0MoKm9wdGlvbnMuYXV0b19nYWluX2NvbnRyb2wp
ID09IDAgJiYKQEAgLTQzNSw4ICs0MzUsOCBAQCBib29sIFdlYlJ0Y1ZvaWNlRW5naW5lOjpBcHBs
eU9wdGlvbnMoY29uCiAgICAgd2VicnRjOjphcG1faGVscGVyczo6U2V0QWdjU3RhdHVzKGFwbSgp
LCAqb3B0aW9ucy5hdXRvX2dhaW5fY29udHJvbCk7CiAgIH0KIAotICBpZiAob3B0aW9ucy50eF9h
Z2NfdGFyZ2V0X2Rib3YgfHwgb3B0aW9ucy50eF9hZ2NfZGlnaXRhbF9jb21wcmVzc2lvbl9nYWlu
IHx8Ci0gICAgICBvcHRpb25zLnR4X2FnY19saW1pdGVyKSB7CisgIGlmIChvcHRpb25zLnR4X2Fn
Y190YXJnZXRfZGJvdi5oYXNfdmFsdWUoKSB8fCBvcHRpb25zLnR4X2FnY19kaWdpdGFsX2NvbXBy
ZXNzaW9uX2dhaW4uaGFzX3ZhbHVlKCkgfHwKKyAgICAgIG9wdGlvbnMudHhfYWdjX2xpbWl0ZXIu
aGFzX3ZhbHVlKCkpIHsKICAgICAvLyBPdmVycmlkZSBkZWZhdWx0X2FnY19jb25maWdfLiBHZW5l
cmFsbHksIGFuIHVuc2V0IG9wdGlvbiBtZWFucyAibGVhdmUKICAgICAvLyB0aGUgVm9FIGJpdHMg
YWxvbmUiIGluIHRoaXMgZnVuY3Rpb24sIHNvIHdlIHdhbnQgd2hhdGV2ZXIgaXMgc2V0IHRvIGJl
CiAgICAgLy8gc3RvcmVkIGFzIHRoZSBuZXcgImRlZmF1bHQiLiBJZiB3ZSBkaWRuJ3QsIHRoZW4g
c2V0dGluZyBlLmcuCkBAIC00NTIsNyArNDUyLDcgQEAgYm9vbCBXZWJSdGNWb2ljZUVuZ2luZTo6
QXBwbHlPcHRpb25zKGNvbgogICAgIHdlYnJ0Yzo6YXBtX2hlbHBlcnM6OlNldEFnY0NvbmZpZyhh
cG0oKSwgZGVmYXVsdF9hZ2NfY29uZmlnXyk7CiAgIH0KIAotICBpZiAob3B0aW9ucy5ub2lzZV9z
dXBwcmVzc2lvbikgeworICBpZiAob3B0aW9ucy5ub2lzZV9zdXBwcmVzc2lvbi5oYXNfdmFsdWUo
KSkgewogICAgIGlmIChhZG0oKS0+QnVpbHRJbk5TSXNBdmFpbGFibGUoKSkgewogICAgICAgYm9v
bCBidWlsdGluX25zID0gKm9wdGlvbnMubm9pc2Vfc3VwcHJlc3Npb247CiAgICAgICBpZiAoYWRt
KCktPkVuYWJsZUJ1aWx0SW5OUyhidWlsdGluX25zKSA9PSAwICYmIGJ1aWx0aW5fbnMpIHsKQEAg
LTQ2Niw3ICs0NjYsNyBAQCBib29sIFdlYlJ0Y1ZvaWNlRW5naW5lOjpBcHBseU9wdGlvbnMoY29u
CiAgICAgd2VicnRjOjphcG1faGVscGVyczo6U2V0TnNTdGF0dXMoYXBtKCksICpvcHRpb25zLm5v
aXNlX3N1cHByZXNzaW9uKTsKICAgfQogCi0gIGlmIChvcHRpb25zLnN0ZXJlb19zd2FwcGluZykg
eworICBpZiAob3B0aW9ucy5zdGVyZW9fc3dhcHBpbmcuaGFzX3ZhbHVlKCkpIHsKICAgICBSVENf
TE9HKExTX0lORk8pIDw8ICJTdGVyZW8gc3dhcHBpbmcgZW5hYmxlZD8gIiA8PCAqb3B0aW9ucy5z
dGVyZW9fc3dhcHBpbmc7CiAgICAgYXVkaW9fc3RhdGUoKS0+U2V0U3RlcmVvQ2hhbm5lbFN3YXBw
aW5nKCpvcHRpb25zLnN0ZXJlb19zd2FwcGluZyk7CiAgIH0KQEAgLTQ3Nyw3ICs0NzcsNyBAQCBi
b29sIFdlYlJ0Y1ZvaWNlRW5naW5lOjpBcHBseU9wdGlvbnMoY29uCiAgICAgYXVkaW9faml0dGVy
X2J1ZmZlcl9tYXhfcGFja2V0c18gPQogICAgICAgICBzdGQ6Om1heCgyMCwgKm9wdGlvbnMuYXVk
aW9faml0dGVyX2J1ZmZlcl9tYXhfcGFja2V0cyk7CiAgIH0KLSAgaWYgKG9wdGlvbnMuYXVkaW9f
aml0dGVyX2J1ZmZlcl9mYXN0X2FjY2VsZXJhdGUpIHsKKyAgaWYgKG9wdGlvbnMuYXVkaW9faml0
dGVyX2J1ZmZlcl9mYXN0X2FjY2VsZXJhdGUuaGFzX3ZhbHVlKCkpIHsKICAgICBSVENfTE9HKExT
X0lORk8pIDw8ICJOZXRFcSBmYXN0IG1vZGU/ICIKICAgICAgICAgICAgICAgICAgICAgIDw8ICpv
cHRpb25zLmF1ZGlvX2ppdHRlcl9idWZmZXJfZmFzdF9hY2NlbGVyYXRlOwogICAgIGF1ZGlvX2pp
dHRlcl9idWZmZXJfZmFzdF9hY2NlbGVyYXRlXyA9CkBAIC00OTAsNyArNDkwLDcgQEAgYm9vbCBX
ZWJSdGNWb2ljZUVuZ2luZTo6QXBwbHlPcHRpb25zKGNvbgogICAgICAgICAqb3B0aW9ucy5hdWRp
b19qaXR0ZXJfYnVmZmVyX21pbl9kZWxheV9tczsKICAgfQogCi0gIGlmIChvcHRpb25zLnR5cGlu
Z19kZXRlY3Rpb24pIHsKKyAgaWYgKG9wdGlvbnMudHlwaW5nX2RldGVjdGlvbi5oYXNfdmFsdWUo
KSkgewogICAgIFJUQ19MT0coTFNfSU5GTykgPDwgIlR5cGluZyBkZXRlY3Rpb24gaXMgZW5hYmxl
ZD8gIgogICAgICAgICAgICAgICAgICAgICAgPDwgKm9wdGlvbnMudHlwaW5nX2RldGVjdGlvbjsK
ICAgICB3ZWJydGM6OmFwbV9oZWxwZXJzOjpTZXRUeXBpbmdEZXRlY3Rpb25TdGF0dXMoYXBtKCks
CkBAIC00OTksMjkgKzQ5OSwyOSBAQCBib29sIFdlYlJ0Y1ZvaWNlRW5naW5lOjpBcHBseU9wdGlv
bnMoY29uCiAKICAgd2VicnRjOjpDb25maWcgY29uZmlnOwogCi0gIGlmIChvcHRpb25zLmRlbGF5
X2Fnbm9zdGljX2FlYykKKyAgaWYgKG9wdGlvbnMuZGVsYXlfYWdub3N0aWNfYWVjLmhhc192YWx1
ZSgpKQogICAgIGRlbGF5X2Fnbm9zdGljX2FlY18gPSBvcHRpb25zLmRlbGF5X2Fnbm9zdGljX2Fl
YzsKLSAgaWYgKGRlbGF5X2Fnbm9zdGljX2FlY18pIHsKKyAgaWYgKGRlbGF5X2Fnbm9zdGljX2Fl
Y18uaGFzX3ZhbHVlKCkpIHsKICAgICBSVENfTE9HKExTX0lORk8pIDw8ICJEZWxheSBhZ25vc3Rp
YyBhZWMgaXMgZW5hYmxlZD8gIgogICAgICAgICAgICAgICAgICAgICAgPDwgKmRlbGF5X2Fnbm9z
dGljX2FlY187CiAgICAgY29uZmlnLlNldDx3ZWJydGM6OkRlbGF5QWdub3N0aWM+KAogICAgICAg
ICBuZXcgd2VicnRjOjpEZWxheUFnbm9zdGljKCpkZWxheV9hZ25vc3RpY19hZWNfKSk7CiAgIH0K
IAotICBpZiAob3B0aW9ucy5leHRlbmRlZF9maWx0ZXJfYWVjKSB7CisgIGlmIChvcHRpb25zLmV4
dGVuZGVkX2ZpbHRlcl9hZWMuaGFzX3ZhbHVlKCkpIHsKICAgICBleHRlbmRlZF9maWx0ZXJfYWVj
XyA9IG9wdGlvbnMuZXh0ZW5kZWRfZmlsdGVyX2FlYzsKICAgfQotICBpZiAoZXh0ZW5kZWRfZmls
dGVyX2FlY18pIHsKKyAgaWYgKGV4dGVuZGVkX2ZpbHRlcl9hZWNfLmhhc192YWx1ZSgpKSB7CiAg
ICAgUlRDX0xPRyhMU19JTkZPKSA8PCAiRXh0ZW5kZWQgZmlsdGVyIGFlYyBpcyBlbmFibGVkPyAi
CiAgICAgICAgICAgICAgICAgICAgICA8PCAqZXh0ZW5kZWRfZmlsdGVyX2FlY187CiAgICAgY29u
ZmlnLlNldDx3ZWJydGM6OkV4dGVuZGVkRmlsdGVyPigKICAgICAgICAgbmV3IHdlYnJ0Yzo6RXh0
ZW5kZWRGaWx0ZXIoKmV4dGVuZGVkX2ZpbHRlcl9hZWNfKSk7CiAgIH0KIAotICBpZiAob3B0aW9u
cy5leHBlcmltZW50YWxfbnMpIHsKKyAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudGFsX25zLmhhc192
YWx1ZSgpKSB7CiAgICAgZXhwZXJpbWVudGFsX25zXyA9IG9wdGlvbnMuZXhwZXJpbWVudGFsX25z
OwogICB9Ci0gIGlmIChleHBlcmltZW50YWxfbnNfKSB7CisgIGlmIChleHBlcmltZW50YWxfbnNf
Lmhhc192YWx1ZSgpKSB7CiAgICAgUlRDX0xPRyhMU19JTkZPKSA8PCAiRXhwZXJpbWVudGFsIG5z
IGlzIGVuYWJsZWQ/ICIgPDwgKmV4cGVyaW1lbnRhbF9uc187CiAgICAgY29uZmlnLlNldDx3ZWJy
dGM6OkV4cGVyaW1lbnRhbE5zPigKICAgICAgICAgbmV3IHdlYnJ0Yzo6RXhwZXJpbWVudGFsTnMo
KmV4cGVyaW1lbnRhbF9uc18pKTsKQEAgLTUyOSwxMSArNTI5LDExIEBAIGJvb2wgV2ViUnRjVm9p
Y2VFbmdpbmU6OkFwcGx5T3B0aW9ucyhjb24KIAogICB3ZWJydGM6OkF1ZGlvUHJvY2Vzc2luZzo6
Q29uZmlnIGFwbV9jb25maWcgPSBhcG0oKS0+R2V0Q29uZmlnKCk7CiAKLSAgaWYgKG9wdGlvbnMu
aGlnaHBhc3NfZmlsdGVyKSB7CisgIGlmIChvcHRpb25zLmhpZ2hwYXNzX2ZpbHRlci5oYXNfdmFs
dWUoKSkgewogICAgIGFwbV9jb25maWcuaGlnaF9wYXNzX2ZpbHRlci5lbmFibGVkID0gKm9wdGlv
bnMuaGlnaHBhc3NfZmlsdGVyOwogICB9CiAKLSAgaWYgKG9wdGlvbnMucmVzaWR1YWxfZWNob19k
ZXRlY3RvcikgeworICBpZiAob3B0aW9ucy5yZXNpZHVhbF9lY2hvX2RldGVjdG9yLmhhc192YWx1
ZSgpKSB7CiAgICAgYXBtX2NvbmZpZy5yZXNpZHVhbF9lY2hvX2RldGVjdG9yLmVuYWJsZWQgPSAq
b3B0aW9ucy5yZXNpZHVhbF9lY2hvX2RldGVjdG9yOwogICB9CiAKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fY29kaW5nL2F1ZGlv
X25ldHdvcmtfYWRhcHRvci9kZWJ1Z19kdW1wX3dyaXRlci5jYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2NvZGlu
Zy9hdWRpb19uZXR3b3JrX2FkYXB0b3IvZGVidWdfZHVtcF93cml0ZXIuY2MJKHJldmlzaW9uIDI0
MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fY29kaW5nL2F1ZGlvX25ldHdvcmtfYWRhcHRvci9kZWJ1Z19kdW1wX3dyaXRlci5j
Ywkod29ya2luZyBjb3B5KQpAQCAtMTM0LDEwICsxMzQsMTAgQEAgdm9pZCBEZWJ1Z0R1bXBXcml0
ZXJJbXBsOjpEdW1wRW5jb2RlclJ1bgogICAgICAgICAqY29uZmlnLnVwbGlua19wYWNrZXRfbG9z
c19mcmFjdGlvbik7CiAgIH0KIAotICBpZiAoY29uZmlnLmVuYWJsZV9mZWMpCisgIGlmIChjb25m
aWcuZW5hYmxlX2ZlYy5oYXNfdmFsdWUoKSkKICAgICBkdW1wX2NvbmZpZy0+c2V0X2VuYWJsZV9m
ZWMoKmNvbmZpZy5lbmFibGVfZmVjKTsKIAotICBpZiAoY29uZmlnLmVuYWJsZV9kdHgpCisgIGlm
IChjb25maWcuZW5hYmxlX2R0eC5oYXNfdmFsdWUoKSkKICAgICBkdW1wX2NvbmZpZy0+c2V0X2Vu
YWJsZV9kdHgoKmNvbmZpZy5lbmFibGVfZHR4KTsKIAogICBpZiAoY29uZmlnLm51bV9jaGFubmVs
cykKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fY29kaW5nL2F1ZGlvX25ldHdvcmtfYWRhcHRvci9kdHhfY29udHJvbGxlci5jYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2NvZGluZy9hdWRpb19uZXR3b3JrX2FkYXB0b3IvZHR4X2NvbnRyb2xsZXIu
Y2MJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fY29kaW5nL2F1ZGlvX25ldHdvcmtfYWRhcHRvci9kdHhf
Y29udHJvbGxlci5jYwkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCB2b2lkIER0eENv
bnRyb2xsZXI6OlVwZGF0ZU5ldHdvcmtNZXRyaWNzCiAKIHZvaWQgRHR4Q29udHJvbGxlcjo6TWFr
ZURlY2lzaW9uKEF1ZGlvRW5jb2RlclJ1bnRpbWVDb25maWcqIGNvbmZpZykgewogICAvLyBEZWNp
c2lvbiBvbiB8ZW5hYmxlX2R0eHwgc2hvdWxkIG5vdCBoYXZlIGJlZW4gbWFkZS4KLSAgUlRDX0RD
SEVDSyghY29uZmlnLT5lbmFibGVfZHR4KTsKKyAgUlRDX0RDSEVDSyghY29uZmlnLT5lbmFibGVf
ZHR4Lmhhc192YWx1ZSgpKTsKIAogICBpZiAodXBsaW5rX2JhbmR3aWR0aF9icHNfKSB7CiAgICAg
aWYgKGR0eF9lbmFibGVkXyAmJgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19jb2RpbmcvYXVkaW9fbmV0d29ya19hZGFwdG9yL2Zl
Y19jb250cm9sbGVyX3JwbHJfYmFzZWQuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19jb2RpbmcvYXVkaW9fbmV0
d29ya19hZGFwdG9yL2ZlY19jb250cm9sbGVyX3JwbHJfYmFzZWQuY2MJKHJldmlzaW9uIDI0MzU2
NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fY29kaW5nL2F1ZGlvX25ldHdvcmtfYWRhcHRvci9mZWNfY29udHJvbGxlcl9ycGxyX2Jh
c2VkLmNjCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgRmVjQ29udHJvbGxl
clJwbHJCYXNlZDo6VXBkYXRlTmV0d28KIH0KIAogdm9pZCBGZWNDb250cm9sbGVyUnBsckJhc2Vk
OjpNYWtlRGVjaXNpb24oQXVkaW9FbmNvZGVyUnVudGltZUNvbmZpZyogY29uZmlnKSB7Ci0gIFJU
Q19EQ0hFQ0soIWNvbmZpZy0+ZW5hYmxlX2ZlYyk7CisgIFJUQ19EQ0hFQ0soIWNvbmZpZy0+ZW5h
YmxlX2ZlYy5oYXNfdmFsdWUoKSk7CiAgIFJUQ19EQ0hFQ0soIWNvbmZpZy0+dXBsaW5rX3BhY2tl
dF9sb3NzX2ZyYWN0aW9uKTsKIAogICBmZWNfZW5hYmxlZF8gPSBmZWNfZW5hYmxlZF8gPyAhRmVj
RGlzYWJsaW5nRGVjaXNpb24oKSA6IEZlY0VuYWJsaW5nRGVjaXNpb24oKTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fY29kaW5n
L2NvZGVjcy9vcHVzL2F1ZGlvX2VuY29kZXJfb3B1cy5jYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2NvZGluZy9j
b2RlY3Mvb3B1cy9hdWRpb19lbmNvZGVyX29wdXMuY2MJKHJldmlzaW9uIDI0MzU2NikKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fY29k
aW5nL2NvZGVjcy9vcHVzL2F1ZGlvX2VuY29kZXJfb3B1cy5jYwkod29ya2luZyBjb3B5KQpAQCAt
ODY3LDExICs4NjcsMTEgQEAgdm9pZCBBdWRpb0VuY29kZXJPcHVzSW1wbDo6QXBwbHlBdWRpb05l
dAogICAgIFNldFRhcmdldEJpdHJhdGUoKmNvbmZpZy5iaXRyYXRlX2Jwcyk7CiAgIGlmIChjb25m
aWcuZnJhbWVfbGVuZ3RoX21zKQogICAgIFNldEZyYW1lTGVuZ3RoKCpjb25maWcuZnJhbWVfbGVu
Z3RoX21zKTsKLSAgaWYgKGNvbmZpZy5lbmFibGVfZmVjKQorICBpZiAoY29uZmlnLmVuYWJsZV9m
ZWMuaGFzX3ZhbHVlKCkpCiAgICAgU2V0RmVjKCpjb25maWcuZW5hYmxlX2ZlYyk7CiAgIGlmIChj
b25maWcudXBsaW5rX3BhY2tldF9sb3NzX2ZyYWN0aW9uKQogICAgIFNldFByb2plY3RlZFBhY2tl
dExvc3NSYXRlKCpjb25maWcudXBsaW5rX3BhY2tldF9sb3NzX2ZyYWN0aW9uKTsKLSAgaWYgKGNv
bmZpZy5lbmFibGVfZHR4KQorICBpZiAoY29uZmlnLmVuYWJsZV9kdHguaGFzX3ZhbHVlKCkpCiAg
ICAgU2V0RHR4KCpjb25maWcuZW5hYmxlX2R0eCk7CiAgIGlmIChjb25maWcubnVtX2NoYW5uZWxz
KQogICAgIFNldE51bUNoYW5uZWxzVG9FbmNvZGUoKmNvbmZpZy5udW1fY2hhbm5lbHMpOwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvanNlcHRyYW5z
cG9ydGNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9wYy9qc2VwdHJhbnNwb3J0Y29udHJvbGxlci5oCShyZXZpc2lvbiAy
NDM1NjYpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9q
c2VwdHJhbnNwb3J0Y29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcg
QEAgY2xhc3MgSnNlcFRyYW5zcG9ydENvbnRyb2xsZXIgOiBwdWJsaWMgcwogICAvLyBjb25zdC4g
Rml4IHRoaXMuCiAgIGJvb2wgR2V0U3RhdHMoY29uc3Qgc3RkOjpzdHJpbmcmIG1pZCwgY3JpY2tl
dDo6VHJhbnNwb3J0U3RhdHMqIHN0YXRzKTsKIAotICBib29sIGluaXRpYWxfb2ZmZXJlcigpIGNv
bnN0IHsgcmV0dXJuIGluaXRpYWxfb2ZmZXJlcl8gJiYgKmluaXRpYWxfb2ZmZXJlcl87IH0KKyAg
Ym9vbCBpbml0aWFsX29mZmVyZXIoKSBjb25zdCB7IHJldHVybiBpbml0aWFsX29mZmVyZXJfLmhh
c192YWx1ZSgpICYmICppbml0aWFsX29mZmVyZXJfOyB9CiAKICAgdm9pZCBTZXRBY3RpdmVSZXNl
dFNydHBQYXJhbXMoYm9vbCBhY3RpdmVfcmVzZXRfc3J0cF9wYXJhbXMpOwogCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9wZWVyY29ubmVjdGlvbi5j
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9wYy9wZWVyY29ubmVjdGlvbi5jYwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvcGVlcmNvbm5lY3Rpb24uY2MJKHdvcmtp
bmcgY29weSkKQEAgLTEwNDcsNyArMTA0Nyw3IEBAIGJvb2wgUGVlckNvbm5lY3Rpb246OkluaXRp
YWxpemUoCiAgICAgLy8gRW5hYmxlIERUTFMgYnkgZGVmYXVsdCBpZiB3ZSBoYXZlIGFuIGlkZW50
aXR5IHN0b3JlIG9yIGEgY2VydGlmaWNhdGUuCiAgICAgZHRsc19lbmFibGVkXyA9IChkZXBlbmRl
bmNpZXMuY2VydF9nZW5lcmF0b3IgfHwgY2VydGlmaWNhdGUpOwogICAgIC8vIHxjb25maWd1cmF0
aW9ufCBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgfGR0bHNfZW5hYmxlZF98IHZhbHVlLgotICAg
IGlmIChjb25maWd1cmF0aW9uLmVuYWJsZV9kdGxzX3NydHApIHsKKyAgICBpZiAoY29uZmlndXJh
dGlvbi5lbmFibGVfZHRsc19zcnRwLmhhc192YWx1ZSgpKSB7CiAgICAgICBkdGxzX2VuYWJsZWRf
ID0gKihjb25maWd1cmF0aW9uLmVuYWJsZV9kdGxzX3NydHApOwogICAgIH0KICAgfQpAQCAtMjA4
OSw3ICsyMDg5LDcgQEAgUlRDRXJyb3IgUGVlckNvbm5lY3Rpb246OkFwcGx5TG9jYWxEZXNjcgog
ICAvLyB8bG9jYWxfZGVzY3JpcHRpb24oKXwuCiAgIFJUQ19EQ0hFQ0sobG9jYWxfZGVzY3JpcHRp
b24oKSk7CiAKLSAgaWYgKCFpc19jYWxsZXJfKSB7CisgIGlmICghaXNfY2FsbGVyXy5oYXNfdmFs
dWUoKSkgewogICAgIGlmIChyZW1vdGVfZGVzY3JpcHRpb24oKSkgewogICAgICAgLy8gUmVtb3Rl
IGRlc2NyaXB0aW9uIHdhcyBhcHBsaWVkIGZpcnN0LCBzbyB0aGlzIFBDIGlzIHRoZSBjYWxsZWUu
CiAgICAgICBpc19jYWxsZXJfID0gZmFsc2U7CkBAIC01MTEwLDcgKzUxMTAsNyBAQCBib29sIFBl
ZXJDb25uZWN0aW9uOjpHZXRTY3RwU3NsUm9sZShydGM6CiAgIGFic2w6Om9wdGlvbmFsPHJ0Yzo6
U1NMUm9sZT4gZHRsc19yb2xlOwogICBpZiAoc2N0cF9taWRfKSB7CiAgICAgZHRsc19yb2xlID0g
dHJhbnNwb3J0X2NvbnRyb2xsZXJfLT5HZXREdGxzUm9sZSgqc2N0cF9taWRfKTsKLSAgfSBlbHNl
IGlmIChpc19jYWxsZXJfKSB7CisgIH0gZWxzZSBpZiAoaXNfY2FsbGVyXy5oYXNfdmFsdWUoKSkg
ewogICAgIGR0bHNfcm9sZSA9ICppc19jYWxsZXJfID8gcnRjOjpTU0xfU0VSVkVSIDogcnRjOjpT
U0xfQ0xJRU5UOwogICB9CiAgIGlmIChkdGxzX3JvbGUpIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL2V4cGVyaW1lbnRzL2ZpZWxkX3Ry
aWFsX3BhcnNlci5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9ydGNfYmFzZS9leHBlcmltZW50cy9maWVsZF90cmlhbF9wYXJzZXIuY2MJ
KHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3J0Y19iYXNlL2V4cGVyaW1lbnRzL2ZpZWxkX3RyaWFsX3BhcnNlci5jYwkod29ya2lu
ZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIGJvb2wgRmllbGRUcmlhbEZsYWc6OlBhcnNlKGFi
c2w6Om9wdGlvbmEKICAgLy8gT25seSBzZXQgdGhlIGZsYWcgaWYgdGhlcmUgaXMgbm8gYXJndW1l
bnQgcHJvdmlkZWQuCiAgIGlmIChzdHJfdmFsdWUpIHsKICAgICBhYnNsOjpvcHRpb25hbDxib29s
PiBvcHRfdmFsdWUgPSBQYXJzZVR5cGVkUGFyYW1ldGVyPGJvb2w+KCpzdHJfdmFsdWUpOwotICAg
IGlmICghb3B0X3ZhbHVlKQorICAgIGlmICghb3B0X3ZhbHVlLmhhc192YWx1ZSgpKQogICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHZhbHVlXyA9ICpvcHRfdmFsdWU7CiAgIH0gZWxzZSB7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy92aWRlby9xdWFsaXR5
X3RocmVzaG9sZC5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy92aWRlby9xdWFsaXR5X3RocmVzaG9sZC5jYwkocmV2aXNpb24gMjQzNTY2
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdmlkZW8vcXVh
bGl0eV90aHJlc2hvbGQuY2MJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBR
dWFsaXR5VGhyZXNob2xkOjpBZGRNZWFzdXJlbWVudChpbgogICBpZiAodW50aWxfZnVsbF8gPiAw
KQogICAgIC0tdW50aWxfZnVsbF87CiAKLSAgaWYgKGlzX2hpZ2hfKSB7CisgIGlmIChpc19oaWdo
Xy5oYXNfdmFsdWUoKSkgewogICAgIGlmICgqaXNfaGlnaF8pCiAgICAgICArK251bV9oaWdoX3N0
YXRlc187CiAgICAgKytudW1fY2VydGFpbl9zdGF0ZXNfOwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdmlkZW8vcmVjZWl2ZV9zdGF0aXN0aWNzX3Byb3h5
LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3ZpZGVvL3JlY2VpdmVfc3RhdGlzdGljc19wcm94eS5jYwkocmV2aXNpb24gMjQzNTY2KQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdmlkZW8vcmVjZWl2
ZV9zdGF0aXN0aWNzX3Byb3h5LmNjCSh3b3JraW5nIGNvcHkpCkBAIC01NTAsOCArNTUwLDggQEAg
dm9pZCBSZWNlaXZlU3RhdGlzdGljc1Byb3h5OjpRdWFsaXR5U2FtcAogICBsYXN0X3NhbXBsZV90
aW1lXyA9IG5vdzsKICAgcXBfc2FtcGxlXy5SZXNldCgpOwogCi0gIGlmIChmcHNfdGhyZXNob2xk
Xy5Jc0hpZ2goKSB8fCB2YXJpYW5jZV90aHJlc2hvbGRfLklzSGlnaCgpIHx8Ci0gICAgICBxcF90
aHJlc2hvbGRfLklzSGlnaCgpKSB7CisgIGlmIChmcHNfdGhyZXNob2xkXy5Jc0hpZ2goKS5oYXNf
dmFsdWUoKSB8fCB2YXJpYW5jZV90aHJlc2hvbGRfLklzSGlnaCgpLmhhc192YWx1ZSgpIHx8Cisg
ICAgICBxcF90aHJlc2hvbGRfLklzSGlnaCgpLmhhc192YWx1ZSgpKSB7CiAgICAgaWYgKGFueV9i
YWQpCiAgICAgICArK251bV9iYWRfc3RhdGVzXzsKICAgICArK251bV9jZXJ0YWluX3N0YXRlc187
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxOS0wMy0zMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIENvbnNpZGVyIHJlbW92aW5nIE9w
dGlvbmFsPGJvb2w+OjpvcGVyYXRvciBib29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOgorICAgICAgICAoV1RGOjpPcHRp
b25hbDo6dmFsdWVPciBjb25zdCk6CisgICAgICAgIChXVEY6Ok9wdGlvbmFsOjp2YWx1ZU9yKToK
KyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPCk6Cisg
ICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj4pOgorICAg
ICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAg
ICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoKKyAgICAgICAgKFdURjo6
UGVyc2lzdGVuY2U6OkNvZGVyPE9wdGlvbmFsPFQ+Pjo6ZGVjb2RlKToKKwogMjAxOS0wMy0yNyAg
UGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0IFRl
c3QganMvbWF0aC1jbHozMi5odG1sIGlzIGZhaWxpbmcKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL09w
dGlvbmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAkocmV2aXNp
b24gMjQzNTY2KQorKysgU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtNTA1LDcgKzUwNSw3IEBAIHB1YmxpYzoKIAogICAvLyAyMC41LjQuNSwgT2JzZXJ2ZXJzCiAK
LSAgZXhwbGljaXQgY29uc3RleHByIG9wZXJhdG9yIGJvb2woKSBjb25zdCBfX05PRVhDRVBUIHsg
cmV0dXJuIGluaXRpYWxpemVkKCk7IH0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgWCA9IFQsIHN0ZDo6
ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxib29sLCBYPjo6dmFsdWU+KiA9IG51bGxwdHI+IGV4
cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7IHJldHVy
biBpbml0aWFsaXplZCgpOyB9CiAgIGNvbnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3QgX19O
T0VYQ0VQVCB7IHJldHVybiBpbml0aWFsaXplZCgpOyB9CiAKICAgY29uc3RleHByIFQgY29uc3Qq
IG9wZXJhdG9yIC0+KCkgY29uc3QgewpAQCAtNTUzLDEzICs1NTMsMTMgQEAgcHVibGljOgogICB0
ZW1wbGF0ZSA8Y2xhc3MgVj4KICAgY29uc3RleHByIFQgdmFsdWVPcihWJiYgdikgY29uc3QmCiAg
IHsKLSAgICByZXR1cm4gKnRoaXMgPyAqKnRoaXMgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFp
bF86OmNvbnN0ZXhwcl9mb3J3YXJkPFY+KHYpKTsKKyAgICByZXR1cm4gdGhpcy0+aGFzVmFsdWUo
KSA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2Zvcndh
cmQ8Vj4odikpOwogICB9CiAKICAgdGVtcGxhdGUgPGNsYXNzIFY+CiAgIE9QVElPTkFMX01VVEFC
TEVfQ09OU1RFWFBSIFQgdmFsdWVPcihWJiYgdikgJiYKICAgewotICAgIHJldHVybiAqdGhpcyA/
IGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKGNvbnN0X2Nhc3Q8T3B0aW9uYWw8VD4mPigqdGhpcyku
Y29udGFpbmVkX3ZhbCgpKSA6IGRldGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHBy
X2ZvcndhcmQ8Vj4odikpOworICAgIHJldHVybiB0aGlzLT5oYXNWYWx1ZSgpID8gZGV0YWlsXzo6
Y29uc3RleHByX21vdmUoY29uc3RfY2FzdDxPcHRpb25hbDxUPiY+KCp0aGlzKS5jb250YWluZWRf
dmFsKCkpIDogZGV0YWlsXzo6Y29udmVydDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxW
Pih2KSk7CiAgIH0KIAogIyBlbHNlCkBAIC02NjgsNyArNjY4LDcgQEAgcHVibGljOgogICAgIHJl
dHVybiAqcmVmOwogICB9CiAKLSAgZXhwbGljaXQgY29uc3RleHByIG9wZXJhdG9yIGJvb2woKSBj
b25zdCBfX05PRVhDRVBUIHsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgWCA9IFQsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxib29sLCBYPjo6dmFsdWU+KiA9IG51bGxwdHI+
IGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7CiAg
ICAgcmV0dXJuIHJlZiAhPSBudWxscHRyOwogICB9CiAKQEAgLTY5Nyw3ICs2OTcsNyBAQCBjbGFz
cyBPcHRpb25hbDxUJiY+CiAvLyAyMC41LjgsIFJlbGF0aW9uYWwgb3BlcmF0b3JzCiB0ZW1wbGF0
ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRpb25hbDxUPiYg
eCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCiB7Ci0gIHJldHVybiBib29sKHgpICE9IGJvb2woeSkg
PyBmYWxzZSA6IGJvb2woeCkgPT0gZmFsc2UgPyB0cnVlIDogKnggPT0gKnk7CisgIHJldHVybiB4
Lmhhc1ZhbHVlKCkgIT0geS5oYXNWYWx1ZSgpID8gZmFsc2UgOiAheC5oYXNWYWx1ZSgpID8gdHJ1
ZSA6ICp4ID09ICp5OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCkBAIC03
MDcsNyArNzA3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdAog
CiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlv
bmFsPFQ+JiB4LCBjb25zdCBPcHRpb25hbDxUPiYgeSkKIHsKLSAgcmV0dXJuICgheSkgPyBmYWxz
ZSA6ICgheCkgPyB0cnVlIDogKnggPCAqeTsKKyAgcmV0dXJuICF5Lmhhc1ZhbHVlKCkgPyBmYWxz
ZSA6ICF4Lmhhc1ZhbHVlKCkgPyB0cnVlIDogKnggPCAqeTsKIH0KIAogdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3Qg
T3B0aW9uYWw8VD4mIHkpCkBAIC03MjksMjIgKzcyOSwyMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0CiAvLyAyMC41LjksIENvbXBhcmlzb24gd2l0aCBudWxsb3B0
CiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRp
b25hbDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCiB7Ci0gIHJldHVybiAoIXgpOworICBy
ZXR1cm4gIXguaGFzVmFsdWUoKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQ
VAogewotICByZXR1cm4gKCF4KTsKKyAgcmV0dXJuICF4Lmhhc1ZhbHVlKCk7CiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQ+
JiB4LCBudWxsb3B0X3QpIF9fTk9FWENFUFQKIHsKLSAgcmV0dXJuIGJvb2woeCk7CisgIHJldHVy
biB4Lmhhc1ZhbHVlKCk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvciE9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9FWENFUFQKIHsK
LSAgcmV0dXJuIGJvb2woeCk7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCk7CiB9CiAKIHRlbXBsYXRl
IDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VD4mLCBu
dWxsb3B0X3QpIF9fTk9FWENFUFQKQEAgLTc1NCwxMiArNzU0LDEyIEBAIHRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXQKIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPChudWxsb3B0X3QsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KSBfX05PRVhD
RVBUCiB7Ci0gIHJldHVybiBib29sKHgpOworICByZXR1cm4geC5oYXNWYWx1ZSgpOwogfQogCiB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcHRpb25h
bDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCiB7Ci0gIHJldHVybiAoIXgpOworICByZXR1
cm4gIXguaGFzVmFsdWUoKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPD0obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYpIF9fTk9FWENFUFQKQEAg
LTc2OSw3ICs3NjksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0
aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAogewotICByZXR1cm4gYm9vbCh4KTsK
KyAgcmV0dXJuIHguaGFzVmFsdWUoKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPihudWxsb3B0X3QsIGNvbnN0IE9wdGlvbmFsPFQ+JikgX19OT0VYQ0VQ
VApAQCAtNzg0LDcgKzc4NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXQKIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0obnVs
bG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAogewotICByZXR1cm4gKCF4
KTsKKyAgcmV0dXJuICF4Lmhhc1ZhbHVlKCk7CiB9CiAKIApAQCAtNzkyLDE4NSArNzkyLDE4NSBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0CiAvLyAyMC41LjEwLCBD
b21wYXJpc29uIHdpdGggVAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29s
KHgpID8gKnggPT0gdiA6IGZhbHNlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gKnggPT0gdiA6
IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkg
PyB2ID09ICp4IDogZmFsc2U7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyB2ID09ICp4IDogZmFs
c2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4
ICE9IHYgOiB0cnVlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gKnggIT0gdiA6IHRydWU7CiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQm
IHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKngg
OiB0cnVlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gdiAhPSAqeCA6IHRydWU7CiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8
VD4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPCB2IDogdHJ1ZTsK
KyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/ICp4IDwgdiA6IHRydWU7CiB9CiAKIHRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9u
YWw8VD4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDogdHJ1ZTsKKyAgcmV0dXJu
IHguaGFzVmFsdWUoKSA/IHYgPiAqeCA6IHRydWU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYp
CiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPiB2IDogZmFsc2U7CisgIHJldHVybiB4Lmhhc1Zh
bHVlKCkgPyAqeCA+IHYgOiBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKIHsKLSAg
cmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/
IHYgPCAqeCA6IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wg
b3BlcmF0b3I+PShjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKIHsKLSAgcmV0dXJu
IGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyAqeCA+
PSB2IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQogewotICByZXR1cm4gYm9v
bCh4KSA/IHYgPD0gKnggOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/IHYgPD0gKngg
OiBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PD0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgp
ID8gKnggPD0gdiA6IHRydWU7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyAqeCA8PSB2IDogdHJ1
ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29u
c3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA+
PSAqeCA6IHRydWU7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyB2ID49ICp4IDogdHJ1ZTsKIH0K
IAogCiAvLyBDb21wYXJpc29uIG9mIE9wdGlvbmFsPFQmPiB3aXRoIFQKIHRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29u
c3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2IDogZmFsc2U7CisgIHJldHVy
biB4Lmhhc1ZhbHVlKCkgPyAqeCA9PSB2IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQm
PiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7CisgIHJldHVybiB4
Lmhhc1ZhbHVlKCkgPyB2ID09ICp4IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYg
dikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCAhPSB2IDogdHJ1ZTsKKyAgcmV0dXJuIHguaGFz
VmFsdWUoKSA/ICp4ICE9IHYgOiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgpCiB7
Ci0gIHJldHVybiBib29sKHgpID8gdiAhPSAqeCA6IHRydWU7CisgIHJldHVybiB4Lmhhc1ZhbHVl
KCkgPyB2ICE9ICp4IDogdHJ1ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPChjb25zdCBPcHRpb25hbDxUJj4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJl
dHVybiBib29sKHgpID8gKnggPCB2IDogdHJ1ZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/ICp4
IDwgdiA6IHRydWU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj4oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQogewotICByZXR1cm4gYm9v
bCh4KSA/IHYgPiAqeCA6IHRydWU7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyB2ID4gKnggOiB0
cnVlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IE9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA+IHYgOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/ICp4ID4gdiA6IGZhbHNlOwog
fQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQm
IHYsIGNvbnN0IE9wdGlvbmFsPFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKngg
OiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/IHYgPCAqeCA6IGZhbHNlOwogfQogCiB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPcHRpb25h
bDxUJj4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPj0gdiA6IGZh
bHNlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gKnggPj0gdiA6IGZhbHNlOwogfQogCiB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25z
dCBPcHRpb25hbDxUJj4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA8PSAqeCA6IGZhbHNl
OworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gdiA8PSAqeCA6IGZhbHNlOwogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcHRpb25hbDxUJj4m
IHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPD0gdiA6IHRydWU7Cisg
IHJldHVybiB4Lmhhc1ZhbHVlKCkgPyAqeCA8PSB2IDogdHJ1ZTsKIH0KIAogdGVtcGxhdGUgPGNs
YXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9u
YWw8VCY+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOworICByZXR1
cm4geC5oYXNWYWx1ZSgpID8gdiA+PSAqeCA6IHRydWU7CiB9CiAKIC8vIENvbXBhcmlzb24gb2Yg
T3B0aW9uYWw8VCBjb25zdCY+IHdpdGggVAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQog
ewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzVmFs
dWUoKSA/ICp4ID09IHYgOiBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4
KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPT0gKnggOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFz
VmFsdWUoKSA/IHYgPT0gKnggOiBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBU
JiB2KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4ICE9IHYgOiB0cnVlOworICByZXR1cm4geC5o
YXNWYWx1ZSgpID8gKnggIT0gdiA6IHRydWU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQm
PiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ICE9ICp4IDogdHJ1ZTsKKyAgcmV0dXJuIHgu
aGFzVmFsdWUoKSA/IHYgIT0gKnggOiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3Qg
VCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOworICByZXR1cm4geC5o
YXNWYWx1ZSgpID8gKnggPCB2IDogdHJ1ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25zdCBUJj4m
IHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDogdHJ1ZTsKKyAgcmV0dXJuIHguaGFz
VmFsdWUoKSA/IHYgPiAqeCA6IHRydWU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2
KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOworICByZXR1cm4geC5oYXNW
YWx1ZSgpID8gKnggPiB2IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8Y29uc3QgVCY+JiB4
KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPCAqeCA6IGZhbHNlOworICByZXR1cm4geC5oYXNW
YWx1ZSgpID8gdiA8ICp4IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYg
dikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+PSB2IDogZmFsc2U7CisgIHJldHVybiB4Lmhh
c1ZhbHVlKCkgPyAqeCA+PSB2IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQm
PiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7CisgIHJldHVybiB4
Lmhhc1ZhbHVlKCkgPyB2IDw9ICp4IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29u
c3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8PSB2IDogdHJ1ZTsKKyAgcmV0dXJu
IHguaGFzVmFsdWUoKSA/ICp4IDw9IHYgOiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxjb25z
dCBUJj4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7CisgIHJldHVy
biB4Lmhhc1ZhbHVlKCkgPyB2ID49ICp4IDogdHJ1ZTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oCShyZXZpc2lvbiAyNDM1NjYp
CisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
ZGVyPE9wdGlvbgogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRW5nYWdlZCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzRW5nYWdlZCkg
eworICAgICAgICBpZiAoIWlzRW5nYWdlZC5oYXNWYWx1ZSgpKSB7CiAgICAgICAgICAgICBvcHRp
b25hbCA9IFdURjo6bnVsbG9wdDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMjUgQEAKKzIwMTktMDMtMzAgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBDb25zaWRl
ciByZW1vdmluZyBPcHRpb25hbDxib29sPjo6b3BlcmF0b3IgYm9vbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NDI4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0RPTUNhY2hl
RW5naW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q2FjaGVJZGVudGlm
aWVyT3BlcmF0aW9uUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0
Y2hSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT3B0aW9ucyk6CisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3RJbml0Lmg6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaFJlcXVlc3RJbml0OjpoYXNNZW1iZXJzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
ZXQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZURhdGFDaGFubmVs
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENEYXRh
Q2hhbm5lbEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JT
ZWxlY3Rpb25Dcml0ZXJpYTo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL1B1
YmxpY0tleUNyZWRlbnRpYWxEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xDb25zdGFudEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbjo6bWF0Y2hlcyBjb25zdCk6CisgICAgICAgICogU2NyaXB0cy9T
ZXR0aW5nc1RlbXBsYXRlcy9TZXR0aW5ncy5jcHAuZXJiOgorICAgICAgICAqIGFuaW1hdGlvbi9B
bmltYXRpb25UaW1lbGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGlu
ZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9J
RExUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6SURMVHlwZTo6aXNOdWxsVmFsdWUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1bHRzLmg6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50UnVsZUxpc3RSZXN1bHRzOjpSZXN1bHQ6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50UnVsZUxpc3RSZXN1bHRzOjpTdW1tYXJ5OjpkZWNvZGUpOgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlBRVM6OmltcG9ydEp3ayk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmltcG9ydEp3ayk6CisgICAgICAg
ICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlITUFDOjppbXBvcnRKd2spOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJT
QS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmltcG9ydEp3ayk6CisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldDo6Y2FuQWNjZXNzUnVsZXMgY29uc3QpOgorICAgICAgICAqIGNzcy9ET01NYXRyaXhSZWFk
T25seS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXhSZWFkT25seTo6dmFsaWRhdGVB
bmRGaXh1cCk6CisgICAgICAgICogY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6aGFzQ29tcGxleFNlbGVjdG9yc0ZvclN0eWxlQXR0
cmlidXRlIGNvbnN0KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50Ojp0b2dnbGVBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9i
c2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUp
OgorICAgICAgICAqIGVkaXRpbmcvRm9udEF0dHJpYnV0ZUNoYW5nZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENoYW5nZXM6OmNyZWF0ZVN0eWxlUHJvcGVydGllcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250QXR0cmlidXRlQ2hhbmdlczo6ZWRpdEFjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250QXR0cmlidXRlQ2hhbmdlczo6Y3JlYXRlRWRpdGluZ1N0eWxl
IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2hhbmdlczo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgICogZWRp
dGluZy9Gb250QXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dExpc3Q6OmRlY29k
ZSk6CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6
OmlzRGlyZWN0b3J5IGNvbnN0KToKKyAgICAgICAgKiBodG1sL0RPTVRva2VuTGlzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpET01Ub2tlbkxpc3Q6OnRvZ2dsZSk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzSW5zdGFuY2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50c0lu
c3RhbmNlZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0
eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmdldENvbXB1dGVkUHJvcGVydGllcyk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwb3B1bGF0ZUNvbnRl
eHRNZW51KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01XaW5kb3c6OmNhblNob3dNb2RhbERpYWxvZyk6CisgICAgICAgICogcGFnZS9QYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmlzTG93UG93ZXJNb2RlRW5hYmxlZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAg
ICAgICogcGFnZS9RdWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXVpcmtzOjpoYXNCcm9r
ZW5FbmNyeXB0ZWRNZWRpYUFQSVN1cHBvcnRRdWlyayBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpRdWlya3M6Omhhc1dlYlNRTFN1cHBvcnRRdWlyayBjb25zdCk6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cmVlblByb3BlcnRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRhdGE6OmRlY29kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZWdpb246OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmFzc2V0U3RhdHVz
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9NZWRpYUVuZ2luZUNv
bmZpZ3VyYXRpb25GYWN0b3J5Q29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWVk
aWFQbGF5ZXJEZWNvZGluZ0NvbmZpZ3VyYXRpb25Db2NvYSk6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdHVyZURl
dmljZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0
cmFpbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6Z2V0RXhhY3Qg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTWVkaWFFbmdpbmVDb25maWd1cmF0aW9u
RmFjdG9yeU1vY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuRGVjb2RlTWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuRW5jb2RlTWVkaWEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6RW5jb2Rl
ZEZpbGVEYXRhOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0
YXRlTm90aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0YXRlTm90aWZpZXI6
Om9uTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmNvbXB1dGVPdmVyQW5ub3RhdGlv
bkFkanVzdG1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Y29t
cHV0ZVVuZGVyQW5ub3RhdGlvbkFkanVzdG1lbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50TWFya2VkVGV4dEZvcmVncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0
aE1MU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MU3R5bGU6OnJlc29sdmVNYXRo
TUxTdHlsZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6Omhhc0ludmFsaWRDU1NBdHRyaWJ1
dGVUeXBlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZERlY29y
YXRlZFByb3BlcnR5Lmg6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcmlt
aXRpdmVQcm9wZXJ0eS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcmltaXRpdmVQ
cm9wZXJ0eTo6YW5pbVZhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBy
aW1pdGl2ZVByb3BlcnR5OjphbmltVmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
UHJpbWl0aXZlUHJvcGVydHk6OmN1cnJlbnRWYWx1ZSBjb25zdCk6CisgICAgICAgICogd29ya2Vy
cy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDbGllbnRRdWVyeU9wdGlvbnMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcnZpY2VXb3JrZXJDbGllbnRRdWVyeU9wdGlvbnM6OmRlY29kZSk6CisKIDIwMTkt
MDMtMjcgIEp1c3RpbiBGYW4gIDxqdXN0aW5fZmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2Vi
IEdQVV0gU3RhbmRhcmRpemUgV2ViIEdQVSBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBj
cmVhdGlvbiBsb2dpYwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNo
ZUVuZ2luZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9N
Q2FjaGVFbmdpbmUuaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jYWNoZS9ET01DYWNoZUVuZ2luZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcg
QEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gaW5saW5lIE9wdGlvbmFsPAogCiAgICAgT3B0aW9u
YWw8Ym9vbD4gaGFkU3RvcmFnZUVycm9yOwogICAgIGRlY29kZXIgPj4gaGFkU3RvcmFnZUVycm9y
OwotICAgIGlmICghaGFkU3RvcmFnZUVycm9yKQorICAgIGlmICghaGFkU3RvcmFnZUVycm9yLmhh
c1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHt7IFdU
Rk1vdmUoKmlkZW50aWZpZXIpLCBXVEZNb3ZlKCpoYWRTdG9yYWdlRXJyb3IpIH19OwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAkocmV2
aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVl
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIE9wdGlvbmFs
PEV4Y2VwdGlvbj4gYnVpbGRPcHRpb25zKAogICAgIGlmICghaW5pdC5pbnRlZ3JpdHkuaXNOdWxs
KCkpCiAgICAgICAgIG9wdGlvbnMuaW50ZWdyaXR5ID0gaW5pdC5pbnRlZ3JpdHk7CiAKLSAgICBp
ZiAoaW5pdC5rZWVwYWxpdmUgJiYgaW5pdC5rZWVwYWxpdmUudmFsdWUoKSkKKyAgICBpZiAoaW5p
dC5rZWVwYWxpdmUuaGFzVmFsdWUoKSAmJiBpbml0LmtlZXBhbGl2ZS52YWx1ZSgpKQogICAgICAg
ICBvcHRpb25zLmtlZXBBbGl2ZSA9IHRydWU7CiAKICAgICBpZiAoIWluaXQubWV0aG9kLmlzTnVs
bCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdElu
aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVx
dWVzdEluaXQuaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaFJlcXVlc3RJbml0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
c3RydWN0IEZldGNoUmVxdWVzdEluaXQgewogICAgIEpTQzo6SlNWYWx1ZSBzaWduYWw7CiAgICAg
SlNDOjpKU1ZhbHVlIHdpbmRvdzsKIAotICAgIGJvb2wgaGFzTWVtYmVycygpIGNvbnN0IHsgcmV0
dXJuICFtZXRob2QuaXNFbXB0eSgpIHx8IGhlYWRlcnMgfHwgYm9keSB8fCAhcmVmZXJyZXIuaXNF
bXB0eSgpIHx8IHJlZmVycmVyUG9saWN5IHx8IG1vZGUgfHwgY3JlZGVudGlhbHMgfHwgY2FjaGUg
fHwgcmVkaXJlY3QgfHwgIWludGVncml0eS5pc0VtcHR5KCkgfHwga2VlcGFsaXZlIHx8ICF3aW5k
b3cuaXNVbmRlZmluZWQoKSB8fCAhc2lnbmFsLmlzVW5kZWZpbmVkKCk7IH0KKyAgICBib29sIGhh
c01lbWJlcnMoKSBjb25zdCB7IHJldHVybiAhbWV0aG9kLmlzRW1wdHkoKSB8fCBoZWFkZXJzIHx8
IGJvZHkgfHwgIXJlZmVycmVyLmlzRW1wdHkoKSB8fCByZWZlcnJlclBvbGljeSB8fCBtb2RlIHx8
IGNyZWRlbnRpYWxzIHx8IGNhY2hlIHx8IHJlZGlyZWN0IHx8ICFpbnRlZ3JpdHkuaXNFbXB0eSgp
IHx8IGtlZXBhbGl2ZS5oYXNWYWx1ZSgpIHx8ICF3aW5kb3cuaXNVbmRlZmluZWQoKSB8fCAhc2ln
bmFsLmlzVW5kZWZpbmVkKCk7IH0KIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5j
cHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIs
OSBAQCBzdGF0aWMgdm9pZCBzZXQoTWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNCiAgICAgICAgICAg
ICAgICAgY29uc3RyYWludC5zZXRFeGFjdChib29sZWFuKTsKICAgICAgICAgfSwKICAgICAgICAg
WyZdIChjb25zdCBDb25zdHJhaW5Cb29sZWFuUGFyYW1ldGVycyYgcGFyYW1ldGVycykgewotICAg
ICAgICAgICAgaWYgKHBhcmFtZXRlcnMuZXhhY3QpCisgICAgICAgICAgICBpZiAocGFyYW1ldGVy
cy5leGFjdC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuc2V0RXhhY3Qo
cGFyYW1ldGVycy5leGFjdC52YWx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmlk
ZWFsKQorICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuaWRlYWwuaGFzVmFsdWUoKSkKICAgICAg
ICAgICAgICAgICBjb25zdHJhaW50LnNldElkZWFsKHBhcmFtZXRlcnMuaWRlYWwudmFsdWUoKSk7
CiAgICAgICAgIH0KICAgICApOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHN0YXRpYyB2b2lkIHNldChN
ZWRpYVRyYWNrQ29uc3RyYWludFNldE0KICAgICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAg
ICAgWyZdIChjb25zdCBDb25zdHJhaW5ET01TdHJpbmdQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSB7
Ci0gICAgICAgICAgICBpZiAocGFyYW1ldGVycy5leGFjdCkgeworICAgICAgICAgICAgaWYgKHBh
cmFtZXRlcnMuZXhhY3QuaGFzVmFsdWUoKSkgewogICAgICAgICAgICAgICAgIFdURjo6c3dpdGNo
T24ocGFyYW1ldGVycy5leGFjdC52YWx1ZSgpLAogICAgICAgICAgICAgICAgICAgICBbJl0gKGNv
bnN0IFN0cmluZyYgc3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50
LmFwcGVuZEV4YWN0KHN0cmluZyk7CkBAIC0xMzIsNyArMTMyLDcgQEAgc3RhdGljIHZvaWQgc2V0
KE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmlk
ZWFsKSB7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5pZGVhbC5oYXNWYWx1ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgV1RGOjpzd2l0Y2hPbihwYXJhbWV0ZXJzLmlkZWFsLnZhbHVlKCksCiAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuYXBwZW5kSWRlYWwoc3RyaW5nKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4
LDcgKzM5OCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSVENEYXRhQ2hhbm5lbD4+IFJUQ1BlZXIKICAg
ICBpZiAoaXNDbG9zZWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAKLSAgICBpZiAob3B0aW9ucy5uZWdvdGlhdGVkICYmICFvcHRpb25zLm5lZ290
aWF0ZWQudmFsdWUoKSAmJiAobGFiZWwubGVuZ3RoKCkgPiA2NTUzNSB8fCBvcHRpb25zLnByb3Rv
Y29sLmxlbmd0aCgpID4gNjU1MzUpKQorICAgIGlmIChvcHRpb25zLm5lZ290aWF0ZWQuaGFzVmFs
dWUoKSAmJiAhb3B0aW9ucy5uZWdvdGlhdGVkLnZhbHVlKCkgJiYgKGxhYmVsLmxlbmd0aCgpID4g
NjU1MzUgfHwgb3B0aW9ucy5wcm90b2NvbC5sZW5ndGgoKSA+IDY1NTM1KSkKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCiAgICAgaWYgKG9wdGlvbnMubWF4UGFja2V0
TGlmZVRpbWUgJiYgb3B0aW9ucy5tYXhSZXRyYW5zbWl0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9s
aWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcAkocmV2aXNpb24gMjQzNTY2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2Vi
UlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHdlYnJ0Yzo6RGF0YUNoYW5uZWxJbml0IExpYldlYlJU
Q0RhdGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJUQ0RhdGFDaGFubmVsSW5pdChjb25zdCBSVENEYXRh
Q2hhbm5lbEluaXQmIG9wdGlvbnMpCiB7CiAgICAgd2VicnRjOjpEYXRhQ2hhbm5lbEluaXQgaW5p
dDsKLSAgICBpZiAob3B0aW9ucy5vcmRlcmVkKQorICAgIGlmIChvcHRpb25zLm9yZGVyZWQuaGFz
VmFsdWUoKSkKICAgICAgICAgaW5pdC5vcmRlcmVkID0gKm9wdGlvbnMub3JkZXJlZDsKICAgICBp
ZiAob3B0aW9ucy5tYXhQYWNrZXRMaWZlVGltZSkKICAgICAgICAgaW5pdC5tYXhSZXRyYW5zbWl0
VGltZSA9ICpvcHRpb25zLm1heFBhY2tldExpZmVUaW1lOwogICAgIGlmIChvcHRpb25zLm1heFJl
dHJhbnNtaXRzKQogICAgICAgICBpbml0Lm1heFJldHJhbnNtaXRzID0gKm9wdGlvbnMubWF4UmV0
cmFuc21pdHM7CiAgICAgaW5pdC5wcm90b2NvbCA9IG9wdGlvbnMucHJvdG9jb2wudXRmOCgpLmRh
dGEoKTsKLSAgICBpZiAob3B0aW9ucy5uZWdvdGlhdGVkKQorICAgIGlmIChvcHRpb25zLm5lZ290
aWF0ZWQuaGFzVmFsdWUoKSkKICAgICAgICAgaW5pdC5uZWdvdGlhdGVkID0gKm9wdGlvbnMubmVn
b3RpYXRlZDsKICAgICBpZiAob3B0aW9ucy5pZCkKICAgICAgICAgaW5pdC5pZCA9ICpvcHRpb25z
LmlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlz
aW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2
LDcgQEAgT3B0aW9uYWw8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aQogCiAgICAgT3B0
aW9uYWw8Ym9vbD4gcmVxdWlyZVJlc2lkZW50S2V5OwogICAgIGRlY29kZXIgPj4gcmVxdWlyZVJl
c2lkZW50S2V5OwotICAgIGlmICghcmVxdWlyZVJlc2lkZW50S2V5KQorICAgIGlmICghcmVxdWly
ZVJlc2lkZW50S2V5Lmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgcmVzdWx0LnJlcXVpcmVSZXNpZGVudEtleSA9ICpyZXF1aXJlUmVzaWRlbnRLZXk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1Ymxp
Y0tleUNyZWRlbnRpYWxEYXRhLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDcgKzEwMyw3IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxEYXRhPiBQ
dWJsaWMKIAogICAgIE9wdGlvbmFsPGJvb2w+IGlzRW1wdHk7CiAgICAgZGVjb2RlciA+PiBpc0Vt
cHR5OwotICAgIGlmICghaXNFbXB0eSkKKyAgICBpZiAoIWlzRW1wdHkuaGFzVmFsdWUoKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoaXNFbXB0eS52YWx1ZSgpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTE5LDcgKzExOSw3IEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxEYXRhPiBQdWJsaWMKIAogICAgIE9wdGlvbmFsPGJvb2w+IGlzQXV0aGVudGlj
YXRvckF0dGVzdGF0aW9uUmVzcG9uc2U7CiAgICAgZGVjb2RlciA+PiBpc0F1dGhlbnRpY2F0b3JB
dHRlc3RhdGlvblJlc3BvbnNlOwotICAgIGlmICghaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25S
ZXNwb25zZSkKKyAgICBpZiAoIWlzQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaGFz
VmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICByZXN1bHQuaXNBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSA9IGlzQXV0aGVudGljYXRvckF0dGVzdGF0aW9u
UmVzcG9uc2UudmFsdWUoKTsKIApAQCAtMTYyLDcgKzE2Miw3IEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxEYXRhPiBQdWJsaWMKIAogICAgIE9wdGlvbmFsPGJvb2w+IGhhc1VzZXJIYW5k
bGU7CiAgICAgZGVjb2RlciA+PiBoYXNVc2VySGFuZGxlOwotICAgIGlmICghaGFzVXNlckhhbmRs
ZSkKKyAgICBpZiAoIWhhc1VzZXJIYW5kbGUuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICBpZiAoISpoYXNVc2VySGFuZGxlKQogICAgICAgICByZXR1cm4gcmVz
dWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
Q29uc3RhbnRFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgJKHJldmlzaW9uIDI0
MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENv
bnN0YW50RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICB9KSk7CiAKLSAg
ICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNWYWx1ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuICpyZXN1bHQ7CiAKICAgICAgICAgb3RoZXIudmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CkBAIC0xNTgs
NyArMTU4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAg
IH0pKTsKIAotICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5o
YXNWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuICpyZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9TY3JpcHRzL1NldHRpbmdzVGVtcGxhdGVzL1NldHRpbmdzLmNwcC5lcmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU2NyaXB0cy9TZXR0aW5nc1RlbXBsYXRlcy9TZXR0
aW5ncy5jcHAuZXJiCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9TY3JpcHRz
L1NldHRpbmdzVGVtcGxhdGVzL1NldHRpbmdzLmNwcC5lcmIJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDcgKzc1LDcgQEAgU2V0dGluZ3M6On5TZXR0aW5ncygpCiA8JT0gQHNldHRpbmcucGFyYW1ldGVy
VHlwZSAlPiBTZXR0aW5nczo6PCU9IEBzZXR0aW5nLmdldHRlckZ1bmN0aW9uTmFtZSAlPigpIGNv
bnN0CiB7CiA8JS0gaWYgQHNldHRpbmcuaGFzSW5zcGVjdG9yT3ZlcnJpZGU/IC0lPgotICAgIGlm
IChtXzwlPSBAc2V0dGluZy5uYW1lICU+SW5zcGVjdG9yT3ZlcnJpZGUpCisgICAgaWYgKG1fPCU9
IEBzZXR0aW5nLm5hbWUgJT5JbnNwZWN0b3JPdmVycmlkZS5oYXNWYWx1ZSgpKQogICAgICAgICBy
ZXR1cm4gbV88JT0gQHNldHRpbmcubmFtZSAlPkluc3BlY3Rvck92ZXJyaWRlLnZhbHVlKCk7CiA8
JS0gZW5kIC0lPgogICAgIHJldHVybiBtXzwlPSBAc2V0dGluZy5uYW1lICU+OwpAQCAtOTksNyAr
OTksNyBAQCB2b2lkIFNldHRpbmdzOjo8JT0gQHNldHRpbmcuc2V0dGVyRnVuY3RpCiA8JT0gQHNl
dHRpbmcucGFyYW1ldGVyVHlwZSAlPiBTZXR0aW5nczo6PCU9IEBzZXR0aW5nLmdldHRlckZ1bmN0
aW9uTmFtZSAlPigpIGNvbnN0CiB7CiA8JS0gaWYgQHNldHRpbmcuaGFzSW5zcGVjdG9yT3ZlcnJp
ZGU/IC0lPgotICAgIGlmIChtXzwlPSBAc2V0dGluZy5uYW1lICU+SW5zcGVjdG9yT3ZlcnJpZGUp
CisgICAgaWYgKG1fPCU9IEBzZXR0aW5nLm5hbWUgJT5JbnNwZWN0b3JPdmVycmlkZS5oYXNWYWx1
ZSgpKQogICAgICAgICByZXR1cm4gbV88JT0gQHNldHRpbmcubmFtZSAlPkluc3BlY3Rvck92ZXJy
aWRlLnZhbHVlKCk7CiA8JS0gZW5kIC0lPgogICAgIHJldHVybiBtXzwlPSBAc2V0dGluZy5uYW1l
ICU+OwpJbmRleDogU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxp
bmUuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5p
bWF0aW9uVGltZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsNyArMzY2LDcgQEAgdm9p
ZCBBbmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdAogICAgIGZvciAoaW50IHByb3Bl
cnR5SW5kZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgbnVtYmVyT2ZQcm9wZXJ0aWVzOyArK3Byb3Bl
cnR5SW5kZXgpIHsKICAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNTaG9ydGhhbmQ7CiAgICAgICAg
IGF1dG8gcHJvcGVydHkgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0UHJvcGVydHlBdEluZGV4
KHByb3BlcnR5SW5kZXgsIGlzU2hvcnRoYW5kKTsKLSAgICAgICAgaWYgKGlzU2hvcnRoYW5kICYm
ICppc1Nob3J0aGFuZCkKKyAgICAgICAgaWYgKGlzU2hvcnRoYW5kLmhhc1ZhbHVlKCkgJiYgKmlz
U2hvcnRoYW5kKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgY29uc3QgQW5pbWF0
aW9uKiBtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24gPSBudWxscHRyOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvSURMVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9JRExUeXBlcy5oCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9JRExUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0cnVj
dCBJRExUeXBlIHsKIAogICAgIHVzaW5nIE51bGxhYmxlVHlwZSA9IE9wdGlvbmFsPEltcGxlbWVu
dGF0aW9uVHlwZT47CiAgICAgc3RhdGljIE51bGxhYmxlVHlwZSBudWxsVmFsdWUoKSB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KLSAgICBzdGF0aWMgYm9vbCBpc051bGxWYWx1ZShjb25zdCBOdWxs
YWJsZVR5cGUmIHZhbHVlKSB7IHJldHVybiAhdmFsdWU7IH0KKyAgICBzdGF0aWMgYm9vbCBpc051
bGxWYWx1ZShjb25zdCBOdWxsYWJsZVR5cGUmIHZhbHVlKSB7IHJldHVybiAhdmFsdWUuaGFzVmFs
dWUoKTsgfQogICAgIHN0YXRpYyBJbXBsZW1lbnRhdGlvblR5cGUgZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKGNvbnN0IE51bGxhYmxlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLnZhbHVlKCk7
IH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIz
Nyw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOwogICAgIE9wdGlvbmFsPGJvb2w+IGNhY2hlZElzQ3Jvc3NPcmlnaW5B
Y2Nlc3M7CiAgICAgYXV0byBpc0Nyb3NzT3JpZ2luQWNjZXNzID0gWyZdIHsKLSAgICAgICAgaWYg
KCFjYWNoZWRJc0Nyb3NzT3JpZ2luQWNjZXNzKQorICAgICAgICBpZiAoIWNhY2hlZElzQ3Jvc3NP
cmlnaW5BY2Nlc3MuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIGNhY2hlZElzQ3Jvc3NPcmlnaW5B
Y2Nlc3MgPSAhQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCpz
dGF0ZSwgd2luZG93LCBlcnJvck1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gKmNhY2hlZElzQ3Jv
c3NPcmlnaW5BY2Nlc3M7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRSdWxlTGlzdFJlc3VsdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1bHRzLmgJKHJldmlzaW9u
IDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRSdWxl
TGlzdFJlc3VsdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE3ICsxMDcsMTcgQEAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gYXV0byBDb250ZW50UnVsZQogewogICAgIE9wdGlvbmFsPGJvb2w+
IGJsb2NrZWRMb2FkOwogICAgIGRlY29kZXIgPj4gYmxvY2tlZExvYWQ7Ci0gICAgaWYgKCFibG9j
a2VkTG9hZCkKKyAgICBpZiAoIWJsb2NrZWRMb2FkLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgT3B0aW9uYWw8Ym9vbD4gbWFkZUhUVFBTOwogICAg
IGRlY29kZXIgPj4gbWFkZUhUVFBTOwotICAgIGlmICghbWFkZUhUVFBTKQorICAgIGlmICghbWFk
ZUhUVFBTLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAg
ICAgT3B0aW9uYWw8Ym9vbD4gYmxvY2tlZENvb2tpZXM7CiAgICAgZGVjb2RlciA+PiBibG9ja2Vk
Q29va2llczsKLSAgICBpZiAoIWJsb2NrZWRDb29raWVzKQorICAgIGlmICghYmxvY2tlZENvb2tp
ZXMuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBP
cHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gbm90aWZpY2F0aW9uczsKQEAgLTE0NSwyMiArMTQ1LDIy
IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IGF1dG8gQ29udGVudFJ1bGUKIHsKICAgICBPcHRp
b25hbDxib29sPiBibG9ja2VkTG9hZDsKICAgICBkZWNvZGVyID4+IGJsb2NrZWRMb2FkOwotICAg
IGlmICghYmxvY2tlZExvYWQpCisgICAgaWYgKCFibG9ja2VkTG9hZC5oYXNWYWx1ZSgpKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIE9wdGlvbmFsPGJvb2w+IG1hZGVI
VFRQUzsKICAgICBkZWNvZGVyID4+IG1hZGVIVFRQUzsKLSAgICBpZiAoIW1hZGVIVFRQUykKKyAg
ICBpZiAoIW1hZGVIVFRQUy5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIAogICAgIE9wdGlvbmFsPGJvb2w+IGJsb2NrZWRDb29raWVzOwogICAgIGRlY29kZXIg
Pj4gYmxvY2tlZENvb2tpZXM7Ci0gICAgaWYgKCFibG9ja2VkQ29va2llcykKKyAgICBpZiAoIWJs
b2NrZWRDb29raWVzLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgCiAgICAgT3B0aW9uYWw8Ym9vbD4gaGFzTm90aWZpY2F0aW9uczsKICAgICBkZWNvZGVyID4+
IGhhc05vdGlmaWNhdGlvbnM7Ci0gICAgaWYgKCFoYXNOb3RpZmljYXRpb25zKQorICAgIGlmICgh
aGFzTm90aWZpY2F0aW9ucy5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIAogICAgIHJldHVybiB7ewpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlBRVMuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3
IEBAIFJlZlB0cjxDcnlwdG9LZXlBRVM+IENyeXB0b0tleUFFUzo6aW1wb3IKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEua2V5X29wcyAmJiAoKGtleURhdGEudXNhZ2Vz
ICYgdXNhZ2VzKSAhPSB1c2FnZXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAo
a2V5RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCisgICAg
aWYgKGtleURhdGEuZXh0Lmhhc1ZhbHVlKCkgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0
cmFjdGFibGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBXVEZNb3ZlKG9jdGV0U2VxdWVuY2UpLCBleHRy
YWN0YWJsZSwgdXNhZ2VzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9Dcnlw
dG9LZXlFQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5RUMuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlFQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgUmVm
UHRyPENyeXB0b0tleUVDPiBDcnlwdG9LZXlFQzo6aW1wb3J0SgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBpZiAoa2V5RGF0YS5rZXlfb3BzICYmICgoa2V5RGF0YS51c2FnZXMgJiB1c2Fn
ZXMpICE9IHVzYWdlcykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChrZXlEYXRh
LmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKKyAgICBpZiAoa2V5
RGF0YS5leHQuaGFzVmFsdWUoKSAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJs
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoa2V5RGF0YS5jcnYuaXNOdWxs
KCkgfHwgY3VydmUgIT0ga2V5RGF0YS5jcnYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlITUFDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw3ICsxMTIsNyBAQCBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gQ3J5cHRvS2V5SE1BQzo6aW1wCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChrZXlEYXRhLmtleV9vcHMgJiYgKChrZXlE
YXRhLnVzYWdlcyAmIHVzYWdlcykgIT0gdXNhZ2VzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKGtleURhdGEuZXh0ICYmICFrZXlEYXRhLmV4dC52YWx1ZSgpICYmIGV4dHJhY3Rh
YmxlKQorICAgIGlmIChrZXlEYXRhLmV4dC5oYXNWYWx1ZSgpICYmICFrZXlEYXRhLmV4dC52YWx1
ZSgpICYmIGV4dHJhY3RhYmxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVy
biBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcobGVuZ3RoQml0cywgaGFzaCwgV1RGTW92ZShvY3Rl
dFNlcXVlbmNlKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBvcgog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rZXlfb3BzICYmICgoa2V5
RGF0YS51c2FnZXMgJiB1c2FnZXMpICE9IHVzYWdlcykpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGlmIChrZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0
YWJsZSkKKyAgICBpZiAoa2V5RGF0YS5leHQuaGFzVmFsdWUoKSAmJiAha2V5RGF0YS5leHQudmFs
dWUoKSAmJiBleHRyYWN0YWJsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAo
a2V5RGF0YS5uLmlzTnVsbCgpIHx8IGtleURhdGEuZS5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw3
IEBAIENTU1J1bGUqIENTU1N0eWxlU2hlZXQ6Oml0ZW0odW5zaWduZWQgaW4KIAogYm9vbCBDU1NT
dHlsZVNoZWV0OjpjYW5BY2Nlc3NSdWxlcygpIGNvbnN0CiB7Ci0gICAgaWYgKG1faXNPcmlnaW5D
bGVhbikKKyAgICBpZiAobV9pc09yaWdpbkNsZWFuLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVy
biBtX2lzT3JpZ2luQ2xlYW4udmFsdWUoKTsKIAogICAgIFVSTCBiYXNlVVJMID0gbV9jb250ZW50
cy0+YmFzZVVSTCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVhZE9ubHku
Y3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVh
ZE9ubHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gRE9NTWF0cml4UmVhZE9ubHk6OnZhbAogICAgIGlmICh2YWxpZGF0ZTJELmhhc0V4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gdmFsaWRhdGUyRC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAK
LSAgICBpZiAoaW5pdC5pczJEICYmIGluaXQuaXMyRC52YWx1ZSgpKSB7CisgICAgaWYgKGluaXQu
aXMyRC5oYXNWYWx1ZSgpICYmIGluaXQuaXMyRC52YWx1ZSgpKSB7CiAgICAgICAgIGlmIChpbml0
Lm0xMykKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsICJtMTMgc2hv
dWxkIGJlIDAgZm9yIGEgMkQgbWF0cml4Il9zIH07CiAgICAgICAgIGlmIChpbml0Lm0xNCkKQEAg
LTE2NCw3ICsxNjQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01NYXRyaXhSZWFkT25seTo6dmFs
CiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAibTQ0IHNob3VsZCBi
ZSAxIGZvciBhIDJEIG1hdHJpeCJfcyB9OwogICAgIH0KIAotICAgIGlmICghaW5pdC5pczJEKSB7
CisgICAgaWYgKCFpbml0LmlzMkQuaGFzVmFsdWUoKSkgewogICAgICAgICBpZiAoaW5pdC5tMTMg
fHwgaW5pdC5tMTQgfHwgaW5pdC5tMjMgfHwgaW5pdC5tMjQgfHwgaW5pdC5tMzEgfHwgaW5pdC5t
MzIgfHwgaW5pdC5tMzQgfHwgaW5pdC5tNDMgfHwgaW5pdC5tMzMgIT0gMSB8fCBpbml0Lm00NCAh
PSAxKQogICAgICAgICAgICAgaW5pdC5pczJEID0gZmFsc2U7CiAgICAgICAgIGVsc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAJKHJldmlzaW9uIDI0MzU2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI0LDcgKzIyNCw3IEBAIGJvb2wgRG9jdW1lbnRSdWxlU2V0czo6aGFzQ29tcGxleFNl
bGVjdG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CiAKLSAgICBpZiAoIW1fY2FjaGVk
SGFzQ29tcGxleFNlbGVjdG9yc0ZvclN0eWxlQXR0cmlidXRlKQorICAgIGlmICghbV9jYWNoZWRI
YXNDb21wbGV4U2VsZWN0b3JzRm9yU3R5bGVBdHRyaWJ1dGUuaGFzVmFsdWUoKSkKICAgICAgICAg
bV9jYWNoZWRIYXNDb21wbGV4U2VsZWN0b3JzRm9yU3R5bGVBdHRyaWJ1dGUgPSBjb21wdXRlKCk7
CiAKICAgICByZXR1cm4gKm1fY2FjaGVkSGFzQ29tcGxleFNlbGVjdG9yc0ZvclN0eWxlQXR0cmli
dXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDg5LDE0ICsx
NDg5LDE0IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEVsZW1lbnQ6OnRvZ2dsZUF0dHJpYnUKICAgICBh
dXRvIGNhc2VBZGp1c3RlZFF1YWxpZmllZE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
KCp0aGlzKSA/IHF1YWxpZmllZE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IHF1YWxp
ZmllZE5hbWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBlbGVtZW50RGF0YSgpID8gZWxlbWVudERh
dGEoKS0+ZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGNhc2VBZGp1c3RlZFF1YWxpZmllZE5hbWUs
IGZhbHNlKSA6IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZDsKICAgICBpZiAoaW5kZXgg
PT0gRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kKSB7Ci0gICAgICAgIGlmICghZm9yY2Ug
fHwgKmZvcmNlKSB7CisgICAgICAgIGlmICghZm9yY2UuaGFzVmFsdWUoKSB8fCAqZm9yY2UpIHsK
ICAgICAgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGluZGV4LCBRdWFsaWZpZWROYW1lIHsg
bnVsbEF0b20oKSwgY2FzZUFkanVzdGVkUXVhbGlmaWVkTmFtZSwgbnVsbEF0b20oKSB9LCBlbXB0
eVN0cmluZygpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgaWYgKCFmb3JjZSB8fCAhKmZvcmNlKSB7CisgICAgaWYgKCFmb3JjZS5oYXNWYWx1
ZSgpIHx8ICEqZm9yY2UpIHsKICAgICAgICAgcmVtb3ZlQXR0cmlidXRlSW50ZXJuYWwoaW5kZXgs
IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAJ
KHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTAgKzk3LDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2UKICAgICAgICAgb3B0aW9ucyB8PSBBdHRyaWJ1dGVGaWx0
ZXI7CiAgICAgfQogCi0gICAgaWYgKGluaXQuYXR0cmlidXRlcyA/IGluaXQuYXR0cmlidXRlcy52
YWx1ZSgpIDogKG9wdGlvbnMgJiAoQXR0cmlidXRlRmlsdGVyIHwgQXR0cmlidXRlT2xkVmFsdWUp
KSkKKyAgICBpZiAoaW5pdC5hdHRyaWJ1dGVzLmhhc1ZhbHVlKCkgPyBpbml0LmF0dHJpYnV0ZXMu
dmFsdWUoKSA6IChvcHRpb25zICYgKEF0dHJpYnV0ZUZpbHRlciB8IEF0dHJpYnV0ZU9sZFZhbHVl
KSkpCiAgICAgICAgIG9wdGlvbnMgfD0gQXR0cmlidXRlczsKIAotICAgIGlmIChpbml0LmNoYXJh
Y3RlckRhdGEgPyBpbml0LmNoYXJhY3RlckRhdGEudmFsdWUoKSA6IChvcHRpb25zICYgQ2hhcmFj
dGVyRGF0YU9sZFZhbHVlKSkKKyAgICBpZiAoaW5pdC5jaGFyYWN0ZXJEYXRhLmhhc1ZhbHVlKCkg
PyBpbml0LmNoYXJhY3RlckRhdGEudmFsdWUoKSA6IChvcHRpb25zICYgQ2hhcmFjdGVyRGF0YU9s
ZFZhbHVlKSkKICAgICAgICAgb3B0aW9ucyB8PSBDaGFyYWN0ZXJEYXRhOwogCiAgICAgaWYgKCF2
YWxpZGF0ZU9wdGlvbnMob3B0aW9ucykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zv
bnRBdHRyaWJ1dGVDaGFuZ2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Gb250QXR0cmlidXRlQ2hhbmdlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDEwICs2NCwxMCBAQCBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gRm9udENoYW5n
ZXM6CiAgICAgaWYgKCEhZmFtaWx5TmFtZUZvckNTUykKICAgICAgICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgY3NzVmFsdWVQb29sLmNyZWF0ZUZvbnRGYW1pbHlW
YWx1ZShmYW1pbHlOYW1lRm9yQ1NTKSk7CiAKLSAgICBpZiAobV9pdGFsaWMpCisgICAgaWYgKG1f
aXRhbGljLmhhc1ZhbHVlKCkpCiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRTdHlsZSwgKm1faXRhbGljID8gQ1NTVmFsdWVJdGFsaWMgOiBDU1NWYWx1ZU5vcm1hbCk7
CiAKLSAgICBpZiAobV9ib2xkKQorICAgIGlmIChtX2JvbGQuaGFzVmFsdWUoKSkKICAgICAgICAg
c3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgKm1fYm9sZCA/IENTU1Zh
bHVlQm9sZCA6IENTU1ZhbHVlTm9ybWFsKTsKIAogICAgIGlmIChtX2ZvbnRTaXplKQpAQCAtOTYs
NyArOTYsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3NzVmFsdWVMaXN0CiAKIEVk
aXRBY3Rpb24gRm9udEF0dHJpYnV0ZUNoYW5nZXM6OmVkaXRBY3Rpb24oKSBjb25zdAogewotICAg
IGlmICghbV92ZXJ0aWNhbEFsaWduICYmICFtX2JhY2tncm91bmRDb2xvciAmJiAhbV9zaGFkb3cg
JiYgIW1fc3RyaWtlVGhyb3VnaCAmJiAhbV91bmRlcmxpbmUpIHsKKyAgICBpZiAoIW1fdmVydGlj
YWxBbGlnbiAmJiAhbV9iYWNrZ3JvdW5kQ29sb3IgJiYgIW1fc2hhZG93ICYmICFtX3N0cmlrZVRo
cm91Z2guaGFzVmFsdWUoKSAmJiAhbV91bmRlcmxpbmUuaGFzVmFsdWUoKSkgewogICAgICAgICBp
ZiAobV9mb3JlZ3JvdW5kQ29sb3IgJiYgbV9mb250Q2hhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm4gRWRpdEFjdGlvbjo6U2V0Q29sb3I7CiAKQEAgLTE0MiwxMCArMTQyLDEwIEBA
IFJlZjxFZGl0aW5nU3R5bGU+IEZvbnRBdHRyaWJ1dGVDaGFuZ2VzOjoKIAogICAgIGF1dG8gZWRp
dGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5bGUucHRyKCkpOwogCi0gICAgaWYg
KG1fc3RyaWtlVGhyb3VnaCkKKyAgICBpZiAobV9zdHJpa2VUaHJvdWdoLmhhc1ZhbHVlKCkpCiAg
ICAgICAgIGVkaXRpbmdTdHlsZS0+c2V0U3RyaWtlVGhyb3VnaENoYW5nZSgqbV9zdHJpa2VUaHJv
dWdoID8gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZCA6IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpS
ZW1vdmUpOwogCi0gICAgaWYgKG1fdW5kZXJsaW5lKQorICAgIGlmIChtX3VuZGVybGluZS5oYXNW
YWx1ZSgpKQogICAgICAgICBlZGl0aW5nU3R5bGUtPnNldFVuZGVybGluZUNoYW5nZSgqbV91bmRl
cmxpbmUgPyBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6QWRkIDogVGV4dERlY29yYXRpb25DaGFuZ2U6
OlJlbW92ZSk7CiAKICAgICByZXR1cm4gZWRpdGluZ1N0eWxlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Gb250QXR0cmlidXRlQ2hhbmdlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRm9udEF0dHJpYnV0ZUNoYW5nZXMuaAkocmV2aXNpb24gMjQzNTY2KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb250QXR0cmlidXRlQ2hhbmdlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fZm9udE5hbWUgJiYgIW1fZm9udEZhbWlseSAm
JiAhbV9mb250U2l6ZSAmJiAhbV9mb250U2l6ZURlbHRhICYmICFtX2JvbGQgJiYgIW1faXRhbGlj
OworICAgICAgICByZXR1cm4gIW1fZm9udE5hbWUgJiYgIW1fZm9udEZhbWlseSAmJiAhbV9mb250
U2l6ZSAmJiAhbV9mb250U2l6ZURlbHRhICYmICFtX2JvbGQuaGFzVmFsdWUoKSAmJiAhbV9pdGFs
aWMuaGFzVmFsdWUoKTsKICAgICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8RWRpdGluZ1N0
eWxlPiBjcmVhdGVFZGl0aW5nU3R5bGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9udEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZvbnRBdHRyaWJ1dGVzLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRm9udEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBA
QCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBpbmxpbmUgT3B0aW9uYWw8CiAKICAgICBPcHRpb25h
bDxib29sPiBvcmRlcmVkOwogICAgIGRlY29kZXIgPj4gb3JkZXJlZDsKLSAgICBpZiAoIW9yZGVy
ZWQpCisgICAgaWYgKCFvcmRlcmVkLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICByZXR1cm4ge3sgc3RhdGljX2Nhc3Q8TGlzdFN0eWxlVHlwZT4oV1RGTW92
ZSgqc3R5bGUpKSwgV1RGTW92ZSgqc3RhcnRpbmdJdGVtTnVtYmVyKSwgV1RGTW92ZSgqb3JkZXJl
ZCkgfX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysr
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3
ICsxNDYsNyBAQCBTdHJpbmcgRmlsZTo6Y29udGVudFR5cGVGb3JGaWxlKGNvbnN0IFN0CiAKIGJv
b2wgRmlsZTo6aXNEaXJlY3RvcnkoKSBjb25zdAogewotICAgIGlmICghbV9pc0RpcmVjdG9yeSkK
KyAgICBpZiAoIW1faXNEaXJlY3RvcnkuaGFzVmFsdWUoKSkKICAgICAgICAgbV9pc0RpcmVjdG9y
eSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShtX3BhdGgsIEZpbGVTeXN0ZW06OlNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6Olllcyk7CiAgICAgcmV0dXJuICptX2lzRGlyZWN0b3J5Owog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAkocmV2aXNpb24gMjQzNTY2
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDksNyArMTQ5LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gRE9NVG9rZW5MaXN0Ojp0b2dn
bGUoYwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZm9yY2UgJiYgIWZv
cmNlLnZhbHVlKCkpCisgICAgaWYgKGZvcmNlLmhhc1ZhbHVlKCkgJiYgIWZvcmNlLnZhbHVlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHRva2Vucy5hcHBlbmQodG9rZW4pOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjc5LDcgKzIyNzksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdB
cnJhCiAgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAgYXV0byBzaW11bGF0ZVZlcnRleEF0dHJpYjBT
dGF0dXMgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwotICAgICAg
ICBpZiAoIXNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cykgeworICAgICAgICBpZiAoIXNpbXVs
YXRlVmVydGV4QXR0cmliMFN0YXR1cy5oYXNWYWx1ZSgpKSB7CiAgICAgICAgICAgICAvLyBXZSB3
ZXJlIHVuYWJsZSB0byBzaW11bGF0ZSB0aGUgYXR0cmlidXRlIGJ1ZmZlci4KICAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImRyYXdBcnJheXMiLCAidW5hYmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTIzMzUsNyArMjMzNSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0VsZW0KICAgICAgICAgaWYgKCFudW1FbGVtZW50cykKICAg
ICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19j
YXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKTsKICAgICAgICAgYXV0byBzaW11
bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVu
dHMpOwotICAgICAgICBpZiAoIXNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cykgeworICAgICAg
ICBpZiAoIXNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cy5oYXNWYWx1ZSgpKSB7CiAgICAgICAg
ICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBzaW11bGF0ZSB0aGUgYXR0cmlidXRlIGJ1ZmZlci4K
ICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImRyYXdFbGVtZW50cyIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0
cmliMCBhcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjQwMCw3ICs2NDAwLDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYQogICAgIGJvb2wgdmVydGV4
QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7
CiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0gc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKLSAgICAgICAgaWYgKCFzaW11bGF0ZVZlcnRl
eEF0dHJpYjBTdGF0dXMpIHsKKyAgICAgICAgaWYgKCFzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0
dXMuaGFzVmFsdWUoKSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gc2ltdWxh
dGUgdGhlIGF0dHJpYnV0ZSBidWZmZXIuCiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzSW5zdGFuY2Vk
IiwgInVuYWJsZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC02NDM3LDcgKzY0MzcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdFbGVtCiAgICAgICAgIGlmICghbnVtRWxlbWVudHMpCiAgICAgICAgICAgICB2
YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50
cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7CiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhB
dHRyaWIwU3RhdHVzID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICAg
ICAgaWYgKCFzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsKKyAgICAgICAgaWYgKCFzaW11
bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMuaGFzVmFsdWUoKSkgewogICAgICAgICAgICAgLy8gV2Ug
d2VyZSB1bmFibGUgdG8gc2ltdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZmZXIuCiAgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgInVuYWJsZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIw
IGFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Nyw3ICsxMjcsNyBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxJbnNwZWN0b3JBdWRpdEFjY2VzCiAg
ICAgICAgIENvbXB1dGVkUHJvcGVydGllcyBjb21wdXRlZFByb3BlcnRpZXM7CiAKICAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogY3VycmVudCA9IGF4T2JqZWN0OwotICAgICAgICB3aGlsZSAo
Y3VycmVudCAmJiAoIWNvbXB1dGVkUHJvcGVydGllcy5idXN5IHx8ICFjb21wdXRlZFByb3BlcnRp
ZXMuYnVzeS52YWx1ZSgpKSkgeworICAgICAgICB3aGlsZSAoY3VycmVudCAmJiAoIWNvbXB1dGVk
UHJvcGVydGllcy5idXN5Lmhhc1ZhbHVlKCkgfHwgIWNvbXB1dGVkUHJvcGVydGllcy5idXN5LnZh
bHVlKCkpKSB7CiAgICAgICAgICAgICBjb21wdXRlZFByb3BlcnRpZXMuYnVzeSA9IGN1cnJlbnQt
PmlzQnVzeSgpOwogICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE9iamVjdCgp
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4MCw5ICszODAsOSBAQCBzdGF0aWMgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51KFZlY3RvcjxJ
CiAgICAgICAgIGF1dG8gdHlwZSA9IGl0ZW0udHlwZSA9PSAiY2hlY2tib3giID8gQ2hlY2thYmxl
QWN0aW9uVHlwZSA6IEFjdGlvblR5cGU7CiAgICAgICAgIGF1dG8gYWN0aW9uID0gc3RhdGljX2Nh
c3Q8Q29udGV4dE1lbnVBY3Rpb24+KENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWcgKyBpdGVt
LmlkLnZhbHVlT3IoMCkpOwogICAgICAgICBDb250ZXh0TWVudUl0ZW0gbWVudUl0ZW0gPSB7IHR5
cGUsIGFjdGlvbiwgaXRlbS5sYWJlbCB9OwotICAgICAgICBpZiAoaXRlbS5lbmFibGVkKQorICAg
ICAgICBpZiAoaXRlbS5lbmFibGVkLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICBtZW51SXRlbS5z
ZXRFbmFibGVkKCppdGVtLmVuYWJsZWQpOwotICAgICAgICBpZiAoaXRlbS5jaGVja2VkKQorICAg
ICAgICBpZiAoaXRlbS5jaGVja2VkLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICBtZW51SXRlbS5z
ZXRDaGVja2VkKCppdGVtLmNoZWNrZWQpOwogICAgICAgICBtZW51LmFwcGVuZEl0ZW0obWVudUl0
ZW0pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDI0
MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgyLDcgKzM4Miw3IEBAIGJvb2wgRE9NV2luZG93OjpjYW5TaG93TW9kYWxEaWFsb2co
Y29uc3QKICAgICAvLyBPdmVycmlkZSBzdXBwb3J0IGZvciBsYXlvdXQgdGVzdGluZyBwdXJwb3Nl
cy4KICAgICBpZiAoYXV0byogZG9jdW1lbnQgPSBmcmFtZS5kb2N1bWVudCgpKSB7CiAgICAgICAg
IGlmIChhdXRvKiB3aW5kb3cgPSBkb2N1bWVudC0+ZG9tV2luZG93KCkpIHsKLSAgICAgICAgICAg
IGlmICh3aW5kb3ctPm1fY2FuU2hvd01vZGFsRGlhbG9nT3ZlcnJpZGUpCisgICAgICAgICAgICBp
ZiAod2luZG93LT5tX2NhblNob3dNb2RhbERpYWxvZ092ZXJyaWRlLmhhc1ZhbHVlKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy0+bV9jYW5TaG93TW9kYWxEaWFsb2dPdmVycmlkZS52
YWx1ZSgpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lv
biAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTI4LDcgKzExMjgsNyBAQCBib29sIFBhZ2U6OmlzT25seU5vblV0aWxpdHlQYWdlKCkg
Y29uc3QKIAogYm9vbCBQYWdlOjppc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKSBjb25zdAogewotICAg
IGlmIChtX2xvd1Bvd2VyTW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcpCisgICAgaWYgKG1f
bG93UG93ZXJNb2RlRW5hYmxlZE92ZXJyaWRlRm9yVGVzdGluZy5oYXNWYWx1ZSgpKQogICAgICAg
ICByZXR1cm4gbV9sb3dQb3dlck1vZGVFbmFibGVkT3ZlcnJpZGVGb3JUZXN0aW5nLnZhbHVlKCk7
CiAKICAgICByZXR1cm4gbV9sb3dQb3dlck1vZGVOb3RpZmllci0+aXNMb3dQb3dlck1vZGVFbmFi
bGVkKCk7CkBAIC0yNzIxLDcgKzI3MjEsNyBAQCBib29sIFBhZ2U6OnVzZURhcmtBcHBlYXJhbmNl
KCkgY29uc3QKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtYWluRnJhbWUoKS52aWV3KCk7CiAgICAg
aWYgKCF2aWV3IHx8ICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2aWV3LT5tZWRpYVR5
cGUoKSwgInNjcmVlbiIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fdXNlRGFy
a0FwcGVhcmFuY2VPdmVycmlkZSkKKyAgICBpZiAobV91c2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRl
Lmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBtX3VzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUu
dmFsdWUoKTsKICAgICByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsKICNlbHNlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1F1aXJrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9RdWlya3MuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1F1aXJrcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIFF1
aXJrczo6aGFzQnJva2VuRW5jcnlwdGVkTWVkaWFBUElTCiAgICAgaWYgKCFuZWVkc1F1aXJrcygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9oYXNCcm9rZW5FbmNyeXB0ZWRN
ZWRpYUFQSVN1cHBvcnRRdWlyaykKKyAgICBpZiAobV9oYXNCcm9rZW5FbmNyeXB0ZWRNZWRpYUFQ
SVN1cHBvcnRRdWlyay5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gbV9oYXNCcm9rZW5FbmNy
eXB0ZWRNZWRpYUFQSVN1cHBvcnRRdWlyay52YWx1ZSgpOwogCiAgICAgYXV0byBkb21haW4gPSBt
X2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLmRvbWFpbigpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCk7CkBAIC0xNDEsNyArMTQxLDcgQEAgYm9vbCBRdWlya3M6Omhhc1dlYlNRTFN1cHBvcnRR
dWlyaygpIGNvbgogICAgIGlmICghbmVlZHNRdWlya3MoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIGlmIChtX2hhc1dlYlNRTFN1cHBvcnRRdWlyaykKKyAgICBpZiAobV9oYXNX
ZWJTUUxTdXBwb3J0UXVpcmsuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG1faGFzV2ViU1FM
U3VwcG9ydFF1aXJrLnZhbHVlKCk7CiAgICAgCiAgICAgYXV0byBkb21haW4gPSBtX2RvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLmRvbWFpbigpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsx
MTEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAg
ICAgICAgICAgICAgIC8vIEdldCB0aGUgbmV4dCBwcm9wZXJ0eSB3aGljaCBpcyBub3QgYSBzaG9y
dGhhbmQuCiAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzU2hvcnRoYW5kOwog
ICAgICAgICAgICAgICAgICAgICBwcm9wID0gQ1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3Bl
cnR5QXRJbmRleChwcm9wZXJ0eUluZGV4LCBpc1Nob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpc1Nob3J0aGFuZCAmJiAqaXNTaG9ydGhhbmQpCisgICAgICAgICAgICAgICAgICAg
IGlmIChpc1Nob3J0aGFuZC5oYXNWYWx1ZSgpICYmICppc1Nob3J0aGFuZCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2NyZWVuUHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NjcmVlblByb3BlcnRpZXMuaAkocmV2aXNpb24gMjQzNTY2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NyZWVuUHJvcGVydGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDUsMTcgKzE0NSwxNyBAQCBPcHRpb25hbDxTY3JlZW5EYXRhPiBTY3JlZW5EYXRh
OjpkZWNvZGUoCiAKICAgICBPcHRpb25hbDxib29sPiBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29s
b3I7CiAgICAgZGVjb2RlciA+PiBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3I7Ci0gICAgaWYg
KCFzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IpCisgICAgaWYgKCFzY3JlZW5TdXBwb3J0c0V4
dGVuZGVkQ29sb3IuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgIE9wdGlvbmFsPGJvb2w+IHNjcmVlbkhhc0ludmVydGVkQ29sb3JzOwogICAgIGRlY29kZXIg
Pj4gc2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnM7Ci0gICAgaWYgKCFzY3JlZW5IYXNJbnZlcnRlZENv
bG9ycykKKyAgICBpZiAoIXNjcmVlbkhhc0ludmVydGVkQ29sb3JzLmhhc1ZhbHVlKCkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBPcHRpb25hbDxib29sPiBzY3JlZW5Jc01v
bm9jaHJvbWU7CiAgICAgZGVjb2RlciA+PiBzY3JlZW5Jc01vbm9jaHJvbWU7Ci0gICAgaWYgKCFz
Y3JlZW5Jc01vbm9jaHJvbWUpCisgICAgaWYgKCFzY3JlZW5Jc01vbm9jaHJvbWUuaGFzVmFsdWUo
KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPHVpbnQzMl90
PiBkaXNwbGF5TWFzazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
Z2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
Z2lvbi5oCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9SZWdpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIE9wdGlvbmFs
PFJlZ2lvbj4gUmVnaW9uOjpkZWNvZGUoRGVjb2RlciYKIAogICAgIE9wdGlvbmFsPGJvb2w+IGhh
c1NoYXBlOwogICAgIGRlY29kZXIgPj4gaGFzU2hhcGU7Ci0gICAgaWYgKCFoYXNTaGFwZSkKKyAg
ICBpZiAoIWhhc1NoYXBlLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBSZWdpb24gcmVnaW9uID0geyAqYm91bmRzIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMubW0JKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1ODIsNyArMTU4Miw3IEBAIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6QXNzZXRTdGEKICAgICBpZiAoIXBsYXllcigpLT5zaG91bGRDaGVj
a0hhcmR3YXJlU3VwcG9ydCgpKQogICAgICAgICBtX3RyYWNrc0FyZVBsYXlhYmxlID0gdHJ1ZTsK
IAotICAgIGlmICghbV90cmFja3NBcmVQbGF5YWJsZSkgeworICAgIGlmICghbV90cmFja3NBcmVQ
bGF5YWJsZS5oYXNWYWx1ZSgpKSB7CiAgICAgICAgIG1fdHJhY2tzQXJlUGxheWFibGUgPSB0cnVl
OwogICAgICAgICBmb3IgKEFWQXNzZXRUcmFjayAqdHJhY2sgaW4gW21fYXZBc3NldCB0cmFja3Nd
KSB7CiAgICAgICAgICAgICBpZiAoIWFzc2V0VHJhY2tNZWV0c0hhcmR3YXJlRGVjb2RlUmVxdWly
ZW1lbnRzKHRyYWNrLCBwbGF5ZXIoKS0+bWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2Fy
ZVN1cHBvcnQoKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2NvYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvTWVkaWFFbmdpbmVDb25m
aWd1cmF0aW9uRmFjdG9yeUNvY29hLmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFj
dG9yeUNvY29hLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIGNyZWF0
ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBib29sIGFscGhhQ2hhbm5lbCA9IHZpZGVvQ29uZmlndXJhdGlvbi5h
bHBoYUNoYW5uZWwgJiYgdmlkZW9Db25maWd1cmF0aW9uLmFscGhhQ2hhbm5lbC52YWx1ZSgpOwor
ICAgICAgICBib29sIGFscGhhQ2hhbm5lbCA9IHZpZGVvQ29uZmlndXJhdGlvbi5hbHBoYUNoYW5u
ZWwuaGFzVmFsdWUoKSAmJiB2aWRlb0NvbmZpZ3VyYXRpb24uYWxwaGFDaGFubmVsLnZhbHVlKCk7
CiAKICAgICAgICAgaWYgKHZpZGVvQ29kZWNUeXBlID09IGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMp
IHsKICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IHBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVy
cyhjb2RlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0
dXJlRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vQ2FwdHVyZURldmljZS5oCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDcgKzg3LDcgQEAgcHVibGljOgogCiAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQ7
CiAgICAgICAgIGRlY29kZXIgPj4gZW5hYmxlZDsKLSAgICAgICAgaWYgKCFlbmFibGVkKQorICAg
ICAgICBpZiAoIWVuYWJsZWQuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICAgICAgT3B0aW9uYWw8Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZT4gdHlw
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3Ry
YWludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYUNvbnN0cmFpbnRzLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDcgKzExOSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZ2V0RXhhY3QoVmFsdWVUeXBl
JiBleGFjdCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmICghbV9leGFjdCkKKyAgICAgICAgaWYg
KCFtX2V4YWN0Lmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgZXhhY3QgPSBtX2V4YWN0LnZhbHVlKCk7CkBAIC00NDYsNyArNDQ2LDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBnZXRFeGFjdChib29sJiBleGFjdCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
ICghbV9leGFjdCkKKyAgICAgICAgaWYgKCFtX2V4YWN0Lmhhc1ZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgZXhhY3QgPSBtX2V4YWN0LnZhbHVlKCk7CkBAIC00
NTUsNyArNDU1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBnZXRJZGVhbChib29sJiBpZGVhbCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIGlmICghbV9pZGVhbCkKKyAgICAgICAgaWYgKCFtX2lkZWFs
Lmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWRlYWwg
PSBtX2lkZWFsLnZhbHVlKCk7CkBAIC00NzIsMTEgKzQ3MiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIDIuIElmIHRoZSBjb25zdHJhaW50IGlzIHJlcXVpcmVkICgnbWluJywgJ21heCcsIG9yICdl
eGFjdCcpLCBhbmQgdGhlIHNldHRpbmdzCiAgICAgICAgIC8vICAgIGRpY3Rpb25hcnkncyB2YWx1
ZSBmb3IgdGhlIGNvbnN0cmFpbnQgZG9lcyBub3Qgc2F0aXNmeSB0aGUgY29uc3RyYWludCwgdGhl
CiAgICAgICAgIC8vICAgIGZpdG5lc3MgZGlzdGFuY2UgaXMgcG9zaXRpdmUgaW5maW5pdHkuCi0g
ICAgICAgIGlmIChtX2V4YWN0ICYmIHZhbHVlICE9IG1fZXhhY3QudmFsdWUoKSkKKyAgICAgICAg
aWYgKG1fZXhhY3QuaGFzVmFsdWUoKSAmJiB2YWx1ZSAhPSBtX2V4YWN0LnZhbHVlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwog
CiAgICAgICAgIC8vIDMuIElmIG5vIGlkZWFsIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGZpdG5l
c3MgZGlzdGFuY2UgaXMgMC4KLSAgICAgICAgaWYgKCFtX2lkZWFsIHx8IG1faWRlYWwudmFsdWUo
KSA9PSB2YWx1ZSkKKyAgICAgICAgaWYgKCFtX2lkZWFsLmhhc1ZhbHVlKCkgfHwgbV9pZGVhbC52
YWx1ZSgpID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgLy8gNS4g
Rm9yIGFsbCBzdHJpbmcgYW5kIGVudW0gbm9uLXJlcXVpcmVkIGNvbnN0cmFpbnRzIChkZXZpY2VJ
ZCwgZ3JvdXBJZCwgZmFjaW5nTW9kZSwKQEAgLTQ5OCwxMyArNDk4LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIG1fZXhhY3QgPSB2YWx1ZTsKIAogICAgICAgICBpZiAodHlwZWRPdGhlci5nZXRJ
ZGVhbCh2YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmICghbV9pZGVhbCB8fCAodmFsdWUgJiYgIW1f
aWRlYWwudmFsdWUoKSkpCisgICAgICAgICAgICBpZiAoIW1faWRlYWwuaGFzVmFsdWUoKSB8fCAo
dmFsdWUgJiYgIW1faWRlYWwudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgbV9pZGVhbCA9IHZh
bHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gIW1fZXhhY3QgJiYgIW1faWRlYWw7IH07Ci0gICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0
IHsgcmV0dXJuIGJvb2wobV9leGFjdCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhbV9leGFjdC5oYXNWYWx1ZSgpICYmICFtX2lkZWFsLmhhc1ZhbHVlKCk7IH07CisgICAg
Ym9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhhY3QuaGFzVmFsdWUoKTsgfQog
CiAgICAgdGVtcGxhdGUgPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9NZWRp
YUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbW9jay9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9j
ay5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIHN0YXRpYyBib29sIGNhbkRlY29kZU1lZGlhKGNvbnN0IE1lZGlhRGUK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gT25seSB0aGUgIm1vY2std2l0aC1hbHBo
YSIgY29kZWMgc3VwcG9ydHMgYWxwaGFDaGFubmVsCi0gICAgaWYgKHZpZGVvQ29uZmlnICYmIHZp
ZGVvQ29uZmlnLT5hbHBoYUNoYW5uZWwgJiYgdmlkZW9Db25maWctPmFscGhhQ2hhbm5lbC52YWx1
ZSgpKSB7CisgICAgaWYgKHZpZGVvQ29uZmlnICYmIHZpZGVvQ29uZmlnLT5hbHBoYUNoYW5uZWwu
aGFzVmFsdWUoKSAmJiB2aWRlb0NvbmZpZy0+YWxwaGFDaGFubmVsLnZhbHVlKCkpIHsKICAgICAg
ICAgaWYgKENvbnRlbnRUeXBlKHZpZGVvQ29uZmlnLT5jb250ZW50VHlwZSkuY29kZWNzUGFyYW1l
dGVyKCkgIT0gIm1vY2std2l0aC1hbHBoYSIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgYm9vbCBjYW5FbmNvZGVNZWRpYShjb25zdCBN
ZWRpYUVuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIE9ubHkgdGhlICJtb2NrLXdp
dGgtYWxwaGEiIGNvZGVjIHN1cHBvcnRzIGFscGhhQ2hhbm5lbAotICAgIGlmICh2aWRlb0NvbmZp
ZyAmJiB2aWRlb0NvbmZpZy0+YWxwaGFDaGFubmVsICYmIHZpZGVvQ29uZmlnLT5hbHBoYUNoYW5u
ZWwudmFsdWUoKSkgeworICAgIGlmICh2aWRlb0NvbmZpZyAmJiB2aWRlb0NvbmZpZy0+YWxwaGFD
aGFubmVsLmhhc1ZhbHVlKCkgJiYgdmlkZW9Db25maWctPmFscGhhQ2hhbm5lbC52YWx1ZSgpKSB7
CiAgICAgICAgIGlmIChDb250ZW50VHlwZSh2aWRlb0NvbmZpZy0+Y29udGVudFR5cGUpLmNvZGVj
c1BhcmFtZXRlcigpICE9ICJtb2NrLXdpdGgtYWxwaGEiKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHN0cnVjdCBG
b3JtRGF0YUVsZW1lbnQgewogCiAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBzaG91bGRHZW5l
cmF0ZUZpbGU7CiAgICAgICAgICAgICBkZWNvZGVyID4+IHNob3VsZEdlbmVyYXRlRmlsZTsKLSAg
ICAgICAgICAgIGlmICghc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgICAgICAgICAgaWYgKCFzaG91
bGRHZW5lcmF0ZUZpbGUuaGFzVmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgICAgICAgICBib29sIG93bnNHZW5lcmF0ZWRGaWxlID0gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdv
cmtTdGF0ZU5vdGlmaWVyLmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDcgQEAgTmV0d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5vdGlm
aQogCiBib29sIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpvbkxpbmUoKQogewotICAgIGlmICghbV9p
c09uTGluZSkKKyAgICBpZiAoIW1faXNPbkxpbmUuaGFzVmFsdWUoKSkKICAgICAgICAgdXBkYXRl
U3RhdGUoKTsKICAgICByZXR1cm4gbV9pc09uTGluZS52YWx1ZU9yKHRydWUpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMjQz
NTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MDUsNyArNzA1LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJv
eGVzSW5CbG9ja0RpcgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KE9wdGlvbmFsPGJvb2w+IG1hcmtFeGlzdHNBbmRJc0Fib3ZlID0gZG93bmNhc3Q8SW5saW5lVGV4
dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGNoaWxkTGluZVN0eWxl
KSkgeworICAgICAgICAgICAgICAgIE9wdGlvbmFsPGJvb2w+IG1hcmtFeGlzdHNBbmRJc0Fib3Zl
ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtFeGlzdHNBbmRJ
c0Fib3ZlKGNoaWxkTGluZVN0eWxlKTsKKyAgICAgICAgICAgICAgICBpZiAobWFya0V4aXN0c0Fu
ZElzQWJvdmUuaGFzVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKm1hcmtFeGlz
dHNBbmRJc0Fib3ZlICE9IGNoaWxkTGluZVN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Fubm90YXRpb25zQmVmb3JlID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQpAQCAtOTAwLDcgKzkwMSw4IEBAIGlubGluZSB2b2lk
IElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXMKICAgICBpbnQgbGVmdEdseXBoT3ZlcmZsb3cg
PSAtc3Ryb2tlT3ZlcmZsb3cgLSBsZWZ0R2x5cGhFZGdlOwogICAgIGludCByaWdodEdseXBoT3Zl
cmZsb3cgPSBzdHJva2VPdmVyZmxvdyArIHJpZ2h0R2x5cGhFZGdlOwogCi0gICAgaWYgKE9wdGlv
bmFsPGJvb2w+IG1hcmtFeGlzdHNBbmRJc0Fib3ZlID0gdGV4dEJveC5lbXBoYXNpc01hcmtFeGlz
dHNBbmRJc0Fib3ZlKGxpbmVTdHlsZSkpIHsKKyAgICBPcHRpb25hbDxib29sPiBtYXJrRXhpc3Rz
QW5kSXNBYm92ZSA9IHRleHRCb3guZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShsaW5lU3R5
bGUpOworICAgIGlmIChtYXJrRXhpc3RzQW5kSXNBYm92ZS5oYXNWYWx1ZSgpKSB7CiAgICAgICAg
IGludCBlbXBoYXNpc01hcmtIZWlnaHQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNp
c01hcmtIZWlnaHQobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAg
IGlmICgqbWFya0V4aXN0c0FuZElzQWJvdmUgPT0gIWxpbmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dy
aXRpbmdNb2RlKCkpCiAgICAgICAgICAgICB0b3BHbHlwaE92ZXJmbG93ID0gc3RkOjptaW4odG9w
R2x5cGhPdmVyZmxvdywgLWVtcGhhc2lzTWFya0hlaWdodCk7CkBAIC0xNTkyLDcgKzE1OTQsNyBA
QCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVPdmVyQW5uCiAgICAgICAgIGlmIChp
czxJbmxpbmVUZXh0Qm94PigqY2hpbGQpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgY2hpbGRMaW5lU3R5bGUgPSBjaGlsZC0+bGluZVN0eWxlKCk7CiAgICAgICAgICAgICBPcHRp
b25hbDxib29sPiBtYXJrRXhpc3RzQW5kSXNBYm92ZSA9IGRvd25jYXN0PElubGluZVRleHRCb3g+
KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShjaGlsZExpbmVTdHlsZSk7Ci0g
ICAgICAgICAgICBpZiAobWFya0V4aXN0c0FuZElzQWJvdmUgJiYgKm1hcmtFeGlzdHNBbmRJc0Fi
b3ZlKSB7CisgICAgICAgICAgICBpZiAobWFya0V4aXN0c0FuZElzQWJvdmUuaGFzVmFsdWUoKSAm
JiAqbWFya0V4aXN0c0FuZElzQWJvdmUpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkTGlu
ZVN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpbnQgdG9wT2ZFbXBoYXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5l
U3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4
dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3Rk
OjptYXgocmVzdWx0LCBhbGxvd2VkUG9zaXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CkBAIC0x
NjQwLDcgKzE2NDIsNyBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRlckFu
CiAgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqY2hpbGQpKSB7CiAgICAgICAgICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgY2hpbGRMaW5lU3R5bGUgPSBjaGlsZC0+bGluZVN0eWxlKCk7CiAg
ICAgICAgICAgICBPcHRpb25hbDxib29sPiBtYXJrRXhpc3RzQW5kSXNBYm92ZSA9IGRvd25jYXN0
PElubGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShjaGls
ZExpbmVTdHlsZSk7Ci0gICAgICAgICAgICBpZiAobWFya0V4aXN0c0FuZElzQWJvdmUgJiYgISpt
YXJrRXhpc3RzQW5kSXNBYm92ZSkgeworICAgICAgICAgICAgaWYgKG1hcmtFeGlzdHNBbmRJc0Fi
b3ZlLmhhc1ZhbHVlKCkgJiYgISptYXJrRXhpc3RzQW5kSXNBYm92ZSkgewogICAgICAgICAgICAg
ICAgIGlmICghY2hpbGRMaW5lU3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjaGls
ZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5lbXBoYXNp
c01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBib3R0b21PZkVtcGhh
c2lzTWFyayAtIGFsbG93ZWRQb3NpdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzgsNyAr
MTAzOCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0Rm9yZWcKIAogICAg
IGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCA9IDA7CiAgICAgT3B0aW9uYWw8Ym9vbD4gbWFya0V4
aXN0c0FuZElzQWJvdmUgPSBlbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVTdHlsZSk7
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmsgPSBtYXJrRXhpc3RzQW5kSXNB
Ym92ZSA/IGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgOiBudWxsQXRvbSgpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0c0FuZElzQWJv
dmUuaGFzVmFsdWUoKSA/IGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgOiBudWxs
QXRvbSgpOwogICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKICAgICAgICAgZW1waGFz
aXNNYXJrT2Zmc2V0ID0gKm1hcmtFeGlzdHNBbmRJc0Fib3ZlID8gLWZvbnQuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIGZvbnQuZW1waGFzaXNNYXJrRGVzY2VudChlbXBoYXNpc01hcmspIDogZm9u
dC5mb250TWV0cmljcygpLmRlc2NlbnQoKSArIGZvbnQuZW1waGFzaXNNYXJrQXNjZW50KGVtcGhh
c2lzTWFyayk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE1M
U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
TWF0aE1MU3R5bGUuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL01hdGhNTFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEz
Nyw3IEBAIHZvaWQgTWF0aE1MU3R5bGU6OnJlc29sdmVNYXRoTUxTdHlsZShSZW4KICAgICBhdXRv
KiBlbGVtZW50ID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpLT5lbGVtZW50KCk7
CiAgICAgaWYgKGlzPE1hdGhNTEVsZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAgICAgIE9wdGlvbmFs
PGJvb2w+IGRpc3BsYXlTdHlsZSA9IGRvd25jYXN0PE1hdGhNTEVsZW1lbnQ+KGVsZW1lbnQpLT5z
cGVjaWZpZWREaXNwbGF5U3R5bGUoKTsKLSAgICAgICAgaWYgKGRpc3BsYXlTdHlsZSkKKyAgICAg
ICAgaWYgKGRpc3BsYXlTdHlsZS5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgbV9kaXNwbGF5U3R5
bGUgPSBkaXNwbGF5U3R5bGUudmFsdWUoKTsKICAgICAgICAgT3B0aW9uYWw8TWF0aE1MRWxlbWVu
dDo6TWF0aFZhcmlhbnQ+IG1hdGhWYXJpYW50ID0gZG93bmNhc3Q8TWF0aE1MRWxlbWVudD4oZWxl
bWVudCktPnNwZWNpZmllZE1hdGhWYXJpYW50KCk7CiAgICAgICAgIGlmIChtYXRoVmFyaWFudCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwCShy
ZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgU1ZHQW5pbWF0
ZUVsZW1lbnRCYXNlOjpoYXNJbnZhbGlkQ1MKICAgICBpZiAoIXRhcmdldEVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVU
eXBlKQorICAgIGlmICghbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZS5oYXNWYWx1ZSgpKQog
ICAgICAgICBtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlID0gaGFzVmFsaWRBdHRyaWJ1dGVO
YW1lKCkgJiYgYXR0cmlidXRlVHlwZSgpID09IEF0dHJpYnV0ZVR5cGU6OkNTUyAmJiAhaXNUYXJn
ZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eSh0YXJnZXRFbGVtZW50KCksIGF0dHJpYnV0ZU5hbWUoKSk7
CiAKICAgICByZXR1cm4gbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZS52YWx1ZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWREZWNvcmF0ZWRQcm9w
ZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGVkRGVjb3JhdGVkUHJvcGVydHkuaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWREZWNvcmF0ZWRQcm9wZXJ0eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAvLyBVc2VkIHRvIGFwcGx5
IHRoZSBTVkdBbmltYXRvciBjaGFuZ2UgdG8gdGhlIHRhcmdldCBlbGVtZW50LgogICAgIFN0cmlu
ZyBhbmltVmFsQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzQW5pbWF0aW5nKCkgJiYgISFtX2FuaW1WYWwpOworICAgICAgICBBU1NFUlQoaXNBbmltYXRp
bmcoKSAmJiBtX2FuaW1WYWwpOwogICAgICAgICByZXR1cm4gbV9hbmltVmFsLT52YWx1ZUFzU3Ry
aW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRlZFByaW1pdGl2ZVByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eS5oCShyZXZpc2lvbiAy
NDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByaW1p
dGl2ZVByb3BlcnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEzICs2NiwxMyBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBQcm9wZXJ0eVR5cGUmIGFuaW1WYWwoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUX0lNUExJRVMoaXNBbmltYXRpbmcoKSwgbV9hbmltVmFsKTsKKyAgICAgICAgQVNT
RVJUX0lNUExJRVMoaXNBbmltYXRpbmcoKSwgbV9hbmltVmFsLmhhc1ZhbHVlKCkpOwogICAgICAg
ICByZXR1cm4gaXNBbmltYXRpbmcoKSA/ICptX2FuaW1WYWwgOiBtX2Jhc2VWYWw7CiAgICAgfQog
CiAgICAgUHJvcGVydHlUeXBlJiBhbmltVmFsKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9JTVBM
SUVTKGlzQW5pbWF0aW5nKCksIG1fYW5pbVZhbCk7CisgICAgICAgIEFTU0VSVF9JTVBMSUVTKGlz
QW5pbWF0aW5nKCksIG1fYW5pbVZhbC5oYXNWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIGlzQW5p
bWF0aW5nKCkgPyAqbV9hbmltVmFsIDogbV9iYXNlVmFsOwogICAgIH0KIApAQCAtODIsNyArODIs
NyBAQCBwdWJsaWM6CiAgICAgLy8gVXNlZCB0byBhcHBseSB0aGUgU1ZHQXR0cmlidXRlQW5pbWF0
b3IgY2hhbmdlIHRvIHRoZSB0YXJnZXQgZWxlbWVudC4KICAgICBTdHJpbmcgYW5pbVZhbEFzU3Ry
aW5nKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0FuaW1hdGluZygp
ICYmICEhbV9hbmltVmFsKTsKKyAgICAgICAgQVNTRVJUKGlzQW5pbWF0aW5nKCkgJiYgbV9hbmlt
VmFsLmhhc1ZhbHVlKCkpOwogICAgICAgICByZXR1cm4gU1ZHUHJvcGVydHlUcmFpdHM8UHJvcGVy
dHlUeXBlPjo6dG9TdHJpbmcoKm1fYW5pbVZhbCk7CiAgICAgfQogCkBAIC0xMDAsNyArMTAwLDcg
QEAgcHVibGljOgogICAgIC8vIFVzZWQgYnkgUmVuZGVyU1ZHRWxlbWVudHMgYW5kIER1bXBSZW5k
ZXJUcmVlLgogICAgIGNvbnN0IFByb3BlcnR5VHlwZSYgY3VycmVudFZhbHVlKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIEFTU0VSVF9JTVBMSUVTKGlzQW5pbWF0aW5nKCksIG1fYW5pbVZhbCk7Cisg
ICAgICAgIEFTU0VSVF9JTVBMSUVTKGlzQW5pbWF0aW5nKCksIG1fYW5pbVZhbC5oYXNWYWx1ZSgp
KTsKICAgICAgICAgcmV0dXJuIGlzQW5pbWF0aW5nKCkgPyAqbV9hbmltVmFsIDogbV9iYXNlVmFs
OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VX
b3JrZXJDbGllbnRRdWVyeU9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNsaWVudFF1ZXJ5T3B0aW9ucy5oCShyZXZpc2lv
biAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtl
ckNsaWVudFF1ZXJ5T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIE9w
dGlvbmFsPFNlcnZpY2VXb3JrZXJDbGllbnRRdWVyeU9wdGlvbnMKIHsKICAgICBPcHRpb25hbDxi
b29sPiBpbmNsdWRlVW5jb250cm9sbGVkOwogICAgIGRlY29kZXIgPj4gaW5jbHVkZVVuY29udHJv
bGxlZDsKLSAgICBpZiAoIWluY2x1ZGVVbmNvbnRyb2xsZWQpCisgICAgaWYgKCFpbmNsdWRlVW5j
b250cm9sbGVkLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICBPcHRpb25hbDxTZXJ2aWNlV29ya2VyQ2xpZW50VHlwZT4gdHlwZTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNDM2NjcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQ2IEBACisyMDE5LTAzLTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29uc2lkZXIgcmVtb3ZpbmcgT3B0aW9uYWw8
Ym9vbD46Om9wZXJhdG9yIGJvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NjQyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6
ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9u
UGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPE9wdGlvbmFsPFQ+Pjo6ZW5jb2RlKToK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxPcHRpb25hbDxUPj46OmRlY29kZSk6CisgICAg
ICAgIChJUEM6OlR1cGxlRGVjb2RlckltcGw6OmRlY29kZSk6CisgICAgICAgIChJUEM6OlR1cGxl
RGVjb2RlckltcGw8VHlwZT46OmRlY29kZSk6CisgICAgICAgIChJUEM6OlZhcmlhbnRDb2Rlcjo6
ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaDoKKyAg
ICAgICAgKElQQzo6Rm9ybURhdGFSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL05hdmlnYXRpb25BY3Rpb25E
YXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbkRhdGE6OmRlY29kZSk6
CisgICAgICAgICogU2hhcmVkL1VSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6VVJMU2NoZW1lVGFza1BhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVQb2xp
Y2llc0RhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL21hYy9QREZDb250ZXh0TWVudS5o
OgorICAgICAgICAoV2ViS2l0OjpQREZDb250ZXh0TWVudUl0ZW06OmRlY29kZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbToKKyAgICAgICAgKC1b
X1dLV2Vic2l0ZVBvbGljaWVzIGRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUG9saWN5
XSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0F1dG9tYXRpb25DbGllbnQubW06CisgICAg
ICAgIChXZWJLaXQ6OkF1dG9tYXRpb25DbGllbnQ6OnJlcXVlc3RBdXRvbWF0aW9uU2Vzc2lvbik6
CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHk6OmNhcHR1cmVEZXZpY2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjpyZXF1ZXN0VXNlck1lZGlhUGVybWlz
c2lvbkZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHk6OmdldFVzZXJNZWRpYVBlcm1pc3Npb25JbmZvKToKKyAgICAgICAgKFdl
YktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmVudW1lcmF0ZU1l
ZGlhRGV2aWNlc0ZvckZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFN5
bnRoZXNpc1ZvaWNlOjpkZWNvZGUpOgorCiAyMDE5LTAzLTI5ICBNeWxlcyBDLiBNYXhmaWVsZCAg
PG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgRGVsZXRlIFdlYk1ldGFsIGltcGxlbWVu
dGF0aW9uIGluIGZhdm9yIG9mIFdlYkdQVQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5j
cHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyAr
MTkxLDcgQEAgYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZGVjbwogCiAgICAg
T3B0aW9uYWw8Ym9vbD4gc2hvdWxkUmVzdHJpY3RIVFRQUmVzcG9uc2VBY2Nlc3M7CiAgICAgZGVj
b2RlciA+PiBzaG91bGRSZXN0cmljdEhUVFBSZXNwb25zZUFjY2VzczsKLSAgICBpZiAoIXNob3Vs
ZFJlc3RyaWN0SFRUUFJlc3BvbnNlQWNjZXNzKQorICAgIGlmICghc2hvdWxkUmVzdHJpY3RIVFRQ
UmVzcG9uc2VBY2Nlc3MuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
c3VsdC5zaG91bGRSZXN0cmljdEhUVFBSZXNwb25zZUFjY2VzcyA9ICpzaG91bGRSZXN0cmljdEhU
VFBSZXNwb25zZUFjY2VzczsKIApAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgTmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnM6OmRlY28KIAogICAgIE9wdGlvbmFsPGJvb2w+IHNob3VsZEVuYWJs
ZUNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3k7CiAgICAgZGVjb2RlciA+PiBzaG91bGRFbmFibGVD
cm9zc09yaWdpblJlc291cmNlUG9saWN5OwotICAgIGlmICghc2hvdWxkRW5hYmxlQ3Jvc3NPcmln
aW5SZXNvdXJjZVBvbGljeSkKKyAgICBpZiAoIXNob3VsZEVuYWJsZUNyb3NzT3JpZ2luUmVzb3Vy
Y2VQb2xpY3kuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC5z
aG91bGRFbmFibGVDcm9zc09yaWdpblJlc291cmNlUG9saWN5ID0gKnNob3VsZEVuYWJsZUNyb3Nz
T3JpZ2luUmVzb3VyY2VQb2xpY3k7CiAKQEAgLTIwOSw3ICsyMDksNyBAQCBib29sIE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpkZWNvCiAKICAgICBPcHRpb25hbDxib29sPiBpc0hUVFBT
VXBncmFkZUVuYWJsZWQ7CiAgICAgZGVjb2RlciA+PiBpc0hUVFBTVXBncmFkZUVuYWJsZWQ7Ci0g
ICAgaWYgKCFpc0hUVFBTVXBncmFkZUVuYWJsZWQpCisgICAgaWYgKCFpc0hUVFBTVXBncmFkZUVu
YWJsZWQuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC5pc0hU
VFBTVXBncmFkZUVuYWJsZWQgPSAqaXNIVFRQU1VwZ3JhZGVFbmFibGVkOwogICAgIApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgT3B0aW9uYWw8TmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcgogICAgIAogICAgIE9wdGlvbmFsPGJvb2w+IHNob3Vs
ZExvZ0Nvb2tpZUluZm9ybWF0aW9uOwogICAgIGRlY29kZXIgPj4gc2hvdWxkTG9nQ29va2llSW5m
b3JtYXRpb247Ci0gICAgaWYgKCFzaG91bGRMb2dDb29raWVJbmZvcm1hdGlvbikKKyAgICBpZiAo
IXNob3VsZExvZ0Nvb2tpZUluZm9ybWF0aW9uLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgCiAgICAgT3B0aW9uYWw8U2Vjb25kcz4gbG9hZFRocm90dGxlTGF0
ZW5jeTsKQEAgLTE3MiwxNyArMTcyLDE3IEBAIE9wdGlvbmFsPE5ldHdvcmtTZXNzaW9uQ3JlYXRp
b25QYXJhbWV0ZXIKIAogICAgIE9wdGlvbmFsPGJvb2w+IGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3M7CiAgICAgZGVjb2RlciA+PiBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAg
IGlmICghZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykKKyAgICBpZiAoIWVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3MuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIE9wdGlvbmFsPGJvb2w+IHNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJlc291cmNl
TG9hZFN0YXRpc3RpY3M7CiAgICAgZGVjb2RlciA+PiBzaG91bGRJbmNsdWRlTG9jYWxob3N0SW5S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgIGlmICghc2hvdWxkSW5jbHVkZUxvY2FsaG9zdElu
UmVzb3VyY2VMb2FkU3RhdGlzdGljcykKKyAgICBpZiAoIXNob3VsZEluY2x1ZGVMb2NhbGhvc3RJ
blJlc291cmNlTG9hZFN0YXRpc3RpY3MuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPGJvb2w+IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGU7CiAgICAgZGVjb2RlciA+PiBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlOwotICAgIGlmICghZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZSkKKyAgICBpZiAoIWVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUuaGFzVmFs
dWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFs
ZW50UmVzb3VyY2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXJzLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8T3B0aW9uYWw8VD4+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgT3B0aW9uYWw8VD4mIG9wdGlvbmFsKQogICAgIHsK
LSAgICAgICAgaWYgKCFvcHRpb25hbCkgeworICAgICAgICBpZiAoIW9wdGlvbmFsLmhhc1ZhbHVl
KCkpIHsKICAgICAgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTEwOSwxMiArMTA5LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBBcmd1bWVudENvZGUKICAgICB7CiAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5nYWdl
ZDsKICAgICAgICAgZGVjb2RlciA+PiBpc0VuZ2FnZWQ7Ci0gICAgICAgIGlmICghaXNFbmdhZ2Vk
KQorICAgICAgICBpZiAoIWlzRW5nYWdlZC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKCppc0VuZ2FnZWQpIHsKICAgICAgICAgICAgIE9w
dGlvbmFsPFQ+IHZhbHVlOwogICAgICAgICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICAgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBpZiAoIXZhbHVlLmhhc1ZhbHVlKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgICAgIHJldHVybiBPcHRp
b25hbDxPcHRpb25hbDxUPj4oV1RGTW92ZSgqdmFsdWUpKTsKICAgICAgICAgfQpAQCAtMTkzLDcg
KzE5Myw3IEBAIHN0cnVjdCBUdXBsZURlY29kZXJJbXBsIHsKICAgICB7CiAgICAgICAgIE9wdGlv
bmFsPFR5cGU+IG9wdGlvbmFsOwogICAgICAgICBkZWNvZGVyID4+IG9wdGlvbmFsOwotICAgICAg
ICBpZiAoIW9wdGlvbmFsKQorICAgICAgICBpZiAoIW9wdGlvbmFsLmhhc1ZhbHVlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIE9wdGlvbmFsPHN0ZDo6dHVw
bGU8VHlwZXMuLi4+PiBzdWJUdXBsZSA9IFR1cGxlRGVjb2RlckltcGw8VHlwZXMuLi4+OjpkZWNv
ZGUoZGVjb2Rlcik7CkBAIC0yMTAsNyArMjEwLDcgQEAgc3RydWN0IFR1cGxlRGVjb2RlckltcGw8
VHlwZT4gewogICAgIHsKICAgICAgICAgT3B0aW9uYWw8VHlwZT4gb3B0aW9uYWw7CiAgICAgICAg
IGRlY29kZXIgPj4gb3B0aW9uYWw7Ci0gICAgICAgIGlmICghb3B0aW9uYWwpCisgICAgICAgIGlm
ICghb3B0aW9uYWwuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGTW92ZSgqb3B0aW9uYWwpKTsKICAg
ICB9CkBAIC01MjcsNyArNTI3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZSBFcgogICAgIHsKICAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaGFzVmFsdWU7CiAgICAgICAg
IGRlY29kZXIgPj4gaGFzVmFsdWU7Ci0gICAgICAgIGlmICghaGFzVmFsdWUpCisgICAgICAgIGlm
ICghaGFzVmFsdWUuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIAogICAgICAgICBpZiAoKmhhc1ZhbHVlKSB7CkBAIC01NjMsNyArNTYzLDcgQEAg
c3RydWN0IFZhcmlhbnRDb2RlciB7CiAgICAgICAgIGlmIChpID09IGluZGV4KSB7CiAgICAgICAg
ICAgICBPcHRpb25hbDx0eXBlbmFtZSBXVEY6OnZhcmlhbnRfYWx0ZXJuYXRpdmU8aW5kZXgsIFdU
Rjo6VmFyaWFudDxUeXBlcy4uLj4+Ojp0eXBlPiBvcHRpb25hbDsKICAgICAgICAgICAgIGRlY29k
ZXIgPj4gb3B0aW9uYWw7Ci0gICAgICAgICAgICBpZiAoIW9wdGlvbmFsKQorICAgICAgICAgICAg
aWYgKCFvcHRpb25hbC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgICAgICByZXR1cm4geyBXVEZNb3ZlKCpvcHRpb25hbCkgfTsKICAgICAg
ICAgfQpAQCAtNTg0LDcgKzU4NCw3IEBAIHN0cnVjdCBWYXJpYW50Q29kZXI8MCwgVHlwZXMuLi4+
IHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChpLCAhaSk7CiAgICAgICAgIE9wdGlvbmFsPHR5cGVu
YW1lIFdURjo6dmFyaWFudF9hbHRlcm5hdGl2ZTwwLCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+Pjo6
dHlwZT4gb3B0aW9uYWw7CiAgICAgICAgIGRlY29kZXIgPj4gb3B0aW9uYWw7Ci0gICAgICAgIGlm
ICghb3B0aW9uYWwpCisgICAgICAgIGlmICghb3B0aW9uYWwuaGFzVmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHJldHVybiB7IFdURk1vdmUoKm9wdGlv
bmFsKSB9OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Zvcm1EYXRh
UmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9y
bURhdGFSZWZlcmVuY2UuaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBPcHRpb25hbDxib29sPiBoYXNGb3JtRGF0YTsK
ICAgICAgICAgZGVjb2RlciA+PiBoYXNGb3JtRGF0YTsKLSAgICAgICAgaWYgKCFoYXNGb3JtRGF0
YSkKKyAgICAgICAgaWYgKCFoYXNGb3JtRGF0YS5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKCFoYXNGb3JtRGF0YS52YWx1ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIEZvcm1EYXRhUmVmZXJlbmNlIHsgfTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtNTc2
LDcgKzU3Niw3IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIoZmlsZSk6CiAgICAgICAg
ICAgICAgICAgZm9yIHggaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzOgogICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgT3B0aW9uYWw8JXM+ICVzO1xuJyAlICh4LnR5cGUs
IHgubmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBkZWNvZGVy
ID4+ICVzO1xuJyAlIHgubmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIGlmICghJXMpIHtcbiAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4gICAgICAgIHJl
dHVybjtcbiAgICB9XG4nICUgeC5uYW1lKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgaWYgKCElcy5oYXNWYWx1ZSgpKSB7XG4gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuJyAlIHgubmFtZSkKICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgY29tcGxldGlvbkhhbmRsZXIoJykKICAgICAgICAgICAgICAg
ICBpZiBsZW4obWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzKToKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnV1RGTW92ZSgqJXMpJyAlICgnKSwgV1RGTW92ZSgqJy5qb2luKHgubmFt
ZSBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMpKSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDI0MzU2NikK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBPcHRpb25hbDxOYXZpZ2F0aW9uQWN0aW9uRGF0YT4g
TmF2aWdhdGlvCiAgICAgCiAgICAgT3B0aW9uYWw8Ym9vbD4gY2FuSGFuZGxlUmVxdWVzdDsKICAg
ICBkZWNvZGVyID4+IGNhbkhhbmRsZVJlcXVlc3Q7Ci0gICAgaWYgKCFjYW5IYW5kbGVSZXF1ZXN0
KQorICAgIGlmICghY2FuSGFuZGxlUmVxdWVzdC5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIAogICAgIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3kgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTsKQEAgLTEwMCwyMiArMTAwLDIyIEBA
IE9wdGlvbmFsPE5hdmlnYXRpb25BY3Rpb25EYXRhPiBOYXZpZ2F0aW8KICAgICAKICAgICBPcHRp
b25hbDxib29sPiBpc1JlZGlyZWN0OwogICAgIGRlY29kZXIgPj4gaXNSZWRpcmVjdDsKLSAgICBp
ZiAoIWlzUmVkaXJlY3QpCisgICAgaWYgKCFpc1JlZGlyZWN0Lmhhc1ZhbHVlKCkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBPcHRpb25hbDxib29sPiB0cmVhdEFzU2FtZU9y
aWdpbk5hdmlnYXRpb247CiAgICAgZGVjb2RlciA+PiB0cmVhdEFzU2FtZU9yaWdpbk5hdmlnYXRp
b247Ci0gICAgaWYgKCF0cmVhdEFzU2FtZU9yaWdpbk5hdmlnYXRpb24pCisgICAgaWYgKCF0cmVh
dEFzU2FtZU9yaWdpbk5hdmlnYXRpb24uaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPGJvb2w+IGhhc09wZW5lZEZyYW1lczsKICAgICBkZWNv
ZGVyID4+IGhhc09wZW5lZEZyYW1lczsKLSAgICBpZiAoIWhhc09wZW5lZEZyYW1lcykKKyAgICBp
ZiAoIWhhc09wZW5lZEZyYW1lcy5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgT3B0aW9uYWw8Ym9vbD4gb3BlbmVkQnlET01XaXRoT3BlbmVyOwogICAgIGRl
Y29kZXIgPj4gb3BlbmVkQnlET01XaXRoT3BlbmVyOwotICAgIGlmICghb3BlbmVkQnlET01XaXRo
T3BlbmVyKQorICAgIGlmICghb3BlbmVkQnlET01XaXRoT3BlbmVyLmhhc1ZhbHVlKCkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBPcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGE+IHJlcXVlc3Rlck9yaWdpbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVk
L1VSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9VUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysr
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1VSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBPcHRpb25hbDxVUkxTY2hlbWVUYXNrUGFyYW1ldGVy
cz4gVVJMU2NoCiAKICAgICBPcHRpb25hbDxib29sPiBoYXNIVFRQQm9keTsKICAgICBkZWNvZGVy
ID4+IGhhc0hUVFBCb2R5OwotICAgIGlmICghaGFzSFRUUEJvZHkpCisgICAgaWYgKCFoYXNIVFRQ
Qm9keS5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGlmICgq
aGFzSFRUUEJvZHkpIHsKICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OkZvcm1EYXRhPiBmb3JtRGF0
YSA9IFdlYkNvcmU6OkZvcm1EYXRhOjpkZWNvZGUoZGVjb2Rlcik7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5j
cHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAg
T3B0aW9uYWw8V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPgogCiAgICAgT3B0aW9uYWw8
Ym9vbD4gaGFzU2hhcmVkTWVtb3J5OwogICAgIGRlY29kZXIgPj4gaGFzU2hhcmVkTWVtb3J5Owot
ICAgIGlmICghaGFzU2hhcmVkTWVtb3J5KQorICAgIGlmICghaGFzU2hhcmVkTWVtb3J5Lmhhc1Zh
bHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCpoYXNTaGFyZWRN
ZW1vcnkpIHsKICAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZVBvbGljaWVzRGF0YS5jcHAJKHJldmlzaW9uIDI0
MzU2NikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIE9wdGlvbmFsPFdlYnNpdGVQb2xpY2llc0Rh
dGE+IFdlYnNpdGVQb2wKIHsKICAgICBPcHRpb25hbDxib29sPiBjb250ZW50QmxvY2tlcnNFbmFi
bGVkOwogICAgIGRlY29kZXIgPj4gY29udGVudEJsb2NrZXJzRW5hYmxlZDsKLSAgICBpZiAoIWNv
bnRlbnRCbG9ja2Vyc0VuYWJsZWQpCisgICAgaWYgKCFjb250ZW50QmxvY2tlcnNFbmFibGVkLmhh
c1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgT3B0aW9u
YWw8V2Vic2l0ZUF1dG9wbGF5UG9saWN5PiBhdXRvcGxheVBvbGljeTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9QREZDb250ZXh0TWVudS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9QREZDb250ZXh0TWVudS5oCShyZXZpc2lvbiAyNDM1NjYpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvUERGQ29udGV4dE1lbnUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVjdCBQREZDb250ZXh0TWVudUl0ZW0gewogCiAgICAgICAg
IE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQ7CiAgICAgICAgIGRlY29kZXIgPj4gZW5hYmxlZDsKLSAg
ICAgICAgaWYgKCFlbmFibGVkKQorICAgICAgICBpZiAoIWVuYWJsZWQuaGFzVmFsdWUoKSkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgT3B0aW9uYWw8Ym9vbD4g
c2VwYXJhdG9yOwogICAgICAgICBkZWNvZGVyID4+IHNlcGFyYXRvcjsKLSAgICAgICAgaWYgKCFz
ZXBhcmF0b3IpCisgICAgICAgIGlmICghc2VwYXJhdG9yLmhhc1ZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIE9wdGlvbmFsPGludD4gc3RhdGU7CkBA
IC02NSw3ICs2NSw3IEBAIHN0cnVjdCBQREZDb250ZXh0TWVudUl0ZW0gewogCiAgICAgICAgIE9w
dGlvbmFsPGJvb2w+IGhhc0FjdGlvbjsKICAgICAgICAgZGVjb2RlciA+PiBoYXNBY3Rpb247Ci0g
ICAgICAgIGlmICghaGFzQWN0aW9uKQorICAgICAgICBpZiAoIWhhc0FjdGlvbi5oYXNWYWx1ZSgp
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBPcHRpb25hbDxp
bnQ+IHRhZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAJKHJldmlz
aW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3
IEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHIKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byBoYW5kbGVyID0gW3RoaXNdKE9wdGlvbmFsPGJvb2w+IG9yaWdpbkhh
c1BlcnNpc3RlbnRBY2Nlc3MpIG11dGFibGUgewotICAgICAgICBpZiAoIW9yaWdpbkhhc1BlcnNp
c3RlbnRBY2Nlc3MgfHwgIW1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQorICAgICAgICBpZiAo
IW9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MuaGFzVmFsdWUoKSB8fCAhbV9wYWdlLmhhc1J1bm5p
bmdQcm9jZXNzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKG1fZ3JhbnRl
ZFJlcXVlc3RzLmlzRW1wdHkoKSAmJiAhKm9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpCkBAIC0z
NjIsNyArMzYyLDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcgog
ICAgICAgICBpZiAoIXJlcXVlc3QtPmlzUGVuZGluZygpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIGlmICghaGFzUGVyc2lzdGVudEFjY2VzcykgeworICAgICAgICBpZiAoIWhhc1Bl
cnNpc3RlbnRBY2Nlc3MuaGFzVmFsdWUoKSkgewogICAgICAgICAgICAgcmVxdWVzdC0+ZGVueShV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkaWFBY2Nlc3NEZW5pYWxSZWFz
b246Ok90aGVyRmFpbHVyZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTUw
NSw3ICs1MDUsNyBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByCiAg
ICAgbV9wZW5kaW5nRGV2aWNlUmVxdWVzdHMuYWRkKHJlcXVlc3RJRCk7CiAKICAgICBhdXRvIHJl
cXVlc3QgPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eTo6Y3JlYXRlKGZyYW1lSUQsIFt0
aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdElELCBoYW5kbGVyID0g
V1RGTW92ZShoYW5kbGVyKV0oT3B0aW9uYWw8Ym9vbD4gYWxsb3dlZCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmICghd2Vha1RoaXMgfHwgIW1fcGVuZGluZ0RldmljZVJlcXVlc3RzLnJlbW92ZShyZXF1
ZXN0SUQpIHx8ICFhbGxvd2VkKSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIW1fcGVuZGlu
Z0RldmljZVJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0SUQpIHx8ICFhbGxvd2VkLmhhc1ZhbHVlKCkp
IHsKICAgICAgICAgICAgIGhhbmRsZXIoeyB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtNTg1LDcgKzU4NSw3IEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHIKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsIHVzZXJNZWRpYUlEKTsKIAog
ICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgdXNlck1lZGlhSUQsIGZyYW1lSUQs
IHVzZXJNZWRpYURvY3VtZW50T3JpZ2luID0gdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4uY29weVJl
ZigpLCB0b3BMZXZlbERvY3VtZW50T3JpZ2luID0gdG9wTGV2ZWxEb2N1bWVudE9yaWdpbi5jb3B5
UmVmKCldKE9wdGlvbmFsPGJvb2w+IG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpIG11dGFibGUg
ewotICAgICAgICBpZiAoIW9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpCisgICAgICAgIGlmICgh
b3JpZ2luSGFzUGVyc2lzdGVudEFjY2Vzcy5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIGlmICghbV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0F1dG9tYXRpY1Byb2Nlc3NX
YXJtaW5nRW5hYmxlZEJ5Q2xpZW50LnZhbHVlT3IobV9jbGllbnRXb3VsZEJlbmVmaXRGcm9tQXV0
b21hdGljUHJvY2Vzc1ByZXdhcm1pbmcpOwogICAgIH0KIAotICAgIGJvb2wgd2FzQXV0b21hdGlj
UHJvY2Vzc1dhcm1pbmdTZXRCeUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pc0F1dG9tYXRp
Y1Byb2Nlc3NXYXJtaW5nRW5hYmxlZEJ5Q2xpZW50OyB9CisgICAgYm9vbCB3YXNBdXRvbWF0aWNQ
cm9jZXNzV2FybWluZ1NldEJ5Q2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0F1dG9tYXRpY1By
b2Nlc3NXYXJtaW5nRW5hYmxlZEJ5Q2xpZW50Lmhhc1ZhbHVlKCk7IH0KICAgICB2b2lkIHNldElz
QXV0b21hdGljUHJvY2Vzc1dhcm1pbmdFbmFibGVkKGJvb2wgdmFsdWUpIHsgbV9pc0F1dG9tYXRp
Y1Byb2Nlc3NXYXJtaW5nRW5hYmxlZEJ5Q2xpZW50ID0gdmFsdWU7IH0KIAogICAgIHZvaWQgc2V0
VXNlc1dlYlByb2Nlc3NDYWNoZShib29sIHZhbHVlKSB7IG1fdXNlc1dlYlByb2Nlc3NDYWNoZSA9
IHZhbHVlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vi
c2l0ZVBvbGljaWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMubW0JKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCAtICh2b2lkKXNldERldmljZU9yaWVudGF0aW9u
QW5kTW90aW9uQWNjCiAKIC0gKF9XS1dlYnNpdGVEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2Vzc1BvbGljeSlkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1BvbGljeQogewotICAg
IGlmICghX3dlYnNpdGVQb2xpY2llcy0+ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NT
dGF0ZSgpKQorICAgIGlmICghX3dlYnNpdGVQb2xpY2llcy0+ZGV2aWNlT3JpZW50YXRpb25BbmRN
b3Rpb25BY2Nlc3NTdGF0ZSgpLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBfV0tXZWJzaXRl
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NQb2xpY3lBc2s7CiAgICAgcmV0dXJuICpf
d2Vic2l0ZVBvbGljaWVzLT5kZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1N0YXRlKCkg
PyBfV0tXZWJzaXRlRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NQb2xpY3lHcmFudCA6
IF9XS1dlYnNpdGVEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1BvbGljeURlbnk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uQ2xpZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0F1dG9tYXRpb25D
bGllbnQubW0JKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL0F1dG9tYXRpb25DbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTc2LDkgKzc2LDkgQEAg
Ym9vbCBBdXRvbWF0aW9uQ2xpZW50OjpyZW1vdGVBdXRvbWF0aW9uQQogdm9pZCBBdXRvbWF0aW9u
Q2xpZW50OjpyZXF1ZXN0QXV0b21hdGlvblNlc3Npb24oY29uc3QgU3RyaW5nJiBzZXNzaW9uSWRl
bnRpZmllciwgY29uc3QgUmVtb3RlSW5zcGVjdG9yOjpDbGllbnQ6OlNlc3Npb25DYXBhYmlsaXRp
ZXMmIHNlc3Npb25DYXBhYmlsaXRpZXMpCiB7CiAgICAgX1dLQXV0b21hdGlvblNlc3Npb25Db25m
aWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tbX1dLQXV0b21hdGlvblNlc3Npb25Db25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgaWYgKHNlc3Npb25DYXBhYmls
aXRpZXMuYWxsb3dJbnNlY3VyZU1lZGlhQ2FwdHVyZSkKKyAgICBpZiAoc2Vzc2lvbkNhcGFiaWxp
dGllcy5hbGxvd0luc2VjdXJlTWVkaWFDYXB0dXJlLmhhc1ZhbHVlKCkpCiAgICAgICAgIGNvbmZp
Z3VyYXRpb24uYWxsb3dzSW5zZWN1cmVNZWRpYUNhcHR1cmUgPSBzZXNzaW9uQ2FwYWJpbGl0aWVz
LmFsbG93SW5zZWN1cmVNZWRpYUNhcHR1cmUudmFsdWUoKTsKLSAgICBpZiAoc2Vzc2lvbkNhcGFi
aWxpdGllcy5zdXBwcmVzc0lDRUNhbmRpZGF0ZUZpbHRlcmluZykKKyAgICBpZiAoc2Vzc2lvbkNh
cGFiaWxpdGllcy5zdXBwcmVzc0lDRUNhbmRpZGF0ZUZpbHRlcmluZy5oYXNWYWx1ZSgpKQogICAg
ICAgICBjb25maWd1cmF0aW9uLnN1cHByZXNzZXNJQ0VDYW5kaWRhdGVGaWx0ZXJpbmcgPSBzZXNz
aW9uQ2FwYWJpbGl0aWVzLnN1cHByZXNzSUNFQ2FuZGlkYXRlRmlsdGVyaW5nLnZhbHVlKCk7CiAK
ICAgICAvLyBGb3JjZSBjbGllbnRzIHRvIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgYSBzZXNzaW9uIGFz
eW5jaHJvbm91c2x5LiBPdGhlcndpc2UsCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzVm9pY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lz
Vm9pY2UuaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDEyICs3MCwxMiBAQCBPcHRpb25hbDxXZWJTcGVlY2hTeW50aGVzaXNWb2ljZT4gV2ViU3Bl
CiAKICAgICBPcHRpb25hbDxib29sPiBsb2NhbFNlcnZpY2U7CiAgICAgZGVjb2RlciA+PiBsb2Nh
bFNlcnZpY2U7Ci0gICAgaWYgKCFsb2NhbFNlcnZpY2UpCisgICAgaWYgKCFsb2NhbFNlcnZpY2Uu
aGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIE9wdGlvbmFs
PGJvb2w+IGRlZmF1bHRMYW5nOwogICAgIGRlY29kZXIgPj4gZGVmYXVsdExhbmc7Ci0gICAgaWYg
KCFkZWZhdWx0TGFuZykKKyAgICBpZiAoIWRlZmF1bHRMYW5nLmhhc1ZhbHVlKCkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICByZXR1cm4ge3sgV1RGTW92ZSgqdm9pY2VVUkkp
LCBXVEZNb3ZlKCpuYW1lKSwgV1RGTW92ZSgqbGFuZyksIFdURk1vdmUoKmxvY2FsU2VydmljZSks
IFdURk1vdmUoKmRlZmF1bHRMYW5nKSB9fTt9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDM2ODApCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxOS0wMy0zMCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIENvbnNpZGVy
IHJlbW92aW5nIE9wdGlvbmFsPGJvb2w+OjpvcGVyYXRvciBib29sCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY0MjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGlu
Z3MvSlNXcmFwcGFibGUuaDoKKyAgICAgICAgKFdUUjo6SlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxs
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GdW5jdGlvbi5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxOS0wMy0zMCAgRG9taW5payBJbmZ1ZWhy
ICA8ZGluZnVlaHJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ01ha2VdIGFkZCB0ZXN0ZGZnIGFz
IHRhcmdldCB3aXRoIGJ1aWxkLWpzYwpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5k
aW5ncy9KU1dyYXBwYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
QmluZGluZ3MvSlNXcmFwcGFibGUuaAkocmV2aXNpb24gMjQzNTY2KQorKysgVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw3IEBAIHB1YmxpYzoKIAogaW5saW5lIEpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VCb29sZWFu
T3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBPcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdmFsdWUudmFsdWUo
KSkgOiBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCk7CisgICAgcmV0dXJuIHZhbHVlLmhhc1ZhbHVl
KCkgPyBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdmFsdWUudmFsdWUoKSkgOiBKU1ZhbHVl
TWFrZU51bGwoY29udGV4dCk7CiB9CiAKIGlubGluZSBPcHRpb25hbDxib29sPiBKU1ZhbHVlVG9O
dWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyNDM1NjYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNSw3ICsyMDUsNyBAQCBURVNUKFdURl9GdW5jdGlvbiwgQXNz
aWduQmVmb3JlRGVzdHJveSkKICAgICBhID0gW10gewogICAgICAgICByZXR1cm4gMVU7CiAgICAg
fTsKLSAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxib29sPihGdW5jdGlvbkRlc3RydWN0aW9u
Q2hlY2tlcjo6ZnVuY3Rpb25Bc0Jvb2wpKTsKKyAgICBFWFBFQ1RfVFJVRShGdW5jdGlvbkRlc3Ry
dWN0aW9uQ2hlY2tlcjo6ZnVuY3Rpb25Bc0Jvb2wuaGFzVmFsdWUoKSk7CiAgICAgRVhQRUNUX1RS
VUUoc3RhdGljX2Nhc3Q8Ym9vbD4oRnVuY3Rpb25EZXN0cnVjdGlvbkNoZWNrZXI6OmZ1bmN0aW9u
UmVzdWx0KSk7CiAgICAgRVhQRUNUX1RSVUUoRnVuY3Rpb25EZXN0cnVjdGlvbkNoZWNrZXI6OmZ1
bmN0aW9uQXNCb29sLnZhbHVlKCkpOwogICAgIEVYUEVDVF9FUSgxVSwgRnVuY3Rpb25EZXN0cnVj
dGlvbkNoZWNrZXI6OmZ1bmN0aW9uUmVzdWx0LnZhbHVlKCkpOwpAQCAtMjE0LDcgKzIxNCw3IEBA
IFRFU1QoV1RGX0Z1bmN0aW9uLCBBc3NpZ25CZWZvcmVEZXN0cm95KQogCiAgICAgYSA9IEZ1bmN0
aW9uRGVzdHJ1Y3Rpb25DaGVja2VyKGEpOwogICAgIGEgPSBNb3ZlT25seSB7IDIgfTsKLSAgICBF
WFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxib29sPihGdW5jdGlvbkRlc3RydWN0aW9uQ2hlY2tlcjo6
ZnVuY3Rpb25Bc0Jvb2wpKTsKKyAgICBFWFBFQ1RfVFJVRShGdW5jdGlvbkRlc3RydWN0aW9uQ2hl
Y2tlcjo6ZnVuY3Rpb25Bc0Jvb2wuaGFzVmFsdWUoKSk7CiAgICAgRVhQRUNUX1RSVUUoc3RhdGlj
X2Nhc3Q8Ym9vbD4oRnVuY3Rpb25EZXN0cnVjdGlvbkNoZWNrZXI6OmZ1bmN0aW9uUmVzdWx0KSk7
CiAgICAgRVhQRUNUX1RSVUUoRnVuY3Rpb25EZXN0cnVjdGlvbkNoZWNrZXI6OmZ1bmN0aW9uQXNC
b29sLnZhbHVlKCkpOwogICAgIEVYUEVDVF9FUSgyVSwgRnVuY3Rpb25EZXN0cnVjdGlvbkNoZWNr
ZXI6OmZ1bmN0aW9uUmVzdWx0LnZhbHVlKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366367</attachid>
            <date>2019-03-30 13:03:53 -0700</date>
            <delta_ts>2019-03-30 13:03:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>117384</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE5LTAzLTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQ29uc2lkZXIgcmVtb3ZpbmcgT3B0aW9uYWw8Ym9vbD46Om9wZXJhdG9yIGJv
b2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjQy
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNI
YXNPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoK
KyAgICAgICAgKEpTQzo6dG9Qcm9wZXJ0eURlc2NyaXB0b3IpOgorCiAyMDE5LTAzLTI3ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gT3duZXIgb2Yg
d2F0Y2hwb2ludHMgc2hvdWxkIHZhbGlkYXRlIGF0IEdDIGZpbmFsaXppbmcgcGhhc2UKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwogICAgIEhhc093blByb3BlcnR5
Q2FjaGUqIGhhc093blByb3BlcnR5Q2FjaGUgPSB2bS5lbnN1cmVIYXNPd25Qcm9wZXJ0eUNhY2hl
KCk7Ci0gICAgaWYgKE9wdGlvbmFsPGJvb2w+IHJlc3VsdCA9IGhhc093blByb3BlcnR5Q2FjaGUt
PmdldChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgQVNTRVJUKCpyZXN1bHQg
PT0gdGhpc09iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSk7Ci0gICAg
ICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKCpyZXN1bHQpKTsKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPGJvb2w+
IHJlc3VsdCA9IGhhc093blByb3BlcnR5Q2FjaGUtPmdldChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgIGlmIChyZXN1bHQuaGFzVmFsdWUoKSkgeworICAgICAgICAgICAgQVNTRVJU
KCpyZXN1bHQgPT0gdGhpc09iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1l
KSk7CisgICAgICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oKnJlc3VsdCkpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAy
NDM1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTYgKzk4LDE5IEBAIGlubGluZSBQcm9wZXJ0eURl
c2NyaXB0b3IgdG9Qcm9wZXJ0eURlc2MKICAgICAvLyBXZSBhc3N1bWUgdGhhdCB2YWxpZGF0aW9u
IGlzIGFscmVhZHkgZG9uZS4KICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKIAotICAgIGlm
IChPcHRpb25hbDxib29sPiBlbnVtZXJhYmxlID0gYXR0cmlidXRlcy5lbnVtZXJhYmxlKCkpCisg
ICAgT3B0aW9uYWw8Ym9vbD4gZW51bWVyYWJsZSA9IGF0dHJpYnV0ZXMuZW51bWVyYWJsZSgpOwor
ICAgIGlmIChlbnVtZXJhYmxlLmhhc1ZhbHVlKCkpCiAgICAgICAgIGRlc2Muc2V0RW51bWVyYWJs
ZShlbnVtZXJhYmxlLnZhbHVlKCkpOwogCi0gICAgaWYgKE9wdGlvbmFsPGJvb2w+IGNvbmZpZ3Vy
YWJsZSA9IGF0dHJpYnV0ZXMuY29uZmlndXJhYmxlKCkpCisgICAgT3B0aW9uYWw8Ym9vbD4gY29u
ZmlndXJhYmxlID0gYXR0cmlidXRlcy5jb25maWd1cmFibGUoKTsKKyAgICBpZiAoY29uZmlndXJh
YmxlLmhhc1ZhbHVlKCkpCiAgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGNvbmZpZ3VyYWJs
ZS52YWx1ZSgpKTsKIAogICAgIGlmIChhdHRyaWJ1dGVzLmhhc1ZhbHVlKCkpCiAgICAgICAgIGRl
c2Muc2V0VmFsdWUodmFsdWUpOwogCi0gICAgaWYgKE9wdGlvbmFsPGJvb2w+IHdyaXRhYmxlID0g
YXR0cmlidXRlcy53cml0YWJsZSgpKQorICAgIE9wdGlvbmFsPGJvb2w+IHdyaXRhYmxlID0gYXR0
cmlidXRlcy53cml0YWJsZSgpOworICAgIGlmICh3cml0YWJsZS5oYXNWYWx1ZSgpKQogICAgICAg
ICBkZXNjLnNldFdyaXRhYmxlKHdyaXRhYmxlLnZhbHVlKCkpOwogCiAgICAgaWYgKGF0dHJpYnV0
ZXMuaGFzR2V0KCkpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxOS0wMy0zMCAgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIENvbnNpZGVyIHJlbW92
aW5nIE9wdGlvbmFsPGJvb2w+OjpvcGVyYXRvciBib29sCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9hYnNlaWwtY3Bw
L2Fic2wvdHlwZXMvb3B0aW9uYWwuaDoKKyAgICAgICAgKGFic2w6Om9wdGlvbmFsOjp2YWx1ZSBj
b25zdCk6CisgICAgICAgIChhYnNsOjpvcHRpb25hbDo6dmFsdWUpOgorICAgICAgICAoYWJzbDo6
b3B0aW9uYWw6OnZhbHVlX29yIGNvbnN0KToKKyAgICAgICAgKGFic2w6Om9wdGlvbmFsOjp2YWx1
ZV9vcik6CisgICAgICAgIChhYnNsOjpvcGVyYXRvcj09KToKKyAgICAgICAgKGFic2w6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoYWJzbDo6b3BlcmF0b3I8KToKKyAgICAgICAgKGFic2w6Om9wZXJh
dG9yPD0pOgorICAgICAgICAoYWJzbDo6b3BlcmF0b3I+KToKKyAgICAgICAgKGFic2w6Om9wZXJh
dG9yPj0pOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2F1ZGlvX29wdGlvbnMuY2M6Cisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9tZWRpYS9iYXNlL21lZGlhY2hhbm5lbC5oOgorICAgICAg
ICAoY3JpY2tldDo6VG9TdHJpbmdJZlNldCk6CisgICAgICAgIChjcmlja2V0OjpWaWRlb09wdGlv
bnM6OlNldEZyb20pOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0
Y3ZpZGVvZW5naW5lLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbWVkaWEvZW5naW5lL3dl
YnJ0Y3ZvaWNlZW5naW5lLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19jb2RpbmcvYXVkaW9fbmV0d29ya19hZGFwdG9yL2RlYnVnX2R1bXBfd3JpdGVyLmNjOgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19jb2RpbmcvYXVkaW9fbmV0d29ya19h
ZGFwdG9yL2R0eF9jb250cm9sbGVyLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19jb2RpbmcvYXVkaW9fbmV0d29ya19hZGFwdG9yL2ZlY19jb250cm9sbGVyX3JwbHJf
YmFzZWQuY2M6CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2NvZGluZy9j
b2RlY3Mvb3B1cy9hdWRpb19lbmNvZGVyX29wdXMuY2M6CisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9wYy9qc2VwdHJhbnNwb3J0Y29udHJvbGxlci5oOgorICAgICAgICAod2VicnRjOjpKc2VwVHJh
bnNwb3J0Q29udHJvbGxlcjo6aW5pdGlhbF9vZmZlcmVyIGNvbnN0KToKKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL3BjL3BlZXJjb25uZWN0aW9uLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMv
cnRjX2Jhc2UvZXhwZXJpbWVudHMvZmllbGRfdHJpYWxfcGFyc2VyLmNjOgorICAgICAgICAqIFNv
dXJjZS93ZWJydGMvdmlkZW8vcXVhbGl0eV90aHJlc2hvbGQuY2M6CisgICAgICAgICogU291cmNl
L3dlYnJ0Yy92aWRlby9yZWNlaXZlX3N0YXRpc3RpY3NfcHJveHkuY2M6CisKIDIwMTktMDMtMjIg
IEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBUaGlu
TFRPIHN1cHBvcnQgaW4gUHJvZHVjdGlvbiBidWlsZHMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYWJzZWlsLWNwcC9hYnNsL3R5cGVzL29wdGlv
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9hYnNlaWwtY3BwL2Fic2wvdHlwZXMvb3B0aW9uYWwuaAkocmV2aXNpb24gMjQz
NTY2KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9h
YnNlaWwtY3BwL2Fic2wvdHlwZXMvb3B0aW9uYWwuaAkod29ya2luZyBjb3B5KQpAQCAtODEzLDcg
KzgxMyw3IEBAIGNsYXNzIG9wdGlvbmFsIDogcHJpdmF0ZSBvcHRpb25hbF9pbnRlcm4KICAgLy8g
ICAgIC8vIG9wdCBpcyBlbXB0eS4KICAgLy8gICB9CiAgIC8vCi0gIGNvbnN0ZXhwciBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdGhpcy0+ZW5nYWdlZF87
IH0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgWCA9IFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8
IXN0ZDo6aXNfc2FtZTxib29sLCBYPjo6dmFsdWU+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdGhpcy0+ZW5nYWdl
ZF87IH0KIAogICAvLyBvcHRpb25hbDo6aGFzX3ZhbHVlKCkKICAgLy8KQEAgLTgzNCwyNCArODM0
LDI0IEBAIGNsYXNzIG9wdGlvbmFsIDogcHJpdmF0ZSBvcHRpb25hbF9pbnRlcm4KICAgLy8gdGhl
IGBUYCBzdWItb2JqZWN0LiBUaHJvd3MgYGFic2w6OmJhZF9vcHRpb25hbF9hY2Nlc3NgIHdoZW4g
dGhlIGBvcHRpb25hbGAKICAgLy8gaXMgZW1wdHkuCiAgIGNvbnN0ZXhwciBjb25zdCBUJiB2YWx1
ZSgpIGNvbnN0ICYgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPigqdGhpcykKKyAgICBy
ZXR1cm4gdGhpcy0+aGFzX3ZhbHVlKCkKICAgICAgICAgICAgICAgID8gcmVmZXJlbmNlKCkKICAg
ICAgICAgICAgICAgIDogKG9wdGlvbmFsX2ludGVybmFsOjp0aHJvd19iYWRfb3B0aW9uYWxfYWNj
ZXNzKCksIHJlZmVyZW5jZSgpKTsKICAgfQogICBUJiB2YWx1ZSgpICYgewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxib29sPigqdGhpcykKKyAgICByZXR1cm4gdGhpcy0+aGFzX3ZhbHVlKCkKICAg
ICAgICAgICAgICAgID8gcmVmZXJlbmNlKCkKICAgICAgICAgICAgICAgIDogKG9wdGlvbmFsX2lu
dGVybmFsOjp0aHJvd19iYWRfb3B0aW9uYWxfYWNjZXNzKCksIHJlZmVyZW5jZSgpKTsKICAgfQog
ICBUJiYgdmFsdWUoKSAmJiB7ICAvLyBOT0xJTlQoYnVpbGQvYysrMTEpCiAgICAgcmV0dXJuIHN0
ZDo6bW92ZSgKLSAgICAgICAgc3RhdGljX2Nhc3Q8Ym9vbD4oKnRoaXMpCisgICAgICAgIHRoaXMt
Pmhhc192YWx1ZSgpCiAgICAgICAgICAgICA/IHJlZmVyZW5jZSgpCiAgICAgICAgICAgICA6IChv
cHRpb25hbF9pbnRlcm5hbDo6dGhyb3dfYmFkX29wdGlvbmFsX2FjY2VzcygpLCByZWZlcmVuY2Uo
KSkpOwogICB9CiAgIGNvbnN0ZXhwciBjb25zdCBUJiYgdmFsdWUoKSBjb25zdCAmJiB7ICAvLyBO
T0xJTlQoYnVpbGQvYysrMTEpCiAgICAgcmV0dXJuIGFic2w6Om1vdmUoCi0gICAgICAgIHN0YXRp
Y19jYXN0PGJvb2w+KCp0aGlzKQorICAgICAgICB0aGlzLT5oYXNfdmFsdWUoKQogICAgICAgICAg
ICAgPyByZWZlcmVuY2UoKQogICAgICAgICAgICAgOiAob3B0aW9uYWxfaW50ZXJuYWw6OnRocm93
X2JhZF9vcHRpb25hbF9hY2Nlc3MoKSwgcmVmZXJlbmNlKCkpKTsKICAgfQpAQCAtODY5LDcgKzg2
OSw3IEBAIGNsYXNzIG9wdGlvbmFsIDogcHJpdmF0ZSBvcHRpb25hbF9pbnRlcm4KICAgICAgICAg
ICAgICAgICAgICJvcHRpb25hbDxUPjo6dmFsdWVfb3I6IFQgbXVzdCBieSBjb3B5IGNvbnN0cnVj
dGlibGUiKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29udmVydGlibGU8VSYmLCB2YWx1
ZV90eXBlPjo6dmFsdWUsCiAgICAgICAgICAgICAgICAgICAib3B0aW9uYWw8VD46OnZhbHVlX29y
OiBVIG11c3QgYmUgY29udmVydGlibGUgdG8gVCIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxi
b29sPigqdGhpcykKKyAgICByZXR1cm4gdGhpcy0+aGFzX3ZhbHVlKCkKICAgICAgICAgICAgICAg
ID8gKip0aGlzCiAgICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PFQ+KGFic2w6OmZvcndhcmQ8
VT4odikpOwogICB9CkBAIC04NzksNyArODc5LDcgQEAgY2xhc3Mgb3B0aW9uYWwgOiBwcml2YXRl
IG9wdGlvbmFsX2ludGVybgogICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsPFQ+Ojp2YWx1ZV9v
cjogVCBtdXN0IGJ5IGNvcHkgY29uc3RydWN0aWJsZSIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19jb252ZXJ0aWJsZTxVJiYsIHZhbHVlX3R5cGU+Ojp2YWx1ZSwKICAgICAgICAgICAgICAg
ICAgICJvcHRpb25hbDxUPjo6dmFsdWVfb3I6IFUgbXVzdCBiZSBjb252ZXJ0aWJsZSB0byBUIik7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KCp0aGlzKSA/IHN0ZDo6bW92ZSgqKnRoaXMp
CisgICAgcmV0dXJuIHRoaXMtPmhhc192YWx1ZSgpID8gc3RkOjptb3ZlKCoqdGhpcykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8VD4oc3RkOjpmb3J3
YXJkPFU+KHYpKTsKICAgfQogCkBAIC05NjUsOSArOTY1LDkgQEAgY29uc3RleHByIG9wdGlvbmFs
PFQ+IG1ha2Vfb3B0aW9uYWwoc3RkOgogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
CiBjb25zdGV4cHIgYXV0byBvcGVyYXRvcj09KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBv
cHRpb25hbDxVPiYgeSkKICAgICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVy
dGlibGVfdG9fYm9vbCgqeCA9PSAqeSkpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHgp
ICE9IHN0YXRpY19jYXN0PGJvb2w+KHkpCisgIHJldHVybiB4Lmhhc192YWx1ZSgpICE9IHkuaGFz
X3ZhbHVlKCkKICAgICAgICAgICAgICA/IGZhbHNlCi0gICAgICAgICAgICAgOiBzdGF0aWNfY2Fz
dDxib29sPih4KSA9PSBmYWxzZSA/IHRydWUKKyAgICAgICAgICAgICA6IHguaGFzX3ZhbHVlKCkg
PT0gZmFsc2UgPyB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IHN0YXRpY19jYXN0PGJvb2w+KCp4ID09ICp5KTsKIH0KIApAQCAtOTc2LDkgKzk3Niw5
IEBAIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yPT0oY29uc3Qgb3B0aW9uYWwKIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogY29uc3RleHByIGF1dG8gb3BlcmF0b3IhPShjb25zdCBv
cHRpb25hbDxUPiYgeCwgY29uc3Qgb3B0aW9uYWw8VT4mIHkpCiAgICAgLT4gZGVjbHR5cGUob3B0
aW9uYWxfaW50ZXJuYWw6OmNvbnZlcnRpYmxlX3RvX2Jvb2woKnggIT0gKnkpKSB7Ci0gIHJldHVy
biBzdGF0aWNfY2FzdDxib29sPih4KSAhPSBzdGF0aWNfY2FzdDxib29sPih5KQorICByZXR1cm4g
eC5oYXNfdmFsdWUoKSAhPSB5Lmhhc192YWx1ZSgpCiAgICAgICAgICAgICAgPyB0cnVlCi0gICAg
ICAgICAgICAgOiBzdGF0aWNfY2FzdDxib29sPih4KSA9PSBmYWxzZSA/IGZhbHNlCisgICAgICAg
ICAgICAgOiB4Lmhhc192YWx1ZSgpID09IGZhbHNlID8gZmFsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8Ym9vbD4oKnggIT0gKnkp
OwogfQogLy8gUmV0dXJuczogSWYgIXksIGZhbHNlOyBvdGhlcndpc2UsIGlmICF4LCB0cnVlOyBv
dGhlcndpc2UgKnggPCAqeS4KQEAgLTEwMTgsMTEgKzEwMTgsMTEgQEAgY29uc3RleHByIGJvb2wg
b3BlcmF0b3I9PShudWxsb3B0X3QsIGNvbgogfQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIG5v
ZXhjZXB0IHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHgpOworICByZXR1cm4geC5oYXNf
dmFsdWUoKTsKIH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHByIGJvb2wgb3BlcmF0
b3IhPShudWxsb3B0X3QsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KSBub2V4Y2VwdCB7Ci0gIHJldHVy
biBzdGF0aWNfY2FzdDxib29sPih4KTsKKyAgcmV0dXJuIHguaGFzX3ZhbHVlKCk7CiB9CiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBvcHRpb25h
bDxUPiYsIG51bGxvcHRfdCkgbm9leGNlcHQgewpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG9wdGlvbmFsPAogfQogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwobnVsbG9wdF90LCBjb25zdCBvcHRpb25hbDxU
PiYgeCkgbm9leGNlcHQgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oeCk7CisgIHJldHVy
biB4Lmhhc192YWx1ZSgpOwogfQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIG5vZXhjZXB0IHsK
QEAgLTEwNDIsNyArMTA0Miw3IEBAIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0obnVsbG9wdF90
LCBjb24KIH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KHgpOworICByZXR1cm4geC5oYXNfdmFsdWUoKTsKIH0KIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgogY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG51bGxvcHRfdCwgY29uc3Qg
b3B0aW9uYWw8VD4mKSBub2V4Y2VwdCB7CkBAIC0xMDY1LDYyICsxMDY1LDYyIEBAIGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0obnVsbG9wdF90LCBjb24KIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPgogY29uc3RleHByIGF1dG8gb3BlcmF0b3I9PShjb25zdCBvcHRpb25hbDxUPiYg
eCwgY29uc3QgVSYgdikKICAgICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVy
dGlibGVfdG9fYm9vbCgqeCA9PSB2KSkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oeCkg
PyBzdGF0aWNfY2FzdDxib29sPigqeCA9PSB2KSA6IGZhbHNlOworICByZXR1cm4geC5oYXNfdmFs
dWUoKSA/IHN0YXRpY19jYXN0PGJvb2w+KCp4ID09IHYpIDogZmFsc2U7CiB9CiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yPT0oY29uc3Qg
VSYgdiwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpCiAgICAgLT4gZGVjbHR5cGUob3B0aW9uYWxfaW50
ZXJuYWw6OmNvbnZlcnRpYmxlX3RvX2Jvb2wodiA9PSAqeCkpIHsKLSAgcmV0dXJuIHN0YXRpY19j
YXN0PGJvb2w+KHgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4odiA9PSAqeCkgOiBmYWxzZTsKKyAgcmV0
dXJuIHguaGFzX3ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxib29sPih2ID09ICp4KSA6IGZhbHNlOwog
fQogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiBjb25zdGV4cHIgYXV0byBvcGVy
YXRvciE9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBVJiB2KQogICAgIC0+IGRlY2x0eXBl
KG9wdGlvbmFsX2ludGVybmFsOjpjb252ZXJ0aWJsZV90b19ib29sKCp4ICE9IHYpKSB7Ci0gIHJl
dHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0YXRpY19jYXN0PGJvb2w+KCp4ICE9IHYpIDog
dHJ1ZTsKKyAgcmV0dXJuIHguaGFzX3ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxib29sPigqeCAhPSB2
KSA6IHRydWU7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0ZXhw
ciBhdXRvIG9wZXJhdG9yIT0oY29uc3QgVSYgdiwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpCiAgICAg
LT4gZGVjbHR5cGUob3B0aW9uYWxfaW50ZXJuYWw6OmNvbnZlcnRpYmxlX3RvX2Jvb2wodiAhPSAq
eCkpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4o
diAhPSAqeCkgOiB0cnVlOworICByZXR1cm4geC5oYXNfdmFsdWUoKSA/IHN0YXRpY19jYXN0PGJv
b2w+KHYgIT0gKngpIDogdHJ1ZTsKIH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PgogY29uc3RleHByIGF1dG8gb3BlcmF0b3I8KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBV
JiB2KQogICAgIC0+IGRlY2x0eXBlKG9wdGlvbmFsX2ludGVybmFsOjpjb252ZXJ0aWJsZV90b19i
b29sKCp4IDwgdikpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHgpID8gc3RhdGljX2Nh
c3Q8Ym9vbD4oKnggPCB2KSA6IHRydWU7CisgIHJldHVybiB4Lmhhc192YWx1ZSgpID8gc3RhdGlj
X2Nhc3Q8Ym9vbD4oKnggPCB2KSA6IHRydWU7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yPChjb25zdCBVJiB2LCBjb25zdCBvcHRp
b25hbDxUPiYgeCkKICAgICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVydGli
bGVfdG9fYm9vbCh2IDwgKngpKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0
YXRpY19jYXN0PGJvb2w+KHYgPCAqeCkgOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzX3ZhbHVlKCkg
PyBzdGF0aWNfY2FzdDxib29sPih2IDwgKngpIDogZmFsc2U7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yPD0oY29uc3Qgb3B0aW9u
YWw8VD4mIHgsIGNvbnN0IFUmIHYpCiAgICAgLT4gZGVjbHR5cGUob3B0aW9uYWxfaW50ZXJuYWw6
OmNvbnZlcnRpYmxlX3RvX2Jvb2woKnggPD0gdikpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGJv
b2w+KHgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4oKnggPD0gdikgOiB0cnVlOworICByZXR1cm4geC5o
YXNfdmFsdWUoKSA/IHN0YXRpY19jYXN0PGJvb2w+KCp4IDw9IHYpIDogdHJ1ZTsKIH0KIHRlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogY29uc3RleHByIGF1dG8gb3BlcmF0b3I8PShj
b25zdCBVJiB2LCBjb25zdCBvcHRpb25hbDxUPiYgeCkKICAgICAtPiBkZWNsdHlwZShvcHRpb25h
bF9pbnRlcm5hbDo6Y29udmVydGlibGVfdG9fYm9vbCh2IDw9ICp4KSkgewotICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4oeCkgPyBzdGF0aWNfY2FzdDxib29sPih2IDw9ICp4KSA6IGZhbHNlOwor
ICByZXR1cm4geC5oYXNfdmFsdWUoKSA/IHN0YXRpY19jYXN0PGJvb2w+KHYgPD0gKngpIDogZmFs
c2U7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0ZXhwciBhdXRv
IG9wZXJhdG9yPihjb25zdCBvcHRpb25hbDxUPiYgeCwgY29uc3QgVSYgdikKICAgICAtPiBkZWNs
dHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVydGlibGVfdG9fYm9vbCgqeCA+IHYpKSB7Ci0g
IHJldHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0YXRpY19jYXN0PGJvb2w+KCp4ID4gdikg
OiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzX3ZhbHVlKCkgPyBzdGF0aWNfY2FzdDxib29sPigqeCA+
IHYpIDogZmFsc2U7CiB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNvbnN0
ZXhwciBhdXRvIG9wZXJhdG9yPihjb25zdCBVJiB2LCBjb25zdCBvcHRpb25hbDxUPiYgeCkKICAg
ICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29udmVydGlibGVfdG9fYm9vbCh2ID4g
KngpKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0YXRpY19jYXN0PGJvb2w+
KHYgPiAqeCkgOiB0cnVlOworICByZXR1cm4geC5oYXNfdmFsdWUoKSA/IHN0YXRpY19jYXN0PGJv
b2w+KHYgPiAqeCkgOiB0cnVlOwogfQogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
CiBjb25zdGV4cHIgYXV0byBvcGVyYXRvcj49KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBV
JiB2KQogICAgIC0+IGRlY2x0eXBlKG9wdGlvbmFsX2ludGVybmFsOjpjb252ZXJ0aWJsZV90b19i
b29sKCp4ID49IHYpKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih4KSA/IHN0YXRpY19j
YXN0PGJvb2w+KCp4ID49IHYpIDogZmFsc2U7CisgIHJldHVybiB4Lmhhc192YWx1ZSgpID8gc3Rh
dGljX2Nhc3Q8Ym9vbD4oKnggPj0gdikgOiBmYWxzZTsKIH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgogY29uc3RleHByIGF1dG8gb3BlcmF0b3I+PShjb25zdCBVJiB2LCBjb25z
dCBvcHRpb25hbDxUPiYgeCkKICAgICAtPiBkZWNsdHlwZShvcHRpb25hbF9pbnRlcm5hbDo6Y29u
dmVydGlibGVfdG9fYm9vbCh2ID49ICp4KSkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4o
eCkgPyBzdGF0aWNfY2FzdDxib29sPih2ID49ICp4KSA6IHRydWU7CisgIHJldHVybiB4Lmhhc192
YWx1ZSgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4odiA+PSAqeCkgOiB0cnVlOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgYWJzbApJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2F1ZGlvX29wdGlvbnMuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2F1ZGlvX29wdGlvbnMuY2MJKHJldmlzaW9u
IDI0MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hdWRpb19vcHRpb25zLmNjCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxNCArMTksMTQgQEAgdGVt
cGxhdGUgPGNsYXNzIFQ+CiB2b2lkIFRvU3RyaW5nSWZTZXQocnRjOjpTaW1wbGVTdHJpbmdCdWls
ZGVyKiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioga2V5LAogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGFic2w6Om9wdGlvbmFsPFQ+JiB2YWwpIHsKLSAgaWYgKHZhbCkg
eworICBpZiAodmFsLmhhc192YWx1ZSgpKSB7CiAgICAgKCpyZXN1bHQpIDw8IGtleSA8PCAiOiAi
IDw8ICp2YWwgPDwgIiwgIjsKICAgfQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHZvaWQg
U2V0RnJvbShhYnNsOjpvcHRpb25hbDxUPiogcywgY29uc3QgYWJzbDo6b3B0aW9uYWw8VD4mIG8p
IHsKLSAgaWYgKG8pIHsKKyAgaWYgKG8uaGFzX3ZhbHVlKCkpIHsKICAgICAqcyA9IG87CiAgIH0K
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21lZGlh
L2Jhc2UvbWVkaWFjaGFubmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbWVkaWEvYmFzZS9tZWRpYWNoYW5uZWwuaAkocmV2aXNpb24g
MjQzNTY2KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbWVk
aWEvYmFzZS9tZWRpYWNoYW5uZWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjksMTAgKzY5LDEwIEBA
IHRlbXBsYXRlIDxjbGFzcyBUPgogc3RhdGljIHN0ZDo6c3RyaW5nIFRvU3RyaW5nSWZTZXQoY29u
c3QgY2hhcioga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJz
bDo6b3B0aW9uYWw8VD4mIHZhbCkgewogICBzdGQ6OnN0cmluZyBzdHI7Ci0gIGlmICh2YWwpIHsK
KyAgaWYgKHZhbC5oYXNfdmFsdWUoKSkgewogICAgIHN0ciA9IGtleTsKICAgICBzdHIgKz0gIjog
IjsKLSAgICBzdHIgKz0gdmFsID8gcnRjOjpUb1N0cmluZygqdmFsKSA6ICIiOworICAgIHN0ciAr
PSB2YWwuaGFzX3ZhbHVlKCkgPyBydGM6OlRvU3RyaW5nKCp2YWwpIDogIiI7CiAgICAgc3RyICs9
ICIsICI7CiAgIH0KICAgcmV0dXJuIHN0cjsKQEAgLTE0MSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmlk
ZW9PcHRpb25zIHsKICBwcml2YXRlOgogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgc3RhdGlj
IHZvaWQgU2V0RnJvbShhYnNsOjpvcHRpb25hbDxUPiogcywgY29uc3QgYWJzbDo6b3B0aW9uYWw8
VD4mIG8pIHsKLSAgICBpZiAobykgeworICAgIGlmIChvLmhhc192YWx1ZSgpKSB7CiAgICAgICAq
cyA9IG87CiAgICAgfQogICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9lbmdpbmUuY2MKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbWVkaWEvZW5naW5l
L3dlYnJ0Y3ZpZGVvZW5naW5lLmNjCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9lbmdp
bmUuY2MJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw3ICszMzQsNyBAQCBXZWJSdGNWaWRlb0NoYW5u
ZWw6OldlYlJ0Y1ZpZGVvU2VuZFN0cmVhCiAgICAgZGVub2lzaW5nID0gZmFsc2U7CiAgIH0gZWxz
ZSB7CiAgICAgLy8gVXNlIGNvZGVjIGRlZmF1bHQgaWYgdmlkZW9fbm9pc2VfcmVkdWN0aW9uIGlz
IHVuc2V0LgotICAgIGNvZGVjX2RlZmF1bHRfZGVub2lzaW5nID0gIXBhcmFtZXRlcnNfLm9wdGlv
bnMudmlkZW9fbm9pc2VfcmVkdWN0aW9uOworICAgIGNvZGVjX2RlZmF1bHRfZGVub2lzaW5nID0g
IXBhcmFtZXRlcnNfLm9wdGlvbnMudmlkZW9fbm9pc2VfcmVkdWN0aW9uLmhhc192YWx1ZSgpOwog
ICAgIGRlbm9pc2luZyA9IHBhcmFtZXRlcnNfLm9wdGlvbnMudmlkZW9fbm9pc2VfcmVkdWN0aW9u
LnZhbHVlX29yKGZhbHNlKTsKICAgfQogCkBAIC02OTIsNyArNjkyLDcgQEAgYm9vbCBXZWJSdGNW
aWRlb0NoYW5uZWw6OlNldFNlbmRQYXJhbWV0ZQogICAgIFJUQ19MT0coTFNfSU5GTykgPDwgIlVz
aW5nIGNvZGVjOiAiIDw8IGNvZGVjX3NldHRpbmdzLmNvZGVjLlRvU3RyaW5nKCk7CiAgIH0KIAot
ICBpZiAoY2hhbmdlZF9wYXJhbXMuZXh0bWFwX2FsbG93X21peGVkKSB7CisgIGlmIChjaGFuZ2Vk
X3BhcmFtcy5leHRtYXBfYWxsb3dfbWl4ZWQuaGFzX3ZhbHVlKCkpIHsKICAgICBTZXRFeHRtYXBB
bGxvd01peGVkKCpjaGFuZ2VkX3BhcmFtcy5leHRtYXBfYWxsb3dfbWl4ZWQpOwogICB9CiAgIGlm
IChjaGFuZ2VkX3BhcmFtcy5ydHBfaGVhZGVyX2V4dGVuc2lvbnMpIHsKQEAgLTE3ODAsNyArMTc4
MCw3IEBAIHZvaWQgV2ViUnRjVmlkZW9DaGFubmVsOjpXZWJSdGNWaWRlb1NlbmQKICAgICAgICAg
cGFyYW1ldGVyc18uY29uZmlnLnJ0cC5ydGNwX21vZGUgPT0gd2VicnRjOjpSdGNwTW9kZTo6a1Jl
ZHVjZWRTaXplOwogICAgIHJlY3JlYXRlX3N0cmVhbSA9IHRydWU7CiAgIH0KLSAgaWYgKHBhcmFt
cy5leHRtYXBfYWxsb3dfbWl4ZWQpIHsKKyAgaWYgKHBhcmFtcy5leHRtYXBfYWxsb3dfbWl4ZWQu
aGFzX3ZhbHVlKCkpIHsKICAgICBwYXJhbWV0ZXJzXy5jb25maWcucnRwLmV4dG1hcF9hbGxvd19t
aXhlZCA9ICpwYXJhbXMuZXh0bWFwX2FsbG93X21peGVkOwogICAgIHJlY3JlYXRlX3N0cmVhbSA9
IHRydWU7CiAgIH0KQEAgLTE3OTcsNyArMTc5Nyw3IEBAIHZvaWQgV2ViUnRjVmlkZW9DaGFubmVs
OjpXZWJSdGNWaWRlb1NlbmQKICAgICBwYXJhbWV0ZXJzXy5tYXhfYml0cmF0ZV9icHMgPSAqcGFy
YW1zLm1heF9iYW5kd2lkdGhfYnBzOwogICAgIFJlY29uZmlndXJlRW5jb2RlcigpOwogICB9Ci0g
IGlmIChwYXJhbXMuY29uZmVyZW5jZV9tb2RlKSB7CisgIGlmIChwYXJhbXMuY29uZmVyZW5jZV9t
b2RlLmhhc192YWx1ZSgpKSB7CiAgICAgcGFyYW1ldGVyc18uY29uZmVyZW5jZV9tb2RlID0gKnBh
cmFtcy5jb25mZXJlbmNlX21vZGU7CiAgIH0KIApAQCAtMTgwNSw3ICsxODA1LDcgQEAgdm9pZCBX
ZWJSdGNWaWRlb0NoYW5uZWw6OldlYlJ0Y1ZpZGVvU2VuZAogICBpZiAocGFyYW1zLmNvZGVjKSB7
CiAgICAgU2V0Q29kZWMoKnBhcmFtcy5jb2RlYyk7CiAgICAgcmVjcmVhdGVfc3RyZWFtID0gZmFs
c2U7ICAvLyBTZXRDb2RlYyBoYXMgYWxyZWFkeSByZWNyZWF0ZWQgdGhlIHN0cmVhbS4KLSAgfSBl
bHNlIGlmIChwYXJhbXMuY29uZmVyZW5jZV9tb2RlICYmIHBhcmFtZXRlcnNfLmNvZGVjX3NldHRp
bmdzKSB7CisgIH0gZWxzZSBpZiAocGFyYW1zLmNvbmZlcmVuY2VfbW9kZS5oYXNfdmFsdWUoKSAm
JiBwYXJhbWV0ZXJzXy5jb2RlY19zZXR0aW5ncy5oYXNfdmFsdWUoKSkgewogICAgIFNldENvZGVj
KCpwYXJhbWV0ZXJzXy5jb2RlY19zZXR0aW5ncyk7CiAgICAgcmVjcmVhdGVfc3RyZWFtID0gZmFs
c2U7ICAvLyBTZXRDb2RlYyBoYXMgYWxyZWFkeSByZWNyZWF0ZWQgdGhlIHN0cmVhbS4KICAgfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbWVkaWEvZW5n
aW5lL3dlYnJ0Y3ZvaWNlZW5naW5lLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21lZGlhL2VuZ2luZS93ZWJydGN2b2ljZWVuZ2luZS5j
YwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0Y3ZvaWNlZW5naW5lLmNjCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBWZXJpZnlVbmlxdWVQYXlsb2FkVHlwZXMoY29uc3Qg
c3RkOgogCiBhYnNsOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gR2V0QXVkaW9OZXR3b3JrQWRhcHRv
ckNvbmZpZygKICAgICBjb25zdCBBdWRpb09wdGlvbnMmIG9wdGlvbnMpIHsKLSAgaWYgKG9wdGlv
bnMuYXVkaW9fbmV0d29ya19hZGFwdG9yICYmICpvcHRpb25zLmF1ZGlvX25ldHdvcmtfYWRhcHRv
ciAmJgorICBpZiAob3B0aW9ucy5hdWRpb19uZXR3b3JrX2FkYXB0b3IuaGFzX3ZhbHVlKCkgJiYg
Km9wdGlvbnMuYXVkaW9fbmV0d29ya19hZGFwdG9yICYmCiAgICAgICBvcHRpb25zLmF1ZGlvX25l
dHdvcmtfYWRhcHRvcl9jb25maWcpIHsKICAgICAvLyBUdXJuIG9uIGF1ZGlvIG5ldHdvcmsgYWRh
cHRvciBvbmx5IHdoZW4gfG9wdGlvbnNfLmF1ZGlvX25ldHdvcmtfYWRhcHRvcnwKICAgICAvLyBl
cXVhbHMgdHJ1ZSBhbmQgfG9wdGlvbnNfLmF1ZGlvX25ldHdvcmtfYWRhcHRvcl9jb25maWd8IGhh
cyBhIHZhbHVlLgpAQCAtMzQzLDcgKzM0Myw3IEBAIGJvb2wgV2ViUnRjVm9pY2VFbmdpbmU6OkFw
cGx5T3B0aW9ucyhjb24KICAgLy8gd2hlcmUgdGhlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZC4K
ICAgYm9vbCB1c2VfZGVsYXlfYWdub3N0aWNfYWVjID0gZmFsc2U7CiAjaWYgIWRlZmluZWQoV0VC
UlRDX0lPUykKLSAgaWYgKG9wdGlvbnMuZGVsYXlfYWdub3N0aWNfYWVjKSB7CisgIGlmIChvcHRp
b25zLmRlbGF5X2Fnbm9zdGljX2FlYy5oYXNfdmFsdWUoKSkgewogICAgIHVzZV9kZWxheV9hZ25v
c3RpY19hZWMgPSAqb3B0aW9ucy5kZWxheV9hZ25vc3RpY19hZWM7CiAgICAgaWYgKHVzZV9kZWxh
eV9hZ25vc3RpY19hZWMpIHsKICAgICAgIG9wdGlvbnMuZWNob19jYW5jZWxsYXRpb24gPSB0cnVl
OwpAQCAtMzk1LDcgKzM5NSw3IEBAIGJvb2wgV2ViUnRjVm9pY2VFbmdpbmU6OkFwcGx5T3B0aW9u
cyhjb24KICAgfQogI2VuZGlmCiAKLSAgaWYgKG9wdGlvbnMuZWNob19jYW5jZWxsYXRpb24pIHsK
KyAgaWYgKG9wdGlvbnMuZWNob19jYW5jZWxsYXRpb24uaGFzX3ZhbHVlKCkpIHsKICAgICAvLyBD
aGVjayBpZiBwbGF0Zm9ybSBzdXBwb3J0cyBidWlsdC1pbiBFQy4gQ3VycmVudGx5IG9ubHkgc3Vw
cG9ydGVkIG9uCiAgICAgLy8gQW5kcm9pZCBhbmQgaW4gY29tYmluYXRpb24gd2l0aCBKYXZhIGJh
c2VkIGF1ZGlvIGxheWVyLgogICAgIC8vIFRPRE8oaGVucmlrYSk6IGludmVzdGlnYXRlIHBvc3Np
YmlsaXR5IHRvIHN1cHBvcnQgYnVpbHQtaW4gRUMgYWxzbwpAQCAtNDIwLDcgKzQyMCw3IEBAIGJv
b2wgV2ViUnRjVm9pY2VFbmdpbmU6OkFwcGx5T3B0aW9ucyhjb24KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlY19tb2RlKTsKICAgfQogCi0gIGlmIChvcHRpb25zLmF1dG9f
Z2Fpbl9jb250cm9sKSB7CisgIGlmIChvcHRpb25zLmF1dG9fZ2Fpbl9jb250cm9sLmhhc192YWx1
ZSgpKSB7CiAgICAgYm9vbCBidWlsdF9pbl9hZ2NfYXZhbGlhYmxlID0gYWRtKCktPkJ1aWx0SW5B
R0NJc0F2YWlsYWJsZSgpOwogICAgIGlmIChidWlsdF9pbl9hZ2NfYXZhbGlhYmxlKSB7CiAgICAg
ICBpZiAoYWRtKCktPkVuYWJsZUJ1aWx0SW5BR0MoKm9wdGlvbnMuYXV0b19nYWluX2NvbnRyb2wp
ID09IDAgJiYKQEAgLTQzNSw4ICs0MzUsOCBAQCBib29sIFdlYlJ0Y1ZvaWNlRW5naW5lOjpBcHBs
eU9wdGlvbnMoY29uCiAgICAgd2VicnRjOjphcG1faGVscGVyczo6U2V0QWdjU3RhdHVzKGFwbSgp
LCAqb3B0aW9ucy5hdXRvX2dhaW5fY29udHJvbCk7CiAgIH0KIAotICBpZiAob3B0aW9ucy50eF9h
Z2NfdGFyZ2V0X2Rib3YgfHwgb3B0aW9ucy50eF9hZ2NfZGlnaXRhbF9jb21wcmVzc2lvbl9nYWlu
IHx8Ci0gICAgICBvcHRpb25zLnR4X2FnY19saW1pdGVyKSB7CisgIGlmIChvcHRpb25zLnR4X2Fn
Y190YXJnZXRfZGJvdi5oYXNfdmFsdWUoKSB8fCBvcHRpb25zLnR4X2FnY19kaWdpdGFsX2NvbXBy
ZXNzaW9uX2dhaW4uaGFzX3ZhbHVlKCkgfHwKKyAgICAgIG9wdGlvbnMudHhfYWdjX2xpbWl0ZXIu
aGFzX3ZhbHVlKCkpIHsKICAgICAvLyBPdmVycmlkZSBkZWZhdWx0X2FnY19jb25maWdfLiBHZW5l
cmFsbHksIGFuIHVuc2V0IG9wdGlvbiBtZWFucyAibGVhdmUKICAgICAvLyB0aGUgVm9FIGJpdHMg
YWxvbmUiIGluIHRoaXMgZnVuY3Rpb24sIHNvIHdlIHdhbnQgd2hhdGV2ZXIgaXMgc2V0IHRvIGJl
CiAgICAgLy8gc3RvcmVkIGFzIHRoZSBuZXcgImRlZmF1bHQiLiBJZiB3ZSBkaWRuJ3QsIHRoZW4g
c2V0dGluZyBlLmcuCkBAIC00NTIsNyArNDUyLDcgQEAgYm9vbCBXZWJSdGNWb2ljZUVuZ2luZTo6
QXBwbHlPcHRpb25zKGNvbgogICAgIHdlYnJ0Yzo6YXBtX2hlbHBlcnM6OlNldEFnY0NvbmZpZyhh
cG0oKSwgZGVmYXVsdF9hZ2NfY29uZmlnXyk7CiAgIH0KIAotICBpZiAob3B0aW9ucy5ub2lzZV9z
dXBwcmVzc2lvbikgeworICBpZiAob3B0aW9ucy5ub2lzZV9zdXBwcmVzc2lvbi5oYXNfdmFsdWUo
KSkgewogICAgIGlmIChhZG0oKS0+QnVpbHRJbk5TSXNBdmFpbGFibGUoKSkgewogICAgICAgYm9v
bCBidWlsdGluX25zID0gKm9wdGlvbnMubm9pc2Vfc3VwcHJlc3Npb247CiAgICAgICBpZiAoYWRt
KCktPkVuYWJsZUJ1aWx0SW5OUyhidWlsdGluX25zKSA9PSAwICYmIGJ1aWx0aW5fbnMpIHsKQEAg
LTQ2Niw3ICs0NjYsNyBAQCBib29sIFdlYlJ0Y1ZvaWNlRW5naW5lOjpBcHBseU9wdGlvbnMoY29u
CiAgICAgd2VicnRjOjphcG1faGVscGVyczo6U2V0TnNTdGF0dXMoYXBtKCksICpvcHRpb25zLm5v
aXNlX3N1cHByZXNzaW9uKTsKICAgfQogCi0gIGlmIChvcHRpb25zLnN0ZXJlb19zd2FwcGluZykg
eworICBpZiAob3B0aW9ucy5zdGVyZW9fc3dhcHBpbmcuaGFzX3ZhbHVlKCkpIHsKICAgICBSVENf
TE9HKExTX0lORk8pIDw8ICJTdGVyZW8gc3dhcHBpbmcgZW5hYmxlZD8gIiA8PCAqb3B0aW9ucy5z
dGVyZW9fc3dhcHBpbmc7CiAgICAgYXVkaW9fc3RhdGUoKS0+U2V0U3RlcmVvQ2hhbm5lbFN3YXBw
aW5nKCpvcHRpb25zLnN0ZXJlb19zd2FwcGluZyk7CiAgIH0KQEAgLTQ3Nyw3ICs0NzcsNyBAQCBi
b29sIFdlYlJ0Y1ZvaWNlRW5naW5lOjpBcHBseU9wdGlvbnMoY29uCiAgICAgYXVkaW9faml0dGVy
X2J1ZmZlcl9tYXhfcGFja2V0c18gPQogICAgICAgICBzdGQ6Om1heCgyMCwgKm9wdGlvbnMuYXVk
aW9faml0dGVyX2J1ZmZlcl9tYXhfcGFja2V0cyk7CiAgIH0KLSAgaWYgKG9wdGlvbnMuYXVkaW9f
aml0dGVyX2J1ZmZlcl9mYXN0X2FjY2VsZXJhdGUpIHsKKyAgaWYgKG9wdGlvbnMuYXVkaW9faml0
dGVyX2J1ZmZlcl9mYXN0X2FjY2VsZXJhdGUuaGFzX3ZhbHVlKCkpIHsKICAgICBSVENfTE9HKExT
X0lORk8pIDw8ICJOZXRFcSBmYXN0IG1vZGU/ICIKICAgICAgICAgICAgICAgICAgICAgIDw8ICpv
cHRpb25zLmF1ZGlvX2ppdHRlcl9idWZmZXJfZmFzdF9hY2NlbGVyYXRlOwogICAgIGF1ZGlvX2pp
dHRlcl9idWZmZXJfZmFzdF9hY2NlbGVyYXRlXyA9CkBAIC00OTAsNyArNDkwLDcgQEAgYm9vbCBX
ZWJSdGNWb2ljZUVuZ2luZTo6QXBwbHlPcHRpb25zKGNvbgogICAgICAgICAqb3B0aW9ucy5hdWRp
b19qaXR0ZXJfYnVmZmVyX21pbl9kZWxheV9tczsKICAgfQogCi0gIGlmIChvcHRpb25zLnR5cGlu
Z19kZXRlY3Rpb24pIHsKKyAgaWYgKG9wdGlvbnMudHlwaW5nX2RldGVjdGlvbi5oYXNfdmFsdWUo
KSkgewogICAgIFJUQ19MT0coTFNfSU5GTykgPDwgIlR5cGluZyBkZXRlY3Rpb24gaXMgZW5hYmxl
ZD8gIgogICAgICAgICAgICAgICAgICAgICAgPDwgKm9wdGlvbnMudHlwaW5nX2RldGVjdGlvbjsK
ICAgICB3ZWJydGM6OmFwbV9oZWxwZXJzOjpTZXRUeXBpbmdEZXRlY3Rpb25TdGF0dXMoYXBtKCks
CkBAIC00OTksMjkgKzQ5OSwyOSBAQCBib29sIFdlYlJ0Y1ZvaWNlRW5naW5lOjpBcHBseU9wdGlv
bnMoY29uCiAKICAgd2VicnRjOjpDb25maWcgY29uZmlnOwogCi0gIGlmIChvcHRpb25zLmRlbGF5
X2Fnbm9zdGljX2FlYykKKyAgaWYgKG9wdGlvbnMuZGVsYXlfYWdub3N0aWNfYWVjLmhhc192YWx1
ZSgpKQogICAgIGRlbGF5X2Fnbm9zdGljX2FlY18gPSBvcHRpb25zLmRlbGF5X2Fnbm9zdGljX2Fl
YzsKLSAgaWYgKGRlbGF5X2Fnbm9zdGljX2FlY18pIHsKKyAgaWYgKGRlbGF5X2Fnbm9zdGljX2Fl
Y18uaGFzX3ZhbHVlKCkpIHsKICAgICBSVENfTE9HKExTX0lORk8pIDw8ICJEZWxheSBhZ25vc3Rp
YyBhZWMgaXMgZW5hYmxlZD8gIgogICAgICAgICAgICAgICAgICAgICAgPDwgKmRlbGF5X2Fnbm9z
dGljX2FlY187CiAgICAgY29uZmlnLlNldDx3ZWJydGM6OkRlbGF5QWdub3N0aWM+KAogICAgICAg
ICBuZXcgd2VicnRjOjpEZWxheUFnbm9zdGljKCpkZWxheV9hZ25vc3RpY19hZWNfKSk7CiAgIH0K
IAotICBpZiAob3B0aW9ucy5leHRlbmRlZF9maWx0ZXJfYWVjKSB7CisgIGlmIChvcHRpb25zLmV4
dGVuZGVkX2ZpbHRlcl9hZWMuaGFzX3ZhbHVlKCkpIHsKICAgICBleHRlbmRlZF9maWx0ZXJfYWVj
XyA9IG9wdGlvbnMuZXh0ZW5kZWRfZmlsdGVyX2FlYzsKICAgfQotICBpZiAoZXh0ZW5kZWRfZmls
dGVyX2FlY18pIHsKKyAgaWYgKGV4dGVuZGVkX2ZpbHRlcl9hZWNfLmhhc192YWx1ZSgpKSB7CiAg
ICAgUlRDX0xPRyhMU19JTkZPKSA8PCAiRXh0ZW5kZWQgZmlsdGVyIGFlYyBpcyBlbmFibGVkPyAi
CiAgICAgICAgICAgICAgICAgICAgICA8PCAqZXh0ZW5kZWRfZmlsdGVyX2FlY187CiAgICAgY29u
ZmlnLlNldDx3ZWJydGM6OkV4dGVuZGVkRmlsdGVyPigKICAgICAgICAgbmV3IHdlYnJ0Yzo6RXh0
ZW5kZWRGaWx0ZXIoKmV4dGVuZGVkX2ZpbHRlcl9hZWNfKSk7CiAgIH0KIAotICBpZiAob3B0aW9u
cy5leHBlcmltZW50YWxfbnMpIHsKKyAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudGFsX25zLmhhc192
YWx1ZSgpKSB7CiAgICAgZXhwZXJpbWVudGFsX25zXyA9IG9wdGlvbnMuZXhwZXJpbWVudGFsX25z
OwogICB9Ci0gIGlmIChleHBlcmltZW50YWxfbnNfKSB7CisgIGlmIChleHBlcmltZW50YWxfbnNf
Lmhhc192YWx1ZSgpKSB7CiAgICAgUlRDX0xPRyhMU19JTkZPKSA8PCAiRXhwZXJpbWVudGFsIG5z
IGlzIGVuYWJsZWQ/ICIgPDwgKmV4cGVyaW1lbnRhbF9uc187CiAgICAgY29uZmlnLlNldDx3ZWJy
dGM6OkV4cGVyaW1lbnRhbE5zPigKICAgICAgICAgbmV3IHdlYnJ0Yzo6RXhwZXJpbWVudGFsTnMo
KmV4cGVyaW1lbnRhbF9uc18pKTsKQEAgLTUyOSwxMSArNTI5LDExIEBAIGJvb2wgV2ViUnRjVm9p
Y2VFbmdpbmU6OkFwcGx5T3B0aW9ucyhjb24KIAogICB3ZWJydGM6OkF1ZGlvUHJvY2Vzc2luZzo6
Q29uZmlnIGFwbV9jb25maWcgPSBhcG0oKS0+R2V0Q29uZmlnKCk7CiAKLSAgaWYgKG9wdGlvbnMu
aGlnaHBhc3NfZmlsdGVyKSB7CisgIGlmIChvcHRpb25zLmhpZ2hwYXNzX2ZpbHRlci5oYXNfdmFs
dWUoKSkgewogICAgIGFwbV9jb25maWcuaGlnaF9wYXNzX2ZpbHRlci5lbmFibGVkID0gKm9wdGlv
bnMuaGlnaHBhc3NfZmlsdGVyOwogICB9CiAKLSAgaWYgKG9wdGlvbnMucmVzaWR1YWxfZWNob19k
ZXRlY3RvcikgeworICBpZiAob3B0aW9ucy5yZXNpZHVhbF9lY2hvX2RldGVjdG9yLmhhc192YWx1
ZSgpKSB7CiAgICAgYXBtX2NvbmZpZy5yZXNpZHVhbF9lY2hvX2RldGVjdG9yLmVuYWJsZWQgPSAq
b3B0aW9ucy5yZXNpZHVhbF9lY2hvX2RldGVjdG9yOwogICB9CiAKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fY29kaW5nL2F1ZGlv
X25ldHdvcmtfYWRhcHRvci9kZWJ1Z19kdW1wX3dyaXRlci5jYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2NvZGlu
Zy9hdWRpb19uZXR3b3JrX2FkYXB0b3IvZGVidWdfZHVtcF93cml0ZXIuY2MJKHJldmlzaW9uIDI0
MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fY29kaW5nL2F1ZGlvX25ldHdvcmtfYWRhcHRvci9kZWJ1Z19kdW1wX3dyaXRlci5j
Ywkod29ya2luZyBjb3B5KQpAQCAtMTM0LDEwICsxMzQsMTAgQEAgdm9pZCBEZWJ1Z0R1bXBXcml0
ZXJJbXBsOjpEdW1wRW5jb2RlclJ1bgogICAgICAgICAqY29uZmlnLnVwbGlua19wYWNrZXRfbG9z
c19mcmFjdGlvbik7CiAgIH0KIAotICBpZiAoY29uZmlnLmVuYWJsZV9mZWMpCisgIGlmIChjb25m
aWcuZW5hYmxlX2ZlYy5oYXNfdmFsdWUoKSkKICAgICBkdW1wX2NvbmZpZy0+c2V0X2VuYWJsZV9m
ZWMoKmNvbmZpZy5lbmFibGVfZmVjKTsKIAotICBpZiAoY29uZmlnLmVuYWJsZV9kdHgpCisgIGlm
IChjb25maWcuZW5hYmxlX2R0eC5oYXNfdmFsdWUoKSkKICAgICBkdW1wX2NvbmZpZy0+c2V0X2Vu
YWJsZV9kdHgoKmNvbmZpZy5lbmFibGVfZHR4KTsKIAogICBpZiAoY29uZmlnLm51bV9jaGFubmVs
cykKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fY29kaW5nL2F1ZGlvX25ldHdvcmtfYWRhcHRvci9kdHhfY29udHJvbGxlci5jYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2NvZGluZy9hdWRpb19uZXR3b3JrX2FkYXB0b3IvZHR4X2NvbnRyb2xsZXIu
Y2MJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fY29kaW5nL2F1ZGlvX25ldHdvcmtfYWRhcHRvci9kdHhf
Y29udHJvbGxlci5jYwkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCB2b2lkIER0eENv
bnRyb2xsZXI6OlVwZGF0ZU5ldHdvcmtNZXRyaWNzCiAKIHZvaWQgRHR4Q29udHJvbGxlcjo6TWFr
ZURlY2lzaW9uKEF1ZGlvRW5jb2RlclJ1bnRpbWVDb25maWcqIGNvbmZpZykgewogICAvLyBEZWNp
c2lvbiBvbiB8ZW5hYmxlX2R0eHwgc2hvdWxkIG5vdCBoYXZlIGJlZW4gbWFkZS4KLSAgUlRDX0RD
SEVDSyghY29uZmlnLT5lbmFibGVfZHR4KTsKKyAgUlRDX0RDSEVDSyghY29uZmlnLT5lbmFibGVf
ZHR4Lmhhc192YWx1ZSgpKTsKIAogICBpZiAodXBsaW5rX2JhbmR3aWR0aF9icHNfKSB7CiAgICAg
aWYgKGR0eF9lbmFibGVkXyAmJgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19jb2RpbmcvYXVkaW9fbmV0d29ya19hZGFwdG9yL2Zl
Y19jb250cm9sbGVyX3JwbHJfYmFzZWQuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19jb2RpbmcvYXVkaW9fbmV0
d29ya19hZGFwdG9yL2ZlY19jb250cm9sbGVyX3JwbHJfYmFzZWQuY2MJKHJldmlzaW9uIDI0MzU2
NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fY29kaW5nL2F1ZGlvX25ldHdvcmtfYWRhcHRvci9mZWNfY29udHJvbGxlcl9ycGxyX2Jh
c2VkLmNjCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgRmVjQ29udHJvbGxl
clJwbHJCYXNlZDo6VXBkYXRlTmV0d28KIH0KIAogdm9pZCBGZWNDb250cm9sbGVyUnBsckJhc2Vk
OjpNYWtlRGVjaXNpb24oQXVkaW9FbmNvZGVyUnVudGltZUNvbmZpZyogY29uZmlnKSB7Ci0gIFJU
Q19EQ0hFQ0soIWNvbmZpZy0+ZW5hYmxlX2ZlYyk7CisgIFJUQ19EQ0hFQ0soIWNvbmZpZy0+ZW5h
YmxlX2ZlYy5oYXNfdmFsdWUoKSk7CiAgIFJUQ19EQ0hFQ0soIWNvbmZpZy0+dXBsaW5rX3BhY2tl
dF9sb3NzX2ZyYWN0aW9uKTsKIAogICBmZWNfZW5hYmxlZF8gPSBmZWNfZW5hYmxlZF8gPyAhRmVj
RGlzYWJsaW5nRGVjaXNpb24oKSA6IEZlY0VuYWJsaW5nRGVjaXNpb24oKTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fY29kaW5n
L2NvZGVjcy9vcHVzL2F1ZGlvX2VuY29kZXJfb3B1cy5jYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2NvZGluZy9j
b2RlY3Mvb3B1cy9hdWRpb19lbmNvZGVyX29wdXMuY2MJKHJldmlzaW9uIDI0MzU2NikKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fY29k
aW5nL2NvZGVjcy9vcHVzL2F1ZGlvX2VuY29kZXJfb3B1cy5jYwkod29ya2luZyBjb3B5KQpAQCAt
ODY3LDExICs4NjcsMTEgQEAgdm9pZCBBdWRpb0VuY29kZXJPcHVzSW1wbDo6QXBwbHlBdWRpb05l
dAogICAgIFNldFRhcmdldEJpdHJhdGUoKmNvbmZpZy5iaXRyYXRlX2Jwcyk7CiAgIGlmIChjb25m
aWcuZnJhbWVfbGVuZ3RoX21zKQogICAgIFNldEZyYW1lTGVuZ3RoKCpjb25maWcuZnJhbWVfbGVu
Z3RoX21zKTsKLSAgaWYgKGNvbmZpZy5lbmFibGVfZmVjKQorICBpZiAoY29uZmlnLmVuYWJsZV9m
ZWMuaGFzX3ZhbHVlKCkpCiAgICAgU2V0RmVjKCpjb25maWcuZW5hYmxlX2ZlYyk7CiAgIGlmIChj
b25maWcudXBsaW5rX3BhY2tldF9sb3NzX2ZyYWN0aW9uKQogICAgIFNldFByb2plY3RlZFBhY2tl
dExvc3NSYXRlKCpjb25maWcudXBsaW5rX3BhY2tldF9sb3NzX2ZyYWN0aW9uKTsKLSAgaWYgKGNv
bmZpZy5lbmFibGVfZHR4KQorICBpZiAoY29uZmlnLmVuYWJsZV9kdHguaGFzX3ZhbHVlKCkpCiAg
ICAgU2V0RHR4KCpjb25maWcuZW5hYmxlX2R0eCk7CiAgIGlmIChjb25maWcubnVtX2NoYW5uZWxz
KQogICAgIFNldE51bUNoYW5uZWxzVG9FbmNvZGUoKmNvbmZpZy5udW1fY2hhbm5lbHMpOwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvanNlcHRyYW5z
cG9ydGNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9wYy9qc2VwdHJhbnNwb3J0Y29udHJvbGxlci5oCShyZXZpc2lvbiAy
NDM1NjYpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9q
c2VwdHJhbnNwb3J0Y29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcg
QEAgY2xhc3MgSnNlcFRyYW5zcG9ydENvbnRyb2xsZXIgOiBwdWJsaWMgcwogICAvLyBjb25zdC4g
Rml4IHRoaXMuCiAgIGJvb2wgR2V0U3RhdHMoY29uc3Qgc3RkOjpzdHJpbmcmIG1pZCwgY3JpY2tl
dDo6VHJhbnNwb3J0U3RhdHMqIHN0YXRzKTsKIAotICBib29sIGluaXRpYWxfb2ZmZXJlcigpIGNv
bnN0IHsgcmV0dXJuIGluaXRpYWxfb2ZmZXJlcl8gJiYgKmluaXRpYWxfb2ZmZXJlcl87IH0KKyAg
Ym9vbCBpbml0aWFsX29mZmVyZXIoKSBjb25zdCB7IHJldHVybiBpbml0aWFsX29mZmVyZXJfLmhh
c192YWx1ZSgpICYmICppbml0aWFsX29mZmVyZXJfOyB9CiAKICAgdm9pZCBTZXRBY3RpdmVSZXNl
dFNydHBQYXJhbXMoYm9vbCBhY3RpdmVfcmVzZXRfc3J0cF9wYXJhbXMpOwogCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9wZWVyY29ubmVjdGlvbi5j
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9wYy9wZWVyY29ubmVjdGlvbi5jYwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvcGVlcmNvbm5lY3Rpb24uY2MJKHdvcmtp
bmcgY29weSkKQEAgLTEwNDcsNyArMTA0Nyw3IEBAIGJvb2wgUGVlckNvbm5lY3Rpb246OkluaXRp
YWxpemUoCiAgICAgLy8gRW5hYmxlIERUTFMgYnkgZGVmYXVsdCBpZiB3ZSBoYXZlIGFuIGlkZW50
aXR5IHN0b3JlIG9yIGEgY2VydGlmaWNhdGUuCiAgICAgZHRsc19lbmFibGVkXyA9IChkZXBlbmRl
bmNpZXMuY2VydF9nZW5lcmF0b3IgfHwgY2VydGlmaWNhdGUpOwogICAgIC8vIHxjb25maWd1cmF0
aW9ufCBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgfGR0bHNfZW5hYmxlZF98IHZhbHVlLgotICAg
IGlmIChjb25maWd1cmF0aW9uLmVuYWJsZV9kdGxzX3NydHApIHsKKyAgICBpZiAoY29uZmlndXJh
dGlvbi5lbmFibGVfZHRsc19zcnRwLmhhc192YWx1ZSgpKSB7CiAgICAgICBkdGxzX2VuYWJsZWRf
ID0gKihjb25maWd1cmF0aW9uLmVuYWJsZV9kdGxzX3NydHApOwogICAgIH0KICAgfQpAQCAtMjA4
OSw3ICsyMDg5LDcgQEAgUlRDRXJyb3IgUGVlckNvbm5lY3Rpb246OkFwcGx5TG9jYWxEZXNjcgog
ICAvLyB8bG9jYWxfZGVzY3JpcHRpb24oKXwuCiAgIFJUQ19EQ0hFQ0sobG9jYWxfZGVzY3JpcHRp
b24oKSk7CiAKLSAgaWYgKCFpc19jYWxsZXJfKSB7CisgIGlmICghaXNfY2FsbGVyXy5oYXNfdmFs
dWUoKSkgewogICAgIGlmIChyZW1vdGVfZGVzY3JpcHRpb24oKSkgewogICAgICAgLy8gUmVtb3Rl
IGRlc2NyaXB0aW9uIHdhcyBhcHBsaWVkIGZpcnN0LCBzbyB0aGlzIFBDIGlzIHRoZSBjYWxsZWUu
CiAgICAgICBpc19jYWxsZXJfID0gZmFsc2U7CkBAIC01MTEwLDcgKzUxMTAsNyBAQCBib29sIFBl
ZXJDb25uZWN0aW9uOjpHZXRTY3RwU3NsUm9sZShydGM6CiAgIGFic2w6Om9wdGlvbmFsPHJ0Yzo6
U1NMUm9sZT4gZHRsc19yb2xlOwogICBpZiAoc2N0cF9taWRfKSB7CiAgICAgZHRsc19yb2xlID0g
dHJhbnNwb3J0X2NvbnRyb2xsZXJfLT5HZXREdGxzUm9sZSgqc2N0cF9taWRfKTsKLSAgfSBlbHNl
IGlmIChpc19jYWxsZXJfKSB7CisgIH0gZWxzZSBpZiAoaXNfY2FsbGVyXy5oYXNfdmFsdWUoKSkg
ewogICAgIGR0bHNfcm9sZSA9ICppc19jYWxsZXJfID8gcnRjOjpTU0xfU0VSVkVSIDogcnRjOjpT
U0xfQ0xJRU5UOwogICB9CiAgIGlmIChkdGxzX3JvbGUpIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL2V4cGVyaW1lbnRzL2ZpZWxkX3Ry
aWFsX3BhcnNlci5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9ydGNfYmFzZS9leHBlcmltZW50cy9maWVsZF90cmlhbF9wYXJzZXIuY2MJ
KHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3J0Y19iYXNlL2V4cGVyaW1lbnRzL2ZpZWxkX3RyaWFsX3BhcnNlci5jYwkod29ya2lu
ZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIGJvb2wgRmllbGRUcmlhbEZsYWc6OlBhcnNlKGFi
c2w6Om9wdGlvbmEKICAgLy8gT25seSBzZXQgdGhlIGZsYWcgaWYgdGhlcmUgaXMgbm8gYXJndW1l
bnQgcHJvdmlkZWQuCiAgIGlmIChzdHJfdmFsdWUpIHsKICAgICBhYnNsOjpvcHRpb25hbDxib29s
PiBvcHRfdmFsdWUgPSBQYXJzZVR5cGVkUGFyYW1ldGVyPGJvb2w+KCpzdHJfdmFsdWUpOwotICAg
IGlmICghb3B0X3ZhbHVlKQorICAgIGlmICghb3B0X3ZhbHVlLmhhc192YWx1ZSgpKQogICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHZhbHVlXyA9ICpvcHRfdmFsdWU7CiAgIH0gZWxzZSB7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy92aWRlby9xdWFsaXR5
X3RocmVzaG9sZC5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy92aWRlby9xdWFsaXR5X3RocmVzaG9sZC5jYwkocmV2aXNpb24gMjQzNTY2
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdmlkZW8vcXVh
bGl0eV90aHJlc2hvbGQuY2MJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBR
dWFsaXR5VGhyZXNob2xkOjpBZGRNZWFzdXJlbWVudChpbgogICBpZiAodW50aWxfZnVsbF8gPiAw
KQogICAgIC0tdW50aWxfZnVsbF87CiAKLSAgaWYgKGlzX2hpZ2hfKSB7CisgIGlmIChpc19oaWdo
Xy5oYXNfdmFsdWUoKSkgewogICAgIGlmICgqaXNfaGlnaF8pCiAgICAgICArK251bV9oaWdoX3N0
YXRlc187CiAgICAgKytudW1fY2VydGFpbl9zdGF0ZXNfOwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdmlkZW8vcmVjZWl2ZV9zdGF0aXN0aWNzX3Byb3h5
LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3ZpZGVvL3JlY2VpdmVfc3RhdGlzdGljc19wcm94eS5jYwkocmV2aXNpb24gMjQzNTY2KQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdmlkZW8vcmVjZWl2
ZV9zdGF0aXN0aWNzX3Byb3h5LmNjCSh3b3JraW5nIGNvcHkpCkBAIC01NTAsOCArNTUwLDggQEAg
dm9pZCBSZWNlaXZlU3RhdGlzdGljc1Byb3h5OjpRdWFsaXR5U2FtcAogICBsYXN0X3NhbXBsZV90
aW1lXyA9IG5vdzsKICAgcXBfc2FtcGxlXy5SZXNldCgpOwogCi0gIGlmIChmcHNfdGhyZXNob2xk
Xy5Jc0hpZ2goKSB8fCB2YXJpYW5jZV90aHJlc2hvbGRfLklzSGlnaCgpIHx8Ci0gICAgICBxcF90
aHJlc2hvbGRfLklzSGlnaCgpKSB7CisgIGlmIChmcHNfdGhyZXNob2xkXy5Jc0hpZ2goKS5oYXNf
dmFsdWUoKSB8fCB2YXJpYW5jZV90aHJlc2hvbGRfLklzSGlnaCgpLmhhc192YWx1ZSgpIHx8Cisg
ICAgICBxcF90aHJlc2hvbGRfLklzSGlnaCgpLmhhc192YWx1ZSgpKSB7CiAgICAgaWYgKGFueV9i
YWQpCiAgICAgICArK251bV9iYWRfc3RhdGVzXzsKICAgICArK251bV9jZXJ0YWluX3N0YXRlc187
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wMy0zMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIENvbnNpZGVyIHJlbW92aW5nIE9w
dGlvbmFsPGJvb2w+OjpvcGVyYXRvciBib29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOgorICAgICAgICAoV1RGOjpPcHRp
b25hbDo6dmFsdWVPciBjb25zdCk6CisgICAgICAgIChXVEY6Ok9wdGlvbmFsOjp2YWx1ZU9yKToK
KyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPCk6Cisg
ICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj4pOgorICAg
ICAgICAoV1RGOjpvcGVyYXRvcj49KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisKIDIw
MTktMDMtMjcgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IExheW91dCBUZXN0IGpzL21hdGgtY2x6MzIuaHRtbCBpcyBmYWlsaW5nCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9PcHRpb25hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFs
LmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwNSw3ICs1MDUsNyBAQCBwdWJsaWM6CiAKICAgLy8gMjAuNS40LjUsIE9i
c2VydmVycwogCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19O
T0VYQ0VQVCB7IHJldHVybiBpbml0aWFsaXplZCgpOyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFgg
PSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8Ym9vbCwgWD46OnZhbHVlPiogPSBu
dWxscHRyPiBleHBsaWNpdCBjb25zdGV4cHIgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IF9fTk9FWENF
UFQgeyByZXR1cm4gaW5pdGlhbGl6ZWQoKTsgfQogICBjb25zdGV4cHIgYm9vbCBoYXNWYWx1ZSgp
IGNvbnN0IF9fTk9FWENFUFQgeyByZXR1cm4gaW5pdGlhbGl6ZWQoKTsgfQogCiAgIGNvbnN0ZXhw
ciBUIGNvbnN0KiBvcGVyYXRvciAtPigpIGNvbnN0IHsKQEAgLTU1MywxMyArNTUzLDEzIEBAIHB1
YmxpYzoKICAgdGVtcGxhdGUgPGNsYXNzIFY+CiAgIGNvbnN0ZXhwciBUIHZhbHVlT3IoViYmIHYp
IGNvbnN0JgogICB7Ci0gICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29udmVy
dDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2KSk7CisgICAgcmV0dXJuIHRoaXMt
Pmhhc1ZhbHVlKCkgPyAqKnRoaXMgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0
ZXhwcl9mb3J3YXJkPFY+KHYpKTsKICAgfQogCiAgIHRlbXBsYXRlIDxjbGFzcyBWPgogICBPUFRJ
T05BTF9NVVRBQkxFX0NPTlNURVhQUiBUIHZhbHVlT3IoViYmIHYpICYmCiAgIHsKLSAgICByZXR1
cm4gKnRoaXMgPyBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb25zdF9jYXN0PE9wdGlvbmFsPFQ+
Jj4oKnRoaXMpLmNvbnRhaW5lZF92YWwoKSkgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86
OmNvbnN0ZXhwcl9mb3J3YXJkPFY+KHYpKTsKKyAgICByZXR1cm4gdGhpcy0+aGFzVmFsdWUoKSA/
IGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKGNvbnN0X2Nhc3Q8T3B0aW9uYWw8VD4mPigqdGhpcyku
Y29udGFpbmVkX3ZhbCgpKSA6IGRldGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHBy
X2ZvcndhcmQ8Vj4odikpOwogICB9CiAKICMgZWxzZQpAQCAtNjY4LDcgKzY2OCw3IEBAIHB1Ymxp
YzoKICAgICByZXR1cm4gKnJlZjsKICAgfQogCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRv
ciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7CisgIHRlbXBsYXRlPHR5cGVuYW1lIFggPSBULCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8Ym9vbCwgWD46OnZhbHVlPiog
PSBudWxscHRyPiBleHBsaWNpdCBjb25zdGV4cHIgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IF9fTk9F
WENFUFQgewogICAgIHJldHVybiByZWYgIT0gbnVsbHB0cjsKICAgfQogCkBAIC02OTcsNyArNjk3
LDcgQEAgY2xhc3MgT3B0aW9uYWw8VCYmPgogLy8gMjAuNS44LCBSZWxhdGlvbmFsIG9wZXJhdG9y
cwogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgT3B0
aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlvbmFsPFQ+JiB5KQogewotICByZXR1cm4gYm9vbCh4KSAh
PSBib29sKHkpID8gZmFsc2UgOiBib29sKHgpID09IGZhbHNlID8gdHJ1ZSA6ICp4ID09ICp5Owor
ICByZXR1cm4geC5oYXNWYWx1ZSgpICE9IHkuaGFzVmFsdWUoKSA/IGZhbHNlIDogIXguaGFzVmFs
dWUoKSA/IHRydWUgOiAqeCA9PSAqeTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yIT0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IE9wdGlvbmFsPFQ+
JiB5KQpAQCAtNzA3LDcgKzcwNyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXQKIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChj
b25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgT3B0aW9uYWw8VD4mIHkpCiB7Ci0gIHJldHVybiAo
IXkpID8gZmFsc2UgOiAoIXgpID8gdHJ1ZSA6ICp4IDwgKnk7CisgIHJldHVybiAheS5oYXNWYWx1
ZSgpID8gZmFsc2UgOiAheC5oYXNWYWx1ZSgpID8gdHJ1ZSA6ICp4IDwgKnk7CiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgT3B0aW9uYWw8VD4m
IHgsIGNvbnN0IE9wdGlvbmFsPFQ+JiB5KQpAQCAtNzI5LDIyICs3MjksMjIgQEAgdGVtcGxhdGUg
PGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdAogLy8gMjAuNS45LCBDb21wYXJpc29uIHdp
dGggbnVsbG9wdAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0o
Y29uc3QgT3B0aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAogewotICByZXR1cm4g
KCF4KTsKKyAgcmV0dXJuICF4Lmhhc1ZhbHVlKCk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgp
IF9fTk9FWENFUFQKIHsKLSAgcmV0dXJuICgheCk7CisgIHJldHVybiAheC5oYXNWYWx1ZSgpOwog
fQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBP
cHRpb25hbDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCiB7Ci0gIHJldHVybiBib29sKHgp
OworICByZXR1cm4geC5oYXNWYWx1ZSgpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3IhPShudWxsb3B0X3QsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KSBfX05P
RVhDRVBUCiB7Ci0gIHJldHVybiBib29sKHgpOworICByZXR1cm4geC5oYXNWYWx1ZSgpOwogfQog
CiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wdGlv
bmFsPFQ+JiwgbnVsbG9wdF90KSBfX05PRVhDRVBUCkBAIC03NTQsMTIgKzc1NCwxMiBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0CiAKIHRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwobnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYg
eCkgX19OT0VYQ0VQVAogewotICByZXR1cm4gYm9vbCh4KTsKKyAgcmV0dXJuIHguaGFzVmFsdWUo
KTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29u
c3QgT3B0aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAogewotICByZXR1cm4gKCF4
KTsKKyAgcmV0dXJuICF4Lmhhc1ZhbHVlKCk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcjw9KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mKSBfX05P
RVhDRVBUCkBAIC03NjksNyArNzY5LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdAogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9FWENFUFQKIHsKLSAgcmV0dXJu
IGJvb2woeCk7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4obnVsbG9wdF90LCBjb25zdCBPcHRpb25hbDxUPiYp
IF9fTk9FWENFUFQKQEAgLTc4NCw3ICs3ODQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj49KG51bGxvcHRfdCwgY29uc3QgT3B0aW9uYWw8VD4mIHgpIF9fTk9FWENFUFQKIHsKLSAg
cmV0dXJuICgheCk7CisgIHJldHVybiAheC5oYXNWYWx1ZSgpOwogfQogCiAKQEAgLTc5MiwxODUg
Kzc5MiwxODUgQEAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdAogLy8g
MjAuNS4xMCwgQ29tcGFyaXNvbiB3aXRoIFQKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2KQogewotICBy
ZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/
ICp4ID09IHYgOiBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPT0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VD4mIHgpCiB7Ci0gIHJldHVy
biBib29sKHgpID8gdiA9PSAqeCA6IGZhbHNlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gdiA9
PSAqeCA6IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBPcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKIHsKLSAgcmV0dXJuIGJv
b2woeCkgPyAqeCAhPSB2IDogdHJ1ZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/ICp4ICE9IHYg
OiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkg
PyB2ICE9ICp4IDogdHJ1ZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/IHYgIT0gKnggOiB0cnVl
OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwg
diA6IHRydWU7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyAqeCA8IHYgOiB0cnVlOwogfQogCiB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNv
bnN0IE9wdGlvbmFsPFQ+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRydWU7
CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyB2ID4gKnggOiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBj
b25zdCBUJiB2KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOworICByZXR1
cm4geC5oYXNWYWx1ZSgpID8gKnggPiB2IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8VD4m
IHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA8ICp4IDogZmFsc2U7CisgIHJldHVybiB4Lmhh
c1ZhbHVlKCkgPyB2IDwgKnggOiBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgT3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCiB7
Ci0gIHJldHVybiBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOworICByZXR1cm4geC5oYXNWYWx1
ZSgpID8gKnggPj0gdiA6IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUPiYgeCkKIHsKLSAg
cmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkg
PyB2IDw9ICp4IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IE9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2KQogewotICByZXR1
cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gKngg
PD0gdiA6IHRydWU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQ+JiB4KQogewotICByZXR1cm4gYm9v
bCh4KSA/IHYgPj0gKnggOiB0cnVlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gdiA+PSAqeCA6
IHRydWU7CiB9CiAKIAogLy8gQ29tcGFyaXNvbiBvZiBPcHRpb25hbDxUJj4gd2l0aCBUCiB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcHRpb25hbDxU
Jj4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPT0gdiA6IGZhbHNl
OworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gKnggPT0gdiA6IGZhbHNlOwogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiB2LCBjb25zdCBP
cHRpb25hbDxUJj4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA9PSAqeCA6IGZhbHNlOwor
ICByZXR1cm4geC5oYXNWYWx1ZSgpID8gdiA9PSAqeCA6IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPcHRpb25hbDxUJj4mIHgs
IGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7CisgIHJl
dHVybiB4Lmhhc1ZhbHVlKCkgPyAqeCAhPSB2IDogdHJ1ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8
VCY+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOworICByZXR1cm4g
eC5oYXNWYWx1ZSgpID8gdiAhPSAqeCA6IHRydWU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2
KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7CisgIHJldHVybiB4Lmhhc1Zh
bHVlKCkgPyAqeCA8IHYgOiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPFQmPiYgeCkKIHsKLSAg
cmV0dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8g
diA+ICp4IDogdHJ1ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPihjb25zdCBPcHRpb25hbDxUJj4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBi
b29sKHgpID8gKnggPiB2IDogZmFsc2U7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyAqeCA+IHYg
OiBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PChjb25zdCBUJiB2LCBjb25zdCBPcHRpb25hbDxUJj4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgp
ID8gdiA8ICp4IDogZmFsc2U7CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyB2IDwgKnggOiBmYWxz
ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29u
c3QgT3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4
ID49IHYgOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/ICp4ID49IHYgOiBmYWxzZTsK
IH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3Qg
VCYgdiwgY29uc3QgT3B0aW9uYWw8VCY+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPD0g
KnggOiBmYWxzZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/IHYgPD0gKnggOiBmYWxzZTsKIH0K
IAogdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgT3B0
aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYg
OiB0cnVlOworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gKnggPD0gdiA6IHRydWU7CiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIHYsIGNv
bnN0IE9wdGlvbmFsPFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID49ICp4IDogdHJ1
ZTsKKyAgcmV0dXJuIHguaGFzVmFsdWUoKSA/IHYgPj0gKnggOiB0cnVlOwogfQogCiAvLyBDb21w
YXJpc29uIG9mIE9wdGlvbmFsPFQgY29uc3QmPiB3aXRoIFQKIHRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29u
c3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2IDogZmFsc2U7CisgIHJldHVy
biB4Lmhhc1ZhbHVlKCkgPyAqeCA9PSB2IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNv
bnN0IFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7CisgIHJl
dHVybiB4Lmhhc1ZhbHVlKCkgPyB2ID09ICp4IDogZmFsc2U7CiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYg
eCwgY29uc3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCAhPSB2IDogdHJ1ZTsKKyAg
cmV0dXJuIHguaGFzVmFsdWUoKSA/ICp4ICE9IHYgOiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25h
bDxjb25zdCBUJj4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiAhPSAqeCA6IHRydWU7Cisg
IHJldHVybiB4Lmhhc1ZhbHVlKCkgPyB2ICE9ICp4IDogdHJ1ZTsKIH0KIAogdGVtcGxhdGUgPGNs
YXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBPcHRpb25hbDxjb25zdCBUJj4m
IHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPCB2IDogdHJ1ZTsKKyAg
cmV0dXJuIHguaGFzVmFsdWUoKSA/ICp4IDwgdiA6IHRydWU7CiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgdiwgY29uc3QgT3B0aW9uYWw8
Y29uc3QgVCY+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRydWU7CisgIHJl
dHVybiB4Lmhhc1ZhbHVlKCkgPyB2ID4gKnggOiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9wdGlvbmFsPGNvbnN0IFQmPiYgeCwg
Y29uc3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYgOiBmYWxzZTsKKyAgcmV0
dXJuIHguaGFzVmFsdWUoKSA/ICp4ID4gdiA6IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IE9wdGlvbmFsPGNv
bnN0IFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKKyAgcmV0
dXJuIHguaGFzVmFsdWUoKSA/IHYgPCAqeCA6IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPcHRpb25hbDxjb25zdCBUJj4mIHgs
IGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOworICBy
ZXR1cm4geC5oYXNWYWx1ZSgpID8gKnggPj0gdiA6IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBPcHRpb25h
bDxjb25zdCBUJj4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA8PSAqeCA6IGZhbHNlOwor
ICByZXR1cm4geC5oYXNWYWx1ZSgpID8gdiA8PSAqeCA6IGZhbHNlOwogfQogCiB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcHRpb25hbDxjb25zdCBU
Jj4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPD0gdiA6IHRydWU7
CisgIHJldHVybiB4Lmhhc1ZhbHVlKCkgPyAqeCA8PSB2IDogdHJ1ZTsKIH0KIAogdGVtcGxhdGUg
PGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgVCYgdiwgY29uc3QgT3B0
aW9uYWw8Y29uc3QgVCY+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVl
OworICByZXR1cm4geC5oYXNWYWx1ZSgpID8gdiA+PSAqeCA6IHRydWU7CiB9CiAKIApJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI1IEBACisyMDE5LTAzLTMwICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29uc2lkZXIgcmVtb3Zp
bmcgT3B0aW9uYWw8Ym9vbD46Om9wZXJhdG9yIGJvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjQyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5o
OgorICAgICAgICAoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNhY2hlSWRlbnRpZmllck9wZXJh
dGlvblJlc3VsdDo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9wdGlvbnMpOgorICAgICAgICAqIE1vZHVs
ZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0SW5pdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hSZXF1
ZXN0SW5pdDo6aGFzTWVtYmVycyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYVRyYWNrQ29uc3RyYWludHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0KToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjpjcmVhdGVEYXRhQ2hhbm5lbCk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDRGF0YUNoYW5uZWxI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxl
cjo6ZnJvbVJUQ0RhdGFDaGFubmVsSW5pdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9Q
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yU2VsZWN0aW9u
Q3JpdGVyaWE6OmRlY29kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlD
cmVkZW50aWFsRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERh
dGE6OmRlY29kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29u
c3RhbnRFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpDb25zdGFu
dEV4cHJlc3Npb246Om1hdGNoZXMgY29uc3QpOgorICAgICAgICAqIFNjcmlwdHMvU2V0dGluZ3NU
ZW1wbGF0ZXMvU2V0dGluZ3MuY3BwLmVyYjoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0aW9u
VGltZWxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0
ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvSURMVHlwZXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OklETFR5cGU6OmlzTnVsbFZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogY29udGVudGV4
dGVuc2lvbnMvQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFJ1bGVMaXN0UmVzdWx0czo6UmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudFJ1bGVMaXN0UmVzdWx0czo6U3VtbWFyeTo6ZGVjb2RlKToKKyAgICAgICAgKiBjcnlw
dG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVT
OjppbXBvcnRKd2spOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjppbXBvcnRKd2spOgorICAgICAgICAqIGNyeXB0
by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1B
Qzo6aW1wb3J0SndrKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjppbXBvcnRKd2spOgorICAgICAgICAqIGNz
cy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmNh
bkFjY2Vzc1J1bGVzIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRE9NTWF0cml4UmVhZE9ubHkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NTWF0cml4UmVhZE9ubHk6OnZhbGlkYXRlQW5kRml4dXAp
OgorICAgICAgICAqIGNzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50UnVsZVNldHM6Omhhc0NvbXBsZXhTZWxlY3RvcnNGb3JTdHlsZUF0dHJpYnV0ZSBj
b25zdCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6dG9nZ2xlQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKToKKyAgICAg
ICAgKiBlZGl0aW5nL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDaGFuZ2VzOjpjcmVhdGVTdHlsZVByb3BlcnRpZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udEF0dHJpYnV0ZUNoYW5nZXM6OmVkaXRBY3Rpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEF0dHJpYnV0ZUNoYW5nZXM6OmNyZWF0ZUVkaXRpbmdTdHlsZSBjb25zdCk6
CisgICAgICAgICogZWRpdGluZy9Gb250QXR0cmlidXRlQ2hhbmdlcy5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENoYW5nZXM6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRm9u
dEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRMaXN0OjpkZWNvZGUpOgorICAg
ICAgICAqIGZpbGVhcGkvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjppc0RpcmVj
dG9yeSBjb25zdCk6CisgICAgICAgICogaHRtbC9ET01Ub2tlbkxpc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NVG9rZW5MaXN0Ojp0b2dnbGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpnZXRDb21wdXRlZFByb3BlcnRpZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9wdWxhdGVDb250ZXh0TWVudSk6
CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2lu
ZG93OjpjYW5TaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjppc0xvd1Bvd2VyTW9kZUVuYWJsZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvUXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlF1aXJrczo6aGFzQnJva2VuRW5jcnlw
dGVkTWVkaWFBUElTdXBwb3J0UXVpcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UXVpcmtz
OjpoYXNXZWJTUUxTdXBwb3J0UXVpcmsgY29uc3QpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9u
L0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmlt
YXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JlZW5Qcm9w
ZXJ0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EYXRhOjpkZWNvZGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphc3NldFN0YXR1cyBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvTWVkaWFFbmdpbmVDb25maWd1cmF0
aW9uRmFjdG9yeUNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhUGxheWVy
RGVjb2RpbmdDb25maWd1cmF0aW9uQ29jb2EpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL0NhcHR1cmVEZXZpY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OmRl
Y29kZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5o
OgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OmdldEV4YWN0IGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlN
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbkRlY29kZU1lZGlhKToKKyAgICAgICAgKFdl
YkNvcmU6OmNhbkVuY29kZU1lZGlhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0
YTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlm
aWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpvbkxpbmUp
OgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJsb2NrRGlyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpjb21wdXRlT3ZlckFubm90YXRpb25BZGp1c3Rt
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRl
ckFubm90YXRpb25BZGp1c3RtZW50IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtl
ZFRleHRGb3JlZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhNTFN0eWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTFN0eWxlOjpyZXNvbHZlTWF0aE1MU3R5bGUp
OgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSBj
b25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWREZWNvcmF0ZWRQcm9w
ZXJ0eS5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJpbWl0aXZlUHJv
cGVydHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHk6
OmFuaW1WYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcmltaXRpdmVQ
cm9wZXJ0eTo6YW5pbVZhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByaW1pdGl2
ZVByb3BlcnR5OjpjdXJyZW50VmFsdWUgY29uc3QpOgorICAgICAgICAqIHdvcmtlcnMvc2Vydmlj
ZS9TZXJ2aWNlV29ya2VyQ2xpZW50UXVlcnlPcHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJ2aWNlV29ya2VyQ2xpZW50UXVlcnlPcHRpb25zOjpkZWNvZGUpOgorCiAyMDE5LTAzLTI3ICBK
dXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYiBHUFVdIFN0
YW5kYXJkaXplIFdlYiBHUFUgb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY3JlYXRpb24g
bG9naWMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVFbmdpbmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlRW5n
aW5lLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUv
RE9NQ2FjaGVFbmdpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IGlubGluZSBPcHRpb25hbDwKIAogICAgIE9wdGlvbmFsPGJvb2w+
IGhhZFN0b3JhZ2VFcnJvcjsKICAgICBkZWNvZGVyID4+IGhhZFN0b3JhZ2VFcnJvcjsKLSAgICBp
ZiAoIWhhZFN0b3JhZ2VFcnJvcikKKyAgICBpZiAoIWhhZFN0b3JhZ2VFcnJvci5oYXNWYWx1ZSgp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiB7eyBXVEZNb3ZlKCpp
ZGVudGlmaWVyKSwgV1RGTW92ZSgqaGFkU3RvcmFnZUVycm9yKSB9fTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHAJKHJldmlzaW9uIDI0
MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBPcHRpb25hbDxFeGNlcHRp
b24+IGJ1aWxkT3B0aW9ucygKICAgICBpZiAoIWluaXQuaW50ZWdyaXR5LmlzTnVsbCgpKQogICAg
ICAgICBvcHRpb25zLmludGVncml0eSA9IGluaXQuaW50ZWdyaXR5OwogCi0gICAgaWYgKGluaXQu
a2VlcGFsaXZlICYmIGluaXQua2VlcGFsaXZlLnZhbHVlKCkpCisgICAgaWYgKGluaXQua2VlcGFs
aXZlLmhhc1ZhbHVlKCkgJiYgaW5pdC5rZWVwYWxpdmUudmFsdWUoKSkKICAgICAgICAgb3B0aW9u
cy5rZWVwQWxpdmUgPSB0cnVlOwogCiAgICAgaWYgKCFpbml0Lm1ldGhvZC5pc051bGwoKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3RJbml0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3RJbml0
LmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hSZXF1ZXN0SW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHN0cnVjdCBG
ZXRjaFJlcXVlc3RJbml0IHsKICAgICBKU0M6OkpTVmFsdWUgc2lnbmFsOwogICAgIEpTQzo6SlNW
YWx1ZSB3aW5kb3c7CiAKLSAgICBib29sIGhhc01lbWJlcnMoKSBjb25zdCB7IHJldHVybiAhbWV0
aG9kLmlzRW1wdHkoKSB8fCBoZWFkZXJzIHx8IGJvZHkgfHwgIXJlZmVycmVyLmlzRW1wdHkoKSB8
fCByZWZlcnJlclBvbGljeSB8fCBtb2RlIHx8IGNyZWRlbnRpYWxzIHx8IGNhY2hlIHx8IHJlZGly
ZWN0IHx8ICFpbnRlZ3JpdHkuaXNFbXB0eSgpIHx8IGtlZXBhbGl2ZSB8fCAhd2luZG93LmlzVW5k
ZWZpbmVkKCkgfHwgIXNpZ25hbC5pc1VuZGVmaW5lZCgpOyB9CisgICAgYm9vbCBoYXNNZW1iZXJz
KCkgY29uc3QgeyByZXR1cm4gIW1ldGhvZC5pc0VtcHR5KCkgfHwgaGVhZGVycyB8fCBib2R5IHx8
ICFyZWZlcnJlci5pc0VtcHR5KCkgfHwgcmVmZXJyZXJQb2xpY3kgfHwgbW9kZSB8fCBjcmVkZW50
aWFscyB8fCBjYWNoZSB8fCByZWRpcmVjdCB8fCAhaW50ZWdyaXR5LmlzRW1wdHkoKSB8fCBrZWVw
YWxpdmUuaGFzVmFsdWUoKSB8fCAhd2luZG93LmlzVW5kZWZpbmVkKCkgfHwgIXNpZ25hbC5pc1Vu
ZGVmaW5lZCgpOyB9CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuY3BwCShyZXZp
c2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
VHJhY2tDb25zdHJhaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDkgKzkyLDkgQEAgc3Rh
dGljIHZvaWQgc2V0KE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TQogICAgICAgICAgICAgICAgIGNv
bnN0cmFpbnQuc2V0RXhhY3QoYm9vbGVhbik7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29u
c3QgQ29uc3RyYWluQm9vbGVhblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAg
IGlmIChwYXJhbWV0ZXJzLmV4YWN0KQorICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuZXhhY3Qu
aGFzVmFsdWUoKSkKICAgICAgICAgICAgICAgICBjb25zdHJhaW50LnNldEV4YWN0KHBhcmFtZXRl
cnMuZXhhY3QudmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAocGFyYW1ldGVycy5pZGVhbCkKKyAg
ICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmlkZWFsLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICAg
ICAgY29uc3RyYWludC5zZXRJZGVhbChwYXJhbWV0ZXJzLmlkZWFsLnZhbHVlKCkpOwogICAgICAg
ICB9CiAgICAgKTsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBzZXQoTWVkaWFUcmFj
a0NvbnN0cmFpbnRTZXRNCiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAo
Y29uc3QgQ29uc3RyYWluRE9NU3RyaW5nUGFyYW1ldGVycyYgcGFyYW1ldGVycykgewotICAgICAg
ICAgICAgaWYgKHBhcmFtZXRlcnMuZXhhY3QpIHsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJz
LmV4YWN0Lmhhc1ZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBXVEY6OnN3aXRjaE9uKHBhcmFt
ZXRlcnMuZXhhY3QudmFsdWUoKSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChjb25zdCBTdHJp
bmcmIHN0cmluZykgewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludC5hcHBlbmRF
eGFjdChzdHJpbmcpOwpAQCAtMTMyLDcgKzEzMiw3IEBAIHN0YXRpYyB2b2lkIHNldChNZWRpYVRy
YWNrQ29uc3RyYWludFNldE0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyYW1ldGVycy5pZGVhbCkgewor
ICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuaWRlYWwuaGFzVmFsdWUoKSkgewogICAgICAgICAg
ICAgICAgIFdURjo6c3dpdGNoT24ocGFyYW1ldGVycy5pZGVhbC52YWx1ZSgpLAogICAgICAgICAg
ICAgICAgICAgICBbJl0gKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdHJhaW50LmFwcGVuZElkZWFsKHN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgs
NyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDRGF0YUNoYW5uZWw+PiBSVENQZWVyCiAgICAgaWYgKGlz
Q2xvc2VkKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9
OwogCi0gICAgaWYgKG9wdGlvbnMubmVnb3RpYXRlZCAmJiAhb3B0aW9ucy5uZWdvdGlhdGVkLnZh
bHVlKCkgJiYgKGxhYmVsLmxlbmd0aCgpID4gNjU1MzUgfHwgb3B0aW9ucy5wcm90b2NvbC5sZW5n
dGgoKSA+IDY1NTM1KSkKKyAgICBpZiAob3B0aW9ucy5uZWdvdGlhdGVkLmhhc1ZhbHVlKCkgJiYg
IW9wdGlvbnMubmVnb3RpYXRlZC52YWx1ZSgpICYmIChsYWJlbC5sZW5ndGgoKSA+IDY1NTM1IHx8
IG9wdGlvbnMucHJvdG9jb2wubGVuZ3RoKCkgPiA2NTUzNSkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUeXBlRXJyb3IgfTsKIAogICAgIGlmIChvcHRpb25zLm1heFBhY2tldExpZmVUaW1l
ICYmIG9wdGlvbnMubWF4UmV0cmFuc21pdHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRj
L0xpYldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICszNywxNCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB3ZWJydGM6OkRhdGFDaGFubmVsSW5pdCBMaWJXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5uZWxJ
bml0JiBvcHRpb25zKQogewogICAgIHdlYnJ0Yzo6RGF0YUNoYW5uZWxJbml0IGluaXQ7Ci0gICAg
aWYgKG9wdGlvbnMub3JkZXJlZCkKKyAgICBpZiAob3B0aW9ucy5vcmRlcmVkLmhhc1ZhbHVlKCkp
CiAgICAgICAgIGluaXQub3JkZXJlZCA9ICpvcHRpb25zLm9yZGVyZWQ7CiAgICAgaWYgKG9wdGlv
bnMubWF4UGFja2V0TGlmZVRpbWUpCiAgICAgICAgIGluaXQubWF4UmV0cmFuc21pdFRpbWUgPSAq
b3B0aW9ucy5tYXhQYWNrZXRMaWZlVGltZTsKICAgICBpZiAob3B0aW9ucy5tYXhSZXRyYW5zbWl0
cykKICAgICAgICAgaW5pdC5tYXhSZXRyYW5zbWl0cyA9ICpvcHRpb25zLm1heFJldHJhbnNtaXRz
OwogICAgIGluaXQucHJvdG9jb2wgPSBvcHRpb25zLnByb3RvY29sLnV0ZjgoKS5kYXRhKCk7Ci0g
ICAgaWYgKG9wdGlvbnMubmVnb3RpYXRlZCkKKyAgICBpZiAob3B0aW9ucy5uZWdvdGlhdGVkLmhh
c1ZhbHVlKCkpCiAgICAgICAgIGluaXQubmVnb3RpYXRlZCA9ICpvcHRpb25zLm5lZ290aWF0ZWQ7
CiAgICAgaWYgKG9wdGlvbnMuaWQpCiAgICAgICAgIGluaXQuaWQgPSAqb3B0aW9ucy5pZDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAyNDM1
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIE9w
dGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGkKIAogICAgIE9wdGlvbmFsPGJv
b2w+IHJlcXVpcmVSZXNpZGVudEtleTsKICAgICBkZWNvZGVyID4+IHJlcXVpcmVSZXNpZGVudEtl
eTsKLSAgICBpZiAoIXJlcXVpcmVSZXNpZGVudEtleSkKKyAgICBpZiAoIXJlcXVpcmVSZXNpZGVu
dEtleS5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJlc3Vs
dC5yZXF1aXJlUmVzaWRlbnRLZXkgPSAqcmVxdWlyZVJlc2lkZW50S2V5OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsRGF0YS5oCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
Myw3ICsxMDMsNyBAQCBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsRGF0YT4gUHVibGljCiAK
ICAgICBPcHRpb25hbDxib29sPiBpc0VtcHR5OwogICAgIGRlY29kZXIgPj4gaXNFbXB0eTsKLSAg
ICBpZiAoIWlzRW1wdHkpCisgICAgaWYgKCFpc0VtcHR5Lmhhc1ZhbHVlKCkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKGlzRW1wdHkudmFsdWUoKSkKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTExOSw3ICsxMTksNyBAQCBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50
aWFsRGF0YT4gUHVibGljCiAKICAgICBPcHRpb25hbDxib29sPiBpc0F1dGhlbnRpY2F0b3JBdHRl
c3RhdGlvblJlc3BvbnNlOwogICAgIGRlY29kZXIgPj4gaXNBdXRoZW50aWNhdG9yQXR0ZXN0YXRp
b25SZXNwb25zZTsKLSAgICBpZiAoIWlzQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2Up
CisgICAgaWYgKCFpc0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLmhhc1ZhbHVlKCkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcmVzdWx0LmlzQXV0aGVudGljYXRv
ckF0dGVzdGF0aW9uUmVzcG9uc2UgPSBpc0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNl
LnZhbHVlKCk7CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50
aWFsRGF0YT4gUHVibGljCiAKICAgICBPcHRpb25hbDxib29sPiBoYXNVc2VySGFuZGxlOwogICAg
IGRlY29kZXIgPj4gaGFzVXNlckhhbmRsZTsKLSAgICBpZiAoIWhhc1VzZXJIYW5kbGUpCisgICAg
aWYgKCFoYXNVc2VySGFuZGxlLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgaWYgKCEqaGFzVXNlckhhbmRsZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50
RXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAyNDM1NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4
cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgfSkpOwogCi0gICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgIGlmIChyZXN1bHQuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIHJl
dHVybiAqcmVzdWx0OwogCiAgICAgICAgIG90aGVyLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgewpAQCAtMTU4LDcgKzE1OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICB9KSk7CiAK
LSAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaGFzVmFsdWUo
KSk7CiAgICAgICAgIHJldHVybiAqcmVzdWx0OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvU2NyaXB0cy9TZXR0aW5nc1RlbXBsYXRlcy9TZXR0aW5ncy5jcHAuZXJiCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1NjcmlwdHMvU2V0dGluZ3NUZW1wbGF0ZXMvU2V0dGluZ3MuY3Bw
LmVyYgkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvU2NyaXB0cy9TZXR0aW5n
c1RlbXBsYXRlcy9TZXR0aW5ncy5jcHAuZXJiCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3
IEBAIFNldHRpbmdzOjp+U2V0dGluZ3MoKQogPCU9IEBzZXR0aW5nLnBhcmFtZXRlclR5cGUgJT4g
U2V0dGluZ3M6OjwlPSBAc2V0dGluZy5nZXR0ZXJGdW5jdGlvbk5hbWUgJT4oKSBjb25zdAogewog
PCUtIGlmIEBzZXR0aW5nLmhhc0luc3BlY3Rvck92ZXJyaWRlPyAtJT4KLSAgICBpZiAobV88JT0g
QHNldHRpbmcubmFtZSAlPkluc3BlY3Rvck92ZXJyaWRlKQorICAgIGlmIChtXzwlPSBAc2V0dGlu
Zy5uYW1lICU+SW5zcGVjdG9yT3ZlcnJpZGUuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG1f
PCU9IEBzZXR0aW5nLm5hbWUgJT5JbnNwZWN0b3JPdmVycmlkZS52YWx1ZSgpOwogPCUtIGVuZCAt
JT4KICAgICByZXR1cm4gbV88JT0gQHNldHRpbmcubmFtZSAlPjsKQEAgLTk5LDcgKzk5LDcgQEAg
dm9pZCBTZXR0aW5nczo6PCU9IEBzZXR0aW5nLnNldHRlckZ1bmN0aQogPCU9IEBzZXR0aW5nLnBh
cmFtZXRlclR5cGUgJT4gU2V0dGluZ3M6OjwlPSBAc2V0dGluZy5nZXR0ZXJGdW5jdGlvbk5hbWUg
JT4oKSBjb25zdAogewogPCUtIGlmIEBzZXR0aW5nLmhhc0luc3BlY3Rvck92ZXJyaWRlPyAtJT4K
LSAgICBpZiAobV88JT0gQHNldHRpbmcubmFtZSAlPkluc3BlY3Rvck92ZXJyaWRlKQorICAgIGlm
IChtXzwlPSBAc2V0dGluZy5uYW1lICU+SW5zcGVjdG9yT3ZlcnJpZGUuaGFzVmFsdWUoKSkKICAg
ICAgICAgcmV0dXJuIG1fPCU9IEBzZXR0aW5nLm5hbWUgJT5JbnNwZWN0b3JPdmVycmlkZS52YWx1
ZSgpOwogPCUtIGVuZCAtJT4KICAgICByZXR1cm4gbV88JT0gQHNldHRpbmcubmFtZSAlPjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmNwcAko
cmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRp
bWVsaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgQW5pbWF0
aW9uVGltZWxpbmU6OnVwZGF0ZUNTU1RyYW5zaXQKICAgICBmb3IgKGludCBwcm9wZXJ0eUluZGV4
ID0gMDsgcHJvcGVydHlJbmRleCA8IG51bWJlck9mUHJvcGVydGllczsgKytwcm9wZXJ0eUluZGV4
KSB7CiAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzU2hvcnRoYW5kOwogICAgICAgICBhdXRvIHBy
b3BlcnR5ID0gQ1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChwcm9wZXJ0
eUluZGV4LCBpc1Nob3J0aGFuZCk7Ci0gICAgICAgIGlmIChpc1Nob3J0aGFuZCAmJiAqaXNTaG9y
dGhhbmQpCisgICAgICAgIGlmIChpc1Nob3J0aGFuZC5oYXNWYWx1ZSgpICYmICppc1Nob3J0aGFu
ZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGNvbnN0IEFuaW1hdGlvbiogbWF0
Y2hpbmdCYWNraW5nQW5pbWF0aW9uID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL0lETFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
SURMVHlwZXMuaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
SURMVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgSURMVHlw
ZSB7CiAKICAgICB1c2luZyBOdWxsYWJsZVR5cGUgPSBPcHRpb25hbDxJbXBsZW1lbnRhdGlvblR5
cGU+OwogICAgIHN0YXRpYyBOdWxsYWJsZVR5cGUgbnVsbFZhbHVlKCkgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9Ci0gICAgc3RhdGljIGJvb2wgaXNOdWxsVmFsdWUoY29uc3QgTnVsbGFibGVUeXBl
JiB2YWx1ZSkgeyByZXR1cm4gIXZhbHVlOyB9CisgICAgc3RhdGljIGJvb2wgaXNOdWxsVmFsdWUo
Y29uc3QgTnVsbGFibGVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gIXZhbHVlLmhhc1ZhbHVlKCk7IH0K
ICAgICBzdGF0aWMgSW1wbGVtZW50YXRpb25UeXBlIGV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShj
b25zdCBOdWxsYWJsZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS52YWx1ZSgpOyB9CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCBi
b29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluCiAgICAgU3RyaW5nIGVycm9y
TWVzc2FnZTsKICAgICBPcHRpb25hbDxib29sPiBjYWNoZWRJc0Nyb3NzT3JpZ2luQWNjZXNzOwog
ICAgIGF1dG8gaXNDcm9zc09yaWdpbkFjY2VzcyA9IFsmXSB7Ci0gICAgICAgIGlmICghY2FjaGVk
SXNDcm9zc09yaWdpbkFjY2VzcykKKyAgICAgICAgaWYgKCFjYWNoZWRJc0Nyb3NzT3JpZ2luQWNj
ZXNzLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICBjYWNoZWRJc0Nyb3NzT3JpZ2luQWNjZXNzID0g
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqc3RhdGUsIHdp
bmRvdywgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuICpjYWNoZWRJc0Nyb3NzT3JpZ2lu
QWNjZXNzOwogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50UnVsZUxpc3RSZXN1bHRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudFJ1bGVMaXN0UmVzdWx0cy5oCShyZXZpc2lvbiAyNDM1NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50UnVsZUxpc3RSZXN1
bHRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxNyArMTA3LDE3IEBAIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IGF1dG8gQ29udGVudFJ1bGUKIHsKICAgICBPcHRpb25hbDxib29sPiBibG9ja2Vk
TG9hZDsKICAgICBkZWNvZGVyID4+IGJsb2NrZWRMb2FkOwotICAgIGlmICghYmxvY2tlZExvYWQp
CisgICAgaWYgKCFibG9ja2VkTG9hZC5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIAogICAgIE9wdGlvbmFsPGJvb2w+IG1hZGVIVFRQUzsKICAgICBkZWNvZGVy
ID4+IG1hZGVIVFRQUzsKLSAgICBpZiAoIW1hZGVIVFRQUykKKyAgICBpZiAoIW1hZGVIVFRQUy5o
YXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIE9wdGlv
bmFsPGJvb2w+IGJsb2NrZWRDb29raWVzOwogICAgIGRlY29kZXIgPj4gYmxvY2tlZENvb2tpZXM7
Ci0gICAgaWYgKCFibG9ja2VkQ29va2llcykKKyAgICBpZiAoIWJsb2NrZWRDb29raWVzLmhhc1Zh
bHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgT3B0aW9uYWw8
VmVjdG9yPFN0cmluZz4+IG5vdGlmaWNhdGlvbnM7CkBAIC0xNDUsMjIgKzE0NSwyMiBAQCB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBhdXRvIENvbnRlbnRSdWxlCiB7CiAgICAgT3B0aW9uYWw8Ym9v
bD4gYmxvY2tlZExvYWQ7CiAgICAgZGVjb2RlciA+PiBibG9ja2VkTG9hZDsKLSAgICBpZiAoIWJs
b2NrZWRMb2FkKQorICAgIGlmICghYmxvY2tlZExvYWQuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBPcHRpb25hbDxib29sPiBtYWRlSFRUUFM7CiAg
ICAgZGVjb2RlciA+PiBtYWRlSFRUUFM7Ci0gICAgaWYgKCFtYWRlSFRUUFMpCisgICAgaWYgKCFt
YWRlSFRUUFMuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAK
ICAgICBPcHRpb25hbDxib29sPiBibG9ja2VkQ29va2llczsKICAgICBkZWNvZGVyID4+IGJsb2Nr
ZWRDb29raWVzOwotICAgIGlmICghYmxvY2tlZENvb2tpZXMpCisgICAgaWYgKCFibG9ja2VkQ29v
a2llcy5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAg
IE9wdGlvbmFsPGJvb2w+IGhhc05vdGlmaWNhdGlvbnM7CiAgICAgZGVjb2RlciA+PiBoYXNOb3Rp
ZmljYXRpb25zOwotICAgIGlmICghaGFzTm90aWZpY2F0aW9ucykKKyAgICBpZiAoIWhhc05vdGlm
aWNhdGlvbnMuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAK
ICAgICByZXR1cm4ge3sKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5QUVTLmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBSZWZQ
dHI8Q3J5cHRvS2V5QUVTPiBDcnlwdG9LZXlBRVM6OmltcG9yCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmIChrZXlEYXRhLmtleV9vcHMgJiYgKChrZXlEYXRhLnVzYWdlcyAmIHVzYWdl
cykgIT0gdXNhZ2VzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGtleURhdGEu
ZXh0ICYmICFrZXlEYXRhLmV4dC52YWx1ZSgpICYmIGV4dHJhY3RhYmxlKQorICAgIGlmIChrZXlE
YXRhLmV4dC5oYXNWYWx1ZSgpICYmICFrZXlEYXRhLmV4dC52YWx1ZSgpICYmIGV4dHJhY3RhYmxl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5
cHRvS2V5QUVTKGFsZ29yaXRobSwgV1RGTW92ZShvY3RldFNlcXVlbmNlKSwgZXh0cmFjdGFibGUs
IHVzYWdlcykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVD
LmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIFJlZlB0cjxDcnlw
dG9LZXlFQz4gQ3J5cHRvS2V5RUM6OmltcG9ydEoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgaWYgKGtleURhdGEua2V5X29wcyAmJiAoKGtleURhdGEudXNhZ2VzICYgdXNhZ2VzKSAhPSB1
c2FnZXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoa2V5RGF0YS5leHQgJiYg
IWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCisgICAgaWYgKGtleURhdGEuZXh0
Lmhhc1ZhbHVlKCkgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGtleURhdGEuY3J2LmlzTnVsbCgpIHx8IGN1
cnZlICE9IGtleURhdGEuY3J2KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEy
LDcgQEAgUmVmUHRyPENyeXB0b0tleUhNQUM+IENyeXB0b0tleUhNQUM6OmltcAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoa2V5RGF0YS5rZXlfb3BzICYmICgoa2V5RGF0YS51c2Fn
ZXMgJiB1c2FnZXMpICE9IHVzYWdlcykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
IChrZXlEYXRhLmV4dCAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBleHRyYWN0YWJsZSkKKyAg
ICBpZiAoa2V5RGF0YS5leHQuaGFzVmFsdWUoKSAmJiAha2V5RGF0YS5leHQudmFsdWUoKSAmJiBl
eHRyYWN0YWJsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gQ3J5cHRv
S2V5SE1BQzo6aW1wb3J0UmF3KGxlbmd0aEJpdHMsIGhhc2gsIFdURk1vdmUob2N0ZXRTZXF1ZW5j
ZSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5UlNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlSU0EuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIFJlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJTQTo6aW1wb3IKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGtleURhdGEua2V5X29wcyAmJiAoKGtleURhdGEudXNh
Z2VzICYgdXNhZ2VzKSAhPSB1c2FnZXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBp
ZiAoa2V5RGF0YS5leHQgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYgZXh0cmFjdGFibGUpCisg
ICAgaWYgKGtleURhdGEuZXh0Lmhhc1ZhbHVlKCkgJiYgIWtleURhdGEuZXh0LnZhbHVlKCkgJiYg
ZXh0cmFjdGFibGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGtleURhdGEu
bi5pc051bGwoKSB8fCBrZXlEYXRhLmUuaXNOdWxsKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCBDU1NS
dWxlKiBDU1NTdHlsZVNoZWV0OjppdGVtKHVuc2lnbmVkIGluCiAKIGJvb2wgQ1NTU3R5bGVTaGVl
dDo6Y2FuQWNjZXNzUnVsZXMoKSBjb25zdAogewotICAgIGlmIChtX2lzT3JpZ2luQ2xlYW4pCisg
ICAgaWYgKG1faXNPcmlnaW5DbGVhbi5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gbV9pc09y
aWdpbkNsZWFuLnZhbHVlKCk7CiAKICAgICBVUkwgYmFzZVVSTCA9IG1fY29udGVudHMtPmJhc2VV
UkwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmNwcAkocmV2
aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERP
TU1hdHJpeFJlYWRPbmx5Ojp2YWwKICAgICBpZiAodmFsaWRhdGUyRC5oYXNFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIHZhbGlkYXRlMkQucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgaWYg
KGluaXQuaXMyRCAmJiBpbml0LmlzMkQudmFsdWUoKSkgeworICAgIGlmIChpbml0LmlzMkQuaGFz
VmFsdWUoKSAmJiBpbml0LmlzMkQudmFsdWUoKSkgewogICAgICAgICBpZiAoaW5pdC5tMTMpCiAg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAibTEzIHNob3VsZCBiZSAw
IGZvciBhIDJEIG1hdHJpeCJfcyB9OwogICAgICAgICBpZiAoaW5pdC5tMTQpCkBAIC0xNjQsNyAr
MTY0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NTWF0cml4UmVhZE9ubHk6OnZhbAogICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgIm00NCBzaG91bGQgYmUgMSBmb3Ig
YSAyRCBtYXRyaXgiX3MgfTsKICAgICB9CiAKLSAgICBpZiAoIWluaXQuaXMyRCkgeworICAgIGlm
ICghaW5pdC5pczJELmhhc1ZhbHVlKCkpIHsKICAgICAgICAgaWYgKGluaXQubTEzIHx8IGluaXQu
bTE0IHx8IGluaXQubTIzIHx8IGluaXQubTI0IHx8IGluaXQubTMxIHx8IGluaXQubTMyIHx8IGlu
aXQubTM0IHx8IGluaXQubTQzIHx8IGluaXQubTMzICE9IDEgfHwgaW5pdC5tNDQgIT0gMSkKICAg
ICAgICAgICAgIGluaXQuaXMyRCA9IGZhbHNlOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
NCw3ICsyMjQsNyBAQCBib29sIERvY3VtZW50UnVsZVNldHM6Omhhc0NvbXBsZXhTZWxlY3RvCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9OwogCi0gICAgaWYgKCFtX2NhY2hlZEhhc0NvbXBs
ZXhTZWxlY3RvcnNGb3JTdHlsZUF0dHJpYnV0ZSkKKyAgICBpZiAoIW1fY2FjaGVkSGFzQ29tcGxl
eFNlbGVjdG9yc0ZvclN0eWxlQXR0cmlidXRlLmhhc1ZhbHVlKCkpCiAgICAgICAgIG1fY2FjaGVk
SGFzQ29tcGxleFNlbGVjdG9yc0ZvclN0eWxlQXR0cmlidXRlID0gY29tcHV0ZSgpOwogCiAgICAg
cmV0dXJuICptX2NhY2hlZEhhc0NvbXBsZXhTZWxlY3RvcnNGb3JTdHlsZUF0dHJpYnV0ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4OSwxNCArMTQ4OSwxNCBA
QCBFeGNlcHRpb25Pcjxib29sPiBFbGVtZW50Ojp0b2dnbGVBdHRyaWJ1CiAgICAgYXV0byBjYXNl
QWRqdXN0ZWRRdWFsaWZpZWROYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSgqdGhpcykg
PyBxdWFsaWZpZWROYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgOiBxdWFsaWZpZWROYW1l
OwogICAgIHVuc2lnbmVkIGluZGV4ID0gZWxlbWVudERhdGEoKSA/IGVsZW1lbnREYXRhKCktPmZp
bmRBdHRyaWJ1dGVJbmRleEJ5TmFtZShjYXNlQWRqdXN0ZWRRdWFsaWZpZWROYW1lLCBmYWxzZSkg
OiBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQ7CiAgICAgaWYgKGluZGV4ID09IEVsZW1l
bnREYXRhOjphdHRyaWJ1dGVOb3RGb3VuZCkgewotICAgICAgICBpZiAoIWZvcmNlIHx8ICpmb3Jj
ZSkgeworICAgICAgICBpZiAoIWZvcmNlLmhhc1ZhbHVlKCkgfHwgKmZvcmNlKSB7CiAgICAgICAg
ICAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCwgUXVhbGlmaWVkTmFtZSB7IG51bGxBdG9t
KCksIGNhc2VBZGp1c3RlZFF1YWxpZmllZE5hbWUsIG51bGxBdG9tKCkgfSwgZW1wdHlTdHJpbmco
KSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGlmICghZm9yY2UgfHwgISpmb3JjZSkgeworICAgIGlmICghZm9yY2UuaGFzVmFsdWUoKSB8fCAh
KmZvcmNlKSB7CiAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZUludGVybmFsKGluZGV4LCBOb3RJblN5
bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCShyZXZpc2lv
biAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDEwICs5NywxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBNdXRhdGlv
bk9ic2VydmVyOjpvYnNlCiAgICAgICAgIG9wdGlvbnMgfD0gQXR0cmlidXRlRmlsdGVyOwogICAg
IH0KIAotICAgIGlmIChpbml0LmF0dHJpYnV0ZXMgPyBpbml0LmF0dHJpYnV0ZXMudmFsdWUoKSA6
IChvcHRpb25zICYgKEF0dHJpYnV0ZUZpbHRlciB8IEF0dHJpYnV0ZU9sZFZhbHVlKSkpCisgICAg
aWYgKGluaXQuYXR0cmlidXRlcy5oYXNWYWx1ZSgpID8gaW5pdC5hdHRyaWJ1dGVzLnZhbHVlKCkg
OiAob3B0aW9ucyAmIChBdHRyaWJ1dGVGaWx0ZXIgfCBBdHRyaWJ1dGVPbGRWYWx1ZSkpKQogICAg
ICAgICBvcHRpb25zIHw9IEF0dHJpYnV0ZXM7CiAKLSAgICBpZiAoaW5pdC5jaGFyYWN0ZXJEYXRh
ID8gaW5pdC5jaGFyYWN0ZXJEYXRhLnZhbHVlKCkgOiAob3B0aW9ucyAmIENoYXJhY3RlckRhdGFP
bGRWYWx1ZSkpCisgICAgaWYgKGluaXQuY2hhcmFjdGVyRGF0YS5oYXNWYWx1ZSgpID8gaW5pdC5j
aGFyYWN0ZXJEYXRhLnZhbHVlKCkgOiAob3B0aW9ucyAmIENoYXJhY3RlckRhdGFPbGRWYWx1ZSkp
CiAgICAgICAgIG9wdGlvbnMgfD0gQ2hhcmFjdGVyRGF0YTsKIAogICAgIGlmICghdmFsaWRhdGVP
cHRpb25zKG9wdGlvbnMpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb250QXR0cmli
dXRlQ2hhbmdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb250
QXR0cmlidXRlQ2hhbmdlcy5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRm9udEF0dHJpYnV0ZUNoYW5nZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwx
MCArNjQsMTAgQEAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IEZvbnRDaGFuZ2VzOgogICAg
IGlmICghIWZhbWlseU5hbWVGb3JDU1MpCiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRGYW1pbHksIGNzc1ZhbHVlUG9vbC5jcmVhdGVGb250RmFtaWx5VmFsdWUoZmFt
aWx5TmFtZUZvckNTUykpOwogCi0gICAgaWYgKG1faXRhbGljKQorICAgIGlmIChtX2l0YWxpYy5o
YXNWYWx1ZSgpKQogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5
bGUsICptX2l0YWxpYyA/IENTU1ZhbHVlSXRhbGljIDogQ1NTVmFsdWVOb3JtYWwpOwogCi0gICAg
aWYgKG1fYm9sZCkKKyAgICBpZiAobV9ib2xkLmhhc1ZhbHVlKCkpCiAgICAgICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICptX2JvbGQgPyBDU1NWYWx1ZUJvbGQg
OiBDU1NWYWx1ZU5vcm1hbCk7CiAKICAgICBpZiAobV9mb250U2l6ZSkKQEAgLTk2LDcgKzk2LDcg
QEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNzc1ZhbHVlTGlzdAogCiBFZGl0QWN0aW9u
IEZvbnRBdHRyaWJ1dGVDaGFuZ2VzOjplZGl0QWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
dmVydGljYWxBbGlnbiAmJiAhbV9iYWNrZ3JvdW5kQ29sb3IgJiYgIW1fc2hhZG93ICYmICFtX3N0
cmlrZVRocm91Z2ggJiYgIW1fdW5kZXJsaW5lKSB7CisgICAgaWYgKCFtX3ZlcnRpY2FsQWxpZ24g
JiYgIW1fYmFja2dyb3VuZENvbG9yICYmICFtX3NoYWRvdyAmJiAhbV9zdHJpa2VUaHJvdWdoLmhh
c1ZhbHVlKCkgJiYgIW1fdW5kZXJsaW5lLmhhc1ZhbHVlKCkpIHsKICAgICAgICAgaWYgKG1fZm9y
ZWdyb3VuZENvbG9yICYmIG1fZm9udENoYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIEVkaXRBY3Rpb246OlNldENvbG9yOwogCkBAIC0xNDIsMTAgKzE0MiwxMCBAQCBSZWY8RWRp
dGluZ1N0eWxlPiBGb250QXR0cmlidXRlQ2hhbmdlczo6CiAKICAgICBhdXRvIGVkaXRpbmdTdHls
ZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHN0eWxlLnB0cigpKTsKIAotICAgIGlmIChtX3N0cmlr
ZVRocm91Z2gpCisgICAgaWYgKG1fc3RyaWtlVGhyb3VnaC5oYXNWYWx1ZSgpKQogICAgICAgICBl
ZGl0aW5nU3R5bGUtPnNldFN0cmlrZVRocm91Z2hDaGFuZ2UoKm1fc3RyaWtlVGhyb3VnaCA/IFRl
eHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQgOiBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6UmVtb3ZlKTsK
IAotICAgIGlmIChtX3VuZGVybGluZSkKKyAgICBpZiAobV91bmRlcmxpbmUuaGFzVmFsdWUoKSkK
ICAgICAgICAgZWRpdGluZ1N0eWxlLT5zZXRVbmRlcmxpbmVDaGFuZ2UoKm1fdW5kZXJsaW5lID8g
VGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZCA6IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpSZW1vdmUp
OwogCiAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRm9udEF0dHJpYnV0ZUNoYW5nZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRm9udEF0dHJpYnV0ZUNoYW5nZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuICFtX2ZvbnROYW1lICYmICFtX2ZvbnRGYW1pbHkgJiYgIW1fZm9u
dFNpemUgJiYgIW1fZm9udFNpemVEZWx0YSAmJiAhbV9ib2xkICYmICFtX2l0YWxpYzsKKyAgICAg
ICAgcmV0dXJuICFtX2ZvbnROYW1lICYmICFtX2ZvbnRGYW1pbHkgJiYgIW1fZm9udFNpemUgJiYg
IW1fZm9udFNpemVEZWx0YSAmJiAhbV9ib2xkLmhhc1ZhbHVlKCkgJiYgIW1faXRhbGljLmhhc1Zh
bHVlKCk7CiAgICAgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEVkaXRpbmdTdHlsZT4gY3Jl
YXRlRWRpdGluZ1N0eWxlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zv
bnRBdHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb250
QXR0cmlidXRlcy5oCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZvbnRBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gaW5saW5lIE9wdGlvbmFsPAogCiAgICAgT3B0aW9uYWw8Ym9vbD4g
b3JkZXJlZDsKICAgICBkZWNvZGVyID4+IG9yZGVyZWQ7Ci0gICAgaWYgKCFvcmRlcmVkKQorICAg
IGlmICghb3JkZXJlZC5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgcmV0dXJuIHt7IHN0YXRpY19jYXN0PExpc3RTdHlsZVR5cGU+KFdURk1vdmUoKnN0eWxl
KSksIFdURk1vdmUoKnN0YXJ0aW5nSXRlbU51bWJlciksIFdURk1vdmUoKm9yZGVyZWQpIH19OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcg
QEAgU3RyaW5nIEZpbGU6OmNvbnRlbnRUeXBlRm9yRmlsZShjb25zdCBTdAogCiBib29sIEZpbGU6
OmlzRGlyZWN0b3J5KCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNEaXJlY3RvcnkpCisgICAgaWYg
KCFtX2lzRGlyZWN0b3J5Lmhhc1ZhbHVlKCkpCiAgICAgICAgIG1faXNEaXJlY3RvcnkgPSBGaWxl
U3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkobV9wYXRoLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dT
eW1ib2xpY0xpbmtzOjpZZXMpOwogICAgIHJldHVybiAqbV9pc0RpcmVjdG9yeTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5
LDcgKzE0OSw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IERPTVRva2VuTGlzdDo6dG9nZ2xlKGMKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGZvcmNlICYmICFmb3JjZS52YWx1
ZSgpKQorICAgIGlmIChmb3JjZS5oYXNWYWx1ZSgpICYmICFmb3JjZS52YWx1ZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICB0b2tlbnMuYXBwZW5kKHRva2VuKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3OSw3
ICsyMjc5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYQogICAg
IGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwogICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7CiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKLSAgICAgICAgaWYgKCFz
aW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsKKyAgICAgICAgaWYgKCFzaW11bGF0ZVZlcnRl
eEF0dHJpYjBTdGF0dXMuaGFzVmFsdWUoKSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFi
bGUgdG8gc2ltdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZmZXIuCiAgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJy
YXlzIiwgInVuYWJsZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yMzM1LDcgKzIzMzUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRyYXdFbGVtCiAgICAgICAgIGlmICghbnVtRWxlbWVudHMpCiAgICAgICAgICAg
ICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNE
aW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7CiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwU3RhdHVzID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAg
ICAgICAgaWYgKCFzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsKKyAgICAgICAgaWYgKCFz
aW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMuaGFzVmFsdWUoKSkgewogICAgICAgICAgICAgLy8g
V2Ugd2VyZSB1bmFibGUgdG8gc2ltdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZmZXIuCiAgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJkcmF3RWxlbWVudHMiLCAidW5hYmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0dHJpYjAgYXJy
YXkiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY0MDAsNyArNjQwMCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmEKICAgICBib29sIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAg
ICBhdXRvIHNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cyA9IHNpbXVsYXRlVmVydGV4QXR0cmli
MChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgICAgIGlmICghc2ltdWxhdGVWZXJ0ZXhBdHRyaWIw
U3RhdHVzKSB7CisgICAgICAgIGlmICghc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzLmhhc1Zh
bHVlKCkpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIHNpbXVsYXRlIHRoZSBh
dHRyaWJ1dGUgYnVmZmVyLgogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0FycmF5c0luc3RhbmNlZCIsICJ1bmFi
bGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtNjQzNyw3ICs2NDM3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
cmF3RWxlbQogICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQogICAgICAgICAgICAgdmFsaWRhdGVJ
bmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSwgbnVtRWxlbWVudHMpOwogICAgICAgICBhdXRvIHNpbXVsYXRlVmVydGV4QXR0cmliMFN0
YXR1cyA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7Ci0gICAgICAgIGlmICgh
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzKSB7CisgICAgICAgIGlmICghc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwU3RhdHVzLmhhc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5h
YmxlIHRvIHNpbXVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVyLgogICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIp
OwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JB
dWRpdEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3
LDcgQEAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8SW5zcGVjdG9yQXVkaXRBY2NlcwogICAgICAgICBD
b21wdXRlZFByb3BlcnRpZXMgY29tcHV0ZWRQcm9wZXJ0aWVzOwogCiAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGN1cnJlbnQgPSBheE9iamVjdDsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnQg
JiYgKCFjb21wdXRlZFByb3BlcnRpZXMuYnVzeSB8fCAhY29tcHV0ZWRQcm9wZXJ0aWVzLmJ1c3ku
dmFsdWUoKSkpIHsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnQgJiYgKCFjb21wdXRlZFByb3BlcnRp
ZXMuYnVzeS5oYXNWYWx1ZSgpIHx8ICFjb21wdXRlZFByb3BlcnRpZXMuYnVzeS52YWx1ZSgpKSkg
ewogICAgICAgICAgICAgY29tcHV0ZWRQcm9wZXJ0aWVzLmJ1c3kgPSBjdXJyZW50LT5pc0J1c3ko
KTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRPYmplY3QoKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsOSAr
MzgwLDkgQEAgc3RhdGljIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudShWZWN0b3I8SQogICAgICAg
ICBhdXRvIHR5cGUgPSBpdGVtLnR5cGUgPT0gImNoZWNrYm94IiA/IENoZWNrYWJsZUFjdGlvblR5
cGUgOiBBY3Rpb25UeXBlOwogICAgICAgICBhdXRvIGFjdGlvbiA9IHN0YXRpY19jYXN0PENvbnRl
eHRNZW51QWN0aW9uPihDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnICsgaXRlbS5pZC52YWx1
ZU9yKDApKTsKICAgICAgICAgQ29udGV4dE1lbnVJdGVtIG1lbnVJdGVtID0geyB0eXBlLCBhY3Rp
b24sIGl0ZW0ubGFiZWwgfTsKLSAgICAgICAgaWYgKGl0ZW0uZW5hYmxlZCkKKyAgICAgICAgaWYg
KGl0ZW0uZW5hYmxlZC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgbWVudUl0ZW0uc2V0RW5hYmxl
ZCgqaXRlbS5lbmFibGVkKTsKLSAgICAgICAgaWYgKGl0ZW0uY2hlY2tlZCkKKyAgICAgICAgaWYg
KGl0ZW0uY2hlY2tlZC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgbWVudUl0ZW0uc2V0Q2hlY2tl
ZCgqaXRlbS5jaGVja2VkKTsKICAgICAgICAgbWVudS5hcHBlbmRJdGVtKG1lbnVJdGVtKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
Miw3ICszODIsNyBAQCBib29sIERPTVdpbmRvdzo6Y2FuU2hvd01vZGFsRGlhbG9nKGNvbnN0CiAg
ICAgLy8gT3ZlcnJpZGUgc3VwcG9ydCBmb3IgbGF5b3V0IHRlc3RpbmcgcHVycG9zZXMuCiAgICAg
aWYgKGF1dG8qIGRvY3VtZW50ID0gZnJhbWUuZG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoYXV0
byogd2luZG93ID0gZG9jdW1lbnQtPmRvbVdpbmRvdygpKSB7Ci0gICAgICAgICAgICBpZiAod2lu
ZG93LT5tX2NhblNob3dNb2RhbERpYWxvZ092ZXJyaWRlKQorICAgICAgICAgICAgaWYgKHdpbmRv
dy0+bV9jYW5TaG93TW9kYWxEaWFsb2dPdmVycmlkZS5oYXNWYWx1ZSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiB3aW5kb3ctPm1fY2FuU2hvd01vZGFsRGlhbG9nT3ZlcnJpZGUudmFsdWUoKTsK
ICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMjQzNTY2
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEy
OCw3ICsxMTI4LDcgQEAgYm9vbCBQYWdlOjppc09ubHlOb25VdGlsaXR5UGFnZSgpIGNvbnN0CiAK
IGJvb2wgUGFnZTo6aXNMb3dQb3dlck1vZGVFbmFibGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9s
b3dQb3dlck1vZGVFbmFibGVkT3ZlcnJpZGVGb3JUZXN0aW5nKQorICAgIGlmIChtX2xvd1Bvd2Vy
TW9kZUVuYWJsZWRPdmVycmlkZUZvclRlc3RpbmcuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJu
IG1fbG93UG93ZXJNb2RlRW5hYmxlZE92ZXJyaWRlRm9yVGVzdGluZy52YWx1ZSgpOwogCiAgICAg
cmV0dXJuIG1fbG93UG93ZXJNb2RlTm90aWZpZXItPmlzTG93UG93ZXJNb2RlRW5hYmxlZCgpOwpA
QCAtMjcyMSw3ICsyNzIxLDcgQEAgYm9vbCBQYWdlOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0
CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbWFpbkZyYW1lKCkudmlldygpOwogICAgIGlmICghdmll
dyB8fCAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uodmlldy0+bWVkaWFUeXBlKCksICJz
Y3JlZW4iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3VzZURhcmtBcHBlYXJh
bmNlT3ZlcnJpZGUpCisgICAgaWYgKG1fdXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZS5oYXNWYWx1
ZSgpKQogICAgICAgICByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlLnZhbHVlKCk7
CiAgICAgcmV0dXJuIG1fdXNlRGFya0FwcGVhcmFuY2U7CiAjZWxzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9RdWlya3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UXVpcmtzLmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9RdWly
a3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgYm9vbCBRdWlya3M6Omhh
c0Jyb2tlbkVuY3J5cHRlZE1lZGlhQVBJUwogICAgIGlmICghbmVlZHNRdWlya3MoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faGFzQnJva2VuRW5jcnlwdGVkTWVkaWFBUElT
dXBwb3J0UXVpcmspCisgICAgaWYgKG1faGFzQnJva2VuRW5jcnlwdGVkTWVkaWFBUElTdXBwb3J0
UXVpcmsuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG1faGFzQnJva2VuRW5jcnlwdGVkTWVk
aWFBUElTdXBwb3J0UXVpcmsudmFsdWUoKTsKIAogICAgIGF1dG8gZG9tYWluID0gbV9kb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW4oKS5kb21haW4oKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwpA
QCAtMTQxLDcgKzE0MSw3IEBAIGJvb2wgUXVpcmtzOjpoYXNXZWJTUUxTdXBwb3J0UXVpcmsoKSBj
b24KICAgICBpZiAoIW5lZWRzUXVpcmtzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
LSAgICBpZiAobV9oYXNXZWJTUUxTdXBwb3J0UXVpcmspCisgICAgaWYgKG1faGFzV2ViU1FMU3Vw
cG9ydFF1aXJrLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBtX2hhc1dlYlNRTFN1cHBvcnRR
dWlyay52YWx1ZSgpOwogICAgIAogICAgIGF1dG8gZG9tYWluID0gbV9kb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKS5kb21haW4oKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24u
Y3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAg
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAg
ICAgICAvLyBHZXQgdGhlIG5leHQgcHJvcGVydHkgd2hpY2ggaXMgbm90IGEgc2hvcnRoYW5kLgog
ICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBpc1Nob3J0aGFuZDsKICAgICAgICAg
ICAgICAgICAgICAgcHJvcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5k
ZXgocHJvcGVydHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNT
aG9ydGhhbmQuaGFzVmFsdWUoKSAmJiAqaXNTaG9ydGhhbmQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NjcmVlblByb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JlZW5Qcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NjcmVlblByb3BlcnRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ1LDE3ICsxNDUsMTcgQEAgT3B0aW9uYWw8U2NyZWVuRGF0YT4gU2NyZWVuRGF0YTo6ZGVjb2Rl
KAogCiAgICAgT3B0aW9uYWw8Ym9vbD4gc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yOwogICAg
IGRlY29kZXIgPj4gc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yOwotICAgIGlmICghc2NyZWVu
U3VwcG9ydHNFeHRlbmRlZENvbG9yKQorICAgIGlmICghc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENv
bG9yLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBPcHRp
b25hbDxib29sPiBzY3JlZW5IYXNJbnZlcnRlZENvbG9yczsKICAgICBkZWNvZGVyID4+IHNjcmVl
bkhhc0ludmVydGVkQ29sb3JzOwotICAgIGlmICghc2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMpCisg
ICAgaWYgKCFzY3JlZW5IYXNJbnZlcnRlZENvbG9ycy5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgT3B0aW9uYWw8Ym9vbD4gc2NyZWVuSXNNb25vY2hyb21l
OwogICAgIGRlY29kZXIgPj4gc2NyZWVuSXNNb25vY2hyb21lOwotICAgIGlmICghc2NyZWVuSXNN
b25vY2hyb21lKQorICAgIGlmICghc2NyZWVuSXNNb25vY2hyb21lLmhhc1ZhbHVlKCkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBPcHRpb25hbDx1aW50MzJfdD4gZGlzcGxh
eU1hc2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAko
cmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVn
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCBPcHRpb25hbDxSZWdpb24+
IFJlZ2lvbjo6ZGVjb2RlKERlY29kZXImCiAKICAgICBPcHRpb25hbDxib29sPiBoYXNTaGFwZTsK
ICAgICBkZWNvZGVyID4+IGhhc1NoYXBlOwotICAgIGlmICghaGFzU2hhcGUpCisgICAgaWYgKCFo
YXNTaGFwZS5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
UmVnaW9uIHJlZ2lvbiA9IHsgKmJvdW5kcyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
CShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTgyLDcgKzE1ODIsNyBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OkFzc2V0U3RhCiAgICAgaWYgKCFwbGF5ZXIoKS0+c2hvdWxkQ2hlY2tIYXJkd2Fy
ZVN1cHBvcnQoKSkKICAgICAgICAgbV90cmFja3NBcmVQbGF5YWJsZSA9IHRydWU7CiAKLSAgICBp
ZiAoIW1fdHJhY2tzQXJlUGxheWFibGUpIHsKKyAgICBpZiAoIW1fdHJhY2tzQXJlUGxheWFibGUu
aGFzVmFsdWUoKSkgewogICAgICAgICBtX3RyYWNrc0FyZVBsYXlhYmxlID0gdHJ1ZTsKICAgICAg
ICAgZm9yIChBVkFzc2V0VHJhY2sgKnRyYWNrIGluIFttX2F2QXNzZXQgdHJhY2tzXSkgewogICAg
ICAgICAgICAgaWYgKCFhc3NldFRyYWNrTWVldHNIYXJkd2FyZURlY29kZVJlcXVpcmVtZW50cyh0
cmFjaywgcGxheWVyKCktPm1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0
KCkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9NZWRp
YUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Q29jb2EuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL01lZGlhRW5naW5lQ29uZmlndXJhdGlv
bkZhY3RvcnlDb2NvYS5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2Nv
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBjcmVhdGVNZWRpYVBs
YXllckRlY29kaW5nQ29uZmlndXJhdAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgYm9vbCBhbHBoYUNoYW5uZWwgPSB2aWRlb0NvbmZpZ3VyYXRpb24uYWxwaGFDaGFu
bmVsICYmIHZpZGVvQ29uZmlndXJhdGlvbi5hbHBoYUNoYW5uZWwudmFsdWUoKTsKKyAgICAgICAg
Ym9vbCBhbHBoYUNoYW5uZWwgPSB2aWRlb0NvbmZpZ3VyYXRpb24uYWxwaGFDaGFubmVsLmhhc1Zh
bHVlKCkgJiYgdmlkZW9Db25maWd1cmF0aW9uLmFscGhhQ2hhbm5lbC52YWx1ZSgpOwogCiAgICAg
ICAgIGlmICh2aWRlb0NvZGVjVHlwZSA9PSBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDKSB7CiAgICAg
ICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoY29kZWMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURldmlj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0Nh
cHR1cmVEZXZpY2UuaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4
Nyw3IEBAIHB1YmxpYzoKIAogICAgICAgICBPcHRpb25hbDxib29sPiBlbmFibGVkOwogICAgICAg
ICBkZWNvZGVyID4+IGVuYWJsZWQ7Ci0gICAgICAgIGlmICghZW5hYmxlZCkKKyAgICAgICAgaWYg
KCFlbmFibGVkLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgICAgIE9wdGlvbmFsPENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU+IHR5cGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFD
b25zdHJhaW50cy5oCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3
ICsxMTksNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGdldEV4YWN0KFZhbHVlVHlwZSYgZXhhY3Qp
IGNvbnN0CiAgICAgewotICAgICAgICBpZiAoIW1fZXhhY3QpCisgICAgICAgIGlmICghbV9leGFj
dC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGV4YWN0
ID0gbV9leGFjdC52YWx1ZSgpOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgZ2V0RXhhY3QoYm9vbCYgZXhhY3QpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoIW1fZXhh
Y3QpCisgICAgICAgIGlmICghbV9leGFjdC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIGV4YWN0ID0gbV9leGFjdC52YWx1ZSgpOwpAQCAtNDU1LDcgKzQ1
NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZ2V0SWRlYWwoYm9vbCYgaWRlYWwpIGNvbnN0CiAg
ICAgewotICAgICAgICBpZiAoIW1faWRlYWwpCisgICAgICAgIGlmICghbV9pZGVhbC5oYXNWYWx1
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlkZWFsID0gbV9pZGVh
bC52YWx1ZSgpOwpAQCAtNDcyLDExICs0NzIsMTEgQEAgcHVibGljOgogICAgICAgICAvLyAyLiBJ
ZiB0aGUgY29uc3RyYWludCBpcyByZXF1aXJlZCAoJ21pbicsICdtYXgnLCBvciAnZXhhY3QnKSwg
YW5kIHRoZSBzZXR0aW5ncwogICAgICAgICAvLyAgICBkaWN0aW9uYXJ5J3MgdmFsdWUgZm9yIHRo
ZSBjb25zdHJhaW50IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbnN0cmFpbnQsIHRoZQogICAgICAg
ICAvLyAgICBmaXRuZXNzIGRpc3RhbmNlIGlzIHBvc2l0aXZlIGluZmluaXR5LgotICAgICAgICBp
ZiAobV9leGFjdCAmJiB2YWx1ZSAhPSBtX2V4YWN0LnZhbHVlKCkpCisgICAgICAgIGlmIChtX2V4
YWN0Lmhhc1ZhbHVlKCkgJiYgdmFsdWUgIT0gbV9leGFjdC52YWx1ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKIAogICAgICAg
ICAvLyAzLiBJZiBubyBpZGVhbCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBmaXRuZXNzIGRpc3Rh
bmNlIGlzIDAuCi0gICAgICAgIGlmICghbV9pZGVhbCB8fCBtX2lkZWFsLnZhbHVlKCkgPT0gdmFs
dWUpCisgICAgICAgIGlmICghbV9pZGVhbC5oYXNWYWx1ZSgpIHx8IG1faWRlYWwudmFsdWUoKSA9
PSB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIC8vIDUuIEZvciBhbGwg
c3RyaW5nIGFuZCBlbnVtIG5vbi1yZXF1aXJlZCBjb25zdHJhaW50cyAoZGV2aWNlSWQsIGdyb3Vw
SWQsIGZhY2luZ01vZGUsCkBAIC00OTgsMTMgKzQ5OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2V4YWN0ID0gdmFsdWU7CiAKICAgICAgICAgaWYgKHR5cGVkT3RoZXIuZ2V0SWRlYWwodmFs
dWUpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faWRlYWwgfHwgKHZhbHVlICYmICFtX2lkZWFsLnZh
bHVlKCkpKQorICAgICAgICAgICAgaWYgKCFtX2lkZWFsLmhhc1ZhbHVlKCkgfHwgKHZhbHVlICYm
ICFtX2lkZWFsLnZhbHVlKCkpKQogICAgICAgICAgICAgICAgIG1faWRlYWwgPSB2YWx1ZTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2V4
YWN0ICYmICFtX2lkZWFsOyB9OwotICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCB7IHJldHVy
biBib29sKG1fZXhhY3QpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1f
ZXhhY3QuaGFzVmFsdWUoKSAmJiAhbV9pZGVhbC5oYXNWYWx1ZSgpOyB9OworICAgIGJvb2wgaXNN
YW5kYXRvcnkoKSBjb25zdCB7IHJldHVybiBtX2V4YWN0Lmhhc1ZhbHVlKCk7IH0KIAogICAgIHRl
bXBsYXRlIDxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTWVkaWFFbmdpbmVD
b25maWd1cmF0aW9uRmFjdG9yeU1vY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suY3BwCShy
ZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnlNb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBzdGF0aWMgYm9vbCBjYW5EZWNvZGVNZWRpYShjb25zdCBNZWRpYURlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIE9ubHkgdGhlICJtb2NrLXdpdGgtYWxwaGEiIGNvZGVj
IHN1cHBvcnRzIGFscGhhQ2hhbm5lbAotICAgIGlmICh2aWRlb0NvbmZpZyAmJiB2aWRlb0NvbmZp
Zy0+YWxwaGFDaGFubmVsICYmIHZpZGVvQ29uZmlnLT5hbHBoYUNoYW5uZWwudmFsdWUoKSkgewor
ICAgIGlmICh2aWRlb0NvbmZpZyAmJiB2aWRlb0NvbmZpZy0+YWxwaGFDaGFubmVsLmhhc1ZhbHVl
KCkgJiYgdmlkZW9Db25maWctPmFscGhhQ2hhbm5lbC52YWx1ZSgpKSB7CiAgICAgICAgIGlmIChD
b250ZW50VHlwZSh2aWRlb0NvbmZpZy0+Y29udGVudFR5cGUpLmNvZGVjc1BhcmFtZXRlcigpICE9
ICJtb2NrLXdpdGgtYWxwaGEiKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGJvb2wgY2FuRW5jb2RlTWVkaWEoY29uc3QgTWVkaWFFbgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBPbmx5IHRoZSAibW9jay13aXRoLWFscGhh
IiBjb2RlYyBzdXBwb3J0cyBhbHBoYUNoYW5uZWwKLSAgICBpZiAodmlkZW9Db25maWcgJiYgdmlk
ZW9Db25maWctPmFscGhhQ2hhbm5lbCAmJiB2aWRlb0NvbmZpZy0+YWxwaGFDaGFubmVsLnZhbHVl
KCkpIHsKKyAgICBpZiAodmlkZW9Db25maWcgJiYgdmlkZW9Db25maWctPmFscGhhQ2hhbm5lbC5o
YXNWYWx1ZSgpICYmIHZpZGVvQ29uZmlnLT5hbHBoYUNoYW5uZWwudmFsdWUoKSkgewogICAgICAg
ICBpZiAoQ29udGVudFR5cGUodmlkZW9Db25maWctPmNvbnRlbnRUeXBlKS5jb2RlY3NQYXJhbWV0
ZXIoKSAhPSAibW9jay13aXRoLWFscGhhIikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCShy
ZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBzdHJ1Y3QgRm9ybURhdGFF
bGVtZW50IHsKIAogICAgICAgICAgICAgT3B0aW9uYWw8Ym9vbD4gc2hvdWxkR2VuZXJhdGVGaWxl
OwogICAgICAgICAgICAgZGVjb2RlciA+PiBzaG91bGRHZW5lcmF0ZUZpbGU7Ci0gICAgICAgICAg
ICBpZiAoIXNob3VsZEdlbmVyYXRlRmlsZSkKKyAgICAgICAgICAgIGlmICghc2hvdWxkR2VuZXJh
dGVGaWxlLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgICAgICAgICAgYm9vbCBvd25zR2VuZXJhdGVkRmlsZSA9IGZhbHNlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVO
b3RpZmllci5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3
ICs2MSw3IEBAIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmkKIAogYm9v
bCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6b25MaW5lKCkKIHsKLSAgICBpZiAoIW1faXNPbkxpbmUp
CisgICAgaWYgKCFtX2lzT25MaW5lLmhhc1ZhbHVlKCkpCiAgICAgICAgIHVwZGF0ZVN0YXRlKCk7
CiAgICAgcmV0dXJuIG1faXNPbkxpbmUudmFsdWVPcih0cnVlKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDI0MzU2NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzA1LDcgKzcwNSw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxv
Y2tEaXIKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
aXM8SW5saW5lVGV4dEJveD4oKmNoaWxkKSkgewotICAgICAgICAgICAgICAgIGlmIChPcHRpb25h
bDxib29sPiBtYXJrRXhpc3RzQW5kSXNBYm92ZSA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpj
aGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShjaGlsZExpbmVTdHlsZSkpIHsKKyAg
ICAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBtYXJrRXhpc3RzQW5kSXNBYm92ZSA9IGRvd25j
YXN0PElubGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShj
aGlsZExpbmVTdHlsZSk7CisgICAgICAgICAgICAgICAgaWYgKG1hcmtFeGlzdHNBbmRJc0Fib3Zl
Lmhhc1ZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCptYXJrRXhpc3RzQW5kSXNB
Ym92ZSAhPSBjaGlsZExpbmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNBbm5vdGF0aW9uc0JlZm9yZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKQEAgLTkwMCw3ICs5MDEsOCBAQCBpbmxpbmUgdm9pZCBJbmxpbmVG
bG93Qm94OjphZGRUZXh0Qm94VmlzCiAgICAgaW50IGxlZnRHbHlwaE92ZXJmbG93ID0gLXN0cm9r
ZU92ZXJmbG93IC0gbGVmdEdseXBoRWRnZTsKICAgICBpbnQgcmlnaHRHbHlwaE92ZXJmbG93ID0g
c3Ryb2tlT3ZlcmZsb3cgKyByaWdodEdseXBoRWRnZTsKIAotICAgIGlmIChPcHRpb25hbDxib29s
PiBtYXJrRXhpc3RzQW5kSXNBYm92ZSA9IHRleHRCb3guZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNB
Ym92ZShsaW5lU3R5bGUpKSB7CisgICAgT3B0aW9uYWw8Ym9vbD4gbWFya0V4aXN0c0FuZElzQWJv
dmUgPSB0ZXh0Qm94LmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlKTsKKyAg
ICBpZiAobWFya0V4aXN0c0FuZElzQWJvdmUuaGFzVmFsdWUoKSkgewogICAgICAgICBpbnQgZW1w
aGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVp
Z2h0KGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICBpZiAoKm1h
cmtFeGlzdHNBbmRJc0Fib3ZlID09ICFsaW5lU3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9k
ZSgpKQogICAgICAgICAgICAgdG9wR2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWluKHRvcEdseXBoT3Zl
cmZsb3csIC1lbXBoYXNpc01hcmtIZWlnaHQpOwpAQCAtMTU5Miw3ICsxNTk0LDcgQEAgTGF5b3V0
VW5pdCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlT3ZlckFubgogICAgICAgICBpZiAoaXM8SW5saW5l
VGV4dEJveD4oKmNoaWxkKSkgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNoaWxk
TGluZVN0eWxlID0gY2hpbGQtPmxpbmVTdHlsZSgpOwogICAgICAgICAgICAgT3B0aW9uYWw8Ym9v
bD4gbWFya0V4aXN0c0FuZElzQWJvdmUgPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqY2hpbGQp
LmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY2hpbGRMaW5lU3R5bGUpOwotICAgICAgICAg
ICAgaWYgKG1hcmtFeGlzdHNBbmRJc0Fib3ZlICYmICptYXJrRXhpc3RzQW5kSXNBYm92ZSkgewor
ICAgICAgICAgICAgaWYgKG1hcmtFeGlzdHNBbmRJc0Fib3ZlLmhhc1ZhbHVlKCkgJiYgKm1hcmtF
eGlzdHNBbmRJc0Fib3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExpbmVTdHlsZS5p
c0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHRv
cE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZv
bnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNp
c01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJl
c3VsdCwgYWxsb3dlZFBvc2l0aW9uIC0gdG9wT2ZFbXBoYXNpc01hcmspOwpAQCAtMTY0MCw3ICsx
NjQyLDcgQEAgTGF5b3V0VW5pdCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlVW5kZXJBbgogICAgICAg
ICBpZiAoaXM8SW5saW5lVGV4dEJveD4oKmNoaWxkKSkgewogICAgICAgICAgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIGNoaWxkTGluZVN0eWxlID0gY2hpbGQtPmxpbmVTdHlsZSgpOwogICAgICAgICAg
ICAgT3B0aW9uYWw8Ym9vbD4gbWFya0V4aXN0c0FuZElzQWJvdmUgPSBkb3duY2FzdDxJbmxpbmVU
ZXh0Qm94PigqY2hpbGQpLmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY2hpbGRMaW5lU3R5
bGUpOwotICAgICAgICAgICAgaWYgKG1hcmtFeGlzdHNBbmRJc0Fib3ZlICYmICEqbWFya0V4aXN0
c0FuZElzQWJvdmUpIHsKKyAgICAgICAgICAgIGlmIChtYXJrRXhpc3RzQW5kSXNBYm92ZS5oYXNW
YWx1ZSgpICYmICEqbWFya0V4aXN0c0FuZElzQWJvdmUpIHsKICAgICAgICAgICAgICAgICBpZiAo
IWNoaWxkTGluZVN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewogICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2lj
YWxCb3R0b20oKSArIGNoaWxkTGluZVN0eWxlLmZvbnRDYXNjYWRlKCkuZW1waGFzaXNNYXJrSGVp
Z2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYm90dG9tT2ZFbXBoYXNpc01hcmsg
LSBhbGxvd2VkUG9zaXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM4LDcgKzEwMzgsNyBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEZvcmVnCiAKICAgICBmbG9hdCBl
bXBoYXNpc01hcmtPZmZzZXQgPSAwOwogICAgIE9wdGlvbmFsPGJvb2w+IG1hcmtFeGlzdHNBbmRJ
c0Fib3ZlID0gZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShsaW5lU3R5bGUpOwotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0c0FuZElzQWJvdmUgPyBs
aW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b20oKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyayA9IG1hcmtFeGlzdHNBbmRJc0Fib3ZlLmhhc1Zh
bHVlKCkgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b20oKTsK
ICAgICBpZiAoIWVtcGhhc2lzTWFyay5pc0VtcHR5KCkpCiAgICAgICAgIGVtcGhhc2lzTWFya09m
ZnNldCA9ICptYXJrRXhpc3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkgLSBmb250LmVtcGhhc2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9udE1l
dHJpY3MoKS5kZXNjZW50KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01hcmsp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhNTFN0eWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhNTFN0
eWxlLmNwcAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9NYXRoTUxTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2
b2lkIE1hdGhNTFN0eWxlOjpyZXNvbHZlTWF0aE1MU3R5bGUoUmVuCiAgICAgYXV0byogZWxlbWVu
dCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKS0+ZWxlbWVudCgpOwogICAgIGlm
IChpczxNYXRoTUxFbGVtZW50PihlbGVtZW50KSkgewogICAgICAgICBPcHRpb25hbDxib29sPiBk
aXNwbGF5U3R5bGUgPSBkb3duY2FzdDxNYXRoTUxFbGVtZW50PihlbGVtZW50KS0+c3BlY2lmaWVk
RGlzcGxheVN0eWxlKCk7Ci0gICAgICAgIGlmIChkaXNwbGF5U3R5bGUpCisgICAgICAgIGlmIChk
aXNwbGF5U3R5bGUuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIG1fZGlzcGxheVN0eWxlID0gZGlz
cGxheVN0eWxlLnZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPE1hdGhNTEVsZW1lbnQ6Ok1hdGhW
YXJpYW50PiBtYXRoVmFyaWFudCA9IGRvd25jYXN0PE1hdGhNTEVsZW1lbnQ+KGVsZW1lbnQpLT5z
cGVjaWZpZWRNYXRoVmFyaWFudCgpOwogICAgICAgICBpZiAobWF0aFZhcmlhbnQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24g
MjQzNTY2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFNWR0FuaW1hdGVFbGVtZW50
QmFzZTo6aGFzSW52YWxpZENTCiAgICAgaWYgKCF0YXJnZXRFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmICghbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSkKKyAg
ICBpZiAoIW1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUuaGFzVmFsdWUoKSkKICAgICAgICAg
bV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSA9IGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpICYm
IGF0dHJpYnV0ZVR5cGUoKSA9PSBBdHRyaWJ1dGVUeXBlOjpDU1MgJiYgIWlzVGFyZ2V0QXR0cmli
dXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudCgpLCBhdHRyaWJ1dGVOYW1lKCkpOwogCiAgICAg
cmV0dXJuIG1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUudmFsdWUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkRGVjb3JhdGVkUHJvcGVydHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZERl
Y29yYXRlZFByb3BlcnR5LmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkRGVjb3JhdGVkUHJvcGVydHkuaAkod29ya2luZyBjb3B5
KQpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gVXNlZCB0byBhcHBseSB0aGUgU1ZH
QW5pbWF0b3IgY2hhbmdlIHRvIHRoZSB0YXJnZXQgZWxlbWVudC4KICAgICBTdHJpbmcgYW5pbVZh
bEFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0FuaW1h
dGluZygpICYmICEhbV9hbmltVmFsKTsKKyAgICAgICAgQVNTRVJUKGlzQW5pbWF0aW5nKCkgJiYg
bV9hbmltVmFsKTsKICAgICAgICAgcmV0dXJuIG1fYW5pbVZhbC0+dmFsdWVBc1N0cmluZygpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cmltaXRpdmVQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHkuaAkocmV2aXNpb24gMjQzNTY2KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9w
ZXJ0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAgcHVibGljOgogCiAgICAg
Y29uc3QgUHJvcGVydHlUeXBlJiBhbmltVmFsKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VF9JTVBMSUVTKGlzQW5pbWF0aW5nKCksIG1fYW5pbVZhbCk7CisgICAgICAgIEFTU0VSVF9JTVBM
SUVTKGlzQW5pbWF0aW5nKCksIG1fYW5pbVZhbC5oYXNWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
IGlzQW5pbWF0aW5nKCkgPyAqbV9hbmltVmFsIDogbV9iYXNlVmFsOwogICAgIH0KIAogICAgIFBy
b3BlcnR5VHlwZSYgYW5pbVZhbCgpCiAgICAgewotICAgICAgICBBU1NFUlRfSU1QTElFUyhpc0Fu
aW1hdGluZygpLCBtX2FuaW1WYWwpOworICAgICAgICBBU1NFUlRfSU1QTElFUyhpc0FuaW1hdGlu
ZygpLCBtX2FuaW1WYWwuaGFzVmFsdWUoKSk7CiAgICAgICAgIHJldHVybiBpc0FuaW1hdGluZygp
ID8gKm1fYW5pbVZhbCA6IG1fYmFzZVZhbDsKICAgICB9CiAKQEAgLTgyLDcgKzgyLDcgQEAgcHVi
bGljOgogICAgIC8vIFVzZWQgdG8gYXBwbHkgdGhlIFNWR0F0dHJpYnV0ZUFuaW1hdG9yIGNoYW5n
ZSB0byB0aGUgdGFyZ2V0IGVsZW1lbnQuCiAgICAgU3RyaW5nIGFuaW1WYWxBc1N0cmluZygpIGNv
bnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBBU1NFUlQoaXNBbmltYXRpbmcoKSAmJiAhIW1f
YW5pbVZhbCk7CisgICAgICAgIEFTU0VSVChpc0FuaW1hdGluZygpICYmIG1fYW5pbVZhbC5oYXNW
YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIFNWR1Byb3BlcnR5VHJhaXRzPFByb3BlcnR5VHlwZT46
OnRvU3RyaW5nKCptX2FuaW1WYWwpOwogICAgIH0KIApAQCAtMTAwLDcgKzEwMCw3IEBAIHB1Ymxp
YzoKICAgICAvLyBVc2VkIGJ5IFJlbmRlclNWR0VsZW1lbnRzIGFuZCBEdW1wUmVuZGVyVHJlZS4K
ICAgICBjb25zdCBQcm9wZXJ0eVR5cGUmIGN1cnJlbnRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICBBU1NFUlRfSU1QTElFUyhpc0FuaW1hdGluZygpLCBtX2FuaW1WYWwpOworICAgICAgICBB
U1NFUlRfSU1QTElFUyhpc0FuaW1hdGluZygpLCBtX2FuaW1WYWwuaGFzVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybiBpc0FuaW1hdGluZygpID8gKm1fYW5pbVZhbCA6IG1fYmFzZVZhbDsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ2xp
ZW50UXVlcnlPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL1NlcnZpY2VXb3JrZXJDbGllbnRRdWVyeU9wdGlvbnMuaAkocmV2aXNpb24gMjQzNTY2
KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDbGllbnRR
dWVyeU9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBPcHRpb25hbDxT
ZXJ2aWNlV29ya2VyQ2xpZW50UXVlcnlPcHRpb25zCiB7CiAgICAgT3B0aW9uYWw8Ym9vbD4gaW5j
bHVkZVVuY29udHJvbGxlZDsKICAgICBkZWNvZGVyID4+IGluY2x1ZGVVbmNvbnRyb2xsZWQ7Ci0g
ICAgaWYgKCFpbmNsdWRlVW5jb250cm9sbGVkKQorICAgIGlmICghaW5jbHVkZVVuY29udHJvbGxl
ZC5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgT3B0aW9u
YWw8U2VydmljZVdvcmtlckNsaWVudFR5cGU+IHR5cGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MjQzNjY3KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0NiBAQAorMjAxOS0wMy0zMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIENvbnNpZGVyIHJlbW92aW5nIE9wdGlvbmFsPGJvb2w+Ojpv
cGVyYXRvciBib29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTY0MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaDoKKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxPcHRpb25hbDxUPj46OmVuY29kZSk6CisgICAgICAg
IChJUEM6OkFyZ3VtZW50Q29kZXI8T3B0aW9uYWw8VD4+OjpkZWNvZGUpOgorICAgICAgICAoSVBD
OjpUdXBsZURlY29kZXJJbXBsOjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpUdXBsZURlY29kZXJJ
bXBsPFR5cGU+OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpWYXJpYW50Q29kZXI6OmRlY29kZSk6
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmg6CisgICAgICAgIChJ
UEM6OkZvcm1EYXRhUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhOjpkZWNvZGUpOgorICAgICAg
ICAqIFNoYXJlZC9VUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJD
b21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdERhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNp
dGVQb2xpY2llc0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlUG9saWNpZXNEYXRh
OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvUERGQ29udGV4dE1lbnUuaDoKKyAgICAg
ICAgKFdlYktpdDo6UERGQ29udGV4dE1lbnVJdGVtOjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMubW06CisgICAgICAgICgtW19XS1dlYnNp
dGVQb2xpY2llcyBkZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1BvbGljeV0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvbWF0aW9uQ2xpZW50OjpyZXF1ZXN0QXV0b21hdGlvblNlc3Npb24pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
OjpjYXB0dXJlRGV2aWNlc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6cmVxdWVzdFVzZXJNZWRpYVBlcm1pc3Npb25Gb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
clByb3h5OjpnZXRVc2VyTWVkaWFQZXJtaXNzaW9uSW5mbyk6CisgICAgICAgIChXZWJLaXQ6OlVz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjplbnVtZXJhdGVNZWRpYURldmlj
ZXNGb3JGcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVl
Y2hTeW50aGVzaXNWb2ljZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hTeW50aGVzaXNW
b2ljZTo6ZGVjb2RlKToKKwogMjAxOS0wMy0yOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4Zmll
bGRAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGV0ZSBXZWJNZXRhbCBpbXBsZW1lbnRhdGlvbiBp
biBmYXZvciBvZiBXZWJHUFUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCShyZXZp
c2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw3IEBA
IGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmRlY28KIAogICAgIE9wdGlvbmFs
PGJvb2w+IHNob3VsZFJlc3RyaWN0SFRUUFJlc3BvbnNlQWNjZXNzOwogICAgIGRlY29kZXIgPj4g
c2hvdWxkUmVzdHJpY3RIVFRQUmVzcG9uc2VBY2Nlc3M7Ci0gICAgaWYgKCFzaG91bGRSZXN0cmlj
dEhUVFBSZXNwb25zZUFjY2VzcykKKyAgICBpZiAoIXNob3VsZFJlc3RyaWN0SFRUUFJlc3BvbnNl
QWNjZXNzLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQuc2hv
dWxkUmVzdHJpY3RIVFRQUmVzcG9uc2VBY2Nlc3MgPSAqc2hvdWxkUmVzdHJpY3RIVFRQUmVzcG9u
c2VBY2Nlc3M7CiAKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzOjpkZWNvCiAKICAgICBPcHRpb25hbDxib29sPiBzaG91bGRFbmFibGVDcm9zc09y
aWdpblJlc291cmNlUG9saWN5OwogICAgIGRlY29kZXIgPj4gc2hvdWxkRW5hYmxlQ3Jvc3NPcmln
aW5SZXNvdXJjZVBvbGljeTsKLSAgICBpZiAoIXNob3VsZEVuYWJsZUNyb3NzT3JpZ2luUmVzb3Vy
Y2VQb2xpY3kpCisgICAgaWYgKCFzaG91bGRFbmFibGVDcm9zc09yaWdpblJlc291cmNlUG9saWN5
Lmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQuc2hvdWxkRW5h
YmxlQ3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeSA9ICpzaG91bGRFbmFibGVDcm9zc09yaWdpblJl
c291cmNlUG9saWN5OwogCkBAIC0yMDksNyArMjA5LDcgQEAgYm9vbCBOZXR3b3JrUmVzb3VyY2VM
b2FkUGFyYW1ldGVyczo6ZGVjbwogCiAgICAgT3B0aW9uYWw8Ym9vbD4gaXNIVFRQU1VwZ3JhZGVF
bmFibGVkOwogICAgIGRlY29kZXIgPj4gaXNIVFRQU1VwZ3JhZGVFbmFibGVkOwotICAgIGlmICgh
aXNIVFRQU1VwZ3JhZGVFbmFibGVkKQorICAgIGlmICghaXNIVFRQU1VwZ3JhZGVFbmFibGVkLmhh
c1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQuaXNIVFRQU1VwZ3Jh
ZGVFbmFibGVkID0gKmlzSFRUUFNVcGdyYWRlRW5hYmxlZDsKICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIE9wdGlvbmFsPE5ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXIKICAgICAKICAgICBPcHRpb25hbDxib29sPiBzaG91bGRMb2dDb29r
aWVJbmZvcm1hdGlvbjsKICAgICBkZWNvZGVyID4+IHNob3VsZExvZ0Nvb2tpZUluZm9ybWF0aW9u
OwotICAgIGlmICghc2hvdWxkTG9nQ29va2llSW5mb3JtYXRpb24pCisgICAgaWYgKCFzaG91bGRM
b2dDb29raWVJbmZvcm1hdGlvbi5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIAogICAgIE9wdGlvbmFsPFNlY29uZHM+IGxvYWRUaHJvdHRsZUxhdGVuY3k7CkBA
IC0xNzIsMTcgKzE3MiwxNyBAQCBPcHRpb25hbDxOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVyCiAKICAgICBPcHRpb25hbDxib29sPiBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwog
ICAgIGRlY29kZXIgPj4gZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICBpZiAoIWVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpCisgICAgaWYgKCFlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICBPcHRpb25hbDxib29sPiBzaG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOwogICAgIGRlY29kZXIgPj4gc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VM
b2FkU3RhdGlzdGljczsKLSAgICBpZiAoIXNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJlc291cmNl
TG9hZFN0YXRpc3RpY3MpCisgICAgaWYgKCFzaG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBPcHRpb25hbDxib29sPiBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlOwogICAgIGRlY29kZXIgPj4gZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZTsKLSAgICBpZiAoIWVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpCisgICAg
aWYgKCFlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLmhhc1ZhbHVlKCkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBPcHRpb25hbDxXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbj4gcmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291
cmNlOwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5o
CShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBB
cmd1bWVudENvZGVyPE9wdGlvbmFsPFQ+PiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKICAgICB7Ci0gICAgICAg
IGlmICghb3B0aW9uYWwpIHsKKyAgICAgICAgaWYgKCFvcHRpb25hbC5oYXNWYWx1ZSgpKSB7CiAg
ICAgICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0xMDksMTIgKzEwOSwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlCiAgICAgewogICAgICAgICBPcHRpb25hbDxib29sPiBpc0VuZ2FnZWQ7CiAgICAg
ICAgIGRlY29kZXIgPj4gaXNFbmdhZ2VkOwotICAgICAgICBpZiAoIWlzRW5nYWdlZCkKKyAgICAg
ICAgaWYgKCFpc0VuZ2FnZWQuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIGlmICgqaXNFbmdhZ2VkKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxU
PiB2YWx1ZTsKICAgICAgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7Ci0gICAgICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgaWYgKCF2YWx1ZS5oYXNWYWx1ZSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8T3B0
aW9uYWw8VD4+KFdURk1vdmUoKnZhbHVlKSk7CiAgICAgICAgIH0KQEAgLTE5Myw3ICsxOTMsNyBA
QCBzdHJ1Y3QgVHVwbGVEZWNvZGVySW1wbCB7CiAgICAgewogICAgICAgICBPcHRpb25hbDxUeXBl
PiBvcHRpb25hbDsKICAgICAgICAgZGVjb2RlciA+PiBvcHRpb25hbDsKLSAgICAgICAgaWYgKCFv
cHRpb25hbCkKKyAgICAgICAgaWYgKCFvcHRpb25hbC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBPcHRpb25hbDxzdGQ6OnR1cGxlPFR5cGVz
Li4uPj4gc3ViVHVwbGUgPSBUdXBsZURlY29kZXJJbXBsPFR5cGVzLi4uPjo6ZGVjb2RlKGRlY29k
ZXIpOwpAQCAtMjEwLDcgKzIxMCw3IEBAIHN0cnVjdCBUdXBsZURlY29kZXJJbXBsPFR5cGU+IHsK
ICAgICB7CiAgICAgICAgIE9wdGlvbmFsPFR5cGU+IG9wdGlvbmFsOwogICAgICAgICBkZWNvZGVy
ID4+IG9wdGlvbmFsOwotICAgICAgICBpZiAoIW9wdGlvbmFsKQorICAgICAgICBpZiAoIW9wdGlv
bmFsLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUoKm9wdGlvbmFsKSk7CiAgICAgfQpAQCAt
NTI3LDcgKzUyNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgRXIK
ICAgICB7CiAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGhhc1ZhbHVlOwogICAgICAgICBkZWNvZGVy
ID4+IGhhc1ZhbHVlOwotICAgICAgICBpZiAoIWhhc1ZhbHVlKQorICAgICAgICBpZiAoIWhhc1Zh
bHVlLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAg
ICAKICAgICAgICAgaWYgKCpoYXNWYWx1ZSkgewpAQCAtNTYzLDcgKzU2Myw3IEBAIHN0cnVjdCBW
YXJpYW50Q29kZXIgewogICAgICAgICBpZiAoaSA9PSBpbmRleCkgewogICAgICAgICAgICAgT3B0
aW9uYWw8dHlwZW5hbWUgV1RGOjp2YXJpYW50X2FsdGVybmF0aXZlPGluZGV4LCBXVEY6OlZhcmlh
bnQ8VHlwZXMuLi4+Pjo6dHlwZT4gb3B0aW9uYWw7CiAgICAgICAgICAgICBkZWNvZGVyID4+IG9w
dGlvbmFsOwotICAgICAgICAgICAgaWYgKCFvcHRpb25hbCkKKyAgICAgICAgICAgIGlmICghb3B0
aW9uYWwuaGFzVmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICAgICAgcmV0dXJuIHsgV1RGTW92ZSgqb3B0aW9uYWwpIH07CiAgICAgICAgIH0KQEAg
LTU4NCw3ICs1ODQsNyBAQCBzdHJ1Y3QgVmFyaWFudENvZGVyPDAsIFR5cGVzLi4uPiB7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOwogICAgICAgICBPcHRpb25hbDx0eXBlbmFtZSBXVEY6
OnZhcmlhbnRfYWx0ZXJuYXRpdmU8MCwgV1RGOjpWYXJpYW50PFR5cGVzLi4uPj46OnR5cGU+IG9w
dGlvbmFsOwogICAgICAgICBkZWNvZGVyID4+IG9wdGlvbmFsOwotICAgICAgICBpZiAoIW9wdGlv
bmFsKQorICAgICAgICBpZiAoIW9wdGlvbmFsLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICByZXR1cm4geyBXVEZNb3ZlKCpvcHRpb25hbCkgfTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVm
ZXJlbmNlLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0Zvcm1EYXRhUmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaGFzRm9ybURhdGE7CiAgICAgICAg
IGRlY29kZXIgPj4gaGFzRm9ybURhdGE7Ci0gICAgICAgIGlmICghaGFzRm9ybURhdGEpCisgICAg
ICAgIGlmICghaGFzRm9ybURhdGEuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIGlmICghaGFzRm9ybURhdGEudmFsdWUoKSkKICAgICAgICAgICAg
IHJldHVybiBGb3JtRGF0YVJlZmVyZW5jZSB7IH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkJKHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTU3Niw3ICs1NzYs
NyBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKGZpbGUpOgogICAgICAgICAgICAgICAg
IGZvciB4IGluIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIE9wdGlvbmFsPCVzPiAlcztcbicgJSAoeC50eXBlLCB4Lm5hbWUp
KQogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgZGVjb2RlciA+PiAlcztc
bicgJSB4Lm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAo
ISVzKSB7XG4gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuICAgICAgICByZXR1cm47XG4g
ICAgfVxuJyAlIHgubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
IGlmICghJXMuaGFzVmFsdWUoKSkge1xuICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTtcbiAg
ICAgICAgcmV0dXJuO1xuICAgIH1cbicgJSB4Lm5hbWUpCiAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgIGNvbXBsZXRpb25IYW5kbGVyKCcpCiAgICAgICAgICAgICAgICAgaWYgbGVu
KG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyk6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJ1dURk1vdmUoKiVzKScgJSAoJyksIFdURk1vdmUoKicuam9pbih4Lm5hbWUgZm9yIHgg
aW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzKSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9T
aGFyZWQvTmF2aWdhdGlvbkFjdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDcgKzgyLDcgQEAgT3B0aW9uYWw8TmF2aWdhdGlvbkFjdGlvbkRhdGE+IE5hdmlnYXRp
bwogICAgIAogICAgIE9wdGlvbmFsPGJvb2w+IGNhbkhhbmRsZVJlcXVlc3Q7CiAgICAgZGVjb2Rl
ciA+PiBjYW5IYW5kbGVSZXF1ZXN0OwotICAgIGlmICghY2FuSGFuZGxlUmVxdWVzdCkKKyAgICBp
ZiAoIWNhbkhhbmRsZVJlcXVlc3QuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAKICAgICBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k7CkBAIC0xMDAsMjIgKzEwMCwyMiBAQCBPcHRpb25h
bDxOYXZpZ2F0aW9uQWN0aW9uRGF0YT4gTmF2aWdhdGlvCiAgICAgCiAgICAgT3B0aW9uYWw8Ym9v
bD4gaXNSZWRpcmVjdDsKICAgICBkZWNvZGVyID4+IGlzUmVkaXJlY3Q7Ci0gICAgaWYgKCFpc1Jl
ZGlyZWN0KQorICAgIGlmICghaXNSZWRpcmVjdC5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgT3B0aW9uYWw8Ym9vbD4gdHJlYXRBc1NhbWVPcmlnaW5OYXZp
Z2F0aW9uOwogICAgIGRlY29kZXIgPj4gdHJlYXRBc1NhbWVPcmlnaW5OYXZpZ2F0aW9uOwotICAg
IGlmICghdHJlYXRBc1NhbWVPcmlnaW5OYXZpZ2F0aW9uKQorICAgIGlmICghdHJlYXRBc1NhbWVP
cmlnaW5OYXZpZ2F0aW9uLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBPcHRpb25hbDxib29sPiBoYXNPcGVuZWRGcmFtZXM7CiAgICAgZGVjb2RlciA+PiBo
YXNPcGVuZWRGcmFtZXM7Ci0gICAgaWYgKCFoYXNPcGVuZWRGcmFtZXMpCisgICAgaWYgKCFoYXNP
cGVuZWRGcmFtZXMuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgIE9wdGlvbmFsPGJvb2w+IG9wZW5lZEJ5RE9NV2l0aE9wZW5lcjsKICAgICBkZWNvZGVyID4+
IG9wZW5lZEJ5RE9NV2l0aE9wZW5lcjsKLSAgICBpZiAoIW9wZW5lZEJ5RE9NV2l0aE9wZW5lcikK
KyAgICBpZiAoIW9wZW5lZEJ5RE9NV2l0aE9wZW5lci5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhPiByZXF1ZXN0ZXJPcmlnaW47CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9VUkxTY2hl
bWVUYXNrUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQv
VVJMU2NoZW1lVGFza1BhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9VUkxTY2hlbWVUYXNrUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDcgKzYyLDcgQEAgT3B0aW9uYWw8VVJMU2NoZW1lVGFza1BhcmFtZXRlcnM+IFVSTFNj
aAogCiAgICAgT3B0aW9uYWw8Ym9vbD4gaGFzSFRUUEJvZHk7CiAgICAgZGVjb2RlciA+PiBoYXNI
VFRQQm9keTsKLSAgICBpZiAoIWhhc0hUVFBCb2R5KQorICAgIGlmICghaGFzSFRUUEJvZHkuaGFz
VmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoKmhhc0hUVFBC
b2R5KSB7CiAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpGb3JtRGF0YT4gZm9ybURhdGEgPSBXZWJD
b3JlOjpGb3JtRGF0YTo6ZGVjb2RlKGRlY29kZXIpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwCShyZXZp
c2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIE9wdGlvbmFs
PFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YT4KIAogICAgIE9wdGlvbmFsPGJvb2w+IGhh
c1NoYXJlZE1lbW9yeTsKICAgICBkZWNvZGVyID4+IGhhc1NoYXJlZE1lbW9yeTsKLSAgICBpZiAo
IWhhc1NoYXJlZE1lbW9yeSkKKyAgICBpZiAoIWhhc1NoYXJlZE1lbW9yeS5oYXNWYWx1ZSgpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGlmICgqaGFzU2hhcmVkTWVtb3J5KSB7
CiAgICAgICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVQb2xpY2llc0RhdGEuY3BwCShyZXZpc2lvbiAyNDM1NjYpCisr
KyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNyBAQCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiBXZWJz
aXRlUG9sCiB7CiAgICAgT3B0aW9uYWw8Ym9vbD4gY29udGVudEJsb2NrZXJzRW5hYmxlZDsKICAg
ICBkZWNvZGVyID4+IGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ7Ci0gICAgaWYgKCFjb250ZW50Qmxv
Y2tlcnNFbmFibGVkKQorICAgIGlmICghY29udGVudEJsb2NrZXJzRW5hYmxlZC5oYXNWYWx1ZSgp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIE9wdGlvbmFsPFdlYnNp
dGVBdXRvcGxheVBvbGljeT4gYXV0b3BsYXlQb2xpY3k7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvUERGQ29udGV4dE1lbnUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvUERGQ29udGV4dE1lbnUuaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL1BERkNvbnRleHRNZW51LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEy
ICs1MCwxMiBAQCBzdHJ1Y3QgUERGQ29udGV4dE1lbnVJdGVtIHsKIAogICAgICAgICBPcHRpb25h
bDxib29sPiBlbmFibGVkOwogICAgICAgICBkZWNvZGVyID4+IGVuYWJsZWQ7Ci0gICAgICAgIGlm
ICghZW5hYmxlZCkKKyAgICAgICAgaWYgKCFlbmFibGVkLmhhc1ZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIE9wdGlvbmFsPGJvb2w+IHNlcGFyYXRv
cjsKICAgICAgICAgZGVjb2RlciA+PiBzZXBhcmF0b3I7Ci0gICAgICAgIGlmICghc2VwYXJhdG9y
KQorICAgICAgICBpZiAoIXNlcGFyYXRvci5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgICAgICBPcHRpb25hbDxpbnQ+IHN0YXRlOwpAQCAtNjUsNyAr
NjUsNyBAQCBzdHJ1Y3QgUERGQ29udGV4dE1lbnVJdGVtIHsKIAogICAgICAgICBPcHRpb25hbDxi
b29sPiBoYXNBY3Rpb247CiAgICAgICAgIGRlY29kZXIgPj4gaGFzQWN0aW9uOwotICAgICAgICBp
ZiAoIWhhc0FjdGlvbikKKyAgICAgICAgaWYgKCFoYXNBY3Rpb24uaGFzVmFsdWUoKSkKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgT3B0aW9uYWw8aW50PiB0YWc7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAyNDM1
NjYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lk
IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8gaGFuZGxlciA9IFt0aGlzXShPcHRpb25hbDxib29sPiBvcmlnaW5IYXNQZXJzaXN0
ZW50QWNjZXNzKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFvcmlnaW5IYXNQZXJzaXN0ZW50QWNj
ZXNzIHx8ICFtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgaWYgKCFvcmlnaW5I
YXNQZXJzaXN0ZW50QWNjZXNzLmhhc1ZhbHVlKCkgfHwgIW1fcGFnZS5oYXNSdW5uaW5nUHJvY2Vz
cygpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChtX2dyYW50ZWRSZXF1ZXN0
cy5pc0VtcHR5KCkgJiYgISpvcmlnaW5IYXNQZXJzaXN0ZW50QWNjZXNzKQpAQCAtMzYyLDcgKzM2
Miw3IEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHIKICAgICAgICAg
aWYgKCFyZXF1ZXN0LT5pc1BlbmRpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBpZiAoIWhhc1BlcnNpc3RlbnRBY2Nlc3MpIHsKKyAgICAgICAgaWYgKCFoYXNQZXJzaXN0ZW50
QWNjZXNzLmhhc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIHJlcXVlc3QtPmRlbnkoVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RQcm94eTo6VXNlck1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpPdGhl
ckZhaWx1cmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MDUsNyArNTA1
LDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcgogICAgIG1fcGVu
ZGluZ0RldmljZVJlcXVlc3RzLmFkZChyZXF1ZXN0SUQpOwogCiAgICAgYXV0byByZXF1ZXN0ID0g
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHk6OmNyZWF0ZShmcmFtZUlELCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RJRCwgaGFuZGxlciA9IFdURk1vdmUo
aGFuZGxlcildKE9wdGlvbmFsPGJvb2w+IGFsbG93ZWQpIG11dGFibGUgewotICAgICAgICBpZiAo
IXdlYWtUaGlzIHx8ICFtX3BlbmRpbmdEZXZpY2VSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdElEKSB8
fCAhYWxsb3dlZCkgeworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICFtX3BlbmRpbmdEZXZpY2VS
ZXF1ZXN0cy5yZW1vdmUocmVxdWVzdElEKSB8fCAhYWxsb3dlZC5oYXNWYWx1ZSgpKSB7CiAgICAg
ICAgICAgICBoYW5kbGVyKHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTU4NSw3ICs1ODUsNyBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
CiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCB1c2VyTWVkaWFJRCk7CiAKICAgICBhdXRv
IGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHVzZXJNZWRpYUlELCBmcmFtZUlELCB1c2VyTWVk
aWFEb2N1bWVudE9yaWdpbiA9IHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLmNvcHlSZWYoKSwgdG9w
TGV2ZWxEb2N1bWVudE9yaWdpbiA9IHRvcExldmVsRG9jdW1lbnRPcmlnaW4uY29weVJlZigpXShP
cHRpb25hbDxib29sPiBvcmlnaW5IYXNQZXJzaXN0ZW50QWNjZXNzKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKCFvcmlnaW5IYXNQZXJzaXN0ZW50QWNjZXNzKQorICAgICAgICBpZiAoIW9yaWdpbkhh
c1BlcnNpc3RlbnRBY2Nlc3MuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBpZiAoIW1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uaAkocmV2aXNpb24gMjQzNTY2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNBdXRvbWF0aWNQcm9jZXNzV2FybWluZ0Vu
YWJsZWRCeUNsaWVudC52YWx1ZU9yKG1fY2xpZW50V291bGRCZW5lZml0RnJvbUF1dG9tYXRpY1By
b2Nlc3NQcmV3YXJtaW5nKTsKICAgICB9CiAKLSAgICBib29sIHdhc0F1dG9tYXRpY1Byb2Nlc3NX
YXJtaW5nU2V0QnlDbGllbnQoKSBjb25zdCB7IHJldHVybiAhIW1faXNBdXRvbWF0aWNQcm9jZXNz
V2FybWluZ0VuYWJsZWRCeUNsaWVudDsgfQorICAgIGJvb2wgd2FzQXV0b21hdGljUHJvY2Vzc1dh
cm1pbmdTZXRCeUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdXRvbWF0aWNQcm9jZXNzV2Fy
bWluZ0VuYWJsZWRCeUNsaWVudC5oYXNWYWx1ZSgpOyB9CiAgICAgdm9pZCBzZXRJc0F1dG9tYXRp
Y1Byb2Nlc3NXYXJtaW5nRW5hYmxlZChib29sIHZhbHVlKSB7IG1faXNBdXRvbWF0aWNQcm9jZXNz
V2FybWluZ0VuYWJsZWRCeUNsaWVudCA9IHZhbHVlOyB9CiAKICAgICB2b2lkIHNldFVzZXNXZWJQ
cm9jZXNzQ2FjaGUoYm9vbCB2YWx1ZSkgeyBtX3VzZXNXZWJQcm9jZXNzQ2FjaGUgPSB2YWx1ZTsg
fQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xp
Y2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLV2Vic2l0ZVBvbGljaWVzLm1tCShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVzLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDUsNyArMTQ1LDcgQEAgLSAodm9pZClzZXREZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjYwogCiAtIChfV0tXZWJzaXRlRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NQb2xp
Y3kpZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NQb2xpY3kKIHsKLSAgICBpZiAoIV93
ZWJzaXRlUG9saWNpZXMtPmRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzU3RhdGUoKSkK
KyAgICBpZiAoIV93ZWJzaXRlUG9saWNpZXMtPmRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzU3RhdGUoKS5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gX1dLV2Vic2l0ZURldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUG9saWN5QXNrOwogICAgIHJldHVybiAqX3dlYnNpdGVQ
b2xpY2llcy0+ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NTdGF0ZSgpID8gX1dLV2Vi
c2l0ZURldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUG9saWN5R3JhbnQgOiBfV0tXZWJz
aXRlRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NQb2xpY3lEZW55OwogfQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvQXV0b21hdGlvbkNsaWVudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9BdXRvbWF0aW9uQ2xpZW50Lm1t
CShyZXZpc2lvbiAyNDM1NjYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9BdXRv
bWF0aW9uQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw5IEBAIGJvb2wgQXV0
b21hdGlvbkNsaWVudDo6cmVtb3RlQXV0b21hdGlvbkEKIHZvaWQgQXV0b21hdGlvbkNsaWVudDo6
cmVxdWVzdEF1dG9tYXRpb25TZXNzaW9uKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkZW50aWZpZXIs
IGNvbnN0IFJlbW90ZUluc3BlY3Rvcjo6Q2xpZW50OjpTZXNzaW9uQ2FwYWJpbGl0aWVzJiBzZXNz
aW9uQ2FwYWJpbGl0aWVzKQogewogICAgIF9XS0F1dG9tYXRpb25TZXNzaW9uQ29uZmlndXJhdGlv
biAqY29uZmlndXJhdGlvbiA9IFtbW19XS0F1dG9tYXRpb25TZXNzaW9uQ29uZmlndXJhdGlvbiBh
bGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIGlmIChzZXNzaW9uQ2FwYWJpbGl0aWVzLmFs
bG93SW5zZWN1cmVNZWRpYUNhcHR1cmUpCisgICAgaWYgKHNlc3Npb25DYXBhYmlsaXRpZXMuYWxs
b3dJbnNlY3VyZU1lZGlhQ2FwdHVyZS5oYXNWYWx1ZSgpKQogICAgICAgICBjb25maWd1cmF0aW9u
LmFsbG93c0luc2VjdXJlTWVkaWFDYXB0dXJlID0gc2Vzc2lvbkNhcGFiaWxpdGllcy5hbGxvd0lu
c2VjdXJlTWVkaWFDYXB0dXJlLnZhbHVlKCk7Ci0gICAgaWYgKHNlc3Npb25DYXBhYmlsaXRpZXMu
c3VwcHJlc3NJQ0VDYW5kaWRhdGVGaWx0ZXJpbmcpCisgICAgaWYgKHNlc3Npb25DYXBhYmlsaXRp
ZXMuc3VwcHJlc3NJQ0VDYW5kaWRhdGVGaWx0ZXJpbmcuaGFzVmFsdWUoKSkKICAgICAgICAgY29u
ZmlndXJhdGlvbi5zdXBwcmVzc2VzSUNFQ2FuZGlkYXRlRmlsdGVyaW5nID0gc2Vzc2lvbkNhcGFi
aWxpdGllcy5zdXBwcmVzc0lDRUNhbmRpZGF0ZUZpbHRlcmluZy52YWx1ZSgpOwogCiAgICAgLy8g
Rm9yY2UgY2xpZW50cyB0byBjcmVhdGUgYW5kIHJlZ2lzdGVyIGEgc2Vzc2lvbiBhc3luY2hyb25v
dXNseS4gT3RoZXJ3aXNlLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgJ
KHJldmlzaW9uIDI0MzU2NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJTcGVlY2hTeW50aGVzaXNWb2ljZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMiAr
NzAsMTIgQEAgT3B0aW9uYWw8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+IFdlYlNwZQogCiAgICAg
T3B0aW9uYWw8Ym9vbD4gbG9jYWxTZXJ2aWNlOwogICAgIGRlY29kZXIgPj4gbG9jYWxTZXJ2aWNl
OwotICAgIGlmICghbG9jYWxTZXJ2aWNlKQorICAgIGlmICghbG9jYWxTZXJ2aWNlLmhhc1ZhbHVl
KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBPcHRpb25hbDxib29sPiBk
ZWZhdWx0TGFuZzsKICAgICBkZWNvZGVyID4+IGRlZmF1bHRMYW5nOwotICAgIGlmICghZGVmYXVs
dExhbmcpCisgICAgaWYgKCFkZWZhdWx0TGFuZy5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgcmV0dXJuIHt7IFdURk1vdmUoKnZvaWNlVVJJKSwgV1RGTW92
ZSgqbmFtZSksIFdURk1vdmUoKmxhbmcpLCBXVEZNb3ZlKCpsb2NhbFNlcnZpY2UpLCBXVEZNb3Zl
KCpkZWZhdWx0TGFuZykgfX07fQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzNjgwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDMtMzAgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBDb25zaWRlciByZW1vdmlu
ZyBPcHRpb25hbDxib29sPjo6b3BlcmF0b3IgYm9vbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NDI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3Jh
cHBhYmxlLmg6CisgICAgICAgIChXVFI6OkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRnVuY3Rpb24uY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTktMDMtMzAgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1
ZWhyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBhZGQgdGVzdGRmZyBhcyB0YXJnZXQg
d2l0aCBidWlsZC1qc2MKSW5kZXg6IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNX
cmFwcGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTV3JhcHBhYmxlLmgJKHJldmlzaW9uIDI0MzU2NikKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFy
ZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBA
QCBwdWJsaWM6CiAKIGlubGluZSBKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChK
U0NvbnRleHRSZWYgY29udGV4dCwgT3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNW
YWx1ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJldHVybiB2YWx1ZS5oYXNWYWx1ZSgpID8gSlNW
YWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxs
KGNvbnRleHQpOwogfQogCiBpbmxpbmUgT3B0aW9uYWw8Ym9vbD4gSlNWYWx1ZVRvTnVsbGFibGVC
b29sZWFuKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjQzNTY2
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRnVuY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDUsNyArMjA1LDcgQEAgVEVTVChXVEZfRnVuY3Rpb24sIEFzc2lnbkJlZm9y
ZURlc3Ryb3kpCiAgICAgYSA9IFtdIHsKICAgICAgICAgcmV0dXJuIDFVOwogICAgIH07Ci0gICAg
RVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4oRnVuY3Rpb25EZXN0cnVjdGlvbkNoZWNrZXI6
OmZ1bmN0aW9uQXNCb29sKSk7CisgICAgRVhQRUNUX1RSVUUoRnVuY3Rpb25EZXN0cnVjdGlvbkNo
ZWNrZXI6OmZ1bmN0aW9uQXNCb29sLmhhc1ZhbHVlKCkpOwogICAgIEVYUEVDVF9UUlVFKHN0YXRp
Y19jYXN0PGJvb2w+KEZ1bmN0aW9uRGVzdHJ1Y3Rpb25DaGVja2VyOjpmdW5jdGlvblJlc3VsdCkp
OwogICAgIEVYUEVDVF9UUlVFKEZ1bmN0aW9uRGVzdHJ1Y3Rpb25DaGVja2VyOjpmdW5jdGlvbkFz
Qm9vbC52YWx1ZSgpKTsKICAgICBFWFBFQ1RfRVEoMVUsIEZ1bmN0aW9uRGVzdHJ1Y3Rpb25DaGVj
a2VyOjpmdW5jdGlvblJlc3VsdC52YWx1ZSgpKTsKQEAgLTIxNCw3ICsyMTQsNyBAQCBURVNUKFdU
Rl9GdW5jdGlvbiwgQXNzaWduQmVmb3JlRGVzdHJveSkKIAogICAgIGEgPSBGdW5jdGlvbkRlc3Ry
dWN0aW9uQ2hlY2tlcihhKTsKICAgICBhID0gTW92ZU9ubHkgeyAyIH07Ci0gICAgRVhQRUNUX1RS
VUUoc3RhdGljX2Nhc3Q8Ym9vbD4oRnVuY3Rpb25EZXN0cnVjdGlvbkNoZWNrZXI6OmZ1bmN0aW9u
QXNCb29sKSk7CisgICAgRVhQRUNUX1RSVUUoRnVuY3Rpb25EZXN0cnVjdGlvbkNoZWNrZXI6OmZ1
bmN0aW9uQXNCb29sLmhhc1ZhbHVlKCkpOwogICAgIEVYUEVDVF9UUlVFKHN0YXRpY19jYXN0PGJv
b2w+KEZ1bmN0aW9uRGVzdHJ1Y3Rpb25DaGVja2VyOjpmdW5jdGlvblJlc3VsdCkpOwogICAgIEVY
UEVDVF9UUlVFKEZ1bmN0aW9uRGVzdHJ1Y3Rpb25DaGVja2VyOjpmdW5jdGlvbkFzQm9vbC52YWx1
ZSgpKTsKICAgICBFWFBFQ1RfRVEoMlUsIEZ1bmN0aW9uRGVzdHJ1Y3Rpb25DaGVja2VyOjpmdW5j
dGlvblJlc3VsdC52YWx1ZSgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>