<?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>146224</bug_id>
          
          <creation_ts>2015-06-22 18:32:04 -0700</creation_ts>
          <short_desc>Rename PlatformCA*Mac to PlatformCA*Cocoa</short_desc>
          <delta_ts>2015-06-22 18:52:18 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1103990</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-06-22 18:32:04 -0700</bug_when>
    <thetext>Rename PlatformCA*Mac to PlatformCA*Cocoa</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103991</commentid>
    <comment_count>1</comment_count>
      <attachid>255387</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-06-22 18:43:38 -0700</bug_when>
    <thetext>Created attachment 255387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103992</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-06-22 18:48:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/21497182&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103995</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-06-22 18:52:18 -0700</bug_when>
    <thetext>Committed r185856: &lt;http://trac.webkit.org/changeset/185856&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255387</attachid>
            <date>2015-06-22 18:43:38 -0700</date>
            <delta_ts>2015-06-22 18:44:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146224-20150623114252.patch</filename>
            <type>text/plain</type>
            <size>254695</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGNmYzA2ZTViZmZjM2Zi
NTRiY2EzZWIyZWZhN2I4OGZlZTY3Y2U0OS4uNzg5M2M2NWQxNmY0NGZkZTgwMmMxMjM2M2IwZTc0
NTYyNjQzODFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM0IEBACiAyMDE1LTA2LTIyICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW5hbWUgUGxhdGZvcm1DQSpN
YWMgdG8gUGxhdGZvcm1DQSpDb2NvYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ2MjI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVuYW1lIFBsYXRmb3JtQ0FMYXllck1hYyBhbmQgcmVsYXRlZCBmaWxl
cyBpbiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMKKyAgICAgICAgdG8gdGhlIG1vcmUgYWNjdXJh
dGUgQ29jb2Egc3VmZml4LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW06
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJG
bHVzaFNjaGVkdWxlck1hYy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0u
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29j
b2EuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxl
ZEJhY2tpbmdMYXllci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dl
YlRpbGVkQmFja2luZ0xheWVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMu
bW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1h
Yy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5n
TGF5ZXIubW06CisKKzIwMTUtMDYtMjIgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgor
CiAgICAgICAgIEVsZW1lbnQgd2l0aCBibHVyIGJhY2tkcm9wLWZpbHRlciBzaG93cyBlZGdlIGR1
cGxpY2F0aW9uIGFuZCBkYXJrIGVkZ2VzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDYyMTUKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIwMzY3Njk1
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGJmYWY2YjE3NWMwZDU3NDFhMDFkYzhlYzliNDI0OTY2MWNkNmEwMDQu
Ljk3NWIxNGJiOTFmN2VmZjlmZTJjZTY5YzlkNmYzZWQwOGMxZTkzNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxNS0wNi0yMiAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+
CisKKyAgICAgICAgUmVuYW1lIFBsYXRmb3JtQ0EqTWFjIHRvIFBsYXRmb3JtQ0EqQ29jb2EKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjIyNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBQbGF0
Zm9ybUNBTGF5ZXJNYWMgYW5kIHJlbGF0ZWQgZmlsZXMgaW4gcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjCisgICAgICAgIHRvIHRoZSBtb3JlIGFjY3VyYXRlIENvY29hIHN1ZmZpeC4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FMYXllclJlbW90ZTo6ZmlsdGVyc0NhbkJl
Q29tcG9zaXRlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b20ubW06CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FMYXllclJl
bW90ZUN1c3RvbTo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmNvbW1pdFRyYW5zaWVudFpv
b20pOgorCiAyMDE1LTA2LTIyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+
CiAKICAgICAgICAgU2ltcGxpZnkgQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE5
YjQ1ZmM2NGY1Njc5N2ExYTExMzI1MWYwMDY2ZTJiMTEwYjI1N2QuLjM0YmUyMjExYWRiMDVmZmRm
Mzc2NjQxZTE0N2JhZDY2ZjYxZGQ5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2OSw3ICs0NjksNyBAQAogCQkwRjA5OUQw
OTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA5OUQwNzE3Qjk2OEEx
MDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMUE1NEYwRjM5MjMzMTAwQzM3
ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxl
Y3Rpb25JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYxMzE2M0UxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2RUQw
Q0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjEzMTY0MDE2RUQwQ0RFMDAzNUNDMDQgLyog
UGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRl
cnNNYWMubW0gKi87IH07CisJCTBGMTMxNjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNB
RmlsdGVyc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzQ29jb2Eu
bW0gKi87IH07CiAJCTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxNURBODkwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
LmggKi87IH07CiAJCTBGMTc3NDgwMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0
N0UxMzc4Qjc3MTAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggKi87IH07CiAJCTBGMTc3
NDgxMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTc3NDdGMTM3OEI3NzIwMDlEQTc2
QSAvKiBTY3JvbGxBbmltYXRvcklPUy5tbSAqLzsgfTsKQEAgLTUxMSw3ICs1MTEsNyBAQAogCQkw
RjU4MEZBRjE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBRTE0OTgwMEQ0MDBG
QjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QjdBNTQxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNUI3QTUyMTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVj
dC5jcHAgKi87IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRl
ZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY1RTIwMDYxOEU3
NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25NYWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUUyMDA1MThFNzcxRkMwMDNFQzNFNSAv
KiBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1RTIwMDYxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1RTIwMDUxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjA1QUVDMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwNUFFQTE1Rjk0
ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwICovOyB9OwogCQkwRjYwNUFF
RDE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjA1QUVCMTVGOTQ4NDgwMDRERjBD
MCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNjM4M0REMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRl
ZFNjcm9sbGluZ1RyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJl
ZS5jcHAgKi87IH07CkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCQkyRDVDOUQwMTE5QzdCNTJFMDBC
M0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZEMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuY3BwICovOyB9OwogCQkyRDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlD
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMkQ2RTQ2ODQxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRvY3VtZW50SW1hZ2VNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZFNDY4MjE3
RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLzsgfTsKLQkJMkQ3MEJB
MTMxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ3MEJBMTIxODA3NERERjAwMDE5MDhB
IC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNB
TGF5ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ3MEJBMTIxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllckNvY29hLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ3MEJBMTUx
ODA3NEY4NjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExNDE4MDc0Rjg1MDAwMTkwOEEgLyog
UGxhdGZvcm1DQUxheWVyLmNwcCAqLzsgfTsKIAkJMkQ3NkJCODIxOTQ1NjMyNDAwQ0ZEMjlBIC8q
IFJ1bkxvb3BPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ3NkJCODAxOTQ1NjMyNDAwQ0ZEMjlBIC8qIFJ1bkxvb3BPYnNlcnZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENzZCQjg0
MTk0NTZGODEwMENGRDI5QSAvKiBSdW5Mb29wT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ3NkJCODMxOTQ1NkY4MTAwQ0ZEMjlBIC8q
IFJ1bkxvb3BPYnNlcnZlci5jcHAgKi87IH07CkBAIC0xNjc4LDggKzE2NzgsOCBAQAogCQk0OTRC
RDc5NTBGNTVDOEVFMDA3NDc4MjggLyogV2ViS2l0UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEJENzkzMEY1NUM4RUUwMDc0NzgyOCAvKiBX
ZWJLaXRQb2ludC5oICovOyB9OwogCQk0OTRCRDc5RDBGNTVDOTRDMDA3NDc4MjggLyogSlNXZWJL
aXRQb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OTRCRDc5QjBGNTVDOTRDMDA3NDc4MjggLyogSlNXZWJLaXRQb2ludC5jcHAgKi87IH07CiAJ
CTQ5NEJENzlFMEY1NUM5NEMwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCRDc5QzBGNTVDOTRDMDA3NDc4
MjggLyogSlNXZWJLaXRQb2ludC5oICovOyB9OwotCQk0OTU4NzgyMTEyQTU3RERGMDA3MjM4QUMg
LyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NTg3ODFGMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjLm1tICovOyB9OwotCQk0OTU4NzgyMjEyQTU3RERGMDA3MjM4QUMgLyogUGxh
dGZvcm1DQUxheWVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDk1ODc4MjAxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5t
bSAqLzsgfTsKKwkJNDk1ODc4MjExMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5NTg3ODFGMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0g
Ki87IH07CisJCTQ5NTg3ODIyMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NTg3
ODIwMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSAqLzsgfTsKIAkJ
NDk2OUIwRjIxM0QwQjMzRjAwREYzNTIxIC8qIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTY5QjBGMDEz
RDBCMzNGMDBERjM1MjEgLyogSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcCAqLzsgfTsKIAkJ
NDk2OUIwRjMxM0QwQjMzRjAwREYzNTIxIC8qIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk2OUIwRjExM0Qw
QjMzRjAwREYzNTIxIC8qIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oICovOyB9OwogCQk0OTgz
OTEzRjBGMUU3Njc1MDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxM0QwRjFFNzY3NTAwQzIz
NzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmNwcCAqLzsgfTsKQEAgLTc1NjEsNyArNzU2MSw3IEBA
CiAJCTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTFBNTRFMEYzOTIz
MzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNlbGVjdGlvbkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYxMzE2M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtQ0FGaWx0ZXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQ
bGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtQ0FGaWx0
ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVEQTg5MEYzQUFF
RTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xs
QW5pbWF0b3JJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5p
bWF0b3JJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNzc0N0YxMzc4Qjc3
MjAwOURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03NjA0LDcgKzc2MDQsNyBAQAogCQkwRjU4MEZBRTE0OTgwMEQ0MDBGQjVC
RDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFuaW1hdGlvblV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjVCN0E1MjEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCN0E1MzEwRjY1RDdBMDAzNzYzMDIg
LyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyRW1iZWRkZWRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEY1RTIwMDUxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25NYWMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVFMjAwNTE4RTc3MUZDMDAzRUMzRTUgLyog
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYwNUFFQTE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nQ29uc3RyYWlu
dHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwNUFFQjE1Rjk0ODQ4MDA0
REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsaW5nQ29uc3RyYWludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRlZFNjcm9sbGlu
Z1RyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODI4Myw3ICs4MjgzLDcg
QEAKIAkJMkQ1QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDVDOUNGRTE5QzdCNTJF
MDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBERkRvY3VtZW50
SW1hZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJENzBCQTEyMTgwNzRE
REYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGxhdGZvcm1DQUxheWVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDcwQkExNDE4MDc0Rjg1MDAwMTkwOEEg
LyogUGxhdGZvcm1DQUxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBsYXRmb3JtQ0FMYXllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
NzZCQjgwMTk0NTYzMjQwMENGRDI5QSAvKiBSdW5Mb29wT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUnVuTG9vcE9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJENzZCQjgzMTk0NTZGODEwMENGRDI5QSAvKiBSdW5Mb29wT2JzZXJ2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVuTG9vcE9ic2VydmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg4ODAsOCArODg4MCw4IEBACiAJ
CTQ5NEJENzk0MEY1NUM4RUUwMDc0NzgyOCAvKiBXZWJLaXRQb2ludC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gV2ViS2l0UG9pbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OTRCRDc5QjBGNTVDOTRDMDA3NDc4MjggLyogSlNXZWJLaXRQb2ludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdFBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk0QkQ3OUMwRjU1Qzk0QzAwNzQ3ODI4IC8qIEpTV2ViS2l0
UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRQb2ludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTU4NzgxRjEyQTU3RERGMDA3MjM4QUMg
LyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFBsYXRmb3JtQ0FBbmltYXRpb25NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5NTg3ODIwMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybUNB
TGF5ZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NTg3ODFGMTJBNTdE
REYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NTg3ODIwMTJBNTdEREYwMDcyMzhBQyAvKiBQ
bGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFBsYXRmb3JtQ0FMYXllckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0OTY5QjBGMDEzRDBCMzNGMDBERjM1MjEgLyogSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpdFRlc3RpbmdUcmFu
c2Zvcm1TdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5NjlCMEYxMTNE
MEIzM0YwMERGMzUyMSAvKiBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5ODM5MTNEMEYxRTc2NzUwMEMyMzc4MiAvKiBKU1dlYktp
dENTU01hdHJpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dl
YktpdENTU01hdHJpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjI2Niwx
OSArMTYyNjYsMTkgQEAKIAkJCXBhdGggPSBjYW52YXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OwotCQk0OTU4NzgxRTEyQTU3REJDMDA3MjM4QUMgLyogbWFjICovID0geworCQk0
OTU4NzgxRTEyQTU3REJDMDA3MjM4QUMgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTI5MTdCNTY1MTQ3MzQ5OTUwMDUyQzlEMCAvKiBMYXll
ckZsdXNoU2NoZWR1bGVyTWFjLmNwcCAqLywKLQkJCQkwRjVFMjAwNTE4RTc3MUZDMDAzRUMzRTUg
LyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oICovLAotCQkJCTQ5NTg3ODFGMTJBNTdEREYwMDcy
MzhBQyAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tICovLAotCQkJCTBGMTMxNjNGMTZFRDBD
REUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLywKLQkJCQkyRDcwQkExMjE4
MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggKi8sCi0JCQkJNDk1ODc4MjAx
MkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5tbSAqLywKKwkJCQkwRjVFMjAw
NTE4RTc3MUZDMDAzRUMzRTUgLyogUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmggKi8sCisJCQkJ
NDk1ODc4MUYxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbSAq
LywKKwkJCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNDb2Nv
YS5tbSAqLywKKwkJCQkyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVy
Q29jb2EuaCAqLywKKwkJCQk0OTU4NzgyMDEyQTU3RERGMDA3MjM4QUMgLyogUGxhdGZvcm1DQUxh
eWVyQ29jb2EubW0gKi8sCiAJCQkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVk
QmFja2luZ0xheWVyLmggKi8sCiAJCQkJMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRp
bGVkQmFja2luZ0xheWVyLm1tICovLAogCQkJKTsKLQkJCXBhdGggPSBtYWM7CisJCQlwYXRoID0g
Y29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwogCQk0OTg3NzBDMTEyNDJD
NTBEMDAyMjI2QkEgLyogZ3B1ICovID0gewpAQCAtMTYyOTUsNyArMTYyOTUsNyBAQAogCQk0OTlC
M0VDMDEyOENDQzE4MDBFNzI2QzIgLyogY2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTQ5NTg3ODFFMTJBNTdEQkMwMDcyMzhBQyAvKiBtYWMgKi8sCisJ
CQkJNDk1ODc4MUUxMkE1N0RCQzAwNzIzOEFDIC8qIGNvY29hICovLAogCQkJCTQ5OUIzRUQ0MTI4
Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuY3BwICovLAogCQkJCTQ5OUIzRUQ1MTI4
Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCAqLywKIAkJCQkyOTE3QjU1RTE0NzM0
OTZDMDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5jcHAgKi8sCkBAIC0yNjEwMSwxMSAr
MjYxMDEsMTEgQEAKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUQwRkYyQTVFMTFGOEM0NUEw
MDdFNzRFMCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTlCM0VERDEyOERC
NTAyMDBFNzI2QzIgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY1RTIwMDYxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25NYWMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNUUyMDA2MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTMxNjNFMTZFRDBDQzgwMDM1Q0Mw
NCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFQzUxMjhD
Q0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDkz
RTVFMDkxMkQ2NDIwNTAwMDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXllckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1h
Yy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhBIC8qIFBsYXRm
b3JtQ0FMYXllckNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ5Nzg3MTFBQkFGM0E1MDBD
RUY3RTQgLyogUGxhdGZvcm1Db250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTQy
NEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNUM3NjJCMTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2ZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTI5NjQ4LDEwICsyOTY0OCwxMCBAQAogCQkJCUZENTgxRkI0MTUyMEY5M0Iw
MDNBN0E3NSAvKiBQZXJpb2RpY1dhdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlENURDMkQw
RjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUQwRkYyQTVEMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTQ5NTg3ODIxMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9y
bUNBQW5pbWF0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYxMzE2NDAxNkVEMENERTAw
MzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNDk1
ODc4MjExMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTBGMTMxNjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmls
dGVyc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ3MEJBMTUxODA3NEY4NjAwMDE5MDhB
IC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OTU4NzgyMjEyQTU3
RERGMDA3MjM4QUMgLyogUGxhdGZvcm1DQUxheWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
NDk1ODc4MjIxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FMYXllckNvY29hLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQ0RFQTc2MzAxNDYwOEE1MzAwOEIzMUYxIC8qIFBsYXRmb3JtQ2xvY2tD
QS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREFBOEQwQTE0RDcxQjJFMDA2MUVBNjAgLyogUGxh
dGZvcm1DbG9ja0NNLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjY2MDFFQzAxNEIzQjlBRDAwMTJD
MEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpp
bmRleCBlODU1OTEwYWQ2NGVjZThmMDM4YjgyYzRhYzhkOTIwYzNlNmQ3NWQ4Li4yZDkwODBhMjBi
ODM5OGMwYjRiOWU0YTkwNWZiYzIyMjhlMjM2ZGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTQ2LDcgKzQ2LDcg
QEAKICNpbXBvcnQgIk1haW5GcmFtZS5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmgi
CisjaW1wb3J0ICJQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCIKICNpbXBvcnQgIlNldHRpbmdz
LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpIaWdobGlnaHQ6OmZhZGVJbigpCiAgICAgW2FuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0
aW9uOmZhbHNlXTsKICAgICBbYW5pbWF0aW9uIHNldFRvVmFsdWU6QDFdOwogCi0gICAgUmVmUHRy
PFBsYXRmb3JtQ0FBbmltYXRpb24+IHBsYXRmb3JtQW5pbWF0aW9uID0gUGxhdGZvcm1DQUFuaW1h
dGlvbk1hYzo6Y3JlYXRlKGFuaW1hdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FB
bmltYXRpb24+IHBsYXRmb3JtQW5pbWF0aW9uID0gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpj
cmVhdGUoYW5pbWF0aW9uLmdldCgpKTsKICAgICBkb3duY2FzdDxHcmFwaGljc0xheWVyQ0E+KCps
YXllcigpKS5wbGF0Zm9ybUNBTGF5ZXIoKS0+YWRkQW5pbWF0aW9uRm9yS2V5KCJGYWRlSGlnaGxp
Z2h0SW4iLCAqcGxhdGZvcm1BbmltYXRpb24pOwogfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9p
ZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmZhZGVPdXQoKQogICAgICAg
ICByZXRhaW5lZFNlbGYtPmRpZEZpbmlzaEZhZGVPdXRBbmltYXRpb24oKTsKICAgICB9XTsKIAot
ICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBwbGF0Zm9ybUFuaW1hdGlvbiA9IFBsYXRm
b3JtQ0FBbmltYXRpb25NYWM6OmNyZWF0ZShhbmltYXRpb24uZ2V0KCkpOworICAgIFJlZlB0cjxQ
bGF0Zm9ybUNBQW5pbWF0aW9uPiBwbGF0Zm9ybUFuaW1hdGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6Y3JlYXRlKGFuaW1hdGlvbi5nZXQoKSk7CiAgICAgZG93bmNhc3Q8R3JhcGhpY3NM
YXllckNBPigqbGF5ZXIoKSkucGxhdGZvcm1DQUxheWVyKCktPmFkZEFuaW1hdGlvbkZvcktleSgi
RmFkZUhpZ2hsaWdodE91dCIsICpwbGF0Zm9ybUFuaW1hdGlvbik7CiAgICAgW0NBVHJhbnNhY3Rp
b24gY29tbWl0XTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDczM2U4NjFmOWFhMmFkNWU1Y2M4ZThm
ZGQwYmIxZTk5YmJhZmJjZDkuLjQ1YjA1MzFmMGJiYjM0ZjA0MzExMWIxNTJkMGM3ZmZmZGFmOGQ2
ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmNwcApAQCAtNTMsOCArNTMsOCBAQAogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlICJQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1DQUxheWVyTWFjLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyQ29jb2EuaCIKICNpbmNsdWRlICJXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjZW5kaWYKIApAQCAtMjg5LDcgKzI4OSw3IEBAIGJvb2wg
R3JhcGhpY3NMYXllcjo6c3VwcG9ydHNMYXllclR5cGUoVHlwZSB0eXBlKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBjYXNlIFR5cGU6OlNoYXBlOgogI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
ICAgICAvLyBGSVhNRTogd2UgY2FuIHVzZSBzaGFwZXIgbGF5ZXJzIG9uIFdpbmRvd3Mgd2hlbiBQ
bGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFNoYXBlUGF0aCgpIGV0YyBhcmUgaW1wbGVtZW50ZWQuCisg
ICAgICAgIC8vIEZJWE1FOiB3ZSBjYW4gdXNlIHNoYXBlciBsYXllcnMgb24gV2luZG93cyB3aGVu
IFBsYXRmb3JtQ0FMYXllckNvY29hOjpzZXRTaGFwZVBhdGgoKSBldGMgYXJlIGltcGxlbWVudGVk
LgogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTMyMCw3ICszMjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBmYWN0bwogYm9vbCBHcmFwaGljc0xh
eWVyQ0E6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycykKIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVy
TWFjOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpOworICAgIHJldHVybiBQbGF0Zm9y
bUNBTGF5ZXJDb2NvYTo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKTsKICNlbGlmIFBM
QVRGT1JNKFdJTikKICAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVyV2luOjpmaWx0ZXJzQ2FuQmVD
b21wb3NpdGVkKGZpbHRlcnMpOwogI2VuZGlmCkBAIC0zMjksNyArMzI5LDcgQEAgYm9vbCBHcmFw
aGljc0xheWVyQ0E6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycykKIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6
OmNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5
cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKGxheWVyVHlwZSwgb3duZXIp
OworICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKGxheWVyVHlwZSwgb3du
ZXIpOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJXaW46
OmNyZWF0ZShsYXllclR5cGUsIG93bmVyKTsKICNlbmRpZgpAQCAtMzM4LDcgKzMzOCw3IEBAIFBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVBsYXRmb3Jt
Q0FMYXllcihQbGF0Zm9ybUNBTGF5CiBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhp
Y3NMYXllckNBOjpjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUocGxhdGZvcm1MYXllciwg
b3duZXIpOworICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHBsYXRmb3Jt
TGF5ZXIsIG93bmVyKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICByZXR1cm4gUGxhdGZvcm1D
QUxheWVyV2luOjpjcmVhdGUocGxhdGZvcm1MYXllciwgb3duZXIpOwogI2VuZGlmCkBAIC0zNDcs
NyArMzQ3LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQTo6
Y3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtTGF5ZXIKIFBhc3NSZWZQdHI8UGxhdGZvcm1D
QUFuaW1hdGlvbj4gR3JhcGhpY3NMYXllckNBOjpjcmVhdGVQbGF0Zm9ybUNBQW5pbWF0aW9uKFBs
YXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlvblR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoKQogewogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHJldHVybiBQbGF0Zm9ybUNBQW5pbWF0
aW9uTWFjOjpjcmVhdGUodHlwZSwga2V5UGF0aCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYTo6Y3JlYXRlKHR5cGUsIGtleVBhdGgpOwogI2VsaWYgUExBVEZPUk0oV0lOKQog
ICAgIHJldHVybiBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpjcmVhdGUodHlwZSwga2V5UGF0aCk7
CiAjZW5kaWYKQEAgLTEyMTksNyArMTIxOSw3IEBAIEdyYXBoaWNzTGF5ZXJDQTo6VmlzaWJsZUFu
ZENvdmVyYWdlUmVjdHMgR3JhcGhpY3NMYXllckNBOjpjb21wdXRlVmlzaWJsZUFuZENvdmVyCiAg
ICAgRmxvYXRQb2ludCBib3VuZHNPcmlnaW4gPSBtX2JvdW5kc09yaWdpbjsKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgLy8gSW4gV0sxLCBVSUtpdCBtYXkgYmUgY2hhbmdpbmcgbGF5ZXIgYm91bmRz
IGJlaGluZCBvdXIgYmFjayBpbiBvdmVyZmxvdy1zY3JvbGwgbGF5ZXJzLCBzbyB1c2UgdGhlIGxh
eWVyJ3Mgb3JpZ2luLgotICAgIGlmIChtX2xheWVyLT5pc1BsYXRmb3JtQ0FMYXllck1hYygpKQor
ICAgIGlmIChtX2xheWVyLT5pc1BsYXRmb3JtQ0FMYXllckNvY29hKCkpCiAgICAgICAgIGJvdW5k
c09yaWdpbiA9IG1fbGF5ZXItPmJvdW5kcygpLmxvY2F0aW9uKCk7CiAjZW5kaWYKICAgICBjbGlw
UmVjdEZvckNoaWxkcmVuLm1vdmUoYm91bmRzT3JpZ2luLngoKSwgYm91bmRzT3JpZ2luLnkoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9y
bUNBQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0
Zm9ybUNBQW5pbWF0aW9uLmgKaW5kZXggNTMzMTg5NjJmMDE4YjNiYzlkM2NlNTUwNDM4ZDUxMWM3
ZTM3ZDAzNy4uZWFkZDExN2Y2MjE5OTQxYTNhODg5ZjA0YTkwZDQyMzViMGUzMThmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FBbmltYXRpb24uaApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5Q
bGF0Zm9ybUNBQW5pbWF0aW9uKCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNQbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc1BsYXRmb3JtQ0FBbmltYXRpb25XaW4oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAppbmRleCAzMTJmOTIwNmEyMjUz
MzMwZjliOTRkODVhMGVhYWM3YzRhYTNlM2E2Li5hMDk3OTUwZjYyZTI1NDMyMDY0OTY3NGVjOTI0
ODk1ZjIwYzI2Yjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaApAQCAtNTYsNyArNTYsNyBAQCB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8UGxhdGZvcm1DQUxheWVyPj4gUGxhdGZvcm1DQUxheWVyTGlzdDsKIAogY2xhc3Mg
V0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1DQUxheWVyIDogcHVibGljIFJlZkNvdW50ZWQ8UGxhdGZv
cm1DQUxheWVyPiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJpZW5kIGNsYXNzIFBsYXRm
b3JtQ0FMYXllck1hYzsKKyAgICBmcmllbmQgY2xhc3MgUGxhdGZvcm1DQUxheWVyQ29jb2E7CiAj
ZWxpZiBQTEFURk9STShXSU4pCiAgICAgZnJpZW5kIGNsYXNzIFBsYXRmb3JtQ0FMYXllcldpbjsK
ICNlbmRpZgpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQgbGF5ZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJRDsgfQogCi0g
ICAgdmlydHVhbCBib29sIGlzUGxhdGZvcm1DQUxheWVyTWFjKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQbGF0Zm9ybUNBTGF5ZXJDb2NvYSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUGxhdGZvcm1DQUxheWVyUmVtb3Rl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b20oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9MYXllckZsdXNoU2No
ZWR1bGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29h
L0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZjhjZDIxNTU5MTEzMmY5
MmY4MzQ4Mzk5YzU4OWI3NTNlOTgyYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9MYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcApA
QCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXllckZsdXNoU2NoZWR1bGVy
LmgiCisKKyNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQb29sLmg+CisKKyNpZiBQTEFURk9STShJ
T1MpCisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ0ZCdW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBDRklu
ZGV4IGxheWVyRmx1c2hSdW5Mb29wT3JkZXIgPSAoQ0ZJbmRleClSdW5Mb29wT2JzZXJ2ZXI6Oldl
bGxLbm93blJ1bkxvb3BPcmRlcnM6OkNvcmVBbmltYXRpb25Db21taXQgLSAxOworCitzdGF0aWMg
Q0ZSdW5Mb29wUmVmIGN1cnJlbnRSdW5Mb29wKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gQSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgV2ViVmlldyBkZWFsbG9jYXRpb24gY2FuIGxlYWQg
dG8gYSBjcmFzaCBpZiB0aGUgbGF5ZXIgc3luYyBydW4gbG9vcAorICAgIC8vIG9ic2VydmVyIGlz
IGFkZGVkIHRvIHRoZSBtYWluIHJ1biBsb29wIDxyZGFyOi8vcHJvYmxlbS85Nzk4NTUwPi4gSG93
ZXZlciwgZm9yIHJlc3BvbnNpdmVuZXNzLAorICAgIC8vIHdlIHN0aWxsIGFsbG93IHRoaXMsIHNl
ZSA8cmRhcjovL3Byb2JsZW0vNzQwMzMyOD4uIFNpbmNlIHRoZSByYWNlIGNvbmRpdGlvbiBhbmQg
c3Vic2VxdWVudAorICAgIC8vIGNyYXNoIGFyZSBlc3BlY2lhbGx5IHRyb3VibGVzb21lIGZvciBp
Qm9va3MsIHdlIG5ldmVyIGFsbG93IHRoZSBvYnNlcnZlciB0byBiZSBhZGRlZCB0byB0aGUKKyAg
ICAvLyBtYWluIHJ1biBsb29wIGluIGlCb29rcy4KKyAgICBpZiAoYXBwbGljYXRpb25Jc0lCb29r
c09uSU9TKCkpCisgICAgICAgIHJldHVybiBXZWJUaHJlYWRSdW5Mb29wKCk7CisjZW5kaWYKKyAg
ICByZXR1cm4gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOworfQorCitMYXllckZsdXNoU2NoZWR1bGVy
OjpMYXllckZsdXNoU2NoZWR1bGVyKExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQqIGNsaWVudCkK
KyAgICA6IG1faXNTdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7Cisg
ICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7CisKKyAgICBtX3J1bkxvb3BPYnNlcnZlciA9
IFJ1bkxvb3BPYnNlcnZlcjo6Y3JlYXRlKGxheWVyRmx1c2hSdW5Mb29wT3JkZXIsIFt0aGlzXSgp
IHsKKyAgICAgICAgaWYgKHRoaXMtPmlzU3VzcGVuZGVkKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHRoaXMtPmxheWVyRmx1c2hDYWxsYmFjaygpOworICAgIH0pOworfQorCitMYXll
ckZsdXNoU2NoZWR1bGVyOjp+TGF5ZXJGbHVzaFNjaGVkdWxlcigpCit7Cit9CisKK3ZvaWQgTGF5
ZXJGbHVzaFNjaGVkdWxlcjo6bGF5ZXJGbHVzaENhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQoIW1f
aXNTdXNwZW5kZWQpOworCisgICAgQXV0b2RyYWluZWRQb29sIHBvb2w7CisgICAgaWYgKG1fY2xp
ZW50LT5mbHVzaExheWVycygpKQorICAgICAgICBpbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgTGF5
ZXJGbHVzaFNjaGVkdWxlcjo6c2NoZWR1bGUoKQoreworICAgIGlmIChtX2lzU3VzcGVuZGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3J1bkxvb3BPYnNlcnZlci0+c2NoZWR1bGUoY3VycmVu
dFJ1bkxvb3AoKSk7Cit9CisKK3ZvaWQgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6aW52YWxpZGF0ZSgp
Cit7CisgICAgbV9ydW5Mb29wT2JzZXJ2ZXItPmludmFsaWRhdGUoKTsKK30KKyAgICAKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWRhMzhkZmI3YjRkYzNiYmZkY2Y2MjBmOWIxMzE1YjI2Zjg5MmExNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29h
L1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hX2gKKyNkZWZpbmUgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hX2gKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworT0JKQ19DTEFTUyBDQU1lZGlhVGltaW5nRnVuY3Rpb247CitPQkpDX0NMQVNTIENBQW5p
bWF0aW9uOworT0JKQ19DTEFTUyBDQVByb3BlcnR5QW5pbWF0aW9uOworT0JKQ19DTEFTUyBOU1N0
cmluZzsKKwordHlwZWRlZiBDQVByb3BlcnR5QW5pbWF0aW9uKiBQbGF0Zm9ybUFuaW1hdGlvblJl
ZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXRUJDT1JFX0VYUE9SVCBOU1N0cmluZyogdG9D
QUZpbGxNb2RlVHlwZShQbGF0Zm9ybUNBQW5pbWF0aW9uOjpGaWxsTW9kZVR5cGUpOworV0VCQ09S
RV9FWFBPUlQgTlNTdHJpbmcqIHRvQ0FWYWx1ZUZ1bmN0aW9uVHlwZShQbGF0Zm9ybUNBQW5pbWF0
aW9uOjpWYWx1ZUZ1bmN0aW9uVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBDQU1lZGlhVGltaW5nRnVu
Y3Rpb24qIHRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiwgYm9v
bCByZXZlcnNlKTsKKworYm9vbCBoYXNFeHBsaWNpdEJlZ2luVGltZShDQUFuaW1hdGlvbiAqKTsK
K3ZvaWQgc2V0SGFzRXhwbGljaXRCZWdpblRpbWUoQ0FBbmltYXRpb24gKiwgYm9vbCk7CisKK2Ns
YXNzIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYSBmaW5hbCA6IHB1YmxpYyBQbGF0Zm9ybUNBQW5p
bWF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBjcmVhdGUoQW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjcmVh
dGUoUGxhdGZvcm1BbmltYXRpb25SZWYpOworCisgICAgdmlydHVhbCB+UGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2EoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY29weSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
UGxhdGZvcm1BbmltYXRpb25SZWYgcGxhdGZvcm1BbmltYXRpb24oKSBjb25zdDsKKyAgICAKKyAg
ICB2aXJ0dWFsIFN0cmluZyBrZXlQYXRoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdmly
dHVhbCBDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0QmVnaW5UaW1lKENGVGltZUludGVydmFsKSBvdmVycmlkZTsKKyAgICAKKyAg
ICB2aXJ0dWFsIENGVGltZUludGVydmFsIGR1cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldER1cmF0aW9uKENGVGltZUludGVydmFsKSBvdmVycmlkZTsKKyAgICAK
KyAgICB2aXJ0dWFsIGZsb2F0IHNwZWVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNldFNwZWVkKGZsb2F0KSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgQ0ZUaW1lSW50ZXJ2
YWwgdGltZU9mZnNldCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1l
T2Zmc2V0KENGVGltZUludGVydmFsKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgZmxvYXQgcmVw
ZWF0Q291bnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwZWF0Q291
bnQoZmxvYXQpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGF1dG9yZXZlcnNlcygpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvcmV2ZXJzZXMoYm9vbCkgb3Zl
cnJpZGU7CisKKyAgICB2aXJ0dWFsIEZpbGxNb2RlVHlwZSBmaWxsTW9kZSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxsTW9kZShGaWxsTW9kZVR5cGUpIG92ZXJyaWRl
OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdG
dW5jdGlvbiosIGJvb2wgcmV2ZXJzZSA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvcHlU
aW1pbmdGdW5jdGlvbkZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwor
CisgICAgdmlydHVhbCBib29sIGlzUmVtb3ZlZE9uQ29tcGxldGlvbigpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZXRSZW1vdmVkT25Db21wbGV0aW9uKGJvb2wpIG92ZXJyaWRl
OworCisgICAgdmlydHVhbCBib29sIGlzQWRkaXRpdmUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QWRkaXRpdmUoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFZh
bHVlRnVuY3Rpb25UeXBlIHZhbHVlRnVuY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVGdW5jdGlvbihWYWx1ZUZ1bmN0aW9uVHlwZSkgb3ZlcnJpZGU7CisK
KyAgICAvLyBCYXNpYy1hbmltYXRpb24gcHJvcGVydGllcy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RnJvbVZhbHVlKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbVZhbHVl
KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHNldEZyb21WYWx1ZShjb25zdCBGbG9hdFBvaW50M0QmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEZyb21WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24q
LCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weUZyb21WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJy
aWRlOworCisgICAgdmlydHVhbCB2b2lkIHNldFRvVmFsdWUoZmxvYXQpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFRvVmFsdWUoY29uc3QgRmxvYXRQ
b2ludDNEJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2Vi
Q29yZTo6Q29sb3ImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9WYWx1ZShjb25z
dCBGaWx0ZXJPcGVyYXRpb24qLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRvVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FB
bmltYXRpb24mKSBvdmVycmlkZTsKKworICAgIC8vIEtleWZyYW1lLWFuaW1hdGlvbiBwcm9wZXJ0
aWVzLgorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OlRyYW5zZm9ybWF0aW9uTWF0cml4PiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZXMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQzRD4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPj4mLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHNldEtleVRpbWVzKGNvbnN0IFZlY3Rvcjxm
bG9hdD4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weUtleVRpbWVzRnJvbShjb25z
dCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiwgYm9v
bCByZXZlcnNlID0gZmFsc2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGltaW5n
RnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CisKK3By
b3RlY3RlZDoKKyAgICBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EoQW5pbWF0aW9uVHlwZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoKTsKKyAgICBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EoUGxhdGZv
cm1BbmltYXRpb25SZWYpOworCitwcml2YXRlOgorICAgIFJldGFpblB0cjxDQVByb3BlcnR5QW5p
bWF0aW9uPiBtX2FuaW1hdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DQUFOSU1BVElPTihXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2EsIGlzUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKCkpCisKKyNlbmRpZiAvLyBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2FfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNkNDYzNTFmNjJjOTdkYTIzNTI5M2YwZTZkNzQ0NDM0M2M5OTEx
M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KQEAgLTAsMCArMSw1NzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2ltcG9ydCAiUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmgiCisKKyNpbXBvcnQg
IkZsb2F0Q29udmVyc2lvbi5oIgorI2ltcG9ydCAiUGxhdGZvcm1DQUZpbHRlcnMuaCIKKyNpbXBv
cnQgIlRpbWluZ0Z1bmN0aW9uLmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4K
KyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgV0tFeHBsaWNpdEJlZ2luVGltZUZsYWcgPSBA
IldLUGxhdGZvcm1DQUFuaW1hdGlvbkV4cGxpY2l0QmVnaW5UaW1lRmxhZyI7CisKK2Jvb2wgV2Vi
Q29yZTo6aGFzRXhwbGljaXRCZWdpblRpbWUoQ0FBbmltYXRpb24gKmFuaW1hdGlvbikKK3sKKyAg
ICByZXR1cm4gW1thbmltYXRpb24gdmFsdWVGb3JLZXk6V0tFeHBsaWNpdEJlZ2luVGltZUZsYWdd
IGJvb2xWYWx1ZV07Cit9CisKK3ZvaWQgV2ViQ29yZTo6c2V0SGFzRXhwbGljaXRCZWdpblRpbWUo
Q0FBbmltYXRpb24gKmFuaW1hdGlvbiwgYm9vbCB2YWx1ZSkKK3sKKyAgICBbYW5pbWF0aW9uIHNl
dFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDp2YWx1ZV0gZm9yS2V5OldLRXhwbGljaXRC
ZWdpblRpbWVGbGFnXTsKK30KKyAgICAKK05TU3RyaW5nKiBXZWJDb3JlOjp0b0NBRmlsbE1vZGVU
eXBlKFBsYXRmb3JtQ0FBbmltYXRpb246OkZpbGxNb2RlVHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9GaWxsTW9kZToKKyAg
ICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OkZvcndhcmRzOiByZXR1cm4ga0NBRmlsbE1vZGVG
b3J3YXJkczsKKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OkJhY2t3YXJkczogcmV0dXJu
IGtDQUZpbGxNb2RlQmFja3dhcmRzOworICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Qm90
aDogcmV0dXJuIGtDQUZpbGxNb2RlQm90aDsKKyAgICB9CisgICAgcmV0dXJuIEAiIjsKK30KKwor
c3RhdGljIFBsYXRmb3JtQ0FBbmltYXRpb246OkZpbGxNb2RlVHlwZSBmcm9tQ0FGaWxsTW9kZVR5
cGUoTlNTdHJpbmcqIHN0cmluZykKK3sKKyAgICBpZiAoW3N0cmluZyBpc0VxdWFsVG9TdHJpbmc6
a0NBRmlsbE1vZGVCYWNrd2FyZHNdKQorICAgICAgICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlv
bjo6QmFja3dhcmRzOworCisgICAgaWYgKFtzdHJpbmcgaXNFcXVhbFRvU3RyaW5nOmtDQUZpbGxN
b2RlQm90aF0pCisgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpCb3RoOworCisg
ICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246OkZvcndhcmRzOworfQorCitOU1N0cmluZyog
V2ViQ29yZTo6dG9DQVZhbHVlRnVuY3Rpb25UeXBlKFBsYXRmb3JtQ0FBbmltYXRpb246OlZhbHVl
RnVuY3Rpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb246IHJldHVybiBAIiI7CisgICAgY2FzZSBQ
bGF0Zm9ybUNBQW5pbWF0aW9uOjpSb3RhdGVYOiByZXR1cm4ga0NBVmFsdWVGdW5jdGlvblJvdGF0
ZVg7CisgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpSb3RhdGVZOiByZXR1cm4ga0NBVmFs
dWVGdW5jdGlvblJvdGF0ZVk7CisgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpSb3RhdGVa
OiByZXR1cm4ga0NBVmFsdWVGdW5jdGlvblJvdGF0ZVo7CisgICAgY2FzZSBQbGF0Zm9ybUNBQW5p
bWF0aW9uOjpTY2FsZVg6IHJldHVybiBrQ0FWYWx1ZUZ1bmN0aW9uU2NhbGVYOworICAgIGNhc2Ug
UGxhdGZvcm1DQUFuaW1hdGlvbjo6U2NhbGVZOiByZXR1cm4ga0NBVmFsdWVGdW5jdGlvblNjYWxl
WTsKKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlNjYWxlWjogcmV0dXJuIGtDQVZhbHVl
RnVuY3Rpb25TY2FsZVo7CisgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpTY2FsZTogcmV0
dXJuIGtDQVZhbHVlRnVuY3Rpb25TY2FsZTsKKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246
OlRyYW5zbGF0ZVg6IHJldHVybiBrQ0FWYWx1ZUZ1bmN0aW9uVHJhbnNsYXRlWDsKKyAgICBjYXNl
IFBsYXRmb3JtQ0FBbmltYXRpb246OlRyYW5zbGF0ZVk6IHJldHVybiBrQ0FWYWx1ZUZ1bmN0aW9u
VHJhbnNsYXRlWTsKKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlRyYW5zbGF0ZVo6IHJl
dHVybiBrQ0FWYWx1ZUZ1bmN0aW9uVHJhbnNsYXRlWjsKKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmlt
YXRpb246OlRyYW5zbGF0ZTogcmV0dXJuIGtDQVZhbHVlRnVuY3Rpb25UcmFuc2xhdGU7CisgICAg
fQorICAgIHJldHVybiBAIiI7Cit9CisKK3N0YXRpYyBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpWYWx1
ZUZ1bmN0aW9uVHlwZSBmcm9tQ0FWYWx1ZUZ1bmN0aW9uVHlwZShOU1N0cmluZyogc3RyaW5nKQor
eworICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0cmluZzprQ0FWYWx1ZUZ1bmN0aW9uUm90YXRl
WF0pCisgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpSb3RhdGVYOworCisgICAg
aWYgKFtzdHJpbmcgaXNFcXVhbFRvU3RyaW5nOmtDQVZhbHVlRnVuY3Rpb25Sb3RhdGVZXSkKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246OlJvdGF0ZVk7CisKKyAgICBpZiAoW3N0
cmluZyBpc0VxdWFsVG9TdHJpbmc6a0NBVmFsdWVGdW5jdGlvblJvdGF0ZVpdKQorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Um90YXRlWjsKKworICAgIGlmIChbc3RyaW5nIGlz
RXF1YWxUb1N0cmluZzprQ0FWYWx1ZUZ1bmN0aW9uU2NhbGVYXSkKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtQ0FBbmltYXRpb246OlNjYWxlWDsKKworICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0
cmluZzprQ0FWYWx1ZUZ1bmN0aW9uU2NhbGVZXSkKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FB
bmltYXRpb246OlNjYWxlWTsKKworICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0cmluZzprQ0FW
YWx1ZUZ1bmN0aW9uU2NhbGVaXSkKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246
OlNjYWxlWjsKKworICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0cmluZzprQ0FWYWx1ZUZ1bmN0
aW9uU2NhbGVdKQorICAgICAgICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbjo6U2NhbGU7CisK
KyAgICBpZiAoW3N0cmluZyBpc0VxdWFsVG9TdHJpbmc6a0NBVmFsdWVGdW5jdGlvblRyYW5zbGF0
ZVhdKQorICAgICAgICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbjo6VHJhbnNsYXRlWDsKKwor
ICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0cmluZzprQ0FWYWx1ZUZ1bmN0aW9uVHJhbnNsYXRl
WV0pCisgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpUcmFuc2xhdGVZOworCisg
ICAgaWYgKFtzdHJpbmcgaXNFcXVhbFRvU3RyaW5nOmtDQVZhbHVlRnVuY3Rpb25UcmFuc2xhdGVa
XSkKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246OlRyYW5zbGF0ZVo7CisKKyAg
ICBpZiAoW3N0cmluZyBpc0VxdWFsVG9TdHJpbmc6a0NBVmFsdWVGdW5jdGlvblRyYW5zbGF0ZV0p
CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpUcmFuc2xhdGU7CisKKyAgICBy
ZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9uOworfQorCitDQU1lZGlh
VGltaW5nRnVuY3Rpb24qIFdlYkNvcmU6OnRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRp
bWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwgYm9vbCByZXZlcnNlKQoreworICAgIEFTU0VS
VCh0aW1pbmdGdW5jdGlvbik7CisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBSZWZQdHI8Q3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbj4gcmV2ZXJzZWQ7CisgICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24q
IGN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1p
bmdGdW5jdGlvbik7CisKKyAgICAgICAgaWYgKHJldmVyc2UpIHsKKyAgICAgICAgICAgIHJldmVy
c2VkID0gY3RmLT5jcmVhdGVSZXZlcnNlZCgpOworICAgICAgICAgICAgY3RmID0gcmV2ZXJzZWQu
Z2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCB4MSA9IHN0YXRpY19jYXN0PGZsb2F0
PihjdGYtPngxKCkpOworICAgICAgICBmbG9hdCB5MSA9IHN0YXRpY19jYXN0PGZsb2F0PihjdGYt
PnkxKCkpOworICAgICAgICBmbG9hdCB4MiA9IHN0YXRpY19jYXN0PGZsb2F0PihjdGYtPngyKCkp
OworICAgICAgICBmbG9hdCB5MiA9IHN0YXRpY19jYXN0PGZsb2F0PihjdGYtPnkyKCkpOworICAg
ICAgICByZXR1cm4gW0NBTWVkaWFUaW1pbmdGdW5jdGlvbiBmdW5jdGlvbldpdGhDb250cm9sUG9p
bnRzOiB4MSA6IHkxIDogeDIgOiB5Ml07CisgICAgfQorICAgIAorICAgIEFTU0VSVCh0aW1pbmdG
dW5jdGlvbi0+dHlwZSgpID09IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbik7CisgICAg
cmV0dXJuIFtDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTprQ0FNZWRpYVRp
bWluZ0Z1bmN0aW9uTGluZWFyXTsKK30KKworUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
PiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNyZWF0ZShBbmltYXRpb25UeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYSh0eXBlLCBrZXlQYXRoKSk7Cit9CisKK1Bhc3NSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUoUGxhdGZvcm1B
bmltYXRpb25SZWYgYW5pbWF0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hKGFuaW1hdGlvbikpOworfQorCitQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShBbmltYXRpb25UeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCkKKyAgICA6IFBsYXRmb3JtQ0FBbmltYXRpb24odHlwZSkKK3sKKyAg
ICBpZiAodHlwZSA9PSBCYXNpYykKKyAgICAgICAgbV9hbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1h
dGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDprZXlQYXRoXTsKKyAgICBlbHNlCisgICAgICAgIG1f
YW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6a2V5
UGF0aF07Cit9CisKK1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6UGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hKFBsYXRmb3JtQW5pbWF0aW9uUmVmIGFuaW1hdGlvbikKK3sKKyAgICBpZiAoW3N0YXRp
Y19jYXN0PENBQW5pbWF0aW9uKj4oYW5pbWF0aW9uKSBpc0tpbmRPZkNsYXNzOltDQUJhc2ljQW5p
bWF0aW9uIGNsYXNzXV0pCisgICAgICAgIHNldFR5cGUoQmFzaWMpOworICAgIGVsc2UgaWYgKFtz
dGF0aWNfY2FzdDxDQUFuaW1hdGlvbio+KGFuaW1hdGlvbikgaXNLaW5kT2ZDbGFzczpbQ0FLZXlm
cmFtZUFuaW1hdGlvbiBjbGFzc11dKQorICAgICAgICBzZXRUeXBlKEtleWZyYW1lKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG1fYW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KGFuaW1h
dGlvbik7Cit9CisKK1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6flBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8UGxhdGZvcm1D
QUFuaW1hdGlvbj4gYW5pbWF0aW9uID0gY3JlYXRlKGFuaW1hdGlvblR5cGUoKSwga2V5UGF0aCgp
KTsKKyAgICAKKyAgICBhbmltYXRpb24tPnNldEJlZ2luVGltZShiZWdpblRpbWUoKSk7CisgICAg
YW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbigpKTsKKyAgICBhbmltYXRpb24tPnNldFNw
ZWVkKHNwZWVkKCkpOworICAgIGFuaW1hdGlvbi0+c2V0VGltZU9mZnNldCh0aW1lT2Zmc2V0KCkp
OworICAgIGFuaW1hdGlvbi0+c2V0UmVwZWF0Q291bnQocmVwZWF0Q291bnQoKSk7CisgICAgYW5p
bWF0aW9uLT5zZXRBdXRvcmV2ZXJzZXMoYXV0b3JldmVyc2VzKCkpOworICAgIGFuaW1hdGlvbi0+
c2V0RmlsbE1vZGUoZmlsbE1vZGUoKSk7CisgICAgYW5pbWF0aW9uLT5zZXRSZW1vdmVkT25Db21w
bGV0aW9uKGlzUmVtb3ZlZE9uQ29tcGxldGlvbigpKTsKKyAgICBhbmltYXRpb24tPnNldEFkZGl0
aXZlKGlzQWRkaXRpdmUoKSk7CisgICAgYW5pbWF0aW9uLT5jb3B5VGltaW5nRnVuY3Rpb25Gcm9t
KCp0aGlzKTsKKyAgICBhbmltYXRpb24tPnNldFZhbHVlRnVuY3Rpb24odmFsdWVGdW5jdGlvbigp
KTsKKworICAgIHNldEhhc0V4cGxpY2l0QmVnaW5UaW1lKGRvd25jYXN0PFBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYT4oKmFuaW1hdGlvbikucGxhdGZvcm1BbmltYXRpb24oKSwgaGFzRXhwbGljaXRC
ZWdpblRpbWUocGxhdGZvcm1BbmltYXRpb24oKSkpOworICAgIAorICAgIC8vIENvcHkgdGhlIHNw
ZWNpZmljIEJhc2ljIG9yIEtleWZyYW1lIHZhbHVlcy4KKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgp
ID09IEtleWZyYW1lKSB7CisgICAgICAgIGFuaW1hdGlvbi0+Y29weVZhbHVlc0Zyb20oKnRoaXMp
OworICAgICAgICBhbmltYXRpb24tPmNvcHlLZXlUaW1lc0Zyb20oKnRoaXMpOworICAgICAgICBh
bmltYXRpb24tPmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKCp0aGlzKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBhbmltYXRpb24tPmNvcHlGcm9tVmFsdWVGcm9tKCp0aGlzKTsKKyAgICAgICAgYW5p
bWF0aW9uLT5jb3B5VG9WYWx1ZUZyb20oKnRoaXMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
YW5pbWF0aW9uOworfQorCitQbGF0Zm9ybUFuaW1hdGlvblJlZiBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnBsYXRmb3JtQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hbmltYXRp
b24uZ2V0KCk7Cit9CisKK1N0cmluZyBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmtleVBhdGgo
KSBjb25zdAoreworICAgIHJldHVybiBbbV9hbmltYXRpb24ga2V5UGF0aF07Cit9CisKK0NGVGlt
ZUludGVydmFsIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6YmVnaW5UaW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gW21fYW5pbWF0aW9uIGJlZ2luVGltZV07Cit9CisKK3ZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvbkNvY29hOjpzZXRCZWdpblRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit7Cisg
ICAgW21fYW5pbWF0aW9uIHNldEJlZ2luVGltZTp2YWx1ZV07CisgICAgCisgICAgLy8gQWxzbyBz
ZXQgYSBmbGFnIHRvIHRlbGwgdXMgaWYgd2UndmUgcGFzc2VkIGluIGEgMCB2YWx1ZS4gCisgICAg
Ly8gVGhlIGZsYWcgaXMgbmVlZGVkIGJlY2F1c2UgbGF0ZXIgYmVnaW5UaW1lIHdpbGwgZ2V0IGNo
YW5nZWQKKyAgICAvLyB0byB0aGUgdGltZSBhdCB3aGljaCBpdCBmaXJlZCBhbmQgd2UgbmVlZCB0
byBrbm93IHdoZXRoZXIKKyAgICAvLyBvciBub3QgaXQgd2FzIDAgdG8gYmVnaW4gd2l0aC4KKyAg
ICBpZiAodmFsdWUpCisgICAgICAgIHNldEhhc0V4cGxpY2l0QmVnaW5UaW1lKG1fYW5pbWF0aW9u
LmdldCgpLCB0cnVlKTsKK30KKworQ0ZUaW1lSW50ZXJ2YWwgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX2FuaW1hdGlvbiBkdXJhdGlv
bl07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXREdXJhdGlvbihDRlRp
bWVJbnRlcnZhbCB2YWx1ZSkKK3sKKyAgICBbbV9hbmltYXRpb24gc2V0RHVyYXRpb246dmFsdWVd
OworfQorCitmbG9hdCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNwZWVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gW21fYW5pbWF0aW9uIHNwZWVkXTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6OnNldFNwZWVkKGZsb2F0IHZhbHVlKQoreworICAgIFttX2FuaW1hdGlvbiBz
ZXRTcGVlZDp2YWx1ZV07Cit9CisKK0NGVGltZUludGVydmFsIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6dGltZU9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX2FuaW1hdGlvbiB0aW1l
T2Zmc2V0XTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWVPZmZz
ZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCit7CisgICAgW21fYW5pbWF0aW9uIHNldFRpbWVPZmZz
ZXQ6dmFsdWVdOworfQorCitmbG9hdCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnJlcGVhdENv
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fYW5pbWF0aW9uIHJlcGVhdENvdW50XTsKK30K
Kwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFJlcGVhdENvdW50KGZsb2F0IHZh
bHVlKQoreworICAgIFttX2FuaW1hdGlvbiBzZXRSZXBlYXRDb3VudDp2YWx1ZV07Cit9CisKK2Jv
b2wgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjphdXRvcmV2ZXJzZXMoKSBjb25zdAoreworICAg
IHJldHVybiBbbV9hbmltYXRpb24gYXV0b3JldmVyc2VzXTsKK30KKwordm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2E6OnNldEF1dG9yZXZlcnNlcyhib29sIHZhbHVlKQoreworICAgIFttX2Fu
aW1hdGlvbiBzZXRBdXRvcmV2ZXJzZXM6dmFsdWVdOworfQorCitQbGF0Zm9ybUNBQW5pbWF0aW9u
OjpGaWxsTW9kZVR5cGUgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpmaWxsTW9kZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZyb21DQUZpbGxNb2RlVHlwZShbbV9hbmltYXRpb24gZmlsbE1vZGVd
KTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZpbGxNb2RlKEZpbGxN
b2RlVHlwZSB2YWx1ZSkKK3sKKyAgICBbbV9hbmltYXRpb24gc2V0RmlsbE1vZGU6dG9DQUZpbGxN
b2RlVHlwZSh2YWx1ZSldOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0
VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qIHZhbHVlLCBib29sIHJldmVyc2Up
Cit7CisgICAgW21fYW5pbWF0aW9uIHNldFRpbWluZ0Z1bmN0aW9uOnRvQ0FNZWRpYVRpbWluZ0Z1
bmN0aW9uKHZhbHVlLCByZXZlcnNlKV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpjb3B5VGltaW5nRnVuY3Rpb25Gcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZh
bHVlKQoreworICAgIFttX2FuaW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbjpbZG93bmNhc3Q8UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkgdGltaW5nRnVu
Y3Rpb25dXTsKK30KKworYm9vbCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmlzUmVtb3ZlZE9u
Q29tcGxldGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX2FuaW1hdGlvbiBpc1JlbW92ZWRP
bkNvbXBsZXRpb25dOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0UmVt
b3ZlZE9uQ29tcGxldGlvbihib29sIHZhbHVlKQoreworICAgIFttX2FuaW1hdGlvbiBzZXRSZW1v
dmVkT25Db21wbGV0aW9uOnZhbHVlXTsKK30KKworYm9vbCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OmlzQWRkaXRpdmUoKSBjb25zdAoreworICAgIHJldHVybiBbbV9hbmltYXRpb24gaXNBZGRp
dGl2ZV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRBZGRpdGl2ZShi
b29sIHZhbHVlKQoreworICAgIFttX2FuaW1hdGlvbiBzZXRBZGRpdGl2ZTp2YWx1ZV07Cit9CisK
K1BsYXRmb3JtQ0FBbmltYXRpb246OlZhbHVlRnVuY3Rpb25UeXBlIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6dmFsdWVGdW5jdGlvbigpIGNvbnN0Cit7CisgICAgQ0FWYWx1ZUZ1bmN0aW9uKiB2
ZiA9IFttX2FuaW1hdGlvbiB2YWx1ZUZ1bmN0aW9uXTsKKyAgICByZXR1cm4gZnJvbUNBVmFsdWVG
dW5jdGlvblR5cGUoW3ZmIG5hbWVdKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldFZhbHVlRnVuY3Rpb24oVmFsdWVGdW5jdGlvblR5cGUgdmFsdWUpCit7CisgICAgW21f
YW5pbWF0aW9uIHNldFZhbHVlRnVuY3Rpb246W0NBVmFsdWVGdW5jdGlvbiBmdW5jdGlvbldpdGhO
YW1lOnRvQ0FWYWx1ZUZ1bmN0aW9uVHlwZSh2YWx1ZSldXTsKK30KKwordm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAoYW5p
bWF0aW9uVHlwZSgpICE9IEJhc2ljKQorICAgICAgICByZXR1cm47CisgICAgW3N0YXRpY19jYXN0
PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltOU051
bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlXV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmIHZhbHVlKQoreworICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCisgICAgICAg
IHJldHVybjsKKworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRp
b24uZ2V0KCkpIHNldEZyb21WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOnZh
bHVlXV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUo
Y29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3sKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9
IEJhc2ljKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0FycmF5KiBhcnJheSA9IFtOU0FycmF5
IGFycmF5V2l0aE9iamVjdHM6CisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZh
bHVlLngoKV0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLnkoKV0s
CisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLnooKV0sCisgICAgICAg
IG5pbF07CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5n
ZXQoKSkgc2V0RnJvbVZhbHVlOmFycmF5XTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYgdmFsdWUpCit7CisgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNB
cnJheSogYXJyYXkgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOgorICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1ZS5yZWQoKV0sCisgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRG91YmxlOnZhbHVlLmdyZWVuKCldLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTp2YWx1ZS5ibHVlKCldLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTp2YWx1ZS5hbHBoYSgpXSwKKyAgICAgICAgbmlsXTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNp
Y0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6YXJyYXldOworfQor
Cit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQor
eworICAgIFJldGFpblB0cjxpZD4gdmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFs
dWVGb3JPcGVyYXRpb24ob3BlcmF0aW9uLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOwor
ICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNl
dEZyb21WYWx1ZTp2YWx1ZS5nZXQoKV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpjb3B5RnJvbVZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkK
K3sKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljIHx8IHZhbHVlLmFuaW1hdGlvblR5
cGUoKSAhPSBCYXNpYykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0FCYXNpY0FuaW1hdGlvbiog
b3RoZXJBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4oZG93bmNhc3Q8
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkpOworICAg
IFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZy
b21WYWx1ZTpbb3RoZXJBbmltYXRpb24gZnJvbVZhbHVlXV07Cit9CisKK3ZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGZsb2F0IHZhbHVlKQoreworICAgIGlmIChhbmlt
YXRpb25UeXBlKCkgIT0gQmFzaWMpCisgICAgICAgIHJldHVybjsKKyAgICBbc3RhdGljX2Nhc3Q8
Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOltOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOnZhbHVlXV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hOjpzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB2
YWx1ZSkKK3sKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQorICAgICAgICByZXR1
cm47CisKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdl
dCgpKSBzZXRUb1ZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6dmFsdWVdXTsK
K30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFsdWUoY29uc3QgRmxv
YXRQb2ludDNEJiB2YWx1ZSkKK3sKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQor
ICAgICAgICByZXR1cm47CisKKyAgICBOU0FycmF5KiBhcnJheSA9IFtOU0FycmF5IGFycmF5V2l0
aE9iamVjdHM6CisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLngoKV0s
CisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLnkoKV0sCisgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLnooKV0sCisgICAgICAgIG5pbF07Cisg
ICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0
VG9WYWx1ZTphcnJheV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRU
b1ZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiB2YWx1ZSkKK3sKKyAgICBpZiAoYW5pbWF0aW9u
VHlwZSgpICE9IEJhc2ljKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0FycmF5KiBhcnJheSA9
IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6CisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOnZhbHVlLnJlZCgpXSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6
dmFsdWUuZ3JlZW4oKV0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVl
LmJsdWUoKV0sCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLmFscGhh
KCldLAorICAgICAgICBuaWxdOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4o
bV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6YXJyYXldOworfQorCit2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJh
dGlvbiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKK3sKKyAgICBSZXRhaW5QdHI8
aWQ+IHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKKyAgICBbc3RhdGljX2Nhc3Q8
Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOnZhbHVlLmdl
dCgpXTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlUb1ZhbHVlRnJv
bShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKK3sKKyAgICBpZiAoYW5pbWF0aW9u
VHlwZSgpICE9IEJhc2ljIHx8IHZhbHVlLmFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ0FCYXNpY0FuaW1hdGlvbiogb3RoZXJBbmltYXRpb24gPSBzdGF0
aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2lj
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6W290aGVyQW5pbWF0aW9u
IHRvVmFsdWVdXTsKK30KKworCisvLyBLZXlmcmFtZS1hbmltYXRpb24gcHJvcGVydGllcy4KK3Zv
aWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWUpCit7CisgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5
IGFycmF5XTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKQor
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVl
W2ldXV07CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXg+JiB2YWx1ZSkKK3sKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXldOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsr
aSkKKyAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9y
bTNEOnZhbHVlW2ldXV07CisKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+
KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworfQorCit2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2
YWx1ZSkKK3sKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXldOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewor
ICAgICAgICBOU0FycmF5KiBvYmplY3QgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOgorICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWVbaV0ueCgpXSwKKyAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlW2ldLnkoKV0sCisgICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1ZVtpXS56KCldLAorICAgICAgICAg
ICAgbmlsXTsKKyAgICAgICAgW2FycmF5IGFkZE9iamVjdDpvYmplY3RdOworICAgIH0KKyAgICBb
c3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRW
YWx1ZXM6YXJyYXldOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mIHZhbHVlKQoreworICAgIGlmIChhbmlt
YXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIE5TTXV0YWJs
ZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5TQXJyYXkqIG9iamVj
dCA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6CisgICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aERvdWJsZTp2YWx1ZVtpXS5yZWQoKV0sCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aERvdWJsZTp2YWx1ZVtpXS5ncmVlbigpXSwKKyAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOnZhbHVlW2ldLmJsdWUoKV0sCisgICAgICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aERvdWJsZTp2YWx1ZVtpXS5hbHBoYSgpXSwKKyAgICAgICAgICAgIG5pbF07Cisg
ICAgICAgIFthcnJheSBhZGRPYmplY3Q6b2JqZWN0XTsKKyAgICB9CisgICAgW3N0YXRpY19jYXN0
PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5
XTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBW
ZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4+JiB2YWx1ZXMsIGludCBpbnRlcm5hbEZpbHRl
clByb3BlcnR5SW5kZXgpCit7CisgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5XTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFJldGFpblB0cjxpZD4gdmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVy
czo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24odmFsdWVzW2ldLmdldCgpLCBpbnRlcm5hbEZpbHRl
clByb3BlcnR5SW5kZXgpOworICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnZhbHVlLmdldCgpXTsK
KyAgICB9CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OmNvcHlWYWx1ZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQor
eworICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUgfHwgdmFsdWUuYW5pbWF0aW9u
VHlwZSgpICE9IEtleWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBDQUtleWZyYW1lQW5p
bWF0aW9uKiBvdGhlckFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
Pihkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5tX2FuaW1hdGlvbi5n
ZXQoKSk7CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VmFsdWVzOltvdGhlckFuaW1hdGlvbiB2YWx1ZXNdXTsKK30KKwordm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlKQoreworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBh
cnJheV07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKQor
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6dmFsdWVb
aV1dXTsKKworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRp
b24uZ2V0KCkpIHNldEtleVRpbWVzOmFycmF5XTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2E6OmNvcHlLZXlUaW1lc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFs
dWUpCit7CisgICAgQ0FLZXlmcmFtZUFuaW1hdGlvbiogb3RoZXIgPSBzdGF0aWNfY2FzdDxDQUtl
eWZyYW1lQW5pbWF0aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPih2YWx1
ZSkubV9hbmltYXRpb24uZ2V0KCkpOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0
aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEtleVRpbWVzOltvdGhlciBrZXlUaW1lc11dOwor
fQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb25zKGNv
bnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiB2YWx1ZSwgYm9vbCByZXZlcnNlKQor
eworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKQorICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OnRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKHZhbHVlW2ldLCByZXZlcnNl
KV07CisKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9u
LmdldCgpKSBzZXRUaW1pbmdGdW5jdGlvbnM6YXJyYXldOworfQorCit2b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFu
aW1hdGlvbiYgdmFsdWUpCit7CisgICAgQ0FLZXlmcmFtZUFuaW1hdGlvbiogb3RoZXIgPSBzdGF0
aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkpOworICAgIFtzdGF0aWNfY2FzdDxDQUtl
eWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRpbWluZ0Z1bmN0aW9uczpb
b3RoZXIgdGltaW5nRnVuY3Rpb25zXV07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnND
b2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MDg4MmRhMGU4OGY2ZjIzNGRkZmIwYzdmNzU5NDk0YzdmMjhj
ZTJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQpAQCAtMCwwICsxLDY4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBRmlsdGVycy5oIgorCisjaW1wb3J0ICJCbG9ja0V4
Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgorI2ltcG9ydCAiTGVuZ3Ro
RnVuY3Rpb25zLmgiIC8vIFRoaXMgaXMgYSBsYXllcmluZyB2aW9sYXRpb24uCisjaW1wb3J0ICJQ
bGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIgorI2ltcG9ydCAiUXVhcnR6Q29yZVNQSS5oIgorI2ltcG9y
dCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CisvLyBGSVhNRTogU2hvdWxkIHNoYXJlIHRoZXNlIHZhbHVlcyB3aXRoIEZpbHRlckVmZmVjdFJl
bmRlcmVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzYwMDgpLgorc3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7
CisgICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCisgICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4
IH0sCisgICAgeyAwLjI3MiwgMC41MzQsIDAuMTMxIH0KK307CisKK3N0YXRpYyBjb25zdCBkb3Vi
bGUgc2VwaWFOb25lQ29uc3RhbnRzWzNdWzNdID0geworICAgIHsgMSwgMCwgMCB9LAorICAgIHsg
MCwgMSwgMCB9LAorICAgIHsgMCwgMCwgMSB9Cit9OworCit2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJz
OjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBpZiAoIWZpbHRlcnMuc2l6ZSgpKSB7CisgICAgICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0RmlsdGVyczpu
aWxdOworICAgICAgICAvLyBGSVhNRTogdGhpcyBhZGRzIHNoYWRvdyBwcm9wZXJ0aWVzIHRvIHRo
ZSBsYXllciBldmVuIHdoZW4gaXQgaGFkIG5vbmUuCisgICAgICAgIFtsYXllciBzZXRTaGFkb3dP
ZmZzZXQ6Q0dTaXplWmVyb107CisgICAgICAgIFtsYXllciBzZXRTaGFkb3dDb2xvcjpuaWxdOwor
ICAgICAgICBbbGF5ZXIgc2V0U2hhZG93UmFkaXVzOjBdOworICAgICAgICBbbGF5ZXIgc2V0U2hh
ZG93T3BhY2l0eTowXTsKKyAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIEFzc3VtZSBmaWx0ZXJzQ2FuQmVDb21wb3Np
dGVkIHdhcyBjYWxsZWQgYW5kIGl0IHJldHVybmVkIHRydWUuCisgICAgQVNTRVJUKFBsYXRmb3Jt
Q0FMYXllckNvY29hOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpKTsKKyAgICAKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgU3RyaW5nIGZpbHRlck5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiZmlsdGVyXyVk
IiwgaSk7CisgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uID0g
KmZpbHRlcnMuYXQoaSk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkg
eworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6REVGQVVMVDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogeworICAgICAgICAgICAgLy8gRklYTUU6IEZvciBu
b3cgYXNzdW1lIGRyb3Agc2hhZG93IGlzIHRoZSBsYXN0IGZpbHRlciwgcHV0IGl0IG9uIHRoZSBs
YXllci4KKyAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMDk1OTk2OT4gSGFuZGxlIGNh
c2Ugd2hlcmUgZHJvcC1zaGFkb3cgaXMgbm90IHRoZSBsYXN0IGZpbHRlci4KKyAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgW2xheWVyIHNldFNo
YWRvd09mZnNldDpDR1NpemVNYWtlKGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93
T3BlcmF0aW9uLnkoKSldOworCisgICAgICAgICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07Cisg
ICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCkuZ2V0UkdCQShjb21wb25lbnRz
WzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKKyAgICAg
ICAgICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDR0Nv
bG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBj
b21wb25lbnRzKSk7CisgICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93Q29sb3I6Y29sb3IuZ2V0
KCldOworICAgICAgICAgICAgW2xheWVyIHNldFNoYWRvd1JhZGl1czpkcm9wU2hhZG93T3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpXTsKKyAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dPcGFjaXR5
OjFdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBVU0VfQ0FfRklMVEVSUwor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7CisgICAgICAgICAgICBj
b25zdCBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDQUZpbHRl
ciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTW9ub2No
cm9tZV07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50
Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAg
ICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKKyAgICAgICAg
ICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRl
cnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZp
bHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVy
IGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKKyAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0
cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAg
ICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKKyAg
ICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAg
ICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVy
Q29sb3JTYXR1cmF0ZV07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlu
cHV0QW1vdW50Il07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Cisg
ICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFU
RTogeworICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwor
ICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTpr
Q0FGaWx0ZXJDb2xvckh1ZVJvdGF0ZV07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFt
ZTpAImh1ZVJvdGF0ZSJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVd
OworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDogeworICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQ
bGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRp
b24udHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENBRmlsdGVyICpmaWx0
ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpA
ImlucHV0Q29sb3JNYXRyaXgiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJO
YW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOiB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1
ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9w
ZXJhdGlvbi50eXBlKCksICZmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQ0FGaWx0ZXIg
KmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07
CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9y
S2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZp
bHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJSSUdIVE5FU1M6IHsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1h
dHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIo
ZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBD
QUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9y
TWF0cml4XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5n
ZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CisgICAgICAgICAgICBbZmlsdGVyIHNl
dE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZp
bHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBj
b2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JG
aWx0ZXIoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CisgICAgICAg
ICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRl
ckNvbG9yTWF0cml4XTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhW
YWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CisgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QkxVUjogeworICAgICAgICAgICAgY29uc3QgYXV0byYgYmx1ck9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
CisgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBl
OmtDQUZpbHRlckdhdXNzaWFuQmx1cl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9u
LnN0ZERldmlhdGlvbigpLCAwKV0gZm9yS2V5OkAiaW5wdXRSYWRpdXMiXTsKKyNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQorICAgICAgICAgICAgaWYgKGZpbHRlcnMuaXNVc2VkRm9yQmFja2Ry
b3BGaWx0ZXJzKCkpCisgICAgICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6QCJpbnB1dE5vcm1hbGl6ZUVkZ2VzIl07CisjZW5k
aWYKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAg
IFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisjZWxzZQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7
CisgICAgICAgICAgICBjb25zdCBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CisgICAg
ICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lD
b2xvck1vbm9jaHJvbWUiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmNvbG9y
TWF0cml4T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEludGVuc2l0eSJdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lDb2xvciBjb2xvcldpdGhSZWQ6MC42NyBncmVl
bjowLjY3IGJsdWU6MC42N10gZm9yS2V5OkAiaW5wdXRDb2xvciJdOyAvLyBDb2xvciBkZXJpdmVk
IGVtcGlyaWNhbGx5IHRvIG1hdGNoIHplcm8gc2F0dXJhdGlvbiBsZXZlbHMuCisgICAgICAgICAg
ICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkg
YWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8m
IGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CisgICAgICAgICAg
ICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKworICAgICAgICAgICAgZG91YmxlIHQgPSBjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKTsKKyAgICAgICAgICAgIHQgPSBzdGQ6Om1pbihzdGQ6Om1h
eCgwLjAsIHQpLCAxLjApOworICAgICAgICAgICAgLy8gRklYTUU6IHJlc3VsdHMgZG9uJ3QgbWF0
Y2ggdGhlIHNvZnR3YXJlIGZpbHRlci4KKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVsw
XSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KQorICAgICAgICAgICAgICAgIFk6V2ViQ29y
ZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1b
MV0sIHQpCisgICAgICAgICAgICAgICAgWjpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFu
dHNbMF1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsyXSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1
dFJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVswXSwgc2VwaWFGdWxs
Q29uc3RhbnRzWzFdWzBdLCB0KQorICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2Vw
aWFOb25lQ29uc3RhbnRzWzFdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMV0sIHQpCisgICAg
ICAgICAgICAgICAgWjpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMl0sIHNl
cGlhRnVsbENvbnN0YW50c1sxXVsyXSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsK
KyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOldlYkNv
cmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJd
WzBdLCB0KQorICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3Rh
bnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIHQpCisgICAgICAgICAgICAgICAg
WjpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMl0sIHNlcGlhRnVsbENvbnN0
YW50c1syXVsyXSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQoKSBh
ZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogeworICAgICAgICAgICAgY29uc3QgYXV0
byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRl
ciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JDb250cm9scyJdOworICAgICAg
ICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCld
IGZvcktleTpAImlucHV0U2F0dXJhdGlvbiJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1l
OmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJd
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU6IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4
T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIg
ZmlsdGVyV2l0aE5hbWU6QCJDSUh1ZUFkanVzdCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRE
ZWZhdWx0c107CisKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDpkZWcycmFkKGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKV0gZm9yS2V5
OkAiaW5wdXRBbmdsZSJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVd
OworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDogeworICAgICAgICAgICAgY29uc3QgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOworICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0
ZXJXaXRoTmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVm
YXVsdHNdOworCisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDEgLSBjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSAqIDI7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0
aGUgcmVzdWx0cyBvZiB0aGlzIGZpbHRlciBsb29rIHdyb25nLgorICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6bXVsdGlwbGllciBZOjAgWjowIFc6MF0g
Zm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltD
SVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6bXVsdGlwbGllciBaOjAgVzowXSBmb3JLZXk6QCJpbnB1
dEdWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOjAgWTowIFo6bXVsdGlwbGllciBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwor
ICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAg
WjowIFc6MV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07CisgICAgICAgICAgICBbZmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpvcC0+YW1vdW50KCkgWTpvcC0+YW1vdW50KCkg
WjpvcC0+YW1vdW50KCkgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKKyAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7CisgICAgICAgICAgICBjb25zdCBh
dXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBD
SUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJp
eCJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisKKyAgICAgICAgICAgIFtm
aWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjEgWTowIFo6MCBXOjBdIGZvcktl
eTpAImlucHV0UlZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6MCBZOjEgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Cisg
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBa
OjEgVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6MCBXOmNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKKyAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6MCBXOjBdIGZv
cktleTpAImlucHV0Qmlhc1ZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZp
bHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJSSUdIVE5FU1M6IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBb
Q0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CisgICAgICAgICAgICBb
ZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBjb21wb25l
bnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKTsKKworICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6YW1vdW50IFk6MCBaOjAgVzowXSBmb3JLZXk6QCJp
bnB1dFJWZWN0b3IiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOjAgWTphbW91bnQgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Cisg
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBa
OmFtb3VudCBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICAgICAgW2ZpbHRl
ciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVj
dDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBDSUZpbHRlciog
ZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xzIl07Cisg
ICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRDb250cmFzdCJdOworICAgICAgICAgICAgW2ZpbHRl
ciBzZXROYW1lOmZpbHRlck5hbWVdOworICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVj
dDpmaWx0ZXJdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IGlnbm9yZSBzdGREZXZpYXRpb25ZLgorICAgICAgICAgICAgY29uc3QgYXV0byYgYmx1ck9wZXJh
dGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Cisg
ICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAi
Q0lHYXVzc2lhbkJsdXIiXTsKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpA
ImlucHV0UmFkaXVzIl07CisgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
CisgICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpQQVNTVEhST1VHSDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoW2FycmF5LmdldCgpIGNvdW50XSA+IDApCisgICAgICAgIFtsYXllciBzZXRG
aWx0ZXJzOmFycmF5LmdldCgpXTsKKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
Cit9CisKK1JldGFpblB0cjxOU1ZhbHVlPiBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVG
b3JPcGVyYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGludCBpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXgpCit7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICBVTlVTRURf
UEFSQU0oaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKKyNlbmRpZgorICAgIEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gb3BlcmF0aW9uLT50eXBlKCk7CisgICAgUmV0
YWluUHRyPGlkPiB2YWx1ZTsKKyAgICAKKyAgICBpZiAoaXM8RGVmYXVsdEZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbikpIHsKKyAgICAgICAgdHlwZSA9IGRvd25jYXN0PERlZmF1bHRGaWx0ZXJP
cGVyYXRpb24+KCpvcGVyYXRpb24pLnJlcHJlc2VudGVkVHlwZSgpOworICAgICAgICBvcGVyYXRp
b24gPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6REVGQVVMVDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsK
KyAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0SW50ZW5zaXR5CisgICAgICAgIC8vIENBRmlsdGVy
OiBpbnB1dEFtb3VudAorICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKKyAgICAgICAgaWYgKG9w
ZXJhdGlvbikKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7CisjaWYgVVNFX0NB
X0ZJTFRFUlMKKyAgICAgICAgLy8gQ0FGaWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgKKyAgICAgICAg
dmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcih0eXBl
LCBvcGVyYXRpb24pOworI2Vsc2UKKyAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0UlZlY3Rvciwg
aW5wdXRHVmVjdG9yLCBpbnB1dEJWZWN0b3IKKyAgICAgICAgZG91YmxlIGFtb3VudCA9IDA7Cisg
ICAgICAgIGlmIChvcGVyYXRpb24pCisgICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKKworICAg
ICAgICBDSVZlY3Rvciogcm93VmVjdG9yID0gbnVsbHB0cjsKKyAgICAgICAgc3dpdGNoIChpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOiByb3dWZWN0b3IgPSBb
W0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3Rh
bnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMF0sIGFtb3VudCkKKyAgICAgICAgICAg
IFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMF1bMV0sIGFtb3VudCkKKyAgICAgICAgICAgIFo6V2ViQ29yZTo6YmxlbmQoc2VwaWFO
b25lQ29uc3RhbnRzWzBdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMl0sIGFtb3VudCkgVzow
XTsKKyAgICAgICAgICAgIGJyZWFrOyAvLyBpbnB1dFJWZWN0b3IKKyAgICAgICAgY2FzZSAxOiBy
b3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6V2ViQ29yZTo6YmxlbmQoc2Vw
aWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMF0sIGFtb3VudCkK
KyAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzFdLCBz
ZXBpYUZ1bGxDb25zdGFudHNbMV1bMV0sIGFtb3VudCkKKyAgICAgICAgICAgIFo6V2ViQ29yZTo6
YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMl0s
IGFtb3VudCkgVzowXTsKKyAgICAgICAgICAgIGJyZWFrOyAvLyBpbnB1dEdWZWN0b3IKKyAgICAg
ICAgY2FzZSAyOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6V2ViQ29y
ZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1b
MF0sIGFtb3VudCkKKyAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3Rh
bnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIGFtb3VudCkKKyAgICAgICAgICAg
IFo6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzJdLCBzZXBpYUZ1bGxDb25z
dGFudHNbMl1bMl0sIGFtb3VudCkgVzowXTsKKyAgICAgICAgICAgIGJyZWFrOyAvLyBpbnB1dEJW
ZWN0b3IKKyAgICAgICAgfQorICAgICAgICB2YWx1ZSA9IGFkb3B0TlMocm93VmVjdG9yKTsKKyNl
bmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNB
VFVSQVRFOiB7CisgICAgICAgIC8vIENJRmlsdGVyOiBpbnB1dFNhdHVyYXRpb24KKyAgICAgICAg
Ly8gQ0FGaWx0ZXI6IGlucHV0QW1vdW50CisgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOworICAg
ICAgICBpZiAob3BlcmF0aW9uKQorICAgICAgICAgICAgYW1vdW50ID0gZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuYW1vdW50KCk7CisgICAgICAg
IAorICAgICAgICB2YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF07Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFU
RTogeworICAgICAgICAvLyBIdWUgcm90YXRlIENJRmlsdGVyOiBpbnB1dEFuZ2xlCisgICAgICAg
IC8vIEh1ZSByb3RhdGUgQ0FGaWx0ZXI6IGlucHV0QW5nbGUKKyAgICAgICAgZG91YmxlIGFtb3Vu
dCA9IDA7CisgICAgICAgIGlmIChvcGVyYXRpb24pCisgICAgICAgICAgICBhbW91bnQgPSBkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQo
KTsKKyAgICAgICAgCisgICAgICAgIGFtb3VudCA9IGRlZzJyYWQoYW1vdW50KTsKKyAgICAgICAg
dmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTphbW91bnRdOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogeworI2lmIFVTRV9D
QV9GSUxURVJTCisgICAgICAgIC8vIENBRmlsdGVyOiBpbnB1dENvbG9yTWF0cml4CisgICAgICAg
IHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIodHlw
ZSwgb3BlcmF0aW9uKTsKKyNlbHNlCisgICAgICAgIC8vIENJRmlsdGVyOiBpbnB1dFJWZWN0b3Is
IGlucHV0R1ZlY3RvciwgaW5wdXRCVmVjdG9yLCBpbnB1dEJpYXNWZWN0b3IKKyAgICAgICAgZG91
YmxlIGFtb3VudCA9IDA7CisgICAgICAgIGlmIChvcGVyYXRpb24pCisgICAgICAgICAgICBhbW91
bnQgPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3Bl
cmF0aW9uKS5hbW91bnQoKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0g
MSAtIGFtb3VudCAqIDI7CisKKyAgICAgICAgLy8gVGhlIGNvbG9yIG1hdHJpeCBhbmltYXRpb24g
Zm9yIGludmVydCBkb2VzIGEgc2NhbGUgb2YgZWFjaCBjb2xvciBjb21wb25lbnQgYnkgYSB2YWx1
ZSB0aGF0IGdvZXMgZnJvbSAKKyAgICAgICAgLy8gMSAod2hlbiBhbW91bnQgaXMgMCkgdG8gLTEg
KHdoZW4gYW1vdW50IGlzIDEpLiBUaGVuIHRoZSBjb2xvciB2YWx1ZXMgYXJlIG9mZnNldCBieSBh
bW91bnQuIFRoaXMgaGFzIHRoZQorICAgICAgICAvLyBlZmZlY3Qgb2YgcGVyZm9ybWluZyB0aGUg
b3BlcmF0aW9uOiBjJyA9IGMgKiAtMSArIDEsIHdoaWNoIGludmVydHMgdGhlIGNvbG9yLgorICAg
ICAgICBDSVZlY3Rvciogcm93VmVjdG9yID0gMDsKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZp
bHRlclByb3BlcnR5SW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOiByb3dWZWN0b3IgPSBbW0NJVmVj
dG9yIGFsbG9jXSBpbml0V2l0aFg6bXVsdGlwbGllciBZOjAgWjowIFc6MF07IGJyZWFrOyAvLyBp
bnB1dFJWZWN0b3IKKyAgICAgICAgY2FzZSAxOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9j
XSBpbml0V2l0aFg6MCBZOm11bHRpcGxpZXIgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1dEdWZWN0
b3IKKyAgICAgICAgY2FzZSAyOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0
aFg6MCBZOjAgWjptdWx0aXBsaWVyIFc6MF07IGJyZWFrOyAvLyBpbnB1dEJWZWN0b3IKKyAgICAg
ICAgY2FzZSAzOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBpbml0V2l0aFg6YW1vdW50
IFk6YW1vdW50IFo6YW1vdW50IFc6MF07IGJyZWFrOyAvLyBpbnB1dEJpYXNWZWN0b3IKKyAgICAg
ICAgfQorICAgICAgICB2YWx1ZSA9IGFkb3B0TlMocm93VmVjdG9yKTsKKyNlbmRpZgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKKyNp
ZiBVU0VfQ0FfRklMVEVSUworICAgICAgICAvLyBPcGFjaXR5IENBRmlsdGVyOiBpbnB1dENvbG9y
TWF0cml4CisgICAgICAgIHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFs
dWVGb3JGaWx0ZXIodHlwZSwgb3BlcmF0aW9uKTsKKyNlbHNlCisgICAgICAgIC8vIE9wYWNpdHkg
Q0lGaWx0ZXI6IGlucHV0QVZlY3RvcgorICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKKyAgICAg
ICAgaWYgKG9wZXJhdGlvbikKKyAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOworICAg
ICAgICAKKyAgICAgICAgdmFsdWUgPSBhZG9wdE5TKFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRo
WDowIFk6MCBaOjAgVzphbW91bnRdKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKKyNpZiBVU0VfQ0Ff
RklMVEVSUworICAgICAgICAvLyBCcmlnaHRuZXNzIENBRmlsdGVyOiBpbnB1dENvbG9yTWF0cml4
CisgICAgICAgIHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JG
aWx0ZXIodHlwZSwgb3BlcmF0aW9uKTsKKyNlbHNlCisgICAgICAgIC8vIEJyaWdodG5lc3MgQ0lG
aWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgKKyAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7CisgICAg
ICAgIGlmIChvcGVyYXRpb24pCisgICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKKyAg
ICAgICAgCisgICAgICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSBudWxscHRyOworICAgICAgICBz
d2l0Y2ggKGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgeworICAgICAgICBjYXNlIDA6IHJv
d1ZlY3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDphbW91bnQgWTowIFo6MCBXOjBd
OyBicmVhazsgLy8gaW5wdXRSVmVjdG9yCisgICAgICAgIGNhc2UgMTogcm93VmVjdG9yID0gW1tD
SVZlY3RvciBhbGxvY10gaW5pdFdpdGhYOjAgWTphbW91bnQgWjowIFc6MF07IGJyZWFrOyAvLyBp
bnB1dEdWZWN0b3IKKyAgICAgICAgY2FzZSAyOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9j
XSBpbml0V2l0aFg6MCBZOjAgWjphbW91bnQgVzowXTsgYnJlYWs7IC8vIGlucHV0QlZlY3Rvcgor
ICAgICAgICB9CisgICAgICAgIHZhbHVlID0gYWRvcHROUyhyb3dWZWN0b3IpOworI2VuZGlmCisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFT
VDogeworI2lmIFVTRV9DQV9GSUxURVJTCisgICAgICAgIC8vIENvbnRyYXN0IENBRmlsdGVyOiBp
bnB1dENvbG9yTWF0cml4CisgICAgICAgIHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9y
TWF0cml4VmFsdWVGb3JGaWx0ZXIodHlwZSwgb3BlcmF0aW9uKTsKKyNlbHNlCisgICAgICAgIC8v
IENvbnRyYXN0IENJRmlsdGVyOiBpbnB1dENvbnRyYXN0CisgICAgICAgIGRvdWJsZSBhbW91bnQg
PSAxOworICAgICAgICBpZiAob3BlcmF0aW9uKQorICAgICAgICAgICAgYW1vdW50ID0gZG93bmNh
c3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuYW1v
dW50KCk7CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOmFtb3VudF07CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCTFVSOiB7CisgICAgICAgIC8vIENJRmlsdGVyOiBpbnB1dFJhZGl1cwor
ICAgICAgICAvLyBDQUZpbHRlcjogaW5wdXRSYWRpdXMKKyAgICAgICAgZG91YmxlIGFtb3VudCA9
IDA7CisgICAgICAgIGlmIChvcGVyYXRpb24pCisgICAgICAgICAgICBhbW91bnQgPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLnN0
ZERldmlhdGlvbigpLCAwKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0gW05TTnVtYmVyIG51
bWJlcldpdGhEb3VibGU6YW1vdW50XTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
KyNpZiBVU0VfQ0FfRklMVEVSUworUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRmb3JtQ0FGaWx0ZXJz
Ojpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSB0eXBlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlck9wZXJhdGlvbikKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKKyAgICAg
ICAgZG91YmxlIHQgPSBmaWx0ZXJPcGVyYXRpb24gPyBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPigqZmlsdGVyT3BlcmF0aW9uKS5hbW91bnQoKSA6IDA7CisgICAgICAg
IHQgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjAsIHQpLCAxLjApOworICAgICAgICBDQUNvbG9yTWF0
cml4IGNvbG9yTWF0cml4ID0geworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNv
cmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBd
WzBdLCB0KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQo
c2VwaWFOb25lQ29uc3RhbnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0sIHQpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVD
b25zdGFudHNbMF1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsyXSwgdCkpLCAwLCAwLAorICAg
ICAgICAgICAgCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQo
c2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMF0sIHQpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVD
b25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVsxXSwgdCkpLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sx
XVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJdLCB0KSksIDAsIDAsCisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVD
b25zdGFudHNbMl1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1syXVswXSwgdCkpLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sy
XVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzFdLCB0KSksCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzJdLCBzZXBp
YUZ1bGxDb25zdGFudHNbMl1bMl0sIHQpKSwgMCwgMCwKKyAgICAgICAgICAgIDAsIDAsIDAsIDEs
IDAKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBQ29sb3JN
YXRyaXg6Y29sb3JNYXRyaXhdOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOiB7CisgICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpmaWx0ZXJPcGVyYXRpb24p
LmFtb3VudCgpIDogMDsKKyAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IDEgLSBhbW91bnQgKiAy
OworICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0geworICAgICAgICAgICAgbXVs
dGlwbGllciwgMCwgMCwgMCwgYW1vdW50LAorICAgICAgICAgICAgMCwgbXVsdGlwbGllciwgMCwg
MCwgYW1vdW50LAorICAgICAgICAgICAgMCwgMCwgbXVsdGlwbGllciwgMCwgYW1vdW50LAorICAg
ICAgICAgICAgMCwgMCwgMCwgMSwgMAorICAgICAgICB9OworICAgICAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CisgICAgfQorICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7CisgICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRl
ck9wZXJhdGlvbiA/IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbiktPmFtb3VudCgpIDogMTsKKyAgICAgICAgQ0FDb2xvck1hdHJp
eCBjb2xvck1hdHJpeCA9IHsKKyAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsCisgICAgICAgICAg
ICAwLCAxLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCwKKyAgICAgICAgICAg
IDAsIDAsIDAsIGFtb3VudCwgMAorICAgICAgICB9OworICAgICAgICByZXR1cm4gW05TVmFsdWUg
dmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJpeF07CisgICAgfQorICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDogeworICAgICAgICBmbG9hdCBhbW91bnQgPSBmaWx0ZXJP
cGVyYXRpb24gPyBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDE7CisgICAgICAgIGZsb2F0IGludGVyY2Vw
dCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisgICAgICAgIENBQ29sb3JNYXRyaXggY29sb3JNYXRy
aXggPSB7CisgICAgICAgICAgICBhbW91bnQsIDAsIDAsIDAsIGludGVyY2VwdCwKKyAgICAgICAg
ICAgIDAsIGFtb3VudCwgMCwgMCwgaW50ZXJjZXB0LAorICAgICAgICAgICAgMCwgMCwgYW1vdW50
LCAwLCBpbnRlcmNlcHQsCisgICAgICAgICAgICAwLCAwLCAwLCAxLCAwCisgICAgICAgIH07Cisg
ICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9yTWF0cml4
XTsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKKyAgICAg
ICAgZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gZG93bmNhc3Q8QmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKS0+YW1vdW50KCkgOiAx
OworICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0geworICAgICAgICAgICAgYW1v
dW50LCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgYW1vdW50LCAwLCAwLCAwLAorICAgICAg
ICAgICAgMCwgMCwgYW1vdW50LCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgMCwgMSwgMAorICAg
ICAgICB9OworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpj
b2xvck1hdHJpeF07CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBQbGF0
Zm9ybUNBRmlsdGVyczo6c2V0QmxlbmRpbmdGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBs
YXllciwgY29uc3QgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyNpZiBVU0VfQ0FfRklMVEVSUwor
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworCisgICAgQ0FGaWx0ZXIqIGZpbHRlciA9
IG5pbDsKKworICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7CisgICAgY2FzZSBCbGVuZE1vZGVOb3Jt
YWw6CisgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IGFuIGFjdHVhbCBmaWx0ZXIgb2JqZWN0IGlu
IHRoaXMgY2FzZS4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbGVuZE1vZGVPdmVybGF5Ogor
ICAgICAgICBmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyT3Zlcmxh
eUJsZW5kTW9kZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxlbmRNb2RlQ29sb3JEb2Rn
ZToKKyAgICAgICAgZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNv
bG9yRG9kZ2VCbGVuZE1vZGVdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsZW5kTW9kZUNv
bG9yQnVybjoKKyAgICAgICAgZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZp
bHRlckNvbG9yQnVybkJsZW5kTW9kZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxlbmRN
b2RlRGFya2VuOgorICAgICAgICBmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NB
RmlsdGVyRGFya2VuQmxlbmRNb2RlXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbGVuZE1v
ZGVEaWZmZXJlbmNlOgorICAgICAgICBmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6
a0NBRmlsdGVyRGlmZmVyZW5jZUJsZW5kTW9kZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QmxlbmRNb2RlRXhjbHVzaW9uOgorICAgICAgICBmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0
aFR5cGU6a0NBRmlsdGVyRXhjbHVzaW9uQmxlbmRNb2RlXTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBCbGVuZE1vZGVIYXJkTGlnaHQ6CisgICAgICAgIGZpbHRlciA9IFtDQUZpbHRlciBmaWx0
ZXJXaXRoVHlwZTprQ0FGaWx0ZXJIYXJkTGlnaHRCbGVuZE1vZGVdOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEJsZW5kTW9kZU11bHRpcGx5OgorICAgICAgICBmaWx0ZXIgPSBbQ0FGaWx0ZXIg
ZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyTXVsdGlwbHlCbGVuZE1vZGVdOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEJsZW5kTW9kZUxpZ2h0ZW46CisgICAgICAgIGZpbHRlciA9IFtDQUZpbHRl
ciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJMaWdodGVuQmxlbmRNb2RlXTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBCbGVuZE1vZGVTb2Z0TGlnaHQ6CisgICAgICAgIGZpbHRlciA9IFtDQUZp
bHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJTb2Z0TGlnaHRCbGVuZE1vZGVdOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEJsZW5kTW9kZVNjcmVlbjoKKyAgICAgICAgZmlsdGVyID0gW0NB
RmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclNjcmVlbkJsZW5kTW9kZV07CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQmxlbmRNb2RlUGx1c0RhcmtlcjoKKyAgICAgICAgZmlsdGVyID0g
W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBsdXNEXTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCbGVuZE1vZGVQbHVzTGlnaHRlcjoKKyAgICAgICAgZmlsdGVyID0gW0NBRmls
dGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBsdXNMXTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgW2xh
eWVyIHNldENvbXBvc2l0aW5nRmlsdGVyOmZpbHRlcl07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShsYXllcik7CisgICAgVU5VU0VEX1BB
UkFNKGJsZW5kTW9kZSk7CisjZW5kaWYKK30KKworaW50IFBsYXRmb3JtQ0FGaWx0ZXJzOjpudW1B
bmltYXRlZEZpbHRlclByb3BlcnRpZXMoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5
cGUpCit7CisjaWYgVVNFX0NBX0ZJTFRFUlMKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6U0VQSUE6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRV
UkFURTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHJl
dHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHJldHVybiAxOworICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOiByZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjog
cmV0dXJuIDE7CisgICAgZGVmYXVsdDogcmV0dXJuIDA7CisgICAgfQorI2Vsc2UKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4g
MTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHJldHVybiAzOworICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU6IHJldHVybiAxOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJ
TlZFUlQ6IHJldHVybiA0OworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiByZXR1
cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogcmV0dXJuIDM7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiByZXR1cm4gMTsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QkxVUjogcmV0dXJuIDE7CisgICAgZGVmYXVsdDogcmV0dXJuIDA7Cisg
ICAgfQorI2VuZGlmCit9CisKK2NvbnN0IGNoYXIqIFBsYXRmb3JtQ0FGaWx0ZXJzOjphbmltYXRl
ZEZpbHRlclByb3BlcnR5TmFtZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwg
aW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKK3sKKyNpZiBVU0VfQ0FfRklMVEVSUwor
ICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHJldHVybiAi
aW5wdXRBbW91bnQiOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTpyZXR1cm4gImlu
cHV0Q29sb3JNYXRyaXgiOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogcmV0
dXJuICJpbnB1dEFtb3VudCI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6
IHJldHVybiAiaW5wdXRBbmdsZSI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDog
cmV0dXJuICJpbnB1dENvbG9yTWF0cml4IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BB
Q0lUWTogcmV0dXJuICJpbnB1dENvbG9yTWF0cml4IjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzogcmV0dXJuICJpbnB1dENvbG9yTWF0cml4IjsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHJldHVybiAiaW5wdXRDb2xvck1hdHJpeCI7CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHJldHVybiAiaW5wdXRSYWRpdXMiOworICAgIGRlZmF1
bHQ6IHJldHVybiAiIjsKKyAgICB9CisjZWxzZQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHJldHVybiAiaW5wdXRJbnRlbnNpdHkiOwor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzoKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5k
ZXgpIHsKKyAgICAgICAgY2FzZSAwOiByZXR1cm4gImlucHV0UlZlY3RvciI7CisgICAgICAgIGNh
c2UgMTogcmV0dXJuICJpbnB1dEdWZWN0b3IiOworICAgICAgICBjYXNlIDI6IHJldHVybiAiaW5w
dXRCVmVjdG9yIjsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuICIiOworICAgICAgICB9CisgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiByZXR1cm4gImlucHV0U2F0dXJhdGlvbiI7
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHJldHVybiAiaW5wdXRBbmds
ZSI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgc3dpdGNoIChp
bnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOiByZXR1cm4gImlu
cHV0UlZlY3RvciI7CisgICAgICAgIGNhc2UgMTogcmV0dXJuICJpbnB1dEdWZWN0b3IiOworICAg
ICAgICBjYXNlIDI6IHJldHVybiAiaW5wdXRCVmVjdG9yIjsKKyAgICAgICAgY2FzZSAzOiByZXR1
cm4gImlucHV0Qmlhc1ZlY3RvciI7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKKyAgICAg
ICAgfQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiByZXR1cm4gImlucHV0QVZl
Y3RvciI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiByZXR1cm4gImlucHV0
Q29udHJhc3QiOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiByZXR1cm4gImlucHV0
UmFkaXVzIjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIiI7CisgICAgfQorI2VuZGlmCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBTGF5ZXJDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xY2JmNDQyZjJiN2IyOTg0OGU5
YTdjNDQ0YjY3ZjVhNThiMzgzNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaApAQCAtMCww
ICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUGxhdGZvcm1DQUxheWVyQ29jb2FfaAorI2RlZmluZSBQbGF0Zm9ybUNB
TGF5ZXJDb2NvYV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKworT0JKQ19DTEFT
UyBOU09iamVjdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUNBTGF5
ZXJDb2NvYSBmaW5hbCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwgUGxhdGZv
cm1DQUxheWVyQ2xpZW50Kik7CisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiBwYXNzZXMgdGhl
IGxheWVyIGFzIGEgdm9pZCogcmF0aGVyIHRoYW4gYSBQbGF0Zm9ybUxheWVyIGJlY2F1c2UgUGxh
dGZvcm1MYXllcgorICAgIC8vIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIE9iaiBDIGFuZCBD
KysuIFRoaXMgYWxsb3dzIGNhbGxlcnMgZnJvbSBib3RoIGxhbmd1YWdlcy4KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZSh2b2lkKiBwbGF0Zm9ybUxheWVyLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMYXll
clR5cGUgbGF5ZXJUeXBlRm9yUGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKik7CisKKyAgICB+
UGxhdGZvcm1DQUxheWVyQ29jb2EoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRPd25lcihQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwg
dm9pZCBjb3B5Q29udGVudHNGcm9tTGF5ZXIoUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FMYXllciogc3VwZXJsYXllcigpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxTdWJsYXllcnMoKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyJikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciYsIHNp
emVfdCBpbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcGxhY2VTdWJsYXllcihQ
bGF0Zm9ybUNBTGF5ZXImIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyJikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0KiBjdXN0b21TdWJsYXllcnMoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2N1c3RvbVN1YmxheWVycy5nZXQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBhZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXImIHNvdXJjZSkgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJl
bW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25z
dCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvblN0YXJ0
ZWQoY29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYga2V5KSBvdmVy
cmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKFBsYXRmb3JtQ0FMYXllciopIG92ZXJy
aWRlOworCisgICAgdmlydHVhbCBib29sIGlzT3BhcXVlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29sKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgRmxv
YXRSZWN0IGJvdW5kcygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3Vu
ZHMoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQz
RCBwb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50M0QmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgRmxvYXRQb2lu
dDNEIGFuY2hvclBvaW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEFu
Y2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3Jt
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SGlkZGVuKGJvb2wpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tp
bmdTdG9yZUF0dGFjaGVkKGJvb2wpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBiYWNraW5n
U3RvcmVBdHRhY2hlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29sKSBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc0RvdWJsZVNpZGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNldERvdWJsZVNpZGVkKGJvb2wpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIG1hc2tz
VG9Cb3VuZHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0Jv
dW5kcyhib29sKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBhY2NlbGVyYXRlc0RyYXdp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZXNEcmF3
aW5nKGJvb2wpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBDRlR5cGVSZWYgY29udGVudHMoKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSBv
dmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVy
KEZpbHRlclR5cGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYWduaWZpY2F0aW9u
RmlsdGVyKEZpbHRlclR5cGUpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3Vu
ZENvbG9yKGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9y
ZGVyV2lkdGgoZmxvYXQpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNv
bG9yKGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHko
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGZpbHRlcnNDYW5C
ZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIHZpcnR1YWwgdm9pZCBj
b3B5RmlsdGVyc0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyJikgb3ZlcnJpZGU7CisKKyNpZiBF
TkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZE1vZGUoQmxl
bmRNb2RlKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3BlZWQoZmxvYXQp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2
YWwpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpIG92ZXJy
aWRlOworCisgICAgdmlydHVhbCBmbG9hdCBjb3JuZXJSYWRpdXMoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29ybmVyUmFkaXVzKGZsb2F0KSBvdmVycmlkZTsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVSb3VuZGVkUmVjdCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaGFwZVJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUGF0aCBzaGFwZVBhdGgo
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hhcGVQYXRoKGNvbnN0IFBh
dGgmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgV2luZFJ1bGUgc2hhcGVXaW5kUnVsZSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaGFwZVdpbmRSdWxlKFdpbmRSdWxl
KSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q3VzdG9tQXBwZWFyYW5j
ZSBjdXN0b21BcHBlYXJhbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jdXN0b21BcHBl
YXJhbmNlOyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoR3JhcGhp
Y3NMYXllcjo6Q3VzdG9tQXBwZWFyYW5jZSkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFRpbGVk
QmFja2luZyogdGlsZWRCYWNraW5nKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBj
b25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+
IGNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZv
cm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW51
bWVyYXRlUmVjdHNCZWluZ0RyYXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3Qp
KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShMYXllclR5
cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpOworICAgIFBsYXRmb3JtQ0FMYXllckNv
Y29hKFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKTsKKworICAg
IHZvaWQgY29tbW9uSW5pdCgpOworCisgICAgdmlydHVhbCBib29sIGlzUGxhdGZvcm1DQUxheWVy
Q29jb2EoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIHJlcXVp
cmVzQ3VzdG9tQXBwZWFyYW5jZVVwZGF0ZU9uQm91bmRzQ2hhbmdlKCkgY29uc3Q7CisKKyAgICBS
ZXRhaW5QdHI8TlNPYmplY3Q+IG1fZGVsZWdhdGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtQ0FMYXllckxpc3Q+IG1fY3VzdG9tU3VibGF5ZXJzOworICAgIEdyYXBoaWNzTGF5ZXI6OkN1
c3RvbUFwcGVhcmFuY2UgbV9jdXN0b21BcHBlYXJhbmNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxG
bG9hdFJvdW5kZWRSZWN0PiBtX3NoYXBlUm91bmRlZFJlY3Q7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUExBVEZPUk1fQ0FMQVlFUihXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXJDb2NvYSwgaXNQbGF0Zm9ybUNBTGF5ZXJDb2NvYSgpKQorCisj
ZW5kaWYgLy8gUGxhdGZvcm1DQUxheWVyQ29jb2FfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJD
b2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kMWQ3M2FlZTk4MTE5NWM3YWIzYmM3NGY3ZTA5OTc0MmE4Y2Q3
NzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0KQEAgLTAsMCArMSwxMTA5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllckNvY29hLmgiCisKKyNpbXBvcnQgIkFuaW1h
dGlvblV0aWxpdGllcy5oIgorI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJG
b250QW50aWFsaWFzaW5nU3RhdGVTYXZlci5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKKyNpbXBvcnQgIkxlbmd0aEZ1bmN0aW9ucy5o
IgorI2ltcG9ydCAiUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmgiCisjaW1wb3J0ICJQbGF0Zm9y
bUNBRmlsdGVycy5oIgorI2ltcG9ydCAiUXVhcnR6Q29yZVNQSS5oIgorI2ltcG9ydCAiU2Nyb2xs
YmFyVGhlbWVNYWMuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJUaWxlQ29u
dHJvbGxlci5oIgorI2ltcG9ydCAiVGlsZWRCYWNraW5nLmgiCisjaW1wb3J0ICJXZWJBY3Rpb25E
aXNhYmxpbmdDQUxheWVyRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVDQUxheWVyRXh0cmFz
LmgiCisjaW1wb3J0ICJXZWJHTExheWVyLmgiCisjaW1wb3J0ICJXZWJMYXllci5oIgorI2ltcG9y
dCAiV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5k
YXRpb24uaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8b2Jq
Yy9vYmpjLWF1dG8uaD4KKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL0N1
cnJlbnRUaW1lLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBQTEFURk9STShJ
T1MpCisjaW1wb3J0ICJXQUtXaW5kb3cuaCIKKyNpbXBvcnQgIldLR3JhcGhpY3MuaCIKKyNpbXBv
cnQgIldlYkNvcmVUaHJlYWQuaCIKKyNpbXBvcnQgIldlYlRpbGVkTGF5ZXIuaCIKKyNlbHNlCisj
aW1wb3J0ICJUaGVtZU1hYy5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8y
KQorQGludGVyZmFjZSBDQUJhY2tkcm9wTGF5ZXIgOiBDQUxheWVyCitAZW5kCisjZW5kaWYKKwor
U09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCitTT0ZUX0xJTktfQ0xB
U1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVyKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpj
cmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllckNvY29hKGxheWVyVHlw
ZSwgb3duZXIpKTsKK30KKworUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FM
YXllckNvY29hOjpjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllckNv
Y29hKHN0YXRpY19jYXN0PFBsYXRmb3JtTGF5ZXIqPihwbGF0Zm9ybUxheWVyKSwgb3duZXIpKTsK
K30KKworc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGxhdGZvcm1DQUxheWVyUG9pbnRlciA9IEAi
V0tQbGF0Zm9ybUNBTGF5ZXIiOworUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcih2b2lkKiBwbGF0Zm9ybUxheWVyKQoreworICAgIGlmICghcGxhdGZvcm1M
YXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBQb2ludGVyIHRvIFBsYXRmb3JtQ0FM
YXllciBpcyBrZXB0IGluIGEga2V5IG9mIHRoZSBDQUxheWVyCisgICAgUGxhdGZvcm1DQUxheWVy
KiBwbGF0Zm9ybUNBTGF5ZXIgPSBuaWw7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
CisgICAgcGxhdGZvcm1DQUxheWVyID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1DQUxheWVyKj4oW1tz
dGF0aWNfY2FzdDxDQUxheWVyKj4ocGxhdGZvcm1MYXllcikgdmFsdWVGb3JLZXk6cGxhdGZvcm1D
QUxheWVyUG9pbnRlcl0gcG9pbnRlclZhbHVlXSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUworICAgIHJldHVybiBwbGF0Zm9ybUNBTGF5ZXI7Cit9CisKK3N0YXRpYyBkb3VibGUgbWVk
aWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQoreworICAgIHJldHVybiBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKTsKK30K
KworLy8gRGVsZWdhdGUgZm9yIGFuaW1hdGlvbkRpZFN0YXJ0IGNhbGxiYWNrCitAaW50ZXJmYWNl
IFdlYkFuaW1hdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgeworICAgIFBsYXRmb3JtQ0FMYXllciog
bV9vd25lcjsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmltYXRpb24gKilh
bmltOworLSAodm9pZClzZXRPd25lcjooUGxhdGZvcm1DQUxheWVyKilvd25lcjsKKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViQW5pbWF0aW9uRGVsZWdhdGUKKworLSAodm9pZClhbmltYXRp
b25EaWRTdGFydDooQ0FBbmltYXRpb24gKilhbmltYXRpb24KK3sKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgV2ViVGhyZWFkTG9jaygpOworI2VuZGlmCisgICAgaWYgKCFtX293bmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDRlRpbWVJbnRlcnZhbCBzdGFydFRpbWU7CisgICAgaWYgKGhhc0V4
cGxpY2l0QmVnaW5UaW1lKGFuaW1hdGlvbikpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3
aGF0IHRpbWUgQ0EgdXNlZCB0byBjb21taXQgdGhlIGFuaW1hdGlvbiwgc28ganVzdCB1c2UgdGhl
IGN1cnJlbnQgdGltZQorICAgICAgICAvLyAoZXZlbiB0aG91Z2ggdGhpcyB3aWxsIGJlIHNsaWdo
dGx5IG9mZikuCisgICAgICAgIHN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0FD
dXJyZW50TWVkaWFUaW1lKCkpOworICAgIH0gZWxzZQorICAgICAgICBzdGFydFRpbWUgPSBtZWRp
YVRpbWVUb0N1cnJlbnRUaW1lKFthbmltYXRpb24gYmVnaW5UaW1lXSk7CisKKyAgICBDQUxheWVy
ICpsYXllciA9IG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKTsKKworICAgIFN0cmluZyBhbmltYXRp
b25LZXk7CisgICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25LZXlzXSkg
eworICAgICAgICBpZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1hdGlvbikg
eworICAgICAgICAgICAgYW5pbWF0aW9uS2V5ID0ga2V5OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkpCisgICAg
ICAgIG1fb3duZXItPmFuaW1hdGlvblN0YXJ0ZWQoYW5pbWF0aW9uS2V5LCBzdGFydFRpbWUpOwor
fQorCistICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5pbWF0aW9uIGZp
bmlzaGVkOihCT09MKWZpbmlzaGVkCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdlYlRocmVh
ZExvY2soKTsKKyNlbmRpZgorICAgIFVOVVNFRF9QQVJBTShmaW5pc2hlZCk7CisKKyAgICBpZiAo
IW1fb3duZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDQUxheWVyICpsYXllciA9IG1f
b3duZXItPnBsYXRmb3JtTGF5ZXIoKTsKKworICAgIFN0cmluZyBhbmltYXRpb25LZXk7CisgICAg
Zm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25LZXlzXSkgeworICAgICAgICBp
ZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1hdGlvbikgeworICAgICAgICAg
ICAgYW5pbWF0aW9uS2V5ID0ga2V5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkpCisgICAgICAgIG1fb3duZXIt
PmFuaW1hdGlvbkVuZGVkKGFuaW1hdGlvbktleSk7Cit9CisKKy0gKHZvaWQpc2V0T3duZXI6KFBs
YXRmb3JtQ0FMYXllciopb3duZXIKK3sKKyAgICBtX293bmVyID0gb3duZXI7Cit9CisKK0BlbmQK
Kwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKK3sKKyAgICBQbGF0Zm9ybUNBTGF5ZXI6OnNldE93bmVyKG93bmVyKTsKKyAg
ICAKKyAgICAvLyBDaGFuZ2UgdGhlIGRlbGVnYXRlJ3Mgb3duZXIgaWYgbmVlZGVkCisgICAgaWYg
KG1fZGVsZWdhdGUpCisgICAgICAgIFtzdGF0aWNfY2FzdDxXZWJBbmltYXRpb25EZWxlZ2F0ZSo+
KG1fZGVsZWdhdGUuZ2V0KCkpIHNldE93bmVyOnRoaXNdOyAgICAgICAgCit9CisKK3N0YXRpYyBO
U1N0cmluZyAqdG9DQUZpbHRlclR5cGUoUGxhdGZvcm1DQUxheWVyOjpGaWx0ZXJUeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxpbmVh
cjogcmV0dXJuIGtDQUZpbHRlckxpbmVhcjsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TmVh
cmVzdDogcmV0dXJuIGtDQUZpbHRlck5lYXJlc3Q7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6
OlRyaWxpbmVhcjogcmV0dXJuIGtDQUZpbHRlclRyaWxpbmVhcjsKKyAgICBkZWZhdWx0OiByZXR1
cm4gMDsKKyAgICB9Cit9CisKK1BsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIFBsYXRmb3JtQ0FM
YXllckNvY29hOjpsYXllclR5cGVGb3JQbGF0Zm9ybUxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVy
KQoreworICAgIGlmIChbbGF5ZXIgaXNLaW5kT2ZDbGFzczpnZXRBVlBsYXllckxheWVyQ2xhc3Mo
KV0gfHwgW2xheWVyIGlzS2luZE9mQ2xhc3M6b2JqY19nZXRDbGFzcygiV2ViVmlkZW9Db250YWlu
ZXJMYXllciIpXSkKKyAgICAgICAgcmV0dXJuIExheWVyVHlwZUFWUGxheWVyTGF5ZXI7CisKKyAg
ICBpZiAoW2xheWVyIGlzS2luZE9mQ2xhc3M6W1dlYkdMTGF5ZXIgY2xhc3NdXSkKKyAgICAgICAg
cmV0dXJuIExheWVyVHlwZVdlYkdMTGF5ZXI7CisKKyAgICByZXR1cm4gTGF5ZXJUeXBlQ3VzdG9t
OworfQorCitQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6UGxhdGZvcm1DQUxheWVyQ29jb2EoTGF5ZXJU
eXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKKyAgICA6IFBsYXRm
b3JtQ0FMYXllcihsYXllclR5cGUsIG93bmVyKQorICAgICwgbV9jdXN0b21BcHBlYXJhbmNlKEdy
YXBoaWNzTGF5ZXI6Ok5vQ3VzdG9tQXBwZWFyYW5jZSkKK3sKKyAgICBDbGFzcyBsYXllckNsYXNz
ID0gTmlsOworICAgIHN3aXRjaCAobGF5ZXJUeXBlKSB7CisgICAgY2FzZSBMYXllclR5cGVMYXll
cjoKKyAgICBjYXNlIExheWVyVHlwZVJvb3RMYXllcjoKKyAgICAgICAgbGF5ZXJDbGFzcyA9IFtD
QUxheWVyIGNsYXNzXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMYXllclR5cGVTY3JvbGxp
bmdMYXllcjoKKyAgICAgICAgLy8gU2Nyb2xsaW5nIGxheWVycyBvbmx5IGhhdmUgc3BlY2lhbCBi
ZWhhdmlvciB3aXRoIFBsYXRmb3JtQ0FMYXllclJlbW90ZS4KKyAgICAgICAgLy8gZmFsbHRocm91
Z2gKKyAgICBjYXNlIExheWVyVHlwZVdlYkxheWVyOgorICAgICAgICBsYXllckNsYXNzID0gW1dl
YkxheWVyIGNsYXNzXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMYXllclR5cGVTaW1wbGVM
YXllcjoKKyAgICBjYXNlIExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcjoKKyAgICAgICAg
bGF5ZXJDbGFzcyA9IFtXZWJTaW1wbGVMYXllciBjbGFzc107CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI6CisgICAgICAgIGxheWVyQ2xhc3MgPSBbQ0FU
cmFuc2Zvcm1MYXllciBjbGFzc107CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGF5ZXJUeXBl
QmFja2Ryb3BMYXllcjoKKyAgICBjYXNlIExheWVyVHlwZUxpZ2h0U3lzdGVtQmFja2Ryb3BMYXll
cjoKKyAgICBjYXNlIExheWVyVHlwZURhcmtTeXN0ZW1CYWNrZHJvcExheWVyOgorI2lmIEVOQUJM
RShGSUxURVJTX0xFVkVMXzIpCisgICAgICAgIGxheWVyQ2xhc3MgPSBbQ0FCYWNrZHJvcExheWVy
IGNsYXNzXTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBs
YXllckNsYXNzID0gW0NBTGF5ZXIgY2xhc3NdOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTGF5ZXJUeXBlV2ViVGlsZWRMYXllcjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI6
CisgICAgY2FzZSBMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXI6CisgICAgICAgIGxheWVy
Q2xhc3MgPSBbV2ViVGlsZWRCYWNraW5nTGF5ZXIgY2xhc3NdOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIExheWVyVHlwZUFWUGxheWVyTGF5ZXI6CisgICAgICAgIGxheWVyQ2xhc3MgPSBnZXRB
VlBsYXllckxheWVyQ2xhc3MoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMYXllclR5cGVX
ZWJHTExheWVyOgorICAgICAgICAvLyBXZSBkb24ndCBjcmVhdGUgUGxhdGZvcm1DQUxheWVyQ29j
b2FzIHdyYXBwZWQgYXJvdW5kIFdlYkdMTGF5ZXJzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMYXllclR5cGVTaGFwZUxheWVyOgorICAg
ICAgICBsYXllckNsYXNzID0gW0NBU2hhcGVMYXllciBjbGFzc107CisgICAgICAgIC8vIGZpbGxD
b2xvciBkZWZhdWx0cyB0byBvcGFxdWUgYmxhY2suCisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TGF5ZXJUeXBlQ3VzdG9tOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobGF5ZXJD
bGFzcykKKyAgICAgICAgbV9sYXllciA9IGFkb3B0TlMoWyhDQUxheWVyICopW2xheWVyQ2xhc3Mg
YWxsb2NdIGluaXRdKTsKKworICAgIGNvbW1vbkluaXQoKTsKK30KKworUGxhdGZvcm1DQUxheWVy
Q29jb2E6OlBsYXRmb3JtQ0FMYXllckNvY29hKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQqIG93bmVyKQorICAgIDogUGxhdGZvcm1DQUxheWVyKGxheWVyVHlwZUZv
clBsYXRmb3JtTGF5ZXIobGF5ZXIpLCBvd25lcikKKyAgICAsIG1fY3VzdG9tQXBwZWFyYW5jZShH
cmFwaGljc0xheWVyOjpOb0N1c3RvbUFwcGVhcmFuY2UpCit7CisgICAgbV9sYXllciA9IGxheWVy
OworICAgIGNvbW1vbkluaXQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29t
bW9uSW5pdCgpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgLy8gU2F2
ZSBhIHBvaW50ZXIgdG8gJ3RoaXMnIGluIHRoZSBDQUxheWVyCisgICAgW21fbGF5ZXIgc2V0VmFs
dWU6W05TVmFsdWUgdmFsdWVXaXRoUG9pbnRlcjp0aGlzXSBmb3JLZXk6cGxhdGZvcm1DQUxheWVy
UG9pbnRlcl07CisgICAgCisgICAgLy8gQ2xlYXIgYWxsIHRoZSBpbXBsaWNpdCBhbmltYXRpb25z
IG9uIHRoZSBDQUxheWVyCisgICAgaWYgKG1fbGF5ZXJUeXBlID09IExheWVyVHlwZUFWUGxheWVy
TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlV2ViR0xMYXllciB8fCBtX2xheWVyVHlw
ZSA9PSBMYXllclR5cGVTY3JvbGxpbmdMYXllciB8fCBtX2xheWVyVHlwZSA9PSBMYXllclR5cGVD
dXN0b20pCisgICAgICAgIFttX2xheWVyIHdlYl9kaXNhYmxlQWxsQWN0aW9uc107CisgICAgZWxz
ZQorICAgICAgICBbbV9sYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXll
ckRlbGVnYXRlIHNoYXJlZF1dOworCisgICAgLy8gU28gdGhhdCB0aGUgc2Nyb2xsaW5nIHRocmVh
ZCdzIHBlcmZvcm1hbmNlIGxvZ2dpbmcgY29kZSBjYW4gZmluZCBhbGwgdGhlIHRpbGVzLCBtYXJr
IHRoaXMgYXMgYmVpbmcgYSB0aWxlLgorICAgIGlmIChtX2xheWVyVHlwZSA9PSBMYXllclR5cGVU
aWxlZEJhY2tpbmdUaWxlTGF5ZXIpCisgICAgICAgIFttX2xheWVyIHNldFZhbHVlOkBZRVMgZm9y
S2V5OkAiaXNUaWxlIl07CisKKyAgICBpZiAodXNlc1RpbGVkQmFja2luZ0xheWVyKCkpIHsKKyAg
ICAgICAgV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRpbGVkQmFja2luZ0xheWVyID0gc3RhdGljX2Nh
c3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIqPihtX2xheWVyLmdldCgpKTsKKyAgICAgICAgVGlsZUNv
bnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gW3RpbGVkQmFja2luZ0xheWVyIGNyZWF0ZVRpbGVD
b250cm9sbGVyOnRoaXNdOworCisgICAgICAgIG1fY3VzdG9tU3VibGF5ZXJzID0gc3RkOjptYWtl
X3VuaXF1ZTxQbGF0Zm9ybUNBTGF5ZXJMaXN0Pih0aWxlQ29udHJvbGxlci0+Y29udGFpbmVyTGF5
ZXJzKCkpOworICAgIH0KKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKworUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjbG9uZShQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdAoreworICAgIExheWVyVHlwZSB0eXBlOwor
ICAgIHN3aXRjaCAobGF5ZXJUeXBlKCkpIHsKKyAgICBjYXNlIExheWVyVHlwZVRyYW5zZm9ybUxh
eWVyOgorICAgICAgICB0eXBlID0gTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTGF5ZXJUeXBlQVZQbGF5ZXJMYXllcjoKKyAgICAgICAgdHlwZSA9IExh
eWVyVHlwZUFWUGxheWVyTGF5ZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGF5ZXJUeXBl
U2hhcGVMYXllcjoKKyAgICAgICAgdHlwZSA9IExheWVyVHlwZVNoYXBlTGF5ZXI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTGF5ZXJUeXBlTGF5ZXI6CisgICAgZGVmYXVsdDoKKyAgICAgICAg
dHlwZSA9IExheWVyVHlwZUxheWVyOworICAgICAgICBicmVhazsKKyAgICB9OworICAgIFJlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0
ZSh0eXBlLCBvd25lcik7CisgICAgCisgICAgbmV3TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9u
KCkpOworICAgIG5ld0xheWVyLT5zZXRCb3VuZHMoYm91bmRzKCkpOworICAgIG5ld0xheWVyLT5z
ZXRBbmNob3JQb2ludChhbmNob3JQb2ludCgpKTsKKyAgICBuZXdMYXllci0+c2V0VHJhbnNmb3Jt
KHRyYW5zZm9ybSgpKTsKKyAgICBuZXdMYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oc3VibGF5
ZXJUcmFuc2Zvcm0oKSk7CisgICAgbmV3TGF5ZXItPnNldENvbnRlbnRzKGNvbnRlbnRzKCkpOwor
ICAgIG5ld0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3VuZHMoKSk7CisgICAgbmV3
TGF5ZXItPnNldERvdWJsZVNpZGVkKGlzRG91YmxlU2lkZWQoKSk7CisgICAgbmV3TGF5ZXItPnNl
dE9wYXF1ZShpc09wYXF1ZSgpKTsKKyAgICBuZXdMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKGJh
Y2tncm91bmRDb2xvcigpKTsKKyAgICBuZXdMYXllci0+c2V0Q29udGVudHNTY2FsZShjb250ZW50
c1NjYWxlKCkpOworICAgIG5ld0xheWVyLT5zZXRDb3JuZXJSYWRpdXMoY29ybmVyUmFkaXVzKCkp
OworICAgIG5ld0xheWVyLT5jb3B5RmlsdGVyc0Zyb20oKnRoaXMpOworICAgIG5ld0xheWVyLT51
cGRhdGVDdXN0b21BcHBlYXJhbmNlKGN1c3RvbUFwcGVhcmFuY2UoKSk7CisKKyAgICBpZiAodHlw
ZSA9PSBMYXllclR5cGVBVlBsYXllckxheWVyKSB7CisgICAgICAgIEFTU0VSVChbbmV3TGF5ZXIt
PnBsYXRmb3JtTGF5ZXIoKSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7
CisgICAgICAgIEFTU0VSVChbcGxhdGZvcm1MYXllcigpIGlzS2luZE9mQ2xhc3M6Z2V0QVZQbGF5
ZXJMYXllckNsYXNzKCldKTsKKworICAgICAgICBBVlBsYXllckxheWVyKiBkZXN0aW5hdGlvblBs
YXllckxheWVyID0gc3RhdGljX2Nhc3Q8QVZQbGF5ZXJMYXllciAqPihuZXdMYXllci0+cGxhdGZv
cm1MYXllcigpKTsKKyAgICAgICAgQVZQbGF5ZXJMYXllciogc291cmNlUGxheWVyTGF5ZXIgPSBz
dGF0aWNfY2FzdDxBVlBsYXllckxheWVyICo+KHBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgICAgICBb
ZGVzdGluYXRpb25QbGF5ZXJMYXllciBzZXRQbGF5ZXI6W3NvdXJjZVBsYXllckxheWVyIHBsYXll
cl1dOworICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgaWYgKHR5cGUgPT0gTGF5ZXJUeXBl
U2hhcGVMYXllcikKKyAgICAgICAgbmV3TGF5ZXItPnNldFNoYXBlUm91bmRlZFJlY3Qoc2hhcGVS
b3VuZGVkUmVjdCgpKTsKKworICAgIHJldHVybiBuZXdMYXllcjsKK30KKworUGxhdGZvcm1DQUxh
eWVyQ29jb2E6On5QbGF0Zm9ybUNBTGF5ZXJDb2NvYSgpCit7CisgICAgW21fbGF5ZXIgc2V0VmFs
dWU6bmlsIGZvcktleTpwbGF0Zm9ybUNBTGF5ZXJQb2ludGVyXTsKKyAgICAKKyAgICAvLyBSZW1v
dmUgdGhlIG93bmVyIHBvaW50ZXIgZnJvbSB0aGUgZGVsZWdhdGUgaW4gY2FzZSB0aGVyZSBpcyBh
IHBlbmRpbmcgYW5pbWF0aW9uU3RhcnRlZCBldmVudC4KKyAgICBbc3RhdGljX2Nhc3Q8V2ViQW5p
bWF0aW9uRGVsZWdhdGUqPihtX2RlbGVnYXRlLmdldCgpKSBzZXRPd25lcjpuaWxdOworCisgICAg
aWYgKHVzZXNUaWxlZEJhY2tpbmdMYXllcigpKQorICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViVGls
ZWRCYWNraW5nTGF5ZXIgKj4obV9sYXllci5nZXQoKSkgaW52YWxpZGF0ZV07Cit9CisKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25LZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkKK3sKKyAgICBpZiAobV9vd25lcikK
KyAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChhbmltYXRp
b25LZXksIGJlZ2luVGltZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1h
dGlvbkVuZGVkKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5KQoreworICAgIGlmIChtX293bmVy
KQorICAgICAgICBtX293bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChhbmltYXRp
b25LZXkpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpzZXROZWVkc0Rpc3BsYXko
KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyIHNldE5l
ZWRzRGlzcGxheV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFBs
YXRmb3JtQ0FMYXllckNvY29hOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0
JiBkaXJ0eVJlY3QpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21f
bGF5ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OmRpcnR5UmVjdF07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpjb3B5Q29udGVu
dHNGcm9tTGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3sKKyAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKKyAgICBDQUxheWVyKiBjYUxheWVyID0gbGF5ZXItPm1fbGF5ZXIuZ2V0
KCk7CisgICAgaWYgKFttX2xheWVyIGNvbnRlbnRzXSAhPSBbY2FMYXllciBjb250ZW50c10pCisg
ICAgICAgIFttX2xheWVyIHNldENvbnRlbnRzOltjYUxheWVyIGNvbnRlbnRzXV07CisgICAgZWxz
ZQorICAgICAgICBbbV9sYXllciBzZXRDb250ZW50c0NoYW5nZWRdOworICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKK30KKworUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6c3VwZXJsYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBsYXRmb3JtQ0FMYXllcihbbV9s
YXllciBzdXBlcmxheWVyXSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnJlbW92
ZUZyb21TdXBlcmxheWVyKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAg
ICBbbV9sYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpzZXRTdWJsYXllcnMoY29u
c3QgUGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKK3sKKyAgICAvLyBTaG9ydCBjaXJjdWl0aW5n
IGhlcmUgYXZvaWRzIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBhcnJheSBiZWxvdy4KKyAgICBpZiAo
IWxpc3Quc2l6ZSgpKSB7CisgICAgICAgIHJlbW92ZUFsbFN1YmxheWVycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgTlNN
dXRhYmxlQXJyYXkqIHN1YmxheWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgW3N1
YmxheWVycyBhZGRPYmplY3Q6bGlzdFtpXS0+bV9sYXllci5nZXQoKV07CisKKyAgICBbbV9sYXll
ciBzZXRTdWJsYXllcnM6c3VibGF5ZXJzXTsKKyAgICBbc3VibGF5ZXJzIHJlbGVhc2VdOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKKyAgICBbbV9sYXllciBzZXRTdWJsYXllcnM6bmlsXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OmFwcGVuZFN1YmxheWVy
KFBsYXRmb3JtQ0FMYXllciYgbGF5ZXIpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCisgICAgQVNTRVJUKG1fbGF5ZXIgIT0gbGF5ZXIubV9sYXllcik7CisgICAgW21fbGF5ZXIg
YWRkU3VibGF5ZXI6bGF5ZXIubV9sYXllci5nZXQoKV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjppbnNlcnRTdWJsYXllcihQ
bGF0Zm9ybUNBTGF5ZXImIGxheWVyLCBzaXplX3QgaW5kZXgpCit7CisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisgICAgQVNTRVJUKG1fbGF5ZXIgIT0gbGF5ZXIubV9sYXllcik7Cisg
ICAgW21fbGF5ZXIgaW5zZXJ0U3VibGF5ZXI6bGF5ZXIubV9sYXllci5nZXQoKSBhdEluZGV4Omlu
ZGV4XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyQ29jb2E6OnJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXImIHJlZmVyZW5jZSwg
UGxhdGZvcm1DQUxheWVyJiBsYXllcikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKKyAgICBBU1NFUlQobV9sYXllciAhPSBsYXllci5tX2xheWVyKTsKKyAgICBbbV9sYXllciBy
ZXBsYWNlU3VibGF5ZXI6cmVmZXJlbmNlLm1fbGF5ZXIuZ2V0KCkgd2l0aDpsYXllci5tX2xheWVy
LmdldCgpXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgUGxhdGZv
cm1DQUxheWVyQ29jb2E6OmFkb3B0U3VibGF5ZXJzKFBsYXRmb3JtQ0FMYXllciYgc291cmNlKQor
eworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyIHNldFN1Ymxh
eWVyczpbc291cmNlLm1fbGF5ZXIuZ2V0KCkgc3VibGF5ZXJzXV07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjphZGRBbmltYXRp
b25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mIGFuaW1hdGlv
bikKK3sKKyAgICAvLyBBZGQgdGhlIGRlbGVnYXRlCisgICAgaWYgKCFtX2RlbGVnYXRlKSB7Cisg
ICAgICAgIFdlYkFuaW1hdGlvbkRlbGVnYXRlKiB3ZWJBbmltYXRpb25EZWxlZ2F0ZSA9IFtbV2Vi
QW5pbWF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgICAgICBtX2RlbGVnYXRlID0gYWRv
cHROUyh3ZWJBbmltYXRpb25EZWxlZ2F0ZSk7CisgICAgICAgIFt3ZWJBbmltYXRpb25EZWxlZ2F0
ZSBzZXRPd25lcjp0aGlzXTsKKyAgICB9CisgICAgCisgICAgQ0FQcm9wZXJ0eUFuaW1hdGlvbiog
cHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4oZG93
bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPihhbmltYXRpb24pLnBsYXRmb3JtQW5pbWF0
aW9uKCkpOworICAgIGlmICghW3Byb3BlcnR5QW5pbWF0aW9uIGRlbGVnYXRlXSkKKyAgICAgICAg
W3Byb3BlcnR5QW5pbWF0aW9uIHNldERlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX2RlbGVnYXRl
LmdldCgpKV07CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbbV9sYXll
ciBhZGRBbmltYXRpb246cHJvcGVydHlBbmltYXRpb24gZm9yS2V5OmtleV07CisgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpyZW1v
dmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisgICAgW21fbGF5ZXIgcmVtb3ZlQW5pbWF0aW9uRm9yS2V5OmtleV07
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitQYXNzUmVmUHRyPFBsYXRmb3Jt
Q0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllckNvY29hOjphbmltYXRpb25Gb3JLZXkoY29uc3Qg
U3RyaW5nJiBrZXkpCit7CisgICAgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogcHJvcGVydHlBbmltYXRp
b24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4oW21fbGF5ZXIgYW5pbWF0aW9u
Rm9yS2V5OmtleV0pOworICAgIGlmICghcHJvcGVydHlBbmltYXRpb24pCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNyZWF0ZShwcm9wZXJ0
eUFuaW1hdGlvbik7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldE1hc2soUGxh
dGZvcm1DQUxheWVyKiBsYXllcikKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICBbbV9sYXllciBzZXRNYXNrOmxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5p
bF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitib29sIFBsYXRmb3JtQ0FM
YXllckNvY29hOjppc09wYXF1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX2xheWVyIGlzT3Bh
cXVlXTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0T3BhcXVlKGJvb2wgdmFs
dWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21fbGF5ZXIgc2V0
T3BhcXVlOnZhbHVlXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK0Zsb2F0
UmVjdCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
W21fbGF5ZXIgYm91bmRzXTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0Qm91
bmRzKGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisgICAgW21fbGF5ZXIgc2V0Qm91bmRzOnZhbHVlXTsKKyAgICAKKyAgICBpZiAocmVx
dWlyZXNDdXN0b21BcHBlYXJhbmNlVXBkYXRlT25Cb3VuZHNDaGFuZ2UoKSkKKyAgICAgICAgdXBk
YXRlQ3VzdG9tQXBwZWFyYW5jZShtX2N1c3RvbUFwcGVhcmFuY2UpOworCisgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworfQorCitGbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyQ29jb2E6
OnBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBDR1BvaW50IHBvaW50ID0gW21fbGF5ZXIgcG9zaXRp
b25dOworICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgW21fbGF5ZXIg
elBvc2l0aW9uXSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisgICAgW21fbGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UodmFsdWUueCgpLCB2
YWx1ZS55KCkpXTsKKyAgICBbbV9sYXllciBzZXRaUG9zaXRpb246dmFsdWUueigpXTsKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK0Zsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5
ZXJDb2NvYTo6YW5jaG9yUG9pbnQoKSBjb25zdAoreworICAgIENHUG9pbnQgcG9pbnQgPSBbbV9s
YXllciBhbmNob3JQb2ludF07CisgICAgZmxvYXQgeiA9IDA7CisgICAgeiA9IFttX2xheWVyIGFu
Y2hvclBvaW50Wl07CisgICAgcmV0dXJuIEZsb2F0UG9pbnQzRChwb2ludC54LCBwb2ludC55LCB6
KTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0QW5jaG9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICBbbV9sYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVl
LnkoKSldOworICAgIFttX2xheWVyIHNldEFuY2hvclBvaW50Wjp2YWx1ZS56KCldOworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZv
cm1DQUxheWVyQ29jb2E6OnRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX2xheWVy
IHRyYW5zZm9ybV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCit7CisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisgICAgW21fbGF5ZXIgc2V0VHJhbnNmb3JtOnZhbHVlXTsKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRm
b3JtQ0FMYXllckNvY29hOjpzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFttX2xheWVyIHN1YmxheWVyVHJhbnNmb3JtXTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJD
b2NvYTo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZh
bHVlKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyIHNl
dFN1YmxheWVyVHJhbnNmb3JtOnZhbHVlXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldEhpZGRlbihib29sIHZhbHVlKQor
eworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyIHNldEhpZGRl
bjp2YWx1ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFBsYXRm
b3JtQ0FMYXllckNvY29hOjpzZXRCYWNraW5nU3RvcmVBdHRhY2hlZChib29sKQoreworICAgIC8v
IFdlIGNvdWxkIHRocm93IGF3YXkgYmFja2luZyBzdG9yZSBoZXJlIHdpdGggc2V0Q29udGVudHM6
bmlsLgorfQorCitib29sIFBsYXRmb3JtQ0FMYXllckNvY29hOjpiYWNraW5nU3RvcmVBdHRhY2hl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVy
Q29jb2E6OnNldEdlb21ldHJ5RmxpcHBlZChib29sIHZhbHVlKQoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyIHNldEdlb21ldHJ5RmxpcHBlZDp2YWx1ZV07
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitib29sIFBsYXRmb3JtQ0FMYXll
ckNvY29hOjppc0RvdWJsZVNpZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fbGF5ZXIgaXNE
b3VibGVTaWRlZF07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldERvdWJsZVNp
ZGVkKGJvb2wgdmFsdWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAg
W21fbGF5ZXIgc2V0RG91YmxlU2lkZWQ6dmFsdWVdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKK30KKworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6bWFza3NUb0JvdW5kcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFttX2xheWVyIG1hc2tzVG9Cb3VuZHNdOworfQorCit2b2lkIFBs
YXRmb3JtQ0FMYXllckNvY29hOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgdmFsdWUpCit7CisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21fbGF5ZXIgc2V0TWFza3NUb0JvdW5k
czp2YWx1ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitib29sIFBsYXRm
b3JtQ0FMYXllckNvY29hOjphY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdAoreworICAgIHJldHVy
biBbbV9sYXllciBhY2NlbGVyYXRlc0RyYXdpbmddOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXll
ckNvY29hOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcpCit7
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21fbGF5ZXIgc2V0QWNjZWxl
cmF0ZXNEcmF3aW5nOmFjY2VsZXJhdGVzRHJhd2luZ107CisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworfQorCitDRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNvbnRlbnRzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gW21fbGF5ZXIgY29udGVudHNdOworfQorCit2b2lkIFBsYXRm
b3JtQ0FMYXllckNvY29hOjpzZXRDb250ZW50cyhDRlR5cGVSZWYgdmFsdWUpCit7CisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21fbGF5ZXIgc2V0Q29udGVudHM6c3RhdGlj
X2Nhc3Q8aWQ+KGNvbnN0X2Nhc3Q8dm9pZCo+KHZhbHVlKSldOworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0Q29udGVudHNS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisgICAgW21fbGF5ZXIgc2V0Q29udGVudHNSZWN0OnZhbHVlXTsKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldE1p
bmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQoreworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyIHNldE1pbmlmaWNhdGlvbkZpbHRlcjp0b0NBRmls
dGVyVHlwZSh2YWx1ZSldOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBl
IHZhbHVlKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVy
IHNldE1hZ25pZmljYXRpb25GaWx0ZXI6dG9DQUZpbHRlclR5cGUodmFsdWUpXTsKKyAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK0NvbG9yIFBsYXRmb3JtQ0FMYXllckNvY29hOjpi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBbbV9sYXllciBiYWNrZ3JvdW5k
Q29sb3JdOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgQ29sb3ImIHZhbHVlKQoreworICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKKyAg
ICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNb
Ml0sIGNvbXBvbmVudHNbM10pOworCisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29s
b3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgIFJl
dGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShjb2xvclNw
YWNlLmdldCgpLCBjb21wb25lbnRzKSk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKKyAgICBbbV9sYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y29sb3IuZ2V0KCldOworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6
c2V0Qm9yZGVyV2lkdGgoZmxvYXQgdmFsdWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisgICAgW21fbGF5ZXIgc2V0Qm9yZGVyV2lkdGg6dmFsdWVdOworICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0Qm9y
ZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdOworICAgICAgICB2YWx1ZS5nZXRSR0JB
KGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNb
M10pOworCisgICAgICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBh
ZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICAgICAgUmV0YWluUHRy
PENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0
KCksIGNvbXBvbmVudHMpKTsKKworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICAgICAgW21fbGF5ZXIgc2V0Qm9yZGVyQ29sb3I6Y29sb3IuZ2V0KCldOworICAgICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSBlbHNlIHsKKyAgICAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TCisgICAgICAgIFttX2xheWVyIHNldEJvcmRlckNvbG9yOm5pbF07
CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICB9Cit9CisKK2Zsb2F0IFBs
YXRmb3JtQ0FMYXllckNvY29hOjpvcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fbGF5
ZXIgb3BhY2l0eV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldE9wYWNpdHko
ZmxvYXQgdmFsdWUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21f
bGF5ZXIgc2V0T3BhY2l0eTp2YWx1ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwor
fQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNP
bkxheWVyKHBsYXRmb3JtTGF5ZXIoKSwgZmlsdGVycyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyQ29jb2E6OmNvcHlGaWx0ZXJzRnJvbShjb25zdCBQbGF0Zm9ybUNBTGF5ZXImIHNvdXJjZUxh
eWVyKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyIHNl
dEZpbHRlcnM6W3NvdXJjZUxheWVyLnBsYXRmb3JtTGF5ZXIoKSBmaWx0ZXJzXV07CisgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitib29sIFBsYXRmb3JtQ0FMYXllckNvY29hOjpm
aWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7
CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzIHRvIGF2b2lkIG5l
ZWRsZXNzIHdvcmsKKyAgICBpZiAoIWZpbHRlcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSBm
aWx0ZXJzLmF0KGkpOworICAgICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi0+dHlwZSgpKSB7
CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGNhbiBvbmx5IGhhbmRsZSBkcm9wLXNo
YWRvdyBpcyBpZiBpdCdzIGxhc3QgaW4gdGhlIGxpc3QKKyAgICAgICAgICAgIGlmIChpIDwgKGZp
bHRlcnMuc2l6ZSgpIC0gMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgRU5BQkxFKENTU19DT01Q
T1NJVElORykKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldEJsZW5kTW9kZShCbGVuZE1v
ZGUgYmxlbmRNb2RlKQoreworICAgIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRCbGVuZGluZ0ZpbHRl
cnNPbkxheWVyKHBsYXRmb3JtTGF5ZXIoKSwgYmxlbmRNb2RlKTsKK30KKyNlbmRpZgorCit2b2lk
IFBsYXRmb3JtQ0FMYXllckNvY29hOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgW21fbGF5ZXIgc2V0TmFtZTp2YWx1
ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFBsYXRmb3JtQ0FM
YXllckNvY29hOjpzZXRTcGVlZChmbG9hdCB2YWx1ZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKKyAgICBbbV9sYXllciBzZXRTcGVlZDp2YWx1ZV07CisgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpzZXRUaW1l
T2Zmc2V0KENGVGltZUludGVydmFsIHZhbHVlKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworICAgIFttX2xheWVyIHNldFRpbWVPZmZzZXQ6dmFsdWVdOworICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKK30KKworZmxvYXQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNvbnRl
bnRzU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBbbV9sYXllciBjb250ZW50c1NjYWxlXTsK
K30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCB2
YWx1ZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbbV9sYXllciBz
ZXRDb250ZW50c1NjYWxlOnZhbHVlXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgW21fbGF5ZXIg
c2V0UmFzdGVyaXphdGlvblNjYWxlOnZhbHVlXTsKKworICAgIGlmIChtX2xheWVyVHlwZSA9PSBM
YXllclR5cGVXZWJUaWxlZExheWVyKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRl
IGFsbCB0aGUgdGlsZXMgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggc3RhbGUgdGlsZXMgd2l0aCB0
aGUgd3Jvbmcgc2NhbGUgaW4gdGhlIHdyb25nIHBsYWNlLAorICAgICAgICAvLyBzZWUgPHJkYXI6
Ly9wcm9ibGVtLzk0MzQ3NjU+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpvcHRpb25zRGljdGlvbmFyeSA9IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBrQ0FU
aWxlZExheWVyUmVtb3ZlSW1tZWRpYXRlbHksIG5pbF07CisgICAgICAgIFsoQ0FUaWxlZExheWVy
ICopbV9sYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6W21fbGF5ZXIgYm91bmRzXSBs
ZXZlbE9mRGV0YWlsOjAgb3B0aW9uczpvcHRpb25zRGljdGlvbmFyeV07CisgICAgfQorI2VuZGlm
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitmbG9hdCBQbGF0Zm9ybUNBTGF5
ZXJDb2NvYTo6Y29ybmVyUmFkaXVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fbGF5ZXIgY29y
bmVyUmFkaXVzXTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0Q29ybmVyUmFk
aXVzKGZsb2F0IHZhbHVlKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAg
IFttX2xheWVyIHNldENvcm5lclJhZGl1czp2YWx1ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpzZXRFZGdlQW50aWFsaWFz
aW5nTWFzayh1bnNpZ25lZCBtYXNrKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UworICAgIFttX2xheWVyIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrOm1hc2tdOworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKworRmxvYXRSb3VuZGVkUmVjdCBQbGF0Zm9ybUNBTGF5
ZXJDb2NvYTo6c2hhcGVSb3VuZGVkUmVjdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXJU
eXBlID09IExheWVyVHlwZVNoYXBlTGF5ZXIpOworICAgIGlmIChtX3NoYXBlUm91bmRlZFJlY3Qp
CisgICAgICAgIHJldHVybiAqbV9zaGFwZVJvdW5kZWRSZWN0OworCisgICAgcmV0dXJuIEZsb2F0
Um91bmRlZFJlY3QoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0U2hhcGVS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCkKK3sKKyAgICBB
U1NFUlQobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7CisgICAgbV9zaGFwZVJv
dW5kZWRSZWN0ID0gc3RkOjptYWtlX3VuaXF1ZTxGbG9hdFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVj
dCk7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBQYXRoIHNoYXBlUGF0
aDsKKyAgICBzaGFwZVBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZFJlY3QpOworICAgIFsoQ0FT
aGFwZUxheWVyICopbV9sYXllciBzZXRQYXRoOnNoYXBlUGF0aC5wbGF0Zm9ybVBhdGgoKV07Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCitXaW5kUnVsZSBQbGF0Zm9ybUNBTGF5
ZXJDb2NvYTo6c2hhcGVXaW5kUnVsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXJUeXBl
ID09IExheWVyVHlwZVNoYXBlTGF5ZXIpOworCisgICAgTlNTdHJpbmcgKmZpbGxSdWxlID0gWyhD
QVNoYXBlTGF5ZXIgKiltX2xheWVyIGZpbGxSdWxlXTsKKyAgICBpZiAoW2ZpbGxSdWxlIGlzRXF1
YWxUb1N0cmluZzpAImV2ZW4tb2RkIl0pCisgICAgICAgIHJldHVybiBSVUxFX0VWRU5PREQ7CisK
KyAgICByZXR1cm4gUlVMRV9OT05aRVJPOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29h
OjpzZXRTaGFwZVdpbmRSdWxlKFdpbmRSdWxlIHdpbmRSdWxlKQoreworICAgIEFTU0VSVChtX2xh
eWVyVHlwZSA9PSBMYXllclR5cGVTaGFwZUxheWVyKTsKKworICAgIHN3aXRjaCAod2luZFJ1bGUp
IHsKKyAgICBjYXNlIFJVTEVfTk9OWkVSTzoKKyAgICAgICAgWyhDQVNoYXBlTGF5ZXIgKiltX2xh
eWVyIHNldEZpbGxSdWxlOkAibm9uLXplcm8iXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBS
VUxFX0VWRU5PREQ6CisgICAgICAgIFsoQ0FTaGFwZUxheWVyICopbV9sYXllciBzZXRGaWxsUnVs
ZTpAImV2ZW4tb2RkIl07CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworUGF0aCBQbGF0Zm9y
bUNBTGF5ZXJDb2NvYTo6c2hhcGVQYXRoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllclR5
cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKKyAgICByZXR1cm4gUGF0aChDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShbKENBU2hhcGVM
YXllciAqKW1fbGF5ZXIgcGF0aF0pKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9
CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldFNoYXBlUGF0aChjb25zdCBQYXRoJiBw
YXRoKQoreworICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBMYXllclR5cGVTaGFwZUxheWVyKTsK
KworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFsoQ0FTaGFwZUxheWVyICop
bV9sYXllciBzZXRQYXRoOnBhdGgucGxhdGZvcm1QYXRoKCldOworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKK30KKworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6cmVxdWlyZXNDdXN0
b21BcHBlYXJhbmNlVXBkYXRlT25Cb3VuZHNDaGFuZ2UoKSBjb25zdAoreworICAgIHJldHVybiBt
X2N1c3RvbUFwcGVhcmFuY2UgPT0gR3JhcGhpY3NMYXllcjo6U2Nyb2xsaW5nU2hhZG93OworfQor
Cit2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjp1cGRhdGVDdXN0b21BcHBlYXJhbmNlKEdyYXBo
aWNzTGF5ZXI6OkN1c3RvbUFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKK3sKKyAgICBpZiAobV9jdXN0
b21BcHBlYXJhbmNlID09IGFwcGVhcmFuY2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vz
dG9tQXBwZWFyYW5jZSA9IGFwcGVhcmFuY2U7CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CisgICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7CisgICAgY2FzZSBHcmFwaGljc0xheWVyOjpOb0N1
c3RvbUFwcGVhcmFuY2U6CisgICAgY2FzZSBHcmFwaGljc0xheWVyOjpMaWdodEJhY2tkcm9wQXBw
ZWFyYW5jZToKKyAgICBjYXNlIEdyYXBoaWNzTGF5ZXI6OkRhcmtCYWNrZHJvcEFwcGVhcmFuY2U6
CisgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjOjpyZW1vdmVPdmVyaGFuZ0FyZWFCYWNrZ3JvdW5k
KHBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjOjpyZW1vdmVPdmVy
aGFuZ0FyZWFTaGFkb3cocGxhdGZvcm1MYXllcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0xheWVyOjpTY3JvbGxpbmdPdmVyaGFuZzoKKyAgICAgICAgU2Nyb2xsYmFyVGhl
bWVNYWM6OnNldFVwT3ZlcmhhbmdBcmVhQmFja2dyb3VuZChwbGF0Zm9ybUxheWVyKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzTGF5ZXI6OlNjcm9sbGluZ1NoYWRvdzoKKyAg
ICAgICAgU2Nyb2xsYmFyVGhlbWVNYWM6OnNldFVwT3ZlcmhhbmdBcmVhU2hhZG93KHBsYXRmb3Jt
TGF5ZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorfQorCitUaWxlZEJhY2tp
bmcqIFBsYXRmb3JtQ0FMYXllckNvY29hOjp0aWxlZEJhY2tpbmcoKQoreworICAgIGlmICghdXNl
c1RpbGVkQmFja2luZ0xheWVyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgV2Vi
VGlsZWRCYWNraW5nTGF5ZXIgKnRpbGVkQmFja2luZ0xheWVyID0gc3RhdGljX2Nhc3Q8V2ViVGls
ZWRCYWNraW5nTGF5ZXIgKj4obV9sYXllci5nZXQoKSk7CisgICAgcmV0dXJuIFt0aWxlZEJhY2tp
bmdMYXllciB0aWxlZEJhY2tpbmddOworfQorCisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBQbGF0
Zm9ybUNBTGF5ZXI6OmlzV2ViTGF5ZXIoKQoreworICAgIEJPT0wgcmVzdWx0ID0gTk87CisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgcmVzdWx0ID0gW21fbGF5ZXIgaXNLaW5k
T2ZDbGFzczpbV2ViTGF5ZXIgc2VsZl1dOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRz
T25NYWluVGhyZWFkKENHUmVjdCBib3VuZHMpCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xh
eWVyLmdldCgpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IF57CisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIg
c2V0Qm91bmRzOmJvdW5kc107CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAg
ICB9KTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uT25NYWluVGhyZWFk
KENHUG9pbnQgcG9zaXRpb24pCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgp
OworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAg
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0UG9zaXRp
b246cG9zaXRpb25dOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfSk7
Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludE9uTWFpblRocmVhZChG
bG9hdFBvaW50M0QgdmFsdWUpCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBtX2xheWVyLmdldCgp
OworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAg
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBbbGF5ZXIgc2V0QW5jaG9y
UG9pbnQ6Q0dQb2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55KCkpXTsKKyAgICAgICAgW2xheWVy
IHNldEFuY2hvclBvaW50Wjp2YWx1ZS56KCldOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisgICAgfSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRUaWxlU2l6ZShj
b25zdCBJbnRTaXplJiB0aWxlU2l6ZSkKK3sKKyAgICBpZiAobV9sYXllclR5cGUgIT0gTGF5ZXJU
eXBlV2ViVGlsZWRMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCisgICAgW3N0YXRpY19jYXN0PFdlYlRpbGVkTGF5ZXIqPihtX2xheWVyLmdl
dCgpKSBzZXRUaWxlU2l6ZTp0aWxlU2l6ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworUGxhdGZvcm1DQUxheWVyOjpSZXBhaW50
UmVjdExpc3QgUGxhdGZvcm1DQUxheWVyOjpjb2xsZWN0UmVjdHNUb1BhaW50KENHQ29udGV4dFJl
ZiBjb250ZXh0LCBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllcikKK3sKKyAgICBfX2Js
b2NrIGRvdWJsZSB0b3RhbFJlY3RBcmVhID0gMDsKKyAgICBfX2Jsb2NrIHVuc2lnbmVkIHJlY3RD
b3VudCA9IDA7CisgICAgX19ibG9jayBSZXBhaW50UmVjdExpc3QgZGlydHlSZWN0czsKKyAgICAK
KyAgICBwbGF0Zm9ybUNBTGF5ZXItPmVudW1lcmF0ZVJlY3RzQmVpbmdEcmF3bihjb250ZXh0LCBe
KENHUmVjdCByZWN0KSB7CisgICAgICAgIGlmICgrK3JlY3RDb3VudCA+IHdlYkxheWVyTWF4UmVj
dHNUb1BhaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdG90YWxS
ZWN0QXJlYSArPSByZWN0LnNpemUud2lkdGggKiByZWN0LnNpemUuaGVpZ2h0OworICAgICAgICBk
aXJ0eVJlY3RzLmFwcGVuZChyZWN0KTsKKyAgICB9KTsKKyAgICAKKyAgICBGbG9hdFJlY3QgY2xp
cEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKKyAgICBkb3Vi
bGUgY2xpcEFyZWEgPSBjbGlwQm91bmRzLndpZHRoKCkgKiBjbGlwQm91bmRzLmhlaWdodCgpOwor
ICAgIAorICAgIGlmIChyZWN0Q291bnQgPj0gd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQgfHwgdG90
YWxSZWN0QXJlYSA+PSBjbGlwQXJlYSAqIHdlYkxheWVyV2FzdGVkU3BhY2VUaHJlc2hvbGQpIHsK
KyAgICAgICAgZGlydHlSZWN0cy5jbGVhcigpOworICAgICAgICBkaXJ0eVJlY3RzLmFwcGVuZChj
bGlwQm91bmRzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGRpcnR5UmVjdHM7Cit9CisKK3Zv
aWQgUGxhdGZvcm1DQUxheWVyOjpkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4
dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIsIFJlcGFpbnRSZWN0
TGlzdCYgZGlydHlSZWN0cykKK3sKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
IGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUNBTGF5ZXItPm93bmVyKCk7CisgICAgaWYgKCFsYXll
ckNvbnRlbnRzKQorICAgICAgICByZXR1cm47CisgICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IFdLU2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyNlbmRpZgorICAgIAorICAg
IENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgCisgICAgLy8gV2UgbmV2ZXIgdXNl
IENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21VcCBvbiBNYWMuCisgICAgQVNTRVJUKGxheWVy
Q29udGVudHMtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBHcmFwaGlj
c0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bik7CisgICAgCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIEZvbnRBbnRpYWxpYXNpbmdTdGF0ZVNhdmVyIGZvbnRBbnRpYWxpYXNpbmdT
dGF0ZShjb250ZXh0LCBbcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9ybUxheWVyKCkgaXNPcGFxdWVd
KTsKKyAgICBmb250QW50aWFsaWFzaW5nU3RhdGUuc2V0dXAoW1dBS1dpbmRvdyBoYXNMYW5kc2Nh
cGVPcmllbnRhdGlvbl0pOworI2Vsc2UKKyAgICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdyYXBo
aWNzU3RhdGVdOworICAgIAorICAgIC8vIFNldCB1cCBhbiBOU0dyYXBoaWNzQ29udGV4dCBmb3Ig
dGhlIGNvbnRleHQsIHNvIHRoYXQgcGFydHMgb2YgQXBwS2l0IHRoYXQgcmVseSBvbgorICAgIC8v
IHRoZSBjdXJyZW50IE5TR3JhcGhpY3NDb250ZXh0IChlLmcuIE5TQ2VsbCBkcmF3aW5nKSBnZXQg
dGhlIHJpZ2h0IG9uZS4KKyAgICBOU0dyYXBoaWNzQ29udGV4dCogbGF5ZXJDb250ZXh0ID0gW05T
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y29udGV4dCBm
bGlwcGVkOllFU107CisgICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0Omxh
eWVyQ29udGV4dF07CisjZW5kaWYKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0
KHRydWUpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChwbGF0
Zm9ybUNBTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKTsKKyAgICAKKyAgICBpZiAoIWxheWVy
Q29udGVudHMtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkpIHsKKyAgICAgICAgLy8g
VHVybiBvZmYgZm9udCBzbW9vdGhpbmcgdG8gaW1wcm92ZSB0aGUgYXBwZWFyYW5jZSBvZiB0ZXh0
IHJlbmRlcmVkIG9udG8gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLgorICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMoZmFsc2UpOworICAgICAgICBncmFwaGljc0Nv
bnRleHQuc2V0QW50aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKHRydWUpOworICAgIH0KKyAg
ICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBj
bGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKKyAg
ICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCisg
ICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGlu
Z0JveChjb250ZXh0KSk7CisjZW5kaWYKKyAgICAKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3Qg
OiBkaXJ0eVJlY3RzKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihncmFwaGljc0NvbnRleHQpOworICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChyZWN0
KTsKKyAgICAgICAgCisgICAgICAgIGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclBhaW50
Q29udGVudHMocGxhdGZvcm1DQUxheWVyLCBncmFwaGljc0NvbnRleHQsIHJlY3QpOworICAgIH0K
KyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgZm9udEFudGlhbGlhc2luZ1N0YXRlLnJlc3Rv
cmUoKTsKKyNlbHNlCisgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBSZWN0KEZsb2F0UmVj
dCgpKTsKKyAgICAKKyAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVd
OworI2VuZGlmCisgICAgCisgICAgLy8gUmUtZmV0Y2ggdGhlIGxheWVyIG93bmVyLCBzaW5jZSA8
cmRhcjovL3Byb2JsZW0vOTEyNTE1MT4gaW5kaWNhdGVzIHRoYXQgaXQgbWlnaHQgaGF2ZSBiZWVu
IGRlc3Ryb3llZCBkdXJpbmcgcGFpbnRpbmcuCisgICAgbGF5ZXJDb250ZW50cyA9IHBsYXRmb3Jt
Q0FMYXllci0+b3duZXIoKTsKKyAgICBBU1NFUlQobGF5ZXJDb250ZW50cyk7CisgICAgCisgICAg
Q0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyAgICAKKyAgICAvLyBBbHdheXMgdXBk
YXRlIHRoZSByZXBhaW50IGNvdW50IHNvIHRoYXQgaXQncyBhY2N1cmF0ZSBldmVuIGlmIHRoZSBj
b3VudCBpdHNlbGYgaXMgbm90IHNob3duLiBUaGlzIHdpbGwgYmUgdXNlZnVsCisgICAgLy8gZm9y
IHRoZSBXZWIgSW5zcGVjdG9yIGZlZWRpbmcgdGhpcyBpbmZvcm1hdGlvbiB0aHJvdWdoIHRoZSBM
YXllclRyZWVBZ2VudC4KKyAgICBpbnQgcmVwYWludENvdW50ID0gbGF5ZXJDb250ZW50cy0+cGxh
dGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KHBsYXRmb3JtQ0FMYXllcik7CisgICAg
CisgICAgaWYgKCFwbGF0Zm9ybUNBTGF5ZXItPnVzZXNUaWxlZEJhY2tpbmdMYXllcigpICYmIGxh
eWVyQ29udGVudHMgJiYgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRD
b3VudGVyKHBsYXRmb3JtQ0FMYXllcikpCisgICAgICAgIGRyYXdSZXBhaW50SW5kaWNhdG9yKGNv
bnRleHQsIHBsYXRmb3JtQ0FMYXllciwgcmVwYWludENvdW50LCBudWxscHRyKTsKK30KKworQ0dS
ZWN0IFBsYXRmb3JtQ0FMYXllcjo6ZnJhbWVGb3JMYXllcihjb25zdCBQbGF0Zm9ybUxheWVyKiB0
aWxlTGF5ZXIpCit7CisgICAgcmV0dXJuIFt0aWxlTGF5ZXIgZnJhbWVdOworfQorCitQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJD
b2NvYTo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJDb2NvYTo6ZW51bWVyYXRlUmVjdHNCZWluZ0RyYXduKENHQ29udGV4dFJlZiBjb250ZXh0LCB2
b2lkICheYmxvY2spKENHUmVjdCkpCit7CisgICAgd2tDQUxheWVyRW51bWVyYXRlUmVjdHNCZWlu
Z0RyYXduV2l0aEJsb2NrKG1fbGF5ZXIuZ2V0KCksIGNvbnRleHQsIGJsb2NrKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVk
QmFja2luZ0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2Nv
YS9XZWJUaWxlZEJhY2tpbmdMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmY2I5N2I5MzNlZWI5NGExNjg3
NzQ2M2UyOWI3MDVhZTA3ZTYwYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXllci5oCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBXZWJUaWxlZEJhY2tpbmdMYXllcl9oCisjZGVmaW5lIFdlYlRpbGVkQmFja2luZ0xh
eWVyX2gKKworI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CitjbGFzcyBU
aWxlQ29udHJvbGxlcjsKK2NsYXNzIFRpbGVkQmFja2luZzsKK30KKworQGludGVyZmFjZSBXZWJU
aWxlZEJhY2tpbmdMYXllciA6IENBTGF5ZXIgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlcj4gX3RpbGVDb250cm9sbGVyOworfQorCistIChXZWJDb3JlOjpUaWxl
Q29udHJvbGxlciopY3JlYXRlVGlsZUNvbnRyb2xsZXI6KFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXll
ciopcm9vdExheWVyOworLSAoV2ViQ29yZTo6VGlsZWRCYWNraW5nKil0aWxlZEJhY2tpbmc7Cist
ICh2b2lkKWludmFsaWRhdGU7CisKK0BlbmQKKworI2VuZGlmIC8vIFdlYlRpbGVkQmFja2luZ0xh
eWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2Nv
Y29hL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTIyMWMz
OGVjZjY0ZTA1ZDAyMDg2YTViNWViNTNkYzFjZTgyNjU4MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xh
eWVyLm1tCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViVGlsZWRCYWNr
aW5nTGF5ZXIuaCIKKworI2ltcG9ydCAiSW50UmVjdC5oIgorI2ltcG9ydCAiVGlsZUNvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitAaW1wbGVtZW50YXRpb24gV2ViVGlsZWRCYWNraW5nTGF5ZXIKKworLSAoaWQpaW5p
dAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisjaWZuZGVmIE5ERUJVRworICAgIFtzZWxmIHNldE5hbWU6QCJXZWJUaWxl
ZEJhY2tpbmdMYXllciJdOworI2VuZGlmCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIEFTU0VSVCghX3RpbGVDb250cm9sbGVyKTsKKworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAoaWQpaW5pdFdpdGhMYXllcjooaWQpbGF5ZXIKK3sKKyAgICBVTlVT
RURfUEFSQU0obGF5ZXIpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAoVGlsZUNvbnRyb2xsZXIqKWNyZWF0ZVRpbGVDb250cm9sbGVyOihQbGF0
Zm9ybUNBTGF5ZXIqKXJvb3RMYXllcgoreworICAgIEFTU0VSVCghX3RpbGVDb250cm9sbGVyKTsK
KyAgICBfdGlsZUNvbnRyb2xsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlRpbGVDb250
cm9sbGVyPihyb290TGF5ZXIpOworICAgIHJldHVybiBfdGlsZUNvbnRyb2xsZXIuZ2V0KCk7Cit9
CisKKy0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAg
VU5VU0VEX1BBUkFNKGtleSk7CisgICAgCisgICAgLy8gRGlzYWJsZSBhbGwgYW5pbWF0aW9ucy4K
KyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXNldEJvdW5kczooQ0dSZWN0KWJvdW5kcwor
eworICAgIFtzdXBlciBzZXRCb3VuZHM6Ym91bmRzXTsKKworICAgIF90aWxlQ29udHJvbGxlci0+
dGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCk7Cit9CisKKy0gKHZvaWQpc2V0T3BhcXVlOihC
T09MKW9wYXF1ZQoreworICAgIF90aWxlQ29udHJvbGxlci0+c2V0VGlsZXNPcGFxdWUob3BhcXVl
KTsKK30KKworLSAoQk9PTClpc09wYXF1ZQoreworICAgIHJldHVybiBfdGlsZUNvbnRyb2xsZXIg
PyBfdGlsZUNvbnRyb2xsZXItPnRpbGVzQXJlT3BhcXVlKCkgOiBOTzsKK30KKworLSAodm9pZClz
ZXROZWVkc0Rpc3BsYXkKK3sKKyAgICBfdGlsZUNvbnRyb2xsZXItPnNldE5lZWRzRGlzcGxheSgp
OworfQorCistICh2b2lkKXNldE5lZWRzRGlzcGxheUluUmVjdDooQ0dSZWN0KXJlY3QKK3sKKyAg
ICBfdGlsZUNvbnRyb2xsZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpKTsKK30KKworLSAodm9pZClzZXRBY2NlbGVyYXRlc0RyYXdpbmc6KEJPT0wpYWNjZWxl
cmF0ZXNEcmF3aW5nCit7CisgICAgX3RpbGVDb250cm9sbGVyLT5zZXRBY2NlbGVyYXRlc0RyYXdp
bmcoYWNjZWxlcmF0ZXNEcmF3aW5nKTsKK30KKworLSAoQk9PTClhY2NlbGVyYXRlc0RyYXdpbmcK
K3sKKyAgICByZXR1cm4gX3RpbGVDb250cm9sbGVyID8gX3RpbGVDb250cm9sbGVyLT5hY2NlbGVy
YXRlc0RyYXdpbmcoKSA6IE5POworfQorCistICh2b2lkKXNldENvbnRlbnRzU2NhbGU6KENHRmxv
YXQpY29udGVudHNTY2FsZQoreworICAgIF90aWxlQ29udHJvbGxlci0+c2V0Q29udGVudHNTY2Fs
ZShjb250ZW50c1NjYWxlKTsKK30KKworLSAoQ0dGbG9hdCljb250ZW50c1NjYWxlCit7CisgICAg
cmV0dXJuIF90aWxlQ29udHJvbGxlciA/IF90aWxlQ29udHJvbGxlci0+Y29udGVudHNTY2FsZSgp
IDogMTsKK30KKworLSAoV2ViQ29yZTo6VGlsZWRCYWNraW5nKil0aWxlZEJhY2tpbmcKK3sKKyAg
ICByZXR1cm4gX3RpbGVDb250cm9sbGVyLmdldCgpOworfQorCistICh2b2lkKWludmFsaWRhdGUK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChfdGlsZUNvbnRyb2xs
ZXIpOworICAgIF90aWxlQ29udHJvbGxlciA9IG51bGxwdHI7Cit9CisKKy0gKHZvaWQpc2V0Qm9y
ZGVyQ29sb3I6KENHQ29sb3JSZWYpYm9yZGVyQ29sb3IKK3sKKyAgICBfdGlsZUNvbnRyb2xsZXIt
PnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENvbG9yKGJvcmRlckNvbG9yKSk7Cit9CisKKy0gKHZv
aWQpc2V0Qm9yZGVyV2lkdGg6KENHRmxvYXQpYm9yZGVyV2lkdGgKK3sKKyAgICAvLyBUaWxlcyBh
ZGpvaW4sIHNvIGhhbHZlIHRoZSBib3JkZXIgd2lkdGguCisgICAgX3RpbGVDb250cm9sbGVyLT5z
ZXRUaWxlRGVidWdCb3JkZXJXaWR0aChib3JkZXJXaWR0aCAvIDIpOworfQorCitAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVz
aFNjaGVkdWxlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDA0MTUzNjUyZmVkNGE5ZGE4NDY1ZmJlYjI1OGRlNjNhZjA1YTFiNDAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMYXllckZsdXNoU2No
ZWR1bGVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQb29sLmg+Ci0KLSNpZiBQTEFU
Rk9STShJT1MpCi0jaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCi0jaW5j
bHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZCdW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNv
cmVUaHJlYWQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25z
dCBDRkluZGV4IGxheWVyRmx1c2hSdW5Mb29wT3JkZXIgPSAoQ0ZJbmRleClSdW5Mb29wT2JzZXJ2
ZXI6OldlbGxLbm93blJ1bkxvb3BPcmRlcnM6OkNvcmVBbmltYXRpb25Db21taXQgLSAxOwotCi1z
dGF0aWMgQ0ZSdW5Mb29wUmVmIGN1cnJlbnRSdW5Mb29wKCkKLXsKLSNpZiBQTEFURk9STShJT1Mp
Ci0gICAgLy8gQSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgV2ViVmlldyBkZWFsbG9jYXRpb24gY2Fu
IGxlYWQgdG8gYSBjcmFzaCBpZiB0aGUgbGF5ZXIgc3luYyBydW4gbG9vcAotICAgIC8vIG9ic2Vy
dmVyIGlzIGFkZGVkIHRvIHRoZSBtYWluIHJ1biBsb29wIDxyZGFyOi8vcHJvYmxlbS85Nzk4NTUw
Pi4gSG93ZXZlciwgZm9yIHJlc3BvbnNpdmVuZXNzLAotICAgIC8vIHdlIHN0aWxsIGFsbG93IHRo
aXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNzQwMzMyOD4uIFNpbmNlIHRoZSByYWNlIGNvbmRpdGlv
biBhbmQgc3Vic2VxdWVudAotICAgIC8vIGNyYXNoIGFyZSBlc3BlY2lhbGx5IHRyb3VibGVzb21l
IGZvciBpQm9va3MsIHdlIG5ldmVyIGFsbG93IHRoZSBvYnNlcnZlciB0byBiZSBhZGRlZCB0byB0
aGUKLSAgICAvLyBtYWluIHJ1biBsb29wIGluIGlCb29rcy4KLSAgICBpZiAoYXBwbGljYXRpb25J
c0lCb29rc09uSU9TKCkpCi0gICAgICAgIHJldHVybiBXZWJUaHJlYWRSdW5Mb29wKCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOwotfQotCi1MYXllckZsdXNoU2No
ZWR1bGVyOjpMYXllckZsdXNoU2NoZWR1bGVyKExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQqIGNs
aWVudCkKLSAgICA6IG1faXNTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2NsaWVudChjbGllbnQp
Ci17Ci0gICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7Ci0KLSAgICBtX3J1bkxvb3BPYnNl
cnZlciA9IFJ1bkxvb3BPYnNlcnZlcjo6Y3JlYXRlKGxheWVyRmx1c2hSdW5Mb29wT3JkZXIsIFt0
aGlzXSgpIHsKLSAgICAgICAgaWYgKHRoaXMtPmlzU3VzcGVuZGVkKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHRoaXMtPmxheWVyRmx1c2hDYWxsYmFjaygpOwotICAgIH0pOwotfQot
Ci1MYXllckZsdXNoU2NoZWR1bGVyOjp+TGF5ZXJGbHVzaFNjaGVkdWxlcigpCi17Ci19Ci0KLXZv
aWQgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6bGF5ZXJGbHVzaENhbGxiYWNrKCkKLXsKLSAgICBBU1NF
UlQoIW1faXNTdXNwZW5kZWQpOwotCi0gICAgQXV0b2RyYWluZWRQb29sIHBvb2w7Ci0gICAgaWYg
KG1fY2xpZW50LT5mbHVzaExheWVycygpKQotICAgICAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZv
aWQgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6c2NoZWR1bGUoKQotewotICAgIGlmIChtX2lzU3VzcGVu
ZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3J1bkxvb3BPYnNlcnZlci0+c2NoZWR1bGUo
Y3VycmVudFJ1bkxvb3AoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6aW52YWxp
ZGF0ZSgpCi17Ci0gICAgbV9ydW5Mb29wT2JzZXJ2ZXItPmludmFsaWRhdGUoKTsKLX0KLSAgICAK
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODJkNWNiMjQ1YTEzYjY4MGI2MDViMWNlOGYw
ZTNlMTQwNTUxNjczLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5p
bWF0aW9uTWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBsYXRmb3JtQ0FBbmlt
YXRpb25NYWNfaAotI2RlZmluZSBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjX2gKLQotI2luY2x1ZGUg
IlBsYXRmb3JtQ0FBbmltYXRpb24uaCIKLQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQot
T0JKQ19DTEFTUyBDQU1lZGlhVGltaW5nRnVuY3Rpb247Ci1PQkpDX0NMQVNTIENBQW5pbWF0aW9u
OwotT0JKQ19DTEFTUyBDQVByb3BlcnR5QW5pbWF0aW9uOwotT0JKQ19DTEFTUyBOU1N0cmluZzsK
LQotdHlwZWRlZiBDQVByb3BlcnR5QW5pbWF0aW9uKiBQbGF0Zm9ybUFuaW1hdGlvblJlZjsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1XRUJDT1JFX0VYUE9SVCBOU1N0cmluZyogdG9DQUZpbGxN
b2RlVHlwZShQbGF0Zm9ybUNBQW5pbWF0aW9uOjpGaWxsTW9kZVR5cGUpOwotV0VCQ09SRV9FWFBP
UlQgTlNTdHJpbmcqIHRvQ0FWYWx1ZUZ1bmN0aW9uVHlwZShQbGF0Zm9ybUNBQW5pbWF0aW9uOjpW
YWx1ZUZ1bmN0aW9uVHlwZSk7Ci1XRUJDT1JFX0VYUE9SVCBDQU1lZGlhVGltaW5nRnVuY3Rpb24q
IHRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiwgYm9vbCByZXZl
cnNlKTsKLQotYm9vbCBoYXNFeHBsaWNpdEJlZ2luVGltZShDQUFuaW1hdGlvbiAqKTsKLXZvaWQg
c2V0SGFzRXhwbGljaXRCZWdpblRpbWUoQ0FBbmltYXRpb24gKiwgYm9vbCk7Ci0KLWNsYXNzIFBs
YXRmb3JtQ0FBbmltYXRpb25NYWMgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1DQUFuaW1hdGlvbiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY3Jl
YXRlKEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY3JlYXRlKFBsYXRm
b3JtQW5pbWF0aW9uUmVmKTsKLQotICAgIHZpcnR1YWwgflBsYXRmb3JtQ0FBbmltYXRpb25NYWMo
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1BsYXRmb3JtQ0FBbmltYXRpb25NYWMoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gY29weSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgUGxhdGZvcm1Bbmlt
YXRpb25SZWYgcGxhdGZvcm1BbmltYXRpb24oKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIFN0
cmluZyBrZXlQYXRoKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgCi0gICAgdmlydHVhbCBDRlRpbWVJ
bnRlcnZhbCBiZWdpblRpbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
QmVnaW5UaW1lKENGVGltZUludGVydmFsKSBvdmVycmlkZTsKLSAgICAKLSAgICB2aXJ0dWFsIENG
VGltZUludGVydmFsIGR1cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHNldER1cmF0aW9uKENGVGltZUludGVydmFsKSBvdmVycmlkZTsKLSAgICAKLSAgICB2aXJ0dWFs
IGZsb2F0IHNwZWVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNwZWVk
KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgQ0ZUaW1lSW50ZXJ2YWwgdGltZU9mZnNl
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1lT2Zmc2V0KENGVGlt
ZUludGVydmFsKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgZmxvYXQgcmVwZWF0Q291bnQoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwZWF0Q291bnQoZmxvYXQpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGF1dG9yZXZlcnNlcygpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvcmV2ZXJzZXMoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIEZpbGxNb2RlVHlwZSBmaWxsTW9kZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRGaWxsTW9kZShGaWxsTW9kZVR5cGUpIG92ZXJyaWRlOwotICAgIAotICAg
IHZpcnR1YWwgdm9pZCBzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiosIGJv
b2wgcmV2ZXJzZSA9IGZhbHNlKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvcHlUaW1pbmdGdW5jdGlv
bkZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCBib29sIGlzUmVtb3ZlZE9uQ29tcGxldGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRSZW1vdmVkT25Db21wbGV0aW9uKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgdmly
dHVhbCBib29sIGlzQWRkaXRpdmUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0QWRkaXRpdmUoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFZhbHVlRnVuY3Rpb25U
eXBlIHZhbHVlRnVuY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVGdW5jdGlvbihWYWx1ZUZ1bmN0aW9uVHlwZSkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBCYXNp
Yy1hbmltYXRpb24gcHJvcGVydGllcy4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbVZhbHVlKGZs
b2F0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEZyb21WYWx1ZShjb25zdCBGbG9hdFBvaW50M0QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEZyb21WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qLCBpbnQgaW50ZXJu
YWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weUZy
b21WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldFRvVmFsdWUoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3Im
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBGaWx0ZXJPcGVy
YXRpb24qLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgY29weVRvVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mKSBv
dmVycmlkZTsKLQotICAgIC8vIEtleWZyYW1lLWFuaW1hdGlvbiBwcm9wZXJ0aWVzLgotICAgIHZp
cnR1YWwgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4PiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZXMoY29uc3Qg
VmVjdG9yPEZsb2F0UG9pbnQzRD4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4mLCBp
bnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgY29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weUtleVRpbWVzRnJvbShjb25zdCBQbGF0Zm9ybUNB
QW5pbWF0aW9uJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGltaW5nRnVuY3Rp
b25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiwgYm9vbCByZXZlcnNlID0g
ZmFsc2UpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25zRnJv
bShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAg
ICBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjKEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCk7Ci0gICAgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYyhQbGF0Zm9ybUFuaW1hdGlvblJlZik7
Ci0KLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPENBUHJvcGVydHlBbmltYXRpb24+IG1fYW5pbWF0
aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NBQU5JTUFUSU9OKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25NYWMsIGlzUGxhdGZv
cm1DQUFuaW1hdGlvbk1hYygpKQotCi0jZW5kaWYgLy8gUGxhdGZvcm1DQUFuaW1hdGlvbk1hY19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxh
dGZvcm1DQUFuaW1hdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjZWExMDk2MzI1NjA5ODdjYmM2MTI1Y2JkMDZhMGMxNWNjNGI1OGUwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsNTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW1wb3J0ICJQbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjLmgiCi0KLSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgotI2ltcG9ydCAi
UGxhdGZvcm1DQUZpbHRlcnMuaCIKLSNpbXBvcnQgIlRpbWluZ0Z1bmN0aW9uLmgiCi0jaW1wb3J0
IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
V0tFeHBsaWNpdEJlZ2luVGltZUZsYWcgPSBAIldLUGxhdGZvcm1DQUFuaW1hdGlvbkV4cGxpY2l0
QmVnaW5UaW1lRmxhZyI7Ci0KLWJvb2wgV2ViQ29yZTo6aGFzRXhwbGljaXRCZWdpblRpbWUoQ0FB
bmltYXRpb24gKmFuaW1hdGlvbikKLXsKLSAgICByZXR1cm4gW1thbmltYXRpb24gdmFsdWVGb3JL
ZXk6V0tFeHBsaWNpdEJlZ2luVGltZUZsYWddIGJvb2xWYWx1ZV07Ci19Ci0KLXZvaWQgV2ViQ29y
ZTo6c2V0SGFzRXhwbGljaXRCZWdpblRpbWUoQ0FBbmltYXRpb24gKmFuaW1hdGlvbiwgYm9vbCB2
YWx1ZSkKLXsKLSAgICBbYW5pbWF0aW9uIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9v
bDp2YWx1ZV0gZm9yS2V5OldLRXhwbGljaXRCZWdpblRpbWVGbGFnXTsKLX0KLSAgICAKLU5TU3Ry
aW5nKiBXZWJDb3JlOjp0b0NBRmlsbE1vZGVUeXBlKFBsYXRmb3JtQ0FBbmltYXRpb246OkZpbGxN
b2RlVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgUGxhdGZvcm1D
QUFuaW1hdGlvbjo6Tm9GaWxsTW9kZToKLSAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OkZv
cndhcmRzOiByZXR1cm4ga0NBRmlsbE1vZGVGb3J3YXJkczsKLSAgICBjYXNlIFBsYXRmb3JtQ0FB
bmltYXRpb246OkJhY2t3YXJkczogcmV0dXJuIGtDQUZpbGxNb2RlQmFja3dhcmRzOwotICAgIGNh
c2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6Qm90aDogcmV0dXJuIGtDQUZpbGxNb2RlQm90aDsKLSAg
ICB9Ci0gICAgcmV0dXJuIEAiIjsKLX0KLQotc3RhdGljIFBsYXRmb3JtQ0FBbmltYXRpb246OkZp
bGxNb2RlVHlwZSBmcm9tQ0FGaWxsTW9kZVR5cGUoTlNTdHJpbmcqIHN0cmluZykKLXsKLSAgICBp
ZiAoW3N0cmluZyBpc0VxdWFsVG9TdHJpbmc6a0NBRmlsbE1vZGVCYWNrd2FyZHNdKQotICAgICAg
ICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFja3dhcmRzOwotCi0gICAgaWYgKFtzdHJp
bmcgaXNFcXVhbFRvU3RyaW5nOmtDQUZpbGxNb2RlQm90aF0pCi0gICAgICAgIHJldHVybiBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpCb3RoOwotCi0gICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246
OkZvcndhcmRzOwotfQotCi1OU1N0cmluZyogV2ViQ29yZTo6dG9DQVZhbHVlRnVuY3Rpb25UeXBl
KFBsYXRmb3JtQ0FBbmltYXRpb246OlZhbHVlRnVuY3Rpb25UeXBlIHR5cGUpCi17Ci0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rp
b246IHJldHVybiBAIiI7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpSb3RhdGVYOiBy
ZXR1cm4ga0NBVmFsdWVGdW5jdGlvblJvdGF0ZVg7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0
aW9uOjpSb3RhdGVZOiByZXR1cm4ga0NBVmFsdWVGdW5jdGlvblJvdGF0ZVk7Ci0gICAgY2FzZSBQ
bGF0Zm9ybUNBQW5pbWF0aW9uOjpSb3RhdGVaOiByZXR1cm4ga0NBVmFsdWVGdW5jdGlvblJvdGF0
ZVo7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpTY2FsZVg6IHJldHVybiBrQ0FWYWx1
ZUZ1bmN0aW9uU2NhbGVYOwotICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6U2NhbGVZOiBy
ZXR1cm4ga0NBVmFsdWVGdW5jdGlvblNjYWxlWTsKLSAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRp
b246OlNjYWxlWjogcmV0dXJuIGtDQVZhbHVlRnVuY3Rpb25TY2FsZVo7Ci0gICAgY2FzZSBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpTY2FsZTogcmV0dXJuIGtDQVZhbHVlRnVuY3Rpb25TY2FsZTsKLSAg
ICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlRyYW5zbGF0ZVg6IHJldHVybiBrQ0FWYWx1ZUZ1
bmN0aW9uVHJhbnNsYXRlWDsKLSAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlRyYW5zbGF0
ZVk6IHJldHVybiBrQ0FWYWx1ZUZ1bmN0aW9uVHJhbnNsYXRlWTsKLSAgICBjYXNlIFBsYXRmb3Jt
Q0FBbmltYXRpb246OlRyYW5zbGF0ZVo6IHJldHVybiBrQ0FWYWx1ZUZ1bmN0aW9uVHJhbnNsYXRl
WjsKLSAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlRyYW5zbGF0ZTogcmV0dXJuIGtDQVZh
bHVlRnVuY3Rpb25UcmFuc2xhdGU7Ci0gICAgfQotICAgIHJldHVybiBAIiI7Ci19Ci0KLXN0YXRp
YyBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpWYWx1ZUZ1bmN0aW9uVHlwZSBmcm9tQ0FWYWx1ZUZ1bmN0
aW9uVHlwZShOU1N0cmluZyogc3RyaW5nKQotewotICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0
cmluZzprQ0FWYWx1ZUZ1bmN0aW9uUm90YXRlWF0pCi0gICAgICAgIHJldHVybiBQbGF0Zm9ybUNB
QW5pbWF0aW9uOjpSb3RhdGVYOwotCi0gICAgaWYgKFtzdHJpbmcgaXNFcXVhbFRvU3RyaW5nOmtD
QVZhbHVlRnVuY3Rpb25Sb3RhdGVZXSkKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRp
b246OlJvdGF0ZVk7Ci0KLSAgICBpZiAoW3N0cmluZyBpc0VxdWFsVG9TdHJpbmc6a0NBVmFsdWVG
dW5jdGlvblJvdGF0ZVpdKQotICAgICAgICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Um90
YXRlWjsKLQotICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0cmluZzprQ0FWYWx1ZUZ1bmN0aW9u
U2NhbGVYXSkKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246OlNjYWxlWDsKLQot
ICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0cmluZzprQ0FWYWx1ZUZ1bmN0aW9uU2NhbGVZXSkK
LSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246OlNjYWxlWTsKLQotICAgIGlmIChb
c3RyaW5nIGlzRXF1YWxUb1N0cmluZzprQ0FWYWx1ZUZ1bmN0aW9uU2NhbGVaXSkKLSAgICAgICAg
cmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb246OlNjYWxlWjsKLQotICAgIGlmIChbc3RyaW5nIGlz
RXF1YWxUb1N0cmluZzprQ0FWYWx1ZUZ1bmN0aW9uU2NhbGVdKQotICAgICAgICByZXR1cm4gUGxh
dGZvcm1DQUFuaW1hdGlvbjo6U2NhbGU7Ci0KLSAgICBpZiAoW3N0cmluZyBpc0VxdWFsVG9TdHJp
bmc6a0NBVmFsdWVGdW5jdGlvblRyYW5zbGF0ZVhdKQotICAgICAgICByZXR1cm4gUGxhdGZvcm1D
QUFuaW1hdGlvbjo6VHJhbnNsYXRlWDsKLQotICAgIGlmIChbc3RyaW5nIGlzRXF1YWxUb1N0cmlu
ZzprQ0FWYWx1ZUZ1bmN0aW9uVHJhbnNsYXRlWV0pCi0gICAgICAgIHJldHVybiBQbGF0Zm9ybUNB
QW5pbWF0aW9uOjpUcmFuc2xhdGVZOwotCi0gICAgaWYgKFtzdHJpbmcgaXNFcXVhbFRvU3RyaW5n
OmtDQVZhbHVlRnVuY3Rpb25UcmFuc2xhdGVaXSkKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FB
bmltYXRpb246OlRyYW5zbGF0ZVo7Ci0KLSAgICBpZiAoW3N0cmluZyBpc0VxdWFsVG9TdHJpbmc6
a0NBVmFsdWVGdW5jdGlvblRyYW5zbGF0ZV0pCi0gICAgICAgIHJldHVybiBQbGF0Zm9ybUNBQW5p
bWF0aW9uOjpUcmFuc2xhdGU7Ci0KLSAgICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9W
YWx1ZUZ1bmN0aW9uOwotfQotCi1DQU1lZGlhVGltaW5nRnVuY3Rpb24qIFdlYkNvcmU6OnRvQ0FN
ZWRpYVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwg
Ym9vbCByZXZlcnNlKQotewotICAgIEFTU0VSVCh0aW1pbmdGdW5jdGlvbik7Ci0gICAgaWYgKHRp
bWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICBS
ZWZQdHI8Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbj4gcmV2ZXJzZWQ7Ci0gICAgICAgIGNvbnN0
IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIGN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0KLSAgICAgICAgaWYgKHJl
dmVyc2UpIHsKLSAgICAgICAgICAgIHJldmVyc2VkID0gY3RmLT5jcmVhdGVSZXZlcnNlZCgpOwot
ICAgICAgICAgICAgY3RmID0gcmV2ZXJzZWQuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
bG9hdCB4MSA9IHN0YXRpY19jYXN0PGZsb2F0PihjdGYtPngxKCkpOwotICAgICAgICBmbG9hdCB5
MSA9IHN0YXRpY19jYXN0PGZsb2F0PihjdGYtPnkxKCkpOwotICAgICAgICBmbG9hdCB4MiA9IHN0
YXRpY19jYXN0PGZsb2F0PihjdGYtPngyKCkpOwotICAgICAgICBmbG9hdCB5MiA9IHN0YXRpY19j
YXN0PGZsb2F0PihjdGYtPnkyKCkpOwotICAgICAgICByZXR1cm4gW0NBTWVkaWFUaW1pbmdGdW5j
dGlvbiBmdW5jdGlvbldpdGhDb250cm9sUG9pbnRzOiB4MSA6IHkxIDogeDIgOiB5Ml07Ci0gICAg
fQotICAgIAotICAgIEFTU0VSVCh0aW1pbmdGdW5jdGlvbi0+dHlwZSgpID09IFRpbWluZ0Z1bmN0
aW9uOjpMaW5lYXJGdW5jdGlvbik7Ci0gICAgcmV0dXJuIFtDQU1lZGlhVGltaW5nRnVuY3Rpb24g
ZnVuY3Rpb25XaXRoTmFtZTprQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uTGluZWFyXTsKLX0KLQotUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpjcmVh
dGUoQW5pbWF0aW9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjKHR5cGUsIGtleVBhdGgpKTsK
LX0KLQotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBQW5pbWF0aW9u
TWFjOjpjcmVhdGUoUGxhdGZvcm1BbmltYXRpb25SZWYgYW5pbWF0aW9uKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYyhhbmltYXRpb24pKTsKLX0KLQot
UGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6UGxhdGZvcm1DQUFuaW1hdGlvbk1hYyhBbmltYXRpb25U
eXBlIHR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKLSAgICA6IFBsYXRmb3JtQ0FBbmltYXRp
b24odHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBCYXNpYykKLSAgICAgICAgbV9hbmltYXRpb24g
PSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDprZXlQYXRoXTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0aW9u
V2l0aEtleVBhdGg6a2V5UGF0aF07Ci19Ci0KLVBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OlBsYXRm
b3JtQ0FBbmltYXRpb25NYWMoUGxhdGZvcm1BbmltYXRpb25SZWYgYW5pbWF0aW9uKQotewotICAg
IGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihhbmltYXRpb24pIGlzS2luZE9mQ2xhc3M6
W0NBQmFzaWNBbmltYXRpb24gY2xhc3NdXSkKLSAgICAgICAgc2V0VHlwZShCYXNpYyk7Ci0gICAg
ZWxzZSBpZiAoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uKj4oYW5pbWF0aW9uKSBpc0tpbmRPZkNs
YXNzOltDQUtleWZyYW1lQW5pbWF0aW9uIGNsYXNzXV0pCi0gICAgICAgIHNldFR5cGUoS2V5ZnJh
bWUpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoMCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgbV9hbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0
aW9uKj4oYW5pbWF0aW9uKTsKLX0KLQotUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6flBsYXRmb3Jt
Q0FBbmltYXRpb25NYWMoKQotewotfQotCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+
IFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmNvcHkoKSBjb25zdAotewotICAgIFJlZlB0cjxQbGF0
Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb24gPSBjcmVhdGUoYW5pbWF0aW9uVHlwZSgpLCBrZXlQ
YXRoKCkpOwotICAgIAotICAgIGFuaW1hdGlvbi0+c2V0QmVnaW5UaW1lKGJlZ2luVGltZSgpKTsK
LSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKCkpOwotICAgIGFuaW1hdGlvbi0+
c2V0U3BlZWQoc3BlZWQoKSk7Ci0gICAgYW5pbWF0aW9uLT5zZXRUaW1lT2Zmc2V0KHRpbWVPZmZz
ZXQoKSk7Ci0gICAgYW5pbWF0aW9uLT5zZXRSZXBlYXRDb3VudChyZXBlYXRDb3VudCgpKTsKLSAg
ICBhbmltYXRpb24tPnNldEF1dG9yZXZlcnNlcyhhdXRvcmV2ZXJzZXMoKSk7Ci0gICAgYW5pbWF0
aW9uLT5zZXRGaWxsTW9kZShmaWxsTW9kZSgpKTsKLSAgICBhbmltYXRpb24tPnNldFJlbW92ZWRP
bkNvbXBsZXRpb24oaXNSZW1vdmVkT25Db21wbGV0aW9uKCkpOwotICAgIGFuaW1hdGlvbi0+c2V0
QWRkaXRpdmUoaXNBZGRpdGl2ZSgpKTsKLSAgICBhbmltYXRpb24tPmNvcHlUaW1pbmdGdW5jdGlv
bkZyb20oKnRoaXMpOwotICAgIGFuaW1hdGlvbi0+c2V0VmFsdWVGdW5jdGlvbih2YWx1ZUZ1bmN0
aW9uKCkpOwotCi0gICAgc2V0SGFzRXhwbGljaXRCZWdpblRpbWUoZG93bmNhc3Q8UGxhdGZvcm1D
QUFuaW1hdGlvbk1hYz4oKmFuaW1hdGlvbikucGxhdGZvcm1BbmltYXRpb24oKSwgaGFzRXhwbGlj
aXRCZWdpblRpbWUocGxhdGZvcm1BbmltYXRpb24oKSkpOwotICAgIAotICAgIC8vIENvcHkgdGhl
IHNwZWNpZmljIEJhc2ljIG9yIEtleWZyYW1lIHZhbHVlcy4KLSAgICBpZiAoYW5pbWF0aW9uVHlw
ZSgpID09IEtleWZyYW1lKSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+Y29weVZhbHVlc0Zyb20oKnRo
aXMpOwotICAgICAgICBhbmltYXRpb24tPmNvcHlLZXlUaW1lc0Zyb20oKnRoaXMpOwotICAgICAg
ICBhbmltYXRpb24tPmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKCp0aGlzKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBhbmltYXRpb24tPmNvcHlGcm9tVmFsdWVGcm9tKCp0aGlzKTsKLSAgICAgICAg
YW5pbWF0aW9uLT5jb3B5VG9WYWx1ZUZyb20oKnRoaXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gYW5pbWF0aW9uOwotfQotCi1QbGF0Zm9ybUFuaW1hdGlvblJlZiBQbGF0Zm9ybUNBQW5pbWF0
aW9uTWFjOjpwbGF0Zm9ybUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5pbWF0
aW9uLmdldCgpOwotfQotCi1TdHJpbmcgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6a2V5UGF0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFttX2FuaW1hdGlvbiBrZXlQYXRoXTsKLX0KLQotQ0ZUaW1l
SW50ZXJ2YWwgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6YmVnaW5UaW1lKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gW21fYW5pbWF0aW9uIGJlZ2luVGltZV07Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbk1hYzo6c2V0QmVnaW5UaW1lKENGVGltZUludGVydmFsIHZhbHVlKQotewotICAgIFtt
X2FuaW1hdGlvbiBzZXRCZWdpblRpbWU6dmFsdWVdOwotICAgIAotICAgIC8vIEFsc28gc2V0IGEg
ZmxhZyB0byB0ZWxsIHVzIGlmIHdlJ3ZlIHBhc3NlZCBpbiBhIDAgdmFsdWUuIAotICAgIC8vIFRo
ZSBmbGFnIGlzIG5lZWRlZCBiZWNhdXNlIGxhdGVyIGJlZ2luVGltZSB3aWxsIGdldCBjaGFuZ2Vk
Ci0gICAgLy8gdG8gdGhlIHRpbWUgYXQgd2hpY2ggaXQgZmlyZWQgYW5kIHdlIG5lZWQgdG8ga25v
dyB3aGV0aGVyCi0gICAgLy8gb3Igbm90IGl0IHdhcyAwIHRvIGJlZ2luIHdpdGguCi0gICAgaWYg
KHZhbHVlKQotICAgICAgICBzZXRIYXNFeHBsaWNpdEJlZ2luVGltZShtX2FuaW1hdGlvbi5nZXQo
KSwgdHJ1ZSk7Ci19Ci0KLUNGVGltZUludGVydmFsIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmR1
cmF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21fYW5pbWF0aW9uIGR1cmF0aW9uXTsKLX0K
LQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpzZXREdXJhdGlvbihDRlRpbWVJbnRlcnZh
bCB2YWx1ZSkKLXsKLSAgICBbbV9hbmltYXRpb24gc2V0RHVyYXRpb246dmFsdWVdOwotfQotCi1m
bG9hdCBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpzcGVlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFttX2FuaW1hdGlvbiBzcGVlZF07Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6
c2V0U3BlZWQoZmxvYXQgdmFsdWUpCi17Ci0gICAgW21fYW5pbWF0aW9uIHNldFNwZWVkOnZhbHVl
XTsKLX0KLQotQ0ZUaW1lSW50ZXJ2YWwgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6dGltZU9mZnNl
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFttX2FuaW1hdGlvbiB0aW1lT2Zmc2V0XTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpzZXRUaW1lT2Zmc2V0KENGVGltZUludGVydmFs
IHZhbHVlKQotewotICAgIFttX2FuaW1hdGlvbiBzZXRUaW1lT2Zmc2V0OnZhbHVlXTsKLX0KLQot
ZmxvYXQgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6cmVwZWF0Q291bnQoKSBjb25zdAotewotICAg
IHJldHVybiBbbV9hbmltYXRpb24gcmVwZWF0Q291bnRdOwotfQotCi12b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25NYWM6OnNldFJlcGVhdENvdW50KGZsb2F0IHZhbHVlKQotewotICAgIFttX2FuaW1h
dGlvbiBzZXRSZXBlYXRDb3VudDp2YWx1ZV07Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUFuaW1hdGlv
bk1hYzo6YXV0b3JldmVyc2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21fYW5pbWF0aW9uIGF1
dG9yZXZlcnNlc107Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6c2V0QXV0b3Jl
dmVyc2VzKGJvb2wgdmFsdWUpCi17Ci0gICAgW21fYW5pbWF0aW9uIHNldEF1dG9yZXZlcnNlczp2
YWx1ZV07Ci19Ci0KLVBsYXRmb3JtQ0FBbmltYXRpb246OkZpbGxNb2RlVHlwZSBQbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjOjpmaWxsTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZyb21DQUZpbGxN
b2RlVHlwZShbbV9hbmltYXRpb24gZmlsbE1vZGVdKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uTWFjOjpzZXRGaWxsTW9kZShGaWxsTW9kZVR5cGUgdmFsdWUpCi17Ci0gICAgW21fYW5p
bWF0aW9uIHNldEZpbGxNb2RlOnRvQ0FGaWxsTW9kZVR5cGUodmFsdWUpXTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5j
dGlvbiogdmFsdWUsIGJvb2wgcmV2ZXJzZSkKLXsKLSAgICBbbV9hbmltYXRpb24gc2V0VGltaW5n
RnVuY3Rpb246dG9DQU1lZGlhVGltaW5nRnVuY3Rpb24odmFsdWUsIHJldmVyc2UpXTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpjb3B5VGltaW5nRnVuY3Rpb25Gcm9tKGNvbnN0
IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQotewotICAgIFttX2FuaW1hdGlvbiBzZXRUaW1p
bmdGdW5jdGlvbjpbZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbk1hYz4odmFsdWUpLm1fYW5p
bWF0aW9uLmdldCgpIHRpbWluZ0Z1bmN0aW9uXV07Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUFuaW1h
dGlvbk1hYzo6aXNSZW1vdmVkT25Db21wbGV0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21f
YW5pbWF0aW9uIGlzUmVtb3ZlZE9uQ29tcGxldGlvbl07Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbk1hYzo6c2V0UmVtb3ZlZE9uQ29tcGxldGlvbihib29sIHZhbHVlKQotewotICAgIFtt
X2FuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOnZhbHVlXTsKLX0KLQotYm9vbCBQbGF0
Zm9ybUNBQW5pbWF0aW9uTWFjOjppc0FkZGl0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21f
YW5pbWF0aW9uIGlzQWRkaXRpdmVdOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6
OnNldEFkZGl0aXZlKGJvb2wgdmFsdWUpCi17Ci0gICAgW21fYW5pbWF0aW9uIHNldEFkZGl0aXZl
OnZhbHVlXTsKLX0KLQotUGxhdGZvcm1DQUFuaW1hdGlvbjo6VmFsdWVGdW5jdGlvblR5cGUgUGxh
dGZvcm1DQUFuaW1hdGlvbk1hYzo6dmFsdWVGdW5jdGlvbigpIGNvbnN0Ci17Ci0gICAgQ0FWYWx1
ZUZ1bmN0aW9uKiB2ZiA9IFttX2FuaW1hdGlvbiB2YWx1ZUZ1bmN0aW9uXTsKLSAgICByZXR1cm4g
ZnJvbUNBVmFsdWVGdW5jdGlvblR5cGUoW3ZmIG5hbWVdKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjOjpzZXRWYWx1ZUZ1bmN0aW9uKFZhbHVlRnVuY3Rpb25UeXBlIHZhbHVlKQot
ewotICAgIFttX2FuaW1hdGlvbiBzZXRWYWx1ZUZ1bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVu
Y3Rpb25XaXRoTmFtZTp0b0NBVmFsdWVGdW5jdGlvblR5cGUodmFsdWUpXV07Ci19Ci0KLXZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6c2V0RnJvbVZhbHVlKGZsb2F0IHZhbHVlKQotewotICAg
IGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCi0gICAgICAgIHJldHVybjsKLSAgICBbc3Rh
dGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFs
dWU6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWVdXTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uTWFjOjpzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXgmIHZhbHVlKQotewotICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRp
b24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENB
VHJhbnNmb3JtM0Q6dmFsdWVdXTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpz
ZXRGcm9tVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKLXsKLSAgICBpZiAoYW5pbWF0
aW9uVHlwZSgpICE9IEJhc2ljKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0FycmF5KiBhcnJh
eSA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1ZS54KCldLAotICAgICAgICAgICAgICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWUueSgpXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLnooKV0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBuaWxdOwotICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0
aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTphcnJheV07Ci19Ci0KLXZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9y
JiB2YWx1ZSkKLXsKLSAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBOU0FycmF5KiBhcnJheSA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1
ZS5yZWQoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTp2YWx1ZS5ncmVlbigpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOnZhbHVlLmJsdWUoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1ZS5hbHBoYSgpXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5pbF07Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2Fu
aW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOmFycmF5XTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjOjpzZXRGcm9tVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRp
b24sIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCi17Ci0gICAgUmV0YWluUHRyPGlk
PiB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbihvcGVy
YXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7Ci0gICAgW3N0YXRpY19jYXN0PENB
QmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOnZhbHVlLmdl
dCgpXTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpjb3B5RnJvbVZhbHVlRnJv
bShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKLXsKLSAgICBpZiAoYW5pbWF0aW9u
VHlwZSgpICE9IEJhc2ljIHx8IHZhbHVlLmFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICBDQUJhc2ljQW5pbWF0aW9uKiBvdGhlckFuaW1hdGlv
biA9IHN0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihkb3duY2FzdDxQbGF0Zm9ybUNBQW5p
bWF0aW9uTWFjPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkpOwotICAgIFtzdGF0aWNfY2FzdDxD
QUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpbb3RoZXJB
bmltYXRpb24gZnJvbVZhbHVlXV07Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6
c2V0VG9WYWx1ZShmbG9hdCB2YWx1ZSkKLXsKLSAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJh
c2ljKQotICAgICAgICByZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJs
ZTp2YWx1ZV1dOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OnNldFRvVmFsdWUo
Y29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQotewotICAgIGlmIChh
bmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzdGF0aWNf
Y2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6W05T
VmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDp2YWx1ZV1dOwotfQotCi12b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25NYWM6OnNldFRvVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKLXsK
LSAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBOU0FycmF5KiBhcnJheSA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1ZS54KCldLAotICAg
ICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWUueSgp
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZh
bHVlLnooKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBuaWxdOwotICAgIFtzdGF0aWNfY2Fz
dDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6YXJyYXld
OwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OnNldFRvVmFsdWUoY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIHZhbHVlKQotewotICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIE5TQXJyYXkqIGFycmF5ID0gW05TQXJyYXkgYXJyYXlX
aXRoT2JqZWN0czoKLSAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RG91YmxlOnZhbHVlLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOnZhbHVlLmdyZWVuKCldLAotICAgICAgICAgICAgICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWUuYmx1ZSgpXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLmFscGhhKCldLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbmlsXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1h
dGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOmFycmF5XTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uTWFjOjpzZXRUb1ZhbHVlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiog
b3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQotewotICAgIFJldGFp
blB0cjxpZD4gdmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRp
b24ob3BlcmF0aW9uLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOwotICAgIFtzdGF0aWNf
Y2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6dmFs
dWUuZ2V0KCldOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmNvcHlUb1ZhbHVl
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKLXsKLSAgICBpZiAoYW5pbWF0
aW9uVHlwZSgpICE9IEJhc2ljIHx8IHZhbHVlLmFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBDQUJhc2ljQW5pbWF0aW9uKiBvdGhlckFuaW1h
dGlvbiA9IHN0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihkb3duY2FzdDxQbGF0Zm9ybUNB
QW5pbWF0aW9uTWFjPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkpOwotICAgIFtzdGF0aWNfY2Fz
dDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6W290aGVy
QW5pbWF0aW9uIHRvVmFsdWVdXTsKLX0KLQotCi0vLyBLZXlmcmFtZS1hbmltYXRpb24gcHJvcGVy
dGllcy4KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6c2V0VmFsdWVzKGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHZhbHVlKQotewotICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0g
W05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVl
LnNpemUoKTsgKytpKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOnZhbHVlW2ldXV07Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRp
b24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKLX0KLQotdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uTWFjOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4PiYgdmFsdWUpCi17Ci0gICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBL
ZXlmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBOU011dGFibGVBcnJheSog
YXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNWYWx1
ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOnZhbHVlW2ldXV07Ci0gICAgICAgIAotICAgIFtzdGF0
aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVl
czphcnJheV07Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbk1hYzo6c2V0VmFsdWVzKGNv
bnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZSkKLXsKLSAgICBpZiAoYW5pbWF0aW9uVHlw
ZSgpICE9IEtleWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIE5TTXV0YWJs
ZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5TQXJyYXkqIG9iamVj
dCA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1ZVtpXS54KCldLAotICAgICAgICAgICAgICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWVbaV0ueSgpXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlW2ldLnoo
KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBuaWxdOwotICAgICAgICBbYXJyYXkgYWRkT2Jq
ZWN0Om9iamVjdF07Ci0gICAgfQotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07Ci19Ci0KLXZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbk1hYzo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4m
IHZhbHVlKQotewotICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5XTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgTlNBcnJheSogb2JqZWN0ID0gW05TQXJyYXkgYXJyYXlXaXRoT2Jq
ZWN0czoKLSAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91Ymxl
OnZhbHVlW2ldLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoRG91YmxlOnZhbHVlW2ldLmdyZWVuKCldLAotICAgICAgICAgICAgICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWVbaV0uYmx1ZSgpXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlW2ldLmFscGhhKCld
LAotICAgICAgICAgICAgICAgICAgICAgICAgbmlsXTsKLSAgICAgICAgW2FycmF5IGFkZE9iamVj
dDpvYmplY3RdOwotICAgIH0KLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+
KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOwotfQotCi12b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25NYWM6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4+JiB2YWx1ZXMsIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCi17Ci0gICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgUmV0YWluUHRyPGlkPiB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZv
ck9wZXJhdGlvbih2YWx1ZXNbaV0uZ2V0KCksIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7
Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6dmFsdWUuZ2V0KCldOwotICAgIH0KLSAgICBbc3Rh
dGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1
ZXM6YXJyYXldOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmNvcHlWYWx1ZXNG
cm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQotewotICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gS2V5ZnJhbWUgfHwgdmFsdWUuYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1l
KQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIENBS2V5ZnJhbWVBbmltYXRpb24qIG90
aGVyQW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KGRvd25jYXN0
PFBsYXRmb3JtQ0FBbmltYXRpb25NYWM+KHZhbHVlKS5tX2FuaW1hdGlvbi5nZXQoKSk7Ci0gICAg
W3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0
VmFsdWVzOltvdGhlckFuaW1hdGlvbiB2YWx1ZXNdXTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uTWFjOjpzZXRLZXlUaW1lcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKLXsKLSAg
ICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkKLSAgICAgICAgW2FycmF5
IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnZhbHVlW2ldXV07Ci0gICAgCi0g
ICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkg
c2V0S2V5VGltZXM6YXJyYXldOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmNv
cHlLZXlUaW1lc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCi17Ci0gICAg
Q0FLZXlmcmFtZUFuaW1hdGlvbiogb3RoZXIgPSBzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0
aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbk1hYz4odmFsdWUpLm1fYW5pbWF0aW9u
LmdldCgpKTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRLZXlUaW1lczpbb3RoZXIga2V5VGltZXNdXTsKLX0KLQotdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uTWFjOjpzZXRUaW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0
IFRpbWluZ0Z1bmN0aW9uKj4mIHZhbHVlLCBib29sIHJldmVyc2UpCi17Ci0gICAgTlNNdXRhYmxl
QXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6
dG9DQU1lZGlhVGltaW5nRnVuY3Rpb24odmFsdWVbaV0sIHJldmVyc2UpXTsKLSAgICAKLSAgICBb
c3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRU
aW1pbmdGdW5jdGlvbnM6YXJyYXldOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6
OmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVl
KQotewotICAgIENBS2V5ZnJhbWVBbmltYXRpb24qIG90aGVyID0gc3RhdGljX2Nhc3Q8Q0FLZXlm
cmFtZUFuaW1hdGlvbio+KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25NYWM+KHZhbHVlKS5t
X2FuaW1hdGlvbi5nZXQoKSk7Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VGltaW5nRnVuY3Rpb25zOltvdGhlciB0aW1pbmdGdW5j
dGlvbnNdXTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTg2ODVlOTZmZjhhZWNjNjNmZmRlNzdlYTM3NTQwNDAxMmMxMmEzMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0KKysr
IC9kZXYvbnVsbApAQCAtMSw2NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbXBvcnQgIlBsYXRm
b3JtQ0FGaWx0ZXJzLmgiCi0jaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkZs
b2F0Q29udmVyc2lvbi5oIgotI2ltcG9ydCAiTGVuZ3RoRnVuY3Rpb25zLmgiIC8vIFRoaXMgaXMg
YSBsYXllcmluZyB2aW9sYXRpb24uCi0jaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJNYWMuaCIKLSNp
bXBvcnQgIlF1YXJ0ekNvcmVTUEkuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5o
PgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0
aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGQoKSAoaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KLXN0YXRpYyBjb25zdCBkb3Vi
bGUgc2VwaWFGdWxsQ29uc3RhbnRzWzNdWzNdID0gewotICAgIHsgMC4zOTMsIDAuNzY5LCAwLjE4
OSB9LAotICAgIHsgMC4zNDksIDAuNjg2LCAwLjE2OCB9LAotICAgIHsgMC4yNzIsIDAuNTM0LCAw
LjEzMSB9Ci19OwotCi1zdGF0aWMgY29uc3QgZG91YmxlIHNlcGlhTm9uZUNvbnN0YW50c1szXVsz
XSA9IHsKLSAgICB7IDEsIDAsIDAgfSwKLSAgICB7IDAsIDEsIDAgfSwKLSAgICB7IDAsIDAsIDEg
fQotfTsKLQotdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZv
cm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAg
aWYgKCFmaWx0ZXJzLnNpemUoKSkgewotICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKLSAgICAgICAgW2xheWVyIHNldEZpbHRlcnM6bmlsXTsKLSAgICAgICAgLy8gRklYTUU6IHRo
aXMgYWRkcyBzaGFkb3cgcHJvcGVydGllcyB0byB0aGUgbGF5ZXIgZXZlbiB3aGVuIGl0IGhhZCBu
b25lLgotICAgICAgICBbbGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZVplcm9dOwotICAgICAg
ICBbbGF5ZXIgc2V0U2hhZG93Q29sb3I6bmlsXTsKLSAgICAgICAgW2xheWVyIHNldFNoYWRvd1Jh
ZGl1czowXTsKLSAgICAgICAgW2xheWVyIHNldFNoYWRvd09wYWNpdHk6MF07Ci0gICAgICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICAvLyBBc3N1bWUgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZCB3YXMgY2FsbGVkIGFuZCBpdCByZXR1
cm5lZCB0cnVlLgotICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXJNYWM6OmZpbHRlcnNDYW5CZUNv
bXBvc2l0ZWQoZmlsdGVycykpOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwotICAgIAotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYXJyYXkgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgZmlsdGVyTmFt
ZSA9IFN0cmluZzo6Zm9ybWF0KCJmaWx0ZXJfJWQiLCBpKTsKLSAgICAgICAgY29uc3QgRmlsdGVy
T3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24gPSAqZmlsdGVycy5hdChpKTsKLSAgICAgICAgc3dp
dGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpERUZBVUxUOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyBhc3N1bWUgZHJvcCBzaGFkb3cgaXMgdGhl
IGxhc3QgZmlsdGVyLCBwdXQgaXQgb24gdGhlIGxheWVyLgotICAgICAgICAgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzEwOTU5OTY5PiBIYW5kbGUgY2FzZSB3aGVyZSBkcm9wLXNoYWRvdyBpcyBub3Qg
dGhlIGxhc3QgZmlsdGVyLgotICAgICAgICAgICAgY29uc3QgYXV0byYgZHJvcFNoYWRvd09wZXJh
dGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZU1ha2UoZHJvcFNo
YWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpKV07Ci0KLSAgICAgICAg
ICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKLSAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRp
b24uY29sb3IoKS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVu
dHNbMl0sIGNvbXBvbmVudHNbM10pOwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFj
ZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkp
OwotICAgICAgICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0Nv
bG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKLSAgICAgICAgICAgIFts
YXllciBzZXRTaGFkb3dDb2xvcjpjb2xvci5nZXQoKV07Ci0gICAgICAgICAgICBbbGF5ZXIgc2V0
U2hhZG93UmFkaXVzOmRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCldOwotICAgICAg
ICAgICAgW2xheWVyIHNldFNoYWRvd09wYWNpdHk6MV07Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotI2lmIFVTRV9DQV9GSUxURVJTCi0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVy
V2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNb25vY2hyb21lXTsKLSAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0
TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6Zmls
dGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9y
TWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRl
cihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAg
IENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29s
b3JNYXRyaXhdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVl
LmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIg
c2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6
ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JN
YXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZp
bHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvclNhdHVyYXRlXTsKLSAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9w
ZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKLSAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRP
YmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBhdXRv
JiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVy
ID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9ySHVlUm90YXRlXTsKLSAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcy
cmFkKGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKV0gZm9yS2V5OkAiaW5wdXRBbmdsZSJd
OwotICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOkAiaHVlUm90YXRlIl07Ci0gICAgICAgICAg
ICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkg
YWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8
TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJp
eFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBlKCksICZmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlw
ZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmNv
bG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOwotICAgICAg
ICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5Lmdl
dCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAgICAgICAgIFJldGFp
blB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9y
TWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldp
dGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFs
dWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07Ci0g
ICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJy
YXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAg
ICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVy
czo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAmZmls
dGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIg
ZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwotICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRy
aXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAg
ICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAg
ICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNB
RmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgp
LCAmZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FG
aWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwotICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29s
b3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAg
ICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0g
ICAgICAgICAgICBjb25zdCBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENBRmlsdGVyICpmaWx0
ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyR2F1c3NpYW5CbHVyXTsKLSAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpmbG9h
dFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApXSBmb3JLZXk6
QCJpbnB1dFJhZGl1cyJdOwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgICAg
ICBpZiAoZmlsdGVycy5pc1VzZWRGb3JCYWNrZHJvcEZpbHRlcnMoKSkKLSAgICAgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpA
ImlucHV0Tm9ybWFsaXplRWRnZXMiXTsKLSNlbmRpZgotICAgICAgICAgICAgW2ZpbHRlciBzZXRO
YW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0
ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNv
bG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBb
Q0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTW9ub2Nocm9tZSJdOwotICAgICAgICAg
ICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZv
cktleTpAImlucHV0SW50ZW5zaXR5Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltD
SUNvbG9yIGNvbG9yV2l0aFJlZDowLjY3IGdyZWVuOjAuNjcgYmx1ZTowLjY3XSBmb3JLZXk6QCJp
bnB1dENvbG9yIl07IC8vIENvbG9yIGRlcml2ZWQgZW1waXJpY2FsbHkgdG8gbWF0Y2ggemVybyBz
YXR1cmF0aW9uIGxldmVscy4KLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1l
XTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJ
QTogewotICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpA
IkNJQ29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotCi0g
ICAgICAgICAgICBkb3VibGUgdCA9IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpOwotICAg
ICAgICAgICAgdCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMCwgdCksIDEuMCk7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogcmVzdWx0cyBkb24ndCBtYXRjaCB0aGUgc29mdHdhcmUgZmlsdGVyLgotICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6V2ViQ29yZTo6
YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMF0s
IHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWTpX
ZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMV0sIHNlcGlhRnVsbENvbnN0YW50
c1swXVsxXSwgdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVsyXSwgc2VwaWFGdWxs
Q29uc3RhbnRzWzBdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6V2ViQ29yZTo6Ymxl
bmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMF0sIHQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWTpXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1sx
XVsxXSwgdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29u
c3RhbnRzWzFdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICAg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6V2ViQ29yZTo6YmxlbmQo
c2VwaWFOb25lQ29uc3RhbnRzWzJdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMF0sIHQpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWTpXZWJDb3Jl
OjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsx
XSwgdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBa
OldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsyXSwgc2VwaWFGdWxsQ29uc3Rh
bnRzWzJdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICAgICAg
W2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFk
ZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBhdXRv
JiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVy
ID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xzIl07Ci0gICAgICAg
ICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKV0g
Zm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6
ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtDSUZpbHRlciBm
aWx0ZXJXaXRoTmFtZTpAIkNJSHVlQWRqdXN0Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldERl
ZmF1bHRzXTsKLQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0OmRlZzJyYWQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpXSBmb3JLZXk6
QCJpbnB1dEFuZ2xlIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJU
OiB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDSUZpbHRlciogZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZh
dWx0c107Ci0KLSAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gMSAtIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpICogMjsKLQotICAgICAgICAgICAgLy8gRklYTUU6IHRo
ZSByZXN1bHRzIG9mIHRoaXMgZmlsdGVyIGxvb2sgd3JvbmcuCi0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDptdWx0aXBsaWVyIFk6MCBaOjAgVzowXSBm
b3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOjAgWTptdWx0aXBsaWVyIFo6MCBXOjBdIGZvcktleTpAImlucHV0
R1ZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6MCBZOjAgWjptdWx0aXBsaWVyIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0g
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBa
OjAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOm9wLT5hbW91bnQoKSBZOm9wLT5hbW91bnQoKSBa
Om9wLT5hbW91bnQoKSBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICAg
ICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgp
IGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENJ
RmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4
Il07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKLQotICAgICAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MSBZOjAgWjowIFc6MF0gZm9yS2V5
OkAiaW5wdXRSVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowIFk6MSBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6
MSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6Y29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6MF0gZm9y
S2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6Zmls
dGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgY29uc3QgYXV0byYgY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ0lGaWx0ZXIqIGZpbHRlciA9IFtD
SUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsKLSAgICAgICAgICAgIFtm
aWx0ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpOwotCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDphbW91bnQgWTowIFo6MCBXOjBdIGZvcktleTpAImlu
cHV0UlZlY3RvciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6MCBZOmFtb3VudCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6
YW1vdW50IFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgICAgICBbZmlsdGVy
IHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0
OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENJRmlsdGVyKiBm
aWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yQ29udHJvbHMiXTsKLSAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dENvbnRyYXN0Il07Ci0gICAgICAgICAgICBbZmlsdGVy
IHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0
OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2Ug
aWdub3JlIHN0ZERldmlhdGlvblkuCi0gICAgICAgICAgICBjb25zdCBhdXRvJiBibHVyT3BlcmF0
aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIENJRmlsdGVyKiBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJD
SUdhdXNzaWFuQmx1ciJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107Ci0gICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZmxvYXRW
YWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKV0gZm9yS2V5OkAi
aW5wdXRSYWRpdXMiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsK
LSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlBBU1NUSFJPVUdIOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBBU1NFUlQoMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChbYXJyYXkuZ2V0KCkgY291bnRdID4gMCkKLSAgICAgICAgW2xheWVyIHNldEZp
bHRlcnM6YXJyYXkuZ2V0KCldOwotICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LX0KLQotUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZv
ck9wZXJhdGlvbihjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVybmFs
RmlsdGVyUHJvcGVydHlJbmRleCkKLXsKLSNpZiBVU0VfQ0FfRklMVEVSUwotICAgIFVOVVNFRF9Q
QVJBTShpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOwotI2VuZGlmCi0gICAgRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBvcGVyYXRpb24tPnR5cGUoKTsKLSAgICBSZXRh
aW5QdHI8aWQ+IHZhbHVlOwotICAgIAotICAgIGlmIChpczxEZWZhdWx0RmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSkgewotICAgICAgICB0eXBlID0gZG93bmNhc3Q8RGVmYXVsdEZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikucmVwcmVzZW50ZWRUeXBlKCk7Ci0gICAgICAgIG9wZXJhdGlv
biA9IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewot
ICAgICAgICAvLyBDSUZpbHRlcjogaW5wdXRJbnRlbnNpdHkKLSAgICAgICAgLy8gQ0FGaWx0ZXI6
IGlucHV0QW1vdW50Ci0gICAgICAgIGRvdWJsZSBhbW91bnQgPSAwOwotICAgICAgICBpZiAob3Bl
cmF0aW9uKQotICAgICAgICAgICAgYW1vdW50ID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuYW1vdW50KCk7Ci0gICAgICAgIAotICAgICAgICB2
YWx1ZSA9IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF07Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKLSNpZiBVU0VfQ0Ff
RklMVEVSUwotICAgICAgICAvLyBDQUZpbHRlcjogaW5wdXRDb2xvck1hdHJpeAotICAgICAgICB2
YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKHR5cGUs
IG9wZXJhdGlvbik7Ci0jZWxzZQotICAgICAgICAvLyBDSUZpbHRlcjogaW5wdXRSVmVjdG9yLCBp
bnB1dEdWZWN0b3IsIGlucHV0QlZlY3RvcgotICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKLSAg
ICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwotCi0gICAg
ICAgIENJVmVjdG9yKiByb3dWZWN0b3IgPSBudWxscHRyOwotICAgICAgICBzd2l0Y2ggKGludGVy
bmFsRmlsdGVyUHJvcGVydHlJbmRleCkgewotICAgICAgICBjYXNlIDA6IHJvd1ZlY3RvciA9IFtb
Q0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFu
dHNbMF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1swXVswXSwgYW1vdW50KQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWTpXZWJDb3JlOjpibGVu
ZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsxXSwgYW1v
dW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWjpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVsbENv
bnN0YW50c1swXVsyXSwgYW1vdW50KSBXOjBdOyBicmVhazsgLy8gaW5wdXRSVmVjdG9yCi0gICAg
ICAgIGNhc2UgMTogcm93VmVjdG9yID0gW1tDSVZlY3RvciBhbGxvY10gaW5pdFdpdGhYOldlYkNv
cmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFd
WzBdLCBhbW91bnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBZOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVsxXSwgc2Vw
aWFGdWxsQ29uc3RhbnRzWzFdWzFdLCBhbW91bnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNv
bnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJdLCBhbW91bnQpIFc6MF07IGJy
ZWFrOyAvLyBpbnB1dEdWZWN0b3IKLSAgICAgICAgY2FzZSAyOiByb3dWZWN0b3IgPSBbW0NJVmVj
dG9yIGFsbG9jXSBpbml0V2l0aFg6V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJd
WzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMF0sIGFtb3VudCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6YmxlbmQoc2Vw
aWFOb25lQ29uc3RhbnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIGFtb3VudCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFo6
V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzJdLCBzZXBpYUZ1bGxDb25zdGFu
dHNbMl1bMl0sIGFtb3VudCkgVzowXTsgYnJlYWs7IC8vIGlucHV0QlZlY3RvcgotICAgICAgICB9
Ci0gICAgICAgIHZhbHVlID0gYWRvcHROUyhyb3dWZWN0b3IpOwotI2VuZGlmCi0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAg
ICAgLy8gQ0lGaWx0ZXI6IGlucHV0U2F0dXJhdGlvbgotICAgICAgICAvLyBDQUZpbHRlcjogaW5w
dXRBbW91bnQKLSAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7Ci0gICAgICAgIGlmIChvcGVyYXRp
b24pCi0gICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVl
ID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgIC8v
IEh1ZSByb3RhdGUgQ0lGaWx0ZXI6IGlucHV0QW5nbGUKLSAgICAgICAgLy8gSHVlIHJvdGF0ZSBD
QUZpbHRlcjogaW5wdXRBbmdsZQotICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKLSAgICAgICAg
aWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwotICAgICAgICAKLSAg
ICAgICAgYW1vdW50ID0gZGVnMnJhZChhbW91bnQpOwotICAgICAgICB2YWx1ZSA9IFtOU051bWJl
ciBudW1iZXJXaXRoRG91YmxlOmFtb3VudF07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0jaWYgVVNFX0NBX0ZJTFRFUlMKLSAgICAg
ICAgLy8gQ0FGaWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgKLSAgICAgICAgdmFsdWUgPSBQbGF0Zm9y
bUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcih0eXBlLCBvcGVyYXRpb24pOwot
I2Vsc2UKLSAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0UlZlY3RvciwgaW5wdXRHVmVjdG9yLCBp
bnB1dEJWZWN0b3IsIGlucHV0Qmlhc1ZlY3RvcgotICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsK
LSAgICAgICAgaWYgKG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgp
OwotICAgICAgICAKLSAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSAxIC0gYW1vdW50ICogMjsK
LQotICAgICAgICAvLyBUaGUgY29sb3IgbWF0cml4IGFuaW1hdGlvbiBmb3IgaW52ZXJ0IGRvZXMg
YSBzY2FsZSBvZiBlYWNoIGNvbG9yIGNvbXBvbmVudCBieSBhIHZhbHVlIHRoYXQgZ29lcyBmcm9t
IAotICAgICAgICAvLyAxICh3aGVuIGFtb3VudCBpcyAwKSB0byAtMSAod2hlbiBhbW91bnQgaXMg
MSkuIFRoZW4gdGhlIGNvbG9yIHZhbHVlcyBhcmUgb2Zmc2V0IGJ5IGFtb3VudC4gVGhpcyBoYXMg
dGhlCi0gICAgICAgIC8vIGVmZmVjdCBvZiBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb246IGMnID0g
YyAqIC0xICsgMSwgd2hpY2ggaW52ZXJ0cyB0aGUgY29sb3IuCi0gICAgICAgIENJVmVjdG9yKiBy
b3dWZWN0b3IgPSAwOwotICAgICAgICBzd2l0Y2ggKGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRl
eCkgewotICAgICAgICBjYXNlIDA6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRX
aXRoWDptdWx0aXBsaWVyIFk6MCBaOjAgVzowXTsgYnJlYWs7IC8vIGlucHV0UlZlY3RvcgotICAg
ICAgICBjYXNlIDE6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDowIFk6
bXVsdGlwbGllciBaOjAgVzowXTsgYnJlYWs7IC8vIGlucHV0R1ZlY3RvcgotICAgICAgICBjYXNl
IDI6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDowIFk6MCBaOm11bHRp
cGxpZXIgVzowXTsgYnJlYWs7IC8vIGlucHV0QlZlY3RvcgotICAgICAgICBjYXNlIDM6IHJvd1Zl
Y3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDphbW91bnQgWTphbW91bnQgWjphbW91
bnQgVzowXTsgYnJlYWs7IC8vIGlucHV0Qmlhc1ZlY3RvcgotICAgICAgICB9Ci0gICAgICAgIHZh
bHVlID0gYWRvcHROUyhyb3dWZWN0b3IpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotI2lmIFVTRV9DQV9GSUxURVJT
Ci0gICAgICAgIC8vIE9wYWNpdHkgQ0FGaWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgKLSAgICAgICAg
dmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcih0eXBl
LCBvcGVyYXRpb24pOwotI2Vsc2UKLSAgICAgICAgLy8gT3BhY2l0eSBDSUZpbHRlcjogaW5wdXRB
VmVjdG9yCi0gICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOwotICAgICAgICBpZiAob3BlcmF0aW9u
KQotICAgICAgICAgICAgYW1vdW50ID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuYW1vdW50KCk7Ci0gICAgICAgIAotICAgICAgICB2
YWx1ZSA9IGFkb3B0TlMoW1tDSVZlY3RvciBhbGxvY10gaW5pdFdpdGhYOjAgWTowIFo6MCBXOmFt
b3VudF0pOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotI2lmIFVTRV9DQV9GSUxURVJTCi0gICAgICAg
IC8vIEJyaWdodG5lc3MgQ0FGaWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgKLSAgICAgICAgdmFsdWUg
PSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcih0eXBlLCBvcGVy
YXRpb24pOwotI2Vsc2UKLSAgICAgICAgLy8gQnJpZ2h0bmVzcyBDSUZpbHRlcjogaW5wdXRDb2xv
ck1hdHJpeAotICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKLSAgICAgICAgaWYgKG9wZXJhdGlv
bikKLSAgICAgICAgICAgIGFtb3VudCA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLmFtb3VudCgpOwotICAgICAgICAKLSAgICAgICAg
Q0lWZWN0b3IqIHJvd1ZlY3RvciA9IG51bGxwdHI7Ci0gICAgICAgIHN3aXRjaCAoaW50ZXJuYWxG
aWx0ZXJQcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgIGNhc2UgMDogcm93VmVjdG9yID0gW1tDSVZl
Y3RvciBhbGxvY10gaW5pdFdpdGhYOmFtb3VudCBZOjAgWjowIFc6MF07IGJyZWFrOyAvLyBpbnB1
dFJWZWN0b3IKLSAgICAgICAgY2FzZSAxOiByb3dWZWN0b3IgPSBbW0NJVmVjdG9yIGFsbG9jXSBp
bml0V2l0aFg6MCBZOmFtb3VudCBaOjAgVzowXTsgYnJlYWs7IC8vIGlucHV0R1ZlY3RvcgotICAg
ICAgICBjYXNlIDI6IHJvd1ZlY3RvciA9IFtbQ0lWZWN0b3IgYWxsb2NdIGluaXRXaXRoWDowIFk6
MCBaOmFtb3VudCBXOjBdOyBicmVhazsgLy8gaW5wdXRCVmVjdG9yCi0gICAgICAgIH0KLSAgICAg
ICAgdmFsdWUgPSBhZG9wdE5TKHJvd1ZlY3Rvcik7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0jaWYgVVNFX0NB
X0ZJTFRFUlMKLSAgICAgICAgLy8gQ29udHJhc3QgQ0FGaWx0ZXI6IGlucHV0Q29sb3JNYXRyaXgK
LSAgICAgICAgdmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZp
bHRlcih0eXBlLCBvcGVyYXRpb24pOwotI2Vsc2UKLSAgICAgICAgLy8gQ29udHJhc3QgQ0lGaWx0
ZXI6IGlucHV0Q29udHJhc3QKLSAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7Ci0gICAgICAgIGlm
IChvcGVyYXRpb24pCi0gICAgICAgICAgICBhbW91bnQgPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKLSAgICAgICAg
Ci0gICAgICAgIHZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YW1vdW50XTsKLSNl
bmRpZgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJM
VVI6IHsKLSAgICAgICAgLy8gQ0lGaWx0ZXI6IGlucHV0UmFkaXVzCi0gICAgICAgIC8vIENBRmls
dGVyOiBpbnB1dFJhZGl1cwotICAgICAgICBkb3VibGUgYW1vdW50ID0gMDsKLSAgICAgICAgaWYg
KG9wZXJhdGlvbikKLSAgICAgICAgICAgIGFtb3VudCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZG93
bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuc3RkRGV2aWF0aW9uKCksIDAp
OwotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTph
bW91bnRdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotI2lmIFVTRV9DQV9GSUxU
RVJTCi1SZXRhaW5QdHI8TlNWYWx1ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFs
dWVGb3JGaWx0ZXIoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uKQotewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICBkb3VibGUgdCA9IGZp
bHRlck9wZXJhdGlvbiA/IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+
KCpmaWx0ZXJPcGVyYXRpb24pLmFtb3VudCgpIDogMDsKLSAgICAgICAgdCA9IHN0ZDo6bWluKHN0
ZDo6bWF4KDAuMCwgdCksIDEuMCk7Ci0gICAgICAgIENBQ29sb3JNYXRyaXggY29sb3JNYXRyaXgg
PSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFO
b25lQ29uc3RhbnRzWzBdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMF0sIHQpKSwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFu
dHNbMF1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1swXVsxXSwgdCkpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVsyXSwg
c2VwaWFGdWxsQ29uc3RhbnRzWzBdWzJdLCB0KSksIDAsIDAsCi0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFu
dHNbMV1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVswXSwgdCkpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVsxXSwg
c2VwaWFGdWxsQ29uc3RhbnRzWzFdWzFdLCB0KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxm
bG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzJdLCBzZXBpYUZ1bGxD
b25zdGFudHNbMV1bMl0sIHQpKSwgMCwgMCwKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVswXSwg
c2VwaWFGdWxsQ29uc3RhbnRzWzJdWzBdLCB0KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxm
bG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzFdLCBzZXBpYUZ1bGxD
b25zdGFudHNbMl1bMV0sIHQpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1sy
XVsyXSwgdCkpLCAwLCAwLAotICAgICAgICAgICAgMCwgMCwgMCwgMSwgMAotICAgICAgICB9Owot
ICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FDb2xvck1hdHJpeDpjb2xvck1hdHJp
eF07Ci0gICAgfQotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAg
ZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKmZpbHRlck9wZXJhdGlvbikuYW1vdW50KCkgOiAwOwot
ICAgICAgICBmbG9hdCBtdWx0aXBsaWVyID0gMSAtIGFtb3VudCAqIDI7Ci0gICAgICAgIENBQ29s
b3JNYXRyaXggY29sb3JNYXRyaXggPSB7Ci0gICAgICAgICAgICBtdWx0aXBsaWVyLCAwLCAwLCAw
LCBhbW91bnQsCi0gICAgICAgICAgICAwLCBtdWx0aXBsaWVyLCAwLCAwLCBhbW91bnQsCi0gICAg
ICAgICAgICAwLCAwLCBtdWx0aXBsaWVyLCAwLCBhbW91bnQsCi0gICAgICAgICAgICAwLCAwLCAw
LCAxLCAwCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNv
bG9yTWF0cml4OmNvbG9yTWF0cml4XTsKLSAgICB9Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk6IHsKLSAgICAgICAgZmxvYXQgYW1vdW50ID0gZmlsdGVyT3BlcmF0aW9uID8gZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKS0+YW1vdW50KCkgOiAxOwotICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0g
ewotICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAs
Ci0gICAgICAgICAgICAwLCAwLCAxLCAwLCAwLAotICAgICAgICAgICAgMCwgMCwgMCwgYW1vdW50
LCAwCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9y
TWF0cml4OmNvbG9yTWF0cml4XTsKLSAgICB9Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOiB7Ci0gICAgICAgIGZsb2F0IGFtb3VudCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
biktPmFtb3VudCgpIDogMTsKLSAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3Vu
dCArIDAuNTsKLSAgICAgICAgQ0FDb2xvck1hdHJpeCBjb2xvck1hdHJpeCA9IHsKLSAgICAgICAg
ICAgIGFtb3VudCwgMCwgMCwgMCwgaW50ZXJjZXB0LAotICAgICAgICAgICAgMCwgYW1vdW50LCAw
LCAwLCBpbnRlcmNlcHQsCi0gICAgICAgICAgICAwLCAwLCBhbW91bnQsIDAsIGludGVyY2VwdCwK
LSAgICAgICAgICAgIDAsIDAsIDAsIDEsIDAKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFtO
U1ZhbHVlIHZhbHVlV2l0aENBQ29sb3JNYXRyaXg6Y29sb3JNYXRyaXhdOwotICAgIH0KLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICBmbG9hdCBhbW91bnQg
PSBmaWx0ZXJPcGVyYXRpb24gPyBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pLT5hbW91bnQoKSA6IDE7Ci0gICAgICAgIENBQ29s
b3JNYXRyaXggY29sb3JNYXRyaXggPSB7Ci0gICAgICAgICAgICBhbW91bnQsIDAsIDAsIDAsIDAs
Ci0gICAgICAgICAgICAwLCBhbW91bnQsIDAsIDAsIDAsCi0gICAgICAgICAgICAwLCAwLCBhbW91
bnQsIDAsIDAsCi0gICAgICAgICAgICAwLCAwLCAwLCAxLCAwCi0gICAgICAgIH07Ci0gICAgICAg
IHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9yTWF0cml4XTsKLSAg
ICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpz
ZXRCbGVuZGluZ0ZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQotewotI2lmIFVTRV9DQV9GSUxURVJTCi0gICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCi0KLSAgICBDQUZpbHRlciogZmlsdGVyID0gbmlsOwotCi0gICAgc3dp
dGNoIChibGVuZE1vZGUpIHsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGVOb3JtYWw6Ci0gICAgICAg
ICAgICAvLyBObyBuZWVkIHRvIHNldCBhbiBhY3R1YWwgZmlsdGVyIG9iamVjdCBpbiB0aGlzIGNh
c2UuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGVPdmVybGF5Ogot
ICAgICAgICAgICAgZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlck92
ZXJsYXlCbGVuZE1vZGVdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRN
b2RlQ29sb3JEb2RnZToKLSAgICAgICAgICAgIGZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRo
VHlwZTprQ0FGaWx0ZXJDb2xvckRvZGdlQmxlbmRNb2RlXTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEJsZW5kTW9kZUNvbG9yQnVybjoKLSAgICAgICAgICAgIGZpbHRlciA9IFtD
QUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvckJ1cm5CbGVuZE1vZGVdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlRGFya2VuOgotICAgICAgICAg
ICAgZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckRhcmtlbkJsZW5k
TW9kZV07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGVEaWZmZXJl
bmNlOgotICAgICAgICAgICAgZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZp
bHRlckRpZmZlcmVuY2VCbGVuZE1vZGVdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQmxlbmRNb2RlRXhjbHVzaW9uOgotICAgICAgICAgICAgZmlsdGVyID0gW0NBRmlsdGVyIGZp
bHRlcldpdGhUeXBlOmtDQUZpbHRlckV4Y2x1c2lvbkJsZW5kTW9kZV07Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGVIYXJkTGlnaHQ6Ci0gICAgICAgICAgICBmaWx0
ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVySGFyZExpZ2h0QmxlbmRNb2Rl
XTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZU11bHRpcGx5Ogot
ICAgICAgICAgICAgZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlck11
bHRpcGx5QmxlbmRNb2RlXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5k
TW9kZUxpZ2h0ZW46Ci0gICAgICAgICAgICBmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5
cGU6a0NBRmlsdGVyTGlnaHRlbkJsZW5kTW9kZV07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBCbGVuZE1vZGVTb2Z0TGlnaHQ6Ci0gICAgICAgICAgICBmaWx0ZXIgPSBbQ0FGaWx0
ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyU29mdExpZ2h0QmxlbmRNb2RlXTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsZW5kTW9kZVNjcmVlbjoKLSAgICAgICAgICAgIGZp
bHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJTY3JlZW5CbGVuZE1vZGVd
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmxlbmRNb2RlUGx1c0RhcmtlcjoK
LSAgICAgICAgICAgIGZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJQ
bHVzRF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCbGVuZE1vZGVQbHVzTGln
aHRlcjoKLSAgICAgICAgICAgIGZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FG
aWx0ZXJQbHVzTF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIFtsYXllciBzZXRDb21w
b3NpdGluZ0ZpbHRlcjpmaWx0ZXJdOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obGF5ZXIpOwotICAgIFVOVVNFRF9QQVJBTShibGVuZE1v
ZGUpOwotI2VuZGlmCi19Ci0KLWludCBQbGF0Zm9ybUNBRmlsdGVyczo6bnVtQW5pbWF0ZWRGaWx0
ZXJQcm9wZXJ0aWVzKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlKQotewotI2lm
IFVTRV9DQV9GSUxURVJTCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRTogcmV0dXJuIDE7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNF
UElBOiByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVy
biAxOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gMTsKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuIDE7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJSSUdIVE5FU1M6IHJldHVybiAxOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFT
VDogcmV0dXJuIDE7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHJldHVybiAxOwot
ICAgIGRlZmF1bHQ6IHJldHVybiAwOwotICAgIH0KLSNlbHNlCi0gICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogcmV0dXJuIDE7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiByZXR1cm4gMzsKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0FUVVJBVEU6IHJldHVybiAxOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVf
Uk9UQVRFOiByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiByZXR1
cm4gNDsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuIDE7Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHJldHVybiAzOwotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuIDE7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJMVVI6IHJldHVybiAxOwotICAgIGRlZmF1bHQ6IHJldHVybiAwOwotICAgIH0KLSNlbmRp
ZgotfQotCi1jb25zdCBjaGFyKiBQbGF0Zm9ybUNBRmlsdGVyczo6YW5pbWF0ZWRGaWx0ZXJQcm9w
ZXJ0eU5hbWUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIGludCBpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXgpCi17Ci0jaWYgVVNFX0NBX0ZJTFRFUlMKLSAgICBVTlVTRURf
UEFSQU0oaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4gImlucHV0QW1vdW50
IjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6cmV0dXJuICJpbnB1dENvbG9yTWF0
cml4IjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHJldHVybiAiaW5wdXRB
bW91bnQiOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gImlu
cHV0QW5nbGUiOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHJldHVybiAiaW5w
dXRDb2xvck1hdHJpeCI7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHJldHVy
biAiaW5wdXRDb2xvck1hdHJpeCI7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6IHJldHVybiAiaW5wdXRDb2xvck1hdHJpeCI7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkNPTlRSQVNUOiByZXR1cm4gImlucHV0Q29sb3JNYXRyaXgiOwotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOiByZXR1cm4gImlucHV0UmFkaXVzIjsKLSAgICBkZWZhdWx0OiByZXR1cm4g
IiI7Ci0gICAgfQotI2Vsc2UKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6R1JBWVNDQUxFOiByZXR1cm4gImlucHV0SW50ZW5zaXR5IjsKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6Ci0gICAgICAgIHN3aXRjaCAoaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSB7Ci0gICAg
ICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0b3IiOwotICAgICAgICBjYXNlIDE6IHJldHVy
biAiaW5wdXRHVmVjdG9yIjsKLSAgICAgICAgY2FzZSAyOiByZXR1cm4gImlucHV0QlZlY3RvciI7
Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiAiIjsKLSAgICAgICAgfQotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTQVRVUkFURTogcmV0dXJuICJpbnB1dFNhdHVyYXRpb24iOwotICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiByZXR1cm4gImlucHV0QW5nbGUiOwotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIHN3aXRjaCAoaW50ZXJuYWxGaWx0
ZXJQcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuICJpbnB1dFJWZWN0b3Ii
OwotICAgICAgICBjYXNlIDE6IHJldHVybiAiaW5wdXRHVmVjdG9yIjsKLSAgICAgICAgY2FzZSAy
OiByZXR1cm4gImlucHV0QlZlY3RvciI7Ci0gICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnB1dEJp
YXNWZWN0b3IiOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4gIiI7Ci0gICAgICAgIH0KLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogcmV0dXJuICJpbnB1dEFWZWN0b3IiOwotICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogcmV0dXJuICJpbnB1dENvbnRyYXN0IjsK
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogcmV0dXJuICJpbnB1dFJhZGl1cyI7Ci0g
ICAgZGVmYXVsdDogcmV0dXJuICIiOwotICAgIH0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXll
ck1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTBkNTU1YTM2YjM3MWE0NjVh
M2NhNDhjNjllZjZiMmZhNzM0OTRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0
Zm9ybUNBTGF5ZXJNYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbGF0
Zm9ybUNBTGF5ZXJNYWNfaAotI2RlZmluZSBQbGF0Zm9ybUNBTGF5ZXJNYWNfaAotCi0jaW5jbHVk
ZSAiUGxhdGZvcm1DQUxheWVyLmgiCi0KLU9CSkNfQ0xBU1MgTlNPYmplY3Q7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1DQUxheWVyTWFjIGZpbmFsIDogcHVibGljIFBs
YXRmb3JtQ0FMYXllciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKLSAgICAK
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIHBhc3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIg
dGhhbiBhIFBsYXRmb3JtTGF5ZXIgYmVjYXVzZSBQbGF0Zm9ybUxheWVyCi0gICAgLy8gaXMgZGVm
aW5lZCBkaWZmZXJlbnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBm
cm9tIGJvdGggbGFuZ3VhZ2VzLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gY3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOwot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExheWVyVHlwZSBsYXllclR5cGVGb3JQbGF0Zm9y
bUxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKLQotICAgIH5QbGF0Zm9ybUNBTGF5ZXJNYWMoKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRPd25lcihQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBvdmVycmlk
ZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlS
ZWN0KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBjb3B5Q29udGVudHNGcm9tTGF5ZXIo
UGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FMYXll
ciogc3VwZXJsYXllcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVG
cm9tU3VwZXJsYXllcigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJsYXllcnMo
Y29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVBbGxTdWJsYXllcnMoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3Vi
bGF5ZXIoUGxhdGZvcm1DQUxheWVyJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGluc2Vy
dFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciYsIHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHJlcGxhY2VTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXImIHJlZmVyZW5jZSwg
UGxhdGZvcm1DQUxheWVyJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBjb25zdCBQbGF0Zm9ybUNB
TGF5ZXJMaXN0KiBjdXN0b21TdWJsYXllcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2N1
c3RvbVN1YmxheWVycy5nZXQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBhZG9wdFN1YmxheWVycyhQ
bGF0Zm9ybUNBTGF5ZXImIHNvdXJjZSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRk
QW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FB
bmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBrZXksIENGVGlt
ZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlv
bkVuZGVkKGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRNYXNrKFBsYXRmb3JtQ0FMYXllciopIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGlz
T3BhcXVlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZShib29s
KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGJvdW5kcygpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QmKSBvdmVy
cmlkZTsKLQotICAgIHZpcnR1YWwgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQz
RCYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm0oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
Jikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SGlkZGVuKGJvb2wpIG92ZXJyaWRl
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldEJhY2tpbmdTdG9yZUF0dGFjaGVkKGJvb2wpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgYm9vbCBiYWNraW5nU3RvcmVBdHRhY2hlZCgpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5RmxpcHBl
ZChib29sKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0RvdWJsZVNpZGVkKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpIG92ZXJy
aWRlOwotCi0gICAgdmlydHVhbCBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBvdmVycmlkZTsKLQotICAg
IHZpcnR1YWwgYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCBDRlR5cGVSZWYgY29udGVudHMoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHMoQ0ZUeXBlUmVmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpIG92ZXJyaWRl
OwotCi0gICAgdmlydHVhbCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJikgb3ZlcnJp
ZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7
Ci0KLSAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYpOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5RmlsdGVyc0Zyb20oY29uc3QgUGxhdGZv
cm1DQUxheWVyJikgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQotICAg
IHZpcnR1YWwgdm9pZCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlKSBvdmVycmlkZTsKLSNlbmRpZgot
Ci0gICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U3BlZWQoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwpIG92ZXJyaWRlOwotCi0gICAgdmlydHVh
bCBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzU2NhbGUoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBmbG9hdCBj
b3JuZXJSYWRpdXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29ybmVy
UmFkaXVzKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFs
aWFzaW5nTWFzayh1bnNpZ25lZCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0Um91bmRl
ZFJlY3Qgc2hhcGVSb3VuZGVkUmVjdCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaGFwZVJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBvdmVycmlkZTsK
LQotICAgIHZpcnR1YWwgUGF0aCBzaGFwZVBhdGgoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2hhcGVQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgV2luZFJ1bGUgc2hhcGVXaW5kUnVsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRTaGFwZVdpbmRSdWxlKFdpbmRSdWxlKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
R3JhcGhpY3NMYXllcjo6Q3VzdG9tQXBwZWFyYW5jZSBjdXN0b21BcHBlYXJhbmNlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9jdXN0b21BcHBlYXJhbmNlOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoR3JhcGhpY3NMYXllcjo6Q3VzdG9tQXBwZWFyYW5jZSkg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0RyYXduKENHQ29u
dGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAg
ICBQbGF0Zm9ybUNBTGF5ZXJNYWMoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93
bmVyKTsKLSAgICBQbGF0Zm9ybUNBTGF5ZXJNYWMoUGxhdGZvcm1MYXllciosIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogb3duZXIpOwotCi0gICAgdm9pZCBjb21tb25Jbml0KCk7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNQbGF0Zm9ybUNBTGF5ZXJNYWMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgICBib29sIHJlcXVpcmVzQ3VzdG9tQXBwZWFyYW5jZVVwZGF0ZU9uQm91bmRz
Q2hhbmdlKCkgY29uc3Q7Ci0KLSAgICBSZXRhaW5QdHI8TlNPYmplY3Q+IG1fZGVsZWdhdGU7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ0FMYXllckxpc3Q+IG1fY3VzdG9tU3VibGF5ZXJz
OwotICAgIEdyYXBoaWNzTGF5ZXI6OkN1c3RvbUFwcGVhcmFuY2UgbV9jdXN0b21BcHBlYXJhbmNl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFJvdW5kZWRSZWN0PiBtX3NoYXBlUm91bmRlZFJl
Y3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfUExBVEZPUk1fQ0FMQVlFUihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJNYWMsIGlzUGxhdGZv
cm1DQUxheWVyTWFjKCkpCi0KLSNlbmRpZiAvLyBQbGF0Zm9ybUNBTGF5ZXJNYWNfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FM
YXllck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0
Zm9ybUNBTGF5ZXJNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNjUyNDRi
MDEzOWRjMGNlYjg1YjRkNGY5OTYzNzM3MThmYTJjZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDExMTAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllck1hYy5oIgotCi0jaW1w
b3J0ICJBbmltYXRpb25VdGlsaXRpZXMuaCIKLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgot
I2ltcG9ydCAiRm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIuaCIKLSNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCi0jaW1wb3J0ICJMZW5ndGhG
dW5jdGlvbnMuaCIKLSNpbXBvcnQgIlBsYXRmb3JtQ0FBbmltYXRpb25NYWMuaCIKLSNpbXBvcnQg
IlBsYXRmb3JtQ0FGaWx0ZXJzLmgiCi0jaW1wb3J0ICJRdWFydHpDb3JlU1BJLmgiCi0jaW1wb3J0
ICJTY3JvbGxiYXJUaGVtZU1hYy5oIgotI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKLSNpbXBvcnQg
IlRpbGVkQmFja2luZy5oIgotI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldl
YkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViQ29yZUNBTGF5
ZXJFeHRyYXMuaCIKLSNpbXBvcnQgIldlYkxheWVyLmgiCi0jaW1wb3J0ICJXZWJHTExheWVyLmgi
Ci0jaW1wb3J0ICJXZWJUaWxlZEJhY2tpbmdMYXllci5oIgotI2ltcG9ydCA8b2JqYy9vYmpjLWF1
dG8uaD4KLSNpbXBvcnQgPG9iamMvcnVudGltZS5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FW
Rm91bmRhdGlvbi5oPgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0
IDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFBM
QVRGT1JNKElPUykKLSNpbXBvcnQgIldBS1dpbmRvdy5oIgotI2ltcG9ydCAiV0tHcmFwaGljcy5o
IgotI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5oIgotI2ltcG9ydCAiV2ViVGlsZWRMYXllci5oIgot
I2Vsc2UKLSNpbXBvcnQgIlRoZW1lTWFjLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShGSUxURVJT
X0xFVkVMXzIpCi1AaW50ZXJmYWNlIENBQmFja2Ryb3BMYXllciA6IENBTGF5ZXIKLUBlbmQKLSNl
bmRpZgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKLVNPRlRf
TElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCi0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVy
TWFjOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllck1hYyhsYXll
clR5cGUsIG93bmVyKSk7Ci19Ci0KLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OmNyZWF0ZSh2b2lkKiBwbGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqIG93bmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1DQUxheWVy
TWFjKHN0YXRpY19jYXN0PFBsYXRmb3JtTGF5ZXIqPihwbGF0Zm9ybUxheWVyKSwgb3duZXIpKTsK
LX0KLQotc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGxhdGZvcm1DQUxheWVyUG9pbnRlciA9IEAi
V0tQbGF0Zm9ybUNBTGF5ZXIiOwotUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcih2b2lkKiBwbGF0Zm9ybUxheWVyKQotewotICAgIGlmICghcGxhdGZvcm1M
YXllcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBQb2ludGVyIHRvIFBsYXRmb3JtQ0FM
YXllciBpcyBrZXB0IGluIGEga2V5IG9mIHRoZSBDQUxheWVyCi0gICAgUGxhdGZvcm1DQUxheWVy
KiBwbGF0Zm9ybUNBTGF5ZXIgPSBuaWw7Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
Ci0gICAgcGxhdGZvcm1DQUxheWVyID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1DQUxheWVyKj4oW1tz
dGF0aWNfY2FzdDxDQUxheWVyKj4ocGxhdGZvcm1MYXllcikgdmFsdWVGb3JLZXk6cGxhdGZvcm1D
QUxheWVyUG9pbnRlcl0gcG9pbnRlclZhbHVlXSk7Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwotICAgIHJldHVybiBwbGF0Zm9ybUNBTGF5ZXI7Ci19Ci0KLXN0YXRpYyBkb3VibGUgbWVk
aWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQotewotICAgIHJldHVybiBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKTsKLX0K
LQotLy8gRGVsZWdhdGUgZm9yIGFuaW1hdGlvbkRpZFN0YXJ0IGNhbGxiYWNrCi1AaW50ZXJmYWNl
IFdlYkFuaW1hdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgewotICAgIFBsYXRmb3JtQ0FMYXllciog
bV9vd25lcjsKLX0KLQotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmltYXRpb24gKilh
bmltOwotLSAodm9pZClzZXRPd25lcjooUGxhdGZvcm1DQUxheWVyKilvd25lcjsKLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV2ViQW5pbWF0aW9uRGVsZWdhdGUKLQotLSAodm9pZClhbmltYXRp
b25EaWRTdGFydDooQ0FBbmltYXRpb24gKilhbmltYXRpb24KLXsKLSNpZiBQTEFURk9STShJT1Mp
Ci0gICAgV2ViVGhyZWFkTG9jaygpOwotI2VuZGlmCi0gICAgaWYgKCFtX293bmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDRlRpbWVJbnRlcnZhbCBzdGFydFRpbWU7Ci0gICAgaWYgKGhhc0V4
cGxpY2l0QmVnaW5UaW1lKGFuaW1hdGlvbikpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3
aGF0IHRpbWUgQ0EgdXNlZCB0byBjb21taXQgdGhlIGFuaW1hdGlvbiwgc28ganVzdCB1c2UgdGhl
IGN1cnJlbnQgdGltZQotICAgICAgICAvLyAoZXZlbiB0aG91Z2ggdGhpcyB3aWxsIGJlIHNsaWdo
dGx5IG9mZikuCi0gICAgICAgIHN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0FD
dXJyZW50TWVkaWFUaW1lKCkpOwotICAgIH0gZWxzZQotICAgICAgICBzdGFydFRpbWUgPSBtZWRp
YVRpbWVUb0N1cnJlbnRUaW1lKFthbmltYXRpb24gYmVnaW5UaW1lXSk7Ci0KLSAgICBDQUxheWVy
ICpsYXllciA9IG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKTsKLQotICAgIFN0cmluZyBhbmltYXRp
b25LZXk7Ci0gICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25LZXlzXSkg
ewotICAgICAgICBpZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1hdGlvbikg
ewotICAgICAgICAgICAgYW5pbWF0aW9uS2V5ID0ga2V5OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fb3duZXItPmFuaW1hdGlvblN0YXJ0ZWQoYW5pbWF0aW9uS2V5LCBzdGFydFRpbWUpOwot
fQotCi0tICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5pbWF0aW9uIGZp
bmlzaGVkOihCT09MKWZpbmlzaGVkCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIFdlYlRocmVh
ZExvY2soKTsKLSNlbmRpZgotICAgIFVOVVNFRF9QQVJBTShmaW5pc2hlZCk7Ci0KLSAgICBpZiAo
IW1fb3duZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDQUxheWVyICpsYXllciA9IG1f
b3duZXItPnBsYXRmb3JtTGF5ZXIoKTsKLQotICAgIFN0cmluZyBhbmltYXRpb25LZXk7Ci0gICAg
Zm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25LZXlzXSkgewotICAgICAgICBp
ZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1hdGlvbikgewotICAgICAgICAg
ICAgYW5pbWF0aW9uS2V5ID0ga2V5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkpCi0gICAgICAgIG1fb3duZXIt
PmFuaW1hdGlvbkVuZGVkKGFuaW1hdGlvbktleSk7Ci19Ci0KLS0gKHZvaWQpc2V0T3duZXI6KFBs
YXRmb3JtQ0FMYXllciopb3duZXIKLXsKLSAgICBtX293bmVyID0gb3duZXI7Ci19Ci0KLUBlbmQK
LQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldE93bmVyKFBsYXRmb3JtQ0FMYXllckNsaWVu
dCogb3duZXIpCi17Ci0gICAgUGxhdGZvcm1DQUxheWVyOjpzZXRPd25lcihvd25lcik7Ci0gICAg
Ci0gICAgLy8gQ2hhbmdlIHRoZSBkZWxlZ2F0ZSdzIG93bmVyIGlmIG5lZWRlZAotICAgIGlmICht
X2RlbGVnYXRlKQotICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViQW5pbWF0aW9uRGVsZWdhdGUqPiht
X2RlbGVnYXRlLmdldCgpKSBzZXRPd25lcjp0aGlzXTsgICAgICAgIAotfQotCi1zdGF0aWMgTlNT
dHJpbmcgKnRvQ0FGaWx0ZXJUeXBlKFBsYXRmb3JtQ0FMYXllcjo6RmlsdGVyVHlwZSB0eXBlKQot
ewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMaW5lYXI6
IHJldHVybiBrQ0FGaWx0ZXJMaW5lYXI7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6Ok5lYXJl
c3Q6IHJldHVybiBrQ0FGaWx0ZXJOZWFyZXN0OwotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpU
cmlsaW5lYXI6IHJldHVybiBrQ0FGaWx0ZXJUcmlsaW5lYXI7Ci0gICAgZGVmYXVsdDogcmV0dXJu
IDA7Ci0gICAgfQotfQotCi1QbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OmxheWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIpCi17
Ci0gICAgaWYgKFtsYXllciBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSB8
fCBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpvYmpjX2dldENsYXNzKCJXZWJWaWRlb0NvbnRhaW5lckxh
eWVyIildKQotICAgICAgICByZXR1cm4gTGF5ZXJUeXBlQVZQbGF5ZXJMYXllcjsKLQotICAgIGlm
IChbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbV2ViR0xMYXllciBjbGFzc11dKQotICAgICAgICByZXR1
cm4gTGF5ZXJUeXBlV2ViR0xMYXllcjsKLQotICAgIHJldHVybiBMYXllclR5cGVDdXN0b207Ci19
Ci0KLVBsYXRmb3JtQ0FMYXllck1hYzo6UGxhdGZvcm1DQUxheWVyTWFjKExheWVyVHlwZSBsYXll
clR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCi0gICAgOiBQbGF0Zm9ybUNBTGF5
ZXIobGF5ZXJUeXBlLCBvd25lcikKLSAgICAsIG1fY3VzdG9tQXBwZWFyYW5jZShHcmFwaGljc0xh
eWVyOjpOb0N1c3RvbUFwcGVhcmFuY2UpCi17Ci0gICAgQ2xhc3MgbGF5ZXJDbGFzcyA9IE5pbDsK
LSAgICBzd2l0Y2ggKGxheWVyVHlwZSkgewotICAgIGNhc2UgTGF5ZXJUeXBlTGF5ZXI6Ci0gICAg
Y2FzZSBMYXllclR5cGVSb290TGF5ZXI6Ci0gICAgICAgIGxheWVyQ2xhc3MgPSBbQ0FMYXllciBj
bGFzc107Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUeXBlU2Nyb2xsaW5nTGF5ZXI6
Ci0gICAgICAgIC8vIFNjcm9sbGluZyBsYXllcnMgb25seSBoYXZlIHNwZWNpYWwgYmVoYXZpb3Ig
d2l0aCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuCi0gICAgICAgIC8vIGZhbGx0aHJvdWdoCi0gICAg
Y2FzZSBMYXllclR5cGVXZWJMYXllcjoKLSAgICAgICAgbGF5ZXJDbGFzcyA9IFtXZWJMYXllciBj
bGFzc107Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUeXBlU2ltcGxlTGF5ZXI6Ci0g
ICAgY2FzZSBMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6Ci0gICAgICAgIGxheWVyQ2xh
c3MgPSBbV2ViU2ltcGxlTGF5ZXIgY2xhc3NdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExh
eWVyVHlwZVRyYW5zZm9ybUxheWVyOgotICAgICAgICBsYXllckNsYXNzID0gW0NBVHJhbnNmb3Jt
TGF5ZXIgY2xhc3NdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExheWVyVHlwZUJhY2tkcm9w
TGF5ZXI6Ci0gICAgY2FzZSBMYXllclR5cGVMaWdodFN5c3RlbUJhY2tkcm9wTGF5ZXI6Ci0gICAg
Y2FzZSBMYXllclR5cGVEYXJrU3lzdGVtQmFja2Ryb3BMYXllcjoKLSNpZiBFTkFCTEUoRklMVEVS
U19MRVZFTF8yKQotICAgICAgICBsYXllckNsYXNzID0gW0NBQmFja2Ryb3BMYXllciBjbGFzc107
Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgbGF5ZXJDbGFz
cyA9IFtDQUxheWVyIGNsYXNzXTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIExh
eWVyVHlwZVdlYlRpbGVkTGF5ZXI6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIExheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOgotICAgIGNh
c2UgTGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVyOgotICAgICAgICBsYXllckNsYXNzID0g
W1dlYlRpbGVkQmFja2luZ0xheWVyIGNsYXNzXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBM
YXllclR5cGVBVlBsYXllckxheWVyOgotICAgICAgICBsYXllckNsYXNzID0gZ2V0QVZQbGF5ZXJM
YXllckNsYXNzKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUeXBlV2ViR0xMYXll
cjoKLSAgICAgICAgLy8gV2UgZG9uJ3QgY3JlYXRlIFBsYXRmb3JtQ0FMYXllck1hY3Mgd3JhcHBl
ZCBhcm91bmQgV2ViR0xMYXllcnMuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIExheWVyVHlwZVNoYXBlTGF5ZXI6Ci0gICAgICAgIGxheWVy
Q2xhc3MgPSBbQ0FTaGFwZUxheWVyIGNsYXNzXTsKLSAgICAgICAgLy8gZmlsbENvbG9yIGRlZmF1
bHRzIHRvIG9wYXF1ZSBibGFjay4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMYXllclR5cGVD
dXN0b206Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChsYXllckNsYXNzKQotICAg
ICAgICBtX2xheWVyID0gYWRvcHROUyhbKENBTGF5ZXIgKilbbGF5ZXJDbGFzcyBhbGxvY10gaW5p
dF0pOwotCi0gICAgY29tbW9uSW5pdCgpOwotfQotCi1QbGF0Zm9ybUNBTGF5ZXJNYWM6OlBsYXRm
b3JtQ0FMYXllck1hYyhQbGF0Zm9ybUxheWVyKiBsYXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikKLSAgICA6IFBsYXRmb3JtQ0FMYXllcihsYXllclR5cGVGb3JQbGF0Zm9ybUxheWVy
KGxheWVyKSwgb3duZXIpCi0gICAgLCBtX2N1c3RvbUFwcGVhcmFuY2UoR3JhcGhpY3NMYXllcjo6
Tm9DdXN0b21BcHBlYXJhbmNlKQotewotICAgIG1fbGF5ZXIgPSBsYXllcjsKLSAgICBjb21tb25J
bml0KCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpjb21tb25Jbml0KCkKLXsKLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAvLyBTYXZlIGEgcG9pbnRlciB0byAn
dGhpcycgaW4gdGhlIENBTGF5ZXIKLSAgICBbbV9sYXllciBzZXRWYWx1ZTpbTlNWYWx1ZSB2YWx1
ZVdpdGhQb2ludGVyOnRoaXNdIGZvcktleTpwbGF0Zm9ybUNBTGF5ZXJQb2ludGVyXTsKLSAgICAK
LSAgICAvLyBDbGVhciBhbGwgdGhlIGltcGxpY2l0IGFuaW1hdGlvbnMgb24gdGhlIENBTGF5ZXIK
LSAgICBpZiAobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlQVZQbGF5ZXJMYXllciB8fCBtX2xheWVy
VHlwZSA9PSBMYXllclR5cGVXZWJHTExheWVyIHx8IG1fbGF5ZXJUeXBlID09IExheWVyVHlwZVNj
cm9sbGluZ0xheWVyIHx8IG1fbGF5ZXJUeXBlID09IExheWVyVHlwZUN1c3RvbSkKLSAgICAgICAg
W21fbGF5ZXIgd2ViX2Rpc2FibGVBbGxBY3Rpb25zXTsKLSAgICBlbHNlCi0gICAgICAgIFttX2xh
eWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVk
XV07Ci0KLSAgICAvLyBTbyB0aGF0IHRoZSBzY3JvbGxpbmcgdGhyZWFkJ3MgcGVyZm9ybWFuY2Ug
bG9nZ2luZyBjb2RlIGNhbiBmaW5kIGFsbCB0aGUgdGlsZXMsIG1hcmsgdGhpcyBhcyBiZWluZyBh
IHRpbGUuCi0gICAgaWYgKG1fbGF5ZXJUeXBlID09IExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVM
YXllcikKLSAgICAgICAgW21fbGF5ZXIgc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJpc1RpbGUiXTsK
LQotICAgIGlmICh1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkgewotICAgICAgICBXZWJUaWxlZEJh
Y2tpbmdMYXllciogdGlsZWRCYWNraW5nTGF5ZXIgPSBzdGF0aWNfY2FzdDxXZWJUaWxlZEJhY2tp
bmdMYXllcio+KG1fbGF5ZXIuZ2V0KCkpOwotICAgICAgICBUaWxlQ29udHJvbGxlciogdGlsZUNv
bnRyb2xsZXIgPSBbdGlsZWRCYWNraW5nTGF5ZXIgY3JlYXRlVGlsZUNvbnRyb2xsZXI6dGhpc107
Ci0KLSAgICAgICAgbV9jdXN0b21TdWJsYXllcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3Jt
Q0FMYXllckxpc3Q+KHRpbGVDb250cm9sbGVyLT5jb250YWluZXJMYXllcnMoKSk7Ci0gICAgfQot
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi1QYXNzUmVmUHRyPFBsYXRmb3Jt
Q0FMYXllcj4gUGxhdGZvcm1DQUxheWVyTWFjOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
IG93bmVyKSBjb25zdAotewotICAgIExheWVyVHlwZSB0eXBlOwotICAgIHN3aXRjaCAobGF5ZXJU
eXBlKCkpIHsKLSAgICBjYXNlIExheWVyVHlwZVRyYW5zZm9ybUxheWVyOgotICAgICAgICB0eXBl
ID0gTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5
ZXJUeXBlQVZQbGF5ZXJMYXllcjoKLSAgICAgICAgdHlwZSA9IExheWVyVHlwZUFWUGxheWVyTGF5
ZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUeXBlU2hhcGVMYXllcjoKLSAgICAg
ICAgdHlwZSA9IExheWVyVHlwZVNoYXBlTGF5ZXI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TGF5ZXJUeXBlTGF5ZXI6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgdHlwZSA9IExheWVyVHlwZUxh
eWVyOwotICAgICAgICBicmVhazsKLSAgICB9OwotICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+
IG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUodHlwZSwgb3duZXIpOwotICAg
IAotICAgIG5ld0xheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKLSAgICBuZXdMYXllci0+
c2V0Qm91bmRzKGJvdW5kcygpKTsKLSAgICBuZXdMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9y
UG9pbnQoKSk7Ci0gICAgbmV3TGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0oKSk7Ci0gICAg
bmV3TGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKHN1YmxheWVyVHJhbnNmb3JtKCkpOwotICAg
IG5ld0xheWVyLT5zZXRDb250ZW50cyhjb250ZW50cygpKTsKLSAgICBuZXdMYXllci0+c2V0TWFz
a3NUb0JvdW5kcyhtYXNrc1RvQm91bmRzKCkpOwotICAgIG5ld0xheWVyLT5zZXREb3VibGVTaWRl
ZChpc0RvdWJsZVNpZGVkKCkpOwotICAgIG5ld0xheWVyLT5zZXRPcGFxdWUoaXNPcGFxdWUoKSk7
Ci0gICAgbmV3TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IoKSk7Ci0g
ICAgbmV3TGF5ZXItPnNldENvbnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSgpKTsKLSAgICBuZXdM
YXllci0+c2V0Q29ybmVyUmFkaXVzKGNvcm5lclJhZGl1cygpKTsKLSAgICBuZXdMYXllci0+Y29w
eUZpbHRlcnNGcm9tKCp0aGlzKTsKLSAgICBuZXdMYXllci0+dXBkYXRlQ3VzdG9tQXBwZWFyYW5j
ZShjdXN0b21BcHBlYXJhbmNlKCkpOwotCi0gICAgaWYgKHR5cGUgPT0gTGF5ZXJUeXBlQVZQbGF5
ZXJMYXllcikgewotICAgICAgICBBU1NFUlQoW25ld0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgaXNL
aW5kT2ZDbGFzczpnZXRBVlBsYXllckxheWVyQ2xhc3MoKV0pOwotICAgICAgICBBU1NFUlQoW3Bs
YXRmb3JtTGF5ZXIoKSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7Ci0K
LSAgICAgICAgQVZQbGF5ZXJMYXllciogZGVzdGluYXRpb25QbGF5ZXJMYXllciA9IHN0YXRpY19j
YXN0PEFWUGxheWVyTGF5ZXIgKj4obmV3TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgICAg
IEFWUGxheWVyTGF5ZXIqIHNvdXJjZVBsYXllckxheWVyID0gc3RhdGljX2Nhc3Q8QVZQbGF5ZXJM
YXllciAqPihwbGF0Zm9ybUxheWVyKCkpOwotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICAgICAgW2Rlc3RpbmF0aW9uUGxheWVyTGF5
ZXIgc2V0UGxheWVyOltzb3VyY2VQbGF5ZXJMYXllciBwbGF5ZXJdXTsKLSAgICAgICAgfSk7Ci0g
ICAgfQotICAgIAotICAgIGlmICh0eXBlID09IExheWVyVHlwZVNoYXBlTGF5ZXIpCi0gICAgICAg
IG5ld0xheWVyLT5zZXRTaGFwZVJvdW5kZWRSZWN0KHNoYXBlUm91bmRlZFJlY3QoKSk7Ci0KLSAg
ICByZXR1cm4gbmV3TGF5ZXI7Ci19Ci0KLVBsYXRmb3JtQ0FMYXllck1hYzo6flBsYXRmb3JtQ0FM
YXllck1hYygpCi17Ci0gICAgW21fbGF5ZXIgc2V0VmFsdWU6bmlsIGZvcktleTpwbGF0Zm9ybUNB
TGF5ZXJQb2ludGVyXTsKLSAgICAKLSAgICAvLyBSZW1vdmUgdGhlIG93bmVyIHBvaW50ZXIgZnJv
bSB0aGUgZGVsZWdhdGUgaW4gY2FzZSB0aGVyZSBpcyBhIHBlbmRpbmcgYW5pbWF0aW9uU3RhcnRl
ZCBldmVudC4KLSAgICBbc3RhdGljX2Nhc3Q8V2ViQW5pbWF0aW9uRGVsZWdhdGUqPihtX2RlbGVn
YXRlLmdldCgpKSBzZXRPd25lcjpuaWxdOwotCi0gICAgaWYgKHVzZXNUaWxlZEJhY2tpbmdMYXll
cigpKQotICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4obV9sYXll
ci5nZXQoKSkgaW52YWxpZGF0ZV07Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjphbmlt
YXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5LCBDRlRpbWVJbnRlcnZhbCBi
ZWdpblRpbWUpCi17Ci0gICAgaWYgKG1fb3duZXIpCi0gICAgICAgIG1fb3duZXItPnBsYXRmb3Jt
Q0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoYW5pbWF0aW9uS2V5LCBiZWdpblRpbWUpOwotfQotCi12
b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6YW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25LZXkpCi17Ci0gICAgaWYgKG1fb3duZXIpCi0gICAgICAgIG1fb3duZXItPnBsYXRmb3Jt
Q0FMYXllckFuaW1hdGlvbkVuZGVkKGFuaW1hdGlvbktleSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1D
QUxheWVyTWFjOjpzZXROZWVkc0Rpc3BsYXkoKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwotICAgIFttX2xheWVyIHNldE5lZWRzRGlzcGxheV07Ci0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQotewotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwotICAgIFttX2xheWVyIHNldE5lZWRzRGlzcGxheUluUmVjdDpkaXJ0
eVJlY3RdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OmNvcHlDb250ZW50c0Zyb21MYXllcihQbGF0Zm9ybUNBTGF5ZXIqIGxheWVy
KQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIENBTGF5ZXIqIGNhTGF5
ZXIgPSBsYXllci0+bV9sYXllci5nZXQoKTsKLSAgICBpZiAoW21fbGF5ZXIgY29udGVudHNdICE9
IFtjYUxheWVyIGNvbnRlbnRzXSkKLSAgICAgICAgW21fbGF5ZXIgc2V0Q29udGVudHM6W2NhTGF5
ZXIgY29udGVudHNdXTsKLSAgICBlbHNlCi0gICAgICAgIFttX2xheWVyIHNldENvbnRlbnRzQ2hh
bmdlZF07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi1QbGF0Zm9ybUNBTGF5
ZXIqIFBsYXRmb3JtQ0FMYXllck1hYzo6c3VwZXJsYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHBsYXRmb3JtQ0FMYXllcihbbV9sYXllciBzdXBlcmxheWVyXSk7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1DQUxheWVyTWFjOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCi17Ci0gICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCi0gICAgW21fbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6
OnNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0JiBsaXN0KQotewotICAgIC8v
IFNob3J0IGNpcmN1aXRpbmcgaGVyZSBhdm9pZHMgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGFycmF5
IGJlbG93LgotICAgIGlmIChsaXN0LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIHJlbW92ZUFsbFN1
YmxheWVycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCi0gICAgTlNNdXRhYmxlQXJyYXkqIHN1YmxheWVycyA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXpl
KCk7ICsraSkKLSAgICAgICAgW3N1YmxheWVycyBhZGRPYmplY3Q6bGlzdFtpXS0+bV9sYXllci5n
ZXQoKV07Ci0KLSAgICBbbV9sYXllciBzZXRTdWJsYXllcnM6c3VibGF5ZXJzXTsKLSAgICBbc3Vi
bGF5ZXJzIHJlbGVhc2VdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnJlbW92ZUFsbFN1YmxheWVycygpCi17Ci0gICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW21fbGF5ZXIgc2V0U3VibGF5ZXJzOm5pbF07Ci0g
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1h
Yzo6YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyJiBsYXllcikKLXsKLSAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBBU1NFUlQobV9sYXllciAhPSBsYXllci5tX2xheWVy
KTsKLSAgICBbbV9sYXllciBhZGRTdWJsYXllcjpsYXllci5tX2xheWVyLmdldCgpXTsKLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpp
bnNlcnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXImIGxheWVyLCBzaXplX3QgaW5kZXgpCi17Ci0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgQVNTRVJUKG1fbGF5ZXIgIT0gbGF5
ZXIubV9sYXllcik7Ci0gICAgW21fbGF5ZXIgaW5zZXJ0U3VibGF5ZXI6bGF5ZXIubV9sYXllci5n
ZXQoKSBhdEluZGV4OmluZGV4XTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0K
LXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpyZXBsYWNlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVy
JiByZWZlcmVuY2UsIFBsYXRmb3JtQ0FMYXllciYgbGF5ZXIpCi17Ci0gICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCi0gICAgQVNTRVJUKG1fbGF5ZXIgIT0gbGF5ZXIubV9sYXllcik7Ci0g
ICAgW21fbGF5ZXIgcmVwbGFjZVN1YmxheWVyOnJlZmVyZW5jZS5tX2xheWVyLmdldCgpIHdpdGg6
bGF5ZXIubV9sYXllci5nZXQoKV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQot
Ci12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6YWRvcHRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVy
JiBzb3VyY2UpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW21fbGF5
ZXIgc2V0U3VibGF5ZXJzOltzb3VyY2UubV9sYXllci5nZXQoKSBzdWJsYXllcnNdXTsKLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjph
ZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24m
IGFuaW1hdGlvbikKLXsKLSAgICAvLyBBZGQgdGhlIGRlbGVnYXRlCi0gICAgaWYgKCFtX2RlbGVn
YXRlKSB7Ci0gICAgICAgIFdlYkFuaW1hdGlvbkRlbGVnYXRlKiB3ZWJBbmltYXRpb25EZWxlZ2F0
ZSA9IFtbV2ViQW5pbWF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdOwotICAgICAgICBtX2RlbGVn
YXRlID0gYWRvcHROUyh3ZWJBbmltYXRpb25EZWxlZ2F0ZSk7Ci0gICAgICAgIFt3ZWJBbmltYXRp
b25EZWxlZ2F0ZSBzZXRPd25lcjp0aGlzXTsKLSAgICB9Ci0gICAgCi0gICAgQ0FQcm9wZXJ0eUFu
aW1hdGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0
aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbk1hYz4oYW5pbWF0aW9uKS5wbGF0Zm9y
bUFuaW1hdGlvbigpKTsKLSAgICBpZiAoIVtwcm9wZXJ0eUFuaW1hdGlvbiBkZWxlZ2F0ZV0pCi0g
ICAgICAgIFtwcm9wZXJ0eUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9k
ZWxlZ2F0ZS5nZXQoKSldOwotICAgICAKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICBbbV9sYXllciBhZGRBbmltYXRpb246cHJvcGVydHlBbmltYXRpb24gZm9yS2V5OmtleV07
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXll
ck1hYzo6cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFttX2xheWVyIHJlbW92ZUFuaW1hdGlvbkZv
cktleTprZXldOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBDQVByb3BlcnR5QW5pbWF0aW9uKiBwcm9wZXJ0
eUFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24qPihbbV9sYXllciBh
bmltYXRpb25Gb3JLZXk6a2V5XSk7Ci0gICAgaWYgKCFwcm9wZXJ0eUFuaW1hdGlvbikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb25NYWM6OmNyZWF0ZShw
cm9wZXJ0eUFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRNYXNr
KFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCi0gICAgW21fbGF5ZXIgc2V0TWFzazpsYXllciA/IGxheWVyLT5wbGF0Zm9ybUxheWVyKCkg
OiBuaWxdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotYm9vbCBQbGF0Zm9y
bUNBTGF5ZXJNYWM6OmlzT3BhcXVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21fbGF5ZXIgaXNP
cGFxdWVdOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0T3BhcXVlKGJvb2wgdmFs
dWUpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW21fbGF5ZXIgc2V0
T3BhcXVlOnZhbHVlXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLUZsb2F0
UmVjdCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFtt
X2xheWVyIGJvdW5kc107Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRCb3VuZHMo
Y29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKLSAgICBbbV9sYXllciBzZXRCb3VuZHM6dmFsdWVdOwotICAgIAotICAgIGlmIChyZXF1aXJl
c0N1c3RvbUFwcGVhcmFuY2VVcGRhdGVPbkJvdW5kc0NoYW5nZSgpKQotICAgICAgICB1cGRhdGVD
dXN0b21BcHBlYXJhbmNlKG1fY3VzdG9tQXBwZWFyYW5jZSk7Ci0KLSAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCi19Ci0KLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnBvc2l0
aW9uKCkgY29uc3QKLXsKLSAgICBDR1BvaW50IHBvaW50ID0gW21fbGF5ZXIgcG9zaXRpb25dOwot
ICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgW21fbGF5ZXIgelBvc2l0
aW9uXSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50M0QmIHZhbHVlKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
ICAgIFttX2xheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgp
KV07Ci0gICAgW21fbGF5ZXIgc2V0WlBvc2l0aW9uOnZhbHVlLnooKV07Ci0gICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwotfQotCi1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyTWFjOjph
bmNob3JQb2ludCgpIGNvbnN0Ci17Ci0gICAgQ0dQb2ludCBwb2ludCA9IFttX2xheWVyIGFuY2hv
clBvaW50XTsKLSAgICBmbG9hdCB6ID0gMDsKLSAgICB6ID0gW21fbGF5ZXIgYW5jaG9yUG9pbnRa
XTsKLSAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50LngsIHBvaW50LnksIHopOwotfQotCi12
b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNE
JiB2YWx1ZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbbV9sYXll
ciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSldOwotICAg
IFttX2xheWVyIHNldEFuY2hvclBvaW50Wjp2YWx1ZS56KCldOwotICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxheWVyTWFj
Ojp0cmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBbbV9sYXllciB0cmFuc2Zvcm1dOwot
fQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB2YWx1ZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICBbbV9sYXllciBzZXRUcmFuc2Zvcm06dmFsdWVdOwotICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxheWVyTWFjOjpz
dWJsYXllclRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFttX2xheWVyIHN1YmxheWVy
VHJhbnNmb3JtXTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldFN1YmxheWVyVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKLXsKLSAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbbV9sYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTp2
YWx1ZV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi12b2lkIFBsYXRmb3Jt
Q0FMYXllck1hYzo6c2V0SGlkZGVuKGJvb2wgdmFsdWUpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCi0gICAgW21fbGF5ZXIgc2V0SGlkZGVuOnZhbHVlXTsKLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRCYWNr
aW5nU3RvcmVBdHRhY2hlZChib29sKQotewotICAgIC8vIFdlIGNvdWxkIHRocm93IGF3YXkgYmFj
a2luZyBzdG9yZSBoZXJlIHdpdGggc2V0Q29udGVudHM6bmlsLgotfQotCi1ib29sIFBsYXRmb3Jt
Q0FMYXllck1hYzo6YmFja2luZ1N0b3JlQXR0YWNoZWQoKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0R2VvbWV0cnlGbGlwcGVkKGJv
b2wgdmFsdWUpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW21fbGF5
ZXIgc2V0R2VvbWV0cnlGbGlwcGVkOnZhbHVlXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCi19Ci0KLWJvb2wgUGxhdGZvcm1DQUxheWVyTWFjOjppc0RvdWJsZVNpZGVkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gW21fbGF5ZXIgaXNEb3VibGVTaWRlZF07Ci19Ci0KLXZvaWQgUGxhdGZv
cm1DQUxheWVyTWFjOjpzZXREb3VibGVTaWRlZChib29sIHZhbHVlKQotewotICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFttX2xheWVyIHNldERvdWJsZVNpZGVkOnZhbHVlXTsK
LSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLWJvb2wgUGxhdGZvcm1DQUxheWVy
TWFjOjptYXNrc1RvQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21fbGF5ZXIgbWFza3NU
b0JvdW5kc107Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRNYXNrc1RvQm91bmRz
KGJvb2wgdmFsdWUpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW21f
bGF5ZXIgc2V0TWFza3NUb0JvdW5kczp2YWx1ZV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwotfQotCi1ib29sIFBsYXRmb3JtQ0FMYXllck1hYzo6YWNjZWxlcmF0ZXNEcmF3aW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gW21fbGF5ZXIgYWNjZWxlcmF0ZXNEcmF3aW5nXTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGFjY2Vs
ZXJhdGVzRHJhd2luZykKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBb
bV9sYXllciBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6YWNjZWxlcmF0ZXNEcmF3aW5nXTsKLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLUNGVHlwZVJlZiBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmNvbnRlbnRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21fbGF5ZXIgY29udGVudHNdOwot
fQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHMoQ0ZUeXBlUmVmIHZhbHVl
KQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFttX2xheWVyIHNldENv
bnRlbnRzOnN0YXRpY19jYXN0PGlkPihjb25zdF9jYXN0PHZvaWQqPih2YWx1ZSkpXTsKLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpz
ZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKLXsKLSAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKLSAgICBbbV9sYXllciBzZXRDb250ZW50c1JlY3Q6dmFsdWVdOwot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OnNldE1pbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlIHZhbHVlKQotewotICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFttX2xheWVyIHNldE1pbmlmaWNhdGlvbkZpbHRl
cjp0b0NBRmlsdGVyVHlwZSh2YWx1ZSldOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldE1hZ25pZmljYXRpb25GaWx0ZXIoRmls
dGVyVHlwZSB2YWx1ZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBb
bV9sYXllciBzZXRNYWduaWZpY2F0aW9uRmlsdGVyOnRvQ0FGaWx0ZXJUeXBlKHZhbHVlKV07Ci0g
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi1Db2xvciBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFttX2xheWVyIGJhY2tn
cm91bmRDb2xvcl07Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQotewotICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsK
LSAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVu
dHNbMl0sIGNvbXBvbmVudHNbM10pOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
Y29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAg
IFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShjb2xv
clNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKLSAgICBbbV9sYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y29sb3IuZ2V0KCldOwotICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6
OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwotICAgIFttX2xheWVyIHNldEJvcmRlcldpZHRoOnZhbHVlXTsKLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRCb3Jk
ZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkg
ewotICAgICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07Ci0gICAgICAgIHZhbHVlLmdldFJHQkEo
Y29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1sz
XSk7Ci0KLSAgICAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFk
b3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgICAgICBSZXRhaW5QdHI8
Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZS5nZXQo
KSwgY29tcG9uZW50cykpOwotCi0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
ICAgICAgICBbbV9sYXllciBzZXRCb3JkZXJDb2xvcjpjb2xvci5nZXQoKV07Ci0gICAgICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICB9IGVsc2UgewotICAgICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgW21fbGF5ZXIgc2V0Qm9yZGVyQ29sb3I6bmlsXTsK
LSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIH0KLX0KLQotZmxvYXQgUGxh
dGZvcm1DQUxheWVyTWFjOjpvcGFjaXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21fbGF5ZXIg
b3BhY2l0eV07Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRPcGFjaXR5KGZsb2F0
IHZhbHVlKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFttX2xheWVy
IHNldE9wYWNpdHk6dmFsdWVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycykKLXsKLSAgICBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIo
cGxhdGZvcm1MYXllcigpLCBmaWx0ZXJzKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6
OmNvcHlGaWx0ZXJzRnJvbShjb25zdCBQbGF0Zm9ybUNBTGF5ZXImIHNvdXJjZUxheWVyKQotewot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIFttX2xheWVyIHNldEZpbHRlcnM6
W3NvdXJjZUxheWVyLnBsYXRmb3JtTGF5ZXIoKSBmaWx0ZXJzXV07Ci0gICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwotfQotCi1ib29sIFBsYXRmb3JtQ0FMYXllck1hYzo6ZmlsdGVyc0NhbkJl
Q29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIC8vIFJl
dHVybiBmYWxzZSBpZiB0aGVyZSBhcmUgbm8gZmlsdGVycyB0byBhdm9pZCBuZWVkbGVzcyB3b3Jr
Ci0gICAgaWYgKCFmaWx0ZXJzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVycy5hdChp
KTsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24tPnR5cGUoKSkgewotICAgICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgY2FuIG9ubHkgaGFuZGxlIGRy
b3Atc2hhZG93IGlzIGlmIGl0J3MgbGFzdCBpbiB0aGUgbGlzdAotICAgICAgICAgICAgICAgIGlm
IChpIDwgKGZpbHRlcnMuc2l6ZSgpIC0gMSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCi12b2lkIFBsYXRmb3JtQ0FMYXllck1h
Yzo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgUGxhdGZvcm1DQUZp
bHRlcnM6OnNldEJsZW5kaW5nRmlsdGVyc09uTGF5ZXIocGxhdGZvcm1MYXllcigpLCBibGVuZE1v
ZGUpOwotfQotI2VuZGlmCi0KLXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXROYW1lKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAg
W21fbGF5ZXIgc2V0TmFtZTp2YWx1ZV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
fQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0U3BlZWQoZmxvYXQgdmFsdWUpCi17Ci0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW21fbGF5ZXIgc2V0U3BlZWQ6dmFs
dWVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXJNYWM6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCi17Ci0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgW21fbGF5ZXIgc2V0VGltZU9mZnNldDp2YWx1
ZV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi1mbG9hdCBQbGF0Zm9ybUNB
TGF5ZXJNYWM6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAotewotICAgIHJldHVybiBbbV9sYXllciBj
b250ZW50c1NjYWxlXTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnNldENvbnRlbnRz
U2NhbGUoZmxvYXQgdmFsdWUpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0g
ICAgW21fbGF5ZXIgc2V0Q29udGVudHNTY2FsZTp2YWx1ZV07Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIFttX2xheWVyIHNldFJhc3Rlcml6YXRpb25TY2FsZTp2YWx1ZV07Ci0KLSAgICBpZiAobV9s
YXllclR5cGUgPT0gTGF5ZXJUeXBlV2ViVGlsZWRMYXllcikgewotICAgICAgICAvLyBUaGlzIHdp
bGwgaW52YWxpZGF0ZSBhbGwgdGhlIHRpbGVzIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHN0YWxl
IHRpbGVzIHdpdGggdGhlIHdyb25nIHNjYWxlIGluIHRoZSB3cm9uZyBwbGFjZSwKLSAgICAgICAg
Ly8gc2VlIDxyZGFyOi8vcHJvYmxlbS85NDM0NzY1PiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAg
ICAgICAgc3RhdGljIE5TRGljdGlvbmFyeSAqb3B0aW9uc0RpY3Rpb25hcnkgPSBbW05TRGljdGlv
bmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czpbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6WUVTXSwga0NBVGlsZWRMYXllclJlbW92ZUltbWVkaWF0ZWx5LCBuaWxdOwotICAgICAgICBb
KENBVGlsZWRMYXllciAqKW1fbGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OlttX2xh
eWVyIGJvdW5kc10gbGV2ZWxPZkRldGFpbDowIG9wdGlvbnM6b3B0aW9uc0RpY3Rpb25hcnldOwot
ICAgIH0KLSNlbmRpZgotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQotZmxvYXQg
UGxhdGZvcm1DQUxheWVyTWFjOjpjb3JuZXJSYWRpdXMoKSBjb25zdAotewotICAgIHJldHVybiBb
bV9sYXllciBjb3JuZXJSYWRpdXNdOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0
Q29ybmVyUmFkaXVzKGZsb2F0IHZhbHVlKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwotICAgIFttX2xheWVyIHNldENvcm5lclJhZGl1czp2YWx1ZV07Ci0gICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFu
dGlhbGlhc2luZ01hc2sodW5zaWduZWQgbWFzaykKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKLSAgICBbbV9sYXllciBzZXRFZGdlQW50aWFsaWFzaW5nTWFzazptYXNrXTsKLSAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLUZsb2F0Um91bmRlZFJlY3QgUGxhdGZv
cm1DQUxheWVyTWFjOjpzaGFwZVJvdW5kZWRSZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9s
YXllclR5cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7Ci0gICAgaWYgKG1fc2hhcGVSb3VuZGVk
UmVjdCkKLSAgICAgICAgcmV0dXJuICptX3NoYXBlUm91bmRlZFJlY3Q7Ci0KLSAgICByZXR1cm4g
RmxvYXRSb3VuZGVkUmVjdCgpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0U2hh
cGVSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCkKLXsKLSAg
ICBBU1NFUlQobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7Ci0gICAgbV9zaGFw
ZVJvdW5kZWRSZWN0ID0gc3RkOjptYWtlX3VuaXF1ZTxGbG9hdFJvdW5kZWRSZWN0Pihyb3VuZGVk
UmVjdCk7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBQYXRoIHNoYXBl
UGF0aDsKLSAgICBzaGFwZVBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZFJlY3QpOwotICAgIFso
Q0FTaGFwZUxheWVyICopbV9sYXllciBzZXRQYXRoOnNoYXBlUGF0aC5wbGF0Zm9ybVBhdGgoKV07
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi1XaW5kUnVsZSBQbGF0Zm9ybUNB
TGF5ZXJNYWM6OnNoYXBlV2luZFJ1bGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX2xheWVyVHlw
ZSA9PSBMYXllclR5cGVTaGFwZUxheWVyKTsKLQotICAgIE5TU3RyaW5nICpmaWxsUnVsZSA9IFso
Q0FTaGFwZUxheWVyICopbV9sYXllciBmaWxsUnVsZV07Ci0gICAgaWYgKFtmaWxsUnVsZSBpc0Vx
dWFsVG9TdHJpbmc6QCJldmVuLW9kZCJdKQotICAgICAgICByZXR1cm4gUlVMRV9FVkVOT0REOwot
Ci0gICAgcmV0dXJuIFJVTEVfTk9OWkVSTzsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6
OnNldFNoYXBlV2luZFJ1bGUoV2luZFJ1bGUgd2luZFJ1bGUpCi17Ci0gICAgQVNTRVJUKG1fbGF5
ZXJUeXBlID09IExheWVyVHlwZVNoYXBlTGF5ZXIpOwotCi0gICAgc3dpdGNoICh3aW5kUnVsZSkg
ewotICAgIGNhc2UgUlVMRV9OT05aRVJPOgotICAgICAgICBbKENBU2hhcGVMYXllciAqKW1fbGF5
ZXIgc2V0RmlsbFJ1bGU6QCJub24temVybyJdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJV
TEVfRVZFTk9ERDoKLSAgICAgICAgWyhDQVNoYXBlTGF5ZXIgKiltX2xheWVyIHNldEZpbGxSdWxl
OkAiZXZlbi1vZGQiXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1QYXRoIFBsYXRmb3Jt
Q0FMYXllck1hYzo6c2hhcGVQYXRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9sYXllclR5cGUg
PT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKLSAgICByZXR1cm4gUGF0aChDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShbKENBU2hhcGVMYXll
ciAqKW1fbGF5ZXIgcGF0aF0pKTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0K
LXZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpzZXRTaGFwZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7Ci0KLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBbKENBU2hhcGVMYXllciAqKW1fbGF5
ZXIgc2V0UGF0aDpwYXRoLnBsYXRmb3JtUGF0aCgpXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TCi19Ci0KLWJvb2wgUGxhdGZvcm1DQUxheWVyTWFjOjpyZXF1aXJlc0N1c3RvbUFwcGVh
cmFuY2VVcGRhdGVPbkJvdW5kc0NoYW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VzdG9t
QXBwZWFyYW5jZSA9PSBHcmFwaGljc0xheWVyOjpTY3JvbGxpbmdTaGFkb3c7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1DQUxheWVyTWFjOjp1cGRhdGVDdXN0b21BcHBlYXJhbmNlKEdyYXBoaWNzTGF5ZXI6
OkN1c3RvbUFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKLXsKLSAgICBpZiAobV9jdXN0b21BcHBlYXJh
bmNlID09IGFwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VzdG9tQXBwZWFy
YW5jZSA9IGFwcGVhcmFuY2U7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgc3dp
dGNoIChhcHBlYXJhbmNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0xheWVyOjpOb0N1c3RvbUFwcGVh
cmFuY2U6Ci0gICAgY2FzZSBHcmFwaGljc0xheWVyOjpMaWdodEJhY2tkcm9wQXBwZWFyYW5jZToK
LSAgICBjYXNlIEdyYXBoaWNzTGF5ZXI6OkRhcmtCYWNrZHJvcEFwcGVhcmFuY2U6Ci0gICAgICAg
IFNjcm9sbGJhclRoZW1lTWFjOjpyZW1vdmVPdmVyaGFuZ0FyZWFCYWNrZ3JvdW5kKHBsYXRmb3Jt
TGF5ZXIoKSk7Ci0gICAgICAgIFNjcm9sbGJhclRoZW1lTWFjOjpyZW1vdmVPdmVyaGFuZ0FyZWFT
aGFkb3cocGxhdGZvcm1MYXllcigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0xheWVyOjpTY3JvbGxpbmdPdmVyaGFuZzoKLSAgICAgICAgU2Nyb2xsYmFyVGhlbWVNYWM6OnNl
dFVwT3ZlcmhhbmdBcmVhQmFja2dyb3VuZChwbGF0Zm9ybUxheWVyKCkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzTGF5ZXI6OlNjcm9sbGluZ1NoYWRvdzoKLSAgICAgICAgU2Ny
b2xsYmFyVGhlbWVNYWM6OnNldFVwT3ZlcmhhbmdBcmVhU2hhZG93KHBsYXRmb3JtTGF5ZXIoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotfQotCi1UaWxlZEJhY2tpbmcqIFBsYXRm
b3JtQ0FMYXllck1hYzo6dGlsZWRCYWNraW5nKCkKLXsKLSAgICBpZiAoIXVzZXNUaWxlZEJhY2tp
bmdMYXllcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFdlYlRpbGVkQmFja2lu
Z0xheWVyICp0aWxlZEJhY2tpbmdMYXllciA9IHN0YXRpY19jYXN0PFdlYlRpbGVkQmFja2luZ0xh
eWVyICo+KG1fbGF5ZXIuZ2V0KCkpOwotICAgIHJldHVybiBbdGlsZWRCYWNraW5nTGF5ZXIgdGls
ZWRCYWNraW5nXTsKLX0KLQotI2lmIFBMQVRGT1JNKElPUykKLWJvb2wgUGxhdGZvcm1DQUxheWVy
Ojppc1dlYkxheWVyKCkKLXsKLSAgICBCT09MIHJlc3VsdCA9IE5POwotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwotICAgIHJlc3VsdCA9IFttX2xheWVyIGlzS2luZE9mQ2xhc3M6W1dl
YkxheWVyIHNlbGZdXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kc09uTWFpblRocmVh
ZChDR1JlY3QgYm91bmRzKQotewotICAgIENBTGF5ZXIgKmxheWVyID0gbV9sYXllci5nZXQoKTsK
LSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgW2xheWVyIHNldEJvdW5kczpi
b3VuZHNdOwotICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgfSk7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRQb3NpdGlvbk9uTWFpblRocmVhZChDR1BvaW50IHBv
c2l0aW9uKQotewotICAgIENBTGF5ZXIgKmxheWVyID0gbV9sYXllci5nZXQoKTsKLSAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgW2xheWVyIHNldFBvc2l0aW9uOnBvc2l0aW9u
XTsKLSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIH0pOwotfQotCi12b2lk
IFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnRPbk1haW5UaHJlYWQoRmxvYXRQb2ludDNE
IHZhbHVlKQotewotICAgIENBTGF5ZXIgKmxheWVyID0gbV9sYXllci5nZXQoKTsKLSAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgW2xheWVyIHNldEFuY2hvclBvaW50OkNHUG9p
bnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgpKV07Ci0gICAgICAgIFtsYXllciBzZXRBbmNob3JQ
b2ludFo6dmFsdWUueigpXTsKLSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAg
IH0pOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUpCi17Ci0gICAgaWYgKG1fbGF5ZXJUeXBlICE9IExheWVyVHlwZVdlYlRpbGVk
TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwotICAgIFtzdGF0aWNfY2FzdDxXZWJUaWxlZExheWVyKj4obV9sYXllci5nZXQoKSkgc2V0VGls
ZVNpemU6dGlsZVNpemVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCi0KLVBsYXRmb3JtQ0FMYXllcjo6UmVwYWludFJlY3RMaXN0IFBs
YXRmb3JtQ0FMYXllcjo6Y29sbGVjdFJlY3RzVG9QYWludChDR0NvbnRleHRSZWYgY29udGV4dCwg
UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIpCi17Ci0gICAgX19ibG9jayBkb3VibGUg
dG90YWxSZWN0QXJlYSA9IDA7Ci0gICAgX19ibG9jayB1bnNpZ25lZCByZWN0Q291bnQgPSAwOwot
ICAgIF9fYmxvY2sgUmVwYWludFJlY3RMaXN0IGRpcnR5UmVjdHM7Ci0gICAgCi0gICAgcGxhdGZv
cm1DQUxheWVyLT5lbnVtZXJhdGVSZWN0c0JlaW5nRHJhd24oY29udGV4dCwgXihDR1JlY3QgcmVj
dCkgewotICAgICAgICBpZiAoKytyZWN0Q291bnQgPiB3ZWJMYXllck1heFJlY3RzVG9QYWludCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHRvdGFsUmVjdEFyZWEgKz0g
cmVjdC5zaXplLndpZHRoICogcmVjdC5zaXplLmhlaWdodDsKLSAgICAgICAgZGlydHlSZWN0cy5h
cHBlbmQocmVjdCk7Ci0gICAgfSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBD
R0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7Ci0gICAgZG91YmxlIGNsaXBBcmVh
ID0gY2xpcEJvdW5kcy53aWR0aCgpICogY2xpcEJvdW5kcy5oZWlnaHQoKTsKLSAgICAKLSAgICBp
ZiAocmVjdENvdW50ID49IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50IHx8IHRvdGFsUmVjdEFyZWEg
Pj0gY2xpcEFyZWEgKiB3ZWJMYXllcldhc3RlZFNwYWNlVGhyZXNob2xkKSB7Ci0gICAgICAgIGRp
cnR5UmVjdHMuY2xlYXIoKTsKLSAgICAgICAgZGlydHlSZWN0cy5hcHBlbmQoY2xpcEJvdW5kcyk7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBkaXJ0eVJlY3RzOwotfQotCi12b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6ZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyLCBSZXBhaW50UmVjdExpc3QmIGRpcnR5
UmVjdHMpCi17Ci0gICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBsYXllckNvbnRl
bnRzID0gcGxhdGZvcm1DQUxheWVyLT5vd25lcigpOwotICAgIGlmICghbGF5ZXJDb250ZW50cykK
LSAgICAgICAgcmV0dXJuOwotICAgIAotI2lmIFBMQVRGT1JNKElPUykKLSAgICBXS1NldEN1cnJl
bnRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7Ci0jZW5kaWYKLSAgICAKLSAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOwotICAgIAotICAgIC8vIFdlIG5ldmVyIHVzZSBDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzQm90dG9tVXAgb24gTWFjLgotICAgIEFTU0VSVChsYXllckNvbnRlbnRzLT5w
bGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgPT0gR3JhcGhpY3NMYXllcjo6Q29t
cG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pOwotICAgIAotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICBGb250QW50aWFsaWFzaW5nU3RhdGVTYXZlciBmb250QW50aWFsaWFzaW5nU3RhdGUoY29udGV4
dCwgW3BsYXRmb3JtQ0FMYXllci0+cGxhdGZvcm1MYXllcigpIGlzT3BhcXVlXSk7Ci0gICAgZm9u
dEFudGlhbGlhc2luZ1N0YXRlLnNldHVwKFtXQUtXaW5kb3cgaGFzTGFuZHNjYXBlT3JpZW50YXRp
b25dKTsKLSNlbHNlCi0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsK
LSAgICAKLSAgICAvLyBTZXQgdXAgYW4gTlNHcmFwaGljc0NvbnRleHQgZm9yIHRoZSBjb250ZXh0
LCBzbyB0aGF0IHBhcnRzIG9mIEFwcEtpdCB0aGF0IHJlbHkgb24KLSAgICAvLyB0aGUgY3VycmVu
dCBOU0dyYXBoaWNzQ29udGV4dCAoZS5nLiBOU0NlbGwgZHJhd2luZykgZ2V0IHRoZSByaWdodCBv
bmUuCi0gICAgTlNHcmFwaGljc0NvbnRleHQqIGxheWVyQ29udGV4dCA9IFtOU0dyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmNvbnRleHQgZmxpcHBlZDpZRVNd
OwotICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpsYXllckNvbnRleHRd
OwotI2VuZGlmCi0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKLSAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKLSAg
ICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQocGxhdGZvcm1DQUxheWVy
LT5hY2NlbGVyYXRlc0RyYXdpbmcoKSk7Ci0gICAgCi0gICAgaWYgKCFsYXllckNvbnRlbnRzLT5w
bGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpKSB7Ci0gICAgICAgIC8vIFR1cm4gb2ZmIGZv
bnQgc21vb3RoaW5nIHRvIGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGV4dCByZW5kZXJlZCBv
bnRvIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dFNob3VsZFNtb290aEZvbnRzKGZhbHNlKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEFu
dGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCh0cnVlKTsKLSAgICB9Ci0gICAgCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRo
ZSBjb250ZXh0LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZpY2FudGx5Ci0gICAgLy8gc21hbGxl
ciB0aGFuIHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQotICAgIFRoZW1lTWFj
OjpzZXRGb2N1c1JpbmdDbGlwUmVjdChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4
dCkpOwotI2VuZGlmCi0gICAgCi0gICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogZGlydHlSZWN0
cykgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhp
Y3NDb250ZXh0KTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocmVjdCk7Ci0gICAgICAg
IAotICAgICAgICBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKHBs
YXRmb3JtQ0FMYXllciwgZ3JhcGhpY3NDb250ZXh0LCByZWN0KTsKLSAgICB9Ci0gICAgCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5yZXN0b3JlKCk7Ci0jZWxz
ZQotICAgIFRoZW1lTWFjOjpzZXRGb2N1c1JpbmdDbGlwUmVjdChGbG9hdFJlY3QoKSk7Ci0gICAg
Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKLSNlbmRpZgot
ICAgIAotICAgIC8vIFJlLWZldGNoIHRoZSBsYXllciBvd25lciwgc2luY2UgPHJkYXI6Ly9wcm9i
bGVtLzkxMjUxNTE+IGluZGljYXRlcyB0aGF0IGl0IG1pZ2h0IGhhdmUgYmVlbiBkZXN0cm95ZWQg
ZHVyaW5nIHBhaW50aW5nLgotICAgIGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUNBTGF5ZXItPm93
bmVyKCk7Ci0gICAgQVNTRVJUKGxheWVyQ29udGVudHMpOwotICAgIAotICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7Ci0gICAgCi0gICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgcmVw
YWludCBjb3VudCBzbyB0aGF0IGl0J3MgYWNjdXJhdGUgZXZlbiBpZiB0aGUgY291bnQgaXRzZWxm
IGlzIG5vdCBzaG93bi4gVGhpcyB3aWxsIGJlIHVzZWZ1bAotICAgIC8vIGZvciB0aGUgV2ViIElu
c3BlY3RvciBmZWVkaW5nIHRoaXMgaW5mb3JtYXRpb24gdGhyb3VnaCB0aGUgTGF5ZXJUcmVlQWdl
bnQuCi0gICAgaW50IHJlcGFpbnRDb3VudCA9IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXll
ckluY3JlbWVudFJlcGFpbnRDb3VudChwbGF0Zm9ybUNBTGF5ZXIpOwotICAgIAotICAgIGlmICgh
cGxhdGZvcm1DQUxheWVyLT51c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSAmJiBsYXllckNvbnRlbnRz
ICYmIGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihwbGF0
Zm9ybUNBTGF5ZXIpKQotICAgICAgICBkcmF3UmVwYWludEluZGljYXRvcihjb250ZXh0LCBwbGF0
Zm9ybUNBTGF5ZXIsIHJlcGFpbnRDb3VudCwgbnVsbHB0cik7Ci19Ci0KLUNHUmVjdCBQbGF0Zm9y
bUNBTGF5ZXI6OmZyYW1lRm9yTGF5ZXIoY29uc3QgUGxhdGZvcm1MYXllciogdGlsZUxheWVyKQot
ewotICAgIHJldHVybiBbdGlsZUxheWVyIGZyYW1lXTsKLX0KLQotUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBj
bGllbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKGxh
eWVyVHlwZSwgY2xpZW50KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmVudW1lcmF0
ZVJlY3RzQmVpbmdEcmF3bihDR0NvbnRleHRSZWYgY29udGV4dCwgdm9pZCAoXmJsb2NrKShDR1Jl
Y3QpKQotewotICAgIHdrQ0FMYXllckVudW1lcmF0ZVJlY3RzQmVpbmdEcmF3bldpdGhCbG9jayht
X2xheWVyLmdldCgpLCBjb250ZXh0LCBibG9jayk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXll
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmNiOTdiOTMzZWViOTRhMTY4Nzc0
NjNlMjliNzA1YWUwN2U2MGE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxl
ZEJhY2tpbmdMYXllci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdlYlRpbGVkQmFj
a2luZ0xheWVyX2gKLSNkZWZpbmUgV2ViVGlsZWRCYWNraW5nTGF5ZXJfaAotCi0jaW1wb3J0IDxR
dWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50
UmVjdDsKLWNsYXNzIFBsYXRmb3JtQ0FMYXllcjsKLWNsYXNzIFRpbGVDb250cm9sbGVyOwotY2xh
c3MgVGlsZWRCYWNraW5nOwotfQotCi1AaW50ZXJmYWNlIFdlYlRpbGVkQmFja2luZ0xheWVyIDog
Q0FMYXllciB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRpbGVDb250cm9sbGVyPiBf
dGlsZUNvbnRyb2xsZXI7Ci19Ci0KLS0gKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyKiljcmVhdGVU
aWxlQ29udHJvbGxlcjooV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKilyb290TGF5ZXI7Ci0tIChX
ZWJDb3JlOjpUaWxlZEJhY2tpbmcqKXRpbGVkQmFja2luZzsKLS0gKHZvaWQpaW52YWxpZGF0ZTsK
LQotQGVuZAotCi0jZW5kaWYgLy8gV2ViVGlsZWRCYWNraW5nTGF5ZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xh
eWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVk
QmFja2luZ0xheWVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjIxYzM4ZWNm
NjRlMDVkMDIwODZhNWI1ZWI1M2RjMWNlODI2NTgzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCIKLQotI2ltcG9y
dCAiSW50UmVjdC5oIgotI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPHd0Zi9N
YWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW1wbGVtZW50YXRp
b24gV2ViVGlsZWRCYWNraW5nTGF5ZXIKLQotLSAoaWQpaW5pdAotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0jaWZuZGVm
IE5ERUJVRwotICAgIFtzZWxmIHNldE5hbWU6QCJXZWJUaWxlZEJhY2tpbmdMYXllciJdOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIEFTU0VS
VCghX3RpbGVDb250cm9sbGVyKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaWQp
aW5pdFdpdGhMYXllcjooaWQpbGF5ZXIKLXsKLSAgICBVTlVTRURfUEFSQU0obGF5ZXIpOwotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoVGlsZUNv
bnRyb2xsZXIqKWNyZWF0ZVRpbGVDb250cm9sbGVyOihQbGF0Zm9ybUNBTGF5ZXIqKXJvb3RMYXll
cgotewotICAgIEFTU0VSVCghX3RpbGVDb250cm9sbGVyKTsKLSAgICBfdGlsZUNvbnRyb2xsZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlRpbGVDb250cm9sbGVyPihyb290TGF5ZXIpOwot
ICAgIHJldHVybiBfdGlsZUNvbnRyb2xsZXIuZ2V0KCk7Ci19Ci0KLS0gKGlkPENBQWN0aW9uPilh
Y3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7Ci0g
ICAgCi0gICAgLy8gRGlzYWJsZSBhbGwgYW5pbWF0aW9ucy4KLSAgICByZXR1cm4gbmlsOwotfQot
Ci0tICh2b2lkKXNldEJvdW5kczooQ0dSZWN0KWJvdW5kcwotewotICAgIFtzdXBlciBzZXRCb3Vu
ZHM6Ym91bmRzXTsKLQotICAgIF90aWxlQ29udHJvbGxlci0+dGlsZUNhY2hlTGF5ZXJCb3VuZHND
aGFuZ2VkKCk7Ci19Ci0KLS0gKHZvaWQpc2V0T3BhcXVlOihCT09MKW9wYXF1ZQotewotICAgIF90
aWxlQ29udHJvbGxlci0+c2V0VGlsZXNPcGFxdWUob3BhcXVlKTsKLX0KLQotLSAoQk9PTClpc09w
YXF1ZQotewotICAgIHJldHVybiBfdGlsZUNvbnRyb2xsZXIgPyBfdGlsZUNvbnRyb2xsZXItPnRp
bGVzQXJlT3BhcXVlKCkgOiBOTzsKLX0KLQotLSAodm9pZClzZXROZWVkc0Rpc3BsYXkKLXsKLSAg
ICBfdGlsZUNvbnRyb2xsZXItPnNldE5lZWRzRGlzcGxheSgpOwotfQotCi0tICh2b2lkKXNldE5l
ZWRzRGlzcGxheUluUmVjdDooQ0dSZWN0KXJlY3QKLXsKLSAgICBfdGlsZUNvbnRyb2xsZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKLX0KLQotLSAodm9p
ZClzZXRBY2NlbGVyYXRlc0RyYXdpbmc6KEJPT0wpYWNjZWxlcmF0ZXNEcmF3aW5nCi17Ci0gICAg
X3RpbGVDb250cm9sbGVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoYWNjZWxlcmF0ZXNEcmF3aW5n
KTsKLX0KLQotLSAoQk9PTClhY2NlbGVyYXRlc0RyYXdpbmcKLXsKLSAgICByZXR1cm4gX3RpbGVD
b250cm9sbGVyID8gX3RpbGVDb250cm9sbGVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSA6IE5POwot
fQotCi0tICh2b2lkKXNldENvbnRlbnRzU2NhbGU6KENHRmxvYXQpY29udGVudHNTY2FsZQotewot
ICAgIF90aWxlQ29udHJvbGxlci0+c2V0Q29udGVudHNTY2FsZShjb250ZW50c1NjYWxlKTsKLX0K
LQotLSAoQ0dGbG9hdCljb250ZW50c1NjYWxlCi17Ci0gICAgcmV0dXJuIF90aWxlQ29udHJvbGxl
ciA/IF90aWxlQ29udHJvbGxlci0+Y29udGVudHNTY2FsZSgpIDogMTsKLX0KLQotLSAoV2ViQ29y
ZTo6VGlsZWRCYWNraW5nKil0aWxlZEJhY2tpbmcKLXsKLSAgICByZXR1cm4gX3RpbGVDb250cm9s
bGVyLmdldCgpOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIEFTU0VSVChfdGlsZUNvbnRyb2xsZXIpOwotICAgIF90aWxlQ29udHJv
bGxlciA9IG51bGxwdHI7Ci19Ci0KLS0gKHZvaWQpc2V0Qm9yZGVyQ29sb3I6KENHQ29sb3JSZWYp
Ym9yZGVyQ29sb3IKLXsKLSAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNv
bG9yKENvbG9yKGJvcmRlckNvbG9yKSk7Ci19Ci0KLS0gKHZvaWQpc2V0Qm9yZGVyV2lkdGg6KENH
RmxvYXQpYm9yZGVyV2lkdGgKLXsKLSAgICAvLyBUaWxlcyBhZGpvaW4sIHNvIGhhbHZlIHRoZSBi
b3JkZXIgd2lkdGguCi0gICAgX3RpbGVDb250cm9sbGVyLT5zZXRUaWxlRGVidWdCb3JkZXJXaWR0
aChib3JkZXJXaWR0aCAvIDIpOwotfQotCi1AZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGUubW0KaW5kZXggYTQ0MTE0MzcxNjJkZTA0ZDUxYzVjN2QxNTZlYTRkMWIzZmJjY2RiOS4u
NzM5NGQwYjBiNDcwM2E1N2FlYzcwZjQxNjQ1YWFjYzQ5NmU3NGI1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZS5tbQpAQCAtMzEsNyArMzEsNyBAQAogI2ltcG9ydCAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0aW9ucy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRm
b3JtQ0FBbmltYXRpb25NYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FGaWx0ZXJzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1RpbWluZ0Z1bmN0aW9uLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRleCBkMDgzNGJjMDcwMDk2YWQ3NGE1YmJh
YWNkZDM5ZDVkODAwMGZlOGZiLi43NmQzNTdhMmM5NDIyZjgzMTVhZjBiOWI0ZGMyOTEyNzM4MjBh
ZGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAj
aW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDQS5oPgogI2ltcG9ydCA8V2ViQ29yZS9MZW5n
dGhGdW5jdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUZpbHRlcnMuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bs
YXRmb3JtQ0FMYXllckNvY29hLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RpbGVkQmFja2luZy5oPgog
I2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBA
IC02NTEsNyArNjUxLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEJsZW5kTW9k
ZShCbGVuZE1vZGUgYmxlbmRNb2RlKQogCiBib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Zmls
dGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogewot
ICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmls
dGVycyk7CisgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllckNvY29hOjpmaWx0ZXJzQ2FuQmVDb21w
b3NpdGVkKGZpbHRlcnMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0TmFt
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3Rv
bS5tbQppbmRleCAyMDE4YmJmYzkzMzU0MzZiZGI1MDI2OTNkNTMzMGE5NmI0MWFjZDRhLi4xMTBk
OTQ2NWUzMzQxNTczOTM3NDFmM2ZjMmRmZTU3ZWUxOTZiMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3Rv
bS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3Jt
Q0FMYXllclJlbW90ZUN1c3RvbS5tbQpAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAiV2ViUHJv
Y2Vzcy5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0xheWVyQ0EuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxh
eWVyTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllckNvY29hLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVDQUxh
eWVyRXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OCw3ICs0OCw3IEBA
IHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBsYXRmb3JtQ0FMYXllclBvaW50ZXIgPSBAIldLUGxh
dGZvcm1DQUxheWVyIjsKIAogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRm
b3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y3JlYXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5
ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQm
IGNvbnRleHQpCiB7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKFBsYXRmb3JtQ0FMYXllck1h
Yzo6bGF5ZXJUeXBlRm9yUGxhdGZvcm1MYXllcihwbGF0Zm9ybUxheWVyKSwgcGxhdGZvcm1MYXll
ciwgb3duZXIsIGNvbnRleHQpKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oUGxhdGZvcm1D
QUxheWVyQ29jb2E6OmxheWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIocGxhdGZvcm1MYXllciksIHBs
YXRmb3JtTGF5ZXIsIG93bmVyLCBjb250ZXh0KSk7CiAgICAgY29udGV4dC5sYXllcldhc0NyZWF0
ZWQoKmxheWVyLCBsYXllci0+bGF5ZXJUeXBlKCkpOwogCiAgICAgcmV0dXJuIGxheWVyLnJlbGVh
c2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nLmNw
cAppbmRleCAwYmE0YTMzM2E3NzA1ZGRjMGNiZmY2N2NjNjYyYTViYTJkY2Q3N2VmLi4wNThhZTJh
OTkxNzZhNDRhODNjMWE4ZjhjNjQzMDdkYzcwMzUxYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFj
a2luZy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0
Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmcuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNp
bXBvcnQgIlJlbW90ZUxheWVyVHJlZUNvbnRleHQuaCIKICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllckNBLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllck1hYy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9U
aWxlZEJhY2tpbmcuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KaW5kZXggOGQzYWYwY2FlNjlhNDhkYjE0MGUz
M2IwMmI3ODNmZWM3N2Y4OTE2Ny4uZWEyZDMyODJmMmFhMzk3YjE4MDQ3ZGJmMzkyOTgwZGM3M2M2
MWQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9U
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCkBAIC00
Niw3ICs0Niw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNr
aW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRvci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CkBAIC03NTMsNyArNzUzLDcgQEAgdm9pZCBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Y29tbWl0VHJhbnNpZW50Wm9vbShkb3VibGUgc2NhbGUs
IEZsb2F0UG9pbnQKICAgICB0cmFuc2Zvcm0uc2NhbGUoc2NhbGUpOwogCiAgICAgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IHJlbmRlclZpZXdBbmltYXRpb25DQSA9IHRyYW5zaWVudFpvb21T
bmFwQW5pbWF0aW9uRm9yS2V5UGF0aCgidHJhbnNmb3JtIik7Ci0gICAgUmVmUHRyPFBsYXRmb3Jt
Q0FBbmltYXRpb24+IHJlbmRlclZpZXdBbmltYXRpb24gPSBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFj
OjpjcmVhdGUocmVuZGVyVmlld0FuaW1hdGlvbkNBLmdldCgpKTsKKyAgICBSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4gcmVuZGVyVmlld0FuaW1hdGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6Y3JlYXRlKHJlbmRlclZpZXdBbmltYXRpb25DQS5nZXQoKSk7CiAgICAgcmVuZGVyVmll
d0FuaW1hdGlvbi0+c2V0VG9WYWx1ZSh0cmFuc2Zvcm0pOwogCiAgICAgUmV0YWluUHRyPENBTGF5
ZXI+IHNoYWRvd0NBTGF5ZXI7Cg==
</data>
<flag name="review"
          id="280463"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>