<?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>116746</bug_id>
          
          <creation_ts>2013-05-24 16:11:23 -0700</creation_ts>
          <short_desc>Move history property list writer to WebKit</short_desc>
          <delta_ts>2013-05-27 13:51:34 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>893491</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-24 16:11:23 -0700</bug_when>
    <thetext>Move history property list writer to WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893497</commentid>
    <comment_count>1</comment_count>
      <attachid>202864</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-24 16:17:23 -0700</bug_when>
    <thetext>Created attachment 202864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893500</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-24 16:19:34 -0700</bug_when>
    <thetext>Attachment 202864 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/history/cf/HistoryPropertyList.cpp&apos;, u&apos;Source/WebCore/history/cf/HistoryPropertyList.h&apos;, u&apos;Source/WebCore/platform/cf/BinaryPropertyList.cpp&apos;, u&apos;Source/WebCore/platform/cf/BinaryPropertyList.h&apos;, u&apos;Source/WebKit/ChangeLog&apos;, u&apos;Source/WebKit/WebKit.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/History/BinaryPropertyList.cpp&apos;, u&apos;Source/WebKit/mac/History/BinaryPropertyList.h&apos;, u&apos;Source/WebKit/mac/History/HistoryPropertyList.cpp&apos;, u&apos;Source/WebKit/mac/History/HistoryPropertyList.h&apos;, u&apos;Source/WebKit/mac/History/WebHistory.mm&apos;]&quot; exit_code: 1
Source/WebKit/mac/History/BinaryPropertyList.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/mac/History/HistoryPropertyList.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 9 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>893502</commentid>
    <comment_count>3</comment_count>
      <attachid>202864</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-05-24 16:25:23 -0700</bug_when>
    <thetext>Comment on attachment 202864
Patch

I assume you&apos;ll do The Right Thing when moving the files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893503</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-24 16:30:12 -0700</bug_when>
    <thetext>Committed r150665: &lt;http://trac.webkit.org/changeset/150665&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893832</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-26 16:44:27 -0700</bug_when>
    <thetext>This patch does not have a rationale posted.

Why is this helpful? I thought we wanted to move everything in the opposite direction, making WebKit a thin layer for platform specific APIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894141</commentid>
    <comment_count>6</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-27 13:37:27 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This patch does not have a rationale posted.
&gt; 
&gt; Why is this helpful? I thought we wanted to move everything in the opposite direction, making WebKit a thin layer for platform specific APIs.

It’s moving code that was only used by WebKit/mac away from WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894144</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-27 13:51:34 -0700</bug_when>
    <thetext>Sure, that&apos;s what the patch did, I can see that.

What is the rationale? Previously, we never intended to make WebCore lean and mean by making WebKit fat.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202864</attachid>
            <date>2013-05-24 16:17:23 -0700</date>
            <delta_ts>2013-05-24 16:25:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116746-20130524161607.patch</filename>
            <type>text/plain</type>
            <size>105390</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwNjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThhZjlhMGJkZTc3ZGU5
