<?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>155008</bug_id>
          
          <creation_ts>2016-03-03 20:53:12 -0800</creation_ts>
          <short_desc>Move CryptoDigest to WebCore/platform</short_desc>
          <delta_ts>2016-10-06 06:25:26 -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>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=155073</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=162913</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>155007</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1170491</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-03 20:53:12 -0800</bug_when>
    <thetext>Towards making use of CryptoDigest in the implementation of Content Security Policy inline script and inline stylesheet hashes (bug #155007) we should move CryptoDigest from Source/WebCore/crypto to a place that conveys that it is not specific to the Web Crypto code. One idea is to move it to WebCore/platform/crypto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170493</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-03-03 20:53:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/24969787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170503</commentid>
    <comment_count>2</comment_count>
      <attachid>272830</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-03 21:11:59 -0800</bug_when>
    <thetext>Created attachment 272830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170505</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-03 21:14:15 -0800</bug_when>
    <thetext>Attachment 272830 did not pass style-queue:


ERROR: Source/WebCore/platform/crypto/gnutls/CryptoDigestGnuTLS.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/crypto/CryptoDigest.h:40:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/crypto/CryptoDigest.h:41:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/crypto/CryptoDigest.h:42:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/crypto/CryptoDigest.h:43:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/platform/crypto/CryptoDigest.h:44:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 6 in 15 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>1170509</commentid>
    <comment_count>4</comment_count>
      <attachid>272830</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-03 21:18:58 -0800</bug_when>
    <thetext>Comment on attachment 272830
Patch

r=me. Please confirm tests pass before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170953</commentid>
    <comment_count>5</comment_count>
      <attachid>272830</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-04 11:26:13 -0800</bug_when>
    <thetext>Comment on attachment 272830
Patch

Clearing flags on attachment: 272830

Committed r197575: &lt;http://trac.webkit.org/changeset/197575&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170954</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-04 11:26:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171308</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-03-05 16:32:45 -0800</bug_when>
    <thetext>It broke the GTK build unless you pass -DENABLE_SUBTLE_CRYPTO=ON to CMake to enable that experimental option, but you couldn&apos;t have noticed because this is what the bots do. Follow-up in bug #155073.

At first I considered rolling this out, because it adds a &quot;new&quot; dependency on GnuTLS. (We normally make new dependencies optional by allowing users to disable the corresponding new feature.) But, looking over CryptoDigestGnuTLS.cpp, I believe all the GnuTLS functionality it requires is fairly old, so it&apos;s unlikely to cause problems for our distributors in practice beyond one failed build to discover the new dependency. So I think a required dependency on GnuTLS is fine, we just need to remember to mention this in our NEWS.

I&apos;m testing a build fix now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171323</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-03-05 17:20:55 -0800</bug_when>
    <thetext>Committed r197623: &lt;http://trac.webkit.org/changeset/197623&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236267</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-10-04 11:06:35 -0700</bug_when>
    <thetext>(In reply to comment #7) 
&gt; At first I considered rolling this out, because it adds a &quot;new&quot; dependency
&gt; on GnuTLS. (We normally make new dependencies optional by allowing users to
&gt; disable the corresponding new feature.) But, looking over
&gt; CryptoDigestGnuTLS.cpp, I believe all the GnuTLS functionality it requires
&gt; is fairly old, so it&apos;s unlikely to cause problems for our distributors in
&gt; practice beyond one failed build to discover the new dependency. So I think
&gt; a required dependency on GnuTLS is fine, we just need to remember to mention
&gt; this in our NEWS.

Turns out this introduced a legal problem, see bug #162913.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236881</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-10-05 20:33:14 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7) 
&gt; &gt; At first I considered rolling this out, because it adds a &quot;new&quot; dependency
&gt; &gt; on GnuTLS. (We normally make new dependencies optional by allowing users to
&gt; &gt; disable the corresponding new feature.) But, looking over
&gt; &gt; CryptoDigestGnuTLS.cpp, I believe all the GnuTLS functionality it requires
&gt; &gt; is fairly old, so it&apos;s unlikely to cause problems for our distributors in
&gt; &gt; practice beyond one failed build to discover the new dependency. So I think
&gt; &gt; a required dependency on GnuTLS is fine, we just need to remember to mention
&gt; &gt; this in our NEWS.
&gt; 
&gt; Turns out this introduced a legal problem, see bug #162913.

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237027</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-10-06 06:25:26 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; :(

Turns out I misunderstood the licenses. It&apos;s OK. We&apos;ll still try to remove the dependency.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272830</attachid>
            <date>2016-03-03 21:11:59 -0800</date>
            <delta_ts>2016-03-04 11:26:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155008-20160303211144.patch</filename>
            <type>text/plain</type>
            <size>44228</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQ2MTMyNzE5ODMxYTk1
MThjZTcxNTY4Y2ZiNjhiMGFlNTM4MGRiYS4uYjUzNTU2ZWQ2ZjcwNjBmMWMyMDU1NzA1OGM5YmE2
NDI2YTk3YjE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE2LTAzLTAzICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENyeXB0b0RpZ2Vz
dCB0byBXZWJDb3JlL3BsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTUwMDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0OTY5Nzg3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyeXB0b0Rp
Z2VzdCBwcm92aWRlcyBhIHBsYXRmb3JtLWluZGVwZW5kZW50IGludGVyZmFjZSBmb3IgaW50ZXJh
Y3Rpbmcgd2l0aCBwbGF0Zm9ybS0KKyAgICAgICAgc3BlY2lmaWMgY3J5cHRvZ3JhcGhpYyBoYXNo
aW5nIHNlcnZpY2VzLiBXZSBjdXJyZW50bHkgbWFrZSB1c2Ugb2YgdGhpcyBjb2RlIGFzIHBhcnQK
KyAgICAgICAgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIFdlYiBDcnlwdG8uIFRoaXMgY29kZSB3
aWxsIGFsc28gYmUgYmVuZWZpY2lhbCBhcyBwYXJ0IG9mCisgICAgICAgIGltcGxlbWVudGluZyBz
dXBwb3J0IGZvciBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBpbmxpbmUgc2NyaXB0IGFuZCBpbmxp
bmUgc3R5bGVzaGVldAorICAgICAgICBoYXNoZXMuIFdlIHNob3VsZCBtb3ZlIENyeXB0b0RpZ2Vz
dCB0byBXZWJDb3JlL3BsYXRmb3JtIHRvIGNvbnZleSB0aGF0IGl0IGEgZ2VuZXJhbAorICAgICAg
ICBwdXJwb3NlIHBsYXRmb3JtIGFic3RyYWN0aW9uLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6IEFkZCBpbmNsdWRlIGRpcmVjdG9yeSBXZWJDb3JlL3BsYXRmb3JtL2NyeXB0by4KKyAgICAg
ICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTogQWRkIGZpbGUgcGxhdGZvcm0vY3J5cHRvL2dudXRscy9D
cnlwdG9EaWdlc3RHbnVUTFMuY3BwIGFuZAorICAgICAgICByZW1vdmUgZmlsZSBjcnlwdG8vZ251
dGxzL0NyeXB0b0RpZ2VzdEdudVRMUy5jcHAuCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6
IERpdHRvLgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOiBBZGQgZmlsZSBwbGF0Zm9ybS9j
cnlwdG8vbWFjL0NyeXB0b0RpZ2VzdE1hYy5jcHAgYW5kCisgICAgICAgIHJlbW92ZSBmaWxlIGNy
eXB0by9tYWMvQ3J5cHRvRGlnZXN0TWFjLmNwcC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtU0hBMS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1TSEExOjpk
aWdlc3QpOiBTdWJzdGl0dXRlICJDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobSIgZm9yICJDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyIi4KKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1TSEEyMjQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtU0hB
MjI0OjpkaWdlc3QpOiBEaXR0by4KKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1TSEEyNTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtU0hB
MjU2OjpkaWdlc3QpOiBEaXR0by4KKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1TSEEzODQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtU0hB
Mzg0OjpkaWdlc3QpOiBEaXR0by4KKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1TSEE1MTIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtU0hB
NTEyOjpkaWdlc3QpOiBEaXR0by4KKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRo
bVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENyeXB0b0Rp
Z2VzdEFsZ29yaXRobSk6IENvbnZlcnRzIGEgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBlbnVt
ZXJhdG9yIHRvIGEKKyAgICAgICAgQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gZW51bWVyYXRvciwg
aWYgYXBwbGljYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81OjpwbGF0Zm9ybVNpZ24pOiBXcml0ZSBpbiB0ZXJtcyBvZiBXZWJDb3JlOjpnZXRD
cnlwdG9EaWdlc3RBbGdvcml0aG0oKS4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRo
bVJTQVNTQV9QS0NTMV92MV81OjpwbGF0Zm9ybVZlcmlmeSk6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2NyeXB0by9DcnlwdG9EaWdlc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9DcnlwdG9EaWdlc3QuaC4gQWxzbyBhZGRlZCBlbnVtIENyeXB0b0RpZ2VzdDo6QWxn
b3JpdGhtCisgICAgICAgIGFuZCBjaGFuZ2VkIGNvbnN0cnVjdG9yIHRvIHRha2UgdGhpcyBlbnVt
LgorICAgICAgICAqIHBsYXRmb3JtL2NyeXB0by9nbnV0bHMvQ3J5cHRvRGlnZXN0R251VExTLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nbnV0bHMvQ3J5cHRvRGlnZXN0
R251VExTLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0RpZ2VzdDo6Q3J5cHRvRGlnZXN0
KTogU3Vic3RpdHV0ZSAiQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG0iIGZvciAiQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciIuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9EaWdlc3Q6On5DcnlwdG9E
aWdlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9EaWdlc3Q6OmFkZEJ5dGVzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9EaWdlc3Q6OmNvbXB1dGVIYXNoKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vY3J5cHRvL21hYy9DcnlwdG9EaWdlc3RNYWMuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9EaWdlc3RNYWMuY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6dG9TSEExQ29udGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
dG9TSEEyMjRDb250ZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp0b1NIQTI1NkNvbnRl
eHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnRvU0hBMzg0Q29udGV4dCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6dG9TSEE1MTJDb250ZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9EaWdlc3Q6OkNyeXB0b0RpZ2VzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvRGlnZXN0Ojp+Q3J5cHRvRGlnZXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
RGlnZXN0OjphZGRCeXRlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvRGlnZXN0
Ojpjb21wdXRlSGFzaCk6IERpdHRvLgorCiAyMDE2LTAzLTAzICBLZWl0aCBNaWxsZXIgIDxrZWl0
aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEpTQXJyYXlCdWZmZXJzIHNob3VsZCBiZSBj
b2xsZWN0ZWQgbGVzcyBhZ2dyZXNzaXZlbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzAyOWRk
NzE5NGIzMjE3NDk3ZGE2YzViMmUzNzI1MjYzZDZlNTlkMi4uNzVkZDFkZjZiYWM2YzQ5N2NhMzU2
Zjc4Yzk2ZGUzMWFjYTIxM2Y4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY5LDYgKzY5LDcg
QEAgc2V0KFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYW5pbWF0aW9uIgogICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpbyIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vY3J5cHRvIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcyIKICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybSIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCBlODMyM2M3NGY0OTI0MWZlYThhZTRhZTMyMTM0ZTUwNzVkYmYwNDhmLi42
OWQxYzVjMjA4YTdjZjMxMzc2MjdiOGI4ZDU4ZTc2OTJiZTRkNTk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtODgsNiArODgsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2F1ZGlvL2VmbC9BdWRpb0J1c0VmbC5jcHAKIAorICAgIHBsYXRmb3Jt
L2NyeXB0by9nbnV0bHMvQ3J5cHRvRGlnZXN0R251VExTLmNwcAorCiAgICAgcGxhdGZvcm0vZWZs
L0JhdHRlcnlQcm92aWRlckVmbC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvQ3Vyc29yRWZsLmNwcAog
ICAgIHBsYXRmb3JtL2VmbC9EcmFnRGF0YUVmbC5jcHAKQEAgLTQzMiw3ICs0MzQsNiBAQCBpZiAo
RU5BQkxFX1NVQlRMRV9DUllQVE8pCiAgICAgICAgIGNyeXB0by9nbnV0bHMvQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzVHbnVUTFMuY3BwCiAgICAgICAgIGNyeXB0by9nbnV0bHMvQ3J5
cHRvQWxnb3JpdGhtUlNBX09BRVBHbnVUTFMuY3BwCiAgICAgICAgIGNyeXB0by9nbnV0bHMvQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnlHbnVUTFMuY3BwCi0gICAgICAgIGNyeXB0by9nbnV0bHMvQ3J5
cHRvRGlnZXN0R251VExTLmNwcAogICAgICAgICBjcnlwdG8vZ251dGxzL0NyeXB0b0tleVJTQUdu
dVRMUy5jcHAKICAgICAgICAgY3J5cHRvL2dudXRscy9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcEdu
dVRMUy5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAwM2FkZGM2YWNlMjRiMzhh
ZmE1ZTYxNmMxM2U3MzdjMmE4NzhlMDg1Li43NzI2MDYzYzczY2U3YTYzOWUyZDk0ZmU1NDljNmU4
MTdjNDMxZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtODIsNiArODIsOCBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2F1ZGlvL2dsaWIvQXVk
aW9CdXNHTGliLmNwcAogCisgICAgcGxhdGZvcm0vY3J5cHRvL2dudXRscy9DcnlwdG9EaWdlc3RH
bnVUTFMuY3BwCisKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9j
bHVlMS5jcHAKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVl
Mi5jcHAKIApAQCAtODA3LDcgKzgwOSw2IEBAIGlmIChFTkFCTEVfU1VCVExFX0NSWVBUTykKICAg
ICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNUdudVRM
Uy5jcHAKICAgICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUEdudVRM
Uy5jcHAKICAgICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeUdudVRM
Uy5jcHAKLSAgICAgICAgY3J5cHRvL2dudXRscy9DcnlwdG9EaWdlc3RHbnVUTFMuY3BwCiAgICAg
ICAgIGNyeXB0by9nbnV0bHMvQ3J5cHRvS2V5UlNBR251VExTLmNwcAogICAgICAgICBjcnlwdG8v
Z251dGxzL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwR251VExTLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IGU0YWIwYzdkOWE2NzdiZjg2MWQxNDFjZTZjYjE3MTMyYjUzMjg4ZDYu
LmY4MmNmMDk3ZWUyNWEwMTJlY2I4NmZlOTc1NTg1N2U0ZDI1YzZmODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0yMTgsNyArMjE4LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5j
cHAKICAgICBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQTWFjLmNwcAogICAgIGNy
eXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwCi0gICAgY3J5cHRvL21hYy9D
cnlwdG9EaWdlc3RNYWMuY3BwCiAgICAgY3J5cHRvL21hYy9DcnlwdG9LZXlNYWMuY3BwCiAgICAg
Y3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCiAgICAgY3J5cHRvL21hYy9TZXJpYWxpemVk
Q3J5cHRvS2V5V3JhcE1hYy5tbQpAQCAtMzQwLDYgKzMzOSw4IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2NvY29hL1ZOb2RlVHJhY2tlckNvY29hLmNwcAogICAg
IHBsYXRmb3JtL2NvY29hL1dlYkNvcmVOU0Vycm9yRXh0cmFzLm1tCiAKKyAgICBwbGF0Zm9ybS9j
cnlwdG8vbWFjL0NyeXB0b0RpZ2VzdE1hYy5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rp
c3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVm
cmVzaE1vbml0b3JNYW5hZ2VyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggYTVlOWEzNWI0NWQwOWM4YzE4YWQ0M2RlM2EyOGJiYmRmN2I0ZmJhZi4u
MjYwNTRjMTQ1ZjkxNjQxNWY0Y2JiZTg4YTNjMmE0N2Q3YWM3YmQ5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ1NTEsOCAr
MTQ1NTEsOCBAQAogCQlFMUY4MEI4OTE4MzE3MkEyMDA3ODg1QzMgLyogSlNDcnlwdG9LZXlQYWly
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRv
S2V5UGFpckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRjgwQjhC
MTgzMTcyQjUwMDc4ODVDMyAvKiBKU0NyeXB0b0tleVBhaXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDcnlwdG9LZXlQYWlyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFGODBCOEMxODMxNzJCNTAwNzg4NUMzIC8qIEpTQ3J5cHRvS2V5UGFp
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NyeXB0b0tleVBhaXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFGRTEzNjIxODM0MzUxMTAwODkyRjEzIC8q
IENyeXB0b0RpZ2VzdE1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDcnlwdG9EaWdlc3RNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUZF
MTM2NjE4MzQzQTEwMDA4OTJGMTMgLyogQ3J5cHRvRGlnZXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENyeXB0b0RpZ2VzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMUZFMTM2MjE4MzQzNTExMDA4OTJGMTMgLyogQ3J5cHRvRGlnZXN0TWFjLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0RpZ2VzdE1hYy5jcHA7IHBh
dGggPSBjcnlwdG8vbWFjL0NyeXB0b0RpZ2VzdE1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxRkUxMzY2MTgzNDNBMTAwMDg5MkYxMyAvKiBDcnlwdG9EaWdlc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvRGlnZXN0Lmg7IHBhdGggPSBjcnlw
dG8vQ3J5cHRvRGlnZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRkUxMzY4
MTgzRkUxQUIwMDg5MkYxMyAvKiBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRkUxMzY5MTgzRkUxQUIwMDg5MkYxMyAv
KiBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUZFMTM2RTE4M0ZFQ0YwMDA4OTJGMTMgLyogQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBN
YWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvQWxnb3Jp
dGhtUlNBX09BRVBNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3OTIs
NiArMjI3OTIsNyBAQAogCQkJCUZEMzE2MDQwMTJCMDI2QTMwMEMxQTM1OSAvKiBhdWRpbyAqLywK
IAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYxMkQgLyogY2YgKi8sCiAJCQkJQTVDOTc0Q0UxMTQ4
NUZEQTAwNjZGMkFCIC8qIGNvY29hICovLAorCQkJCUNFNTBEOENFMUM4OTMyRUQwMDcyRUE1QSAv
KiBjcnlwdG8gKi8sCiAJCQkJQjJBMDE1OTEwQUY2Q0Q1MzAwNkJDRTBFIC8qIGdyYXBoaWNzICov
LAogCQkJCUE1OUUzQzFCMTE1ODBGMzQwMDcyOTI4RSAvKiBpb3MgKi8sCiAJCQkJNjU4MkExNDgw
OTk5OUQ2QzAwQkVFQjZEIC8qIG1hYyAqLywKQEAgLTIzMTc3LDYgKzIzMTc4LDIzIEBACiAJCQlw
YXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQ0U1MEQ4Q0Ux
Qzg5MzJFRDAwNzJFQTVBIC8qIGNyeXB0byAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJQ0U1MEQ4Q0YxQzg5MzJGQjAwNzJFQTVBIC8qIG1hYyAqLywKKwkJ
CQlFMUZFMTM2NjE4MzQzQTEwMDA4OTJGMTMgLyogQ3J5cHRvRGlnZXN0LmggKi8sCisJCQkpOwor
CQkJbmFtZSA9IGNyeXB0bzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUNF
NTBEOENGMUM4OTMyRkIwMDcyRUE1QSAvKiBtYWMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUUxRkUxMzYyMTgzNDM1MTEwMDg5MkYxMyAvKiBDcnlwdG9E
aWdlc3RNYWMuY3BwICovLAorCQkJKTsKKwkJCW5hbWUgPSBtYWM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogCQlERjlBRkQ2RjEzRkMzMUIwMDAxNUZFQjcgLyogb2JqYyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMzIzMSw3ICsyMzI0
OSw2IEBACiAJCQkJRTFGRTEzNkUxODNGRUNGMDAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobVJT
QV9PQUVQTWFjLmNwcCAqLywKIAkJCQlFMTIzM0YwRTE4NUE0MTMwMDA4REZBRjUgLyogQ3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNU1hYy5jcHAgKi8sCiAJCQkJRTFDMjY2RDYxODMxN0FC
NDAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCAqLywK
LQkJCQlFMUZFMTM2MjE4MzQzNTExMDA4OTJGMTMgLyogQ3J5cHRvRGlnZXN0TWFjLmNwcCAqLywK
IAkJCQlFMTlBQzNGODE4MjU2NkY3MDAzNDk0MjYgLyogQ3J5cHRvS2V5TWFjLmNwcCAqLywKIAkJ
CQlFMTY0RkFBNDE4MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCAqLywKIAkJ
CQlFMThERjMzNjE4QUFGMTREMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXBNYWMu
bW0gKi8sCkBAIC0yMzQyMiw3ICsyMzQzOSw2IEBACiAJCQkJRTFDNjU3MjYxODE2RjlGRTAwMjU2
Q0REIC8qIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCAqLywKIAkJCQlFMUZGOEY2QTE4MERC
NUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwICovLAogCQkJCUUxRkY4
RjZCMTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oICovLAotCQkJ
CUUxRkUxMzY2MTgzNDNBMTAwMDg5MkYxMyAvKiBDcnlwdG9EaWdlc3QuaCAqLywKIAkJCQlFMTU3
QThFMjE4MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmNwcCAqLywKIAkJCQlFMTU3QThFMzE4
MTczQTNBMDA5RjgyMUQgLyogQ3J5cHRvS2V5LmggKi8sCiAJCQkJRTE1N0E4REMxODE3MkMyQzAw
OUY4MjFEIC8qIENyeXB0b0tleS5pZGwgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vQ3J5cHRvRGlnZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvRGlnZXN0
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1M2IxM2U4MjhkYzFkZmI3MDBhNzQz
Y2VkNTAxNTZmNjMwMzljN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ3J5cHRvRGlnZXN0X2gK
LSNkZWZpbmUgQ3J5cHRvRGlnZXN0X2gKLQotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLSNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdHJ1Y3QgQ3J5cHRvRGlnZXN0Q29udGV4dDsKLQotY2xhc3MgQ3J5cHRvRGlnZXN0IHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDcnlwdG9EaWdlc3QpOwotcHVibGljOgotICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvRGlnZXN0PiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcik7Ci0gICAgfkNyeXB0b0RpZ2VzdCgpOwotCi0gICAgdm9pZCBhZGRCeXRlcyhj
b25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGNv
bXB1dGVIYXNoKCk7Ci0KLXByaXZhdGU6Ci0gICAgQ3J5cHRvRGlnZXN0KCk7Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvRGlnZXN0Q29udGV4dD4gbV9jb250ZXh0OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0jZW5k
aWYgLy8gQ3J5cHRvRGlnZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTEuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAKaW5kZXggYmM5NGFhM2RlYTljOWZj
ZjEwZmYxNGNkMTEwMDVhMTMyZDk2NTQ3YS4uNTRkY2QwM2ZiZmI1NmVkMTIxZWNlOWQ4ZWE5MjNj
ZDg1YTllNGQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBDcnlwdG9BbGdvcml0aG1TSEExOjppZGVudGlmaWVyKCkgY29uc3QK
IAogdm9pZCBDcnlwdG9BbGdvcml0aG1TSEExOjpkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxi
YWNrJiYgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9u
Q29kZSYpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5
cHRvRGlnZXN0OjpjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2VzdCA9IENyeXB0b0RpZ2VzdDo6Y3Jl
YXRlKENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMSk7CiAgICAgaWYgKCFkaWdlc3QpIHsK
ICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTIyNC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEEy
MjQuY3BwCmluZGV4IDYyY2M1YThjMmY5ZTdmNzJlNmRiZDBkN2Q2ZDY5NzRjYzIwYWYxMDkuLjM4
NzgyMjdkOTVkNWExYzYxZjJhZTk2NTdlNGJiNTYyZDA3Mzc0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTIyNC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMjI0
LmNwcApAQCAtNTQsNyArNTQsNyBAQCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIENyeXB0b0Fs
Z29yaXRobVNIQTIyNDo6aWRlbnRpZmllcigpIGNvbnN0CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGht
U0hBMjI0OjpkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENy
eXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIFZvaWRD
YWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5cHRvRGlnZXN0OjpjcmVhdGUoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5cHRvRGlnZXN0OjpjcmVhdGUoQ3J5cHRvRGlnZXN0OjpB
bGdvcml0aG06OlNIQV8yMjQpOwogICAgIGlmICghZGlnZXN0KSB7CiAgICAgICAgIGZhaWx1cmVD
YWxsYmFjaygpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEEyNTYuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMjU2LmNwcAppbmRleCAyN2Zl
OGFhMGFiNzM3YWQwNTU2MGZjNTQwZmI4NzVhMDhhZGU3MzNkLi4wYWNhZjA5MDUwMjg3MTQxMjc4
ODg2NWE1ZDYzYjExNzIyZThhNTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEEyNTYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTI1Ni5jcHAKQEAgLTU0LDcgKzU0
LDcgQEAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBDcnlwdG9BbGdvcml0aG1TSEEyNTY6Omlk
ZW50aWZpZXIoKSBjb25zdAogCiB2b2lkIENyeXB0b0FsZ29yaXRobVNIQTI1Njo6ZGlnZXN0KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRh
JiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2smJiBmYWlsdXJl
Q2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9E
aWdlc3Q+IGRpZ2VzdCA9IENyeXB0b0RpZ2VzdDo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlNIQV8yNTYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2Vz
dCA9IENyeXB0b0RpZ2VzdDo6Y3JlYXRlKENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2
KTsKICAgICBpZiAoIWRpZ2VzdCkgewogICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtU0hBMzg0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobVNIQTM4NC5jcHAKaW5kZXggNmViYTIzNGYzMjhhMjNmNDI5Y2I2
YmQ3MWVjNGJlZWM4ODZiYzkxMy4uYjFiZmJlMTU3YWI5ZWNhM2I1YWM1OGFjYTg2ODY5YzlmODhk
MWUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtU0hBMzg0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1TSEEzODQuY3BwCkBAIC01NCw3ICs1NCw3IEBAIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgQ3J5cHRvQWxnb3JpdGhtU0hBMzg0OjppZGVudGlmaWVyKCkgY29uc3QK
IAogdm9pZCBDcnlwdG9BbGdvcml0aG1TSEEzODQ6OmRpZ2VzdChjb25zdCBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRp
b25Db2RlJikKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvRGlnZXN0PiBkaWdlc3QgPSBD
cnlwdG9EaWdlc3Q6OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMzg0KTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvRGlnZXN0PiBkaWdlc3QgPSBDcnlwdG9EaWdlc3Q6
OmNyZWF0ZShDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzM4NCk7CiAgICAgaWYgKCFkaWdl
c3QpIHsKICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNI
QTUxMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1TSEE1MTIuY3BwCmluZGV4IDg3ZDYyZDQ0NWI4NTc1ZDBjNzc1M2M0ZjUzZGMyZTA1ZDMyZWE0
YzguLjdkZGYxZDRkMjJlZjQxMjVmZGUxODM4NjMzMWUyNzc3YzM5NTVlMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTUxMi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
U0hBNTEyLmNwcApAQCAtNTQsNyArNTQsNyBAQCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIENy
eXB0b0FsZ29yaXRobVNIQTUxMjo6aWRlbnRpZmllcigpIGNvbnN0CiAKIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtU0hBNTEyOjpkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNv
bnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ss
IFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5cHRvRGlnZXN0OjpjcmVh
dGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMik7CisgICAgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5cHRvRGlnZXN0OjpjcmVhdGUoQ3J5cHRvRGln
ZXN0OjpBbGdvcml0aG06OlNIQV81MTIpOwogICAgIGlmICghZGlnZXN0KSB7CiAgICAgICAgIGZh
aWx1cmVDYWxsYmFjaygpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vZ251dGxzL0NyeXB0b0RpZ2VzdEdudVRMUy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ251dGxzL0NyeXB0b0RpZ2VzdEdudVRMUy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDY1OGI1ZjU5MTUwYjcyNzNlYmE3NTRiM2U3M2I2MjI5N2NiOWRmM2IuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2dudXRscy9DcnlwdG9EaWdlc3RHbnVUTFMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNyeXB0b0RpZ2VzdC5oIgotCi0jaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCi0KLSNpbmNs
dWRlIDxnbnV0bHMvZ251dGxzLmg+Ci0jaW5jbHVkZSA8Z251dGxzL2NyeXB0by5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDcnlwdG9EaWdlc3RDb250ZXh0IHsKLSAgICBnbnV0
bHNfZGlnZXN0X2FsZ29yaXRobV90IGFsZ29yaXRobTsKLSAgICBnbnV0bHNfaGFzaF9oZF90IGhh
c2g7Ci19OwotCi1DcnlwdG9EaWdlc3Q6OkNyeXB0b0RpZ2VzdCgpCi0gICAgOiBtX2NvbnRleHQo
bmV3IENyeXB0b0RpZ2VzdENvbnRleHQpCi17Ci19Ci0KLUNyeXB0b0RpZ2VzdDo6fkNyeXB0b0Rp
Z2VzdCgpCi17Ci0gICAgZ251dGxzX2hhc2hfZGVpbml0KG1fY29udGV4dC0+aGFzaCwgMCk7Ci19
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IENyeXB0b0RpZ2VzdDo6Y3JlYXRlKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtKQotewotICAgIGdudXRsc19kaWdlc3Rf
YWxnb3JpdGhtX3QgZ251dGxzQWxnb3JpdGhtOwotCi0gICAgc3dpdGNoIChhbGdvcml0aG0pIHsK
LSAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8xOiB7Ci0gICAgICAgIGdu
dXRsc0FsZ29yaXRobSA9IEdOVVRMU19ESUdfU0hBMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDogewotICAgICAgICBn
bnV0bHNBbGdvcml0aG0gPSBHTlVUTFNfRElHX1NIQTIyNDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjogewotICAgICAg
ICBnbnV0bHNBbGdvcml0aG0gPSBHTlVUTFNfRElHX1NIQTI1NjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDogewotICAg
ICAgICBnbnV0bHNBbGdvcml0aG0gPSBHTlVUTFNfRElHX1NIQTM4NDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMjogewot
ICAgICAgICBnbnV0bHNBbGdvcml0aG0gPSBHTlVUTFNfRElHX1NIQTUxMjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2VzdChuZXcgQ3J5cHRvRGln
ZXN0KTsKLSAgICBkaWdlc3QtPm1fY29udGV4dC0+YWxnb3JpdGhtID0gZ251dGxzQWxnb3JpdGht
OwotCi0gICAgaW50IHJldCA9IGdudXRsc19oYXNoX2luaXQoJmRpZ2VzdC0+bV9jb250ZXh0LT5o
YXNoLCBnbnV0bHNBbGdvcml0aG0pOwotICAgIGlmIChyZXQgIT0gR05VVExTX0VfU1VDQ0VTUykK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gZGlnZXN0OwotfQotCi12b2lk
IENyeXB0b0RpZ2VzdDo6YWRkQnl0ZXMoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBsZW5ndGgp
Ci17Ci0gICAgZ251dGxzX2hhc2gobV9jb250ZXh0LT5oYXNoLCBpbnB1dCwgbGVuZ3RoKTsKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQotewotICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQ7Ci0gICAgaW50IGRpZ2VzdExlbiA9IGdudXRsc19oYXNoX2dl
dF9sZW4obV9jb250ZXh0LT5hbGdvcml0aG0pOwotICAgIHJlc3VsdC5yZXNpemUoZGlnZXN0TGVu
KTsKLQotICAgIGdudXRsc19oYXNoX291dHB1dChtX2NvbnRleHQtPmhhc2gsIHJlc3VsdC5kYXRh
KCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzVNYWMuY3BwCmluZGV4IDBjZGUxYjQxM2ZmNjg0ZGEzYmRlNmUyMmQzZmFkMzkxNTY5OThiNTMu
LjM5YWM0MDJjNWY2YzI3ZmNlYjk4MDk2MGIxYmNmMmE5ZDQyOTEwY2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVN
YWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUlNB
U1NBX1BLQ1MxX3YxXzVNYWMuY3BwCkBAIC0zNiw2ICszNiwyOSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2lubGluZSBib29sIGdldENyeXB0b0RpZ2VzdEFsZ29yaXRobShDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGhhc2hGdW5jdGlvbiwgQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG0mIGFs
Z29yaXRobSkKK3sKKyAgICBzd2l0Y2ggKGhhc2hGdW5jdGlvbikgeworICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0Rp
Z2VzdDo6QWxnb3JpdGhtOjpTSEFfMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0OgorICAgICAgICBhbGdvcml0aG0gPSBD
cnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzIyNDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjU2OgorICAgICAgICBhbGdv
cml0aG0gPSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1NjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMzg0OgorICAg
ICAgICBhbGdvcml0aG0gPSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzM4NDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
NTEyOgorICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzUx
MjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKwogdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6
cGxhdGZvcm1TaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyYgcGFyYW1ldGVy
cywgY29uc3QgQ3J5cHRvS2V5UlNBJiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRh
dGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxs
YmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQ0NEaWdlc3RBbGdvcml0aG0gZGlnZXN0
QWxnb3JpdGhtOwpAQCAtNDQsNyArNjcsMTMgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNTo6cGxhdGZvcm1TaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYVAKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+
IGRpZ2VzdCA9IENyeXB0b0RpZ2VzdDo6Y3JlYXRlKHBhcmFtZXRlcnMuaGFzaCk7CisgICAgQ3J5
cHRvRGlnZXN0OjpBbGdvcml0aG0gY3J5cHRvRGlnZXN0QWxnb3JpdGhtOworICAgIGlmICghZ2V0
Q3J5cHRvRGlnZXN0QWxnb3JpdGhtKHBhcmFtZXRlcnMuaGFzaCwgY3J5cHRvRGlnZXN0QWxnb3Jp
dGhtKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5
cHRvRGlnZXN0OjpjcmVhdGUoY3J5cHRvRGlnZXN0QWxnb3JpdGhtKTsKICAgICBpZiAoIWRpZ2Vz
dCkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm47CkBA
IC03NSw3ICsxMDQsMTMgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6
cGxhdGZvcm1WZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNhU3MKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2VzdCA9IENy
eXB0b0RpZ2VzdDo6Y3JlYXRlKHBhcmFtZXRlcnMuaGFzaCk7CisgICAgQ3J5cHRvRGlnZXN0OjpB
bGdvcml0aG0gY3J5cHRvRGlnZXN0QWxnb3JpdGhtOworICAgIGlmICghZ2V0Q3J5cHRvRGlnZXN0
QWxnb3JpdGhtKHBhcmFtZXRlcnMuaGFzaCwgY3J5cHRvRGlnZXN0QWxnb3JpdGhtKSkgeworICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5cHRvRGlnZXN0Ojpj
cmVhdGUoY3J5cHRvRGlnZXN0QWxnb3JpdGhtKTsKICAgICBpZiAoIWRpZ2VzdCkgewogICAgICAg
ICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0RpZ2VzdE1hYy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0RpZ2VzdE1hYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAyMjViNzU2NzE1Yjc4ZjhjNWYyNTJkYTI0NjBhYjFhMTIxNWExODguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9DcnlwdG9EaWdlc3RNYWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3J5cHRv
RGlnZXN0LmgiCi0KLSNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLQotI2luY2x1ZGUgPENvbW1v
bkNyeXB0by9Db21tb25DcnlwdG8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3Qg
Q3J5cHRvRGlnZXN0Q29udGV4dCB7Ci0gICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdv
cml0aG07Ci0gICAgdm9pZCogY2NDb250ZXh0OwotfTsKLQotaW5saW5lIENDX1NIQTFfQ1RYKiB0
b1NIQTFDb250ZXh0KENyeXB0b0RpZ2VzdENvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgQVNTRVJU
KGNvbnRleHQtPmFsZ29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENDX1NIQTFfQ1RYKj4oY29udGV4dC0+Y2NDb250ZXh0
KTsKLX0KLWlubGluZSBDQ19TSEEyNTZfQ1RYKiB0b1NIQTIyNENvbnRleHQoQ3J5cHRvRGlnZXN0
Q29udGV4dCogY29udGV4dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dC0+YWxnb3JpdGhtID09IENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yMjQpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDQ19TSEEyNTZfQ1RYKj4oY29udGV4dC0+Y2NDb250ZXh0KTsKLX0KLWlubGluZSBDQ19TSEEy
NTZfQ1RYKiB0b1NIQTI1NkNvbnRleHQoQ3J5cHRvRGlnZXN0Q29udGV4dCogY29udGV4dCkKLXsK
LSAgICBBU1NFUlQoY29udGV4dC0+YWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8yNTYpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDQ19TSEEyNTZfQ1RYKj4oY29u
dGV4dC0+Y2NDb250ZXh0KTsKLX0KLWlubGluZSBDQ19TSEE1MTJfQ1RYKiB0b1NIQTM4NENvbnRl
eHQoQ3J5cHRvRGlnZXN0Q29udGV4dCogY29udGV4dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dC0+
YWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8zODQpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDQ19TSEE1MTJfQ1RYKj4oY29udGV4dC0+Y2NDb250ZXh0KTsKLX0K
LWlubGluZSBDQ19TSEE1MTJfQ1RYKiB0b1NIQTUxMkNvbnRleHQoQ3J5cHRvRGlnZXN0Q29udGV4
dCogY29udGV4dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dC0+YWxnb3JpdGhtID09IENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV81MTIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDQ19T
SEE1MTJfQ1RYKj4oY29udGV4dC0+Y2NDb250ZXh0KTsKLX0KLQotQ3J5cHRvRGlnZXN0OjpDcnlw
dG9EaWdlc3QoKQotICAgIDogbV9jb250ZXh0KG5ldyBDcnlwdG9EaWdlc3RDb250ZXh0KQotewot
fQotCi1DcnlwdG9EaWdlc3Q6On5DcnlwdG9EaWdlc3QoKQotewotICAgIHN3aXRjaCAobV9jb250
ZXh0LT5hbGdvcml0aG0pIHsKLSAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNI
QV8xOgotICAgICAgICBkZWxldGUgdG9TSEExQ29udGV4dChtX2NvbnRleHQuZ2V0KCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0
OgotICAgICAgICBkZWxldGUgdG9TSEEyMjRDb250ZXh0KG1fY29udGV4dC5nZXQoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6
Ci0gICAgICAgIGRlbGV0ZSB0b1NIQTI1NkNvbnRleHQobV9jb250ZXh0LmdldCgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDoK
LSAgICAgICAgZGVsZXRlIHRvU0hBMzg0Q29udGV4dChtX2NvbnRleHQuZ2V0KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyOgot
ICAgICAgICBkZWxldGUgdG9TSEE1MTJDb250ZXh0KG1fY29udGV4dC5nZXQoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci19Ci0KLQotc3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gQ3J5cHRvRGlnZXN0Ojpj
cmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0pCi17Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0KG5ldyBDcnlwdG9EaWdlc3QpOwotICAgIGRp
Z2VzdC0+bV9jb250ZXh0LT5hbGdvcml0aG0gPSBhbGdvcml0aG07Ci0KLSAgICBzd2l0Y2ggKGFs
Z29yaXRobSkgewotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6IHsK
LSAgICAgICAgQ0NfU0hBMV9DVFgqIGNvbnRleHQgPSBuZXcgQ0NfU0hBMV9DVFg7Ci0gICAgICAg
IGRpZ2VzdC0+bV9jb250ZXh0LT5jY0NvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBDQ19TSEEx
X0luaXQoY29udGV4dCk7Ci0gICAgICAgIHJldHVybiBkaWdlc3Q7Ci0gICAgfQotICAgIGNhc2Ug
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDogewotICAgICAgICBDQ19TSEEyNTZf
Q1RYKiBjb250ZXh0ID0gbmV3IENDX1NIQTI1Nl9DVFg7Ci0gICAgICAgIGRpZ2VzdC0+bV9jb250
ZXh0LT5jY0NvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBDQ19TSEEyMjRfSW5pdChjb250ZXh0
KTsKLSAgICAgICAgcmV0dXJuIGRpZ2VzdDsKLSAgICB9Ci0gICAgY2FzZSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpTSEFfMjU2OiB7Ci0gICAgICAgIENDX1NIQTI1Nl9DVFgqIGNvbnRleHQg
PSBuZXcgQ0NfU0hBMjU2X0NUWDsKLSAgICAgICAgZGlnZXN0LT5tX2NvbnRleHQtPmNjQ29udGV4
dCA9IGNvbnRleHQ7Ci0gICAgICAgIENDX1NIQTI1Nl9Jbml0KGNvbnRleHQpOwotICAgICAgICBy
ZXR1cm4gZGlnZXN0OwotICAgIH0KLSAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlNIQV8zODQ6IHsKLSAgICAgICAgQ0NfU0hBNTEyX0NUWCogY29udGV4dCA9IG5ldyBDQ19TSEE1
MTJfQ1RYOwotICAgICAgICBkaWdlc3QtPm1fY29udGV4dC0+Y2NDb250ZXh0ID0gY29udGV4dDsK
LSAgICAgICAgQ0NfU0hBMzg0X0luaXQoY29udGV4dCk7Ci0gICAgICAgIHJldHVybiBkaWdlc3Q7
Ci0gICAgfQotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMjogewot
ICAgICAgICBDQ19TSEE1MTJfQ1RYKiBjb250ZXh0ID0gbmV3IENDX1NIQTUxMl9DVFg7Ci0gICAg
ICAgIGRpZ2VzdC0+bV9jb250ZXh0LT5jY0NvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBDQ19T
SEE1MTJfSW5pdChjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuIGRpZ2VzdDsKLSAgICB9Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfQotCi12b2lkIENyeXB0
b0RpZ2VzdDo6YWRkQnl0ZXMoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBsZW5ndGgpCi17Ci0g
ICAgc3dpdGNoIChtX2NvbnRleHQtPmFsZ29yaXRobSkgewotICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6U0hBXzE6Ci0gICAgICAgIENDX1NIQTFfVXBkYXRlKHRvU0hBMUNvbnRl
eHQobV9jb250ZXh0LmdldCgpKSwgaW5wdXQsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yMjQ6Ci0gICAgICAgIENDX1NI
QTIyNF9VcGRhdGUodG9TSEEyMjRDb250ZXh0KG1fY29udGV4dC5nZXQoKSksIGlucHV0LCBsZW5n
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMjU2OgotICAgICAgICBDQ19TSEEyNTZfVXBkYXRlKHRvU0hBMjU2Q29udGV4dChtX2Nv
bnRleHQuZ2V0KCkpLCBpbnB1dCwgbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDoKLSAgICAgICAgQ0NfU0hBMzg0X1Vw
ZGF0ZSh0b1NIQTM4NENvbnRleHQobV9jb250ZXh0LmdldCgpKSwgaW5wdXQsIGxlbmd0aCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81
MTI6Ci0gICAgICAgIENDX1NIQTUxMl9VcGRhdGUodG9TSEE1MTJDb250ZXh0KG1fY29udGV4dC5n
ZXQoKSksIGlucHV0LCBsZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1WZWN0b3I8dWludDhfdD4g
Q3J5cHRvRGlnZXN0Ojpjb21wdXRlSGFzaCgpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dDsKLSAgICBzd2l0Y2ggKG1fY29udGV4dC0+YWxnb3JpdGhtKSB7Ci0gICAgY2FzZSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMToKLSAgICAgICAgcmVzdWx0LnJlc2l6ZShDQ19TSEEx
X0RJR0VTVF9MRU5HVEgpOwotICAgICAgICBDQ19TSEExX0ZpbmFsKHJlc3VsdC5kYXRhKCksIHRv
U0hBMUNvbnRleHQobV9jb250ZXh0LmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDoKLSAgICAgICAgcmVzdWx0LnJlc2l6
ZShDQ19TSEEyMjRfRElHRVNUX0xFTkdUSCk7Ci0gICAgICAgIENDX1NIQTIyNF9GaW5hbChyZXN1
bHQuZGF0YSgpLCB0b1NIQTIyNENvbnRleHQobV9jb250ZXh0LmdldCgpKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjoKLSAgICAg
ICAgcmVzdWx0LnJlc2l6ZShDQ19TSEEyNTZfRElHRVNUX0xFTkdUSCk7Ci0gICAgICAgIENDX1NI
QTI1Nl9GaW5hbChyZXN1bHQuZGF0YSgpLCB0b1NIQTI1NkNvbnRleHQobV9jb250ZXh0LmdldCgp
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
U0hBXzM4NDoKLSAgICAgICAgcmVzdWx0LnJlc2l6ZShDQ19TSEEzODRfRElHRVNUX0xFTkdUSCk7
Ci0gICAgICAgIENDX1NIQTM4NF9GaW5hbChyZXN1bHQuZGF0YSgpLCB0b1NIQTM4NENvbnRleHQo
bV9jb250ZXh0LmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6U0hBXzUxMjoKLSAgICAgICAgcmVzdWx0LnJlc2l6ZShDQ19TSEE1MTJf
RElHRVNUX0xFTkdUSCk7Ci0gICAgICAgIENDX1NIQTUxMl9GaW5hbChyZXN1bHQuZGF0YSgpLCB0
b1NIQTUxMkNvbnRleHQobV9jb250ZXh0LmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
U1VCVExFX0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NyeXB0
by9DcnlwdG9EaWdlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NyeXB0by9DcnlwdG9E
aWdlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMWYwNzVhYTM3Y2IzNDYyMDk4NDdhNTk5ZTFmNTQyODRmOWYz
ODE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY3J5cHRvL0Ny
eXB0b0RpZ2VzdC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENyeXB0b0RpZ2VzdF9oCisjZGVmaW5lIENyeXB0b0RpZ2VzdF9oCisKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IENyeXB0b0RpZ2VzdENvbnRleHQ7CisKK2NsYXNzIENyeXB0b0RpZ2Vz
dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3J5cHRvRGlnZXN0KTsKK3B1YmxpYzoKKyAg
ICBlbnVtIGNsYXNzIEFsZ29yaXRobSB7CisgICAgICAgIFNIQV8xLAorICAgICAgICBTSEFfMjI0
LAorICAgICAgICBTSEFfMjU2LAorICAgICAgICBTSEFfMzg0LAorICAgICAgICBTSEFfNTEyLAor
ICAgIH07CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGNyZWF0ZShB
bGdvcml0aG0pOworICAgIH5DcnlwdG9EaWdlc3QoKTsKKworICAgIHZvaWQgYWRkQnl0ZXMoY29u
c3Qgdm9pZCogaW5wdXQsIHNpemVfdCBsZW5ndGgpOworICAgIFZlY3Rvcjx1aW50OF90PiBjb21w
dXRlSGFzaCgpOworCitwcml2YXRlOgorICAgIENyeXB0b0RpZ2VzdCgpOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0RpZ2VzdENvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENyeXB0b0RpZ2VzdF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jcnlwdG8vZ251dGxzL0NyeXB0b0RpZ2VzdEdudVRMUy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jcnlwdG8vZ251dGxzL0NyeXB0b0RpZ2VzdEdu
dVRMUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODlhNWQ4MWYyYjRiZTI3MzJjZWUzZTUyNjMzODZlZDU5Y2Iy
MTRkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NyeXB0by9n
bnV0bHMvQ3J5cHRvRGlnZXN0R251VExTLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRvRGlnZXN0LmgiCisKKyNp
bmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+CisjaW5jbHVkZSA8Z251dGxzL2NyeXB0by5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBDcnlwdG9EaWdlc3RDb250ZXh0IHsKKyAgICBn
bnV0bHNfZGlnZXN0X2FsZ29yaXRobV90IGFsZ29yaXRobTsKKyAgICBnbnV0bHNfaGFzaF9oZF90
IGhhc2g7Cit9OworCitDcnlwdG9EaWdlc3Q6OkNyeXB0b0RpZ2VzdCgpCisgICAgOiBtX2NvbnRl
eHQobmV3IENyeXB0b0RpZ2VzdENvbnRleHQpCit7Cit9CisKK0NyeXB0b0RpZ2VzdDo6fkNyeXB0
b0RpZ2VzdCgpCit7CisgICAgZ251dGxzX2hhc2hfZGVpbml0KG1fY29udGV4dC0+aGFzaCwgMCk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IENyeXB0b0RpZ2VzdDo6Y3JlYXRl
KENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtIGFsZ29yaXRobSkKK3sKKyAgICBnbnV0bHNfZGlnZXN0
X2FsZ29yaXRobV90IGdudXRsc0FsZ29yaXRobTsKKworICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7
CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzE6IHsKKyAgICAgICAgZ251
dGxzQWxnb3JpdGhtID0gR05VVExTX0RJR19TSEExOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzIyNDogeworICAgICAgICBnbnV0
bHNBbGdvcml0aG0gPSBHTlVUTFNfRElHX1NIQTIyNDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTY6IHsKKyAgICAgICAgZ251
dGxzQWxnb3JpdGhtID0gR05VVExTX0RJR19TSEEyNTY7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMzg0OiB7CisgICAgICAgIGdu
dXRsc0FsZ29yaXRobSA9IEdOVVRMU19ESUdfU0hBMzg0OworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzUxMjogeworICAgICAgICBn
bnV0bHNBbGdvcml0aG0gPSBHTlVUTFNfRElHX1NIQTUxMjsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2VzdChuZXcg
Q3J5cHRvRGlnZXN0KTsKKyAgICBkaWdlc3QtPm1fY29udGV4dC0+YWxnb3JpdGhtID0gZ251dGxz
QWxnb3JpdGhtOworCisgICAgaW50IHJldCA9IGdudXRsc19oYXNoX2luaXQoJmRpZ2VzdC0+bV9j
b250ZXh0LT5oYXNoLCBnbnV0bHNBbGdvcml0aG0pOworICAgIGlmIChyZXQgIT0gR05VVExTX0Vf
U1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZGlnZXN0Owor
fQorCit2b2lkIENyeXB0b0RpZ2VzdDo6YWRkQnl0ZXMoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVf
dCBsZW5ndGgpCit7CisgICAgZ251dGxzX2hhc2gobV9jb250ZXh0LT5oYXNoLCBpbnB1dCwgbGVu
Z3RoKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQor
eworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgaW50IGRpZ2VzdExlbiA9IGdudXRs
c19oYXNoX2dldF9sZW4obV9jb250ZXh0LT5hbGdvcml0aG0pOworICAgIHJlc3VsdC5yZXNpemUo
ZGlnZXN0TGVuKTsKKworICAgIGdudXRsc19oYXNoX291dHB1dChtX2NvbnRleHQtPmhhc2gsIHJl
c3VsdC5kYXRhKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY3J5cHRvL21hYy9D
cnlwdG9EaWdlc3RNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY3J5cHRvL21hYy9D
cnlwdG9EaWdlc3RNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZmZjNTYwNTIyNmI2NGI0OTM3M2JlYTY4
NWU5MjNmMDE5OWJiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jcnlwdG8vbWFjL0NyeXB0b0RpZ2VzdE1hYy5jcHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRvRGlnZXN0LmgiCisK
KyNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uQ3J5cHRvLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IENyeXB0b0RpZ2VzdENvbnRleHQgeworICAgIENyeXB0b0RpZ2VzdDo6
QWxnb3JpdGhtIGFsZ29yaXRobTsKKyAgICB2b2lkKiBjY0NvbnRleHQ7Cit9OworCitpbmxpbmUg
Q0NfU0hBMV9DVFgqIHRvU0hBMUNvbnRleHQoQ3J5cHRvRGlnZXN0Q29udGV4dCogY29udGV4dCkK
K3sKKyAgICBBU1NFUlQoY29udGV4dC0+YWxnb3JpdGhtID09IENyeXB0b0RpZ2VzdDo6QWxnb3Jp
dGhtOjpTSEFfMSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENDX1NIQTFfQ1RYKj4oY29udGV4
dC0+Y2NDb250ZXh0KTsKK30KK2lubGluZSBDQ19TSEEyNTZfQ1RYKiB0b1NIQTIyNENvbnRleHQo
Q3J5cHRvRGlnZXN0Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+YWxn
b3JpdGhtID09IENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjI0KTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q0NfU0hBMjU2X0NUWCo+KGNvbnRleHQtPmNjQ29udGV4dCk7Cit9Citpbmxp
bmUgQ0NfU0hBMjU2X0NUWCogdG9TSEEyNTZDb250ZXh0KENyeXB0b0RpZ2VzdENvbnRleHQqIGNv
bnRleHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmFsZ29yaXRobSA9PSBDcnlwdG9EaWdlc3Q6
OkFsZ29yaXRobTo6U0hBXzI1Nik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENDX1NIQTI1Nl9D
VFgqPihjb250ZXh0LT5jY0NvbnRleHQpOworfQoraW5saW5lIENDX1NIQTUxMl9DVFgqIHRvU0hB
Mzg0Q29udGV4dChDcnlwdG9EaWdlc3RDb250ZXh0KiBjb250ZXh0KQoreworICAgIEFTU0VSVChj
b250ZXh0LT5hbGdvcml0aG0gPT0gQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8zODQpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDQ19TSEE1MTJfQ1RYKj4oY29udGV4dC0+Y2NDb250ZXh0
KTsKK30KK2lubGluZSBDQ19TSEE1MTJfQ1RYKiB0b1NIQTUxMkNvbnRleHQoQ3J5cHRvRGlnZXN0
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+YWxnb3JpdGhtID09IENy
eXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfNTEyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q0NfU0hBNTEyX0NUWCo+KGNvbnRleHQtPmNjQ29udGV4dCk7Cit9CisKK0NyeXB0b0RpZ2VzdDo6
Q3J5cHRvRGlnZXN0KCkKKyAgICA6IG1fY29udGV4dChuZXcgQ3J5cHRvRGlnZXN0Q29udGV4dCkK
K3sKK30KKworQ3J5cHRvRGlnZXN0Ojp+Q3J5cHRvRGlnZXN0KCkKK3sKKyAgICBzd2l0Y2ggKG1f
Y29udGV4dC0+YWxnb3JpdGhtKSB7CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6
U0hBXzE6CisgICAgICAgIGRlbGV0ZSB0b1NIQTFDb250ZXh0KG1fY29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjI0
OgorICAgICAgICBkZWxldGUgdG9TSEEyMjRDb250ZXh0KG1fY29udGV4dC5nZXQoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2Ogor
ICAgICAgICBkZWxldGUgdG9TSEEyNTZDb250ZXh0KG1fY29udGV4dC5nZXQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMzg0OgorICAg
ICAgICBkZWxldGUgdG9TSEEzODRDb250ZXh0KG1fY29udGV4dC5nZXQoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfNTEyOgorICAgICAg
ICBkZWxldGUgdG9TSEE1MTJDb250ZXh0KG1fY29udGV4dC5nZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9Cit9CisKKworc3RkOjp1bmlxdWVfcHRyPENyeXB0b0RpZ2VzdD4gQ3J5cHRvRGln
ZXN0OjpjcmVhdGUoQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gYWxnb3JpdGhtKQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9EaWdlc3Q+IGRpZ2VzdChuZXcgQ3J5cHRvRGlnZXN0KTsKKyAg
ICBkaWdlc3QtPm1fY29udGV4dC0+YWxnb3JpdGhtID0gYWxnb3JpdGhtOworCisgICAgc3dpdGNo
IChhbGdvcml0aG0pIHsKKyAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMTog
eworICAgICAgICBDQ19TSEExX0NUWCogY29udGV4dCA9IG5ldyBDQ19TSEExX0NUWDsKKyAgICAg
ICAgZGlnZXN0LT5tX2NvbnRleHQtPmNjQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIENDX1NI
QTFfSW5pdChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGRpZ2VzdDsKKyAgICB9CisgICAgY2Fz
ZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzIyNDogeworICAgICAgICBDQ19TSEEyNTZf
Q1RYKiBjb250ZXh0ID0gbmV3IENDX1NIQTI1Nl9DVFg7CisgICAgICAgIGRpZ2VzdC0+bV9jb250
ZXh0LT5jY0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICBDQ19TSEEyMjRfSW5pdChjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuIGRpZ2VzdDsKKyAgICB9CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6
OkFsZ29yaXRobTo6U0hBXzI1NjogeworICAgICAgICBDQ19TSEEyNTZfQ1RYKiBjb250ZXh0ID0g
bmV3IENDX1NIQTI1Nl9DVFg7CisgICAgICAgIGRpZ2VzdC0+bV9jb250ZXh0LT5jY0NvbnRleHQg
PSBjb250ZXh0OworICAgICAgICBDQ19TSEEyNTZfSW5pdChjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuIGRpZ2VzdDsKKyAgICB9CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hB
XzM4NDogeworICAgICAgICBDQ19TSEE1MTJfQ1RYKiBjb250ZXh0ID0gbmV3IENDX1NIQTUxMl9D
VFg7CisgICAgICAgIGRpZ2VzdC0+bV9jb250ZXh0LT5jY0NvbnRleHQgPSBjb250ZXh0OworICAg
ICAgICBDQ19TSEEzODRfSW5pdChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGRpZ2VzdDsKKyAg
ICB9CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzUxMjogeworICAgICAg
ICBDQ19TSEE1MTJfQ1RYKiBjb250ZXh0ID0gbmV3IENDX1NIQTUxMl9DVFg7CisgICAgICAgIGRp
Z2VzdC0+bV9jb250ZXh0LT5jY0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICBDQ19TSEE1MTJf
SW5pdChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGRpZ2VzdDsKKyAgICB9CisgICAgfQorfQor
Cit2b2lkIENyeXB0b0RpZ2VzdDo6YWRkQnl0ZXMoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBs
ZW5ndGgpCit7CisgICAgc3dpdGNoIChtX2NvbnRleHQtPmFsZ29yaXRobSkgeworICAgIGNhc2Ug
Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8xOgorICAgICAgICBDQ19TSEExX1VwZGF0ZSh0
b1NIQTFDb250ZXh0KG1fY29udGV4dC5nZXQoKSksIGlucHV0LCBsZW5ndGgpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzIyNDoKKyAgICAg
ICAgQ0NfU0hBMjI0X1VwZGF0ZSh0b1NIQTIyNENvbnRleHQobV9jb250ZXh0LmdldCgpKSwgaW5w
dXQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxn
b3JpdGhtOjpTSEFfMjU2OgorICAgICAgICBDQ19TSEEyNTZfVXBkYXRlKHRvU0hBMjU2Q29udGV4
dChtX2NvbnRleHQuZ2V0KCkpLCBpbnB1dCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8zODQ6CisgICAgICAgIENDX1NIQTM4
NF9VcGRhdGUodG9TSEEzODRDb250ZXh0KG1fY29udGV4dC5nZXQoKSksIGlucHV0LCBsZW5ndGgp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hB
XzUxMjoKKyAgICAgICAgQ0NfU0hBNTEyX1VwZGF0ZSh0b1NIQTUxMkNvbnRleHQobV9jb250ZXh0
LmdldCgpKSwgaW5wdXQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1Zl
Y3Rvcjx1aW50OF90PiBDcnlwdG9EaWdlc3Q6OmNvbXB1dGVIYXNoKCkKK3sKKyAgICBWZWN0b3I8
dWludDhfdD4gcmVzdWx0OworICAgIHN3aXRjaCAobV9jb250ZXh0LT5hbGdvcml0aG0pIHsKKyAg
ICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMToKKyAgICAgICAgcmVzdWx0LnJl
c2l6ZShDQ19TSEExX0RJR0VTVF9MRU5HVEgpOworICAgICAgICBDQ19TSEExX0ZpbmFsKHJlc3Vs
dC5kYXRhKCksIHRvU0hBMUNvbnRleHQobV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yMjQ6CisgICAgICAgIHJl
c3VsdC5yZXNpemUoQ0NfU0hBMjI0X0RJR0VTVF9MRU5HVEgpOworICAgICAgICBDQ19TSEEyMjRf
RmluYWwocmVzdWx0LmRhdGEoKSwgdG9TSEEyMjRDb250ZXh0KG1fY29udGV4dC5nZXQoKSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2
OgorICAgICAgICByZXN1bHQucmVzaXplKENDX1NIQTI1Nl9ESUdFU1RfTEVOR1RIKTsKKyAgICAg
ICAgQ0NfU0hBMjU2X0ZpbmFsKHJlc3VsdC5kYXRhKCksIHRvU0hBMjU2Q29udGV4dChtX2NvbnRl
eHQuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDcnlwdG9EaWdlc3Q6OkFsZ29y
aXRobTo6U0hBXzM4NDoKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShDQ19TSEEzODRfRElHRVNUX0xF
TkdUSCk7CisgICAgICAgIENDX1NIQTM4NF9GaW5hbChyZXN1bHQuZGF0YSgpLCB0b1NIQTM4NENv
bnRleHQobV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3J5cHRv
RGlnZXN0OjpBbGdvcml0aG06OlNIQV81MTI6CisgICAgICAgIHJlc3VsdC5yZXNpemUoQ0NfU0hB
NTEyX0RJR0VTVF9MRU5HVEgpOworICAgICAgICBDQ19TSEE1MTJfRmluYWwocmVzdWx0LmRhdGEo
KSwgdG9TSEE1MTJDb250ZXh0KG1fY29udGV4dC5nZXQoKSkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>