NDU5NTQ1MjVkOWU1OGJiODI4OWVkMTYwNy4uM2RkMTQyY2U3YzFhNzIyNWRlNWI2ZjFjNzQwNTdk
YTRjOGU1OTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA1LTI0ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBoaXN0b3J5
IHByb3BlcnR5IGxpc3Qgd3JpdGVyIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2NzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGZpbGVzIGZyb20gdGhlIFhjb2RlIHByb2pl
Y3QgYW5kIHJlbW92ZSBzeW1ib2xzIHRoYXQgbm93IGxpdmUgaW4gV2ViS2l0LgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDEzLTA1LTI0ICBTZW9ranUgS3dvbiAgPHNlb2tqdS5rd29uQGdtYWlsLmNv
bT4KIAogICAgICAgICBbQUNdIE5lZWRzIHRvIGJlIGd1YXJkZWQgYnkgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAyYTViZjA5NGZlMWUxNGJiMDJjNmI3YzZkN2U3NTZh
YzkyNDcxYzQ5Li4yMmU1ZTAwYTBmN2I0ZDcyNTI2MGY5YzkyMmU0YjBkZGI3Nzg4NjAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA1LTI0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBoaXN0b3J5IHByb3BlcnR5IGxpc3Qgd3Jp
dGVyIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE2NzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIGZpbGVzIHRvIHRoZSBYY29kZSBwcm9qZWN0LgorCisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTMtMDUtMjEgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBNYWtl
IFBhZ2VQb3B1cCBpbXBsZW1lbnRhdGlvbiBpbmRlcGVuZGVudCBmcm9tIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwppbmRleCAzNDQwN2ZlZDAzYTdiNzg4ZTdlODhkMzg5NDFlYjI0NTg2YTc3N2ViLi42
MTg2MjM3YzY2NWEyOTZjZDc0ODRhZmIxNmRmYjE2Mjc2NGZkOTg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDUtMjQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGhpc3RvcnkgcHJvcGVydHkgbGlzdCB3cml0ZXIg
dG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTY3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIFdlYkNvcmUgaGlzdG9yeSBmaWxlcyB0byBXZWJLaXQgc2luY2UgdGhleSdyZSBvbmx5
IHVzZWQgYnkgV2ViS2l0IG5vdy4KKworICAgICAgICAqIEhpc3RvcnkvQmluYXJ5UHJvcGVydHlM
aXN0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVBy
b3BlcnR5TGlzdC5jcHAuCisgICAgICAgICogSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlz
dC5oLgorICAgICAgICAqIEhpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L2NmL0hpc3RvcnlQcm9wZXJ0eUxpc3QuY3BwLgor
ICAgICAgICAqIEhpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvaGlzdG9yeS9jZi9IaXN0b3J5UHJvcGVydHlMaXN0LmguCisgICAgICAgICog
SGlzdG9yeS9XZWJIaXN0b3J5Lm1tOgorCiAyMDEzLTA1LTIzICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gY29udmVydE1haW5SZXNvdXJj
ZUxvYWRUb0Rvd25sb2FkIHdoZW4gZG93bmxvYWRpbmcgZmlsZSBieSBvcHRpb24tcmV0dXJuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCmluZGV4IDUwYjRmMGZhNWYxNzQ3NzliZGI4MDZhYTBkZTdjZGNhOTBm
NTIzZGYuLmQ2NzQ2NjY4ZTRkNmU5ZjkwMTYyMTkxNTkzMzZiOGYwMGRkYjcxMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCkBAIC03NjAsNyArNzYwLDYgQEAgX19aTjdXZWJDb3JlMjNkYXRhRm9yVVJM
Q29tcG9uZW50VHlwZUVQNU5TVVJMbAogX19aTjdXZWJDb3JlMjNkZWNvZGVIb3N0TmFtZVdpdGhS
YW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUyM2VuY29kZUhvc3ROYW1lV2l0
aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKIF9fWk43V2ViQ29yZTIzZ2V0SG9zdG5hbWVzV2l0
aENvb2tpZXNFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSTjNXVEY3SGFzaFNldElOUzNf
NlN0cmluZ0VOUzNfMTBTdHJpbmdIYXNoRU5TM18xMEhhc2hUcmFpdHNJUzVfRUVFRQotX19aTjdX
ZWJDb3JlMjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJvcGVydHlMaXN0RXYKIF9f
Wk43V2ViQ29yZTI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlMTFzZXRSZXNvdXJjZUVQTlNfMTRD
YWNoZWRSZXNvdXJjZUUKIF9fWk43V2ViQ29yZTI0Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyMTBm
aXJzdENoaWxkRXYKIF9fWk43V2ViQ29yZTI0Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyMTFuZXh0
U2libGluZ0V2CkBAIC03ODIsMTEgKzc4MSw2IEBAIF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOM1dURjZTdHJpCiBf
X1pON1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTI0bm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkRQogX19aTjdXZWJDb3JlMjRwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnRFUktOM1dURjZTdHJpbmdFUzNfCi1fX1pON1dlYkNvcmUyNUhp
c3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXIxMXJlbGVhc2VEYXRhRXYKLV9fWk43V2ViQ29yZTI1SGlz
dG9yeVByb3BlcnR5TGlzdFdyaXRlcjEyd3JpdGVPYmplY3RzRVJOU18zMEJpbmFyeVByb3BlcnR5
TGlzdE9iamVjdFN0cmVhbUUKLV9fWk43V2ViQ29yZTI1SGlzdG9yeVByb3BlcnR5TGlzdFdyaXRl
cjE2d3JpdGVIaXN0b3J5SXRlbUVSTlNfMzBCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW1F
UE5TXzExSGlzdG9yeUl0ZW1FCi1fX1pON1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0
ZXI2YnVmZmVyRW0KLV9fWk43V2ViQ29yZTI1SGlzdG9yeVByb3BlcnR5TGlzdFdyaXRlckMyRXYK
IF9fWk43V2ViQ29yZTI1SW1tdXRhYmxlU3R5bGVQcm9wZXJ0eVNldEQxRXYKIF9fWk43V2ViQ29y
ZTI1YWRkTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlckVQdlBGdlMwX0UKIF9fWk43V2ViQ29yZTI1Y29t
cHV0ZVZpZXdwb3J0QXR0cmlidXRlc0VOU18xN1ZpZXdwb3J0QXJndW1lbnRzRWlpaWZOU183SW50
U2l6ZUUKQEAgLTE2ODEsNyArMTY3NSw2IEBAIF9fWlRWTjdXZWJDb3JlMTVTdG9yYWdlU3RyYXRl
Z3lFCiBfX1pUVk43V2ViQ29yZTE2RGF0YWJhc2VTdHJhdGVneUUKIF9fWlRWTjdXZWJDb3JlMTZJ
Y29uRGF0YWJhc2VCYXNlRQogX19aVFZON1dlYkNvcmUxN0ZyYW1lTG9hZGVyQ2xpZW50RQotX19a
VFZON1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXJFCiBfX1pUVk43V2ViQ29yZTI4
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDhTZXR0aW5nc0UKIF9maWxlbmFtZUJ5Rml4aW5n
SWxsZWdhbENoYXJhY3RlcnMKIF9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkZWJjYjMy
ZmU3NWVjODUyYTM0MDQwZjgyNDYzZjkyMTE2NTJhYTJjLi5kNjgxZjI5ZTYzNjBkZTEzNzMzZDYy
YmJjOGU2MmQ4MTc3NDllZGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yODQ3LDggKzI4NDcsNiBAQAogCQk5MzVGQkM0NTA5
QkEwMEI5MDBFMjMwQjEgLyogRXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1RkJDNDQwOUJBMDBCOTAwRTIzMEIxIC8qIEV2ZW50
TGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5MzVGQkNGMjA5QkExNDNCMDBFMjMwQjEgLyogRXhjZXB0aW9uQ29kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1RkJDRjEwOUJBMTQzQjAw
RTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5MzYyNjQwQjBERTExMzdEMDA5RDVBMDAgLyogQ1NTUmVmbGVj
dGlvbkRpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM2MjY0MEEwREUxMTM3RDAwOUQ1QTAwIC8qIENTU1JlZmxlY3Rpb25EaXJlY3Rpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5MzYz
QjYyQzBGOEU4RkUwMDA4MDM4MTAgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzYzQjYyQTBGOEU4RkUwMDA4
MDM4MTAgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5jcHAgKi87IH07Ci0JCTkzNjNCNjJEMEY4RThG
RTAwMDgwMzgxMCAvKiBIaXN0b3J5UHJvcGVydHlMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzYzQjYyQjBGOEU4RkUwMDA4MDM4MTAgLyogSGlz
dG9yeVByb3BlcnR5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzNzA5MThEMTQxNkQ4NkIwMDQ3NzMzMyAvKiB0ZXh0QXJlYVJlc2l6ZUNv
cm5lckAyeC5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzNzA5MThDMTQxNkQ4NkIwMDQ3NzMzMyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeC5w
bmcgKi87IH07CiAJCTkzNzdBQkEwMTVERUZFRUYwMDMxRkQwNCAvKiBQYWdpbmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc3QUI5RjE1REVG
RUVGMDAzMUZEMDQgLyogUGFnaW5hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzNzk5RUY4MEJGMjc0MzYwMEQwRjIzMCAvKiBSZW5kZXJX
b3JkQnJlYWsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM3OTlFRjYwQkYyNzQzNjAwRDBGMjMwIC8qIFJlbmRlcldvcmRCcmVhay5jcHAgKi87IH07
CkBAIC0yODU2LDggKzI4NTQsNiBAQAogCQk5MzgwRjQ3MzA5QTExQUI0MDAxRkRCMzQgLyogV2lk
Z2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
ODBGNDcxMDlBMTFBQjQwMDFGREIzNCAvKiBXaWRnZXQuY3BwICovOyB9OwogCQk5MzgwRjQ3NDA5
QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzgwRjQ3MjA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM4MEY0Nzgw
OUExMUFDQzAwMUZEQjM0IC8qIFdpZGdldE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODBGNDc3MDlBMTFBQ0MwMDFGREIzNCAvKiBXaWRnZXRN
YWMubW0gKi87IH07Ci0JCTkzODE5MjAzMEY4N0UxRTYwMEQ1MzUyQSAvKiBCaW5hcnlQcm9wZXJ0
eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTM4MTkyMDIwRjg3RTFFNjAwRDUzNTJBIC8qIEJpbmFyeVByb3BlcnR5TGlzdC5jcHAgKi87IH07
Ci0JCTkzODE5MjA1MEY4N0UxRUMwMEQ1MzUyQSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODE5MjA0MEY4N0Ux
RUMwMEQ1MzUyQSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzgyQUFCNDBEOEMzODYxMDBGMzU3QTYgLyog
Tm9kZVdpdGhJbmRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM4MkFBQjEwRDhDMzg2MTAwRjM1N0E2IC8qIE5vZGVXaXRoSW5kZXguaCAqLzsgfTsK
IAkJOTM4MkRGNTgxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODJERjU3MTBBOEQ1QzkwMDkyNTY1
MiAvKiBDb2xvclNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOTM4RTY1RjEwOUYwOTg0MDAwOEE0OEVDIC8qIEpTSFRNTEVsZW1lbnRXcmFw
cGVyRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM4RTY1RjAwOUYwOTg0MDAwOEE0OEVDIC8qIEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9y
eS5oICovOyB9OwpAQCAtOTI3Myw4ICs5MjY5LDYgQEAKIAkJOTM1RkJDNDQwOUJBMDBCOTAwRTIz
MEIxIC8qIEV2ZW50TGlzdGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXZlbnRMaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzVGQkNGMTA5
QkExNDNCMDBFMjMwQjEgLyogRXhjZXB0aW9uQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeGNlcHRpb25Db2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzNjI2NDBBMERFMTEzN0QwMDlENUEwMCAvKiBDU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1JlZmxlY3Rpb25EaXJlY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTM2M0I2MkEwRjhFOEZFMDAwODAzODEwIC8q
IEhpc3RvcnlQcm9wZXJ0eUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGlzdG9yeVByb3BlcnR5TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTkzNjNCNjJCMEY4RThGRTAwMDgwMzgxMCAvKiBIaXN0b3J5UHJvcGVydHlMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhpc3RvcnlQcm9wZXJ0eUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM2REQwM0EwOUNFQUMyNzAwNTZBRThDIC8qIFJh
bmdlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSYW5nZS5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzNzA5MThDMTQxNkQ4NkIwMDQ3NzMzMyAvKiB0ZXh0QXJlYVJlc2l6
ZUNvcm5lckAyeC5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSAidGV4dEFyZWFSZXNpemVDb3JuZXJAMngucG5nIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3N0FCOUYxNURFRkVFRjAwMzFGRDA0IC8q
IFBhZ2luYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnaW5hdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI4Myw4ICs5Mjc3LDYgQEAKIAkJ
OTM4MEY0NzEwOUExMUFCNDAwMUZEQjM0IC8qIFdpZGdldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2lkZ2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTM4MEY0NzIwOUExMUFCNDAwMUZEQjM0IC8qIFdpZGdldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2lkZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzODBGNDc3MDlBMTFBQ0MwMDFGREIzNCAvKiBXaWRnZXRNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2lkZ2V0TWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk5MzgxOTIwMjBGODdFMUU2MDBENTM1MkEgLyogQmluYXJ5UHJvcGVy
dHlMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpbmFyeVBy
b3BlcnR5TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzODE5MjA0MEY4
N0UxRUMwMEQ1MzUyQSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQmluYXJ5UHJvcGVydHlMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzODJBQUIxMEQ4QzM4NjEwMEYzNTdBNiAvKiBOb2RlV2l0aEluZGV4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVXaXRoSW5kZXguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3Bh
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JTcGFjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzhFNjVGMDA5RjA5ODQwMDA4QTQ4RUMgLyogSlNI
VE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzNDA5LDggKzEzNDAxLDYgQEAKIAkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJE
IC8qIGNmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk5
MzgxOTIwMjBGODdFMUU2MDBENTM1MkEgLyogQmluYXJ5UHJvcGVydHlMaXN0LmNwcCAqLywKLQkJ
CQk5MzgxOTIwNDBGODdFMUVDMDBENTM1MkEgLyogQmluYXJ5UHJvcGVydHlMaXN0LmggKi8sCiAJ
CQkJNTE2MDMwNkIwQ0M0MzYyMzAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1DRi5jcHAgKi8sCiAJCQkJ
MUE5ODk1NkEwQUE3OEY4MDAwNUVGNUVGIC8qIEtVUkxDRk5ldC5jcHAgKi8sCiAJCQkJMjlBMzA5
QUIxNTYxQzk5QjAwQkJEOEU1IC8qIFJ1bkxvb3BDRi5jcHAgKi8sCkBAIC0xNDMzMSw3ICsxNDMy
MSw2IEBACiAJCTUxNzQxRDA4MEIwNzI1NzAwMEVENDQyQyAvKiBoaXN0b3J5ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk5MzYzQjYyOTBGOEU4RkUwMDA4
MDM4MTAgLyogY2YgKi8sCiAJCQkJNTE2MEY0OTIwQjBBQTcxNTAwQzFEMkFGIC8qIG1hYyAqLywK
IAkJCQlCQ0E4QzgxRDExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmNw
cCAqLywKIAkJCQlCQ0E4QzgxQzExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9s
bGVyLmggKi8sCkBAIC0xNTY3NSwxNSArMTU2NjQsNiBAQAogCQkJcGF0aCA9IGZpbHRlcnM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQk5MzYzQjYyOTBGOEU4RkUwMDA4MDM4
MTAgLyogY2YgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJ
CTkzNjNCNjJBMEY4RThGRTAwMDgwMzgxMCAvKiBIaXN0b3J5UHJvcGVydHlMaXN0LmNwcCAqLywK
LQkJCQk5MzYzQjYyQjBGOEU4RkUwMDA4MDM4MTAgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5oICov
LAotCQkJKTsKLQkJCXBhdGggPSBjZjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07
CiAJCTkzQTFFQUEyMEE1NjM0RDgwMDY5NjBBMCAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjEwNDcsNyArMjEwMjcsNiBAQAogCQkJCUIyQzNE
QTI1MEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRTc4OTg2MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEM0MDI5MzEzNDhCMjIyMDA2M0YxRTUgLyogQmlkaVJ1bkxpc3QuaCBpbiBIZWFkZXJzICov
LAotCQkJCTkzODE5MjA1MEY4N0UxRUMwMEQ1MzUyQSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3M0FBM0ZBMTVEMDg5MUIwMEUzOEE4NSAvKiBCaW5kaW5nU2Vj
dXJpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3M0FBM0Y1MTVEMDg4RjAwMEUzOEE4NSAvKiBC
aW5kaW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNUFFNUFDMTQ5MjVGNUIwMDRENTc3
NiAvKiBCaW5kaW5nVmlzaXRvcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjE5NTcsNyArMjE5MzYs
NiBAQAogCQkJCUJDOTREMTU0MEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5N0RDRTIwMjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzQxRDExMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5
SXRlbS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTM2M0I2MkQwRjhFOEZFMDAwODAzODEwIC8qIEhp
c3RvcnlQcm9wZXJ0eUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NjlCMEYzMTNEMEIzM0Yw
MERGMzUyMSAvKiBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJEODI4N0Y3MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMDkwODkxMEFGN0VERTQwMDgxREYwMSAvKiBIaXRUZXN0UmVxdWVzdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNDUwMiw3ICsyNDQ4MCw2IEBACiAJCQkJODUwMzFCM0MwQTQ0RUZD
NzAwRjk5MkUwIC8qIEJlZm9yZVVubG9hZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
QzNEQTIzMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQ0U3ODk4QjExMjBFODAyMDA2MEVDRTUgLyogQmlkaVJ1bi5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk5MzgxOTIwMzBGODdFMUU2MDBENTM1MkEgLyogQmluYXJ5UHJvcGVydHlMaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3M0FBM0Y5MTVEMDg5MUIwMEUzOEE4NSAvKiBCaW5kaW5n
U2VjdXJpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczQUEzRjQxNUQwODhGMDAwRTM4QTg1
IC8qIEJpbmRpbmdTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjA4QzEyQjAyNkY3
MDBDMUEzNTkgLyogQmlxdWFkLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjUxMzksNyArMjUxMTYs
NiBAQAogCQkJCTk3RENFMjAxMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9y
eUl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MEY0OTgwQjBBQTc1RjAwQzFEMkFGIC8q
IEhpc3RvcnlJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTM2M0I2MkMwRjhFOEZFMDAw
ODAzODEwIC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk2
OUIwRjIxM0QwQjMzRjAwREYzNTIxIC8qIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRDgyODdGNjE2RTRBMDM4MDA4NkJEMDAgLyogSGl0VGVzdExvY2F0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDdGMUQ3MEFGMkQ1OTAwMERCQTMxQSAvKiBI
aXRUZXN0UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9jZi9IaXN0b3J5UHJvcGVydHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hp
c3RvcnkvY2YvSGlzdG9yeVByb3BlcnR5TGlzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY4ZDViN2Q2NjdiMWVkM2IyODI0NWY0YWJmMWVmNjhlNjg5NWFhYjQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9jZi9IaXN0b3J5UHJvcGVydHlMaXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIaXN0b3J5UHJvcGVydHlMaXN0LmgiCi0KLSNp
bmNsdWRlICJIaXN0b3J5SXRlbS5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgaW50IGN1cnJlbnRGaWxlVmVyc2lv
biA9IDE7Ci0KLUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXI6Okhpc3RvcnlQcm9wZXJ0eUxpc3RX
cml0ZXIoKQotICAgIDogbV9kYWlseVZpc2l0Q291bnRzS2V5KCJEIikKLSAgICAsIG1fZGlzcGxh
eVRpdGxlS2V5KCJkaXNwbGF5VGl0bGUiKQotICAgICwgbV9sYXN0VmlzaXRXYXNGYWlsdXJlS2V5
KCJsYXN0VmlzaXRXYXNGYWlsdXJlIikKLSAgICAsIG1fbGFzdFZpc2l0V2FzSFRUUE5vbkdldEtl
eSgibGFzdFZpc2l0V2FzSFRUUE5vbkdldCIpCi0gICAgLCBtX2xhc3RWaXNpdGVkRGF0ZUtleSgi
bGFzdFZpc2l0ZWREYXRlIikKLSAgICAsIG1fcmVkaXJlY3RVUkxzS2V5KCJyZWRpcmVjdFVSTHMi
KQotICAgICwgbV90aXRsZUtleSgidGl0bGUiKQotICAgICwgbV91cmxLZXkoIiIpCi0gICAgLCBt
X3Zpc2l0Q291bnRLZXkoInZpc2l0Q291bnQiKQotICAgICwgbV93ZWVrbHlWaXNpdENvdW50c0tl
eSgiVyIpCi0gICAgLCBtX2J1ZmZlcigwKQotewotfQotCi1VSW50OCogSGlzdG9yeVByb3BlcnR5
TGlzdFdyaXRlcjo6YnVmZmVyKHNpemVfdCBzaXplKQotewotICAgIEFTU0VSVCghbV9idWZmZXIp
OwotICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8VUludDgqPihDRkFsbG9jYXRvckFsbG9jYXRl
KDAsIHNpemUsIDApKTsKLSAgICBtX2J1ZmZlclNpemUgPSBzaXplOwotICAgIHJldHVybiBtX2J1
ZmZlcjsKLX0KLQotUmV0YWluUHRyPENGRGF0YVJlZj4gSGlzdG9yeVByb3BlcnR5TGlzdFdyaXRl
cjo6cmVsZWFzZURhdGEoKQotewotICAgIFVJbnQ4KiBidWZmZXIgPSBtX2J1ZmZlcjsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZVdpdGhCeXRlc05v
Q29weSgwLCBidWZmZXIsIG1fYnVmZmVyU2l6ZSwgMCkpOwotICAgIGlmICghZGF0YSkgewotICAg
ICAgICBDRkFsbG9jYXRvckRlYWxsb2NhdGUoMCwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiBkYXRhOwotfQotCi12b2lkIEhpc3RvcnlQcm9wZXJ0eUxpc3RX
cml0ZXI6OndyaXRlT2JqZWN0cyhCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0mIHN0cmVh
bSkKLXsKLSAgICBzaXplX3Qgb3V0ZXJEaWN0aW9uYXJ5U3RhcnQgPSBzdHJlYW0ud3JpdGVEaWN0
aW9uYXJ5U3RhcnQoKTsKLQotICAgIHN0cmVhbS53cml0ZVN0cmluZygiV2ViSGlzdG9yeUZpbGVW
ZXJzaW9uIik7Ci0gICAgc3RyZWFtLndyaXRlU3RyaW5nKCJXZWJIaXN0b3J5RGF0ZXMiKTsKLQot
ICAgIHN0cmVhbS53cml0ZUludGVnZXIoY3VycmVudEZpbGVWZXJzaW9uKTsKLSAgICBzaXplX3Qg
b3V0ZXJEYXRlQXJyYXlTdGFydCA9IHN0cmVhbS53cml0ZUFycmF5U3RhcnQoKTsKLSAgICB3cml0
ZUhpc3RvcnlJdGVtcyhzdHJlYW0pOwotICAgIHN0cmVhbS53cml0ZUFycmF5RW5kKG91dGVyRGF0
ZUFycmF5U3RhcnQpOwotCi0gICAgc3RyZWFtLndyaXRlRGljdGlvbmFyeUVuZChvdXRlckRpY3Rp
b25hcnlTdGFydCk7Ci19Ci0KLXZvaWQgSGlzdG9yeVByb3BlcnR5TGlzdFdyaXRlcjo6d3JpdGVI
aXN0b3J5SXRlbShCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0mIHN0cmVhbSwgSGlzdG9y
eUl0ZW0qIGl0ZW0pCi17Ci0gICAgc2l6ZV90IGl0ZW1EaWN0aW9uYXJ5U3RhcnQgPSBzdHJlYW0u
d3JpdGVEaWN0aW9uYXJ5U3RhcnQoKTsKLQotICAgIGNvbnN0IFN0cmluZyYgdGl0bGUgPSBpdGVt
LT50aXRsZSgpOwotICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheVRpdGxlID0gaXRlbS0+YWx0ZXJu
YXRlVGl0bGUoKTsKLSAgICBkb3VibGUgbGFzdFZpc2l0ZWREYXRlID0gaXRlbS0+bGFzdFZpc2l0
ZWRUaW1lKCk7Ci0gICAgaW50IHZpc2l0Q291bnQgPSBpdGVtLT52aXNpdENvdW50KCk7Ci0gICAg
VmVjdG9yPFN0cmluZz4qIHJlZGlyZWN0VVJMcyA9IGl0ZW0tPnJlZGlyZWN0VVJMcygpOwotICAg
IGNvbnN0IFZlY3RvcjxpbnQ+JiBkYWlseVZpc2l0Q291bnRzID0gaXRlbS0+ZGFpbHlWaXNpdENv
dW50cygpOwotICAgIGNvbnN0IFZlY3RvcjxpbnQ+JiB3ZWVrbHlWaXNpdENvdW50cyA9IGl0ZW0t
PndlZWtseVZpc2l0Q291bnRzKCk7Ci0KLSAgICAvLyBrZXlzCi0gICAgc3RyZWFtLndyaXRlU3Ry
aW5nKG1fdXJsS2V5KTsKLSAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkKLSAgICAgICAgc3RyZWFt
LndyaXRlU3RyaW5nKG1fdGl0bGVLZXkpOwotICAgIGlmICghZGlzcGxheVRpdGxlLmlzRW1wdHko
KSkKLSAgICAgICAgc3RyZWFtLndyaXRlU3RyaW5nKG1fZGlzcGxheVRpdGxlS2V5KTsKLSAgICBp
ZiAobGFzdFZpc2l0ZWREYXRlKQotICAgICAgICBzdHJlYW0ud3JpdGVTdHJpbmcobV9sYXN0Vmlz
aXRlZERhdGVLZXkpOwotICAgIGlmICh2aXNpdENvdW50KQotICAgICAgICBzdHJlYW0ud3JpdGVT
dHJpbmcobV92aXNpdENvdW50S2V5KTsKLSAgICBpZiAoaXRlbS0+bGFzdFZpc2l0V2FzRmFpbHVy
ZSgpKQotICAgICAgICBzdHJlYW0ud3JpdGVTdHJpbmcobV9sYXN0VmlzaXRXYXNGYWlsdXJlS2V5
KTsKLSAgICBpZiAoaXRlbS0+bGFzdFZpc2l0V2FzSFRUUE5vbkdldCgpKQotICAgICAgICBzdHJl
YW0ud3JpdGVTdHJpbmcobV9sYXN0VmlzaXRXYXNIVFRQTm9uR2V0S2V5KTsKLSAgICBpZiAocmVk
aXJlY3RVUkxzKQotICAgICAgICBzdHJlYW0ud3JpdGVTdHJpbmcobV9yZWRpcmVjdFVSTHNLZXkp
OwotICAgIGlmICghZGFpbHlWaXNpdENvdW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHN0cmVhbS53
cml0ZVN0cmluZyhtX2RhaWx5VmlzaXRDb3VudHNLZXkpOwotICAgIGlmICghd2Vla2x5VmlzaXRD
b3VudHMuaXNFbXB0eSgpKQotICAgICAgICBzdHJlYW0ud3JpdGVTdHJpbmcobV93ZWVrbHlWaXNp
dENvdW50c0tleSk7Ci0KLSAgICAvLyB2YWx1ZXMKLSAgICBzdHJlYW0ud3JpdGVVbmlxdWVTdHJp
bmcoaXRlbS0+dXJsU3RyaW5nKCkpOwotICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQotICAgICAg
ICBzdHJlYW0ud3JpdGVTdHJpbmcodGl0bGUpOwotICAgIGlmICghZGlzcGxheVRpdGxlLmlzRW1w
dHkoKSkKLSAgICAgICAgc3RyZWFtLndyaXRlU3RyaW5nKGRpc3BsYXlUaXRsZSk7Ci0gICAgaWYg
KGxhc3RWaXNpdGVkRGF0ZSkgewotICAgICAgICBjaGFyIGJ1ZmZlclszMl07Ci0gICAgICAgIHNu
cHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlLjFsZiIsIGxhc3RWaXNpdGVkRGF0ZSk7
Ci0gICAgICAgIHN0cmVhbS53cml0ZVVuaXF1ZVN0cmluZyhidWZmZXIpOwotICAgIH0KLSAgICBp
ZiAodmlzaXRDb3VudCkKLSAgICAgICAgc3RyZWFtLndyaXRlSW50ZWdlcih2aXNpdENvdW50KTsK
LSAgICBpZiAoaXRlbS0+bGFzdFZpc2l0V2FzRmFpbHVyZSgpKQotICAgICAgICBzdHJlYW0ud3Jp
dGVCb29sZWFuVHJ1ZSgpOwotICAgIGlmIChpdGVtLT5sYXN0VmlzaXRXYXNIVFRQTm9uR2V0KCkp
IHsKLSAgICAgICAgQVNTRVJUKGl0ZW0tPnVybFN0cmluZygpLnN0YXJ0c1dpdGgoImh0dHA6Iiwg
ZmFsc2UpIHx8IGl0ZW0tPnVybFN0cmluZygpLnN0YXJ0c1dpdGgoImh0dHBzOiIsIGZhbHNlKSk7
Ci0gICAgICAgIHN0cmVhbS53cml0ZUJvb2xlYW5UcnVlKCk7Ci0gICAgfQotICAgIGlmIChyZWRp
cmVjdFVSTHMpIHsKLSAgICAgICAgc2l6ZV90IHJlZGlyZWN0QXJyYXlTdGFydCA9IHN0cmVhbS53
cml0ZUFycmF5U3RhcnQoKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSByZWRpcmVjdFVSTHMtPnNp
emUoKTsKLSAgICAgICAgQVNTRVJUKHNpemUpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIHN0cmVhbS53cml0ZVVuaXF1ZVN0cmluZyhyZWRp
cmVjdFVSTHMtPmF0KGkpKTsKLSAgICAgICAgc3RyZWFtLndyaXRlQXJyYXlFbmQocmVkaXJlY3RB
cnJheVN0YXJ0KTsKLSAgICB9Ci0gICAgaWYgKHNpemVfdCBzaXplID0gZGFpbHlWaXNpdENvdW50
cy5zaXplKCkpCi0gICAgICAgIHN0cmVhbS53cml0ZUludGVnZXJBcnJheShkYWlseVZpc2l0Q291
bnRzLmRhdGEoKSwgc2l6ZSk7Ci0gICAgaWYgKHNpemVfdCBzaXplID0gd2Vla2x5VmlzaXRDb3Vu
dHMuc2l6ZSgpKQotICAgICAgICBzdHJlYW0ud3JpdGVJbnRlZ2VyQXJyYXkod2Vla2x5VmlzaXRD
b3VudHMuZGF0YSgpLCBzaXplKTsKLQotICAgIHN0cmVhbS53cml0ZURpY3Rpb25hcnlFbmQoaXRl
bURpY3Rpb25hcnlTdGFydCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hp
c3RvcnkvY2YvSGlzdG9yeVByb3BlcnR5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9j
Zi9IaXN0b3J5UHJvcGVydHlMaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZh
NmUwOWY1ZDlhODBlMmU1N2NjOWY0MTQ2MTkyNjA0NGU5YzhkNGMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9jZi9I
aXN0b3J5UHJvcGVydHlMaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSGlzdG9y
eVByb3BlcnR5TGlzdF9oCi0jZGVmaW5lIEhpc3RvcnlQcm9wZXJ0eUxpc3RfaAotCi0jaW5jbHVk
ZSAiQmluYXJ5UHJvcGVydHlMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEhpc3RvcnlJdGVtOwotCi1jbGFzcyBIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyIDogcHVi
bGljIEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlciB7Ci1wdWJsaWM6Ci0gICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gcmVsZWFzZURhdGEoKTsKLQotcHJvdGVjdGVkOgotICAgIEhpc3RvcnlQcm9wZXJ0
eUxpc3RXcml0ZXIoKTsKLQotICAgIHZvaWQgd3JpdGVIaXN0b3J5SXRlbShCaW5hcnlQcm9wZXJ0
eUxpc3RPYmplY3RTdHJlYW0mLCBIaXN0b3J5SXRlbSopOwotCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgdm9pZCB3cml0ZUhpc3RvcnlJdGVtcyhCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0m
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVPYmplY3RzKEJpbmFyeVByb3BlcnR5TGlz
dE9iamVjdFN0cmVhbSYpOwotICAgIHZpcnR1YWwgVUludDgqIGJ1ZmZlcihzaXplX3QpOwotCi0g
ICAgY29uc3QgU3RyaW5nIG1fZGFpbHlWaXNpdENvdW50c0tleTsKLSAgICBjb25zdCBTdHJpbmcg
bV9kaXNwbGF5VGl0bGVLZXk7Ci0gICAgY29uc3QgU3RyaW5nIG1fbGFzdFZpc2l0V2FzRmFpbHVy
ZUtleTsKLSAgICBjb25zdCBTdHJpbmcgbV9sYXN0VmlzaXRXYXNIVFRQTm9uR2V0S2V5OwotICAg
IGNvbnN0IFN0cmluZyBtX2xhc3RWaXNpdGVkRGF0ZUtleTsKLSAgICBjb25zdCBTdHJpbmcgbV9y
ZWRpcmVjdFVSTHNLZXk7Ci0gICAgY29uc3QgU3RyaW5nIG1fdGl0bGVLZXk7Ci0gICAgY29uc3Qg
U3RyaW5nIG1fdXJsS2V5OwotICAgIGNvbnN0IFN0cmluZyBtX3Zpc2l0Q291bnRLZXk7Ci0gICAg
Y29uc3QgU3RyaW5nIG1fd2Vla2x5VmlzaXRDb3VudHNLZXk7Ci0KLSAgICBVSW50OCogbV9idWZm
ZXI7Ci0gICAgc2l6ZV90IG1fYnVmZmVyU2l6ZTsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI3ZDdkN2NkM2MxNDM4NjBlYzY1OGJlZWIyZDZlNzcy
ZTk0MmM1Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsODMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJpbmFyeVByb3Bl
cnR5TGlzdC5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDxsaW1p
dHM+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIGNvbnN0IHNpemVfdCBoZWFkZXJTaXplID0gODsKLXN0YXRpYyBjb25zdCBzaXplX3QgdHJh
aWxlclNpemUgPSAzMjsKLQotc3RhdGljIGNvbnN0IFVJbnQ4IGJvb2xlYW5UcnVlTWFya2VyQnl0
ZSA9IDB4MDk7Ci1zdGF0aWMgY29uc3QgVUludDggb25lQnl0ZUludGVnZXJNYXJrZXJCeXRlID0g
MHgxMDsKLXN0YXRpYyBjb25zdCBVSW50OCB0d29CeXRlSW50ZWdlck1hcmtlckJ5dGUgPSAweDEx
Owotc3RhdGljIGNvbnN0IFVJbnQ4IGZvdXJCeXRlSW50ZWdlck1hcmtlckJ5dGUgPSAweDEyOwot
c3RhdGljIGNvbnN0IFVJbnQ4IGVpZ2h0Qnl0ZUludGVnZXJNYXJrZXJCeXRlID0gMHgxMzsKLXN0
YXRpYyBjb25zdCBVSW50OCBhc2NpaVN0cmluZ01hcmtlckJ5dGUgPSAweDUwOwotc3RhdGljIGNv
bnN0IFVJbnQ4IGFzY2lpU3RyaW5nV2l0aFNlcGFyYXRlTGVuZ3RoTWFya2VyQnl0ZSA9IDB4NUY7
Ci1zdGF0aWMgY29uc3QgVUludDggdW5pY29kZVN0cmluZ01hcmtlckJ5dGUgPSAweDYwOwotc3Rh
dGljIGNvbnN0IFVJbnQ4IHVuaWNvZGVTdHJpbmdXaXRoU2VwYXJhdGVMZW5ndGhNYXJrZXJCeXRl
ID0gMHg2RjsKLXN0YXRpYyBjb25zdCBVSW50OCBhcnJheU1hcmtlckJ5dGUgPSAweEEwOwotc3Rh
dGljIGNvbnN0IFVJbnQ4IGFycmF5V2l0aFNlcGFyYXRlTGVuZ3RoTWFya2VyQnl0ZSA9IDB4QUY7
Ci1zdGF0aWMgY29uc3QgVUludDggZGljdGlvbmFyeU1hcmtlckJ5dGUgPSAweEQwOwotc3RhdGlj
IGNvbnN0IFVJbnQ4IGRpY3Rpb25hcnlXaXRoU2VwYXJhdGVMZW5ndGhNYXJrZXJCeXRlID0gMHhE
RjsKLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4TGVuZ3RoSW5NYXJrZXJCeXRlID0gMHhFOwotCi1j
bGFzcyBJbnRlZ2VyQXJyYXkgewotcHVibGljOgotICAgIEludGVnZXJBcnJheSgpIDogbV9pbnRl
Z2VycygwKSwgbV9zaXplKDApIHsgfQotICAgIEludGVnZXJBcnJheShjb25zdCBpbnQqIGludGVn
ZXJzLCBzaXplX3Qgc2l6ZSkgOiBtX2ludGVnZXJzKGludGVnZXJzKSwgbV9zaXplKHNpemUpIHsg
QVNTRVJUKGludGVnZXJzKTsgQVNTRVJUKHNpemUpOyB9Ci0KLSAgICB2b2lkIG1hcmtEZWxldGVk
KCkgeyBtX2ludGVnZXJzID0gMDsgbV9zaXplID0gZGVsZXRlZFZhbHVlU2l6ZSgpOyB9Ci0gICAg
Ym9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSA9PSBkZWxldGVkVmFs
dWVTaXplKCk7IH0KLQotICAgIGNvbnN0IGludCogaW50ZWdlcnMoKSBjb25zdCB7IEFTU0VSVCgh
aXNEZWxldGVkVmFsdWUoKSk7IHJldHVybiBtX2ludGVnZXJzOyB9Ci0gICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IEFTU0VSVCghaXNEZWxldGVkVmFsdWUoKSk7IHJldHVybiBtX3NpemU7IH0KLQot
cHJpdmF0ZToKLSAgICBzdGF0aWMgc2l6ZV90IGRlbGV0ZWRWYWx1ZVNpemUoKSB7IHJldHVybiBu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsgfQotCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBJbnRlZ2VyQXJyYXkmLCBjb25zdCBJbnRlZ2VyQXJyYXkmKTsKLQotICAgIGNv
bnN0IGludCogbV9pbnRlZ2VyczsKLSAgICBzaXplX3QgbV9zaXplOwotfTsKLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBJbnRlZ2VyQXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYg
YikKLXsKLSAgICByZXR1cm4gYS5tX2ludGVnZXJzID09IGIubV9pbnRlZ2VycyAmJiAgYS5tX3Np
emUgPT0gYi5tX3NpemU7Ci19Ci0KLXN0cnVjdCBJbnRlZ2VyQXJyYXlIYXNoVHJhaXRzIDogV1RG
OjpHZW5lcmljSGFzaFRyYWl0czxJbnRlZ2VyQXJyYXk+IHsKLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVs
ZXRlZFZhbHVlKEludGVnZXJBcnJheSYgc2xvdCkgeyBzbG90Lm1hcmtEZWxldGVkKCk7IH0KLSAg
ICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBJbnRlZ2VyQXJyYXkmIGFycmF5KSB7
IHJldHVybiBhcnJheS5pc0RlbGV0ZWRWYWx1ZSgpOyB9Ci19OwotCi1zdHJ1Y3QgSW50ZWdlckFy
cmF5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSW50ZWdlckFycmF5Jik7
Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSW50ZWdlckFycmF5JiwgY29uc3QgSW50ZWdl
ckFycmF5Jik7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwotfTsKLQotdW5zaWduZWQgSW50ZWdlckFycmF5SGFzaDo6aGFzaChjb25z
dCBJbnRlZ2VyQXJyYXkmIGFycmF5KQotewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hN
ZW1vcnkoYXJyYXkuaW50ZWdlcnMoKSwgYXJyYXkuc2l6ZSgpICogc2l6ZW9mKGludCkpOwotfQot
Ci1ib29sIEludGVnZXJBcnJheUhhc2g6OmVxdWFsKGNvbnN0IEludGVnZXJBcnJheSYgYSwgY29u
c3QgSW50ZWdlckFycmF5JiBiKQotewotICAgIGlmIChhLmlzRGVsZXRlZFZhbHVlKCkgfHwgYi5p
c0RlbGV0ZWRWYWx1ZSgpKQotICAgICAgICByZXR1cm4gYS5pc0RlbGV0ZWRWYWx1ZSgpID09IGIu
aXNEZWxldGVkVmFsdWUoKTsKLSAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGEuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGEuaW50ZWdlcnMoKVtpXSAhPSBiLmludGVnZXJzKClbaV0pCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi10eXBl
ZGVmIHNpemVfdCBPYmplY3RSZWZlcmVuY2U7Ci0KLWNsYXNzIEJpbmFyeVByb3BlcnR5TGlzdFBs
YW4gOiBwcml2YXRlIEJpbmFyeVByb3BlcnR5TGlzdE9iamVjdFN0cmVhbSB7Ci1wdWJsaWM6Ci0g
ICAgQmluYXJ5UHJvcGVydHlMaXN0UGxhbihCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXImKTsKLQot
ICAgIE9iamVjdFJlZmVyZW5jZSBib29sZWFuVHJ1ZU9iamVjdFJlZmVyZW5jZSgpIGNvbnN0Owot
ICAgIE9iamVjdFJlZmVyZW5jZSBpbnRlZ2VyT2JqZWN0UmVmZXJlbmNlKGludCkgY29uc3Q7Ci0g
ICAgT2JqZWN0UmVmZXJlbmNlIHN0cmluZ09iamVjdFJlZmVyZW5jZShjb25zdCBTdHJpbmcmKSBj
b25zdDsKLSAgICBPYmplY3RSZWZlcmVuY2UgaW50ZWdlckFycmF5T2JqZWN0UmVmZXJlbmNlKGNv
bnN0IGludCosIHNpemVfdCkgY29uc3Q7Ci0KLSAgICBPYmplY3RSZWZlcmVuY2Ugb2JqZWN0Q291
bnQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2U7IH0KLQotICAgIE9i
amVjdFJlZmVyZW5jZSBieXRlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVDb3VudDsgfQot
ICAgIE9iamVjdFJlZmVyZW5jZSBvYmplY3RSZWZlcmVuY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2JqZWN0UmVmZXJlbmNlQ291bnQ7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVCb29sZWFuVHJ1ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUludGVnZXIoaW50KTsK
LSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVh
bCB2b2lkIHdyaXRlSW50ZWdlckFycmF5KGNvbnN0IGludCosIHNpemVfdCk7Ci0gICAgdmlydHVh
bCB2b2lkIHdyaXRlVW5pcXVlU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZVVuaXF1ZVN0cmluZyhjb25zdCBjaGFyKik7Ci0gICAgdmlydHVhbCBzaXplX3Qgd3Jp
dGVBcnJheVN0YXJ0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlQXJyYXlFbmQoc2l6ZV90KTsK
LSAgICB2aXJ0dWFsIHNpemVfdCB3cml0ZURpY3Rpb25hcnlTdGFydCgpOwotICAgIHZpcnR1YWwg
dm9pZCB3cml0ZURpY3Rpb25hcnlFbmQoc2l6ZV90KTsKLQotICAgIHZvaWQgd3JpdGVBcnJheU9i
amVjdChzaXplX3QpOwotICAgIHZvaWQgd3JpdGVEaWN0aW9uYXJ5T2JqZWN0KHNpemVfdCk7Ci0g
ICAgdm9pZCB3cml0ZVN0cmluZ09iamVjdChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHdyaXRl
U3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIqKTsKLQotICAgIHN0YXRpYyBPYmplY3RSZWZlcmVuY2Ug
aW52YWxpZE9iamVjdFJlZmVyZW5jZSgpIHsgcmV0dXJuIG51bWVyaWNfbGltaXRzPE9iamVjdFJl
ZmVyZW5jZT46Om1heCgpOyB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8SW50ZWdlckFycmF5LCBP
YmplY3RSZWZlcmVuY2UsIEludGVnZXJBcnJheUhhc2gsIEludGVnZXJBcnJheUhhc2hUcmFpdHM+
IEludGVnZXJBcnJheU1hcDsKLQotICAgIE9iamVjdFJlZmVyZW5jZSBtX2Jvb2xlYW5UcnVlT2Jq
ZWN0UmVmZXJlbmNlOwotICAgIE9iamVjdFJlZmVyZW5jZSBtX2ludGVnZXJaZXJvT2JqZWN0UmVm
ZXJlbmNlOwotICAgIEhhc2hNYXA8aW50LCBPYmplY3RSZWZlcmVuY2U+IG1faW50ZWdlcnM7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIE9iamVjdFJlZmVyZW5jZT4gbV9zdHJpbmdzOwotICAgIEludGVn
ZXJBcnJheU1hcCBtX2ludGVnZXJBcnJheXM7Ci0KLSAgICBPYmplY3RSZWZlcmVuY2UgbV9jdXJy
ZW50T2JqZWN0UmVmZXJlbmNlOwotCi0gICAgc2l6ZV90IG1fY3VycmVudEFnZ3JlZ2F0ZVNpemU7
Ci0KLSAgICBzaXplX3QgbV9ieXRlQ291bnQ7Ci0gICAgc2l6ZV90IG1fb2JqZWN0UmVmZXJlbmNl
Q291bnQ7Ci19OwotCi1CaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjpCaW5hcnlQcm9wZXJ0eUxpc3RQ
bGFuKEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlciYgY2xpZW50KQotICAgIDogbV9ib29sZWFuVHJ1
ZU9iamVjdFJlZmVyZW5jZShpbnZhbGlkT2JqZWN0UmVmZXJlbmNlKCkpCi0gICAgLCBtX2ludGVn
ZXJaZXJvT2JqZWN0UmVmZXJlbmNlKGludmFsaWRPYmplY3RSZWZlcmVuY2UoKSkKLSAgICAsIG1f
Y3VycmVudE9iamVjdFJlZmVyZW5jZSgwKQotICAgICwgbV9jdXJyZW50QWdncmVnYXRlU2l6ZSgw
KQotICAgICwgbV9ieXRlQ291bnQoMCkKLSAgICAsIG1fb2JqZWN0UmVmZXJlbmNlQ291bnQoMCkK
LXsKLSAgICBjbGllbnQud3JpdGVPYmplY3RzKCp0aGlzKTsKLSAgICBBU1NFUlQobV9jdXJyZW50
QWdncmVnYXRlU2l6ZSA9PSAxKTsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3
cml0ZUJvb2xlYW5UcnVlKCkKLXsKLSAgICArK21fY3VycmVudEFnZ3JlZ2F0ZVNpemU7Ci0gICAg
aWYgKG1fYm9vbGVhblRydWVPYmplY3RSZWZlcmVuY2UgIT0gaW52YWxpZE9iamVjdFJlZmVyZW5j
ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9ib29sZWFuVHJ1ZU9iamVjdFJlZmVyZW5jZSA9
IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsrOwotICAgICsrbV9ieXRlQ291bnQ7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgaW50IGludGVnZXJCeXRlQ291bnQoc2l6ZV90IGludGVnZXIpCi17Ci0gICAg
aWYgKGludGVnZXIgPD0gMHhGRikKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgaWYgKGludGVnZXIg
PD0gMHhGRkZGKQotICAgICAgICByZXR1cm4gMzsKLSNpZmRlZiBfX0xQNjRfXwotICAgIGlmIChp
bnRlZ2VyIDw9IDB4RkZGRkZGRkZVTEwpCi0gICAgICAgIHJldHVybiA1OwotICAgIHJldHVybiA5
OwotI2Vsc2UKLSAgICByZXR1cm4gNTsKLSNlbmRpZgotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5
TGlzdFBsYW46OndyaXRlSW50ZWdlcihpbnQgaW50ZWdlcikKLXsKLSAgICBBU1NFUlQoaW50ZWdl
ciA+PSAwKTsKLSAgICArK21fY3VycmVudEFnZ3JlZ2F0ZVNpemU7Ci0gICAgaWYgKCFpbnRlZ2Vy
KSB7Ci0gICAgICAgIGlmIChtX2ludGVnZXJaZXJvT2JqZWN0UmVmZXJlbmNlICE9IGludmFsaWRP
YmplY3RSZWZlcmVuY2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pbnRlZ2Vy
WmVyb09iamVjdFJlZmVyZW5jZSA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIW1faW50ZWdlcnMuYWRkKGludGVnZXIsIG1fY3VycmVudE9iamVj
dFJlZmVyZW5jZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
KyttX2N1cnJlbnRPYmplY3RSZWZlcmVuY2U7Ci0gICAgbV9ieXRlQ291bnQgKz0gaW50ZWdlckJ5
dGVDb3VudChpbnRlZ2VyKTsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0
ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICArK21fY3VycmVudEFnZ3JlZ2F0
ZVNpemU7Ci0gICAgaWYgKCFtX3N0cmluZ3MuYWRkKHN0cmluZywgbV9jdXJyZW50T2JqZWN0UmVm
ZXJlbmNlKS5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm47Ci0gICAgKyttX2N1cnJlbnRPYmpl
Y3RSZWZlcmVuY2U7Ci0gICAgd3JpdGVTdHJpbmdPYmplY3Qoc3RyaW5nKTsKLX0KLQotdm9pZCBC
aW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUludGVnZXJBcnJheShjb25zdCBpbnQqIGludGVn
ZXJzLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBzaXplX3Qgc2F2ZWRBZ2dyZWdhdGVTaXplID0gKytt
X2N1cnJlbnRBZ2dyZWdhdGVTaXplOwotICAgIEFTU0VSVChzaXplKTsKLSAgICBJbnRlZ2VyQXJy
YXlNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2ludGVnZXJBcnJheXMuYWRkKEludGVnZXJB
cnJheShpbnRlZ2Vycywgc2l6ZSksIDApOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgd3JpdGVJbnRlZ2VyKGludGVnZXJzW2ldKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKys7Ci0gICAgd3JpdGVBcnJheU9i
amVjdChzaXplKTsKLSAgICBtX2N1cnJlbnRBZ2dyZWdhdGVTaXplID0gc2F2ZWRBZ2dyZWdhdGVT
aXplOwotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlVW5pcXVlU3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgICsrbV9jdXJyZW50QWdncmVnYXRlU2l6ZTsK
LSAgICArK21fY3VycmVudE9iamVjdFJlZmVyZW5jZTsKLSAgICB3cml0ZVN0cmluZ09iamVjdChz
dHJpbmcpOwotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlVW5pcXVlU3Ry
aW5nKGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAgICArK21fY3VycmVudEFnZ3JlZ2F0ZVNpemU7
Ci0gICAgKyttX2N1cnJlbnRPYmplY3RSZWZlcmVuY2U7Ci0gICAgd3JpdGVTdHJpbmdPYmplY3Qo
c3RyaW5nKTsKLX0KLQotc2l6ZV90IEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlQXJyYXlT
dGFydCgpCi17Ci0gICAgc2l6ZV90IHNhdmVkQWdncmVnYXRlU2l6ZSA9IG1fY3VycmVudEFnZ3Jl
Z2F0ZVNpemU7Ci0gICAgbV9jdXJyZW50QWdncmVnYXRlU2l6ZSA9IDA7Ci0gICAgcmV0dXJuIHNh
dmVkQWdncmVnYXRlU2l6ZTsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0
ZUFycmF5RW5kKHNpemVfdCBzYXZlZEFnZ3JlZ2F0ZVNpemUpCi17Ci0gICAgKyttX2N1cnJlbnRP
YmplY3RSZWZlcmVuY2U7Ci0gICAgd3JpdGVBcnJheU9iamVjdChtX2N1cnJlbnRBZ2dyZWdhdGVT
aXplKTsKLSAgICBtX2N1cnJlbnRBZ2dyZWdhdGVTaXplID0gc2F2ZWRBZ2dyZWdhdGVTaXplICsg
MTsKLX0KLQotc2l6ZV90IEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlRGljdGlvbmFyeVN0
YXJ0KCkKLXsKLSAgICBzaXplX3Qgc2F2ZWRBZ2dyZWdhdGVTaXplID0gbV9jdXJyZW50QWdncmVn
YXRlU2l6ZTsKLSAgICBtX2N1cnJlbnRBZ2dyZWdhdGVTaXplID0gMDsKLSAgICByZXR1cm4gc2F2
ZWRBZ2dyZWdhdGVTaXplOwotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRl
RGljdGlvbmFyeUVuZChzaXplX3Qgc2F2ZWRBZ2dyZWdhdGVTaXplKQotewotICAgICsrbV9jdXJy
ZW50T2JqZWN0UmVmZXJlbmNlOwotICAgIHdyaXRlRGljdGlvbmFyeU9iamVjdChtX2N1cnJlbnRB
Z2dyZWdhdGVTaXplKTsKLSAgICBtX2N1cnJlbnRBZ2dyZWdhdGVTaXplID0gc2F2ZWRBZ2dyZWdh
dGVTaXplICsgMTsKLX0KLQotc3RhdGljIHNpemVfdCBtYXJrZXJQbHVzTGVuZ3RoQnl0ZUNvdW50
KHNpemVfdCBsZW5ndGgpCi17Ci0gICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGhJbk1hcmtlckJ5
dGUpCi0gICAgICAgIHJldHVybiAxOwotICAgIHJldHVybiAxICsgaW50ZWdlckJ5dGVDb3VudChs
ZW5ndGgpOwotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlU3RyaW5nT2Jq
ZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBtX2J5dGVDb3VudCArPSBtYXJrZXJQbHVzTGVuZ3RoQnl0ZUNvdW50
KGxlbmd0aCkgKyBsZW5ndGg7Ci0gICAgaWYgKCFzdHJpbmcuY29udGFpbnNPbmx5QVNDSUkoKSkK
LSAgICAgICAgbV9ieXRlQ291bnQgKz0gbGVuZ3RoOwotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5
TGlzdFBsYW46OndyaXRlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKLSAgICBtX2J5dGVDb3VudCArPSBtYXJr
ZXJQbHVzTGVuZ3RoQnl0ZUNvdW50KGxlbmd0aCkgKyBsZW5ndGg7Ci19Ci0KLXZvaWQgQmluYXJ5
UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVBcnJheU9iamVjdChzaXplX3Qgc2l6ZSkKLXsKLSAgICBB
U1NFUlQoc2l6ZSk7Ci0gICAgbV9ieXRlQ291bnQgKz0gbWFya2VyUGx1c0xlbmd0aEJ5dGVDb3Vu
dChzaXplKTsKLSAgICBtX29iamVjdFJlZmVyZW5jZUNvdW50ICs9IHNpemU7Ci19Ci0KLXZvaWQg
QmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVEaWN0aW9uYXJ5T2JqZWN0KHNpemVfdCBzaXpl
KQotewotICAgIEFTU0VSVChzaXplKTsKLSAgICBBU1NFUlQoIShzaXplICYgMSkpOwotICAgIG1f
Ynl0ZUNvdW50ICs9IG1hcmtlclBsdXNMZW5ndGhCeXRlQ291bnQoc2l6ZSAvIDIpOwotICAgIG1f
b2JqZWN0UmVmZXJlbmNlQ291bnQgKz0gc2l6ZTsKLX0KLQotT2JqZWN0UmVmZXJlbmNlIEJpbmFy
eVByb3BlcnR5TGlzdFBsYW46OmJvb2xlYW5UcnVlT2JqZWN0UmVmZXJlbmNlKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9ib29sZWFuVHJ1ZU9iamVjdFJlZmVyZW5jZSAhPSBpbnZhbGlkT2JqZWN0
UmVmZXJlbmNlKCkpOwotICAgIHJldHVybiBtX2Jvb2xlYW5UcnVlT2JqZWN0UmVmZXJlbmNlOwot
fQotCi1PYmplY3RSZWZlcmVuY2UgQmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6aW50ZWdlck9iamVj
dFJlZmVyZW5jZShpbnQgaW50ZWdlcikgY29uc3QKLXsKLSAgICBBU1NFUlQoaW50ZWdlciA+PSAw
KTsKLSAgICBpZiAoIWludGVnZXIpIHsKLSAgICAgICAgQVNTRVJUKG1faW50ZWdlclplcm9PYmpl
Y3RSZWZlcmVuY2UgIT0gaW52YWxpZE9iamVjdFJlZmVyZW5jZSgpKTsKLSAgICAgICAgcmV0dXJu
IG1faW50ZWdlclplcm9PYmplY3RSZWZlcmVuY2U7Ci0gICAgfQotICAgIEFTU0VSVChtX2ludGVn
ZXJzLmNvbnRhaW5zKGludGVnZXIpKTsKLSAgICByZXR1cm4gbV9pbnRlZ2Vycy5nZXQoaW50ZWdl
cik7Ci19Ci0KLU9iamVjdFJlZmVyZW5jZSBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjpzdHJpbmdP
YmplY3RSZWZlcmVuY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KG1fc3RyaW5ncy5jb250YWlucyhzdHJpbmcpKTsKLSAgICByZXR1cm4gbV9zdHJpbmdzLmdldChz
dHJpbmcpOwotfQotCi1PYmplY3RSZWZlcmVuY2UgQmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6aW50
ZWdlckFycmF5T2JqZWN0UmVmZXJlbmNlKGNvbnN0IGludCogaW50ZWdlcnMsIHNpemVfdCBzaXpl
KSBjb25zdAotewotICAgIEFTU0VSVChtX2ludGVnZXJBcnJheXMuY29udGFpbnMoSW50ZWdlckFy
cmF5KGludGVnZXJzLCBzaXplKSkpOwotICAgIHJldHVybiBtX2ludGVnZXJBcnJheXMuZ2V0KElu
dGVnZXJBcnJheShpbnRlZ2Vycywgc2l6ZSkpOwotfQotCi1jbGFzcyBCaW5hcnlQcm9wZXJ0eUxp
c3RTZXJpYWxpemVyIDogcHJpdmF0ZSBCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0gewot
cHVibGljOgotICAgIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXIoQmluYXJ5UHJvcGVydHlM
aXN0V3JpdGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlQm9vbGVhblRy
dWUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVJbnRlZ2VyKGludCk7Ci0gICAgdmlydHVhbCB2
b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUlu
dGVnZXJBcnJheShjb25zdCBpbnQqLCBzaXplX3QpOwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVu
aXF1ZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVbmlxdWVT
dHJpbmcoY29uc3QgY2hhciopOwotICAgIHZpcnR1YWwgc2l6ZV90IHdyaXRlQXJyYXlTdGFydCgp
OwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUFycmF5RW5kKHNpemVfdCk7Ci0gICAgdmlydHVhbCBz
aXplX3Qgd3JpdGVEaWN0aW9uYXJ5U3RhcnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEaWN0
aW9uYXJ5RW5kKHNpemVfdCk7Ci0KLSAgICBPYmplY3RSZWZlcmVuY2Ugd3JpdGVJbnRlZ2VyV2l0
aG91dEFkZGluZ0FnZ3JlZ2F0ZU9iamVjdFJlZmVyZW5jZShpbnQpOwotCi0gICAgdm9pZCBhcHBl
bmRJbnRlZ2VyT2JqZWN0KGludCk7Ci0gICAgdm9pZCBhcHBlbmRTdHJpbmdPYmplY3QoY29uc3Qg
U3RyaW5nJik7Ci0gICAgdm9pZCBhcHBlbmRTdHJpbmdPYmplY3QoY29uc3QgY2hhciopOwotICAg
IHZvaWQgYXBwZW5kSW50ZWdlckFycmF5T2JqZWN0KGNvbnN0IGludCosIHNpemVfdCk7Ci0KLSAg
ICB2b2lkIGFwcGVuZEJ5dGUodW5zaWduZWQgY2hhcik7Ci0gICAgdm9pZCBhcHBlbmRCeXRlKHVu
c2lnbmVkKTsKLSAgICB2b2lkIGFwcGVuZEJ5dGUodW5zaWduZWQgbG9uZyk7Ci0gICAgdm9pZCBh
cHBlbmRCeXRlKGludCk7Ci0KLSAgICB2b2lkIGFwcGVuZEludGVnZXIoc2l6ZV90KTsKLQotICAg
IHZvaWQgYXBwZW5kT2JqZWN0UmVmZXJlbmNlKE9iamVjdFJlZmVyZW5jZSk7Ci0KLSAgICB2b2lk
IGFkZEFnZ3JlZ2F0ZU9iamVjdFJlZmVyZW5jZShPYmplY3RSZWZlcmVuY2UpOwotCi0gICAgdm9p
ZCBzdGFydE9iamVjdCgpOwotCi0gICAgY29uc3QgQmluYXJ5UHJvcGVydHlMaXN0UGxhbiBtX3Bs
YW47Ci0gICAgY29uc3QgaW50IG1fb2JqZWN0UmVmZXJlbmNlU2l6ZTsKLSAgICBjb25zdCBzaXpl
X3QgbV9vZmZzZXRUYWJsZVN0YXJ0OwotICAgIGNvbnN0IGludCBtX29mZnNldFNpemU7Ci0gICAg
Y29uc3Qgc2l6ZV90IG1fYnVmZmVyU2l6ZTsKLSAgICBVSW50OCogY29uc3QgbV9idWZmZXI7Ci0K
LSAgICBVSW50OCogbV9jdXJyZW50Qnl0ZTsKLSAgICBPYmplY3RSZWZlcmVuY2UgbV9jdXJyZW50
T2JqZWN0UmVmZXJlbmNlOwotICAgIFVJbnQ4KiBtX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRl
OwotfTsKLQotaW5saW5lIHZvaWQgQmluYXJ5UHJvcGVydHlMaXN0U2VyaWFsaXplcjo6YXBwZW5k
Qnl0ZSh1bnNpZ25lZCBjaGFyIGJ5dGUpCi17Ci0gICAgKm1fY3VycmVudEJ5dGUrKyA9IGJ5dGU7
Ci0gICAgQVNTRVJUKG1fY3VycmVudEJ5dGUgPD0gbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0
ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OmFwcGVu
ZEJ5dGUodW5zaWduZWQgYnl0ZSkKLXsKLSAgICAqbV9jdXJyZW50Qnl0ZSsrID0gYnl0ZTsKLSAg
ICBBU1NFUlQobV9jdXJyZW50Qnl0ZSA8PSBtX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlKTsK
LX0KLQotaW5saW5lIHZvaWQgQmluYXJ5UHJvcGVydHlMaXN0U2VyaWFsaXplcjo6YXBwZW5kQnl0
ZSh1bnNpZ25lZCBsb25nIGJ5dGUpCi17Ci0gICAgKm1fY3VycmVudEJ5dGUrKyA9IGJ5dGU7Ci0g
ICAgQVNTRVJUKG1fY3VycmVudEJ5dGUgPD0gbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSk7
Ci19Ci0KLWlubGluZSB2b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OmFwcGVuZEJ5
dGUoaW50IGJ5dGUpCi17Ci0gICAgKm1fY3VycmVudEJ5dGUrKyA9IGJ5dGU7Ci0gICAgQVNTRVJU
KG1fY3VycmVudEJ5dGUgPD0gbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSk7Ci19Ci0KLXN0
YXRpYyBpbnQgYnl0ZXNOZWVkZWQoc2l6ZV90IGNvdW50KQotewotICAgIEFTU0VSVChjb3VudCk7
Ci0gICAgaW50IGJ5dGVzTmVlZGVkID0gMTsKLSAgICBmb3IgKHNpemVfdCBtYXNrID0gbnVtZXJp
Y19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgPDwgODsgY291bnQgJiBtYXNrOyBtYXNrIDw8PSA4KQot
ICAgICAgICArK2J5dGVzTmVlZGVkOwotICAgIHJldHVybiBieXRlc05lZWRlZDsKLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIHN0b3JlTGVuZ3RoKFVJbnQ4KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGxl
bmd0aCkKLXsKLSNpZmRlZiBfX0xQNjRfXwotICAgIGRlc3RpbmF0aW9uWzBdID0gbGVuZ3RoID4+
IDU2OwotICAgIGRlc3RpbmF0aW9uWzFdID0gbGVuZ3RoID4+IDQ4OwotICAgIGRlc3RpbmF0aW9u
WzJdID0gbGVuZ3RoID4+IDQwOwotICAgIGRlc3RpbmF0aW9uWzNdID0gbGVuZ3RoID4+IDMyOwot
I2Vsc2UKLSAgICBkZXN0aW5hdGlvblswXSA9IDA7Ci0gICAgZGVzdGluYXRpb25bMV0gPSAwOwot
ICAgIGRlc3RpbmF0aW9uWzJdID0gMDsKLSAgICBkZXN0aW5hdGlvblszXSA9IDA7Ci0jZW5kaWYK
LSAgICBkZXN0aW5hdGlvbls0XSA9IGxlbmd0aCA+PiAyNDsKLSAgICBkZXN0aW5hdGlvbls1XSA9
IGxlbmd0aCA+PiAxNjsKLSAgICBkZXN0aW5hdGlvbls2XSA9IGxlbmd0aCA+PiA4OwotICAgIGRl
c3RpbmF0aW9uWzddID0gbGVuZ3RoOwotfQotCi0vLyBMaWtlIG1lbW1vdmUsIGJ1dCByZXZlcnNl
cyB0aGUgYnl0ZXMuCi1zdGF0aWMgdm9pZCBtb3ZlQW5kUmV2ZXJzZUJ5dGVzKFVJbnQ4KiBkZXN0
aW5hdGlvbiwgY29uc3QgVUludDgqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBBU1NF
UlQobGVuZ3RoKTsKLSAgICBtZW1tb3ZlKGRlc3RpbmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7Ci0g
ICAgVUludDgqIHN0YXJ0ID0gZGVzdGluYXRpb247Ci0gICAgVUludDgqIGVuZCA9IGRlc3RpbmF0
aW9uICsgbGVuZ3RoOwotICAgIHdoaWxlIChlbmQgLSBzdGFydCA+IDEpCi0gICAgICAgIHN0ZDo6
c3dhcCgqc3RhcnQrKywgKi0tZW5kKTsKLX0KLQotLy8gVGhlIHNlcmlhbGl6ZXIgdXNlcyBhIHNp
bmdsZSBidWZmZXIgZm9yIHRoZSBwcm9wZXJ0eSBsaXN0LgotLy8gVGhlIGJ1ZmZlciBjb250YWlu
czoKLS8vCi0vLyAgICA4LWJ5dGUgaGVhZGVyCi0vLyAgICBvYmplY3QgZGF0YQotLy8gICAgb2Zm
c2V0IHRhYmxlCi0vLyAgICAzMi1ieXRlIHRyYWlsZXIKLS8vCi0vLyBXaGlsZSBzZXJpYWxpemlu
ZyBvYmplY3QsIHRoZSBvZmZzZXQgdGFibGUgZW50cnkgZm9yIGVhY2ggb2JqZWN0IGlzIHdyaXR0
ZW4ganVzdCBiZWZvcmUKLS8vIHRoZSBvYmplY3QgZGF0YSBmb3IgdGhhdCBvYmplY3QgaXMgd3Jp
dHRlbi4gQWdncmVnYXRlcywgYXJyYXlzIGFuZCBkaWN0aW9uYXJpZXMsIGFyZSBhCi0vLyBzcGVj
aWFsIGNhc2UuIFRoZSBvYmplY3RzIHRoYXQgZ28gaW50byBhbiBhZ2dyZWdhdGUgYXJlIHdyaXR0
ZW4gYmVmb3JlIHRoZSBhZ2dyZWdhdGUgaXMuCi0vLyBBcyBlYWNoIG9iamVjdCBpcyB3cml0dGVu
LCB0aGUgb2JqZWN0IHJlZmVyZW5jZSBpcyBwdXQgaW4gdGhlIGFnZ3JlZ2F0ZSBidWZmZXIuIFRo
ZW4sCi0vLyB3aGVuIHRoZSBhZ2dyZWdhdGUgaXMgd3JpdHRlbiwgdGhlIGFnZ3JlZ2F0ZSBidWZm
ZXIgaXMgY29waWVkIGludG8gcGxhY2UgaW4gdGhlIG9iamVjdAotLy8gZGF0YS4gRmluYWxseSwg
dGhlIGhlYWRlciBhbmQgdHJhaWxlciBhcmUgd3JpdHRlbi4KLS8vCi0vLyBUaGUgYWdncmVnYXRl
IGJ1ZmZlciBzaGFyZXMgc3BhY2Ugd2l0aCB0aGUgb2JqZWN0IGRhdGEsIGxpa2UgdGhpczoKLS8v
Ci0vLyAgICA4LWJ5dGUgaGVhZGVyCi0vLyAgICBvYmplY3QgZGF0YQotLy8gICAgPj4+IGFnZ3Jl
Z2F0ZSBidWZmZXIgPDw8Ci0vLyAgICBvZmZzZXQgdGFibGUKLS8vICAgIDMyLWJ5dGUgdHJhaWxl
cgotLy8KLS8vIFRvIG1ha2UgaXQgZWFzeSB0byBidWlsZCBpdCBpbmNyZW1lbnRhbGx5LCB0aGUg
YnVmZmVyIHN0YXJ0cyBhdCB0aGUgZW5kIG9mIHRoZSBvYmplY3QKLS8vIGRhdGEgc3BhY2UsIGFu
ZCBncm93cyBiYWNrd2FyZHMuIFdlJ3JlIGd1YXJhbnRlZWQgdGhlIGFnZ3JlZ2F0ZSBidWZmZXIg
d2lsbCBuZXZlciBjb2xsaWRlCi0vLyB3aXRoIHRoZSBvYmplY3QgZGF0YSBwb2ludGVyIGJlY2F1
c2Ugd2Uga25vdyB0aGF0IHRoZSBvYmplY3QgZGF0YSBpcyBjb3JyZWN0bHkgc2l6ZWQKLS8vIGJh
c2VkIG9uIG91ciBwbGFuLCBhbmQgYWxsIHRoZSBkYXRhIGluIHRoZSBhZ2dyZWdhdGUgYnVmZmVy
IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlCi0vLyBhY3R1YWwgYWdncmVnYXRlIG9iamVjdHM7
IGluIHRoZSB3b3JzdCBjYXNlIHRoZSBhZ2dyZWdhdGUgYnVmZmVyIHdpbGwgYWxyZWFkeSBiZSBp
bgotLy8gZXhhY3RseSB0aGUgcmlnaHQgcGxhY2UsIGJ1dCBiYWNrd2FyZHMuCi0KLUJpbmFyeVBy
b3BlcnR5TGlzdFNlcmlhbGl6ZXI6OkJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXIoQmluYXJ5
UHJvcGVydHlMaXN0V3JpdGVyJiBjbGllbnQpCi0gICAgOiBtX3BsYW4oY2xpZW50KQotICAgICwg
bV9vYmplY3RSZWZlcmVuY2VTaXplKGJ5dGVzTmVlZGVkKG1fcGxhbi5vYmplY3RDb3VudCgpKSkK
LSAgICAsIG1fb2Zmc2V0VGFibGVTdGFydChoZWFkZXJTaXplICsgbV9wbGFuLmJ5dGVDb3VudCgp
ICsgbV9wbGFuLm9iamVjdFJlZmVyZW5jZUNvdW50KCkgKiBtX29iamVjdFJlZmVyZW5jZVNpemUp
Ci0gICAgLCBtX29mZnNldFNpemUoYnl0ZXNOZWVkZWQobV9vZmZzZXRUYWJsZVN0YXJ0KSkKLSAg
ICAsIG1fYnVmZmVyU2l6ZShtX29mZnNldFRhYmxlU3RhcnQgKyBtX3BsYW4ub2JqZWN0Q291bnQo
KSAqIG1fb2Zmc2V0U2l6ZSArIHRyYWlsZXJTaXplKQotICAgICwgbV9idWZmZXIoY2xpZW50LmJ1
ZmZlcihtX2J1ZmZlclNpemUpKQotICAgICwgbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKDApCi17
Ci0gICAgQVNTRVJUKG1fb2JqZWN0UmVmZXJlbmNlU2l6ZSA+IDApOwotICAgIEFTU0VSVChtX29m
ZnNldFNpemUgPiAwKTsKLQotI2lmZGVmIF9fTFA2NF9fCi0gICAgQVNTRVJUKG1fb2JqZWN0UmVm
ZXJlbmNlU2l6ZSA8PSA4KTsKLSAgICBBU1NFUlQobV9vZmZzZXRTaXplIDw9IDgpOwotI2Vsc2UK
LSAgICBBU1NFUlQobV9vYmplY3RSZWZlcmVuY2VTaXplIDw9IDQpOwotICAgIEFTU0VSVChtX29m
ZnNldFNpemUgPD0gNCk7Ci0jZW5kaWYKLQotICAgIGlmICghbV9idWZmZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFdyaXRlIG9iamVjdHMgYW5kIG9mZnNldCB0YWJsZS4KLSAgICBtX2N1
cnJlbnRCeXRlID0gbV9idWZmZXIgKyBoZWFkZXJTaXplOwotICAgIG1fY3VycmVudEFnZ3JlZ2F0
ZUJ1ZmZlckJ5dGUgPSBtX2J1ZmZlciArIG1fb2Zmc2V0VGFibGVTdGFydDsKLSAgICBjbGllbnQu
d3JpdGVPYmplY3RzKCp0aGlzKTsKLSAgICBBU1NFUlQobV9jdXJyZW50T2JqZWN0UmVmZXJlbmNl
ID09IG1fcGxhbi5vYmplY3RDb3VudCgpKTsKLSAgICBBU1NFUlQobV9jdXJyZW50QWdncmVnYXRl
QnVmZmVyQnl0ZSA9PSBtX2J1ZmZlciArIG1fb2Zmc2V0VGFibGVTdGFydCk7Ci0gICAgQVNTRVJU
KG1fY3VycmVudEJ5dGUgPT0gbV9idWZmZXIgKyBtX29mZnNldFRhYmxlU3RhcnQpOwotCi0gICAg
Ly8gV3JpdGUgaGVhZGVyLgotICAgIG1lbWNweShtX2J1ZmZlciwgImJwbGlzdDAwIiwgaGVhZGVy
U2l6ZSk7Ci0KLSAgICAvLyBXcml0ZSB0cmFpbGVyLgotICAgIFVJbnQ4KiB0cmFpbGVyID0gbV9i
dWZmZXIgKyBtX2J1ZmZlclNpemUgLSB0cmFpbGVyU2l6ZTsKLSAgICBtZW1zZXQodHJhaWxlciwg
MCwgNik7Ci0gICAgdHJhaWxlcls2XSA9IG1fb2Zmc2V0U2l6ZTsKLSAgICB0cmFpbGVyWzddID0g
bV9vYmplY3RSZWZlcmVuY2VTaXplOwotICAgIHN0b3JlTGVuZ3RoKHRyYWlsZXIgKyA4LCBtX3Bs
YW4ub2JqZWN0Q291bnQoKSk7Ci0gICAgc3RvcmVMZW5ndGgodHJhaWxlciArIDE2LCBtX3BsYW4u
b2JqZWN0Q291bnQoKSAtIDEpOwotICAgIHN0b3JlTGVuZ3RoKHRyYWlsZXIgKyAyNCwgbV9vZmZz
ZXRUYWJsZVN0YXJ0KTsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3
cml0ZUJvb2xlYW5UcnVlKCkKLXsKLSAgICBPYmplY3RSZWZlcmVuY2UgcmVmZXJlbmNlID0gbV9w
bGFuLmJvb2xlYW5UcnVlT2JqZWN0UmVmZXJlbmNlKCk7Ci0gICAgaWYgKG1fY3VycmVudE9iamVj
dFJlZmVyZW5jZSAhPSByZWZlcmVuY2UpCi0gICAgICAgIEFTU0VSVChyZWZlcmVuY2UgPCBtX2N1
cnJlbnRPYmplY3RSZWZlcmVuY2UpOwotICAgIGVsc2UgewotICAgICAgICBzdGFydE9iamVjdCgp
OwotICAgICAgICBhcHBlbmRCeXRlKGJvb2xlYW5UcnVlTWFya2VyQnl0ZSk7Ci0gICAgfQotICAg
IGFkZEFnZ3JlZ2F0ZU9iamVjdFJlZmVyZW5jZShyZWZlcmVuY2UpOwotfQotCi1pbmxpbmUgT2Jq
ZWN0UmVmZXJlbmNlIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OndyaXRlSW50ZWdlcldp
dGhvdXRBZGRpbmdBZ2dyZWdhdGVPYmplY3RSZWZlcmVuY2UoaW50IGludGVnZXIpCi17Ci0gICAg
T2JqZWN0UmVmZXJlbmNlIHJlZmVyZW5jZSA9IG1fcGxhbi5pbnRlZ2VyT2JqZWN0UmVmZXJlbmNl
KGludGVnZXIpOwotICAgIGlmIChtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UgIT0gcmVmZXJlbmNl
KQotICAgICAgICBBU1NFUlQocmVmZXJlbmNlIDwgbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKTsK
LSAgICBlbHNlCi0gICAgICAgIGFwcGVuZEludGVnZXJPYmplY3QoaW50ZWdlcik7Ci0gICAgcmV0
dXJuIHJlZmVyZW5jZTsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3
cml0ZUludGVnZXIoaW50IGludGVnZXIpCi17Ci0gICAgYWRkQWdncmVnYXRlT2JqZWN0UmVmZXJl
bmNlKHdyaXRlSW50ZWdlcldpdGhvdXRBZGRpbmdBZ2dyZWdhdGVPYmplY3RSZWZlcmVuY2UoaW50
ZWdlcikpOwotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OndyaXRlU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIE9iamVjdFJlZmVyZW5jZSByZWZlcmVu
Y2UgPSBtX3BsYW4uc3RyaW5nT2JqZWN0UmVmZXJlbmNlKHN0cmluZyk7Ci0gICAgaWYgKG1fY3Vy
cmVudE9iamVjdFJlZmVyZW5jZSAhPSByZWZlcmVuY2UpCi0gICAgICAgIEFTU0VSVChyZWZlcmVu
Y2UgPCBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UpOwotICAgIGVsc2UKLSAgICAgICAgYXBwZW5k
U3RyaW5nT2JqZWN0KHN0cmluZyk7Ci0gICAgYWRkQWdncmVnYXRlT2JqZWN0UmVmZXJlbmNlKHJl
ZmVyZW5jZSk7Ci19Ci0KLXZvaWQgQmluYXJ5UHJvcGVydHlMaXN0U2VyaWFsaXplcjo6d3JpdGVJ
bnRlZ2VyQXJyYXkoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNpemUpCi17Ci0gICAgT2Jq
ZWN0UmVmZXJlbmNlIHJlZmVyZW5jZSA9IG1fcGxhbi5pbnRlZ2VyQXJyYXlPYmplY3RSZWZlcmVu
Y2UoaW50ZWdlcnMsIHNpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICB3cml0ZUludGVnZXJXaXRob3V0QWRkaW5nQWdncmVnYXRlT2JqZWN0UmVmZXJl
bmNlKGludGVnZXJzW2ldKTsKLSAgICBpZiAobV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlICE9IHJl
ZmVyZW5jZSkKLSAgICAgICAgQVNTRVJUKHJlZmVyZW5jZSA8IG1fY3VycmVudE9iamVjdFJlZmVy
ZW5jZSk7Ci0gICAgZWxzZQotICAgICAgICBhcHBlbmRJbnRlZ2VyQXJyYXlPYmplY3QoaW50ZWdl
cnMsIHNpemUpOwotICAgIGFkZEFnZ3JlZ2F0ZU9iamVjdFJlZmVyZW5jZShyZWZlcmVuY2UpOwot
fQotCi12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OndyaXRlVW5pcXVlU3RyaW5n
KGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAgICBhZGRBZ2dyZWdhdGVPYmplY3RSZWZlcmVuY2Uo
bV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKTsKLSAgICBhcHBlbmRTdHJpbmdPYmplY3Qoc3RyaW5n
KTsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3cml0ZVVuaXF1ZVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBhZGRBZ2dyZWdhdGVPYmplY3RSZWZl
cmVuY2UobV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKTsKLSAgICBhcHBlbmRTdHJpbmdPYmplY3Qo
c3RyaW5nKTsKLX0KLQotc2l6ZV90IEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OndyaXRl
QXJyYXlTdGFydCgpCi17Ci0gICAgcmV0dXJuIG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUg
LSBtX2J1ZmZlcjsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3cml0
ZUFycmF5RW5kKHNpemVfdCBzYXZlZEFnZ3JlZ2F0ZUJ1ZmZlck9mZnNldCkKLXsKLSAgICBPYmpl
Y3RSZWZlcmVuY2UgcmVmZXJlbmNlID0gbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlOwotICAgIHN0
YXJ0T2JqZWN0KCk7Ci0gICAgc2l6ZV90IGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudCA9IHNhdmVk
QWdncmVnYXRlQnVmZmVyT2Zmc2V0IC0gKG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgLSBt
X2J1ZmZlcik7Ci0gICAgQVNTRVJUKGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudCk7Ci0gICAgQVNT
RVJUKCEoYWdncmVnYXRlQnVmZmVyQnl0ZUNvdW50ICUgbV9vYmplY3RSZWZlcmVuY2VTaXplKSk7
Ci0gICAgc2l6ZV90IHNpemUgPSBhZ2dyZWdhdGVCdWZmZXJCeXRlQ291bnQgLyBtX29iamVjdFJl
ZmVyZW5jZVNpemU7Ci0gICAgaWYgKHNpemUgPD0gbWF4TGVuZ3RoSW5NYXJrZXJCeXRlKQotICAg
ICAgICBhcHBlbmRCeXRlKGFycmF5TWFya2VyQnl0ZSB8IHNpemUpOwotICAgIGVsc2UgewotICAg
ICAgICBhcHBlbmRCeXRlKGFycmF5V2l0aFNlcGFyYXRlTGVuZ3RoTWFya2VyQnl0ZSk7Ci0gICAg
ICAgIGFwcGVuZEludGVnZXIoc2l6ZSk7Ci0gICAgfQotICAgIG1fY3VycmVudEFnZ3JlZ2F0ZUJ1
ZmZlckJ5dGUgPSBtX2J1ZmZlciArIHNhdmVkQWdncmVnYXRlQnVmZmVyT2Zmc2V0OwotICAgIEFT
U0VSVChtX2N1cnJlbnRCeXRlIDw9IG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUpOwotICAg
IG1vdmVBbmRSZXZlcnNlQnl0ZXMobV9jdXJyZW50Qnl0ZSwgbV9jdXJyZW50QWdncmVnYXRlQnVm
ZmVyQnl0ZSAtIGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudCwgYWdncmVnYXRlQnVmZmVyQnl0ZUNv
dW50KTsKLSAgICBtX2N1cnJlbnRCeXRlICs9IGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudDsKLSAg
ICBBU1NFUlQobV9jdXJyZW50Qnl0ZSA8PSBtX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlKTsK
LSAgICBpZiAobV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlIDwgbV9wbGFuLm9iamVjdENvdW50KCkp
Ci0gICAgICAgIGFkZEFnZ3JlZ2F0ZU9iamVjdFJlZmVyZW5jZShyZWZlcmVuY2UpOwotICAgIGVs
c2UKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSA9PSBtX3BsYW4ub2Jq
ZWN0Q291bnQoKSk7Ci19Ci0KLXNpemVfdCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3
cml0ZURpY3Rpb25hcnlTdGFydCgpCi17Ci0gICAgcmV0dXJuIG1fY3VycmVudEFnZ3JlZ2F0ZUJ1
ZmZlckJ5dGUgLSBtX2J1ZmZlcjsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxp
emVyOjp3cml0ZURpY3Rpb25hcnlFbmQoc2l6ZV90IHNhdmVkQWdncmVnYXRlQnVmZmVyT2Zmc2V0
KQotewotICAgIE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2UgPSBtX2N1cnJlbnRPYmplY3RSZWZl
cmVuY2U7Ci0gICAgc3RhcnRPYmplY3QoKTsKLSAgICBzaXplX3QgYWdncmVnYXRlQnVmZmVyQnl0
ZUNvdW50ID0gc2F2ZWRBZ2dyZWdhdGVCdWZmZXJPZmZzZXQgLSAobV9jdXJyZW50QWdncmVnYXRl
QnVmZmVyQnl0ZSAtIG1fYnVmZmVyKTsKLSAgICBBU1NFUlQoYWdncmVnYXRlQnVmZmVyQnl0ZUNv
dW50KTsKLSAgICBBU1NFUlQoIShhZ2dyZWdhdGVCdWZmZXJCeXRlQ291bnQgJSAobV9vYmplY3RS
ZWZlcmVuY2VTaXplICogMikpKTsKLSAgICBzaXplX3Qgc2l6ZSA9IGFnZ3JlZ2F0ZUJ1ZmZlckJ5
dGVDb3VudCAvIChtX29iamVjdFJlZmVyZW5jZVNpemUgKiAyKTsKLSAgICBpZiAoc2l6ZSA8PSBt
YXhMZW5ndGhJbk1hcmtlckJ5dGUpCi0gICAgICAgIGFwcGVuZEJ5dGUoZGljdGlvbmFyeU1hcmtl
ckJ5dGUgfCBzaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXBwZW5kQnl0ZShkaWN0aW9uYXJ5
V2l0aFNlcGFyYXRlTGVuZ3RoTWFya2VyQnl0ZSk7Ci0gICAgICAgIGFwcGVuZEludGVnZXIoc2l6
ZSk7Ci0gICAgfQotICAgIG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgPSBtX2J1ZmZlciAr
IHNhdmVkQWdncmVnYXRlQnVmZmVyT2Zmc2V0OwotICAgIEFTU0VSVChtX2N1cnJlbnRCeXRlIDw9
IG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUpOwotICAgIG1vdmVBbmRSZXZlcnNlQnl0ZXMo
bV9jdXJyZW50Qnl0ZSwgbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSAtIGFnZ3JlZ2F0ZUJ1
ZmZlckJ5dGVDb3VudCwgYWdncmVnYXRlQnVmZmVyQnl0ZUNvdW50KTsKLSAgICBtX2N1cnJlbnRC
eXRlICs9IGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudDsKLSAgICBBU1NFUlQobV9jdXJyZW50Qnl0
ZSA8PSBtX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlKTsKLSAgICBpZiAobV9jdXJyZW50T2Jq
ZWN0UmVmZXJlbmNlICE9IG1fcGxhbi5vYmplY3RDb3VudCgpKQotICAgICAgICBhZGRBZ2dyZWdh
dGVPYmplY3RSZWZlcmVuY2UocmVmZXJlbmNlKTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVCht
X2N1cnJlbnRPYmplY3RSZWZlcmVuY2UgPT0gbV9wbGFuLm9iamVjdENvdW50KCkpOwotfQotCi12
b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OmFwcGVuZEludGVnZXJPYmplY3QoaW50
IGludGVnZXIpCi17Ci0gICAgc3RhcnRPYmplY3QoKTsKLSAgICBBU1NFUlQoaW50ZWdlciA+PSAw
KTsKLSAgICBhcHBlbmRJbnRlZ2VyKGludGVnZXIpOwotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5
TGlzdFNlcmlhbGl6ZXI6OmFwcGVuZEludGVnZXIoc2l6ZV90IGludGVnZXIpCi17Ci0gICAgaWYg
KGludGVnZXIgPD0gMHhGRikgewotICAgICAgICBhcHBlbmRCeXRlKG9uZUJ5dGVJbnRlZ2VyTWFy
a2VyQnl0ZSk7Ci0gICAgICAgIGFwcGVuZEJ5dGUoaW50ZWdlcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKGludGVnZXIgPD0gMHhGRkZGKSB7Ci0gICAgICAgIGFwcGVuZEJ5dGUo
dHdvQnl0ZUludGVnZXJNYXJrZXJCeXRlKTsKLSAgICAgICAgYXBwZW5kQnl0ZShpbnRlZ2VyID4+
IDgpOwotICAgICAgICBhcHBlbmRCeXRlKGludGVnZXIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2lmZGVmIF9fTFA2NF9fCi0gICAgaWYgKGludGVnZXIgPD0gMHhGRkZGRkZGRlVMTCkgewot
I2VuZGlmCi0gICAgICAgIGFwcGVuZEJ5dGUoZm91ckJ5dGVJbnRlZ2VyTWFya2VyQnl0ZSk7Ci0g
ICAgICAgIGFwcGVuZEJ5dGUoaW50ZWdlciA+PiAyNCk7Ci0gICAgICAgIGFwcGVuZEJ5dGUoaW50
ZWdlciA+PiAxNik7Ci0gICAgICAgIGFwcGVuZEJ5dGUoaW50ZWdlciA+PiA4KTsKLSAgICAgICAg
YXBwZW5kQnl0ZShpbnRlZ2VyKTsKLSNpZmRlZiBfX0xQNjRfXwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGFwcGVuZEJ5dGUoZWlnaHRCeXRlSW50ZWdlck1hcmtlckJ5dGUpOwotICAgIGFw
cGVuZEJ5dGUoaW50ZWdlciA+PiA1Nik7Ci0gICAgYXBwZW5kQnl0ZShpbnRlZ2VyID4+IDQ4KTsK
LSAgICBhcHBlbmRCeXRlKGludGVnZXIgPj4gNDApOwotICAgIGFwcGVuZEJ5dGUoaW50ZWdlciA+
PiAzMik7Ci0gICAgYXBwZW5kQnl0ZShpbnRlZ2VyID4+IDI0KTsKLSAgICBhcHBlbmRCeXRlKGlu
dGVnZXIgPj4gMTYpOwotICAgIGFwcGVuZEJ5dGUoaW50ZWdlciA+PiA4KTsKLSAgICBhcHBlbmRC
eXRlKGludGVnZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgQmluYXJ5UHJvcGVydHlMaXN0U2VyaWFs
aXplcjo6YXBwZW5kU3RyaW5nT2JqZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIHN0
YXJ0T2JqZWN0KCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFj
dGVycygpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBpZiAo
Y2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgaWYg
KGxlbmd0aCA8PSBtYXhMZW5ndGhJbk1hcmtlckJ5dGUpCi0gICAgICAgICAgICBhcHBlbmRCeXRl
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFzY2lpU3RyaW5nTWFya2VyQnl0ZSB8IGxlbmd0
aCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFwcGVuZEJ5dGUoYXNjaWlTdHJpbmdX
aXRoU2VwYXJhdGVMZW5ndGhNYXJrZXJCeXRlKTsKLSAgICAgICAgICAgIGFwcGVuZEludGVnZXIo
bGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBhcHBlbmRCeXRlKGNoYXJhY3RlcnNbaV0pOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChsZW5ndGggPD0gbWF4TGVuZ3RoSW5NYXJrZXJCeXRlKQotICAg
ICAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1bmljb2RlU3Ry
aW5nTWFya2VyQnl0ZSB8IGxlbmd0aCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFw
cGVuZEJ5dGUodW5pY29kZVN0cmluZ1dpdGhTZXBhcmF0ZUxlbmd0aE1hcmtlckJ5dGUpOwotICAg
ICAgICAgICAgYXBwZW5kSW50ZWdlcihsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgYXBwZW5kQnl0
ZShjaGFyYWN0ZXJzW2ldID4+IDgpOwotICAgICAgICAgICAgYXBwZW5kQnl0ZShjaGFyYWN0ZXJz
W2ldKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJp
YWxpemVyOjphcHBlbmRTdHJpbmdPYmplY3QoY29uc3QgY2hhciogc3RyaW5nKQotewotICAgIHN0
YXJ0T2JqZWN0KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7Ci0gICAg
aWYgKGxlbmd0aCA8PSBtYXhMZW5ndGhJbk1hcmtlckJ5dGUpCi0gICAgICAgIGFwcGVuZEJ5dGUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYXNjaWlTdHJpbmdNYXJrZXJCeXRlIHwgbGVuZ3Ro
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGFwcGVuZEJ5dGUoYXNjaWlTdHJpbmdXaXRoU2VwYXJh
dGVMZW5ndGhNYXJrZXJCeXRlKTsKLSAgICAgICAgYXBwZW5kSW50ZWdlcihsZW5ndGgpOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGFw
cGVuZEJ5dGUoc3RyaW5nW2ldKTsKLX0KLQotdm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxp
emVyOjphcHBlbmRJbnRlZ2VyQXJyYXlPYmplY3QoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90
IHNpemUpCi17Ci0gICAgc3RhcnRPYmplY3QoKTsKLSAgICBpZiAoc2l6ZSA8PSBtYXhMZW5ndGhJ
bk1hcmtlckJ5dGUpCi0gICAgICAgIGFwcGVuZEJ5dGUoYXJyYXlNYXJrZXJCeXRlIHwgc2l6ZSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGFwcGVuZEJ5dGUoYXJyYXlXaXRoU2VwYXJhdGVMZW5ndGhN
YXJrZXJCeXRlKTsKLSAgICAgICAgYXBwZW5kSW50ZWdlcihzaXplKTsKLSAgICB9Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgYXBwZW5kT2JqZWN0UmVm
ZXJlbmNlKG1fcGxhbi5pbnRlZ2VyT2JqZWN0UmVmZXJlbmNlKGludGVnZXJzW2ldKSk7Ci19Ci0K
LXZvaWQgQmluYXJ5UHJvcGVydHlMaXN0U2VyaWFsaXplcjo6YXBwZW5kT2JqZWN0UmVmZXJlbmNl
KE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2UpCi17Ci0gICAgc3dpdGNoIChtX29iamVjdFJlZmVy
ZW5jZVNpemUpIHsKLSNpZmRlZiBfX0xQNjRfXwotICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAg
ICBhcHBlbmRCeXRlKHJlZmVyZW5jZSA+PiA1Nik7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAg
ICAgIGFwcGVuZEJ5dGUocmVmZXJlbmNlID4+IDQ4KTsKLSAgICAgICAgY2FzZSA2OgotICAgICAg
ICAgICAgYXBwZW5kQnl0ZShyZWZlcmVuY2UgPj4gNDApOwotICAgICAgICBjYXNlIDU6Ci0gICAg
ICAgICAgICBhcHBlbmRCeXRlKHJlZmVyZW5jZSA+PiAzMik7Ci0jZW5kaWYKLSAgICAgICAgY2Fz
ZSA0OgotICAgICAgICAgICAgYXBwZW5kQnl0ZShyZWZlcmVuY2UgPj4gMjQpOwotICAgICAgICBj
YXNlIDM6Ci0gICAgICAgICAgICBhcHBlbmRCeXRlKHJlZmVyZW5jZSA+PiAxNik7Ci0gICAgICAg
IGNhc2UgMjoKLSAgICAgICAgICAgIGFwcGVuZEJ5dGUocmVmZXJlbmNlID4+IDgpOwotICAgICAg
ICBjYXNlIDE6Ci0gICAgICAgICAgICBhcHBlbmRCeXRlKHJlZmVyZW5jZSk7Ci0gICAgfQotfQot
Ci12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OnN0YXJ0T2JqZWN0KCkKLXsKLSAg
ICBPYmplY3RSZWZlcmVuY2UgcmVmZXJlbmNlID0gbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKys7
Ci0KLSAgICBzaXplX3Qgb2Zmc2V0ID0gbV9jdXJyZW50Qnl0ZSAtIG1fYnVmZmVyOwotCi0gICAg
VUludDgqIG9mZnNldFRhYmxlRW50cnkgPSBtX2J1ZmZlciArIG1fb2Zmc2V0VGFibGVTdGFydCAr
IHJlZmVyZW5jZSAqIG1fb2Zmc2V0U2l6ZSArIG1fb2Zmc2V0U2l6ZTsKLSAgICBzd2l0Y2ggKG1f
b2Zmc2V0U2l6ZSkgewotI2lmZGVmIF9fTFA2NF9fCi0gICAgICAgIGNhc2UgODoKLSAgICAgICAg
ICAgIG9mZnNldFRhYmxlRW50cnlbLThdID0gb2Zmc2V0ID4+IDU2OwotICAgICAgICBjYXNlIDc6
Ci0gICAgICAgICAgICBvZmZzZXRUYWJsZUVudHJ5Wy03XSA9IG9mZnNldCA+PiA0ODsKLSAgICAg
ICAgY2FzZSA2OgotICAgICAgICAgICAgb2Zmc2V0VGFibGVFbnRyeVstNl0gPSBvZmZzZXQgPj4g
NDA7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIG9mZnNldFRhYmxlRW50cnlbLTVdID0g
b2Zmc2V0ID4+IDMyOwotI2VuZGlmCi0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG9mZnNl
dFRhYmxlRW50cnlbLTRdID0gb2Zmc2V0ID4+IDI0OwotICAgICAgICBjYXNlIDM6Ci0gICAgICAg
ICAgICBvZmZzZXRUYWJsZUVudHJ5Wy0zXSA9IG9mZnNldCA+PiAxNjsKLSAgICAgICAgY2FzZSAy
OgotICAgICAgICAgICAgb2Zmc2V0VGFibGVFbnRyeVstMl0gPSBvZmZzZXQgPj4gODsKLSAgICAg
ICAgY2FzZSAxOgotICAgICAgICAgICAgb2Zmc2V0VGFibGVFbnRyeVstMV0gPSBvZmZzZXQ7Ci0g
ICAgfQotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OmFkZEFnZ3JlZ2F0
ZU9iamVjdFJlZmVyZW5jZShPYmplY3RSZWZlcmVuY2UgcmVmZXJlbmNlKQotewotICAgIHN3aXRj
aCAobV9vYmplY3RSZWZlcmVuY2VTaXplKSB7Ci0jaWZkZWYgX19MUDY0X18KLSAgICAgICAgY2Fz
ZSA4OgotICAgICAgICAgICAgKi0tbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSA9IHJlZmVy
ZW5jZSA+PiA1NjsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgKi0tbV9jdXJyZW50QWdn
cmVnYXRlQnVmZmVyQnl0ZSA9IHJlZmVyZW5jZSA+PiA0ODsKLSAgICAgICAgY2FzZSA2OgotICAg
ICAgICAgICAgKi0tbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSA9IHJlZmVyZW5jZSA+PiA0
MDsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgKi0tbV9jdXJyZW50QWdncmVnYXRlQnVm
ZmVyQnl0ZSA9IHJlZmVyZW5jZSA+PiAzMjsKLSNlbmRpZgotICAgICAgICBjYXNlIDQ6Ci0gICAg
ICAgICAgICAqLS1tX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlID0gcmVmZXJlbmNlID4+IDI0
OwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAqLS1tX2N1cnJlbnRBZ2dyZWdhdGVCdWZm
ZXJCeXRlID0gcmVmZXJlbmNlID4+IDE2OwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAq
LS1tX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlID0gcmVmZXJlbmNlID4+IDg7Ci0gICAgICAg
IGNhc2UgMToKLSAgICAgICAgICAgICotLW1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgPSBy
ZWZlcmVuY2U7Ci0gICAgfQotICAgIEFTU0VSVChtX2N1cnJlbnRCeXRlIDw9IG1fY3VycmVudEFn
Z3JlZ2F0ZUJ1ZmZlckJ5dGUpOwotfQotCi12b2lkIEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlcjo6
d3JpdGVQcm9wZXJ0eUxpc3QoKQotewotICAgIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXIg
c2VyaWFsaXplcigqdGhpcyk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvQmluYXJ5UHJvcGVydHlMaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhj
YmIyZTE1YTQ1OWE2NDgxZjA1M2IyODFmMDA4NDU4ZWM1YzcyZmYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Yv
QmluYXJ5UHJvcGVydHlMaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEJpbmFy
eVByb3BlcnR5TGlzdF9oCi0jZGVmaW5lIEJpbmFyeVByb3BlcnR5TGlzdF9oCi0KLSNpbmNsdWRl
IDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotCi0jaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ly8gV3JpdGVzIGEgbGltaXRlZCBzdWJzZXQgb2YgYmluYXJ5IHByb3BlcnR5IGxpc3RzLgotLy8g
Q292ZXJzIG9ubHkgd2hhdCdzIG5lZWRlZCBmb3Igd3JpdGluZyBicm93c2VyIGhpc3RvcnkgYXMg
b2YgdGhpcyB3cml0aW5nLgotY2xhc3MgQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtIHsK
LXB1YmxpYzoKLSAgICAvLyBDYWxsIHdyaXRlQm9vbGVhblRydWUgdG8gd3JpdGUgdGhlIGJvb2xl
YW4gdHJ1ZSB2YWx1ZS4KLSAgICAvLyBBIHNpbmdsZSBzaGFyZWQgb2JqZWN0IHdpbGwgYmUgdXNl
ZCBpbiB0aGUgc2VyaWFsaXplZCBsaXN0LgotICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJvb2xlYW5U
cnVlKCkgPSAwOwotCi0gICAgLy8gQ2FsbCB3cml0ZUludGVnZXIgdG8gd3JpdGUgYW4gaW50ZWdl
ciB2YWx1ZS4KLSAgICAvLyBBIHNpbmdsZSBzaGFyZWQgb2JqZWN0IHdpbGwgYmUgdXNlZCBmb3Ig
ZWFjaCBpbnRlZ2VyIGluIHRoZSBzZXJpYWxpemVkIGxpc3QuCi0gICAgdmlydHVhbCB2b2lkIHdy
aXRlSW50ZWdlcihpbnQpID0gMDsKLQotICAgIC8vIENhbGwgd3JpdGVTdHJpbmcgdG8gd3JpdGUg
YSBzdHJpbmcgdmFsdWUuCi0gICAgLy8gQSBzaW5nbGUgc2hhcmVkIG9iamVjdCB3aWxsIGJlIHVz
ZWQgZm9yIGVhY2ggc3RyaW5nIGluIHRoZSBzZXJpYWxpemVkIGxpc3QuCi0gICAgdmlydHVhbCB2
b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYpID0gMDsKLQotICAgIC8vIENhbGwgd3JpdGVV
bmlxdWVTdHJpbmcgaW5zdGVhZCBvZiB3cml0ZVN0cmluZyB3aGVuIGl0J3MgdW5saWtlbHkgdGhl
Ci0gICAgLy8gc3RyaW5nIHdpbGwgYmUgd3JpdHRlbiB0d2ljZSBpbiB0aGUgc2FtZSBwcm9wZXJ0
eSBsaXN0OyB0aGlzIHNhdmVzIGhhc2gKLSAgICAvLyB0YWJsZSBvdmVyaGVhZCBmb3Igc3VjaCBz
dHJpbmdzLiBBIHNlcGFyYXRlIG9iamVjdCB3aWxsIGJlIHVzZWQgZm9yIGVhY2gKLSAgICAvLyBv
ZiB0aGVzZSBzdHJpbmdzIGluIHRoZSBzZXJpYWxpemVkIGxpc3QuCi0gICAgdmlydHVhbCB2b2lk
IHdyaXRlVW5pcXVlU3RyaW5nKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVVbmlxdWVTdHJpbmcoY29uc3QgY2hhciopID0gMDsKLQotICAgIC8vIENhbGwgd3JpdGVJ
bnRlZ2VyQXJyYXkgaW5zdGVhZCBvZiB3cml0ZUFycmF5U3RhcnQvd3JpdGVBcnJheUVuZCBmb3IK
LSAgICAvLyBhcnJheXMgZW50aXJlbHkgY29tcG9zZWQgb2YgaW50ZWdlcnMuIEEgc2luZ2xlIHNo
YXJlZCBvYmplY3Qgd2lsbCBiZSB1c2VkCi0gICAgLy8gZm9yIGVhY2ggaWRlbnRpY2FsIGFycmF5
IGluIHRoZSBzZXJpYWxpemVkIGxpc3QuIFdhcm5pbmc6IFRoZSBpbnRlZ2VyCi0gICAgLy8gcG9p
bnRlciBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgd3JpdGVCaW5hcnlQcm9wZXJ0eUxpc3Qg
ZnVuY3Rpb24KLSAgICAvLyByZXR1cm5zLCBiZWNhdXNlIHRoZXNlIGxpc3RzIGFyZSBwdXQgaW50
byBhIGhhc2ggdGFibGUgd2l0aG91dCBjb3B5aW5nCi0gICAgLy8gdGhlbSAtLSB0aGF0J3MgT0sg
aWYgdGhlIGNsaWVudCBhbHJlYWR5IGhhcyBhIFZlY3RvcjxpbnQ+LgotICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZUludGVnZXJBcnJheShjb25zdCBpbnQqLCBzaXplX3QpID0gMDsKLQotICAgIC8vIEFm
dGVyIGNhbGxpbmcgd3JpdGVBcnJheVN0YXJ0LCB3cml0ZSBhcnJheSBlbGVtZW50cy4KLSAgICAv
LyBUaGVuIGNhbGwgd3JpdGVBcnJheUVuZCwgcGFzc2luZyBpbiB0aGUgcmVzdWx0IGZyb20gd3Jp
dGVBcnJheVN0YXJ0LgotICAgIC8vIEEgc2VwYXJhdGUgb2JqZWN0IHdpbGwgYmUgdXNlZCBmb3Ig
ZWFjaCBvZiB0aGVzZSBhcnJheXMgaW4gdGhlIHNlcmlhbGl6ZWQgbGlzdC4KLSAgICB2aXJ0dWFs
IHNpemVfdCB3cml0ZUFycmF5U3RhcnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlQXJy
YXlFbmQoc2l6ZV90IHJlc3VsdEZyb21Xcml0ZUFycmF5U3RhcnQpID0gMDsKLQotICAgIC8vIEFm
dGVyIGNhbGxpbmcgd3JpdGVEaWN0aW9uYXJ5U3RhcnQsIHdyaXRlIGFsbCBrZXlzLCB0aGVuIGFs
bCB2YWx1ZXMuCi0gICAgLy8gVGhlbiBjYWxsIHdyaXRlRGljdGlvbmFyeUVuZCwgcGFzc2luZyBp
biB0aGUgcmVzdWx0IGZyb20gd3JpdGVEaWN0aW9uYXJ5U3RhcnQuCi0gICAgLy8gQSBzZXBhcmF0
ZSBvYmplY3Qgd2lsbCBiZSB1c2VkIGZvciBlYWNoIGRpY3Rpb25hcnkgaW4gdGhlIHNlcmlhbGl6
ZWQgbGlzdC4KLSAgICB2aXJ0dWFsIHNpemVfdCB3cml0ZURpY3Rpb25hcnlTdGFydCgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEaWN0aW9uYXJ5RW5kKHNpemVfdCByZXN1bHRGcm9tV3Jp
dGVEaWN0aW9uYXJ5U3RhcnQpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkJpbmFy
eVByb3BlcnR5TGlzdE9iamVjdFN0cmVhbSgpIHsgfQotfTsKLQotY2xhc3MgQmluYXJ5UHJvcGVy
dHlMaXN0V3JpdGVyIHsKLXB1YmxpYzoKLSAgICAvLyBDYWxscyB3cml0ZU9iamVjdHMgb25jZSB0
byBwcmVwYXJlIGZvciB3cml0aW5nIGFuZCBkZXRlcm1pbmUgaG93IGJpZyBhCi0gICAgLy8gYnVm
ZmVyIGlzIHJlcXVpcmVkLiBUaGVuIGNhbGxzIGJ1ZmZlciB0byBnZXQgdGhlIGFwcHJvcHJpYXRl
bHktc2l6ZWQKLSAgICAvLyBidWZmZXIsIHRoZW4gY2FsbHMgd3JpdGVPYmplY3RzIGEgc2Vjb25k
IHRpbWUgYW5kIHdyaXRlcyB0aGUgcHJvcGVydHkgbGlzdC4KLSAgICB2b2lkIHdyaXRlUHJvcGVy
dHlMaXN0KCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5CaW5hcnlQcm9wZXJ0eUxpc3RX
cml0ZXIoKSB7IH0KLQotcHJpdmF0ZToKLSAgICAvLyBDYWxsZWQgYnkgd3JpdGVQcm9wZXJ0eUxp
c3QuCi0gICAgLy8gTXVzdCBjYWxsIHRoZSBvYmplY3Qgc3RyZWFtIGZ1bmN0aW9ucyBmb3IgdGhl
IG9iamVjdHMgdG8gYmUgd3JpdHRlbgotICAgIC8vIGludG8gdGhlIHByb3BlcnR5IGxpc3QuCi0g
ICAgdmlydHVhbCB2b2lkIHdyaXRlT2JqZWN0cyhCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJl
YW0mKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgYnkgd3JpdGVQcm9wZXJ0eUxpc3QuCi0gICAgLy8g
UmV0dXJucyB0aGUgYnVmZmVyIHRoYXQgdGhlIHdyaXRlciBzaG91bGQgd3JpdGUgaW50by4KLSAg
ICB2aXJ0dWFsIFVJbnQ4KiBidWZmZXIoc2l6ZV90KSA9IDA7Ci0KLSAgICBmcmllbmQgY2xhc3Mg
QmluYXJ5UHJvcGVydHlMaXN0UGxhbjsKLSAgICBmcmllbmQgY2xhc3MgQmluYXJ5UHJvcGVydHlM
aXN0U2VyaWFsaXplcjsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3NTA4OWQwNTA5ZDlmZjZkOGY1NzAw
ZjMzMzY4NmY5ODQ0MGFjMjVhLi4zNzljOWM0NTcyNGNjM2ExYzY4ZjAxMTc2YzA2ZjgzNzY0MDA0
N2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTI1LDYgKzI1LDEwIEBACiAJCTFBNERGNTIzMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJO
ZXRzY2FwZVBsdWdpblZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTRERjUyMTBFQzhDNzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItV25vLWRlcHJlY2F0ZWQt
ZGVjbGFyYXRpb25zIjsgfTsgfTsKIAkJMUE0REY1RTQwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBNERGNUUyMEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3LmggKi87IH07CiAJCTFBNERGNUU1MEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNl
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE0REY1RTMwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcubW0gKi87IH07CisJCTFBNjA1MTkxMTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQ
cm9wZXJ0eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE2MDUxOEQxNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3BlcnR5TGlzdC5jcHAg
Ki87IH07CisJCTFBNjA1MTkyMTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNjA1MThF
MTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3QuaCAqLzsgfTsKKwkJMUE2MDUx
OTMxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2MDUxOEYxNzUwMkE1RDAwQkM2
MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuY3BwICovOyB9OworCQkxQTYwNTE5NDE3NTAyQTVE
MDBCQzYyRjUgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2MDUxOTAxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3Rv
cnlQcm9wZXJ0eUxpc3QuaCAqLzsgfTsKIAkJMUE3NEEyOEUwRjRGNzU0MDAwODJFMjI4IC8qIFdl
YlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzRBMjhDMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5w
dXRXaW5kb3dDb250cm9sbGVyLmggKi87IH07CiAJCTFBNzRBMjhGMEY0Rjc1NDAwMDgyRTIyOCAv
KiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc0QTI4RDBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4
dElucHV0V2luZG93Q29udHJvbGxlci5tICovOyB9OwogCQkxQTc3QjAyRTBFRTc3MzA1MDBDOEEx
RjkgLyogV2ViUGx1Z2luUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE3N0IwMkMwRUU3NzMwNTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVl
c3QuaCAqLzsgfTsKQEAgLTM5OCw2ICs0MDIsMTAgQEAKIAkJMUE0REY1MjEwRUM4Qzc0RDAwNkJE
NEI0IC8qIFdlYk5ldHNjYXBlUGx1Z2luVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYk5ldHNjYXBlUGx1Z2luVmlldy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUE0REY1RTIwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRzY2Fw
ZVBsdWdpblZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQmFzZU5l
dHNjYXBlUGx1Z2luVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTRERjVF
MzBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkJhc2VOZXRzY2FwZVBsdWdpblZp
ZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNjA1MThEMTc1MDJBNUQwMEJD
NjJGNSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQmluYXJ5UHJvcGVydHlMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUE2MDUxOEUxNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3BlcnR5TGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaW5hcnlQcm9wZXJ0eUxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE2MDUxOEYxNzUwMkE1RDAwQkM2MkY1IC8q
IEhpc3RvcnlQcm9wZXJ0eUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGlzdG9yeVByb3BlcnR5TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNjA1MTkwMTc1MDJBNUQwMEJDNjJGNSAvKiBIaXN0b3J5UHJvcGVydHlMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhpc3RvcnlQcm9wZXJ0eUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3NEEyOEMwRjRGNzU0MDAwODJFMjI4IC8qIFdl
YlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTc0QTI4RDBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4dElucHV0V2luZG93
Q29udHJvbGxlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFdlYlRleHRJ
bnB1dFdpbmRvd0NvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3
N0IwMkMwRUU3NzMwNTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGx1Z2luUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTAxMCw2ICsxMDE4LDEwIEBACiAJCTI1QTgxNzY4MDFCNTQ3NEIwRUNB
MTQ5RSAvKiBIaXN0b3J5ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkxQTYwNTE4RDE3NTAyQTVEMDBCQzYyRjUgLyogQmluYXJ5UHJvcGVydHlMaXN0LmNw
cCAqLywKKwkJCQkxQTYwNTE4RTE3NTAyQTVEMDBCQzYyRjUgLyogQmluYXJ5UHJvcGVydHlMaXN0
LmggKi8sCisJCQkJMUE2MDUxOEYxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxp
c3QuY3BwICovLAorCQkJCTFBNjA1MTkwMTc1MDJBNUQwMEJDNjJGNSAvKiBIaXN0b3J5UHJvcGVy
dHlMaXN0LmggKi8sCiAJCQkJMzk0NDYwN0QwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkJhY2tGb3J3
YXJkTGlzdC5oICovLAogCQkJCTM5NDQ2MDdFMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJCYWNrRm9y
d2FyZExpc3QubW0gKi8sCiAJCQkJNTFDNzE0RkEwQjIwRjc5RjAwRTVFMzNDIC8qIFdlYkJhY2tG
b3J3YXJkTGlzdEludGVybmFsLmggKi8sCkBAIC0xNDA2LDYgKzE0MTgsNyBAQAogCQkJaXNhID0g
UEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owog
CQkJZmlsZXMgPSAoCisJCQkJMUE2MDUxOTIxNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3Bl
cnR5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNkEwODI0QkYwMTAwOERGMDM4IC8q
IENhcmJvblV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA2NTA4MjRCRjAxMDA4REYw
MzggLyogQ2FyYm9uV2luZG93QWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNjYw
ODI0QkYwMTAwOERGMDM4IC8qIENhcmJvbldpbmRvd0NvbnRlbnRWaWV3LmggaW4gSGVhZGVycyAq
LywKQEAgLTE2MDEsNiArMTYxNCw3IEBACiAJCQkJQzBCMUY3RUExMEFDOEUzMTAwQzkyNUQ5IC8q
IFdlYlNjcmlwdFdvcmxkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1REVGQzBCMTFE
NTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNURFRkMwQzExRDUzMzFDMDA4ODUyNzMgLyogV2ViU2VjdXJpdHlPcmlnaW5Qcml2
YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTYwNTE5NDE3NTAyQTVEMDBCQzYyRjUgLyogSGlz
dG9yeVByb3BlcnR5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNkM2OUUxMEI3NDNGNDAw
QjY4N0VEIC8qIFdlYlNlcmlhbGl6ZWRKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNjdE
RDdFNjEyNUU0NTI3MDA3QkRDQjggLyogV2ViU2VyaWFsaXplZEpTVmFsdWVQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzQUUxNUQ1MDEyREJERUQ0MDA5MzIzQzggLyogV2ViU3RvcmFnZU1h
bmFnZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODk3LDYgKzE5MTEsNyBAQAogCQkJ
CTkzOTgxMEYxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0QkY5OUY5MTBBRTA1MEJDMDA4MTVDMkIgLyogV2ViRWRpdG9y
Q2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJREQ4OTY4MjEwOUFBODcyNDAwOTdFN0YwIC8q
IFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUE2MDUxOTExNzUw
MkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3BlcnR5TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5Mzk4MTBGQzA4MjRCRjAxMDA4REYwMzggLyogV2ViRm9ybURlbGVnYXRlLm0gaW4gU291cmNl
cyAqLywKIAkJCQk3QzAxQ0I4NjE3MzQzNUM5MDBDNUQ4MDcgLyogUG9wdXBNZW51TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRjIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lLm1t
IGluIFNvdXJjZXMgKi8sCkBAIC0xOTgyLDYgKzE5OTcsNyBAQAogCQkJCTdFNkZFRjA5MDg5ODVB
NzIwMEM0NEMzRiAvKiBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzAxNjdCRjkwRDdGNUREMDAwMjg2OTZFIC8qIFdlYlNjcmlwdERlYnVnZ2VyLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzBCMUY3RTkxMEFDOEUzMTAwQzkyNUQ5IC8qIFdlYlNjcmlwdFdvcmxk
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUE2MDUxOTMxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3Rv
cnlQcm9wZXJ0eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVERUZDMEExMUQ1MzMxQzAw
ODg1MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyNkM2
QTUxMEI3NDQ3QTAwQjY4N0VEIC8qIFdlYlNlcmlhbGl6ZWRKU1ZhbHVlLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJM0FCMDJBRjYxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1t
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L0Jp
bmFyeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L0JpbmFyeVBy
b3BlcnR5TGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk5YWZhYTkyNGZmMGYyM2Q4NjBlZDcxNmRhNmVm
NTdkYmEyZTZjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3Rvcnkv
QmluYXJ5UHJvcGVydHlMaXN0LmNwcApAQCAtMCwwICsxLDgyNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiQmluYXJ5UHJvcGVydHlM
aXN0LmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworc3RhdGljIGNvbnN0IHNpemVfdCBoZWFkZXJTaXpl
ID0gODsKK3N0YXRpYyBjb25zdCBzaXplX3QgdHJhaWxlclNpemUgPSAzMjsKKworc3RhdGljIGNv
bnN0IFVJbnQ4IGJvb2xlYW5UcnVlTWFya2VyQnl0ZSA9IDB4MDk7CitzdGF0aWMgY29uc3QgVUlu
dDggb25lQnl0ZUludGVnZXJNYXJrZXJCeXRlID0gMHgxMDsKK3N0YXRpYyBjb25zdCBVSW50OCB0
d29CeXRlSW50ZWdlck1hcmtlckJ5dGUgPSAweDExOworc3RhdGljIGNvbnN0IFVJbnQ4IGZvdXJC
eXRlSW50ZWdlck1hcmtlckJ5dGUgPSAweDEyOworc3RhdGljIGNvbnN0IFVJbnQ4IGVpZ2h0Qnl0
ZUludGVnZXJNYXJrZXJCeXRlID0gMHgxMzsKK3N0YXRpYyBjb25zdCBVSW50OCBhc2NpaVN0cmlu
Z01hcmtlckJ5dGUgPSAweDUwOworc3RhdGljIGNvbnN0IFVJbnQ4IGFzY2lpU3RyaW5nV2l0aFNl
cGFyYXRlTGVuZ3RoTWFya2VyQnl0ZSA9IDB4NUY7CitzdGF0aWMgY29uc3QgVUludDggdW5pY29k
ZVN0cmluZ01hcmtlckJ5dGUgPSAweDYwOworc3RhdGljIGNvbnN0IFVJbnQ4IHVuaWNvZGVTdHJp
bmdXaXRoU2VwYXJhdGVMZW5ndGhNYXJrZXJCeXRlID0gMHg2RjsKK3N0YXRpYyBjb25zdCBVSW50
OCBhcnJheU1hcmtlckJ5dGUgPSAweEEwOworc3RhdGljIGNvbnN0IFVJbnQ4IGFycmF5V2l0aFNl
cGFyYXRlTGVuZ3RoTWFya2VyQnl0ZSA9IDB4QUY7CitzdGF0aWMgY29uc3QgVUludDggZGljdGlv
bmFyeU1hcmtlckJ5dGUgPSAweEQwOworc3RhdGljIGNvbnN0IFVJbnQ4IGRpY3Rpb25hcnlXaXRo
U2VwYXJhdGVMZW5ndGhNYXJrZXJCeXRlID0gMHhERjsKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4
TGVuZ3RoSW5NYXJrZXJCeXRlID0gMHhFOworCitjbGFzcyBJbnRlZ2VyQXJyYXkgeworcHVibGlj
OgorICAgIEludGVnZXJBcnJheSgpIDogbV9pbnRlZ2VycygwKSwgbV9zaXplKDApIHsgfQorICAg
IEludGVnZXJBcnJheShjb25zdCBpbnQqIGludGVnZXJzLCBzaXplX3Qgc2l6ZSkgOiBtX2ludGVn
ZXJzKGludGVnZXJzKSwgbV9zaXplKHNpemUpIHsgQVNTRVJUKGludGVnZXJzKTsgQVNTRVJUKHNp
emUpOyB9CisKKyAgICB2b2lkIG1hcmtEZWxldGVkKCkgeyBtX2ludGVnZXJzID0gMDsgbV9zaXpl
ID0gZGVsZXRlZFZhbHVlU2l6ZSgpOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZSA9PSBkZWxldGVkVmFsdWVTaXplKCk7IH0KKworICAgIGNvbnN0IGlu
dCogaW50ZWdlcnMoKSBjb25zdCB7IEFTU0VSVCghaXNEZWxldGVkVmFsdWUoKSk7IHJldHVybiBt
X2ludGVnZXJzOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IEFTU0VSVCghaXNEZWxldGVk
VmFsdWUoKSk7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgc2l6ZV90
IGRlbGV0ZWRWYWx1ZVNpemUoKSB7IHJldHVybiBudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KTsgfQorCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlZ2VyQXJyYXkmLCBj
b25zdCBJbnRlZ2VyQXJyYXkmKTsKKworICAgIGNvbnN0IGludCogbV9pbnRlZ2VyczsKKyAgICBz
aXplX3QgbV9zaXplOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlZ2Vy
QXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYgYikKK3sKKyAgICByZXR1cm4gYS5tX2ludGVn
ZXJzID09IGIubV9pbnRlZ2VycyAmJiAgYS5tX3NpemUgPT0gYi5tX3NpemU7Cit9CisKK3N0cnVj
dCBJbnRlZ2VyQXJyYXlIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxJbnRlZ2Vy
QXJyYXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7
CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEludGVnZXJBcnJheSYgc2xv
dCkgeyBzbG90Lm1hcmtEZWxldGVkKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShjb25zdCBJbnRlZ2VyQXJyYXkmIGFycmF5KSB7IHJldHVybiBhcnJheS5pc0RlbGV0ZWRWYWx1
ZSgpOyB9Cit9OworCitzdHJ1Y3QgSW50ZWdlckFycmF5SGFzaCB7CisgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgSW50ZWdlckFycmF5Jik7CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgSW50ZWdlckFycmF5JiwgY29uc3QgSW50ZWdlckFycmF5Jik7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordW5zaWdu
ZWQgSW50ZWdlckFycmF5SGFzaDo6aGFzaChjb25zdCBJbnRlZ2VyQXJyYXkmIGFycmF5KQorewor
ICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoYXJyYXkuaW50ZWdlcnMoKSwgYXJy
YXkuc2l6ZSgpICogc2l6ZW9mKGludCkpOworfQorCitib29sIEludGVnZXJBcnJheUhhc2g6OmVx
dWFsKGNvbnN0IEludGVnZXJBcnJheSYgYSwgY29uc3QgSW50ZWdlckFycmF5JiBiKQoreworICAg
IGlmIChhLmlzRGVsZXRlZFZhbHVlKCkgfHwgYi5pc0RlbGV0ZWRWYWx1ZSgpKQorICAgICAgICBy
ZXR1cm4gYS5pc0RlbGV0ZWRWYWx1ZSgpID09IGIuaXNEZWxldGVkVmFsdWUoKTsKKyAgICBpZiAo
YS5zaXplKCkgIT0gYi5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGEuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGEuaW50ZWdlcnMo
KVtpXSAhPSBiLmludGVnZXJzKClbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit0eXBlZGVmIHNpemVfdCBPYmplY3RSZWZlcmVuY2U7
CisKK2NsYXNzIEJpbmFyeVByb3BlcnR5TGlzdFBsYW4gOiBwcml2YXRlIEJpbmFyeVByb3BlcnR5
TGlzdE9iamVjdFN0cmVhbSB7CitwdWJsaWM6CisgICAgQmluYXJ5UHJvcGVydHlMaXN0UGxhbihC
aW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXImKTsKKworICAgIE9iamVjdFJlZmVyZW5jZSBib29sZWFu
VHJ1ZU9iamVjdFJlZmVyZW5jZSgpIGNvbnN0OworICAgIE9iamVjdFJlZmVyZW5jZSBpbnRlZ2Vy
T2JqZWN0UmVmZXJlbmNlKGludCkgY29uc3Q7CisgICAgT2JqZWN0UmVmZXJlbmNlIHN0cmluZ09i
amVjdFJlZmVyZW5jZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBPYmplY3RSZWZlcmVuY2Ug
aW50ZWdlckFycmF5T2JqZWN0UmVmZXJlbmNlKGNvbnN0IGludCosIHNpemVfdCkgY29uc3Q7CisK
KyAgICBPYmplY3RSZWZlcmVuY2Ugb2JqZWN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRPYmplY3RSZWZlcmVuY2U7IH0KKworICAgIE9iamVjdFJlZmVyZW5jZSBieXRlQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVDb3VudDsgfQorICAgIE9iamVjdFJlZmVyZW5jZSBvYmplY3RS
ZWZlcmVuY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0UmVmZXJlbmNlQ291bnQ7IH0K
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCb29sZWFuVHJ1ZSgpOworICAgIHZp
cnR1YWwgdm9pZCB3cml0ZUludGVnZXIoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVTdHJp
bmcoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSW50ZWdlckFycmF5KGNv
bnN0IGludCosIHNpemVfdCk7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlVW5pcXVlU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVuaXF1ZVN0cmluZyhjb25zdCBj
aGFyKik7CisgICAgdmlydHVhbCBzaXplX3Qgd3JpdGVBcnJheVN0YXJ0KCk7CisgICAgdmlydHVh
bCB2b2lkIHdyaXRlQXJyYXlFbmQoc2l6ZV90KTsKKyAgICB2aXJ0dWFsIHNpemVfdCB3cml0ZURp
Y3Rpb25hcnlTdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZURpY3Rpb25hcnlFbmQoc2l6
ZV90KTsKKworICAgIHZvaWQgd3JpdGVBcnJheU9iamVjdChzaXplX3QpOworICAgIHZvaWQgd3Jp
dGVEaWN0aW9uYXJ5T2JqZWN0KHNpemVfdCk7CisgICAgdm9pZCB3cml0ZVN0cmluZ09iamVjdChj
b25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHdyaXRlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIqKTsK
KworICAgIHN0YXRpYyBPYmplY3RSZWZlcmVuY2UgaW52YWxpZE9iamVjdFJlZmVyZW5jZSgpIHsg
cmV0dXJuIG51bWVyaWNfbGltaXRzPE9iamVjdFJlZmVyZW5jZT46Om1heCgpOyB9CisKKyAgICB0
eXBlZGVmIEhhc2hNYXA8SW50ZWdlckFycmF5LCBPYmplY3RSZWZlcmVuY2UsIEludGVnZXJBcnJh
eUhhc2gsIEludGVnZXJBcnJheUhhc2hUcmFpdHM+IEludGVnZXJBcnJheU1hcDsKKworICAgIE9i
amVjdFJlZmVyZW5jZSBtX2Jvb2xlYW5UcnVlT2JqZWN0UmVmZXJlbmNlOworICAgIE9iamVjdFJl
ZmVyZW5jZSBtX2ludGVnZXJaZXJvT2JqZWN0UmVmZXJlbmNlOworICAgIEhhc2hNYXA8aW50LCBP
YmplY3RSZWZlcmVuY2U+IG1faW50ZWdlcnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIE9iamVjdFJl
ZmVyZW5jZT4gbV9zdHJpbmdzOworICAgIEludGVnZXJBcnJheU1hcCBtX2ludGVnZXJBcnJheXM7
CisKKyAgICBPYmplY3RSZWZlcmVuY2UgbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlOworCisgICAg
c2l6ZV90IG1fY3VycmVudEFnZ3JlZ2F0ZVNpemU7CisKKyAgICBzaXplX3QgbV9ieXRlQ291bnQ7
CisgICAgc2l6ZV90IG1fb2JqZWN0UmVmZXJlbmNlQ291bnQ7Cit9OworCitCaW5hcnlQcm9wZXJ0
eUxpc3RQbGFuOjpCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuKEJpbmFyeVByb3BlcnR5TGlzdFdyaXRl
ciYgY2xpZW50KQorICAgIDogbV9ib29sZWFuVHJ1ZU9iamVjdFJlZmVyZW5jZShpbnZhbGlkT2Jq
ZWN0UmVmZXJlbmNlKCkpCisgICAgLCBtX2ludGVnZXJaZXJvT2JqZWN0UmVmZXJlbmNlKGludmFs
aWRPYmplY3RSZWZlcmVuY2UoKSkKKyAgICAsIG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSgwKQor
ICAgICwgbV9jdXJyZW50QWdncmVnYXRlU2l6ZSgwKQorICAgICwgbV9ieXRlQ291bnQoMCkKKyAg
ICAsIG1fb2JqZWN0UmVmZXJlbmNlQ291bnQoMCkKK3sKKyAgICBjbGllbnQud3JpdGVPYmplY3Rz
KCp0aGlzKTsKKyAgICBBU1NFUlQobV9jdXJyZW50QWdncmVnYXRlU2l6ZSA9PSAxKTsKK30KKwor
dm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUJvb2xlYW5UcnVlKCkKK3sKKyAgICAr
K21fY3VycmVudEFnZ3JlZ2F0ZVNpemU7CisgICAgaWYgKG1fYm9vbGVhblRydWVPYmplY3RSZWZl
cmVuY2UgIT0gaW52YWxpZE9iamVjdFJlZmVyZW5jZSgpKQorICAgICAgICByZXR1cm47CisgICAg
bV9ib29sZWFuVHJ1ZU9iamVjdFJlZmVyZW5jZSA9IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSsr
OworICAgICsrbV9ieXRlQ291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGludGVnZXJCeXRl
Q291bnQoc2l6ZV90IGludGVnZXIpCit7CisgICAgaWYgKGludGVnZXIgPD0gMHhGRikKKyAgICAg
ICAgcmV0dXJuIDI7CisgICAgaWYgKGludGVnZXIgPD0gMHhGRkZGKQorICAgICAgICByZXR1cm4g
MzsKKyNpZmRlZiBfX0xQNjRfXworICAgIGlmIChpbnRlZ2VyIDw9IDB4RkZGRkZGRkZVTEwpCisg
ICAgICAgIHJldHVybiA1OworICAgIHJldHVybiA5OworI2Vsc2UKKyAgICByZXR1cm4gNTsKKyNl
bmRpZgorfQorCit2b2lkIEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlSW50ZWdlcihpbnQg
aW50ZWdlcikKK3sKKyAgICBBU1NFUlQoaW50ZWdlciA+PSAwKTsKKyAgICArK21fY3VycmVudEFn
Z3JlZ2F0ZVNpemU7CisgICAgaWYgKCFpbnRlZ2VyKSB7CisgICAgICAgIGlmIChtX2ludGVnZXJa
ZXJvT2JqZWN0UmVmZXJlbmNlICE9IGludmFsaWRPYmplY3RSZWZlcmVuY2UoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9pbnRlZ2VyWmVyb09iamVjdFJlZmVyZW5jZSA9IG1fY3Vy
cmVudE9iamVjdFJlZmVyZW5jZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1faW50ZWdl
cnMuYWRkKGludGVnZXIsIG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSkuaXNOZXdFbnRyeSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgKyttX2N1cnJlbnRPYmplY3RSZWZlcmVuY2U7
CisgICAgbV9ieXRlQ291bnQgKz0gaW50ZWdlckJ5dGVDb3VudChpbnRlZ2VyKTsKK30KKwordm9p
ZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK3sKKyAgICArK21fY3VycmVudEFnZ3JlZ2F0ZVNpemU7CisgICAgaWYgKCFtX3N0cmluZ3Mu
YWRkKHN0cmluZywgbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKS5pc05ld0VudHJ5KQorICAgICAg
ICByZXR1cm47CisgICAgKyttX2N1cnJlbnRPYmplY3RSZWZlcmVuY2U7CisgICAgd3JpdGVTdHJp
bmdPYmplY3Qoc3RyaW5nKTsKK30KKwordm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0
ZUludGVnZXJBcnJheShjb25zdCBpbnQqIGludGVnZXJzLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBz
aXplX3Qgc2F2ZWRBZ2dyZWdhdGVTaXplID0gKyttX2N1cnJlbnRBZ2dyZWdhdGVTaXplOworICAg
IEFTU0VSVChzaXplKTsKKyAgICBJbnRlZ2VyQXJyYXlNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBtX2ludGVnZXJBcnJheXMuYWRkKEludGVnZXJBcnJheShpbnRlZ2Vycywgc2l6ZSksIDApOwor
ICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgd3JpdGVJbnRlZ2VyKGludGVn
ZXJzW2ldKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbV9jdXJyZW50T2JqZWN0
UmVmZXJlbmNlKys7CisgICAgd3JpdGVBcnJheU9iamVjdChzaXplKTsKKyAgICBtX2N1cnJlbnRB
Z2dyZWdhdGVTaXplID0gc2F2ZWRBZ2dyZWdhdGVTaXplOworfQorCit2b2lkIEJpbmFyeVByb3Bl
cnR5TGlzdFBsYW46OndyaXRlVW5pcXVlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorewor
ICAgICsrbV9jdXJyZW50QWdncmVnYXRlU2l6ZTsKKyAgICArK21fY3VycmVudE9iamVjdFJlZmVy
ZW5jZTsKKyAgICB3cml0ZVN0cmluZ09iamVjdChzdHJpbmcpOworfQorCit2b2lkIEJpbmFyeVBy
b3BlcnR5TGlzdFBsYW46OndyaXRlVW5pcXVlU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKK3sK
KyAgICArK21fY3VycmVudEFnZ3JlZ2F0ZVNpemU7CisgICAgKyttX2N1cnJlbnRPYmplY3RSZWZl
cmVuY2U7CisgICAgd3JpdGVTdHJpbmdPYmplY3Qoc3RyaW5nKTsKK30KKworc2l6ZV90IEJpbmFy
eVByb3BlcnR5TGlzdFBsYW46OndyaXRlQXJyYXlTdGFydCgpCit7CisgICAgc2l6ZV90IHNhdmVk
QWdncmVnYXRlU2l6ZSA9IG1fY3VycmVudEFnZ3JlZ2F0ZVNpemU7CisgICAgbV9jdXJyZW50QWdn
cmVnYXRlU2l6ZSA9IDA7CisgICAgcmV0dXJuIHNhdmVkQWdncmVnYXRlU2l6ZTsKK30KKwordm9p
ZCBCaW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjp3cml0ZUFycmF5RW5kKHNpemVfdCBzYXZlZEFnZ3Jl
Z2F0ZVNpemUpCit7CisgICAgKyttX2N1cnJlbnRPYmplY3RSZWZlcmVuY2U7CisgICAgd3JpdGVB
cnJheU9iamVjdChtX2N1cnJlbnRBZ2dyZWdhdGVTaXplKTsKKyAgICBtX2N1cnJlbnRBZ2dyZWdh
dGVTaXplID0gc2F2ZWRBZ2dyZWdhdGVTaXplICsgMTsKK30KKworc2l6ZV90IEJpbmFyeVByb3Bl
cnR5TGlzdFBsYW46OndyaXRlRGljdGlvbmFyeVN0YXJ0KCkKK3sKKyAgICBzaXplX3Qgc2F2ZWRB
Z2dyZWdhdGVTaXplID0gbV9jdXJyZW50QWdncmVnYXRlU2l6ZTsKKyAgICBtX2N1cnJlbnRBZ2dy
ZWdhdGVTaXplID0gMDsKKyAgICByZXR1cm4gc2F2ZWRBZ2dyZWdhdGVTaXplOworfQorCit2b2lk
IEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlRGljdGlvbmFyeUVuZChzaXplX3Qgc2F2ZWRB
Z2dyZWdhdGVTaXplKQoreworICAgICsrbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlOworICAgIHdy
aXRlRGljdGlvbmFyeU9iamVjdChtX2N1cnJlbnRBZ2dyZWdhdGVTaXplKTsKKyAgICBtX2N1cnJl
bnRBZ2dyZWdhdGVTaXplID0gc2F2ZWRBZ2dyZWdhdGVTaXplICsgMTsKK30KKworc3RhdGljIHNp
emVfdCBtYXJrZXJQbHVzTGVuZ3RoQnl0ZUNvdW50KHNpemVfdCBsZW5ndGgpCit7CisgICAgaWYg
KGxlbmd0aCA8PSBtYXhMZW5ndGhJbk1hcmtlckJ5dGUpCisgICAgICAgIHJldHVybiAxOworICAg
IHJldHVybiAxICsgaW50ZWdlckJ5dGVDb3VudChsZW5ndGgpOworfQorCit2b2lkIEJpbmFyeVBy
b3BlcnR5TGlzdFBsYW46OndyaXRlU3RyaW5nT2JqZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBtX2J5dGVDb3Vu
dCArPSBtYXJrZXJQbHVzTGVuZ3RoQnl0ZUNvdW50KGxlbmd0aCkgKyBsZW5ndGg7CisgICAgaWYg
KCFzdHJpbmcuY29udGFpbnNPbmx5QVNDSUkoKSkKKyAgICAgICAgbV9ieXRlQ291bnQgKz0gbGVu
Z3RoOworfQorCit2b2lkIEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OndyaXRlU3RyaW5nT2JqZWN0
KGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJsZW4oc3Ry
aW5nKTsKKyAgICBtX2J5dGVDb3VudCArPSBtYXJrZXJQbHVzTGVuZ3RoQnl0ZUNvdW50KGxlbmd0
aCkgKyBsZW5ndGg7Cit9CisKK3ZvaWQgQmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6d3JpdGVBcnJh
eU9iamVjdChzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQoc2l6ZSk7CisgICAgbV9ieXRlQ291
bnQgKz0gbWFya2VyUGx1c0xlbmd0aEJ5dGVDb3VudChzaXplKTsKKyAgICBtX29iamVjdFJlZmVy
ZW5jZUNvdW50ICs9IHNpemU7Cit9CisKK3ZvaWQgQmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6d3Jp
dGVEaWN0aW9uYXJ5T2JqZWN0KHNpemVfdCBzaXplKQoreworICAgIEFTU0VSVChzaXplKTsKKyAg
ICBBU1NFUlQoIShzaXplICYgMSkpOworICAgIG1fYnl0ZUNvdW50ICs9IG1hcmtlclBsdXNMZW5n
dGhCeXRlQ291bnQoc2l6ZSAvIDIpOworICAgIG1fb2JqZWN0UmVmZXJlbmNlQ291bnQgKz0gc2l6
ZTsKK30KKworT2JqZWN0UmVmZXJlbmNlIEJpbmFyeVByb3BlcnR5TGlzdFBsYW46OmJvb2xlYW5U
cnVlT2JqZWN0UmVmZXJlbmNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9ib29sZWFuVHJ1ZU9i
amVjdFJlZmVyZW5jZSAhPSBpbnZhbGlkT2JqZWN0UmVmZXJlbmNlKCkpOworICAgIHJldHVybiBt
X2Jvb2xlYW5UcnVlT2JqZWN0UmVmZXJlbmNlOworfQorCitPYmplY3RSZWZlcmVuY2UgQmluYXJ5
UHJvcGVydHlMaXN0UGxhbjo6aW50ZWdlck9iamVjdFJlZmVyZW5jZShpbnQgaW50ZWdlcikgY29u
c3QKK3sKKyAgICBBU1NFUlQoaW50ZWdlciA+PSAwKTsKKyAgICBpZiAoIWludGVnZXIpIHsKKyAg
ICAgICAgQVNTRVJUKG1faW50ZWdlclplcm9PYmplY3RSZWZlcmVuY2UgIT0gaW52YWxpZE9iamVj
dFJlZmVyZW5jZSgpKTsKKyAgICAgICAgcmV0dXJuIG1faW50ZWdlclplcm9PYmplY3RSZWZlcmVu
Y2U7CisgICAgfQorICAgIEFTU0VSVChtX2ludGVnZXJzLmNvbnRhaW5zKGludGVnZXIpKTsKKyAg
ICByZXR1cm4gbV9pbnRlZ2Vycy5nZXQoaW50ZWdlcik7Cit9CisKK09iamVjdFJlZmVyZW5jZSBC
aW5hcnlQcm9wZXJ0eUxpc3RQbGFuOjpzdHJpbmdPYmplY3RSZWZlcmVuY2UoY29uc3QgU3RyaW5n
JiBzdHJpbmcpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc3RyaW5ncy5jb250YWlucyhzdHJpbmcp
KTsKKyAgICByZXR1cm4gbV9zdHJpbmdzLmdldChzdHJpbmcpOworfQorCitPYmplY3RSZWZlcmVu
Y2UgQmluYXJ5UHJvcGVydHlMaXN0UGxhbjo6aW50ZWdlckFycmF5T2JqZWN0UmVmZXJlbmNlKGNv
bnN0IGludCogaW50ZWdlcnMsIHNpemVfdCBzaXplKSBjb25zdAoreworICAgIEFTU0VSVChtX2lu
dGVnZXJBcnJheXMuY29udGFpbnMoSW50ZWdlckFycmF5KGludGVnZXJzLCBzaXplKSkpOworICAg
IHJldHVybiBtX2ludGVnZXJBcnJheXMuZ2V0KEludGVnZXJBcnJheShpbnRlZ2Vycywgc2l6ZSkp
OworfQorCitjbGFzcyBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyIDogcHJpdmF0ZSBCaW5h
cnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0geworcHVibGljOgorICAgIEJpbmFyeVByb3BlcnR5
TGlzdFNlcmlhbGl6ZXIoQmluYXJ5UHJvcGVydHlMaXN0V3JpdGVyJik7CisKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCB2b2lkIHdyaXRlQm9vbGVhblRydWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVJbnRlZ2VyKGludCk7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUludGVnZXJBcnJheShjb25zdCBpbnQqLCBzaXpl
X3QpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVuaXF1ZVN0cmluZyhjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVbmlxdWVTdHJpbmcoY29uc3QgY2hhciopOworICAgIHZp
cnR1YWwgc2l6ZV90IHdyaXRlQXJyYXlTdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUFy
cmF5RW5kKHNpemVfdCk7CisgICAgdmlydHVhbCBzaXplX3Qgd3JpdGVEaWN0aW9uYXJ5U3RhcnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEaWN0aW9uYXJ5RW5kKHNpemVfdCk7CisKKyAgICBP
YmplY3RSZWZlcmVuY2Ugd3JpdGVJbnRlZ2VyV2l0aG91dEFkZGluZ0FnZ3JlZ2F0ZU9iamVjdFJl
ZmVyZW5jZShpbnQpOworCisgICAgdm9pZCBhcHBlbmRJbnRlZ2VyT2JqZWN0KGludCk7CisgICAg
dm9pZCBhcHBlbmRTdHJpbmdPYmplY3QoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBhcHBlbmRT
dHJpbmdPYmplY3QoY29uc3QgY2hhciopOworICAgIHZvaWQgYXBwZW5kSW50ZWdlckFycmF5T2Jq
ZWN0KGNvbnN0IGludCosIHNpemVfdCk7CisKKyAgICB2b2lkIGFwcGVuZEJ5dGUodW5zaWduZWQg
Y2hhcik7CisgICAgdm9pZCBhcHBlbmRCeXRlKHVuc2lnbmVkKTsKKyAgICB2b2lkIGFwcGVuZEJ5
dGUodW5zaWduZWQgbG9uZyk7CisgICAgdm9pZCBhcHBlbmRCeXRlKGludCk7CisKKyAgICB2b2lk
IGFwcGVuZEludGVnZXIoc2l6ZV90KTsKKworICAgIHZvaWQgYXBwZW5kT2JqZWN0UmVmZXJlbmNl
KE9iamVjdFJlZmVyZW5jZSk7CisKKyAgICB2b2lkIGFkZEFnZ3JlZ2F0ZU9iamVjdFJlZmVyZW5j
ZShPYmplY3RSZWZlcmVuY2UpOworCisgICAgdm9pZCBzdGFydE9iamVjdCgpOworCisgICAgY29u
c3QgQmluYXJ5UHJvcGVydHlMaXN0UGxhbiBtX3BsYW47CisgICAgY29uc3QgaW50IG1fb2JqZWN0
UmVmZXJlbmNlU2l6ZTsKKyAgICBjb25zdCBzaXplX3QgbV9vZmZzZXRUYWJsZVN0YXJ0OworICAg
IGNvbnN0IGludCBtX29mZnNldFNpemU7CisgICAgY29uc3Qgc2l6ZV90IG1fYnVmZmVyU2l6ZTsK
KyAgICBVSW50OCogY29uc3QgbV9idWZmZXI7CisKKyAgICBVSW50OCogbV9jdXJyZW50Qnl0ZTsK
KyAgICBPYmplY3RSZWZlcmVuY2UgbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlOworICAgIFVJbnQ4
KiBtX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlOworfTsKKworaW5saW5lIHZvaWQgQmluYXJ5
UHJvcGVydHlMaXN0U2VyaWFsaXplcjo6YXBwZW5kQnl0ZSh1bnNpZ25lZCBjaGFyIGJ5dGUpCit7
CisgICAgKm1fY3VycmVudEJ5dGUrKyA9IGJ5dGU7CisgICAgQVNTRVJUKG1fY3VycmVudEJ5dGUg
PD0gbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSk7Cit9CisKK2lubGluZSB2b2lkIEJpbmFy
eVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OmFwcGVuZEJ5dGUodW5zaWduZWQgYnl0ZSkKK3sKKyAg
ICAqbV9jdXJyZW50Qnl0ZSsrID0gYnl0ZTsKKyAgICBBU1NFUlQobV9jdXJyZW50Qnl0ZSA8PSBt
X2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlKTsKK30KKworaW5saW5lIHZvaWQgQmluYXJ5UHJv
cGVydHlMaXN0U2VyaWFsaXplcjo6YXBwZW5kQnl0ZSh1bnNpZ25lZCBsb25nIGJ5dGUpCit7Cisg
ICAgKm1fY3VycmVudEJ5dGUrKyA9IGJ5dGU7CisgICAgQVNTRVJUKG1fY3VycmVudEJ5dGUgPD0g
bV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSk7Cit9CisKK2lubGluZSB2b2lkIEJpbmFyeVBy
b3BlcnR5TGlzdFNlcmlhbGl6ZXI6OmFwcGVuZEJ5dGUoaW50IGJ5dGUpCit7CisgICAgKm1fY3Vy
cmVudEJ5dGUrKyA9IGJ5dGU7CisgICAgQVNTRVJUKG1fY3VycmVudEJ5dGUgPD0gbV9jdXJyZW50
QWdncmVnYXRlQnVmZmVyQnl0ZSk7Cit9CisKK3N0YXRpYyBpbnQgYnl0ZXNOZWVkZWQoc2l6ZV90
IGNvdW50KQoreworICAgIEFTU0VSVChjb3VudCk7CisgICAgaW50IGJ5dGVzTmVlZGVkID0gMTsK
KyAgICBmb3IgKHNpemVfdCBtYXNrID0gbnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgPDwg
ODsgY291bnQgJiBtYXNrOyBtYXNrIDw8PSA4KQorICAgICAgICArK2J5dGVzTmVlZGVkOworICAg
IHJldHVybiBieXRlc05lZWRlZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0b3JlTGVuZ3Ro
KFVJbnQ4KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZmRlZiBfX0xQNjRfXwor
ICAgIGRlc3RpbmF0aW9uWzBdID0gbGVuZ3RoID4+IDU2OworICAgIGRlc3RpbmF0aW9uWzFdID0g
bGVuZ3RoID4+IDQ4OworICAgIGRlc3RpbmF0aW9uWzJdID0gbGVuZ3RoID4+IDQwOworICAgIGRl
c3RpbmF0aW9uWzNdID0gbGVuZ3RoID4+IDMyOworI2Vsc2UKKyAgICBkZXN0aW5hdGlvblswXSA9
IDA7CisgICAgZGVzdGluYXRpb25bMV0gPSAwOworICAgIGRlc3RpbmF0aW9uWzJdID0gMDsKKyAg
ICBkZXN0aW5hdGlvblszXSA9IDA7CisjZW5kaWYKKyAgICBkZXN0aW5hdGlvbls0XSA9IGxlbmd0
aCA+PiAyNDsKKyAgICBkZXN0aW5hdGlvbls1XSA9IGxlbmd0aCA+PiAxNjsKKyAgICBkZXN0aW5h
dGlvbls2XSA9IGxlbmd0aCA+PiA4OworICAgIGRlc3RpbmF0aW9uWzddID0gbGVuZ3RoOworfQor
CisvLyBMaWtlIG1lbW1vdmUsIGJ1dCByZXZlcnNlcyB0aGUgYnl0ZXMuCitzdGF0aWMgdm9pZCBt
b3ZlQW5kUmV2ZXJzZUJ5dGVzKFVJbnQ4KiBkZXN0aW5hdGlvbiwgY29uc3QgVUludDgqIHNvdXJj
ZSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoKTsKKyAgICBtZW1tb3ZlKGRl
c3RpbmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7CisgICAgVUludDgqIHN0YXJ0ID0gZGVzdGluYXRp
b247CisgICAgVUludDgqIGVuZCA9IGRlc3RpbmF0aW9uICsgbGVuZ3RoOworICAgIHdoaWxlIChl
bmQgLSBzdGFydCA+IDEpCisgICAgICAgIHN0ZDo6c3dhcCgqc3RhcnQrKywgKi0tZW5kKTsKK30K
KworLy8gVGhlIHNlcmlhbGl6ZXIgdXNlcyBhIHNpbmdsZSBidWZmZXIgZm9yIHRoZSBwcm9wZXJ0
eSBsaXN0LgorLy8gVGhlIGJ1ZmZlciBjb250YWluczoKKy8vCisvLyAgICA4LWJ5dGUgaGVhZGVy
CisvLyAgICBvYmplY3QgZGF0YQorLy8gICAgb2Zmc2V0IHRhYmxlCisvLyAgICAzMi1ieXRlIHRy
YWlsZXIKKy8vCisvLyBXaGlsZSBzZXJpYWxpemluZyBvYmplY3QsIHRoZSBvZmZzZXQgdGFibGUg
ZW50cnkgZm9yIGVhY2ggb2JqZWN0IGlzIHdyaXR0ZW4ganVzdCBiZWZvcmUKKy8vIHRoZSBvYmpl
Y3QgZGF0YSBmb3IgdGhhdCBvYmplY3QgaXMgd3JpdHRlbi4gQWdncmVnYXRlcywgYXJyYXlzIGFu
ZCBkaWN0aW9uYXJpZXMsIGFyZSBhCisvLyBzcGVjaWFsIGNhc2UuIFRoZSBvYmplY3RzIHRoYXQg
Z28gaW50byBhbiBhZ2dyZWdhdGUgYXJlIHdyaXR0ZW4gYmVmb3JlIHRoZSBhZ2dyZWdhdGUgaXMu
CisvLyBBcyBlYWNoIG9iamVjdCBpcyB3cml0dGVuLCB0aGUgb2JqZWN0IHJlZmVyZW5jZSBpcyBw
dXQgaW4gdGhlIGFnZ3JlZ2F0ZSBidWZmZXIuIFRoZW4sCisvLyB3aGVuIHRoZSBhZ2dyZWdhdGUg
aXMgd3JpdHRlbiwgdGhlIGFnZ3JlZ2F0ZSBidWZmZXIgaXMgY29waWVkIGludG8gcGxhY2UgaW4g
dGhlIG9iamVjdAorLy8gZGF0YS4gRmluYWxseSwgdGhlIGhlYWRlciBhbmQgdHJhaWxlciBhcmUg
d3JpdHRlbi4KKy8vCisvLyBUaGUgYWdncmVnYXRlIGJ1ZmZlciBzaGFyZXMgc3BhY2Ugd2l0aCB0
aGUgb2JqZWN0IGRhdGEsIGxpa2UgdGhpczoKKy8vCisvLyAgICA4LWJ5dGUgaGVhZGVyCisvLyAg
ICBvYmplY3QgZGF0YQorLy8gICAgPj4+IGFnZ3JlZ2F0ZSBidWZmZXIgPDw8CisvLyAgICBvZmZz
ZXQgdGFibGUKKy8vICAgIDMyLWJ5dGUgdHJhaWxlcgorLy8KKy8vIFRvIG1ha2UgaXQgZWFzeSB0
byBidWlsZCBpdCBpbmNyZW1lbnRhbGx5LCB0aGUgYnVmZmVyIHN0YXJ0cyBhdCB0aGUgZW5kIG9m
IHRoZSBvYmplY3QKKy8vIGRhdGEgc3BhY2UsIGFuZCBncm93cyBiYWNrd2FyZHMuIFdlJ3JlIGd1
YXJhbnRlZWQgdGhlIGFnZ3JlZ2F0ZSBidWZmZXIgd2lsbCBuZXZlciBjb2xsaWRlCisvLyB3aXRo
IHRoZSBvYmplY3QgZGF0YSBwb2ludGVyIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBvYmplY3Qg
ZGF0YSBpcyBjb3JyZWN0bHkgc2l6ZWQKKy8vIGJhc2VkIG9uIG91ciBwbGFuLCBhbmQgYWxsIHRo
ZSBkYXRhIGluIHRoZSBhZ2dyZWdhdGUgYnVmZmVyIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhl
CisvLyBhY3R1YWwgYWdncmVnYXRlIG9iamVjdHM7IGluIHRoZSB3b3JzdCBjYXNlIHRoZSBhZ2dy
ZWdhdGUgYnVmZmVyIHdpbGwgYWxyZWFkeSBiZSBpbgorLy8gZXhhY3RseSB0aGUgcmlnaHQgcGxh
Y2UsIGJ1dCBiYWNrd2FyZHMuCisKK0JpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OkJpbmFy
eVByb3BlcnR5TGlzdFNlcmlhbGl6ZXIoQmluYXJ5UHJvcGVydHlMaXN0V3JpdGVyJiBjbGllbnQp
CisgICAgOiBtX3BsYW4oY2xpZW50KQorICAgICwgbV9vYmplY3RSZWZlcmVuY2VTaXplKGJ5dGVz
TmVlZGVkKG1fcGxhbi5vYmplY3RDb3VudCgpKSkKKyAgICAsIG1fb2Zmc2V0VGFibGVTdGFydCho
ZWFkZXJTaXplICsgbV9wbGFuLmJ5dGVDb3VudCgpICsgbV9wbGFuLm9iamVjdFJlZmVyZW5jZUNv
dW50KCkgKiBtX29iamVjdFJlZmVyZW5jZVNpemUpCisgICAgLCBtX29mZnNldFNpemUoYnl0ZXNO
ZWVkZWQobV9vZmZzZXRUYWJsZVN0YXJ0KSkKKyAgICAsIG1fYnVmZmVyU2l6ZShtX29mZnNldFRh
YmxlU3RhcnQgKyBtX3BsYW4ub2JqZWN0Q291bnQoKSAqIG1fb2Zmc2V0U2l6ZSArIHRyYWlsZXJT
aXplKQorICAgICwgbV9idWZmZXIoY2xpZW50LmJ1ZmZlcihtX2J1ZmZlclNpemUpKQorICAgICwg
bV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKDApCit7CisgICAgQVNTRVJUKG1fb2JqZWN0UmVmZXJl
bmNlU2l6ZSA+IDApOworICAgIEFTU0VSVChtX29mZnNldFNpemUgPiAwKTsKKworI2lmZGVmIF9f
TFA2NF9fCisgICAgQVNTRVJUKG1fb2JqZWN0UmVmZXJlbmNlU2l6ZSA8PSA4KTsKKyAgICBBU1NF
UlQobV9vZmZzZXRTaXplIDw9IDgpOworI2Vsc2UKKyAgICBBU1NFUlQobV9vYmplY3RSZWZlcmVu
Y2VTaXplIDw9IDQpOworICAgIEFTU0VSVChtX29mZnNldFNpemUgPD0gNCk7CisjZW5kaWYKKwor
ICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdyaXRlIG9iamVj
dHMgYW5kIG9mZnNldCB0YWJsZS4KKyAgICBtX2N1cnJlbnRCeXRlID0gbV9idWZmZXIgKyBoZWFk
ZXJTaXplOworICAgIG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgPSBtX2J1ZmZlciArIG1f
b2Zmc2V0VGFibGVTdGFydDsKKyAgICBjbGllbnQud3JpdGVPYmplY3RzKCp0aGlzKTsKKyAgICBB
U1NFUlQobV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlID09IG1fcGxhbi5vYmplY3RDb3VudCgpKTsK
KyAgICBBU1NFUlQobV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSA9PSBtX2J1ZmZlciArIG1f
b2Zmc2V0VGFibGVTdGFydCk7CisgICAgQVNTRVJUKG1fY3VycmVudEJ5dGUgPT0gbV9idWZmZXIg
KyBtX29mZnNldFRhYmxlU3RhcnQpOworCisgICAgLy8gV3JpdGUgaGVhZGVyLgorICAgIG1lbWNw
eShtX2J1ZmZlciwgImJwbGlzdDAwIiwgaGVhZGVyU2l6ZSk7CisKKyAgICAvLyBXcml0ZSB0cmFp
bGVyLgorICAgIFVJbnQ4KiB0cmFpbGVyID0gbV9idWZmZXIgKyBtX2J1ZmZlclNpemUgLSB0cmFp
bGVyU2l6ZTsKKyAgICBtZW1zZXQodHJhaWxlciwgMCwgNik7CisgICAgdHJhaWxlcls2XSA9IG1f
b2Zmc2V0U2l6ZTsKKyAgICB0cmFpbGVyWzddID0gbV9vYmplY3RSZWZlcmVuY2VTaXplOworICAg
IHN0b3JlTGVuZ3RoKHRyYWlsZXIgKyA4LCBtX3BsYW4ub2JqZWN0Q291bnQoKSk7CisgICAgc3Rv
cmVMZW5ndGgodHJhaWxlciArIDE2LCBtX3BsYW4ub2JqZWN0Q291bnQoKSAtIDEpOworICAgIHN0
b3JlTGVuZ3RoKHRyYWlsZXIgKyAyNCwgbV9vZmZzZXRUYWJsZVN0YXJ0KTsKK30KKwordm9pZCBC
aW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3cml0ZUJvb2xlYW5UcnVlKCkKK3sKKyAgICBP
YmplY3RSZWZlcmVuY2UgcmVmZXJlbmNlID0gbV9wbGFuLmJvb2xlYW5UcnVlT2JqZWN0UmVmZXJl
bmNlKCk7CisgICAgaWYgKG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSAhPSByZWZlcmVuY2UpCisg
ICAgICAgIEFTU0VSVChyZWZlcmVuY2UgPCBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UpOworICAg
IGVsc2UgeworICAgICAgICBzdGFydE9iamVjdCgpOworICAgICAgICBhcHBlbmRCeXRlKGJvb2xl
YW5UcnVlTWFya2VyQnl0ZSk7CisgICAgfQorICAgIGFkZEFnZ3JlZ2F0ZU9iamVjdFJlZmVyZW5j
ZShyZWZlcmVuY2UpOworfQorCitpbmxpbmUgT2JqZWN0UmVmZXJlbmNlIEJpbmFyeVByb3BlcnR5
TGlzdFNlcmlhbGl6ZXI6OndyaXRlSW50ZWdlcldpdGhvdXRBZGRpbmdBZ2dyZWdhdGVPYmplY3RS
ZWZlcmVuY2UoaW50IGludGVnZXIpCit7CisgICAgT2JqZWN0UmVmZXJlbmNlIHJlZmVyZW5jZSA9
IG1fcGxhbi5pbnRlZ2VyT2JqZWN0UmVmZXJlbmNlKGludGVnZXIpOworICAgIGlmIChtX2N1cnJl
bnRPYmplY3RSZWZlcmVuY2UgIT0gcmVmZXJlbmNlKQorICAgICAgICBBU1NFUlQocmVmZXJlbmNl
IDwgbV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZElu
dGVnZXJPYmplY3QoaW50ZWdlcik7CisgICAgcmV0dXJuIHJlZmVyZW5jZTsKK30KKwordm9pZCBC
aW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3cml0ZUludGVnZXIoaW50IGludGVnZXIpCit7
CisgICAgYWRkQWdncmVnYXRlT2JqZWN0UmVmZXJlbmNlKHdyaXRlSW50ZWdlcldpdGhvdXRBZGRp
bmdBZ2dyZWdhdGVPYmplY3RSZWZlcmVuY2UoaW50ZWdlcikpOworfQorCit2b2lkIEJpbmFyeVBy
b3BlcnR5TGlzdFNlcmlhbGl6ZXI6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworICAgIE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2UgPSBtX3BsYW4uc3RyaW5nT2JqZWN0UmVm
ZXJlbmNlKHN0cmluZyk7CisgICAgaWYgKG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSAhPSByZWZl
cmVuY2UpCisgICAgICAgIEFTU0VSVChyZWZlcmVuY2UgPCBtX2N1cnJlbnRPYmplY3RSZWZlcmVu
Y2UpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kU3RyaW5nT2JqZWN0KHN0cmluZyk7CisgICAg
YWRkQWdncmVnYXRlT2JqZWN0UmVmZXJlbmNlKHJlZmVyZW5jZSk7Cit9CisKK3ZvaWQgQmluYXJ5
UHJvcGVydHlMaXN0U2VyaWFsaXplcjo6d3JpdGVJbnRlZ2VyQXJyYXkoY29uc3QgaW50KiBpbnRl
Z2Vycywgc2l6ZV90IHNpemUpCit7CisgICAgT2JqZWN0UmVmZXJlbmNlIHJlZmVyZW5jZSA9IG1f
cGxhbi5pbnRlZ2VyQXJyYXlPYmplY3RSZWZlcmVuY2UoaW50ZWdlcnMsIHNpemUpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICB3cml0ZUludGVnZXJXaXRo
b3V0QWRkaW5nQWdncmVnYXRlT2JqZWN0UmVmZXJlbmNlKGludGVnZXJzW2ldKTsKKyAgICBpZiAo
bV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlICE9IHJlZmVyZW5jZSkKKyAgICAgICAgQVNTRVJUKHJl
ZmVyZW5jZSA8IG1fY3VycmVudE9iamVjdFJlZmVyZW5jZSk7CisgICAgZWxzZQorICAgICAgICBh
cHBlbmRJbnRlZ2VyQXJyYXlPYmplY3QoaW50ZWdlcnMsIHNpemUpOworICAgIGFkZEFnZ3JlZ2F0
ZU9iamVjdFJlZmVyZW5jZShyZWZlcmVuY2UpOworfQorCit2b2lkIEJpbmFyeVByb3BlcnR5TGlz
dFNlcmlhbGl6ZXI6OndyaXRlVW5pcXVlU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAg
ICBhZGRBZ2dyZWdhdGVPYmplY3RSZWZlcmVuY2UobV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlKTsK
KyAgICBhcHBlbmRTdHJpbmdPYmplY3Qoc3RyaW5nKTsKK30KKwordm9pZCBCaW5hcnlQcm9wZXJ0
eUxpc3RTZXJpYWxpemVyOjp3cml0ZVVuaXF1ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykK
K3sKKyAgICBhZGRBZ2dyZWdhdGVPYmplY3RSZWZlcmVuY2UobV9jdXJyZW50T2JqZWN0UmVmZXJl
bmNlKTsKKyAgICBhcHBlbmRTdHJpbmdPYmplY3Qoc3RyaW5nKTsKK30KKworc2l6ZV90IEJpbmFy
eVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OndyaXRlQXJyYXlTdGFydCgpCit7CisgICAgcmV0dXJu
IG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgLSBtX2J1ZmZlcjsKK30KKwordm9pZCBCaW5h
cnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3cml0ZUFycmF5RW5kKHNpemVfdCBzYXZlZEFnZ3Jl
Z2F0ZUJ1ZmZlck9mZnNldCkKK3sKKyAgICBPYmplY3RSZWZlcmVuY2UgcmVmZXJlbmNlID0gbV9j
dXJyZW50T2JqZWN0UmVmZXJlbmNlOworICAgIHN0YXJ0T2JqZWN0KCk7CisgICAgc2l6ZV90IGFn
Z3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudCA9IHNhdmVkQWdncmVnYXRlQnVmZmVyT2Zmc2V0IC0gKG1f
Y3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgLSBtX2J1ZmZlcik7CisgICAgQVNTRVJUKGFnZ3Jl
Z2F0ZUJ1ZmZlckJ5dGVDb3VudCk7CisgICAgQVNTRVJUKCEoYWdncmVnYXRlQnVmZmVyQnl0ZUNv
dW50ICUgbV9vYmplY3RSZWZlcmVuY2VTaXplKSk7CisgICAgc2l6ZV90IHNpemUgPSBhZ2dyZWdh
dGVCdWZmZXJCeXRlQ291bnQgLyBtX29iamVjdFJlZmVyZW5jZVNpemU7CisgICAgaWYgKHNpemUg
PD0gbWF4TGVuZ3RoSW5NYXJrZXJCeXRlKQorICAgICAgICBhcHBlbmRCeXRlKGFycmF5TWFya2Vy
Qnl0ZSB8IHNpemUpOworICAgIGVsc2UgeworICAgICAgICBhcHBlbmRCeXRlKGFycmF5V2l0aFNl
cGFyYXRlTGVuZ3RoTWFya2VyQnl0ZSk7CisgICAgICAgIGFwcGVuZEludGVnZXIoc2l6ZSk7Cisg
ICAgfQorICAgIG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgPSBtX2J1ZmZlciArIHNhdmVk
QWdncmVnYXRlQnVmZmVyT2Zmc2V0OworICAgIEFTU0VSVChtX2N1cnJlbnRCeXRlIDw9IG1fY3Vy
cmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUpOworICAgIG1vdmVBbmRSZXZlcnNlQnl0ZXMobV9jdXJy
ZW50Qnl0ZSwgbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSAtIGFnZ3JlZ2F0ZUJ1ZmZlckJ5
dGVDb3VudCwgYWdncmVnYXRlQnVmZmVyQnl0ZUNvdW50KTsKKyAgICBtX2N1cnJlbnRCeXRlICs9
IGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudDsKKyAgICBBU1NFUlQobV9jdXJyZW50Qnl0ZSA8PSBt
X2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlKTsKKyAgICBpZiAobV9jdXJyZW50T2JqZWN0UmVm
ZXJlbmNlIDwgbV9wbGFuLm9iamVjdENvdW50KCkpCisgICAgICAgIGFkZEFnZ3JlZ2F0ZU9iamVj
dFJlZmVyZW5jZShyZWZlcmVuY2UpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKG1fY3VycmVu
dE9iamVjdFJlZmVyZW5jZSA9PSBtX3BsYW4ub2JqZWN0Q291bnQoKSk7Cit9CisKK3NpemVfdCBC
aW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3cml0ZURpY3Rpb25hcnlTdGFydCgpCit7Cisg
ICAgcmV0dXJuIG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgLSBtX2J1ZmZlcjsKK30KKwor
dm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjp3cml0ZURpY3Rpb25hcnlFbmQoc2l6
ZV90IHNhdmVkQWdncmVnYXRlQnVmZmVyT2Zmc2V0KQoreworICAgIE9iamVjdFJlZmVyZW5jZSBy
ZWZlcmVuY2UgPSBtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2U7CisgICAgc3RhcnRPYmplY3QoKTsK
KyAgICBzaXplX3QgYWdncmVnYXRlQnVmZmVyQnl0ZUNvdW50ID0gc2F2ZWRBZ2dyZWdhdGVCdWZm
ZXJPZmZzZXQgLSAobV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSAtIG1fYnVmZmVyKTsKKyAg
ICBBU1NFUlQoYWdncmVnYXRlQnVmZmVyQnl0ZUNvdW50KTsKKyAgICBBU1NFUlQoIShhZ2dyZWdh
dGVCdWZmZXJCeXRlQ291bnQgJSAobV9vYmplY3RSZWZlcmVuY2VTaXplICogMikpKTsKKyAgICBz
aXplX3Qgc2l6ZSA9IGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudCAvIChtX29iamVjdFJlZmVyZW5j
ZVNpemUgKiAyKTsKKyAgICBpZiAoc2l6ZSA8PSBtYXhMZW5ndGhJbk1hcmtlckJ5dGUpCisgICAg
ICAgIGFwcGVuZEJ5dGUoZGljdGlvbmFyeU1hcmtlckJ5dGUgfCBzaXplKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgYXBwZW5kQnl0ZShkaWN0aW9uYXJ5V2l0aFNlcGFyYXRlTGVuZ3RoTWFya2VyQnl0
ZSk7CisgICAgICAgIGFwcGVuZEludGVnZXIoc2l6ZSk7CisgICAgfQorICAgIG1fY3VycmVudEFn
Z3JlZ2F0ZUJ1ZmZlckJ5dGUgPSBtX2J1ZmZlciArIHNhdmVkQWdncmVnYXRlQnVmZmVyT2Zmc2V0
OworICAgIEFTU0VSVChtX2N1cnJlbnRCeXRlIDw9IG1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5
dGUpOworICAgIG1vdmVBbmRSZXZlcnNlQnl0ZXMobV9jdXJyZW50Qnl0ZSwgbV9jdXJyZW50QWdn
cmVnYXRlQnVmZmVyQnl0ZSAtIGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVDb3VudCwgYWdncmVnYXRlQnVm
ZmVyQnl0ZUNvdW50KTsKKyAgICBtX2N1cnJlbnRCeXRlICs9IGFnZ3JlZ2F0ZUJ1ZmZlckJ5dGVD
b3VudDsKKyAgICBBU1NFUlQobV9jdXJyZW50Qnl0ZSA8PSBtX2N1cnJlbnRBZ2dyZWdhdGVCdWZm
ZXJCeXRlKTsKKyAgICBpZiAobV9jdXJyZW50T2JqZWN0UmVmZXJlbmNlICE9IG1fcGxhbi5vYmpl
Y3RDb3VudCgpKQorICAgICAgICBhZGRBZ2dyZWdhdGVPYmplY3RSZWZlcmVuY2UocmVmZXJlbmNl
KTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRPYmplY3RSZWZlcmVuY2UgPT0g
bV9wbGFuLm9iamVjdENvdW50KCkpOworfQorCit2b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlh
bGl6ZXI6OmFwcGVuZEludGVnZXJPYmplY3QoaW50IGludGVnZXIpCit7CisgICAgc3RhcnRPYmpl
Y3QoKTsKKyAgICBBU1NFUlQoaW50ZWdlciA+PSAwKTsKKyAgICBhcHBlbmRJbnRlZ2VyKGludGVn
ZXIpOworfQorCit2b2lkIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI6OmFwcGVuZEludGVn
ZXIoc2l6ZV90IGludGVnZXIpCit7CisgICAgaWYgKGludGVnZXIgPD0gMHhGRikgeworICAgICAg
ICBhcHBlbmRCeXRlKG9uZUJ5dGVJbnRlZ2VyTWFya2VyQnl0ZSk7CisgICAgICAgIGFwcGVuZEJ5
dGUoaW50ZWdlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGludGVnZXIgPD0g
MHhGRkZGKSB7CisgICAgICAgIGFwcGVuZEJ5dGUodHdvQnl0ZUludGVnZXJNYXJrZXJCeXRlKTsK
KyAgICAgICAgYXBwZW5kQnl0ZShpbnRlZ2VyID4+IDgpOworICAgICAgICBhcHBlbmRCeXRlKGlu
dGVnZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmZGVmIF9fTFA2NF9fCisgICAgaWYg
KGludGVnZXIgPD0gMHhGRkZGRkZGRlVMTCkgeworI2VuZGlmCisgICAgICAgIGFwcGVuZEJ5dGUo
Zm91ckJ5dGVJbnRlZ2VyTWFya2VyQnl0ZSk7CisgICAgICAgIGFwcGVuZEJ5dGUoaW50ZWdlciA+
PiAyNCk7CisgICAgICAgIGFwcGVuZEJ5dGUoaW50ZWdlciA+PiAxNik7CisgICAgICAgIGFwcGVu
ZEJ5dGUoaW50ZWdlciA+PiA4KTsKKyAgICAgICAgYXBwZW5kQnl0ZShpbnRlZ2VyKTsKKyNpZmRl
ZiBfX0xQNjRfXworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFwcGVuZEJ5dGUoZWlnaHRC
eXRlSW50ZWdlck1hcmtlckJ5dGUpOworICAgIGFwcGVuZEJ5dGUoaW50ZWdlciA+PiA1Nik7Cisg
ICAgYXBwZW5kQnl0ZShpbnRlZ2VyID4+IDQ4KTsKKyAgICBhcHBlbmRCeXRlKGludGVnZXIgPj4g
NDApOworICAgIGFwcGVuZEJ5dGUoaW50ZWdlciA+PiAzMik7CisgICAgYXBwZW5kQnl0ZShpbnRl
Z2VyID4+IDI0KTsKKyAgICBhcHBlbmRCeXRlKGludGVnZXIgPj4gMTYpOworICAgIGFwcGVuZEJ5
dGUoaW50ZWdlciA+PiA4KTsKKyAgICBhcHBlbmRCeXRlKGludGVnZXIpOworI2VuZGlmCit9CisK
K3ZvaWQgQmluYXJ5UHJvcGVydHlMaXN0U2VyaWFsaXplcjo6YXBwZW5kU3RyaW5nT2JqZWN0KGNv
bnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIHN0YXJ0T2JqZWN0KCk7CisgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBpZiAoY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJh
Y3RlcnMsIGxlbmd0aCkpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGhJbk1hcmtl
ckJ5dGUpCisgICAgICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGFzY2lpU3RyaW5nTWFya2VyQnl0ZSB8IGxlbmd0aCkpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGFwcGVuZEJ5dGUoYXNjaWlTdHJpbmdXaXRoU2VwYXJhdGVMZW5ndGhNYXJrZXJCeXRl
KTsKKyAgICAgICAgICAgIGFwcGVuZEludGVnZXIobGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhcHBl
bmRCeXRlKGNoYXJhY3RlcnNbaV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsZW5ndGgg
PD0gbWF4TGVuZ3RoSW5NYXJrZXJCeXRlKQorICAgICAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPih1bmljb2RlU3RyaW5nTWFya2VyQnl0ZSB8IGxlbmd0aCkpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFwcGVuZEJ5dGUodW5pY29kZVN0cmluZ1dpdGhT
ZXBhcmF0ZUxlbmd0aE1hcmtlckJ5dGUpOworICAgICAgICAgICAgYXBwZW5kSW50ZWdlcihsZW5n
dGgpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgYXBwZW5kQnl0ZShjaGFyYWN0ZXJzW2ldID4+IDgpOworICAg
ICAgICAgICAgYXBwZW5kQnl0ZShjaGFyYWN0ZXJzW2ldKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjphcHBlbmRTdHJpbmdPYmplY3Qo
Y29uc3QgY2hhciogc3RyaW5nKQoreworICAgIHN0YXJ0T2JqZWN0KCk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RybGVuKHN0cmluZyk7CisgICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGhJbk1h
cmtlckJ5dGUpCisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
YXNjaWlTdHJpbmdNYXJrZXJCeXRlIHwgbGVuZ3RoKSk7CisgICAgZWxzZSB7CisgICAgICAgIGFw
cGVuZEJ5dGUoYXNjaWlTdHJpbmdXaXRoU2VwYXJhdGVMZW5ndGhNYXJrZXJCeXRlKTsKKyAgICAg
ICAgYXBwZW5kSW50ZWdlcihsZW5ndGgpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIGFwcGVuZEJ5dGUoc3RyaW5nW2ldKTsKK30KKwor
dm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxpemVyOjphcHBlbmRJbnRlZ2VyQXJyYXlPYmpl
Y3QoY29uc3QgaW50KiBpbnRlZ2Vycywgc2l6ZV90IHNpemUpCit7CisgICAgc3RhcnRPYmplY3Qo
KTsKKyAgICBpZiAoc2l6ZSA8PSBtYXhMZW5ndGhJbk1hcmtlckJ5dGUpCisgICAgICAgIGFwcGVu
ZEJ5dGUoYXJyYXlNYXJrZXJCeXRlIHwgc2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIGFwcGVu
ZEJ5dGUoYXJyYXlXaXRoU2VwYXJhdGVMZW5ndGhNYXJrZXJCeXRlKTsKKyAgICAgICAgYXBwZW5k
SW50ZWdlcihzaXplKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgYXBwZW5kT2JqZWN0UmVmZXJlbmNlKG1fcGxhbi5pbnRlZ2VyT2JqZWN0
UmVmZXJlbmNlKGludGVnZXJzW2ldKSk7Cit9CisKK3ZvaWQgQmluYXJ5UHJvcGVydHlMaXN0U2Vy
aWFsaXplcjo6YXBwZW5kT2JqZWN0UmVmZXJlbmNlKE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2Up
Cit7CisgICAgc3dpdGNoIChtX29iamVjdFJlZmVyZW5jZVNpemUpIHsKKyNpZmRlZiBfX0xQNjRf
XworICAgIGNhc2UgODoKKyAgICAgICAgYXBwZW5kQnl0ZShyZWZlcmVuY2UgPj4gNTYpOworICAg
IGNhc2UgNzoKKyAgICAgICAgYXBwZW5kQnl0ZShyZWZlcmVuY2UgPj4gNDgpOworICAgIGNhc2Ug
NjoKKyAgICAgICAgYXBwZW5kQnl0ZShyZWZlcmVuY2UgPj4gNDApOworICAgIGNhc2UgNToKKyAg
ICAgICAgYXBwZW5kQnl0ZShyZWZlcmVuY2UgPj4gMzIpOworI2VuZGlmCisgICAgY2FzZSA0Ogor
ICAgICAgICBhcHBlbmRCeXRlKHJlZmVyZW5jZSA+PiAyNCk7CisgICAgY2FzZSAzOgorICAgICAg
ICBhcHBlbmRCeXRlKHJlZmVyZW5jZSA+PiAxNik7CisgICAgY2FzZSAyOgorICAgICAgICBhcHBl
bmRCeXRlKHJlZmVyZW5jZSA+PiA4KTsKKyAgICBjYXNlIDE6CisgICAgICAgIGFwcGVuZEJ5dGUo
cmVmZXJlbmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgQmluYXJ5UHJvcGVydHlMaXN0U2VyaWFsaXpl
cjo6c3RhcnRPYmplY3QoKQoreworICAgIE9iamVjdFJlZmVyZW5jZSByZWZlcmVuY2UgPSBtX2N1
cnJlbnRPYmplY3RSZWZlcmVuY2UrKzsKKworICAgIHNpemVfdCBvZmZzZXQgPSBtX2N1cnJlbnRC
eXRlIC0gbV9idWZmZXI7CisKKyAgICBVSW50OCogb2Zmc2V0VGFibGVFbnRyeSA9IG1fYnVmZmVy
ICsgbV9vZmZzZXRUYWJsZVN0YXJ0ICsgcmVmZXJlbmNlICogbV9vZmZzZXRTaXplICsgbV9vZmZz
ZXRTaXplOworICAgIHN3aXRjaCAobV9vZmZzZXRTaXplKSB7CisjaWZkZWYgX19MUDY0X18KKyAg
ICBjYXNlIDg6CisgICAgICAgIG9mZnNldFRhYmxlRW50cnlbLThdID0gb2Zmc2V0ID4+IDU2Owor
ICAgIGNhc2UgNzoKKyAgICAgICAgb2Zmc2V0VGFibGVFbnRyeVstN10gPSBvZmZzZXQgPj4gNDg7
CisgICAgY2FzZSA2OgorICAgICAgICBvZmZzZXRUYWJsZUVudHJ5Wy02XSA9IG9mZnNldCA+PiA0
MDsKKyAgICBjYXNlIDU6CisgICAgICAgIG9mZnNldFRhYmxlRW50cnlbLTVdID0gb2Zmc2V0ID4+
IDMyOworI2VuZGlmCisgICAgY2FzZSA0OgorICAgICAgICBvZmZzZXRUYWJsZUVudHJ5Wy00XSA9
IG9mZnNldCA+PiAyNDsKKyAgICBjYXNlIDM6CisgICAgICAgIG9mZnNldFRhYmxlRW50cnlbLTNd
ID0gb2Zmc2V0ID4+IDE2OworICAgIGNhc2UgMjoKKyAgICAgICAgb2Zmc2V0VGFibGVFbnRyeVst
Ml0gPSBvZmZzZXQgPj4gODsKKyAgICBjYXNlIDE6CisgICAgICAgIG9mZnNldFRhYmxlRW50cnlb
LTFdID0gb2Zmc2V0OworICAgIH0KK30KKwordm9pZCBCaW5hcnlQcm9wZXJ0eUxpc3RTZXJpYWxp
emVyOjphZGRBZ2dyZWdhdGVPYmplY3RSZWZlcmVuY2UoT2JqZWN0UmVmZXJlbmNlIHJlZmVyZW5j
ZSkKK3sKKyAgICBzd2l0Y2ggKG1fb2JqZWN0UmVmZXJlbmNlU2l6ZSkgeworI2lmZGVmIF9fTFA2
NF9fCisgICAgY2FzZSA4OgorICAgICAgICAqLS1tX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRl
ID0gcmVmZXJlbmNlID4+IDU2OworICAgIGNhc2UgNzoKKyAgICAgICAgKi0tbV9jdXJyZW50QWdn
cmVnYXRlQnVmZmVyQnl0ZSA9IHJlZmVyZW5jZSA+PiA0ODsKKyAgICBjYXNlIDY6CisgICAgICAg
ICotLW1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgPSByZWZlcmVuY2UgPj4gNDA7CisgICAg
Y2FzZSA1OgorICAgICAgICAqLS1tX2N1cnJlbnRBZ2dyZWdhdGVCdWZmZXJCeXRlID0gcmVmZXJl
bmNlID4+IDMyOworI2VuZGlmCisgICAgY2FzZSA0OgorICAgICAgICAqLS1tX2N1cnJlbnRBZ2dy
ZWdhdGVCdWZmZXJCeXRlID0gcmVmZXJlbmNlID4+IDI0OworICAgIGNhc2UgMzoKKyAgICAgICAg
Ki0tbV9jdXJyZW50QWdncmVnYXRlQnVmZmVyQnl0ZSA9IHJlZmVyZW5jZSA+PiAxNjsKKyAgICBj
YXNlIDI6CisgICAgICAgICotLW1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUgPSByZWZlcmVu
Y2UgPj4gODsKKyAgICBjYXNlIDE6CisgICAgICAgICotLW1fY3VycmVudEFnZ3JlZ2F0ZUJ1ZmZl
ckJ5dGUgPSByZWZlcmVuY2U7CisgICAgfQorICAgIEFTU0VSVChtX2N1cnJlbnRCeXRlIDw9IG1f
Y3VycmVudEFnZ3JlZ2F0ZUJ1ZmZlckJ5dGUpOworfQorCit2b2lkIEJpbmFyeVByb3BlcnR5TGlz
dFdyaXRlcjo6d3JpdGVQcm9wZXJ0eUxpc3QoKQoreworICAgIEJpbmFyeVByb3BlcnR5TGlzdFNl
cmlhbGl6ZXIgc2VyaWFsaXplcigqdGhpcyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9IaXN0b3J5L0JpbmFyeVByb3BlcnR5TGlzdC5oIGIvU291cmNlL1dlYktpdC9tYWMvSGlz
dG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjkxNGVmZjJiNTFiYzliYjQ1
ZGU1ZjdmZGZmMTI2MTZlZjY3OTZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9t
YWMvSGlzdG9yeS9CaW5hcnlQcm9wZXJ0eUxpc3QuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJpbmFyeVBy
b3BlcnR5TGlzdF9oCisjZGVmaW5lIEJpbmFyeVByb3BlcnR5TGlzdF9oCisKKyNpbmNsdWRlIDxD
b3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKy8vIFdyaXRlcyBhIGxpbWl0ZWQgc3Vic2V0
IG9mIGJpbmFyeSBwcm9wZXJ0eSBsaXN0cy4KKy8vIENvdmVycyBvbmx5IHdoYXQncyBuZWVkZWQg
Zm9yIHdyaXRpbmcgYnJvd3NlciBoaXN0b3J5IGFzIG9mIHRoaXMgd3JpdGluZy4KK2NsYXNzIEJp
bmFyeVByb3BlcnR5TGlzdE9iamVjdFN0cmVhbSB7CitwdWJsaWM6CisgICAgLy8gQ2FsbCB3cml0
ZUJvb2xlYW5UcnVlIHRvIHdyaXRlIHRoZSBib29sZWFuIHRydWUgdmFsdWUuCisgICAgLy8gQSBz
aW5nbGUgc2hhcmVkIG9iamVjdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHNlcmlhbGl6ZWQgbGlzdC4K
KyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCb29sZWFuVHJ1ZSgpID0gMDsKKworICAgIC8vIENhbGwg
d3JpdGVJbnRlZ2VyIHRvIHdyaXRlIGFuIGludGVnZXIgdmFsdWUuCisgICAgLy8gQSBzaW5nbGUg
c2hhcmVkIG9iamVjdCB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggaW50ZWdlciBpbiB0aGUgc2VyaWFs
aXplZCBsaXN0LgorICAgIHZpcnR1YWwgdm9pZCB3cml0ZUludGVnZXIoaW50KSA9IDA7CisKKyAg
ICAvLyBDYWxsIHdyaXRlU3RyaW5nIHRvIHdyaXRlIGEgc3RyaW5nIHZhbHVlLgorICAgIC8vIEEg
c2luZ2xlIHNoYXJlZCBvYmplY3Qgd2lsbCBiZSB1c2VkIGZvciBlYWNoIHN0cmluZyBpbiB0aGUg
c2VyaWFsaXplZCBsaXN0LgorICAgIHZpcnR1YWwgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBTdHJp
bmcmKSA9IDA7CisKKyAgICAvLyBDYWxsIHdyaXRlVW5pcXVlU3RyaW5nIGluc3RlYWQgb2Ygd3Jp
dGVTdHJpbmcgd2hlbiBpdCdzIHVubGlrZWx5IHRoZQorICAgIC8vIHN0cmluZyB3aWxsIGJlIHdy
aXR0ZW4gdHdpY2UgaW4gdGhlIHNhbWUgcHJvcGVydHkgbGlzdDsgdGhpcyBzYXZlcyBoYXNoCisg
ICAgLy8gdGFibGUgb3ZlcmhlYWQgZm9yIHN1Y2ggc3RyaW5ncy4gQSBzZXBhcmF0ZSBvYmplY3Qg
d2lsbCBiZSB1c2VkIGZvciBlYWNoCisgICAgLy8gb2YgdGhlc2Ugc3RyaW5ncyBpbiB0aGUgc2Vy
aWFsaXplZCBsaXN0LgorICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVuaXF1ZVN0cmluZyhjb25zdCBT
dHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlVW5pcXVlU3RyaW5nKGNvbnN0IGNo
YXIqKSA9IDA7CisKKyAgICAvLyBDYWxsIHdyaXRlSW50ZWdlckFycmF5IGluc3RlYWQgb2Ygd3Jp
dGVBcnJheVN0YXJ0L3dyaXRlQXJyYXlFbmQgZm9yCisgICAgLy8gYXJyYXlzIGVudGlyZWx5IGNv
bXBvc2VkIG9mIGludGVnZXJzLiBBIHNpbmdsZSBzaGFyZWQgb2JqZWN0IHdpbGwgYmUgdXNlZAor
ICAgIC8vIGZvciBlYWNoIGlkZW50aWNhbCBhcnJheSBpbiB0aGUgc2VyaWFsaXplZCBsaXN0LiBX
YXJuaW5nOiBUaGUgaW50ZWdlcgorICAgIC8vIHBvaW50ZXIgbXVzdCByZW1haW4gdmFsaWQgdW50
aWwgdGhlIHdyaXRlQmluYXJ5UHJvcGVydHlMaXN0IGZ1bmN0aW9uCisgICAgLy8gcmV0dXJucywg
YmVjYXVzZSB0aGVzZSBsaXN0cyBhcmUgcHV0IGludG8gYSBoYXNoIHRhYmxlIHdpdGhvdXQgY29w
eWluZworICAgIC8vIHRoZW0gLS0gdGhhdCdzIE9LIGlmIHRoZSBjbGllbnQgYWxyZWFkeSBoYXMg
YSBWZWN0b3I8aW50Pi4KKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVJbnRlZ2VyQXJyYXkoY29uc3Qg
aW50Kiwgc2l6ZV90KSA9IDA7CisKKyAgICAvLyBBZnRlciBjYWxsaW5nIHdyaXRlQXJyYXlTdGFy
dCwgd3JpdGUgYXJyYXkgZWxlbWVudHMuCisgICAgLy8gVGhlbiBjYWxsIHdyaXRlQXJyYXlFbmQs
IHBhc3NpbmcgaW4gdGhlIHJlc3VsdCBmcm9tIHdyaXRlQXJyYXlTdGFydC4KKyAgICAvLyBBIHNl
cGFyYXRlIG9iamVjdCB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggb2YgdGhlc2UgYXJyYXlzIGluIHRo
ZSBzZXJpYWxpemVkIGxpc3QuCisgICAgdmlydHVhbCBzaXplX3Qgd3JpdGVBcnJheVN0YXJ0KCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUFycmF5RW5kKHNpemVfdCByZXN1bHRGcm9tV3Jp
dGVBcnJheVN0YXJ0KSA9IDA7CisKKyAgICAvLyBBZnRlciBjYWxsaW5nIHdyaXRlRGljdGlvbmFy
eVN0YXJ0LCB3cml0ZSBhbGwga2V5cywgdGhlbiBhbGwgdmFsdWVzLgorICAgIC8vIFRoZW4gY2Fs
bCB3cml0ZURpY3Rpb25hcnlFbmQsIHBhc3NpbmcgaW4gdGhlIHJlc3VsdCBmcm9tIHdyaXRlRGlj
dGlvbmFyeVN0YXJ0LgorICAgIC8vIEEgc2VwYXJhdGUgb2JqZWN0IHdpbGwgYmUgdXNlZCBmb3Ig
ZWFjaCBkaWN0aW9uYXJ5IGluIHRoZSBzZXJpYWxpemVkIGxpc3QuCisgICAgdmlydHVhbCBzaXpl
X3Qgd3JpdGVEaWN0aW9uYXJ5U3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlRGlj
dGlvbmFyeUVuZChzaXplX3QgcmVzdWx0RnJvbVdyaXRlRGljdGlvbmFyeVN0YXJ0KSA9IDA7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5CaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0o
KSB7IH0KK307CisKK2NsYXNzIEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlciB7CitwdWJsaWM6Cisg
ICAgLy8gQ2FsbHMgd3JpdGVPYmplY3RzIG9uY2UgdG8gcHJlcGFyZSBmb3Igd3JpdGluZyBhbmQg
ZGV0ZXJtaW5lIGhvdyBiaWcgYQorICAgIC8vIGJ1ZmZlciBpcyByZXF1aXJlZC4gVGhlbiBjYWxs
cyBidWZmZXIgdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZWx5LXNpemVkCisgICAgLy8gYnVmZmVyLCB0
aGVuIGNhbGxzIHdyaXRlT2JqZWN0cyBhIHNlY29uZCB0aW1lIGFuZCB3cml0ZXMgdGhlIHByb3Bl
cnR5IGxpc3QuCisgICAgdm9pZCB3cml0ZVByb3BlcnR5TGlzdCgpOworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+QmluYXJ5UHJvcGVydHlMaXN0V3JpdGVyKCkgeyB9CisKK3ByaXZhdGU6Cisg
ICAgLy8gQ2FsbGVkIGJ5IHdyaXRlUHJvcGVydHlMaXN0LgorICAgIC8vIE11c3QgY2FsbCB0aGUg
b2JqZWN0IHN0cmVhbSBmdW5jdGlvbnMgZm9yIHRoZSBvYmplY3RzIHRvIGJlIHdyaXR0ZW4KKyAg
ICAvLyBpbnRvIHRoZSBwcm9wZXJ0eSBsaXN0LgorICAgIHZpcnR1YWwgdm9pZCB3cml0ZU9iamVj
dHMoQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJikgPSAwOworCisgICAgLy8gQ2FsbGVk
IGJ5IHdyaXRlUHJvcGVydHlMaXN0LgorICAgIC8vIFJldHVybnMgdGhlIGJ1ZmZlciB0aGF0IHRo
ZSB3cml0ZXIgc2hvdWxkIHdyaXRlIGludG8uCisgICAgdmlydHVhbCBVSW50OCogYnVmZmVyKHNp
emVfdCkgPSAwOworCisgICAgZnJpZW5kIGNsYXNzIEJpbmFyeVByb3BlcnR5TGlzdFBsYW47Cisg
ICAgZnJpZW5kIGNsYXNzIEJpbmFyeVByb3BlcnR5TGlzdFNlcmlhbGl6ZXI7Cit9OworCisjZW5k
aWYgLy8gQmluYXJ5UHJvcGVydHlMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0
b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3YTFkMmEwMzAxMDk2Y2E0
ZGQ5ZWQyYzE4MTdlZDkwODc4MThmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9IaXN0b3J5L0hpc3RvcnlQcm9wZXJ0eUxpc3QuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJI
aXN0b3J5UHJvcGVydHlMaXN0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+
CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RhdGljIGNvbnN0IGludCBjdXJyZW50RmlsZVZlcnNpb24gPSAxOworCitIaXN0b3J5
UHJvcGVydHlMaXN0V3JpdGVyOjpIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyKCkKKyAgICA6IG1f
ZGFpbHlWaXNpdENvdW50c0tleSgiRCIpCisgICAgLCBtX2Rpc3BsYXlUaXRsZUtleSgiZGlzcGxh
eVRpdGxlIikKKyAgICAsIG1fbGFzdFZpc2l0V2FzRmFpbHVyZUtleSgibGFzdFZpc2l0V2FzRmFp
bHVyZSIpCisgICAgLCBtX2xhc3RWaXNpdFdhc0hUVFBOb25HZXRLZXkoImxhc3RWaXNpdFdhc0hU
VFBOb25HZXQiKQorICAgICwgbV9sYXN0VmlzaXRlZERhdGVLZXkoImxhc3RWaXNpdGVkRGF0ZSIp
CisgICAgLCBtX3JlZGlyZWN0VVJMc0tleSgicmVkaXJlY3RVUkxzIikKKyAgICAsIG1fdGl0bGVL
ZXkoInRpdGxlIikKKyAgICAsIG1fdXJsS2V5KCIiKQorICAgICwgbV92aXNpdENvdW50S2V5KCJ2
aXNpdENvdW50IikKKyAgICAsIG1fd2Vla2x5VmlzaXRDb3VudHNLZXkoIlciKQorICAgICwgbV9i
dWZmZXIoMCkKK3sKK30KKworVUludDgqIEhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXI6OmJ1ZmZl
cihzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQoIW1fYnVmZmVyKTsKKyAgICBtX2J1ZmZlciA9
IHN0YXRpY19jYXN0PFVJbnQ4Kj4oQ0ZBbGxvY2F0b3JBbGxvY2F0ZSgwLCBzaXplLCAwKSk7Cisg
ICAgbV9idWZmZXJTaXplID0gc2l6ZTsKKyAgICByZXR1cm4gbV9idWZmZXI7Cit9CisKK1JldGFp
blB0cjxDRkRhdGFSZWY+IEhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXI6OnJlbGVhc2VEYXRhKCkK
K3sKKyAgICBVSW50OCogYnVmZmVyID0gbV9idWZmZXI7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybiAwOworICAgIG1fYnVmZmVyID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgYnVmZmVyLCBt
X2J1ZmZlclNpemUsIDApKTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgQ0ZBbGxvY2F0b3JE
ZWFsbG9jYXRlKDAsIGJ1ZmZlcik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1
cm4gZGF0YTsKK30KKwordm9pZCBIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyOjp3cml0ZU9iamVj
dHMoQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJiBzdHJlYW0pCit7CisgICAgc2l6ZV90
IG91dGVyRGljdGlvbmFyeVN0YXJ0ID0gc3RyZWFtLndyaXRlRGljdGlvbmFyeVN0YXJ0KCk7CisK
KyAgICBzdHJlYW0ud3JpdGVTdHJpbmcoIldlYkhpc3RvcnlGaWxlVmVyc2lvbiIpOworICAgIHN0
cmVhbS53cml0ZVN0cmluZygiV2ViSGlzdG9yeURhdGVzIik7CisKKyAgICBzdHJlYW0ud3JpdGVJ
bnRlZ2VyKGN1cnJlbnRGaWxlVmVyc2lvbik7CisgICAgc2l6ZV90IG91dGVyRGF0ZUFycmF5U3Rh
cnQgPSBzdHJlYW0ud3JpdGVBcnJheVN0YXJ0KCk7CisgICAgd3JpdGVIaXN0b3J5SXRlbXMoc3Ry
ZWFtKTsKKyAgICBzdHJlYW0ud3JpdGVBcnJheUVuZChvdXRlckRhdGVBcnJheVN0YXJ0KTsKKwor
ICAgIHN0cmVhbS53cml0ZURpY3Rpb25hcnlFbmQob3V0ZXJEaWN0aW9uYXJ5U3RhcnQpOworfQor
Cit2b2lkIEhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXI6OndyaXRlSGlzdG9yeUl0ZW0oQmluYXJ5
UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJiBzdHJlYW0sIEhpc3RvcnlJdGVtKiBpdGVtKQorewor
ICAgIHNpemVfdCBpdGVtRGljdGlvbmFyeVN0YXJ0ID0gc3RyZWFtLndyaXRlRGljdGlvbmFyeVN0
YXJ0KCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHRpdGxlID0gaXRlbS0+dGl0bGUoKTsKKyAgICBj
b25zdCBTdHJpbmcmIGRpc3BsYXlUaXRsZSA9IGl0ZW0tPmFsdGVybmF0ZVRpdGxlKCk7CisgICAg
ZG91YmxlIGxhc3RWaXNpdGVkRGF0ZSA9IGl0ZW0tPmxhc3RWaXNpdGVkVGltZSgpOworICAgIGlu
dCB2aXNpdENvdW50ID0gaXRlbS0+dmlzaXRDb3VudCgpOworICAgIFZlY3RvcjxTdHJpbmc+KiBy
ZWRpcmVjdFVSTHMgPSBpdGVtLT5yZWRpcmVjdFVSTHMoKTsKKyAgICBjb25zdCBWZWN0b3I8aW50
PiYgZGFpbHlWaXNpdENvdW50cyA9IGl0ZW0tPmRhaWx5VmlzaXRDb3VudHMoKTsKKyAgICBjb25z
dCBWZWN0b3I8aW50PiYgd2Vla2x5VmlzaXRDb3VudHMgPSBpdGVtLT53ZWVrbHlWaXNpdENvdW50
cygpOworCisgICAgLy8ga2V5cworICAgIHN0cmVhbS53cml0ZVN0cmluZyhtX3VybEtleSk7Cisg
ICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHN0cmVhbS53cml0ZVN0cmluZyhtX3Rp
dGxlS2V5KTsKKyAgICBpZiAoIWRpc3BsYXlUaXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHN0cmVh
bS53cml0ZVN0cmluZyhtX2Rpc3BsYXlUaXRsZUtleSk7CisgICAgaWYgKGxhc3RWaXNpdGVkRGF0
ZSkKKyAgICAgICAgc3RyZWFtLndyaXRlU3RyaW5nKG1fbGFzdFZpc2l0ZWREYXRlS2V5KTsKKyAg
ICBpZiAodmlzaXRDb3VudCkKKyAgICAgICAgc3RyZWFtLndyaXRlU3RyaW5nKG1fdmlzaXRDb3Vu
dEtleSk7CisgICAgaWYgKGl0ZW0tPmxhc3RWaXNpdFdhc0ZhaWx1cmUoKSkKKyAgICAgICAgc3Ry
ZWFtLndyaXRlU3RyaW5nKG1fbGFzdFZpc2l0V2FzRmFpbHVyZUtleSk7CisgICAgaWYgKGl0ZW0t
Pmxhc3RWaXNpdFdhc0hUVFBOb25HZXQoKSkKKyAgICAgICAgc3RyZWFtLndyaXRlU3RyaW5nKG1f
bGFzdFZpc2l0V2FzSFRUUE5vbkdldEtleSk7CisgICAgaWYgKHJlZGlyZWN0VVJMcykKKyAgICAg
ICAgc3RyZWFtLndyaXRlU3RyaW5nKG1fcmVkaXJlY3RVUkxzS2V5KTsKKyAgICBpZiAoIWRhaWx5
VmlzaXRDb3VudHMuaXNFbXB0eSgpKQorICAgICAgICBzdHJlYW0ud3JpdGVTdHJpbmcobV9kYWls
eVZpc2l0Q291bnRzS2V5KTsKKyAgICBpZiAoIXdlZWtseVZpc2l0Q291bnRzLmlzRW1wdHkoKSkK
KyAgICAgICAgc3RyZWFtLndyaXRlU3RyaW5nKG1fd2Vla2x5VmlzaXRDb3VudHNLZXkpOworCisg
ICAgLy8gdmFsdWVzCisgICAgc3RyZWFtLndyaXRlVW5pcXVlU3RyaW5nKGl0ZW0tPnVybFN0cmlu
ZygpKTsKKyAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgc3RyZWFtLndyaXRlU3Ry
aW5nKHRpdGxlKTsKKyAgICBpZiAoIWRpc3BsYXlUaXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHN0
cmVhbS53cml0ZVN0cmluZyhkaXNwbGF5VGl0bGUpOworICAgIGlmIChsYXN0VmlzaXRlZERhdGUp
IHsKKyAgICAgICAgY2hhciBidWZmZXJbMzJdOworICAgICAgICBzbnByaW50ZihidWZmZXIsIHNp
emVvZihidWZmZXIpLCAiJS4xbGYiLCBsYXN0VmlzaXRlZERhdGUpOworICAgICAgICBzdHJlYW0u
d3JpdGVVbmlxdWVTdHJpbmcoYnVmZmVyKTsKKyAgICB9CisgICAgaWYgKHZpc2l0Q291bnQpCisg
ICAgICAgIHN0cmVhbS53cml0ZUludGVnZXIodmlzaXRDb3VudCk7CisgICAgaWYgKGl0ZW0tPmxh
c3RWaXNpdFdhc0ZhaWx1cmUoKSkKKyAgICAgICAgc3RyZWFtLndyaXRlQm9vbGVhblRydWUoKTsK
KyAgICBpZiAoaXRlbS0+bGFzdFZpc2l0V2FzSFRUUE5vbkdldCgpKSB7CisgICAgICAgIEFTU0VS
VChpdGVtLT51cmxTdHJpbmcoKS5zdGFydHNXaXRoKCJodHRwOiIsIGZhbHNlKSB8fCBpdGVtLT51
cmxTdHJpbmcoKS5zdGFydHNXaXRoKCJodHRwczoiLCBmYWxzZSkpOworICAgICAgICBzdHJlYW0u
d3JpdGVCb29sZWFuVHJ1ZSgpOworICAgIH0KKyAgICBpZiAocmVkaXJlY3RVUkxzKSB7CisgICAg
ICAgIHNpemVfdCByZWRpcmVjdEFycmF5U3RhcnQgPSBzdHJlYW0ud3JpdGVBcnJheVN0YXJ0KCk7
CisgICAgICAgIHNpemVfdCBzaXplID0gcmVkaXJlY3RVUkxzLT5zaXplKCk7CisgICAgICAgIEFT
U0VSVChzaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisg
ICAgICAgICAgICBzdHJlYW0ud3JpdGVVbmlxdWVTdHJpbmcocmVkaXJlY3RVUkxzLT5hdChpKSk7
CisgICAgICAgIHN0cmVhbS53cml0ZUFycmF5RW5kKHJlZGlyZWN0QXJyYXlTdGFydCk7CisgICAg
fQorICAgIGlmIChzaXplX3Qgc2l6ZSA9IGRhaWx5VmlzaXRDb3VudHMuc2l6ZSgpKQorICAgICAg
ICBzdHJlYW0ud3JpdGVJbnRlZ2VyQXJyYXkoZGFpbHlWaXNpdENvdW50cy5kYXRhKCksIHNpemUp
OworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHdlZWtseVZpc2l0Q291bnRzLnNpemUoKSkKKyAgICAg
ICAgc3RyZWFtLndyaXRlSW50ZWdlckFycmF5KHdlZWtseVZpc2l0Q291bnRzLmRhdGEoKSwgc2l6
ZSk7CisKKyAgICBzdHJlYW0ud3JpdGVEaWN0aW9uYXJ5RW5kKGl0ZW1EaWN0aW9uYXJ5U3RhcnQp
OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L0hpc3RvcnlQcm9w
ZXJ0eUxpc3QuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvSGlzdG9yeVByb3BlcnR5TGlz
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmUyYmYzNWFjY2MxMWM1NTQwMDU2ODkzZmNmNzQzNGNmMzE5ZjkwZDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L0hpc3RvcnlQcm9w
ZXJ0eUxpc3QuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGlzdG9yeVByb3BlcnR5TGlzdF9oCisjZGVmaW5l
IEhpc3RvcnlQcm9wZXJ0eUxpc3RfaAorCisjaW5jbHVkZSAiQmluYXJ5UHJvcGVydHlMaXN0Lmgi
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIaXN0b3J5SXRlbTsKK30KKworY2xh
c3MgSGlzdG9yeVByb3BlcnR5TGlzdFdyaXRlciA6IHB1YmxpYyBCaW5hcnlQcm9wZXJ0eUxpc3RX
cml0ZXIgeworcHVibGljOgorICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHJlbGVhc2VEYXRhKCk7
CisKK3Byb3RlY3RlZDoKKyAgICBIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyKCk7CisKKyAgICB2
b2lkIHdyaXRlSGlzdG9yeUl0ZW0oQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJiwgV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVI
aXN0b3J5SXRlbXMoQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJikgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHdyaXRlT2JqZWN0cyhCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0m
KTsKKyAgICB2aXJ0dWFsIFVJbnQ4KiBidWZmZXIoc2l6ZV90KTsKKworICAgIGNvbnN0IFN0cmlu
ZyBtX2RhaWx5VmlzaXRDb3VudHNLZXk7CisgICAgY29uc3QgU3RyaW5nIG1fZGlzcGxheVRpdGxl
S2V5OworICAgIGNvbnN0IFN0cmluZyBtX2xhc3RWaXNpdFdhc0ZhaWx1cmVLZXk7CisgICAgY29u
c3QgU3RyaW5nIG1fbGFzdFZpc2l0V2FzSFRUUE5vbkdldEtleTsKKyAgICBjb25zdCBTdHJpbmcg
bV9sYXN0VmlzaXRlZERhdGVLZXk7CisgICAgY29uc3QgU3RyaW5nIG1fcmVkaXJlY3RVUkxzS2V5
OworICAgIGNvbnN0IFN0cmluZyBtX3RpdGxlS2V5OworICAgIGNvbnN0IFN0cmluZyBtX3VybEtl
eTsKKyAgICBjb25zdCBTdHJpbmcgbV92aXNpdENvdW50S2V5OworICAgIGNvbnN0IFN0cmluZyBt
X3dlZWtseVZpc2l0Q291bnRzS2V5OworCisgICAgVUludDgqIG1fYnVmZmVyOworICAgIHNpemVf
dCBtX2J1ZmZlclNpemU7Cit9OworCisjZW5kaWYgLy8gSGlzdG9yeVByb3BlcnR5TGlzdF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KaW5kZXggNTkxY2MwNGIwYTVkMTQ2
YzBhNWM3YjJhNDViMmQ1YWNkZDAxOTNiOC4uZTA4YmZhZDNmMmMwYTdlZDNkMzQzMDg1OGZhMzkw
NzkyOWU0YzJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0
b3J5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQpAQCAt
MjgsMTIgKzI4LDEyIEBACiAKICNpbXBvcnQgIldlYkhpc3RvcnlJbnRlcm5hbC5oIgogCisjaW1w
b3J0ICJIaXN0b3J5UHJvcGVydHlMaXN0LmgiCiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbUludGVy
bmFsLmgiCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1wb3J0ICJXZWJOU1VSTEV4dHJh
cy5oIgogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0
b3J5SXRlbS5oPgotI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5UHJvcGVydHlMaXN0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
</data>
<flag name="review"
          id="224269"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>